From abe05a734da20226ce433b65a216aa861cc0b9c1 Mon Sep 17 00:00:00 2001 From: Ximin Luo Date: Sat, 13 Jan 2018 17:30:00 +0100 Subject: [PATCH] New upstream version 1.23.0+dfsg1 --- CONTRIBUTING.md | 116 +- README.md | 3 +- RELEASES.md | 100 +- config.toml.example | 32 +- git-commit-hash | 2 +- src/Cargo.lock | 941 +- src/Cargo.toml | 13 +- src/binaryen/.travis.yml | 165 + src/binaryen/CMakeLists.txt | 312 + src/binaryen/Contributing.md | 8 + src/binaryen/LICENSE | 201 + src/binaryen/README.md | 241 + src/binaryen/appveyor.yml | 35 + src/binaryen/auto_update_tests.py | 309 + .../bin/empty.txt} | 0 src/binaryen/build-js.sh | 393 + src/binaryen/check.py | 596 + src/binaryen/docs/binaryen.js.Markdown | 240 + src/binaryen/media/example.png | Bin 0 -> 27494 bytes src/binaryen/scripts/__init__.py | 17 + src/binaryen/scripts/clean_c_api_trace.py | 23 + src/binaryen/scripts/fuzz_passes.py | 147 + src/binaryen/scripts/fuzz_passes_wast.py | 139 + src/binaryen/scripts/fuzz_relooper.py | 328 + .../scripts/process_optimize_instructions.py | 16 + src/binaryen/scripts/spidermonkify.py | 52 + src/binaryen/scripts/storage.py | 53 + src/binaryen/scripts/strip_local_names.py | 13 + src/binaryen/scripts/test/__init__.py | 17 + src/binaryen/scripts/test/asm2wasm.py | 162 + src/binaryen/scripts/test/s2wasm.py | 135 + src/binaryen/scripts/test/shared.py | 426 + src/binaryen/scripts/test/support.py | 167 + src/binaryen/scripts/test/wasm2asm.py | 92 + src/binaryen/setup.cfg | 4 + src/binaryen/src/asm2wasm.h | 2666 + src/binaryen/src/asm_v_wasm.h | 78 + src/binaryen/src/asmjs/CMakeLists.txt | 5 + src/binaryen/src/asmjs/asm_v_wasm.cpp | 124 + src/binaryen/src/asmjs/shared-constants.cpp | 88 + src/binaryen/src/asmjs/shared-constants.h | 93 + src/binaryen/src/binaryen-c.cpp | 1336 + src/binaryen/src/binaryen-c.h | 538 + src/binaryen/src/cfg/CMakeLists.txt | 4 + src/binaryen/src/cfg/Relooper.cpp | 1027 + src/binaryen/src/cfg/Relooper.h | 361 + src/binaryen/src/cfg/cfg-traversal.h | 344 + src/binaryen/src/compiler-support.h | 56 + .../src/emscripten-optimizer/CMakeLists.txt | 6 + .../src/emscripten-optimizer/istring.h | 187 + .../emscripten-optimizer/optimizer-shared.cpp | 238 + .../src/emscripten-optimizer/optimizer.h | 152 + .../src/emscripten-optimizer/parser.cpp | 161 + .../src/emscripten-optimizer/parser.h | 960 + .../src/emscripten-optimizer/simple_ast.cpp | 371 + .../src/emscripten-optimizer/simple_ast.h | 1653 + .../src/emscripten-optimizer/snprintf.h | 53 + src/binaryen/src/ir/CMakeLists.txt | 6 + src/binaryen/src/ir/ExpressionAnalyzer.cpp | 558 + src/binaryen/src/ir/ExpressionManipulator.cpp | 177 + src/binaryen/src/ir/LocalGraph.cpp | 273 + src/binaryen/src/ir/bits.h | 107 + src/binaryen/src/ir/block-utils.h | 67 + src/binaryen/src/ir/branch-utils.h | 183 + src/binaryen/src/ir/cost.h | 255 + src/binaryen/src/ir/count.h | 50 + src/binaryen/src/ir/effects.h | 281 + src/binaryen/src/ir/find_all.h | 48 + src/binaryen/src/ir/global-utils.h | 55 + src/binaryen/src/ir/hashed.h | 59 + src/binaryen/src/ir/import-utils.h | 41 + src/binaryen/src/ir/label-utils.h | 62 + src/binaryen/src/ir/literal-utils.h | 56 + src/binaryen/src/ir/load-utils.h | 45 + src/binaryen/src/ir/local-graph.h | 111 + src/binaryen/src/ir/localize.h | 47 + src/binaryen/src/ir/manipulation.h | 69 + src/binaryen/src/ir/memory-utils.h | 56 + src/binaryen/src/ir/module-utils.h | 59 + src/binaryen/src/ir/names.h | 53 + src/binaryen/src/ir/properties.h | 141 + src/binaryen/src/ir/trapping.h | 120 + src/binaryen/src/ir/type-updating.h | 286 + src/binaryen/src/ir/utils.h | 360 + src/binaryen/src/js/binaryen.js-post.js | 1180 + src/binaryen/src/js/binaryen.js-pre.js | 2 + src/binaryen/src/literal.h | 175 + src/binaryen/src/mixed_arena.h | 322 + src/binaryen/src/parsing.h | 315 + src/binaryen/src/pass.h | 271 + src/binaryen/src/passes/CMakeLists.txt | 44 + src/binaryen/src/passes/CoalesceLocals.cpp | 828 + src/binaryen/src/passes/CodeFolding.cpp | 616 + src/binaryen/src/passes/CodePushing.cpp | 265 + src/binaryen/src/passes/ConstHoisting.cpp | 131 + .../src/passes/DeadCodeElimination.cpp | 407 + .../passes/DuplicateFunctionElimination.cpp | 186 + src/binaryen/src/passes/ExtractFunction.cpp | 52 + src/binaryen/src/passes/Flatten.cpp | 351 + src/binaryen/src/passes/I64ToI32Lowering.cpp | 1216 + src/binaryen/src/passes/Inlining.cpp | 346 + src/binaryen/src/passes/InstrumentLocals.cpp | 140 + src/binaryen/src/passes/InstrumentMemory.cpp | 124 + .../src/passes/LegalizeJSInterface.cpp | 245 + src/binaryen/src/passes/LocalCSE.cpp | 156 + src/binaryen/src/passes/LogExecution.cpp | 77 + src/binaryen/src/passes/MemoryPacking.cpp | 80 + src/binaryen/src/passes/MergeBlocks.cpp | 411 + src/binaryen/src/passes/Metrics.cpp | 114 + src/binaryen/src/passes/NameList.cpp | 40 + .../src/passes/OptimizeInstructions.cpp | 1002 + .../src/passes/OptimizeInstructions.wast | 27 + .../OptimizeInstructions.wast.processed | 27 + src/binaryen/src/passes/PickLoadSigns.cpp | 111 + src/binaryen/src/passes/PostEmscripten.cpp | 120 + src/binaryen/src/passes/Precompute.cpp | 303 + src/binaryen/src/passes/Print.cpp | 916 + src/binaryen/src/passes/PrintCallGraph.cpp | 111 + src/binaryen/src/passes/ReReloop.cpp | 370 + .../src/passes/RelooperJumpThreading.cpp | 249 + src/binaryen/src/passes/RemoveImports.cpp | 59 + src/binaryen/src/passes/RemoveMemory.cpp | 36 + src/binaryen/src/passes/RemoveUnusedBrs.cpp | 571 + .../src/passes/RemoveUnusedModuleElements.cpp | 221 + src/binaryen/src/passes/RemoveUnusedNames.cpp | 98 + src/binaryen/src/passes/ReorderFunctions.cpp | 66 + src/binaryen/src/passes/ReorderLocals.cpp | 140 + src/binaryen/src/passes/SSAify.cpp | 193 + src/binaryen/src/passes/SafeHeap.cpp | 328 + src/binaryen/src/passes/SimplifyLocals.cpp | 566 + src/binaryen/src/passes/TrapMode.cpp | 318 + src/binaryen/src/passes/Untee.cpp | 61 + src/binaryen/src/passes/Vacuum.cpp | 364 + src/binaryen/src/passes/pass.cpp | 333 + src/binaryen/src/passes/passes.h | 77 + src/binaryen/src/pretty_printing.h | 81 + src/binaryen/src/s2wasm.h | 1530 + src/binaryen/src/shared-constants.h | 64 + src/binaryen/src/shell-interface.h | 191 + src/binaryen/src/support/CMakeLists.txt | 11 + src/binaryen/src/support/archive.cpp | 235 + src/binaryen/src/support/archive.h | 105 + src/binaryen/src/support/bits.cpp | 127 + src/binaryen/src/support/bits.h | 87 + src/binaryen/src/support/colors.cpp | 54 + src/binaryen/src/support/colors.h | 57 + src/binaryen/src/support/command-line.cpp | 175 + src/binaryen/src/support/command-line.h | 73 + src/binaryen/src/support/file.cpp | 87 + src/binaryen/src/support/file.h | 78 + src/binaryen/src/support/hash.h | 44 + src/binaryen/src/support/learning.h | 111 + src/binaryen/src/support/name.h | 65 + src/binaryen/src/support/permutations.h | 55 + src/binaryen/src/support/safe_integer.cpp | 165 + src/binaryen/src/support/safe_integer.h | 44 + src/binaryen/src/support/threads.cpp | 204 + src/binaryen/src/support/threads.h | 129 + src/binaryen/src/support/timing.h | 55 + src/binaryen/src/support/utilities.h | 83 + src/binaryen/src/templates/normal.js | 4 + src/binaryen/src/templates/wasm.js | 5 + src/binaryen/src/tools/asm2wasm.cpp | 227 + src/binaryen/src/tools/execution-results.h | 120 + src/binaryen/src/tools/fuzzing.h | 1352 + src/binaryen/src/tools/js-wrapper.h | 89 + src/binaryen/src/tools/optimization-options.h | 134 + src/binaryen/src/tools/s2wasm.cpp | 212 + src/binaryen/src/tools/spec-wrapper.h | 47 + src/binaryen/src/tools/tool-utils.h | 37 + src/binaryen/src/tools/wasm-as.cpp | 124 + src/binaryen/src/tools/wasm-ctor-eval.cpp | 440 + src/binaryen/src/tools/wasm-dis.cpp | 78 + src/binaryen/src/tools/wasm-merge.cpp | 640 + src/binaryen/src/tools/wasm-opt.cpp | 234 + src/binaryen/src/tools/wasm-reduce.cpp | 669 + src/binaryen/src/tools/wasm-shell.cpp | 311 + src/binaryen/src/tools/wasm2asm.cpp | 100 + src/binaryen/src/wasm-binary.h | 957 + src/binaryen/src/wasm-builder.h | 497 + src/binaryen/src/wasm-emscripten.cpp | 381 + src/binaryen/src/wasm-emscripten.h | 65 + src/binaryen/src/wasm-interpreter.cpp | 24 + src/binaryen/src/wasm-interpreter.h | 1092 + src/binaryen/src/wasm-io.h | 73 + src/binaryen/src/wasm-js.cpp | 563 + src/binaryen/src/wasm-linker.cpp | 411 + src/binaryen/src/wasm-linker.h | 342 + src/binaryen/src/wasm-module-building.h | 299 + src/binaryen/src/wasm-printing.h | 58 + src/binaryen/src/wasm-s-parser.h | 225 + src/binaryen/src/wasm-traversal.h | 829 + src/binaryen/src/wasm-type.h | 42 + src/binaryen/src/wasm-validator.h | 65 + src/binaryen/src/wasm.h | 802 + src/binaryen/src/wasm/CMakeLists.txt | 10 + src/binaryen/src/wasm/literal.cpp | 655 + src/binaryen/src/wasm/wasm-binary.cpp | 2862 + src/binaryen/src/wasm/wasm-io.cpp | 100 + src/binaryen/src/wasm/wasm-s-parser.cpp | 1967 + src/binaryen/src/wasm/wasm-type.cpp | 70 + src/binaryen/src/wasm/wasm-validator.cpp | 1040 + src/binaryen/src/wasm/wasm.cpp | 775 + src/binaryen/src/wasm2asm.h | 1748 + src/binaryen/test/__init__.py | 17 + src/binaryen/test/address.2asm.js | 85 + src/binaryen/test/atomics.wast | 161 + src/binaryen/test/atomics.wast.from-wast | 161 + src/binaryen/test/atomics.wast.fromBinary | 162 + .../test/atomics.wast.fromBinary.noDebugInfo | 162 + src/binaryen/test/bigswitch.cpp | 7946 +++ src/binaryen/test/bigswitch.txt | 5 + .../test/binaryen.js/call_import_error.js | 13 + .../test/binaryen.js/call_import_error.js.txt | 13 + src/binaryen/test/binaryen.js/emit_asmjs.js | 11 + .../test/binaryen.js/emit_asmjs.js.txt | 66 + src/binaryen/test/binaryen.js/hello-world.js | 53 + .../test/binaryen.js/hello-world.js.txt | 33 + src/binaryen/test/binaryen.js/kitchen-sink.js | 576 + .../test/binaryen.js/kitchen-sink.js.txt | 2989 + src/binaryen/test/br_table_temp.2asm.js | 50308 ++++++++++++++++ src/binaryen/test/break-to-return.wasm | Bin 0 -> 51 bytes .../test/break-to-return.wasm.fromBinary | 16 + src/binaryen/test/calls.cpp | 24 + src/binaryen/test/calls.emcc | 1 + src/binaryen/test/calls.post.js | 23 + src/binaryen/test/calls.txt | 18 + src/binaryen/test/consume-stacky.wasm | Bin 0 -> 40 bytes .../test/consume-stacky.wasm.fromBinary | 16 + src/binaryen/test/control_flow.cpp | 117 + src/binaryen/test/control_flow.emcc | 1 + src/binaryen/test/control_flow.post.js | 26 + src/binaryen/test/control_flow.txt | 77 + .../test/ctor-eval/bad-indirect-call.wast | 15 + .../ctor-eval/bad-indirect-call.wast.ctors | 1 + .../test/ctor-eval/bad-indirect-call.wast.out | 23 + .../test/ctor-eval/bad-indirect-call2.wast | 16 + .../ctor-eval/bad-indirect-call2.wast.ctors | 1 + .../ctor-eval/bad-indirect-call2.wast.out | 25 + .../test/ctor-eval/basics-flatten.wast | 36 + .../test/ctor-eval/basics-flatten.wast.ctors | 1 + .../test/ctor-eval/basics-flatten.wast.out | 35 + src/binaryen/test/ctor-eval/basics.wast | 33 + src/binaryen/test/ctor-eval/basics.wast.ctors | 1 + src/binaryen/test/ctor-eval/basics.wast.out | 35 + src/binaryen/test/ctor-eval/imported-min.wast | 48 + .../test/ctor-eval/imported-min.wast.ctors | 1 + .../test/ctor-eval/imported-min.wast.out | 34 + src/binaryen/test/ctor-eval/imported.wast | 45 + .../test/ctor-eval/imported.wast.ctors | 1 + src/binaryen/test/ctor-eval/imported.wast.out | 34 + src/binaryen/test/ctor-eval/imported2.wast | 26 + .../test/ctor-eval/imported2.wast.ctors | 1 + .../test/ctor-eval/imported2.wast.out | 30 + src/binaryen/test/ctor-eval/imported3.wast | 14 + .../test/ctor-eval/imported3.wast.ctors | 1 + .../test/ctor-eval/imported3.wast.out | 16 + .../test/ctor-eval/indirect-call3.wast | 17 + .../test/ctor-eval/indirect-call3.wast.ctors | 1 + .../test/ctor-eval/indirect-call3.wast.out | 20 + src/binaryen/test/ctor-eval/just_some.wast | 17 + .../test/ctor-eval/just_some.wast.ctors | 1 + .../test/ctor-eval/just_some.wast.out | 20 + src/binaryen/test/ctor-eval/no_partial.wast | 10 + .../test/ctor-eval/no_partial.wast.ctors | 1 + .../test/ctor-eval/no_partial.wast.out | 13 + src/binaryen/test/ctor-eval/unsafe_call.wast | 16 + .../test/ctor-eval/unsafe_call.wast.ctors | 1 + .../test/ctor-eval/unsafe_call.wast.out | 26 + src/binaryen/test/ctor-eval/unsafe_store.wast | 10 + .../test/ctor-eval/unsafe_store.wast.ctors | 1 + .../test/ctor-eval/unsafe_store.wast.out | 11 + .../test/ctor-eval/unsafe_store2.wast | 10 + .../test/ctor-eval/unsafe_store2.wast.ctors | 1 + .../test/ctor-eval/unsafe_store2.wast.out | 11 + .../test/ctor-eval/unsafe_store3.wast | 10 + .../test/ctor-eval/unsafe_store3.wast.ctors | 1 + .../test/ctor-eval/unsafe_store3.wast.out | 11 + src/binaryen/test/debugInfo.asm.js | 86 + src/binaryen/test/debugInfo.fromasm | 191 + src/binaryen/test/debugInfo.fromasm.clamp | 191 + src/binaryen/test/debugInfo.fromasm.clamp.map | 1 + .../test/debugInfo.fromasm.clamp.no-opts | 285 + .../test/debugInfo.fromasm.clamp.no-opts.map | 1 + src/binaryen/test/debugInfo.fromasm.imprecise | 183 + .../test/debugInfo.fromasm.imprecise.map | 1 + .../test/debugInfo.fromasm.imprecise.no-opts | 273 + .../debugInfo.fromasm.imprecise.no-opts.map | 1 + src/binaryen/test/debugInfo.fromasm.map | 1 + src/binaryen/test/debugInfo.fromasm.no-opts | 285 + .../test/debugInfo.fromasm.no-opts.map | 1 + src/binaryen/test/dot_s/alias.s | 51 + src/binaryen/test/dot_s/alias.wast | 70 + src/binaryen/test/dot_s/alternate-lcomm.s | 5 + src/binaryen/test/dot_s/alternate-lcomm.wast | 38 + src/binaryen/test/dot_s/asm_const.s | 24 + src/binaryen/test/dot_s/asm_const.wast | 50 + src/binaryen/test/dot_s/basics.s | 77 + src/binaryen/test/dot_s/basics.wast | 141 + src/binaryen/test/dot_s/bcp-1.s | 424 + src/binaryen/test/dot_s/bcp-1.wast | 357 + src/binaryen/test/dot_s/data-offset-folding.s | 19 + .../test/dot_s/data-offset-folding.wast | 40 + src/binaryen/test/dot_s/debug.s | 309 + src/binaryen/test/dot_s/debug.wast | 91 + src/binaryen/test/dot_s/dso_handle.s | 12 + src/binaryen/test/dot_s/dso_handle.wast | 44 + src/binaryen/test/dot_s/dyncall.c | 30 + src/binaryen/test/dot_s/dyncall.s | 97 + src/binaryen/test/dot_s/dyncall.wast | 104 + src/binaryen/test/dot_s/exit.s | 13 + src/binaryen/test/dot_s/exit.wast | 48 + src/binaryen/test/dot_s/export_malloc_free.s | 57 + .../test/dot_s/export_malloc_free.wast | 60 + src/binaryen/test/dot_s/fix_em_ehsjlj_names.s | 73 + .../test/dot_s/fix_em_ehsjlj_names.wast | 140 + .../test/dot_s/function-data-sections.s | 56 + .../test/dot_s/function-data-sections.wast | 60 + src/binaryen/test/dot_s/globals.s | 72 + src/binaryen/test/dot_s/globals.wast | 114 + src/binaryen/test/dot_s/hostFinalize.s | 9 + src/binaryen/test/dot_s/hostFinalize.wast | 48 + src/binaryen/test/dot_s/indidx.s | 93 + src/binaryen/test/dot_s/indidx.wast | 93 + src/binaryen/test/dot_s/indirect-import.c | 31 + src/binaryen/test/dot_s/indirect-import.s | 67 + src/binaryen/test/dot_s/indirect-import.wast | 173 + src/binaryen/test/dot_s/initializers.s | 33 + src/binaryen/test/dot_s/initializers.wast | 52 + .../test/dot_s/lcomm-in-text-segment.s | 12 + .../test/dot_s/lcomm-in-text-segment.wast | 39 + src/binaryen/test/dot_s/local_align.s | 26 + src/binaryen/test/dot_s/local_align.wast | 47 + src/binaryen/test/dot_s/macClangMetaData.s | 25 + src/binaryen/test/dot_s/macClangMetaData.wast | 52 + src/binaryen/test/dot_s/memops.s | 100 + src/binaryen/test/dot_s/memops.wast | 242 + src/binaryen/test/dot_s/minimal.s | 13 + src/binaryen/test/dot_s/minimal.wast | 44 + src/binaryen/test/dot_s/permute.s | 6 + src/binaryen/test/dot_s/permute.wast | 39 + src/binaryen/test/dot_s/relocation.s | 31 + src/binaryen/test/dot_s/relocation.wast | 49 + src/binaryen/test/dot_s/return.s | 29 + src/binaryen/test/dot_s/return.wast | 54 + src/binaryen/test/dot_s/start_main0.s | 9 + src/binaryen/test/dot_s/start_main0.wast | 45 + src/binaryen/test/dot_s/start_main2.s | 12 + src/binaryen/test/dot_s/start_main2.wast | 55 + src/binaryen/test/dot_s/symbolic-offset.s | 20 + src/binaryen/test/dot_s/symbolic-offset.wast | 47 + src/binaryen/test/dot_s/text_before_type.s | 19 + src/binaryen/test/dot_s/text_before_type.wast | 45 + src/binaryen/test/dot_s/traps.clamp.wast | 113 + src/binaryen/test/dot_s/traps.js.wast | 65 + src/binaryen/test/dot_s/traps.s | 14 + src/binaryen/test/dot_s/traps.wast | 49 + src/binaryen/test/dot_s/unreachable_blocks.s | 123 + .../test/dot_s/unreachable_blocks.wast | 123 + src/binaryen/test/dot_s/visibilities.s | 27 + src/binaryen/test/dot_s/visibilities.wast | 50 + src/binaryen/test/dylib.wasm | Bin 0 -> 306 bytes src/binaryen/test/dylib.wasm.fromBinary | 50 + src/binaryen/test/dynamicLibrary.asm.js | 136 + src/binaryen/test/dynamicLibrary.fromasm | 71 + .../test/dynamicLibrary.fromasm.clamp | 71 + .../test/dynamicLibrary.fromasm.clamp.no-opts | 191 + .../test/dynamicLibrary.fromasm.imprecise | 70 + .../dynamicLibrary.fromasm.imprecise.no-opts | 191 + .../test/dynamicLibrary.fromasm.no-opts | 191 + src/binaryen/test/emcc_O2_hello_world.asm.js | 2293 + src/binaryen/test/emcc_O2_hello_world.fromasm | 9754 +++ .../test/emcc_O2_hello_world.fromasm.clamp | 9754 +++ .../emcc_O2_hello_world.fromasm.clamp.no-opts | 11942 ++++ .../emcc_O2_hello_world.fromasm.imprecise | 9749 +++ ...c_O2_hello_world.fromasm.imprecise.no-opts | 11930 ++++ .../test/emcc_O2_hello_world.fromasm.no-opts | 11942 ++++ .../test/emcc_O2_hello_world.wast.fromBinary | 12698 ++++ src/binaryen/test/emcc_hello_world.asm.js | 7101 +++ src/binaryen/test/emcc_hello_world.fromasm | 15672 +++++ .../test/emcc_hello_world.fromasm.clamp | 15722 +++++ .../emcc_hello_world.fromasm.clamp.no-opts | 31679 ++++++++++ .../test/emcc_hello_world.fromasm.imprecise | 15610 +++++ ...emcc_hello_world.fromasm.imprecise.no-opts | 31566 ++++++++++ .../test/emcc_hello_world.fromasm.no-opts | 31629 ++++++++++ .../test/emcc_hello_world.wast.fromBinary | 34112 +++++++++++ src/binaryen/test/empty.asm.js | 4 + src/binaryen/test/empty.fromasm | 7 + src/binaryen/test/empty.fromasm.clamp | 7 + src/binaryen/test/empty.fromasm.clamp.no-opts | 6 + src/binaryen/test/empty.fromasm.imprecise | 6 + .../test/empty.fromasm.imprecise.no-opts | 6 + src/binaryen/test/empty.fromasm.no-opts | 6 + .../test/empty_imported_table.2asm.js | 60 + src/binaryen/test/empty_imported_table.wast | 4 + .../test/empty_imported_table.wast.from-wast | 4 + .../test/empty_imported_table.wast.fromBinary | 5 + ...imported_table.wast.fromBinary.noDebugInfo | 5 + src/binaryen/test/empty_table.2asm.js | 59 + src/binaryen/test/empty_table.wast | 4 + src/binaryen/test/empty_table.wast.from-wast | 4 + src/binaryen/test/empty_table.wast.fromBinary | 5 + .../empty_table.wast.fromBinary.noDebugInfo | 5 + src/binaryen/test/example/c-api-hello-world.c | 31 + .../test/example/c-api-hello-world.txt | 10 + .../test/example/c-api-kitchen-sink.c | 604 + .../test/example/c-api-kitchen-sink.txt | 2923 + .../test/example/c-api-kitchen-sink.txt.txt | 1024 + .../example/c-api-relooper-unreachable-if.cpp | 557 + .../c-api-relooper-unreachable-if.txt} | 0 .../test/example/c-api-unused-mem.cpp | 93 + .../test/example/c-api-unused-mem.txt | 98 + src/binaryen/test/example/relooper-fuzz.c | 274 + src/binaryen/test/example/relooper-fuzz.txt | 537 + src/binaryen/test/example/relooper-fuzz1.c | 346 + src/binaryen/test/example/relooper-fuzz1.txt | 496 + src/binaryen/test/fannkuch.args | 1 + src/binaryen/test/fannkuch.cpp | 159 + src/binaryen/test/fannkuch.txt | 31 + src/binaryen/test/fasta.args | 1 + src/binaryen/test/fasta.cpp | 198 + src/binaryen/test/fasta.txt | 5 + src/binaryen/test/fib-dbg.wasm | Bin 0 -> 913 bytes src/binaryen/test/fib-dbg.wasm.fromBinary | 223 + src/binaryen/test/fib-dbg.wasm.map | 1 + src/binaryen/test/float_ops.cpp | 73 + src/binaryen/test/float_ops.emcc | 1 + src/binaryen/test/float_ops.post.js | 89 + src/binaryen/test/float_ops.txt | 484 + src/binaryen/test/forward.2asm.js | 74 + src/binaryen/test/grow_memory.cpp | 20 + src/binaryen/test/grow_memory.emcc | 1 + src/binaryen/test/grow_memory.txt | 22 + src/binaryen/test/hello_libcxx.cpp | 8 + src/binaryen/test/hello_libcxx.txt | 2 + src/binaryen/test/hello_world.2asm.js | 67 + src/binaryen/test/hello_world.asm.js | 10 + src/binaryen/test/hello_world.c | 7 + src/binaryen/test/hello_world.fromasm | 14 + src/binaryen/test/hello_world.fromasm.clamp | 14 + .../test/hello_world.fromasm.clamp.no-opts | 15 + .../test/hello_world.fromasm.imprecise | 13 + .../hello_world.fromasm.imprecise.no-opts | 15 + src/binaryen/test/hello_world.fromasm.no-opts | 15 + src/binaryen/test/hello_world.txt | 2 + src/binaryen/test/hello_world.wast | 11 + src/binaryen/test/hello_world.wast.from-wast | 11 + src/binaryen/test/hello_world.wast.fromBinary | 12 + .../hello_world.wast.fromBinary.noDebugInfo | 12 + src/binaryen/test/i32.2asm.js | 315 + src/binaryen/test/i64-setTempRet0.asm.js | 24 + src/binaryen/test/i64-setTempRet0.fromasm | 52 + .../test/i64-setTempRet0.fromasm.clamp | 52 + .../i64-setTempRet0.fromasm.clamp.no-opts | 55 + .../test/i64-setTempRet0.fromasm.imprecise | 51 + .../i64-setTempRet0.fromasm.imprecise.no-opts | 55 + .../test/i64-setTempRet0.fromasm.no-opts | 55 + src/binaryen/test/importedSignCast.asm.js | 14 + src/binaryen/test/importedSignCast.fromasm | 18 + .../test/importedSignCast.fromasm.clamp | 18 + .../importedSignCast.fromasm.clamp.no-opts | 23 + .../test/importedSignCast.fromasm.imprecise | 17 + ...importedSignCast.fromasm.imprecise.no-opts | 23 + .../test/importedSignCast.fromasm.no-opts | 23 + src/binaryen/test/imported_memory.wast | 4 + .../test/imported_memory.wast.from-wast | 4 + .../test/imported_memory.wast.fromBinary | 5 + ...mported_memory.wast.fromBinary.noDebugInfo | 5 + src/binaryen/test/imported_memory_growth.wast | 4 + .../imported_memory_growth.wast.from-wast | 4 + .../imported_memory_growth.wast.fromBinary | 5 + ..._memory_growth.wast.fromBinary.noDebugInfo | 5 + src/binaryen/test/int_ops.c | 32 + src/binaryen/test/int_ops.emcc | 1 + src/binaryen/test/int_ops.post.js | 53 + src/binaryen/test/int_ops.txt | 261 + src/binaryen/test/kitchen_sink.wast | 667 + src/binaryen/test/kitchen_sink.wast.from-wast | 667 + .../test/kitchen_sink.wast.fromBinary | 666 + .../kitchen_sink.wast.fromBinary.noDebugInfo | 666 + src/binaryen/test/linker/archive/bar.s | 16 + .../archive/bar_with_very_long_filename.s | 15 + src/binaryen/test/linker/archive/barlong.a | 21 + src/binaryen/test/linker/archive/baz.s | 15 + src/binaryen/test/linker/archive/foo.s | 18 + src/binaryen/test/linker/archive/foobar.a | 73 + src/binaryen/test/linker/bar.c | 2 + src/binaryen/test/linker/baz.c | 2 + src/binaryen/test/linker/foo.c | 3 + src/binaryen/test/linker/main.c | 10 + src/binaryen/test/linker/main.s | 34 + src/binaryen/test/linker/quux.c | 1 + src/binaryen/test/llvm_autogenerated/byval.s | 148 + .../test/llvm_autogenerated/byval.wast | 216 + src/binaryen/test/llvm_autogenerated/call.s | 149 + .../test/llvm_autogenerated/call.wast | 149 + .../test/llvm_autogenerated/cfg-stackify.s | 822 + .../test/llvm_autogenerated/cfg-stackify.wast | 997 + .../test/llvm_autogenerated/comparisons_f32.s | 185 + .../llvm_autogenerated/comparisons_f32.wast | 249 + .../test/llvm_autogenerated/comparisons_f64.s | 185 + .../llvm_autogenerated/comparisons_f64.wast | 249 + .../test/llvm_autogenerated/comparisons_i32.s | 113 + .../llvm_autogenerated/comparisons_i32.wast | 129 + .../test/llvm_autogenerated/comparisons_i64.s | 113 + .../llvm_autogenerated/comparisons_i64.wast | 129 + src/binaryen/test/llvm_autogenerated/conv.s | 291 + .../test/llvm_autogenerated/conv.wast | 250 + .../test/llvm_autogenerated/copysign-casts.s | 27 + .../llvm_autogenerated/copysign-casts.wast | 59 + src/binaryen/test/llvm_autogenerated/cpus.s | 13 + .../test/llvm_autogenerated/cpus.wast | 43 + .../test/llvm_autogenerated/dead-vreg.s | 50 + .../test/llvm_autogenerated/dead-vreg.wast | 130 + .../test/llvm_autogenerated/divrem-constant.s | 91 + .../llvm_autogenerated/divrem-constant.wast | 95 + src/binaryen/test/llvm_autogenerated/f32.s | 181 + src/binaryen/test/llvm_autogenerated/f32.wast | 178 + src/binaryen/test/llvm_autogenerated/f64.s | 181 + src/binaryen/test/llvm_autogenerated/f64.wast | 178 + .../test/llvm_autogenerated/fast-isel-noreg.s | 45 + .../llvm_autogenerated/fast-isel-noreg.wast | 67 + .../test/llvm_autogenerated/fast-isel.s | 61 + .../test/llvm_autogenerated/fast-isel.wast | 71 + src/binaryen/test/llvm_autogenerated/frem.s | 25 + .../test/llvm_autogenerated/frem.wast | 61 + src/binaryen/test/llvm_autogenerated/func.s | 70 + .../test/llvm_autogenerated/func.wast | 82 + src/binaryen/test/llvm_autogenerated/global.s | 163 + .../test/llvm_autogenerated/global.wast | 71 + src/binaryen/test/llvm_autogenerated/globl.s | 10 + .../test/llvm_autogenerated/globl.wast | 42 + src/binaryen/test/llvm_autogenerated/i128.s | 631 + .../test/llvm_autogenerated/i128.wast | 1042 + .../i32-load-store-alignment.s | 213 + .../i32-load-store-alignment.wast | 199 + src/binaryen/test/llvm_autogenerated/i32.s | 256 + src/binaryen/test/llvm_autogenerated/i32.wast | 240 + .../i64-load-store-alignment.s | 318 + .../i64-load-store-alignment.wast | 279 + src/binaryen/test/llvm_autogenerated/i64.s | 256 + src/binaryen/test/llvm_autogenerated/i64.wast | 240 + src/binaryen/test/llvm_autogenerated/ident.s | 4 + .../test/llvm_autogenerated/ident.wast | 39 + .../test/llvm_autogenerated/immediates.s | 283 + .../test/llvm_autogenerated/immediates.wast | 207 + .../test/llvm_autogenerated/indirect-import.s | 53 + .../llvm_autogenerated/indirect-import.wast | 173 + .../test/llvm_autogenerated/irreducible-cfg.s | 170 + .../llvm_autogenerated/irreducible-cfg.wast | 289 + .../test/llvm_autogenerated/legalize.s | 1079 + .../test/llvm_autogenerated/legalize.wast | 2453 + .../test/llvm_autogenerated/llvm-to-s.py | 84 + .../test/llvm_autogenerated/load-ext.s | 113 + .../test/llvm_autogenerated/load-ext.wast | 119 + .../test/llvm_autogenerated/load-store-i1.s | 79 + .../llvm_autogenerated/load-store-i1.wast | 105 + src/binaryen/test/llvm_autogenerated/load.s | 47 + .../test/llvm_autogenerated/load.wast | 71 + .../lower-em-ehsjlj-options.s | 123 + .../lower-em-ehsjlj-options.wast | 153 + .../test/llvm_autogenerated/mem-intrinsics.s | 152 + .../llvm_autogenerated/mem-intrinsics.wast | 218 + .../test/llvm_autogenerated/memory-addr32.s | 23 + .../llvm_autogenerated/memory-addr32.wast | 54 + .../llvm_autogenerated/negative-base-reg.s | 37 + .../llvm_autogenerated/negative-base-reg.wast | 66 + .../llvm_autogenerated/non-executable-stack.s | 3 + .../non-executable-stack.wast | 39 + src/binaryen/test/llvm_autogenerated/offset.s | 404 + .../test/llvm_autogenerated/offset.wast | 358 + src/binaryen/test/llvm_autogenerated/phi.s | 46 + src/binaryen/test/llvm_autogenerated/phi.wast | 100 + .../test/llvm_autogenerated/reg-stackify.s | 536 + .../test/llvm_autogenerated/reg-stackify.wast | 629 + .../test/llvm_autogenerated/return-int32.s | 36 + .../test/llvm_autogenerated/return-int32.wast | 65 + .../test/llvm_autogenerated/return-void.s | 30 + .../test/llvm_autogenerated/return-void.wast | 61 + src/binaryen/test/llvm_autogenerated/select.s | 135 + .../test/llvm_autogenerated/select.wast | 159 + .../test/llvm_autogenerated/signext-zeroext.s | 61 + .../llvm_autogenerated/signext-zeroext.wast | 91 + .../llvm_autogenerated/store-results.wast} | 0 .../test/llvm_autogenerated/store-trunc.s | 48 + .../test/llvm_autogenerated/store-trunc.wast | 74 + src/binaryen/test/llvm_autogenerated/store.s | 43 + .../test/llvm_autogenerated/store.wast | 71 + src/binaryen/test/llvm_autogenerated/switch.s | 100 + .../test/llvm_autogenerated/switch.wast | 124 + .../test/llvm_autogenerated/unreachable.s | 30 + .../test/llvm_autogenerated/unreachable.wast | 54 + .../test/llvm_autogenerated/unused-argument.s | 33 + .../llvm_autogenerated/unused-argument.wast | 60 + .../test/llvm_autogenerated/userstack.s | 355 + .../test/llvm_autogenerated/userstack.wast | 492 + .../test/llvm_autogenerated/varargs.s | 154 + .../test/llvm_autogenerated/varargs.wast | 221 + src/binaryen/test/mem.cpp | 34 + src/binaryen/test/mem.emcc | 1 + src/binaryen/test/mem.post.js | 53 + src/binaryen/test/mem.txt | 193 + src/binaryen/test/memory-import.wast | 9 + .../test/memory-import.wast.from-wast | 9 + .../test/memory-import.wast.fromBinary | 10 + .../memory-import.wast.fromBinary.noDebugInfo | 10 + src/binaryen/test/memory-shared.wast | 3 + .../test/memory-shared.wast.from-wast | 3 + .../test/memory-shared.wast.fromBinary | 4 + .../memory-shared.wast.fromBinary.noDebugInfo | 4 + src/binaryen/test/memorygrowth.asm.js | 2387 + src/binaryen/test/memorygrowth.fromasm | 9821 +++ src/binaryen/test/memorygrowth.fromasm.clamp | 9821 +++ .../test/memorygrowth.fromasm.clamp.no-opts | 12004 ++++ .../test/memorygrowth.fromasm.imprecise | 9816 +++ .../memorygrowth.fromasm.imprecise.no-opts | 11992 ++++ .../test/memorygrowth.fromasm.no-opts | 12004 ++++ src/binaryen/test/merge/basics.wast | 38 + src/binaryen/test/merge/basics.wast.combined | 133 + .../test/merge/basics.wast.combined.finalized | 133 + .../merge/basics.wast.combined.finalized.opt | 84 + .../basics.wast.combined.finalized.opt.stdout | 3 + .../basics.wast.combined.finalized.stdout | 3 + .../test/merge/basics.wast.combined.opt | 120 + .../merge/basics.wast.combined.opt.stdout | 3 + .../test/merge/basics.wast.combined.stdout | 3 + src/binaryen/test/merge/basics.wast.toMerge | 63 + src/binaryen/test/merge/dylib.wasm | Bin 0 -> 386 bytes src/binaryen/test/merge/dylib.wasm.combined | 101 + .../test/merge/dylib.wasm.combined.finalized | 101 + .../merge/dylib.wasm.combined.finalized.opt | 83 + .../dylib.wasm.combined.finalized.opt.stdout | 3 + .../dylib.wasm.combined.finalized.stdout | 3 + .../test/merge/dylib.wasm.combined.opt | 92 + .../test/merge/dylib.wasm.combined.opt.stdout | 3 + .../test/merge/dylib.wasm.combined.stdout | 3 + src/binaryen/test/merge/dylib.wasm.toMerge | Bin 0 -> 340 bytes src/binaryen/test/merge/fusing.wast | 18 + src/binaryen/test/merge/fusing.wast.combined | 44 + .../test/merge/fusing.wast.combined.finalized | 44 + .../merge/fusing.wast.combined.finalized.opt | 31 + .../fusing.wast.combined.finalized.opt.stdout | 3 + .../fusing.wast.combined.finalized.stdout | 3 + .../test/merge/fusing.wast.combined.opt | 34 + .../merge/fusing.wast.combined.opt.stdout | 3 + .../test/merge/fusing.wast.combined.stdout | 3 + src/binaryen/test/merge/fusing.wast.toMerge | 20 + src/binaryen/test/merge/global-init.wast | 10 + .../test/merge/global-init.wast.combined | 16 + .../merge/global-init.wast.combined.finalized | 16 + .../global-init.wast.combined.finalized.opt | 5 + ...al-init.wast.combined.finalized.opt.stdout | 3 + ...global-init.wast.combined.finalized.stdout | 3 + .../test/merge/global-init.wast.combined.opt | 8 + .../global-init.wast.combined.opt.stdout | 3 + .../merge/global-init.wast.combined.stdout | 3 + .../test/merge/global-init.wast.toMerge | 10 + .../test/merge/main-lacks-segments.wast | 7 + .../merge/main-lacks-segments.wast.combined | 25 + ...ain-lacks-segments.wast.combined.finalized | 25 + ...lacks-segments.wast.combined.finalized.opt | 10 + ...egments.wast.combined.finalized.opt.stdout | 3 + ...ks-segments.wast.combined.finalized.stdout | 3 + .../main-lacks-segments.wast.combined.opt | 19 + ...in-lacks-segments.wast.combined.opt.stdout | 3 + .../main-lacks-segments.wast.combined.stdout | 3 + .../merge/main-lacks-segments.wast.toMerge | 13 + .../test/merge/post-instantiate-a.wast | 9 + .../merge/post-instantiate-a.wast.combined | 19 + ...post-instantiate-a.wast.combined.finalized | 19 + ...-instantiate-a.wast.combined.finalized.opt | 9 + ...tiate-a.wast.combined.finalized.opt.stdout | 3 + ...stantiate-a.wast.combined.finalized.stdout | 3 + .../post-instantiate-a.wast.combined.opt | 11 + ...ost-instantiate-a.wast.combined.opt.stdout | 3 + .../post-instantiate-a.wast.combined.stdout | 3 + .../merge/post-instantiate-a.wast.toMerge | 6 + .../test/merge/post-instantiate-b.wast | 6 + .../merge/post-instantiate-b.wast.combined | 19 + ...post-instantiate-b.wast.combined.finalized | 19 + ...-instantiate-b.wast.combined.finalized.opt | 9 + ...tiate-b.wast.combined.finalized.opt.stdout | 3 + ...stantiate-b.wast.combined.finalized.stdout | 3 + .../post-instantiate-b.wast.combined.opt | 11 + ...ost-instantiate-b.wast.combined.opt.stdout | 3 + .../post-instantiate-b.wast.combined.stdout | 3 + .../merge/post-instantiate-b.wast.toMerge | 9 + src/binaryen/test/merge/printf.wast | 13 + src/binaryen/test/merge/printf.wast.combined | 28 + .../test/merge/printf.wast.combined.finalized | 28 + .../merge/printf.wast.combined.finalized.opt | 10 + .../printf.wast.combined.finalized.opt.stdout | 3 + .../printf.wast.combined.finalized.stdout | 3 + .../test/merge/printf.wast.combined.opt | 13 + .../merge/printf.wast.combined.opt.stdout | 3 + .../test/merge/printf.wast.combined.stdout | 3 + src/binaryen/test/merge/printf.wast.toMerge | 14 + src/binaryen/test/min.asm.js | 52 + src/binaryen/test/min.fromasm | 68 + src/binaryen/test/min.fromasm.clamp | 68 + src/binaryen/test/min.fromasm.clamp.no-opts | 101 + src/binaryen/test/min.fromasm.imprecise | 67 + .../test/min.fromasm.imprecise.no-opts | 101 + src/binaryen/test/min.fromasm.no-opts | 101 + src/binaryen/test/min.wast | 57 + src/binaryen/test/min.wast.from-wast | 57 + src/binaryen/test/min.wast.fromBinary | 55 + .../test/min.wast.fromBinary.noDebugInfo | 55 + src/binaryen/test/noffi_f32.asm.js | 21 + src/binaryen/test/noffi_f32.fromasm | 25 + src/binaryen/test/noffi_f32.fromasm.clamp | 25 + .../test/noffi_f32.fromasm.clamp.no-opts | 28 + src/binaryen/test/noffi_f32.fromasm.imprecise | 24 + .../test/noffi_f32.fromasm.imprecise.no-opts | 28 + src/binaryen/test/noffi_f32.fromasm.no-opts | 28 + src/binaryen/test/noffi_i64.asm.js | 21 + src/binaryen/test/noffi_i64.fromasm | 25 + src/binaryen/test/noffi_i64.fromasm.clamp | 25 + .../test/noffi_i64.fromasm.clamp.no-opts | 32 + src/binaryen/test/noffi_i64.fromasm.imprecise | 24 + .../test/noffi_i64.fromasm.imprecise.no-opts | 32 + src/binaryen/test/noffi_i64.fromasm.no-opts | 32 + src/binaryen/test/passes/O.bin.txt | 110 + src/binaryen/test/passes/O.txt | 24 + src/binaryen/test/passes/O.wasm | Bin 0 -> 330 bytes src/binaryen/test/passes/O.wast | 28 + src/binaryen/test/passes/O3_inlining.txt | 29 + src/binaryen/test/passes/O3_inlining.wast | 44 + src/binaryen/test/passes/Oz.txt | 53 + src/binaryen/test/passes/Oz.wast | 59 + .../test/passes/coalesce-locals-learning.txt | 868 + .../test/passes/coalesce-locals-learning.wast | 890 + src/binaryen/test/passes/coalesce-locals.txt | 1156 + src/binaryen/test/passes/coalesce-locals.wast | 1130 + src/binaryen/test/passes/code-folding.txt | 109 + src/binaryen/test/passes/code-folding.wast | 118 + .../code-pushing_ignore-implicit-traps.txt | 460 + .../code-pushing_ignore-implicit-traps.wast | 248 + src/binaryen/test/passes/const-hoisting.txt | 630 + src/binaryen/test/passes/const-hoisting.wast | 201 + src/binaryen/test/passes/dce.txt | 505 + src/binaryen/test/passes/dce.wast | 736 + src/binaryen/test/passes/dce_vacuum.bin.txt | 99 + src/binaryen/test/passes/dce_vacuum.txt | 26 + src/binaryen/test/passes/dce_vacuum.wasm | Bin 0 -> 260 bytes src/binaryen/test/passes/dce_vacuum.wast | 51 + .../passes/duplicate-function-elimination.txt | 1065 + .../duplicate-function-elimination.wast | 1221 + .../test/passes/emit-js-wrapper=a.js.txt | 42 + .../test/passes/emit-js-wrapper=a.js.wast | 37 + .../test/passes/emit-js-wrapper=a.js.wast.js | 44 + .../test/passes/emit-spec-wrapper=a.wat.txt | 42 + .../test/passes/emit-spec-wrapper=a.wat.wast | 37 + .../passes/emit-spec-wrapper=a.wat.wast.wat | 1 + src/binaryen/test/passes/flatten.bin.txt | 276 + src/binaryen/test/passes/flatten.txt | 2451 + src/binaryen/test/passes/flatten.wasm | Bin 0 -> 458 bytes src/binaryen/test/passes/flatten.wast | 1019 + src/binaryen/test/passes/flatten_rereloop.txt | 127 + .../test/passes/flatten_rereloop.wast | 36 + src/binaryen/test/passes/fuzz-exec_O.txt | 31 + src/binaryen/test/passes/fuzz-exec_O.wast | 23 + .../test/passes/inlining-optimizing.txt | 55 + .../test/passes/inlining-optimizing.wast | 103 + .../inlining-optimizing_optimize-level=3.txt | 15793 +++++ .../inlining-optimizing_optimize-level=3.wast | 15703 +++++ src/binaryen/test/passes/inlining.txt | 251 + src/binaryen/test/passes/inlining.wast | 177 + .../test/passes/inlining_optimize-level=3.txt | 117 + .../passes/inlining_optimize-level=3.wast | 58 + .../test/passes/instrument-locals.txt | 118 + .../test/passes/instrument-locals.wast | 29 + .../test/passes/instrument-memory.txt | 453 + .../test/passes/instrument-memory.wast | 58 + src/binaryen/test/passes/local-cse.txt | 184 + src/binaryen/test/passes/local-cse.wast | 164 + .../local-cse_ignore-implicit-traps.txt | 30 + .../local-cse_ignore-implicit-traps.wast | 20 + src/binaryen/test/passes/log-execution.txt | 88 + src/binaryen/test/passes/log-execution.wast | 35 + src/binaryen/test/passes/memory-packing.txt | 20 + src/binaryen/test/passes/memory-packing.wast | 20 + src/binaryen/test/passes/merge-blocks.txt | 133 + src/binaryen/test/passes/merge-blocks.wast | 112 + src/binaryen/test/passes/metrics.txt | 65 + src/binaryen/test/passes/metrics.wast | 50 + src/binaryen/test/passes/nm.txt | 39 + src/binaryen/test/passes/nm.wast | 36 + .../test/passes/optimize-instructions.txt | 2218 + .../test/passes/optimize-instructions.wast | 2659 + ...optimize-level=2_ignore-implicit-traps.txt | 362 + ...ptimize-level=2_ignore-implicit-traps.wast | 365 + src/binaryen/test/passes/pick-load-signs.txt | 279 + src/binaryen/test/passes/pick-load-signs.wast | 276 + src/binaryen/test/passes/post-emscripten.txt | 182 + src/binaryen/test/passes/post-emscripten.wast | 211 + .../test/passes/precompute-propagate.txt | 214 + .../test/passes/precompute-propagate.wast | 113 + src/binaryen/test/passes/precompute.txt | 190 + src/binaryen/test/passes/precompute.wast | 283 + .../precompute_coalesce-locals_vacuum.txt | 9 + .../precompute_coalesce-locals_vacuum.wast | 20 + src/binaryen/test/passes/print-call-graph.txt | 1497 + .../test/passes/print-call-graph.wast | 1382 + src/binaryen/test/passes/remove-imports.txt | 16 + src/binaryen/test/passes/remove-imports.wast | 19 + src/binaryen/test/passes/remove-memory.txt | 3 + src/binaryen/test/passes/remove-memory.wast | 6 + .../test/passes/remove-unused-brs.txt | 1159 + .../test/passes/remove-unused-brs.wast | 1043 + ...rs_precompute_vacuum_remove-unused-brs.txt | 14 + ...s_precompute_vacuum_remove-unused-brs.wast | 29 + .../remove-unused-brs_shrink-level=1.txt | 162 + .../remove-unused-brs_shrink-level=1.wast | 117 + ...s_shrink-level=1_ignore-implicit-traps.txt | 126 + ..._shrink-level=1_ignore-implicit-traps.wast | 81 + .../passes/remove-unused-module-elements.txt | 134 + .../passes/remove-unused-module-elements.wast | 118 + .../test/passes/remove-unused-names.txt | 81 + .../test/passes/remove-unused-names.wast | 96 + .../remove-unused-names_code-folding.txt | 1681 + .../remove-unused-names_code-folding.wast | 1176 + .../remove-unused-names_merge-blocks.txt | 933 + .../remove-unused-names_merge-blocks.wast | 1099 + .../passes/remove-unused-names_precompute.txt | 25 + .../remove-unused-names_precompute.wast | 28 + ...-unused-names_remove-unused-brs_vacuum.txt | 134 + ...unused-names_remove-unused-brs_vacuum.wast | 149 + .../passes/remove-unused-names_vacuum.txt | 32 + .../passes/remove-unused-names_vacuum.wast | 40 + .../test/passes/reorder-functions.txt | 16 + .../test/passes/reorder-functions.wast | 16 + src/binaryen/test/passes/reorder-locals.txt | 55 + src/binaryen/test/passes/reorder-locals.wast | 59 + src/binaryen/test/passes/rereloop.txt | 808 + src/binaryen/test/passes/rereloop.wast | 221 + ..._remove-unused-brs_merge-blocks_vacuum.txt | 242 + ...remove-unused-brs_merge-blocks_vacuum.wast | 179 + src/binaryen/test/passes/safe-heap.txt | 10981 ++++ src/binaryen/test/passes/safe-heap.wast | 55 + .../passes/simplify-locals-nostructure.txt | 103 + .../passes/simplify-locals-nostructure.wast | 73 + .../simplify-locals-notee-nostructure.txt | 65 + .../simplify-locals-notee-nostructure.wast | 32 + .../test/passes/simplify-locals-notee.txt | 66 + .../test/passes/simplify-locals-notee.wast | 32 + src/binaryen/test/passes/simplify-locals.txt | 1076 + src/binaryen/test/passes/simplify-locals.wast | 990 + src/binaryen/test/passes/ssa.txt | 730 + src/binaryen/test/passes/ssa.wast | 343 + .../test/passes/translate-to-fuzz.txt | 917 + .../test/passes/translate-to-fuzz.wast | 99 + src/binaryen/test/passes/trap-mode-clamp.txt | 432 + src/binaryen/test/passes/trap-mode-clamp.wast | 26 + src/binaryen/test/passes/trap-mode-js.txt | 334 + src/binaryen/test/passes/trap-mode-js.wast | 26 + src/binaryen/test/passes/untee.txt | 48 + src/binaryen/test/passes/untee.wast | 12 + src/binaryen/test/passes/vacuum.txt | 307 + src/binaryen/test/passes/vacuum.wast | 662 + .../passes/vacuum_ignore-implicit-traps.txt | 14 + .../passes/vacuum_ignore-implicit-traps.wast | 32 + ...acuum_remove-unused-names_merge-blocks.txt | 12 + ...cuum_remove-unused-names_merge-blocks.wast | 16 + src/binaryen/test/polymorphic_stack.wast | 133 + .../test/polymorphic_stack.wast.from-wast | 136 + .../test/polymorphic_stack.wast.fromBinary | 77 + ...ymorphic_stack.wast.fromBinary.noDebugInfo | 77 + .../print/memory-import-shared.minified.txt | 1 + .../test/print/memory-import-shared.txt | 3 + .../test/print/memory-import-shared.wast | 3 + .../test/print/memory-shared.minified.txt | 2 + src/binaryen/test/print/memory-shared.txt | 3 + src/binaryen/test/print/memory-shared.wast | 3 + src/binaryen/test/print/min.minified.txt | 4 + src/binaryen/test/print/min.txt | 57 + src/binaryen/test/print/min.wast | 57 + src/binaryen/test/printf.c | 20 + src/binaryen/test/printf.txt | 6 + src/binaryen/test/reduce/destructive.wast | 10 + src/binaryen/test/reduce/destructive.wast.txt | 9 + src/binaryen/test/reduce/memory_table.wast | 31 + .../test/reduce/memory_table.wast.txt | 36 + src/binaryen/test/reduce/simple.wast | 15 + src/binaryen/test/reduce/simple.wast.txt | 9 + src/binaryen/test/reg_switch.wast | 14 + src/binaryen/test/reg_switch.wast.from-wast | 14 + src/binaryen/test/reg_switch.wast.fromBinary | 15 + .../reg_switch.wast.fromBinary.noDebugInfo | 15 + src/binaryen/test/revision | 1 + ...asm_known_binaryen_shell_test_failures.txt | 151 + .../test/s2wasm_known_gcc_test_failures.txt | 9 + src/binaryen/test/segment-overlap.wast | 6 + .../test/segment-overlap.wast.from-wast | 5 + .../test/segment-overlap.wast.fromBinary | 6 + ...egment-overlap.wast.fromBinary.noDebugInfo | 6 + src/binaryen/test/signext.wast | 12 + src/binaryen/test/signext.wast.from-wast | 33 + src/binaryen/test/signext.wast.fromBinary | 34 + .../test/signext.wast.fromBinary.noDebugInfo | 34 + src/binaryen/test/spec/Contributing.md | 8 + src/binaryen/test/spec/LICENSE | 202 + src/binaryen/test/spec/README.md | 2 + .../test/spec/address-offset-range.fail.wast | 4 + src/binaryen/test/spec/address.wast | 34 + src/binaryen/test/spec/binary.wast | 15 + src/binaryen/test/spec/block.wast | 284 + src/binaryen/test/spec/br.wast | 412 + src/binaryen/test/spec/br_if.wast | 306 + src/binaryen/test/spec/br_table.wast | 1469 + src/binaryen/test/spec/break-drop.wast | 9 + src/binaryen/test/spec/call.wast | 233 + src/binaryen/test/spec/call_indirect.wast | 362 + src/binaryen/test/spec/comments.wast | 69 + src/binaryen/test/spec/conversions.wast | 419 + src/binaryen/test/spec/endianness.wast | 217 + .../spec/expected-output/address.wast.log | 38 + .../spec/expected-output/func_ptrs.wast.log | 1 + .../if-label-scope.fail.wast.log | 1 + .../spec/expected-output/imports.wast.log | 10 + .../test/spec/expected-output/names.wast.log | 2 + .../test/spec/expected-output/start.wast.log | 2 + src/binaryen/test/spec/exports.wast | 172 + src/binaryen/test/spec/f32.load32.fail.wast | 1 + src/binaryen/test/spec/f32.load64.fail.wast | 1 + src/binaryen/test/spec/f32.store32.fail.wast | 1 + src/binaryen/test/spec/f32.store64.fail.wast | 1 + src/binaryen/test/spec/f32.wast | 2414 + src/binaryen/test/spec/f32_cmp.wast | 1956 + src/binaryen/test/spec/f64.load32.fail.wast | 1 + src/binaryen/test/spec/f64.load64.fail.wast | 1 + src/binaryen/test/spec/f64.store32.fail.wast | 1 + src/binaryen/test/spec/f64.store64.fail.wast | 1 + src/binaryen/test/spec/f64.wast | 2414 + src/binaryen/test/spec/f64_cmp.wast | 1956 + src/binaryen/test/spec/fac.wast | 85 + src/binaryen/test/spec/float_exprs.wast | 1979 + src/binaryen/test/spec/float_literals.wast | 137 + src/binaryen/test/spec/float_memory.wast | 157 + src/binaryen/test/spec/float_misc.wast | 643 + src/binaryen/test/spec/forward.wast | 20 + .../test/spec/func-local-after-body.fail.wast | 1 + .../spec/func-local-before-param.fail.wast | 1 + .../spec/func-local-before-result.fail.wast | 1 + .../test/spec/func-param-after-body.fail.wast | 1 + .../spec/func-result-after-body.fail.wast | 1 + .../spec/func-result-before-param.fail.wast | 1 + src/binaryen/test/spec/func.wast | 532 + src/binaryen/test/spec/func_ptrs.wast | 105 + src/binaryen/test/spec/get_local.wast | 148 + src/binaryen/test/spec/globals.wast | 92 + src/binaryen/test/spec/i32.load32_s.fail.wast | 1 + src/binaryen/test/spec/i32.load32_u.fail.wast | 1 + src/binaryen/test/spec/i32.load64_s.fail.wast | 1 + src/binaryen/test/spec/i32.load64_u.fail.wast | 1 + src/binaryen/test/spec/i32.store32.fail.wast | 1 + src/binaryen/test/spec/i32.store64.fail.wast | 1 + src/binaryen/test/spec/i32.wast | 404 + src/binaryen/test/spec/i64.load64_s.fail.wast | 1 + src/binaryen/test/spec/i64.load64_u.fail.wast | 1 + src/binaryen/test/spec/i64.store64.fail.wast | 1 + src/binaryen/test/spec/i64.wast | 406 + .../test/spec/import-after-func.fail.wast | 1 + .../test/spec/import-after-global.fail.wast | 1 + .../test/spec/import-after-memory.fail.wast | 1 + .../test/spec/import-after-table.fail.wast | 1 + src/binaryen/test/spec/imports.wast | 224 + src/binaryen/test/spec/int_exprs.wast | 299 + src/binaryen/test/spec/int_literals.wast | 49 + src/binaryen/test/spec/labels.wast | 308 + src/binaryen/test/spec/left-to-right.wast | 233 + src/binaryen/test/spec/linking.wast | 228 + src/binaryen/test/spec/loop.wast | 282 + src/binaryen/test/spec/memory.wast | 317 + src/binaryen/test/spec/memory_redundancy.wast | 43 + src/binaryen/test/spec/memory_trap.wast | 33 + src/binaryen/test/spec/names.wast | 76 + src/binaryen/test/spec/nop.wast | 260 + .../spec/of_string-overflow-hex-u32.fail.wast | 1 + .../spec/of_string-overflow-hex-u64.fail.wast | 1 + .../spec/of_string-overflow-s32.fail.wast | 1 + .../spec/of_string-overflow-s64.fail.wast | 1 + .../spec/of_string-overflow-u32.fail.wast | 1 + .../spec/of_string-overflow-u64.fail.wast | 1 + src/binaryen/test/spec/resizing.wast | 58 + src/binaryen/test/spec/return.wast | 277 + src/binaryen/test/spec/select.wast | 57 + src/binaryen/test/spec/set_local.wast | 205 + src/binaryen/test/spec/stack.wast | 138 + src/binaryen/test/spec/start.wast | 88 + src/binaryen/test/spec/store_retval.wast | 55 + src/binaryen/test/spec/switch.wast | 150 + src/binaryen/test/spec/tee_local.wast | 236 + src/binaryen/test/spec/traps.wast | 69 + src/binaryen/test/spec/typecheck.wast | 433 + src/binaryen/test/spec/unreachable.wast | 262 + src/binaryen/test/spec/unwind.wast | 167 + src/binaryen/test/stacky.wasm | Bin 0 -> 54 bytes src/binaryen/test/stacky.wasm.fromBinary | 21 + src/binaryen/test/table-import.wast | 9 + src/binaryen/test/table-import.wast.from-wast | 9 + .../test/table-import.wast.fromBinary | 10 + .../table-import.wast.fromBinary.noDebugInfo | 10 + src/binaryen/test/threads.asm.js | 144 + src/binaryen/test/threads.fromasm | 69 + src/binaryen/test/threads.fromasm.clamp | 69 + .../test/threads.fromasm.clamp.no-opts | 122 + src/binaryen/test/threads.fromasm.imprecise | 68 + .../test/threads.fromasm.imprecise.no-opts | 122 + src/binaryen/test/threads.fromasm.no-opts | 122 + src/binaryen/test/threads.wasm-only.asm.js | 48 + src/binaryen/test/threads.wasm-only.fromasm | 70 + .../test/threads.wasm-only.fromasm.clamp | 70 + .../threads.wasm-only.fromasm.clamp.no-opts | 90 + .../test/threads.wasm-only.fromasm.imprecise | 69 + ...hreads.wasm-only.fromasm.imprecise.no-opts | 90 + .../test/threads.wasm-only.fromasm.no-opts | 90 + src/binaryen/test/torture-s/20000112-1.c.s | 19 + src/binaryen/test/torture-s/20000113-1.c.s | 58 + src/binaryen/test/torture-s/20000121-1.c.s | 41 + src/binaryen/test/torture-s/20000205-1.c.s | 19 + src/binaryen/test/torture-s/20000217-1.c.s | 43 + src/binaryen/test/torture-s/20000223-1.c.s | 41 + src/binaryen/test/torture-s/20000224-1.c.s | 98 + src/binaryen/test/torture-s/20000225-1.c.s | 19 + src/binaryen/test/torture-s/20000227-1.c.s | 17 + src/binaryen/test/torture-s/20000313-1.c.s | 37 + src/binaryen/test/torture-s/20000314-1.c.s | 19 + src/binaryen/test/torture-s/20000314-2.c.s | 47 + src/binaryen/test/torture-s/20000314-3.c.s | 19 + src/binaryen/test/torture-s/20000402-1.c.s | 19 + src/binaryen/test/torture-s/20000403-1.c.s | 88 + src/binaryen/test/torture-s/20000412-1.c.s | 67 + src/binaryen/test/torture-s/20000412-2.c.s | 76 + src/binaryen/test/torture-s/20000412-3.c.s | 59 + src/binaryen/test/torture-s/20000412-4.c.s | 79 + src/binaryen/test/torture-s/20000412-5.c.s | 19 + src/binaryen/test/torture-s/20000412-6.c.s | 88 + src/binaryen/test/torture-s/20000419-1.c.s | 60 + src/binaryen/test/torture-s/20000422-1.c.s | 171 + src/binaryen/test/torture-s/20000503-1.c.s | 41 + src/binaryen/test/torture-s/20000511-1.c.s | 40 + src/binaryen/test/torture-s/20000519-1.c.s | 102 + src/binaryen/test/torture-s/20000519-2.c.s | 40 + src/binaryen/test/torture-s/20000523-1.c.s | 19 + src/binaryen/test/torture-s/20000528-1.c.s | 55 + src/binaryen/test/torture-s/20000603-1.c.s | 35 + src/binaryen/test/torture-s/20000605-1.c.s | 38 + src/binaryen/test/torture-s/20000605-2.c.s | 83 + src/binaryen/test/torture-s/20000605-3.c.s | 17 + src/binaryen/test/torture-s/20000622-1.c.s | 90 + src/binaryen/test/torture-s/20000703-1.c.s | 87 + src/binaryen/test/torture-s/20000706-1.c.s | 124 + src/binaryen/test/torture-s/20000706-2.c.s | 124 + src/binaryen/test/torture-s/20000706-3.c.s | 101 + src/binaryen/test/torture-s/20000706-4.c.s | 111 + src/binaryen/test/torture-s/20000706-5.c.s | 127 + src/binaryen/test/torture-s/20000707-1.c.s | 63 + src/binaryen/test/torture-s/20000715-1.c.s | 127 + src/binaryen/test/torture-s/20000715-2.c.s | 38 + src/binaryen/test/torture-s/20000717-1.c.s | 104 + src/binaryen/test/torture-s/20000717-2.c.s | 19 + src/binaryen/test/torture-s/20000717-3.c.s | 61 + src/binaryen/test/torture-s/20000717-4.c.s | 40 + src/binaryen/test/torture-s/20000717-5.c.s | 139 + src/binaryen/test/torture-s/20000722-1.c.s | 57 + src/binaryen/test/torture-s/20000726-1.c.s | 33 + src/binaryen/test/torture-s/20000731-1.c.s | 43 + src/binaryen/test/torture-s/20000731-2.c.s | 19 + src/binaryen/test/torture-s/20000801-1.c.s | 91 + src/binaryen/test/torture-s/20000801-2.c.s | 95 + src/binaryen/test/torture-s/20000801-3.c.s | 41 + src/binaryen/test/torture-s/20000801-4.c.s | 53 + src/binaryen/test/torture-s/20000808-1.c.s | 111 + src/binaryen/test/torture-s/20000815-1.c.s | 283 + src/binaryen/test/torture-s/20000818-1.c.s | 41 + src/binaryen/test/torture-s/20000819-1.c.s | 78 + src/binaryen/test/torture-s/20000910-1.c.s | 64 + src/binaryen/test/torture-s/20000910-2.c.s | 66 + src/binaryen/test/torture-s/20000914-1.c.s | 65 + src/binaryen/test/torture-s/20000917-1.c.s | 51 + src/binaryen/test/torture-s/20001009-1.c.s | 35 + src/binaryen/test/torture-s/20001009-2.c.s | 87 + src/binaryen/test/torture-s/20001011-1.c.s | 39 + src/binaryen/test/torture-s/20001013-1.c.s | 72 + src/binaryen/test/torture-s/20001017-1.c.s | 38 + src/binaryen/test/torture-s/20001017-2.c.s | 50 + src/binaryen/test/torture-s/20001024-1.c.s | 67 + src/binaryen/test/torture-s/20001026-1.c.s | 17 + src/binaryen/test/torture-s/20001027-1.c.s | 56 + src/binaryen/test/torture-s/20001031-1.c.s | 88 + src/binaryen/test/torture-s/20001101.c.s | 63 + src/binaryen/test/torture-s/20001108-1.c.s | 57 + src/binaryen/test/torture-s/20001111-1.c.s | 70 + src/binaryen/test/torture-s/20001112-1.c.s | 19 + src/binaryen/test/torture-s/20001121-1.c.s | 55 + src/binaryen/test/torture-s/20001124-1.c.s | 110 + src/binaryen/test/torture-s/20001130-1.c.s | 17 + src/binaryen/test/torture-s/20001130-2.c.s | 19 + src/binaryen/test/torture-s/20001203-1.c.s | 19 + src/binaryen/test/torture-s/20001203-2.c.s | 176 + src/binaryen/test/torture-s/20001221-1.c.s | 19 + src/binaryen/test/torture-s/20001228-1.c.s | 74 + src/binaryen/test/torture-s/20001229-1.c.s | 42 + src/binaryen/test/torture-s/20010106-1.c.s | 63 + src/binaryen/test/torture-s/20010114-1.c.s | 19 + src/binaryen/test/torture-s/20010116-1.c.s | 71 + src/binaryen/test/torture-s/20010118-1.c.s | 80 + src/binaryen/test/torture-s/20010119-1.c.s | 43 + src/binaryen/test/torture-s/20010123-1.c.s | 19 + src/binaryen/test/torture-s/20010129-1.c.s | 220 + src/binaryen/test/torture-s/20010206-1.c.s | 32 + src/binaryen/test/torture-s/20010221-1.c.s | 59 + src/binaryen/test/torture-s/20010222-1.c.s | 48 + src/binaryen/test/torture-s/20010224-1.c.s | 168 + src/binaryen/test/torture-s/20010325-1.c.s | 19 + src/binaryen/test/torture-s/20010329-1.c.s | 19 + src/binaryen/test/torture-s/20010403-1.c.s | 89 + src/binaryen/test/torture-s/20010409-1.c.s | 132 + src/binaryen/test/torture-s/20010422-1.c.s | 37 + src/binaryen/test/torture-s/20010518-1.c.s | 44 + src/binaryen/test/torture-s/20010518-2.c.s | 88 + src/binaryen/test/torture-s/20010520-1.c.s | 19 + src/binaryen/test/torture-s/20010604-1.c.s | 53 + src/binaryen/test/torture-s/20010605-2.c.s | 109 + src/binaryen/test/torture-s/20010711-1.c.s | 31 + src/binaryen/test/torture-s/20010717-1.c.s | 17 + src/binaryen/test/torture-s/20010723-1.c.s | 32 + src/binaryen/test/torture-s/20010904-1.c.s | 28 + src/binaryen/test/torture-s/20010904-2.c.s | 28 + src/binaryen/test/torture-s/20010910-1.c.s | 17 + src/binaryen/test/torture-s/20010915-1.c.s | 377 + src/binaryen/test/torture-s/20010924-1.c.s | 144 + src/binaryen/test/torture-s/20010925-1.c.s | 68 + src/binaryen/test/torture-s/20011008-3.c.s | 120 + src/binaryen/test/torture-s/20011019-1.c.s | 58 + src/binaryen/test/torture-s/20011024-1.c.s | 60 + src/binaryen/test/torture-s/20011109-1.c.s | 121 + src/binaryen/test/torture-s/20011109-2.c.s | 19 + src/binaryen/test/torture-s/20011113-1.c.s | 154 + src/binaryen/test/torture-s/20011114-1.c.s | 33 + src/binaryen/test/torture-s/20011115-1.c.s | 19 + src/binaryen/test/torture-s/20011121-1.c.s | 28 + src/binaryen/test/torture-s/20011126-1.c.s | 38 + src/binaryen/test/torture-s/20011126-2.c.s | 128 + src/binaryen/test/torture-s/20011128-1.c.s | 19 + src/binaryen/test/torture-s/20011217-1.c.s | 19 + src/binaryen/test/torture-s/20011219-1.c.s | 57 + src/binaryen/test/torture-s/20011223-1.c.s | 19 + src/binaryen/test/torture-s/20020103-1.c.s | 49 + src/binaryen/test/torture-s/20020107-1.c.s | 74 + src/binaryen/test/torture-s/20020108-1.c.s | 2574 + src/binaryen/test/torture-s/20020118-1.c.s | 91 + src/binaryen/test/torture-s/20020127-1.c.s | 38 + src/binaryen/test/torture-s/20020129-1.c.s | 124 + src/binaryen/test/torture-s/20020201-1.c.s | 145 + src/binaryen/test/torture-s/20020206-1.c.s | 81 + src/binaryen/test/torture-s/20020206-2.c.s | 44 + src/binaryen/test/torture-s/20020213-1.c.s | 89 + src/binaryen/test/torture-s/20020215-1.c.s | 43 + src/binaryen/test/torture-s/20020216-1.c.s | 59 + src/binaryen/test/torture-s/20020219-1.c.s | 32 + src/binaryen/test/torture-s/20020225-1.c.s | 35 + src/binaryen/test/torture-s/20020225-2.c.s | 19 + src/binaryen/test/torture-s/20020226-1.c.s | 269 + src/binaryen/test/torture-s/20020227-1.c.s | 65 + src/binaryen/test/torture-s/20020307-1.c.s | 687 + src/binaryen/test/torture-s/20020314-1.c.s | 49 + src/binaryen/test/torture-s/20020320-1.c.s | 19 + src/binaryen/test/torture-s/20020321-1.c.s | 45 + src/binaryen/test/torture-s/20020328-1.c.s | 64 + src/binaryen/test/torture-s/20020402-1.c.s | 19 + src/binaryen/test/torture-s/20020402-2.c.s | 491 + src/binaryen/test/torture-s/20020402-3.c.s | 114 + src/binaryen/test/torture-s/20020404-1.c.s | 51 + src/binaryen/test/torture-s/20020406-1.c.s | 308 + src/binaryen/test/torture-s/20020411-1.c.s | 33 + src/binaryen/test/torture-s/20020413-1.c.s | 186 + src/binaryen/test/torture-s/20020418-1.c.s | 54 + src/binaryen/test/torture-s/20020423-1.c.s | 19 + src/binaryen/test/torture-s/20020503-1.c.s | 17 + src/binaryen/test/torture-s/20020506-1.c.s | 266 + src/binaryen/test/torture-s/20020508-1.c.s | 269 + src/binaryen/test/torture-s/20020508-2.c.s | 295 + src/binaryen/test/torture-s/20020508-3.c.s | 295 + src/binaryen/test/torture-s/20020510-1.c.s | 154 + src/binaryen/test/torture-s/20020529-1.c.s | 224 + src/binaryen/test/torture-s/20020611-1.c.s | 86 + src/binaryen/test/torture-s/20020614-1.c.s | 19 + src/binaryen/test/torture-s/20020615-1.c.s | 353 + src/binaryen/test/torture-s/20020619-1.c.s | 17 + src/binaryen/test/torture-s/20020716-1.c.s | 49 + src/binaryen/test/torture-s/20020720-1.c.s | 29 + src/binaryen/test/torture-s/20020805-1.c.s | 62 + src/binaryen/test/torture-s/20020810-1.c.s | 95 + src/binaryen/test/torture-s/20020819-1.c.s | 32 + src/binaryen/test/torture-s/20020904-1.c.s | 32 + src/binaryen/test/torture-s/20020911-1.c.s | 38 + src/binaryen/test/torture-s/20020916-1.c.s | 32 + src/binaryen/test/torture-s/20020920-1.c.s | 35 + src/binaryen/test/torture-s/20021010-1.c.s | 32 + src/binaryen/test/torture-s/20021010-2.c.s | 90 + src/binaryen/test/torture-s/20021011-1.c.s | 245 + src/binaryen/test/torture-s/20021015-1.c.s | 62 + src/binaryen/test/torture-s/20021024-1.c.s | 129 + src/binaryen/test/torture-s/20021111-1.c.s | 72 + src/binaryen/test/torture-s/20021113-1.c.s | 35 + src/binaryen/test/torture-s/20021118-1.c.s | 34 + src/binaryen/test/torture-s/20021118-2.c.s | 143 + src/binaryen/test/torture-s/20021118-3.c.s | 49 + src/binaryen/test/torture-s/20021119-1.c.s | 36 + src/binaryen/test/torture-s/20021120-1.c.s | 674 + src/binaryen/test/torture-s/20021120-2.c.s | 62 + src/binaryen/test/torture-s/20021120-3.c.s | 74 + src/binaryen/test/torture-s/20021127-1.c.s | 41 + src/binaryen/test/torture-s/20021204-1.c.s | 59 + src/binaryen/test/torture-s/20021219-1.c.s | 84 + src/binaryen/test/torture-s/20030105-1.c.s | 43 + src/binaryen/test/torture-s/20030109-1.c.s | 39 + src/binaryen/test/torture-s/20030117-1.c.s | 56 + src/binaryen/test/torture-s/20030120-1.c.s | 64 + src/binaryen/test/torture-s/20030120-2.c.s | 40 + src/binaryen/test/torture-s/20030125-1.c.s | 120 + src/binaryen/test/torture-s/20030128-1.c.s | 57 + src/binaryen/test/torture-s/20030203-1.c.s | 46 + src/binaryen/test/torture-s/20030209-1.c.s | 31 + src/binaryen/test/torture-s/20030216-1.c.s | 26 + src/binaryen/test/torture-s/20030218-1.c.s | 60 + src/binaryen/test/torture-s/20030221-1.c.s | 58 + src/binaryen/test/torture-s/20030222-1.c.s | 68 + src/binaryen/test/torture-s/20030224-2.c.s | 35 + src/binaryen/test/torture-s/20030307-1.c.s | 45 + src/binaryen/test/torture-s/20030313-1.c.s | 147 + src/binaryen/test/torture-s/20030316-1.c.s | 17 + src/binaryen/test/torture-s/20030330-1.c.s | 17 + src/binaryen/test/torture-s/20030401-1.c.s | 42 + src/binaryen/test/torture-s/20030403-1.c.s | 17 + src/binaryen/test/torture-s/20030404-1.c.s | 17 + src/binaryen/test/torture-s/20030408-1.c.s | 69 + src/binaryen/test/torture-s/20030606-1.c.s | 48 + src/binaryen/test/torture-s/20030613-1.c.s | 17 + src/binaryen/test/torture-s/20030626-1.c.s | 29 + src/binaryen/test/torture-s/20030626-2.c.s | 40 + src/binaryen/test/torture-s/20030714-1.c.s | 183 + src/binaryen/test/torture-s/20030715-1.c.s | 98 + src/binaryen/test/torture-s/20030717-1.c.s | 92 + src/binaryen/test/torture-s/20030718-1.c.s | 17 + src/binaryen/test/torture-s/20030821-1.c.s | 43 + src/binaryen/test/torture-s/20030828-1.c.s | 59 + src/binaryen/test/torture-s/20030828-2.c.s | 19 + src/binaryen/test/torture-s/20030903-1.c.s | 54 + src/binaryen/test/torture-s/20030909-1.c.s | 52 + src/binaryen/test/torture-s/20030910-1.c.s | 19 + src/binaryen/test/torture-s/20030913-1.c.s | 59 + src/binaryen/test/torture-s/20030914-1.c.s | 347 + src/binaryen/test/torture-s/20030914-2.c.s | 42 + src/binaryen/test/torture-s/20030916-1.c.s | 138 + src/binaryen/test/torture-s/20030920-1.c.s | 17 + src/binaryen/test/torture-s/20030928-1.c.s | 120 + src/binaryen/test/torture-s/20031003-1.c.s | 45 + src/binaryen/test/torture-s/20031010-1.c.s | 64 + src/binaryen/test/torture-s/20031011-1.c.s | 17 + src/binaryen/test/torture-s/20031012-1.c.s | 48 + src/binaryen/test/torture-s/20031020-1.c.s | 43 + src/binaryen/test/torture-s/20031201-1.c.s | 142 + src/binaryen/test/torture-s/20031204-1.c.s | 263 + src/binaryen/test/torture-s/20031211-1.c.s | 31 + src/binaryen/test/torture-s/20031211-2.c.s | 42 + src/binaryen/test/torture-s/20031214-1.c.s | 68 + src/binaryen/test/torture-s/20031215-1.c.s | 71 + src/binaryen/test/torture-s/20031216-1.c.s | 52 + src/binaryen/test/torture-s/20040208-1.c.s | 19 + src/binaryen/test/torture-s/20040218-1.c.s | 110 + src/binaryen/test/torture-s/20040223-1.c.s | 39 + src/binaryen/test/torture-s/20040307-1.c.s | 17 + src/binaryen/test/torture-s/20040309-1.c.s | 37 + src/binaryen/test/torture-s/20040311-1.c.s | 77 + src/binaryen/test/torture-s/20040313-1.c.s | 17 + src/binaryen/test/torture-s/20040319-1.c.s | 38 + src/binaryen/test/torture-s/20040331-1.c.s | 19 + src/binaryen/test/torture-s/20040409-1.c.s | 247 + src/binaryen/test/torture-s/20040409-2.c.s | 437 + src/binaryen/test/torture-s/20040409-3.c.s | 253 + src/binaryen/test/torture-s/20040411-1.c.s | 40 + src/binaryen/test/torture-s/20040625-1.c.s | 62 + src/binaryen/test/torture-s/20040629-1.c.s | 3574 ++ src/binaryen/test/torture-s/20040703-1.c.s | 368 + src/binaryen/test/torture-s/20040704-1.c.s | 17 + src/binaryen/test/torture-s/20040705-1.c.s | 3574 ++ src/binaryen/test/torture-s/20040705-2.c.s | 3574 ++ src/binaryen/test/torture-s/20040706-1.c.s | 19 + src/binaryen/test/torture-s/20040707-1.c.s | 31 + src/binaryen/test/torture-s/20040709-1.c.s | 7509 +++ src/binaryen/test/torture-s/20040709-2.c.s | 6938 +++ src/binaryen/test/torture-s/20040805-1.c.s | 79 + src/binaryen/test/torture-s/20040811-1.c.s | 64 + src/binaryen/test/torture-s/20040820-1.c.s | 71 + src/binaryen/test/torture-s/20040823-1.c.s | 65 + src/binaryen/test/torture-s/20040831-1.c.s | 19 + src/binaryen/test/torture-s/20040917-1.c.s | 54 + src/binaryen/test/torture-s/20041011-1.c.s | 1977 + src/binaryen/test/torture-s/20041019-1.c.s | 93 + src/binaryen/test/torture-s/20041112-1.c.s | 63 + src/binaryen/test/torture-s/20041113-1.c.s | 113 + src/binaryen/test/torture-s/20041114-1.c.s | 41 + src/binaryen/test/torture-s/20041124-1.c.s | 77 + src/binaryen/test/torture-s/20041126-1.c.s | 150 + src/binaryen/test/torture-s/20041201-1.c.s | 96 + src/binaryen/test/torture-s/20041210-1.c.s | 53 + src/binaryen/test/torture-s/20041212-1.c.s | 32 + src/binaryen/test/torture-s/20041213-2.c.s | 78 + src/binaryen/test/torture-s/20041214-1.c.s | 147 + src/binaryen/test/torture-s/20041218-1.c.s | 204 + src/binaryen/test/torture-s/20050104-1.c.s | 39 + src/binaryen/test/torture-s/20050106-1.c.s | 38 + src/binaryen/test/torture-s/20050107-1.c.s | 45 + src/binaryen/test/torture-s/20050111-1.c.s | 52 + src/binaryen/test/torture-s/20050119-1.c.s | 60 + src/binaryen/test/torture-s/20050119-2.c.s | 49 + src/binaryen/test/torture-s/20050121-1.c.s | 431 + src/binaryen/test/torture-s/20050124-1.c.s | 52 + src/binaryen/test/torture-s/20050125-1.c.s | 67 + src/binaryen/test/torture-s/20050131-1.c.s | 34 + src/binaryen/test/torture-s/20050203-1.c.s | 65 + src/binaryen/test/torture-s/20050215-1.c.s | 60 + src/binaryen/test/torture-s/20050218-1.c.s | 166 + src/binaryen/test/torture-s/20050224-1.c.s | 181 + src/binaryen/test/torture-s/20050316-1.c.s | 97 + src/binaryen/test/torture-s/20050316-2.c.s | 75 + src/binaryen/test/torture-s/20050316-3.c.s | 51 + src/binaryen/test/torture-s/20050410-1.c.s | 61 + src/binaryen/test/torture-s/20050502-1.c.s | 324 + src/binaryen/test/torture-s/20050502-2.c.s | 111 + src/binaryen/test/torture-s/20050604-1.c.s | 184 + src/binaryen/test/torture-s/20050607-1.c.s | 17 + src/binaryen/test/torture-s/20050613-1.c.s | 49 + src/binaryen/test/torture-s/20050713-1.c.s | 308 + src/binaryen/test/torture-s/20050826-1.c.s | 200 + src/binaryen/test/torture-s/20050826-2.c.s | 508 + src/binaryen/test/torture-s/20050929-1.c.s | 106 + src/binaryen/test/torture-s/20051012-1.c.s | 50 + src/binaryen/test/torture-s/20051021-1.c.s | 80 + src/binaryen/test/torture-s/20051104-1.c.s | 38 + src/binaryen/test/torture-s/20051110-1.c.s | 70 + src/binaryen/test/torture-s/20051110-2.c.s | 138 + src/binaryen/test/torture-s/20051113-1.c.s | 145 + src/binaryen/test/torture-s/20051215-1.c.s | 81 + src/binaryen/test/torture-s/20060102-1.c.s | 66 + src/binaryen/test/torture-s/20060110-1.c.s | 65 + src/binaryen/test/torture-s/20060110-2.c.s | 82 + src/binaryen/test/torture-s/20060127-1.c.s | 56 + src/binaryen/test/torture-s/20060412-1.c.s | 33 + src/binaryen/test/torture-s/20060420-1.c.s | 463 + src/binaryen/test/torture-s/20060905-1.c.s | 70 + src/binaryen/test/torture-s/20060910-1.c.s | 125 + src/binaryen/test/torture-s/20060929-1.c.s | 77 + src/binaryen/test/torture-s/20060930-1.c.s | 83 + src/binaryen/test/torture-s/20060930-2.c.s | 70 + src/binaryen/test/torture-s/20061031-1.c.s | 80 + src/binaryen/test/torture-s/20061101-1.c.s | 69 + src/binaryen/test/torture-s/20061101-2.c.s | 69 + src/binaryen/test/torture-s/20070201-1.c.s | 73 + src/binaryen/test/torture-s/20070212-1.c.s | 43 + src/binaryen/test/torture-s/20070212-2.c.s | 32 + src/binaryen/test/torture-s/20070212-3.c.s | 46 + src/binaryen/test/torture-s/20070424-1.c.s | 65 + src/binaryen/test/torture-s/20070517-1.c.s | 64 + src/binaryen/test/torture-s/20070614-1.c.s | 123 + src/binaryen/test/torture-s/20070623-1.c.s | 315 + src/binaryen/test/torture-s/20070724-1.c.s | 17 + src/binaryen/test/torture-s/20070824-1.c.s | 17 + src/binaryen/test/torture-s/20071011-1.c.s | 42 + src/binaryen/test/torture-s/20071018-1.c.s | 69 + src/binaryen/test/torture-s/20071029-1.c.s | 161 + src/binaryen/test/torture-s/20071030-1.c.s | 143 + src/binaryen/test/torture-s/20071108-1.c.s | 110 + src/binaryen/test/torture-s/20071120-1.c.s | 143 + src/binaryen/test/torture-s/20071202-1.c.s | 192 + src/binaryen/test/torture-s/20071205-1.c.s | 36 + src/binaryen/test/torture-s/20071211-1.c.s | 62 + src/binaryen/test/torture-s/20071213-1.c.s | 236 + src/binaryen/test/torture-s/20071216-1.c.s | 119 + src/binaryen/test/torture-s/20071219-1.c.s | 351 + src/binaryen/test/torture-s/20071220-1.c.s | 88 + src/binaryen/test/torture-s/20071220-2.c.s | 88 + src/binaryen/test/torture-s/20080117-1.c.s | 59 + src/binaryen/test/torture-s/20080122-1.c.s | 94 + src/binaryen/test/torture-s/20080222-1.c.s | 51 + src/binaryen/test/torture-s/20080408-1.c.s | 17 + src/binaryen/test/torture-s/20080424-1.c.s | 96 + src/binaryen/test/torture-s/20080502-1.c.s | 68 + src/binaryen/test/torture-s/20080506-1.c.s | 17 + src/binaryen/test/torture-s/20080506-2.c.s | 70 + src/binaryen/test/torture-s/20080519-1.c.s | 176 + src/binaryen/test/torture-s/20080522-1.c.s | 119 + src/binaryen/test/torture-s/20080529-1.c.s | 32 + src/binaryen/test/torture-s/20080604-1.c.s | 95 + src/binaryen/test/torture-s/20080719-1.c.s | 79 + src/binaryen/test/torture-s/20080813-1.c.s | 51 + src/binaryen/test/torture-s/20081103-1.c.s | 77 + src/binaryen/test/torture-s/20081112-1.c.s | 17 + src/binaryen/test/torture-s/20081117-1.c.s | 79 + src/binaryen/test/torture-s/20081218-1.c.s | 123 + src/binaryen/test/torture-s/20090113-1.c.s | 152 + src/binaryen/test/torture-s/20090113-2.c.s | 415 + src/binaryen/test/torture-s/20090113-3.c.s | 349 + src/binaryen/test/torture-s/20090207-1.c.s | 44 + src/binaryen/test/torture-s/20090527-1.c.s | 62 + src/binaryen/test/torture-s/20090623-1.c.s | 51 + src/binaryen/test/torture-s/20090711-1.c.s | 44 + src/binaryen/test/torture-s/20090814-1.c.s | 86 + src/binaryen/test/torture-s/20091229-1.c.s | 33 + src/binaryen/test/torture-s/20100209-1.c.s | 32 + src/binaryen/test/torture-s/20100316-1.c.s | 63 + src/binaryen/test/torture-s/20100416-1.c.s | 126 + src/binaryen/test/torture-s/20100430-1.c.s | 17 + src/binaryen/test/torture-s/20100708-1.c.s | 49 + src/binaryen/test/torture-s/20100805-1.c.s | 49 + src/binaryen/test/torture-s/20100827-1.c.s | 81 + src/binaryen/test/torture-s/20101011-1.c.s | 46 + src/binaryen/test/torture-s/20101013-1.c.s | 78 + src/binaryen/test/torture-s/20101025-1.c.s | 89 + src/binaryen/test/torture-s/20111208-1.c.s | 109 + src/binaryen/test/torture-s/20111212-1.c.s | 58 + src/binaryen/test/torture-s/20111227-1.c.s | 77 + src/binaryen/test/torture-s/20111227-2.c.s | 159 + src/binaryen/test/torture-s/20111227-3.c.s | 159 + src/binaryen/test/torture-s/20120105-1.c.s | 59 + src/binaryen/test/torture-s/20120111-1.c.s | 46 + src/binaryen/test/torture-s/20120207-1.c.s | 68 + src/binaryen/test/torture-s/20120427-1.c.s | 270 + src/binaryen/test/torture-s/20120427-2.c.s | 270 + src/binaryen/test/torture-s/20120615-1.c.s | 48 + src/binaryen/test/torture-s/20120808-1.c.s | 165 + src/binaryen/test/torture-s/20120817-1.c.s | 60 + src/binaryen/test/torture-s/20120919-1.c.s | 155 + src/binaryen/test/torture-s/20121108-1.c.s | 246 + src/binaryen/test/torture-s/20131127-1.c.s | 130 + src/binaryen/test/torture-s/20140212-1.c.s | 260 + src/binaryen/test/torture-s/20140326-1.c.s | 26 + src/binaryen/test/torture-s/20140425-1.c.s | 59 + src/binaryen/test/torture-s/900409-1.c.s | 109 + src/binaryen/test/torture-s/920202-1.c.s | 32 + src/binaryen/test/torture-s/920409-1.c.s | 32 + src/binaryen/test/torture-s/920410-1.c.s | 19 + src/binaryen/test/torture-s/920411-1.c.s | 33 + src/binaryen/test/torture-s/920428-1.c.s | 49 + src/binaryen/test/torture-s/920429-1.c.s | 73 + src/binaryen/test/torture-s/920501-1.c.s | 63 + src/binaryen/test/torture-s/920501-2.c.s | 486 + src/binaryen/test/torture-s/920501-6.c.s | 374 + src/binaryen/test/torture-s/920501-8.c.s | 154 + src/binaryen/test/torture-s/920501-9.c.s | 254 + src/binaryen/test/torture-s/920506-1.c.s | 39 + src/binaryen/test/torture-s/920520-1.c.s | 48 + src/binaryen/test/torture-s/920603-1.c.s | 42 + src/binaryen/test/torture-s/920604-1.c.s | 33 + src/binaryen/test/torture-s/920612-1.c.s | 35 + src/binaryen/test/torture-s/920618-1.c.s | 19 + src/binaryen/test/torture-s/920625-1.c.s | 333 + src/binaryen/test/torture-s/920710-1.c.s | 19 + src/binaryen/test/torture-s/920711-1.c.s | 33 + src/binaryen/test/torture-s/920721-1.c.s | 33 + src/binaryen/test/torture-s/920721-2.c.s | 33 + src/binaryen/test/torture-s/920721-3.c.s | 76 + src/binaryen/test/torture-s/920726-1.c.s | 220 + src/binaryen/test/torture-s/920730-1.c.s | 71 + src/binaryen/test/torture-s/920731-1.c.s | 62 + src/binaryen/test/torture-s/920810-1.c.s | 43 + src/binaryen/test/torture-s/920812-1.c.s | 34 + src/binaryen/test/torture-s/920829-1.c.s | 52 + src/binaryen/test/torture-s/920908-1.c.s | 79 + src/binaryen/test/torture-s/920908-2.c.s | 37 + src/binaryen/test/torture-s/920909-1.c.s | 61 + src/binaryen/test/torture-s/920922-1.c.s | 40 + src/binaryen/test/torture-s/920929-1.c.s | 34 + src/binaryen/test/torture-s/921006-1.c.s | 19 + src/binaryen/test/torture-s/921007-1.c.s | 19 + src/binaryen/test/torture-s/921013-1.c.s | 57 + src/binaryen/test/torture-s/921016-1.c.s | 19 + src/binaryen/test/torture-s/921019-1.c.s | 47 + src/binaryen/test/torture-s/921019-2.c.s | 19 + src/binaryen/test/torture-s/921029-1.c.s | 84 + src/binaryen/test/torture-s/921104-1.c.s | 19 + src/binaryen/test/torture-s/921110-1.c.s | 29 + src/binaryen/test/torture-s/921112-1.c.s | 73 + src/binaryen/test/torture-s/921113-1.c.s | 194 + src/binaryen/test/torture-s/921117-1.c.s | 87 + src/binaryen/test/torture-s/921123-1.c.s | 39 + src/binaryen/test/torture-s/921123-2.c.s | 70 + src/binaryen/test/torture-s/921124-1.c.s | 68 + src/binaryen/test/torture-s/921202-1.c.s | 102 + src/binaryen/test/torture-s/921202-2.c.s | 37 + src/binaryen/test/torture-s/921204-1.c.s | 41 + src/binaryen/test/torture-s/921207-1.c.s | 32 + src/binaryen/test/torture-s/921208-1.c.s | 47 + src/binaryen/test/torture-s/921208-2.c.s | 47 + src/binaryen/test/torture-s/921218-1.c.s | 32 + src/binaryen/test/torture-s/921218-2.c.s | 32 + src/binaryen/test/torture-s/930106-1.c.s | 45 + src/binaryen/test/torture-s/930111-1.c.s | 51 + src/binaryen/test/torture-s/930123-1.c.s | 35 + src/binaryen/test/torture-s/930126-1.c.s | 52 + src/binaryen/test/torture-s/930208-1.c.s | 47 + src/binaryen/test/torture-s/930406-1.c.s | 32 + src/binaryen/test/torture-s/930408-1.c.s | 69 + src/binaryen/test/torture-s/930429-1.c.s | 34 + src/binaryen/test/torture-s/930429-2.c.s | 36 + src/binaryen/test/torture-s/930513-1.c.s | 96 + src/binaryen/test/torture-s/930513-2.c.s | 81 + src/binaryen/test/torture-s/930518-1.c.s | 155 + src/binaryen/test/torture-s/930526-1.c.s | 34 + src/binaryen/test/torture-s/930527-1.c.s | 36 + src/binaryen/test/torture-s/930529-1.c.s | 33 + src/binaryen/test/torture-s/930603-1.c.s | 81 + src/binaryen/test/torture-s/930603-2.c.s | 67 + src/binaryen/test/torture-s/930603-3.c.s | 56 + src/binaryen/test/torture-s/930608-1.c.s | 43 + src/binaryen/test/torture-s/930614-1.c.s | 35 + src/binaryen/test/torture-s/930614-2.c.s | 19 + src/binaryen/test/torture-s/930621-1.c.s | 32 + src/binaryen/test/torture-s/930622-1.c.s | 84 + src/binaryen/test/torture-s/930622-2.c.s | 66 + src/binaryen/test/torture-s/930628-1.c.s | 147 + src/binaryen/test/torture-s/930630-1.c.s | 42 + src/binaryen/test/torture-s/930702-1.c.s | 46 + src/binaryen/test/torture-s/930713-1.c.s | 33 + src/binaryen/test/torture-s/930718-1.c.s | 32 + src/binaryen/test/torture-s/930719-1.c.s | 56 + src/binaryen/test/torture-s/930725-1.c.s | 73 + src/binaryen/test/torture-s/930818-1.c.s | 32 + src/binaryen/test/torture-s/930916-1.c.s | 42 + src/binaryen/test/torture-s/930921-1.c.s | 69 + src/binaryen/test/torture-s/930929-1.c.s | 81 + src/binaryen/test/torture-s/930930-1.c.s | 121 + src/binaryen/test/torture-s/930930-2.c.s | 74 + src/binaryen/test/torture-s/931004-1.c.s | 54 + src/binaryen/test/torture-s/931004-10.c.s | 127 + src/binaryen/test/torture-s/931004-11.c.s | 137 + src/binaryen/test/torture-s/931004-12.c.s | 160 + src/binaryen/test/torture-s/931004-13.c.s | 128 + src/binaryen/test/torture-s/931004-14.c.s | 145 + src/binaryen/test/torture-s/931004-2.c.s | 104 + src/binaryen/test/torture-s/931004-3.c.s | 60 + src/binaryen/test/torture-s/931004-4.c.s | 101 + src/binaryen/test/torture-s/931004-5.c.s | 98 + src/binaryen/test/torture-s/931004-6.c.s | 127 + src/binaryen/test/torture-s/931004-7.c.s | 60 + src/binaryen/test/torture-s/931004-8.c.s | 101 + src/binaryen/test/torture-s/931004-9.c.s | 98 + src/binaryen/test/torture-s/931005-1.c.s | 33 + src/binaryen/test/torture-s/931009-1.c.s | 33 + src/binaryen/test/torture-s/931012-1.c.s | 37 + src/binaryen/test/torture-s/931017-1.c.s | 93 + src/binaryen/test/torture-s/931018-1.c.s | 60 + src/binaryen/test/torture-s/931031-1.c.s | 40 + src/binaryen/test/torture-s/931102-1.c.s | 58 + src/binaryen/test/torture-s/931102-2.c.s | 58 + src/binaryen/test/torture-s/931110-1.c.s | 88 + src/binaryen/test/torture-s/931110-2.c.s | 19 + src/binaryen/test/torture-s/931208-1.c.s | 32 + src/binaryen/test/torture-s/931228-1.c.s | 33 + src/binaryen/test/torture-s/940115-1.c.s | 33 + src/binaryen/test/torture-s/940122-1.c.s | 100 + src/binaryen/test/torture-s/941014-1.c.s | 34 + src/binaryen/test/torture-s/941014-2.c.s | 117 + src/binaryen/test/torture-s/941015-1.c.s | 55 + src/binaryen/test/torture-s/941021-1.c.s | 48 + src/binaryen/test/torture-s/941025-1.c.s | 37 + src/binaryen/test/torture-s/941031-1.c.s | 38 + src/binaryen/test/torture-s/941101-1.c.s | 32 + src/binaryen/test/torture-s/941110-1.c.s | 33 + src/binaryen/test/torture-s/941202-1.c.s | 42 + src/binaryen/test/torture-s/950221-1.c.s | 131 + src/binaryen/test/torture-s/950322-1.c.s | 45 + src/binaryen/test/torture-s/950426-1.c.s | 93 + src/binaryen/test/torture-s/950426-2.c.s | 19 + src/binaryen/test/torture-s/950503-1.c.s | 19 + src/binaryen/test/torture-s/950511-1.c.s | 19 + src/binaryen/test/torture-s/950512-1.c.s | 51 + src/binaryen/test/torture-s/950605-1.c.s | 44 + src/binaryen/test/torture-s/950607-1.c.s | 19 + src/binaryen/test/torture-s/950607-2.c.s | 62 + src/binaryen/test/torture-s/950612-1.c.s | 95 + src/binaryen/test/torture-s/950621-1.c.s | 50 + src/binaryen/test/torture-s/950628-1.c.s | 55 + src/binaryen/test/torture-s/950704-1.c.s | 82 + src/binaryen/test/torture-s/950706-1.c.s | 37 + src/binaryen/test/torture-s/950710-1.c.s | 72 + src/binaryen/test/torture-s/950714-1.c.s | 151 + src/binaryen/test/torture-s/950809-1.c.s | 78 + src/binaryen/test/torture-s/950906-1.c.s | 49 + src/binaryen/test/torture-s/950915-1.c.s | 75 + src/binaryen/test/torture-s/950929-1.c.s | 34 + src/binaryen/test/torture-s/951003-1.c.s | 46 + src/binaryen/test/torture-s/951115-1.c.s | 65 + src/binaryen/test/torture-s/951204-1.c.s | 35 + src/binaryen/test/torture-s/960116-1.c.s | 46 + src/binaryen/test/torture-s/960117-1.c.s | 83 + src/binaryen/test/torture-s/960209-1.c.s | 87 + src/binaryen/test/torture-s/960215-1.c.s | 383 + src/binaryen/test/torture-s/960218-1.c.s | 72 + src/binaryen/test/torture-s/960219-1.c.s | 40 + src/binaryen/test/torture-s/960301-1.c.s | 82 + src/binaryen/test/torture-s/960302-1.c.s | 67 + src/binaryen/test/torture-s/960311-1.c.s | 102 + src/binaryen/test/torture-s/960311-2.c.s | 102 + src/binaryen/test/torture-s/960311-3.c.s | 101 + src/binaryen/test/torture-s/960312-1.c.s | 85 + src/binaryen/test/torture-s/960317-1.c.s | 51 + src/binaryen/test/torture-s/960321-1.c.s | 55 + src/binaryen/test/torture-s/960326-1.c.s | 46 + src/binaryen/test/torture-s/960327-1.c.s | 101 + src/binaryen/test/torture-s/960402-1.c.s | 36 + src/binaryen/test/torture-s/960405-1.c.s | 57 + src/binaryen/test/torture-s/960416-1.c.s | 153 + src/binaryen/test/torture-s/960419-1.c.s | 40 + src/binaryen/test/torture-s/960419-2.c.s | 19 + src/binaryen/test/torture-s/960512-1.c.s | 37 + src/binaryen/test/torture-s/960513-1.c.s | 170 + src/binaryen/test/torture-s/960521-1.c.s | 118 + src/binaryen/test/torture-s/960608-1.c.s | 35 + src/binaryen/test/torture-s/960801-1.c.s | 45 + src/binaryen/test/torture-s/960802-1.c.s | 85 + src/binaryen/test/torture-s/960830-1.c.s | 19 + src/binaryen/test/torture-s/960909-1.c.s | 85 + src/binaryen/test/torture-s/961004-1.c.s | 38 + src/binaryen/test/torture-s/961017-1.c.s | 19 + src/binaryen/test/torture-s/961017-2.c.s | 30 + src/binaryen/test/torture-s/961026-1.c.s | 34 + src/binaryen/test/torture-s/961112-1.c.s | 33 + src/binaryen/test/torture-s/961122-1.c.s | 75 + src/binaryen/test/torture-s/961122-2.c.s | 33 + src/binaryen/test/torture-s/961125-1.c.s | 88 + src/binaryen/test/torture-s/961206-1.c.s | 79 + src/binaryen/test/torture-s/961213-1.c.s | 62 + src/binaryen/test/torture-s/961223-1.c.s | 34 + src/binaryen/test/torture-s/970214-1.c.s | 19 + src/binaryen/test/torture-s/970214-2.c.s | 19 + src/binaryen/test/torture-s/970217-1.c.s | 34 + src/binaryen/test/torture-s/970923-1.c.s | 47 + src/binaryen/test/torture-s/980205.c.s | 78 + src/binaryen/test/torture-s/980223.c.s | 127 + src/binaryen/test/torture-s/980424-1.c.s | 95 + src/binaryen/test/torture-s/980505-1.c.s | 19 + src/binaryen/test/torture-s/980505-2.c.s | 32 + src/binaryen/test/torture-s/980506-1.c.s | 19 + src/binaryen/test/torture-s/980506-2.c.s | 32 + src/binaryen/test/torture-s/980506-3.c.s | 33 + src/binaryen/test/torture-s/980526-2.c.s | 129 + src/binaryen/test/torture-s/980526-3.c.s | 33 + src/binaryen/test/torture-s/980602-1.c.s | 19 + src/binaryen/test/torture-s/980602-2.c.s | 51 + src/binaryen/test/torture-s/980604-1.c.s | 72 + src/binaryen/test/torture-s/980605-1.c.s | 141 + src/binaryen/test/torture-s/980608-1.c.s | 131 + src/binaryen/test/torture-s/980612-1.c.s | 71 + src/binaryen/test/torture-s/980617-1.c.s | 57 + src/binaryen/test/torture-s/980618-1.c.s | 40 + src/binaryen/test/torture-s/980701-1.c.s | 67 + src/binaryen/test/torture-s/980707-1.c.s | 237 + src/binaryen/test/torture-s/980709-1.c.s | 57 + src/binaryen/test/torture-s/980716-1.c.s | 97 + src/binaryen/test/torture-s/980929-1.c.s | 41 + src/binaryen/test/torture-s/981001-1.c.s | 103 + src/binaryen/test/torture-s/981019-1.c.s | 125 + src/binaryen/test/torture-s/981130-1.c.s | 68 + src/binaryen/test/torture-s/981206-1.c.s | 56 + src/binaryen/test/torture-s/990106-1.c.s | 35 + src/binaryen/test/torture-s/990106-2.c.s | 43 + src/binaryen/test/torture-s/990117-1.c.s | 37 + src/binaryen/test/torture-s/990127-1.c.s | 111 + src/binaryen/test/torture-s/990127-2.c.s | 64 + src/binaryen/test/torture-s/990128-1.c.s | 220 + src/binaryen/test/torture-s/990130-1.c.s | 59 + src/binaryen/test/torture-s/990211-1.c.s | 29 + src/binaryen/test/torture-s/990222-1.c.s | 92 + src/binaryen/test/torture-s/990324-1.c.s | 45 + src/binaryen/test/torture-s/990326-1.c.s | 461 + src/binaryen/test/torture-s/990404-1.c.s | 159 + src/binaryen/test/torture-s/990513-1.c.s | 100 + src/binaryen/test/torture-s/990524-1.c.s | 110 + src/binaryen/test/torture-s/990525-1.c.s | 64 + src/binaryen/test/torture-s/990525-2.c.s | 49 + src/binaryen/test/torture-s/990527-1.c.s | 80 + src/binaryen/test/torture-s/990531-1.c.s | 45 + src/binaryen/test/torture-s/990604-1.c.s | 71 + src/binaryen/test/torture-s/990628-1.c.s | 233 + src/binaryen/test/torture-s/990804-1.c.s | 32 + src/binaryen/test/torture-s/990811-1.c.s | 59 + src/binaryen/test/torture-s/990826-0.c.s | 17 + src/binaryen/test/torture-s/990827-1.c.s | 41 + src/binaryen/test/torture-s/990829-1.c.s | 37 + src/binaryen/test/torture-s/990923-1.c.s | 40 + src/binaryen/test/torture-s/991014-1.c.s | 56 + src/binaryen/test/torture-s/991016-1.c.s | 105 + src/binaryen/test/torture-s/991019-1.c.s | 34 + src/binaryen/test/torture-s/991023-1.c.s | 47 + src/binaryen/test/torture-s/991030-1.c.s | 40 + src/binaryen/test/torture-s/991112-1.c.s | 64 + src/binaryen/test/torture-s/991118-1.c.s | 242 + src/binaryen/test/torture-s/991201-1.c.s | 202 + src/binaryen/test/torture-s/991202-1.c.s | 43 + src/binaryen/test/torture-s/991202-2.c.s | 32 + src/binaryen/test/torture-s/991202-3.c.s | 66 + src/binaryen/test/torture-s/991216-1.c.s | 364 + src/binaryen/test/torture-s/991216-2.c.s | 262 + src/binaryen/test/torture-s/991216-4.c.s | 19 + src/binaryen/test/torture-s/991221-1.c.s | 19 + src/binaryen/test/torture-s/991227-1.c.s | 48 + src/binaryen/test/torture-s/991228-1.c.s | 109 + src/binaryen/test/torture-s/align-1.c.s | 17 + src/binaryen/test/torture-s/align-2.c.s | 365 + src/binaryen/test/torture-s/align-3.c.s | 29 + src/binaryen/test/torture-s/alloca-1.c.s | 30 + src/binaryen/test/torture-s/anon-1.c.s | 30 + src/binaryen/test/torture-s/arith-1.c.s | 38 + src/binaryen/test/torture-s/arith-rand-ll.c.s | 501 + src/binaryen/test/torture-s/arith-rand.c.s | 424 + src/binaryen/test/torture-s/ashldi-1.c.s | 144 + src/binaryen/test/torture-s/ashrdi-1.c.s | 718 + src/binaryen/test/torture-s/bcp-1.c.s | 420 + src/binaryen/test/torture-s/bf-layout-1.c.s | 37 + src/binaryen/test/torture-s/bf-pack-1.c.s | 66 + src/binaryen/test/torture-s/bf-sign-1.c.s | 19 + src/binaryen/test/torture-s/bf-sign-2.c.s | 75 + src/binaryen/test/torture-s/bf64-1.c.s | 51 + src/binaryen/test/torture-s/bitfld-1.c.s | 18 + src/binaryen/test/torture-s/bitfld-2.c.s | 19 + src/binaryen/test/torture-s/bitfld-3.c.s | 122 + src/binaryen/test/torture-s/bitfld-4.c.s | 41 + src/binaryen/test/torture-s/bitfld-5.c.s | 111 + src/binaryen/test/torture-s/bitfld-6.c.s | 17 + src/binaryen/test/torture-s/bswap-1.c.s | 167 + .../test/torture-s/builtin-bitops-1.c.s | 1730 + .../test/torture-s/builtin-constant.c.s | 52 + .../test/torture-s/builtin-prefetch-1.c.s | 80 + .../test/torture-s/builtin-prefetch-2.c.s | 207 + .../test/torture-s/builtin-prefetch-3.c.s | 268 + .../test/torture-s/builtin-prefetch-4.c.s | 493 + .../test/torture-s/builtin-prefetch-5.c.s | 113 + .../test/torture-s/builtin-prefetch-6.c.s | 146 + .../torture-s/builtin-types-compatible-p.c.s | 46 + src/binaryen/test/torture-s/call-trap-1.c.s | 43 + src/binaryen/test/torture-s/cbrt.c.s | 159 + src/binaryen/test/torture-s/cmpdi-1.c.s | 1008 + src/binaryen/test/torture-s/cmpsf-1.c.s | 654 + src/binaryen/test/torture-s/cmpsi-1.c.s | 82 + src/binaryen/test/torture-s/cmpsi-2.c.s | 1008 + src/binaryen/test/torture-s/compare-1.c.s | 246 + src/binaryen/test/torture-s/compare-2.c.s | 33 + src/binaryen/test/torture-s/compare-3.c.s | 101 + src/binaryen/test/torture-s/complex-1.c.s | 77 + src/binaryen/test/torture-s/complex-2.c.s | 77 + src/binaryen/test/torture-s/complex-3.c.s | 33 + src/binaryen/test/torture-s/complex-4.c.s | 19 + src/binaryen/test/torture-s/complex-5.c.s | 138 + src/binaryen/test/torture-s/complex-6.c.s | 201 + src/binaryen/test/torture-s/complex-7.c.s | 774 + src/binaryen/test/torture-s/compndlit-1.c.s | 53 + .../test/torture-s/const-addr-expr-1.c.s | 80 + src/binaryen/test/torture-s/conversion.c.s | 598 + src/binaryen/test/torture-s/cvt-1.c.s | 47 + src/binaryen/test/torture-s/dbra-1.c.s | 124 + src/binaryen/test/torture-s/divcmp-1.c.s | 359 + src/binaryen/test/torture-s/divcmp-2.c.s | 119 + src/binaryen/test/torture-s/divcmp-3.c.s | 185 + src/binaryen/test/torture-s/divcmp-4.c.s | 205 + src/binaryen/test/torture-s/divcmp-5.c.s | 45 + src/binaryen/test/torture-s/divconst-1.c.s | 37 + src/binaryen/test/torture-s/divconst-2.c.s | 123 + src/binaryen/test/torture-s/divconst-3.c.s | 34 + src/binaryen/test/torture-s/divmod-1.c.s | 161 + src/binaryen/test/torture-s/doloop-1.c.s | 59 + src/binaryen/test/torture-s/doloop-2.c.s | 59 + src/binaryen/test/torture-s/eeprof-1.c.s | 292 + src/binaryen/test/torture-s/enum-1.c.s | 19 + src/binaryen/test/torture-s/enum-2.c.s | 19 + src/binaryen/test/torture-s/enum-3.c.s | 51 + src/binaryen/test/torture-s/extzvsi.c.s | 61 + src/binaryen/test/torture-s/ffs-1.c.s | 38 + src/binaryen/test/torture-s/ffs-2.c.s | 154 + src/binaryen/test/torture-s/float-floor.c.s | 48 + src/binaryen/test/torture-s/floatunsisf-1.c.s | 67 + src/binaryen/test/torture-s/fprintf-1.c.s | 210 + src/binaryen/test/torture-s/fprintf-chk-1.c.s | 452 + src/binaryen/test/torture-s/frame-address.c.s | 134 + src/binaryen/test/torture-s/func-ptr-1.c.s | 19 + src/binaryen/test/torture-s/gofast.c.s | 504 + .../test/torture-s/ifcvt-onecmpl-abs-1.c.s | 43 + src/binaryen/test/torture-s/index-1.c.s | 97 + src/binaryen/test/torture-s/inst-check.c.s | 54 + src/binaryen/test/torture-s/int-compare.c.s | 129 + src/binaryen/test/torture-s/ipa-sra-1.c.s | 18 + src/binaryen/test/torture-s/ipa-sra-2.c.s | 44 + src/binaryen/test/torture-s/longlong.c.s | 132 + src/binaryen/test/torture-s/loop-1.c.s | 19 + src/binaryen/test/torture-s/loop-10.c.s | 40 + src/binaryen/test/torture-s/loop-11.c.s | 67 + src/binaryen/test/torture-s/loop-12.c.s | 107 + src/binaryen/test/torture-s/loop-13.c.s | 78 + src/binaryen/test/torture-s/loop-14.c.s | 45 + src/binaryen/test/torture-s/loop-15.c.s | 224 + src/binaryen/test/torture-s/loop-2.c.s | 68 + src/binaryen/test/torture-s/loop-2b.c.s | 77 + src/binaryen/test/torture-s/loop-2c.c.s | 119 + src/binaryen/test/torture-s/loop-2d.c.s | 76 + src/binaryen/test/torture-s/loop-2e.c.s | 147 + src/binaryen/test/torture-s/loop-2f.c.s | 92 + src/binaryen/test/torture-s/loop-2g.c.s | 92 + src/binaryen/test/torture-s/loop-3.c.s | 94 + src/binaryen/test/torture-s/loop-3b.c.s | 99 + src/binaryen/test/torture-s/loop-3c.c.s | 86 + src/binaryen/test/torture-s/loop-4.c.s | 32 + src/binaryen/test/torture-s/loop-4b.c.s | 32 + src/binaryen/test/torture-s/loop-5.c.s | 124 + src/binaryen/test/torture-s/loop-6.c.s | 19 + src/binaryen/test/torture-s/loop-7.c.s | 67 + src/binaryen/test/torture-s/loop-8.c.s | 100 + src/binaryen/test/torture-s/loop-9.c.s | 31 + src/binaryen/test/torture-s/loop-ivopts-1.c.s | 58 + src/binaryen/test/torture-s/loop-ivopts-2.c.s | 205 + src/binaryen/test/torture-s/lshrdi-1.c.s | 144 + src/binaryen/test/torture-s/mayalias-1.c.s | 19 + src/binaryen/test/torture-s/mayalias-2.c.s | 30 + src/binaryen/test/torture-s/mayalias-3.c.s | 100 + src/binaryen/test/torture-s/medce-1.c.s | 63 + src/binaryen/test/torture-s/memcpy-1.c.s | 211 + src/binaryen/test/torture-s/memcpy-2.c.s | 268 + src/binaryen/test/torture-s/memcpy-bi.c.s | 1736 + src/binaryen/test/torture-s/memset-1.c.s | 453 + src/binaryen/test/torture-s/memset-2.c.s | 981 + src/binaryen/test/torture-s/memset-3.c.s | 738 + src/binaryen/test/torture-s/mod-1.c.s | 41 + .../test/torture-s/mode-dependent-address.c.s | 324 + src/binaryen/test/torture-s/multdi-1.c.s | 45 + src/binaryen/test/torture-s/multi-ix.c.s | 1231 + src/binaryen/test/torture-s/nestfunc-4.c.s | 91 + src/binaryen/test/torture-s/p18298.c.s | 54 + src/binaryen/test/torture-s/packed-1.c.s | 66 + src/binaryen/test/torture-s/packed-2.c.s | 29 + src/binaryen/test/torture-s/pending-4.c.s | 152 + src/binaryen/test/torture-s/postmod-1.c.s | 594 + src/binaryen/test/torture-s/pr15262-1.c.s | 30 + src/binaryen/test/torture-s/pr15262-2.c.s | 59 + src/binaryen/test/torture-s/pr15262.c.s | 60 + src/binaryen/test/torture-s/pr15296.c.s | 212 + src/binaryen/test/torture-s/pr16790-1.c.s | 17 + src/binaryen/test/torture-s/pr17078-1.c.s | 31 + src/binaryen/test/torture-s/pr17133.c.s | 134 + src/binaryen/test/torture-s/pr17252.c.s | 44 + src/binaryen/test/torture-s/pr19005.c.s | 217 + src/binaryen/test/torture-s/pr19449.c.s | 65 + src/binaryen/test/torture-s/pr19515.c.s | 17 + src/binaryen/test/torture-s/pr19606.c.s | 81 + src/binaryen/test/torture-s/pr19687.c.s | 17 + src/binaryen/test/torture-s/pr19689.c.s | 55 + src/binaryen/test/torture-s/pr20100-1.c.s | 144 + src/binaryen/test/torture-s/pr20187-1.c.s | 73 + src/binaryen/test/torture-s/pr20466-1.c.s | 118 + src/binaryen/test/torture-s/pr20527-1.c.s | 118 + src/binaryen/test/torture-s/pr20601-1.c.s | 338 + src/binaryen/test/torture-s/pr20621-1.c.s | 47 + src/binaryen/test/torture-s/pr21173.c.s | 72 + src/binaryen/test/torture-s/pr21331.c.s | 43 + src/binaryen/test/torture-s/pr21964-1.c.s | 45 + src/binaryen/test/torture-s/pr22061-1.c.s | 60 + src/binaryen/test/torture-s/pr22061-2.c.s | 28 + src/binaryen/test/torture-s/pr22098-1.c.s | 19 + src/binaryen/test/torture-s/pr22098-2.c.s | 19 + src/binaryen/test/torture-s/pr22098-3.c.s | 65 + src/binaryen/test/torture-s/pr22348.c.s | 39 + src/binaryen/test/torture-s/pr22429.c.s | 36 + src/binaryen/test/torture-s/pr22493-1.c.s | 32 + src/binaryen/test/torture-s/pr22630.c.s | 52 + src/binaryen/test/torture-s/pr23047.c.s | 50 + src/binaryen/test/torture-s/pr23135.c.s | 318 + src/binaryen/test/torture-s/pr23324.c.s | 98 + src/binaryen/test/torture-s/pr23467.c.s | 28 + src/binaryen/test/torture-s/pr23604.c.s | 46 + src/binaryen/test/torture-s/pr23941.c.s | 38 + src/binaryen/test/torture-s/pr24141.c.s | 66 + src/binaryen/test/torture-s/pr24142.c.s | 35 + src/binaryen/test/torture-s/pr24716.c.s | 581 + src/binaryen/test/torture-s/pr24851.c.s | 17 + src/binaryen/test/torture-s/pr25125.c.s | 59 + src/binaryen/test/torture-s/pr25737.c.s | 44 + src/binaryen/test/torture-s/pr27073.c.s | 133 + src/binaryen/test/torture-s/pr27260.c.s | 185 + src/binaryen/test/torture-s/pr27285.c.s | 156 + src/binaryen/test/torture-s/pr27364.c.s | 50 + src/binaryen/test/torture-s/pr27671-1.c.s | 19 + src/binaryen/test/torture-s/pr28289.c.s | 77 + src/binaryen/test/torture-s/pr28403.c.s | 88 + src/binaryen/test/torture-s/pr28651.c.s | 44 + src/binaryen/test/torture-s/pr28778.c.s | 82 + src/binaryen/test/torture-s/pr28982a.c.s | 589 + src/binaryen/test/torture-s/pr28982b.c.s | 629 + src/binaryen/test/torture-s/pr29006.c.s | 61 + src/binaryen/test/torture-s/pr29156.c.s | 50 + src/binaryen/test/torture-s/pr29695-1.c.s | 121 + src/binaryen/test/torture-s/pr29695-2.c.s | 221 + src/binaryen/test/torture-s/pr29797-1.c.s | 30 + src/binaryen/test/torture-s/pr29797-2.c.s | 30 + src/binaryen/test/torture-s/pr29798.c.s | 17 + src/binaryen/test/torture-s/pr30185.c.s | 33 + src/binaryen/test/torture-s/pr30778.c.s | 83 + src/binaryen/test/torture-s/pr31072.c.s | 38 + src/binaryen/test/torture-s/pr31136.c.s | 34 + src/binaryen/test/torture-s/pr31169.c.s | 71 + src/binaryen/test/torture-s/pr31448-2.c.s | 76 + src/binaryen/test/torture-s/pr31448.c.s | 76 + src/binaryen/test/torture-s/pr31605.c.s | 44 + src/binaryen/test/torture-s/pr32244-1.c.s | 59 + src/binaryen/test/torture-s/pr32500.c.s | 63 + src/binaryen/test/torture-s/pr33142.c.s | 77 + src/binaryen/test/torture-s/pr33382.c.s | 60 + src/binaryen/test/torture-s/pr33631.c.s | 17 + src/binaryen/test/torture-s/pr33669.c.s | 60 + src/binaryen/test/torture-s/pr33779-1.c.s | 34 + src/binaryen/test/torture-s/pr33779-2.c.s | 36 + src/binaryen/test/torture-s/pr33870-1.c.s | 489 + src/binaryen/test/torture-s/pr33870.c.s | 420 + src/binaryen/test/torture-s/pr33992.c.s | 115 + src/binaryen/test/torture-s/pr34070-1.c.s | 32 + src/binaryen/test/torture-s/pr34070-2.c.s | 33 + src/binaryen/test/torture-s/pr34099-2.c.s | 75 + src/binaryen/test/torture-s/pr34099.c.s | 31 + src/binaryen/test/torture-s/pr34130.c.s | 41 + src/binaryen/test/torture-s/pr34154.c.s | 37 + src/binaryen/test/torture-s/pr34176.c.s | 118 + src/binaryen/test/torture-s/pr34415.c.s | 112 + src/binaryen/test/torture-s/pr34456.c.s | 107 + src/binaryen/test/torture-s/pr34768-1.c.s | 90 + src/binaryen/test/torture-s/pr34768-2.c.s | 94 + src/binaryen/test/torture-s/pr34971.c.s | 66 + src/binaryen/test/torture-s/pr34982.c.s | 17 + src/binaryen/test/torture-s/pr35163.c.s | 17 + src/binaryen/test/torture-s/pr35231.c.s | 44 + src/binaryen/test/torture-s/pr35390.c.s | 31 + src/binaryen/test/torture-s/pr35456.c.s | 47 + src/binaryen/test/torture-s/pr35472.c.s | 392 + src/binaryen/test/torture-s/pr35800.c.s | 154 + src/binaryen/test/torture-s/pr36034-1.c.s | 402 + src/binaryen/test/torture-s/pr36034-2.c.s | 402 + src/binaryen/test/torture-s/pr36038.c.s | 178 + src/binaryen/test/torture-s/pr36077.c.s | 31 + src/binaryen/test/torture-s/pr36093.c.s | 42 + src/binaryen/test/torture-s/pr36321.c.s | 45 + src/binaryen/test/torture-s/pr36339.c.s | 95 + src/binaryen/test/torture-s/pr36343.c.s | 94 + src/binaryen/test/torture-s/pr36691.c.s | 42 + src/binaryen/test/torture-s/pr36765.c.s | 55 + src/binaryen/test/torture-s/pr37102.c.s | 90 + src/binaryen/test/torture-s/pr37125.c.s | 46 + src/binaryen/test/torture-s/pr37573.c.s | 377 + src/binaryen/test/torture-s/pr37882.c.s | 33 + src/binaryen/test/torture-s/pr37924.c.s | 70 + src/binaryen/test/torture-s/pr37931.c.s | 33 + src/binaryen/test/torture-s/pr38048-1.c.s | 30 + src/binaryen/test/torture-s/pr38048-2.c.s | 30 + src/binaryen/test/torture-s/pr38051.c.s | 1014 + src/binaryen/test/torture-s/pr38151.c.s | 136 + src/binaryen/test/torture-s/pr38212.c.s | 70 + src/binaryen/test/torture-s/pr38236.c.s | 62 + src/binaryen/test/torture-s/pr38422.c.s | 58 + src/binaryen/test/torture-s/pr38533.c.s | 1250 + src/binaryen/test/torture-s/pr38819.c.s | 71 + src/binaryen/test/torture-s/pr38969.c.s | 103 + src/binaryen/test/torture-s/pr39100.c.s | 166 + src/binaryen/test/torture-s/pr39120.c.s | 87 + src/binaryen/test/torture-s/pr39228.c.s | 38 + src/binaryen/test/torture-s/pr39233.c.s | 57 + src/binaryen/test/torture-s/pr39240.c.s | 307 + src/binaryen/test/torture-s/pr39339.c.s | 156 + src/binaryen/test/torture-s/pr39501.c.s | 483 + src/binaryen/test/torture-s/pr40022.c.s | 158 + src/binaryen/test/torture-s/pr40057.c.s | 73 + src/binaryen/test/torture-s/pr40386.c.s | 295 + src/binaryen/test/torture-s/pr40404.c.s | 32 + src/binaryen/test/torture-s/pr40493.c.s | 66 + src/binaryen/test/torture-s/pr40579.c.s | 45 + src/binaryen/test/torture-s/pr40657.c.s | 93 + src/binaryen/test/torture-s/pr40668.c.s | 69 + src/binaryen/test/torture-s/pr40747.c.s | 34 + src/binaryen/test/torture-s/pr41239.c.s | 189 + src/binaryen/test/torture-s/pr41317.c.s | 17 + src/binaryen/test/torture-s/pr41395-1.c.s | 58 + src/binaryen/test/torture-s/pr41395-2.c.s | 58 + src/binaryen/test/torture-s/pr41463.c.s | 67 + src/binaryen/test/torture-s/pr41750.c.s | 116 + src/binaryen/test/torture-s/pr41917.c.s | 26 + src/binaryen/test/torture-s/pr41919.c.s | 26 + src/binaryen/test/torture-s/pr42006.c.s | 17 + src/binaryen/test/torture-s/pr42142.c.s | 51 + src/binaryen/test/torture-s/pr42154.c.s | 43 + src/binaryen/test/torture-s/pr42231.c.s | 100 + src/binaryen/test/torture-s/pr42248.c.s | 76 + src/binaryen/test/torture-s/pr42269-2.c.s | 46 + src/binaryen/test/torture-s/pr42512.c.s | 59 + src/binaryen/test/torture-s/pr42544.c.s | 17 + src/binaryen/test/torture-s/pr42570.c.s | 24 + src/binaryen/test/torture-s/pr42614.c.s | 74 + src/binaryen/test/torture-s/pr42691.c.s | 106 + src/binaryen/test/torture-s/pr42721.c.s | 40 + src/binaryen/test/torture-s/pr42833.c.s | 247 + src/binaryen/test/torture-s/pr43008.c.s | 72 + src/binaryen/test/torture-s/pr43220.c.s | 88 + src/binaryen/test/torture-s/pr43236.c.s | 114 + src/binaryen/test/torture-s/pr43269.c.s | 83 + src/binaryen/test/torture-s/pr43385.c.s | 151 + src/binaryen/test/torture-s/pr43438.c.s | 27 + src/binaryen/test/torture-s/pr43560.c.s | 80 + src/binaryen/test/torture-s/pr43629.c.s | 36 + src/binaryen/test/torture-s/pr43783.c.s | 122 + src/binaryen/test/torture-s/pr43784.c.s | 94 + src/binaryen/test/torture-s/pr43835.c.s | 98 + src/binaryen/test/torture-s/pr43987.c.s | 49 + src/binaryen/test/torture-s/pr44164.c.s | 61 + src/binaryen/test/torture-s/pr44202-1.c.s | 110 + src/binaryen/test/torture-s/pr44468.c.s | 119 + src/binaryen/test/torture-s/pr44555.c.s | 32 + src/binaryen/test/torture-s/pr44575.c.s | 166 + src/binaryen/test/torture-s/pr44683.c.s | 63 + src/binaryen/test/torture-s/pr44828.c.s | 42 + src/binaryen/test/torture-s/pr44852.c.s | 143 + src/binaryen/test/torture-s/pr44858.c.s | 82 + src/binaryen/test/torture-s/pr44942.c.s | 212 + src/binaryen/test/torture-s/pr45034.c.s | 124 + src/binaryen/test/torture-s/pr45070.c.s | 141 + src/binaryen/test/torture-s/pr45262.c.s | 59 + src/binaryen/test/torture-s/pr45695.c.s | 75 + src/binaryen/test/torture-s/pr46019.c.s | 17 + src/binaryen/test/torture-s/pr46309.c.s | 107 + src/binaryen/test/torture-s/pr46316.c.s | 56 + src/binaryen/test/torture-s/pr46909-1.c.s | 74 + src/binaryen/test/torture-s/pr46909-2.c.s | 80 + src/binaryen/test/torture-s/pr47148.c.s | 27 + src/binaryen/test/torture-s/pr47155.c.s | 38 + src/binaryen/test/torture-s/pr47237.c.s | 43 + src/binaryen/test/torture-s/pr47299.c.s | 44 + src/binaryen/test/torture-s/pr47337.c.s | 148 + src/binaryen/test/torture-s/pr47538.c.s | 398 + src/binaryen/test/torture-s/pr47925.c.s | 81 + src/binaryen/test/torture-s/pr48197.c.s | 17 + src/binaryen/test/torture-s/pr48571-1.c.s | 103 + src/binaryen/test/torture-s/pr48717.c.s | 95 + src/binaryen/test/torture-s/pr48809.c.s | 246 + src/binaryen/test/torture-s/pr48814-1.c.s | 90 + src/binaryen/test/torture-s/pr48814-2.c.s | 93 + src/binaryen/test/torture-s/pr48973-1.c.s | 78 + src/binaryen/test/torture-s/pr48973-2.c.s | 58 + src/binaryen/test/torture-s/pr49039.c.s | 92 + src/binaryen/test/torture-s/pr49073.c.s | 96 + src/binaryen/test/torture-s/pr49123.c.s | 30 + src/binaryen/test/torture-s/pr49161.c.s | 121 + src/binaryen/test/torture-s/pr49186.c.s | 17 + src/binaryen/test/torture-s/pr49218.c.s | 78 + src/binaryen/test/torture-s/pr49279.c.s | 100 + src/binaryen/test/torture-s/pr49281.c.s | 93 + src/binaryen/test/torture-s/pr49390.c.s | 314 + src/binaryen/test/torture-s/pr49419.c.s | 175 + src/binaryen/test/torture-s/pr49644.c.s | 17 + src/binaryen/test/torture-s/pr49712.c.s | 130 + src/binaryen/test/torture-s/pr49768.c.s | 17 + src/binaryen/test/torture-s/pr49886.c.s | 231 + src/binaryen/test/torture-s/pr51023.c.s | 34 + src/binaryen/test/torture-s/pr51323.c.s | 116 + src/binaryen/test/torture-s/pr51466.c.s | 120 + src/binaryen/test/torture-s/pr51581-1.c.s | 738 + src/binaryen/test/torture-s/pr51581-2.c.s | 762 + src/binaryen/test/torture-s/pr51877.c.s | 345 + src/binaryen/test/torture-s/pr51933.c.s | 176 + src/binaryen/test/torture-s/pr52129.c.s | 131 + src/binaryen/test/torture-s/pr52209.c.s | 55 + src/binaryen/test/torture-s/pr52286.c.s | 31 + src/binaryen/test/torture-s/pr52760.c.s | 148 + src/binaryen/test/torture-s/pr52979-1.c.s | 260 + src/binaryen/test/torture-s/pr52979-2.c.s | 260 + src/binaryen/test/torture-s/pr53084.c.s | 56 + src/binaryen/test/torture-s/pr53160.c.s | 150 + src/binaryen/test/torture-s/pr53465.c.s | 75 + src/binaryen/test/torture-s/pr53645-2.c.s | 4443 ++ src/binaryen/test/torture-s/pr53645.c.s | 2075 + src/binaryen/test/torture-s/pr53688.c.s | 97 + src/binaryen/test/torture-s/pr54471.c.s | 104 + src/binaryen/test/torture-s/pr54937.c.s | 91 + src/binaryen/test/torture-s/pr54985.c.s | 89 + src/binaryen/test/torture-s/pr55137.c.s | 62 + src/binaryen/test/torture-s/pr55750.c.s | 75 + src/binaryen/test/torture-s/pr55875.c.s | 70 + src/binaryen/test/torture-s/pr56051.c.s | 17 + src/binaryen/test/torture-s/pr56205.c.s | 289 + src/binaryen/test/torture-s/pr56250.c.s | 17 + src/binaryen/test/torture-s/pr56799.c.s | 122 + src/binaryen/test/torture-s/pr56837.c.s | 87 + src/binaryen/test/torture-s/pr56866.c.s | 231 + src/binaryen/test/torture-s/pr56899.c.s | 118 + src/binaryen/test/torture-s/pr56962.c.s | 107 + src/binaryen/test/torture-s/pr56982.c.s | 96 + src/binaryen/test/torture-s/pr57124.c.s | 58 + src/binaryen/test/torture-s/pr57130.c.s | 121 + src/binaryen/test/torture-s/pr57131.c.s | 63 + src/binaryen/test/torture-s/pr57144.c.s | 33 + src/binaryen/test/torture-s/pr57281.c.s | 145 + src/binaryen/test/torture-s/pr57321.c.s | 58 + src/binaryen/test/torture-s/pr57344-1.c.s | 114 + src/binaryen/test/torture-s/pr57344-2.c.s | 117 + src/binaryen/test/torture-s/pr57344-3.c.s | 142 + src/binaryen/test/torture-s/pr57344-4.c.s | 149 + src/binaryen/test/torture-s/pr57568.c.s | 68 + src/binaryen/test/torture-s/pr57829.c.s | 106 + src/binaryen/test/torture-s/pr57860.c.s | 323 + src/binaryen/test/torture-s/pr57861.c.s | 168 + src/binaryen/test/torture-s/pr57875.c.s | 159 + src/binaryen/test/torture-s/pr57876.c.s | 330 + src/binaryen/test/torture-s/pr57877.c.s | 155 + src/binaryen/test/torture-s/pr58209.c.s | 130 + src/binaryen/test/torture-s/pr58277-1.c.s | 917 + src/binaryen/test/torture-s/pr58277-2.c.s | 124 + src/binaryen/test/torture-s/pr58364.c.s | 77 + src/binaryen/test/torture-s/pr58365.c.s | 129 + src/binaryen/test/torture-s/pr58385.c.s | 54 + src/binaryen/test/torture-s/pr58387.c.s | 38 + src/binaryen/test/torture-s/pr58419.c.s | 372 + src/binaryen/test/torture-s/pr58431.c.s | 188 + src/binaryen/test/torture-s/pr58564.c.s | 56 + src/binaryen/test/torture-s/pr58570.c.s | 91 + src/binaryen/test/torture-s/pr58574.c.s | 1855 + src/binaryen/test/torture-s/pr58640-2.c.s | 96 + src/binaryen/test/torture-s/pr58640.c.s | 115 + src/binaryen/test/torture-s/pr58662.c.s | 83 + src/binaryen/test/torture-s/pr58726.c.s | 72 + src/binaryen/test/torture-s/pr58831.c.s | 177 + src/binaryen/test/torture-s/pr58943.c.s | 63 + src/binaryen/test/torture-s/pr58984.c.s | 123 + src/binaryen/test/torture-s/pr59014-2.c.s | 48 + src/binaryen/test/torture-s/pr59014.c.s | 122 + src/binaryen/test/torture-s/pr59101.c.s | 48 + src/binaryen/test/torture-s/pr59221.c.s | 91 + src/binaryen/test/torture-s/pr59229.c.s | 146 + src/binaryen/test/torture-s/pr59358.c.s | 185 + src/binaryen/test/torture-s/pr59387.c.s | 107 + src/binaryen/test/torture-s/pr59388.c.s | 43 + src/binaryen/test/torture-s/pr59413.c.s | 38 + src/binaryen/test/torture-s/pr59643.c.s | 207 + src/binaryen/test/torture-s/pr59747.c.s | 113 + src/binaryen/test/torture-s/pr60017.c.s | 66 + src/binaryen/test/torture-s/pr60062.c.s | 26 + src/binaryen/test/torture-s/pr60072.c.s | 29 + src/binaryen/test/torture-s/pr60454.c.s | 60 + src/binaryen/test/torture-s/pr60960.c.s | 193 + src/binaryen/test/torture-s/pr61306-1.c.s | 57 + src/binaryen/test/torture-s/pr61306-2.c.s | 59 + src/binaryen/test/torture-s/pr61306-3.c.s | 67 + src/binaryen/test/torture-s/pr61375.c.s | 53 + src/binaryen/test/torture-s/pr61673.c.s | 152 + src/binaryen/test/torture-s/pr61725.c.s | 17 + src/binaryen/test/torture-s/pr63209.c.s | 60 + src/binaryen/test/torture-s/pr63302.c.s | 165 + src/binaryen/test/torture-s/pr63659.c.s | 146 + src/binaryen/test/torture-s/pr7284-1.c.s | 59 + src/binaryen/test/torture-s/printf-1.c.s | 203 + src/binaryen/test/torture-s/printf-chk-1.c.s | 447 + src/binaryen/test/torture-s/pta-field-1.c.s | 101 + src/binaryen/test/torture-s/pta-field-2.c.s | 107 + src/binaryen/test/torture-s/ptr-arith-1.c.s | 35 + src/binaryen/test/torture-s/pure-1.c.s | 56 + src/binaryen/test/torture-s/pushpop_macro.c.s | 17 + src/binaryen/test/torture-s/regstack-1.c.s | 427 + src/binaryen/test/torture-s/restrict-1.c.s | 64 + src/binaryen/test/torture-s/scal-to-vec1.c.s | 831 + src/binaryen/test/torture-s/scal-to-vec2.c.s | 405 + src/binaryen/test/torture-s/scal-to-vec3.c.s | 18 + src/binaryen/test/torture-s/scope-1.c.s | 54 + src/binaryen/test/torture-s/shiftdi.c.s | 44 + src/binaryen/test/torture-s/shiftopt-1.c.s | 41 + src/binaryen/test/torture-s/simd-1.c.s | 444 + src/binaryen/test/torture-s/simd-2.c.s | 892 + src/binaryen/test/torture-s/simd-4.c.s | 29 + src/binaryen/test/torture-s/simd-5.c.s | 381 + src/binaryen/test/torture-s/simd-6.c.s | 59 + src/binaryen/test/torture-s/stdarg-1.c.s | 1270 + src/binaryen/test/torture-s/stdarg-2.c.s | 1053 + src/binaryen/test/torture-s/stdarg-3.c.s | 1207 + src/binaryen/test/torture-s/stdarg-4.c.s | 593 + src/binaryen/test/torture-s/strcmp-1.c.s | 295 + src/binaryen/test/torture-s/strcpy-1.c.s | 284 + src/binaryen/test/torture-s/strct-pack-1.c.s | 50 + src/binaryen/test/torture-s/strct-pack-2.c.s | 19 + src/binaryen/test/torture-s/strct-pack-3.c.s | 48 + src/binaryen/test/torture-s/strct-pack-4.c.s | 45 + .../test/torture-s/strct-stdarg-1.c.s | 192 + src/binaryen/test/torture-s/strct-varg-1.c.s | 120 + src/binaryen/test/torture-s/string-opt-17.c.s | 149 + src/binaryen/test/torture-s/string-opt-18.c.s | 137 + src/binaryen/test/torture-s/string-opt-5.c.s | 472 + src/binaryen/test/torture-s/strlen-1.c.s | 103 + src/binaryen/test/torture-s/strncmp-1.c.s | 332 + .../test/torture-s/struct-aliasing-1.c.s | 65 + src/binaryen/test/torture-s/struct-cpy-1.c.s | 71 + src/binaryen/test/torture-s/struct-ini-1.c.s | 55 + src/binaryen/test/torture-s/struct-ini-2.c.s | 58 + src/binaryen/test/torture-s/struct-ini-3.c.s | 30 + src/binaryen/test/torture-s/struct-ini-4.c.s | 43 + src/binaryen/test/torture-s/struct-ret-1.c.s | 410 + src/binaryen/test/torture-s/struct-ret-2.c.s | 45 + src/binaryen/test/torture-s/switch-1.c.s | 157 + src/binaryen/test/torture-s/tstdi-1.c.s | 125 + src/binaryen/test/torture-s/unroll-1.c.s | 34 + src/binaryen/test/torture-s/usmul.c.s | 109 + src/binaryen/test/torture-s/va-arg-1.c.s | 87 + src/binaryen/test/torture-s/va-arg-10.c.s | 984 + src/binaryen/test/torture-s/va-arg-11.c.s | 65 + src/binaryen/test/torture-s/va-arg-12.c.s | 97 + src/binaryen/test/torture-s/va-arg-13.c.s | 97 + src/binaryen/test/torture-s/va-arg-14.c.s | 147 + src/binaryen/test/torture-s/va-arg-15.c.s | 174 + src/binaryen/test/torture-s/va-arg-16.c.s | 187 + src/binaryen/test/torture-s/va-arg-17.c.s | 175 + src/binaryen/test/torture-s/va-arg-18.c.s | 88 + src/binaryen/test/torture-s/va-arg-19.c.s | 154 + src/binaryen/test/torture-s/va-arg-2.c.s | 1651 + src/binaryen/test/torture-s/va-arg-20.c.s | 98 + src/binaryen/test/torture-s/va-arg-21.c.s | 73 + src/binaryen/test/torture-s/va-arg-22.c.s | 2142 + src/binaryen/test/torture-s/va-arg-23.c.s | 79 + src/binaryen/test/torture-s/va-arg-24.c.s | 1526 + src/binaryen/test/torture-s/va-arg-26.c.s | 66 + src/binaryen/test/torture-s/va-arg-4.c.s | 127 + src/binaryen/test/torture-s/va-arg-5.c.s | 230 + src/binaryen/test/torture-s/va-arg-6.c.s | 188 + src/binaryen/test/torture-s/va-arg-7.c.s | 89 + src/binaryen/test/torture-s/va-arg-8.c.s | 84 + src/binaryen/test/torture-s/va-arg-9.c.s | 1664 + src/binaryen/test/torture-s/va-arg-pack-1.c.s | 620 + src/binaryen/test/torture-s/va-arg-trap-1.c.s | 75 + src/binaryen/test/torture-s/vfprintf-1.c.s | 348 + .../test/torture-s/vfprintf-chk-1.c.s | 547 + src/binaryen/test/torture-s/vla-dealloc-1.c.s | 64 + src/binaryen/test/torture-s/vprintf-1.c.s | 313 + src/binaryen/test/torture-s/vprintf-chk-1.c.s | 512 + src/binaryen/test/torture-s/vrp-1.c.s | 35 + src/binaryen/test/torture-s/vrp-2.c.s | 50 + src/binaryen/test/torture-s/vrp-3.c.s | 52 + src/binaryen/test/torture-s/vrp-4.c.s | 50 + src/binaryen/test/torture-s/vrp-5.c.s | 51 + src/binaryen/test/torture-s/vrp-6.c.s | 83 + src/binaryen/test/torture-s/vrp-7.c.s | 64 + src/binaryen/test/torture-s/wchar_t-1.c.s | 60 + src/binaryen/test/torture-s/widechar-1.c.s | 19 + src/binaryen/test/torture-s/zero-struct-1.c.s | 95 + src/binaryen/test/torture-s/zero-struct-2.c.s | 59 + src/binaryen/test/torture-s/zerolen-1.c.s | 44 + src/binaryen/test/torture-s/zerolen-2.c.s | 17 + src/binaryen/test/two_sides.asm.js | 30 + src/binaryen/test/two_sides.fromasm | 62 + src/binaryen/test/two_sides.fromasm.clamp | 86 + .../test/two_sides.fromasm.clamp.no-opts | 112 + src/binaryen/test/two_sides.fromasm.imprecise | 59 + .../test/two_sides.fromasm.imprecise.no-opts | 86 + src/binaryen/test/two_sides.fromasm.no-opts | 88 + src/binaryen/test/unit.asm.js | 800 + src/binaryen/test/unit.fromasm | 1277 + src/binaryen/test/unit.fromasm.clamp | 1346 + src/binaryen/test/unit.fromasm.clamp.no-opts | 2252 + src/binaryen/test/unit.fromasm.imprecise | 1251 + .../test/unit.fromasm.imprecise.no-opts | 2137 + src/binaryen/test/unit.fromasm.no-opts | 2178 + src/binaryen/test/unit.wast | 554 + src/binaryen/test/unit.wast.from-wast | 619 + src/binaryen/test/unit.wast.fromBinary | 537 + .../test/unit.wast.fromBinary.noDebugInfo | 537 + src/binaryen/test/unreachable-code.wast | 85 + .../test/unreachable-code.wast.from-wast | 94 + .../test/unreachable-code.wast.fromBinary | 84 + ...reachable-code.wast.fromBinary.noDebugInfo | 84 + .../test/unreachable-import_wasm-only.asm.js | 107 + .../test/unreachable-import_wasm-only.fromasm | 14 + ...unreachable-import_wasm-only.fromasm.clamp | 14 + ...ble-import_wasm-only.fromasm.clamp.no-opts | 87 + ...achable-import_wasm-only.fromasm.imprecise | 13 + ...import_wasm-only.fromasm.imprecise.no-opts | 87 + ...reachable-import_wasm-only.fromasm.no-opts | 87 + src/binaryen/test/unreachable-pops.wasm | Bin 0 -> 30 bytes .../test/unreachable-pops.wasm.fromBinary | 10 + src/binaryen/test/untaken-br_if.wast | 14 + .../test/untaken-br_if.wast.from-wast | 16 + .../test/untaken-br_if.wast.fromBinary | 17 + .../untaken-br_if.wast.fromBinary.noDebugInfo | 17 + src/binaryen/test/use-import-and-drop.asm.js | 19 + src/binaryen/test/use-import-and-drop.fromasm | 7 + .../test/use-import-and-drop.fromasm.clamp | 7 + .../use-import-and-drop.fromasm.clamp.no-opts | 49 + .../use-import-and-drop.fromasm.imprecise | 6 + ...-import-and-drop.fromasm.imprecise.no-opts | 49 + .../test/use-import-and-drop.fromasm.no-opts | 49 + .../test/validator/invalid_export.wast | 1 + .../test/validator/invalid_import.wast | 1 + .../test/validator/invalid_return.wast | 2 + src/binaryen/test/wasm-only.asm.js | 482 + src/binaryen/test/wasm-only.fromasm | 1137 + src/binaryen/test/wasm-only.fromasm.clamp | 1137 + .../test/wasm-only.fromasm.clamp.no-opts | 1922 + src/binaryen/test/wasm-only.fromasm.imprecise | 822 + .../test/wasm-only.fromasm.imprecise.no-opts | 1757 + src/binaryen/test/wasm-only.fromasm.no-opts | 1922 + src/binaryen/test/wasm2asm.asserts.js | 107 + src/binaryen/test/wasm2asm.traps.js | 135 + src/binaryen/test/wasm2asm.wast.asserts | 12 + src/binaryen/test/wasm2asm/br_table_temp.wast | 1468 + .../test/wasm_backend/globals_only.cpp | 21 + .../test/wasm_backend/globals_only.txt | 5 + .../test/wasm_backend/hello_num_only.cpp | 10 + .../test/wasm_backend/hello_num_only.txt | 1 + .../test/wasm_backend/hello_world_only.cpp | 8 + .../test/wasm_backend/hello_world_only.txt | 1 + .../test/wasm_backend/hello_world_real.cpp | 6 + .../test/wasm_backend/hello_world_real.txt | 1 + .../test/wasm_backend/i64.load32_u.cpp | 16 + .../test/wasm_backend/i64.load32_u.txt | 1 + src/binaryen/test/wasm_backend/i64_load.cpp | 15 + src/binaryen/test/wasm_backend/i64_load.txt | 4 + .../test/wasm_backend/indirect_call_only.cpp | 50 + .../test/wasm_backend/indirect_call_only.txt | 15 + .../test/wasm_backend/unaligned_only.cpp | 70 + .../test/wasm_backend/unaligned_only.txt | 15 + src/binaryen/test/waterfall/.travis.yml | 12 + src/binaryen/test/waterfall/Contributing.md | 8 + src/binaryen/test/waterfall/LICENSE | 202 + src/binaryen/test/waterfall/README.md | 34 + src/binaryen/test/waterfall/__init__.py | 17 + src/binaryen/test/waterfall/setup.cfg | 5 + src/binaryen/test/waterfall/src/__init__.py | 17 + .../test/waterfall/src/assemble_files.py | 75 + src/binaryen/test/waterfall/src/build.py | 1090 + src/binaryen/test/waterfall/src/buildbot.py | 46 + src/binaryen/test/waterfall/src/cloud.py | 45 + .../waterfall/src/compile_torture_tests.py | 102 + .../test/waterfall/src/emscripten_config | 64 + .../waterfall/src/emscripten_config_vanilla | 64 + .../test/waterfall/src/execute_files.py | 96 + .../test/waterfall/src/link_assembly_files.py | 75 + src/binaryen/test/waterfall/src/proc.py | 50 + ...m2wasm_compile_known_gcc_test_failures.txt | 88 + .../asm2wasm_run_known_gcc_test_failures.txt | 41 + .../src/test/d8_known_gcc_test_failures.txt | 121 + .../test/d8_musl_known_gcc_test_failures.txt | 104 + ...emwasm_compile_known_gcc_test_failures.txt | 81 + .../emwasm_run_known_gcc_test_failures.txt | 59 + .../src/test/spec_known_gcc_test_failures.txt | 153 + src/binaryen/test/waterfall/src/testing.py | 258 + src/binaryen/travis-emcc-tests.sh | 9 + src/binaryen/ubsan.blacklist | 5 + src/bootstrap/Cargo.toml | 2 +- src/bootstrap/README.md | 8 +- src/bootstrap/bin/rustc.rs | 23 +- src/bootstrap/bin/rustdoc.rs | 11 + src/bootstrap/bootstrap.py | 12 +- src/bootstrap/bootstrap_test.py | 1 + src/bootstrap/builder.rs | 88 +- src/bootstrap/cc_detect.rs | 52 +- src/bootstrap/channel.rs | 4 +- src/bootstrap/check.rs | 113 +- src/bootstrap/compile.rs | 60 +- src/bootstrap/config.rs | 26 +- src/bootstrap/configure.py | 80 +- src/bootstrap/dist.rs | 303 +- src/bootstrap/doc.rs | 130 +- src/bootstrap/flags.rs | 7 +- src/bootstrap/install.rs | 36 +- src/bootstrap/lib.rs | 59 +- src/bootstrap/mk/Makefile.in | 1 - src/bootstrap/native.rs | 81 +- src/bootstrap/tool.rs | 93 +- src/bootstrap/toolstate.rs | 7 + src/bootstrap/util.rs | 21 +- src/build_helper/lib.rs | 21 - src/ci/docker/README.md | 50 +- src/ci/docker/asmjs/Dockerfile | 6 +- src/ci/docker/cross/build-arm-musl.sh | 4 +- src/ci/docker/cross/build-rumprun.sh | 2 +- src/ci/docker/cross/install-x86_64-redox.sh | 2 +- src/ci/docker/cross2/Dockerfile | 2 + .../docker/cross2/build-fuchsia-toolchain.sh | 2 +- .../docker/cross2/build-solaris-toolchain.sh | 2 +- .../disabled/dist-x86_64-dragonfly/Dockerfile | 36 + .../dist-x86_64-dragonfly/build-toolchain.sh | 120 + .../dist-x86_64-dragonfly/patch-toolchain | 23 + .../dist-x86_64-haiku/build-toolchain.sh | 2 +- .../dist-x86_64-haiku/fetch-packages.sh | 2 +- src/ci/docker/disabled/wasm32-exp/node.sh | 2 +- .../dist-aarch64-linux/build-toolchains.sh | 2 +- .../docker/dist-arm-linux/build-toolchains.sh | 2 +- .../dist-armhf-linux/build-toolchains.sh | 2 +- .../dist-armv7-linux/build-toolchains.sh | 2 +- .../docker/dist-i586-gnu-i686-musl/Dockerfile | 1 + .../dist-i586-gnu-i686-musl/build-musl.sh | 2 +- .../dist-i686-freebsd/build-toolchain.sh | 2 +- .../docker/dist-i686-linux/build-binutils.sh | 2 +- src/ci/docker/dist-i686-linux/build-cmake.sh | 2 +- src/ci/docker/dist-i686-linux/build-curl.sh | 2 +- src/ci/docker/dist-i686-linux/build-gcc.sh | 2 +- src/ci/docker/dist-i686-linux/build-git.sh | 2 +- .../docker/dist-i686-linux/build-headers.sh | 2 +- .../docker/dist-i686-linux/build-openssl.sh | 2 +- src/ci/docker/dist-i686-linux/build-python.sh | 2 +- .../build-powerpc-toolchain.sh | 2 +- .../build-powerpc64-toolchain.sh | 2 +- .../build-powerpc64le-toolchain.sh | 4 +- .../dist-s390x-linux/build-s390x-toolchain.sh | 2 +- .../dist-x86_64-freebsd/build-toolchain.sh | 2 +- .../dist-x86_64-linux/build-binutils.sh | 2 +- .../docker/dist-x86_64-linux/build-cmake.sh | 2 +- src/ci/docker/dist-x86_64-linux/build-curl.sh | 2 +- src/ci/docker/dist-x86_64-linux/build-gcc.sh | 2 +- src/ci/docker/dist-x86_64-linux/build-git.sh | 2 +- .../docker/dist-x86_64-linux/build-headers.sh | 2 +- .../docker/dist-x86_64-linux/build-openssl.sh | 2 +- .../docker/dist-x86_64-linux/build-python.sh | 2 +- src/ci/docker/dist-x86_64-musl/build-musl.sh | 2 +- .../build-netbsd-toolchain.sh | 6 +- src/ci/docker/run.sh | 15 +- src/ci/docker/scripts/crosstool-ng.sh | 9 +- src/ci/docker/x86_64-gnu-cargotest/Dockerfile | 25 + src/ci/docker/x86_64-gnu-llvm-3.7/Dockerfile | 25 - src/ci/docker/x86_64-gnu-llvm-3.9/Dockerfile | 27 + src/ci/init_repo.sh | 2 +- src/ci/run.sh | 4 +- src/dlmalloc/Cargo.toml | 20 + .../LICENSE-APACHE | 0 src/dlmalloc/LICENSE-MIT | 25 + src/dlmalloc/build.rs | 4 + src/dlmalloc/src/dlmalloc.c | 6280 ++ src/dlmalloc/src/dlmalloc.rs | 1755 + src/dlmalloc/src/global.rs | 159 + src/dlmalloc/src/lib.rs | 166 + src/dlmalloc/src/linux.rs | 67 + src/dlmalloc/src/macos.rs | 57 + src/dlmalloc/src/wasm.rs | 54 + src/dlmalloc/tests/global.rs | 32 + src/dlmalloc/tests/smoke.rs | 99 + src/doc/book/.travis.yml | 2 +- src/doc/book/ci/build.sh | 6 + src/doc/book/redirects/associated-types.md | 4 +- .../redirects/choosing-your-guarantees.md | 4 +- src/doc/book/redirects/closures.md | 4 +- src/doc/book/redirects/comments.md | 4 +- src/doc/book/redirects/concurrency.md | 4 +- src/doc/book/redirects/const-and-static.md | 6 +- src/doc/book/redirects/crates-and-modules.md | 7 +- src/doc/book/redirects/deref-coercions.md | 4 +- src/doc/book/redirects/documentation.md | 4 +- src/doc/book/redirects/drop.md | 4 +- src/doc/book/redirects/enums.md | 4 +- src/doc/book/redirects/error-handling.md | 4 +- src/doc/book/redirects/ffi.md | 4 +- src/doc/book/redirects/functions.md | 4 +- src/doc/book/redirects/generics.md | 5 +- src/doc/book/redirects/getting-started.md | 4 +- src/doc/book/redirects/guessing-game.md | 4 +- src/doc/book/redirects/if-let.md | 4 +- src/doc/book/redirects/if.md | 4 +- src/doc/book/redirects/iterators.md | 4 +- src/doc/book/redirects/lifetimes.md | 7 +- src/doc/book/redirects/loops.md | 4 +- src/doc/book/redirects/match.md | 8 +- src/doc/book/redirects/method-syntax.md | 4 +- src/doc/book/redirects/mutability.md | 4 +- .../redirects/operators-and-overloading.md | 4 +- src/doc/book/redirects/ownership.md | 4 +- src/doc/book/redirects/patterns.md | 7 +- src/doc/book/redirects/primitive-types.md | 4 +- src/doc/book/redirects/procedural-macros.md | 1 + src/doc/book/redirects/raw-pointers.md | 4 +- .../redirects/references-and-borrowing.md | 4 +- src/doc/book/redirects/strings.md | 8 +- src/doc/book/redirects/structs.md | 4 +- .../book/redirects/syntax-and-semantics.md | 9 +- src/doc/book/redirects/testing.md | 4 +- .../book/redirects/the-stack-and-the-heap.md | 4 +- src/doc/book/redirects/trait-objects.md | 4 +- src/doc/book/redirects/traits.md | 7 +- src/doc/book/redirects/type-aliases.md | 5 +- src/doc/book/redirects/ufcs.md | 4 +- src/doc/book/redirects/unsafe.md | 4 +- src/doc/book/redirects/unsized-types.md | 4 +- src/doc/book/redirects/vectors.md | 5 +- src/doc/book/second-edition/Cargo.lock | 80 +- src/doc/book/second-edition/dictionary.txt | 1 + src/doc/book/second-edition/nostarch.sh | 10 +- .../book/second-edition/nostarch/chapter03.md | 69 +- .../book/second-edition/nostarch/chapter04.md | 434 +- .../book/second-edition/nostarch/chapter05.md | 79 +- .../book/second-edition/nostarch/chapter06.md | 127 +- .../book/second-edition/nostarch/chapter07.md | 177 +- .../book/second-edition/nostarch/chapter08.md | 278 +- .../book/second-edition/nostarch/chapter09.md | 76 +- .../book/second-edition/nostarch/chapter17.md | 1143 +- .../book/second-edition/nostarch/chapter18.md | 1252 +- src/doc/book/second-edition/src/SUMMARY.md | 9 +- .../src/appendix-06-translation.md | 2 +- .../src/appendix-07-newest-features.md | 2 +- .../second-edition/src/ch01-02-hello-world.md | 2 +- .../src/ch02-00-guessing-game-tutorial.md | 29 +- .../src/ch03-01-variables-and-mutability.md | 18 +- .../second-edition/src/ch03-02-data-types.md | 5 +- .../src/ch03-03-how-functions-work.md | 14 +- .../src/ch03-05-control-flow.md | 32 +- .../src/ch04-01-what-is-ownership.md | 112 +- .../src/ch04-02-references-and-borrowing.md | 34 +- .../book/second-edition/src/ch04-03-slices.md | 50 +- .../src/ch05-01-defining-structs.md | 41 +- .../src/ch05-02-example-structs.md | 30 +- .../src/ch06-01-defining-an-enum.md | 18 +- .../book/second-edition/src/ch06-02-match.md | 6 +- .../src/ch07-01-mod-and-the-filesystem.md | 59 +- ...ch07-02-controlling-visibility-with-pub.md | 86 +- .../src/ch07-03-importing-names-with-use.md | 24 +- .../second-edition/src/ch08-01-vectors.md | 56 +- .../second-edition/src/ch08-02-strings.md | 99 +- .../second-edition/src/ch08-03-hash-maps.md | 38 +- .../ch09-02-recoverable-errors-with-result.md | 2 +- .../src/ch11-01-writing-tests.md | 11 +- .../src/ch11-02-running-tests.md | 2 +- .../src/ch11-03-test-organization.md | 1 + .../src/ch12-02-reading-a-file.md | 4 +- ...2-04-testing-the-librarys-functionality.md | 2 +- .../second-edition/src/ch13-02-iterators.md | 2 +- .../book/second-edition/src/ch15-02-deref.md | 4 +- .../src/ch16-02-message-passing.md | 10 +- .../book/second-edition/src/ch17-00-oop.md | 9 +- .../second-edition/src/ch17-01-what-is-oo.md | 191 +- .../src/ch17-02-trait-objects.md | 395 +- .../src/ch17-03-oo-design-patterns.md | 537 +- .../second-edition/src/ch18-00-patterns.md | 41 +- .../ch18-01-all-the-places-for-patterns.md | 272 +- .../src/ch18-02-refutability.md | 103 +- .../src/ch18-03-pattern-syntax.md | 853 +- .../src/ch19-03-advanced-traits.md | 30 +- src/doc/index.md | 2 + src/doc/man/rustc.1 | 3 - src/doc/nomicon/.travis.yml | 7 +- src/doc/nomicon/src/exotic-sizes.md | 6 - src/doc/nomicon/src/vec-drain.md | 2 +- src/doc/not_found.md | 2 +- src/doc/reference/src/SUMMARY.md | 5 +- src/doc/reference/src/attributes.md | 101 +- src/doc/reference/src/destructors.md | 93 + .../reference/src/dynamically-sized-types.md | 2 +- src/doc/reference/src/expressions.md | 72 +- .../reference/src/expressions/block-expr.md | 30 +- .../reference/src/expressions/field-expr.md | 15 +- .../reference/src/expressions/literal-expr.md | 22 + .../src/expressions/method-call-expr.md | 3 +- .../src/expressions/operator-expr.md | 41 +- .../reference/src/expressions/range-expr.md | 45 +- .../reference/src/expressions/return-expr.md | 6 + src/doc/reference/src/glossary.md | 93 + src/doc/reference/src/glossory.md | 87 - src/doc/reference/src/identifiers.md | 26 +- src/doc/reference/src/introduction.md | 6 + src/doc/reference/src/items/constant-items.md | 10 +- src/doc/reference/src/items/extern-crates.md | 6 + src/doc/reference/src/items/modules.md | 18 +- src/doc/reference/src/items/static-items.md | 5 +- .../reference/src/items/use-declarations.md | 15 + src/doc/reference/src/macros.md | 7 +- src/doc/reference/src/notation.md | 28 + src/doc/reference/src/paths.md | 97 +- src/doc/reference/src/procedural-macros.md | 11 +- .../reference/src/string-table-productions.md | 18 - src/doc/reference/src/tokens.md | 2 +- src/doc/reference/src/type-coercions.md | 4 +- src/doc/reference/src/types.md | 4 +- src/doc/reference/src/unicode-productions.md | 9 - src/doc/rustdoc/src/command-line-arguments.md | 12 +- src/doc/rustdoc/src/documentation-tests.md | 14 +- src/doc/rustdoc/src/the-doc-attribute.md | 20 + .../src/language-features/attr-literals.md | 24 +- .../crate-visibility-modifier.md | 20 + .../src/language-features/lang-items.md | 92 + .../src/language-features/non-ascii-idents.md | 32 +- .../src/language-features/non-exhaustive.md | 75 + .../src/language-features/on-unimplemented.md | 8 +- .../language-features/optin-builtin-traits.md | 45 + .../src/language-features/unboxed-closures.md | 25 + .../language-features/universal-impl-trait.md | 32 + .../src/library-features/alloc-jemalloc.md | 53 +- .../src/library-features/alloc-system.md | 31 +- .../src/library-features/collections.md | 5 - .../src/library-features/fn-traits.md | 35 + .../src/library-features/rand.md | 5 - src/etc/char_private.py | 4 +- src/etc/gdb_rust_pretty_printing.py | 15 +- src/etc/generate-deriving-span-tests.py | 4 +- src/etc/indenter | 2 +- src/etc/installer/exe/rust.iss | 4 + src/etc/installer/msi/rust.wxs | 4 + src/etc/installer/pkg/Distribution.xml | 6 + src/etc/lldb_batchmode.py | 2 +- src/etc/sugarise-doc-comments.py | 4 +- src/etc/test-float-parse/runtests.py | 6 +- src/etc/wasm32-shim.js | 119 + src/grammar/lexer.l | 73 +- src/grammar/parser-lalr.y | 366 +- src/grammar/tokens.h | 18 + src/jemalloc/.appveyor.yml | 42 - src/jemalloc/.autom4te.cfg | 3 - src/jemalloc/.travis.yml | 95 - src/jemalloc/COPYING | 27 - src/jemalloc/ChangeLog | 1043 - src/jemalloc/INSTALL | 434 - src/jemalloc/Makefile.in | 512 - src/jemalloc/README | 20 - src/jemalloc/autogen.sh | 17 - src/jemalloc/bin/jemalloc-config.in | 79 - src/jemalloc/bin/jemalloc.sh.in | 9 - src/jemalloc/bin/jeprof.in | 5611 -- src/jemalloc/build-aux/config.guess | 1462 - src/jemalloc/build-aux/config.sub | 1825 - src/jemalloc/build-aux/install-sh | 250 - src/jemalloc/configure | 11471 ---- src/jemalloc/configure.ac | 2047 - src/jemalloc/coverage.sh | 16 - src/jemalloc/doc/html.xsl.in | 5 - src/jemalloc/doc/jemalloc.xml.in | 2992 - src/jemalloc/doc/manpages.xsl.in | 4 - src/jemalloc/doc/stylesheet.xsl | 10 - .../include/jemalloc/internal/arena.h | 1528 - .../include/jemalloc/internal/assert.h | 45 - .../include/jemalloc/internal/atomic.h | 651 - src/jemalloc/include/jemalloc/internal/base.h | 25 - .../include/jemalloc/internal/bitmap.h | 274 - .../include/jemalloc/internal/chunk.h | 97 - .../include/jemalloc/internal/chunk_dss.h | 37 - .../include/jemalloc/internal/chunk_mmap.h | 21 - src/jemalloc/include/jemalloc/internal/ckh.h | 86 - src/jemalloc/include/jemalloc/internal/ctl.h | 118 - .../include/jemalloc/internal/extent.h | 275 - src/jemalloc/include/jemalloc/internal/hash.h | 357 - src/jemalloc/include/jemalloc/internal/huge.h | 35 - .../jemalloc/internal/jemalloc_internal.h.in | 1294 - .../internal/jemalloc_internal_decls.h | 80 - .../internal/jemalloc_internal_defs.h.in | 315 - .../internal/jemalloc_internal_macros.h | 57 - src/jemalloc/include/jemalloc/internal/mb.h | 115 - .../include/jemalloc/internal/mutex.h | 145 - .../include/jemalloc/internal/nstime.h | 48 - .../include/jemalloc/internal/pages.h | 29 - src/jemalloc/include/jemalloc/internal/ph.h | 345 - .../jemalloc/internal/private_namespace.sh | 5 - .../jemalloc/internal/private_symbols.txt | 639 - .../jemalloc/internal/private_unnamespace.sh | 5 - src/jemalloc/include/jemalloc/internal/prng.h | 207 - src/jemalloc/include/jemalloc/internal/prof.h | 547 - .../jemalloc/internal/public_namespace.sh | 6 - .../jemalloc/internal/public_unnamespace.sh | 6 - src/jemalloc/include/jemalloc/internal/ql.h | 81 - src/jemalloc/include/jemalloc/internal/qr.h | 69 - .../include/jemalloc/internal/quarantine.h | 60 - src/jemalloc/include/jemalloc/internal/rb.h | 1003 - .../include/jemalloc/internal/rtree.h | 366 - .../include/jemalloc/internal/size_classes.sh | 318 - .../include/jemalloc/internal/smoothstep.h | 246 - .../include/jemalloc/internal/smoothstep.sh | 115 - src/jemalloc/include/jemalloc/internal/spin.h | 51 - .../include/jemalloc/internal/stats.h | 197 - .../include/jemalloc/internal/tcache.h | 472 - .../include/jemalloc/internal/ticker.h | 75 - src/jemalloc/include/jemalloc/internal/tsd.h | 788 - src/jemalloc/include/jemalloc/internal/util.h | 342 - .../include/jemalloc/internal/valgrind.h | 128 - .../include/jemalloc/internal/witness.h | 304 - src/jemalloc/include/jemalloc/jemalloc.sh | 28 - .../include/jemalloc/jemalloc_defs.h.in | 45 - .../include/jemalloc/jemalloc_macros.h.in | 103 - .../include/jemalloc/jemalloc_mangle.sh | 45 - .../include/jemalloc/jemalloc_protos.h.in | 66 - .../include/jemalloc/jemalloc_rename.sh | 22 - .../include/jemalloc/jemalloc_typedefs.h.in | 57 - .../include/msvc_compat/C99/stdbool.h | 20 - src/jemalloc/include/msvc_compat/C99/stdint.h | 247 - src/jemalloc/include/msvc_compat/strings.h | 59 - .../include/msvc_compat/windows_extra.h | 6 - src/jemalloc/jemalloc.pc.in | 12 - src/jemalloc/msvc/ReadMe.txt | 24 - .../projects/vc2015/jemalloc/jemalloc.vcxproj | 402 - .../vc2015/jemalloc/jemalloc.vcxproj.filters | 272 - .../vc2015/test_threads/test_threads.cpp | 89 - .../vc2015/test_threads/test_threads.h | 3 - .../vc2015/test_threads/test_threads.vcxproj | 327 - .../test_threads/test_threads.vcxproj.filters | 26 - .../vc2015/test_threads/test_threads_main.cpp | 12 - src/jemalloc/scripts/gen_travis.py | 85 - src/jemalloc/src/arena.c | 3950 -- src/jemalloc/src/atomic.c | 2 - src/jemalloc/src/base.c | 187 - src/jemalloc/src/bitmap.c | 111 - src/jemalloc/src/chunk.c | 799 - src/jemalloc/src/chunk_dss.c | 247 - src/jemalloc/src/chunk_mmap.c | 78 - src/jemalloc/src/ckh.c | 569 - src/jemalloc/src/ctl.c | 2258 - src/jemalloc/src/extent.c | 96 - src/jemalloc/src/hash.c | 2 - src/jemalloc/src/huge.c | 498 - src/jemalloc/src/jemalloc.c | 2925 - src/jemalloc/src/mb.c | 2 - src/jemalloc/src/mutex.c | 158 - src/jemalloc/src/nstime.c | 194 - src/jemalloc/src/pages.c | 305 - src/jemalloc/src/prng.c | 2 - src/jemalloc/src/prof.c | 2355 - src/jemalloc/src/quarantine.c | 183 - src/jemalloc/src/rtree.c | 132 - src/jemalloc/src/spin.c | 2 - src/jemalloc/src/stats.c | 1173 - src/jemalloc/src/tcache.c | 619 - src/jemalloc/src/ticker.c | 2 - src/jemalloc/src/tsd.c | 197 - src/jemalloc/src/util.c | 666 - src/jemalloc/src/valgrind.c | 34 - src/jemalloc/src/witness.c | 136 - src/jemalloc/src/zone.c | 497 - src/jemalloc/test/include/test/SFMT-alti.h | 186 - src/jemalloc/test/include/test/SFMT-params.h | 132 - .../test/include/test/SFMT-params11213.h | 81 - .../test/include/test/SFMT-params1279.h | 81 - .../test/include/test/SFMT-params132049.h | 81 - .../test/include/test/SFMT-params19937.h | 81 - .../test/include/test/SFMT-params216091.h | 81 - .../test/include/test/SFMT-params2281.h | 81 - .../test/include/test/SFMT-params4253.h | 81 - .../test/include/test/SFMT-params44497.h | 81 - .../test/include/test/SFMT-params607.h | 81 - .../test/include/test/SFMT-params86243.h | 81 - src/jemalloc/test/include/test/SFMT-sse2.h | 157 - src/jemalloc/test/include/test/SFMT.h | 171 - src/jemalloc/test/include/test/btalloc.h | 31 - .../test/include/test/jemalloc_test.h.in | 163 - .../test/include/test/jemalloc_test_defs.h.in | 9 - src/jemalloc/test/include/test/math.h | 311 - src/jemalloc/test/include/test/mq.h | 109 - src/jemalloc/test/include/test/mtx.h | 23 - src/jemalloc/test/include/test/test.h | 333 - src/jemalloc/test/include/test/thd.h | 9 - src/jemalloc/test/include/test/timer.h | 11 - src/jemalloc/test/integration/MALLOCX_ARENA.c | 69 - src/jemalloc/test/integration/aligned_alloc.c | 139 - src/jemalloc/test/integration/allocated.c | 126 - src/jemalloc/test/integration/chunk.c | 290 - src/jemalloc/test/integration/chunk.sh | 5 - src/jemalloc/test/integration/mallocx.c | 230 - src/jemalloc/test/integration/mallocx.sh | 5 - src/jemalloc/test/integration/overflow.c | 49 - .../test/integration/posix_memalign.c | 133 - src/jemalloc/test/integration/rallocx.c | 259 - src/jemalloc/test/integration/sdallocx.c | 57 - src/jemalloc/test/integration/thread_arena.c | 81 - .../test/integration/thread_tcache_enabled.c | 114 - src/jemalloc/test/integration/xallocx.c | 493 - src/jemalloc/test/integration/xallocx.sh | 5 - src/jemalloc/test/src/SFMT.c | 719 - src/jemalloc/test/src/btalloc.c | 8 - src/jemalloc/test/src/btalloc_0.c | 3 - src/jemalloc/test/src/btalloc_1.c | 3 - src/jemalloc/test/src/math.c | 2 - src/jemalloc/test/src/mq.c | 29 - src/jemalloc/test/src/mtx.c | 73 - src/jemalloc/test/src/test.c | 133 - src/jemalloc/test/src/thd.c | 39 - src/jemalloc/test/src/timer.c | 60 - src/jemalloc/test/stress/microbench.c | 182 - src/jemalloc/test/test.sh.in | 80 - src/jemalloc/test/unit/SFMT.c | 1605 - src/jemalloc/test/unit/a0.c | 19 - src/jemalloc/test/unit/arena_reset.c | 155 - src/jemalloc/test/unit/arena_reset.sh | 5 - src/jemalloc/test/unit/atomic.c | 122 - src/jemalloc/test/unit/bitmap.c | 163 - src/jemalloc/test/unit/ckh.c | 214 - src/jemalloc/test/unit/decay.c | 372 - src/jemalloc/test/unit/decay.sh | 3 - src/jemalloc/test/unit/extent_quantize.c | 98 - src/jemalloc/test/unit/fork.c | 64 - src/jemalloc/test/unit/hash.c | 185 - src/jemalloc/test/unit/junk.c | 245 - src/jemalloc/test/unit/junk.sh | 5 - src/jemalloc/test/unit/junk_alloc.c | 1 - src/jemalloc/test/unit/junk_alloc.sh | 5 - src/jemalloc/test/unit/junk_free.c | 1 - src/jemalloc/test/unit/junk_free.sh | 5 - src/jemalloc/test/unit/lg_chunk.c | 19 - src/jemalloc/test/unit/lg_chunk.sh | 6 - src/jemalloc/test/unit/mallctl.c | 746 - src/jemalloc/test/unit/math.c | 398 - src/jemalloc/test/unit/mq.c | 93 - src/jemalloc/test/unit/mtx.c | 60 - src/jemalloc/test/unit/nstime.c | 227 - src/jemalloc/test/unit/pack.c | 198 - src/jemalloc/test/unit/pack.sh | 5 - src/jemalloc/test/unit/pages.c | 27 - src/jemalloc/test/unit/ph.c | 290 - src/jemalloc/test/unit/prng.c | 263 - src/jemalloc/test/unit/prof_accum.c | 87 - src/jemalloc/test/unit/prof_accum.sh | 5 - src/jemalloc/test/unit/prof_active.c | 132 - src/jemalloc/test/unit/prof_active.sh | 5 - src/jemalloc/test/unit/prof_gdump.c | 78 - src/jemalloc/test/unit/prof_gdump.sh | 6 - src/jemalloc/test/unit/prof_idump.c | 46 - src/jemalloc/test/unit/prof_idump.sh | 7 - src/jemalloc/test/unit/prof_reset.c | 299 - src/jemalloc/test/unit/prof_reset.sh | 5 - src/jemalloc/test/unit/prof_tctx.sh | 5 - src/jemalloc/test/unit/prof_thread_name.c | 127 - src/jemalloc/test/unit/prof_thread_name.sh | 5 - src/jemalloc/test/unit/ql.c | 209 - src/jemalloc/test/unit/qr.c | 248 - src/jemalloc/test/unit/quarantine.c | 102 - src/jemalloc/test/unit/quarantine.sh | 8 - src/jemalloc/test/unit/rb.c | 354 - src/jemalloc/test/unit/rtree.c | 151 - src/jemalloc/test/unit/run_quantize.c | 149 - src/jemalloc/test/unit/size_classes.c | 184 - src/jemalloc/test/unit/smoothstep.c | 106 - src/jemalloc/test/unit/stats.c | 456 - src/jemalloc/test/unit/stats_print.c | 1005 - src/jemalloc/test/unit/ticker.c | 76 - src/jemalloc/test/unit/tsd.c | 112 - src/jemalloc/test/unit/util.c | 319 - src/jemalloc/test/unit/witness.c | 302 - src/jemalloc/test/unit/zero.c | 75 - src/jemalloc/test/unit/zero.sh | 5 - src/liballoc/Cargo.toml | 3 + src/liballoc/allocator.rs | 6 +- src/liballoc/benches/str.rs | 3 - src/liballoc/borrow.rs | 5 +- src/liballoc/boxed.rs | 44 +- src/liballoc/fmt.rs | 1 - src/liballoc/lib.rs | 5 + src/liballoc/linked_list.rs | 3 +- src/liballoc/raw_vec.rs | 2 +- src/liballoc/slice.rs | 211 + src/liballoc/str.rs | 296 +- src/liballoc/string.rs | 2 - src/liballoc/tests/lib.rs | 1 + src/liballoc/tests/slice.rs | 3 +- src/liballoc/tests/str.rs | 1 - src/liballoc/tests/vec.rs | 3 - src/liballoc/vec.rs | 27 +- src/liballoc_jemalloc/Cargo.toml | 2 +- src/liballoc_jemalloc/build.rs | 17 +- src/liballoc_jemalloc/lib.rs | 28 +- src/liballoc_system/Cargo.toml | 4 + src/liballoc_system/lib.rs | 92 +- src/libbacktrace/configure | 2 +- src/libcollections/Cargo.toml | 12 - src/libcollections/lib.rs | 68 - src/libcompiler_builtins/.travis.yml | 3 - src/libcompiler_builtins/README.md | 8 +- src/libcompiler_builtins/build.rs | 436 +- .../aarch64-unknown-linux-gnu/Dockerfile | 1 + .../arm-unknown-linux-gnueabi/Dockerfile | 2 +- .../arm-unknown-linux-gnueabihf/Dockerfile | 1 + .../armv7-unknown-linux-gnueabihf/Dockerfile | 1 + .../docker/mips-unknown-linux-gnu/Dockerfile | 1 + .../mips64-unknown-linux-gnuabi64/Dockerfile | 1 + .../Dockerfile | 1 + .../mipsel-unknown-linux-gnu/Dockerfile | 1 + .../powerpc-unknown-linux-gnu/Dockerfile | 1 + .../powerpc64-unknown-linux-gnu/Dockerfile | 1 + .../powerpc64le-unknown-linux-gnu/Dockerfile | 1 + .../ci/docker/thumbv6m-linux-eabi/Dockerfile | 1 + .../ci/docker/thumbv7em-linux-eabi/Dockerfile | 1 + .../docker/thumbv7em-linux-eabihf/Dockerfile | 1 + .../ci/docker/thumbv7m-linux-eabi/Dockerfile | 1 + src/libcompiler_builtins/ci/run.sh | 1 + src/libcompiler_builtins/src/arm.rs | 8 +- src/libcompiler_builtins/src/arm_linux.rs | 170 + src/libcompiler_builtins/src/float/div.rs | 457 + src/libcompiler_builtins/src/float/mod.rs | 2 + src/libcompiler_builtins/src/float/mul.rs | 191 + src/libcompiler_builtins/src/int/mod.rs | 45 + src/libcompiler_builtins/src/lib.rs | 3 + src/libcompiler_builtins/src/macros.rs | 6 +- src/libcompiler_builtins/src/probestack.rs | 4 +- src/libcompiler_builtins/src/x86.rs | 7 +- src/libcompiler_builtins/src/x86_64.rs | 12 +- src/libcompiler_builtins/tests/divdf3.rs | 7 + src/libcompiler_builtins/tests/divsf3.rs | 7 + src/libcompiler_builtins/tests/muldf3.rs | 7 + src/libcompiler_builtins/tests/mulsf3.rs | 7 + .../thumbv6m-linux-eabi.json | 1 + .../thumbv7em-linux-eabi.json | 1 + .../thumbv7em-linux-eabihf.json | 1 + .../thumbv7m-linux-eabi.json | 1 + src/libcore/Cargo.toml | 3 - src/libcore/array.rs | 53 + src/libcore/benches/iter.rs | 6 + src/libcore/benches/lib.rs | 2 +- src/libcore/benches/slice.rs | 67 + src/libcore/cell.rs | 57 +- src/libcore/char_private.rs | 157 +- src/libcore/fmt/mod.rs | 20 + src/libcore/hash/mod.rs | 30 +- src/libcore/hash/sip.rs | 7 +- src/libcore/intrinsics.rs | 22 +- src/libcore/iter/iterator.rs | 348 +- src/libcore/iter/mod.rs | 450 +- src/libcore/iter/traits.rs | 65 +- src/libcore/lib.rs | 36 +- src/libcore/macros.rs | 10 +- src/libcore/marker.rs | 8 +- src/libcore/mem.rs | 14 +- src/libcore/nonzero.rs | 2 +- src/libcore/num/mod.rs | 656 +- src/libcore/ops/deref.rs | 4 +- src/libcore/ops/generator.rs | 4 +- src/libcore/ops/mod.rs | 2 +- src/libcore/ops/try.rs | 31 +- src/libcore/option.rs | 35 + src/libcore/ptr.rs | 56 +- src/libcore/result.rs | 2 +- src/libcore/slice/mod.rs | 218 +- src/libcore/str/mod.rs | 20 +- src/libcore/sync/atomic.rs | 19 +- src/libcore/tests/array.rs | 23 + src/libcore/tests/hash/mod.rs | 8 + src/libcore/tests/hash/sip.rs | 14 +- src/libcore/tests/iter.rs | 223 + src/libcore/tests/lib.rs | 3 +- src/libcore/tests/mem.rs | 16 + src/libcore/tests/num/flt2dec/estimator.rs | 5 - src/libcore/tests/num/flt2dec/mod.rs | 86 +- .../tests/num/flt2dec/strategy/grisu.rs | 48 - src/libcore/tests/ptr.rs | 51 + src/libcore/tests/slice.rs | 148 +- src/libcore/unit.rs | 31 + src/libfmt_macros/lib.rs | 22 +- src/liblibc/.travis.yml | 20 +- src/liblibc/Cargo.lock | 122 +- src/liblibc/Cargo.toml | 4 +- src/liblibc/README.md | 3 + src/liblibc/appveyor.yml | 4 - src/liblibc/ci/README.md | 2 +- src/liblibc/ci/android-accept-licenses.sh | 15 - src/liblibc/ci/android-install-sdk.sh | 27 +- .../docker/aarch64-linux-android/Dockerfile | 4 +- .../aarch64-unknown-linux-musl/Dockerfile | 27 + .../docker/arm-linux-androideabi/Dockerfile | 4 +- .../arm-unknown-linux-musleabihf/Dockerfile | 25 + .../ci/docker/i686-linux-android/Dockerfile | 4 +- .../Dockerfile | 11 + .../powerpc64le-unknown-linux-gnu/Dockerfile | 11 + .../docker/s390x-unknown-linux-gnu/Dockerfile | 16 +- .../sparc64-unknown-linux-gnu/Dockerfile | 19 + .../x86_64-unknown-linux-gnux32/Dockerfile | 5 + src/liblibc/ci/emscripten-entry.sh | 2 +- src/liblibc/ci/linux-s390x.sh | 18 + src/liblibc/ci/linux-sparc64.sh | 17 + src/liblibc/ci/run.sh | 9 +- src/liblibc/ci/test-runner-linux | 23 + src/liblibc/libc-test/Cargo.toml | 2 +- src/liblibc/libc-test/build.rs | 63 +- src/liblibc/src/dox.rs | 99 +- src/liblibc/src/fuchsia/aarch64.rs | 336 + src/liblibc/src/fuchsia/mod.rs | 3922 ++ src/liblibc/src/fuchsia/powerpc64.rs | 79 + src/liblibc/src/fuchsia/x86_64.rs | 447 + src/liblibc/src/lib.rs | 332 +- src/liblibc/src/redox.rs | 96 - src/liblibc/src/redox/mod.rs | 104 + src/liblibc/src/redox/net.rs | 110 + src/liblibc/src/unix/bsd/apple/mod.rs | 115 +- .../src/unix/bsd/freebsdlike/dragonfly/mod.rs | 26 + .../src/unix/bsd/freebsdlike/freebsd/mod.rs | 45 + src/liblibc/src/unix/bsd/freebsdlike/mod.rs | 2 - src/liblibc/src/unix/bsd/mod.rs | 10 + src/liblibc/src/unix/bsd/netbsdlike/mod.rs | 4 +- .../src/unix/bsd/netbsdlike/netbsd/mod.rs | 96 +- .../unix/bsd/netbsdlike/openbsdlike/mod.rs | 20 + src/liblibc/src/unix/haiku/mod.rs | 360 +- src/liblibc/src/unix/mod.rs | 61 +- src/liblibc/src/unix/newlib/aarch64/mod.rs | 5 + src/liblibc/src/unix/newlib/mod.rs | 32 + .../src/unix/notbsd/android/b32/arm.rs | 345 + .../src/unix/notbsd/android/b64/aarch64.rs | 268 +- src/liblibc/src/unix/notbsd/android/mod.rs | 49 + .../src/unix/notbsd/linux/mips/mips32.rs | 371 +- .../src/unix/notbsd/linux/mips/mips64.rs | 330 +- src/liblibc/src/unix/notbsd/linux/mips/mod.rs | 44 + src/liblibc/src/unix/notbsd/linux/mod.rs | 163 +- .../src/unix/notbsd/linux/musl/b32/arm.rs | 379 +- .../src/unix/notbsd/linux/musl/b32/mips.rs | 381 +- .../src/unix/notbsd/linux/musl/b32/mod.rs | 16 + .../src/unix/notbsd/linux/musl/b32/x86.rs | 16 + .../src/unix/notbsd/linux/musl/b64/aarch64.rs | 334 + .../src/unix/notbsd/linux/musl/b64/mod.rs | 60 +- .../unix/notbsd/linux/musl/b64/powerpc64.rs | 76 + .../src/unix/notbsd/linux/musl/b64/x86_64.rs | 71 + src/liblibc/src/unix/notbsd/linux/musl/mod.rs | 32 +- .../src/unix/notbsd/linux/other/b32/arm.rs | 371 +- .../src/unix/notbsd/linux/other/b32/mod.rs | 18 + .../unix/notbsd/linux/other/b32/powerpc.rs | 376 +- .../src/unix/notbsd/linux/other/b32/x86.rs | 12 + .../unix/notbsd/linux/other/b64/aarch64.rs | 301 +- .../src/unix/notbsd/linux/other/b64/mod.rs | 51 +- .../unix/notbsd/linux/other/b64/not_x32.rs | 351 + .../unix/notbsd/linux/other/b64/powerpc64.rs | 383 +- .../unix/notbsd/linux/other/b64/sparc64.rs | 370 +- .../src/unix/notbsd/linux/other/b64/x32.rs | 331 + .../src/unix/notbsd/linux/other/b64/x86_64.rs | 380 +- .../src/unix/notbsd/linux/other/mod.rs | 55 +- src/liblibc/src/unix/notbsd/linux/s390x.rs | 350 +- src/liblibc/src/unix/notbsd/mod.rs | 17 + src/liblibc/src/unix/solaris/mod.rs | 56 +- src/liblibc/src/unix/uclibc/mod.rs | 41 +- src/libpanic_abort/lib.rs | 15 +- src/libpanic_unwind/lib.rs | 8 +- src/libpanic_unwind/wasm32.rs | 29 + src/libproc_macro/lib.rs | 15 +- src/libproc_macro/quote.rs | 310 +- src/libprofiler_builtins/Cargo.toml | 2 +- src/librand/Cargo.toml | 12 - src/librand/chacha.rs | 309 - src/librand/distributions/exponential.rs | 155 - src/librand/distributions/gamma.rs | 439 - src/librand/distributions/mod.rs | 397 - src/librand/distributions/normal.rs | 234 - src/librand/distributions/range.rs | 227 - src/librand/distributions/ziggurat_tables.rs | 284 - src/librand/isaac.rs | 746 - src/librand/lib.rs | 481 - src/librand/rand_impls.rs | 208 - src/librand/reseeding.rs | 216 - src/librustc/README.md | 4 +- src/librustc/dep_graph/dep_node.rs | 137 +- src/librustc/dep_graph/graph.rs | 275 +- src/librustc/dep_graph/mod.rs | 5 +- src/librustc/dep_graph/prev.rs | 5 + src/librustc/diagnostics.rs | 52 +- src/librustc/hir/README.md | 4 +- src/librustc/hir/check_attr.rs | 16 +- src/librustc/hir/def.rs | 4 +- src/librustc/hir/def_id.rs | 139 +- src/librustc/hir/intravisit.rs | 18 +- src/librustc/hir/itemlikevisit.rs | 2 +- src/librustc/hir/lowering.rs | 348 +- src/librustc/hir/map/collector.rs | 9 +- src/librustc/hir/map/def_collector.rs | 21 +- src/librustc/hir/map/definitions.rs | 32 +- src/librustc/hir/map/mod.rs | 58 +- src/librustc/hir/mod.rs | 92 +- src/librustc/hir/print.rs | 44 +- src/librustc/ich/fingerprint.rs | 20 +- src/librustc/ich/hcx.rs | 18 +- src/librustc/ich/impls_hir.rs | 106 +- src/librustc/ich/impls_mir.rs | 9 +- src/librustc/ich/impls_syntax.rs | 16 + src/librustc/ich/impls_ty.rs | 140 +- src/librustc/infer/README.md | 438 +- src/librustc/infer/equate.rs | 3 +- .../error_reporting/different_lifetimes.rs | 60 +- src/librustc/infer/error_reporting/mod.rs | 159 +- .../error_reporting/named_anon_conflict.rs | 21 +- src/librustc/infer/error_reporting/note.rs | 6 +- src/librustc/infer/error_reporting/util.rs | 1 + src/librustc/infer/freshen.rs | 1 + src/librustc/infer/fudge.rs | 4 +- src/librustc/infer/glb.rs | 30 +- src/librustc/infer/higher_ranked/mod.rs | 40 +- .../infer/lexical_region_resolve/README.md | 262 + .../graphviz.rs | 42 +- .../infer/lexical_region_resolve/mod.rs | 766 + src/librustc/infer/lub.rs | 30 +- src/librustc/infer/mod.rs | 246 +- src/librustc/infer/outlives/env.rs | 355 + src/librustc/infer/outlives/mod.rs | 12 + src/librustc/infer/outlives/obligations.rs | 623 + .../infer/region_constraints/README.md | 70 + src/librustc/infer/region_constraints/mod.rs | 956 + .../infer/region_constraints/taint.rs | 96 + src/librustc/infer/region_inference/README.md | 321 - src/librustc/infer/region_inference/mod.rs | 1637 - src/librustc/infer/resolve.rs | 13 +- src/librustc/infer/sub.rs | 3 +- src/librustc/lib.rs | 13 +- src/librustc/lint/builtin.rs | 23 +- src/librustc/lint/context.rs | 15 +- src/librustc/lint/mod.rs | 32 +- src/librustc/middle/borrowck.rs | 31 + src/librustc/middle/cstore.rs | 14 +- src/librustc/middle/dataflow.rs | 2 +- src/librustc/middle/dead.rs | 14 +- src/librustc/middle/expr_use_visitor.rs | 26 +- src/librustc/middle/free_region.rs | 13 + src/librustc/middle/lang_items.rs | 2 +- src/librustc/middle/mem_categorization.rs | 121 +- src/librustc/middle/reachable.rs | 19 +- src/librustc/middle/region.rs | 42 +- src/librustc/middle/resolve_lifetime.rs | 34 +- src/librustc/middle/stability.rs | 40 +- src/librustc/mir/README.md | 6 +- src/librustc/mir/mod.rs | 122 +- src/librustc/mir/transform.rs | 190 - src/librustc/mir/visit.rs | 65 +- src/librustc/session/config.rs | 263 +- src/librustc/session/filesearch.rs | 2 - src/librustc/session/mod.rs | 220 +- src/librustc/traits/coherence.rs | 5 +- src/librustc/traits/error_reporting.rs | 269 +- src/librustc/traits/fulfill.rs | 116 +- src/librustc/traits/mod.rs | 129 +- src/librustc/traits/object_safety.rs | 17 +- src/librustc/traits/on_unimplemented.rs | 2 +- src/librustc/traits/project.rs | 4 +- src/librustc/traits/select.rs | 78 +- src/librustc/traits/specialize/mod.rs | 62 +- src/librustc/traits/structural_impls.rs | 27 +- src/librustc/traits/trans/mod.rs | 204 +- src/librustc/ty/README.md | 10 +- src/librustc/ty/codec.rs | 396 + src/librustc/ty/context.rs | 64 +- src/librustc/ty/erase_regions.rs | 79 + src/librustc/ty/error.rs | 12 + src/librustc/ty/fast_reject.rs | 6 + src/librustc/ty/flags.rs | 3 +- src/librustc/ty/fold.rs | 107 +- src/librustc/ty/inhabitedness/mod.rs | 151 +- src/librustc/ty/instance.rs | 11 +- src/librustc/ty/item_path.rs | 29 +- src/librustc/ty/layout.rs | 22 +- src/librustc/ty/maps/README.md | 6 +- src/librustc/ty/maps/config.rs | 223 +- src/librustc/ty/maps/keys.rs | 13 +- src/librustc/ty/maps/mod.rs | 52 +- src/librustc/ty/maps/on_disk_cache.rs | 762 + src/librustc/ty/maps/plumbing.rs | 389 +- src/librustc/ty/mod.rs | 100 +- src/librustc/ty/outlives.rs | 37 +- src/librustc/ty/relate.rs | 6 + src/librustc/ty/structural_impls.rs | 9 +- src/librustc/ty/sty.rs | 112 +- src/librustc/ty/subst.rs | 13 + src/librustc/ty/trait_def.rs | 6 +- src/librustc/ty/util.rs | 88 +- src/librustc/ty/walk.rs | 3 +- src/librustc/ty/wf.rs | 3 +- src/librustc/util/nodemap.rs | 2 + src/librustc/util/ppaux.rs | 1760 +- src/librustc_allocator/expand.rs | 4 + src/librustc_apfloat/lib.rs | 10 +- src/librustc_back/Cargo.toml | 1 + src/librustc_back/build.rs | 1 - src/librustc_back/lib.rs | 4 +- src/librustc_back/target/apple_ios_base.rs | 4 + .../target/asmjs_unknown_emscripten.rs | 1 - src/librustc_back/target/mod.rs | 51 +- src/librustc_back/target/msp430_none_elf.rs | 5 + .../target/wasm32_experimental_emscripten.rs | 1 - .../target/wasm32_unknown_emscripten.rs | 1 - .../target/wasm32_unknown_unknown.rs | 104 + src/librustc_back/target/windows_msvc_base.rs | 31 - .../target/x86_64_rumprun_netbsd.rs | 1 - .../target/x86_64_unknown_linux_gnux32.rs | 35 + src/librustc_back/tempdir.rs | 2 +- src/librustc_binaryen/BinaryenWrapper.cpp | 132 + src/librustc_binaryen/Cargo.toml | 16 + src/librustc_binaryen/build.rs | 60 + src/librustc_binaryen/lib.rs | 150 + src/librustc_borrowck/Cargo.toml | 1 + src/librustc_borrowck/borrowck/README.md | 5 +- src/librustc_borrowck/borrowck/check_loans.rs | 46 +- .../borrowck/gather_loans/mod.rs | 19 +- src/librustc_borrowck/borrowck/mod.rs | 163 +- src/librustc_borrowck/borrowck/unused.rs | 118 + src/librustc_borrowck/diagnostics.rs | 469 - src/librustc_borrowck/lib.rs | 10 +- src/librustc_const_eval/_match.rs | 85 +- src/librustc_const_eval/check_match.rs | 13 +- src/librustc_const_eval/eval.rs | 98 +- src/librustc_const_eval/lib.rs | 3 +- src/librustc_const_math/float.rs | 8 + src/librustc_const_math/lib.rs | 5 +- src/librustc_data_structures/bitvec.rs | 36 +- src/librustc_data_structures/graph/mod.rs | 15 +- src/librustc_data_structures/indexed_set.rs | 12 +- src/librustc_data_structures/indexed_vec.rs | 294 +- src/librustc_data_structures/lib.rs | 3 + src/librustc_data_structures/sip128.rs | 533 + src/librustc_data_structures/stable_hasher.rs | 128 +- .../transitive_relation.rs | 4 +- src/librustc_driver/driver.rs | 144 +- src/librustc_driver/lib.rs | 19 +- src/librustc_driver/pretty.rs | 8 +- src/librustc_driver/test.rs | 218 +- src/librustc_errors/Cargo.toml | 1 + src/librustc_errors/diagnostic.rs | 52 +- src/librustc_errors/diagnostic_builder.rs | 5 +- src/librustc_errors/emitter.rs | 402 +- src/librustc_errors/lib.rs | 215 +- src/librustc_errors/snippet.rs | 2 +- src/librustc_incremental/Cargo.toml | 3 +- src/librustc_incremental/lib.rs | 8 +- src/librustc_incremental/persist/data.rs | 3 +- .../persist/dirty_clean.rs | 421 +- .../persist/file_format.rs | 20 +- src/librustc_incremental/persist/fs.rs | 47 +- src/librustc_incremental/persist/load.rs | 40 +- src/librustc_incremental/persist/mod.rs | 3 +- src/librustc_incremental/persist/save.rs | 103 +- .../persist/work_product.rs | 14 +- src/librustc_lint/Cargo.toml | 1 - src/librustc_lint/bad_style.rs | 6 +- src/librustc_lint/builtin.rs | 157 +- src/librustc_lint/lib.rs | 30 +- src/librustc_lint/types.rs | 17 +- src/librustc_lint/unused.rs | 93 +- src/librustc_llvm/Cargo.toml | 2 +- src/librustc_llvm/ffi.rs | 16 +- src/librustc_llvm/lib.rs | 5 + src/librustc_metadata/astencode.rs | 5 +- src/librustc_metadata/creader.rs | 34 +- src/librustc_metadata/cstore.rs | 41 +- src/librustc_metadata/cstore_impl.rs | 52 +- src/librustc_metadata/decoder.rs | 286 +- src/librustc_metadata/encoder.rs | 109 +- src/librustc_metadata/index_builder.rs | 2 +- src/librustc_metadata/lib.rs | 1 - src/librustc_metadata/schema.rs | 18 +- src/librustc_mir/borrow_check.rs | 1113 +- src/librustc_mir/build/matches/mod.rs | 91 +- src/librustc_mir/build/matches/simplify.rs | 8 +- src/librustc_mir/build/matches/test.rs | 6 +- src/librustc_mir/build/mod.rs | 84 +- src/librustc_mir/build/scope.rs | 152 +- .../dataflow/drop_flag_effects.rs | 54 +- src/librustc_mir/dataflow/impls/borrows.rs | 135 +- src/librustc_mir/dataflow/impls/mod.rs | 251 +- src/librustc_mir/dataflow/mod.rs | 32 +- .../dataflow/move_paths/builder.rs | 65 +- src/librustc_mir/dataflow/move_paths/mod.rs | 9 +- src/librustc_mir/diagnostics.rs | 509 + src/librustc_mir/hair/cx/expr.rs | 5 +- src/librustc_mir/hair/cx/mod.rs | 29 +- src/librustc_mir/lib.rs | 4 + src/librustc_mir/shim.rs | 12 +- src/librustc_mir/transform/add_call_guards.rs | 2 +- src/librustc_mir/transform/add_validation.rs | 7 +- src/librustc_mir/transform/check_unsafety.rs | 35 +- .../transform/clean_end_regions.rs | 6 +- src/librustc_mir/transform/copy_prop.rs | 78 +- src/librustc_mir/transform/deaggregator.rs | 16 +- src/librustc_mir/transform/dump_mir.rs | 35 +- src/librustc_mir/transform/elaborate_drops.rs | 25 +- src/librustc_mir/transform/erase_regions.rs | 6 +- src/librustc_mir/transform/generator.rs | 27 +- src/librustc_mir/transform/inline.rs | 164 +- src/librustc_mir/transform/instcombine.rs | 2 +- src/librustc_mir/transform/mod.rs | 157 +- .../transform/nll/constraint_generation.rs | 234 + .../transform/nll/free_regions.rs | 90 + src/librustc_mir/transform/nll/mod.rs | 298 +- .../transform/nll/region_infer.rs | 443 + src/librustc_mir/transform/nll/renumber.rs | 165 + .../nll/subtype_constraint_generation.rs | 112 + src/librustc_mir/transform/no_landing_pads.rs | 5 +- src/librustc_mir/transform/promote_consts.rs | 3 +- src/librustc_mir/transform/qualify_consts.rs | 33 +- src/librustc_mir/transform/rustc_peek.rs | 6 +- src/librustc_mir/transform/simplify.rs | 2 +- .../transform/simplify_branches.rs | 5 +- src/librustc_mir/transform/type_check.rs | 921 +- src/librustc_mir/util/borrowck_errors.rs | 181 +- src/librustc_mir/util/def_use.rs | 22 +- src/librustc_mir/util/graphviz.rs | 67 +- src/librustc_mir/util/liveness.rs | 393 +- src/librustc_mir/util/mod.rs | 2 +- src/librustc_mir/util/pretty.rs | 194 +- src/librustc_passes/ast_validation.rs | 78 +- src/librustc_passes/consts.rs | 124 +- src/librustc_passes/diagnostics.rs | 1 + src/librustc_passes/lib.rs | 6 + src/librustc_passes/mir_stats.rs | 6 +- src/librustc_privacy/lib.rs | 42 +- src/librustc_resolve/Cargo.toml | 1 + src/librustc_resolve/build_reduced_graph.rs | 50 +- src/librustc_resolve/check_unused.rs | 2 +- src/librustc_resolve/diagnostics.rs | 6 +- src/librustc_resolve/lib.rs | 136 +- src/librustc_resolve/macros.rs | 1 + src/librustc_resolve/resolve_imports.rs | 6 +- src/librustc_save_analysis/Cargo.toml | 2 +- src/librustc_save_analysis/dump_visitor.rs | 1060 +- src/librustc_save_analysis/json_dumper.rs | 13 +- src/librustc_save_analysis/lib.rs | 528 +- src/librustc_save_analysis/sig.rs | 343 +- src/librustc_save_analysis/span_utils.rs | 81 +- src/librustc_trans/Cargo.toml | 8 +- src/librustc_trans/abi.rs | 4 + src/librustc_trans/adt.rs | 2 +- src/librustc_trans/back/archive.rs | 7 +- src/librustc_trans/back/link.rs | 285 +- src/librustc_trans/back/linker.rs | 5 +- src/librustc_trans/back/lto.rs | 38 +- src/librustc_trans/back/symbol_export.rs | 45 +- src/librustc_trans/back/symbol_names.rs | 4 +- src/librustc_trans/back/write.rs | 360 +- src/librustc_trans/base.rs | 93 +- src/librustc_trans/builder.rs | 7 + src/librustc_trans/cabi_x86_64.rs | 4 +- src/librustc_trans/callee.rs | 7 +- src/librustc_trans/common.rs | 17 - src/librustc_trans/consts.rs | 9 +- src/librustc_trans/context.rs | 37 +- src/librustc_trans/debuginfo/metadata.rs | 117 +- src/librustc_trans/debuginfo/mod.rs | 5 +- src/librustc_trans/debuginfo/type_names.rs | 1 + src/librustc_trans/declare.rs | 5 + src/librustc_trans/intrinsic.rs | 17 +- src/librustc_trans/lib.rs | 74 +- src/librustc_trans/llvm_util.rs | 12 +- src/librustc_trans/meth.rs | 7 +- src/librustc_trans/mir/analyze.rs | 12 +- src/librustc_trans/mir/block.rs | 14 +- src/librustc_trans/mir/constant.rs | 79 +- src/librustc_trans/mir/lvalue.rs | 18 +- src/librustc_trans/mir/mod.rs | 43 +- src/librustc_trans/mir/rvalue.rs | 171 +- src/librustc_trans/partitioning.rs | 16 +- src/librustc_trans/trans_item.rs | 400 +- src/librustc_trans/type_of.rs | 8 +- src/librustc_trans_utils/Cargo.toml | 1 + .../collector.rs | 50 +- src/librustc_trans_utils/common.rs | 92 + src/librustc_trans_utils/lib.rs | 16 +- src/librustc_trans_utils/link.rs | 35 +- .../monomorphize.rs | 11 +- src/librustc_trans_utils/trans_crate.rs | 8 +- src/librustc_trans_utils/trans_item.rs | 465 + src/librustc_typeck/README.md | 2 +- src/librustc_typeck/astconv.rs | 211 +- src/librustc_typeck/check/_match.rs | 43 +- src/librustc_typeck/check/callee.rs | 3 + src/librustc_typeck/check/cast.rs | 120 +- src/librustc_typeck/check/closure.rs | 483 +- src/librustc_typeck/check/compare_method.rs | 110 +- src/librustc_typeck/check/demand.rs | 105 +- src/librustc_typeck/check/intrinsic.rs | 2 +- src/librustc_typeck/check/method/mod.rs | 17 +- src/librustc_typeck/check/method/probe.rs | 14 +- src/librustc_typeck/check/method/suggest.rs | 14 +- src/librustc_typeck/check/mod.rs | 154 +- src/librustc_typeck/check/op.rs | 48 +- src/librustc_typeck/check/regionck.rs | 730 +- src/librustc_typeck/check/upvar.rs | 22 +- src/librustc_typeck/check/wfcheck.rs | 75 +- src/librustc_typeck/check/writeback.rs | 3 +- src/librustc_typeck/check_unused.rs | 5 +- .../coherence/inherent_impls.rs | 10 + .../coherence/inherent_impls_overlap.rs | 14 +- src/librustc_typeck/coherence/mod.rs | 2 +- src/librustc_typeck/coherence/orphan.rs | 19 +- src/librustc_typeck/coherence/overlap.rs | 10 +- src/librustc_typeck/coherence/unsafety.rs | 2 +- src/librustc_typeck/collect.rs | 203 +- src/librustc_typeck/diagnostics.rs | 132 +- src/librustc_typeck/lib.rs | 12 + src/librustc_typeck/namespace.rs | 39 + src/librustc_typeck/outlives/mod.rs | 29 + src/librustc_typeck/outlives/test.rs | 41 + src/librustc_typeck/variance/README.md | 20 +- src/librustc_typeck/variance/constraints.rs | 18 +- src/librustc_typeck/variance/mod.rs | 13 +- src/librustc_typeck/variance/solve.rs | 4 +- src/librustdoc/Cargo.toml | 4 +- src/librustdoc/clean/cfg.rs | 1 + src/librustdoc/clean/inline.rs | 11 +- src/librustdoc/clean/mod.rs | 75 +- src/librustdoc/core.rs | 9 +- src/librustdoc/doctree.rs | 4 +- src/librustdoc/externalfiles.rs | 9 +- src/librustdoc/html/format.rs | 2 +- src/librustdoc/html/highlight.rs | 2 +- src/librustdoc/html/item_type.rs | 9 +- src/librustdoc/html/layout.rs | 8 +- src/librustdoc/html/markdown.rs | 15 +- src/librustdoc/html/render.rs | 508 +- src/librustdoc/html/static/main.js | 910 +- src/librustdoc/html/static/rustdoc.css | 116 +- src/librustdoc/html/static/styles/main.css | 6 + src/librustdoc/lib.rs | 57 +- src/librustdoc/markdown.rs | 18 +- src/librustdoc/passes/mod.rs | 4 +- src/librustdoc/test.rs | 120 +- src/librustdoc/visit_ast.rs | 6 +- src/libstd/Cargo.toml | 9 +- src/libstd/ascii.rs | 716 +- src/libstd/build.rs | 20 +- src/libstd/collections/hash/map.rs | 63 +- src/libstd/collections/hash/table.rs | 32 +- src/libstd/env.rs | 4 + src/libstd/error.rs | 8 + src/libstd/f32.rs | 89 +- src/libstd/f64.rs | 49 +- src/libstd/ffi/c_str.rs | 257 +- src/libstd/ffi/mod.rs | 151 + src/libstd/ffi/os_str.rs | 50 +- src/libstd/heap.rs | 11 + src/libstd/io/buffered.rs | 25 + src/libstd/io/mod.rs | 13 +- src/libstd/io/stdio.rs | 4 +- src/libstd/lib.rs | 44 +- src/libstd/macros.rs | 40 +- src/libstd/net/tcp.rs | 88 +- src/libstd/net/udp.rs | 39 +- src/libstd/os/linux/fs.rs | 242 +- src/libstd/panic.rs | 4 + src/libstd/path.rs | 9 +- src/libstd/primitive_docs.rs | 7 +- src/libstd/process.rs | 244 +- src/libstd/rand/mod.rs | 286 - src/libstd/rt.rs | 1 - src/libstd/sync/mpsc/cache_aligned.rs | 37 + src/libstd/sync/mpsc/mod.rs | 26 +- src/libstd/sync/mpsc/select.rs | 18 +- src/libstd/sync/mpsc/spsc_queue.rs | 153 +- src/libstd/sync/mpsc/stream.rs | 105 +- src/libstd/sync/mutex.rs | 13 +- src/libstd/sync/once.rs | 96 +- src/libstd/sync/rwlock.rs | 30 +- src/libstd/sys/mod.rs | 3 + src/libstd/sys/redox/backtrace/tracing.rs | 4 +- src/libstd/sys/redox/cmath.rs | 43 + src/libstd/sys/redox/condvar.rs | 57 +- src/libstd/sys/redox/fs.rs | 3 +- src/libstd/sys/redox/mod.rs | 4 + src/libstd/sys/redox/os.rs | 4 + src/libstd/sys/redox/rand.rs | 48 +- src/libstd/sys/redox/stdio.rs | 5 +- .../sys/unix/backtrace/printing/dladdr.rs | 5 +- src/libstd/sys/unix/backtrace/printing/mod.rs | 2 +- .../unix/backtrace/tracing/backtrace_fn.rs | 4 +- .../sys/unix/backtrace/tracing/gcc_s.rs | 4 +- src/libstd/sys/unix/cmath.rs | 43 + src/libstd/sys/unix/condvar.rs | 5 +- src/libstd/sys/unix/ext/fs.rs | 362 +- src/libstd/sys/unix/ext/mod.rs | 10 +- src/libstd/sys/unix/fs.rs | 4 +- src/libstd/sys/unix/mod.rs | 4 + src/libstd/sys/unix/net.rs | 13 +- src/libstd/sys/unix/os.rs | 4 + src/libstd/sys/unix/rand.rs | 340 +- src/libstd/sys/unix/stdio.rs | 5 +- src/libstd/sys/unix/thread.rs | 4 +- src/libstd/sys/unix/time.rs | 4 +- src/libstd/sys/wasm/args.rs | 90 + src/libstd/sys/wasm/backtrace.rs | 37 + src/libstd/sys/wasm/cmath.rs | 119 + src/libstd/sys/wasm/condvar.rs | 43 + src/libstd/sys/wasm/env.rs | 19 + src/libstd/sys/wasm/fs.rs | 304 + src/libstd/sys/wasm/memchr.rs | 11 + src/libstd/sys/wasm/mod.rs | 104 + src/libstd/sys/wasm/mutex.rs | 79 + src/libstd/sys/wasm/net.rs | 337 + src/libstd/sys/wasm/os.rs | 136 + src/libstd/sys/wasm/os_str.rs | 159 + src/libstd/sys/wasm/path.rs | 29 + src/libstd/sys/wasm/pipe.rs | 35 + src/libstd/sys/wasm/process.rs | 151 + src/libstd/sys/wasm/rwlock.rs | 82 + src/libstd/sys/wasm/stack_overflow.rs | 23 + src/libstd/sys/wasm/stdio.rs | 92 + src/libstd/sys/wasm/thread.rs | 48 + src/libstd/sys/wasm/thread_local.rs | 50 + src/libstd/sys/wasm/time.rs | 63 + src/libstd/sys/windows/backtrace/mod.rs | 4 +- .../sys/windows/backtrace/printing/msvc.rs | 6 +- src/libstd/sys/windows/c.rs | 22 +- src/libstd/sys/windows/cmath.rs | 103 + src/libstd/sys/windows/ext/ffi.rs | 56 + src/libstd/sys/windows/ext/fs.rs | 6 +- src/libstd/sys/windows/mod.rs | 4 + src/libstd/sys/windows/os.rs | 4 + src/libstd/sys/windows/path.rs | 2 - src/libstd/sys/windows/pipe.rs | 18 +- src/libstd/sys/windows/process.rs | 2 +- src/libstd/sys/windows/rand.rs | 70 +- src/libstd/sys/windows/stdio.rs | 5 +- src/libstd/sys/windows/thread.rs | 2 +- src/libstd/sys_common/backtrace.rs | 11 +- src/libstd/sys_common/gnu/libbacktrace.rs | 8 +- src/libstd/sys_common/mod.rs | 14 +- src/libstd/sys_common/remutex.rs | 13 +- src/libstd/sys_common/thread.rs | 6 +- src/libstd/thread/local.rs | 10 +- src/libstd/thread/mod.rs | 113 +- src/libstd_unicode/char.rs | 523 + src/libstd_unicode/lib.rs | 1 + src/libstd_unicode/unicode.py | 37 +- src/libsyntax/ast.rs | 47 +- src/libsyntax/codemap.rs | 90 +- src/libsyntax/diagnostics/macros.rs | 65 +- src/libsyntax/ext/expand.rs | 27 +- src/libsyntax/ext/placeholders.rs | 5 +- src/libsyntax/feature_gate.rs | 93 +- src/libsyntax/fold.rs | 15 +- src/libsyntax/json.rs | 86 +- src/libsyntax/parse/attr.rs | 9 +- src/libsyntax/parse/lexer/mod.rs | 5 +- src/libsyntax/parse/lexer/unicode_chars.rs | 2 +- src/libsyntax/parse/parser.rs | 424 +- src/libsyntax/parse/token.rs | 18 +- src/libsyntax/print/pprust.rs | 47 +- src/libsyntax/test_snippet.rs | 3 +- src/libsyntax/util/parser.rs | 3 +- src/libsyntax/visit.rs | 52 +- src/libsyntax_ext/deriving/generic/mod.rs | 3 +- src/libsyntax_ext/format.rs | 67 +- src/libsyntax_pos/Cargo.toml | 1 + src/libsyntax_pos/lib.rs | 179 +- src/libsyntax_pos/span_encoding.rs | 8 +- src/libsyntax_pos/symbol.rs | 12 +- src/libtest/lib.rs | 98 +- src/libunwind/lib.rs | 19 +- src/libunwind/macros.rs | 45 + src/rtstartup/rsbegin.rs | 6 +- src/rtstartup/rsend.rs | 2 + src/rustc/compiler_builtins_shim/Cargo.toml | 2 +- src/rustc/dlmalloc_shim/Cargo.toml | 14 + src/rustllvm/PassWrapper.cpp | 79 +- src/rustllvm/RustWrapper.cpp | 2 +- src/rustllvm/llvm-rebuild-trigger | 2 +- src/stage0.txt | 8 +- .../item-collection/unreferenced-const-fn.rs | 22 + .../unreferenced-inline-function.rs | 23 + .../partitioning/extern-drop-glue.rs | 12 +- .../inlining-from-extern-crate.rs | 8 +- .../partitioning/local-drop-glue.rs | 12 +- .../local-inlining-but-not-all.rs | 20 +- .../partitioning/local-inlining.rs | 18 +- .../partitioning/local-transitive-inlining.rs | 14 +- .../codegen-units/partitioning/statics.rs | 12 +- src/test/codegen/abi-x86-interrupt.rs | 1 - src/test/codegen/adjustments.rs | 10 +- src/test/codegen/align-struct.rs | 2 - src/test/codegen/auxiliary/nounwind.rs | 13 + src/test/codegen/fastcall-inreg.rs | 26 +- src/test/codegen/float_math.rs | 2 +- src/test/codegen/function-arguments.rs | 46 +- src/test/codegen/issue-37945.rs | 1 + src/test/codegen/mainsubprogram.rs | 7 +- src/test/codegen/mainsubprogramstart.rs | 7 +- src/test/codegen/match-optimizes-away.rs | 44 + src/test/codegen/match.rs | 9 +- src/test/codegen/mir_zst_stores.rs | 2 +- src/test/codegen/move-val-init.rs | 2 +- src/test/codegen/naked-functions.rs | 20 +- src/test/codegen/nounwind.rs | 26 + src/test/codegen/packed.rs | 11 + src/test/codegen/panic-abort-windows.rs | 2 +- src/test/codegen/refs.rs | 8 +- src/test/codegen/stores.rs | 12 +- src/test/codegen/unchecked-float-casts.rs | 46 + src/test/codegen/vtabletype.rs | 33 + .../auxiliary/lint_for_crate.rs | 1 + .../auxiliary/lint_group_plugin_test.rs | 1 + .../auxiliary/lint_plugin_test.rs | 1 + src/test/compile-fail/E0017.rs | 6 - src/test/compile-fail/E0029.rs | 1 + src/test/compile-fail/E0084.rs | 6 +- src/test/compile-fail/E0225.rs | 4 +- src/test/compile-fail/E0259.rs | 1 + src/test/compile-fail/E0308-2.rs | 20 - src/test/compile-fail/E0388.rs | 3 - src/test/compile-fail/E0508.rs | 7 +- src/test/compile-fail/E0517.rs | 20 +- src/test/compile-fail/E0518.rs | 10 +- src/test/compile-fail/E0534.rs | 4 +- src/test/compile-fail/E0596.rs | 7 +- .../arbitrary-self-types-not-object-safe.rs | 55 + src/test/compile-fail/asm-out-assign-imm.rs | 4 +- .../compile-fail/assign-imm-local-twice.rs | 4 +- ...ated-types-project-from-hrtb-in-fn-body.rs | 2 +- .../cache/project-fn-ret-contravariant.rs | 7 +- .../cache/project-fn-ret-invariant.rs | 10 +- .../compile-fail/auto-impl-future-compat.rs | 16 + .../compile-fail/auto-trait-validation.rs | 22 + .../auxiliary/deprecation-lint.rs | 18 + src/test/compile-fail/auxiliary/issue_1920.rs | 14 + .../auxiliary/tdticc_coherence_lib.rs | 1 + .../bad-intrinsic-monomorphization.rs | 11 +- src/test/compile-fail/bad-sized.rs | 2 +- .../compile-fail/blind-item-block-middle.rs | 2 +- .../borrowck/borrowck-access-permissions.rs | 76 + .../borrowck/borrowck-assign-comp.rs | 4 +- .../borrowck/borrowck-closures-mut-and-imm.rs | 2 +- .../borrowck/borrowck-describe-lvalue.rs | 320 + .../borrowck/borrowck-drop-from-guard.rs | 24 + .../borrowck/borrowck-init-in-fru.rs | 8 +- .../borrowck-match-already-borrowed.rs | 43 + .../borrowck-match-binding-is-assignment.rs | 10 +- .../borrowck-mut-borrow-linear-errors.rs | 24 +- .../borrowck/borrowck-overloaded-call.rs | 1 - ...owck-reborrow-from-shorter-lived-andmut.rs | 2 +- .../borrowck/borrowck-storage-dead.rs | 30 + .../borrowck/borrowck-unary-move.rs | 7 +- .../borrowck/borrowck-unboxed-closures.rs | 1 - .../borrowck/borrowck-uninit-field-access.rs | 49 + .../borrowck/borrowck-uninit-ref-chain.rs | 60 + .../borrowck/borrowck-union-borrow.rs | 12 +- .../borrowck/borrowck-use-in-index-lvalue.rs | 11 +- ...orrowck-use-uninitialized-in-cast-trait.rs | 7 +- .../borrowck-use-uninitialized-in-cast.rs | 7 +- .../check-static-immutable-mut-slices.rs | 1 - .../closure-expected-type/README.md | 1 + .../expect-fn-supply-fn-multiple.rs | 49 + .../expect-fn-supply-fn.rs | 70 + .../expect-infer-var-appearing-twice.rs | 35 + ...t-infer-var-supply-ty-with-bound-region.rs | 29 + ...ct-infer-var-supply-ty-with-free-region.rs | 29 + .../expect-region-supply-region.rs | 80 + ...-infer-vars-supply-ty-with-bound-region.rs | 29 + .../coherence-default-trait-impl.rs | 6 +- src/test/compile-fail/const-err.rs | 5 +- src/test/compile-fail/const-err2.rs | 1 - src/test/compile-fail/const-eval-overflow.rs | 8 +- .../compile-fail/const-pattern-irrefutable.rs | 29 - .../cycle-trait-default-type-trait.rs | 1 - src/test/compile-fail/deprecation-lint.rs | 274 +- .../derives-span-Clone-enum-struct-variant.rs | 2 +- .../compile-fail/derives-span-Clone-enum.rs | 2 +- .../compile-fail/derives-span-Clone-struct.rs | 2 +- .../derives-span-Clone-tuple-struct.rs | 2 +- .../derives-span-Debug-enum-struct-variant.rs | 2 +- .../compile-fail/derives-span-Debug-enum.rs | 2 +- .../compile-fail/derives-span-Debug-struct.rs | 2 +- .../derives-span-Debug-tuple-struct.rs | 2 +- .../derives-span-Default-struct.rs | 4 +- .../derives-span-Default-tuple-struct.rs | 2 +- .../derives-span-Eq-enum-struct-variant.rs | 2 +- src/test/compile-fail/derives-span-Eq-enum.rs | 2 +- .../compile-fail/derives-span-Eq-struct.rs | 2 +- .../derives-span-Eq-tuple-struct.rs | 2 +- .../derives-span-Hash-enum-struct-variant.rs | 2 +- .../compile-fail/derives-span-Hash-enum.rs | 2 +- .../compile-fail/derives-span-Hash-struct.rs | 2 +- .../derives-span-Hash-tuple-struct.rs | 2 +- .../derives-span-Ord-enum-struct-variant.rs | 2 +- .../compile-fail/derives-span-Ord-enum.rs | 2 +- .../compile-fail/derives-span-Ord-struct.rs | 2 +- .../derives-span-Ord-tuple-struct.rs | 2 +- ...ives-span-PartialEq-enum-struct-variant.rs | 2 +- .../derives-span-PartialEq-enum.rs | 2 +- .../derives-span-PartialEq-struct.rs | 2 +- .../derives-span-PartialEq-tuple-struct.rs | 2 +- ...ves-span-PartialOrd-enum-struct-variant.rs | 8 +- .../derives-span-PartialOrd-enum.rs | 8 +- .../derives-span-PartialOrd-struct.rs | 8 +- .../derives-span-PartialOrd-tuple-struct.rs | 8 +- src/test/compile-fail/dupe-symbols-2.rs | 4 +- .../compile-fail/dyn-trait-compatibility.rs | 29 + .../extern-types-distinct-types.rs | 22 + .../extern-types-not-sync-send.rs | 28 + src/test/compile-fail/extern-types-unsized.rs | 43 + .../feature-gate-arbitrary-self-types.rs | 27 + .../feature-gate-crate_visibility_modifier.rs | 18 + .../compile-fail/feature-gate-dyn-trait.rs | 14 + .../compile-fail/feature-gate-extern_types.rs | 15 + .../feature-gate-match_default_bindings.rs | 3 +- .../feature-gate-non_exhaustive.rs | 20 + .../feature-gate-optin-builtin-traits.rs | 6 +- .../feature-gate-wasm_import_memory.rs | 14 + .../issue-43106-gating-of-builtin-attrs.rs | 2 +- .../issue-43106-gating-of-rustc_deprecated.rs | 1 - .../issue-43106-gating-of-stable.rs | 1 - .../issue-43106-gating-of-unstable.rs | 1 - .../float-int-invalid-const-cast.rs | 61 + src/test/compile-fail/hygiene/impl_items.rs | 2 +- src/test/compile-fail/ifmt-bad-arg.rs | 54 +- .../compile-fail/impl-trait/disallowed-2.rs | 18 - .../compile-fail/impl-trait/disallowed.rs | 61 - .../impl-trait/feature-gate-universal.rs | 16 + .../compile-fail/impl-trait/feature-gate.rs | 2 +- .../impl-trait/impl-generic-mismatch-ab.rs | 23 + .../impl-trait/impl-generic-mismatch.rs | 32 + .../compile-fail/impl-trait/where-allowed.rs | 234 + .../incr_comp_with_macro_export.rs | 23 - src/test/compile-fail/index-help.rs | 15 + src/test/compile-fail/invalid-inline.rs | 6 +- src/test/compile-fail/issue-12997-2.rs | 2 +- src/test/compile-fail/issue-13058.rs | 2 +- src/test/compile-fail/issue-14285.rs | 2 +- src/test/compile-fail/issue-15034.rs | 2 +- src/test/compile-fail/issue-16338.rs | 3 +- .../issue-17718-const-bad-values.rs | 2 - src/test/compile-fail/issue-17728.rs | 2 +- src/test/compile-fail/issue-17740.rs | 8 +- src/test/compile-fail/issue-18937.rs | 1 - src/test/compile-fail/issue-1920-1.rs | 8 +- src/test/compile-fail/issue-1920-2.rs | 8 +- src/test/compile-fail/issue-1920-3.rs | 10 +- src/test/compile-fail/issue-20261.rs | 3 +- src/test/compile-fail/issue-20831-debruijn.rs | 1 - src/test/compile-fail/issue-22560.rs | 2 +- src/test/compile-fail/issue-22638.rs | 3 +- src/test/compile-fail/issue-23080-2.rs | 1 + src/test/compile-fail/issue-23080.rs | 1 + src/test/compile-fail/issue-25579.rs | 15 +- src/test/compile-fail/issue-26194.rs | 2 +- src/test/compile-fail/issue-27842.rs | 2 +- src/test/compile-fail/issue-3154.rs | 2 +- src/test/compile-fail/issue-32963.rs | 2 +- src/test/compile-fail/issue-33504.rs | 2 +- src/test/compile-fail/issue-36082.rs | 23 +- src/test/compile-fail/issue-40288-2.rs | 4 +- src/test/compile-fail/issue-41255.rs | 4 - src/test/compile-fail/issue-41394.rs | 2 +- src/test/compile-fail/issue-44239.rs | 19 + .../keyword-false-as-identifier.rs | 2 +- .../keyword-self-as-identifier.rs | 2 +- .../keyword-super-as-identifier.rs | 2 +- .../keyword-true-as-identifier.rs | 2 +- src/test/compile-fail/lint-output-format-2.rs | 4 +- .../compile-fail/lint-stability-deprecated.rs | 218 +- .../compile-fail/lint-unexported-no-mangle.rs | 5 +- .../liveness-assign-imm-local-in-loop.rs | 4 +- .../liveness-assign-imm-local-in-op-eq.rs | 4 +- .../liveness-assign-imm-local-with-init.rs | 4 +- .../macro-expanded-include/test.rs | 2 +- src/test/compile-fail/match-range-fail.rs | 2 + src/test/compile-fail/match-vec-mismatch.rs | 2 +- .../mut-pattern-internal-mutability.rs | 6 +- src/test/compile-fail/name-clash-nullary.rs | 18 - .../nll/loan_ends_mid_block_pair.rs | 50 + .../nll/loan_ends_mid_block_vec.rs | 49 + .../nll/region-ends-after-if-condition.rs | 46 + src/test/compile-fail/nll/return_from_loop.rs | 49 + .../compile-fail/no-patterns-in-args-2.rs | 1 - .../compile-fail/no-patterns-in-args-macro.rs | 36 + src/test/compile-fail/no-patterns-in-args.rs | 4 - src/test/compile-fail/non-interger-atomic.rs | 41 +- .../object-lifetime-default-from-box-error.rs | 2 +- .../compile-fail/outlives-associated-types.rs | 23 + src/test/compile-fail/pat-slice-old-style.rs | 5 +- .../compile-fail/patkind-litrange-no-expr.rs | 3 +- .../pattern-binding-disambiguation.rs | 67 + src/test/compile-fail/phantom-oibit.rs | 1 + src/test/compile-fail/privacy-sanity.rs | 3 + .../restricted/auxiliary/pub_restricted.rs | 7 +- .../privacy/restricted/private-in-public.rs | 3 + .../compile-fail/privacy/restricted/test.rs | 2 + .../restricted/tuple-struct-fields/test.rs | 2 +- .../restricted/tuple-struct-fields/test2.rs | 1 - .../restricted/tuple-struct-fields/test3.rs | 1 - .../compile-fail/private-inferred-type-3.rs | 2 +- .../compile-fail/private-inferred-type.rs | 2 +- src/test/compile-fail/range_traits-1.rs | 61 +- ...ion-lifetime-bounds-on-fns-where-clause.rs | 2 +- ...ple-lifetime-bounds-on-fns-where-clause.rs | 2 +- .../regions-bound-missing-bound-in-impl.rs | 1 - ...nded-method-type-parameters-cross-crate.rs | 2 +- ...nded-method-type-parameters-trait-bound.rs | 2 +- .../regions-close-object-into-object-5.rs | 1 - .../compile-fail/regions-creating-enums3.rs | 2 +- .../regions-fn-subtyping-return-static.rs | 4 +- .../regions-free-region-ordering-callee.rs | 4 +- .../compile-fail/regions-glb-free-free.rs | 2 +- .../regions-infer-at-fn-not-param.rs | 2 +- .../regions-lifetime-bounds-on-fns.rs | 2 +- ...s-reborrow-from-shorter-mut-ref-mut-ref.rs | 2 +- .../regions-reborrow-from-shorter-mut-ref.rs | 2 +- .../auxiliary/enums.rs | 19 + .../auxiliary/structs.rs | 37 + .../auxiliary/variants.rs | 18 + .../rfc-2008-non-exhaustive/enum.rs | 25 + .../rfc-2008-non-exhaustive/structs.rs | 47 + .../rfc-2008-non-exhaustive/variants.rs | 36 + .../variants_create.rs | 27 + .../compile-fail/self-vs-path-ambiguity.rs | 1 - .../simd-intrinsic-generic-arithmetic.rs | 11 +- ...zation-no-default-trait-implementations.rs | 3 +- .../specialization/specialization-polarity.rs | 2 + .../syntaxt-default-trait-impls.rs | 7 +- .../compile-fail/task-rng-isnt-sendable.rs | 21 - .../trait-bounds-not-on-struct.rs | 3 + ...its-inductive-overflow-supertrait-oibit.rs | 1 + .../typeck-auto-trait-no-supertraits-2.rs | 1 + .../typeck-auto-trait-no-supertraits.rs | 1 + .../typeck-auto-trait-no-typeparams.rs | 1 + ...-default-trait-impl-constituent-types-2.rs | 1 + ...ck-default-trait-impl-constituent-types.rs | 1 + .../typeck-default-trait-impl-negation.rs | 2 + ...typeck-default-trait-impl-outside-crate.rs | 1 + .../typeck-default-trait-impl-precedence.rs | 1 + .../compile-fail/ufcs-explicit-self-bad.rs | 17 +- .../compile-fail/variance-trait-matching.rs | 2 +- src/test/debuginfo/pretty-std.rs | 4 + .../struct_point.rs | 37 +- .../change_add_field/struct_point.rs | 69 +- .../change_private_fn/struct_point.rs | 45 +- .../change_private_fn_cc/auxiliary/point.rs | 4 +- .../change_private_fn_cc/struct_point.rs | 37 +- .../struct_point.rs | 47 +- .../auxiliary/point.rs | 4 +- .../struct_point.rs | 37 +- .../struct_point.rs | 45 +- .../struct_point.rs | 45 +- .../incremental/hashes/call_expressions.rs | 52 +- src/test/incremental/hashes/consts.rs | 91 +- .../incremental/hashes/enum_constructors.rs | 179 +- src/test/incremental/hashes/enum_defs.rs | 162 +- .../incremental/hashes/exported_vs_not.rs | 18 +- src/test/incremental/hashes/extern_mods.rs | 56 +- src/test/incremental/hashes/if_expressions.rs | 56 +- .../hashes/indexing_expressions.rs | 2 +- src/test/incremental/hashes/inherent_impls.rs | 247 +- .../incremental/hashes/let_expressions.rs | 160 + .../incremental/hashes/match_expressions.rs | 107 +- src/test/incremental/hashes/panic_exprs.rs | 89 +- .../hashes/panic_exprs_no_overflow_checks.rs | 78 +- src/test/incremental/hashes/statics.rs | 106 +- .../incremental/hashes/struct_constructors.rs | 104 +- src/test/incremental/hashes/trait_defs.rs | 4 +- src/test/incremental/hashes/type_defs.rs | 64 +- .../hashes/unary_and_binary_exprs.rs | 168 +- src/test/incremental/ich_nested_items.rs | 36 +- src/test/incremental/issue-38222.rs | 7 +- src/test/incremental/krate-inherent.rs | 20 +- src/test/incremental/krate-inlined.rs | 4 +- src/test/incremental/macro_export.rs | 22 + .../remove_crate/auxiliary/extern_crate.rs | 13 + src/test/incremental/remove_crate/main.rs | 34 + .../incremental/remove_source_file/main.rs | 15 +- .../incremental/spans_in_type_debuginfo.rs | 1 - .../incremental/spans_significant_w_panic.rs | 30 + src/test/incremental/string_constant.rs | 27 +- src/test/incremental/warnings-reemitted.rs | 19 + src/test/mir-opt/README.md | 33 +- src/test/mir-opt/basic_assignment.rs | 4 +- src/test/mir-opt/box_expr.rs | 9 +- src/test/mir-opt/copy_propagation.rs | 26 +- src/test/mir-opt/copy_propagation_arg.rs | 116 + src/test/mir-opt/deaggregator_test.rs | 25 +- src/test/mir-opt/deaggregator_test_enum.rs | 18 +- src/test/mir-opt/deaggregator_test_enum_2.rs | 39 +- .../mir-opt/deaggregator_test_multiple.rs | 49 +- src/test/mir-opt/end_region_1.rs | 8 +- src/test/mir-opt/end_region_2.rs | 10 +- src/test/mir-opt/end_region_3.rs | 10 +- src/test/mir-opt/end_region_4.rs | 9 +- src/test/mir-opt/end_region_5.rs | 11 +- src/test/mir-opt/end_region_6.rs | 13 +- src/test/mir-opt/end_region_7.rs | 14 +- src/test/mir-opt/end_region_8.rs | 11 +- src/test/mir-opt/end_region_9.rs | 11 +- src/test/mir-opt/end_region_cyclic.rs | 5 +- .../end_region_destruction_extents_1.rs | 14 +- src/test/mir-opt/inline-closure.rs | 42 + src/test/mir-opt/issue-38669.rs | 4 +- src/test/mir-opt/issue-41110.rs | 20 +- src/test/mir-opt/issue-43457.rs | 2 +- src/test/mir-opt/match_false_edges.rs | 246 + .../mir-opt/nll/liveness-call-subtlety.rs | 45 + .../mir-opt/nll/liveness-drop-intra-block.rs | 41 + src/test/mir-opt/nll/liveness-interblock.rs | 50 + src/test/mir-opt/nll/named-lifetimes-basic.rs | 34 + src/test/mir-opt/nll/reborrow-basic.rs | 39 + src/test/mir-opt/nll/region-liveness-basic.rs | 56 + .../nll/region-liveness-drop-may-dangle.rs | 48 + .../nll/region-liveness-drop-no-may-dangle.rs | 50 + .../nll/region-liveness-two-disjoint-uses.rs | 49 + .../mir-opt/nll/region-subtyping-basic.rs | 49 + src/test/mir-opt/simplify_if.rs | 8 +- .../mir-opt/storage_live_dead_in_statics.rs | 204 +- src/test/mir-opt/storage_ranges.rs | 5 +- src/test/mir-opt/validate_1.rs | 36 +- src/test/mir-opt/validate_2.rs | 12 +- src/test/mir-opt/validate_3.rs | 19 +- src/test/mir-opt/validate_4.rs | 50 +- src/test/mir-opt/validate_5.rs | 37 +- src/test/parse-fail/issue-20711-2.rs | 2 +- src/test/parse-fail/issue-20711.rs | 2 +- src/test/parse-fail/issue-33413.rs | 1 - .../parse-fail/range_inclusive_dotdotdot.rs | 38 + .../parse-fail/removed-syntax-static-fn.rs | 2 +- .../require-parens-for-chained-comparison.rs | 3 +- .../parse-fail/trait-object-bad-parens.rs | 2 + src/test/pretty/auto-trait.rs | 19 + src/test/pretty/cast-lt.pp | 24 + src/test/pretty/cast-lt.rs | 22 + src/test/pretty/default-trait-impl.rs | 19 - src/test/pretty/issue-4264.pp | 50 +- src/test/run-fail/binop-fail-3.rs | 2 + src/test/run-fail/mir_drop_panics.rs | 3 +- src/test/run-fail/mir_dynamic_drops_1.rs | 5 +- src/test/run-fail/mir_dynamic_drops_2.rs | 5 +- src/test/run-fail/mir_dynamic_drops_3.rs | 5 +- .../mir_trans_calls_converging_drops.rs | 6 +- .../mir_trans_calls_converging_drops_2.rs | 6 +- .../mir_trans_calls_diverging_drops.rs | 4 +- src/test/run-fail/panic-set-handler.rs | 3 +- src/test/run-fail/panic-set-unset-handler.rs | 3 +- .../run-make/archive-duplicate-names/Makefile | 2 +- .../run-make/cdylib-fewer-symbols/Makefile | 17 + src/test/run-make/cdylib-fewer-symbols/foo.rs | 16 + .../compiler-rt-works-on-mingw/Makefile | 4 +- .../extern-fn-with-extern-types/Makefile | 5 + .../extern-fn-with-extern-types/ctest.c | 17 + .../extern-fn-with-extern-types/test.rs | 27 + .../extra-filename-with-temp-outputs/Makefile | 2 +- .../run-make/inline-always-many-cgu/Makefile | 8 + .../run-make/inline-always-many-cgu/foo.rs | 25 + .../intrinsic-unreachable/exit-ret.rs | 7 +- .../intrinsic-unreachable/exit-unreachable.rs | 7 +- src/test/run-make/invalid-library/Makefile | 2 +- src/test/run-make/issue-19371/foo.rs | 7 +- src/test/run-make/issue-22131/Makefile | 2 +- src/test/run-make/issue-46239/Makefile | 5 + src/test/run-make/issue-46239/main.rs | 18 + src/test/run-make/issue-7349/foo.rs | 2 + src/test/run-make/msvc-opt-minsize/Makefile | 5 + src/test/run-make/msvc-opt-minsize/foo.rs | 29 + .../run-make/rustdoc-output-path/Makefile | 2 +- src/test/run-make/sanitizer-memory/Makefile | 6 +- src/test/run-make/save-analysis/foo.rs | 5 + src/test/run-make/sepcomp-separate/foo.rs | 8 +- src/test/run-make/simd-ffi/simd.rs | 1 + .../run-make/staticlib-blank-lib/Makefile | 4 +- src/test/run-make/symbol-visibility/Makefile | 14 +- .../run-make/symbols-are-reasonable/lib.rs | 3 +- .../run-make/symbols-include-type-name/lib.rs | 5 + src/test/run-make/target-specs/Makefile | 2 +- src/test/run-make/target-specs/foo.rs | 1 + .../my-x86_64-unknown-linux-gnu-platform.json | 12 + .../x86_64-unknown-linux-gnu.json | 12 - src/test/run-make/tools.mk | 10 +- .../auxiliary/lint_for_crate.rs | 1 + .../binary-heap-panic-safe.rs | 6 +- src/test/run-pass-fulldeps/env.rs | 99 + src/test/run-pass-fulldeps/flt2dec.rs | 163 + src/test/run-pass-fulldeps/issue-35829.rs | 4 +- .../auxiliary/issue-40001-plugin.rs | 1 + src/test/run-pass-fulldeps/sort-unstable.rs | 83 + .../vector-sort-panic-safe.rs | 6 +- src/test/run-pass/allocator/custom.rs | 4 +- src/test/run-pass/allocator/xcrate-use.rs | 1 - src/test/run-pass/allocator/xcrate-use2.rs | 1 - .../run-pass/anon-extern-mod-cross-crate-2.rs | 1 + src/test/run-pass/anon-extern-mod.rs | 1 + .../run-pass/arbitrary_self_types_silly.rs | 29 + .../run-pass/arbitrary_self_types_struct.rs | 33 + .../run-pass/arbitrary_self_types_trait.rs | 28 + .../arbitrary_self_types_unsized_struct.rs | 25 + src/test/run-pass/asm-concat-src.rs | 2 +- .../assert-eq-trailing-comma.rs} | 0 .../assert-ne-trailing-comma.rs} | 0 ...ect-from-type-param-via-bound-in-where.rs} | 0 src/test/run-pass/auto-is-contextual.rs | 24 + src/test/run-pass/auto-traits.rs | 39 + src/test/run-pass/auxiliary/issue-3012-1.rs | 7 +- src/test/run-pass/backtrace-debuginfo.rs | 4 +- .../borrowck-assignment-to-static-mut.rs | 23 + .../borrowck-unsafe-static-mutable-borrows.rs | 31 + src/test/run-pass/builtin-clone-unwind.rs | 2 + src/test/run-pass/c-stack-as-value.rs | 1 + src/test/run-pass/c-stack-returning-int64.rs | 2 +- src/test/run-pass/cabi-int-widening.rs | 2 + src/test/run-pass/catch-unwind-bang.rs | 2 + src/test/run-pass/cfg-family.rs | 1 + src/test/run-pass/cfg-target-family.rs | 2 + .../check-static-recursion-foreign.rs | 1 + .../run-pass/closure-expected-type/README.md | 8 + .../expect-infer-supply-two-infers.rs | 26 + .../closure-expected-type/issue-38714.rs | 26 + .../supply-just-return-type.rs | 35 + .../closure-expected-type/supply-nothing.rs | 20 + src/test/run-pass/command-before-exec.rs | 2 +- src/test/run-pass/command-exec.rs | 3 +- src/test/run-pass/const-cast.rs | 11 +- src/test/run-pass/core-run-destroy.rs | 2 +- src/test/run-pass/ctfe/assoc-const.rs | 28 + src/test/run-pass/dead-code-alias-in-pat.rs | 18 + src/test/run-pass/duplicated-external-mods.rs | 1 + src/test/run-pass/dyn-trait.rs | 24 + src/test/run-pass/dynamic-drop.rs | 38 +- src/test/run-pass/enum-non-c-like-repr-int.rs | 173 + .../run-pass/env-args-reverse-iterator.rs | 2 +- src/test/run-pass/env-funky-keys.rs | 2 +- src/test/run-pass/env-home-dir.rs | 2 +- src/test/run-pass/env-vars.rs | 1 + src/test/run-pass/env.rs | 98 - src/test/run-pass/extern-call-deep.rs | 2 + src/test/run-pass/extern-call-indirect.rs | 2 + src/test/run-pass/extern-crosscrate.rs | 3 +- src/test/run-pass/extern-pass-TwoU16s.rs | 2 + src/test/run-pass/extern-pass-TwoU32s.rs | 2 + src/test/run-pass/extern-pass-TwoU64s.rs | 2 + src/test/run-pass/extern-pass-TwoU8s.rs | 2 + src/test/run-pass/extern-pass-char.rs | 2 + src/test/run-pass/extern-pass-double.rs | 1 + src/test/run-pass/extern-pass-empty.rs | 2 +- src/test/run-pass/extern-pass-u32.rs | 2 + src/test/run-pass/extern-pass-u64.rs | 2 + src/test/run-pass/extern-return-TwoU16s.rs | 1 + src/test/run-pass/extern-return-TwoU32s.rs | 1 + src/test/run-pass/extern-return-TwoU64s.rs | 1 + src/test/run-pass/extern-return-TwoU8s.rs | 1 + .../run-pass/extern-types-inherent-impl.rs | 27 + .../run-pass/extern-types-manual-sync-send.rs | 28 + .../run-pass/extern-types-pointer-cast.rs | 40 + src/test/run-pass/extern-types-size_of_val.rs | 26 + .../run-pass/extern-types-thin-pointer.rs | 51 + src/test/run-pass/extern-types-trait-impl.rs | 35 + src/test/run-pass/extern_fat_drop.rs | 3 +- src/test/run-pass/fds-are-cloexec.rs | 2 +- src/test/run-pass/fmt-pointer-trait.rs | 4 +- src/test/run-pass/foreign-dupe.rs | 1 + src/test/run-pass/foreign-fn-linkname.rs | 2 +- src/test/run-pass/foreign-fn-with-byval.rs | 1 + src/test/run-pass/foreign-mod-unused-const.rs | 9 +- src/test/run-pass/foreign-no-abi.rs | 1 + src/test/run-pass/foreign2.rs | 2 +- src/test/run-pass/format-no-std.rs | 2 +- src/test/run-pass/generator/panic-drops.rs | 2 + src/test/run-pass/generator/panic-safe.rs | 2 + .../run-pass/generator/resume-after-return.rs | 2 + src/test/run-pass/generator/smoke.rs | 2 +- src/test/run-pass/i128.rs | 2 +- .../run-pass/impl-trait/auxiliary/xcrate.rs | 7 +- .../run-pass/impl-trait/example-calendar.rs | 31 +- .../impl-trait/universal_hrtb_anon.rs | 20 + .../impl-trait/universal_hrtb_named.rs | 20 + .../universal_in_adt_in_parameters.rs | 31 + .../universal_in_impl_trait_in_parameters.rs | 39 + .../universal_in_trait_defn_parameters.rs | 28 + .../impl-trait/universal_multiple_bounds.rs | 23 + src/test/run-pass/impl-trait/xcrate.rs | 3 +- .../implied-bounds-closure-arg-outlives.rs | 44 + src/test/run-pass/intrinsic-alignment.rs | 1 + src/test/run-pass/invoke-external-foreign.rs | 1 + src/test/run-pass/issue-10626.rs | 2 +- src/test/run-pass/issue-1251.rs | 1 + src/test/run-pass/issue-12699.rs | 2 + src/test/run-pass/issue-13304.rs | 3 +- src/test/run-pass/issue-13507-2.rs | 3 - src/test/run-pass/issue-14456.rs | 2 +- src/test/run-pass/issue-14875.rs | 3 +- src/test/run-pass/issue-14940.rs | 2 +- src/test/run-pass/issue-16272.rs | 2 +- src/test/run-pass/issue-20091.rs | 3 +- src/test/run-pass/issue-2190-1.rs | 2 +- src/test/run-pass/issue-2214.rs | 1 + src/test/run-pass/issue-24313.rs | 2 +- src/test/run-pass/issue-25185.rs | 1 + src/test/run-pass/issue-28676.rs | 3 +- src/test/run-pass/issue-28950.rs | 2 +- src/test/run-pass/issue-29485.rs | 2 +- src/test/run-pass/issue-29516.rs | 1 + src/test/run-pass/issue-29663.rs | 2 - src/test/run-pass/issue-29948.rs | 2 + src/test/run-pass/issue-3012-2.rs | 8 +- src/test/run-pass/issue-30490.rs | 2 +- src/test/run-pass/issue-32008.rs | 35 + src/test/run-pass/issue-33770.rs | 2 +- src/test/run-pass/issue-35600.rs | 24 + src/test/run-pass/issue-36023.rs | 2 - src/test/run-pass/issue-3656.rs | 1 + src/test/run-pass/issue-40003.rs | 186 + src/test/run-pass/issue-43853.rs | 2 + src/test/run-pass/issue-44247.rs | 27 + src/test/run-pass/issue-44402.rs | 36 + src/test/run-pass/issue-44851.rs | 24 + src/test/run-pass/issue-45124.rs | 24 + src/test/run-pass/issue-45425.rs | 20 + src/test/run-pass/issue-46519.rs | 37 + src/test/run-pass/issue-4735.rs | 15 +- src/test/run-pass/issue-5791.rs | 8 +- src/test/run-pass/item-attributes.rs | 7 +- src/test/run-pass/iter-step-overflow-debug.rs | 1 + src/test/run-pass/iter-sum-overflow-debug.rs | 1 + .../iter-sum-overflow-overflow-checks.rs | 1 + src/test/run-pass/lib-defaults.rs | 2 + src/test/run-pass/linkage1.rs | 2 +- .../lub-glb-with-unbound-infer-var.rs | 24 + src/test/run-pass/macro-pub-matcher.rs | 14 +- .../run-pass/mir-inlining/ice-issue-45493.rs | 26 + .../run-pass/mir-inlining/ice-issue-45885.rs | 38 + src/test/run-pass/mir_calls_to_shims.rs | 2 + src/test/run-pass/mir_drop_order.rs | 2 + src/test/run-pass/mir_misc_casts.rs | 56 +- src/test/run-pass/mir_trans_calls.rs | 17 +- src/test/run-pass/mir_trans_calls_variadic.rs | 2 + src/test/run-pass/multi-panic.rs | 2 +- src/test/run-pass/newtype-struct-with-dtor.rs | 10 +- .../next-power-of-two-overflow-debug.rs | 36 + .../next-power-of-two-overflow-ndebug.rs | 24 + src/test/run-pass/no-stdio.rs | 2 +- src/test/run-pass/out-of-stack.rs | 2 +- src/test/run-pass/packed-struct-layout.rs | 2 - .../run-pass/packed-tuple-struct-layout.rs | 2 - .../abort-link-to-unwinding-crates.rs | 2 +- src/test/run-pass/panic-runtime/abort.rs | 2 +- src/test/run-pass/panic-runtime/lto-abort.rs | 2 +- src/test/run-pass/panic-runtime/lto-unwind.rs | 2 +- src/test/run-pass/paths-containing-nul.rs | 2 + src/test/run-pass/process-envs.rs | 2 +- src/test/run-pass/process-exit.rs | 2 +- src/test/run-pass/process-remove-from-env.rs | 2 +- .../process-spawn-with-unicode-params.rs | 2 +- .../run-pass/process-status-inherits-stdin.rs | 3 +- src/test/run-pass/pub-extern-privacy.rs | 2 + .../run-pass/reachable-unnameable-items.rs | 1 + src/test/run-pass/rec-align-u64.rs | 2 + src/test/run-pass/regions-mock-trans.rs | 12 +- ...ions-on-closures-to-inference-variables.rs | 2 +- src/test/run-pass/rfc-1014.rs | 3 + .../auxiliary/enums.rs | 19 + .../auxiliary/structs.rs | 23 + .../auxiliary/variants.rs | 18 + .../run-pass/rfc-2008-non-exhaustive/enums.rs | 33 + .../enums_same_crate.rs | 28 + .../rfc-2008-non-exhaustive/structs.rs | 27 + .../structs_same_crate.rs | 40 + .../rfc-2008-non-exhaustive/variants.rs | 31 + .../variants_same_crate.rs | 34 + src/test/run-pass/rfc1717/library-override.rs | 1 + src/test/run-pass/rfc1857-drop-order.rs | 2 + src/test/run-pass/running-with-no-runtime.rs | 2 +- src/test/run-pass/saturating-float-casts.rs | 144 + .../signal-alternate-stack-cleanup.rs | 1 + src/test/run-pass/signal-exit-status.rs | 2 +- .../run-pass/sigpipe-should-be-ignored.rs | 2 +- .../simd-intrinsic-generic-arithmetic.rs | 14 + .../run-pass/simd-intrinsic-generic-cast.rs | 3 +- src/test/run-pass/smallest-hello-world.rs | 41 - ...-cross-crate.rs => allowed-cross-crate.rs} | 0 ...ecialization-assoc-fns.rs => assoc-fns.rs} | 0 ...lization_cross_crate.rs => cross_crate.rs} | 0 ...te_defaults.rs => cross_crate_defaults.rs} | 0 ...tion-basics-unsafe.rs => basics-unsafe.rs} | 0 .../{specialization-basics.rs => basics.rs} | 0 .../defaultimpl/cross-crate-defaults.rs | 49 + .../defaultimpl/cross-crate-no-gate.rs | 29 + .../specialization/defaultimpl/cross-crate.rs | 58 + ...-default-methods.rs => default-methods.rs} | 0 ...zation-out-of-order.rs => out-of-order.rs} | 0 ...ap-projection.rs => overlap-projection.rs} | 0 ...rojection-alias.rs => projection-alias.rs} | 0 ...ialization-projection.rs => projection.rs} | 0 .../specialization-cross-crate-defaults.rs | 49 - .../specialization-cross-crate-no-gate.rs | 29 - .../defaultimpl/specialization-cross-crate.rs | 58 - src/test/run-pass/stack-probes-lto.rs | 2 +- src/test/run-pass/stack-probes.rs | 2 +- src/test/run-pass/static-method-xcrate.rs | 1 - src/test/run-pass/static-mut-foreign.rs | 1 + src/test/run-pass/stdio-is-blocking.rs | 2 +- src/test/run-pass/struct-return.rs | 3 +- src/test/run-pass/supported-cast.rs | 28 +- src/test/run-pass/sync-send-in-std.rs | 2 + src/test/run-pass/test-allow-fail-attr.rs | 1 + .../run-pass/test-should-fail-good-message.rs | 1 + .../run-pass/thin-lto-global-allocator.rs | 19 + src/test/run-pass/thinlto/auxiliary/dylib.rs | 16 + .../thinlto/auxiliary/msvc-imp-present.rs | 21 + .../auxiliary/thin-lto-inlines-aux.rs | 0 src/test/run-pass/thinlto/dylib-works.rs | 18 + src/test/run-pass/thinlto/msvc-imp-present.rs | 31 + .../{ => thinlto}/thin-lto-inlines.rs | 2 +- .../{ => thinlto}/thin-lto-inlines2.rs | 2 +- src/test/run-pass/try-wait.rs | 2 +- src/test/run-pass/u128-as-f32.rs | 58 + src/test/run-pass/u128.rs | 2 +- ...es-infer-arg-types-from-expected-bound.rs} | 0 ...er-arg-types-from-expected-object-type.rs} | 0 ...types-w-bound-regs-from-expected-bound.rs} | 0 ...osures-move-from-projection-issue-30046.rs | 35 + src/test/run-pass/union/union-c-interop.rs | 2 + src/test/run-pass/variadic-ffi.rs | 2 + src/test/run-pass/vec-macro-no-std.rs | 2 +- .../run-pass/wait-forked-but-failed-child.rs | 2 +- src/test/run-pass/x86stdcall.rs | 2 + src/test/rustdoc/auxiliary/issue-19190-3.rs | 4 +- .../rustdoc/auxiliary/rustdoc-default-impl.rs | 1 + .../rustdoc-impl-parts-crosscrate.rs | 1 + src/test/rustdoc/codeblock-title.rs | 4 +- src/test/rustdoc/crate-version.rs | 13 + src/test/rustdoc/empty-mod-private.rs | 2 +- src/test/rustdoc/foreigntype.rs | 28 + src/test/rustdoc/impl-parts.rs | 1 + src/test/rustdoc/issue-15347.rs | 2 +- src/test/rustdoc/issue-19190-2.rs | 8 +- src/test/rustdoc/issue-19190-3.rs | 4 +- src/test/rustdoc/issue-43869.rs | 18 +- src/test/rustdoc/issue-45584.rs | 25 + src/test/rustdoc/method-list.rs | 30 + src/test/rustdoc/playground-arg.rs | 2 +- src/test/rustdoc/playground.rs | 6 +- src/test/rustdoc/pub-method.rs | 2 +- src/test/rustdoc/sidebar-items.rs | 59 + .../auxiliary/lint_group_plugin_test.rs | 1 + .../ui-fulldeps/auxiliary/lint_plugin_test.rs | 1 + .../proc-macro/auxiliary/three-equals.rs | 4 +- .../ui/anonymous-higher-ranked-lifetime.rs | 40 + .../anonymous-higher-ranked-lifetime.stderr | 112 + .../xcrate_issue_46112_rexport_core.rs | 13 + .../ui/borrowck/borrowck-closures-two-mut.rs | 62 + .../borrowck/borrowck-closures-two-mut.stderr | 146 + src/test/ui/borrowck/borrowck-reinit.rs | 19 + src/test/ui/borrowck/borrowck-reinit.stderr | 20 + src/test/ui/codemap_tests/unicode.stderr | 2 +- src/test/ui/codemap_tests/unicode_2.rs | 17 + src/test/ui/codemap_tests/unicode_2.stderr | 24 + src/test/ui/codemap_tests/unicode_3.rs | 14 + src/test/ui/codemap_tests/unicode_3.stderr | 10 + .../proj-outlives-region.stderr | 6 +- .../ui/compare-method/region-unrelated.stderr | 6 +- src/test/ui/const-eval/issue-43197.stderr | 4 +- src/test/ui/const-pattern-irrefutable.rs | 26 + src/test/ui/const-pattern-irrefutable.stderr | 20 + .../cross-crate-macro-backtrace/main.stderr | 2 +- src/test/ui/deref-suggestion.stderr | 4 +- src/test/ui/did_you_mean/issue-40396.stderr | 4 + .../e0119/auxiliary/complex_impl_support.rs | 32 + src/test/ui/e0119/auxiliary/issue_23563_a.rs | 35 + src/test/ui/e0119/complex-impl.rs | 21 + src/test/ui/e0119/complex-impl.stderr | 18 + src/test/ui/e0119/conflict-with-std.rs | 38 + src/test/ui/e0119/conflict-with-std.stderr | 44 + src/test/ui/e0119/issue-23563.rs | 39 + src/test/ui/e0119/issue-23563.stderr | 14 + src/test/ui/e0119/issue-27403.rs | 21 + src/test/ui/e0119/issue-27403.stderr | 16 + src/test/ui/e0119/issue-28981.rs | 17 + src/test/ui/e0119/issue-28981.stderr | 18 + src/test/ui/e0119/so-37347311.rs | 27 + src/test/ui/e0119/so-37347311.stderr | 15 + .../impl-trait/universal-mismatched-type.rs | 19 + .../universal-mismatched-type.stderr | 13 + .../impl-trait/universal-two-impl-traits.rs | 21 + .../universal-two-impl-traits.stderr | 11 + .../ui/impl-trait/universal_wrong_bounds.rs | 26 + .../impl-trait/universal_wrong_bounds.stderr | 28 + src/test/ui/issue-22644.rs | 2 + src/test/ui/issue-22644.stderr | 15 +- src/test/ui/issue-33941.rs | 15 + src/test/ui/issue-33941.stderr | 21 + src/test/ui/issue-35241.rs | 15 + src/test/ui/issue-35241.stderr | 15 + src/test/ui/issue-35675.stderr | 2 - src/test/ui/issue-40782.rs | 15 + src/test/ui/issue-40782.stderr | 8 + src/test/ui/issue-42106.rs | 16 + src/test/ui/issue-42106.stderr | 12 + src/test/ui/issue-44078.stderr | 2 +- src/test/ui/issue-44406.rs | 19 + src/test/ui/issue-44406.stderr | 17 + src/test/ui/issue-45296.rs | 15 + src/test/ui/issue-45296.stderr | 10 + src/test/ui/issue-45730.rs | 19 + src/test/ui/issue-45730.stderr | 32 + src/test/ui/issue-46112.rs | 20 + src/test/ui/issue-46112.stderr | 14 + .../42701_one_named_and_one_anonymous.rs | 24 + .../42701_one_named_and_one_anonymous.stderr | 11 + ...one-existing-name-early-bound-in-struct.rs | 30 + ...existing-name-early-bound-in-struct.stderr | 11 + ...x2a-push-one-existing-name-early-bound.rs} | 0 ...-push-one-existing-name-early-bound.stderr | 11 + .../ex2c-push-inference-variable.stderr | 34 +- .../ex2d-push-inference-variable-2.stderr | 35 +- .../ex2e-push-inference-variable-3.stderr | 35 +- ...oth-anon-regions-earlybound-regions.stderr | 11 - src/test/ui/lint/suggestions.rs | 19 +- src/test/ui/lint/suggestions.stderr | 101 +- src/test/ui/lint/unreachable_pub-pub_crate.rs | 74 + .../ui/lint/unreachable_pub-pub_crate.stderr | 134 + src/test/ui/lint/unreachable_pub.rs | 69 + src/test/ui/lint/unreachable_pub.stderr | 134 + .../ui/lint/unused_parens_json_suggestion.rs | 6 +- .../lint/unused_parens_json_suggestion.stderr | 92 +- src/test/ui/lint/use_suggestion_json.rs | 21 + src/test/ui/lint/use_suggestion_json.stderr | 290 + src/test/ui/lub-glb/old-lub-glb-hr.rs | 36 + src/test/ui/lub-glb/old-lub-glb-hr.stderr | 22 + src/test/ui/lub-glb/old-lub-glb-object.rs | 38 + src/test/ui/lub-glb/old-lub-glb-object.stderr | 22 + .../ui/macros/assert_eq_trailing_comma.stderr | 8 - .../ui/macros/assert_ne_trailing_comma.stderr | 8 - .../ui/macros/macro-backtrace-println.stderr | 2 +- .../method-call-err-msg.rs | 0 src/test/ui/method-call-err-msg.stderr | 44 + .../ui/mismatched_types/closure-arg-count.rs | 4 + .../mismatched_types/closure-arg-count.stderr | 51 +- src/test/ui/nll/get_default.rs | 53 + src/test/ui/nll/get_default.stderr | 47 + src/test/ui/nll/named-region-basic.rs | 22 + src/test/ui/nll/named-region-basic.stderr | 29 + src/test/ui/path-lookahead.stderr | 7 +- .../regions-fn-subtyping-return-static.stderr | 4 +- .../ui/resolve/enums-are-namespaced-xc.stderr | 3 - src/test/ui/resolve/issue-16058.stderr | 1 - src/test/ui/resolve/issue-17518.stderr | 1 - src/test/ui/resolve/issue-21221-1.stderr | 3 - src/test/ui/resolve/issue-21221-2.stderr | 1 - src/test/ui/resolve/issue-21221-3.stderr | 1 - src/test/ui/resolve/issue-21221-4.stderr | 1 - src/test/ui/resolve/issue-3907.stderr | 1 - src/test/ui/resolve/name-clash-nullary.rs | 13 + src/test/ui/resolve/name-clash-nullary.stderr | 11 + .../ui/resolve/privacy-struct-ctor.stderr | 3 - .../ui/resolve/token-error-correct.stderr | 20 +- .../resolve/use_suggestion_placement.stderr | 17 +- .../suggestion.rs | 15 + .../suggestion.stderr | 10 + src/test/ui/short-error-format.rs | 19 + src/test/ui/short-error-format.stderr | 3 + src/test/ui/similar-tokens.rs | 19 + src/test/ui/similar-tokens.stderr | 8 + src/test/ui/span/E0535.rs | 4 +- src/test/ui/span/issue-27522.stderr | 8 +- src/test/ui/span/issue-35987.stderr | 1 - src/test/ui/span/issue-39018.stderr | 3 +- src/test/ui/span/macro-ty-params.stderr | 6 - src/test/ui/span/missing-unit-argument.rs | 8 + src/test/ui/span/missing-unit-argument.stderr | 54 +- src/test/ui/static-lifetime.stderr | 9 +- src/test/ui/struct-field-init-syntax.rs | 27 + src/test/ui/struct-field-init-syntax.stderr | 18 + src/test/ui/suggestions/auxiliary/m1.rs | 11 + src/test/ui/suggestions/auxiliary/m2.rs | 11 + .../closure-immutable-outer-variable.rs | 20 + .../closure-immutable-outer-variable.stderr | 10 + .../ui/suggestions/extern-crate-rename.rs | 18 + .../ui/suggestions/extern-crate-rename.stderr | 15 + .../issue-32354-suggest-import-rename.rs | 22 + .../issue-32354-suggest-import-rename.stderr | 16 + src/test/ui/suggestions/suggest-labels.rs | 26 + src/test/ui/suggestions/suggest-labels.stderr | 20 + .../type-ascription-instead-of-initializer.rs | 13 + ...e-ascription-instead-of-initializer.stderr | 17 + ...ures-infer-fn-once-move-from-projection.rs | 26 + ...-infer-fn-once-move-from-projection.stderr | 16 + src/tools/build-manifest/src/main.rs | 94 +- src/tools/cargotest/main.rs | 38 +- src/tools/clippy/.travis.yml | 1 + src/tools/clippy/CHANGELOG.md | 80 +- src/tools/clippy/CONTRIBUTING.md | 4 +- src/tools/clippy/Cargo.toml | 16 +- src/tools/clippy/PUBLISH.md | 2 +- src/tools/clippy/README.md | 13 +- src/tools/clippy/build.rs | 8 + src/tools/clippy/clippy_lints/Cargo.toml | 5 +- .../clippy/clippy_lints/src/approx_const.rs | 12 +- .../clippy/clippy_lints/src/arithmetic.rs | 15 +- .../clippy/clippy_lints/src/array_indexing.rs | 74 +- .../clippy/clippy_lints/src/assign_ops.rs | 54 +- src/tools/clippy/clippy_lints/src/attrs.rs | 41 +- src/tools/clippy/clippy_lints/src/bit_mask.rs | 258 +- .../clippy_lints/src/blacklisted_name.rs | 4 +- .../clippy_lints/src/block_in_if_condition.rs | 34 +- src/tools/clippy/clippy_lints/src/booleans.rs | 185 +- .../clippy/clippy_lints/src/bytecount.rs | 125 +- .../clippy/clippy_lints/src/collapsible_if.rs | 79 +- .../clippy_lints/src/const_static_lifetime.rs | 86 + src/tools/clippy/clippy_lints/src/consts.rs | 81 +- src/tools/clippy/clippy_lints/src/copies.rs | 42 +- .../clippy_lints/src/cyclomatic_complexity.rs | 30 +- .../clippy_lints/src/deprecated_lints.rs | 8 + src/tools/clippy/clippy_lints/src/derive.rs | 108 +- src/tools/clippy/clippy_lints/src/doc.rs | 53 +- .../clippy/clippy_lints/src/double_parens.rs | 35 +- .../clippy_lints/src/drop_forget_ref.rs | 95 +- .../clippy/clippy_lints/src/empty_enum.rs | 5 +- src/tools/clippy/clippy_lints/src/entry.rs | 97 +- .../clippy/clippy_lints/src/enum_clike.rs | 17 +- .../clippy/clippy_lints/src/enum_glob_use.rs | 2 +- .../clippy/clippy_lints/src/enum_variants.rs | 8 +- src/tools/clippy/clippy_lints/src/eq_op.rs | 29 +- .../clippy/clippy_lints/src/erasing_op.rs | 63 + src/tools/clippy/clippy_lints/src/escape.rs | 5 +- .../clippy/clippy_lints/src/eta_reduction.rs | 9 +- .../clippy_lints/src/eval_order_dependence.rs | 75 +- .../clippy/clippy_lints/src/explicit_write.rs | 102 + .../clippy_lints/src/fallible_impl_from.rs | 131 + src/tools/clippy/clippy_lints/src/format.rs | 117 +- .../clippy/clippy_lints/src/formatting.rs | 21 +- .../clippy/clippy_lints/src/functions.rs | 34 +- .../clippy_lints/src/identity_conversion.rs | 96 + .../clippy/clippy_lints/src/identity_op.rs | 32 +- .../src/if_let_redundant_pattern_matching.rs | 28 +- .../clippy/clippy_lints/src/if_not_else.rs | 5 +- .../clippy/clippy_lints/src/infinite_iter.rs | 76 +- .../clippy/clippy_lints/src/int_plus_one.rs | 167 + .../clippy/clippy_lints/src/invalid_ref.rs | 61 + .../clippy/clippy_lints/src/is_unit_expr.rs | 27 +- .../src/items_after_statements.rs | 9 +- .../clippy_lints/src/large_enum_variant.rs | 19 +- src/tools/clippy/clippy_lints/src/len_zero.rs | 90 +- .../clippy/clippy_lints/src/let_if_seq.rs | 187 +- src/tools/clippy/clippy_lints/src/lib.rs | 87 +- .../clippy/clippy_lints/src/lifetimes.rs | 114 +- .../src/literal_digit_grouping.rs | 146 +- src/tools/clippy/clippy_lints/src/loops.rs | 1213 +- .../clippy/clippy_lints/src/map_clone.rs | 90 +- src/tools/clippy/clippy_lints/src/matches.rs | 219 +- .../clippy/clippy_lints/src/mem_forget.rs | 20 +- src/tools/clippy/clippy_lints/src/methods.rs | 761 +- src/tools/clippy/clippy_lints/src/minmax.rs | 28 +- src/tools/clippy/clippy_lints/src/misc.rs | 205 +- .../clippy/clippy_lints/src/misc_early.rs | 205 +- .../clippy/clippy_lints/src/missing_doc.rs | 49 +- src/tools/clippy/clippy_lints/src/mut_mut.rs | 31 +- .../clippy/clippy_lints/src/mut_reference.rs | 43 +- .../clippy/clippy_lints/src/mutex_atomic.rs | 4 +- .../clippy/clippy_lints/src/needless_bool.rs | 38 +- .../clippy_lints/src/needless_borrow.rs | 68 +- .../clippy_lints/src/needless_borrowed_ref.rs | 27 +- .../clippy_lints/src/needless_continue.rs | 89 +- .../src/needless_pass_by_value.rs | 343 +- .../clippy/clippy_lints/src/neg_multiply.rs | 25 +- .../clippy_lints/src/new_without_default.rs | 85 +- .../clippy/clippy_lints/src/no_effect.rs | 88 +- .../clippy_lints/src/non_expressive_names.rs | 111 +- .../clippy/clippy_lints/src/ok_if_let.rs | 31 +- .../clippy/clippy_lints/src/open_options.rs | 19 +- .../src/overflow_check_conditional.rs | 82 +- src/tools/clippy/clippy_lints/src/panic.rs | 38 +- .../clippy_lints/src/partialeq_ne_impl.rs | 27 +- .../clippy/clippy_lints/src/precedence.rs | 6 +- src/tools/clippy/clippy_lints/src/print.rs | 197 +- src/tools/clippy/clippy_lints/src/ptr.rs | 141 +- src/tools/clippy/clippy_lints/src/ranges.rs | 152 +- .../clippy/clippy_lints/src/reference.rs | 2 +- src/tools/clippy/clippy_lints/src/regex.rs | 171 +- src/tools/clippy/clippy_lints/src/returns.rs | 57 +- .../clippy/clippy_lints/src/serde_api.rs | 2 +- src/tools/clippy/clippy_lints/src/shadow.rs | 124 +- .../clippy_lints/src/should_assert_eq.rs | 61 - src/tools/clippy/clippy_lints/src/strings.rs | 17 +- src/tools/clippy/clippy_lints/src/swap.rs | 200 +- .../clippy_lints/src/temporary_assignment.rs | 7 +- .../clippy/clippy_lints/src/transmute.rs | 319 +- src/tools/clippy/clippy_lints/src/types.rs | 869 +- src/tools/clippy/clippy_lints/src/unicode.rs | 2 +- .../src/unsafe_removed_from_name.rs | 12 +- .../clippy_lints/src/unused_io_amount.rs | 17 +- .../clippy/clippy_lints/src/unused_label.rs | 12 +- src/tools/clippy/clippy_lints/src/use_self.rs | 36 +- .../clippy/clippy_lints/src/utils/author.rs | 200 +- .../clippy/clippy_lints/src/utils/conf.rs | 40 +- .../clippy_lints/src/utils/constants.rs | 2 +- .../clippy/clippy_lints/src/utils/higher.rs | 181 +- .../clippy_lints/src/utils/hir_utils.rs | 70 +- .../clippy_lints/src/utils/inspector.rs | 42 +- .../clippy_lints/src/utils/internal_lints.rs | 40 +- .../clippy/clippy_lints/src/utils/mod.rs | 424 +- .../clippy/clippy_lints/src/utils/paths.rs | 170 +- .../clippy/clippy_lints/src/utils/ptr.rs | 83 + .../clippy/clippy_lints/src/utils/sugg.rs | 92 +- src/tools/clippy/clippy_lints/src/vec.rs | 57 +- .../clippy/clippy_lints/src/zero_div_zero.rs | 48 +- src/tools/clippy/mini-macro/src/lib.rs | 29 +- src/tools/clippy/rls.toml | 1 - src/tools/clippy/rust-update | 31 + src/tools/clippy/rustfmt.toml | 4 +- src/tools/clippy/src/driver.rs | 199 + src/tools/clippy/src/lib.rs | 1 + src/tools/clippy/src/main.rs | 370 +- src/tools/clippy/tests/compile-test.rs | 72 +- src/tools/clippy/tests/conf_whitelisted.rs | 2 + src/tools/clippy/tests/dogfood.rs | 51 - src/tools/clippy/tests/issue-825.rs | 8 +- src/tools/clippy/tests/matches.rs | 24 +- .../clippy/tests/needless_continue_helpers.rs | 3 +- .../tests/run-pass/associated-constant-ice.rs | 4 +- .../clippy/tests/run-pass/conf_whitelisted.rs | 4 - .../tests/run-pass/enum-glob-import-crate.rs | 4 +- src/tools/clippy/tests/run-pass/ice-1588.rs | 4 +- src/tools/clippy/tests/run-pass/ice-1969.rs | 4 +- src/tools/clippy/tests/run-pass/ice-700.rs | 4 +- .../clippy/tests/run-pass/mut_mut_macro.rs | 4 +- .../run-pass/needless_lifetimes_impl_trait.rs | 4 +- .../clippy/tests/run-pass/procedural_macro.rs | 3 +- .../clippy/tests/run-pass/regressions.rs | 4 +- .../tests/run-pass/single-match-else.rs | 4 +- .../tests/ui-posix/conf_non_existant.rs | 6 - .../tests/ui-posix/conf_non_existant.stderr | 4 - .../tests/ui-posix/update-all-references.sh | 28 - .../tests/ui-posix/update-references.sh | 50 - .../tests/ui-windows/conf_non_existant.rs | 6 - .../tests/ui-windows/conf_non_existant.stderr | 4 - .../tests/ui-windows/update-all-references.sh | 28 - .../tests/ui-windows/update-references.sh | 50 - .../tests/ui/absurd-extreme-comparisons.rs | 4 +- .../ui/absurd-extreme-comparisons.stderr | 2 - src/tools/clippy/tests/ui/approx_const.rs | 4 +- src/tools/clippy/tests/ui/approx_const.stderr | 2 - src/tools/clippy/tests/ui/arithmetic.rs | 4 +- src/tools/clippy/tests/ui/arithmetic.stderr | 2 - src/tools/clippy/tests/ui/array_indexing.rs | 18 +- .../clippy/tests/ui/array_indexing.stderr | 18 +- src/tools/clippy/tests/ui/assign_ops.rs | 4 +- src/tools/clippy/tests/ui/assign_ops.stderr | 2 - src/tools/clippy/tests/ui/assign_ops2.rs | 4 +- src/tools/clippy/tests/ui/assign_ops2.stderr | 2 - src/tools/clippy/tests/ui/attrs.rs | 4 +- src/tools/clippy/tests/ui/attrs.stderr | 2 - src/tools/clippy/tests/ui/bit_masks.rs | 4 +- src/tools/clippy/tests/ui/bit_masks.stderr | 20 +- src/tools/clippy/tests/ui/blacklisted_name.rs | 4 +- .../clippy/tests/ui/blacklisted_name.stderr | 2 - .../clippy/tests/ui/block_in_if_condition.rs | 4 +- .../tests/ui/block_in_if_condition.stderr | 2 - src/tools/clippy/tests/ui/bool_comparison.rs | 4 +- .../clippy/tests/ui/bool_comparison.stderr | 2 - src/tools/clippy/tests/ui/booleans.rs | 20 +- src/tools/clippy/tests/ui/booleans.stderr | 42 +- src/tools/clippy/tests/ui/borrow_box.rs | 4 +- src/tools/clippy/tests/ui/borrow_box.stderr | 2 - src/tools/clippy/tests/ui/box_vec.rs | 4 +- src/tools/clippy/tests/ui/box_vec.stderr | 2 - .../clippy/tests/ui/builtin-type-shadow.rs | 4 +- .../tests/ui/builtin-type-shadow.stderr | 2 - src/tools/clippy/tests/ui/bytecount.rs | 4 +- src/tools/clippy/tests/ui/bytecount.stderr | 2 - src/tools/clippy/tests/ui/cast.rs | 6 +- src/tools/clippy/tests/ui/cast.stderr | 104 +- src/tools/clippy/tests/ui/char_lit_as_u8.rs | 4 +- .../clippy/tests/ui/char_lit_as_u8.stderr | 2 - src/tools/clippy/tests/ui/cmp_nan.rs | 4 +- src/tools/clippy/tests/ui/cmp_nan.stderr | 2 - src/tools/clippy/tests/ui/cmp_null.rs | 4 +- src/tools/clippy/tests/ui/cmp_null.stderr | 2 - src/tools/clippy/tests/ui/cmp_owned.rs | 4 +- src/tools/clippy/tests/ui/cmp_owned.stderr | 2 - src/tools/clippy/tests/ui/collapsible_if.rs | 4 +- .../clippy/tests/ui/collapsible_if.stderr | 2 - src/tools/clippy/tests/ui/complex_types.rs | 4 +- .../clippy/tests/ui/complex_types.stderr | 2 - src/tools/clippy/tests/ui/conf_bad_arg.rs | 2 +- src/tools/clippy/tests/ui/conf_bad_arg.stderr | 14 +- src/tools/clippy/tests/ui/conf_bad_toml.rs | 4 +- .../clippy/tests/ui/conf_bad_toml.stderr | 10 +- src/tools/clippy/tests/ui/conf_bad_type.rs | 4 +- .../clippy/tests/ui/conf_bad_type.stderr | 10 +- .../tests/ui/conf_french_blacklisted_name.rs | 4 +- .../ui/conf_french_blacklisted_name.stderr | 48 +- .../clippy/tests/ui/conf_path_non_string.rs | 2 +- .../tests/ui/conf_path_non_string.stderr | 14 +- src/tools/clippy/tests/ui/conf_unknown_key.rs | 4 +- .../clippy/tests/ui/conf_unknown_key.stderr | 10 +- .../clippy/tests/ui/const_static_lifetime.rs | 31 + .../tests/ui/const_static_lifetime.stderr | 50 + src/tools/clippy/tests/ui/copies.rs | 13 +- src/tools/clippy/tests/ui/copies.stderr | 18 +- src/tools/clippy/tests/ui/cstring.rs | 8 + src/tools/clippy/tests/ui/cstring.stderr | 14 + .../clippy/tests/ui/cyclomatic_complexity.rs | 2 +- .../tests/ui/cyclomatic_complexity.stderr | 2 - .../ui/cyclomatic_complexity_attr_used.rs | 2 +- .../ui/cyclomatic_complexity_attr_used.stderr | 2 - src/tools/clippy/tests/ui/deprecated.rs | 4 +- src/tools/clippy/tests/ui/deprecated.stderr | 2 - src/tools/clippy/tests/ui/derive.rs | 4 +- src/tools/clippy/tests/ui/derive.stderr | 32 +- .../tests/ui/diverging_sub_expression.rs | 2 +- .../tests/ui/diverging_sub_expression.stderr | 2 - src/tools/clippy/tests/ui/dlist.rs | 2 +- src/tools/clippy/tests/ui/dlist.stderr | 2 - src/tools/clippy/tests/ui/doc.rs | 12 +- src/tools/clippy/tests/ui/doc.stderr | 24 +- src/tools/clippy/tests/ui/double_neg.rs | 4 +- src/tools/clippy/tests/ui/double_neg.stderr | 2 - src/tools/clippy/tests/ui/double_parens.rs | 4 +- .../clippy/tests/ui/double_parens.stderr | 2 - src/tools/clippy/tests/ui/drop_forget_copy.rs | 4 +- .../clippy/tests/ui/drop_forget_copy.stderr | 2 - src/tools/clippy/tests/ui/drop_forget_ref.rs | 4 +- .../clippy/tests/ui/drop_forget_ref.stderr | 2 - .../tests/ui/duplicate_underscore_argument.rs | 4 +- .../ui/duplicate_underscore_argument.stderr | 2 - src/tools/clippy/tests/ui/empty_enum.rs | 4 +- src/tools/clippy/tests/ui/empty_enum.stderr | 2 - src/tools/clippy/tests/ui/entry.rs | 4 +- src/tools/clippy/tests/ui/entry.stderr | 2 - src/tools/clippy/tests/ui/enum_glob_use.rs | 4 +- .../clippy/tests/ui/enum_glob_use.stderr | 2 - src/tools/clippy/tests/ui/enum_variants.rs | 16 +- .../clippy/tests/ui/enum_variants.stderr | 2 - src/tools/clippy/tests/ui/enums_clike.rs | 4 +- src/tools/clippy/tests/ui/enums_clike.stderr | 2 - src/tools/clippy/tests/ui/eq_op.rs | 4 +- src/tools/clippy/tests/ui/eq_op.stderr | 2 - src/tools/clippy/tests/ui/erasing_op.rs | 12 + src/tools/clippy/tests/ui/erasing_op.stderr | 20 + src/tools/clippy/tests/ui/escape_analysis.rs | 2 +- src/tools/clippy/tests/ui/eta.rs | 4 +- src/tools/clippy/tests/ui/eta.stderr | 4 +- .../clippy/tests/ui/eval_order_dependence.rs | 4 +- .../tests/ui/eval_order_dependence.stderr | 2 - src/tools/clippy/tests/ui/explicit_write.rs | 46 + .../clippy/tests/ui/explicit_write.stderr | 38 + .../clippy/tests/ui/fallible_impl_from.rs | 64 + .../clippy/tests/ui/fallible_impl_from.stderr | 91 + src/tools/clippy/tests/ui/filter_methods.rs | 4 +- .../clippy/tests/ui/filter_methods.stderr | 2 - src/tools/clippy/tests/ui/float_cmp.rs | 4 +- src/tools/clippy/tests/ui/float_cmp.stderr | 2 - src/tools/clippy/tests/ui/for_loop.rs | 310 +- src/tools/clippy/tests/ui/for_loop.stderr | 494 +- src/tools/clippy/tests/ui/format.rs | 4 +- src/tools/clippy/tests/ui/format.stderr | 14 - src/tools/clippy/tests/ui/formatting.rs | 4 +- src/tools/clippy/tests/ui/formatting.stderr | 2 - src/tools/clippy/tests/ui/functions.rs | 4 +- src/tools/clippy/tests/ui/functions.stderr | 2 - src/tools/clippy/tests/ui/get_unwrap.rs | 46 + src/tools/clippy/tests/ui/get_unwrap.stderr | 62 + src/tools/clippy/tests/ui/ices.rs | 5 - src/tools/clippy/tests/ui/ices.stderr | 8 - .../clippy/tests/ui/identity_conversion.rs | 40 + .../tests/ui/identity_conversion.stderr | 42 + src/tools/clippy/tests/ui/identity_op.rs | 7 +- src/tools/clippy/tests/ui/identity_op.stderr | 6 +- .../ui/if_let_redundant_pattern_matching.rs | 4 +- .../if_let_redundant_pattern_matching.stderr | 2 - src/tools/clippy/tests/ui/if_not_else.rs | 4 +- src/tools/clippy/tests/ui/if_not_else.stderr | 2 - src/tools/clippy/tests/ui/implicit_hasher.rs | 86 + .../clippy/tests/ui/implicit_hasher.stderr | 144 + .../tests/ui/inconsistent_digit_grouping.rs | 4 +- .../ui/inconsistent_digit_grouping.stderr | 2 - src/tools/clippy/tests/ui/infinite_iter.rs | 3 +- .../clippy/tests/ui/infinite_iter.stderr | 66 +- src/tools/clippy/tests/ui/int_plus_one.rs | 18 + src/tools/clippy/tests/ui/int_plus_one.stderr | 45 + src/tools/clippy/tests/ui/invalid_ref.rs | 66 + src/tools/clippy/tests/ui/invalid_ref.stderr | 49 + .../tests/ui/invalid_upcast_comparisons.rs | 4 +- .../ui/invalid_upcast_comparisons.stderr | 2 - src/tools/clippy/tests/ui/is_unit_expr.rs | 29 +- src/tools/clippy/tests/ui/is_unit_expr.stderr | 2 - .../clippy/tests/ui/item_after_statement.rs | 4 +- .../tests/ui/item_after_statement.stderr | 2 - .../clippy/tests/ui/large_digit_groups.rs | 4 +- .../clippy/tests/ui/large_digit_groups.stderr | 2 - .../clippy/tests/ui/large_enum_variant.rs | 4 +- .../clippy/tests/ui/large_enum_variant.stderr | 2 - src/tools/clippy/tests/ui/len_zero.rs | 11 +- src/tools/clippy/tests/ui/len_zero.stderr | 8 +- src/tools/clippy/tests/ui/let_if_seq.rs | 4 +- src/tools/clippy/tests/ui/let_if_seq.stderr | 2 - src/tools/clippy/tests/ui/let_return.rs | 4 +- src/tools/clippy/tests/ui/let_return.stderr | 2 - src/tools/clippy/tests/ui/let_unit.rs | 4 +- src/tools/clippy/tests/ui/let_unit.stderr | 2 - src/tools/clippy/tests/ui/lifetimes.rs | 4 +- src/tools/clippy/tests/ui/lifetimes.stderr | 2 - src/tools/clippy/tests/ui/lint_pass.rs | 4 +- src/tools/clippy/tests/ui/lint_pass.stderr | 2 - src/tools/clippy/tests/ui/literals.rs | 4 +- src/tools/clippy/tests/ui/literals.stderr | 2 - src/tools/clippy/tests/ui/map_clone.rs | 4 +- src/tools/clippy/tests/ui/map_clone.stderr | 2 - src/tools/clippy/tests/ui/matches.rs | 4 +- src/tools/clippy/tests/ui/matches.stderr | 133 +- src/tools/clippy/tests/ui/mem_forget.rs | 4 +- src/tools/clippy/tests/ui/mem_forget.stderr | 2 - src/tools/clippy/tests/ui/methods.rs | 241 +- src/tools/clippy/tests/ui/methods.stderr | 698 +- src/tools/clippy/tests/ui/min_max.rs | 4 +- src/tools/clippy/tests/ui/min_max.stderr | 2 - src/tools/clippy/tests/ui/missing-doc.rs | 4 +- src/tools/clippy/tests/ui/missing-doc.stderr | 2 - src/tools/clippy/tests/ui/module_inception.rs | 4 +- .../clippy/tests/ui/module_inception.stderr | 2 - src/tools/clippy/tests/ui/modulo_one.rs | 4 +- src/tools/clippy/tests/ui/modulo_one.stderr | 2 - src/tools/clippy/tests/ui/mut_from_ref.rs | 4 +- src/tools/clippy/tests/ui/mut_from_ref.stderr | 2 - src/tools/clippy/tests/ui/mut_mut.rs | 4 +- src/tools/clippy/tests/ui/mut_mut.stderr | 26 - src/tools/clippy/tests/ui/mut_range_bound.rs | 56 + .../clippy/tests/ui/mut_range_bound.stderr | 32 + src/tools/clippy/tests/ui/mut_reference.rs | 4 +- .../clippy/tests/ui/mut_reference.stderr | 2 - src/tools/clippy/tests/ui/mutex_atomic.rs | 4 +- src/tools/clippy/tests/ui/mutex_atomic.stderr | 2 - src/tools/clippy/tests/ui/needless_bool.rs | 4 +- .../clippy/tests/ui/needless_bool.stderr | 2 - src/tools/clippy/tests/ui/needless_borrow.rs | 4 +- .../clippy/tests/ui/needless_borrow.stderr | 10 +- .../clippy/tests/ui/needless_borrowed_ref.rs | 4 +- .../tests/ui/needless_borrowed_ref.stderr | 2 - .../clippy/tests/ui/needless_continue.rs | 4 +- .../clippy/tests/ui/needless_continue.stderr | 2 - .../clippy/tests/ui/needless_pass_by_value.rs | 61 +- .../tests/ui/needless_pass_by_value.stderr | 122 +- .../ui/needless_pass_by_value_proc_macro.rs | 4 +- .../clippy/tests/ui/needless_range_loop.rs | 55 + .../tests/ui/needless_range_loop.stderr | 41 + src/tools/clippy/tests/ui/needless_return.rs | 4 +- .../clippy/tests/ui/needless_return.stderr | 2 - src/tools/clippy/tests/ui/needless_update.rs | 4 +- .../clippy/tests/ui/needless_update.stderr | 2 - src/tools/clippy/tests/ui/neg_multiply.rs | 4 +- src/tools/clippy/tests/ui/neg_multiply.stderr | 2 - src/tools/clippy/tests/ui/never_loop.rs | 58 +- src/tools/clippy/tests/ui/never_loop.stderr | 52 +- .../clippy/tests/ui/new_without_default.rs | 2 +- .../tests/ui/new_without_default.stderr | 2 - src/tools/clippy/tests/ui/no_effect.rs | 46 +- src/tools/clippy/tests/ui/no_effect.stderr | 248 +- .../clippy/tests/ui/non_expressive_names.rs | 11 +- .../tests/ui/non_expressive_names.stderr | 20 +- src/tools/clippy/tests/ui/ok_expect.rs | 27 + src/tools/clippy/tests/ui/ok_expect.stderr | 32 + src/tools/clippy/tests/ui/ok_if_let.rs | 4 +- src/tools/clippy/tests/ui/ok_if_let.stderr | 2 - src/tools/clippy/tests/ui/op_ref.rs | 6 +- src/tools/clippy/tests/ui/op_ref.stderr | 4 +- src/tools/clippy/tests/ui/open_options.rs | 4 +- src/tools/clippy/tests/ui/open_options.stderr | 2 - .../tests/ui/overflow_check_conditional.rs | 4 +- .../ui/overflow_check_conditional.stderr | 34 +- src/tools/clippy/tests/ui/panic.rs | 4 +- src/tools/clippy/tests/ui/panic.stderr | 2 - .../clippy/tests/ui/partialeq_ne_impl.rs | 4 +- .../clippy/tests/ui/partialeq_ne_impl.stderr | 2 - src/tools/clippy/tests/ui/patterns.rs | 4 +- src/tools/clippy/tests/ui/patterns.stderr | 2 - src/tools/clippy/tests/ui/precedence.rs | 4 +- src/tools/clippy/tests/ui/precedence.stderr | 2 - src/tools/clippy/tests/ui/print.rs | 4 +- src/tools/clippy/tests/ui/print.stderr | 2 - .../clippy/tests/ui/print_with_newline.rs | 4 +- .../clippy/tests/ui/print_with_newline.stderr | 20 - .../clippy/tests/ui/println_empty_string.rs | 4 + .../tests/ui/println_empty_string.stderr | 8 + src/tools/clippy/tests/ui/ptr_arg.rs | 39 +- src/tools/clippy/tests/ui/ptr_arg.stderr | 73 +- src/tools/clippy/tests/ui/range.rs | 15 +- src/tools/clippy/tests/ui/range.stderr | 4 +- .../clippy/tests/ui/range_plus_minus_one.rs | 34 + .../tests/ui/range_plus_minus_one.stderr | 67 + .../clippy/tests/ui/redundant_closure_call.rs | 4 +- .../tests/ui/redundant_closure_call.stderr | 22 +- src/tools/clippy/tests/ui/reference.rs | 4 +- src/tools/clippy/tests/ui/reference.stderr | 2 - src/tools/clippy/tests/ui/regex.rs | 8 +- src/tools/clippy/tests/ui/regex.stderr | 2 - src/tools/clippy/tests/ui/serde.rs | 4 +- src/tools/clippy/tests/ui/serde.stderr | 2 - src/tools/clippy/tests/ui/shadow.rs | 4 +- src/tools/clippy/tests/ui/shadow.stderr | 10 +- .../tests/ui/short_circuit_statement.rs | 4 +- .../tests/ui/short_circuit_statement.stderr | 2 - src/tools/clippy/tests/ui/should_assert_eq.rs | 32 - .../clippy/tests/ui/should_assert_eq.stderr | 59 - .../clippy/tests/ui/single_char_pattern.rs | 41 + .../tests/ui/single_char_pattern.stderr | 104 + src/tools/clippy/tests/ui/starts_ends_with.rs | 39 + .../clippy/tests/ui/starts_ends_with.stderr | 76 + src/tools/clippy/tests/ui/string_extend.rs | 30 + .../clippy/tests/ui/string_extend.stderr | 20 + src/tools/clippy/tests/ui/strings.rs | 4 +- src/tools/clippy/tests/ui/strings.stderr | 2 - src/tools/clippy/tests/ui/stutter.rs | 4 +- src/tools/clippy/tests/ui/stutter.stderr | 2 - src/tools/clippy/tests/ui/swap.rs | 4 +- src/tools/clippy/tests/ui/swap.stderr | 2 - .../clippy/tests/ui/temporary_assignment.rs | 4 +- .../tests/ui/temporary_assignment.stderr | 2 - src/tools/clippy/tests/ui/toplevel_ref_arg.rs | 4 +- .../clippy/tests/ui/toplevel_ref_arg.stderr | 2 - src/tools/clippy/tests/ui/trailing_zeros.rs | 3 +- .../clippy/tests/ui/trailing_zeros.stderr | 2 - .../clippy/tests/ui/trailing_zeros.stdout | 29 +- src/tools/clippy/tests/ui/transmute.rs | 26 +- src/tools/clippy/tests/ui/transmute.stderr | 50 +- src/tools/clippy/tests/ui/transmute_32bit.rs | 4 +- src/tools/clippy/tests/ui/transmute_64bit.rs | 4 +- .../clippy/tests/ui/transmute_64bit.stderr | 2 - src/tools/clippy/tests/ui/unicode.rs | 4 +- src/tools/clippy/tests/ui/unicode.stderr | 6 +- src/tools/clippy/tests/ui/unit_cmp.rs | 4 +- src/tools/clippy/tests/ui/unit_cmp.stderr | 2 - .../clippy/tests/ui/unnecessary_clone.rs | 59 + .../clippy/tests/ui/unnecessary_clone.stderr | 68 + .../clippy/tests/ui/unneeded_field_pattern.rs | 4 +- .../tests/ui/unneeded_field_pattern.stderr | 2 - .../clippy/tests/ui/unreadable_literal.rs | 4 +- .../clippy/tests/ui/unreadable_literal.stderr | 2 - .../tests/ui/unsafe_removed_from_name.rs | 4 +- .../tests/ui/unsafe_removed_from_name.stderr | 2 - src/tools/clippy/tests/ui/unused_io_amount.rs | 4 +- .../clippy/tests/ui/unused_io_amount.stderr | 2 - src/tools/clippy/tests/ui/unused_labels.rs | 4 +- .../clippy/tests/ui/unused_labels.stderr | 2 - src/tools/clippy/tests/ui/unused_lt.rs | 4 +- src/tools/clippy/tests/ui/unused_lt.stderr | 2 - src/tools/clippy/tests/ui/use_self.rs | 4 +- src/tools/clippy/tests/ui/use_self.stderr | 2 - .../tests/ui/used_underscore_binding.rs | 4 +- .../tests/ui/used_underscore_binding.stderr | 2 - src/tools/clippy/tests/ui/useless_asref.rs | 118 + .../clippy/tests/ui/useless_asref.stderr | 72 + .../clippy/tests/ui/useless_attribute.rs | 4 +- .../clippy/tests/ui/useless_attribute.stderr | 2 - src/tools/clippy/tests/ui/vec.rs | 4 +- src/tools/clippy/tests/ui/vec.stderr | 2 - src/tools/clippy/tests/ui/while_loop.rs | 14 +- src/tools/clippy/tests/ui/while_loop.stderr | 2 - .../clippy/tests/ui/wrong_self_convention.rs | 4 +- .../tests/ui/wrong_self_convention.stderr | 2 - src/tools/clippy/tests/ui/zero_div_zero.rs | 4 +- .../clippy/tests/ui/zero_div_zero.stderr | 2 - src/tools/clippy/tests/ui/zero_ptr.rs | 4 +- src/tools/clippy/tests/ui/zero_ptr.stderr | 2 - src/tools/compiletest/Cargo.toml | 4 + src/tools/compiletest/src/common.rs | 16 + src/tools/compiletest/src/errors.rs | 2 +- src/tools/compiletest/src/header.rs | 35 +- src/tools/compiletest/src/json.rs | 19 +- src/tools/compiletest/src/main.rs | 42 +- src/tools/compiletest/src/read2.rs | 208 + src/tools/compiletest/src/runtest.rs | 338 +- src/tools/compiletest/src/util.rs | 11 +- src/tools/linkchecker/main.rs | 17 + src/tools/tidy/src/bins.rs | 6 +- src/tools/tidy/src/deps.rs | 7 +- src/tools/tidy/src/features.rs | 20 + src/tools/tidy/src/lib.rs | 7 +- src/tools/tidy/src/main.rs | 3 +- src/tools/toolstate.toml | 5 +- src/vendor/ar/.cargo-checksum.json | 2 +- src/vendor/ar/Cargo.toml | 16 +- src/vendor/ar/Cargo.toml.orig | 9 + src/vendor/ar/examples/create.rs | 10 +- src/vendor/ar/examples/extract.rs | 16 +- src/vendor/ar/src/lib.rs | 250 +- src/vendor/atty/.cargo-checksum.json | 2 +- src/vendor/atty/.travis.yml | 81 +- src/vendor/atty/CHANGELOG.md | 4 + src/vendor/atty/Cargo.toml | 36 +- src/vendor/atty/Cargo.toml.orig | 24 + src/vendor/atty/LICENSE | 2 +- src/vendor/atty/README.md | 22 +- src/vendor/atty/appveyor.yml | 3 +- src/vendor/atty/rustfmt.toml | 10 + src/vendor/atty/src/lib.rs | 45 +- src/vendor/backtrace-sys/.cargo-checksum.json | 2 +- src/vendor/backtrace-sys/Cargo.toml | 2 +- src/vendor/backtrace-sys/Cargo.toml.orig | 2 +- src/vendor/backtrace-sys/build.rs | 13 +- src/vendor/backtrace/.cargo-checksum.json | 2 +- src/vendor/backtrace/Cargo.toml | 56 +- src/vendor/backtrace/Cargo.toml.orig | 4 +- src/vendor/backtrace/README.md | 19 +- src/vendor/backtrace/src/symbolize/mod.rs | 1 + src/vendor/backtrace/tests/smoke.rs | 5 +- .../bitflags-0.8.2/.cargo-checksum.json | 1 - src/vendor/bitflags-0.8.2/.gitignore | 2 - src/vendor/bitflags-0.8.2/.travis.yml | 24 - src/vendor/bitflags-0.8.2/Cargo.toml | 17 - src/vendor/bitflags-0.8.2/README.md | 43 - src/vendor/bitflags-0.8.2/src/lib.rs | 840 - src/vendor/bitflags-0.8.2/tests/external.rs | 21 - .../bitflags-0.8.2/tests/external_no_std.rs | 22 - .../bitflags-0.8.2/tests/i128_bitflags.rs | 30 - src/vendor/bitflags/.cargo-checksum.json | 2 +- src/vendor/bitflags/.gitignore | 4 +- src/vendor/bitflags/.travis.yml | 14 +- src/vendor/bitflags/CHANGELOG.md | 64 + src/vendor/bitflags/Cargo.toml | 5 +- src/vendor/bitflags/Cargo.toml.orig | 5 +- src/vendor/bitflags/README.md | 4 +- src/vendor/bitflags/src/example_generated.rs | 10 +- src/vendor/bitflags/src/lib.rs | 381 +- .../bitflags/tests/conflicting_trait_impls.rs | 19 - src/vendor/bitflags/tests/external.rs | 19 - src/vendor/bitflags/tests/external_no_std.rs | 21 - src/vendor/bitflags/tests/i128_bitflags.rs | 29 - .../cargo_metadata/.cargo-checksum.json | 1 + .../.cargo-ok | 0 .../{conv => cargo_metadata}/.gitignore | 0 src/vendor/cargo_metadata/.travis.yml | 11 + src/vendor/cargo_metadata/Cargo.toml | 12 + src/vendor/cargo_metadata/src/lib.rs | 158 + src/vendor/cargo_metadata/tests/selftest.rs | 34 + src/vendor/cc/.cargo-checksum.json | 2 +- src/vendor/cc/.travis.yml | 6 +- src/vendor/cc/Cargo.toml | 7 +- src/vendor/cc/Cargo.toml.orig | 7 +- src/vendor/cc/README.md | 5 + src/vendor/cc/appveyor.yml | 6 +- src/vendor/cc/src/lib.rs | 569 +- src/vendor/cc/tests/cc_env.rs | 58 +- src/vendor/cc/tests/support/mod.rs | 10 + src/vendor/cc/tests/test.rs | 13 + src/vendor/clap/.cargo-checksum.json | 2 +- src/vendor/clap/.travis.yml | 10 +- src/vendor/clap/CHANGELOG.md | 54 + src/vendor/clap/Cargo.toml | 54 +- src/vendor/clap/Cargo.toml.orig | 15 +- src/vendor/clap/README.md | 78 +- src/vendor/clap/src/app/help.rs | 329 +- src/vendor/clap/src/app/mod.rs | 47 +- src/vendor/clap/src/app/parser.rs | 131 +- src/vendor/clap/src/app/settings.rs | 23 +- src/vendor/clap/src/app/validator.rs | 19 +- src/vendor/clap/src/args/any_arg.rs | 7 +- src/vendor/clap/src/args/arg.rs | 175 +- src/vendor/clap/src/args/arg_builder/flag.rs | 34 +- .../clap/src/args/arg_builder/option.rs | 57 +- .../clap/src/args/arg_builder/positional.rs | 63 +- .../clap/src/args/arg_builder/valued.rs | 7 +- src/vendor/clap/src/args/arg_matcher.rs | 59 +- src/vendor/clap/src/args/arg_matches.rs | 2 +- src/vendor/clap/src/completions/fish.rs | 2 +- src/vendor/clap/src/lib.rs | 232 +- src/vendor/clap/src/macros.rs | 23 +- src/vendor/clap/src/map.rs | 84 + src/vendor/clap/src/suggestions.rs | 2 +- src/vendor/clap/src/usage_parser.rs | 3 +- src/vendor/cmake/.cargo-checksum.json | 2 +- src/vendor/cmake/Cargo.toml | 2 +- src/vendor/cmake/Cargo.toml.orig | 2 +- src/vendor/cmake/README.md | 17 +- src/vendor/cmake/src/lib.rs | 52 +- .../compiletest_rs/.cargo-checksum.json | 1 + .../{magenta-sys => compiletest_rs}/.cargo-ok | 0 src/vendor/compiletest_rs/.gitignore | 15 + src/vendor/compiletest_rs/.travis.yml | 8 + src/vendor/compiletest_rs/Cargo.toml | 48 + src/vendor/compiletest_rs/Cargo.toml.orig | 27 + .../LICENSE-APACHE | 0 src/vendor/compiletest_rs/LICENSE-MIT | 25 + src/vendor/compiletest_rs/README.md | 84 + src/vendor/compiletest_rs/src/common.rs | 325 + src/vendor/compiletest_rs/src/errors.rs | 182 + src/vendor/compiletest_rs/src/header.rs | 623 + src/vendor/compiletest_rs/src/json.rs | 216 + src/vendor/compiletest_rs/src/lib.rs | 387 + .../compiletest_rs/src/raise_fd_limit.rs | 69 + src/vendor/compiletest_rs/src/runtest.rs | 2453 + src/vendor/compiletest_rs/src/uidiff.rs | 73 + src/vendor/compiletest_rs/src/util.rs | 105 + src/vendor/conv/.cargo-checksum.json | 1 - src/vendor/conv/.travis.yml | 17 - src/vendor/conv/Cargo.toml | 22 - src/vendor/conv/LICENSE | 25 - src/vendor/conv/README.md | 129 - src/vendor/conv/src/errors.rs | 606 - src/vendor/conv/src/impls.rs | 591 - src/vendor/conv/src/lib.rs | 525 - src/vendor/conv/src/macros.rs | 148 - src/vendor/conv/src/misc.rs | 71 - src/vendor/conv/tests/conv_utils.rs | 40 - src/vendor/conv/tests/derive_try_from.rs | 45 - src/vendor/conv/tests/lang_char.rs | 121 - src/vendor/conv/tests/lang_floats.rs | 57 - src/vendor/conv/tests/lang_ints.rs | 395 - src/vendor/conv/tests/unwraps.rs | 31 - src/vendor/conv/tests/use_in_generics.rs | 14 - src/vendor/conv/tests/util/mod.rs | 509 - src/vendor/custom_derive/.cargo-checksum.json | 1 - src/vendor/custom_derive/.gitignore | 4 - src/vendor/custom_derive/Cargo.toml | 33 - src/vendor/custom_derive/LICENSE | 237 - src/vendor/custom_derive/README.md | 24 - src/vendor/custom_derive/src/lib.rs | 462 - .../custom_derive/tests/empty_bi_derives.rs | 24 - .../custom_derive/tests/enum_iterator.rs | 73 - .../custom_derive/tests/enum_try_from.rs | 77 - .../custom_derive/tests/passthru_derive.rs | 19 - .../custom_derive/tests/stable_encodable.rs | 378 - .../custom_derive/tests/trailing_comma.rs | 24 - src/vendor/diff/.cargo-checksum.json | 2 +- src/vendor/diff/Cargo.toml | 26 +- src/vendor/diff/Cargo.toml.orig | 13 + src/vendor/diff/benches/benches.rs | 2 +- src/vendor/diff/src/lib.rs | 45 +- src/vendor/diff/tests/tests.rs | 42 +- src/vendor/duct/.cargo-checksum.json | 1 + src/vendor/{magenta => duct}/.cargo-ok | 0 src/vendor/duct/.gitignore | 1 + src/vendor/duct/.travis.yml | 16 + src/vendor/duct/Cargo.toml | 17 + src/vendor/duct/README.md | 67 + src/vendor/duct/README.tpl | 3 + src/vendor/duct/appveyor.yml | 32 + src/vendor/duct/src/bin/cat.rs | 9 + src/vendor/duct/src/bin/echo.rs | 7 + src/vendor/duct/src/bin/exe_in_dir.rs | 80 + src/vendor/duct/src/bin/print_env.rs | 9 + src/vendor/duct/src/bin/pwd.rs | 7 + src/vendor/duct/src/bin/sleep.rs | 11 + src/vendor/duct/src/bin/status.rs | 12 + src/vendor/duct/src/bin/x_to_y.rs | 11 + src/vendor/duct/src/lib.rs | 1789 + src/vendor/duct/src/test.rs | 439 + src/vendor/either/.cargo-checksum.json | 1 + src/vendor/{memchr => either}/.cargo-ok | 0 src/vendor/either/.gitignore | 2 + src/vendor/either/.travis.yml | 29 + src/vendor/either/Cargo.toml | 36 + src/vendor/either/Cargo.toml.orig | 29 + src/vendor/either/LICENSE-APACHE | 201 + src/vendor/either/LICENSE-MIT | 25 + src/vendor/either/README-crates.io.md | 10 + src/vendor/either/README.rst | 100 + src/vendor/either/src/lib.rs | 660 + .../error-chain-0.8.1/.cargo-checksum.json | 1 + .../.cargo-ok | 0 src/vendor/error-chain-0.8.1/.gitignore | 3 + src/vendor/error-chain-0.8.1/.travis.yml | 45 + src/vendor/error-chain-0.8.1/CHANGELOG.md | 91 + src/vendor/error-chain-0.8.1/Cargo.toml | 23 + src/vendor/error-chain-0.8.1/README.md | 36 + src/vendor/error-chain-0.8.1/examples/all.rs | 36 + src/vendor/error-chain-0.8.1/examples/doc.rs | 29 + .../error-chain-0.8.1/examples/quickstart.rs | 61 + src/vendor/error-chain-0.8.1/examples/size.rs | 40 + .../error-chain-0.8.1/src/error_chain.rs | 406 + .../src/example_generated.rs | 38 + src/vendor/error-chain-0.8.1/src/lib.rs | 613 + .../error-chain-0.8.1/src/quick_error.rs | 529 + .../error-chain-0.8.1/src/quick_main.rs | 67 + .../error-chain-0.8.1/tests/quick_main.rs | 30 + src/vendor/error-chain-0.8.1/tests/tests.rs | 543 + src/vendor/filetime/.cargo-checksum.json | 2 +- src/vendor/filetime/Cargo.toml | 8 +- src/vendor/filetime/Cargo.toml.orig | 5 +- src/vendor/filetime/src/lib.rs | 26 +- src/vendor/filetime/src/unix.rs | 94 - src/vendor/filetime/src/unix/linux.rs | 45 + src/vendor/filetime/src/unix/mod.rs | 125 + src/vendor/filetime/src/unix/utimensat.rs | 13 + src/vendor/filetime/src/unix/utimes.rs | 13 + src/vendor/fnv/.cargo-checksum.json | 2 +- src/vendor/fnv/Cargo.toml | 18 +- src/vendor/fnv/Cargo.toml.orig | 13 + src/vendor/fnv/LICENSE-APACHE | 201 + src/vendor/fnv/LICENSE-MIT | 25 + src/vendor/fnv/README.md | 2 +- src/vendor/fnv/lib.rs | 2 +- .../fuchsia-zircon-sys/.cargo-checksum.json | 1 + .../.cargo-ok | 0 src/vendor/fuchsia-zircon-sys/BUILD.gn | 11 + src/vendor/fuchsia-zircon-sys/Cargo.toml | 21 + src/vendor/fuchsia-zircon-sys/Cargo.toml.orig | 10 + .../fuchsia-zircon-sys/examples/hello.rs | 14 + .../fuchsia-zircon-sys/src/definitions.rs | 903 + src/vendor/fuchsia-zircon-sys/src/lib.rs | 460 + .../fuchsia-zircon/.cargo-checksum.json | 1 + src/vendor/fuchsia-zircon/.cargo-ok | 0 src/vendor/fuchsia-zircon/BUILD.gn | 13 + src/vendor/fuchsia-zircon/Cargo.toml | 21 + src/vendor/fuchsia-zircon/Cargo.toml.orig | 10 + .../{magenta => fuchsia-zircon}/LICENSE | 0 src/vendor/fuchsia-zircon/README.md | 12 + src/vendor/fuchsia-zircon/examples/BUILD.gn | 9 + .../src/channel.rs | 82 +- src/vendor/fuchsia-zircon/src/event.rs | 42 + src/vendor/fuchsia-zircon/src/eventpair.rs | 75 + .../{magenta => fuchsia-zircon}/src/fifo.rs | 31 +- src/vendor/fuchsia-zircon/src/job.rs | 14 + src/vendor/fuchsia-zircon/src/lib.rs | 911 + src/vendor/fuchsia-zircon/src/port.rs | 354 + src/vendor/fuchsia-zircon/src/process.rs | 14 + src/vendor/fuchsia-zircon/src/socket.rs | 162 + src/vendor/fuchsia-zircon/src/thread.rs | 14 + src/vendor/fuchsia-zircon/src/timer.rs | 92 + .../{magenta => fuchsia-zircon}/src/vmo.rs | 85 +- .../tools/BUILD.gn | 0 .../tools/README.md | 0 .../tools/clang_wrapper.cc | 38 +- .../tools/gen_status.py | 10 +- src/vendor/idna/.cargo-checksum.json | 1 + src/vendor/idna/.cargo-ok | 0 src/vendor/idna/Cargo.toml | 27 + src/vendor/idna/LICENSE-APACHE | 201 + src/vendor/idna/LICENSE-MIT | 25 + src/vendor/idna/src/IdnaMappingTable.txt | 8405 +++ src/vendor/idna/src/lib.rs | 73 + .../idna/src/make_uts46_mapping_table.py | 139 + src/vendor/idna/src/punycode.rs | 212 + src/vendor/idna/src/uts46.rs | 415 + src/vendor/idna/src/uts46_mapping_table.rs | 12844 ++++ src/vendor/idna/tests/IdnaTest.txt | 7848 +++ src/vendor/idna/tests/punycode.rs | 65 + src/vendor/idna/tests/punycode_tests.json | 120 + src/vendor/idna/tests/tests.rs | 21 + src/vendor/idna/tests/unit.rs | 40 + src/vendor/idna/tests/uts46.rs | 124 + src/vendor/if_chain/.cargo-checksum.json | 1 + src/vendor/if_chain/.cargo-ok | 0 src/vendor/if_chain/.gitignore | 2 + src/vendor/if_chain/.travis.yml | 7 + src/vendor/if_chain/Cargo.toml | 14 + src/vendor/if_chain/README.md | 9 + src/vendor/if_chain/src/lib.rs | 239 + src/vendor/itertools/.cargo-checksum.json | 1 + src/vendor/itertools/.cargo-ok | 0 src/vendor/itertools/.gitignore | 2 + src/vendor/itertools/.travis.yml | 18 + src/vendor/itertools/Cargo.toml | 41 + src/vendor/itertools/Cargo.toml.orig | 35 + src/vendor/itertools/LICENSE-APACHE | 201 + src/vendor/itertools/LICENSE-MIT | 25 + src/vendor/itertools/Makefile | 34 + src/vendor/itertools/README.rst | 415 + src/vendor/itertools/benches/bench1.rs | 703 + src/vendor/itertools/benches/extra/mod.rs | 4 + .../itertools/benches/extra/zipslices.rs | 189 + .../itertools/benches/tuple_combinations.rs | 97 + src/vendor/itertools/benches/tuples.rs | 190 + src/vendor/itertools/custom.css | 29 + src/vendor/itertools/examples/iris.data | 150 + src/vendor/itertools/examples/iris.rs | 141 + src/vendor/itertools/src/adaptors/mod.rs | 1505 + .../itertools/src/adaptors/multipeek.rs | 84 + src/vendor/itertools/src/concat_impl.rs | 22 + src/vendor/itertools/src/cons_tuples_impl.rs | 66 + src/vendor/itertools/src/diff.rs | 61 + src/vendor/itertools/src/format.rs | 113 + src/vendor/itertools/src/free.rs | 222 + src/vendor/itertools/src/groupbylazy.rs | 566 + src/vendor/itertools/src/impl_macros.rs | 14 + src/vendor/itertools/src/intersperse.rs | 58 + src/vendor/itertools/src/kmerge_impl.rs | 238 + src/vendor/itertools/src/lib.rs | 1738 + src/vendor/itertools/src/minmax.rs | 114 + src/vendor/itertools/src/pad_tail.rs | 82 + .../itertools/src/peeking_take_while.rs | 144 + .../itertools/src/process_results_impl.rs | 79 + src/vendor/itertools/src/rciter_impl.rs | 97 + src/vendor/itertools/src/repeatn.rs | 52 + src/vendor/itertools/src/size_hint.rs | 104 + src/vendor/itertools/src/sources.rs | 183 + src/vendor/itertools/src/tee.rs | 75 + src/vendor/itertools/src/tuple_impl.rs | 262 + src/vendor/itertools/src/with_position.rs | 89 + src/vendor/itertools/src/zip_eq_impl.rs | 60 + src/vendor/itertools/src/zip_longest.rs | 94 + src/vendor/itertools/src/ziptuple.rs | 112 + .../itertools/tests/peeking_take_while.rs | 53 + src/vendor/itertools/tests/quick.rs | 867 + src/vendor/itertools/tests/tests.rs | 904 + src/vendor/itertools/tests/tuples.rs | 73 + src/vendor/itertools/tests/zip.rs | 65 + src/vendor/jobserver/.cargo-checksum.json | 2 +- src/vendor/jobserver/Cargo.toml | 55 +- src/vendor/jobserver/Cargo.toml.orig | 47 + src/vendor/jobserver/src/lib.rs | 51 +- .../jobserver/tests/make-as-a-client.rs | 22 +- src/vendor/lazy_static/.cargo-checksum.json | 2 +- src/vendor/lazy_static/.travis.yml | 9 +- src/vendor/lazy_static/Cargo.toml | 38 +- src/vendor/lazy_static/Cargo.toml.orig | 36 + src/vendor/lazy_static/README.md | 2 +- src/vendor/lazy_static/appveyor.yml | 59 + src/vendor/lazy_static/src/core_lazy.rs | 2 - src/vendor/lazy_static/src/lazy.rs | 5 +- src/vendor/lazy_static/src/lib.rs | 46 +- src/vendor/lazy_static/src/nightly_lazy.rs | 29 +- .../lazy_static/tests/compile-fail/README.md | 22 + .../incorrect_visibility_restriction.rs | 10 + .../tests/compile-fail/static_is_private.rs | 14 + .../tests/compile-fail/static_is_sized.rs | 11 + .../tests/compile-fail/static_never_used.rs | 10 + src/vendor/lazy_static/tests/compile_tests.rs | 18 + src/vendor/lazy_static/tests/test.rs | 14 +- src/vendor/lazycell/.cargo-checksum.json | 1 + src/vendor/lazycell/.cargo-ok | 0 src/vendor/lazycell/CHANGELOG.md | 108 + src/vendor/lazycell/Cargo.toml | 26 + src/vendor/lazycell/LICENSE-APACHE | 201 + src/vendor/lazycell/LICENSE-MIT | 26 + src/vendor/lazycell/README.md | 72 + src/vendor/lazycell/src/lib.rs | 313 + src/vendor/libc/.cargo-checksum.json | 2 +- src/vendor/libc/.travis.yml | 20 +- src/vendor/libc/Cargo.toml | 5 +- src/vendor/libc/Cargo.toml.orig | 4 +- src/vendor/libc/README.md | 3 + src/vendor/libc/appveyor.yml | 4 - src/vendor/libc/ci/README.md | 2 +- src/vendor/libc/ci/android-accept-licenses.sh | 15 - src/vendor/libc/ci/android-install-sdk.sh | 27 +- .../docker/aarch64-linux-android/Dockerfile | 4 +- .../aarch64-unknown-linux-musl/Dockerfile | 27 + .../docker/arm-linux-androideabi/Dockerfile | 4 +- .../arm-unknown-linux-musleabihf/Dockerfile | 25 + .../ci/docker/i686-linux-android/Dockerfile | 4 +- .../Dockerfile | 11 + .../powerpc64le-unknown-linux-gnu/Dockerfile | 11 + .../sparc64-unknown-linux-gnu/Dockerfile | 14 + .../x86_64-unknown-linux-gnux32/Dockerfile | 5 + src/vendor/libc/ci/run.sh | 9 +- src/vendor/libc/src/dox.rs | 99 +- src/vendor/libc/src/redox.rs | 96 - src/vendor/libc/src/redox/mod.rs | 104 + src/vendor/libc/src/redox/net.rs | 110 + src/vendor/libc/src/unix/bsd/apple/mod.rs | 26 + .../src/unix/bsd/freebsdlike/freebsd/mod.rs | 18 + src/vendor/libc/src/unix/bsd/mod.rs | 10 + .../libc/src/unix/bsd/netbsdlike/mod.rs | 2 + .../src/unix/bsd/netbsdlike/netbsd/mod.rs | 78 +- src/vendor/libc/src/unix/haiku/mod.rs | 345 +- src/vendor/libc/src/unix/mod.rs | 61 +- src/vendor/libc/src/unix/newlib/mod.rs | 9 + .../libc/src/unix/notbsd/android/b32/arm.rs | 345 + .../src/unix/notbsd/android/b64/aarch64.rs | 268 +- .../libc/src/unix/notbsd/android/mod.rs | 43 + .../libc/src/unix/notbsd/linux/mips/mips32.rs | 371 +- .../libc/src/unix/notbsd/linux/mips/mips64.rs | 330 +- .../libc/src/unix/notbsd/linux/mips/mod.rs | 43 + src/vendor/libc/src/unix/notbsd/linux/mod.rs | 74 +- .../src/unix/notbsd/linux/musl/b32/arm.rs | 379 +- .../src/unix/notbsd/linux/musl/b32/mips.rs | 381 +- .../src/unix/notbsd/linux/musl/b32/mod.rs | 16 + .../src/unix/notbsd/linux/musl/b32/x86.rs | 16 + .../src/unix/notbsd/linux/musl/b64/aarch64.rs | 334 + .../src/unix/notbsd/linux/musl/b64/mod.rs | 60 +- .../unix/notbsd/linux/musl/b64/powerpc64.rs | 76 + .../src/unix/notbsd/linux/musl/b64/x86_64.rs | 71 + .../libc/src/unix/notbsd/linux/musl/mod.rs | 31 +- .../src/unix/notbsd/linux/other/b32/arm.rs | 371 +- .../src/unix/notbsd/linux/other/b32/mod.rs | 17 + .../unix/notbsd/linux/other/b32/powerpc.rs | 376 +- .../src/unix/notbsd/linux/other/b32/x86.rs | 12 + .../unix/notbsd/linux/other/b64/aarch64.rs | 300 +- .../src/unix/notbsd/linux/other/b64/mod.rs | 51 +- .../unix/notbsd/linux/other/b64/not_x32.rs | 351 + .../unix/notbsd/linux/other/b64/powerpc64.rs | 382 +- .../unix/notbsd/linux/other/b64/sparc64.rs | 26 + .../src/unix/notbsd/linux/other/b64/x32.rs | 331 + .../src/unix/notbsd/linux/other/b64/x86_64.rs | 379 +- .../libc/src/unix/notbsd/linux/other/mod.rs | 55 +- .../libc/src/unix/notbsd/linux/s390x.rs | 343 +- src/vendor/libc/src/unix/notbsd/mod.rs | 17 + src/vendor/libc/src/unix/solaris/mod.rs | 13 + src/vendor/libc/src/unix/uclibc/mod.rs | 8 + src/vendor/magenta-sys/.cargo-checksum.json | 1 - src/vendor/magenta-sys/BUILD.gn | 11 - src/vendor/magenta-sys/Cargo.toml | 10 - src/vendor/magenta-sys/examples/hello.rs | 14 - src/vendor/magenta-sys/src/definitions.rs | 882 - src/vendor/magenta-sys/src/lib.rs | 330 - src/vendor/magenta/.cargo-checksum.json | 1 - src/vendor/magenta/.gitignore | 6 - src/vendor/magenta/AUTHORS | 8 - src/vendor/magenta/BUILD.gn | 14 - src/vendor/magenta/CONTRIBUTING.md | 9 - src/vendor/magenta/Cargo.toml | 11 - src/vendor/magenta/GETTING_STARTED.md | 175 - src/vendor/magenta/PATENTS | 22 - src/vendor/magenta/README.md | 8 - src/vendor/magenta/examples/BUILD.gn | 9 - src/vendor/magenta/src/event.rs | 53 - src/vendor/magenta/src/eventpair.rs | 88 - src/vendor/magenta/src/job.rs | 23 - src/vendor/magenta/src/lib.rs | 758 - src/vendor/magenta/src/port.rs | 362 - src/vendor/magenta/src/process.rs | 23 - src/vendor/magenta/src/socket.rs | 173 - src/vendor/magenta/src/thread.rs | 23 - src/vendor/magenta/src/timer.rs | 101 - src/vendor/memchr-1.0.2/.cargo-checksum.json | 1 + src/vendor/memchr-1.0.2/.cargo-ok | 0 .../{memchr => memchr-1.0.2}/.gitignore | 0 .../{memchr => memchr-1.0.2}/.travis.yml | 0 src/vendor/{memchr => memchr-1.0.2}/COPYING | 0 src/vendor/memchr-1.0.2/Cargo.toml | 44 + src/vendor/memchr-1.0.2/Cargo.toml.orig | 32 + .../{memchr => memchr-1.0.2}/LICENSE-MIT | 0 src/vendor/{memchr => memchr-1.0.2}/Makefile | 0 src/vendor/{memchr => memchr-1.0.2}/README.md | 0 src/vendor/{memchr => memchr-1.0.2}/UNLICENSE | 0 .../{memchr => memchr-1.0.2}/appveyor.yml | 0 .../{memchr => memchr-1.0.2}/benches/bench.rs | 0 .../{memchr => memchr-1.0.2}/ctags.rust | 0 .../{memchr => memchr-1.0.2}/session.vim | 0 src/vendor/memchr-1.0.2/src/lib.rs | 881 + src/vendor/memchr/.cargo-checksum.json | 1 - src/vendor/memchr/Cargo.toml | 28 - src/vendor/memchr/src/lib.rs | 877 - src/vendor/miow/.cargo-checksum.json | 1 + src/vendor/miow/.cargo-ok | 0 src/vendor/miow/.gitignore | 2 + src/vendor/miow/Cargo.toml | 23 + src/vendor/miow/LICENSE-APACHE | 201 + src/vendor/miow/LICENSE-MIT | 25 + src/vendor/miow/README.md | 22 + src/vendor/miow/appveyor.yml | 20 + src/vendor/miow/src/handle.rs | 93 + src/vendor/miow/src/iocp.rs | 313 + src/vendor/miow/src/lib.rs | 57 + src/vendor/miow/src/net.rs | 1183 + src/vendor/miow/src/overlapped.rs | 66 + src/vendor/miow/src/pipe.rs | 611 + src/vendor/net2/.cargo-checksum.json | 1 + src/vendor/net2/.cargo-ok | 0 src/vendor/net2/.gitignore | 2 + src/vendor/net2/.travis.yml | 31 + src/vendor/net2/Cargo.toml | 47 + src/vendor/net2/Cargo.toml.orig | 38 + src/vendor/net2/LICENSE-APACHE | 201 + .../{bitflags-0.8.2 => net2}/LICENSE-MIT | 0 src/vendor/net2/README.md | 26 + src/vendor/net2/appveyor.yml | 17 + src/vendor/net2/src/ext.rs | 1308 + src/vendor/net2/src/lib.rs | 123 + src/vendor/net2/src/socket.rs | 143 + src/vendor/net2/src/sys/unix/impls.rs | 44 + src/vendor/net2/src/sys/unix/mod.rs | 100 + src/vendor/net2/src/sys/windows/impls.rs | 44 + src/vendor/net2/src/sys/windows/mod.rs | 110 + src/vendor/net2/src/tcp.rs | 161 + src/vendor/net2/src/udp.rs | 89 + src/vendor/net2/src/unix.rs | 57 + src/vendor/net2/src/utils.rs | 51 + src/vendor/net2/tests/all.rs | 45 + src/vendor/nix/.cargo-checksum.json | 1 + src/vendor/nix/.cargo-ok | 0 src/vendor/nix/CHANGELOG.md | 245 + src/vendor/nix/CONTRIBUTING.md | 109 + src/vendor/nix/CONVENTIONS.md | 87 + src/vendor/nix/Cargo.toml | 49 + src/vendor/nix/LICENSE | 21 + src/vendor/nix/README.md | 57 + src/vendor/nix/RELEASE_PROCEDURE.md | 41 + src/vendor/nix/ci/README.md | 48 + src/vendor/nix/ci/cargo-config | 18 + src/vendor/nix/ci/run-all.sh | 29 + src/vendor/nix/ci/run-docker.sh | 15 + src/vendor/nix/ci/run-travis.sh | 41 + src/vendor/nix/ci/run.sh | 137 + src/vendor/nix/src/errno.rs | 2223 + src/vendor/nix/src/fcntl.rs | 343 + src/vendor/nix/src/features.rs | 100 + src/vendor/nix/src/lib.rs | 259 + src/vendor/nix/src/macros.rs | 196 + src/vendor/nix/src/mount.rs | 91 + src/vendor/nix/src/mqueue.rs | 153 + src/vendor/nix/src/net/if_.rs | 19 + src/vendor/nix/src/net/mod.rs | 3 + src/vendor/nix/src/poll.rs | 67 + src/vendor/nix/src/sched.rs | 137 + src/vendor/nix/src/sys/aio.rs | 314 + src/vendor/nix/src/sys/epoll.rs | 112 + src/vendor/nix/src/sys/event.rs | 329 + src/vendor/nix/src/sys/eventfd.rs | 17 + src/vendor/nix/src/sys/ioctl/mod.rs | 198 + src/vendor/nix/src/sys/ioctl/platform/bsd.rs | 36 + .../nix/src/sys/ioctl/platform/linux.rs | 107 + src/vendor/nix/src/sys/memfd.rs | 18 + src/vendor/nix/src/sys/mman.rs | 242 + src/vendor/nix/src/sys/mod.rs | 86 + src/vendor/nix/src/sys/ptrace.rs | 104 + src/vendor/nix/src/sys/quota.rs | 126 + src/vendor/nix/src/sys/reboot.rs | 43 + src/vendor/nix/src/sys/select.rs | 87 + src/vendor/nix/src/sys/sendfile.rs | 12 + src/vendor/nix/src/sys/signal.rs | 654 + src/vendor/nix/src/sys/signalfd.rs | 174 + src/vendor/nix/src/sys/socket/addr.rs | 742 + src/vendor/nix/src/sys/socket/consts.rs | 443 + src/vendor/nix/src/sys/socket/ffi.rs | 70 + src/vendor/nix/src/sys/socket/mod.rs | 677 + src/vendor/nix/src/sys/socket/multicast.rs | 40 + src/vendor/nix/src/sys/socket/sockopt.rs | 432 + src/vendor/nix/src/sys/stat.rs | 123 + src/vendor/nix/src/sys/statfs.rs | 116 + src/vendor/nix/src/sys/statvfs.rs | 179 + src/vendor/nix/src/sys/syscall.rs | 59 + src/vendor/nix/src/sys/termios.rs | 648 + src/vendor/nix/src/sys/time.rs | 572 + src/vendor/nix/src/sys/uio.rs | 97 + src/vendor/nix/src/sys/utsname.rs | 80 + src/vendor/nix/src/sys/wait.rs | 237 + src/vendor/nix/src/ucontext.rs | 37 + src/vendor/nix/src/unistd.rs | 894 + src/vendor/num_cpus/.cargo-checksum.json | 2 +- src/vendor/num_cpus/.travis.yml | 74 +- src/vendor/num_cpus/CHANGELOG.md | 76 + src/vendor/num_cpus/CONTRIBUTING.md | 16 + src/vendor/num_cpus/Cargo.toml | 7 +- src/vendor/num_cpus/Cargo.toml.orig | 7 +- src/vendor/num_cpus/README.md | 20 +- src/vendor/num_cpus/src/lib.rs | 37 +- src/vendor/os_pipe/.cargo-checksum.json | 1 + src/vendor/os_pipe/.cargo-ok | 0 src/vendor/os_pipe/.gitignore | 1 + src/vendor/os_pipe/.travis.yml | 16 + src/vendor/os_pipe/Cargo.toml | 15 + src/vendor/os_pipe/README.md | 67 + src/vendor/os_pipe/README.tpl | 3 + src/vendor/os_pipe/appveyor.yml | 32 + src/vendor/os_pipe/src/bin/cat.rs | 12 + src/vendor/os_pipe/src/bin/swap.rs | 30 + src/vendor/os_pipe/src/lib.rs | 379 + src/vendor/os_pipe/src/unix.rs | 81 + src/vendor/os_pipe/src/windows.rs | 108 + .../percent-encoding/.cargo-checksum.json | 1 + src/vendor/percent-encoding/.cargo-ok | 0 src/vendor/percent-encoding/Cargo.toml | 24 + src/vendor/percent-encoding/Cargo.toml.orig | 12 + src/vendor/percent-encoding/LICENSE-APACHE | 201 + src/vendor/percent-encoding/LICENSE-MIT | 25 + src/vendor/percent-encoding/lib.rs | 442 + .../precomputed-hash/.cargo-checksum.json | 2 +- src/vendor/precomputed-hash/Cargo.toml | 16 +- src/vendor/precomputed-hash/Cargo.toml.orig | 9 + src/vendor/precomputed-hash/src/lib.rs | 13 + .../.cargo-checksum.json | 2 +- src/vendor/procedural-masquerade/Cargo.toml | 16 +- .../procedural-masquerade/Cargo.toml.orig | 12 + .../procedural-masquerade/LICENSE-APACHE | 201 + src/vendor/procedural-masquerade/LICENSE-MIT | 25 + src/vendor/procedural-masquerade/lib.rs | 10 +- .../.cargo-checksum.json | 1 - src/vendor/pulldown-cmark-0.0.14/Cargo.toml | 23 - src/vendor/pulldown-cmark-0.0.14/build.rs | 149 - src/vendor/pulldown-cmark-0.0.14/src/main.rs | 258 - .../.cargo-checksum.json | 1 + src/vendor/pulldown-cmark-0.0.15/.cargo-ok | 0 .../.gitignore | 0 .../CONTRIBUTING.md | 0 src/vendor/pulldown-cmark-0.0.15/Cargo.toml | 23 + .../LICENSE | 0 .../README.md | 0 src/vendor/pulldown-cmark-0.0.15/build.rs | 149 + .../specs/footnotes.txt | 0 .../specs/table.txt | 0 .../src/entities.rs | 0 .../src/escape.rs | 0 .../src/html.rs | 0 .../src/lib.rs | 0 src/vendor/pulldown-cmark-0.0.15/src/main.rs | 258 + .../src/parse.rs | 15 +- .../src/passes.rs | 0 .../src/puncttable.rs | 0 .../src/scanners.rs | 0 .../src/utils.rs | 0 .../tests/footnotes.rs | 24 +- .../tests/html.rs | 0 .../tests/spec.rs | 2254 +- .../tests/table.rs | 39 +- .../third_party/CommonMark/LICENSE | 0 .../third_party/CommonMark/README.google | 0 .../third_party/CommonMark/spec.txt | 27 +- .../tools/mk_entities.py | 0 .../tools/mk_puncttable.py | 0 .../quine-mc_cluskey/.cargo-checksum.json | 1 + src/vendor/quine-mc_cluskey/.cargo-ok | 0 src/vendor/quine-mc_cluskey/.editorconfig | 25 + src/vendor/quine-mc_cluskey/.gitignore | 2 + src/vendor/quine-mc_cluskey/.travis.yml | 14 + src/vendor/quine-mc_cluskey/Cargo.toml | 11 + src/vendor/quine-mc_cluskey/README.md | 68 + src/vendor/quine-mc_cluskey/src/lib.rs | 504 + src/vendor/rand/.cargo-checksum.json | 2 +- src/vendor/rand/Cargo.toml | 6 +- src/vendor/rand/Cargo.toml.orig | 4 +- src/vendor/rand/README.md | 5 +- src/vendor/rand/src/distributions/gamma.rs | 4 +- src/vendor/rand/src/distributions/mod.rs | 1 + src/vendor/rand/src/lib.rs | 47 +- src/vendor/rand/src/os.rs | 10 +- src/vendor/redox_termios/.cargo-checksum.json | 1 + src/vendor/redox_termios/.cargo-ok | 0 src/vendor/redox_termios/.gitignore | 10 + src/vendor/redox_termios/Cargo.toml | 26 + src/vendor/redox_termios/Cargo.toml.orig | 15 + src/vendor/redox_termios/LICENSE | 21 + src/vendor/redox_termios/README.md | 2 + src/vendor/redox_termios/src/lib.rs | 218 + src/vendor/rls-data/.cargo-checksum.json | 2 +- src/vendor/rls-data/Cargo.toml | 12 +- src/vendor/rls-data/Cargo.toml.orig | 2 +- src/vendor/rls-data/src/lib.rs | 28 +- src/vendor/semver-0.6.0/.cargo-checksum.json | 1 + src/vendor/semver-0.6.0/.cargo-ok | 0 src/vendor/semver-0.6.0/.gitignore | 3 + src/vendor/semver-0.6.0/.travis.yml | 18 + src/vendor/semver-0.6.0/Cargo.toml | 25 + src/vendor/semver-0.6.0/LICENSE-APACHE | 201 + src/vendor/semver-0.6.0/LICENSE-MIT | 25 + src/vendor/semver-0.6.0/README.md | 103 + src/vendor/semver-0.6.0/src/lib.rs | 178 + src/vendor/semver-0.6.0/src/version.rs | 650 + src/vendor/semver-0.6.0/src/version_req.rs | 824 + src/vendor/semver-0.6.0/tests/deprecation.rs | 22 + src/vendor/semver-0.6.0/tests/regression.rs | 25 + src/vendor/semver-parser/.cargo-checksum.json | 1 + src/vendor/semver-parser/.cargo-ok | 0 src/vendor/semver-parser/.gitignore | 2 + src/vendor/semver-parser/Cargo.toml | 11 + src/vendor/semver-parser/LICENSE-APACHE | 201 + src/vendor/semver-parser/LICENSE-MIT | 25 + src/vendor/semver-parser/src/common.rs | 66 + src/vendor/semver-parser/src/lib.rs | 8 + src/vendor/semver-parser/src/range.rs | 696 + src/vendor/semver-parser/src/recognize.rs | 154 + src/vendor/semver-parser/src/version.rs | 365 + src/vendor/serde/.cargo-checksum.json | 2 +- src/vendor/serde/Cargo.toml | 12 +- src/vendor/serde/Cargo.toml.orig | 2 +- src/vendor/serde/README.md | 27 +- src/vendor/serde/src/de/impls.rs | 272 +- src/vendor/serde/src/de/mod.rs | 68 + src/vendor/serde/src/de/value.rs | 16 +- src/vendor/serde/src/lib.rs | 6 +- src/vendor/serde/src/private/de.rs | 38 +- src/vendor/serde/src/private/ser.rs | 6 +- src/vendor/serde/src/ser/impls.rs | 86 +- src/vendor/serde/src/ser/mod.rs | 50 + src/vendor/serde_derive/.cargo-checksum.json | 2 +- src/vendor/serde_derive/Cargo.toml | 16 +- src/vendor/serde_derive/Cargo.toml.orig | 7 +- src/vendor/serde_derive/README.md | 27 +- src/vendor/serde_derive/src/bound.rs | 8 + src/vendor/serde_derive/src/de.rs | 4 +- src/vendor/serde_derive/src/lib.rs | 10 +- .../.cargo-checksum.json | 2 +- src/vendor/serde_derive_internals/Cargo.toml | 2 +- .../serde_derive_internals/Cargo.toml.orig | 2 +- src/vendor/serde_derive_internals/README.md | 27 +- src/vendor/serde_derive_internals/src/ast.rs | 19 +- src/vendor/serde_derive_internals/src/attr.rs | 25 +- src/vendor/serde_derive_internals/src/case.rs | 3 + src/vendor/serde_derive_internals/src/lib.rs | 2 +- src/vendor/serde_json/.cargo-checksum.json | 2 +- src/vendor/serde_json/Cargo.toml | 24 +- src/vendor/serde_json/Cargo.toml.orig | 4 +- src/vendor/serde_json/README.md | 17 + src/vendor/serde_json/src/de.rs | 24 +- src/vendor/serde_json/src/error.rs | 6 + src/vendor/serde_json/src/lib.rs | 26 +- src/vendor/serde_json/src/map.rs | 6 +- src/vendor/serde_json/src/value/index.rs | 31 +- src/vendor/serde_json/src/value/mod.rs | 11 +- src/vendor/shared_child/.cargo-checksum.json | 1 + src/vendor/shared_child/.cargo-ok | 0 src/vendor/shared_child/.gitignore | 1 + src/vendor/shared_child/.travis.yml | 8 + src/vendor/shared_child/Cargo.toml | 13 + src/vendor/shared_child/README.md | 25 + src/vendor/shared_child/README.tpl | 3 + src/vendor/shared_child/appveyor.yml | 32 + src/vendor/shared_child/src/lib.rs | 299 + src/vendor/shared_child/src/unix.rs | 50 + src/vendor/shared_child/src/windows.rs | 56 + src/vendor/term_size/.cargo-checksum.json | 1 - src/vendor/term_size/.clog.toml | 11 - src/vendor/term_size/.gitignore | 23 - src/vendor/term_size/.travis.yml | 33 - src/vendor/term_size/CHANGELOG.md | 48 - src/vendor/term_size/Cargo.toml | 68 - src/vendor/term_size/LICENSE-MIT | 21 - src/vendor/term_size/README.md | 63 - src/vendor/term_size/appveyor.yml | 12 - src/vendor/term_size/index.html | 1 - src/vendor/term_size/justfile | 36 - src/vendor/term_size/rustfmt.toml | 4 - src/vendor/term_size/src/lib.rs | 237 - src/vendor/termion/.cargo-checksum.json | 1 + src/vendor/termion/.cargo-ok | 0 src/vendor/termion/.gitignore | 2 + src/vendor/termion/.travis.yml | 14 + src/vendor/termion/Cargo.toml | 17 + src/vendor/termion/LICENSE | 21 + src/vendor/termion/README.md | 181 + .../termion/examples/alternate_screen.rs | 17 + .../termion/examples/alternate_screen_raw.rs | 40 + src/vendor/termion/examples/async.rs | 39 + src/vendor/termion/examples/click.rs | 35 + src/vendor/termion/examples/color.rs | 10 + src/vendor/termion/examples/commie.rs | 51 + src/vendor/termion/examples/detect_color.rs | 19 + src/vendor/termion/examples/is_tty.rs | 11 + src/vendor/termion/examples/keys.rs | 44 + src/vendor/termion/examples/mouse.rs | 46 + src/vendor/termion/examples/rainbow.rs | 60 + src/vendor/termion/examples/read.rs | 23 + src/vendor/termion/examples/rustc_fun.rs | 24 + src/vendor/termion/examples/simple.rs | 42 + src/vendor/termion/examples/size.rs | 7 + src/vendor/termion/examples/truecolor.rs | 12 + src/vendor/termion/logo.svg | 9 + src/vendor/termion/src/async.rs | 78 + src/vendor/termion/src/clear.rs | 9 + src/vendor/termion/src/color.rs | 242 + src/vendor/termion/src/cursor.rs | 140 + src/vendor/termion/src/event.rs | 351 + src/vendor/termion/src/input.rs | 388 + src/vendor/termion/src/lib.rs | 61 + src/vendor/termion/src/macros.rs | 19 + src/vendor/termion/src/raw.rs | 117 + src/vendor/termion/src/screen.rs | 91 + src/vendor/termion/src/scroll.rs | 23 + src/vendor/termion/src/style.rs | 22 + src/vendor/termion/src/sys/redox/attr.rs | 33 + src/vendor/termion/src/sys/redox/mod.rs | 15 + src/vendor/termion/src/sys/redox/size.rs | 18 + src/vendor/termion/src/sys/redox/tty.rs | 22 + src/vendor/termion/src/sys/unix/attr.rs | 29 + src/vendor/termion/src/sys/unix/mod.rs | 33 + src/vendor/termion/src/sys/unix/size.rs | 48 + src/vendor/termion/src/sys/unix/tty.rs | 17 + src/vendor/textwrap/.cargo-checksum.json | 2 +- src/vendor/textwrap/.travis.yml | 9 + src/vendor/textwrap/Cargo.toml | 13 +- src/vendor/textwrap/Cargo.toml.orig | 6 +- src/vendor/textwrap/README.md | 50 +- src/vendor/textwrap/examples/termwidth.rs | 9 +- src/vendor/textwrap/src/lib.rs | 62 +- src/vendor/textwrap/tests/version-numbers.rs | 12 + src/vendor/unicode-bidi/.appveyor.yml | 19 + src/vendor/unicode-bidi/.cargo-checksum.json | 1 + src/vendor/unicode-bidi/.cargo-ok | 0 src/vendor/unicode-bidi/.gitignore | 4 + src/vendor/unicode-bidi/.rustfmt.toml | 6 + src/vendor/unicode-bidi/.travis.yml | 38 + src/vendor/unicode-bidi/AUTHORS | 4 + src/vendor/unicode-bidi/COPYRIGHT | 8 + src/vendor/unicode-bidi/Cargo.toml | 49 + src/vendor/unicode-bidi/Cargo.toml.orig | 37 + src/vendor/unicode-bidi/LICENSE-APACHE | 201 + src/vendor/unicode-bidi/LICENSE-MIT | 25 + src/vendor/unicode-bidi/README.md | 12 + src/vendor/unicode-bidi/src/char_data/mod.rs | 136 + .../unicode-bidi/src/char_data/tables.rs | 464 + src/vendor/unicode-bidi/src/deprecated.rs | 90 + src/vendor/unicode-bidi/src/explicit.rs | 186 + src/vendor/unicode-bidi/src/format_chars.rs | 42 + src/vendor/unicode-bidi/src/implicit.rs | 228 + src/vendor/unicode-bidi/src/level.rs | 382 + src/vendor/unicode-bidi/src/lib.rs | 890 + src/vendor/unicode-bidi/src/prepare.rs | 366 + .../.cargo-checksum.json | 1 + src/vendor/unicode-normalization/.cargo-ok | 0 src/vendor/unicode-normalization/.gitignore | 5 + src/vendor/unicode-normalization/.travis.yml | 20 + src/vendor/unicode-normalization/COPYRIGHT | 7 + src/vendor/unicode-normalization/Cargo.toml | 24 + .../unicode-normalization/Cargo.toml.orig | 21 + .../unicode-normalization/LICENSE-APACHE | 201 + src/vendor/unicode-normalization/LICENSE-MIT | 25 + src/vendor/unicode-normalization/README.md | 32 + .../unicode-normalization/scripts/unicode.py | 387 + .../scripts/unicode_gen_normtests.py | 81 + .../unicode-normalization/src/decompose.rs | 145 + src/vendor/unicode-normalization/src/lib.rs | 138 + .../unicode-normalization/src/normalize.rs | 167 + .../unicode-normalization/src/recompose.rs | 147 + .../unicode-normalization/src/tables.rs | 10928 ++++ src/vendor/unicode-normalization/src/test.rs | 181 + .../unicode-normalization/src/testdata.rs | 23216 +++++++ src/vendor/url/.cargo-checksum.json | 1 + src/vendor/url/.cargo-ok | 0 src/vendor/url/.gitignore | 3 + src/vendor/url/.travis.yml | 9 + src/vendor/url/Cargo.toml | 74 + src/vendor/url/Cargo.toml.orig | 49 + src/vendor/url/LICENSE-APACHE | 201 + src/vendor/url/LICENSE-MIT | 25 + src/vendor/url/Makefile | 6 + src/vendor/url/README.md | 10 + src/vendor/url/UPGRADING.md | 263 + src/vendor/url/appveyor.yml | 13 + src/vendor/url/docs/.nojekyll | 0 src/vendor/url/docs/404.html | 3 + src/vendor/url/docs/index.html | 3 + src/vendor/url/github.png | Bin 0 -> 7786 bytes src/vendor/url/rust-url-todo | 14 + src/vendor/url/src/encoding.rs | 146 + src/vendor/url/src/form_urlencoded.rs | 403 + src/vendor/url/src/host.rs | 517 + src/vendor/url/src/lib.rs | 2429 + src/vendor/url/src/origin.rs | 130 + src/vendor/url/src/parser.rs | 1182 + src/vendor/url/src/path_segments.rs | 217 + src/vendor/url/src/quirks.rs | 217 + src/vendor/url/src/slicing.rs | 182 + src/vendor/url/tests/data.rs | 199 + src/vendor/url/tests/setters_tests.json | 1148 + src/vendor/url/tests/unit.rs | 490 + src/vendor/url/tests/urltestdata.json | 4465 ++ src/vendor/ws2_32-sys/.cargo-checksum.json | 1 + src/vendor/ws2_32-sys/.cargo-ok | 0 src/vendor/ws2_32-sys/Cargo.toml | 17 + src/vendor/ws2_32-sys/README.md | 13 + src/vendor/ws2_32-sys/build.rs | 6 + src/vendor/ws2_32-sys/src/lib.rs | 483 + version | 2 +- 5704 files changed, 1055502 insertions(+), 125810 deletions(-) create mode 100644 src/binaryen/.travis.yml create mode 100644 src/binaryen/CMakeLists.txt create mode 100644 src/binaryen/Contributing.md create mode 100644 src/binaryen/LICENSE create mode 100644 src/binaryen/README.md create mode 100644 src/binaryen/appveyor.yml create mode 100755 src/binaryen/auto_update_tests.py rename src/{jemalloc/config.stamp.in => binaryen/bin/empty.txt} (100%) create mode 100755 src/binaryen/build-js.sh create mode 100755 src/binaryen/check.py create mode 100644 src/binaryen/docs/binaryen.js.Markdown create mode 100644 src/binaryen/media/example.png create mode 100755 src/binaryen/scripts/__init__.py create mode 100755 src/binaryen/scripts/clean_c_api_trace.py create mode 100755 src/binaryen/scripts/fuzz_passes.py create mode 100755 src/binaryen/scripts/fuzz_passes_wast.py create mode 100755 src/binaryen/scripts/fuzz_relooper.py create mode 100755 src/binaryen/scripts/process_optimize_instructions.py create mode 100644 src/binaryen/scripts/spidermonkify.py create mode 100755 src/binaryen/scripts/storage.py create mode 100644 src/binaryen/scripts/strip_local_names.py create mode 100755 src/binaryen/scripts/test/__init__.py create mode 100644 src/binaryen/scripts/test/asm2wasm.py create mode 100755 src/binaryen/scripts/test/s2wasm.py create mode 100644 src/binaryen/scripts/test/shared.py create mode 100755 src/binaryen/scripts/test/support.py create mode 100755 src/binaryen/scripts/test/wasm2asm.py create mode 100644 src/binaryen/setup.cfg create mode 100644 src/binaryen/src/asm2wasm.h create mode 100644 src/binaryen/src/asm_v_wasm.h create mode 100644 src/binaryen/src/asmjs/CMakeLists.txt create mode 100644 src/binaryen/src/asmjs/asm_v_wasm.cpp create mode 100644 src/binaryen/src/asmjs/shared-constants.cpp create mode 100644 src/binaryen/src/asmjs/shared-constants.h create mode 100644 src/binaryen/src/binaryen-c.cpp create mode 100644 src/binaryen/src/binaryen-c.h create mode 100644 src/binaryen/src/cfg/CMakeLists.txt create mode 100644 src/binaryen/src/cfg/Relooper.cpp create mode 100644 src/binaryen/src/cfg/Relooper.h create mode 100644 src/binaryen/src/cfg/cfg-traversal.h create mode 100644 src/binaryen/src/compiler-support.h create mode 100644 src/binaryen/src/emscripten-optimizer/CMakeLists.txt create mode 100644 src/binaryen/src/emscripten-optimizer/istring.h create mode 100644 src/binaryen/src/emscripten-optimizer/optimizer-shared.cpp create mode 100644 src/binaryen/src/emscripten-optimizer/optimizer.h create mode 100644 src/binaryen/src/emscripten-optimizer/parser.cpp create mode 100644 src/binaryen/src/emscripten-optimizer/parser.h create mode 100644 src/binaryen/src/emscripten-optimizer/simple_ast.cpp create mode 100644 src/binaryen/src/emscripten-optimizer/simple_ast.h create mode 100644 src/binaryen/src/emscripten-optimizer/snprintf.h create mode 100644 src/binaryen/src/ir/CMakeLists.txt create mode 100644 src/binaryen/src/ir/ExpressionAnalyzer.cpp create mode 100644 src/binaryen/src/ir/ExpressionManipulator.cpp create mode 100644 src/binaryen/src/ir/LocalGraph.cpp create mode 100644 src/binaryen/src/ir/bits.h create mode 100644 src/binaryen/src/ir/block-utils.h create mode 100644 src/binaryen/src/ir/branch-utils.h create mode 100644 src/binaryen/src/ir/cost.h create mode 100644 src/binaryen/src/ir/count.h create mode 100644 src/binaryen/src/ir/effects.h create mode 100644 src/binaryen/src/ir/find_all.h create mode 100644 src/binaryen/src/ir/global-utils.h create mode 100644 src/binaryen/src/ir/hashed.h create mode 100644 src/binaryen/src/ir/import-utils.h create mode 100644 src/binaryen/src/ir/label-utils.h create mode 100644 src/binaryen/src/ir/literal-utils.h create mode 100644 src/binaryen/src/ir/load-utils.h create mode 100644 src/binaryen/src/ir/local-graph.h create mode 100644 src/binaryen/src/ir/localize.h create mode 100644 src/binaryen/src/ir/manipulation.h create mode 100644 src/binaryen/src/ir/memory-utils.h create mode 100644 src/binaryen/src/ir/module-utils.h create mode 100644 src/binaryen/src/ir/names.h create mode 100644 src/binaryen/src/ir/properties.h create mode 100644 src/binaryen/src/ir/trapping.h create mode 100644 src/binaryen/src/ir/type-updating.h create mode 100644 src/binaryen/src/ir/utils.h create mode 100644 src/binaryen/src/js/binaryen.js-post.js create mode 100644 src/binaryen/src/js/binaryen.js-pre.js create mode 100644 src/binaryen/src/literal.h create mode 100644 src/binaryen/src/mixed_arena.h create mode 100644 src/binaryen/src/parsing.h create mode 100644 src/binaryen/src/pass.h create mode 100644 src/binaryen/src/passes/CMakeLists.txt create mode 100644 src/binaryen/src/passes/CoalesceLocals.cpp create mode 100644 src/binaryen/src/passes/CodeFolding.cpp create mode 100644 src/binaryen/src/passes/CodePushing.cpp create mode 100644 src/binaryen/src/passes/ConstHoisting.cpp create mode 100644 src/binaryen/src/passes/DeadCodeElimination.cpp create mode 100644 src/binaryen/src/passes/DuplicateFunctionElimination.cpp create mode 100644 src/binaryen/src/passes/ExtractFunction.cpp create mode 100644 src/binaryen/src/passes/Flatten.cpp create mode 100644 src/binaryen/src/passes/I64ToI32Lowering.cpp create mode 100644 src/binaryen/src/passes/Inlining.cpp create mode 100644 src/binaryen/src/passes/InstrumentLocals.cpp create mode 100644 src/binaryen/src/passes/InstrumentMemory.cpp create mode 100644 src/binaryen/src/passes/LegalizeJSInterface.cpp create mode 100644 src/binaryen/src/passes/LocalCSE.cpp create mode 100644 src/binaryen/src/passes/LogExecution.cpp create mode 100644 src/binaryen/src/passes/MemoryPacking.cpp create mode 100644 src/binaryen/src/passes/MergeBlocks.cpp create mode 100644 src/binaryen/src/passes/Metrics.cpp create mode 100644 src/binaryen/src/passes/NameList.cpp create mode 100644 src/binaryen/src/passes/OptimizeInstructions.cpp create mode 100644 src/binaryen/src/passes/OptimizeInstructions.wast create mode 100644 src/binaryen/src/passes/OptimizeInstructions.wast.processed create mode 100644 src/binaryen/src/passes/PickLoadSigns.cpp create mode 100644 src/binaryen/src/passes/PostEmscripten.cpp create mode 100644 src/binaryen/src/passes/Precompute.cpp create mode 100644 src/binaryen/src/passes/Print.cpp create mode 100644 src/binaryen/src/passes/PrintCallGraph.cpp create mode 100644 src/binaryen/src/passes/ReReloop.cpp create mode 100644 src/binaryen/src/passes/RelooperJumpThreading.cpp create mode 100644 src/binaryen/src/passes/RemoveImports.cpp create mode 100644 src/binaryen/src/passes/RemoveMemory.cpp create mode 100644 src/binaryen/src/passes/RemoveUnusedBrs.cpp create mode 100644 src/binaryen/src/passes/RemoveUnusedModuleElements.cpp create mode 100644 src/binaryen/src/passes/RemoveUnusedNames.cpp create mode 100644 src/binaryen/src/passes/ReorderFunctions.cpp create mode 100644 src/binaryen/src/passes/ReorderLocals.cpp create mode 100644 src/binaryen/src/passes/SSAify.cpp create mode 100644 src/binaryen/src/passes/SafeHeap.cpp create mode 100644 src/binaryen/src/passes/SimplifyLocals.cpp create mode 100644 src/binaryen/src/passes/TrapMode.cpp create mode 100644 src/binaryen/src/passes/Untee.cpp create mode 100644 src/binaryen/src/passes/Vacuum.cpp create mode 100644 src/binaryen/src/passes/pass.cpp create mode 100644 src/binaryen/src/passes/passes.h create mode 100644 src/binaryen/src/pretty_printing.h create mode 100644 src/binaryen/src/s2wasm.h create mode 100644 src/binaryen/src/shared-constants.h create mode 100644 src/binaryen/src/shell-interface.h create mode 100644 src/binaryen/src/support/CMakeLists.txt create mode 100644 src/binaryen/src/support/archive.cpp create mode 100644 src/binaryen/src/support/archive.h create mode 100644 src/binaryen/src/support/bits.cpp create mode 100644 src/binaryen/src/support/bits.h create mode 100644 src/binaryen/src/support/colors.cpp create mode 100644 src/binaryen/src/support/colors.h create mode 100644 src/binaryen/src/support/command-line.cpp create mode 100644 src/binaryen/src/support/command-line.h create mode 100644 src/binaryen/src/support/file.cpp create mode 100644 src/binaryen/src/support/file.h create mode 100644 src/binaryen/src/support/hash.h create mode 100644 src/binaryen/src/support/learning.h create mode 100644 src/binaryen/src/support/name.h create mode 100644 src/binaryen/src/support/permutations.h create mode 100644 src/binaryen/src/support/safe_integer.cpp create mode 100644 src/binaryen/src/support/safe_integer.h create mode 100644 src/binaryen/src/support/threads.cpp create mode 100644 src/binaryen/src/support/threads.h create mode 100644 src/binaryen/src/support/timing.h create mode 100644 src/binaryen/src/support/utilities.h create mode 100644 src/binaryen/src/templates/normal.js create mode 100644 src/binaryen/src/templates/wasm.js create mode 100644 src/binaryen/src/tools/asm2wasm.cpp create mode 100644 src/binaryen/src/tools/execution-results.h create mode 100644 src/binaryen/src/tools/fuzzing.h create mode 100644 src/binaryen/src/tools/js-wrapper.h create mode 100644 src/binaryen/src/tools/optimization-options.h create mode 100644 src/binaryen/src/tools/s2wasm.cpp create mode 100644 src/binaryen/src/tools/spec-wrapper.h create mode 100644 src/binaryen/src/tools/tool-utils.h create mode 100644 src/binaryen/src/tools/wasm-as.cpp create mode 100644 src/binaryen/src/tools/wasm-ctor-eval.cpp create mode 100644 src/binaryen/src/tools/wasm-dis.cpp create mode 100644 src/binaryen/src/tools/wasm-merge.cpp create mode 100644 src/binaryen/src/tools/wasm-opt.cpp create mode 100644 src/binaryen/src/tools/wasm-reduce.cpp create mode 100644 src/binaryen/src/tools/wasm-shell.cpp create mode 100644 src/binaryen/src/tools/wasm2asm.cpp create mode 100644 src/binaryen/src/wasm-binary.h create mode 100644 src/binaryen/src/wasm-builder.h create mode 100644 src/binaryen/src/wasm-emscripten.cpp create mode 100644 src/binaryen/src/wasm-emscripten.h create mode 100644 src/binaryen/src/wasm-interpreter.cpp create mode 100644 src/binaryen/src/wasm-interpreter.h create mode 100644 src/binaryen/src/wasm-io.h create mode 100644 src/binaryen/src/wasm-js.cpp create mode 100644 src/binaryen/src/wasm-linker.cpp create mode 100644 src/binaryen/src/wasm-linker.h create mode 100644 src/binaryen/src/wasm-module-building.h create mode 100644 src/binaryen/src/wasm-printing.h create mode 100644 src/binaryen/src/wasm-s-parser.h create mode 100644 src/binaryen/src/wasm-traversal.h create mode 100644 src/binaryen/src/wasm-type.h create mode 100644 src/binaryen/src/wasm-validator.h create mode 100644 src/binaryen/src/wasm.h create mode 100644 src/binaryen/src/wasm/CMakeLists.txt create mode 100644 src/binaryen/src/wasm/literal.cpp create mode 100644 src/binaryen/src/wasm/wasm-binary.cpp create mode 100644 src/binaryen/src/wasm/wasm-io.cpp create mode 100644 src/binaryen/src/wasm/wasm-s-parser.cpp create mode 100644 src/binaryen/src/wasm/wasm-type.cpp create mode 100644 src/binaryen/src/wasm/wasm-validator.cpp create mode 100644 src/binaryen/src/wasm/wasm.cpp create mode 100644 src/binaryen/src/wasm2asm.h create mode 100755 src/binaryen/test/__init__.py create mode 100644 src/binaryen/test/address.2asm.js create mode 100644 src/binaryen/test/atomics.wast create mode 100644 src/binaryen/test/atomics.wast.from-wast create mode 100644 src/binaryen/test/atomics.wast.fromBinary create mode 100644 src/binaryen/test/atomics.wast.fromBinary.noDebugInfo create mode 100644 src/binaryen/test/bigswitch.cpp create mode 100644 src/binaryen/test/bigswitch.txt create mode 100644 src/binaryen/test/binaryen.js/call_import_error.js create mode 100644 src/binaryen/test/binaryen.js/call_import_error.js.txt create mode 100644 src/binaryen/test/binaryen.js/emit_asmjs.js create mode 100644 src/binaryen/test/binaryen.js/emit_asmjs.js.txt create mode 100644 src/binaryen/test/binaryen.js/hello-world.js create mode 100644 src/binaryen/test/binaryen.js/hello-world.js.txt create mode 100644 src/binaryen/test/binaryen.js/kitchen-sink.js create mode 100644 src/binaryen/test/binaryen.js/kitchen-sink.js.txt create mode 100644 src/binaryen/test/br_table_temp.2asm.js create mode 100644 src/binaryen/test/break-to-return.wasm create mode 100644 src/binaryen/test/break-to-return.wasm.fromBinary create mode 100644 src/binaryen/test/calls.cpp create mode 100644 src/binaryen/test/calls.emcc create mode 100644 src/binaryen/test/calls.post.js create mode 100644 src/binaryen/test/calls.txt create mode 100644 src/binaryen/test/consume-stacky.wasm create mode 100644 src/binaryen/test/consume-stacky.wasm.fromBinary create mode 100644 src/binaryen/test/control_flow.cpp create mode 100644 src/binaryen/test/control_flow.emcc create mode 100644 src/binaryen/test/control_flow.post.js create mode 100644 src/binaryen/test/control_flow.txt create mode 100644 src/binaryen/test/ctor-eval/bad-indirect-call.wast create mode 100644 src/binaryen/test/ctor-eval/bad-indirect-call.wast.ctors create mode 100644 src/binaryen/test/ctor-eval/bad-indirect-call.wast.out create mode 100644 src/binaryen/test/ctor-eval/bad-indirect-call2.wast create mode 100644 src/binaryen/test/ctor-eval/bad-indirect-call2.wast.ctors create mode 100644 src/binaryen/test/ctor-eval/bad-indirect-call2.wast.out create mode 100644 src/binaryen/test/ctor-eval/basics-flatten.wast create mode 100644 src/binaryen/test/ctor-eval/basics-flatten.wast.ctors create mode 100644 src/binaryen/test/ctor-eval/basics-flatten.wast.out create mode 100644 src/binaryen/test/ctor-eval/basics.wast create mode 100644 src/binaryen/test/ctor-eval/basics.wast.ctors create mode 100644 src/binaryen/test/ctor-eval/basics.wast.out create mode 100644 src/binaryen/test/ctor-eval/imported-min.wast create mode 100644 src/binaryen/test/ctor-eval/imported-min.wast.ctors create mode 100644 src/binaryen/test/ctor-eval/imported-min.wast.out create mode 100644 src/binaryen/test/ctor-eval/imported.wast create mode 100644 src/binaryen/test/ctor-eval/imported.wast.ctors create mode 100644 src/binaryen/test/ctor-eval/imported.wast.out create mode 100644 src/binaryen/test/ctor-eval/imported2.wast create mode 100644 src/binaryen/test/ctor-eval/imported2.wast.ctors create mode 100644 src/binaryen/test/ctor-eval/imported2.wast.out create mode 100644 src/binaryen/test/ctor-eval/imported3.wast create mode 100644 src/binaryen/test/ctor-eval/imported3.wast.ctors create mode 100644 src/binaryen/test/ctor-eval/imported3.wast.out create mode 100644 src/binaryen/test/ctor-eval/indirect-call3.wast create mode 100644 src/binaryen/test/ctor-eval/indirect-call3.wast.ctors create mode 100644 src/binaryen/test/ctor-eval/indirect-call3.wast.out create mode 100644 src/binaryen/test/ctor-eval/just_some.wast create mode 100644 src/binaryen/test/ctor-eval/just_some.wast.ctors create mode 100644 src/binaryen/test/ctor-eval/just_some.wast.out create mode 100644 src/binaryen/test/ctor-eval/no_partial.wast create mode 100644 src/binaryen/test/ctor-eval/no_partial.wast.ctors create mode 100644 src/binaryen/test/ctor-eval/no_partial.wast.out create mode 100644 src/binaryen/test/ctor-eval/unsafe_call.wast create mode 100644 src/binaryen/test/ctor-eval/unsafe_call.wast.ctors create mode 100644 src/binaryen/test/ctor-eval/unsafe_call.wast.out create mode 100644 src/binaryen/test/ctor-eval/unsafe_store.wast create mode 100644 src/binaryen/test/ctor-eval/unsafe_store.wast.ctors create mode 100644 src/binaryen/test/ctor-eval/unsafe_store.wast.out create mode 100644 src/binaryen/test/ctor-eval/unsafe_store2.wast create mode 100644 src/binaryen/test/ctor-eval/unsafe_store2.wast.ctors create mode 100644 src/binaryen/test/ctor-eval/unsafe_store2.wast.out create mode 100644 src/binaryen/test/ctor-eval/unsafe_store3.wast create mode 100644 src/binaryen/test/ctor-eval/unsafe_store3.wast.ctors create mode 100644 src/binaryen/test/ctor-eval/unsafe_store3.wast.out create mode 100644 src/binaryen/test/debugInfo.asm.js create mode 100644 src/binaryen/test/debugInfo.fromasm create mode 100644 src/binaryen/test/debugInfo.fromasm.clamp create mode 100644 src/binaryen/test/debugInfo.fromasm.clamp.map create mode 100644 src/binaryen/test/debugInfo.fromasm.clamp.no-opts create mode 100644 src/binaryen/test/debugInfo.fromasm.clamp.no-opts.map create mode 100644 src/binaryen/test/debugInfo.fromasm.imprecise create mode 100644 src/binaryen/test/debugInfo.fromasm.imprecise.map create mode 100644 src/binaryen/test/debugInfo.fromasm.imprecise.no-opts create mode 100644 src/binaryen/test/debugInfo.fromasm.imprecise.no-opts.map create mode 100644 src/binaryen/test/debugInfo.fromasm.map create mode 100644 src/binaryen/test/debugInfo.fromasm.no-opts create mode 100644 src/binaryen/test/debugInfo.fromasm.no-opts.map create mode 100644 src/binaryen/test/dot_s/alias.s create mode 100644 src/binaryen/test/dot_s/alias.wast create mode 100644 src/binaryen/test/dot_s/alternate-lcomm.s create mode 100644 src/binaryen/test/dot_s/alternate-lcomm.wast create mode 100644 src/binaryen/test/dot_s/asm_const.s create mode 100644 src/binaryen/test/dot_s/asm_const.wast create mode 100644 src/binaryen/test/dot_s/basics.s create mode 100644 src/binaryen/test/dot_s/basics.wast create mode 100644 src/binaryen/test/dot_s/bcp-1.s create mode 100644 src/binaryen/test/dot_s/bcp-1.wast create mode 100644 src/binaryen/test/dot_s/data-offset-folding.s create mode 100644 src/binaryen/test/dot_s/data-offset-folding.wast create mode 100644 src/binaryen/test/dot_s/debug.s create mode 100644 src/binaryen/test/dot_s/debug.wast create mode 100644 src/binaryen/test/dot_s/dso_handle.s create mode 100644 src/binaryen/test/dot_s/dso_handle.wast create mode 100644 src/binaryen/test/dot_s/dyncall.c create mode 100644 src/binaryen/test/dot_s/dyncall.s create mode 100644 src/binaryen/test/dot_s/dyncall.wast create mode 100644 src/binaryen/test/dot_s/exit.s create mode 100644 src/binaryen/test/dot_s/exit.wast create mode 100644 src/binaryen/test/dot_s/export_malloc_free.s create mode 100644 src/binaryen/test/dot_s/export_malloc_free.wast create mode 100644 src/binaryen/test/dot_s/fix_em_ehsjlj_names.s create mode 100644 src/binaryen/test/dot_s/fix_em_ehsjlj_names.wast create mode 100644 src/binaryen/test/dot_s/function-data-sections.s create mode 100644 src/binaryen/test/dot_s/function-data-sections.wast create mode 100644 src/binaryen/test/dot_s/globals.s create mode 100644 src/binaryen/test/dot_s/globals.wast create mode 100644 src/binaryen/test/dot_s/hostFinalize.s create mode 100644 src/binaryen/test/dot_s/hostFinalize.wast create mode 100644 src/binaryen/test/dot_s/indidx.s create mode 100644 src/binaryen/test/dot_s/indidx.wast create mode 100644 src/binaryen/test/dot_s/indirect-import.c create mode 100644 src/binaryen/test/dot_s/indirect-import.s create mode 100644 src/binaryen/test/dot_s/indirect-import.wast create mode 100644 src/binaryen/test/dot_s/initializers.s create mode 100644 src/binaryen/test/dot_s/initializers.wast create mode 100644 src/binaryen/test/dot_s/lcomm-in-text-segment.s create mode 100644 src/binaryen/test/dot_s/lcomm-in-text-segment.wast create mode 100644 src/binaryen/test/dot_s/local_align.s create mode 100644 src/binaryen/test/dot_s/local_align.wast create mode 100644 src/binaryen/test/dot_s/macClangMetaData.s create mode 100644 src/binaryen/test/dot_s/macClangMetaData.wast create mode 100644 src/binaryen/test/dot_s/memops.s create mode 100644 src/binaryen/test/dot_s/memops.wast create mode 100644 src/binaryen/test/dot_s/minimal.s create mode 100644 src/binaryen/test/dot_s/minimal.wast create mode 100644 src/binaryen/test/dot_s/permute.s create mode 100644 src/binaryen/test/dot_s/permute.wast create mode 100644 src/binaryen/test/dot_s/relocation.s create mode 100644 src/binaryen/test/dot_s/relocation.wast create mode 100644 src/binaryen/test/dot_s/return.s create mode 100644 src/binaryen/test/dot_s/return.wast create mode 100644 src/binaryen/test/dot_s/start_main0.s create mode 100644 src/binaryen/test/dot_s/start_main0.wast create mode 100644 src/binaryen/test/dot_s/start_main2.s create mode 100644 src/binaryen/test/dot_s/start_main2.wast create mode 100644 src/binaryen/test/dot_s/symbolic-offset.s create mode 100644 src/binaryen/test/dot_s/symbolic-offset.wast create mode 100644 src/binaryen/test/dot_s/text_before_type.s create mode 100644 src/binaryen/test/dot_s/text_before_type.wast create mode 100644 src/binaryen/test/dot_s/traps.clamp.wast create mode 100644 src/binaryen/test/dot_s/traps.js.wast create mode 100644 src/binaryen/test/dot_s/traps.s create mode 100644 src/binaryen/test/dot_s/traps.wast create mode 100644 src/binaryen/test/dot_s/unreachable_blocks.s create mode 100644 src/binaryen/test/dot_s/unreachable_blocks.wast create mode 100644 src/binaryen/test/dot_s/visibilities.s create mode 100644 src/binaryen/test/dot_s/visibilities.wast create mode 100644 src/binaryen/test/dylib.wasm create mode 100644 src/binaryen/test/dylib.wasm.fromBinary create mode 100644 src/binaryen/test/dynamicLibrary.asm.js create mode 100644 src/binaryen/test/dynamicLibrary.fromasm create mode 100644 src/binaryen/test/dynamicLibrary.fromasm.clamp create mode 100644 src/binaryen/test/dynamicLibrary.fromasm.clamp.no-opts create mode 100644 src/binaryen/test/dynamicLibrary.fromasm.imprecise create mode 100644 src/binaryen/test/dynamicLibrary.fromasm.imprecise.no-opts create mode 100644 src/binaryen/test/dynamicLibrary.fromasm.no-opts create mode 100644 src/binaryen/test/emcc_O2_hello_world.asm.js create mode 100644 src/binaryen/test/emcc_O2_hello_world.fromasm create mode 100644 src/binaryen/test/emcc_O2_hello_world.fromasm.clamp create mode 100644 src/binaryen/test/emcc_O2_hello_world.fromasm.clamp.no-opts create mode 100644 src/binaryen/test/emcc_O2_hello_world.fromasm.imprecise create mode 100644 src/binaryen/test/emcc_O2_hello_world.fromasm.imprecise.no-opts create mode 100644 src/binaryen/test/emcc_O2_hello_world.fromasm.no-opts create mode 100644 src/binaryen/test/emcc_O2_hello_world.wast.fromBinary create mode 100644 src/binaryen/test/emcc_hello_world.asm.js create mode 100644 src/binaryen/test/emcc_hello_world.fromasm create mode 100644 src/binaryen/test/emcc_hello_world.fromasm.clamp create mode 100644 src/binaryen/test/emcc_hello_world.fromasm.clamp.no-opts create mode 100644 src/binaryen/test/emcc_hello_world.fromasm.imprecise create mode 100644 src/binaryen/test/emcc_hello_world.fromasm.imprecise.no-opts create mode 100644 src/binaryen/test/emcc_hello_world.fromasm.no-opts create mode 100644 src/binaryen/test/emcc_hello_world.wast.fromBinary create mode 100644 src/binaryen/test/empty.asm.js create mode 100644 src/binaryen/test/empty.fromasm create mode 100644 src/binaryen/test/empty.fromasm.clamp create mode 100644 src/binaryen/test/empty.fromasm.clamp.no-opts create mode 100644 src/binaryen/test/empty.fromasm.imprecise create mode 100644 src/binaryen/test/empty.fromasm.imprecise.no-opts create mode 100644 src/binaryen/test/empty.fromasm.no-opts create mode 100644 src/binaryen/test/empty_imported_table.2asm.js create mode 100644 src/binaryen/test/empty_imported_table.wast create mode 100644 src/binaryen/test/empty_imported_table.wast.from-wast create mode 100644 src/binaryen/test/empty_imported_table.wast.fromBinary create mode 100644 src/binaryen/test/empty_imported_table.wast.fromBinary.noDebugInfo create mode 100644 src/binaryen/test/empty_table.2asm.js create mode 100644 src/binaryen/test/empty_table.wast create mode 100644 src/binaryen/test/empty_table.wast.from-wast create mode 100644 src/binaryen/test/empty_table.wast.fromBinary create mode 100644 src/binaryen/test/empty_table.wast.fromBinary.noDebugInfo create mode 100644 src/binaryen/test/example/c-api-hello-world.c create mode 100644 src/binaryen/test/example/c-api-hello-world.txt create mode 100644 src/binaryen/test/example/c-api-kitchen-sink.c create mode 100644 src/binaryen/test/example/c-api-kitchen-sink.txt create mode 100644 src/binaryen/test/example/c-api-kitchen-sink.txt.txt create mode 100644 src/binaryen/test/example/c-api-relooper-unreachable-if.cpp rename src/{vendor/bitflags-0.8.2/.cargo-ok => binaryen/test/example/c-api-relooper-unreachable-if.txt} (100%) create mode 100644 src/binaryen/test/example/c-api-unused-mem.cpp create mode 100644 src/binaryen/test/example/c-api-unused-mem.txt create mode 100644 src/binaryen/test/example/relooper-fuzz.c create mode 100644 src/binaryen/test/example/relooper-fuzz.txt create mode 100644 src/binaryen/test/example/relooper-fuzz1.c create mode 100644 src/binaryen/test/example/relooper-fuzz1.txt create mode 100644 src/binaryen/test/fannkuch.args create mode 100644 src/binaryen/test/fannkuch.cpp create mode 100644 src/binaryen/test/fannkuch.txt create mode 100644 src/binaryen/test/fasta.args create mode 100644 src/binaryen/test/fasta.cpp create mode 100644 src/binaryen/test/fasta.txt create mode 100644 src/binaryen/test/fib-dbg.wasm create mode 100644 src/binaryen/test/fib-dbg.wasm.fromBinary create mode 100644 src/binaryen/test/fib-dbg.wasm.map create mode 100644 src/binaryen/test/float_ops.cpp create mode 100644 src/binaryen/test/float_ops.emcc create mode 100644 src/binaryen/test/float_ops.post.js create mode 100644 src/binaryen/test/float_ops.txt create mode 100644 src/binaryen/test/forward.2asm.js create mode 100644 src/binaryen/test/grow_memory.cpp create mode 100644 src/binaryen/test/grow_memory.emcc create mode 100644 src/binaryen/test/grow_memory.txt create mode 100644 src/binaryen/test/hello_libcxx.cpp create mode 100644 src/binaryen/test/hello_libcxx.txt create mode 100644 src/binaryen/test/hello_world.2asm.js create mode 100644 src/binaryen/test/hello_world.asm.js create mode 100644 src/binaryen/test/hello_world.c create mode 100644 src/binaryen/test/hello_world.fromasm create mode 100644 src/binaryen/test/hello_world.fromasm.clamp create mode 100644 src/binaryen/test/hello_world.fromasm.clamp.no-opts create mode 100644 src/binaryen/test/hello_world.fromasm.imprecise create mode 100644 src/binaryen/test/hello_world.fromasm.imprecise.no-opts create mode 100644 src/binaryen/test/hello_world.fromasm.no-opts create mode 100644 src/binaryen/test/hello_world.txt create mode 100644 src/binaryen/test/hello_world.wast create mode 100644 src/binaryen/test/hello_world.wast.from-wast create mode 100644 src/binaryen/test/hello_world.wast.fromBinary create mode 100644 src/binaryen/test/hello_world.wast.fromBinary.noDebugInfo create mode 100644 src/binaryen/test/i32.2asm.js create mode 100644 src/binaryen/test/i64-setTempRet0.asm.js create mode 100644 src/binaryen/test/i64-setTempRet0.fromasm create mode 100644 src/binaryen/test/i64-setTempRet0.fromasm.clamp create mode 100644 src/binaryen/test/i64-setTempRet0.fromasm.clamp.no-opts create mode 100644 src/binaryen/test/i64-setTempRet0.fromasm.imprecise create mode 100644 src/binaryen/test/i64-setTempRet0.fromasm.imprecise.no-opts create mode 100644 src/binaryen/test/i64-setTempRet0.fromasm.no-opts create mode 100644 src/binaryen/test/importedSignCast.asm.js create mode 100644 src/binaryen/test/importedSignCast.fromasm create mode 100644 src/binaryen/test/importedSignCast.fromasm.clamp create mode 100644 src/binaryen/test/importedSignCast.fromasm.clamp.no-opts create mode 100644 src/binaryen/test/importedSignCast.fromasm.imprecise create mode 100644 src/binaryen/test/importedSignCast.fromasm.imprecise.no-opts create mode 100644 src/binaryen/test/importedSignCast.fromasm.no-opts create mode 100644 src/binaryen/test/imported_memory.wast create mode 100644 src/binaryen/test/imported_memory.wast.from-wast create mode 100644 src/binaryen/test/imported_memory.wast.fromBinary create mode 100644 src/binaryen/test/imported_memory.wast.fromBinary.noDebugInfo create mode 100644 src/binaryen/test/imported_memory_growth.wast create mode 100644 src/binaryen/test/imported_memory_growth.wast.from-wast create mode 100644 src/binaryen/test/imported_memory_growth.wast.fromBinary create mode 100644 src/binaryen/test/imported_memory_growth.wast.fromBinary.noDebugInfo create mode 100644 src/binaryen/test/int_ops.c create mode 100644 src/binaryen/test/int_ops.emcc create mode 100644 src/binaryen/test/int_ops.post.js create mode 100644 src/binaryen/test/int_ops.txt create mode 100644 src/binaryen/test/kitchen_sink.wast create mode 100644 src/binaryen/test/kitchen_sink.wast.from-wast create mode 100644 src/binaryen/test/kitchen_sink.wast.fromBinary create mode 100644 src/binaryen/test/kitchen_sink.wast.fromBinary.noDebugInfo create mode 100644 src/binaryen/test/linker/archive/bar.s create mode 100644 src/binaryen/test/linker/archive/bar_with_very_long_filename.s create mode 100644 src/binaryen/test/linker/archive/barlong.a create mode 100644 src/binaryen/test/linker/archive/baz.s create mode 100644 src/binaryen/test/linker/archive/foo.s create mode 100644 src/binaryen/test/linker/archive/foobar.a create mode 100644 src/binaryen/test/linker/bar.c create mode 100644 src/binaryen/test/linker/baz.c create mode 100644 src/binaryen/test/linker/foo.c create mode 100644 src/binaryen/test/linker/main.c create mode 100644 src/binaryen/test/linker/main.s create mode 100644 src/binaryen/test/linker/quux.c create mode 100644 src/binaryen/test/llvm_autogenerated/byval.s create mode 100644 src/binaryen/test/llvm_autogenerated/byval.wast create mode 100644 src/binaryen/test/llvm_autogenerated/call.s create mode 100644 src/binaryen/test/llvm_autogenerated/call.wast create mode 100644 src/binaryen/test/llvm_autogenerated/cfg-stackify.s create mode 100644 src/binaryen/test/llvm_autogenerated/cfg-stackify.wast create mode 100644 src/binaryen/test/llvm_autogenerated/comparisons_f32.s create mode 100644 src/binaryen/test/llvm_autogenerated/comparisons_f32.wast create mode 100644 src/binaryen/test/llvm_autogenerated/comparisons_f64.s create mode 100644 src/binaryen/test/llvm_autogenerated/comparisons_f64.wast create mode 100644 src/binaryen/test/llvm_autogenerated/comparisons_i32.s create mode 100644 src/binaryen/test/llvm_autogenerated/comparisons_i32.wast create mode 100644 src/binaryen/test/llvm_autogenerated/comparisons_i64.s create mode 100644 src/binaryen/test/llvm_autogenerated/comparisons_i64.wast create mode 100644 src/binaryen/test/llvm_autogenerated/conv.s create mode 100644 src/binaryen/test/llvm_autogenerated/conv.wast create mode 100644 src/binaryen/test/llvm_autogenerated/copysign-casts.s create mode 100644 src/binaryen/test/llvm_autogenerated/copysign-casts.wast create mode 100644 src/binaryen/test/llvm_autogenerated/cpus.s create mode 100644 src/binaryen/test/llvm_autogenerated/cpus.wast create mode 100644 src/binaryen/test/llvm_autogenerated/dead-vreg.s create mode 100644 src/binaryen/test/llvm_autogenerated/dead-vreg.wast create mode 100644 src/binaryen/test/llvm_autogenerated/divrem-constant.s create mode 100644 src/binaryen/test/llvm_autogenerated/divrem-constant.wast create mode 100644 src/binaryen/test/llvm_autogenerated/f32.s create mode 100644 src/binaryen/test/llvm_autogenerated/f32.wast create mode 100644 src/binaryen/test/llvm_autogenerated/f64.s create mode 100644 src/binaryen/test/llvm_autogenerated/f64.wast create mode 100644 src/binaryen/test/llvm_autogenerated/fast-isel-noreg.s create mode 100644 src/binaryen/test/llvm_autogenerated/fast-isel-noreg.wast create mode 100644 src/binaryen/test/llvm_autogenerated/fast-isel.s create mode 100644 src/binaryen/test/llvm_autogenerated/fast-isel.wast create mode 100644 src/binaryen/test/llvm_autogenerated/frem.s create mode 100644 src/binaryen/test/llvm_autogenerated/frem.wast create mode 100644 src/binaryen/test/llvm_autogenerated/func.s create mode 100644 src/binaryen/test/llvm_autogenerated/func.wast create mode 100644 src/binaryen/test/llvm_autogenerated/global.s create mode 100644 src/binaryen/test/llvm_autogenerated/global.wast create mode 100644 src/binaryen/test/llvm_autogenerated/globl.s create mode 100644 src/binaryen/test/llvm_autogenerated/globl.wast create mode 100644 src/binaryen/test/llvm_autogenerated/i128.s create mode 100644 src/binaryen/test/llvm_autogenerated/i128.wast create mode 100644 src/binaryen/test/llvm_autogenerated/i32-load-store-alignment.s create mode 100644 src/binaryen/test/llvm_autogenerated/i32-load-store-alignment.wast create mode 100644 src/binaryen/test/llvm_autogenerated/i32.s create mode 100644 src/binaryen/test/llvm_autogenerated/i32.wast create mode 100644 src/binaryen/test/llvm_autogenerated/i64-load-store-alignment.s create mode 100644 src/binaryen/test/llvm_autogenerated/i64-load-store-alignment.wast create mode 100644 src/binaryen/test/llvm_autogenerated/i64.s create mode 100644 src/binaryen/test/llvm_autogenerated/i64.wast create mode 100644 src/binaryen/test/llvm_autogenerated/ident.s create mode 100644 src/binaryen/test/llvm_autogenerated/ident.wast create mode 100644 src/binaryen/test/llvm_autogenerated/immediates.s create mode 100644 src/binaryen/test/llvm_autogenerated/immediates.wast create mode 100644 src/binaryen/test/llvm_autogenerated/indirect-import.s create mode 100644 src/binaryen/test/llvm_autogenerated/indirect-import.wast create mode 100644 src/binaryen/test/llvm_autogenerated/irreducible-cfg.s create mode 100644 src/binaryen/test/llvm_autogenerated/irreducible-cfg.wast create mode 100644 src/binaryen/test/llvm_autogenerated/legalize.s create mode 100644 src/binaryen/test/llvm_autogenerated/legalize.wast create mode 100755 src/binaryen/test/llvm_autogenerated/llvm-to-s.py create mode 100644 src/binaryen/test/llvm_autogenerated/load-ext.s create mode 100644 src/binaryen/test/llvm_autogenerated/load-ext.wast create mode 100644 src/binaryen/test/llvm_autogenerated/load-store-i1.s create mode 100644 src/binaryen/test/llvm_autogenerated/load-store-i1.wast create mode 100644 src/binaryen/test/llvm_autogenerated/load.s create mode 100644 src/binaryen/test/llvm_autogenerated/load.wast create mode 100644 src/binaryen/test/llvm_autogenerated/lower-em-ehsjlj-options.s create mode 100644 src/binaryen/test/llvm_autogenerated/lower-em-ehsjlj-options.wast create mode 100644 src/binaryen/test/llvm_autogenerated/mem-intrinsics.s create mode 100644 src/binaryen/test/llvm_autogenerated/mem-intrinsics.wast create mode 100644 src/binaryen/test/llvm_autogenerated/memory-addr32.s create mode 100644 src/binaryen/test/llvm_autogenerated/memory-addr32.wast create mode 100644 src/binaryen/test/llvm_autogenerated/negative-base-reg.s create mode 100644 src/binaryen/test/llvm_autogenerated/negative-base-reg.wast create mode 100644 src/binaryen/test/llvm_autogenerated/non-executable-stack.s create mode 100644 src/binaryen/test/llvm_autogenerated/non-executable-stack.wast create mode 100644 src/binaryen/test/llvm_autogenerated/offset.s create mode 100644 src/binaryen/test/llvm_autogenerated/offset.wast create mode 100644 src/binaryen/test/llvm_autogenerated/phi.s create mode 100644 src/binaryen/test/llvm_autogenerated/phi.wast create mode 100644 src/binaryen/test/llvm_autogenerated/reg-stackify.s create mode 100644 src/binaryen/test/llvm_autogenerated/reg-stackify.wast create mode 100644 src/binaryen/test/llvm_autogenerated/return-int32.s create mode 100644 src/binaryen/test/llvm_autogenerated/return-int32.wast create mode 100644 src/binaryen/test/llvm_autogenerated/return-void.s create mode 100644 src/binaryen/test/llvm_autogenerated/return-void.wast create mode 100644 src/binaryen/test/llvm_autogenerated/select.s create mode 100644 src/binaryen/test/llvm_autogenerated/select.wast create mode 100644 src/binaryen/test/llvm_autogenerated/signext-zeroext.s create mode 100644 src/binaryen/test/llvm_autogenerated/signext-zeroext.wast rename src/{vendor/conv/.cargo-ok => binaryen/test/llvm_autogenerated/store-results.wast} (100%) create mode 100644 src/binaryen/test/llvm_autogenerated/store-trunc.s create mode 100644 src/binaryen/test/llvm_autogenerated/store-trunc.wast create mode 100644 src/binaryen/test/llvm_autogenerated/store.s create mode 100644 src/binaryen/test/llvm_autogenerated/store.wast create mode 100644 src/binaryen/test/llvm_autogenerated/switch.s create mode 100644 src/binaryen/test/llvm_autogenerated/switch.wast create mode 100644 src/binaryen/test/llvm_autogenerated/unreachable.s create mode 100644 src/binaryen/test/llvm_autogenerated/unreachable.wast create mode 100644 src/binaryen/test/llvm_autogenerated/unused-argument.s create mode 100644 src/binaryen/test/llvm_autogenerated/unused-argument.wast create mode 100644 src/binaryen/test/llvm_autogenerated/userstack.s create mode 100644 src/binaryen/test/llvm_autogenerated/userstack.wast create mode 100644 src/binaryen/test/llvm_autogenerated/varargs.s create mode 100644 src/binaryen/test/llvm_autogenerated/varargs.wast create mode 100644 src/binaryen/test/mem.cpp create mode 100644 src/binaryen/test/mem.emcc create mode 100644 src/binaryen/test/mem.post.js create mode 100644 src/binaryen/test/mem.txt create mode 100644 src/binaryen/test/memory-import.wast create mode 100644 src/binaryen/test/memory-import.wast.from-wast create mode 100644 src/binaryen/test/memory-import.wast.fromBinary create mode 100644 src/binaryen/test/memory-import.wast.fromBinary.noDebugInfo create mode 100644 src/binaryen/test/memory-shared.wast create mode 100644 src/binaryen/test/memory-shared.wast.from-wast create mode 100644 src/binaryen/test/memory-shared.wast.fromBinary create mode 100644 src/binaryen/test/memory-shared.wast.fromBinary.noDebugInfo create mode 100644 src/binaryen/test/memorygrowth.asm.js create mode 100644 src/binaryen/test/memorygrowth.fromasm create mode 100644 src/binaryen/test/memorygrowth.fromasm.clamp create mode 100644 src/binaryen/test/memorygrowth.fromasm.clamp.no-opts create mode 100644 src/binaryen/test/memorygrowth.fromasm.imprecise create mode 100644 src/binaryen/test/memorygrowth.fromasm.imprecise.no-opts create mode 100644 src/binaryen/test/memorygrowth.fromasm.no-opts create mode 100644 src/binaryen/test/merge/basics.wast create mode 100644 src/binaryen/test/merge/basics.wast.combined create mode 100644 src/binaryen/test/merge/basics.wast.combined.finalized create mode 100644 src/binaryen/test/merge/basics.wast.combined.finalized.opt create mode 100644 src/binaryen/test/merge/basics.wast.combined.finalized.opt.stdout create mode 100644 src/binaryen/test/merge/basics.wast.combined.finalized.stdout create mode 100644 src/binaryen/test/merge/basics.wast.combined.opt create mode 100644 src/binaryen/test/merge/basics.wast.combined.opt.stdout create mode 100644 src/binaryen/test/merge/basics.wast.combined.stdout create mode 100644 src/binaryen/test/merge/basics.wast.toMerge create mode 100644 src/binaryen/test/merge/dylib.wasm create mode 100644 src/binaryen/test/merge/dylib.wasm.combined create mode 100644 src/binaryen/test/merge/dylib.wasm.combined.finalized create mode 100644 src/binaryen/test/merge/dylib.wasm.combined.finalized.opt create mode 100644 src/binaryen/test/merge/dylib.wasm.combined.finalized.opt.stdout create mode 100644 src/binaryen/test/merge/dylib.wasm.combined.finalized.stdout create mode 100644 src/binaryen/test/merge/dylib.wasm.combined.opt create mode 100644 src/binaryen/test/merge/dylib.wasm.combined.opt.stdout create mode 100644 src/binaryen/test/merge/dylib.wasm.combined.stdout create mode 100644 src/binaryen/test/merge/dylib.wasm.toMerge create mode 100644 src/binaryen/test/merge/fusing.wast create mode 100644 src/binaryen/test/merge/fusing.wast.combined create mode 100644 src/binaryen/test/merge/fusing.wast.combined.finalized create mode 100644 src/binaryen/test/merge/fusing.wast.combined.finalized.opt create mode 100644 src/binaryen/test/merge/fusing.wast.combined.finalized.opt.stdout create mode 100644 src/binaryen/test/merge/fusing.wast.combined.finalized.stdout create mode 100644 src/binaryen/test/merge/fusing.wast.combined.opt create mode 100644 src/binaryen/test/merge/fusing.wast.combined.opt.stdout create mode 100644 src/binaryen/test/merge/fusing.wast.combined.stdout create mode 100644 src/binaryen/test/merge/fusing.wast.toMerge create mode 100644 src/binaryen/test/merge/global-init.wast create mode 100644 src/binaryen/test/merge/global-init.wast.combined create mode 100644 src/binaryen/test/merge/global-init.wast.combined.finalized create mode 100644 src/binaryen/test/merge/global-init.wast.combined.finalized.opt create mode 100644 src/binaryen/test/merge/global-init.wast.combined.finalized.opt.stdout create mode 100644 src/binaryen/test/merge/global-init.wast.combined.finalized.stdout create mode 100644 src/binaryen/test/merge/global-init.wast.combined.opt create mode 100644 src/binaryen/test/merge/global-init.wast.combined.opt.stdout create mode 100644 src/binaryen/test/merge/global-init.wast.combined.stdout create mode 100644 src/binaryen/test/merge/global-init.wast.toMerge create mode 100644 src/binaryen/test/merge/main-lacks-segments.wast create mode 100644 src/binaryen/test/merge/main-lacks-segments.wast.combined create mode 100644 src/binaryen/test/merge/main-lacks-segments.wast.combined.finalized create mode 100644 src/binaryen/test/merge/main-lacks-segments.wast.combined.finalized.opt create mode 100644 src/binaryen/test/merge/main-lacks-segments.wast.combined.finalized.opt.stdout create mode 100644 src/binaryen/test/merge/main-lacks-segments.wast.combined.finalized.stdout create mode 100644 src/binaryen/test/merge/main-lacks-segments.wast.combined.opt create mode 100644 src/binaryen/test/merge/main-lacks-segments.wast.combined.opt.stdout create mode 100644 src/binaryen/test/merge/main-lacks-segments.wast.combined.stdout create mode 100644 src/binaryen/test/merge/main-lacks-segments.wast.toMerge create mode 100644 src/binaryen/test/merge/post-instantiate-a.wast create mode 100644 src/binaryen/test/merge/post-instantiate-a.wast.combined create mode 100644 src/binaryen/test/merge/post-instantiate-a.wast.combined.finalized create mode 100644 src/binaryen/test/merge/post-instantiate-a.wast.combined.finalized.opt create mode 100644 src/binaryen/test/merge/post-instantiate-a.wast.combined.finalized.opt.stdout create mode 100644 src/binaryen/test/merge/post-instantiate-a.wast.combined.finalized.stdout create mode 100644 src/binaryen/test/merge/post-instantiate-a.wast.combined.opt create mode 100644 src/binaryen/test/merge/post-instantiate-a.wast.combined.opt.stdout create mode 100644 src/binaryen/test/merge/post-instantiate-a.wast.combined.stdout create mode 100644 src/binaryen/test/merge/post-instantiate-a.wast.toMerge create mode 100644 src/binaryen/test/merge/post-instantiate-b.wast create mode 100644 src/binaryen/test/merge/post-instantiate-b.wast.combined create mode 100644 src/binaryen/test/merge/post-instantiate-b.wast.combined.finalized create mode 100644 src/binaryen/test/merge/post-instantiate-b.wast.combined.finalized.opt create mode 100644 src/binaryen/test/merge/post-instantiate-b.wast.combined.finalized.opt.stdout create mode 100644 src/binaryen/test/merge/post-instantiate-b.wast.combined.finalized.stdout create mode 100644 src/binaryen/test/merge/post-instantiate-b.wast.combined.opt create mode 100644 src/binaryen/test/merge/post-instantiate-b.wast.combined.opt.stdout create mode 100644 src/binaryen/test/merge/post-instantiate-b.wast.combined.stdout create mode 100644 src/binaryen/test/merge/post-instantiate-b.wast.toMerge create mode 100644 src/binaryen/test/merge/printf.wast create mode 100644 src/binaryen/test/merge/printf.wast.combined create mode 100644 src/binaryen/test/merge/printf.wast.combined.finalized create mode 100644 src/binaryen/test/merge/printf.wast.combined.finalized.opt create mode 100644 src/binaryen/test/merge/printf.wast.combined.finalized.opt.stdout create mode 100644 src/binaryen/test/merge/printf.wast.combined.finalized.stdout create mode 100644 src/binaryen/test/merge/printf.wast.combined.opt create mode 100644 src/binaryen/test/merge/printf.wast.combined.opt.stdout create mode 100644 src/binaryen/test/merge/printf.wast.combined.stdout create mode 100644 src/binaryen/test/merge/printf.wast.toMerge create mode 100644 src/binaryen/test/min.asm.js create mode 100644 src/binaryen/test/min.fromasm create mode 100644 src/binaryen/test/min.fromasm.clamp create mode 100644 src/binaryen/test/min.fromasm.clamp.no-opts create mode 100644 src/binaryen/test/min.fromasm.imprecise create mode 100644 src/binaryen/test/min.fromasm.imprecise.no-opts create mode 100644 src/binaryen/test/min.fromasm.no-opts create mode 100644 src/binaryen/test/min.wast create mode 100644 src/binaryen/test/min.wast.from-wast create mode 100644 src/binaryen/test/min.wast.fromBinary create mode 100644 src/binaryen/test/min.wast.fromBinary.noDebugInfo create mode 100644 src/binaryen/test/noffi_f32.asm.js create mode 100644 src/binaryen/test/noffi_f32.fromasm create mode 100644 src/binaryen/test/noffi_f32.fromasm.clamp create mode 100644 src/binaryen/test/noffi_f32.fromasm.clamp.no-opts create mode 100644 src/binaryen/test/noffi_f32.fromasm.imprecise create mode 100644 src/binaryen/test/noffi_f32.fromasm.imprecise.no-opts create mode 100644 src/binaryen/test/noffi_f32.fromasm.no-opts create mode 100644 src/binaryen/test/noffi_i64.asm.js create mode 100644 src/binaryen/test/noffi_i64.fromasm create mode 100644 src/binaryen/test/noffi_i64.fromasm.clamp create mode 100644 src/binaryen/test/noffi_i64.fromasm.clamp.no-opts create mode 100644 src/binaryen/test/noffi_i64.fromasm.imprecise create mode 100644 src/binaryen/test/noffi_i64.fromasm.imprecise.no-opts create mode 100644 src/binaryen/test/noffi_i64.fromasm.no-opts create mode 100644 src/binaryen/test/passes/O.bin.txt create mode 100644 src/binaryen/test/passes/O.txt create mode 100644 src/binaryen/test/passes/O.wasm create mode 100644 src/binaryen/test/passes/O.wast create mode 100644 src/binaryen/test/passes/O3_inlining.txt create mode 100644 src/binaryen/test/passes/O3_inlining.wast create mode 100644 src/binaryen/test/passes/Oz.txt create mode 100644 src/binaryen/test/passes/Oz.wast create mode 100644 src/binaryen/test/passes/coalesce-locals-learning.txt create mode 100644 src/binaryen/test/passes/coalesce-locals-learning.wast create mode 100644 src/binaryen/test/passes/coalesce-locals.txt create mode 100644 src/binaryen/test/passes/coalesce-locals.wast create mode 100644 src/binaryen/test/passes/code-folding.txt create mode 100644 src/binaryen/test/passes/code-folding.wast create mode 100644 src/binaryen/test/passes/code-pushing_ignore-implicit-traps.txt create mode 100644 src/binaryen/test/passes/code-pushing_ignore-implicit-traps.wast create mode 100644 src/binaryen/test/passes/const-hoisting.txt create mode 100644 src/binaryen/test/passes/const-hoisting.wast create mode 100644 src/binaryen/test/passes/dce.txt create mode 100644 src/binaryen/test/passes/dce.wast create mode 100644 src/binaryen/test/passes/dce_vacuum.bin.txt create mode 100644 src/binaryen/test/passes/dce_vacuum.txt create mode 100644 src/binaryen/test/passes/dce_vacuum.wasm create mode 100644 src/binaryen/test/passes/dce_vacuum.wast create mode 100644 src/binaryen/test/passes/duplicate-function-elimination.txt create mode 100644 src/binaryen/test/passes/duplicate-function-elimination.wast create mode 100644 src/binaryen/test/passes/emit-js-wrapper=a.js.txt create mode 100644 src/binaryen/test/passes/emit-js-wrapper=a.js.wast create mode 100644 src/binaryen/test/passes/emit-js-wrapper=a.js.wast.js create mode 100644 src/binaryen/test/passes/emit-spec-wrapper=a.wat.txt create mode 100644 src/binaryen/test/passes/emit-spec-wrapper=a.wat.wast create mode 100644 src/binaryen/test/passes/emit-spec-wrapper=a.wat.wast.wat create mode 100644 src/binaryen/test/passes/flatten.bin.txt create mode 100644 src/binaryen/test/passes/flatten.txt create mode 100644 src/binaryen/test/passes/flatten.wasm create mode 100644 src/binaryen/test/passes/flatten.wast create mode 100644 src/binaryen/test/passes/flatten_rereloop.txt create mode 100644 src/binaryen/test/passes/flatten_rereloop.wast create mode 100644 src/binaryen/test/passes/fuzz-exec_O.txt create mode 100644 src/binaryen/test/passes/fuzz-exec_O.wast create mode 100644 src/binaryen/test/passes/inlining-optimizing.txt create mode 100644 src/binaryen/test/passes/inlining-optimizing.wast create mode 100644 src/binaryen/test/passes/inlining-optimizing_optimize-level=3.txt create mode 100644 src/binaryen/test/passes/inlining-optimizing_optimize-level=3.wast create mode 100644 src/binaryen/test/passes/inlining.txt create mode 100644 src/binaryen/test/passes/inlining.wast create mode 100644 src/binaryen/test/passes/inlining_optimize-level=3.txt create mode 100644 src/binaryen/test/passes/inlining_optimize-level=3.wast create mode 100644 src/binaryen/test/passes/instrument-locals.txt create mode 100644 src/binaryen/test/passes/instrument-locals.wast create mode 100644 src/binaryen/test/passes/instrument-memory.txt create mode 100644 src/binaryen/test/passes/instrument-memory.wast create mode 100644 src/binaryen/test/passes/local-cse.txt create mode 100644 src/binaryen/test/passes/local-cse.wast create mode 100644 src/binaryen/test/passes/local-cse_ignore-implicit-traps.txt create mode 100644 src/binaryen/test/passes/local-cse_ignore-implicit-traps.wast create mode 100644 src/binaryen/test/passes/log-execution.txt create mode 100644 src/binaryen/test/passes/log-execution.wast create mode 100644 src/binaryen/test/passes/memory-packing.txt create mode 100644 src/binaryen/test/passes/memory-packing.wast create mode 100644 src/binaryen/test/passes/merge-blocks.txt create mode 100644 src/binaryen/test/passes/merge-blocks.wast create mode 100644 src/binaryen/test/passes/metrics.txt create mode 100644 src/binaryen/test/passes/metrics.wast create mode 100644 src/binaryen/test/passes/nm.txt create mode 100644 src/binaryen/test/passes/nm.wast create mode 100644 src/binaryen/test/passes/optimize-instructions.txt create mode 100644 src/binaryen/test/passes/optimize-instructions.wast create mode 100644 src/binaryen/test/passes/optimize-instructions_optimize-level=2_ignore-implicit-traps.txt create mode 100644 src/binaryen/test/passes/optimize-instructions_optimize-level=2_ignore-implicit-traps.wast create mode 100644 src/binaryen/test/passes/pick-load-signs.txt create mode 100644 src/binaryen/test/passes/pick-load-signs.wast create mode 100644 src/binaryen/test/passes/post-emscripten.txt create mode 100644 src/binaryen/test/passes/post-emscripten.wast create mode 100644 src/binaryen/test/passes/precompute-propagate.txt create mode 100644 src/binaryen/test/passes/precompute-propagate.wast create mode 100644 src/binaryen/test/passes/precompute.txt create mode 100644 src/binaryen/test/passes/precompute.wast create mode 100644 src/binaryen/test/passes/precompute_coalesce-locals_vacuum.txt create mode 100644 src/binaryen/test/passes/precompute_coalesce-locals_vacuum.wast create mode 100644 src/binaryen/test/passes/print-call-graph.txt create mode 100644 src/binaryen/test/passes/print-call-graph.wast create mode 100644 src/binaryen/test/passes/remove-imports.txt create mode 100644 src/binaryen/test/passes/remove-imports.wast create mode 100644 src/binaryen/test/passes/remove-memory.txt create mode 100644 src/binaryen/test/passes/remove-memory.wast create mode 100644 src/binaryen/test/passes/remove-unused-brs.txt create mode 100644 src/binaryen/test/passes/remove-unused-brs.wast create mode 100644 src/binaryen/test/passes/remove-unused-brs_precompute_vacuum_remove-unused-brs.txt create mode 100644 src/binaryen/test/passes/remove-unused-brs_precompute_vacuum_remove-unused-brs.wast create mode 100644 src/binaryen/test/passes/remove-unused-brs_shrink-level=1.txt create mode 100644 src/binaryen/test/passes/remove-unused-brs_shrink-level=1.wast create mode 100644 src/binaryen/test/passes/remove-unused-brs_shrink-level=1_ignore-implicit-traps.txt create mode 100644 src/binaryen/test/passes/remove-unused-brs_shrink-level=1_ignore-implicit-traps.wast create mode 100644 src/binaryen/test/passes/remove-unused-module-elements.txt create mode 100644 src/binaryen/test/passes/remove-unused-module-elements.wast create mode 100644 src/binaryen/test/passes/remove-unused-names.txt create mode 100644 src/binaryen/test/passes/remove-unused-names.wast create mode 100644 src/binaryen/test/passes/remove-unused-names_code-folding.txt create mode 100644 src/binaryen/test/passes/remove-unused-names_code-folding.wast create mode 100644 src/binaryen/test/passes/remove-unused-names_merge-blocks.txt create mode 100644 src/binaryen/test/passes/remove-unused-names_merge-blocks.wast create mode 100644 src/binaryen/test/passes/remove-unused-names_precompute.txt create mode 100644 src/binaryen/test/passes/remove-unused-names_precompute.wast create mode 100644 src/binaryen/test/passes/remove-unused-names_remove-unused-brs_vacuum.txt create mode 100644 src/binaryen/test/passes/remove-unused-names_remove-unused-brs_vacuum.wast create mode 100644 src/binaryen/test/passes/remove-unused-names_vacuum.txt create mode 100644 src/binaryen/test/passes/remove-unused-names_vacuum.wast create mode 100644 src/binaryen/test/passes/reorder-functions.txt create mode 100644 src/binaryen/test/passes/reorder-functions.wast create mode 100644 src/binaryen/test/passes/reorder-locals.txt create mode 100644 src/binaryen/test/passes/reorder-locals.wast create mode 100644 src/binaryen/test/passes/rereloop.txt create mode 100644 src/binaryen/test/passes/rereloop.wast create mode 100644 src/binaryen/test/passes/rereloop_dce_remove-unused-brs_remove-unused-names_coalesce-locals_simplify-locals_reorder-locals_remove-unused-brs_merge-blocks_vacuum.txt create mode 100644 src/binaryen/test/passes/rereloop_dce_remove-unused-brs_remove-unused-names_coalesce-locals_simplify-locals_reorder-locals_remove-unused-brs_merge-blocks_vacuum.wast create mode 100644 src/binaryen/test/passes/safe-heap.txt create mode 100644 src/binaryen/test/passes/safe-heap.wast create mode 100644 src/binaryen/test/passes/simplify-locals-nostructure.txt create mode 100644 src/binaryen/test/passes/simplify-locals-nostructure.wast create mode 100644 src/binaryen/test/passes/simplify-locals-notee-nostructure.txt create mode 100644 src/binaryen/test/passes/simplify-locals-notee-nostructure.wast create mode 100644 src/binaryen/test/passes/simplify-locals-notee.txt create mode 100644 src/binaryen/test/passes/simplify-locals-notee.wast create mode 100644 src/binaryen/test/passes/simplify-locals.txt create mode 100644 src/binaryen/test/passes/simplify-locals.wast create mode 100644 src/binaryen/test/passes/ssa.txt create mode 100644 src/binaryen/test/passes/ssa.wast create mode 100644 src/binaryen/test/passes/translate-to-fuzz.txt create mode 100644 src/binaryen/test/passes/translate-to-fuzz.wast create mode 100644 src/binaryen/test/passes/trap-mode-clamp.txt create mode 100644 src/binaryen/test/passes/trap-mode-clamp.wast create mode 100644 src/binaryen/test/passes/trap-mode-js.txt create mode 100644 src/binaryen/test/passes/trap-mode-js.wast create mode 100644 src/binaryen/test/passes/untee.txt create mode 100644 src/binaryen/test/passes/untee.wast create mode 100644 src/binaryen/test/passes/vacuum.txt create mode 100644 src/binaryen/test/passes/vacuum.wast create mode 100644 src/binaryen/test/passes/vacuum_ignore-implicit-traps.txt create mode 100644 src/binaryen/test/passes/vacuum_ignore-implicit-traps.wast create mode 100644 src/binaryen/test/passes/vacuum_remove-unused-names_merge-blocks.txt create mode 100644 src/binaryen/test/passes/vacuum_remove-unused-names_merge-blocks.wast create mode 100644 src/binaryen/test/polymorphic_stack.wast create mode 100644 src/binaryen/test/polymorphic_stack.wast.from-wast create mode 100644 src/binaryen/test/polymorphic_stack.wast.fromBinary create mode 100644 src/binaryen/test/polymorphic_stack.wast.fromBinary.noDebugInfo create mode 100644 src/binaryen/test/print/memory-import-shared.minified.txt create mode 100644 src/binaryen/test/print/memory-import-shared.txt create mode 100644 src/binaryen/test/print/memory-import-shared.wast create mode 100644 src/binaryen/test/print/memory-shared.minified.txt create mode 100644 src/binaryen/test/print/memory-shared.txt create mode 100644 src/binaryen/test/print/memory-shared.wast create mode 100644 src/binaryen/test/print/min.minified.txt create mode 100644 src/binaryen/test/print/min.txt create mode 100644 src/binaryen/test/print/min.wast create mode 100644 src/binaryen/test/printf.c create mode 100644 src/binaryen/test/printf.txt create mode 100644 src/binaryen/test/reduce/destructive.wast create mode 100644 src/binaryen/test/reduce/destructive.wast.txt create mode 100644 src/binaryen/test/reduce/memory_table.wast create mode 100644 src/binaryen/test/reduce/memory_table.wast.txt create mode 100644 src/binaryen/test/reduce/simple.wast create mode 100644 src/binaryen/test/reduce/simple.wast.txt create mode 100644 src/binaryen/test/reg_switch.wast create mode 100644 src/binaryen/test/reg_switch.wast.from-wast create mode 100644 src/binaryen/test/reg_switch.wast.fromBinary create mode 100644 src/binaryen/test/reg_switch.wast.fromBinary.noDebugInfo create mode 100644 src/binaryen/test/revision create mode 100644 src/binaryen/test/s2wasm_known_binaryen_shell_test_failures.txt create mode 100644 src/binaryen/test/s2wasm_known_gcc_test_failures.txt create mode 100644 src/binaryen/test/segment-overlap.wast create mode 100644 src/binaryen/test/segment-overlap.wast.from-wast create mode 100644 src/binaryen/test/segment-overlap.wast.fromBinary create mode 100644 src/binaryen/test/segment-overlap.wast.fromBinary.noDebugInfo create mode 100644 src/binaryen/test/signext.wast create mode 100644 src/binaryen/test/signext.wast.from-wast create mode 100644 src/binaryen/test/signext.wast.fromBinary create mode 100644 src/binaryen/test/signext.wast.fromBinary.noDebugInfo create mode 100644 src/binaryen/test/spec/Contributing.md create mode 100644 src/binaryen/test/spec/LICENSE create mode 100644 src/binaryen/test/spec/README.md create mode 100644 src/binaryen/test/spec/address-offset-range.fail.wast create mode 100644 src/binaryen/test/spec/address.wast create mode 100644 src/binaryen/test/spec/binary.wast create mode 100644 src/binaryen/test/spec/block.wast create mode 100644 src/binaryen/test/spec/br.wast create mode 100644 src/binaryen/test/spec/br_if.wast create mode 100644 src/binaryen/test/spec/br_table.wast create mode 100644 src/binaryen/test/spec/break-drop.wast create mode 100644 src/binaryen/test/spec/call.wast create mode 100644 src/binaryen/test/spec/call_indirect.wast create mode 100644 src/binaryen/test/spec/comments.wast create mode 100644 src/binaryen/test/spec/conversions.wast create mode 100644 src/binaryen/test/spec/endianness.wast create mode 100644 src/binaryen/test/spec/expected-output/address.wast.log create mode 100644 src/binaryen/test/spec/expected-output/func_ptrs.wast.log create mode 100644 src/binaryen/test/spec/expected-output/if-label-scope.fail.wast.log create mode 100644 src/binaryen/test/spec/expected-output/imports.wast.log create mode 100644 src/binaryen/test/spec/expected-output/names.wast.log create mode 100644 src/binaryen/test/spec/expected-output/start.wast.log create mode 100644 src/binaryen/test/spec/exports.wast create mode 100644 src/binaryen/test/spec/f32.load32.fail.wast create mode 100644 src/binaryen/test/spec/f32.load64.fail.wast create mode 100644 src/binaryen/test/spec/f32.store32.fail.wast create mode 100644 src/binaryen/test/spec/f32.store64.fail.wast create mode 100644 src/binaryen/test/spec/f32.wast create mode 100644 src/binaryen/test/spec/f32_cmp.wast create mode 100644 src/binaryen/test/spec/f64.load32.fail.wast create mode 100644 src/binaryen/test/spec/f64.load64.fail.wast create mode 100644 src/binaryen/test/spec/f64.store32.fail.wast create mode 100644 src/binaryen/test/spec/f64.store64.fail.wast create mode 100644 src/binaryen/test/spec/f64.wast create mode 100644 src/binaryen/test/spec/f64_cmp.wast create mode 100644 src/binaryen/test/spec/fac.wast create mode 100644 src/binaryen/test/spec/float_exprs.wast create mode 100644 src/binaryen/test/spec/float_literals.wast create mode 100644 src/binaryen/test/spec/float_memory.wast create mode 100644 src/binaryen/test/spec/float_misc.wast create mode 100644 src/binaryen/test/spec/forward.wast create mode 100644 src/binaryen/test/spec/func-local-after-body.fail.wast create mode 100644 src/binaryen/test/spec/func-local-before-param.fail.wast create mode 100644 src/binaryen/test/spec/func-local-before-result.fail.wast create mode 100644 src/binaryen/test/spec/func-param-after-body.fail.wast create mode 100644 src/binaryen/test/spec/func-result-after-body.fail.wast create mode 100644 src/binaryen/test/spec/func-result-before-param.fail.wast create mode 100644 src/binaryen/test/spec/func.wast create mode 100644 src/binaryen/test/spec/func_ptrs.wast create mode 100644 src/binaryen/test/spec/get_local.wast create mode 100644 src/binaryen/test/spec/globals.wast create mode 100644 src/binaryen/test/spec/i32.load32_s.fail.wast create mode 100644 src/binaryen/test/spec/i32.load32_u.fail.wast create mode 100644 src/binaryen/test/spec/i32.load64_s.fail.wast create mode 100644 src/binaryen/test/spec/i32.load64_u.fail.wast create mode 100644 src/binaryen/test/spec/i32.store32.fail.wast create mode 100644 src/binaryen/test/spec/i32.store64.fail.wast create mode 100644 src/binaryen/test/spec/i32.wast create mode 100644 src/binaryen/test/spec/i64.load64_s.fail.wast create mode 100644 src/binaryen/test/spec/i64.load64_u.fail.wast create mode 100644 src/binaryen/test/spec/i64.store64.fail.wast create mode 100644 src/binaryen/test/spec/i64.wast create mode 100644 src/binaryen/test/spec/import-after-func.fail.wast create mode 100644 src/binaryen/test/spec/import-after-global.fail.wast create mode 100644 src/binaryen/test/spec/import-after-memory.fail.wast create mode 100644 src/binaryen/test/spec/import-after-table.fail.wast create mode 100644 src/binaryen/test/spec/imports.wast create mode 100644 src/binaryen/test/spec/int_exprs.wast create mode 100644 src/binaryen/test/spec/int_literals.wast create mode 100644 src/binaryen/test/spec/labels.wast create mode 100644 src/binaryen/test/spec/left-to-right.wast create mode 100644 src/binaryen/test/spec/linking.wast create mode 100644 src/binaryen/test/spec/loop.wast create mode 100644 src/binaryen/test/spec/memory.wast create mode 100644 src/binaryen/test/spec/memory_redundancy.wast create mode 100644 src/binaryen/test/spec/memory_trap.wast create mode 100644 src/binaryen/test/spec/names.wast create mode 100644 src/binaryen/test/spec/nop.wast create mode 100644 src/binaryen/test/spec/of_string-overflow-hex-u32.fail.wast create mode 100644 src/binaryen/test/spec/of_string-overflow-hex-u64.fail.wast create mode 100644 src/binaryen/test/spec/of_string-overflow-s32.fail.wast create mode 100644 src/binaryen/test/spec/of_string-overflow-s64.fail.wast create mode 100644 src/binaryen/test/spec/of_string-overflow-u32.fail.wast create mode 100644 src/binaryen/test/spec/of_string-overflow-u64.fail.wast create mode 100644 src/binaryen/test/spec/resizing.wast create mode 100644 src/binaryen/test/spec/return.wast create mode 100644 src/binaryen/test/spec/select.wast create mode 100644 src/binaryen/test/spec/set_local.wast create mode 100644 src/binaryen/test/spec/stack.wast create mode 100644 src/binaryen/test/spec/start.wast create mode 100644 src/binaryen/test/spec/store_retval.wast create mode 100644 src/binaryen/test/spec/switch.wast create mode 100644 src/binaryen/test/spec/tee_local.wast create mode 100644 src/binaryen/test/spec/traps.wast create mode 100644 src/binaryen/test/spec/typecheck.wast create mode 100644 src/binaryen/test/spec/unreachable.wast create mode 100644 src/binaryen/test/spec/unwind.wast create mode 100644 src/binaryen/test/stacky.wasm create mode 100644 src/binaryen/test/stacky.wasm.fromBinary create mode 100644 src/binaryen/test/table-import.wast create mode 100644 src/binaryen/test/table-import.wast.from-wast create mode 100644 src/binaryen/test/table-import.wast.fromBinary create mode 100644 src/binaryen/test/table-import.wast.fromBinary.noDebugInfo create mode 100644 src/binaryen/test/threads.asm.js create mode 100644 src/binaryen/test/threads.fromasm create mode 100644 src/binaryen/test/threads.fromasm.clamp create mode 100644 src/binaryen/test/threads.fromasm.clamp.no-opts create mode 100644 src/binaryen/test/threads.fromasm.imprecise create mode 100644 src/binaryen/test/threads.fromasm.imprecise.no-opts create mode 100644 src/binaryen/test/threads.fromasm.no-opts create mode 100644 src/binaryen/test/threads.wasm-only.asm.js create mode 100644 src/binaryen/test/threads.wasm-only.fromasm create mode 100644 src/binaryen/test/threads.wasm-only.fromasm.clamp create mode 100644 src/binaryen/test/threads.wasm-only.fromasm.clamp.no-opts create mode 100644 src/binaryen/test/threads.wasm-only.fromasm.imprecise create mode 100644 src/binaryen/test/threads.wasm-only.fromasm.imprecise.no-opts create mode 100644 src/binaryen/test/threads.wasm-only.fromasm.no-opts create mode 100644 src/binaryen/test/torture-s/20000112-1.c.s create mode 100644 src/binaryen/test/torture-s/20000113-1.c.s create mode 100644 src/binaryen/test/torture-s/20000121-1.c.s create mode 100644 src/binaryen/test/torture-s/20000205-1.c.s create mode 100644 src/binaryen/test/torture-s/20000217-1.c.s create mode 100644 src/binaryen/test/torture-s/20000223-1.c.s create mode 100644 src/binaryen/test/torture-s/20000224-1.c.s create mode 100644 src/binaryen/test/torture-s/20000225-1.c.s create mode 100644 src/binaryen/test/torture-s/20000227-1.c.s create mode 100644 src/binaryen/test/torture-s/20000313-1.c.s create mode 100644 src/binaryen/test/torture-s/20000314-1.c.s create mode 100644 src/binaryen/test/torture-s/20000314-2.c.s create mode 100644 src/binaryen/test/torture-s/20000314-3.c.s create mode 100644 src/binaryen/test/torture-s/20000402-1.c.s create mode 100644 src/binaryen/test/torture-s/20000403-1.c.s create mode 100644 src/binaryen/test/torture-s/20000412-1.c.s create mode 100644 src/binaryen/test/torture-s/20000412-2.c.s create mode 100644 src/binaryen/test/torture-s/20000412-3.c.s create mode 100644 src/binaryen/test/torture-s/20000412-4.c.s create mode 100644 src/binaryen/test/torture-s/20000412-5.c.s create mode 100644 src/binaryen/test/torture-s/20000412-6.c.s create mode 100644 src/binaryen/test/torture-s/20000419-1.c.s create mode 100644 src/binaryen/test/torture-s/20000422-1.c.s create mode 100644 src/binaryen/test/torture-s/20000503-1.c.s create mode 100644 src/binaryen/test/torture-s/20000511-1.c.s create mode 100644 src/binaryen/test/torture-s/20000519-1.c.s create mode 100644 src/binaryen/test/torture-s/20000519-2.c.s create mode 100644 src/binaryen/test/torture-s/20000523-1.c.s create mode 100644 src/binaryen/test/torture-s/20000528-1.c.s create mode 100644 src/binaryen/test/torture-s/20000603-1.c.s create mode 100644 src/binaryen/test/torture-s/20000605-1.c.s create mode 100644 src/binaryen/test/torture-s/20000605-2.c.s create mode 100644 src/binaryen/test/torture-s/20000605-3.c.s create mode 100644 src/binaryen/test/torture-s/20000622-1.c.s create mode 100644 src/binaryen/test/torture-s/20000703-1.c.s create mode 100644 src/binaryen/test/torture-s/20000706-1.c.s create mode 100644 src/binaryen/test/torture-s/20000706-2.c.s create mode 100644 src/binaryen/test/torture-s/20000706-3.c.s create mode 100644 src/binaryen/test/torture-s/20000706-4.c.s create mode 100644 src/binaryen/test/torture-s/20000706-5.c.s create mode 100644 src/binaryen/test/torture-s/20000707-1.c.s create mode 100644 src/binaryen/test/torture-s/20000715-1.c.s create mode 100644 src/binaryen/test/torture-s/20000715-2.c.s create mode 100644 src/binaryen/test/torture-s/20000717-1.c.s create mode 100644 src/binaryen/test/torture-s/20000717-2.c.s create mode 100644 src/binaryen/test/torture-s/20000717-3.c.s create mode 100644 src/binaryen/test/torture-s/20000717-4.c.s create mode 100644 src/binaryen/test/torture-s/20000717-5.c.s create mode 100644 src/binaryen/test/torture-s/20000722-1.c.s create mode 100644 src/binaryen/test/torture-s/20000726-1.c.s create mode 100644 src/binaryen/test/torture-s/20000731-1.c.s create mode 100644 src/binaryen/test/torture-s/20000731-2.c.s create mode 100644 src/binaryen/test/torture-s/20000801-1.c.s create mode 100644 src/binaryen/test/torture-s/20000801-2.c.s create mode 100644 src/binaryen/test/torture-s/20000801-3.c.s create mode 100644 src/binaryen/test/torture-s/20000801-4.c.s create mode 100644 src/binaryen/test/torture-s/20000808-1.c.s create mode 100644 src/binaryen/test/torture-s/20000815-1.c.s create mode 100644 src/binaryen/test/torture-s/20000818-1.c.s create mode 100644 src/binaryen/test/torture-s/20000819-1.c.s create mode 100644 src/binaryen/test/torture-s/20000910-1.c.s create mode 100644 src/binaryen/test/torture-s/20000910-2.c.s create mode 100644 src/binaryen/test/torture-s/20000914-1.c.s create mode 100644 src/binaryen/test/torture-s/20000917-1.c.s create mode 100644 src/binaryen/test/torture-s/20001009-1.c.s create mode 100644 src/binaryen/test/torture-s/20001009-2.c.s create mode 100644 src/binaryen/test/torture-s/20001011-1.c.s create mode 100644 src/binaryen/test/torture-s/20001013-1.c.s create mode 100644 src/binaryen/test/torture-s/20001017-1.c.s create mode 100644 src/binaryen/test/torture-s/20001017-2.c.s create mode 100644 src/binaryen/test/torture-s/20001024-1.c.s create mode 100644 src/binaryen/test/torture-s/20001026-1.c.s create mode 100644 src/binaryen/test/torture-s/20001027-1.c.s create mode 100644 src/binaryen/test/torture-s/20001031-1.c.s create mode 100644 src/binaryen/test/torture-s/20001101.c.s create mode 100644 src/binaryen/test/torture-s/20001108-1.c.s create mode 100644 src/binaryen/test/torture-s/20001111-1.c.s create mode 100644 src/binaryen/test/torture-s/20001112-1.c.s create mode 100644 src/binaryen/test/torture-s/20001121-1.c.s create mode 100644 src/binaryen/test/torture-s/20001124-1.c.s create mode 100644 src/binaryen/test/torture-s/20001130-1.c.s create mode 100644 src/binaryen/test/torture-s/20001130-2.c.s create mode 100644 src/binaryen/test/torture-s/20001203-1.c.s create mode 100644 src/binaryen/test/torture-s/20001203-2.c.s create mode 100644 src/binaryen/test/torture-s/20001221-1.c.s create mode 100644 src/binaryen/test/torture-s/20001228-1.c.s create mode 100644 src/binaryen/test/torture-s/20001229-1.c.s create mode 100644 src/binaryen/test/torture-s/20010106-1.c.s create mode 100644 src/binaryen/test/torture-s/20010114-1.c.s create mode 100644 src/binaryen/test/torture-s/20010116-1.c.s create mode 100644 src/binaryen/test/torture-s/20010118-1.c.s create mode 100644 src/binaryen/test/torture-s/20010119-1.c.s create mode 100644 src/binaryen/test/torture-s/20010123-1.c.s create mode 100644 src/binaryen/test/torture-s/20010129-1.c.s create mode 100644 src/binaryen/test/torture-s/20010206-1.c.s create mode 100644 src/binaryen/test/torture-s/20010221-1.c.s create mode 100644 src/binaryen/test/torture-s/20010222-1.c.s create mode 100644 src/binaryen/test/torture-s/20010224-1.c.s create mode 100644 src/binaryen/test/torture-s/20010325-1.c.s create mode 100644 src/binaryen/test/torture-s/20010329-1.c.s create mode 100644 src/binaryen/test/torture-s/20010403-1.c.s create mode 100644 src/binaryen/test/torture-s/20010409-1.c.s create mode 100644 src/binaryen/test/torture-s/20010422-1.c.s create mode 100644 src/binaryen/test/torture-s/20010518-1.c.s create mode 100644 src/binaryen/test/torture-s/20010518-2.c.s create mode 100644 src/binaryen/test/torture-s/20010520-1.c.s create mode 100644 src/binaryen/test/torture-s/20010604-1.c.s create mode 100644 src/binaryen/test/torture-s/20010605-2.c.s create mode 100644 src/binaryen/test/torture-s/20010711-1.c.s create mode 100644 src/binaryen/test/torture-s/20010717-1.c.s create mode 100644 src/binaryen/test/torture-s/20010723-1.c.s create mode 100644 src/binaryen/test/torture-s/20010904-1.c.s create mode 100644 src/binaryen/test/torture-s/20010904-2.c.s create mode 100644 src/binaryen/test/torture-s/20010910-1.c.s create mode 100644 src/binaryen/test/torture-s/20010915-1.c.s create mode 100644 src/binaryen/test/torture-s/20010924-1.c.s create mode 100644 src/binaryen/test/torture-s/20010925-1.c.s create mode 100644 src/binaryen/test/torture-s/20011008-3.c.s create mode 100644 src/binaryen/test/torture-s/20011019-1.c.s create mode 100644 src/binaryen/test/torture-s/20011024-1.c.s create mode 100644 src/binaryen/test/torture-s/20011109-1.c.s create mode 100644 src/binaryen/test/torture-s/20011109-2.c.s create mode 100644 src/binaryen/test/torture-s/20011113-1.c.s create mode 100644 src/binaryen/test/torture-s/20011114-1.c.s create mode 100644 src/binaryen/test/torture-s/20011115-1.c.s create mode 100644 src/binaryen/test/torture-s/20011121-1.c.s create mode 100644 src/binaryen/test/torture-s/20011126-1.c.s create mode 100644 src/binaryen/test/torture-s/20011126-2.c.s create mode 100644 src/binaryen/test/torture-s/20011128-1.c.s create mode 100644 src/binaryen/test/torture-s/20011217-1.c.s create mode 100644 src/binaryen/test/torture-s/20011219-1.c.s create mode 100644 src/binaryen/test/torture-s/20011223-1.c.s create mode 100644 src/binaryen/test/torture-s/20020103-1.c.s create mode 100644 src/binaryen/test/torture-s/20020107-1.c.s create mode 100644 src/binaryen/test/torture-s/20020108-1.c.s create mode 100644 src/binaryen/test/torture-s/20020118-1.c.s create mode 100644 src/binaryen/test/torture-s/20020127-1.c.s create mode 100644 src/binaryen/test/torture-s/20020129-1.c.s create mode 100644 src/binaryen/test/torture-s/20020201-1.c.s create mode 100644 src/binaryen/test/torture-s/20020206-1.c.s create mode 100644 src/binaryen/test/torture-s/20020206-2.c.s create mode 100644 src/binaryen/test/torture-s/20020213-1.c.s create mode 100644 src/binaryen/test/torture-s/20020215-1.c.s create mode 100644 src/binaryen/test/torture-s/20020216-1.c.s create mode 100644 src/binaryen/test/torture-s/20020219-1.c.s create mode 100644 src/binaryen/test/torture-s/20020225-1.c.s create mode 100644 src/binaryen/test/torture-s/20020225-2.c.s create mode 100644 src/binaryen/test/torture-s/20020226-1.c.s create mode 100644 src/binaryen/test/torture-s/20020227-1.c.s create mode 100644 src/binaryen/test/torture-s/20020307-1.c.s create mode 100644 src/binaryen/test/torture-s/20020314-1.c.s create mode 100644 src/binaryen/test/torture-s/20020320-1.c.s create mode 100644 src/binaryen/test/torture-s/20020321-1.c.s create mode 100644 src/binaryen/test/torture-s/20020328-1.c.s create mode 100644 src/binaryen/test/torture-s/20020402-1.c.s create mode 100644 src/binaryen/test/torture-s/20020402-2.c.s create mode 100644 src/binaryen/test/torture-s/20020402-3.c.s create mode 100644 src/binaryen/test/torture-s/20020404-1.c.s create mode 100644 src/binaryen/test/torture-s/20020406-1.c.s create mode 100644 src/binaryen/test/torture-s/20020411-1.c.s create mode 100644 src/binaryen/test/torture-s/20020413-1.c.s create mode 100644 src/binaryen/test/torture-s/20020418-1.c.s create mode 100644 src/binaryen/test/torture-s/20020423-1.c.s create mode 100644 src/binaryen/test/torture-s/20020503-1.c.s create mode 100644 src/binaryen/test/torture-s/20020506-1.c.s create mode 100644 src/binaryen/test/torture-s/20020508-1.c.s create mode 100644 src/binaryen/test/torture-s/20020508-2.c.s create mode 100644 src/binaryen/test/torture-s/20020508-3.c.s create mode 100644 src/binaryen/test/torture-s/20020510-1.c.s create mode 100644 src/binaryen/test/torture-s/20020529-1.c.s create mode 100644 src/binaryen/test/torture-s/20020611-1.c.s create mode 100644 src/binaryen/test/torture-s/20020614-1.c.s create mode 100644 src/binaryen/test/torture-s/20020615-1.c.s create mode 100644 src/binaryen/test/torture-s/20020619-1.c.s create mode 100644 src/binaryen/test/torture-s/20020716-1.c.s create mode 100644 src/binaryen/test/torture-s/20020720-1.c.s create mode 100644 src/binaryen/test/torture-s/20020805-1.c.s create mode 100644 src/binaryen/test/torture-s/20020810-1.c.s create mode 100644 src/binaryen/test/torture-s/20020819-1.c.s create mode 100644 src/binaryen/test/torture-s/20020904-1.c.s create mode 100644 src/binaryen/test/torture-s/20020911-1.c.s create mode 100644 src/binaryen/test/torture-s/20020916-1.c.s create mode 100644 src/binaryen/test/torture-s/20020920-1.c.s create mode 100644 src/binaryen/test/torture-s/20021010-1.c.s create mode 100644 src/binaryen/test/torture-s/20021010-2.c.s create mode 100644 src/binaryen/test/torture-s/20021011-1.c.s create mode 100644 src/binaryen/test/torture-s/20021015-1.c.s create mode 100644 src/binaryen/test/torture-s/20021024-1.c.s create mode 100644 src/binaryen/test/torture-s/20021111-1.c.s create mode 100644 src/binaryen/test/torture-s/20021113-1.c.s create mode 100644 src/binaryen/test/torture-s/20021118-1.c.s create mode 100644 src/binaryen/test/torture-s/20021118-2.c.s create mode 100644 src/binaryen/test/torture-s/20021118-3.c.s create mode 100644 src/binaryen/test/torture-s/20021119-1.c.s create mode 100644 src/binaryen/test/torture-s/20021120-1.c.s create mode 100644 src/binaryen/test/torture-s/20021120-2.c.s create mode 100644 src/binaryen/test/torture-s/20021120-3.c.s create mode 100644 src/binaryen/test/torture-s/20021127-1.c.s create mode 100644 src/binaryen/test/torture-s/20021204-1.c.s create mode 100644 src/binaryen/test/torture-s/20021219-1.c.s create mode 100644 src/binaryen/test/torture-s/20030105-1.c.s create mode 100644 src/binaryen/test/torture-s/20030109-1.c.s create mode 100644 src/binaryen/test/torture-s/20030117-1.c.s create mode 100644 src/binaryen/test/torture-s/20030120-1.c.s create mode 100644 src/binaryen/test/torture-s/20030120-2.c.s create mode 100644 src/binaryen/test/torture-s/20030125-1.c.s create mode 100644 src/binaryen/test/torture-s/20030128-1.c.s create mode 100644 src/binaryen/test/torture-s/20030203-1.c.s create mode 100644 src/binaryen/test/torture-s/20030209-1.c.s create mode 100644 src/binaryen/test/torture-s/20030216-1.c.s create mode 100644 src/binaryen/test/torture-s/20030218-1.c.s create mode 100644 src/binaryen/test/torture-s/20030221-1.c.s create mode 100644 src/binaryen/test/torture-s/20030222-1.c.s create mode 100644 src/binaryen/test/torture-s/20030224-2.c.s create mode 100644 src/binaryen/test/torture-s/20030307-1.c.s create mode 100644 src/binaryen/test/torture-s/20030313-1.c.s create mode 100644 src/binaryen/test/torture-s/20030316-1.c.s create mode 100644 src/binaryen/test/torture-s/20030330-1.c.s create mode 100644 src/binaryen/test/torture-s/20030401-1.c.s create mode 100644 src/binaryen/test/torture-s/20030403-1.c.s create mode 100644 src/binaryen/test/torture-s/20030404-1.c.s create mode 100644 src/binaryen/test/torture-s/20030408-1.c.s create mode 100644 src/binaryen/test/torture-s/20030606-1.c.s create mode 100644 src/binaryen/test/torture-s/20030613-1.c.s create mode 100644 src/binaryen/test/torture-s/20030626-1.c.s create mode 100644 src/binaryen/test/torture-s/20030626-2.c.s create mode 100644 src/binaryen/test/torture-s/20030714-1.c.s create mode 100644 src/binaryen/test/torture-s/20030715-1.c.s create mode 100644 src/binaryen/test/torture-s/20030717-1.c.s create mode 100644 src/binaryen/test/torture-s/20030718-1.c.s create mode 100644 src/binaryen/test/torture-s/20030821-1.c.s create mode 100644 src/binaryen/test/torture-s/20030828-1.c.s create mode 100644 src/binaryen/test/torture-s/20030828-2.c.s create mode 100644 src/binaryen/test/torture-s/20030903-1.c.s create mode 100644 src/binaryen/test/torture-s/20030909-1.c.s create mode 100644 src/binaryen/test/torture-s/20030910-1.c.s create mode 100644 src/binaryen/test/torture-s/20030913-1.c.s create mode 100644 src/binaryen/test/torture-s/20030914-1.c.s create mode 100644 src/binaryen/test/torture-s/20030914-2.c.s create mode 100644 src/binaryen/test/torture-s/20030916-1.c.s create mode 100644 src/binaryen/test/torture-s/20030920-1.c.s create mode 100644 src/binaryen/test/torture-s/20030928-1.c.s create mode 100644 src/binaryen/test/torture-s/20031003-1.c.s create mode 100644 src/binaryen/test/torture-s/20031010-1.c.s create mode 100644 src/binaryen/test/torture-s/20031011-1.c.s create mode 100644 src/binaryen/test/torture-s/20031012-1.c.s create mode 100644 src/binaryen/test/torture-s/20031020-1.c.s create mode 100644 src/binaryen/test/torture-s/20031201-1.c.s create mode 100644 src/binaryen/test/torture-s/20031204-1.c.s create mode 100644 src/binaryen/test/torture-s/20031211-1.c.s create mode 100644 src/binaryen/test/torture-s/20031211-2.c.s create mode 100644 src/binaryen/test/torture-s/20031214-1.c.s create mode 100644 src/binaryen/test/torture-s/20031215-1.c.s create mode 100644 src/binaryen/test/torture-s/20031216-1.c.s create mode 100644 src/binaryen/test/torture-s/20040208-1.c.s create mode 100644 src/binaryen/test/torture-s/20040218-1.c.s create mode 100644 src/binaryen/test/torture-s/20040223-1.c.s create mode 100644 src/binaryen/test/torture-s/20040307-1.c.s create mode 100644 src/binaryen/test/torture-s/20040309-1.c.s create mode 100644 src/binaryen/test/torture-s/20040311-1.c.s create mode 100644 src/binaryen/test/torture-s/20040313-1.c.s create mode 100644 src/binaryen/test/torture-s/20040319-1.c.s create mode 100644 src/binaryen/test/torture-s/20040331-1.c.s create mode 100644 src/binaryen/test/torture-s/20040409-1.c.s create mode 100644 src/binaryen/test/torture-s/20040409-2.c.s create mode 100644 src/binaryen/test/torture-s/20040409-3.c.s create mode 100644 src/binaryen/test/torture-s/20040411-1.c.s create mode 100644 src/binaryen/test/torture-s/20040625-1.c.s create mode 100644 src/binaryen/test/torture-s/20040629-1.c.s create mode 100644 src/binaryen/test/torture-s/20040703-1.c.s create mode 100644 src/binaryen/test/torture-s/20040704-1.c.s create mode 100644 src/binaryen/test/torture-s/20040705-1.c.s create mode 100644 src/binaryen/test/torture-s/20040705-2.c.s create mode 100644 src/binaryen/test/torture-s/20040706-1.c.s create mode 100644 src/binaryen/test/torture-s/20040707-1.c.s create mode 100644 src/binaryen/test/torture-s/20040709-1.c.s create mode 100644 src/binaryen/test/torture-s/20040709-2.c.s create mode 100644 src/binaryen/test/torture-s/20040805-1.c.s create mode 100644 src/binaryen/test/torture-s/20040811-1.c.s create mode 100644 src/binaryen/test/torture-s/20040820-1.c.s create mode 100644 src/binaryen/test/torture-s/20040823-1.c.s create mode 100644 src/binaryen/test/torture-s/20040831-1.c.s create mode 100644 src/binaryen/test/torture-s/20040917-1.c.s create mode 100644 src/binaryen/test/torture-s/20041011-1.c.s create mode 100644 src/binaryen/test/torture-s/20041019-1.c.s create mode 100644 src/binaryen/test/torture-s/20041112-1.c.s create mode 100644 src/binaryen/test/torture-s/20041113-1.c.s create mode 100644 src/binaryen/test/torture-s/20041114-1.c.s create mode 100644 src/binaryen/test/torture-s/20041124-1.c.s create mode 100644 src/binaryen/test/torture-s/20041126-1.c.s create mode 100644 src/binaryen/test/torture-s/20041201-1.c.s create mode 100644 src/binaryen/test/torture-s/20041210-1.c.s create mode 100644 src/binaryen/test/torture-s/20041212-1.c.s create mode 100644 src/binaryen/test/torture-s/20041213-2.c.s create mode 100644 src/binaryen/test/torture-s/20041214-1.c.s create mode 100644 src/binaryen/test/torture-s/20041218-1.c.s create mode 100644 src/binaryen/test/torture-s/20050104-1.c.s create mode 100644 src/binaryen/test/torture-s/20050106-1.c.s create mode 100644 src/binaryen/test/torture-s/20050107-1.c.s create mode 100644 src/binaryen/test/torture-s/20050111-1.c.s create mode 100644 src/binaryen/test/torture-s/20050119-1.c.s create mode 100644 src/binaryen/test/torture-s/20050119-2.c.s create mode 100644 src/binaryen/test/torture-s/20050121-1.c.s create mode 100644 src/binaryen/test/torture-s/20050124-1.c.s create mode 100644 src/binaryen/test/torture-s/20050125-1.c.s create mode 100644 src/binaryen/test/torture-s/20050131-1.c.s create mode 100644 src/binaryen/test/torture-s/20050203-1.c.s create mode 100644 src/binaryen/test/torture-s/20050215-1.c.s create mode 100644 src/binaryen/test/torture-s/20050218-1.c.s create mode 100644 src/binaryen/test/torture-s/20050224-1.c.s create mode 100644 src/binaryen/test/torture-s/20050316-1.c.s create mode 100644 src/binaryen/test/torture-s/20050316-2.c.s create mode 100644 src/binaryen/test/torture-s/20050316-3.c.s create mode 100644 src/binaryen/test/torture-s/20050410-1.c.s create mode 100644 src/binaryen/test/torture-s/20050502-1.c.s create mode 100644 src/binaryen/test/torture-s/20050502-2.c.s create mode 100644 src/binaryen/test/torture-s/20050604-1.c.s create mode 100644 src/binaryen/test/torture-s/20050607-1.c.s create mode 100644 src/binaryen/test/torture-s/20050613-1.c.s create mode 100644 src/binaryen/test/torture-s/20050713-1.c.s create mode 100644 src/binaryen/test/torture-s/20050826-1.c.s create mode 100644 src/binaryen/test/torture-s/20050826-2.c.s create mode 100644 src/binaryen/test/torture-s/20050929-1.c.s create mode 100644 src/binaryen/test/torture-s/20051012-1.c.s create mode 100644 src/binaryen/test/torture-s/20051021-1.c.s create mode 100644 src/binaryen/test/torture-s/20051104-1.c.s create mode 100644 src/binaryen/test/torture-s/20051110-1.c.s create mode 100644 src/binaryen/test/torture-s/20051110-2.c.s create mode 100644 src/binaryen/test/torture-s/20051113-1.c.s create mode 100644 src/binaryen/test/torture-s/20051215-1.c.s create mode 100644 src/binaryen/test/torture-s/20060102-1.c.s create mode 100644 src/binaryen/test/torture-s/20060110-1.c.s create mode 100644 src/binaryen/test/torture-s/20060110-2.c.s create mode 100644 src/binaryen/test/torture-s/20060127-1.c.s create mode 100644 src/binaryen/test/torture-s/20060412-1.c.s create mode 100644 src/binaryen/test/torture-s/20060420-1.c.s create mode 100644 src/binaryen/test/torture-s/20060905-1.c.s create mode 100644 src/binaryen/test/torture-s/20060910-1.c.s create mode 100644 src/binaryen/test/torture-s/20060929-1.c.s create mode 100644 src/binaryen/test/torture-s/20060930-1.c.s create mode 100644 src/binaryen/test/torture-s/20060930-2.c.s create mode 100644 src/binaryen/test/torture-s/20061031-1.c.s create mode 100644 src/binaryen/test/torture-s/20061101-1.c.s create mode 100644 src/binaryen/test/torture-s/20061101-2.c.s create mode 100644 src/binaryen/test/torture-s/20070201-1.c.s create mode 100644 src/binaryen/test/torture-s/20070212-1.c.s create mode 100644 src/binaryen/test/torture-s/20070212-2.c.s create mode 100644 src/binaryen/test/torture-s/20070212-3.c.s create mode 100644 src/binaryen/test/torture-s/20070424-1.c.s create mode 100644 src/binaryen/test/torture-s/20070517-1.c.s create mode 100644 src/binaryen/test/torture-s/20070614-1.c.s create mode 100644 src/binaryen/test/torture-s/20070623-1.c.s create mode 100644 src/binaryen/test/torture-s/20070724-1.c.s create mode 100644 src/binaryen/test/torture-s/20070824-1.c.s create mode 100644 src/binaryen/test/torture-s/20071011-1.c.s create mode 100644 src/binaryen/test/torture-s/20071018-1.c.s create mode 100644 src/binaryen/test/torture-s/20071029-1.c.s create mode 100644 src/binaryen/test/torture-s/20071030-1.c.s create mode 100644 src/binaryen/test/torture-s/20071108-1.c.s create mode 100644 src/binaryen/test/torture-s/20071120-1.c.s create mode 100644 src/binaryen/test/torture-s/20071202-1.c.s create mode 100644 src/binaryen/test/torture-s/20071205-1.c.s create mode 100644 src/binaryen/test/torture-s/20071211-1.c.s create mode 100644 src/binaryen/test/torture-s/20071213-1.c.s create mode 100644 src/binaryen/test/torture-s/20071216-1.c.s create mode 100644 src/binaryen/test/torture-s/20071219-1.c.s create mode 100644 src/binaryen/test/torture-s/20071220-1.c.s create mode 100644 src/binaryen/test/torture-s/20071220-2.c.s create mode 100644 src/binaryen/test/torture-s/20080117-1.c.s create mode 100644 src/binaryen/test/torture-s/20080122-1.c.s create mode 100644 src/binaryen/test/torture-s/20080222-1.c.s create mode 100644 src/binaryen/test/torture-s/20080408-1.c.s create mode 100644 src/binaryen/test/torture-s/20080424-1.c.s create mode 100644 src/binaryen/test/torture-s/20080502-1.c.s create mode 100644 src/binaryen/test/torture-s/20080506-1.c.s create mode 100644 src/binaryen/test/torture-s/20080506-2.c.s create mode 100644 src/binaryen/test/torture-s/20080519-1.c.s create mode 100644 src/binaryen/test/torture-s/20080522-1.c.s create mode 100644 src/binaryen/test/torture-s/20080529-1.c.s create mode 100644 src/binaryen/test/torture-s/20080604-1.c.s create mode 100644 src/binaryen/test/torture-s/20080719-1.c.s create mode 100644 src/binaryen/test/torture-s/20080813-1.c.s create mode 100644 src/binaryen/test/torture-s/20081103-1.c.s create mode 100644 src/binaryen/test/torture-s/20081112-1.c.s create mode 100644 src/binaryen/test/torture-s/20081117-1.c.s create mode 100644 src/binaryen/test/torture-s/20081218-1.c.s create mode 100644 src/binaryen/test/torture-s/20090113-1.c.s create mode 100644 src/binaryen/test/torture-s/20090113-2.c.s create mode 100644 src/binaryen/test/torture-s/20090113-3.c.s create mode 100644 src/binaryen/test/torture-s/20090207-1.c.s create mode 100644 src/binaryen/test/torture-s/20090527-1.c.s create mode 100644 src/binaryen/test/torture-s/20090623-1.c.s create mode 100644 src/binaryen/test/torture-s/20090711-1.c.s create mode 100644 src/binaryen/test/torture-s/20090814-1.c.s create mode 100644 src/binaryen/test/torture-s/20091229-1.c.s create mode 100644 src/binaryen/test/torture-s/20100209-1.c.s create mode 100644 src/binaryen/test/torture-s/20100316-1.c.s create mode 100644 src/binaryen/test/torture-s/20100416-1.c.s create mode 100644 src/binaryen/test/torture-s/20100430-1.c.s create mode 100644 src/binaryen/test/torture-s/20100708-1.c.s create mode 100644 src/binaryen/test/torture-s/20100805-1.c.s create mode 100644 src/binaryen/test/torture-s/20100827-1.c.s create mode 100644 src/binaryen/test/torture-s/20101011-1.c.s create mode 100644 src/binaryen/test/torture-s/20101013-1.c.s create mode 100644 src/binaryen/test/torture-s/20101025-1.c.s create mode 100644 src/binaryen/test/torture-s/20111208-1.c.s create mode 100644 src/binaryen/test/torture-s/20111212-1.c.s create mode 100644 src/binaryen/test/torture-s/20111227-1.c.s create mode 100644 src/binaryen/test/torture-s/20111227-2.c.s create mode 100644 src/binaryen/test/torture-s/20111227-3.c.s create mode 100644 src/binaryen/test/torture-s/20120105-1.c.s create mode 100644 src/binaryen/test/torture-s/20120111-1.c.s create mode 100644 src/binaryen/test/torture-s/20120207-1.c.s create mode 100644 src/binaryen/test/torture-s/20120427-1.c.s create mode 100644 src/binaryen/test/torture-s/20120427-2.c.s create mode 100644 src/binaryen/test/torture-s/20120615-1.c.s create mode 100644 src/binaryen/test/torture-s/20120808-1.c.s create mode 100644 src/binaryen/test/torture-s/20120817-1.c.s create mode 100644 src/binaryen/test/torture-s/20120919-1.c.s create mode 100644 src/binaryen/test/torture-s/20121108-1.c.s create mode 100644 src/binaryen/test/torture-s/20131127-1.c.s create mode 100644 src/binaryen/test/torture-s/20140212-1.c.s create mode 100644 src/binaryen/test/torture-s/20140326-1.c.s create mode 100644 src/binaryen/test/torture-s/20140425-1.c.s create mode 100644 src/binaryen/test/torture-s/900409-1.c.s create mode 100644 src/binaryen/test/torture-s/920202-1.c.s create mode 100644 src/binaryen/test/torture-s/920409-1.c.s create mode 100644 src/binaryen/test/torture-s/920410-1.c.s create mode 100644 src/binaryen/test/torture-s/920411-1.c.s create mode 100644 src/binaryen/test/torture-s/920428-1.c.s create mode 100644 src/binaryen/test/torture-s/920429-1.c.s create mode 100644 src/binaryen/test/torture-s/920501-1.c.s create mode 100644 src/binaryen/test/torture-s/920501-2.c.s create mode 100644 src/binaryen/test/torture-s/920501-6.c.s create mode 100644 src/binaryen/test/torture-s/920501-8.c.s create mode 100644 src/binaryen/test/torture-s/920501-9.c.s create mode 100644 src/binaryen/test/torture-s/920506-1.c.s create mode 100644 src/binaryen/test/torture-s/920520-1.c.s create mode 100644 src/binaryen/test/torture-s/920603-1.c.s create mode 100644 src/binaryen/test/torture-s/920604-1.c.s create mode 100644 src/binaryen/test/torture-s/920612-1.c.s create mode 100644 src/binaryen/test/torture-s/920618-1.c.s create mode 100644 src/binaryen/test/torture-s/920625-1.c.s create mode 100644 src/binaryen/test/torture-s/920710-1.c.s create mode 100644 src/binaryen/test/torture-s/920711-1.c.s create mode 100644 src/binaryen/test/torture-s/920721-1.c.s create mode 100644 src/binaryen/test/torture-s/920721-2.c.s create mode 100644 src/binaryen/test/torture-s/920721-3.c.s create mode 100644 src/binaryen/test/torture-s/920726-1.c.s create mode 100644 src/binaryen/test/torture-s/920730-1.c.s create mode 100644 src/binaryen/test/torture-s/920731-1.c.s create mode 100644 src/binaryen/test/torture-s/920810-1.c.s create mode 100644 src/binaryen/test/torture-s/920812-1.c.s create mode 100644 src/binaryen/test/torture-s/920829-1.c.s create mode 100644 src/binaryen/test/torture-s/920908-1.c.s create mode 100644 src/binaryen/test/torture-s/920908-2.c.s create mode 100644 src/binaryen/test/torture-s/920909-1.c.s create mode 100644 src/binaryen/test/torture-s/920922-1.c.s create mode 100644 src/binaryen/test/torture-s/920929-1.c.s create mode 100644 src/binaryen/test/torture-s/921006-1.c.s create mode 100644 src/binaryen/test/torture-s/921007-1.c.s create mode 100644 src/binaryen/test/torture-s/921013-1.c.s create mode 100644 src/binaryen/test/torture-s/921016-1.c.s create mode 100644 src/binaryen/test/torture-s/921019-1.c.s create mode 100644 src/binaryen/test/torture-s/921019-2.c.s create mode 100644 src/binaryen/test/torture-s/921029-1.c.s create mode 100644 src/binaryen/test/torture-s/921104-1.c.s create mode 100644 src/binaryen/test/torture-s/921110-1.c.s create mode 100644 src/binaryen/test/torture-s/921112-1.c.s create mode 100644 src/binaryen/test/torture-s/921113-1.c.s create mode 100644 src/binaryen/test/torture-s/921117-1.c.s create mode 100644 src/binaryen/test/torture-s/921123-1.c.s create mode 100644 src/binaryen/test/torture-s/921123-2.c.s create mode 100644 src/binaryen/test/torture-s/921124-1.c.s create mode 100644 src/binaryen/test/torture-s/921202-1.c.s create mode 100644 src/binaryen/test/torture-s/921202-2.c.s create mode 100644 src/binaryen/test/torture-s/921204-1.c.s create mode 100644 src/binaryen/test/torture-s/921207-1.c.s create mode 100644 src/binaryen/test/torture-s/921208-1.c.s create mode 100644 src/binaryen/test/torture-s/921208-2.c.s create mode 100644 src/binaryen/test/torture-s/921218-1.c.s create mode 100644 src/binaryen/test/torture-s/921218-2.c.s create mode 100644 src/binaryen/test/torture-s/930106-1.c.s create mode 100644 src/binaryen/test/torture-s/930111-1.c.s create mode 100644 src/binaryen/test/torture-s/930123-1.c.s create mode 100644 src/binaryen/test/torture-s/930126-1.c.s create mode 100644 src/binaryen/test/torture-s/930208-1.c.s create mode 100644 src/binaryen/test/torture-s/930406-1.c.s create mode 100644 src/binaryen/test/torture-s/930408-1.c.s create mode 100644 src/binaryen/test/torture-s/930429-1.c.s create mode 100644 src/binaryen/test/torture-s/930429-2.c.s create mode 100644 src/binaryen/test/torture-s/930513-1.c.s create mode 100644 src/binaryen/test/torture-s/930513-2.c.s create mode 100644 src/binaryen/test/torture-s/930518-1.c.s create mode 100644 src/binaryen/test/torture-s/930526-1.c.s create mode 100644 src/binaryen/test/torture-s/930527-1.c.s create mode 100644 src/binaryen/test/torture-s/930529-1.c.s create mode 100644 src/binaryen/test/torture-s/930603-1.c.s create mode 100644 src/binaryen/test/torture-s/930603-2.c.s create mode 100644 src/binaryen/test/torture-s/930603-3.c.s create mode 100644 src/binaryen/test/torture-s/930608-1.c.s create mode 100644 src/binaryen/test/torture-s/930614-1.c.s create mode 100644 src/binaryen/test/torture-s/930614-2.c.s create mode 100644 src/binaryen/test/torture-s/930621-1.c.s create mode 100644 src/binaryen/test/torture-s/930622-1.c.s create mode 100644 src/binaryen/test/torture-s/930622-2.c.s create mode 100644 src/binaryen/test/torture-s/930628-1.c.s create mode 100644 src/binaryen/test/torture-s/930630-1.c.s create mode 100644 src/binaryen/test/torture-s/930702-1.c.s create mode 100644 src/binaryen/test/torture-s/930713-1.c.s create mode 100644 src/binaryen/test/torture-s/930718-1.c.s create mode 100644 src/binaryen/test/torture-s/930719-1.c.s create mode 100644 src/binaryen/test/torture-s/930725-1.c.s create mode 100644 src/binaryen/test/torture-s/930818-1.c.s create mode 100644 src/binaryen/test/torture-s/930916-1.c.s create mode 100644 src/binaryen/test/torture-s/930921-1.c.s create mode 100644 src/binaryen/test/torture-s/930929-1.c.s create mode 100644 src/binaryen/test/torture-s/930930-1.c.s create mode 100644 src/binaryen/test/torture-s/930930-2.c.s create mode 100644 src/binaryen/test/torture-s/931004-1.c.s create mode 100644 src/binaryen/test/torture-s/931004-10.c.s create mode 100644 src/binaryen/test/torture-s/931004-11.c.s create mode 100644 src/binaryen/test/torture-s/931004-12.c.s create mode 100644 src/binaryen/test/torture-s/931004-13.c.s create mode 100644 src/binaryen/test/torture-s/931004-14.c.s create mode 100644 src/binaryen/test/torture-s/931004-2.c.s create mode 100644 src/binaryen/test/torture-s/931004-3.c.s create mode 100644 src/binaryen/test/torture-s/931004-4.c.s create mode 100644 src/binaryen/test/torture-s/931004-5.c.s create mode 100644 src/binaryen/test/torture-s/931004-6.c.s create mode 100644 src/binaryen/test/torture-s/931004-7.c.s create mode 100644 src/binaryen/test/torture-s/931004-8.c.s create mode 100644 src/binaryen/test/torture-s/931004-9.c.s create mode 100644 src/binaryen/test/torture-s/931005-1.c.s create mode 100644 src/binaryen/test/torture-s/931009-1.c.s create mode 100644 src/binaryen/test/torture-s/931012-1.c.s create mode 100644 src/binaryen/test/torture-s/931017-1.c.s create mode 100644 src/binaryen/test/torture-s/931018-1.c.s create mode 100644 src/binaryen/test/torture-s/931031-1.c.s create mode 100644 src/binaryen/test/torture-s/931102-1.c.s create mode 100644 src/binaryen/test/torture-s/931102-2.c.s create mode 100644 src/binaryen/test/torture-s/931110-1.c.s create mode 100644 src/binaryen/test/torture-s/931110-2.c.s create mode 100644 src/binaryen/test/torture-s/931208-1.c.s create mode 100644 src/binaryen/test/torture-s/931228-1.c.s create mode 100644 src/binaryen/test/torture-s/940115-1.c.s create mode 100644 src/binaryen/test/torture-s/940122-1.c.s create mode 100644 src/binaryen/test/torture-s/941014-1.c.s create mode 100644 src/binaryen/test/torture-s/941014-2.c.s create mode 100644 src/binaryen/test/torture-s/941015-1.c.s create mode 100644 src/binaryen/test/torture-s/941021-1.c.s create mode 100644 src/binaryen/test/torture-s/941025-1.c.s create mode 100644 src/binaryen/test/torture-s/941031-1.c.s create mode 100644 src/binaryen/test/torture-s/941101-1.c.s create mode 100644 src/binaryen/test/torture-s/941110-1.c.s create mode 100644 src/binaryen/test/torture-s/941202-1.c.s create mode 100644 src/binaryen/test/torture-s/950221-1.c.s create mode 100644 src/binaryen/test/torture-s/950322-1.c.s create mode 100644 src/binaryen/test/torture-s/950426-1.c.s create mode 100644 src/binaryen/test/torture-s/950426-2.c.s create mode 100644 src/binaryen/test/torture-s/950503-1.c.s create mode 100644 src/binaryen/test/torture-s/950511-1.c.s create mode 100644 src/binaryen/test/torture-s/950512-1.c.s create mode 100644 src/binaryen/test/torture-s/950605-1.c.s create mode 100644 src/binaryen/test/torture-s/950607-1.c.s create mode 100644 src/binaryen/test/torture-s/950607-2.c.s create mode 100644 src/binaryen/test/torture-s/950612-1.c.s create mode 100644 src/binaryen/test/torture-s/950621-1.c.s create mode 100644 src/binaryen/test/torture-s/950628-1.c.s create mode 100644 src/binaryen/test/torture-s/950704-1.c.s create mode 100644 src/binaryen/test/torture-s/950706-1.c.s create mode 100644 src/binaryen/test/torture-s/950710-1.c.s create mode 100644 src/binaryen/test/torture-s/950714-1.c.s create mode 100644 src/binaryen/test/torture-s/950809-1.c.s create mode 100644 src/binaryen/test/torture-s/950906-1.c.s create mode 100644 src/binaryen/test/torture-s/950915-1.c.s create mode 100644 src/binaryen/test/torture-s/950929-1.c.s create mode 100644 src/binaryen/test/torture-s/951003-1.c.s create mode 100644 src/binaryen/test/torture-s/951115-1.c.s create mode 100644 src/binaryen/test/torture-s/951204-1.c.s create mode 100644 src/binaryen/test/torture-s/960116-1.c.s create mode 100644 src/binaryen/test/torture-s/960117-1.c.s create mode 100644 src/binaryen/test/torture-s/960209-1.c.s create mode 100644 src/binaryen/test/torture-s/960215-1.c.s create mode 100644 src/binaryen/test/torture-s/960218-1.c.s create mode 100644 src/binaryen/test/torture-s/960219-1.c.s create mode 100644 src/binaryen/test/torture-s/960301-1.c.s create mode 100644 src/binaryen/test/torture-s/960302-1.c.s create mode 100644 src/binaryen/test/torture-s/960311-1.c.s create mode 100644 src/binaryen/test/torture-s/960311-2.c.s create mode 100644 src/binaryen/test/torture-s/960311-3.c.s create mode 100644 src/binaryen/test/torture-s/960312-1.c.s create mode 100644 src/binaryen/test/torture-s/960317-1.c.s create mode 100644 src/binaryen/test/torture-s/960321-1.c.s create mode 100644 src/binaryen/test/torture-s/960326-1.c.s create mode 100644 src/binaryen/test/torture-s/960327-1.c.s create mode 100644 src/binaryen/test/torture-s/960402-1.c.s create mode 100644 src/binaryen/test/torture-s/960405-1.c.s create mode 100644 src/binaryen/test/torture-s/960416-1.c.s create mode 100644 src/binaryen/test/torture-s/960419-1.c.s create mode 100644 src/binaryen/test/torture-s/960419-2.c.s create mode 100644 src/binaryen/test/torture-s/960512-1.c.s create mode 100644 src/binaryen/test/torture-s/960513-1.c.s create mode 100644 src/binaryen/test/torture-s/960521-1.c.s create mode 100644 src/binaryen/test/torture-s/960608-1.c.s create mode 100644 src/binaryen/test/torture-s/960801-1.c.s create mode 100644 src/binaryen/test/torture-s/960802-1.c.s create mode 100644 src/binaryen/test/torture-s/960830-1.c.s create mode 100644 src/binaryen/test/torture-s/960909-1.c.s create mode 100644 src/binaryen/test/torture-s/961004-1.c.s create mode 100644 src/binaryen/test/torture-s/961017-1.c.s create mode 100644 src/binaryen/test/torture-s/961017-2.c.s create mode 100644 src/binaryen/test/torture-s/961026-1.c.s create mode 100644 src/binaryen/test/torture-s/961112-1.c.s create mode 100644 src/binaryen/test/torture-s/961122-1.c.s create mode 100644 src/binaryen/test/torture-s/961122-2.c.s create mode 100644 src/binaryen/test/torture-s/961125-1.c.s create mode 100644 src/binaryen/test/torture-s/961206-1.c.s create mode 100644 src/binaryen/test/torture-s/961213-1.c.s create mode 100644 src/binaryen/test/torture-s/961223-1.c.s create mode 100644 src/binaryen/test/torture-s/970214-1.c.s create mode 100644 src/binaryen/test/torture-s/970214-2.c.s create mode 100644 src/binaryen/test/torture-s/970217-1.c.s create mode 100644 src/binaryen/test/torture-s/970923-1.c.s create mode 100644 src/binaryen/test/torture-s/980205.c.s create mode 100644 src/binaryen/test/torture-s/980223.c.s create mode 100644 src/binaryen/test/torture-s/980424-1.c.s create mode 100644 src/binaryen/test/torture-s/980505-1.c.s create mode 100644 src/binaryen/test/torture-s/980505-2.c.s create mode 100644 src/binaryen/test/torture-s/980506-1.c.s create mode 100644 src/binaryen/test/torture-s/980506-2.c.s create mode 100644 src/binaryen/test/torture-s/980506-3.c.s create mode 100644 src/binaryen/test/torture-s/980526-2.c.s create mode 100644 src/binaryen/test/torture-s/980526-3.c.s create mode 100644 src/binaryen/test/torture-s/980602-1.c.s create mode 100644 src/binaryen/test/torture-s/980602-2.c.s create mode 100644 src/binaryen/test/torture-s/980604-1.c.s create mode 100644 src/binaryen/test/torture-s/980605-1.c.s create mode 100644 src/binaryen/test/torture-s/980608-1.c.s create mode 100644 src/binaryen/test/torture-s/980612-1.c.s create mode 100644 src/binaryen/test/torture-s/980617-1.c.s create mode 100644 src/binaryen/test/torture-s/980618-1.c.s create mode 100644 src/binaryen/test/torture-s/980701-1.c.s create mode 100644 src/binaryen/test/torture-s/980707-1.c.s create mode 100644 src/binaryen/test/torture-s/980709-1.c.s create mode 100644 src/binaryen/test/torture-s/980716-1.c.s create mode 100644 src/binaryen/test/torture-s/980929-1.c.s create mode 100644 src/binaryen/test/torture-s/981001-1.c.s create mode 100644 src/binaryen/test/torture-s/981019-1.c.s create mode 100644 src/binaryen/test/torture-s/981130-1.c.s create mode 100644 src/binaryen/test/torture-s/981206-1.c.s create mode 100644 src/binaryen/test/torture-s/990106-1.c.s create mode 100644 src/binaryen/test/torture-s/990106-2.c.s create mode 100644 src/binaryen/test/torture-s/990117-1.c.s create mode 100644 src/binaryen/test/torture-s/990127-1.c.s create mode 100644 src/binaryen/test/torture-s/990127-2.c.s create mode 100644 src/binaryen/test/torture-s/990128-1.c.s create mode 100644 src/binaryen/test/torture-s/990130-1.c.s create mode 100644 src/binaryen/test/torture-s/990211-1.c.s create mode 100644 src/binaryen/test/torture-s/990222-1.c.s create mode 100644 src/binaryen/test/torture-s/990324-1.c.s create mode 100644 src/binaryen/test/torture-s/990326-1.c.s create mode 100644 src/binaryen/test/torture-s/990404-1.c.s create mode 100644 src/binaryen/test/torture-s/990513-1.c.s create mode 100644 src/binaryen/test/torture-s/990524-1.c.s create mode 100644 src/binaryen/test/torture-s/990525-1.c.s create mode 100644 src/binaryen/test/torture-s/990525-2.c.s create mode 100644 src/binaryen/test/torture-s/990527-1.c.s create mode 100644 src/binaryen/test/torture-s/990531-1.c.s create mode 100644 src/binaryen/test/torture-s/990604-1.c.s create mode 100644 src/binaryen/test/torture-s/990628-1.c.s create mode 100644 src/binaryen/test/torture-s/990804-1.c.s create mode 100644 src/binaryen/test/torture-s/990811-1.c.s create mode 100644 src/binaryen/test/torture-s/990826-0.c.s create mode 100644 src/binaryen/test/torture-s/990827-1.c.s create mode 100644 src/binaryen/test/torture-s/990829-1.c.s create mode 100644 src/binaryen/test/torture-s/990923-1.c.s create mode 100644 src/binaryen/test/torture-s/991014-1.c.s create mode 100644 src/binaryen/test/torture-s/991016-1.c.s create mode 100644 src/binaryen/test/torture-s/991019-1.c.s create mode 100644 src/binaryen/test/torture-s/991023-1.c.s create mode 100644 src/binaryen/test/torture-s/991030-1.c.s create mode 100644 src/binaryen/test/torture-s/991112-1.c.s create mode 100644 src/binaryen/test/torture-s/991118-1.c.s create mode 100644 src/binaryen/test/torture-s/991201-1.c.s create mode 100644 src/binaryen/test/torture-s/991202-1.c.s create mode 100644 src/binaryen/test/torture-s/991202-2.c.s create mode 100644 src/binaryen/test/torture-s/991202-3.c.s create mode 100644 src/binaryen/test/torture-s/991216-1.c.s create mode 100644 src/binaryen/test/torture-s/991216-2.c.s create mode 100644 src/binaryen/test/torture-s/991216-4.c.s create mode 100644 src/binaryen/test/torture-s/991221-1.c.s create mode 100644 src/binaryen/test/torture-s/991227-1.c.s create mode 100644 src/binaryen/test/torture-s/991228-1.c.s create mode 100644 src/binaryen/test/torture-s/align-1.c.s create mode 100644 src/binaryen/test/torture-s/align-2.c.s create mode 100644 src/binaryen/test/torture-s/align-3.c.s create mode 100644 src/binaryen/test/torture-s/alloca-1.c.s create mode 100644 src/binaryen/test/torture-s/anon-1.c.s create mode 100644 src/binaryen/test/torture-s/arith-1.c.s create mode 100644 src/binaryen/test/torture-s/arith-rand-ll.c.s create mode 100644 src/binaryen/test/torture-s/arith-rand.c.s create mode 100644 src/binaryen/test/torture-s/ashldi-1.c.s create mode 100644 src/binaryen/test/torture-s/ashrdi-1.c.s create mode 100644 src/binaryen/test/torture-s/bcp-1.c.s create mode 100644 src/binaryen/test/torture-s/bf-layout-1.c.s create mode 100644 src/binaryen/test/torture-s/bf-pack-1.c.s create mode 100644 src/binaryen/test/torture-s/bf-sign-1.c.s create mode 100644 src/binaryen/test/torture-s/bf-sign-2.c.s create mode 100644 src/binaryen/test/torture-s/bf64-1.c.s create mode 100644 src/binaryen/test/torture-s/bitfld-1.c.s create mode 100644 src/binaryen/test/torture-s/bitfld-2.c.s create mode 100644 src/binaryen/test/torture-s/bitfld-3.c.s create mode 100644 src/binaryen/test/torture-s/bitfld-4.c.s create mode 100644 src/binaryen/test/torture-s/bitfld-5.c.s create mode 100644 src/binaryen/test/torture-s/bitfld-6.c.s create mode 100644 src/binaryen/test/torture-s/bswap-1.c.s create mode 100644 src/binaryen/test/torture-s/builtin-bitops-1.c.s create mode 100644 src/binaryen/test/torture-s/builtin-constant.c.s create mode 100644 src/binaryen/test/torture-s/builtin-prefetch-1.c.s create mode 100644 src/binaryen/test/torture-s/builtin-prefetch-2.c.s create mode 100644 src/binaryen/test/torture-s/builtin-prefetch-3.c.s create mode 100644 src/binaryen/test/torture-s/builtin-prefetch-4.c.s create mode 100644 src/binaryen/test/torture-s/builtin-prefetch-5.c.s create mode 100644 src/binaryen/test/torture-s/builtin-prefetch-6.c.s create mode 100644 src/binaryen/test/torture-s/builtin-types-compatible-p.c.s create mode 100644 src/binaryen/test/torture-s/call-trap-1.c.s create mode 100644 src/binaryen/test/torture-s/cbrt.c.s create mode 100644 src/binaryen/test/torture-s/cmpdi-1.c.s create mode 100644 src/binaryen/test/torture-s/cmpsf-1.c.s create mode 100644 src/binaryen/test/torture-s/cmpsi-1.c.s create mode 100644 src/binaryen/test/torture-s/cmpsi-2.c.s create mode 100644 src/binaryen/test/torture-s/compare-1.c.s create mode 100644 src/binaryen/test/torture-s/compare-2.c.s create mode 100644 src/binaryen/test/torture-s/compare-3.c.s create mode 100644 src/binaryen/test/torture-s/complex-1.c.s create mode 100644 src/binaryen/test/torture-s/complex-2.c.s create mode 100644 src/binaryen/test/torture-s/complex-3.c.s create mode 100644 src/binaryen/test/torture-s/complex-4.c.s create mode 100644 src/binaryen/test/torture-s/complex-5.c.s create mode 100644 src/binaryen/test/torture-s/complex-6.c.s create mode 100644 src/binaryen/test/torture-s/complex-7.c.s create mode 100644 src/binaryen/test/torture-s/compndlit-1.c.s create mode 100644 src/binaryen/test/torture-s/const-addr-expr-1.c.s create mode 100644 src/binaryen/test/torture-s/conversion.c.s create mode 100644 src/binaryen/test/torture-s/cvt-1.c.s create mode 100644 src/binaryen/test/torture-s/dbra-1.c.s create mode 100644 src/binaryen/test/torture-s/divcmp-1.c.s create mode 100644 src/binaryen/test/torture-s/divcmp-2.c.s create mode 100644 src/binaryen/test/torture-s/divcmp-3.c.s create mode 100644 src/binaryen/test/torture-s/divcmp-4.c.s create mode 100644 src/binaryen/test/torture-s/divcmp-5.c.s create mode 100644 src/binaryen/test/torture-s/divconst-1.c.s create mode 100644 src/binaryen/test/torture-s/divconst-2.c.s create mode 100644 src/binaryen/test/torture-s/divconst-3.c.s create mode 100644 src/binaryen/test/torture-s/divmod-1.c.s create mode 100644 src/binaryen/test/torture-s/doloop-1.c.s create mode 100644 src/binaryen/test/torture-s/doloop-2.c.s create mode 100644 src/binaryen/test/torture-s/eeprof-1.c.s create mode 100644 src/binaryen/test/torture-s/enum-1.c.s create mode 100644 src/binaryen/test/torture-s/enum-2.c.s create mode 100644 src/binaryen/test/torture-s/enum-3.c.s create mode 100644 src/binaryen/test/torture-s/extzvsi.c.s create mode 100644 src/binaryen/test/torture-s/ffs-1.c.s create mode 100644 src/binaryen/test/torture-s/ffs-2.c.s create mode 100644 src/binaryen/test/torture-s/float-floor.c.s create mode 100644 src/binaryen/test/torture-s/floatunsisf-1.c.s create mode 100644 src/binaryen/test/torture-s/fprintf-1.c.s create mode 100644 src/binaryen/test/torture-s/fprintf-chk-1.c.s create mode 100644 src/binaryen/test/torture-s/frame-address.c.s create mode 100644 src/binaryen/test/torture-s/func-ptr-1.c.s create mode 100644 src/binaryen/test/torture-s/gofast.c.s create mode 100644 src/binaryen/test/torture-s/ifcvt-onecmpl-abs-1.c.s create mode 100644 src/binaryen/test/torture-s/index-1.c.s create mode 100644 src/binaryen/test/torture-s/inst-check.c.s create mode 100644 src/binaryen/test/torture-s/int-compare.c.s create mode 100644 src/binaryen/test/torture-s/ipa-sra-1.c.s create mode 100644 src/binaryen/test/torture-s/ipa-sra-2.c.s create mode 100644 src/binaryen/test/torture-s/longlong.c.s create mode 100644 src/binaryen/test/torture-s/loop-1.c.s create mode 100644 src/binaryen/test/torture-s/loop-10.c.s create mode 100644 src/binaryen/test/torture-s/loop-11.c.s create mode 100644 src/binaryen/test/torture-s/loop-12.c.s create mode 100644 src/binaryen/test/torture-s/loop-13.c.s create mode 100644 src/binaryen/test/torture-s/loop-14.c.s create mode 100644 src/binaryen/test/torture-s/loop-15.c.s create mode 100644 src/binaryen/test/torture-s/loop-2.c.s create mode 100644 src/binaryen/test/torture-s/loop-2b.c.s create mode 100644 src/binaryen/test/torture-s/loop-2c.c.s create mode 100644 src/binaryen/test/torture-s/loop-2d.c.s create mode 100644 src/binaryen/test/torture-s/loop-2e.c.s create mode 100644 src/binaryen/test/torture-s/loop-2f.c.s create mode 100644 src/binaryen/test/torture-s/loop-2g.c.s create mode 100644 src/binaryen/test/torture-s/loop-3.c.s create mode 100644 src/binaryen/test/torture-s/loop-3b.c.s create mode 100644 src/binaryen/test/torture-s/loop-3c.c.s create mode 100644 src/binaryen/test/torture-s/loop-4.c.s create mode 100644 src/binaryen/test/torture-s/loop-4b.c.s create mode 100644 src/binaryen/test/torture-s/loop-5.c.s create mode 100644 src/binaryen/test/torture-s/loop-6.c.s create mode 100644 src/binaryen/test/torture-s/loop-7.c.s create mode 100644 src/binaryen/test/torture-s/loop-8.c.s create mode 100644 src/binaryen/test/torture-s/loop-9.c.s create mode 100644 src/binaryen/test/torture-s/loop-ivopts-1.c.s create mode 100644 src/binaryen/test/torture-s/loop-ivopts-2.c.s create mode 100644 src/binaryen/test/torture-s/lshrdi-1.c.s create mode 100644 src/binaryen/test/torture-s/mayalias-1.c.s create mode 100644 src/binaryen/test/torture-s/mayalias-2.c.s create mode 100644 src/binaryen/test/torture-s/mayalias-3.c.s create mode 100644 src/binaryen/test/torture-s/medce-1.c.s create mode 100644 src/binaryen/test/torture-s/memcpy-1.c.s create mode 100644 src/binaryen/test/torture-s/memcpy-2.c.s create mode 100644 src/binaryen/test/torture-s/memcpy-bi.c.s create mode 100644 src/binaryen/test/torture-s/memset-1.c.s create mode 100644 src/binaryen/test/torture-s/memset-2.c.s create mode 100644 src/binaryen/test/torture-s/memset-3.c.s create mode 100644 src/binaryen/test/torture-s/mod-1.c.s create mode 100644 src/binaryen/test/torture-s/mode-dependent-address.c.s create mode 100644 src/binaryen/test/torture-s/multdi-1.c.s create mode 100644 src/binaryen/test/torture-s/multi-ix.c.s create mode 100644 src/binaryen/test/torture-s/nestfunc-4.c.s create mode 100644 src/binaryen/test/torture-s/p18298.c.s create mode 100644 src/binaryen/test/torture-s/packed-1.c.s create mode 100644 src/binaryen/test/torture-s/packed-2.c.s create mode 100644 src/binaryen/test/torture-s/pending-4.c.s create mode 100644 src/binaryen/test/torture-s/postmod-1.c.s create mode 100644 src/binaryen/test/torture-s/pr15262-1.c.s create mode 100644 src/binaryen/test/torture-s/pr15262-2.c.s create mode 100644 src/binaryen/test/torture-s/pr15262.c.s create mode 100644 src/binaryen/test/torture-s/pr15296.c.s create mode 100644 src/binaryen/test/torture-s/pr16790-1.c.s create mode 100644 src/binaryen/test/torture-s/pr17078-1.c.s create mode 100644 src/binaryen/test/torture-s/pr17133.c.s create mode 100644 src/binaryen/test/torture-s/pr17252.c.s create mode 100644 src/binaryen/test/torture-s/pr19005.c.s create mode 100644 src/binaryen/test/torture-s/pr19449.c.s create mode 100644 src/binaryen/test/torture-s/pr19515.c.s create mode 100644 src/binaryen/test/torture-s/pr19606.c.s create mode 100644 src/binaryen/test/torture-s/pr19687.c.s create mode 100644 src/binaryen/test/torture-s/pr19689.c.s create mode 100644 src/binaryen/test/torture-s/pr20100-1.c.s create mode 100644 src/binaryen/test/torture-s/pr20187-1.c.s create mode 100644 src/binaryen/test/torture-s/pr20466-1.c.s create mode 100644 src/binaryen/test/torture-s/pr20527-1.c.s create mode 100644 src/binaryen/test/torture-s/pr20601-1.c.s create mode 100644 src/binaryen/test/torture-s/pr20621-1.c.s create mode 100644 src/binaryen/test/torture-s/pr21173.c.s create mode 100644 src/binaryen/test/torture-s/pr21331.c.s create mode 100644 src/binaryen/test/torture-s/pr21964-1.c.s create mode 100644 src/binaryen/test/torture-s/pr22061-1.c.s create mode 100644 src/binaryen/test/torture-s/pr22061-2.c.s create mode 100644 src/binaryen/test/torture-s/pr22098-1.c.s create mode 100644 src/binaryen/test/torture-s/pr22098-2.c.s create mode 100644 src/binaryen/test/torture-s/pr22098-3.c.s create mode 100644 src/binaryen/test/torture-s/pr22348.c.s create mode 100644 src/binaryen/test/torture-s/pr22429.c.s create mode 100644 src/binaryen/test/torture-s/pr22493-1.c.s create mode 100644 src/binaryen/test/torture-s/pr22630.c.s create mode 100644 src/binaryen/test/torture-s/pr23047.c.s create mode 100644 src/binaryen/test/torture-s/pr23135.c.s create mode 100644 src/binaryen/test/torture-s/pr23324.c.s create mode 100644 src/binaryen/test/torture-s/pr23467.c.s create mode 100644 src/binaryen/test/torture-s/pr23604.c.s create mode 100644 src/binaryen/test/torture-s/pr23941.c.s create mode 100644 src/binaryen/test/torture-s/pr24141.c.s create mode 100644 src/binaryen/test/torture-s/pr24142.c.s create mode 100644 src/binaryen/test/torture-s/pr24716.c.s create mode 100644 src/binaryen/test/torture-s/pr24851.c.s create mode 100644 src/binaryen/test/torture-s/pr25125.c.s create mode 100644 src/binaryen/test/torture-s/pr25737.c.s create mode 100644 src/binaryen/test/torture-s/pr27073.c.s create mode 100644 src/binaryen/test/torture-s/pr27260.c.s create mode 100644 src/binaryen/test/torture-s/pr27285.c.s create mode 100644 src/binaryen/test/torture-s/pr27364.c.s create mode 100644 src/binaryen/test/torture-s/pr27671-1.c.s create mode 100644 src/binaryen/test/torture-s/pr28289.c.s create mode 100644 src/binaryen/test/torture-s/pr28403.c.s create mode 100644 src/binaryen/test/torture-s/pr28651.c.s create mode 100644 src/binaryen/test/torture-s/pr28778.c.s create mode 100644 src/binaryen/test/torture-s/pr28982a.c.s create mode 100644 src/binaryen/test/torture-s/pr28982b.c.s create mode 100644 src/binaryen/test/torture-s/pr29006.c.s create mode 100644 src/binaryen/test/torture-s/pr29156.c.s create mode 100644 src/binaryen/test/torture-s/pr29695-1.c.s create mode 100644 src/binaryen/test/torture-s/pr29695-2.c.s create mode 100644 src/binaryen/test/torture-s/pr29797-1.c.s create mode 100644 src/binaryen/test/torture-s/pr29797-2.c.s create mode 100644 src/binaryen/test/torture-s/pr29798.c.s create mode 100644 src/binaryen/test/torture-s/pr30185.c.s create mode 100644 src/binaryen/test/torture-s/pr30778.c.s create mode 100644 src/binaryen/test/torture-s/pr31072.c.s create mode 100644 src/binaryen/test/torture-s/pr31136.c.s create mode 100644 src/binaryen/test/torture-s/pr31169.c.s create mode 100644 src/binaryen/test/torture-s/pr31448-2.c.s create mode 100644 src/binaryen/test/torture-s/pr31448.c.s create mode 100644 src/binaryen/test/torture-s/pr31605.c.s create mode 100644 src/binaryen/test/torture-s/pr32244-1.c.s create mode 100644 src/binaryen/test/torture-s/pr32500.c.s create mode 100644 src/binaryen/test/torture-s/pr33142.c.s create mode 100644 src/binaryen/test/torture-s/pr33382.c.s create mode 100644 src/binaryen/test/torture-s/pr33631.c.s create mode 100644 src/binaryen/test/torture-s/pr33669.c.s create mode 100644 src/binaryen/test/torture-s/pr33779-1.c.s create mode 100644 src/binaryen/test/torture-s/pr33779-2.c.s create mode 100644 src/binaryen/test/torture-s/pr33870-1.c.s create mode 100644 src/binaryen/test/torture-s/pr33870.c.s create mode 100644 src/binaryen/test/torture-s/pr33992.c.s create mode 100644 src/binaryen/test/torture-s/pr34070-1.c.s create mode 100644 src/binaryen/test/torture-s/pr34070-2.c.s create mode 100644 src/binaryen/test/torture-s/pr34099-2.c.s create mode 100644 src/binaryen/test/torture-s/pr34099.c.s create mode 100644 src/binaryen/test/torture-s/pr34130.c.s create mode 100644 src/binaryen/test/torture-s/pr34154.c.s create mode 100644 src/binaryen/test/torture-s/pr34176.c.s create mode 100644 src/binaryen/test/torture-s/pr34415.c.s create mode 100644 src/binaryen/test/torture-s/pr34456.c.s create mode 100644 src/binaryen/test/torture-s/pr34768-1.c.s create mode 100644 src/binaryen/test/torture-s/pr34768-2.c.s create mode 100644 src/binaryen/test/torture-s/pr34971.c.s create mode 100644 src/binaryen/test/torture-s/pr34982.c.s create mode 100644 src/binaryen/test/torture-s/pr35163.c.s create mode 100644 src/binaryen/test/torture-s/pr35231.c.s create mode 100644 src/binaryen/test/torture-s/pr35390.c.s create mode 100644 src/binaryen/test/torture-s/pr35456.c.s create mode 100644 src/binaryen/test/torture-s/pr35472.c.s create mode 100644 src/binaryen/test/torture-s/pr35800.c.s create mode 100644 src/binaryen/test/torture-s/pr36034-1.c.s create mode 100644 src/binaryen/test/torture-s/pr36034-2.c.s create mode 100644 src/binaryen/test/torture-s/pr36038.c.s create mode 100644 src/binaryen/test/torture-s/pr36077.c.s create mode 100644 src/binaryen/test/torture-s/pr36093.c.s create mode 100644 src/binaryen/test/torture-s/pr36321.c.s create mode 100644 src/binaryen/test/torture-s/pr36339.c.s create mode 100644 src/binaryen/test/torture-s/pr36343.c.s create mode 100644 src/binaryen/test/torture-s/pr36691.c.s create mode 100644 src/binaryen/test/torture-s/pr36765.c.s create mode 100644 src/binaryen/test/torture-s/pr37102.c.s create mode 100644 src/binaryen/test/torture-s/pr37125.c.s create mode 100644 src/binaryen/test/torture-s/pr37573.c.s create mode 100644 src/binaryen/test/torture-s/pr37882.c.s create mode 100644 src/binaryen/test/torture-s/pr37924.c.s create mode 100644 src/binaryen/test/torture-s/pr37931.c.s create mode 100644 src/binaryen/test/torture-s/pr38048-1.c.s create mode 100644 src/binaryen/test/torture-s/pr38048-2.c.s create mode 100644 src/binaryen/test/torture-s/pr38051.c.s create mode 100644 src/binaryen/test/torture-s/pr38151.c.s create mode 100644 src/binaryen/test/torture-s/pr38212.c.s create mode 100644 src/binaryen/test/torture-s/pr38236.c.s create mode 100644 src/binaryen/test/torture-s/pr38422.c.s create mode 100644 src/binaryen/test/torture-s/pr38533.c.s create mode 100644 src/binaryen/test/torture-s/pr38819.c.s create mode 100644 src/binaryen/test/torture-s/pr38969.c.s create mode 100644 src/binaryen/test/torture-s/pr39100.c.s create mode 100644 src/binaryen/test/torture-s/pr39120.c.s create mode 100644 src/binaryen/test/torture-s/pr39228.c.s create mode 100644 src/binaryen/test/torture-s/pr39233.c.s create mode 100644 src/binaryen/test/torture-s/pr39240.c.s create mode 100644 src/binaryen/test/torture-s/pr39339.c.s create mode 100644 src/binaryen/test/torture-s/pr39501.c.s create mode 100644 src/binaryen/test/torture-s/pr40022.c.s create mode 100644 src/binaryen/test/torture-s/pr40057.c.s create mode 100644 src/binaryen/test/torture-s/pr40386.c.s create mode 100644 src/binaryen/test/torture-s/pr40404.c.s create mode 100644 src/binaryen/test/torture-s/pr40493.c.s create mode 100644 src/binaryen/test/torture-s/pr40579.c.s create mode 100644 src/binaryen/test/torture-s/pr40657.c.s create mode 100644 src/binaryen/test/torture-s/pr40668.c.s create mode 100644 src/binaryen/test/torture-s/pr40747.c.s create mode 100644 src/binaryen/test/torture-s/pr41239.c.s create mode 100644 src/binaryen/test/torture-s/pr41317.c.s create mode 100644 src/binaryen/test/torture-s/pr41395-1.c.s create mode 100644 src/binaryen/test/torture-s/pr41395-2.c.s create mode 100644 src/binaryen/test/torture-s/pr41463.c.s create mode 100644 src/binaryen/test/torture-s/pr41750.c.s create mode 100644 src/binaryen/test/torture-s/pr41917.c.s create mode 100644 src/binaryen/test/torture-s/pr41919.c.s create mode 100644 src/binaryen/test/torture-s/pr42006.c.s create mode 100644 src/binaryen/test/torture-s/pr42142.c.s create mode 100644 src/binaryen/test/torture-s/pr42154.c.s create mode 100644 src/binaryen/test/torture-s/pr42231.c.s create mode 100644 src/binaryen/test/torture-s/pr42248.c.s create mode 100644 src/binaryen/test/torture-s/pr42269-2.c.s create mode 100644 src/binaryen/test/torture-s/pr42512.c.s create mode 100644 src/binaryen/test/torture-s/pr42544.c.s create mode 100644 src/binaryen/test/torture-s/pr42570.c.s create mode 100644 src/binaryen/test/torture-s/pr42614.c.s create mode 100644 src/binaryen/test/torture-s/pr42691.c.s create mode 100644 src/binaryen/test/torture-s/pr42721.c.s create mode 100644 src/binaryen/test/torture-s/pr42833.c.s create mode 100644 src/binaryen/test/torture-s/pr43008.c.s create mode 100644 src/binaryen/test/torture-s/pr43220.c.s create mode 100644 src/binaryen/test/torture-s/pr43236.c.s create mode 100644 src/binaryen/test/torture-s/pr43269.c.s create mode 100644 src/binaryen/test/torture-s/pr43385.c.s create mode 100644 src/binaryen/test/torture-s/pr43438.c.s create mode 100644 src/binaryen/test/torture-s/pr43560.c.s create mode 100644 src/binaryen/test/torture-s/pr43629.c.s create mode 100644 src/binaryen/test/torture-s/pr43783.c.s create mode 100644 src/binaryen/test/torture-s/pr43784.c.s create mode 100644 src/binaryen/test/torture-s/pr43835.c.s create mode 100644 src/binaryen/test/torture-s/pr43987.c.s create mode 100644 src/binaryen/test/torture-s/pr44164.c.s create mode 100644 src/binaryen/test/torture-s/pr44202-1.c.s create mode 100644 src/binaryen/test/torture-s/pr44468.c.s create mode 100644 src/binaryen/test/torture-s/pr44555.c.s create mode 100644 src/binaryen/test/torture-s/pr44575.c.s create mode 100644 src/binaryen/test/torture-s/pr44683.c.s create mode 100644 src/binaryen/test/torture-s/pr44828.c.s create mode 100644 src/binaryen/test/torture-s/pr44852.c.s create mode 100644 src/binaryen/test/torture-s/pr44858.c.s create mode 100644 src/binaryen/test/torture-s/pr44942.c.s create mode 100644 src/binaryen/test/torture-s/pr45034.c.s create mode 100644 src/binaryen/test/torture-s/pr45070.c.s create mode 100644 src/binaryen/test/torture-s/pr45262.c.s create mode 100644 src/binaryen/test/torture-s/pr45695.c.s create mode 100644 src/binaryen/test/torture-s/pr46019.c.s create mode 100644 src/binaryen/test/torture-s/pr46309.c.s create mode 100644 src/binaryen/test/torture-s/pr46316.c.s create mode 100644 src/binaryen/test/torture-s/pr46909-1.c.s create mode 100644 src/binaryen/test/torture-s/pr46909-2.c.s create mode 100644 src/binaryen/test/torture-s/pr47148.c.s create mode 100644 src/binaryen/test/torture-s/pr47155.c.s create mode 100644 src/binaryen/test/torture-s/pr47237.c.s create mode 100644 src/binaryen/test/torture-s/pr47299.c.s create mode 100644 src/binaryen/test/torture-s/pr47337.c.s create mode 100644 src/binaryen/test/torture-s/pr47538.c.s create mode 100644 src/binaryen/test/torture-s/pr47925.c.s create mode 100644 src/binaryen/test/torture-s/pr48197.c.s create mode 100644 src/binaryen/test/torture-s/pr48571-1.c.s create mode 100644 src/binaryen/test/torture-s/pr48717.c.s create mode 100644 src/binaryen/test/torture-s/pr48809.c.s create mode 100644 src/binaryen/test/torture-s/pr48814-1.c.s create mode 100644 src/binaryen/test/torture-s/pr48814-2.c.s create mode 100644 src/binaryen/test/torture-s/pr48973-1.c.s create mode 100644 src/binaryen/test/torture-s/pr48973-2.c.s create mode 100644 src/binaryen/test/torture-s/pr49039.c.s create mode 100644 src/binaryen/test/torture-s/pr49073.c.s create mode 100644 src/binaryen/test/torture-s/pr49123.c.s create mode 100644 src/binaryen/test/torture-s/pr49161.c.s create mode 100644 src/binaryen/test/torture-s/pr49186.c.s create mode 100644 src/binaryen/test/torture-s/pr49218.c.s create mode 100644 src/binaryen/test/torture-s/pr49279.c.s create mode 100644 src/binaryen/test/torture-s/pr49281.c.s create mode 100644 src/binaryen/test/torture-s/pr49390.c.s create mode 100644 src/binaryen/test/torture-s/pr49419.c.s create mode 100644 src/binaryen/test/torture-s/pr49644.c.s create mode 100644 src/binaryen/test/torture-s/pr49712.c.s create mode 100644 src/binaryen/test/torture-s/pr49768.c.s create mode 100644 src/binaryen/test/torture-s/pr49886.c.s create mode 100644 src/binaryen/test/torture-s/pr51023.c.s create mode 100644 src/binaryen/test/torture-s/pr51323.c.s create mode 100644 src/binaryen/test/torture-s/pr51466.c.s create mode 100644 src/binaryen/test/torture-s/pr51581-1.c.s create mode 100644 src/binaryen/test/torture-s/pr51581-2.c.s create mode 100644 src/binaryen/test/torture-s/pr51877.c.s create mode 100644 src/binaryen/test/torture-s/pr51933.c.s create mode 100644 src/binaryen/test/torture-s/pr52129.c.s create mode 100644 src/binaryen/test/torture-s/pr52209.c.s create mode 100644 src/binaryen/test/torture-s/pr52286.c.s create mode 100644 src/binaryen/test/torture-s/pr52760.c.s create mode 100644 src/binaryen/test/torture-s/pr52979-1.c.s create mode 100644 src/binaryen/test/torture-s/pr52979-2.c.s create mode 100644 src/binaryen/test/torture-s/pr53084.c.s create mode 100644 src/binaryen/test/torture-s/pr53160.c.s create mode 100644 src/binaryen/test/torture-s/pr53465.c.s create mode 100644 src/binaryen/test/torture-s/pr53645-2.c.s create mode 100644 src/binaryen/test/torture-s/pr53645.c.s create mode 100644 src/binaryen/test/torture-s/pr53688.c.s create mode 100644 src/binaryen/test/torture-s/pr54471.c.s create mode 100644 src/binaryen/test/torture-s/pr54937.c.s create mode 100644 src/binaryen/test/torture-s/pr54985.c.s create mode 100644 src/binaryen/test/torture-s/pr55137.c.s create mode 100644 src/binaryen/test/torture-s/pr55750.c.s create mode 100644 src/binaryen/test/torture-s/pr55875.c.s create mode 100644 src/binaryen/test/torture-s/pr56051.c.s create mode 100644 src/binaryen/test/torture-s/pr56205.c.s create mode 100644 src/binaryen/test/torture-s/pr56250.c.s create mode 100644 src/binaryen/test/torture-s/pr56799.c.s create mode 100644 src/binaryen/test/torture-s/pr56837.c.s create mode 100644 src/binaryen/test/torture-s/pr56866.c.s create mode 100644 src/binaryen/test/torture-s/pr56899.c.s create mode 100644 src/binaryen/test/torture-s/pr56962.c.s create mode 100644 src/binaryen/test/torture-s/pr56982.c.s create mode 100644 src/binaryen/test/torture-s/pr57124.c.s create mode 100644 src/binaryen/test/torture-s/pr57130.c.s create mode 100644 src/binaryen/test/torture-s/pr57131.c.s create mode 100644 src/binaryen/test/torture-s/pr57144.c.s create mode 100644 src/binaryen/test/torture-s/pr57281.c.s create mode 100644 src/binaryen/test/torture-s/pr57321.c.s create mode 100644 src/binaryen/test/torture-s/pr57344-1.c.s create mode 100644 src/binaryen/test/torture-s/pr57344-2.c.s create mode 100644 src/binaryen/test/torture-s/pr57344-3.c.s create mode 100644 src/binaryen/test/torture-s/pr57344-4.c.s create mode 100644 src/binaryen/test/torture-s/pr57568.c.s create mode 100644 src/binaryen/test/torture-s/pr57829.c.s create mode 100644 src/binaryen/test/torture-s/pr57860.c.s create mode 100644 src/binaryen/test/torture-s/pr57861.c.s create mode 100644 src/binaryen/test/torture-s/pr57875.c.s create mode 100644 src/binaryen/test/torture-s/pr57876.c.s create mode 100644 src/binaryen/test/torture-s/pr57877.c.s create mode 100644 src/binaryen/test/torture-s/pr58209.c.s create mode 100644 src/binaryen/test/torture-s/pr58277-1.c.s create mode 100644 src/binaryen/test/torture-s/pr58277-2.c.s create mode 100644 src/binaryen/test/torture-s/pr58364.c.s create mode 100644 src/binaryen/test/torture-s/pr58365.c.s create mode 100644 src/binaryen/test/torture-s/pr58385.c.s create mode 100644 src/binaryen/test/torture-s/pr58387.c.s create mode 100644 src/binaryen/test/torture-s/pr58419.c.s create mode 100644 src/binaryen/test/torture-s/pr58431.c.s create mode 100644 src/binaryen/test/torture-s/pr58564.c.s create mode 100644 src/binaryen/test/torture-s/pr58570.c.s create mode 100644 src/binaryen/test/torture-s/pr58574.c.s create mode 100644 src/binaryen/test/torture-s/pr58640-2.c.s create mode 100644 src/binaryen/test/torture-s/pr58640.c.s create mode 100644 src/binaryen/test/torture-s/pr58662.c.s create mode 100644 src/binaryen/test/torture-s/pr58726.c.s create mode 100644 src/binaryen/test/torture-s/pr58831.c.s create mode 100644 src/binaryen/test/torture-s/pr58943.c.s create mode 100644 src/binaryen/test/torture-s/pr58984.c.s create mode 100644 src/binaryen/test/torture-s/pr59014-2.c.s create mode 100644 src/binaryen/test/torture-s/pr59014.c.s create mode 100644 src/binaryen/test/torture-s/pr59101.c.s create mode 100644 src/binaryen/test/torture-s/pr59221.c.s create mode 100644 src/binaryen/test/torture-s/pr59229.c.s create mode 100644 src/binaryen/test/torture-s/pr59358.c.s create mode 100644 src/binaryen/test/torture-s/pr59387.c.s create mode 100644 src/binaryen/test/torture-s/pr59388.c.s create mode 100644 src/binaryen/test/torture-s/pr59413.c.s create mode 100644 src/binaryen/test/torture-s/pr59643.c.s create mode 100644 src/binaryen/test/torture-s/pr59747.c.s create mode 100644 src/binaryen/test/torture-s/pr60017.c.s create mode 100644 src/binaryen/test/torture-s/pr60062.c.s create mode 100644 src/binaryen/test/torture-s/pr60072.c.s create mode 100644 src/binaryen/test/torture-s/pr60454.c.s create mode 100644 src/binaryen/test/torture-s/pr60960.c.s create mode 100644 src/binaryen/test/torture-s/pr61306-1.c.s create mode 100644 src/binaryen/test/torture-s/pr61306-2.c.s create mode 100644 src/binaryen/test/torture-s/pr61306-3.c.s create mode 100644 src/binaryen/test/torture-s/pr61375.c.s create mode 100644 src/binaryen/test/torture-s/pr61673.c.s create mode 100644 src/binaryen/test/torture-s/pr61725.c.s create mode 100644 src/binaryen/test/torture-s/pr63209.c.s create mode 100644 src/binaryen/test/torture-s/pr63302.c.s create mode 100644 src/binaryen/test/torture-s/pr63659.c.s create mode 100644 src/binaryen/test/torture-s/pr7284-1.c.s create mode 100644 src/binaryen/test/torture-s/printf-1.c.s create mode 100644 src/binaryen/test/torture-s/printf-chk-1.c.s create mode 100644 src/binaryen/test/torture-s/pta-field-1.c.s create mode 100644 src/binaryen/test/torture-s/pta-field-2.c.s create mode 100644 src/binaryen/test/torture-s/ptr-arith-1.c.s create mode 100644 src/binaryen/test/torture-s/pure-1.c.s create mode 100644 src/binaryen/test/torture-s/pushpop_macro.c.s create mode 100644 src/binaryen/test/torture-s/regstack-1.c.s create mode 100644 src/binaryen/test/torture-s/restrict-1.c.s create mode 100644 src/binaryen/test/torture-s/scal-to-vec1.c.s create mode 100644 src/binaryen/test/torture-s/scal-to-vec2.c.s create mode 100644 src/binaryen/test/torture-s/scal-to-vec3.c.s create mode 100644 src/binaryen/test/torture-s/scope-1.c.s create mode 100644 src/binaryen/test/torture-s/shiftdi.c.s create mode 100644 src/binaryen/test/torture-s/shiftopt-1.c.s create mode 100644 src/binaryen/test/torture-s/simd-1.c.s create mode 100644 src/binaryen/test/torture-s/simd-2.c.s create mode 100644 src/binaryen/test/torture-s/simd-4.c.s create mode 100644 src/binaryen/test/torture-s/simd-5.c.s create mode 100644 src/binaryen/test/torture-s/simd-6.c.s create mode 100644 src/binaryen/test/torture-s/stdarg-1.c.s create mode 100644 src/binaryen/test/torture-s/stdarg-2.c.s create mode 100644 src/binaryen/test/torture-s/stdarg-3.c.s create mode 100644 src/binaryen/test/torture-s/stdarg-4.c.s create mode 100644 src/binaryen/test/torture-s/strcmp-1.c.s create mode 100644 src/binaryen/test/torture-s/strcpy-1.c.s create mode 100644 src/binaryen/test/torture-s/strct-pack-1.c.s create mode 100644 src/binaryen/test/torture-s/strct-pack-2.c.s create mode 100644 src/binaryen/test/torture-s/strct-pack-3.c.s create mode 100644 src/binaryen/test/torture-s/strct-pack-4.c.s create mode 100644 src/binaryen/test/torture-s/strct-stdarg-1.c.s create mode 100644 src/binaryen/test/torture-s/strct-varg-1.c.s create mode 100644 src/binaryen/test/torture-s/string-opt-17.c.s create mode 100644 src/binaryen/test/torture-s/string-opt-18.c.s create mode 100644 src/binaryen/test/torture-s/string-opt-5.c.s create mode 100644 src/binaryen/test/torture-s/strlen-1.c.s create mode 100644 src/binaryen/test/torture-s/strncmp-1.c.s create mode 100644 src/binaryen/test/torture-s/struct-aliasing-1.c.s create mode 100644 src/binaryen/test/torture-s/struct-cpy-1.c.s create mode 100644 src/binaryen/test/torture-s/struct-ini-1.c.s create mode 100644 src/binaryen/test/torture-s/struct-ini-2.c.s create mode 100644 src/binaryen/test/torture-s/struct-ini-3.c.s create mode 100644 src/binaryen/test/torture-s/struct-ini-4.c.s create mode 100644 src/binaryen/test/torture-s/struct-ret-1.c.s create mode 100644 src/binaryen/test/torture-s/struct-ret-2.c.s create mode 100644 src/binaryen/test/torture-s/switch-1.c.s create mode 100644 src/binaryen/test/torture-s/tstdi-1.c.s create mode 100644 src/binaryen/test/torture-s/unroll-1.c.s create mode 100644 src/binaryen/test/torture-s/usmul.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-1.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-10.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-11.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-12.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-13.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-14.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-15.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-16.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-17.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-18.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-19.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-2.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-20.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-21.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-22.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-23.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-24.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-26.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-4.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-5.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-6.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-7.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-8.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-9.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-pack-1.c.s create mode 100644 src/binaryen/test/torture-s/va-arg-trap-1.c.s create mode 100644 src/binaryen/test/torture-s/vfprintf-1.c.s create mode 100644 src/binaryen/test/torture-s/vfprintf-chk-1.c.s create mode 100644 src/binaryen/test/torture-s/vla-dealloc-1.c.s create mode 100644 src/binaryen/test/torture-s/vprintf-1.c.s create mode 100644 src/binaryen/test/torture-s/vprintf-chk-1.c.s create mode 100644 src/binaryen/test/torture-s/vrp-1.c.s create mode 100644 src/binaryen/test/torture-s/vrp-2.c.s create mode 100644 src/binaryen/test/torture-s/vrp-3.c.s create mode 100644 src/binaryen/test/torture-s/vrp-4.c.s create mode 100644 src/binaryen/test/torture-s/vrp-5.c.s create mode 100644 src/binaryen/test/torture-s/vrp-6.c.s create mode 100644 src/binaryen/test/torture-s/vrp-7.c.s create mode 100644 src/binaryen/test/torture-s/wchar_t-1.c.s create mode 100644 src/binaryen/test/torture-s/widechar-1.c.s create mode 100644 src/binaryen/test/torture-s/zero-struct-1.c.s create mode 100644 src/binaryen/test/torture-s/zero-struct-2.c.s create mode 100644 src/binaryen/test/torture-s/zerolen-1.c.s create mode 100644 src/binaryen/test/torture-s/zerolen-2.c.s create mode 100644 src/binaryen/test/two_sides.asm.js create mode 100644 src/binaryen/test/two_sides.fromasm create mode 100644 src/binaryen/test/two_sides.fromasm.clamp create mode 100644 src/binaryen/test/two_sides.fromasm.clamp.no-opts create mode 100644 src/binaryen/test/two_sides.fromasm.imprecise create mode 100644 src/binaryen/test/two_sides.fromasm.imprecise.no-opts create mode 100644 src/binaryen/test/two_sides.fromasm.no-opts create mode 100644 src/binaryen/test/unit.asm.js create mode 100644 src/binaryen/test/unit.fromasm create mode 100644 src/binaryen/test/unit.fromasm.clamp create mode 100644 src/binaryen/test/unit.fromasm.clamp.no-opts create mode 100644 src/binaryen/test/unit.fromasm.imprecise create mode 100644 src/binaryen/test/unit.fromasm.imprecise.no-opts create mode 100644 src/binaryen/test/unit.fromasm.no-opts create mode 100644 src/binaryen/test/unit.wast create mode 100644 src/binaryen/test/unit.wast.from-wast create mode 100644 src/binaryen/test/unit.wast.fromBinary create mode 100644 src/binaryen/test/unit.wast.fromBinary.noDebugInfo create mode 100644 src/binaryen/test/unreachable-code.wast create mode 100644 src/binaryen/test/unreachable-code.wast.from-wast create mode 100644 src/binaryen/test/unreachable-code.wast.fromBinary create mode 100644 src/binaryen/test/unreachable-code.wast.fromBinary.noDebugInfo create mode 100644 src/binaryen/test/unreachable-import_wasm-only.asm.js create mode 100644 src/binaryen/test/unreachable-import_wasm-only.fromasm create mode 100644 src/binaryen/test/unreachable-import_wasm-only.fromasm.clamp create mode 100644 src/binaryen/test/unreachable-import_wasm-only.fromasm.clamp.no-opts create mode 100644 src/binaryen/test/unreachable-import_wasm-only.fromasm.imprecise create mode 100644 src/binaryen/test/unreachable-import_wasm-only.fromasm.imprecise.no-opts create mode 100644 src/binaryen/test/unreachable-import_wasm-only.fromasm.no-opts create mode 100644 src/binaryen/test/unreachable-pops.wasm create mode 100644 src/binaryen/test/unreachable-pops.wasm.fromBinary create mode 100644 src/binaryen/test/untaken-br_if.wast create mode 100644 src/binaryen/test/untaken-br_if.wast.from-wast create mode 100644 src/binaryen/test/untaken-br_if.wast.fromBinary create mode 100644 src/binaryen/test/untaken-br_if.wast.fromBinary.noDebugInfo create mode 100644 src/binaryen/test/use-import-and-drop.asm.js create mode 100644 src/binaryen/test/use-import-and-drop.fromasm create mode 100644 src/binaryen/test/use-import-and-drop.fromasm.clamp create mode 100644 src/binaryen/test/use-import-and-drop.fromasm.clamp.no-opts create mode 100644 src/binaryen/test/use-import-and-drop.fromasm.imprecise create mode 100644 src/binaryen/test/use-import-and-drop.fromasm.imprecise.no-opts create mode 100644 src/binaryen/test/use-import-and-drop.fromasm.no-opts create mode 100644 src/binaryen/test/validator/invalid_export.wast create mode 100644 src/binaryen/test/validator/invalid_import.wast create mode 100644 src/binaryen/test/validator/invalid_return.wast create mode 100644 src/binaryen/test/wasm-only.asm.js create mode 100644 src/binaryen/test/wasm-only.fromasm create mode 100644 src/binaryen/test/wasm-only.fromasm.clamp create mode 100644 src/binaryen/test/wasm-only.fromasm.clamp.no-opts create mode 100644 src/binaryen/test/wasm-only.fromasm.imprecise create mode 100644 src/binaryen/test/wasm-only.fromasm.imprecise.no-opts create mode 100644 src/binaryen/test/wasm-only.fromasm.no-opts create mode 100644 src/binaryen/test/wasm2asm.asserts.js create mode 100644 src/binaryen/test/wasm2asm.traps.js create mode 100644 src/binaryen/test/wasm2asm.wast.asserts create mode 100644 src/binaryen/test/wasm2asm/br_table_temp.wast create mode 100644 src/binaryen/test/wasm_backend/globals_only.cpp create mode 100644 src/binaryen/test/wasm_backend/globals_only.txt create mode 100644 src/binaryen/test/wasm_backend/hello_num_only.cpp create mode 100644 src/binaryen/test/wasm_backend/hello_num_only.txt create mode 100644 src/binaryen/test/wasm_backend/hello_world_only.cpp create mode 100644 src/binaryen/test/wasm_backend/hello_world_only.txt create mode 100644 src/binaryen/test/wasm_backend/hello_world_real.cpp create mode 100644 src/binaryen/test/wasm_backend/hello_world_real.txt create mode 100644 src/binaryen/test/wasm_backend/i64.load32_u.cpp create mode 100644 src/binaryen/test/wasm_backend/i64.load32_u.txt create mode 100644 src/binaryen/test/wasm_backend/i64_load.cpp create mode 100644 src/binaryen/test/wasm_backend/i64_load.txt create mode 100644 src/binaryen/test/wasm_backend/indirect_call_only.cpp create mode 100644 src/binaryen/test/wasm_backend/indirect_call_only.txt create mode 100644 src/binaryen/test/wasm_backend/unaligned_only.cpp create mode 100644 src/binaryen/test/wasm_backend/unaligned_only.txt create mode 100644 src/binaryen/test/waterfall/.travis.yml create mode 100644 src/binaryen/test/waterfall/Contributing.md create mode 100644 src/binaryen/test/waterfall/LICENSE create mode 100644 src/binaryen/test/waterfall/README.md create mode 100755 src/binaryen/test/waterfall/__init__.py create mode 100644 src/binaryen/test/waterfall/setup.cfg create mode 100755 src/binaryen/test/waterfall/src/__init__.py create mode 100755 src/binaryen/test/waterfall/src/assemble_files.py create mode 100755 src/binaryen/test/waterfall/src/build.py create mode 100644 src/binaryen/test/waterfall/src/buildbot.py create mode 100644 src/binaryen/test/waterfall/src/cloud.py create mode 100755 src/binaryen/test/waterfall/src/compile_torture_tests.py create mode 100644 src/binaryen/test/waterfall/src/emscripten_config create mode 100644 src/binaryen/test/waterfall/src/emscripten_config_vanilla create mode 100755 src/binaryen/test/waterfall/src/execute_files.py create mode 100755 src/binaryen/test/waterfall/src/link_assembly_files.py create mode 100755 src/binaryen/test/waterfall/src/proc.py create mode 100644 src/binaryen/test/waterfall/src/test/asm2wasm_compile_known_gcc_test_failures.txt create mode 100644 src/binaryen/test/waterfall/src/test/asm2wasm_run_known_gcc_test_failures.txt create mode 100644 src/binaryen/test/waterfall/src/test/d8_known_gcc_test_failures.txt create mode 100644 src/binaryen/test/waterfall/src/test/d8_musl_known_gcc_test_failures.txt create mode 100644 src/binaryen/test/waterfall/src/test/emwasm_compile_known_gcc_test_failures.txt create mode 100644 src/binaryen/test/waterfall/src/test/emwasm_run_known_gcc_test_failures.txt create mode 100644 src/binaryen/test/waterfall/src/test/spec_known_gcc_test_failures.txt create mode 100755 src/binaryen/test/waterfall/src/testing.py create mode 100755 src/binaryen/travis-emcc-tests.sh create mode 100644 src/binaryen/ubsan.blacklist create mode 100644 src/ci/docker/disabled/dist-x86_64-dragonfly/Dockerfile create mode 100755 src/ci/docker/disabled/dist-x86_64-dragonfly/build-toolchain.sh create mode 100644 src/ci/docker/disabled/dist-x86_64-dragonfly/patch-toolchain create mode 100644 src/ci/docker/x86_64-gnu-cargotest/Dockerfile delete mode 100644 src/ci/docker/x86_64-gnu-llvm-3.7/Dockerfile create mode 100644 src/ci/docker/x86_64-gnu-llvm-3.9/Dockerfile create mode 100644 src/dlmalloc/Cargo.toml rename src/{vendor/bitflags-0.8.2 => dlmalloc}/LICENSE-APACHE (100%) create mode 100644 src/dlmalloc/LICENSE-MIT create mode 100644 src/dlmalloc/build.rs create mode 100644 src/dlmalloc/src/dlmalloc.c create mode 100644 src/dlmalloc/src/dlmalloc.rs create mode 100644 src/dlmalloc/src/global.rs create mode 100644 src/dlmalloc/src/lib.rs create mode 100644 src/dlmalloc/src/linux.rs create mode 100644 src/dlmalloc/src/macos.rs create mode 100644 src/dlmalloc/src/wasm.rs create mode 100644 src/dlmalloc/tests/global.rs create mode 100644 src/dlmalloc/tests/smoke.rs create mode 100644 src/doc/reference/src/destructors.md create mode 100644 src/doc/reference/src/glossary.md delete mode 100644 src/doc/reference/src/glossory.md delete mode 100644 src/doc/reference/src/string-table-productions.md delete mode 100644 src/doc/reference/src/unicode-productions.md create mode 100644 src/doc/unstable-book/src/language-features/crate-visibility-modifier.md create mode 100644 src/doc/unstable-book/src/language-features/non-exhaustive.md create mode 100644 src/doc/unstable-book/src/language-features/optin-builtin-traits.md create mode 100644 src/doc/unstable-book/src/language-features/unboxed-closures.md create mode 100644 src/doc/unstable-book/src/language-features/universal-impl-trait.md delete mode 100644 src/doc/unstable-book/src/library-features/collections.md create mode 100644 src/doc/unstable-book/src/library-features/fn-traits.md delete mode 100644 src/doc/unstable-book/src/library-features/rand.md create mode 100644 src/etc/wasm32-shim.js delete mode 100644 src/jemalloc/.appveyor.yml delete mode 100644 src/jemalloc/.autom4te.cfg delete mode 100644 src/jemalloc/.travis.yml delete mode 100644 src/jemalloc/COPYING delete mode 100644 src/jemalloc/ChangeLog delete mode 100644 src/jemalloc/INSTALL delete mode 100644 src/jemalloc/Makefile.in delete mode 100644 src/jemalloc/README delete mode 100755 src/jemalloc/autogen.sh delete mode 100644 src/jemalloc/bin/jemalloc-config.in delete mode 100644 src/jemalloc/bin/jemalloc.sh.in delete mode 100644 src/jemalloc/bin/jeprof.in delete mode 100755 src/jemalloc/build-aux/config.guess delete mode 100755 src/jemalloc/build-aux/config.sub delete mode 100755 src/jemalloc/build-aux/install-sh delete mode 100755 src/jemalloc/configure delete mode 100644 src/jemalloc/configure.ac delete mode 100755 src/jemalloc/coverage.sh delete mode 100644 src/jemalloc/doc/html.xsl.in delete mode 100644 src/jemalloc/doc/jemalloc.xml.in delete mode 100644 src/jemalloc/doc/manpages.xsl.in delete mode 100644 src/jemalloc/doc/stylesheet.xsl delete mode 100644 src/jemalloc/include/jemalloc/internal/arena.h delete mode 100644 src/jemalloc/include/jemalloc/internal/assert.h delete mode 100644 src/jemalloc/include/jemalloc/internal/atomic.h delete mode 100644 src/jemalloc/include/jemalloc/internal/base.h delete mode 100644 src/jemalloc/include/jemalloc/internal/bitmap.h delete mode 100644 src/jemalloc/include/jemalloc/internal/chunk.h delete mode 100644 src/jemalloc/include/jemalloc/internal/chunk_dss.h delete mode 100644 src/jemalloc/include/jemalloc/internal/chunk_mmap.h delete mode 100644 src/jemalloc/include/jemalloc/internal/ckh.h delete mode 100644 src/jemalloc/include/jemalloc/internal/ctl.h delete mode 100644 src/jemalloc/include/jemalloc/internal/extent.h delete mode 100644 src/jemalloc/include/jemalloc/internal/hash.h delete mode 100644 src/jemalloc/include/jemalloc/internal/huge.h delete mode 100644 src/jemalloc/include/jemalloc/internal/jemalloc_internal.h.in delete mode 100644 src/jemalloc/include/jemalloc/internal/jemalloc_internal_decls.h delete mode 100644 src/jemalloc/include/jemalloc/internal/jemalloc_internal_defs.h.in delete mode 100644 src/jemalloc/include/jemalloc/internal/jemalloc_internal_macros.h delete mode 100644 src/jemalloc/include/jemalloc/internal/mb.h delete mode 100644 src/jemalloc/include/jemalloc/internal/mutex.h delete mode 100644 src/jemalloc/include/jemalloc/internal/nstime.h delete mode 100644 src/jemalloc/include/jemalloc/internal/pages.h delete mode 100644 src/jemalloc/include/jemalloc/internal/ph.h delete mode 100755 src/jemalloc/include/jemalloc/internal/private_namespace.sh delete mode 100644 src/jemalloc/include/jemalloc/internal/private_symbols.txt delete mode 100755 src/jemalloc/include/jemalloc/internal/private_unnamespace.sh delete mode 100644 src/jemalloc/include/jemalloc/internal/prng.h delete mode 100644 src/jemalloc/include/jemalloc/internal/prof.h delete mode 100755 src/jemalloc/include/jemalloc/internal/public_namespace.sh delete mode 100755 src/jemalloc/include/jemalloc/internal/public_unnamespace.sh delete mode 100644 src/jemalloc/include/jemalloc/internal/ql.h delete mode 100644 src/jemalloc/include/jemalloc/internal/qr.h delete mode 100644 src/jemalloc/include/jemalloc/internal/quarantine.h delete mode 100644 src/jemalloc/include/jemalloc/internal/rb.h delete mode 100644 src/jemalloc/include/jemalloc/internal/rtree.h delete mode 100755 src/jemalloc/include/jemalloc/internal/size_classes.sh delete mode 100644 src/jemalloc/include/jemalloc/internal/smoothstep.h delete mode 100755 src/jemalloc/include/jemalloc/internal/smoothstep.sh delete mode 100644 src/jemalloc/include/jemalloc/internal/spin.h delete mode 100644 src/jemalloc/include/jemalloc/internal/stats.h delete mode 100644 src/jemalloc/include/jemalloc/internal/tcache.h delete mode 100644 src/jemalloc/include/jemalloc/internal/ticker.h delete mode 100644 src/jemalloc/include/jemalloc/internal/tsd.h delete mode 100644 src/jemalloc/include/jemalloc/internal/util.h delete mode 100644 src/jemalloc/include/jemalloc/internal/valgrind.h delete mode 100644 src/jemalloc/include/jemalloc/internal/witness.h delete mode 100755 src/jemalloc/include/jemalloc/jemalloc.sh delete mode 100644 src/jemalloc/include/jemalloc/jemalloc_defs.h.in delete mode 100644 src/jemalloc/include/jemalloc/jemalloc_macros.h.in delete mode 100755 src/jemalloc/include/jemalloc/jemalloc_mangle.sh delete mode 100644 src/jemalloc/include/jemalloc/jemalloc_protos.h.in delete mode 100755 src/jemalloc/include/jemalloc/jemalloc_rename.sh delete mode 100644 src/jemalloc/include/jemalloc/jemalloc_typedefs.h.in delete mode 100644 src/jemalloc/include/msvc_compat/C99/stdbool.h delete mode 100644 src/jemalloc/include/msvc_compat/C99/stdint.h delete mode 100644 src/jemalloc/include/msvc_compat/strings.h delete mode 100644 src/jemalloc/include/msvc_compat/windows_extra.h delete mode 100644 src/jemalloc/jemalloc.pc.in delete mode 100644 src/jemalloc/msvc/ReadMe.txt delete mode 100644 src/jemalloc/msvc/projects/vc2015/jemalloc/jemalloc.vcxproj delete mode 100644 src/jemalloc/msvc/projects/vc2015/jemalloc/jemalloc.vcxproj.filters delete mode 100644 src/jemalloc/msvc/projects/vc2015/test_threads/test_threads.cpp delete mode 100644 src/jemalloc/msvc/projects/vc2015/test_threads/test_threads.h delete mode 100644 src/jemalloc/msvc/projects/vc2015/test_threads/test_threads.vcxproj delete mode 100644 src/jemalloc/msvc/projects/vc2015/test_threads/test_threads.vcxproj.filters delete mode 100644 src/jemalloc/msvc/projects/vc2015/test_threads/test_threads_main.cpp delete mode 100755 src/jemalloc/scripts/gen_travis.py delete mode 100644 src/jemalloc/src/arena.c delete mode 100644 src/jemalloc/src/atomic.c delete mode 100644 src/jemalloc/src/base.c delete mode 100644 src/jemalloc/src/bitmap.c delete mode 100644 src/jemalloc/src/chunk.c delete mode 100644 src/jemalloc/src/chunk_dss.c delete mode 100644 src/jemalloc/src/chunk_mmap.c delete mode 100644 src/jemalloc/src/ckh.c delete mode 100644 src/jemalloc/src/ctl.c delete mode 100644 src/jemalloc/src/extent.c delete mode 100644 src/jemalloc/src/hash.c delete mode 100644 src/jemalloc/src/huge.c delete mode 100644 src/jemalloc/src/jemalloc.c delete mode 100644 src/jemalloc/src/mb.c delete mode 100644 src/jemalloc/src/mutex.c delete mode 100644 src/jemalloc/src/nstime.c delete mode 100644 src/jemalloc/src/pages.c delete mode 100644 src/jemalloc/src/prng.c delete mode 100644 src/jemalloc/src/prof.c delete mode 100644 src/jemalloc/src/quarantine.c delete mode 100644 src/jemalloc/src/rtree.c delete mode 100644 src/jemalloc/src/spin.c delete mode 100644 src/jemalloc/src/stats.c delete mode 100644 src/jemalloc/src/tcache.c delete mode 100644 src/jemalloc/src/ticker.c delete mode 100644 src/jemalloc/src/tsd.c delete mode 100644 src/jemalloc/src/util.c delete mode 100644 src/jemalloc/src/valgrind.c delete mode 100644 src/jemalloc/src/witness.c delete mode 100644 src/jemalloc/src/zone.c delete mode 100644 src/jemalloc/test/include/test/SFMT-alti.h delete mode 100644 src/jemalloc/test/include/test/SFMT-params.h delete mode 100644 src/jemalloc/test/include/test/SFMT-params11213.h delete mode 100644 src/jemalloc/test/include/test/SFMT-params1279.h delete mode 100644 src/jemalloc/test/include/test/SFMT-params132049.h delete mode 100644 src/jemalloc/test/include/test/SFMT-params19937.h delete mode 100644 src/jemalloc/test/include/test/SFMT-params216091.h delete mode 100644 src/jemalloc/test/include/test/SFMT-params2281.h delete mode 100644 src/jemalloc/test/include/test/SFMT-params4253.h delete mode 100644 src/jemalloc/test/include/test/SFMT-params44497.h delete mode 100644 src/jemalloc/test/include/test/SFMT-params607.h delete mode 100644 src/jemalloc/test/include/test/SFMT-params86243.h delete mode 100644 src/jemalloc/test/include/test/SFMT-sse2.h delete mode 100644 src/jemalloc/test/include/test/SFMT.h delete mode 100644 src/jemalloc/test/include/test/btalloc.h delete mode 100644 src/jemalloc/test/include/test/jemalloc_test.h.in delete mode 100644 src/jemalloc/test/include/test/jemalloc_test_defs.h.in delete mode 100644 src/jemalloc/test/include/test/math.h delete mode 100644 src/jemalloc/test/include/test/mq.h delete mode 100644 src/jemalloc/test/include/test/mtx.h delete mode 100644 src/jemalloc/test/include/test/test.h delete mode 100644 src/jemalloc/test/include/test/thd.h delete mode 100644 src/jemalloc/test/include/test/timer.h delete mode 100644 src/jemalloc/test/integration/MALLOCX_ARENA.c delete mode 100644 src/jemalloc/test/integration/aligned_alloc.c delete mode 100644 src/jemalloc/test/integration/allocated.c delete mode 100644 src/jemalloc/test/integration/chunk.c delete mode 100644 src/jemalloc/test/integration/chunk.sh delete mode 100644 src/jemalloc/test/integration/mallocx.c delete mode 100644 src/jemalloc/test/integration/mallocx.sh delete mode 100644 src/jemalloc/test/integration/overflow.c delete mode 100644 src/jemalloc/test/integration/posix_memalign.c delete mode 100644 src/jemalloc/test/integration/rallocx.c delete mode 100644 src/jemalloc/test/integration/sdallocx.c delete mode 100644 src/jemalloc/test/integration/thread_arena.c delete mode 100644 src/jemalloc/test/integration/thread_tcache_enabled.c delete mode 100644 src/jemalloc/test/integration/xallocx.c delete mode 100644 src/jemalloc/test/integration/xallocx.sh delete mode 100644 src/jemalloc/test/src/SFMT.c delete mode 100644 src/jemalloc/test/src/btalloc.c delete mode 100644 src/jemalloc/test/src/btalloc_0.c delete mode 100644 src/jemalloc/test/src/btalloc_1.c delete mode 100644 src/jemalloc/test/src/math.c delete mode 100644 src/jemalloc/test/src/mq.c delete mode 100644 src/jemalloc/test/src/mtx.c delete mode 100644 src/jemalloc/test/src/test.c delete mode 100644 src/jemalloc/test/src/thd.c delete mode 100644 src/jemalloc/test/src/timer.c delete mode 100644 src/jemalloc/test/stress/microbench.c delete mode 100644 src/jemalloc/test/test.sh.in delete mode 100644 src/jemalloc/test/unit/SFMT.c delete mode 100644 src/jemalloc/test/unit/a0.c delete mode 100644 src/jemalloc/test/unit/arena_reset.c delete mode 100644 src/jemalloc/test/unit/arena_reset.sh delete mode 100644 src/jemalloc/test/unit/atomic.c delete mode 100644 src/jemalloc/test/unit/bitmap.c delete mode 100644 src/jemalloc/test/unit/ckh.c delete mode 100644 src/jemalloc/test/unit/decay.c delete mode 100644 src/jemalloc/test/unit/decay.sh delete mode 100644 src/jemalloc/test/unit/extent_quantize.c delete mode 100644 src/jemalloc/test/unit/fork.c delete mode 100644 src/jemalloc/test/unit/hash.c delete mode 100644 src/jemalloc/test/unit/junk.c delete mode 100644 src/jemalloc/test/unit/junk.sh delete mode 100644 src/jemalloc/test/unit/junk_alloc.c delete mode 100644 src/jemalloc/test/unit/junk_alloc.sh delete mode 100644 src/jemalloc/test/unit/junk_free.c delete mode 100644 src/jemalloc/test/unit/junk_free.sh delete mode 100644 src/jemalloc/test/unit/lg_chunk.c delete mode 100644 src/jemalloc/test/unit/lg_chunk.sh delete mode 100644 src/jemalloc/test/unit/mallctl.c delete mode 100644 src/jemalloc/test/unit/math.c delete mode 100644 src/jemalloc/test/unit/mq.c delete mode 100644 src/jemalloc/test/unit/mtx.c delete mode 100644 src/jemalloc/test/unit/nstime.c delete mode 100644 src/jemalloc/test/unit/pack.c delete mode 100644 src/jemalloc/test/unit/pack.sh delete mode 100644 src/jemalloc/test/unit/pages.c delete mode 100644 src/jemalloc/test/unit/ph.c delete mode 100644 src/jemalloc/test/unit/prng.c delete mode 100644 src/jemalloc/test/unit/prof_accum.c delete mode 100644 src/jemalloc/test/unit/prof_accum.sh delete mode 100644 src/jemalloc/test/unit/prof_active.c delete mode 100644 src/jemalloc/test/unit/prof_active.sh delete mode 100644 src/jemalloc/test/unit/prof_gdump.c delete mode 100644 src/jemalloc/test/unit/prof_gdump.sh delete mode 100644 src/jemalloc/test/unit/prof_idump.c delete mode 100644 src/jemalloc/test/unit/prof_idump.sh delete mode 100644 src/jemalloc/test/unit/prof_reset.c delete mode 100644 src/jemalloc/test/unit/prof_reset.sh delete mode 100644 src/jemalloc/test/unit/prof_tctx.sh delete mode 100644 src/jemalloc/test/unit/prof_thread_name.c delete mode 100644 src/jemalloc/test/unit/prof_thread_name.sh delete mode 100644 src/jemalloc/test/unit/ql.c delete mode 100644 src/jemalloc/test/unit/qr.c delete mode 100644 src/jemalloc/test/unit/quarantine.c delete mode 100644 src/jemalloc/test/unit/quarantine.sh delete mode 100644 src/jemalloc/test/unit/rb.c delete mode 100644 src/jemalloc/test/unit/rtree.c delete mode 100644 src/jemalloc/test/unit/run_quantize.c delete mode 100644 src/jemalloc/test/unit/size_classes.c delete mode 100644 src/jemalloc/test/unit/smoothstep.c delete mode 100644 src/jemalloc/test/unit/stats.c delete mode 100644 src/jemalloc/test/unit/stats_print.c delete mode 100644 src/jemalloc/test/unit/ticker.c delete mode 100644 src/jemalloc/test/unit/tsd.c delete mode 100644 src/jemalloc/test/unit/util.c delete mode 100644 src/jemalloc/test/unit/witness.c delete mode 100644 src/jemalloc/test/unit/zero.c delete mode 100644 src/jemalloc/test/unit/zero.sh delete mode 100644 src/libcollections/Cargo.toml delete mode 100644 src/libcollections/lib.rs create mode 100644 src/libcompiler_builtins/src/arm_linux.rs create mode 100644 src/libcompiler_builtins/src/float/div.rs create mode 100644 src/libcompiler_builtins/src/float/mul.rs create mode 100644 src/libcompiler_builtins/tests/divdf3.rs create mode 100644 src/libcompiler_builtins/tests/divsf3.rs create mode 100644 src/libcompiler_builtins/tests/muldf3.rs create mode 100644 src/libcompiler_builtins/tests/mulsf3.rs create mode 100644 src/libcore/benches/slice.rs create mode 100644 src/libcore/unit.rs delete mode 100755 src/liblibc/ci/android-accept-licenses.sh create mode 100644 src/liblibc/ci/docker/aarch64-unknown-linux-musl/Dockerfile create mode 100644 src/liblibc/ci/docker/arm-unknown-linux-musleabihf/Dockerfile create mode 100644 src/liblibc/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile create mode 100644 src/liblibc/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile create mode 100644 src/liblibc/ci/docker/sparc64-unknown-linux-gnu/Dockerfile create mode 100644 src/liblibc/ci/docker/x86_64-unknown-linux-gnux32/Dockerfile create mode 100644 src/liblibc/ci/linux-s390x.sh create mode 100644 src/liblibc/ci/linux-sparc64.sh create mode 100755 src/liblibc/ci/test-runner-linux create mode 100644 src/liblibc/src/fuchsia/aarch64.rs create mode 100644 src/liblibc/src/fuchsia/mod.rs create mode 100644 src/liblibc/src/fuchsia/powerpc64.rs create mode 100644 src/liblibc/src/fuchsia/x86_64.rs delete mode 100644 src/liblibc/src/redox.rs create mode 100644 src/liblibc/src/redox/mod.rs create mode 100644 src/liblibc/src/redox/net.rs create mode 100644 src/liblibc/src/unix/newlib/aarch64/mod.rs create mode 100644 src/liblibc/src/unix/notbsd/linux/other/b64/not_x32.rs create mode 100644 src/liblibc/src/unix/notbsd/linux/other/b64/x32.rs create mode 100644 src/libpanic_unwind/wasm32.rs delete mode 100644 src/librand/Cargo.toml delete mode 100644 src/librand/chacha.rs delete mode 100644 src/librand/distributions/exponential.rs delete mode 100644 src/librand/distributions/gamma.rs delete mode 100644 src/librand/distributions/mod.rs delete mode 100644 src/librand/distributions/normal.rs delete mode 100644 src/librand/distributions/range.rs delete mode 100644 src/librand/distributions/ziggurat_tables.rs delete mode 100644 src/librand/isaac.rs delete mode 100644 src/librand/lib.rs delete mode 100644 src/librand/rand_impls.rs delete mode 100644 src/librand/reseeding.rs create mode 100644 src/librustc/infer/lexical_region_resolve/README.md rename src/librustc/infer/{region_inference => lexical_region_resolve}/graphviz.rs (87%) create mode 100644 src/librustc/infer/lexical_region_resolve/mod.rs create mode 100644 src/librustc/infer/outlives/env.rs create mode 100644 src/librustc/infer/outlives/mod.rs create mode 100644 src/librustc/infer/outlives/obligations.rs create mode 100644 src/librustc/infer/region_constraints/README.md create mode 100644 src/librustc/infer/region_constraints/mod.rs create mode 100644 src/librustc/infer/region_constraints/taint.rs delete mode 100644 src/librustc/infer/region_inference/README.md delete mode 100644 src/librustc/infer/region_inference/mod.rs create mode 100644 src/librustc/middle/borrowck.rs delete mode 100644 src/librustc/mir/transform.rs create mode 100644 src/librustc/ty/codec.rs create mode 100644 src/librustc/ty/erase_regions.rs create mode 100644 src/librustc/ty/maps/on_disk_cache.rs create mode 100644 src/librustc_back/target/wasm32_unknown_unknown.rs create mode 100644 src/librustc_back/target/x86_64_unknown_linux_gnux32.rs create mode 100644 src/librustc_binaryen/BinaryenWrapper.cpp create mode 100644 src/librustc_binaryen/Cargo.toml create mode 100644 src/librustc_binaryen/build.rs create mode 100644 src/librustc_binaryen/lib.rs create mode 100644 src/librustc_borrowck/borrowck/unused.rs create mode 100644 src/librustc_data_structures/sip128.rs create mode 100644 src/librustc_mir/transform/nll/constraint_generation.rs create mode 100644 src/librustc_mir/transform/nll/free_regions.rs create mode 100644 src/librustc_mir/transform/nll/region_infer.rs create mode 100644 src/librustc_mir/transform/nll/renumber.rs create mode 100644 src/librustc_mir/transform/nll/subtype_constraint_generation.rs rename src/{librustc_trans => librustc_trans_utils}/collector.rs (96%) create mode 100644 src/librustc_trans_utils/common.rs rename src/{librustc_trans => librustc_trans_utils}/monomorphize.rs (94%) create mode 100644 src/librustc_trans_utils/trans_item.rs create mode 100644 src/librustc_typeck/namespace.rs create mode 100644 src/librustc_typeck/outlives/mod.rs create mode 100644 src/librustc_typeck/outlives/test.rs delete mode 100644 src/libstd/rand/mod.rs create mode 100644 src/libstd/sync/mpsc/cache_aligned.rs create mode 100644 src/libstd/sys/redox/cmath.rs create mode 100644 src/libstd/sys/unix/cmath.rs create mode 100644 src/libstd/sys/wasm/args.rs create mode 100644 src/libstd/sys/wasm/backtrace.rs create mode 100644 src/libstd/sys/wasm/cmath.rs create mode 100644 src/libstd/sys/wasm/condvar.rs create mode 100644 src/libstd/sys/wasm/env.rs create mode 100644 src/libstd/sys/wasm/fs.rs create mode 100644 src/libstd/sys/wasm/memchr.rs create mode 100644 src/libstd/sys/wasm/mod.rs create mode 100644 src/libstd/sys/wasm/mutex.rs create mode 100644 src/libstd/sys/wasm/net.rs create mode 100644 src/libstd/sys/wasm/os.rs create mode 100644 src/libstd/sys/wasm/os_str.rs create mode 100644 src/libstd/sys/wasm/path.rs create mode 100644 src/libstd/sys/wasm/pipe.rs create mode 100644 src/libstd/sys/wasm/process.rs create mode 100644 src/libstd/sys/wasm/rwlock.rs create mode 100644 src/libstd/sys/wasm/stack_overflow.rs create mode 100644 src/libstd/sys/wasm/stdio.rs create mode 100644 src/libstd/sys/wasm/thread.rs create mode 100644 src/libstd/sys/wasm/thread_local.rs create mode 100644 src/libstd/sys/wasm/time.rs create mode 100644 src/libstd/sys/windows/cmath.rs create mode 100644 src/libunwind/macros.rs create mode 100644 src/rustc/dlmalloc_shim/Cargo.toml create mode 100644 src/test/codegen-units/item-collection/unreferenced-const-fn.rs create mode 100644 src/test/codegen-units/item-collection/unreferenced-inline-function.rs create mode 100644 src/test/codegen/auxiliary/nounwind.rs create mode 100644 src/test/codegen/match-optimizes-away.rs create mode 100644 src/test/codegen/nounwind.rs create mode 100644 src/test/codegen/unchecked-float-casts.rs create mode 100644 src/test/codegen/vtabletype.rs delete mode 100644 src/test/compile-fail/E0308-2.rs create mode 100644 src/test/compile-fail/arbitrary-self-types-not-object-safe.rs create mode 100644 src/test/compile-fail/auto-impl-future-compat.rs create mode 100644 src/test/compile-fail/auto-trait-validation.rs create mode 100644 src/test/compile-fail/auxiliary/issue_1920.rs create mode 100644 src/test/compile-fail/borrowck/borrowck-access-permissions.rs create mode 100644 src/test/compile-fail/borrowck/borrowck-describe-lvalue.rs create mode 100644 src/test/compile-fail/borrowck/borrowck-drop-from-guard.rs create mode 100644 src/test/compile-fail/borrowck/borrowck-match-already-borrowed.rs create mode 100644 src/test/compile-fail/borrowck/borrowck-storage-dead.rs create mode 100644 src/test/compile-fail/borrowck/borrowck-uninit-field-access.rs create mode 100644 src/test/compile-fail/borrowck/borrowck-uninit-ref-chain.rs create mode 100644 src/test/compile-fail/closure-expected-type/README.md create mode 100644 src/test/compile-fail/closure-expected-type/expect-fn-supply-fn-multiple.rs create mode 100644 src/test/compile-fail/closure-expected-type/expect-fn-supply-fn.rs create mode 100644 src/test/compile-fail/closure-expected-type/expect-infer-var-appearing-twice.rs create mode 100644 src/test/compile-fail/closure-expected-type/expect-infer-var-supply-ty-with-bound-region.rs create mode 100644 src/test/compile-fail/closure-expected-type/expect-infer-var-supply-ty-with-free-region.rs create mode 100644 src/test/compile-fail/closure-expected-type/expect-region-supply-region.rs create mode 100644 src/test/compile-fail/closure-expected-type/expect-two-infer-vars-supply-ty-with-bound-region.rs delete mode 100644 src/test/compile-fail/const-pattern-irrefutable.rs create mode 100644 src/test/compile-fail/dyn-trait-compatibility.rs create mode 100644 src/test/compile-fail/extern-types-distinct-types.rs create mode 100644 src/test/compile-fail/extern-types-not-sync-send.rs create mode 100644 src/test/compile-fail/extern-types-unsized.rs create mode 100644 src/test/compile-fail/feature-gate-arbitrary-self-types.rs create mode 100644 src/test/compile-fail/feature-gate-crate_visibility_modifier.rs create mode 100644 src/test/compile-fail/feature-gate-dyn-trait.rs create mode 100644 src/test/compile-fail/feature-gate-extern_types.rs create mode 100644 src/test/compile-fail/feature-gate-non_exhaustive.rs create mode 100644 src/test/compile-fail/feature-gate-wasm_import_memory.rs create mode 100644 src/test/compile-fail/float-int-invalid-const-cast.rs delete mode 100644 src/test/compile-fail/impl-trait/disallowed-2.rs delete mode 100644 src/test/compile-fail/impl-trait/disallowed.rs create mode 100644 src/test/compile-fail/impl-trait/feature-gate-universal.rs create mode 100644 src/test/compile-fail/impl-trait/impl-generic-mismatch-ab.rs create mode 100644 src/test/compile-fail/impl-trait/impl-generic-mismatch.rs create mode 100644 src/test/compile-fail/impl-trait/where-allowed.rs delete mode 100644 src/test/compile-fail/incr_comp_with_macro_export.rs create mode 100644 src/test/compile-fail/index-help.rs create mode 100644 src/test/compile-fail/issue-44239.rs delete mode 100644 src/test/compile-fail/name-clash-nullary.rs create mode 100644 src/test/compile-fail/nll/loan_ends_mid_block_pair.rs create mode 100644 src/test/compile-fail/nll/loan_ends_mid_block_vec.rs create mode 100644 src/test/compile-fail/nll/region-ends-after-if-condition.rs create mode 100644 src/test/compile-fail/nll/return_from_loop.rs create mode 100644 src/test/compile-fail/no-patterns-in-args-macro.rs create mode 100644 src/test/compile-fail/outlives-associated-types.rs create mode 100644 src/test/compile-fail/pattern-binding-disambiguation.rs create mode 100644 src/test/compile-fail/rfc-2008-non-exhaustive/auxiliary/enums.rs create mode 100644 src/test/compile-fail/rfc-2008-non-exhaustive/auxiliary/structs.rs create mode 100644 src/test/compile-fail/rfc-2008-non-exhaustive/auxiliary/variants.rs create mode 100644 src/test/compile-fail/rfc-2008-non-exhaustive/enum.rs create mode 100644 src/test/compile-fail/rfc-2008-non-exhaustive/structs.rs create mode 100644 src/test/compile-fail/rfc-2008-non-exhaustive/variants.rs create mode 100644 src/test/compile-fail/rfc-2008-non-exhaustive/variants_create.rs delete mode 100644 src/test/compile-fail/task-rng-isnt-sendable.rs create mode 100644 src/test/incremental/macro_export.rs create mode 100644 src/test/incremental/remove_crate/auxiliary/extern_crate.rs create mode 100644 src/test/incremental/remove_crate/main.rs create mode 100644 src/test/incremental/spans_significant_w_panic.rs create mode 100644 src/test/incremental/warnings-reemitted.rs create mode 100644 src/test/mir-opt/copy_propagation_arg.rs create mode 100644 src/test/mir-opt/inline-closure.rs create mode 100644 src/test/mir-opt/match_false_edges.rs create mode 100644 src/test/mir-opt/nll/liveness-call-subtlety.rs create mode 100644 src/test/mir-opt/nll/liveness-drop-intra-block.rs create mode 100644 src/test/mir-opt/nll/liveness-interblock.rs create mode 100644 src/test/mir-opt/nll/named-lifetimes-basic.rs create mode 100644 src/test/mir-opt/nll/reborrow-basic.rs create mode 100644 src/test/mir-opt/nll/region-liveness-basic.rs create mode 100644 src/test/mir-opt/nll/region-liveness-drop-may-dangle.rs create mode 100644 src/test/mir-opt/nll/region-liveness-drop-no-may-dangle.rs create mode 100644 src/test/mir-opt/nll/region-liveness-two-disjoint-uses.rs create mode 100644 src/test/mir-opt/nll/region-subtyping-basic.rs create mode 100644 src/test/parse-fail/range_inclusive_dotdotdot.rs create mode 100644 src/test/pretty/auto-trait.rs create mode 100644 src/test/pretty/cast-lt.pp create mode 100644 src/test/pretty/cast-lt.rs delete mode 100644 src/test/pretty/default-trait-impl.rs create mode 100644 src/test/run-make/cdylib-fewer-symbols/Makefile create mode 100644 src/test/run-make/cdylib-fewer-symbols/foo.rs create mode 100644 src/test/run-make/extern-fn-with-extern-types/Makefile create mode 100644 src/test/run-make/extern-fn-with-extern-types/ctest.c create mode 100644 src/test/run-make/extern-fn-with-extern-types/test.rs create mode 100644 src/test/run-make/inline-always-many-cgu/Makefile create mode 100644 src/test/run-make/inline-always-many-cgu/foo.rs create mode 100644 src/test/run-make/issue-46239/Makefile create mode 100644 src/test/run-make/issue-46239/main.rs create mode 100644 src/test/run-make/msvc-opt-minsize/Makefile create mode 100644 src/test/run-make/msvc-opt-minsize/foo.rs create mode 100644 src/test/run-make/target-specs/my-x86_64-unknown-linux-gnu-platform.json delete mode 100644 src/test/run-make/target-specs/x86_64-unknown-linux-gnu.json rename src/test/{run-pass => run-pass-fulldeps}/binary-heap-panic-safe.rs (97%) create mode 100644 src/test/run-pass-fulldeps/env.rs create mode 100644 src/test/run-pass-fulldeps/flt2dec.rs create mode 100644 src/test/run-pass-fulldeps/sort-unstable.rs rename src/test/{run-pass => run-pass-fulldeps}/vector-sort-panic-safe.rs (98%) create mode 100644 src/test/run-pass/arbitrary_self_types_silly.rs create mode 100644 src/test/run-pass/arbitrary_self_types_struct.rs create mode 100644 src/test/run-pass/arbitrary_self_types_trait.rs create mode 100644 src/test/run-pass/arbitrary_self_types_unsized_struct.rs rename src/test/{ui/macros/assert_eq_trailing_comma.rs => run-pass/assert-eq-trailing-comma.rs} (100%) rename src/test/{ui/macros/assert_ne_trailing_comma.rs => run-pass/assert-ne-trailing-comma.rs} (100%) rename src/test/run-pass/{associated-types-project-from-type-param-via-bound-in-where-clause.rs => associated-types-project-from-type-param-via-bound-in-where.rs} (100%) create mode 100644 src/test/run-pass/auto-is-contextual.rs create mode 100644 src/test/run-pass/auto-traits.rs create mode 100644 src/test/run-pass/borrowck/borrowck-assignment-to-static-mut.rs create mode 100644 src/test/run-pass/borrowck/borrowck-unsafe-static-mutable-borrows.rs create mode 100644 src/test/run-pass/closure-expected-type/README.md create mode 100644 src/test/run-pass/closure-expected-type/expect-infer-supply-two-infers.rs create mode 100644 src/test/run-pass/closure-expected-type/issue-38714.rs create mode 100644 src/test/run-pass/closure-expected-type/supply-just-return-type.rs create mode 100644 src/test/run-pass/closure-expected-type/supply-nothing.rs create mode 100644 src/test/run-pass/ctfe/assoc-const.rs create mode 100644 src/test/run-pass/dead-code-alias-in-pat.rs create mode 100644 src/test/run-pass/dyn-trait.rs create mode 100644 src/test/run-pass/enum-non-c-like-repr-int.rs delete mode 100644 src/test/run-pass/env.rs create mode 100644 src/test/run-pass/extern-types-inherent-impl.rs create mode 100644 src/test/run-pass/extern-types-manual-sync-send.rs create mode 100644 src/test/run-pass/extern-types-pointer-cast.rs create mode 100644 src/test/run-pass/extern-types-size_of_val.rs create mode 100644 src/test/run-pass/extern-types-thin-pointer.rs create mode 100644 src/test/run-pass/extern-types-trait-impl.rs create mode 100644 src/test/run-pass/impl-trait/universal_hrtb_anon.rs create mode 100644 src/test/run-pass/impl-trait/universal_hrtb_named.rs create mode 100644 src/test/run-pass/impl-trait/universal_in_adt_in_parameters.rs create mode 100644 src/test/run-pass/impl-trait/universal_in_impl_trait_in_parameters.rs create mode 100644 src/test/run-pass/impl-trait/universal_in_trait_defn_parameters.rs create mode 100644 src/test/run-pass/impl-trait/universal_multiple_bounds.rs create mode 100644 src/test/run-pass/implied-bounds-closure-arg-outlives.rs create mode 100644 src/test/run-pass/issue-32008.rs create mode 100644 src/test/run-pass/issue-35600.rs create mode 100644 src/test/run-pass/issue-40003.rs create mode 100644 src/test/run-pass/issue-44247.rs create mode 100644 src/test/run-pass/issue-44402.rs create mode 100644 src/test/run-pass/issue-44851.rs create mode 100644 src/test/run-pass/issue-45124.rs create mode 100644 src/test/run-pass/issue-45425.rs create mode 100644 src/test/run-pass/issue-46519.rs create mode 100644 src/test/run-pass/lub-glb-with-unbound-infer-var.rs create mode 100644 src/test/run-pass/mir-inlining/ice-issue-45493.rs create mode 100644 src/test/run-pass/mir-inlining/ice-issue-45885.rs create mode 100644 src/test/run-pass/next-power-of-two-overflow-debug.rs create mode 100644 src/test/run-pass/next-power-of-two-overflow-ndebug.rs create mode 100644 src/test/run-pass/rfc-2008-non-exhaustive/auxiliary/enums.rs create mode 100644 src/test/run-pass/rfc-2008-non-exhaustive/auxiliary/structs.rs create mode 100644 src/test/run-pass/rfc-2008-non-exhaustive/auxiliary/variants.rs create mode 100644 src/test/run-pass/rfc-2008-non-exhaustive/enums.rs create mode 100644 src/test/run-pass/rfc-2008-non-exhaustive/enums_same_crate.rs create mode 100644 src/test/run-pass/rfc-2008-non-exhaustive/structs.rs create mode 100644 src/test/run-pass/rfc-2008-non-exhaustive/structs_same_crate.rs create mode 100644 src/test/run-pass/rfc-2008-non-exhaustive/variants.rs create mode 100644 src/test/run-pass/rfc-2008-non-exhaustive/variants_same_crate.rs create mode 100644 src/test/run-pass/saturating-float-casts.rs delete mode 100644 src/test/run-pass/smallest-hello-world.rs rename src/test/run-pass/specialization/defaultimpl/{specialization-allowed-cross-crate.rs => allowed-cross-crate.rs} (100%) rename src/test/run-pass/specialization/defaultimpl/{specialization-assoc-fns.rs => assoc-fns.rs} (100%) rename src/test/run-pass/specialization/defaultimpl/auxiliary/{specialization_cross_crate.rs => cross_crate.rs} (100%) rename src/test/run-pass/specialization/defaultimpl/auxiliary/{specialization_cross_crate_defaults.rs => cross_crate_defaults.rs} (100%) rename src/test/run-pass/specialization/defaultimpl/{specialization-basics-unsafe.rs => basics-unsafe.rs} (100%) rename src/test/run-pass/specialization/defaultimpl/{specialization-basics.rs => basics.rs} (100%) create mode 100644 src/test/run-pass/specialization/defaultimpl/cross-crate-defaults.rs create mode 100644 src/test/run-pass/specialization/defaultimpl/cross-crate-no-gate.rs create mode 100644 src/test/run-pass/specialization/defaultimpl/cross-crate.rs rename src/test/run-pass/specialization/defaultimpl/{specialization-default-methods.rs => default-methods.rs} (100%) rename src/test/run-pass/specialization/defaultimpl/{specialization-out-of-order.rs => out-of-order.rs} (100%) rename src/test/run-pass/specialization/defaultimpl/{specialization-overlap-projection.rs => overlap-projection.rs} (100%) rename src/test/run-pass/specialization/defaultimpl/{specialization-projection-alias.rs => projection-alias.rs} (100%) rename src/test/run-pass/specialization/defaultimpl/{specialization-projection.rs => projection.rs} (100%) delete mode 100644 src/test/run-pass/specialization/defaultimpl/specialization-cross-crate-defaults.rs delete mode 100644 src/test/run-pass/specialization/defaultimpl/specialization-cross-crate-no-gate.rs delete mode 100644 src/test/run-pass/specialization/defaultimpl/specialization-cross-crate.rs create mode 100644 src/test/run-pass/thin-lto-global-allocator.rs create mode 100644 src/test/run-pass/thinlto/auxiliary/dylib.rs create mode 100644 src/test/run-pass/thinlto/auxiliary/msvc-imp-present.rs rename src/test/run-pass/{ => thinlto}/auxiliary/thin-lto-inlines-aux.rs (100%) create mode 100644 src/test/run-pass/thinlto/dylib-works.rs create mode 100644 src/test/run-pass/thinlto/msvc-imp-present.rs rename src/test/run-pass/{ => thinlto}/thin-lto-inlines.rs (94%) rename src/test/run-pass/{ => thinlto}/thin-lto-inlines2.rs (95%) create mode 100644 src/test/run-pass/u128-as-f32.rs rename src/test/run-pass/{unboxed-closures-infer-argument-types-from-expected-bound.rs => unboxed-closures-infer-arg-types-from-expected-bound.rs} (100%) rename src/test/run-pass/{unboxed-closures-infer-argument-types-from-expected-object-type.rs => unboxed-closures-infer-arg-types-from-expected-object-type.rs} (100%) rename src/test/run-pass/{unboxed-closures-infer-argument-types-with-bound-regions-from-expected-bound.rs => unboxed-closures-infer-arg-types-w-bound-regs-from-expected-bound.rs} (100%) create mode 100644 src/test/run-pass/unboxed-closures-move-from-projection-issue-30046.rs create mode 100644 src/test/rustdoc/crate-version.rs create mode 100644 src/test/rustdoc/foreigntype.rs create mode 100644 src/test/rustdoc/issue-45584.rs create mode 100644 src/test/rustdoc/method-list.rs create mode 100644 src/test/rustdoc/sidebar-items.rs create mode 100644 src/test/ui/anonymous-higher-ranked-lifetime.rs create mode 100644 src/test/ui/anonymous-higher-ranked-lifetime.stderr create mode 100644 src/test/ui/auxiliary/xcrate_issue_46112_rexport_core.rs create mode 100644 src/test/ui/borrowck/borrowck-closures-two-mut.rs create mode 100644 src/test/ui/borrowck/borrowck-closures-two-mut.stderr create mode 100644 src/test/ui/borrowck/borrowck-reinit.rs create mode 100644 src/test/ui/borrowck/borrowck-reinit.stderr create mode 100644 src/test/ui/codemap_tests/unicode_2.rs create mode 100644 src/test/ui/codemap_tests/unicode_2.stderr create mode 100644 src/test/ui/codemap_tests/unicode_3.rs create mode 100644 src/test/ui/codemap_tests/unicode_3.stderr create mode 100644 src/test/ui/const-pattern-irrefutable.rs create mode 100644 src/test/ui/const-pattern-irrefutable.stderr create mode 100644 src/test/ui/e0119/auxiliary/complex_impl_support.rs create mode 100644 src/test/ui/e0119/auxiliary/issue_23563_a.rs create mode 100644 src/test/ui/e0119/complex-impl.rs create mode 100644 src/test/ui/e0119/complex-impl.stderr create mode 100644 src/test/ui/e0119/conflict-with-std.rs create mode 100644 src/test/ui/e0119/conflict-with-std.stderr create mode 100644 src/test/ui/e0119/issue-23563.rs create mode 100644 src/test/ui/e0119/issue-23563.stderr create mode 100644 src/test/ui/e0119/issue-27403.rs create mode 100644 src/test/ui/e0119/issue-27403.stderr create mode 100644 src/test/ui/e0119/issue-28981.rs create mode 100644 src/test/ui/e0119/issue-28981.stderr create mode 100644 src/test/ui/e0119/so-37347311.rs create mode 100644 src/test/ui/e0119/so-37347311.stderr create mode 100644 src/test/ui/impl-trait/universal-mismatched-type.rs create mode 100644 src/test/ui/impl-trait/universal-mismatched-type.stderr create mode 100644 src/test/ui/impl-trait/universal-two-impl-traits.rs create mode 100644 src/test/ui/impl-trait/universal-two-impl-traits.stderr create mode 100644 src/test/ui/impl-trait/universal_wrong_bounds.rs create mode 100644 src/test/ui/impl-trait/universal_wrong_bounds.stderr create mode 100644 src/test/ui/issue-33941.rs create mode 100644 src/test/ui/issue-33941.stderr create mode 100644 src/test/ui/issue-35241.rs create mode 100644 src/test/ui/issue-35241.stderr create mode 100644 src/test/ui/issue-40782.rs create mode 100644 src/test/ui/issue-40782.stderr create mode 100644 src/test/ui/issue-42106.rs create mode 100644 src/test/ui/issue-42106.stderr create mode 100644 src/test/ui/issue-44406.rs create mode 100644 src/test/ui/issue-44406.stderr create mode 100644 src/test/ui/issue-45296.rs create mode 100644 src/test/ui/issue-45296.stderr create mode 100644 src/test/ui/issue-45730.rs create mode 100644 src/test/ui/issue-45730.stderr create mode 100644 src/test/ui/issue-46112.rs create mode 100644 src/test/ui/issue-46112.stderr create mode 100644 src/test/ui/lifetime-errors/42701_one_named_and_one_anonymous.rs create mode 100644 src/test/ui/lifetime-errors/42701_one_named_and_one_anonymous.stderr create mode 100644 src/test/ui/lifetime-errors/ex1-return-one-existing-name-early-bound-in-struct.rs create mode 100644 src/test/ui/lifetime-errors/ex1-return-one-existing-name-early-bound-in-struct.stderr rename src/test/ui/lifetime-errors/{ex3-both-anon-regions-earlybound-regions.rs => ex2a-push-one-existing-name-early-bound.rs} (100%) create mode 100644 src/test/ui/lifetime-errors/ex2a-push-one-existing-name-early-bound.stderr delete mode 100644 src/test/ui/lifetime-errors/ex3-both-anon-regions-earlybound-regions.stderr create mode 100644 src/test/ui/lint/unreachable_pub-pub_crate.rs create mode 100644 src/test/ui/lint/unreachable_pub-pub_crate.stderr create mode 100644 src/test/ui/lint/unreachable_pub.rs create mode 100644 src/test/ui/lint/unreachable_pub.stderr create mode 100644 src/test/ui/lint/use_suggestion_json.rs create mode 100644 src/test/ui/lint/use_suggestion_json.stderr create mode 100644 src/test/ui/lub-glb/old-lub-glb-hr.rs create mode 100644 src/test/ui/lub-glb/old-lub-glb-hr.stderr create mode 100644 src/test/ui/lub-glb/old-lub-glb-object.rs create mode 100644 src/test/ui/lub-glb/old-lub-glb-object.stderr delete mode 100644 src/test/ui/macros/assert_eq_trailing_comma.stderr delete mode 100644 src/test/ui/macros/assert_ne_trailing_comma.stderr rename src/test/{compile-fail => ui}/method-call-err-msg.rs (100%) create mode 100644 src/test/ui/method-call-err-msg.stderr create mode 100644 src/test/ui/nll/get_default.rs create mode 100644 src/test/ui/nll/get_default.stderr create mode 100644 src/test/ui/nll/named-region-basic.rs create mode 100644 src/test/ui/nll/named-region-basic.stderr create mode 100644 src/test/ui/resolve/name-clash-nullary.rs create mode 100644 src/test/ui/resolve/name-clash-nullary.stderr create mode 100644 src/test/ui/rfc-2005-default-binding-mode/suggestion.rs create mode 100644 src/test/ui/rfc-2005-default-binding-mode/suggestion.stderr create mode 100644 src/test/ui/short-error-format.rs create mode 100644 src/test/ui/short-error-format.stderr create mode 100644 src/test/ui/similar-tokens.rs create mode 100644 src/test/ui/similar-tokens.stderr create mode 100644 src/test/ui/struct-field-init-syntax.rs create mode 100644 src/test/ui/struct-field-init-syntax.stderr create mode 100644 src/test/ui/suggestions/auxiliary/m1.rs create mode 100644 src/test/ui/suggestions/auxiliary/m2.rs create mode 100644 src/test/ui/suggestions/closure-immutable-outer-variable.rs create mode 100644 src/test/ui/suggestions/closure-immutable-outer-variable.stderr create mode 100644 src/test/ui/suggestions/extern-crate-rename.rs create mode 100644 src/test/ui/suggestions/extern-crate-rename.stderr create mode 100644 src/test/ui/suggestions/issue-32354-suggest-import-rename.rs create mode 100644 src/test/ui/suggestions/issue-32354-suggest-import-rename.stderr create mode 100644 src/test/ui/suggestions/suggest-labels.rs create mode 100644 src/test/ui/suggestions/suggest-labels.stderr create mode 100644 src/test/ui/suggestions/type-ascription-instead-of-initializer.rs create mode 100644 src/test/ui/suggestions/type-ascription-instead-of-initializer.stderr create mode 100644 src/test/ui/unboxed-closures-infer-fn-once-move-from-projection.rs create mode 100644 src/test/ui/unboxed-closures-infer-fn-once-move-from-projection.stderr create mode 100644 src/tools/clippy/build.rs create mode 100644 src/tools/clippy/clippy_lints/src/const_static_lifetime.rs create mode 100644 src/tools/clippy/clippy_lints/src/erasing_op.rs create mode 100644 src/tools/clippy/clippy_lints/src/explicit_write.rs create mode 100644 src/tools/clippy/clippy_lints/src/fallible_impl_from.rs create mode 100644 src/tools/clippy/clippy_lints/src/identity_conversion.rs create mode 100644 src/tools/clippy/clippy_lints/src/int_plus_one.rs create mode 100644 src/tools/clippy/clippy_lints/src/invalid_ref.rs delete mode 100644 src/tools/clippy/clippy_lints/src/should_assert_eq.rs create mode 100644 src/tools/clippy/clippy_lints/src/utils/ptr.rs delete mode 100644 src/tools/clippy/rls.toml create mode 100755 src/tools/clippy/rust-update create mode 100644 src/tools/clippy/src/driver.rs create mode 100644 src/tools/clippy/tests/conf_whitelisted.rs delete mode 100644 src/tools/clippy/tests/dogfood.rs delete mode 100644 src/tools/clippy/tests/run-pass/conf_whitelisted.rs delete mode 100644 src/tools/clippy/tests/ui-posix/conf_non_existant.rs delete mode 100644 src/tools/clippy/tests/ui-posix/conf_non_existant.stderr delete mode 100755 src/tools/clippy/tests/ui-posix/update-all-references.sh delete mode 100755 src/tools/clippy/tests/ui-posix/update-references.sh delete mode 100644 src/tools/clippy/tests/ui-windows/conf_non_existant.rs delete mode 100644 src/tools/clippy/tests/ui-windows/conf_non_existant.stderr delete mode 100755 src/tools/clippy/tests/ui-windows/update-all-references.sh delete mode 100755 src/tools/clippy/tests/ui-windows/update-references.sh create mode 100644 src/tools/clippy/tests/ui/const_static_lifetime.rs create mode 100644 src/tools/clippy/tests/ui/const_static_lifetime.stderr create mode 100644 src/tools/clippy/tests/ui/cstring.rs create mode 100644 src/tools/clippy/tests/ui/cstring.stderr create mode 100644 src/tools/clippy/tests/ui/erasing_op.rs create mode 100644 src/tools/clippy/tests/ui/erasing_op.stderr create mode 100644 src/tools/clippy/tests/ui/explicit_write.rs create mode 100644 src/tools/clippy/tests/ui/explicit_write.stderr create mode 100644 src/tools/clippy/tests/ui/fallible_impl_from.rs create mode 100644 src/tools/clippy/tests/ui/fallible_impl_from.stderr create mode 100644 src/tools/clippy/tests/ui/get_unwrap.rs create mode 100644 src/tools/clippy/tests/ui/get_unwrap.stderr delete mode 100644 src/tools/clippy/tests/ui/ices.rs delete mode 100644 src/tools/clippy/tests/ui/ices.stderr create mode 100644 src/tools/clippy/tests/ui/identity_conversion.rs create mode 100644 src/tools/clippy/tests/ui/identity_conversion.stderr create mode 100644 src/tools/clippy/tests/ui/implicit_hasher.rs create mode 100644 src/tools/clippy/tests/ui/implicit_hasher.stderr create mode 100644 src/tools/clippy/tests/ui/int_plus_one.rs create mode 100644 src/tools/clippy/tests/ui/int_plus_one.stderr create mode 100644 src/tools/clippy/tests/ui/invalid_ref.rs create mode 100644 src/tools/clippy/tests/ui/invalid_ref.stderr create mode 100644 src/tools/clippy/tests/ui/mut_range_bound.rs create mode 100644 src/tools/clippy/tests/ui/mut_range_bound.stderr create mode 100644 src/tools/clippy/tests/ui/needless_range_loop.rs create mode 100644 src/tools/clippy/tests/ui/needless_range_loop.stderr create mode 100644 src/tools/clippy/tests/ui/ok_expect.rs create mode 100644 src/tools/clippy/tests/ui/ok_expect.stderr create mode 100644 src/tools/clippy/tests/ui/println_empty_string.rs create mode 100644 src/tools/clippy/tests/ui/println_empty_string.stderr create mode 100644 src/tools/clippy/tests/ui/range_plus_minus_one.rs create mode 100644 src/tools/clippy/tests/ui/range_plus_minus_one.stderr delete mode 100644 src/tools/clippy/tests/ui/should_assert_eq.rs delete mode 100644 src/tools/clippy/tests/ui/should_assert_eq.stderr create mode 100644 src/tools/clippy/tests/ui/single_char_pattern.rs create mode 100644 src/tools/clippy/tests/ui/single_char_pattern.stderr create mode 100644 src/tools/clippy/tests/ui/starts_ends_with.rs create mode 100644 src/tools/clippy/tests/ui/starts_ends_with.stderr create mode 100644 src/tools/clippy/tests/ui/string_extend.rs create mode 100644 src/tools/clippy/tests/ui/string_extend.stderr create mode 100644 src/tools/clippy/tests/ui/unnecessary_clone.rs create mode 100644 src/tools/clippy/tests/ui/unnecessary_clone.stderr create mode 100644 src/tools/clippy/tests/ui/useless_asref.rs create mode 100644 src/tools/clippy/tests/ui/useless_asref.stderr create mode 100644 src/tools/compiletest/src/read2.rs create mode 100644 src/vendor/ar/Cargo.toml.orig create mode 100644 src/vendor/atty/Cargo.toml.orig create mode 100644 src/vendor/atty/rustfmt.toml delete mode 100644 src/vendor/bitflags-0.8.2/.cargo-checksum.json delete mode 100644 src/vendor/bitflags-0.8.2/.gitignore delete mode 100644 src/vendor/bitflags-0.8.2/.travis.yml delete mode 100644 src/vendor/bitflags-0.8.2/Cargo.toml delete mode 100644 src/vendor/bitflags-0.8.2/README.md delete mode 100644 src/vendor/bitflags-0.8.2/src/lib.rs delete mode 100644 src/vendor/bitflags-0.8.2/tests/external.rs delete mode 100644 src/vendor/bitflags-0.8.2/tests/external_no_std.rs delete mode 100644 src/vendor/bitflags-0.8.2/tests/i128_bitflags.rs create mode 100644 src/vendor/bitflags/CHANGELOG.md delete mode 100644 src/vendor/bitflags/tests/conflicting_trait_impls.rs delete mode 100644 src/vendor/bitflags/tests/external.rs delete mode 100644 src/vendor/bitflags/tests/external_no_std.rs delete mode 100644 src/vendor/bitflags/tests/i128_bitflags.rs create mode 100644 src/vendor/cargo_metadata/.cargo-checksum.json rename src/vendor/{custom_derive => cargo_metadata}/.cargo-ok (100%) rename src/vendor/{conv => cargo_metadata}/.gitignore (100%) create mode 100644 src/vendor/cargo_metadata/.travis.yml create mode 100644 src/vendor/cargo_metadata/Cargo.toml create mode 100644 src/vendor/cargo_metadata/src/lib.rs create mode 100644 src/vendor/cargo_metadata/tests/selftest.rs create mode 100644 src/vendor/clap/src/map.rs create mode 100644 src/vendor/compiletest_rs/.cargo-checksum.json rename src/vendor/{magenta-sys => compiletest_rs}/.cargo-ok (100%) create mode 100644 src/vendor/compiletest_rs/.gitignore create mode 100644 src/vendor/compiletest_rs/.travis.yml create mode 100644 src/vendor/compiletest_rs/Cargo.toml create mode 100644 src/vendor/compiletest_rs/Cargo.toml.orig rename src/vendor/{term_size => compiletest_rs}/LICENSE-APACHE (100%) create mode 100644 src/vendor/compiletest_rs/LICENSE-MIT create mode 100644 src/vendor/compiletest_rs/README.md create mode 100644 src/vendor/compiletest_rs/src/common.rs create mode 100644 src/vendor/compiletest_rs/src/errors.rs create mode 100644 src/vendor/compiletest_rs/src/header.rs create mode 100644 src/vendor/compiletest_rs/src/json.rs create mode 100644 src/vendor/compiletest_rs/src/lib.rs create mode 100644 src/vendor/compiletest_rs/src/raise_fd_limit.rs create mode 100644 src/vendor/compiletest_rs/src/runtest.rs create mode 100644 src/vendor/compiletest_rs/src/uidiff.rs create mode 100644 src/vendor/compiletest_rs/src/util.rs delete mode 100644 src/vendor/conv/.cargo-checksum.json delete mode 100644 src/vendor/conv/.travis.yml delete mode 100644 src/vendor/conv/Cargo.toml delete mode 100644 src/vendor/conv/LICENSE delete mode 100644 src/vendor/conv/README.md delete mode 100644 src/vendor/conv/src/errors.rs delete mode 100644 src/vendor/conv/src/impls.rs delete mode 100644 src/vendor/conv/src/lib.rs delete mode 100644 src/vendor/conv/src/macros.rs delete mode 100644 src/vendor/conv/src/misc.rs delete mode 100644 src/vendor/conv/tests/conv_utils.rs delete mode 100644 src/vendor/conv/tests/derive_try_from.rs delete mode 100644 src/vendor/conv/tests/lang_char.rs delete mode 100644 src/vendor/conv/tests/lang_floats.rs delete mode 100644 src/vendor/conv/tests/lang_ints.rs delete mode 100644 src/vendor/conv/tests/unwraps.rs delete mode 100644 src/vendor/conv/tests/use_in_generics.rs delete mode 100644 src/vendor/conv/tests/util/mod.rs delete mode 100644 src/vendor/custom_derive/.cargo-checksum.json delete mode 100644 src/vendor/custom_derive/.gitignore delete mode 100644 src/vendor/custom_derive/Cargo.toml delete mode 100644 src/vendor/custom_derive/LICENSE delete mode 100644 src/vendor/custom_derive/README.md delete mode 100644 src/vendor/custom_derive/src/lib.rs delete mode 100644 src/vendor/custom_derive/tests/empty_bi_derives.rs delete mode 100644 src/vendor/custom_derive/tests/enum_iterator.rs delete mode 100644 src/vendor/custom_derive/tests/enum_try_from.rs delete mode 100644 src/vendor/custom_derive/tests/passthru_derive.rs delete mode 100644 src/vendor/custom_derive/tests/stable_encodable.rs delete mode 100644 src/vendor/custom_derive/tests/trailing_comma.rs create mode 100644 src/vendor/diff/Cargo.toml.orig create mode 100644 src/vendor/duct/.cargo-checksum.json rename src/vendor/{magenta => duct}/.cargo-ok (100%) create mode 100644 src/vendor/duct/.gitignore create mode 100644 src/vendor/duct/.travis.yml create mode 100644 src/vendor/duct/Cargo.toml create mode 100644 src/vendor/duct/README.md create mode 100644 src/vendor/duct/README.tpl create mode 100644 src/vendor/duct/appveyor.yml create mode 100644 src/vendor/duct/src/bin/cat.rs create mode 100644 src/vendor/duct/src/bin/echo.rs create mode 100644 src/vendor/duct/src/bin/exe_in_dir.rs create mode 100644 src/vendor/duct/src/bin/print_env.rs create mode 100644 src/vendor/duct/src/bin/pwd.rs create mode 100644 src/vendor/duct/src/bin/sleep.rs create mode 100644 src/vendor/duct/src/bin/status.rs create mode 100644 src/vendor/duct/src/bin/x_to_y.rs create mode 100644 src/vendor/duct/src/lib.rs create mode 100644 src/vendor/duct/src/test.rs create mode 100644 src/vendor/either/.cargo-checksum.json rename src/vendor/{memchr => either}/.cargo-ok (100%) create mode 100644 src/vendor/either/.gitignore create mode 100644 src/vendor/either/.travis.yml create mode 100644 src/vendor/either/Cargo.toml create mode 100644 src/vendor/either/Cargo.toml.orig create mode 100644 src/vendor/either/LICENSE-APACHE create mode 100644 src/vendor/either/LICENSE-MIT create mode 100644 src/vendor/either/README-crates.io.md create mode 100644 src/vendor/either/README.rst create mode 100644 src/vendor/either/src/lib.rs create mode 100644 src/vendor/error-chain-0.8.1/.cargo-checksum.json rename src/vendor/{pulldown-cmark-0.0.14 => error-chain-0.8.1}/.cargo-ok (100%) create mode 100644 src/vendor/error-chain-0.8.1/.gitignore create mode 100644 src/vendor/error-chain-0.8.1/.travis.yml create mode 100644 src/vendor/error-chain-0.8.1/CHANGELOG.md create mode 100644 src/vendor/error-chain-0.8.1/Cargo.toml create mode 100644 src/vendor/error-chain-0.8.1/README.md create mode 100644 src/vendor/error-chain-0.8.1/examples/all.rs create mode 100644 src/vendor/error-chain-0.8.1/examples/doc.rs create mode 100644 src/vendor/error-chain-0.8.1/examples/quickstart.rs create mode 100644 src/vendor/error-chain-0.8.1/examples/size.rs create mode 100644 src/vendor/error-chain-0.8.1/src/error_chain.rs create mode 100644 src/vendor/error-chain-0.8.1/src/example_generated.rs create mode 100644 src/vendor/error-chain-0.8.1/src/lib.rs create mode 100644 src/vendor/error-chain-0.8.1/src/quick_error.rs create mode 100644 src/vendor/error-chain-0.8.1/src/quick_main.rs create mode 100644 src/vendor/error-chain-0.8.1/tests/quick_main.rs create mode 100644 src/vendor/error-chain-0.8.1/tests/tests.rs delete mode 100644 src/vendor/filetime/src/unix.rs create mode 100644 src/vendor/filetime/src/unix/linux.rs create mode 100644 src/vendor/filetime/src/unix/mod.rs create mode 100644 src/vendor/filetime/src/unix/utimensat.rs create mode 100644 src/vendor/filetime/src/unix/utimes.rs create mode 100644 src/vendor/fnv/Cargo.toml.orig create mode 100644 src/vendor/fnv/LICENSE-APACHE create mode 100644 src/vendor/fnv/LICENSE-MIT create mode 100644 src/vendor/fuchsia-zircon-sys/.cargo-checksum.json rename src/vendor/{term_size => fuchsia-zircon-sys}/.cargo-ok (100%) create mode 100644 src/vendor/fuchsia-zircon-sys/BUILD.gn create mode 100644 src/vendor/fuchsia-zircon-sys/Cargo.toml create mode 100644 src/vendor/fuchsia-zircon-sys/Cargo.toml.orig create mode 100644 src/vendor/fuchsia-zircon-sys/examples/hello.rs create mode 100644 src/vendor/fuchsia-zircon-sys/src/definitions.rs create mode 100644 src/vendor/fuchsia-zircon-sys/src/lib.rs create mode 100644 src/vendor/fuchsia-zircon/.cargo-checksum.json create mode 100644 src/vendor/fuchsia-zircon/.cargo-ok create mode 100644 src/vendor/fuchsia-zircon/BUILD.gn create mode 100644 src/vendor/fuchsia-zircon/Cargo.toml create mode 100644 src/vendor/fuchsia-zircon/Cargo.toml.orig rename src/vendor/{magenta => fuchsia-zircon}/LICENSE (100%) create mode 100644 src/vendor/fuchsia-zircon/README.md create mode 100644 src/vendor/fuchsia-zircon/examples/BUILD.gn rename src/vendor/{magenta => fuchsia-zircon}/src/channel.rs (82%) create mode 100644 src/vendor/fuchsia-zircon/src/event.rs create mode 100644 src/vendor/fuchsia-zircon/src/eventpair.rs rename src/vendor/{magenta => fuchsia-zircon}/src/fifo.rs (77%) create mode 100644 src/vendor/fuchsia-zircon/src/job.rs create mode 100644 src/vendor/fuchsia-zircon/src/lib.rs create mode 100644 src/vendor/fuchsia-zircon/src/port.rs create mode 100644 src/vendor/fuchsia-zircon/src/process.rs create mode 100644 src/vendor/fuchsia-zircon/src/socket.rs create mode 100644 src/vendor/fuchsia-zircon/src/thread.rs create mode 100644 src/vendor/fuchsia-zircon/src/timer.rs rename src/vendor/{magenta => fuchsia-zircon}/src/vmo.rs (78%) rename src/vendor/{magenta => fuchsia-zircon}/tools/BUILD.gn (100%) rename src/vendor/{magenta => fuchsia-zircon}/tools/README.md (100%) rename src/vendor/{magenta => fuchsia-zircon}/tools/clang_wrapper.cc (85%) rename src/vendor/{magenta => fuchsia-zircon}/tools/gen_status.py (79%) create mode 100644 src/vendor/idna/.cargo-checksum.json create mode 100644 src/vendor/idna/.cargo-ok create mode 100644 src/vendor/idna/Cargo.toml create mode 100644 src/vendor/idna/LICENSE-APACHE create mode 100644 src/vendor/idna/LICENSE-MIT create mode 100644 src/vendor/idna/src/IdnaMappingTable.txt create mode 100644 src/vendor/idna/src/lib.rs create mode 100644 src/vendor/idna/src/make_uts46_mapping_table.py create mode 100644 src/vendor/idna/src/punycode.rs create mode 100644 src/vendor/idna/src/uts46.rs create mode 100644 src/vendor/idna/src/uts46_mapping_table.rs create mode 100644 src/vendor/idna/tests/IdnaTest.txt create mode 100644 src/vendor/idna/tests/punycode.rs create mode 100644 src/vendor/idna/tests/punycode_tests.json create mode 100644 src/vendor/idna/tests/tests.rs create mode 100644 src/vendor/idna/tests/unit.rs create mode 100644 src/vendor/idna/tests/uts46.rs create mode 100644 src/vendor/if_chain/.cargo-checksum.json create mode 100644 src/vendor/if_chain/.cargo-ok create mode 100644 src/vendor/if_chain/.gitignore create mode 100644 src/vendor/if_chain/.travis.yml create mode 100644 src/vendor/if_chain/Cargo.toml create mode 100644 src/vendor/if_chain/README.md create mode 100644 src/vendor/if_chain/src/lib.rs create mode 100644 src/vendor/itertools/.cargo-checksum.json create mode 100644 src/vendor/itertools/.cargo-ok create mode 100644 src/vendor/itertools/.gitignore create mode 100644 src/vendor/itertools/.travis.yml create mode 100644 src/vendor/itertools/Cargo.toml create mode 100644 src/vendor/itertools/Cargo.toml.orig create mode 100644 src/vendor/itertools/LICENSE-APACHE create mode 100644 src/vendor/itertools/LICENSE-MIT create mode 100644 src/vendor/itertools/Makefile create mode 100644 src/vendor/itertools/README.rst create mode 100644 src/vendor/itertools/benches/bench1.rs create mode 100644 src/vendor/itertools/benches/extra/mod.rs create mode 100644 src/vendor/itertools/benches/extra/zipslices.rs create mode 100644 src/vendor/itertools/benches/tuple_combinations.rs create mode 100644 src/vendor/itertools/benches/tuples.rs create mode 100644 src/vendor/itertools/custom.css create mode 100644 src/vendor/itertools/examples/iris.data create mode 100644 src/vendor/itertools/examples/iris.rs create mode 100644 src/vendor/itertools/src/adaptors/mod.rs create mode 100644 src/vendor/itertools/src/adaptors/multipeek.rs create mode 100644 src/vendor/itertools/src/concat_impl.rs create mode 100644 src/vendor/itertools/src/cons_tuples_impl.rs create mode 100644 src/vendor/itertools/src/diff.rs create mode 100644 src/vendor/itertools/src/format.rs create mode 100644 src/vendor/itertools/src/free.rs create mode 100644 src/vendor/itertools/src/groupbylazy.rs create mode 100644 src/vendor/itertools/src/impl_macros.rs create mode 100644 src/vendor/itertools/src/intersperse.rs create mode 100644 src/vendor/itertools/src/kmerge_impl.rs create mode 100755 src/vendor/itertools/src/lib.rs create mode 100644 src/vendor/itertools/src/minmax.rs create mode 100644 src/vendor/itertools/src/pad_tail.rs create mode 100644 src/vendor/itertools/src/peeking_take_while.rs create mode 100644 src/vendor/itertools/src/process_results_impl.rs create mode 100644 src/vendor/itertools/src/rciter_impl.rs create mode 100644 src/vendor/itertools/src/repeatn.rs create mode 100644 src/vendor/itertools/src/size_hint.rs create mode 100644 src/vendor/itertools/src/sources.rs create mode 100644 src/vendor/itertools/src/tee.rs create mode 100644 src/vendor/itertools/src/tuple_impl.rs create mode 100644 src/vendor/itertools/src/with_position.rs create mode 100644 src/vendor/itertools/src/zip_eq_impl.rs create mode 100644 src/vendor/itertools/src/zip_longest.rs create mode 100644 src/vendor/itertools/src/ziptuple.rs create mode 100644 src/vendor/itertools/tests/peeking_take_while.rs create mode 100644 src/vendor/itertools/tests/quick.rs create mode 100644 src/vendor/itertools/tests/tests.rs create mode 100644 src/vendor/itertools/tests/tuples.rs create mode 100644 src/vendor/itertools/tests/zip.rs create mode 100644 src/vendor/jobserver/Cargo.toml.orig create mode 100644 src/vendor/lazy_static/Cargo.toml.orig create mode 100644 src/vendor/lazy_static/appveyor.yml create mode 100644 src/vendor/lazy_static/tests/compile-fail/README.md create mode 100644 src/vendor/lazy_static/tests/compile-fail/incorrect_visibility_restriction.rs create mode 100644 src/vendor/lazy_static/tests/compile-fail/static_is_private.rs create mode 100644 src/vendor/lazy_static/tests/compile-fail/static_is_sized.rs create mode 100644 src/vendor/lazy_static/tests/compile-fail/static_never_used.rs create mode 100644 src/vendor/lazy_static/tests/compile_tests.rs create mode 100644 src/vendor/lazycell/.cargo-checksum.json create mode 100644 src/vendor/lazycell/.cargo-ok create mode 100644 src/vendor/lazycell/CHANGELOG.md create mode 100644 src/vendor/lazycell/Cargo.toml create mode 100644 src/vendor/lazycell/LICENSE-APACHE create mode 100644 src/vendor/lazycell/LICENSE-MIT create mode 100644 src/vendor/lazycell/README.md create mode 100644 src/vendor/lazycell/src/lib.rs delete mode 100755 src/vendor/libc/ci/android-accept-licenses.sh create mode 100644 src/vendor/libc/ci/docker/aarch64-unknown-linux-musl/Dockerfile create mode 100644 src/vendor/libc/ci/docker/arm-unknown-linux-musleabihf/Dockerfile create mode 100644 src/vendor/libc/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile create mode 100644 src/vendor/libc/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile create mode 100644 src/vendor/libc/ci/docker/sparc64-unknown-linux-gnu/Dockerfile create mode 100644 src/vendor/libc/ci/docker/x86_64-unknown-linux-gnux32/Dockerfile delete mode 100644 src/vendor/libc/src/redox.rs create mode 100644 src/vendor/libc/src/redox/mod.rs create mode 100644 src/vendor/libc/src/redox/net.rs create mode 100644 src/vendor/libc/src/unix/notbsd/linux/other/b64/not_x32.rs create mode 100644 src/vendor/libc/src/unix/notbsd/linux/other/b64/x32.rs delete mode 100644 src/vendor/magenta-sys/.cargo-checksum.json delete mode 100644 src/vendor/magenta-sys/BUILD.gn delete mode 100644 src/vendor/magenta-sys/Cargo.toml delete mode 100644 src/vendor/magenta-sys/examples/hello.rs delete mode 100644 src/vendor/magenta-sys/src/definitions.rs delete mode 100644 src/vendor/magenta-sys/src/lib.rs delete mode 100644 src/vendor/magenta/.cargo-checksum.json delete mode 100644 src/vendor/magenta/.gitignore delete mode 100644 src/vendor/magenta/AUTHORS delete mode 100644 src/vendor/magenta/BUILD.gn delete mode 100644 src/vendor/magenta/CONTRIBUTING.md delete mode 100644 src/vendor/magenta/Cargo.toml delete mode 100644 src/vendor/magenta/GETTING_STARTED.md delete mode 100644 src/vendor/magenta/PATENTS delete mode 100644 src/vendor/magenta/README.md delete mode 100644 src/vendor/magenta/examples/BUILD.gn delete mode 100644 src/vendor/magenta/src/event.rs delete mode 100644 src/vendor/magenta/src/eventpair.rs delete mode 100644 src/vendor/magenta/src/job.rs delete mode 100644 src/vendor/magenta/src/lib.rs delete mode 100644 src/vendor/magenta/src/port.rs delete mode 100644 src/vendor/magenta/src/process.rs delete mode 100644 src/vendor/magenta/src/socket.rs delete mode 100644 src/vendor/magenta/src/thread.rs delete mode 100644 src/vendor/magenta/src/timer.rs create mode 100644 src/vendor/memchr-1.0.2/.cargo-checksum.json create mode 100644 src/vendor/memchr-1.0.2/.cargo-ok rename src/vendor/{memchr => memchr-1.0.2}/.gitignore (100%) rename src/vendor/{memchr => memchr-1.0.2}/.travis.yml (100%) rename src/vendor/{memchr => memchr-1.0.2}/COPYING (100%) create mode 100644 src/vendor/memchr-1.0.2/Cargo.toml create mode 100644 src/vendor/memchr-1.0.2/Cargo.toml.orig rename src/vendor/{memchr => memchr-1.0.2}/LICENSE-MIT (100%) rename src/vendor/{memchr => memchr-1.0.2}/Makefile (100%) rename src/vendor/{memchr => memchr-1.0.2}/README.md (100%) rename src/vendor/{memchr => memchr-1.0.2}/UNLICENSE (100%) rename src/vendor/{memchr => memchr-1.0.2}/appveyor.yml (100%) rename src/vendor/{memchr => memchr-1.0.2}/benches/bench.rs (100%) rename src/vendor/{memchr => memchr-1.0.2}/ctags.rust (100%) rename src/vendor/{memchr => memchr-1.0.2}/session.vim (100%) create mode 100644 src/vendor/memchr-1.0.2/src/lib.rs delete mode 100644 src/vendor/memchr/.cargo-checksum.json delete mode 100644 src/vendor/memchr/Cargo.toml delete mode 100644 src/vendor/memchr/src/lib.rs create mode 100644 src/vendor/miow/.cargo-checksum.json create mode 100644 src/vendor/miow/.cargo-ok create mode 100644 src/vendor/miow/.gitignore create mode 100644 src/vendor/miow/Cargo.toml create mode 100644 src/vendor/miow/LICENSE-APACHE create mode 100644 src/vendor/miow/LICENSE-MIT create mode 100644 src/vendor/miow/README.md create mode 100644 src/vendor/miow/appveyor.yml create mode 100644 src/vendor/miow/src/handle.rs create mode 100644 src/vendor/miow/src/iocp.rs create mode 100644 src/vendor/miow/src/lib.rs create mode 100644 src/vendor/miow/src/net.rs create mode 100644 src/vendor/miow/src/overlapped.rs create mode 100644 src/vendor/miow/src/pipe.rs create mode 100644 src/vendor/net2/.cargo-checksum.json create mode 100644 src/vendor/net2/.cargo-ok create mode 100644 src/vendor/net2/.gitignore create mode 100644 src/vendor/net2/.travis.yml create mode 100644 src/vendor/net2/Cargo.toml create mode 100644 src/vendor/net2/Cargo.toml.orig create mode 100644 src/vendor/net2/LICENSE-APACHE rename src/vendor/{bitflags-0.8.2 => net2}/LICENSE-MIT (100%) create mode 100644 src/vendor/net2/README.md create mode 100644 src/vendor/net2/appveyor.yml create mode 100644 src/vendor/net2/src/ext.rs create mode 100644 src/vendor/net2/src/lib.rs create mode 100644 src/vendor/net2/src/socket.rs create mode 100644 src/vendor/net2/src/sys/unix/impls.rs create mode 100644 src/vendor/net2/src/sys/unix/mod.rs create mode 100644 src/vendor/net2/src/sys/windows/impls.rs create mode 100644 src/vendor/net2/src/sys/windows/mod.rs create mode 100644 src/vendor/net2/src/tcp.rs create mode 100644 src/vendor/net2/src/udp.rs create mode 100644 src/vendor/net2/src/unix.rs create mode 100644 src/vendor/net2/src/utils.rs create mode 100644 src/vendor/net2/tests/all.rs create mode 100644 src/vendor/nix/.cargo-checksum.json create mode 100644 src/vendor/nix/.cargo-ok create mode 100644 src/vendor/nix/CHANGELOG.md create mode 100644 src/vendor/nix/CONTRIBUTING.md create mode 100644 src/vendor/nix/CONVENTIONS.md create mode 100644 src/vendor/nix/Cargo.toml create mode 100644 src/vendor/nix/LICENSE create mode 100644 src/vendor/nix/README.md create mode 100644 src/vendor/nix/RELEASE_PROCEDURE.md create mode 100644 src/vendor/nix/ci/README.md create mode 100644 src/vendor/nix/ci/cargo-config create mode 100755 src/vendor/nix/ci/run-all.sh create mode 100755 src/vendor/nix/ci/run-docker.sh create mode 100644 src/vendor/nix/ci/run-travis.sh create mode 100755 src/vendor/nix/ci/run.sh create mode 100644 src/vendor/nix/src/errno.rs create mode 100644 src/vendor/nix/src/fcntl.rs create mode 100644 src/vendor/nix/src/features.rs create mode 100644 src/vendor/nix/src/lib.rs create mode 100644 src/vendor/nix/src/macros.rs create mode 100644 src/vendor/nix/src/mount.rs create mode 100644 src/vendor/nix/src/mqueue.rs create mode 100644 src/vendor/nix/src/net/if_.rs create mode 100644 src/vendor/nix/src/net/mod.rs create mode 100644 src/vendor/nix/src/poll.rs create mode 100644 src/vendor/nix/src/sched.rs create mode 100644 src/vendor/nix/src/sys/aio.rs create mode 100644 src/vendor/nix/src/sys/epoll.rs create mode 100644 src/vendor/nix/src/sys/event.rs create mode 100644 src/vendor/nix/src/sys/eventfd.rs create mode 100644 src/vendor/nix/src/sys/ioctl/mod.rs create mode 100644 src/vendor/nix/src/sys/ioctl/platform/bsd.rs create mode 100644 src/vendor/nix/src/sys/ioctl/platform/linux.rs create mode 100644 src/vendor/nix/src/sys/memfd.rs create mode 100644 src/vendor/nix/src/sys/mman.rs create mode 100644 src/vendor/nix/src/sys/mod.rs create mode 100644 src/vendor/nix/src/sys/ptrace.rs create mode 100644 src/vendor/nix/src/sys/quota.rs create mode 100644 src/vendor/nix/src/sys/reboot.rs create mode 100644 src/vendor/nix/src/sys/select.rs create mode 100644 src/vendor/nix/src/sys/sendfile.rs create mode 100644 src/vendor/nix/src/sys/signal.rs create mode 100644 src/vendor/nix/src/sys/signalfd.rs create mode 100644 src/vendor/nix/src/sys/socket/addr.rs create mode 100644 src/vendor/nix/src/sys/socket/consts.rs create mode 100644 src/vendor/nix/src/sys/socket/ffi.rs create mode 100644 src/vendor/nix/src/sys/socket/mod.rs create mode 100644 src/vendor/nix/src/sys/socket/multicast.rs create mode 100644 src/vendor/nix/src/sys/socket/sockopt.rs create mode 100644 src/vendor/nix/src/sys/stat.rs create mode 100644 src/vendor/nix/src/sys/statfs.rs create mode 100644 src/vendor/nix/src/sys/statvfs.rs create mode 100644 src/vendor/nix/src/sys/syscall.rs create mode 100644 src/vendor/nix/src/sys/termios.rs create mode 100644 src/vendor/nix/src/sys/time.rs create mode 100644 src/vendor/nix/src/sys/uio.rs create mode 100644 src/vendor/nix/src/sys/utsname.rs create mode 100644 src/vendor/nix/src/sys/wait.rs create mode 100644 src/vendor/nix/src/ucontext.rs create mode 100644 src/vendor/nix/src/unistd.rs create mode 100644 src/vendor/num_cpus/CHANGELOG.md create mode 100644 src/vendor/num_cpus/CONTRIBUTING.md create mode 100644 src/vendor/os_pipe/.cargo-checksum.json create mode 100644 src/vendor/os_pipe/.cargo-ok create mode 100644 src/vendor/os_pipe/.gitignore create mode 100644 src/vendor/os_pipe/.travis.yml create mode 100644 src/vendor/os_pipe/Cargo.toml create mode 100644 src/vendor/os_pipe/README.md create mode 100644 src/vendor/os_pipe/README.tpl create mode 100644 src/vendor/os_pipe/appveyor.yml create mode 100644 src/vendor/os_pipe/src/bin/cat.rs create mode 100644 src/vendor/os_pipe/src/bin/swap.rs create mode 100644 src/vendor/os_pipe/src/lib.rs create mode 100644 src/vendor/os_pipe/src/unix.rs create mode 100644 src/vendor/os_pipe/src/windows.rs create mode 100644 src/vendor/percent-encoding/.cargo-checksum.json create mode 100644 src/vendor/percent-encoding/.cargo-ok create mode 100644 src/vendor/percent-encoding/Cargo.toml create mode 100644 src/vendor/percent-encoding/Cargo.toml.orig create mode 100644 src/vendor/percent-encoding/LICENSE-APACHE create mode 100644 src/vendor/percent-encoding/LICENSE-MIT create mode 100644 src/vendor/percent-encoding/lib.rs create mode 100644 src/vendor/precomputed-hash/Cargo.toml.orig create mode 100644 src/vendor/procedural-masquerade/Cargo.toml.orig create mode 100644 src/vendor/procedural-masquerade/LICENSE-APACHE create mode 100644 src/vendor/procedural-masquerade/LICENSE-MIT delete mode 100644 src/vendor/pulldown-cmark-0.0.14/.cargo-checksum.json delete mode 100644 src/vendor/pulldown-cmark-0.0.14/Cargo.toml delete mode 100644 src/vendor/pulldown-cmark-0.0.14/build.rs delete mode 100644 src/vendor/pulldown-cmark-0.0.14/src/main.rs create mode 100644 src/vendor/pulldown-cmark-0.0.15/.cargo-checksum.json create mode 100644 src/vendor/pulldown-cmark-0.0.15/.cargo-ok rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/.gitignore (100%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/CONTRIBUTING.md (100%) create mode 100644 src/vendor/pulldown-cmark-0.0.15/Cargo.toml rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/LICENSE (100%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/README.md (100%) create mode 100644 src/vendor/pulldown-cmark-0.0.15/build.rs rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/specs/footnotes.txt (100%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/specs/table.txt (100%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/src/entities.rs (100%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/src/escape.rs (100%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/src/html.rs (100%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/src/lib.rs (100%) create mode 100644 src/vendor/pulldown-cmark-0.0.15/src/main.rs rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/src/parse.rs (99%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/src/passes.rs (100%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/src/puncttable.rs (100%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/src/scanners.rs (100%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/src/utils.rs (100%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/tests/footnotes.rs (97%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/tests/html.rs (100%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/tests/spec.rs (94%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/tests/table.rs (97%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/third_party/CommonMark/LICENSE (100%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/third_party/CommonMark/README.google (100%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/third_party/CommonMark/spec.txt (99%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/tools/mk_entities.py (100%) rename src/vendor/{pulldown-cmark-0.0.14 => pulldown-cmark-0.0.15}/tools/mk_puncttable.py (100%) create mode 100644 src/vendor/quine-mc_cluskey/.cargo-checksum.json create mode 100644 src/vendor/quine-mc_cluskey/.cargo-ok create mode 100644 src/vendor/quine-mc_cluskey/.editorconfig create mode 100644 src/vendor/quine-mc_cluskey/.gitignore create mode 100644 src/vendor/quine-mc_cluskey/.travis.yml create mode 100644 src/vendor/quine-mc_cluskey/Cargo.toml create mode 100644 src/vendor/quine-mc_cluskey/README.md create mode 100644 src/vendor/quine-mc_cluskey/src/lib.rs create mode 100644 src/vendor/redox_termios/.cargo-checksum.json create mode 100644 src/vendor/redox_termios/.cargo-ok create mode 100644 src/vendor/redox_termios/.gitignore create mode 100644 src/vendor/redox_termios/Cargo.toml create mode 100644 src/vendor/redox_termios/Cargo.toml.orig create mode 100644 src/vendor/redox_termios/LICENSE create mode 100644 src/vendor/redox_termios/README.md create mode 100644 src/vendor/redox_termios/src/lib.rs create mode 100644 src/vendor/semver-0.6.0/.cargo-checksum.json create mode 100644 src/vendor/semver-0.6.0/.cargo-ok create mode 100644 src/vendor/semver-0.6.0/.gitignore create mode 100644 src/vendor/semver-0.6.0/.travis.yml create mode 100644 src/vendor/semver-0.6.0/Cargo.toml create mode 100644 src/vendor/semver-0.6.0/LICENSE-APACHE create mode 100644 src/vendor/semver-0.6.0/LICENSE-MIT create mode 100644 src/vendor/semver-0.6.0/README.md create mode 100644 src/vendor/semver-0.6.0/src/lib.rs create mode 100644 src/vendor/semver-0.6.0/src/version.rs create mode 100644 src/vendor/semver-0.6.0/src/version_req.rs create mode 100644 src/vendor/semver-0.6.0/tests/deprecation.rs create mode 100644 src/vendor/semver-0.6.0/tests/regression.rs create mode 100644 src/vendor/semver-parser/.cargo-checksum.json create mode 100644 src/vendor/semver-parser/.cargo-ok create mode 100644 src/vendor/semver-parser/.gitignore create mode 100644 src/vendor/semver-parser/Cargo.toml create mode 100644 src/vendor/semver-parser/LICENSE-APACHE create mode 100644 src/vendor/semver-parser/LICENSE-MIT create mode 100644 src/vendor/semver-parser/src/common.rs create mode 100644 src/vendor/semver-parser/src/lib.rs create mode 100644 src/vendor/semver-parser/src/range.rs create mode 100644 src/vendor/semver-parser/src/recognize.rs create mode 100644 src/vendor/semver-parser/src/version.rs create mode 100644 src/vendor/shared_child/.cargo-checksum.json create mode 100644 src/vendor/shared_child/.cargo-ok create mode 100644 src/vendor/shared_child/.gitignore create mode 100644 src/vendor/shared_child/.travis.yml create mode 100644 src/vendor/shared_child/Cargo.toml create mode 100644 src/vendor/shared_child/README.md create mode 100644 src/vendor/shared_child/README.tpl create mode 100644 src/vendor/shared_child/appveyor.yml create mode 100644 src/vendor/shared_child/src/lib.rs create mode 100644 src/vendor/shared_child/src/unix.rs create mode 100644 src/vendor/shared_child/src/windows.rs delete mode 100644 src/vendor/term_size/.cargo-checksum.json delete mode 100644 src/vendor/term_size/.clog.toml delete mode 100644 src/vendor/term_size/.gitignore delete mode 100644 src/vendor/term_size/.travis.yml delete mode 100644 src/vendor/term_size/CHANGELOG.md delete mode 100644 src/vendor/term_size/Cargo.toml delete mode 100644 src/vendor/term_size/LICENSE-MIT delete mode 100644 src/vendor/term_size/README.md delete mode 100644 src/vendor/term_size/appveyor.yml delete mode 100644 src/vendor/term_size/index.html delete mode 100644 src/vendor/term_size/justfile delete mode 100644 src/vendor/term_size/rustfmt.toml delete mode 100644 src/vendor/term_size/src/lib.rs create mode 100644 src/vendor/termion/.cargo-checksum.json create mode 100644 src/vendor/termion/.cargo-ok create mode 100644 src/vendor/termion/.gitignore create mode 100644 src/vendor/termion/.travis.yml create mode 100644 src/vendor/termion/Cargo.toml create mode 100644 src/vendor/termion/LICENSE create mode 100644 src/vendor/termion/README.md create mode 100644 src/vendor/termion/examples/alternate_screen.rs create mode 100644 src/vendor/termion/examples/alternate_screen_raw.rs create mode 100644 src/vendor/termion/examples/async.rs create mode 100644 src/vendor/termion/examples/click.rs create mode 100644 src/vendor/termion/examples/color.rs create mode 100644 src/vendor/termion/examples/commie.rs create mode 100644 src/vendor/termion/examples/detect_color.rs create mode 100644 src/vendor/termion/examples/is_tty.rs create mode 100644 src/vendor/termion/examples/keys.rs create mode 100644 src/vendor/termion/examples/mouse.rs create mode 100644 src/vendor/termion/examples/rainbow.rs create mode 100644 src/vendor/termion/examples/read.rs create mode 100644 src/vendor/termion/examples/rustc_fun.rs create mode 100644 src/vendor/termion/examples/simple.rs create mode 100644 src/vendor/termion/examples/size.rs create mode 100644 src/vendor/termion/examples/truecolor.rs create mode 100644 src/vendor/termion/logo.svg create mode 100644 src/vendor/termion/src/async.rs create mode 100644 src/vendor/termion/src/clear.rs create mode 100644 src/vendor/termion/src/color.rs create mode 100644 src/vendor/termion/src/cursor.rs create mode 100644 src/vendor/termion/src/event.rs create mode 100644 src/vendor/termion/src/input.rs create mode 100644 src/vendor/termion/src/lib.rs create mode 100644 src/vendor/termion/src/macros.rs create mode 100644 src/vendor/termion/src/raw.rs create mode 100644 src/vendor/termion/src/screen.rs create mode 100644 src/vendor/termion/src/scroll.rs create mode 100644 src/vendor/termion/src/style.rs create mode 100644 src/vendor/termion/src/sys/redox/attr.rs create mode 100644 src/vendor/termion/src/sys/redox/mod.rs create mode 100644 src/vendor/termion/src/sys/redox/size.rs create mode 100644 src/vendor/termion/src/sys/redox/tty.rs create mode 100644 src/vendor/termion/src/sys/unix/attr.rs create mode 100644 src/vendor/termion/src/sys/unix/mod.rs create mode 100644 src/vendor/termion/src/sys/unix/size.rs create mode 100644 src/vendor/termion/src/sys/unix/tty.rs create mode 100644 src/vendor/textwrap/tests/version-numbers.rs create mode 100644 src/vendor/unicode-bidi/.appveyor.yml create mode 100644 src/vendor/unicode-bidi/.cargo-checksum.json create mode 100644 src/vendor/unicode-bidi/.cargo-ok create mode 100644 src/vendor/unicode-bidi/.gitignore create mode 100644 src/vendor/unicode-bidi/.rustfmt.toml create mode 100644 src/vendor/unicode-bidi/.travis.yml create mode 100644 src/vendor/unicode-bidi/AUTHORS create mode 100644 src/vendor/unicode-bidi/COPYRIGHT create mode 100644 src/vendor/unicode-bidi/Cargo.toml create mode 100644 src/vendor/unicode-bidi/Cargo.toml.orig create mode 100644 src/vendor/unicode-bidi/LICENSE-APACHE create mode 100644 src/vendor/unicode-bidi/LICENSE-MIT create mode 100644 src/vendor/unicode-bidi/README.md create mode 100644 src/vendor/unicode-bidi/src/char_data/mod.rs create mode 100644 src/vendor/unicode-bidi/src/char_data/tables.rs create mode 100644 src/vendor/unicode-bidi/src/deprecated.rs create mode 100644 src/vendor/unicode-bidi/src/explicit.rs create mode 100644 src/vendor/unicode-bidi/src/format_chars.rs create mode 100644 src/vendor/unicode-bidi/src/implicit.rs create mode 100644 src/vendor/unicode-bidi/src/level.rs create mode 100644 src/vendor/unicode-bidi/src/lib.rs create mode 100644 src/vendor/unicode-bidi/src/prepare.rs create mode 100644 src/vendor/unicode-normalization/.cargo-checksum.json create mode 100644 src/vendor/unicode-normalization/.cargo-ok create mode 100644 src/vendor/unicode-normalization/.gitignore create mode 100644 src/vendor/unicode-normalization/.travis.yml create mode 100644 src/vendor/unicode-normalization/COPYRIGHT create mode 100644 src/vendor/unicode-normalization/Cargo.toml create mode 100644 src/vendor/unicode-normalization/Cargo.toml.orig create mode 100644 src/vendor/unicode-normalization/LICENSE-APACHE create mode 100644 src/vendor/unicode-normalization/LICENSE-MIT create mode 100644 src/vendor/unicode-normalization/README.md create mode 100755 src/vendor/unicode-normalization/scripts/unicode.py create mode 100755 src/vendor/unicode-normalization/scripts/unicode_gen_normtests.py create mode 100644 src/vendor/unicode-normalization/src/decompose.rs create mode 100644 src/vendor/unicode-normalization/src/lib.rs create mode 100644 src/vendor/unicode-normalization/src/normalize.rs create mode 100644 src/vendor/unicode-normalization/src/recompose.rs create mode 100644 src/vendor/unicode-normalization/src/tables.rs create mode 100644 src/vendor/unicode-normalization/src/test.rs create mode 100644 src/vendor/unicode-normalization/src/testdata.rs create mode 100644 src/vendor/url/.cargo-checksum.json create mode 100644 src/vendor/url/.cargo-ok create mode 100644 src/vendor/url/.gitignore create mode 100644 src/vendor/url/.travis.yml create mode 100644 src/vendor/url/Cargo.toml create mode 100644 src/vendor/url/Cargo.toml.orig create mode 100644 src/vendor/url/LICENSE-APACHE create mode 100644 src/vendor/url/LICENSE-MIT create mode 100644 src/vendor/url/Makefile create mode 100644 src/vendor/url/README.md create mode 100644 src/vendor/url/UPGRADING.md create mode 100644 src/vendor/url/appveyor.yml create mode 100644 src/vendor/url/docs/.nojekyll create mode 100644 src/vendor/url/docs/404.html create mode 100644 src/vendor/url/docs/index.html create mode 100644 src/vendor/url/github.png create mode 100644 src/vendor/url/rust-url-todo create mode 100644 src/vendor/url/src/encoding.rs create mode 100644 src/vendor/url/src/form_urlencoded.rs create mode 100644 src/vendor/url/src/host.rs create mode 100644 src/vendor/url/src/lib.rs create mode 100644 src/vendor/url/src/origin.rs create mode 100644 src/vendor/url/src/parser.rs create mode 100644 src/vendor/url/src/path_segments.rs create mode 100644 src/vendor/url/src/quirks.rs create mode 100644 src/vendor/url/src/slicing.rs create mode 100644 src/vendor/url/tests/data.rs create mode 100644 src/vendor/url/tests/setters_tests.json create mode 100644 src/vendor/url/tests/unit.rs create mode 100644 src/vendor/url/tests/urltestdata.json create mode 100644 src/vendor/ws2_32-sys/.cargo-checksum.json create mode 100644 src/vendor/ws2_32-sys/.cargo-ok create mode 100644 src/vendor/ws2_32-sys/Cargo.toml create mode 100644 src/vendor/ws2_32-sys/README.md create mode 100644 src/vendor/ws2_32-sys/build.rs create mode 100644 src/vendor/ws2_32-sys/src/lib.rs diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a86742d7bd..4c296a28e9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -360,8 +360,120 @@ git add path/to/submodule outside the submodule. -It can also be more convenient during development to set `submodules = false` -in the `config.toml` to prevent `x.py` from resetting to the original branch. +In order to prepare your PR, you can run the build locally by doing +`./x.py build src/tools/TOOL`. If you will be editing the sources +there, you may wish to set `submodules = false` in the `config.toml` +to prevent `x.py` from resetting to the original branch. + +#### Breaking Tools Built With The Compiler +[breaking-tools-built-with-the-compiler]: #breaking-tools-built-with-the-compiler + +Rust's build system builds a number of tools that make use of the +internals of the compiler. This includes clippy, +[RLS](https://github.com/rust-lang-nursery/rls) and +[rustfmt](https://github.com/rust-lang-nursery/rustfmt). If these tools +break because of your changes, you may run into a sort of "chicken and egg" +problem. These tools rely on the latest compiler to be built so you can't update +them to reflect your changes to the compiler until those changes are merged into +the compiler. At the same time, you can't get your changes merged into the compiler +because the rust-lang/rust build won't pass until those tools build and pass their +tests. + +That means that, in the default state, you can't update the compiler without first +fixing rustfmt, rls and the other tools that the compiler builds. + +Luckily, a feature was [added to Rust's build](https://github.com/rust-lang/rust/pull/45243) +to make all of this easy to handle. The idea is that you mark the tools as "broken", +so that the rust-lang/rust build passes without trying to build them, then land the change +in the compiler, wait for a nightly, and go update the tools that you broke. Once you're done +and the tools are working again, you go back in the compiler and change the tools back +from "broken". + +This should avoid a bunch of synchronization dances and is also much easier on contributors as +there's no need to block on rls/rustfmt/other tools changes going upstream. + +Here are those same steps in detail: + +1. (optional) First, if it doesn't exist already, create a `config.toml` by copying + `config.toml.example` in the root directory of the Rust repository. + Set `submodules = false` in the `[build]` section. This will prevent `x.py` + from resetting to the original branch after you make your changes. If you + need to [update any submodules to their latest versions][updating-submodules], + see the section of this file about that for more information. +2. (optional) Run `./x.py test src/tools/rustfmt` (substituting the submodule + that broke for `rustfmt`). Fix any errors in the submodule (and possibly others). +3. (optional) Make commits for your changes and send them to upstream repositories as a PR. +4. (optional) Maintainers of these submodules will **not** merge the PR. The PR can't be + merged because CI will be broken. You'll want to write a message on the PR referencing + your change, and how the PR should be merged once your change makes it into a nightly. +5. Update `src/tools/toolstate.toml` to indicate that the tool in question is "broken", + that will disable building it on CI. See the documentation in that file for the exact + configuration values you can use. +6. Commit the changes to `src/tools/toolstate.toml`, **do not update submodules in your commit**, + and then update the PR you have for rust-lang/rust. +7. Wait for your PR to merge. +8. Wait for a nightly +9. (optional) Help land your PR on the upstream repository now that your changes are in nightly. +10. (optional) Send a PR to rust-lang/rust updating the submodule, reverting `src/tools/toolstate.toml` back to a "building" or "testing" state. + +#### Updating submodules +[updating-submodules]: #updating-submodules + +These instructions are specific to updating `rustfmt`, however they may apply +to the other submodules as well. Please help by improving these instructions +if you find any discrepencies or special cases that need to be addressed. + +To update the `rustfmt` submodule, start by running the appropriate +[`git submodule` command](https://git-scm.com/book/en/v2/Git-Tools-Submodules). +For example, to update to the latest commit on the remote master branch, +you may want to run: +``` +git submodule update --remote src/tools/rustfmt +``` +If you run `./x.py build` now, and you are lucky, it may just work. If you see +an error message about patches that did not resolve to any crates, you will need +to complete a few more steps which are outlined with their rationale below. + +*(This error may change in the future to include more information.)* +``` +error: failed to resolve patches for `https://github.com/rust-lang-nursery/rustfmt` + +Caused by: + patch for `rustfmt-nightly` in `https://github.com/rust-lang-nursery/rustfmt` did not resolve to any crates +failed to run: ~/rust/build/x86_64-unknown-linux-gnu/stage0/bin/cargo build --manifest-path ~/rust/src/bootstrap/Cargo.toml +``` + +If you haven't used the `[patch]` +section of `Cargo.toml` before, there is [some relevant documentation about it +in the cargo docs](http://doc.crates.io/manifest.html#the-patch-section). In +addition to that, you should read the +[Overriding dependencies](http://doc.crates.io/specifying-dependencies.html#overriding-dependencies) +section of the documentation as well. + +Specifically, the following [section in Overriding dependencies](http://doc.crates.io/specifying-dependencies.html#testing-a-bugfix) reveals what the problem is: + +> Next up we need to ensure that our lock file is updated to use this new version of uuid so our project uses the locally checked out copy instead of one from crates.io. The way [patch] works is that it'll load the dependency at ../path/to/uuid and then whenever crates.io is queried for versions of uuid it'll also return the local version. +> +> This means that the version number of the local checkout is significant and will affect whether the patch is used. Our manifest declared uuid = "1.0" which means we'll only resolve to >= 1.0.0, < 2.0.0, and Cargo's greedy resolution algorithm also means that we'll resolve to the maximum version within that range. Typically this doesn't matter as the version of the git repository will already be greater or match the maximum version published on crates.io, but it's important to keep this in mind! + +This says that when we updated the submodule, the version number in our +`src/tools/rustfmt/Cargo.toml` changed. The new version is different from +the version in `Cargo.lock`, so the build can no longer continue. + +To resolve this, we need to update `Cargo.lock`. Luckily, cargo provides a +command to do this easily. + +First, go into the `src/` directory since that is where `Cargo.toml` is in +the rust repository. Then run, `cargo update -p rustfmt-nightly` to solve +the problem. + +``` +$ cd src +$ cargo update -p rustfmt-nightly +``` + +This should change the version listed in `src/Cargo.lock` to the new version you updated +the submodule to. Running `./x.py build` should work now. ## Writing Documentation [writing-documentation]: #writing-documentation diff --git a/README.md b/README.md index 95d543b8bb..4fc003036e 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ Read ["Installation"] from [The Book]. ## Building from Source [building-from-source]: #building-from-source +### Building on *nix 1. Make sure you have installed the dependencies: * `g++` 4.7 or later or `clang++` 3.x or later @@ -193,7 +194,7 @@ Snapshot binaries are currently built and tested on several platforms: You may find that other platforms work, but these are our officially supported build environments that are most likely to work. -Rust currently needs between 600MiB and 1.5GiB to build, depending on platform. +Rust currently needs between 600MiB and 1.5GiB of RAM to build, depending on platform. If it hits swap, it will take a very long time to build. There is more advice about hacking on Rust in [CONTRIBUTING.md]. diff --git a/RELEASES.md b/RELEASES.md index e65934a89e..7a3b097611 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,14 +1,96 @@ +Version 1.22.0 (2017-11-23) +========================== + +Language +-------- +- [`non_snake_case` lint now allows extern no-mangle functions][44966] +- [Now accepts underscores in unicode escapes][43716] +- [`#![feature(const_fn)]` is now no longer required for + calling const functions.][43017] It's still required for creating + constant functions. +- [`T op= &T` now works for numeric types.][44287] eg. `let mut x = 2; x += &8;` +- [types that impl `Drop` are now allowed in `const` and `static` types][44456] + +Compiler +-------- +- [rustc now defaults to having 16 codegen units at debug on supported platforms.][45064] +- [rustc will no longer inline in codegen units when compiling for debug][45075] + This should decrease compile times for debug builds. +- [strict memory alignment now enabled on ARMv6][45094] +- [Remove support for the PNaCl target `le32-unknown-nacl`][45041] + +Libraries +--------- +- [Allow atomic operations up to 32 bits + on `armv5te_unknown_linux_gnueabi`][44978] +- [`Box` now impls `From>`][44466] +- [`std::mem::Discriminant` is now guaranteed to be `Send + Sync`][45095] +- [`fs::copy` now returns the length of the main stream on NTFS.][44895] +- [Properly detect overflow in `Instant += Duration`.][44220] +- [impl `Hasher` for `{&mut Hasher, Box}`][44015] +- [impl `fmt::Debug` for `SplitWhitespace`.][44303] +- [`Option` now impls `Try`][42526] This allows for using `?` with `Option` types. + +Stabilized APIs +--------------- + +Cargo +----- +- [Cargo will now build multi file examples in subdirectories of the `examples` + folder that have a `main.rs` file.][cargo/4496] +- [Changed `[root]` to `[package]` in `Cargo.lock`][cargo/4571] Packages with + the old format will continue to work and can be updated with `cargo update`. +- [Now supports vendoring git repositories][cargo/3992] + +Misc +---- +- [`libbacktrace` is now available on Apple platforms.][44251] +- [Stabilised the `compile_fail` attribute for code fences.][43949] This now + lets you specify that a given code example will fail to compile. + +Compatibility Notes +------------------- +- [The minimum Android version that rustc can build for has been bumped + to `4.0` from `2.3`][45656] +- [Allowing `T op= &T` for numeric types has broken some type + inference cases][45480] + + +[42526]: https://github.com/rust-lang/rust/pull/42526 +[43017]: https://github.com/rust-lang/rust/pull/43017 +[43716]: https://github.com/rust-lang/rust/pull/43716 +[43949]: https://github.com/rust-lang/rust/pull/43949 +[44015]: https://github.com/rust-lang/rust/pull/44015 +[44220]: https://github.com/rust-lang/rust/pull/44220 +[44251]: https://github.com/rust-lang/rust/pull/44251 +[44287]: https://github.com/rust-lang/rust/pull/44287 +[44303]: https://github.com/rust-lang/rust/pull/44303 +[44456]: https://github.com/rust-lang/rust/pull/44456 +[44466]: https://github.com/rust-lang/rust/pull/44466 +[44895]: https://github.com/rust-lang/rust/pull/44895 +[44966]: https://github.com/rust-lang/rust/pull/44966 +[44978]: https://github.com/rust-lang/rust/pull/44978 +[45041]: https://github.com/rust-lang/rust/pull/45041 +[45064]: https://github.com/rust-lang/rust/pull/45064 +[45075]: https://github.com/rust-lang/rust/pull/45075 +[45094]: https://github.com/rust-lang/rust/pull/45094 +[45095]: https://github.com/rust-lang/rust/pull/45095 +[45480]: https://github.com/rust-lang/rust/issues/45480 +[45656]: https://github.com/rust-lang/rust/pull/45656 +[cargo/3992]: https://github.com/rust-lang/cargo/pull/3992 +[cargo/4496]: https://github.com/rust-lang/cargo/pull/4496 +[cargo/4571]: https://github.com/rust-lang/cargo/pull/4571 + + + + + + Version 1.21.0 (2017-10-12) ========================== Language -------- -- [Relaxed path syntax. You can now add type parameters to values][43540] - Example: - ```rust - my_macro!(Vec::new); // Always worked - my_macro!(Vec::::new); // Now works - ``` - [You can now use static references for literals.][43838] Example: ```rust @@ -16,6 +98,12 @@ Language let x: &'static u32 = &0; } ``` +- [Relaxed path syntax. Optional `::` before `<` is now allowed in all contexts.][43540] + Example: + ```rust + my_macro!(Vec::new); // Always worked + my_macro!(Vec::::new); // Now works + ``` Compiler -------- diff --git a/config.toml.example b/config.toml.example index a3790c8d20..df0142b8d4 100644 --- a/config.toml.example +++ b/config.toml.example @@ -35,7 +35,7 @@ # If an external LLVM root is specified, we automatically check the version by # default to make sure it's within the range that we're expecting, but setting # this flag will indicate that this version check should not be done. -#version-check = false +#version-check = true # Link libstdc++ statically into the librustc_llvm instead of relying on a # dynamic version to be available. @@ -203,6 +203,16 @@ # Where to install man pages in `prefix` above #mandir = "share/man" +# Where to install data in `prefix` above (currently unused) +#datadir = "share" + +# Where to install additional info in `prefix` above (currently unused) +#infodir = "share/info" + +# Where to install local state (currently unused) +# If this is a relative path, it will get installed in `prefix` above +#localstatedir = "/var/lib" + # ============================================================================= # Options for compiling Rust code itself # ============================================================================= @@ -250,14 +260,11 @@ # Whether or not `panic!`s generate backtraces (RUST_BACKTRACE) #backtrace = true -# The default linker that will be used by the generated compiler. Note that this -# is not the linker used to link said compiler. +# The default linker that will be hard-coded into the generated compiler for +# targets that don't specify linker explicitly in their target specifications. +# Note that this is not the linker used to link said compiler. #default-linker = "cc" -# The default ar utility that will be used by the generated compiler if LLVM -# cannot be used. Note that this is not used to assemble said compiler. -#default-ar = "ar" - # The "channel" for the Rust build to produce. The stable/beta channels only # allow using stable features, whereas the nightly and dev channels allow using # nightly features @@ -303,7 +310,7 @@ # ============================================================================= [target.x86_64-unknown-linux-gnu] -# C compiler to be used to compiler C code and link Rust code. Note that the +# C compiler to be used to compiler C code. Note that the # default value is platform specific, and if not specified it may also depend on # what platform is crossing to what platform. #cc = "cc" @@ -312,6 +319,15 @@ # This is only used for host targets. #cxx = "c++" +# Archiver to be used to assemble static libraries compiled from C/C++ code. +# Note: an absolute path should be used, otherwise LLVM build will break. +#ar = "ar" + +# Linker to be used to link Rust code. Note that the +# default value is platform specific, and if not specified it may also depend on +# what platform is crossing to what platform. +#linker = "cc" + # Path to the `llvm-config` binary of the installation of a custom LLVM to link # against. Note that if this is specifed we don't compile LLVM at all for this # target. diff --git a/git-commit-hash b/git-commit-hash index 060dacf078..34a7e68880 100644 --- a/git-commit-hash +++ b/git-commit-hash @@ -1 +1 @@ -05e2e1c41414e8fc73d0f267ea8dab1a3eeeaa99 \ No newline at end of file +766bd11c8a3c019ca53febdcd77b2215379dd67d \ No newline at end of file diff --git a/src/Cargo.lock b/src/Cargo.lock index bc1fdf40b0..b9493a9998 100644 --- a/src/Cargo.lock +++ b/src/Cargo.lock @@ -20,7 +20,7 @@ name = "aho-corasick" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "memchr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -28,6 +28,7 @@ name = "alloc" version = "0.0.0" dependencies = [ "core 0.0.0", + "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", "std_unicode 0.0.0", ] @@ -38,7 +39,7 @@ dependencies = [ "alloc 0.0.0", "alloc_system 0.0.0", "build_helper 0.1.0", - "cc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "core 0.0.0", "libc 0.0.0", ] @@ -49,6 +50,7 @@ version = "0.0.0" dependencies = [ "alloc 0.0.0", "core 0.0.0", + "dlmalloc 0.0.0", "libc 0.0.0", ] @@ -59,7 +61,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "ar" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -68,55 +70,47 @@ version = "0.0.0" [[package]] name = "atty" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "backtrace" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace-sys 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "dbghelp-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-demangle 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "backtrace-sys" -version = "0.1.14" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "bin_lib" version = "0.1.0" -[[package]] -name = "bin_lib_no_cfg_test" -version = "0.1.0" - [[package]] name = "bitflags" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "bitflags" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "bitflags" version = "0.9.1" @@ -124,7 +118,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "bitflags" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -132,16 +126,16 @@ name = "bootstrap" version = "0.0.0" dependencies = [ "build_helper 0.1.0", - "cc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cmake 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", - "filetime 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "cmake 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", + "filetime 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", "getopts 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -158,8 +152,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "build-manifest" version = "0.1.0" dependencies = [ - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", "toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -167,25 +161,25 @@ dependencies = [ name = "build_helper" version = "0.1.0" dependencies = [ - "filetime 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "filetime 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "cargo" -version = "0.23.0" +version = "0.24.0" dependencies = [ - "atty 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "atty 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "bufstream 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "cargotest 0.1.0", "core-foundation 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "crates-io 0.12.0", + "crates-io 0.13.0", "crossbeam 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "crypto-hash 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "curl 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "docopt 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "filetime 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "filetime 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", "flate2 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", "fs2 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "git2 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -195,44 +189,54 @@ dependencies = [ "hex 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "home 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "ignore 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "jobserver 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "jobserver 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", - "libgit2-sys 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "libgit2-sys 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "psapi-sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "same-file 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "scoped-tls 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "semver 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", "serde_ignored 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "shell-escape 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "tar 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)", "tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "termcolor 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "cargo_metadata" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "cargotest" version = "0.1.0" dependencies = [ - "cargo 0.23.0", - "filetime 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "cargo 0.24.0", + "filetime 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", "flate2 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", "git2 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", "hamcrest 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "hex 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "tar 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -241,7 +245,7 @@ version = "0.1.0" [[package]] name = "cc" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -251,34 +255,72 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "clap" -version = "2.26.2" +version = "2.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "atty 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "atty 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "term_size 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "textwrap 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "textwrap 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "vec_map 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "yaml-rust 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "clippy" +version = "0.0.171" +dependencies = [ + "cargo_metadata 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "clippy-mini-macro-test 0.1.0", + "clippy_lints 0.0.171", + "compiletest_rs 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "duct 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "clippy-mini-macro-test" +version = "0.1.0" + +[[package]] +name = "clippy_lints" +version = "0.0.171" +dependencies = [ + "if_chain 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "itertools 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "pulldown-cmark 0.0.15 (registry+https://github.com/rust-lang/crates.io-index)", + "quine-mc_cluskey 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "semver 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-normalization 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "cmake" -version = "0.1.26" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "collections" -version = "0.0.0" +name = "coco" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "alloc 0.0.0", - "core 0.0.0", + "either 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -294,14 +336,14 @@ name = "commoncrypto-sys" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "compiler_builtins" version = "0.0.0" dependencies = [ - "cc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "core 0.0.0", ] @@ -309,33 +351,37 @@ dependencies = [ name = "compiletest" version = "0.0.0" dependencies = [ - "diff 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "diff 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "filetime 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "filetime 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", "getopts 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "completion" -version = "0.1.0" - -[[package]] -name = "conv" -version = "0.3.3" +name = "compiletest_rs" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "custom_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "diff 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "filetime 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "getopts 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "completion" +version = "0.1.0" + [[package]] name = "core" version = "0.0.0" -dependencies = [ - "rand 0.0.0", -] [[package]] name = "core-foundation" @@ -343,7 +389,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation-sys 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -351,19 +397,19 @@ name = "core-foundation-sys" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "crates-io" -version = "0.12.0" +version = "0.13.0" dependencies = [ "curl 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -396,7 +442,7 @@ dependencies = [ "cssparser-macros 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", - "procedural-masquerade 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "procedural-masquerade 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -407,7 +453,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", - "procedural-masquerade 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "procedural-masquerade 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -418,10 +464,10 @@ version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "curl-sys 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-probe 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-sys 0.9.21 (registry+https://github.com/rust-lang/crates.io-index)", - "socket2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "socket2 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -430,20 +476,15 @@ name = "curl-sys" version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", - "libz-sys 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "libz-sys 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-sys 0.9.21 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "custom_derive" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "dbghelp-sys" version = "0.2.0" @@ -461,29 +502,41 @@ dependencies = [ "unreachable 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "deglob" +version = "0.1.0" + [[package]] name = "derive-new" -version = "0.3.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "quote 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "diff" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "dlmalloc" +version = "0.0.0" +dependencies = [ + "alloc 0.0.0", + "core 0.0.0", +] + [[package]] name = "docopt" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", "strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -492,6 +545,22 @@ name = "dtoa" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "duct" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "error-chain 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazycell 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "os_pipe 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "shared_child 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "either" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "enum_primitive" version = "0.1.1" @@ -518,12 +587,20 @@ dependencies = [ "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "error-chain" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "backtrace 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "error-chain" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -533,19 +610,20 @@ dependencies = [ "rustdoc 0.0.0", ] +[[package]] +name = "features" +version = "0.1.0" + [[package]] name = "filetime" -version = "0.1.12" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "find_all_refs" -version = "0.1.0" - [[package]] name = "find_all_refs_no_cfg_test" version = "0.1.0" @@ -559,7 +637,7 @@ name = "flate2" version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "miniz-sys 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -569,7 +647,7 @@ version = "0.0.0" [[package]] name = "fnv" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -583,10 +661,26 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "fuchsia-zircon" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fuchsia-zircon-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "futf" version = "0.1.3" @@ -598,7 +692,7 @@ dependencies = [ [[package]] name = "futures" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -612,11 +706,11 @@ version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", - "libgit2-sys 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "libgit2-sys 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-probe 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-sys 0.9.21 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -627,7 +721,7 @@ dependencies = [ "curl 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "git2 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -637,20 +731,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "globset" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "aho-corasick 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "goto_def" -version = "0.1.0" - [[package]] name = "graphviz" version = "0.0.0" @@ -669,13 +759,13 @@ name = "handlebars" version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "pest 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -683,10 +773,6 @@ name = "hex" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "highlight" -version = "0.1.0" - [[package]] name = "home" version = "0.3.0" @@ -699,10 +785,6 @@ dependencies = [ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "hover" -version = "0.1.0" - [[package]] name = "html-diff" version = "0.0.4" @@ -733,16 +815,21 @@ dependencies = [ "unicode-normalization 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "if_chain" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "ignore" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", - "globset 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "globset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "thread_local 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "walkdir 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -764,17 +851,25 @@ version = "0.1.0" name = "installer" version = "0.0.0" dependencies = [ - "clap 2.26.2 (registry+https://github.com/rust-lang/crates.io-index)", + "clap 2.27.1 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "flate2 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "tar 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)", "walkdir 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "xz2 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "itertools" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "either 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "itoa" version = "0.3.4" @@ -782,11 +877,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "jobserver" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -794,11 +889,11 @@ name = "jsonrpc-core" version = "7.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -823,20 +918,25 @@ dependencies = [ [[package]] name = "languageserver-types" -version = "0.12.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "enum_primitive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "url_serde 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "lazy_static" -version = "0.2.8" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "lazycell" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -848,20 +948,20 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.31" +version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "libgit2-sys" -version = "0.6.15" +version = "0.6.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cmake 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "cmake 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", "curl-sys 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "libssh2-sys 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "libz-sys 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "libz-sys 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-sys 0.9.21 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -871,20 +971,20 @@ name = "libssh2-sys" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cmake 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", - "libz-sys 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "cmake 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "libz-sys 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-sys 0.9.21 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libz-sys" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -903,9 +1003,9 @@ name = "lzma-sys" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "filetime 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "filetime 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -914,23 +1014,6 @@ name = "mac" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "magenta" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "conv 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "magenta-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "magenta-sys" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "markup5ever" version = "0.3.2" @@ -954,18 +1037,18 @@ name = "mdbook" version = "0.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "clap 2.26.2 (registry+https://github.com/rust-lang/crates.io-index)", + "clap 2.27.1 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "handlebars 0.29.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "open 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "pulldown-cmark 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -975,15 +1058,23 @@ name = "memchr" version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "memchr" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "memchr" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -991,8 +1082,8 @@ name = "miniz-sys" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1017,11 +1108,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "nix" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "num" version = "0.1.40" @@ -1031,7 +1133,7 @@ dependencies = [ "num-complex 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", "num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", - "num-rational 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", + "num-rational 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1042,7 +1144,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1074,7 +1176,7 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.1.39" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "num-bigint 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1090,16 +1192,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "num_cpus" -version = "1.6.2" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "omit_init_build" -version = "0.1.0" - [[package]] name = "open" version = "1.2.1" @@ -1112,8 +1210,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "foreign-types 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-sys 0.9.21 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1127,12 +1225,22 @@ name = "openssl-sys" version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "os_pipe" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "nix 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "owning_ref" version = "0.3.3" @@ -1161,7 +1269,7 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1192,7 +1300,7 @@ version = "0.7.21" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1210,7 +1318,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "precomputed-hash" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1224,14 +1332,14 @@ dependencies = [ [[package]] name = "procedural-masquerade" -version = "0.1.2" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "profiler_builtins" version = "0.0.0" dependencies = [ - "cc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "core 0.0.0", ] @@ -1246,10 +1354,11 @@ dependencies = [ [[package]] name = "pulldown-cmark" -version = "0.0.14" +version = "0.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bitflags 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "getopts 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1267,8 +1376,8 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "quote" -version = "0.2.3" +name = "quine-mc_cluskey" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1278,32 +1387,46 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "racer" -version = "2.0.10" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "clap 2.26.2 (registry+https://github.com/rust-lang/crates.io-index)", + "clap 2.27.1 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "syntex_errors 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)", "syntex_syntax 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)", "toml 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "typed-arena 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand" -version = "0.0.0" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "core 0.0.0", + "fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "rand" -version = "0.3.16" +name = "rayon" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "either 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon-core 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rayon-core" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", - "magenta 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "coco 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1311,6 +1434,14 @@ name = "redox_syscall" version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "redox_termios" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "reformat" version = "0.1.0" @@ -1337,7 +1468,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "aho-corasick 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "thread_local 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1361,54 +1492,51 @@ version = "0.1.0" name = "remote-test-server" version = "0.1.0" -[[package]] -name = "rename" -version = "0.1.0" - [[package]] name = "rls" -version = "0.122.0" +version = "0.123.1" dependencies = [ - "cargo 0.23.0", + "cargo 0.24.0", "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "jsonrpc-core 7.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "languageserver-types 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "languageserver-types 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "racer 2.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "rls-analysis 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rls-data 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "racer 2.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rls-analysis 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rls-data 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "rls-rustc 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "rls-span 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "rls-vfs 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rustfmt-nightly 0.2.7", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rustfmt-nightly 0.2.16", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rls-analysis" -version = "0.6.8" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "derive-new 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "derive-new 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rls-data 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rls-data 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "rls-span 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rls-data" -version = "0.10.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "rls-span 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1422,8 +1550,8 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1431,7 +1559,7 @@ name = "rls-vfs" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "racer 2.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "racer 2.0.12 (registry+https://github.com/rust-lang/crates.io-index)", "rls-span 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1439,7 +1567,7 @@ dependencies = [ name = "rustbook" version = "0.1.0" dependencies = [ - "clap 2.26.2 (registry+https://github.com/rust-lang/crates.io-index)", + "clap 2.27.1 (registry+https://github.com/rust-lang/crates.io-index)", "mdbook 0.0.26 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1448,11 +1576,11 @@ name = "rustc" version = "0.0.0" dependencies = [ "arena 0.0.0", - "bitflags 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "flate2 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", "fmt_macros 0.0.0", "graphviz 0.0.0", - "jobserver 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "jobserver 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_back 0.0.0", @@ -1496,7 +1624,7 @@ dependencies = [ name = "rustc_apfloat" version = "0.0.0" dependencies = [ - "bitflags 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_cratesio_shim 0.0.0", ] @@ -1507,7 +1635,7 @@ dependencies = [ "alloc 0.0.0", "alloc_system 0.0.0", "build_helper 0.1.0", - "cmake 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "cmake 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", "core 0.0.0", ] @@ -1516,10 +1644,20 @@ name = "rustc_back" version = "0.0.0" dependencies = [ "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", "serialize 0.0.0", "syntax 0.0.0", ] +[[package]] +name = "rustc_binaryen" +version = "0.0.0" +dependencies = [ + "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "cmake 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "rustc_borrowck" version = "0.0.0" @@ -1527,6 +1665,7 @@ dependencies = [ "graphviz 0.0.0", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "rustc 0.0.0", + "rustc_back 0.0.0", "rustc_errors 0.0.0", "rustc_mir 0.0.0", "syntax 0.0.0", @@ -1561,7 +1700,7 @@ dependencies = [ name = "rustc_cratesio_shim" version = "0.0.0" dependencies = [ - "bitflags 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1576,7 +1715,7 @@ dependencies = [ name = "rustc_driver" version = "0.0.0" dependencies = [ - "ar 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ar 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "arena 0.0.0", "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "graphviz 0.0.0", @@ -1611,6 +1750,7 @@ dependencies = [ name = "rustc_errors" version = "0.0.0" dependencies = [ + "rustc_data_structures 0.0.0", "serialize 0.0.0", "syntax_pos 0.0.0", ] @@ -1621,6 +1761,7 @@ version = "0.0.0" dependencies = [ "graphviz 0.0.0", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", "rustc 0.0.0", "rustc_data_structures 0.0.0", "serialize 0.0.0", @@ -1634,7 +1775,6 @@ version = "0.0.0" dependencies = [ "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "rustc 0.0.0", - "rustc_back 0.0.0", "rustc_const_eval 0.0.0", "syntax 0.0.0", "syntax_pos 0.0.0", @@ -1644,9 +1784,9 @@ dependencies = [ name = "rustc_llvm" version = "0.0.0" dependencies = [ - "bitflags 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "build_helper 0.1.0", - "cc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_cratesio_shim 0.0.0", ] @@ -1657,7 +1797,7 @@ dependencies = [ "alloc 0.0.0", "alloc_system 0.0.0", "build_helper 0.1.0", - "cmake 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "cmake 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", "core 0.0.0", ] @@ -1683,7 +1823,7 @@ dependencies = [ name = "rustc_mir" version = "0.0.0" dependencies = [ - "bitflags 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "graphviz 0.0.0", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "rustc 0.0.0", @@ -1703,7 +1843,7 @@ dependencies = [ "alloc 0.0.0", "alloc_system 0.0.0", "build_helper 0.1.0", - "cmake 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "cmake 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", "core 0.0.0", ] @@ -1753,6 +1893,7 @@ dependencies = [ "arena 0.0.0", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "rustc 0.0.0", + "rustc_data_structures 0.0.0", "rustc_errors 0.0.0", "syntax 0.0.0", "syntax_pos 0.0.0", @@ -1763,7 +1904,7 @@ name = "rustc_save_analysis" version = "0.0.0" dependencies = [ "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rls-data 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rls-data 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "rls-span 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "rustc 0.0.0", "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1777,17 +1918,19 @@ dependencies = [ name = "rustc_trans" version = "0.0.0" dependencies = [ - "bitflags 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "flate2 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", - "jobserver 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "jobserver 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "rustc 0.0.0", "rustc-demangle 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_allocator 0.0.0", + "rustc_apfloat 0.0.0", "rustc_back 0.0.0", + "rustc_binaryen 0.0.0", "rustc_const_math 0.0.0", "rustc_data_structures 0.0.0", "rustc_errors 0.0.0", @@ -1804,12 +1947,13 @@ dependencies = [ name = "rustc_trans_utils" version = "0.0.0" dependencies = [ - "ar 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ar 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "flate2 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "rustc 0.0.0", "rustc_back 0.0.0", + "rustc_data_structures 0.0.0", "syntax 0.0.0", "syntax_pos 0.0.0", ] @@ -1821,7 +1965,7 @@ dependencies = [ "alloc 0.0.0", "alloc_system 0.0.0", "build_helper 0.1.0", - "cmake 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "cmake 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", "core 0.0.0", ] @@ -1847,11 +1991,11 @@ name = "rustdoc" version = "0.0.0" dependencies = [ "build_helper 0.1.0", - "cc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "html-diff 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "pulldown-cmark 0.0.14 (registry+https://github.com/rust-lang/crates.io-index)", + "pulldown-cmark 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1863,19 +2007,20 @@ dependencies = [ [[package]] name = "rustfmt-nightly" -version = "0.2.7" +version = "0.2.16" dependencies = [ - "diff 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "derive-new 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "diff 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "getopts 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "strings 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "strings 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "term 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-segmentation 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1901,6 +2046,11 @@ name = "scopeguard" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "scopeguard" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "selectors" version = "0.18.0" @@ -1908,21 +2058,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "cssparser 0.13.7 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", "phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", - "precomputed-hash 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "semver" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "semver" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1932,22 +2090,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde" -version = "1.0.15" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde_derive" -version = "1.0.15" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive_internals 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive_internals 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_derive_internals" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1959,24 +2117,34 @@ name = "serde_ignored" version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_json" -version = "1.0.3" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "itoa 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serialize" version = "0.0.0" +[[package]] +name = "shared_child" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "shell-escape" version = "0.1.3" @@ -1994,12 +2162,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "socket2" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2017,15 +2185,13 @@ dependencies = [ "alloc_jemalloc 0.0.0", "alloc_system 0.0.0", "build_helper 0.1.0", - "cc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "collections 0.0.0", "compiler_builtins 0.0.0", "core 0.0.0", "libc 0.0.0", "panic_abort 0.0.0", "panic_unwind 0.0.0", "profiler_builtins 0.0.0", - "rand 0.0.0", + "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_asan 0.0.0", "rustc_lsan 0.0.0", "rustc_msan 0.0.0", @@ -2047,10 +2213,10 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "debug_unreachable 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", - "precomputed-hash 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", + "precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache_codegen 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2073,7 +2239,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "strings" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2084,15 +2250,6 @@ name = "strsim" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "syn" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "quote 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "syn" version = "0.11.11" @@ -2115,7 +2272,7 @@ dependencies = [ name = "syntax" version = "0.0.0" dependencies = [ - "bitflags 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_cratesio_shim 0.0.0", "rustc_data_structures 0.0.0", @@ -2141,6 +2298,7 @@ version = "0.0.0" dependencies = [ "rustc_data_structures 0.0.0", "serialize 0.0.0", + "unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2148,7 +2306,7 @@ name = "syntex_errors" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", "syntex_pos 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2170,7 +2328,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", "syntex_errors 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2184,8 +2342,8 @@ name = "tar" version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "filetime 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "filetime 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "xattr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2194,7 +2352,7 @@ name = "tempdir" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rand 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2221,21 +2379,21 @@ dependencies = [ ] [[package]] -name = "term_size" -version = "0.3.0" +name = "termcolor" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "wincolor 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "termcolor" -version = "0.3.3" +name = "termion" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "wincolor 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2248,10 +2406,9 @@ dependencies = [ [[package]] name = "textwrap" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "term_size 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2261,7 +2418,7 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2277,7 +2434,7 @@ name = "thread_local" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2298,14 +2455,9 @@ name = "toml" version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "typed-arena" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "unicode-bidi" version = "0.3.4" @@ -2339,10 +2491,6 @@ name = "unicode-xid" version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "unicødë" -version = "0.1.0" - [[package]] name = "unreachable" version = "0.1.1" @@ -2376,12 +2524,12 @@ dependencies = [ [[package]] name = "url" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2389,8 +2537,8 @@ name = "url_serde" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2482,7 +2630,7 @@ name = "xattr" version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2503,22 +2651,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" "checksum aho-corasick 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "500909c4f87a9e52355b26626d890833e9e1d53ac566db76c36faa984b889699" "checksum ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "23ac7c30002a5accbf7e8987d0632fa6de155b7c3d39d0067317a391e00a2ef6" -"checksum ar 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b24e4eef8e3fa7e2ca75b157e6039cdf8d9d3a68213ddc19d0fd9d576b9717c9" -"checksum atty 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d912da0db7fa85514874458ca3651fe2cddace8d0b0505571dbdcd41ab490159" -"checksum backtrace 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "99f2ce94e22b8e664d95c57fff45b98a966c2252b60691d0b7aeeccd88d70983" -"checksum backtrace-sys 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "c63ea141ef8fdb10409d0f5daf30ac51f84ef43bff66f16627773d2a292cd189" +"checksum ar 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "35c7a5669cb64f085739387e1308b74e6d44022464b7f1b63bbd4ceb6379ec31" +"checksum atty 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "21e50800ec991574876040fff8ee46b136a53e985286fbe6a3bdfe6421b78860" +"checksum backtrace 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8709cc7ec06f6f0ae6c2c7e12f6ed41540781f72b488d83734978295ceae182e" +"checksum backtrace-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "44585761d6161b0f57afc49482ab6bd067e4edef48c12a152c237eb0203f7661" "checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" -"checksum bitflags 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1370e9fc2a6ae53aea8b7a5110edbd08836ed87c88736dfabccade1c2b44bff4" "checksum bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5" -"checksum bitflags 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f5cde24d1b2e2216a726368b2363a273739c91f4e3eb4e0dd12d672d396ad989" +"checksum bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c30d3802dfb7281680d6285f2ccdaa8c2d8fee41f93805dba5c4cf50dc23cf" "checksum bufstream 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f2f382711e76b9de6c744cc00d0497baba02fb00a787f088c879f01d09468e32" -"checksum cc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7db2f146208d7e0fbee761b09cd65a7f51ccc38705d4e7262dad4d73b12a76b1" +"checksum cargo_metadata 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "be1057b8462184f634c3a208ee35b0f935cfd94b694b26deadccd98732088d7b" +"checksum cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a9b13a57efd6b30ecd6598ebdb302cca617930b5470647570468a65d12ef9719" "checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de" -"checksum clap 2.26.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3451e409013178663435d6f15fdb212f14ee4424a3d74f979d081d0a66b6f1f2" -"checksum cmake 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)" = "357c07e7a1fc95732793c1edb5901e1a1f305cfcf63a90eb12dbd22bdb6b789d" +"checksum clap 2.27.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1b8c532887f1a292d17de05ae858a8fe50a301e196f9ef0ddb7ccd0d1d00f180" +"checksum cmake 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "e14cd15a7cbc2c6a905677e54b831ee91af2ff43b352010f6133236463b65cac" +"checksum coco 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c06169f5beb7e31c7c67ebf5540b8b472d23e3eade3b2ec7d1f5b504a85f91bd" "checksum commoncrypto 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d056a8586ba25a1e4d61cb090900e495952c7886786fc55f909ab2f819b69007" "checksum commoncrypto-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1fed34f46747aa73dfaa578069fd8279d2818ade2b55f38f22a9401c7f4083e2" -"checksum conv 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "78ff10625fd0ac447827aa30ea8b861fead473bb60aeb73af6c1c58caf0d1299" +"checksum compiletest_rs 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "86f4663adfd113e17109c35c2067194eca782a5baf9c90f4696ca13d04631adb" "checksum core-foundation 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5909502e547762013619f4c4e01cc7393c20fe2d52d7fa471c1210adb2320dc7" "checksum core-foundation-sys 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "bc9fb3d6cb663e6fd7cf1c63f9b144ee2b1e4a78595a0451dd34bff85b9a3387" "checksum crossbeam 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "0c5ea215664ca264da8a9d9c3be80d2eaf30923c259d03e870388eb927508f97" @@ -2528,29 +2677,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum cssparser-macros 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "079adec4af52bb5275eadd004292028c79eb3c5f5b4ee8086a36d4197032f6df" "checksum curl 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7034c534a1d7d22f7971d6088aa9d281d219ef724026c3428092500f41ae9c2c" "checksum curl-sys 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "4bee31aa3a079d5f3ff9579ea4dcfb1b1a17a40886f5f467436d383e78134b55" -"checksum custom_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9" "checksum dbghelp-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "97590ba53bcb8ac28279161ca943a924d1fd4a8fb3fa63302591647c4fc5b850" "checksum debug_unreachable 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9a032eac705ca39214d169f83e3d3da290af06d8d1d344d1baad2fd002dca4b3" -"checksum derive-new 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "41be6ca3b99e0c0483fb2389685448f650459c3ecbe4e18d7705d8010ec4ab8e" -"checksum diff 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "0a515461b6c8c08419850ced27bc29e86166dcdcde8fbe76f8b1f0589bb49472" +"checksum derive-new 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "415f627ab054041c3eb748c2e1da0ef751989f5f0c386b63a098e545854a98ba" +"checksum diff 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "3c2b69f912779fbb121ceb775d74d51e915af17aaebc38d28a592843a2dd0a3a" "checksum docopt 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3b5b93718f8b3e5544fcc914c43de828ca6c6ace23e0332c6080a2977b49787a" "checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab" +"checksum duct 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e45aa15fe0a8a8f511e6d834626afd55e49b62e5c8802e18328a87e8a8f6065c" +"checksum either 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "740178ddf48b1a9e878e6d6509a1442a2d42fd2928aae8e7a6f8a36fb01981b3" "checksum enum_primitive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180" "checksum env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "15abd780e45b3ea4f76b4e9a26ff4843258dd8a3eed2775a0e7368c2e7936c2f" "checksum env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3ddf21e73e016298f5cb37d6ef8e8da8e39f91f9ec8b0df44b7deb16a9f8cd5b" "checksum error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff511d5dc435d703f4971bc399647c9bc38e20cb41452e3b9feb4765419ed3f3" -"checksum filetime 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "6ab199bf38537c6f38792669e081e0bb278b9b7405bba2642e4e5d15bf732c0e" +"checksum error-chain 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6930e04918388a9a2e41d518c25cf679ccafe26733fb4127dbf21993f2575d46" +"checksum filetime 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "aa75ec8f7927063335a9583e7fa87b0110bb888cf766dc01b54c0ff70d760c8e" "checksum flate2 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)" = "e6234dd4468ae5d1e2dbb06fe2b058696fdc50a339c68a393aefbf00bc81e423" -"checksum fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6cc484842f1e2884faf56f529f960cc12ad8c71ce96cc7abba0a067c98fee344" +"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" "checksum foreign-types 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3e4056b9bd47f8ac5ba12be771f77a0dae796d1bbaaf5fd0b9c2d38b69b8a29d" "checksum fs2 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9ab76cfd2aaa59b7bf6688ad9ba15bbae64bff97f04ea02144cfd3443e5c2866" +"checksum fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f6c0581a4e363262e52b87f59ee2afe3415361c6ec35e665924eb08afe8ff159" +"checksum fuchsia-zircon-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "43f3795b4bae048dc6123a6b972cadde2e676f9ded08aef6bb77f5f157684a82" "checksum futf 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "51f93f3de6ba1794dcd5810b3546d004600a59a98266487c8407bc4b24e398f3" -"checksum futures 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "05a23db7bd162d4e8265968602930c476f688f0c180b44bdaf55e0cb2c687558" +"checksum futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "118b49cac82e04121117cbd3121ede3147e885627d82c4546b87c702debb90c1" "checksum getopts 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)" = "65922871abd2f101a2eb0eaebadc66668e54a87ad9c3dd82520b5f86ede5eff9" "checksum git2 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)" = "0c1c0203d653f4140241da0c1375a404f0a397249ec818cd2076c6280c50f6fa" "checksum git2-curl 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "68676bc784bf0bef83278898929bf64a251e87c0340723d0b93fa096c9c5bf8e" "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" -"checksum globset 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "feeb1b6840809ef5efcf7a4a990bc4e1b7ee3df8cf9e2379a75aeb2ba42ac9c3" +"checksum globset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "464627f948c3190ae3d04b1bc6d7dca2f785bda0ac01278e6db129ad383dbeb6" "checksum hamcrest 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bf088f042a467089e9baa4972f57f9247e42a0cc549ba264c7a04fbb8ecb89d4" "checksum handlebars 0.29.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fb04af2006ea09d985fef82b81e0eb25337e51b691c76403332378a53d521edc" "checksum hex 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d6a22814455d41612f41161581c2883c0c6a1c41852729b17d5ed88f01e153aa" @@ -2558,68 +2711,75 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum html-diff 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5298d63081a642508fce965740ddb03a386c5d81bf1fef0579a815cf49cb8c68" "checksum html5ever 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a49d5001dd1bddf042ea41ed4e0a671d50b1bf187e66b349d7ec613bdce4ad90" "checksum idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "014b298351066f1512874135335d62a789ffe78a9974f94b43ed5621951eaf7d" +"checksum if_chain 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "61bb90bdd39e3af69b0172dfc6130f6cd6332bf040fbb9bdd4401d37adbd48b8" "checksum ignore 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b3fcaf2365eb14b28ec7603c98c06cc531f19de9eb283d89a3dff8417c8c99f5" +"checksum itertools 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d3f2be4da1690a039e9ae5fd575f706a63ad5a2120f161b1d653c9da3930dd21" "checksum itoa 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8324a32baf01e2ae060e9de58ed0bc2320c9a2833491ee36cd3b4c414de4db8c" -"checksum jobserver 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "443ae8bc0af6c106e6e8b77e04684faecc1a5ce94e058f4c2b0a037b0ea1b133" +"checksum jobserver 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "931b04e5e57d88cc909528f0d701db36a870b72a052648ded8baf80f9f445e0f" "checksum jsonrpc-core 7.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b1acd0f9934da94466d2370f36832b9b19271b4abdfdb5e69f0bcd991ebcd515" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" "checksum kuchiki 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ef2ea4f2f7883cd7c6772b06c14abca01a2cc1f75c426cebffcf6b3b925ef9fc" -"checksum languageserver-types 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d52e477b23bf52cd3ca0f9fc6c5d14be954eec97e3b9cdfbd962d911bd533caf" -"checksum lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3b37545ab726dd833ec6420aaba8231c5b320814b9029ad585555d2a03e94fbf" -"checksum libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)" = "d1419b2939a0bc44b77feb34661583c7546b532b192feab36249ab584b86856c" -"checksum libgit2-sys 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)" = "205fc37e829c5b36de63d14c8dc8b62c5a6a2519b16318ed0977079ca97256a9" +"checksum languageserver-types 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c7878a264bff274f017fac3dff1fa17afb9e6320738f91331ebfde14ab2bc734" +"checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" +"checksum lazycell 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3b585b7a6811fb03aa10e74b278a0f00f8dd9b45dc681f148bb29fa5cb61859b" +"checksum libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "5ba3df4dcb460b9dfbd070d41c94c19209620c191b0340b929ce748a2bcd42d2" +"checksum libgit2-sys 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)" = "6f74b4959cef96898f5123148724fc7dee043b9a6b99f219d948851bfbe53cb2" "checksum libssh2-sys 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0db4ec23611747ef772db1c4d650f8bd762f07b461727ec998f953c614024b75" -"checksum libz-sys 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "44ebbc760fd2d2f4d93de09a0e13d97e057612052e871da9985cedcb451e6bd5" +"checksum libz-sys 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)" = "87f737ad6cc6fd6eefe3d9dc5412f1573865bded441300904d2f42269e140f16" "checksum log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "880f77541efa6e5cc74e76910c9884d9859683118839d6a1dc3b11e63512565b" "checksum lzma-sys 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c1b93b78f89e8737dac81837fc8f5521ac162abcba902e1a3db949d55346d1da" "checksum mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" -"checksum magenta 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4bf0336886480e671965f794bc9b6fce88503563013d1bfb7a502c81fe3ac527" -"checksum magenta-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "40d014c7011ac470ae28e2f76a02bfea4a8480f73e701353b49ad7a8d75f4699" "checksum markup5ever 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ff834ac7123c6a37826747e5ca09db41fd7a83126792021c2e636ad174bb77d3" "checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376" "checksum mdbook 0.0.26 (registry+https://github.com/rust-lang/crates.io-index)" = "8a1ac668292d1e5c7b1c6fd64f70d3a85105b8069a89558a0d67bdb2ff298ca1" "checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" -"checksum memchr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1dbccc0e46f1ea47b9f17e6d67c5a96bd27030519c519c9c91327e31275a47b4" +"checksum memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "148fab2e51b4f1cfc66da2a7c32981d1d3c083a803978268bb11fe4b86925e7a" +"checksum memchr 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e01e64d9017d18e7fc09d8e4fe0e28ff6931019e979fb8019319db7ca827f8a6" "checksum miniz-sys 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "609ce024854aeb19a0ef7567d348aaa5a746b32fb72e336df7fcc16869d7e2b4" "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" "checksum net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)" = "3a80f842784ef6c9a958b68b7516bc7e35883c614004dd94959a4dca1b716c09" +"checksum nix 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "47e49f6982987135c5e9620ab317623e723bd06738fd85377e8d55f57c8b6487" "checksum num 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "a311b77ebdc5dd4cf6449d81e4135d9f0e3b153839ac90e648a8ef538f923525" "checksum num-bigint 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "8fd0f8dbb4c0960998958a796281d88c16fbe68d87b1baa6f31e2979e81fd0bd" "checksum num-complex 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "503e668405c5492d67cf662a81e05be40efe2e6bcf10f7794a07bd9865e704e6" "checksum num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "d1452e8b06e448a07f0e6ebb0bb1d92b8890eea63288c0b627331d53514d0fba" "checksum num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)" = "7485fcc84f85b4ecd0ea527b14189281cf27d60e583ae65ebc9c088b13dffe01" -"checksum num-rational 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "288629c76fac4b33556f4b7ab57ba21ae202da65ba8b77466e6d598e31990790" +"checksum num-rational 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "0c7cb72a95250d8a370105c828f388932373e0e94414919891a0f945222310fe" "checksum num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "99843c856d68d8b4313b03a17e33c4bb42ae8f6610ea81b28abe076ac721b9b0" -"checksum num_cpus 1.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "aec53c34f2d0247c5ca5d32cca1478762f301740468ee9ee6dcb7a0dd7a0c584" +"checksum num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "514f0d73e64be53ff320680ca671b64fe3fb91da01e1ae2ddc99eb51d453b20d" "checksum open 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c281318d992e4432cfa799969467003d05921582a7489a8325e37f8a450d5113" "checksum openssl 0.9.21 (registry+https://github.com/rust-lang/crates.io-index)" = "2225c305d8f57001a0d34263e046794aa251695f20773102fbbfeb1e7b189955" "checksum openssl-probe 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d98df0270d404ccd3c050a41d579c52d1db15375168bb3471e04ec0f5f378daf" "checksum openssl-sys 0.9.21 (registry+https://github.com/rust-lang/crates.io-index)" = "92867746af30eea7a89feade385f7f5366776f1c52ec6f0de81360373fa88363" +"checksum os_pipe 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "998bfbb3042e715190fe2a41abfa047d7e8cb81374d2977d7f100eacd8619cb1" "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" -"checksum percent-encoding 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "de154f638187706bde41d9b4738748933d64e6b37bdbffc0b47a97d16a6ae356" +"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" "checksum pest 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0a6dda33d67c26f0aac90d324ab2eb7239c819fc7b2552fe9faa4fe88441edc8" "checksum phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "cb325642290f28ee14d8c6201159949a872f220c62af6e110a56ea914fbe42fc" "checksum phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "d62594c0bb54c464f633175d502038177e90309daf2e0158be42ed5f023ce88f" "checksum phf_generator 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "6b07ffcc532ccc85e3afc45865469bf5d9e4ef5bfcf9622e3cfe80c2d275ec03" "checksum phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "07e24b0ca9643bdecd0632f2b3da6b1b89bbb0030e0b992afc1113b23a7bc2f2" "checksum pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "3a8b4c6b8165cd1a1cd4b9b120978131389f64bdaf456435caa41e630edba903" -"checksum precomputed-hash 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf1fc3616b3ef726a847f2cd2388c646ef6a1f1ba4835c2629004da48184150" -"checksum procedural-masquerade 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c93cdc1fb30af9ddf3debc4afbdb0f35126cbd99daa229dd76cdd5349b41d989" +"checksum precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" +"checksum procedural-masquerade 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "dc1bcafee1590f81acb329ae45ec627b318123f085153913620316ae9a144b2a" "checksum psapi-sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "abcd5d1a07d360e29727f757a9decb3ce8bc6e0efa8969cfaad669a8317a2478" -"checksum pulldown-cmark 0.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9ab1e588ef8efd702c7ed9d2bd774db5e6f4d878bb5a1a9f371828fbdff6973" +"checksum pulldown-cmark 0.0.15 (registry+https://github.com/rust-lang/crates.io-index)" = "378e941dbd392c101f2cb88097fa4d7167bc421d4b88de3ff7dbee503bc3233b" "checksum pulldown-cmark 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a656fdb8b6848f896df5e478a0eb9083681663e37dcb77dd16981ff65329fe8b" "checksum quick-error 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "eda5fe9b71976e62bc81b781206aaa076401769b2143379d3eb2118388babac4" -"checksum quote 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4c5cf478fe1006dbcc72567121d23dbdae5f1632386068c5c86ff4f645628504" +"checksum quine-mc_cluskey 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "07589615d719a60c8dd8a4622e7946465dfef20d1a428f969e3443e7386d5f45" "checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" -"checksum racer 2.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "f120c7510ef7aff254aeb06067fb6fac573ec96a1660e194787cf9dced412bf0" -"checksum rand 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)" = "eb250fd207a4729c976794d03db689c9be1d634ab5a1c9da9492a13d8fecbcdf" +"checksum racer 2.0.12 (registry+https://github.com/rust-lang/crates.io-index)" = "034f1c4528581c40a60e96875467c03315868084e08ff4ceb46a00f7be3b16b4" +"checksum rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)" = "6475140dfd8655aeb72e1fd4b7a1cc1c202be65d71669476e392fe62532b9edd" +"checksum rayon 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ed02d09394c94ffbdfdc755ad62a132e94c3224a8354e78a1200ced34df12edf" +"checksum rayon-core 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e64b609139d83da75902f88fd6c01820046840a18471e4dfcd5ac7c0f46bea53" "checksum redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "8dde11f18c108289bef24469638a04dce49da56084f2d50618b226e47eb04509" +"checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" "checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" "checksum regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1731164734096285ec2a5ec7fea5248ae2f5485b3feeb0115af4fda2183b2d1b" "checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" "checksum regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ad890a5eef7953f55427c50575c680c42841653abd2b028b68cd223d157f62db" -"checksum rls-analysis 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)" = "fa390bdc70b0a90d07d9cd5c6989ba5fca2d59728903919ebda1a1b2037b18d7" -"checksum rls-data 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "11d339f1888e33e74d8032de0f83c40b2bdaaaf04a8cfc03b32186c3481fb534" +"checksum rls-analysis 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5b961e7270b2084839ede4d2788167086b24bc9cf09c9e955cc851afaf116054" +"checksum rls-data 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "48257ceade23c2e01a3ca8d2fc4226101b107f6a3c868f829cf3fd2f204a1fe6" "checksum rls-rustc 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b21ea952e9bf1569929abf1bb920262cde04b7b1b26d8e0260286302807299d2" "checksum rls-span 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5d7c7046dc6a92f2ae02ed302746db4382e75131b9ce20ce967259f6b5867a6a" "checksum rls-vfs 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ffd34691a510938bb67fe0444fb363103c73ffb31c121d1e16bc92d8945ea8ff" @@ -2628,26 +2788,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum same-file 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d931a44fdaa43b8637009e7632a02adc4f2b2e0733c08caa4cf00e8da4a117a7" "checksum scoped-tls 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f417c22df063e9450888a7561788e9bd46d3bb3c1466435b4eccb903807f147d" "checksum scopeguard 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "59a076157c1e2dc561d8de585151ee6965d910dd4dcb5dabb7ae3e83981a6c57" +"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" "checksum selectors 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e3c89b1c6a3c029c82263f7dd2d44d0005ee7374eb09e254ab59dede4353a8c0" +"checksum semver 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537" "checksum semver 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bee2bc909ab2d8d60dab26e8cad85b25d795b14603a0dcb627b78b9d30b6454b" "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)" = "6a7046c9d4c6c522d10b2d098f9bebe2bef227e0e74044d8c1bfcf6b476af799" -"checksum serde_derive 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)" = "1afcaae083fd1c46952a315062326bc9957f182358eb7da03b57ef1c688f7aa9" -"checksum serde_derive_internals 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bd381f6d01a6616cdba8530492d453b7761b456ba974e98768a18cad2cd76f58" +"checksum serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)" = "6eda663e865517ee783b0891a3f6eb3a253e0b0dabb46418969ee9635beadd9e" +"checksum serde_derive 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)" = "652bc323d694dc925829725ec6c890156d8e70ae5202919869cb00fe2eff3788" +"checksum serde_derive_internals 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)" = "32f1926285523b2db55df263d2aa4eb69ddcfa7a7eade6430323637866b513ab" "checksum serde_ignored 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "190e9765dcedb56be63b6e0993a006c7e3b071a016a304736e4a315dc01fb142" -"checksum serde_json 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d243424e06f9f9c39e3cd36147470fd340db785825e367625f79298a6ac6b7ac" +"checksum serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "e4586746d1974a030c48919731ecffd0ed28d0c40749d0d18d43b3a7d6c9b20e" +"checksum shared_child 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "099b38928dbe4a0a01fcd8c233183072f14a7d126a34bed05880869be66e14cc" "checksum shell-escape 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "dd5cc96481d54583947bfe88bf30c23d53f883c6cd0145368b69989d97b84ef8" "checksum siphasher 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0df90a788073e8d0235a67e50441d47db7c8ad9debd91cbf43736a2a92d36537" "checksum smallvec 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4f8266519bc1d17d0b5b16f6c21295625d562841c708f6376f49028a43e9c11e" -"checksum socket2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9e76b159741052c7deaa9fd0b5ca6b5f79cecf525ed665abfe5002086c6b2791" +"checksum socket2 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "36b4896961171cd3317c7e9603d88f379f8c6e45342212235d356496680c68fd" "checksum stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "15132e0e364248108c5e2c02e3ab539be8d6f5d52a01ca9bbf27ed657316f02b" "checksum string_cache 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "413fc7852aeeb5472f1986ef755f561ddf0c789d3d796e65f0b6fe293ecd4ef8" "checksum string_cache_codegen 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "479cde50c3539481f33906a387f2bd17c8e87cb848c35b6021d41fb81ff9b4d7" "checksum string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b1884d1bc09741d466d9b14e6d37ac89d6909cbcac41dd9ae982d4d063bbedfc" -"checksum strings 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "da75d8bf2c4d210d63dd09581a041b036001f9f6e03d9b151dbff810fb7ba26a" +"checksum strings 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "aa481ee1bc42fc3df8195f91f7cb43cf8f2b71b48bac40bf5381cfaf7e481f3c" "checksum strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694" "checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" -"checksum syn 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6ae6fb0dcc9bd85f89a1a4adc0df2fd90c90c98849d61433983dd7a9df6363f7" "checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" "checksum syntex_errors 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9e52bffe6202cfb67587784cf23e0ec5bf26d331eef4922a16d5c42e12aa1e9b" "checksum syntex_pos 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)" = "955ef4b16af4c468e4680d1497f873ff288f557d338180649e18f915af5e15ac" @@ -2656,15 +2818,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "87974a6f5c1dfb344d733055601650059a3363de2a6104819293baff662132d6" "checksum tendril 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1b72f8e2f5b73b65c315b1a70c730f24b9d7a25f39e98de8acbe2bb795caea" "checksum term 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "fa63644f74ce96fbeb9b794f66aff2a52d601cbd5e80f4b97123e3899f4570f1" -"checksum term_size 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2b6b55df3198cc93372e85dd2ed817f0e38ce8cc0f22eb32391bfad9c4bf209" "checksum termcolor 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9065bced9c3e43453aa3d56f1e98590b8455b341d2fa191a1090c0dd0b242c75" -"checksum textwrap 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df8e08afc40ae3459e4838f303e465aa50d823df8d7f83ca88108f6d3afe7edd" +"checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" +"checksum textwrap 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c0b59b6b4b44d867f1370ef1bd91bfb262bf07bf0ae65c202ea2fbc16153b693" "checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" "checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" "checksum thread_local 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1697c4b57aeeb7a536b647165a2825faddffb1d3bad386d507709bd51a90bb14" "checksum toml 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "736b60249cb25337bc196faa43ee12c705e426f3d55c214d73a4e7be06f92cb4" "checksum toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "a7540f4ffc193e0d3c94121edb19b055670d369f77d5804db11ae053a45b6e7e" -"checksum typed-arena 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5934776c3ac1bea4a9d56620d6bf2d483b20d394e49581db40f187e1118ff667" "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" "checksum unicode-normalization 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "51ccda9ef9efa3f7ef5d91e8f9b83bbe6955f9bf86aec89d5cce2c874625920f" "checksum unicode-segmentation 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a8083c594e02b8ae1654ae26f0ade5158b119bd88ad0e8227a5d8fcd72407946" @@ -2673,7 +2834,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" "checksum unreachable 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1f2ae5ddb18e1c92664717616dd9549dde73f539f01bd7b77c2edb2446bdff91" "checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" -"checksum url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "eeb819346883532a271eb626deb43c4a1bb4c4dd47c519bd78137c3e72a4fe27" +"checksum url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fa35e768d4daf1d85733418a49fb42e10d7f633e394fccab4ab7aba897053fe2" "checksum url_serde 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "74e7d099f1ee52f823d4bdd60c93c3602043c728f5db3b97bdb548467f7bddea" "checksum userenv-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d28ea36bbd9192d75bd9fa9b39f96ddb986eaee824adae5d53b6e51919b2f3" "checksum utf-8 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b6f923c601c7ac48ef1d66f7d5b5b2d9a7ba9c51333ab75a3ddf8d0309185a56" diff --git a/src/Cargo.toml b/src/Cargo.toml index f4b4189e01..a99cd5b1a6 100644 --- a/src/Cargo.toml +++ b/src/Cargo.toml @@ -5,6 +5,7 @@ members = [ "libstd", "libtest", "tools/cargotest", + "tools/clippy", "tools/compiletest", "tools/error_index_generator", "tools/linkchecker", @@ -21,15 +22,10 @@ members = [ "tools/rustfmt", # FIXME(https://github.com/rust-lang/cargo/issues/4089): move these to exclude "tools/rls/test_data/borrow_error", - "tools/rls/test_data/completion", - "tools/rls/test_data/find_all_refs", + "tools/rls/test_data/common", + "tools/rls/test_data/features", "tools/rls/test_data/find_all_refs_no_cfg_test", - "tools/rls/test_data/goto_def", - "tools/rls/test_data/highlight", - "tools/rls/test_data/hover", - "tools/rls/test_data/rename", "tools/rls/test_data/reformat", - "tools/rls/test_data/bin_lib_no_cfg_test", "tools/rls/test_data/multiple_bins", "tools/rls/test_data/bin_lib", "tools/rls/test_data/reformat_with_range", @@ -37,9 +33,8 @@ members = [ "tools/rls/test_data/infer_bin", "tools/rls/test_data/infer_custom_bin", "tools/rls/test_data/infer_lib", - "tools/rls/test_data/omit_init_build", - "tools/rls/test_data/unicødë", "tools/rls/test_data/workspace_symbol", + "tools/rls/test_data/deglob", ] # Curiously, compiletest will segfault if compiled with opt-level=3 on 64-bit diff --git a/src/binaryen/.travis.yml b/src/binaryen/.travis.yml new file mode 100644 index 0000000000..93c90c2edf --- /dev/null +++ b/src/binaryen/.travis.yml @@ -0,0 +1,165 @@ +sudo: false +dist: trusty +language: cpp + +jobs: + include: + # Build with clang and run tests on the host system (Ubuntu). + - &test-ubuntu + stage: test + compiler: clang + python: 2.7 + node_js: 7 + addons: + apt: + sources: ['ubuntu-toolchain-r-test'] + packages: ['cmake', 'g++-5'] + before_install: + - export CC="${CC_COMPILER}" + - export CXX="${CXX_COMPILER}" + - export ASAN_OPTIONS="symbolize=1" + install: + - pip install --user flake8==3.4.1 + before_script: + # Check the style of a subset of Python code until the other code is updated. + - flake8 ./scripts/ + - ./check.py --test-waterfall --only-prepare + script: + - cmake . -DCMAKE_C_FLAGS="$COMPILER_FLAGS" -DCMAKE_CXX_FLAGS="$COMPILER_FLAGS" + - make -j2 + - ./check.py --test-waterfall + env: | + CC_COMPILER="./test/wasm-install/wasm-install/bin/clang" + CXX_COMPILER="./test/wasm-install/wasm-install/bin/clang++" + + - <<: *test-ubuntu + env: | + CC_COMPILER="./test/wasm-install/wasm-install/bin/clang" + CXX_COMPILER="./test/wasm-install/wasm-install/bin/clang++" + COMPILER_FLAGS="-fsanitize=undefined -fno-sanitize-recover=all -fsanitize-blacklist=$(pwd)/ubsan.blacklist" + + - <<: *test-ubuntu + env: | + CC_COMPILER="./test/wasm-install/wasm-install/bin/clang" + CXX_COMPILER="./test/wasm-install/wasm-install/bin/clang++" + COMPILER_FLAGS="-fsanitize=address" + + - <<: *test-ubuntu + env: | + CC_COMPILER="./test/wasm-install/wasm-install/bin/clang" + CXX_COMPILER="./test/wasm-install/wasm-install/bin/clang++" + COMPILER_FLAGS="-fsanitize=thread" + + # Build with gcc 5 and run tests on the host system (Ubuntu). + - <<: *test-ubuntu + compiler: gcc + env: | + CC_COMPILER="gcc-5" + CXX_COMPILER="g++-5" + + # Build the .js outputs using emcc + - &test-emcc + stage: test + compiler: clang + python: 2.7 + node_js: 7 + language: node_js + node_js: + - node + sudo: required + services: + - docker + before_install: + - docker run -dit --name emscripten -v $(pwd):/src trzeci/emscripten:sdk-incoming-64bit bash + script: + # run binaryen.js and wasm.js tests before and after building, so we see if the bundled + # version is good too + - docker exec -it emscripten bash ./travis-emcc-tests.sh + + # Build with gcc 6.3 and run tests on Alpine Linux (inside chroot). + # Note: Alpine uses musl libc. + - &test-alpine + stage: test + sudo: true + language: minimal + compiler: gcc + env: ARCH=x86_64 + before_install: + - &download-alpine-script + "wget 'https://raw.githubusercontent.com/alpinelinux/alpine-chroot-install/v0.6.0/alpine-chroot-install' \ + && echo 'a827a4ba3d0817e7c88bae17fe34e50204983d1e alpine-chroot-install' | sha1sum -c || travis_terminate 1" + - &define-alpine-func + alpine() { /alpine/enter-chroot -u "$USER" "$@"; } + install: + - sudo sh alpine-chroot-install -a "$ARCH" -p 'build-base cmake git nodejs python2' + before_script: + - alpine ./check.py --test-waterfall --only-prepare + script: + - alpine cmake . + - alpine make -j2 + - alpine ./check.py --test-waterfall + + + # Build statically linked release binaries with gcc 6.3 on Alpine Linux + # (inside chroot). If building a tagged commit, then deploy release tarball + # to GitHub Releases. + - &build-alpine + <<: *test-alpine + stage: build + env: ARCH=x86_64 + before_install: + # XXX: This is ugly hack to skip this job (and all derived) for pull + # requests, run it only on master branch and tags (to cut down build + # time). Replace it after Travis finally implement proper support for + # conditional jobs or stages. + - if [[ "$TRAVIS_PULL_REQUEST" != "false" || ( "$TRAVIS_BRANCH" != "master" && -z "$TRAVIS_TAG" ) ]]; then + travis_terminate 0; + fi + - *download-alpine-script + - *define-alpine-func + # Don't run before_script inherited from *test-alpine. + before_script: skip + script: + - alpine cmake -DCMAKE_BUILD_TYPE=Release + -DCMAKE_VERBOSE_MAKEFILE=ON + -DCMAKE_CXX_FLAGS="-static -no-pie" + -DCMAKE_C_FLAGS="-static -no-pie" . + - alpine make -j2 + - alpine find bin/ -type f -perm -u=x -exec strip {} + + - alpine ls -lh bin/ + # Check if the built executables are really statically linked. + - if [ -n "$(find bin/ -type f -perm -u=x -exec file {} + | grep -Fvw 'statically linked')" ]; then + file bin/*; false; + fi + before_deploy: + - PKGNAME="binaryen-$TRAVIS_TAG-$ARCH-linux" + - mv bin binaryen-$TRAVIS_TAG + - tar -czf $PKGNAME.tar.gz binaryen-$TRAVIS_TAG + - sha256sum $PKGNAME.tar.gz > $PKGNAME.tar.gz.sha256 + deploy: + provider: releases + api_key: + secure: "cu6CD5BaycXdCylvcs+Fho5+OVTkh9mZwH8RTnNpXo9hAQzLJDFgcNBHeXHEHtcp4IWf/YZSMu48UKnpU9sP5iF0AS4rtuEBJk5gOKkgB8GWnuIOePFkfANAZMN+EncuUwhAdN56iOAESXqnlHYgmJjyRVCHOxiezuWTOYui4lxoIAdxvOMJc3E9yfzUq4Epm2GDszSDN7ObmRIJpVgDXD9Sze1Xv4IkbIwc0biCmduGGLp3ow2KM+RZ4tOF0c8P0ki49vOFHr6n2Vmqg0QCiVNd4JJBRBCGn6Tzip2jsTQewnUUvpYCZafLeRV//v//voNA6ZUz91yXR23GIhkfdlyuqnz3/7l335Sa749M1lpYfSRWvwg9mJEqP66mxqTrWzj1xSItr9T+p0WhSmRN/4UEJPuItYPSma6kfv+H7qhLa3ZYKECH8hHW79grYmUWtiX0vQVIgnctJGgboPNLfG/1mNtmCI241wK0S3zvL2okdZH8/PqxfllYHMBTUp9lUrop8eoLKPgHZPm6+V20dgTUgOuGTZzTWwQ7Uk/Pg8JMUgkre5y0eo6pP3z0vDW1NNFNhouJ5oGkAeK/HAznr8Q0zWWF1vGFhoyC8ok/IJ7yKxK9scJVPBDe4oox6tr1zlsxzNEYE0/mY3JjuWV0z8RgjrIAbRe8IpGTkYz5VOM=" + file: binaryen-$TRAVIS_TAG-*.tar.gz* + file_glob: true + skip_cleanup: true + on: + tags: true + + # Build binaries for other architectures using QEMU user-mode emulation. + # Note: We don't run tests for these architectures, because some fail under + # QEMU/binfmt and it takes too long time (hits time limit on Travis). + - <<: *build-alpine + env: ARCH=x86 + + - <<: *build-alpine + env: ARCH=aarch64 + + - <<: *build-alpine + env: ARCH=armhf + + - <<: *build-alpine + env: ARCH=ppc64le + +notifications: + email: false diff --git a/src/binaryen/CMakeLists.txt b/src/binaryen/CMakeLists.txt new file mode 100644 index 0000000000..fbd0bedb91 --- /dev/null +++ b/src/binaryen/CMakeLists.txt @@ -0,0 +1,312 @@ +PROJECT(binaryen C CXX) +CMAKE_MINIMUM_REQUIRED(VERSION 2.8.7) +INCLUDE(GNUInstallDirs) + +IF(NOT CMAKE_BUILD_TYPE) + MESSAGE(STATUS "No build type selected, default to Release") + SET(CMAKE_BUILD_TYPE "Release") +ENDIF() + +OPTION(BUILD_STATIC_LIB "Build as a static library" OFF) + +# Support functionality. + +FUNCTION(ADD_COMPILE_FLAG value) + MESSAGE(STATUS "Building with ${value}") + FOREACH(variable CMAKE_C_FLAGS CMAKE_CXX_FLAGS) + SET(${variable} "${${variable}} ${value}" PARENT_SCOPE) + ENDFOREACH(variable) +ENDFUNCTION() + +FUNCTION(ADD_CXX_FLAG value) + MESSAGE(STATUS "Building with ${value}") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${value}" PARENT_SCOPE) +ENDFUNCTION() + +FUNCTION(ADD_DEBUG_COMPILE_FLAG value) + IF("${CMAKE_BUILD_TYPE}" MATCHES "Debug") + MESSAGE(STATUS "Building with ${value}") + ENDIF() + FOREACH(variable CMAKE_C_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG) + SET(${variable} "${${variable}} ${value}" PARENT_SCOPE) + ENDFOREACH(variable) +ENDFUNCTION() + +FUNCTION(ADD_NONDEBUG_COMPILE_FLAG value) + IF(NOT "${CMAKE_BUILD_TYPE}" MATCHES "Debug") + MESSAGE(STATUS "Building with ${value}") + ENDIF() + FOREACH(variable CMAKE_C_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_C_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_MINSIZEREL) + SET(${variable} "${${variable}} ${value}" PARENT_SCOPE) + ENDFOREACH(variable) +ENDFUNCTION() + +FUNCTION(ADD_LINK_FLAG value) + MESSAGE(STATUS "Linking with ${value}") + FOREACH(variable CMAKE_EXE_LINKER_FLAGS) + SET(${variable} "${${variable}} ${value}" PARENT_SCOPE) + ENDFOREACH(variable) +ENDFUNCTION() + +# Compiler setup. + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/src) + +# Force output to bin/ and lib/. This is to suppress CMake multigenerator output paths and avoid bin/Debug, bin/Release/ and so on, which is CMake default. +FOREACH(SUFFIX "_DEBUG" "_RELEASE" "_RELWITHDEBINFO" "_MINSIZEREL" "") + SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY${SUFFIX} "${PROJECT_BINARY_DIR}/bin") + SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY${SUFFIX} "${PROJECT_BINARY_DIR}/lib") + SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY${SUFFIX} "${PROJECT_BINARY_DIR}/lib") +ENDFOREACH() + +IF(MSVC) + IF(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "19.0") # VS2013 and older explicitly need /arch:sse2 set, VS2015 no longer has that option, but always enabled. + ADD_COMPILE_FLAG("/arch:sse2") + ENDIF() + ADD_COMPILE_FLAG("/wd4146") # Ignore warning "warning C4146: unary minus operator applied to unsigned type, result still unsigned", this pattern is used somewhat commonly in the code. + # 4267 and 4244 are conversion/truncation warnings. We might want to fix these but they are currently pervasive. + ADD_COMPILE_FLAG("/wd4267") + ADD_COMPILE_FLAG("/wd4244") + ADD_COMPILE_FLAG("/WX-") + ADD_DEBUG_COMPILE_FLAG("/Od") + ADD_NONDEBUG_COMPILE_FLAG("/O2") + ADD_COMPILE_FLAG("/D_CRT_SECURE_NO_WARNINGS") + ADD_COMPILE_FLAG("/D_SCL_SECURE_NO_WARNINGS") + + ADD_NONDEBUG_COMPILE_FLAG("/UNDEBUG") # Keep asserts. + # Also remove /D NDEBUG to avoid MSVC warnings about conflicting defines. + if( NOT CMAKE_BUILD_TYPE MATCHES "Debug" ) + foreach (flags_var_to_scrub + CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_RELWITHDEBINFO + CMAKE_CXX_FLAGS_MINSIZEREL + CMAKE_C_FLAGS_RELEASE + CMAKE_C_FLAGS_RELWITHDEBINFO + CMAKE_C_FLAGS_MINSIZEREL) + string (REGEX REPLACE "(^| )[/-]D *NDEBUG($| )" " " + "${flags_var_to_scrub}" "${${flags_var_to_scrub}}") + endforeach() + endif() + + ADD_LINK_FLAG("/STACK:8388608") + + IF(RUN_STATIC_ANALYZER) + ADD_DEFINITIONS(/analyze) + ENDIF() +ELSE() + SET(THREADS_PREFER_PTHREAD_FLAG ON) + SET(CMAKE_THREAD_PREFER_PTHREAD ON) + FIND_PACKAGE(Threads REQUIRED) + ADD_CXX_FLAG("-std=c++11") + if (NOT EMSCRIPTEN) + # try to get the target architecture by compiling a dummy.c file and + # checking the architecture using the file command. + file(WRITE ${PROJECT_BINARY_DIR}/dummy.c "main(){}") + try_compile( + COMPILE_OK + ${PROJECT_BINARY_DIR} + ${PROJECT_BINARY_DIR}/dummy.c + OUTPUT_VARIABLE COMPILE_OUTPUT + COPY_FILE ${PROJECT_BINARY_DIR}/dummy + ) + if (COMPILE_OK) + execute_process( + COMMAND file ${PROJECT_BINARY_DIR}/dummy + RESULT_VARIABLE FILE_RESULT + OUTPUT_VARIABLE FILE_OUTPUT + ERROR_QUIET + ) + + if (FILE_RESULT EQUAL 0) + if (${FILE_OUTPUT} MATCHES "x86[-_]64") + set(TARGET_ARCH "x86-64") + elseif (${FILE_OUTPUT} MATCHES "Intel 80386") + set(TARGET_ARCH "i386") + elseif (${FILE_OUTPUT} MATCHES "ARM") + set(TARGET_ARCH "ARM") + else () + message(WARNING "Unknown target architecture!") + endif () + if(TARGET_ARCH) + MESSAGE(STATUS "Building for platform ${TARGET_ARCH}") + endif () + else () + message(WARNING "Error running file on dummy executable") + endif () + else () + message(WARNING "Error compiling dummy.c file: ${COMPILE_OUTPUT}") + endif () + + if (TARGET_ARCH STREQUAL "i386") + # wasm doesn't allow for x87 floating point math + ADD_COMPILE_FLAG("-msse2") + ADD_COMPILE_FLAG("-mfpmath=sse") + elseif(TARGET_ARCH STREQUAL "ARM") + # stub for ARM-specific instructions. GCC6 adds NEON with the below flags + ADD_COMPILE_FLAG("-march=native") + endif () + endif () + ADD_COMPILE_FLAG("-Wall") + ADD_COMPILE_FLAG("-Werror") + ADD_COMPILE_FLAG("-Wextra") + ADD_COMPILE_FLAG("-Wno-unused-parameter") + ADD_COMPILE_FLAG("-fno-omit-frame-pointer") + IF(WIN32) + ADD_COMPILE_FLAG("-D_GNU_SOURCE") + ADD_LINK_FLAG("-Wl,--stack,8388608") + ELSE() + ADD_COMPILE_FLAG("-fPIC") + ENDIF() + ADD_DEBUG_COMPILE_FLAG("-O0") + ADD_DEBUG_COMPILE_FLAG("-g3") + ADD_NONDEBUG_COMPILE_FLAG("-O2") + ADD_NONDEBUG_COMPILE_FLAG("-UNDEBUG") # Keep asserts. +ENDIF() + +# clang doesn't print colored diagnostics when invoked from Ninja +IF (UNIX AND + CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND + CMAKE_GENERATOR STREQUAL "Ninja") + ADD_COMPILE_FLAG("-fcolor-diagnostics") +ENDIF() + +# Static libraries +# Current (partial) dependency structure is as follows: +# passes -> wasm -> asmjs -> support +# TODO: It's odd that wasm should depend on asmjs, maybe we should fix that. +ADD_SUBDIRECTORY(src/ir) +ADD_SUBDIRECTORY(src/asmjs) +ADD_SUBDIRECTORY(src/cfg) +ADD_SUBDIRECTORY(src/emscripten-optimizer) +ADD_SUBDIRECTORY(src/passes) +ADD_SUBDIRECTORY(src/support) +ADD_SUBDIRECTORY(src/wasm) + +# Sources. + + +SET(binaryen_SOURCES + src/binaryen-c.cpp +) +IF(BUILD_STATIC_LIB) + ADD_LIBRARY(binaryen STATIC ${binaryen_SOURCES}) +ELSE() + ADD_LIBRARY(binaryen SHARED ${binaryen_SOURCES}) +ENDIF() +TARGET_LINK_LIBRARIES(binaryen passes wasm asmjs emscripten-optimizer ir cfg support) +INSTALL(TARGETS binaryen DESTINATION ${CMAKE_INSTALL_LIBDIR}) + +INSTALL(FILES src/binaryen-c.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +INSTALL(FILES bin/wasm.js DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}) +INSTALL(FILES bin/binaryen.js DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}) + +SET(wasm-shell_SOURCES + src/tools/wasm-shell.cpp + src/wasm-interpreter.cpp +) +ADD_EXECUTABLE(wasm-shell + ${wasm-shell_SOURCES}) +TARGET_LINK_LIBRARIES(wasm-shell wasm asmjs emscripten-optimizer passes ir cfg support) +SET_PROPERTY(TARGET wasm-shell PROPERTY CXX_STANDARD 11) +SET_PROPERTY(TARGET wasm-shell PROPERTY CXX_STANDARD_REQUIRED ON) +INSTALL(TARGETS wasm-shell DESTINATION ${CMAKE_INSTALL_BINDIR}) + +SET(wasm-opt_SOURCES + src/tools/wasm-opt.cpp + src/wasm-interpreter.cpp +) +ADD_EXECUTABLE(wasm-opt + ${wasm-opt_SOURCES}) +TARGET_LINK_LIBRARIES(wasm-opt wasm asmjs emscripten-optimizer passes ir cfg support) +SET_PROPERTY(TARGET wasm-opt PROPERTY CXX_STANDARD 11) +SET_PROPERTY(TARGET wasm-opt PROPERTY CXX_STANDARD_REQUIRED ON) +INSTALL(TARGETS wasm-opt DESTINATION ${CMAKE_INSTALL_BINDIR}) + +SET(wasm-merge_SOURCES + src/tools/wasm-merge.cpp +) +ADD_EXECUTABLE(wasm-merge + ${wasm-merge_SOURCES}) +TARGET_LINK_LIBRARIES(wasm-merge wasm asmjs emscripten-optimizer passes ir cfg support) +SET_PROPERTY(TARGET wasm-merge PROPERTY CXX_STANDARD 11) +SET_PROPERTY(TARGET wasm-merge PROPERTY CXX_STANDARD_REQUIRED ON) +INSTALL(TARGETS wasm-merge DESTINATION bin) + +SET(asm2wasm_SOURCES + src/tools/asm2wasm.cpp + src/wasm-emscripten.cpp +) +ADD_EXECUTABLE(asm2wasm + ${asm2wasm_SOURCES}) +TARGET_LINK_LIBRARIES(asm2wasm emscripten-optimizer passes wasm asmjs ir cfg support) +SET_PROPERTY(TARGET asm2wasm PROPERTY CXX_STANDARD 11) +SET_PROPERTY(TARGET asm2wasm PROPERTY CXX_STANDARD_REQUIRED ON) +INSTALL(TARGETS asm2wasm DESTINATION ${CMAKE_INSTALL_BINDIR}) + +SET(wasm2asm_SOURCES + src/tools/wasm2asm.cpp +) +ADD_EXECUTABLE(wasm2asm + ${wasm2asm_SOURCES}) +TARGET_LINK_LIBRARIES(wasm2asm passes wasm asmjs emscripten-optimizer ir cfg support) +SET_PROPERTY(TARGET wasm2asm PROPERTY CXX_STANDARD 11) +SET_PROPERTY(TARGET wasm2asm PROPERTY CXX_STANDARD_REQUIRED ON) +INSTALL(TARGETS wasm2asm DESTINATION ${CMAKE_INSTALL_BINDIR}) + +SET(s2wasm_SOURCES + src/tools/s2wasm.cpp + src/wasm-emscripten.cpp + src/wasm-linker.cpp +) +ADD_EXECUTABLE(s2wasm + ${s2wasm_SOURCES}) +TARGET_LINK_LIBRARIES(s2wasm passes wasm asmjs ir cfg support) +SET_PROPERTY(TARGET s2wasm PROPERTY CXX_STANDARD 11) +SET_PROPERTY(TARGET s2wasm PROPERTY CXX_STANDARD_REQUIRED ON) +INSTALL(TARGETS s2wasm DESTINATION ${CMAKE_INSTALL_BINDIR}) + +SET(wasm_as_SOURCES + src/tools/wasm-as.cpp +) +ADD_EXECUTABLE(wasm-as + ${wasm_as_SOURCES}) +TARGET_LINK_LIBRARIES(wasm-as wasm asmjs passes ir cfg support) +SET_PROPERTY(TARGET wasm-as PROPERTY CXX_STANDARD 11) +SET_PROPERTY(TARGET wasm-as PROPERTY CXX_STANDARD_REQUIRED ON) +INSTALL(TARGETS wasm-as DESTINATION ${CMAKE_INSTALL_BINDIR}) + +SET(wasm_dis_SOURCES + src/tools/wasm-dis.cpp +) +ADD_EXECUTABLE(wasm-dis + ${wasm_dis_SOURCES}) +TARGET_LINK_LIBRARIES(wasm-dis passes wasm asmjs ir cfg support) +SET_PROPERTY(TARGET wasm-dis PROPERTY CXX_STANDARD 11) +SET_PROPERTY(TARGET wasm-dis PROPERTY CXX_STANDARD_REQUIRED ON) +INSTALL(TARGETS wasm-dis DESTINATION ${CMAKE_INSTALL_BINDIR}) + +SET(wasm-ctor-eval_SOURCES + src/tools/wasm-ctor-eval.cpp +) +ADD_EXECUTABLE(wasm-ctor-eval + ${wasm-ctor-eval_SOURCES}) +TARGET_LINK_LIBRARIES(wasm-ctor-eval emscripten-optimizer passes wasm asmjs ir cfg support) +SET_PROPERTY(TARGET wasm-ctor-eval PROPERTY CXX_STANDARD 11) +SET_PROPERTY(TARGET wasm-ctor-eval PROPERTY CXX_STANDARD_REQUIRED ON) +INSTALL(TARGETS wasm-ctor-eval DESTINATION bin) + +IF (UNIX) # TODO: port to windows + + SET(wasm-reduce_SOURCES + src/tools/wasm-reduce.cpp + src/wasm-interpreter.cpp + ) + ADD_EXECUTABLE(wasm-reduce + ${wasm-reduce_SOURCES}) + TARGET_LINK_LIBRARIES(wasm-reduce wasm asmjs passes wasm ir cfg support) + SET_PROPERTY(TARGET wasm-reduce PROPERTY CXX_STANDARD 11) + SET_PROPERTY(TARGET wasm-reduce PROPERTY CXX_STANDARD_REQUIRED ON) + INSTALL(TARGETS wasm-reduce DESTINATION ${CMAKE_INSTALL_BINDIR}) + +ENDIF() + diff --git a/src/binaryen/Contributing.md b/src/binaryen/Contributing.md new file mode 100644 index 0000000000..1cc607fa47 --- /dev/null +++ b/src/binaryen/Contributing.md @@ -0,0 +1,8 @@ +# Contributing to WebAssembly + +Interested in participating? Please follow +[the same contributing guidelines as the design repository][]. + + [the same contributing guidelines as the design repository]: https://github.com/WebAssembly/design/blob/master/Contributing.md + +Also, please be sure to read [the README.md](README.md) for this repository. diff --git a/src/binaryen/LICENSE b/src/binaryen/LICENSE new file mode 100644 index 0000000000..8dada3edaf --- /dev/null +++ b/src/binaryen/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/src/binaryen/README.md b/src/binaryen/README.md new file mode 100644 index 0000000000..b43ae2cec9 --- /dev/null +++ b/src/binaryen/README.md @@ -0,0 +1,241 @@ +[![Build Status](https://travis-ci.org/WebAssembly/binaryen.svg?branch=master)](https://travis-ci.org/WebAssembly/binaryen) [![Windows CI](https://ci.appveyor.com/api/projects/status/nvm9tuwxnup9h5ar/branch/master?svg=true)](https://ci.appveyor.com/project/WebAssembly/binaryen/branch/master) + +# Binaryen + +Binaryen is a compiler and toolchain infrastructure library for WebAssembly, written in C++. It aims to make [compiling to WebAssembly](https://github.com/WebAssembly/binaryen/wiki/Compiling-to-WebAssembly-with-Binaryen) **easy, fast, and effective**: + + * **Easy**: Binaryen has a simple [C API](https://github.com/WebAssembly/binaryen/wiki/Compiling-to-WebAssembly-with-Binaryen#c-api-1) in a single header, and can also be [used from JavaScript](https://github.com/WebAssembly/binaryen/blob/master/docs/binaryen.js.Markdown). It accepts input in [WebAssembly-like form](https://github.com/WebAssembly/binaryen/wiki/Compiling-to-WebAssembly-with-Binaryen#what-do-i-need-to-have-in-order-to-use-binaryen-to-compile-to-webassembly) but also accepts a general [control flow graph](https://github.com/WebAssembly/binaryen/wiki/Compiling-to-WebAssembly-with-Binaryen#cfg-api) for compilers that prefer that. + * **Fast**: Binaryen's internal IR uses compact data structures and is designed for completely parallel codegen and optimization, using all available CPU cores. Binaryen's IR also compiles down to WebAssembly extremely easily and quickly because it is essentially a subset of WebAssembly. + * **Effective**: Binaryen's optimizer has [many passes](https://github.com/WebAssembly/binaryen/tree/master/src/passes) that can improve code very significantly (e.g. local coloring to coalesce local variables; dead code elimination; precomputing expressions when possible at compile time; etc.). These optimizations aim to make Binaryen powerful enough to be [used as a compiler backend by itself](https://kripken.github.io/talks/binaryen.html#/9). One specific area of focus is on WebAssembly-specific optimizations (that general-purpose compilers might not do), which you can think of as [wasm minification](https://kripken.github.io/talks/binaryen.html#/2), similar to minification for JavaScript, CSS, etc., all of which are language-specific (an example of such an optimization is block return value generation in `SimplifyLocals`). + +Compilers built using Binaryen include + + * [`asm2wasm`](https://github.com/WebAssembly/binaryen/blob/master/src/asm2wasm.h) which compiles asm.js to WebAssembly + * [`s2wasm`](https://github.com/WebAssembly/binaryen/blob/master/src/s2wasm.h) which compiles the LLVM WebAssembly's backend `.s` output format + * [`AssemblyScript`](https://github.com/AssemblyScript/assemblyscript) + * [`wasm2asm`](https://github.com/WebAssembly/binaryen/blob/master/src/wasm2asm.h) which compiles WebAssembly to asm.js + * [`mir2wasm`](https://github.com/brson/mir2wasm/) which compiles Rust MIR + +Binaryen also provides a set of **toolchain utilities** that can + + * **Parse** and **emit** WebAssembly. In particular this lets you load WebAssembly, optimize it using Binaryen, and re-emit it, thus implementing a wasm-to-wasm optimizer in a single command. + * **Interpret** WebAssembly as well as run the WebAssembly spec tests. + * Integrate with **[Emscripten](http://emscripten.org)** in order to provide a complete compiler toolchain from C and C++ to WebAssembly. + * **Polyfill** WebAssembly by running it in the interpreter compiled to JavaScript, if the browser does not yet have native support (useful for testing). + +Consult the [contributing instructions](Contributing.md) if you're interested in participating. + +## Binaryen IR + +Binaryen's internal IR is designed to be + + * **Flexible and fast** for optimization. + * **As close as possible to WebAssembly** so it is simple and fast to convert it to and from WebAssembly. + +There are a few differences between Binaryen IR and the WebAssembly language: + + * Tree structure + * Binaryen IR [is a tree](https://github.com/WebAssembly/binaryen/issues/663), i.e., it has hierarchical structure, for convenience of optimization. This differs from the WebAssembly binary format which is a stack machine. + * Consequently Binaryen's text format allows only s-expressions. WebAssembly's official text format is primarily a linear instruction list (with s-expression extensions). Binaryen can't read the linear style, but it can read a wasm text file if it contains only s-expressions. + * Types and unreachable code + * WebAssembly limits block/if/loop types to none and the concrete value types (i32, i64, f32, f64). Binaryen IR has an unreachable type, and it allows block/if/loop to take it, allowing [local transforms that don't need to know the global context](https://github.com/WebAssembly/binaryen/issues/903). + * Binaryen ignores unreachable code when reading WebAssembly binaries. That means that if you read a wasm file with unreachable code, that code will be discarded as if it were optimized out (often this is what you want anyhow, and optimized programs have no unreachable code anyway, but if you write an unoptimized file and then read it, it may look different). The reason for this behavior is that unreachable code in WebAssembly has corner cases that are tricky to handle in Binaryen IR (it can be very unstructured, and Binaryen IR is more structured than WebAssembly as noted earlier). Note that Binaryen does support unreachable code in wast text files, since as we saw Binaryen only supports s-expressions there, which are structured. + * Blocks + * Binaryen IR has only one node that contains a variable-length list of operands: the block. WebAssembly on the other hand allows lists in loops, if arms, and the top level of a function. Binaryen's IR has a single operand for all non-block nodes; this operand may of course be a block. The motivation for this property is that many passes need special code for iterating on lists, so having a single IR node with a list simplifies them. + * As in wasm, blocks and loops may have names. Branch targets in the IR are resolved by name (as opposed to nesting depth). This has 2 consequences: + * Blocks without names may not be branch targets. + * Names are required to be unique. (Reading wast files with duplicate names is supported; the names are modified when the IR is constructed). + * As an optimization, a block that is the child of a loop (or if arm, or function toplevel) and which has no branches targeting it will not be emitted when generating wasm. Instead its list of operands will be directly used in the containing node. Such a block is sometimes called an "implicit block". + +As a result, you might notice that round-trip conversions (wasm => Binaryen IR => wasm) change code a little in some corner cases. + +Notes when working with Binaryen IR: + + * As mentioned above, Binaryen IR has a tree structure. As a result, each expression should have exactly one parent - you should not "reuse" a node by having it appear more than once in the tree. The motivation for this limitation is that when we optimize we modify nodes, so if they appear more than once in the tree, a change in one place can appear in another incorrectly. + * For similar reasons, nodes should not appear in more than one functions. + +## Tools + +This repository contains code that builds the following tools in `bin/`: + + * **wasm-shell**: A shell that can load and interpret WebAssembly code. It can also run the spec test suite. + * **wasm-as**: Assembles WebAssembly in text format (currently S-Expression format) into binary format (going through Binaryen IR). + * **wasm-dis**: Un-assembles WebAssembly in binary format into text format (going through Binaryen IR). + * **wasm-opt**: Loads WebAssembly and runs Binaryen IR passes on it. + * **asm2wasm**: An asm.js-to-WebAssembly compiler, using Emscripten's asm optimizer infrastructure. This is used by Emscripten in Binaryen mode when it uses Emscripten's fastcomp asm.js backend. + * **wasm2asm**: A WebAssembly-to-asm.js compiler (still experimental). + * **s2wasm**: A compiler from the `.s` format emitted by the new WebAssembly backend being developed in LLVM. This is used by Emscripten in Binaryen mode when it integrates with the new LLVM backend. + * **wasm-merge**: Combines wasm files into a single big wasm file (without sophisticated linking). + * **wasm-ctor-eval**: A tool that can execute C++ global constructors ahead of time. Used by Emscripten. + * **wasm.js**: wasm.js contains Binaryen components compiled to JavaScript, including the interpreter, `asm2wasm`, the S-Expression parser, etc., which allow you to use Binaryen with Emscripten and execute code compiled to WASM even if the browser doesn't have native support yet. This can be useful as a (slow) polyfill. + * **binaryen.js**: A standalone JavaScript library that exposes Binaryen methods for [creating and optimizing WASM modules](https://github.com/WebAssembly/binaryen/blob/master/test/binaryen.js/hello-world.js). + +Usage instructions for each are below. + +## Building + +``` +cmake . && make +``` +Note that you can also use `ninja` as your generator: `cmake -G Ninja . && ninja` + +* A C++11 compiler is required. +* The JavaScript components can be built using `build-js.sh`, see notes inside. Normally this is not needed as builds are provided in this repo already. + +If you also want to compile C/C++ to WebAssembly (and not just asm.js to WebAssembly), you'll need Emscripten. You'll need the `incoming` branch there (which you can get via [the SDK](http://kripken.github.io/emscripten-site/docs/getting_started/downloads.html)), for more details see [the wiki](https://github.com/kripken/emscripten/wiki/WebAssembly). + +## Running + +### wasm-opt + +Run + +```` +bin/wasm-opt [.wasm or .wast file] [options] [passes, see --help] [--help] +```` + +The wasm optimizer receives WebAssembly as input, and can run transformation passes on it, as well as print it (before and/or after the transformations). For example, try + +```` +bin/wasm-opt test/passes/lower-if-else.wast --print +```` + +That will pretty-print out one of the test cases in the test suite. To run a transformation pass on it, try + +```` +bin/wasm-opt test/passes/lower-if-else.wast --print --lower-if-else +```` + +The `lower-if-else` pass lowers if-else into a block and a break. You can see the change the transformation causes by comparing the output of the two print commands. + +It's easy to add your own transformation passes to the shell, just add `.cpp` files into `src/passes`, and rebuild the shell. For example code, take a look at the [`lower-if-else` pass](https://github.com/WebAssembly/binaryen/blob/master/src/passes/LowerIfElse.cpp). + +Some more notes: + + * See `bin/wasm-opt --help` for the full list of options and passes. + * Passing `--debug` will emit some debugging info. + +### asm2wasm + +run + +``` +bin/asm2wasm [input.asm.js file] +``` + +This will print out a WebAssembly module in s-expression format to the console. + +For example, try + +``` +$ bin/asm2wasm test/hello_world.asm.js +``` + +That input file contains + +```javascript +function () { + "use asm"; + function add(x, y) { + x = x | 0; + y = y | 0; + return x + y | 0; + } + return { add: add }; +} +``` + +You should see something like this: + +![example output](https://raw.github.com/WebAssembly/wasm-emscripten/master/media/example.png) + +By default you should see pretty colors as in that image. Set `COLORS=0` in the env to disable colors if you prefer that. On Linux and Mac, you can set `COLORS=1` in the env to force colors (useful when piping to `more`, for example). For Windows, pretty colors are only available when `stdout/stderr` are not redirected/piped. + +Pass `--debug` on the command line to see debug info, about asm.js functions as they are parsed, etc. + +### C/C++ Source ⇒ asm2wasm ⇒ WebAssembly + +When using `emcc` with the `BINARYEN` option, it will use Binaryen to build to WebAssembly. This lets you compile C and C++ to WebAssembly, with emscripten using asm.js internally as a build step. Since emscripten's asm.js generation is very stable, and asm2wasm is a fairly simple process, this method of compiling C and C++ to WebAssembly is usable already. See the [emscripten wiki](https://github.com/kripken/emscripten/wiki/WebAssembly) for more details about how to use it. + +### C/C++ Source ⇒ WebAssembly LLVM backend ⇒ s2wasm ⇒ WebAssembly + +Binaryen's `s2wasm` tool can translate the `.s` output from the LLVM WebAssembly backend into WebAssembly. You can receive `.s` output from `llc`, and then run `s2wasm` on that: + +``` +llc code.ll -march=wasm32 -filetype=asm -o code.s +s2wasm code.s > code.wast +``` + +You can also use Emscripten, which will do those steps for you (as well as link to system libraries, etc.). You can use either normal Emscripten, including it's "fastcomp" fork of LLVM, or you can use "vanilla" LLVM, that is, pure upstream LLVM without Emscripten's additions. With Vanilla LLVM, you can build with + +``` +./emcc input.cpp -s BINARYEN=1 +``` + +With normal Emscripten, you will need to tell it to use the WebAssembly backend, since its default is asm.js, by setting an env var, + +``` +EMCC_WASM_BACKEND=1 ./emcc input.cpp -s BINARYEN=1 +``` + +(without the env var, the `BINARYEN` option will make it use the asm.js backend, then `asm2wasm`). + +For more details, see the [emscripten wiki](https://github.com/kripken/emscripten/wiki/WebAssembly). + +## Testing + +``` +./check.py +``` + +(or `python check.py`) will run `wasm-shell`, `wasm-opt`, `asm2wasm`, `wasm.js`, etc. on the testcases in `test/`, and verify their outputs. + +It will also run `s2wasm` through the last known good LLVM output from the [build waterfall][]. + + [build waterfall]: https://build.chromium.org/p/client.wasm.llvm/console + +The `check.py` script supports some options: + +``` +./check.py [--interpreter=/path/to/interpreter] [TEST1] [TEST2].. +``` + + * If an interpreter is provided, we run the output through it, checking for parse errors. + * If tests are provided, we run exactly those. If none are provided, we run them all. + * Some tests require `emcc` or `nodejs` in the path. They will not run if the tool cannot be found, and you'll see a warning. + * We have tests from upstream in `tests/spec` and `tests/waterfall`, in git submodules. Running `./check.py` should update those. + +## Design Principles + + * **Interned strings for names**: It's very convenient to have names on nodes, instead of just numeric indices etc. To avoid most of the performance difference between strings and numeric indices, all strings are interned, which means there is a single copy of each string in memory, string comparisons are just a pointer comparison, etc. + * **Allocate in arenas**: Based on experience with other optimizing/transformating toolchains, it's not worth the overhead to carefully track memory of individual nodes. Instead, we allocate all elements of a module in an arena, and the entire arena can be freed when the module is no longer needed. + +## FAQ + +* How does `asm2wasm` relate to the new WebAssembly backend which is being developed in upstream LLVM? + +This is separate from that. `asm2wasm` focuses on compiling asm.js to WebAssembly, as emitted by Emscripten's asm.js backend. This is useful because while in the long term Emscripten hopes to use the new WebAssembly backend, the `asm2wasm` route is a very quick and easy way to generate WebAssembly output. It will also be useful for benchmarking the new backend as it progresses. + +* How about compiling WebAssembly to asm.js (the opposite direction of `asm2wasm`)? Wouldn't that be useful for polyfilling? + +Experimentation with this is happening, in `wasm2asm`. + +This would be useful, but it is a much harder task, due to some decisions made in WebAssembly. For example, WebAssembly can have control flow nested inside expressions, which can't directly map to asm.js. It could be supported by outlining the code to another function, or to compiling it down into new basic blocks and control-flow-free instructions, but it is hard to do so in a way that is both fast to do and emits code that is fast to execute. On the other hand, compiling asm.js to WebAssembly is almost straightforward. + +We just have to do more work on `wasm2asm` and see how efficient we can make it. + +* Can `asm2wasm` compile any asm.js code? + +Almost. Some decisions made in WebAssembly preclude that, for example, there are no global variables. That means that `asm2wasm` has to map asm.js global variables onto locations in memory, but then it must know of a safe zone in memory in which to do so, and that information is not directly available in asm.js. + +`asm2wasm` and `emcc_to_wasm.js.sh` do some integration with Emscripten in order to work around these issues, like asking Emscripten to reserve same space for the globals, etc. + +* Why the weird name for the project? + +"Binaryen" is a combination of **binary** - since WebAssembly is a binary format for the web - and **Emscripten** - with which it can integrate in order to compile C and C++ all the way to WebAssembly, via asm.js. Binaryen began as Emscripten's WebAssembly processing library (`wasm-emscripten`). + +"Binaryen" is pronounced [in the same manner](http://www.makinggameofthrones.com/production-diary/2011/2/11/official-pronunciation-guide-for-game-of-thrones.html) as "[Targaryen](https://en.wikipedia.org/wiki/List_of_A_Song_of_Ice_and_Fire_characters#House_Targaryen)": *bi-NAIR-ee-in*. Or something like that? Anyhow, however Targaryen is correctly pronounced, they should rhyme. Aside from pronunciation, the Targaryen house words, "Fire and Blood", have also inspired Binaryen's: "Code and Bugs." + +* Does it compile under Windows and/or Visual Studio? + +Yes, it does. Here's a step-by-step [tutorial](https://github.com/brakmic/brakmic/blob/master/webassembly/COMPILING_WIN32.md "Compiling under Win32") on how to compile it under **Windows 10 x64** with **CMake** and **Visual Studio 2015**. Help would be appreciated on Windows and OS X as most of the core devs are on Linux. diff --git a/src/binaryen/appveyor.yml b/src/binaryen/appveyor.yml new file mode 100644 index 0000000000..7d6e629646 --- /dev/null +++ b/src/binaryen/appveyor.yml @@ -0,0 +1,35 @@ +--- + +init: + - set PATH=C:\Python27\Scripts;%PATH% # while python's bin is already in PATH, but pip.exe in Scripts\ dir isn't + - set PATH=C:\msys64\mingw64\bin;C:\msys64\usr\bin;%PATH% + +environment: + DEGREE_OF_PARALLELISM: 3 + matrix: + - GENERATOR: MSYS Makefiles + CONFIG: Release + PARALLEL_FLAG: -j + - GENERATOR: Visual Studio 14 2015 + CONFIG: Release + PARALLEL_FLAG: "/m:" + - GENERATOR: Visual Studio 14 2015 Win64 + CONFIG: Debug + PARALLEL_FLAG: "/m:" + - GENERATOR: Visual Studio 14 2015 Win64 + CONFIG: Release + PARALLEL_FLAG: "/m:" + +install: + - pip install flake8==3.4.1 + +before_build: + # Check the style of a subset of Python code until the other code is updated. + - flake8 ./scripts/ + +build_script: + - cmake . -DCMAKE_BUILD_TYPE=%CONFIG% -G "%GENERATOR%" + - cmake --build . --config %CONFIG% -- %PARALLEL_FLAG%%DEGREE_OF_PARALLELISM% + +test_script: + - ctest --output-on-failure --timeout 10 -j 5 diff --git a/src/binaryen/auto_update_tests.py b/src/binaryen/auto_update_tests.py new file mode 100755 index 0000000000..77dabbb423 --- /dev/null +++ b/src/binaryen/auto_update_tests.py @@ -0,0 +1,309 @@ +#!/usr/bin/env python + +import os, sys, subprocess, difflib + +from scripts.test.support import run_command, split_wast +from scripts.test.shared import ( + ASM2WASM, MOZJS, S2WASM, WASM_SHELL, WASM_OPT, WASM_AS, WASM_DIS, + WASM_CTOR_EVAL, WASM_MERGE, WASM_REDUCE, WASM2ASM, + BINARYEN_INSTALL_DIR, has_shell_timeout) +from scripts.test.wasm2asm import tests, spec_tests, extra_tests, assert_tests + + +print '[ processing and updating testcases... ]\n' + +for asm in sorted(os.listdir('test')): + if asm.endswith('.asm.js'): + for precise in [0, 1, 2]: + for opts in [1, 0]: + cmd = ASM2WASM + [os.path.join('test', asm), '--enable-threads'] + wasm = asm.replace('.asm.js', '.fromasm') + if not precise: + cmd += ['--trap-mode=allow', '--ignore-implicit-traps'] + wasm += '.imprecise' + elif precise == 2: + cmd += ['--trap-mode=clamp'] + wasm += '.clamp' + if not opts: + wasm += '.no-opts' + if precise: + cmd += ['-O0'] # test that -O0 does nothing + else: + cmd += ['-O'] + if 'debugInfo' in asm: + cmd += ['-g'] + if 'noffi' in asm: + cmd += ['--no-legalize-javascript-ffi'] + if precise and opts: + # test mem init importing + open('a.mem', 'wb').write(asm) + cmd += ['--mem-init=a.mem'] + if asm[0] == 'e': + cmd += ['--mem-base=1024'] + if 'i64' in asm or 'wasm-only' in asm or 'noffi' in asm: + cmd += ['--wasm-only'] + print ' '.join(cmd) + actual = run_command(cmd) + with open(os.path.join('test', wasm), 'w') as o: o.write(actual) + if 'debugInfo' in asm: + cmd += ['--source-map', os.path.join('test', wasm + '.map'), '-o', 'a.wasm'] + run_command(cmd) + +extension_arg_map = { + '.wast': [], + '.clamp.wast': ['--trap-mode=clamp'], + '.js.wast': ['--trap-mode=js'], +} +for dot_s_dir in ['dot_s', 'llvm_autogenerated']: + for s in sorted(os.listdir(os.path.join('test', dot_s_dir))): + if not s.endswith('.s'): continue + print '..', s + for ext, ext_args in extension_arg_map.iteritems(): + wasm = s.replace('.s', ext) + expected_file = os.path.join('test', dot_s_dir, wasm) + if ext != '.wast' and not os.path.exists(expected_file): + continue + + full = os.path.join('test', dot_s_dir, s) + stack_alloc = ['--allocate-stack=1024'] if dot_s_dir == 'llvm_autogenerated' else [] + cmd = S2WASM + [full, '--emscripten-glue'] + stack_alloc + ext_args + if s.startswith('start_'): + cmd.append('--start') + actual = run_command(cmd, stderr=subprocess.PIPE, expected_err='') + + with open(expected_file, 'w') as o: o.write(actual) + +for t in sorted(os.listdir(os.path.join('test', 'print'))): + if t.endswith('.wast'): + print '..', t + wasm = os.path.basename(t).replace('.wast', '') + cmd = WASM_OPT + [os.path.join('test', 'print', t), '--print'] + print ' ', ' '.join(cmd) + actual = subprocess.check_output(cmd) + print cmd, actual + with open(os.path.join('test', 'print', wasm + '.txt'), 'w') as o: o.write(actual) + cmd = WASM_OPT + [os.path.join('test', 'print', t), '--print-minified'] + print ' ', ' '.join(cmd) + actual = subprocess.check_output(cmd) + with open(os.path.join('test', 'print', wasm + '.minified.txt'), 'w') as o: o.write(actual) + +for t in sorted(os.listdir(os.path.join('test', 'passes'))): + if t.endswith(('.wast', '.wasm')): + print '..', t + binary = '.wasm' in t + passname = os.path.basename(t).replace('.wast', '').replace('.wasm', '') + opts = [('--' + p if not p.startswith('O') else '-' + p) for p in passname.split('_')] + t = os.path.join('test', 'passes', t) + actual = '' + for module, asserts in split_wast(t): + assert len(asserts) == 0 + with open('split.wast', 'w') as o: o.write(module) + cmd = WASM_OPT + opts + ['split.wast', '--print'] + actual += run_command(cmd) + with open(os.path.join('test', 'passes', passname + ('.bin' if binary else '') + '.txt'), 'w') as o: o.write(actual) + if 'emit-js-wrapper' in t: + with open('a.js') as i: + with open(t + '.js', 'w') as o: + o.write(i.read()) + if 'emit-spec-wrapper' in t: + with open('a.wat') as i: + with open(t + '.wat', 'w') as o: + o.write(i.read()) + +print '\n[ checking wasm-opt -o notation... ]\n' + +wast = os.path.join('test', 'hello_world.wast') +cmd = WASM_OPT + [wast, '-o', 'a.wast', '-S'] +run_command(cmd) +open(wast, 'w').write(open('a.wast').read()) + +print '\n[ checking binary format testcases... ]\n' + +for wast in sorted(os.listdir('test')): + if wast.endswith('.wast') and not wast in []: # blacklist some known failures + for debug_info in [0, 1]: + cmd = WASM_AS + [os.path.join('test', wast), '-o', 'a.wasm'] + if debug_info: cmd += ['-g'] + print ' '.join(cmd) + if os.path.exists('a.wasm'): os.unlink('a.wasm') + subprocess.check_call(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + assert os.path.exists('a.wasm') + + cmd = WASM_DIS + ['a.wasm', '-o', 'a.wast'] + print ' '.join(cmd) + if os.path.exists('a.wast'): os.unlink('a.wast') + subprocess.check_call(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + assert os.path.exists('a.wast') + actual = open('a.wast').read() + binary_name = wast + '.fromBinary' + if not debug_info: binary_name += '.noDebugInfo' + with open(os.path.join('test', binary_name), 'w') as o: o.write(actual) + +print '\n[ checking example testcases... ]\n' + +for t in sorted(os.listdir(os.path.join('test', 'example'))): + output_file = os.path.join('bin', 'example') + libdir = os.path.join(BINARYEN_INSTALL_DIR, 'lib') + cmd = ['-Isrc', '-g', '-lasmjs', '-lsupport', '-L' + libdir, '-pthread', '-o', output_file] + if t.endswith('.txt'): + # check if there is a trace in the file, if so, we should build it + out = subprocess.Popen([os.path.join('scripts', 'clean_c_api_trace.py'), os.path.join('test', 'example', t)], stdout=subprocess.PIPE).communicate()[0] + if len(out) == 0: + print ' (no trace in ', t, ')' + continue + print ' (will check trace in ', t, ')' + src = 'trace.cpp' + with open(src, 'w') as o: o.write(out) + expected = os.path.join('test', 'example', t + '.txt') + else: + src = os.path.join('test', 'example', t) + expected = os.path.join('test', 'example', '.'.join(t.split('.')[:-1]) + '.txt') + if not src.endswith(('.c', '.cpp')): + continue + # build the C file separately + extra = [os.environ.get('CC') or 'gcc', + src, '-c', '-o', 'example.o', + '-Isrc', '-g', '-L' + libdir, '-pthread'] + print 'build: ', ' '.join(extra) + print os.getcwd() + subprocess.check_call(extra) + # Link against the binaryen C library DSO, using rpath + cmd = ['example.o', '-lbinaryen', '-Wl,-rpath=' + os.path.abspath(libdir)] + cmd + print ' ', t, src, expected + if os.environ.get('COMPILER_FLAGS'): + for f in os.environ.get('COMPILER_FLAGS').split(' '): + cmd.append(f) + cmd = [os.environ.get('CXX') or 'g++', '-std=c++11'] + cmd + try: + print 'link: ', ' '.join(cmd) + subprocess.check_call(cmd) + print 'run...', output_file + proc = subprocess.Popen([output_file], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + actual, err = proc.communicate() + assert proc.returncode == 0, [proc.returncode, actual, err] + with open(expected, 'w') as o: o.write(actual) + finally: + os.remove(output_file) + if sys.platform == 'darwin': + # Also removes debug directory produced on Mac OS + shutil.rmtree(output_file + '.dSYM') + +print '\n[ checking wasm-opt testcases... ]\n' + +for t in os.listdir('test'): + if t.endswith('.wast') and not t.startswith('spec'): + print '..', t + t = os.path.join('test', t) + f = t + '.from-wast' + cmd = WASM_OPT + [t, '--print'] + actual = run_command(cmd) + actual = actual.replace('printing before:\n', '') + open(f, 'w').write(actual) + +print '\n[ checking wasm-dis on provided binaries... ]\n' + +for t in os.listdir('test'): + if t.endswith('.wasm') and not t.startswith('spec'): + print '..', t + t = os.path.join('test', t) + cmd = WASM_DIS + [t] + if os.path.isfile(t + '.map'): cmd += ['--source-map', t + '.map'] + actual = run_command(cmd) + + open(t + '.fromBinary', 'w').write(actual) + +print '\n[ checking wasm-merge... ]\n' + +for t in os.listdir(os.path.join('test', 'merge')): + if t.endswith(('.wast', '.wasm')): + print '..', t + t = os.path.join('test', 'merge', t) + u = t + '.toMerge' + for finalize in [0, 1]: + for opt in [0, 1]: + cmd = WASM_MERGE + [t, u, '-o', 'a.wast', '-S', '--verbose'] + if finalize: cmd += ['--finalize-memory-base=1024', '--finalize-table-base=8'] + if opt: cmd += ['-O'] + stdout = run_command(cmd) + actual = open('a.wast').read() + out = t + '.combined' + if finalize: out += '.finalized' + if opt: out += '.opt' + with open(out, 'w') as o: o.write(actual) + with open(out + '.stdout', 'w') as o: o.write(stdout) + +if MOZJS: + print '\n[ checking binaryen.js testcases... ]\n' + + for s in sorted(os.listdir(os.path.join('test', 'binaryen.js'))): + if not s.endswith('.js'): continue + print s + f = open('a.js', 'w') + f.write(open(os.path.join('bin', 'binaryen.js')).read()) + f.write(open(os.path.join('test', 'binaryen.js', s)).read()) + f.close() + cmd = [MOZJS, 'a.js'] + out = run_command(cmd, stderr=subprocess.STDOUT) + with open(os.path.join('test', 'binaryen.js', s + '.txt'), 'w') as o: o.write(out) + +print '\n[ checking wasm-ctor-eval... ]\n' + +for t in os.listdir(os.path.join('test', 'ctor-eval')): + if t.endswith(('.wast', '.wasm')): + print '..', t + t = os.path.join('test', 'ctor-eval', t) + ctors = open(t + '.ctors').read().strip() + cmd = WASM_CTOR_EVAL + [t, '-o', 'a.wast', '-S', '--ctors', ctors] + stdout = run_command(cmd) + actual = open('a.wast').read() + out = t + '.out' + with open(out, 'w') as o: o.write(actual) + +print '\n[ checking wasm2asm ]\n' + +for wasm in tests + spec_tests + extra_tests: + if not wasm.endswith('.wast'): + continue + + asm = os.path.basename(wasm).replace('.wast', '.2asm.js') + expected_file = os.path.join('test', asm) + + if not os.path.exists(expected_file): + continue + + print '..', wasm + + cmd = WASM2ASM + [os.path.join('test', wasm)] + out = run_command(cmd) + with open(expected_file, 'w') as o: o.write(out) + +for wasm in assert_tests: + print '..', wasm + + asserts = os.path.basename(wasm).replace('.wast.asserts', '.asserts.js') + traps = os.path.basename(wasm).replace('.wast.asserts', '.traps.js') + asserts_expected_file = os.path.join('test', asserts) + traps_expected_file = os.path.join('test', traps) + + cmd = WASM2ASM + [os.path.join('test', wasm), '--allow-asserts'] + out = run_command(cmd) + with open(asserts_expected_file, 'w') as o: o.write(out) + + cmd += ['--pedantic'] + out = run_command(cmd) + with open(traps_expected_file, 'w') as o: o.write(out) + +if has_shell_timeout(): + print '\n[ checking wasm-reduce ]\n' + + for t in os.listdir(os.path.join('test', 'reduce')): + if t.endswith('.wast'): + print '..', t + t = os.path.join('test', 'reduce', t) + # convert to wasm + run_command(WASM_AS + [t, '-o', 'a.wasm']) + print run_command(WASM_REDUCE + ['a.wasm', '--command=bin/wasm-opt b.wasm --fuzz-exec', '-t', 'b.wasm', '-w', 'c.wasm']) + expected = t + '.txt' + run_command(WASM_DIS + ['c.wasm', '-o', expected]) + +print '\n[ success! ]' diff --git a/src/jemalloc/config.stamp.in b/src/binaryen/bin/empty.txt similarity index 100% rename from src/jemalloc/config.stamp.in rename to src/binaryen/bin/empty.txt diff --git a/src/binaryen/build-js.sh b/src/binaryen/build-js.sh new file mode 100755 index 0000000000..7e585bf481 --- /dev/null +++ b/src/binaryen/build-js.sh @@ -0,0 +1,393 @@ +# +# This file builds the js components using emscripten. You normally don't need +# to run this, as the builds are bundled in the repo in bin/. Running this is +# useful if you are a developer and want to update those builds. +# +# Usage: build-js.sh +# Usage: EMSCRIPTEN=path/to/emscripten build-js.sh # explicit emscripten dir +# +# Emscripten's em++ and tools/webidl_binder.py will be accessed through the +# env var EMSCRIPTEN, e.g. ${EMSCRIPTEN}/em++ +# +# You can get emscripten from +# http://kripken.github.io/emscripten-site/docs/getting_started/downloads.html +# +set -e + +if [ "$1" == "-h" ] || [ "$1" == "--help" ] || [ "$1" == "-help" ]; then + echo "usage: $0 [-g]" >&2 + echo " -g produce debug build" >&2 + echo "" + echo "If EMSCRIPTEN is set in the envionment, emscripten will be loaded" + echo "from that directory. Otherwise the location of emscripten is resolved" + echo "through PATH." + exit 1 +fi + +if [ -z $EMSCRIPTEN ]; then + if (which emcc >/dev/null); then + # Found emcc in PATH -- set EMSCRIPTEN (we need this to access webidl_binder.py) + EMSCRIPTEN=$(dirname "$(which emcc)") + else + echo "$0: EMSCRIPTEN environment variable is not set and emcc was not found in PATH" >&2 + exit 1 + fi +elif [ ! -d "$EMSCRIPTEN" ]; then + echo "$0: \"$EMSCRIPTEN\" (\$EMSCRIPTEN) is not a directory" >&2 + exit 1 +fi + +EMCC_ARGS="-std=c++11 --memory-init-file 0" +EMCC_ARGS="$EMCC_ARGS -s ALLOW_MEMORY_GROWTH=1" +EMCC_ARGS="$EMCC_ARGS -s DEMANGLE_SUPPORT=1" +EMCC_ARGS="$EMCC_ARGS -s DISABLE_EXCEPTION_CATCHING=0" # Exceptions are thrown and caught when optimizing endless loops +OUT_FILE_SUFFIX= + +if [ "$1" == "-g" ]; then + EMCC_ARGS="$EMCC_ARGS -O2" # need emcc js opts to be decently fast + EMCC_ARGS="$EMCC_ARGS --llvm-opts 0 --llvm-lto 0" + EMCC_ARGS="$EMCC_ARGS -profiling" + OUT_FILE_SUFFIX=-g +else + EMCC_ARGS="$EMCC_ARGS -Oz" + EMCC_ARGS="$EMCC_ARGS --llvm-lto 1" + EMCC_ARGS="$EMCC_ARGS -s ELIMINATE_DUPLICATE_FUNCTIONS=1" + # Why these settings? + # See https://gist.github.com/rsms/e33c61a25a31c08260161a087be03169 +fi + +if [ "$1" != "-g" ]; then + EMCC_ARGS="$EMCC_ARGS --closure 1" +fi + +echo "building shared bitcode" + +"$EMSCRIPTEN/em++" \ + $EMCC_ARGS \ + src/asmjs/asm_v_wasm.cpp \ + src/asmjs/shared-constants.cpp \ + src/cfg/Relooper.cpp \ + src/emscripten-optimizer/optimizer-shared.cpp \ + src/emscripten-optimizer/parser.cpp \ + src/emscripten-optimizer/simple_ast.cpp \ + src/ir/ExpressionAnalyzer.cpp \ + src/ir/ExpressionManipulator.cpp \ + src/ir/LocalGraph.cpp \ + src/passes/pass.cpp \ + src/passes/CoalesceLocals.cpp \ + src/passes/CodeFolding.cpp \ + src/passes/CodePushing.cpp \ + src/passes/ConstHoisting.cpp \ + src/passes/DeadCodeElimination.cpp \ + src/passes/DuplicateFunctionElimination.cpp \ + src/passes/ExtractFunction.cpp \ + src/passes/Flatten.cpp \ + src/passes/I64ToI32Lowering.cpp \ + src/passes/Inlining.cpp \ + src/passes/InstrumentLocals.cpp \ + src/passes/InstrumentMemory.cpp \ + src/passes/LegalizeJSInterface.cpp \ + src/passes/LocalCSE.cpp \ + src/passes/LogExecution.cpp \ + src/passes/MemoryPacking.cpp \ + src/passes/MergeBlocks.cpp \ + src/passes/Metrics.cpp \ + src/passes/NameList.cpp \ + src/passes/OptimizeInstructions.cpp \ + src/passes/PickLoadSigns.cpp \ + src/passes/PostEmscripten.cpp \ + src/passes/Precompute.cpp \ + src/passes/Print.cpp \ + src/passes/PrintCallGraph.cpp \ + src/passes/RelooperJumpThreading.cpp \ + src/passes/RemoveImports.cpp \ + src/passes/RemoveMemory.cpp \ + src/passes/RemoveUnusedBrs.cpp \ + src/passes/RemoveUnusedModuleElements.cpp \ + src/passes/RemoveUnusedNames.cpp \ + src/passes/ReorderFunctions.cpp \ + src/passes/ReorderLocals.cpp \ + src/passes/ReReloop.cpp \ + src/passes/SafeHeap.cpp \ + src/passes/SimplifyLocals.cpp \ + src/passes/SSAify.cpp \ + src/passes/TrapMode.cpp \ + src/passes/Untee.cpp \ + src/passes/Vacuum.cpp \ + src/support/bits.cpp \ + src/support/colors.cpp \ + src/support/safe_integer.cpp \ + src/support/threads.cpp \ + src/wasm/literal.cpp \ + src/wasm/wasm-binary.cpp \ + src/wasm/wasm-s-parser.cpp \ + src/wasm/wasm-type.cpp \ + src/wasm/wasm-validator.cpp \ + src/wasm/wasm.cpp \ + src/wasm-emscripten.cpp \ + -Isrc/ \ + -o shared.bc + +echo "building wasm.js" + +"$EMSCRIPTEN/em++" \ + $EMCC_ARGS \ + src/wasm-js.cpp \ + shared.bc \ + -Isrc/ \ + -o bin/wasm${OUT_FILE_SUFFIX}.js \ + -s MODULARIZE=1 \ + -s 'EXPORT_NAME="WasmJS"' + +echo "building binaryen.js" + +function export_function { if [ -z ${EXPORTED_FUNCTIONS} ]; then EXPORTED_FUNCTIONS='"'$1'"'; else EXPORTED_FUNCTIONS=${EXPORTED_FUNCTIONS}',"'$1'"'; fi } +export_function "_BinaryenNone" +export_function "_BinaryenInt32" +export_function "_BinaryenInt64" +export_function "_BinaryenFloat32" +export_function "_BinaryenFloat64" +export_function "_BinaryenUndefined" +export_function "_BinaryenInvalidId" +export_function "_BinaryenBlockId" +export_function "_BinaryenIfId" +export_function "_BinaryenLoopId" +export_function "_BinaryenBreakId" +export_function "_BinaryenSwitchId" +export_function "_BinaryenCallId" +export_function "_BinaryenCallImportId" +export_function "_BinaryenCallIndirectId" +export_function "_BinaryenGetLocalId" +export_function "_BinaryenSetLocalId" +export_function "_BinaryenGetGlobalId" +export_function "_BinaryenSetGlobalId" +export_function "_BinaryenLoadId" +export_function "_BinaryenStoreId" +export_function "_BinaryenConstId" +export_function "_BinaryenUnaryId" +export_function "_BinaryenBinaryId" +export_function "_BinaryenSelectId" +export_function "_BinaryenDropId" +export_function "_BinaryenReturnId" +export_function "_BinaryenHostId" +export_function "_BinaryenNopId" +export_function "_BinaryenUnreachableId" +export_function "_BinaryenAtomicCmpxchgId" +export_function "_BinaryenAtomicRMWId" +export_function "_BinaryenAtomicWaitId" +export_function "_BinaryenAtomicWakeId" +export_function "_BinaryenModuleCreate" +export_function "_BinaryenModuleDispose" +export_function "_BinaryenAddFunctionType" +export_function "_BinaryenGetFunctionTypeBySignature" +export_function "_BinaryenLiteralInt32" +export_function "_BinaryenLiteralInt64" +export_function "_BinaryenLiteralFloat32" +export_function "_BinaryenLiteralFloat64" +export_function "_BinaryenLiteralFloat32Bits" +export_function "_BinaryenLiteralFloat64Bits" +export_function "_BinaryenClzInt32" +export_function "_BinaryenCtzInt32" +export_function "_BinaryenPopcntInt32" +export_function "_BinaryenNegFloat32" +export_function "_BinaryenAbsFloat32" +export_function "_BinaryenCeilFloat32" +export_function "_BinaryenFloorFloat32" +export_function "_BinaryenTruncFloat32" +export_function "_BinaryenNearestFloat32" +export_function "_BinaryenSqrtFloat32" +export_function "_BinaryenEqZInt32" +export_function "_BinaryenClzInt64" +export_function "_BinaryenCtzInt64" +export_function "_BinaryenPopcntInt64" +export_function "_BinaryenNegFloat64" +export_function "_BinaryenAbsFloat64" +export_function "_BinaryenCeilFloat64" +export_function "_BinaryenFloorFloat64" +export_function "_BinaryenTruncFloat64" +export_function "_BinaryenNearestFloat64" +export_function "_BinaryenSqrtFloat64" +export_function "_BinaryenEqZInt64" +export_function "_BinaryenExtendSInt32" +export_function "_BinaryenExtendUInt32" +export_function "_BinaryenWrapInt64" +export_function "_BinaryenTruncSFloat32ToInt32" +export_function "_BinaryenTruncSFloat32ToInt64" +export_function "_BinaryenTruncUFloat32ToInt32" +export_function "_BinaryenTruncUFloat32ToInt64" +export_function "_BinaryenTruncSFloat64ToInt32" +export_function "_BinaryenTruncSFloat64ToInt64" +export_function "_BinaryenTruncUFloat64ToInt32" +export_function "_BinaryenTruncUFloat64ToInt64" +export_function "_BinaryenReinterpretFloat32" +export_function "_BinaryenReinterpretFloat64" +export_function "_BinaryenConvertSInt32ToFloat32" +export_function "_BinaryenConvertSInt32ToFloat64" +export_function "_BinaryenConvertUInt32ToFloat32" +export_function "_BinaryenConvertUInt32ToFloat64" +export_function "_BinaryenConvertSInt64ToFloat32" +export_function "_BinaryenConvertSInt64ToFloat64" +export_function "_BinaryenConvertUInt64ToFloat32" +export_function "_BinaryenConvertUInt64ToFloat64" +export_function "_BinaryenPromoteFloat32" +export_function "_BinaryenDemoteFloat64" +export_function "_BinaryenReinterpretInt32" +export_function "_BinaryenReinterpretInt64" +export_function "_BinaryenAddInt32" +export_function "_BinaryenSubInt32" +export_function "_BinaryenMulInt32" +export_function "_BinaryenDivSInt32" +export_function "_BinaryenDivUInt32" +export_function "_BinaryenRemSInt32" +export_function "_BinaryenRemUInt32" +export_function "_BinaryenAndInt32" +export_function "_BinaryenOrInt32" +export_function "_BinaryenXorInt32" +export_function "_BinaryenShlInt32" +export_function "_BinaryenShrUInt32" +export_function "_BinaryenShrSInt32" +export_function "_BinaryenRotLInt32" +export_function "_BinaryenRotRInt32" +export_function "_BinaryenEqInt32" +export_function "_BinaryenNeInt32" +export_function "_BinaryenLtSInt32" +export_function "_BinaryenLtUInt32" +export_function "_BinaryenLeSInt32" +export_function "_BinaryenLeUInt32" +export_function "_BinaryenGtSInt32" +export_function "_BinaryenGtUInt32" +export_function "_BinaryenGeSInt32" +export_function "_BinaryenGeUInt32" +export_function "_BinaryenAddInt64" +export_function "_BinaryenSubInt64" +export_function "_BinaryenMulInt64" +export_function "_BinaryenDivSInt64" +export_function "_BinaryenDivUInt64" +export_function "_BinaryenRemSInt64" +export_function "_BinaryenRemUInt64" +export_function "_BinaryenAndInt64" +export_function "_BinaryenOrInt64" +export_function "_BinaryenXorInt64" +export_function "_BinaryenShlInt64" +export_function "_BinaryenShrUInt64" +export_function "_BinaryenShrSInt64" +export_function "_BinaryenRotLInt64" +export_function "_BinaryenRotRInt64" +export_function "_BinaryenEqInt64" +export_function "_BinaryenNeInt64" +export_function "_BinaryenLtSInt64" +export_function "_BinaryenLtUInt64" +export_function "_BinaryenLeSInt64" +export_function "_BinaryenLeUInt64" +export_function "_BinaryenGtSInt64" +export_function "_BinaryenGtUInt64" +export_function "_BinaryenGeSInt64" +export_function "_BinaryenGeUInt64" +export_function "_BinaryenAddFloat32" +export_function "_BinaryenSubFloat32" +export_function "_BinaryenMulFloat32" +export_function "_BinaryenDivFloat32" +export_function "_BinaryenCopySignFloat32" +export_function "_BinaryenMinFloat32" +export_function "_BinaryenMaxFloat32" +export_function "_BinaryenEqFloat32" +export_function "_BinaryenNeFloat32" +export_function "_BinaryenLtFloat32" +export_function "_BinaryenLeFloat32" +export_function "_BinaryenGtFloat32" +export_function "_BinaryenGeFloat32" +export_function "_BinaryenAddFloat64" +export_function "_BinaryenSubFloat64" +export_function "_BinaryenMulFloat64" +export_function "_BinaryenDivFloat64" +export_function "_BinaryenCopySignFloat64" +export_function "_BinaryenMinFloat64" +export_function "_BinaryenMaxFloat64" +export_function "_BinaryenEqFloat64" +export_function "_BinaryenNeFloat64" +export_function "_BinaryenLtFloat64" +export_function "_BinaryenLeFloat64" +export_function "_BinaryenGtFloat64" +export_function "_BinaryenGeFloat64" +export_function "_BinaryenPageSize" +export_function "_BinaryenCurrentMemory" +export_function "_BinaryenGrowMemory" +export_function "_BinaryenHasFeature" +export_function "_BinaryenAtomicRMWAdd" +export_function "_BinaryenAtomicRMWSub" +export_function "_BinaryenAtomicRMWAnd" +export_function "_BinaryenAtomicRMWOr" +export_function "_BinaryenAtomicRMWXor" +export_function "_BinaryenAtomicRMWXchg" +export_function "_BinaryenBlock" +export_function "_BinaryenIf" +export_function "_BinaryenLoop" +export_function "_BinaryenBreak" +export_function "_BinaryenSwitch" +export_function "_BinaryenCall" +export_function "_BinaryenCallImport" +export_function "_BinaryenCallIndirect" +export_function "_BinaryenGetLocal" +export_function "_BinaryenSetLocal" +export_function "_BinaryenTeeLocal" +export_function "_BinaryenGetGlobal" +export_function "_BinaryenSetGlobal" +export_function "_BinaryenLoad" +export_function "_BinaryenStore" +export_function "_BinaryenConst" +export_function "_BinaryenUnary" +export_function "_BinaryenBinary" +export_function "_BinaryenSelect" +export_function "_BinaryenDrop" +export_function "_BinaryenReturn" +export_function "_BinaryenHost" +export_function "_BinaryenNop" +export_function "_BinaryenUnreachable" +export_function "_BinaryenAtomicRMW" +export_function "_BinaryenAtomicCmpxchg" +export_function "_BinaryenAtomicWait" +export_function "_BinaryenAtomicWake" +export_function "_BinaryenExpressionGetId" +export_function "_BinaryenExpressionGetType" +export_function "_BinaryenExpressionPrint" +export_function "_BinaryenConstGetValueI32" +export_function "_BinaryenConstGetValueI64Low" +export_function "_BinaryenConstGetValueI64High" +export_function "_BinaryenConstGetValueF32" +export_function "_BinaryenConstGetValueF64" +export_function "_BinaryenAddFunction" +export_function "_BinaryenAddGlobal" +export_function "_BinaryenAddImport" +export_function "_BinaryenRemoveImport" +export_function "_BinaryenAddExport" +export_function "_BinaryenRemoveExport" +export_function "_BinaryenSetFunctionTable" +export_function "_BinaryenSetMemory" +export_function "_BinaryenSetStart" +export_function "_BinaryenModuleParse" +export_function "_BinaryenModulePrint" +export_function "_BinaryenModulePrintAsmjs" +export_function "_BinaryenModuleValidate" +export_function "_BinaryenModuleOptimize" +export_function "_BinaryenModuleRunPasses" +export_function "_BinaryenModuleAutoDrop" +export_function "_BinaryenModuleWrite" +export_function "_BinaryenModuleRead" +export_function "_BinaryenModuleInterpret" +export_function "_RelooperCreate" +export_function "_RelooperAddBlock" +export_function "_RelooperAddBranch" +export_function "_RelooperAddBlockWithSwitch" +export_function "_RelooperAddBranchForSwitch" +export_function "_RelooperRenderAndDispose" +export_function "_BinaryenSetAPITracing" + +"$EMSCRIPTEN/em++" \ + $EMCC_ARGS \ + src/binaryen-c.cpp \ + shared.bc \ + -Isrc/ \ + -s EXPORTED_FUNCTIONS=[${EXPORTED_FUNCTIONS}] \ + -o bin/binaryen${OUT_FILE_SUFFIX}.js \ + --pre-js src/js/binaryen.js-pre.js \ + --post-js src/js/binaryen.js-post.js diff --git a/src/binaryen/check.py b/src/binaryen/check.py new file mode 100755 index 0000000000..b7c7cf3edd --- /dev/null +++ b/src/binaryen/check.py @@ -0,0 +1,596 @@ +#!/usr/bin/env python2 + +# Copyright 2015 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import json +import os +import shutil +import subprocess +import sys + +from scripts.test.support import run_command, split_wast +from scripts.test.shared import ( + BIN_DIR, EMCC, MOZJS, NATIVECC, NATIVEXX, NODEJS, S2WASM_EXE, + WASM_AS, WASM_CTOR_EVAL, WASM_OPT, WASM_SHELL, WASM_MERGE, WASM_SHELL_EXE, + WASM_DIS, WASM_REDUCE, binary_format_check, delete_from_orbit, fail, fail_with_error, + fail_if_not_identical, fail_if_not_contained, has_vanilla_emcc, + has_vanilla_llvm, minify_check, num_failures, options, tests, + requested, warnings, has_shell_timeout +) + +import scripts.test.asm2wasm as asm2wasm +import scripts.test.s2wasm as s2wasm +import scripts.test.wasm2asm as wasm2asm + +if options.interpreter: + print '[ using wasm interpreter at "%s" ]' % options.interpreter + assert os.path.exists(options.interpreter), 'interpreter not found' + +# tests + +def run_help_tests(): + print '[ checking --help is useful... ]\n' + + not_executable_suffix = ['.txt', '.js', '.ilk', '.pdb', '.dll'] + executables = sorted(filter(lambda x: not any(x.endswith(s) for s in + not_executable_suffix) and os.path.isfile(x), + os.listdir(options.binaryen_bin))) + for e in executables: + print '.. %s --help' % e + out, err = subprocess.Popen([os.path.join(options.binaryen_bin, e), '--help'], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE).communicate() + assert len(out) == 0, 'Expected no stdout, got:\n%s' % out + assert e.replace('.exe', '') in err, 'Expected help to contain program name, got:\n%s' % err + assert len(err.split('\n')) > 8, 'Expected some help, got:\n%s' % err + +def run_wasm_opt_tests(): + print '\n[ checking wasm-opt -o notation... ]\n' + + wast = os.path.join(options.binaryen_test, 'hello_world.wast') + delete_from_orbit('a.wast') + cmd = WASM_OPT + [wast, '-o', 'a.wast', '-S'] + run_command(cmd) + fail_if_not_identical(open('a.wast').read(), open(wast).read()) + + print '\n[ checking wasm-opt binary reading/writing... ]\n' + + shutil.copyfile(os.path.join(options.binaryen_test, 'hello_world.wast'), 'a.wast') + delete_from_orbit('a.wasm') + delete_from_orbit('b.wast') + run_command(WASM_OPT + ['a.wast', '-o', 'a.wasm']) + assert open('a.wasm', 'rb').read()[0] == '\0', 'we emit binary by default' + run_command(WASM_OPT + ['a.wasm', '-o', 'b.wast', '-S']) + assert open('b.wast', 'rb').read()[0] != '\0', 'we emit text with -S' + + print '\n[ checking wasm-opt passes... ]\n' + + for t in sorted(os.listdir(os.path.join(options.binaryen_test, 'passes'))): + if t.endswith(('.wast', '.wasm')): + print '..', t + binary = '.wasm' in t + passname = os.path.basename(t).replace('.wast', '').replace('.wasm', '') + opts = [('--' + p if not p.startswith('O') else '-' + p) for p in passname.split('_')] + t = os.path.join(options.binaryen_test, 'passes', t) + actual = '' + for module, asserts in split_wast(t): + assert len(asserts) == 0 + with open('split.wast', 'w') as o: o.write(module) + cmd = WASM_OPT + opts + ['split.wast', '--print'] + curr = run_command(cmd) + actual += curr + # also check debug mode output is valid + debugged = run_command(cmd + ['--debug'], stderr=subprocess.PIPE) + fail_if_not_contained(actual, debugged) + # also check pass-debug mode + old_pass_debug = os.environ.get('BINARYEN_PASS_DEBUG') + try: + os.environ['BINARYEN_PASS_DEBUG'] = '1' + pass_debug = run_command(cmd) + fail_if_not_identical(curr, pass_debug) + finally: + if old_pass_debug is not None: + os.environ['BINARYEN_PASS_DEBUG'] = old_pass_debug + else: + if 'BINARYEN_PASS_DEBUG' in os.environ: + del os.environ['BINARYEN_PASS_DEBUG'] + + fail_if_not_identical(actual, open(os.path.join('test', 'passes', passname + ('.bin' if binary else '') + '.txt'), 'rb').read()) + + if 'emit-js-wrapper' in t: + with open('a.js') as actual: + with open(t + '.js') as expected: + fail_if_not_identical(actual.read(), expected.read()) + if 'emit-spec-wrapper' in t: + with open('a.wat') as actual: + with open(t + '.wat') as expected: + fail_if_not_identical(actual.read(), expected.read()) + + print '\n[ checking wasm-opt parsing & printing... ]\n' + + for t in sorted(os.listdir(os.path.join(options.binaryen_test, 'print'))): + if t.endswith('.wast'): + print '..', t + wasm = os.path.basename(t).replace('.wast', '') + cmd = WASM_OPT + [os.path.join(options.binaryen_test, 'print', t), '--print'] + print ' ', ' '.join(cmd) + actual, err = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() + fail_if_not_identical(actual, open(os.path.join(options.binaryen_test, 'print', wasm + '.txt')).read()) + cmd = WASM_OPT + [os.path.join(options.binaryen_test, 'print', t), '--print-minified'] + print ' ', ' '.join(cmd) + actual, err = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() + fail_if_not_identical(actual.strip(), open(os.path.join(options.binaryen_test, 'print', wasm + '.minified.txt')).read().strip()) + + print '\n[ checking wasm-opt testcases... ]\n' + + for t in tests: + if t.endswith('.wast') and not t.startswith('spec'): + print '..', t + t = os.path.join(options.binaryen_test, t) + f = t + '.from-wast' + cmd = WASM_OPT + [t, '--print'] + actual = run_command(cmd) + actual = actual.replace('printing before:\n', '') + + expected = open(f, 'rb').read() + + if actual != expected: + fail(actual, expected) + + binary_format_check(t, wasm_as_args=['-g']) # test with debuginfo + binary_format_check(t, wasm_as_args=[], binary_suffix='.fromBinary.noDebugInfo') # test without debuginfo + + minify_check(t) + +def run_wasm_dis_tests(): + print '\n[ checking wasm-dis on provided binaries... ]\n' + + for t in tests: + if t.endswith('.wasm') and not t.startswith('spec'): + print '..', t + t = os.path.join(options.binaryen_test, t) + cmd = WASM_DIS + [t] + if os.path.isfile(t + '.map'): cmd += ['--source-map', t + '.map'] + + actual = run_command(cmd) + + with open(t + '.fromBinary') as f: + expected = f.read() + if actual != expected: + fail(actual, expected) + +def run_wasm_merge_tests(): + print '\n[ checking wasm-merge... ]\n' + + for t in os.listdir(os.path.join('test', 'merge')): + if t.endswith(('.wast', '.wasm')): + print '..', t + t = os.path.join('test', 'merge', t) + u = t + '.toMerge' + for finalize in [0, 1]: + for opt in [0, 1]: + cmd = WASM_MERGE + [t, u, '-o', 'a.wast', '-S', '--verbose'] + if finalize: cmd += ['--finalize-memory-base=1024', '--finalize-table-base=8'] + if opt: cmd += ['-O'] + stdout = run_command(cmd) + actual = open('a.wast').read() + out = t + '.combined' + if finalize: out += '.finalized' + if opt: out += '.opt' + with open(out) as f: + fail_if_not_identical(f.read(), actual) + with open(out + '.stdout') as f: + fail_if_not_identical(f.read(), stdout) + +def run_ctor_eval_tests(): + print '\n[ checking wasm-ctor-eval... ]\n' + + for t in os.listdir(os.path.join('test', 'ctor-eval')): + if t.endswith(('.wast', '.wasm')): + print '..', t + t = os.path.join('test', 'ctor-eval', t) + ctors = open(t + '.ctors').read().strip() + cmd = WASM_CTOR_EVAL + [t, '-o', 'a.wast', '-S', '--ctors', ctors] + stdout = run_command(cmd) + actual = open('a.wast').read() + out = t + '.out' + with open(out) as f: + fail_if_not_identical(f.read(), actual) + +def run_wasm_reduce_tests(): + print '\n[ checking wasm-reduce ]\n' + + for t in os.listdir(os.path.join('test', 'reduce')): + if t.endswith('.wast'): + print '..', t + t = os.path.join('test', 'reduce', t) + # convert to wasm + run_command(WASM_AS + [t, '-o', 'a.wasm']) + print run_command(WASM_REDUCE + ['a.wasm', '--command=%s b.wasm --fuzz-exec' % WASM_OPT[0], '-t', 'b.wasm', '-w', 'c.wasm']) + expected = t + '.txt' + run_command(WASM_DIS + ['c.wasm', '-o', 'a.wast']) + with open('a.wast') as seen: + with open(expected) as correct: + fail_if_not_identical(seen.read(), correct.read()) + +def run_spec_tests(): + print '\n[ checking wasm-shell spec testcases... ]\n' + + if len(requested) == 0: + BLACKLIST = ['memory.wast', 'binary.wast'] # FIXME we support old and new memory formats, for now, until 0xc, and so can't pass this old-style test. + # FIXME to update the spec to 0xd, we need to implement (register "name") for import.wast + spec_tests = [os.path.join('spec', t) for t in sorted(os.listdir(os.path.join(options.binaryen_test, 'spec'))) if t not in BLACKLIST] + else: + spec_tests = requested[:] + + for t in spec_tests: + if t.startswith('spec') and t.endswith('.wast'): + print '..', t + wast = os.path.join(options.binaryen_test, t) + + # skip checks for some tests + if os.path.basename(wast) in ['linking.wast', 'nop.wast', 'stack.wast', 'typecheck.wast', 'unwind.wast']: # FIXME + continue + + def run_spec_test(wast): + cmd = WASM_SHELL + [wast] + # we must skip the stack machine portions of spec tests or apply other extra args + extra = { + } + cmd = cmd + (extra.get(os.path.basename(wast)) or []) + return run_command(cmd, stderr=subprocess.PIPE) + + def run_opt_test(wast): + # check optimization validation + cmd = WASM_OPT + [wast, '-O'] + run_command(cmd) + + def check_expected(actual, expected): + if expected and os.path.exists(expected): + expected = open(expected).read() + # fix it up, our pretty (i32.const 83) must become compared to a homely 83 : i32 + def fix(x): + x = x.strip() + if not x: return x + v, t = x.split(' : ') + if v.endswith('.'): v = v[:-1] # remove trailing '.' + return '(' + t + '.const ' + v + ')' + expected = '\n'.join(map(fix, expected.split('\n'))) + print ' (using expected output)' + actual = actual.strip() + expected = expected.strip() + if actual != expected: + fail(actual, expected) + + expected = os.path.join(options.binaryen_test, 'spec', 'expected-output', os.path.basename(wast) + '.log') + + # some spec tests should fail (actual process failure, not just assert_invalid) + try: + actual = run_spec_test(wast) + except Exception, e: + if ('wasm-validator error' in str(e) or 'parse exception' in str(e)) and '.fail.' in t: + print '<< test failed as expected >>' + continue # don't try all the binary format stuff TODO + else: + fail_with_error(str(e)) + + check_expected(actual, expected) + + # skip binary checks for tests that reuse previous modules by name, as that's a wast-only feature + if os.path.basename(wast) in ['exports.wast']: # FIXME + continue + + # we must ignore some binary format splits + splits_to_skip = { + 'func.wast': [2], + 'return.wast': [2] + } + + # check binary format. here we can verify execution of the final result, no need for an output verification + split_num = 0 + if os.path.basename(wast) not in []: # avoid some tests with things still being sorted out in the spec + actual = '' + for module, asserts in split_wast(wast): + skip = splits_to_skip.get(os.path.basename(wast)) or [] + if split_num in skip: + print ' skipping split module', split_num - 1 + split_num += 1 + continue + print ' testing split module', split_num + split_num += 1 + with open('split.wast', 'w') as o: o.write(module + '\n' + '\n'.join(asserts)) + run_spec_test('split.wast') # before binary stuff - just check it's still ok split out + run_opt_test('split.wast') # also that our optimizer doesn't break on it + result_wast = binary_format_check('split.wast', verify_final_result=False) + # add the asserts, and verify that the test still passes + open(result_wast, 'a').write('\n' + '\n'.join(asserts)) + actual += run_spec_test(result_wast) + # compare all the outputs to the expected output + check_expected(actual, os.path.join(options.binaryen_test, 'spec', 'expected-output', os.path.basename(wast) + '.log')) + +def run_binaryen_js_tests(): + if not MOZJS and not NODEJS: + return + + print '\n[ checking binaryen.js testcases... ]\n' + + for s in sorted(os.listdir(os.path.join(options.binaryen_test, 'binaryen.js'))): + if not s.endswith('.js'): continue + print s + f = open('a.js', 'w') + f.write(open(os.path.join(options.binaryen_bin, 'binaryen.js')).read()) + # node test support + f.write('\nif (typeof require === "function") var Binaryen = module.exports;\n') + test_path = os.path.join(options.binaryen_test, 'binaryen.js', s) + test = open(test_path).read() + need_wasm = 'WebAssembly.' in test # some tests use wasm support in the VM + if MOZJS: + cmd = [MOZJS] + elif NODEJS and not need_wasm: # TODO: check if node is new and has wasm support + cmd = [NODEJS] + else: + continue # we can't run it + cmd += ['a.js'] + f.write(test) + f.close() + out = run_command(cmd, stderr=subprocess.STDOUT) + expected = open(os.path.join(options.binaryen_test, 'binaryen.js', s + '.txt')).read() + if expected not in out: + fail(out, expected) + +def run_validator_tests(): + print '\n[ running validation tests... ]\n' + # Ensure the tests validate by default + cmd = WASM_AS + [os.path.join(options.binaryen_test, 'validator', 'invalid_export.wast')] + run_command(cmd) + cmd = WASM_AS + [os.path.join(options.binaryen_test, 'validator', 'invalid_import.wast')] + run_command(cmd) + cmd = WASM_AS + ['--validate=web', os.path.join(options.binaryen_test, 'validator', 'invalid_export.wast')] + run_command(cmd, expected_status=1) + cmd = WASM_AS + ['--validate=web', os.path.join(options.binaryen_test, 'validator', 'invalid_import.wast')] + run_command(cmd, expected_status=1) + cmd = WASM_AS + ['--validate=none', os.path.join(options.binaryen_test, 'validator', 'invalid_return.wast')] + run_command(cmd) + +def run_torture_tests(): + print '\n[ checking torture testcases... ]\n' + + # torture tests are parallel anyhow, don't create multiple threads in each child + old_cores = os.environ.get('BINARYEN_CORES') + try: + os.environ['BINARYEN_CORES'] = '1' + + unexpected_result_count = 0 + + import test.waterfall.src.link_assembly_files as link_assembly_files + s2wasm_torture_out = os.path.abspath(os.path.join(options.binaryen_test, 's2wasm-torture-out')) + if os.path.isdir(s2wasm_torture_out): + shutil.rmtree(s2wasm_torture_out) + os.mkdir(s2wasm_torture_out) + unexpected_result_count += link_assembly_files.run( + linker=os.path.abspath(S2WASM_EXE), + files=os.path.abspath(os.path.join(options.binaryen_test, 'torture-s', '*.s')), + fails=os.path.abspath(os.path.join(options.binaryen_test, 's2wasm_known_gcc_test_failures.txt')), + out=s2wasm_torture_out) + assert os.path.isdir(s2wasm_torture_out), 'Expected output directory %s' % s2wasm_torture_out + + import test.waterfall.src.execute_files as execute_files + unexpected_result_count += execute_files.run( + runner=os.path.abspath(WASM_SHELL_EXE), + files=os.path.abspath(os.path.join(s2wasm_torture_out, '*.wast')), + fails=os.path.abspath(os.path.join(options.binaryen_test, 's2wasm_known_binaryen_shell_test_failures.txt')), + out='', + wasmjs='') + + shutil.rmtree(s2wasm_torture_out) + if unexpected_result_count: + fail('%s failures' % unexpected_result_count, '0 failures') + + finally: + if old_cores: + os.environ['BINARYEN_CORES'] = old_cores + else: + del os.environ['BINARYEN_CORES'] + +def run_vanilla_tests(): + print '\n[ checking emcc WASM_BACKEND testcases...]\n' + + try: + if has_vanilla_llvm: + os.environ['LLVM'] = BIN_DIR # use the vanilla LLVM + else: + # if we did not set vanilla llvm, then we must set this env var to make emcc use the wasm backend. + # (if we are using vanilla llvm, things should just work) + print '(not using vanilla llvm, so setting env var to tell emcc to use wasm backend)' + os.environ['EMCC_WASM_BACKEND'] = '1' + VANILLA_EMCC = os.path.join(options.binaryen_test, 'emscripten', 'emcc') + # run emcc to make sure it sets itself up properly, if it was never run before + command = [VANILLA_EMCC, '-v'] + print '____' + ' '.join(command) + subprocess.check_call(command) + + for c in sorted(os.listdir(os.path.join(options.binaryen_test, 'wasm_backend'))): + if not c.endswith('cpp'): continue + print '..', c + base = c.replace('.cpp', '').replace('.c', '') + expected = open(os.path.join(options.binaryen_test, 'wasm_backend', base + '.txt')).read() + for opts in [[], ['-O1'], ['-O2']]: + only = [] if opts != ['-O1'] or '_only' not in base else ['-s', 'ONLY_MY_CODE=1'] # only my code is a hack we used early in wasm backend dev, which somehow worked, but only with -O1 + command = [VANILLA_EMCC, '-o', 'a.wasm.js', os.path.join(options.binaryen_test, 'wasm_backend', c)] + opts + only + print '....' + ' '.join(command) + if os.path.exists('a.wasm.js'): os.unlink('a.wasm.js') + subprocess.check_call(command) + if NODEJS: + print ' (check in node)' + cmd = [NODEJS, 'a.wasm.js'] + out = run_command(cmd) + if out.strip() != expected.strip(): + fail(out, expected) + finally: + if has_vanilla_llvm: + del os.environ['LLVM'] + else: + del os.environ['EMCC_WASM_BACKEND'] + +def run_gcc_torture_tests(): + print '\n[ checking native gcc testcases...]\n' + if not NATIVECC or not NATIVEXX: + fail_with_error('Native compiler (e.g. gcc/g++) was not found in PATH!') + else: + for t in sorted(os.listdir(os.path.join(options.binaryen_test, 'example'))): + output_file = os.path.join(options.binaryen_bin, 'example') + cmd = ['-I' + os.path.join(options.binaryen_root, 'src'), '-g', '-lasmjs', '-lsupport', '-L' + os.path.join(options.binaryen_bin, '..', 'lib'), '-pthread', '-o', output_file] + if t.endswith('.txt'): + # check if there is a trace in the file, if so, we should build it + out = subprocess.Popen([os.path.join('scripts', 'clean_c_api_trace.py'), os.path.join(options.binaryen_test, 'example', t)], stdout=subprocess.PIPE).communicate()[0] + if len(out) == 0: + print ' (no trace in ', t, ')' + continue + print ' (will check trace in ', t, ')' + src = 'trace.cpp' + with open(src, 'w') as o: o.write(out) + expected = os.path.join(options.binaryen_test, 'example', t + '.txt') + else: + src = os.path.join(options.binaryen_test, 'example', t) + expected = os.path.join(options.binaryen_test, 'example', '.'.join(t.split('.')[:-1]) + '.txt') + if src.endswith(('.c', '.cpp')): + # build the C file separately + extra = [NATIVECC, src, '-c', '-o', 'example.o', + '-I' + os.path.join(options.binaryen_root, 'src'), '-g', '-L' + os.path.join(options.binaryen_bin, '..', 'lib'), '-pthread'] + print 'build: ', ' '.join(extra) + subprocess.check_call(extra) + # Link against the binaryen C library DSO, using an executable-relative rpath + cmd = ['example.o', '-lbinaryen'] + cmd + ['-Wl,-rpath=$ORIGIN/../lib'] + else: + continue + print ' ', t, src, expected + if os.environ.get('COMPILER_FLAGS'): + for f in os.environ.get('COMPILER_FLAGS').split(' '): + cmd.append(f) + cmd = [NATIVEXX, '-std=c++11'] + cmd + try: + print 'link: ', ' '.join(cmd) + subprocess.check_call(cmd) + print 'run...', output_file + proc = subprocess.Popen([output_file], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + actual, err = proc.communicate() + assert proc.returncode == 0, [proc.returncode, actual, err] + finally: + os.remove(output_file) + if sys.platform == 'darwin': + # Also removes debug directory produced on Mac OS + shutil.rmtree(output_file + '.dSYM') + + expected = open(expected).read() + if actual != expected: + fail(actual, expected) + +def run_emscripten_tests(): + print '\n[ checking wasm.js methods... ]\n' + + for method_init in ['interpret-asm2wasm', 'interpret-s-expr', 'asmjs', 'interpret-binary', 'asmjs,interpret-binary', 'interpret-binary,asmjs']: + # check success and failure for simple modes, only success for combined/fallback ones + for success in [1, 0] if ',' not in method_init else [1]: + method = method_init + command = [EMCC, '-o', 'a.wasm.js', '-s', 'BINARYEN=1', os.path.join(options.binaryen_test, 'hello_world.c') ] + command += ['-s', 'BINARYEN_METHOD="' + method + '"'] + print method, ' : ', ' '.join(command), ' => ', success + subprocess.check_call(command) + + see_polyfill = 'var WasmJS = ' in open('a.wasm.js').read() + + if method and 'interpret' not in method: + assert not see_polyfill, 'verify polyfill was not added - we specified a method, and it does not need it' + else: + assert see_polyfill, 'we need the polyfill' + + def break_cashew(): + asm = open('a.wasm.asm.js').read() + asm = asm.replace('"almost asm"', '"use asm"; var not_in_asm = [].length + (true || { x: 5 }.x);') + asm = asm.replace("'almost asm'", '"use asm"; var not_in_asm = [].length + (true || { x: 5 }.x);') + with open('a.wasm.asm.js', 'w') as o: o.write(asm) + if method.startswith('interpret-asm2wasm'): + delete_from_orbit('a.wasm.wast') # we should not need the .wast + if not success: + break_cashew() # we need cashew + elif method.startswith('interpret-s-expr'): + delete_from_orbit('a.wasm.asm.js') # we should not need the .asm.js + if not success: + delete_from_orbit('a.wasm.wast') + elif method.startswith('asmjs'): + delete_from_orbit('a.wasm.wast') # we should not need the .wast + break_cashew() # we don't use cashew, so ok to break it + if not success: + delete_from_orbit('a.wasm.js') + elif method.startswith('interpret-binary'): + delete_from_orbit('a.wasm.wast') # we should not need the .wast + delete_from_orbit('a.wasm.asm.js') # we should not need the .asm.js + if not success: + delete_from_orbit('a.wasm.wasm') + else: + 1/0 + if NODEJS: + proc = subprocess.Popen([NODEJS, 'a.wasm.js'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + out, err = proc.communicate() + if success: + assert proc.returncode == 0, err + assert 'hello, world!' in out, out + else: + assert proc.returncode != 0, err + assert 'hello, world!' not in out, out + +# Run all the tests +def main(): + run_help_tests() + run_wasm_opt_tests() + asm2wasm.test_asm2wasm() + asm2wasm.test_asm2wasm_binary() + run_wasm_dis_tests() + run_wasm_merge_tests() + run_ctor_eval_tests() + if has_shell_timeout(): + run_wasm_reduce_tests() + + run_spec_tests() + run_binaryen_js_tests() + s2wasm.test_s2wasm() + s2wasm.test_linker() + wasm2asm.test_wasm2asm() + run_validator_tests() + if options.torture and options.test_waterfall: + run_torture_tests() + if has_vanilla_emcc and has_vanilla_llvm and 0: + run_vanilla_tests() + print '\n[ checking example testcases... ]\n' + if options.run_gcc_tests: + run_gcc_torture_tests() + if EMCC: + run_emscripten_tests() + + # Check/display the results + if num_failures == 0: + print '\n[ success! ]' + + if warnings: + print '\n' + '\n'.join(warnings) + + if num_failures > 0: + print '\n[ ' + str(num_failures) + ' failures! ]' + + sys.exit(num_failures) + +if __name__ == '__main__': + main() + diff --git a/src/binaryen/docs/binaryen.js.Markdown b/src/binaryen/docs/binaryen.js.Markdown new file mode 100644 index 0000000000..d003ad6b18 --- /dev/null +++ b/src/binaryen/docs/binaryen.js.Markdown @@ -0,0 +1,240 @@ +binaryen.js API +=============== + +Overview +-------- + +binaryen.js is a port of Binaryen to the Web, allowing you to generate WebAssembly using a JavaScript API. To get a feel for the API, see the "hello world" test at `test/binaryen.js/hello-world.js`, and other tests in that directory for more examples. + +The API is documented in the rest of this document. + +Types +----- + + * `Binaryen.none`: The none type. + * `Binaryen.i32`: The i32 type. + * `Binaryen.i64`: The i64 type. + * `Binaryen.f32`: The f32 type. + * `Binaryen.f64`: The f64 type. + +Modules +------- + + * `Binaryen.Module()`: Constructor for a Binaryen WebAssembly module. You need to create one of these first. + +`Module` instances have the following properties. + +Module property operations: + + * `addFunctionType(name, resultType, paramTypes)`: Add a function type to the module, with a specified name, result type, and param types. + * `addFunction(name, functionType, varTypes, body)`: Add a function, with a name, a function type, an array of local types, and a body. + * `addImport(internalName, externalModuleName, externalBaseName, functionType)`: Add an import, with an internal name (used by other things in the module), an external module name (the module from which we import), an external base name (the name we import from that module), and a function type (for function imports). + * `addExport(internalName, externalName)`: Add an export, with an internal name and an external name (the name the outside sees it exported as). + * `setFunctionTable(funcs)`: Sets the function table to a array of functions. + * `setMemory(initial, maximum, exportName, segments)`: Sets the memory to having an initial size, maximum size, optional export name, and array of data segments. + * `setStart(start)`: Sets the start function (called when the module is instantiated) to a specified function. + +Module operations: + + * `emitBinary()`: Returns a binary for the module, which you can then compile and run in the browser. + * `emitText()`: Returns a text representation of the module, in s-expression format. + * `validate()`: Validates the module, checking it for correctness. + * `optimize()`: Runs the standard optimization passes on the module. + * `runPasses(passes)`: Runs the specified passes on the module. + * `autoDrop()`: Automatically inserts `drop` operations. This lets you not worry about dropping when creating your code. + * `interpret()`: Run the module in the Binaryen interpreter (creates the module, and calls the start method). Useful for debugging. + * `dispose()`: Cleans up the module. If the Binaryen object can be garbage-collected anyhow, you don't need to do this, but if it stays around - e.g. if you create multiple `Module`s over time - then you should call this once a `Module` is no longer needed. (As binaryen.js uses compiled C++ code, we can't just rely on normal garbage collection to clean things up internally.) + +Type-prefixed expressions: + + * `i32`: + * `i32.load(offset, align, ptr)`: Create a 32-bit load, with an offset, alignment, and pointer. + * `i32.load8_s(offset, align, ptr)`: Create an 8-bit signed load, with an offset, alignment, and pointer. + * `i32.load8_u(offset, align, ptr)`: Create an 8-bit unsigned load, with an offset, alignment, and pointer. + * `i32.load16_s(offset, align, ptr)`: Create an 16-bit signed load, with an offset, alignment, and pointer. + * `i32.load16_u(offset, align, ptr)`: Create an 16-bit unsigned load, with an offset, alignment, and pointer. + * `i32.store(offset, align, ptr, value)`: Create a 32-bit store, with an offset, alignment, pointer, and value. + * `i32.store8(offset, align, ptr, value)`: Create an 8-bit store, with an offset, alignment, pointer, and value. + * `i32.store16(offset, align, ptr, value)`: Create a 16-bit store, with an offset, alignment, pointer, and value. + * `i32.const(value)`: Create an `i32` constant of a specified value. + * `i32.clz(value)`: Create a count-leading-zeros of a specified value. + * `i32.ctz(value)`: Create a count-trailing-zeros of a specified value. + * `i32.popcnt(value)`: Create a population-count (number of bits set) of a specified value. + * `i32.eqz(value)`: Create an equal-zero of a specified value. + * `i32.trunc_s.f32(value)`: Create a signed truncate of an `f32` to an `i32`. + * `i32.trunc_s.f64(value)`: Create a signed truncate of an `f64` to an `i32`. + * `i32.trunc_u.f32(value)`: Create an unsigned truncate of an `f32` to an `i32`. + * `i32.trunc_u.f64(value)`: Create an unsigned truncate of an `f64` to an `i32`. + * `i32.reinterpret(value)`: Create a reinterpret of an `f32` to an `i32`. + * `i32.wrap(value)`: Create a wrap of an `i64` to an `i32`. + * `i32.add(left, right)`: Create an add of two `i32`s. + * `i32.sub(left, right)`: Create a subtract of two `i32`s. + * `i32.mul(left, right)`: Create a multiply of two `i32`s. + * `i32.div_s(left, right)`: Create a signed divide of two `i32`s. + * `i32.div_u(left, right)`: Create an unsigned divide of two `i32`s. + * `i32.rem_s(left, right)`: Create a signed remainder of two `i32`s. + * `i32.rem_u(left, right)`: Create an unsigned remainder of two `i32`s. + * `i32.and(left, right)`: Create an and of two `i32`s. + * `i32.or(left, right)`: Create an or of two `i32`s. + * `i32.xor(left, right)`: Create a xor of two `i32`s. + * `i32.shl(left, right)`: Create a shift left on two `i32`s. + * `i32.shr_u(left, right)`: Create an unsigned (logical) shift right on two `i32`s. + * `i32.shr_s(left, right)`: Create a signed (arithmetic) shift right on two `i32`s. + * `i32.rotl(left, right)`: Create a rotate-left on two `i32`s. + * `i32.rotr(left, right)`: Create a rotate-right on two `i32`s. + * `i32.eq(left, right)`: Create an equals on two `i32`s. + * `i32.ne(left, right)`: Create a not-equals on two `i32`s. + * `i32.lt_s(left, right)`: Create a signed less-than on two `i32`s. + * `i32.lt_u(left, right)`: Create an unsigned less-than on two `i32`s. + * `i32.le_s(left, right)`: Create a signed less-or-equal on two `i32`s. + * `i32.le_u(left, right)`: Create an unsigned less-or-equal on two `i32`s. + * `i32.gt_s(left, right)`: Create a signed greater-than on two `i32`s. + * `i32.gt_u(left, right)`: Create an unsigned greater-than on two `i32`s. + * `i32.ge_s(left, right)`: Create a signed greater-or-equal on two `i32`s. + * `i32.ge_u(left, right)`: Create an unsigned greater-or-equal on two `i32`s. + * `i64`: + * `i64.load(offset, align, ptr)`: Create a 32-bit load, with an offset, alignment, and pointer. + * `i64.load8_s(offset, align, ptr)`: Create an 8-bit signed load, with an offset, alignment, and pointer. + * `i64.load8_u(offset, align, ptr)`: Create an 8-bit unsigned load, with an offset, alignment, and pointer. + * `i64.load16_s(offset, align, ptr)`: Create an 16-bit signed load, with an offset, alignment, and pointer. + * `i64.load16_u(offset, align, ptr)`: Create an 16-bit unsigned load, with an offset, alignment, and pointer. + * `i64.load32_s(offset, align, ptr)`: Create a 32-bit signed load, with an offset, alignment, and pointer. + * `i64.load32_u(offset, align, ptr)`: Create a 32-bit unsigned load, with an offset, alignment, and pointer. + * `i64.store(offset, align, ptr, value)`: Create a 32-bit store, with an offset, alignment, pointer, and value. + * `i64.store8(offset, align, ptr, value)`: Create an 8-bit store, with an offset, alignment, pointer, and value. + * `i64.store16(offset, align, ptr, value)`: Create a 16-bit store, with an offset, alignment, pointer, and value. + * `i64.store32(offset, align, ptr, value)`: Create a 32-bit store, with an offset, alignment, pointer, and value. + * `i64.const(low, high)`: Create an `i64` constant of a specified value, provided as low and high 32 bits. + * `i64.clz(value)`: Create a count-leading-zeros of a specified value. + * `i64.ctz(value)`: Create a count-trailing-zeros of a specified value. + * `i64.popcnt(value)`: Create a population-count (number of bits set) of a specified value. + * `i64.eqz(value)`: Create an equal-zero of a specified value. + * `i64.trunc_s.f32(value)`: Create a signed truncate of an `f32` to an `i64`. + * `i64.trunc_s.f64(value)`: Create a signed truncate of an `f64` to an `i64`. + * `i64.trunc_u.f32(value)`: Create an unsigned truncate of an `f32` to an `i64`. + * `i64.trunc_u.f64(value)`: Create an unsigned truncate of an `f64` to an `i64`. + * `i64.reinterpret(value)`: Create a reinterpret of an `f64` to an `i64`. + * `i64.extend_s(value)`: Create a signed extend of an `i32` to an `i64`. + * `i64.extend_u(value)`: Create an unsigned extend of an `i32` to an `i64`. + * `i64.add(left, right)`: Create an add of two `i64`s. + * `i64.sub(left, right)`: Create a subtract of two `i64`s. + * `i64.mul(left, right)`: Create a multiply of two `i64`s. + * `i64.div_s(left, right)`: Create a signed divide of two `i64`s. + * `i64.div_u(left, right)`: Create an unsigned divide of two `i64`s. + * `i64.rem_s(left, right)`: Create a signed remainder of two `i64`s. + * `i64.rem_u(left, right)`: Create an unsigned remainder of two `i64`s. + * `i64.and(left, right)`: Create an and of two `i64`s. + * `i64.or(left, right)`: Create an or of two `i64`s. + * `i64.xor(left, right)`: Create a xor of two `i64`s. + * `i64.shl(left, right)`: Create a shift left on two `i64`s. + * `i64.shr_u(left, right)`: Create an unsigned (logical) shift right on two `i64`s. + * `i64.shr_s(left, right)`: Create a signed (arithmetic) shift right on two `i64`s. + * `i64.rotl(left, right)`: Create a rotate-left on two `i64`s. + * `i64.rotr(left, right)`: Create a rotate-right on two `i64`s. + * `i64.eq(left, right)`: Create an equals on two `i64`s. + * `i64.ne(left, right)`: Create a not-equals on two `i64`s. + * `i64.lt_s(left, right)`: Create a signed less-than on two `i64`s. + * `i64.lt_u(left, right)`: Create an unsigned less-than on two `i64`s. + * `i64.le_s(left, right)`: Create a signed less-or-equal on two `i64`s. + * `i64.le_u(left, right)`: Create an unsigned less-or-equal on two `i64`s. + * `i64.gt_s(left, right)`: Create a signed greater-than on two `i64`s. + * `i64.gt_u(left, right)`: Create an unsigned greater-than on two `i64`s. + * `i64.ge_s(left, right)`: Create a signed greater-or-equal on two `i64`s. + * `i64.ge_u(left, right)`: Create an unsigned greater-or-equal on two `i64`s. + * `f32`: + * `f32.load(offset, align, ptr)`: Create an `f32` load, with an offset, alignment, and pointer. + * `f32.store(offset, align, ptr, value)`: Create an `f32` store, with an offset, alignment, pointer, and value. + * `f32.const(value)`: Create an `f32` constant of a specified value. + * `f32.const_bits(value)`: Create an `f32` constant of a specified value, reinterpreting the bits (this is useful for creating weird NaNs). + * `f32.neg(value)`: Create a negation of an `f32`. + * `f32.abs(value)`: Create a absolute value of an `f32`. + * `f32.ceil(value)`: Create a ceil of an `f32`. + * `f32.floor(value)`: Create a floor of an `f32`. + * `f32.trunc(value)`: Create a truncate of an `f32`. + * `f32.nearest(value)`: Create a nearest-value of an `f32`. + * `f32.sqrt(value)`: Create a square-root of an `f32`. + * `f32.reinterpret(value)`: Create a reinterpret of an `i32` to an `f32`. + * `f32.convert_s.i32(value)`: Create a signed conversion of an `i32` to an `f32`. + * `f32.convert_s.i64(value)`: Create a signed conversion of an `i64` to an `f32`. + * `f32.convert_u.i32(value)`: Create an unsigned conversion of an `i32` to an `f32`. + * `f32.convert_u.i64(value)`: Create an unsigned conversion of an `i64` to an `f32`. + * `f32.demote(value)`: Create a demotion of an `f64` to an `f32`. + * `f32.add(left, right)`: Create an add of two `f32`s. + * `f32.sub(left, right)`: Create a subtract of two `f32`s. + * `f32.mul(left, right)`: Create a multiply of two `f32`s. + * `f32.div(left, right)`: Create a divide of two `f32`s. + * `f32.copysign(left, right)`: Create a copysign (take magnitude of left, sign of right) of two `f32`s. + * `f32.min(left, right)`: Create a minimum on two `f32`s. + * `f32.max(left, right)`: Create a maximum on two `f32`s. + * `f32.eq(left, right)`: Create an equals on two `f32`s. + * `f32.ne(left, right)`: Create a not-equals on two `f32`s. + * `f32.lt(left, right)`: Create a less-than on two `f32`s. + * `f32.le(left, right)`: Create a less-or-equals on two `f32`s. + * `f32.gt(left, right)`: Create a greater-than on two `f32`s. + * `f32.ge(left, right)`: Create a greater-or-equals on two `f32`s. + * `f64`: + * `f64.load(offset, align, ptr)`: Create an `f64` load, with an offset, alignment, and pointer. + * `f64.store(offset, align, ptr, value)`: Create an `f64` store, with an offset, alignment, pointer, and value. + * `f64.const(value)`: Create an `f64` constant of a specified value. + * `f64.const_bits(low, high)`: Create an `f64` constant of a specified value, reinterpreting the low and high 32 bits (this is useful for creating weird NaNs). + * `f64.neg(value)`: Create a negation of an `f64`. + * `f64.abs(value)`: Create a absolute value of an `f64`. + * `f64.ceil(value)`: Create a ceil of an `f64`. + * `f64.floor(value)`: Create a floor of an `f64`. + * `f64.trunc(value)`: Create a truncate of an `f64`. + * `f64.nearest(value)`: Create a nearest-value of an `f64`. + * `f64.sqrt(value)`: Create a square-root of an `f64`. + * `f64.reinterpret(value)`: Create a reinterpret of an `i32` to an `f64`. + * `f64.convert_s.i32(value)`: Create a signed conversion of an `i32` to an `f64`. + * `f64.convert_s.i64(value)`: Create a signed conversion of an `i64` to an `f64`. + * `f64.convert_u.i32(value)`: Create an unsigned conversion of an `i32` to an `f64`. + * `f64.convert_u.i64(value)`: Create an unsigned conversion of an `i64` to an `f64`. + * `f64.promote(value)`: Create a promotion of an `f32` to an `f64`. + * `f64.add(left, right)`: Create an add of two `f64`s. + * `f64.sub(left, right)`: Create a subtract of two `f64`s. + * `f64.mul(left, right)`: Create a multiply of two `f64`s. + * `f64.div(left, right)`: Create a divide of two `f64`s. + * `f64.copysign(left, right)`: Create a copysign (take magnitude of left, sign of right) of two `f64`s. + * `f64.min(left, right)`: Create a minimum on two `f64`s. + * `f64.max(left, right)`: Create a maximum on two `f64`s. + * `f64.eq(left, right)`: Create an equals on two `f64`s. + * `f64.ne(left, right)`: Create a not-equals on two `f64`s. + * `f64.lt(left, right)`: Create a less-than on two `f64`s. + * `f64.le(left, right)`: Create a less-or-equals on two `f64`s. + * `f64.gt(left, right)`: Create a greater-than on two `f64`s. + * `f64.ge(left, right)`: Create a greater-or-equals on two `f64`s. + +Unprefixed expressions: + + * `block(label, children)`: Create a block (a list of instructions), with an optional label, and list of children. + * `if(condition, ifTrue, ifFalse`: Create an if or if-else, with a condition, code to execute if true, and optional code to execute if false. + * `loop(label, body)`: Create a loop, with an optional label, and body. + * `break(label, condition, value)`: Create a break, to a label, and with an optional condition, and optional value. + * `switch(labels, defaultLabel, condition, value)`: Create a switch (aka br_table), with a list of labels, a default label, a condition, and an optional value. + * `call(name, operands, type)`: Create a call, to a function name, with operands, and having a specific return type (note that we must specify the return type here as we may not have created the function being called yet, and we may want to optimize this function before we do so, so the API requires that each function be independent of the others, which means that we can't depend on the definition of another function). + * `callImport(name, operands, type)`: Similar to `call`, but calls an imported function. + * `callIndirect(target, operands, type)`: Similar to `call`, but calls indirectly, i.e., via a function pointer, so an expression replaces the name as the called value. + * `getLocal(index, type)`: Create a get_local, for the local at the specified index, and having a specific type (the type is required for the same reasons as in `call`). + * `setLocal(index, value)`: Create a set_local, for the local at the specified index, and setting the specified value. + * `teeLocal(index, value)`: Create a tee_local, for the local at the specified index, and setting the specified value. + * `select(condition, ifTrue, ifFalse)`: Create a select operation, executing the condition, ifTrue, and ifFalse, and returning one of them based on the condition. + * `drop(value)`: Create a drop of a value. + * `return(value)`: Create a return with an optional value. + * `nop()`: Create a nop (no-operation). + * `unreachable()`: Create an unreachable (trap). + +(now done with `Module`s, returning to the `Binaryen` object) + + * `Binaryen.readBinary(data)`: Reads a binary wasm module and returns a Binaryen `Module` object created from it. + * `Binaryen.emitText(expression)`: Returns a text representation of an individual expression, in s-expression format. Because Binaryen expression do not depend on their function or module, you can do this at any time. + * `setAPITracing(on)`: Sets whether API tracing is on. When on, this emits C API commands for everything you do. This can be very useful for filing bug reports. + * `Binaryen.Relooper()`: Constructor for a Binaryen Relooper instance. This lets you provide an arbitrary CFG, and the Relooper will structure it for WebAssembly. + +Relooper instances have the following methods: + + * `addBlock(code)`: Adds a new block to the CFG, containing the provided code (expression) as its body. + * `addBranch(from, to, condition, code)`: Adds a branch from a block to another block, with a condition (or nothing, if this is the default branch to take from the origin - each block must have one such branch), and optional code to execute on the branch (useful for phis). + * `addBlockWithSwitch(code, condition)`: Adds a new block, which ends with a switch/br_table, with provided code and condition (that determines where we go in the switch). + * `addBranchForSwitch(from, to, indexes, code)`: Adds a branch from a block ending in a switch, to another block, using an array of indexes that determine where to go, and optional code to execute on the branch. + * `renderAndDispose(entry, labelHelper, module)`: Renders and cleans up the Relooper instance. Call this after you have created all the blocks and branches, giving it the entry block (where control flow begins), a label helper variable (an index of a local we can use, necessary for irreducible control flow), and the module. This returns an expression - normal WebAssembly code - that you can use normally anywhere. + diff --git a/src/binaryen/media/example.png b/src/binaryen/media/example.png new file mode 100644 index 0000000000000000000000000000000000000000..13d7cd2b822ecc9c2bfbf9d89a7086402bc9fe2e GIT binary patch literal 27494 zcmbT8byytTm*z;G%bG}s}it-XDZ}Hy(0DvMT`B@nNUfloy4E>u|FGqL~6yLpk zA%2n6as~h-jK3ckAT=HLRTclSYkAG$wL4j1*ATIQuSCkTz1#R?7c@g z9X-}Byp9ab&NkL4E7GjIW)zRpG@&2A;RsV#>0L{V##$X=G;Q^Sbc6mmZ7YhJ%8y5~m-4EHPnBMiB9QLv zUG*M>GLT)%pWc1JQjH;aZcNe{J~to2;6OTAuW94+dXQDWLGiqa*h2d4-A1_5b2rRy z;mv@M_qMFIL`QNaB!o(T`22}Su2s9=)WN@@Fb_-J_2m-a8*anAZRS|sjKE?1NxI59 zG~niu(4FF`XS+scwp`1XMeUwen*0iHY#7hO>t;_>4Gt$qhKH}lJuPLL)uD&ng{anU z6z40p*vR5xYg5#1tv3$X?-9hEP+aJ{;aVil5D-m!jE3m>C*0}hU~1jHhv;7FJO=Om zFDzt7)&luqSn;7lVGi9QWJUa>U;JPL-q?ZN#+IV@0od)FKX6o9ohEv$tQo6KEPL%n53EhHe||=1y;qq~)#534w4Y3hLwH z8s7lf(q1l*y%h$TnXCxKQ!y3Ri3M0{5VMW&qIpFD;bkM9l+t=m5EuAi$Ix~K{f{fW z&*NDK@i1h%F2PZ;C*Y~s?=gh%`Pv+MUNwZg*ygi-c=Z0fMa36Az3$pUAY}Y8zWdcds0n1T)`mEaPF3eK( z_N>jW!6JjNqJuCbty~_4-XvUjUAt5(zrNheCfIyG+1(pd32>^ITAP9J9rYD6`7Y6a z_UC^ZSzqHYDB~f3K6FHV5@WuyiVbm(s=8P?nyo3W;VB*T!uRqR-T7mqAk@du%PTiH zxq@s!W3#c+76uxXKjP&$`{G_%7vl)9^MoWlXL1;BKRUTfi`>h9QrV3_wKQ1N1=Knp z2YX4H)tL**dzxkYGmNC^e=l@gPkZBuoQYY$nkE}kuBnfIEpXxxK_+Eo_B-pf6FH|-EB zojCXBq@cozPMO#FBI)(?lfq)(6qS^NR!^rjR52yD&a)Y>^h(}FmwP!jhKKz`(9iC= z!j393%b7~f;>-Jz66gSb8m8$;ck%dG3SHB!&xBLYxQ8B3n4xZZ*V@U9J>iD(4aoW0 zoWh))fW^aMtjNKQ8nsHi#wx3XpqAI8N<>SJ= zS-%ugNN*v0_91bzPzu}e-;3=@$MIwz1^adVf!Bo6_`O{ z=N)$X7R2Q-a@=d=;^X8$AT&pqpWoXv7Rp?8AU(_4@;9Cq$ZNcY%b`ZDD1zT<6};)5 zrE?qP@wrNrbU->MJDzo8_Rc;$U4o9AG(wElbl=ZM94>lpYfo$J@#owoCQz=~u@=8f zdnS2Su+f(b(Mznn@iciwBsOQ@d|e3C`o$G{?Zy6ndt17n zIGm;%;+G^ywk8HV}j1P4l z$6FM|qXuNr)IDaU306jF^-FMor>dz_cf}e4aL8XKlLG4ELGU}bL5r*XzUt@45{BTS z#iG>cpP!cT&cDOC6ZK_mqF&|XfB|A!)8L{BurhK>#l?zVTXpeV@TLlTTKg$Ji`|b% zn9;JAO!YoL^14sd4r*(URPH@3j_K6?LN9Uf>eHXLWMi=jN}_pJl6PEI5UOIs_az0;12*vE z{cC>}0Ue{4o@MB0XFR_dCECYwzkll|8JO{GDz=rz-}U;q4q31G_t9`N9S1*p#bniY zyy!2M!*%p+C0>=OwS%hLZNieSs4l=BE2G0>jzZE^-JN{e`J_;@10{s4f`t3Aqs;++ zLG6q}w%aub>hv1j?I?=*CKAil#ZqJiPaz+c#n&yA&|g!1;*I*er^yH6j9x~A)^+v1 z#@bVY^HTzz9BL+d%UAwJSq!oS&3u*vJ89OEtxY4hR}B!2(bWeC2t#Kvj4s7de1X~0 zs;}g0;;!FYkLMGDM!4l)oZI%_h%2F07*1|}x%e=^VN>K;qOj@W80uJ00F_mV*n3(z z%ai>#9ae|8i+@OB3H%t0l_-FjY3?hv>U`7fu0{?E=p~M#tTe7bwMg@L4w0((7 zJ~*4^22eBW10yMMmsY|XmAhoD^#)Oebv0|NsOD!*^$JpVBce-?UCynPi34mOHhZ&k z1Twsa4RGM*u5= %+5|zjoKmzN036@;J?PauM_Ned`eJ%-)&_mR!*sthi`c(r5EF z_6HYc6mtt*Rk}5JpIu5OeKEHxbff5HSOp1+qe!;!Mrya+e(9Ul)1&oyZNk7ir0Z*+ z1G>BNJfd=FQoCG1)<4^lM>kyGH{F;rGPHs3#}Pp{;`8_{>dZFVWG;M|@jx*QVd$hI zi+z(^LN5ZR4VEuO=wQbB_-*_Q9;DgBifr#7u4~03ojfa5*)t#L(8s8v;%*`GHPUh4 znV9JIZgvqMgv_gNPilQ$d2DKa#S(t~sr~)Fl-lj?L38RNO&Eg+KNlh02mg{}KH$^&mBG^-E^J!IdzcjzJs34p z%@u|`aLt=-ZsmO_pjpwq?kab_`58b<;<&O>cR@9`VhcuL5J{mccY&0vzCW+-C5UaE zhUdx^kqEW=Kk_!s2fOc_`fJjkYb8{2v@|koC4DZ8P9|3#1-!9q!_M zoyDg~_v44AAmjxIh_U(hflfDmyn!5Min#8Jrl@zw*i?nzGg_OLKu6W9$)kahG~Rt9 zLVqfZHsbk$uisMwU_0JY7PzU88tj|fdE2hE`Hb`FEzVT2U{#lObQk*tWoOz06UM9q zkHMJ5qv=0d?TnxN+;8i`m5*Z-dsck1VIboJD3ZLM%(6MCLSIN<>2}Fi_&Is73Ax5i@bC!|0ZGdA_xVyzY(-&3pK$${w} zS^!V=nE2dymobx>NS@PO;@6uk^n9DsfXF^OL*J|wX>pD>w-Vm0{9OkBZqgw~Te691 z<(Hk;ta&7rNFtUr!*aST?U-Zhie68LJaii&Vzz+~Lz%1x*Fu$Flk1pmyZckdBf*SY zG|R1C?_*kFe!pjG`5{99vfgfIdpa~7KPi=aY#VrHcDH`KsM;F4cM0QiFV zD{T}%#*gDnK>6y}ixlDX=5!T}8l;0JJe4B(=fx6@mOm9L+IUSoWzuql9@s8}9?&M; zi85;_)RBONzH;ZF**o9fX6T*IscRNm=p(1^tlQaDi|IC9=b*aw$jm)@Aa;)AmHdO- zZI@bkc@V>jpsizZM9YxrLa&aXCwSd}AZQA|&JbDzC+3G;bJD7{NRkA3bPKHG!gbGw zPhvN|Xu0-zT4L_b-wn?fuuv`8^lEJmH_9l1Df|La{it?Hch@X18r7j`im1E`?nh!ELSV4o!I(BxumA z>+49mm@}=Chgr6d)p46yOTR8p0x?E2^D2C5?M6nMBbOsa>GygQiWNpq42Y)O7r-&w z#E9=Sn-|+2#!`HsZd5=wi9SdH5m?wef;b$&d{}8x^Js){VCDF@RDpb%_a_B%6fV+Y z9?tRwgpO&>;o(Ww?s+A;M6))_X2=JsVRUB&5wndi z{{CK8C8dxhDe1W+e!>7^@)~3DS=a#-$pv8}lCY&PujRdUYk(^1F1N?dm%>WtLJcz^ z6m9Po7P-#MlJlKK_+xP*@ZkMah3VA*TiidFn(7!LvGz`b^lYpC3)XgoB7`z8_R=aT zv1|c!;HN8HK@2!;in!4q^X^0uxHO4dbDE5f|3k)#IW-qv|AlM+6_Ne_^E1`NwPBjK zgHMM&9B{zXh2;^PFPxudQM$}uvL^`*N43QGH%^z~^lti?W%o4F6DAQ;{QV2H+u~ro z%cmQuo*YVOF1VA?lx@hgSBA#R?9+5fns25`Qh1ZXWM?pW zhNg*R+vhjw`^jbX)8aD2ZNkaPSWmdcLD?Y&H$&gI8h<+EI_2Xl?O1CsSUur5KEBjm z9xuy6K3$CaSU609qMk0R4G6A6lc!(P0v>q%>I!MmLP>sHv$&ao>vQrmi8BqK=+yuh zcJI?@n`FF70GN_X{qu0hi)B37V2MI@Z;XzG7j_bQja|$Nwm_0oy*rP^v!K`_g`xYj z?f_{8jnlrFQypd3_W+>60_ju?BY*LtlJ^wD3NIC+wS_I|)<+;DXOhKhVbmm8v?vH~O1rwU&K0nMIN7$E4|8-~M#<+(rEj7iV4 z+!pJ<(CaBpdP&m@#l>E1u8Jd$KW;>6t_%ze>FQA?eUpy(MB9&(QD1R?n z@FX5t?+|~*-ii?aQi@{vaCQj^4AA~(@&mqF6l-HAs?Yi%l*@xt%be>zc)}ec&c?e~ zXrDRF&pdzkKmN zYEZbhDg9P7vS9BD>&2XE2W>-J9Pj~h)Prm`d+o@+mtk2>;R3J#euST2s9;;Sfm1k2 z9o66Vl)6s%V@6ynnh~lLdQwEZV(&N18ilYrv21<{7s`MeEM8t!&hp;~_?O zkEbWbL>A9~_k`wVy1z-T#8@REF8&U~T9T(H(IgKU=yUZ+hu3h1TEzRT9PROs2KC+A zCOWPqce)o_Sl$NFKCKcywSH!gra^s?P#w-H-ZXWD+uO0hRw z^m%FECqc|VeXICuUckd_>d*JzXn7IKok{cpgcW)B(f_11;W|hD6ReS}>zttaCyety zMQv!P|4>z_qHnhlH5liQhP)y^$rhm3>!D>21uy`FD>ba9n=uId$pJmg%Jd@_^`6 zVc|4?+$GJ!G?xmSFwB{c{n7=q`+y~M^x3YgL!Y{&aJ@tAqZZa~`HtGlI57oqWP>pN zV~BCEG#KhXJg7S*;q-fuR5;UFC5Dy|Qf3b+?T01yg;v!C+%})$&k`$4Q z5RwA#eDXIdOrdj^gC+kH_II^0%S?q670*&@^lA+iDuGVrUn*4Kv4HNFuV9d9HAC$$LLSH{HJ2)dg{5&mv~ZpmNEv@W z-x#~MDlPS06c%TJa%_-tckf|e7DX`Q(EFmmBXk6 zHL$~Fzg=u}ThwbL{>XCJClnTS=RQ0$cy`eFso)N_7wTYt>r)-Ri14)J4mJ#EpUQ{9 zE7W*)WtGw}PYs3RHO~Nr=uhf;+MFy0!dxp_AH8>3Z0s?K1@rYM zHNZMk>gt{3jJ{i#E>xwu{ow?!Z0H3;8Y;cd*60Tw=E>Nam}l01WW*66(59eclSw^w z>*vsGu;!M~Bv6)f9iOgfmA~fkEnEL zm-}fz(o{CnUXrVSvnICrir;Is`$R@?a!}QT%7@okjTZx{Lz*0oaZzH$T1r7+`;FZnH&k=m{-DDQ6MwWlWQvw4CE6mA`rbnxQc{nEHb3V&p|PIlDCCEEWgq-kS@ zjl)ZkPrl8#pVYd2{<+)u;lV5?9=2@3*pN}GA>jrtsAVHE94fTXPo3G zb-AQtjv{-NsGhj7o`@LM<&lh<&Q>NUCrcGDB{_XDkPC+|ivs%UTybVwa%GN}bG^})!$+~^ zZ{3KPi>i1!xEpMa{Ej3|&v*zzEb1SfDOlJv%6C7Qt8==UA0$7#F7YNv^wIaZDNGmT z9wlk7#2Wi|EkIo7Q)+YjVvpb7IK&B?PSQI!qvssawCl{a)FMV`_OOj}Eb*ZZ57)BM zYRvjf#G}oi8}%;0Y$NDxYe#DLxMlT>)V~2kN^^O+- zubVL$#FJhl@{#q$hI@bXoCExig_`r0(FM?eCQYj=d&$SxFn+?`4$~fWXIhyH%iaOI zN%g2pT=t5UCWYgoqQMUVW5JQ{-();A@c?*ai=CL1RBN_A2iquRd6|o#kL+YR<&(6N zT}*@mnaMaG8@;r!0>3N-L{s3f0v+AU)2{(1heH7d=$bS8lIPY z8vH>l0R?L>)_s_0#_ZE+3NA_q59ehTxBGa?g$4NWTpy>odQ;1D?v@%DvNiP_{-j-K zg1|<)K9*{uWoA0tVG0fq)c*-bI?m=v!7EZ;TS2_$#1srQ+ZygLb#OJ?4zT0Tg5`E` z*!`G?8uw0wf>)f(&3^AK>5jQ6&2{aU9n=C((ELsNeg1P8qAbxc52o(L#WV#Y z&+Lb1+q=H?;G|xH7V=|z^cFp!ugr|FBW-?%0gyt&NEn63jO|hxo5J!BY2CMpByhz` zYIqv6fG98Cm3z7Fznd#x^rv!z!WNQPu5%PTKM3@D0fsN!K5!U!x;4y!h>K5!rGswb zr!zgkZ2M$JlHXDrWO@#C5%w%jVQ@(Wv z9QMlAo6)bm?KNOC@A{OuXk)H`dH@`pEBAl_#W3wDKPltaSuk`kNZ0nzd{G`I&SJ5dlduRQBWhvpJFCiQtS}P@y zRZfLkVc1tI{@gaRs-taN5wvKrn!-*vGu!)+Pl==5v^&bDUO;#0FGwwxc@1iAs{b*{ zZ2kdt<(3QB{;;jORgc+5DrgMXgNk>_6BX(62(beqp|(H#yS;Bt<(xew{aa$C`O%UqT;;7`*CrF8OEY z^40%{)4HTn5%{ay>X@He8CGjd9+cXcRk0$`0AlsA$4%rfIvf+ilAB6gz?7lB_KchY9anU>Vll8*ugN13bo*syy@}5 zY=cH_OOXVzCzyQHbF*&X!GMSB!ZF$jnIc-Nk==T{qar;CEC2tA-^<><GPP7x!HjqE(O>4+L};Hx@^C#C-3v!(XFEgi6KV8eTmyOaZ^U1$b=~?^y+B0=N0zwUHfDi zsOsXZ$T`V`mi6nWwD(DH4g^3aub$AuFPq=HQV8V7)JdE3_sXNhuxXsm)(f^)BIcHb}8!|0QHSZl}V zsguPs?e3Vlq@iKeKoaivDWDA5EJw3lzgH#kKS2Brn(i`uBpBdR*3;+SryI_qMm*@ z6jnO|Q+3vqnCbL^jU_JyJUdwamDVRRloxTEHTj5=r5;L6zKn1D246`~Lz+R&(B^M0 zHt9F69%=)R5To(8;`E8heR(3-{)}84PoMVc=+H1&+4(ybY6+RUdolZ3>meP}?0PGs zu^TDy49jvrNR8dd5g&^*@w+*WGaFk(fag8hCa#KevH$o^_i}r+#eH!lxkJ|4bTOK} zpzMYjcH+(sdgNDLimUPbI0UzJkhZDq-uwh>C*!iDuhc^q9ma`}QtE=HPKwlP9vPpe{#eX&SGTL`j_ieeuMek|hjfQ##!d!;yk62;+Ik=x#Vs`v}Ngt>Xy}k5K zQLziS4mkDh*> zIaAP)6%sjl=@h4Ar>_H*^oCa8x}L&;L-C5a7SFN<8qqqjK002Q*k1@wO(sxe1yY~K zN`)w;c+oe-Rj;SH9q!7UWvDMF%9aGC8%A-`u2^Bc?SpgnqXYYRS;o7=IAPV)#k}E? zzVe~@j%y)9kJ=FwZnk}>mNn#GnoMEn9_t8W+Sta(r4UsZXn{mR36%`&&-pYp$`|;i z7E;J4aHc86=KM10)`n)}{-d5$mbz4Qe_8eaYc=JIy09hO-vnOM8T9K7+6;PT1ttF) z?Trw^u>eL-8GOR;mPLHe8w$I!V-P;e;m+a9t?J6ZJ6 z-O8{a(owjWb6oqnvolHq_>_3XBc>67QDEx8?#+yGLDmJr0Q?CZ;k-kxi+y*YZmwA6 z>Dg0Z3DxG_^e(;~IL*Z5S+^P8=Ge9|n;UK~K$4@BUipX9$!jp0#wV=Cvn=mM%A*5w z*T+KN`kT3N6&f^$zAlHplZ@5|i|Nqo#o0uDka&ld2U-?%d3@8Ny7O=H2ZJ{&7u%puj4Dqj6{iYG z1l1g}J8xGMx1oPj7$IQy(CBn_xHe6OtM~?B1D&k3s}>hh{6pLYZ2^w6XU&)`^-T>n z;>v}Sm0BiVaP?P?aWFs@259qqz8o@B)|RY&yF_q9Ou5-&zi*ZRtuNZ(EjI+6oE`tj zWy6oZOyIPYyUt!^+TF^+d83D5w|F6z{Re4(!|f9C+*M4jAcfr&#qVXCNrLbP%JH4* z*^yE7+4{=s?~SYk2L3e?%?i@QbJ`|)Nzv!jhN=UbiC|Qlm9x#dpcg8Cx^sq0W3}4DwR3d_$=9k7fh@0k>1y_ZYR{M@n)QrBc5$it@ibv;mhI6tm7fy@E zKjA^qj+ny8fa3m5TH{?r%3URnzNO}90FhxQCk|Vr=X589csW`Oq`~aMYWqzzq=mrA zHW2M!a)?!4n~nBc6S`P0ljjE`$+QJ|`5n((?~*);hREaPYSYL0H)3a{&i_L4=pAu% zbn~DX@iL)M)dF6p&OAQjCwwSox1^+qve5Lh1;K2V(iim$|2K%l> zBhIq=bBvLBVU*^IlzC`E{P?10zc0bg-INBe7Gy{cN)HgFy|=pUrG-4;{KTtf|5`BI zG3ADW#puS%g5=t?p68gA@gNjhV7GI2;FNKRt5}$>cMS~!5t_!d*&S4d zP%9(p;8@H;!J;xj+U7@@ET&8An6L)9DMI)fsyqiVu4oHR4o1Gv6trb({XWK4%{FJZ zN3K6&p4Qq&{bZw*7>$?uHJi;j^?kfgT4DP^bk}zZ){@(nk`v<2_D85r{k%)P&oyl4 z#=EyiZ9*BlLD>2Y(LWKGS}zB3n%Cb%cJz( z<3N1yT16+r+m>rumpPQNTT%xlvBXyD=e#>E=jU`na+%DK`{M<)%J3twUE#yv>Vw?2uSh5Mmmx)Y!$vW^INzZP#ppvrG*~ zWzE#C%G6#K{p>vNr4s#&M2wD;?;CR_pVQc+zc}UP$AbWJ;W@AEi;?|_D?oR4n~^@L z6WX}c>DwKhk2viI!$bU|IW3`DjKnPL+xVQeU0lIdaQiX?V=vzfa(fPg2 zX>b;H<{@-^r)61tjooXUOO)Y#!_g$3go^(3U?*IGx-u}|f6h8v6atDy{$;7QfRon1 zdo>pC=vH?%VmL#f9UA&^*575Lve0UGy)Gsh_USFOR5drOE-9uzi#*AAmRXw`)A_aIwwFY> zmuq$HXFQ}aVxfWyjD@25?t2z}=?bfp7u167$-7N1@uuRBhY6?Oq>HDhBO&svIx~?Sp;_V@$MRV!AuOKpz>Bj)d@}q~xoV!^6P#Fc9vd zKE3FZPZC`}n=&k1p1)$fMp#Wsx@`T2M>VgeuYOreH-e6qwG|fpW4w)Zp+dG5BI|kY z;Hdos8=fEej+c=Ax1v5{?uS?*V20qd@f;Z#S~$VLglsRqn3+hGnR3+%Q~!g{a~f$eyW^YcGEG*?d-CW zUBcuFon{@0@rWeZLCv$%_oOe#Bhm#wf0Ul2eA%?!FXroL<&ugzL2$Eq0};<;>XQP} zlYHXMCE3e!|AaUXl7+&Y>@6UIVY8?nC5XWjm*F$=vQrGhJA)cLp_T1B#|kjE_e1)A z(1ZM70lGwmx3=4)w2%r9{j|7C!_|St-0zb>MHT4iAqMY%7JbrQIlnN#y6RB&`dU@_ z;vf2h1wt&#&uNeu1Y~Y8FmVYw^%6w&TXNcr&GRTffuWugk+kFok1sOVah){!{M-o+ zR<`2srPE)Oa2S39{!-HG8{o8FfO#?*spO};=WTw1b35{6nD)>z`+RT3_`Ldc`Fl>51c}ewb z`JE7iO`#{EfswFIp7HFB&UoCX{HzM4VyY(Rr?Rut)@%fl10udW}%??4#bf;cHZ z3nwNyK0Y~+(y+zZ8caeaC~wMu!Tq#CW`)CDGYRgug)uv@J2wW}SQ4`s$!fhC^wv8Z zIL6vG+RXx(Yht$5vTNmgQO$)rb2w(J2j=RKWv{GhWvE+xI_MFYZIU+??<`|kFhU|2d|j%=(Q4xP@=J7 zb?aMwnwx!Btvo>E0{PGCS`oaUi1f;cU1uQZ_=xbwKb0E0I^Qbro*BYl?)&?3GW>^u z0|~%V$izRbC|dG)w7`Br6Y0&!35N{LOamL9`;ak^qf=q0FIOa%qW}~kfQSW*gcGB3 zj~TqFMCyv~SU2Vmel2&8yhs(hm%>%sdvq=9d}!B@{f)W-+^Ip5k#)2!d`KdrUe9*9 z(B*v7RJ~uRz8>#uHwb5Th~8tzK7zJK#J&(nVMUEbd}G{dE?jB3`DVtkh7Ak0g`9!6 z_Z85!!^Q9)+|8Z^HmkW;U>4;s@u<3RgrHdN&(8_Gw8oD; z|821NQ!rVH?u&Bv{aLw!i{X&31Un9ZN3FoGq%2zUT7K6SMwsAK>a%bNqAYuX=aC!} z^6g~*`u6}v`-6h7QgX04^09jSX0H67Q_sX#4%F;Q+X5r@D$&_!05fxYvt3hcV%6^L zlW32%#%VUOHdaQtf$z}~pa)#`+CmlZE#xP#m>ISTW`gO^cFSnrzIu5i3D!s8NcPWd zMDN0KBweOPCIXP?DHVe(eKkNUgVxq(&HoctPu&L+ZWA34yc8+%ZC)Mrx<|Y-9Yl@yxMs>vF}JOg~2ng(?e9-U&08q z^ggmyphi1c{+TcfvR{f)7@c88$GB*MRS%>;rJ2AHr^;y!dx4DoIi_NGdIg{Q_0`M} z%hc3?>K{D3!bJzXR9!HAEq1LJ$@`nHKh=LT`q45ZXfseqW4}F|@KR?>ybRo<=CZ!j zaG=!{%zZABH1?xf=9{ile=MVf)StPt5ST=aM3V;f-or&lklK9#BMRYXkLWC}o;+x{ z5USioQ;nB#mYK#RO6vaa0s1@ub6#42BTr*4y4JB5ha{!3wBh2Oq*h1p!aDA^-H`v` z#eK!jOM{(S7o`p!6@jH2KmK7)9f!h=IPT0cTgIhdvts-6%06Yj)x97|W#=B_vjJm` zaBDzgbu3R#k{ zhj)GpgH_@1)-T{zMJs%zOK9<}VnEslE8y$QFuK3#syPJm{wFd|=_DIIR$2;qSs&o@ zCo%E);pG7%lPQ1R;jVc%{U;Cxfr$HKVgJ|MU3;ldT~>7JE~Qh=mzSX~Jb(@wLKl-` z&CW3IG)(mSG_7}yHUCL;9C)P&d~ntN1q36?DJqG2{XjwV*=a9z{|vM9m92o?fvqZx zCfeKD!V;S!Z-7XUy>qOYF#C8yjfQU2uvDM1=^ngXLSknEQ;@h+b?T9e)ol)p-FWRG zBRMDQasU~vR{PXKUYtx386h!@Y*TwL)%`V+>S-e6b4S@<$SMuT`;h-FQk;C<&+R?2 zJI=BDI=-rlCmI`c7pbHyf#*7|#<0ElRFz@fh-)32`ZqbK|4kBA|Hf;SS&AamK= z)J& zJ)uvAi$7)Xvqz}g84jsow{T`xi>CV47AKQ*<3Z_($Z12Z-Ou5zqpGi&mobl0x6h7c8+-|GEmT3l6cV&}^ zWQc8OC^;D9HY$$%iu&K6@gMN}7tv8hyrW*kWshg8{Ie*zV9oAAQmwFh#~fQ9dkaYE zzv!C#ge(;QEVp|e^hIt%UyuL{+s?5`69q4e2G} z7XrM82aXInYg5)4D*LldomJYNc@B z<^%nfR+#@NPB)}YBF^Xr;oIu5WQs4a#Bj z89{M%vDUhs&^B)V8Ar7l9X8r4!%wN@YL-y2q_1uPnSrEa451LxHMokmRRTpat|NI- zeHYzKkqaq|pISKGI_YC+Q0vXLIX&$CCYDR(lWTnoBneuLI}B_YDDXr2T%`Dfh!2EL zPKY$fH)~WqZKi1dkEXe5RJ(@LXxE}EP450EYfxz)?!KN};7Yx3JfWFFZCg$qD}nNt zn-X@`FaV4e@Ut%7%ap72{yBIU?laYOzOk=*tg@L1kX4Vn&dF3VMMBS#b_hz&iwC!} z9#4d87rshrqub@cA~#uV5xYln=-j9oWzhRY2KUXJO#{WPWDPNx(Q&ctY_eWAVyL;Y zSgP6GXm$d2oK_fWIe4G-&~~+TbgF9h1V7uqNl|g4-(V^k)h0R{gfoJP`69MXymskt z91Vpl|J*l!F?oe>P_hasCTkTYu0Jb{ZjsAsu^Y@tm#%nZcrk2}@9b6YEu)S?s(3-= zZJOR7r2waZ^BBL@Jw3i4fvq!{Yv^TFHR!ZaWKSx=YZ@yo&mBxmD z>)cnDrrb%n*55IUiJ(W{;!+nhF_dCm3Fk@e5p49YeFgSG&yP=w^zOh}yKmiNOdviw zM_xnyfsDRP9npCIVjRPxMa2t>*LbxIT17r=Bny0Xk*cZXup4qips>bjc{0w#8!D@cMYJ zXNIS+RwfOnlrm^Rbe`6D997i;shnSVIN#~>nP(Q|qd*JB1~=mlwHuc;7eFI31mZrW zXdEB9g44CHPZshL5fSu>T`#smnRa|???b*727V5TYG^yi(ioQbw|5@UM&`>2|JCIE z%Xc8;Nh4ZfVA{Whh{FcD+nM)LFYz~SD{7`z6yQi6UW|mZ)B&Wd9@`5DB?FWcf5q0M z_~SIBPA8aSL-MbKiPGGT4rqTe{0$sTc{nTwM;5t7?YAqS)2CE!O$gVG1>*K|V9s@2t)^y?pi5 zNkUHB1XY)C9*sl_9Up#lg?V|N|BUBL9ql?@v4Ww- zNl;O@il*-5jX6(IjuBWukM)Vsf;!5KAco0Q2;Yl4iKDY?$XD8v`!Xl2TBup?92~6jxhZOuoI_#{~ug;&n3KwUeQGHUtG8h zVc^H&&aP#&lBy?=-13PI^kc{}rw$=^C^={AEgWp5w2_eYWE_t!5gV0vp#!vk5cWJ} zM$;eYt2XRMzFHKhYmq&h=7?N$h~mRy3qnJd5&w(oIWO}iIWlcPP3k*?a(61W$WcYj z>@y7JlvApy5%RZMefxeigZHVV)05RHb@oYxBuV_}aq(MVPMIyw z4pPlD(-jZ(OlODudP=@~6`PGo!@19S*xhziT5IG^wKD>~2{8F)jiIbEPCBF` zq{D1Xl?!3l>Ka%Qz#$`FW%U=~H(5NRQHXt+7*wKex{+LWXm_C6+rOaG1z6>gR=r!+ zS7KtsKr6MH-;jg$H@PBq|HxuR*P=w)`;uU(k@eaVKd!Up6hdmzwFY0!s8_rqV5pAbM( zJ9Pg_n7;ZX)an1QMkXpgEToxr$Ei?UUaT;AMDrp=v(d8_HaR#O@nvceQtERte#8H^ zM6L;Ydm{)7fOwE_^)>_QfT za~wO2wq%`}u(@uLlu4YeP-R3Q5Mp{ZdGV%3;)j8?HFT%bHy98=QY_nq72j-^u1FKi3>=?ottqX zh(Bvy>P7VzU#kT?sdKRzOb~7R20<6?Z*aN+4-GO99Tm;}6lCq$35$6cZx3<%h<9*M zTU67OBxBo8Pxt0aoZ?2z1*Woouk^6KV10yTa^d{}aoIj~n1RUs@1++^)$Vd;W z!rPyB<5{enQkDW)MBbbrAcE)LgoXw%sJ=xE-+HqQda}w%%;l0522=*J3Uc&jyRtCg z>#mh5UzhcW-t$qm-fX8ebG-Q?OMiWTwlBn5*H3&zspo#~0D6!0Lh;f3xgjcvLEwC15|oPB zAB&Jy>d)3~0=C&m>akGj?B$_PI)7y2=Rw=WO0i<4KFcEM(Bp~f?*l2P;He1>N3K?- zVGbfqv|)Z(pm?a(yoSEER#Z~5rpkO96xu)n0DNXN2z${WiuXmH(+*x6`Hs1O-g6ic z=MbmmEDQj&)4Tvs27JfHB_VYxqeY0vKmFjHFLxe8m-eA}I`jMy0PwD`rRL-y^#wfFv2g8 zPwDO$#df_9 zm`MAN?J=RVvgGD7$F~+T*h88Pbb1mupSKitZx{anb%X$bTdFq#tsRc3rz;(3AkKB4 zCT1gXrLWPVdz$Y;?i1SqY-W;7l%XH;6?vy;Kgh^Tl+))9I;Yh;VGs+mwokfb@~1ct zG$Be-LbmWQ;EVn-(TG5JcHg<+ZT*2MK34;8n{iLrk&_di6Y;a~k`|a6Vmfqt8loZa zm63S;CHX~SWbxOu#9koK(xOc{DI>;bZztTlF+G^4{rpI(Q0W_U=O zCG(4(&(-;HsNLTBeNIe9Z#UaHL%itJ#&i;}yphQiHCS*YgvRv*)8T}im-ft0)MSOC z)-WVUF0G!uJnJ-&af@YWs1)^D3+Iet^SE;*F$K%# z1yKX*mwmAFvEKpthcZjymAsvkZ!~svQ20fX_^lGQT>}EL9_hUrgEOT3RIT) zlhFX9H<6lD9#v=Q;*+u6r8O= z<8sW@8y>E~@x->8&`pYenLu_ZXhd&}al`rhb9w6De|Co`H_HQ5$NZDrl;s(WAS5#W zs1*zNX}vZ1M9V3T3p@ntwYlwtNi}ULe6QTCcP^+~+W3Ov1#?}%+(L+IqTXu_S5T#t zAA=#hO1GPq`22FFo01&3<}Px4F#7I7rNL}IuUJAEnTO}s6-4q3Z$y`DGa#fNDYB$* z1cbYt{CJ0wU?XjN`8hp1FEFztqx2Wknnmc&x&jvCuvokyW@-WaF7qQpzEe{(%{f`T z+d=qS)t0fc(eQ%)-}pKWV3fxa{0v>2#o@B!w^pE11hd8U!5(qh%XxJ zt&r^V+68RwL-LCqG#{qBM6_zLj+otG6Lllb*d9=YL+z&;HEuj(V`ZjVFj#B2HSSS- zZKRo1ch3IAQG<3Z3mAObn1I|3#=|g=0#{+puzSRh&nb1DccpBz^l0NOAIsNlUzIGt64Tu5s;-V?K=jY0DLyyF{@*{sztz3KyJ}Qwbmb)gIL=tb>a6 z!hslUGFCKY!^70}5~6?}+LTNK|CJ+EyyD@o@+2hbb}VWuC{PF@pXP%YtUd7cYRgle zEOM+by*%uvnhgT)OS_NgyxR#qXsz74GgL~)jeCWYVFB_exeYuqVqwL6P|(SC7veY6 z!0qr~ws~Xh4ZrHf!#pj-&p~hF`^riQjVKTa;na|&x8`g{_jzYVNrB_PGHdy%q$lg31|mnN{d>nw^&^!uX2vTh zS9blJdw4SMQ3zuU{V<6woad8^b!P9xyd6bpV~Pk*cTk45DE%k+lMsHMbdU2!*o1xx zb?%Tt{DiDsNQQ923uge}ie+eg+v4jH^94A^(tLk&#MWG~J{SMEuKX3rs5mD5pEjzl zRr~p{Am<;?z8;C2E;Wl?V+3B;CQb)ioady9CfD&^OHV~a#M3PysB%h4DVuWZBZL{MHjagpzIu4 zo%dL*yHnOSY&s>!4tvfaM(sr6@To!cmMk3b513M41$q4ZYJ@Una zU11Ns8?SpQ8laa#ihOk|$vX%U_6^*DdK&tA46PU9v}z|F06~n)exb_`5U_u9t57lA)ziv|QKTT{j0$$Qoy^eXZ%q+WNnuhAM{MF2Vw6)h zCu(XeXMTihKCU$BGZyO%U_@OzZW_Yns43729t!U3fcBQHn#O(aAX;o})Kpt;(VhJB zh_$syQLc*y*bj?NpU5~S`#^g{0_vgP>q~kpCu5`b#puM|3D^dWB?;)2H=VM4^7V0^ z?6HlU@b_OsO@zRr;UODxve!T(>38~QMCmO*lGGL1)VGOEb=p3f2!7Vo)hHZ`5t~&! zg-W>Dki*Y-7L-;oY7xA}u-F`jbtqX*+Ds1A4} z`_f}RT$6X{=GRMODM|Gd&)uD|tzHeNpJY*X@pIJ`TAd z*qFdCZZM~nEXeVkuh)o!pXEN{c-vLj7LkF@kojES3e7*$u&#p%HDq53Hs zGjg(11R2W^WLjg(!i*wTYj#sj&K{E%MJFe?X+eggSNW5~`Ky{{HxpU?42Raf4?be% zcH^P7<(R{b&lBLjmrVg*gXO?E33OB<=}LC%X;mqe9E^JkLfn0m5fb-_G@v_bOs0@v zIg_Z|3=x`X;R@sH(%AWC^_I)wj`d$fn-RR~31)Qrx6aFbjVYt`0peWebO(M2zDQE} z)(&z|EuwOSoXhq_8|Qv{2Sz&F{}A`Pc41-TMy(@D zjNJyO_pfXz@h4#LbY;f-+ptgN_vYDB&2QR>r9#S)*~nQ(=X>87v9DH})1vpM+&z6( zcic-{o&v@oh7t01u$*4rZyvrBR2;P4iy|2Cg!?8Cd|%voKK@6C{Jxs}zQWC#Phgey zd^nEK2C?SFWP#{v^g!O7*`v|RLWQ=Knx%l(ZVGc(${+ZVh7RQ>>?ES?Xd*t?LO-X_ zygjV`oYG6e(Tx>#wnx$WL|Dt>=BUO~#fj3thif#&>mud8%@KRiVgGl7+@S7*=AAZ?vxvlMU$@88#I2j3%d^3_C-1p!=_|`f}1E)Sdr-xb=;05CFKt{GUf# zKPulxYWxp^ts*aVQ3Ld69#2t4HvjAxFl<%^2WurCsBCVT=r?=P=$A1VVIBH-PuLR$ zeNj_;XKN)UU0lG#G$eO)sCDW1y~1m!ZCX8lEd8fN5pqslQL%5 zEjoF$Kw#U!LJE}4$y$hmW_=jr`^dp&3>+?u1kI3W z%cJ8oBC~T<>RrM&Is0AM6GG@h|GgB0Xk@7Vz5?^C&{Pb8$FMGkV5aeNmS>W?Fp@PG zzx9XRd*8kmLCa1&oD=~&!_RWFJI}P)->!j@^&M^{+ERmwb-XeRZL>$T6O*)Y&T1)l z1&6kRS~);uSFc#@bssN>z&7t!_@i{DJzM0ax1UR{Nb^lphI8KU7B+qItE42mOI&^D z=#&ocv)pgemeX7scv;8Vt4G3fIXs*dGMd`-6_*(~t$R;O;GZ-ot+p~d zMnp}igCLGebHOjgS9z@*5@ILiI=Z}JyHC@U;7nY0m{Co2vsD8mioy;4RwIsovG@@P(Es>u< z_$jgc(6j_xO?mxQnqBhF-LLu5!LQGIWdkZfdyyCHoo|0NT6MOtbC3Ws^~K-k=ezHZ z2J+)C&)46^PH9m1Q=gzAteTx>^Sja;?3=5y0uIiHirDj67n9~AlNUS_xTolE?bp23 z!hbM2QtQ+a3zWx*5&L=%CLy>dhpK8!-SsIs&PbswQ@<%vb}F;Ora#1aiivE#kV+bJQ2<6;6|3dX`qT zRq<74R??vDsD=-}tB;xwrI~Fz8^tQO^Zt{|^IM^ze)z?v_R;nF>_>Gc6WzHkEL7GH zwP5D!Eb7tnMQ7^YMgv=ZY35$_7B9D}pf{0v-ji#=P8k z_Rb48lyW4YF_DnBls~A*sYqq7oOFt(v6lPYJMbn-fGn_z++_UfCt_+>VENX6a_%s9 zQnwis!9L`^hoXk5meFnV|HN10__&2tkO)R!#)(e@7|N*%l0@6V)Cg_zcKRP_!pb>2 zuCoI-CXB-;@fY(>g&Lt4D1giiBD2T5pb*tnXQ89eCLxx2m@p6`9QaG!&Pbi^N~wLI~1YbCts zcIi2}V2kLu+R{9e>x-BUc|vmf6f+Aewubtd%mS;sxSFh4H!La}3;%x8yE}l%Sp8nO z4Xyn4My-vqy-m=Zvru4CNA+=?&24^*RvE(tNOe&AUbGMD^tL`J!UjHmR<~K=)a?}cc&IKPXL0H3AvQi#j5Y~+iECE)W5olj_x#oJHaj1z+8 zo{Q?lKo16RH4q^m=5v14mmy&)2d3_6R1;8KI!jOfk+?gm%*&qr+*5v%=`3oLkl-!e z+xfW3=6>8t&|IQo-WqDYI2c8H0Fi<@hf8kHcL^0Gjg`}x6JGq>l!?t~v&5SrZ558p@6bl1D- zfKK(Rm$n_cOk8y1+Qt(pwLFc}&)86(MYju{@E?ppJ**+ZTMeQ-Zr|=RaqoT?`yEwh z!)DK3x?sx{?Iy~F$Ux9sZ?FBJhG@YA>gPEF2cTCBhuBmMz#;*cTs-^-cgBO9#J;f` z&B6l?c9#!3!s+QPzmM)ikBlw#Y~TffdWyPQ6TFK*jWq&4sCzMPx)%+>D8IR$M}%#| zxyp!0k_c&Q>S5gr>Vca}-v(VE-pjwly6AxugFkSn6beBI`T60w#Mm-OkrSZ)jL`hd`Mj08u+wrB>udFh} zp(IBx7_%}ect16)ZOJ|(wbL=V%`t>WvE$s!@#EMdq~BBH%oJq|T{ydVu=v#LiqS6L z;688?)wVAzf~=NXjbN!E-uZ4V&WWg;UWd(4n0I2(Ke%RMYCS9>HM4BEDP6J1#J*9; z=@B$c3f#2W^nF*Gv7bMV(g}PTcGcE&Z^J`*QOA$H}4+kM^qeI8cPh8i=J2@6zcW;E8*5O+nMhOwR*tDpi-U(W)p+eQr0D*tjmo{jBHWesZrS0{}1xG0l^G^8m_T@&1<5 zSrPQg%w!nPpnA_TmwShk?hBE34oo~e^(|^;pAe-wfeISj7Qvr`3k1%p3o9oG)l4#W2n%*Fz5W9NjQpnuW>08 z(u~4#a`qHw5U!&hI)+~aQ~zE()6{_6%(iN}F*sMS(0xr?DotI=xahvd{8V2>M&&-h zQFWNF=+{mYckdmo3Nz|0DpE^se)7KM_CP%~q+ktlKsm&f?no@Ol`nGXIq680y(DZ1 zSD@bb>sWp5^Cy=Dcd}*?qQ3$9v)9^7?3C}j*cSZgzlCAM9?L@(zoRFuS`OMWxdM@al_P?MjCL79y(fBIOC499wnye{bz0e-nZ>G-%%A5 zW2^OM#K+P6QS+zKA{H}rmBb_zz+wJpegP!PGN?K{bwnQDB1QgRQ}-!w-tA1p~uAua57t}#<6ulmy$@U)rq6j z45JvCY4;KqWIO+e5O(vT$%vk~rcq3aon6u1(u?Mc7J4wnU#2lxRs+HwQalbv=AcM} zts!H{ivnx{H44E*xVX*STq(1`OdKa0Qi84ZnNO8u{x&=Dkdd^^U$ zf(R>k!XLf7UU_B;^ZCnqG8^f3#f$D5rKJ1Ez3_jkPl52G-*$E4yC7>Iy=8mfp2m9v zm3RwJ{=LmFCoE@L;C87rk0%wfj#zIFT1#hdNN|z7ZsAn+zeOm~1}&}z=w`rAp$Gk9 zVh`X|toK_5g{k!-`*(4~Pb#XRnaqQK1T#0m-D3AQJIjoZEro77nyTH{@sUwdWPNUS z_YvhgCv&qLLB;*_iqrf77nnOTek%Fs8kg_=e-RQMFsOXCl?+u%n9Hga5$B84RXlAhdWb`mJ85WhU{0TW?+B0axUFP z1XzW~Aq?%Woz5h^6AfSeUaB?JOH4%i^Z|JU&cQVvL3O=-!AqN^hwItR$cyc<{@Bq% zG;hS@O^^YAR+1|W(TT>*cuk#+vwS-r>JNnIKb#KxLZ43D5p{V zP~sWH@oqIj4S5EL`KF4r&XIETAbkIdX0rW9EjCw1)?_cuH2zOoOpok=&v&bjgh@1^ z_Sby@^w2_MA03p0h^-rf6rG|T{BUG1w$mazUrag8mAh=p#}xL_?4IAY8``~Pc=YUn zYj~zOIOks|^5LNnY@2%^^%j@Pl=uUmn@u7SJw0;tKQlh10NSi%?Qw7dAAnY)xxoXg z+)Q!W(O~H){CPP_E4x6#2mZ+M$@wQ;X0OcrXI*aZLcXd&KLhYnjCADRHk0TALbGor zfj?G?RDK3Lyh4tDM7yAOYH-2MRGc)6)?e9u4Xa4aE7viSQ#rg%CnxwTLErqb7Y%#r zuzvE z`q*bnY-E{`GmiPGW9vV;(JD-l-afzyY8dWgx0(mJOr$LtM;?$E;{QoMXFe#@|DFCT dHaJuFC}-Sbyo&Mi-48dCdM^(yduQPPzW|y>6omi) literal 0 HcmV?d00001 diff --git a/src/binaryen/scripts/__init__.py b/src/binaryen/scripts/__init__.py new file mode 100755 index 0000000000..8db5bb0bf6 --- /dev/null +++ b/src/binaryen/scripts/__init__.py @@ -0,0 +1,17 @@ +#! /usr/bin/env python + +# Copyright 2015 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Empty __init__.py file: Python treats the directory as containing a package. diff --git a/src/binaryen/scripts/clean_c_api_trace.py b/src/binaryen/scripts/clean_c_api_trace.py new file mode 100755 index 0000000000..efe8baa435 --- /dev/null +++ b/src/binaryen/scripts/clean_c_api_trace.py @@ -0,0 +1,23 @@ +#! /usr/bin/env python + +''' +Cleans up output from the C api, makes a runnable C file +''' + +import sys + +trace = open(sys.argv[1]).read() + +start = trace.find('// beginning a Binaryen API trace') +if start >= 0: + trace = trace[start:] + + while 1: + start = trace.find('\n(') + if start < 0: + break + end = trace.find('\n)', start + 1) + assert end > 0 + trace = trace[:start] + trace[end + 2:] + + print trace diff --git a/src/binaryen/scripts/fuzz_passes.py b/src/binaryen/scripts/fuzz_passes.py new file mode 100755 index 0000000000..42a083b114 --- /dev/null +++ b/src/binaryen/scripts/fuzz_passes.py @@ -0,0 +1,147 @@ +#! /usr/bin/env python + +# Copyright 2016 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +''' +This fuzzes passes, by starting with a working program, then running +random passes on the wast, and seeing if they break something + +Usage: Provide a base filename for a runnable program, e.g. a.out.js. + Then we will modify a.out.wast. Note that the program must + be built to run using that wast (BINARYEN_METHOD=interpret-s-expr) + + Other parameters after the first are used when calling the program. +''' + +import os +import random +import shutil +import subprocess +import sys + +PASSES = [ + "duplicate-function-elimination", + "dce", + "remove-unused-brs", + "remove-unused-names", + "optimize-instructions", + "precompute", + "simplify-locals", + "vacuum", + "coalesce-locals", + "reorder-locals", + "merge-blocks", + "remove-unused-functions", +] + +# main + +base = sys.argv[1] +wast = base[:-3] + '.wast' +print '>>> base program:', base, ', wast:', wast + +args = sys.argv[2:] + + +def run(): + if os.path.exists(wast): + print '>>> running using a wast of size', os.stat(wast).st_size + cmd = ['mozjs', base] + args + try: + return subprocess.check_output(cmd, stderr=subprocess.STDOUT) + except Exception, e: + print ">>> !!! ", e, " !!!" + + +original_wast = None + +try: + # get normal output + + normal = run() + print '>>> normal output:\n', normal + assert normal, 'must be output' + + # ensure we actually use the wast + + original_wast = wast + '.original.wast' + shutil.move(wast, original_wast) + assert run() != normal, 'running without the wast must fail' + + # ensure a bad pass makes it fail + + def apply_passes(passes): + wasm_opt = os.path.join('bin', 'wasm-opt') + subprocess.check_call([wasm_opt, original_wast] + passes + ['-o', wast]) + + apply_passes(['--remove-imports']) + assert run() != normal, 'running after a breaking pass must fail' + + # loop, looking for failures + + def simplify(passes): + # passes is known to fail, try to simplify down by removing + more = True + while more: + more = False + print '>>> trying to reduce:', ' '.join(passes), + print ' [' + str(len(passes)) + ']' + for i in range(len(passes)): + smaller = passes[:i] + passes[i + 1:] + print '>>>>>> try to reduce to:', ' '.join(smaller), + print ' [' + str(len(smaller)) + ']' + try: + apply_passes(smaller) + assert run() == normal + except Exception: + # this failed too, so it's a good reduction + passes = smaller + print '>>> reduction successful' + more = True + break + print '>>> reduced to:', ' '.join(passes) + + tested = set() + + def pick_passes(): + ret = [] + while 1: + str_ret = str(ret) + if random.random() < 0.1 and str_ret not in tested: + tested.add(str_ret) + return ret + ret.append('--' + random.choice(PASSES)) + + counter = 0 + + while 1: + passes = pick_passes() + print '>>> [' + str(counter) + '] testing:', ' '.join(passes) + counter += 1 + try: + apply_passes(passes) + except Exception, e: + print e + simplify(passes) + break + seen = run() + if seen != normal: + print '>>> bad output:\n', seen + simplify(passes) + break + +finally: + if original_wast: + shutil.move(original_wast, wast) diff --git a/src/binaryen/scripts/fuzz_passes_wast.py b/src/binaryen/scripts/fuzz_passes_wast.py new file mode 100755 index 0000000000..2f2022dd9f --- /dev/null +++ b/src/binaryen/scripts/fuzz_passes_wast.py @@ -0,0 +1,139 @@ +#! /usr/bin/env python + +# Copyright 2016 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +''' +This fuzzes passes, by starting with a wast, then running +random passes on the wast, and seeing if they break optimization +or validation + +Usage: Provide the filename of the wast. +''' + +import os +import random +import shutil +import subprocess +import sys + +PASSES = [ + "duplicate-function-elimination", + "dce", + "remove-unused-brs", + "remove-unused-names", + "optimize-instructions", + "precompute", + "simplify-locals", + "vacuum", + "coalesce-locals", + "reorder-locals", + "merge-blocks", + "remove-unused-functions", +] + +# main + +wast = sys.argv[1] +print '>>> wast:', wast + +args = sys.argv[2:] + + +def run(): + try: + cmd = ['bin/wasm-opt', wast] + print 'run', cmd + subprocess.check_call(cmd, stderr=open('/dev/null')) + except Exception, e: + return ">>> !!! ", e, " !!!" + return 'ok' + + +original_wast = None + +try: + # get normal output + + normal = run() + print '>>> normal output:\n', normal + assert normal, 'must be output' + + # ensure we actually use the wast + + original_wast = wast + '.original.wast' + shutil.move(wast, original_wast) + + def apply_passes(passes): + wasm_opt = os.path.join('bin', 'wasm-opt') + subprocess.check_call([wasm_opt, original_wast] + passes + ['-o', wast], + stderr=open('/dev/null')) + + # loop, looking for failures + + def simplify(passes): + # passes is known to fail, try to simplify down by removing + more = True + while more: + more = False + print '>>> trying to reduce:', ' '.join(passes), + print ' [' + str(len(passes)) + ']' + for i in range(len(passes)): + smaller = passes[:i] + passes[i + 1:] + print '>>>>>> try to reduce to:', ' '.join(smaller), + print ' [' + str(len(smaller)) + ']' + try: + apply_passes(smaller) + assert run() == normal + except Exception: + # this failed too, so it's a good reduction + passes = smaller + print '>>> reduction successful' + more = True + break + print '>>> reduced to:', ' '.join(passes) + + tested = set() + + def pick_passes(): + # return '--waka'.split(' ') + ret = [] + while 1: + str_ret = str(ret) + if random.random() < 0.5 and str_ret not in tested: + tested.add(str_ret) + return ret + ret.append('--' + random.choice(PASSES)) + + counter = 0 + + while 1: + passes = pick_passes() + print '>>> [' + str(counter) + '] testing:', ' '.join(passes) + counter += 1 + try: + apply_passes(passes) + except Exception, e: + print e + simplify(passes) + break + seen = run() + if seen != normal: + print '>>> bad output:\n', seen + simplify(passes) + break + +finally: + if original_wast: + shutil.move(original_wast, wast) diff --git a/src/binaryen/scripts/fuzz_relooper.py b/src/binaryen/scripts/fuzz_relooper.py new file mode 100755 index 0000000000..16a441936b --- /dev/null +++ b/src/binaryen/scripts/fuzz_relooper.py @@ -0,0 +1,328 @@ +#! /usr/bin/env python + +# Copyright 2016 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +''' +This fuzzes the relooper using the C API. +''' + +import difflib +import os +import random +import subprocess + +if os.environ.get('LD_LIBRARY_PATH'): + os.environ['LD_LIBRARY_PATH'] += os.pathsep + 'lib' +else: + os.environ['LD_LIBRARY_PATH'] = 'lib' + +counter = 0 + +while True: + # Random decisions + num = random.randint(2, 250) + density = random.random() * random.random() + max_decision = num * 20 + decisions = [random.randint(1, max_decision) for x in range(num * 3)] + branches = [0] * num + defaults = [0] * num + for i in range(num): + b = set([]) + bs = random.randint(1, max(1, + round(density * random.random() * (num - 1)))) + for j in range(bs): + b.add(random.randint(1, num - 1)) + b = list(b) + defaults[i] = random.choice(b) + b.remove(defaults[i]) + branches[i] = b + optimize = random.random() < 0.5 + print counter, ':', num, density, optimize + counter += 1 + + for temp in ['fuzz.wasm', 'fuzz.wast', 'fast.txt', 'fuzz.slow.js', + 'fuzz.c']: + try: + os.unlink(temp) + except OSError: + pass + + # parts + entry = ''' +var label = 0; +var state; +var decisions = %s; +var index = 0; +function check() { + if (index == decisions.length) throw 'HALT'; + console.log('(i32.const ' + (-decisions[index]) + ')'); + return decisions[index++]; +} +''' % str(decisions) + + slow = entry + '\n' + slow += 'label = 0;\n' + + slow += ''' +while(1) switch(label) { +''' + + fast = ''' + +#include +#include + +#include "binaryen-c.h" + +// globals: address 4 is index +// decisions are at address 8+ + +int main() { + BinaryenModuleRef module = BinaryenModuleCreate(); + + // check() + + // if the end, halt + BinaryenExpressionRef halter = BinaryenIf(module, + BinaryenBinary(module, + BinaryenEqInt32(), + BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), + BinaryenConst(module, BinaryenLiteralInt32(4))), + BinaryenConst(module, BinaryenLiteralInt32(4 * %d)) // jumps of 4 bytes + ), + BinaryenUnreachable(module), + NULL + ); + // increment index + BinaryenExpressionRef incer = BinaryenStore(module, + 4, 0, 0, + BinaryenConst(module, BinaryenLiteralInt32(4)), + BinaryenBinary(module, + BinaryenAddInt32(), + BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), + BinaryenConst(module, BinaryenLiteralInt32(4))), + BinaryenConst(module, BinaryenLiteralInt32(4)) + ), + BinaryenInt32() + ); + + // optionally, print the return value + BinaryenExpressionRef args[] = { + BinaryenBinary(module, + BinaryenSubInt32(), + BinaryenConst(module, BinaryenLiteralInt32(0)), + BinaryenLoad(module, + 4, 0, 4, 0, BinaryenInt32(), + BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), + BinaryenConst(module, BinaryenLiteralInt32(4))) + ) + ) + }; + BinaryenExpressionRef debugger; + if (1) debugger = BinaryenCallImport(module, "print", args, 1, + BinaryenNone()); + else debugger = BinaryenNop(module); + + // return the decision. need to subtract 4 that we just added, + // and add 8 since that's where we start, so overall offset 4 + BinaryenExpressionRef returner = BinaryenLoad(module, + 4, 0, 4, 0, BinaryenInt32(), + BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), + BinaryenConst(module, BinaryenLiteralInt32(4))) + ); + BinaryenExpressionRef checkBodyList[] = { halter, incer, debugger, + returner }; + BinaryenExpressionRef checkBody = BinaryenBlock(module, + NULL, checkBodyList, sizeof(checkBodyList) / sizeof(BinaryenExpressionRef) + ); + BinaryenFunctionTypeRef i = BinaryenAddFunctionType(module, "i", + BinaryenInt32(), + NULL, 0); + BinaryenAddFunction(module, "check", i, NULL, 0, checkBody); + + // contents of main() begin here + + RelooperRef relooper = RelooperCreate(); + +''' % len(decisions) + + for i in range(0, num): + slow += ' case %d: console.log("(i32.const %d)"); state = check(); \n' % ( + i, i) + b = branches[i] + for j in range(len(b)): + slow += ' if (state %% %d == %d) { label = %d; break }\n' % ( + len(b) + 1, j, b[j]) # TODO: split range 1-n into these options + slow += ' label = %d; break\n' % defaults[i] + + use_switch = [random.random() < 0.5 for i in range(num)] + + for i in range(num): + fast += ''' + RelooperBlockRef b%d; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(%d)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; +''' % (i, i) + if use_switch[i]: + fast += ''' + b%d = RelooperAddBlockWithSwitch(relooper, + BinaryenBlock(module, NULL, list, 2), + BinaryenBinary(module, + BinaryenRemUInt32(), + BinaryenGetLocal(module, 0, BinaryenInt32()), + BinaryenConst(module, BinaryenLiteralInt32(%d)) + ) + ); +''' % (i, len(branches[i]) + 1) + else: # non-switch + fast += ''' + b%d = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2)); +''' % i + fast += ''' + } +''' + + for i in range(num): + b = branches[i] + for j in range(len(b)): + if use_switch[i]: + total = len(b) + 1 + values = ','.join([str(x) for x in range(random.randint(len(b) + 1, + max_decision + 2)) if x % total == j]) + fast += ''' + { + BinaryenIndex values[] = { %s }; + RelooperAddBranchForSwitch(b%d, b%d, values, + sizeof(values) / sizeof(BinaryenIndex), NULL); + } +''' % (values, i, b[j]) + else: # non-switch + fast += ''' + RelooperAddBranch(b%d, b%d, BinaryenBinary(module, + BinaryenEqInt32(), + BinaryenBinary(module, + BinaryenRemUInt32(), + BinaryenGetLocal(module, 0, BinaryenInt32()), + BinaryenConst(module, BinaryenLiteralInt32(%d)) + ), + BinaryenConst(module, BinaryenLiteralInt32(%d)) + ), NULL); +''' % (i, b[j], len(b) + 1, j) + # default branch + if use_switch[i]: + fast += ''' + RelooperAddBranchForSwitch(b%d, b%d, NULL, 0, NULL); +''' % (i, defaults[i]) + else: + fast += ''' + RelooperAddBranch(b%d, b%d, NULL, NULL); +''' % (i, defaults[i]) + + fast += ''' + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, b0, 1, + module); + + int decisions[] = { %s }; + int numDecisions = sizeof(decisions)/sizeof(int); + + // write out all the decisions, then the body of the function + BinaryenExpressionRef full[numDecisions + 1]; + + { + int i; + for (i = 0; i < numDecisions; i++) { + full[i] = BinaryenStore(module, + 4, 0, 0, + BinaryenConst(module, BinaryenLiteralInt32(8 + 4 * i)), + BinaryenConst(module, BinaryenLiteralInt32(decisions[i])), + BinaryenInt32() + ); + } + } + full[numDecisions] = body; + BinaryenExpressionRef all = BinaryenBlock(module, NULL, full, + numDecisions + 1); + + BinaryenFunctionTypeRef v = BinaryenAddFunctionType(module, "v", + BinaryenNone(), + NULL, 0); + // locals: state, free-for-label + BinaryenType localTypes[] = { BinaryenInt32(), BinaryenInt32() }; + BinaryenFunctionRef theMain = BinaryenAddFunction(module, "main", v, + localTypes, 2, all); + BinaryenSetStart(module, theMain); + + // import + + BinaryenType iparams[] = { BinaryenInt32() }; + BinaryenFunctionTypeRef vi = BinaryenAddFunctionType(module, "vi", + BinaryenNone(), + iparams, 1); + BinaryenAddImport(module, "print", "spectest", "print", vi); + + // memory + BinaryenSetMemory(module, 1, 1, "mem", NULL, NULL, NULL, 0); + + // optionally, optimize + if (%d) BinaryenModuleOptimize(module); + + assert(BinaryenModuleValidate(module)); + + // write it out + + BinaryenModulePrint(module); + + BinaryenModuleDispose(module); + + return 0; +} +''' % (', '.join(map(str, decisions)), optimize) + + slow += '}' + + open('fuzz.slow.js', 'w').write(slow) + open('fuzz.c', 'w').write(fast) + + print '.' + cmd = [os.environ.get('CC') or 'gcc', 'fuzz.c', '-Isrc', + '-lbinaryen', '-lasmjs', + '-lsupport', '-Llib/.', '-pthread', '-o', 'fuzz'] + subprocess.check_call(cmd) + print '^' + subprocess.check_call(['./fuzz'], stdout=open('fuzz.wast', 'w')) + print '*' + fast_out = subprocess.Popen(['bin/wasm-shell', 'fuzz.wast'], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE).communicate()[0] + print '-' + slow_out = subprocess.Popen(['nodejs', 'fuzz.slow.js'], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE).communicate()[0] + print '_' + + if slow_out != fast_out: + print ''.join([a.rstrip() + '\n' for a in difflib.unified_diff( + slow_out.split('\n'), + fast_out.split('\n'), + fromfile='slow', + tofile='fast')]) + assert False diff --git a/src/binaryen/scripts/process_optimize_instructions.py b/src/binaryen/scripts/process_optimize_instructions.py new file mode 100755 index 0000000000..a9337b13b9 --- /dev/null +++ b/src/binaryen/scripts/process_optimize_instructions.py @@ -0,0 +1,16 @@ +#!/usr/bin/python + +import os + +root = os.path.dirname(os.path.dirname(__file__)) + +infile = os.path.join(root, 'src', 'passes', 'OptimizeInstructions.wast') +outfile = os.path.join(root, 'src', 'passes', + 'OptimizeInstructions.wast.processed') + +out = open(outfile, 'w') + +for line in open(infile): + out.write('"' + line.strip().replace('"', '\\"') + '\\n"\n') + +out.close() diff --git a/src/binaryen/scripts/spidermonkify.py b/src/binaryen/scripts/spidermonkify.py new file mode 100644 index 0000000000..69ad437f1c --- /dev/null +++ b/src/binaryen/scripts/spidermonkify.py @@ -0,0 +1,52 @@ +#! /usr/bin/env python + +# Copyright 2016 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +''' +A bunch of hackish fixups for testing of SpiderMonkey support. We should +get rid of these ASAP. + +This is meant to be run using BINARYEN_SCRIPTS in emcc, and not standalone. +''' + +import os +import subprocess +import sys + +import emscripten + +binaryen_root = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) + +js_target = sys.argv[1] +wast_target = sys.argv[2] + +wasm_target = wast_target[:-5] + '.wasm' + +# convert to binary using spidermonkey +''' +using something like +mozjs -e 'os.file.writeTypedArrayToFile("moz.wasm", +new Uint8Array(wasmTextToBinary(os.file.readFile("a.out.wast"))))' +investigate with +>>> map(chr, map(ord, open('moz.wasm').read())) +or +python -c "print str(map(chr,map(ord, + open('a.out.wasm').read()))).replace(',', '\n')" +''' +subprocess.check_call( + emscripten.shared.SPIDERMONKEY_ENGINE + + ['-e', 'os.file.writeTypedArrayToFile("' + wasm_target + + '", new Uint8Array(wasmTextToBinary(os.file.readFile("' + + wast_target + '"))))']) diff --git a/src/binaryen/scripts/storage.py b/src/binaryen/scripts/storage.py new file mode 100755 index 0000000000..771d145d82 --- /dev/null +++ b/src/binaryen/scripts/storage.py @@ -0,0 +1,53 @@ +#! /usr/bin/env python + +# Copyright 2016 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import glob +import json +import os +import urllib2 + + +STORAGE_BASE = 'https://storage.googleapis.com/wasm-llvm/builds/git/' + + +def download_revision(force_latest): + name = 'latest' if force_latest else 'lkgr' + downloaded = urllib2.urlopen(STORAGE_BASE + name).read().strip() + # TODO: for now try opening as JSON, if that doesn't work then the content is + # just a hash. The waterfall is in the process of migrating to JSON. + info = None + try: + info = json.loads(downloaded) + except ValueError: + pass + return info['build'] if type(info) == dict else downloaded + + +def download_tar(tar_pattern, directory, revision): + tar_path = os.path.join(directory, tar_pattern) + revision_tar_path = tar_path % revision + if os.path.isfile(revision_tar_path): + print 'Already have `%s`' % revision_tar_path + else: + print 'Downloading `%s`' % revision_tar_path + with open(revision_tar_path, 'w+') as f: + f.write(urllib2.urlopen(STORAGE_BASE + tar_pattern % revision).read()) + # Remove any previous tarfiles. + for older_tar in glob.glob(tar_path % '*'): + if older_tar != revision_tar_path: + print 'Removing older tar file `%s`' % older_tar + os.remove(older_tar) + return revision_tar_path diff --git a/src/binaryen/scripts/strip_local_names.py b/src/binaryen/scripts/strip_local_names.py new file mode 100644 index 0000000000..d617766bcc --- /dev/null +++ b/src/binaryen/scripts/strip_local_names.py @@ -0,0 +1,13 @@ + +''' +Removes local names. When you don't care about local names but do want +to diff for structural changes, this can help. +''' + +import sys + +for line in open(sys.argv[1]).readlines(): + if '(tee_local ' in line or '(set_local ' in line or '(get_local ' in line: + print line[:line.find('$')] + else: + print line, diff --git a/src/binaryen/scripts/test/__init__.py b/src/binaryen/scripts/test/__init__.py new file mode 100755 index 0000000000..8db5bb0bf6 --- /dev/null +++ b/src/binaryen/scripts/test/__init__.py @@ -0,0 +1,17 @@ +#! /usr/bin/env python + +# Copyright 2015 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Empty __init__.py file: Python treats the directory as containing a package. diff --git a/src/binaryen/scripts/test/asm2wasm.py b/src/binaryen/scripts/test/asm2wasm.py new file mode 100644 index 0000000000..abcd41bb45 --- /dev/null +++ b/src/binaryen/scripts/test/asm2wasm.py @@ -0,0 +1,162 @@ +#!/usr/bin/env python + +# Copyright 2017 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import subprocess + +from support import run_command +from shared import ( + ASM2WASM, WASM_OPT, binary_format_check, delete_from_orbit, + fail, fail_with_error, fail_if_not_identical, options, tests +) + + +def test_asm2wasm(): + print '[ checking asm2wasm testcases... ]\n' + + for asm in tests: + if not asm.endswith('.asm.js'): + continue + for precise in [0, 1, 2]: + for opts in [1, 0]: + cmd = ASM2WASM + [os.path.join(options.binaryen_test, asm)] + if 'threads' in asm: + cmd += ['--enable-threads'] + wasm = asm.replace('.asm.js', '.fromasm') + if not precise: + cmd += ['--trap-mode=allow', '--ignore-implicit-traps'] + wasm += '.imprecise' + elif precise == 2: + cmd += ['--trap-mode=clamp'] + wasm += '.clamp' + if not opts: + wasm += '.no-opts' + if precise: + cmd += ['-O0'] # test that -O0 does nothing + else: + cmd += ['-O'] + if 'debugInfo' in asm: + cmd += ['-g'] + if 'noffi' in asm: + cmd += ['--no-legalize-javascript-ffi'] + if precise and opts: + # test mem init importing + open('a.mem', 'wb').write(asm) + cmd += ['--mem-init=a.mem'] + if asm[0] == 'e': + cmd += ['--mem-base=1024'] + if 'i64' in asm or 'wasm-only' in asm or 'noffi' in asm: + cmd += ['--wasm-only'] + wasm = os.path.join(options.binaryen_test, wasm) + print '..', asm, wasm + + def do_asm2wasm_test(): + actual = run_command(cmd) + + # verify output + if not os.path.exists(wasm): + fail_with_error('output .wast file %s does not exist' % wasm) + expected = open(wasm, 'rb').read() + if actual != expected: + fail(actual, expected) + + binary_format_check(wasm, verify_final_result=False) + + # test both normally and with pass debug (so each inter-pass state + # is validated) + old_pass_debug = os.environ.get('BINARYEN_PASS_DEBUG') + try: + os.environ['BINARYEN_PASS_DEBUG'] = '1' + print "With BINARYEN_PASS_DEBUG=1:" + do_asm2wasm_test() + del os.environ['BINARYEN_PASS_DEBUG'] + print "With BINARYEN_PASS_DEBUG disabled:" + do_asm2wasm_test() + finally: + if old_pass_debug is not None: + os.environ['BINARYEN_PASS_DEBUG'] = old_pass_debug + else: + if 'BINARYEN_PASS_DEBUG' in os.environ: + del os.environ['BINARYEN_PASS_DEBUG'] + + # verify in wasm + if options.interpreter: + # remove imports, spec interpreter doesn't know what to do with them + subprocess.check_call(WASM_OPT + ['--remove-imports', wasm], + stdout=open('ztemp.wast', 'w'), + stderr=subprocess.PIPE) + proc = subprocess.Popen([options.interpreter, 'ztemp.wast'], + stderr=subprocess.PIPE) + out, err = proc.communicate() + if proc.returncode != 0: + try: # to parse the error + reported = err.split(':')[1] + start, end = reported.split('-') + start_line, start_col = map(int, start.split('.')) + lines = open('ztemp.wast').read().split('\n') + print + print '=' * 80 + print lines[start_line - 1] + print (' ' * (start_col - 1)) + '^' + print (' ' * (start_col - 2)) + '/_\\' + print '=' * 80 + print err + except Exception: + # failed to pretty-print + fail_with_error('wasm interpreter error: ' + err) + fail_with_error('wasm interpreter error') + + # verify debug info + if 'debugInfo' in asm: + jsmap = 'a.wasm.map' + cmd += ['--source-map', jsmap, + '--source-map-url', 'http://example.org/' + jsmap, + '-o', 'a.wasm'] + run_command(cmd) + if not os.path.isfile(jsmap): + fail_with_error('Debug info map not created: %s' % jsmap) + with open(wasm + '.map', 'rb') as expected: + with open(jsmap, 'rb') as actual: + fail_if_not_identical(actual.read(), expected.read()) + with open('a.wasm', 'rb') as binary: + url_section_name = bytearray([16]) + bytearray('sourceMappingURL') + url = 'http://example.org/' + jsmap + assert len(url) < 256, 'name too long' + url_section_contents = bytearray([len(url)]) + bytearray(url) + print url_section_name + binary_contents = bytearray(binary.read()) + if url_section_name not in binary_contents: + fail_with_error('source map url section not found in binary') + url_section_index = binary_contents.index(url_section_name) + if url_section_contents not in binary_contents[url_section_index:]: + fail_with_error('source map url not found in url section') + + +def test_asm2wasm_binary(): + print '\n[ checking asm2wasm binary reading/writing... ]\n' + + asmjs = os.path.join(options.binaryen_test, 'hello_world.asm.js') + delete_from_orbit('a.wasm') + delete_from_orbit('b.wast') + run_command(ASM2WASM + [asmjs, '-o', 'a.wasm']) + assert open('a.wasm', 'rb').read()[0] == '\0', 'we emit binary by default' + run_command(ASM2WASM + [asmjs, '-o', 'b.wast', '-S']) + assert open('b.wast', 'rb').read()[0] != '\0', 'we emit text with -S' + + +if __name__ == '__main__': + test_asm2wasm() + test_asm2wasm_binary() diff --git a/src/binaryen/scripts/test/s2wasm.py b/src/binaryen/scripts/test/s2wasm.py new file mode 100755 index 0000000000..405ed5fdf9 --- /dev/null +++ b/src/binaryen/scripts/test/s2wasm.py @@ -0,0 +1,135 @@ +#!/usr/bin/env python + +# Copyright 2016 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +from support import run_command +from shared import ( + fail, fail_with_error, fail_if_not_contained, + options, S2WASM, WASM_SHELL +) + + +def test_s2wasm(): + print '\n[ checking .s testcases... ]\n' + + cmd = S2WASM + [ + os.path.join(options.binaryen_test, 'dot_s', 'basics.s'), + '--import-memory'] + output = run_command(cmd) + fail_if_not_contained( + output, '(import "env" "memory" (memory $0 1))') + + extension_arg_map = { + '.wast': [], + '.clamp.wast': ['--trap-mode=clamp'], + '.js.wast': ['--trap-mode=js'], + } + for dot_s_dir in ['dot_s', 'llvm_autogenerated']: + dot_s_path = os.path.join(options.binaryen_test, dot_s_dir) + for s in sorted(os.listdir(dot_s_path)): + if not s.endswith('.s'): + continue + print '..', s + for ext, ext_args in extension_arg_map.iteritems(): + wasm = s.replace('.s', ext) + expected_file = os.path.join(options.binaryen_test, dot_s_dir, wasm) + expected_exists = os.path.exists(expected_file) + if ext != '.wast' and not expected_exists: + continue + + full = os.path.join(options.binaryen_test, dot_s_dir, s) + stack_alloc = (['--allocate-stack=1024'] + if dot_s_dir == 'llvm_autogenerated' + else []) + cmd = S2WASM + [full, '--emscripten-glue'] + stack_alloc + ext_args + if s.startswith('start_'): + cmd.append('--start') + actual = run_command(cmd) + + # verify output + if not expected_exists: + print actual + fail_with_error('output ' + expected_file + ' does not exist') + expected = open(expected_file, 'rb').read() + if actual != expected: + fail(actual, expected) + + # verify with options + cmd = S2WASM + [full, '--global-base=1024'] + stack_alloc + run_command(cmd) + + # run wasm-shell on the .wast to verify that it parses + cmd = WASM_SHELL + [expected_file] + run_command(cmd) + + +def test_linker(): + print '\n[ running linker tests... ]\n' + # The {main,foo,bar,baz}.s files were created by running clang over the + # respective c files. The foobar.bar archive was created by running: + # llvm-ar -format=gnu rc foobar.a quux.s foo.s bar.s baz.s + cmd = S2WASM + [ + os.path.join(options.binaryen_test, 'linker', 'main.s'), '-l', + os.path.join(options.binaryen_test, 'linker', 'archive', 'foobar.a')] + output = run_command(cmd) + # foo should come from main.s and return 42 + fail_if_not_contained(output, '(func $foo') + fail_if_not_contained(output, '(i32.const 42)') + # bar should be linked in from bar.s + fail_if_not_contained(output, '(func $bar') + # quux should be linked in from bar.s even though it comes before bar.s in + # the archive + fail_if_not_contained(output, '(func $quux') + # baz should not be linked in at all + if 'baz' in output: + fail_with_error('output should not contain "baz": ' + output) + + # Test an archive using a string table + cmd = S2WASM + [ + os.path.join(options.binaryen_test, 'linker', 'main.s'), '-l', + os.path.join(options.binaryen_test, 'linker', 'archive', 'barlong.a')] + output = run_command(cmd) + # bar should be linked from the archive + fail_if_not_contained(output, '(func $bar') + + # Test exporting memory growth function and emscripten runtime functions + cmd = S2WASM + [ + os.path.join(options.binaryen_test, 'linker', 'main.s'), + '--emscripten-glue', '--allow-memory-growth'] + output = run_command(cmd) + expected_funcs = [ + ('__growWasmMemory', '(param $newSize i32)'), + ('stackSave', '(result i32)'), + ('stackAlloc', '(param $0 i32) (result i32)'), + ('stackRestore', '(param $0 i32)'), + ] + for name, extra in expected_funcs: + space = ' ' if extra else '' + fail_if_not_contained(output, '(export "{0}" (func ${0}))'.format(name)) + for line in output.split('\n'): + if '(func ${0}'.format(name + space) in line: + # we found the relevant line for the function definition. remove + # a (; X ;) comment with its index + start = line.find('(; ') + if start >= 0: + end = line.find(' ;)') + line = line[:start] + line[end + 4:] + fail_if_not_contained(line, '(func ${0}'.format(name + space + extra)) + + +if __name__ == '__main__': + test_s2wasm() + test_linker() diff --git a/src/binaryen/scripts/test/shared.py b/src/binaryen/scripts/test/shared.py new file mode 100644 index 0000000000..65f1f6e74e --- /dev/null +++ b/src/binaryen/scripts/test/shared.py @@ -0,0 +1,426 @@ +import argparse +import difflib +import os +import shutil +import subprocess +import sys +import urllib2 + + +usage_str = ("usage: 'python check.py [options]'\n\n" + "Runs the Binaryen test suite.") +parser = argparse.ArgumentParser(description=usage_str) +parser.add_argument( + '--torture', dest='torture', action='store_true', default=True, + help='Chooses whether to run the torture testcases. Default: true.') +parser.add_argument( + '--no-torture', dest='torture', action='store_false', + help='Disables running the torture testcases.') +parser.add_argument( + '--only-prepare', dest='only_prepare', action='store_true', default=False, + help='If enabled, only fetches the waterfall build. Default: false.') +parser.add_argument( + # Backwards compatibility + '--only_prepare', dest='only_prepare', action='store_true', default=False, + help='If enabled, only fetches the waterfall build. Default: false.') +parser.add_argument( + '--test-waterfall', dest='test_waterfall', action='store_true', + default=False, + help=('If enabled, fetches and tests the LLVM waterfall builds.' + ' Default: false.')) +parser.add_argument( + '--no-test-waterfall', dest='test_waterfall', action='store_false', + help='Disables downloading and testing of the LLVM waterfall builds.') +parser.add_argument( + '--abort-on-first-failure', dest='abort_on_first_failure', + action='store_true', default=True, + help=('Specifies whether to halt test suite execution on first test error.' + ' Default: true.')) +parser.add_argument( + '--no-abort-on-first-failure', dest='abort_on_first_failure', + action='store_false', + help=('If set, the whole test suite will run to completion independent of' + ' earlier errors.')) +parser.add_argument( + '--run-gcc-tests', dest='run_gcc_tests', action='store_true', default=True, + help=('Chooses whether to run the tests that require building with native' + ' GCC. Default: true.')) +parser.add_argument( + '--no-run-gcc-tests', dest='run_gcc_tests', action='store_false', + help='If set, disables the native GCC tests.') + +parser.add_argument( + '--interpreter', dest='interpreter', default='', + help='Specifies the wasm interpreter executable to run tests on.') +parser.add_argument( + '--binaryen-bin', dest='binaryen_bin', default='', + help=('Specifies a path to where the built Binaryen executables reside at.' + ' Default: bin/ of current directory (i.e. assume an in-tree build).' + ' If not specified, the environment variable BINARYEN_ROOT= can also' + ' be used to adjust this.')) +parser.add_argument( + '--binaryen-root', dest='binaryen_root', default='', + help=('Specifies a path to the root of the Binaryen repository tree.' + ' Default: the directory where this file check.py resides.')) +parser.add_argument( + '--valgrind', dest='valgrind', default='', + help=('Specifies a path to Valgrind tool, which will be used to validate' + ' execution if specified. (Pass --valgrind=valgrind to search in' + ' PATH)')) +parser.add_argument( + '--valgrind-full-leak-check', dest='valgrind_full_leak_check', + action='store_true', default=False, + help=('If specified, all unfreed (but still referenced) pointers at the' + ' end of execution are considered memory leaks. Default: disabled.')) + +parser.add_argument( + 'positional_args', metavar='tests', nargs=argparse.REMAINDER, + help='Names specific tests to run.') +options = parser.parse_args() +requested = options.positional_args + +num_failures = 0 +warnings = [] + + +def warn(text): + global warnings + warnings.append(text) + print 'warning:', text + + +# setup + +# Locate Binaryen build artifacts directory (bin/ by default) +if not options.binaryen_bin: + if os.environ.get('BINARYEN_ROOT'): + if os.path.isdir(os.path.join(os.environ.get('BINARYEN_ROOT'), 'bin')): + options.binaryen_bin = os.path.join( + os.environ.get('BINARYEN_ROOT'), 'bin') + else: + options.binaryen_bin = os.environ.get('BINARYEN_ROOT') + else: + options.binaryen_bin = 'bin' + +options.binaryen_bin = os.path.normpath(options.binaryen_bin) + +wasm_dis_filenames = ['wasm-dis', 'wasm-dis.exe'] +if not any(os.path.isfile(os.path.join(options.binaryen_bin, f)) + for f in wasm_dis_filenames): + warn('Binaryen not found (or has not been successfully built to bin/ ?') + +# Locate Binaryen source directory if not specified. +if not options.binaryen_root: + path_parts = os.path.abspath(__file__).split(os.path.sep) + options.binaryen_root = os.path.sep.join(path_parts[:-3]) + +options.binaryen_test = os.path.join(options.binaryen_root, 'test') + + +# Finds the given executable 'program' in PATH. +# Operates like the Unix tool 'which'. +def which(program): + def is_exe(fpath): + return os.path.isfile(fpath) and os.access(fpath, os.X_OK) + fpath, fname = os.path.split(program) + if fpath: + if is_exe(program): + return program + else: + for path in os.environ["PATH"].split(os.pathsep): + path = path.strip('"') + exe_file = os.path.join(path, program) + if is_exe(exe_file): + return exe_file + if '.' not in fname: + if is_exe(exe_file + '.exe'): + return exe_file + '.exe' + if is_exe(exe_file + '.cmd'): + return exe_file + '.cmd' + if is_exe(exe_file + '.bat'): + return exe_file + '.bat' + + +WATERFALL_BUILD_DIR = os.path.join(options.binaryen_test, 'wasm-install') +BIN_DIR = os.path.abspath(os.path.join( + WATERFALL_BUILD_DIR, 'wasm-install', 'bin')) + +NATIVECC = (os.environ.get('CC') or which('mingw32-gcc') or + which('gcc') or which('clang')) +NATIVEXX = (os.environ.get('CXX') or which('mingw32-g++') or + which('g++') or which('clang++')) +NODEJS = which('nodejs') or which('node') +MOZJS = which('mozjs') +EMCC = which('emcc') + +BINARYEN_INSTALL_DIR = os.path.dirname(options.binaryen_bin) +WASM_OPT = [os.path.join(options.binaryen_bin, 'wasm-opt')] +WASM_AS = [os.path.join(options.binaryen_bin, 'wasm-as')] +WASM_DIS = [os.path.join(options.binaryen_bin, 'wasm-dis')] +ASM2WASM = [os.path.join(options.binaryen_bin, 'asm2wasm')] +WASM2ASM = [os.path.join(options.binaryen_bin, 'wasm2asm')] +WASM_CTOR_EVAL = [os.path.join(options.binaryen_bin, 'wasm-ctor-eval')] +WASM_SHELL = [os.path.join(options.binaryen_bin, 'wasm-shell')] +WASM_MERGE = [os.path.join(options.binaryen_bin, 'wasm-merge')] +S2WASM = [os.path.join(options.binaryen_bin, 's2wasm')] +WASM_REDUCE = [os.path.join(options.binaryen_bin, 'wasm-reduce')] + +S2WASM_EXE = S2WASM[0] +WASM_SHELL_EXE = WASM_SHELL[0] + + +def wrap_with_valgrind(cmd): + # Exit code 97 is arbitrary, used to easily detect when an error occurs that + # is detected by Valgrind. + valgrind = [options.valgrind, '--quiet', '--error-exitcode=97'] + if options.valgrind_full_leak_check: + valgrind += ['--leak-check=full', '--show-leak-kinds=all'] + return valgrind + cmd + + +if options.valgrind: + WASM_OPT = wrap_with_valgrind(WASM_OPT) + WASM_AS = wrap_with_valgrind(WASM_AS) + WASM_DIS = wrap_with_valgrind(WASM_DIS) + ASM2WASM = wrap_with_valgrind(ASM2WASM) + WASM_SHELL = wrap_with_valgrind(WASM_SHELL) + S2WASM = wrap_with_valgrind(S2WASM) + +os.environ['BINARYEN'] = os.getcwd() + + +def get_platform(): + return {'linux2': 'linux', + 'darwin': 'mac', + 'win32': 'windows', + 'cygwin': 'windows'}[sys.platform] + + +def has_shell_timeout(): + return get_platform() != 'windows' and os.system('timeout 1s pwd') == 0 + + +def fetch_waterfall(): + rev = open(os.path.join(options.binaryen_test, 'revision')).read().strip() + buildername = get_platform() + local_rev_path = os.path.join(WATERFALL_BUILD_DIR, 'local-revision') + if os.path.exists(local_rev_path): + with open(local_rev_path) as f: + local_rev = f.read().strip() + if local_rev == rev: + return + # fetch it + basename = 'wasm-binaries-' + rev + '.tbz2' + url = '/'.join(['https://storage.googleapis.com/wasm-llvm/builds', + buildername, rev, basename]) + print '(downloading waterfall %s: %s)' % (rev, url) + downloaded = urllib2.urlopen(url).read().strip() + fullname = os.path.join(options.binaryen_test, basename) + open(fullname, 'wb').write(downloaded) + print '(unpacking)' + if os.path.exists(WATERFALL_BUILD_DIR): + shutil.rmtree(WATERFALL_BUILD_DIR) + os.mkdir(WATERFALL_BUILD_DIR) + subprocess.check_call(['tar', '-xf', os.path.abspath(fullname)], + cwd=WATERFALL_BUILD_DIR) + print '(noting local revision)' + with open(local_rev_path, 'w') as o: + o.write(rev + '\n') + + +has_vanilla_llvm = False + + +def setup_waterfall(): + # if we can use the waterfall llvm, do so + global has_vanilla_llvm + CLANG = os.path.join(BIN_DIR, 'clang') + print 'trying waterfall clang at', CLANG + try: + subprocess.check_call([CLANG, '-v']) + has_vanilla_llvm = True + print '...success' + except (OSError, subprocess.CalledProcessError) as e: + warn('could not run vanilla LLVM from waterfall: ' + str(e) + + ', looked for clang at ' + CLANG) + + +if options.test_waterfall: + fetch_waterfall() + setup_waterfall() + +if options.only_prepare: + print 'waterfall is fetched and setup, exiting since --only-prepare' + sys.exit(0) + +# external tools + +try: + if NODEJS is not None: + subprocess.check_call( + [NODEJS, '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) +except (OSError, subprocess.CalledProcessError): + NODEJS = None +if NODEJS is None: + warn('no node found (did not check proper js form)') + +try: + if MOZJS is not None: + subprocess.check_call( + [MOZJS, '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) +except (OSError, subprocess.CalledProcessError): + MOZJS = None +if MOZJS is None: + warn('no mozjs found (did not check native wasm support nor asm.js' + ' validation)') + +try: + if EMCC is not None: + subprocess.check_call( + [EMCC, '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) +except (OSError, subprocess.CalledProcessError): + EMCC = None +if EMCC is None: + warn('no emcc found (did not check non-vanilla emscripten/binaryen' + ' integration)') + +has_vanilla_emcc = False +try: + subprocess.check_call( + [os.path.join(options.binaryen_test, 'emscripten', 'emcc'), '--version'], + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + has_vanilla_emcc = True +except (OSError, subprocess.CalledProcessError): + pass + + +# utilities + +# removes a file if it exists, using any and all ways of doing so +def delete_from_orbit(filename): + try: + os.unlink(filename) + except OSError: + pass + if not os.path.exists(filename): + return + try: + shutil.rmtree(filename, ignore_errors=True) + except OSError: + pass + if not os.path.exists(filename): + return + try: + import stat + os.chmod(filename, os.stat(filename).st_mode | stat.S_IWRITE) + + def remove_readonly_and_try_again(func, path, exc_info): + if not (os.stat(path).st_mode & stat.S_IWRITE): + os.chmod(path, os.stat(path).st_mode | stat.S_IWRITE) + func(path) + else: + raise + shutil.rmtree(filename, onerror=remove_readonly_and_try_again) + except OSError: + pass + + +def fail_with_error(msg): + global num_failures + try: + num_failures += 1 + raise Exception(msg) + except Exception, e: + print >> sys.stderr, str(e) + if options.abort_on_first_failure: + raise + + +def fail(actual, expected): + diff_lines = difflib.unified_diff( + expected.split('\n'), actual.split('\n'), + fromfile='expected', tofile='actual') + diff_str = ''.join([a.rstrip() + '\n' for a in diff_lines])[:] + fail_with_error("incorrect output, diff:\n\n%s" % diff_str) + + +def fail_if_not_identical(actual, expected): + if expected != actual: + fail(actual, expected) + + +def fail_if_not_contained(actual, expected): + if expected not in actual: + fail(actual, expected) + + +if len(requested) == 0: + tests = sorted(os.listdir(os.path.join(options.binaryen_test))) +else: + tests = requested[:] + +if not options.interpreter: + warn('no interpreter provided (did not test spec interpreter validation)') + +if not has_vanilla_emcc: + warn('no functional emcc submodule found') + + +# check utilities + +def binary_format_check(wast, verify_final_result=True, wasm_as_args=['-g'], + binary_suffix='.fromBinary'): + # checks we can convert the wast to binary and back + + print ' (binary format check)' + cmd = WASM_AS + [wast, '-o', 'a.wasm'] + wasm_as_args + print ' ', ' '.join(cmd) + if os.path.exists('a.wasm'): + os.unlink('a.wasm') + subprocess.check_call(cmd, stdout=subprocess.PIPE) + assert os.path.exists('a.wasm') + + cmd = WASM_DIS + ['a.wasm', '-o', 'ab.wast'] + print ' ', ' '.join(cmd) + if os.path.exists('ab.wast'): + os.unlink('ab.wast') + subprocess.check_call(cmd, stdout=subprocess.PIPE) + assert os.path.exists('ab.wast') + + # make sure it is a valid wast + cmd = WASM_OPT + ['ab.wast'] + print ' ', ' '.join(cmd) + subprocess.check_call(cmd, stdout=subprocess.PIPE) + + if verify_final_result: + expected = open(wast + binary_suffix).read() + actual = open('ab.wast').read() + if actual != expected: + fail(actual, expected) + + return 'ab.wast' + + +def minify_check(wast, verify_final_result=True): + # checks we can parse minified output + + print ' (minify check)' + cmd = WASM_OPT + [wast, '--print-minified'] + print ' ', ' '.join(cmd) + subprocess.check_call( + WASM_OPT + [wast, '--print-minified'], + stdout=open('a.wast', 'w'), stderr=subprocess.PIPE) + assert os.path.exists('a.wast') + subprocess.check_call( + WASM_OPT + ['a.wast', '--print-minified'], + stdout=open('b.wast', 'w'), stderr=subprocess.PIPE) + assert os.path.exists('b.wast') + if verify_final_result: + expected = open('a.wast').read() + actual = open('b.wast').read() + if actual != expected: + fail(actual, expected) + if os.path.exists('a.wast'): + os.unlink('a.wast') + if os.path.exists('b.wast'): + os.unlink('b.wast') diff --git a/src/binaryen/scripts/test/support.py b/src/binaryen/scripts/test/support.py new file mode 100755 index 0000000000..9d70abb7f9 --- /dev/null +++ b/src/binaryen/scripts/test/support.py @@ -0,0 +1,167 @@ +#! /usr/bin/env python + +# Copyright 2016 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import filecmp +import os +import shutil +import subprocess +import sys +import tempfile + + +def _open_archive(tarfile, tmp_dir): + with tempfile.TemporaryFile(mode='w+') as f: + try: + subprocess.check_call(['tar', '-xvf', tarfile], cwd=tmp_dir, stdout=f) + except Exception: + f.seek(0) + sys.stderr.write(f.read()) + raise + return os.listdir(tmp_dir) + + +def _files_same(dir1, dir2, basenames): + diff = filecmp.cmpfiles(dir1, dir2, basenames) + return 0 == len(diff[1] + diff[2]) + + +def _dirs_same(dir1, dir2, basenames): + for d in basenames: + left = os.path.join(dir1, d) + right = os.path.join(dir2, d) + if not (os.path.isdir(left) and os.path.isdir(right)): + return False + diff = filecmp.dircmp(right, right) + if 0 != len(diff.left_only + diff.right_only + diff.diff_files + + diff.common_funny + diff.funny_files): + return False + return True + + +def _move_files(dirfrom, dirto, basenames): + for f in basenames: + from_file = os.path.join(dirfrom, f) + to_file = os.path.join(dirto, f) + if os.path.isfile(to_file): + os.path.remove(to_file) + shutil.move(from_file, to_file) + + +def _move_dirs(dirfrom, dirto, basenames): + for d in basenames: + from_dir = os.path.join(dirfrom, d) + to_dir = os.path.join(dirto, d) + if os.path.isdir(to_dir): + shutil.rmtree(to_dir) + shutil.move(from_dir, to_dir) + + +def untar(tarfile, outdir): + """Returns True if untar content differs from pre-existing outdir content.""" + tmpdir = tempfile.mkdtemp() + try: + untared = _open_archive(tarfile, tmpdir) + files = [f for f in untared if os.path.isfile(os.path.join(tmpdir, f))] + dirs = [d for d in untared if os.path.isdir(os.path.join(tmpdir, d))] + assert len(files) + len(dirs) == len(untared), 'Only files and directories' + if _files_same(tmpdir, outdir, files) and _dirs_same(tmpdir, outdir, dirs): + # Nothing new or different in the tarfile. + return False + # Some or all of the files / directories are new. + _move_files(tmpdir, outdir, files) + _move_dirs(tmpdir, outdir, dirs) + return True + finally: + if os.path.isdir(tmpdir): + shutil.rmtree(tmpdir) + + +def split_wast(wast): + # .wast files can contain multiple modules, and assertions for each one. + # this splits out a wast into [(module, assertions), ..] + # we ignore module invalidity tests here. + wast = open(wast).read() + + # if it's a binary, leave it as is + if wast[0] == '\0': + return [[wast, '']] + + ret = [] + + def to_end(j): + depth = 1 + while depth > 0 and j < len(wast): + if wast[j] == '"': + while 1: + j = wast.find('"', j + 1) + if wast[j - 1] == '\\': + continue + break + assert j > 0 + elif wast[j] == '(': + depth += 1 + elif wast[j] == ')': + depth -= 1 + elif wast[j] == ';' and wast[j + 1] == ';': + j = wast.find('\n', j) + j += 1 + return j + + i = 0 + while i >= 0: + start = wast.find('(', i) + if start >= 0 and wast[start + 1] == ';': + # block comment + i = wast.find(';)', start + 2) + assert i > 0, wast[start:] + i += 2 + continue + skip = wast.find(';', i) + if skip >= 0 and skip < start and skip + 1 < len(wast): + if wast[skip + 1] == ';': + i = wast.find('\n', i) + 1 + continue + if start < 0: + break + i = to_end(start + 1) + chunk = wast[start:i] + if chunk.startswith('(module'): + ret += [(chunk, [])] + elif chunk.startswith('(assert_invalid'): + continue + elif chunk.startswith(('(assert', '(invoke')): + ret[-1][1].append(chunk) + return ret + + +def run_command(cmd, expected_status=0, stderr=None, + expected_err=None, err_contains=False): + if expected_err is not None: + assert stderr == subprocess.PIPE or stderr is None,\ + "Can't redirect stderr if using expected_err" + stderr = subprocess.PIPE + print 'executing: ', ' '.join(cmd) + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=stderr) + out, err = proc.communicate() + code = proc.returncode + if code != expected_status: + raise Exception(('run_command failed (%s)' % code, out + str(err or ''))) + err_correct = expected_err is None or \ + (expected_err in err if err_contains else expected_err == err) + if not err_correct: + raise Exception(('run_command unexpected stderr', + "expected '%s', actual '%s'" % (expected_err, err))) + return out diff --git a/src/binaryen/scripts/test/wasm2asm.py b/src/binaryen/scripts/test/wasm2asm.py new file mode 100755 index 0000000000..fe22e4f837 --- /dev/null +++ b/src/binaryen/scripts/test/wasm2asm.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python2 + +import os + +from support import run_command +from shared import (WASM2ASM, MOZJS, NODEJS, fail_if_not_identical, tests) + + +# tests with i64s, invokes, etc. +spec_tests = [os.path.join('spec', t) + for t in sorted(os.listdir(os.path.join('test', 'spec'))) + if '.fail' not in t] +extra_tests = [os.path.join('wasm2asm', t) for t in + sorted(os.listdir(os.path.join('test', 'wasm2asm')))] +assert_tests = ['wasm2asm.wast.asserts'] + + +def test_wasm2asm_output(): + for wasm in tests + spec_tests + extra_tests: + if not wasm.endswith('.wast'): + continue + + asm = os.path.basename(wasm).replace('.wast', '.2asm.js') + expected_file = os.path.join('test', asm) + + if not os.path.exists(expected_file): + continue + + print '..', wasm + + cmd = WASM2ASM + [os.path.join('test', wasm)] + out = run_command(cmd) + expected = open(expected_file).read() + fail_if_not_identical(out, expected) + + if not NODEJS and not MOZJS: + print 'No JS interpreters. Skipping spec tests.' + continue + + open('a.2asm.js', 'w').write(out) + + cmd += ['--allow-asserts'] + out = run_command(cmd) + + open('a.2asm.asserts.js', 'w').write(out) + + # verify asm.js is valid js + if NODEJS: + out = run_command([NODEJS, 'a.2asm.js']) + fail_if_not_identical(out, '') + out = run_command([NODEJS, 'a.2asm.asserts.js'], expected_err='') + fail_if_not_identical(out, '') + + if MOZJS: + # verify asm.js validates + # check only subset of err because mozjs emits timing info + out = run_command([MOZJS, '-w', 'a.2asm.js'], + expected_err='Successfully compiled asm.js code', + err_contains=True) + fail_if_not_identical(out, '') + out = run_command([MOZJS, 'a.2asm.asserts.js'], expected_err='') + fail_if_not_identical(out, '') + + +def test_asserts_output(): + for wasm in assert_tests: + print '..', wasm + + asserts = os.path.basename(wasm).replace('.wast.asserts', '.asserts.js') + traps = os.path.basename(wasm).replace('.wast.asserts', '.traps.js') + asserts_expected_file = os.path.join('test', asserts) + traps_expected_file = os.path.join('test', traps) + + cmd = WASM2ASM + [os.path.join('test', wasm), '--allow-asserts'] + out = run_command(cmd) + expected = open(asserts_expected_file).read() + fail_if_not_identical(out, expected) + + cmd += ['--pedantic'] + out = run_command(cmd) + expected = open(traps_expected_file).read() + fail_if_not_identical(out, expected) + + +def test_wasm2asm(): + print '\n[ checking wasm2asm testcases... ]\n' + test_wasm2asm_output() + test_asserts_output() + + +if __name__ == "__main__": + test_wasm2asm() diff --git a/src/binaryen/setup.cfg b/src/binaryen/setup.cfg new file mode 100644 index 0000000000..46134f4707 --- /dev/null +++ b/src/binaryen/setup.cfg @@ -0,0 +1,4 @@ +[pep8] +ignore = E111,E114 +[flake8] +ignore = E111,E114 diff --git a/src/binaryen/src/asm2wasm.h b/src/binaryen/src/asm2wasm.h new file mode 100644 index 0000000000..6a3e15b29a --- /dev/null +++ b/src/binaryen/src/asm2wasm.h @@ -0,0 +1,2666 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// asm.js-to-WebAssembly translator. Uses the Emscripten optimizer +// infrastructure. +// + +#ifndef wasm_asm2wasm_h +#define wasm_asm2wasm_h + +#include "wasm.h" +#include "emscripten-optimizer/optimizer.h" +#include "mixed_arena.h" +#include "shared-constants.h" +#include "asmjs/shared-constants.h" +#include "asm_v_wasm.h" +#include "passes/passes.h" +#include "pass.h" +#include "parsing.h" +#include "ir/bits.h" +#include "ir/branch-utils.h" +#include "ir/literal-utils.h" +#include "ir/trapping.h" +#include "ir/utils.h" +#include "wasm-builder.h" +#include "wasm-emscripten.h" +#include "wasm-module-building.h" + +namespace wasm { + +using namespace cashew; + +// Names + +Name I32_CTTZ("i32_cttz"), + I32_CTPOP("i32_ctpop"), + I32_BC2F("i32_bc2f"), + I32_BC2I("i32_bc2i"), + I64("i64"), + I64_CONST("i64_const"), + I64_ADD("i64_add"), + I64_SUB("i64_sub"), + I64_MUL("i64_mul"), + I64_UDIV("i64_udiv"), + I64_SDIV("i64_sdiv"), + I64_UREM("i64_urem"), + I64_SREM("i64_srem"), + I64_AND("i64_and"), + I64_OR("i64_or"), + I64_XOR("i64_xor"), + I64_SHL("i64_shl"), + I64_ASHR("i64_ashr"), + I64_LSHR("i64_lshr"), + I64_EQ("i64_eq"), + I64_NE("i64_ne"), + I64_ULE("i64_ule"), + I64_SLE("i64_sle"), + I64_UGE("i64_uge"), + I64_SGE("i64_sge"), + I64_ULT("i64_ult"), + I64_SLT("i64_slt"), + I64_UGT("i64_ugt"), + I64_SGT("i64_sgt"), + I64_TRUNC("i64_trunc"), + I64_SEXT("i64_sext"), + I64_ZEXT("i64_zext"), + I64_S2F("i64_s2f"), + I64_S2D("i64_s2d"), + I64_U2F("i64_u2f"), + I64_U2D("i64_u2d"), + I64_F2S("i64_f2s"), + I64_D2S("i64_d2s"), + I64_F2U("i64_f2u"), + I64_D2U("i64_d2u"), + I64_BC2D("i64_bc2d"), + I64_BC2I("i64_bc2i"), + I64_CTTZ("i64_cttz"), + I64_CTLZ("i64_ctlz"), + I64_CTPOP("i64_ctpop"), + F32_COPYSIGN("f32_copysign"), + F64_COPYSIGN("f64_copysign"), + LOAD1("load1"), + LOAD2("load2"), + LOAD4("load4"), + LOAD8("load8"), + LOADF("loadf"), + LOADD("loadd"), + STORE1("store1"), + STORE2("store2"), + STORE4("store4"), + STORE8("store8"), + STOREF("storef"), + STORED("stored"), + FTCALL("ftCall_"), + MFTCALL("mftCall_"), + MAX_("max"), + MIN_("min"), + ATOMICS("Atomics"), + ATOMICS_LOAD("load"), + ATOMICS_STORE("store"), + ATOMICS_EXCHANGE("exchange"), + ATOMICS_COMPARE_EXCHANGE("compareExchange"), + ATOMICS_ADD("add"), + ATOMICS_SUB("sub"), + ATOMICS_AND("and"), + ATOMICS_OR("or"), + ATOMICS_XOR("xor"), + I64_ATOMICS_LOAD("i64_atomics_load"), + I64_ATOMICS_STORE("i64_atomics_store"), + I64_ATOMICS_AND("i64_atomics_and"), + I64_ATOMICS_OR("i64_atomics_or"), + I64_ATOMICS_XOR("i64_atomics_xor"), + I64_ATOMICS_ADD("i64_atomics_add"), + I64_ATOMICS_SUB("i64_atomics_sub"), + I64_ATOMICS_EXCHANGE("i64_atomics_exchange"), + I64_ATOMICS_COMPAREEXCHANGE("i64_atomics_compareExchange"), + EMSCRIPTEN_DEBUGINFO("emscripten_debuginfo"); + +// Utilities + +static void abort_on(std::string why, Ref element) { + std::cerr << why << ' '; + element->stringify(std::cerr); + std::cerr << '\n'; + abort(); +} +static void abort_on(std::string why, IString element) { + std::cerr << why << ' ' << element.str << '\n'; + abort(); +} + +Index indexOr(Index x, Index y) { + return x ? x : y; +} + +// useful when we need to see our parent, in an asm.js expression stack +struct AstStackHelper { + static std::vector astStack; + AstStackHelper(Ref curr) { + astStack.push_back(curr); + } + ~AstStackHelper() { + astStack.pop_back(); + } + Ref getParent() { + if (astStack.size() >= 2) { + return astStack[astStack.size()-2]; + } else { + return Ref(); + } + } +}; + +std::vector AstStackHelper::astStack; + +static bool startsWith(const char* string, const char *prefix) { + while (1) { + if (*prefix == 0) return true; + if (*string == 0) return false; + if (*string++ != *prefix++) return false; + } +}; + +// +// Asm2WasmPreProcessor - does some initial parsing/processing +// of asm.js code. +// + +struct Asm2WasmPreProcessor { + bool memoryGrowth = false; + bool debugInfo = false; + + std::vector debugInfoFileNames; + std::unordered_map debugInfoFileIndices; + + char* allocatedCopy = nullptr; + + ~Asm2WasmPreProcessor() { + if (allocatedCopy) free(allocatedCopy); + } + + char* process(char* input) { + // emcc --separate-asm modules can look like + // + // Module["asm"] = (function(global, env, buffer) { + // .. + // }); + // + // we need to clean that up. + if (*input == 'M') { + size_t num = strlen(input); + while (*input != 'f') { + input++; + num--; + } + char *end = input + num - 1; + while (*end != '}') { + *end = 0; + end--; + } + } + + // asm.js memory growth uses a quite elaborate pattern. Instead of parsing and + // matching it, we do a simpler detection on emscripten's asm.js output format + const char* START_FUNCS = "// EMSCRIPTEN_START_FUNCS"; + char *marker = strstr(input, START_FUNCS); + if (marker) { + *marker = 0; // look for memory growth code just up to here, as an optimization + } + char *growthSign = strstr(input, "return true;"); // this can only show up in growth code, as normal asm.js lacks "true" + if (growthSign) { + memoryGrowth = true; + // clean out this function, we don't need it. first where it starts + char *growthFuncStart = growthSign; + while (*growthFuncStart != '{') growthFuncStart--; // skip body + while (*growthFuncStart != '(') growthFuncStart--; // skip params + while (*growthFuncStart != ' ') growthFuncStart--; // skip function name + while (*growthFuncStart != 'f') growthFuncStart--; // skip 'function' + assert(strstr(growthFuncStart, "function ") == growthFuncStart); + char *growthFuncEnd = strchr(growthSign, '}'); + assert(growthFuncEnd > growthFuncStart + 5); + growthFuncStart[0] = '/'; + growthFuncStart[1] = '*'; + growthFuncEnd--; + growthFuncEnd[0] = '*'; + growthFuncEnd[1] = '/'; + } + if (marker) { + *marker = START_FUNCS[0]; + } + + // handle debug info, if this build wants that. + if (debugInfo) { + // asm.js debug info comments look like + // ..command..; //@line 4 "tests/hello_world.c" + // we convert those into emscripten_debuginfo(file, line) + // calls, where the params are indices into a mapping. then + // the compiler and optimizer can operate on them. after + // that, we can apply the debug info to the wasm node right + // before it - this is guaranteed to be correct without opts, + // and is usually decently accurate with them. + const auto SCALE_FACTOR = 1.25; // an upper bound on how much more space we need as a multiple of the original + const auto ADD_FACTOR = 100; // an upper bound on how much we write for each debug info element itself + auto size = strlen(input); + auto upperBound = Index(size * SCALE_FACTOR) + ADD_FACTOR; + char* copy = allocatedCopy = (char*)malloc(upperBound); + char* end = copy + upperBound; + char* out = copy; + std::string DEBUGINFO_INTRINSIC = EMSCRIPTEN_DEBUGINFO.str; + auto DEBUGINFO_INTRINSIC_SIZE = DEBUGINFO_INTRINSIC.size(); + bool seenUseAsm = false; + while (input[0]) { + if (out + ADD_FACTOR >= end) { + Fatal() << "error in handling debug info"; + } + if (startsWith(input, "//@line")) { + char* linePos = input + 8; + char* lineEnd = strchr(input + 8, ' '); + char* filePos = strchr(lineEnd, '"') + 1; + char* fileEnd = strchr(filePos, '"'); + input = fileEnd + 1; + *lineEnd = 0; + *fileEnd = 0; + std::string line = linePos, file = filePos; + auto iter = debugInfoFileIndices.find(file); + if (iter == debugInfoFileIndices.end()) { + Index index = debugInfoFileNames.size(); + debugInfoFileNames.push_back(file); + debugInfoFileIndices[file] = index; + } + std::string fileIndex = std::to_string(debugInfoFileIndices[file]); + // write out the intrinsic + strcpy(out, DEBUGINFO_INTRINSIC.c_str()); + out += DEBUGINFO_INTRINSIC_SIZE; + *out++ = '('; + strcpy(out, fileIndex.c_str()); + out += fileIndex.size(); + *out++ = ','; + strcpy(out, line.c_str()); + out += line.size(); + *out++ = ')'; + *out++ = ';'; + } else if (!seenUseAsm && (startsWith(input, "asm'") || startsWith(input, "asm\""))) { + // end of "use asm" or "almost asm" + const auto SKIP = 5; // skip the end of "use asm"; (5 chars, a,s,m," or ',;) + seenUseAsm = true; + memcpy(out, input, SKIP); + out += SKIP; + input += SKIP; + // add a fake import for the intrinsic, so the module validates + std::string import = "\n var emscripten_debuginfo = env.emscripten_debuginfo;"; + strcpy(out, import.c_str()); + out += import.size(); + } else { + *out++ = *input++; + } + } + if (out >= end) { + Fatal() << "error in handling debug info"; + } + *out = 0; + input = copy; + } + + return input; + } +}; + +static CallImport* checkDebugInfo(Expression* curr) { + if (auto* call = curr->dynCast()) { + if (call->target == EMSCRIPTEN_DEBUGINFO) { + return call; + } + } + return nullptr; +} + +// Debug info appears in the ast as calls to the debug intrinsic. These are usually +// after the relevant node. We adjust them to a position that is not dce-able, so that +// they are not trivially removed when optimizing. +struct AdjustDebugInfo : public WalkerPass>> { + bool isFunctionParallel() override { return true; } + + Pass* create() override { return new AdjustDebugInfo(); } + + AdjustDebugInfo() { + name = "adjust-debug-info"; + } + + void visitBlock(Block* curr) { + // look for a debug info call that is unreachable + if (curr->list.size() == 0) return; + auto* back = curr->list.back(); + for (Index i = 1; i < curr->list.size(); i++) { + if (checkDebugInfo(curr->list[i]) && !checkDebugInfo(curr->list[i - 1])) { + // swap them + std::swap(curr->list[i - 1], curr->list[i]); + } + } + if (curr->list.back() != back) { + // we changed the last element, update the type + curr->finalize(); + } + } +}; + +// +// Asm2WasmBuilder - converts an asm.js module into WebAssembly +// + +class Asm2WasmBuilder { +public: + Module& wasm; + + MixedArena &allocator; + + Builder builder; + + std::unique_ptr optimizingBuilder; + + // globals + + struct MappedGlobal { + WasmType type; + bool import; // if true, this is an import - we should read the value, not just set a zero + IString module, base; + MappedGlobal() : type(none), import(false) {} + MappedGlobal(WasmType type) : type(type), import(false) {} + MappedGlobal(WasmType type, bool import, IString module, IString base) : type(type), import(import), module(module), base(base) {} + }; + + // function table + std::map functionTableStarts; // each asm function table gets a range in the one wasm table, starting at a location + + Asm2WasmPreProcessor& preprocessor; + bool debug; + TrapMode trapMode; + TrappingFunctionContainer trappingFunctions; + PassOptions passOptions; + bool legalizeJavaScriptFFI; + bool runOptimizationPasses; + bool wasmOnly; + +public: + std::map mappedGlobals; + +private: + void allocateGlobal(IString name, WasmType type) { + assert(mappedGlobals.find(name) == mappedGlobals.end()); + mappedGlobals.emplace(name, MappedGlobal(type)); + wasm.addGlobal(builder.makeGlobal( + name, + type, + LiteralUtils::makeZero(type, wasm), + Builder::Mutable + )); + } + + struct View { + unsigned bytes; + bool integer, signed_; + AsmType type; + View() : bytes(0) {} + View(unsigned bytes, bool integer, bool signed_, AsmType type) : bytes(bytes), integer(integer), signed_(signed_), type(type) {} + }; + + std::map views; // name (e.g. HEAP8) => view info + + // Imported names of Math.* + IString Math_imul; + IString Math_clz32; + IString Math_fround; + IString Math_abs; + IString Math_floor; + IString Math_ceil; + IString Math_sqrt; + IString Math_max; + IString Math_min; + + // Imported names of Atomics.* + IString Atomics_load; + IString Atomics_store; + IString Atomics_exchange; + IString Atomics_compareExchange; + IString Atomics_add; + IString Atomics_sub; + IString Atomics_and; + IString Atomics_or; + IString Atomics_xor; + + IString llvm_cttz_i32; + + IString tempDoublePtr; // imported name of tempDoublePtr + + // possibly-minified names, detected via their exports + IString udivmoddi4; + IString getTempRet0; + + // function types. we fill in this information as we see + // uses, in the first pass + + std::map> importedFunctionTypes; + + void noteImportedFunctionCall(Ref ast, WasmType resultType, CallImport* call) { + assert(ast[0] == CALL && ast[1]->isString()); + IString importName = ast[1]->getIString(); + auto type = make_unique(); + type->name = IString((std::string("type$") + importName.str).c_str(), false); // TODO: make a list of such types + type->result = resultType; + for (auto* operand : call->operands) { + type->params.push_back(operand->type); + } + // if we already saw this signature, verify it's the same (or else handle that) + if (importedFunctionTypes.find(importName) != importedFunctionTypes.end()) { + FunctionType* previous = importedFunctionTypes[importName].get(); + if (*type != *previous) { + // merge it in. we'll add on extra 0 parameters for ones not actually used, and upgrade types to + // double where there is a conflict (which is ok since in JS, double can contain everything + // i32 and f32 can). + for (size_t i = 0; i < type->params.size(); i++) { + if (previous->params.size() > i) { + if (previous->params[i] == none) { + previous->params[i] = type->params[i]; // use a more concrete type + } else if (previous->params[i] != type->params[i]) { + previous->params[i] = f64; // overloaded type, make it a double + } + } else { + previous->params.push_back(type->params[i]); // add a new param + } + } + // we accept none and a concrete type, but two concrete types mean we need to use an f64 to contain anything + if (previous->result == none) { + previous->result = type->result; // use a more concrete type + } else if (previous->result != type->result && type->result != none) { + previous->result = f64; // overloaded return type, make it a double + } + } + } else { + importedFunctionTypes[importName].swap(type); + } + } + + WasmType getResultTypeOfCallUsingParent(Ref parent, AsmData* data) { + auto result = none; + if (!!parent) { + // if the parent is a seq, we cannot be the last element in it (we would have a coercion, which would be + // the parent), so we must be (us, somethingElse), and so our return is void + if (parent[0] != SEQ) { + result = detectWasmType(parent, data); + } + } + return result; + } + + FunctionType* getFunctionType(Ref parent, ExpressionList& operands, AsmData* data) { + WasmType result = getResultTypeOfCallUsingParent(parent, data); + return ensureFunctionType(getSig(result, operands), &wasm); + } + +public: + Asm2WasmBuilder(Module& wasm, Asm2WasmPreProcessor& preprocessor, bool debug, TrapMode trapMode, PassOptions passOptions, bool legalizeJavaScriptFFI, bool runOptimizationPasses, bool wasmOnly) + : wasm(wasm), + allocator(wasm.allocator), + builder(wasm), + preprocessor(preprocessor), + debug(debug), + trapMode(trapMode), + trappingFunctions(trapMode, wasm, /* immediate = */ true), + passOptions(passOptions), + legalizeJavaScriptFFI(legalizeJavaScriptFFI), + runOptimizationPasses(runOptimizationPasses), + wasmOnly(wasmOnly) {} + + void processAsm(Ref ast); + +private: + AsmType detectAsmType(Ref ast, AsmData *data) { + if (ast->isString()) { + IString name = ast->getIString(); + if (!data->isLocal(name)) { + // must be global + assert(mappedGlobals.find(name) != mappedGlobals.end()); + return wasmToAsmType(mappedGlobals[name].type); + } + } else if (ast->isArray(SUB) && ast[1]->isString()) { + // could be a heap access, use view info + auto view = views.find(ast[1]->getIString()); + if (view != views.end()) { + return view->second.type; + } + } + return detectType(ast, data, false, Math_fround, wasmOnly); + } + + WasmType detectWasmType(Ref ast, AsmData *data) { + return asmToWasmType(detectAsmType(ast, data)); + } + + bool isUnsignedCoercion(Ref ast) { + return detectSign(ast, Math_fround) == ASM_UNSIGNED; + } + + bool isParentUnsignedCoercion(Ref parent) { + // parent may not exist, or may be a non-relevant node + if (!!parent && parent->isArray() && parent[0] == BINARY && isUnsignedCoercion(parent)) { + return true; + } + return false; + } + + BinaryOp parseAsmBinaryOp(IString op, Ref left, Ref right, Expression* leftWasm, Expression* rightWasm) { + WasmType leftType = leftWasm->type; + bool isInteger = leftType == WasmType::i32; + + if (op == PLUS) return isInteger ? BinaryOp::AddInt32 : (leftType == f32 ? BinaryOp::AddFloat32 : BinaryOp::AddFloat64); + if (op == MINUS) return isInteger ? BinaryOp::SubInt32 : (leftType == f32 ? BinaryOp::SubFloat32 : BinaryOp::SubFloat64); + if (op == MUL) return isInteger ? BinaryOp::MulInt32 : (leftType == f32 ? BinaryOp::MulFloat32 : BinaryOp::MulFloat64); + if (op == AND) return BinaryOp::AndInt32; + if (op == OR) return BinaryOp::OrInt32; + if (op == XOR) return BinaryOp::XorInt32; + if (op == LSHIFT) return BinaryOp::ShlInt32; + if (op == RSHIFT) return BinaryOp::ShrSInt32; + if (op == TRSHIFT) return BinaryOp::ShrUInt32; + if (op == EQ) return isInteger ? BinaryOp::EqInt32 : (leftType == f32 ? BinaryOp::EqFloat32 : BinaryOp::EqFloat64); + if (op == NE) return isInteger ? BinaryOp::NeInt32 : (leftType == f32 ? BinaryOp::NeFloat32 : BinaryOp::NeFloat64); + + bool isUnsigned = isUnsignedCoercion(left) || isUnsignedCoercion(right); + + if (op == DIV) { + if (isInteger) { + return isUnsigned ? BinaryOp::DivUInt32 : BinaryOp::DivSInt32; + } + return leftType == f32 ? BinaryOp::DivFloat32 : BinaryOp::DivFloat64; + } + if (op == MOD) { + if (isInteger) { + return isUnsigned ? BinaryOp::RemUInt32 : BinaryOp::RemSInt32; + } + return BinaryOp::RemSInt32; // XXX no floating-point remainder op, this must be handled by the caller + } + if (op == GE) { + if (isInteger) { + return isUnsigned ? BinaryOp::GeUInt32 : BinaryOp::GeSInt32; + } + return leftType == f32 ? BinaryOp::GeFloat32 : BinaryOp::GeFloat64; + } + if (op == GT) { + if (isInteger) { + return isUnsigned ? BinaryOp::GtUInt32 : BinaryOp::GtSInt32; + } + return leftType == f32 ? BinaryOp::GtFloat32 : BinaryOp::GtFloat64; + } + if (op == LE) { + if (isInteger) { + return isUnsigned ? BinaryOp::LeUInt32 : BinaryOp::LeSInt32; + } + return leftType == f32 ? BinaryOp::LeFloat32 : BinaryOp::LeFloat64; + } + if (op == LT) { + if (isInteger) { + return isUnsigned ? BinaryOp::LtUInt32 : BinaryOp::LtSInt32; + } + return leftType == f32 ? BinaryOp::LtFloat32 : BinaryOp::LtFloat64; + } + abort_on("bad wasm binary op", op); + abort(); // avoid warning + } + + int32_t bytesToShift(unsigned bytes) { + switch (bytes) { + case 1: return 0; + case 2: return 1; + case 4: return 2; + case 8: return 3; + default: {} + } + abort(); + return -1; // avoid warning + } + + std::map tempNums; + + Literal checkLiteral(Ref ast, bool rawIsInteger = true) { + if (ast->isNumber()) { + if (rawIsInteger) { + return Literal((int32_t)ast->getInteger()); + } else { + return Literal(ast->getNumber()); + } + } else if (ast->isArray(UNARY_PREFIX)) { + if (ast[1] == PLUS && ast[2]->isNumber()) { + return Literal((double)ast[2]->getNumber()); + } + if (ast[1] == MINUS && ast[2]->isNumber()) { + double num = -ast[2]->getNumber(); + if (isSInteger32(num)) return Literal((int32_t)num); + if (isUInteger32(num)) return Literal((uint32_t)num); + assert(false && "expected signed or unsigned int32"); + } + if (ast[1] == PLUS && ast[2]->isArray(UNARY_PREFIX) && ast[2][1] == MINUS && ast[2][2]->isNumber()) { + return Literal((double)-ast[2][2]->getNumber()); + } + if (ast[1] == MINUS && ast[2]->isArray(UNARY_PREFIX) && ast[2][1] == PLUS && ast[2][2]->isNumber()) { + return Literal((double)-ast[2][2]->getNumber()); + } + } else if (wasmOnly && ast->isArray(CALL) && ast[1]->isString() && ast[1] == I64_CONST) { + uint64_t low = ast[2][0]->getNumber(); + uint64_t high = ast[2][1]->getNumber(); + return Literal(uint64_t(low + (high << 32))); + } + return Literal(); + } + + Literal getLiteral(Ref ast) { + Literal ret = checkLiteral(ast); + if (ret.type == none) abort(); + return ret; + } + + void fixCallType(Expression* call, WasmType type) { + if (call->is()) call->cast()->type = type; + if (call->is()) call->cast()->type = type; + else if (call->is()) call->cast()->type = type; + } + + FunctionType* getBuiltinFunctionType(Name module, Name base, ExpressionList* operands = nullptr) { + if (module == GLOBAL_MATH) { + if (base == ABS) { + assert(operands && operands->size() == 1); + WasmType type = (*operands)[0]->type; + if (type == i32) return ensureFunctionType("ii", &wasm); + if (type == f32) return ensureFunctionType("ff", &wasm); + if (type == f64) return ensureFunctionType("dd", &wasm); + } + } + return nullptr; + } + + // ensure a nameless block + Block* blockify(Expression* expression) { + if (expression->is() && !expression->cast()->name.is()) return expression->dynCast(); + auto ret = allocator.alloc(); + ret->list.push_back(expression); + ret->finalize(); + return ret; + } + + Expression* ensureDouble(Expression* expr) { + return wasm::ensureDouble(expr, allocator); + } + + Expression* truncateToInt32(Expression* value) { + if (value->type == i64) return builder.makeUnary(UnaryOp::WrapInt64, value); + // either i32, or a call_import whose type we don't know yet (but would be legalized to i32 anyhow) + return value; + } + + Function* processFunction(Ref ast); +}; + +void Asm2WasmBuilder::processAsm(Ref ast) { + assert(ast[0] == TOPLEVEL); + Ref asmFunction = ast[1][0]; + assert(asmFunction[0] == DEFUN); + Ref body = asmFunction[3]; + assert(body[0][0] == STRING && (body[0][1]->getIString() == IString("use asm") || body[0][1]->getIString() == IString("almost asm"))); + + auto addImport = [&](IString name, Ref imported, WasmType type) { + assert(imported[0] == DOT); + Ref module = imported[1]; + IString moduleName; + if (module->isArray(DOT)) { + // we can have (global.Math).floor; skip the 'Math' + assert(module[1]->isString()); + if (module[2] == MATH) { + if (imported[2] == IMUL) { + assert(Math_imul.isNull()); + Math_imul = name; + return; + } else if (imported[2] == CLZ32) { + assert(Math_clz32.isNull()); + Math_clz32 = name; + return; + } else if (imported[2] == FROUND) { + assert(Math_fround.isNull()); + Math_fround = name; + return; + } else if (imported[2] == ABS) { + assert(Math_abs.isNull()); + Math_abs = name; + return; + } else if (imported[2] == FLOOR) { + assert(Math_floor.isNull()); + Math_floor = name; + return; + } else if (imported[2] == CEIL) { + assert(Math_ceil.isNull()); + Math_ceil = name; + return; + } else if (imported[2] == SQRT) { + assert(Math_sqrt.isNull()); + Math_sqrt = name; + return; + } else if (imported[2] == MAX_) { + assert(Math_max.isNull()); + Math_max = name; + return; + } else if (imported[2] == MIN_) { + assert(Math_min.isNull()); + Math_min = name; + return; + } + } else if (module[2] == ATOMICS) { + if (imported[2] == ATOMICS_LOAD) { + assert(Atomics_load.isNull()); + Atomics_load = name; + return; + } else if (imported[2] == ATOMICS_STORE) { + assert(Atomics_store.isNull()); + Atomics_store = name; + return; + } else if (imported[2] == ATOMICS_EXCHANGE) { + assert(Atomics_exchange.isNull()); + Atomics_exchange = name; + return; + } else if (imported[2] == ATOMICS_COMPARE_EXCHANGE) { + assert(Atomics_compareExchange.isNull()); + Atomics_compareExchange = name; + return; + } else if (imported[2] == ATOMICS_ADD) { + assert(Atomics_add.isNull()); + Atomics_add = name; + return; + } else if (imported[2] == ATOMICS_SUB) { + assert(Atomics_sub.isNull()); + Atomics_sub = name; + return; + } else if (imported[2] == ATOMICS_AND) { + assert(Atomics_and.isNull()); + Atomics_and = name; + return; + } else if (imported[2] == ATOMICS_OR) { + assert(Atomics_or.isNull()); + Atomics_or = name; + return; + } else if (imported[2] == ATOMICS_XOR) { + assert(Atomics_xor.isNull()); + Atomics_xor = name; + return; + } + } + std::string fullName = module[1]->getCString(); + fullName += '.'; + fullName += + module[2]->getCString(); + moduleName = IString(fullName.c_str(), false); + } else { + assert(module->isString()); + moduleName = module->getIString(); + if (moduleName == ENV) { + auto base = imported[2]->getIString(); + if (base == TEMP_DOUBLE_PTR) { + assert(tempDoublePtr.isNull()); + tempDoublePtr = name; + // we don't return here, as we can only optimize out some uses of tDP. So it remains imported + } else if (base == LLVM_CTTZ_I32) { + assert(llvm_cttz_i32.isNull()); + llvm_cttz_i32 = name; + return; + } + } + } + auto import = new Import(); + import->name = name; + import->module = moduleName; + import->base = imported[2]->getIString(); + // special-case some asm builtins + if (import->module == GLOBAL && (import->base == NAN_ || import->base == INFINITY_)) { + type = WasmType::f64; + } + if (type != WasmType::none) { + // this is a global + import->kind = ExternalKind::Global; + import->globalType = type; + mappedGlobals.emplace(name, type); + // tableBase and memoryBase are used as segment/element offsets, and must be constant; + // otherwise, an asm.js import of a constant is mutable, e.g. STACKTOP + if (name != "tableBase" && name != "memoryBase") { + // we need imported globals to be mutable, but wasm doesn't support that yet, so we must + // import an immutable and create a mutable global initialized to its value + import->name = Name(std::string(import->name.str) + "$asm2wasm$import"); + { + wasm.addGlobal(builder.makeGlobal( + name, + type, + builder.makeGetGlobal(import->name, type), + Builder::Mutable + )); + } + } + } else { + import->kind = ExternalKind::Function; + } + wasm.addImport(import); + }; + + IString Int8Array, Int16Array, Int32Array, UInt8Array, UInt16Array, UInt32Array, Float32Array, Float64Array; + + // set up optimization + + if (runOptimizationPasses) { + Index numFunctions = 0; + for (unsigned i = 1; i < body->size(); i++) { + if (body[i][0] == DEFUN) numFunctions++; + } + optimizingBuilder = make_unique(&wasm, numFunctions, passOptions, [&](PassRunner& passRunner) { + // addPrePasses + if (debug) { + passRunner.setDebug(true); + passRunner.setValidateGlobally(false); + } + // run autodrop first, before optimizations + passRunner.add(); + if (preprocessor.debugInfo) { + // fix up debug info to better survive optimization + passRunner.add(); + } + // optimize relooper label variable usage at the wasm level, where it is easy + passRunner.add("relooper-jump-threading"); + }, [&]() { + // beforeGlobalOptimizations + // if we added any helper functions (like non-trapping i32-div, etc.), then those + // have not been optimized (the optimizing builder has just been fed the asm.js + // functions). Optimize those now. Typically there are very few, just do it + // sequentially. + PassRunner passRunner(&wasm, passOptions); + passRunner.addDefaultFunctionOptimizationPasses(); + for (auto& pair : trappingFunctions.getFunctions()) { + auto* func = pair.second; + passRunner.runFunction(func); + } + }, debug, false /* do not validate globally yet */); + } + + // if we see no function tables in the processing below, then the table still exists and has size 0 + + wasm.table.initial = wasm.table.max = 0; + + // first pass - do almost everything, but function imports and indirect calls + + for (unsigned i = 1; i < body->size(); i++) { + Ref curr = body[i]; + if (curr[0] == VAR) { + // import, global, or table + for (unsigned j = 0; j < curr[1]->size(); j++) { + Ref pair = curr[1][j]; + IString name = pair[0]->getIString(); + Ref value = pair[1]; + if (value->isNumber()) { + // global int + assert(value->getNumber() == 0); + allocateGlobal(name, WasmType::i32); + } else if (value[0] == BINARY) { + // int import + assert(value[1] == OR && value[3]->isNumber() && value[3]->getNumber() == 0); + Ref import = value[2]; // env.what + addImport(name, import, WasmType::i32); + } else if (value[0] == UNARY_PREFIX) { + // double import or global + assert(value[1] == PLUS); + Ref import = value[2]; + if (import->isNumber()) { + // global + assert(import->getNumber() == 0); + allocateGlobal(name, WasmType::f64); + } else { + // import + addImport(name, import, WasmType::f64); + } + } else if (value[0] == CALL) { + assert(value[1]->isString() && value[1] == Math_fround && value[2][0]->isNumber() && value[2][0]->getNumber() == 0); + allocateGlobal(name, WasmType::f32); + } else if (value[0] == DOT) { + // simple module.base import. can be a view, or a function. + if (value[1]->isString()) { + IString module = value[1]->getIString(); + IString base = value[2]->getIString(); + if (module == GLOBAL) { + if (base == INT8ARRAY) { + Int8Array = name; + } else if (base == INT16ARRAY) { + Int16Array = name; + } else if (base == INT32ARRAY) { + Int32Array = name; + } else if (base == UINT8ARRAY) { + UInt8Array = name; + } else if (base == UINT16ARRAY) { + UInt16Array = name; + } else if (base == UINT32ARRAY) { + UInt32Array = name; + } else if (base == FLOAT32ARRAY) { + Float32Array = name; + } else if (base == FLOAT64ARRAY) { + Float64Array = name; + } + } + } + // function import + addImport(name, value, WasmType::none); + } else if (value[0] == NEW) { + // ignore imports of typed arrays, but note the names of the arrays + value = value[1]; + assert(value[0] == CALL); + unsigned bytes; + bool integer, signed_; + AsmType asmType; + Ref constructor = value[1]; + if (constructor->isArray(DOT)) { // global.*Array + IString heap = constructor[2]->getIString(); + if (heap == INT8ARRAY) { + bytes = 1; integer = true; signed_ = true; asmType = ASM_INT; + } else if (heap == INT16ARRAY) { + bytes = 2; integer = true; signed_ = true; asmType = ASM_INT; + } else if (heap == INT32ARRAY) { + bytes = 4; integer = true; signed_ = true; asmType = ASM_INT; + } else if (heap == UINT8ARRAY) { + bytes = 1; integer = true; signed_ = false; asmType = ASM_INT; + } else if (heap == UINT16ARRAY) { + bytes = 2; integer = true; signed_ = false; asmType = ASM_INT; + } else if (heap == UINT32ARRAY) { + bytes = 4; integer = true; signed_ = false; asmType = ASM_INT; + } else if (heap == FLOAT32ARRAY) { + bytes = 4; integer = false; signed_ = true; asmType = ASM_FLOAT; + } else if (heap == FLOAT64ARRAY) { + bytes = 8; integer = false; signed_ = true; asmType = ASM_DOUBLE; + } else { + abort_on("invalid view import", heap); + } + } else { // *ArrayView that was previously imported + assert(constructor->isString()); + IString viewName = constructor->getIString(); + if (viewName == Int8Array) { + bytes = 1; integer = true; signed_ = true; asmType = ASM_INT; + } else if (viewName == Int16Array) { + bytes = 2; integer = true; signed_ = true; asmType = ASM_INT; + } else if (viewName == Int32Array) { + bytes = 4; integer = true; signed_ = true; asmType = ASM_INT; + } else if (viewName == UInt8Array) { + bytes = 1; integer = true; signed_ = false; asmType = ASM_INT; + } else if (viewName == UInt16Array) { + bytes = 2; integer = true; signed_ = false; asmType = ASM_INT; + } else if (viewName == UInt32Array) { + bytes = 4; integer = true; signed_ = false; asmType = ASM_INT; + } else if (viewName == Float32Array) { + bytes = 4; integer = false; signed_ = true; asmType = ASM_FLOAT; + } else if (viewName == Float64Array) { + bytes = 8; integer = false; signed_ = true; asmType = ASM_DOUBLE; + } else { + abort_on("invalid short view import", viewName); + } + } + assert(views.find(name) == views.end()); + views.emplace(name, View(bytes, integer, signed_, asmType)); + } else if (value[0] == ARRAY) { + // function table. we merge them into one big table, so e.g. [foo, b1] , [b2, bar] => [foo, b1, b2, bar] + // TODO: when not using aliasing function pointers, we could merge them by noticing that + // index 0 in each table is the null func, and each other index should only have one + // non-null func. However, that breaks down when function pointer casts are emulated. + if (wasm.table.segments.size() == 0) { + wasm.table.segments.emplace_back(builder.makeGetGlobal(Name("tableBase"), i32)); + } + auto& segment = wasm.table.segments[0]; + functionTableStarts[name] = segment.data.size(); // this table starts here + Ref contents = value[1]; + for (unsigned k = 0; k < contents->size(); k++) { + IString curr = contents[k]->getIString(); + segment.data.push_back(curr); + } + wasm.table.initial = wasm.table.max = segment.data.size(); + } else { + abort_on("invalid var element", pair); + } + } + } else if (curr[0] == DEFUN) { + // function + auto* func = processFunction(curr); + if (wasm.getFunctionOrNull(func->name)) { + Fatal() << "duplicate function: " << func->name; + } + if (runOptimizationPasses) { + optimizingBuilder->addFunction(func); + } else { + wasm.addFunction(func); + } + } else if (curr[0] == RETURN) { + // exports + Ref object = curr[1]; + Ref contents = object[1]; + std::map exported; + for (unsigned k = 0; k < contents->size(); k++) { + Ref pair = contents[k]; + IString key = pair[0]->getIString(); + if (pair[1]->isString()) { + // exporting a function + IString value = pair[1]->getIString(); + if (key == Name("_emscripten_replace_memory")) { + // asm.js memory growth provides this special non-asm function, which we don't need (we use grow_memory) + assert(!wasm.getFunctionOrNull(value)); + continue; + } else if (key == UDIVMODDI4) { + udivmoddi4 = value; + } else if (key == GET_TEMP_RET0) { + getTempRet0 = value; + } + if (exported.count(key) > 0) { + // asm.js allows duplicate exports, but not wasm. use the last, like asm.js + exported[key]->value = value; + } else { + auto* export_ = new Export; + export_->name = key; + export_->value = value; + export_->kind = ExternalKind::Function; + wasm.addExport(export_); + exported[key] = export_; + } + } else { + // export a number. create a global and export it + assert(pair[1]->isNumber()); + assert(exported.count(key) == 0); + auto value = pair[1]->getInteger(); + auto* global = builder.makeGlobal( + key, + i32, + builder.makeConst(Literal(int32_t(value))), + Builder::Immutable + ); + wasm.addGlobal(global); + auto* export_ = new Export; + export_->name = key; + export_->value = global->name; + export_->kind = ExternalKind::Global; + wasm.addExport(export_); + exported[key] = export_; + } + } + } + } + + if (runOptimizationPasses) { + optimizingBuilder->finish(); + } + wasm.debugInfoFileNames = std::move(preprocessor.debugInfoFileNames); + + // second pass. first, function imports + + std::vector toErase; + + for (auto& import : wasm.imports) { + if (import->kind != ExternalKind::Function) continue; + IString name = import->name; + if (importedFunctionTypes.find(name) != importedFunctionTypes.end()) { + // special math builtins + FunctionType* builtin = getBuiltinFunctionType(import->module, import->base); + if (builtin) { + import->functionType = builtin->name; + continue; + } + import->functionType = ensureFunctionType(getSig(importedFunctionTypes[name].get()), &wasm)->name; + } else if (import->module != ASM2WASM) { // special-case the special module + // never actually used, which means we don't know the function type since the usage tells us, so illegal for it to remain + toErase.push_back(name); + } + } + + for (auto curr : toErase) { + wasm.removeImport(curr); + } + + // Finalize calls now that everything is known and generated + + struct FinalizeCalls : public WalkerPass> { + bool isFunctionParallel() override { return true; } + + Pass* create() override { return new FinalizeCalls(parent); } + + Asm2WasmBuilder* parent; + + FinalizeCalls(Asm2WasmBuilder* parent) : parent(parent) { + name = "finalize-calls"; + } + + void visitCall(Call* curr) { + if (!getModule()->getFunctionOrNull(curr->target)) { + std::cerr << "invalid call target: " << curr->target << '\n'; + WASM_UNREACHABLE(); + } + auto result = getModule()->getFunction(curr->target)->result; + if (curr->type != result) { + curr->type = result; + } + } + + void visitCallImport(CallImport* curr) { + // fill out call_import - add extra params as needed, etc. asm tolerates ffi overloading, wasm does not + auto iter = parent->importedFunctionTypes.find(curr->target); + if (iter == parent->importedFunctionTypes.end()) return; // one of our fake imports for callIndirect fixups + auto type = iter->second.get(); + for (size_t i = 0; i < type->params.size(); i++) { + if (i >= curr->operands.size()) { + // add a new param + auto val = parent->allocator.alloc(); + val->type = val->value.type = type->params[i]; + curr->operands.push_back(val); + } else if (curr->operands[i]->type != type->params[i]) { + // if the param is used, then we have overloading here and the combined type must be f64; + // if this is an unreachable param, then it doesn't matter. + assert(type->params[i] == f64 || curr->operands[i]->type == unreachable); + // overloaded, upgrade to f64 + switch (curr->operands[i]->type) { + case i32: curr->operands[i] = parent->builder.makeUnary(ConvertSInt32ToFloat64, curr->operands[i]); break; + case f32: curr->operands[i] = parent->builder.makeUnary(PromoteFloat32, curr->operands[i]); break; + default: {} // f64, unreachable, etc., are all good + } + } + } + Module* wasm = getModule(); + auto importResult = wasm->getFunctionType(wasm->getImport(curr->target)->functionType)->result; + if (curr->type != importResult) { + auto old = curr->type; + curr->type = importResult; + if (importResult == f64) { + // we use a JS f64 value which is the most general, and convert to it + switch (old) { + case i32: { + Unary* trunc = parent->builder.makeUnary(TruncSFloat64ToInt32, curr); + replaceCurrent(makeTrappingUnary(trunc, parent->trappingFunctions)); + break; + } + case f32: { + replaceCurrent(parent->builder.makeUnary(DemoteFloat64, curr)); + break; + } + case none: { + // this function returns a value, but we are not using it, so it must be dropped. + // autodrop will do that for us. + break; + } + default: WASM_UNREACHABLE(); + } + } else { + assert(old == none); + // we don't want a return value here, but the import does provide one + // autodrop will do that for us. + } + } + } + + void visitCallIndirect(CallIndirect* curr) { + // we already call into target = something + offset, where offset is a callImport with the name of the table. replace that with the table offset + // note that for an ftCall or mftCall, we have no asm.js mask, so have nothing to do here + auto* target = curr->target; + // might be a block with a fallthrough + if (auto* block = target->dynCast()) { + target = block->list.back(); + } + auto* add = target->dynCast(); + if (!add) return; + if (add->right->is()) { + auto* offset = add->right->cast(); + auto tableName = offset->target; + if (parent->functionTableStarts.find(tableName) == parent->functionTableStarts.end()) return; + add->right = parent->builder.makeConst(Literal((int32_t)parent->functionTableStarts[tableName])); + } else { + auto* offset = add->left->dynCast(); + if (!offset) return; + auto tableName = offset->target; + if (parent->functionTableStarts.find(tableName) == parent->functionTableStarts.end()) return; + add->left = parent->builder.makeConst(Literal((int32_t)parent->functionTableStarts[tableName])); + } + } + + void visitFunction(Function* curr) { + // changing call types requires we percolate types, and drop stuff. + // we do this in this pass so that we don't look broken between passes + AutoDrop().walkFunctionInModule(curr, getModule()); + } + }; + + // apply debug info, reducing intrinsic calls into annotations on the ast nodes + struct ApplyDebugInfo : public WalkerPass>> { + bool isFunctionParallel() override { return true; } + + Pass* create() override { return new ApplyDebugInfo(); } + + ApplyDebugInfo() { + name = "apply-debug-info"; + } + + CallImport* lastDebugInfo = nullptr; + + void visitExpression(Expression* curr) { + if (auto* call = checkDebugInfo(curr)) { + lastDebugInfo = call; + replaceCurrent(getModule()->allocator.alloc()); + } else { + if (lastDebugInfo) { + auto& debugLocations = getFunction()->debugLocations; + uint32_t fileIndex = lastDebugInfo->operands[0]->cast()->value.geti32(); + assert(getModule()->debugInfoFileNames.size() > fileIndex); + uint32_t lineNumber = lastDebugInfo->operands[1]->cast()->value.geti32(); + // look up the stack, apply to the root expression + Index i = expressionStack.size() - 1; + while (1) { + auto* exp = expressionStack[i]; + bool parentIsStructure = i > 0 && (expressionStack[i - 1]->is() || + expressionStack[i - 1]->is() || + expressionStack[i - 1]->is()); + if (i == 0 || parentIsStructure || exp->type == none || exp->type == unreachable) { + if (debugLocations.count(exp) > 0) { + // already present, so look back up + i++; + while (i < expressionStack.size()) { + exp = expressionStack[i]; + if (debugLocations.count(exp) == 0) { + debugLocations[exp] = { fileIndex, lineNumber, 0 }; + break; + } + i++; + } + } else { + debugLocations[exp] = { fileIndex, lineNumber, 0 }; + } + break; + } + i--; + } + lastDebugInfo = nullptr; + } + } + } + }; + + PassRunner passRunner(&wasm); + passRunner.setFeatures(passOptions.features); + if (debug) { + passRunner.setDebug(true); + passRunner.setValidateGlobally(false); + } + // finalizeCalls also does autoDrop, which is crucial for the non-optimizing case, + // so that the output of the first pass is valid + passRunner.add(this); + if (legalizeJavaScriptFFI) { + passRunner.add("legalize-js-interface"); + } + if (runOptimizationPasses) { + // autodrop can add some garbage + passRunner.add("vacuum"); + passRunner.add("remove-unused-brs"); + passRunner.add("optimize-instructions"); + passRunner.add("post-emscripten"); + } else { + if (preprocessor.debugInfo) { + // we would have run this before if optimizing, do it now otherwise. must + // precede ApplyDebugInfo + passRunner.add(); + } + } + if (preprocessor.debugInfo) { + passRunner.add(); + passRunner.add("vacuum"); // FIXME maybe just remove the nops that were debuginfo nodes, if not optimizing? + } + passRunner.run(); + + // remove the debug info intrinsic + if (preprocessor.debugInfo) { + wasm.removeImport(EMSCRIPTEN_DEBUGINFO); + } + + // apply memory growth, if relevant + if (preprocessor.memoryGrowth) { + EmscriptenGlueGenerator generator(wasm); + generator.generateMemoryGrowthFunction(); + wasm.memory.max = Memory::kMaxSize; + } + +#if 0 + // export memory + auto memoryExport = make_unique(); + memoryExport->name = MEMORY; + memoryExport->value = Name::fromInt(0); + memoryExport->kind = ExternalKind::Memory; + wasm.addExport(memoryExport.release()); +#else + // import memory + auto memoryImport = make_unique(); + memoryImport->name = MEMORY; + memoryImport->module = ENV; + memoryImport->base = MEMORY; + memoryImport->kind = ExternalKind::Memory; + wasm.memory.exists = true; + wasm.memory.imported = true; + wasm.addImport(memoryImport.release()); + + // import table + auto tableImport = make_unique(); + tableImport->name = TABLE; + tableImport->module = ENV; + tableImport->base = TABLE; + tableImport->kind = ExternalKind::Table; + wasm.addImport(tableImport.release()); + wasm.table.exists = true; + wasm.table.imported = true; + + // Import memory offset, if not already there + if (!wasm.getImportOrNull("memoryBase") && !wasm.getGlobalOrNull("memoryBase")) { + auto* import = new Import; + import->name = Name("memoryBase"); + import->module = Name("env"); + import->base = Name("memoryBase"); + import->kind = ExternalKind::Global; + import->globalType = i32; + wasm.addImport(import); + } + + // Import table offset, if not already there + if (!wasm.getImportOrNull("tableBase") && !wasm.getGlobalOrNull("tableBase")) { + auto* import = new Import; + import->name = Name("tableBase"); + import->module = Name("env"); + import->base = Name("tableBase"); + import->kind = ExternalKind::Global; + import->globalType = i32; + wasm.addImport(import); + } + +#endif + + if (udivmoddi4.is() && getTempRet0.is()) { + // generate a wasm-optimized __udivmoddi4 method, which we can do much more efficiently in wasm + // we can only do this if we know getTempRet0 as well since we use it to figure out which minified global is tempRet0 + // (getTempRet0 might be an import, if this is a shared module, so we can't optimize that case) + Name tempRet0; + { + Expression* curr = wasm.getFunction(getTempRet0)->body; + if (curr->is()) curr = curr->cast()->list.back(); + if (curr->is()) curr = curr->cast()->value; + auto* get = curr->cast(); + tempRet0 = get->name; + } + // udivmoddi4 receives xl, xh, yl, yl, r, and + // if r then *r = x % y + // returns x / y + auto* func = wasm.getFunction(udivmoddi4); + assert(!func->type.is()); + Builder::clearLocals(func); + Index xl = Builder::addParam(func, "xl", i32), + xh = Builder::addParam(func, "xh", i32), + yl = Builder::addParam(func, "yl", i32), + yh = Builder::addParam(func, "yh", i32), + r = Builder::addParam(func, "r", i32), + x64 = Builder::addVar(func, "x64", i64), + y64 = Builder::addVar(func, "y64", i64); + auto* body = allocator.alloc(); + body->list.push_back(builder.makeSetLocal(x64, I64Utilities::recreateI64(builder, xl, xh))); + body->list.push_back(builder.makeSetLocal(y64, I64Utilities::recreateI64(builder, yl, yh))); + body->list.push_back( + builder.makeIf( + builder.makeGetLocal(r, i32), + builder.makeStore( + 8, 0, 8, + builder.makeGetLocal(r, i32), + builder.makeBinary( + RemUInt64, + builder.makeGetLocal(x64, i64), + builder.makeGetLocal(y64, i64) + ), + i64 + ) + ) + ); + body->list.push_back( + builder.makeSetLocal( + x64, + builder.makeBinary( + DivUInt64, + builder.makeGetLocal(x64, i64), + builder.makeGetLocal(y64, i64) + ) + ) + ); + body->list.push_back( + builder.makeSetGlobal( + tempRet0, + I64Utilities::getI64High(builder, x64) + ) + ); + body->list.push_back(I64Utilities::getI64Low(builder, x64)); + body->finalize(); + func->body = body; + } +} + +Function* Asm2WasmBuilder::processFunction(Ref ast) { + auto name = ast[1]->getIString(); + + if (debug) { + std::cout << "asm2wasming func: " << ast[1]->getIString().str << '\n'; + } + + auto function = new Function; + function->name = name; + Ref params = ast[2]; + Ref body = ast[3]; + + UniqueNameMapper nameMapper; + + // given an asm.js label, returns the wasm label for breaks or continues + auto getBreakLabelName = [](IString label) { + return Name(std::string("label$break$") + label.str); + }; + auto getContinueLabelName = [](IString label) { + return Name(std::string("label$continue$") + label.str); + }; + + IStringSet functionVariables; // params or vars + + IString parentLabel; // set in LABEL, then read in WHILE/DO/SWITCH + std::vector breakStack; // where a break will go + std::vector continueStack; // where a continue will go + + AsmData asmData; // need to know var and param types, for asm type detection + + for (unsigned i = 0; i < params->size(); i++) { + Ref curr = body[i]; + auto* assign = curr->asAssignName(); + IString name = assign->target(); + AsmType asmType = detectType(assign->value(), nullptr, false, Math_fround, wasmOnly); + Builder::addParam(function, name, asmToWasmType(asmType)); + functionVariables.insert(name); + asmData.addParam(name, asmType); + } + unsigned start = params->size(); + while (start < body->size() && body[start]->isArray(VAR)) { + Ref curr = body[start]; + for (unsigned j = 0; j < curr[1]->size(); j++) { + Ref pair = curr[1][j]; + IString name = pair[0]->getIString(); + AsmType asmType = detectType(pair[1], nullptr, true, Math_fround, wasmOnly); + Builder::addVar(function, name, asmToWasmType(asmType)); + functionVariables.insert(name); + asmData.addVar(name, asmType); + } + start++; + } + + bool addedI32Temp = false; + auto ensureI32Temp = [&]() { + if (addedI32Temp) return; + addedI32Temp = true; + Builder::addVar(function, I32_TEMP, i32); + functionVariables.insert(I32_TEMP); + asmData.addVar(I32_TEMP, ASM_INT); + }; + + bool seenReturn = false; // function->result is updated if we see a return + // processors + std::function processStatements; + std::function processUnshifted; + + std::function process = [&](Ref ast) -> Expression* { + AstStackHelper astStackHelper(ast); // TODO: only create one when we need it? + if (ast->isString()) { + IString name = ast->getIString(); + if (functionVariables.has(name)) { + // var in scope + auto ret = allocator.alloc(); + ret->index = function->getLocalIndex(name); + ret->type = asmToWasmType(asmData.getType(name)); + return ret; + } + if (name == DEBUGGER) { + CallImport *call = allocator.alloc(); + call->target = DEBUGGER; + call->type = none; + static bool addedImport = false; + if (!addedImport) { + addedImport = true; + auto import = new Import; // debugger = asm2wasm.debugger; + import->name = DEBUGGER; + import->module = ASM2WASM; + import->base = DEBUGGER; + import->functionType = ensureFunctionType("v", &wasm)->name; + import->kind = ExternalKind::Function; + wasm.addImport(import); + } + return call; + } + // global var + assert(mappedGlobals.find(name) != mappedGlobals.end() ? true : (std::cerr << name.str << '\n', false)); + MappedGlobal& global = mappedGlobals[name]; + return builder.makeGetGlobal(name, global.type); + } + if (ast->isNumber()) { + auto ret = allocator.alloc(); + double num = ast->getNumber(); + if (isSInteger32(num)) { + ret->value = Literal(int32_t(toSInteger32(num))); + } else if (isUInteger32(num)) { + ret->value = Literal(uint32_t(toUInteger32(num))); + } else { + ret->value = Literal(num); + } + ret->type = ret->value.type; + return ret; + } + if (ast->isAssignName()) { + auto* assign = ast->asAssignName(); + IString name = assign->target(); + if (functionVariables.has(name)) { + auto ret = allocator.alloc(); + ret->index = function->getLocalIndex(assign->target()); + ret->value = process(assign->value()); + ret->setTee(false); + ret->finalize(); + return ret; + } + // global var + assert(mappedGlobals.find(name) != mappedGlobals.end()); + auto* ret = builder.makeSetGlobal(name, process(assign->value())); + // set_global does not return; if our value is trivially not used, don't emit a load (if nontrivially not used, opts get it later) + auto parent = astStackHelper.getParent(); + if (!parent || parent->isArray(BLOCK) || parent->isArray(IF)) return ret; + return builder.makeSequence(ret, builder.makeGetGlobal(name, ret->value->type)); + } + if (ast->isAssign()) { + auto* assign = ast->asAssign(); + assert(assign->target()->isArray(SUB)); + Ref target = assign->target(); + assert(target[1]->isString()); + IString heap = target[1]->getIString(); + assert(views.find(heap) != views.end()); + View& view = views[heap]; + auto ret = allocator.alloc(); + ret->isAtomic = false; + ret->bytes = view.bytes; + ret->offset = 0; + ret->align = view.bytes; + ret->ptr = processUnshifted(target[2], view.bytes); + ret->value = process(assign->value()); + ret->valueType = asmToWasmType(view.type); + ret->finalize(); + if (ret->valueType != ret->value->type) { + // in asm.js we have some implicit coercions that we must do explicitly here + if (ret->valueType == f32 && ret->value->type == f64) { + auto conv = allocator.alloc(); + conv->op = DemoteFloat64; + conv->value = ret->value; + conv->type = WasmType::f32; + ret->value = conv; + } else if (ret->valueType == f64 && ret->value->type == f32) { + ret->value = ensureDouble(ret->value); + } else { + abort_on("bad sub[] types", ast); + } + } + return ret; + } + IString what = ast[0]->getIString(); + if (what == BINARY) { + if ((ast[1] == OR || ast[1] == TRSHIFT) && ast[3]->isNumber() && ast[3]->getNumber() == 0) { + auto ret = process(ast[2]); // just look through the ()|0 or ()>>>0 coercion + fixCallType(ret, i32); + return ret; + } + auto ret = allocator.alloc(); + ret->left = process(ast[2]); + ret->right = process(ast[3]); + ret->op = parseAsmBinaryOp(ast[1]->getIString(), ast[2], ast[3], ret->left, ret->right); + ret->finalize(); + if (ret->op == BinaryOp::RemSInt32 && isWasmTypeFloat(ret->type)) { + // WebAssembly does not have floating-point remainder, we have to emit a call to a special import of ours + CallImport *call = allocator.alloc(); + call->target = F64_REM; + call->operands.push_back(ensureDouble(ret->left)); + call->operands.push_back(ensureDouble(ret->right)); + call->type = f64; + static bool addedImport = false; + if (!addedImport) { + addedImport = true; + auto import = new Import; // f64-rem = asm2wasm.f64-rem; + import->name = F64_REM; + import->module = ASM2WASM; + import->base = F64_REM; + import->functionType = ensureFunctionType("ddd", &wasm)->name; + import->kind = ExternalKind::Function; + wasm.addImport(import); + } + return call; + } + return makeTrappingBinary(ret, trappingFunctions); + } else if (what == SUB) { + Ref target = ast[1]; + assert(target->isString()); + IString heap = target->getIString(); + assert(views.find(heap) != views.end()); + View& view = views[heap]; + auto ret = allocator.alloc(); + ret->isAtomic = false; + ret->bytes = view.bytes; + ret->signed_ = view.signed_; + ret->offset = 0; + ret->align = view.bytes; + ret->ptr = processUnshifted(ast[2], view.bytes); + ret->type = getWasmType(view.bytes, !view.integer); + return ret; + } else if (what == UNARY_PREFIX) { + if (ast[1] == PLUS) { + Literal literal = checkLiteral(ast); + if (literal.type != none) { + return builder.makeConst(literal); + } + auto ret = process(ast[2]); // we are a +() coercion + if (ret->type == i32) { + auto conv = allocator.alloc(); + conv->op = isUnsignedCoercion(ast[2]) ? ConvertUInt32ToFloat64 : ConvertSInt32ToFloat64; + conv->value = ret; + conv->type = WasmType::f64; + return conv; + } + if (ret->type == f32) { + return ensureDouble(ret); + } + fixCallType(ret, f64); + return ret; + } else if (ast[1] == MINUS) { + if (ast[2]->isNumber() || (ast[2]->isArray(UNARY_PREFIX) && ast[2][1] == PLUS && ast[2][2]->isNumber())) { + auto ret = allocator.alloc(); + ret->value = getLiteral(ast); + ret->type = ret->value.type; + return ret; + } + AsmType asmType = detectAsmType(ast[2], &asmData); + if (asmType == ASM_INT) { + // wasm has no unary negation for int, so do 0- + auto ret = allocator.alloc(); + ret->op = SubInt32; + ret->left = builder.makeConst(Literal((int32_t)0)); + ret->right = process(ast[2]); + ret->type = WasmType::i32; + return ret; + } + auto ret = allocator.alloc(); + ret->value = process(ast[2]); + if (asmType == ASM_DOUBLE) { + ret->op = NegFloat64; + ret->type = WasmType::f64; + } else if (asmType == ASM_FLOAT) { + ret->op = NegFloat32; + ret->type = WasmType::f32; + } else { + abort(); + } + return ret; + } else if (ast[1] == B_NOT) { + // ~, might be ~~ as a coercion or just a not + if (ast[2]->isArray(UNARY_PREFIX) && ast[2][1] == B_NOT) { + // if we have an unsigned coercion on us, it is an unsigned op + Expression* expr = process(ast[2][2]); + bool isSigned = !isParentUnsignedCoercion(astStackHelper.getParent()); + bool isF64 = expr->type == f64; + UnaryOp op; + if (isSigned && isF64) { + op = UnaryOp::TruncSFloat64ToInt32; + } else if (isSigned && !isF64) { + op = UnaryOp::TruncSFloat32ToInt32; + } else if (!isSigned && isF64) { + op = UnaryOp::TruncUFloat64ToInt32; + } else { // !isSigned && !isF64 + op = UnaryOp::TruncUFloat32ToInt32; + } + return makeTrappingUnary(builder.makeUnary(op, expr), trappingFunctions); + } + // no bitwise unary not, so do xor with -1 + auto ret = allocator.alloc(); + ret->op = XorInt32; + ret->left = process(ast[2]); + ret->right = builder.makeConst(Literal(int32_t(-1))); + ret->type = WasmType::i32; + return ret; + } else if (ast[1] == L_NOT) { + auto ret = allocator.alloc(); + ret->op = EqZInt32; + ret->value = process(ast[2]); + ret->type = i32; + return ret; + } + abort_on("bad unary", ast); + } else if (what == IF) { + auto* condition = process(ast[1]); + auto* ifTrue = process(ast[2]); + return builder.makeIf(truncateToInt32(condition), ifTrue, !!ast[3] ? process(ast[3]) : nullptr); + } else if (what == CALL) { + if (ast[1]->isString()) { + IString name = ast[1]->getIString(); + if (name == Math_imul) { + assert(ast[2]->size() == 2); + auto ret = allocator.alloc(); + ret->op = MulInt32; + ret->left = process(ast[2][0]); + ret->right = process(ast[2][1]); + ret->type = WasmType::i32; + return ret; + } + if (name == Math_clz32 || name == llvm_cttz_i32) { + assert(ast[2]->size() == 1); + auto ret = allocator.alloc(); + ret->op = name == Math_clz32 ? ClzInt32 : CtzInt32; + ret->value = process(ast[2][0]); + ret->type = WasmType::i32; + return ret; + } + if (name == Math_fround) { + assert(ast[2]->size() == 1); + Literal lit = checkLiteral(ast[2][0], false /* raw is float */); + if (lit.type == f64) { + return builder.makeConst(Literal((float)lit.getf64())); + } + auto ret = allocator.alloc(); + ret->value = process(ast[2][0]); + if (ret->value->type == f64) { + ret->op = DemoteFloat64; + } else if (ret->value->type == i32) { + if (isUnsignedCoercion(ast[2][0])) { + ret->op = ConvertUInt32ToFloat32; + } else { + ret->op = ConvertSInt32ToFloat32; + } + } else if (ret->value->type == f32) { + return ret->value; + } else if (ret->value->type == none) { // call, etc. + ret->value->type = f32; + return ret->value; + } else { + abort_on("confusing fround target", ast[2][0]); + } + ret->type = f32; + return ret; + } + if (name == Math_abs) { + // overloaded on type: i32, f32 or f64 + Expression* value = process(ast[2][0]); + if (value->type == i32) { + // No wasm support, so use a temp local + ensureI32Temp(); + auto set = allocator.alloc(); + set->index = function->getLocalIndex(I32_TEMP); + set->value = value; + set->setTee(false); + set->finalize(); + auto get = [&]() { + auto ret = allocator.alloc(); + ret->index = function->getLocalIndex(I32_TEMP); + ret->type = i32; + return ret; + }; + auto isNegative = allocator.alloc(); + isNegative->op = LtSInt32; + isNegative->left = get(); + isNegative->right = builder.makeConst(Literal(0)); + isNegative->finalize(); + auto block = allocator.alloc(); + block->list.push_back(set); + auto flip = allocator.alloc(); + flip->op = SubInt32; + flip->left = builder.makeConst(Literal(0)); + flip->right = get(); + flip->type = i32; + auto select = allocator.alloc(); + + if (tracing) { + auto id = noteExpression(ret); + std::cout << " expressions[" << id << "] = BinaryenSelect(the_module, expressions[" << expressions[condition] << "], expressions[" << expressions[ifTrue] << "], expressions[" << expressions[ifFalse] << "]);\n"; + } + + ret->condition = (Expression*)condition; + ret->ifTrue = (Expression*)ifTrue; + ret->ifFalse = (Expression*)ifFalse; + ret->finalize(); + return static_cast(ret); +} +BinaryenExpressionRef BinaryenDrop(BinaryenModuleRef module, BinaryenExpressionRef value) { + auto* ret = ((Module*)module)->allocator.alloc(); + + if (tracing) { + auto id = noteExpression(ret); + std::cout << " expressions[" << id << "] = BinaryenDrop(the_module, expressions[" << expressions[value] << "]);\n"; + } + + ret->value = (Expression*)value; + ret->finalize(); + return static_cast(ret); +} +BinaryenExpressionRef BinaryenReturn(BinaryenModuleRef module, BinaryenExpressionRef value) { + auto* ret = Builder(*((Module*)module)).makeReturn((Expression*)value); + + if (tracing) { + auto id = noteExpression(ret); + std::cout << " expressions[" << id << "] = BinaryenReturn(the_module, expressions[" << expressions[value] << "]);\n"; + } + + return static_cast(ret); +} +BinaryenExpressionRef BinaryenHost(BinaryenModuleRef module, BinaryenOp op, const char* name, BinaryenExpressionRef* operands, BinaryenIndex numOperands) { + if (tracing) { + std::cout << " TODO: host...\n"; + } + + auto* ret = ((Module*)module)->allocator.alloc(); + ret->op = HostOp(op); + if (name) ret->nameOperand = name; + for (BinaryenIndex i = 0; i < numOperands; i++) { + ret->operands.push_back((Expression*)operands[i]); + } + ret->finalize(); + return static_cast(ret); +} +BinaryenExpressionRef BinaryenNop(BinaryenModuleRef module) { + auto* ret = ((Module*)module)->allocator.alloc(); + + if (tracing) { + auto id = noteExpression(ret); + std::cout << " expressions[" << id << "] = BinaryenNop(the_module);\n"; + } + + return static_cast(ret); +} +BinaryenExpressionRef BinaryenUnreachable(BinaryenModuleRef module) { + auto* ret = ((Module*)module)->allocator.alloc(); + + if (tracing) { + auto id = noteExpression(ret); + std::cout << " expressions[" << id << "] = BinaryenUnreachable(the_module);\n"; + } + + return static_cast(ret); +} +BinaryenExpressionRef BinaryenAtomicRMW(BinaryenModuleRef module, BinaryenOp op, BinaryenIndex bytes, BinaryenIndex offset, BinaryenExpressionRef ptr, BinaryenExpressionRef value, BinaryenType type) { + auto* ret = Builder(*((Module*)module)).makeAtomicRMW(AtomicRMWOp(op), bytes, offset, (Expression*)ptr, (Expression*)value, WasmType(type)); + + if (tracing) { + auto id = noteExpression(ret); + std::cout << " expressions[" << id << "] = BinaryenAtomicRMW(the_module, " << op << ", " << bytes << ", " << offset << ", expressions[" << expressions[ptr] << "], expressions[" << expressions[value] << "], " << type << ");\n"; + } + + return static_cast(ret); +} +BinaryenExpressionRef BinaryenAtomicCmpxchg(BinaryenModuleRef module, BinaryenIndex bytes, BinaryenIndex offset, BinaryenExpressionRef ptr, BinaryenExpressionRef expected, BinaryenExpressionRef replacement, BinaryenType type) { + auto* ret = Builder(*((Module*)module)).makeAtomicCmpxchg(bytes, offset, (Expression*)ptr, (Expression*)expected, (Expression*)replacement, WasmType(type)); + + if (tracing) { + auto id = noteExpression(ret); + std::cout << " expressions[" << id << "] = BinaryenAtomicCmpxchg(the_module, " << bytes << ", " << offset << ", expressions[" << expressions[ptr] << "], expressions[" << expressions[expected] << "], expressions[" << expressions[replacement] << "], " << type << ");\n"; + } + + return static_cast(ret); +} +BinaryenExpressionRef BinaryenAtomicWait(BinaryenModuleRef module, BinaryenExpressionRef ptr, BinaryenExpressionRef expected, BinaryenExpressionRef timeout, BinaryenType expectedType) { + auto* ret = Builder(*((Module*)module)).makeAtomicWait((Expression*)ptr, (Expression*)expected, (Expression*)timeout, WasmType(expectedType)); + + if (tracing) { + auto id = noteExpression(ret); + std::cout << " expressions[" << id << "] = BinaryenAtomicWait(the_module, expressions[" << expressions[ptr] << "], expressions[" << expressions[expected] << "], expressions[" << expressions[timeout] << "], " << expectedType << ");\n"; + } + + return static_cast(ret); +} +BinaryenExpressionRef BinaryenAtomicWake(BinaryenModuleRef module, BinaryenExpressionRef ptr, BinaryenExpressionRef wakeCount) { + auto* ret = Builder(*((Module*)module)).makeAtomicWake((Expression*)ptr, (Expression*)wakeCount); + + if (tracing) { + auto id = noteExpression(ret); + std::cout << " expressions[" << id << "] = BinaryenAtomicWake(the_module, expressions[" << expressions[ptr] << "], expressions[" << expressions[wakeCount] << "]);\n"; + } + + return static_cast(ret); +} + +// Expression utility + +BinaryenExpressionId BinaryenExpressionGetId(BinaryenExpressionRef expr) { + if (tracing) { + std::cout << " BinaryenExpressionGetId(expressions[" << expressions[expr] << "]);\n"; + } + + return ((Expression*)expr)->_id; +} +BinaryenType BinaryenExpressionGetType(BinaryenExpressionRef expr) { + if (tracing) { + std::cout << " BinaryenExpressionGetType(expressions[" << expressions[expr] << "]);\n"; + } + + return ((Expression*)expr)->type; +} +void BinaryenExpressionPrint(BinaryenExpressionRef expr) { + if (tracing) { + std::cout << " BinaryenExpressionPrint(expressions[" << expressions[expr] << "]);\n"; + } + + WasmPrinter::printExpression((Expression*)expr, std::cout); + std::cout << '\n'; +} +int32_t BinaryenConstGetValueI32(BinaryenExpressionRef expr) { + if (tracing) { + std::cout << " BinaryenConstGetValueI32(expressions[" << expressions[expr] << "]);\n"; + } + + auto* expression = (Expression*)expr; + assert(expression->is()); + return static_cast(expression)->value.geti32(); +} +int64_t BinaryenConstGetValueI64(BinaryenExpressionRef expr) { + if (tracing) { + std::cout << " BinaryenConstGetValueI64(expressions[" << expressions[expr] << "]);\n"; + } + + auto* expression = (Expression*)expr; + assert(expression->is()); + return static_cast(expression)->value.geti64(); +} +int32_t BinaryenConstGetValueI64Low(BinaryenExpressionRef expr) { + if (tracing) { + std::cout << " BinaryenConstGetValueI64Low(expressions[" << expressions[expr] << "]);\n"; + } + + auto* expression = (Expression*)expr; + assert(expression->is()); + return (int32_t)(static_cast(expression)->value.geti64() & 0xffffffff); +} +int32_t BinaryenConstGetValueI64High(BinaryenExpressionRef expr) { + if (tracing) { + std::cout << " BinaryenConstGetValueI64High(expressions[" << expressions[expr] << "]);\n"; + } + + auto* expression = (Expression*)expr; + assert(expression->is()); + return (int32_t)(static_cast(expression)->value.geti64() >> 32); +} +float BinaryenConstGetValueF32(BinaryenExpressionRef expr) { + if (tracing) { + std::cout << " BinaryenConstGetValueF32(expressions[" << expressions[expr] << "]);\n"; + } + + auto* expression = (Expression*)expr; + assert(expression->is()); + return static_cast(expression)->value.getf32(); +} +double BinaryenConstGetValueF64(BinaryenExpressionRef expr) { + if (tracing) { + std::cout << " BinaryenConstGetValueF64(expressions[" << expressions[expr] << "]);\n"; + } + + auto* expression = (Expression*)expr; + assert(expression->is()); + return static_cast(expression)->value.getf64(); +} + +// Functions + +BinaryenFunctionRef BinaryenAddFunction(BinaryenModuleRef module, const char* name, BinaryenFunctionTypeRef type, BinaryenType* varTypes, BinaryenIndex numVarTypes, BinaryenExpressionRef body) { + auto* wasm = (Module*)module; + auto* ret = new Function; + + if (tracing) { + std::cout << " {\n"; + std::cout << " BinaryenType varTypes[] = { "; + for (BinaryenIndex i = 0; i < numVarTypes; i++) { + if (i > 0) std::cout << ", "; + std::cout << varTypes[i]; + } + if (numVarTypes == 0) std::cout << "0"; // ensure the array is not empty, otherwise a compiler error on VS + std::cout << " };\n"; + auto id = functions.size(); + functions[ret] = id; + std::cout << " functions[" << id << "] = BinaryenAddFunction(the_module, \"" << name << "\", functionTypes[" << functionTypes[type] << "], varTypes, " << numVarTypes << ", expressions[" << expressions[body] << "]);\n"; + std::cout << " }\n"; + } + + ret->name = name; + ret->type = ((FunctionType*)type)->name; + auto* functionType = wasm->getFunctionType(ret->type); + ret->result = functionType->result; + ret->params = functionType->params; + for (BinaryenIndex i = 0; i < numVarTypes; i++) { + ret->vars.push_back(WasmType(varTypes[i])); + } + ret->body = (Expression*)body; + + // Lock. This can be called from multiple threads at once, and is a + // point where they all access and modify the module. + { + std::lock_guard lock(BinaryenFunctionMutex); + wasm->addFunction(ret); + } + + return ret; +} + +BinaryenGlobalRef BinaryenAddGlobal(BinaryenModuleRef module, const char* name, BinaryenType type, int8_t mutable_, BinaryenExpressionRef init) { + if (tracing) { + std::cout << " BinaryenAddGlobal(the_module, \"" << name << "\", " << type << ", " << int(mutable_) << ", expressions[" << expressions[init] << "]);\n"; + } + + auto* wasm = (Module*)module; + auto* ret = new Global(); + ret->name = name; + ret->type = WasmType(type); + ret->mutable_ = !!mutable_; + ret->init = (Expression*)init; + wasm->addGlobal(ret); + return ret; +} + +// Imports + +BinaryenImportRef BinaryenAddImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char *externalBaseName, BinaryenFunctionTypeRef type) { + if (tracing) { + std::cout << " BinaryenAddImport(the_module, \"" << internalName << "\", \"" << externalModuleName << "\", \"" << externalBaseName << "\", functionTypes[" << functionTypes[type] << "]);\n"; + } + + auto* wasm = (Module*)module; + auto* ret = new Import(); + ret->name = internalName; + ret->module = externalModuleName; + ret->base = externalBaseName; + ret->functionType = ((FunctionType*)type)->name; + ret->kind = ExternalKind::Function; + wasm->addImport(ret); + return ret; +} + +void BinaryenRemoveImport(BinaryenModuleRef module, const char* internalName) { + if (tracing) { + std::cout << " BinaryenRemoveImport(the_module, \"" << internalName << "\");\n"; + } + + auto* wasm = (Module*)module; + wasm->removeImport(internalName); +} + +// Exports + +BinaryenExportRef BinaryenAddExport(BinaryenModuleRef module, const char* internalName, const char* externalName) { + if (tracing) { + std::cout << " BinaryenAddExport(the_module, \"" << internalName << "\", \"" << externalName << "\");\n"; + } + + auto* wasm = (Module*)module; + auto* ret = new Export(); + ret->value = internalName; + ret->name = externalName; + wasm->addExport(ret); + return ret; +} + +void BinaryenRemoveExport(BinaryenModuleRef module, const char* externalName) { + if (tracing) { + std::cout << " BinaryenRemoveExport(the_module, \"" << externalName << "\");\n"; + } + + auto* wasm = (Module*)module; + wasm->removeExport(externalName); +} + +// Function table. One per module + +void BinaryenSetFunctionTable(BinaryenModuleRef module, BinaryenFunctionRef* funcs, BinaryenIndex numFuncs) { + if (tracing) { + std::cout << " {\n"; + std::cout << " BinaryenFunctionRef funcs[] = { "; + for (BinaryenIndex i = 0; i < numFuncs; i++) { + if (i > 0) std::cout << ", "; + std::cout << "functions[" << functions[funcs[i]] << "]"; + } + if (numFuncs == 0) std::cout << "0"; // ensure the array is not empty, otherwise a compiler error on VS + std::cout << " };\n"; + std::cout << " BinaryenSetFunctionTable(the_module, funcs, " << numFuncs << ");\n"; + std::cout << " }\n"; + } + + auto* wasm = (Module*)module; + wasm->table.exists = true; + Table::Segment segment(wasm->allocator.alloc()->set(Literal(int32_t(0)))); + for (BinaryenIndex i = 0; i < numFuncs; i++) { + segment.data.push_back(((Function*)funcs[i])->name); + } + wasm->table.segments.push_back(segment); + wasm->table.initial = wasm->table.max = numFuncs; +} + +// Memory. One per module + +void BinaryenSetMemory(BinaryenModuleRef module, BinaryenIndex initial, BinaryenIndex maximum, const char* exportName, const char **segments, BinaryenExpressionRef* segmentOffsets, BinaryenIndex* segmentSizes, BinaryenIndex numSegments) { + if (tracing) { + std::cout << " {\n"; + for (BinaryenIndex i = 0; i < numSegments; i++) { + std::cout << " const char segment" << i << "[] = { "; + for (BinaryenIndex j = 0; j < segmentSizes[i]; j++) { + if (j > 0) std::cout << ", "; + std::cout << int(segments[i][j]); + } + std::cout << " };\n"; + } + std::cout << " const char* segments[] = { "; + for (BinaryenIndex i = 0; i < numSegments; i++) { + if (i > 0) std::cout << ", "; + std::cout << "segment" << i; + } + if (numSegments == 0) std::cout << "0"; // ensure the array is not empty, otherwise a compiler error on VS + std::cout << " };\n"; + std::cout << " BinaryenExpressionRef segmentOffsets[] = { "; + for (BinaryenIndex i = 0; i < numSegments; i++) { + if (i > 0) std::cout << ", "; + std::cout << "expressions[" << expressions[segmentOffsets[i]] << "]"; + } + if (numSegments == 0) std::cout << "0"; // ensure the array is not empty, otherwise a compiler error on VS + std::cout << " };\n"; + std::cout << " BinaryenIndex segmentSizes[] = { "; + for (BinaryenIndex i = 0; i < numSegments; i++) { + if (i > 0) std::cout << ", "; + std::cout << segmentSizes[i]; + } + if (numSegments == 0) std::cout << "0"; // ensure the array is not empty, otherwise a compiler error on VS + std::cout << " };\n"; + std::cout << " BinaryenSetMemory(the_module, " << initial << ", " << maximum << ", "; + traceNameOrNULL(exportName); + std::cout << ", segments, segmentOffsets, segmentSizes, " << numSegments << ");\n"; + std::cout << " }\n"; + } + + auto* wasm = (Module*)module; + wasm->memory.initial = initial; + wasm->memory.max = maximum; + wasm->memory.exists = true; + if (exportName) { + auto memoryExport = make_unique(); + memoryExport->name = exportName; + memoryExport->value = Name::fromInt(0); + memoryExport->kind = ExternalKind::Memory; + wasm->addExport(memoryExport.release()); + } + for (BinaryenIndex i = 0; i < numSegments; i++) { + wasm->memory.segments.emplace_back((Expression*)segmentOffsets[i], segments[i], segmentSizes[i]); + } +} + +// Start function. One per module + +void BinaryenSetStart(BinaryenModuleRef module, BinaryenFunctionRef start) { + if (tracing) { + std::cout << " BinaryenSetStart(the_module, functions[" << functions[start] << "]);\n"; + } + + auto* wasm = (Module*)module; + wasm->addStart(((Function*)start)->name); +} + +// +// ========== Module Operations ========== +// + +BinaryenModuleRef BinaryenModuleParse(const char* text) { + if (tracing) { + std::cout << " // BinaryenModuleRead\n"; + } + + auto* wasm = new Module; + try { + SExpressionParser parser(const_cast(text)); + Element& root = *parser.root; + SExpressionWasmBuilder builder(*wasm, *root[0]); + } catch (ParseException& p) { + p.dump(std::cerr); + Fatal() << "error in parsing wasm text"; + } + return wasm; +} + +void BinaryenModulePrint(BinaryenModuleRef module) { + if (tracing) { + std::cout << " BinaryenModulePrint(the_module);\n"; + } + + WasmPrinter::printModule((Module*)module); +} + +void BinaryenModulePrintAsmjs(BinaryenModuleRef module) { + if (tracing) { + std::cout << " BinaryenModulePrintAsmjs(the_module);\n"; + } + + Module* wasm = (Module*)module; + Wasm2AsmBuilder::Flags builderFlags; + Wasm2AsmBuilder wasm2asm(builderFlags); + Ref asmjs = wasm2asm.processWasm(wasm); + JSPrinter jser(true, true, asmjs); + jser.printAst(); + + std::cout << jser.buffer; +} + +int BinaryenModuleValidate(BinaryenModuleRef module) { + if (tracing) { + std::cout << " BinaryenModuleValidate(the_module);\n"; + } + + Module* wasm = (Module*)module; + return WasmValidator().validate(*wasm) ? 1 : 0; +} + +void BinaryenModuleOptimize(BinaryenModuleRef module) { + if (tracing) { + std::cout << " BinaryenModuleOptimize(the_module);\n"; + } + + Module* wasm = (Module*)module; + PassRunner passRunner(wasm); + passRunner.addDefaultOptimizationPasses(); + passRunner.run(); +} + +void BinaryenModuleRunPasses(BinaryenModuleRef module, const char **passes, BinaryenIndex numPasses) { + if (tracing) { + std::cout << " {\n"; + std::cout << " const char* passes[] = { "; + for (BinaryenIndex i = 0; i < numPasses; i++) { + if (i > 0) std::cout << ", "; + std::cout << "\"" << passes[i] << "\""; + } + std::cout << " };\n"; + std::cout << " BinaryenModuleRunPasses(the_module, passes, " << numPasses << ");\n"; + std::cout << " }\n"; + } + + Module* wasm = (Module*)module; + PassRunner passRunner(wasm); + for (BinaryenIndex i = 0; i < numPasses; i++) { + passRunner.add(passes[i]); + } + passRunner.run(); +} + +void BinaryenModuleAutoDrop(BinaryenModuleRef module) { + if (tracing) { + std::cout << " BinaryenModuleAutoDrop(the_module);\n"; + } + + Module* wasm = (Module*)module; + PassRunner passRunner(wasm); + passRunner.add(); + passRunner.run(); +} + +size_t BinaryenModuleWrite(BinaryenModuleRef module, char* output, size_t outputSize) { + if (tracing) { + std::cout << " // BinaryenModuleWrite\n"; + } + + Module* wasm = (Module*)module; + BufferWithRandomAccess buffer(false); + WasmBinaryWriter writer(wasm, buffer, false); + writer.write(); + size_t bytes = std::min(buffer.size(), outputSize); + std::copy_n(buffer.begin(), bytes, output); + return bytes; +} + +BinaryenModuleRef BinaryenModuleRead(char* input, size_t inputSize) { + if (tracing) { + std::cout << " // BinaryenModuleRead\n"; + } + + auto* wasm = new Module; + std::vector buffer(false); + buffer.resize(inputSize); + std::copy_n(input, inputSize, buffer.begin()); + try { + WasmBinaryBuilder parser(*wasm, buffer, false); + parser.read(); + } catch (ParseException& p) { + p.dump(std::cerr); + Fatal() << "error in parsing wasm binary"; + } + return wasm; +} + +void BinaryenModuleInterpret(BinaryenModuleRef module) { + if (tracing) { + std::cout << " BinaryenModuleInterpret(the_module);\n"; + } + + Module* wasm = (Module*)module; + ShellExternalInterface interface; + ModuleInstance instance(*wasm, &interface); +} + +// +// ========== CFG / Relooper ========== +// + +RelooperRef RelooperCreate(void) { + if (tracing) { + std::cout << " the_relooper = RelooperCreate();\n"; + } + + return RelooperRef(new CFG::Relooper()); +} + +RelooperBlockRef RelooperAddBlock(RelooperRef relooper, BinaryenExpressionRef code) { + auto* R = (CFG::Relooper*)relooper; + auto* ret = new CFG::Block((Expression*)code); + + if (tracing) { + auto id = relooperBlocks.size(); + relooperBlocks[ret] = id; + std::cout << " relooperBlocks[" << id << "] = RelooperAddBlock(the_relooper, expressions[" << expressions[code] << "]);\n"; + } + + R->AddBlock(ret); + return RelooperRef(ret); +} + +void RelooperAddBranch(RelooperBlockRef from, RelooperBlockRef to, BinaryenExpressionRef condition, BinaryenExpressionRef code) { + if (tracing) { + std::cout << " RelooperAddBranch(relooperBlocks[" << relooperBlocks[from] << "], relooperBlocks[" << relooperBlocks[to] << "], expressions[" << expressions[condition] << "], expressions[" << expressions[code] << "]);\n"; + } + + auto* fromBlock = (CFG::Block*)from; + auto* toBlock = (CFG::Block*)to; + fromBlock->AddBranchTo(toBlock, (Expression*)condition, (Expression*)code); +} + +RelooperBlockRef RelooperAddBlockWithSwitch(RelooperRef relooper, BinaryenExpressionRef code, BinaryenExpressionRef condition) { + auto* R = (CFG::Relooper*)relooper; + auto* ret = new CFG::Block((Expression*)code, (Expression*)condition); + + if (tracing) { + std::cout << " relooperBlocks[" << relooperBlocks[ret] << "] = RelooperAddBlockWithSwitch(the_relooper, expressions[" << expressions[code] << "], expressions[" << expressions[condition] << "]);\n"; + } + + R->AddBlock(ret); + return RelooperRef(ret); +} + +void RelooperAddBranchForSwitch(RelooperBlockRef from, RelooperBlockRef to, BinaryenIndex* indexes, BinaryenIndex numIndexes, BinaryenExpressionRef code) { + if (tracing) { + std::cout << " {\n"; + std::cout << " BinaryenIndex indexes[] = { "; + for (BinaryenIndex i = 0; i < numIndexes; i++) { + if (i > 0) std::cout << ", "; + std::cout << indexes[i]; + } + if (numIndexes == 0) std::cout << "0"; // ensure the array is not empty, otherwise a compiler error on VS + std::cout << " };\n"; + std::cout << " RelooperAddBranchForSwitch(relooperBlocks[" << relooperBlocks[from] << "], relooperBlocks[" << relooperBlocks[to] << "], indexes, " << numIndexes << ", expressions[" << expressions[code] << "]);\n"; + std::cout << " }\n"; + } + + auto* fromBlock = (CFG::Block*)from; + auto* toBlock = (CFG::Block*)to; + std::vector values; + for (Index i = 0; i < numIndexes; i++) { + values.push_back(indexes[i]); + } + fromBlock->AddSwitchBranchTo(toBlock, std::move(values), (Expression*)code); +} + +BinaryenExpressionRef RelooperRenderAndDispose(RelooperRef relooper, RelooperBlockRef entry, BinaryenIndex labelHelper, BinaryenModuleRef module) { + auto* R = (CFG::Relooper*)relooper; + R->Calculate((CFG::Block*)entry); + CFG::RelooperBuilder builder(*(Module*)module, labelHelper); + auto* ret = R->Render(builder); + + if (tracing) { + auto id = noteExpression(ret); + std::cout << " expressions[" << id << "] = RelooperRenderAndDispose(the_relooper, relooperBlocks[" << relooperBlocks[entry] << "], " << labelHelper << ", the_module);\n"; + relooperBlocks.clear(); + } + + delete R; + return BinaryenExpressionRef(ret); +} + +// +// ========= Other APIs ========= +// + +void BinaryenSetAPITracing(int on) { + tracing = on; + + if (tracing) { + std::cout << "// beginning a Binaryen API trace\n" + "#include \n" + "#include \n" + "#include \"src/binaryen-c.h\"\n" + "int main() {\n" + " std::map functionTypes;\n" + " std::map expressions;\n" + " std::map functions;\n" + " std::map relooperBlocks;\n" + " BinaryenModuleRef the_module = NULL;\n" + " RelooperRef the_relooper = NULL;\n"; + } else { + std::cout << " return 0;\n"; + std::cout << "}\n"; + } +} + +// +// ========= Utilities ========= +// + +BinaryenFunctionTypeRef BinaryenGetFunctionTypeBySignature(BinaryenModuleRef module, BinaryenType result, BinaryenType* paramTypes, BinaryenIndex numParams) { + if (tracing) { + std::cout << " // BinaryenGetFunctionTypeBySignature\n"; + } + + auto* wasm = (Module*)module; + FunctionType test; + test.result = WasmType(result); + for (BinaryenIndex i = 0; i < numParams; i++) { + test.params.push_back(WasmType(paramTypes[i])); + } + + // Lock. Guard against reading the list while types are being added. + { + std::lock_guard lock(BinaryenFunctionTypeMutex); + for (BinaryenIndex i = 0; i < wasm->functionTypes.size(); i++) { + FunctionType* curr = wasm->functionTypes[i].get(); + if (curr->structuralComparison(test)) { + return curr; + } + } + } + + return NULL; +} + +} // extern "C" diff --git a/src/binaryen/src/binaryen-c.h b/src/binaryen/src/binaryen-c.h new file mode 100644 index 0000000000..88fe8904c1 --- /dev/null +++ b/src/binaryen/src/binaryen-c.h @@ -0,0 +1,538 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +//================ +// Binaryen C API +// +// The first part of the API lets you create modules and their parts. +// +// The second part of the API lets you perform operations on modules. +// +// The third part of the API lets you provide a general control-flow +// graph (CFG) as input. +// +// The final part of the API contains miscellaneous utilities like +// debugging/tracing for the API itself. +// +// --------------- +// +// Thread safety: You can create Expressions in parallel, as they do not +// refer to global state. BinaryenAddFunction and +// BinaryenAddFunctionType are also thread-safe, which means +// that you can create functions and their contents in multiple +// threads. This is important since functions are where the +// majority of the work is done. +// Other methods - creating imports, exports, etc. - are +// not currently thread-safe (as there is typically no need +// to parallelize them). +// +//================ + +#ifndef wasm_binaryen_c_h +#define wasm_binaryen_c_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +// +// ========== Module Creation ========== +// + +// BinaryenIndex +// +// Used for internal indexes and list sizes. + +typedef uint32_t BinaryenIndex; + +// Core types (call to get the value of each; you can cache them, they +// never change) + +typedef uint32_t BinaryenType; + +BinaryenType BinaryenNone(void); +BinaryenType BinaryenInt32(void); +BinaryenType BinaryenInt64(void); +BinaryenType BinaryenFloat32(void); +BinaryenType BinaryenFloat64(void); + +// Not a real type. Used as the last parameter to BinaryenBlock to let +// the API figure out the type instead of providing one. +BinaryenType BinaryenUndefined(void); + +// Expression ids (call to get the value of each; you can cache them) + +typedef uint32_t BinaryenExpressionId; + +BinaryenExpressionId BinaryenInvalidId(void); +BinaryenExpressionId BinaryenBlockId(void); +BinaryenExpressionId BinaryenIfId(void); +BinaryenExpressionId BinaryenLoopId(void); +BinaryenExpressionId BinaryenBreakId(void); +BinaryenExpressionId BinaryenSwitchId(void); +BinaryenExpressionId BinaryenCallId(void); +BinaryenExpressionId BinaryenCallImportId(void); +BinaryenExpressionId BinaryenCallIndirectId(void); +BinaryenExpressionId BinaryenGetLocalId(void); +BinaryenExpressionId BinaryenSetLocalId(void); +BinaryenExpressionId BinaryenGetGlobalId(void); +BinaryenExpressionId BinaryenSetGlobalId(void); +BinaryenExpressionId BinaryenLoadId(void); +BinaryenExpressionId BinaryenStoreId(void); +BinaryenExpressionId BinaryenConstId(void); +BinaryenExpressionId BinaryenUnaryId(void); +BinaryenExpressionId BinaryenBinaryId(void); +BinaryenExpressionId BinaryenSelectId(void); +BinaryenExpressionId BinaryenDropId(void); +BinaryenExpressionId BinaryenReturnId(void); +BinaryenExpressionId BinaryenHostId(void); +BinaryenExpressionId BinaryenNopId(void); +BinaryenExpressionId BinaryenUnreachableId(void); +BinaryenExpressionId BinaryenAtomicCmpxchgId(void); +BinaryenExpressionId BinaryenAtomicRMWId(void); +BinaryenExpressionId BinaryenAtomicWaitId(void); +BinaryenExpressionId BinaryenAtomicWakeId(void); + +// Modules +// +// Modules contain lists of functions, imports, exports, function types. The +// Add* methods create them on a module. The module owns them and will free their +// memory when the module is disposed of. +// +// Expressions are also allocated inside modules, and freed with the module. They +// are not created by Add* methods, since they are not added directly on the +// module, instead, they are arguments to other expressions (and then they are +// the children of that AST node), or to a function (and then they are the body +// of that function). +// +// A module can also contain a function table for indirect calls, a memory, +// and a start method. + +typedef void* BinaryenModuleRef; + +BinaryenModuleRef BinaryenModuleCreate(void); +void BinaryenModuleDispose(BinaryenModuleRef module); + +// Function types + +typedef void* BinaryenFunctionTypeRef; + +// Add a new function type. This is thread-safe. +// Note: name can be NULL, in which case we auto-generate a name +BinaryenFunctionTypeRef BinaryenAddFunctionType(BinaryenModuleRef module, const char* name, BinaryenType result, BinaryenType* paramTypes, BinaryenIndex numParams); + +// Literals. These are passed by value. + +struct BinaryenLiteral { + int32_t type; + union { + int32_t i32; + int64_t i64; + float f32; + double f64; + }; +}; + +struct BinaryenLiteral BinaryenLiteralInt32(int32_t x); +struct BinaryenLiteral BinaryenLiteralInt64(int64_t x); +struct BinaryenLiteral BinaryenLiteralFloat32(float x); +struct BinaryenLiteral BinaryenLiteralFloat64(double x); +struct BinaryenLiteral BinaryenLiteralFloat32Bits(int32_t x); +struct BinaryenLiteral BinaryenLiteralFloat64Bits(int64_t x); + +// Expressions +// +// Some expressions have a BinaryenOp, which is the more +// specific operation/opcode. +// +// Some expressions have optional parameters, like Return may not +// return a value. You can supply a NULL pointer in those cases. +// +// For more information, see wasm.h + +typedef int32_t BinaryenOp; + +BinaryenOp BinaryenClzInt32(void); +BinaryenOp BinaryenCtzInt32(void); +BinaryenOp BinaryenPopcntInt32(void); +BinaryenOp BinaryenNegFloat32(void); +BinaryenOp BinaryenAbsFloat32(void); +BinaryenOp BinaryenCeilFloat32(void); +BinaryenOp BinaryenFloorFloat32(void); +BinaryenOp BinaryenTruncFloat32(void); +BinaryenOp BinaryenNearestFloat32(void); +BinaryenOp BinaryenSqrtFloat32(void); +BinaryenOp BinaryenEqZInt32(void); +BinaryenOp BinaryenClzInt64(void); +BinaryenOp BinaryenCtzInt64(void); +BinaryenOp BinaryenPopcntInt64(void); +BinaryenOp BinaryenNegFloat64(void); +BinaryenOp BinaryenAbsFloat64(void); +BinaryenOp BinaryenCeilFloat64(void); +BinaryenOp BinaryenFloorFloat64(void); +BinaryenOp BinaryenTruncFloat64(void); +BinaryenOp BinaryenNearestFloat64(void); +BinaryenOp BinaryenSqrtFloat64(void); +BinaryenOp BinaryenEqZInt64(void); +BinaryenOp BinaryenExtendSInt32(void); +BinaryenOp BinaryenExtendUInt32(void); +BinaryenOp BinaryenWrapInt64(void); +BinaryenOp BinaryenTruncSFloat32ToInt32(void); +BinaryenOp BinaryenTruncSFloat32ToInt64(void); +BinaryenOp BinaryenTruncUFloat32ToInt32(void); +BinaryenOp BinaryenTruncUFloat32ToInt64(void); +BinaryenOp BinaryenTruncSFloat64ToInt32(void); +BinaryenOp BinaryenTruncSFloat64ToInt64(void); +BinaryenOp BinaryenTruncUFloat64ToInt32(void); +BinaryenOp BinaryenTruncUFloat64ToInt64(void); +BinaryenOp BinaryenReinterpretFloat32(void); +BinaryenOp BinaryenReinterpretFloat64(void); +BinaryenOp BinaryenConvertSInt32ToFloat32(void); +BinaryenOp BinaryenConvertSInt32ToFloat64(void); +BinaryenOp BinaryenConvertUInt32ToFloat32(void); +BinaryenOp BinaryenConvertUInt32ToFloat64(void); +BinaryenOp BinaryenConvertSInt64ToFloat32(void); +BinaryenOp BinaryenConvertSInt64ToFloat64(void); +BinaryenOp BinaryenConvertUInt64ToFloat32(void); +BinaryenOp BinaryenConvertUInt64ToFloat64(void); +BinaryenOp BinaryenPromoteFloat32(void); +BinaryenOp BinaryenDemoteFloat64(void); +BinaryenOp BinaryenReinterpretInt32(void); +BinaryenOp BinaryenReinterpretInt64(void); +BinaryenOp BinaryenAddInt32(void); +BinaryenOp BinaryenSubInt32(void); +BinaryenOp BinaryenMulInt32(void); +BinaryenOp BinaryenDivSInt32(void); +BinaryenOp BinaryenDivUInt32(void); +BinaryenOp BinaryenRemSInt32(void); +BinaryenOp BinaryenRemUInt32(void); +BinaryenOp BinaryenAndInt32(void); +BinaryenOp BinaryenOrInt32(void); +BinaryenOp BinaryenXorInt32(void); +BinaryenOp BinaryenShlInt32(void); +BinaryenOp BinaryenShrUInt32(void); +BinaryenOp BinaryenShrSInt32(void); +BinaryenOp BinaryenRotLInt32(void); +BinaryenOp BinaryenRotRInt32(void); +BinaryenOp BinaryenEqInt32(void); +BinaryenOp BinaryenNeInt32(void); +BinaryenOp BinaryenLtSInt32(void); +BinaryenOp BinaryenLtUInt32(void); +BinaryenOp BinaryenLeSInt32(void); +BinaryenOp BinaryenLeUInt32(void); +BinaryenOp BinaryenGtSInt32(void); +BinaryenOp BinaryenGtUInt32(void); +BinaryenOp BinaryenGeSInt32(void); +BinaryenOp BinaryenGeUInt32(void); +BinaryenOp BinaryenAddInt64(void); +BinaryenOp BinaryenSubInt64(void); +BinaryenOp BinaryenMulInt64(void); +BinaryenOp BinaryenDivSInt64(void); +BinaryenOp BinaryenDivUInt64(void); +BinaryenOp BinaryenRemSInt64(void); +BinaryenOp BinaryenRemUInt64(void); +BinaryenOp BinaryenAndInt64(void); +BinaryenOp BinaryenOrInt64(void); +BinaryenOp BinaryenXorInt64(void); +BinaryenOp BinaryenShlInt64(void); +BinaryenOp BinaryenShrUInt64(void); +BinaryenOp BinaryenShrSInt64(void); +BinaryenOp BinaryenRotLInt64(void); +BinaryenOp BinaryenRotRInt64(void); +BinaryenOp BinaryenEqInt64(void); +BinaryenOp BinaryenNeInt64(void); +BinaryenOp BinaryenLtSInt64(void); +BinaryenOp BinaryenLtUInt64(void); +BinaryenOp BinaryenLeSInt64(void); +BinaryenOp BinaryenLeUInt64(void); +BinaryenOp BinaryenGtSInt64(void); +BinaryenOp BinaryenGtUInt64(void); +BinaryenOp BinaryenGeSInt64(void); +BinaryenOp BinaryenGeUInt64(void); +BinaryenOp BinaryenAddFloat32(void); +BinaryenOp BinaryenSubFloat32(void); +BinaryenOp BinaryenMulFloat32(void); +BinaryenOp BinaryenDivFloat32(void); +BinaryenOp BinaryenCopySignFloat32(void); +BinaryenOp BinaryenMinFloat32(void); +BinaryenOp BinaryenMaxFloat32(void); +BinaryenOp BinaryenEqFloat32(void); +BinaryenOp BinaryenNeFloat32(void); +BinaryenOp BinaryenLtFloat32(void); +BinaryenOp BinaryenLeFloat32(void); +BinaryenOp BinaryenGtFloat32(void); +BinaryenOp BinaryenGeFloat32(void); +BinaryenOp BinaryenAddFloat64(void); +BinaryenOp BinaryenSubFloat64(void); +BinaryenOp BinaryenMulFloat64(void); +BinaryenOp BinaryenDivFloat64(void); +BinaryenOp BinaryenCopySignFloat64(void); +BinaryenOp BinaryenMinFloat64(void); +BinaryenOp BinaryenMaxFloat64(void); +BinaryenOp BinaryenEqFloat64(void); +BinaryenOp BinaryenNeFloat64(void); +BinaryenOp BinaryenLtFloat64(void); +BinaryenOp BinaryenLeFloat64(void); +BinaryenOp BinaryenGtFloat64(void); +BinaryenOp BinaryenGeFloat64(void); +BinaryenOp BinaryenPageSize(void); +BinaryenOp BinaryenCurrentMemory(void); +BinaryenOp BinaryenGrowMemory(void); +BinaryenOp BinaryenHasFeature(void); +BinaryenOp BinaryenAtomicRMWAdd(void); +BinaryenOp BinaryenAtomicRMWSub(void); +BinaryenOp BinaryenAtomicRMWAnd(void); +BinaryenOp BinaryenAtomicRMWOr(void); +BinaryenOp BinaryenAtomicRMWXor(void); +BinaryenOp BinaryenAtomicRMWXchg(void); + +typedef void* BinaryenExpressionRef; + +// Block: name can be NULL. Specifying BinaryenUndefined() as the 'type' +// parameter indicates that the block's type shall be figured out +// automatically instead of explicitly providing it. This conforms +// to the behavior before the 'type' parameter has been introduced. +BinaryenExpressionRef BinaryenBlock(BinaryenModuleRef module, const char* name, BinaryenExpressionRef* children, BinaryenIndex numChildren, BinaryenType type); +// If: ifFalse can be NULL +BinaryenExpressionRef BinaryenIf(BinaryenModuleRef module, BinaryenExpressionRef condition, BinaryenExpressionRef ifTrue, BinaryenExpressionRef ifFalse); +BinaryenExpressionRef BinaryenLoop(BinaryenModuleRef module, const char* in, BinaryenExpressionRef body); +// Break: value and condition can be NULL +BinaryenExpressionRef BinaryenBreak(BinaryenModuleRef module, const char* name, BinaryenExpressionRef condition, BinaryenExpressionRef value); +// Switch: value can be NULL +BinaryenExpressionRef BinaryenSwitch(BinaryenModuleRef module, const char **names, BinaryenIndex numNames, const char* defaultName, BinaryenExpressionRef condition, BinaryenExpressionRef value); +// Call, CallImport: Note the 'returnType' parameter. You must declare the +// type returned by the function being called, as that +// function might not have been created yet, so we don't +// know what it is. +// Also note that WebAssembly does not differentiate +// between Call and CallImport, but Binaryen does, so you +// must use CallImport if calling an import, and vice versa. +BinaryenExpressionRef BinaryenCall(BinaryenModuleRef module, const char *target, BinaryenExpressionRef* operands, BinaryenIndex numOperands, BinaryenType returnType); +BinaryenExpressionRef BinaryenCallImport(BinaryenModuleRef module, const char *target, BinaryenExpressionRef* operands, BinaryenIndex numOperands, BinaryenType returnType); +BinaryenExpressionRef BinaryenCallIndirect(BinaryenModuleRef module, BinaryenExpressionRef target, BinaryenExpressionRef* operands, BinaryenIndex numOperands, const char* type); +// GetLocal: Note the 'type' parameter. It might seem redundant, since the +// local at that index must have a type. However, this API lets you +// build code "top-down": create a node, then its parents, and so +// on, and finally create the function at the end. (Note that in fact +// you do not mention a function when creating ExpressionRefs, only +// a module.) And since GetLocal is a leaf node, we need to be told +// its type. (Other nodes detect their type either from their +// type or their opcode, or failing that, their children. But +// GetLocal has no children, it is where a "stream" of type info +// begins.) +// Note also that the index of a local can refer to a param or +// a var, that is, either a parameter to the function or a variable +// declared when you call BinaryenAddFunction. See BinaryenAddFunction +// for more details. +BinaryenExpressionRef BinaryenGetLocal(BinaryenModuleRef module, BinaryenIndex index, BinaryenType type); +BinaryenExpressionRef BinaryenSetLocal(BinaryenModuleRef module, BinaryenIndex index, BinaryenExpressionRef value); +BinaryenExpressionRef BinaryenTeeLocal(BinaryenModuleRef module, BinaryenIndex index, BinaryenExpressionRef value); +BinaryenExpressionRef BinaryenGetGlobal(BinaryenModuleRef module, const char *name, BinaryenType type); +BinaryenExpressionRef BinaryenSetGlobal(BinaryenModuleRef module, const char *name, BinaryenExpressionRef value); +// Load: align can be 0, in which case it will be the natural alignment (equal to bytes) +BinaryenExpressionRef BinaryenLoad(BinaryenModuleRef module, uint32_t bytes, int8_t signed_, uint32_t offset, uint32_t align, BinaryenType type, BinaryenExpressionRef ptr); +// Store: align can be 0, in which case it will be the natural alignment (equal to bytes) +BinaryenExpressionRef BinaryenStore(BinaryenModuleRef module, uint32_t bytes, uint32_t offset, uint32_t align, BinaryenExpressionRef ptr, BinaryenExpressionRef value, BinaryenType type); +BinaryenExpressionRef BinaryenConst(BinaryenModuleRef module, struct BinaryenLiteral value); +BinaryenExpressionRef BinaryenUnary(BinaryenModuleRef module, BinaryenOp op, BinaryenExpressionRef value); +BinaryenExpressionRef BinaryenBinary(BinaryenModuleRef module, BinaryenOp op, BinaryenExpressionRef left, BinaryenExpressionRef right); +BinaryenExpressionRef BinaryenSelect(BinaryenModuleRef module, BinaryenExpressionRef condition, BinaryenExpressionRef ifTrue, BinaryenExpressionRef ifFalse); +BinaryenExpressionRef BinaryenDrop(BinaryenModuleRef module, BinaryenExpressionRef value); +// Return: value can be NULL +BinaryenExpressionRef BinaryenReturn(BinaryenModuleRef module, BinaryenExpressionRef value); +// Host: name may be NULL +BinaryenExpressionRef BinaryenHost(BinaryenModuleRef module, BinaryenOp op, const char* name, BinaryenExpressionRef* operands, BinaryenIndex numOperands); +BinaryenExpressionRef BinaryenNop(BinaryenModuleRef module); +BinaryenExpressionRef BinaryenUnreachable(BinaryenModuleRef module); +BinaryenExpressionRef BinaryenAtomicRMW(BinaryenModuleRef module, BinaryenOp op, BinaryenIndex bytes, BinaryenIndex offset, BinaryenExpressionRef ptr, BinaryenExpressionRef value, BinaryenType type); +BinaryenExpressionRef BinaryenAtomicCmpxchg(BinaryenModuleRef module, BinaryenIndex bytes, BinaryenIndex offset, BinaryenExpressionRef ptr, BinaryenExpressionRef expected, BinaryenExpressionRef replacement, BinaryenType type); +BinaryenExpressionRef BinaryenAtomicWait(BinaryenModuleRef module, BinaryenExpressionRef ptr, BinaryenExpressionRef expected, BinaryenExpressionRef timeout, BinaryenType type); +BinaryenExpressionRef BinaryenAtomicWake(BinaryenModuleRef module, BinaryenExpressionRef ptr, BinaryenExpressionRef wakeCount); + +// Gets the id (kind) of the specified expression. +BinaryenExpressionId BinaryenExpressionGetId(BinaryenExpressionRef expr); +// Gets the type of the specified expression. +BinaryenType BinaryenExpressionGetType(BinaryenExpressionRef expr); +// Print an expression to stdout. Useful for debugging. +void BinaryenExpressionPrint(BinaryenExpressionRef expr); +// Gets the 32-bit integer value of the specified `Const` expression. +int32_t BinaryenConstGetValueI32(BinaryenExpressionRef expr); +// Gets the 64-bit integer value of the specified `Const` expression. +int64_t BinaryenConstGetValueI64(BinaryenExpressionRef expr); +// Gets the low 32-bits of a 64-bit integer value of the specified `Const` expression. Useful where I64 returning exports are illegal, i.e. binaryen.js. +int32_t BinaryenConstGetValueI64Low(BinaryenExpressionRef expr); +// Gets the high 32-bits of a 64-bit integer value of the specified `Const` expression. Useful where I64 returning exports are illegal, i.e. binaryen.js. +int32_t BinaryenConstGetValueI64High(BinaryenExpressionRef expr); +// Gets the 32-bit float value of the specified `Const` expression. +float BinaryenConstGetValueF32(BinaryenExpressionRef expr); +// Gets the 64-bit float value of the specified `Const` expression. +double BinaryenConstGetValueF64(BinaryenExpressionRef expr); + +// Functions + +typedef void* BinaryenFunctionRef; + +// Adds a function to the module. This is thread-safe. +// @varTypes: the types of variables. In WebAssembly, vars share +// an index space with params. In other words, params come from +// the function type, and vars are provided in this call, and +// together they are all the locals. The order is first params +// and then vars, so if you have one param it will be at index +// 0 (and written $0), and if you also have 2 vars they will be +// at indexes 1 and 2, etc., that is, they share an index space. +BinaryenFunctionRef BinaryenAddFunction(BinaryenModuleRef module, const char* name, BinaryenFunctionTypeRef type, BinaryenType* varTypes, BinaryenIndex numVarTypes, BinaryenExpressionRef body); + +// Imports + +typedef void* BinaryenImportRef; + +BinaryenImportRef BinaryenAddImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char *externalBaseName, BinaryenFunctionTypeRef type); +void BinaryenRemoveImport(BinaryenModuleRef module, const char* internalName); + +// Exports + +typedef void* BinaryenExportRef; + +BinaryenExportRef BinaryenAddExport(BinaryenModuleRef module, const char* internalName, const char* externalName); +void BinaryenRemoveExport(BinaryenModuleRef module, const char* externalName); + +// Globals + +typedef void* BinaryenGlobalRef; + +BinaryenGlobalRef BinaryenAddGlobal(BinaryenModuleRef module, const char* name, BinaryenType type, int8_t mutable_, BinaryenExpressionRef init); + +// Function table. One per module + +void BinaryenSetFunctionTable(BinaryenModuleRef module, BinaryenFunctionRef* funcs, BinaryenIndex numFuncs); + +// Memory. One per module + +// Each segment has data in segments, a start offset in segmentOffsets, and a size in segmentSizes. +// exportName can be NULL +void BinaryenSetMemory(BinaryenModuleRef module, BinaryenIndex initial, BinaryenIndex maximum, const char* exportName, const char **segments, BinaryenExpressionRef* segmentOffsets, BinaryenIndex* segmentSizes, BinaryenIndex numSegments); + +// Start function. One per module + +void BinaryenSetStart(BinaryenModuleRef module, BinaryenFunctionRef start); + +// +// ========== Module Operations ========== +// + +// Parse a module in s-expression text format +BinaryenModuleRef BinaryenModuleParse(const char* text); + +// Print a module to stdout in s-expression text format. Useful for debugging. +void BinaryenModulePrint(BinaryenModuleRef module); + +// Print a module to stdout in asm.js syntax. +void BinaryenModulePrintAsmjs(BinaryenModuleRef module); + +// Validate a module, showing errors on problems. +// @return 0 if an error occurred, 1 if validated succesfully +int BinaryenModuleValidate(BinaryenModuleRef module); + +// Run the standard optimization passes on the module. +void BinaryenModuleOptimize(BinaryenModuleRef module); + +// Runs the specified passes on the module. +void BinaryenModuleRunPasses(BinaryenModuleRef module, const char **passes, BinaryenIndex numPasses); + +// Auto-generate drop() operations where needed. This lets you generate code without +// worrying about where they are needed. (It is more efficient to do it yourself, +// but simpler to use autodrop). +void BinaryenModuleAutoDrop(BinaryenModuleRef module); + +// Serialize a module into binary form. +// @return how many bytes were written. This will be less than or equal to outputSize +size_t BinaryenModuleWrite(BinaryenModuleRef module, char* output, size_t outputSize); + +// Deserialize a module from binary form. +BinaryenModuleRef BinaryenModuleRead(char* input, size_t inputSize); + +// Execute a module in the Binaryen interpreter. This will create an instance of +// the module, run it in the interpreter - which means running the start method - +// and then destroying the instance. +void BinaryenModuleInterpret(BinaryenModuleRef module); + +// +// ========== CFG / Relooper ========== +// +// General usage is (1) create a relooper, (2) create blocks, (3) add +// branches between them, (4) render the output. +// +// See Relooper.h for more details + +typedef void* RelooperRef; +typedef void* RelooperBlockRef; + +// Create a relooper instance +RelooperRef RelooperCreate(void); + +// Create a basic block that ends with nothing, or with some simple branching +RelooperBlockRef RelooperAddBlock(RelooperRef relooper, BinaryenExpressionRef code); + +// Create a branch to another basic block +// The branch can have code on it, that is executed as the branch happens. this is useful for phis. otherwise, code can be NULL +void RelooperAddBranch(RelooperBlockRef from, RelooperBlockRef to, BinaryenExpressionRef condition, BinaryenExpressionRef code); + +// Create a basic block that ends a switch on a condition +RelooperBlockRef RelooperAddBlockWithSwitch(RelooperRef relooper, BinaryenExpressionRef code, BinaryenExpressionRef condition); + +// Create a switch-style branch to another basic block. The block's switch table will have these indexes going to that target +void RelooperAddBranchForSwitch(RelooperBlockRef from, RelooperBlockRef to, BinaryenIndex* indexes, BinaryenIndex numIndexes, BinaryenExpressionRef code); + +// Generate structed wasm control flow from the CFG of blocks and branches that were created +// on this relooper instance. This returns the rendered output, and also disposes of the +// relooper and its blocks and branches, as they are no longer needed. +// @param labelHelper To render irreducible control flow, we may need a helper variable to +// guide us to the right target label. This value should be an index of +// an i32 local variable that is free for us to use. +BinaryenExpressionRef RelooperRenderAndDispose(RelooperRef relooper, RelooperBlockRef entry, BinaryenIndex labelHelper, BinaryenModuleRef module); + +// +// ========= Other APIs ========= +// + +// Sets whether API tracing is on or off. It is off by default. When on, each call +// to an API method will print out C code equivalent to it, which is useful for +// auto-generating standalone testcases from projects using the API. +// When calling this to turn on tracing, the prelude of the full program is printed, +// and when calling it to turn it off, the ending of the program is printed, giving +// you the full compilable testcase. +// TODO: compile-time option to enable/disable this feature entirely at build time? +void BinaryenSetAPITracing(int on); + +// +// ========= Utilities ========= +// + +// Note that this function has been added because there is no better alternative +// currently and is scheduled for removal once there is one. It takes the same set +// of parameters as BinaryenAddFunctionType but instead of adding a new function +// signature, it returns a pointer to the existing signature or NULL if there is no +// such signature yet. +BinaryenFunctionTypeRef BinaryenGetFunctionTypeBySignature(BinaryenModuleRef module, BinaryenType result, BinaryenType* paramTypes, BinaryenIndex numParams); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // wasm_binaryen_c_h diff --git a/src/binaryen/src/cfg/CMakeLists.txt b/src/binaryen/src/cfg/CMakeLists.txt new file mode 100644 index 0000000000..f0825b454d --- /dev/null +++ b/src/binaryen/src/cfg/CMakeLists.txt @@ -0,0 +1,4 @@ +SET(cfg_SOURCES + Relooper.cpp +) +ADD_LIBRARY(cfg STATIC ${cfg_SOURCES}) diff --git a/src/binaryen/src/cfg/Relooper.cpp b/src/binaryen/src/cfg/Relooper.cpp new file mode 100644 index 0000000000..22b455aaf3 --- /dev/null +++ b/src/binaryen/src/cfg/Relooper.cpp @@ -0,0 +1,1027 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "Relooper.h" + +#include +#include + +#include +#include +#include + +#include "ir/utils.h" +#include "parsing.h" + +namespace CFG { + +template static bool contains(const T& container, const U& contained) { + return !!container.count(contained); +} + +#ifdef RELOOPER_DEBUG +static void PrintDebug(const char *Format, ...); +#define DebugDump(x, ...) Debugging::Dump(x, __VA_ARGS__) +#else +#define PrintDebug(x, ...) +#define DebugDump(x, ...) +#endif + +// Rendering utilities + +static wasm::Expression* HandleFollowupMultiples(wasm::Expression* Ret, Shape* Parent, RelooperBuilder& Builder, bool InLoop) { + if (!Parent->Next) return Ret; + + auto* Curr = Ret->dynCast(); + if (!Curr || Curr->name.is()) { + Curr = Builder.makeBlock(Ret); + } + // for each multiple after us, we create a block target for breaks to reach + while (Parent->Next) { + auto* Multiple = Shape::IsMultiple(Parent->Next); + if (!Multiple) break; + for (auto& iter : Multiple->InnerMap) { + int Id = iter.first; + Shape* Body = iter.second; + Curr->name = Builder.getBlockBreakName(Id); + Curr->finalize(); // it may now be reachable, via a break + auto* Outer = Builder.makeBlock(Curr); + Outer->list.push_back(Body->Render(Builder, InLoop)); + Outer->finalize(); // TODO: not really necessary + Curr = Outer; + } + Parent->Next = Parent->Next->Next; + } + // after the multiples is a simple or a loop, in both cases we must hit an entry + // block, and so this is the last one we need to take into account now (this + // is why we require that loops hit an entry). + if (Parent->Next) { + auto* Simple = Shape::IsSimple(Parent->Next); + if (Simple) { + // breaking on the next block's id takes us out, where we + // will reach its rendering + Curr->name = Builder.getBlockBreakName(Simple->Inner->Id); + } else { + // add one break target per entry for the loop + auto* Loop = Shape::IsLoop(Parent->Next); + assert(Loop); + assert(Loop->Entries.size() > 0); + if (Loop->Entries.size() == 1) { + Curr->name = Builder.getBlockBreakName((*Loop->Entries.begin())->Id); + } else { + for (auto* Entry : Loop->Entries) { + Curr->name = Builder.getBlockBreakName(Entry->Id); + Curr->finalize(); + auto* Outer = Builder.makeBlock(Curr); + Outer->finalize(); // TODO: not really necessary + Curr = Outer; + } + } + } + } + Curr->finalize(); + return Curr; +} + +// Branch + +Branch::Branch(wasm::Expression* ConditionInit, wasm::Expression* CodeInit) : Ancestor(nullptr), Condition(ConditionInit), Code(CodeInit) {} + +Branch::Branch(std::vector&& ValuesInit, wasm::Expression* CodeInit) : Ancestor(nullptr), Code(CodeInit) { + if (ValuesInit.size() > 0) { + SwitchValues = wasm::make_unique>(ValuesInit); + } + // otherwise, it is the default +} + +wasm::Expression* Branch::Render(RelooperBuilder& Builder, Block *Target, bool SetLabel) { + auto* Ret = Builder.makeBlock(); + if (Code) Ret->list.push_back(Code); + if (SetLabel) Ret->list.push_back(Builder.makeSetLabel(Target->Id)); + if (Type == Break) { + Ret->list.push_back(Builder.makeBlockBreak(Target->Id)); + } else if (Type == Continue) { + assert(Ancestor); + Ret->list.push_back(Builder.makeShapeContinue(Ancestor->Id)); + } + Ret->finalize(); + return Ret; +} + +// Block + +Block::Block(wasm::Expression* CodeInit, wasm::Expression* SwitchConditionInit) : Parent(nullptr), Id(-1), Code(CodeInit), SwitchCondition(SwitchConditionInit), IsCheckedMultipleEntry(false) {} + +Block::~Block() { + for (BlockBranchMap::iterator iter = ProcessedBranchesOut.begin(); iter != ProcessedBranchesOut.end(); iter++) { + delete iter->second; + } + for (BlockBranchMap::iterator iter = BranchesOut.begin(); iter != BranchesOut.end(); iter++) { + delete iter->second; + } +} + +void Block::AddBranchTo(Block *Target, wasm::Expression* Condition, wasm::Expression* Code) { + assert(!contains(BranchesOut, Target)); // cannot add more than one branch to the same target + BranchesOut[Target] = new Branch(Condition, Code); +} + +void Block::AddSwitchBranchTo(Block *Target, std::vector&& Values, wasm::Expression* Code) { + assert(!contains(BranchesOut, Target)); // cannot add more than one branch to the same target + BranchesOut[Target] = new Branch(std::move(Values), Code); +} + +wasm::Expression* Block::Render(RelooperBuilder& Builder, bool InLoop) { + auto* Ret = Builder.makeBlock(); + if (IsCheckedMultipleEntry && InLoop) { + Ret->list.push_back(Builder.makeSetLabel(0)); + } + if (Code) Ret->list.push_back(Code); + + if (!ProcessedBranchesOut.size()) { + Ret->finalize(); + return Ret; + } + + bool SetLabel = true; // in some cases it is clear we can avoid setting label, see later + + // A setting of the label variable (label = x) is necessary if it can + // cause an impact. The main case is where we set label to x, then elsewhere + // we check if label is equal to that value, i.e., that label is an entry + // in a multiple block. We also need to reset the label when we enter + // that block, so that each setting is a one-time action: consider + // + // while (1) { + // if (check) label = 1; + // if (label == 1) { label = 0 } + // } + // + // (Note that this case is impossible due to fusing, but that is not + // material here.) So setting to 0 is important just to clear the 1 for + // future iterations. + // TODO: When inside a loop, if necessary clear the label variable + // once on the top, and never do settings that are in effect clears + + // Fusing: If the next is a Multiple, we can fuse it with this block. Note + // that we must be the Inner of a Simple, so fusing means joining a Simple + // to a Multiple. What happens there is that all options in the Multiple + // *must* appear in the Simple (the Simple is the only one reaching the + // Multiple), so we can remove the Multiple and add its independent groups + // into the Simple's branches. + MultipleShape *Fused = Shape::IsMultiple(Parent->Next); + if (Fused) { + PrintDebug("Fusing Multiple to Simple\n", 0); + Parent->Next = Parent->Next->Next; + // When the Multiple has the same number of groups as we have branches, + // they will all be fused, so it is safe to not set the label at all. + // If a switch, then we can have multiple branches to the same target + // (in different table indexes), and so this check is not sufficient TODO: optimize + if (SetLabel && Fused->InnerMap.size() == ProcessedBranchesOut.size() && !SwitchCondition) { + SetLabel = false; + } + } + + Block *DefaultTarget = nullptr; // The block we branch to without checking the condition, if none of the other conditions held. + + // Find the default target, the one without a condition + for (BlockBranchMap::iterator iter = ProcessedBranchesOut.begin(); iter != ProcessedBranchesOut.end(); iter++) { + if ((!SwitchCondition && !iter->second->Condition) || (SwitchCondition && !iter->second->SwitchValues)) { + assert(!DefaultTarget && "block has branches without a default (nullptr for the condition)"); // Must be exactly one default // nullptr + DefaultTarget = iter->first; + } + } + assert(DefaultTarget); // Since each block *must* branch somewhere, this must be set + + wasm::Expression* Root = nullptr; // root of the main part, that we are about to emit + + if (!SwitchCondition) { + // We'll emit a chain of if-elses + wasm::If* CurrIf = nullptr; + + // we build an if, then add a child, then add a child to that, etc., so we must + // finalize them in reverse order + std::vector finalizeStack; + + wasm::Expression* RemainingConditions = nullptr; + + for (BlockBranchMap::iterator iter = ProcessedBranchesOut.begin();; iter++) { + Block *Target; + Branch *Details; + if (iter != ProcessedBranchesOut.end()) { + Target = iter->first; + if (Target == DefaultTarget) continue; // done at the end + Details = iter->second; + assert(Details->Condition); // must have a condition if this is not the default target + } else { + Target = DefaultTarget; + Details = ProcessedBranchesOut[DefaultTarget]; + } + bool SetCurrLabel = SetLabel && Target->IsCheckedMultipleEntry; + bool HasFusedContent = Fused && contains(Fused->InnerMap, Target->Id); + if (HasFusedContent) { + assert(Details->Type == Branch::Break); + Details->Type = Branch::Direct; + } + wasm::Expression* CurrContent = nullptr; + bool IsDefault = iter == ProcessedBranchesOut.end(); + if (SetCurrLabel || Details->Type != Branch::Direct || HasFusedContent || Details->Code) { + CurrContent = Details->Render(Builder, Target, SetCurrLabel); + if (HasFusedContent) { + CurrContent = Builder.blockify(CurrContent, Fused->InnerMap.find(Target->Id)->second->Render(Builder, InLoop)); + } + } + // If there is nothing to show in this branch, omit the condition + if (CurrContent) { + if (IsDefault) { + wasm::Expression* Now; + if (RemainingConditions) { + Now = Builder.makeIf(RemainingConditions, CurrContent); + finalizeStack.push_back(Now->cast()); + } else { + Now = CurrContent; + } + if (!CurrIf) { + assert(!Root); + Root = Now; + } else { + CurrIf->ifFalse = Now; + CurrIf->finalize(); + } + } else { + auto* Now = Builder.makeIf(Details->Condition, CurrContent); + finalizeStack.push_back(Now); + if (!CurrIf) { + assert(!Root); + Root = CurrIf = Now; + } else { + CurrIf->ifFalse = Now; + CurrIf->finalize(); + CurrIf = Now; + } + } + } else { + auto* Now = Builder.makeUnary(wasm::EqZInt32, Details->Condition); + if (RemainingConditions) { + RemainingConditions = Builder.makeBinary(wasm::AndInt32, RemainingConditions, Now); + } else { + RemainingConditions = Now; + } + } + if (IsDefault) break; + } + + // finalize the if-chains + while (finalizeStack.size() > 0) { + wasm::If* curr = finalizeStack.back(); + finalizeStack.pop_back(); + curr->finalize(); + } + + } else { + // Emit a switch + auto Base = std::string("switch$") + std::to_string(Id); + auto SwitchDefault = wasm::Name(Base + "$default"); + auto SwitchLeave = wasm::Name(Base + "$leave"); + std::map BlockNameMap; + auto* Outer = Builder.makeBlock(); + auto* Inner = Outer; + std::vector Table; + for (auto& iter : ProcessedBranchesOut) { + Block *Target = iter.first; + Branch *Details = iter.second; + wasm::Name CurrName; + if (Details->SwitchValues) { + CurrName = wasm::Name(Base + "$case$" + std::to_string(Target->Id)); + } else { + CurrName = SwitchDefault; + } + // generate the content for this block + bool SetCurrLabel = SetLabel && Target->IsCheckedMultipleEntry; + bool HasFusedContent = Fused && contains(Fused->InnerMap, Target->Id); + if (HasFusedContent) { + assert(Details->Type == Branch::Break); + Details->Type = Branch::Direct; + } + wasm::Expression* CurrContent = nullptr; + if (SetCurrLabel || Details->Type != Branch::Direct || HasFusedContent || Details->Code) { + CurrContent = Details->Render(Builder, Target, SetCurrLabel); + if (HasFusedContent) { + CurrContent = Builder.blockify(CurrContent, Fused->InnerMap.find(Target->Id)->second->Render(Builder, InLoop)); + } + } + // generate a block to branch to, if we have content + if (CurrContent) { + auto* NextOuter = Builder.makeBlock(); + NextOuter->list.push_back(Outer); + Outer->name = CurrName; // breaking on Outer leads to the content in NextOuter + NextOuter->list.push_back(CurrContent); + // if this is not a dead end, also need to break to the outside + // this is both an optimization, and avoids incorrectness as adding + // a brak in unreachable code can make a place look reachable that isn't + if (CurrContent->type != wasm::unreachable) { + NextOuter->list.push_back(Builder.makeBreak(SwitchLeave)); + } + // prepare for more nesting + Outer = NextOuter; + } else { + CurrName = SwitchLeave; // just go out straight from the table + if (!Details->SwitchValues) { + // this is the default, and it has no content. So make the default be the leave + for (auto& Value : Table) { + if (Value == SwitchDefault) Value = SwitchLeave; + } + SwitchDefault = SwitchLeave; + } + } + if (Details->SwitchValues) { + for (auto Value : *Details->SwitchValues) { + while (Table.size() <= Value) Table.push_back(SwitchDefault); + Table[Value] = CurrName; + } + } + } + // finish up the whole pattern + Outer->name = SwitchLeave; + Inner->list.push_back(Builder.makeSwitch(Table, SwitchDefault, SwitchCondition)); + Root = Outer; + } + + if (Root) { + Ret->list.push_back(Root); + } + Ret->finalize(); + + return Ret; +} + +// SimpleShape + +wasm::Expression* SimpleShape::Render(RelooperBuilder& Builder, bool InLoop) { + auto* Ret = Inner->Render(Builder, InLoop); + Ret = HandleFollowupMultiples(Ret, this, Builder, InLoop); + if (Next) { + Ret = Builder.makeSequence(Ret, Next->Render(Builder, InLoop)); + } + return Ret; +} + + +// MultipleShape + +wasm::Expression* MultipleShape::Render(RelooperBuilder& Builder, bool InLoop) { + // TODO: consider switch + // emit an if-else chain + wasm::If *FirstIf = nullptr, *CurrIf = nullptr; + std::vector finalizeStack; + for (IdShapeMap::iterator iter = InnerMap.begin(); iter != InnerMap.end(); iter++) { + auto* Now = Builder.makeIf( + Builder.makeCheckLabel(iter->first), + iter->second->Render(Builder, InLoop) + ); + finalizeStack.push_back(Now); + if (!CurrIf) { + FirstIf = CurrIf = Now; + } else { + CurrIf->ifFalse = Now; + CurrIf->finalize(); + CurrIf = Now; + } + } + while (finalizeStack.size() > 0) { + wasm::If* curr = finalizeStack.back(); + finalizeStack.pop_back(); + curr->finalize(); + } + wasm::Expression* Ret = Builder.makeBlock(FirstIf); + Ret = HandleFollowupMultiples(Ret, this, Builder, InLoop); + if (Next) { + Ret = Builder.makeSequence(Ret, Next->Render(Builder, InLoop)); + } + return Ret; +} + +// LoopShape + +wasm::Expression* LoopShape::Render(RelooperBuilder& Builder, bool InLoop) { + wasm::Expression* Ret = Builder.makeLoop(Builder.getShapeContinueName(Id), Inner->Render(Builder, true)); + Ret = HandleFollowupMultiples(Ret, this, Builder, InLoop); + if (Next) { + Ret = Builder.makeSequence(Ret, Next->Render(Builder, InLoop)); + } + return Ret; +} + +// Relooper + +Relooper::Relooper() : Root(nullptr), MinSize(false), BlockIdCounter(1), ShapeIdCounter(0) { // block ID 0 is reserved for clearings +} + +Relooper::~Relooper() { + for (unsigned i = 0; i < Blocks.size(); i++) delete Blocks[i]; + for (unsigned i = 0; i < Shapes.size(); i++) delete Shapes[i]; +} + +void Relooper::AddBlock(Block *New, int Id) { + New->Id = Id == -1 ? BlockIdCounter++ : Id; + Blocks.push_back(New); +} + +struct RelooperRecursor { + Relooper *Parent; + RelooperRecursor(Relooper *ParentInit) : Parent(ParentInit) {} +}; + +typedef std::list BlockList; + +void Relooper::Calculate(Block *Entry) { + // Scan and optimize the input + struct PreOptimizer : public RelooperRecursor { + PreOptimizer(Relooper *Parent) : RelooperRecursor(Parent) {} + BlockSet Live; + + void FindLive(Block *Root) { + BlockList ToInvestigate; + ToInvestigate.push_back(Root); + while (ToInvestigate.size() > 0) { + Block *Curr = ToInvestigate.front(); + ToInvestigate.pop_front(); + if (contains(Live, Curr)) continue; + Live.insert(Curr); + for (BlockBranchMap::iterator iter = Curr->BranchesOut.begin(); iter != Curr->BranchesOut.end(); iter++) { + ToInvestigate.push_back(iter->first); + } + } + } + }; + PreOptimizer Pre(this); + Pre.FindLive(Entry); + + // Add incoming branches from live blocks, ignoring dead code + for (unsigned i = 0; i < Blocks.size(); i++) { + Block *Curr = Blocks[i]; + if (!contains(Pre.Live, Curr)) continue; + for (BlockBranchMap::iterator iter = Curr->BranchesOut.begin(); iter != Curr->BranchesOut.end(); iter++) { + iter->first->BranchesIn.insert(Curr); + } + } + + // Recursively process the graph + + struct Analyzer : public RelooperRecursor { + Analyzer(Relooper *Parent) : RelooperRecursor(Parent) {} + + // Add a shape to the list of shapes in this Relooper calculation + void Notice(Shape *New) { + New->Id = Parent->ShapeIdCounter++; + Parent->Shapes.push_back(New); + } + + // Create a list of entries from a block. If LimitTo is provided, only results in that set + // will appear + void GetBlocksOut(Block *Source, BlockSet& Entries, BlockSet *LimitTo = nullptr) { + for (BlockBranchMap::iterator iter = Source->BranchesOut.begin(); iter != Source->BranchesOut.end(); iter++) { + if (!LimitTo || contains(*LimitTo, iter->first)) { + Entries.insert(iter->first); + } + } + } + + // Converts/processes all branchings to a specific target + void Solipsize(Block *Target, Branch::FlowType Type, Shape *Ancestor, BlockSet &From) { + PrintDebug("Solipsizing branches into %d\n", Target->Id); + DebugDump(From, " relevant to solipsize: "); + for (BlockSet::iterator iter = Target->BranchesIn.begin(); iter != Target->BranchesIn.end();) { + Block *Prior = *iter; + if (!contains(From, Prior)) { + iter++; + continue; + } + Branch *PriorOut = Prior->BranchesOut[Target]; + PriorOut->Ancestor = Ancestor; + PriorOut->Type = Type; + iter++; // carefully increment iter before erasing + Target->BranchesIn.erase(Prior); + Target->ProcessedBranchesIn.insert(Prior); + Prior->BranchesOut.erase(Target); + Prior->ProcessedBranchesOut[Target] = PriorOut; + PrintDebug(" eliminated branch from %d\n", Prior->Id); + } + } + + Shape *MakeSimple(BlockSet &Blocks, Block *Inner, BlockSet &NextEntries) { + PrintDebug("creating simple block with block #%d\n", Inner->Id); + SimpleShape *Simple = new SimpleShape; + Notice(Simple); + Simple->Inner = Inner; + Inner->Parent = Simple; + if (Blocks.size() > 1) { + Blocks.erase(Inner); + GetBlocksOut(Inner, NextEntries, &Blocks); + BlockSet JustInner; + JustInner.insert(Inner); + for (BlockSet::iterator iter = NextEntries.begin(); iter != NextEntries.end(); iter++) { + Solipsize(*iter, Branch::Break, Simple, JustInner); + } + } + return Simple; + } + + Shape *MakeLoop(BlockSet &Blocks, BlockSet& Entries, BlockSet &NextEntries) { + // Find the inner blocks in this loop. Proceed backwards from the entries until + // you reach a seen block, collecting as you go. + BlockSet InnerBlocks; + BlockSet Queue = Entries; + while (Queue.size() > 0) { + Block *Curr = *(Queue.begin()); + Queue.erase(Queue.begin()); + if (!contains(InnerBlocks, Curr)) { + // This element is new, mark it as inner and remove from outer + InnerBlocks.insert(Curr); + Blocks.erase(Curr); + // Add the elements prior to it + for (BlockSet::iterator iter = Curr->BranchesIn.begin(); iter != Curr->BranchesIn.end(); iter++) { + Queue.insert(*iter); + } +#if 0 + // Add elements it leads to, if they are dead ends. There is no reason not to hoist dead ends + // into loops, as it can avoid multiple entries after the loop + for (BlockBranchMap::iterator iter = Curr->BranchesOut.begin(); iter != Curr->BranchesOut.end(); iter++) { + Block *Target = iter->first; + if (Target->BranchesIn.size() <= 1 && Target->BranchesOut.size() == 0) { + Queue.insert(Target); + } + } +#endif + } + } + assert(InnerBlocks.size() > 0); + + for (BlockSet::iterator iter = InnerBlocks.begin(); iter != InnerBlocks.end(); iter++) { + Block *Curr = *iter; + for (BlockBranchMap::iterator iter = Curr->BranchesOut.begin(); iter != Curr->BranchesOut.end(); iter++) { + Block *Possible = iter->first; + if (!contains(InnerBlocks, Possible)) { + NextEntries.insert(Possible); + } + } + } + +#if 0 + // We can avoid multiple next entries by hoisting them into the loop. + if (NextEntries.size() > 1) { + BlockBlockSetMap IndependentGroups; + FindIndependentGroups(NextEntries, IndependentGroups, &InnerBlocks); + + while (IndependentGroups.size() > 0 && NextEntries.size() > 1) { + Block *Min = nullptr; + int MinSize = 0; + for (BlockBlockSetMap::iterator iter = IndependentGroups.begin(); iter != IndependentGroups.end(); iter++) { + Block *Entry = iter->first; + BlockSet &Blocks = iter->second; + if (!Min || Blocks.size() < MinSize) { // TODO: code size, not # of blocks + Min = Entry; + MinSize = Blocks.size(); + } + } + // check how many new entries this would cause + BlockSet &Hoisted = IndependentGroups[Min]; + bool abort = false; + for (BlockSet::iterator iter = Hoisted.begin(); iter != Hoisted.end() && !abort; iter++) { + Block *Curr = *iter; + for (BlockBranchMap::iterator iter = Curr->BranchesOut.begin(); iter != Curr->BranchesOut.end(); iter++) { + Block *Target = iter->first; + if (!contains(Hoisted, Target) && !contains(NextEntries, Target)) { + // abort this hoisting + abort = true; + break; + } + } + } + if (abort) { + IndependentGroups.erase(Min); + continue; + } + // hoist this entry + PrintDebug("hoisting %d into loop\n", Min->Id); + NextEntries.erase(Min); + for (BlockSet::iterator iter = Hoisted.begin(); iter != Hoisted.end(); iter++) { + Block *Curr = *iter; + InnerBlocks.insert(Curr); + Blocks.erase(Curr); + } + IndependentGroups.erase(Min); + } + } +#endif + + PrintDebug("creating loop block:\n", 0); + DebugDump(InnerBlocks, " inner blocks:"); + DebugDump(Entries, " inner entries:"); + DebugDump(Blocks, " outer blocks:"); + DebugDump(NextEntries, " outer entries:"); + + LoopShape *Loop = new LoopShape(); + Notice(Loop); + + // Solipsize the loop, replacing with break/continue and marking branches as Processed (will not affect later calculations) + // A. Branches to the loop entries become a continue to this shape + for (BlockSet::iterator iter = Entries.begin(); iter != Entries.end(); iter++) { + Solipsize(*iter, Branch::Continue, Loop, InnerBlocks); + } + // B. Branches to outside the loop (a next entry) become breaks on this shape + for (BlockSet::iterator iter = NextEntries.begin(); iter != NextEntries.end(); iter++) { + Solipsize(*iter, Branch::Break, Loop, InnerBlocks); + } + // Finish up + Shape *Inner = Process(InnerBlocks, Entries); + Loop->Inner = Inner; + Loop->Entries = Entries; + return Loop; + } + + // For each entry, find the independent group reachable by it. The independent group is + // the entry itself, plus all the blocks it can reach that cannot be directly reached by another entry. Note that we + // ignore directly reaching the entry itself by another entry. + // @param Ignore - previous blocks that are irrelevant + void FindIndependentGroups(BlockSet &Entries, BlockBlockSetMap& IndependentGroups, BlockSet *Ignore = nullptr) { + typedef std::map BlockBlockMap; + + struct HelperClass { + BlockBlockSetMap& IndependentGroups; + BlockBlockMap Ownership; // For each block, which entry it belongs to. We have reached it from there. + + HelperClass(BlockBlockSetMap& IndependentGroupsInit) : IndependentGroups(IndependentGroupsInit) {} + void InvalidateWithChildren(Block *New) { // TODO: rename New + BlockList ToInvalidate; // Being in the list means you need to be invalidated + ToInvalidate.push_back(New); + while (ToInvalidate.size() > 0) { + Block *Invalidatee = ToInvalidate.front(); + ToInvalidate.pop_front(); + Block *Owner = Ownership[Invalidatee]; + if (contains(IndependentGroups, Owner)) { // Owner may have been invalidated, do not add to IndependentGroups! + IndependentGroups[Owner].erase(Invalidatee); + } + if (Ownership[Invalidatee]) { // may have been seen before and invalidated already + Ownership[Invalidatee] = nullptr; + for (BlockBranchMap::iterator iter = Invalidatee->BranchesOut.begin(); iter != Invalidatee->BranchesOut.end(); iter++) { + Block *Target = iter->first; + BlockBlockMap::iterator Known = Ownership.find(Target); + if (Known != Ownership.end()) { + Block *TargetOwner = Known->second; + if (TargetOwner) { + ToInvalidate.push_back(Target); + } + } + } + } + } + } + }; + HelperClass Helper(IndependentGroups); + + // We flow out from each of the entries, simultaneously. + // When we reach a new block, we add it as belonging to the one we got to it from. + // If we reach a new block that is already marked as belonging to someone, it is reachable by + // two entries and is not valid for any of them. Remove it and all it can reach that have been + // visited. + + BlockList Queue; // Being in the queue means we just added this item, and we need to add its children + for (BlockSet::iterator iter = Entries.begin(); iter != Entries.end(); iter++) { + Block *Entry = *iter; + Helper.Ownership[Entry] = Entry; + IndependentGroups[Entry].insert(Entry); + Queue.push_back(Entry); + } + while (Queue.size() > 0) { + Block *Curr = Queue.front(); + Queue.pop_front(); + Block *Owner = Helper.Ownership[Curr]; // Curr must be in the ownership map if we are in the queue + if (!Owner) continue; // we have been invalidated meanwhile after being reached from two entries + // Add all children + for (BlockBranchMap::iterator iter = Curr->BranchesOut.begin(); iter != Curr->BranchesOut.end(); iter++) { + Block *New = iter->first; + BlockBlockMap::iterator Known = Helper.Ownership.find(New); + if (Known == Helper.Ownership.end()) { + // New node. Add it, and put it in the queue + Helper.Ownership[New] = Owner; + IndependentGroups[Owner].insert(New); + Queue.push_back(New); + continue; + } + Block *NewOwner = Known->second; + if (!NewOwner) continue; // We reached an invalidated node + if (NewOwner != Owner) { + // Invalidate this and all reachable that we have seen - we reached this from two locations + Helper.InvalidateWithChildren(New); + } + // otherwise, we have the same owner, so do nothing + } + } + + // Having processed all the interesting blocks, we remain with just one potential issue: + // If a->b, and a was invalidated, but then b was later reached by someone else, we must + // invalidate b. To check for this, we go over all elements in the independent groups, + // if an element has a parent which does *not* have the same owner, we must remove it + // and all its children. + + for (BlockSet::iterator iter = Entries.begin(); iter != Entries.end(); iter++) { + BlockSet &CurrGroup = IndependentGroups[*iter]; + BlockList ToInvalidate; + for (BlockSet::iterator iter = CurrGroup.begin(); iter != CurrGroup.end(); iter++) { + Block *Child = *iter; + for (BlockSet::iterator iter = Child->BranchesIn.begin(); iter != Child->BranchesIn.end(); iter++) { + Block *Parent = *iter; + if (Ignore && contains(*Ignore, Parent)) continue; + if (Helper.Ownership[Parent] != Helper.Ownership[Child]) { + ToInvalidate.push_back(Child); + } + } + } + while (ToInvalidate.size() > 0) { + Block *Invalidatee = ToInvalidate.front(); + ToInvalidate.pop_front(); + Helper.InvalidateWithChildren(Invalidatee); + } + } + + // Remove empty groups + for (BlockSet::iterator iter = Entries.begin(); iter != Entries.end(); iter++) { + if (IndependentGroups[*iter].size() == 0) { + IndependentGroups.erase(*iter); + } + } + +#ifdef RELOOPER_DEBUG + PrintDebug("Investigated independent groups:\n"); + for (BlockBlockSetMap::iterator iter = IndependentGroups.begin(); iter != IndependentGroups.end(); iter++) { + DebugDump(iter->second, " group: "); + } +#endif + } + + Shape *MakeMultiple(BlockSet &Blocks, BlockSet& Entries, BlockBlockSetMap& IndependentGroups, BlockSet &NextEntries, bool IsCheckedMultiple) { + PrintDebug("creating multiple block with %d inner groups\n", IndependentGroups.size()); + MultipleShape *Multiple = new MultipleShape(); + Notice(Multiple); + BlockSet CurrEntries; + for (BlockBlockSetMap::iterator iter = IndependentGroups.begin(); iter != IndependentGroups.end(); iter++) { + Block *CurrEntry = iter->first; + BlockSet &CurrBlocks = iter->second; + PrintDebug(" multiple group with entry %d:\n", CurrEntry->Id); + DebugDump(CurrBlocks, " "); + // Create inner block + CurrEntries.clear(); + CurrEntries.insert(CurrEntry); + for (BlockSet::iterator iter = CurrBlocks.begin(); iter != CurrBlocks.end(); iter++) { + Block *CurrInner = *iter; + // Remove the block from the remaining blocks + Blocks.erase(CurrInner); + // Find new next entries and fix branches to them + for (BlockBranchMap::iterator iter = CurrInner->BranchesOut.begin(); iter != CurrInner->BranchesOut.end();) { + Block *CurrTarget = iter->first; + BlockBranchMap::iterator Next = iter; + Next++; + if (!contains(CurrBlocks, CurrTarget)) { + NextEntries.insert(CurrTarget); + Solipsize(CurrTarget, Branch::Break, Multiple, CurrBlocks); + } + iter = Next; // increment carefully because Solipsize can remove us + } + } + Multiple->InnerMap[CurrEntry->Id] = Process(CurrBlocks, CurrEntries); + if (IsCheckedMultiple) { + CurrEntry->IsCheckedMultipleEntry = true; + } + } + DebugDump(Blocks, " remaining blocks after multiple:"); + // Add entries not handled as next entries, they are deferred + for (BlockSet::iterator iter = Entries.begin(); iter != Entries.end(); iter++) { + Block *Entry = *iter; + if (!contains(IndependentGroups, Entry)) { + NextEntries.insert(Entry); + } + } + return Multiple; + } + + // Main function. + // Process a set of blocks with specified entries, returns a shape + // The Make* functions receive a NextEntries. If they fill it with data, those are the entries for the + // ->Next block on them, and the blocks are what remains in Blocks (which Make* modify). In this way + // we avoid recursing on Next (imagine a long chain of Simples, if we recursed we could blow the stack). + Shape *Process(BlockSet &Blocks, BlockSet& InitialEntries) { + PrintDebug("Process() called\n", 0); + BlockSet *Entries = &InitialEntries; + BlockSet TempEntries[2]; + int CurrTempIndex = 0; + BlockSet *NextEntries; + Shape *Ret = nullptr; + Shape *Prev = nullptr; + #define Make(call) \ + Shape *Temp = call; \ + if (Prev) Prev->Next = Temp; \ + if (!Ret) Ret = Temp; \ + if (!NextEntries->size()) { PrintDebug("Process() returning\n", 0); return Ret; } \ + Prev = Temp; \ + Entries = NextEntries; \ + continue; + while (1) { + PrintDebug("Process() running\n", 0); + DebugDump(Blocks, " blocks : "); + DebugDump(*Entries, " entries: "); + + CurrTempIndex = 1-CurrTempIndex; + NextEntries = &TempEntries[CurrTempIndex]; + NextEntries->clear(); + + if (Entries->size() == 0) return Ret; + if (Entries->size() == 1) { + Block *Curr = *(Entries->begin()); + if (Curr->BranchesIn.size() == 0) { + // One entry, no looping ==> Simple + Make(MakeSimple(Blocks, Curr, *NextEntries)); + } + // One entry, looping ==> Loop + Make(MakeLoop(Blocks, *Entries, *NextEntries)); + } + + // More than one entry, try to eliminate through a Multiple groups of + // independent blocks from an entry/ies. It is important to remove through + // multiples as opposed to looping since the former is more performant. + BlockBlockSetMap IndependentGroups; + FindIndependentGroups(*Entries, IndependentGroups); + + PrintDebug("Independent groups: %d\n", IndependentGroups.size()); + + if (IndependentGroups.size() > 0) { + // We can handle a group in a multiple if its entry cannot be reached by another group. + // Note that it might be reachable by itself - a loop. But that is fine, we will create + // a loop inside the multiple block, which is both the performant order to do it, and + // preserves the property that a loop will always reach an entry. + for (BlockBlockSetMap::iterator iter = IndependentGroups.begin(); iter != IndependentGroups.end();) { + Block *Entry = iter->first; + BlockSet &Group = iter->second; + BlockBlockSetMap::iterator curr = iter++; // iterate carefully, we may delete + for (BlockSet::iterator iterBranch = Entry->BranchesIn.begin(); iterBranch != Entry->BranchesIn.end(); iterBranch++) { + Block *Origin = *iterBranch; + if (!contains(Group, Origin)) { + // Reached from outside the group, so we cannot handle this + PrintDebug("Cannot handle group with entry %d because of incoming branch from %d\n", Entry->Id, Origin->Id); + IndependentGroups.erase(curr); + break; + } + } + } + + // As an optimization, if we have 2 independent groups, and one is a small dead end, we can handle only that dead end. + // The other then becomes a Next - without nesting in the code and recursion in the analysis. + // TODO: if the larger is the only dead end, handle that too + // TODO: handle >2 groups + // TODO: handle not just dead ends, but also that do not branch to the NextEntries. However, must be careful + // there since we create a Next, and that Next can prevent eliminating a break (since we no longer + // naturally reach the same place), which may necessitate a one-time loop, which makes the unnesting + // pointless. + if (IndependentGroups.size() == 2) { + // Find the smaller one + BlockBlockSetMap::iterator iter = IndependentGroups.begin(); + Block *SmallEntry = iter->first; + int SmallSize = iter->second.size(); + iter++; + Block *LargeEntry = iter->first; + int LargeSize = iter->second.size(); + if (SmallSize != LargeSize) { // ignore the case where they are identical - keep things symmetrical there + if (SmallSize > LargeSize) { + Block *Temp = SmallEntry; + SmallEntry = LargeEntry; + LargeEntry = Temp; // Note: we did not flip the Sizes too, they are now invalid. TODO: use the smaller size as a limit? + } + // Check if dead end + bool DeadEnd = true; + BlockSet &SmallGroup = IndependentGroups[SmallEntry]; + for (BlockSet::iterator iter = SmallGroup.begin(); iter != SmallGroup.end(); iter++) { + Block *Curr = *iter; + for (BlockBranchMap::iterator iter = Curr->BranchesOut.begin(); iter != Curr->BranchesOut.end(); iter++) { + Block *Target = iter->first; + if (!contains(SmallGroup, Target)) { + DeadEnd = false; + break; + } + } + if (!DeadEnd) break; + } + if (DeadEnd) { + PrintDebug("Removing nesting by not handling large group because small group is dead end\n", 0); + IndependentGroups.erase(LargeEntry); + } + } + } + + PrintDebug("Handleable independent groups: %d\n", IndependentGroups.size()); + + if (IndependentGroups.size() > 0) { + // Some groups removable ==> Multiple + // This is a checked multiple if it has an entry that is an entry to this Process call, that is, + // if we can reach it from outside this set of blocks, then we must check the label variable + // to do so. Otherwise, if it is just internal blocks, those can always be jumped to forward, + // without using the label variable + bool Checked = false; + for (auto* Entry : *Entries) { + if (InitialEntries.count(Entry)) { + Checked = true; + break; + } + } + Make(MakeMultiple(Blocks, *Entries, IndependentGroups, *NextEntries, Checked)); + } + } + // No independent groups, must be loopable ==> Loop + Make(MakeLoop(Blocks, *Entries, *NextEntries)); + } + } + }; + + // Main + + BlockSet AllBlocks; + for (BlockSet::iterator iter = Pre.Live.begin(); iter != Pre.Live.end(); iter++) { + Block *Curr = *iter; + AllBlocks.insert(Curr); +#ifdef RELOOPER_DEBUG + PrintDebug("Adding block %d (%s)\n", Curr->Id, Curr->Code); +#endif + } + + BlockSet Entries; + Entries.insert(Entry); + Root = Analyzer(this).Process(AllBlocks, Entries); + assert(Root); +} + +wasm::Expression* Relooper::Render(RelooperBuilder& Builder) { + assert(Root); + auto* ret = Root->Render(Builder, false); + // we may use the same name for more than one block in HandleFollowupMultiples + wasm::UniqueNameMapper::uniquify(ret); + return ret; +} + +#ifdef RELOOPER_DEBUG +// Debugging + +void Debugging::Dump(BlockSet &Blocks, const char *prefix) { + if (prefix) printf("%s ", prefix); + for (BlockSet::iterator iter = Blocks.begin(); iter != Blocks.end(); iter++) { + Block *Curr = *iter; + printf("%d:\n", Curr->Id); + for (BlockBranchMap::iterator iter2 = Curr->BranchesOut.begin(); iter2 != Curr->BranchesOut.end(); iter2++) { + Block *Other = iter2->first; + printf(" -> %d\n", Other->Id); + assert(contains(Other->BranchesIn, Curr)); + } + } +} + +void Debugging::Dump(Shape *S, const char *prefix) { + if (prefix) printf("%s ", prefix); + if (!S) { + printf(" (null)\n"); + return; + } + printf(" %d ", S->Id); + if (SimpleShape *Simple = Shape::IsSimple(S)) { + printf("<< Simple with block %d\n", Simple->Inner->Id); + } else if (MultipleShape *Multiple = Shape::IsMultiple(S)) { + printf("<< Multiple\n"); + for (IdShapeMap::iterator iter = Multiple->InnerMap.begin(); iter != Multiple->InnerMap.end(); iter++) { + printf(" with entry %d\n", iter->first); + } + } else if (Shape::IsLoop(S)) { + printf("<< Loop\n"); + } else { + abort(); + } +} + +static void PrintDebug(const char *Format, ...) { + printf("// "); + va_list Args; + va_start(Args, Format); + vprintf(Format, Args); + va_end(Args); +} +#endif + +} // namespace CFG diff --git a/src/binaryen/src/cfg/Relooper.h b/src/binaryen/src/cfg/Relooper.h new file mode 100644 index 0000000000..f12ed2945d --- /dev/null +++ b/src/binaryen/src/cfg/Relooper.h @@ -0,0 +1,361 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* +This is an optimized C++ implemention of the Relooper algorithm originally +developed as part of Emscripten. This implementation includes optimizations +added since the original academic paper [1] was published about it. + +[1] Alon Zakai. 2011. Emscripten: an LLVM-to-JavaScript compiler. In Proceedings of the ACM international conference companion on Object oriented programming systems languages and applications companion (SPLASH '11). ACM, New York, NY, USA, 301-312. DOI=10.1145/2048147.2048224 http://doi.acm.org/10.1145/2048147.2048224 +*/ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "wasm.h" +#include "wasm-builder.h" + +namespace CFG { + +class RelooperBuilder : public wasm::Builder { + wasm::Index labelHelper; + +public: + RelooperBuilder(wasm::Module& wasm, wasm::Index labelHelper) : wasm::Builder(wasm), labelHelper(labelHelper) {} + + wasm::GetLocal* makeGetLabel() { + return makeGetLocal(labelHelper, wasm::i32); + } + wasm::SetLocal* makeSetLabel(wasm::Index value) { + return makeSetLocal(labelHelper, makeConst(wasm::Literal(int32_t(value)))); + } + wasm::Binary* makeCheckLabel(wasm::Index value) { + return makeBinary(wasm::EqInt32, makeGetLabel(), makeConst(wasm::Literal(int32_t(value)))); + } + + // breaks are on blocks, as they can be specific, we make one wasm block per basic block + wasm::Break* makeBlockBreak(int id) { + return wasm::Builder::makeBreak(getBlockBreakName(id)); + } + // continues are on shapes, as there is one per loop, and if we have more than one + // going there, it is irreducible control flow anyhow + wasm::Break* makeShapeContinue(int id) { + return wasm::Builder::makeBreak(getShapeContinueName(id)); + } + + wasm::Name getBlockBreakName(int id) { + return wasm::Name(std::string("block$") + std::to_string(id) + "$break"); + } + wasm::Name getShapeContinueName(int id) { + return wasm::Name(std::string("shape$") + std::to_string(id) + "$continue"); + } +}; + +struct Block; +struct Shape; + +// Info about a branching from one block to another +struct Branch { + enum FlowType { + Direct = 0, // We will directly reach the right location through other means, no need for continue or break + Break = 1, + Continue = 2 + }; + Shape *Ancestor; // If not NULL, this shape is the relevant one for purposes of getting to the target block. We break or continue on it + Branch::FlowType Type; // If Ancestor is not NULL, this says whether to break or continue + + // A branch either has a condition expression if the block ends in ifs, or if the block ends in a switch, then a list of indexes, which + // becomes the indexes in the table of the switch. If not a switch, the condition can be any expression. + wasm::Expression* Condition; + std::unique_ptr> SwitchValues; // switches are rare, so have just a pointer here + + wasm::Expression* Code; // If provided, code that is run right before the branch is taken. This is useful for phis + + Branch(wasm::Expression* ConditionInit, wasm::Expression* CodeInit = nullptr); + + Branch(std::vector&& ValuesInit, wasm::Expression* CodeInit = nullptr); + + // Emits code for branch + wasm::Expression* Render(RelooperBuilder& Builder, Block *Target, bool SetLabel); +}; + +// like std::set, except that begin() -> end() iterates in the +// order that elements were added to the set (not in the order +// of operator<(T, T)) +template +struct InsertOrderedSet +{ + std::map::iterator> Map; + std::list List; + + typedef typename std::list::iterator iterator; + iterator begin() { return List.begin(); } + iterator end() { return List.end(); } + + void erase(const T& val) { + auto it = Map.find(val); + if (it != Map.end()) { + List.erase(it->second); + Map.erase(it); + } + } + + void erase(iterator position) { + Map.erase(*position); + List.erase(position); + } + + // cheating a bit, not returning the iterator + void insert(const T& val) { + auto it = Map.find(val); + if (it == Map.end()) { + List.push_back(val); + Map.insert(std::make_pair(val, --List.end())); + } + } + + size_t size() const { return Map.size(); } + bool empty() const { return Map.empty(); } + + void clear() { + Map.clear(); + List.clear(); + } + + size_t count(const T& val) const { return Map.count(val); } + + InsertOrderedSet() {} + InsertOrderedSet(const InsertOrderedSet& other) { + *this = other; + } + InsertOrderedSet& operator=(const InsertOrderedSet& other) { + clear(); + for (auto i : other.List) { + insert(i); // inserting manually creates proper iterators + } + return *this; + } +}; + +// like std::map, except that begin() -> end() iterates in the +// order that elements were added to the map (not in the order +// of operator<(Key, Key)) +template +struct InsertOrderedMap +{ + std::map>::iterator> Map; + std::list> List; + + T& operator[](const Key& k) { + auto it = Map.find(k); + if (it == Map.end()) { + List.push_back(std::make_pair(k, T())); + auto e = --List.end(); + Map.insert(std::make_pair(k, e)); + return e->second; + } + return it->second->second; + } + + typedef typename std::list>::iterator iterator; + iterator begin() { return List.begin(); } + iterator end() { return List.end(); } + + void erase(const Key& k) { + auto it = Map.find(k); + if (it != Map.end()) { + List.erase(it->second); + Map.erase(it); + } + } + + void erase(iterator position) { + erase(position->first); + } + + size_t size() const { return Map.size(); } + bool empty() const { return Map.empty(); } + size_t count(const Key& k) const { return Map.count(k); } + + InsertOrderedMap() {} + InsertOrderedMap(InsertOrderedMap& other) { + abort(); // TODO, watch out for iterators + } + InsertOrderedMap& operator=(const InsertOrderedMap& other) { + abort(); // TODO, watch out for iterators + } +}; + + +typedef InsertOrderedSet BlockSet; +typedef InsertOrderedMap BlockBranchMap; + +// Represents a basic block of code - some instructions that end with a +// control flow modifier (a branch, return or throw). +struct Block { + // Branches become processed after we finish the shape relevant to them. For example, + // when we recreate a loop, branches to the loop start become continues and are now + // processed. When we calculate what shape to generate from a set of blocks, we ignore + // processed branches. + // Blocks own the Branch objects they use, and destroy them when done. + BlockBranchMap BranchesOut; + BlockSet BranchesIn; + BlockBranchMap ProcessedBranchesOut; + BlockSet ProcessedBranchesIn; + Shape *Parent; // The shape we are directly inside + int Id; // A unique identifier, defined when added to relooper + wasm::Expression* Code; // The code in this block. This can be arbitrary wasm code, including internal control flow, it should just not branch to the outside + wasm::Expression* SwitchCondition; // If nullptr, then this block ends in ifs (or nothing). otherwise, this block ends in a switch, done on this condition + bool IsCheckedMultipleEntry; // If true, we are a multiple entry, so reaching us requires setting the label variable + + Block(wasm::Expression* CodeInit, wasm::Expression* SwitchConditionInit = nullptr); + ~Block(); + + // Add a branch: if the condition holds we branch (or if null, we branch if all others failed) + // Note that there can be only one branch from A to B (if you need multiple conditions for the branch, + // create a more interesting expression in the Condition). + void AddBranchTo(Block *Target, wasm::Expression* Condition, wasm::Expression* Code = nullptr); + + // Add a switch branch: if the switch condition is one of these values, we branch (or if the list is empty, we are the default) + // Note that there can be only one branch from A to B (if you need multiple values for the branch, that's what the array and default are for). + void AddSwitchBranchTo(Block *Target, std::vector&& Values, wasm::Expression* Code = nullptr); + + // Emit code for the block, including its contents and branchings out + wasm::Expression* Render(RelooperBuilder& Builder, bool InLoop); +}; + +// Represents a structured control flow shape, one of +// +// Simple: No control flow at all, just instructions in a single +// basic block. +// +// Multiple: A shape with at least one entry. We may visit one of +// the entries, or none, before continuing to the next +// shape after this. +// +// Loop: An infinite loop. We assume the property that a loop +// will always visit one of its entries, and so for example +// we cannot have a loop containing a multiple and nothing +// else (since we might not visit any of the multiple's +// blocks). Multiple entries are possible for the block, +// however, which is necessary for irreducible control +// flow, of course. +// + +struct SimpleShape; +struct MultipleShape; +struct LoopShape; + +struct Shape { + int Id; // A unique identifier. Used to identify loops, labels are Lx where x is the Id. Defined when added to relooper + Shape *Next; // The shape that will appear in the code right after this one + Shape *Natural; // The shape that control flow gets to naturally (if there is Next, then this is Next) + + enum ShapeType { + Simple, + Multiple, + Loop + }; + ShapeType Type; + + Shape(ShapeType TypeInit) : Id(-1), Next(NULL), Type(TypeInit) {} + virtual ~Shape() {} + + virtual wasm::Expression* Render(RelooperBuilder& Builder, bool InLoop) = 0; + + static SimpleShape *IsSimple(Shape *It) { return It && It->Type == Simple ? (SimpleShape*)It : NULL; } + static MultipleShape *IsMultiple(Shape *It) { return It && It->Type == Multiple ? (MultipleShape*)It : NULL; } + static LoopShape *IsLoop(Shape *It) { return It && It->Type == Loop ? (LoopShape*)It : NULL; } +}; + +struct SimpleShape : public Shape { + Block *Inner; + + SimpleShape() : Shape(Simple), Inner(NULL) {} + wasm::Expression* Render(RelooperBuilder& Builder, bool InLoop) override; +}; + +typedef std::map IdShapeMap; + +struct MultipleShape : public Shape { + IdShapeMap InnerMap; // entry block ID -> shape + + MultipleShape() : Shape(Multiple) {} + + wasm::Expression* Render(RelooperBuilder& Builder, bool InLoop) override; +}; + +struct LoopShape : public Shape { + Shape *Inner; + + BlockSet Entries; // we must visit at least one of these + + LoopShape() : Shape(Loop), Inner(NULL) {} + wasm::Expression* Render(RelooperBuilder& Builder, bool InLoop) override; +}; + +// Implements the relooper algorithm for a function's blocks. +// +// Usage: +// 1. Instantiate this struct. +// 2. Call AddBlock with the blocks you have. Each should already +// have its branchings in specified (the branchings out will +// be calculated by the relooper). +// 3. Call Render(). +// +// Implementation details: The Relooper instance has +// ownership of the blocks and shapes, and frees them when done. +struct Relooper { + std::deque Blocks; + std::deque Shapes; + Shape *Root; + bool MinSize; + int BlockIdCounter; + int ShapeIdCounter; + + Relooper(); + ~Relooper(); + + void AddBlock(Block *New, int Id=-1); + + // Calculates the shapes + void Calculate(Block *Entry); + + // Renders the result. + wasm::Expression* Render(RelooperBuilder& Builder); + + // Sets us to try to minimize size + void SetMinSize(bool MinSize_) { MinSize = MinSize_; } +}; + +typedef InsertOrderedMap BlockBlockSetMap; + +#ifdef RELOOPER_DEBUG +struct Debugging { + static void Dump(BlockSet &Blocks, const char *prefix=NULL); + static void Dump(Shape *S, const char *prefix=NULL); +}; +#endif + +} // namespace CFG diff --git a/src/binaryen/src/cfg/cfg-traversal.h b/src/binaryen/src/cfg/cfg-traversal.h new file mode 100644 index 0000000000..13bb0c7442 --- /dev/null +++ b/src/binaryen/src/cfg/cfg-traversal.h @@ -0,0 +1,344 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Convert the AST to a CFG, while traversing it. +// +// Note that this is not the same as the relooper CFG. The relooper is +// designed for compilation to an AST, this is for processing. There is +// no built-in support for transforming this CFG into the AST back +// again, it is just metadata on the side for computation purposes. +// +// Usage: As the traversal proceeds, you can note information and add it to +// the current basic block using currBasicBlock, on the contents +// property, whose type is user-defined. +// + +#ifndef cfg_traversal_h +#define cfg_traversal_h + +#include "wasm.h" +#include "wasm-traversal.h" + +namespace wasm { + +template +struct CFGWalker : public ControlFlowWalker { + + // public interface + + struct BasicBlock { + Contents contents; // custom contents + std::vector out, in; + }; + + BasicBlock* entry; // the entry block + + BasicBlock* makeBasicBlock() { // override this with code to create a BasicBlock if necessary + return new BasicBlock(); + } + + // internal details + + std::vector> basicBlocks; // all the blocks + std::vector loopTops; // blocks that are the tops of loops, i.e., have backedges to them + + // traversal state + BasicBlock* currBasicBlock; // the current block in play during traversal. can be nullptr if unreachable, + // but note that we don't do a deep unreachability analysis - just enough + // to avoid constructing obviously-unreachable blocks (we do a full reachability + // analysis on the CFG once it is constructed). + std::map> branches; // a block or loop => its branches + std::vector ifStack; + std::vector loopStack; + + void startBasicBlock() { + currBasicBlock = makeBasicBlock(); + basicBlocks.push_back(std::unique_ptr(currBasicBlock)); + } + + void startUnreachableBlock() { + currBasicBlock = nullptr; + } + + static void doStartUnreachableBlock(SubType* self, Expression** currp) { + self->startUnreachableBlock(); + } + + void link(BasicBlock* from, BasicBlock* to) { + if (!from || !to) return; // if one of them is not reachable, ignore + from->out.push_back(to); + to->in.push_back(from); + } + + static void doEndBlock(SubType* self, Expression** currp) { + auto* curr = (*currp)->cast(); + if (!curr->name.is()) return; + auto iter = self->branches.find(curr); + if (iter == self->branches.end()) return; + auto& origins = iter->second; + if (origins.size() == 0) return; + // we have branches to here, so we need a new block + auto* last = self->currBasicBlock; + self->startBasicBlock(); + self->link(last, self->currBasicBlock); // fallthrough + // branches to the new one + for (auto* origin : origins) { + self->link(origin, self->currBasicBlock); + } + self->branches.erase(curr); + } + + static void doStartIfTrue(SubType* self, Expression** currp) { + auto* last = self->currBasicBlock; + self->startBasicBlock(); + self->link(last, self->currBasicBlock); // ifTrue + self->ifStack.push_back(last); // the block before the ifTrue + } + + static void doStartIfFalse(SubType* self, Expression** currp) { + self->ifStack.push_back(self->currBasicBlock); // the ifTrue fallthrough + self->startBasicBlock(); + self->link(self->ifStack[self->ifStack.size() - 2], self->currBasicBlock); // before if -> ifFalse + } + + static void doEndIf(SubType* self, Expression** currp) { + auto* last = self->currBasicBlock; + self->startBasicBlock(); + self->link(last, self->currBasicBlock); // last one is ifFalse's fallthrough if there was one, otherwise it's the ifTrue fallthrough + if ((*currp)->cast()->ifFalse) { + // we just linked ifFalse, need to link ifTrue to the end + self->link(self->ifStack.back(), self->currBasicBlock); + self->ifStack.pop_back(); + } else { + // no ifFalse, so add a fallthrough for if the if is not taken + self->link(self->ifStack.back(), self->currBasicBlock); + } + self->ifStack.pop_back(); + } + + static void doStartLoop(SubType* self, Expression** currp) { + auto* last = self->currBasicBlock; + self->startBasicBlock(); + self->loopTops.push_back(self->currBasicBlock); // a loop with no backedges would still be counted here, but oh well + self->link(last, self->currBasicBlock); + self->loopStack.push_back(self->currBasicBlock); + } + + static void doEndLoop(SubType* self, Expression** currp) { + auto* last = self->currBasicBlock; + self->startBasicBlock(); + self->link(last, self->currBasicBlock); // fallthrough + auto* curr = (*currp)->cast(); + // branches to the top of the loop + if (curr->name.is()) { + auto* loopStart = self->loopStack.back(); + auto& origins = self->branches[curr]; + for (auto* origin : origins) { + self->link(origin, loopStart); + } + self->branches.erase(curr); + } + self->loopStack.pop_back(); + } + + static void doEndBreak(SubType* self, Expression** currp) { + auto* curr = (*currp)->cast(); + self->branches[self->findBreakTarget(curr->name)].push_back(self->currBasicBlock); // branch to the target + if (curr->condition) { + auto* last = self->currBasicBlock; + self->startBasicBlock(); + self->link(last, self->currBasicBlock); // we might fall through + } else { + self->startUnreachableBlock(); + } + } + + static void doEndSwitch(SubType* self, Expression** currp) { + auto* curr = (*currp)->cast(); + std::set seen; // we might see the same label more than once; do not spam branches + for (Name target : curr->targets) { + if (!seen.count(target)) { + self->branches[self->findBreakTarget(target)].push_back(self->currBasicBlock); // branch to the target + seen.insert(target); + } + } + if (!seen.count(curr->default_)) { + self->branches[self->findBreakTarget(curr->default_)].push_back(self->currBasicBlock); // branch to the target + } + self->startUnreachableBlock(); + } + + static void scan(SubType* self, Expression** currp) { + Expression* curr = *currp; + + switch (curr->_id) { + case Expression::Id::BlockId: { + self->pushTask(SubType::doEndBlock, currp); + break; + } + case Expression::Id::IfId: { + self->pushTask(SubType::doEndIf, currp); + auto* ifFalse = curr->cast()->ifFalse; + if (ifFalse) { + self->pushTask(SubType::scan, &curr->cast()->ifFalse); + self->pushTask(SubType::doStartIfFalse, currp); + } + self->pushTask(SubType::scan, &curr->cast()->ifTrue); + self->pushTask(SubType::doStartIfTrue, currp); + self->pushTask(SubType::scan, &curr->cast()->condition); + return; // don't do anything else + } + case Expression::Id::LoopId: { + self->pushTask(SubType::doEndLoop, currp); + break; + } + case Expression::Id::BreakId: { + self->pushTask(SubType::doEndBreak, currp); + break; + } + case Expression::Id::SwitchId: { + self->pushTask(SubType::doEndSwitch, currp); + break; + } + case Expression::Id::ReturnId: { + self->pushTask(SubType::doStartUnreachableBlock, currp); + break; + } + case Expression::Id::UnreachableId: { + self->pushTask(SubType::doStartUnreachableBlock, currp); + break; + } + default: {} + } + + ControlFlowWalker::scan(self, currp); + + switch (curr->_id) { + case Expression::Id::LoopId: { + self->pushTask(SubType::doStartLoop, currp); + break; + } + default: {} + } + } + + void doWalkFunction(Function* func) { + basicBlocks.clear(); + + startBasicBlock(); + entry = currBasicBlock; + ControlFlowWalker::doWalkFunction(func); + + assert(branches.size() == 0); + assert(ifStack.size() == 0); + assert(loopStack.size() == 0); + } + + std::unordered_set findLiveBlocks() { + std::unordered_set alive; + std::unordered_set queue; + queue.insert(entry); + while (queue.size() > 0) { + auto iter = queue.begin(); + auto* curr = *iter; + queue.erase(iter); + alive.insert(curr); + for (auto* out : curr->out) { + if (!alive.count(out)) queue.insert(out); + } + } + return alive; + } + + void unlinkDeadBlocks(std::unordered_set alive) { + for (auto& block : basicBlocks) { + if (!alive.count(block.get())) { + block->in.clear(); + block->out.clear(); + continue; + } + block->in.erase(std::remove_if(block->in.begin(), block->in.end(), [&alive](BasicBlock* other) { + return !alive.count(other); + }), block->in.end()); + block->out.erase(std::remove_if(block->out.begin(), block->out.end(), [&alive](BasicBlock* other) { + return !alive.count(other); + }), block->out.end()); + } + } + + // TODO: utility method for optimizing cfg, removing empty blocks depending on their .content + + std::map debugIds; + + void generateDebugIds() { + if (debugIds.size() > 0) return; + for (auto& block : basicBlocks) { + debugIds[block.get()] = debugIds.size(); + } + } + + void dumpCFG(std::string message) { + std::cout << "<==\nCFG [" << message << "]:\n"; + generateDebugIds(); + for (auto& block : basicBlocks) { + assert(debugIds.count(block.get()) > 0); + std::cout << " block " << debugIds[block.get()] << ":\n"; + block->contents.dump(static_cast(this)->getFunction()); + for (auto& in : block->in) { + assert(debugIds.count(in) > 0); + assert(std::find(in->out.begin(), in->out.end(), block.get()) != in->out.end()); // must be a parallel link back + } + for (auto& out : block->out) { + assert(debugIds.count(out) > 0); + std::cout << " out: " << debugIds[out] << "\n"; + assert(std::find(out->in.begin(), out->in.end(), block.get()) != out->in.end()); // must be a parallel link back + } + checkDuplicates(block->in); + checkDuplicates(block->out); + } + std::cout << "==>\n"; + } + +private: + // links in out and in must be unique + void checkDuplicates(std::vector& list) { + std::unordered_set seen; + for (auto* curr : list) { + assert(seen.count(curr) == 0); + seen.insert(curr); + } + } + + void removeLink(std::vector& list, BasicBlock* toRemove) { + if (list.size() == 1) { + list.clear(); + return; + } + for (size_t i = 0; i < list.size(); i++) { + if (list[i] == toRemove) { + list[i] = list.back(); + list.pop_back(); + return; + } + } + WASM_UNREACHABLE(); + } +}; + +} // namespace wasm + +#endif // cfg_traversal_h diff --git a/src/binaryen/src/compiler-support.h b/src/binaryen/src/compiler-support.h new file mode 100644 index 0000000000..f105271b52 --- /dev/null +++ b/src/binaryen/src/compiler-support.h @@ -0,0 +1,56 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_compiler_support_h +#define wasm_compiler_support_h + +#ifndef __has_feature +# define __has_feature(x) 0 +#endif + +#ifndef __has_builtin +# define __has_builtin(x) 0 +#endif + +// If control flow reaches the point of the WASM_UNREACHABLE(), the program is +// undefined. +#if __has_builtin(__builtin_unreachable) && defined(NDEBUG) +# define WASM_UNREACHABLE() __builtin_unreachable() +#elif defined(_MSC_VER) +# define WASM_UNREACHABLE() __assume(false) +#elif __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__) +# include "sanitizer/common_interface_defs.h" +# define WASM_UNREACHABLE() do { __sanitizer_print_stack_trace(); __builtin_trap(); } while (0) +#else +# include +# define WASM_UNREACHABLE() abort() +#endif + +#ifdef __GNUC__ +#define WASM_NORETURN __attribute__((noreturn)) +#elif defined(_MSC_VER) +#define WASM_NORETURN __declspec(noreturn) +#else +#define WASM_NORETURN +#endif + +// The code might contain TODOs or stubs that read some values but do nothing +// with them. The compiler might fail with [-Werror,-Wunused-variable]. +// The WASM_UNUSED(varible) is a wrapper that helps to suppress the error. +#define WASM_UNUSED(expr) \ + do { if (sizeof expr) { (void)0; } } while (0) + +#endif // wasm_compiler_support_h diff --git a/src/binaryen/src/emscripten-optimizer/CMakeLists.txt b/src/binaryen/src/emscripten-optimizer/CMakeLists.txt new file mode 100644 index 0000000000..6c302b9919 --- /dev/null +++ b/src/binaryen/src/emscripten-optimizer/CMakeLists.txt @@ -0,0 +1,6 @@ +SET(emscripten-optimizer_SOURCES + optimizer-shared.cpp + parser.cpp + simple_ast.cpp +) +ADD_LIBRARY(emscripten-optimizer STATIC ${emscripten-optimizer_SOURCES}) diff --git a/src/binaryen/src/emscripten-optimizer/istring.h b/src/binaryen/src/emscripten-optimizer/istring.h new file mode 100644 index 0000000000..e9d8e7dfc9 --- /dev/null +++ b/src/binaryen/src/emscripten-optimizer/istring.h @@ -0,0 +1,187 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Interned String type, 100% interned on creation. Comparisons are always just a pointer comparison + +#ifndef wasm_istring_h +#define wasm_istring_h + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "support/threads.h" +#include "support/utilities.h" + +namespace cashew { + +struct IString { + const char *str; + + static size_t hash_c(const char *str) { // see http://www.cse.yorku.ca/~oz/hash.html + unsigned int hash = 5381; + int c; + while ((c = *str++)) { + hash = ((hash << 5) + hash) ^ c; + } + return (size_t)hash; + } + + class CStringHash : public std::hash { + public: + size_t operator()(const char *str) const { + return IString::hash_c(str); + } + }; + class CStringEqual : public std::equal_to { + public: + bool operator()(const char *x, const char *y) const { + return strcmp(x, y) == 0; + } + }; + + IString() : str(nullptr) {} + IString(const char *s, bool reuse=true) { // if reuse=true, then input is assumed to remain alive; not copied + assert(s); + set(s, reuse); + } + + void set(const char *s, bool reuse=true) { + typedef std::unordered_set StringSet; + + // if the string isn't already known, we must use a single global + // storage location, guarded by a mutex, so each string is allocated + // exactly once + static std::mutex mutex; + std::unique_lock lock(mutex); + // a single global set contains the actual strings, so we allocate each one + // exactly once. + static StringSet globalStrings; + auto globalExisting = globalStrings.find(s); + if (globalExisting == globalStrings.end()) { + if (!reuse) { + static std::vector> allocated; + allocated.emplace_back(wasm::make_unique(s)); + s = allocated.back()->c_str(); // we'll never modify it, so this is ok + } + // insert into global set + globalStrings.insert(s); + } else { + s = *globalExisting; + } + + str = s; + } + + void set(const IString &s) { + str = s.str; + } + + void clear() { + str = nullptr; + } + + bool operator==(const IString& other) const { + //assert((str == other.str) == !strcmp(str, other.str)); + return str == other.str; // fast! + } + bool operator!=(const IString& other) const { + //assert((str == other.str) == !strcmp(str, other.str)); + return str != other.str; // fast! + } + bool operator<(const IString& other) const { + return strcmp(str ? str : "", other.str ? other.str : "") < 0; + } + + char operator[](int x) const { + return str[x]; + } + + bool operator!() const { // no string, or empty string + return !str || str[0] == 0; + } + + const char *c_str() const { return str; } + bool equals(const char *other) const { return !strcmp(str, other); } + + bool is() const { return str != nullptr; } + bool isNull() const { return str == nullptr; } +}; + +} // namespace cashew + +// Utilities for creating hashmaps/sets over IStrings + +namespace std { + +template <> struct hash : public unary_function { + size_t operator()(const cashew::IString& str) const { + size_t hash = size_t(str.str); + return hash = ((hash << 5) + hash) ^ 5381; /* (hash * 33) ^ c */ + } +}; + +template <> struct equal_to : public binary_function { + bool operator()(const cashew::IString& x, const cashew::IString& y) const { + return x == y; + } +}; + +} // namespace std + +namespace cashew { + +// IStringSet + +class IStringSet : public std::unordered_set { + std::vector data; +public: + IStringSet() {} + IStringSet(const char *init) { // comma-delimited list + int size = strlen(init) + 1; + data.resize(size); + char *curr = &data[0]; + strncpy(curr, init, size); + while (1) { + char *end = strchr(curr, ' '); + if (end) *end = 0; + insert(curr); + if (!end) break; + curr = end + 1; + } + } + + bool has(const IString& str) { + return count(str) > 0; + } +}; + +class IOrderedStringSet : public std::set { +public: + bool has(const IString& str) { + return count(str) > 0; + } +}; + +} // namespace cashew + +#endif // wasm_istring_h diff --git a/src/binaryen/src/emscripten-optimizer/optimizer-shared.cpp b/src/binaryen/src/emscripten-optimizer/optimizer-shared.cpp new file mode 100644 index 0000000000..212aa112af --- /dev/null +++ b/src/binaryen/src/emscripten-optimizer/optimizer-shared.cpp @@ -0,0 +1,238 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "optimizer.h" +#include "support/safe_integer.h" + +using namespace cashew; + +IString ASM_FLOAT_ZERO; + +IString SIMD_INT8X16_CHECK("SIMD_Int8x16_check"), + SIMD_INT16X8_CHECK("SIMD_Int16x8_check"), + SIMD_INT32X4_CHECK("SIMD_Int32x4_check"), + SIMD_FLOAT32X4_CHECK("SIMD_Float32x4_check"), + SIMD_FLOAT64X2_CHECK("SIMD_Float64x2_check"); + +int parseInt(const char *str) { + int ret = *str - '0'; + while (*(++str)) { + ret *= 10; + ret += *str - '0'; + } + return ret; +} + +HeapInfo parseHeap(const char *name) { + HeapInfo ret; + if (name[0] != 'H' || name[1] != 'E' || name[2] != 'A' || name[3] != 'P') { + ret.valid = false; + return ret; + } + ret.valid = true; + ret.unsign = name[4] == 'U'; + ret.floaty = name[4] == 'F'; + ret.bits = parseInt(name + (ret.unsign || ret.floaty ? 5 : 4)); + ret.type = !ret.floaty ? ASM_INT : (ret.bits == 64 ? ASM_DOUBLE : ASM_FLOAT); + return ret; +} + +AsmType detectType(Ref node, AsmData *asmData, bool inVarDef, IString minifiedFround, bool allowI64) { + if (node->isString()) { + if (asmData) { + AsmType ret = asmData->getType(node->getCString()); + if (ret != ASM_NONE) return ret; + } + if (!inVarDef) { + if (node == INF || node == NaN) return ASM_DOUBLE; + if (node == TEMP_RET0) 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.isNull()) ASM_FLOAT_ZERO = node->getIString(); + else assert(node == ASM_FLOAT_ZERO); + return ASM_FLOAT; + } + if (node->isNumber()) { + if (!wasm::isInteger(node->getNumber())) return ASM_DOUBLE; + return ASM_INT; + } + switch (node[0]->getCString()[0]) { + case 'u': { + if (node[0] == UNARY_PREFIX) { + switch (node[1]->getCString()[0]) { + case '+': return ASM_DOUBLE; + case '-': return detectType(node[2], asmData, inVarDef, minifiedFround, allowI64); + case '!': case '~': return ASM_INT; + } + break; + } + break; + } + case 'c': { + if (node[0] == CALL) { + if (node[1]->isString()) { + IString name = node[1]->getIString(); + if (name == MATH_FROUND || name == minifiedFround) return ASM_FLOAT; + else if (allowI64 && (name == INT64 || name == INT64_CONST)) return ASM_INT64; + else if (name == SIMD_FLOAT32X4 || name == SIMD_FLOAT32X4_CHECK) return ASM_FLOAT32X4; + else if (name == SIMD_FLOAT64X2 || name == SIMD_FLOAT64X2_CHECK) return ASM_FLOAT64X2; + else if (name == SIMD_INT8X16 || name == SIMD_INT8X16_CHECK) return ASM_INT8X16; + else if (name == SIMD_INT16X8 || name == SIMD_INT16X8_CHECK) return ASM_INT16X8; + else if (name == SIMD_INT32X4 || name == SIMD_INT32X4_CHECK) return ASM_INT32X4; + } + return ASM_NONE; + } else if (node[0] == CONDITIONAL) { + return detectType(node[2], asmData, inVarDef, minifiedFround, allowI64); + } + break; + } + case 'b': { + if (node[0] == BINARY) { + switch (node[1]->getCString()[0]) { + case '+': case '-': + case '*': case '/': case '%': return detectType(node[2], asmData, inVarDef, minifiedFround, allowI64); + case '|': case '&': case '^': case '<': case '>': // handles <<, >>, >>=, <=, >= + case '=': case '!': { // handles ==, != + return ASM_INT; + } + } + } + break; + } + case 's': { + if (node[0] == SEQ) { + return detectType(node[2], asmData, inVarDef, minifiedFround, allowI64); + } else if (node[0] == SUB) { + assert(node[1]->isString()); + HeapInfo info = parseHeap(node[1][1]->getCString()); + if (info.valid) return ASM_NONE; + return info.floaty ? ASM_DOUBLE : ASM_INT; // XXX ASM_FLOAT? + } + break; + } + } + //dump("horrible", node); + //assert(0); + return ASM_NONE; +} + +static void abort_on(Ref node) { + node->stringify(std::cerr); + std::cerr << '\n'; + abort(); +} + +AsmSign detectSign(Ref node, IString minifiedFround) { + if (node->isString()) { + return ASM_FLEXIBLE; + } + if (node->isNumber()) { + double value = node->getNumber(); + if (value < 0) return ASM_SIGNED; + if (value > uint32_t(-1) || fmod(value, 1) != 0) return ASM_NONSIGNED; + if (wasm::isSInteger32(value)) return ASM_FLEXIBLE; + return ASM_UNSIGNED; + } + IString type = node[0]->getIString(); + if (type == BINARY) { + IString op = node[1]->getIString(); + switch (op.str[0]) { + case '>': { + if (op == TRSHIFT) return ASM_UNSIGNED; + } // fallthrough + case '|': case '&': case '^': case '<': case '=': case '!': return ASM_SIGNED; + case '+': case '-': return ASM_FLEXIBLE; + case '*': case '/': return ASM_NONSIGNED; // without a coercion, these are double + default: abort_on(node); + } + } else if (type == UNARY_PREFIX) { + IString op = node[1]->getIString(); + switch (op.str[0]) { + case '-': return ASM_FLEXIBLE; + case '+': return ASM_NONSIGNED; // XXX double + case '~': return ASM_SIGNED; + default: abort_on(node); + } + } else if (type == CONDITIONAL) { + return detectSign(node[2], minifiedFround); + } else if (type == CALL) { + if (node[1]->isString() && (node[1] == MATH_FROUND || node[1] == minifiedFround)) return ASM_NONSIGNED; + } else if (type == SEQ) { + return detectSign(node[2], minifiedFround); + } + abort_on(node); + abort(); // avoid warning +} + +Ref makeAsmCoercedZero(AsmType type) { + switch (type) { + case ASM_INT: return ValueBuilder::makeNum(0); break; + case ASM_DOUBLE: return ValueBuilder::makeUnary(PLUS, ValueBuilder::makeNum(0)); break; + case ASM_FLOAT: { + if (!ASM_FLOAT_ZERO.isNull()) { + return ValueBuilder::makeName(ASM_FLOAT_ZERO); + } else { + return ValueBuilder::makeCall(MATH_FROUND, ValueBuilder::makeNum(0)); + } + break; + } + case ASM_FLOAT32X4: { + return ValueBuilder::makeCall(SIMD_FLOAT32X4, ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0)); + break; + } + case ASM_FLOAT64X2: { + return ValueBuilder::makeCall(SIMD_FLOAT64X2, ValueBuilder::makeNum(0), ValueBuilder::makeNum(0)); + break; + } + case ASM_INT8X16: { + return ValueBuilder::makeCall(SIMD_INT8X16, ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0)); + break; + } + case ASM_INT16X8: { + return ValueBuilder::makeCall(SIMD_INT16X8, ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0)); + break; + } + case ASM_INT32X4: { + return ValueBuilder::makeCall(SIMD_INT32X4, ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0)); + break; + } + default: assert(0); + } + abort(); +} + +Ref makeAsmCoercion(Ref node, AsmType type) { + switch (type) { + case ASM_INT: return ValueBuilder::makeBinary(node, OR, ValueBuilder::makeNum(0)); + case ASM_DOUBLE: return ValueBuilder::makeUnary(PLUS, node); + case ASM_FLOAT: return ValueBuilder::makeCall(MATH_FROUND, node); + case ASM_FLOAT32X4: return ValueBuilder::makeCall(SIMD_FLOAT32X4_CHECK, node); + case ASM_FLOAT64X2: return ValueBuilder::makeCall(SIMD_FLOAT64X2_CHECK, node); + case ASM_INT8X16: return ValueBuilder::makeCall(SIMD_INT8X16_CHECK, node); + case ASM_INT16X8: return ValueBuilder::makeCall(SIMD_INT16X8_CHECK, node); + case ASM_INT32X4: return ValueBuilder::makeCall(SIMD_INT32X4_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 + } +} + +Ref makeSigning(Ref node, AsmSign sign) { + assert(sign == ASM_SIGNED || sign == ASM_UNSIGNED); + return ValueBuilder::makeBinary(node, sign == ASM_SIGNED ? OR : TRSHIFT, ValueBuilder::makeNum(0)); +} diff --git a/src/binaryen/src/emscripten-optimizer/optimizer.h b/src/binaryen/src/emscripten-optimizer/optimizer.h new file mode 100644 index 0000000000..c3939abf4a --- /dev/null +++ b/src/binaryen/src/emscripten-optimizer/optimizer.h @@ -0,0 +1,152 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_optimizer_h +#define wasm_optimizer_h + +#include "simple_ast.h" + +extern bool preciseF32, + receiveJSON, + emitJSON, + minifyWhitespace, + last; + +extern cashew::Ref extraInfo; + +void eliminateDeadFuncs(cashew::Ref ast); +void eliminate(cashew::Ref ast, bool memSafe=false); +void eliminateMemSafe(cashew::Ref ast); +void simplifyExpressions(cashew::Ref ast); +void optimizeFrounds(cashew::Ref ast); +void simplifyIfs(cashew::Ref ast); +void registerize(cashew::Ref ast); +void registerizeHarder(cashew::Ref ast); +void minifyLocals(cashew::Ref ast); +void asmLastOpts(cashew::Ref ast); + +// + +enum AsmType { + ASM_INT = 0, + ASM_DOUBLE, + ASM_FLOAT, + ASM_FLOAT32X4, + ASM_FLOAT64X2, + ASM_INT8X16, + ASM_INT16X8, + ASM_INT32X4, + ASM_INT64, // non-asm.js + ASM_NONE // number of types +}; + +struct AsmData; + +AsmType detectType(cashew::Ref node, AsmData *asmData=nullptr, bool inVarDef=false, cashew::IString minifiedFround=cashew::IString(), bool allowI64=false); + +struct AsmData { + struct Local { + Local() {} + Local(AsmType type, bool param) : type(type), param(param) {} + AsmType type; + bool param; // false if a var + }; + typedef std::unordered_map Locals; + + Locals locals; + std::vector params; // in order + std::vector vars; // in order + AsmType ret; + + cashew::Ref func; + + AsmType getType(const cashew::IString& name) { + auto ret = locals.find(name); + if (ret != locals.end()) return ret->second.type; + return ASM_NONE; + } + void setType(const cashew::IString& name, AsmType type) { + locals[name].type = type; + } + + bool isLocal(const cashew::IString& name) { + return locals.count(name) > 0; + } + bool isParam(const cashew::IString& name) { + return isLocal(name) && locals[name].param; + } + bool isVar(const cashew::IString& name) { + return isLocal(name) && !locals[name].param; + } + + AsmData() {} // if you want to fill in the data yourself + AsmData(cashew::Ref f); // if you want to read data from f, and modify it as you go (parallel to denormalize) + + void denormalize(); + + void addParam(cashew::IString name, AsmType type) { + locals[name] = Local(type, true); + params.push_back(name); + } + void addVar(cashew::IString name, AsmType type) { + locals[name] = Local(type, false); + vars.push_back(name); + } + + void deleteVar(cashew::IString name) { + locals.erase(name); + for (size_t i = 0; i < vars.size(); i++) { + if (vars[i] == name) { + vars.erase(vars.begin() + i); + break; + } + } + } +}; + +extern cashew::IString ASM_FLOAT_ZERO; + +extern cashew::IString SIMD_INT8X16_CHECK, + SIMD_INT16X8_CHECK, + SIMD_INT32X4_CHECK, + SIMD_FLOAT32X4_CHECK, + SIMD_FLOAT64X2_CHECK; + +int parseInt(const char *str); + +struct HeapInfo { + bool valid, unsign, floaty; + int bits; + AsmType type; +}; + +HeapInfo parseHeap(const char *name); + +enum AsmSign { + ASM_FLEXIBLE = 0, // small constants can be signed or unsigned, variables are also flexible + ASM_SIGNED = 1, + ASM_UNSIGNED = 2, + ASM_NONSIGNED = 3, +}; + +extern AsmSign detectSign(cashew::Ref node, cashew::IString minifiedFround); + +cashew::Ref makeAsmCoercedZero(AsmType type); +cashew::Ref makeAsmCoercion(cashew::Ref node, AsmType type); + +cashew::Ref makeSigning(cashew::Ref node, AsmSign sign); + +#endif // wasm_optimizer_h diff --git a/src/binaryen/src/emscripten-optimizer/parser.cpp b/src/binaryen/src/emscripten-optimizer/parser.cpp new file mode 100644 index 0000000000..eb4abf6b37 --- /dev/null +++ b/src/binaryen/src/emscripten-optimizer/parser.cpp @@ -0,0 +1,161 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "parser.h" + +namespace cashew { + +// common strings + +IString TOPLEVEL("toplevel"), + DEFUN("defun"), + BLOCK("block"), + VAR("var"), + CONST("const"), + CONDITIONAL("conditional"), + BINARY("binary"), + RETURN("return"), + IF("if"), + ELSE("else"), + WHILE("while"), + DO("do"), + FOR("for"), + SEQ("seq"), + SUB("sub"), + CALL("call"), + LABEL("label"), + BREAK("break"), + CONTINUE("continue"), + SWITCH("switch"), + STRING("string"), + TRY("try"), + INF("inf"), + NaN("nan"), + TEMP_RET0("tempRet0"), + GET_TEMP_RET0("getTempRet0"), + LLVM_CTTZ_I32("_llvm_cttz_i32"), + UDIVMODDI4("___udivmoddi4"), + UNARY_PREFIX("unary-prefix"), + UNARY_POSTFIX("unary-postfix"), + MATH_FROUND("Math_fround"), + MATH_CLZ32("Math_clz32"), + INT64("i64"), + INT64_CONST("i64_const"), + SIMD_FLOAT32X4("SIMD_Float32x4"), + SIMD_FLOAT64X2("SIMD_Float64x2"), + SIMD_INT8X16("SIMD_Int8x16"), + SIMD_INT16X8("SIMD_Int16x8"), + SIMD_INT32X4("SIMD_Int32x4"), + PLUS("+"), + MINUS("-"), + OR("|"), + AND("&"), + XOR("^"), + L_NOT("!"), + B_NOT("~"), + LT("<"), + GE(">="), + LE("<="), + GT(">"), + EQ("=="), + NE("!="), + DIV("/"), + MOD("%"), + MUL("*"), + RSHIFT(">>"), + LSHIFT("<<"), + TRSHIFT(">>>"), + TEMP_DOUBLE_PTR("tempDoublePtr"), + HEAP8("HEAP8"), + HEAP16("HEAP16"), + HEAP32("HEAP32"), + HEAPF32("HEAPF32"), + HEAPU8("HEAPU8"), + HEAPU16("HEAPU16"), + HEAPU32("HEAPU32"), + HEAPF64("HEAPF64"), + F0("f0"), + EMPTY(""), + FUNCTION("function"), + OPEN_PAREN("("), + OPEN_BRACE("["), + OPEN_CURLY("{"), + CLOSE_CURLY("}"), + COMMA(","), + QUESTION("?"), + COLON(":"), + CASE("case"), + DEFAULT("default"), + DOT("dot"), + PERIOD("."), + NEW("new"), + ARRAY("array"), + OBJECT("object"), + THROW("throw"), + SET("="); + +IStringSet keywords("var const function if else do while for break continue return switch case default throw try catch finally true false null new"); + +const char *OPERATOR_INITS = "+-*/%<>&^|~=!,?:.", + *SEPARATORS = "([;{}"; + +int MAX_OPERATOR_SIZE = 3; + +std::vector operatorClasses; + +static std::vector> precedences; // op, type => prec + +struct Init { + Init() { + // operators, rtl, type + operatorClasses.emplace_back(".", false, OperatorClass::Binary); + operatorClasses.emplace_back("! ~ + -", true, OperatorClass::Prefix); + operatorClasses.emplace_back("* / %", false, OperatorClass::Binary); + operatorClasses.emplace_back("+ -", false, OperatorClass::Binary); + operatorClasses.emplace_back("<< >> >>>", false, OperatorClass::Binary); + operatorClasses.emplace_back("< <= > >=", false, OperatorClass::Binary); + operatorClasses.emplace_back("== !=", false, OperatorClass::Binary); + operatorClasses.emplace_back("&", false, OperatorClass::Binary); + operatorClasses.emplace_back("^", false, OperatorClass::Binary); + operatorClasses.emplace_back("|", false, OperatorClass::Binary); + operatorClasses.emplace_back("? :", true, OperatorClass::Tertiary); + operatorClasses.emplace_back("=", true, OperatorClass::Binary); + operatorClasses.emplace_back(",", true, OperatorClass::Binary); + + precedences.resize(OperatorClass::Tertiary + 1); + + for (size_t prec = 0; prec < operatorClasses.size(); prec++) { + for (auto curr : operatorClasses[prec].ops) { + precedences[operatorClasses[prec].type][curr] = prec; + } + } + } +}; + +Init init; + +int OperatorClass::getPrecedence(Type type, IString op) { + return precedences[type][op]; +} + +bool OperatorClass::getRtl(int prec) { + return operatorClasses[prec].rtl; +} + +bool isIdentInit(char x) { return (x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z') || x == '_' || x == '$'; } +bool isIdentPart(char x) { return isIdentInit(x) || (x >= '0' && x <= '9'); } + +} // namespace cashew diff --git a/src/binaryen/src/emscripten-optimizer/parser.h b/src/binaryen/src/emscripten-optimizer/parser.h new file mode 100644 index 0000000000..1c12bf944f --- /dev/null +++ b/src/binaryen/src/emscripten-optimizer/parser.h @@ -0,0 +1,960 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Pure parsing. Calls methods on a Builder (template argument) to actually construct the AST +// +// XXX All parsing methods assume they take ownership of the input string. This lets them reuse +// parts of it. You will segfault if the input string cannot be reused and written to. + +#ifndef wasm_parser_h +#define wasm_parser_h + +#include +#include +#include +#include +#include + +#include "istring.h" +#include "support/safe_integer.h" + +namespace cashew { + +// common strings + +extern IString TOPLEVEL, + DEFUN, + BLOCK, + VAR, + CONST, + CONDITIONAL, + BINARY, + RETURN, + IF, + ELSE, + WHILE, + DO, + FOR, + SEQ, + SUB, + CALL, + LABEL, + BREAK, + CONTINUE, + SWITCH, + STRING, + TRY, + INF, + NaN, + TEMP_RET0, + GET_TEMP_RET0, + LLVM_CTTZ_I32, + UDIVMODDI4, + UNARY_PREFIX, + UNARY_POSTFIX, + MATH_FROUND, + MATH_CLZ32, + INT64, + INT64_CONST, + SIMD_FLOAT32X4, + SIMD_FLOAT64X2, + SIMD_INT8X16, + SIMD_INT16X8, + SIMD_INT32X4, + PLUS, + MINUS, + OR, + AND, + XOR, + L_NOT, + B_NOT, + LT, + GE, + LE, + GT, + EQ, + NE, + DIV, + MOD, + MUL, + RSHIFT, + LSHIFT, + TRSHIFT, + TEMP_DOUBLE_PTR, + HEAP8, + HEAP16, + HEAP32, + HEAPF32, + HEAPU8, + HEAPU16, + HEAPU32, + HEAPF64, + F0, + EMPTY, + FUNCTION, + OPEN_PAREN, + OPEN_BRACE, + OPEN_CURLY, + CLOSE_CURLY, + COMMA, + QUESTION, + COLON, + CASE, + DEFAULT, + DOT, + PERIOD, + NEW, + ARRAY, + OBJECT, + THROW, + SET; + +extern IStringSet keywords; + +extern const char *OPERATOR_INITS, *SEPARATORS; + +extern int MAX_OPERATOR_SIZE, LOWEST_PREC; + +struct OperatorClass { + enum Type { + Binary = 0, + Prefix = 1, + Postfix = 2, + Tertiary = 3 + }; + + IStringSet ops; + bool rtl; + Type type; + + OperatorClass(const char* o, bool r, Type t) : ops(o), rtl(r), type(t) {} + + static int getPrecedence(Type type, IString op); + static bool getRtl(int prec); +}; + +extern std::vector operatorClasses; + +extern bool isIdentInit(char x); +extern bool isIdentPart(char x); + +// parser + +template +class Parser { + + static bool isSpace(char x) { return x == 32 || x == 9 || x == 10 || x == 13; } /* space, tab, linefeed/newline, or return */ + static void skipSpace(char*& curr) { + while (*curr) { + if (isSpace(*curr)) { + curr++; + continue; + } + if (curr[0] == '/' && curr[1] == '/') { + curr += 2; + while (*curr && *curr != '\n') curr++; + if (*curr) curr++; + continue; + } + if (curr[0] == '/' && curr[1] == '*') { + curr += 2; + while (*curr && (curr[0] != '*' || curr[1] != '/')) curr++; + curr += 2; + continue; + } + return; + } + } + + static bool isDigit(char x) { return x >= '0' && x <= '9'; } + + static bool hasChar(const char* list, char x) { while (*list) if (*list++ == x) return true; return false; } + + // An atomic fragment of something. Stops at a natural boundary. + enum FragType { + KEYWORD = 0, + OPERATOR = 1, + IDENT = 2, + STRING = 3, // without quotes + INT = 4, + DOUBLE = 5, + SEPARATOR = 6 + }; + + struct Frag { +#ifndef _MSC_VER // MSVC does not allow unrestricted unions: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf + union { +#endif + IString str; + double num; +#ifndef _MSC_VER + }; +#endif + int size; + FragType type; + + bool isNumber() const { + return type == INT || type == DOUBLE; + } + + explicit Frag(char* src) { + char *start = src; + if (isIdentInit(*src)) { + // read an identifier or a keyword + src++; + while (isIdentPart(*src)) { + src++; + } + if (*src == 0) { + str.set(start); + } else { + char temp = *src; + *src = 0; + str.set(start, false); + *src = temp; + } + type = keywords.has(str) ? KEYWORD : IDENT; + } else if (isDigit(*src) || (src[0] == '.' && isDigit(src[1]))) { + if (src[0] == '0' && (src[1] == 'x' || src[1] == 'X')) { + // Explicitly parse hex numbers of form "0x...", because strtod + // supports hex number strings only in C++11, and Visual Studio 2013 does + // not yet support that functionality. + src += 2; + num = 0; + while (1) { + if (*src >= '0' && *src <= '9') { num *= 16; num += *src - '0'; } + else if (*src >= 'a' && *src <= 'f') { num *= 16; num += *src - 'a' + 10; } + else if (*src >= 'A' && *src <= 'F') { num *= 16; num += *src - 'A' + 10; } + else break; + src++; + } + } else { + num = strtod(start, &src); + } + // asm.js must have a '.' for double values. however, we also tolerate + // uglify's tendency to emit without a '.' (and fix it later with a +). + // for valid asm.js input, the '.' should be enough, and for uglify + // in the emscripten optimizer pipeline, we use simple_ast where INT/DOUBLE + // is quite the same at this point anyhow + type = (std::find(start, src, '.') == src && + (wasm::isSInteger32(num) || wasm::isUInteger32(num))) + ? INT + : DOUBLE; + assert(src > start); + } else if (hasChar(OPERATOR_INITS, *src)) { + switch (*src) { + case '!': str = src[1] == '=' ? NE : L_NOT; break; + case '%': str = MOD; break; + case '&': str = AND; break; + case '*': str = MUL; break; + case '+': str = PLUS; break; + case ',': str = COMMA; break; + case '-': str = MINUS; break; + case '.': str = PERIOD; break; + case '/': str = DIV; break; + case ':': str = COLON; break; + case '<': str = src[1] == '<' ? LSHIFT : (src[1] == '=' ? LE : LT); break; + case '=': str = src[1] == '=' ? EQ : SET; break; + case '>': str = src[1] == '>' ? (src[2] == '>' ? TRSHIFT : RSHIFT) : (src[1] == '=' ? GE : GT); break; + case '?': str = QUESTION; break; + case '^': str = XOR; break; + case '|': str = OR; break; + case '~': str = B_NOT; break; + default: abort(); + } + size = strlen(str.str); +#ifndef NDEBUG + char temp = start[size]; + start[size] = 0; + assert(strcmp(str.str, start) == 0); + start[size] = temp; +#endif + type = OPERATOR; + return; + } else if (hasChar(SEPARATORS, *src)) { + type = SEPARATOR; + char temp = src[1]; + src[1] = 0; + str.set(src, false); + src[1] = temp; + src++; + } else if (*src == '"' || *src == '\'') { + char *end = strchr(src+1, *src); + *end = 0; + str.set(src+1); + src = end+1; + type = STRING; + } else { + dump("frag parsing", src); + abort(); + } + size = src - start; + } + }; + + struct ExpressionElement { + bool isNode; +#ifndef _MSC_VER // MSVC does not allow unrestricted unions: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf + union { +#endif + NodeRef node; + IString op; +#ifndef _MSC_VER + }; +#endif + ExpressionElement(NodeRef n) : isNode(true), node(n) {} + ExpressionElement(IString o) : isNode(false), op(o) {} + + NodeRef getNode() { + assert(isNode); + return node; + } + IString getOp() { + assert(!isNode); + return op; + } + }; + + // This is a list of the current stack of node-operator-node-operator-etc. + // this works by each parseExpression call appending to the vector; then recursing out, and the toplevel sorts it all + typedef std::vector ExpressionParts; + std::vector expressionPartsStack; + + // Parses an element in a list of such elements, e.g. list of statements in a block, or list of parameters in a call + NodeRef parseElement(char*& src, const char* seps=";") { + //dump("parseElement", src); + skipSpace(src); + Frag frag(src); + src += frag.size; + switch (frag.type) { + case KEYWORD: { + return parseAfterKeyword(frag, src, seps); + } + case IDENT: { + return parseAfterIdent(frag, src, seps); + } + case STRING: + case INT: + case DOUBLE: { + return parseExpression(parseFrag(frag), src, seps); + } + case SEPARATOR: { + if (frag.str == OPEN_PAREN) return parseExpression(parseAfterParen(src), src, seps); + if (frag.str == OPEN_BRACE) return parseExpression(parseAfterBrace(src), src, seps); + if (frag.str == OPEN_CURLY) return parseExpression(parseAfterCurly(src), src, seps); + abort(); + } + case OPERATOR: { + return parseExpression(frag.str, src, seps); + } + default: /* dump("parseElement", src); printf("bad frag type: %d\n", frag.type); */ abort(); + } + return nullptr; + } + + NodeRef parseFrag(Frag& frag) { + switch (frag.type) { + case IDENT: return Builder::makeName(frag.str); + case STRING: return Builder::makeString(frag.str); + case INT: return Builder::makeInt(uint32_t(frag.num)); + case DOUBLE: return Builder::makeDouble(frag.num); + default: abort(); + } + return nullptr; + } + + NodeRef parseAfterKeyword(Frag& frag, char*& src, const char* seps) { + skipSpace(src); + if (frag.str == FUNCTION) return parseFunction(src, seps); + else if (frag.str == VAR) return parseVar(src, seps, false); + else if (frag.str == CONST) return parseVar(src, seps, true); + else if (frag.str == RETURN) return parseReturn(src, seps); + else if (frag.str == IF) return parseIf(src, seps); + else if (frag.str == DO) return parseDo(src, seps); + else if (frag.str == WHILE) return parseWhile(src, seps); + else if (frag.str == BREAK) return parseBreak(src, seps); + else if (frag.str == CONTINUE) return parseContinue(src, seps); + else if (frag.str == SWITCH) return parseSwitch(src, seps); + else if (frag.str == NEW) return parseNew(src, seps); + else if (frag.str == FOR) return parseFor(src, seps); + dump(frag.str.str, src); + abort(); + return nullptr; + } + + NodeRef parseFunction(char*& src, const char* seps) { + Frag name(src); + if (name.type == IDENT) { + src += name.size; + } else { + assert(name.type == SEPARATOR && name.str[0] == '('); + name.str = IString(); + } + NodeRef ret = Builder::makeFunction(name.str); + skipSpace(src); + assert(*src == '('); + src++; + while (1) { + skipSpace(src); + if (*src == ')') break; + Frag arg(src); + assert(arg.type == IDENT); + src += arg.size; + Builder::appendArgumentToFunction(ret, arg.str); + skipSpace(src); + if (*src == ')') break; + if (*src == ',') { + src++; + continue; + } + abort(); + } + src++; + Builder::setBlockContent(ret, parseBracketedBlock(src)); + // TODO: parse expression? + return ret; + } + + NodeRef parseVar(char*& src, const char* seps, bool is_const) { + NodeRef ret = Builder::makeVar(is_const); + while (1) { + skipSpace(src); + if (*src == ';') break; + Frag name(src); + assert(name.type == IDENT); + NodeRef value; + src += name.size; + skipSpace(src); + if (*src == '=') { + src++; + skipSpace(src); + value = parseElement(src, ";,"); + } + Builder::appendToVar(ret, name.str, value); + skipSpace(src); + if (*src == ';') break; + if (*src == ',') { + src++; + continue; + } + abort(); + } + src++; + return ret; + } + + NodeRef parseReturn(char*& src, const char* seps) { + skipSpace(src); + NodeRef value = !hasChar(seps, *src) ? parseElement(src, seps) : nullptr; + skipSpace(src); + assert(hasChar(seps, *src)); + if (*src == ';') src++; + return Builder::makeReturn(value); + } + + NodeRef parseIf(char*& src, const char* seps) { + NodeRef condition = parseParenned(src); + NodeRef ifTrue = parseMaybeBracketed(src, seps); + skipSpace(src); + NodeRef ifFalse; + if (!hasChar(seps, *src)) { + Frag next(src); + if (next.type == KEYWORD && next.str == ELSE) { + src += next.size; + ifFalse = parseMaybeBracketed(src, seps); + } + } + return Builder::makeIf(condition, ifTrue, ifFalse); + } + + NodeRef parseDo(char*& src, const char* seps) { + NodeRef body = parseMaybeBracketed(src, seps); + skipSpace(src); + Frag next(src); + assert(next.type == KEYWORD && next.str == WHILE); + src += next.size; + NodeRef condition = parseParenned(src); + return Builder::makeDo(body, condition); + } + + NodeRef parseWhile(char*& src, const char* seps) { + NodeRef condition = parseParenned(src); + NodeRef body = parseMaybeBracketed(src, seps); + return Builder::makeWhile(condition, body); + } + + NodeRef parseFor(char*& src, const char* seps) { + skipSpace(src); + assert(*src == '('); + src++; + NodeRef init = parseElement(src, ";"); + skipSpace(src); + assert(*src == ';'); + src++; + NodeRef condition = parseElement(src, ";"); + skipSpace(src); + assert(*src == ';'); + src++; + NodeRef inc = parseElement(src, ")"); + skipSpace(src); + assert(*src == ')'); + src++; + NodeRef body = parseMaybeBracketed(src, seps); + return Builder::makeFor(init, condition, inc, body); + } + + NodeRef parseBreak(char*& src, const char* seps) { + skipSpace(src); + Frag next(src); + if (next.type == IDENT) src += next.size; + return Builder::makeBreak(next.type == IDENT ? next.str : IString()); + } + + NodeRef parseContinue(char*& src, const char* seps) { + skipSpace(src); + Frag next(src); + if (next.type == IDENT) src += next.size; + return Builder::makeContinue(next.type == IDENT ? next.str : IString()); + } + + NodeRef parseSwitch(char*& src, const char* seps) { + NodeRef ret = Builder::makeSwitch(parseParenned(src)); + skipSpace(src); + assert(*src == '{'); + src++; + while (1) { + // find all cases and possibly a default + skipSpace(src); + if (*src == '}') break; + Frag next(src); + if (next.type == KEYWORD) { + if (next.str == CASE) { + src += next.size; + skipSpace(src); + NodeRef arg; + Frag value(src); + if (value.isNumber()) { + arg = parseFrag(value); + src += value.size; + } else if (value.type == OPERATOR) { + // negative number + assert(value.str == MINUS); + src += value.size; + skipSpace(src); + Frag value2(src); + assert(value2.isNumber()); + arg = Builder::makePrefix(MINUS, parseFrag(value2)); + src += value2.size; + } else { + // identifier and function call + assert(value.type == IDENT); + src += value.size; + skipSpace(src); + arg = parseCall(parseFrag(value), src); + } + Builder::appendCaseToSwitch(ret, arg); + skipSpace(src); + assert(*src == ':'); + src++; + continue; + } else if (next.str == DEFAULT) { + src += next.size; + Builder::appendDefaultToSwitch(ret); + skipSpace(src); + assert(*src == ':'); + src++; + continue; + } + // otherwise, may be some keyword that happens to start a block (e.g. case 1: _return_ 5) + } + // not case X: or default: or }, so must be some code + skipSpace(src); + bool explicitBlock = *src == '{'; + NodeRef subBlock = explicitBlock ? parseBracketedBlock(src) : parseBlock(src, ";}", CASE, DEFAULT); + Builder::appendCodeToSwitch(ret, subBlock, explicitBlock); + } + skipSpace(src); + assert(*src == '}'); + src++; + return ret; + } + + NodeRef parseNew(char*& src, const char* seps) { + return Builder::makeNew(parseElement(src, seps)); + } + + NodeRef parseAfterIdent(Frag& frag, char*& src, const char* seps) { + skipSpace(src); + if (*src == '(') return parseExpression(parseCall(parseFrag(frag), src), src, seps); + if (*src == '[') return parseExpression(parseIndexing(parseFrag(frag), src), src, seps); + if (*src == ':' && expressionPartsStack.back().size() == 0) { + src++; + skipSpace(src); + NodeRef inner; + if (*src == '{') { // context lets us know this is not an object, but a block + inner = parseBracketedBlock(src); + } else { + inner = parseElement(src, seps); + } + return Builder::makeLabel(frag.str, inner); + } + if (*src == '.') return parseExpression(parseDotting(parseFrag(frag), src), src, seps); + return parseExpression(parseFrag(frag), src, seps); + } + + NodeRef parseCall(NodeRef target, char*& src) { + expressionPartsStack.resize(expressionPartsStack.size()+1); + assert(*src == '('); + src++; + NodeRef ret = Builder::makeCall(target); + while (1) { + skipSpace(src); + if (*src == ')') break; + Builder::appendToCall(ret, parseElement(src, ",)")); + skipSpace(src); + if (*src == ')') break; + if (*src == ',') { + src++; + continue; + } + abort(); + } + src++; + assert(expressionPartsStack.back().size() == 0); + expressionPartsStack.pop_back(); + return ret; + } + + NodeRef parseIndexing(NodeRef target, char*& src) { + expressionPartsStack.resize(expressionPartsStack.size()+1); + assert(*src == '['); + src++; + NodeRef ret = Builder::makeIndexing(target, parseElement(src, "]")); + skipSpace(src); + assert(*src == ']'); + src++; + assert(expressionPartsStack.back().size() == 0); + expressionPartsStack.pop_back(); + return ret; + } + + NodeRef parseDotting(NodeRef target, char*& src) { + assert(*src == '.'); + src++; + Frag key(src); + assert(key.type == IDENT); + src += key.size; + return Builder::makeDot(target, key.str); + } + + NodeRef parseAfterParen(char*& src) { + expressionPartsStack.resize(expressionPartsStack.size()+1); + skipSpace(src); + NodeRef ret = parseElement(src, ")"); + skipSpace(src); + assert(*src == ')'); + src++; + assert(expressionPartsStack.back().size() == 0); + expressionPartsStack.pop_back(); + return ret; + } + + NodeRef parseAfterBrace(char*& src) { + expressionPartsStack.resize(expressionPartsStack.size()+1); + NodeRef ret = Builder::makeArray(); + while (1) { + skipSpace(src); + assert(*src); + if (*src == ']') break; + NodeRef element = parseElement(src, ",]"); + Builder::appendToArray(ret, element); + skipSpace(src); + if (*src == ']') break; + if (*src == ',') { + src++; + continue; + } + abort(); + } + src++; + return ret; + } + + NodeRef parseAfterCurly(char*& src) { + expressionPartsStack.resize(expressionPartsStack.size()+1); + NodeRef ret = Builder::makeObject(); + while (1) { + skipSpace(src); + assert(*src); + if (*src == '}') break; + Frag key(src); + assert(key.type == IDENT || key.type == STRING); + src += key.size; + skipSpace(src); + assert(*src == ':'); + src++; + NodeRef value = parseElement(src, ",}"); + Builder::appendToObject(ret, key.str, value); + skipSpace(src); + if (*src == '}') break; + if (*src == ',') { + src++; + continue; + } + abort(); + } + src++; + return ret; + } + + void dumpParts(ExpressionParts& parts, int i) { + printf("expressionparts: %d (at %d)\n", parts.size(), i); + printf("| "); + for (int i = 0; i < parts.size(); i++) { + if (parts[i].isNode) { + parts[i].getNode()->stringify(std::cout); + printf(" "); + } else { + printf(" _%s_ ", parts[i].getOp().str); + } + } + printf("|\n"); + } + + NodeRef makeBinary(NodeRef left, IString op, NodeRef right) { + if (op == PERIOD) { + return Builder::makeDot(left, right); + } else { + return Builder::makeBinary(left, op ,right); + } + } + + NodeRef parseExpression(ExpressionElement initial, char*&src, const char* seps) { + //dump("parseExpression", src); + ExpressionParts& parts = expressionPartsStack.back(); + skipSpace(src); + if (*src == 0 || hasChar(seps, *src)) { + if (parts.size() > 0) { + parts.push_back(initial); // cherry on top of the cake + } + return initial.getNode(); + } + bool top = parts.size() == 0; + if (initial.isNode) { + Frag next(src); + if (next.type == OPERATOR) { + parts.push_back(initial); + src += next.size; + parts.push_back(next.str); + } else { + if (*src == '(') { + initial = parseCall(initial.getNode(), src); + } else if (*src == '[') { + initial = parseIndexing(initial.getNode(), src); + } else { + dump("bad parseExpression state", src); + abort(); + } + return parseExpression(initial, src, seps); + } + } else { + parts.push_back(initial); + } + NodeRef last = parseElement(src, seps); + if (!top) return last; + { + ExpressionParts& parts = expressionPartsStack.back(); // |parts| may have been invalidated by that call + // we are the toplevel. sort it all out + // collapse right to left, highest priority first + //dumpParts(parts, 0); + for (auto& ops : operatorClasses) { + if (ops.rtl) { + // right to left + for (int i = parts.size()-1; i >= 0; i--) { + if (parts[i].isNode) continue; + IString op = parts[i].getOp(); + if (!ops.ops.has(op)) continue; + if (ops.type == OperatorClass::Binary && i > 0 && i < (int)parts.size()-1) { + parts[i] = makeBinary(parts[i-1].getNode(), op, parts[i+1].getNode()); + parts.erase(parts.begin() + i + 1); + parts.erase(parts.begin() + i - 1); + } else if (ops.type == OperatorClass::Prefix && i < (int)parts.size()-1) { + if (i > 0 && parts[i-1].isNode) continue; // cannot apply prefix operator if it would join two nodes + parts[i] = Builder::makePrefix(op, parts[i+1].getNode()); + parts.erase(parts.begin() + i + 1); + } else if (ops.type == OperatorClass::Tertiary) { + // we must be at X ? Y : Z + // ^ + //dumpParts(parts, i); + if (op != COLON) continue; + assert(i < (int)parts.size()-1 && i >= 3); + if (parts[i-2].getOp() != QUESTION) continue; // e.g. x ? y ? 1 : 0 : 2 + parts[i-3] = Builder::makeConditional(parts[i-3].getNode(), parts[i-1].getNode(), parts[i+1].getNode()); + parts.erase(parts.begin() + i - 2, parts.begin() + i + 2); + i = parts.size(); // basically a reset, due to things like x ? y ? 1 : 0 : 2 + } // TODO: postfix + } + } else { + // left to right + for (int i = 0; i < (int)parts.size(); i++) { + if (parts[i].isNode) continue; + IString op = parts[i].getOp(); + if (!ops.ops.has(op)) continue; + if (ops.type == OperatorClass::Binary && i > 0 && i < (int)parts.size()-1) { + parts[i] = makeBinary(parts[i-1].getNode(), op, parts[i+1].getNode()); + parts.erase(parts.begin() + i + 1); + parts.erase(parts.begin() + i - 1); + i--; + } else if (ops.type == OperatorClass::Prefix && i < (int)parts.size()-1) { + if (i > 0 && parts[i-1].isNode) continue; // cannot apply prefix operator if it would join two nodes + parts[i] = Builder::makePrefix(op, parts[i+1].getNode()); + parts.erase(parts.begin() + i + 1); + i = std::max(i-2, 0); // allow a previous prefix operator to cascade + } // TODO: tertiary, postfix + } + } + } + assert(parts.size() == 1); + NodeRef ret = parts[0].getNode(); + parts.clear(); + return ret; + } + } + + // Parses a block of code (e.g. a bunch of statements inside {,}, or the top level of o file) + NodeRef parseBlock(char*& src, const char* seps=";", IString keywordSep1=IString(), IString keywordSep2=IString()) { + NodeRef block = Builder::makeBlock(); + //dump("parseBlock", src); + while (1) { + skipSpace(src); + if (*src == 0) break; + if (*src == ';') { + src++; // skip a statement in this block + continue; + } + if (hasChar(seps, *src)) break; + if (!!keywordSep1) { + Frag next(src); + if (next.type == KEYWORD && next.str == keywordSep1) break; + } + if (!!keywordSep2) { + Frag next(src); + if (next.type == KEYWORD && next.str == keywordSep2) break; + } + NodeRef element = parseElementOrStatement(src, seps); + Builder::appendToBlock(block, element); + } + return block; + } + + NodeRef parseBracketedBlock(char*& src) { + skipSpace(src); + assert(*src == '{'); + src++; + NodeRef block = parseBlock(src, ";}"); // the two are not symmetrical, ; is just internally separating, } is the final one - parseBlock knows all this + assert(*src == '}'); + src++; + return block; + } + + NodeRef parseElementOrStatement(char*& src, const char *seps) { + skipSpace(src); + if (*src == ';') { + src++; + return Builder::makeBlock(); // we don't need the brackets here, but oh well + } + if (*src == '{') { // detect a trivial {} in a statement context + char *before = src; + src++; + skipSpace(src); + if (*src == '}') { + src++; + return Builder::makeBlock(); // we don't need the brackets here, but oh well + } + src = before; + } + NodeRef ret = parseElement(src, seps); + skipSpace(src); + if (*src == ';') { + ret = Builder::makeStatement(ret); + src++; + } + return ret; + } + + NodeRef parseMaybeBracketed(char*& src, const char *seps) { + skipSpace(src); + return *src == '{' ? parseBracketedBlock(src) : parseElementOrStatement(src, seps); + } + + NodeRef parseParenned(char*& src) { + skipSpace(src); + assert(*src == '('); + src++; + NodeRef ret = parseElement(src, ")"); + skipSpace(src); + assert(*src == ')'); + src++; + return ret; + } + + // Debugging + + char *allSource; + int allSize; + + static void dump(const char *where, char* curr) { + /* + printf("%s:\n=============\n", where); + for (int i = 0; i < allSize; i++) printf("%c", allSource[i] ? allSource[i] : '?'); + printf("\n"); + for (int i = 0; i < (curr - allSource); i++) printf(" "); + printf("^\n=============\n"); + */ + fprintf(stderr, "%s:\n==========\n", where); + int newlinesLeft = 2; + int charsLeft = 200; + while (*curr) { + if (*curr == '\n') { + newlinesLeft--; + if (newlinesLeft == 0) break; + } + charsLeft--; + if (charsLeft == 0) break; + fprintf(stderr, "%c", *curr++); + } + fprintf(stderr, "\n\n"); + } + +public: + + Parser() : allSource(nullptr), allSize(0) { + expressionPartsStack.resize(1); + } + + // Highest-level parsing, as of a JavaScript script file. + NodeRef parseToplevel(char* src) { + allSource = src; + allSize = strlen(src); + NodeRef toplevel = Builder::makeToplevel(); + Builder::setBlockContent(toplevel, parseBlock(src)); + return toplevel; + } +}; + +} // namespace cashew + +#endif // wasm_parser_h diff --git a/src/binaryen/src/emscripten-optimizer/simple_ast.cpp b/src/binaryen/src/emscripten-optimizer/simple_ast.cpp new file mode 100644 index 0000000000..75685f80e3 --- /dev/null +++ b/src/binaryen/src/emscripten-optimizer/simple_ast.cpp @@ -0,0 +1,371 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "simple_ast.h" + +namespace cashew { + +// Ref methods + +Ref& Ref::operator[](unsigned x) { + return (*get())[x]; +} + +Ref& Ref::operator[](IString x) { + return (*get())[x]; +} + +bool Ref::operator==(const char *str) { + return get()->isString() && !strcmp(get()->str.str, str); +} + +bool Ref::operator!=(const char *str) { + return get()->isString() ? !!strcmp(get()->str.str, str) : true; +} + +bool Ref::operator==(const IString &str) { + return get()->isString() && get()->str == str; +} + +bool Ref::operator!=(const IString &str) { + return get()->isString() && get()->str != str; +} + +bool Ref::operator==(Ref other) { + return **this == *other; +} + +bool Ref::operator!() { + return !get() || get()->isNull(); +} + +// Arena + +GlobalMixedArena arena; + +// Value + +Value& Value::setAssign(Ref target, Ref value) { + asAssign()->target() = target; + asAssign()->value() = value; + return *this; +} + +Value& Value::setAssignName(IString target, Ref value) { + asAssignName()->target() = target; + asAssignName()->value() = value; + return *this; +} + +Assign* Value::asAssign() { + assert(isAssign()); + return static_cast(this); +} + +AssignName* Value::asAssignName() { + assert(isAssignName()); + return static_cast(this); +} + +void Value::stringify(std::ostream &os, bool pretty) { + static int indent = 0; + #define indentify() { for (int i_ = 0; i_ < indent; i_++) os << " "; } + switch (type) { + case String: { + if (str.str) { + os << '"' << str.str << '"'; + } else { + os << "\"(null)\""; + } + break; + } + case Number: { + os << std::setprecision(17) << num; // doubles can have 17 digits of precision + break; + } + case Array: { + if (arr->size() == 0) { + os << "[]"; + break; + } + os << '['; + if (pretty) { + os << std::endl; + indent++; + } + for (size_t i = 0; i < arr->size(); i++) { + if (i > 0) { + if (pretty) os << "," << std::endl; + else os << ", "; + } + indentify(); + (*arr)[i]->stringify(os, pretty); + } + if (pretty) { + os << std::endl; + indent--; + } + indentify(); + os << ']'; + break; + } + case Null: { + os << "null"; + break; + } + case Bool: { + os << (boo ? "true" : "false"); + break; + } + case Object: { + os << '{'; + if (pretty) { + os << std::endl; + indent++; + } + bool first = true; + for (auto i : *obj) { + if (first) { + first = false; + } else { + os << ", "; + if (pretty) os << std::endl; + } + indentify(); + os << '"' << i.first.c_str() << "\": "; + i.second->stringify(os, pretty); + } + if (pretty) { + os << std::endl; + indent--; + } + indentify(); + os << '}'; + break; + } + case Assign_: { + os << "["; + ref->stringify(os, pretty); + os << ", "; + asAssign()->value()->stringify(os, pretty); + os << "]"; + break; + } + case AssignName_: { + os << "[\"" << asAssignName()->target().str << "\""; + os << ", "; + asAssignName()->value()->stringify(os, pretty); + os << "]"; + break; + } + } +} + +// dump + +void dump(const char *str, Ref node, bool pretty) { + std::cerr << str << ": "; + if (!!node) node->stringify(std::cerr, pretty); + else std::cerr << "(nullptr)"; + std::cerr << std::endl; +} + +// AST traversals + +// Traversals + +struct TraverseInfo { + TraverseInfo() {} + TraverseInfo(Ref node, ArrayStorage* arr) : node(node), arr(arr), index(0) {} + Ref node; + ArrayStorage* arr; + int index; +}; + +template +struct StackedStack { // a stack, on the stack + T stackStorage[init]; + T* storage; + int used, available; // used amount, available amount + bool alloced; + + StackedStack() : used(0), available(init), alloced(false) { + storage = stackStorage; + } + ~StackedStack() { + if (alloced) free(storage); + } + + int size() { return used; } + + void push_back(const T& t) { + assert(used <= available); + if (used == available) { + available *= 2; + if (!alloced) { + T* old = storage; + storage = (T*)malloc(sizeof(T)*available); + memcpy(storage, old, sizeof(T)*used); + alloced = true; + } else { + T *newStorage = (T*)realloc(storage, sizeof(T)*available); + assert(newStorage); + storage = newStorage; + } + } + assert(used < available); + assert(storage); + storage[used++] = t; + } + + T& back() { + assert(used > 0); + return storage[used-1]; + } + + void pop_back() { + assert(used > 0); + used--; + } +}; + +#define visitable(node) (node->isArray() && node->size() > 0) + +#define TRAV_STACK 40 + +// Traverse, calling visit before the children +void traversePre(Ref node, std::function visit) { + if (!visitable(node)) return; + visit(node); + StackedStack stack; + int index = 0; + ArrayStorage* arr = &node->getArray(); + int arrsize = (int)arr->size(); + Ref* arrdata = &(*arr)[0]; + stack.push_back(TraverseInfo(node, arr)); + while (1) { + if (index < arrsize) { + Ref sub = *(arrdata+index); + index++; + if (visitable(sub)) { + stack.back().index = index; + index = 0; + visit(sub); + arr = &sub->getArray(); + arrsize = (int)arr->size(); + arrdata = &(*arr)[0]; + stack.push_back(TraverseInfo(sub, arr)); + } + } else { + stack.pop_back(); + if (stack.size() == 0) break; + TraverseInfo& back = stack.back(); + index = back.index; + arr = back.arr; + arrsize = (int)arr->size(); + arrdata = &(*arr)[0]; + } + } +} + +// Traverse, calling visitPre before the children and visitPost after +void traversePrePost(Ref node, std::function visitPre, std::function visitPost) { + if (!visitable(node)) return; + visitPre(node); + StackedStack stack; + int index = 0; + ArrayStorage* arr = &node->getArray(); + int arrsize = (int)arr->size(); + Ref* arrdata = &(*arr)[0]; + stack.push_back(TraverseInfo(node, arr)); + while (1) { + if (index < arrsize) { + Ref sub = *(arrdata+index); + index++; + if (visitable(sub)) { + stack.back().index = index; + index = 0; + visitPre(sub); + arr = &sub->getArray(); + arrsize = (int)arr->size(); + arrdata = &(*arr)[0]; + stack.push_back(TraverseInfo(sub, arr)); + } + } else { + visitPost(stack.back().node); + stack.pop_back(); + if (stack.size() == 0) break; + TraverseInfo& back = stack.back(); + index = back.index; + arr = back.arr; + arrsize = (int)arr->size(); + arrdata = &(*arr)[0]; + } + } +} + +// Traverse, calling visitPre before the children and visitPost after. If pre returns false, do not traverse children +void traversePrePostConditional(Ref node, std::function visitPre, std::function visitPost) { + if (!visitable(node)) return; + if (!visitPre(node)) return; + StackedStack stack; + int index = 0; + ArrayStorage* arr = &node->getArray(); + int arrsize = (int)arr->size(); + Ref* arrdata = &(*arr)[0]; + stack.push_back(TraverseInfo(node, arr)); + while (1) { + if (index < arrsize) { + Ref sub = *(arrdata+index); + index++; + if (visitable(sub)) { + if (visitPre(sub)) { + stack.back().index = index; + index = 0; + arr = &sub->getArray(); + arrsize = (int)arr->size(); + arrdata = &(*arr)[0]; + stack.push_back(TraverseInfo(sub, arr)); + } + } + } else { + visitPost(stack.back().node); + stack.pop_back(); + if (stack.size() == 0) break; + TraverseInfo& back = stack.back(); + index = back.index; + arr = back.arr; + arrsize = (int)arr->size(); + arrdata = &(*arr)[0]; + } + } +} + +// Traverses all the top-level functions in the document +void traverseFunctions(Ref ast, std::function visit) { + if (!ast || ast->size() == 0) return; + if (ast[0] == TOPLEVEL) { + Ref stats = ast[1]; + for (size_t i = 0; i < stats->size(); i++) { + Ref curr = stats[i]; + if (curr[0] == DEFUN) visit(curr); + } + } else if (ast[0] == DEFUN) { + visit(ast); + } +} + +} // namespace cashew diff --git a/src/binaryen/src/emscripten-optimizer/simple_ast.h b/src/binaryen/src/emscripten-optimizer/simple_ast.h new file mode 100644 index 0000000000..62bf975f08 --- /dev/null +++ b/src/binaryen/src/emscripten-optimizer/simple_ast.h @@ -0,0 +1,1653 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_simple_ast_h +#define wasm_simple_ast_h + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "parser.h" +#include "snprintf.h" +#include "support/safe_integer.h" +#include "mixed_arena.h" + +#define err(str) fprintf(stderr, str "\n"); +#define errv(str, ...) fprintf(stderr, str "\n", __VA_ARGS__); +#define printErr err + +namespace cashew { + +struct Value; +struct Ref; + +void dump(const char *str, Ref node, bool pretty=false); + +// Reference to a value, plus some operators for convenience +struct Ref { + Value* inst; + + Ref(Value *v=nullptr) : inst(v) {} + + Value* get() { return inst; } + + Value& operator*() { return *inst; } + Value* operator->() { return inst; } + Ref& operator[](unsigned x); + Ref& operator[](IString x); + + // special conveniences + bool operator==(const char *str); // comparison to string, which is by value + bool operator!=(const char *str); + bool operator==(const IString &str); + bool operator!=(const IString &str); + bool operator==(double d) { abort(); return false; } // prevent Ref == number, which is potentially ambiguous; use ->getNumber() == number + bool operator==(Ref other); + bool operator!(); // check if null, in effect +}; + +// Arena allocation, free it all on process exit + +// A mixed arena for global allocation only, so members do not +// receive an allocator, they all use the global one anyhow +class GlobalMixedArena : public MixedArena { +public: + template + T* alloc() { + auto* ret = static_cast(allocSpace(sizeof(T))); + new (ret) T(); + return ret; + } +}; + +extern GlobalMixedArena arena; + +class ArrayStorage : public ArenaVectorBase { +public: + void allocate(size_t size) { + allocatedElements = size; + data = static_cast(arena.allocSpace(sizeof(Ref) * allocatedElements)); + } +}; + +struct Assign; +struct AssignName; + +// Main value type +struct Value { + enum Type { + String = 0, + Number = 1, + Array = 2, + Null = 3, + Bool = 4, + Object = 5, + Assign_ = 6, // ref = target + AssignName_ = 7 + }; + + Type type; + + typedef std::unordered_map ObjectStorage; + +#ifdef _MSC_VER // MSVC does not allow unrestricted unions: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf + IString str; +#endif + union { // TODO: optimize +#ifndef _MSC_VER + IString str; +#endif + double num; + ArrayStorage *arr; + bool boo; + ObjectStorage *obj; + Ref ref; + }; + + // constructors all copy their input + Value() : type(Null), num(0) {} + explicit Value(const char *s) : type(Null) { + setString(s); + } + explicit Value(double n) : type(Null) { + setNumber(n); + } + explicit Value(ArrayStorage &a) : type(Null) { + setArray(); + *arr = a; + } + // no bool constructor - would endanger the double one (int might convert the wrong way) + + ~Value() { + free(); + } + + void free() { + if (type == Array) { arr->clear(); } + else if (type == Object) delete obj; + type = Null; + num = 0; + } + + Value& setString(const char *s) { + free(); + type = String; + str.set(s); + return *this; + } + Value& setString(const IString &s) { + free(); + type = String; + str.set(s); + return *this; + } + Value& setNumber(double n) { + free(); + type = Number; + num = n; + return *this; + } + Value& setArray(ArrayStorage &a) { + free(); + type = Array; + arr = arena.alloc(); + *arr = a; + return *this; + } + Value& setArray(size_t size_hint=0) { + free(); + type = Array; + arr = arena.alloc(); + arr->reserve(size_hint); + return *this; + } + Value& setNull() { + free(); + type = Null; + return *this; + } + Value& setBool(bool b) { // Bool in the name, as otherwise might overload over int + free(); + type = Bool; + boo = b; + return *this; + } + Value& setObject() { + free(); + type = Object; + obj = new ObjectStorage(); + return *this; + } + Value& setAssign(Ref target, Ref value); + Value& setAssignName(IString target, Ref value); + + bool isString() { return type == String; } + bool isNumber() { return type == Number; } + bool isArray() { return type == Array; } + bool isNull() { return type == Null; } + bool isBool() { return type == Bool; } + bool isObject() { return type == Object; } + bool isAssign() { return type == Assign_; } + bool isAssignName() { return type == AssignName_; } + + bool isBool(bool b) { return type == Bool && b == boo; } // avoid overloading == as it might overload over int + + // convenience function to check if something is an array and + // also has a certain string as the first element. This is a + // very common operation as the first element defines the node + // type for most ast nodes + bool isArray(IString name) { + return isArray() && (*this)[0] == name; + } + + const char* getCString() { + assert(isString()); + return str.str; + } + IString& getIString() { + assert(isString()); + return str; + } + double& getNumber() { + assert(isNumber()); + return num; + } + ArrayStorage& getArray() { + assert(isArray()); + return *arr; + } + bool& getBool() { + assert(isBool()); + return boo; + } + + Assign* asAssign(); + AssignName* asAssignName(); + + int32_t getInteger() { // convenience function to get a known integer + assert(fmod(getNumber(), 1) == 0); + int32_t ret = getNumber(); + assert(double(ret) == getNumber()); // no loss in conversion + return ret; + } + + Value& operator=(const Value& other) { + free(); + switch (other.type) { + case String: + setString(other.str); + break; + case Number: + setNumber(other.num); + break; + case Array: + setArray(*other.arr); + break; + case Null: + setNull(); + break; + case Bool: + setBool(other.boo); + break; + default: + abort(); // TODO + } + return *this; + } + + bool operator==(const Value& other) { + if (type != other.type) return false; + switch (other.type) { + case String: + return str == other.str; + case Number: + return num == other.num; + case Array: + return this == &other; // if you want a deep compare, use deepCompare + case Null: + break; + case Bool: + return boo == other.boo; + case Object: + return this == &other; // if you want a deep compare, use deepCompare + default: + abort(); + } + return true; + } + + char* parse(char* curr) { + #define is_json_space(x) (x == 32 || x == 9 || x == 10 || x == 13) /* space, tab, linefeed/newline, or return */ + #define skip() { while (*curr && is_json_space(*curr)) curr++; } + skip(); + if (*curr == '"') { + // String + curr++; + char *close = strchr(curr, '"'); + assert(close); + *close = 0; // end this string, and reuse it straight from the input + setString(curr); + curr = close+1; + } else if (*curr == '[') { + // Array + curr++; + skip(); + setArray(); + while (*curr != ']') { + Ref temp = arena.alloc(); + arr->push_back(temp); + curr = temp->parse(curr); + skip(); + if (*curr == ']') break; + assert(*curr == ','); + curr++; + skip(); + } + curr++; + } else if (*curr == 'n') { + // Null + assert(strncmp(curr, "null", 4) == 0); + setNull(); + curr += 4; + } else if (*curr == 't') { + // Bool true + assert(strncmp(curr, "true", 4) == 0); + setBool(true); + curr += 4; + } else if (*curr == 'f') { + // Bool false + assert(strncmp(curr, "false", 5) == 0); + setBool(false); + curr += 5; + } else if (*curr == '{') { + // Object + curr++; + skip(); + setObject(); + while (*curr != '}') { + assert(*curr == '"'); + curr++; + char *close = strchr(curr, '"'); + assert(close); + *close = 0; // end this string, and reuse it straight from the input + IString key(curr); + curr = close+1; + skip(); + assert(*curr == ':'); + curr++; + skip(); + Ref value = arena.alloc(); + curr = value->parse(curr); + (*obj)[key] = value; + skip(); + if (*curr == '}') break; + assert(*curr == ','); + curr++; + skip(); + } + curr++; + } else { + // Number + char *after; + setNumber(strtod(curr, &after)); + curr = after; + } + return curr; + } + + void stringify(std::ostream &os, bool pretty=false); + + // String operations + + // Number operations + + // Array operations + + size_t size() { + assert(isArray()); + return arr->size(); + } + + void setSize(size_t size) { + assert(isArray()); + auto old = arr->size(); + if (old != size) arr->resize(size); + if (old < size) { + for (auto i = old; i < size; i++) { + (*arr)[i] = arena.alloc(); + } + } + } + + Ref& operator[](unsigned x) { + assert(isArray()); + return (*arr)[x]; + } + + Value& push_back(Ref r) { + assert(isArray()); + arr->push_back(r); + return *this; + } + Ref pop_back() { + assert(isArray()); + Ref ret = arr->back(); + arr->pop_back(); + return ret; + } + + Ref back() { + assert(isArray()); + if (arr->size() == 0) return nullptr; + return arr->back(); + } + + void splice(int x, int num) { + assert(isArray()); + arr->erase(arr->begin() + x, arr->begin() + x + num); + } + + int indexOf(Ref other) { + assert(isArray()); + for (size_t i = 0; i < arr->size(); i++) { + if (other == (*arr)[i]) return i; + } + return -1; + } + + Ref map(std::function func) { + assert(isArray()); + Ref ret = arena.alloc(); + ret->setArray(); + for (size_t i = 0; i < arr->size(); i++) { + ret->push_back(func((*arr)[i])); + } + return ret; + } + + Ref filter(std::function func) { + assert(isArray()); + Ref ret = arena.alloc(); + ret->setArray(); + for (size_t i = 0; i < arr->size(); i++) { + Ref curr = (*arr)[i]; + if (func(curr)) ret->push_back(curr); + } + return ret; + } + + /* + void forEach(std::function func) { + for (size_t i = 0; i < arr->size(); i++) { + func((*arr)[i]); + } + } + */ + + // Null operations + + // Bool operations + + // Object operations + + Ref& operator[](IString x) { + assert(isObject()); + return (*obj)[x]; + } + + bool has(IString x) { + assert(isObject()); + return obj->count(x) > 0; + } +}; + +struct Assign : public Value { + Ref value_; + + Assign(Ref targetInit, Ref valueInit) { + type = Assign_; + target() = targetInit; + value() = valueInit; + } + + Assign() : Assign(nullptr, nullptr) {} + + Ref& target() { + return ref; + } + Ref& value() { + return value_; + } +}; + +struct AssignName : public Value { + IString target_; + + AssignName(IString targetInit, Ref valueInit) { + type = AssignName_; + target() = targetInit; + value() = valueInit; + } + + AssignName() : AssignName(IString(), nullptr) {} + + IString& target() { + return target_; + } + Ref& value() { + return ref; + } +}; + +// AST traversals + +// Traverse, calling visit before the children +void traversePre(Ref node, std::function visit); + +// Traverse, calling visitPre before the children and visitPost after +void traversePrePost(Ref node, std::function visitPre, std::function visitPost); + +// Traverse, calling visitPre before the children and visitPost after. If pre returns false, do not traverse children +void traversePrePostConditional(Ref node, std::function visitPre, std::function visitPost); + +// Traverses all the top-level functions in the document +void traverseFunctions(Ref ast, std::function visit); + +// JS printing support + +struct JSPrinter { + bool pretty, finalize; + + char *buffer; + size_t size, used; + + int indent; + bool possibleSpace; // add a space to separate identifiers + + Ref ast; + + JSPrinter(bool pretty_, bool finalize_, Ref ast_) : pretty(pretty_), finalize(finalize_), buffer(0), size(0), used(0), indent(0), possibleSpace(false), ast(ast_) {} + + ~JSPrinter() { + free(buffer); + } + + void printAst() { + print(ast); + buffer[used] = 0; + } + + // Utils + + void ensure(int safety=100) { + if (size >= used + safety) { + return; + } + size = std::max((size_t)1024, size * 2) + safety; + if (!buffer) { + buffer = (char*)malloc(size); + if (!buffer) { + errv("Out of memory allocating %zd bytes for output buffer!", size); + abort(); + } + } else { + char *buf = (char*)realloc(buffer, size); + if (!buf) { + free(buffer); + errv("Out of memory allocating %zd bytes for output buffer!", size); + abort(); + } + buffer = buf; + } + } + + void emit(char c) { + maybeSpace(c); + if (!pretty && c == '}' && buffer[used-1] == ';') used--; // optimize ;} into }, the ; is not separating anything + ensure(1); + buffer[used++] = c; + } + + void emit(const char *s) { + maybeSpace(*s); + int len = strlen(s); + ensure(len+1); + strncpy(buffer + used, s, len+1); + used += len; + } + + void newline() { + if (!pretty) return; + emit('\n'); + for (int i = 0; i < indent; i++) emit(' '); + } + + void space() { + if (pretty) emit(' '); + } + + void safeSpace() { + if (pretty) emit(' '); + else possibleSpace = true; + } + + void maybeSpace(char s) { + if (possibleSpace) { + possibleSpace = false; + if (isIdentPart(s)) emit(' '); + } + } + + bool isNothing(Ref node) { + return node->isArray() && node[0] == TOPLEVEL && node[1]->size() == 0; + } + + bool isDefun(Ref node) { + return node->isArray() && node[0] == DEFUN; + } + + bool isBlock(Ref node) { + return node->isArray() && node[0] == BLOCK; + } + + bool isIf(Ref node) { + return node->isArray() && node[0] == IF; + } + + void print(Ref node) { + ensure(); + if (node->isString()) { + printName(node); + return; + } + if (node->isNumber()) { + printNum(node); + return; + } + if (node->isAssignName()) { + printAssignName(node); + return; + } + if (node->isAssign()) { + printAssign(node); + return; + } + IString type = node[0]->getIString(); + switch (type.str[0]) { + case 'a': { + if (type == ARRAY) printArray(node); + else abort(); + break; + } + case 'b': { + if (type == BINARY) printBinary(node); + else if (type == BLOCK) printBlock(node); + else if (type == BREAK) printBreak(node); + else abort(); + break; + } + case 'c': { + if (type == CALL) printCall(node); + else if (type == CONDITIONAL) printConditional(node); + else if (type == CONTINUE) printContinue(node); + else abort(); + break; + } + case 'd': { + if (type == DEFUN) printDefun(node); + else if (type == DO) printDo(node); + else if (type == DOT) printDot(node); + else abort(); + break; + } + case 'i': { + if (type == IF) printIf(node); + else abort(); + break; + } + case 'l': { + if (type == LABEL) printLabel(node); + else abort(); + break; + } + case 'n': { + if (type == NEW) printNew(node); + else abort(); + break; + } + case 'o': { + if (type == OBJECT) printObject(node); + break; + } + case 'r': { + if (type == RETURN) printReturn(node); + else abort(); + break; + } + case 's': { + if (type == SUB) printSub(node); + else if (type == SEQ) printSeq(node); + else if (type == SWITCH) printSwitch(node); + else if (type == STRING) printString(node); + else abort(); + break; + } + case 't': { + if (type == TOPLEVEL) printToplevel(node); + else if (type == TRY) printTry(node); + else abort(); + break; + } + case 'u': { + if (type == UNARY_PREFIX) printUnaryPrefix(node); + else abort(); + break; + } + case 'v': { + if (type == VAR) printVar(node); + else abort(); + break; + } + case 'w': { + if (type == WHILE) printWhile(node); + else abort(); + break; + } + default: { + errv("cannot yet print %s\n", type.str); + abort(); + } + } + } + + // print a node, and if nothing is emitted, emit something instead + void print(Ref node, const char *otherwise) { + auto last = used; + print(node); + if (used == last) emit(otherwise); + } + + void printStats(Ref stats) { + bool first = true; + for (size_t i = 0; i < stats->size(); i++) { + Ref curr = stats[i]; + if (!isNothing(curr)) { + if (first) first = false; + else newline(); + print(curr); + if (!isDefun(curr) && !isBlock(curr) && !isIf(curr)) { + emit(';'); + } + } + } + } + + void printToplevel(Ref node) { + if (node[1]->size() > 0) { + printStats(node[1]); + } + } + + void printBlock(Ref node) { + if (node->size() == 1 || node[1]->size() == 0) { + emit("{}"); + return; + } + emit('{'); + indent++; + newline(); + printStats(node[1]); + indent--; + newline(); + emit('}'); + } + + void printDefun(Ref node) { + emit("function "); + emit(node[1]->getCString()); + emit('('); + Ref args = node[2]; + for (size_t i = 0; i < args->size(); i++) { + if (i > 0) (pretty ? emit(", ") : emit(',')); + emit(args[i]->getCString()); + } + emit(')'); + space(); + if (node->size() == 3 || node[3]->size() == 0) { + emit("{}"); + return; + } + emit('{'); + indent++; + newline(); + printStats(node[3]); + indent--; + newline(); + emit('}'); + newline(); + } + + void printAssign(Ref node) { + auto* assign = node->asAssign(); + printChild(assign->target(), node, -1); + space(); + emit('='); + space(); + printChild(assign->value(), node, 1); + } + + void printAssignName(Ref node) { + auto *assign = node->asAssignName(); + emit(assign->target().c_str()); + space(); + emit('='); + space(); + printChild(assign->value(), node, 1); + } + + void printName(Ref node) { + emit(node->getCString()); + } + + static char* numToString(double d, bool finalize=true) { + bool neg = d < 0; + if (neg) d = -d; + // try to emit the fewest necessary characters + bool integer = fmod(d, 1) == 0; + #define BUFFERSIZE 1000 + static char full_storage_f[BUFFERSIZE], full_storage_e[BUFFERSIZE]; // f is normal, e is scientific for float, x for integer + static char *storage_f = full_storage_f + 1, *storage_e = full_storage_e + 1; // full has one more char, for a possible '-' + auto err_f = std::numeric_limits::quiet_NaN(); + auto err_e = std::numeric_limits::quiet_NaN(); + for (int e = 0; e <= 1; e++) { + char *buffer = e ? storage_e : storage_f; + double temp; + if (!integer) { + static char format[6]; + for (int i = 0; i <= 18; i++) { + format[0] = '%'; + format[1] = '.'; + if (i < 10) { + format[2] = '0' + i; + format[3] = e ? 'e' : 'f'; + format[4] = 0; + } else { + format[2] = '1'; + format[3] = '0' + (i - 10); + format[4] = e ? 'e' : 'f'; + format[5] = 0; + } + snprintf(buffer, BUFFERSIZE-1, format, d); + sscanf(buffer, "%lf", &temp); + //errv("%.18f, %.18e => %s => %.18f, %.18e (%d), ", d, d, buffer, temp, temp, temp == d); + if (temp == d) break; + } + } else { + // integer + assert(d >= 0); + if (wasm::isUInteger64(d)) { + unsigned long long uu = wasm::toUInteger64(d); + bool asHex = e && !finalize; + snprintf(buffer, BUFFERSIZE-1, asHex ? "0x%llx" : "%llu", uu); + if (asHex) { + unsigned long long tempULL; + sscanf(buffer, "%llx", &tempULL); + temp = (double)tempULL; + } else { + sscanf(buffer, "%lf", &temp); + } + } else { + // too large for a machine integer, just use floats + snprintf(buffer, BUFFERSIZE-1, e ? "%e" : "%.0f", d); // even on integers, e with a dot is useful, e.g. 1.2e+200 + sscanf(buffer, "%lf", &temp); + } + //errv("%.18f, %.18e => %s => %.18f, %.18e, %llu (%d)\n", d, d, buffer, temp, temp, uu, temp == d); + } + (e ? err_e : err_f) = fabs(temp - d); + //errv("current attempt: %.18f => %s", d, buffer); + //assert(temp == d); + char *dot = strchr(buffer, '.'); + if (dot) { + // remove trailing zeros + char *end = dot+1; + while (*end >= '0' && *end <= '9') end++; + end--; + while (*end == '0') { + char *copy = end; + do { + copy[0] = copy[1]; + } while (*copy++ != 0); + end--; + } + //errv("%.18f => %s", d, buffer); + // remove preceding zeros + while (*buffer == '0') { + char *copy = buffer; + do { + copy[0] = copy[1]; + } while (*copy++ != 0); + } + //errv("%.18f ===> %s", d, buffer); + } else if (!integer || !e) { + // no dot. try to change 12345000 => 12345e3 + char *end = strchr(buffer, 0); + end--; + char *test = end; + // remove zeros, and also doubles can use at most 24 digits, we can truncate any extras even if not zero + while ((*test == '0' || test - buffer > 24) && test > buffer) test--; + int num = end - test; + if (num >= 3) { + test++; + test[0] = 'e'; + if (num < 10) { + test[1] = '0' + num; + test[2] = 0; + } else if (num < 100) { + test[1] = '0' + (num / 10); + test[2] = '0' + (num % 10); + test[3] = 0; + } else { + assert(num < 1000); + test[1] = '0' + (num / 100); + test[2] = '0' + (num % 100) / 10; + test[3] = '0' + (num % 10); + test[4] = 0; + } + } + } + //errv("..current attempt: %.18f => %s", d, buffer); + } + //fprintf(stderr, "options:\n%s\n%s\n (first? %d)\n", storage_e, storage_f, strlen(storage_e) < strlen(storage_f)); + char *ret; + if (err_e == err_f) { + ret = strlen(storage_e) < strlen(storage_f) ? storage_e : storage_f; + } else { + ret = err_e < err_f ? storage_e : storage_f; + } + if (neg) { + ret--; // safe to go back one, there is one more char in full_* + *ret = '-'; + } + return ret; + } + + void printNum(Ref node) { + emit(numToString(node->getNumber(), finalize)); + } + + void printString(Ref node) { + emit('"'); + emit(node[1]->getCString()); + emit('"'); + } + + // Parens optimizing + + bool capturesOperators(Ref node) { + Ref type = node[0]; + return type == CALL || type == ARRAY || type == OBJECT || type == SEQ; + } + + int getPrecedence(Ref node, bool parent) { + if (node->isAssign() || node->isAssignName()) { + return OperatorClass::getPrecedence(OperatorClass::Binary, SET); + } + if (!node->isArray()) { + // node is a value + return -1; + } + Ref type = node[0]; + if (type == BINARY || type == UNARY_PREFIX) { + return OperatorClass::getPrecedence(type == BINARY ? OperatorClass::Binary : OperatorClass::Prefix, node[1]->getIString()); + } else if (type == SEQ) { + return OperatorClass::getPrecedence(OperatorClass::Binary, COMMA); + } else if (type == CALL) { + return parent ? OperatorClass::getPrecedence(OperatorClass::Binary, COMMA) : -1; // call arguments are split by commas, but call itself is safe + } else if (type == CONDITIONAL) { + return OperatorClass::getPrecedence(OperatorClass::Tertiary, QUESTION); + } + // otherwise, this is something that fixes precedence explicitly, and we can ignore + return -1; // XXX + } + + // check whether we need parens for the child, when rendered in the parent + // @param childPosition -1 means it is printed to the left of parent, 0 means "anywhere", 1 means right + bool needParens(Ref parent, Ref child, int childPosition) { + int parentPrecedence = getPrecedence(parent, true); + int childPrecedence = getPrecedence(child, false); + + if (childPrecedence > parentPrecedence) return true; // child is definitely a danger + if (childPrecedence < parentPrecedence) return false; // definitely cool + // equal precedence, so associativity (rtl/ltr) is what matters + // (except for some exceptions, where multiple operators can combine into confusion) + if (parent->isArray() && parent[0] == UNARY_PREFIX) { + assert(child[0] == UNARY_PREFIX); + if ((parent[1] == PLUS || parent[1] == MINUS) && child[1] == parent[1]) { + // cannot emit ++x when we mean +(+x) + return true; + } + } + if (childPosition == 0) return true; // child could be anywhere, so always paren + if (childPrecedence < 0) return false; // both precedences are safe + // check if child is on the dangerous side + if (OperatorClass::getRtl(parentPrecedence)) return childPosition < 0; + else return childPosition > 0; + } + + void printChild(Ref child, Ref parent, int childPosition=0) { + bool parens = needParens(parent, child, childPosition); + if (parens) emit('('); + print(child); + if (parens) emit(')'); + } + + void printBinary(Ref node) { + printChild(node[2], node, -1); + space(); + emit(node[1]->getCString()); + space(); + printChild(node[3], node, 1); + } + + void printUnaryPrefix(Ref node) { + if (finalize && node[1] == PLUS && + (node[2]->isNumber() || + (node[2]->isArray() && node[2][0] == UNARY_PREFIX && + node[2][1] == MINUS && node[2][2]->isNumber()))) { + // emit a finalized number + int last = used; + print(node[2]); + ensure(1); // we temporarily append a 0 + char *curr = buffer + last; // ensure might invalidate + buffer[used] = 0; + if (strchr(curr, '.')) return; // already a decimal point, all good + char *e = strchr(curr, 'e'); + if (!e) { + emit(".0"); + return; + } + ensure(3); + curr = buffer + last; // ensure might invalidate + char *end = strchr(curr, 0); + while (end >= e) { + end[2] = end[0]; + end--; + } + e[0] = '.'; + e[1] = '0'; + used += 2; + return; + } + if ((buffer[used-1] == '-' && node[1] == MINUS) || + (buffer[used-1] == '+' && node[1] == PLUS)) { + emit(' '); // cannot join - and - to --, looks like the -- operator + } + emit(node[1]->getCString()); + printChild(node[2], node, 1); + } + + void printConditional(Ref node) { + printChild(node[1], node, -1); + space(); + emit('?'); + space(); + printChild(node[2], node, 0); + space(); + emit(':'); + space(); + printChild(node[3], node, 1); + } + + void printCall(Ref node) { + printChild(node[1], node, 0); + emit('('); + Ref args = node[2]; + for (size_t i = 0; i < args->size(); i++) { + if (i > 0) (pretty ? emit(", ") : emit(',')); + printChild(args[i], node, 0); + } + emit(')'); + } + + void printSeq(Ref node) { + printChild(node[1], node, -1); + emit(','); + space(); + printChild(node[2], node, 1); + } + + void printDot(Ref node) { + print(node[1]); + emit('.'); + emit(node[2]->getCString()); + } + + void printSwitch(Ref node) { + emit("switch"); + space(); + emit('('); + print(node[1]); + emit(')'); + space(); + emit('{'); + newline(); + Ref cases = node[2]; + for (size_t i = 0; i < cases->size(); i++) { + Ref c = cases[i]; + if (!c[0]) { + emit("default:"); + } else { + emit("case "); + print(c[0]); + emit(':'); + } + if (c[1]->size() > 0) { + indent++; + newline(); + auto curr = used; + printStats(c[1]); + indent--; + if (curr != used) newline(); + else used--; // avoid the extra indentation we added tentatively + } else { + newline(); + } + } + emit('}'); + } + + void printTry(Ref node) { + emit("try "); + printBlock(node[1]); + emit(" catch ("); + printName(node[2]); + emit(") "); + printBlock(node[3]); + } + + void printSub(Ref node) { + printChild(node[1], node, -1); + emit('['); + print(node[2]); + emit(']'); + } + + void printVar(Ref node) { + emit("var "); + Ref args = node[1]; + for (size_t i = 0; i < args->size(); i++) { + if (i > 0) (pretty ? emit(", ") : emit(',')); + emit(args[i][0]->getCString()); + if (args[i]->size() > 1) { + space(); + emit('='); + space(); + print(args[i][1]); + } + } + } + + static bool ifHasElse(Ref node) { + assert(node->isArray() && node[0] == IF); + return node->size() >= 4 && !!node[3]; + } + + void printIf(Ref node) { + emit("if"); + safeSpace(); + emit('('); + print(node[1]); + emit(')'); + space(); + // special case: we need braces to save us from ambiguity, if () { if () } else. otherwise else binds to inner if + // also need to recurse for if () { if () { } else { if () } else + // (note that this is only a problem if the if body has a single element in it, not a block or such, as then + // the block would be braced) + // this analysis is a little conservative - it assumes any child if could be confused with us, which implies + // all other braces vanished (the worst case for us, we are not saved by other braces). + bool needBraces = false; + bool hasElse = ifHasElse(node); + if (hasElse) { + Ref child = node[2]; + while (child->isArray() && child[0] == IF) { + if (!ifHasElse(child)) { + needBraces = true; + break; + } + child = child[3]; // continue into the else + } + } + if (needBraces) { + emit('{'); + indent++; + newline(); + print(node[2]); + indent--; + newline(); + emit('}'); + } else { + print(node[2], "{}"); + if (!isBlock(node[2])) emit(';'); + } + if (hasElse) { + space(); + emit("else"); + safeSpace(); + print(node[3], "{}"); + if (!isBlock(node[3])) emit(';'); + } + } + + void printDo(Ref node) { + emit("do"); + safeSpace(); + print(node[2], "{}"); + space(); + emit("while"); + space(); + emit('('); + print(node[1]); + emit(')'); + } + + void printWhile(Ref node) { + emit("while"); + space(); + emit('('); + print(node[1]); + emit(')'); + space(); + print(node[2], "{}"); + } + + void printLabel(Ref node) { + emit(node[1]->getCString()); + space(); + emit(':'); + space(); + print(node[2]); + } + + void printReturn(Ref node) { + emit("return"); + if (!!node[1]) { + emit(' '); + print(node[1]); + } + } + + void printBreak(Ref node) { + emit("break"); + if (!!node[1]) { + emit(' '); + emit(node[1]->getCString()); + } + } + + void printContinue(Ref node) { + emit("continue"); + if (!!node[1]) { + emit(' '); + emit(node[1]->getCString()); + } + } + + void printNew(Ref node) { + emit("new "); + print(node[1]); + } + + void printArray(Ref node) { + emit('['); + Ref args = node[1]; + for (size_t i = 0; i < args->size(); i++) { + if (i > 0) (pretty ? emit(", ") : emit(',')); + print(args[i]); + } + emit(']'); + } + + void printObject(Ref node) { + emit('{'); + indent++; + newline(); + Ref args = node[1]; + for (size_t i = 0; i < args->size(); i++) { + if (i > 0) { + pretty ? emit(", ") : emit(','); + newline(); + } + const char *str = args[i][0]->getCString(); + const char *check = str; + bool needQuote = false; + while (*check) { + if (!isalnum(*check) && *check != '_' && *check != '$') { + needQuote = true; + break; + } + check++; + } + if (needQuote) emit('"'); + emit(str); + if (needQuote) emit('"'); + emit(":"); + space(); + print(args[i][1]); + } + indent--; + newline(); + emit('}'); + } +}; + + +// cashew builder + +class ValueBuilder { + static Ref makeRawString(const IString& s) { + return &arena.alloc()->setString(s); + } + + static Ref makeNull() { + return &arena.alloc()->setNull(); + } + +public: + static Ref makeRawArray(int size_hint=0) { + return &arena.alloc()->setArray(size_hint); + } + + static Ref makeToplevel() { + return &makeRawArray(2)->push_back(makeRawString(TOPLEVEL)) + .push_back(makeRawArray()); + } + + static Ref makeString(IString str) { + return &makeRawArray(2)->push_back(makeRawString(STRING)) + .push_back(makeRawString(str)); + } + + static Ref makeBlock() { + return &makeRawArray(2)->push_back(makeRawString(BLOCK)) + .push_back(makeRawArray()); + } + + static Ref makeName(IString name) { + return makeRawString(name); + } + + static void setBlockContent(Ref target, Ref block) { + if (target[0] == TOPLEVEL) { + target[1]->setArray(block[1]->getArray()); + } else if (target[0] == DEFUN) { + target[3]->setArray(block[1]->getArray()); + } else abort(); + } + + static void appendToBlock(Ref block, Ref element) { + assert(block[0] == BLOCK); + block[1]->push_back(element); + } + + static Ref makeCall(Ref target) { + return &makeRawArray(3)->push_back(makeRawString(CALL)) + .push_back(target) + .push_back(makeRawArray()); + } + static Ref makeCall(Ref target, Ref arg) { + Ref ret = &makeRawArray(3)->push_back(makeRawString(CALL)) + .push_back(target) + .push_back(makeRawArray()); + ret[2]->push_back(arg); + return ret; + } + static Ref makeCall(IString target) { + Ref ret = &makeRawArray(3)->push_back(makeRawString(CALL)) + .push_back(makeName(target)) + .push_back(makeRawArray()); + return ret; + } + + template + static Ref makeCall(IString target, Ts... args) { + size_t nArgs = sizeof...(Ts); + Ref callArgs = makeRawArray(nArgs); + Ref argArray[] = {args...}; + for (size_t i = 0; i < nArgs; ++i) { + callArgs->push_back(argArray[i]); + } + return &makeRawArray(3)->push_back(makeRawString(CALL)) + .push_back(makeName(target)) + .push_back(callArgs); + } + + static void appendToCall(Ref call, Ref element) { + assert(call[0] == CALL); + call[2]->push_back(element); + } + + static Ref makeStatement(Ref contents) { + return contents; + } + + static Ref makeDouble(double num) { + return &arena.alloc()->setNumber(num); + } + static Ref makeInt(uint32_t num) { + return makeDouble(double(num)); + } + static Ref makeNum(double num) { + return makeDouble(num); + } + + static Ref makeUnary(IString op, Ref value) { + return &makeRawArray(3)->push_back(makeRawString(UNARY_PREFIX)) + .push_back(makeRawString(op)) + .push_back(value); + } + + static Ref makeBinary(Ref left, IString op, Ref right) { + if (op == SET) { + if (left->isString()) { + return &arena.alloc()->setAssignName(left->getIString(), right); + } else { + return &arena.alloc()->setAssign(left, right); + } + } else if (op == COMMA) { + return &makeRawArray(3)->push_back(makeRawString(SEQ)) + .push_back(left) + .push_back(right); + } else { + return &makeRawArray(4)->push_back(makeRawString(BINARY)) + .push_back(makeRawString(op)) + .push_back(left) + .push_back(right); + } + } + + static Ref makePrefix(IString op, Ref right) { + return &makeRawArray(3)->push_back(makeRawString(UNARY_PREFIX)) + .push_back(makeRawString(op)) + .push_back(right); + } + + static Ref makeFunction(IString name) { + return &makeRawArray(4)->push_back(makeRawString(DEFUN)) + .push_back(makeRawString(name)) + .push_back(makeRawArray()) + .push_back(makeRawArray()); + } + + static void appendArgumentToFunction(Ref func, IString arg) { + assert(func[0] == DEFUN); + func[2]->push_back(makeRawString(arg)); + } + + static Ref makeVar(bool is_const=false) { + return &makeRawArray(2)->push_back(makeRawString(VAR)) + .push_back(makeRawArray()); + } + + static void appendToVar(Ref var, IString name, Ref value) { + assert(var[0] == VAR); + Ref array = &makeRawArray(1)->push_back(makeRawString(name)); + if (!!value) array->push_back(value); + var[1]->push_back(array); + } + + static Ref makeReturn(Ref value) { + return &makeRawArray(2)->push_back(makeRawString(RETURN)) + .push_back(!!value ? value : makeNull()); + } + + static Ref makeIndexing(Ref target, Ref index) { + return &makeRawArray(3)->push_back(makeRawString(SUB)) + .push_back(target) + .push_back(index); + } + + static Ref makeIf(Ref condition, Ref ifTrue, Ref ifFalse) { + return &makeRawArray(4)->push_back(makeRawString(IF)) + .push_back(condition) + .push_back(ifTrue) + .push_back(!!ifFalse ? ifFalse : makeNull()); + } + + static Ref makeConditional(Ref condition, Ref ifTrue, Ref ifFalse) { + return &makeRawArray(4)->push_back(makeRawString(CONDITIONAL)) + .push_back(condition) + .push_back(ifTrue) + .push_back(ifFalse); + } + + static Ref makeSeq(Ref left, Ref right) { + return &makeRawArray(3)->push_back(makeRawString(SEQ)) + .push_back(left) + .push_back(right); + } + + static Ref makeDo(Ref body, Ref condition) { + return &makeRawArray(3)->push_back(makeRawString(DO)) + .push_back(condition) + .push_back(body); + } + + static Ref makeWhile(Ref condition, Ref body) { + return &makeRawArray(3)->push_back(makeRawString(WHILE)) + .push_back(condition) + .push_back(body); + } + + static Ref makeFor(Ref init, Ref condition, Ref inc, Ref body) { + return &makeRawArray(5)->push_back(makeRawString(FOR)) + .push_back(init) + .push_back(condition) + .push_back(inc) + .push_back(body); + } + + static Ref makeBreak(IString label) { + return &makeRawArray(2)->push_back(makeRawString(BREAK)) + .push_back(!!label ? makeRawString(label) : makeNull()); + } + + static Ref makeContinue(IString label) { + return &makeRawArray(2)->push_back(makeRawString(CONTINUE)) + .push_back(!!label ? makeRawString(label) : makeNull()); + } + + static Ref makeLabel(IString name, Ref body) { + return &makeRawArray(3)->push_back(makeRawString(LABEL)) + .push_back(makeRawString(name)) + .push_back(body); + } + + static Ref makeSwitch(Ref input) { + return &makeRawArray(3)->push_back(makeRawString(SWITCH)) + .push_back(input) + .push_back(makeRawArray()); + } + + static void appendCaseToSwitch(Ref switch_, Ref arg) { + assert(switch_[0] == SWITCH); + switch_[2]->push_back(&makeRawArray(2)->push_back(arg) + .push_back(makeRawArray())); + } + + static void appendDefaultToSwitch(Ref switch_) { + assert(switch_[0] == SWITCH); + switch_[2]->push_back(&makeRawArray(2)->push_back(makeNull()) + .push_back(makeRawArray())); + } + + static void appendCodeToSwitch(Ref switch_, Ref code, bool explicitBlock) { + assert(switch_[0] == SWITCH); + assert(code[0] == BLOCK); + if (!explicitBlock) { + for (size_t i = 0; i < code[1]->size(); i++) { + switch_[2]->back()->back()->push_back(code[1][i]); + } + } else { + switch_[2]->back()->back()->push_back(code); + } + } + + static Ref makeTry(Ref try_, Ref arg, Ref catch_) { + assert(try_[0] == BLOCK); + assert(catch_[0] == BLOCK); + return &makeRawArray(3)->push_back(makeRawString(TRY)) + .push_back(try_) + .push_back(arg) + .push_back(catch_); + } + + static Ref makeDot(Ref obj, IString key) { + return &makeRawArray(3)->push_back(makeRawString(DOT)) + .push_back(obj) + .push_back(makeRawString(key)); + } + + template + static Ref makeDot(Ref obj, Ref key, Ts... args) { + return makeDot(makeDot(obj, key), args...); + } + + static Ref makeDot(Ref obj, Ref key) { + assert(key->isString()); + return makeDot(obj, key->getIString()); + } + + static Ref makeNew(Ref call) { + return &makeRawArray(2)->push_back(makeRawString(NEW)) + .push_back(call); + } + + static Ref makeArray() { + return &makeRawArray(2)->push_back(makeRawString(ARRAY)) + .push_back(makeRawArray()); + } + + static void appendToArray(Ref array, Ref element) { + assert(array[0] == ARRAY); + array[1]->push_back(element); + } + + static Ref makeObject() { + return &makeRawArray(2)->push_back(makeRawString(OBJECT)) + .push_back(makeRawArray()); + } + + static void appendToObject(Ref array, IString key, Ref value) { + assert(array[0] == OBJECT); + array[1]->push_back(&makeRawArray(2)->push_back(makeRawString(key)) + .push_back(value)); + } + + static Ref makeSub(Ref obj, Ref index) { + return &makeRawArray(2)->push_back(makeRawString(SUB)) + .push_back(obj) + .push_back(index); + } + + static Ref makePtrShift(Ref ptr, int shifts) { + return makeBinary(ptr, RSHIFT, makeInt(shifts)); + } +}; + +// Tolerates 0.0 in the input; does not trust a +() to be there. +class DotZeroValueBuilder : public ValueBuilder { +public: + static Ref makeDouble(double num) { + return makePrefix(PLUS, ValueBuilder::makeDouble(num)); + } +}; + +} // namespace cashew + +#endif // wasm_simple_ast_h diff --git a/src/binaryen/src/emscripten-optimizer/snprintf.h b/src/binaryen/src/emscripten-optimizer/snprintf.h new file mode 100644 index 0000000000..86335661da --- /dev/null +++ b/src/binaryen/src/emscripten-optimizer/snprintf.h @@ -0,0 +1,53 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_snprintf_h +#define wasm_snprintf_h + +#include + +// Visual Studio does not support C99, so emulate snprintf support for it manually. + +#ifdef _MSC_VER + +#define snprintf c99_snprintf + +inline int c99_vsnprintf(char* str, size_t size, const char* format, va_list ap) +{ + int count = -1; + + if (size != 0) + count = _vsnprintf_s(str, size, _TRUNCATE, format, ap); + if (count == -1) + count = _vscprintf(format, ap); + + return count; +} + +inline int c99_snprintf(char* str, size_t size, const char* format, ...) +{ + int count; + va_list ap; + + va_start(ap, format); + count = c99_vsnprintf(str, size, format, ap); + va_end(ap); + + return count; +} +#endif + +#endif // wasm_snprintf_h diff --git a/src/binaryen/src/ir/CMakeLists.txt b/src/binaryen/src/ir/CMakeLists.txt new file mode 100644 index 0000000000..607207968c --- /dev/null +++ b/src/binaryen/src/ir/CMakeLists.txt @@ -0,0 +1,6 @@ +SET(ir_SOURCES + ExpressionAnalyzer.cpp + ExpressionManipulator.cpp + LocalGraph.cpp +) +ADD_LIBRARY(ir STATIC ${ir_SOURCES}) diff --git a/src/binaryen/src/ir/ExpressionAnalyzer.cpp b/src/binaryen/src/ir/ExpressionAnalyzer.cpp new file mode 100644 index 0000000000..05450d5670 --- /dev/null +++ b/src/binaryen/src/ir/ExpressionAnalyzer.cpp @@ -0,0 +1,558 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "support/hash.h" +#include "ir/utils.h" +#include "ir/load-utils.h" + +namespace wasm { +// Given a stack of expressions, checks if the topmost is used as a result. +// For example, if the parent is a block and the node is before the last position, +// it is not used. +bool ExpressionAnalyzer::isResultUsed(std::vector stack, Function* func) { + for (int i = int(stack.size()) - 2; i >= 0; i--) { + auto* curr = stack[i]; + auto* above = stack[i + 1]; + // only if and block can drop values (pre-drop expression was added) FIXME + if (curr->is()) { + auto* block = curr->cast(); + for (size_t j = 0; j < block->list.size() - 1; j++) { + if (block->list[j] == above) return false; + } + assert(block->list.back() == above); + // continue down + } else if (curr->is()) { + auto* iff = curr->cast(); + if (above == iff->condition) return true; + if (!iff->ifFalse) return false; + assert(above == iff->ifTrue || above == iff->ifFalse); + // continue down + } else { + if (curr->is()) return false; + return true; // all other node types use the result + } + } + // The value might be used, so it depends on if the function returns + return func->result != none; +} + +// Checks if a value is dropped. +bool ExpressionAnalyzer::isResultDropped(std::vector stack) { + for (int i = int(stack.size()) - 2; i >= 0; i--) { + auto* curr = stack[i]; + auto* above = stack[i + 1]; + if (curr->is()) { + auto* block = curr->cast(); + for (size_t j = 0; j < block->list.size() - 1; j++) { + if (block->list[j] == above) return false; + } + assert(block->list.back() == above); + // continue down + } else if (curr->is()) { + auto* iff = curr->cast(); + if (above == iff->condition) return false; + if (!iff->ifFalse) return false; + assert(above == iff->ifTrue || above == iff->ifFalse); + // continue down + } else { + if (curr->is()) return true; // dropped + return false; // all other node types use the result + } + } + return false; +} + + +bool ExpressionAnalyzer::flexibleEqual(Expression* left, Expression* right, ExprComparer comparer) { + std::vector nameStack; + std::map> rightNames; // for each name on the left, the stack of names on the right (a stack, since names are scoped and can nest duplicatively + Nop popNameMarker; + std::vector leftStack; + std::vector rightStack; + + auto noteNames = [&](Name left, Name right) { + if (left.is() != right.is()) return false; + if (left.is()) { + nameStack.push_back(left); + rightNames[left].push_back(right); + leftStack.push_back(&popNameMarker); + rightStack.push_back(&popNameMarker); + } + return true; + }; + auto checkNames = [&](Name left, Name right) { + auto iter = rightNames.find(left); + if (iter == rightNames.end()) return left == right; // non-internal name + return iter->second.back() == right; + }; + auto popName = [&]() { + auto left = nameStack.back(); + nameStack.pop_back(); + rightNames[left].pop_back(); + }; + + leftStack.push_back(left); + rightStack.push_back(right); + + while (leftStack.size() > 0 && rightStack.size() > 0) { + left = leftStack.back(); + leftStack.pop_back(); + right = rightStack.back(); + rightStack.pop_back(); + if (!left != !right) return false; + if (!left) continue; + if (left == &popNameMarker) { + popName(); + continue; + } + if (comparer(left, right)) continue; // comparison hook, before all the rest + // continue with normal structural comparison + if (left->_id != right->_id) return false; + #define PUSH(clazz, what) \ + leftStack.push_back(left->cast()->what); \ + rightStack.push_back(right->cast()->what); + #define CHECK(clazz, what) \ + if (left->cast()->what != right->cast()->what) return false; + switch (left->_id) { + case Expression::Id::BlockId: { + if (!noteNames(left->cast()->name, right->cast()->name)) return false; + CHECK(Block, list.size()); + for (Index i = 0; i < left->cast()->list.size(); i++) { + PUSH(Block, list[i]); + } + break; + } + case Expression::Id::IfId: { + PUSH(If, condition); + PUSH(If, ifTrue); + PUSH(If, ifFalse); + break; + } + case Expression::Id::LoopId: { + if (!noteNames(left->cast()->name, right->cast()->name)) return false; + PUSH(Loop, body); + break; + } + case Expression::Id::BreakId: { + if (!checkNames(left->cast()->name, right->cast()->name)) return false; + PUSH(Break, condition); + PUSH(Break, value); + break; + } + case Expression::Id::SwitchId: { + CHECK(Switch, targets.size()); + for (Index i = 0; i < left->cast()->targets.size(); i++) { + if (!checkNames(left->cast()->targets[i], right->cast()->targets[i])) return false; + } + if (!checkNames(left->cast()->default_, right->cast()->default_)) return false; + PUSH(Switch, condition); + PUSH(Switch, value); + break; + } + case Expression::Id::CallId: { + CHECK(Call, target); + CHECK(Call, operands.size()); + for (Index i = 0; i < left->cast()->operands.size(); i++) { + PUSH(Call, operands[i]); + } + break; + } + case Expression::Id::CallImportId: { + CHECK(CallImport, target); + CHECK(CallImport, operands.size()); + for (Index i = 0; i < left->cast()->operands.size(); i++) { + PUSH(CallImport, operands[i]); + } + break; + } + case Expression::Id::CallIndirectId: { + PUSH(CallIndirect, target); + CHECK(CallIndirect, fullType); + CHECK(CallIndirect, operands.size()); + for (Index i = 0; i < left->cast()->operands.size(); i++) { + PUSH(CallIndirect, operands[i]); + } + break; + } + case Expression::Id::GetLocalId: { + CHECK(GetLocal, index); + break; + } + case Expression::Id::SetLocalId: { + CHECK(SetLocal, index); + CHECK(SetLocal, type); // for tee/set + PUSH(SetLocal, value); + break; + } + case Expression::Id::GetGlobalId: { + CHECK(GetGlobal, name); + break; + } + case Expression::Id::SetGlobalId: { + CHECK(SetGlobal, name); + PUSH(SetGlobal, value); + break; + } + case Expression::Id::LoadId: { + CHECK(Load, bytes); + if (LoadUtils::isSignRelevant(left->cast()) && + LoadUtils::isSignRelevant(right->cast())) { + CHECK(Load, signed_); + } + CHECK(Load, offset); + CHECK(Load, align); + PUSH(Load, ptr); + break; + } + case Expression::Id::StoreId: { + CHECK(Store, bytes); + CHECK(Store, offset); + CHECK(Store, align); + CHECK(Store, valueType); + PUSH(Store, ptr); + PUSH(Store, value); + break; + } + case Expression::Id::AtomicCmpxchgId: { + CHECK(AtomicCmpxchg, bytes); + CHECK(AtomicCmpxchg, offset); + PUSH(AtomicCmpxchg, ptr); + PUSH(AtomicCmpxchg, expected); + PUSH(AtomicCmpxchg, replacement); + break; + } + case Expression::Id::AtomicRMWId: { + CHECK(AtomicRMW, op); + CHECK(AtomicRMW, bytes); + CHECK(AtomicRMW, offset); + PUSH(AtomicRMW, ptr); + PUSH(AtomicRMW, value); + break; + } + case Expression::Id::AtomicWaitId: { + CHECK(AtomicWait, expectedType); + PUSH(AtomicWait, ptr); + PUSH(AtomicWait, expected); + PUSH(AtomicWait, timeout); + break; + } + case Expression::Id::AtomicWakeId: { + PUSH(AtomicWake, ptr); + PUSH(AtomicWake, wakeCount); + break; + } + case Expression::Id::ConstId: { + if (!left->cast()->value.bitwiseEqual(right->cast()->value)) { + return false; + } + break; + } + case Expression::Id::UnaryId: { + CHECK(Unary, op); + PUSH(Unary, value); + break; + } + case Expression::Id::BinaryId: { + CHECK(Binary, op); + PUSH(Binary, left); + PUSH(Binary, right); + break; + } + case Expression::Id::SelectId: { + PUSH(Select, ifTrue); + PUSH(Select, ifFalse); + PUSH(Select, condition); + break; + } + case Expression::Id::DropId: { + PUSH(Drop, value); + break; + } + case Expression::Id::ReturnId: { + PUSH(Return, value); + break; + } + case Expression::Id::HostId: { + CHECK(Host, op); + CHECK(Host, nameOperand); + CHECK(Host, operands.size()); + for (Index i = 0; i < left->cast()->operands.size(); i++) { + PUSH(Host, operands[i]); + } + break; + } + case Expression::Id::NopId: { + break; + } + case Expression::Id::UnreachableId: { + break; + } + default: WASM_UNREACHABLE(); + } + #undef CHECK + #undef PUSH + } + if (leftStack.size() > 0 || rightStack.size() > 0) return false; + return true; +} + + +// hash an expression, ignoring superficial details like specific internal names +uint32_t ExpressionAnalyzer::hash(Expression* curr) { + uint32_t digest = 0; + + auto hash = [&digest](uint32_t hash) { + digest = rehash(digest, hash); + }; + auto hash64 = [&digest](uint64_t hash) { + digest = rehash(rehash(digest, uint32_t(hash >> 32)), uint32_t(hash)); + }; + + std::vector nameStack; + Index internalCounter = 0; + std::map> internalNames; // for each internal name, a vector if unique ids + Nop popNameMarker; + std::vector stack; + + auto noteName = [&](Name curr) { + if (curr.is()) { + nameStack.push_back(curr); + internalNames[curr].push_back(internalCounter++); + stack.push_back(&popNameMarker); + } + return true; + }; + auto hashName = [&](Name curr) { + auto iter = internalNames.find(curr); + if (iter == internalNames.end()) hash64(uint64_t(curr.str)); + else hash(iter->second.back()); + }; + auto popName = [&]() { + auto curr = nameStack.back(); + nameStack.pop_back(); + internalNames[curr].pop_back(); + }; + + stack.push_back(curr); + + while (stack.size() > 0) { + curr = stack.back(); + stack.pop_back(); + if (!curr) continue; + if (curr == &popNameMarker) { + popName(); + continue; + } + hash(curr->_id); + // we often don't need to hash the type, as it is tied to other values + // we are hashing anyhow, but there are exceptions: for example, a + // get_local's type is determined by the function, so if we are + // hashing only expression fragments, then two from different + // functions may turn out the same even if the type differs. Likewise, + // if we hash between modules, then we need to take int account + // call_imports type, etc. The simplest thing is just to hash the + // type for all of them. + hash(curr->type); + + #define PUSH(clazz, what) \ + stack.push_back(curr->cast()->what); + #define HASH(clazz, what) \ + hash(curr->cast()->what); + #define HASH64(clazz, what) \ + hash64(curr->cast()->what); + #define HASH_NAME(clazz, what) \ + hash64(uint64_t(curr->cast()->what.str)); + #define HASH_PTR(clazz, what) \ + hash64(uint64_t(curr->cast()->what)); + switch (curr->_id) { + case Expression::Id::BlockId: { + noteName(curr->cast()->name); + HASH(Block, list.size()); + for (Index i = 0; i < curr->cast()->list.size(); i++) { + PUSH(Block, list[i]); + } + break; + } + case Expression::Id::IfId: { + PUSH(If, condition); + PUSH(If, ifTrue); + PUSH(If, ifFalse); + break; + } + case Expression::Id::LoopId: { + noteName(curr->cast()->name); + PUSH(Loop, body); + break; + } + case Expression::Id::BreakId: { + hashName(curr->cast()->name); + PUSH(Break, condition); + PUSH(Break, value); + break; + } + case Expression::Id::SwitchId: { + HASH(Switch, targets.size()); + for (Index i = 0; i < curr->cast()->targets.size(); i++) { + hashName(curr->cast()->targets[i]); + } + hashName(curr->cast()->default_); + PUSH(Switch, condition); + PUSH(Switch, value); + break; + } + case Expression::Id::CallId: { + HASH_NAME(Call, target); + HASH(Call, operands.size()); + for (Index i = 0; i < curr->cast()->operands.size(); i++) { + PUSH(Call, operands[i]); + } + break; + } + case Expression::Id::CallImportId: { + HASH_NAME(CallImport, target); + HASH(CallImport, operands.size()); + for (Index i = 0; i < curr->cast()->operands.size(); i++) { + PUSH(CallImport, operands[i]); + } + break; + } + case Expression::Id::CallIndirectId: { + PUSH(CallIndirect, target); + HASH_NAME(CallIndirect, fullType); + HASH(CallIndirect, operands.size()); + for (Index i = 0; i < curr->cast()->operands.size(); i++) { + PUSH(CallIndirect, operands[i]); + } + break; + } + case Expression::Id::GetLocalId: { + HASH(GetLocal, index); + break; + } + case Expression::Id::SetLocalId: { + HASH(SetLocal, index); + PUSH(SetLocal, value); + break; + } + case Expression::Id::GetGlobalId: { + HASH_NAME(GetGlobal, name); + break; + } + case Expression::Id::SetGlobalId: { + HASH_NAME(SetGlobal, name); + PUSH(SetGlobal, value); + break; + } + case Expression::Id::LoadId: { + HASH(Load, bytes); + if (LoadUtils::isSignRelevant(curr->cast())) { + HASH(Load, signed_); + } + HASH(Load, offset); + HASH(Load, align); + PUSH(Load, ptr); + break; + } + case Expression::Id::StoreId: { + HASH(Store, bytes); + HASH(Store, offset); + HASH(Store, align); + HASH(Store, valueType); + PUSH(Store, ptr); + PUSH(Store, value); + break; + } + case Expression::Id::AtomicCmpxchgId: { + HASH(AtomicCmpxchg, bytes); + HASH(AtomicCmpxchg, offset); + PUSH(AtomicCmpxchg, ptr); + PUSH(AtomicCmpxchg, expected); + PUSH(AtomicCmpxchg, replacement); + break; + } + case Expression::Id::AtomicRMWId: { + HASH(AtomicRMW, op); + HASH(AtomicRMW, bytes); + HASH(AtomicRMW, offset); + PUSH(AtomicRMW, ptr); + PUSH(AtomicRMW, value); + break; + } + case Expression::Id::AtomicWaitId: { + HASH(AtomicWait, expectedType); + PUSH(AtomicWait, ptr); + PUSH(AtomicWait, expected); + PUSH(AtomicWait, timeout); + break; + } + case Expression::Id::AtomicWakeId: { + PUSH(AtomicWake, ptr); + PUSH(AtomicWake, wakeCount); + break; + } + case Expression::Id::ConstId: { + HASH(Const, value.type); + HASH64(Const, value.getBits()); + break; + } + case Expression::Id::UnaryId: { + HASH(Unary, op); + PUSH(Unary, value); + break; + } + case Expression::Id::BinaryId: { + HASH(Binary, op); + PUSH(Binary, left); + PUSH(Binary, right); + break; + } + case Expression::Id::SelectId: { + PUSH(Select, ifTrue); + PUSH(Select, ifFalse); + PUSH(Select, condition); + break; + } + case Expression::Id::DropId: { + PUSH(Drop, value); + break; + } + case Expression::Id::ReturnId: { + PUSH(Return, value); + break; + } + case Expression::Id::HostId: { + HASH(Host, op); + HASH_NAME(Host, nameOperand); + HASH(Host, operands.size()); + for (Index i = 0; i < curr->cast()->operands.size(); i++) { + PUSH(Host, operands[i]); + } + break; + } + case Expression::Id::NopId: { + break; + } + case Expression::Id::UnreachableId: { + break; + } + default: WASM_UNREACHABLE(); + } + #undef HASH + #undef PUSH + } + return digest; +} +} // namespace wasm diff --git a/src/binaryen/src/ir/ExpressionManipulator.cpp b/src/binaryen/src/ir/ExpressionManipulator.cpp new file mode 100644 index 0000000000..812c4f04b1 --- /dev/null +++ b/src/binaryen/src/ir/ExpressionManipulator.cpp @@ -0,0 +1,177 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ir/utils.h" +#include "support/hash.h" + +namespace wasm { + +namespace ExpressionManipulator { + +Expression* flexibleCopy(Expression* original, Module& wasm, CustomCopier custom) { + struct Copier : public Visitor { + Module& wasm; + CustomCopier custom; + + Builder builder; + + Copier(Module& wasm, CustomCopier custom) : wasm(wasm), custom(custom), builder(wasm) {} + + Expression* copy(Expression* curr) { + if (!curr) return nullptr; + auto* ret = custom(curr); + if (ret) return ret; + return Visitor::visit(curr); + } + + Expression* visitBlock(Block *curr) { + ExpressionList list(wasm.allocator); + for (Index i = 0; i < curr->list.size(); i++) { + list.push_back(copy(curr->list[i])); + } + return builder.makeBlock(curr->name, list, curr->type); + } + Expression* visitIf(If *curr) { + return builder.makeIf(copy(curr->condition), copy(curr->ifTrue), copy(curr->ifFalse), curr->type); + } + Expression* visitLoop(Loop *curr) { + return builder.makeLoop(curr->name, copy(curr->body)); + } + Expression* visitBreak(Break *curr) { + return builder.makeBreak(curr->name, copy(curr->value), copy(curr->condition)); + } + Expression* visitSwitch(Switch *curr) { + return builder.makeSwitch(curr->targets, curr->default_, copy(curr->condition), copy(curr->value)); + } + Expression* visitCall(Call *curr) { + auto* ret = builder.makeCall(curr->target, {}, curr->type); + for (Index i = 0; i < curr->operands.size(); i++) { + ret->operands.push_back(copy(curr->operands[i])); + } + return ret; + } + Expression* visitCallImport(CallImport *curr) { + auto* ret = builder.makeCallImport(curr->target, {}, curr->type); + for (Index i = 0; i < curr->operands.size(); i++) { + ret->operands.push_back(copy(curr->operands[i])); + } + return ret; + } + Expression* visitCallIndirect(CallIndirect *curr) { + auto* ret = builder.makeCallIndirect(curr->fullType, copy(curr->target), {}, curr->type); + for (Index i = 0; i < curr->operands.size(); i++) { + ret->operands.push_back(copy(curr->operands[i])); + } + return ret; + } + Expression* visitGetLocal(GetLocal *curr) { + return builder.makeGetLocal(curr->index, curr->type); + } + Expression* visitSetLocal(SetLocal *curr) { + if (curr->isTee()) { + return builder.makeTeeLocal(curr->index, copy(curr->value)); + } else { + return builder.makeSetLocal(curr->index, copy(curr->value)); + } + } + Expression* visitGetGlobal(GetGlobal *curr) { + return builder.makeGetGlobal(curr->name, curr->type); + } + Expression* visitSetGlobal(SetGlobal *curr) { + return builder.makeSetGlobal(curr->name, copy(curr->value)); + } + Expression* visitLoad(Load *curr) { + if (curr->isAtomic) { + return builder.makeAtomicLoad(curr->bytes, curr->offset, + copy(curr->ptr), curr->type); + } + return builder.makeLoad(curr->bytes, curr->signed_, curr->offset, curr->align, copy(curr->ptr), curr->type); + } + Expression* visitStore(Store *curr) { + if (curr->isAtomic) { + return builder.makeAtomicStore(curr->bytes, curr->offset, copy(curr->ptr), copy(curr->value), curr->valueType); + } + return builder.makeStore(curr->bytes, curr->offset, curr->align, copy(curr->ptr), copy(curr->value), curr->valueType); + } + Expression* visitAtomicRMW(AtomicRMW* curr) { + return builder.makeAtomicRMW(curr->op, curr->bytes, curr->offset, + copy(curr->ptr), copy(curr->value), curr->type); + } + Expression* visitAtomicCmpxchg(AtomicCmpxchg* curr) { + return builder.makeAtomicCmpxchg(curr->bytes, curr->offset, + copy(curr->ptr), copy(curr->expected), copy(curr->replacement), + curr->type); + } + Expression* visitAtomicWait(AtomicWait* curr) { + return builder.makeAtomicWait(copy(curr->ptr), copy(curr->expected), copy(curr->timeout), curr->expectedType); + } + Expression* visitAtomicWake(AtomicWake* curr) { + return builder.makeAtomicWake(copy(curr->ptr), copy(curr->wakeCount)); + } + Expression* visitConst(Const *curr) { + return builder.makeConst(curr->value); + } + Expression* visitUnary(Unary *curr) { + return builder.makeUnary(curr->op, copy(curr->value)); + } + Expression* visitBinary(Binary *curr) { + return builder.makeBinary(curr->op, copy(curr->left), copy(curr->right)); + } + Expression* visitSelect(Select *curr) { + return builder.makeSelect(copy(curr->condition), copy(curr->ifTrue), copy(curr->ifFalse)); + } + Expression* visitDrop(Drop *curr) { + return builder.makeDrop(copy(curr->value)); + } + Expression* visitReturn(Return *curr) { + return builder.makeReturn(copy(curr->value)); + } + Expression* visitHost(Host *curr) { + assert(curr->operands.size() == 0); + return builder.makeHost(curr->op, curr->nameOperand, {}); + } + Expression* visitNop(Nop *curr) { + return builder.makeNop(); + } + Expression* visitUnreachable(Unreachable *curr) { + return builder.makeUnreachable(); + } + }; + + Copier copier(wasm, custom); + return copier.copy(original); +} + + +// Splice an item into the middle of a block's list +void spliceIntoBlock(Block* block, Index index, Expression* add) { + auto& list = block->list; + if (index == list.size()) { + list.push_back(add); // simple append + } else { + // we need to make room + list.push_back(nullptr); + for (Index i = list.size() - 1; i > index; i--) { + list[i] = list[i - 1]; + } + list[index] = add; + } + block->finalize(block->type); +} + +} // namespace ExpressionManipulator + +} // namespace wasm diff --git a/src/binaryen/src/ir/LocalGraph.cpp b/src/binaryen/src/ir/LocalGraph.cpp new file mode 100644 index 0000000000..cee187c6dc --- /dev/null +++ b/src/binaryen/src/ir/LocalGraph.cpp @@ -0,0 +1,273 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include +#include +#include + +namespace wasm { + +LocalGraph::LocalGraph(Function* func, Module* module) { + walkFunctionInModule(func, module); + +#ifdef LOCAL_GRAPH_DEBUG + std::cout << "LocalGraph::dump\n"; + for (auto& pair : getSetses) { + auto* get = pair.first; + auto& sets = pair.second; + std::cout << "GET\n" << get << " is influenced by\n"; + for (auto* set : sets) { + std::cout << set << '\n'; + } + } +#endif +} + +void LocalGraph::computeInfluences() { + for (auto& pair : locations) { + auto* curr = pair.first; + if (auto* set = curr->dynCast()) { + FindAll findAll(set->value); + for (auto* get : findAll.list) { + getInfluences[get].insert(set); + } + } else { + auto* get = curr->cast(); + for (auto* set : getSetses[get]) { + setInfluences[set].insert(get); + } + } + } +} + +void LocalGraph::doWalkFunction(Function* func) { + numLocals = func->getNumLocals(); + if (numLocals == 0) return; // nothing to do + // We begin with each param being assigned from the incoming value, and the zero-init for the locals, + // so the initial state is the identity permutation + currMapping.resize(numLocals); + for (auto& set : currMapping) { + set = { nullptr }; + } + PostWalker::walk(func->body); +} + +// control flow + +void LocalGraph::visitBlock(Block* curr) { + if (curr->name.is() && breakMappings.find(curr->name) != breakMappings.end()) { + auto& infos = breakMappings[curr->name]; + infos.emplace_back(std::move(currMapping)); + currMapping = std::move(merge(infos)); + breakMappings.erase(curr->name); + } +} + +void LocalGraph::finishIf() { + // that's it for this if, merge + std::vector breaks; + breaks.emplace_back(std::move(currMapping)); + breaks.emplace_back(std::move(mappingStack.back())); + mappingStack.pop_back(); + currMapping = std::move(merge(breaks)); +} + +void LocalGraph::afterIfCondition(LocalGraph* self, Expression** currp) { + self->mappingStack.push_back(self->currMapping); +} +void LocalGraph::afterIfTrue(LocalGraph* self, Expression** currp) { + auto* curr = (*currp)->cast(); + if (curr->ifFalse) { + auto afterCondition = std::move(self->mappingStack.back()); + self->mappingStack.back() = std::move(self->currMapping); + self->currMapping = std::move(afterCondition); + } else { + self->finishIf(); + } +} +void LocalGraph::afterIfFalse(LocalGraph* self, Expression** currp) { + self->finishIf(); +} +void LocalGraph::beforeLoop(LocalGraph* self, Expression** currp) { + // save the state before entering the loop, for calculation later of the merge at the loop top + self->mappingStack.push_back(self->currMapping); + self->loopGetStack.push_back({}); +} +void LocalGraph::visitLoop(Loop* curr) { + if (curr->name.is() && breakMappings.find(curr->name) != breakMappings.end()) { + auto& infos = breakMappings[curr->name]; + infos.emplace_back(std::move(mappingStack.back())); + auto before = infos.back(); + auto& merged = merge(infos); + // every local we created a phi for requires us to update get_local operations in + // the loop - the branch back has means that gets in the loop have potentially + // more sets reaching them. + // we can detect this as follows: if a get of oldIndex has the same sets + // as the sets at the entrance to the loop, then it is affected by the loop + // header sets, and we can add to there sets that looped back + auto linkLoopTop = [&](Index i, Sets& getSets) { + auto& beforeSets = before[i]; + if (getSets.size() < beforeSets.size()) { + // the get trivially has fewer sets, so it overrode the loop entry sets + return; + } + std::vector intersection; + std::set_intersection(beforeSets.begin(), beforeSets.end(), + getSets.begin(), getSets.end(), + std::back_inserter(intersection)); + if (intersection.size() < beforeSets.size()) { + // the get has not the same sets as in the loop entry + return; + } + // the get has the entry sets, so add any new ones + for (auto* set : merged[i]) { + getSets.insert(set); + } + }; + auto& gets = loopGetStack.back(); + for (auto* get : gets) { + linkLoopTop(get->index, getSetses[get]); + } + // and the same for the loop fallthrough: any local that still has the + // entry sets should also have the loop-back sets as well + for (Index i = 0; i < numLocals; i++) { + linkLoopTop(i, currMapping[i]); + } + // finally, breaks still in flight must be updated too + for (auto& iter : breakMappings) { + auto name = iter.first; + if (name == curr->name) continue; // skip our own (which is still in use) + auto& mappings = iter.second; + for (auto& mapping : mappings) { + for (Index i = 0; i < numLocals; i++) { + linkLoopTop(i, mapping[i]); + } + } + } + // now that we are done with using the mappings, erase our own + breakMappings.erase(curr->name); + } + mappingStack.pop_back(); + loopGetStack.pop_back(); +} +void LocalGraph::visitBreak(Break* curr) { + if (curr->condition) { + breakMappings[curr->name].emplace_back(currMapping); + } else { + breakMappings[curr->name].emplace_back(std::move(currMapping)); + setUnreachable(currMapping); + } +} +void LocalGraph::visitSwitch(Switch* curr) { + std::set all; + for (auto target : curr->targets) { + all.insert(target); + } + all.insert(curr->default_); + for (auto target : all) { + breakMappings[target].emplace_back(currMapping); + } + setUnreachable(currMapping); +} +void LocalGraph::visitReturn(Return *curr) { + setUnreachable(currMapping); +} +void LocalGraph::visitUnreachable(Unreachable *curr) { + setUnreachable(currMapping); +} + +// local usage + +void LocalGraph::visitGetLocal(GetLocal* curr) { + assert(currMapping.size() == numLocals); + assert(curr->index < numLocals); + for (auto& loopGets : loopGetStack) { + loopGets.push_back(curr); + } + // current sets are our sets + getSetses[curr] = currMapping[curr->index]; + locations[curr] = getCurrentPointer(); +} +void LocalGraph::visitSetLocal(SetLocal* curr) { + assert(currMapping.size() == numLocals); + assert(curr->index < numLocals); + // current sets are just this set + currMapping[curr->index] = { curr }; // TODO optimize? + locations[curr] = getCurrentPointer(); +} + +// traversal + +void LocalGraph::scan(LocalGraph* self, Expression** currp) { + if (auto* iff = (*currp)->dynCast()) { + // if needs special handling + if (iff->ifFalse) { + self->pushTask(LocalGraph::afterIfFalse, currp); + self->pushTask(LocalGraph::scan, &iff->ifFalse); + } + self->pushTask(LocalGraph::afterIfTrue, currp); + self->pushTask(LocalGraph::scan, &iff->ifTrue); + self->pushTask(LocalGraph::afterIfCondition, currp); + self->pushTask(LocalGraph::scan, &iff->condition); + } else { + PostWalker::scan(self, currp); + } + + // loops need pre-order visiting too + if ((*currp)->is()) { + self->pushTask(LocalGraph::beforeLoop, currp); + } +} + +// helpers + +void LocalGraph::setUnreachable(Mapping& mapping) { + mapping.resize(numLocals); // may have been emptied by a move + mapping[0].clear(); +} + +bool LocalGraph::isUnreachable(Mapping& mapping) { + // we must have some set for each index, if only the zero init, so empty means we emptied it for unreachable code + return mapping[0].empty(); +} + +// merges a bunch of infos into one. +// if we need phis, writes them into the provided vector. the caller should +// ensure those are placed in the right location +LocalGraph::Mapping& LocalGraph::merge(std::vector& mappings) { + assert(mappings.size() > 0); + auto& out = mappings[0]; + if (mappings.size() == 1) { + return out; + } + // merge into the first + for (Index j = 1; j < mappings.size(); j++) { + auto& other = mappings[j]; + for (Index i = 0; i < numLocals; i++) { + auto& outSets = out[i]; + for (auto* set : other[i]) { + outSets.insert(set); + } + } + } + return out; +} + +} // namespace wasm + diff --git a/src/binaryen/src/ir/bits.h b/src/binaryen/src/ir/bits.h new file mode 100644 index 0000000000..4196b74c11 --- /dev/null +++ b/src/binaryen/src/ir/bits.h @@ -0,0 +1,107 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_bits_h +#define wasm_ir_bits_h + +#include "support/bits.h" +#include "wasm-builder.h" +#include "ir/literal-utils.h" + +namespace wasm { + +struct Bits { + // get a mask to keep only the low # of bits + static int32_t lowBitMask(int32_t bits) { + uint32_t ret = -1; + if (bits >= 32) return ret; + return ret >> (32 - bits); + } + + // checks if the input is a mask of lower bits, i.e., all 1s up to some high bit, and all zeros + // from there. returns the number of masked bits, or 0 if this is not such a mask + static uint32_t getMaskedBits(uint32_t mask) { + if (mask == uint32_t(-1)) return 32; // all the bits + if (mask == 0) return 0; // trivially not a mask + // otherwise, see if adding one turns this into a 1-bit thing, 00011111 + 1 => 00100000 + if (PopCount(mask + 1) != 1) return 0; + // this is indeed a mask + return 32 - CountLeadingZeroes(mask); + } + + // gets the number of effective shifts a shift operation does. In + // wasm, only 5 bits matter for 32-bit shifts, and 6 for 64. + static Index getEffectiveShifts(Index amount, WasmType type) { + if (type == i32) { + return amount & 31; + } else if (type == i64) { + return amount & 63; + } + WASM_UNREACHABLE(); + } + + static Index getEffectiveShifts(Expression* expr) { + auto* amount = expr->cast(); + if (amount->type == i32) { + return getEffectiveShifts(amount->value.geti32(), i32); + } else if (amount->type == i64) { + return getEffectiveShifts(amount->value.geti64(), i64); + } + WASM_UNREACHABLE(); + } + + static Expression* makeSignExt(Expression* value, Index bytes, Module& wasm) { + if (value->type == i32) { + if (bytes == 1 || bytes == 2) { + auto shifts = bytes == 1 ? 24 : 16; + Builder builder(wasm); + return builder.makeBinary( + ShrSInt32, + builder.makeBinary( + ShlInt32, + value, + LiteralUtils::makeFromInt32(shifts, i32, wasm) + ), + LiteralUtils::makeFromInt32(shifts, i32, wasm) + ); + } + assert(bytes == 4); + return value; // nothing to do + } else { + assert(value->type == i64); + if (bytes == 1 || bytes == 2 || bytes == 4) { + auto shifts = bytes == 1 ? 56 : (bytes == 2 ? 48 : 32); + Builder builder(wasm); + return builder.makeBinary( + ShrSInt64, + builder.makeBinary( + ShlInt64, + value, + LiteralUtils::makeFromInt32(shifts, i64, wasm) + ), + LiteralUtils::makeFromInt32(shifts, i64, wasm) + ); + } + assert(bytes == 8); + return value; // nothing to do + } + } +}; + +} // namespace wasm + +#endif // wasm_ir_bits_h + diff --git a/src/binaryen/src/ir/block-utils.h b/src/binaryen/src/ir/block-utils.h new file mode 100644 index 0000000000..f7c68aa396 --- /dev/null +++ b/src/binaryen/src/ir/block-utils.h @@ -0,0 +1,67 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_block_h +#define wasm_ir_block_h + +#include "literal.h" +#include "wasm.h" +#include "ir/branch-utils.h" +#include "ir/effects.h" + +namespace wasm { + +namespace BlockUtils { + // if a block has just one element, it can often be replaced + // with that content + template + inline Expression* simplifyToContents(Block* block, T* parent, bool allowTypeChange = false) { + auto& list = block->list; + if (list.size() == 1 && !BranchUtils::BranchSeeker::hasNamed(list[0], block->name)) { + // just one element. try to replace the block + auto* singleton = list[0]; + auto sideEffects = EffectAnalyzer(parent->getPassOptions(), singleton).hasSideEffects(); + if (!sideEffects && !isConcreteWasmType(singleton->type)) { + // no side effects, and singleton is not returning a value, so we can throw away + // the block and its contents, basically + return Builder(*parent->getModule()).replaceWithIdenticalType(block); + } else if (block->type == singleton->type || allowTypeChange) { + return singleton; + } else { + // (side effects +) type change, must be block with declared value but inside is unreachable + // (if both concrete, must match, and since no name on block, we can't be + // branched to, so if singleton is unreachable, so is the block) + assert(isConcreteWasmType(block->type) && singleton->type == unreachable); + // we could replace with unreachable, but would need to update all + // the parent's types + } + } else if (list.size() == 0) { + ExpressionManipulator::nop(block); + } + return block; + } + + // similar, but when we allow the type to change while doing so + template + inline Expression* simplifyToContentsWithPossibleTypeChange(Block* block, T* parent) { + return simplifyToContents(block, parent, true); + } +}; + +} // namespace wasm + +#endif // wasm_ir_block_h + diff --git a/src/binaryen/src/ir/branch-utils.h b/src/binaryen/src/ir/branch-utils.h new file mode 100644 index 0000000000..26e8e7c87d --- /dev/null +++ b/src/binaryen/src/ir/branch-utils.h @@ -0,0 +1,183 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_branch_h +#define wasm_ir_branch_h + +#include "wasm.h" +#include "wasm-traversal.h" + +namespace wasm { + +namespace BranchUtils { + +// Some branches are obviously not actually reachable (e.g. (br $out (unreachable))) + +inline bool isBranchReachable(Break* br) { + return !(br->value && br->value->type == unreachable) && + !(br->condition && br->condition->type == unreachable); +} + +inline bool isBranchReachable(Switch* sw) { + return !(sw->value && sw->value->type == unreachable) && + sw->condition->type != unreachable; +} + +inline bool isBranchReachable(Expression* expr) { + if (auto* br = expr->dynCast()) { + return isBranchReachable(br); + } else if (auto* sw = expr->dynCast()) { + return isBranchReachable(sw); + } + WASM_UNREACHABLE(); +} + +// returns the set of targets to which we branch that are +// outside of a node +inline std::set getExitingBranches(Expression* ast) { + struct Scanner : public PostWalker { + std::set targets; + + void visitBreak(Break* curr) { + targets.insert(curr->name); + } + void visitSwitch(Switch* curr) { + for (auto target : targets) { + targets.insert(target); + } + targets.insert(curr->default_); + } + void visitBlock(Block* curr) { + if (curr->name.is()) { + targets.erase(curr->name); + } + } + void visitLoop(Loop* curr) { + if (curr->name.is()) { + targets.erase(curr->name); + } + } + }; + Scanner scanner; + scanner.walk(ast); + // anything not erased is a branch out + return scanner.targets; +} + +// returns the list of all branch targets in a node + +inline std::set getBranchTargets(Expression* ast) { + struct Scanner : public PostWalker { + std::set targets; + + void visitBlock(Block* curr) { + if (curr->name.is()) { + targets.insert(curr->name); + } + } + void visitLoop(Loop* curr) { + if (curr->name.is()) { + targets.insert(curr->name); + } + } + }; + Scanner scanner; + scanner.walk(ast); + return scanner.targets; +} + +// Finds if there are branches targeting a name. Note that since names are +// unique in our IR, we just need to look for the name, and do not need +// to analyze scoping. +// By default we consider all branches, so any place there is a branch that +// names the target. You can unset 'named' to only note branches that appear +// reachable (i.e., are not obviously unreachable). +struct BranchSeeker : public PostWalker { + Name target; + bool named = true; + + Index found; + WasmType valueType; + + BranchSeeker(Name target) : target(target), found(0) {} + + void noteFound(Expression* value) { + found++; + if (found == 1) valueType = unreachable; + if (!value) valueType = none; + else if (value->type != unreachable) valueType = value->type; + } + + void visitBreak(Break *curr) { + if (!named) { + // ignore an unreachable break + if (curr->condition && curr->condition->type == unreachable) return; + if (curr->value && curr->value->type == unreachable) return; + } + // check the break + if (curr->name == target) noteFound(curr->value); + } + + void visitSwitch(Switch *curr) { + if (!named) { + // ignore an unreachable switch + if (curr->condition->type == unreachable) return; + if (curr->value && curr->value->type == unreachable) return; + } + // check the switch + for (auto name : curr->targets) { + if (name == target) noteFound(curr->value); + } + if (curr->default_ == target) noteFound(curr->value); + } + + static bool hasReachable(Expression* tree, Name target) { + if (!target.is()) return false; + BranchSeeker seeker(target); + seeker.named = false; + seeker.walk(tree); + return seeker.found > 0; + } + + static Index countReachable(Expression* tree, Name target) { + if (!target.is()) return 0; + BranchSeeker seeker(target); + seeker.named = false; + seeker.walk(tree); + return seeker.found; + } + + static bool hasNamed(Expression* tree, Name target) { + if (!target.is()) return false; + BranchSeeker seeker(target); + seeker.walk(tree); + return seeker.found > 0; + } + + static Index countNamed(Expression* tree, Name target) { + if (!target.is()) return 0; + BranchSeeker seeker(target); + seeker.walk(tree); + return seeker.found; + } +}; + +} // namespace BranchUtils + +} // namespace wasm + +#endif // wasm_ir_branch_h + diff --git a/src/binaryen/src/ir/cost.h b/src/binaryen/src/ir/cost.h new file mode 100644 index 0000000000..9a97574f42 --- /dev/null +++ b/src/binaryen/src/ir/cost.h @@ -0,0 +1,255 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_cost_h +#define wasm_ir_cost_h + +namespace wasm { + +// Measure the execution cost of an AST. Very handwave-ey + +struct CostAnalyzer : public Visitor { + CostAnalyzer(Expression *ast) { + assert(ast); + cost = visit(ast); + } + + Index cost; + + Index maybeVisit(Expression* curr) { + return curr ? visit(curr) : 0; + } + + Index visitBlock(Block *curr) { + Index ret = 0; + for (auto* child : curr->list) ret += visit(child); + return ret; + } + Index visitIf(If *curr) { + return 1 + visit(curr->condition) + std::max(visit(curr->ifTrue), maybeVisit(curr->ifFalse)); + } + Index visitLoop(Loop *curr) { + return 5 * visit(curr->body); + } + Index visitBreak(Break *curr) { + return 1 + maybeVisit(curr->value) + maybeVisit(curr->condition); + } + Index visitSwitch(Switch *curr) { + return 2 + visit(curr->condition) + maybeVisit(curr->value); + } + Index visitCall(Call *curr) { + Index ret = 4; + for (auto* child : curr->operands) ret += visit(child); + return ret; + } + Index visitCallImport(CallImport *curr) { + Index ret = 15; + for (auto* child : curr->operands) ret += visit(child); + return ret; + } + Index visitCallIndirect(CallIndirect *curr) { + Index ret = 6 + visit(curr->target); + for (auto* child : curr->operands) ret += visit(child); + return ret; + } + Index visitGetLocal(GetLocal *curr) { + return 0; + } + Index visitSetLocal(SetLocal *curr) { + return 1; + } + Index visitGetGlobal(GetGlobal *curr) { + return 1; + } + Index visitSetGlobal(SetGlobal *curr) { + return 2; + } + Index visitLoad(Load *curr) { + return 1 + visit(curr->ptr) + 10 * curr->isAtomic; + } + Index visitStore(Store *curr) { + return 2 + visit(curr->ptr) + visit(curr->value) + 10 * curr->isAtomic; + } + Index visitAtomicRMW(AtomicRMW *curr) { + return 100; + } + Index visitAtomicCmpxchg(AtomicCmpxchg* curr) { + return 100; + } + Index visitConst(Const *curr) { + return 1; + } + Index visitUnary(Unary *curr) { + Index ret = 0; + switch (curr->op) { + case ClzInt32: + case CtzInt32: + case PopcntInt32: + case NegFloat32: + case AbsFloat32: + case CeilFloat32: + case FloorFloat32: + case TruncFloat32: + case NearestFloat32: + case ClzInt64: + case CtzInt64: + case PopcntInt64: + case NegFloat64: + case AbsFloat64: + case CeilFloat64: + case FloorFloat64: + case TruncFloat64: + case NearestFloat64: + case EqZInt32: + case EqZInt64: + case ExtendSInt32: + case ExtendUInt32: + case WrapInt64: + case PromoteFloat32: + case DemoteFloat64: + case TruncSFloat32ToInt32: + case TruncUFloat32ToInt32: + case TruncSFloat64ToInt32: + case TruncUFloat64ToInt32: + case ReinterpretFloat32: + case TruncSFloat32ToInt64: + case TruncUFloat32ToInt64: + case TruncSFloat64ToInt64: + case TruncUFloat64ToInt64: + case ReinterpretFloat64: + case ReinterpretInt32: + case ConvertSInt32ToFloat32: + case ConvertUInt32ToFloat32: + case ConvertSInt64ToFloat32: + case ConvertUInt64ToFloat32: + case ReinterpretInt64: + case ConvertSInt32ToFloat64: + case ConvertUInt32ToFloat64: + case ConvertSInt64ToFloat64: + case ConvertUInt64ToFloat64: ret = 1; break; + case SqrtFloat32: + case SqrtFloat64: ret = 2; break; + default: WASM_UNREACHABLE(); + } + return ret + visit(curr->value); + } + Index visitBinary(Binary *curr) { + Index ret = 0; + switch (curr->op) { + case AddInt32: ret = 1; break; + case SubInt32: ret = 1; break; + case MulInt32: ret = 2; break; + case DivSInt32: ret = 3; break; + case DivUInt32: ret = 3; break; + case RemSInt32: ret = 3; break; + case RemUInt32: ret = 3; break; + case AndInt32: ret = 1; break; + case OrInt32: ret = 1; break; + case XorInt32: ret = 1; break; + case ShlInt32: ret = 1; break; + case ShrUInt32: ret = 1; break; + case ShrSInt32: ret = 1; break; + case RotLInt32: ret = 1; break; + case RotRInt32: ret = 1; break; + case AddInt64: ret = 1; break; + case SubInt64: ret = 1; break; + case MulInt64: ret = 2; break; + case DivSInt64: ret = 3; break; + case DivUInt64: ret = 3; break; + case RemSInt64: ret = 3; break; + case RemUInt64: ret = 3; break; + case AndInt64: ret = 1; break; + case OrInt64: ret = 1; break; + case XorInt64: ret = 1; break; + case ShlInt64: ret = 1; break; + case ShrUInt64: ret = 1; break; + case ShrSInt64: ret = 1; break; + case RotLInt64: ret = 1; break; + case RotRInt64: ret = 1; break; + case AddFloat32: ret = 1; break; + case SubFloat32: ret = 1; break; + case MulFloat32: ret = 2; break; + case DivFloat32: ret = 3; break; + case CopySignFloat32: ret = 1; break; + case MinFloat32: ret = 1; break; + case MaxFloat32: ret = 1; break; + case AddFloat64: ret = 1; break; + case SubFloat64: ret = 1; break; + case MulFloat64: ret = 2; break; + case DivFloat64: ret = 3; break; + case CopySignFloat64: ret = 1; break; + case MinFloat64: ret = 1; break; + case MaxFloat64: ret = 1; break; + case LtUInt32: ret = 1; break; + case LtSInt32: ret = 1; break; + case LeUInt32: ret = 1; break; + case LeSInt32: ret = 1; break; + case GtUInt32: ret = 1; break; + case GtSInt32: ret = 1; break; + case GeUInt32: ret = 1; break; + case GeSInt32: ret = 1; break; + case LtUInt64: ret = 1; break; + case LtSInt64: ret = 1; break; + case LeUInt64: ret = 1; break; + case LeSInt64: ret = 1; break; + case GtUInt64: ret = 1; break; + case GtSInt64: ret = 1; break; + case GeUInt64: ret = 1; break; + case GeSInt64: ret = 1; break; + case LtFloat32: ret = 1; break; + case GtFloat32: ret = 1; break; + case LeFloat32: ret = 1; break; + case GeFloat32: ret = 1; break; + case LtFloat64: ret = 1; break; + case GtFloat64: ret = 1; break; + case LeFloat64: ret = 1; break; + case GeFloat64: ret = 1; break; + case EqInt32: ret = 1; break; + case NeInt32: ret = 1; break; + case EqInt64: ret = 1; break; + case NeInt64: ret = 1; break; + case EqFloat32: ret = 1; break; + case NeFloat32: ret = 1; break; + case EqFloat64: ret = 1; break; + case NeFloat64: ret = 1; break; + default: WASM_UNREACHABLE(); + } + return ret + visit(curr->left) + visit(curr->right); + } + Index visitSelect(Select *curr) { + return 2 + visit(curr->condition) + visit(curr->ifTrue) + visit(curr->ifFalse); + } + Index visitDrop(Drop *curr) { + return visit(curr->value); + } + Index visitReturn(Return *curr) { + return maybeVisit(curr->value); + } + Index visitHost(Host *curr) { + return 100; + } + Index visitNop(Nop *curr) { + return 0; + } + Index visitUnreachable(Unreachable *curr) { + return 0; + } +}; + +} // namespace wasm + +#endif // wasm_ir_cost_h + diff --git a/src/binaryen/src/ir/count.h b/src/binaryen/src/ir/count.h new file mode 100644 index 0000000000..1fef3a870f --- /dev/null +++ b/src/binaryen/src/ir/count.h @@ -0,0 +1,50 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_count_h +#define wasm_ir_count_h + +namespace wasm { + +struct GetLocalCounter : public PostWalker { + std::vector num; + + GetLocalCounter() {} + GetLocalCounter(Function* func) { + analyze(func, func->body); + } + GetLocalCounter(Function* func, Expression* ast) { + analyze(func, ast); + } + + void analyze(Function* func) { + analyze(func, func->body); + } + void analyze(Function* func, Expression* ast) { + num.resize(func->getNumLocals()); + std::fill(num.begin(), num.end(), 0); + walk(ast); + } + + void visitGetLocal(GetLocal *curr) { + num[curr->index]++; + } +}; + +} // namespace wasm + +#endif // wasm_ir_count_h + diff --git a/src/binaryen/src/ir/effects.h b/src/binaryen/src/ir/effects.h new file mode 100644 index 0000000000..b6eafae27b --- /dev/null +++ b/src/binaryen/src/ir/effects.h @@ -0,0 +1,281 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_effects_h +#define wasm_ir_effects_h + +namespace wasm { + +// Look for side effects, including control flow +// TODO: optimize + +struct EffectAnalyzer : public PostWalker { + EffectAnalyzer(PassOptions& passOptions, Expression *ast = nullptr) { + ignoreImplicitTraps = passOptions.ignoreImplicitTraps; + debugInfo = passOptions.debugInfo; + if (ast) analyze(ast); + } + + bool ignoreImplicitTraps; + bool debugInfo; + + void analyze(Expression *ast) { + breakNames.clear(); + walk(ast); + // if we are left with breaks, they are external + if (breakNames.size() > 0) branches = true; + } + + bool branches = false; // branches out of this expression, returns, infinite loops, etc + bool calls = false; + std::set localsRead; + std::set localsWritten; + std::set globalsRead; + std::set globalsWritten; + bool readsMemory = false; + bool writesMemory = false; + bool implicitTrap = false; // a load or div/rem, which may trap. we ignore trap + // differences, so it is ok to reorder these, but we can't + // remove them, as they count as side effects, and we + // can't move them in a way that would cause other noticeable + // (global) side effects + bool isAtomic = false; // An atomic load/store/RMW/Cmpxchg or an operator that + // has a defined ordering wrt atomics (e.g. grow_memory) + + bool accessesLocal() { return localsRead.size() + localsWritten.size() > 0; } + bool accessesGlobal() { return globalsRead.size() + globalsWritten.size() > 0; } + bool accessesMemory() { return calls || readsMemory || writesMemory; } + bool hasGlobalSideEffects() { return calls || globalsWritten.size() > 0 || writesMemory || isAtomic; } + bool hasSideEffects() { return hasGlobalSideEffects() || localsWritten.size() > 0 || branches || implicitTrap; } + bool hasAnything() { return branches || calls || accessesLocal() || readsMemory || writesMemory || accessesGlobal() || implicitTrap || isAtomic; } + + // check if we break to anything external from ourselves + bool hasExternalBreakTargets() { return !breakNames.empty(); } + + // checks if these effects would invalidate another set (e.g., if we write, we invalidate someone that reads, they can't be moved past us) + bool invalidates(EffectAnalyzer& other) { + if (branches || other.branches + || ((writesMemory || calls) && other.accessesMemory()) + || (accessesMemory() && (other.writesMemory || other.calls))) { + return true; + } + // All atomics are sequentially consistent for now, and ordered wrt other + // memory references. + if ((isAtomic && other.accessesMemory()) || + (other.isAtomic && accessesMemory())) { + return true; + } + for (auto local : localsWritten) { + if (other.localsWritten.count(local) || other.localsRead.count(local)) { + return true; + } + } + for (auto local : localsRead) { + if (other.localsWritten.count(local)) return true; + } + if ((accessesGlobal() && other.calls) || (other.accessesGlobal() && calls)) { + return true; + } + for (auto global : globalsWritten) { + if (other.globalsWritten.count(global) || other.globalsRead.count(global)) { + return true; + } + } + for (auto global : globalsRead) { + if (other.globalsWritten.count(global)) return true; + } + // we are ok to reorder implicit traps, but not conditionalize them + if ((implicitTrap && other.branches) || (other.implicitTrap && branches)) { + return true; + } + // we can't reorder an implicit trap in a way that alters global state + if ((implicitTrap && other.hasGlobalSideEffects()) || (other.implicitTrap && hasGlobalSideEffects())) { + return true; + } + return false; + } + + void mergeIn(EffectAnalyzer& other) { + branches = branches || other.branches; + calls = calls || other.calls; + readsMemory = readsMemory || other.readsMemory; + writesMemory = writesMemory || other.writesMemory; + for (auto i : other.localsRead) localsRead.insert(i); + for (auto i : other.localsWritten) localsWritten.insert(i); + for (auto i : other.globalsRead) globalsRead.insert(i); + for (auto i : other.globalsWritten) globalsWritten.insert(i); + } + + // the checks above happen after the node's children were processed, in the order of execution + // we must also check for control flow that happens before the children, i.e., loops + bool checkPre(Expression* curr) { + if (curr->is()) { + branches = true; + return true; + } + return false; + } + + bool checkPost(Expression* curr) { + visit(curr); + if (curr->is()) { + branches = true; + } + return hasAnything(); + } + + std::set breakNames; + + void visitBreak(Break *curr) { + breakNames.insert(curr->name); + } + void visitSwitch(Switch *curr) { + for (auto name : curr->targets) { + breakNames.insert(name); + } + breakNames.insert(curr->default_); + } + void visitBlock(Block* curr) { + if (curr->name.is()) breakNames.erase(curr->name); // these were internal breaks + } + void visitLoop(Loop* curr) { + if (curr->name.is()) breakNames.erase(curr->name); // these were internal breaks + // if the loop is unreachable, then there is branching control flow: + // (1) if the body is unreachable because of a (return), uncaught (br) etc., then we + // already noted branching, so it is ok to mark it again (if we have *caught* + // (br)s, then they did not lead to the loop body being unreachable). + // (same logic applies to blocks) + // (2) if the loop is unreachable because it only has branches up to the loop + // top, but no way to get out, then it is an infinite loop, and we consider + // that a branching side effect (note how the same logic does not apply to + // blocks). + if (curr->type == unreachable) { + branches = true; + } + } + + void visitCall(Call *curr) { calls = true; } + void visitCallImport(CallImport *curr) { + calls = true; + if (debugInfo) { + // debugInfo call imports must be preserved very strongly, do not + // move code around them + branches = true; // ! + } + } + void visitCallIndirect(CallIndirect *curr) { calls = true; } + void visitGetLocal(GetLocal *curr) { + localsRead.insert(curr->index); + } + void visitSetLocal(SetLocal *curr) { + localsWritten.insert(curr->index); + } + void visitGetGlobal(GetGlobal *curr) { + globalsRead.insert(curr->name); + } + void visitSetGlobal(SetGlobal *curr) { + globalsWritten.insert(curr->name); + } + void visitLoad(Load *curr) { + readsMemory = true; + isAtomic |= curr->isAtomic; + if (!ignoreImplicitTraps) implicitTrap = true; + } + void visitStore(Store *curr) { + writesMemory = true; + isAtomic |= curr->isAtomic; + if (!ignoreImplicitTraps) implicitTrap = true; + } + void visitAtomicRMW(AtomicRMW* curr) { + readsMemory = true; + writesMemory = true; + isAtomic = true; + if (!ignoreImplicitTraps) implicitTrap = true; + } + void visitAtomicCmpxchg(AtomicCmpxchg* curr) { + readsMemory = true; + writesMemory = true; + isAtomic = true; + if (!ignoreImplicitTraps) implicitTrap = true; + } + void visitAtomicWait(AtomicWait* curr) { + readsMemory = true; + // AtomicWait doesn't strictly write memory, but it does modify the waiters + // list associated with the specified address, which we can think of as a + // write. + writesMemory = true; + isAtomic = true; + if (!ignoreImplicitTraps) implicitTrap = true; + } + void visitAtomicWake(AtomicWake* curr) { + // AtomicWake doesn't strictly write memory, but it does modify the waiters + // list associated with the specified address, which we can think of as a + // write. + readsMemory = true; + writesMemory = true; + isAtomic = true; + if (!ignoreImplicitTraps) implicitTrap = true; + }; + void visitUnary(Unary *curr) { + if (!ignoreImplicitTraps) { + switch (curr->op) { + case TruncSFloat32ToInt32: + case TruncSFloat32ToInt64: + case TruncUFloat32ToInt32: + case TruncUFloat32ToInt64: + case TruncSFloat64ToInt32: + case TruncSFloat64ToInt64: + case TruncUFloat64ToInt32: + case TruncUFloat64ToInt64: { + implicitTrap = true; + break; + } + default: {} + } + } + } + void visitBinary(Binary *curr) { + if (!ignoreImplicitTraps) { + switch (curr->op) { + case DivSInt32: + case DivUInt32: + case RemSInt32: + case RemUInt32: + case DivSInt64: + case DivUInt64: + case RemSInt64: + case RemUInt64: { + implicitTrap = true; + break; + } + default: {} + } + } + } + void visitReturn(Return *curr) { branches = true; } + void visitHost(Host *curr) { + calls = true; + // grow_memory modifies the set of valid addresses, and thus can be modeled as modifying memory + writesMemory = true; + // Atomics are also sequentially consistent with grow_memory. + isAtomic = true; + } + void visitUnreachable(Unreachable *curr) { branches = true; } +}; + +} // namespace wasm + +#endif // wasm_ir_effects_h diff --git a/src/binaryen/src/ir/find_all.h b/src/binaryen/src/ir/find_all.h new file mode 100644 index 0000000000..83c7516661 --- /dev/null +++ b/src/binaryen/src/ir/find_all.h @@ -0,0 +1,48 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_find_all_h +#define wasm_ir_find_all_h + +#include + +namespace wasm { + +// Find all instances of a certain node type + +template +struct FindAll { + std::vector list; + + FindAll(Expression* ast) { + struct Finder : public PostWalker> { + std::vector* list; + void visitExpression(Expression* curr) { + if (curr->is()) { + (*list).push_back(curr->cast()); + } + } + }; + Finder finder; + finder.list = &list; + finder.walk(ast); + } +}; + +} // namespace wasm + +#endif // wasm_ir_find_all_h + diff --git a/src/binaryen/src/ir/global-utils.h b/src/binaryen/src/ir/global-utils.h new file mode 100644 index 0000000000..bcf0dae72e --- /dev/null +++ b/src/binaryen/src/ir/global-utils.h @@ -0,0 +1,55 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_global_h +#define wasm_ir_global_h + +#include +#include + +#include "literal.h" +#include "wasm.h" + +namespace wasm { + +namespace GlobalUtils { + // find a global initialized to the value of an import, or null if no such global + inline Global* getGlobalInitializedToImport(Module& wasm, Name module, Name base) { + // find the import + Name imported; + for (auto& import : wasm.imports) { + if (import->module == module && import->base == base) { + imported = import->name; + break; + } + } + if (imported.isNull()) return nullptr; + // find a global inited to it + for (auto& global : wasm.globals) { + if (auto* init = global->init->dynCast()) { + if (init->name == imported) { + return global.get(); + } + } + } + return nullptr; + } +}; + +} // namespace wasm + +#endif // wasm_ir_global_h + diff --git a/src/binaryen/src/ir/hashed.h b/src/binaryen/src/ir/hashed.h new file mode 100644 index 0000000000..dc4012455d --- /dev/null +++ b/src/binaryen/src/ir/hashed.h @@ -0,0 +1,59 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _wasm_ir_hashed_h + +#include "support/hash.h" +#include "wasm.h" +#include "ir/utils.h" + +namespace wasm { + +// An expression with a cached hash value +struct HashedExpression { + Expression* expr; + size_t hash; + + HashedExpression(Expression* expr) : expr(expr) { + if (expr) { + hash = ExpressionAnalyzer::hash(expr); + } + } + + HashedExpression(const HashedExpression& other) : expr(other.expr), hash(other.hash) {} +}; + +struct ExpressionHasher { + size_t operator()(const HashedExpression value) const { + return value.hash; + } +}; + +struct ExpressionComparer { + bool operator()(const HashedExpression a, const HashedExpression b) const { + if (a.hash != b.hash) return false; + return ExpressionAnalyzer::equal(a.expr, b.expr); + } +}; + +template +class HashedExpressionMap : public std::unordered_map { +}; + +} // namespace wasm + +#endif // _wasm_ir_hashed_h + diff --git a/src/binaryen/src/ir/import-utils.h b/src/binaryen/src/ir/import-utils.h new file mode 100644 index 0000000000..f3f01c266f --- /dev/null +++ b/src/binaryen/src/ir/import-utils.h @@ -0,0 +1,41 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_import_h +#define wasm_ir_import_h + +#include "literal.h" +#include "wasm.h" + +namespace wasm { + +namespace ImportUtils { + // find an import by the module.base that is being imported. + // return the internal name + inline Import* getImport(Module& wasm, Name module, Name base) { + for (auto& import : wasm.imports) { + if (import->module == module && import->base == base) { + return import.get(); + } + } + return nullptr; + } +}; + +} // namespace wasm + +#endif // wasm_ir_import_h + diff --git a/src/binaryen/src/ir/label-utils.h b/src/binaryen/src/ir/label-utils.h new file mode 100644 index 0000000000..f4fb77697d --- /dev/null +++ b/src/binaryen/src/ir/label-utils.h @@ -0,0 +1,62 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_label_h +#define wasm_ir_label_h + +#include "wasm.h" +#include "wasm-traversal.h" + +namespace wasm { + +namespace LabelUtils { + +// Handles branch/loop labels in a function; makes it easy to add new +// ones without duplicates +class LabelManager : public PostWalker { +public: + LabelManager(Function* func) { + walkFunction(func); + } + + Name getUnique(std::string prefix) { + while (1) { + auto curr = Name(prefix + std::to_string(counter++)); + if (labels.find(curr) == labels.end()) { + labels.insert(curr); + return curr; + } + } + } + + void visitBlock(Block* curr) { + labels.insert(curr->name); + } + void visitLoop(Loop* curr) { + labels.insert(curr->name); + } + +private: + std::set labels; + size_t counter = 0; +}; + +} // namespace LabelUtils + +} // namespace wasm + +#endif // wasm_ir_label_h + diff --git a/src/binaryen/src/ir/literal-utils.h b/src/binaryen/src/ir/literal-utils.h new file mode 100644 index 0000000000..a702c52ebe --- /dev/null +++ b/src/binaryen/src/ir/literal-utils.h @@ -0,0 +1,56 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_literal_utils_h +#define wasm_ir_literal_utils_h + +#include "wasm.h" + +namespace wasm { + +namespace LiteralUtils { + +inline Literal makeLiteralFromInt32(int32_t x, WasmType type) { + switch (type) { + case i32: return Literal(int32_t(x)); break; + case i64: return Literal(int64_t(x)); break; + case f32: return Literal(float(x)); break; + case f64: return Literal(double(x)); break; + default: WASM_UNREACHABLE(); + } +} + +inline Literal makeLiteralZero(WasmType type) { + return makeLiteralFromInt32(0, type); +} + +inline Expression* makeFromInt32(int32_t x, WasmType type, Module& wasm) { + auto* ret = wasm.allocator.alloc(); + ret->value = makeLiteralFromInt32(x, type); + ret->type = type; + return ret; +} + +inline Expression* makeZero(WasmType type, Module& wasm) { + return makeFromInt32(0, type, wasm); +} + +} // namespace LiteralUtils + +} // namespace wasm + +#endif // wasm_ir_literal_utils_h + diff --git a/src/binaryen/src/ir/load-utils.h b/src/binaryen/src/ir/load-utils.h new file mode 100644 index 0000000000..45882dc6cb --- /dev/null +++ b/src/binaryen/src/ir/load-utils.h @@ -0,0 +1,45 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_load_h +#define wasm_ir_load_h + +#include "wasm.h" + +namespace wasm { + +namespace LoadUtils { + +// checks if the sign of a load matters, which is when an integer +// load is of fewer bytes than the size of the type (so we must +// fill in bits either signed or unsigned wise) +inline bool isSignRelevant(Load* load) { + auto type = load->type; + if (load->type == unreachable) return false; + return !isWasmTypeFloat(type) && load->bytes < getWasmTypeSize(type); +} + +// check if a load can be signed (which some opts want to do) +inline bool canBeSigned(Load* load) { + return !load->isAtomic; +} + +} // namespace LoadUtils + +} // namespace wasm + +#endif // wasm_ir_load_h + diff --git a/src/binaryen/src/ir/local-graph.h b/src/binaryen/src/ir/local-graph.h new file mode 100644 index 0000000000..4c4c1ee0a1 --- /dev/null +++ b/src/binaryen/src/ir/local-graph.h @@ -0,0 +1,111 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_local_graph_h +#define wasm_ir_local_graph_h + +namespace wasm { + +// +// Finds the connections between get_locals and set_locals, creating +// a graph of those ties. This is useful for "ssa-style" optimization, +// in which you want to know exactly which sets are relevant for a +// a get, so it is as if each get has just one set, logically speaking +// (see the SSA pass for actually creating new local indexes based +// on this). +// +// TODO: the algorithm here is pretty simple, but also pretty slow, +// we should optimize it. e.g. we rely on set_interaction +// here, and worse we only use it to compute the size... +struct LocalGraph : public PostWalker { + // main API + + // the constructor computes getSetses, the sets affecting each get + LocalGraph(Function* func, Module* module); + + // the set_locals relevant for an index or a get. + typedef std::set Sets; + + // externally useful information + std::map getSetses; // the sets affecting each get. a nullptr set means the initial + // value (0 for a var, the received value for a param) + std::map locations; // where each get and set is (for easy replacing) + + // optional computation: compute the influence graphs between sets and gets + // (useful for algorithms that propagate changes) + + std::unordered_map> getInfluences; // for each get, the sets whose values are influenced by that get + std::unordered_map> setInfluences; // for each set, the gets whose values are influenced by that set + + void computeInfluences(); + +private: + // we map local index => the set_locals for that index. + // a nullptr set means there is a virtual set, from a param + // initial value or the zero init initial value. + typedef std::vector Mapping; + + // internal state + Index numLocals; + Mapping currMapping; + std::vector mappingStack; // used in ifs, loops + std::map> breakMappings; // break target => infos that reach it + std::vector> loopGetStack; // stack of loops, all the gets in each, so we can update them for back branches + +public: + void doWalkFunction(Function* func); + + // control flow + + void visitBlock(Block* curr); + + void finishIf(); + + static void afterIfCondition(LocalGraph* self, Expression** currp); + static void afterIfTrue(LocalGraph* self, Expression** currp); + static void afterIfFalse(LocalGraph* self, Expression** currp); + static void beforeLoop(LocalGraph* self, Expression** currp); + void visitLoop(Loop* curr); + void visitBreak(Break* curr); + void visitSwitch(Switch* curr); + void visitReturn(Return *curr); + void visitUnreachable(Unreachable *curr); + + // local usage + + void visitGetLocal(GetLocal* curr); + void visitSetLocal(SetLocal* curr); + + // traversal + + static void scan(LocalGraph* self, Expression** currp); + + // helpers + + void setUnreachable(Mapping& mapping); + + bool isUnreachable(Mapping& mapping); + + // merges a bunch of infos into one. + // if we need phis, writes them into the provided vector. the caller should + // ensure those are placed in the right location + Mapping& merge(std::vector& mappings); +}; + +} // namespace wasm + +#endif // wasm_ir_local_graph_h + diff --git a/src/binaryen/src/ir/localize.h b/src/binaryen/src/ir/localize.h new file mode 100644 index 0000000000..c910d9f9ba --- /dev/null +++ b/src/binaryen/src/ir/localize.h @@ -0,0 +1,47 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_localizer_h +#define wasm_ir_localizer_h + +#include + +namespace wasm { + +// Make an expression available in a local. If already in one, just +// use that local, otherwise use a new local + +struct Localizer { + Index index; + Expression* expr; + + Localizer(Expression* input, Function* func, Module* wasm) { + expr = input; + if (auto* get = expr->dynCast()) { + index = get->index; + } else if (auto* set = expr->dynCast()) { + index = set->index; + } else { + index = Builder::addVar(func, expr->type); + expr = Builder(*wasm).makeTeeLocal(index, expr); + } + } +}; + +} // namespace wasm + +#endif // wasm_ir_localizer_h + diff --git a/src/binaryen/src/ir/manipulation.h b/src/binaryen/src/ir/manipulation.h new file mode 100644 index 0000000000..57188ad684 --- /dev/null +++ b/src/binaryen/src/ir/manipulation.h @@ -0,0 +1,69 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_manipulation_h +#define wasm_ir_manipulation_h + +#include "wasm.h" + +namespace wasm { + +namespace ExpressionManipulator { + // Re-use a node's memory. This helps avoid allocation when optimizing. + template + inline OutputType* convert(InputType *input) { + static_assert(sizeof(OutputType) <= sizeof(InputType), + "Can only convert to a smaller size Expression node"); + input->~InputType(); // arena-allocaed, so no destructor, but avoid UB. + OutputType* output = (OutputType*)(input); + new (output) OutputType; + return output; + } + + // Convenience method for nop, which is a common conversion + template + inline Nop* nop(InputType* target) { + return convert(target); + } + + // Convert a node that allocates + template + inline OutputType* convert(InputType *input, MixedArena& allocator) { + assert(sizeof(OutputType) <= sizeof(InputType)); + input->~InputType(); // arena-allocaed, so no destructor, but avoid UB. + OutputType* output = (OutputType*)(input); + new (output) OutputType(allocator); + return output; + } + + using CustomCopier = std::function; + Expression* flexibleCopy(Expression* original, Module& wasm, CustomCopier custom); + + inline Expression* copy(Expression* original, Module& wasm) { + auto copy = [](Expression* curr) { + return nullptr; + }; + return flexibleCopy(original, wasm, copy); + } + + // Splice an item into the middle of a block's list + void spliceIntoBlock(Block* block, Index index, Expression* add); +} + +} // wasm + +#endif // wams_ir_manipulation_h + diff --git a/src/binaryen/src/ir/memory-utils.h b/src/binaryen/src/ir/memory-utils.h new file mode 100644 index 0000000000..920583f7d9 --- /dev/null +++ b/src/binaryen/src/ir/memory-utils.h @@ -0,0 +1,56 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_memory_h +#define wasm_ir_memory_h + +#include +#include + +#include "literal.h" +#include "wasm.h" + +namespace wasm { + +namespace MemoryUtils { + // flattens memory into a single data segment. returns true if successful + inline bool flatten(Memory& memory) { + if (memory.segments.size() == 0) return true; + std::vector data; + for (auto& segment : memory.segments) { + auto* offset = segment.offset->dynCast(); + if (!offset) return false; + } + for (auto& segment : memory.segments) { + auto* offset = segment.offset->dynCast(); + auto start = offset->value.getInteger(); + auto end = start + segment.data.size(); + if (end > data.size()) { + data.resize(end); + } + std::copy(segment.data.begin(), segment.data.end(), data.begin() + start); + } + memory.segments.resize(1); + memory.segments[0].offset->cast()->value = Literal(int32_t(0)); + memory.segments[0].data.swap(data); + return true; + } +}; + +} // namespace wasm + +#endif // wasm_ir_memory_h + diff --git a/src/binaryen/src/ir/module-utils.h b/src/binaryen/src/ir/module-utils.h new file mode 100644 index 0000000000..0c828f83ad --- /dev/null +++ b/src/binaryen/src/ir/module-utils.h @@ -0,0 +1,59 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_module_h +#define wasm_ir_module_h + +#include "wasm.h" + +namespace wasm { + +namespace ModuleUtils { + +// Computes the indexes in a wasm binary, i.e., with function imports +// and function implementations sharing a single index space, etc. +struct BinaryIndexes { + std::unordered_map functionIndexes; + std::unordered_map globalIndexes; + + BinaryIndexes(Module& wasm) { + for (Index i = 0; i < wasm.imports.size(); i++) { + auto& import = wasm.imports[i]; + if (import->kind == ExternalKind::Function) { + auto index = functionIndexes.size(); + functionIndexes[import->name] = index; + } else if (import->kind == ExternalKind::Global) { + auto index = globalIndexes.size(); + globalIndexes[import->name] = index; + } + } + for (Index i = 0; i < wasm.functions.size(); i++) { + auto index = functionIndexes.size(); + functionIndexes[wasm.functions[i]->name] = index; + } + for (Index i = 0; i < wasm.globals.size(); i++) { + auto index = globalIndexes.size(); + globalIndexes[wasm.globals[i]->name] = index; + } + } +}; + +} // namespace ModuleUtils + +} // namespace wasm + +#endif // wasm_ir_module_h + diff --git a/src/binaryen/src/ir/names.h b/src/binaryen/src/ir/names.h new file mode 100644 index 0000000000..a589571bf5 --- /dev/null +++ b/src/binaryen/src/ir/names.h @@ -0,0 +1,53 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_names_h +#define wasm_ir_names_h + +#include "wasm.h" + +namespace wasm { + +namespace Names { + +// Add explicit names for function locals not yet named, and do not +// modify existing names +inline void ensureNames(Function* func) { + std::unordered_set seen; + for (auto& pair : func->localNames) { + seen.insert(pair.second); + } + Index nameIndex = seen.size(); + for (Index i = 0; i < func->getNumLocals(); i++) { + if (!func->hasLocalName(i)) { + while (1) { + auto name = Name::fromInt(nameIndex++); + if (seen.count(name) == 0) { + func->localNames[i] = name; + func->localIndices[name] = i; + seen.insert(name); + break; + } + } + } + } +} + +} // namespace Names + +} // namespace wasm + +#endif // wasm_ir_names_h diff --git a/src/binaryen/src/ir/properties.h b/src/binaryen/src/ir/properties.h new file mode 100644 index 0000000000..cf481218c0 --- /dev/null +++ b/src/binaryen/src/ir/properties.h @@ -0,0 +1,141 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_properties_h +#define wasm_ir_properties_h + +#include "wasm.h" +#include "ir/bits.h" + +namespace wasm { + +struct Properties { + static bool emitsBoolean(Expression* curr) { + if (auto* unary = curr->dynCast()) { + return unary->isRelational(); + } else if (auto* binary = curr->dynCast()) { + return binary->isRelational(); + } + return false; + } + + static bool isSymmetric(Binary* binary) { + switch (binary->op) { + case AddInt32: + case MulInt32: + case AndInt32: + case OrInt32: + case XorInt32: + case EqInt32: + case NeInt32: + + case AddInt64: + case MulInt64: + case AndInt64: + case OrInt64: + case XorInt64: + case EqInt64: + case NeInt64: return true; + + default: return false; + } + } + + // Check if an expression is a sign-extend, and if so, returns the value + // that is extended, otherwise nullptr + static Expression* getSignExtValue(Expression* curr) { + if (auto* outer = curr->dynCast()) { + if (outer->op == ShrSInt32) { + if (auto* outerConst = outer->right->dynCast()) { + if (outerConst->value.geti32() != 0) { + if (auto* inner = outer->left->dynCast()) { + if (inner->op == ShlInt32) { + if (auto* innerConst = inner->right->dynCast()) { + if (outerConst->value == innerConst->value) { + return inner->left; + } + } + } + } + } + } + } + } + return nullptr; + } + + // gets the size of the sign-extended value + static Index getSignExtBits(Expression* curr) { + return 32 - Bits::getEffectiveShifts(curr->cast()->right); + } + + // Check if an expression is almost a sign-extend: perhaps the inner shift + // is too large. We can split the shifts in that case, which is sometimes + // useful (e.g. if we can remove the signext) + static Expression* getAlmostSignExt(Expression* curr) { + if (auto* outer = curr->dynCast()) { + if (outer->op == ShrSInt32) { + if (auto* outerConst = outer->right->dynCast()) { + if (outerConst->value.geti32() != 0) { + if (auto* inner = outer->left->dynCast()) { + if (inner->op == ShlInt32) { + if (auto* innerConst = inner->right->dynCast()) { + if (Bits::getEffectiveShifts(outerConst) <= Bits::getEffectiveShifts(innerConst)) { + return inner->left; + } + } + } + } + } + } + } + } + return nullptr; + } + + // gets the size of the almost sign-extended value, as well as the + // extra shifts, if any + static Index getAlmostSignExtBits(Expression* curr, Index& extraShifts) { + extraShifts = Bits::getEffectiveShifts(curr->cast()->left->cast()->right) - + Bits::getEffectiveShifts(curr->cast()->right); + return getSignExtBits(curr); + } + + // Check if an expression is a zero-extend, and if so, returns the value + // that is extended, otherwise nullptr + static Expression* getZeroExtValue(Expression* curr) { + if (auto* binary = curr->dynCast()) { + if (binary->op == AndInt32) { + if (auto* c = binary->right->dynCast()) { + if (Bits::getMaskedBits(c->value.geti32())) { + return binary->right; + } + } + } + } + return nullptr; + } + + // gets the size of the sign-extended value + static Index getZeroExtBits(Expression* curr) { + return Bits::getMaskedBits(curr->cast()->right->cast()->value.geti32()); + } +}; + +} // wasm + +#endif // wams_ir_properties_h + diff --git a/src/binaryen/src/ir/trapping.h b/src/binaryen/src/ir/trapping.h new file mode 100644 index 0000000000..a3a87f8efb --- /dev/null +++ b/src/binaryen/src/ir/trapping.h @@ -0,0 +1,120 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_trapping_h +#define wasm_ir_trapping_h + +#include + +#include "pass.h" + +namespace wasm { + +enum class TrapMode { + Allow, + Clamp, + JS +}; + +inline void addTrapModePass(PassRunner& runner, TrapMode trapMode) { + if (trapMode == TrapMode::Clamp) { + runner.add("trap-mode-clamp"); + } else if (trapMode == TrapMode::JS) { + runner.add("trap-mode-js"); + } +} + +class TrappingFunctionContainer { +public: + TrappingFunctionContainer(TrapMode mode, Module &wasm, bool immediate = false) + : mode(mode), + wasm(wasm), + immediate(immediate) { } + + bool hasFunction(Name name) { + return functions.find(name) != functions.end(); + } + bool hasImport(Name name) { + return imports.find(name) != imports.end(); + } + + void addFunction(Function* function) { + functions[function->name] = function; + if (immediate) { + wasm.addFunction(function); + } + } + void addImport(Import* import) { + imports[import->name] = import; + if (immediate) { + wasm.addImport(import); + } + } + + void addToModule() { + if (!immediate) { + for (auto &pair : functions) { + wasm.addFunction(pair.second); + } + for (auto &pair : imports) { + wasm.addImport(pair.second); + } + } + functions.clear(); + imports.clear(); + } + + TrapMode getMode() { + return mode; + } + + Module& getModule() { + return wasm; + } + + std::map& getFunctions() { + return functions; + } + +private: + std::map functions; + std::map imports; + + TrapMode mode; + Module& wasm; + bool immediate; +}; + +Expression* makeTrappingBinary(Binary* curr, TrappingFunctionContainer &trappingFunctions); +Expression* makeTrappingUnary(Unary* curr, TrappingFunctionContainer &trappingFunctions); + +inline TrapMode trapModeFromString(std::string const& str) { + if (str == "allow") { + return TrapMode::Allow; + } else if (str == "clamp") { + return TrapMode::Clamp; + } else if (str == "js") { + return TrapMode::JS; + } else { + throw std::invalid_argument( + "Unsupported trap mode \"" + str + "\". " + "Valid modes are \"allow\", \"js\", and \"clamp\""); + } +} + +} // wasm + +#endif // wasm_ir_trapping_h diff --git a/src/binaryen/src/ir/type-updating.h b/src/binaryen/src/ir/type-updating.h new file mode 100644 index 0000000000..79b26aa433 --- /dev/null +++ b/src/binaryen/src/ir/type-updating.h @@ -0,0 +1,286 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_type_updating_h +#define wasm_ir_type_updating_h + +#include "wasm-traversal.h" + +namespace wasm { + +// a class that tracks type dependencies between nodes, letting you +// update types efficiently when removing and altering code. +// altering code can alter types in the following way: +// * removing a break can make a block unreachable, if nothing else +// reaches it +// * altering the type of a child to unreachable can make the parent +// unreachable +struct TypeUpdater : public ExpressionStackWalker> { + // Part 1: Scanning + + // track names to their blocks, so that when we remove a break to + // a block, we know how to find it if we need to update it + struct BlockInfo { + Block* block = nullptr; + int numBreaks = 0; + }; + std::map blockInfos; + + // track the parent of each node, as child type changes may lead to + // unreachability + std::map parents; + + void visitExpression(Expression* curr) { + if (expressionStack.size() > 1) { + parents[curr] = expressionStack[expressionStack.size() - 2]; + } else { + parents[curr] = nullptr; // this is the top level + } + // discover block/break relationships + if (auto* block = curr->dynCast()) { + if (block->name.is()) { + blockInfos[block->name].block = block; + } + } else if (auto* br = curr->dynCast()) { + // ensure info exists, discoverBreaks can then fill it + blockInfos[br->name]; + } else if (auto* sw = curr->dynCast()) { + // ensure info exists, discoverBreaks can then fill it + for (auto target : sw->targets) { + blockInfos[target]; + } + blockInfos[sw->default_]; + } + // add a break to the info, for break and switch + discoverBreaks(curr, +1); + } + + // Part 2: Updating + + // Node replacements, additions, removals and type changes should be noted. An + // exception is nodes you know will never be looked at again. + + // note the replacement of one node with another. this should be called + // after performing the replacement. + // this does *not* look into the node by default. see noteReplacementWithRecursiveRemoval + // (we don't support recursive addition because in practice we do not create + // new trees in the passes that use this, they just move around children) + void noteReplacement(Expression* from, Expression* to, bool recursivelyRemove=false) { + auto parent = parents[from]; + if (recursivelyRemove) { + noteRecursiveRemoval(from); + } else { + noteRemoval(from); + } + // if we are replacing with a child, i.e. a node that was already present + // in the ast, then we just have a type and parent to update + if (parents.find(to) != parents.end()) { + parents[to] = parent; + if (from->type != to->type) { + propagateTypesUp(to); + } + } else { + noteAddition(to, parent, from); + } + } + + void noteReplacementWithRecursiveRemoval(Expression* from, Expression* to) { + noteReplacement(from, to, true); + } + + // note the removal of a node + void noteRemoval(Expression* curr) { + noteRemovalOrAddition(curr, nullptr); + parents.erase(curr); + } + + // note the removal of a node and all its children + void noteRecursiveRemoval(Expression* curr) { + struct Recurser : public PostWalker> { + TypeUpdater& parent; + + Recurser(TypeUpdater& parent, Expression* root) : parent(parent) { + walk(root); + } + + void visitExpression(Expression* curr) { + parent.noteRemoval(curr); + } + }; + + Recurser(*this, curr); + } + + void noteAddition(Expression* curr, Expression* parent, Expression* previous = nullptr) { + assert(parents.find(curr) == parents.end()); // must not already exist + noteRemovalOrAddition(curr, parent); + // if we didn't replace with the exact same type, propagate types up + if (!(previous && previous->type == curr->type)) { + propagateTypesUp(curr); + } + } + + // if parent is nullptr, this is a removal + void noteRemovalOrAddition(Expression* curr, Expression* parent) { + parents[curr] = parent; + discoverBreaks(curr, parent ? +1 : -1); + } + + // adds (or removes) breaks depending on break/switch contents + void discoverBreaks(Expression* curr, int change) { + if (auto* br = curr->dynCast()) { + noteBreakChange(br->name, change, br->value); + } else if (auto* sw = curr->dynCast()) { + applySwitchChanges(sw, change); + } + } + + void applySwitchChanges(Switch* sw, int change) { + std::set seen; + for (auto target : sw->targets) { + if (seen.insert(target).second) { + noteBreakChange(target, change, sw->value); + } + } + if (seen.insert(sw->default_).second) { + noteBreakChange(sw->default_, change, sw->value); + } + } + + // note the addition of a node + void noteBreakChange(Name name, int change, Expression* value) { + auto iter = blockInfos.find(name); + if (iter == blockInfos.end()) { + return; // we can ignore breaks to loops + } + auto& info = iter->second; + info.numBreaks += change; + assert(info.numBreaks >= 0); + auto* block = info.block; + if (block) { // if to a loop, can ignore + if (info.numBreaks == 0) { + // dropped to 0! the block may now be unreachable. that + // requires that it doesn't have a fallthrough + makeBlockUnreachableIfNoFallThrough(block); + } else if (change == 1 && info.numBreaks == 1) { + // bumped to 1! the block may now be reachable + if (block->type != unreachable) { + return; // was already reachable, had a fallthrough + } + changeTypeTo(block, value ? value->type : none); + } + } + } + + // alters the type of a node to a new type. + // this propagates the type change through all the parents. + void changeTypeTo(Expression* curr, WasmType newType) { + if (curr->type == newType) return; // nothing to do + curr->type = newType; + propagateTypesUp(curr); + } + + // given a node that has a new type, or is a new node, update + // all the parents accordingly. the existence of the node and + // any changes to it already occurred, this just updates the + // parents following that. i.e., nothing is done to the + // node we start on, it's done. + // the one thing we need to do here is propagate unreachability, + // no other change is possible + void propagateTypesUp(Expression* curr) { + if (curr->type != unreachable) return; + while (1) { + auto* child = curr; + curr = parents[child]; + if (!curr) return; + // get ready to apply unreachability to this node + if (curr->type == unreachable) { + return; // already unreachable, stop here + } + // most nodes become unreachable if a child is unreachable, + // but exceptions exist + if (auto* block = curr->dynCast()) { + // if the block has a fallthrough, it can keep its type + if (isConcreteWasmType(block->list.back()->type)) { + return; // did not turn + } + // if the block has breaks, it can keep its type + if (!block->name.is() || blockInfos[block->name].numBreaks == 0) { + curr->type = unreachable; + } else { + return; // did not turn + } + } else if (auto* iff = curr->dynCast()) { + // may not be unreachable if just one side is + iff->finalize(); + if (curr->type != unreachable) { + return; // did not turn + } + } else { + curr->type = unreachable; + } + } + } + + // efficiently update the type of a block, given the data we know. this + // can remove a concrete type and turn the block unreachable when it is + // unreachable, and it does this efficiently, without scanning the full + // contents + void maybeUpdateTypeToUnreachable(Block* curr) { + if (!isConcreteWasmType(curr->type)) { + return; // nothing concrete to change to unreachable + } + if (curr->name.is() && blockInfos[curr->name].numBreaks > 0) { + return; // has a break, not unreachable + } + // look for a fallthrough + makeBlockUnreachableIfNoFallThrough(curr); + } + + void makeBlockUnreachableIfNoFallThrough(Block* curr) { + if (curr->type == unreachable) { + return; // no change possible + } + if (!curr->list.empty() && + isConcreteWasmType(curr->list.back()->type)) { + return; // should keep type due to fallthrough, even if has an unreachable child + } + for (auto* child : curr->list) { + if (child->type == unreachable) { + // no fallthrough, and an unreachable, => this block is now unreachable + changeTypeTo(curr, unreachable); + return; + } + } + } + + // efficiently update the type of an if, given the data we know. this + // can remove a concrete type and turn the if unreachable when it is + // unreachable + void maybeUpdateTypeToUnreachable(If* curr) { + if (!isConcreteWasmType(curr->type)) { + return; // nothing concrete to change to unreachable + } + curr->finalize(); + if (curr->type == unreachable) { + propagateTypesUp(curr); + } + } +}; + +} // namespace wasm + +#endif // wasm_ir_type_updating_h diff --git a/src/binaryen/src/ir/utils.h b/src/binaryen/src/ir/utils.h new file mode 100644 index 0000000000..786e04e451 --- /dev/null +++ b/src/binaryen/src/ir/utils.h @@ -0,0 +1,360 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_ir_utils_h +#define wasm_ir_utils_h + +#include "wasm.h" +#include "wasm-traversal.h" +#include "wasm-builder.h" +#include "pass.h" +#include "ir/branch-utils.h" + +namespace wasm { + +// Measure the size of an AST + +struct Measurer : public PostWalker> { + Index size = 0; + + void visitExpression(Expression* curr) { + size++; + } + + static Index measure(Expression* tree) { + Measurer measurer; + measurer.walk(tree); + return measurer.size; + } +}; + +struct ExpressionAnalyzer { + // Given a stack of expressions, checks if the topmost is used as a result. + // For example, if the parent is a block and the node is before the last position, + // it is not used. + static bool isResultUsed(std::vector stack, Function* func); + + // Checks if a value is dropped. + static bool isResultDropped(std::vector stack); + + // Checks if a break is a simple - no condition, no value, just a plain branching + static bool isSimple(Break* curr) { + return !curr->condition && !curr->value; + } + + using ExprComparer = std::function; + static bool flexibleEqual(Expression* left, Expression* right, ExprComparer comparer); + + static bool equal(Expression* left, Expression* right) { + auto comparer = [](Expression* left, Expression* right) { + return false; + }; + return flexibleEqual(left, right, comparer); + } + + // hash an expression, ignoring superficial details like specific internal names + static uint32_t hash(Expression* curr); +}; + +// Re-Finalizes all node types +// This removes "unnecessary' block/if/loop types, i.e., that are added +// specifically, as in +// (block (result i32) (unreachable)) +// vs +// (block (unreachable)) +// This converts to the latter form. +struct ReFinalize : public WalkerPass>> { + bool isFunctionParallel() override { return true; } + + Pass* create() override { return new ReFinalize; } + + ReFinalize() { name = "refinalize"; } + + // block finalization is O(bad) if we do each block by itself, so do it in bulk, + // tracking break value types so we just do a linear pass + + std::map breakValues; + + void visitBlock(Block *curr) { + if (curr->list.size() == 0) { + curr->type = none; + return; + } + // do this quickly, without any validation + auto old = curr->type; + // last element determines type + curr->type = curr->list.back()->type; + // if concrete, it doesn't matter if we have an unreachable child, and we + // don't need to look at breaks + if (isConcreteWasmType(curr->type)) return; + // otherwise, we have no final fallthrough element to determine the type, + // could be determined by breaks + if (curr->name.is()) { + auto iter = breakValues.find(curr->name); + if (iter != breakValues.end()) { + // there is a break to here + auto type = iter->second; + if (type == unreachable) { + // all we have are breaks with values of type unreachable, and no + // concrete fallthrough either. we must have had an existing type, then + curr->type = old; + assert(isConcreteWasmType(curr->type)); + } else { + curr->type = type; + } + return; + } + } + if (curr->type == unreachable) return; + // type is none, but we might be unreachable + if (curr->type == none) { + for (auto* child : curr->list) { + if (child->type == unreachable) { + curr->type = unreachable; + break; + } + } + } + } + void visitIf(If *curr) { curr->finalize(); } + void visitLoop(Loop *curr) { curr->finalize(); } + void visitBreak(Break *curr) { + curr->finalize(); + updateBreakValueType(curr->name, getValueType(curr->value)); + } + void visitSwitch(Switch *curr) { + curr->finalize(); + auto valueType = getValueType(curr->value); + for (auto target : curr->targets) { + updateBreakValueType(target, valueType); + } + updateBreakValueType(curr->default_, valueType); + } + void visitCall(Call *curr) { curr->finalize(); } + void visitCallImport(CallImport *curr) { curr->finalize(); } + void visitCallIndirect(CallIndirect *curr) { curr->finalize(); } + void visitGetLocal(GetLocal *curr) { curr->finalize(); } + void visitSetLocal(SetLocal *curr) { curr->finalize(); } + void visitGetGlobal(GetGlobal *curr) { curr->finalize(); } + void visitSetGlobal(SetGlobal *curr) { curr->finalize(); } + void visitLoad(Load *curr) { curr->finalize(); } + void visitStore(Store *curr) { curr->finalize(); } + void visitAtomicRMW(AtomicRMW *curr) { curr->finalize(); } + void visitAtomicCmpxchg(AtomicCmpxchg *curr) { curr->finalize(); } + void visitAtomicWait(AtomicWait* curr) { curr->finalize(); } + void visitAtomicWake(AtomicWake* curr) { curr->finalize(); } + void visitConst(Const *curr) { curr->finalize(); } + void visitUnary(Unary *curr) { curr->finalize(); } + void visitBinary(Binary *curr) { curr->finalize(); } + void visitSelect(Select *curr) { curr->finalize(); } + void visitDrop(Drop *curr) { curr->finalize(); } + void visitReturn(Return *curr) { curr->finalize(); } + void visitHost(Host *curr) { curr->finalize(); } + void visitNop(Nop *curr) { curr->finalize(); } + void visitUnreachable(Unreachable *curr) { curr->finalize(); } + + void visitFunction(Function* curr) { + // we may have changed the body from unreachable to none, which might be bad + // if the function has a return value + if (curr->result != none && curr->body->type == none) { + Builder builder(*getModule()); + curr->body = builder.blockify(curr->body, builder.makeUnreachable()); + } + } + + void visitFunctionType(FunctionType* curr) { WASM_UNREACHABLE(); } + void visitImport(Import* curr) { WASM_UNREACHABLE(); } + void visitExport(Export* curr) { WASM_UNREACHABLE(); } + void visitGlobal(Global* curr) { WASM_UNREACHABLE(); } + void visitTable(Table* curr) { WASM_UNREACHABLE(); } + void visitMemory(Memory* curr) { WASM_UNREACHABLE(); } + void visitModule(Module* curr) { WASM_UNREACHABLE(); } + + WasmType getValueType(Expression* value) { + return value ? value->type : none; + } + + void updateBreakValueType(Name name, WasmType type) { + if (type != unreachable || breakValues.count(name) == 0) { + breakValues[name] = type; + } + } +}; + +// Re-finalize a single node. This is slow, if you want to refinalize +// an entire ast, use ReFinalize +struct ReFinalizeNode : public OverriddenVisitor { + void visitBlock(Block *curr) { curr->finalize(); } + void visitIf(If *curr) { curr->finalize(); } + void visitLoop(Loop *curr) { curr->finalize(); } + void visitBreak(Break *curr) { curr->finalize(); } + void visitSwitch(Switch *curr) { curr->finalize(); } + void visitCall(Call *curr) { curr->finalize(); } + void visitCallImport(CallImport *curr) { curr->finalize(); } + void visitCallIndirect(CallIndirect *curr) { curr->finalize(); } + void visitGetLocal(GetLocal *curr) { curr->finalize(); } + void visitSetLocal(SetLocal *curr) { curr->finalize(); } + void visitGetGlobal(GetGlobal *curr) { curr->finalize(); } + void visitSetGlobal(SetGlobal *curr) { curr->finalize(); } + void visitLoad(Load *curr) { curr->finalize(); } + void visitStore(Store *curr) { curr->finalize(); } + void visitAtomicRMW(AtomicRMW* curr) { curr->finalize(); } + void visitAtomicCmpxchg(AtomicCmpxchg* curr) { curr->finalize(); } + void visitAtomicWait(AtomicWait* curr) { curr->finalize(); } + void visitAtomicWake(AtomicWake* curr) { curr->finalize(); } + void visitConst(Const *curr) { curr->finalize(); } + void visitUnary(Unary *curr) { curr->finalize(); } + void visitBinary(Binary *curr) { curr->finalize(); } + void visitSelect(Select *curr) { curr->finalize(); } + void visitDrop(Drop *curr) { curr->finalize(); } + void visitReturn(Return *curr) { curr->finalize(); } + void visitHost(Host *curr) { curr->finalize(); } + void visitNop(Nop *curr) { curr->finalize(); } + void visitUnreachable(Unreachable *curr) { curr->finalize(); } + + void visitFunctionType(FunctionType* curr) { WASM_UNREACHABLE(); } + void visitImport(Import* curr) { WASM_UNREACHABLE(); } + void visitExport(Export* curr) { WASM_UNREACHABLE(); } + void visitGlobal(Global* curr) { WASM_UNREACHABLE(); } + void visitTable(Table* curr) { WASM_UNREACHABLE(); } + void visitMemory(Memory* curr) { WASM_UNREACHABLE(); } + void visitModule(Module* curr) { WASM_UNREACHABLE(); } + + // given a stack of nested expressions, update them all from child to parent + static void updateStack(std::vector& expressionStack) { + for (int i = int(expressionStack.size()) - 1; i >= 0; i--) { + auto* curr = expressionStack[i]; + ReFinalizeNode().visit(curr); + } + } +}; + +// Adds drop() operations where necessary. This lets you not worry about adding drop when +// generating code. +// This also refinalizes before and after, as dropping can change types, and depends +// on types being cleaned up - no unnecessary block/if/loop types (see refinalize) +// TODO: optimize that, interleave them +struct AutoDrop : public WalkerPass> { + bool isFunctionParallel() override { return true; } + + Pass* create() override { return new AutoDrop; } + + AutoDrop() { name = "autodrop"; } + + bool maybeDrop(Expression*& child) { + bool acted = false; + if (isConcreteWasmType(child->type)) { + expressionStack.push_back(child); + if (!ExpressionAnalyzer::isResultUsed(expressionStack, getFunction()) && !ExpressionAnalyzer::isResultDropped(expressionStack)) { + child = Builder(*getModule()).makeDrop(child); + acted = true; + } + expressionStack.pop_back(); + } + return acted; + } + + void reFinalize() { + ReFinalizeNode::updateStack(expressionStack); + } + + void visitBlock(Block* curr) { + if (curr->list.size() == 0) return; + for (Index i = 0; i < curr->list.size() - 1; i++) { + auto* child = curr->list[i]; + if (isConcreteWasmType(child->type)) { + curr->list[i] = Builder(*getModule()).makeDrop(child); + } + } + if (maybeDrop(curr->list.back())) { + reFinalize(); + assert(curr->type == none || curr->type == unreachable); + } + } + + void visitIf(If* curr) { + bool acted = false; + if (maybeDrop(curr->ifTrue)) acted = true; + if (curr->ifFalse) { + if (maybeDrop(curr->ifFalse)) acted = true; + } + if (acted) { + reFinalize(); + assert(curr->type == none); + } + } + + void doWalkFunction(Function* curr) { + ReFinalize().walkFunctionInModule(curr, getModule()); + walk(curr->body); + if (curr->result == none && isConcreteWasmType(curr->body->type)) { + curr->body = Builder(*getModule()).makeDrop(curr->body); + } + ReFinalize().walkFunctionInModule(curr, getModule()); + } +}; + +struct I64Utilities { + static Expression* recreateI64(Builder& builder, Expression* low, Expression* high) { + return + builder.makeBinary( + OrInt64, + builder.makeUnary( + ExtendUInt32, + low + ), + builder.makeBinary( + ShlInt64, + builder.makeUnary( + ExtendUInt32, + high + ), + builder.makeConst(Literal(int64_t(32))) + ) + ) + ; + }; + + static Expression* recreateI64(Builder& builder, Index low, Index high) { + return recreateI64(builder, builder.makeGetLocal(low, i32), builder.makeGetLocal(high, i32)); + }; + + static Expression* getI64High(Builder& builder, Index index) { + return + builder.makeUnary( + WrapInt64, + builder.makeBinary( + ShrUInt64, + builder.makeGetLocal(index, i64), + builder.makeConst(Literal(int64_t(32))) + ) + ) + ; + } + + static Expression* getI64Low(Builder& builder, Index index) { + return + builder.makeUnary( + WrapInt64, + builder.makeGetLocal(index, i64) + ) + ; + } +}; + +} // namespace wasm + +#endif // wasm_ir_utils_h diff --git a/src/binaryen/src/js/binaryen.js-post.js b/src/binaryen/src/js/binaryen.js-post.js new file mode 100644 index 0000000000..352da1c0a1 --- /dev/null +++ b/src/binaryen/src/js/binaryen.js-post.js @@ -0,0 +1,1180 @@ + // export friendly API methods + + function preserveStack(func) { + try { + var stack = Runtime.stackSave(); + return func(); + } finally { + Runtime.stackRestore(stack); + } + }; + + function strToStack(str) { + if (!str) return 0; + return allocate(intArrayFromString(str), 'i8', ALLOC_STACK); + } + + function i32sToStack(i32s) { + var ret = Runtime.stackAlloc(i32s.length << 2); + for (var i = 0; i < i32s.length; i++) { + HEAP32[ret + (i << 2) >> 2] = i32s[i]; + } + return ret; + } + + Module['none'] = Module['_BinaryenNone'](); + Module['i32'] = Module['_BinaryenInt32'](); + Module['i64'] = Module['_BinaryenInt64'](); + Module['f32'] = Module['_BinaryenFloat32'](); + Module['f64'] = Module['_BinaryenFloat64'](); + Module['undefined'] = Module['_BinaryenUndefined'](); + + Module['InvalidId'] = Module['_BinaryenInvalidId'](); + Module['BlockId'] = Module['_BinaryenBlockId'](); + Module['IfId'] = Module['_BinaryenIfId'](); + Module['LoopId'] = Module['_BinaryenLoopId'](); + Module['BreakId'] = Module['_BinaryenBreakId'](); + Module['SwitchId'] = Module['_BinaryenSwitchId'](); + Module['CallId'] = Module['_BinaryenCallId'](); + Module['CallImportId'] = Module['_BinaryenCallImportId'](); + Module['CallIndirectId'] = Module['_BinaryenCallIndirectId'](); + Module['GetLocalId'] = Module['_BinaryenGetLocalId'](); + Module['SetLocalId'] = Module['_BinaryenSetLocalId'](); + Module['GetGlobalId'] = Module['_BinaryenGetGlobalId'](); + Module['SetGlobalId'] = Module['_BinaryenSetGlobalId'](); + Module['LoadId'] = Module['_BinaryenLoadId'](); + Module['StoreId'] = Module['_BinaryenStoreId'](); + Module['ConstId'] = Module['_BinaryenConstId'](); + Module['UnaryId'] = Module['_BinaryenUnaryId'](); + Module['BinaryId'] = Module['_BinaryenBinaryId'](); + Module['SelectId'] = Module['_BinaryenSelectId'](); + Module['DropId'] = Module['_BinaryenDropId'](); + Module['ReturnId'] = Module['_BinaryenReturnId'](); + Module['HostId'] = Module['_BinaryenHostId'](); + Module['NopId'] = Module['_BinaryenNopId'](); + Module['UnreachableId'] = Module['_BinaryenUnreachableId'](); + Module['AtomicCmpxchgId'] = Module['_BinaryenAtomicCmpxchgId'](); + Module['AtomicRMWId'] = Module['_BinaryenAtomicRMWId'](); + Module['AtomicWaitId'] = Module['_BinaryenAtomicWaitId'](); + Module['AtomicWakeId'] = Module['_BinaryenAtomicWakeId'](); + + Module['ClzInt32'] = Module['_BinaryenClzInt32'](); + Module['CtzInt32'] = Module['_BinaryenCtzInt32'](); + Module['PopcntInt32'] = Module['_BinaryenPopcntInt32'](); + Module['NegFloat32'] = Module['_BinaryenNegFloat32'](); + Module['AbsFloat32'] = Module['_BinaryenAbsFloat32'](); + Module['CeilFloat32'] = Module['_BinaryenCeilFloat32'](); + Module['FloorFloat32'] = Module['_BinaryenFloorFloat32'](); + Module['TruncFloat32'] = Module['_BinaryenTruncFloat32'](); + Module['NearestFloat32'] = Module['_BinaryenNearestFloat32'](); + Module['SqrtFloat32'] = Module['_BinaryenSqrtFloat32'](); + Module['EqZInt32'] = Module['_BinaryenEqZInt32'](); + Module['ClzInt64'] = Module['_BinaryenClzInt64'](); + Module['CtzInt64'] = Module['_BinaryenCtzInt64'](); + Module['PopcntInt64'] = Module['_BinaryenPopcntInt64'](); + Module['NegFloat64'] = Module['_BinaryenNegFloat64'](); + Module['AbsFloat64'] = Module['_BinaryenAbsFloat64'](); + Module['CeilFloat64'] = Module['_BinaryenCeilFloat64'](); + Module['FloorFloat64'] = Module['_BinaryenFloorFloat64'](); + Module['TruncFloat64'] = Module['_BinaryenTruncFloat64'](); + Module['NearestFloat64'] = Module['_BinaryenNearestFloat64'](); + Module['SqrtFloat64'] = Module['_BinaryenSqrtFloat64'](); + Module['EqZInt64'] = Module['_BinaryenEqZInt64'](); + Module['ExtendSInt32'] = Module['_BinaryenExtendSInt32'](); + Module['ExtendUInt32'] = Module['_BinaryenExtendUInt32'](); + Module['WrapInt64'] = Module['_BinaryenWrapInt64'](); + Module['TruncSFloat32ToInt32'] = Module['_BinaryenTruncSFloat32ToInt32'](); + Module['TruncSFloat32ToInt64'] = Module['_BinaryenTruncSFloat32ToInt64'](); + Module['TruncUFloat32ToInt32'] = Module['_BinaryenTruncUFloat32ToInt32'](); + Module['TruncUFloat32ToInt64'] = Module['_BinaryenTruncUFloat32ToInt64'](); + Module['TruncSFloat64ToInt32'] = Module['_BinaryenTruncSFloat64ToInt32'](); + Module['TruncSFloat64ToInt64'] = Module['_BinaryenTruncSFloat64ToInt64'](); + Module['TruncUFloat64ToInt32'] = Module['_BinaryenTruncUFloat64ToInt32'](); + Module['TruncUFloat64ToInt64'] = Module['_BinaryenTruncUFloat64ToInt64'](); + Module['ReinterpretFloat32'] = Module['_BinaryenReinterpretFloat32'](); + Module['ReinterpretFloat64'] = Module['_BinaryenReinterpretFloat64'](); + Module['ConvertSInt32ToFloat32'] = Module['_BinaryenConvertSInt32ToFloat32'](); + Module['ConvertSInt32ToFloat64'] = Module['_BinaryenConvertSInt32ToFloat64'](); + Module['ConvertUInt32ToFloat32'] = Module['_BinaryenConvertUInt32ToFloat32'](); + Module['ConvertUInt32ToFloat64'] = Module['_BinaryenConvertUInt32ToFloat64'](); + Module['ConvertSInt64ToFloat32'] = Module['_BinaryenConvertSInt64ToFloat32'](); + Module['ConvertSInt64ToFloat64'] = Module['_BinaryenConvertSInt64ToFloat64'](); + Module['ConvertUInt64ToFloat32'] = Module['_BinaryenConvertUInt64ToFloat32'](); + Module['ConvertUInt64ToFloat64'] = Module['_BinaryenConvertUInt64ToFloat64'](); + Module['PromoteFloat32'] = Module['_BinaryenPromoteFloat32'](); + Module['DemoteFloat64'] = Module['_BinaryenDemoteFloat64'](); + Module['ReinterpretInt32'] = Module['_BinaryenReinterpretInt32'](); + Module['ReinterpretInt64'] = Module['_BinaryenReinterpretInt64'](); + Module['AddInt32'] = Module['_BinaryenAddInt32'](); + Module['SubInt32'] = Module['_BinaryenSubInt32'](); + Module['MulInt32'] = Module['_BinaryenMulInt32'](); + Module['DivSInt32'] = Module['_BinaryenDivSInt32'](); + Module['DivUInt32'] = Module['_BinaryenDivUInt32'](); + Module['RemSInt32'] = Module['_BinaryenRemSInt32'](); + Module['RemUInt32'] = Module['_BinaryenRemUInt32'](); + Module['AndInt32'] = Module['_BinaryenAndInt32'](); + Module['OrInt32'] = Module['_BinaryenOrInt32'](); + Module['XorInt32'] = Module['_BinaryenXorInt32'](); + Module['ShlInt32'] = Module['_BinaryenShlInt32'](); + Module['ShrUInt32'] = Module['_BinaryenShrUInt32'](); + Module['ShrSInt32'] = Module['_BinaryenShrSInt32'](); + Module['RotLInt32'] = Module['_BinaryenRotLInt32'](); + Module['RotRInt32'] = Module['_BinaryenRotRInt32'](); + Module['EqInt32'] = Module['_BinaryenEqInt32'](); + Module['NeInt32'] = Module['_BinaryenNeInt32'](); + Module['LtSInt32'] = Module['_BinaryenLtSInt32'](); + Module['LtUInt32'] = Module['_BinaryenLtUInt32'](); + Module['LeSInt32'] = Module['_BinaryenLeSInt32'](); + Module['LeUInt32'] = Module['_BinaryenLeUInt32'](); + Module['GtSInt32'] = Module['_BinaryenGtSInt32'](); + Module['GtUInt32'] = Module['_BinaryenGtUInt32'](); + Module['GeSInt32'] = Module['_BinaryenGeSInt32'](); + Module['GeUInt32'] = Module['_BinaryenGeUInt32'](); + Module['AddInt64'] = Module['_BinaryenAddInt64'](); + Module['SubInt64'] = Module['_BinaryenSubInt64'](); + Module['MulInt64'] = Module['_BinaryenMulInt64'](); + Module['DivSInt64'] = Module['_BinaryenDivSInt64'](); + Module['DivUInt64'] = Module['_BinaryenDivUInt64'](); + Module['RemSInt64'] = Module['_BinaryenRemSInt64'](); + Module['RemUInt64'] = Module['_BinaryenRemUInt64'](); + Module['AndInt64'] = Module['_BinaryenAndInt64'](); + Module['OrInt64'] = Module['_BinaryenOrInt64'](); + Module['XorInt64'] = Module['_BinaryenXorInt64'](); + Module['ShlInt64'] = Module['_BinaryenShlInt64'](); + Module['ShrUInt64'] = Module['_BinaryenShrUInt64'](); + Module['ShrSInt64'] = Module['_BinaryenShrSInt64'](); + Module['RotLInt64'] = Module['_BinaryenRotLInt64'](); + Module['RotRInt64'] = Module['_BinaryenRotRInt64'](); + Module['EqInt64'] = Module['_BinaryenEqInt64'](); + Module['NeInt64'] = Module['_BinaryenNeInt64'](); + Module['LtSInt64'] = Module['_BinaryenLtSInt64'](); + Module['LtUInt64'] = Module['_BinaryenLtUInt64'](); + Module['LeSInt64'] = Module['_BinaryenLeSInt64'](); + Module['LeUInt64'] = Module['_BinaryenLeUInt64'](); + Module['GtSInt64'] = Module['_BinaryenGtSInt64'](); + Module['GtUInt64'] = Module['_BinaryenGtUInt64'](); + Module['GeSInt64'] = Module['_BinaryenGeSInt64'](); + Module['GeUInt64'] = Module['_BinaryenGeUInt64'](); + Module['AddFloat32'] = Module['_BinaryenAddFloat32'](); + Module['SubFloat32'] = Module['_BinaryenSubFloat32'](); + Module['MulFloat32'] = Module['_BinaryenMulFloat32'](); + Module['DivFloat32'] = Module['_BinaryenDivFloat32'](); + Module['CopySignFloat32'] = Module['_BinaryenCopySignFloat32'](); + Module['MinFloat32'] = Module['_BinaryenMinFloat32'](); + Module['MaxFloat32'] = Module['_BinaryenMaxFloat32'](); + Module['EqFloat32'] = Module['_BinaryenEqFloat32'](); + Module['NeFloat32'] = Module['_BinaryenNeFloat32'](); + Module['LtFloat32'] = Module['_BinaryenLtFloat32'](); + Module['LeFloat32'] = Module['_BinaryenLeFloat32'](); + Module['GtFloat32'] = Module['_BinaryenGtFloat32'](); + Module['GeFloat32'] = Module['_BinaryenGeFloat32'](); + Module['AddFloat64'] = Module['_BinaryenAddFloat64'](); + Module['SubFloat64'] = Module['_BinaryenSubFloat64'](); + Module['MulFloat64'] = Module['_BinaryenMulFloat64'](); + Module['DivFloat64'] = Module['_BinaryenDivFloat64'](); + Module['CopySignFloat64'] = Module['_BinaryenCopySignFloat64'](); + Module['MinFloat64'] = Module['_BinaryenMinFloat64'](); + Module['MaxFloat64'] = Module['_BinaryenMaxFloat64'](); + Module['EqFloat64'] = Module['_BinaryenEqFloat64'](); + Module['NeFloat64'] = Module['_BinaryenNeFloat64'](); + Module['LtFloat64'] = Module['_BinaryenLtFloat64'](); + Module['LeFloat64'] = Module['_BinaryenLeFloat64'](); + Module['GtFloat64'] = Module['_BinaryenGtFloat64'](); + Module['GeFloat64'] = Module['_BinaryenGeFloat64'](); + Module['PageSize'] = Module['_BinaryenPageSize'](); + Module['CurrentMemory'] = Module['_BinaryenCurrentMemory'](); + Module['GrowMemory'] = Module['_BinaryenGrowMemory'](); + Module['HasFeature'] = Module['_BinaryenHasFeature'](); + Module['AtomicRMWAdd'] = Module['_BinaryenAtomicRMWAdd'](); + Module['AtomicRMWSub'] = Module['_BinaryenAtomicRMWSub'](); + Module['AtomicRMWAnd'] = Module['_BinaryenAtomicRMWAnd'](); + Module['AtomicRMWOr'] = Module['_BinaryenAtomicRMWOr'](); + Module['AtomicRMWXor'] = Module['_BinaryenAtomicRMWXor'](); + Module['AtomicRMWXchg'] = Module['_BinaryenAtomicRMWXchg'](); + + // we provide a JS Module() object interface + Module['Module'] = function(module) { + if (!module) module = Module['_BinaryenModuleCreate'](); + this['ptr'] = module; + + this['dispose'] = function() { + Module['_BinaryenModuleDispose'](module); + }; + this['addFunctionType'] = function(name, result, paramTypes) { + return preserveStack(function() { + return Module['_BinaryenAddFunctionType'](module, strToStack(name), result, + i32sToStack(paramTypes), paramTypes.length); + }); + }; + this['getFunctionTypeBySignature'] = function(result, paramTypes) { + return preserveStack(function() { + return Module['_BinaryenGetFunctionTypeBySignature'](module, result, + i32sToStack(paramTypes), paramTypes.length); + }); + }; + + this['block'] = function(name, children, type) { + return preserveStack(function() { + return Module['_BinaryenBlock'](module, name ? strToStack(name) : 0, + i32sToStack(children), children.length, + typeof type !== 'undefined' ? type : Module['undefined']); + }); + }; + this['if'] = function(condition, ifTrue, ifFalse) { + return Module['_BinaryenIf'](module, condition, ifTrue, ifFalse); + }; + this['loop'] = function(label, body) { + return preserveStack(function() { + return Module['_BinaryenLoop'](module, strToStack(label), body); + }); + }; + this['break'] = function(label, condition, value) { + return preserveStack(function() { + return Module['_BinaryenBreak'](module, strToStack(label), condition, value); + }); + }; + this['switch'] = function(names, defaultName, condition, value) { + return preserveStack(function() { + var namei32s = []; + names.forEach(function(name) { + namei32s.push(strToStack(name)); + }); + return Module['_BinaryenSwitch'](module, i32sToStack(namei32s), namei32s.length, + strToStack(defaultName), condition, value); + }); + }; + this['call'] = function(name, operands, type) { + return preserveStack(function() { + return Module['_BinaryenCall'](module, strToStack(name), i32sToStack(operands), operands.length, type); + }); + }; + this['callImport'] = function(name, operands, type) { + return preserveStack(function() { + return Module['_BinaryenCallImport'](module, strToStack(name), i32sToStack(operands), operands.length, type); + }); + }; + this['callIndirect'] = function(target, operands, type) { + return preserveStack(function() { + return Module['_BinaryenCallIndirect'](module, target, i32sToStack(operands), operands.length, strToStack(type)); + }); + }; + this['getLocal'] = function(index, type) { + return Module['_BinaryenGetLocal'](module, index, type); + }; + this['setLocal'] = function(index, value) { + return Module['_BinaryenSetLocal'](module, index, value); + }; + this['teeLocal'] = function(index, value) { + return Module['_BinaryenTeeLocal'](module, index, value); + }; + this['getGlobal'] = function(name, type) { + return Module['_BinaryenGetGlobal'](module, strToStack(name), type); + } + this['setGlobal'] = function(name, value) { + return Module['_BinaryenSetGlobal'](module, strToStack(name), value); + } + this['currentMemory'] = function() { + return Module['_BinaryenHost'](module, Module['CurrentMemory']); + } + this['growMemory'] = function(value) { + return Module['_BinaryenHost'](module, Module['GrowMemory'], null, i32sToStack([value]), 1); + } + this['hasFeature'] = function(name) { + return Module['_BinaryenHost'](module, Module['HasFeature'], strToStack(name)); + } + + // The Const creation API is a little different: we don't want users to + // need to make their own Literals, as the C API handles them by value, + // which means we would leak them. Instead, this is the only API that + // accepts Literals, so fuse it with Literal creation + var literal = _malloc(16); // a single literal in memory. the LLVM C ABI + // makes us pass pointers to this. + + this['i32'] = { + 'load': function(offset, align, ptr) { + return Module['_BinaryenLoad'](module, 4, true, offset, align, Module['i32'], ptr); + }, + 'load8_s': function(offset, align, ptr) { + return Module['_BinaryenLoad'](module, 1, true, offset, align, Module['i32'], ptr); + }, + 'load8_u': function(offset, align, ptr) { + return Module['_BinaryenLoad'](module, 1, false, offset, align, Module['i32'], ptr); + }, + 'load16_s': function(offset, align, ptr) { + return Module['_BinaryenLoad'](module, 2, true, offset, align, Module['i32'], ptr); + }, + 'load16_u': function(offset, align, ptr) { + return Module['_BinaryenLoad'](module, 2, false, offset, align, Module['i32'], ptr); + }, + 'store': function(offset, align, ptr, value) { + return Module['_BinaryenStore'](module, 4, offset, align, ptr, value, Module['i32']); + }, + 'store8': function(offset, align, ptr, value) { + return Module['_BinaryenStore'](module, 1, offset, align, ptr, value, Module['i32']); + }, + 'store16': function(offset, align, ptr, value) { + return Module['_BinaryenStore'](module, 2, offset, align, ptr, value, Module['i32']); + }, + 'const': function(x) { + Module['_BinaryenLiteralInt32'](literal, x); + return Module['_BinaryenConst'](module, literal); + }, + 'clz': function(value) { + return Module['_BinaryenUnary'](module, Module['ClzInt32'], value); + }, + 'ctz': function(value) { + return Module['_BinaryenUnary'](module, Module['CtzInt32'], value); + }, + 'popcnt': function(value) { + return Module['_BinaryenUnary'](module, Module['PopcntInt32'], value); + }, + 'eqz': function(value) { + return Module['_BinaryenUnary'](module, Module['EqZInt32'], value); + }, + 'trunc_s': { + 'f32': function(value) { + return Module['_BinaryenUnary'](module, Module['TruncSFloat32ToInt32'], value); + }, + 'f64': function(value) { + return Module['_BinaryenUnary'](module, Module['TruncSFloat64ToInt32'], value); + }, + }, + 'trunc_u': { + 'f32': function(value) { + return Module['_BinaryenUnary'](module, Module['TruncUFloat32ToInt32'], value); + }, + 'f64': function(value) { + return Module['_BinaryenUnary'](module, Module['TruncUFloat64ToInt32'], value); + }, + }, + 'reinterpret': function(value) { + return Module['_BinaryenUnary'](module, Module['ReinterpretFloat32'], value); + }, + 'wrap': function(value) { + return Module['_BinaryenUnary'](module, Module['WrapInt64'], value); + }, + 'add': function(left, right) { + return Module['_BinaryenBinary'](module, Module['AddInt32'], left, right); + }, + 'sub': function(left, right) { + return Module['_BinaryenBinary'](module, Module['SubInt32'], left, right); + }, + 'mul': function(left, right) { + return Module['_BinaryenBinary'](module, Module['MulInt32'], left, right); + }, + 'div_s': function(left, right) { + return Module['_BinaryenBinary'](module, Module['DivSInt32'], left, right); + }, + 'div_u': function(left, right) { + return Module['_BinaryenBinary'](module, Module['DivUInt32'], left, right); + }, + 'rem_s': function(left, right) { + return Module['_BinaryenBinary'](module, Module['RemSInt32'], left, right); + }, + 'rem_u': function(left, right) { + return Module['_BinaryenBinary'](module, Module['RemUInt32'], left, right); + }, + 'and': function(left, right) { + return Module['_BinaryenBinary'](module, Module['AndInt32'], left, right); + }, + 'or': function(left, right) { + return Module['_BinaryenBinary'](module, Module['OrInt32'], left, right); + }, + 'xor': function(left, right) { + return Module['_BinaryenBinary'](module, Module['XorInt32'], left, right); + }, + 'shl': function(left, right) { + return Module['_BinaryenBinary'](module, Module['ShlInt32'], left, right); + }, + 'shr_u': function(left, right) { + return Module['_BinaryenBinary'](module, Module['ShrUInt32'], left, right); + }, + 'shr_s': function(left, right) { + return Module['_BinaryenBinary'](module, Module['ShrSInt32'], left, right); + }, + 'rotl': function(left, right) { + return Module['_BinaryenBinary'](module, Module['RotLInt32'], left, right); + }, + 'rotr': function(left, right) { + return Module['_BinaryenBinary'](module, Module['RotRInt32'], left, right); + }, + 'eq': function(left, right) { + return Module['_BinaryenBinary'](module, Module['EqInt32'], left, right); + }, + 'ne': function(left, right) { + return Module['_BinaryenBinary'](module, Module['NeInt32'], left, right); + }, + 'lt_s': function(left, right) { + return Module['_BinaryenBinary'](module, Module['LtSInt32'], left, right); + }, + 'lt_u': function(left, right) { + return Module['_BinaryenBinary'](module, Module['LtUInt32'], left, right); + }, + 'le_s': function(left, right) { + return Module['_BinaryenBinary'](module, Module['LeSInt32'], left, right); + }, + 'le_u': function(left, right) { + return Module['_BinaryenBinary'](module, Module['LeUInt32'], left, right); + }, + 'gt_s': function(left, right) { + return Module['_BinaryenBinary'](module, Module['GtSInt32'], left, right); + }, + 'gt_u': function(left, right) { + return Module['_BinaryenBinary'](module, Module['GtUInt32'], left, right); + }, + 'ge_s': function(left, right) { + return Module['_BinaryenBinary'](module, Module['GeSInt32'], left, right); + }, + 'ge_u': function(left, right) { + return Module['_BinaryenBinary'](module, Module['GeUInt32'], left, right); + }, + 'atomic':{ + 'rmw': { + 'add': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 4, offset, ptr, value, Module['i32']); + }, + 'sub': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 4, offset, ptr, value, Module['i32']); + }, + 'and': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 4, offset, ptr, value, Module['i32']); + }, + 'or': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 4, offset, ptr, value, Module['i32']); + }, + 'xor': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 4, offset, ptr, value, Module['i32']); + }, + 'xchg': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 4, offset, ptr, value, Module['i32']); + }, + 'cmpxchg': function(offset, ptr, expected, replacement) { + return Module['_BinaryenAtomicCmpxchg'](module, 4, offset, ptr, expected, replacement, Module['i32']) + }, + }, + 'rmw8_u': { + 'add': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 1, offset, ptr, value, Module['i32']); + }, + 'sub': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 1, offset, ptr, value, Module['i32']); + }, + 'and': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 1, offset, ptr, value, Module['i32']); + }, + 'or': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 1, offset, ptr, value, Module['i32']); + }, + 'xor': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 1, offset, ptr, value, Module['i32']); + }, + 'xchg': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 1, offset, ptr, value, Module['i32']); + }, + 'cmpxchg': function(offset, ptr, expected, replacement) { + return Module['_BinaryenAtomicCmpxchg'](module, 1, offset, ptr, expected, replacement, Module['i32']) + }, + }, + 'rmw16_u': { + 'add': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 2, offset, ptr, value, Module['i32']); + }, + 'sub': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 2, offset, ptr, value, Module['i32']); + }, + 'and': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 2, offset, ptr, value, Module['i32']); + }, + 'or': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 2, offset, ptr, value, Module['i32']); + }, + 'xor': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 2, offset, ptr, value, Module['i32']); + }, + 'xchg': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 2, offset, ptr, value, Module['i32']); + }, + 'cmpxchg': function(offset, ptr, expected, replacement) { + return Module['_BinaryenAtomicCmpxchg'](module, 2, offset, ptr, expected, replacement, Module['i32']) + }, + }, + }, + 'wait': function(ptr, expected, timeout) { + return Module['_BinaryenAtomicWait'](module, ptr, expected, timeout, Module['i32']); + }, + }; + + this['i64'] = { + 'load': function(offset, align, ptr) { + return Module['_BinaryenLoad'](module, 8, true, offset, align, Module['i64'], ptr); + }, + 'load8_s': function(offset, align, ptr) { + return Module['_BinaryenLoad'](module, 1, true, offset, align, Module['i64'], ptr); + }, + 'load8_u': function(offset, align, ptr) { + return Module['_BinaryenLoad'](module, 1, false, offset, align, Module['i64'], ptr); + }, + 'load16_s': function(offset, align, ptr) { + return Module['_BinaryenLoad'](module, 2, true, offset, align, Module['i64'], ptr); + }, + 'load16_u': function(offset, align, ptr) { + return Module['_BinaryenLoad'](module, 2, false, offset, align, Module['i64'], ptr); + }, + 'load32_s': function(offset, align, ptr) { + return Module['_BinaryenLoad'](module, 4, true, offset, align, Module['i64'], ptr); + }, + 'load32_u': function(offset, align, ptr) { + return Module['_BinaryenLoad'](module, 4, false, offset, align, Module['i64'], ptr); + }, + 'store': function(offset, align, ptr, value) { + return Module['_BinaryenStore'](module, 8, offset, align, ptr, value, Module['i64']); + }, + 'store8': function(offset, align, ptr, value) { + return Module['_BinaryenStore'](module, 1, offset, align, ptr, value, Module['i64']); + }, + 'store16': function(offset, align, ptr, value) { + return Module['_BinaryenStore'](module, 2, offset, align, ptr, value, Module['i64']); + }, + 'store32': function(offset, align, ptr, value) { + return Module['_BinaryenStore'](module, 4, offset, align, ptr, value, Module['i64']); + }, + 'const': function(x, y) { + Module['_BinaryenLiteralInt64'](literal, x, y); + return Module['_BinaryenConst'](module, literal); + }, + 'clz': function(value) { + return Module['_BinaryenUnary'](module, Module['ClzInt64'], value); + }, + 'ctz': function(value) { + return Module['_BinaryenUnary'](module, Module['CtzInt64'], value); + }, + 'popcnt': function(value) { + return Module['_BinaryenUnary'](module, Module['PopcntInt64'], value); + }, + 'eqz': function(value) { + return Module['_BinaryenUnary'](module, Module['EqZInt64'], value); + }, + 'trunc_s': { + 'f32': function(value) { + return Module['_BinaryenUnary'](module, Module['TruncSFloat32ToInt64'], value); + }, + 'f64': function(value) { + return Module['_BinaryenUnary'](module, Module['TruncSFloat64ToInt64'], value); + }, + }, + 'trunc_u': { + 'f32': function(value) { + return Module['_BinaryenUnary'](module, Module['TruncUFloat32ToInt64'], value); + }, + 'f64': function(value) { + return Module['_BinaryenUnary'](module, Module['TruncUFloat64ToInt64'], value); + }, + }, + 'reinterpret': function(value) { + return Module['_BinaryenUnary'](module, Module['ReinterpretFloat64'], value); + }, + 'extend_s': function(value) { + return Module['_BinaryenUnary'](module, Module['ExtendSInt32'], value); + }, + 'extend_u': function(value) { + return Module['_BinaryenUnary'](module, Module['ExtendUInt32'], value); + }, + 'add': function(left, right) { + return Module['_BinaryenBinary'](module, Module['AddInt64'], left, right); + }, + 'sub': function(left, right) { + return Module['_BinaryenBinary'](module, Module['SubInt64'], left, right); + }, + 'mul': function(left, right) { + return Module['_BinaryenBinary'](module, Module['MulInt64'], left, right); + }, + 'div_s': function(left, right) { + return Module['_BinaryenBinary'](module, Module['DivSInt64'], left, right); + }, + 'div_u': function(left, right) { + return Module['_BinaryenBinary'](module, Module['DivUInt64'], left, right); + }, + 'rem_s': function(left, right) { + return Module['_BinaryenBinary'](module, Module['RemSInt64'], left, right); + }, + 'rem_u': function(left, right) { + return Module['_BinaryenBinary'](module, Module['RemUInt64'], left, right); + }, + 'and': function(left, right) { + return Module['_BinaryenBinary'](module, Module['AndInt64'], left, right); + }, + 'or': function(left, right) { + return Module['_BinaryenBinary'](module, Module['OrInt64'], left, right); + }, + 'xor': function(left, right) { + return Module['_BinaryenBinary'](module, Module['XorInt64'], left, right); + }, + 'shl': function(left, right) { + return Module['_BinaryenBinary'](module, Module['ShlInt64'], left, right); + }, + 'shr_u': function(left, right) { + return Module['_BinaryenBinary'](module, Module['ShrUInt64'], left, right); + }, + 'shr_s': function(left, right) { + return Module['_BinaryenBinary'](module, Module['ShrSInt64'], left, right); + }, + 'rotl': function(left, right) { + return Module['_BinaryenBinary'](module, Module['RotLInt64'], left, right); + }, + 'rotr': function(left, right) { + return Module['_BinaryenBinary'](module, Module['RotRInt64'], left, right); + }, + 'eq': function(left, right) { + return Module['_BinaryenBinary'](module, Module['EqInt64'], left, right); + }, + 'ne': function(left, right) { + return Module['_BinaryenBinary'](module, Module['NeInt64'], left, right); + }, + 'lt_s': function(left, right) { + return Module['_BinaryenBinary'](module, Module['LtSInt64'], left, right); + }, + 'lt_u': function(left, right) { + return Module['_BinaryenBinary'](module, Module['LtUInt64'], left, right); + }, + 'le_s': function(left, right) { + return Module['_BinaryenBinary'](module, Module['LeSInt64'], left, right); + }, + 'le_u': function(left, right) { + return Module['_BinaryenBinary'](module, Module['LeUInt64'], left, right); + }, + 'gt_s': function(left, right) { + return Module['_BinaryenBinary'](module, Module['GtSInt64'], left, right); + }, + 'gt_u': function(left, right) { + return Module['_BinaryenBinary'](module, Module['GtUInt64'], left, right); + }, + 'ge_s': function(left, right) { + return Module['_BinaryenBinary'](module, Module['GeSInt64'], left, right); + }, + 'ge_u': function(left, right) { + return Module['_BinaryenBinary'](module, Module['GeUInt64'], left, right); + }, + 'atomic':{ + 'rmw': { + 'add': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 8, offset, ptr, value, Module['i64']); + }, + 'sub': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 8, offset, ptr, value, Module['i64']); + }, + 'and': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 8, offset, ptr, value, Module['i64']); + }, + 'or': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 8, offset, ptr, value, Module['i64']); + }, + 'xor': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 8, offset, ptr, value, Module['i64']); + }, + 'xchg': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 8, offset, ptr, value, Module['i64']); + }, + 'cmpxchg': function(offset, ptr, expected, replacement) { + return Module['_BinaryenAtomicCmpxchg'](module, 8, offset, ptr, expected, replacement, Module['i64']) + }, + }, + 'rmw8_u': { + 'add': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 1, offset, ptr, value, Module['i64']); + }, + 'sub': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 1, offset, ptr, value, Module['i64']); + }, + 'and': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 1, offset, ptr, value, Module['i64']); + }, + 'or': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 1, offset, ptr, value, Module['i64']); + }, + 'xor': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 1, offset, ptr, value, Module['i64']); + }, + 'xchg': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 1, offset, ptr, value, Module['i64']); + }, + 'cmpxchg': function(offset, ptr, expected, replacement) { + return Module['_BinaryenAtomicCmpxchg'](module, 1, offset, ptr, expected, replacement, Module['i64']) + }, + }, + 'rmw16_u': { + 'add': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 2, offset, ptr, value, Module['i64']); + }, + 'sub': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 2, offset, ptr, value, Module['i64']); + }, + 'and': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 2, offset, ptr, value, Module['i64']); + }, + 'or': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 2, offset, ptr, value, Module['i64']); + }, + 'xor': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 2, offset, ptr, value, Module['i64']); + }, + 'xchg': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 2, offset, ptr, value, Module['i64']); + }, + 'cmpxchg': function(offset, ptr, expected, replacement) { + return Module['_BinaryenAtomicCmpxchg'](module, 2, offset, ptr, expected, replacement, Module['i64']) + }, + }, + 'rmw32_u': { + 'add': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 4, offset, ptr, value, Module['i64']); + }, + 'sub': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 4, offset, ptr, value, Module['i64']); + }, + 'and': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 4, offset, ptr, value, Module['i64']); + }, + 'or': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 4, offset, ptr, value, Module['i64']); + }, + 'xor': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 4, offset, ptr, value, Module['i64']); + }, + 'xchg': function(offset, ptr, value) { + return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 4, offset, ptr, value, Module['i64']); + }, + 'cmpxchg': function(offset, ptr, expected, replacement) { + return Module['_BinaryenAtomicCmpxchg'](module, 4, offset, ptr, expected, replacement, Module['i64']) + }, + }, + }, + 'wait': function(ptr, expected, timeout) { + return Module['_BinaryenAtomicWait'](module, ptr, expected, timeout, Module['i64']); + }, + }; + + this['f32'] = { + 'load': function(offset, align, ptr) { + return Module['_BinaryenLoad'](module, 4, true, offset, align, Module['f32'], ptr); + }, + 'store': function(offset, align, ptr, value) { + return Module['_BinaryenStore'](module, 4, offset, align, ptr, value, Module['f32']); + }, + 'const': function(x) { + Module['_BinaryenLiteralFloat32'](literal, x); + return Module['_BinaryenConst'](module, literal); + }, + 'const_bits': function(x) { + Module['_BinaryenLiteralFloat32Bits'](literal, x); + return Module['_BinaryenConst'](module, literal); + }, + 'neg': function(value) { + return Module['_BinaryenUnary'](module, Module['NegFloat32'], value); + }, + 'abs': function(value) { + return Module['_BinaryenUnary'](module, Module['AbsFloat32'], value); + }, + 'ceil': function(value) { + return Module['_BinaryenUnary'](module, Module['CeilFloat32'], value); + }, + 'floor': function(value) { + return Module['_BinaryenUnary'](module, Module['FloorFloat32'], value); + }, + 'trunc': function(value) { + return Module['_BinaryenUnary'](module, Module['TruncFloat32'], value); + }, + 'nearest': function(value) { + return Module['_BinaryenUnary'](module, Module['NearestFloat32'], value); + }, + 'sqrt': function(value) { + return Module['_BinaryenUnary'](module, Module['SqrtFloat32'], value); + }, + 'reinterpret': function(value) { + return Module['_BinaryenUnary'](module, Module['ReinterpretInt32'], value); + }, + 'convert_s': { + 'i32': function(value) { + return Module['_BinaryenUnary'](module, Module['ConvertSInt32ToFloat32'], value); + }, + 'i64': function(value) { + return Module['_BinaryenUnary'](module, Module['ConvertSInt64ToFloat32'], value); + }, + }, + 'convert_u': { + 'i32': function(value) { + return Module['_BinaryenUnary'](module, Module['ConvertUInt32ToFloat32'], value); + }, + 'i64': function(value) { + return Module['_BinaryenUnary'](module, Module['ConvertUInt64ToFloat32'], value); + }, + }, + 'demote': function(value) { + return Module['_BinaryenUnary'](module, Module['DemoteFloat64'], value); + }, + 'add': function(left, right) { + return Module['_BinaryenBinary'](module, Module['AddFloat32'], left, right); + }, + 'sub': function(left, right) { + return Module['_BinaryenBinary'](module, Module['SubFloat32'], left, right); + }, + 'mul': function(left, right) { + return Module['_BinaryenBinary'](module, Module['MulFloat32'], left, right); + }, + 'div': function(left, right) { + return Module['_BinaryenBinary'](module, Module['DivFloat32'], left, right); + }, + 'copysign': function(left, right) { + return Module['_BinaryenBinary'](module, Module['CopySignFloat32'], left, right); + }, + 'min': function(left, right) { + return Module['_BinaryenBinary'](module, Module['MinFloat32'], left, right); + }, + 'max': function(left, right) { + return Module['_BinaryenBinary'](module, Module['MaxFloat32'], left, right); + }, + 'eq': function(left, right) { + return Module['_BinaryenBinary'](module, Module['EqFloat32'], left, right); + }, + 'ne': function(left, right) { + return Module['_BinaryenBinary'](module, Module['NeFloat32'], left, right); + }, + 'lt': function(left, right) { + return Module['_BinaryenBinary'](module, Module['LtFloat32'], left, right); + }, + 'le': function(left, right) { + return Module['_BinaryenBinary'](module, Module['LeFloat32'], left, right); + }, + 'gt': function(left, right) { + return Module['_BinaryenBinary'](module, Module['GtFloat32'], left, right); + }, + 'ge': function(left, right) { + return Module['_BinaryenBinary'](module, Module['GeFloat32'], left, right); + }, + }; + + this['f64'] = { + 'load': function(offset, align, ptr) { + return Module['_BinaryenLoad'](module, 8, true, offset, align, Module['f64'], ptr); + }, + 'store': function(offset, align, ptr, value) { + return Module['_BinaryenStore'](module, 8, offset, align, ptr, value, Module['f64']); + }, + 'const': function(x) { + Module['_BinaryenLiteralFloat64'](literal, x); + return Module['_BinaryenConst'](module, literal); + }, + 'const_bits': function(x, y) { + Module['_BinaryenLiteralFloat64Bits'](literal, x, y); + return Module['_BinaryenConst'](module, literal); + }, + 'neg': function(value) { + return Module['_BinaryenUnary'](module, Module['NegFloat64'], value); + }, + 'abs': function(value) { + return Module['_BinaryenUnary'](module, Module['AbsFloat64'], value); + }, + 'ceil': function(value) { + return Module['_BinaryenUnary'](module, Module['CeilFloat64'], value); + }, + 'floor': function(value) { + return Module['_BinaryenUnary'](module, Module['FloorFloat64'], value); + }, + 'trunc': function(value) { + return Module['_BinaryenUnary'](module, Module['TruncFloat64'], value); + }, + 'nearest': function(value) { + return Module['_BinaryenUnary'](module, Module['NearestFloat64'], value); + }, + 'sqrt': function(value) { + return Module['_BinaryenUnary'](module, Module['SqrtFloat64'], value); + }, + 'reinterpret': function(value) { + return Module['_BinaryenUnary'](module, Module['ReinterpretInt64'], value); + }, + 'convert_s': { + 'i32': function(value) { + return Module['_BinaryenUnary'](module, Module['ConvertSInt32ToFloat64'], value); + }, + 'i64': function(value) { + return Module['_BinaryenUnary'](module, Module['ConvertSInt64ToFloat64'], value); + }, + }, + 'convert_u': { + 'i32': function(value) { + return Module['_BinaryenUnary'](module, Module['ConvertUInt32ToFloat64'], value); + }, + 'i64': function(value) { + return Module['_BinaryenUnary'](module, Module['ConvertUInt64ToFloat64'], value); + }, + }, + 'promote': function(value) { + return Module['_BinaryenUnary'](module, Module['PromoteFloat32'], value); + }, + 'add': function(left, right) { + return Module['_BinaryenBinary'](module, Module['AddFloat64'], left, right); + }, + 'sub': function(left, right) { + return Module['_BinaryenBinary'](module, Module['SubFloat64'], left, right); + }, + 'mul': function(left, right) { + return Module['_BinaryenBinary'](module, Module['MulFloat64'], left, right); + }, + 'div': function(left, right) { + return Module['_BinaryenBinary'](module, Module['DivFloat64'], left, right); + }, + 'copysign': function(left, right) { + return Module['_BinaryenBinary'](module, Module['CopySignFloat64'], left, right); + }, + 'min': function(left, right) { + return Module['_BinaryenBinary'](module, Module['MinFloat64'], left, right); + }, + 'max': function(left, right) { + return Module['_BinaryenBinary'](module, Module['MaxFloat64'], left, right); + }, + 'eq': function(left, right) { + return Module['_BinaryenBinary'](module, Module['EqFloat64'], left, right); + }, + 'ne': function(left, right) { + return Module['_BinaryenBinary'](module, Module['NeFloat64'], left, right); + }, + 'lt': function(left, right) { + return Module['_BinaryenBinary'](module, Module['LtFloat64'], left, right); + }, + 'le': function(left, right) { + return Module['_BinaryenBinary'](module, Module['LeFloat64'], left, right); + }, + 'gt': function(left, right) { + return Module['_BinaryenBinary'](module, Module['GtFloat64'], left, right); + }, + 'ge': function(left, right) { + return Module['_BinaryenBinary'](module, Module['GeFloat64'], left, right); + }, + }; + + this['select'] = function(condition, ifTrue, ifFalse) { + return Module['_BinaryenSelect'](module, condition, ifTrue, ifFalse); + }; + this['drop'] = function(value) { + return Module['_BinaryenDrop'](module, value); + }; + this['return'] = function(value) { + return Module['_BinaryenReturn'](module, value); + }; + this['host'] = function() { + throw 'TODO'; + }; + this['nop'] = function() { + return Module['_BinaryenNop'](module); + }; + this['unreachable'] = function() { + return Module['_BinaryenUnreachable'](module); + }; + this['wake'] = function(ptr, wakeCount) { + return Module['_BinaryenAtomicWake'](module, ptr, wakeCount); + }; + this['addFunction'] = function(name, functionType, varTypes, body) { + return preserveStack(function() { + return Module['_BinaryenAddFunction'](module, strToStack(name), functionType, i32sToStack(varTypes), varTypes.length, body); + }); + }; + this['addGlobal'] = function(name, type, mutable, init) { + return preserveStack(function() { + return Module['_BinaryenAddGlobal'](module, strToStack(name), type, mutable, init); + }); + } + this['addImport'] = function(internalName, externalModuleName, externalBaseName, type) { + return preserveStack(function() { + return Module['_BinaryenAddImport'](module, strToStack(internalName), strToStack(externalModuleName), strToStack(externalBaseName), type); + }); + }; + this['removeImport'] = function(internalName) { + return preserveStack(function() { + return Module['_BinaryenRemoveImport'](module, strToStack(internalName)); + }); + }; + this['addExport'] = function(internalName, externalName) { + return preserveStack(function() { + return Module['_BinaryenAddExport'](module, strToStack(internalName), strToStack(externalName)); + }); + }; + this['removeExport'] = function(externalName) { + return preserveStack(function() { + return Module['_BinaryenRemoveExport'](module, strToStack(externalName)); + }); + }; + this['setFunctionTable'] = function(funcs) { + return preserveStack(function() { + return Module['_BinaryenSetFunctionTable'](module, i32sToStack(funcs), funcs.length); + }); + }; + this['setMemory'] = function(initial, maximum, exportName, segments) { + // segments are assumed to be { offset: expression ref, data: array of 8-bit data } + return preserveStack(function() { + return Module['_BinaryenSetMemory']( + module, initial, maximum, strToStack(exportName), + i32sToStack( + segments.map(function(segment) { + return allocate(segment.data, 'i8', ALLOC_STACK); + }) + ), + i32sToStack( + segments.map(function(segment) { + return segment.offset; + }) + ), + i32sToStack( + segments.map(function(segment) { + return segment.data.length; + }) + ), + segments.length + ); + }); + }; + this['setStart'] = function(start) { + return Module['_BinaryenSetStart'](module, start); + }; + this['emitText'] = function() { + var old = Module['print']; + var ret = ''; + Module['print'] = function(x) { ret += x + '\n' }; + Module['_BinaryenModulePrint'](module); + Module['print'] = old; + return ret; + }; + this['emitAsmjs'] = function() { + var old = Module['print']; + var ret = ''; + Module['print'] = function(x) { ret += x + '\n' }; + Module['_BinaryenModulePrintAsmjs'](module); + Module['print'] = old; + return ret; + }; + this['validate'] = function() { + return Module['_BinaryenModuleValidate'](module); + }; + this['optimize'] = function() { + return Module['_BinaryenModuleOptimize'](module); + }; + this['runPasses'] = function(passes) { + return preserveStack(function() { + return Module['_BinaryenModuleRunPasses'](module, i32sToStack( + passes.map(strToStack) + ), passes.length); + }); + } + this['autoDrop'] = function() { + return Module['_BinaryenModuleAutoDrop'](module); + }; + + // TODO: fix this hard-wired limit + var MAX = 1024*1024; + var writeBuffer = null; + this['emitBinary'] = function() { + if (!writeBuffer) writeBuffer = _malloc(MAX); + var bytes = Module['_BinaryenModuleWrite'](module, writeBuffer, MAX); + assert(bytes < MAX, 'FIXME: hardcoded limit on module size'); // we should not use the whole buffer + return new Uint8Array(HEAPU8.subarray(writeBuffer, writeBuffer + bytes)); + }; + this['interpret'] = function() { + return Module['_BinaryenModuleInterpret'](module); + }; + }; + + Module['Relooper'] = function() { + var relooper = this.ptr = Module['_RelooperCreate'](); + + this['addBlock'] = function(code) { + return Module['_RelooperAddBlock'](relooper, code); + }; + this['addBranch'] = function(from, to, condition, code) { + return Module['_RelooperAddBranch'](from, to, condition, code); + }; + this['addBlockWithSwitch'] = function(code, condition) { + return Module['_RelooperAddBlockWithSwitch'](relooper, code, condition); + }; + this['addBranchForSwitch'] = function(from, to, indexes, code) { + return preserveStack(function() { + return Module['_RelooperAddBranchForSwitch'](from, to, i32sToStack(indexes), indexes.length, code); + }); + }; + this['renderAndDispose'] = function(entry, labelHelper, module) { + return Module['_RelooperRenderAndDispose'](relooper, entry, labelHelper, module['ptr']); + }; + }; + + Module['getExpressionId'] = function(expr) { + return Module['_BinaryenExpressionGetId'](expr); + }; + + Module['getExpressionType'] = function(expr) { + return Module['_BinaryenExpressionGetType'](expr); + }; + + Module['getConstValueI32'] = function(expr) { + return Module['_BinaryenConstGetValueI32'](expr); + }; + + Module['getConstValueI64'] = function(expr) { + return { + 'low': Module['_BinaryenConstGetValueI64Low'](expr), + 'high': Module['_BinaryenConstGetValueI64High'](expr) + }; + }; + + Module['getConstValueF32'] = function(expr) { + return Module['_BinaryenConstGetValueF32'](expr); + }; + + Module['getConstValueF64'] = function(expr) { + return Module['_BinaryenConstGetValueF64'](expr); + }; + + // emit text of an expression or a module + Module['emitText'] = function(expr) { + if (typeof expr === 'object') { + return expr.emitText(); + } + var old = Module['print']; + var ret = ''; + Module['print'] = function(x) { ret += x + '\n' }; + Module['_BinaryenExpressionPrint'](expr); + Module['print'] = old; + return ret; + }; + + Module['readBinary'] = function(data) { + var buffer = allocate(data, 'i8', ALLOC_NORMAL); + var ptr = Module['_BinaryenModuleRead'](buffer, data.length); + _free(buffer); + return new Module['Module'](ptr); + }; + + Module['parseText'] = function(text) { + var buffer = _malloc(text.length + 1); + writeAsciiToMemory(text, buffer); + var ptr = Module['_BinaryenModuleParse'](buffer); + _free(buffer); + return new Module['Module'](ptr); + }; + + Module['setAPITracing'] = function(on) { + return Module['_BinaryenSetAPITracing'](on); + }; + + // Support AMD-compatible loaders by defining a factory function that returns 'Module' + if (typeof define === "function" && define["amd"]) + define(function() { return Module; }); + + // Support CommonJS-compatible loaders by checking for 'require' and 'module.exports' + else if (typeof require === "function" && typeof module !== "undefined" && module && module.exports) + module.exports = Module; + + // Otherwise expose as 'Binaryen' globally checking for common names of the global object + // first (namely 'global' and 'window') and fall back to 'this' (i.e. within web workers). + else + (typeof global !== "undefined" && global || + typeof window !== "undefined" && window || + this)["Binaryen"] = Module; + +})(); \ No newline at end of file diff --git a/src/binaryen/src/js/binaryen.js-pre.js b/src/binaryen/src/js/binaryen.js-pre.js new file mode 100644 index 0000000000..0f9293e16c --- /dev/null +++ b/src/binaryen/src/js/binaryen.js-pre.js @@ -0,0 +1,2 @@ +(function() { + "use strict"; diff --git a/src/binaryen/src/literal.h b/src/binaryen/src/literal.h new file mode 100644 index 0000000000..55efbd31ea --- /dev/null +++ b/src/binaryen/src/literal.h @@ -0,0 +1,175 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_literal_h +#define wasm_literal_h + +#include + +#include "support/hash.h" +#include "support/utilities.h" +#include "compiler-support.h" +#include "wasm-type.h" + +namespace wasm { + +class Literal { +public: + WasmType type; + +private: + // store only integers, whose bits are deterministic. floats + // can have their signalling bit set, for example. + union { + int32_t i32; + int64_t i64; + }; + + // The RHS of shl/shru/shrs must be masked by bitwidth. + template + static T shiftMask(T val) { + return val & (sizeof(T) * 8 - 1); + } + +public: + Literal() : type(WasmType::none), i64(0) {} + explicit Literal(WasmType type) : type(type), i64(0) {} + explicit Literal(int32_t init) : type(WasmType::i32), i32(init) {} + explicit Literal(uint32_t init) : type(WasmType::i32), i32(init) {} + explicit Literal(int64_t init) : type(WasmType::i64), i64(init) {} + explicit Literal(uint64_t init) : type(WasmType::i64), i64(init) {} + explicit Literal(float init) : type(WasmType::f32), i32(bit_cast(init)) {} + explicit Literal(double init) : type(WasmType::f64), i64(bit_cast(init)) {} + + bool isConcrete() { return type != none; } + bool isNull() { return type == none; } + + Literal castToF32(); + Literal castToF64(); + Literal castToI32(); + Literal castToI64(); + + int32_t geti32() const { assert(type == WasmType::i32); return i32; } + int64_t geti64() const { assert(type == WasmType::i64); return i64; } + float getf32() const { assert(type == WasmType::f32); return bit_cast(i32); } + double getf64() const { assert(type == WasmType::f64); return bit_cast(i64); } + + int32_t* geti32Ptr() { assert(type == WasmType::i32); return &i32; } // careful! + + int32_t reinterpreti32() const { assert(type == WasmType::f32); return i32; } + int64_t reinterpreti64() const { assert(type == WasmType::f64); return i64; } + float reinterpretf32() const { assert(type == WasmType::i32); return bit_cast(i32); } + double reinterpretf64() const { assert(type == WasmType::i64); return bit_cast(i64); } + + int64_t getInteger() const; + double getFloat() const; + int64_t getBits() const; + bool operator==(const Literal& other) const; + bool operator!=(const Literal& other) const; + bool bitwiseEqual(const Literal& other) const; + + static uint32_t NaNPayload(float f); + static uint64_t NaNPayload(double f); + static float setQuietNaN(float f); + static double setQuietNaN(double f); + + static void printFloat(std::ostream &o, float f); + static void printDouble(std::ostream& o, double d); + + friend std::ostream& operator<<(std::ostream& o, Literal literal); + + Literal countLeadingZeroes() const; + Literal countTrailingZeroes() const; + Literal popCount() const; + + Literal extendToSI64() const; + Literal extendToUI64() const; + Literal extendToF64() const; + Literal truncateToI32() const; + Literal truncateToF32() const; + + Literal convertSToF32() const; + Literal convertUToF32() const; + Literal convertSToF64() const; + Literal convertUToF64() const; + + Literal neg() const; + Literal abs() const; + Literal ceil() const; + Literal floor() const; + Literal trunc() const; + Literal nearbyint() const; + Literal sqrt() const; + + Literal add(const Literal& other) const; + Literal sub(const Literal& other) const; + Literal mul(const Literal& other) const; + Literal div(const Literal& other) const; + Literal divS(const Literal& other) const; + Literal divU(const Literal& other) const; + Literal remS(const Literal& other) const; + Literal remU(const Literal& other) const; + Literal and_(const Literal& other) const; + Literal or_(const Literal& other) const; + Literal xor_(const Literal& other) const; + Literal shl(const Literal& other) const; + Literal shrS(const Literal& other) const; + Literal shrU(const Literal& other) const; + Literal rotL(const Literal& other) const; + Literal rotR(const Literal& other) const; + + Literal eq(const Literal& other) const; + Literal ne(const Literal& other) const; + Literal ltS(const Literal& other) const; + Literal ltU(const Literal& other) const; + Literal lt(const Literal& other) const; + Literal leS(const Literal& other) const; + Literal leU(const Literal& other) const; + Literal le(const Literal& other) const; + + Literal gtS(const Literal& other) const; + Literal gtU(const Literal& other) const; + Literal gt(const Literal& other) const; + Literal geS(const Literal& other) const; + Literal geU(const Literal& other) const; + Literal ge(const Literal& other) const; + + Literal min(const Literal& other) const; + Literal max(const Literal& other) const; + Literal copysign(const Literal& other) const; +}; + +} // namespace wasm + +namespace std { +template<> struct hash { + size_t operator()(const wasm::Literal& a) const { + return wasm::rehash( + uint64_t(hash()(size_t(a.type))), + uint64_t(hash()(a.getBits())) + ); + } +}; +template<> struct less { + bool operator()(const wasm::Literal& a, const wasm::Literal& b) const { + if (a.type < b.type) return true; + if (a.type > b.type) return false; + return a.getBits() < b.getBits(); + } +}; +} + +#endif // wasm_literal_h diff --git a/src/binaryen/src/mixed_arena.h b/src/binaryen/src/mixed_arena.h new file mode 100644 index 0000000000..9354527ec6 --- /dev/null +++ b/src/binaryen/src/mixed_arena.h @@ -0,0 +1,322 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_mixed_arena_h +#define wasm_mixed_arena_h + +#include +#include +#include +#include +#include +#include +#include + +// +// Arena allocation for mixed-type data. +// +// Arena-style bump allocation is important for two reasons: First, so that +// allocation is quick, and second, so that allocated items are close together, +// which is cache-friendy. Arena allocation is also useful for a minor third +// reason which is to make freeing all the items in an arena very quick. +// +// Each WebAssembly Module has an arena allocator, which should be used +// for all of its AST nodes and so forth. When the Module is destroyed, the +// entire arena is cleaned up. +// +// When allocating an object in an arena, the object's proper constructor +// is called. Note that destructors are not called, because to make the +// arena simple and fast we do not track internal allocations inside it +// (and we can also avoid the need for virtual destructors). +// +// In general, optimization passes avoid allocation as much as possible. +// Many passes only remove or modify nodes anyhow, others can often +// reuse nodes that are being optimized out. This keeps things +// cache-friendly, and also makes the operations trivially thread-safe. +// In the rare case that a pass does need to allocate, and it is a +// parallel pass (so multiple threads might access the allocator), +// the MixedArena instance will notice if it is on a different thread +// than that arena's original thread, and will perform the allocation +// in a side arena for that other thread. This is done in a transparent +// way to the outside; as a result, it is always safe to allocate using +// a MixedArena, no matter which thread you are on. Allocations will +// of course be fastest on the original thread for the arena. +// + +struct MixedArena { + // fast bump allocation + std::vector chunks; + size_t chunkSize = 32768; + size_t index; // in last chunk + + std::thread::id threadId; + + // multithreaded allocation - each arena is valid on a specific thread. + // if we are on the wrong thread, we atomically look in the linked + // list of next, adding an allocator if necessary + std::atomic next; + + MixedArena() { + threadId = std::this_thread::get_id(); + next.store(nullptr); + } + + void* allocSpace(size_t size) { + // the bump allocator data should not be modified by multiple threads at once. + auto myId = std::this_thread::get_id(); + if (myId != threadId) { + MixedArena* curr = this; + MixedArena* allocated = nullptr; + while (myId != curr->threadId) { + auto seen = curr->next.load(); + if (seen) { + curr = seen; + continue; + } + // there is a nullptr for next, so we may be able to place a new + // allocator for us there. but carefully, as others may do so as + // well. we may waste a few allocations here, but it doesn't matter + // as this can only happen as the chain is built up, i.e., + // O(# of cores) per allocator, and our allocatrs are long-lived. + if (!allocated) { + allocated = new MixedArena(); // has our thread id + } + if (curr->next.compare_exchange_weak(seen, allocated)) { + // we replaced it, so we are the next in the chain + // we can forget about allocated, it is owned by the chain now + allocated = nullptr; + break; + } + // otherwise, the cmpxchg updated seen, and we continue to loop + curr = seen; + } + if (allocated) delete allocated; + return curr->allocSpace(size); + } + size = (size + 7) & (-8); // same alignment as malloc TODO optimize? + bool mustAllocate = false; + while (chunkSize <= size) { + chunkSize *= 2; + mustAllocate = true; + } + if (chunks.size() == 0 || index + size >= chunkSize || mustAllocate) { + chunks.push_back(new char[chunkSize]); + index = 0; + } + auto* ret = chunks.back() + index; + index += size; + return static_cast(ret); + } + + template + T* alloc() { + auto* ret = static_cast(allocSpace(sizeof(T))); + new (ret) T(*this); // allocated objects receive the allocator, so they can allocate more later if necessary + return ret; + } + + void clear() { + for (char* chunk : chunks) { + delete[] chunk; + } + chunks.clear(); + } + + ~MixedArena() { + clear(); + if (next.load()) delete next.load(); + } +}; + + +// +// A vector that allocates in an arena. +// +// TODO: specialize on the initial size of the array + +template +class ArenaVectorBase { +protected: + T* data = nullptr; + size_t usedElements = 0, + allocatedElements = 0; + + void reallocate(size_t size) { + T* old = data; + static_cast(this)->allocate(size); + for (size_t i = 0; i < usedElements; i++) { + data[i] = old[i]; + } + } + +public: + struct Iterator; + + T& operator[](size_t index) const { + assert(index < usedElements); + return data[index]; + } + + size_t size() const { + return usedElements; + } + + bool empty() const { + return size() == 0; + } + + void resize(size_t size) { + if (size > allocatedElements) { + reallocate(size); + } + // construct new elements + for (size_t i = usedElements; i < size; i++) { + new (data + i) T(); + } + usedElements = size; + } + + T& back() const { + assert(usedElements > 0); + return data[usedElements - 1]; + } + + T& pop_back() { + assert(usedElements > 0); + usedElements--; + return data[usedElements]; + } + + void push_back(T item) { + if (usedElements == allocatedElements) { + reallocate((allocatedElements + 1) * 2); // TODO: optimize + } + data[usedElements] = item; + usedElements++; + } + + void erase(Iterator start_it, Iterator end_it) { + assert(start_it.parent == end_it.parent && start_it.parent == this); + assert(start_it.index <= end_it.index && end_it.index <= usedElements); + size_t size = end_it.index - start_it.index; + for (size_t cur = start_it.index; cur + size < usedElements; ++cur) { + data[cur] = data[cur + size]; + } + usedElements -= size; + } + + void clear() { + usedElements = 0; + } + + void reserve(size_t size) { + if (size > allocatedElements) { + reallocate(size); + } + } + + template + void set(const ListType& list) { + size_t size = list.size(); + if (allocatedElements < size) { + static_cast(this)->allocate(size); + } + for (size_t i = 0; i < size; i++) { + data[i] = list[i]; + } + usedElements = size; + } + + void operator=(SubType& other) { + set(other); + } + + void swap(SubType& other) { + data = other.data; + usedElements = other.usedElements; + allocatedElements = other.allocatedElements; + + other.data = nullptr; + other.usedElements = other.allocatedElements = 0; + } + + // iteration + + struct Iterator { + const SubType* parent; + size_t index; + + Iterator(const SubType* parent, size_t index) : parent(parent), index(index) {} + + bool operator!=(const Iterator& other) const { + return index != other.index || parent != other.parent; + } + + void operator++() { + index++; + } + + Iterator& operator+=(int off) { + index += off; + return *this; + } + + const Iterator operator+(int off) const { + return Iterator(*this) += off; + } + + T& operator*() { + return (*parent)[index]; + } + }; + + Iterator begin() const { + return Iterator(static_cast(this), 0); + } + Iterator end() const { + return Iterator(static_cast(this), usedElements); + } + + void allocate(size_t size) { + abort(); // must be implemented in children + } +}; + +// A vector that has an allocator for arena allocation +// +// TODO: consider not saving the allocator, but requiring it be +// passed in when needed, would make this (and thus Blocks etc. +// smaller) + +template +class ArenaVector : public ArenaVectorBase, T> { +private: + MixedArena& allocator; + +public: + ArenaVector(MixedArena& allocator) : allocator(allocator) {} + + ArenaVector(ArenaVector&& other) : allocator(other.allocator) { + *this = other; + } + + void allocate(size_t size) { + this->allocatedElements = size; + this->data = static_cast(allocator.allocSpace(sizeof(T) * this->allocatedElements)); + } +}; + +#endif // wasm_mixed_arena_h diff --git a/src/binaryen/src/parsing.h b/src/binaryen/src/parsing.h new file mode 100644 index 0000000000..15f22040df --- /dev/null +++ b/src/binaryen/src/parsing.h @@ -0,0 +1,315 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_parsing_h +#define wasm_parsing_h + +#include +#include +#include +#include + +#include "shared-constants.h" +#include "asmjs/shared-constants.h" +#include "mixed_arena.h" +#include "support/colors.h" +#include "support/utilities.h" +#include "wasm.h" +#include "wasm-printing.h" + +namespace wasm { + +struct ParseException { + std::string text; + size_t line, col; + + ParseException() : text("unknown parse error"), line(-1), col(-1) {} + ParseException(std::string text) : text(text), line(-1), col(-1) {} + ParseException(std::string text, size_t line, size_t col) : text(text), line(line), col(col) {} + + void dump(std::ostream& o) { + Colors::magenta(o); + o << "["; + Colors::red(o); + o << "parse exception: "; + Colors::green(o); + o << text; + if (line != size_t(-1)) { + Colors::normal(o); + o << " (at " << line << ":" << col << ")"; + } + Colors::magenta(o); + o << "]"; + Colors::normal(o); + } +}; + +struct MapParseException { + std::string text; + + MapParseException() : text("unknown parse error") {} + MapParseException(std::string text) : text(text) {} + + void dump(std::ostream& o) { + Colors::magenta(o); + o << "["; + Colors::red(o); + o << "map parse exception: "; + Colors::green(o); + o << text; + Colors::magenta(o); + o << "]"; + Colors::normal(o); + } +}; + +inline Expression* parseConst(cashew::IString s, WasmType type, MixedArena& allocator) { + const char *str = s.str; + auto ret = allocator.alloc(); + ret->type = type; + if (isWasmTypeFloat(type)) { + if (s == _INFINITY) { + switch (type) { + case f32: ret->value = Literal(std::numeric_limits::infinity()); break; + case f64: ret->value = Literal(std::numeric_limits::infinity()); break; + default: return nullptr; + } + //std::cerr << "make constant " << str << " ==> " << ret->value << '\n'; + return ret; + } + if (s == NEG_INFINITY) { + switch (type) { + case f32: ret->value = Literal(-std::numeric_limits::infinity()); break; + case f64: ret->value = Literal(-std::numeric_limits::infinity()); break; + default: return nullptr; + } + //std::cerr << "make constant " << str << " ==> " << ret->value << '\n'; + return ret; + } + if (s == _NAN) { + switch (type) { + case f32: ret->value = Literal(float(std::nan(""))); break; + case f64: ret->value = Literal(double(std::nan(""))); break; + default: return nullptr; + } + //std::cerr << "make constant " << str << " ==> " << ret->value << '\n'; + return ret; + } + bool negative = str[0] == '-'; + const char *positive = negative ? str + 1 : str; + if (!negative) { + if (positive[0] == '+') { + positive++; + } + } + if (positive[0] == 'n' && positive[1] == 'a' && positive[2] == 'n') { + const char * modifier = positive[3] == ':' ? positive + 4 : nullptr; + if (!(modifier ? positive[4] == '0' && positive[5] == 'x' : 1)) { + throw ParseException("bad nan input"); + } + switch (type) { + case f32: { + uint32_t pattern; + if (modifier) { + std::istringstream istr(modifier); + istr >> std::hex >> pattern; + pattern |= 0x7f800000U; + } else { + pattern = 0x7fc00000U; + } + if (negative) pattern |= 0x80000000U; + if (!std::isnan(bit_cast(pattern))) pattern |= 1U; + ret->value = Literal(pattern).castToF32(); + break; + } + case f64: { + uint64_t pattern; + if (modifier) { + std::istringstream istr(modifier); + istr >> std::hex >> pattern; + pattern |= 0x7ff0000000000000ULL; + } else { + pattern = 0x7ff8000000000000UL; + } + if (negative) pattern |= 0x8000000000000000ULL; + if (!std::isnan(bit_cast(pattern))) pattern |= 1ULL; + ret->value = Literal(pattern).castToF64(); + break; + } + default: return nullptr; + } + //std::cerr << "make constant " << str << " ==> " << ret->value << '\n'; + return ret; + } + if (s == NEG_NAN) { + switch (type) { + case f32: ret->value = Literal(float(-std::nan(""))); break; + case f64: ret->value = Literal(double(-std::nan(""))); break; + default: return nullptr; + } + //std::cerr << "make constant " << str << " ==> " << ret->value << '\n'; + return ret; + } + } + switch (type) { + case i32: { + if ((str[0] == '0' && str[1] == 'x') || (str[0] == '-' && str[1] == '0' && str[2] == 'x')) { + bool negative = str[0] == '-'; + if (negative) str++; + std::istringstream istr(str); + uint32_t temp; + istr >> std::hex >> temp; + ret->value = Literal(negative ? -temp : temp); + } else { + std::istringstream istr(str[0] == '-' ? str + 1 : str); + uint32_t temp; + istr >> temp; + ret->value = Literal(str[0] == '-' ? -temp : temp); + } + break; + } + case i64: { + if ((str[0] == '0' && str[1] == 'x') || (str[0] == '-' && str[1] == '0' && str[2] == 'x')) { + bool negative = str[0] == '-'; + if (negative) str++; + std::istringstream istr(str); + uint64_t temp; + istr >> std::hex >> temp; + ret->value = Literal(negative ? -temp : temp); + } else { + std::istringstream istr(str[0] == '-' ? str + 1 : str); + uint64_t temp; + istr >> temp; + ret->value = Literal(str[0] == '-' ? -temp : temp); + } + break; + } + case f32: { + char *end; + ret->value = Literal(strtof(str, &end)); + break; + } + case f64: { + char *end; + ret->value = Literal(strtod(str, &end)); + break; + } + default: return nullptr; + } + if (ret->value.type != type) { + throw ParseException("parsed type does not match expected type"); + } + //std::cerr << "make constant " << str << " ==> " << ret->value << '\n'; + return ret; +} + +// Helper for parsers that may not have unique label names. This transforms +// the names into unique ones, as required by Binaryen IR. +struct UniqueNameMapper { + std::vector labelStack; + std::map> labelMappings; // name in source => stack of uniquified names + std::map reverseLabelMapping; // uniquified name => name in source + + Index otherIndex = 0; + + Name getPrefixedName(Name prefix) { + if (reverseLabelMapping.find(prefix) == reverseLabelMapping.end()) return prefix; + // make sure to return a unique name not already on the stack + while (1) { + Name ret = Name(prefix.str + std::to_string(otherIndex++)); + if (reverseLabelMapping.find(ret) == reverseLabelMapping.end()) return ret; + } + } + + // receives a source name. generates a unique name, pushes it, and returns it + Name pushLabelName(Name sName) { + Name name = getPrefixedName(sName); + labelStack.push_back(name); + labelMappings[sName].push_back(name); + reverseLabelMapping[name] = sName; + return name; + } + + void popLabelName(Name name) { + assert(labelStack.back() == name); + labelStack.pop_back(); + labelMappings[reverseLabelMapping[name]].pop_back(); + } + + Name sourceToUnique(Name sName) { + if (labelMappings.find(sName) == labelMappings.end()) { + throw ParseException("bad label in sourceToUnique"); + } + if (labelMappings[sName].empty()) { + throw ParseException("use of popped label in sourceToUnique"); + } + return labelMappings[sName].back(); + } + + Name uniqueToSource(Name name) { + if (reverseLabelMapping.find(name) == reverseLabelMapping.end()) { + throw ParseException("label mismatch in uniqueToSource"); + } + return reverseLabelMapping[name]; + } + + void clear() { + labelStack.clear(); + labelMappings.clear(); + reverseLabelMapping.clear(); + } + + // Given an expression, ensures all names are unique + static void uniquify(Expression* curr) { + struct Walker : public ControlFlowWalker> { + UniqueNameMapper mapper; + + static void doPreVisitControlFlow(Walker* self, Expression** currp) { + auto* curr = *currp; + if (auto* block = curr->dynCast()) { + if (block->name.is()) block->name = self->mapper.pushLabelName(block->name); + } else if (auto* loop = curr->dynCast()) { + if (loop->name.is()) loop->name = self->mapper.pushLabelName(loop->name); + } + } + static void doPostVisitControlFlow(Walker* self, Expression** currp) { + auto* curr = *currp; + if (auto* block = curr->dynCast()) { + if (block->name.is()) self->mapper.popLabelName(block->name); + } else if (auto* loop = curr->dynCast()) { + if (loop->name.is()) self->mapper.popLabelName(loop->name); + } + } + + void visitBreak(Break *curr) { + curr->name = mapper.sourceToUnique(curr->name); + } + void visitSwitch(Switch *curr) { + for (auto& target : curr->targets) { + target = mapper.sourceToUnique(target); + } + curr->default_ = mapper.sourceToUnique(curr->default_); + } + }; + + Walker walker; + walker.walk(curr); + } +}; + +} // namespace wasm + +#endif // wasm_parsing_h diff --git a/src/binaryen/src/pass.h b/src/binaryen/src/pass.h new file mode 100644 index 0000000000..236878a1ad --- /dev/null +++ b/src/binaryen/src/pass.h @@ -0,0 +1,271 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_pass_h +#define wasm_pass_h + +#include + +#include "wasm.h" +#include "wasm-traversal.h" +#include "mixed_arena.h" +#include "support/utilities.h" + +namespace wasm { + +class Pass; + +// +// Global registry of all passes in /passes/ +// +struct PassRegistry { + PassRegistry(); + + static PassRegistry* get(); + + typedef std::function Creator; + + void registerPass(const char* name, const char *description, Creator create); + Pass* createPass(std::string name); + std::vector getRegisteredNames(); + std::string getPassDescription(std::string name); + +private: + void registerPasses(); + + struct PassInfo { + std::string description; + Creator create; + PassInfo() {} + PassInfo(std::string description, Creator create) : description(description), create(create) {} + }; + std::map passInfos; +}; + +struct PassOptions { + bool debug = false; // run passes in debug mode, doing extra validation and timing checks + bool validateGlobally = false; // when validating validate globally and not just locally + int optimizeLevel = 0; // 0, 1, 2 correspond to -O0, -O1, -O2, etc. + int shrinkLevel = 0; // 0, 1, 2 correspond to -O0, -Os, -Oz + bool ignoreImplicitTraps = false; // optimize assuming things like div by 0, bad load/store, will not trap + bool debugInfo = false; // whether to try to preserve debug info through, which are special calls + FeatureSet features = Feature::MVP; // Which wasm features to accept, and be allowed to use +}; + +// +// Runs a set of passes, in order +// +struct PassRunner { + Module* wasm; + MixedArena* allocator; + std::vector passes; + PassOptions options; + + PassRunner(Module* wasm) : wasm(wasm), allocator(&wasm->allocator) {} + PassRunner(Module* wasm, PassOptions options) : wasm(wasm), allocator(&wasm->allocator), options(options) {} + + // no copying, we control |passes| + PassRunner(const PassRunner&) = delete; + PassRunner& operator=(const PassRunner&) = delete; + + void setDebug(bool debug_) { + options.debug = debug_; + options.validateGlobally = debug_; // validate everything by default if debugging + } + void setValidateGlobally(bool validate) { + options.validateGlobally = validate; + } + void setFeatures(FeatureSet features) { + options.features = features; + } + + void add(std::string passName) { + auto pass = PassRegistry::get()->createPass(passName); + if (!pass) Fatal() << "Could not find pass: " << passName << "\n"; + doAdd(pass); + } + + template + void add() { + doAdd(new P()); + } + + template + void add(Arg arg){ + doAdd(new P(arg)); + } + + // Adds the default set of optimization passes; this is + // what -O does. + void addDefaultOptimizationPasses(); + + // Adds the default optimization passes that work on + // individual functions. + void addDefaultFunctionOptimizationPasses(); + + // Adds the default optimization passes that work on + // entire modules as a whole, and make sense to + // run before function passes. + void addDefaultGlobalOptimizationPrePasses(); + + // Adds the default optimization passes that work on + // entire modules as a whole, and make sense to + // run after function passes. + void addDefaultGlobalOptimizationPostPasses(); + + // Run the passes on the module + void run(); + + // Run the passes on a specific function + void runFunction(Function* func); + + // Get the last pass that was already executed of a certain type. + template + P* getLast(); + + ~PassRunner(); + + // When running a pass runner within another pass runner, this + // flag should be set. This influences how pass debugging works, + // and may influence other things in the future too. + void setIsNested(bool nested) { + isNested = nested; + } + + // BINARYEN_PASS_DEBUG is a convenient commandline way to log out the toplevel passes, their times, + // and validate between each pass. + // (we don't recurse pass debug into sub-passes, as it doesn't help anyhow and + // also is bad for e.g. printing which is a pass) + // this method returns whether we are in passDebug mode, and which value: + // 1: run pass by pass, validating in between + // 2: also save the last pass, so it breakage happens we can print the last one + // 3: also dump out byn-* files for each pass + static int getPassDebug(); + +protected: + bool isNested = false; + +private: + void doAdd(Pass* pass); + + void runPassOnFunction(Pass* pass, Function* func); +}; + +// +// Core pass class +// +class Pass { +public: + virtual ~Pass() {}; + + // Override this to perform preparation work before the pass runs. + // This will be called before the pass is run on a module. + virtual void prepareToRun(PassRunner* runner, Module* module) {} + + // Implement this with code to run the pass on the whole module + virtual void run(PassRunner* runner, Module* module) { + WASM_UNREACHABLE(); + } + + // Implement this with code to run the pass on a single function, for + // a function-parallel pass + virtual void runFunction(PassRunner* runner, Module* module, Function* function) { + WASM_UNREACHABLE(); + } + + // Function parallelism. By default, passes are not run in parallel, but you + // can override this method to say that functions are parallelizable. This + // should always be safe *unless* you do something in the pass that makes it + // not thread-safe; in other words, the Module and Function objects and + // so forth are set up so that Functions can be processed in parallel, so + // if you do not ad global state that could be raced on, your pass could be + // function-parallel. + // + // Function-parallel passes create an instance of the Walker class per function. + // That means that you can't rely on Walker object properties to persist across + // your functions, and you can't expect a new object to be created for each + // function either (which could be very inefficient). + virtual bool isFunctionParallel() { return false; } + + // This method is used to create instances per function for a function-parallel + // pass. You may need to override this if you subclass a Walker, as otherwise + // this will create the parent class. + virtual Pass* create() { WASM_UNREACHABLE(); } + + std::string name; + +protected: + Pass() {} + Pass(Pass &) {} + Pass &operator=(const Pass&) = delete; +}; + +// +// Core pass class that uses AST walking. This class can be parameterized by +// different types of AST walkers. +// +template +class WalkerPass : public Pass, public WalkerType { + PassRunner *runner; + +protected: + typedef WalkerPass super; + +public: + void run(PassRunner* runner, Module* module) override { + setPassRunner(runner); + WalkerType::setModule(module); + WalkerType::walkModule(module); + } + + void runFunction(PassRunner* runner, Module* module, Function* func) override { + setPassRunner(runner); + WalkerType::setModule(module); + WalkerType::walkFunction(func); + } + + PassRunner* getPassRunner() { + return runner; + } + + PassOptions& getPassOptions() { + return runner->options; + } + + void setPassRunner(PassRunner* runner_) { + runner = runner_; + } +}; + +// Standard passes. All passes in /passes/ are runnable from the shell, +// but registering them here in addition allows them to communicate +// e.g. through PassRunner::getLast + +// Prints out a module +class Printer : public Pass { +protected: + std::ostream& o; + +public: + Printer() : o(std::cout) {} + Printer(std::ostream* o) : o(*o) {} + + void run(PassRunner* runner, Module* module) override; +}; + +} // namespace wasm + +#endif // wasm_pass_h diff --git a/src/binaryen/src/passes/CMakeLists.txt b/src/binaryen/src/passes/CMakeLists.txt new file mode 100644 index 0000000000..168af27610 --- /dev/null +++ b/src/binaryen/src/passes/CMakeLists.txt @@ -0,0 +1,44 @@ +SET(passes_SOURCES + pass.cpp + CoalesceLocals.cpp + CodePushing.cpp + CodeFolding.cpp + ConstHoisting.cpp + DeadCodeElimination.cpp + DuplicateFunctionElimination.cpp + ExtractFunction.cpp + Flatten.cpp + Inlining.cpp + LegalizeJSInterface.cpp + LocalCSE.cpp + LogExecution.cpp + I64ToI32Lowering.cpp + InstrumentLocals.cpp + InstrumentMemory.cpp + MemoryPacking.cpp + MergeBlocks.cpp + Metrics.cpp + NameList.cpp + OptimizeInstructions.cpp + PickLoadSigns.cpp + PostEmscripten.cpp + Precompute.cpp + Print.cpp + PrintCallGraph.cpp + RelooperJumpThreading.cpp + ReReloop.cpp + RemoveImports.cpp + RemoveMemory.cpp + RemoveUnusedBrs.cpp + RemoveUnusedNames.cpp + RemoveUnusedModuleElements.cpp + ReorderLocals.cpp + ReorderFunctions.cpp + TrapMode.cpp + SafeHeap.cpp + SimplifyLocals.cpp + SSAify.cpp + Untee.cpp + Vacuum.cpp +) +ADD_LIBRARY(passes STATIC ${passes_SOURCES}) diff --git a/src/binaryen/src/passes/CoalesceLocals.cpp b/src/binaryen/src/passes/CoalesceLocals.cpp new file mode 100644 index 0000000000..36c963b082 --- /dev/null +++ b/src/binaryen/src/passes/CoalesceLocals.cpp @@ -0,0 +1,828 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +// +// Coalesce locals, in order to reduce the total number of locals. This +// is similar to register allocation, however, there is never any +// spilling, and there isn't a fixed number of locals. +// + + +#include +#include +#include + +#include "wasm.h" +#include "pass.h" +#include "ir/utils.h" +#include "cfg/cfg-traversal.h" +#include "wasm-builder.h" +#include "support/learning.h" +#include "support/permutations.h" +#ifdef CFG_PROFILE +#include "support/timing.h" +#endif + +namespace wasm { + +// A set of locals. This is optimized for comparisons, +// mergings, and iteration on elements, assuming that there +// may be a great many potential elements but actual sets +// may be fairly small. Specifically, we use a sorted +// vector. +struct LocalSet : std::vector { + LocalSet() {} + + LocalSet merge(const LocalSet& other) const { + LocalSet ret; + ret.resize(size() + other.size()); + Index i = 0, j = 0, t = 0; + while (i < size() && j < other.size()) { + auto left = (*this)[i]; + auto right = other[j]; + if (left < right) { + ret[t++] = left; + i++; + } else if (left > right) { + ret[t++] = right; + j++; + } else { + ret[t++] = left; + i++; + j++; + } + } + while (i < size()) { + ret[t++] = (*this)[i]; + i++; + } + while (j < other.size()) { + ret[t++] = other[j]; + j++; + } + ret.resize(t); + return ret; + } + + void insert(Index x) { + auto it = std::lower_bound(begin(), end(), x); + if (it == end()) push_back(x); + else if (*it > x) { + Index i = it - begin(); + resize(size() + 1); + std::move_backward(begin() + i, begin() + size() - 1, end()); + (*this)[i] = x; + } + } + + bool erase(Index x) { + auto it = std::lower_bound(begin(), end(), x); + if (it != end() && *it == x) { + std::move(it + 1, end(), it); + resize(size() - 1); + return true; + } + return false; + } + + bool has(Index x) { + auto it = std::lower_bound(begin(), end(), x); + return it != end() && *it == x; + } + + void verify() const { + for (Index i = 1; i < size(); i++) { + assert((*this)[i - 1] < (*this)[i]); + } + } + + void dump(const char* str = nullptr) const { + std::cout << "LocalSet " << (str ? str : "") << ": "; + for (auto x : *this) std::cout << x << " "; + std::cout << '\n'; + } +}; + +// a liveness-relevant action +struct Action { + enum What { + Get, Set + }; + What what; + Index index; // the local index read or written + Expression** origin; // the origin + bool effective; // whether a store is actually effective, i.e., may be read + + Action(What what, Index index, Expression** origin) : what(what), index(index), origin(origin), effective(false) {} + + bool isGet() { return what == Get; } + bool isSet() { return what == Set; } +}; + +// information about liveness in a basic block +struct Liveness { + LocalSet start, end; // live locals at the start and end + std::vector actions; // actions occurring in this block + + void dump(Function* func) { + if (actions.empty()) return; + std::cout << " actions:\n"; + for (auto& action : actions) { + std::cout << " " << (action.isGet() ? "get" : "set") << " " << func->getLocalName(action.index) << "\n"; + } + } +}; + +struct CoalesceLocals : public WalkerPass, Liveness>> { + bool isFunctionParallel() override { return true; } + + Pass* create() override { return new CoalesceLocals; } + + Index numLocals; + + // cfg traversal work + + static void doVisitGetLocal(CoalesceLocals* self, Expression** currp) { + auto* curr = (*currp)->cast(); + // if in unreachable code, ignore + if (!self->currBasicBlock) { + *currp = Builder(*self->getModule()).replaceWithIdenticalType(curr); + return; + } + self->currBasicBlock->contents.actions.emplace_back(Action::Get, curr->index, currp); + } + + static void doVisitSetLocal(CoalesceLocals* self, Expression** currp) { + auto* curr = (*currp)->cast(); + // if in unreachable code, we don't need the tee (but might need the value, if it has side effects) + if (!self->currBasicBlock) { + if (curr->isTee()) { + *currp = curr->value; + } else { + *currp = Builder(*self->getModule()).makeDrop(curr->value); + } + return; + } + self->currBasicBlock->contents.actions.emplace_back(Action::Set, curr->index, currp); + // if this is a copy, note it + if (auto* get = self->getCopy(curr)) { + // add 2 units, so that backedge prioritization can decide ties, but not much more + self->addCopy(curr->index, get->index); + self->addCopy(curr->index, get->index); + } + } + + // A simple copy is a set of a get. A more interesting copy + // is a set of an if with a value, where one side a get. + // That can happen when we create an if value in simplify-locals. TODO: recurse into + // nested ifs, and block return values? Those cases are trickier, need to + // count to see if worth it. + // TODO: an if can have two copies + GetLocal* getCopy(SetLocal* set) { + if (auto* get = set->value->dynCast()) return get; + if (auto* iff = set->value->dynCast()) { + if (auto* get = iff->ifTrue->dynCast()) return get; + if (iff->ifFalse) { + if (auto* get = iff->ifFalse->dynCast()) return get; + } + } + return nullptr; + } + + // main entry point + + void doWalkFunction(Function* func); + + void increaseBackEdgePriorities(); + + void flowLiveness(); + + void calculateInterferences(); + + void calculateInterferences(const LocalSet& locals); + + // merge starts of a list of blocks, adding new interferences as necessary. return + // whether anything changed vs an old state (which indicates further processing is necessary). + bool mergeStartsAndCheckChange(std::vector& blocks, LocalSet& old, LocalSet& ret); + + void scanLivenessThroughActions(std::vector& actions, LocalSet& live); + + void pickIndicesFromOrder(std::vector& order, std::vector& indices); + void pickIndicesFromOrder(std::vector& order, std::vector& indices, Index& removedCopies); + + virtual void pickIndices(std::vector& indices); // returns a vector of oldIndex => newIndex + + void applyIndices(std::vector& indices, Expression* root); + + // interference state + + std::vector interferences; // canonicalized - accesses should check (low, high) + std::unordered_set liveBlocks; + + void interfere(Index i, Index j) { + if (i == j) return; + interferences[std::min(i, j) * numLocals + std::max(i, j)] = 1; + } + + void interfereLowHigh(Index low, Index high) { // optimized version where you know that low < high + assert(low < high); + interferences[low * numLocals + high] = 1; + } + + bool interferes(Index i, Index j) { + return interferences[std::min(i, j) * numLocals + std::max(i, j)]; + } + + // copying state + + std::vector copies; // canonicalized - accesses should check (low, high) TODO: use a map for high N, as this tends to be sparse? or don't look at copies at all for big N? + std::vector totalCopies; // total # of copies for each local, with all others + + void addCopy(Index i, Index j) { + auto k = std::min(i, j) * numLocals + std::max(i, j); + copies[k] = std::min(copies[k], uint8_t(254)) + 1; + totalCopies[i]++; + totalCopies[j]++; + } + + uint8_t getCopies(Index i, Index j) { + return copies[std::min(i, j) * numLocals + std::max(i, j)]; + } +}; + +void CoalesceLocals::doWalkFunction(Function* func) { + numLocals = func->getNumLocals(); + copies.resize(numLocals * numLocals); + std::fill(copies.begin(), copies.end(), 0); + totalCopies.resize(numLocals); + std::fill(totalCopies.begin(), totalCopies.end(), 0); + // collect initial liveness info + super::doWalkFunction(func); + // ignore links to dead blocks, so they don't confuse us and we can see their stores are all ineffective + liveBlocks = findLiveBlocks(); + unlinkDeadBlocks(liveBlocks); + // increase the cost of costly backedges + increaseBackEdgePriorities(); +#ifdef CFG_DEBUG + dumpCFG("the cfg"); +#endif + // flow liveness across blocks +#ifdef CFG_PROFILE + static Timer timer("flow"); + timer.start(); +#endif + flowLiveness(); +#ifdef CFG_PROFILE + timer.stop(); + timer.dump(); +#endif + // use liveness to find interference + calculateInterferences(); + // pick new indices + std::vector indices; + pickIndices(indices); + // apply indices + applyIndices(indices, func->body); +} + +// A copy on a backedge can be especially costly, forcing us to branch just to do that copy. +// Add weight to such copies, so we prioritize getting rid of them. +void CoalesceLocals::increaseBackEdgePriorities() { + for (auto* loopTop : loopTops) { + // ignore the first edge, it is the initial entry, we just want backedges + auto& in = loopTop->in; + for (Index i = 1; i < in.size(); i++) { + auto* arrivingBlock = in[i]; + if (arrivingBlock->out.size() > 1) continue; // we just want unconditional branches to the loop top, true phi fragments + for (auto& action : arrivingBlock->contents.actions) { + if (action.what == Action::Set) { + auto* set = (*action.origin)->cast(); + if (auto* get = getCopy(set)) { + // this is indeed a copy, add to the cost (default cost is 2, so this adds 50%, and can mostly break ties) + addCopy(set->index, get->index); + } + } + } + } + } +} + +void CoalesceLocals::flowLiveness() { + interferences.resize(numLocals * numLocals); + std::fill(interferences.begin(), interferences.end(), 0); + // keep working while stuff is flowing + std::unordered_set queue; + for (auto& curr : basicBlocks) { + if (liveBlocks.count(curr.get()) == 0) continue; // ignore dead blocks + queue.insert(curr.get()); + // do the first scan through the block, starting with nothing live at the end, and updating the liveness at the start + scanLivenessThroughActions(curr->contents.actions, curr->contents.start); + } + // at every point in time, we assume we already noted interferences between things already known alive at the end, and scanned back through the block using that + while (queue.size() > 0) { + auto iter = queue.begin(); + auto* curr = *iter; + queue.erase(iter); + LocalSet live; + if (!mergeStartsAndCheckChange(curr->out, curr->contents.end, live)) continue; +#ifdef CFG_DEBUG + std::cout << "change noticed at end of " << debugIds[curr] << " from " << curr->contents.end.size() << " to " << live.size() << " (out of " << numLocals << ")\n"; +#endif + assert(curr->contents.end.size() < live.size()); + curr->contents.end = live; + scanLivenessThroughActions(curr->contents.actions, live); + // liveness is now calculated at the start. if something + // changed, all predecessor blocks need recomputation + if (curr->contents.start == live) continue; +#ifdef CFG_DEBUG + std::cout << "change noticed at start of " << debugIds[curr] << " from " << curr->contents.start.size() << " to " << live.size() << ", more work to do\n"; +#endif + assert(curr->contents.start.size() < live.size()); + curr->contents.start = live; + for (auto* in : curr->in) { + queue.insert(in); + } + } +#ifdef CFG_DEBUG + std::hash> hasher; + std::cout << getFunction()->name << ": interference hash: " << hasher(*(std::vector*)&interferences) << "\n"; + for (Index i = 0; i < numLocals; i++) { + std::cout << "int for " << getFunction()->getLocalName(i) << " [" << i << "]: "; + for (Index j = 0; j < numLocals; j++) { + if (interferes(i, j)) std::cout << getFunction()->getLocalName(j) << " "; + } + std::cout << "\n"; + } +#endif +} + +// merge starts of a list of blocks. return +// whether anything changed vs an old state (which indicates further processing is necessary). +bool CoalesceLocals::mergeStartsAndCheckChange(std::vector& blocks, LocalSet& old, LocalSet& ret) { + if (blocks.size() == 0) return false; + ret = blocks[0]->contents.start; + if (blocks.size() > 1) { + // more than one, so we must merge + for (Index i = 1; i < blocks.size(); i++) { + ret = ret.merge(blocks[i]->contents.start); + } + } + return old != ret; +} + +void CoalesceLocals::scanLivenessThroughActions(std::vector& actions, LocalSet& live) { + // move towards the front + for (int i = int(actions.size()) - 1; i >= 0; i--) { + auto& action = actions[i]; + if (action.isGet()) { + live.insert(action.index); + } else { + live.erase(action.index); + } + } +} + +void CoalesceLocals::calculateInterferences() { + for (auto& curr : basicBlocks) { + if (liveBlocks.count(curr.get()) == 0) continue; // ignore dead blocks + // everything coming in might interfere, as it might come from a different block + auto live = curr->contents.end; + calculateInterferences(live); + // scan through the block itself + auto& actions = curr->contents.actions; + for (int i = int(actions.size()) - 1; i >= 0; i--) { + auto& action = actions[i]; + auto index = action.index; + if (action.isGet()) { + // new live local, interferes with all the rest + live.insert(index); + for (auto i : live) { + interfere(i, index); + } + } else { + if (live.erase(index)) { + action.effective = true; + } + } + } + } + // Params have a value on entry, so mark them as live, as variables + // live at the entry expect their zero-init value. + LocalSet start = entry->contents.start; + auto numParams = getFunction()->getNumParams(); + for (Index i = 0; i < numParams; i++) { + start.insert(i); + } + calculateInterferences(start); +} + +void CoalesceLocals::calculateInterferences(const LocalSet& locals) { + Index size = locals.size(); + for (Index i = 0; i < size; i++) { + for (Index j = i + 1; j < size; j++) { + interfereLowHigh(locals[i], locals[j]); + } + } +} + +// Indices decision making + +void CoalesceLocals::pickIndicesFromOrder(std::vector& order, std::vector& indices) { + Index removedCopies; + pickIndicesFromOrder(order, indices, removedCopies); +} + +void CoalesceLocals::pickIndicesFromOrder(std::vector& order, std::vector& indices, Index& removedCopies) { + // mostly-simple greedy coloring +#if CFG_DEBUG + std::cerr << "\npickIndicesFromOrder on " << getFunction()->name << '\n'; + std::cerr << getFunction()->body << '\n'; + std::cerr << "order:\n"; + for (auto i : order) std::cerr << i << ' '; + std::cerr << '\n'; + std::cerr << "interferences:\n"; + for (Index i = 0; i < numLocals; i++) { + for (Index j = 0; j < i + 1; j++) { + std::cerr << " "; + } + for (Index j = i + 1; j < numLocals; j++) { + std::cerr << int(interferes(i, j)) << ' '; + } + std::cerr << " : $" << i << '\n'; + } + std::cerr << "copies:\n"; + for (Index i = 0; i < numLocals; i++) { + for (Index j = 0; j < i + 1; j++) { + std::cerr << " "; + } + for (Index j = i + 1; j < numLocals; j++) { + std::cerr << int(getCopies(i, j)) << ' '; + } + std::cerr << " : $" << i << '\n'; + } + std::cerr << "total copies:\n"; + for (Index i = 0; i < numLocals; i++) { + std::cerr << " $" << i << ": " << totalCopies[i] << '\n'; + } +#endif + // TODO: take into account distribution (99-1 is better than 50-50 with two registers, for gzip) + std::vector types; + std::vector newInterferences; // new index * numLocals => list of all interferences of locals merged to it + std::vector newCopies; // new index * numLocals => list of all copies of locals merged to it + indices.resize(numLocals); + types.resize(numLocals); + newInterferences.resize(numLocals * numLocals); + std::fill(newInterferences.begin(), newInterferences.end(), 0); + auto numParams = getFunction()->getNumParams(); + newCopies.resize(numParams * numLocals); // start with enough room for the params + std::fill(newCopies.begin(), newCopies.end(), 0); + Index nextFree = 0; + removedCopies = 0; + // we can't reorder parameters, they are fixed in order, and cannot coalesce + Index i = 0; + for (; i < numParams; i++) { + assert(order[i] == i); // order must leave the params in place + indices[i] = i; + types[i] = getFunction()->getLocalType(i); + for (Index j = numParams; j < numLocals; j++) { + newInterferences[numLocals * i + j] = interferes(i, j); + newCopies[numLocals * i + j] = getCopies(i, j); + } + nextFree++; + } + for (; i < numLocals; i++) { + Index actual = order[i]; + Index found = -1; + uint8_t foundCopies = -1; + for (Index j = 0; j < nextFree; j++) { + if (!newInterferences[j * numLocals + actual] && getFunction()->getLocalType(actual) == types[j]) { + // this does not interfere, so it might be what we want. but pick the one eliminating the most copies + // (we could stop looking forward when there are no more items that have copies anyhow, but it doesn't seem to help) + auto currCopies = newCopies[j * numLocals + actual]; + if (found == Index(-1) || currCopies > foundCopies) { + indices[actual] = found = j; + foundCopies = currCopies; + } + } + } + if (found == Index(-1)) { + indices[actual] = found = nextFree; + types[found] = getFunction()->getLocalType(actual); + nextFree++; + removedCopies += getCopies(found, actual); + newCopies.resize(nextFree * numLocals); + } else { + removedCopies += foundCopies; + } +#if CFG_DEBUG + std::cerr << "set local $" << actual << " to $" << found << '\n'; +#endif + // merge new interferences and copies for the new index + for (Index k = i + 1; k < numLocals; k++) { + auto j = order[k]; // go in the order, we only need to update for those we will see later + newInterferences[found * numLocals + j] = newInterferences[found * numLocals + j] | interferes(actual, j); + newCopies[found * numLocals + j] += getCopies(actual, j); + } + } +} + +// given a baseline order, adjust it based on an important order of priorities (higher values +// are higher priority). The priorities take precedence, unless they are equal and then +// the original order should be kept. +std::vector adjustOrderByPriorities(std::vector& baseline, std::vector& priorities) { + std::vector ret = baseline; + std::vector reversed = makeReversed(baseline); + std::sort(ret.begin(), ret.end(), [&priorities, &reversed](Index x, Index y) { + return priorities[x] > priorities[y] || (priorities[x] == priorities[y] && reversed[x] < reversed[y]); + }); + return ret; +}; + +void CoalesceLocals::pickIndices(std::vector& indices) { + if (numLocals == 0) return; + if (numLocals == 1) { + indices.push_back(0); + return; + } + if (getFunction()->getNumVars() <= 1) { + // nothing to think about here, since we can't reorder params + indices = makeIdentity(numLocals); + return; + } + // take into account total copies. but we must keep params in place, so give them max priority + auto adjustedTotalCopies = totalCopies; + auto numParams = getFunction()->getNumParams(); + for (Index i = 0; i < numParams; i++) { + adjustedTotalCopies[i] = std::numeric_limits::max(); + } + // first try the natural order. this is less arbitrary than it seems, as the program + // may have a natural order of locals inherent in it. + auto order = makeIdentity(numLocals); + order = adjustOrderByPriorities(order, adjustedTotalCopies); + Index removedCopies; + pickIndicesFromOrder(order, indices, removedCopies); + auto maxIndex = *std::max_element(indices.begin(), indices.end()); + // next try the reverse order. this both gives us another chance at something good, + // and also the very naturalness of the simple order may be quite suboptimal + setIdentity(order); + for (Index i = numParams; i < numLocals; i++) { + order[i] = numParams + numLocals - 1 - i; + } + order = adjustOrderByPriorities(order, adjustedTotalCopies); + std::vector reverseIndices; + Index reverseRemovedCopies; + pickIndicesFromOrder(order, reverseIndices, reverseRemovedCopies); + auto reverseMaxIndex = *std::max_element(reverseIndices.begin(), reverseIndices.end()); + // prefer to remove copies foremost, as it matters more for code size (minus gzip), and + // improves throughput. + if (reverseRemovedCopies > removedCopies || (reverseRemovedCopies == removedCopies && reverseMaxIndex < maxIndex)) { + indices.swap(reverseIndices); + } +} + +// Remove a copy from a set of an if, where one if arm is a get of the same set +static void removeIfCopy(Expression** origin, SetLocal* set, If* iff, Expression*& copy, Expression*& other, Module* module) { + // replace the origin with the if, and sink the set into the other non-copying arm + bool tee = set->isTee(); + *origin = iff; + set->value = other; + set->finalize(); + other = set; + // if this is not a tee, then we can get rid of the copy in that arm + if (!tee) { + // we don't need the copy at all + copy = nullptr; + if (!iff->ifTrue) { + Builder(*module).flip(iff); + } + iff->finalize(); + } +} + +void CoalesceLocals::applyIndices(std::vector& indices, Expression* root) { + assert(indices.size() == numLocals); + for (auto& curr : basicBlocks) { + auto& actions = curr->contents.actions; + for (auto& action : actions) { + if (action.isGet()) { + auto* get = (*action.origin)->cast(); + get->index = indices[get->index]; + } else { + auto* set = (*action.origin)->cast(); + set->index = indices[set->index]; + // in addition, we can optimize out redundant copies and ineffective sets + GetLocal* get; + if ((get = set->value->dynCast()) && get->index == set->index) { + if (set->isTee()) { + *action.origin = get; + } else { + ExpressionManipulator::nop(set); + } + continue; + } + // remove ineffective actions + if (!action.effective) { + *action.origin = set->value; // value may have no side effects, further optimizations can eliminate it + if (!set->isTee()) { + // we need to drop it + Drop* drop = ExpressionManipulator::convert(set); + drop->value = *action.origin; + *action.origin = drop; + } + continue; + } + if (auto* iff = set->value->dynCast()) { + if (auto* get = iff->ifTrue->dynCast()) { + if (get->index == set->index) { + removeIfCopy(action.origin, set, iff, iff->ifTrue, iff->ifFalse, getModule()); + continue; + } + } + if (auto* get = iff->ifFalse->dynCast()) { + if (get->index == set->index) { + removeIfCopy(action.origin, set, iff, iff->ifFalse, iff->ifTrue, getModule()); + continue; + } + } + } + } + } + } + // update type list + auto numParams = getFunction()->getNumParams(); + Index newNumLocals = 0; + for (auto index : indices) { + newNumLocals = std::max(newNumLocals, index + 1); + } + auto oldVars = getFunction()->vars; + getFunction()->vars.resize(newNumLocals - numParams); + for (Index index = numParams; index < numLocals; index++) { + Index newIndex = indices[index]; + if (newIndex >= numParams) { + getFunction()->vars[newIndex - numParams] = oldVars[index - numParams]; + } + } + // names are gone + getFunction()->localNames.clear(); + getFunction()->localIndices.clear(); +} + +struct CoalesceLocalsWithLearning : public CoalesceLocals { + virtual Pass* create() override { return new CoalesceLocalsWithLearning; } + + virtual void pickIndices(std::vector& indices) override; +}; + +void CoalesceLocalsWithLearning::pickIndices(std::vector& indices) { + if (getFunction()->getNumVars() <= 1) { + // nothing to think about here + CoalesceLocals::pickIndices(indices); + return; + } + + struct Order : public std::vector { + void setFitness(double f) { fitness = f; } + double getFitness() { return fitness; } + void dump(std::string text) { + std::cout << text + ": ( "; + for (Index i = 0; i < size(); i++) std::cout << (*this)[i] << " "; + std::cout << ")\n"; + std::cout << "of quality: " << getFitness() << "\n"; + } + private: + double fitness; + }; + + struct Generator { + Generator(CoalesceLocalsWithLearning* parent) : parent(parent), noise(42) {} + + void calculateFitness(Order* order) { + // apply the order + std::vector indices; // the phenotype + Index removedCopies; + parent->pickIndicesFromOrder(*order, indices, removedCopies); + auto maxIndex = *std::max_element(indices.begin(), indices.end()); + assert(maxIndex <= parent->numLocals); + // main part of fitness is the number of locals + double fitness = parent->numLocals - maxIndex; // higher fitness is better + // secondarily, it is nice to not reorder locals unnecessarily + double fragment = 1.0 / (2.0 * parent->numLocals); + for (Index i = 0; i < parent->numLocals; i++) { + if ((*order)[i] == i) fitness += fragment; // boost for each that wasn't moved + } + fitness = (100 * fitness) + removedCopies; // removing copies is a secondary concern + order->setFitness(fitness); + } + + Order* makeRandom() { + auto* ret = new Order; + ret->resize(parent->numLocals); + for (Index i = 0; i < parent->numLocals; i++) { + (*ret)[i] = i; + } + if (first) { + // as the first guess, use the natural order. this is not arbitrary for two reasons. + // first, there may be an inherent order in the input (frequent indices are lower, + // etc.). second, by ensuring we start with the natural order, we ensure we are at + // least as good as the non-learning variant. + // TODO: use ::pickIndices from the parent, so we literally get the simpler approach + // as our first option + first = false; + } else { + // leave params alone, shuffle the rest + std::shuffle(ret->begin() + parent->getFunction()->getNumParams(), ret->end(), noise); + } + calculateFitness(ret); +#ifdef CFG_LEARN_DEBUG + order->dump("new rando"); +#endif + return ret; + } + + Order* makeMixture(Order* left, Order* right) { + // perturb left using right. this is useful since + // we don't care about absolute locations, relative ones matter more, + // and a true merge of two vectors could obscure that (e.g. + // a.......... and ..........a would merge a into the middle, for no + // reason), and cause a lot of unnecessary noise + Index size = left->size(); + Order reverseRight; // reverseRight[x] is the index of x in right + reverseRight.resize(size); + for (Index i = 0; i < size; i++) { + reverseRight[(*right)[i]] = i; + } + auto* ret = new Order; + *ret = *left; + assert(size >= 1); + for (Index i = parent->getFunction()->getNumParams(); i < size - 1; i++) { + // if (i, i + 1) is in reverse order in right, flip them + if (reverseRight[(*ret)[i]] > reverseRight[(*ret)[i + 1]]) { + std::swap((*ret)[i], (*ret)[i + 1]); + i++; // if we don't skip, we might end up pushing an element all the way to the end, which is not very perturbation-y + } + } + calculateFitness(ret); +#ifdef CFG_LEARN_DEBUG + ret->dump("new mixture"); +#endif + return ret; + } + + private: + CoalesceLocalsWithLearning* parent; + std::mt19937 noise; + bool first = true; + }; + +#ifdef CFG_LEARN_DEBUG + std::cout << "[learning for " << getFunction()->name << "]\n"; +#endif + auto numVars = this->getFunction()->getNumVars(); + const int GENERATION_SIZE = std::min(Index(numVars * (numVars - 1)), Index(20)); + Generator generator(this); + GeneticLearner learner(generator, GENERATION_SIZE); +#ifdef CFG_LEARN_DEBUG + learner.getBest()->dump("first best"); +#endif + // keep working while we see improvement + auto oldBest = learner.getBest()->getFitness(); + while (1) { + learner.runGeneration(); + auto newBest = learner.getBest()->getFitness(); + if (newBest == oldBest) break; // unlikely we can improve + oldBest = newBest; +#ifdef CFG_LEARN_DEBUG + learner.getBest()->dump("current best"); +#endif + } +#ifdef CFG_LEARN_DEBUG + learner.getBest()->dump("the best"); +#endif + this->pickIndicesFromOrder(*learner.getBest(), indices); // TODO: cache indices in Orders, at the cost of more memory? +} + +// declare passes + +Pass *createCoalesceLocalsPass() { + return new CoalesceLocals(); +} + +Pass *createCoalesceLocalsWithLearningPass() { + return new CoalesceLocalsWithLearning(); +} + +} // namespace wasm diff --git a/src/binaryen/src/passes/CodeFolding.cpp b/src/binaryen/src/passes/CodeFolding.cpp new file mode 100644 index 0000000000..afcd3515ca --- /dev/null +++ b/src/binaryen/src/passes/CodeFolding.cpp @@ -0,0 +1,616 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Folds duplicate code together, saving space. +// +// We fold tails of code where they merge and moving the code +// to the merge point is helpful. There are two cases here: (1) expressions, +// in which we merge to right after the expression itself, in these cases: +// * blocks, we merge the fallthrough + the breaks +// * if-else, we merge the arms +// and (2) the function body as a whole, in which we can merge returns or +// unreachables, putting the merged code at the end of the function body. +// +// For example, with an if-else, we might merge this: +// (if (condition) +// (block +// A +// C +// ) +// (block +// B +// C +// ) +// ) +// to +// (if (condition) +// (block +// A +// ) +// (block +// B +// ) +// ) +// C +// +// Note that the merged code, C in the example above, can be anything, +// including code with control flow. If C is identical in all the locations, +// then it must be safe to merge (if it contains a branch to something +// higher up, then since our branch target names are unique, it must be +// to the same thing, and after merging it can still reach it). +// + +#include + +#include "wasm.h" +#include "pass.h" +#include "wasm-builder.h" +#include "ir/utils.h" +#include "ir/branch-utils.h" +#include "ir/effects.h" +#include "ir/label-utils.h" + +namespace wasm { + +static const Index WORTH_ADDING_BLOCK_TO_REMOVE_THIS_MUCH = 3; + +struct ExpressionMarker : public PostWalker> { + std::set& marked; + + ExpressionMarker(std::set& marked, Expression* expr) : marked(marked) { + walk(expr); + } + + void visitExpression(Expression* expr) { + marked.insert(expr); + } +}; + +struct CodeFolding : public WalkerPass> { + bool isFunctionParallel() override { return true; } + + Pass* create() override { return new CodeFolding; } + + // information about a "tail" - code that reaches a point that we can + // merge (e.g., a branch and some code leading up to it) + struct Tail { + Expression* expr; // nullptr if this is a fallthrough + Block* block; // the enclosing block of code we hope to merge at its tail + Expression** pointer; // for an expr with no parent block, the location it is at, so we can replace it + + // For a fallthrough + Tail(Block* block) : expr(nullptr), block(block), pointer(nullptr) {} + // For a break + Tail(Expression* expr, Block* block) : expr(expr), block(block), pointer(nullptr) { + validate(); + } + Tail(Expression* expr, Expression** pointer) : expr(expr), block(nullptr), pointer(pointer) {} + + bool isFallthrough() const { return expr == nullptr; } + + void validate() const { + if (expr && block) { + assert(block->list.back() == expr); + } + } + }; + + // state + + bool anotherPass; + + // pass state + + std::map> breakTails; // break target name => tails that reach it + std::vector unreachableTails; // tails leading to (unreachable) + std::vector returnTails; // tails leading to (return) + std::set unoptimizables; // break target names that we can't handle + std::set modifieds; // modified code should not be processed again, wait for next pass + + // walking + + void visitBreak(Break* curr) { + if (curr->condition || curr->value) { + unoptimizables.insert(curr->name); + } else { + // we can only optimize if we are at the end of the parent block + Block* parent = controlFlowStack.back()->dynCast(); + if (parent && curr == parent->list.back()) { + breakTails[curr->name].push_back(Tail(curr, parent)); + } else { + unoptimizables.insert(curr->name); + } + } + } + + void visitSwitch(Switch* curr) { + for (auto target : curr->targets) { + unoptimizables.insert(target); + } + unoptimizables.insert(curr->default_); + } + + void visitUnreachable(Unreachable* curr) { + // we can only optimize if we are at the end of the parent block + if (!controlFlowStack.empty()) { + Block* parent = controlFlowStack.back()->dynCast(); + if (parent && curr == parent->list.back()) { + unreachableTails.push_back(Tail(curr, parent)); + } + } + } + + void visitReturn(Return* curr) { + if (!controlFlowStack.empty()) { + // we can easily optimize if we are at the end of the parent block + Block* parent = controlFlowStack.back()->dynCast(); + if (parent && curr == parent->list.back()) { + returnTails.push_back(Tail(curr, parent)); + return; + } + } + // otherwise, if we have a large value, it might be worth optimizing us as well + returnTails.push_back(Tail(curr, getCurrentPointer())); + } + + void visitBlock(Block* curr) { + if (!curr->name.is()) return; + if (unoptimizables.count(curr->name) > 0) return; + auto iter = breakTails.find(curr->name); + if (iter == breakTails.end()) return; + // looks promising + auto& tails = iter->second; + // see if there is a fallthrough + bool hasFallthrough = true; + for (auto* child : curr->list) { + if (child->type == unreachable) { + hasFallthrough = false; + } + } + if (hasFallthrough) { + tails.push_back({ Tail(curr) }); + } + optimizeExpressionTails(tails, curr); + } + + void visitIf(If* curr) { + if (!curr->ifFalse) return; + // if both sides are identical, this is easy to fold + // (except if the condition is unreachable and we return a value, then we can't just replace + // outselves with a drop + if (ExpressionAnalyzer::equal(curr->ifTrue, curr->ifFalse)) { + Builder builder(*getModule()); + // remove if (4 bytes), remove one arm, add drop (1), add block (3), + // so this must be a net savings + markAsModified(curr); + auto* ret = builder.makeSequence( + builder.makeDrop(curr->condition), + curr->ifTrue + ); + // we must ensure we present the same type as the if had + ret->finalize(curr->type); + replaceCurrent(ret); + } else { + // if both are blocks, look for a tail we can merge + auto* left = curr->ifTrue->dynCast(); + auto* right = curr->ifFalse->dynCast(); + // we need nameless blocks, as if there is a name, someone might branch + // to the end, skipping the code we want to merge + if (left && right && + !left->name.is() && !right->name.is()) { + std::vector tails = { Tail(left), Tail(right) }; + optimizeExpressionTails(tails, curr); + } + } + } + + void doWalkFunction(Function* func) { + anotherPass = true; + while (anotherPass) { + anotherPass = false; + super::doWalkFunction(func); + optimizeTerminatingTails(unreachableTails); + // optimize returns at the end, so we can benefit from a fallthrough if there is a value TODO: separate passes for them? + optimizeTerminatingTails(returnTails); + // TODO add fallthrough for returns + // TODO optimize returns not in blocks, a big return value can be worth it + // clean up + breakTails.clear(); + unreachableTails.clear(); + returnTails.clear(); + unoptimizables.clear(); + modifieds.clear(); + // if we did any work, types may need to be propagated + if (anotherPass) { + ReFinalize().walkFunctionInModule(func, getModule()); + } + } + } + +private: + // check if we can move a list of items out of another item. we can't do so + // if one of the items has a branch to something inside outOf that is not + // inside that item + bool canMove(const std::vector& items, Expression* outOf) { + auto allTargets = BranchUtils::getBranchTargets(outOf); + for (auto* item : items) { + auto exiting = BranchUtils::getExitingBranches(item); + std::vector intersection; + std::set_intersection(allTargets.begin(), allTargets.end(), exiting.begin(), exiting.end(), + std::back_inserter(intersection)); + if (intersection.size() > 0) { + // anything exiting that is in all targets is something bad + return false; + } + } + return true; + } + + // optimize tails that reach the outside of an expression. code that is identical in all + // paths leading to the block exit can be merged. + template + void optimizeExpressionTails(std::vector& tails, T* curr) { + if (tails.size() < 2) return; + // see if anything is untoward, and we should not do this + for (auto& tail : tails) { + if (tail.expr && modifieds.count(tail.expr) > 0) return; + if (modifieds.count(tail.block) > 0) return; + // if we were not modified, then we should be valid for processing + tail.validate(); + } + // we can ignore the final br in a tail + auto effectiveSize = [&](const Tail& tail) { + auto ret = tail.block->list.size(); + if (!tail.isFallthrough()) { + ret--; + } + return ret; + }; + // the mergeable items do not include the final br in a tail + auto getMergeable = [&](const Tail& tail, Index num) { + return tail.block->list[effectiveSize(tail) - num - 1]; + }; + // we are going to remove duplicate elements and add a block. + // so for this to make sense, we need the size of the duplicate + // elements to be worth that extra block (although, there is + // some chance the block would get merged higher up, see later) + std::vector mergeable; // the elements we can merge + Index num = 0; // how many elements back from the tail to look at + Index saved = 0; // how much we can save + while (1) { + // check if this num is still relevant + bool stop = false; + for (auto& tail : tails) { + assert(tail.block); + if (num >= effectiveSize(tail)) { + // one of the lists is too short + stop = true; + break; + } + } + if (stop) break; + auto* item = getMergeable(tails[0], num); + for (auto& tail : tails) { + if (!ExpressionAnalyzer::equal(item, getMergeable(tail, num))) { + // one of the lists has a different item + stop = true; + break; + } + } + if (stop) break; + // we may have found another one we can merge - can we move it? + if (!canMove({ item }, curr)) break; + // we found another one we can merge + mergeable.push_back(item); + num++; + saved += Measurer::measure(item); + } + if (saved == 0) return; + // we may be able to save enough. + if (saved < WORTH_ADDING_BLOCK_TO_REMOVE_THIS_MUCH) { + // it's not obvious we can save enough. see if we get rid + // of a block, that would justify this + bool willEmptyBlock = false; + for (auto& tail : tails) { + // it is enough to zero out the block, or leave just one + // element, as then the block can be replaced with that + if (num >= tail.block->list.size() - 1) { + willEmptyBlock = true; + break; + } + } + if (!willEmptyBlock) { + // last chance, if our parent is a block, then it should be + // fine to create a new block here, it will be merged up + assert(curr == controlFlowStack.back()); // we are an if or a block, at the top + if (controlFlowStack.size() <= 1) { + return; // no parent at all + // TODO: if we are the toplevel in the function, then in the binary format + // we might avoid emitting a block, so the same logic applies here? + } + auto* parent = controlFlowStack[controlFlowStack.size() - 2]->dynCast(); + if (!parent) { + return; // parent is not a block + } + bool isChild = false; + for (auto* child : parent->list) { + if (child == curr) { + isChild = true; + break; + } + } + if (!isChild) { + return; // not a child, something in between + } + } + } + // this is worth doing, do it! + for (auto& tail : tails) { + // remove the items we are merging / moving + // first, mark them as modified, so we don't try to handle them + // again in this pass, which might be buggy + markAsModified(tail.block); + // we must preserve the br if there is one + Expression* last = nullptr; + if (!tail.isFallthrough()) { + last = tail.block->list.back(); + tail.block->list.pop_back(); + } + for (Index i = 0; i < mergeable.size(); i++) { + tail.block->list.pop_back(); + } + if (!tail.isFallthrough()) { + tail.block->list.push_back(last); + } + // the block type may change if we removed final values + tail.block->finalize(); + } + // since we managed a merge, then it might open up more opportunities later + anotherPass = true; + // make a block with curr + the merged code + Builder builder(*getModule()); + auto* block = builder.makeBlock(); + block->list.push_back(curr); + while (!mergeable.empty()) { + block->list.push_back(mergeable.back()); + mergeable.pop_back(); + } + auto oldType = curr->type; + // NB: we template-specialize so that this calls the proper finalizer for + // the type + curr->finalize(); + // ensure the replacement has the same type, so the outside is not surprised + block->finalize(oldType); + replaceCurrent(block); + } + + // optimize tails that terminate control flow in this function, so we + // are (1) merge just a few of them, we don't need all like with the + // branches to a block, and (2) we do it on the function body. + // num is the depth, i.e., how many tail items we can merge. 0 means + // we are just starting; num > 0 means that tails is guaranteed to be + // equal in the last num items, so we can merge there, but we look for + // deeper merges first. + // returns whether we optimized something. + bool optimizeTerminatingTails(std::vector& tails, Index num = 0) { + if (tails.size() < 2) return false; + // remove things that are untoward and cannot be optimized + tails.erase(std::remove_if(tails.begin(), tails.end(), [&](Tail& tail) { + if (tail.expr && modifieds.count(tail.expr) > 0) return true; + if (tail.block && modifieds.count(tail.block) > 0) return true; + // if we were not modified, then we should be valid for processing + tail.validate(); + return false; + }), tails.end()); + // now let's try to find subsets that are mergeable. we don't look hard + // for the most optimal; further passes may find more + // effectiveSize: TODO: special-case fallthrough, matters for returns + auto effectiveSize = [&](Tail& tail) -> Index { + if (tail.block) { + return tail.block->list.size(); + } else { + return 1; + } + }; + // getItem: returns the relevant item from the tail. this includes the + // final item + // TODO: special-case fallthrough, matters for returns + auto getItem = [&](Tail& tail, Index num) { + if (tail.block) { + return tail.block->list[effectiveSize(tail) - num - 1]; + } else { + return tail.expr; + } + }; + // gets the tail elements of a certain depth + auto getTailItems = [&](Index num, std::vector& tails) { + std::vector items; + for (Index i = 0; i < num; i++) { + auto item = getItem(tails[0], i); + items.push_back(item); + } + return items; + }; + // estimate if a merging is worth the cost + auto worthIt = [&](Index num, std::vector& tails) { + auto items = getTailItems(num, tails); // the elements we can merge + Index saved = 0; // how much we can save + for (auto* item : items) { + saved += Measurer::measure(item) * (tails.size() - 1); + } + // compure the cost: in non-fallthroughs, we are replacing the final + // element with a br; for a fallthrough, if there is one, we must + // add a return element (for the function body, so it doesn't reach us) + // TODO: handle fallthroughts for return + Index cost = tails.size(); + // we also need to add two blocks: for us to break to, and to contain + // that block and the merged code. very possibly one of the blocks + // can be removed, though + cost += WORTH_ADDING_BLOCK_TO_REMOVE_THIS_MUCH; + // if we cannot merge to the end, then we definitely need 2 blocks, + // and a branch + if (!canMove(items, getFunction()->body)) { // TODO: efficiency, entire body + cost += 1 + WORTH_ADDING_BLOCK_TO_REMOVE_THIS_MUCH; + // TODO: to do this, we need to maintain a map of element=>parent, + // so that we can insert the new blocks in the right place + // for now, just don't do this optimization + return false; + } + // is it worth it? + return saved > cost; + }; + // let's see if we can merge deeper than num, to num + 1 + auto next = tails; + // remove tails that are too short, or that we hit an item we can't handle + next.erase(std::remove_if(next.begin(), next.end(), [&](Tail& tail) { + if (effectiveSize(tail) < num + 1) return true; + auto* newItem = getItem(tail, num); + // ignore tails that break to outside blocks. we want to move code to + // the very outermost position, so such code cannot be moved + // TODO: this should not be a problem in *non*-terminating tails, + // but double-verify that + if (EffectAnalyzer(getPassOptions(), newItem).hasExternalBreakTargets()) { + return true; + } + return false; + }), next.end()); + // if we have enough to investigate, do so + if (next.size() >= 2) { + // now we want to find a mergeable item - any item that is equal among a subset + std::map> hashed; // hash value => expressions with that hash + for (auto& tail : next) { + auto* item = getItem(tail, num); + hashed[ExpressionAnalyzer::hash(item)].push_back(item); + } + for (auto& iter : hashed) { + auto& items = iter.second; + if (items.size() == 1) continue; + assert(items.size() > 0); + // look for an item that has another match. + while (items.size() >= 2) { + auto first = items[0]; + std::vector others; + items.erase(std::remove_if(items.begin(), items.end(), [&](Expression* item) { + if (item == first || // don't bother comparing the first + ExpressionAnalyzer::equal(item, first)) { + // equal, keep it + return false; + } else { + // unequal, look at it later + others.push_back(item); + return true; + } + }), items.end()); + if (items.size() >= 2) { + // possible merge here, investigate it + auto* correct = items[0]; + auto explore = next; + explore.erase(std::remove_if(explore.begin(), explore.end(), [&](Tail& tail) { + auto* item = getItem(tail, num); + return !ExpressionAnalyzer::equal(item, correct); + }), explore.end()); + // try to optimize this deeper tail. if we succeed, then stop here, as the + // changes may influence us. we leave further opts to further passes (as this + // is rare in practice, it's generally not a perf issue, but TODO optimize) + if (optimizeTerminatingTails(explore, num + 1)) { + return true; + } + } + items.swap(others); + } + } + } + // we explored deeper (higher num) options, but perhaps there + // was nothing there while there is something we can do at this level + // but if we are at num == 0, then we found nothing at all + if (num == 0) return false; + // if not worth it, stop + if (!worthIt(num, tails)) return false; + // this is worth doing, do it! + auto mergeable = getTailItems(num, tails); // the elements we can merge + // since we managed a merge, then it might open up more opportunities later + anotherPass = true; + Builder builder(*getModule()); + LabelUtils::LabelManager labels(getFunction()); // TODO: don't create one per merge, linear in function size + Name innerName = labels.getUnique("folding-inner"); + for (auto& tail : tails) { + // remove the items we are merging / moving, and add a break + // also mark as modified, so we don't try to handle them + // again in this pass, which might be buggy + if (tail.block) { + markAsModified(tail.block); + for (Index i = 0; i < mergeable.size(); i++) { + tail.block->list.pop_back(); + } + tail.block->list.push_back(builder.makeBreak(innerName)); + tail.block->finalize(tail.block->type); + } else { + markAsModified(tail.expr); + *tail.pointer = builder.makeBreak(innerName); + } + } + // make a block with the old body + the merged code + auto* old = getFunction()->body; + auto* inner = builder.makeBlock(); + inner->name = innerName; + if (old->type == unreachable) { + // the old body is not flowed out of anyhow, so just put it there + inner->list.push_back(old); + } else { + // otherwise, we must not flow out to the merged code + if (old->type == none) { + inner->list.push_back(old); + inner->list.push_back(builder.makeReturn()); + } else { + // looks like we must return this. but if it's a toplevel block + // then it might be marked as having a type, but not actually + // returning it (we marked it as such for wasm type-checking + // rules, and now it won't be toplevel in the function, it can + // change) + auto* toplevel = old->dynCast(); + if (toplevel) toplevel->finalize(); + if (old->type != unreachable) { + inner->list.push_back(builder.makeReturn(old)); + } else { + inner->list.push_back(old); + } + } + } + inner->finalize(); + auto* outer = builder.makeBlock(); + outer->list.push_back(inner); + while (!mergeable.empty()) { + outer->list.push_back(mergeable.back()); + mergeable.pop_back(); + } + // ensure the replacement has the same type, so the outside is not surprised + outer->finalize(getFunction()->result); + getFunction()->body = outer; + return true; + } + + void markAsModified(Expression* curr) { + ExpressionMarker marker(modifieds, curr); + } +}; + +Pass *createCodeFoldingPass() { + return new CodeFolding(); +} + +} // namespace wasm + diff --git a/src/binaryen/src/passes/CodePushing.cpp b/src/binaryen/src/passes/CodePushing.cpp new file mode 100644 index 0000000000..fefceb6ec7 --- /dev/null +++ b/src/binaryen/src/passes/CodePushing.cpp @@ -0,0 +1,265 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Pushes code "forward" as much as possible, potentially into +// a location behind a condition, where it might not always execute. +// + +#include +#include +#include +#include + +namespace wasm { + +// +// Analyzers some useful local properties: # of sets and gets, and SFA. +// +// Single First Assignment (SFA) form: the local has a single set_local, is +// not a parameter, and has no get_locals before the set_local in postorder. +// This is a much weaker property than SSA, obviously, but together with +// our implicit dominance properties in the structured AST is quite useful. +// +struct LocalAnalyzer : public PostWalker { + std::vector sfa; + std::vector numSets; + std::vector numGets; + + void analyze(Function* func) { + auto num = func->getNumLocals(); + numSets.resize(num); + std::fill(numSets.begin(), numSets.end(), 0); + numGets.resize(num); + std::fill(numGets.begin(), numGets.end(), 0); + sfa.resize(num); + std::fill(sfa.begin(), sfa.begin() + func->getNumParams(), false); + std::fill(sfa.begin() + func->getNumParams(), sfa.end(), true); + walk(func->body); + for (Index i = 0; i < num; i++) { + if (numSets[i] == 0) sfa[i] = false; + } + } + + bool isSFA(Index i) { + return sfa[i]; + } + + Index getNumGets(Index i) { + return numGets[i]; + } + + void visitGetLocal(GetLocal *curr) { + if (numSets[curr->index] == 0) { + sfa[curr->index] = false; + } + numGets[curr->index]++; + } + + void visitSetLocal(SetLocal *curr) { + numSets[curr->index]++; + if (numSets[curr->index] > 1) { + sfa[curr->index] = false; + } + } +}; + +// Implement core optimization logic in a struct, used and then discarded entirely +// for each block +class Pusher { + ExpressionList& list; + LocalAnalyzer& analyzer; + std::vector& numGetsSoFar; + PassOptions& passOptions; + +public: + Pusher(Block* block, LocalAnalyzer& analyzer, std::vector& numGetsSoFar, PassOptions& passOptions) : list(block->list), analyzer(analyzer), numGetsSoFar(numGetsSoFar), passOptions(passOptions) { + // Find an optimization segment: from the first pushable thing, to the first + // point past which we want to push. We then push in that range before + // continuing forward. + Index relevant = list.size() - 1; // we never need to push past a final element, as + // we couldn't be used after it. + Index nothing = -1; + Index i = 0; + Index firstPushable = nothing; + while (i < relevant) { + if (firstPushable == nothing && isPushable(list[i])) { + firstPushable = i; + i++; + continue; + } + if (firstPushable != nothing && isPushPoint(list[i])) { + // optimize this segment, and proceed from where it tells us + i = optimizeSegment(firstPushable, i); + firstPushable = nothing; + continue; + } + i++; + } + } + +private: + SetLocal* isPushable(Expression* curr) { + auto* set = curr->dynCast(); + if (!set) return nullptr; + auto index = set->index; + // to be pushable, this must be SFA and the right # of gets, + // but also have no side effects, as it may not execute if pushed. + if (analyzer.isSFA(index) && + numGetsSoFar[index] == analyzer.getNumGets(index) && + !EffectAnalyzer(passOptions, set->value).hasSideEffects()) { + return set; + } + return nullptr; + } + + // Push past conditional control flow. + // TODO: push into ifs as well + bool isPushPoint(Expression* curr) { + // look through drops + if (auto* drop = curr->dynCast()) { + curr = drop->value; + } + if (curr->is()) return true; + if (auto* br = curr->dynCast()) { + return !!br->condition; + } + return false; + } + + Index optimizeSegment(Index firstPushable, Index pushPoint) { + // The interesting part. Starting at firstPushable, try to push + // code past pushPoint. We start at the end since we are pushing + // forward, that way we can push later things out of the way + // of earlier ones. Once we know all we can push, we push it all + // in one pass, keeping the order of the pushables intact. + assert(firstPushable != Index(-1) && pushPoint != Index(-1) && firstPushable < pushPoint); + EffectAnalyzer cumulativeEffects(passOptions); // everything that matters if you want + // to be pushed past the pushPoint + cumulativeEffects.analyze(list[pushPoint]); + cumulativeEffects.branches = false; // it is ok to ignore the branching here, + // that is the crucial point of this opt + std::vector toPush; + Index i = pushPoint - 1; + while (1) { + auto* pushable = isPushable(list[i]); + if (pushable) { + auto iter = pushableEffects.find(pushable); + if (iter == pushableEffects.end()) { + iter = pushableEffects.emplace( + std::piecewise_construct, + std::forward_as_tuple(pushable), + std::forward_as_tuple(passOptions, pushable) + ).first; + } + auto& effects = iter->second; + if (cumulativeEffects.invalidates(effects)) { + // we can't push this, so further pushables must pass it + cumulativeEffects.mergeIn(effects); + } else { + // we can push this, great! + toPush.push_back(pushable); + } + if (i == firstPushable) { + // no point in looking further + break; + } + } else { + // something that can't be pushed, so it might block further pushing + cumulativeEffects.analyze(list[i]); + } + assert(i > 0); + i--; + } + if (toPush.size() == 0) { + // nothing to do, can only continue after the push point + return pushPoint + 1; + } + // we have work to do! + Index total = toPush.size(); + Index last = total - 1; + Index skip = 0; + for (Index i = firstPushable; i <= pushPoint; i++) { + // we see the first elements at the end of toPush + if (skip < total && list[i] == toPush[last - skip]) { + // this is one of our elements to push, skip it + skip++; + } else { + if (skip) { + list[i - skip] = list[i]; + } + } + } + assert(skip == total); + // write out the skipped elements + for (Index i = 0; i < total; i++) { + list[pushPoint - i] = toPush[i]; + } + // proceed right after the push point, we may push the pushed elements again + return pushPoint - total + 1; + } + + // Pushables may need to be scanned more than once, so cache their effects. + std::unordered_map pushableEffects; +}; + +struct CodePushing : public WalkerPass> { + bool isFunctionParallel() override { return true; } + + Pass* create() override { return new CodePushing; } + + LocalAnalyzer analyzer; + + // gets seen so far in the main traversal + std::vector numGetsSoFar; + + void doWalkFunction(Function* func) { + // pre-scan to find which vars are sfa, and also count their gets&sets + analyzer.analyze(func); + // prepare to walk + numGetsSoFar.resize(func->getNumLocals()); + std::fill(numGetsSoFar.begin(), numGetsSoFar.end(), 0); + // walk and optimize + walk(func->body); + } + + void visitGetLocal(GetLocal *curr) { + numGetsSoFar[curr->index]++; + } + + void visitBlock(Block* curr) { + // Pushing code only makes sense if we are size 3 or above: we need + // one element to push, an element to push it past, and an element to use + // what we pushed. + if (curr->list.size() < 3) return; + // At this point in the postorder traversal we have gone through all our children. + // Therefore any variable whose gets seen so far is equal to the total gets must + // have no further users after this block. And therefore when we see an SFA + // variable defined here, we know it isn't used before it either, and has just this + // one assign. So we can push it forward while we don't hit a non-control-flow + // ordering invalidation issue, since if this isn't a loop, it's fine (we're not + // used outside), and if it is, we hit the assign before any use (as we can't + // push it past a use). + Pusher pusher(curr, analyzer, numGetsSoFar, getPassOptions()); + } +}; + +Pass *createCodePushingPass() { + return new CodePushing(); +} + +} // namespace wasm + diff --git a/src/binaryen/src/passes/ConstHoisting.cpp b/src/binaryen/src/passes/ConstHoisting.cpp new file mode 100644 index 0000000000..bddc0b5c5f --- /dev/null +++ b/src/binaryen/src/passes/ConstHoisting.cpp @@ -0,0 +1,131 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Hoists repeated constants to a local. A get_local takes 2 bytes +// in most cases, and if a const is larger than that, it may be +// better to store it to a local, then get it from that local. +// +// WARNING: this often shrinks code size, but can *increase* gzip +// size. apparently having the constants in their proper +// places lets them be compressed better, across +// functions, etc. +// + +#include + +#include +#include +#include +#include + +namespace wasm { + +// with fewer uses than this, it is never beneficial to hoist +static const Index MIN_USES = 2; + +struct ConstHoisting : public WalkerPass> { + bool isFunctionParallel() override { return true; } + + Pass* create() override { return new ConstHoisting; } + + std::map> uses; + + void visitConst(Const* curr) { + uses[curr->value].push_back(getCurrentPointer()); + } + + void visitFunction(Function* curr) { + std::vector prelude; + for (auto& pair : uses) { + auto value = pair.first; + auto& vec = pair.second; + auto num = vec.size(); + if (worthHoisting(value, num)) { + prelude.push_back(hoist(vec)); + } + } + if (!prelude.empty()) { + Builder builder(*getModule()); + // merge-blocks can optimize this into a single block later in most cases + curr->body = builder.makeSequence( + builder.makeBlock(prelude), + curr->body + ); + } + } + +private: + bool worthHoisting(Literal value, Index num) { + if (num < MIN_USES) return false; + // measure the size of the constant + Index size; + switch (value.type) { + case i32: { + size = getWrittenSize(S32LEB(value.geti32())); + break; + } + case i64: { + size = getWrittenSize(S64LEB(value.geti64())); + break; + } + case f32: + case f64: { + size = getWasmTypeSize(value.type); + break; + } + default: WASM_UNREACHABLE(); + } + // compute the benefit, of replacing the uses with + // one use + a set and then a get for each use + // doing the algebra, the criterion here is when + // size > 2(1+num)/(num-1) + // or + // num > (size+2)/(size-2) + auto before = num * size; + auto after = size + 2 /* set_local */ + (2 /* get_local */ * num); + return after < before; + } + + template + Index getWrittenSize(const T& thing) { + BufferWithRandomAccess buffer; + buffer << thing; + return buffer.size(); + } + + // replace all the uses with gets, for a local set at the top. returns + // the set. + Expression* hoist(std::vector& vec) { + auto type = (*(vec[0]))->type; + Builder builder(*getModule()); + auto temp = builder.addVar(getFunction(), type); + auto* ret = builder.makeSetLocal( + temp, + *(vec[0]) + ); + for (auto item : vec) { + *item = builder.makeGetLocal(temp, type); + } + return ret; + } +}; + +Pass *createConstHoistingPass() { + return new ConstHoisting(); +} + +} // namespace wasm diff --git a/src/binaryen/src/passes/DeadCodeElimination.cpp b/src/binaryen/src/passes/DeadCodeElimination.cpp new file mode 100644 index 0000000000..97c63baf53 --- /dev/null +++ b/src/binaryen/src/passes/DeadCodeElimination.cpp @@ -0,0 +1,407 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Removes dead, i.e. unreachable, code. +// +// We keep a record of when control flow is reachable. When it isn't, we +// kill (turn into unreachable). We then fold away entire unreachable +// expressions. +// +// When dead code causes an operation to not happen, like a store, a call +// or an add, we replace with a block with a list of what does happen. +// That isn't necessarily smaller, but blocks are friendlier to other +// optimizations: blocks can be merged and eliminated, and they clearly +// have no side effects. +// + +#include +#include +#include +#include +#include +#include +#include + +namespace wasm { + +struct DeadCodeElimination : public WalkerPass> { + bool isFunctionParallel() override { return true; } + + Pass* create() override { return new DeadCodeElimination; } + + // as we remove code, we must keep the types of other nodes valid + TypeUpdater typeUpdater; + + Expression* replaceCurrent(Expression* expression) { + auto* old = getCurrent(); + if (old == expression) return expression; + super::replaceCurrent(expression); + // also update the type updater + typeUpdater.noteReplacement(old, expression); + return expression; + } + + // whether the current code is actually reachable + bool reachable; + + void doWalkFunction(Function* func) { + reachable = true; + typeUpdater.walk(func->body); + walk(func->body); + } + + std::set reachableBreaks; + + void addBreak(Name name) { + // we normally have already reduced unreachable code into (unreachable) + // nodes, so we would not get to this function at all anyhow, the breaking + // instruction itself would be removed. However, an exception are things + // like (block (result i32) (call $x) (unreachable)) , which has type i32 + // despite not being exited. + // TODO: optimize such cases + if (reachable) { + reachableBreaks.insert(name); + } + } + + // if a child exists and is unreachable, we can replace ourselves with it + bool isDead(Expression* child) { + return child && child->type == unreachable; + } + + // a similar check, assumes the child exists + bool isUnreachable(Expression* child) { + return child->type == unreachable; + } + + // things that stop control flow + + void visitBreak(Break* curr) { + if (isDead(curr->value)) { + // the condition is evaluated last, so if the value was unreachable, the whole thing is + replaceCurrent(curr->value); + return; + } + if (isDead(curr->condition)) { + if (curr->value) { + auto* block = getModule()->allocator.alloc(); + block->list.resize(2); + block->list[0] = drop(curr->value); + block->list[1] = curr->condition; + // if we previously returned a value, then this block + // must have the same type, so it fits in the ast + // properly. it ends in an unreachable + // anyhow, so that is ok. + block->finalize(curr->type); + replaceCurrent(block); + } else { + replaceCurrent(curr->condition); + } + return; + } + addBreak(curr->name); + if (!curr->condition) { + reachable = false; + } + } + + void visitSwitch(Switch* curr) { + if (isDead(curr->value)) { + replaceCurrent(curr->value); + return; + } + if (isUnreachable(curr->condition)) { + if (curr->value) { + auto* block = getModule()->allocator.alloc(); + block->list.resize(2); + block->list[0] = drop(curr->value); + block->list[1] = curr->condition; + block->finalize(curr->type); + replaceCurrent(block); + } else { + replaceCurrent(curr->condition); + } + return; + } + for (auto target : curr->targets) { + addBreak(target); + } + addBreak(curr->default_); + reachable = false; + } + + void visitReturn(Return* curr) { + if (isDead(curr->value)) { + replaceCurrent(curr->value); + return; + } + reachable = false; + } + + void visitUnreachable(Unreachable* curr) { + reachable = false; + } + + void visitBlock(Block* curr) { + auto& list = curr->list; + // if we are currently unreachable (before we take into account + // breaks to the block) then a child may be unreachable, and we + // can shorten + if (!reachable && list.size() > 1) { + // to do here: nothing to remove after it) + for (Index i = 0; i < list.size() - 1; i++) { + if (list[i]->type == unreachable) { + list.resize(i + 1); + break; + } + } + } + if (curr->name.is()) { + reachable = reachable || reachableBreaks.count(curr->name); + reachableBreaks.erase(curr->name); + } + if (list.size() == 1 && isUnreachable(list[0])) { + replaceCurrent(BlockUtils::simplifyToContentsWithPossibleTypeChange(curr, this)); + } else { + // the block may have had a type, but can now be unreachable, which allows more reduction outside + typeUpdater.maybeUpdateTypeToUnreachable(curr); + } + } + + void visitLoop(Loop* curr) { + if (curr->name.is()) { + reachableBreaks.erase(curr->name); + } + if (isUnreachable(curr->body) && !BranchUtils::BranchSeeker::hasNamed(curr->body, curr->name)) { + replaceCurrent(curr->body); + return; + } + } + + // ifs need special handling + + std::vector ifStack; // stack of reachable state, for forking and joining + + static void doAfterIfCondition(DeadCodeElimination* self, Expression** currp) { + self->ifStack.push_back(self->reachable); + } + + static void doAfterIfElseTrue(DeadCodeElimination* self, Expression** currp) { + assert((*currp)->cast()->ifFalse); + bool reachableBefore = self->ifStack.back(); + self->ifStack.pop_back(); + self->ifStack.push_back(self->reachable); + self->reachable = reachableBefore; + } + + void visitIf(If* curr) { + // the ifStack has the branch that joins us, either from before if just an if, or the ifTrue if an if-else + reachable = reachable || ifStack.back(); + ifStack.pop_back(); + if (isUnreachable(curr->condition)) { + replaceCurrent(curr->condition); + } + // the if may have had a type, but can now be unreachable, which allows more reduction outside + typeUpdater.maybeUpdateTypeToUnreachable(curr); + } + + static void scan(DeadCodeElimination* self, Expression** currp) { + auto* curr = *currp; + if (!self->reachable) { + // convert to an unreachable safely + #define DELEGATE(CLASS_TO_VISIT) { \ + auto* parent = self->typeUpdater.parents[curr]; \ + self->typeUpdater.noteRecursiveRemoval(curr); \ + ExpressionManipulator::convert(static_cast(curr)); \ + self->typeUpdater.noteAddition(curr, parent); \ + break; \ + } + switch (curr->_id) { + case Expression::Id::BlockId: DELEGATE(Block); + case Expression::Id::IfId: DELEGATE(If); + case Expression::Id::LoopId: DELEGATE(Loop); + case Expression::Id::BreakId: DELEGATE(Break); + case Expression::Id::SwitchId: DELEGATE(Switch); + case Expression::Id::CallId: DELEGATE(Call); + case Expression::Id::CallImportId: DELEGATE(CallImport); + case Expression::Id::CallIndirectId: DELEGATE(CallIndirect); + case Expression::Id::GetLocalId: DELEGATE(GetLocal); + case Expression::Id::SetLocalId: DELEGATE(SetLocal); + case Expression::Id::GetGlobalId: DELEGATE(GetGlobal); + case Expression::Id::SetGlobalId: DELEGATE(SetGlobal); + case Expression::Id::LoadId: DELEGATE(Load); + case Expression::Id::StoreId: DELEGATE(Store); + case Expression::Id::ConstId: DELEGATE(Const); + case Expression::Id::UnaryId: DELEGATE(Unary); + case Expression::Id::BinaryId: DELEGATE(Binary); + case Expression::Id::SelectId: DELEGATE(Select); + case Expression::Id::DropId: DELEGATE(Drop); + case Expression::Id::ReturnId: DELEGATE(Return); + case Expression::Id::HostId: DELEGATE(Host); + case Expression::Id::NopId: DELEGATE(Nop); + case Expression::Id::UnreachableId: break; + case Expression::Id::AtomicCmpxchgId: DELEGATE(AtomicCmpxchg); + case Expression::Id::AtomicRMWId: DELEGATE(AtomicRMW); + case Expression::Id::AtomicWaitId: DELEGATE(AtomicWait); + case Expression::Id::AtomicWakeId: DELEGATE(AtomicWake); + case Expression::Id::InvalidId: + default: WASM_UNREACHABLE(); + } + #undef DELEGATE + return; + } + if (curr->is()) { + self->pushTask(DeadCodeElimination::doVisitIf, currp); + if (curr->cast()->ifFalse) { + self->pushTask(DeadCodeElimination::scan, &curr->cast()->ifFalse); + self->pushTask(DeadCodeElimination::doAfterIfElseTrue, currp); + } + self->pushTask(DeadCodeElimination::scan, &curr->cast()->ifTrue); + self->pushTask(DeadCodeElimination::doAfterIfCondition, currp); + self->pushTask(DeadCodeElimination::scan, &curr->cast()->condition); + } else { + super::scan(self, currp); + } + } + + // other things + + // we don't need to drop unreachable nodes + Expression* drop(Expression* toDrop) { + if (toDrop->type == unreachable) return toDrop; + return Builder(*getModule()).makeDrop(toDrop); + } + + template + Expression* handleCall(T* curr) { + for (Index i = 0; i < curr->operands.size(); i++) { + if (isUnreachable(curr->operands[i])) { + if (i > 0) { + auto* block = getModule()->allocator.alloc(); + Index newSize = i + 1; + block->list.resize(newSize); + Index j = 0; + for (; j < newSize; j++) { + block->list[j] = drop(curr->operands[j]); + } + block->finalize(curr->type); + return replaceCurrent(block); + } else { + return replaceCurrent(curr->operands[i]); + } + } + } + return curr; + } + + void visitCall(Call* curr) { + handleCall(curr); + } + + void visitCallImport(CallImport* curr) { + handleCall(curr); + } + + void visitCallIndirect(CallIndirect* curr) { + if (handleCall(curr) != curr) return; + if (isUnreachable(curr->target)) { + auto* block = getModule()->allocator.alloc(); + for (auto* operand : curr->operands) { + block->list.push_back(drop(operand)); + } + block->list.push_back(curr->target); + block->finalize(curr->type); + replaceCurrent(block); + } + } + + // Append the reachable operands of the current node to a block, and replace + // it with the block + void blockifyReachableOperands(std::vector&& list, WasmType type) { + for (size_t i = 0; i < list.size(); ++i) { + auto* elem = list[i]; + if (isUnreachable(elem)) { + auto* replacement = elem; + if (i > 0) { + auto* block = getModule()->allocator.alloc(); + for (size_t j = 0; j < i; ++j) { + block->list.push_back(drop(list[j])); + } + block->list.push_back(list[i]); + block->finalize(type); + replacement = block; + } + replaceCurrent(replacement); + return; + } + } + } + + void visitSetLocal(SetLocal* curr) { + blockifyReachableOperands({ curr->value }, curr->type); + } + + void visitSetGlobal(SetGlobal* curr) { + blockifyReachableOperands({ curr->value }, curr->type); + } + + void visitLoad(Load* curr) { + blockifyReachableOperands({ curr->ptr }, curr->type); + } + + void visitStore(Store* curr) { + blockifyReachableOperands({ curr->ptr, curr->value }, curr->type); + } + + void visitAtomicRMW(AtomicRMW* curr) { + blockifyReachableOperands({ curr->ptr, curr->value }, curr->type); + } + + void visitAtomicCmpxchg(AtomicCmpxchg* curr) { + blockifyReachableOperands({ curr->ptr, curr->expected, curr->replacement }, curr->type); + } + + void visitUnary(Unary* curr) { + blockifyReachableOperands({ curr->value }, curr->type); + } + + void visitBinary(Binary* curr) { + blockifyReachableOperands({ curr->left, curr->right }, curr->type); + } + + void visitSelect(Select* curr) { + blockifyReachableOperands({ curr->ifTrue, curr->ifFalse, curr->condition }, curr->type); + } + + void visitDrop(Drop* curr) { + blockifyReachableOperands({ curr->value }, curr->type); + } + + void visitHost(Host* curr) { + handleCall(curr); + } + + void visitFunction(Function* curr) { + assert(reachableBreaks.size() == 0); + } +}; + +Pass *createDeadCodeEliminationPass() { + return new DeadCodeElimination(); +} + +} // namespace wasm diff --git a/src/binaryen/src/passes/DuplicateFunctionElimination.cpp b/src/binaryen/src/passes/DuplicateFunctionElimination.cpp new file mode 100644 index 0000000000..c7852237be --- /dev/null +++ b/src/binaryen/src/passes/DuplicateFunctionElimination.cpp @@ -0,0 +1,186 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Removes duplicate functions. That can happen due to C++ templates, +// and also due to types being different at the source level, but +// identical when finally lowered into concrete wasm code. +// + +#include "wasm.h" +#include "pass.h" +#include "ir/utils.h" +#include "support/hash.h" + +namespace wasm { + +struct FunctionHasher : public WalkerPass> { + bool isFunctionParallel() override { return true; } + + FunctionHasher(std::map* output) : output(output) {} + + FunctionHasher* create() override { + return new FunctionHasher(output); + } + + void doWalkFunction(Function* func) { + assert(digest == 0); + hash(func->getNumParams()); + for (auto type : func->params) hash(type); + hash(func->getNumVars()); + for (auto type : func->vars) hash(type); + hash(func->result); + hash64(func->type.is() ? uint64_t(func->type.str) : uint64_t(0)); + hash(ExpressionAnalyzer::hash(func->body)); + output->at(func) = digest; + } + +private: + std::map* output; + uint32_t digest = 0; + + void hash(uint32_t hash) { + digest = rehash(digest, hash); + } + void hash64(uint64_t hash) { + digest = rehash(rehash(digest, uint32_t(hash >> 32)), uint32_t(hash)); + }; +}; + +struct FunctionReplacer : public WalkerPass> { + bool isFunctionParallel() override { return true; } + + FunctionReplacer(std::map* replacements) : replacements(replacements) {} + + FunctionReplacer* create() override { + return new FunctionReplacer(replacements); + } + + void visitCall(Call* curr) { + auto iter = replacements->find(curr->target); + if (iter != replacements->end()) { + curr->target = iter->second; + } + } + +private: + std::map* replacements; +}; + +struct DuplicateFunctionElimination : public Pass { + void run(PassRunner* runner, Module* module) override { + while (1) { + // Hash all the functions + hashes.clear(); + for (auto& func : module->functions) { + hashes[func.get()] = 0; // ensure an entry for each function - we must not modify the map shape in parallel, just the values + } + PassRunner hasherRunner(module); + hasherRunner.setIsNested(true); + hasherRunner.add(&hashes); + hasherRunner.run(); + // Find hash-equal groups + std::map> hashGroups; + for (auto& func : module->functions) { + hashGroups[hashes[func.get()]].push_back(func.get()); + } + // Find actually equal functions and prepare to replace them + std::map replacements; + std::set duplicates; + for (auto& pair : hashGroups) { + auto& group = pair.second; + if (group.size() == 1) continue; + // pick a base for each group, and try to replace everyone else to it. TODO: multiple bases per hash group, for collisions +#if 0 + // for comparison purposes, pick in a deterministic way based on the names + Function* base = nullptr; + for (auto* func : group) { + if (!base || strcmp(func->name.str, base->name.str) < 0) { + base = func; + } + } +#else + Function* base = group[0]; +#endif + for (auto* func : group) { + if (func != base && equal(func, base)) { + replacements[func->name] = base->name; + duplicates.insert(func->name); + } + } + } + // perform replacements + if (replacements.size() > 0) { + // remove the duplicates + auto& v = module->functions; + v.erase(std::remove_if(v.begin(), v.end(), [&](const std::unique_ptr& curr) { + return duplicates.count(curr->name) > 0; + }), v.end()); + module->updateMaps(); + // replace direct calls + PassRunner replacerRunner(module); + replacerRunner.setIsNested(true); + replacerRunner.add(&replacements); + replacerRunner.run(); + // replace in table + for (auto& segment : module->table.segments) { + for (auto& name : segment.data) { + auto iter = replacements.find(name); + if (iter != replacements.end()) { + name = iter->second; + } + } + } + // replace in start + if (module->start.is()) { + auto iter = replacements.find(module->start); + if (iter != replacements.end()) { + module->start = iter->second; + } + } + // replace in exports + for (auto& exp : module->exports) { + auto iter = replacements.find(exp->value); + if (iter != replacements.end()) { + exp->value = iter->second; + } + } + } else { + break; + } + } + } + +private: + std::map hashes; + + bool equal(Function* left, Function* right) { + if (left->getNumParams() != right->getNumParams()) return false; + if (left->getNumVars() != right->getNumVars()) return false; + for (Index i = 0; i < left->getNumLocals(); i++) { + if (left->getLocalType(i) != right->getLocalType(i)) return false; + } + if (left->result != right->result) return false; + if (left->type != right->type) return false; + return ExpressionAnalyzer::equal(left->body, right->body); + } +}; + +Pass *createDuplicateFunctionEliminationPass() { + return new DuplicateFunctionElimination(); +} + +} // namespace wasm diff --git a/src/binaryen/src/passes/ExtractFunction.cpp b/src/binaryen/src/passes/ExtractFunction.cpp new file mode 100644 index 0000000000..b91d2c4066 --- /dev/null +++ b/src/binaryen/src/passes/ExtractFunction.cpp @@ -0,0 +1,52 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Removes code from all functions but one, leaving a valid module +// with (mostly) just the code you want to debug (function-parallel, +// non-lto) passes on. + +#include "wasm.h" +#include "pass.h" + +namespace wasm { + + +struct ExtractFunction : public Pass { + void run(PassRunner* runner, Module* module) override { + auto* leave = getenv("BYN_LEAVE"); + if (!leave) { + std::cerr << "usage: set BYN_LEAVE in the env\n"; + abort(); + } + Name LEAVE(leave); + std::cerr << "keeping " << LEAVE << "\n"; + for (auto& func : module->functions) { + if (func->name != LEAVE) { + // wipe out the body + func->body = module->allocator.alloc(); + } + } + } +}; + +// declare pass + +Pass *createExtractFunctionPass() { + return new ExtractFunction(); +} + +} // namespace wasm + diff --git a/src/binaryen/src/passes/Flatten.cpp b/src/binaryen/src/passes/Flatten.cpp new file mode 100644 index 0000000000..53fd6a02b3 --- /dev/null +++ b/src/binaryen/src/passes/Flatten.cpp @@ -0,0 +1,351 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Flattens code, removing nesting.e.g. an if return value would be +// converted to a local +// +// (i32.add +// (if (..condition..) +// (..if true..) +// (..if false..) +// ) +// (i32.const 1) +// ) +// => +// (if (..condition..) +// (set_local $temp +// (..if true..) +// ) +// (set_local $temp +// (..if false..) +// ) +// ) +// (i32.add +// (get_local $temp) +// (i32.const 1) +// ) +// +// Formally, this pass flattens in the precise sense of +// making the AST have these properties: +// +// 1. The operands of an instruction must be a get_local or a const. +// anything else is written to a local earlier. +// 2. Disallow block, loop, and if return values, i.e., do not use +// control flow to pass around values. +// 3. Disallow tee_local, setting a local is always done in a set_local +// on a non-nested-expression location. +// + +#include +#include +#include +#include +#include + +namespace wasm { + +// We use the following algorithm: we maintain a list of "preludes", code +// that runs right before an expression. When we visit an expression we +// must handle it and its preludes. If the expression has side effects, +// we reduce it to a get_local and add a prelude for that. We then handle +// the preludes, by moving them to the parent or handling them directly. +// we can move them to the parent if the parent is not a control flow +// structure. Otherwise, if the parent is a control flow structure, it +// will incorporate the preludes of its children accordingly. +// As a result, when we reach a node, we know its children have no +// side effects (they have been moved to a prelude), or we are a +// control flow structure (which allows children with side effects, +// e.g. a return as a block element). +// Once exception is that we allow an (unreachable) node, which is used +// when we move something unreachable to another place, and need a +// placeholder. We will never reach that (unreachable) anyhow +struct Flatten : public WalkerPass>> { + bool isFunctionParallel() override { return true; } + + Pass* create() override { return new Flatten; } + + // For each expression, a bunch of expressions that should execute right before it + std::unordered_map> preludes; + + // Break values are sent through a temp local + std::unordered_map breakTemps; + + void visitExpression(Expression* curr) { + std::vector ourPreludes; + Builder builder(*getModule()); + + if (isControlFlowStructure(curr)) { + // handle control flow explicitly. our children do not have control flow, + // but they do have preludes which we need to set up in the right place + assert(preludes.find(curr) == preludes.end()); // no one should have given us preludes, they are on the children + if (auto* block = curr->dynCast()) { + // make a new list, where each item's preludes are added before it + ExpressionList newList(getModule()->allocator); + for (auto* item : block->list) { + auto iter = preludes.find(item); + if (iter != preludes.end()) { + auto& itemPreludes = iter->second; + for (auto* prelude : itemPreludes) { + newList.push_back(prelude); + } + itemPreludes.clear(); + } + newList.push_back(item); + } + block->list.swap(newList); + // remove a block return value + auto type = block->type; + if (isConcreteWasmType(type)) { + // if there is a temp index for breaking to the block, use that + Index temp; + auto iter = breakTemps.find(block->name); + if (iter != breakTemps.end()) { + temp = iter->second; + } else { + temp = builder.addVar(getFunction(), type); + } + auto*& last = block->list.back(); + if (isConcreteWasmType(last->type)) { + last = builder.makeSetLocal(temp, last); + } + block->finalize(none); + // and we leave just a get of the value + auto* rep = builder.makeGetLocal(temp, type); + replaceCurrent(rep); + // the whole block is now a prelude + ourPreludes.push_back(block); + } + // the block now has no return value, and may have become unreachable + block->finalize(none); + } else if (auto* iff = curr->dynCast()) { + // condition preludes go before the entire if + auto* rep = getPreludesWithExpression(iff->condition, iff); + // arm preludes go in the arms. we must also remove an if value + auto* originalIfTrue = iff->ifTrue; + auto* originalIfFalse = iff->ifFalse; + auto type = iff->type; + Expression* prelude = nullptr; + if (isConcreteWasmType(type)) { + Index temp = builder.addVar(getFunction(), type); + if (isConcreteWasmType(iff->ifTrue->type)) { + iff->ifTrue = builder.makeSetLocal(temp, iff->ifTrue); + } + if (iff->ifFalse && isConcreteWasmType(iff->ifFalse->type)) { + iff->ifFalse = builder.makeSetLocal(temp, iff->ifFalse); + } + // the whole if (+any preludes from the condition) is now a prelude + prelude = rep; + // and we leave just a get of the value + rep = builder.makeGetLocal(temp, type); + } + iff->ifTrue = getPreludesWithExpression(originalIfTrue, iff->ifTrue); + if (iff->ifFalse) iff->ifFalse = getPreludesWithExpression(originalIfFalse, iff->ifFalse); + iff->finalize(); + if (prelude) { + ReFinalizeNode().visit(prelude); + ourPreludes.push_back(prelude); + } + replaceCurrent(rep); + } else if (auto* loop = curr->dynCast()) { + // remove a loop value + Expression* rep = loop; + auto* originalBody = loop->body; + auto type = loop->type; + if (isConcreteWasmType(type)) { + Index temp = builder.addVar(getFunction(), type); + loop->body = builder.makeSetLocal(temp, loop->body); + // and we leave just a get of the value + rep = builder.makeGetLocal(temp, type); + // the whole if is now a prelude + ourPreludes.push_back(loop); + loop->type = none; + } + loop->body = getPreludesWithExpression(originalBody, loop->body); + loop->finalize(); + replaceCurrent(rep); + } else { + WASM_UNREACHABLE(); + } + } else { + // for anything else, there may be existing preludes + auto iter = preludes.find(curr); + if (iter != preludes.end()) { + ourPreludes.swap(iter->second); + } + // special handling + if (auto* set = curr->dynCast()) { + if (set->isTee()) { + // we disallow tee_local + if (set->value->type == unreachable) { + replaceCurrent(set->value); // trivial, no set happens + } else { + // use a set in a prelude + a get + set->setTee(false); + ourPreludes.push_back(set); + replaceCurrent(builder.makeGetLocal(set->index, set->value->type)); + } + } + } else if (auto* br = curr->dynCast()) { + if (br->value) { + auto type = br->value->type; + if (isConcreteWasmType(type)) { + // we are sending a value. use a local instead + Index temp = getTempForBreakTarget(br->name, type); + ourPreludes.push_back(builder.makeSetLocal(temp, br->value)); + if (br->condition) { + // the value must also flow out + ourPreludes.push_back(br); + if (isConcreteWasmType(br->type)) { + replaceCurrent(builder.makeGetLocal(temp, type)); + } else { + assert(br->type == unreachable); + replaceCurrent(builder.makeUnreachable()); + } + } + br->value = nullptr; + br->finalize(); + } else { + assert(type == unreachable); + // we don't need the br at all + replaceCurrent(br->value); + } + } + } else if (auto* sw = curr->dynCast()) { + if (sw->value) { + auto type = sw->value->type; + if (isConcreteWasmType(type)) { + // we are sending a value. use a local instead + Index temp = builder.addVar(getFunction(), type); + ourPreludes.push_back(builder.makeSetLocal(temp, sw->value)); + // we don't know which break target will be hit - assign to them all + std::set names; + for (auto target : sw->targets) { + names.insert(target); + } + names.insert(sw->default_); + for (auto name : names) { + ourPreludes.push_back(builder.makeSetLocal( + getTempForBreakTarget(name, type), + builder.makeGetLocal(temp, type) + )); + } + sw->value = nullptr; + sw->finalize(); + } else { + assert(type == unreachable); + // we don't need the br at all + replaceCurrent(sw->value); + } + } + } + } + // continue for general handling of everything, control flow or otherwise + curr = getCurrent(); // we may have replaced it + // we have changed children + ReFinalizeNode().visit(curr); + // handle side effects and control flow, things we need to be + // in the prelude. note that we must handle anything here, not just + // side effects, as a sibling after us may have side effect for us, + // and thus we need to move in anticipation of that (e.g., we are + // a get, and a later sibling is a tee - if just the tee moves, + // that is bade) TODO optimize + if (isControlFlowStructure(curr) || EffectAnalyzer(getPassOptions(), curr).hasAnything()) { + // we need to move the side effects to the prelude + if (curr->type == unreachable) { + ourPreludes.push_back(curr); + replaceCurrent(builder.makeUnreachable()); + } else if (curr->type == none) { + if (!curr->is()) { + ourPreludes.push_back(curr); + replaceCurrent(builder.makeNop()); + } + } else { + // use a local + auto type = curr->type; + Index temp = builder.addVar(getFunction(), type); + ourPreludes.push_back(builder.makeSetLocal(temp, curr)); + replaceCurrent(builder.makeGetLocal(temp, type)); + } + } + // next, finish up: migrate our preludes if we can + if (!ourPreludes.empty()) { + auto* parent = getParent(); + if (parent && !isControlFlowStructure(parent)) { + auto& parentPreludes = preludes[parent]; + for (auto* prelude : ourPreludes) { + parentPreludes.push_back(prelude); + } + } else { + // keep our preludes, parent will handle them + preludes[getCurrent()].swap(ourPreludes); + } + } + } + + void visitFunction(Function* curr) { + auto* originalBody = curr->body; + // if the body is a block with a result, turn that into a return + if (isConcreteWasmType(curr->body->type)) { + curr->body = Builder(*getModule()).makeReturn(curr->body); + } + // the body may have preludes + curr->body = getPreludesWithExpression(originalBody, curr->body); + } + +private: + bool isControlFlowStructure(Expression* curr) { + return curr->is() || curr->is() || curr->is(); + } + + // gets an expression, either by itself, or in a block with its + // preludes (which we use up) before it + Expression* getPreludesWithExpression(Expression* curr) { + return getPreludesWithExpression(curr, curr); + } + + // gets an expression, either by itself, or in a block with some + // preludes (which we use up) for another expression before it + Expression* getPreludesWithExpression(Expression* preluder, Expression* after) { + auto iter = preludes.find(preluder); + if (iter == preludes.end()) return after; + // we have preludes + auto& thePreludes = iter->second; + auto* ret = Builder(*getModule()).makeBlock(thePreludes); + thePreludes.clear(); + ret->list.push_back(after); + ret->finalize(); + return ret; + } + + // get the temp local to be used for breaks to that target. allocates + // one if there isn't one yet + Index getTempForBreakTarget(Name name, WasmType type) { + auto iter = breakTemps.find(name); + if (iter != breakTemps.end()) { + return iter->second; + } else { + return breakTemps[name] = Builder(*getModule()).addVar(getFunction(), type); + } + } +}; + +Pass *createFlattenPass() { + return new Flatten(); +} + +} // namespace wasm + diff --git a/src/binaryen/src/passes/I64ToI32Lowering.cpp b/src/binaryen/src/passes/I64ToI32Lowering.cpp new file mode 100644 index 0000000000..a9ac2da821 --- /dev/null +++ b/src/binaryen/src/passes/I64ToI32Lowering.cpp @@ -0,0 +1,1216 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Lowers i64s to i32s by splitting variables and arguments +// into pairs of i32s. i64 return values are lowered by +// returning the low half and storing the high half into a +// global. +// + +#include +#include "wasm.h" +#include "pass.h" +#include "emscripten-optimizer/istring.h" +#include "support/name.h" +#include "wasm-builder.h" +#include "ir/names.h" + + +namespace wasm { + +static Name makeHighName(Name n) { + return Name( + cashew::IString((std::string(n.c_str()) + "$hi").c_str(), false) + ); +} + +struct I64ToI32Lowering : public WalkerPass> { + struct TempVar { + TempVar(Index idx, I64ToI32Lowering& pass) : + idx(idx), pass(pass), moved(false) {} + + TempVar(TempVar&& other) : idx(other), pass(other.pass), moved(false) { + assert(!other.moved); + other.moved = true; + } + + TempVar& operator=(TempVar&& rhs) { + assert(!rhs.moved); + // free overwritten idx + if (!moved) freeIdx(); + idx = rhs.idx; + rhs.moved = true; + moved = false; + return *this; + } + + ~TempVar() { + if (!moved) freeIdx(); + } + + bool operator==(const TempVar& rhs) { + assert(!moved && !rhs.moved); + return idx == rhs.idx; + } + + operator Index() { + assert(!moved); + return idx; + } + + // disallow copying + TempVar(const TempVar&) = delete; + TempVar& operator=(const TempVar&) = delete; + + private: + void freeIdx() { + assert(std::find(pass.freeTemps.begin(), pass.freeTemps.end(), idx) == + pass.freeTemps.end()); + pass.freeTemps.push_back(idx); + } + + Index idx; + I64ToI32Lowering& pass; + bool moved; // since C++ will still destruct moved-from values + }; + + static Name highBitsGlobal; + + // false since function types need to be lowered + // TODO: allow module-level transformations in parallel passes + bool isFunctionParallel() override { return false; } + + Pass* create() override { + return new I64ToI32Lowering; + } + + void doWalkModule(Module* module) { + if (!builder) builder = make_unique(*module); + // add new globals for high bits + for (size_t i = 0, globals = module->globals.size(); i < globals; ++i) { + auto& curr = module->globals[i]; + if (curr->type != i64) continue; + curr->type = i32; + auto* high = new Global(*curr); + high->name = makeHighName(curr->name); + module->addGlobal(high); + } + PostWalker::doWalkModule(module); + } + + void visitFunctionType(FunctionType* curr) { + std::vector params; + for (auto t : curr->params) { + if (t == i64) { + params.push_back(i32); + params.push_back(i32); + } else { + params.push_back(t); + } + } + std::swap(params, curr->params); + if (curr->result == i64) { + curr->result = i32; + } + } + + void doWalkFunction(Function* func) { + // create builder here if this is first entry to module for this object + if (!builder) builder = make_unique(*getModule()); + indexMap.clear(); + highBitVars.clear(); + labelHighBitVars.clear(); + freeTemps.clear(); + Function oldFunc(*func); + func->params.clear(); + func->vars.clear(); + func->localNames.clear(); + func->localIndices.clear(); + Index newIdx = 0; + Names::ensureNames(&oldFunc); + for (Index i = 0; i < oldFunc.getNumLocals(); ++i) { + assert(oldFunc.hasLocalName(i)); + Name lowName = oldFunc.getLocalName(i); + Name highName = makeHighName(lowName); + WasmType paramType = oldFunc.getLocalType(i); + auto builderFunc = (i < oldFunc.getVarIndexBase()) ? + Builder::addParam : + static_cast(Builder::addVar); + if (paramType == i64) { + builderFunc(func, lowName, i32); + builderFunc(func, highName, i32); + indexMap[i] = newIdx; + newIdx += 2; + } else { + builderFunc(func, lowName, paramType); + indexMap[i] = newIdx++; + } + } + nextTemp = func->getNumLocals(); + PostWalker::doWalkFunction(func); + } + + void visitFunction(Function* func) { + if (func->result == i64) { + func->result = i32; + // body may not have out param if it ends with control flow + if (hasOutParam(func->body)) { + TempVar highBits = fetchOutParam(func->body); + TempVar lowBits = getTemp(); + SetLocal* setLow = builder->makeSetLocal( + lowBits, + func->body + ); + SetGlobal* setHigh = builder->makeSetGlobal( + highBitsGlobal, + builder->makeGetLocal(highBits, i32) + ); + GetLocal* getLow = builder->makeGetLocal(lowBits, i32); + func->body = builder->blockify(setLow, setHigh, getLow); + } + } + assert(freeTemps.size() == nextTemp - func->getNumLocals()); + int idx = 0; + for (size_t i = func->getNumLocals(); i < nextTemp; i++) { + Name tmpName("i64toi32_i32$" + std::to_string(idx++)); + builder->addVar(func, tmpName, i32); + } + } + + void visitBlock(Block* curr) { + if (curr->list.size() == 0) return; + if (curr->type == i64) curr->type = i32; + auto highBitsIt = labelHighBitVars.find(curr->name); + if (!hasOutParam(curr->list.back())) { + if (highBitsIt != labelHighBitVars.end()) { + setOutParam(curr, std::move(highBitsIt->second)); + } + return; + } + TempVar lastHighBits = fetchOutParam(curr->list.back()); + if (highBitsIt == labelHighBitVars.end() || + highBitsIt->second == lastHighBits) { + setOutParam(curr, std::move(lastHighBits)); + if (highBitsIt != labelHighBitVars.end()) { + labelHighBitVars.erase(highBitsIt); + } + return; + } + TempVar highBits = std::move(highBitsIt->second); + TempVar tmp = getTemp(); + labelHighBitVars.erase(highBitsIt); + SetLocal* setLow = builder->makeSetLocal(tmp, curr->list.back()); + SetLocal* setHigh = builder->makeSetLocal( + highBits, + builder->makeGetLocal(lastHighBits, i32) + ); + GetLocal* getLow = builder->makeGetLocal(tmp, i32); + curr->list.back() = builder->blockify(setLow, setHigh, getLow); + setOutParam(curr, std::move(highBits)); + } + + // If and Select have identical code + template + void visitBranching(T* curr) { + if (!hasOutParam(curr->ifTrue)) return; + assert(curr->ifFalse != nullptr && "Nullable ifFalse found"); + TempVar highBits = fetchOutParam(curr->ifTrue); + TempVar falseBits = fetchOutParam(curr->ifFalse); + TempVar tmp = getTemp(); + curr->type = i32; + curr->ifFalse = builder->blockify( + builder->makeSetLocal(tmp, curr->ifFalse), + builder->makeSetLocal( + highBits, + builder->makeGetLocal(falseBits, i32) + ), + builder->makeGetLocal(tmp, i32) + ); + setOutParam(curr, std::move(highBits)); + } + + void visitIf(If* curr) { + visitBranching(curr); + } + + void visitLoop(Loop* curr) { + assert(labelHighBitVars.find(curr->name) == labelHighBitVars.end()); + if (curr->type != i64) return; + curr->type = i32; + setOutParam(curr, fetchOutParam(curr->body)); + } + + void visitBreak(Break* curr) { + if (!hasOutParam(curr->value)) return; + assert(curr->value != nullptr); + TempVar valHighBits = fetchOutParam(curr->value); + auto blockHighBitsIt = labelHighBitVars.find(curr->name); + if (blockHighBitsIt == labelHighBitVars.end()) { + labelHighBitVars.emplace(curr->name, std::move(valHighBits)); + curr->type = i32; + return; + } + TempVar blockHighBits = std::move(blockHighBitsIt->second); + TempVar tmp = getTemp(); + SetLocal* setLow = builder->makeSetLocal(tmp, curr->value); + SetLocal* setHigh = builder->makeSetLocal( + blockHighBits, + builder->makeGetLocal(valHighBits, i32) + ); + curr->value = builder->makeGetLocal(tmp, i32); + curr->type = i32; + replaceCurrent(builder->blockify(setLow, setHigh, curr)); + } + + void visitSwitch(Switch* curr) { + if (!hasOutParam(curr->value)) return; + TempVar outParam = fetchOutParam(curr->value); + TempVar tmp = getTemp(); + Expression* result = curr; + std::vector targets; + size_t blockID = 0; + auto processTarget = [&](Name target) -> Name { + auto labelIt = labelHighBitVars.find(target); + if (labelIt == labelHighBitVars.end()) { + labelHighBitVars.emplace(target, getTemp()); + labelIt = labelHighBitVars.find(target); + } + Name newLabel("$i64toi32_" + std::string(target.c_str()) + + "_" + std::to_string(blockID++)); + Block* trampoline = builder->makeBlock(newLabel, result); + trampoline->type = i32; + result = builder->blockify( + builder->makeSetLocal(tmp, trampoline), + builder->makeSetLocal( + labelIt->second, + builder->makeGetLocal(outParam, i32) + ), + builder->makeBreak(target, builder->makeGetLocal(tmp, i32)) + ); + return newLabel; + }; + for (auto target : curr->targets) { + targets.push_back(processTarget(target)); + } + curr->targets.set(targets); + curr->default_ = processTarget(curr->default_); + replaceCurrent(result); + } + + template + using BuilderFunc = std::function&, WasmType)>; + + template + void visitGenericCall(T* curr, BuilderFunc callBuilder) { + std::vector args; + for (auto* e : curr->operands) { + args.push_back(e); + if (hasOutParam(e)) { + TempVar argHighBits = fetchOutParam(e); + args.push_back(builder->makeGetLocal(argHighBits, i32)); + } + } + if (curr->type != i64) { + replaceCurrent(callBuilder(args, curr->type)); + return; + } + TempVar lowBits = getTemp(); + TempVar highBits = getTemp(); + SetLocal* doCall = builder->makeSetLocal( + lowBits, + callBuilder(args, i32) + ); + SetLocal* setHigh = builder->makeSetLocal( + highBits, + builder->makeGetGlobal(highBitsGlobal, i32) + ); + GetLocal* getLow = builder->makeGetLocal(lowBits, i32); + Block* result = builder->blockify(doCall, setHigh, getLow); + setOutParam(result, std::move(highBits)); + replaceCurrent(result); + } + void visitCall(Call* curr) { + visitGenericCall( + curr, + [&](std::vector& args, WasmType ty) { + return builder->makeCall(curr->target, args, ty); + } + ); + } + + void visitCallImport(CallImport* curr) { + // imports cannot contain i64s + return; + } + + void visitCallIndirect(CallIndirect* curr) { + visitGenericCall( + curr, + [&](std::vector& args, WasmType ty) { + return builder->makeCallIndirect( + curr->fullType, + curr->target, + args, + ty + ); + } + ); + } + + void visitGetLocal(GetLocal* curr) { + if (curr->type != i64) return; + curr->index = indexMap[curr->index]; + curr->type = i32; + TempVar highBits = getTemp(); + SetLocal *setHighBits = builder->makeSetLocal( + highBits, + builder->makeGetLocal( + curr->index + 1, + i32 + ) + ); + Block* result = builder->blockify(setHighBits, curr); + replaceCurrent(result); + setOutParam(result, std::move(highBits)); + } + + void lowerTee(SetLocal* curr) { + TempVar highBits = fetchOutParam(curr->value); + TempVar tmp = getTemp(); + curr->index = indexMap[curr->index]; + curr->type = i32; + SetLocal* setLow = builder->makeSetLocal(tmp, curr); + SetLocal* setHigh = builder->makeSetLocal( + curr->index + 1, + builder->makeGetLocal(highBits, i32) + ); + GetLocal* getLow = builder->makeGetLocal(tmp, i32); + Block* result = builder->blockify(setLow, setHigh, getLow); + replaceCurrent(result); + setOutParam(result, std::move(highBits)); + } + + void visitSetLocal(SetLocal* curr) { + if (!hasOutParam(curr->value)) return; + if (curr->isTee()) { + lowerTee(curr); + return; + } + TempVar highBits = fetchOutParam(curr->value); + curr->index = indexMap[curr->index]; + SetLocal* setHigh = builder->makeSetLocal( + curr->index + 1, + builder->makeGetLocal(highBits, i32) + ); + Block* result = builder->blockify(curr, setHigh); + replaceCurrent(result); + } + + void visitGetGlobal(GetGlobal* curr) { + assert(false && "GetGlobal not implemented"); + } + + void visitSetGlobal(SetGlobal* curr) { + assert(false && "SetGlobal not implemented"); + } + + void visitLoad(Load* curr) { + if (curr->type != i64) return; + assert(!curr->isAtomic && "atomic load not implemented"); + TempVar highBits = getTemp(); + TempVar ptrTemp = getTemp(); + SetLocal* setPtr = builder->makeSetLocal(ptrTemp, curr->ptr); + SetLocal* loadHigh; + if (curr->bytes == 8) { + loadHigh = builder->makeSetLocal( + highBits, + builder->makeLoad( + 4, + curr->signed_, + curr->offset + 4, + 1, + builder->makeGetLocal(ptrTemp, i32), + i32 + ) + ); + } else { + loadHigh = builder->makeSetLocal( + highBits, + builder->makeConst(Literal(int32_t(0))) + ); + } + curr->type = i32; + curr->bytes = std::min(curr->bytes, uint8_t(4)); + curr->align = std::min(uint32_t(curr->align), uint32_t(4)); + curr->ptr = builder->makeGetLocal(ptrTemp, i32); + Block* result = builder->blockify(setPtr, loadHigh, curr); + replaceCurrent(result); + setOutParam(result, std::move(highBits)); + } + + void visitStore(Store* curr) { + if (!hasOutParam(curr->value)) return; + assert(curr->offset + 4 > curr->offset); + assert(!curr->isAtomic && "atomic store not implemented"); + TempVar highBits = fetchOutParam(curr->value); + uint8_t bytes = curr->bytes; + curr->bytes = std::min(curr->bytes, uint8_t(4)); + curr->align = std::min(uint32_t(curr->align), uint32_t(4)); + curr->valueType = i32; + if (bytes == 8) { + TempVar ptrTemp = getTemp(); + SetLocal* setPtr = builder->makeSetLocal(ptrTemp, curr->ptr); + curr->ptr = builder->makeGetLocal(ptrTemp, i32); + Store* storeHigh = builder->makeStore( + 4, + curr->offset + 4, + 1, + builder->makeGetLocal(ptrTemp, i32), + builder->makeGetLocal(highBits, i32), + i32 + ); + replaceCurrent(builder->blockify(setPtr, curr, storeHigh)); + } + } + + void visitAtomicRMW(AtomicRMW* curr) { + assert(false && "AtomicRMW not implemented"); + } + + void visitAtomicCmpxchg(AtomicCmpxchg* curr) { + assert(false && "AtomicCmpxchg not implemented"); + } + + void visitConst(Const* curr) { + if (curr->type != i64) return; + TempVar highBits = getTemp(); + Const* lowVal = builder->makeConst( + Literal(int32_t(curr->value.geti64() & 0xffffffff)) + ); + SetLocal* setHigh = builder->makeSetLocal( + highBits, + builder->makeConst( + Literal(int32_t(uint64_t(curr->value.geti64()) >> 32)) + ) + ); + Block* result = builder->blockify(setHigh, lowVal); + setOutParam(result, std::move(highBits)); + replaceCurrent(result); + } + + void lowerEqZInt64(Unary* curr) { + TempVar highBits = fetchOutParam(curr->value); + replaceCurrent( + builder->makeBinary( + AndInt32, + builder->makeUnary(EqZInt32, builder->makeGetLocal(highBits, i32)), + builder->makeUnary(EqZInt32, curr->value) + ) + ); + } + + void lowerExtendUInt32(Unary* curr) { + TempVar highBits = getTemp(); + Block* result = builder->blockify( + builder->makeSetLocal(highBits, builder->makeConst(Literal(int32_t(0)))), + curr->value + ); + setOutParam(result, std::move(highBits)); + replaceCurrent(result); + } + + void lowerWrapInt64(Unary* curr) { + // free the temp var + fetchOutParam(curr->value); + replaceCurrent(curr->value); + } + + bool unaryNeedsLowering(UnaryOp op) { + switch (op) { + case ClzInt64: + case CtzInt64: + case PopcntInt64: + case EqZInt64: + case ExtendSInt32: + case ExtendUInt32: + case WrapInt64: + case TruncSFloat32ToInt64: + case TruncUFloat32ToInt64: + case TruncSFloat64ToInt64: + case TruncUFloat64ToInt64: + case ReinterpretFloat64: + case ConvertSInt64ToFloat32: + case ConvertSInt64ToFloat64: + case ConvertUInt64ToFloat32: + case ConvertUInt64ToFloat64: + case ReinterpretInt64: return true; + default: return false; + } + } + + void visitUnary(Unary* curr) { + if (!unaryNeedsLowering(curr->op)) return; + if (curr->type == unreachable || curr->value->type == unreachable) { + assert(!hasOutParam(curr->value)); + replaceCurrent(curr->value); + return; + } + assert(hasOutParam(curr->value) || curr->type == i64); + switch (curr->op) { + case ClzInt64: + case CtzInt64: + case PopcntInt64: goto err; + case EqZInt64: lowerEqZInt64(curr); break; + case ExtendSInt32: goto err; + case ExtendUInt32: lowerExtendUInt32(curr); break; + case WrapInt64: lowerWrapInt64(curr); break; + case TruncSFloat32ToInt64: + case TruncUFloat32ToInt64: + case TruncSFloat64ToInt64: + case TruncUFloat64ToInt64: + case ReinterpretFloat64: + case ConvertSInt64ToFloat32: + case ConvertSInt64ToFloat64: + case ConvertUInt64ToFloat32: + case ConvertUInt64ToFloat64: + case ReinterpretInt64: + err: default: + std::cerr << "Unhandled unary operator: " << curr->op << std::endl; + abort(); + } + } + + Block* lowerAdd(Block* result, TempVar&& leftLow, TempVar&& leftHigh, + TempVar&& rightLow, TempVar&& rightHigh) { + SetLocal* addLow = builder->makeSetLocal( + leftHigh, + builder->makeBinary( + AddInt32, + builder->makeGetLocal(leftLow, i32), + builder->makeGetLocal(rightLow, i32) + ) + ); + SetLocal* addHigh = builder->makeSetLocal( + rightHigh, + builder->makeBinary( + AddInt32, + builder->makeGetLocal(leftHigh, i32), + builder->makeGetLocal(rightHigh, i32) + ) + ); + SetLocal* carryBit = builder->makeSetLocal( + rightHigh, + builder->makeBinary( + AddInt32, + builder->makeGetLocal(rightHigh, i32), + builder->makeConst(Literal(int32_t(1))) + ) + ); + If* checkOverflow = builder->makeIf( + builder->makeBinary( + LtUInt32, + builder->makeGetLocal(leftLow, i32), + builder->makeGetLocal(rightLow, i32) + ), + carryBit + ); + GetLocal* getLow = builder->makeGetLocal(leftHigh, i32); + result = builder->blockify(result, addLow, addHigh, checkOverflow, getLow); + setOutParam(result, std::move(rightHigh)); + return result; + } + + Block* lowerMul(Block* result, TempVar&& leftLow, TempVar&& leftHigh, + TempVar&& rightLow, TempVar&& rightHigh) { + // high bits = ll*rh + lh*rl + ll1*rl1 + (ll0*rl1)>>16 + (ll1*rl0)>>16 + // low bits = ll*rl + TempVar leftLow0 = getTemp(); + TempVar leftLow1 = getTemp(); + TempVar rightLow0 = getTemp(); + TempVar rightLow1 = getTemp(); + SetLocal* setLL0 = builder->makeSetLocal( + leftLow0, + builder->makeBinary( + AndInt32, + builder->makeGetLocal(leftLow, i32), + builder->makeConst(Literal(int32_t(0xffff))) + ) + ); + SetLocal* setLL1 = builder->makeSetLocal( + leftLow1, + builder->makeBinary( + ShrUInt32, + builder->makeGetLocal(leftLow, i32), + builder->makeConst(Literal(int32_t(16))) + ) + ); + SetLocal* setRL0 = builder->makeSetLocal( + rightLow0, + builder->makeBinary( + AndInt32, + builder->makeGetLocal(rightLow, i32), + builder->makeConst(Literal(int32_t(0xffff))) + ) + ); + SetLocal* setRL1 = builder->makeSetLocal( + rightLow1, + builder->makeBinary( + ShrUInt32, + builder->makeGetLocal(rightLow, i32), + builder->makeConst(Literal(int32_t(16))) + ) + ); + SetLocal* setLLRH = builder->makeSetLocal( + rightHigh, + builder->makeBinary( + MulInt32, + builder->makeGetLocal(leftLow, i32), + builder->makeGetLocal(rightHigh, i32) + ) + ); + auto addToHighBits = [&](Expression* expr) -> SetLocal* { + return builder->makeSetLocal( + rightHigh, + builder->makeBinary( + AddInt32, + builder->makeGetLocal(rightHigh, i32), + expr + ) + ); + }; + SetLocal* addLHRL = addToHighBits( + builder->makeBinary( + MulInt32, + builder->makeGetLocal(leftHigh, i32), + builder->makeGetLocal(rightLow, i32) + ) + ); + SetLocal* addLL1RL1 = addToHighBits( + builder->makeBinary( + MulInt32, + builder->makeGetLocal(leftLow1, i32), + builder->makeGetLocal(rightLow1, i32) + ) + ); + SetLocal* addLL0RL1 = addToHighBits( + builder->makeBinary( + ShrUInt32, + builder->makeBinary( + MulInt32, + builder->makeGetLocal(leftLow0, i32), + builder->makeGetLocal(rightLow1, i32) + ), + builder->makeConst(Literal(int32_t(16))) + ) + ); + SetLocal* addLL1RL0 = addToHighBits( + builder->makeBinary( + ShrUInt32, + builder->makeBinary( + MulInt32, + builder->makeGetLocal(leftLow1, i32), + builder->makeGetLocal(rightLow0, i32) + ), + builder->makeConst(Literal(int32_t(16))) + ) + ); + Binary* getLow = builder->makeBinary( + MulInt32, + builder->makeGetLocal(leftLow, i32), + builder->makeGetLocal(rightLow, i32) + ); + result = builder->blockify( + result, + setLL0, + setLL1, + setRL0, + setRL1, + setLLRH, + addLHRL, + addLL1RL1, + addLL0RL1, + addLL1RL0, + getLow + ); + setOutParam(result, std::move(rightHigh)); + return result; + } + + Block* lowerBitwise(BinaryOp op, Block* result, TempVar&& leftLow, + TempVar&& leftHigh, TempVar&& rightLow, + TempVar&& rightHigh) { + BinaryOp op32; + switch (op) { + case AndInt64: op32 = AndInt32; break; + case OrInt64: op32 = OrInt32; break; + case XorInt64: op32 = XorInt32; break; + default: abort(); + } + result = builder->blockify( + result, + builder->makeSetLocal( + rightHigh, + builder->makeBinary( + op32, + builder->makeGetLocal(leftHigh, i32), + builder->makeGetLocal(rightHigh, i32) + ) + ), + builder->makeBinary( + op32, + builder->makeGetLocal(leftLow, i32), + builder->makeGetLocal(rightLow, i32) + ) + ); + setOutParam(result, std::move(rightHigh)); + return result; + } + + Block* makeLargeShl(Index highBits, Index leftLow, Index shift) { + return builder->blockify( + builder->makeSetLocal( + highBits, + builder->makeBinary( + ShlInt32, + builder->makeGetLocal(leftLow, i32), + builder->makeGetLocal(shift, i32) + ) + ), + builder->makeConst(Literal(int32_t(0))) + ); + } + + Block* makeLargeShrU(Index highBits, Index leftHigh, Index shift) { + return builder->blockify( + builder->makeSetLocal(highBits, builder->makeConst(Literal(int32_t(0)))), + builder->makeBinary( + ShrUInt32, + builder->makeGetLocal(leftHigh, i32), + builder->makeGetLocal(shift, i32) + ) + ); + } + + Block* makeSmallShl(Index highBits, Index leftLow, Index leftHigh, + Index shift, Binary* shiftMask, Binary* widthLessShift) { + Binary* shiftedInBits = builder->makeBinary( + AndInt32, + shiftMask, + builder->makeBinary( + ShrUInt32, + builder->makeGetLocal(leftLow, i32), + widthLessShift + ) + ); + Binary* shiftHigh = builder->makeBinary( + ShlInt32, + builder->makeGetLocal(leftHigh, i32), + builder->makeGetLocal(shift, i32) + ); + return builder->blockify( + builder->makeSetLocal( + highBits, + builder->makeBinary(OrInt32, shiftedInBits, shiftHigh) + ), + builder->makeBinary( + ShlInt32, + builder->makeGetLocal(leftLow, i32), + builder->makeGetLocal(shift, i32) + ) + ); + } + + Block* makeSmallShrU(Index highBits, Index leftLow, Index leftHigh, + Index shift, Binary* shiftMask, Binary* widthLessShift) { + Binary* shiftedInBits = builder->makeBinary( + ShlInt32, + builder->makeBinary( + AndInt32, + shiftMask, + builder->makeGetLocal(leftHigh, i32) + ), + widthLessShift + ); + Binary* shiftLow = builder->makeBinary( + ShrUInt32, + builder->makeGetLocal(leftLow, i32), + builder->makeGetLocal(shift, i32) + ); + return builder->blockify( + builder->makeSetLocal( + highBits, + builder->makeBinary( + ShrUInt32, + builder->makeGetLocal(leftHigh, i32), + builder->makeGetLocal(shift, i32) + ) + ), + builder->makeBinary(OrInt32, shiftedInBits, shiftLow) + ); + } + + Block* lowerShU(BinaryOp op, Block* result, TempVar&& leftLow, + TempVar&& leftHigh, TempVar&& rightLow, TempVar&& rightHigh) { + assert(op == ShlInt64 || op == ShrUInt64); + // shift left lowered as: + // if 32 <= rightLow % 64: + // high = leftLow << k; low = 0 + // else: + // high = (((1 << k) - 1) & (leftLow >> (32 - k))) | (leftHigh << k); + // low = leftLow << k + // where k = shift % 32. shift right is similar. + TempVar shift = getTemp(); + SetLocal* setShift = builder->makeSetLocal( + shift, + builder->makeBinary( + AndInt32, + builder->makeGetLocal(rightLow, i32), + builder->makeConst(Literal(int32_t(32 - 1))) + ) + ); + Binary* isLargeShift = builder->makeBinary( + LeUInt32, + builder->makeConst(Literal(int32_t(32))), + builder->makeBinary( + AndInt32, + builder->makeGetLocal(rightLow, i32), + builder->makeConst(Literal(int32_t(64 - 1))) + ) + ); + Block* largeShiftBlock; + switch (op) { + case ShlInt64: + largeShiftBlock = makeLargeShl(rightHigh, leftLow, shift); break; + case ShrUInt64: + largeShiftBlock = makeLargeShrU(rightHigh, leftHigh, shift); break; + default: abort(); + } + Binary* shiftMask = builder->makeBinary( + SubInt32, + builder->makeBinary( + ShlInt32, + builder->makeConst(Literal(int32_t(1))), + builder->makeGetLocal(shift, i32) + ), + builder->makeConst(Literal(int32_t(1))) + ); + Binary* widthLessShift = builder->makeBinary( + SubInt32, + builder->makeConst(Literal(int32_t(32))), + builder->makeGetLocal(shift, i32) + ); + Block* smallShiftBlock; + switch(op) { + case ShlInt64: { + smallShiftBlock = makeSmallShl(rightHigh, leftLow, leftHigh, + shift, shiftMask, widthLessShift); + break; + } + case ShrUInt64: { + smallShiftBlock = makeSmallShrU(rightHigh, leftLow, leftHigh, + shift, shiftMask, widthLessShift); + break; + } + default: abort(); + } + If* ifLargeShift = builder->makeIf( + isLargeShift, + largeShiftBlock, + smallShiftBlock + ); + result = builder->blockify(result, setShift, ifLargeShift); + setOutParam(result, std::move(rightHigh)); + return result; + } + + Block* lowerEq(Block* result, TempVar&& leftLow, TempVar&& leftHigh, + TempVar&& rightLow, TempVar&& rightHigh) { + return builder->blockify( + result, + builder->makeBinary( + AndInt32, + builder->makeBinary( + EqInt32, + builder->makeGetLocal(leftLow, i32), + builder->makeGetLocal(rightLow, i32) + ), + builder->makeBinary( + EqInt32, + builder->makeGetLocal(leftHigh, i32), + builder->makeGetLocal(rightHigh, i32) + ) + ) + ); + } + + Block* lowerNe(Block* result, TempVar&& leftLow, TempVar&& leftHigh, + TempVar&& rightLow, TempVar&& rightHigh) { + return builder->blockify( + result, + builder->makeBinary( + OrInt32, + builder->makeBinary( + NeInt32, + builder->makeGetLocal(leftLow, i32), + builder->makeGetLocal(rightLow, i32) + ), + builder->makeBinary( + NeInt32, + builder->makeGetLocal(leftHigh, i32), + builder->makeGetLocal(rightHigh, i32) + ) + ) + ); + } + + Block* lowerUComp(BinaryOp op, Block* result, TempVar&& leftLow, + TempVar&& leftHigh, TempVar&& rightLow, + TempVar&& rightHigh) { + BinaryOp highOp, lowOp; + switch (op) { + case LtUInt64: highOp = LtUInt32; lowOp = LtUInt32; break; + case LeUInt64: highOp = LtUInt32; lowOp = LeUInt32; break; + case GtUInt64: highOp = GtUInt32; lowOp = GtUInt32; break; + case GeUInt64: highOp = GtUInt32; lowOp = GeUInt32; break; + default: abort(); + } + Binary* compHigh = builder->makeBinary( + highOp, + builder->makeGetLocal(leftHigh, i32), + builder->makeGetLocal(rightHigh, i32) + ); + Binary* eqHigh = builder->makeBinary( + EqInt32, + builder->makeGetLocal(leftHigh, i32), + builder->makeGetLocal(rightHigh, i32) + ); + Binary* compLow = builder->makeBinary( + lowOp, + builder->makeGetLocal(leftLow, i32), + builder->makeGetLocal(rightLow, i32) + ); + return builder->blockify( + result, + builder->makeBinary( + OrInt32, + compHigh, + builder->makeBinary(AndInt32, eqHigh, compLow) + ) + ); + } + + bool binaryNeedsLowering(BinaryOp op) { + switch (op) { + case AddInt64: + case SubInt64: + case MulInt64: + case DivSInt64: + case DivUInt64: + case RemSInt64: + case RemUInt64: + case AndInt64: + case OrInt64: + case XorInt64: + case ShlInt64: + case ShrUInt64: + case ShrSInt64: + case RotLInt64: + case RotRInt64: + case EqInt64: + case NeInt64: + case LtSInt64: + case LtUInt64: + case LeSInt64: + case LeUInt64: + case GtSInt64: + case GtUInt64: + case GeSInt64: + case GeUInt64: return true; + default: return false; + } + } + + void visitBinary(Binary* curr) { + if (!binaryNeedsLowering(curr->op)) return; + if (!hasOutParam(curr->left)) { + // left unreachable, replace self with left + replaceCurrent(curr->left); + if (hasOutParam(curr->right)) { + // free temp var + fetchOutParam(curr->right); + } + return; + } + if (!hasOutParam(curr->right)) { + // right unreachable, replace self with left then right + replaceCurrent( + builder->blockify(builder->makeDrop(curr->left), curr->right) + ); + // free temp var + fetchOutParam(curr->left); + return; + } + // left and right reachable, lower normally + TempVar leftLow = getTemp(); + TempVar leftHigh = fetchOutParam(curr->left); + TempVar rightLow = getTemp(); + TempVar rightHigh = fetchOutParam(curr->right); + SetLocal* setRight = builder->makeSetLocal(rightLow, curr->right); + SetLocal* setLeft = builder->makeSetLocal(leftLow, curr->left); + Block* result = builder->blockify(setLeft, setRight); + switch (curr->op) { + case AddInt64: { + replaceCurrent( + lowerAdd(result, std::move(leftLow), std::move(leftHigh), + std::move(rightLow), std::move(rightHigh))); + break; + } + case SubInt64: goto err; + case MulInt64: { + replaceCurrent( + lowerMul(result, std::move(leftLow), std::move(leftHigh), + std::move(rightLow), std::move(rightHigh)) + ); + break; + } + case DivSInt64: + case DivUInt64: + case RemSInt64: + case RemUInt64: goto err; + case AndInt64: + case OrInt64: + case XorInt64: { + replaceCurrent( + lowerBitwise(curr->op, result, std::move(leftLow), + std::move(leftHigh), std::move(rightLow), + std::move(rightHigh)) + ); + break; + } + case ShlInt64: + case ShrUInt64: { + replaceCurrent( + lowerShU(curr->op, result, std::move(leftLow), std::move(leftHigh), + std::move(rightLow), std::move(rightHigh)) + ); + break; + } + case ShrSInt64: + case RotLInt64: + case RotRInt64: goto err; + case EqInt64: { + replaceCurrent( + lowerEq(result, std::move(leftLow), std::move(leftHigh), + std::move(rightLow), std::move(rightHigh)) + ); + break; + } + case NeInt64: { + replaceCurrent( + lowerNe(result, std::move(leftLow), std::move(leftHigh), + std::move(rightLow), std::move(rightHigh)) + ); + break; + } + case LtSInt64: + case LeSInt64: + case GtSInt64: + case GeSInt64: goto err; + case LtUInt64: + case LeUInt64: + case GtUInt64: + case GeUInt64: { + replaceCurrent( + lowerUComp(curr->op, result, std::move(leftLow), std::move(leftHigh), + std::move(rightLow), std::move(rightHigh)) + ); + break; + } + err: default: { + std::cerr << "Unhandled binary op " << curr->op << std::endl; + abort(); + } + } + } + + void visitSelect(Select* curr) { + visitBranching()) { + select->condition = optimizeBoolean(select->condition); + auto* condition = select->condition->dynCast(); + if (condition && condition->op == EqZInt32) { + // flip select to remove eqz, if we can reorder + EffectAnalyzer ifTrue(getPassOptions(), select->ifTrue); + EffectAnalyzer ifFalse(getPassOptions(), select->ifFalse); + if (!ifTrue.invalidates(ifFalse)) { + select->condition = condition->value; + std::swap(select->ifTrue, select->ifFalse); + } + } + if (ExpressionAnalyzer::equal(select->ifTrue, select->ifFalse)) { + // sides are identical, fold + EffectAnalyzer value(getPassOptions(), select->ifTrue); + if (value.hasSideEffects()) { + // at best we don't need the condition, but need to execute the value + // twice. a block is larger than a select by 2 bytes, and + // we must drop one value, so 3, while we save the condition, + // so it's not clear this is worth it, TODO + } else { + // value has no side effects + EffectAnalyzer condition(getPassOptions(), select->condition); + if (!condition.hasSideEffects()) { + return select->ifTrue; + } else { + // the condition is last, so we need a new local, and it may be + // a bad idea to use a block like we do for an if. Do it only if we + // can reorder + if (!condition.invalidates(value)) { + Builder builder(*getModule()); + return builder.makeSequence( + builder.makeDrop(select->condition), + select->ifTrue + ); + } + } + } + } + } else if (auto* br = curr->dynCast()) { + if (br->condition) { + br->condition = optimizeBoolean(br->condition); + } + } else if (auto* load = curr->dynCast()) { + optimizeMemoryAccess(load->ptr, load->offset); + } else if (auto* store = curr->dynCast()) { + optimizeMemoryAccess(store->ptr, store->offset); + // stores of fewer bits truncates anyhow + if (auto* binary = store->value->dynCast()) { + if (binary->op == AndInt32) { + if (auto* right = binary->right->dynCast()) { + if (right->type == i32) { + auto mask = right->value.geti32(); + if ((store->bytes == 1 && mask == 0xff) || + (store->bytes == 2 && mask == 0xffff)) { + store->value = binary->left; + } + } + } + } else if (auto* ext = Properties::getSignExtValue(binary)) { + // if sign extending the exact bit size we store, we can skip the extension + // if extending something bigger, then we just alter bits we don't save anyhow + if (Properties::getSignExtBits(binary) >= store->bytes * 8) { + store->value = ext; + } + } + } else if (auto* unary = store->value->dynCast()) { + if (unary->op == WrapInt64) { + // instead of wrapping to 32, just store some of the bits in the i64 + store->valueType = i64; + store->value = unary->value; + } + } + } + return nullptr; + } + + Index getMaxBitsForLocal(GetLocal* get) { + // check what we know about the local + return localInfo[get->index].maxBits; + } + +private: + // Information about our locals + std::vector localInfo; + + // Optimize given that the expression is flowing into a boolean context + Expression* optimizeBoolean(Expression* boolean) { + if (auto* unary = boolean->dynCast()) { + if (unary && unary->op == EqZInt32) { + auto* unary2 = unary->value->dynCast(); + if (unary2 && unary2->op == EqZInt32) { + // double eqz + return unary2->value; + } + } + } else if (auto* binary = boolean->dynCast()) { + if (binary->op == OrInt32) { + // an or flowing into a boolean context can consider each input as boolean + binary->left = optimizeBoolean(binary->left); + binary->right = optimizeBoolean(binary->right); + } else if (binary->op == NeInt32) { + // x != 0 is just x if it's used as a bool + if (auto* num = binary->right->dynCast()) { + if (num->value.geti32() == 0) { + return binary->left; + } + } + } + if (auto* ext = Properties::getSignExtValue(binary)) { + // use a cheaper zero-extent, we just care about the boolean value anyhow + return makeZeroExt(ext, Properties::getSignExtBits(binary)); + } + } else if (auto* block = boolean->dynCast()) { + if (block->type == i32 && block->list.size() > 0) { + block->list.back() = optimizeBoolean(block->list.back()); + } + } else if (auto* iff = boolean->dynCast()) { + if (iff->type == i32) { + iff->ifTrue = optimizeBoolean(iff->ifTrue); + iff->ifFalse = optimizeBoolean(iff->ifFalse); + } + } + // TODO: recurse into br values? + return boolean; + } + + // find added constants in an expression tree, including multiplied/shifted, and combine them + // note that we ignore division/shift-right, as rounding makes this nonlinear, so not a valid opt + Expression* optimizeAddedConstants(Binary* binary) { + int32_t constant = 0; + std::vector constants; + std::function seek = [&](Expression* curr, int mul) { + if (auto* c = curr->dynCast()) { + auto value = c->value.geti32(); + if (value != 0) { + constant += value * mul; + constants.push_back(c); + } + } else if (auto* binary = curr->dynCast()) { + if (binary->op == AddInt32) { + seek(binary->left, mul); + seek(binary->right, mul); + return; + } else if (binary->op == SubInt32) { + // if the left is a zero, ignore it, it's how we negate ints + auto* left = binary->left->dynCast(); + if (!left || left->value.geti32() != 0) { + seek(binary->left, mul); + } + seek(binary->right, -mul); + return; + } else if (binary->op == ShlInt32) { + if (auto* c = binary->right->dynCast()) { + seek(binary->left, mul * Pow2(Bits::getEffectiveShifts(c))); + return; + } + } else if (binary->op == MulInt32) { + if (auto* c = binary->left->dynCast()) { + seek(binary->right, mul * c->value.geti32()); + return; + } else if (auto* c = binary->right->dynCast()) { + seek(binary->left, mul * c->value.geti32()); + return; + } + } + } + }; + // find all factors + seek(binary, 1); + if (constants.size() <= 1) { + // nothing much to do, except for the trivial case of adding/subbing a zero + if (auto* c = binary->right->dynCast()) { + if (c->value.geti32() == 0) { + return binary->left; + } + } + return nullptr; + } + // wipe out all constants, we'll replace with a single added one + for (auto* c : constants) { + c->value = Literal(int32_t(0)); + } + // remove added/subbed zeros + struct ZeroRemover : public PostWalker { + // TODO: we could save the binarys and costs we drop, and reuse them later + + PassOptions& passOptions; + + ZeroRemover(PassOptions& passOptions) : passOptions(passOptions) {} + + void visitBinary(Binary* curr) { + auto* left = curr->left->dynCast(); + auto* right = curr->right->dynCast(); + if (curr->op == AddInt32) { + if (left && left->value.geti32() == 0) { + replaceCurrent(curr->right); + return; + } + if (right && right->value.geti32() == 0) { + replaceCurrent(curr->left); + return; + } + } else if (curr->op == SubInt32) { + // we must leave a left zero, as it is how we negate ints + if (right && right->value.geti32() == 0) { + replaceCurrent(curr->left); + return; + } + } else if (curr->op == ShlInt32) { + // shifting a 0 is a 0, or anything by 0 has no effect, all unless the shift has side effects + if (((left && left->value.geti32() == 0) || (right && Bits::getEffectiveShifts(right) == 0)) && + !EffectAnalyzer(passOptions, curr->right).hasSideEffects()) { + replaceCurrent(curr->left); + return; + } + } else if (curr->op == MulInt32) { + // multiplying by zero is a zero, unless the other side has side effects + if (left && left->value.geti32() == 0 && !EffectAnalyzer(passOptions, curr->right).hasSideEffects()) { + replaceCurrent(left); + return; + } + if (right && right->value.geti32() == 0 && !EffectAnalyzer(passOptions, curr->left).hasSideEffects()) { + replaceCurrent(right); + return; + } + } + } + }; + Expression* walked = binary; + ZeroRemover(getPassOptions()).walk(walked); + if (constant == 0) return walked; // nothing more to do + if (auto* c = walked->dynCast()) { + assert(c->value.geti32() == 0); + c->value = Literal(constant); + return c; + } + Builder builder(*getModule()); + return builder.makeBinary(AddInt32, + walked, + builder.makeConst(Literal(constant)) + ); + } + + // expensive1 | expensive2 can be turned into expensive1 ? 1 : expensive2, and + // expensive | cheap can be turned into cheap ? 1 : expensive, + // so that we can avoid one expensive computation, if it has no side effects. + Expression* conditionalizeExpensiveOnBitwise(Binary* binary) { + // this operation can increase code size, so don't always do it + auto& options = getPassRunner()->options; + if (options.optimizeLevel < 2 || options.shrinkLevel > 0) return nullptr; + const auto MIN_COST = 7; + assert(binary->op == AndInt32 || binary->op == OrInt32); + if (binary->right->is()) return nullptr; // trivial + // bitwise logical operator on two non-numerical values, check if they are boolean + auto* left = binary->left; + auto* right = binary->right; + if (!Properties::emitsBoolean(left) || !Properties::emitsBoolean(right)) return nullptr; + auto leftEffects = EffectAnalyzer(getPassOptions(), left); + auto rightEffects = EffectAnalyzer(getPassOptions(), right); + auto leftHasSideEffects = leftEffects.hasSideEffects(); + auto rightHasSideEffects = rightEffects.hasSideEffects(); + if (leftHasSideEffects && rightHasSideEffects) return nullptr; // both must execute + // canonicalize with side effects, if any, happening on the left + if (rightHasSideEffects) { + if (CostAnalyzer(left).cost < MIN_COST) return nullptr; // avoidable code is too cheap + if (leftEffects.invalidates(rightEffects)) return nullptr; // cannot reorder + std::swap(left, right); + } else if (leftHasSideEffects) { + if (CostAnalyzer(right).cost < MIN_COST) return nullptr; // avoidable code is too cheap + } else { + // no side effects, reorder based on cost estimation + auto leftCost = CostAnalyzer(left).cost; + auto rightCost = CostAnalyzer(right).cost; + if (std::max(leftCost, rightCost) < MIN_COST) return nullptr; // avoidable code is too cheap + // canonicalize with expensive code on the right + if (leftCost > rightCost) { + std::swap(left, right); + } + } + // worth it! perform conditionalization + Builder builder(*getModule()); + if (binary->op == OrInt32) { + return builder.makeIf(left, builder.makeConst(Literal(int32_t(1))), right); + } else { // & + return builder.makeIf(left, right, builder.makeConst(Literal(int32_t(0)))); + } + } + + // fold constant factors into the offset + void optimizeMemoryAccess(Expression*& ptr, Address& offset) { + // ptr may be a const, but it isn't worth folding that in (we still have a const); in fact, + // it's better to do the opposite for gzip purposes as well as for readability. + auto* last = ptr->dynCast(); + if (last) { + // don't do this if it would wrap the pointer + uint64_t value64 = last->value.geti32(); + uint64_t offset64 = offset; + if (value64 <= std::numeric_limits::max() && + offset64 <= std::numeric_limits::max() && + value64 + offset64 <= std::numeric_limits::max()) { + last->value = Literal(int32_t(value64 + offset64)); + offset = 0; + } + } + } + + Expression* makeZeroExt(Expression* curr, int32_t bits) { + Builder builder(*getModule()); + return builder.makeBinary(AndInt32, curr, builder.makeConst(Literal(Bits::lowBitMask(bits)))); + } + + // given an "almost" sign extend - either a proper one, or it + // has too many shifts left - we remove the sig extend. If there are + // too many shifts, we split the shifts first, so this removes the + // two sign extend shifts and adds one (smaller one) + Expression* removeAlmostSignExt(Binary* outer) { + auto* inner = outer->left->cast(); + auto* outerConst = outer->right->cast(); + auto* innerConst = inner->right->cast(); + auto* value = inner->left; + if (outerConst->value == innerConst->value) return value; + // add a shift, by reusing the existing node + innerConst->value = innerConst->value.sub(outerConst->value); + return inner; + } + + // check if an expression is already sign-extended + bool isSignExted(Expression* curr, Index bits) { + if (Properties::getSignExtValue(curr)) { + return Properties::getSignExtBits(curr) == bits; + } + if (auto* get = curr->dynCast()) { + // check what we know about the local + return localInfo[get->index].signExtedBits == bits; + } + return false; + } +}; + +Pass *createOptimizeInstructionsPass() { + return new OptimizeInstructions(); +} + +} // namespace wasm diff --git a/src/binaryen/src/passes/OptimizeInstructions.wast b/src/binaryen/src/passes/OptimizeInstructions.wast new file mode 100644 index 0000000000..5142dc2c63 --- /dev/null +++ b/src/binaryen/src/passes/OptimizeInstructions.wast @@ -0,0 +1,27 @@ + +;; This file contains patterns for OptimizeInstructions. Basically, we use a DSL for the patterns, +;; and the DSL is just wasm itself, plus some functions with special meanings +;; +;; This file is converted into OptimizeInstructions.wast.processed by +;; scripts/process_optimize_instructions.py +;; which makes it importable by C++. Then we just #include it there, avoiding the need to ship +;; a data file on the side. + +(module + ;; "expr" represents an arbitrary expression. The input is an id, so the same expression + ;; can appear more than once. The type (i32 in i32.expr, etc.) is the return type, as this + ;; needs to have the right type for where it is placed. + (import $i32.expr "dsl" "i32.expr" (param i32) (result i32)) + (import $i64.expr "dsl" "i64.expr" (param i32) (result i64)) + (import $f32.expr "dsl" "f32.expr" (param i32) (result f32)) + (import $f64.expr "dsl" "f64.expr" (param i32) (result f64)) + (import $any.expr "dsl" "any.expr" (param i32) (result i32)) ;; ignorable return type + + ;; TODO for now wasm is not that convenient for a DSL like this. Needs rethinking. + + (func $patterns + (block + ) + ) +) + diff --git a/src/binaryen/src/passes/OptimizeInstructions.wast.processed b/src/binaryen/src/passes/OptimizeInstructions.wast.processed new file mode 100644 index 0000000000..b69ecdf045 --- /dev/null +++ b/src/binaryen/src/passes/OptimizeInstructions.wast.processed @@ -0,0 +1,27 @@ +"\n" +";; This file contains patterns for OptimizeInstructions. Basically, we use a DSL for the patterns,\n" +";; and the DSL is just wasm itself, plus some functions with special meanings\n" +";;\n" +";; This file is converted into OptimizeInstructions.wast.processed by\n" +";; scripts/process_optimize_instructions.py\n" +";; which makes it importable by C++. Then we just #include it there, avoiding the need to ship\n" +";; a data file on the side.\n" +"\n" +"(module\n" +";; \"expr\" represents an arbitrary expression. The input is an id, so the same expression\n" +";; can appear more than once. The type (i32 in i32.expr, etc.) is the return type, as this\n" +";; needs to have the right type for where it is placed.\n" +"(import $i32.expr \"dsl\" \"i32.expr\" (param i32) (result i32))\n" +"(import $i64.expr \"dsl\" \"i64.expr\" (param i32) (result i64))\n" +"(import $f32.expr \"dsl\" \"f32.expr\" (param i32) (result f32))\n" +"(import $f64.expr \"dsl\" \"f64.expr\" (param i32) (result f64))\n" +"(import $any.expr \"dsl\" \"any.expr\" (param i32) (result i32)) ;; ignorable return type\n" +"\n" +";; TODO for now wasm is not that convenient for a DSL like this. Needs rethinking.\n" +"\n" +"(func $patterns\n" +"(block\n" +")\n" +")\n" +")\n" +"\n" diff --git a/src/binaryen/src/passes/PickLoadSigns.cpp b/src/binaryen/src/passes/PickLoadSigns.cpp new file mode 100644 index 0000000000..8273468393 --- /dev/null +++ b/src/binaryen/src/passes/PickLoadSigns.cpp @@ -0,0 +1,111 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +namespace wasm { + +// Adjust load signedness based on usage. If a load only has uses that sign or +// unsign it anyhow, then it could be either, and picking the popular one can +// help remove the most sign/unsign operations +// unsigned, then it could be either + +struct PickLoadSigns : public WalkerPass> { + bool isFunctionParallel() override { return true; } + + Pass* create() override { return new PickLoadSigns; } + + struct Usage { + Index signedUsages = 0; + Index signedBits; + Index unsignedUsages = 0; + Index unsignedBits; + Index totalUsages = 0; + }; + std::vector usages; // local index => usage + + std::unordered_map loads; // loads that write to a local => the local + + void doWalkFunction(Function* func) { + // prepare + usages.resize(func->getNumLocals()); + // walk + ExpressionStackWalker::doWalkFunction(func); + // optimize based on the info we saw + for (auto& pair : loads) { + auto* load = pair.first; + auto index = pair.second; + auto& usage = usages[index]; + // if we can't optimize, give up + if (usage.totalUsages == 0 || // no usages, so no idea + usage.signedUsages + usage.unsignedUsages != usage.totalUsages || // non-sign/unsigned usages, so cannot change + (usage.signedUsages != 0 && usage.signedBits != load->bytes * 8) || // sign usages exist but the wrong size + (usage.unsignedUsages != 0 && usage.unsignedBits != load->bytes * 8)) { // unsigned usages exist but the wrong size + continue; + } + // we can pick the optimal one. our hope is to remove 2 items per + // signed use (two shifts), so we factor that in + load->signed_ = usage.signedUsages * 2 >= usage.unsignedUsages; + } + } + + void visitGetLocal(GetLocal* curr) { + // this is a use. check from the context what it is, signed or unsigned, etc. + auto& usage = usages[curr->index]; + usage.totalUsages++; + if (expressionStack.size() >= 2) { + auto* parent = expressionStack[expressionStack.size() - 2]; + if (Properties::getZeroExtValue(parent)) { + auto bits = Properties::getZeroExtBits(parent); + if (usage.unsignedUsages == 0) { + usage.unsignedBits = bits; + } else if (usage.unsignedBits != bits) { + usage.unsignedBits = 0; + } + usage.unsignedUsages++; + } else if (expressionStack.size() >= 3) { + auto* grandparent = expressionStack[expressionStack.size() - 3]; + if (Properties::getSignExtValue(grandparent)) { + auto bits = Properties::getSignExtBits(grandparent); + if (usage.signedUsages == 0) { + usage.signedBits = bits; + } else if (usage.signedBits != bits) { + usage.signedBits = 0; + } + usage.signedUsages++; + } + } + } + } + + void visitSetLocal(SetLocal* curr) { + if (curr->isTee()) { + // we can't modify a tee, the value is used elsewhere + return; + } + if (auto* load = curr->value->dynCast()) { + loads[load] = curr->index; + } + } +}; + +Pass *createPickLoadSignsPass() { + return new PickLoadSigns(); +} + +} // namespace wasm diff --git a/src/binaryen/src/passes/PostEmscripten.cpp b/src/binaryen/src/passes/PostEmscripten.cpp new file mode 100644 index 0000000000..a7f0e62823 --- /dev/null +++ b/src/binaryen/src/passes/PostEmscripten.cpp @@ -0,0 +1,120 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Misc optimizations that are useful for and/or are only valid for +// emscripten output. +// + +#include +#include +#include +#include +#include + +namespace wasm { + +struct PostEmscripten : public WalkerPass> { + bool isFunctionParallel() override { return true; } + + Pass* create() override { return new PostEmscripten; } + + // When we have a Load from a local value (typically a GetLocal) plus a constant offset, + // we may be able to fold it in. + // The semantics of the Add are to wrap, while wasm offset semantics purposefully do + // not wrap. So this is not always safe to do. For example, a load may depend on + // wrapping via + // (2^32 - 10) + 100 => wrap and load from address 90 + // Without wrapping, we get something too large, and an error. *However*, for + // asm2wasm output coming from Emscripten, we allocate the lowest 1024 for mapped + // globals. Mapped globals are simple types (i32, float or double), always + // accessed directly by a single constant. Therefore if we see (..) + K where + // K is less then 1024, then if it wraps, it wraps into [0, 1024) which is at best + // a mapped global, but it can't be because they are accessed directly (at worst, + // it's 0 or an unused section of memory that was reserved for mapped globlas). + // Thus it is ok to optimize such small constants into Load offsets. + + #define SAFE_MAX 1024 + + void optimizeMemoryAccess(Expression*& ptr, Address& offset) { + while (1) { + auto* add = ptr->dynCast(); + if (!add) break; + if (add->op != AddInt32) break; + auto* left = add->left->dynCast(); + auto* right = add->right->dynCast(); + // note: in optimized code, we shouldn't see an add of two constants, so don't worry about that much + // (precompute would optimize that) + if (left) { + auto value = left->value.geti32(); + if (value >= 0 && value < SAFE_MAX) { + offset = offset + value; + ptr = add->right; + continue; + } + } + if (right) { + auto value = right->value.geti32(); + if (value >= 0 && value < SAFE_MAX) { + offset = offset + value; + ptr = add->left; + continue; + } + } + break; + } + // finally ptr may be a const, but it isn't worth folding that in (we still have a const); in fact, + // it's better to do the opposite for gzip purposes as well as for readability. + auto* last = ptr->dynCast(); + if (last) { + last->value = Literal(int32_t(last->value.geti32() + offset)); + offset = 0; + } + } + + void visitLoad(Load* curr) { + optimizeMemoryAccess(curr->ptr, curr->offset); + } + void visitStore(Store* curr) { + optimizeMemoryAccess(curr->ptr, curr->offset); + } + + void visitCallImport(CallImport* curr) { + // special asm.js imports can be optimized + auto* import = getModule()->getImport(curr->target); + if (import->module == GLOBAL_MATH) { + if (import->base == POW) { + if (auto* exponent = curr->operands[1]->dynCast()) { + if (exponent->value == Literal(double(2.0))) { + // This is just a square operation, do a multiply + Localizer localizer(curr->operands[0], getFunction(), getModule()); + Builder builder(*getModule()); + replaceCurrent(builder.makeBinary(MulFloat64, localizer.expr, builder.makeGetLocal(localizer.index, localizer.expr->type))); + } else if (exponent->value == Literal(double(0.5))) { + // This is just a square root operation + replaceCurrent(Builder(*getModule()).makeUnary(SqrtFloat64, curr->operands[0])); + } + } + } + } + } +}; + +Pass *createPostEmscriptenPass() { + return new PostEmscripten(); +} + +} // namespace wasm diff --git a/src/binaryen/src/passes/Precompute.cpp b/src/binaryen/src/passes/Precompute.cpp new file mode 100644 index 0000000000..f4c20d0d0c --- /dev/null +++ b/src/binaryen/src/passes/Precompute.cpp @@ -0,0 +1,303 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Computes code at compile time where possible. +// + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace wasm { + +static const Name NONSTANDALONE_FLOW("Binaryen|nonstandalone"); + +typedef std::unordered_map GetValues; + +// Execute an expression by itself. Errors if we hit anything we need anything not in the expression itself standalone. +class StandaloneExpressionRunner : public ExpressionRunner { + // map gets to constant values, if they are known to be constant + GetValues& getValues; + +public: + StandaloneExpressionRunner(GetValues& getValues) : getValues(getValues) {} + + struct NonstandaloneException {}; // TODO: use a flow with a special name, as this is likely very slow + + Flow visitLoop(Loop* curr) { + // loops might be infinite, so must be careful + // but we can't tell if non-infinite, since we don't have state, so loops are just impossible to optimize for now + return Flow(NONSTANDALONE_FLOW); + } + + Flow visitCall(Call* curr) { + return Flow(NONSTANDALONE_FLOW); + } + Flow visitCallImport(CallImport* curr) { + return Flow(NONSTANDALONE_FLOW); + } + Flow visitCallIndirect(CallIndirect* curr) { + return Flow(NONSTANDALONE_FLOW); + } + Flow visitGetLocal(GetLocal *curr) { + auto iter = getValues.find(curr); + if (iter != getValues.end()) { + auto value = iter->second; + if (value.isConcrete()) { + return Flow(value); + } + } + return Flow(NONSTANDALONE_FLOW); + } + Flow visitSetLocal(SetLocal *curr) { + return Flow(NONSTANDALONE_FLOW); + } + Flow visitGetGlobal(GetGlobal *curr) { + return Flow(NONSTANDALONE_FLOW); + } + Flow visitSetGlobal(SetGlobal *curr) { + return Flow(NONSTANDALONE_FLOW); + } + Flow visitLoad(Load *curr) { + return Flow(NONSTANDALONE_FLOW); + } + Flow visitStore(Store *curr) { + return Flow(NONSTANDALONE_FLOW); + } + Flow visitAtomicRMW(AtomicRMW *curr) { + return Flow(NONSTANDALONE_FLOW); + } + Flow visitAtomicCmpxchg(AtomicCmpxchg *curr) { + return Flow(NONSTANDALONE_FLOW); + } + Flow visitAtomicWait(AtomicWait *curr) { + return Flow(NONSTANDALONE_FLOW); + } + Flow visitAtomicWake(AtomicWake *curr) { + return Flow(NONSTANDALONE_FLOW); + } + Flow visitHost(Host *curr) { + return Flow(NONSTANDALONE_FLOW); + } + + void trap(const char* why) override { + throw NonstandaloneException(); + } +}; + +struct Precompute : public WalkerPass>> { + bool isFunctionParallel() override { return true; } + + Pass* create() override { return new Precompute(propagate); } + + bool propagate = false; + + Precompute(bool propagate) : propagate(propagate) {} + + GetValues getValues; + + void doWalkFunction(Function* func) { + // with extra effort, we can utilize the get-set graph to precompute + // things that use locals that are known to be constant. otherwise, + // we just look at what is immediately before us + if (propagate) { + optimizeLocals(func, getModule()); + } + // do the main and final walk over everything + super::doWalkFunction(func); + } + + void visitExpression(Expression* curr) { + // TODO: if get_local, only replace with a constant if we don't care about size...? + if (curr->is() || curr->is()) return; + // try to evaluate this into a const + Flow flow = precomputeFlow(curr); + if (flow.breaking()) { + if (flow.breakTo == NONSTANDALONE_FLOW) return; + if (flow.breakTo == RETURN_FLOW) { + // this expression causes a return. if it's already a return, reuse the node + if (auto* ret = curr->dynCast()) { + if (flow.value.type != none) { + // reuse a const value if there is one + if (ret->value) { + if (auto* value = ret->value->dynCast()) { + value->value = flow.value; + value->finalize(); + return; + } + } + ret->value = Builder(*getModule()).makeConst(flow.value); + } else { + ret->value = nullptr; + } + } else { + Builder builder(*getModule()); + replaceCurrent(builder.makeReturn(flow.value.type != none ? builder.makeConst(flow.value) : nullptr)); + } + return; + } + // this expression causes a break, emit it directly. if it's already a br, reuse the node. + if (auto* br = curr->dynCast()) { + br->name = flow.breakTo; + br->condition = nullptr; + if (flow.value.type != none) { + // reuse a const value if there is one + if (br->value) { + if (auto* value = br->value->dynCast()) { + value->value = flow.value; + value->finalize(); + br->finalize(); + return; + } + } + br->value = Builder(*getModule()).makeConst(flow.value); + } else { + br->value = nullptr; + } + br->finalize(); + } else { + Builder builder(*getModule()); + replaceCurrent(builder.makeBreak(flow.breakTo, flow.value.type != none ? builder.makeConst(flow.value) : nullptr)); + } + return; + } + // this was precomputed + if (isConcreteWasmType(flow.value.type)) { + replaceCurrent(Builder(*getModule()).makeConst(flow.value)); + } else { + ExpressionManipulator::nop(curr); + } + } + + void visitFunction(Function* curr) { + // removing breaks can alter types + ReFinalize().walkFunctionInModule(curr, getModule()); + } + +private: + Flow precomputeFlow(Expression* curr) { + try { + return StandaloneExpressionRunner(getValues).visit(curr); + } catch (StandaloneExpressionRunner::NonstandaloneException& e) { + return Flow(NONSTANDALONE_FLOW); + } + } + + Literal precomputeValue(Expression* curr) { + Flow flow = precomputeFlow(curr); + if (flow.breaking()) { + return Literal(); + } + return flow.value; + } + + void optimizeLocals(Function* func, Module* module) { + // using the graph of get-set interactions, do a constant-propagation type + // operation: note which sets are assigned locals, then see if that lets us + // compute other sets as locals (since some of the gets they read may be + // constant). + // compute all dependencies + LocalGraph localGraph(func, module); + localGraph.computeInfluences(); + // prepare the work list. we add things here that might change to a constant + // initially, that means everything + std::unordered_set work; + for (auto& pair : localGraph.locations) { + auto* curr = pair.first; + work.insert(curr); + } + std::unordered_map setValues; // the constant value, or none if not a constant + // propagate constant values + while (!work.empty()) { + auto iter = work.begin(); + auto* curr = *iter; + work.erase(iter); + // see if this set or get is actually a constant value, and if so, + // mark it as such and add everything it influences to the work list, + // as they may be constant too. + if (auto* set = curr->dynCast()) { + if (setValues[set].isConcrete()) continue; // already known constant + auto value = setValues[set] = precomputeValue(set->value); + if (value.isConcrete()) { + for (auto* get : localGraph.setInfluences[set]) { + work.insert(get); + } + } + } else { + auto* get = curr->cast(); + if (getValues[get].isConcrete()) continue; // already known constant + // for this get to have constant value, all sets must agree + Literal value; + bool first = true; + for (auto* set : localGraph.getSetses[get]) { + Literal curr; + if (set == nullptr) { + if (getFunction()->isVar(get->index)) { + curr = LiteralUtils::makeLiteralZero(getFunction()->getLocalType(get->index)); + } else { + // it's a param, so it's hopeless + value = Literal(); + break; + } + } else { + curr = setValues[set]; + } + if (curr.isNull()) { + // not a constant, give up + value = Literal(); + break; + } + // we found a concrete value. compare with the current one + if (first) { + value = curr; // this is the first + first = false; + } else { + if (!value.bitwiseEqual(curr)) { + // not the same, give up + value = Literal(); + break; + } + } + } + // we may have found a value + if (value.isConcrete()) { + // we did! + getValues[get] = value; + for (auto* set : localGraph.getInfluences[get]) { + work.insert(set); + } + } + } + } + } +}; + +Pass *createPrecomputePass() { + return new Precompute(false); +} + +Pass *createPrecomputePropagatePass() { + return new Precompute(true); +} + +} // namespace wasm + diff --git a/src/binaryen/src/passes/Print.cpp b/src/binaryen/src/passes/Print.cpp new file mode 100644 index 0000000000..2f7588b37a --- /dev/null +++ b/src/binaryen/src/passes/Print.cpp @@ -0,0 +1,916 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Print out text in s-expression format +// + +#include +#include +#include +#include +#include + +namespace wasm { + +static int isFullForced() { + if (getenv("BINARYEN_PRINT_FULL")) { + return std::stoi(getenv("BINARYEN_PRINT_FULL")); + } + return 0; +} + +struct PrintSExpression : public Visitor { + std::ostream& o; + unsigned indent = 0; + + bool minify; + const char *maybeSpace; + const char *maybeNewLine; + + bool full = false; // whether to not elide nodes in output when possible + // (like implicit blocks) and to emit types + + Module* currModule = nullptr; + Function* currFunction = nullptr; + Function::DebugLocation lastPrintedLocation; + + std::unordered_map functionIndexes; + + PrintSExpression(std::ostream& o) : o(o) { + setMinify(false); + if (!full) full = isFullForced(); + } + + void visit(Expression* curr) { + if (currFunction) { + // show an annotation, if there is one + auto& debugLocations = currFunction->debugLocations; + auto iter = debugLocations.find(curr); + if (iter != debugLocations.end()) { + auto fileName = currModule->debugInfoFileNames[iter->second.fileIndex]; + if (lastPrintedLocation != iter->second) { + lastPrintedLocation = iter->second; + o << ";;@ " << fileName << ":" << iter->second.lineNumber << ":" << iter->second.columnNumber << '\n'; + doIndent(o, indent); + } + } + } + Visitor::visit(curr); + } + + void setMinify(bool minify_) { + minify = minify_; + maybeSpace = minify ? "" : " "; + maybeNewLine = minify ? "" : "\n"; + } + + void setFull(bool full_) { full = full_; } + + void incIndent() { + if (minify) return; + o << '\n'; + indent++; + } + void decIndent() { + if (!minify) { + indent--; + doIndent(o, indent); + } + o << ')'; + } + void printFullLine(Expression *expression) { + !minify && doIndent(o, indent); + if (full) { + o << "[" << printWasmType(expression->type) << "] "; + } + visit(expression); + o << maybeNewLine; + } + + Name printableLocal(Index index) { + Name name; + if (currFunction) { + name = currFunction->getLocalNameOrDefault(index); + } + if (!name.is()) { + name = Name::fromInt(index); + } + return name; + } + + std::ostream& printName(Name name) { + // we need to quote names if they have tricky chars + if (strpbrk(name.str, "()")) { + o << '"' << name << '"'; + } else { + o << name; + } + return o; + } + + void visitBlock(Block *curr) { + // special-case Block, because Block nesting (in their first element) can be incredibly deep + std::vector stack; + while (1) { + if (stack.size() > 0) doIndent(o, indent); + stack.push_back(curr); + if (full) { + o << "[" << printWasmType(curr->type) << "] "; + } + printOpening(o, "block"); + if (curr->name.is()) { + o << ' '; + printName(curr->name); + } + if (isConcreteWasmType(curr->type)) { + o << " (result " << printWasmType(curr->type) << ')'; + } + incIndent(); + if (curr->list.size() > 0 && curr->list[0]->is()) { + // recurse into the first element + curr = curr->list[0]->cast(); + continue; + } else { + break; // that's all we can recurse, start to unwind + } + } + auto* top = stack.back(); + while (stack.size() > 0) { + curr = stack.back(); + stack.pop_back(); + auto& list = curr->list; + for (size_t i = 0; i < list.size(); i++) { + if (curr != top && i == 0) { + // one of the block recursions we already handled + decIndent(); + o << '\n'; + continue; + } + printFullLine(list[i]); + } + } + decIndent(); + } + void visitIf(If *curr) { + printOpening(o, "if"); + if (isConcreteWasmType(curr->type)) { + o << " (result " << printWasmType(curr->type) << ')'; + } + incIndent(); + printFullLine(curr->condition); + // ifTrue and False have implict blocks, avoid printing them if possible + if (!full && curr->ifTrue->is() && curr->ifTrue->dynCast()->name.isNull() && curr->ifTrue->dynCast()->list.size() == 1) { + printFullLine(curr->ifTrue->dynCast()->list.back()); + } else { + printFullLine(curr->ifTrue); + } + if (curr->ifFalse) { + if (!full && curr->ifFalse->is() && curr->ifFalse->dynCast()->name.isNull() && curr->ifFalse->dynCast()->list.size() == 1) { + printFullLine(curr->ifFalse->dynCast()->list.back()); + } else { + printFullLine(curr->ifFalse); + } + } + decIndent(); + } + void visitLoop(Loop *curr) { + printOpening(o, "loop"); + if (curr->name.is()) { + o << ' ' << curr->name; + } + if (isConcreteWasmType(curr->type)) { + o << " (result " << printWasmType(curr->type) << ')'; + } + incIndent(); + auto block = curr->body->dynCast(); + if (!full && block && block->name.isNull()) { + // wasm spec has loops containing children directly, while our ast + // has a single child for simplicity. print out the optimal form. + for (auto expression : block->list) { + printFullLine(expression); + } + } else { + printFullLine(curr->body); + } + decIndent(); + } + void visitBreak(Break *curr) { + if (curr->condition) { + printOpening(o, "br_if "); + printName(curr->name); + incIndent(); + } else { + printOpening(o, "br "); + printName(curr->name); + if (!curr->value || curr->value->is()) { + // avoid a new line just for the parens + o << ')'; + return; + } + incIndent(); + } + if (curr->value && !curr->value->is()) printFullLine(curr->value); + if (curr->condition) { + printFullLine(curr->condition); + } + decIndent(); + } + void visitSwitch(Switch *curr) { + printOpening(o, "br_table"); + for (auto& t : curr->targets) { + o << ' ' << t; + } + o << ' ' << curr->default_; + incIndent(); + if (curr->value && !curr->value->is()) printFullLine(curr->value); + printFullLine(curr->condition); + decIndent(); + } + + template + void printCallBody(CallBase* curr) { + printName(curr->target); + if (curr->operands.size() > 0) { + incIndent(); + for (auto operand : curr->operands) { + printFullLine(operand); + } + decIndent(); + } else { + o << ')'; + } + } + + void visitCall(Call *curr) { + printOpening(o, "call "); + printCallBody(curr); + } + void visitCallImport(CallImport *curr) { + printOpening(o, "call "); + printCallBody(curr); + } + void visitCallIndirect(CallIndirect *curr) { + printOpening(o, "call_indirect (type ") << curr->fullType << ')'; + incIndent(); + for (auto operand : curr->operands) { + printFullLine(operand); + } + printFullLine(curr->target); + decIndent(); + } + void visitGetLocal(GetLocal *curr) { + printOpening(o, "get_local ") << printableLocal(curr->index) << ')'; + } + void visitSetLocal(SetLocal *curr) { + if (curr->isTee()) { + printOpening(o, "tee_local "); + } else { + printOpening(o, "set_local "); + } + o << printableLocal(curr->index); + incIndent(); + printFullLine(curr->value); + decIndent(); + } + void visitGetGlobal(GetGlobal *curr) { + printOpening(o, "get_global "); + printName(curr->name) << ')'; + } + void visitSetGlobal(SetGlobal *curr) { + printOpening(o, "set_global "); + printName(curr->name); + incIndent(); + printFullLine(curr->value); + decIndent(); + } + void visitLoad(Load *curr) { + o << '('; + prepareColor(o) << printWasmType(curr->type); + if (curr->isAtomic) o << ".atomic"; + o << ".load"; + if (curr->bytes < 4 || (curr->type == i64 && curr->bytes < 8)) { + if (curr->bytes == 1) { + o << '8'; + } else if (curr->bytes == 2) { + o << "16"; + } else if (curr->bytes == 4) { + o << "32"; + } else { + abort(); + } + o << (curr->signed_ ? "_s" : "_u"); + } + restoreNormalColor(o); + if (curr->offset) { + o << " offset=" << curr->offset; + } + if (curr->align != curr->bytes) { + o << " align=" << curr->align; + } + incIndent(); + printFullLine(curr->ptr); + decIndent(); + } + void visitStore(Store *curr) { + o << '('; + prepareColor(o) << printWasmType(curr->valueType); + if (curr->isAtomic) o << ".atomic"; + o << ".store"; + if (curr->bytes < 4 || (curr->valueType == i64 && curr->bytes < 8)) { + if (curr->bytes == 1) { + o << '8'; + } else if (curr->bytes == 2) { + o << "16"; + } else if (curr->bytes == 4) { + o << "32"; + } else { + abort(); + } + } + restoreNormalColor(o); + if (curr->offset) { + o << " offset=" << curr->offset; + } + if (curr->align != curr->bytes) { + o << " align=" << curr->align; + } + incIndent(); + printFullLine(curr->ptr); + printFullLine(curr->value); + decIndent(); + } + static void printRMWSize(std::ostream& o, WasmType type, uint8_t bytes) { + prepareColor(o) << printWasmType(type) << ".atomic.rmw"; + if (type == unreachable) { + o << '?'; + } else if (bytes != getWasmTypeSize(type)) { + if (bytes == 1) { + o << '8'; + } else if (bytes == 2) { + o << "16"; + } else if (bytes == 4) { + o << "32"; + } else { + WASM_UNREACHABLE(); + } + o << "_u"; + } + o << '.'; + } + void visitAtomicRMW(AtomicRMW* curr) { + o << '('; + prepareColor(o); + printRMWSize(o, curr->type, curr->bytes); + switch (curr->op) { + case Add: o << "add"; break; + case Sub: o << "sub"; break; + case And: o << "and"; break; + case Or: o << "or"; break; + case Xor: o << "xor"; break; + case Xchg: o << "xchg"; break; + } + restoreNormalColor(o); + if (curr->offset) { + o << " offset=" << curr->offset; + } + incIndent(); + printFullLine(curr->ptr); + printFullLine(curr->value); + decIndent(); + } + void visitAtomicCmpxchg(AtomicCmpxchg* curr) { + o << '('; + prepareColor(o); + printRMWSize(o, curr->type, curr->bytes); + o << "cmpxchg"; + restoreNormalColor(o); + if (curr->offset) { + o << " offset=" << curr->offset; + } + incIndent(); + printFullLine(curr->ptr); + printFullLine(curr->expected); + printFullLine(curr->replacement); + decIndent(); + } + void visitAtomicWait(AtomicWait* curr) { + o << '(' ; + prepareColor(o); + o << printWasmType(curr->expectedType) << ".wait"; + restoreNormalColor(o); + incIndent(); + printFullLine(curr->ptr); + printFullLine(curr->expected); + printFullLine(curr->timeout); + decIndent(); + } + void visitAtomicWake(AtomicWake* curr) { + printOpening(o, "wake"); + incIndent(); + printFullLine(curr->ptr); + printFullLine(curr->wakeCount); + decIndent(); + } + void visitConst(Const *curr) { + o << curr->value; + } + void visitUnary(Unary *curr) { + o << '('; + prepareColor(o); + switch (curr->op) { + case ClzInt32: o << "i32.clz"; break; + case CtzInt32: o << "i32.ctz"; break; + case PopcntInt32: o << "i32.popcnt"; break; + case EqZInt32: o << "i32.eqz"; break; + case ClzInt64: o << "i64.clz"; break; + case CtzInt64: o << "i64.ctz"; break; + case PopcntInt64: o << "i64.popcnt"; break; + case EqZInt64: o << "i64.eqz"; break; + case NegFloat32: o << "f32.neg"; break; + case AbsFloat32: o << "f32.abs"; break; + case CeilFloat32: o << "f32.ceil"; break; + case FloorFloat32: o << "f32.floor"; break; + case TruncFloat32: o << "f32.trunc"; break; + case NearestFloat32: o << "f32.nearest"; break; + case SqrtFloat32: o << "f32.sqrt"; break; + case NegFloat64: o << "f64.neg"; break; + case AbsFloat64: o << "f64.abs"; break; + case CeilFloat64: o << "f64.ceil"; break; + case FloorFloat64: o << "f64.floor"; break; + case TruncFloat64: o << "f64.trunc"; break; + case NearestFloat64: o << "f64.nearest"; break; + case SqrtFloat64: o << "f64.sqrt"; break; + case ExtendSInt32: o << "i64.extend_s/i32"; break; + case ExtendUInt32: o << "i64.extend_u/i32"; break; + case WrapInt64: o << "i32.wrap/i64"; break; + case TruncSFloat32ToInt32: o << "i32.trunc_s/f32"; break; + case TruncSFloat32ToInt64: o << "i64.trunc_s/f32"; break; + case TruncUFloat32ToInt32: o << "i32.trunc_u/f32"; break; + case TruncUFloat32ToInt64: o << "i64.trunc_u/f32"; break; + case TruncSFloat64ToInt32: o << "i32.trunc_s/f64"; break; + case TruncSFloat64ToInt64: o << "i64.trunc_s/f64"; break; + case TruncUFloat64ToInt32: o << "i32.trunc_u/f64"; break; + case TruncUFloat64ToInt64: o << "i64.trunc_u/f64"; break; + case ReinterpretFloat32: o << "i32.reinterpret/f32"; break; + case ReinterpretFloat64: o << "i64.reinterpret/f64"; break; + case ConvertUInt32ToFloat32: o << "f32.convert_u/i32"; break; + case ConvertUInt32ToFloat64: o << "f64.convert_u/i32"; break; + case ConvertSInt32ToFloat32: o << "f32.convert_s/i32"; break; + case ConvertSInt32ToFloat64: o << "f64.convert_s/i32"; break; + case ConvertUInt64ToFloat32: o << "f32.convert_u/i64"; break; + case ConvertUInt64ToFloat64: o << "f64.convert_u/i64"; break; + case ConvertSInt64ToFloat32: o << "f32.convert_s/i64"; break; + case ConvertSInt64ToFloat64: o << "f64.convert_s/i64"; break; + case PromoteFloat32: o << "f64.promote/f32"; break; + case DemoteFloat64: o << "f32.demote/f64"; break; + case ReinterpretInt32: o << "f32.reinterpret/i32"; break; + case ReinterpretInt64: o << "f64.reinterpret/i64"; break; + case ExtendS8Int32: o << "i32.extend8_s"; break; + case ExtendS16Int32: o << "i32.extend16_s"; break; + case ExtendS8Int64: o << "i64.extend8_s"; break; + case ExtendS16Int64: o << "i64.extend16_s"; break; + case ExtendS32Int64: o << "i64.extend32_s"; break; + default: abort(); + } + incIndent(); + printFullLine(curr->value); + decIndent(); + } + void visitBinary(Binary *curr) { + o << '('; + prepareColor(o); + switch (curr->op) { + case AddInt32: o << "i32.add"; break; + case SubInt32: o << "i32.sub"; break; + case MulInt32: o << "i32.mul"; break; + case DivSInt32: o << "i32.div_s"; break; + case DivUInt32: o << "i32.div_u"; break; + case RemSInt32: o << "i32.rem_s"; break; + case RemUInt32: o << "i32.rem_u"; break; + case AndInt32: o << "i32.and"; break; + case OrInt32: o << "i32.or"; break; + case XorInt32: o << "i32.xor"; break; + case ShlInt32: o << "i32.shl"; break; + case ShrUInt32: o << "i32.shr_u"; break; + case ShrSInt32: o << "i32.shr_s"; break; + case RotLInt32: o << "i32.rotl"; break; + case RotRInt32: o << "i32.rotr"; break; + case EqInt32: o << "i32.eq"; break; + case NeInt32: o << "i32.ne"; break; + case LtSInt32: o << "i32.lt_s"; break; + case LtUInt32: o << "i32.lt_u"; break; + case LeSInt32: o << "i32.le_s"; break; + case LeUInt32: o << "i32.le_u"; break; + case GtSInt32: o << "i32.gt_s"; break; + case GtUInt32: o << "i32.gt_u"; break; + case GeSInt32: o << "i32.ge_s"; break; + case GeUInt32: o << "i32.ge_u"; break; + + case AddInt64: o << "i64.add"; break; + case SubInt64: o << "i64.sub"; break; + case MulInt64: o << "i64.mul"; break; + case DivSInt64: o << "i64.div_s"; break; + case DivUInt64: o << "i64.div_u"; break; + case RemSInt64: o << "i64.rem_s"; break; + case RemUInt64: o << "i64.rem_u"; break; + case AndInt64: o << "i64.and"; break; + case OrInt64: o << "i64.or"; break; + case XorInt64: o << "i64.xor"; break; + case ShlInt64: o << "i64.shl"; break; + case ShrUInt64: o << "i64.shr_u"; break; + case ShrSInt64: o << "i64.shr_s"; break; + case RotLInt64: o << "i64.rotl"; break; + case RotRInt64: o << "i64.rotr"; break; + case EqInt64: o << "i64.eq"; break; + case NeInt64: o << "i64.ne"; break; + case LtSInt64: o << "i64.lt_s"; break; + case LtUInt64: o << "i64.lt_u"; break; + case LeSInt64: o << "i64.le_s"; break; + case LeUInt64: o << "i64.le_u"; break; + case GtSInt64: o << "i64.gt_s"; break; + case GtUInt64: o << "i64.gt_u"; break; + case GeSInt64: o << "i64.ge_s"; break; + case GeUInt64: o << "i64.ge_u"; break; + + case AddFloat32: o << "f32.add"; break; + case SubFloat32: o << "f32.sub"; break; + case MulFloat32: o << "f32.mul"; break; + case DivFloat32: o << "f32.div"; break; + case CopySignFloat32: o << "f32.copysign"; break; + case MinFloat32: o << "f32.min"; break; + case MaxFloat32: o << "f32.max"; break; + case EqFloat32: o << "f32.eq"; break; + case NeFloat32: o << "f32.ne"; break; + case LtFloat32: o << "f32.lt"; break; + case LeFloat32: o << "f32.le"; break; + case GtFloat32: o << "f32.gt"; break; + case GeFloat32: o << "f32.ge"; break; + + case AddFloat64: o << "f64.add"; break; + case SubFloat64: o << "f64.sub"; break; + case MulFloat64: o << "f64.mul"; break; + case DivFloat64: o << "f64.div"; break; + case CopySignFloat64: o << "f64.copysign"; break; + case MinFloat64: o << "f64.min"; break; + case MaxFloat64: o << "f64.max"; break; + case EqFloat64: o << "f64.eq"; break; + case NeFloat64: o << "f64.ne"; break; + case LtFloat64: o << "f64.lt"; break; + case LeFloat64: o << "f64.le"; break; + case GtFloat64: o << "f64.gt"; break; + case GeFloat64: o << "f64.ge"; break; + + default: abort(); + } + restoreNormalColor(o); + incIndent(); + printFullLine(curr->left); + printFullLine(curr->right); + decIndent(); + } + void visitSelect(Select *curr) { + o << '('; + prepareColor(o) << "select"; + incIndent(); + printFullLine(curr->ifTrue); + printFullLine(curr->ifFalse); + printFullLine(curr->condition); + decIndent(); + } + void visitDrop(Drop *curr) { + printOpening(o, "drop"); + incIndent(); + printFullLine(curr->value); + decIndent(); + } + void visitReturn(Return *curr) { + printOpening(o, "return"); + if (!curr->value) { + // avoid a new line just for the parens + o << ')'; + return; + } + incIndent(); + printFullLine(curr->value); + decIndent(); + } + void visitHost(Host *curr) { + switch (curr->op) { + case PageSize: printOpening(o, "pagesize") << ')'; break; + case CurrentMemory: printOpening(o, "current_memory") << ')'; break; + case GrowMemory: { + printOpening(o, "grow_memory"); + incIndent(); + printFullLine(curr->operands[0]); + decIndent(); + break; + } + case HasFeature: printOpening(o, "hasfeature ") << curr->nameOperand << ')'; break; + default: abort(); + } + } + void visitNop(Nop *curr) { + printMinorOpening(o, "nop") << ')'; + } + void visitUnreachable(Unreachable *curr) { + printMinorOpening(o, "unreachable") << ')'; + } + // Module-level visitors + void visitFunctionType(FunctionType *curr, Name* internalName = nullptr) { + o << "(func"; + if (internalName) o << ' ' << *internalName; + if (curr->params.size() > 0) { + o << maybeSpace; + printMinorOpening(o, "param"); + for (auto& param : curr->params) { + o << ' ' << printWasmType(param); + } + o << ')'; + } + if (curr->result != none) { + o << maybeSpace; + printMinorOpening(o, "result ") << printWasmType(curr->result) << ')'; + } + o << ")"; + } + void visitImport(Import *curr) { + printOpening(o, "import "); + printText(o, curr->module.str) << ' '; + printText(o, curr->base.str) << ' '; + switch (curr->kind) { + case ExternalKind::Function: if (curr->functionType.is()) visitFunctionType(currModule->getFunctionType(curr->functionType), &curr->name); break; + case ExternalKind::Table: printTableHeader(&currModule->table); break; + case ExternalKind::Memory: printMemoryHeader(&currModule->memory); break; + case ExternalKind::Global: o << "(global " << curr->name << ' ' << printWasmType(curr->globalType) << ")"; break; + default: WASM_UNREACHABLE(); + } + o << ')'; + } + void visitExport(Export *curr) { + printOpening(o, "export "); + printText(o, curr->name.str) << " ("; + switch (curr->kind) { + case ExternalKind::Function: o << "func"; break; + case ExternalKind::Table: o << "table"; break; + case ExternalKind::Memory: o << "memory"; break; + case ExternalKind::Global: o << "global"; break; + default: WASM_UNREACHABLE(); + } + o << ' '; + printName(curr->value) << "))"; + } + void visitGlobal(Global *curr) { + printOpening(o, "global "); + printName(curr->name) << ' '; + if (curr->mutable_) { + o << "(mut " << printWasmType(curr->type) << ") "; + } else { + o << printWasmType(curr->type) << ' '; + } + visit(curr->init); + o << ')'; + } + void visitFunction(Function *curr) { + currFunction = curr; + lastPrintedLocation = { 0, 0, 0 }; + printOpening(o, "func ", true); + printName(curr->name); + if (currModule && !minify) { + // emit the function index in a comment + if (functionIndexes.empty()) { + ModuleUtils::BinaryIndexes indexes(*currModule); + functionIndexes = std::move(indexes.functionIndexes); + } + o << " (; " << functionIndexes[curr->name] << " ;)"; + } + if (curr->type.is()) { + o << maybeSpace << "(type " << curr->type << ')'; + } + if (curr->params.size() > 0) { + for (size_t i = 0; i < curr->params.size(); i++) { + o << maybeSpace; + printMinorOpening(o, "param ") << printableLocal(i) << ' ' << printWasmType(curr->getLocalType(i)) << ')'; + } + } + if (curr->result != none) { + o << maybeSpace; + printMinorOpening(o, "result ") << printWasmType(curr->result) << ')'; + } + incIndent(); + for (size_t i = curr->getVarIndexBase(); i < curr->getNumLocals(); i++) { + doIndent(o, indent); + printMinorOpening(o, "local ") << printableLocal(i) << ' ' << printWasmType(curr->getLocalType(i)) << ')'; + o << maybeNewLine; + } + // It is ok to emit a block here, as a function can directly contain a list, even if our + // ast avoids that for simplicity. We can just do that optimization here.. + if (!full && curr->body->is() && curr->body->cast()->name.isNull()) { + Block* block = curr->body->cast(); + for (auto item : block->list) { + printFullLine(item); + } + } else { + printFullLine(curr->body); + } + decIndent(); + } + void printTableHeader(Table* curr) { + printOpening(o, "table") << ' '; + o << curr->initial; + if (curr->hasMax()) o << ' ' << curr->max; + o << " anyfunc)"; + } + void visitTable(Table *curr) { + // if table wasn't imported, declare it + if (!curr->imported) { + doIndent(o, indent); + printTableHeader(curr); + o << maybeNewLine; + } + if (curr->segments.empty()) return; + doIndent(o, indent); + for (auto& segment : curr->segments) { + // Don't print empty segments + if (segment.data.empty()) continue; + printOpening(o, "elem ", true); + visit(segment.offset); + for (auto name : segment.data) { + o << ' '; + printName(name); + } + o << ')'; + } + o << maybeNewLine; + } + void printMemoryHeader(Memory* curr) { + printOpening(o, "memory") << ' '; + printName(curr->name) << ' '; + if (curr->shared) printOpening(o, "shared "); + o << curr->initial; + if (curr->hasMax()) o << ' ' << curr->max; + if (curr->shared) o << ")"; + o << ")"; + } + void visitMemory(Memory* curr) { + // if memory wasn't imported, declare it + if (!curr->imported) { + doIndent(o, indent); + printMemoryHeader(curr); + o << '\n'; + } + for (auto segment : curr->segments) { + doIndent(o, indent); + printOpening(o, "data ", true); + visit(segment.offset); + o << " \""; + for (size_t i = 0; i < segment.data.size(); i++) { + unsigned char c = segment.data[i]; + switch (c) { + case '\n': o << "\\n"; break; + case '\r': o << "\\0d"; break; + case '\t': o << "\\t"; break; + case '\f': o << "\\0c"; break; + case '\b': o << "\\08"; break; + case '\\': o << "\\\\"; break; + case '"' : o << "\\\""; break; + case '\'' : o << "\\'"; break; + default: { + if (c >= 32 && c < 127) { + o << c; + } else { + o << std::hex << '\\' << (c/16) << (c%16) << std::dec; + } + } + } + } + o << "\")\n"; + } + } + void visitModule(Module *curr) { + currModule = curr; + printOpening(o, "module", true); + incIndent(); + for (auto& child : curr->functionTypes) { + doIndent(o, indent); + printOpening(o, "type") << ' '; + printName(child->name) << ' '; + visitFunctionType(child.get()); + o << ")" << maybeNewLine; + } + for (auto& child : curr->imports) { + doIndent(o, indent); + visitImport(child.get()); + o << maybeNewLine; + } + for (auto& child : curr->globals) { + doIndent(o, indent); + visitGlobal(child.get()); + o << maybeNewLine; + } + if (curr->table.exists) { + visitTable(&curr->table); // Prints its own newlines + } + visitMemory(&curr->memory); + for (auto& child : curr->exports) { + doIndent(o, indent); + visitExport(child.get()); + o << maybeNewLine; + } + if (curr->start.is()) { + doIndent(o, indent); + printOpening(o, "start") << ' ' << curr->start << ')'; + o << maybeNewLine; + } + for (auto& child : curr->functions) { + doIndent(o, indent); + visitFunction(child.get()); + o << maybeNewLine; + } + for (auto& section : curr->userSections) { + doIndent(o, indent); + o << ";; custom section \"" << section.name << "\", size " << section.data.size(); + o << maybeNewLine; + } + decIndent(); + o << maybeNewLine; + currModule = nullptr; + } +}; + +void Printer::run(PassRunner* runner, Module* module) { + PrintSExpression print(o); + print.visitModule(module); +} + +Pass *createPrinterPass() { + return new Printer(); +} + +// Prints out a minified module + +class MinifiedPrinter : public Printer { +public: + MinifiedPrinter() : Printer() {} + MinifiedPrinter(std::ostream* o) : Printer(o) {} + + void run(PassRunner* runner, Module* module) override { + PrintSExpression print(o); + print.setMinify(true); + print.visitModule(module); + } +}; + +Pass *createMinifiedPrinterPass() { + return new MinifiedPrinter(); +} + +// Prints out a module withough elision, i.e., the full ast + +class FullPrinter : public Printer { +public: + FullPrinter() : Printer() {} + FullPrinter(std::ostream* o) : Printer(o) {} + + void run(PassRunner* runner, Module* module) override { + PrintSExpression print(o); + print.setFull(true); + print.visitModule(module); + } +}; + +Pass *createFullPrinterPass() { + return new FullPrinter(); +} + +// Print individual expressions + +std::ostream& WasmPrinter::printExpression(Expression* expression, std::ostream& o, bool minify, bool full) { + if (!expression) { + o << "(null expression)"; + return o; + } + PrintSExpression print(o); + print.setMinify(minify); + if (full || isFullForced()) { + print.setFull(true); + o << "[" << printWasmType(expression->type) << "] "; + } + print.visit(expression); + return o; +} + +} // namespace wasm diff --git a/src/binaryen/src/passes/PrintCallGraph.cpp b/src/binaryen/src/passes/PrintCallGraph.cpp new file mode 100644 index 0000000000..ac11dfb8bc --- /dev/null +++ b/src/binaryen/src/passes/PrintCallGraph.cpp @@ -0,0 +1,111 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Prints the call graph in .dot format. You can use http://www.graphviz.org/ to view .dot files. +// + + +#include +#include + +#include "wasm.h" +#include "pass.h" +#include "ir/utils.h" + +namespace wasm { + +struct PrintCallGraph : public Pass { + void run(PassRunner* runner, Module* module) override { + std::ostream &o = std::cout; + o << "digraph call {\n" + " rankdir = LR;\n" + " subgraph cluster_key {\n" + " node [shape=box, fontname=courier, fontsize=10];\n" + " edge [fontname=courier, fontsize=10];\n" + " label = \"Key\";\n" + " \"Import\" [style=\"filled\", fillcolor=\"turquoise\"];\n" + " \"Export\" [style=\"filled\", fillcolor=\"gray\"];\n" + " \"Indirect Target\" [style=\"filled, rounded\", fillcolor=\"white\"];\n" + " \"A\" -> \"B\" [style=\"filled, rounded\", label = \"Direct Call\"];\n" + " }\n\n" + " node [shape=box, fontname=courier, fontsize=10];\n"; + + // All Functions + for (auto& func : module->functions) { + std::cout << " \"" << func.get()->name << "\" [style=\"filled\", fillcolor=\"white\"];\n"; + } + + // Imports Nodes + for (auto& curr : module->imports) { + if (curr->kind == ExternalKind::Function) { + o << " \"" << curr->name << "\" [style=\"filled\", fillcolor=\"turquoise\"];\n"; + } + } + + // Exports Nodes + for (auto& curr : module->exports) { + if (curr->kind == ExternalKind::Function) { + Function* func = module->getFunction(curr->value); + o << " \"" << func->name << "\" [style=\"filled\", fillcolor=\"gray\"];\n"; + } + } + + struct CallPrinter : public PostWalker { + Module *module; + Function *currFunction; + std::set visitedTargets; // Used to avoid printing duplicate edges. + std::vector allIndirectTargets; + CallPrinter(Module *module) : module(module) { + // Walk function bodies. + for (auto& func : module->functions) { + currFunction = func.get(); + visitedTargets.clear(); + walk(func.get()->body); + } + } + void visitCall(Call *curr) { + auto* target = module->getFunction(curr->target); + if (visitedTargets.count(target->name) > 0) return; + visitedTargets.insert(target->name); + std::cout << " \"" << currFunction->name << "\" -> \"" << target->name << "\"; // call\n"; + } + void visitCallImport(CallImport *curr) { + auto name = curr->target; + if (visitedTargets.count(name) > 0) return; + visitedTargets.insert(name); + std::cout << " \"" << currFunction->name << "\" -> \"" << name << "\"; // callImport\n"; + } + }; + CallPrinter printer(module); + + // Indirect Targets + for (auto& segment : module->table.segments) { + for (auto& curr : segment.data) { + auto* func = module->getFunction(curr); + o << " \"" << func->name << "\" [style=\"filled, rounded\"];\n"; + } + } + + o << "}\n"; + } +}; + +Pass *createPrintCallGraphPass() { + return new PrintCallGraph(); +} + +} // namespace wasm diff --git a/src/binaryen/src/passes/ReReloop.cpp b/src/binaryen/src/passes/ReReloop.cpp new file mode 100644 index 0000000000..ff1eec6b5e --- /dev/null +++ b/src/binaryen/src/passes/ReReloop.cpp @@ -0,0 +1,370 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Convert the AST to a CFG, and optimize+convert it back to the AST +// using the relooper. +// +// This pass depends on flatten being run before it. +// + +#include + +#include "wasm.h" +#include "wasm-builder.h" +#include "wasm-traversal.h" +#include "pass.h" +#include "cfg/Relooper.h" +#include "ir/utils.h" + +#ifdef RERELOOP_DEBUG +#include +#endif + +namespace wasm { + +struct ReReloop final : public Pass { + bool isFunctionParallel() override { return true; } + + Pass* create() override { return new ReReloop; } + + CFG::Relooper relooper; + std::unique_ptr builder; + + // block handling + + CFG::Block* currCFGBlock = nullptr; + + CFG::Block* makeCFGBlock() { + auto* ret = new CFG::Block(builder->makeBlock()); + relooper.AddBlock(ret); + return ret; + } + + CFG::Block* setCurrCFGBlock(CFG::Block* curr) { + if (currCFGBlock) { + finishBlock(); + } + return currCFGBlock = curr; + } + + CFG::Block* startCFGBlock() { + return setCurrCFGBlock(makeCFGBlock()); + } + + CFG::Block* getCurrCFGBlock() { + return currCFGBlock; + } + + Block* getCurrBlock() { + return currCFGBlock->Code->cast(); + } + + void finishBlock() { + getCurrBlock()->finalize(); + } + + // break handling + + std::map breakTargets; + + void addBreakTarget(Name name, CFG::Block* target) { + breakTargets[name] = target; + } + + CFG::Block* getBreakTarget(Name name) { + return breakTargets[name]; + } + + // branch handling + + void addBranch(CFG::Block* from, CFG::Block* to, Expression* condition = nullptr) { + from->AddBranchTo(to, condition); + } + + void addSwitchBranch(CFG::Block* from, CFG::Block* to, const std::set& values) { + std::vector list; + for (auto i : values) list.push_back(i); + from->AddSwitchBranchTo(to, std::move(list)); + } + + // we work using a stack of control flow tasks + + struct Task { + ReReloop& parent; + Task(ReReloop& parent) : parent(parent) {} + virtual void run() { + WASM_UNREACHABLE(); + } + }; + + typedef std::shared_ptr TaskPtr; + std::vector stack; + + struct TriageTask final : public Task { + Expression* curr; + + TriageTask(ReReloop& parent, Expression* curr) : Task(parent), curr(curr) {} + + void run() override { + parent.triage(curr); + } + }; + + struct BlockTask final : public Task { + Block* curr; + CFG::Block* later; + + BlockTask(ReReloop& parent, Block* curr) : Task(parent), curr(curr) {} + + static void handle(ReReloop& parent, Block* curr) { + if (curr->name.is()) { + // we may be branched to. create a target, and + // ensure we are called at the join point + auto task = std::make_shared(parent, curr); + task->curr = curr; + task->later = parent.makeCFGBlock(); + parent.addBreakTarget(curr->name, task->later); + parent.stack.push_back(task); + } + auto& list = curr->list; + for (int i = int(list.size()) - 1; i >= 0; i--) { + parent.stack.push_back(std::make_shared(parent, list[i])); + } + } + + void run() override { + // add fallthrough + parent.addBranch(parent.getCurrCFGBlock(), later); + parent.setCurrCFGBlock(later); + } + }; + + struct LoopTask final : public Task { + static void handle(ReReloop& parent, Loop* curr) { + parent.stack.push_back(std::make_shared(parent, curr->body)); + if (curr->name.is()) { + // we may be branched to. create a target + auto* before = parent.getCurrCFGBlock(); + auto* top = parent.startCFGBlock(); + parent.addBreakTarget(curr->name, top); + parent.addBranch(before, top); + } + } + }; + + struct IfTask final : public Task { + If* curr; + CFG::Block* condition; + CFG::Block* ifTrueEnd; + int phase = 0; + + IfTask(ReReloop& parent, If* curr) : Task(parent), curr(curr) {} + + static void handle(ReReloop& parent, If* curr) { + auto task = std::make_shared(parent, curr); + task->curr = curr; + task->condition = parent.getCurrCFGBlock(); + auto* ifTrueBegin = parent.startCFGBlock(); + parent.addBranch(task->condition, ifTrueBegin, curr->condition); + if (curr->ifFalse) { + parent.stack.push_back(task); + parent.stack.push_back(std::make_shared(parent, curr->ifFalse)); + } + parent.stack.push_back(task); + parent.stack.push_back(std::make_shared(parent, curr->ifTrue)); + } + + void run() override { + if (phase == 0) { + // end of ifTrue + ifTrueEnd = parent.getCurrCFGBlock(); + auto* after = parent.startCFGBlock(); + parent.addBranch(condition, after); // if condition was false, go after the ifTrue, to ifFalse or outside + if (!curr->ifFalse) { + parent.addBranch(ifTrueEnd, after); + } + phase++; + } else if (phase == 1) { + // end if ifFalse + auto* ifFalseEnd = parent.getCurrCFGBlock(); + auto* after = parent.startCFGBlock(); + parent.addBranch(ifTrueEnd, after); + parent.addBranch(ifFalseEnd, after); + } else { + WASM_UNREACHABLE(); + } + } + }; + + struct BreakTask : public Task { + static void handle(ReReloop& parent, Break* curr) { + // add the branch. note how if the condition is false, it is the right value there as well + auto* before = parent.getCurrCFGBlock(); + parent.addBranch(before, parent.getBreakTarget(curr->name), curr->condition); + if (curr->condition) { + auto* after = parent.startCFGBlock(); + parent.addBranch(before, after); + } else { + parent.stopControlFlow(); + } + } + }; + + struct SwitchTask : public Task { + static void handle(ReReloop& parent, Switch* curr) { + // set the switch condition for the block ending now + auto* before = parent.getCurrCFGBlock(); + assert(!before->SwitchCondition); + before->SwitchCondition = curr->condition; + std::map> targetValues; + auto& targets = curr->targets; + auto num = targets.size(); + for (Index i = 0; i < num; i++) { + targetValues[targets[i]].insert(i); + } + for (auto& iter : targetValues) { + parent.addSwitchBranch(before, parent.getBreakTarget(iter.first), iter.second); + } + // the default may be among the targets, in which case, we can't add it simply as + // it would be a duplicate, so create a temp block + if (targetValues.count(curr->default_) == 0) { + parent.addSwitchBranch(before, parent.getBreakTarget(curr->default_), std::set()); + } else { + auto* temp = parent.startCFGBlock(); + parent.addSwitchBranch(before, temp, std::set()); + parent.addBranch(temp, parent.getBreakTarget(curr->default_)); + } + parent.stopControlFlow(); + } + }; + + struct ReturnTask : public Task { + static void handle(ReReloop& parent, Return* curr) { + // reuse the return + parent.getCurrBlock()->list.push_back(curr); + parent.stopControlFlow(); + } + }; + + struct UnreachableTask : public Task { + static void handle(ReReloop& parent, Unreachable* curr) { + // reuse the unreachable + parent.getCurrBlock()->list.push_back(curr); + parent.stopControlFlow(); + } + }; + + // handle an element we encounter + + void triage(Expression* curr) { + if (auto* block = curr->dynCast()) { + BlockTask::handle(*this, block); + } else if (auto* loop = curr->dynCast()) { + LoopTask::handle(*this, loop); + } else if (auto* iff = curr->dynCast()) { + IfTask::handle(*this, iff); + } else if (auto* br = curr->dynCast()) { + BreakTask::handle(*this, br); + } else if (auto* sw = curr->dynCast()) { + SwitchTask::handle(*this, sw); + } else if (auto* ret = curr->dynCast()) { + ReturnTask::handle(*this, ret); + } else if (auto* un = curr->dynCast()) { + UnreachableTask::handle(*this, un); + } else { + // not control flow, so just a simple element + getCurrBlock()->list.push_back(curr); + } + } + + void stopControlFlow() { + startCFGBlock(); + // TODO: optimize with this? + } + + void runFunction(PassRunner* runner, Module* module, Function* function) override { + // since control flow is flattened, this is pretty simple + // first, traverse the function body. note how we don't need to traverse + // into expressions, as we know they contain no control flow + builder = make_unique(*module); + auto* entry = startCFGBlock(); + stack.push_back(TaskPtr(new TriageTask(*this, function->body))); + // main loop + while (stack.size() > 0) { + TaskPtr curr = stack.back(); + stack.pop_back(); + curr->run(); + } + // finish the current block + finishBlock(); + // blocks that do not have any exits are dead ends in the relooper. we need + // to make sure that are in fact dead ends, and do not flow control anywhere. + // add a return as needed + for (auto* cfgBlock : relooper.Blocks) { + auto* block = cfgBlock->Code->cast(); + if (cfgBlock->BranchesOut.empty() && block->type != unreachable) { + block->list.push_back( + function->result == none ? (Expression*)builder->makeReturn() + : (Expression*)builder->makeUnreachable() + ); + block->finalize(); + } + } +#ifdef RERELOOP_DEBUG + std::cout << "rerelooping " << function->name << '\n'; + for (auto* block : relooper.Blocks) { + std::cout << block << " block:\n" << block->Code << '\n'; + for (auto& pair : block->BranchesOut) { + auto* target = pair.first; + auto* branch = pair.second; + std::cout << "branch to " << target << "\n"; + if (branch->Condition) { + std::cout << " with condition\n" << branch->Condition << '\n'; + } + } + } +#endif + // run the relooper to recreate control flow + relooper.Calculate(entry); + // render + { + auto temp = builder->addVar(function, i32); + CFG::RelooperBuilder builder(*module, temp); + function->body = relooper.Render(builder); + // if the function has a result, and the relooper emitted + // something that seems like it flows out without a value + // (but that path is never reached; it just has a br to it + // because of the relooper's boilerplate switch-handling + // code, for example, which could be optimized out later + // but isn't yet), then make sure it has a proper type + if (function->result != none && function->body->type == none) { + function->body = builder.makeSequence( + function->body, + builder.makeUnreachable() + ); + } + } + // TODO: should this be in the relooper itself? + ReFinalize().walk(function->body); + } +}; + +Pass *createReReloopPass() { + return new ReReloop(); +} + +} // namespace wasm diff --git a/src/binaryen/src/passes/RelooperJumpThreading.cpp b/src/binaryen/src/passes/RelooperJumpThreading.cpp new file mode 100644 index 0000000000..db865d1bb0 --- /dev/null +++ b/src/binaryen/src/passes/RelooperJumpThreading.cpp @@ -0,0 +1,249 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Optimize relooper-generated label variable usage: add blocks and turn +// a label-set/break/label-check into a break into the new block. +// This assumes the very specific output the fastcomp relooper emits, +// including the name of the 'label' variable. + +#include "wasm.h" +#include "pass.h" +#include "ir/utils.h" +#include "ir/manipulation.h" + +namespace wasm { + + +static Name LABEL("label"); + +static Name getInnerName(int i) { + return Name(std::string("__rjti$") + std::to_string(i)); +} + +static Name getOuterName(int i) { + return Name(std::string("__rjto$") + std::to_string(i)); +} + +static If* isLabelCheckingIf(Expression* curr, Index labelIndex) { + if (!curr) return nullptr; + auto* iff = curr->dynCast(); + if (!iff) return nullptr; + auto* condition = iff->condition->dynCast(); + if (!(condition && condition->op == EqInt32)) return nullptr; + auto* left = condition->left->dynCast(); + if (!(left && left->index == labelIndex)) return nullptr; + return iff; +} + +static Index getCheckedLabelValue(If* iff) { + return iff->condition->cast()->right->cast()->value.geti32(); +} + +static SetLocal* isLabelSettingSetLocal(Expression* curr, Index labelIndex) { + if (!curr) return nullptr; + auto* set = curr->dynCast(); + if (!set) return nullptr; + if (set->index != labelIndex) return nullptr; + return set; +} + +static Index getSetLabelValue(SetLocal* set) { + return set->value->cast()->value.geti32(); +} + +struct LabelUseFinder : public PostWalker { + Index labelIndex; + std::map& checks; // label value => number of checks on it + std::map& sets; // label value => number of sets to it + + LabelUseFinder(Index labelIndex, std::map& checks, std::map& sets) : labelIndex(labelIndex), checks(checks), sets(sets) {} + + void visitIf(If* curr) { + if (isLabelCheckingIf(curr, labelIndex)) { + checks[getCheckedLabelValue(curr)]++; + } + } + + void visitSetLocal(SetLocal* curr) { + if (isLabelSettingSetLocal(curr, labelIndex)) { + sets[getSetLabelValue(curr)]++; + } + } +}; + +struct RelooperJumpThreading : public WalkerPass> { + bool isFunctionParallel() override { return true; } + + Pass* create() override { return new RelooperJumpThreading; } + + std::map labelChecks; + std::map labelSets; + + Index labelIndex; + Index newNameCounter = 0; + + void visitBlock(Block* curr) { + // look for the if label == X pattern + auto& list = curr->list; + if (list.size() == 0) return; + for (Index i = 0; i < list.size() - 1; i++) { + // once we see something that might be irreducible, we must skip that if and the rest of the dependents + bool irreducible = false; + Index origin = i; + for (Index j = i + 1; j < list.size(); j++) { + if (auto* iff = isLabelCheckingIf(list[j], labelIndex)) { + irreducible |= hasIrreducibleControlFlow(iff, list[origin]); + if (!irreducible) { + optimizeJumpsToLabelCheck(list[origin], iff); + ExpressionManipulator::nop(iff); + } + i++; + continue; + } + // if the next element is a block, it may be the holding block of label-checking ifs + if (auto* holder = list[j]->dynCast()) { + if (holder->list.size() > 0) { + if (If* iff = isLabelCheckingIf(holder->list[0], labelIndex)) { + irreducible |= hasIrreducibleControlFlow(iff, list[origin]); + if (!irreducible) { + // this is indeed a holder. we can process the ifs, and must also move + // the block to enclose the origin, so it is properly reachable + assert(holder->list.size() == 1); // must be size 1, a relooper multiple will have its own label, and is an if-else sequence and nothing more + optimizeJumpsToLabelCheck(list[origin], iff); + holder->list[0] = list[origin]; + list[origin] = holder; + // reuse the if as a nop + list[j] = iff; + ExpressionManipulator::nop(iff); + } + i++; + continue; + } + } + } + break; // we didn't see something we like, so stop here + } + } + } + + void doWalkFunction(Function* func) { + // if there isn't a label variable, nothing for us to do + if (func->localIndices.count(LABEL)) { + labelIndex = func->getLocalIndex(LABEL); + LabelUseFinder finder(labelIndex, labelChecks, labelSets); + finder.walk(func->body); + super::doWalkFunction(func); + } + } + + void visitFunction(Function* curr) { + // we may alter types + ReFinalize().walkFunctionInModule(curr, getModule()); + } + +private: + + bool hasIrreducibleControlFlow(If* iff, Expression* origin) { + // Gather the checks in this if chain. If all the label values checked are only set in origin, + // then since origin is right before us, this is not irreducible - we can replace all sets + // in origin with jumps forward to us, and since there is nothing else, this is safe and complete. + // We must also have the property that there is just one check for the label value, as otherwise + // node splitting has complicated things. + std::map labelChecksInOrigin; + std::map labelSetsInOrigin; + LabelUseFinder finder(labelIndex, labelChecksInOrigin, labelSetsInOrigin); + finder.walk(origin); + while (iff) { + auto num = getCheckedLabelValue(iff); + assert(labelChecks[num] > 0); + if (labelChecks[num] > 1) return true; // checked more than once, somewhere in function + assert(labelChecksInOrigin[num] == 0); + if (labelSetsInOrigin[num] != labelSets[num]) { + assert(labelSetsInOrigin[num] < labelSets[num]); + // the label is set outside of the origin + // if the only other location is inside the if body, then it is ok - it must be in a loop + // and returning to the top of the loop body, so we don't need to do anything for that + // label setting anyhow + std::map labelChecksInIfTrue; + std::map labelSetsInIfTrue; + LabelUseFinder finder(labelIndex, labelChecksInIfTrue, labelSetsInIfTrue); + finder.walk(iff->ifTrue); + if (labelSetsInOrigin[num] + labelSetsInIfTrue[num] < labelSets[num]) { + // label set somewhere we can't see now, could be irreducible control flow + // TODO: one case where this happens is instead of an if-chain, we have + // ifs and a switch on label|0, in separate elements. perhaps not + // emitting switches on label|0 in the relooper would avoid that. + return true; + } + } + iff = isLabelCheckingIf(iff->ifFalse, labelIndex); + } + return false; + } + + // optimizes jumps to a label check + // * origin is where the jumps originate, and also where we should write our output + // * iff is the if + void optimizeJumpsToLabelCheck(Expression*& origin, If* iff) { + Index nameCounter = newNameCounter++; + Index num = getCheckedLabelValue(iff); + // create a new block for this jump target + Builder builder(*getModule()); + // origin is where all jumps to this target must come from - the element right before this if + // we break out of inner to reach the target. instead of flowing out of normally, we break out of the outer, so we skip the target. + auto innerName = getInnerName(nameCounter); + auto outerName = getOuterName(nameCounter); + auto* ifFalse = iff->ifFalse; + // all assignments of label to the target can be replaced with breaks to the target, via innerName + struct JumpUpdater : public PostWalker { + Index labelIndex; + Index targetNum; + Name targetName; + + void visitSetLocal(SetLocal* curr) { + if (curr->index == labelIndex) { + if (Index(curr->value->cast()->value.geti32()) == targetNum) { + replaceCurrent(Builder(*getModule()).makeBreak(targetName)); + } + } + } + }; + JumpUpdater updater; + updater.labelIndex = labelIndex; + updater.targetNum = num; + updater.targetName = innerName; + updater.setModule(getModule()); + updater.walk(origin); + // restructure code + auto* inner = builder.blockifyWithName(origin, innerName, builder.makeBreak(outerName)); + auto* outer = builder.makeSequence(inner, iff->ifTrue); + outer->name = outerName; + origin = outer; + // if another label value is checked here, handle that too + if (ifFalse) { + optimizeJumpsToLabelCheck(origin, ifFalse->cast()); + } + } +}; + +// declare pass + +Pass *createRelooperJumpThreadingPass() { + return new RelooperJumpThreading(); +} + +} // namespace wasm + diff --git a/src/binaryen/src/passes/RemoveImports.cpp b/src/binaryen/src/passes/RemoveImports.cpp new file mode 100644 index 0000000000..6de1512307 --- /dev/null +++ b/src/binaryen/src/passes/RemoveImports.cpp @@ -0,0 +1,59 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Removes function imports, and replaces them with nops. This is useful +// for running a module through the reference interpreter, which +// does not validate imports for a JS environment (by removing +// imports, we can at least get the reference interpreter to +// look at all the rest of the code). +// + +#include +#include + +namespace wasm { + +struct RemoveImports : public WalkerPass> { + void visitCallImport(CallImport *curr) { + WasmType type = getModule()->getFunctionType(getModule()->getImport(curr->target)->functionType)->result; + if (type == none) { + replaceCurrent(getModule()->allocator.alloc()); + } else { + Literal nopLiteral; + nopLiteral.type = type; + replaceCurrent(getModule()->allocator.alloc()->set(nopLiteral)); + } + } + + void visitModule(Module *curr) { + std::vector names; + for (auto& import : curr->imports) { + if (import->kind == ExternalKind::Function) { + names.push_back(import->name); + } + } + for (auto& name : names) { + curr->removeImport(name); + } + } +}; + +Pass *createRemoveImportsPass() { + return new RemoveImports(); +} + +} // namespace wasm diff --git a/src/binaryen/src/passes/RemoveMemory.cpp b/src/binaryen/src/passes/RemoveMemory.cpp new file mode 100644 index 0000000000..33d9e6da5d --- /dev/null +++ b/src/binaryen/src/passes/RemoveMemory.cpp @@ -0,0 +1,36 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Removeds memory segments, leaving only code in the module. +// + +#include +#include + +namespace wasm { + +struct RemoveMemory : public Pass { + void run(PassRunner* runner, Module* module) override { + module->memory.segments.clear(); + } +}; + +Pass *createRemoveMemoryPass() { + return new RemoveMemory(); +} + +} // namespace wasm diff --git a/src/binaryen/src/passes/RemoveUnusedBrs.cpp b/src/binaryen/src/passes/RemoveUnusedBrs.cpp new file mode 100644 index 0000000000..33ffc42b6c --- /dev/null +++ b/src/binaryen/src/passes/RemoveUnusedBrs.cpp @@ -0,0 +1,571 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Removes branches for which we go to where they go anyhow +// + +#include +#include +#include +#include +#include +#include + +namespace wasm { + +// to turn an if into a br-if, we must be able to reorder the +// condition and possible value, and the possible value must +// not have side effects (as they would run unconditionally) +static bool canTurnIfIntoBrIf(Expression* ifCondition, Expression* brValue, PassOptions& options) { + // if the if isn't even reached, this is all dead code anyhow + if (ifCondition->type == unreachable) return false; + if (!brValue) return true; + EffectAnalyzer value(options, brValue); + if (value.hasSideEffects()) return false; + return !EffectAnalyzer(options, ifCondition).invalidates(value); +} + +struct RemoveUnusedBrs : public WalkerPass> { + bool isFunctionParallel() override { return true; } + + Pass* create() override { return new RemoveUnusedBrs; } + + bool anotherCycle; + + // Whether a value can flow in the current path. If so, then a br with value + // can be turned into a value, which will flow through blocks/ifs to the right place + bool valueCanFlow; + + typedef std::vector Flows; + + // list of breaks that are currently flowing. if they reach their target without + // interference, they can be removed (or their value forwarded TODO) + Flows flows; + + // a stack for if-else contents, we merge their outputs + std::vector ifStack; + + // list of all loops, so we can optimize them + std::vector loops; + + static void visitAny(RemoveUnusedBrs* self, Expression** currp) { + auto* curr = *currp; + auto& flows = self->flows; + + if (curr->is()) { + flows.clear(); + auto* br = curr->cast(); + if (!br->condition) { // TODO: optimize? + // a break, let's see where it flows to + flows.push_back(currp); + self->valueCanFlow = true; // start optimistic + } else { + self->stopValueFlow(); + } + } else if (curr->is()) { + flows.clear(); + flows.push_back(currp); + self->valueCanFlow = true; // start optimistic + } else if (curr->is()) { + auto* iff = curr->cast(); + if (iff->condition->type == unreachable) { + // avoid trying to optimize this, we never reach it anyhow + self->stopFlow(); + return; + } + if (iff->ifFalse) { + assert(self->ifStack.size() > 0); + for (auto* flow : self->ifStack.back()) { + flows.push_back(flow); + } + self->ifStack.pop_back(); + } else { + // if without else stops the flow of values + self->stopValueFlow(); + } + } else if (curr->is()) { + // any breaks flowing to here are unnecessary, as we get here anyhow + auto* block = curr->cast(); + auto name = block->name; + if (name.is()) { + size_t size = flows.size(); + size_t skip = 0; + for (size_t i = 0; i < size; i++) { + auto* flow = (*flows[i])->dynCast(); + if (flow && flow->name == name) { + if (!flow->value || self->valueCanFlow) { + if (!flow->value) { + // br => nop + ExpressionManipulator::nop(flow); + } else { + // br with value => value + *flows[i] = flow->value; + } + skip++; + self->anotherCycle = true; + } + } else if (skip > 0) { + flows[i - skip] = flows[i]; + } + } + if (skip > 0) { + flows.resize(size - skip); + } + // drop a nop at the end of a block, which prevents a value flowing + while (block->list.size() > 0 && block->list.back()->is()) { + block->list.resize(block->list.size() - 1); + self->anotherCycle = true; + } + } + } else if (curr->is()) { + // ignore (could be result of a previous cycle) + self->stopValueFlow(); + } else if (curr->is()) { + // do nothing - it's ok for values to flow out + } else { + // anything else stops the flow + self->stopFlow(); + } + } + + void stopFlow() { + flows.clear(); + valueCanFlow = false; + } + + void stopValueFlow() { + flows.erase(std::remove_if(flows.begin(), flows.end(), [&](Expression** currp) { + auto* curr = *currp; + if (auto* ret = curr->dynCast()) { + return ret->value; + } + return curr->cast()->value; + }), flows.end()); + valueCanFlow = false; + } + + static void clear(RemoveUnusedBrs* self, Expression** currp) { + self->flows.clear(); + } + + static void saveIfTrue(RemoveUnusedBrs* self, Expression** currp) { + self->ifStack.push_back(std::move(self->flows)); + } + + void visitLoop(Loop* curr) { + loops.push_back(curr); + } + + void visitIf(If* curr) { + if (!curr->ifFalse) { + // if without an else. try to reduce if (condition) br => br_if (condition) + Break* br = curr->ifTrue->dynCast(); + if (br && !br->condition) { // TODO: if there is a condition, join them + if (canTurnIfIntoBrIf(curr->condition, br->value, getPassOptions())) { + br->condition = curr->condition; + br->finalize(); + replaceCurrent(Builder(*getModule()).dropIfConcretelyTyped(br)); + anotherCycle = true; + } + } + } + // TODO: if-else can be turned into a br_if as well, if one of the sides is a dead end + } + + // override scan to add a pre and a post check task to all nodes + static void scan(RemoveUnusedBrs* self, Expression** currp) { + self->pushTask(visitAny, currp); + + auto* iff = (*currp)->dynCast(); + + if (iff) { + if (iff->condition->type == unreachable) { + // avoid trying to optimize this, we never reach it anyhow + return; + } + self->pushTask(doVisitIf, currp); + if (iff->ifFalse) { + // we need to join up if-else control flow, and clear after the condition + self->pushTask(scan, &iff->ifFalse); + self->pushTask(saveIfTrue, currp); // safe the ifTrue flow, we'll join it later + } + self->pushTask(scan, &iff->ifTrue); + self->pushTask(clear, currp); // clear all flow after the condition + self->pushTask(scan, &iff->condition); + } else { + super::scan(self, currp); + } + } + + // optimizes a loop. returns true if we made changes + bool optimizeLoop(Loop* loop) { + // if a loop ends in + // (loop $in + // (block $out + // if (..) br $in; else br $out; + // ) + // ) + // then our normal opts can remove the break out since it flows directly out + // (and later passes make the if one-armed). however, the simple analysis + // fails on patterns like + // if (..) br $out; + // br $in; + // which is a common way to do a while (1) loop (end it with a jump to the + // top), so we handle that here. Specifically we want to conditionalize + // breaks to the loop top, i.e., put them behind a condition, so that other + // code can flow directly out and thus brs out can be removed. (even if + // the change is to let a break somewhere else flow out, that can still be + // helpful, as it shortens the logical loop. it is also good to generate + // an if-else instead of an if, as it might allow an eqz to be removed + // by flipping arms) + if (!loop->name.is()) return false; + auto* block = loop->body->dynCast(); + if (!block) return false; + // does the last element break to the top of the loop? + auto& list = block->list; + if (list.size() <= 1) return false; + auto* last = list.back()->dynCast(); + if (!last || !ExpressionAnalyzer::isSimple(last) || last->name != loop->name) return false; + // last is a simple break to the top of the loop. if we can conditionalize it, + // it won't block things from flowing out and not needing breaks to do so. + Index i = list.size() - 2; + Builder builder(*getModule()); + while (1) { + auto* curr = list[i]; + if (auto* iff = curr->dynCast()) { + // let's try to move the code going to the top of the loop into the if-else + if (!iff->ifFalse) { + // we need the ifTrue to break, so it cannot reach the code we want to move + if (iff->ifTrue->type == unreachable) { + iff->ifFalse = builder.stealSlice(block, i + 1, list.size()); + iff->finalize(); + block->finalize(); + return true; + } + } else { + // this is already an if-else. if one side is a dead end, we can append to the other, if + // there is no returned value to concern us + assert(!isConcreteWasmType(iff->type)); // can't be, since in the middle of a block + + // ensures the first node is a block, if it isn't already, and merges in the second, + // either as a single element or, if a block, by appending to the first block. this + // keeps the order of operations in place, that is, the appended element will be + // executed after the first node's elements + auto blockifyMerge = [&](Expression* any, Expression* append) -> Block* { + Block* block = nullptr; + if (any) block = any->dynCast(); + // if the first isn't a block, or it's a block with a name (so we might + // branch to the end, and so can't append to it, we might skip that code!) + // then make a new block + if (!block || block->name.is()) { + block = builder.makeBlock(any); + } else { + assert(!isConcreteWasmType(block->type)); + } + auto* other = append->dynCast(); + if (!other) { + block->list.push_back(append); + } else { + for (auto* item : other->list) { + block->list.push_back(item); + } + } + block->finalize(); + return block; + }; + + if (iff->ifTrue->type == unreachable) { + iff->ifFalse = blockifyMerge(iff->ifFalse, builder.stealSlice(block, i + 1, list.size())); + iff->finalize(); + block->finalize(); + return true; + } else if (iff->ifFalse->type == unreachable) { + iff->ifTrue = blockifyMerge(iff->ifTrue, builder.stealSlice(block, i + 1, list.size())); + iff->finalize(); + block->finalize(); + return true; + } + } + return false; + } else if (auto* brIf = curr->dynCast()) { + // br_if is similar to if. + if (brIf->condition && !brIf->value && brIf->name != loop->name) { + if (i == list.size() - 2) { + // there is the br_if, and then the br to the top, so just flip them and the condition + brIf->condition = builder.makeUnary(EqZInt32, brIf->condition); + last->name = brIf->name; + brIf->name = loop->name; + return true; + } else { + // there are elements in the middle, + // br_if $somewhere (condition) + // (..more..) + // br $in + // we can convert the br_if to an if. this has a cost, though, + // so only do it if it looks useful, which it definitely is if + // (a) $somewhere is straight out (so the br out vanishes), and + // (b) this br_if is the only branch to that block (so the block will vanish) + if (brIf->name == block->name && BranchUtils::BranchSeeker::countNamed(block, block->name) == 1) { + // note that we could drop the last element here, it is a br we know for sure is removable, + // but telling stealSlice to steal all to the end is more efficient, it can just truncate. + list[i] = builder.makeIf(brIf->condition, builder.makeBreak(brIf->name), builder.stealSlice(block, i + 1, list.size())); + return true; + } + } + } + return false; + } + // if there is control flow, we must stop looking + if (EffectAnalyzer(getPassOptions(), curr).branches) { + return false; + } + if (i == 0) return false; + i--; + } + } + + void doWalkFunction(Function* func) { + // multiple cycles may be needed + bool worked = false; + do { + anotherCycle = false; + super::doWalkFunction(func); + assert(ifStack.empty()); + // flows may contain returns, which are flowing out and so can be optimized + for (size_t i = 0; i < flows.size(); i++) { + auto* flow = (*flows[i])->dynCast(); + if (!flow) continue; + if (!flow->value) { + // return => nop + ExpressionManipulator::nop(flow); + anotherCycle = true; + } else if (valueCanFlow) { + // return with value => value + *flows[i] = flow->value; + anotherCycle = true; + } + } + flows.clear(); + // optimize loops (we don't do it while tracking flows, as they can interfere) + for (auto* loop : loops) { + anotherCycle |= optimizeLoop(loop); + } + loops.clear(); + if (anotherCycle) worked = true; + } while (anotherCycle); + + if (worked) { + // Our work may alter block and if types, they may now return values that we made flow through them + ReFinalize().walkFunctionInModule(func, getModule()); + } + + // thread trivial jumps + struct JumpThreader : public ControlFlowWalker { + // map of all value-less breaks going to a block (and not a loop) + std::map> breaksToBlock; + + // the names to update + std::map newNames; + + void visitBreak(Break* curr) { + if (!curr->value) { + if (auto* target = findBreakTarget(curr->name)->dynCast()) { + breaksToBlock[target].push_back(curr); + } + } + } + // TODO: Switch? + void visitBlock(Block* curr) { + auto& list = curr->list; + if (list.size() == 1 && curr->name.is()) { + // if this block has just one child, a sub-block, then jumps to the former are jumps to us, really + if (auto* child = list[0]->dynCast()) { + // the two blocks must have the same type for us to update the branch, as otherwise + // one block may be unreachable and the other concrete, so one might lack a value + if (child->name.is() && child->name != curr->name && child->type == curr->type) { + auto& breaks = breaksToBlock[child]; + for (auto* br : breaks) { + newNames[br] = curr->name; + breaksToBlock[curr].push_back(br); // update the list - we may push it even more later + } + breaksToBlock.erase(child); + } + } + } else if (list.size() == 2) { + // if this block has two children, a child-block and a simple jump, then jumps to child-block can be replaced with jumps to the new target + auto* child = list[0]->dynCast(); + auto* jump = list[1]->dynCast(); + if (child && child->name.is() && jump && ExpressionAnalyzer::isSimple(jump)) { + auto& breaks = breaksToBlock[child]; + for (auto* br : breaks) { + newNames[br] = jump->name; + } + // if the jump is to another block then we can update the list, and maybe push it even more later + if (auto* newTarget = findBreakTarget(jump->name)->dynCast()) { + for (auto* br : breaks) { + breaksToBlock[newTarget].push_back(br); + } + } + breaksToBlock.erase(child); + } + } + } + + void finish(Function* func) { + for (auto& iter : newNames) { + auto* br = iter.first; + auto name = iter.second; + br->name = name; + } + if (newNames.size() > 0) { + // by changing where brs go, we may change block types etc. + ReFinalize().walkFunctionInModule(func, getModule()); + } + } + }; + JumpThreader jumpThreader; + jumpThreader.setModule(getModule()); + jumpThreader.walkFunction(func); + jumpThreader.finish(func); + + // perform some final optimizations + struct FinalOptimizer : public PostWalker { + bool selectify; + PassOptions& passOptions; + + FinalOptimizer(PassOptions& passOptions) : passOptions(passOptions) {} + + void visitBlock(Block* curr) { + // if a block has an if br else br, we can un-conditionalize the latter, allowing + // the if to become a br_if. + // * note that if not in a block already, then we need to create a block for this, so not useful otherwise + // * note that this only happens at the end of a block, as code after the if is dead + // * note that we do this at the end, because un-conditionalizing can interfere with optimizeLoop()ing. + auto& list = curr->list; + for (Index i = 0; i < list.size(); i++) { + auto* iff = list[i]->dynCast(); + if (!iff || !iff->ifFalse || isConcreteWasmType(iff->type)) continue; // if it lacked an if-false, it would already be a br_if, as that's the easy case + auto* ifTrueBreak = iff->ifTrue->dynCast(); + if (ifTrueBreak && !ifTrueBreak->condition && canTurnIfIntoBrIf(iff->condition, ifTrueBreak->value, passOptions)) { + // we are an if-else where the ifTrue is a break without a condition, so we can do this + ifTrueBreak->condition = iff->condition; + ifTrueBreak->finalize(); + list[i] = Builder(*getModule()).dropIfConcretelyTyped(ifTrueBreak); + ExpressionManipulator::spliceIntoBlock(curr, i + 1, iff->ifFalse); + continue; + } + // otherwise, perhaps we can flip the if + auto* ifFalseBreak = iff->ifFalse->dynCast(); + if (ifFalseBreak && !ifFalseBreak->condition && canTurnIfIntoBrIf(iff->condition, ifFalseBreak->value, passOptions)) { + ifFalseBreak->condition = Builder(*getModule()).makeUnary(EqZInt32, iff->condition); + ifFalseBreak->finalize(); + list[i] = Builder(*getModule()).dropIfConcretelyTyped(ifFalseBreak); + ExpressionManipulator::spliceIntoBlock(curr, i + 1, iff->ifTrue); + continue; + } + } + if (list.size() >= 2) { + if (selectify) { + // Join adjacent br_ifs to the same target, making one br_if with + // a "selectified" condition that executes both. + for (Index i = 0; i < list.size() - 1; i++) { + auto* br1 = list[i]->dynCast(); + // avoid unreachable brs, as they are dead code anyhow, and after merging + // them the outer scope could need type changes + if (!br1 || !br1->condition || br1->type == unreachable) continue; + auto* br2 = list[i + 1]->dynCast(); + if (!br2 || !br2->condition || br2->type == unreachable) continue; + if (br1->name == br2->name) { + assert(!br1->value && !br2->value); + if (!EffectAnalyzer(passOptions, br2->condition).hasSideEffects()) { + // it's ok to execute them both, do it + Builder builder(*getModule()); + br1->condition = builder.makeBinary(OrInt32, br1->condition, br2->condition); + ExpressionManipulator::nop(br2); + } + } + } + } + // Restructuring of ifs: if we have + // (block $x + // (br_if $x (cond)) + // .., no other references to $x + // ) + // then we can turn that into (if (!cond) ..). + // Code size wise, we turn the block into an if (no change), and + // lose the br_if (-2). .. turns into the body of the if in the binary + // format. We need to flip the condition, which at worst adds 1. + if (curr->name.is()) { + auto* br = list[0]->dynCast(); + // we seek a regular br_if; if the type is unreachable that means it is not + // actually reached, so ignore + if (br && br->condition && br->name == curr->name && br->type != unreachable) { + assert(!br->value); // can't, it would be dropped or last in the block + if (BranchUtils::BranchSeeker::countNamed(curr, curr->name) == 1) { + // no other breaks to that name, so we can do this + Builder builder(*getModule()); + replaceCurrent(builder.makeIf( + builder.makeUnary(EqZInt32, br->condition), + curr + )); + curr->name = Name(); + ExpressionManipulator::nop(br); + curr->finalize(curr->type); + return; + } + } + } + } + } + + void visitIf(If* curr) { + // we may have simplified ifs enough to turn them into selects + // this is helpful for code size, but can be a tradeoff with performance as we run both code paths + if (!selectify) return; + if (curr->ifFalse && isConcreteWasmType(curr->ifTrue->type) && isConcreteWasmType(curr->ifFalse->type)) { + // if with else, consider turning it into a select if there is no control flow + // TODO: estimate cost + EffectAnalyzer condition(passOptions, curr->condition); + if (!condition.hasSideEffects()) { + EffectAnalyzer ifTrue(passOptions, curr->ifTrue); + if (!ifTrue.hasSideEffects()) { + EffectAnalyzer ifFalse(passOptions, curr->ifFalse); + if (!ifFalse.hasSideEffects()) { + auto* select = getModule()->allocator.alloc(); + if (EffectAnalyzer(getPassOptions(), select->ifTrue).hasSideEffects()) { + if (EffectAnalyzer(getPassOptions(), select->ifFalse).hasSideEffects()) { + return curr; // leave them + } else { + if (EffectAnalyzer(getPassOptions(), select->condition).hasSideEffects()) { + return curr; // leave them + } else { + curr = select->ifTrue; + continue; + } + } + } else { + if (EffectAnalyzer(getPassOptions(), select->ifFalse).hasSideEffects()) { + if (EffectAnalyzer(getPassOptions(), select->condition).hasSideEffects()) { + return curr; // leave them + } else { + curr = select->ifFalse; + continue; + } + } else { + if (EffectAnalyzer(getPassOptions(), select->condition).hasSideEffects()) { + curr = select->condition; + continue; + } else { + return nullptr; + } + } + } + } + } + + default: return curr; // assume needed + } + } + } + + void visitBlock(Block *curr) { + // compress out nops and other dead code + int skip = 0; + auto& list = curr->list; + size_t size = list.size(); + for (size_t z = 0; z < size; z++) { + auto* child = list[z]; + auto* optimized = optimize(child, z == size - 1 && isConcreteWasmType(curr->type)); + if (!optimized) { + typeUpdater.noteRecursiveRemoval(child); + skip++; + } else { + if (optimized != child) { + typeUpdater.noteReplacement(child, optimized); + list[z] = optimized; + } + if (skip > 0) { + list[z - skip] = list[z]; + list[z] = nullptr; + } + // if this is unreachable, the rest is dead code + if (list[z - skip]->type == unreachable && z < size - 1) { + for (Index i = z - skip + 1; i < list.size(); i++) { + auto* remove = list[i]; + if (remove) { + typeUpdater.noteRecursiveRemoval(remove); + } + } + list.resize(z - skip + 1); + typeUpdater.maybeUpdateTypeToUnreachable(curr); + skip = 0; // nothing more to do on the list + break; + } + } + } + if (skip > 0) { + list.resize(size - skip); + typeUpdater.maybeUpdateTypeToUnreachable(curr); + } + // the block may now be a trivial one that we can get rid of and just leave its contents + replaceCurrent(BlockUtils::simplifyToContents(curr, this)); + } + + void visitIf(If* curr) { + // if the condition is a constant, just apply it + // we can just return the ifTrue or ifFalse. + if (auto* value = curr->condition->dynCast()) { + Expression* child; + if (value->value.getInteger()) { + child = curr->ifTrue; + if (curr->ifFalse) { + typeUpdater.noteRecursiveRemoval(curr->ifFalse); + } + } else { + if (curr->ifFalse) { + child = curr->ifFalse; + typeUpdater.noteRecursiveRemoval(curr->ifTrue); + } else { + typeUpdater.noteRecursiveRemoval(curr); + ExpressionManipulator::nop(curr); + return; + } + } + replaceCurrent(child); + return; + } + // if the condition is unreachable, just return it + if (curr->condition->type == unreachable) { + typeUpdater.noteRecursiveRemoval(curr->ifTrue); + if (curr->ifFalse) { + typeUpdater.noteRecursiveRemoval(curr->ifFalse); + } + replaceCurrent(curr->condition); + return; + } + // from here on, we can assume the condition executed + if (curr->ifFalse) { + if (curr->ifFalse->is()) { + curr->ifFalse = nullptr; + } else if (curr->ifTrue->is()) { + curr->ifTrue = curr->ifFalse; + curr->ifFalse = nullptr; + curr->condition = Builder(*getModule()).makeUnary(EqZInt32, curr->condition); + } else if (curr->ifTrue->is() && curr->ifFalse->is()) { + // instead of dropping both sides, drop the if, if they are the same type + auto* left = curr->ifTrue->cast()->value; + auto* right = curr->ifFalse->cast()->value; + if (left->type == right->type) { + curr->ifTrue = left; + curr->ifFalse = right; + curr->finalize(); + replaceCurrent(Builder(*getModule()).makeDrop(curr)); + } + } + } else { + // no else + if (curr->ifTrue->is()) { + // no nothing + replaceCurrent(Builder(*getModule()).makeDrop(curr->condition)); + } + } + } + + void visitLoop(Loop* curr) { + if (curr->body->is()) ExpressionManipulator::nop(curr); + } + + void visitDrop(Drop* curr) { + // optimize the dropped value, maybe leaving nothing + curr->value = optimize(curr->value, false); + if (curr->value == nullptr) { + ExpressionManipulator::nop(curr); + return; + } + // a drop of a tee is a set + if (auto* set = curr->value->dynCast()) { + assert(set->isTee()); + set->setTee(false); + replaceCurrent(set); + return; + } + // if we are dropping a block's return value, we might be able to remove it entirely + if (auto* block = curr->value->dynCast()) { + auto* last = block->list.back(); + // note that the last element may be concrete but not the block, if the + // block has an unreachable element in the middle, making the block unreachable + // despite later elements and in particular the last + if (isConcreteWasmType(last->type) && block->type == last->type) { + last = optimize(last, false); + if (!last) { + // we may be able to remove this, if there are no brs + bool canPop = true; + if (block->name.is()) { + BranchUtils::BranchSeeker seeker(block->name); + seeker.named = true; + Expression* temp = block; + seeker.walk(temp); + if (seeker.found && seeker.valueType != none) { + canPop = false; + } + } + if (canPop) { + block->list.back() = last; + block->list.pop_back(); + block->type = none; + // we don't need the drop anymore, let's see what we have left in the block + if (block->list.size() > 1) { + replaceCurrent(block); + } else if (block->list.size() == 1) { + replaceCurrent(block->list[0]); + } else { + ExpressionManipulator::nop(curr); + } + return; + } + } + } + } + // sink a drop into an arm of an if-else if the other arm ends in an unreachable, as it if is a branch, this can make that branch optimizable and more vaccuming possible + auto* iff = curr->value->dynCast(); + if (iff && iff->ifFalse && isConcreteWasmType(iff->type)) { + // reuse the drop in both cases + if (iff->ifTrue->type == unreachable && isConcreteWasmType(iff->ifFalse->type)) { + curr->value = iff->ifFalse; + iff->ifFalse = curr; + iff->type = none; + replaceCurrent(iff); + } else if (iff->ifFalse->type == unreachable && isConcreteWasmType(iff->ifTrue->type)) { + curr->value = iff->ifTrue; + iff->ifTrue = curr; + iff->type = none; + replaceCurrent(iff); + } + } + } + + void visitFunction(Function* curr) { + auto* optimized = optimize(curr->body, curr->result != none); + if (optimized) { + curr->body = optimized; + } else { + ExpressionManipulator::nop(curr->body); + } + if (curr->result == none && !EffectAnalyzer(getPassOptions(), curr->body).hasSideEffects()) { + ExpressionManipulator::nop(curr->body); + } + } +}; + +Pass *createVacuumPass() { + return new Vacuum(); +} + +} // namespace wasm + diff --git a/src/binaryen/src/passes/pass.cpp b/src/binaryen/src/passes/pass.cpp new file mode 100644 index 0000000000..f2463691a7 --- /dev/null +++ b/src/binaryen/src/passes/pass.cpp @@ -0,0 +1,333 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include +#include +#include +#include + +namespace wasm { + +// PassRegistry + +PassRegistry::PassRegistry() { + registerPasses(); +} + +static PassRegistry singleton; + +PassRegistry* PassRegistry::get() { + return &singleton; +} + +void PassRegistry::registerPass(const char* name, const char *description, Creator create) { + assert(passInfos.find(name) == passInfos.end()); + passInfos[name] = PassInfo(description, create); +} + +Pass* PassRegistry::createPass(std::string name) { + if (passInfos.find(name) == passInfos.end()) return nullptr; + auto ret = passInfos[name].create(); + ret->name = name; + return ret; +} + +std::vector PassRegistry::getRegisteredNames() { + std::vector ret; + for (auto pair : passInfos) { + ret.push_back(pair.first); + } + return ret; +} + +std::string PassRegistry::getPassDescription(std::string name) { + assert(passInfos.find(name) != passInfos.end()); + return passInfos[name].description; +} + +// PassRunner + +void PassRegistry::registerPasses() { + registerPass("coalesce-locals", "reduce # of locals by coalescing", createCoalesceLocalsPass); + registerPass("coalesce-locals-learning", "reduce # of locals by coalescing and learning", createCoalesceLocalsWithLearningPass); + registerPass("code-pushing", "push code forward, potentially making it not always execute", createCodePushingPass); + registerPass("code-folding", "fold code, merging duplicates", createCodeFoldingPass); + registerPass("const-hoisting", "hoist repeated constants to a local", createConstHoistingPass); + registerPass("dce", "removes unreachable code", createDeadCodeEliminationPass); + registerPass("duplicate-function-elimination", "removes duplicate functions", createDuplicateFunctionEliminationPass); + registerPass("extract-function", "leaves just one function (useful for debugging)", createExtractFunctionPass); + registerPass("flatten", "flattens out code, removing nesting", createFlattenPass); + registerPass("inlining", "inlines functions", createInliningPass); + registerPass("inlining-optimizing", "inlines functions and optimizes where we inlined", createInliningOptimizingPass); + registerPass("legalize-js-interface", "legalizes i64 types on the import/export boundary", createLegalizeJSInterfacePass); + registerPass("local-cse", "common subexpression elimination inside basic blocks", createLocalCSEPass); + registerPass("log-execution", "instrument the build with logging of where execution goes", createLogExecutionPass); + registerPass("i64-to-i32-lowering", "lower all uses of i64s to use i32s instead", createI64ToI32LoweringPass); + registerPass("instrument-locals", "instrument the build with code to intercept all loads and stores", createInstrumentLocalsPass); + registerPass("instrument-memory", "instrument the build with code to intercept all loads and stores", createInstrumentMemoryPass); + registerPass("memory-packing", "packs memory into separate segments, skipping zeros", createMemoryPackingPass); + registerPass("merge-blocks", "merges blocks to their parents", createMergeBlocksPass); + registerPass("metrics", "reports metrics", createMetricsPass); + registerPass("nm", "name list", createNameListPass); + registerPass("optimize-instructions", "optimizes instruction combinations", createOptimizeInstructionsPass); + registerPass("pick-load-signs", "pick load signs based on their uses", createPickLoadSignsPass); + registerPass("post-emscripten", "miscellaneous optimizations for Emscripten-generated code", createPostEmscriptenPass); + registerPass("precompute", "computes compile-time evaluatable expressions", createPrecomputePass); + registerPass("precompute-propagate", "computes compile-time evaluatable expressions and propagates them through locals", createPrecomputePropagatePass); + registerPass("print", "print in s-expression format", createPrinterPass); + registerPass("print-minified", "print in minified s-expression format", createMinifiedPrinterPass); + registerPass("print-full", "print in full s-expression format", createFullPrinterPass); + registerPass("print-call-graph", "print call graph", createPrintCallGraphPass); + registerPass("relooper-jump-threading", "thread relooper jumps (fastcomp output only)", createRelooperJumpThreadingPass); + registerPass("remove-imports", "removes imports and replaces them with nops", createRemoveImportsPass); + registerPass("remove-memory", "removes memory segments", createRemoveMemoryPass); + registerPass("remove-unused-brs", "removes breaks from locations that are not needed", createRemoveUnusedBrsPass); + registerPass("remove-unused-module-elements", "removes unused module elements", createRemoveUnusedModuleElementsPass); + registerPass("remove-unused-names", "removes names from locations that are never branched to", createRemoveUnusedNamesPass); + registerPass("reorder-functions", "sorts functions by access frequency", createReorderFunctionsPass); + registerPass("reorder-locals", "sorts locals by access frequency", createReorderLocalsPass); + registerPass("rereloop", "re-optimize control flow using the relooper algorithm", createReReloopPass); + registerPass("simplify-locals", "miscellaneous locals-related optimizations", createSimplifyLocalsPass); + registerPass("safe-heap", "instrument loads and stores to check for invalid behavior", createSafeHeapPass); + registerPass("simplify-locals-notee", "miscellaneous locals-related optimizations", createSimplifyLocalsNoTeePass); + registerPass("simplify-locals-nostructure", "miscellaneous locals-related optimizations", createSimplifyLocalsNoStructurePass); + registerPass("simplify-locals-notee-nostructure", "miscellaneous locals-related optimizations", createSimplifyLocalsNoTeeNoStructurePass); + registerPass("ssa", "ssa-ify variables so that they have a single assignment", createSSAifyPass); + registerPass("trap-mode-clamp", "replace trapping operations with clamping semantics", createTrapModeClamp); + registerPass("trap-mode-js", "replace trapping operations with js semantics", createTrapModeJS); + registerPass("untee", "removes tee_locals, replacing them with sets and gets", createUnteePass); + registerPass("vacuum", "removes obviously unneeded code", createVacuumPass); +// registerPass("lower-i64", "lowers i64 into pairs of i32s", createLowerInt64Pass); +} + +void PassRunner::addDefaultOptimizationPasses() { + addDefaultGlobalOptimizationPrePasses(); + addDefaultFunctionOptimizationPasses(); + addDefaultGlobalOptimizationPostPasses(); +} + +void PassRunner::addDefaultFunctionOptimizationPasses() { + if (!options.debugInfo) { // debug info must be preserved, do not dce it + add("dce"); + } + add("remove-unused-brs"); + add("remove-unused-names"); + add("optimize-instructions"); + if (options.optimizeLevel >= 2 || options.shrinkLevel >= 2) { + add("pick-load-signs"); + } + add("precompute"); + if (options.optimizeLevel >= 2 || options.shrinkLevel >= 2) { + add("code-pushing"); + } + add("simplify-locals-nostructure"); // don't create if/block return values yet, as coalesce can remove copies that that could inhibit + add("vacuum"); // previous pass creates garbage + add("reorder-locals"); + add("remove-unused-brs"); // simplify-locals opens opportunities for optimizations + add("coalesce-locals"); + add("simplify-locals"); + add("vacuum"); // previous pass creates garbage + add("reorder-locals"); + if (options.shrinkLevel >= 1) { + add("code-folding"); + } + add("merge-blocks"); // makes remove-unused-brs more effective + add("remove-unused-brs"); // coalesce-locals opens opportunities for optimizations + add("merge-blocks"); // clean up remove-unused-brs new blocks + add("optimize-instructions"); + // if we are willing to work hard, also propagate + if (options.optimizeLevel >= 3 || options.shrinkLevel >= 2) { + add("precompute-propagate"); + } else { + add("precompute"); + } + if (options.shrinkLevel >= 2) { + add("local-cse"); // TODO: run this early, before first coalesce-locals. right now doing so uncovers some deficiencies we need to fix first + add("coalesce-locals"); // just for localCSE + } + add("vacuum"); // just to be safe +} + +void PassRunner::addDefaultGlobalOptimizationPrePasses() { + add("duplicate-function-elimination"); +} + +void PassRunner::addDefaultGlobalOptimizationPostPasses() { + add("duplicate-function-elimination"); // optimizations show more functions as duplicate + add("remove-unused-module-elements"); + if (options.optimizeLevel >= 2 || options.shrinkLevel >= 2) { + add("inlining-optimizing"); + } + add("memory-packing"); +} + +static void dumpWast(Name name, Module* wasm) { + // write out the wast + Colors::disable(); + static int counter = 0; + std::stringstream text; + WasmPrinter::printModule(wasm, text); + FILE* f = fopen((std::string("byn-") + std::to_string(counter++) + "-" + name.str + ".wast").c_str(), "w"); + fputs(text.str().c_str(), f); + fclose(f); +} + +void PassRunner::run() { + static const int passDebug = getPassDebug(); + if (!isNested && (options.debug || passDebug)) { + // for debug logging purposes, run each pass in full before running the other + auto totalTime = std::chrono::duration(0); + size_t padding = 0; + WasmValidator::Flags validationFlags = WasmValidator::Minimal; + if (options.validateGlobally) { + validationFlags = validationFlags | WasmValidator::Globally; + } + std::cerr << "[PassRunner] running passes..." << std::endl; + for (auto pass : passes) { + padding = std::max(padding, pass->name.size()); + } + if (passDebug >= 3) { + dumpWast("before", wasm); + } + for (auto* pass : passes) { + // ignoring the time, save a printout of the module before, in case this pass breaks it, so we can print the before and after + std::stringstream moduleBefore; + if (passDebug == 2) { + WasmPrinter::printModule(wasm, moduleBefore); + } + // prepare to run + std::cerr << "[PassRunner] running pass: " << pass->name << "... "; + for (size_t i = 0; i < padding - pass->name.size(); i++) { + std::cerr << ' '; + } + auto before = std::chrono::steady_clock::now(); + if (pass->isFunctionParallel()) { + // function-parallel passes should get a new instance per function + for (auto& func : wasm->functions) { + runPassOnFunction(pass, func.get()); + } + } else { + pass->run(this, wasm); + } + auto after = std::chrono::steady_clock::now(); + std::chrono::duration diff = after - before; + std::cerr << diff.count() << " seconds." << std::endl; + totalTime += diff; + // validate, ignoring the time + std::cerr << "[PassRunner] (validating)\n"; + if (!WasmValidator().validate(*wasm, options.features, validationFlags)) { + WasmPrinter::printModule(wasm); + if (passDebug >= 2) { + std::cerr << "Last pass (" << pass->name << ") broke validation. Here is the module before: \n" << moduleBefore.str() << "\n"; + } else { + std::cerr << "Last pass (" << pass->name << ") broke validation. Run with BINARYEN_PASS_DEBUG=2 in the env to see the earlier state, or 3 to dump byn-* files for each pass\n"; + } + abort(); + } + if (passDebug >= 3) { + dumpWast(pass->name, wasm); + } + } + std::cerr << "[PassRunner] passes took " << totalTime.count() << " seconds." << std::endl; + // validate + std::cerr << "[PassRunner] (final validation)\n"; + if (!WasmValidator().validate(*wasm, options.features, validationFlags)) { + WasmPrinter::printModule(wasm); + std::cerr << "final module does not validate\n"; + abort(); + } + } else { + // non-debug normal mode, run them in an optimal manner - for locality it is better + // to run as many passes as possible on a single function before moving to the next + std::vector stack; + auto flush = [&]() { + if (stack.size() > 0) { + // run the stack of passes on all the functions, in parallel + size_t num = ThreadPool::get()->size(); + std::vector> doWorkers; + std::atomic nextFunction; + nextFunction.store(0); + size_t numFunctions = wasm->functions.size(); + for (size_t i = 0; i < num; i++) { + doWorkers.push_back([&]() { + auto index = nextFunction.fetch_add(1); + // get the next task, if there is one + if (index >= numFunctions) { + return ThreadWorkState::Finished; // nothing left + } + Function* func = this->wasm->functions[index].get(); + // do the current task: run all passes on this function + for (auto* pass : stack) { + runPassOnFunction(pass, func); + } + if (index + 1 == numFunctions) { + return ThreadWorkState::Finished; // we did the last one + } + return ThreadWorkState::More; + }); + } + ThreadPool::get()->work(doWorkers); + } + stack.clear(); + }; + for (auto* pass : passes) { + if (pass->isFunctionParallel()) { + stack.push_back(pass); + } else { + flush(); + pass->run(this, wasm); + } + } + flush(); + } +} + +void PassRunner::runFunction(Function* func) { + if (options.debug) { + std::cerr << "[PassRunner] running passes on function " << func->name << std::endl; + } + for (auto* pass : passes) { + runPassOnFunction(pass, func); + } +} + +PassRunner::~PassRunner() { + for (auto pass : passes) { + delete pass; + } +} + +void PassRunner::doAdd(Pass* pass) { + passes.push_back(pass); + pass->prepareToRun(this, wasm); +} + +void PassRunner::runPassOnFunction(Pass* pass, Function* func) { + assert(pass->isFunctionParallel()); + // function-parallel passes get a new instance per function + auto instance = std::unique_ptr(pass->create()); + instance->runFunction(this, wasm, func); +} + +int PassRunner::getPassDebug() { + static const int passDebug = getenv("BINARYEN_PASS_DEBUG") ? atoi(getenv("BINARYEN_PASS_DEBUG")) : 0; + return passDebug; +} + +} // namespace wasm diff --git a/src/binaryen/src/passes/passes.h b/src/binaryen/src/passes/passes.h new file mode 100644 index 0000000000..957ca2d68f --- /dev/null +++ b/src/binaryen/src/passes/passes.h @@ -0,0 +1,77 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_passes_h +#define wasm_passes_h + +namespace wasm { + +class Pass; + +// All passes: +Pass* createCoalesceLocalsPass(); +Pass* createCoalesceLocalsWithLearningPass(); +Pass* createCodeFoldingPass(); +Pass* createCodePushingPass(); +Pass* createConstHoistingPass(); +Pass* createDeadCodeEliminationPass(); +Pass* createDuplicateFunctionEliminationPass(); +Pass* createExtractFunctionPass(); +Pass* createFlattenPass(); +Pass* createFullPrinterPass(); +Pass* createI64ToI32LoweringPass(); +Pass* createInliningPass(); +Pass* createInliningOptimizingPass(); +Pass* createLegalizeJSInterfacePass(); +Pass* createLocalCSEPass(); +Pass* createLogExecutionPass(); +Pass* createInstrumentLocalsPass(); +Pass* createInstrumentMemoryPass(); +Pass* createMemoryPackingPass(); +Pass* createMergeBlocksPass(); +Pass* createMinifiedPrinterPass(); +Pass* createMetricsPass(); +Pass* createNameListPass(); +Pass* createOptimizeInstructionsPass(); +Pass* createPickLoadSignsPass(); +Pass* createPostEmscriptenPass(); +Pass* createPrecomputePass(); +Pass* createPrecomputePropagatePass(); +Pass* createPrinterPass(); +Pass* createPrintCallGraphPass(); +Pass* createRelooperJumpThreadingPass(); +Pass* createRemoveImportsPass(); +Pass* createRemoveMemoryPass(); +Pass* createRemoveUnusedBrsPass(); +Pass* createRemoveUnusedModuleElementsPass(); +Pass* createRemoveUnusedNamesPass(); +Pass* createReorderFunctionsPass(); +Pass* createReorderLocalsPass(); +Pass* createReReloopPass(); +Pass* createSafeHeapPass(); +Pass* createSimplifyLocalsPass(); +Pass* createSimplifyLocalsNoTeePass(); +Pass* createSimplifyLocalsNoStructurePass(); +Pass* createSimplifyLocalsNoTeeNoStructurePass(); +Pass* createSSAifyPass(); +Pass* createTrapModeClamp(); +Pass* createTrapModeJS(); +Pass* createUnteePass(); +Pass* createVacuumPass(); + +} + +#endif diff --git a/src/binaryen/src/pretty_printing.h b/src/binaryen/src/pretty_printing.h new file mode 100644 index 0000000000..f1ba944f4b --- /dev/null +++ b/src/binaryen/src/pretty_printing.h @@ -0,0 +1,81 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Pretty printing helpers +// + +#ifndef wasm_pretty_printing_h +#define wasm_pretty_printing_h + +#include + +#include "support/colors.h" + +inline std::ostream &doIndent(std::ostream &o, unsigned indent) { + for (unsigned i = 0; i < indent; i++) { + o << " "; + } + return o; +} + +inline std::ostream &prepareMajorColor(std::ostream &o) { + Colors::red(o); + Colors::bold(o); + return o; +} + +inline std::ostream &prepareColor(std::ostream &o) { + Colors::magenta(o); + Colors::bold(o); + return o; +} + +inline std::ostream &prepareMinorColor(std::ostream &o) { + Colors::orange(o); + return o; +} + +inline std::ostream &restoreNormalColor(std::ostream &o) { + Colors::normal(o); + return o; +} + +inline std::ostream& printText(std::ostream &o, const char *str) { + o << '"'; + Colors::green(o); + o << str; + Colors::normal(o); + return o << '"'; +} + +inline std::ostream& printOpening(std::ostream &o, const char *str, bool major=false) { + o << '('; + major ? prepareMajorColor(o) : prepareColor(o); + o << str; + restoreNormalColor(o); + return o; +} + +inline std::ostream& printMinorOpening(std::ostream &o, const char *str) { + o << '('; + prepareMinorColor(o); + o << str; + restoreNormalColor(o); + return o; +} + +#endif // wasm_pretty_printing_h diff --git a/src/binaryen/src/s2wasm.h b/src/binaryen/src/s2wasm.h new file mode 100644 index 0000000000..dd507143b6 --- /dev/null +++ b/src/binaryen/src/s2wasm.h @@ -0,0 +1,1530 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// .s to WebAssembly translator. +// + +#ifndef wasm_s2wasm_h +#define wasm_s2wasm_h + +#include + +#include "wasm.h" +#include "parsing.h" +#include "pass.h" +#include "asm_v_wasm.h" +#include "wasm-builder.h" +#include "wasm-linker.h" + +namespace wasm { + +// +// S2WasmBuilder - parses a .s file into WebAssembly +// + +class S2WasmBuilder { + const char* inputStart; + const char* s; + bool debug; + Module* wasm; + MixedArena* allocator; + LinkerObject* linkerObj; + std::unique_ptr symbolInfo; + std::unordered_map fileIndexMap; + + public: + S2WasmBuilder(const char* input, bool debug) + : inputStart(input), + s(input), + debug(debug), + wasm(nullptr), + allocator(nullptr), + linkerObj(nullptr) + {} + + void build(LinkerObject *obj) { + // If getSymbolInfo has not already been called, populate the symbol + // info now. + if (!symbolInfo) symbolInfo.reset(getSymbolInfo()); + linkerObj = obj; + wasm = &obj->wasm; + allocator = &wasm->allocator; + + s = inputStart; + process(); + } + + // getSymbolInfo scans the .s file to determine what symbols it defines + // and references. + LinkerObject::SymbolInfo* getSymbolInfo() { + if (!symbolInfo) { + symbolInfo = make_unique(); + scan(symbolInfo.get()); + } + return symbolInfo.get(); + } + + private: + // utilities + + void skipWhitespace() { + while (1) { + while (*s && isspace(*s)) s++; + if (*s != '#') break; + while (*s != '\n') s++; + } + } + + void skipToEOL() { + s = strchr(s, '\n'); + assert(s); + } + + bool skipComma() { + skipWhitespace(); + if (*s != ',') return false; + s++; + skipWhitespace(); + return true; + } + + bool skipEqual() { + skipWhitespace(); + if (*s != '=') return false; + s++; + skipWhitespace(); + return true; + } + + #define abort_on(why) { \ + dump(why ":"); \ + abort(); \ + } + + bool peek(const char *pattern) { + return strncmp(s, pattern, strlen(pattern)) == 0; + } + + // match and skip the pattern, if matched + bool match(const char *pattern) { + size_t size = strlen(pattern); + if (strncmp(s, pattern, size) == 0) { + s += size; + skipWhitespace(); + return true; + } + return false; + } + + void mustMatch(const char *pattern) { + bool matched = match(pattern); + if (!matched) { + std::cerr << "<< " << pattern << " >>\n"; + abort_on("bad mustMatch"); + } + } + + void dump(const char *text) { + std::cerr << "[[" << text << "]]:\n==========\n"; + for (size_t i = 0; i < 60; i++) { + if (!s[i]) break; + std::cerr << s[i]; + } + std::cerr << "\n==========\n"; + } + + void unget(Name str) { + s -= strlen(str.str); + } + + Name getStr() { + std::string str; // TODO: optimize this and the other get* methods + while (*s && !isspace(*s)) { + str += *s; + s++; + } + return cashew::IString(str.c_str(), false); + } + + void skipToSep() { + while (*s && !isspace(*s) && *s != ',' && *s != '(' && *s != ')' && *s != ':' && *s != '+' && *s != '-') { + s++; + } + } + + Name getStrToSep() { + std::string str; + while (*s && !isspace(*s) && *s != ',' && *s != '(' && *s != ')' && *s != ':' && *s != '+' && *s != '-' && *s != '=') { + str += *s; + s++; + } + return cashew::IString(str.c_str(), false); + } + + Name getStrToColon() { + std::string str; + while (*s && !isspace(*s) && *s != ':') { + str += *s; + s++; + } + return cashew::IString(str.c_str(), false); + } + + // get an int + int32_t getInt() { + const char* loc = s; + uint32_t value = 0; + bool neg = false; + if (*loc == '-') { + neg = true; + loc++; + } + while (isdigit(*loc)) { + uint32_t digit = *loc - '0'; + if (value > std::numeric_limits::max() / 10) { + abort_on("uint32_t overflow"); + } + value *= 10; + if (value > std::numeric_limits::max() - digit) { + abort_on("uint32_t overflow"); + } + value += digit; + loc++; + } + if (neg) { + uint32_t positive_int_min = + (uint32_t) - (1 + std::numeric_limits::min()) + (uint32_t)1; + if (value > positive_int_min) { + abort_on("negative int32_t overflow"); + } + s = loc; + return -value; + } + s = loc; + return value; + } + + // get an int from an arbitrary string, with our full error handling + int32_t getInt(const char *from) { + const char *before = s; + s = from; + auto ret = getInt(); + s = before; + return ret; + } + + // gets a constant, which may be a relocation for later. + // returns whether this is a relocation + // TODO: Clean up this and the way relocs are created from parsed objects + LinkerObject::Relocation* getRelocatableConst(uint32_t* target) { + if (isdigit(*s) || *s == '-') { + int32_t val = getInt(); + memcpy(target, &val, sizeof(val)); + return nullptr; + } + + // a global constant, we need to fix it up later + Name name = getStrToSep(); + LinkerObject::Relocation::Kind kind = isFunctionName(name) ? + LinkerObject::Relocation::kFunction : + LinkerObject::Relocation::kData; + int offset = 0; + if (*s == '+') { + s++; + offset = getInt(); + } else if (*s == '-') { + s++; + offset = -getInt(); + } + return new LinkerObject::Relocation( + kind, target, fixEmLongjmp(cleanFunction(name)), offset); + } + Expression* relocationToGetGlobal(LinkerObject::Relocation* relocation) { + if (!relocation) { + return nullptr; + } + + auto name = relocation->symbol; + auto g = allocator->alloc(); + g->name = name; + g->type = i32; + + // Optimization: store any nonnegative addends in their natural place. + // Only do this for positive addends because load/store offsets cannot be + // negative. + if (relocation->addend >= 0) { + *relocation->data = relocation->addend; + return g; + } + + auto c = allocator->alloc(); + c->type = i32; + c->value = Literal(relocation->addend); + + auto add = allocator->alloc(); + add->type = i32; + add->op = AddInt32; + add->left = c; + add->right = g; + return add; + } + Expression* getRelocatableExpression(uint32_t* target) { + auto relocation = std::unique_ptr(getRelocatableConst(target)); + if (!relocation) { + return nullptr; + } + if (linkerObj->isObjectImplemented(relocation->symbol)) { + linkerObj->addRelocation(relocation.release()); + return nullptr; + } + return relocationToGetGlobal(relocation.get()); + } + + int64_t getInt64() { + const char* loc = s; + uint64_t value = 0; + bool neg = false; + if (*loc == '-') { + neg = true; + loc++; + } + while (isdigit(*loc)) { + uint64_t digit = *loc - '0'; + if (value > std::numeric_limits::max() / 10) { + abort_on("uint64_t overflow"); + } + value *= 10; + if (value > std::numeric_limits::max() - digit) { + abort_on("uint64_t overflow"); + } + value += digit; + loc++; + } + if (neg) { + uint64_t positive_int_min = + (uint64_t) - (1 + std::numeric_limits::min()) + (uint64_t)1; + if (value > positive_int_min) { + abort_on("negative int64_t overflow"); + } + s = loc; + return -value; + } + s = loc; + return value; + } + + Name getSeparated(char separator) { + skipWhitespace(); + std::string str; + while (*s && *s != separator && *s != '\n') { + str += *s; + s++; + } + skipWhitespace(); + return cashew::IString(str.c_str(), false); + } + Name getCommaSeparated() { return getSeparated(','); } + Name getAtSeparated() { return getSeparated('@'); } + + Name getAssign() { + skipWhitespace(); + if (*s != '$') return Name(); + const char *before = s; + s++; + std::string str; + while (*s && *s != '=' && *s != '\n' && *s != ',') { + str += *s; + s++; + } + if (*s != '=') { // not an assign + s = before; + return Name(); + } + s++; + skipComma(); + return cashew::IString(str.c_str(), false); + } + + std::vector getQuoted() { + assert(*s == '"'); + s++; + std::vector str; + while (*s && *s != '\"') { + if (s[0] == '\\') { + switch (s[1]) { + case 'n': str.push_back('\n'); s += 2; continue; + case 'r': str.push_back('\r'); s += 2; continue; + case 't': str.push_back('\t'); s += 2; continue; + case 'f': str.push_back('\f'); s += 2; continue; + case 'b': str.push_back('\b'); s += 2; continue; + case '\\': str.push_back('\\'); s += 2; continue; + case '"': str.push_back('"'); s += 2; continue; + default: { + if (isdigit(s[1])) { + int code = (s[1] - '0')*8*8 + (s[2] - '0')*8 + (s[3] - '0'); + str.push_back(char(code)); + s += 4; + continue; + } else abort_on("getQuoted-escape"); + } + } + } + str.push_back(*s); + s++; + } + s++; + skipWhitespace(); + return str; + } + + WasmType tryGetType() { + if (match("i32")) return i32; + if (match("i64")) return i64; + if (match("f32")) return f32; + if (match("f64")) return f64; + return none; + } + + WasmType tryGetTypeWithoutNewline() { + const char* saved = s; + WasmType type = tryGetType(); + if (type != none && strchr(saved, '\n') > s) { + s = saved; + type = none; + } + return type; + } + + WasmType getType() { + WasmType t = tryGetType(); + if (t != none) { + return t; + } + abort_on("getType"); + } + + // The LLVM backend emits function names as name@FUNCTION. + bool isFunctionName(Name name) { + return !!strstr(name.str, "@FUNCTION"); + } + // Drop the @ and after it. + Name cleanFunction(Name name) { + if (!strchr(name.str, '@')) return name; + char *temp = strdup(name.str); + *strchr(temp, '@') = 0; + Name ret = cashew::IString(temp, false); + free(temp); + return ret; + } + + // processors + + void scan(LinkerObject::SymbolInfo* info) { + s = inputStart; + while (*s) { + skipWhitespace(); + + // add function definitions and aliases + if (match(".type")) { + Name name = getCommaSeparated(); + skipComma(); + if (!match("@function")) continue; + if (match(".hidden")) mustMatch(name.str); + mustMatch(name.str); + if (match(":")) { + info->implementedFunctions.insert(name); + } else if (match("=")) { + Name alias = getAtSeparated(); + mustMatch("@FUNCTION"); + auto ret = info->aliasedSymbols.insert({name, LinkerObject::SymbolAlias(alias, LinkerObject::Relocation::kFunction, 0)}); + if (!ret.second) std::cerr << "Unsupported data alias redefinition: " << name << ", skipping...\n"; + } else { + abort_on("unknown directive"); + } + } else if (match(".import_global")) { + Name name = getStr(); + info->importedObjects.insert(name); + s = strchr(s, '\n'); + } else { + // add data aliases + Name lhs = getStrToSep(); + // When the current line contains only one word, e.g.".text" + if (match("\n")) + continue; + // When the current line contains more than one word + if (!skipEqual()){ + s = strchr(s, '\n'); + if (!s) break; + continue; + } + + // get the original name + Name rhs = getStrToSep(); + assert(!isFunctionName(rhs)); + Offset offset = 0; + if (*s == '+') { + s++; + offset = getInt(); + } + + // check if the rhs is already an alias + const auto alias = symbolInfo->aliasedSymbols.find(rhs); + if (alias != symbolInfo->aliasedSymbols.end() && alias->second.kind == LinkerObject::Relocation::kData) { + offset += alias->second.offset; + rhs = alias->second.symbol; + } + + // add the new alias + auto ret = symbolInfo->aliasedSymbols.insert({lhs, LinkerObject::SymbolAlias(rhs, + LinkerObject::Relocation::kData, offset)}); + if (!ret.second) std::cerr << "Unsupported function alias redefinition: " << lhs << ", skipping...\n"; + } + } + } + + void process() { + while (*s) { + skipWhitespace(); + if (debug) dump("process"); + if (!*s) break; + if (*s != '.') skipObjectAlias(false); + s++; + if (match("text")) parseText(); + else if (match("type")) parseType(); + else if (match("weak") || match("hidden") || match("protected") || match("internal")) getStr(); // contents are in the content that follows + else if (match("imports")) skipImports(); + else if (match("data")) {} + else if (match("ident")) skipToEOL(); + else if (match("section")) parseToplevelSection(); + else if (match("file")) parseFile(); + else if (match("align") || match("p2align")) skipToEOL(); + else if (match("import_global")) { + skipToEOL(); + skipWhitespace(); + if (match(".size")) { + skipToEOL(); + } + } + else if (match("globl")) parseGlobl(); + else if (match("functype")) parseFuncType(); + else skipObjectAlias(true); + } + } + + void skipObjectAlias(bool prefix) { + if (debug) dump("object_alias"); + + // grab the dot that was consumed earlier + if (prefix) s--; + Name lhs = getStrToSep(); + WASM_UNUSED(lhs); + if (!skipEqual()) abort_on("object_alias"); + + Name rhs = getStr(); + WASM_UNUSED(rhs); + skipWhitespace(); + + // if no size attribute (e.g. weak symbol), skip + if (!match(".size")) return; + + mustMatch(lhs.str); + mustMatch(","); + Name size = getStr(); + WASM_UNUSED(size); + skipWhitespace(); + } + + void parseToplevelSection() { + auto section = getCommaSeparated(); + // Skipping .debug_ sections + if (!strncmp(section.c_str(), ".debug_", strlen(".debug_"))) { + const char *next = strstr(s, ".section"); + s = !next ? s + strlen(s) : next; + return; + } + // Initializers are anything in a section whose name begins with .init_array + if (!strncmp(section.c_str(), ".init_array", strlen(".init_array") - 1)) { + parseInitializer(); + return; + } + s = strchr(s, '\n'); + } + + void parseInitializer() { + // Ignore the rest of the .section line + skipToEOL(); + skipWhitespace(); + // The section may start with .p2align + if (match(".p2align")) { + skipToEOL(); + skipWhitespace(); + } + mustMatch(".int32"); + do { + linkerObj->addInitializerFunction(cleanFunction(getStr())); + skipWhitespace(); + } while (match(".int32")); + } + + void parseText() { + while (*s) { + skipWhitespace(); + if (!*s) break; + if (*s != '.') break; + s++; + if (parseVersionMin()); + else if (match("file")) parseFile(); + else if (match("globl")) parseGlobl(); + else if (match("type")) parseType(); + else { + s--; + break; + } + } + } + + void parseFile() { + if (debug) dump("file"); + size_t fileId = 0; + if (*s != '"') { + fileId = getInt(); + skipWhitespace(); + } + auto filename = getQuoted(); + uint32_t index = wasm->debugInfoFileNames.size(); + wasm->debugInfoFileNames.push_back(std::string(filename.begin(), filename.end())); + fileIndexMap[fileId] = index; + } + + void parseGlobl() { + linkerObj->addGlobal(getStr()); + skipWhitespace(); + } + + void parseFuncType() { + auto decl = make_unique(); + Name rawName = getCommaSeparated(); + skipComma(); + if(match("void")) { + decl->result = none; + } else { + decl->result = getType(); + } + while (*s && skipComma()) decl->params.push_back(getType()); + std::string sig = getSig(decl.get()); + decl->name = "FUNCSIG$" + sig; + + FunctionType *ty = wasm->getFunctionTypeOrNull(decl->name); + Name name = fixEmEHSjLjNames(rawName, sig); + if (!ty) { + // The wasm module takes ownership of the FunctionType if we insert it. + // Otherwise it's already in the module and ours is freed. + ty = decl.release(); + wasm->addFunctionType(ty); + } + linkerObj->addExternType(name, ty); + } + + bool parseVersionMin() { + if (match("watchos_version_min") || match("tvos_version_min") || match("ios_version_min") || match("macosx_version_min")) { + s = strchr(s, '\n'); + skipWhitespace(); + return true; + } else + return false; + } + + void parseFunction() { + if (debug) dump("func"); + Name name = getStrToSep(); + if (match(" =")) { + /* alias = */ getAtSeparated(); + mustMatch("@FUNCTION"); + return; + } + + mustMatch(":"); + + Function::DebugLocation debugLocation = { 0, 0, 0 }; + bool useDebugLocation = false; + auto recordLoc = [&]() { + if (debug) dump("loc"); + size_t fileId = getInt(); + skipWhitespace(); + uint32_t row = getInt(); + skipWhitespace(); + uint32_t column = getInt(); + auto iter = fileIndexMap.find(fileId); + if (iter == fileIndexMap.end()) { + abort_on("idx"); + } + useDebugLocation = true; + debugLocation = { iter->second, row, column }; + s = strchr(s, '\n'); + }; + auto recordLabel = [&]() { + if (debug) dump("label"); + Name label = getStrToSep(); + // TODO: track and create map of labels and their ranges for our AST + WASM_UNUSED(label); + s = strchr(s, '\n'); + }; + + unsigned nextId = 0; + auto getNextId = [&nextId]() { + return cashew::IString(std::to_string(nextId++).c_str(), false); + }; + wasm::Builder builder(*wasm); + std::vector params; + WasmType resultType = none; + std::vector vars; + + std::map localTypes; + // params and result + while (1) { + if (match(".param")) { + while (1) { + Name name = getNextId(); + WasmType type = getType(); + params.emplace_back(name, type); + localTypes[name] = type; + skipWhitespace(); + if (!match(",")) break; + } + } else if (match(".result")) { + resultType = getType(); + } else if (match(".indidx")) { + int64_t indirectIndex = getInt64(); + skipWhitespace(); + if (indirectIndex < 0) { + abort_on("indidx"); + } + linkerObj->addIndirectIndex(name, indirectIndex); + } else if (match(".local")) { + while (1) { + Name name = getNextId(); + WasmType type = getType(); + vars.emplace_back(name, type); + localTypes[name] = type; + skipWhitespace(); + if (!match(",")) break; + } + } else if (match(".file")) { + parseFile(); + skipWhitespace(); + } else if (match(".loc")) { + recordLoc(); + skipWhitespace(); + } else if (peek(".Lfunc_begin")) { + recordLabel(); + skipWhitespace(); + } else break; + } + Function* func = builder.makeFunction(name, std::move(params), resultType, std::move(vars)); + + // parse body + func->body = allocator->alloc(); + std::vector bstack; + auto addToBlock = [&](Expression* curr) { + if (useDebugLocation) { + func->debugLocations[curr] = debugLocation; + } + Expression* last = bstack.back(); + if (last->is()) { + last = last->cast()->body; + } + last->cast()->list.push_back(curr); + }; + bstack.push_back(func->body); + std::vector estack; + auto push = [&](Expression* curr) { + //std::cerr << "push " << curr << '\n'; + estack.push_back(curr); + }; + auto pop = [&]() { + assert(!estack.empty()); + Expression* ret = estack.back(); + assert(ret); + estack.pop_back(); + //std::cerr << "pop " << ret << '\n'; + return ret; + }; + auto getNumInputs = [&]() { + int ret = 1; + const char *t = s; + while (*t != '\n') { + if (*t == ',') ret++; + t++; + } + return ret; + }; + auto getInputs = [&](int num) { + // we may have $pop, $0, $pop, $1 etc., which are getlocals + // interleaved with stack pops, and the stack pops must be done in + // *reverse* order, i.e., that input should turn into + // lastpop, getlocal(0), firstpop, getlocal(1) + std::vector inputs; // TODO: optimize (if .s format doesn't change) + inputs.resize(num); + for (int i = 0; i < num; i++) { + if (match("$pop")) { + skipToSep(); + inputs[i] = nullptr; + } else if (*s == '$') { + s++; + auto curr = allocator->alloc(); + curr->index = func->getLocalIndex(getStrToSep()); + curr->type = func->getLocalType(curr->index); + inputs[i] = curr; + } else { + abort_on("bad input register"); + } + if (*s == ')') s++; // tolerate 0(argument) syntax, where we started at the 'a' + if (*s == ':') { // tolerate :attribute=value syntax (see getAttributes) + s++; + skipToSep(); + } + if (i < num - 1) skipComma(); + } + for (int i = num-1; i >= 0; i--) { + if (inputs[i] == nullptr) inputs[i] = pop(); + } + return inputs; + }; + auto getInput = [&]() { + return getInputs(1)[0]; + }; + auto setOutput = [&](Expression* curr, Name assign) { + if (assign.isNull() || assign.str[0] == 'd') { // drop + auto* add = curr; + if (isConcreteWasmType(curr->type)) { + add = builder.makeDrop(curr); + } + addToBlock(add); + } else if (assign.str[0] == 'p') { // push + push(curr); + } else { // set to a local + auto set = allocator->alloc(); + set->index = func->getLocalIndex(assign); + set->value = curr; + set->type = curr->type; + set->setTee(false); + addToBlock(set); + } + }; + auto getAttributes = [&](int num) { + const char *before = s; + std::vector attributes; // TODO: optimize (if .s format doesn't change) + attributes.resize(num); + for (int i = 0; i < num; i++) { + skipToSep(); + if (*s == ')') s++; // tolerate 0(argument) syntax, where we started at the 'a' + if (*s == ':') { + attributes[i] = s + 1; + } else { + attributes[i] = nullptr; + } + if (i < num - 1) skipComma(); + } + s = before; + return attributes; + }; + // + auto makeBinary = [&](BinaryOp op, WasmType type) { + Name assign = getAssign(); + skipComma(); + auto curr = allocator->alloc(); + curr->op = op; + auto inputs = getInputs(2); + curr->left = inputs[0]; + curr->right = inputs[1]; + curr->finalize(); + assert(curr->type == type); + setOutput(curr, assign); + }; + auto makeUnary = [&](UnaryOp op, WasmType type) { + Name assign = getAssign(); + skipComma(); + auto curr = allocator->alloc(); + curr->op = op; + curr->value = getInput(); + curr->type = type; + curr->finalize(); + setOutput(curr, assign); + }; + auto makeHost = [&](HostOp op) { + Name assign = getAssign(); + auto curr = allocator->alloc(); + curr->op = op; + curr->finalize(); + setOutput(curr, assign); + }; + auto makeHost1 = [&](HostOp op) { + Name assign = getAssign(); + auto curr = allocator->alloc(); + curr->op = op; + curr->operands.push_back(getInput()); + curr->finalize(); + setOutput(curr, assign); + }; + auto useRelocationExpression = [&](Expression *expr, Expression *reloc) { + if (!reloc) { + return expr; + } + // Optimization: if the given expr is (i32.const 0), ignore it + if (expr->_id == Expression::ConstId && + ((Const*)expr)->value.getInteger() == 0) { + return reloc; + } + + // Otherwise, need to add relocation expr to given expr + auto add = allocator->alloc(); + add->type = i32; + add->op = AddInt32; + add->left = expr; + add->right = reloc; + return (Expression*)add; + }; + auto makeLoad = [&](WasmType type) { + skipComma(); + auto curr = allocator->alloc(); + curr->isAtomic = false; + curr->type = type; + int32_t bytes = getInt() / CHAR_BIT; + curr->bytes = bytes > 0 ? bytes : getWasmTypeSize(type); + curr->signed_ = match("_s"); + match("_u"); + Name assign = getAssign(); + auto relocation = getRelocatableExpression(&curr->offset.addr); + mustMatch("("); + auto attributes = getAttributes(1); + curr->ptr = useRelocationExpression(getInput(), relocation); + curr->align = curr->bytes; + if (attributes[0]) { + assert(strncmp(attributes[0], "p2align=", 8) == 0); + curr->align = 1U << getInt(attributes[0] + 8); + } + setOutput(curr, assign); + }; + auto makeStore = [&](WasmType type) { + auto curr = allocator->alloc(); + curr->isAtomic = false; + curr->valueType = type; + s += strlen("store"); + if(!isspace(*s)) { + curr->bytes = getInt() / CHAR_BIT; + } else { + curr->bytes = getWasmTypeSize(type); + } + skipWhitespace(); + auto relocation = getRelocatableExpression(&curr->offset.addr); + mustMatch("("); + auto attributes = getAttributes(2); + auto inputs = getInputs(2); + curr->ptr = useRelocationExpression(inputs[0], relocation); + curr->align = curr->bytes; + if (attributes[0]) { + assert(strncmp(attributes[0], "p2align=", 8) == 0); + curr->align = 1U << getInt(attributes[0] + 8); + } + curr->value = inputs[1]; + curr->finalize(); + addToBlock(curr); + }; + auto makeSelect = [&](WasmType type) { + Name assign = getAssign(); + skipComma(); + auto curr = allocator->alloc()) { + handleCondition(select->condition); + } else if (auto* sw = curr->dynCast()) { + handleCondition(sw->condition); + } else if (auto* set = curr->dynCast()) { + if (set->isTee()) { + // maybe we don't need the set + tryToReplaceCurrent(set->value); + } + } else if (auto* unary = curr->dynCast()) { + // maybe we can pass through + tryToReplaceCurrent(unary->value); + } else if (auto* binary = curr->dynCast()) { + // maybe we can pass through + if (!tryToReplaceCurrent(binary->left)) { + tryToReplaceCurrent(binary->right); + } + } else if (auto* call = curr->dynCast()) { + handleCall(call); + } else if (auto* call = curr->dynCast()) { + handleCall(call); + } else if (auto* call = curr->dynCast()) { + if (tryToReplaceCurrent(call->target)) return; + handleCall(call); + } + } + + void visitFunction(Function* curr) { + // extra chance to work on the function toplevel element, as if it can + // be reduced it's great + visitExpression(curr->body); + // finish function + funcsSeen++; + static int last = 0; + int percentage = (100 * funcsSeen) / getModule()->functions.size(); + if (std::abs(percentage - last) >= 5) { + std::cerr << "| " << percentage << "% of funcs complete\n"; + last = percentage; + } + } + + // TODO: bisection on segment shrinking? + + void visitTable(Table* curr) { + std::cerr << "| try to simplify table\n"; + Name first; + for (auto& segment : curr->segments) { + for (auto item : segment.data) { + first = item; + break; + } + if (!first.isNull()) break; + } + visitSegmented(curr, first, 100); + } + + void visitMemory(Memory* curr) { + std::cerr << "| try to simplify memory\n"; + visitSegmented(curr, 0, 2); + } + + template + void visitSegmented(T* curr, U zero, size_t bonus) { + // try to reduce to first function + // shrink segment elements + for (auto& segment : curr->segments) { + auto& data = segment.data; + size_t skip = 1; // when we succeed, try to shrink by more and more, similar to bisection + for (size_t i = 0; i < data.size() && !data.empty(); i++) { + if (!shouldTryToReduce(bonus)) continue; + auto save = data; + for (size_t j = 0; j < skip; j++) { + if (!data.empty()) data.pop_back(); + } + if (writeAndTestReduction()) { + std::cerr << "| shrank segment (skip: " << skip << ")\n"; + noteReduction(); + skip = std::min(size_t(factor), 2 * skip); + } else { + data = save; + break; + } + } + } + // the "opposite" of shrinking: copy a 'zero' element + for (auto& segment : curr->segments) { + if (segment.data.empty()) continue; + for (auto& item : segment.data) { + if (!shouldTryToReduce(bonus)) continue; + if (item == zero) continue; + auto save = item; + item = zero; + if (writeAndTestReduction()) { + std::cerr << "| zeroed segment\n"; + noteReduction(); + } else { + item = save; + } + } + } + } + + void visitModule(Module* curr) { + // try to remove exports + std::cerr << "| try to remove exports\n"; + std::vector exports; + for (auto& exp : curr->exports) { + if (!shouldTryToReduce(10000)) continue; + exports.push_back(*exp); + } + for (auto& exp : exports) { + curr->removeExport(exp.name); + if (!writeAndTestReduction()) { + curr->addExport(new Export(exp)); + } else { + std::cerr << "| removed export " << exp.name << '\n'; + noteReduction(); + } + } + // try to remove functions + std::cerr << "| try to remove functions\n"; + std::vector functions; + for (auto& func : curr->functions) { + if (!shouldTryToReduce(10000)) continue; + functions.push_back(*func); + } + for (auto& func : functions) { + curr->removeFunction(func.name); + if (WasmValidator().validate(*curr, Feature::MVP, WasmValidator::Globally | WasmValidator::Quiet) && + writeAndTestReduction()) { + std::cerr << "| removed function " << func.name << '\n'; + noteReduction(); + } else { + curr->addFunction(new Function(func)); + } + } + } + + // helpers + + // try to replace condition with always true and always false + void handleCondition(Expression*& condition) { + if (!condition) return; + if (condition->is()) return; + auto* c = builder->makeConst(Literal(int32_t(0))); + if (!tryToReplaceChild(condition, c)) { + c->value = Literal(int32_t(1)); + tryToReplaceChild(condition, c); + } + } + + template + void handleCall(T* call) { + for (auto* op : call->operands) { + if (tryToReplaceCurrent(op)) return; + } + } + + bool tryToReduceCurrentToNone() { + auto* curr = getCurrent(); + if (curr->is()) return false; + // try to replace with a trivial value + Nop nop; + if (tryToReplaceCurrent(&nop)) { + replaceCurrent(builder->makeNop()); + return true; + } + return false; + } + + // try to replace a concrete value with a trivial constant + bool tryToReduceCurrentToConst() { + auto* curr = getCurrent(); + if (curr->is()) return false; + // try to replace with a trivial value + Const* c = builder->makeConst(Literal(int32_t(0))); + if (tryToReplaceCurrent(c)) return true; + c->value = LiteralUtils::makeLiteralFromInt32(1, curr->type); + c->type = curr->type; + return tryToReplaceCurrent(c); + } + + bool tryToReduceCurrentToUnreachable() { + auto* curr = getCurrent(); + if (curr->is()) return false; + // try to replace with a trivial value + Unreachable un; + if (tryToReplaceCurrent(&un)) { + replaceCurrent(builder->makeUnreachable()); + return true; + } + // maybe a return? TODO + return false; + } +}; + +// +// main +// + +int main(int argc, const char* argv[]) { + std::string input, test, working, command; + bool verbose = false, + debugInfo = false, + force = false; + Options options("wasm-reduce", "Reduce a wasm file to a smaller one that has the same behavior on a given command"); + options + .add("--command", "-cmd", "The command to run on the test, that we want to reduce while keeping the command's output identical. " + "We look at the command's return code and stdout here (TODO: stderr), " + "and we reduce while keeping those unchanged.", + Options::Arguments::One, + [&](Options* o, const std::string& argument) { + command = argument; + }) + .add("--test", "-t", "Test file (this will be written to to test, the given command should read it when we call it)", + Options::Arguments::One, + [&](Options* o, const std::string& argument) { + test = argument; + }) + .add("--working", "-w", "Working file (this will contain the current good state while doing temporary computations, " + "and will contain the final best result at the end)", + Options::Arguments::One, + [&](Options* o, const std::string& argument) { + working = argument; + }) + .add("--verbose", "-v", "Verbose output mode", + Options::Arguments::Zero, + [&](Options* o, const std::string& argument) { + verbose = true; + }) + .add("--debugInfo", "-g", "Keep debug info in binaries", + Options::Arguments::Zero, + [&](Options* o, const std::string& argument) { + debugInfo = true; + }) + .add("--force", "-f", "Force the reduction attempt, ignoring problems that imply it is unlikely to succeed", + Options::Arguments::Zero, + [&](Options* o, const std::string& argument) { + force = true; + }) + .add("--timeout", "-to", "A timeout to apply to each execution of the command, in seconds (default: 2)", + Options::Arguments::One, + [&](Options* o, const std::string& argument) { + timeout = atoi(argument.c_str()); + std::cout << "|applying timeout: " << timeout << "\n"; + }) + .add_positional("INFILE", Options::Arguments::One, + [&](Options* o, const std::string& argument) { + input = argument; + }); + options.parse(argc, argv); + + if (test.size() == 0) Fatal() << "test file not provided\n"; + if (working.size() == 0) Fatal() << "working file not provided\n"; + + std::cerr << "|input: " << input << '\n'; + std::cerr << "|test: " << test << '\n'; + std::cerr << "|working: " << working << '\n'; + + // get the expected output + copy_file(input, test); + expected.getFromExecution(command); + + std::cerr << "|expected result:\n" << expected << '\n'; + + auto stopIfNotForced = [&](std::string message, ProgramResult& result) { + std::cerr << "|! " << message << '\n' << result << '\n'; + if (!force) { + Fatal() << "|! stopping, as it is very unlikely reduction can succeed (use -f to ignore this check)"; + } + }; + + std::cerr << "|checking that command has different behavior on invalid binary\n"; + { + { + std::ofstream dst(test, std::ios::binary); + dst << "waka waka\n"; + } + ProgramResult result(command); + if (result == expected) { + stopIfNotForced("running command on an invalid module should give different results", result); + } + } + + std::cerr << "|checking that command has expected behavior on canonicalized (read-written) binary\n"; + { + // read and write it + ProgramResult readWrite(std::string("bin/wasm-opt ") + input + " -o " + test); + if (readWrite.failed()) { + stopIfNotForced("failed to read and write the binary", readWrite); + } else { + ProgramResult result(command); + if (result != expected) { + stopIfNotForced("running command on the canonicalized module should give the same results", result); + } + } + } + + copy_file(input, working); + std::cerr << "|input size: " << file_size(working) << "\n"; + + std::cerr << "|starting reduction!\n"; + + int factor = 4096; + size_t lastDestructiveReductions = 0; + size_t lastPostPassesSize = 0; + + bool stopping = false; + + while (1) { + Reducer reducer(command, test, working, verbose, debugInfo); + + // run binaryen optimization passes to reduce. passes are fast to run + // and can often reduce large amounts of code efficiently, as opposed + // to detructive reduction (i.e., that doesn't preserve correctness as + // passes do) since destrucive must operate one change at a time + std::cerr << "| reduce using passes...\n"; + auto oldSize = file_size(working); + reducer.reduceUsingPasses(); + auto newSize = file_size(working); + auto passProgress = oldSize - newSize; + std::cerr << "| after pass reduction: " << newSize << "\n"; + + // always stop after a pass reduction attempt, for final cleanup + if (stopping) break; + + // check if the full cycle (destructive/passes) has helped or not + if (lastPostPassesSize && newSize >= lastPostPassesSize) { + std::cerr << "| progress has stopped, skipping to the end\n"; + if (factor == 1) { + // this is after doing work with factor 1, so after the remaining work, stop + stopping = true; + } else { + // just try to remove all we can and finish up + factor = 1; + } + } + lastPostPassesSize = newSize; + + // if destructive reductions lead to useful proportionate pass reductions, keep + // going at the same factor, as pass reductions are far faster + std::cerr << "| pass progress: " << passProgress << ", last destructive: " << lastDestructiveReductions << '\n'; + if (passProgress >= 4 * lastDestructiveReductions) { + // don't change + std::cerr << "| progress is good, do not quickly decrease factor\n"; + } else { + if (factor > 10) { + factor = (factor / 3) + 1; + } else { + factor = (factor + 1) / 2; // stable on 1 + } + } + + // no point in a factor lorger than the size + assert(newSize > 4); // wasm modules are >4 bytes anyhow + factor = std::min(factor, int(newSize) / 4); + + // try to reduce destructively. if a high factor fails to find anything, + // quickly try a lower one (no point in doing passes until we reduce + // destructively at least a little) + while (1) { + std::cerr << "| reduce destructively... (factor: " << factor << ")\n"; + lastDestructiveReductions = reducer.reduceDestructively(factor); + if (lastDestructiveReductions > 0) break; + // we failed to reduce destructively + if (factor == 1) { + stopping = true; + break; + } + factor = std::max(1, factor / 4); // quickly now, try to find *something* we can reduce + } + + std::cerr << "| destructive reduction led to size: " << file_size(working) << '\n'; + } + std::cerr << "|finished, final size: " << file_size(working) << "\n"; + copy_file(working, test); // just to avoid confusion +} + diff --git a/src/binaryen/src/tools/wasm-shell.cpp b/src/binaryen/src/tools/wasm-shell.cpp new file mode 100644 index 0000000000..965887cf90 --- /dev/null +++ b/src/binaryen/src/tools/wasm-shell.cpp @@ -0,0 +1,311 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// A WebAssembly shell, loads a .wast file (WebAssembly in S-Expression format) +// and executes it. This provides similar functionality as the reference +// interpreter, like assert_* calls, so it can run the spec test suite. +// + +#include + +#include "execution-results.h" +#include "pass.h" +#include "shell-interface.h" +#include "support/command-line.h" +#include "support/file.h" +#include "wasm-interpreter.h" +#include "wasm-printing.h" +#include "wasm-s-parser.h" +#include "wasm-validator.h" + +using namespace cashew; +using namespace wasm; + +Name ASSERT_RETURN("assert_return"), + ASSERT_TRAP("assert_trap"), + ASSERT_INVALID("assert_invalid"), + ASSERT_MALFORMED("assert_malformed"), + ASSERT_UNLINKABLE("assert_unlinkable"), + INVOKE("invoke"), + GET("get"); + +// Modules named in the file + +std::map> modules; +std::map> builders; +std::map> interfaces; +std::map> instances; + +// +// An operation on a module +// + +struct Operation { + ModuleInstance* instance; + Name operation; + Name name; + LiteralList arguments; + + Operation(Element& element, ModuleInstance* instanceInit, SExpressionWasmBuilder& builder) : instance(instanceInit) { + operation = element[0]->str(); + Index i = 1; + if (element.size() >= 3 && element[2]->isStr()) { + // module also specified + Name moduleName = element[i++]->str(); + instance = instances[moduleName].get(); + } + name = element[i++]->str(); + for (size_t j = i; j < element.size(); j++) { + Expression* argument = builder.parseExpression(*element[j]); + arguments.push_back(argument->dynCast()->value); + } + } + + Literal operate() { + if (operation == INVOKE) { + return instance->callExport(name, arguments); + } else if (operation == GET) { + return instance->getExport(name); + } else { + Fatal() << "unknown operation: " << operation << '\n'; + WASM_UNREACHABLE(); + } + } +}; + +static void run_asserts(Name moduleName, size_t* i, bool* checked, Module* wasm, + Element* root, + SExpressionWasmBuilder* builder, + Name entry) { + ModuleInstance* instance = nullptr; + if (wasm) { + auto tempInterface = wasm::make_unique(); // prefix make_unique to work around visual studio bugs + auto tempInstance = wasm::make_unique(*wasm, tempInterface.get()); + interfaces[moduleName].swap(tempInterface); + instances[moduleName].swap(tempInstance); + instance = instances[moduleName].get(); + if (entry.is()) { + Function* function = wasm->getFunction(entry); + if (!function) { + std::cerr << "Unknown entry " << entry << std::endl; + } else { + LiteralList arguments; + for (WasmType param : function->params) { + arguments.push_back(Literal(param)); + } + try { + instance->callExport(entry, arguments); + } catch (ExitException&) { + } + } + } + } + while (*i < root->size()) { + Element& curr = *(*root)[*i]; + IString id = curr[0]->str(); + if (id == MODULE) break; + *checked = true; + Colors::red(std::cerr); + std::cerr << *i << '/' << (root->size() - 1); + Colors::green(std::cerr); + std::cerr << " CHECKING: "; + Colors::normal(std::cerr); + std::cerr << curr; + Colors::green(std::cerr); + std::cerr << " [line: " << curr.line << "]\n"; + Colors::normal(std::cerr); + if (id == ASSERT_INVALID || id == ASSERT_MALFORMED || id == ASSERT_UNLINKABLE) { + // a module invalidity test + Module wasm; + bool invalid = false; + std::unique_ptr builder; + try { + builder = std::unique_ptr( + new SExpressionWasmBuilder(wasm, *curr[1]) + ); + } catch (const ParseException&) { + invalid = true; + } + if (!invalid) { + // maybe parsed ok, but otherwise incorrect + invalid = !WasmValidator().validate(wasm); + } + if (!invalid && id == ASSERT_UNLINKABLE) { + // validate "instantiating" the mdoule + for (auto& import : wasm.imports) { + if (import->module == SPECTEST && import->base == PRINT) { + if (import->kind != ExternalKind::Function) { + std::cerr << "spectest.print should be a function, but is " << int32_t(import->kind) << '\n'; + invalid = true; + break; + } + } else { + std::cerr << "unknown import: " << import->module << '.' << import->base << '\n'; + invalid = true; + break; + } + } + for (auto& segment : wasm.table.segments) { + for (auto name : segment.data) { + // spec tests consider it illegal to use spectest.print in a table + if (auto* import = wasm.getImportOrNull(name)) { + if (import->module == SPECTEST && import->base == PRINT) { + std::cerr << "cannot put spectest.print in table\n"; + invalid = true; + } + } + } + } + } + if (!invalid) { + Colors::red(std::cerr); + std::cerr << "[should have been invalid]\n"; + Colors::normal(std::cerr); + std::cerr << &wasm << '\n'; + abort(); + } + } else if (id == INVOKE) { + assert(wasm); + Operation operation(curr, instance, *builder); + operation.operate(); + } else if (wasm) { // if no wasm, we skipped the module + // an invoke test + bool trapped = false; + WASM_UNUSED(trapped); + Literal result; + try { + Operation operation(*curr[1], instance, *builder); + result = operation.operate(); + } catch (const TrapException&) { + trapped = true; + } + if (id == ASSERT_RETURN) { + assert(!trapped); + if (curr.size() >= 3) { + Literal expected = builder + ->parseExpression(*curr[2]) + ->dynCast() + ->value; + std::cerr << "seen " << result << ", expected " << expected << '\n'; + if (!expected.bitwiseEqual(result)) { + std::cout << "unexpected, should be identical\n"; + abort(); + } + } else { + Literal expected; + std::cerr << "seen " << result << ", expected " << expected << '\n'; + if (!expected.bitwiseEqual(result)) { + std::cout << "unexpected, should be identical\n"; + abort(); + } + } + } + if (id == ASSERT_TRAP) assert(trapped); + } + *i += 1; + } +} + +// +// main +// + +int main(int argc, const char* argv[]) { + Name entry; + std::set skipped; + + Options options("wasm-shell", "Execute .wast files"); + options + .add( + "--entry", "-e", "call the entry point after parsing the module", + Options::Arguments::One, + [&entry](Options*, const std::string& argument) { entry = argument; }) + .add( + "--skip", "-s", "skip input on certain lines (comma-separated-list)", + Options::Arguments::One, + [&skipped](Options*, const std::string& argument) { + size_t i = 0; + while (i < argument.size()) { + auto ending = argument.find(',', i); + if (ending == std::string::npos) { + ending = argument.size(); + } + auto sub = argument.substr(i, ending - i); + skipped.insert(atoi(sub.c_str())); + i = ending + 1; + } + }) + .add_positional("INFILE", Options::Arguments::One, + [](Options* o, const std::string& argument) { + o->extra["infile"] = argument; + }); + options.parse(argc, argv); + + auto input(read_file>(options.extra["infile"], Flags::Text, options.debug ? Flags::Debug : Flags::Release)); + + bool checked = false; + + try { + if (options.debug) std::cerr << "parsing text to s-expressions...\n"; + SExpressionParser parser(input.data()); + Element& root = *parser.root; + + // A .wast may have multiple modules, with some asserts after them + size_t i = 0; + while (i < root.size()) { + Element& curr = *root[i]; + if (skipped.count(curr.line) > 0) { + Colors::green(std::cerr); + std::cerr << "SKIPPING [line: " << curr.line << "]\n"; + Colors::normal(std::cerr); + i++; + continue; + } + IString id = curr[0]->str(); + if (id == MODULE) { + if (options.debug) std::cerr << "parsing s-expressions to wasm...\n"; + Colors::green(std::cerr); + std::cerr << "BUILDING MODULE [line: " << curr.line << "]\n"; + Colors::normal(std::cerr); + auto module = wasm::make_unique(); + Name moduleName; + auto builder = wasm::make_unique(*module, *root[i], &moduleName); + builders[moduleName].swap(builder); + modules[moduleName].swap(module); + i++; + bool valid = WasmValidator().validate(*modules[moduleName]); + if (!valid) { + WasmPrinter::printModule(modules[moduleName].get()); + } + assert(valid); + run_asserts(moduleName, &i, &checked, modules[moduleName].get(), &root, builders[moduleName].get(), entry); + } else { + run_asserts(Name(), &i, &checked, nullptr, &root, nullptr, entry); + } + } + } catch (ParseException& p) { + p.dump(std::cerr); + abort(); + } + + if (checked) { + Colors::green(std::cerr); + Colors::bold(std::cerr); + std::cerr << "all checks passed.\n"; + Colors::normal(std::cerr); + } +} diff --git a/src/binaryen/src/tools/wasm2asm.cpp b/src/binaryen/src/tools/wasm2asm.cpp new file mode 100644 index 0000000000..5c331f4c32 --- /dev/null +++ b/src/binaryen/src/tools/wasm2asm.cpp @@ -0,0 +1,100 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// wasm2asm console tool +// + +#include "support/colors.h" +#include "support/command-line.h" +#include "support/file.h" +#include "wasm-s-parser.h" +#include "wasm2asm.h" + +using namespace cashew; +using namespace wasm; + +int main(int argc, const char *argv[]) { + Wasm2AsmBuilder::Flags builderFlags; + Options options("wasm2asm", "Transform .wast files to asm.js"); + options + .add("--output", "-o", "Output file (stdout if not specified)", + Options::Arguments::One, + [](Options* o, const std::string& argument) { + o->extra["output"] = argument; + Colors::disable(); + }) + .add("--allow-asserts", "", "Allow compilation of .wast testing asserts", + Options::Arguments::Zero, + [](Options* o, const std::string& argument) { + o->extra["asserts"] = "1"; + }) + .add("--pedantic", "", "Emulate WebAssembly trapping behavior", + Options::Arguments::Zero, + [&](Options* o, const std::string& argument) { + builderFlags.pedantic = true; + }) + .add_positional("INFILE", Options::Arguments::One, + [](Options *o, const std::string &argument) { + o->extra["infile"] = argument; + }); + options.parse(argc, argv); + if (options.debug) builderFlags.debug = true; + + auto input( + read_file>(options.extra["infile"], Flags::Text, options.debug ? Flags::Debug : Flags::Release)); + + Element* root; + Module wasm; + Ref asmjs; + + try { + if (options.debug) std::cerr << "s-parsing..." << std::endl; + SExpressionParser parser(input.data()); + root = parser.root; + + if (options.debug) std::cerr << "w-parsing..." << std::endl; + SExpressionWasmBuilder builder(wasm, *(*root)[0]); + + if (options.debug) std::cerr << "asming..." << std::endl; + Wasm2AsmBuilder wasm2asm(builderFlags); + asmjs = wasm2asm.processWasm(&wasm); + + if (options.extra["asserts"] == "1") { + if (options.debug) std::cerr << "asserting..." << std::endl; + flattenAppend(asmjs, wasm2asm.processAsserts(*root, builder)); + } + } catch (ParseException& p) { + p.dump(std::cerr); + Fatal() << "error in parsing input"; + } catch (std::bad_alloc& b) { + Fatal() << "error in building module, std::bad_alloc (possibly invalid request for silly amounts of memory)"; + } + + if (options.debug) { + std::cerr << "a-printing..." << std::endl; + asmjs->stringify(std::cout, true); + std::cout << '\n'; + } + + if (options.debug) std::cerr << "j-printing..." << std::endl; + JSPrinter jser(true, true, asmjs); + jser.printAst(); + Output output(options.extra["output"], Flags::Text, options.debug ? Flags::Debug : Flags::Release); + output << jser.buffer << std::endl; + + if (options.debug) std::cerr << "done." << std::endl; +} diff --git a/src/binaryen/src/wasm-binary.h b/src/binaryen/src/wasm-binary.h new file mode 100644 index 0000000000..bcf6cf45fa --- /dev/null +++ b/src/binaryen/src/wasm-binary.h @@ -0,0 +1,957 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Parses and emits WebAssembly binary code +// + +#ifndef wasm_wasm_binary_h +#define wasm_wasm_binary_h + +#include +#include +#include + +#include "wasm.h" +#include "wasm-traversal.h" +#include "asmjs/shared-constants.h" +#include "asm_v_wasm.h" +#include "wasm-builder.h" +#include "parsing.h" +#include "wasm-validator.h" + +namespace wasm { + +enum { + // the maximum amount of bytes we emit per LEB + MaxLEB32Bytes = 5 +}; + +template +struct LEB { + static_assert(sizeof(MiniT) == 1, "MiniT must be a byte"); + + T value; + + LEB() {} + LEB(T value) : value(value) {} + + bool hasMore(T temp, MiniT byte) { + // for signed, we must ensure the last bit has the right sign, as it will zero extend + return std::is_signed::value ? (temp != 0 && temp != -1) || (value >= 0 && (byte & 64)) || (value < 0 && !(byte & 64)) : (temp != 0); + } + + void write(std::vector* out) { + T temp = value; + bool more; + do { + uint8_t byte = temp & 127; + temp >>= 7; + more = hasMore(temp, byte); + if (more) { + byte = byte | 128; + } + out->push_back(byte); + } while (more); + } + + // @minimum: a minimum number of bytes to write, padding as necessary + // returns the number of bytes written + size_t writeAt(std::vector* out, size_t at, size_t minimum = 0) { + T temp = value; + size_t offset = 0; + bool more; + do { + uint8_t byte = temp & 127; + temp >>= 7; + more = hasMore(temp, byte) || offset + 1 < minimum; + if (more) { + byte = byte | 128; + } + (*out)[at + offset] = byte; + offset++; + } while (more); + return offset; + } + + void read(std::function get) { + value = 0; + T shift = 0; + MiniT byte; + while (1) { + byte = get(); + bool last = !(byte & 128); + T payload = byte & 127; + typedef typename std::make_unsigned::type mask_type; + auto shift_mask = 0 == shift + ? ~mask_type(0) + : ((mask_type(1) << (sizeof(T) * 8 - shift)) - 1u); + T significant_payload = payload & shift_mask; + if (significant_payload != payload) { + if (!(std::is_signed::value && last)) { + throw ParseException("LEB dropped bits only valid for signed LEB"); + } + } + value |= significant_payload << shift; + if (last) break; + shift += 7; + if (size_t(shift) >= sizeof(T) * 8) { + throw ParseException("LEB overflow"); + } + } + // If signed LEB, then we might need to sign-extend. (compile should + // optimize this out if not needed). + if (std::is_signed::value) { + shift += 7; + if ((byte & 64) && size_t(shift) < 8 * sizeof(T)) { + size_t sext_bits = 8 * sizeof(T) - size_t(shift); + value <<= sext_bits; + value >>= sext_bits; + if (value >= 0) { + throw ParseException(" LEBsign-extend should produce a negative value"); + } + } + } + } +}; + +typedef LEB U32LEB; +typedef LEB U64LEB; +typedef LEB S32LEB; +typedef LEB S64LEB; + +// +// We mostly stream into a buffer as we create the binary format, however, +// sometimes we need to backtrack and write to a location behind us - wasm +// is optimized for reading, not writing. +// +class BufferWithRandomAccess : public std::vector { + bool debug; + +public: + BufferWithRandomAccess(bool debug = false) : debug(debug) {} + + BufferWithRandomAccess& operator<<(int8_t x) { + if (debug) std::cerr << "writeInt8: " << (int)(uint8_t)x << " (at " << size() << ")" << std::endl; + push_back(x); + return *this; + } + BufferWithRandomAccess& operator<<(int16_t x) { + if (debug) std::cerr << "writeInt16: " << x << " (at " << size() << ")" << std::endl; + push_back(x & 0xff); + push_back(x >> 8); + return *this; + } + BufferWithRandomAccess& operator<<(int32_t x) { + if (debug) std::cerr << "writeInt32: " << x << " (at " << size() << ")" << std::endl; + push_back(x & 0xff); x >>= 8; + push_back(x & 0xff); x >>= 8; + push_back(x & 0xff); x >>= 8; + push_back(x & 0xff); + return *this; + } + BufferWithRandomAccess& operator<<(int64_t x) { + if (debug) std::cerr << "writeInt64: " << x << " (at " << size() << ")" << std::endl; + push_back(x & 0xff); x >>= 8; + push_back(x & 0xff); x >>= 8; + push_back(x & 0xff); x >>= 8; + push_back(x & 0xff); x >>= 8; + push_back(x & 0xff); x >>= 8; + push_back(x & 0xff); x >>= 8; + push_back(x & 0xff); x >>= 8; + push_back(x & 0xff); + return *this; + } + BufferWithRandomAccess& operator<<(U32LEB x) { + size_t before = -1; + if (debug) { + before = size(); + std::cerr << "writeU32LEB: " << x.value << " (at " << before << ")" << std::endl; + } + x.write(this); + if (debug) { + for (size_t i = before; i < size(); i++) { + std::cerr << " " << (int)at(i) << " (at " << i << ")\n"; + } + } + return *this; + } + BufferWithRandomAccess& operator<<(U64LEB x) { + size_t before = -1; + if (debug) { + before = size(); + std::cerr << "writeU64LEB: " << x.value << " (at " << before << ")" << std::endl; + } + x.write(this); + if (debug) { + for (size_t i = before; i < size(); i++) { + std::cerr << " " << (int)at(i) << " (at " << i << ")\n"; + } + } + return *this; + } + BufferWithRandomAccess& operator<<(S32LEB x) { + size_t before = -1; + if (debug) { + before = size(); + std::cerr << "writeS32LEB: " << x.value << " (at " << before << ")" << std::endl; + } + x.write(this); + if (debug) { + for (size_t i = before; i < size(); i++) { + std::cerr << " " << (int)at(i) << " (at " << i << ")\n"; + } + } + return *this; + } + BufferWithRandomAccess& operator<<(S64LEB x) { + size_t before = -1; + if (debug) { + before = size(); + std::cerr << "writeS64LEB: " << x.value << " (at " << before << ")" << std::endl; + } + x.write(this); + if (debug) { + for (size_t i = before; i < size(); i++) { + std::cerr << " " << (int)at(i) << " (at " << i << ")\n"; + } + } + return *this; + } + + BufferWithRandomAccess& operator<<(uint8_t x) { + return *this << (int8_t)x; + } + BufferWithRandomAccess& operator<<(uint16_t x) { + return *this << (int16_t)x; + } + BufferWithRandomAccess& operator<<(uint32_t x) { + return *this << (int32_t)x; + } + BufferWithRandomAccess& operator<<(uint64_t x) { + return *this << (int64_t)x; + } + + BufferWithRandomAccess& operator<<(float x) { + if (debug) std::cerr << "writeFloat32: " << x << " (at " << size() << ")" << std::endl; + return *this << Literal(x).reinterpreti32(); + } + BufferWithRandomAccess& operator<<(double x) { + if (debug) std::cerr << "writeFloat64: " << x << " (at " << size() << ")" << std::endl; + return *this << Literal(x).reinterpreti64(); + } + + void writeAt(size_t i, uint16_t x) { + if (debug) std::cerr << "backpatchInt16: " << x << " (at " << i << ")" << std::endl; + (*this)[i] = x & 0xff; + (*this)[i+1] = x >> 8; + } + void writeAt(size_t i, uint32_t x) { + if (debug) std::cerr << "backpatchInt32: " << x << " (at " << i << ")" << std::endl; + (*this)[i] = x & 0xff; x >>= 8; + (*this)[i+1] = x & 0xff; x >>= 8; + (*this)[i+2] = x & 0xff; x >>= 8; + (*this)[i+3] = x & 0xff; + } + + // writes out an LEB to an arbitrary location. this writes the LEB as a full + // 5 bytes, the fixed amount that can easily be set aside ahead of time + void writeAtFullFixedSize(size_t i, U32LEB x) { + if (debug) std::cerr << "backpatchU32LEB: " << x.value << " (at " << i << ")" << std::endl; + x.writeAt(this, i, MaxLEB32Bytes); // fill all 5 bytes, we have to do this when backpatching + } + // writes out an LEB of normal size + // returns how many bytes were written + size_t writeAt(size_t i, U32LEB x) { + if (debug) std::cerr << "writeAtU32LEB: " << x.value << " (at " << i << ")" << std::endl; + return x.writeAt(this, i); + } + + template + void writeTo(T& o) { + for (auto c : *this) o << c; + } + + std::vector getAsChars() { + std::vector ret; + ret.resize(size()); + std::copy(begin(), end(), ret.begin()); + return ret; + } +}; + +namespace BinaryConsts { + +enum Meta { + Magic = 0x6d736100, + Version = 0x01 +}; + +enum Section { + User = 0, + Type = 1, + Import = 2, + Function = 3, + Table = 4, + Memory = 5, + Global = 6, + Export = 7, + Start = 8, + Element = 9, + Code = 10, + Data = 11 +}; + +enum EncodedType { + // value_type + i32 = -0x1, // 0x7f + i64 = -0x2, // 0x7e + f32 = -0x3, // 0x7d + f64 = -0x4, // 0x7c + // elem_type + AnyFunc = -0x10, // 0x70 + // func_type form + Func = -0x20, // 0x60 + // block_type + Empty = -0x40 // 0x40 +}; + +namespace UserSections { +extern const char* Name; +extern const char* SourceMapUrl; + +enum Subsection { + NameFunction = 1, + NameLocal = 2, +}; +} + +enum ASTNodes { + Unreachable = 0x00, + Nop = 0x01, + Block = 0x02, + Loop = 0x03, + If = 0x04, + Else = 0x05, + + End = 0x0b, + Br = 0x0c, + BrIf = 0x0d, + TableSwitch = 0x0e, // TODO: Rename to BrTable + Return = 0x0f, + + CallFunction = 0x10, + CallIndirect = 0x11, + + Drop = 0x1a, + Select = 0x1b, + + GetLocal = 0x20, + SetLocal = 0x21, + TeeLocal = 0x22, + GetGlobal = 0x23, + SetGlobal = 0x24, + + + I32LoadMem = 0x28, + I64LoadMem = 0x29, + F32LoadMem = 0x2a, + F64LoadMem = 0x2b, + + I32LoadMem8S = 0x2c, + I32LoadMem8U = 0x2d, + I32LoadMem16S = 0x2e, + I32LoadMem16U = 0x2f, + I64LoadMem8S = 0x30, + I64LoadMem8U = 0x31, + I64LoadMem16S = 0x32, + I64LoadMem16U = 0x33, + I64LoadMem32S = 0x34, + I64LoadMem32U = 0x35, + + I32StoreMem = 0x36, + I64StoreMem = 0x37, + F32StoreMem = 0x38, + F64StoreMem = 0x39, + + I32StoreMem8 = 0x3a, + I32StoreMem16 = 0x3b, + I64StoreMem8 = 0x3c, + I64StoreMem16 = 0x3d, + I64StoreMem32 = 0x3e, + + CurrentMemory = 0x3f, + GrowMemory = 0x40, + + I32Const = 0x41, + I64Const = 0x42, + F32Const = 0x43, + F64Const = 0x44, + + I32EqZ = 0x45, + I32Eq = 0x46, + I32Ne = 0x47, + I32LtS = 0x48, + I32LtU = 0x49, + I32GtS = 0x4a, + I32GtU = 0x4b, + I32LeS = 0x4c, + I32LeU = 0x4d, + I32GeS = 0x4e, + I32GeU = 0x4f, + I64EqZ = 0x50, + I64Eq = 0x51, + I64Ne = 0x52, + I64LtS = 0x53, + I64LtU = 0x54, + I64GtS = 0x55, + I64GtU = 0x56, + I64LeS = 0x57, + I64LeU = 0x58, + I64GeS = 0x59, + I64GeU = 0x5a, + F32Eq = 0x5b, + F32Ne = 0x5c, + F32Lt = 0x5d, + F32Gt = 0x5e, + F32Le = 0x5f, + F32Ge = 0x60, + F64Eq = 0x61, + F64Ne = 0x62, + F64Lt = 0x63, + F64Gt = 0x64, + F64Le = 0x65, + F64Ge = 0x66, + + I32Clz = 0x67, + I32Ctz = 0x68, + I32Popcnt = 0x69, + I32Add = 0x6a, + I32Sub = 0x6b, + I32Mul = 0x6c, + I32DivS = 0x6d, + I32DivU = 0x6e, + I32RemS = 0x6f, + I32RemU = 0x70, + I32And = 0x71, + I32Or = 0x72, + I32Xor = 0x73, + I32Shl = 0x74, + I32ShrS = 0x75, + I32ShrU = 0x76, + I32RotL = 0x77, + I32RotR = 0x78, + + I64Clz = 0x79, + I64Ctz = 0x7a, + I64Popcnt = 0x7b, + I64Add = 0x7c, + I64Sub = 0x7d, + I64Mul = 0x7e, + I64DivS = 0x7f, + I64DivU = 0x80, + I64RemS = 0x81, + I64RemU = 0x82, + I64And = 0x83, + I64Or = 0x84, + I64Xor = 0x85, + I64Shl = 0x86, + I64ShrS = 0x87, + I64ShrU = 0x88, + I64RotL = 0x89, + I64RotR = 0x8a, + + F32Abs = 0x8b, + F32Neg = 0x8c, + F32Ceil = 0x8d, + F32Floor = 0x8e, + F32Trunc = 0x8f, + F32NearestInt = 0x90, + F32Sqrt = 0x91, + F32Add = 0x92, + F32Sub = 0x93, + F32Mul = 0x94, + F32Div = 0x95, + F32Min = 0x96, + F32Max = 0x97, + F32CopySign = 0x98, + + F64Abs = 0x99, + F64Neg = 0x9a, + F64Ceil = 0x9b, + F64Floor = 0x9c, + F64Trunc = 0x9d, + F64NearestInt = 0x9e, + F64Sqrt = 0x9f, + F64Add = 0xa0, + F64Sub = 0xa1, + F64Mul = 0xa2, + F64Div = 0xa3, + F64Min = 0xa4, + F64Max = 0xa5, + F64CopySign = 0xa6, + + I32ConvertI64 = 0xa7, // TODO: rename to I32WrapI64 + I32STruncF32 = 0xa8, + I32UTruncF32 = 0xa9, + I32STruncF64 = 0xaa, + I32UTruncF64 = 0xab, + I64STruncI32 = 0xac, // TODO: rename to I64SExtendI32 + I64UTruncI32 = 0xad, // TODO: likewise + I64STruncF32 = 0xae, + I64UTruncF32 = 0xaf, + I64STruncF64 = 0xb0, + I64UTruncF64 = 0xb1, + F32SConvertI32 = 0xb2, + F32UConvertI32 = 0xb3, + F32SConvertI64 = 0xb4, + F32UConvertI64 = 0xb5, + F32ConvertF64 = 0xb6, // TODO: rename to F32DemoteI64 + F64SConvertI32 = 0xb7, + F64UConvertI32 = 0xb8, + F64SConvertI64 = 0xb9, + F64UConvertI64 = 0xba, + F64ConvertF32 = 0xbb, // TODO: rename to F64PromoteF32 + + I32ReinterpretF32 = 0xbc, + I64ReinterpretF64 = 0xbd, + F32ReinterpretI32 = 0xbe, + F64ReinterpretI64 = 0xbf, + + I32ExtendS8 = 0xc0, + I32ExtendS16 = 0xc1, + I64ExtendS8 = 0xc2, + I64ExtendS16 = 0xc3, + I64ExtendS32 = 0xc4, + + AtomicPrefix = 0xfe +}; + +enum AtomicOpcodes { + AtomicWake = 0x00, + I32AtomicWait = 0x01, + I64AtomicWait = 0x02, + + I32AtomicLoad = 0x10, + I64AtomicLoad = 0x11, + I32AtomicLoad8U = 0x12, + I32AtomicLoad16U = 0x13, + I64AtomicLoad8U = 0x14, + I64AtomicLoad16U = 0x15, + I64AtomicLoad32U = 0x16, + I32AtomicStore = 0x17, + I64AtomicStore = 0x18, + I32AtomicStore8 = 0x19, + I32AtomicStore16 = 0x1a, + I64AtomicStore8 = 0x1b, + I64AtomicStore16 = 0x1c, + I64AtomicStore32 = 0x1d, + + AtomicRMWOps_Begin = 0x1e, + I32AtomicRMWAdd = 0x1e, + I64AtomicRMWAdd = 0x1f, + I32AtomicRMWAdd8U = 0x20, + I32AtomicRMWAdd16U = 0x21, + I64AtomicRMWAdd8U = 0x22, + I64AtomicRMWAdd16U = 0x23, + I64AtomicRMWAdd32U = 0x24, + I32AtomicRMWSub = 0x25, + I64AtomicRMWSub = 0x26, + I32AtomicRMWSub8U = 0x27, + I32AtomicRMWSub16U = 0x28, + I64AtomicRMWSub8U = 0x29, + I64AtomicRMWSub16U = 0x2a, + I64AtomicRMWSub32U = 0x2b, + I32AtomicRMWAnd = 0x2c, + I64AtomicRMWAnd = 0x2d, + I32AtomicRMWAnd8U = 0x2e, + I32AtomicRMWAnd16U = 0x2f, + I64AtomicRMWAnd8U = 0x30, + I64AtomicRMWAnd16U = 0x31, + I64AtomicRMWAnd32U = 0x32, + I32AtomicRMWOr = 0x33, + I64AtomicRMWOr = 0x34, + I32AtomicRMWOr8U = 0x35, + I32AtomicRMWOr16U = 0x36, + I64AtomicRMWOr8U = 0x37, + I64AtomicRMWOr16U = 0x38, + I64AtomicRMWOr32U = 0x39, + I32AtomicRMWXor = 0x3a, + I64AtomicRMWXor = 0x3b, + I32AtomicRMWXor8U = 0x3c, + I32AtomicRMWXor16U = 0x3d, + I64AtomicRMWXor8U = 0x3e, + I64AtomicRMWXor16U = 0x3f, + I64AtomicRMWXor32U = 0x40, + I32AtomicRMWXchg = 0x41, + I64AtomicRMWXchg = 0x42, + I32AtomicRMWXchg8U = 0x43, + I32AtomicRMWXchg16U = 0x44, + I64AtomicRMWXchg8U = 0x45, + I64AtomicRMWXchg16U = 0x46, + I64AtomicRMWXchg32U = 0x47, + AtomicRMWOps_End = 0x47, + + AtomicCmpxchgOps_Begin = 0x48, + I32AtomicCmpxchg = 0x48, + I64AtomicCmpxchg = 0x49, + I32AtomicCmpxchg8U = 0x4a, + I32AtomicCmpxchg16U = 0x4b, + I64AtomicCmpxchg8U = 0x4c, + I64AtomicCmpxchg16U = 0x4d, + I64AtomicCmpxchg32U = 0x4e, + AtomicCmpxchgOps_End = 0x4e +}; + + +enum MemoryAccess { + Offset = 0x10, // bit 4 + Alignment = 0x80, // bit 7 + NaturalAlignment = 0 +}; + +enum MemoryFlags { + HasMaximum = 1 << 0, + IsShared = 1 << 1 +}; + +} // namespace BinaryConsts + + +inline S32LEB binaryWasmType(WasmType type) { + int ret; + switch (type) { + // None only used for block signatures. TODO: Separate out? + case none: ret = BinaryConsts::EncodedType::Empty; break; + case i32: ret = BinaryConsts::EncodedType::i32; break; + case i64: ret = BinaryConsts::EncodedType::i64; break; + case f32: ret = BinaryConsts::EncodedType::f32; break; + case f64: ret = BinaryConsts::EncodedType::f64; break; + default: abort(); + } + return S32LEB(ret); +} + +class WasmBinaryWriter : public Visitor { + Module* wasm; + BufferWithRandomAccess& o; + Function* currFunction = nullptr; + bool debug; + bool debugInfo = true; + std::ostream* sourceMap = nullptr; + std::string sourceMapUrl; + std::string symbolMap; + + MixedArena allocator; + + void prepare(); +public: + WasmBinaryWriter(Module* input, BufferWithRandomAccess& o, bool debug) : wasm(input), o(o), debug(debug) { + prepare(); + } + + void setNamesSection(bool set) { debugInfo = set; } + void setSourceMap(std::ostream* set, std::string url) { + sourceMap = set; + sourceMapUrl = url; + } + void setSymbolMap(std::string set) { symbolMap = set; } + + void write(); + void writeHeader(); + int32_t writeU32LEBPlaceholder(); + void writeResizableLimits(Address initial, Address maximum, bool hasMaximum, bool shared); + template + int32_t startSection(T code); + void finishSection(int32_t start); + int32_t startSubsection(BinaryConsts::UserSections::Subsection code); + void finishSubsection(int32_t start); + void writeStart(); + void writeMemory(); + void writeTypes(); + int32_t getFunctionTypeIndex(Name type); + void writeImports(); + + std::map mappedLocals; // local index => index in compact form of [all int32s][all int64s]etc + std::map numLocalsByType; // type => number of locals of that type in the compact form + + void mapLocals(Function* function); + void writeFunctionSignatures(); + void writeExpression(Expression* curr); + void writeFunctions(); + void writeGlobals(); + void writeExports(); + void writeDataSegments(); + + std::unordered_map mappedFunctions; // name of the Function => index. first imports, then internals + std::unordered_map mappedGlobals; // name of the Global => index. first imported globals, then internal globals + uint32_t getFunctionIndex(Name name); + uint32_t getGlobalIndex(Name name); + + void writeFunctionTableDeclaration(); + void writeTableElements(); + void writeNames(); + void writeSourceMapUrl(); + void writeSymbolMap(); + + void writeSourceMapProlog(); + void writeSourceMapEpilog(); + void writeDebugLocation(size_t offset, const Function::DebugLocation& loc); + + // helpers + void writeInlineString(const char* name); + void writeInlineBuffer(const char* data, size_t size); + + struct Buffer { + const char* data; + size_t size; + size_t pointerLocation; + Buffer(const char* data, size_t size, size_t pointerLocation) : data(data), size(size), pointerLocation(pointerLocation) {} + }; + + std::vector buffersToWrite; + + void emitBuffer(const char* data, size_t size); + void emitString(const char *str); + void finishUp(); + + // AST writing via visitors + int depth = 0; // only for debugging + + void recurse(Expression*& curr); + std::vector breakStack; + Function::DebugLocation lastDebugLocation; + size_t lastBytecodeOffset; + + void visit(Expression* curr) { + if (sourceMap && currFunction) { + // Dump the sourceMap debug info + auto& debugLocations = currFunction->debugLocations; + auto iter = debugLocations.find(curr); + if (iter != debugLocations.end() && iter->second != lastDebugLocation) { + writeDebugLocation(o.size(), iter->second); + } + } + Visitor::visit(curr); + } + + void visitBlock(Block *curr); + // emits a node, but if it is a block with no name, emit a list of its contents + void recursePossibleBlockContents(Expression* curr); + void visitIf(If *curr); + void visitLoop(Loop *curr); + int32_t getBreakIndex(Name name); + void visitBreak(Break *curr); + void visitSwitch(Switch *curr); + void visitCall(Call *curr); + void visitCallImport(CallImport *curr); + void visitCallIndirect(CallIndirect *curr); + void visitGetLocal(GetLocal *curr); + void visitSetLocal(SetLocal *curr); + void visitGetGlobal(GetGlobal *curr); + void visitSetGlobal(SetGlobal *curr); + void emitMemoryAccess(size_t alignment, size_t bytes, uint32_t offset); + void visitLoad(Load *curr); + void visitStore(Store *curr); + void visitAtomicRMW(AtomicRMW *curr); + void visitAtomicCmpxchg(AtomicCmpxchg *curr); + void visitAtomicWait(AtomicWait *curr); + void visitAtomicWake(AtomicWake *curr); + void visitConst(Const *curr); + void visitUnary(Unary *curr); + void visitBinary(Binary *curr); + void visitSelect(Select *curr); + void visitReturn(Return *curr); + void visitHost(Host *curr); + void visitNop(Nop *curr); + void visitUnreachable(Unreachable *curr); + void visitDrop(Drop *curr); +}; + +class WasmBinaryBuilder { + Module& wasm; + MixedArena& allocator; + std::vector& input; + bool debug; + std::istream* sourceMap; + std::pair nextDebugLocation; + + size_t pos = 0; + Index startIndex = -1; + bool useDebugLocation; + + std::set seenSections; + +public: + WasmBinaryBuilder(Module& wasm, std::vector& input, bool debug) : wasm(wasm), allocator(wasm.allocator), input(input), debug(debug), sourceMap(nullptr), nextDebugLocation(0, { 0, 0, 0 }), useDebugLocation(false) {} + + void read(); + void readUserSection(size_t payloadLen); + bool more() { return pos < input.size();} + + uint8_t getInt8(); + uint16_t getInt16(); + uint32_t getInt32(); + uint64_t getInt64(); + // it is unsafe to return a float directly, due to ABI issues with the signalling bit + Literal getFloat32Literal(); + Literal getFloat64Literal(); + uint32_t getU32LEB(); + uint64_t getU64LEB(); + int32_t getS32LEB(); + int64_t getS64LEB(); + WasmType getWasmType(); + Name getString(); + Name getInlineString(); + void verifyInt8(int8_t x); + void verifyInt16(int16_t x); + void verifyInt32(int32_t x); + void verifyInt64(int64_t x); + void ungetInt8(); + void readHeader(); + void readStart(); + void readMemory(); + void readSignatures(); + + std::vector functionImportIndexes; // index in function index space => name of function import + + // gets a name in the combined function import+defined function space + Name getFunctionIndexName(Index i); + void getResizableLimits(Address& initial, Address& max, bool& shared, Address defaultIfNoMax); + void readImports(); + + std::vector functionTypes; // types of defined functions + + void readFunctionSignatures(); + size_t nextLabel; + + Name getNextLabel() { + return cashew::IString(("label$" + std::to_string(nextLabel++)).c_str(), false); + } + + // We read functions before we know their names, so we need to backpatch the names later + std::vector functions; // we store functions here before wasm.addFunction after we know their names + std::map> functionCalls; // at index i we have all calls to the defined function i + Function* currFunction = nullptr; + Index endOfFunction = -1; // before we see a function (like global init expressions), there is no end of function to check + + void readFunctions(); + + std::map exportIndexes; + std::vector exportOrder; + void readExports(); + + Expression* readExpression(); + void readGlobals(); + + struct BreakTarget { + Name name; + int arity; + BreakTarget(Name name, int arity) : name(name), arity(arity) {} + }; + std::vector breakStack; + std::unordered_set breakTargetNames; + bool breaksToReturn; // whether a break is done to the function scope, which is in effect a return + + std::vector expressionStack; + + bool definitelyUnreachable; // set when we know code is definitely unreachable. this helps parse + // stacky wasm code, which can be unsuitable for our IR when unreachable + + BinaryConsts::ASTNodes lastSeparator = BinaryConsts::End; + + // process a block-type scope, until an end or else marker, or the end of the function + void processExpressions(); + void skipUnreachableCode(); + + Expression* popExpression(); + Expression* popNonVoidExpression(); + + std::map mappedGlobals; // index of the Global => name. first imported globals, then internal globals + + Name getGlobalName(Index index); + void processFunctions(); + void readDataSegments(); + + std::map> functionTable; + + void readFunctionTableDeclaration(); + void readTableElements(); + void readNames(size_t); + + // Debug information reading helpers + void setDebugLocations(std::istream* sourceMap_) { + sourceMap = sourceMap_; + } + Function::DebugLocation debugLocation; + std::unordered_map debugInfoFileIndices; + void readNextDebugLocation(); + void readSourceMapHeader(); + + // AST reading + int depth = 0; // only for debugging + + BinaryConsts::ASTNodes readExpression(Expression*& curr); + void pushBlockElements(Block* curr, size_t start, size_t end); + void visitBlock(Block *curr); + + // Gets a block of expressions. If it's just one, return that singleton. + Expression* getBlockOrSingleton(WasmType type); + + void visitIf(If *curr); + void visitLoop(Loop *curr); + BreakTarget getBreakTarget(int32_t offset); + void visitBreak(Break *curr, uint8_t code); + void visitSwitch(Switch *curr); + + template + void fillCall(T* call, FunctionType* type) { + assert(type); + auto num = type->params.size(); + call->operands.resize(num); + for (size_t i = 0; i < num; i++) { + call->operands[num - i - 1] = popNonVoidExpression(); + } + call->type = type->result; + } + + Expression* visitCall(); + void visitCallIndirect(CallIndirect *curr); + void visitGetLocal(GetLocal *curr); + void visitSetLocal(SetLocal *curr, uint8_t code); + void visitGetGlobal(GetGlobal *curr); + void visitSetGlobal(SetGlobal *curr); + void readMemoryAccess(Address& alignment, size_t bytes, Address& offset); + bool maybeVisitLoad(Expression*& out, uint8_t code, bool isAtomic); + bool maybeVisitStore(Expression*& out, uint8_t code, bool isAtomic); + bool maybeVisitAtomicRMW(Expression*& out, uint8_t code); + bool maybeVisitAtomicCmpxchg(Expression*& out, uint8_t code); + bool maybeVisitAtomicWait(Expression*& out, uint8_t code); + bool maybeVisitAtomicWake(Expression*& out, uint8_t code); + bool maybeVisitConst(Expression*& out, uint8_t code); + bool maybeVisitUnary(Expression*& out, uint8_t code); + bool maybeVisitBinary(Expression*& out, uint8_t code); + void visitSelect(Select *curr); + void visitReturn(Return *curr); + bool maybeVisitHost(Expression*& out, uint8_t code); + void visitNop(Nop *curr); + void visitUnreachable(Unreachable *curr); + void visitDrop(Drop *curr); +}; + +} // namespace wasm + +#endif // wasm_wasm_binary_h diff --git a/src/binaryen/src/wasm-builder.h b/src/binaryen/src/wasm-builder.h new file mode 100644 index 0000000000..8ab4cfec96 --- /dev/null +++ b/src/binaryen/src/wasm-builder.h @@ -0,0 +1,497 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef wasm_wasm_builder_h +#define wasm_wasm_builder_h + +#include "wasm.h" +#include "ir/manipulation.h" + +namespace wasm { + +// Useful data structures + +struct NameType { + Name name; + WasmType type; + NameType() : name(nullptr), type(none) {} + NameType(Name name, WasmType type) : name(name), type(type) {} +}; + +// General AST node builder + +class Builder { + MixedArena& allocator; + +public: + Builder(MixedArena& allocator) : allocator(allocator) {} + Builder(Module& wasm) : allocator(wasm.allocator) {} + + // make* functions, create nodes + + Function* makeFunction(Name name, + std::vector&& params, + WasmType resultType, + std::vector&& vars, + Expression* body = nullptr) { + auto* func = new Function; + func->name = name; + func->result = resultType; + func->body = body; + + for (auto& param : params) { + func->params.push_back(param.type); + Index index = func->localNames.size(); + func->localIndices[param.name] = index; + func->localNames[index] = param.name; + } + for (auto& var : vars) { + func->vars.push_back(var.type); + Index index = func->localNames.size(); + func->localIndices[var.name] = index; + func->localNames[index] = var.name; + } + + return func; + } + + Nop* makeNop() { + return allocator.alloc(); + } + Block* makeBlock(Expression* first = nullptr) { + auto* ret = allocator.alloc(); + if (first) { + ret->list.push_back(first); + ret->finalize(); + } + return ret; + } + Block* makeBlock(Name name, Expression* first = nullptr) { + auto* ret = makeBlock(first); + ret->name = name; + return ret; + } + Block* makeBlock(const std::vector& items) { + auto* ret = allocator.alloc(); + ret->list.set(items); + ret->finalize(); + return ret; + } + Block* makeBlock(const ExpressionList& items) { + auto* ret = allocator.alloc(); + ret->list.set(items); + ret->finalize(); + return ret; + } + Block* makeBlock(const ExpressionList& items, WasmType type) { + auto* ret = allocator.alloc(); + ret->list.set(items); + ret->finalize(type); + return ret; + } + Block* makeBlock(Name name, const ExpressionList& items) { + auto* ret = allocator.alloc(); + ret->name = name; + ret->list.set(items); + ret->finalize(); + return ret; + } + Block* makeBlock(Name name, const ExpressionList& items, WasmType type) { + auto* ret = allocator.alloc(); + ret->name = name; + ret->list.set(items); + ret->finalize(type); + return ret; + } + If* makeIf(Expression* condition, Expression* ifTrue, Expression* ifFalse = nullptr) { + auto* ret = allocator.alloc(); + ret->condition = condition; ret->ifTrue = ifTrue; ret->ifFalse = ifFalse; + ret->finalize(); + return ret; + } + If* makeIf(Expression* condition, Expression* ifTrue, Expression* ifFalse, WasmType type) { + auto* ret = allocator.alloc(); + ret->condition = condition; ret->ifTrue = ifTrue; ret->ifFalse = ifFalse; + ret->finalize(type); + return ret; + } + Loop* makeLoop(Name name, Expression* body) { + auto* ret = allocator.alloc(); + ret->name = name; ret->body = body; + ret->finalize(); + return ret; + } + Break* makeBreak(Name name, Expression* value = nullptr, Expression* condition = nullptr) { + auto* ret = allocator.alloc(); + ret->name = name; ret->value = value; ret->condition = condition; + ret->finalize(); + return ret; + } + template + Switch* makeSwitch(T& list, Name default_, Expression* condition, Expression* value = nullptr) { + auto* ret = allocator.alloc(); + ret->targets.set(list); + ret->default_ = default_; ret->value = value; ret->condition = condition; + return ret; + } + Call* makeCall(Name target, const std::vector& args, WasmType type) { + auto* call = allocator.alloc(); + call->type = type; // not all functions may exist yet, so type must be provided + call->target = target; + call->operands.set(args); + return call; + } + CallImport* makeCallImport(Name target, const std::vector& args, WasmType type) { + auto* call = allocator.alloc(); + call->type = type; // similar to makeCall, for consistency + call->target = target; + call->operands.set(args); + return call; + } + template + Call* makeCall(Name target, const T& args, WasmType type) { + auto* call = allocator.alloc(); + call->type = type; // not all functions may exist yet, so type must be provided + call->target = target; + call->operands.set(args); + return call; + } + template + CallImport* makeCallImport(Name target, const T& args, WasmType type) { + auto* call = allocator.alloc(); + call->type = type; // similar to makeCall, for consistency + call->target = target; + call->operands.set(args); + return call; + } + CallIndirect* makeCallIndirect(FunctionType* type, Expression* target, const std::vector& args) { + auto* call = allocator.alloc(); + call->fullType = type->name; + call->type = type->result; + call->target = target; + call->operands.set(args); + return call; + } + CallIndirect* makeCallIndirect(Name fullType, Expression* target, const std::vector& args, WasmType type) { + auto* call = allocator.alloc(); + call->fullType = fullType; + call->type = type; + call->target = target; + call->operands.set(args); + return call; + } + // FunctionType + GetLocal* makeGetLocal(Index index, WasmType type) { + auto* ret = allocator.alloc(); + ret->index = index; + ret->type = type; + return ret; + } + SetLocal* makeSetLocal(Index index, Expression* value) { + auto* ret = allocator.alloc(); + ret->index = index; + ret->value = value; + ret->finalize(); + return ret; + } + SetLocal* makeTeeLocal(Index index, Expression* value) { + auto* ret = allocator.alloc(); + ret->index = index; + ret->value = value; + ret->setTee(true); + return ret; + } + GetGlobal* makeGetGlobal(Name name, WasmType type) { + auto* ret = allocator.alloc(); + ret->name = name; + ret->type = type; + return ret; + } + SetGlobal* makeSetGlobal(Name name, Expression* value) { + auto* ret = allocator.alloc(); + ret->name = name; + ret->value = value; + ret->finalize(); + return ret; + } + Load* makeLoad(unsigned bytes, bool signed_, uint32_t offset, unsigned align, Expression *ptr, WasmType type) { + auto* ret = allocator.alloc(); + ret->isAtomic = false; + ret->bytes = bytes; ret->signed_ = signed_; ret->offset = offset; ret->align = align; ret->ptr = ptr; + ret->type = type; + return ret; + } + Load* makeAtomicLoad(unsigned bytes, uint32_t offset, Expression* ptr, WasmType type) { + Load* load = makeLoad(bytes, false, offset, bytes, ptr, type); + load->isAtomic = true; + return load; + } + AtomicWait* makeAtomicWait(Expression* ptr, Expression* expected, Expression* timeout, WasmType expectedType) { + auto* wait = allocator.alloc(); + wait->ptr = ptr; + wait->expected = expected; + wait->timeout = timeout; + wait->expectedType = expectedType; + wait->finalize(); + return wait; + } + AtomicWake* makeAtomicWake(Expression* ptr, Expression* wakeCount) { + auto* wake = allocator.alloc(); + wake->ptr = ptr; + wake->wakeCount = wakeCount; + wake->finalize(); + return wake; + } + Store* makeStore(unsigned bytes, uint32_t offset, unsigned align, Expression *ptr, Expression *value, WasmType type) { + auto* ret = allocator.alloc(); + ret->isAtomic = false; + ret->bytes = bytes; ret->offset = offset; ret->align = align; ret->ptr = ptr; ret->value = value; ret->valueType = type; + ret->finalize(); + assert(isConcreteWasmType(ret->value->type) ? ret->value->type == type : true); + return ret; + } + Store* makeAtomicStore(unsigned bytes, uint32_t offset, Expression* ptr, Expression* value, WasmType type) { + Store* store = makeStore(bytes, offset, bytes, ptr, value, type); + store->isAtomic = true; + return store; + } + AtomicRMW* makeAtomicRMW(AtomicRMWOp op, unsigned bytes, uint32_t offset, + Expression* ptr, Expression* value, WasmType type) { + auto* ret = allocator.alloc(); + ret->op = op; + ret->bytes = bytes; + ret->offset = offset; + ret->ptr = ptr; + ret->value = value; + ret->type = type; + ret->finalize(); + return ret; + } + AtomicCmpxchg* makeAtomicCmpxchg(unsigned bytes, uint32_t offset, + Expression* ptr, Expression* expected, + Expression* replacement, WasmType type) { + auto* ret = allocator.alloc(); + ret->bytes = bytes; + ret->offset = offset; + ret->ptr = ptr; + ret->expected = expected; + ret->replacement = replacement; + ret->type = type; + ret->finalize(); + return ret; + } + Const* makeConst(Literal value) { + assert(isConcreteWasmType(value.type)); + auto* ret = allocator.alloc(); + ret->value = value; + ret->type = value.type; + return ret; + } + Unary* makeUnary(UnaryOp op, Expression *value) { + auto* ret = allocator.alloc(); + ret->op = op; ret->value = value; + ret->finalize(); + return ret; + } + Binary* makeBinary(BinaryOp op, Expression *left, Expression *right) { + auto* ret = allocator.alloc(); + ret->op = op; ret->left = left; ret->right = right; + ret->finalize(); + return ret; + } + Select* makeSelect(Expression* condition, Expression *ifTrue, Expression *ifFalse) { + auto* ret = allocator.alloc()); } + static void doVisitDrop(SubType* self, Expression** currp) { self->visitDrop((*currp)->cast()); } + static void doVisitReturn(SubType* self, Expression** currp) { self->visitReturn((*currp)->cast()); } + static void doVisitHost(SubType* self, Expression** currp) { self->visitHost((*currp)->cast()); } + static void doVisitNop(SubType* self, Expression** currp) { self->visitNop((*currp)->cast()); } + static void doVisitUnreachable(SubType* self, Expression** currp) { self->visitUnreachable((*currp)->cast()); } + + void setModule(Module* module) { + currModule = module; + } + + void setFunction(Function* func) { + currFunction = func; + } + +private: + Expression** replacep = nullptr; // the address of the current node, used to replace it + std::vector stack; // stack of tasks + Function* currFunction = nullptr; // current function being processed + Module* currModule = nullptr; // current module being processed +}; + +// Walks in post-order, i.e., children first. When there isn't an obvious +// order to operands, we follow them in order of execution. + +template> +struct PostWalker : public Walker { + + static void scan(SubType* self, Expression** currp) { + + Expression* curr = *currp; + switch (curr->_id) { + case Expression::Id::InvalidId: abort(); + case Expression::Id::BlockId: { + self->pushTask(SubType::doVisitBlock, currp); + auto& list = curr->cast()->list; + for (int i = int(list.size()) - 1; i >= 0; i--) { + self->pushTask(SubType::scan, &list[i]); + } + break; + } + case Expression::Id::IfId: { + self->pushTask(SubType::doVisitIf, currp); + self->maybePushTask(SubType::scan, &curr->cast()->ifFalse); + self->pushTask(SubType::scan, &curr->cast()->ifTrue); + self->pushTask(SubType::scan, &curr->cast()->condition); + break; + } + case Expression::Id::LoopId: { + self->pushTask(SubType::doVisitLoop, currp); + self->pushTask(SubType::scan, &curr->cast()->body); + break; + } + case Expression::Id::BreakId: { + self->pushTask(SubType::doVisitBreak, currp); + self->maybePushTask(SubType::scan, &curr->cast()->condition); + self->maybePushTask(SubType::scan, &curr->cast()->value); + break; + } + case Expression::Id::SwitchId: { + self->pushTask(SubType::doVisitSwitch, currp); + self->pushTask(SubType::scan, &curr->cast()->condition); + self->maybePushTask(SubType::scan, &curr->cast()->value); + break; + } + case Expression::Id::CallId: { + self->pushTask(SubType::doVisitCall, currp); + auto& list = curr->cast()->operands; + for (int i = int(list.size()) - 1; i >= 0; i--) { + self->pushTask(SubType::scan, &list[i]); + } + break; + } + case Expression::Id::CallImportId: { + self->pushTask(SubType::doVisitCallImport, currp); + auto& list = curr->cast()->operands; + for (int i = int(list.size()) - 1; i >= 0; i--) { + self->pushTask(SubType::scan, &list[i]); + } + break; + } + case Expression::Id::CallIndirectId: { + self->pushTask(SubType::doVisitCallIndirect, currp); + auto& list = curr->cast()->operands; + self->pushTask(SubType::scan, &curr->cast()->target); + for (int i = int(list.size()) - 1; i >= 0; i--) { + self->pushTask(SubType::scan, &list[i]); + } + break; + } + case Expression::Id::GetLocalId: { + self->pushTask(SubType::doVisitGetLocal, currp); // TODO: optimize leaves with a direct call? + break; + } + case Expression::Id::SetLocalId: { + self->pushTask(SubType::doVisitSetLocal, currp); + self->pushTask(SubType::scan, &curr->cast()->value); + break; + } + case Expression::Id::GetGlobalId: { + self->pushTask(SubType::doVisitGetGlobal, currp); + break; + } + case Expression::Id::SetGlobalId: { + self->pushTask(SubType::doVisitSetGlobal, currp); + self->pushTask(SubType::scan, &curr->cast()->value); + break; + } + case Expression::Id::LoadId: { + self->pushTask(SubType::doVisitLoad, currp); + self->pushTask(SubType::scan, &curr->cast()->ptr); + break; + } + case Expression::Id::StoreId: { + self->pushTask(SubType::doVisitStore, currp); + self->pushTask(SubType::scan, &curr->cast()->value); + self->pushTask(SubType::scan, &curr->cast()->ptr); + break; + } + case Expression::Id::AtomicRMWId: { + self->pushTask(SubType::doVisitAtomicRMW, currp); + self->pushTask(SubType::scan, &curr->cast()->value); + self->pushTask(SubType::scan, &curr->cast()->ptr); + break; + } + case Expression::Id::AtomicCmpxchgId: { + self->pushTask(SubType::doVisitAtomicCmpxchg, currp); + self->pushTask(SubType::scan, &curr->cast()->replacement); + self->pushTask(SubType::scan, &curr->cast()->expected); + self->pushTask(SubType::scan, &curr->cast()->ptr); + break; + } + case Expression::Id::AtomicWaitId: { + self->pushTask(SubType::doVisitAtomicWait, currp); + self->pushTask(SubType::scan, &curr->cast()->timeout); + self->pushTask(SubType::scan, &curr->cast()->expected); + self->pushTask(SubType::scan, &curr->cast()->ptr); + break; + } + case Expression::Id::AtomicWakeId: { + self->pushTask(SubType::doVisitAtomicWake, currp); + self->pushTask(SubType::scan, &curr->cast()->wakeCount); + self->pushTask(SubType::scan, &curr->cast()->ptr); + break; + } + case Expression::Id::ConstId: { + self->pushTask(SubType::doVisitConst, currp); + break; + } + case Expression::Id::UnaryId: { + self->pushTask(SubType::doVisitUnary, currp); + self->pushTask(SubType::scan, &curr->cast()->value); + break; + } + case Expression::Id::BinaryId: { + self->pushTask(SubType::doVisitBinary, currp); + self->pushTask(SubType::scan, &curr->cast()->right); + self->pushTask(SubType::scan, &curr->cast()->left); + break; + } + case Expression::Id::SelectId: { + self->pushTask(SubType::doVisitSelect, currp); + self->pushTask(SubType::scan, &curr->cast()->ifFalse); + self->pushTask(SubType::scan, &curr->cast())->cast(); + ret->ifTrue = parseExpression(s[1]); + ret->ifFalse = parseExpression(s[2]); + ret->condition = parseExpression(s[3]); + ret->finalize(); + return ret; +} + +Expression* SExpressionWasmBuilder::makeDrop(Element& s) { + auto ret = allocator.alloc(); + ret->value = parseExpression(s[1]); + ret->finalize(); + return ret; +} + +Expression* SExpressionWasmBuilder::makeHost(Element& s, HostOp op) { + auto ret = allocator.alloc(); + ret->op = op; + if (op == HostOp::HasFeature) { + ret->nameOperand = s[1]->str(); + } else { + parseCallOperands(s, 1, s.size(), ret); + } + if (ret->op == HostOp::GrowMemory) { + if (ret->operands.size() != 1) { + throw ParseException("grow_memory needs one operand"); + } + } else { + if (ret->operands.size() != 0) { + throw ParseException("host needs zero operands"); + } + } + ret->finalize(); + return ret; +} + +Index SExpressionWasmBuilder::getLocalIndex(Element& s) { + if (!currFunction) throw ParseException("local access in non-function scope", s.line, s.col); + if (s.dollared()) { + auto ret = s.str(); + if (currFunction->localIndices.count(ret) == 0) throw ParseException("bad local name", s.line, s.col); + return currFunction->getLocalIndex(ret); + } + // this is a numeric index + Index ret = atoi(s.c_str()); + if (ret >= currFunction->getNumLocals()) throw ParseException("bad local index", s.line, s.col); + return ret; +} + +Expression* SExpressionWasmBuilder::makeGetLocal(Element& s) { + auto ret = allocator.alloc(); + ret->index = getLocalIndex(*s[1]); + ret->type = currFunction->getLocalType(ret->index); + return ret; +} + +Expression* SExpressionWasmBuilder::makeTeeLocal(Element& s) { + auto ret = allocator.alloc(); + ret->index = getLocalIndex(*s[1]); + ret->value = parseExpression(s[2]); + ret->setTee(true); + ret->finalize(); + return ret; +} + +Expression* SExpressionWasmBuilder::makeSetLocal(Element& s) { + auto ret = allocator.alloc(); + ret->index = getLocalIndex(*s[1]); + ret->value = parseExpression(s[2]); + ret->setTee(false); + ret->finalize(); + return ret; +} + +Expression* SExpressionWasmBuilder::makeGetGlobal(Element& s) { + auto ret = allocator.alloc(); + ret->name = getGlobalName(*s[1]); + auto* global = wasm.getGlobalOrNull(ret->name); + if (global) { + ret->type = global->type; + return ret; + } + auto* import = wasm.getImportOrNull(ret->name); + if (import && import->kind == ExternalKind::Global) { + ret->type = import->globalType; + return ret; + } + throw ParseException("bad get_global name", s.line, s.col); +} + +Expression* SExpressionWasmBuilder::makeSetGlobal(Element& s) { + auto ret = allocator.alloc(); + ret->name = getGlobalName(*s[1]); + if (wasm.getGlobalOrNull(ret->name) && !wasm.getGlobalOrNull(ret->name)->mutable_) throw ParseException("set_global of immutable", s.line, s.col); + ret->value = parseExpression(s[2]); + ret->finalize(); + return ret; +} + + +Expression* SExpressionWasmBuilder::makeBlock(Element& s) { + // special-case Block, because Block nesting (in their first element) can be incredibly deep + auto curr = allocator.alloc(); + auto* sp = &s; + std::vector> stack; + while (1) { + stack.emplace_back(sp, curr); + auto& s = *sp; + Index i = 1; + Name sName; + if (i < s.size() && s[i]->isStr()) { + // could be a name or a type + if (s[i]->dollared() || stringToWasmType(s[i]->str(), true /* allowError */) == none) { + sName = s[i++]->str(); + } else { + sName = "block"; + } + } else { + sName = "block"; + } + curr->name = nameMapper.pushLabelName(sName); + // block signature + curr->type = parseOptionalResultType(s, i); + if (i >= s.size()) break; // empty block + auto& first = *s[i]; + if (first[0]->str() == BLOCK) { + // recurse + curr = allocator.alloc(); + sp = &first; + continue; + } + break; + } + // we now have a stack of Blocks, with their labels, but no contents yet + for (int t = int(stack.size()) - 1; t >= 0; t--) { + auto* sp = stack[t].first; + auto* curr = stack[t].second; + auto& s = *sp; + size_t i = 1; + if (i < s.size()) { + while (i < s.size() && s[i]->isStr()) { + i++; + } + if (i < s.size() && (*s[i])[0]->str() == RESULT) { + i++; + } + if (t < int(stack.size()) - 1) { + // first child is one of our recursions + curr->list.push_back(stack[t + 1].second); + i++; + } + for (; i < s.size(); i++) { + curr->list.push_back(parseExpression(s[i])); + } + } + nameMapper.popLabelName(curr->name); + curr->finalize(curr->type); + } + return stack[0].second; +} + +// Similar to block, but the label is handled by the enclosing if (since there might not be a then or else, ick) +Expression* SExpressionWasmBuilder::makeThenOrElse(Element& s) { + auto ret = allocator.alloc(); + size_t i = 1; + if (s[1]->isStr()) { + i++; + } + for (; i < s.size(); i++) { + ret->list.push_back(parseExpression(s[i])); + } + ret->finalize(); + return ret; +} + +Expression* SExpressionWasmBuilder::makeConst(Element& s, WasmType type) { + auto ret = parseConst(s[1]->str(), type, allocator); + if (!ret) throw ParseException("bad const"); + return ret; +} + +static uint8_t parseMemBytes(const char** in, uint8_t fallback) { + uint8_t ret; + const char* s = *in; + if (s[0] == '8') { + ret = 1; + (*in)++; + } else if (s[0] == '1') { + if (s[1] != '6') throw ParseException("expected 16 for memop size"); + ret = 2; + *in += 2; + } else if (s[0] == '3') { + if (s[1] != '2') throw ParseException("expected 32 for memop size");; + ret = 4; + *in += 2; + } else { + ret = fallback; + } + return ret; +} + +static size_t parseMemAttributes(Element& s, Address* offset, Address* align, Address fallback) { + size_t i = 1; + *offset = 0; + *align = fallback; + while (!s[i]->isList()) { + const char *str = s[i]->c_str(); + const char *eq = strchr(str, '='); + if (!eq) throw ParseException("missing = in memory attribute"); + eq++; + uint64_t value = atoll(eq); + if (str[0] == 'a') { + if (value > std::numeric_limits::max()) throw ParseException("bad align"); + *align = value; + } else if (str[0] == 'o') { + if (value > std::numeric_limits::max()) throw ParseException("bad offset"); + *offset = value; + } else throw ParseException("bad memory attribute"); + i++; + } + return i; +} + +Expression* SExpressionWasmBuilder::makeLoad(Element& s, WasmType type, bool isAtomic) { + const char *extra = strchr(s[0]->c_str(), '.') + 5; // after "type.load" + if (isAtomic) extra += 7; // after "type.atomic.load" + auto* ret = allocator.alloc(); + ret->isAtomic = isAtomic; + ret->type = type; + ret->bytes = parseMemBytes(&extra, getWasmTypeSize(type)); + ret->signed_ = extra[0] && extra[1] == 's'; + size_t i = parseMemAttributes(s, &ret->offset, &ret->align, ret->bytes); + ret->ptr = parseExpression(s[i]); + ret->finalize(); + return ret; +} + +Expression* SExpressionWasmBuilder::makeStore(Element& s, WasmType type, bool isAtomic) { + const char *extra = strchr(s[0]->c_str(), '.') + 6; // after "type.store" + if (isAtomic) extra += 7; // after "type.atomic.store" + auto ret = allocator.alloc(); + ret->isAtomic = isAtomic; + ret->valueType = type; + ret->bytes = parseMemBytes(&extra, getWasmTypeSize(type)); + size_t i = parseMemAttributes(s, &ret->offset, &ret->align, ret->bytes); + + ret->ptr = parseExpression(s[i]); + ret->value = parseExpression(s[i+1]); + ret->finalize(); + return ret; +} + +Expression* SExpressionWasmBuilder::makeAtomicRMWOrCmpxchg(Element& s, WasmType type) { + const char* extra = strchr(s[0]->c_str(), '.') + 11; // afer "type.atomic.rmw" + auto bytes = parseMemBytes(&extra, getWasmTypeSize(type)); + extra = strchr(extra, '.'); // after the optional '_u' and before the opcode + if (!extra) throw ParseException("malformed atomic rmw instruction"); + extra++; // after the '.' + if (!strncmp(extra, "cmpxchg", 7)) return makeAtomicCmpxchg(s, type, bytes, extra); + return makeAtomicRMW(s, type, bytes, extra); +} + +Expression* SExpressionWasmBuilder::makeAtomicRMW(Element& s, WasmType type, uint8_t bytes, const char* extra) { + auto ret = allocator.alloc(); + ret->type = type; + ret->bytes = bytes; + if (!strncmp(extra, "add", 3)) ret->op = Add; + else if (!strncmp(extra, "and", 3)) ret->op = And; + else if (!strncmp(extra, "or", 2)) ret->op = Or; + else if (!strncmp(extra, "sub", 3)) ret->op = Sub; + else if (!strncmp(extra, "xor", 3)) ret->op = Xor; + else if (!strncmp(extra, "xchg", 4)) ret->op = Xchg; + else throw ParseException("bad atomic rmw operator"); + Address align; + size_t i = parseMemAttributes(s, &ret->offset, &align, ret->bytes); + if (align != ret->bytes) throw ParseException("Align of Atomic RMW must match size"); + ret->ptr = parseExpression(s[i]); + ret->value = parseExpression(s[i+1]); + ret->finalize(); + return ret; +} + +Expression* SExpressionWasmBuilder::makeAtomicCmpxchg(Element& s, WasmType type, uint8_t bytes, const char* extra) { + auto ret = allocator.alloc(); + ret->type = type; + ret->bytes = bytes; + Address align; + size_t i = parseMemAttributes(s, &ret->offset, &align, ret->bytes); + if (align != ret->bytes) throw ParseException("Align of Atomic Cmpxchg must match size"); + ret->ptr = parseExpression(s[i]); + ret->expected = parseExpression(s[i+1]); + ret->replacement = parseExpression(s[i+2]); + ret->finalize(); + return ret; +} + +Expression* SExpressionWasmBuilder::makeAtomicWait(Element& s, WasmType type) { + auto ret = allocator.alloc(); + ret->type = i32; + ret->expectedType = type; + ret->ptr = parseExpression(s[1]); + ret->expected = parseExpression(s[2]); + ret->timeout = parseExpression(s[3]); + ret->finalize(); + return ret; +} + +Expression* SExpressionWasmBuilder::makeAtomicWake(Element& s) { + auto ret = allocator.alloc(); + ret->type = i32; + ret->ptr = parseExpression(s[1]); + ret->wakeCount = parseExpression(s[2]); + ret->finalize(); + return ret; +} + +Expression* SExpressionWasmBuilder::makeIf(Element& s) { + auto ret = allocator.alloc(); + Index i = 1; + Name sName; + if (s[i]->dollared()) { + // the if is labeled + sName = s[i++]->str(); + } else { + sName = "if"; + } + auto label = nameMapper.pushLabelName(sName); + // if signature + WasmType type = parseOptionalResultType(s, i); + ret->condition = parseExpression(s[i++]); + ret->ifTrue = parseExpression(*s[i++]); + if (i < s.size()) { + ret->ifFalse = parseExpression(*s[i++]); + } + ret->finalize(type); + nameMapper.popLabelName(label); + // create a break target if we must + if (BranchUtils::BranchSeeker::hasNamed(ret, label)) { + auto* block = allocator.alloc(); + block->name = label; + block->list.push_back(ret); + block->finalize(ret->type); + return block; + } + return ret; +} + + +Expression* SExpressionWasmBuilder::makeMaybeBlock(Element& s, size_t i, WasmType type) { + Index stopAt = -1; + if (s.size() == i) return allocator.alloc(); + if (s.size() == i+1) return parseExpression(s[i]); + auto ret = allocator.alloc(); + for (; i < s.size() && i < stopAt; i++) { + ret->list.push_back(parseExpression(s[i])); + } + ret->finalize(type); + // Note that we do not name these implicit/synthetic blocks. They + // are the effects of syntactic sugar, and nothing can branch to + // them anyhow. + return ret; +} + +WasmType SExpressionWasmBuilder::parseOptionalResultType(Element& s, Index& i) { + if (s.size() == i) + return none; + + // TODO(sbc): Remove support for old result syntax (bare streing) once the + // spec tests are updated. + if (s[i]->isStr()) + return stringToWasmType(s[i++]->str()); + + Element& params = *s[i]; + IString id = params[0]->str(); + if (id != RESULT) + return none; + + i++; + return stringToWasmType(params[1]->str()); +} + +Expression* SExpressionWasmBuilder::makeLoop(Element& s) { + auto ret = allocator.alloc(); + Index i = 1; + Name sName; + if (s.size() > i && s[i]->dollared()) { + sName = s[i++]->str(); + } else { + sName = "loop-in"; + } + ret->name = nameMapper.pushLabelName(sName); + ret->type = parseOptionalResultType(s, i); + ret->body = makeMaybeBlock(s, i, ret->type); + nameMapper.popLabelName(ret->name); + ret->finalize(ret->type); + return ret; +} + +Expression* SExpressionWasmBuilder::makeCall(Element& s) { + auto target = getFunctionName(*s[1]); + auto* import = wasm.getImportOrNull(target); + if (import && import->kind == ExternalKind::Function) { + auto ret = allocator.alloc(); + ret->target = target; + Import* import = wasm.getImport(ret->target); + ret->type = wasm.getFunctionType(import->functionType)->result; + parseCallOperands(s, 2, s.size(), ret); + return ret; + } + auto ret = allocator.alloc(); + ret->target = target; + ret->type = functionTypes[ret->target]; + parseCallOperands(s, 2, s.size(), ret); + ret->finalize(); + return ret; +} + +Expression* SExpressionWasmBuilder::makeCallImport(Element& s) { + auto ret = allocator.alloc(); + ret->target = s[1]->str(); + Import* import = wasm.getImport(ret->target); + ret->type = wasm.getFunctionType(import->functionType)->result; + parseCallOperands(s, 2, s.size(), ret); + ret->finalize(); + return ret; +} + +Expression* SExpressionWasmBuilder::makeCallIndirect(Element& s) { + if (!wasm.table.exists) throw ParseException("no table"); + auto ret = allocator.alloc(); + Element& typeElement = *s[1]; + if (typeElement[0]->str() != "type") throw ParseException("expected 'type' in call_indirect", s.line, s.col); + IString type = typeElement[1]->str(); + auto* fullType = wasm.getFunctionTypeOrNull(type); + if (!fullType) throw ParseException("invalid call_indirect type", s.line, s.col); + ret->fullType = fullType->name; + ret->type = fullType->result; + parseCallOperands(s, 2, s.size() - 1, ret); + ret->target = parseExpression(s[s.size() - 1]); + ret->finalize(); + return ret; +} + +Name SExpressionWasmBuilder::getLabel(Element& s) { + if (s.dollared()) { + return nameMapper.sourceToUnique(s.str()); + } else { + // offset, break to nth outside label + uint64_t offset; + try { + offset = std::stoll(s.c_str(), nullptr, 0); + } catch (std::invalid_argument) { + throw ParseException("invalid break offset"); + } catch (std::out_of_range) { + throw ParseException("out of range break offset"); + } + if (offset > nameMapper.labelStack.size()) throw ParseException("invalid label", s.line, s.col); + if (offset == nameMapper.labelStack.size()) { + // a break to the function's scope. this means we need an automatic block, with a name + brokeToAutoBlock = true; + return FAKE_RETURN; + } + return nameMapper.labelStack[nameMapper.labelStack.size() - 1 - offset]; + } +} + +Expression* SExpressionWasmBuilder::makeBreak(Element& s) { + auto ret = allocator.alloc(); + size_t i = 1; + ret->name = getLabel(*s[i]); + i++; + if (i == s.size()) return ret; + if (s[0]->str() == BR_IF) { + if (i + 1 < s.size()) { + ret->value = parseExpression(s[i]); + i++; + } + ret->condition = parseExpression(s[i]); + } else { + ret->value = parseExpression(s[i]); + } + ret->finalize(); + return ret; +} + +Expression* SExpressionWasmBuilder::makeBreakTable(Element& s) { + auto ret = allocator.alloc(); + size_t i = 1; + while (!s[i]->isList()) { + ret->targets.push_back(getLabel(*s[i++])); + } + if (ret->targets.size() == 0) throw ParseException("switch with no targets"); + ret->default_ = ret->targets.back(); + ret->targets.pop_back(); + ret->condition = parseExpression(s[i++]); + if (i < s.size()) { + ret->value = ret->condition; + ret->condition = parseExpression(s[i++]); + } + return ret; +} + +Expression* SExpressionWasmBuilder::makeReturn(Element& s) { + auto ret = allocator.alloc(); + if (s.size() >= 2) { + ret->value = parseExpression(s[1]); + } + return ret; +} + +// converts an s-expression string representing binary data into an output sequence of raw bytes +// this appends to data, which may already contain content. +void SExpressionWasmBuilder::stringToBinary(const char* input, size_t size, std::vector& data) { + auto originalSize = data.size(); + data.resize(originalSize + size); + char *write = data.data() + originalSize; + while (1) { + if (input[0] == 0) break; + if (input[0] == '\\') { + if (input[1] == '"') { + *write++ = '"'; + input += 2; + continue; + } else if (input[1] == '\'') { + *write++ = '\''; + input += 2; + continue; + } else if (input[1] == '\\') { + *write++ = '\\'; + input += 2; + continue; + } else if (input[1] == 'n') { + *write++ = '\n'; + input += 2; + continue; + } else if (input[1] == 't') { + *write++ = '\t'; + input += 2; + continue; + } else { + *write++ = (char)(unhex(input[1])*16 + unhex(input[2])); + input += 3; + continue; + } + } + *write++ = input[0]; + input++; + } + assert(write >= data.data()); + size_t actual = write - data.data(); + assert(actual <= data.size()); + data.resize(actual); +} + +Index SExpressionWasmBuilder::parseMemoryLimits(Element& s, Index i) { + wasm.memory.initial = getCheckedAddress(s[i++], "excessive memory init"); + if (i == s.size()) return i; + uint64_t max = atoll(s[i++]->c_str()); + if (max > Memory::kMaxSize) throw ParseException("total memory must be <= 4GB"); + wasm.memory.max = max; + return i; +} + +void SExpressionWasmBuilder::parseMemory(Element& s, bool preParseImport) { + if (wasm.memory.exists) throw ParseException("too many memories"); + wasm.memory.exists = true; + wasm.memory.imported = preParseImport; + wasm.memory.shared = false; + Index i = 1; + if (s[i]->dollared()) { + wasm.memory.name = s[i++]->str(); + } + Name importModule, importBase; + if (s[i]->isList()) { + auto& inner = *s[i]; + if (inner[0]->str() == EXPORT) { + auto ex = make_unique(); + ex->name = inner[1]->str(); + ex->value = wasm.memory.name; + ex->kind = ExternalKind::Memory; + if (wasm.getExportOrNull(ex->name)) throw ParseException("duplicate export", s.line, s.col); + wasm.addExport(ex.release()); + i++; + } else if (inner[0]->str() == IMPORT) { + importModule = inner[1]->str(); + importBase = inner[2]->str(); + auto im = make_unique(); + im->kind = ExternalKind::Memory; + im->module = importModule; + im->base = importBase; + im->name = importModule; + if (wasm.getImportOrNull(im->name)) throw ParseException("duplicate import", s.line, s.col); + wasm.addImport(im.release()); + i++; + } else if (inner[0]->str() == "shared") { + wasm.memory.shared = true; + parseMemoryLimits(inner, 1); + i++; + } else { + if (!(inner.size() > 0 ? inner[0]->str() != IMPORT : true)) throw ParseException("bad import ending"); + // (memory (data ..)) format + parseInnerData(*s[i]); + wasm.memory.initial = wasm.memory.segments[0].data.size(); + return; + } + } + if (!wasm.memory.shared) i = parseMemoryLimits(s, i); + + // Parse memory initializers. + while (i < s.size()) { + Element& curr = *s[i]; + size_t j = 1; + Address offsetValue; + if (curr[0]->str() == DATA) { + offsetValue = 0; + } else { + offsetValue = getCheckedAddress(curr[j++], "excessive memory offset"); + } + const char *input = curr[j]->c_str(); + auto* offset = allocator.alloc(); + offset->type = i32; + offset->value = Literal(int32_t(offsetValue)); + if (auto size = strlen(input)) { + std::vector data; + stringToBinary(input, size, data); + wasm.memory.segments.emplace_back(offset, data.data(), data.size()); + } else { + wasm.memory.segments.emplace_back(offset, "", 0); + } + i++; + } +} + +void SExpressionWasmBuilder::parseData(Element& s) { + if (!wasm.memory.exists) throw ParseException("data but no memory"); + Index i = 1; + if (!s[i]->isList()) { + // the memory is named + i++; + } + auto* offset = parseExpression(s[i++]); + parseInnerData(s, i, offset); +} + +void SExpressionWasmBuilder::parseInnerData(Element& s, Index i, Expression* offset) { + std::vector data; + while (i < s.size()) { + const char *input = s[i++]->c_str(); + if (auto size = strlen(input)) { + stringToBinary(input, size, data); + } + } + if (!offset) { + offset = allocator.alloc()->set(Literal(int32_t(0))); + } + wasm.memory.segments.emplace_back(offset, data.data(), data.size()); +} + +void SExpressionWasmBuilder::parseExport(Element& s) { + std::unique_ptr ex = make_unique(); + ex->name = s[1]->str(); + if (s[2]->isList()) { + auto& inner = *s[2]; + ex->value = inner[1]->str(); + if (inner[0]->str() == FUNC) { + ex->kind = ExternalKind::Function; + } else if (inner[0]->str() == MEMORY) { + ex->kind = ExternalKind::Memory; + } else if (inner[0]->str() == TABLE) { + ex->kind = ExternalKind::Table; + } else if (inner[0]->str() == GLOBAL) { + ex->kind = ExternalKind::Global; + if (wasm.getGlobalOrNull(ex->value) && wasm.getGlobal(ex->value)->mutable_) throw ParseException("cannot export a mutable global", s.line, s.col); + } else { + throw ParseException("invalid export"); + } + } else if (!s[2]->dollared() && !std::isdigit(s[2]->str()[0])) { + ex->value = s[3]->str(); + if (s[2]->str() == MEMORY) { + if (!wasm.memory.exists) throw ParseException("memory exported but no memory"); + ex->kind = ExternalKind::Memory; + } else if (s[2]->str() == TABLE) { + ex->kind = ExternalKind::Table; + } else if (s[2]->str() == GLOBAL) { + ex->kind = ExternalKind::Global; + } else { + throw ParseException("invalid ext export"); + } + } else { + // function + ex->value = s[2]->str(); + ex->kind = ExternalKind::Function; + } + if (wasm.getExportOrNull(ex->name)) throw ParseException("duplicate export", s.line, s.col); + wasm.addExport(ex.release()); +} + +void SExpressionWasmBuilder::parseImport(Element& s) { + std::unique_ptr im = make_unique(); + size_t i = 1; + bool newStyle = s.size() == 4 && s[3]->isList(); // (import "env" "STACKTOP" (global $stackTop i32)) + if (newStyle) { + if ((*s[3])[0]->str() == FUNC) { + im->kind = ExternalKind::Function; + } else if ((*s[3])[0]->str() == MEMORY) { + im->kind = ExternalKind::Memory; + if (wasm.memory.exists) throw ParseException("more than one memory"); + wasm.memory.exists = true; + wasm.memory.imported = true; + } else if ((*s[3])[0]->str() == TABLE) { + im->kind = ExternalKind::Table; + if (wasm.table.exists) throw ParseException("more than one table"); + wasm.table.exists = true; + wasm.table.imported = true; + } else if ((*s[3])[0]->str() == GLOBAL) { + im->kind = ExternalKind::Global; + } else { + newStyle = false; // either (param..) or (result..) + } + } + Index newStyleInner = 1; + if (s.size() > 3 && s[3]->isStr()) { + im->name = s[i++]->str(); + } else if (newStyle && newStyleInner < s[3]->size() && (*s[3])[newStyleInner]->dollared()) { + im->name = (*s[3])[newStyleInner++]->str(); + } + if (!im->name.is()) { + if (im->kind == ExternalKind::Function) { + im->name = Name("import$function$" + std::to_string(functionCounter++)); + functionNames.push_back(im->name); + } else if (im->kind == ExternalKind::Global) { + im->name = Name("import$global" + std::to_string(globalCounter++)); + globalNames.push_back(im->name); + } else if (im->kind == ExternalKind::Memory) { + im->name = Name("import$memory$" + std::to_string(0)); + } else if (im->kind == ExternalKind::Table) { + im->name = Name("import$table$" + std::to_string(0)); + } else { + throw ParseException("invalid import"); + } + } + if (!s[i]->quoted()) { + if (s[i]->str() == MEMORY) { + im->kind = ExternalKind::Memory; + } else if (s[i]->str() == TABLE) { + im->kind = ExternalKind::Table; + } else if (s[i]->str() == GLOBAL) { + im->kind = ExternalKind::Global; + } else { + throw ParseException("invalid ext import"); + } + i++; + } else if (!newStyle) { + im->kind = ExternalKind::Function; + } + im->module = s[i++]->str(); + if (!s[i]->isStr()) throw ParseException("no name for import"); + im->base = s[i++]->str(); + // parse internals + Element& inner = newStyle ? *s[3] : s; + Index j = newStyle ? newStyleInner : i; + if (im->kind == ExternalKind::Function) { + std::unique_ptr type = make_unique(); + if (inner.size() > j) { + Element& params = *inner[j]; + IString id = params[0]->str(); + if (id == PARAM) { + for (size_t k = 1; k < params.size(); k++) { + type->params.push_back(stringToWasmType(params[k]->str())); + } + } else if (id == RESULT) { + type->result = stringToWasmType(params[1]->str()); + } else if (id == TYPE) { + IString name = params[1]->str(); + if (!wasm.getFunctionTypeOrNull(name)) throw ParseException("bad function type for import"); + *type = *wasm.getFunctionType(name); + } else { + throw ParseException("bad import element"); + } + if (inner.size() > j+1) { + Element& result = *inner[j+1]; + if (result[0]->str() != RESULT) throw ParseException("expected result"); + type->result = stringToWasmType(result[1]->str()); + } + } + im->functionType = ensureFunctionType(getSig(type.get()), &wasm)->name; + } else if (im->kind == ExternalKind::Global) { + if (inner[j]->isStr()) { + im->globalType = stringToWasmType(inner[j]->str()); + } else { + auto& inner2 = *inner[j]; + if (inner2[0]->str() != MUT) throw ParseException("expected mut"); + im->globalType = stringToWasmType(inner2[1]->str()); + throw ParseException("cannot import a mutable global", s.line, s.col); + } + } else if (im->kind == ExternalKind::Table) { + if (j < inner.size() - 1) { + wasm.table.initial = getCheckedAddress(inner[j++], "excessive table init size"); + } + if (j < inner.size() - 1) { + wasm.table.max = getCheckedAddress(inner[j++], "excessive table max size"); + } else { + wasm.table.max = Table::kMaxSize; + } + // ends with the table element type + } else if (im->kind == ExternalKind::Memory) { + if (inner[j]->isList()) { + auto& limits = *inner[j]; + if (!(limits[0]->isStr() && limits[0]->str() == "shared")) throw ParseException("bad memory limit declaration"); + wasm.memory.shared = true; + parseMemoryLimits(limits, 1); + } else { + parseMemoryLimits(inner, j); + } + } + if (wasm.getImportOrNull(im->name)) throw ParseException("duplicate import", s.line, s.col); + wasm.addImport(im.release()); +} + +void SExpressionWasmBuilder::parseGlobal(Element& s, bool preParseImport) { + std::unique_ptr global = make_unique(); + size_t i = 1; + if (s[i]->dollared() && !(s[i]->isStr() && isWasmType(s[i]->str()))) { + global->name = s[i++]->str(); + } else { + global->name = Name::fromInt(globalCounter); + } + globalCounter++; + globalNames.push_back(global->name); + bool mutable_ = false; + WasmType type = none; + bool exported = false; + Name importModule, importBase; + while (i < s.size() && s[i]->isList()) { + auto& inner = *s[i]; + if (inner[0]->str() == EXPORT) { + auto ex = make_unique(); + ex->name = inner[1]->str(); + ex->value = global->name; + ex->kind = ExternalKind::Global; + if (wasm.getExportOrNull(ex->name)) throw ParseException("duplicate export", s.line, s.col); + wasm.addExport(ex.release()); + exported = true; + i++; + } else if (inner[0]->str() == IMPORT) { + importModule = inner[1]->str(); + importBase = inner[2]->str(); + i++; + } else if (inner[0]->str() == MUT) { + mutable_ = true; + type = stringToWasmType(inner[1]->str()); + i++; + } else { + break; + } + } + if (exported && mutable_) throw ParseException("cannot export a mutable global", s.line, s.col); + if (type == none) { + type = stringToWasmType(s[i++]->str()); + } + if (importModule.is()) { + // this is an import, actually + if (!preParseImport) throw ParseException("!preParseImport in global"); + if (mutable_) throw ParseException("cannot import a mutable global", s.line, s.col); + std::unique_ptr im = make_unique(); + im->name = global->name; + im->module = importModule; + im->base = importBase; + im->kind = ExternalKind::Global; + im->globalType = type; + if (wasm.getImportOrNull(im->name)) throw ParseException("duplicate import", s.line, s.col); + wasm.addImport(im.release()); + return; + } + if (preParseImport) throw ParseException("preParseImport in global"); + global->type = type; + if (i < s.size()) { + global->init = parseExpression(s[i++]); + } else { + throw ParseException("global without init", s.line, s.col); + } + global->mutable_ = mutable_; + if (i != s.size()) throw ParseException("extra import elements"); + if (wasm.getGlobalOrNull(global->name)) throw ParseException("duplicate import", s.line, s.col); + wasm.addGlobal(global.release()); +} + + +void SExpressionWasmBuilder::parseTable(Element& s, bool preParseImport) { + if (wasm.table.exists) throw ParseException("more than one table"); + wasm.table.exists = true; + wasm.table.imported = preParseImport; + Index i = 1; + if (i == s.size()) return; // empty table in old notation + if (s[i]->dollared()) { + wasm.table.name = s[i++]->str(); + } + if (i == s.size()) return; + Name importModule, importBase; + if (s[i]->isList()) { + auto& inner = *s[i]; + if (inner[0]->str() == EXPORT) { + auto ex = make_unique(); + ex->name = inner[1]->str(); + ex->value = wasm.table.name; + ex->kind = ExternalKind::Table; + if (wasm.getExportOrNull(ex->name)) throw ParseException("duplicate export", s.line, s.col); + wasm.addExport(ex.release()); + i++; + } else if (inner[0]->str() == IMPORT) { + importModule = inner[1]->str(); + importBase = inner[2]->str(); + if (!preParseImport) throw ParseException("!preParseImport in table"); + auto im = make_unique(); + im->kind = ExternalKind::Table; + im->module = importModule; + im->base = importBase; + im->name = importModule; + if (wasm.getImportOrNull(im->name)) throw ParseException("duplicate import", s.line, s.col); + wasm.addImport(im.release()); + i++; + } else { + throw ParseException("invalid table"); + } + } + if (i == s.size()) return; + if (!s[i]->dollared()) { + if (s[i]->str() == ANYFUNC) { + // (table type (elem ..)) + parseInnerElem(*s[i + 1]); + if (wasm.table.segments.size() > 0) { + wasm.table.initial = wasm.table.max = wasm.table.segments[0].data.size(); + } else { + wasm.table.initial = wasm.table.max = 0; + } + return; + } + // first element isn't dollared, and isn't anyfunc. this could be old syntax for (table 0 1) which means function 0 and 1, or it could be (table initial max? type), look for type + if (s[s.size() - 1]->str() == ANYFUNC) { + // (table initial max? type) + if (i < s.size() - 1) { + wasm.table.initial = atoi(s[i++]->c_str()); + } + if (i < s.size() - 1) { + wasm.table.max = atoi(s[i++]->c_str()); + } + return; + } + } + // old notation (table func1 func2 ..) + parseInnerElem(s, i); + if (wasm.table.segments.size() > 0) { + wasm.table.initial = wasm.table.max = wasm.table.segments[0].data.size(); + } else { + wasm.table.initial = wasm.table.max = 0; + } +} + +void SExpressionWasmBuilder::parseElem(Element& s) { + Index i = 1; + if (!s[i]->isList()) { + // the table is named + i++; + } + auto* offset = parseExpression(s[i++]); + parseInnerElem(s, i, offset); +} + +void SExpressionWasmBuilder::parseInnerElem(Element& s, Index i, Expression* offset) { + if (!wasm.table.exists) throw ParseException("elem without table", s.line, s.col); + if (!offset) { + offset = allocator.alloc()->set(Literal(int32_t(0))); + } + Table::Segment segment(offset); + for (; i < s.size(); i++) { + segment.data.push_back(getFunctionName(*s[i])); + } + wasm.table.segments.push_back(segment); +} + +void SExpressionWasmBuilder::parseType(Element& s) { + std::unique_ptr type = make_unique(); + size_t i = 1; + if (s[i]->isStr()) { + type->name = s[i]->str(); + i++; + } + Element& func = *s[i]; + for (size_t k = 1; k < func.size(); k++) { + Element& curr = *func[k]; + if (curr[0]->str() == PARAM) { + for (size_t j = 1; j < curr.size(); j++) { + type->params.push_back(stringToWasmType(curr[j]->str())); + } + } else if (curr[0]->str() == RESULT) { + if (curr.size() > 2) throw ParseException("invalid result arity", curr.line, curr.col); + type->result = stringToWasmType(curr[1]->str()); + } + } + if (!type->name.is()) { + type->name = Name::fromInt(wasm.functionTypes.size()); + } + functionTypeNames.push_back(type->name); + if (wasm.getFunctionTypeOrNull(type->name)) throw ParseException("duplicate function type", s.line, s.col); + wasm.addFunctionType(type.release()); +} + +} // namespace wasm diff --git a/src/binaryen/src/wasm/wasm-type.cpp b/src/binaryen/src/wasm/wasm-type.cpp new file mode 100644 index 0000000000..1e48ce5251 --- /dev/null +++ b/src/binaryen/src/wasm/wasm-type.cpp @@ -0,0 +1,70 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wasm-type.h" + +#include +#include "compiler-support.h" + +namespace wasm { + +const char* printWasmType(WasmType type) { + switch (type) { + case WasmType::none: return "none"; + case WasmType::i32: return "i32"; + case WasmType::i64: return "i64"; + case WasmType::f32: return "f32"; + case WasmType::f64: return "f64"; + case WasmType::unreachable: return "unreachable"; + default: WASM_UNREACHABLE(); + } +} + +unsigned getWasmTypeSize(WasmType type) { + switch (type) { + case WasmType::none: abort(); + case WasmType::i32: return 4; + case WasmType::i64: return 8; + case WasmType::f32: return 4; + case WasmType::f64: return 8; + default: WASM_UNREACHABLE(); + } +} + +bool isWasmTypeFloat(WasmType type) { + switch (type) { + case f32: + case f64: return true; + default: return false; + } +} + +WasmType getWasmType(unsigned size, bool float_) { + if (size < 4) return WasmType::i32; + if (size == 4) return float_ ? WasmType::f32 : WasmType::i32; + if (size == 8) return float_ ? WasmType::f64 : WasmType::i64; + abort(); +} + +WasmType getReachableWasmType(WasmType a, WasmType b) { + return a != unreachable ? a : b; +} + +bool isConcreteWasmType(WasmType type) { + return type != none && type != unreachable; +} + +} // namespace wasm diff --git a/src/binaryen/src/wasm/wasm-validator.cpp b/src/binaryen/src/wasm/wasm-validator.cpp new file mode 100644 index 0000000000..ef70cc9e73 --- /dev/null +++ b/src/binaryen/src/wasm/wasm-validator.cpp @@ -0,0 +1,1040 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "wasm.h" +#include "wasm-printing.h" +#include "wasm-validator.h" +#include "ir/utils.h" +#include "ir/branch-utils.h" +#include "support/colors.h" + + +namespace wasm { + +// Print anything that can be streamed to an ostream +template ::type>::value + >::type* = nullptr> +inline std::ostream& printModuleComponent(T curr, std::ostream& stream) { + stream << curr << std::endl; + return stream; +} + +// Extra overload for Expressions, to print type info too +inline std::ostream& printModuleComponent(Expression* curr, std::ostream& stream) { + WasmPrinter::printExpression(curr, stream, false, true) << std::endl; + return stream; +} + +// For parallel validation, we have a helper struct for coordination +struct ValidationInfo { + bool validateWeb; + bool validateGlobally; + FeatureSet features; + bool quiet; + + std::atomic valid; + + // a stream of error test for each function. we print in the right order at + // the end, for deterministic output + // note errors are rare/unexpected, so it's ok to use a slow mutex here + std::mutex mutex; + std::unordered_map> outputs; + + ValidationInfo() { + valid.store(true); + } + + std::ostringstream& getStream(Function* func) { + std::unique_lock lock(mutex); + auto iter = outputs.find(func); + if (iter != outputs.end()) return *(iter->second.get()); + auto& ret = outputs[func] = make_unique(); + return *ret.get(); + } + + // printing and error handling support + + template + std::ostream& fail(S text, T curr, Function* func) { + valid.store(false); + auto& stream = getStream(func); + if (quiet) return stream; + auto& ret = printFailureHeader(func); + ret << text << ", on \n"; + return printModuleComponent(curr, ret); + } + + std::ostream& printFailureHeader(Function* func) { + auto& stream = getStream(func); + if (quiet) return stream; + Colors::red(stream); + if (func) { + stream << "[wasm-validator error in function "; + Colors::green(stream); + stream << func->name; + Colors::red(stream); + stream << "] "; + } else { + stream << "[wasm-validator error in module] "; + } + Colors::normal(stream); + return stream; + } + + // checking utilities + + template + bool shouldBeTrue(bool result, T curr, const char* text, Function* func = nullptr) { + if (!result) { + fail("unexpected false: " + std::string(text), curr, func); + return false; + } + return result; + } + template + bool shouldBeFalse(bool result, T curr, const char* text, Function* func = nullptr) { + if (result) { + fail("unexpected true: " + std::string(text), curr, func); + return false; + } + return result; + } + + template + bool shouldBeEqual(S left, S right, T curr, const char* text, Function* func = nullptr) { + if (left != right) { + std::ostringstream ss; + ss << left << " != " << right << ": " << text; + fail(ss.str(), curr, func); + return false; + } + return true; + } + + template + bool shouldBeEqualOrFirstIsUnreachable(S left, S right, T curr, const char* text, Function* func = nullptr) { + if (left != unreachable && left != right) { + std::ostringstream ss; + ss << left << " != " << right << ": " << text; + fail(ss.str(), curr, func); + return false; + } + return true; + } + + template + bool shouldBeUnequal(S left, S right, T curr, const char* text, Function* func = nullptr) { + if (left == right) { + std::ostringstream ss; + ss << left << " == " << right << ": " << text; + fail(ss.str(), curr, func); + return false; + } + return true; + } + + void shouldBeIntOrUnreachable(WasmType ty, Expression* curr, const char* text, Function* func = nullptr) { + switch (ty) { + case i32: + case i64: + case unreachable: { + break; + } + default: fail(text, curr, func); + } + } + +}; + +struct FunctionValidator : public WalkerPass> { + bool isFunctionParallel() override { return true; } + + Pass* create() override { return new FunctionValidator(&info); } + + ValidationInfo& info; + + FunctionValidator(ValidationInfo* info) : info(*info) {} + + struct BreakInfo { + WasmType type; + Index arity; + BreakInfo() {} + BreakInfo(WasmType type, Index arity) : type(type), arity(arity) {} + }; + + std::map breakTargets; + std::map breakInfos; + + WasmType returnType = unreachable; // type used in returns + + std::set labelNames; // Binaryen IR requires that label names must be unique - IR generators must ensure that + + std::unordered_set seenExpressions; // expressions must not appear twice + + void noteLabelName(Name name); + +public: + // visitors + + static void visitPreBlock(FunctionValidator* self, Expression** currp) { + auto* curr = (*currp)->cast(); + if (curr->name.is()) self->breakTargets[curr->name] = curr; + } + + void visitBlock(Block *curr); + + static void visitPreLoop(FunctionValidator* self, Expression** currp) { + auto* curr = (*currp)->cast(); + if (curr->name.is()) self->breakTargets[curr->name] = curr; + } + + void visitLoop(Loop *curr); + void visitIf(If *curr); + + // override scan to add a pre and a post check task to all nodes + static void scan(FunctionValidator* self, Expression** currp) { + PostWalker::scan(self, currp); + + auto* curr = *currp; + if (curr->is()) self->pushTask(visitPreBlock, currp); + if (curr->is()) self->pushTask(visitPreLoop, currp); + } + + void noteBreak(Name name, Expression* value, Expression* curr); + void visitBreak(Break *curr); + void visitSwitch(Switch *curr); + void visitCall(Call *curr); + void visitCallImport(CallImport *curr); + void visitCallIndirect(CallIndirect *curr); + void visitGetLocal(GetLocal* curr); + void visitSetLocal(SetLocal *curr); + void visitLoad(Load *curr); + void visitStore(Store *curr); + void visitAtomicRMW(AtomicRMW *curr); + void visitAtomicCmpxchg(AtomicCmpxchg *curr); + void visitAtomicWait(AtomicWait *curr); + void visitAtomicWake(AtomicWake *curr); + void visitBinary(Binary *curr); + void visitUnary(Unary *curr); + void visitSelect(Select* curr); + void visitDrop(Drop* curr); + void visitReturn(Return* curr); + void visitHost(Host* curr); + void visitFunction(Function *curr); + + // helpers +private: + std::ostream& getStream() { + return info.getStream(getFunction()); + } + + template + bool shouldBeTrue(bool result, T curr, const char* text) { + return info.shouldBeTrue(result, curr, text, getFunction()); + } + template + bool shouldBeFalse(bool result, T curr, const char* text) { + return info.shouldBeFalse(result, curr, text, getFunction()); + } + + template + bool shouldBeEqual(S left, S right, T curr, const char* text) { + return info.shouldBeEqual(left, right, curr, text, getFunction()); + } + + template + bool shouldBeEqualOrFirstIsUnreachable(S left, S right, T curr, const char* text) { + return info.shouldBeEqualOrFirstIsUnreachable(left, right, curr, text, getFunction()); + } + + template + bool shouldBeUnequal(S left, S right, T curr, const char* text) { + return info.shouldBeUnequal(left, right, curr, text, getFunction()); + } + + void shouldBeIntOrUnreachable(WasmType ty, Expression* curr, const char* text) { + return info.shouldBeIntOrUnreachable(ty, curr, text, getFunction()); + } + + void validateAlignment(size_t align, WasmType type, Index bytes, bool isAtomic, + Expression* curr); + void validateMemBytes(uint8_t bytes, WasmType type, Expression* curr); +}; + +void FunctionValidator::noteLabelName(Name name) { + if (!name.is()) return; + shouldBeTrue(labelNames.find(name) == labelNames.end(), name, "names in Binaryen IR must be unique - IR generators must ensure that"); + labelNames.insert(name); +} + +void FunctionValidator::visitBlock(Block *curr) { + // if we are break'ed to, then the value must be right for us + if (curr->name.is()) { + noteLabelName(curr->name); + if (breakInfos.count(curr) > 0) { + auto& info = breakInfos[curr]; + if (isConcreteWasmType(curr->type)) { + shouldBeTrue(info.arity != 0, curr, "break arities must be > 0 if block has a value"); + } else { + shouldBeTrue(info.arity == 0, curr, "break arities must be 0 if block has no value"); + } + // none or unreachable means a poison value that we should ignore - if consumed, it will error + if (isConcreteWasmType(info.type) && isConcreteWasmType(curr->type)) { + shouldBeEqual(curr->type, info.type, curr, "block+breaks must have right type if breaks return a value"); + } + if (isConcreteWasmType(curr->type) && info.arity && info.type != unreachable) { + shouldBeEqual(curr->type, info.type, curr, "block+breaks must have right type if breaks have arity"); + } + shouldBeTrue(info.arity != Index(-1), curr, "break arities must match"); + if (curr->list.size() > 0) { + auto last = curr->list.back()->type; + if (isConcreteWasmType(last) && info.type != unreachable) { + shouldBeEqual(last, info.type, curr, "block+breaks must have right type if block ends with a reachable value"); + } + if (last == none) { + shouldBeTrue(info.arity == Index(0), curr, "if block ends with a none, breaks cannot send a value of any type"); + } + } + } + breakTargets.erase(curr->name); + } + if (curr->list.size() > 1) { + for (Index i = 0; i < curr->list.size() - 1; i++) { + if (!shouldBeTrue(!isConcreteWasmType(curr->list[i]->type), curr, "non-final block elements returning a value must be drop()ed (binaryen's autodrop option might help you)") && !info.quiet) { + getStream() << "(on index " << i << ":\n" << curr->list[i] << "\n), type: " << curr->list[i]->type << "\n"; + } + } + } + if (curr->list.size() > 0) { + auto backType = curr->list.back()->type; + if (!isConcreteWasmType(curr->type)) { + shouldBeFalse(isConcreteWasmType(backType), curr, "if block is not returning a value, final element should not flow out a value"); + } else { + if (isConcreteWasmType(backType)) { + shouldBeEqual(curr->type, backType, curr, "block with value and last element with value must match types"); + } else { + shouldBeUnequal(backType, none, curr, "block with value must not have last element that is none"); + } + } + } + if (isConcreteWasmType(curr->type)) { + shouldBeTrue(curr->list.size() > 0, curr, "block with a value must not be empty"); + } +} + +void FunctionValidator::visitLoop(Loop *curr) { + if (curr->name.is()) { + noteLabelName(curr->name); + breakTargets.erase(curr->name); + if (breakInfos.count(curr) > 0) { + auto& info = breakInfos[curr]; + shouldBeEqual(info.arity, Index(0), curr, "breaks to a loop cannot pass a value"); + } + } + if (curr->type == none) { + shouldBeFalse(isConcreteWasmType(curr->body->type), curr, "bad body for a loop that has no value"); + } +} + +void FunctionValidator::visitIf(If *curr) { + shouldBeTrue(curr->condition->type == unreachable || curr->condition->type == i32, curr, "if condition must be valid"); + if (!curr->ifFalse) { + shouldBeFalse(isConcreteWasmType(curr->ifTrue->type), curr, "if without else must not return a value in body"); + if (curr->condition->type != unreachable) { + shouldBeEqual(curr->type, none, curr, "if without else and reachable condition must be none"); + } + } else { + if (curr->type != unreachable) { + shouldBeEqualOrFirstIsUnreachable(curr->ifTrue->type, curr->type, curr, "returning if-else's true must have right type"); + shouldBeEqualOrFirstIsUnreachable(curr->ifFalse->type, curr->type, curr, "returning if-else's false must have right type"); + } else { + if (curr->condition->type != unreachable) { + shouldBeEqual(curr->ifTrue->type, unreachable, curr, "unreachable if-else must have unreachable true"); + shouldBeEqual(curr->ifFalse->type, unreachable, curr, "unreachable if-else must have unreachable false"); + } + } + if (isConcreteWasmType(curr->ifTrue->type)) { + shouldBeEqual(curr->type, curr->ifTrue->type, curr, "if type must match concrete ifTrue"); + shouldBeEqualOrFirstIsUnreachable(curr->ifFalse->type, curr->ifTrue->type, curr, "other arm must match concrete ifTrue"); + } + if (isConcreteWasmType(curr->ifFalse->type)) { + shouldBeEqual(curr->type, curr->ifFalse->type, curr, "if type must match concrete ifFalse"); + shouldBeEqualOrFirstIsUnreachable(curr->ifTrue->type, curr->ifFalse->type, curr, "other arm must match concrete ifFalse"); + } + } +} + +void FunctionValidator::noteBreak(Name name, Expression* value, Expression* curr) { + WasmType valueType = none; + Index arity = 0; + if (value) { + valueType = value->type; + shouldBeUnequal(valueType, none, curr, "breaks must have a valid value"); + arity = 1; + } + if (!shouldBeTrue(breakTargets.count(name) > 0, curr, "all break targets must be valid")) return; + auto* target = breakTargets[name]; + if (breakInfos.count(target) == 0) { + breakInfos[target] = BreakInfo(valueType, arity); + } else { + auto& info = breakInfos[target]; + if (info.type == unreachable) { + info.type = valueType; + } else if (valueType != unreachable) { + if (valueType != info.type) { + info.type = none; // a poison value that must not be consumed + } + } + if (arity != info.arity) { + info.arity = Index(-1); // a poison value + } + } +} +void FunctionValidator::visitBreak(Break *curr) { + noteBreak(curr->name, curr->value, curr); + if (curr->condition) { + shouldBeTrue(curr->condition->type == unreachable || curr->condition->type == i32, curr, "break condition must be i32"); + } +} + +void FunctionValidator::visitSwitch(Switch *curr) { + for (auto& target : curr->targets) { + noteBreak(target, curr->value, curr); + } + noteBreak(curr->default_, curr->value, curr); + shouldBeTrue(curr->condition->type == unreachable || curr->condition->type == i32, curr, "br_table condition must be i32"); +} + +void FunctionValidator::visitCall(Call *curr) { + if (!info.validateGlobally) return; + auto* target = getModule()->getFunctionOrNull(curr->target); + if (!shouldBeTrue(!!target, curr, "call target must exist")) { + if (getModule()->getImportOrNull(curr->target) && !info.quiet) { + getStream() << "(perhaps it should be a CallImport instead of Call?)\n"; + } + return; + } + if (!shouldBeTrue(curr->operands.size() == target->params.size(), curr, "call param number must match")) return; + for (size_t i = 0; i < curr->operands.size(); i++) { + if (!shouldBeEqualOrFirstIsUnreachable(curr->operands[i]->type, target->params[i], curr, "call param types must match") && !info.quiet) { + getStream() << "(on argument " << i << ")\n"; + } + } +} + +void FunctionValidator::visitCallImport(CallImport *curr) { + if (!info.validateGlobally) return; + auto* import = getModule()->getImportOrNull(curr->target); + if (!shouldBeTrue(!!import, curr, "call_import target must exist")) return; + if (!shouldBeTrue(!!import->functionType.is(), curr, "called import must be function")) return; + auto* type = getModule()->getFunctionType(import->functionType); + if (!shouldBeTrue(curr->operands.size() == type->params.size(), curr, "call param number must match")) return; + for (size_t i = 0; i < curr->operands.size(); i++) { + if (!shouldBeEqualOrFirstIsUnreachable(curr->operands[i]->type, type->params[i], curr, "call param types must match") && !info.quiet) { + getStream() << "(on argument " << i << ")\n"; + } + } +} + +void FunctionValidator::visitCallIndirect(CallIndirect *curr) { + if (!info.validateGlobally) return; + auto* type = getModule()->getFunctionTypeOrNull(curr->fullType); + if (!shouldBeTrue(!!type, curr, "call_indirect type must exist")) return; + shouldBeEqualOrFirstIsUnreachable(curr->target->type, i32, curr, "indirect call target must be an i32"); + if (!shouldBeTrue(curr->operands.size() == type->params.size(), curr, "call param number must match")) return; + for (size_t i = 0; i < curr->operands.size(); i++) { + if (!shouldBeEqualOrFirstIsUnreachable(curr->operands[i]->type, type->params[i], curr, "call param types must match") && !info.quiet) { + getStream() << "(on argument " << i << ")\n"; + } + } +} + +void FunctionValidator::visitGetLocal(GetLocal* curr) { + shouldBeTrue(isConcreteWasmType(curr->type), curr, "get_local must have a valid type - check what you provided when you constructed the node"); +} + +void FunctionValidator::visitSetLocal(SetLocal *curr) { + shouldBeTrue(curr->index < getFunction()->getNumLocals(), curr, "set_local index must be small enough"); + if (curr->value->type != unreachable) { + if (curr->type != none) { // tee is ok anyhow + shouldBeEqualOrFirstIsUnreachable(curr->value->type, curr->type, curr, "set_local type must be correct"); + } + shouldBeEqual(getFunction()->getLocalType(curr->index), curr->value->type, curr, "set_local type must match function"); + } +} + +void FunctionValidator::visitLoad(Load *curr) { + if (curr->isAtomic) shouldBeTrue(info.features & Feature::Atomics, curr, "Atomic operation (atomics are disabled)"); + shouldBeFalse(curr->isAtomic && !getModule()->memory.shared, curr, "Atomic operation with non-shared memory"); + validateMemBytes(curr->bytes, curr->type, curr); + validateAlignment(curr->align, curr->type, curr->bytes, curr->isAtomic, curr); + shouldBeEqualOrFirstIsUnreachable(curr->ptr->type, i32, curr, "load pointer type must be i32"); + if (curr->isAtomic) shouldBeFalse(curr->signed_, curr, "atomic loads must be unsigned"); +} + +void FunctionValidator::visitStore(Store *curr) { + if (curr->isAtomic) shouldBeTrue(info.features & Feature::Atomics, curr, "Atomic operation (atomics are disabled)"); + shouldBeFalse(curr->isAtomic && !getModule()->memory.shared, curr, "Atomic operation with non-shared memory"); + validateMemBytes(curr->bytes, curr->valueType, curr); + validateAlignment(curr->align, curr->type, curr->bytes, curr->isAtomic, curr); + shouldBeEqualOrFirstIsUnreachable(curr->ptr->type, i32, curr, "store pointer type must be i32"); + shouldBeUnequal(curr->value->type, none, curr, "store value type must not be none"); + shouldBeEqualOrFirstIsUnreachable(curr->value->type, curr->valueType, curr, "store value type must match"); +} + +void FunctionValidator::visitAtomicRMW(AtomicRMW* curr) { + shouldBeTrue(info.features & Feature::Atomics, curr, "Atomic operation (atomics are disabled)"); + shouldBeFalse(!getModule()->memory.shared, curr, "Atomic operation with non-shared memory"); + validateMemBytes(curr->bytes, curr->type, curr); + shouldBeEqualOrFirstIsUnreachable(curr->ptr->type, i32, curr, "AtomicRMW pointer type must be i32"); + shouldBeEqualOrFirstIsUnreachable(curr->type, curr->value->type, curr, "AtomicRMW result type must match operand"); + shouldBeIntOrUnreachable(curr->type, curr, "Atomic operations are only valid on int types"); +} + +void FunctionValidator::visitAtomicCmpxchg(AtomicCmpxchg* curr) { + shouldBeTrue(info.features & Feature::Atomics, curr, "Atomic operation (atomics are disabled)"); + shouldBeFalse(!getModule()->memory.shared, curr, "Atomic operation with non-shared memory"); + validateMemBytes(curr->bytes, curr->type, curr); + shouldBeEqualOrFirstIsUnreachable(curr->ptr->type, i32, curr, "cmpxchg pointer type must be i32"); + if (curr->expected->type != unreachable && curr->replacement->type != unreachable) { + shouldBeEqual(curr->expected->type, curr->replacement->type, curr, "cmpxchg operand types must match"); + } + shouldBeEqualOrFirstIsUnreachable(curr->type, curr->expected->type, curr, "Cmpxchg result type must match expected"); + shouldBeEqualOrFirstIsUnreachable(curr->type, curr->replacement->type, curr, "Cmpxchg result type must match replacement"); + shouldBeIntOrUnreachable(curr->expected->type, curr, "Atomic operations are only valid on int types"); +} + +void FunctionValidator::visitAtomicWait(AtomicWait* curr) { + shouldBeTrue(info.features & Feature::Atomics, curr, "Atomic operation (atomics are disabled)"); + shouldBeFalse(!getModule()->memory.shared, curr, "Atomic operation with non-shared memory"); + shouldBeEqualOrFirstIsUnreachable(curr->type, i32, curr, "AtomicWait must have type i32"); + shouldBeEqualOrFirstIsUnreachable(curr->ptr->type, i32, curr, "AtomicWait pointer type must be i32"); + shouldBeIntOrUnreachable(curr->expected->type, curr, "AtomicWait expected type must be int"); + shouldBeEqualOrFirstIsUnreachable(curr->expected->type, curr->expectedType, curr, "AtomicWait expected type must match operand"); + shouldBeEqualOrFirstIsUnreachable(curr->timeout->type, i64, curr, "AtomicWait timeout type must be i64"); +} + +void FunctionValidator::visitAtomicWake(AtomicWake* curr) { + shouldBeTrue(info.features & Feature::Atomics, curr, "Atomic operation (atomics are disabled)"); + shouldBeFalse(!getModule()->memory.shared, curr, "Atomic operation with non-shared memory"); + shouldBeEqualOrFirstIsUnreachable(curr->type, i32, curr, "AtomicWake must have type i32"); + shouldBeEqualOrFirstIsUnreachable(curr->ptr->type, i32, curr, "AtomicWake pointer type must be i32"); + shouldBeEqualOrFirstIsUnreachable(curr->wakeCount->type, i32, curr, "AtomicWake wakeCount type must be i32"); +} + +void FunctionValidator::validateMemBytes(uint8_t bytes, WasmType type, Expression* curr) { + switch (bytes) { + case 1: + case 2: + case 4: break; + case 8: { + // if we have a concrete type for the load, then we know the size of the mem operation and + // can validate it + if (type != unreachable) { + shouldBeEqual(getWasmTypeSize(type), 8U, curr, "8-byte mem operations are only allowed with 8-byte wasm types"); + } + break; + } + default: info.fail("Memory operations must be 1,2,4, or 8 bytes", curr, getFunction()); + } +} + +void FunctionValidator::visitBinary(Binary *curr) { + if (curr->left->type != unreachable && curr->right->type != unreachable) { + shouldBeEqual(curr->left->type, curr->right->type, curr, "binary child types must be equal"); + } + switch (curr->op) { + case AddInt32: + case SubInt32: + case MulInt32: + case DivSInt32: + case DivUInt32: + case RemSInt32: + case RemUInt32: + case AndInt32: + case OrInt32: + case XorInt32: + case ShlInt32: + case ShrUInt32: + case ShrSInt32: + case RotLInt32: + case RotRInt32: + case EqInt32: + case NeInt32: + case LtSInt32: + case LtUInt32: + case LeSInt32: + case LeUInt32: + case GtSInt32: + case GtUInt32: + case GeSInt32: + case GeUInt32: { + shouldBeEqualOrFirstIsUnreachable(curr->left->type, i32, curr, "i32 op"); + break; + } + case AddInt64: + case SubInt64: + case MulInt64: + case DivSInt64: + case DivUInt64: + case RemSInt64: + case RemUInt64: + case AndInt64: + case OrInt64: + case XorInt64: + case ShlInt64: + case ShrUInt64: + case ShrSInt64: + case RotLInt64: + case RotRInt64: + case EqInt64: + case NeInt64: + case LtSInt64: + case LtUInt64: + case LeSInt64: + case LeUInt64: + case GtSInt64: + case GtUInt64: + case GeSInt64: + case GeUInt64: { + shouldBeEqualOrFirstIsUnreachable(curr->left->type, i64, curr, "i64 op"); + break; + } + case AddFloat32: + case SubFloat32: + case MulFloat32: + case DivFloat32: + case CopySignFloat32: + case MinFloat32: + case MaxFloat32: + case EqFloat32: + case NeFloat32: + case LtFloat32: + case LeFloat32: + case GtFloat32: + case GeFloat32: { + shouldBeEqualOrFirstIsUnreachable(curr->left->type, f32, curr, "f32 op"); + break; + } + case AddFloat64: + case SubFloat64: + case MulFloat64: + case DivFloat64: + case CopySignFloat64: + case MinFloat64: + case MaxFloat64: + case EqFloat64: + case NeFloat64: + case LtFloat64: + case LeFloat64: + case GtFloat64: + case GeFloat64: { + shouldBeEqualOrFirstIsUnreachable(curr->left->type, f64, curr, "f64 op"); + break; + } + default: WASM_UNREACHABLE(); + } +} + +void FunctionValidator::visitUnary(Unary *curr) { + shouldBeUnequal(curr->value->type, none, curr, "unaries must not receive a none as their input"); + if (curr->value->type == unreachable) return; // nothing to check + switch (curr->op) { + case ClzInt32: + case CtzInt32: + case PopcntInt32: { + shouldBeEqual(curr->value->type, i32, curr, "i32 unary value type must be correct"); + break; + } + case ClzInt64: + case CtzInt64: + case PopcntInt64: { + shouldBeEqual(curr->value->type, i64, curr, "i64 unary value type must be correct"); + break; + } + case NegFloat32: + case AbsFloat32: + case CeilFloat32: + case FloorFloat32: + case TruncFloat32: + case NearestFloat32: + case SqrtFloat32: { + shouldBeEqual(curr->value->type, f32, curr, "f32 unary value type must be correct"); + break; + } + case NegFloat64: + case AbsFloat64: + case CeilFloat64: + case FloorFloat64: + case TruncFloat64: + case NearestFloat64: + case SqrtFloat64: { + shouldBeEqual(curr->value->type, f64, curr, "f64 unary value type must be correct"); + break; + } + case EqZInt32: { + shouldBeTrue(curr->value->type == i32, curr, "i32.eqz input must be i32"); + break; + } + case EqZInt64: { + shouldBeTrue(curr->value->type == i64, curr, "i64.eqz input must be i64"); + break; + } + case ExtendSInt32: + case ExtendUInt32: + case ExtendS8Int32: + case ExtendS16Int32: { + shouldBeEqual(curr->value->type, i32, curr, "extend type must be correct"); break; + } + case ExtendS8Int64: + case ExtendS16Int64: + case ExtendS32Int64: { + shouldBeEqual(curr->value->type, i64, curr, "extend type must be correct"); break; + } + case WrapInt64: shouldBeEqual(curr->value->type, i64, curr, "wrap type must be correct"); break; + case TruncSFloat32ToInt32: shouldBeEqual(curr->value->type, f32, curr, "trunc type must be correct"); break; + case TruncSFloat32ToInt64: shouldBeEqual(curr->value->type, f32, curr, "trunc type must be correct"); break; + case TruncUFloat32ToInt32: shouldBeEqual(curr->value->type, f32, curr, "trunc type must be correct"); break; + case TruncUFloat32ToInt64: shouldBeEqual(curr->value->type, f32, curr, "trunc type must be correct"); break; + case TruncSFloat64ToInt32: shouldBeEqual(curr->value->type, f64, curr, "trunc type must be correct"); break; + case TruncSFloat64ToInt64: shouldBeEqual(curr->value->type, f64, curr, "trunc type must be correct"); break; + case TruncUFloat64ToInt32: shouldBeEqual(curr->value->type, f64, curr, "trunc type must be correct"); break; + case TruncUFloat64ToInt64: shouldBeEqual(curr->value->type, f64, curr, "trunc type must be correct"); break; + case ReinterpretFloat32: shouldBeEqual(curr->value->type, f32, curr, "reinterpret/f32 type must be correct"); break; + case ReinterpretFloat64: shouldBeEqual(curr->value->type, f64, curr, "reinterpret/f64 type must be correct"); break; + case ConvertUInt32ToFloat32: shouldBeEqual(curr->value->type, i32, curr, "convert type must be correct"); break; + case ConvertUInt32ToFloat64: shouldBeEqual(curr->value->type, i32, curr, "convert type must be correct"); break; + case ConvertSInt32ToFloat32: shouldBeEqual(curr->value->type, i32, curr, "convert type must be correct"); break; + case ConvertSInt32ToFloat64: shouldBeEqual(curr->value->type, i32, curr, "convert type must be correct"); break; + case ConvertUInt64ToFloat32: shouldBeEqual(curr->value->type, i64, curr, "convert type must be correct"); break; + case ConvertUInt64ToFloat64: shouldBeEqual(curr->value->type, i64, curr, "convert type must be correct"); break; + case ConvertSInt64ToFloat32: shouldBeEqual(curr->value->type, i64, curr, "convert type must be correct"); break; + case ConvertSInt64ToFloat64: shouldBeEqual(curr->value->type, i64, curr, "convert type must be correct"); break; + case PromoteFloat32: shouldBeEqual(curr->value->type, f32, curr, "promote type must be correct"); break; + case DemoteFloat64: shouldBeEqual(curr->value->type, f64, curr, "demote type must be correct"); break; + case ReinterpretInt32: shouldBeEqual(curr->value->type, i32, curr, "reinterpret/i32 type must be correct"); break; + case ReinterpretInt64: shouldBeEqual(curr->value->type, i64, curr, "reinterpret/i64 type must be correct"); break; + default: abort(); + } +} + +void FunctionValidator::visitSelect(Select* curr) { + shouldBeUnequal(curr->ifTrue->type, none, curr, "select left must be valid"); + shouldBeUnequal(curr->ifFalse->type, none, curr, "select right must be valid"); + shouldBeTrue(curr->condition->type == unreachable || curr->condition->type == i32, curr, "select condition must be valid"); + if (curr->ifTrue->type != unreachable && curr->ifFalse->type != unreachable) { + shouldBeEqual(curr->ifTrue->type, curr->ifFalse->type, curr, "select sides must be equal"); + } +} + +void FunctionValidator::visitDrop(Drop* curr) { + shouldBeTrue(isConcreteWasmType(curr->value->type) || curr->value->type == unreachable, curr, "can only drop a valid value"); +} + +void FunctionValidator::visitReturn(Return* curr) { + if (curr->value) { + if (returnType == unreachable) { + returnType = curr->value->type; + } else if (curr->value->type != unreachable) { + shouldBeEqual(curr->value->type, returnType, curr, "function results must match"); + } + } else { + returnType = none; + } +} + +void FunctionValidator::visitHost(Host* curr) { + switch (curr->op) { + case GrowMemory: { + shouldBeEqual(curr->operands.size(), size_t(1), curr, "grow_memory must have 1 operand"); + shouldBeEqualOrFirstIsUnreachable(curr->operands[0]->type, i32, curr, "grow_memory must have i32 operand"); + break; + } + case PageSize: + case CurrentMemory: + case HasFeature: break; + default: WASM_UNREACHABLE(); + } +} + +void FunctionValidator::visitFunction(Function *curr) { + // if function has no result, it is ignored + // if body is unreachable, it might be e.g. a return + if (curr->body->type != unreachable) { + shouldBeEqual(curr->result, curr->body->type, curr->body, "function body type must match, if function returns"); + } + if (returnType != unreachable) { + shouldBeEqual(curr->result, returnType, curr->body, "function result must match, if function has returns"); + } + shouldBeTrue(breakTargets.empty(), curr->body, "all named break targets must exist"); + returnType = unreachable; + labelNames.clear(); + // expressions must not be seen more than once + struct Walker : public PostWalker> { + std::unordered_set& seen; + std::vector dupes; + + Walker(std::unordered_set& seen) : seen(seen) {} + + void visitExpression(Expression* curr) { + bool inserted; + std::tie(std::ignore, inserted) = seen.insert(curr); + if (!inserted) dupes.push_back(curr); + } + }; + Walker walker(seenExpressions); + walker.walk(curr->body); + for (auto* bad : walker.dupes) { + info.fail("expression seen more than once in the tree", bad, getFunction()); + } +} + +static bool checkOffset(Expression* curr, Address add, Address max) { + if (curr->is()) return true; + auto* c = curr->dynCast(); + if (!c) return false; + uint64_t raw = c->value.getInteger(); + if (raw > std::numeric_limits::max()) { + return false; + } + if (raw + uint64_t(add) > std::numeric_limits::max()) { + return false; + } + Address offset = raw; + return offset + add <= max; +} + +void FunctionValidator::validateAlignment(size_t align, WasmType type, Index bytes, + bool isAtomic, Expression* curr) { + if (isAtomic) { + shouldBeEqual(align, (size_t)bytes, curr, "atomic accesses must have natural alignment"); + return; + } + switch (align) { + case 1: + case 2: + case 4: + case 8: break; + default:{ + info.fail("bad alignment: " + std::to_string(align), curr, getFunction()); + break; + } + } + shouldBeTrue(align <= bytes, curr, "alignment must not exceed natural"); + switch (type) { + case i32: + case f32: { + shouldBeTrue(align <= 4, curr, "alignment must not exceed natural"); + break; + } + case i64: + case f64: { + shouldBeTrue(align <= 8, curr, "alignment must not exceed natural"); + break; + } + default: {} + } +} + +static void validateBinaryenIR(Module& wasm, ValidationInfo& info) { + struct BinaryenIRValidator : public PostWalker> { + ValidationInfo& info; + + BinaryenIRValidator(ValidationInfo& info) : info(info) {} + + void visitExpression(Expression* curr) { + // check if a node type is 'stale', i.e., we forgot to finalize() the node. + auto oldType = curr->type; + ReFinalizeNode().visit(curr); + auto newType = curr->type; + if (newType != oldType) { + // We accept concrete => undefined, + // e.g. + // + // (drop (block (result i32) (unreachable))) + // + // The block has an added type, not derived from the ast itself, so it is + // ok for it to be either i32 or unreachable. + if (!(isConcreteWasmType(oldType) && newType == unreachable)) { + std::ostringstream ss; + ss << "stale type found in " << (getFunction() ? getFunction()->name : Name("(global scope)")) << " on " << curr << "\n(marked as " << printWasmType(oldType) << ", should be " << printWasmType(newType) << ")\n"; + info.fail(ss.str(), curr, getFunction()); + } + curr->type = oldType; + } + } + }; + BinaryenIRValidator binaryenIRValidator(info); + binaryenIRValidator.walkModule(&wasm); +} + +// Main validator class + +static void validateImports(Module& module, ValidationInfo& info) { + for (auto& curr : module.imports) { + if (curr->kind == ExternalKind::Function) { + if (info.validateWeb) { + auto* functionType = module.getFunctionType(curr->functionType); + info.shouldBeUnequal(functionType->result, i64, curr->name, "Imported function must not have i64 return type"); + for (WasmType param : functionType->params) { + info.shouldBeUnequal(param, i64, curr->name, "Imported function must not have i64 parameters"); + } + } + } + if (curr->kind == ExternalKind::Table) { + info.shouldBeTrue(module.table.imported, curr->name, "Table import record exists but table is not marked as imported"); + } + if (curr->kind == ExternalKind::Memory) { + info.shouldBeTrue(module.memory.imported, curr->name, "Memory import record exists but memory is not marked as imported"); + } + } +} + +static void validateExports(Module& module, ValidationInfo& info) { + for (auto& curr : module.exports) { + if (curr->kind == ExternalKind::Function) { + if (info.validateWeb) { + Function* f = module.getFunction(curr->value); + info.shouldBeUnequal(f->result, i64, f->name, "Exported function must not have i64 return type"); + for (auto param : f->params) { + info.shouldBeUnequal(param, i64, f->name, "Exported function must not have i64 parameters"); + } + } + } + } + std::set exportNames; + for (auto& exp : module.exports) { + Name name = exp->value; + if (exp->kind == ExternalKind::Function) { + bool found = false; + for (auto& func : module.functions) { + if (func->name == name) { + found = true; + break; + } + } + info.shouldBeTrue(found, name, "module function exports must be found"); + } else if (exp->kind == ExternalKind::Global) { + info.shouldBeTrue(module.getGlobalOrNull(name), name, "module global exports must be found"); + } else if (exp->kind == ExternalKind::Table) { + info.shouldBeTrue(name == Name("0") || name == module.table.name, name, "module table exports must be found"); + } else if (exp->kind == ExternalKind::Memory) { + info.shouldBeTrue(name == Name("0") || name == module.memory.name, name, "module memory exports must be found"); + } else { + WASM_UNREACHABLE(); + } + Name exportName = exp->name; + info.shouldBeFalse(exportNames.count(exportName) > 0, exportName, "module exports must be unique"); + exportNames.insert(exportName); + } +} + +static void validateGlobals(Module& module, ValidationInfo& info) { + for (auto& curr : module.globals) { + info.shouldBeTrue(curr->init != nullptr, curr->name, "global init must be non-null"); + info.shouldBeTrue(curr->init->is() || curr->init->is(), curr->name, "global init must be valid"); + if (!info.shouldBeEqual(curr->type, curr->init->type, curr->init, "global init must have correct type") && !info.quiet) { + info.getStream(nullptr) << "(on global " << curr->name << ")\n"; + } + } +} + +static void validateMemory(Module& module, ValidationInfo& info) { + auto& curr = module.memory; + info.shouldBeFalse(curr.initial > curr.max, "memory", "memory max >= initial"); + info.shouldBeTrue(curr.max <= Memory::kMaxSize, "memory", "max memory must be <= 4GB"); + info.shouldBeTrue(!curr.shared || curr.hasMax(), "memory", "shared memory must have max size"); + if (curr.shared) info.shouldBeTrue(info.features & Feature::Atomics, "memory", "memory is shared, but atomics are disabled"); + for (auto& segment : curr.segments) { + if (!info.shouldBeEqual(segment.offset->type, i32, segment.offset, "segment offset should be i32")) continue; + info.shouldBeTrue(checkOffset(segment.offset, segment.data.size(), module.memory.initial * Memory::kPageSize), segment.offset, "segment offset should be reasonable"); + Index size = segment.data.size(); + info.shouldBeTrue(size <= curr.initial * Memory::kPageSize, segment.data.size(), "segment size should fit in memory (initial)"); + if (segment.offset->is()) { + Index start = segment.offset->cast()->value.geti32(); + Index end = start + size; + info.shouldBeTrue(end <= curr.initial * Memory::kPageSize, segment.data.size(), "segment size should fit in memory (end)"); + } + } +} + +static void validateTable(Module& module, ValidationInfo& info) { + auto& curr = module.table; + for (auto& segment : curr.segments) { + info.shouldBeEqual(segment.offset->type, i32, segment.offset, "segment offset should be i32"); + info.shouldBeTrue(checkOffset(segment.offset, segment.data.size(), module.table.initial * Table::kPageSize), segment.offset, "segment offset should be reasonable"); + for (auto name : segment.data) { + info.shouldBeTrue(module.getFunctionOrNull(name) || module.getImportOrNull(name), name, "segment name should be valid"); + } + } +} + +static void validateModule(Module& module, ValidationInfo& info) { + // start + if (module.start.is()) { + auto func = module.getFunctionOrNull(module.start); + if (info.shouldBeTrue(func != nullptr, module.start, "start must be found")) { + info.shouldBeTrue(func->params.size() == 0, module.start, "start must have 0 params"); + info.shouldBeTrue(func->result == none, module.start, "start must not return a value"); + } + } +} + +// TODO: If we want the validator to be part of libwasm rather than libpasses, then +// Using PassRunner::getPassDebug causes a circular dependence. We should fix that, +// perhaps by moving some of the pass infrastructure into libsupport. +bool WasmValidator::validate(Module& module, FeatureSet features, Flags flags) { + ValidationInfo info; + info.validateWeb = flags & Web; + info.validateGlobally = flags & Globally; + info.features = features; + info.quiet = flags & Quiet; + // parallel wasm logic validation + PassRunner runner(&module); + runner.add(&info); + runner.setIsNested(true); + runner.run(); + // validate globally + if (info.validateGlobally) { + validateImports(module, info); + validateExports(module, info); + validateGlobals(module, info); + validateMemory(module, info); + validateTable(module, info); + validateModule(module, info); + } + // validate additional internal IR details when in pass-debug mode + if (PassRunner::getPassDebug()) { + validateBinaryenIR(module, info); + } + // print all the data + if (!info.valid.load() && !info.quiet) { + for (auto& func : module.functions) { + std::cerr << info.getStream(func.get()).str(); + } + std::cerr << info.getStream(nullptr).str(); + } + return info.valid.load(); +} + +} // namespace wasm diff --git a/src/binaryen/src/wasm/wasm.cpp b/src/binaryen/src/wasm/wasm.cpp new file mode 100644 index 0000000000..8739d96f70 --- /dev/null +++ b/src/binaryen/src/wasm/wasm.cpp @@ -0,0 +1,775 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wasm.h" +#include "wasm-traversal.h" +#include "ir/branch-utils.h" + +namespace wasm { + +// shared constants + +Name WASM("wasm"), + RETURN_FLOW("*return:)*"); + +namespace BinaryConsts { +namespace UserSections { +const char* Name = "name"; +const char* SourceMapUrl = "sourceMappingURL"; +} +} + +Name GROW_WASM_MEMORY("__growWasmMemory"), + MEMORY_BASE("memoryBase"), + TABLE_BASE("tableBase"), + NEW_SIZE("newSize"), + MODULE("module"), + START("start"), + FUNC("func"), + PARAM("param"), + RESULT("result"), + MEMORY("memory"), + DATA("data"), + SEGMENT("segment"), + EXPORT("export"), + IMPORT("import"), + TABLE("table"), + ELEM("elem"), + LOCAL("local"), + TYPE("type"), + CALL("call"), + CALL_IMPORT("call_import"), + CALL_INDIRECT("call_indirect"), + BLOCK("block"), + BR_IF("br_if"), + THEN("then"), + ELSE("else"), + _NAN("NaN"), + _INFINITY("Infinity"), + NEG_INFINITY("-infinity"), + NEG_NAN("-nan"), + CASE("case"), + BR("br"), + ANYFUNC("anyfunc"), + FAKE_RETURN("fake_return_waka123"), + MUT("mut"), + SPECTEST("spectest"), + PRINT("print"), + EXIT("exit"); + +// Expressions + +const char* getExpressionName(Expression* curr) { + switch (curr->_id) { + case Expression::Id::InvalidId: WASM_UNREACHABLE(); + case Expression::Id::BlockId: return "block"; + case Expression::Id::IfId: return "if"; + case Expression::Id::LoopId: return "loop"; + case Expression::Id::BreakId: return "break"; + case Expression::Id::SwitchId: return "switch"; + case Expression::Id::CallId: return "call"; + case Expression::Id::CallImportId: return "call_import"; + case Expression::Id::CallIndirectId: return "call_indirect"; + case Expression::Id::GetLocalId: return "get_local"; + case Expression::Id::SetLocalId: return "set_local"; + case Expression::Id::GetGlobalId: return "get_global"; + case Expression::Id::SetGlobalId: return "set_global"; + case Expression::Id::LoadId: return "load"; + case Expression::Id::StoreId: return "store"; + case Expression::Id::ConstId: return "const"; + case Expression::Id::UnaryId: return "unary"; + case Expression::Id::BinaryId: return "binary"; + case Expression::Id::SelectId: return "select"; + case Expression::Id::DropId: return "drop"; + case Expression::Id::ReturnId: return "return"; + case Expression::Id::HostId: return "host"; + case Expression::Id::NopId: return "nop"; + case Expression::Id::UnreachableId: return "unreachable"; + default: WASM_UNREACHABLE(); + } +} + +// core AST type checking + +struct TypeSeeker : public PostWalker { + Expression* target; // look for this one + Name targetName; + std::vector types; + + + TypeSeeker(Expression* target, Name targetName) : target(target), targetName(targetName) { + Expression* temp = target; + walk(temp); + } + + void visitBreak(Break* curr) { + if (curr->name == targetName) { + types.push_back(curr->value ? curr->value->type : none); + } + } + + void visitSwitch(Switch* curr) { + for (auto name : curr->targets) { + if (name == targetName) types.push_back(curr->value ? curr->value->type : none); + } + if (curr->default_ == targetName) types.push_back(curr->value ? curr->value->type : none); + } + + void visitBlock(Block* curr) { + if (curr == target) { + if (curr->list.size() > 0) { + types.push_back(curr->list.back()->type); + } else { + types.push_back(none); + } + } else if (curr->name == targetName) { + types.clear(); // ignore all breaks til now, they were captured by someone with the same name + } + } + + void visitLoop(Loop* curr) { + if (curr == target) { + types.push_back(curr->body->type); + } else if (curr->name == targetName) { + types.clear(); // ignore all breaks til now, they were captured by someone with the same name + } + } +}; + +static WasmType mergeTypes(std::vector& types) { + WasmType type = unreachable; + for (auto other : types) { + // once none, stop. it then indicates a poison value, that must not be consumed + // and ignore unreachable + if (type != none) { + if (other == none) { + type = none; + } else if (other != unreachable) { + if (type == unreachable) { + type = other; + } else if (type != other) { + type = none; // poison value, we saw multiple types; this should not be consumed + } + } + } + } + return type; +} + +// a block is unreachable if one of its elements is unreachable, +// and there are no branches to it +static void handleUnreachable(Block* block) { + if (block->type == unreachable) return; // nothing to do + if (block->list.size() == 0) return; // nothing to do + // if we are concrete, stop - even an unreachable child + // won't change that (since we have a break with a value, + // or the final child flows out a value) + if (isConcreteWasmType(block->type)) return; + // look for an unreachable child + for (auto* child : block->list) { + if (child->type == unreachable) { + // there is an unreachable child, so we are unreachable, unless we have a break + if (!BranchUtils::BranchSeeker::hasNamed(block, block->name)) { + block->type = unreachable; + } + return; + } + } +} + +void Block::finalize(WasmType type_) { + type = type_; + if (type == none && list.size() > 0) { + handleUnreachable(this); + } +} + +void Block::finalize() { + if (!name.is()) { + if (list.size() > 0) { + // nothing branches here, so this is easy + // normally the type is the type of the final child + type = list.back()->type; + // and even if we have an unreachable child somewhere, + // we still mark ourselves as having that type, + // (block (result i32) + // (return) + // (i32.const 10) + // ) + if (isConcreteWasmType(type)) return; + // if we are unreachable, we are done + if (type == unreachable) return; + // we may still be unreachable if we have an unreachable + // child + for (auto* child : list) { + if (child->type == unreachable) { + type = unreachable; + return; + } + } + } else { + type = none; + } + return; + } + + TypeSeeker seeker(this, this->name); + type = mergeTypes(seeker.types); + handleUnreachable(this); +} + +void If::finalize(WasmType type_) { + type = type_; + if (type == none && (condition->type == unreachable || (ifFalse && ifTrue->type == unreachable && ifFalse->type == unreachable))) { + type = unreachable; + } +} + +void If::finalize() { + if (ifFalse) { + if (ifTrue->type == ifFalse->type) { + type = ifTrue->type; + } else if (isConcreteWasmType(ifTrue->type) && ifFalse->type == unreachable) { + type = ifTrue->type; + } else if (isConcreteWasmType(ifFalse->type) && ifTrue->type == unreachable) { + type = ifFalse->type; + } else { + type = none; + } + } else { + type = none; // if without else + } + // if the arms return a value, leave it even if the condition + // is unreachable, we still mark ourselves as having that type, e.g. + // (if (result i32) + // (unreachable) + // (i32.const 10) + // (i32.const 20 + // ) + // otherwise, if the condition is unreachable, so is the if + if (type == none && condition->type == unreachable) { + type = unreachable; + } +} + +void Loop::finalize(WasmType type_) { + type = type_; + if (type == none && body->type == unreachable) { + type = unreachable; + } +} + +void Loop::finalize() { + type = body->type; +} + +void Break::finalize() { + if (condition) { + if (condition->type == unreachable) { + type = unreachable; + } else if (value) { + type = value->type; + } else { + type = none; + } + } else { + type = unreachable; + } +} + +void Switch::finalize() { + type = unreachable; +} + +template +void handleUnreachableOperands(T* curr) { + for (auto* child : curr->operands) { + if (child->type == unreachable) { + curr->type = unreachable; + break; + } + } +} + +void Call::finalize() { + handleUnreachableOperands(this); +} + +void CallImport::finalize() { + handleUnreachableOperands(this); +} + +void CallIndirect::finalize() { + handleUnreachableOperands(this); + if (target->type == unreachable) { + type = unreachable; + } +} + +bool FunctionType::structuralComparison(FunctionType& b) { + if (result != b.result) return false; + if (params.size() != b.params.size()) return false; + for (size_t i = 0; i < params.size(); i++) { + if (params[i] != b.params[i]) return false; + } + return true; +} + +bool FunctionType::operator==(FunctionType& b) { + if (name != b.name) return false; + return structuralComparison(b); +} +bool FunctionType::operator!=(FunctionType& b) { + return !(*this == b); +} + +bool SetLocal::isTee() { + return type != none; +} + +void SetLocal::setTee(bool is) { + if (is) type = value->type; + else type = none; + finalize(); // type may need to be unreachable +} + +void SetLocal::finalize() { + if (value->type == unreachable) { + type = unreachable; + } else if (isTee()) { + type = value->type; + } else { + type = none; + } +} + +void SetGlobal::finalize() { + if (value->type == unreachable) { + type = unreachable; + } +} + +void Load::finalize() { + if (ptr->type == unreachable) { + type = unreachable; + } +} + +void Store::finalize() { + assert(valueType != none); // must be set + if (ptr->type == unreachable || value->type == unreachable) { + type = unreachable; + } else { + type = none; + } +} + +void AtomicRMW::finalize() { + if (ptr->type == unreachable || value->type == unreachable) { + type = unreachable; + } +} + +void AtomicCmpxchg::finalize() { + if (ptr->type == unreachable || expected->type == unreachable || replacement->type == unreachable) { + type = unreachable; + } +} + +void AtomicWait::finalize() { + type = i32; + if (ptr->type == unreachable || expected->type == unreachable || timeout->type == unreachable) { + type = unreachable; + } +} + +void AtomicWake::finalize() { + type = i32; + if (ptr->type == unreachable || wakeCount->type == unreachable) { + type = unreachable; + } +} + +Const* Const::set(Literal value_) { + value = value_; + type = value.type; + return this; +} + +void Const::finalize() { + type = value.type; +} + +bool Unary::isRelational() { + return op == EqZInt32 || op == EqZInt64; +} + +void Unary::finalize() { + if (value->type == unreachable) { + type = unreachable; + return; + } + switch (op) { + case ClzInt32: + case CtzInt32: + case PopcntInt32: + case NegFloat32: + case AbsFloat32: + case CeilFloat32: + case FloorFloat32: + case TruncFloat32: + case NearestFloat32: + case SqrtFloat32: + case ClzInt64: + case CtzInt64: + case PopcntInt64: + case NegFloat64: + case AbsFloat64: + case CeilFloat64: + case FloorFloat64: + case TruncFloat64: + case NearestFloat64: + case SqrtFloat64: type = value->type; break; + case EqZInt32: + case EqZInt64: type = i32; break; + case ExtendS8Int32: case ExtendS16Int32: type = i32; break; + case ExtendSInt32: case ExtendUInt32: case ExtendS8Int64: case ExtendS16Int64: case ExtendS32Int64: type = i64; break; + case WrapInt64: type = i32; break; + case PromoteFloat32: type = f64; break; + case DemoteFloat64: type = f32; break; + case TruncSFloat32ToInt32: + case TruncUFloat32ToInt32: + case TruncSFloat64ToInt32: + case TruncUFloat64ToInt32: + case ReinterpretFloat32: type = i32; break; + case TruncSFloat32ToInt64: + case TruncUFloat32ToInt64: + case TruncSFloat64ToInt64: + case TruncUFloat64ToInt64: + case ReinterpretFloat64: type = i64; break; + case ReinterpretInt32: + case ConvertSInt32ToFloat32: + case ConvertUInt32ToFloat32: + case ConvertSInt64ToFloat32: + case ConvertUInt64ToFloat32: type = f32; break; + case ReinterpretInt64: + case ConvertSInt32ToFloat64: + case ConvertUInt32ToFloat64: + case ConvertSInt64ToFloat64: + case ConvertUInt64ToFloat64: type = f64; break; + default: std::cerr << "waka " << op << '\n'; WASM_UNREACHABLE(); + } +} + +bool Binary::isRelational() { + switch (op) { + case EqFloat64: + case NeFloat64: + case LtFloat64: + case LeFloat64: + case GtFloat64: + case GeFloat64: + case EqInt32: + case NeInt32: + case LtSInt32: + case LtUInt32: + case LeSInt32: + case LeUInt32: + case GtSInt32: + case GtUInt32: + case GeSInt32: + case GeUInt32: + case EqInt64: + case NeInt64: + case LtSInt64: + case LtUInt64: + case LeSInt64: + case LeUInt64: + case GtSInt64: + case GtUInt64: + case GeSInt64: + case GeUInt64: + case EqFloat32: + case NeFloat32: + case LtFloat32: + case LeFloat32: + case GtFloat32: + case GeFloat32: return true; + default: return false; + } +} + +void Binary::finalize() { + assert(left && right); + if (left->type == unreachable || right->type == unreachable) { + type = unreachable; + } else if (isRelational()) { + type = i32; + } else { + type = left->type; + } +} + +void Select::finalize() { + assert(ifTrue && ifFalse); + if (ifTrue->type == unreachable || ifFalse->type == unreachable || condition->type == unreachable) { + type = unreachable; + } else { + type = ifTrue->type; + } +} + +void Drop::finalize() { + if (value->type == unreachable) { + type = unreachable; + } else { + type = none; + } +} + +void Host::finalize() { + switch (op) { + case PageSize: case CurrentMemory: case HasFeature: { + type = i32; + break; + } + case GrowMemory: { + // if the single operand is not reachable, so are we + if (operands[0]->type == unreachable) { + type = unreachable; + } else { + type = i32; + } + break; + } + default: WASM_UNREACHABLE(); + } +} + +size_t Function::getNumParams() { + return params.size(); +} + +size_t Function::getNumVars() { + return vars.size(); +} + +size_t Function::getNumLocals() { + return params.size() + vars.size(); +} + +bool Function::isParam(Index index) { + return index < params.size(); +} + +bool Function::isVar(Index index) { + return index >= params.size(); +} + +bool Function::hasLocalName(Index index) const { + return localNames.find(index) != localNames.end(); +} + +Name Function::getLocalName(Index index) { + return localNames.at(index); +} + +Name Function::getLocalNameOrDefault(Index index) { + auto nameIt = localNames.find(index); + if (nameIt != localNames.end()) { + return nameIt->second; + } + // this is an unnamed local + return Name(); +} + +Name Function::getLocalNameOrGeneric(Index index) { + auto nameIt = localNames.find(index); + if (nameIt != localNames.end()) { + return nameIt->second; + } + return Name::fromInt(index); +} + +Index Function::getLocalIndex(Name name) { + assert(localIndices.count(name) > 0); + return localIndices[name]; +} + +Index Function::getVarIndexBase() { + return params.size(); +} + +WasmType Function::getLocalType(Index index) { + if (isParam(index)) { + return params[index]; + } else if (isVar(index)) { + return vars[index - getVarIndexBase()]; + } else { + WASM_UNREACHABLE(); + } +} + +FunctionType* Module::getFunctionType(Name name) { + assert(functionTypesMap.count(name)); + return functionTypesMap[name]; +} + +Import* Module::getImport(Name name) { + assert(importsMap.count(name)); + return importsMap[name]; +} + +Export* Module::getExport(Name name) { + assert(exportsMap.count(name)); + return exportsMap[name]; +} + +Function* Module::getFunction(Name name) { + assert(functionsMap.count(name)); + return functionsMap[name]; +} + +Global* Module::getGlobal(Name name) { + assert(globalsMap.count(name)); + return globalsMap[name]; +} + +FunctionType* Module::getFunctionTypeOrNull(Name name) { + if (!functionTypesMap.count(name)) + return nullptr; + return functionTypesMap[name]; +} + +Import* Module::getImportOrNull(Name name) { + if (!importsMap.count(name)) + return nullptr; + return importsMap[name]; +} + +Export* Module::getExportOrNull(Name name) { + if (!exportsMap.count(name)) + return nullptr; + return exportsMap[name]; +} + +Function* Module::getFunctionOrNull(Name name) { + if (!functionsMap.count(name)) + return nullptr; + return functionsMap[name]; +} + +Global* Module::getGlobalOrNull(Name name) { + if (!globalsMap.count(name)) + return nullptr; + return globalsMap[name]; +} + +void Module::addFunctionType(FunctionType* curr) { + assert(curr->name.is()); + functionTypes.push_back(std::unique_ptr(curr)); + assert(functionTypesMap.find(curr->name) == functionTypesMap.end()); + functionTypesMap[curr->name] = curr; +} + +void Module::addImport(Import* curr) { + assert(curr->name.is()); + imports.push_back(std::unique_ptr(curr)); + assert(importsMap.find(curr->name) == importsMap.end()); + importsMap[curr->name] = curr; +} + +void Module::addExport(Export* curr) { + assert(curr->name.is()); + exports.push_back(std::unique_ptr(curr)); + assert(exportsMap.find(curr->name) == exportsMap.end()); + exportsMap[curr->name] = curr; +} + +void Module::addFunction(Function* curr) { + assert(curr->name.is()); + functions.push_back(std::unique_ptr(curr)); + assert(functionsMap.find(curr->name) == functionsMap.end()); + functionsMap[curr->name] = curr; +} + +void Module::addGlobal(Global* curr) { + assert(curr->name.is()); + globals.push_back(std::unique_ptr(curr)); + assert(globalsMap.find(curr->name) == globalsMap.end()); + globalsMap[curr->name] = curr; +} + +void Module::addStart(const Name& s) { + start = s; +} + +void Module::removeImport(Name name) { + for (size_t i = 0; i < imports.size(); i++) { + if (imports[i]->name == name) { + imports.erase(imports.begin() + i); + break; + } + } + importsMap.erase(name); +} + +void Module::removeExport(Name name) { + for (size_t i = 0; i < exports.size(); i++) { + if (exports[i]->name == name) { + exports.erase(exports.begin() + i); + break; + } + } + exportsMap.erase(name); +} + +void Module::removeFunction(Name name) { + for (size_t i = 0; i < functions.size(); i++) { + if (functions[i]->name == name) { + functions.erase(functions.begin() + i); + break; + } + } + functionsMap.erase(name); +} + + // TODO: remove* for other elements + +void Module::updateMaps() { + functionsMap.clear(); + for (auto& curr : functions) { + functionsMap[curr->name] = curr.get(); + } + functionTypesMap.clear(); + for (auto& curr : functionTypes) { + functionTypesMap[curr->name] = curr.get(); + } + importsMap.clear(); + for (auto& curr : imports) { + importsMap[curr->name] = curr.get(); + } + exportsMap.clear(); + for (auto& curr : exports) { + exportsMap[curr->name] = curr.get(); + } + globalsMap.clear(); + for (auto& curr : globals) { + globalsMap[curr->name] = curr.get(); + } +} + +} // namespace wasm diff --git a/src/binaryen/src/wasm2asm.h b/src/binaryen/src/wasm2asm.h new file mode 100644 index 0000000000..05896aacd1 --- /dev/null +++ b/src/binaryen/src/wasm2asm.h @@ -0,0 +1,1748 @@ +/* + * Copyright 2015 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// WebAssembly-to-asm.js translator. Uses the Emscripten optimizer +// infrastructure. +// + +#ifndef wasm_wasm2asm_h +#define wasm_wasm2asm_h + +#include +#include + +#include "asmjs/shared-constants.h" +#include "wasm.h" +#include "wasm-builder.h" +#include "emscripten-optimizer/optimizer.h" +#include "mixed_arena.h" +#include "asm_v_wasm.h" +#include "ir/utils.h" +#include "passes/passes.h" + +namespace wasm { + +using namespace cashew; + +IString ASM_FUNC("asmFunc"), + ABORT_FUNC("abort"), + FUNCTION_TABLE("FUNCTION_TABLE"), + NO_RESULT("wasm2asm$noresult"), // no result at all + EXPRESSION_RESULT("wasm2asm$expresult"); // result in an expression, no temp var + +// Appends extra to block, flattening out if extra is a block as well +void flattenAppend(Ref ast, Ref extra) { + int index; + if (ast[0] == BLOCK || ast[0] == TOPLEVEL) index = 1; + else if (ast[0] == DEFUN) index = 3; + else abort(); + if (extra->isArray() && extra[0] == BLOCK) { + for (size_t i = 0; i < extra[1]->size(); i++) { + ast[index]->push_back(extra[1][i]); + } + } else { + ast[index]->push_back(extra); + } +} + +// +// Wasm2AsmBuilder - converts a WebAssembly module into asm.js +// +// In general, asm.js => wasm is very straightforward, as can +// be seen in asm2wasm.h. Just a single pass, plus a little +// state bookkeeping (breakStack, etc.), and a few after-the +// fact corrections for imports, etc. However, wasm => asm.js +// is tricky because wasm has statements == expressions, or in +// other words, things like `break` and `if` can show up +// in places where asm.js can't handle them, like inside an +// a loop's condition check. +// +// We therefore need the ability to lower an expression into +// a block of statements, and we keep statementizing until we +// reach a context in which we can emit those statments. This +// requires that we create temp variables to store values +// that would otherwise flow directly into their targets if +// we were an expression (e.g. if a loop's condition check +// is a bunch of statements, we execute those statements, +// then use the computed value in the loop's condition; +// we might also be able to avoid an assign to a temp var +// at the end of those statements, and put just that +// value in the loop's condition). +// +// It is possible to do this in a single pass, if we just +// allocate temp vars freely. However, pathological cases +// can easily show bad behavior here, with many unnecessary +// temp vars. We could rely on optimization passes like +// Emscripten's eliminate/registerize pair, but we want +// wasm2asm to be fairly fast to run, as it might run on +// the client. +// +// The approach taken here therefore performs 2 passes on +// each function. First, it finds which expression will need to +// be statementized. It also sees which labels can receive a break +// with a value. Given that information, in the second pass we can +// allocate // temp vars in an efficient manner, as we know when we +// need them and when their use is finished. They are allocated +// using an RAII class, so that they are automatically freed +// when the scope ends. This means that a node cannot allocate +// its own temp var; instead, the parent - which knows the +// child will return a value in a temp var - allocates it, +// and tells the child what temp var to emit to. The child +// can then pass forward that temp var to its children, +// optimizing away unnecessary forwarding. + + +class Wasm2AsmBuilder { + MixedArena allocator; + +public: + struct Flags { + bool debug = false; + bool pedantic = false; + }; + + Wasm2AsmBuilder(Flags f) : flags(f) {} + + Ref processWasm(Module* wasm); + Ref processFunction(Function* func); + + // The first pass on an expression: scan it to see whether it will + // need to be statementized, and note spooky returns of values at + // a distance (aka break with a value). + void scanFunctionBody(Expression* curr); + + // The second pass on an expression: process it fully, generating + // asm.js + // @param result Whether the context we are in receives a value, + // and its type, or if not, then we can drop our return, + // if we have one. + Ref processFunctionBody(Function* func, IString result); + + Ref processAsserts(Element& e, SExpressionWasmBuilder& sexpBuilder); + + // Get a temp var. + IString getTemp(WasmType type, Function* func) { + IString ret; + if (frees[type].size() > 0) { + ret = frees[type].back(); + frees[type].pop_back(); + } else { + size_t index = temps[type]++; + ret = IString((std::string("wasm2asm_") + printWasmType(type) + "$" + + std::to_string(index)).c_str(), false); + } + if (func->localIndices.find(ret) == func->localIndices.end()) { + Builder::addVar(func, ret, type); + } + return ret; + } + + // Free a temp var. + void freeTemp(WasmType type, IString temp) { + frees[type].push_back(temp); + } + + static IString fromName(Name name) { + // TODO: more clever name fixing, including checking we do not collide + const char* str = name.str; + // check the various issues, and recurse so we check the others + if (strchr(str, '-')) { + char* mod = strdup(str); + str = mod; + while (*mod) { + if (*mod == '-') *mod = '_'; + mod++; + } + IString result = fromName(IString(str, false)); + free((void*)str); + return result; + } + if (isdigit(str[0]) || strcmp(str, "if") == 0) { + std::string prefixed = "$$"; + prefixed += name.str; + return fromName(IString(prefixed.c_str(), false)); + } + return name; + } + + void setStatement(Expression* curr) { + willBeStatement.insert(curr); + } + + bool isStatement(Expression* curr) { + return curr && willBeStatement.find(curr) != willBeStatement.end(); + } + + size_t getTableSize() { + return tableSize; + } + +private: + Flags flags; + + // How many temp vars we need + std::vector temps; // type => num temps + // Which are currently free to use + std::vector> frees; // type => list of free names + + // Expressions that will be a statement. + std::set willBeStatement; + + // All our function tables have the same size TODO: optimize? + size_t tableSize; + + void addBasics(Ref ast); + void addImport(Ref ast, Import* import); + void addTables(Ref ast, Module* wasm); + void addExports(Ref ast, Module* wasm); + void addWasmCompatibilityFuncs(Module* wasm); + bool isAssertHandled(Element& e); + Ref makeAssertReturnFunc(SExpressionWasmBuilder& sexpBuilder, + Builder& wasmBuilder, + Element& e, Name testFuncName); + Ref makeAssertTrapFunc(SExpressionWasmBuilder& sexpBuilder, + Builder& wasmBuilder, + Element& e, Name testFuncName); + Wasm2AsmBuilder() = delete; + Wasm2AsmBuilder(const Wasm2AsmBuilder &) = delete; + Wasm2AsmBuilder &operator=(const Wasm2AsmBuilder&) = delete; +}; + +static Function* makeCtzFunc(MixedArena& allocator, UnaryOp op) { + assert(op == CtzInt32 || op == CtzInt64); + Builder b(allocator); + // if eqz(x) then 32 else (32 - clz(x ^ (x - 1))) + bool is32Bit = (op == CtzInt32); + Name funcName = is32Bit ? Name(WASM_CTZ32) : Name(WASM_CTZ64); + BinaryOp subOp = is32Bit ? SubInt32 : SubInt64; + BinaryOp xorOp = is32Bit ? XorInt32 : XorInt64; + UnaryOp clzOp = is32Bit ? ClzInt32 : ClzInt64; + UnaryOp eqzOp = is32Bit ? EqZInt32 : EqZInt64; + WasmType argType = is32Bit ? i32 : i64; + Binary* xorExp = b.makeBinary( + xorOp, + b.makeGetLocal(0, i32), + b.makeBinary( + subOp, + b.makeGetLocal(0, i32), + b.makeConst(is32Bit ? Literal(int32_t(1)) : Literal(int64_t(1))) + ) + ); + Binary* subExp = b.makeBinary( + subOp, + b.makeConst(is32Bit ? Literal(int32_t(32 - 1)) : Literal(int64_t(64 - 1))), + b.makeUnary(clzOp, xorExp) + ); + If* body = b.makeIf( + b.makeUnary( + eqzOp, + b.makeGetLocal(0, i32) + ), + b.makeConst(is32Bit ? Literal(int32_t(32)) : Literal(int64_t(64))), + subExp + ); + return b.makeFunction( + funcName, + std::vector{NameType("x", argType)}, + argType, + std::vector{}, + body + ); +} + +static Function* makePopcntFunc(MixedArena& allocator, UnaryOp op) { + assert(op == PopcntInt32 || op == PopcntInt64); + Builder b(allocator); + // popcnt implemented as: + // int c; for (c = 0; x != 0; c++) { x = x & (x - 1) }; return c + bool is32Bit = (op == PopcntInt32); + Name funcName = is32Bit ? Name(WASM_POPCNT32) : Name(WASM_POPCNT64); + BinaryOp addOp = is32Bit ? AddInt32 : AddInt64; + BinaryOp subOp = is32Bit ? SubInt32 : SubInt64; + BinaryOp andOp = is32Bit ? AndInt32 : AndInt64; + UnaryOp eqzOp = is32Bit ? EqZInt32 : EqZInt64; + WasmType argType = is32Bit ? i32 : i64; + Name loopName("l"); + Name blockName("b"); + Break* brIf = b.makeBreak( + blockName, + b.makeGetLocal(1, i32), + b.makeUnary( + eqzOp, + b.makeGetLocal(0, argType) + ) + ); + SetLocal* update = b.makeSetLocal( + 0, + b.makeBinary( + andOp, + b.makeGetLocal(0, argType), + b.makeBinary( + subOp, + b.makeGetLocal(0, argType), + b.makeConst(is32Bit ? Literal(int32_t(1)) : Literal(int64_t(1))) + ) + ) + ); + SetLocal* inc = b.makeSetLocal( + 1, + b.makeBinary( + addOp, + b.makeGetLocal(1, argType), + b.makeConst(Literal(1)) + ) + ); + Break* cont = b.makeBreak(loopName); + Loop* loop = b.makeLoop(loopName, b.blockify(brIf, update, inc, cont)); + Block* loopBlock = b.blockifyWithName(loop, blockName); + SetLocal* initCount = b.makeSetLocal(1, b.makeConst(Literal(0))); + return b.makeFunction( + funcName, + std::vector{NameType("x", argType)}, + argType, + std::vector{NameType("count", argType)}, + b.blockify(initCount, loopBlock) + ); +} + +Function* makeRotFunc(MixedArena& allocator, BinaryOp op) { + assert(op == RotLInt32 || op == RotRInt32 || + op == RotLInt64 || op == RotRInt64); + Builder b(allocator); + // left rotate is: + // (((((~0) >>> k) & x) << k) | ((((~0) << (w - k)) & x) >>> (w - k))) + // where k is shift modulo w. reverse shifts for right rotate + bool is32Bit = (op == RotLInt32 || op == RotRInt32); + bool isLRot = (op == RotLInt32 || op == RotLInt64); + static Name names[2][2] = {{Name(WASM_ROTR64), Name(WASM_ROTR32)}, + {Name(WASM_ROTL64), Name(WASM_ROTL32)}}; + static BinaryOp shifters[2][2] = {{ShrUInt64, ShrUInt32}, + {ShlInt64, ShlInt32}}; + Name funcName = names[isLRot][is32Bit]; + BinaryOp lshift = shifters[isLRot][is32Bit]; + BinaryOp rshift = shifters[!isLRot][is32Bit]; + BinaryOp orOp = is32Bit ? OrInt32 : OrInt64; + BinaryOp andOp = is32Bit ? AndInt32 : AndInt64; + BinaryOp subOp = is32Bit ? SubInt32 : SubInt64; + WasmType argType = is32Bit ? i32 : i64; + Literal widthMask = + is32Bit ? Literal(int32_t(32 - 1)) : Literal(int64_t(64 - 1)); + Literal width = + is32Bit ? Literal(int32_t(32)) : Literal(int64_t(64)); + auto shiftVal = [&]() { + return b.makeBinary( + andOp, + b.makeGetLocal(1, argType), + b.makeConst(widthMask) + ); + }; + auto widthSub = [&]() { + return b.makeBinary(subOp, b.makeConst(width), shiftVal()); + }; + auto fullMask = [&]() { + return b.makeConst(is32Bit ? Literal(~int32_t(0)) : Literal(~int64_t(0))); + }; + Binary* maskRShift = b.makeBinary(rshift, fullMask(), shiftVal()); + Binary* lowMask = b.makeBinary(andOp, maskRShift, b.makeGetLocal(0, argType)); + Binary* lowShift = b.makeBinary(lshift, lowMask, shiftVal()); + Binary* maskLShift = b.makeBinary(lshift, fullMask(), widthSub()); + Binary* highMask = + b.makeBinary(andOp, maskLShift, b.makeGetLocal(0, argType)); + Binary* highShift = b.makeBinary(rshift, highMask, widthSub()); + Binary* body = b.makeBinary(orOp, lowShift, highShift); + return b.makeFunction( + funcName, + std::vector{NameType("x", argType), + NameType("k", argType)}, + argType, + std::vector{}, + body + ); +} + +void Wasm2AsmBuilder::addWasmCompatibilityFuncs(Module* wasm) { + wasm->addFunction(makeCtzFunc(wasm->allocator, CtzInt32)); + wasm->addFunction(makePopcntFunc(wasm->allocator, PopcntInt32)); + wasm->addFunction(makeRotFunc(wasm->allocator, RotLInt32)); + wasm->addFunction(makeRotFunc(wasm->allocator, RotRInt32)); +} + +Ref Wasm2AsmBuilder::processWasm(Module* wasm) { + addWasmCompatibilityFuncs(wasm); + PassRunner runner(wasm); + runner.add(); + runner.add("i64-to-i32-lowering"); + runner.add("flatten"); + runner.add("simplify-locals-notee-nostructure"); + runner.add("vacuum"); + runner.setDebug(flags.debug); + runner.run(); + Ref ret = ValueBuilder::makeToplevel(); + Ref asmFunc = ValueBuilder::makeFunction(ASM_FUNC); + ret[1]->push_back(asmFunc); + ValueBuilder::appendArgumentToFunction(asmFunc, GLOBAL); + ValueBuilder::appendArgumentToFunction(asmFunc, ENV); + ValueBuilder::appendArgumentToFunction(asmFunc, BUFFER); + asmFunc[3]->push_back(ValueBuilder::makeStatement(ValueBuilder::makeString(USE_ASM))); + // create heaps, etc + addBasics(asmFunc[3]); + for (auto& import : wasm->imports) { + addImport(asmFunc[3], import.get()); + } + // figure out the table size + tableSize = std::accumulate(wasm->table.segments.begin(), + wasm->table.segments.end(), + 0, [&](size_t size, Table::Segment seg) -> size_t { + return size + seg.data.size(); + }); + size_t pow2ed = 1; + while (pow2ed < tableSize) { + pow2ed <<= 1; + } + tableSize = pow2ed; + // functions + for (auto& func : wasm->functions) { + asmFunc[3]->push_back(processFunction(func.get())); + } + addTables(asmFunc[3], wasm); + // memory XXX + addExports(asmFunc[3], wasm); + return ret; +} + +void Wasm2AsmBuilder::addBasics(Ref ast) { + // heaps, var HEAP8 = new global.Int8Array(buffer); etc + auto addHeap = [&](IString name, IString view) { + Ref theVar = ValueBuilder::makeVar(); + ast->push_back(theVar); + ValueBuilder::appendToVar(theVar, + name, + ValueBuilder::makeNew( + ValueBuilder::makeCall( + ValueBuilder::makeDot( + ValueBuilder::makeName(GLOBAL), + view + ), + ValueBuilder::makeName(BUFFER) + ) + ) + ); + }; + addHeap(HEAP8, INT8ARRAY); + addHeap(HEAP16, INT16ARRAY); + addHeap(HEAP32, INT32ARRAY); + addHeap(HEAPU8, UINT8ARRAY); + addHeap(HEAPU16, UINT16ARRAY); + addHeap(HEAPU32, UINT32ARRAY); + addHeap(HEAPF32, FLOAT32ARRAY); + addHeap(HEAPF64, FLOAT64ARRAY); + // core asm.js imports + auto addMath = [&](IString name, IString base) { + Ref theVar = ValueBuilder::makeVar(); + ast->push_back(theVar); + ValueBuilder::appendToVar(theVar, + name, + ValueBuilder::makeDot( + ValueBuilder::makeDot( + ValueBuilder::makeName(GLOBAL), + MATH + ), + base + ) + ); + }; + addMath(MATH_IMUL, IMUL); + addMath(MATH_FROUND, FROUND); + addMath(MATH_ABS, ABS); + addMath(MATH_CLZ32, CLZ32); +} + +void Wasm2AsmBuilder::addImport(Ref ast, Import* import) { + Ref theVar = ValueBuilder::makeVar(); + ast->push_back(theVar); + Ref module = ValueBuilder::makeName(ENV); // TODO: handle nested module imports + ValueBuilder::appendToVar(theVar, + fromName(import->name), + ValueBuilder::makeDot( + module, + fromName(import->base) + ) + ); +} + +void Wasm2AsmBuilder::addTables(Ref ast, Module* wasm) { + std::map> tables; // asm.js tables, sig => contents of table + for (Table::Segment& seg : wasm->table.segments) { + for (size_t i = 0; i < seg.data.size(); i++) { + Name name = seg.data[i]; + auto func = wasm->getFunction(name); + std::string sig = getSig(func); + auto& table = tables[sig]; + if (table.size() == 0) { + // fill it with the first of its type seen. we have to fill with something; and for asm2wasm output, the first is the null anyhow + table.resize(tableSize); + for (size_t j = 0; j < tableSize; j++) { + table[j] = fromName(name); + } + } else { + table[i] = fromName(name); + } + } + } + for (auto& pair : tables) { + auto& sig = pair.first; + auto& table = pair.second; + std::string stable = std::string("FUNCTION_TABLE_") + sig; + IString asmName = IString(stable.c_str(), false); + // add to asm module + Ref theVar = ValueBuilder::makeVar(); + ast->push_back(theVar); + Ref theArray = ValueBuilder::makeArray(); + ValueBuilder::appendToVar(theVar, asmName, theArray); + for (auto& name : table) { + ValueBuilder::appendToArray(theArray, ValueBuilder::makeName(name)); + } + } +} + +void Wasm2AsmBuilder::addExports(Ref ast, Module* wasm) { + Ref exports = ValueBuilder::makeObject(); + for (auto& export_ : wasm->exports) { + ValueBuilder::appendToObject( + exports, + fromName(export_->name), + ValueBuilder::makeName(fromName(export_->value)) + ); + } + ast->push_back(ValueBuilder::makeStatement(ValueBuilder::makeReturn(exports))); +} + +Ref Wasm2AsmBuilder::processFunction(Function* func) { + if (flags.debug) { + static int fns = 0; + std::cerr << "processFunction " << (fns++) << " " << func->name + << std::endl; + } + Ref ret = ValueBuilder::makeFunction(fromName(func->name)); + frees.clear(); + frees.resize(std::max(i32, std::max(f32, f64)) + 1); + temps.clear(); + temps.resize(std::max(i32, std::max(f32, f64)) + 1); + temps[i32] = temps[f32] = temps[f64] = 0; + // arguments + for (Index i = 0; i < func->getNumParams(); i++) { + IString name = fromName(func->getLocalNameOrGeneric(i)); + ValueBuilder::appendArgumentToFunction(ret, name); + ret[3]->push_back( + ValueBuilder::makeStatement( + ValueBuilder::makeBinary( + ValueBuilder::makeName(name), SET, + makeAsmCoercion( + ValueBuilder::makeName(name), + wasmToAsmType(func->getLocalType(i)) + ) + ) + ) + ); + } + Ref theVar = ValueBuilder::makeVar(); + size_t theVarIndex = ret[3]->size(); + ret[3]->push_back(theVar); + // body + auto appendFinalReturn = [&] (Ref retVal) { + flattenAppend( + ret, + ValueBuilder::makeReturn( + makeAsmCoercion(retVal, wasmToAsmType(func->result)) + ) + ); + }; + scanFunctionBody(func->body); + bool isBodyBlock = (func->body->_id == Expression::BlockId); + ExpressionList* stats = isBodyBlock ? + &static_cast(func->body)->list : nullptr; + bool endsInReturn = + (isBodyBlock && ((*stats)[stats->size()-1]->_id == Expression::ReturnId)); + if (endsInReturn) { + // return already taken care of + flattenAppend(ret, processFunctionBody(func, NO_RESULT)); + } else if (isStatement(func->body)) { + // store result in variable then return it + IString result = + func->result != none ? getTemp(func->result, func) : NO_RESULT; + flattenAppend(ret, processFunctionBody(func, result)); + if (func->result != none) { + appendFinalReturn(ValueBuilder::makeName(result)); + freeTemp(func->result, result); + } + } else if (func->result != none) { + // whole thing is an expression, just return body + appendFinalReturn(processFunctionBody(func, EXPRESSION_RESULT)); + } else { + // func has no return + flattenAppend(ret, processFunctionBody(func, NO_RESULT)); + } + // vars, including new temp vars + for (Index i = func->getVarIndexBase(); i < func->getNumLocals(); i++) { + ValueBuilder::appendToVar( + theVar, + fromName(func->getLocalNameOrGeneric(i)), + makeAsmCoercedZero(wasmToAsmType(func->getLocalType(i))) + ); + } + if (theVar[1]->size() == 0) { + ret[3]->splice(theVarIndex, 1); + } + // checks + assert(frees[i32].size() == temps[i32]); // all temp vars should be free at the end + assert(frees[f32].size() == temps[f32]); // all temp vars should be free at the end + assert(frees[f64].size() == temps[f64]); // all temp vars should be free at the end + // cleanups + willBeStatement.clear(); + return ret; +} + +void Wasm2AsmBuilder::scanFunctionBody(Expression* curr) { + struct ExpressionScanner : public PostWalker { + Wasm2AsmBuilder* parent; + + ExpressionScanner(Wasm2AsmBuilder* parent) : parent(parent) {} + + // Visitors + + void visitBlock(Block* curr) { + parent->setStatement(curr); + } + void visitIf(If* curr) { + parent->setStatement(curr); + } + void visitLoop(Loop* curr) { + parent->setStatement(curr); + } + void visitBreak(Break* curr) { + parent->setStatement(curr); + } + void visitSwitch(Switch* curr) { + parent->setStatement(curr); + } + void visitCall(Call* curr) { + for (auto item : curr->operands) { + if (parent->isStatement(item)) { + parent->setStatement(curr); + break; + } + } + } + void visitCallImport(CallImport* curr) { + for (auto item : curr->operands) { + if (parent->isStatement(item)) { + parent->setStatement(curr); + break; + } + } + } + void visitCallIndirect(CallIndirect* curr) { + if (parent->isStatement(curr->target)) { + parent->setStatement(curr); + return; + } + for (auto item : curr->operands) { + if (parent->isStatement(item)) { + parent->setStatement(curr); + break; + } + } + } + void visitSetLocal(SetLocal* curr) { + if (parent->isStatement(curr->value)) { + parent->setStatement(curr); + } + } + void visitLoad(Load* curr) { + if (parent->isStatement(curr->ptr)) { + parent->setStatement(curr); + } + } + void visitStore(Store* curr) { + if (parent->isStatement(curr->ptr) || parent->isStatement(curr->value)) { + parent->setStatement(curr); + } + } + void visitUnary(Unary* curr) { + if (parent->isStatement(curr->value)) { + parent->setStatement(curr); + } + } + void visitBinary(Binary* curr) { + if (parent->isStatement(curr->left) || parent->isStatement(curr->right)) { + parent->setStatement(curr); + } + } + void visitSelect(Select* curr) { + if (parent->isStatement(curr->ifTrue) || parent->isStatement(curr->ifFalse) || parent->isStatement(curr->condition)) { + parent->setStatement(curr); + } + } + void visitReturn(Return* curr) { + parent->setStatement(curr); + } + void visitHost(Host* curr) { + for (auto item : curr->operands) { + if (parent->isStatement(item)) { + parent->setStatement(curr); + break; + } + } + } + }; + ExpressionScanner(this).walk(curr); +} + +Ref Wasm2AsmBuilder::processFunctionBody(Function* func, IString result) { + struct ExpressionProcessor : public Visitor { + Wasm2AsmBuilder* parent; + IString result; + Function* func; + MixedArena allocator; + ExpressionProcessor(Wasm2AsmBuilder* parent, Function* func) : parent(parent), func(func) {} + + // A scoped temporary variable. + struct ScopedTemp { + Wasm2AsmBuilder* parent; + WasmType type; + IString temp; + bool needFree; + // @param possible if provided, this is a variable we can use as our temp. it has already been + // allocated in a higher scope, and we can just assign to it as our result is + // going there anyhow. + ScopedTemp(WasmType type, Wasm2AsmBuilder* parent, Function* func, + IString possible = NO_RESULT) : parent(parent), type(type) { + assert(possible != EXPRESSION_RESULT); + if (possible == NO_RESULT) { + temp = parent->getTemp(type, func); + needFree = true; + } else { + temp = possible; + needFree = false; + } + } + ~ScopedTemp() { + if (needFree) { + parent->freeTemp(type, temp); + } + } + + IString getName() { + return temp; + } + Ref getAstName() { + return ValueBuilder::makeName(temp); + } + }; + + Ref visit(Expression* curr, IString nextResult) { + IString old = result; + result = nextResult; + Ref ret = Visitor::visit(curr); + result = old; // keep it consistent for the rest of this frame, which may call visit on multiple children + return ret; + } + + Ref visit(Expression* curr, ScopedTemp& temp) { + return visit(curr, temp.temp); + } + + // this result is for an asm expression slot, but it might be a statement + Ref visitForExpression(Expression* curr, WasmType type, IString& tempName) { + if (isStatement(curr)) { + ScopedTemp temp(type, parent, func); + tempName = temp.temp; + return visit(curr, temp); + } else { + return visit(curr, EXPRESSION_RESULT); + } + } + + Ref visitAndAssign(Expression* curr, IString result) { + Ref ret = visit(curr, result); + // if it's not already a statement, then it's an expression, and we need to assign it + // (if it is a statement, it already assigns to the result var) + if (!isStatement(curr) && result != NO_RESULT) { + ret = ValueBuilder::makeStatement( + ValueBuilder::makeBinary(ValueBuilder::makeName(result), SET, ret)); + } + return ret; + } + + Ref visitAndAssign(Expression* curr, ScopedTemp& temp) { + return visitAndAssign(curr, temp.getName()); + } + + bool isStatement(Expression* curr) { + return parent->isStatement(curr); + } + + // Expressions with control flow turn into a block, which we must + // then handle, even if we are an expression. + bool isBlock(Ref ast) { + return !!ast && ast->isArray() && ast[0] == BLOCK; + } + + Ref blockify(Ref ast) { + if (isBlock(ast)) return ast; + Ref ret = ValueBuilder::makeBlock(); + ret[1]->push_back(ValueBuilder::makeStatement(ast)); + return ret; + } + + // For spooky return-at-a-distance/break-with-result, this tells us + // what the result var is for a specific label. + std::map breakResults; + + // Breaks to the top of a loop should be emitted as continues, to that loop's main label + std::unordered_set continueLabels; + + IString fromName(Name name) { + return parent->fromName(name); + } + + // Visitors + + Ref visitBlock(Block* curr) { + breakResults[curr->name] = result; + Ref ret = ValueBuilder::makeBlock(); + size_t size = curr->list.size(); + auto noResults = result == NO_RESULT ? size : size-1; + for (size_t i = 0; i < noResults; i++) { + flattenAppend(ret, ValueBuilder::makeStatement(visit(curr->list[i], NO_RESULT))); + } + if (result != NO_RESULT) { + flattenAppend(ret, visitAndAssign(curr->list[size-1], result)); + } + if (curr->name.is()) { + ret = ValueBuilder::makeLabel(fromName(curr->name), ret); + } + return ret; + } + + Ref visitIf(If* curr) { + IString temp; + Ref condition = visitForExpression(curr->condition, i32, temp); + Ref ifTrue = ValueBuilder::makeStatement(visitAndAssign(curr->ifTrue, result)); + Ref ifFalse; + if (curr->ifFalse) { + ifFalse = ValueBuilder::makeStatement(visitAndAssign(curr->ifFalse, result)); + } + if (temp.isNull()) { + return ValueBuilder::makeIf(condition, ifTrue, ifFalse); // simple if + } + condition = blockify(condition); + // just add an if to the block + condition[1]->push_back(ValueBuilder::makeIf(ValueBuilder::makeName(temp), ifTrue, ifFalse)); + return condition; + } + + Ref visitLoop(Loop* curr) { + Name asmLabel = curr->name; + continueLabels.insert(asmLabel); + Ref body = blockify(visit(curr->body, result)); + flattenAppend(body, ValueBuilder::makeBreak(fromName(asmLabel))); + Ref ret = ValueBuilder::makeDo(body, ValueBuilder::makeInt(1)); + return ValueBuilder::makeLabel(fromName(asmLabel), ret); + } + + Ref visitBreak(Break* curr) { + if (curr->condition) { + // we need an equivalent to an if here, so use that code + Break fakeBreak = *curr; + fakeBreak.condition = nullptr; + If fakeIf(allocator); + fakeIf.condition = curr->condition; + fakeIf.ifTrue = &fakeBreak; + return visit(&fakeIf, result); + } + Ref theBreak; + auto iter = continueLabels.find(curr->name); + if (iter == continueLabels.end()) { + theBreak = ValueBuilder::makeBreak(fromName(curr->name)); + } else { + theBreak = ValueBuilder::makeContinue(fromName(curr->name)); + } + if (!curr->value) return theBreak; + // generate the value, including assigning to the result, and then do the break + Ref ret = visitAndAssign(curr->value, breakResults[curr->name]); + ret = blockify(ret); + ret[1]->push_back(theBreak); + return ret; + } + + Expression* defaultBody = nullptr; // default must be last in asm.js + + Ref visitSwitch(Switch* curr) { + assert(!curr->value); + Ref ret = ValueBuilder::makeBlock(); + Ref condition; + if (isStatement(curr->condition)) { + ScopedTemp temp(i32, parent, func); + flattenAppend(ret[2], visit(curr->condition, temp)); + condition = temp.getAstName(); + } else { + condition = visit(curr->condition, EXPRESSION_RESULT); + } + Ref theSwitch = + ValueBuilder::makeSwitch(makeAsmCoercion(condition, ASM_INT)); + ret[1]->push_back(theSwitch); + for (size_t i = 0; i < curr->targets.size(); i++) { + ValueBuilder::appendCaseToSwitch(theSwitch, ValueBuilder::makeNum(i)); + ValueBuilder::appendCodeToSwitch(theSwitch, blockify(ValueBuilder::makeBreak(fromName(curr->targets[i]))), false); + } + ValueBuilder::appendDefaultToSwitch(theSwitch); + ValueBuilder::appendCodeToSwitch(theSwitch, blockify(ValueBuilder::makeBreak(fromName(curr->default_))), false); + return ret; + } + + Ref makeStatementizedCall(ExpressionList& operands, Ref ret, Ref theCall, IString result, WasmType type) { + std::vector temps; // TODO: utility class, with destructor? + for (auto& operand : operands) { + temps.push_back(new ScopedTemp(operand->type, parent, func)); + IString temp = temps.back()->temp; + flattenAppend(ret, visitAndAssign(operand, temp)); + theCall[2]->push_back(makeAsmCoercion(ValueBuilder::makeName(temp), wasmToAsmType(operand->type))); + } + theCall = makeAsmCoercion(theCall, wasmToAsmType(type)); + if (result != NO_RESULT) { + theCall = ValueBuilder::makeStatement( + ValueBuilder::makeBinary( + ValueBuilder::makeName(result), SET, theCall)); + } + flattenAppend(ret, theCall); + for (auto temp : temps) { + delete temp; + } + return ret; + } + + Ref visitGenericCall(Expression* curr, Name target, + ExpressionList& operands) { + Ref theCall = ValueBuilder::makeCall(fromName(target)); + if (!isStatement(curr)) { + // none of our operands is a statement; go right ahead and create a + // simple expression + for (auto operand : operands) { + theCall[2]->push_back( + makeAsmCoercion(visit(operand, EXPRESSION_RESULT), + wasmToAsmType(operand->type))); + } + return makeAsmCoercion(theCall, wasmToAsmType(curr->type)); + } + // we must statementize them all + return makeStatementizedCall(operands, ValueBuilder::makeBlock(), theCall, + result, curr->type); + } + + Ref visitCall(Call* curr) { + return visitGenericCall(curr, curr->target, curr->operands); + } + + Ref visitCallImport(CallImport* curr) { + return visitGenericCall(curr, curr->target, curr->operands); + } + + Ref visitCallIndirect(CallIndirect* curr) { + std::string stable = std::string("FUNCTION_TABLE_") + curr->fullType.c_str(); + IString table = IString(stable.c_str(), false); + auto makeTableCall = [&](Ref target) { + return ValueBuilder::makeCall(ValueBuilder::makeSub( + ValueBuilder::makeName(table), + ValueBuilder::makeBinary(target, AND, ValueBuilder::makeInt(parent->getTableSize()-1)) + )); + }; + if (!isStatement(curr)) { + // none of our operands is a statement; go right ahead and create a simple expression + Ref theCall = makeTableCall(visit(curr->target, EXPRESSION_RESULT)); + for (auto operand : curr->operands) { + theCall[2]->push_back(makeAsmCoercion(visit(operand, EXPRESSION_RESULT), wasmToAsmType(operand->type))); + } + return makeAsmCoercion(theCall, wasmToAsmType(curr->type)); + } + // we must statementize them all + Ref ret = ValueBuilder::makeBlock(); + ScopedTemp temp(i32, parent, func); + flattenAppend(ret, visit(curr->target, temp)); + Ref theCall = makeTableCall(temp.getAstName()); + return makeStatementizedCall(curr->operands, ret, theCall, result, curr->type); + } + + Ref makeSetVar(Expression* curr, Expression* value, Name name) { + if (!isStatement(curr)) { + return ValueBuilder::makeBinary( + ValueBuilder::makeName(fromName(name)), SET, + visit(value, EXPRESSION_RESULT) + ); + } + // if result was provided, our child can just assign there. + // Otherwise, allocate a temp for it to assign to. + ScopedTemp temp(value->type, parent, func, result); + Ref ret = blockify(visit(value, temp)); + // the output was assigned to result, so we can just assign it to our target + ret[1]->push_back( + ValueBuilder::makeStatement( + ValueBuilder::makeBinary( + ValueBuilder::makeName(fromName(name)), SET, + temp.getAstName() + ) + ) + ); + return ret; + } + + Ref visitGetLocal(GetLocal* curr) { + return ValueBuilder::makeName( + fromName(func->getLocalNameOrGeneric(curr->index)) + ); + } + + Ref visitSetLocal(SetLocal* curr) { + return makeSetVar(curr, curr->value, func->getLocalNameOrGeneric(curr->index)); + } + + Ref visitGetGlobal(GetGlobal* curr) { + return ValueBuilder::makeName(fromName(curr->name)); + } + + Ref visitSetGlobal(SetGlobal* curr) { + return makeSetVar(curr, curr->value, curr->name); + } + + Ref visitLoad(Load* curr) { + if (isStatement(curr)) { + ScopedTemp temp(i32, parent, func); + GetLocal fakeLocal(allocator); + fakeLocal.index = func->getLocalIndex(temp.getName()); + Load fakeLoad = *curr; + fakeLoad.ptr = &fakeLocal; + Ref ret = blockify(visitAndAssign(curr->ptr, temp)); + flattenAppend(ret, visitAndAssign(&fakeLoad, result)); + return ret; + } + if (curr->align != 0 && curr->align < curr->bytes) { + // set the pointer to a local + ScopedTemp temp(i32, parent, func); + SetLocal set(allocator); + set.index = func->getLocalIndex(temp.getName()); + set.value = curr->ptr; + Ref ptrSet = visit(&set, NO_RESULT); + GetLocal get(allocator); + get.index = func->getLocalIndex(temp.getName()); + // fake loads + Load load = *curr; + load.ptr = &get; + load.bytes = 1; // do the worst + Ref rest; + switch (curr->type) { + case i32: { + rest = makeAsmCoercion(visit(&load, EXPRESSION_RESULT), ASM_INT); + for (size_t i = 1; i < curr->bytes; i++) { + ++load.offset; + Ref add = makeAsmCoercion(visit(&load, EXPRESSION_RESULT), ASM_INT); + add = ValueBuilder::makeBinary(add, LSHIFT, ValueBuilder::makeNum(8*i)); + rest = ValueBuilder::makeBinary(rest, OR, add); + } + break; + } + default: { + std::cerr << "Unhandled type in load: " << curr->type << std::endl; + abort(); + } + } + return ValueBuilder::makeSeq(ptrSet, rest); + } + // normal load + Ref ptr = visit(curr->ptr, EXPRESSION_RESULT); + if (curr->offset) { + ptr = makeAsmCoercion( + ValueBuilder::makeBinary(ptr, PLUS, ValueBuilder::makeNum(curr->offset)), + ASM_INT); + } + Ref ret; + switch (curr->type) { + case i32: { + switch (curr->bytes) { + case 1: + ret = ValueBuilder::makeSub( + ValueBuilder::makeName(curr->signed_ ? HEAP8 : HEAPU8 ), + ValueBuilder::makePtrShift(ptr, 0)); + break; + case 2: + ret = ValueBuilder::makeSub( + ValueBuilder::makeName(curr->signed_ ? HEAP16 : HEAPU16), + ValueBuilder::makePtrShift(ptr, 1)); + break; + case 4: + ret = ValueBuilder::makeSub( + ValueBuilder::makeName(curr->signed_ ? HEAP32 : HEAPU32), + ValueBuilder::makePtrShift(ptr, 2)); + break; + default: { + std::cerr << "Unhandled number of bytes in i32 load: " + << curr->bytes << std::endl; + abort(); + } + } + break; + } + case f32: + ret = ValueBuilder::makeSub(ValueBuilder::makeName(HEAPF32), + ValueBuilder::makePtrShift(ptr, 2)); + break; + case f64: + ret = ValueBuilder::makeSub(ValueBuilder::makeName(HEAPF64), + ValueBuilder::makePtrShift(ptr, 3)); + break; + default: { + std::cerr << "Unhandled type in load: " << curr->type << std::endl; + abort(); + } + } + return makeAsmCoercion(ret, wasmToAsmType(curr->type)); + } + + Ref visitStore(Store* curr) { + if (isStatement(curr)) { + ScopedTemp tempPtr(i32, parent, func); + ScopedTemp tempValue(curr->valueType, parent, func); + GetLocal fakeLocalPtr(allocator); + fakeLocalPtr.index = func->getLocalIndex(tempPtr.getName()); + GetLocal fakeLocalValue(allocator); + fakeLocalValue.index = func->getLocalIndex(tempValue.getName()); + Store fakeStore = *curr; + fakeStore.ptr = &fakeLocalPtr; + fakeStore.value = &fakeLocalValue; + Ref ret = blockify(visitAndAssign(curr->ptr, tempPtr)); + flattenAppend(ret, visitAndAssign(curr->value, tempValue)); + flattenAppend(ret, visitAndAssign(&fakeStore, result)); + return ret; + } + if (curr->align != 0 && curr->align < curr->bytes) { + // set the pointer to a local + ScopedTemp temp(i32, parent, func); + SetLocal set(allocator); + set.index = func->getLocalIndex(temp.getName()); + set.value = curr->ptr; + Ref ptrSet = visit(&set, NO_RESULT); + GetLocal get(allocator); + get.index = func->getLocalIndex(temp.getName()); + // set the value to a local + ScopedTemp tempValue(curr->value->type, parent, func); + SetLocal setValue(allocator); + setValue.index = func->getLocalIndex(tempValue.getName()); + setValue.value = curr->value; + Ref valueSet = visit(&setValue, NO_RESULT); + GetLocal getValue(allocator); + getValue.index = func->getLocalIndex(tempValue.getName()); + // fake stores + Store store = *curr; + store.ptr = &get; + store.bytes = 1; // do the worst + Ref rest; + switch (curr->valueType) { + case i32: { + Const _255(allocator); + _255.value = Literal(int32_t(255)); + _255.type = i32; + for (size_t i = 0; i < curr->bytes; i++) { + Const shift(allocator); + shift.value = Literal(int32_t(8*i)); + shift.type = i32; + Binary shifted(allocator); + shifted.op = ShrUInt32; + shifted.left = &getValue; + shifted.right = &shift; + shifted.type = i32; + Binary anded(allocator); + anded.op = AndInt32; + anded.left = i > 0 ? static_cast(&shifted) : static_cast(&getValue); + anded.right = &_255; + anded.type = i32; + store.value = &anded; + Ref part = visit(&store, NO_RESULT); + if (i == 0) { + rest = part; + } else { + rest = ValueBuilder::makeSeq(rest, part); + } + ++store.offset; + } + break; + } + default: { + std::cerr << "Unhandled type in store: " << curr->valueType + << std::endl; + abort(); + } + } + return ValueBuilder::makeSeq(ValueBuilder::makeSeq(ptrSet, valueSet), rest); + } + // normal store + Ref ptr = visit(curr->ptr, EXPRESSION_RESULT); + if (curr->offset) { + ptr = makeAsmCoercion(ValueBuilder::makeBinary(ptr, PLUS, ValueBuilder::makeNum(curr->offset)), ASM_INT); + } + Ref value = visit(curr->value, EXPRESSION_RESULT); + Ref ret; + switch (curr->valueType) { + case i32: { + switch (curr->bytes) { + case 1: ret = ValueBuilder::makeSub(ValueBuilder::makeName(HEAP8), ValueBuilder::makePtrShift(ptr, 0)); break; + case 2: ret = ValueBuilder::makeSub(ValueBuilder::makeName(HEAP16), ValueBuilder::makePtrShift(ptr, 1)); break; + case 4: ret = ValueBuilder::makeSub(ValueBuilder::makeName(HEAP32), ValueBuilder::makePtrShift(ptr, 2)); break; + default: abort(); + } + break; + } + case f32: ret = ValueBuilder::makeSub(ValueBuilder::makeName(HEAPF32), ValueBuilder::makePtrShift(ptr, 2)); break; + case f64: ret = ValueBuilder::makeSub(ValueBuilder::makeName(HEAPF64), ValueBuilder::makePtrShift(ptr, 3)); break; + default: { + std::cerr << "Unhandled type in store: " << curr->valueType + << std::endl; + abort(); + } + } + return ValueBuilder::makeBinary(ret, SET, value); + } + + Ref visitDrop(Drop* curr) { + assert(!isStatement(curr)); + return visitAndAssign(curr->value, result); + } + + Ref visitConst(Const* curr) { + switch (curr->type) { + case i32: return ValueBuilder::makeInt(curr->value.geti32()); + case f32: { + Ref ret = ValueBuilder::makeCall(MATH_FROUND); + Const fake(allocator); + fake.value = Literal(double(curr->value.getf32())); + fake.type = f64; + ret[2]->push_back(visitConst(&fake)); + return ret; + } + case f64: { + double d = curr->value.getf64(); + if (d == 0 && std::signbit(d)) { // negative zero + return ValueBuilder::makeUnary(PLUS, ValueBuilder::makeUnary(MINUS, ValueBuilder::makeDouble(0))); + } + return ValueBuilder::makeUnary(PLUS, ValueBuilder::makeDouble(curr->value.getf64())); + } + default: abort(); + } + } + + Ref visitUnary(Unary* curr) { + if (isStatement(curr)) { + ScopedTemp temp(curr->value->type, parent, func); + GetLocal fakeLocal(allocator); + fakeLocal.index = func->getLocalIndex(temp.getName()); + Unary fakeUnary = *curr; + fakeUnary.value = &fakeLocal; + Ref ret = blockify(visitAndAssign(curr->value, temp)); + flattenAppend(ret, visitAndAssign(&fakeUnary, result)); + return ret; + } + // normal unary + switch (curr->type) { + case i32: { + switch (curr->op) { + case ClzInt32: + return ValueBuilder::makeCall( + MATH_CLZ32, + visit(curr->value, EXPRESSION_RESULT) + ); + case CtzInt32: + return makeSigning( + ValueBuilder::makeCall( + WASM_CTZ32, + visit(curr->value, EXPRESSION_RESULT) + ), + ASM_SIGNED + ); + case PopcntInt32: + return makeSigning( + ValueBuilder::makeCall( + WASM_POPCNT32, + visit(curr->value, EXPRESSION_RESULT) + ), + ASM_SIGNED + ); + case EqZInt32: + return ValueBuilder::makeBinary( + makeAsmCoercion(visit(curr->value, + EXPRESSION_RESULT), ASM_INT), EQ, + makeAsmCoercion(ValueBuilder::makeInt(0), ASM_INT)); + default: { + std::cerr << "Unhandled unary i32 operator: " << curr + << std::endl; + abort(); + } + } + } + case f32: + case f64: { + Ref ret; + switch (curr->op) { + case NegFloat32: + case NegFloat64: + ret = ValueBuilder::makeUnary( + MINUS, + visit(curr->value, EXPRESSION_RESULT) + ); + break; + case AbsFloat32: + case AbsFloat64: + ret = ValueBuilder::makeCall( + MATH_ABS, + visit(curr->value, EXPRESSION_RESULT) + ); + break; + case CeilFloat32: + case CeilFloat64: + ret = ValueBuilder::makeCall( + MATH_CEIL, + visit(curr->value, EXPRESSION_RESULT) + ); + break; + case FloorFloat32: + case FloorFloat64: + ret = ValueBuilder::makeCall( + MATH_FLOOR, + visit(curr->value, EXPRESSION_RESULT) + ); + break; + case TruncFloat32: + case TruncFloat64: + ret = ValueBuilder::makeCall( + MATH_TRUNC, + visit(curr->value, EXPRESSION_RESULT) + ); + break; + case NearestFloat32: + case NearestFloat64: + ret = ValueBuilder::makeCall( + MATH_NEAREST, + visit(curr->value,EXPRESSION_RESULT) + ); + break; + case SqrtFloat32: + case SqrtFloat64: + ret = ValueBuilder::makeCall( + MATH_SQRT, + visit(curr->value, EXPRESSION_RESULT) + ); + break; + // TODO: more complex unary conversions + default: + std::cerr << "Unhandled unary float operator: " << curr + << std::endl; + abort(); + } + if (curr->type == f32) { // doubles need much less coercing + return makeAsmCoercion(ret, ASM_FLOAT); + } + return ret; + } + default: { + std::cerr << "Unhandled type in unary: " << curr << std::endl; + abort(); + } + } + } + + Ref visitBinary(Binary* curr) { + if (isStatement(curr)) { + ScopedTemp tempLeft(curr->left->type, parent, func); + GetLocal fakeLocalLeft(allocator); + fakeLocalLeft.index = func->getLocalIndex(tempLeft.getName()); + ScopedTemp tempRight(curr->right->type, parent, func); + GetLocal fakeLocalRight(allocator); + fakeLocalRight.index = func->getLocalIndex(tempRight.getName()); + Binary fakeBinary = *curr; + fakeBinary.left = &fakeLocalLeft; + fakeBinary.right = &fakeLocalRight; + Ref ret = blockify(visitAndAssign(curr->left, tempLeft)); + flattenAppend(ret, visitAndAssign(curr->right, tempRight)); + flattenAppend(ret, visitAndAssign(&fakeBinary, result)); + return ret; + } + // normal binary + Ref left = visit(curr->left, EXPRESSION_RESULT); + Ref right = visit(curr->right, EXPRESSION_RESULT); + Ref ret; + switch (curr->op) { + case AddInt32: + ret = ValueBuilder::makeBinary(left, PLUS, right); + break; + case SubInt32: + ret = ValueBuilder::makeBinary(left, MINUS, right); + break; + case MulInt32: { + if (curr->type == i32) { + // TODO: when one operand is a small int, emit a multiply + return ValueBuilder::makeCall(MATH_IMUL, left, right); + } else { + return ValueBuilder::makeBinary(left, MUL, right); + } + } + case DivSInt32: + ret = ValueBuilder::makeBinary(makeSigning(left, ASM_SIGNED), DIV, + makeSigning(right, ASM_SIGNED)); + break; + case DivUInt32: + ret = ValueBuilder::makeBinary(makeSigning(left, ASM_UNSIGNED), DIV, + makeSigning(right, ASM_UNSIGNED)); + break; + case RemSInt32: + ret = ValueBuilder::makeBinary(makeSigning(left, ASM_SIGNED), MOD, + makeSigning(right, ASM_SIGNED)); + break; + case RemUInt32: + ret = ValueBuilder::makeBinary(makeSigning(left, ASM_UNSIGNED), MOD, + makeSigning(right, ASM_UNSIGNED)); + break; + case AndInt32: + ret = ValueBuilder::makeBinary(left, AND, right); + break; + case OrInt32: + ret = ValueBuilder::makeBinary(left, OR, right); + break; + case XorInt32: + ret = ValueBuilder::makeBinary(left, XOR, right); + break; + case ShlInt32: + ret = ValueBuilder::makeBinary(left, LSHIFT, right); + break; + case ShrUInt32: + ret = ValueBuilder::makeBinary(left, TRSHIFT, right); + break; + case ShrSInt32: + ret = ValueBuilder::makeBinary(left, RSHIFT, right); + break; + case MinFloat32: + ret = ValueBuilder::makeCall(MATH_MIN, left, right); + break; + case MaxFloat32: + ret = ValueBuilder::makeCall(MATH_MAX, left, right); + break; + case EqInt32: { + // TODO: check if this condition is still valid/necessary + if (curr->left->type == i32) { + return ValueBuilder::makeBinary(makeSigning(left, ASM_SIGNED), EQ, + makeSigning(right, ASM_SIGNED)); + } else { + return ValueBuilder::makeBinary(left, EQ, right); + } + } + case NeInt32: { + if (curr->left->type == i32) { + return ValueBuilder::makeBinary(makeSigning(left, ASM_SIGNED), NE, + makeSigning(right, ASM_SIGNED)); + } else { + return ValueBuilder::makeBinary(left, NE, right); + } + } + case LtSInt32: + return ValueBuilder::makeBinary(makeSigning(left, ASM_SIGNED), LT, + makeSigning(right, ASM_SIGNED)); + case LtUInt32: + return ValueBuilder::makeBinary(makeSigning(left, ASM_UNSIGNED), LT, + makeSigning(right, ASM_UNSIGNED)); + case LeSInt32: + return ValueBuilder::makeBinary(makeSigning(left, ASM_SIGNED), LE, + makeSigning(right, ASM_SIGNED)); + case LeUInt32: + return ValueBuilder::makeBinary(makeSigning(left, ASM_UNSIGNED), LE, + makeSigning(right, ASM_UNSIGNED)); + case GtSInt32: + return ValueBuilder::makeBinary(makeSigning(left, ASM_SIGNED), GT, + makeSigning(right, ASM_SIGNED)); + case GtUInt32: + return ValueBuilder::makeBinary(makeSigning(left, ASM_UNSIGNED), GT, + makeSigning(right, ASM_UNSIGNED)); + case GeSInt32: + return ValueBuilder::makeBinary(makeSigning(left, ASM_SIGNED), GE, + makeSigning(right, ASM_SIGNED)); + case GeUInt32: + return ValueBuilder::makeBinary(makeSigning(left, ASM_UNSIGNED), GE, + makeSigning(right, ASM_UNSIGNED)); + case RotLInt32: + return makeSigning(ValueBuilder::makeCall(WASM_ROTL32, left, right), + ASM_SIGNED); + case RotRInt32: + return makeSigning(ValueBuilder::makeCall(WASM_ROTR32, left, right), + ASM_SIGNED); + default: { + std::cerr << "Unhandled binary operator: " << curr << std::endl; + abort(); + } + } + return makeAsmCoercion(ret, wasmToAsmType(curr->type)); + } + + Ref visitSelect(Select* curr) { + if (isStatement(curr)) { + ScopedTemp tempIfTrue(curr->ifTrue->type, parent, func); + GetLocal fakeLocalIfTrue(allocator); + fakeLocalIfTrue.index = func->getLocalIndex(tempIfTrue.getName()); + ScopedTemp tempIfFalse(curr->ifFalse->type, parent, func); + GetLocal fakeLocalIfFalse(allocator); + fakeLocalIfFalse.index = func->getLocalIndex(tempIfFalse.getName()); + ScopedTemp tempCondition(i32, parent, func); + GetLocal fakeCondition(allocator); + fakeCondition.index = func->getLocalIndex(tempCondition.getName()); + Select fakeSelect = *curr; + fakeSelect.ifTrue = &fakeLocalIfTrue; + fakeSelect.ifFalse = &fakeLocalIfFalse; + fakeSelect.condition = &fakeCondition; + Ref ret = blockify(visitAndAssign(curr->ifTrue, tempIfTrue)); + flattenAppend(ret, visitAndAssign(curr->ifFalse, tempIfFalse)); + flattenAppend(ret, visitAndAssign(curr->condition, tempCondition)); + flattenAppend(ret, visitAndAssign(&fakeSelect, result)); + return ret; + } + // normal select + Ref ifTrue = visit(curr->ifTrue, EXPRESSION_RESULT); + Ref ifFalse = visit(curr->ifFalse, EXPRESSION_RESULT); + Ref condition = visit(curr->condition, EXPRESSION_RESULT); + ScopedTemp tempIfTrue(curr->type, parent, func), + tempIfFalse(curr->type, parent, func), + tempCondition(i32, parent, func); + return + ValueBuilder::makeSeq( + ValueBuilder::makeBinary(tempCondition.getAstName(), SET, condition), + ValueBuilder::makeSeq( + ValueBuilder::makeBinary(tempIfTrue.getAstName(), SET, ifTrue), + ValueBuilder::makeSeq( + ValueBuilder::makeBinary(tempIfFalse.getAstName(), SET, ifFalse), + ValueBuilder::makeConditional( + tempCondition.getAstName(), + tempIfTrue.getAstName(), + tempIfFalse.getAstName() + ) + ) + ) + ); + } + + Ref visitReturn(Return* curr) { + Ref val = (curr->value == nullptr) ? + Ref() : + makeAsmCoercion( + visit(curr->value, NO_RESULT), + wasmToAsmType(curr->value->type) + ); + return ValueBuilder::makeReturn(val); + } + + Ref visitHost(Host* curr) { + abort(); + } + + Ref visitNop(Nop* curr) { + return ValueBuilder::makeToplevel(); + } + + Ref visitUnreachable(Unreachable* curr) { + return ValueBuilder::makeCall(ABORT_FUNC); + } + }; + return ExpressionProcessor(this, func).visit(func->body, result); +} + +static Ref makeInstantiation() { + Ref lib = ValueBuilder::makeObject(); + auto insertItem = [&](IString item) { + ValueBuilder::appendToObject(lib, item, ValueBuilder::makeName(item)); + }; + insertItem(MATH); + insertItem(INT8ARRAY); + insertItem(INT16ARRAY); + insertItem(INT32ARRAY); + insertItem(UINT8ARRAY); + insertItem(UINT16ARRAY); + insertItem(UINT32ARRAY); + insertItem(FLOAT32ARRAY); + insertItem(FLOAT64ARRAY); + Ref env = ValueBuilder::makeObject(); + Ref mem = ValueBuilder::makeNew( + ValueBuilder::makeCall(ARRAY_BUFFER, ValueBuilder::makeInt(0x10000))); + Ref call = ValueBuilder::makeCall(IString(ASM_FUNC), lib, env, mem); + Ref ret = ValueBuilder::makeVar(); + ValueBuilder::appendToVar(ret, ASM_MODULE, call); + return ret; +} + +static void prefixCalls(Ref asmjs) { + if (asmjs->isArray()) { + ArrayStorage& arr = asmjs->getArray(); + for (Ref& r : arr) { + prefixCalls(r); + } + if (arr.size() > 0 && arr[0]->isString() && arr[0]->getIString() == CALL) { + assert(arr.size() >= 2); + Ref prefixed = ValueBuilder::makeDot(ValueBuilder::makeName(ASM_MODULE), + arr[1]->getIString()); + arr[1]->setArray(prefixed->getArray()); + } + } +} + +Ref Wasm2AsmBuilder::makeAssertReturnFunc(SExpressionWasmBuilder& sexpBuilder, + Builder& wasmBuilder, + Element& e, Name testFuncName) { + Expression* actual = sexpBuilder.parseExpression(e[1]); + Expression* body = nullptr; + if (e.size() == 2) { + if (actual->type == none) { + body = wasmBuilder.blockify( + actual, + wasmBuilder.makeConst(Literal(uint32_t(1))) + ); + } else { + body = actual; + } + } else if (e.size() == 3) { + Expression* expected = sexpBuilder.parseExpression(e[2]); + WasmType resType = expected->type; + actual->type = resType; + BinaryOp eqOp; + switch (resType) { + case i32: eqOp = EqInt32; break; + case i64: eqOp = EqInt64; break; + case f32: eqOp = EqFloat32; break; + case f64: eqOp = EqFloat64; break; + default: { + std::cerr << "Unhandled type in assert: " << resType << std::endl; + abort(); + } + } + body = wasmBuilder.makeBinary(eqOp, actual, expected); + } else { + assert(false && "Unexpected number of parameters in assert_return"); + } + std::unique_ptr testFunc( + wasmBuilder.makeFunction( + testFuncName, + std::vector{}, + body->type, + std::vector{}, + body + ) + ); + Ref jsFunc = processFunction(testFunc.get()); + prefixCalls(jsFunc); + return jsFunc; +} + +Ref Wasm2AsmBuilder::makeAssertTrapFunc(SExpressionWasmBuilder& sexpBuilder, + Builder& wasmBuilder, + Element& e, Name testFuncName) { + Name innerFuncName("f"); + Expression* expr = sexpBuilder.parseExpression(e[1]); + std::unique_ptr exprFunc( + wasmBuilder.makeFunction(innerFuncName, + std::vector{}, + expr->type, + std::vector{}, + expr) + ); + IString expectedErr = e[2]->str(); + Ref innerFunc = processFunction(exprFunc.get()); + Ref outerFunc = ValueBuilder::makeFunction(testFuncName); + outerFunc[3]->push_back(innerFunc); + Ref tryBlock = ValueBuilder::makeBlock(); + ValueBuilder::appendToBlock(tryBlock, ValueBuilder::makeCall(innerFuncName)); + Ref catchBlock = ValueBuilder::makeBlock(); + ValueBuilder::appendToBlock( + catchBlock, + ValueBuilder::makeReturn( + ValueBuilder::makeCall( + ValueBuilder::makeDot( + ValueBuilder::makeName(IString("e")), + ValueBuilder::makeName(IString("message")), + ValueBuilder::makeName(IString("includes")) + ), + ValueBuilder::makeString(expectedErr) + ) + ) + ); + outerFunc[3]->push_back(ValueBuilder::makeTry( + tryBlock, + ValueBuilder::makeName((IString("e"))), + catchBlock)); + outerFunc[3]->push_back(ValueBuilder::makeReturn(ValueBuilder::makeInt(0))); + return outerFunc; +} + +bool Wasm2AsmBuilder::isAssertHandled(Element& e) { + return e.isList() && e.size() >= 2 && e[0]->isStr() + && (e[0]->str() == Name("assert_return") || + (flags.pedantic && e[0]->str() == Name("assert_trap"))) + && e[1]->isList() && e[1]->size() >= 2 && (*e[1])[0]->isStr() + && (*e[1])[0]->str() == Name("invoke"); +} + +Ref Wasm2AsmBuilder::processAsserts(Element& root, + SExpressionWasmBuilder& sexpBuilder) { + Builder wasmBuilder(sexpBuilder.getAllocator()); + Ref ret = ValueBuilder::makeBlock(); + flattenAppend(ret, makeInstantiation()); + for (size_t i = 1; i < root.size(); ++i) { + Element& e = *root[i]; + if (!isAssertHandled(e)) { + std::cerr << "skipping " << e << std::endl; + continue; + } + Name testFuncName(IString(("check" + std::to_string(i)).c_str(), false)); + bool isReturn = (e[0]->str() == Name("assert_return")); + Element& testOp = *e[1]; + // Replace "invoke" with "call" + testOp[0]->setString(IString("call"), false, false); + // Need to claim dollared to get string as function target + testOp[1]->setString(testOp[1]->str(), /*dollared=*/true, false); + + Ref testFunc = isReturn ? + makeAssertReturnFunc(sexpBuilder, wasmBuilder, e, testFuncName) : + makeAssertTrapFunc(sexpBuilder, wasmBuilder, e, testFuncName); + + flattenAppend(ret, testFunc); + std::stringstream failFuncName; + failFuncName << "fail" << std::to_string(i); + flattenAppend( + ret, + ValueBuilder::makeIf( + ValueBuilder::makeUnary(L_NOT, ValueBuilder::makeCall(testFuncName)), + ValueBuilder::makeCall(IString(failFuncName.str().c_str(), false)), + Ref() + ) + ); + } + return ret; +} + + +} // namespace wasm + +#endif // wasm_wasm2asm_h diff --git a/src/binaryen/test/__init__.py b/src/binaryen/test/__init__.py new file mode 100755 index 0000000000..8db5bb0bf6 --- /dev/null +++ b/src/binaryen/test/__init__.py @@ -0,0 +1,17 @@ +#! /usr/bin/env python + +# Copyright 2015 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Empty __init__.py file: Python treats the directory as containing a package. diff --git a/src/binaryen/test/address.2asm.js b/src/binaryen/test/address.2asm.js new file mode 100644 index 0000000000..c2db815c4d --- /dev/null +++ b/src/binaryen/test/address.2asm.js @@ -0,0 +1,85 @@ +function asmFunc(global, env, buffer) { + "use asm"; + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + var Math_imul = global.Math.imul; + var Math_fround = global.Math.fround; + var Math_abs = global.Math.abs; + var Math_clz32 = global.Math.clz32; + var print = env.print; + function $$0(i) { + i = i | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, $$21 = 0, $$22 = 0, $$23 = 0, $$24 = 0, $$25 = 0, $$26 = 0, wasm2asm_i32$0 = 0; + print(HEAPU8[i >> 0] | 0 | 0); + print(HEAPU8[(i + 1 | 0) >> 0] | 0 | 0); + print(HEAPU8[(i + 2 | 0) >> 0] | 0 | 0); + print(HEAPU8[(i + 25 | 0) >> 0] | 0 | 0); + print(HEAPU16[i >> 1] | 0 | 0); + print((wasm2asm_i32$0 = i, HEAPU8[wasm2asm_i32$0 >> 0] | 0 | 0 | (HEAPU8[(wasm2asm_i32$0 + 1 | 0) >> 0] | 0 | 0) << 8) | 0); + print((wasm2asm_i32$0 = i, HEAPU8[(wasm2asm_i32$0 + 1 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2asm_i32$0 + 2 | 0) >> 0] | 0 | 0) << 8) | 0); + print(HEAPU16[(i + 2 | 0) >> 1] | 0 | 0); + print((wasm2asm_i32$0 = i, HEAPU8[(wasm2asm_i32$0 + 25 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2asm_i32$0 + 26 | 0) >> 0] | 0 | 0) << 8) | 0); + print(HEAPU32[i >> 2] | 0 | 0); + print((wasm2asm_i32$0 = i, HEAPU8[(wasm2asm_i32$0 + 1 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2asm_i32$0 + 2 | 0) >> 0] | 0 | 0) << 8 | (HEAPU8[(wasm2asm_i32$0 + 3 | 0) >> 0] | 0 | 0) << 16 | (HEAPU8[(wasm2asm_i32$0 + 4 | 0) >> 0] | 0 | 0) << 24) | 0); + print((wasm2asm_i32$0 = i, HEAPU8[(wasm2asm_i32$0 + 2 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2asm_i32$0 + 3 | 0) >> 0] | 0 | 0) << 8 | (HEAPU8[(wasm2asm_i32$0 + 4 | 0) >> 0] | 0 | 0) << 16 | (HEAPU8[(wasm2asm_i32$0 + 5 | 0) >> 0] | 0 | 0) << 24) | 0); + print((wasm2asm_i32$0 = i, HEAPU8[(wasm2asm_i32$0 + 25 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2asm_i32$0 + 26 | 0) >> 0] | 0 | 0) << 8 | (HEAPU8[(wasm2asm_i32$0 + 27 | 0) >> 0] | 0 | 0) << 16 | (HEAPU8[(wasm2asm_i32$0 + 28 | 0) >> 0] | 0 | 0) << 24) | 0); + } + + function $$1(i) { + i = i | 0; + var $$1 = 0, $$2 = 0; + HEAPU32[(i + 4294967295 | 0) >> 2] | 0; + } + + function __wasm_ctz_i32(x) { + x = x | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0; + if ((x | 0) == (0 | 0)) $$9 = 32; else $$9 = 31 - Math_clz32(x ^ (x - 1 | 0) | 0) | 0; + return $$9 | 0; + } + + function __wasm_popcnt_i32(x) { + x = x | 0; + var count = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0; + count = 0; + b : { + l : do { + $$5 = count; + if ((x | 0) == (0 | 0)) break b; + x = x & (x - 1 | 0) | 0; + count = count + 1 | 0; + continue l; + break l; + } while (1); + }; + return $$5 | 0; + } + + function __wasm_rotl_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 >>> (k & 31 | 0) | 0) & x | 0) << (k & 31 | 0) | 0 | (((4294967295 << (32 - (k & 31 | 0) | 0) | 0) & x | 0) >>> (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function __wasm_rotr_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 << (k & 31 | 0) | 0) & x | 0) >>> (k & 31 | 0) | 0 | (((4294967295 >>> (32 - (k & 31 | 0) | 0) | 0) & x | 0) << (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + return { + good: $$0, + bad: $$1 + }; +} + diff --git a/src/binaryen/test/atomics.wast b/src/binaryen/test/atomics.wast new file mode 100644 index 0000000000..a2e3be5ab6 --- /dev/null +++ b/src/binaryen/test/atomics.wast @@ -0,0 +1,161 @@ +(module + (type $0 (func)) + (memory $0 (shared 23 256)) + (func $atomic-loadstore (type $0) + (local $0 i32) + (local $1 i64) + (drop + (i32.atomic.load8_u offset=4 + (get_local $0) + ) + ) + (drop + (i32.atomic.load16_u offset=4 + (get_local $0) + ) + ) + (drop + (i32.atomic.load offset=4 + (get_local $0) + ) + ) + (drop + (i64.atomic.load8_u + (get_local $0) + ) + ) + (drop + (i64.atomic.load16_u + (get_local $0) + ) + ) + (drop + (i64.atomic.load32_u + (get_local $0) + ) + ) + (drop + (i64.atomic.load + (get_local $0) + ) + ) + (i32.atomic.store offset=4 align=4 + (get_local $0) + (get_local $0) + ) + (i32.atomic.store8 offset=4 align=1 + (get_local $0) + (get_local $0) + ) + (i32.atomic.store16 offset=4 + (get_local $0) + (get_local $0) + ) + (i64.atomic.store offset=4 + (get_local $0) + (get_local $1) + ) + (i64.atomic.store8 offset=4 + (get_local $0) + (get_local $1) + ) + (i64.atomic.store16 offset=4 + (get_local $0) + (get_local $1) + ) + (i64.atomic.store32 offset=4 + (get_local $0) + (get_local $1) + ) + ) + (func $atomic-rmw (type $0) + (local $0 i32) + (local $1 i64) + (drop + (i32.atomic.rmw.add offset=4 + (get_local $0) + (get_local $0) + ) + ) + (drop + (i32.atomic.rmw8_u.add offset=4 + (get_local $0) + (get_local $0) + ) + ) + (drop + (i32.atomic.rmw16_u.and align=2 + (get_local $0) + (get_local $0) + ) + ) + (drop + (i64.atomic.rmw32_u.or + (get_local $0) + (get_local $1) + ) + ) + (drop + (i32.atomic.rmw8_u.xchg align=1 + (get_local $0) + (get_local $0) + ) + ) + ) + (func $atomic-cmpxchg (type $0) + (local $0 i32) + (local $1 i64) + (drop + (i32.atomic.rmw.cmpxchg offset=4 + (get_local $0) + (get_local $0) + (get_local $0) + ) + ) + (drop + (i32.atomic.rmw8_u.cmpxchg + (get_local $0) + (get_local $0) + (get_local $0) + ) + ) + (drop + (i64.atomic.rmw.cmpxchg offset=4 + (get_local $0) + (get_local $1) + (get_local $1) + ) + ) + (drop + (i64.atomic.rmw32_u.cmpxchg align=4 + (get_local $0) + (get_local $1) + (get_local $1) + ) + ) + ) + (func $atomic-wait-wake (type $0) + (local $0 i32) + (local $1 i64) + (drop + (i32.wait + (get_local $0) + (get_local $0) + (get_local $1) + ) + ) + (drop + (wake + (get_local $0) + (get_local $0) + ) + ) + (drop + (i64.wait + (get_local $0) + (get_local $1) + (get_local $1) + ) + ) + ) +) diff --git a/src/binaryen/test/atomics.wast.from-wast b/src/binaryen/test/atomics.wast.from-wast new file mode 100644 index 0000000000..0a57a61430 --- /dev/null +++ b/src/binaryen/test/atomics.wast.from-wast @@ -0,0 +1,161 @@ +(module + (type $0 (func)) + (memory $0 (shared 23 256)) + (func $atomic-loadstore (; 0 ;) (type $0) + (local $0 i32) + (local $1 i64) + (drop + (i32.atomic.load8_u offset=4 + (get_local $0) + ) + ) + (drop + (i32.atomic.load16_u offset=4 + (get_local $0) + ) + ) + (drop + (i32.atomic.load offset=4 + (get_local $0) + ) + ) + (drop + (i64.atomic.load8_u + (get_local $0) + ) + ) + (drop + (i64.atomic.load16_u + (get_local $0) + ) + ) + (drop + (i64.atomic.load32_u + (get_local $0) + ) + ) + (drop + (i64.atomic.load + (get_local $0) + ) + ) + (i32.atomic.store offset=4 + (get_local $0) + (get_local $0) + ) + (i32.atomic.store8 offset=4 + (get_local $0) + (get_local $0) + ) + (i32.atomic.store16 offset=4 + (get_local $0) + (get_local $0) + ) + (i64.atomic.store offset=4 + (get_local $0) + (get_local $1) + ) + (i64.atomic.store8 offset=4 + (get_local $0) + (get_local $1) + ) + (i64.atomic.store16 offset=4 + (get_local $0) + (get_local $1) + ) + (i64.atomic.store32 offset=4 + (get_local $0) + (get_local $1) + ) + ) + (func $atomic-rmw (; 1 ;) (type $0) + (local $0 i32) + (local $1 i64) + (drop + (i32.atomic.rmw.add offset=4 + (get_local $0) + (get_local $0) + ) + ) + (drop + (i32.atomic.rmw8_u.add offset=4 + (get_local $0) + (get_local $0) + ) + ) + (drop + (i32.atomic.rmw16_u.and + (get_local $0) + (get_local $0) + ) + ) + (drop + (i64.atomic.rmw32_u.or + (get_local $0) + (get_local $1) + ) + ) + (drop + (i32.atomic.rmw8_u.xchg + (get_local $0) + (get_local $0) + ) + ) + ) + (func $atomic-cmpxchg (; 2 ;) (type $0) + (local $0 i32) + (local $1 i64) + (drop + (i32.atomic.rmw.cmpxchg offset=4 + (get_local $0) + (get_local $0) + (get_local $0) + ) + ) + (drop + (i32.atomic.rmw8_u.cmpxchg + (get_local $0) + (get_local $0) + (get_local $0) + ) + ) + (drop + (i64.atomic.rmw.cmpxchg offset=4 + (get_local $0) + (get_local $1) + (get_local $1) + ) + ) + (drop + (i64.atomic.rmw32_u.cmpxchg + (get_local $0) + (get_local $1) + (get_local $1) + ) + ) + ) + (func $atomic-wait-wake (; 3 ;) (type $0) + (local $0 i32) + (local $1 i64) + (drop + (i32.wait + (get_local $0) + (get_local $0) + (get_local $1) + ) + ) + (drop + (wake + (get_local $0) + (get_local $0) + ) + ) + (drop + (i64.wait + (get_local $0) + (get_local $1) + (get_local $1) + ) + ) + ) +) diff --git a/src/binaryen/test/atomics.wast.fromBinary b/src/binaryen/test/atomics.wast.fromBinary new file mode 100644 index 0000000000..80e178cc2b --- /dev/null +++ b/src/binaryen/test/atomics.wast.fromBinary @@ -0,0 +1,162 @@ +(module + (type $0 (func)) + (memory $0 (shared 23 256)) + (func $atomic-loadstore (; 0 ;) (type $0) + (local $var$0 i32) + (local $var$1 i64) + (drop + (i32.atomic.load8_u offset=4 + (get_local $var$0) + ) + ) + (drop + (i32.atomic.load16_u offset=4 + (get_local $var$0) + ) + ) + (drop + (i32.atomic.load offset=4 + (get_local $var$0) + ) + ) + (drop + (i64.atomic.load8_u + (get_local $var$0) + ) + ) + (drop + (i64.atomic.load16_u + (get_local $var$0) + ) + ) + (drop + (i64.atomic.load32_u + (get_local $var$0) + ) + ) + (drop + (i64.atomic.load + (get_local $var$0) + ) + ) + (i32.atomic.store offset=4 + (get_local $var$0) + (get_local $var$0) + ) + (i32.atomic.store8 offset=4 + (get_local $var$0) + (get_local $var$0) + ) + (i32.atomic.store16 offset=4 + (get_local $var$0) + (get_local $var$0) + ) + (i64.atomic.store offset=4 + (get_local $var$0) + (get_local $var$1) + ) + (i64.atomic.store8 offset=4 + (get_local $var$0) + (get_local $var$1) + ) + (i64.atomic.store16 offset=4 + (get_local $var$0) + (get_local $var$1) + ) + (i64.atomic.store32 offset=4 + (get_local $var$0) + (get_local $var$1) + ) + ) + (func $atomic-rmw (; 1 ;) (type $0) + (local $var$0 i32) + (local $var$1 i64) + (drop + (i32.atomic.rmw.add offset=4 + (get_local $var$0) + (get_local $var$0) + ) + ) + (drop + (i32.atomic.rmw8_u.add offset=4 + (get_local $var$0) + (get_local $var$0) + ) + ) + (drop + (i32.atomic.rmw16_u.and + (get_local $var$0) + (get_local $var$0) + ) + ) + (drop + (i64.atomic.rmw32_u.or + (get_local $var$0) + (get_local $var$1) + ) + ) + (drop + (i32.atomic.rmw8_u.xchg + (get_local $var$0) + (get_local $var$0) + ) + ) + ) + (func $atomic-cmpxchg (; 2 ;) (type $0) + (local $var$0 i32) + (local $var$1 i64) + (drop + (i32.atomic.rmw.cmpxchg offset=4 + (get_local $var$0) + (get_local $var$0) + (get_local $var$0) + ) + ) + (drop + (i32.atomic.rmw8_u.cmpxchg + (get_local $var$0) + (get_local $var$0) + (get_local $var$0) + ) + ) + (drop + (i64.atomic.rmw.cmpxchg offset=4 + (get_local $var$0) + (get_local $var$1) + (get_local $var$1) + ) + ) + (drop + (i64.atomic.rmw32_u.cmpxchg + (get_local $var$0) + (get_local $var$1) + (get_local $var$1) + ) + ) + ) + (func $atomic-wait-wake (; 3 ;) (type $0) + (local $var$0 i32) + (local $var$1 i64) + (drop + (i32.wait + (get_local $var$0) + (get_local $var$0) + (get_local $var$1) + ) + ) + (drop + (wake + (get_local $var$0) + (get_local $var$0) + ) + ) + (drop + (i64.wait + (get_local $var$0) + (get_local $var$1) + (get_local $var$1) + ) + ) + ) +) + diff --git a/src/binaryen/test/atomics.wast.fromBinary.noDebugInfo b/src/binaryen/test/atomics.wast.fromBinary.noDebugInfo new file mode 100644 index 0000000000..0bf843e6b8 --- /dev/null +++ b/src/binaryen/test/atomics.wast.fromBinary.noDebugInfo @@ -0,0 +1,162 @@ +(module + (type $0 (func)) + (memory $0 (shared 23 256)) + (func $0 (; 0 ;) (type $0) + (local $var$0 i32) + (local $var$1 i64) + (drop + (i32.atomic.load8_u offset=4 + (get_local $var$0) + ) + ) + (drop + (i32.atomic.load16_u offset=4 + (get_local $var$0) + ) + ) + (drop + (i32.atomic.load offset=4 + (get_local $var$0) + ) + ) + (drop + (i64.atomic.load8_u + (get_local $var$0) + ) + ) + (drop + (i64.atomic.load16_u + (get_local $var$0) + ) + ) + (drop + (i64.atomic.load32_u + (get_local $var$0) + ) + ) + (drop + (i64.atomic.load + (get_local $var$0) + ) + ) + (i32.atomic.store offset=4 + (get_local $var$0) + (get_local $var$0) + ) + (i32.atomic.store8 offset=4 + (get_local $var$0) + (get_local $var$0) + ) + (i32.atomic.store16 offset=4 + (get_local $var$0) + (get_local $var$0) + ) + (i64.atomic.store offset=4 + (get_local $var$0) + (get_local $var$1) + ) + (i64.atomic.store8 offset=4 + (get_local $var$0) + (get_local $var$1) + ) + (i64.atomic.store16 offset=4 + (get_local $var$0) + (get_local $var$1) + ) + (i64.atomic.store32 offset=4 + (get_local $var$0) + (get_local $var$1) + ) + ) + (func $1 (; 1 ;) (type $0) + (local $var$0 i32) + (local $var$1 i64) + (drop + (i32.atomic.rmw.add offset=4 + (get_local $var$0) + (get_local $var$0) + ) + ) + (drop + (i32.atomic.rmw8_u.add offset=4 + (get_local $var$0) + (get_local $var$0) + ) + ) + (drop + (i32.atomic.rmw16_u.and + (get_local $var$0) + (get_local $var$0) + ) + ) + (drop + (i64.atomic.rmw32_u.or + (get_local $var$0) + (get_local $var$1) + ) + ) + (drop + (i32.atomic.rmw8_u.xchg + (get_local $var$0) + (get_local $var$0) + ) + ) + ) + (func $2 (; 2 ;) (type $0) + (local $var$0 i32) + (local $var$1 i64) + (drop + (i32.atomic.rmw.cmpxchg offset=4 + (get_local $var$0) + (get_local $var$0) + (get_local $var$0) + ) + ) + (drop + (i32.atomic.rmw8_u.cmpxchg + (get_local $var$0) + (get_local $var$0) + (get_local $var$0) + ) + ) + (drop + (i64.atomic.rmw.cmpxchg offset=4 + (get_local $var$0) + (get_local $var$1) + (get_local $var$1) + ) + ) + (drop + (i64.atomic.rmw32_u.cmpxchg + (get_local $var$0) + (get_local $var$1) + (get_local $var$1) + ) + ) + ) + (func $3 (; 3 ;) (type $0) + (local $var$0 i32) + (local $var$1 i64) + (drop + (i32.wait + (get_local $var$0) + (get_local $var$0) + (get_local $var$1) + ) + ) + (drop + (wake + (get_local $var$0) + (get_local $var$0) + ) + ) + (drop + (i64.wait + (get_local $var$0) + (get_local $var$1) + (get_local $var$1) + ) + ) + ) +) + diff --git a/src/binaryen/test/bigswitch.cpp b/src/binaryen/test/bigswitch.cpp new file mode 100644 index 0000000000..5b1f1bacad --- /dev/null +++ b/src/binaryen/test/bigswitch.cpp @@ -0,0 +1,7946 @@ +#include +#include +#include +#include "SDL/SDL_opengl.h" + +const char *WWWGLEnumToString(GLenum e) +{ +switch(e) +{ +case 0x0000 /* GL_POINTS */: return "GL_POINTS (0x0000)"; +case 0x00000001 /* GL_CURRENT_BIT */: return "GL_LINES/GL_CURRENT_BIT/GL_CLIENT_PIXEL_STORE_BIT (0x00000001)"; +case 0x0002 /* GL_LINE_LOOP */: return "GL_LINE_LOOP/GL_POINT_BIT/GL_CLIENT_VERTEX_ARRAY_BIT (0x0002)"; +case 0x0003 /* GL_LINE_STRIP */: return "GL_LINE_STRIP (0x0003)"; +case 0x00000004 /* GL_LINE_BIT */: return "GL_TRIANGLES/GL_LINE_BIT (0x00000004)"; +case 0x0005 /* GL_TRIANGLE_STRIP */: return "GL_TRIANGLE_STRIP (0x0005)"; +case 0x0006 /* GL_TRIANGLE_FAN */: return "GL_TRIANGLE_FAN (0x0006)"; +case 0x0007 /* GL_QUADS */: return "GL_QUADS (0x0007)"; +case 0x0008 /* GL_QUAD_STRIP */: return "GL_QUAD_STRIP/GL_POLYGON_BIT (0x0008)"; +case 0x0009 /* GL_POLYGON */: return "GL_POLYGON (0x0009)"; +case 0x00000010 /* GL_POLYGON_STIPPLE_BIT */: return "GL_POLYGON_STIPPLE_BIT (0x00000010)"; +case 0x00000020 /* GL_PIXEL_MODE_BIT */: return "GL_PIXEL_MODE_BIT (0x00000020)"; +case 0x00000040 /* GL_LIGHTING_BIT */: return "GL_LIGHTING_BIT (0x00000040)"; +case 0x00000080 /* GL_FOG_BIT */: return "GL_FOG_BIT (0x00000080)"; +case 0x00000100 /* GL_DEPTH_BUFFER_BIT */: return "GL_DEPTH_BUFFER_BIT/GL_ACCUM (0x00000100)"; +case 0x0101 /* GL_LOAD */: return "GL_LOAD (0x0101)"; +case 0x0102 /* GL_RETURN */: return "GL_RETURN (0x0102)"; +case 0x0103 /* GL_MULT */: return "GL_MULT (0x0103)"; +case 0x0104 /* GL_ADD */: return "GL_ADD (0x0104)"; +case 0x0200 /* GL_NEVER */: return "GL_NEVER/GL_ACCUM_BUFFER_BIT (0x0200)"; +case 0x0201 /* GL_LESS */: return "GL_LESS (0x0201)"; +case 0x0202 /* GL_EQUAL */: return "GL_EQUAL (0x0202)"; +case 0x0203 /* GL_LEQUAL */: return "GL_LEQUAL (0x0203)"; +case 0x0204 /* GL_GREATER */: return "GL_GREATER (0x0204)"; +case 0x0205 /* GL_NOTEQUAL */: return "GL_NOTEQUAL (0x0205)"; +case 0x0206 /* GL_GEQUAL */: return "GL_GEQUAL (0x0206)"; +case 0x0207 /* GL_ALWAYS */: return "GL_ALWAYS (0x0207)"; +case 0x0300 /* GL_SRC_COLOR */: return "GL_SRC_COLOR (0x0300)"; +case 0x0301 /* GL_ONE_MINUS_SRC_COLOR */: return "GL_ONE_MINUS_SRC_COLOR (0x0301)"; +case 0x0302 /* GL_SRC_ALPHA */: return "GL_SRC_ALPHA (0x0302)"; +case 0x0303 /* GL_ONE_MINUS_SRC_ALPHA */: return "GL_ONE_MINUS_SRC_ALPHA (0x0303)"; +case 0x0304 /* GL_DST_ALPHA */: return "GL_DST_ALPHA (0x0304)"; +case 0x0305 /* GL_ONE_MINUS_DST_ALPHA */: return "GL_ONE_MINUS_DST_ALPHA (0x0305)"; +case 0x0306 /* GL_DST_COLOR */: return "GL_DST_COLOR (0x0306)"; +case 0x0307 /* GL_ONE_MINUS_DST_COLOR */: return "GL_ONE_MINUS_DST_COLOR (0x0307)"; +case 0x0308 /* GL_SRC_ALPHA_SATURATE */: return "GL_SRC_ALPHA_SATURATE (0x0308)"; +case 0x00000400 /* GL_STENCIL_BUFFER_BIT */: return "GL_STENCIL_BUFFER_BIT/GL_FRONT_LEFT (0x00000400)"; +case 0x0401 /* GL_FRONT_RIGHT */: return "GL_FRONT_RIGHT (0x0401)"; +case 0x0402 /* GL_BACK_LEFT */: return "GL_BACK_LEFT (0x0402)"; +case 0x0403 /* GL_BACK_RIGHT */: return "GL_BACK_RIGHT (0x0403)"; +case 0x0404 /* GL_FRONT */: return "GL_FRONT (0x0404)"; +case 0x0405 /* GL_BACK */: return "GL_BACK (0x0405)"; +case 0x0406 /* GL_LEFT */: return "GL_LEFT (0x0406)"; +case 0x0407 /* GL_RIGHT */: return "GL_RIGHT (0x0407)"; +case 0x0408 /* GL_FRONT_AND_BACK */: return "GL_FRONT_AND_BACK (0x0408)"; +case 0x0409 /* GL_AUX0 */: return "GL_AUX0 (0x0409)"; +case 0x040A /* GL_AUX1 */: return "GL_AUX1 (0x040A)"; +case 0x040B /* GL_AUX2 */: return "GL_AUX2 (0x040B)"; +case 0x040C /* GL_AUX3 */: return "GL_AUX3 (0x040C)"; +case 0x0500 /* GL_INVALID_ENUM */: return "GL_INVALID_ENUM (0x0500)"; +case 0x0501 /* GL_INVALID_VALUE */: return "GL_INVALID_VALUE (0x0501)"; +case 0x0502 /* GL_INVALID_OPERATION */: return "GL_INVALID_OPERATION (0x0502)"; +case 0x0503 /* GL_STACK_OVERFLOW */: return "GL_STACK_OVERFLOW (0x0503)"; +case 0x0504 /* GL_STACK_UNDERFLOW */: return "GL_STACK_UNDERFLOW (0x0504)"; +case 0x0505 /* GL_OUT_OF_MEMORY */: return "GL_OUT_OF_MEMORY (0x0505)"; +case 0x0600 /* GL_2D */: return "GL_2D (0x0600)"; +case 0x0601 /* GL_3D */: return "GL_3D (0x0601)"; +case 0x0602 /* GL_3D_COLOR */: return "GL_3D_COLOR (0x0602)"; +case 0x0603 /* GL_3D_COLOR_TEXTURE */: return "GL_3D_COLOR_TEXTURE (0x0603)"; +case 0x0604 /* GL_4D_COLOR_TEXTURE */: return "GL_4D_COLOR_TEXTURE (0x0604)"; +case 0x0700 /* GL_PASS_THROUGH_TOKEN */: return "GL_PASS_THROUGH_TOKEN (0x0700)"; +case 0x0701 /* GL_POINT_TOKEN */: return "GL_POINT_TOKEN (0x0701)"; +case 0x0702 /* GL_LINE_TOKEN */: return "GL_LINE_TOKEN (0x0702)"; +case 0x0703 /* GL_POLYGON_TOKEN */: return "GL_POLYGON_TOKEN (0x0703)"; +case 0x0704 /* GL_BITMAP_TOKEN */: return "GL_BITMAP_TOKEN (0x0704)"; +case 0x0705 /* GL_DRAW_PIXEL_TOKEN */: return "GL_DRAW_PIXEL_TOKEN (0x0705)"; +case 0x0706 /* GL_COPY_PIXEL_TOKEN */: return "GL_COPY_PIXEL_TOKEN (0x0706)"; +case 0x0707 /* GL_LINE_RESET_TOKEN */: return "GL_LINE_RESET_TOKEN (0x0707)"; +case 0x0800 /* GL_EXP */: return "GL_EXP/GL_VIEWPORT_BIT (0x0800)"; +case 0x0801 /* GL_EXP2 */: return "GL_EXP2 (0x0801)"; +case 0x0900 /* GL_CW */: return "GL_CW (0x0900)"; +case 0x0901 /* GL_CCW */: return "GL_CCW (0x0901)"; +case 0x0A00 /* GL_COEFF */: return "GL_COEFF (0x0A00)"; +case 0x0A01 /* GL_ORDER */: return "GL_ORDER (0x0A01)"; +case 0x0A02 /* GL_DOMAIN */: return "GL_DOMAIN (0x0A02)"; +case 0x0B00 /* GL_CURRENT_COLOR */: return "GL_CURRENT_COLOR (0x0B00)"; +case 0x0B01 /* GL_CURRENT_INDEX */: return "GL_CURRENT_INDEX (0x0B01)"; +case 0x0B02 /* GL_CURRENT_NORMAL */: return "GL_CURRENT_NORMAL (0x0B02)"; +case 0x0B03 /* GL_CURRENT_TEXTURE_COORDS */: return "GL_CURRENT_TEXTURE_COORDS (0x0B03)"; +case 0x0B04 /* GL_CURRENT_RASTER_COLOR */: return "GL_CURRENT_RASTER_COLOR (0x0B04)"; +case 0x0B05 /* GL_CURRENT_RASTER_INDEX */: return "GL_CURRENT_RASTER_INDEX (0x0B05)"; +case 0x0B06 /* GL_CURRENT_RASTER_TEXTURE_COORDS */: return "GL_CURRENT_RASTER_TEXTURE_COORDS (0x0B06)"; +case 0x0B07 /* GL_CURRENT_RASTER_POSITION */: return "GL_CURRENT_RASTER_POSITION (0x0B07)"; +case 0x0B08 /* GL_CURRENT_RASTER_POSITION_VALID */: return "GL_CURRENT_RASTER_POSITION_VALID (0x0B08)"; +case 0x0B09 /* GL_CURRENT_RASTER_DISTANCE */: return "GL_CURRENT_RASTER_DISTANCE (0x0B09)"; +case 0x0B10 /* GL_POINT_SMOOTH */: return "GL_POINT_SMOOTH (0x0B10)"; +case 0x0B11 /* GL_POINT_SIZE */: return "GL_POINT_SIZE (0x0B11)"; +case 0x0B20 /* GL_LINE_SMOOTH */: return "GL_LINE_SMOOTH (0x0B20)"; +case 0x0B21 /* GL_LINE_WIDTH */: return "GL_LINE_WIDTH (0x0B21)"; +case 0x0B24 /* GL_LINE_STIPPLE */: return "GL_LINE_STIPPLE (0x0B24)"; +case 0x0B25 /* GL_LINE_STIPPLE_PATTERN */: return "GL_LINE_STIPPLE_PATTERN (0x0B25)"; +case 0x0B26 /* GL_LINE_STIPPLE_REPEAT */: return "GL_LINE_STIPPLE_REPEAT (0x0B26)"; +case 0x0B30 /* GL_LIST_MODE */: return "GL_LIST_MODE (0x0B30)"; +case 0x0B31 /* GL_MAX_LIST_NESTING */: return "GL_MAX_LIST_NESTING (0x0B31)"; +case 0x0B32 /* GL_LIST_BASE */: return "GL_LIST_BASE (0x0B32)"; +case 0x0B33 /* GL_LIST_INDEX */: return "GL_LIST_INDEX (0x0B33)"; +case 0x0B40 /* GL_POLYGON_MODE */: return "GL_POLYGON_MODE (0x0B40)"; +case 0x0B41 /* GL_POLYGON_SMOOTH */: return "GL_POLYGON_SMOOTH (0x0B41)"; +case 0x0B42 /* GL_POLYGON_STIPPLE */: return "GL_POLYGON_STIPPLE (0x0B42)"; +case 0x0B43 /* GL_EDGE_FLAG */: return "GL_EDGE_FLAG (0x0B43)"; +case 0x0B44 /* GL_CULL_FACE */: return "GL_CULL_FACE (0x0B44)"; +case 0x0B45 /* GL_CULL_FACE_MODE */: return "GL_CULL_FACE_MODE (0x0B45)"; +case 0x0B46 /* GL_FRONT_FACE */: return "GL_FRONT_FACE (0x0B46)"; +case 0x0B50 /* GL_LIGHTING */: return "GL_LIGHTING (0x0B50)"; +case 0x0B51 /* GL_LIGHT_MODEL_LOCAL_VIEWER */: return "GL_LIGHT_MODEL_LOCAL_VIEWER (0x0B51)"; +case 0x0B52 /* GL_LIGHT_MODEL_TWO_SIDE */: return "GL_LIGHT_MODEL_TWO_SIDE (0x0B52)"; +case 0x0B53 /* GL_LIGHT_MODEL_AMBIENT */: return "GL_LIGHT_MODEL_AMBIENT (0x0B53)"; +case 0x0B54 /* GL_SHADE_MODEL */: return "GL_SHADE_MODEL (0x0B54)"; +case 0x0B55 /* GL_COLOR_MATERIAL_FACE */: return "GL_COLOR_MATERIAL_FACE (0x0B55)"; +case 0x0B56 /* GL_COLOR_MATERIAL_PARAMETER */: return "GL_COLOR_MATERIAL_PARAMETER (0x0B56)"; +case 0x0B57 /* GL_COLOR_MATERIAL */: return "GL_COLOR_MATERIAL (0x0B57)"; +case 0x0B60 /* GL_FOG */: return "GL_FOG (0x0B60)"; +case 0x0B61 /* GL_FOG_INDEX */: return "GL_FOG_INDEX (0x0B61)"; +case 0x0B62 /* GL_FOG_DENSITY */: return "GL_FOG_DENSITY (0x0B62)"; +case 0x0B63 /* GL_FOG_START */: return "GL_FOG_START (0x0B63)"; +case 0x0B64 /* GL_FOG_END */: return "GL_FOG_END (0x0B64)"; +case 0x0B65 /* GL_FOG_MODE */: return "GL_FOG_MODE (0x0B65)"; +case 0x0B66 /* GL_FOG_COLOR */: return "GL_FOG_COLOR (0x0B66)"; +case 0x0B70 /* GL_DEPTH_RANGE */: return "GL_DEPTH_RANGE (0x0B70)"; +case 0x0B71 /* GL_DEPTH_TEST */: return "GL_DEPTH_TEST (0x0B71)"; +case 0x0B72 /* GL_DEPTH_WRITEMASK */: return "GL_DEPTH_WRITEMASK (0x0B72)"; +case 0x0B73 /* GL_DEPTH_CLEAR_VALUE */: return "GL_DEPTH_CLEAR_VALUE (0x0B73)"; +case 0x0B74 /* GL_DEPTH_FUNC */: return "GL_DEPTH_FUNC (0x0B74)"; +case 0x0B80 /* GL_ACCUM_CLEAR_VALUE */: return "GL_ACCUM_CLEAR_VALUE (0x0B80)"; +case 0x0B90 /* GL_STENCIL_TEST */: return "GL_STENCIL_TEST (0x0B90)"; +case 0x0B91 /* GL_STENCIL_CLEAR_VALUE */: return "GL_STENCIL_CLEAR_VALUE (0x0B91)"; +case 0x0B92 /* GL_STENCIL_FUNC */: return "GL_STENCIL_FUNC (0x0B92)"; +case 0x0B93 /* GL_STENCIL_VALUE_MASK */: return "GL_STENCIL_VALUE_MASK (0x0B93)"; +case 0x0B94 /* GL_STENCIL_FAIL */: return "GL_STENCIL_FAIL (0x0B94)"; +case 0x0B95 /* GL_STENCIL_PASS_DEPTH_FAIL */: return "GL_STENCIL_PASS_DEPTH_FAIL (0x0B95)"; +case 0x0B96 /* GL_STENCIL_PASS_DEPTH_PASS */: return "GL_STENCIL_PASS_DEPTH_PASS (0x0B96)"; +case 0x0B97 /* GL_STENCIL_REF */: return "GL_STENCIL_REF (0x0B97)"; +case 0x0B98 /* GL_STENCIL_WRITEMASK */: return "GL_STENCIL_WRITEMASK (0x0B98)"; +case 0x0BA0 /* GL_MATRIX_MODE */: return "GL_MATRIX_MODE (0x0BA0)"; +case 0x0BA1 /* GL_NORMALIZE */: return "GL_NORMALIZE (0x0BA1)"; +case 0x0BA2 /* GL_VIEWPORT */: return "GL_VIEWPORT (0x0BA2)"; +case 0x0BA3 /* GL_MODELVIEW_STACK_DEPTH */: return "GL_MODELVIEW_STACK_DEPTH (0x0BA3)"; +case 0x0BA4 /* GL_PROJECTION_STACK_DEPTH */: return "GL_PROJECTION_STACK_DEPTH (0x0BA4)"; +case 0x0BA5 /* GL_TEXTURE_STACK_DEPTH */: return "GL_TEXTURE_STACK_DEPTH (0x0BA5)"; +case 0x0BA6 /* GL_MODELVIEW_MATRIX */: return "GL_MODELVIEW_MATRIX (0x0BA6)"; +case 0x0BA7 /* GL_PROJECTION_MATRIX */: return "GL_PROJECTION_MATRIX (0x0BA7)"; +case 0x0BA8 /* GL_TEXTURE_MATRIX */: return "GL_TEXTURE_MATRIX (0x0BA8)"; +case 0x0BB0 /* GL_ATTRIB_STACK_DEPTH */: return "GL_ATTRIB_STACK_DEPTH (0x0BB0)"; +case 0x0BB1 /* GL_CLIENT_ATTRIB_STACK_DEPTH */: return "GL_CLIENT_ATTRIB_STACK_DEPTH (0x0BB1)"; +case 0x0BC0 /* GL_ALPHA_TEST */: return "GL_ALPHA_TEST (0x0BC0)"; +case 0x0BC1 /* GL_ALPHA_TEST_FUNC */: return "GL_ALPHA_TEST_FUNC (0x0BC1)"; +case 0x0BC2 /* GL_ALPHA_TEST_REF */: return "GL_ALPHA_TEST_REF (0x0BC2)"; +case 0x0BD0 /* GL_DITHER */: return "GL_DITHER (0x0BD0)"; +case 0x0BE0 /* GL_BLEND_DST */: return "GL_BLEND_DST (0x0BE0)"; +case 0x0BE1 /* GL_BLEND_SRC */: return "GL_BLEND_SRC (0x0BE1)"; +case 0x0BE2 /* GL_BLEND */: return "GL_BLEND (0x0BE2)"; +case 0x0BF0 /* GL_LOGIC_OP_MODE */: return "GL_LOGIC_OP_MODE (0x0BF0)"; +case 0x0BF1 /* GL_LOGIC_OP */: return "GL_LOGIC_OP/GL_INDEX_LOGIC_OP (0x0BF1)"; +//case 0x0BF1 /* GL_INDEX_LOGIC_OP */: return "GL_INDEX_LOGIC_OP (0x0BF1)"; +case 0x0BF2 /* GL_COLOR_LOGIC_OP */: return "GL_COLOR_LOGIC_OP (0x0BF2)"; +case 0x0C00 /* GL_AUX_BUFFERS */: return "GL_AUX_BUFFERS (0x0C00)"; +case 0x0C01 /* GL_DRAW_BUFFER */: return "GL_DRAW_BUFFER (0x0C01)"; +case 0x0C02 /* GL_READ_BUFFER */: return "GL_READ_BUFFER (0x0C02)"; +case 0x0C10 /* GL_SCISSOR_BOX */: return "GL_SCISSOR_BOX (0x0C10)"; +case 0x0C11 /* GL_SCISSOR_TEST */: return "GL_SCISSOR_TEST (0x0C11)"; +case 0x0C20 /* GL_INDEX_CLEAR_VALUE */: return "GL_INDEX_CLEAR_VALUE (0x0C20)"; +case 0x0C21 /* GL_INDEX_WRITEMASK */: return "GL_INDEX_WRITEMASK (0x0C21)"; +case 0x0C22 /* GL_COLOR_CLEAR_VALUE */: return "GL_COLOR_CLEAR_VALUE (0x0C22)"; +case 0x0C23 /* GL_COLOR_WRITEMASK */: return "GL_COLOR_WRITEMASK (0x0C23)"; +case 0x0C30 /* GL_INDEX_MODE */: return "GL_INDEX_MODE (0x0C30)"; +case 0x0C31 /* GL_RGBA_MODE */: return "GL_RGBA_MODE (0x0C31)"; +case 0x0C32 /* GL_DOUBLEBUFFER */: return "GL_DOUBLEBUFFER (0x0C32)"; +case 0x0C33 /* GL_STEREO */: return "GL_STEREO (0x0C33)"; +case 0x0C40 /* GL_RENDER_MODE */: return "GL_RENDER_MODE (0x0C40)"; +case 0x0C50 /* GL_PERSPECTIVE_CORRECTION_HINT */: return "GL_PERSPECTIVE_CORRECTION_HINT (0x0C50)"; +case 0x0C51 /* GL_POINT_SMOOTH_HINT */: return "GL_POINT_SMOOTH_HINT (0x0C51)"; +case 0x0C52 /* GL_LINE_SMOOTH_HINT */: return "GL_LINE_SMOOTH_HINT (0x0C52)"; +case 0x0C53 /* GL_POLYGON_SMOOTH_HINT */: return "GL_POLYGON_SMOOTH_HINT (0x0C53)"; +case 0x0C54 /* GL_FOG_HINT */: return "GL_FOG_HINT (0x0C54)"; +case 0x0C60 /* GL_TEXTURE_GEN_S */: return "GL_TEXTURE_GEN_S (0x0C60)"; +case 0x0C61 /* GL_TEXTURE_GEN_T */: return "GL_TEXTURE_GEN_T (0x0C61)"; +case 0x0C62 /* GL_TEXTURE_GEN_R */: return "GL_TEXTURE_GEN_R (0x0C62)"; +case 0x0C63 /* GL_TEXTURE_GEN_Q */: return "GL_TEXTURE_GEN_Q (0x0C63)"; +case 0x0C70 /* GL_PIXEL_MAP_I_TO_I */: return "GL_PIXEL_MAP_I_TO_I (0x0C70)"; +case 0x0C71 /* GL_PIXEL_MAP_S_TO_S */: return "GL_PIXEL_MAP_S_TO_S (0x0C71)"; +case 0x0C72 /* GL_PIXEL_MAP_I_TO_R */: return "GL_PIXEL_MAP_I_TO_R (0x0C72)"; +case 0x0C73 /* GL_PIXEL_MAP_I_TO_G */: return "GL_PIXEL_MAP_I_TO_G (0x0C73)"; +case 0x0C74 /* GL_PIXEL_MAP_I_TO_B */: return "GL_PIXEL_MAP_I_TO_B (0x0C74)"; +case 0x0C75 /* GL_PIXEL_MAP_I_TO_A */: return "GL_PIXEL_MAP_I_TO_A (0x0C75)"; +case 0x0C76 /* GL_PIXEL_MAP_R_TO_R */: return "GL_PIXEL_MAP_R_TO_R (0x0C76)"; +case 0x0C77 /* GL_PIXEL_MAP_G_TO_G */: return "GL_PIXEL_MAP_G_TO_G (0x0C77)"; +case 0x0C78 /* GL_PIXEL_MAP_B_TO_B */: return "GL_PIXEL_MAP_B_TO_B (0x0C78)"; +case 0x0C79 /* GL_PIXEL_MAP_A_TO_A */: return "GL_PIXEL_MAP_A_TO_A (0x0C79)"; +case 0x0CB0 /* GL_PIXEL_MAP_I_TO_I_SIZE */: return "GL_PIXEL_MAP_I_TO_I_SIZE (0x0CB0)"; +case 0x0CB1 /* GL_PIXEL_MAP_S_TO_S_SIZE */: return "GL_PIXEL_MAP_S_TO_S_SIZE (0x0CB1)"; +case 0x0CB2 /* GL_PIXEL_MAP_I_TO_R_SIZE */: return "GL_PIXEL_MAP_I_TO_R_SIZE (0x0CB2)"; +case 0x0CB3 /* GL_PIXEL_MAP_I_TO_G_SIZE */: return "GL_PIXEL_MAP_I_TO_G_SIZE (0x0CB3)"; +case 0x0CB4 /* GL_PIXEL_MAP_I_TO_B_SIZE */: return "GL_PIXEL_MAP_I_TO_B_SIZE (0x0CB4)"; +case 0x0CB5 /* GL_PIXEL_MAP_I_TO_A_SIZE */: return "GL_PIXEL_MAP_I_TO_A_SIZE (0x0CB5)"; +case 0x0CB6 /* GL_PIXEL_MAP_R_TO_R_SIZE */: return "GL_PIXEL_MAP_R_TO_R_SIZE (0x0CB6)"; +case 0x0CB7 /* GL_PIXEL_MAP_G_TO_G_SIZE */: return "GL_PIXEL_MAP_G_TO_G_SIZE (0x0CB7)"; +case 0x0CB8 /* GL_PIXEL_MAP_B_TO_B_SIZE */: return "GL_PIXEL_MAP_B_TO_B_SIZE (0x0CB8)"; +case 0x0CB9 /* GL_PIXEL_MAP_A_TO_A_SIZE */: return "GL_PIXEL_MAP_A_TO_A_SIZE (0x0CB9)"; +case 0x0CF0 /* GL_UNPACK_SWAP_BYTES */: return "GL_UNPACK_SWAP_BYTES (0x0CF0)"; +case 0x0CF1 /* GL_UNPACK_LSB_FIRST */: return "GL_UNPACK_LSB_FIRST (0x0CF1)"; +case 0x0CF2 /* GL_UNPACK_ROW_LENGTH */: return "GL_UNPACK_ROW_LENGTH (0x0CF2)"; +case 0x0CF3 /* GL_UNPACK_SKIP_ROWS */: return "GL_UNPACK_SKIP_ROWS (0x0CF3)"; +case 0x0CF4 /* GL_UNPACK_SKIP_PIXELS */: return "GL_UNPACK_SKIP_PIXELS (0x0CF4)"; +case 0x0CF5 /* GL_UNPACK_ALIGNMENT */: return "GL_UNPACK_ALIGNMENT (0x0CF5)"; +case 0x0D00 /* GL_PACK_SWAP_BYTES */: return "GL_PACK_SWAP_BYTES (0x0D00)"; +case 0x0D01 /* GL_PACK_LSB_FIRST */: return "GL_PACK_LSB_FIRST (0x0D01)"; +case 0x0D02 /* GL_PACK_ROW_LENGTH */: return "GL_PACK_ROW_LENGTH (0x0D02)"; +case 0x0D03 /* GL_PACK_SKIP_ROWS */: return "GL_PACK_SKIP_ROWS (0x0D03)"; +case 0x0D04 /* GL_PACK_SKIP_PIXELS */: return "GL_PACK_SKIP_PIXELS (0x0D04)"; +case 0x0D05 /* GL_PACK_ALIGNMENT */: return "GL_PACK_ALIGNMENT (0x0D05)"; +case 0x0D10 /* GL_MAP_COLOR */: return "GL_MAP_COLOR (0x0D10)"; +case 0x0D11 /* GL_MAP_STENCIL */: return "GL_MAP_STENCIL (0x0D11)"; +case 0x0D12 /* GL_INDEX_SHIFT */: return "GL_INDEX_SHIFT (0x0D12)"; +case 0x0D13 /* GL_INDEX_OFFSET */: return "GL_INDEX_OFFSET (0x0D13)"; +case 0x0D14 /* GL_RED_SCALE */: return "GL_RED_SCALE (0x0D14)"; +case 0x0D15 /* GL_RED_BIAS */: return "GL_RED_BIAS (0x0D15)"; +case 0x0D16 /* GL_ZOOM_X */: return "GL_ZOOM_X (0x0D16)"; +case 0x0D17 /* GL_ZOOM_Y */: return "GL_ZOOM_Y (0x0D17)"; +case 0x0D18 /* GL_GREEN_SCALE */: return "GL_GREEN_SCALE (0x0D18)"; +case 0x0D19 /* GL_GREEN_BIAS */: return "GL_GREEN_BIAS (0x0D19)"; +case 0x0D1A /* GL_BLUE_SCALE */: return "GL_BLUE_SCALE (0x0D1A)"; +case 0x0D1B /* GL_BLUE_BIAS */: return "GL_BLUE_BIAS (0x0D1B)"; +case 0x0D1C /* GL_ALPHA_SCALE */: return "GL_ALPHA_SCALE (0x0D1C)"; +case 0x0D1D /* GL_ALPHA_BIAS */: return "GL_ALPHA_BIAS (0x0D1D)"; +case 0x0D1E /* GL_DEPTH_SCALE */: return "GL_DEPTH_SCALE (0x0D1E)"; +case 0x0D1F /* GL_DEPTH_BIAS */: return "GL_DEPTH_BIAS (0x0D1F)"; +case 0x0D30 /* GL_MAX_EVAL_ORDER */: return "GL_MAX_EVAL_ORDER (0x0D30)"; +case 0x0D31 /* GL_MAX_LIGHTS */: return "GL_MAX_LIGHTS (0x0D31)"; +case 0x0D32 /* GL_MAX_CLIP_PLANES */: return "GL_MAX_CLIP_PLANES (0x0D32)"; +case 0x0D33 /* GL_MAX_TEXTURE_SIZE */: return "GL_MAX_TEXTURE_SIZE (0x0D33)"; +case 0x0D34 /* GL_MAX_PIXEL_MAP_TABLE */: return "GL_MAX_PIXEL_MAP_TABLE (0x0D34)"; +case 0x0D35 /* GL_MAX_ATTRIB_STACK_DEPTH */: return "GL_MAX_ATTRIB_STACK_DEPTH (0x0D35)"; +case 0x0D36 /* GL_MAX_MODELVIEW_STACK_DEPTH */: return "GL_MAX_MODELVIEW_STACK_DEPTH (0x0D36)"; +case 0x0D37 /* GL_MAX_NAME_STACK_DEPTH */: return "GL_MAX_NAME_STACK_DEPTH (0x0D37)"; +case 0x0D38 /* GL_MAX_PROJECTION_STACK_DEPTH */: return "GL_MAX_PROJECTION_STACK_DEPTH (0x0D38)"; +case 0x0D39 /* GL_MAX_TEXTURE_STACK_DEPTH */: return "GL_MAX_TEXTURE_STACK_DEPTH (0x0D39)"; +case 0x0D3A /* GL_MAX_VIEWPORT_DIMS */: return "GL_MAX_VIEWPORT_DIMS (0x0D3A)"; +case 0x0D3B /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */: return "GL_MAX_CLIENT_ATTRIB_STACK_DEPTH (0x0D3B)"; +case 0x0D50 /* GL_SUBPIXEL_BITS */: return "GL_SUBPIXEL_BITS (0x0D50)"; +case 0x0D51 /* GL_INDEX_BITS */: return "GL_INDEX_BITS (0x0D51)"; +case 0x0D52 /* GL_RED_BITS */: return "GL_RED_BITS (0x0D52)"; +case 0x0D53 /* GL_GREEN_BITS */: return "GL_GREEN_BITS (0x0D53)"; +case 0x0D54 /* GL_BLUE_BITS */: return "GL_BLUE_BITS (0x0D54)"; +case 0x0D55 /* GL_ALPHA_BITS */: return "GL_ALPHA_BITS (0x0D55)"; +case 0x0D56 /* GL_DEPTH_BITS */: return "GL_DEPTH_BITS (0x0D56)"; +case 0x0D57 /* GL_STENCIL_BITS */: return "GL_STENCIL_BITS (0x0D57)"; +case 0x0D58 /* GL_ACCUM_RED_BITS */: return "GL_ACCUM_RED_BITS (0x0D58)"; +case 0x0D59 /* GL_ACCUM_GREEN_BITS */: return "GL_ACCUM_GREEN_BITS (0x0D59)"; +case 0x0D5A /* GL_ACCUM_BLUE_BITS */: return "GL_ACCUM_BLUE_BITS (0x0D5A)"; +case 0x0D5B /* GL_ACCUM_ALPHA_BITS */: return "GL_ACCUM_ALPHA_BITS (0x0D5B)"; +case 0x0D70 /* GL_NAME_STACK_DEPTH */: return "GL_NAME_STACK_DEPTH (0x0D70)"; +case 0x0D80 /* GL_AUTO_NORMAL */: return "GL_AUTO_NORMAL (0x0D80)"; +case 0x0D90 /* GL_MAP1_COLOR_4 */: return "GL_MAP1_COLOR_4 (0x0D90)"; +case 0x0D91 /* GL_MAP1_INDEX */: return "GL_MAP1_INDEX (0x0D91)"; +case 0x0D92 /* GL_MAP1_NORMAL */: return "GL_MAP1_NORMAL (0x0D92)"; +case 0x0D93 /* GL_MAP1_TEXTURE_COORD_1 */: return "GL_MAP1_TEXTURE_COORD_1 (0x0D93)"; +case 0x0D94 /* GL_MAP1_TEXTURE_COORD_2 */: return "GL_MAP1_TEXTURE_COORD_2 (0x0D94)"; +case 0x0D95 /* GL_MAP1_TEXTURE_COORD_3 */: return "GL_MAP1_TEXTURE_COORD_3 (0x0D95)"; +case 0x0D96 /* GL_MAP1_TEXTURE_COORD_4 */: return "GL_MAP1_TEXTURE_COORD_4 (0x0D96)"; +case 0x0D97 /* GL_MAP1_VERTEX_3 */: return "GL_MAP1_VERTEX_3 (0x0D97)"; +case 0x0D98 /* GL_MAP1_VERTEX_4 */: return "GL_MAP1_VERTEX_4 (0x0D98)"; +case 0x0DB0 /* GL_MAP2_COLOR_4 */: return "GL_MAP2_COLOR_4 (0x0DB0)"; +case 0x0DB1 /* GL_MAP2_INDEX */: return "GL_MAP2_INDEX (0x0DB1)"; +case 0x0DB2 /* GL_MAP2_NORMAL */: return "GL_MAP2_NORMAL (0x0DB2)"; +case 0x0DB3 /* GL_MAP2_TEXTURE_COORD_1 */: return "GL_MAP2_TEXTURE_COORD_1 (0x0DB3)"; +case 0x0DB4 /* GL_MAP2_TEXTURE_COORD_2 */: return "GL_MAP2_TEXTURE_COORD_2 (0x0DB4)"; +case 0x0DB5 /* GL_MAP2_TEXTURE_COORD_3 */: return "GL_MAP2_TEXTURE_COORD_3 (0x0DB5)"; +case 0x0DB6 /* GL_MAP2_TEXTURE_COORD_4 */: return "GL_MAP2_TEXTURE_COORD_4 (0x0DB6)"; +case 0x0DB7 /* GL_MAP2_VERTEX_3 */: return "GL_MAP2_VERTEX_3 (0x0DB7)"; +case 0x0DB8 /* GL_MAP2_VERTEX_4 */: return "GL_MAP2_VERTEX_4 (0x0DB8)"; +case 0x0DD0 /* GL_MAP1_GRID_DOMAIN */: return "GL_MAP1_GRID_DOMAIN (0x0DD0)"; +case 0x0DD1 /* GL_MAP1_GRID_SEGMENTS */: return "GL_MAP1_GRID_SEGMENTS (0x0DD1)"; +case 0x0DD2 /* GL_MAP2_GRID_DOMAIN */: return "GL_MAP2_GRID_DOMAIN (0x0DD2)"; +case 0x0DD3 /* GL_MAP2_GRID_SEGMENTS */: return "GL_MAP2_GRID_SEGMENTS (0x0DD3)"; +case 0x0DE0 /* GL_TEXTURE_1D */: return "GL_TEXTURE_1D (0x0DE0)"; +case 0x0DE1 /* GL_TEXTURE_2D */: return "GL_TEXTURE_2D (0x0DE1)"; +case 0x0DF0 /* GL_FEEDBACK_BUFFER_POINTER */: return "GL_FEEDBACK_BUFFER_POINTER (0x0DF0)"; +case 0x0DF1 /* GL_FEEDBACK_BUFFER_SIZE */: return "GL_FEEDBACK_BUFFER_SIZE (0x0DF1)"; +case 0x0DF2 /* GL_FEEDBACK_BUFFER_TYPE */: return "GL_FEEDBACK_BUFFER_TYPE (0x0DF2)"; +case 0x0DF3 /* GL_SELECTION_BUFFER_POINTER */: return "GL_SELECTION_BUFFER_POINTER (0x0DF3)"; +case 0x0DF4 /* GL_SELECTION_BUFFER_SIZE */: return "GL_SELECTION_BUFFER_SIZE (0x0DF4)"; +case 0x1000 /* GL_TEXTURE_WIDTH */: return "GL_TEXTURE_WIDTH/GL_TRANSFORM_BIT (0x1000)"; +case 0x1001 /* GL_TEXTURE_HEIGHT */: return "GL_TEXTURE_HEIGHT (0x1001)"; +//case 0x1003 /* GL_TEXTURE_COMPONENTS */: return "GL_TEXTURE_COMPONENTS (0x1003)"; +case 0x1003 /* GL_TEXTURE_INTERNAL_FORMAT */: return "GL_TEXTURE_INTERNAL_FORMAT/GL_TEXTURE_COMPONENTS (0x1003)"; +case 0x1004 /* GL_TEXTURE_BORDER_COLOR */: return "GL_TEXTURE_BORDER_COLOR (0x1004)"; +case 0x1005 /* GL_TEXTURE_BORDER */: return "GL_TEXTURE_BORDER (0x1005)"; +case 0x1100 /* GL_DONT_CARE */: return "GL_DONT_CARE (0x1100)"; +case 0x1101 /* GL_FASTEST */: return "GL_FASTEST (0x1101)"; +case 0x1102 /* GL_NICEST */: return "GL_NICEST (0x1102)"; +case 0x1200 /* GL_AMBIENT */: return "GL_AMBIENT (0x1200)"; +case 0x1201 /* GL_DIFFUSE */: return "GL_DIFFUSE (0x1201)"; +case 0x1202 /* GL_SPECULAR */: return "GL_SPECULAR (0x1202)"; +case 0x1203 /* GL_POSITION */: return "GL_POSITION (0x1203)"; +case 0x1204 /* GL_SPOT_DIRECTION */: return "GL_SPOT_DIRECTION (0x1204)"; +case 0x1205 /* GL_SPOT_EXPONENT */: return "GL_SPOT_EXPONENT (0x1205)"; +case 0x1206 /* GL_SPOT_CUTOFF */: return "GL_SPOT_CUTOFF (0x1206)"; +case 0x1207 /* GL_CONSTANT_ATTENUATION */: return "GL_CONSTANT_ATTENUATION (0x1207)"; +case 0x1208 /* GL_LINEAR_ATTENUATION */: return "GL_LINEAR_ATTENUATION (0x1208)"; +case 0x1209 /* GL_QUADRATIC_ATTENUATION */: return "GL_QUADRATIC_ATTENUATION (0x1209)"; +case 0x1300 /* GL_COMPILE */: return "GL_COMPILE (0x1300)"; +case 0x1301 /* GL_COMPILE_AND_EXECUTE */: return "GL_COMPILE_AND_EXECUTE (0x1301)"; +case 0x1400 /* GL_BYTE */: return "GL_BYTE (0x1400)"; +case 0x1401 /* GL_UNSIGNED_BYTE */: return "GL_UNSIGNED_BYTE (0x1401)"; +case 0x1402 /* GL_SHORT */: return "GL_SHORT (0x1402)"; +case 0x1403 /* GL_UNSIGNED_SHORT */: return "GL_UNSIGNED_SHORT (0x1403)"; +case 0x1404 /* GL_INT */: return "GL_INT (0x1404)"; +case 0x1405 /* GL_UNSIGNED_INT */: return "GL_UNSIGNED_INT (0x1405)"; +case 0x1406 /* GL_FLOAT */: return "GL_FLOAT (0x1406)"; +case 0x1407 /* GL_2_BYTES */: return "GL_2_BYTES (0x1407)"; +case 0x1408 /* GL_3_BYTES */: return "GL_3_BYTES (0x1408)"; +case 0x1409 /* GL_4_BYTES */: return "GL_4_BYTES (0x1409)"; +case 0x140A /* GL_DOUBLE */: return "GL_DOUBLE (0x140A)"; +case 0x1500 /* GL_CLEAR */: return "GL_CLEAR (0x1500)"; +case 0x1501 /* GL_AND */: return "GL_AND (0x1501)"; +case 0x1502 /* GL_AND_REVERSE */: return "GL_AND_REVERSE (0x1502)"; +case 0x1503 /* GL_COPY */: return "GL_COPY (0x1503)"; +case 0x1504 /* GL_AND_INVERTED */: return "GL_AND_INVERTED (0x1504)"; +case 0x1505 /* GL_NOOP */: return "GL_NOOP (0x1505)"; +case 0x1506 /* GL_XOR */: return "GL_XOR (0x1506)"; +case 0x1507 /* GL_OR */: return "GL_OR (0x1507)"; +case 0x1508 /* GL_NOR */: return "GL_NOR (0x1508)"; +case 0x1509 /* GL_EQUIV */: return "GL_EQUIV (0x1509)"; +case 0x150A /* GL_INVERT */: return "GL_INVERT (0x150A)"; +case 0x150B /* GL_OR_REVERSE */: return "GL_OR_REVERSE (0x150B)"; +case 0x150C /* GL_COPY_INVERTED */: return "GL_COPY_INVERTED (0x150C)"; +case 0x150D /* GL_OR_INVERTED */: return "GL_OR_INVERTED (0x150D)"; +case 0x150E /* GL_NAND */: return "GL_NAND (0x150E)"; +case 0x150F /* GL_SET */: return "GL_SET (0x150F)"; +case 0x1600 /* GL_EMISSION */: return "GL_EMISSION (0x1600)"; +case 0x1601 /* GL_SHININESS */: return "GL_SHININESS (0x1601)"; +case 0x1602 /* GL_AMBIENT_AND_DIFFUSE */: return "GL_AMBIENT_AND_DIFFUSE (0x1602)"; +case 0x1603 /* GL_COLOR_INDEXES */: return "GL_COLOR_INDEXES (0x1603)"; +case 0x1700 /* GL_MODELVIEW */: return "GL_MODELVIEW (0x1700)"; +case 0x1701 /* GL_PROJECTION */: return "GL_PROJECTION (0x1701)"; +case 0x1702 /* GL_TEXTURE */: return "GL_TEXTURE (0x1702)"; +case 0x1800 /* GL_COLOR */: return "GL_COLOR (0x1800)"; +case 0x1801 /* GL_DEPTH */: return "GL_DEPTH (0x1801)"; +case 0x1802 /* GL_STENCIL */: return "GL_STENCIL (0x1802)"; +case 0x1900 /* GL_COLOR_INDEX */: return "GL_COLOR_INDEX (0x1900)"; +case 0x1901 /* GL_STENCIL_INDEX */: return "GL_STENCIL_INDEX (0x1901)"; +case 0x1902 /* GL_DEPTH_COMPONENT */: return "GL_DEPTH_COMPONENT (0x1902)"; +case 0x1903 /* GL_RED */: return "GL_RED (0x1903)"; +case 0x1904 /* GL_GREEN */: return "GL_GREEN (0x1904)"; +case 0x1905 /* GL_BLUE */: return "GL_BLUE (0x1905)"; +case 0x1906 /* GL_ALPHA */: return "GL_ALPHA (0x1906)"; +case 0x1907 /* GL_RGB */: return "GL_RGB (0x1907)"; +case 0x1908 /* GL_RGBA */: return "GL_RGBA (0x1908)"; +case 0x1909 /* GL_LUMINANCE */: return "GL_LUMINANCE (0x1909)"; +case 0x190A /* GL_LUMINANCE_ALPHA */: return "GL_LUMINANCE_ALPHA (0x190A)"; +case 0x1A00 /* GL_BITMAP */: return "GL_BITMAP (0x1A00)"; +case 0x1B00 /* GL_POINT */: return "GL_POINT (0x1B00)"; +case 0x1B01 /* GL_LINE */: return "GL_LINE (0x1B01)"; +case 0x1B02 /* GL_FILL */: return "GL_FILL (0x1B02)"; +case 0x1C00 /* GL_RENDER */: return "GL_RENDER (0x1C00)"; +case 0x1C01 /* GL_FEEDBACK */: return "GL_FEEDBACK (0x1C01)"; +case 0x1C02 /* GL_SELECT */: return "GL_SELECT (0x1C02)"; +case 0x1D00 /* GL_FLAT */: return "GL_FLAT (0x1D00)"; +case 0x1D01 /* GL_SMOOTH */: return "GL_SMOOTH (0x1D01)"; +case 0x1E00 /* GL_KEEP */: return "GL_KEEP (0x1E00)"; +case 0x1E01 /* GL_REPLACE */: return "GL_REPLACE (0x1E01)"; +case 0x1E02 /* GL_INCR */: return "GL_INCR (0x1E02)"; +case 0x1E03 /* GL_DECR */: return "GL_DECR (0x1E03)"; +case 0x1F00 /* GL_VENDOR */: return "GL_VENDOR (0x1F00)"; +case 0x1F01 /* GL_RENDERER */: return "GL_RENDERER (0x1F01)"; +case 0x1F02 /* GL_VERSION */: return "GL_VERSION (0x1F02)"; +case 0x1F03 /* GL_EXTENSIONS */: return "GL_EXTENSIONS (0x1F03)"; +case 0x2000 /* GL_S */: return "GL_S/GL_ENABLE_BIT (0x2000)"; +case 0x2001 /* GL_T */: return "GL_T (0x2001)"; +case 0x2002 /* GL_R */: return "GL_R (0x2002)"; +case 0x2003 /* GL_Q */: return "GL_Q (0x2003)"; +case 0x2100 /* GL_MODULATE */: return "GL_MODULATE (0x2100)"; +case 0x2101 /* GL_DECAL */: return "GL_DECAL (0x2101)"; +case 0x2200 /* GL_TEXTURE_ENV_MODE */: return "GL_TEXTURE_ENV_MODE (0x2200)"; +case 0x2201 /* GL_TEXTURE_ENV_COLOR */: return "GL_TEXTURE_ENV_COLOR (0x2201)"; +case 0x2300 /* GL_TEXTURE_ENV */: return "GL_TEXTURE_ENV (0x2300)"; +case 0x2400 /* GL_EYE_LINEAR */: return "GL_EYE_LINEAR (0x2400)"; +case 0x2401 /* GL_OBJECT_LINEAR */: return "GL_OBJECT_LINEAR (0x2401)"; +case 0x2402 /* GL_SPHERE_MAP */: return "GL_SPHERE_MAP (0x2402)"; +case 0x2500 /* GL_TEXTURE_GEN_MODE */: return "GL_TEXTURE_GEN_MODE (0x2500)"; +case 0x2501 /* GL_OBJECT_PLANE */: return "GL_OBJECT_PLANE (0x2501)"; +case 0x2502 /* GL_EYE_PLANE */: return "GL_EYE_PLANE (0x2502)"; +case 0x2600 /* GL_NEAREST */: return "GL_NEAREST (0x2600)"; +case 0x2601 /* GL_LINEAR */: return "GL_LINEAR (0x2601)"; +case 0x2700 /* GL_NEAREST_MIPMAP_NEAREST */: return "GL_NEAREST_MIPMAP_NEAREST (0x2700)"; +case 0x2701 /* GL_LINEAR_MIPMAP_NEAREST */: return "GL_LINEAR_MIPMAP_NEAREST (0x2701)"; +case 0x2702 /* GL_NEAREST_MIPMAP_LINEAR */: return "GL_NEAREST_MIPMAP_LINEAR (0x2702)"; +case 0x2703 /* GL_LINEAR_MIPMAP_LINEAR */: return "GL_LINEAR_MIPMAP_LINEAR (0x2703)"; +case 0x2800 /* GL_TEXTURE_MAG_FILTER */: return "GL_TEXTURE_MAG_FILTER (0x2800)"; +case 0x2801 /* GL_TEXTURE_MIN_FILTER */: return "GL_TEXTURE_MIN_FILTER (0x2801)"; +case 0x2802 /* GL_TEXTURE_WRAP_S */: return "GL_TEXTURE_WRAP_S (0x2802)"; +case 0x2803 /* GL_TEXTURE_WRAP_T */: return "GL_TEXTURE_WRAP_T (0x2803)"; +case 0x2900 /* GL_CLAMP */: return "GL_CLAMP (0x2900)"; +case 0x2901 /* GL_REPEAT */: return "GL_REPEAT (0x2901)"; +case 0x2A00 /* GL_POLYGON_OFFSET_UNITS */: return "GL_POLYGON_OFFSET_UNITS (0x2A00)"; +case 0x2A01 /* GL_POLYGON_OFFSET_POINT */: return "GL_POLYGON_OFFSET_POINT (0x2A01)"; +case 0x2A02 /* GL_POLYGON_OFFSET_LINE */: return "GL_POLYGON_OFFSET_LINE (0x2A02)"; +case 0x2A10 /* GL_R3_G3_B2 */: return "GL_R3_G3_B2 (0x2A10)"; +case 0x2A20 /* GL_V2F */: return "GL_V2F (0x2A20)"; +case 0x2A21 /* GL_V3F */: return "GL_V3F (0x2A21)"; +case 0x2A22 /* GL_C4UB_V2F */: return "GL_C4UB_V2F (0x2A22)"; +case 0x2A23 /* GL_C4UB_V3F */: return "GL_C4UB_V3F (0x2A23)"; +case 0x2A24 /* GL_C3F_V3F */: return "GL_C3F_V3F (0x2A24)"; +case 0x2A25 /* GL_N3F_V3F */: return "GL_N3F_V3F (0x2A25)"; +case 0x2A26 /* GL_C4F_N3F_V3F */: return "GL_C4F_N3F_V3F (0x2A26)"; +case 0x2A27 /* GL_T2F_V3F */: return "GL_T2F_V3F (0x2A27)"; +case 0x2A28 /* GL_T4F_V4F */: return "GL_T4F_V4F (0x2A28)"; +case 0x2A29 /* GL_T2F_C4UB_V3F */: return "GL_T2F_C4UB_V3F (0x2A29)"; +case 0x2A2A /* GL_T2F_C3F_V3F */: return "GL_T2F_C3F_V3F (0x2A2A)"; +case 0x2A2B /* GL_T2F_N3F_V3F */: return "GL_T2F_N3F_V3F (0x2A2B)"; +case 0x2A2C /* GL_T2F_C4F_N3F_V3F */: return "GL_T2F_C4F_N3F_V3F (0x2A2C)"; +case 0x2A2D /* GL_T4F_C4F_N3F_V4F */: return "GL_T4F_C4F_N3F_V4F (0x2A2D)"; +case 0x3000 /* GL_CLIP_PLANE0 */: return "GL_CLIP_PLANE0 (0x3000)"; +case 0x3001 /* GL_CLIP_PLANE1 */: return "GL_CLIP_PLANE1 (0x3001)"; +case 0x3002 /* GL_CLIP_PLANE2 */: return "GL_CLIP_PLANE2 (0x3002)"; +case 0x3003 /* GL_CLIP_PLANE3 */: return "GL_CLIP_PLANE3 (0x3003)"; +case 0x3004 /* GL_CLIP_PLANE4 */: return "GL_CLIP_PLANE4 (0x3004)"; +case 0x3005 /* GL_CLIP_PLANE5 */: return "GL_CLIP_PLANE5 (0x3005)"; +case 0x4000 /* GL_LIGHT0 */: return "GL_LIGHT0/GL_COLOR_BUFFER_BIT (0x4000)"; +case 0x4001 /* GL_LIGHT1 */: return "GL_LIGHT1 (0x4001)"; +case 0x4002 /* GL_LIGHT2 */: return "GL_LIGHT2 (0x4002)"; +case 0x4003 /* GL_LIGHT3 */: return "GL_LIGHT3 (0x4003)"; +case 0x4004 /* GL_LIGHT4 */: return "GL_LIGHT4 (0x4004)"; +case 0x4005 /* GL_LIGHT5 */: return "GL_LIGHT5 (0x4005)"; +case 0x4006 /* GL_LIGHT6 */: return "GL_LIGHT6 (0x4006)"; +case 0x4007 /* GL_LIGHT7 */: return "GL_LIGHT7 (0x4007)"; +case 0x00008000 /* GL_HINT_BIT */: return "GL_HINT_BIT (0x00008000)"; +case 0x8037 /* GL_POLYGON_OFFSET_FILL */: return "GL_POLYGON_OFFSET_FILL (0x8037)"; +case 0x8038 /* GL_POLYGON_OFFSET_FACTOR */: return "GL_POLYGON_OFFSET_FACTOR (0x8038)"; +case 0x803B /* GL_ALPHA4 */: return "GL_ALPHA4 (0x803B)"; +case 0x803C /* GL_ALPHA8 */: return "GL_ALPHA8 (0x803C)"; +case 0x803D /* GL_ALPHA12 */: return "GL_ALPHA12 (0x803D)"; +case 0x803E /* GL_ALPHA16 */: return "GL_ALPHA16 (0x803E)"; +case 0x803F /* GL_LUMINANCE4 */: return "GL_LUMINANCE4 (0x803F)"; +case 0x8040 /* GL_LUMINANCE8 */: return "GL_LUMINANCE8 (0x8040)"; +case 0x8041 /* GL_LUMINANCE12 */: return "GL_LUMINANCE12 (0x8041)"; +case 0x8042 /* GL_LUMINANCE16 */: return "GL_LUMINANCE16 (0x8042)"; +case 0x8043 /* GL_LUMINANCE4_ALPHA4 */: return "GL_LUMINANCE4_ALPHA4 (0x8043)"; +case 0x8044 /* GL_LUMINANCE6_ALPHA2 */: return "GL_LUMINANCE6_ALPHA2 (0x8044)"; +case 0x8045 /* GL_LUMINANCE8_ALPHA8 */: return "GL_LUMINANCE8_ALPHA8 (0x8045)"; +case 0x8046 /* GL_LUMINANCE12_ALPHA4 */: return "GL_LUMINANCE12_ALPHA4 (0x8046)"; +case 0x8047 /* GL_LUMINANCE12_ALPHA12 */: return "GL_LUMINANCE12_ALPHA12 (0x8047)"; +case 0x8048 /* GL_LUMINANCE16_ALPHA16 */: return "GL_LUMINANCE16_ALPHA16 (0x8048)"; +case 0x8049 /* GL_INTENSITY */: return "GL_INTENSITY (0x8049)"; +case 0x804A /* GL_INTENSITY4 */: return "GL_INTENSITY4 (0x804A)"; +case 0x804B /* GL_INTENSITY8 */: return "GL_INTENSITY8 (0x804B)"; +case 0x804C /* GL_INTENSITY12 */: return "GL_INTENSITY12 (0x804C)"; +case 0x804D /* GL_INTENSITY16 */: return "GL_INTENSITY16 (0x804D)"; +case 0x804F /* GL_RGB4 */: return "GL_RGB4 (0x804F)"; +case 0x8050 /* GL_RGB5 */: return "GL_RGB5 (0x8050)"; +case 0x8051 /* GL_RGB8 */: return "GL_RGB8 (0x8051)"; +case 0x8052 /* GL_RGB10 */: return "GL_RGB10 (0x8052)"; +case 0x8053 /* GL_RGB12 */: return "GL_RGB12 (0x8053)"; +case 0x8054 /* GL_RGB16 */: return "GL_RGB16 (0x8054)"; +case 0x8055 /* GL_RGBA2 */: return "GL_RGBA2 (0x8055)"; +case 0x8056 /* GL_RGBA4 */: return "GL_RGBA4 (0x8056)"; +case 0x8057 /* GL_RGB5_A1 */: return "GL_RGB5_A1 (0x8057)"; +case 0x8058 /* GL_RGBA8 */: return "GL_RGBA8 (0x8058)"; +case 0x8059 /* GL_RGB10_A2 */: return "GL_RGB10_A2 (0x8059)"; +case 0x805A /* GL_RGBA12 */: return "GL_RGBA12 (0x805A)"; +case 0x805B /* GL_RGBA16 */: return "GL_RGBA16 (0x805B)"; +case 0x805C /* GL_TEXTURE_RED_SIZE */: return "GL_TEXTURE_RED_SIZE (0x805C)"; +case 0x805D /* GL_TEXTURE_GREEN_SIZE */: return "GL_TEXTURE_GREEN_SIZE (0x805D)"; +case 0x805E /* GL_TEXTURE_BLUE_SIZE */: return "GL_TEXTURE_BLUE_SIZE (0x805E)"; +case 0x805F /* GL_TEXTURE_ALPHA_SIZE */: return "GL_TEXTURE_ALPHA_SIZE (0x805F)"; +case 0x8060 /* GL_TEXTURE_LUMINANCE_SIZE */: return "GL_TEXTURE_LUMINANCE_SIZE (0x8060)"; +case 0x8061 /* GL_TEXTURE_INTENSITY_SIZE */: return "GL_TEXTURE_INTENSITY_SIZE (0x8061)"; +case 0x8063 /* GL_PROXY_TEXTURE_1D */: return "GL_PROXY_TEXTURE_1D (0x8063)"; +case 0x8064 /* GL_PROXY_TEXTURE_2D */: return "GL_PROXY_TEXTURE_2D (0x8064)"; +case 0x8066 /* GL_TEXTURE_PRIORITY */: return "GL_TEXTURE_PRIORITY (0x8066)"; +case 0x8067 /* GL_TEXTURE_RESIDENT */: return "GL_TEXTURE_RESIDENT (0x8067)"; +case 0x8068 /* GL_TEXTURE_BINDING_1D */: return "GL_TEXTURE_BINDING_1D (0x8068)"; +case 0x8069 /* GL_TEXTURE_BINDING_2D */: return "GL_TEXTURE_BINDING_2D (0x8069)"; +case 0x8074 /* GL_VERTEX_ARRAY */: return "GL_VERTEX_ARRAY (0x8074)"; +case 0x8075 /* GL_NORMAL_ARRAY */: return "GL_NORMAL_ARRAY (0x8075)"; +case 0x8076 /* GL_COLOR_ARRAY */: return "GL_COLOR_ARRAY (0x8076)"; +case 0x8077 /* GL_INDEX_ARRAY */: return "GL_INDEX_ARRAY (0x8077)"; +case 0x8078 /* GL_TEXTURE_COORD_ARRAY */: return "GL_TEXTURE_COORD_ARRAY (0x8078)"; +case 0x8079 /* GL_EDGE_FLAG_ARRAY */: return "GL_EDGE_FLAG_ARRAY (0x8079)"; +case 0x807A /* GL_VERTEX_ARRAY_SIZE */: return "GL_VERTEX_ARRAY_SIZE (0x807A)"; +case 0x807B /* GL_VERTEX_ARRAY_TYPE */: return "GL_VERTEX_ARRAY_TYPE (0x807B)"; +case 0x807C /* GL_VERTEX_ARRAY_STRIDE */: return "GL_VERTEX_ARRAY_STRIDE (0x807C)"; +case 0x807E /* GL_NORMAL_ARRAY_TYPE */: return "GL_NORMAL_ARRAY_TYPE (0x807E)"; +case 0x807F /* GL_NORMAL_ARRAY_STRIDE */: return "GL_NORMAL_ARRAY_STRIDE (0x807F)"; +case 0x8081 /* GL_COLOR_ARRAY_SIZE */: return "GL_COLOR_ARRAY_SIZE (0x8081)"; +case 0x8082 /* GL_COLOR_ARRAY_TYPE */: return "GL_COLOR_ARRAY_TYPE (0x8082)"; +case 0x8083 /* GL_COLOR_ARRAY_STRIDE */: return "GL_COLOR_ARRAY_STRIDE (0x8083)"; +case 0x8085 /* GL_INDEX_ARRAY_TYPE */: return "GL_INDEX_ARRAY_TYPE (0x8085)"; +case 0x8086 /* GL_INDEX_ARRAY_STRIDE */: return "GL_INDEX_ARRAY_STRIDE (0x8086)"; +case 0x8088 /* GL_TEXTURE_COORD_ARRAY_SIZE */: return "GL_TEXTURE_COORD_ARRAY_SIZE (0x8088)"; +case 0x8089 /* GL_TEXTURE_COORD_ARRAY_TYPE */: return "GL_TEXTURE_COORD_ARRAY_TYPE (0x8089)"; +case 0x808A /* GL_TEXTURE_COORD_ARRAY_STRIDE */: return "GL_TEXTURE_COORD_ARRAY_STRIDE (0x808A)"; +case 0x808C /* GL_EDGE_FLAG_ARRAY_STRIDE */: return "GL_EDGE_FLAG_ARRAY_STRIDE (0x808C)"; +case 0x808E /* GL_VERTEX_ARRAY_POINTER */: return "GL_VERTEX_ARRAY_POINTER (0x808E)"; +case 0x808F /* GL_NORMAL_ARRAY_POINTER */: return "GL_NORMAL_ARRAY_POINTER (0x808F)"; +case 0x8090 /* GL_COLOR_ARRAY_POINTER */: return "GL_COLOR_ARRAY_POINTER (0x8090)"; +case 0x8091 /* GL_INDEX_ARRAY_POINTER */: return "GL_INDEX_ARRAY_POINTER (0x8091)"; +case 0x8092 /* GL_TEXTURE_COORD_ARRAY_POINTER */: return "GL_TEXTURE_COORD_ARRAY_POINTER (0x8092)"; +case 0x8093 /* GL_EDGE_FLAG_ARRAY_POINTER */: return "GL_EDGE_FLAG_ARRAY_POINTER (0x8093)"; +case 0x80E2 /* GL_COLOR_INDEX1_EXT */: return "GL_COLOR_INDEX1_EXT (0x80E2)"; +case 0x80E3 /* GL_COLOR_INDEX2_EXT */: return "GL_COLOR_INDEX2_EXT (0x80E3)"; +case 0x80E4 /* GL_COLOR_INDEX4_EXT */: return "GL_COLOR_INDEX4_EXT (0x80E4)"; +case 0x80E5 /* GL_COLOR_INDEX8_EXT */: return "GL_COLOR_INDEX8_EXT (0x80E5)"; +case 0x80E6 /* GL_COLOR_INDEX12_EXT */: return "GL_COLOR_INDEX12_EXT (0x80E6)"; +case 0x80E7 /* GL_COLOR_INDEX16_EXT */: return "GL_COLOR_INDEX16_EXT (0x80E7)"; +case 0x00010000 /* GL_EVAL_BIT */: return "GL_EVAL_BIT (0x00010000)"; +case 0x00020000 /* GL_LIST_BIT */: return "GL_LIST_BIT (0x00020000)"; +case 0x00040000 /* GL_TEXTURE_BIT */: return "GL_TEXTURE_BIT (0x00040000)"; +case 0x00080000 /* GL_SCISSOR_BIT */: return "GL_SCISSOR_BIT (0x00080000)"; +case 0x000fffff /* GL_ALL_ATTRIB_BITS */: return "GL_ALL_ATTRIB_BITS (0x000fffff)"; +case 0xffffffff /* GL_CLIENT_ALL_ATTRIB_BITS */: return "GL_CLIENT_ALL_ATTRIB_BITS (0xffffffff)"; + +//case 0x0B12 /* GL_SMOOTH_POINT_SIZE_RANGE */: return "GL_SMOOTH_POINT_SIZE_RANGE (0x0B12)"; +case 0x0B12 /* GL_POINT_SIZE_RANGE */: return "GL_POINT_SIZE_RANGE/GL_SMOOTH_POINT_SIZE_RANGE (0x0B12)"; +//case 0x0B13 /* GL_SMOOTH_POINT_SIZE_GRANULARITY */: return "GL_SMOOTH_POINT_SIZE_GRANULARITY (0x0B13)"; +case 0x0B13 /* GL_POINT_SIZE_GRANULARITY */: return "GL_POINT_SIZE_GRANULARITY/GL_SMOOTH_POINT_SIZE_GRANULARITY (0x0B13)"; +case 0x0B22 /* GL_LINE_WIDTH_RANGE */: return "GL_LINE_WIDTH_RANGE/GL_SMOOTH_LINE_WIDTH_RANGE (0x0B22)"; +//case 0x0B22 /* GL_SMOOTH_LINE_WIDTH_RANGE */: return "GL_SMOOTH_LINE_WIDTH_RANGE (0x0B22)"; +//case 0x0B23 /* GL_SMOOTH_LINE_WIDTH_GRANULARITY */: return "GL_SMOOTH_LINE_WIDTH_GRANULARITY (0x0B23)"; +case 0x0B23 /* GL_LINE_WIDTH_GRANULARITY */: return "GL_LINE_WIDTH_GRANULARITY/GL_SMOOTH_LINE_WIDTH_GRANULARITY (0x0B23)"; +case 0x8032 /* GL_UNSIGNED_BYTE_3_3_2 */: return "GL_UNSIGNED_BYTE_3_3_2 (0x8032)"; +case 0x8033 /* GL_UNSIGNED_SHORT_4_4_4_4 */: return "GL_UNSIGNED_SHORT_4_4_4_4 (0x8033)"; +case 0x8034 /* GL_UNSIGNED_SHORT_5_5_5_1 */: return "GL_UNSIGNED_SHORT_5_5_5_1 (0x8034)"; +case 0x8035 /* GL_UNSIGNED_INT_8_8_8_8 */: return "GL_UNSIGNED_INT_8_8_8_8 (0x8035)"; +case 0x8036 /* GL_UNSIGNED_INT_10_10_10_2 */: return "GL_UNSIGNED_INT_10_10_10_2 (0x8036)"; +case 0x803A /* GL_RESCALE_NORMAL */: return "GL_RESCALE_NORMAL (0x803A)"; +case 0x806A /* GL_TEXTURE_BINDING_3D */: return "GL_TEXTURE_BINDING_3D (0x806A)"; +case 0x806B /* GL_PACK_SKIP_IMAGES */: return "GL_PACK_SKIP_IMAGES (0x806B)"; +case 0x806C /* GL_PACK_IMAGE_HEIGHT */: return "GL_PACK_IMAGE_HEIGHT (0x806C)"; +case 0x806D /* GL_UNPACK_SKIP_IMAGES */: return "GL_UNPACK_SKIP_IMAGES (0x806D)"; +case 0x806E /* GL_UNPACK_IMAGE_HEIGHT */: return "GL_UNPACK_IMAGE_HEIGHT (0x806E)"; +case 0x806F /* GL_TEXTURE_3D */: return "GL_TEXTURE_3D (0x806F)"; +case 0x8070 /* GL_PROXY_TEXTURE_3D */: return "GL_PROXY_TEXTURE_3D (0x8070)"; +case 0x8071 /* GL_TEXTURE_DEPTH */: return "GL_TEXTURE_DEPTH (0x8071)"; +case 0x8072 /* GL_TEXTURE_WRAP_R */: return "GL_TEXTURE_WRAP_R (0x8072)"; +case 0x8073 /* GL_MAX_3D_TEXTURE_SIZE */: return "GL_MAX_3D_TEXTURE_SIZE (0x8073)"; +case 0x80E0 /* GL_BGR */: return "GL_BGR (0x80E0)"; +case 0x80E1 /* GL_BGRA */: return "GL_BGRA (0x80E1)"; +case 0x80E8 /* GL_MAX_ELEMENTS_VERTICES */: return "GL_MAX_ELEMENTS_VERTICES (0x80E8)"; +case 0x80E9 /* GL_MAX_ELEMENTS_INDICES */: return "GL_MAX_ELEMENTS_INDICES (0x80E9)"; +case 0x812F /* GL_CLAMP_TO_EDGE */: return "GL_CLAMP_TO_EDGE (0x812F)"; +case 0x813A /* GL_TEXTURE_MIN_LOD */: return "GL_TEXTURE_MIN_LOD (0x813A)"; +case 0x813B /* GL_TEXTURE_MAX_LOD */: return "GL_TEXTURE_MAX_LOD (0x813B)"; +case 0x813C /* GL_TEXTURE_BASE_LEVEL */: return "GL_TEXTURE_BASE_LEVEL (0x813C)"; +case 0x813D /* GL_TEXTURE_MAX_LEVEL */: return "GL_TEXTURE_MAX_LEVEL (0x813D)"; +case 0x81F8 /* GL_LIGHT_MODEL_COLOR_CONTROL */: return "GL_LIGHT_MODEL_COLOR_CONTROL (0x81F8)"; +case 0x81F9 /* GL_SINGLE_COLOR */: return "GL_SINGLE_COLOR (0x81F9)"; +case 0x81FA /* GL_SEPARATE_SPECULAR_COLOR */: return "GL_SEPARATE_SPECULAR_COLOR (0x81FA)"; +case 0x8362 /* GL_UNSIGNED_BYTE_2_3_3_REV */: return "GL_UNSIGNED_BYTE_2_3_3_REV (0x8362)"; +case 0x8363 /* GL_UNSIGNED_SHORT_5_6_5 */: return "GL_UNSIGNED_SHORT_5_6_5 (0x8363)"; +case 0x8364 /* GL_UNSIGNED_SHORT_5_6_5_REV */: return "GL_UNSIGNED_SHORT_5_6_5_REV (0x8364)"; +case 0x8365 /* GL_UNSIGNED_SHORT_4_4_4_4_REV */: return "GL_UNSIGNED_SHORT_4_4_4_4_REV (0x8365)"; +case 0x8366 /* GL_UNSIGNED_SHORT_1_5_5_5_REV */: return "GL_UNSIGNED_SHORT_1_5_5_5_REV (0x8366)"; +case 0x8367 /* GL_UNSIGNED_INT_8_8_8_8_REV */: return "GL_UNSIGNED_INT_8_8_8_8_REV (0x8367)"; +case 0x8368 /* GL_UNSIGNED_INT_2_10_10_10_REV */: return "GL_UNSIGNED_INT_2_10_10_10_REV (0x8368)"; +case 0x846D /* GL_ALIASED_POINT_SIZE_RANGE */: return "GL_ALIASED_POINT_SIZE_RANGE (0x846D)"; +case 0x846E /* GL_ALIASED_LINE_WIDTH_RANGE */: return "GL_ALIASED_LINE_WIDTH_RANGE (0x846E)"; + +case 0x809D /* GL_MULTISAMPLE */: return "GL_MULTISAMPLE (0x809D)"; +case 0x809E /* GL_SAMPLE_ALPHA_TO_COVERAGE */: return "GL_SAMPLE_ALPHA_TO_COVERAGE (0x809E)"; +case 0x809F /* GL_SAMPLE_ALPHA_TO_ONE */: return "GL_SAMPLE_ALPHA_TO_ONE (0x809F)"; +case 0x80A0 /* GL_SAMPLE_COVERAGE */: return "GL_SAMPLE_COVERAGE (0x80A0)"; +case 0x80A8 /* GL_SAMPLE_BUFFERS */: return "GL_SAMPLE_BUFFERS (0x80A8)"; +case 0x80A9 /* GL_SAMPLES */: return "GL_SAMPLES (0x80A9)"; +case 0x80AA /* GL_SAMPLE_COVERAGE_VALUE */: return "GL_SAMPLE_COVERAGE_VALUE (0x80AA)"; +case 0x80AB /* GL_SAMPLE_COVERAGE_INVERT */: return "GL_SAMPLE_COVERAGE_INVERT (0x80AB)"; +case 0x812D /* GL_CLAMP_TO_BORDER */: return "GL_CLAMP_TO_BORDER (0x812D)"; +case 0x84C0 /* GL_TEXTURE0 */: return "GL_TEXTURE0 (0x84C0)"; +case 0x84C1 /* GL_TEXTURE1 */: return "GL_TEXTURE1 (0x84C1)"; +case 0x84C2 /* GL_TEXTURE2 */: return "GL_TEXTURE2 (0x84C2)"; +case 0x84C3 /* GL_TEXTURE3 */: return "GL_TEXTURE3 (0x84C3)"; +case 0x84C4 /* GL_TEXTURE4 */: return "GL_TEXTURE4 (0x84C4)"; +case 0x84C5 /* GL_TEXTURE5 */: return "GL_TEXTURE5 (0x84C5)"; +case 0x84C6 /* GL_TEXTURE6 */: return "GL_TEXTURE6 (0x84C6)"; +case 0x84C7 /* GL_TEXTURE7 */: return "GL_TEXTURE7 (0x84C7)"; +case 0x84C8 /* GL_TEXTURE8 */: return "GL_TEXTURE8 (0x84C8)"; +case 0x84C9 /* GL_TEXTURE9 */: return "GL_TEXTURE9 (0x84C9)"; +case 0x84CA /* GL_TEXTURE10 */: return "GL_TEXTURE10 (0x84CA)"; +case 0x84CB /* GL_TEXTURE11 */: return "GL_TEXTURE11 (0x84CB)"; +case 0x84CC /* GL_TEXTURE12 */: return "GL_TEXTURE12 (0x84CC)"; +case 0x84CD /* GL_TEXTURE13 */: return "GL_TEXTURE13 (0x84CD)"; +case 0x84CE /* GL_TEXTURE14 */: return "GL_TEXTURE14 (0x84CE)"; +case 0x84CF /* GL_TEXTURE15 */: return "GL_TEXTURE15 (0x84CF)"; +case 0x84D0 /* GL_TEXTURE16 */: return "GL_TEXTURE16 (0x84D0)"; +case 0x84D1 /* GL_TEXTURE17 */: return "GL_TEXTURE17 (0x84D1)"; +case 0x84D2 /* GL_TEXTURE18 */: return "GL_TEXTURE18 (0x84D2)"; +case 0x84D3 /* GL_TEXTURE19 */: return "GL_TEXTURE19 (0x84D3)"; +case 0x84D4 /* GL_TEXTURE20 */: return "GL_TEXTURE20 (0x84D4)"; +case 0x84D5 /* GL_TEXTURE21 */: return "GL_TEXTURE21 (0x84D5)"; +case 0x84D6 /* GL_TEXTURE22 */: return "GL_TEXTURE22 (0x84D6)"; +case 0x84D7 /* GL_TEXTURE23 */: return "GL_TEXTURE23 (0x84D7)"; +case 0x84D8 /* GL_TEXTURE24 */: return "GL_TEXTURE24 (0x84D8)"; +case 0x84D9 /* GL_TEXTURE25 */: return "GL_TEXTURE25 (0x84D9)"; +case 0x84DA /* GL_TEXTURE26 */: return "GL_TEXTURE26 (0x84DA)"; +case 0x84DB /* GL_TEXTURE27 */: return "GL_TEXTURE27 (0x84DB)"; +case 0x84DC /* GL_TEXTURE28 */: return "GL_TEXTURE28 (0x84DC)"; +case 0x84DD /* GL_TEXTURE29 */: return "GL_TEXTURE29 (0x84DD)"; +case 0x84DE /* GL_TEXTURE30 */: return "GL_TEXTURE30 (0x84DE)"; +case 0x84DF /* GL_TEXTURE31 */: return "GL_TEXTURE31 (0x84DF)"; +case 0x84E0 /* GL_ACTIVE_TEXTURE */: return "GL_ACTIVE_TEXTURE (0x84E0)"; +case 0x84E1 /* GL_CLIENT_ACTIVE_TEXTURE */: return "GL_CLIENT_ACTIVE_TEXTURE (0x84E1)"; +case 0x84E2 /* GL_MAX_TEXTURE_UNITS */: return "GL_MAX_TEXTURE_UNITS (0x84E2)"; +case 0x84E3 /* GL_TRANSPOSE_MODELVIEW_MATRIX */: return "GL_TRANSPOSE_MODELVIEW_MATRIX (0x84E3)"; +case 0x84E4 /* GL_TRANSPOSE_PROJECTION_MATRIX */: return "GL_TRANSPOSE_PROJECTION_MATRIX (0x84E4)"; +case 0x84E5 /* GL_TRANSPOSE_TEXTURE_MATRIX */: return "GL_TRANSPOSE_TEXTURE_MATRIX (0x84E5)"; +case 0x84E6 /* GL_TRANSPOSE_COLOR_MATRIX */: return "GL_TRANSPOSE_COLOR_MATRIX (0x84E6)"; +case 0x84E7 /* GL_SUBTRACT */: return "GL_SUBTRACT (0x84E7)"; +case 0x84E9 /* GL_COMPRESSED_ALPHA */: return "GL_COMPRESSED_ALPHA (0x84E9)"; +case 0x84EA /* GL_COMPRESSED_LUMINANCE */: return "GL_COMPRESSED_LUMINANCE (0x84EA)"; +case 0x84EB /* GL_COMPRESSED_LUMINANCE_ALPHA */: return "GL_COMPRESSED_LUMINANCE_ALPHA (0x84EB)"; +case 0x84EC /* GL_COMPRESSED_INTENSITY */: return "GL_COMPRESSED_INTENSITY (0x84EC)"; +case 0x84ED /* GL_COMPRESSED_RGB */: return "GL_COMPRESSED_RGB (0x84ED)"; +case 0x84EE /* GL_COMPRESSED_RGBA */: return "GL_COMPRESSED_RGBA (0x84EE)"; +case 0x84EF /* GL_TEXTURE_COMPRESSION_HINT */: return "GL_TEXTURE_COMPRESSION_HINT (0x84EF)"; +case 0x8511 /* GL_NORMAL_MAP */: return "GL_NORMAL_MAP (0x8511)"; +case 0x8512 /* GL_REFLECTION_MAP */: return "GL_REFLECTION_MAP (0x8512)"; +case 0x8513 /* GL_TEXTURE_CUBE_MAP */: return "GL_TEXTURE_CUBE_MAP (0x8513)"; +case 0x8514 /* GL_TEXTURE_BINDING_CUBE_MAP */: return "GL_TEXTURE_BINDING_CUBE_MAP (0x8514)"; +case 0x8515 /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */: return "GL_TEXTURE_CUBE_MAP_POSITIVE_X (0x8515)"; +case 0x8516 /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_X (0x8516)"; +case 0x8517 /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */: return "GL_TEXTURE_CUBE_MAP_POSITIVE_Y (0x8517)"; +case 0x8518 /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y (0x8518)"; +case 0x8519 /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */: return "GL_TEXTURE_CUBE_MAP_POSITIVE_Z (0x8519)"; +case 0x851A /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z (0x851A)"; +case 0x851B /* GL_PROXY_TEXTURE_CUBE_MAP */: return "GL_PROXY_TEXTURE_CUBE_MAP (0x851B)"; +case 0x851C /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */: return "GL_MAX_CUBE_MAP_TEXTURE_SIZE (0x851C)"; +case 0x8570 /* GL_COMBINE */: return "GL_COMBINE (0x8570)"; +case 0x8571 /* GL_COMBINE_RGB */: return "GL_COMBINE_RGB (0x8571)"; +case 0x8572 /* GL_COMBINE_ALPHA */: return "GL_COMBINE_ALPHA (0x8572)"; +case 0x8573 /* GL_RGB_SCALE */: return "GL_RGB_SCALE (0x8573)"; +case 0x8574 /* GL_ADD_SIGNED */: return "GL_ADD_SIGNED (0x8574)"; +case 0x8575 /* GL_INTERPOLATE */: return "GL_INTERPOLATE (0x8575)"; +case 0x8576 /* GL_CONSTANT */: return "GL_CONSTANT (0x8576)"; +case 0x8577 /* GL_PRIMARY_COLOR */: return "GL_PRIMARY_COLOR (0x8577)"; +case 0x8578 /* GL_PREVIOUS */: return "GL_PREVIOUS (0x8578)"; +case 0x8580 /* GL_SOURCE0_RGB */: return "GL_SOURCE0_RGB (0x8580)"; +case 0x8581 /* GL_SOURCE1_RGB */: return "GL_SOURCE1_RGB (0x8581)"; +case 0x8582 /* GL_SOURCE2_RGB */: return "GL_SOURCE2_RGB (0x8582)"; +case 0x8588 /* GL_SOURCE0_ALPHA */: return "GL_SOURCE0_ALPHA (0x8588)"; +case 0x8589 /* GL_SOURCE1_ALPHA */: return "GL_SOURCE1_ALPHA (0x8589)"; +case 0x858A /* GL_SOURCE2_ALPHA */: return "GL_SOURCE2_ALPHA (0x858A)"; +case 0x8590 /* GL_OPERAND0_RGB */: return "GL_OPERAND0_RGB (0x8590)"; +case 0x8591 /* GL_OPERAND1_RGB */: return "GL_OPERAND1_RGB (0x8591)"; +case 0x8592 /* GL_OPERAND2_RGB */: return "GL_OPERAND2_RGB (0x8592)"; +case 0x8598 /* GL_OPERAND0_ALPHA */: return "GL_OPERAND0_ALPHA (0x8598)"; +case 0x8599 /* GL_OPERAND1_ALPHA */: return "GL_OPERAND1_ALPHA (0x8599)"; +case 0x859A /* GL_OPERAND2_ALPHA */: return "GL_OPERAND2_ALPHA (0x859A)"; +case 0x86A0 /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */: return "GL_TEXTURE_COMPRESSED_IMAGE_SIZE (0x86A0)"; +case 0x86A1 /* GL_TEXTURE_COMPRESSED */: return "GL_TEXTURE_COMPRESSED (0x86A1)"; +case 0x86A2 /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */: return "GL_NUM_COMPRESSED_TEXTURE_FORMATS (0x86A2)"; +case 0x86A3 /* GL_COMPRESSED_TEXTURE_FORMATS */: return "GL_COMPRESSED_TEXTURE_FORMATS (0x86A3)"; +case 0x86AE /* GL_DOT3_RGB */: return "GL_DOT3_RGB (0x86AE)"; +case 0x86AF /* GL_DOT3_RGBA */: return "GL_DOT3_RGBA (0x86AF)"; +case 0x20000000 /* GL_MULTISAMPLE_BIT */: return "GL_MULTISAMPLE_BIT (0x20000000)"; + +case 0x80C8 /* GL_BLEND_DST_RGB */: return "GL_BLEND_DST_RGB (0x80C8)"; +case 0x80C9 /* GL_BLEND_SRC_RGB */: return "GL_BLEND_SRC_RGB (0x80C9)"; +case 0x80CA /* GL_BLEND_DST_ALPHA */: return "GL_BLEND_DST_ALPHA (0x80CA)"; +case 0x80CB /* GL_BLEND_SRC_ALPHA */: return "GL_BLEND_SRC_ALPHA (0x80CB)"; +case 0x8126 /* GL_POINT_SIZE_MIN */: return "GL_POINT_SIZE_MIN (0x8126)"; +case 0x8127 /* GL_POINT_SIZE_MAX */: return "GL_POINT_SIZE_MAX (0x8127)"; +case 0x8128 /* GL_POINT_FADE_THRESHOLD_SIZE */: return "GL_POINT_FADE_THRESHOLD_SIZE (0x8128)"; +case 0x8129 /* GL_POINT_DISTANCE_ATTENUATION */: return "GL_POINT_DISTANCE_ATTENUATION (0x8129)"; +case 0x8191 /* GL_GENERATE_MIPMAP */: return "GL_GENERATE_MIPMAP (0x8191)"; +case 0x8192 /* GL_GENERATE_MIPMAP_HINT */: return "GL_GENERATE_MIPMAP_HINT (0x8192)"; +case 0x81A5 /* GL_DEPTH_COMPONENT16 */: return "GL_DEPTH_COMPONENT16 (0x81A5)"; +case 0x81A6 /* GL_DEPTH_COMPONENT24 */: return "GL_DEPTH_COMPONENT24 (0x81A6)"; +case 0x81A7 /* GL_DEPTH_COMPONENT32 */: return "GL_DEPTH_COMPONENT32 (0x81A7)"; +case 0x8370 /* GL_MIRRORED_REPEAT */: return "GL_MIRRORED_REPEAT (0x8370)"; +case 0x8450 /* GL_FOG_COORDINATE_SOURCE */: return "GL_FOG_COORDINATE_SOURCE (0x8450)"; +case 0x8451 /* GL_FOG_COORDINATE */: return "GL_FOG_COORDINATE (0x8451)"; +case 0x8452 /* GL_FRAGMENT_DEPTH */: return "GL_FRAGMENT_DEPTH (0x8452)"; +case 0x8453 /* GL_CURRENT_FOG_COORDINATE */: return "GL_CURRENT_FOG_COORDINATE (0x8453)"; +case 0x8454 /* GL_FOG_COORDINATE_ARRAY_TYPE */: return "GL_FOG_COORDINATE_ARRAY_TYPE (0x8454)"; +case 0x8455 /* GL_FOG_COORDINATE_ARRAY_STRIDE */: return "GL_FOG_COORDINATE_ARRAY_STRIDE (0x8455)"; +case 0x8456 /* GL_FOG_COORDINATE_ARRAY_POINTER */: return "GL_FOG_COORDINATE_ARRAY_POINTER (0x8456)"; +case 0x8457 /* GL_FOG_COORDINATE_ARRAY */: return "GL_FOG_COORDINATE_ARRAY (0x8457)"; +case 0x8458 /* GL_COLOR_SUM */: return "GL_COLOR_SUM (0x8458)"; +case 0x8459 /* GL_CURRENT_SECONDARY_COLOR */: return "GL_CURRENT_SECONDARY_COLOR (0x8459)"; +case 0x845A /* GL_SECONDARY_COLOR_ARRAY_SIZE */: return "GL_SECONDARY_COLOR_ARRAY_SIZE (0x845A)"; +case 0x845B /* GL_SECONDARY_COLOR_ARRAY_TYPE */: return "GL_SECONDARY_COLOR_ARRAY_TYPE (0x845B)"; +case 0x845C /* GL_SECONDARY_COLOR_ARRAY_STRIDE */: return "GL_SECONDARY_COLOR_ARRAY_STRIDE (0x845C)"; +case 0x845D /* GL_SECONDARY_COLOR_ARRAY_POINTER */: return "GL_SECONDARY_COLOR_ARRAY_POINTER (0x845D)"; +case 0x845E /* GL_SECONDARY_COLOR_ARRAY */: return "GL_SECONDARY_COLOR_ARRAY (0x845E)"; +case 0x84FD /* GL_MAX_TEXTURE_LOD_BIAS */: return "GL_MAX_TEXTURE_LOD_BIAS (0x84FD)"; +case 0x8500 /* GL_TEXTURE_FILTER_CONTROL */: return "GL_TEXTURE_FILTER_CONTROL (0x8500)"; +case 0x8501 /* GL_TEXTURE_LOD_BIAS */: return "GL_TEXTURE_LOD_BIAS (0x8501)"; +case 0x8507 /* GL_INCR_WRAP */: return "GL_INCR_WRAP (0x8507)"; +case 0x8508 /* GL_DECR_WRAP */: return "GL_DECR_WRAP (0x8508)"; +case 0x884A /* GL_TEXTURE_DEPTH_SIZE */: return "GL_TEXTURE_DEPTH_SIZE (0x884A)"; +case 0x884B /* GL_DEPTH_TEXTURE_MODE */: return "GL_DEPTH_TEXTURE_MODE (0x884B)"; +case 0x884C /* GL_TEXTURE_COMPARE_MODE */: return "GL_TEXTURE_COMPARE_MODE (0x884C)"; +case 0x884D /* GL_TEXTURE_COMPARE_FUNC */: return "GL_TEXTURE_COMPARE_FUNC (0x884D)"; +case 0x884E /* GL_COMPARE_R_TO_TEXTURE */: return "GL_COMPARE_R_TO_TEXTURE (0x884E)"; + +/* ----------------------------- GL_VERSION_1_5 ---------------------------- */ + +case 0x8764 /* GL_BUFFER_SIZE */: return "GL_BUFFER_SIZE (0x8764)"; +case 0x8765 /* GL_BUFFER_USAGE */: return "GL_BUFFER_USAGE (0x8765)"; +case 0x8864 /* GL_QUERY_COUNTER_BITS */: return "GL_QUERY_COUNTER_BITS (0x8864)"; +case 0x8865 /* GL_CURRENT_QUERY */: return "GL_CURRENT_QUERY (0x8865)"; +case 0x8866 /* GL_QUERY_RESULT */: return "GL_QUERY_RESULT (0x8866)"; +case 0x8867 /* GL_QUERY_RESULT_AVAILABLE */: return "GL_QUERY_RESULT_AVAILABLE (0x8867)"; +case 0x8892 /* GL_ARRAY_BUFFER */: return "GL_ARRAY_BUFFER (0x8892)"; +case 0x8893 /* GL_ELEMENT_ARRAY_BUFFER */: return "GL_ELEMENT_ARRAY_BUFFER (0x8893)"; +case 0x8894 /* GL_ARRAY_BUFFER_BINDING */: return "GL_ARRAY_BUFFER_BINDING (0x8894)"; +case 0x8895 /* GL_ELEMENT_ARRAY_BUFFER_BINDING */: return "GL_ELEMENT_ARRAY_BUFFER_BINDING (0x8895)"; +case 0x8896 /* GL_VERTEX_ARRAY_BUFFER_BINDING */: return "GL_VERTEX_ARRAY_BUFFER_BINDING (0x8896)"; +case 0x8897 /* GL_NORMAL_ARRAY_BUFFER_BINDING */: return "GL_NORMAL_ARRAY_BUFFER_BINDING (0x8897)"; +case 0x8898 /* GL_COLOR_ARRAY_BUFFER_BINDING */: return "GL_COLOR_ARRAY_BUFFER_BINDING (0x8898)"; +case 0x8899 /* GL_INDEX_ARRAY_BUFFER_BINDING */: return "GL_INDEX_ARRAY_BUFFER_BINDING (0x8899)"; +case 0x889A /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */: return "GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING (0x889A)"; +case 0x889B /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */: return "GL_EDGE_FLAG_ARRAY_BUFFER_BINDING (0x889B)"; +case 0x889C /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */: return "GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING (0x889C)"; +case 0x889D /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */: return "GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING (0x889D)"; +case 0x889E /* GL_WEIGHT_ARRAY_BUFFER_BINDING */: return "GL_WEIGHT_ARRAY_BUFFER_BINDING (0x889E)"; +case 0x889F /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */: return "GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING (0x889F)"; +case 0x88B8 /* GL_READ_ONLY */: return "GL_READ_ONLY (0x88B8)"; +case 0x88B9 /* GL_WRITE_ONLY */: return "GL_WRITE_ONLY (0x88B9)"; +case 0x88BA /* GL_READ_WRITE */: return "GL_READ_WRITE (0x88BA)"; +case 0x88BB /* GL_BUFFER_ACCESS */: return "GL_BUFFER_ACCESS (0x88BB)"; +case 0x88BC /* GL_BUFFER_MAPPED */: return "GL_BUFFER_MAPPED (0x88BC)"; +case 0x88BD /* GL_BUFFER_MAP_POINTER */: return "GL_BUFFER_MAP_POINTER (0x88BD)"; +case 0x88E0 /* GL_STREAM_DRAW */: return "GL_STREAM_DRAW (0x88E0)"; +case 0x88E1 /* GL_STREAM_READ */: return "GL_STREAM_READ (0x88E1)"; +case 0x88E2 /* GL_STREAM_COPY */: return "GL_STREAM_COPY (0x88E2)"; +case 0x88E4 /* GL_STATIC_DRAW */: return "GL_STATIC_DRAW (0x88E4)"; +case 0x88E5 /* GL_STATIC_READ */: return "GL_STATIC_READ (0x88E5)"; +case 0x88E6 /* GL_STATIC_COPY */: return "GL_STATIC_COPY (0x88E6)"; +case 0x88E8 /* GL_DYNAMIC_DRAW */: return "GL_DYNAMIC_DRAW (0x88E8)"; +case 0x88E9 /* GL_DYNAMIC_READ */: return "GL_DYNAMIC_READ (0x88E9)"; +case 0x88EA /* GL_DYNAMIC_COPY */: return "GL_DYNAMIC_COPY (0x88EA)"; +case 0x8914 /* GL_SAMPLES_PASSED */: return "GL_SAMPLES_PASSED (0x8914)"; + +/* ----------------------------- GL_VERSION_2_0 ---------------------------- */ + +case 0x8622 /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */: return "GL_VERTEX_ATTRIB_ARRAY_ENABLED (0x8622)"; +case 0x8623 /* GL_VERTEX_ATTRIB_ARRAY_SIZE */: return "GL_VERTEX_ATTRIB_ARRAY_SIZE (0x8623)"; +case 0x8624 /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */: return "GL_VERTEX_ATTRIB_ARRAY_STRIDE (0x8624)"; +case 0x8625 /* GL_VERTEX_ATTRIB_ARRAY_TYPE */: return "GL_VERTEX_ATTRIB_ARRAY_TYPE (0x8625)"; +case 0x8626 /* GL_CURRENT_VERTEX_ATTRIB */: return "GL_CURRENT_VERTEX_ATTRIB (0x8626)"; +//case 0x8642 /* GL_VERTEX_PROGRAM_POINT_SIZE */: return "GL_VERTEX_PROGRAM_POINT_SIZE (0x8642)"; +case 0x8643 /* GL_VERTEX_PROGRAM_TWO_SIDE */: return "GL_VERTEX_PROGRAM_TWO_SIDE (0x8643)"; +case 0x8645 /* GL_VERTEX_ATTRIB_ARRAY_POINTER */: return "GL_VERTEX_ATTRIB_ARRAY_POINTER (0x8645)"; +case 0x8800 /* GL_STENCIL_BACK_FUNC */: return "GL_STENCIL_BACK_FUNC (0x8800)"; +case 0x8801 /* GL_STENCIL_BACK_FAIL */: return "GL_STENCIL_BACK_FAIL (0x8801)"; +case 0x8802 /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */: return "GL_STENCIL_BACK_PASS_DEPTH_FAIL (0x8802)"; +case 0x8803 /* GL_STENCIL_BACK_PASS_DEPTH_PASS */: return "GL_STENCIL_BACK_PASS_DEPTH_PASS (0x8803)"; +case 0x8824 /* GL_MAX_DRAW_BUFFERS */: return "GL_MAX_DRAW_BUFFERS (0x8824)"; +case 0x8825 /* GL_DRAW_BUFFER0 */: return "GL_DRAW_BUFFER0 (0x8825)"; +case 0x8826 /* GL_DRAW_BUFFER1 */: return "GL_DRAW_BUFFER1 (0x8826)"; +case 0x8827 /* GL_DRAW_BUFFER2 */: return "GL_DRAW_BUFFER2 (0x8827)"; +case 0x8828 /* GL_DRAW_BUFFER3 */: return "GL_DRAW_BUFFER3 (0x8828)"; +case 0x8829 /* GL_DRAW_BUFFER4 */: return "GL_DRAW_BUFFER4 (0x8829)"; +case 0x882A /* GL_DRAW_BUFFER5 */: return "GL_DRAW_BUFFER5 (0x882A)"; +case 0x882B /* GL_DRAW_BUFFER6 */: return "GL_DRAW_BUFFER6 (0x882B)"; +case 0x882C /* GL_DRAW_BUFFER7 */: return "GL_DRAW_BUFFER7 (0x882C)"; +case 0x882D /* GL_DRAW_BUFFER8 */: return "GL_DRAW_BUFFER8 (0x882D)"; +case 0x882E /* GL_DRAW_BUFFER9 */: return "GL_DRAW_BUFFER9 (0x882E)"; +case 0x882F /* GL_DRAW_BUFFER10 */: return "GL_DRAW_BUFFER10 (0x882F)"; +case 0x8830 /* GL_DRAW_BUFFER11 */: return "GL_DRAW_BUFFER11 (0x8830)"; +case 0x8831 /* GL_DRAW_BUFFER12 */: return "GL_DRAW_BUFFER12 (0x8831)"; +case 0x8832 /* GL_DRAW_BUFFER13 */: return "GL_DRAW_BUFFER13 (0x8832)"; +case 0x8833 /* GL_DRAW_BUFFER14 */: return "GL_DRAW_BUFFER14 (0x8833)"; +case 0x8834 /* GL_DRAW_BUFFER15 */: return "GL_DRAW_BUFFER15 (0x8834)"; +case 0x883D /* GL_BLEND_EQUATION_ALPHA */: return "GL_BLEND_EQUATION_ALPHA (0x883D)"; +case 0x8861 /* GL_POINT_SPRITE */: return "GL_POINT_SPRITE (0x8861)"; +case 0x8862 /* GL_COORD_REPLACE */: return "GL_COORD_REPLACE (0x8862)"; +case 0x8869 /* GL_MAX_VERTEX_ATTRIBS */: return "GL_MAX_VERTEX_ATTRIBS (0x8869)"; +case 0x886A /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */: return "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED (0x886A)"; +case 0x8871 /* GL_MAX_TEXTURE_COORDS */: return "GL_MAX_TEXTURE_COORDS (0x8871)"; +case 0x8872 /* GL_MAX_TEXTURE_IMAGE_UNITS */: return "GL_MAX_TEXTURE_IMAGE_UNITS (0x8872)"; +case 0x8B30 /* GL_FRAGMENT_SHADER */: return "GL_FRAGMENT_SHADER (0x8B30)"; +case 0x8B31 /* GL_VERTEX_SHADER */: return "GL_VERTEX_SHADER (0x8B31)"; +case 0x8B49 /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */: return "GL_MAX_FRAGMENT_UNIFORM_COMPONENTS (0x8B49)"; +case 0x8B4A /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */: return "GL_MAX_VERTEX_UNIFORM_COMPONENTS (0x8B4A)"; +case 0x8B4B /* GL_MAX_VARYING_FLOATS */: return "GL_MAX_VARYING_FLOATS (0x8B4B)"; +case 0x8B4C /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */: return "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS (0x8B4C)"; +case 0x8B4D /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */: return "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS (0x8B4D)"; +case 0x8B4F /* GL_SHADER_TYPE */: return "GL_SHADER_TYPE (0x8B4F)"; +case 0x8B50 /* GL_FLOAT_VEC2 */: return "GL_FLOAT_VEC2 (0x8B50)"; +case 0x8B51 /* GL_FLOAT_VEC3 */: return "GL_FLOAT_VEC3 (0x8B51)"; +case 0x8B52 /* GL_FLOAT_VEC4 */: return "GL_FLOAT_VEC4 (0x8B52)"; +case 0x8B53 /* GL_INT_VEC2 */: return "GL_INT_VEC2 (0x8B53)"; +case 0x8B54 /* GL_INT_VEC3 */: return "GL_INT_VEC3 (0x8B54)"; +case 0x8B55 /* GL_INT_VEC4 */: return "GL_INT_VEC4 (0x8B55)"; +case 0x8B56 /* GL_BOOL */: return "GL_BOOL (0x8B56)"; +case 0x8B57 /* GL_BOOL_VEC2 */: return "GL_BOOL_VEC2 (0x8B57)"; +case 0x8B58 /* GL_BOOL_VEC3 */: return "GL_BOOL_VEC3 (0x8B58)"; +case 0x8B59 /* GL_BOOL_VEC4 */: return "GL_BOOL_VEC4 (0x8B59)"; +case 0x8B5A /* GL_FLOAT_MAT2 */: return "GL_FLOAT_MAT2 (0x8B5A)"; +case 0x8B5B /* GL_FLOAT_MAT3 */: return "GL_FLOAT_MAT3 (0x8B5B)"; +case 0x8B5C /* GL_FLOAT_MAT4 */: return "GL_FLOAT_MAT4 (0x8B5C)"; +case 0x8B5D /* GL_SAMPLER_1D */: return "GL_SAMPLER_1D (0x8B5D)"; +case 0x8B5E /* GL_SAMPLER_2D */: return "GL_SAMPLER_2D (0x8B5E)"; +case 0x8B5F /* GL_SAMPLER_3D */: return "GL_SAMPLER_3D (0x8B5F)"; +case 0x8B60 /* GL_SAMPLER_CUBE */: return "GL_SAMPLER_CUBE (0x8B60)"; +case 0x8B61 /* GL_SAMPLER_1D_SHADOW */: return "GL_SAMPLER_1D_SHADOW (0x8B61)"; +case 0x8B62 /* GL_SAMPLER_2D_SHADOW */: return "GL_SAMPLER_2D_SHADOW (0x8B62)"; +case 0x8B80 /* GL_DELETE_STATUS */: return "GL_DELETE_STATUS (0x8B80)"; +case 0x8B81 /* GL_COMPILE_STATUS */: return "GL_COMPILE_STATUS (0x8B81)"; +case 0x8B82 /* GL_LINK_STATUS */: return "GL_LINK_STATUS (0x8B82)"; +case 0x8B83 /* GL_VALIDATE_STATUS */: return "GL_VALIDATE_STATUS (0x8B83)"; +case 0x8B84 /* GL_INFO_LOG_LENGTH */: return "GL_INFO_LOG_LENGTH (0x8B84)"; +case 0x8B85 /* GL_ATTACHED_SHADERS */: return "GL_ATTACHED_SHADERS (0x8B85)"; +case 0x8B86 /* GL_ACTIVE_UNIFORMS */: return "GL_ACTIVE_UNIFORMS (0x8B86)"; +case 0x8B87 /* GL_ACTIVE_UNIFORM_MAX_LENGTH */: return "GL_ACTIVE_UNIFORM_MAX_LENGTH (0x8B87)"; +case 0x8B88 /* GL_SHADER_SOURCE_LENGTH */: return "GL_SHADER_SOURCE_LENGTH (0x8B88)"; +case 0x8B89 /* GL_ACTIVE_ATTRIBUTES */: return "GL_ACTIVE_ATTRIBUTES (0x8B89)"; +case 0x8B8A /* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH */: return "GL_ACTIVE_ATTRIBUTE_MAX_LENGTH (0x8B8A)"; +case 0x8B8B /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */: return "GL_FRAGMENT_SHADER_DERIVATIVE_HINT (0x8B8B)"; +case 0x8B8C /* GL_SHADING_LANGUAGE_VERSION */: return "GL_SHADING_LANGUAGE_VERSION (0x8B8C)"; +case 0x8B8D /* GL_CURRENT_PROGRAM */: return "GL_CURRENT_PROGRAM (0x8B8D)"; +case 0x8CA0 /* GL_POINT_SPRITE_COORD_ORIGIN */: return "GL_POINT_SPRITE_COORD_ORIGIN (0x8CA0)"; +case 0x8CA1 /* GL_LOWER_LEFT */: return "GL_LOWER_LEFT (0x8CA1)"; +case 0x8CA2 /* GL_UPPER_LEFT */: return "GL_UPPER_LEFT (0x8CA2)"; +case 0x8CA3 /* GL_STENCIL_BACK_REF */: return "GL_STENCIL_BACK_REF (0x8CA3)"; +case 0x8CA4 /* GL_STENCIL_BACK_VALUE_MASK */: return "GL_STENCIL_BACK_VALUE_MASK (0x8CA4)"; +case 0x8CA5 /* GL_STENCIL_BACK_WRITEMASK */: return "GL_STENCIL_BACK_WRITEMASK (0x8CA5)"; + +/* ----------------------------- GL_VERSION_2_1 ---------------------------- */ + +case 0x845F /* GL_CURRENT_RASTER_SECONDARY_COLOR */: return "GL_CURRENT_RASTER_SECONDARY_COLOR (0x845F)"; +case 0x88EB /* GL_PIXEL_PACK_BUFFER */: return "GL_PIXEL_PACK_BUFFER (0x88EB)"; +case 0x88EC /* GL_PIXEL_UNPACK_BUFFER */: return "GL_PIXEL_UNPACK_BUFFER (0x88EC)"; +case 0x88ED /* GL_PIXEL_PACK_BUFFER_BINDING */: return "GL_PIXEL_PACK_BUFFER_BINDING (0x88ED)"; +case 0x88EF /* GL_PIXEL_UNPACK_BUFFER_BINDING */: return "GL_PIXEL_UNPACK_BUFFER_BINDING (0x88EF)"; +case 0x8B65 /* GL_FLOAT_MAT2x3 */: return "GL_FLOAT_MAT2x3 (0x8B65)"; +case 0x8B66 /* GL_FLOAT_MAT2x4 */: return "GL_FLOAT_MAT2x4 (0x8B66)"; +case 0x8B67 /* GL_FLOAT_MAT3x2 */: return "GL_FLOAT_MAT3x2 (0x8B67)"; +case 0x8B68 /* GL_FLOAT_MAT3x4 */: return "GL_FLOAT_MAT3x4 (0x8B68)"; +case 0x8B69 /* GL_FLOAT_MAT4x2 */: return "GL_FLOAT_MAT4x2 (0x8B69)"; +case 0x8B6A /* GL_FLOAT_MAT4x3 */: return "GL_FLOAT_MAT4x3 (0x8B6A)"; +case 0x8C40 /* GL_SRGB */: return "GL_SRGB (0x8C40)"; +case 0x8C41 /* GL_SRGB8 */: return "GL_SRGB8 (0x8C41)"; +case 0x8C42 /* GL_SRGB_ALPHA */: return "GL_SRGB_ALPHA (0x8C42)"; +case 0x8C43 /* GL_SRGB8_ALPHA8 */: return "GL_SRGB8_ALPHA8 (0x8C43)"; +case 0x8C44 /* GL_SLUMINANCE_ALPHA */: return "GL_SLUMINANCE_ALPHA (0x8C44)"; +case 0x8C45 /* GL_SLUMINANCE8_ALPHA8 */: return "GL_SLUMINANCE8_ALPHA8 (0x8C45)"; +case 0x8C46 /* GL_SLUMINANCE */: return "GL_SLUMINANCE (0x8C46)"; +case 0x8C47 /* GL_SLUMINANCE8 */: return "GL_SLUMINANCE8 (0x8C47)"; +case 0x8C48 /* GL_COMPRESSED_SRGB */: return "GL_COMPRESSED_SRGB (0x8C48)"; +case 0x8C49 /* GL_COMPRESSED_SRGB_ALPHA */: return "GL_COMPRESSED_SRGB_ALPHA (0x8C49)"; +case 0x8C4A /* GL_COMPRESSED_SLUMINANCE */: return "GL_COMPRESSED_SLUMINANCE (0x8C4A)"; +case 0x8C4B /* GL_COMPRESSED_SLUMINANCE_ALPHA */: return "GL_COMPRESSED_SLUMINANCE_ALPHA (0x8C4B)"; + +/* ----------------------------- GL_VERSION_3_0 ---------------------------- */ + +//case 0x0001 /* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT */: return "GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT (0x0001)"; +case 0x821B /* GL_MAJOR_VERSION */: return "GL_MAJOR_VERSION (0x821B)"; +case 0x821C /* GL_MINOR_VERSION */: return "GL_MINOR_VERSION (0x821C)"; +case 0x821D /* GL_NUM_EXTENSIONS */: return "GL_NUM_EXTENSIONS (0x821D)"; +case 0x821E /* GL_CONTEXT_FLAGS */: return "GL_CONTEXT_FLAGS (0x821E)"; +case 0x8223 /* GL_DEPTH_BUFFER */: return "GL_DEPTH_BUFFER (0x8223)"; +case 0x8224 /* GL_STENCIL_BUFFER */: return "GL_STENCIL_BUFFER (0x8224)"; +case 0x8225 /* GL_COMPRESSED_RED */: return "GL_COMPRESSED_RED (0x8225)"; +case 0x8226 /* GL_COMPRESSED_RG */: return "GL_COMPRESSED_RG (0x8226)"; +case 0x8814 /* GL_RGBA32F */: return "GL_RGBA32F (0x8814)"; +//case 0x8814 /* GL_RGBA_FLOAT32_APPLE */: return "GL_RGBA_FLOAT32_APPLE (0x8814)"; +//case 0x8814 /* GL_RGBA32F_ARB */: return "GL_RGBA32F_ARB (0x8814)"; +case 0x8815 /* GL_RGB32F */: return "GL_RGB32F (0x8815)"; +case 0x881A /* GL_RGBA16F */: return "GL_RGBA16F (0x881A)"; +case 0x881B /* GL_RGB16F */: return "GL_RGB16F (0x881B)"; +case 0x88FD /* GL_VERTEX_ATTRIB_ARRAY_INTEGER */: return "GL_VERTEX_ATTRIB_ARRAY_INTEGER (0x88FD)"; +case 0x88FF /* GL_MAX_ARRAY_TEXTURE_LAYERS */: return "GL_MAX_ARRAY_TEXTURE_LAYERS (0x88FF)"; +case 0x8904 /* GL_MIN_PROGRAM_TEXEL_OFFSET */: return "GL_MIN_PROGRAM_TEXEL_OFFSET (0x8904)"; +case 0x8905 /* GL_MAX_PROGRAM_TEXEL_OFFSET */: return "GL_MAX_PROGRAM_TEXEL_OFFSET (0x8905)"; +case 0x891A /* GL_CLAMP_VERTEX_COLOR */: return "GL_CLAMP_VERTEX_COLOR (0x891A)"; +case 0x891B /* GL_CLAMP_FRAGMENT_COLOR */: return "GL_CLAMP_FRAGMENT_COLOR (0x891B)"; +case 0x891C /* GL_CLAMP_READ_COLOR */: return "GL_CLAMP_READ_COLOR (0x891C)"; +case 0x891D /* GL_FIXED_ONLY */: return "GL_FIXED_ONLY (0x891D)"; +case 0x8C10 /* GL_TEXTURE_RED_TYPE */: return "GL_TEXTURE_RED_TYPE (0x8C10)"; +case 0x8C11 /* GL_TEXTURE_GREEN_TYPE */: return "GL_TEXTURE_GREEN_TYPE (0x8C11)"; +case 0x8C12 /* GL_TEXTURE_BLUE_TYPE */: return "GL_TEXTURE_BLUE_TYPE (0x8C12)"; +case 0x8C13 /* GL_TEXTURE_ALPHA_TYPE */: return "GL_TEXTURE_ALPHA_TYPE (0x8C13)"; +case 0x8C14 /* GL_TEXTURE_LUMINANCE_TYPE */: return "GL_TEXTURE_LUMINANCE_TYPE (0x8C14)"; +case 0x8C15 /* GL_TEXTURE_INTENSITY_TYPE */: return "GL_TEXTURE_INTENSITY_TYPE (0x8C15)"; +case 0x8C16 /* GL_TEXTURE_DEPTH_TYPE */: return "GL_TEXTURE_DEPTH_TYPE (0x8C16)"; +case 0x8C18 /* GL_TEXTURE_1D_ARRAY */: return "GL_TEXTURE_1D_ARRAY (0x8C18)"; +case 0x8C19 /* GL_PROXY_TEXTURE_1D_ARRAY */: return "GL_PROXY_TEXTURE_1D_ARRAY (0x8C19)"; +case 0x8C1A /* GL_TEXTURE_2D_ARRAY */: return "GL_TEXTURE_2D_ARRAY (0x8C1A)"; +case 0x8C1B /* GL_PROXY_TEXTURE_2D_ARRAY */: return "GL_PROXY_TEXTURE_2D_ARRAY (0x8C1B)"; +case 0x8C1C /* GL_TEXTURE_BINDING_1D_ARRAY */: return "GL_TEXTURE_BINDING_1D_ARRAY (0x8C1C)"; +case 0x8C1D /* GL_TEXTURE_BINDING_2D_ARRAY */: return "GL_TEXTURE_BINDING_2D_ARRAY (0x8C1D)"; +case 0x8C3A /* GL_R11F_G11F_B10F */: return "GL_R11F_G11F_B10F (0x8C3A)"; +case 0x8C3B /* GL_UNSIGNED_INT_10F_11F_11F_REV */: return "GL_UNSIGNED_INT_10F_11F_11F_REV (0x8C3B)"; +case 0x8C3D /* GL_RGB9_E5 */: return "GL_RGB9_E5 (0x8C3D)"; +case 0x8C3E /* GL_UNSIGNED_INT_5_9_9_9_REV */: return "GL_UNSIGNED_INT_5_9_9_9_REV (0x8C3E)"; +case 0x8C3F /* GL_TEXTURE_SHARED_SIZE */: return "GL_TEXTURE_SHARED_SIZE (0x8C3F)"; +case 0x8C76 /* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH */: return "GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH (0x8C76)"; +case 0x8C7F /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE */: return "GL_TRANSFORM_FEEDBACK_BUFFER_MODE (0x8C7F)"; +case 0x8C80 /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS */: return "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS (0x8C80)"; +case 0x8C83 /* GL_TRANSFORM_FEEDBACK_VARYINGS */: return "GL_TRANSFORM_FEEDBACK_VARYINGS (0x8C83)"; +case 0x8C84 /* GL_TRANSFORM_FEEDBACK_BUFFER_START */: return "GL_TRANSFORM_FEEDBACK_BUFFER_START (0x8C84)"; +case 0x8C85 /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE */: return "GL_TRANSFORM_FEEDBACK_BUFFER_SIZE (0x8C85)"; +case 0x8C87 /* GL_PRIMITIVES_GENERATED */: return "GL_PRIMITIVES_GENERATED (0x8C87)"; +case 0x8C88 /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN */: return "GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN (0x8C88)"; +case 0x8C89 /* GL_RASTERIZER_DISCARD */: return "GL_RASTERIZER_DISCARD (0x8C89)"; +case 0x8C8A /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS */: return "GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS (0x8C8A)"; +case 0x8C8B /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS */: return "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS (0x8C8B)"; +case 0x8C8C /* GL_INTERLEAVED_ATTRIBS */: return "GL_INTERLEAVED_ATTRIBS (0x8C8C)"; +case 0x8C8D /* GL_SEPARATE_ATTRIBS */: return "GL_SEPARATE_ATTRIBS (0x8C8D)"; +case 0x8C8E /* GL_TRANSFORM_FEEDBACK_BUFFER */: return "GL_TRANSFORM_FEEDBACK_BUFFER (0x8C8E)"; +case 0x8C8F /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING */: return "GL_TRANSFORM_FEEDBACK_BUFFER_BINDING (0x8C8F)"; +case 0x8D70 /* GL_RGBA32UI */: return "GL_RGBA32UI (0x8D70)"; +case 0x8D71 /* GL_RGB32UI */: return "GL_RGB32UI (0x8D71)"; +case 0x8D76 /* GL_RGBA16UI */: return "GL_RGBA16UI (0x8D76)"; +case 0x8D77 /* GL_RGB16UI */: return "GL_RGB16UI (0x8D77)"; +case 0x8D7C /* GL_RGBA8UI */: return "GL_RGBA8UI (0x8D7C)"; +case 0x8D7D /* GL_RGB8UI */: return "GL_RGB8UI (0x8D7D)"; +case 0x8D82 /* GL_RGBA32I */: return "GL_RGBA32I (0x8D82)"; +case 0x8D83 /* GL_RGB32I */: return "GL_RGB32I (0x8D83)"; +case 0x8D88 /* GL_RGBA16I */: return "GL_RGBA16I (0x8D88)"; +case 0x8D89 /* GL_RGB16I */: return "GL_RGB16I (0x8D89)"; +case 0x8D8E /* GL_RGBA8I */: return "GL_RGBA8I (0x8D8E)"; +case 0x8D8F /* GL_RGB8I */: return "GL_RGB8I (0x8D8F)"; +case 0x8D94 /* GL_RED_INTEGER */: return "GL_RED_INTEGER (0x8D94)"; +case 0x8D95 /* GL_GREEN_INTEGER */: return "GL_GREEN_INTEGER (0x8D95)"; +case 0x8D96 /* GL_BLUE_INTEGER */: return "GL_BLUE_INTEGER (0x8D96)"; +case 0x8D97 /* GL_ALPHA_INTEGER */: return "GL_ALPHA_INTEGER (0x8D97)"; +case 0x8D98 /* GL_RGB_INTEGER */: return "GL_RGB_INTEGER (0x8D98)"; +case 0x8D99 /* GL_RGBA_INTEGER */: return "GL_RGBA_INTEGER (0x8D99)"; +case 0x8D9A /* GL_BGR_INTEGER */: return "GL_BGR_INTEGER (0x8D9A)"; +case 0x8D9B /* GL_BGRA_INTEGER */: return "GL_BGRA_INTEGER (0x8D9B)"; +case 0x8DC0 /* GL_SAMPLER_1D_ARRAY */: return "GL_SAMPLER_1D_ARRAY (0x8DC0)"; +case 0x8DC1 /* GL_SAMPLER_2D_ARRAY */: return "GL_SAMPLER_2D_ARRAY (0x8DC1)"; +case 0x8DC3 /* GL_SAMPLER_1D_ARRAY_SHADOW */: return "GL_SAMPLER_1D_ARRAY_SHADOW (0x8DC3)"; +case 0x8DC4 /* GL_SAMPLER_2D_ARRAY_SHADOW */: return "GL_SAMPLER_2D_ARRAY_SHADOW (0x8DC4)"; +case 0x8DC5 /* GL_SAMPLER_CUBE_SHADOW */: return "GL_SAMPLER_CUBE_SHADOW (0x8DC5)"; +case 0x8DC6 /* GL_UNSIGNED_INT_VEC2 */: return "GL_UNSIGNED_INT_VEC2 (0x8DC6)"; +case 0x8DC7 /* GL_UNSIGNED_INT_VEC3 */: return "GL_UNSIGNED_INT_VEC3 (0x8DC7)"; +case 0x8DC8 /* GL_UNSIGNED_INT_VEC4 */: return "GL_UNSIGNED_INT_VEC4 (0x8DC8)"; +case 0x8DC9 /* GL_INT_SAMPLER_1D */: return "GL_INT_SAMPLER_1D (0x8DC9)"; +case 0x8DCA /* GL_INT_SAMPLER_2D */: return "GL_INT_SAMPLER_2D (0x8DCA)"; +case 0x8DCB /* GL_INT_SAMPLER_3D */: return "GL_INT_SAMPLER_3D (0x8DCB)"; +case 0x8DCC /* GL_INT_SAMPLER_CUBE */: return "GL_INT_SAMPLER_CUBE (0x8DCC)"; +case 0x8DCE /* GL_INT_SAMPLER_1D_ARRAY */: return "GL_INT_SAMPLER_1D_ARRAY (0x8DCE)"; +case 0x8DCF /* GL_INT_SAMPLER_2D_ARRAY */: return "GL_INT_SAMPLER_2D_ARRAY (0x8DCF)"; +case 0x8DD1 /* GL_UNSIGNED_INT_SAMPLER_1D */: return "GL_UNSIGNED_INT_SAMPLER_1D (0x8DD1)"; +case 0x8DD2 /* GL_UNSIGNED_INT_SAMPLER_2D */: return "GL_UNSIGNED_INT_SAMPLER_2D (0x8DD2)"; +case 0x8DD3 /* GL_UNSIGNED_INT_SAMPLER_3D */: return "GL_UNSIGNED_INT_SAMPLER_3D (0x8DD3)"; +case 0x8DD4 /* GL_UNSIGNED_INT_SAMPLER_CUBE */: return "GL_UNSIGNED_INT_SAMPLER_CUBE (0x8DD4)"; +case 0x8DD6 /* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY */: return "GL_UNSIGNED_INT_SAMPLER_1D_ARRAY (0x8DD6)"; +case 0x8DD7 /* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY */: return "GL_UNSIGNED_INT_SAMPLER_2D_ARRAY (0x8DD7)"; +case 0x8E13 /* GL_QUERY_WAIT */: return "GL_QUERY_WAIT (0x8E13)"; +case 0x8E14 /* GL_QUERY_NO_WAIT */: return "GL_QUERY_NO_WAIT (0x8E14)"; +case 0x8E15 /* GL_QUERY_BY_REGION_WAIT */: return "GL_QUERY_BY_REGION_WAIT (0x8E15)"; +case 0x8E16 /* GL_QUERY_BY_REGION_NO_WAIT */: return "GL_QUERY_BY_REGION_NO_WAIT (0x8E16)"; + +/* ----------------------------- GL_VERSION_3_1 ---------------------------- */ + +case 0x84F5 /* GL_TEXTURE_RECTANGLE */: return "GL_TEXTURE_RECTANGLE (0x84F5)"; +case 0x84F6 /* GL_TEXTURE_BINDING_RECTANGLE */: return "GL_TEXTURE_BINDING_RECTANGLE (0x84F6)"; +case 0x84F7 /* GL_PROXY_TEXTURE_RECTANGLE */: return "GL_PROXY_TEXTURE_RECTANGLE (0x84F7)"; +case 0x84F8 /* GL_MAX_RECTANGLE_TEXTURE_SIZE */: return "GL_MAX_RECTANGLE_TEXTURE_SIZE (0x84F8)"; +case 0x8B63 /* GL_SAMPLER_2D_RECT */: return "GL_SAMPLER_2D_RECT (0x8B63)"; +case 0x8B64 /* GL_SAMPLER_2D_RECT_SHADOW */: return "GL_SAMPLER_2D_RECT_SHADOW (0x8B64)"; +case 0x8C2A /* GL_TEXTURE_BUFFER */: return "GL_TEXTURE_BUFFER (0x8C2A)"; +case 0x8C2B /* GL_MAX_TEXTURE_BUFFER_SIZE */: return "GL_MAX_TEXTURE_BUFFER_SIZE (0x8C2B)"; +case 0x8C2C /* GL_TEXTURE_BINDING_BUFFER */: return "GL_TEXTURE_BINDING_BUFFER (0x8C2C)"; +case 0x8C2D /* GL_TEXTURE_BUFFER_DATA_STORE_BINDING */: return "GL_TEXTURE_BUFFER_DATA_STORE_BINDING (0x8C2D)"; +case 0x8C2E /* GL_TEXTURE_BUFFER_FORMAT */: return "GL_TEXTURE_BUFFER_FORMAT (0x8C2E)"; +case 0x8DC2 /* GL_SAMPLER_BUFFER */: return "GL_SAMPLER_BUFFER (0x8DC2)"; +case 0x8DCD /* GL_INT_SAMPLER_2D_RECT */: return "GL_INT_SAMPLER_2D_RECT (0x8DCD)"; +case 0x8DD0 /* GL_INT_SAMPLER_BUFFER */: return "GL_INT_SAMPLER_BUFFER (0x8DD0)"; +case 0x8DD5 /* GL_UNSIGNED_INT_SAMPLER_2D_RECT */: return "GL_UNSIGNED_INT_SAMPLER_2D_RECT (0x8DD5)"; +case 0x8DD8 /* GL_UNSIGNED_INT_SAMPLER_BUFFER */: return "GL_UNSIGNED_INT_SAMPLER_BUFFER (0x8DD8)"; +case 0x8F90 /* GL_RED_SNORM */: return "GL_RED_SNORM (0x8F90)"; +case 0x8F91 /* GL_RG_SNORM */: return "GL_RG_SNORM (0x8F91)"; +case 0x8F92 /* GL_RGB_SNORM */: return "GL_RGB_SNORM (0x8F92)"; +case 0x8F93 /* GL_RGBA_SNORM */: return "GL_RGBA_SNORM (0x8F93)"; +case 0x8F94 /* GL_R8_SNORM */: return "GL_R8_SNORM (0x8F94)"; +case 0x8F95 /* GL_RG8_SNORM */: return "GL_RG8_SNORM (0x8F95)"; +case 0x8F96 /* GL_RGB8_SNORM */: return "GL_RGB8_SNORM (0x8F96)"; +case 0x8F97 /* GL_RGBA8_SNORM */: return "GL_RGBA8_SNORM (0x8F97)"; +case 0x8F98 /* GL_R16_SNORM */: return "GL_R16_SNORM (0x8F98)"; +case 0x8F99 /* GL_RG16_SNORM */: return "GL_RG16_SNORM (0x8F99)"; +case 0x8F9A /* GL_RGB16_SNORM */: return "GL_RGB16_SNORM (0x8F9A)"; +case 0x8F9B /* GL_RGBA16_SNORM */: return "GL_RGBA16_SNORM (0x8F9B)"; +case 0x8F9C /* GL_SIGNED_NORMALIZED */: return "GL_SIGNED_NORMALIZED (0x8F9C)"; +case 0x8F9D /* GL_PRIMITIVE_RESTART */: return "GL_PRIMITIVE_RESTART (0x8F9D)"; +case 0x8F9E /* GL_PRIMITIVE_RESTART_INDEX */: return "GL_PRIMITIVE_RESTART_INDEX (0x8F9E)"; +case 0x911F /* GL_BUFFER_ACCESS_FLAGS */: return "GL_BUFFER_ACCESS_FLAGS (0x911F)"; +case 0x9120 /* GL_BUFFER_MAP_LENGTH */: return "GL_BUFFER_MAP_LENGTH (0x9120)"; +case 0x9121 /* GL_BUFFER_MAP_OFFSET */: return "GL_BUFFER_MAP_OFFSET (0x9121)"; + +/* ----------------------------- GL_VERSION_3_2 ---------------------------- */ + +//case 0x00000001 /* GL_CONTEXT_CORE_PROFILE_BIT */: return "GL_CONTEXT_CORE_PROFILE_BIT (0x00000001)"; +//case 0x00000002 /* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT */: return "GL_CONTEXT_COMPATIBILITY_PROFILE_BIT (0x00000002)"; +case 0x000A /* GL_LINES_ADJACENCY */: return "GL_LINES_ADJACENCY (0x000A)"; +case 0x000B /* GL_LINE_STRIP_ADJACENCY */: return "GL_LINE_STRIP_ADJACENCY (0x000B)"; +case 0x000C /* GL_TRIANGLES_ADJACENCY */: return "GL_TRIANGLES_ADJACENCY (0x000C)"; +case 0x000D /* GL_TRIANGLE_STRIP_ADJACENCY */: return "GL_TRIANGLE_STRIP_ADJACENCY (0x000D)"; +case 0x8642 /* GL_PROGRAM_POINT_SIZE */: return "GL_PROGRAM_POINT_SIZE (0x8642)"; +//case 0x8642 /* GL_PROGRAM_POINT_SIZE_ARB */: return "GL_PROGRAM_POINT_SIZE_ARB (0x8642)"; +case 0x8916 /* GL_GEOMETRY_VERTICES_OUT */: return "GL_GEOMETRY_VERTICES_OUT (0x8916)"; +case 0x8917 /* GL_GEOMETRY_INPUT_TYPE */: return "GL_GEOMETRY_INPUT_TYPE (0x8917)"; +case 0x8918 /* GL_GEOMETRY_OUTPUT_TYPE */: return "GL_GEOMETRY_OUTPUT_TYPE (0x8918)"; +case 0x8C29 /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS */: return "GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS (0x8C29)"; +case 0x8DA7 /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED */: return "GL_FRAMEBUFFER_ATTACHMENT_LAYERED (0x8DA7)"; +case 0x8DA8 /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS */: return "GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS (0x8DA8)"; +case 0x8DD9 /* GL_GEOMETRY_SHADER */: return "GL_GEOMETRY_SHADER (0x8DD9)"; +case 0x8DDF /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS */: return "GL_MAX_GEOMETRY_UNIFORM_COMPONENTS (0x8DDF)"; +case 0x8DE0 /* GL_MAX_GEOMETRY_OUTPUT_VERTICES */: return "GL_MAX_GEOMETRY_OUTPUT_VERTICES (0x8DE0)"; +case 0x8DE1 /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS */: return "GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS (0x8DE1)"; +case 0x9122 /* GL_MAX_VERTEX_OUTPUT_COMPONENTS */: return "GL_MAX_VERTEX_OUTPUT_COMPONENTS (0x9122)"; +case 0x9123 /* GL_MAX_GEOMETRY_INPUT_COMPONENTS */: return "GL_MAX_GEOMETRY_INPUT_COMPONENTS (0x9123)"; +case 0x9124 /* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS */: return "GL_MAX_GEOMETRY_OUTPUT_COMPONENTS (0x9124)"; +case 0x9125 /* GL_MAX_FRAGMENT_INPUT_COMPONENTS */: return "GL_MAX_FRAGMENT_INPUT_COMPONENTS (0x9125)"; +case 0x9126 /* GL_CONTEXT_PROFILE_MASK */: return "GL_CONTEXT_PROFILE_MASK (0x9126)"; + +/* ----------------------------- GL_VERSION_3_3 ---------------------------- */ + +case 0x88FE /* GL_VERTEX_ATTRIB_ARRAY_DIVISOR */: return "GL_VERTEX_ATTRIB_ARRAY_DIVISOR (0x88FE)"; +case 0x8E42 /* GL_TEXTURE_SWIZZLE_R */: return "GL_TEXTURE_SWIZZLE_R (0x8E42)"; +case 0x8E43 /* GL_TEXTURE_SWIZZLE_G */: return "GL_TEXTURE_SWIZZLE_G (0x8E43)"; +case 0x8E44 /* GL_TEXTURE_SWIZZLE_B */: return "GL_TEXTURE_SWIZZLE_B (0x8E44)"; +case 0x8E45 /* GL_TEXTURE_SWIZZLE_A */: return "GL_TEXTURE_SWIZZLE_A (0x8E45)"; +case 0x8E46 /* GL_TEXTURE_SWIZZLE_RGBA */: return "GL_TEXTURE_SWIZZLE_RGBA (0x8E46)"; +case 0x906F /* GL_RGB10_A2UI */: return "GL_RGB10_A2UI (0x906F)"; + +/* ----------------------------- GL_VERSION_4_0 ---------------------------- */ + +case 0x887F /* GL_GEOMETRY_SHADER_INVOCATIONS */: return "GL_GEOMETRY_SHADER_INVOCATIONS (0x887F)"; +case 0x8C36 /* GL_SAMPLE_SHADING */: return "GL_SAMPLE_SHADING (0x8C36)"; +case 0x8C37 /* GL_MIN_SAMPLE_SHADING_VALUE */: return "GL_MIN_SAMPLE_SHADING_VALUE (0x8C37)"; +case 0x8E5A /* GL_MAX_GEOMETRY_SHADER_INVOCATIONS */: return "GL_MAX_GEOMETRY_SHADER_INVOCATIONS (0x8E5A)"; +case 0x8E5B /* GL_MIN_FRAGMENT_INTERPOLATION_OFFSET */: return "GL_MIN_FRAGMENT_INTERPOLATION_OFFSET (0x8E5B)"; +case 0x8E5C /* GL_MAX_FRAGMENT_INTERPOLATION_OFFSET */: return "GL_MAX_FRAGMENT_INTERPOLATION_OFFSET (0x8E5C)"; +case 0x8E5D /* GL_FRAGMENT_INTERPOLATION_OFFSET_BITS */: return "GL_FRAGMENT_INTERPOLATION_OFFSET_BITS (0x8E5D)"; +case 0x8E5E /* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET */: return "GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET (0x8E5E)"; +case 0x8E5F /* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET */: return "GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET (0x8E5F)"; +case 0x8F9F /* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS */: return "GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS (0x8F9F)"; +case 0x9009 /* GL_TEXTURE_CUBE_MAP_ARRAY */: return "GL_TEXTURE_CUBE_MAP_ARRAY (0x9009)"; +case 0x900A /* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY */: return "GL_TEXTURE_BINDING_CUBE_MAP_ARRAY (0x900A)"; +case 0x900B /* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY */: return "GL_PROXY_TEXTURE_CUBE_MAP_ARRAY (0x900B)"; +case 0x900C /* GL_SAMPLER_CUBE_MAP_ARRAY */: return "GL_SAMPLER_CUBE_MAP_ARRAY (0x900C)"; +case 0x900D /* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW */: return "GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW (0x900D)"; +case 0x900E /* GL_INT_SAMPLER_CUBE_MAP_ARRAY */: return "GL_INT_SAMPLER_CUBE_MAP_ARRAY (0x900E)"; +case 0x900F /* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY */: return "GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY (0x900F)"; + +/* ----------------------------- GL_VERSION_4_2 ---------------------------- */ + +case 0x8E8C /* GL_COMPRESSED_RGBA_BPTC_UNORM */: return "GL_COMPRESSED_RGBA_BPTC_UNORM (0x8E8C)"; +case 0x8E8D /* GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM */: return "GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM (0x8E8D)"; +case 0x8E8E /* GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT */: return "GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT (0x8E8E)"; +case 0x8E8F /* GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT */: return "GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT (0x8E8F)"; + +/* ----------------------------- GL_VERSION_4_3 ---------------------------- */ + +case 0x82E9 /* GL_NUM_SHADING_LANGUAGE_VERSIONS */: return "GL_NUM_SHADING_LANGUAGE_VERSIONS (0x82E9)"; +case 0x874E /* GL_VERTEX_ATTRIB_ARRAY_LONG */: return "GL_VERTEX_ATTRIB_ARRAY_LONG (0x874E)"; + +/* -------------------------- GL_3DFX_multisample -------------------------- */ + +case 0x86B2 /* GL_MULTISAMPLE_3DFX */: return "GL_MULTISAMPLE_3DFX (0x86B2)"; +case 0x86B3 /* GL_SAMPLE_BUFFERS_3DFX */: return "GL_SAMPLE_BUFFERS_3DFX (0x86B3)"; +case 0x86B4 /* GL_SAMPLES_3DFX */: return "GL_SAMPLES_3DFX (0x86B4)"; +//case 0x20000000 /* GL_MULTISAMPLE_BIT_3DFX */: return "GL_MULTISAMPLE_BIT_3DFX (0x20000000)"; + +/* ---------------------------- GL_3DFX_tbuffer ---------------------------- */ + + +/* -------------------- GL_3DFX_texture_compression_FXT1 ------------------- */ + + + + +case 0x86B0 /* GL_COMPRESSED_RGB_FXT1_3DFX */: return "GL_COMPRESSED_RGB_FXT1_3DFX (0x86B0)"; +case 0x86B1 /* GL_COMPRESSED_RGBA_FXT1_3DFX */: return "GL_COMPRESSED_RGBA_FXT1_3DFX (0x86B1)"; + + + + + +/* ----------------------- GL_AMD_blend_minmax_factor ---------------------- */ + + + + +case 0x901C /* GL_FACTOR_MIN_AMD */: return "GL_FACTOR_MIN_AMD (0x901C)"; +case 0x901D /* GL_FACTOR_MAX_AMD */: return "GL_FACTOR_MAX_AMD (0x901D)"; + + + + + +/* ----------------------- GL_AMD_conservative_depth ----------------------- */ + + + + + + + + +/* -------------------------- GL_AMD_debug_output -------------------------- */ + + + + +case 0x9143 /* GL_MAX_DEBUG_MESSAGE_LENGTH_AMD */: return "GL_MAX_DEBUG_MESSAGE_LENGTH_AMD (0x9143)"; +case 0x9144 /* GL_MAX_DEBUG_LOGGED_MESSAGES_AMD */: return "GL_MAX_DEBUG_LOGGED_MESSAGES_AMD (0x9144)"; +case 0x9145 /* GL_DEBUG_LOGGED_MESSAGES_AMD */: return "GL_DEBUG_LOGGED_MESSAGES_AMD (0x9145)"; +case 0x9146 /* GL_DEBUG_SEVERITY_HIGH_AMD */: return "GL_DEBUG_SEVERITY_HIGH_AMD (0x9146)"; +case 0x9147 /* GL_DEBUG_SEVERITY_MEDIUM_AMD */: return "GL_DEBUG_SEVERITY_MEDIUM_AMD (0x9147)"; +case 0x9148 /* GL_DEBUG_SEVERITY_LOW_AMD */: return "GL_DEBUG_SEVERITY_LOW_AMD (0x9148)"; +case 0x9149 /* GL_DEBUG_CATEGORY_API_ERROR_AMD */: return "GL_DEBUG_CATEGORY_API_ERROR_AMD (0x9149)"; +case 0x914A /* GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD */: return "GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD (0x914A)"; +case 0x914B /* GL_DEBUG_CATEGORY_DEPRECATION_AMD */: return "GL_DEBUG_CATEGORY_DEPRECATION_AMD (0x914B)"; +case 0x914C /* GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD */: return "GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD (0x914C)"; +case 0x914D /* GL_DEBUG_CATEGORY_PERFORMANCE_AMD */: return "GL_DEBUG_CATEGORY_PERFORMANCE_AMD (0x914D)"; +case 0x914E /* GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD */: return "GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD (0x914E)"; +case 0x914F /* GL_DEBUG_CATEGORY_APPLICATION_AMD */: return "GL_DEBUG_CATEGORY_APPLICATION_AMD (0x914F)"; +case 0x9150 /* GL_DEBUG_CATEGORY_OTHER_AMD */: return "GL_DEBUG_CATEGORY_OTHER_AMD (0x9150)"; + + + + + + + +/* ---------------------- GL_AMD_depth_clamp_separate ---------------------- */ + + + + +case 0x901E /* GL_DEPTH_CLAMP_NEAR_AMD */: return "GL_DEPTH_CLAMP_NEAR_AMD (0x901E)"; +case 0x901F /* GL_DEPTH_CLAMP_FAR_AMD */: return "GL_DEPTH_CLAMP_FAR_AMD (0x901F)"; + + + + + +/* ----------------------- GL_AMD_draw_buffers_blend ----------------------- */ + + + + + + + + +/* ----------------------- GL_AMD_multi_draw_indirect ---------------------- */ + + + + +/* ------------------------- GL_AMD_name_gen_delete ------------------------ */ + + + + +case 0x9151 /* GL_DATA_BUFFER_AMD */: return "GL_DATA_BUFFER_AMD (0x9151)"; +case 0x9152 /* GL_PERFORMANCE_MONITOR_AMD */: return "GL_PERFORMANCE_MONITOR_AMD (0x9152)"; +case 0x9153 /* GL_QUERY_OBJECT_AMD */: return "GL_QUERY_OBJECT_AMD (0x9153)"; +case 0x9154 /* GL_VERTEX_ARRAY_OBJECT_AMD */: return "GL_VERTEX_ARRAY_OBJECT_AMD (0x9154)"; +case 0x9155 /* GL_SAMPLER_OBJECT_AMD */: return "GL_SAMPLER_OBJECT_AMD (0x9155)"; + + + +/* ----------------------- GL_AMD_performance_monitor ---------------------- */ + + + + +case 0x8BC0 /* GL_COUNTER_TYPE_AMD */: return "GL_COUNTER_TYPE_AMD (0x8BC0)"; +case 0x8BC1 /* GL_COUNTER_RANGE_AMD */: return "GL_COUNTER_RANGE_AMD (0x8BC1)"; +case 0x8BC2 /* GL_UNSIGNED_INT64_AMD */: return "GL_UNSIGNED_INT64_AMD (0x8BC2)"; +case 0x8BC3 /* GL_PERCENTAGE_AMD */: return "GL_PERCENTAGE_AMD (0x8BC3)"; +case 0x8BC4 /* GL_PERFMON_RESULT_AVAILABLE_AMD */: return "GL_PERFMON_RESULT_AVAILABLE_AMD (0x8BC4)"; +case 0x8BC5 /* GL_PERFMON_RESULT_SIZE_AMD */: return "GL_PERFMON_RESULT_SIZE_AMD (0x8BC5)"; +case 0x8BC6 /* GL_PERFMON_RESULT_AMD */: return "GL_PERFMON_RESULT_AMD (0x8BC6)";/* -------------------------- GL_AMD_pinned_memory ------------------------- */ + + + + +case 0x9160 /* GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD */: return "GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD (0x9160)"; + + + + + +/* ----------------------- GL_AMD_query_buffer_object ---------------------- */ + + + + +case 0x9192 /* GL_QUERY_BUFFER_AMD */: return "GL_QUERY_BUFFER_AMD (0x9192)"; +case 0x9193 /* GL_QUERY_BUFFER_BINDING_AMD */: return "GL_QUERY_BUFFER_BINDING_AMD (0x9193)"; +case 0x9194 /* GL_QUERY_RESULT_NO_WAIT_AMD */: return "GL_QUERY_RESULT_NO_WAIT_AMD (0x9194)"; + + + + + +/* ------------------------ GL_AMD_sample_positions ------------------------ */ + + + + +case 0x883F /* GL_SUBSAMPLE_DISTANCE_AMD */: return "GL_SUBSAMPLE_DISTANCE_AMD (0x883F)";/* ------------------ GL_AMD_seamless_cubemap_per_texture ------------------ */ + + + + +case 0x884F /* GL_TEXTURE_CUBE_MAP_SEAMLESS_ARB */: return "GL_TEXTURE_CUBE_MAP_SEAMLESS_ARB (0x884F)"; + + + + + +/* ---------------------- GL_AMD_shader_stencil_export --------------------- */ + + + + + + + + +/* ------------------- GL_AMD_stencil_operation_extended ------------------- */ + + + + +case 0x874A /* GL_SET_AMD */: return "GL_SET_AMD (0x874A)"; +case 0x874B /* GL_REPLACE_VALUE_AMD */: return "GL_REPLACE_VALUE_AMD (0x874B)"; +case 0x874C /* GL_STENCIL_OP_VALUE_AMD */: return "GL_STENCIL_OP_VALUE_AMD (0x874C)"; +case 0x874D /* GL_STENCIL_BACK_OP_VALUE_AMD */: return "GL_STENCIL_BACK_OP_VALUE_AMD (0x874D)";/* ------------------------ GL_AMD_texture_texture4 ------------------------ */ + + + + + + + + +/* --------------- GL_AMD_transform_feedback3_lines_triangles -------------- */ + + + + + + + + +/* ----------------------- GL_AMD_vertex_shader_layer ---------------------- */ + + + + + + + + +/* -------------------- GL_AMD_vertex_shader_tessellator ------------------- */ + + + + +case 0x9001 /* GL_SAMPLER_BUFFER_AMD */: return "GL_SAMPLER_BUFFER_AMD (0x9001)"; +case 0x9002 /* GL_INT_SAMPLER_BUFFER_AMD */: return "GL_INT_SAMPLER_BUFFER_AMD (0x9002)"; +case 0x9003 /* GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD */: return "GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD (0x9003)"; +case 0x9004 /* GL_TESSELLATION_MODE_AMD */: return "GL_TESSELLATION_MODE_AMD (0x9004)"; +case 0x9005 /* GL_TESSELLATION_FACTOR_AMD */: return "GL_TESSELLATION_FACTOR_AMD (0x9005)"; +case 0x9006 /* GL_DISCRETE_AMD */: return "GL_DISCRETE_AMD (0x9006)"; +case 0x9007 /* GL_CONTINUOUS_AMD */: return "GL_CONTINUOUS_AMD (0x9007)"; + +/* ------------------ GL_AMD_vertex_shader_viewport_index ------------------ */ + + + + + + + + +/* ----------------------- GL_APPLE_aux_depth_stencil ---------------------- */ + + + + +case 0x8A14 /* GL_AUX_DEPTH_STENCIL_APPLE */: return "GL_AUX_DEPTH_STENCIL_APPLE (0x8A14)"; + + + + + +/* ------------------------ GL_APPLE_client_storage ------------------------ */ + + + + +case 0x85B2 /* GL_UNPACK_CLIENT_STORAGE_APPLE */: return "GL_UNPACK_CLIENT_STORAGE_APPLE (0x85B2)"; + + + + + +/* ------------------------- GL_APPLE_element_array ------------------------ */ + + + + +case 0x8A0C /* GL_ELEMENT_ARRAY_APPLE */: return "GL_ELEMENT_ARRAY_APPLE (0x8A0C)"; +case 0x8A0D /* GL_ELEMENT_ARRAY_TYPE_APPLE */: return "GL_ELEMENT_ARRAY_TYPE_APPLE (0x8A0D)"; +case 0x8A0E /* GL_ELEMENT_ARRAY_POINTER_APPLE */: return "GL_ELEMENT_ARRAY_POINTER_APPLE (0x8A0E)"; + + + + + + + +/* ----------------------------- GL_APPLE_fence ---------------------------- */ + + + + +case 0x8A0A /* GL_DRAW_PIXELS_APPLE */: return "GL_DRAW_PIXELS_APPLE (0x8A0A)"; +case 0x8A0B /* GL_FENCE_APPLE */: return "GL_FENCE_APPLE (0x8A0B)"; + + + +/* ------------------------- GL_APPLE_float_pixels ------------------------- */ + + + + +//case 0x140B /* GL_HALF_APPLE */: return "GL_HALF_APPLE (0x140B)"; +//case 0x8815 /* GL_RGB_FLOAT32_APPLE */: return "GL_RGB_FLOAT32_APPLE (0x8815)"; +case 0x8816 /* GL_ALPHA_FLOAT32_APPLE */: return "GL_ALPHA_FLOAT32_APPLE (0x8816)"; +case 0x8817 /* GL_INTENSITY_FLOAT32_APPLE */: return "GL_INTENSITY_FLOAT32_APPLE (0x8817)"; +case 0x8818 /* GL_LUMINANCE_FLOAT32_APPLE */: return "GL_LUMINANCE_FLOAT32_APPLE (0x8818)"; +case 0x8819 /* GL_LUMINANCE_ALPHA_FLOAT32_APPLE */: return "GL_LUMINANCE_ALPHA_FLOAT32_APPLE (0x8819)"; +//case 0x881A /* GL_RGBA_FLOAT16_APPLE */: return "GL_RGBA_FLOAT16_APPLE (0x881A)"; +//case 0x881B /* GL_RGB_FLOAT16_APPLE */: return "GL_RGB_FLOAT16_APPLE (0x881B)"; +case 0x881C /* GL_ALPHA_FLOAT16_APPLE */: return "GL_ALPHA_FLOAT16_APPLE (0x881C)"; +case 0x881D /* GL_INTENSITY_FLOAT16_APPLE */: return "GL_INTENSITY_FLOAT16_APPLE (0x881D)"; +case 0x881E /* GL_LUMINANCE_FLOAT16_APPLE */: return "GL_LUMINANCE_FLOAT16_APPLE (0x881E)"; +case 0x881F /* GL_LUMINANCE_ALPHA_FLOAT16_APPLE */: return "GL_LUMINANCE_ALPHA_FLOAT16_APPLE (0x881F)"; +case 0x8A0F /* GL_COLOR_FLOAT_APPLE */: return "GL_COLOR_FLOAT_APPLE (0x8A0F)"; + + + + + +/* ---------------------- GL_APPLE_flush_buffer_range ---------------------- */ + + + + +case 0x8A12 /* GL_BUFFER_SERIALIZED_MODIFY_APPLE */: return "GL_BUFFER_SERIALIZED_MODIFY_APPLE (0x8A12)"; +case 0x8A13 /* GL_BUFFER_FLUSHING_UNMAP_APPLE */: return "GL_BUFFER_FLUSHING_UNMAP_APPLE (0x8A13)"; + +/* ----------------------- GL_APPLE_object_purgeable ----------------------- */ + + + + +case 0x85B3 /* GL_BUFFER_OBJECT_APPLE */: return "GL_BUFFER_OBJECT_APPLE (0x85B3)"; +case 0x8A19 /* GL_RELEASED_APPLE */: return "GL_RELEASED_APPLE (0x8A19)"; +case 0x8A1A /* GL_VOLATILE_APPLE */: return "GL_VOLATILE_APPLE (0x8A1A)"; +case 0x8A1B /* GL_RETAINED_APPLE */: return "GL_RETAINED_APPLE (0x8A1B)"; +case 0x8A1C /* GL_UNDEFINED_APPLE */: return "GL_UNDEFINED_APPLE (0x8A1C)"; +case 0x8A1D /* GL_PURGEABLE_APPLE */: return "GL_PURGEABLE_APPLE (0x8A1D)"; + + + +/* ------------------------- GL_APPLE_pixel_buffer ------------------------- */ + + + + +case 0x8A10 /* GL_MIN_PBUFFER_VIEWPORT_DIMS_APPLE */: return "GL_MIN_PBUFFER_VIEWPORT_DIMS_APPLE (0x8A10)"; + + + + + +/* ---------------------------- GL_APPLE_rgb_422 --------------------------- */ + + + + +case 0x85BA /* GL_UNSIGNED_SHORT_8_8_APPLE */: return "GL_UNSIGNED_SHORT_8_8_APPLE (0x85BA)"; +case 0x85BB /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */: return "GL_UNSIGNED_SHORT_8_8_REV_APPLE (0x85BB)"; +case 0x8A1F /* GL_RGB_422_APPLE */: return "GL_RGB_422_APPLE (0x8A1F)"; + + + + + +/* --------------------------- GL_APPLE_row_bytes -------------------------- */ + + + + +case 0x8A15 /* GL_PACK_ROW_BYTES_APPLE */: return "GL_PACK_ROW_BYTES_APPLE (0x8A15)"; +case 0x8A16 /* GL_UNPACK_ROW_BYTES_APPLE */: return "GL_UNPACK_ROW_BYTES_APPLE (0x8A16)"; + + + + + +/* ------------------------ GL_APPLE_specular_vector ----------------------- */ + + + + +case 0x85B0 /* GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE */: return "GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE (0x85B0)"; + + + + + +/* ------------------------- GL_APPLE_texture_range ------------------------ */ + + + + +case 0x85B7 /* GL_TEXTURE_RANGE_LENGTH_APPLE */: return "GL_TEXTURE_RANGE_LENGTH_APPLE (0x85B7)"; +case 0x85B8 /* GL_TEXTURE_RANGE_POINTER_APPLE */: return "GL_TEXTURE_RANGE_POINTER_APPLE (0x85B8)"; +case 0x85BC /* GL_TEXTURE_STORAGE_HINT_APPLE */: return "GL_TEXTURE_STORAGE_HINT_APPLE (0x85BC)"; +case 0x85BD /* GL_STORAGE_PRIVATE_APPLE */: return "GL_STORAGE_PRIVATE_APPLE (0x85BD)"; +//case 0x85BE /* GL_STORAGE_CACHED_APPLE */: return "GL_STORAGE_CACHED_APPLE (0x85BE)"; +//case 0x85BF /* GL_STORAGE_SHARED_APPLE */: return "GL_STORAGE_SHARED_APPLE (0x85BF)"; + +/* ------------------------ GL_APPLE_transform_hint ------------------------ */ + + + + +case 0x85B1 /* GL_TRANSFORM_HINT_APPLE */: return "GL_TRANSFORM_HINT_APPLE (0x85B1)"; + + + + + +/* ---------------------- GL_APPLE_vertex_array_object --------------------- */ + + + + +case 0x85B5 /* GL_VERTEX_ARRAY_BINDING_APPLE */: return "GL_VERTEX_ARRAY_BINDING_APPLE (0x85B5)"; + + + + + +/* ---------------------- GL_APPLE_vertex_array_range ---------------------- */ + + + + +case 0x851D /* GL_VERTEX_ARRAY_RANGE_APPLE */: return "GL_VERTEX_ARRAY_RANGE_APPLE (0x851D)"; +case 0x851E /* GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE */: return "GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE (0x851E)"; +case 0x851F /* GL_VERTEX_ARRAY_STORAGE_HINT_APPLE */: return "GL_VERTEX_ARRAY_STORAGE_HINT_APPLE (0x851F)"; +case 0x8520 /* GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_APPLE */: return "GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_APPLE (0x8520)"; +case 0x8521 /* GL_VERTEX_ARRAY_RANGE_POINTER_APPLE */: return "GL_VERTEX_ARRAY_RANGE_POINTER_APPLE (0x8521)"; +case 0x85B4 /* GL_STORAGE_CLIENT_APPLE */: return "GL_STORAGE_CLIENT_APPLE (0x85B4)"; +case 0x85BE /* GL_STORAGE_CACHED_APPLE */: return "GL_STORAGE_CACHED_APPLE (0x85BE)"; +case 0x85BF /* GL_STORAGE_SHARED_APPLE */: return "GL_STORAGE_SHARED_APPLE (0x85BF)"; + + + +/* ------------------- GL_APPLE_vertex_program_evaluators ------------------ */ + + + + +case 0x8A00 /* GL_VERTEX_ATTRIB_MAP1_APPLE */: return "GL_VERTEX_ATTRIB_MAP1_APPLE (0x8A00)"; +case 0x8A01 /* GL_VERTEX_ATTRIB_MAP2_APPLE */: return "GL_VERTEX_ATTRIB_MAP2_APPLE (0x8A01)"; +case 0x8A02 /* GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE */: return "GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE (0x8A02)"; +case 0x8A03 /* GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE */: return "GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE (0x8A03)"; +case 0x8A04 /* GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE */: return "GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE (0x8A04)"; +case 0x8A05 /* GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE */: return "GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE (0x8A05)"; +case 0x8A06 /* GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE */: return "GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE (0x8A06)"; +case 0x8A07 /* GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE */: return "GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE (0x8A07)"; +case 0x8A08 /* GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE */: return "GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE (0x8A08)"; +case 0x8A09 /* GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE */: return "GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE (0x8A09)"; + +/* --------------------------- GL_APPLE_ycbcr_422 -------------------------- */ + + + + +case 0x85B9 /* GL_YCBCR_422_APPLE */: return "GL_YCBCR_422_APPLE (0x85B9)"; + + + + + +/* ------------------------ GL_ARB_ES2_compatibility ----------------------- */ + + + + +case 0x140C /* GL_FIXED */: return "GL_FIXED (0x140C)"; +case 0x8B9A /* GL_IMPLEMENTATION_COLOR_READ_TYPE */: return "GL_IMPLEMENTATION_COLOR_READ_TYPE (0x8B9A)"; +case 0x8B9B /* GL_IMPLEMENTATION_COLOR_READ_FORMAT */: return "GL_IMPLEMENTATION_COLOR_READ_FORMAT (0x8B9B)"; +case 0x8D62 /* GL_RGB565 */: return "GL_RGB565 (0x8D62)"; +case 0x8DF0 /* GL_LOW_FLOAT */: return "GL_LOW_FLOAT (0x8DF0)"; +case 0x8DF1 /* GL_MEDIUM_FLOAT */: return "GL_MEDIUM_FLOAT (0x8DF1)"; +case 0x8DF2 /* GL_HIGH_FLOAT */: return "GL_HIGH_FLOAT (0x8DF2)"; +case 0x8DF3 /* GL_LOW_INT */: return "GL_LOW_INT (0x8DF3)"; +case 0x8DF4 /* GL_MEDIUM_INT */: return "GL_MEDIUM_INT (0x8DF4)"; +case 0x8DF5 /* GL_HIGH_INT */: return "GL_HIGH_INT (0x8DF5)"; +case 0x8DF8 /* GL_SHADER_BINARY_FORMATS */: return "GL_SHADER_BINARY_FORMATS (0x8DF8)"; +case 0x8DF9 /* GL_NUM_SHADER_BINARY_FORMATS */: return "GL_NUM_SHADER_BINARY_FORMATS (0x8DF9)"; +case 0x8DFA /* GL_SHADER_COMPILER */: return "GL_SHADER_COMPILER (0x8DFA)"; +case 0x8DFB /* GL_MAX_VERTEX_UNIFORM_VECTORS */: return "GL_MAX_VERTEX_UNIFORM_VECTORS (0x8DFB)"; +case 0x8DFC /* GL_MAX_VARYING_VECTORS */: return "GL_MAX_VARYING_VECTORS (0x8DFC)"; +case 0x8DFD /* GL_MAX_FRAGMENT_UNIFORM_VECTORS */: return "GL_MAX_FRAGMENT_UNIFORM_VECTORS (0x8DFD)"; + + + + + + + +/* ------------------------ GL_ARB_ES3_compatibility ----------------------- */ + + + + +case 0x8D69 /* GL_PRIMITIVE_RESTART_FIXED_INDEX */: return "GL_PRIMITIVE_RESTART_FIXED_INDEX (0x8D69)"; +case 0x8D6A /* GL_ANY_SAMPLES_PASSED_CONSERVATIVE */: return "GL_ANY_SAMPLES_PASSED_CONSERVATIVE (0x8D6A)"; +case 0x8D6B /* GL_MAX_ELEMENT_INDEX */: return "GL_MAX_ELEMENT_INDEX (0x8D6B)"; +case 0x9270 /* GL_COMPRESSED_R11_EAC */: return "GL_COMPRESSED_R11_EAC (0x9270)"; +case 0x9271 /* GL_COMPRESSED_SIGNED_R11_EAC */: return "GL_COMPRESSED_SIGNED_R11_EAC (0x9271)"; +case 0x9272 /* GL_COMPRESSED_RG11_EAC */: return "GL_COMPRESSED_RG11_EAC (0x9272)"; +case 0x9273 /* GL_COMPRESSED_SIGNED_RG11_EAC */: return "GL_COMPRESSED_SIGNED_RG11_EAC (0x9273)"; +case 0x9274 /* GL_COMPRESSED_RGB8_ETC2 */: return "GL_COMPRESSED_RGB8_ETC2 (0x9274)"; +case 0x9275 /* GL_COMPRESSED_SRGB8_ETC2 */: return "GL_COMPRESSED_SRGB8_ETC2 (0x9275)"; +case 0x9276 /* GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 */: return "GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 (0x9276)"; +case 0x9277 /* GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 */: return "GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 (0x9277)"; +case 0x9278 /* GL_COMPRESSED_RGBA8_ETC2_EAC */: return "GL_COMPRESSED_RGBA8_ETC2_EAC (0x9278)"; +case 0x9279 /* GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC */: return "GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC (0x9279)"; + + + + + +/* ------------------------ GL_ARB_arrays_of_arrays ------------------------ */ + + + + + + + + +/* -------------------------- GL_ARB_base_instance ------------------------- */ + + + + + + +/* ----------------------- GL_ARB_blend_func_extended ---------------------- */ + + + + +case 0x88F9 /* GL_SRC1_COLOR */: return "GL_SRC1_COLOR (0x88F9)"; +case 0x88FA /* GL_ONE_MINUS_SRC1_COLOR */: return "GL_ONE_MINUS_SRC1_COLOR (0x88FA)"; +case 0x88FB /* GL_ONE_MINUS_SRC1_ALPHA */: return "GL_ONE_MINUS_SRC1_ALPHA (0x88FB)"; +case 0x88FC /* GL_MAX_DUAL_SOURCE_DRAW_BUFFERS */: return "GL_MAX_DUAL_SOURCE_DRAW_BUFFERS (0x88FC)"; + +/* ---------------------------- GL_ARB_cl_event ---------------------------- */ + + + + +case 0x8240 /* GL_SYNC_CL_EVENT_ARB */: return "GL_SYNC_CL_EVENT_ARB (0x8240)"; +case 0x8241 /* GL_SYNC_CL_EVENT_COMPLETE_ARB */: return "GL_SYNC_CL_EVENT_COMPLETE_ARB (0x8241)"; + + +/* ----------------------- GL_ARB_clear_buffer_object ---------------------- */ + + + + + + + + +/* ----------------------- GL_ARB_color_buffer_float ----------------------- */ + + + + +case 0x8820 /* GL_RGBA_FLOAT_MODE_ARB */: return "GL_RGBA_FLOAT_MODE_ARB (0x8820)"; +//case 0x891A /* GL_CLAMP_VERTEX_COLOR_ARB */: return "GL_CLAMP_VERTEX_COLOR_ARB (0x891A)"; +//case 0x891B /* GL_CLAMP_FRAGMENT_COLOR_ARB */: return "GL_CLAMP_FRAGMENT_COLOR_ARB (0x891B)"; +//case 0x891C /* GL_CLAMP_READ_COLOR_ARB */: return "GL_CLAMP_READ_COLOR_ARB (0x891C)"; +//case 0x891D /* GL_FIXED_ONLY_ARB */: return "GL_FIXED_ONLY_ARB (0x891D)"; + + /* -------------------------- GL_ARB_compatibility ------------------------- */ + + + + + + + + +/* ---------------- GL_ARB_compressed_texture_pixel_storage ---------------- */ + + + + +case 0x9127 /* GL_UNPACK_COMPRESSED_BLOCK_WIDTH */: return "GL_UNPACK_COMPRESSED_BLOCK_WIDTH (0x9127)"; +case 0x9128 /* GL_UNPACK_COMPRESSED_BLOCK_HEIGHT */: return "GL_UNPACK_COMPRESSED_BLOCK_HEIGHT (0x9128)"; +case 0x9129 /* GL_UNPACK_COMPRESSED_BLOCK_DEPTH */: return "GL_UNPACK_COMPRESSED_BLOCK_DEPTH (0x9129)"; +case 0x912A /* GL_UNPACK_COMPRESSED_BLOCK_SIZE */: return "GL_UNPACK_COMPRESSED_BLOCK_SIZE (0x912A)"; +case 0x912B /* GL_PACK_COMPRESSED_BLOCK_WIDTH */: return "GL_PACK_COMPRESSED_BLOCK_WIDTH (0x912B)"; +case 0x912C /* GL_PACK_COMPRESSED_BLOCK_HEIGHT */: return "GL_PACK_COMPRESSED_BLOCK_HEIGHT (0x912C)"; +case 0x912D /* GL_PACK_COMPRESSED_BLOCK_DEPTH */: return "GL_PACK_COMPRESSED_BLOCK_DEPTH (0x912D)"; +case 0x912E /* GL_PACK_COMPRESSED_BLOCK_SIZE */: return "GL_PACK_COMPRESSED_BLOCK_SIZE (0x912E)"; + + + + + +/* ------------------------- GL_ARB_compute_shader ------------------------- */ + + + + +//case 0x00000020 /* GL_COMPUTE_SHADER_BIT */: return "GL_COMPUTE_SHADER_BIT (0x00000020)"; +case 0x8262 /* GL_MAX_COMPUTE_SHARED_MEMORY_SIZE */: return "GL_MAX_COMPUTE_SHARED_MEMORY_SIZE (0x8262)"; +case 0x8263 /* GL_MAX_COMPUTE_UNIFORM_COMPONENTS */: return "GL_MAX_COMPUTE_UNIFORM_COMPONENTS (0x8263)"; +case 0x8264 /* GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS */: return "GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS (0x8264)"; +case 0x8265 /* GL_MAX_COMPUTE_ATOMIC_COUNTERS */: return "GL_MAX_COMPUTE_ATOMIC_COUNTERS (0x8265)"; +case 0x8266 /* GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS */: return "GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS (0x8266)"; +case 0x8267 /* GL_COMPUTE_WORK_GROUP_SIZE */: return "GL_COMPUTE_WORK_GROUP_SIZE (0x8267)"; +case 0x90EB /* GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS */: return "GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS (0x90EB)"; +case 0x90EC /* GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER */: return "GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER (0x90EC)"; +case 0x90ED /* GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER */: return "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER (0x90ED)"; +case 0x90EE /* GL_DISPATCH_INDIRECT_BUFFER */: return "GL_DISPATCH_INDIRECT_BUFFER (0x90EE)"; +case 0x90EF /* GL_DISPATCH_INDIRECT_BUFFER_BINDING */: return "GL_DISPATCH_INDIRECT_BUFFER_BINDING (0x90EF)"; +case 0x91B9 /* GL_COMPUTE_SHADER */: return "GL_COMPUTE_SHADER (0x91B9)"; +case 0x91BB /* GL_MAX_COMPUTE_UNIFORM_BLOCKS */: return "GL_MAX_COMPUTE_UNIFORM_BLOCKS (0x91BB)"; +case 0x91BC /* GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS */: return "GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS (0x91BC)"; +case 0x91BD /* GL_MAX_COMPUTE_IMAGE_UNIFORMS */: return "GL_MAX_COMPUTE_IMAGE_UNIFORMS (0x91BD)"; +case 0x91BE /* GL_MAX_COMPUTE_WORK_GROUP_COUNT */: return "GL_MAX_COMPUTE_WORK_GROUP_COUNT (0x91BE)"; +case 0x91BF /* GL_MAX_COMPUTE_WORK_GROUP_SIZE */: return "GL_MAX_COMPUTE_WORK_GROUP_SIZE (0x91BF)"; + +/* ----------------------- GL_ARB_conservative_depth ----------------------- */ + + + + + + + + +/* --------------------------- GL_ARB_copy_buffer -------------------------- */ + + + + +case 0x8F36 /* GL_COPY_READ_BUFFER */: return "GL_COPY_READ_BUFFER (0x8F36)"; +case 0x8F37 /* GL_COPY_WRITE_BUFFER */: return "GL_COPY_WRITE_BUFFER (0x8F37)";/* --------------------------- GL_ARB_copy_image --------------------------- */ + + +/* -------------------------- GL_ARB_debug_output -------------------------- */ + + + + +case 0x8242 /* GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB */: return "GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB (0x8242)"; +case 0x8243 /* GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB */: return "GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB (0x8243)"; +case 0x8244 /* GL_DEBUG_CALLBACK_FUNCTION_ARB */: return "GL_DEBUG_CALLBACK_FUNCTION_ARB (0x8244)"; +case 0x8245 /* GL_DEBUG_CALLBACK_USER_PARAM_ARB */: return "GL_DEBUG_CALLBACK_USER_PARAM_ARB (0x8245)"; +case 0x8246 /* GL_DEBUG_SOURCE_API_ARB */: return "GL_DEBUG_SOURCE_API_ARB (0x8246)"; +case 0x8247 /* GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB */: return "GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB (0x8247)"; +case 0x8248 /* GL_DEBUG_SOURCE_SHADER_COMPILER_ARB */: return "GL_DEBUG_SOURCE_SHADER_COMPILER_ARB (0x8248)"; +case 0x8249 /* GL_DEBUG_SOURCE_THIRD_PARTY_ARB */: return "GL_DEBUG_SOURCE_THIRD_PARTY_ARB (0x8249)"; +case 0x824A /* GL_DEBUG_SOURCE_APPLICATION_ARB */: return "GL_DEBUG_SOURCE_APPLICATION_ARB (0x824A)"; +case 0x824B /* GL_DEBUG_SOURCE_OTHER_ARB */: return "GL_DEBUG_SOURCE_OTHER_ARB (0x824B)"; +case 0x824C /* GL_DEBUG_TYPE_ERROR_ARB */: return "GL_DEBUG_TYPE_ERROR_ARB (0x824C)"; +case 0x824D /* GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB */: return "GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB (0x824D)"; +case 0x824E /* GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB */: return "GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB (0x824E)"; +case 0x824F /* GL_DEBUG_TYPE_PORTABILITY_ARB */: return "GL_DEBUG_TYPE_PORTABILITY_ARB (0x824F)"; +case 0x8250 /* GL_DEBUG_TYPE_PERFORMANCE_ARB */: return "GL_DEBUG_TYPE_PERFORMANCE_ARB (0x8250)"; +case 0x8251 /* GL_DEBUG_TYPE_OTHER_ARB */: return "GL_DEBUG_TYPE_OTHER_ARB (0x8251)"; +//case 0x9143 /* GL_MAX_DEBUG_MESSAGE_LENGTH_ARB */: return "GL_MAX_DEBUG_MESSAGE_LENGTH_ARB (0x9143)"; +//case 0x9144 /* GL_MAX_DEBUG_LOGGED_MESSAGES_ARB */: return "GL_MAX_DEBUG_LOGGED_MESSAGES_ARB (0x9144)"; +//case 0x9145 /* GL_DEBUG_LOGGED_MESSAGES_ARB */: return "GL_DEBUG_LOGGED_MESSAGES_ARB (0x9145)"; +//case 0x9146 /* GL_DEBUG_SEVERITY_HIGH_ARB */: return "GL_DEBUG_SEVERITY_HIGH_ARB (0x9146)"; +//case 0x9147 /* GL_DEBUG_SEVERITY_MEDIUM_ARB */: return "GL_DEBUG_SEVERITY_MEDIUM_ARB (0x9147)"; +//case 0x9148 /* GL_DEBUG_SEVERITY_LOW_ARB */: return "GL_DEBUG_SEVERITY_LOW_ARB (0x9148)"; + + + + + + + +/* ----------------------- GL_ARB_depth_buffer_float ----------------------- */ + + + + +case 0x8CAC /* GL_DEPTH_COMPONENT32F */: return "GL_DEPTH_COMPONENT32F (0x8CAC)"; +case 0x8CAD /* GL_DEPTH32F_STENCIL8 */: return "GL_DEPTH32F_STENCIL8 (0x8CAD)"; +case 0x8DAD /* GL_FLOAT_32_UNSIGNED_INT_24_8_REV */: return "GL_FLOAT_32_UNSIGNED_INT_24_8_REV (0x8DAD)"; + + + + + +/* --------------------------- GL_ARB_depth_clamp -------------------------- */ + + + + +case 0x864F /* GL_DEPTH_CLAMP */: return "GL_DEPTH_CLAMP (0x864F)"; + + + + + +/* -------------------------- GL_ARB_depth_texture ------------------------- */ + + + + +//case 0x81A5 /* GL_DEPTH_COMPONENT16_ARB */: return "GL_DEPTH_COMPONENT16_ARB (0x81A5)"; +//case 0x81A6 /* GL_DEPTH_COMPONENT24_ARB */: return "GL_DEPTH_COMPONENT24_ARB (0x81A6)"; +//case 0x81A7 /* GL_DEPTH_COMPONENT32_ARB */: return "GL_DEPTH_COMPONENT32_ARB (0x81A7)"; +//case 0x884A /* GL_TEXTURE_DEPTH_SIZE_ARB */: return "GL_TEXTURE_DEPTH_SIZE_ARB (0x884A)"; +//case 0x884B /* GL_DEPTH_TEXTURE_MODE_ARB */: return "GL_DEPTH_TEXTURE_MODE_ARB (0x884B)"; + + + + + +/* -------------------------- GL_ARB_draw_buffers -------------------------- */ + + + + +//case 0x8824 /* GL_MAX_DRAW_BUFFERS_ARB */: return "GL_MAX_DRAW_BUFFERS_ARB (0x8824)"; +//case 0x8825 /* GL_DRAW_BUFFER0_ARB */: return "GL_DRAW_BUFFER0_ARB (0x8825)"; +//case 0x8826 /* GL_DRAW_BUFFER1_ARB */: return "GL_DRAW_BUFFER1_ARB (0x8826)"; +//case 0x8827 /* GL_DRAW_BUFFER2_ARB */: return "GL_DRAW_BUFFER2_ARB (0x8827)"; +//case 0x8828 /* GL_DRAW_BUFFER3_ARB */: return "GL_DRAW_BUFFER3_ARB (0x8828)"; +//case 0x8829 /* GL_DRAW_BUFFER4_ARB */: return "GL_DRAW_BUFFER4_ARB (0x8829)"; +//case 0x882A /* GL_DRAW_BUFFER5_ARB */: return "GL_DRAW_BUFFER5_ARB (0x882A)"; +//case 0x882B /* GL_DRAW_BUFFER6_ARB */: return "GL_DRAW_BUFFER6_ARB (0x882B)"; +//case 0x882C /* GL_DRAW_BUFFER7_ARB */: return "GL_DRAW_BUFFER7_ARB (0x882C)"; +//case 0x882D /* GL_DRAW_BUFFER8_ARB */: return "GL_DRAW_BUFFER8_ARB (0x882D)"; +//case 0x882E /* GL_DRAW_BUFFER9_ARB */: return "GL_DRAW_BUFFER9_ARB (0x882E)"; +//case 0x882F /* GL_DRAW_BUFFER10_ARB */: return "GL_DRAW_BUFFER10_ARB (0x882F)"; +//case 0x8830 /* GL_DRAW_BUFFER11_ARB */: return "GL_DRAW_BUFFER11_ARB (0x8830)"; +//case 0x8831 /* GL_DRAW_BUFFER12_ARB */: return "GL_DRAW_BUFFER12_ARB (0x8831)"; +//case 0x8832 /* GL_DRAW_BUFFER13_ARB */: return "GL_DRAW_BUFFER13_ARB (0x8832)"; +//case 0x8833 /* GL_DRAW_BUFFER14_ARB */: return "GL_DRAW_BUFFER14_ARB (0x8833)"; +//case 0x8834 /* GL_DRAW_BUFFER15_ARB */: return "GL_DRAW_BUFFER15_ARB (0x8834)"; + /* ----------------------- GL_ARB_draw_buffers_blend ----------------------- */ + + + + + + + + +/* -------------------- GL_ARB_draw_elements_base_vertex ------------------- */ + + + + + + + + +/* -------------------------- GL_ARB_draw_indirect ------------------------- */ + + + + +case 0x8F3F /* GL_DRAW_INDIRECT_BUFFER */: return "GL_DRAW_INDIRECT_BUFFER (0x8F3F)"; +case 0x8F43 /* GL_DRAW_INDIRECT_BUFFER_BINDING */: return "GL_DRAW_INDIRECT_BUFFER_BINDING (0x8F43)"; + +/* ------------------------- GL_ARB_draw_instanced ------------------------- */ + + + + + + + + +/* -------------------- GL_ARB_explicit_attrib_location -------------------- */ + + + + + + + + +/* -------------------- GL_ARB_explicit_uniform_location ------------------- */ + + + + +case 0x826E /* GL_MAX_UNIFORM_LOCATIONS */: return "GL_MAX_UNIFORM_LOCATIONS (0x826E)"; + + + + + +/* ------------------- GL_ARB_fragment_coord_conventions ------------------- */ + + + + + + + + +/* --------------------- GL_ARB_fragment_layer_viewport -------------------- */ + + + + + + + + +/* ------------------------ GL_ARB_fragment_program ------------------------ */ + + + + +case 0x8804 /* GL_FRAGMENT_PROGRAM_ARB */: return "GL_FRAGMENT_PROGRAM_ARB (0x8804)"; +case 0x8807 /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */: return "GL_PROGRAM_TEX_INDIRECTIONS_ARB (0x8807)"; +case 0x880A /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */: return "GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB (0x880A)"; +case 0x880D /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */: return "GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB (0x880D)"; +case 0x8810 /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */: return "GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB (0x8810)"; +//case 0x8871 /* GL_MAX_TEXTURE_COORDS_ARB */: return "GL_MAX_TEXTURE_COORDS_ARB (0x8871)"; +//case 0x8872 /* GL_MAX_TEXTURE_IMAGE_UNITS_ARB */: return "GL_MAX_TEXTURE_IMAGE_UNITS_ARB (0x8872)"; + + + + + +/* --------------------- GL_ARB_fragment_program_shadow -------------------- */ + + + + + + + + +/* ------------------------- GL_ARB_fragment_shader ------------------------ */ + + + + +//case 0x8B30 /* GL_FRAGMENT_SHADER_ARB */: return "GL_FRAGMENT_SHADER_ARB (0x8B30)"; +//case 0x8B49 /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB */: return "GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB (0x8B49)"; +//case 0x8B8B /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB */: return "GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB (0x8B8B)"; + + + + + +/* ------------------- GL_ARB_framebuffer_no_attachments ------------------- */ + + + + +case 0x9310 /* GL_FRAMEBUFFER_DEFAULT_WIDTH */: return "GL_FRAMEBUFFER_DEFAULT_WIDTH (0x9310)"; +case 0x9311 /* GL_FRAMEBUFFER_DEFAULT_HEIGHT */: return "GL_FRAMEBUFFER_DEFAULT_HEIGHT (0x9311)"; +case 0x9312 /* GL_FRAMEBUFFER_DEFAULT_LAYERS */: return "GL_FRAMEBUFFER_DEFAULT_LAYERS (0x9312)"; +case 0x9313 /* GL_FRAMEBUFFER_DEFAULT_SAMPLES */: return "GL_FRAMEBUFFER_DEFAULT_SAMPLES (0x9313)"; +case 0x9314 /* GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS */: return "GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS (0x9314)"; +case 0x9315 /* GL_MAX_FRAMEBUFFER_WIDTH */: return "GL_MAX_FRAMEBUFFER_WIDTH (0x9315)"; +case 0x9316 /* GL_MAX_FRAMEBUFFER_HEIGHT */: return "GL_MAX_FRAMEBUFFER_HEIGHT (0x9316)"; +case 0x9317 /* GL_MAX_FRAMEBUFFER_LAYERS */: return "GL_MAX_FRAMEBUFFER_LAYERS (0x9317)"; +case 0x9318 /* GL_MAX_FRAMEBUFFER_SAMPLES */: return "GL_MAX_FRAMEBUFFER_SAMPLES (0x9318)"; + + + + + +/* ----------------------- GL_ARB_framebuffer_object ----------------------- */ + + + + +case 0x0506 /* GL_INVALID_FRAMEBUFFER_OPERATION */: return "GL_INVALID_FRAMEBUFFER_OPERATION (0x0506)"; +case 0x8210 /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */: return "GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING (0x8210)"; +case 0x8211 /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */: return "GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE (0x8211)"; +case 0x8212 /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */: return "GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE (0x8212)"; +case 0x8213 /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */: return "GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE (0x8213)"; +case 0x8214 /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */: return "GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE (0x8214)"; +case 0x8215 /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */: return "GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE (0x8215)"; +case 0x8216 /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */: return "GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE (0x8216)"; +case 0x8217 /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */: return "GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE (0x8217)"; +case 0x8218 /* GL_FRAMEBUFFER_DEFAULT */: return "GL_FRAMEBUFFER_DEFAULT (0x8218)"; +case 0x8219 /* GL_FRAMEBUFFER_UNDEFINED */: return "GL_FRAMEBUFFER_UNDEFINED (0x8219)"; +case 0x821A /* GL_DEPTH_STENCIL_ATTACHMENT */: return "GL_DEPTH_STENCIL_ATTACHMENT (0x821A)"; +case 0x8222 /* GL_INDEX */: return "GL_INDEX (0x8222)"; +case 0x84E8 /* GL_MAX_RENDERBUFFER_SIZE */: return "GL_MAX_RENDERBUFFER_SIZE (0x84E8)"; +case 0x84F9 /* GL_DEPTH_STENCIL */: return "GL_DEPTH_STENCIL (0x84F9)"; +case 0x84FA /* GL_UNSIGNED_INT_24_8 */: return "GL_UNSIGNED_INT_24_8 (0x84FA)"; +case 0x88F0 /* GL_DEPTH24_STENCIL8 */: return "GL_DEPTH24_STENCIL8 (0x88F0)"; +case 0x88F1 /* GL_TEXTURE_STENCIL_SIZE */: return "GL_TEXTURE_STENCIL_SIZE (0x88F1)"; +case 0x8C17 /* GL_UNSIGNED_NORMALIZED */: return "GL_UNSIGNED_NORMALIZED (0x8C17)"; +//case 0x8C40 /* GL_SRGB */: return "GL_SRGB (0x8C40)"; +//case 0x8CA6 /* GL_DRAW_FRAMEBUFFER_BINDING */: return "GL_DRAW_FRAMEBUFFER_BINDING (0x8CA6)"; +case 0x8CA6 /* GL_FRAMEBUFFER_BINDING */: return "GL_FRAMEBUFFER_BINDING (0x8CA6)"; +case 0x8CA7 /* GL_RENDERBUFFER_BINDING */: return "GL_RENDERBUFFER_BINDING (0x8CA7)"; +case 0x8CA8 /* GL_READ_FRAMEBUFFER */: return "GL_READ_FRAMEBUFFER (0x8CA8)"; +case 0x8CA9 /* GL_DRAW_FRAMEBUFFER */: return "GL_DRAW_FRAMEBUFFER (0x8CA9)"; +case 0x8CAA /* GL_READ_FRAMEBUFFER_BINDING */: return "GL_READ_FRAMEBUFFER_BINDING (0x8CAA)"; +case 0x8CAB /* GL_RENDERBUFFER_SAMPLES */: return "GL_RENDERBUFFER_SAMPLES (0x8CAB)"; +case 0x8CD0 /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */: return "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE (0x8CD0)"; +case 0x8CD1 /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */: return "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME (0x8CD1)"; +case 0x8CD2 /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL (0x8CD2)"; +case 0x8CD3 /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE (0x8CD3)"; +case 0x8CD4 /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER (0x8CD4)"; +case 0x8CD5 /* GL_FRAMEBUFFER_COMPLETE */: return "GL_FRAMEBUFFER_COMPLETE (0x8CD5)"; +case 0x8CD6 /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */: return "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT (0x8CD6)"; +case 0x8CD7 /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */: return "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT (0x8CD7)"; +case 0x8CDB /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */: return "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER (0x8CDB)"; +case 0x8CDC /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */: return "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER (0x8CDC)"; +case 0x8CDD /* GL_FRAMEBUFFER_UNSUPPORTED */: return "GL_FRAMEBUFFER_UNSUPPORTED (0x8CDD)"; +case 0x8CDF /* GL_MAX_COLOR_ATTACHMENTS */: return "GL_MAX_COLOR_ATTACHMENTS (0x8CDF)"; +case 0x8CE0 /* GL_COLOR_ATTACHMENT0 */: return "GL_COLOR_ATTACHMENT0 (0x8CE0)"; +case 0x8CE1 /* GL_COLOR_ATTACHMENT1 */: return "GL_COLOR_ATTACHMENT1 (0x8CE1)"; +case 0x8CE2 /* GL_COLOR_ATTACHMENT2 */: return "GL_COLOR_ATTACHMENT2 (0x8CE2)"; +case 0x8CE3 /* GL_COLOR_ATTACHMENT3 */: return "GL_COLOR_ATTACHMENT3 (0x8CE3)"; +case 0x8CE4 /* GL_COLOR_ATTACHMENT4 */: return "GL_COLOR_ATTACHMENT4 (0x8CE4)"; +case 0x8CE5 /* GL_COLOR_ATTACHMENT5 */: return "GL_COLOR_ATTACHMENT5 (0x8CE5)"; +case 0x8CE6 /* GL_COLOR_ATTACHMENT6 */: return "GL_COLOR_ATTACHMENT6 (0x8CE6)"; +case 0x8CE7 /* GL_COLOR_ATTACHMENT7 */: return "GL_COLOR_ATTACHMENT7 (0x8CE7)"; +case 0x8CE8 /* GL_COLOR_ATTACHMENT8 */: return "GL_COLOR_ATTACHMENT8 (0x8CE8)"; +case 0x8CE9 /* GL_COLOR_ATTACHMENT9 */: return "GL_COLOR_ATTACHMENT9 (0x8CE9)"; +case 0x8CEA /* GL_COLOR_ATTACHMENT10 */: return "GL_COLOR_ATTACHMENT10 (0x8CEA)"; +case 0x8CEB /* GL_COLOR_ATTACHMENT11 */: return "GL_COLOR_ATTACHMENT11 (0x8CEB)"; +case 0x8CEC /* GL_COLOR_ATTACHMENT12 */: return "GL_COLOR_ATTACHMENT12 (0x8CEC)"; +case 0x8CED /* GL_COLOR_ATTACHMENT13 */: return "GL_COLOR_ATTACHMENT13 (0x8CED)"; +case 0x8CEE /* GL_COLOR_ATTACHMENT14 */: return "GL_COLOR_ATTACHMENT14 (0x8CEE)"; +case 0x8CEF /* GL_COLOR_ATTACHMENT15 */: return "GL_COLOR_ATTACHMENT15 (0x8CEF)"; +case 0x8D00 /* GL_DEPTH_ATTACHMENT */: return "GL_DEPTH_ATTACHMENT (0x8D00)"; +case 0x8D20 /* GL_STENCIL_ATTACHMENT */: return "GL_STENCIL_ATTACHMENT (0x8D20)"; +case 0x8D40 /* GL_FRAMEBUFFER */: return "GL_FRAMEBUFFER (0x8D40)"; +case 0x8D41 /* GL_RENDERBUFFER */: return "GL_RENDERBUFFER (0x8D41)"; +case 0x8D42 /* GL_RENDERBUFFER_WIDTH */: return "GL_RENDERBUFFER_WIDTH (0x8D42)"; +case 0x8D43 /* GL_RENDERBUFFER_HEIGHT */: return "GL_RENDERBUFFER_HEIGHT (0x8D43)"; +case 0x8D44 /* GL_RENDERBUFFER_INTERNAL_FORMAT */: return "GL_RENDERBUFFER_INTERNAL_FORMAT (0x8D44)"; +case 0x8D46 /* GL_STENCIL_INDEX1 */: return "GL_STENCIL_INDEX1 (0x8D46)"; +case 0x8D47 /* GL_STENCIL_INDEX4 */: return "GL_STENCIL_INDEX4 (0x8D47)"; +case 0x8D48 /* GL_STENCIL_INDEX8 */: return "GL_STENCIL_INDEX8 (0x8D48)"; +case 0x8D49 /* GL_STENCIL_INDEX16 */: return "GL_STENCIL_INDEX16 (0x8D49)"; +case 0x8D50 /* GL_RENDERBUFFER_RED_SIZE */: return "GL_RENDERBUFFER_RED_SIZE (0x8D50)"; +case 0x8D51 /* GL_RENDERBUFFER_GREEN_SIZE */: return "GL_RENDERBUFFER_GREEN_SIZE (0x8D51)"; +case 0x8D52 /* GL_RENDERBUFFER_BLUE_SIZE */: return "GL_RENDERBUFFER_BLUE_SIZE (0x8D52)"; +case 0x8D53 /* GL_RENDERBUFFER_ALPHA_SIZE */: return "GL_RENDERBUFFER_ALPHA_SIZE (0x8D53)"; +case 0x8D54 /* GL_RENDERBUFFER_DEPTH_SIZE */: return "GL_RENDERBUFFER_DEPTH_SIZE (0x8D54)"; +case 0x8D55 /* GL_RENDERBUFFER_STENCIL_SIZE */: return "GL_RENDERBUFFER_STENCIL_SIZE (0x8D55)"; +case 0x8D56 /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */: return "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE (0x8D56)"; +case 0x8D57 /* GL_MAX_SAMPLES */: return "GL_MAX_SAMPLES (0x8D57)"; + + + + + + + +/* ------------------------ GL_ARB_framebuffer_sRGB ------------------------ */ + + + + +case 0x8DB9 /* GL_FRAMEBUFFER_SRGB */: return "GL_FRAMEBUFFER_SRGB (0x8DB9)"; + + + + + +/* ------------------------ GL_ARB_geometry_shader4 ------------------------ */ + + + + +//case 0xA /* GL_LINES_ADJACENCY_ARB */: return "GL_LINES_ADJACENCY_ARB (0xA)"; +//case 0xB /* GL_LINE_STRIP_ADJACENCY_ARB */: return "GL_LINE_STRIP_ADJACENCY_ARB (0xB)"; +//case 0xC /* GL_TRIANGLES_ADJACENCY_ARB */: return "GL_TRIANGLES_ADJACENCY_ARB (0xC)"; +//case 0xD /* GL_TRIANGLE_STRIP_ADJACENCY_ARB */: return "GL_TRIANGLE_STRIP_ADJACENCY_ARB (0xD)"; +//case 0x8C29 /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB */: return "GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB (0x8C29)"; +//case 0x8CD4 /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER (0x8CD4)"; +//case 0x8DA7 /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB */: return "GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB (0x8DA7)"; +//case 0x8DA8 /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB */: return "GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB (0x8DA8)"; +case 0x8DA9 /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB */: return "GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB (0x8DA9)"; +//case 0x8DD9 /* GL_GEOMETRY_SHADER_ARB */: return "GL_GEOMETRY_SHADER_ARB (0x8DD9)"; +case 0x8DDA /* GL_GEOMETRY_VERTICES_OUT_ARB */: return "GL_GEOMETRY_VERTICES_OUT_ARB (0x8DDA)"; +case 0x8DDB /* GL_GEOMETRY_INPUT_TYPE_ARB */: return "GL_GEOMETRY_INPUT_TYPE_ARB (0x8DDB)"; +case 0x8DDC /* GL_GEOMETRY_OUTPUT_TYPE_ARB */: return "GL_GEOMETRY_OUTPUT_TYPE_ARB (0x8DDC)"; +case 0x8DDD /* GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB */: return "GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB (0x8DDD)"; +case 0x8DDE /* GL_MAX_VERTEX_VARYING_COMPONENTS_ARB */: return "GL_MAX_VERTEX_VARYING_COMPONENTS_ARB (0x8DDE)"; +//case 0x8DDF /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB */: return "GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB (0x8DDF)"; +//case 0x8DE0 /* GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB */: return "GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB (0x8DE0)"; +//case 0x8DE1 /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB */: return "GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB (0x8DE1)"; + + + + + +/* ----------------------- GL_ARB_get_program_binary ----------------------- */ + + + + +case 0x8257 /* GL_PROGRAM_BINARY_RETRIEVABLE_HINT */: return "GL_PROGRAM_BINARY_RETRIEVABLE_HINT (0x8257)"; +case 0x8741 /* GL_PROGRAM_BINARY_LENGTH */: return "GL_PROGRAM_BINARY_LENGTH (0x8741)"; +case 0x87FE /* GL_NUM_PROGRAM_BINARY_FORMATS */: return "GL_NUM_PROGRAM_BINARY_FORMATS (0x87FE)"; +case 0x87FF /* GL_PROGRAM_BINARY_FORMATS */: return "GL_PROGRAM_BINARY_FORMATS (0x87FF)"; + + + +/* --------------------------- GL_ARB_gpu_shader5 -------------------------- */ + + + + +//case 0x887F /* GL_GEOMETRY_SHADER_INVOCATIONS */: return "GL_GEOMETRY_SHADER_INVOCATIONS (0x887F)"; +//case 0x8E5A /* GL_MAX_GEOMETRY_SHADER_INVOCATIONS */: return "GL_MAX_GEOMETRY_SHADER_INVOCATIONS (0x8E5A)"; +//case 0x8E5B /* GL_MIN_FRAGMENT_INTERPOLATION_OFFSET */: return "GL_MIN_FRAGMENT_INTERPOLATION_OFFSET (0x8E5B)"; +//case 0x8E5C /* GL_MAX_FRAGMENT_INTERPOLATION_OFFSET */: return "GL_MAX_FRAGMENT_INTERPOLATION_OFFSET (0x8E5C)"; +//case 0x8E5D /* GL_FRAGMENT_INTERPOLATION_OFFSET_BITS */: return "GL_FRAGMENT_INTERPOLATION_OFFSET_BITS (0x8E5D)"; +case 0x8E71 /* GL_MAX_VERTEX_STREAMS */: return "GL_MAX_VERTEX_STREAMS (0x8E71)"; + + + + + +/* ------------------------- GL_ARB_gpu_shader_fp64 ------------------------ */ + + + + +case 0x8F46 /* GL_DOUBLE_MAT2 */: return "GL_DOUBLE_MAT2 (0x8F46)"; +case 0x8F47 /* GL_DOUBLE_MAT3 */: return "GL_DOUBLE_MAT3 (0x8F47)"; +case 0x8F48 /* GL_DOUBLE_MAT4 */: return "GL_DOUBLE_MAT4 (0x8F48)"; +case 0x8F49 /* GL_DOUBLE_MAT2x3 */: return "GL_DOUBLE_MAT2x3 (0x8F49)"; +case 0x8F4A /* GL_DOUBLE_MAT2x4 */: return "GL_DOUBLE_MAT2x4 (0x8F4A)"; +case 0x8F4B /* GL_DOUBLE_MAT3x2 */: return "GL_DOUBLE_MAT3x2 (0x8F4B)"; +case 0x8F4C /* GL_DOUBLE_MAT3x4 */: return "GL_DOUBLE_MAT3x4 (0x8F4C)"; +case 0x8F4D /* GL_DOUBLE_MAT4x2 */: return "GL_DOUBLE_MAT4x2 (0x8F4D)"; +case 0x8F4E /* GL_DOUBLE_MAT4x3 */: return "GL_DOUBLE_MAT4x3 (0x8F4E)"; +case 0x8FFC /* GL_DOUBLE_VEC2 */: return "GL_DOUBLE_VEC2 (0x8FFC)"; +case 0x8FFD /* GL_DOUBLE_VEC3 */: return "GL_DOUBLE_VEC3 (0x8FFD)"; +case 0x8FFE /* GL_DOUBLE_VEC4 */: return "GL_DOUBLE_VEC4 (0x8FFE)"; + + + +/* ------------------------ GL_ARB_half_float_pixel ------------------------ */ + + + + +//case 0x140B /* GL_HALF_FLOAT_ARB */: return "GL_HALF_FLOAT_ARB (0x140B)"; + + + + + +/* ------------------------ GL_ARB_half_float_vertex ----------------------- */ + + + + +case 0x140B /* GL_HALF_FLOAT */: return "GL_HALF_FLOAT (0x140B)"; + + + + + +/* ----------------------------- GL_ARB_imaging ---------------------------- */ + + + + +case 0x8001 /* GL_CONSTANT_COLOR */: return "GL_CONSTANT_COLOR (0x8001)"; +case 0x8002 /* GL_ONE_MINUS_CONSTANT_COLOR */: return "GL_ONE_MINUS_CONSTANT_COLOR (0x8002)"; +case 0x8003 /* GL_CONSTANT_ALPHA */: return "GL_CONSTANT_ALPHA (0x8003)"; +case 0x8004 /* GL_ONE_MINUS_CONSTANT_ALPHA */: return "GL_ONE_MINUS_CONSTANT_ALPHA (0x8004)"; +case 0x8005 /* GL_BLEND_COLOR */: return "GL_BLEND_COLOR (0x8005)"; +case 0x8006 /* GL_FUNC_ADD */: return "GL_FUNC_ADD (0x8006)"; +case 0x8007 /* GL_MIN */: return "GL_MIN (0x8007)"; +case 0x8008 /* GL_MAX */: return "GL_MAX (0x8008)"; +case 0x8009 /* GL_BLEND_EQUATION */: return "GL_BLEND_EQUATION (0x8009)"; +case 0x800A /* GL_FUNC_SUBTRACT */: return "GL_FUNC_SUBTRACT (0x800A)"; +case 0x800B /* GL_FUNC_REVERSE_SUBTRACT */: return "GL_FUNC_REVERSE_SUBTRACT (0x800B)"; +case 0x8010 /* GL_CONVOLUTION_1D */: return "GL_CONVOLUTION_1D (0x8010)"; +case 0x8011 /* GL_CONVOLUTION_2D */: return "GL_CONVOLUTION_2D (0x8011)"; +case 0x8012 /* GL_SEPARABLE_2D */: return "GL_SEPARABLE_2D (0x8012)"; +case 0x8013 /* GL_CONVOLUTION_BORDER_MODE */: return "GL_CONVOLUTION_BORDER_MODE (0x8013)"; +case 0x8014 /* GL_CONVOLUTION_FILTER_SCALE */: return "GL_CONVOLUTION_FILTER_SCALE (0x8014)"; +case 0x8015 /* GL_CONVOLUTION_FILTER_BIAS */: return "GL_CONVOLUTION_FILTER_BIAS (0x8015)"; +case 0x8016 /* GL_REDUCE */: return "GL_REDUCE (0x8016)"; +case 0x8017 /* GL_CONVOLUTION_FORMAT */: return "GL_CONVOLUTION_FORMAT (0x8017)"; +case 0x8018 /* GL_CONVOLUTION_WIDTH */: return "GL_CONVOLUTION_WIDTH (0x8018)"; +case 0x8019 /* GL_CONVOLUTION_HEIGHT */: return "GL_CONVOLUTION_HEIGHT (0x8019)"; +case 0x801A /* GL_MAX_CONVOLUTION_WIDTH */: return "GL_MAX_CONVOLUTION_WIDTH (0x801A)"; +case 0x801B /* GL_MAX_CONVOLUTION_HEIGHT */: return "GL_MAX_CONVOLUTION_HEIGHT (0x801B)"; +case 0x801C /* GL_POST_CONVOLUTION_RED_SCALE */: return "GL_POST_CONVOLUTION_RED_SCALE (0x801C)"; +case 0x801D /* GL_POST_CONVOLUTION_GREEN_SCALE */: return "GL_POST_CONVOLUTION_GREEN_SCALE (0x801D)"; +case 0x801E /* GL_POST_CONVOLUTION_BLUE_SCALE */: return "GL_POST_CONVOLUTION_BLUE_SCALE (0x801E)"; +case 0x801F /* GL_POST_CONVOLUTION_ALPHA_SCALE */: return "GL_POST_CONVOLUTION_ALPHA_SCALE (0x801F)"; +case 0x8020 /* GL_POST_CONVOLUTION_RED_BIAS */: return "GL_POST_CONVOLUTION_RED_BIAS (0x8020)"; +case 0x8021 /* GL_POST_CONVOLUTION_GREEN_BIAS */: return "GL_POST_CONVOLUTION_GREEN_BIAS (0x8021)"; +case 0x8022 /* GL_POST_CONVOLUTION_BLUE_BIAS */: return "GL_POST_CONVOLUTION_BLUE_BIAS (0x8022)"; +case 0x8023 /* GL_POST_CONVOLUTION_ALPHA_BIAS */: return "GL_POST_CONVOLUTION_ALPHA_BIAS (0x8023)"; +case 0x8024 /* GL_HISTOGRAM */: return "GL_HISTOGRAM (0x8024)"; +case 0x8025 /* GL_PROXY_HISTOGRAM */: return "GL_PROXY_HISTOGRAM (0x8025)"; +case 0x8026 /* GL_HISTOGRAM_WIDTH */: return "GL_HISTOGRAM_WIDTH (0x8026)"; +case 0x8027 /* GL_HISTOGRAM_FORMAT */: return "GL_HISTOGRAM_FORMAT (0x8027)"; +case 0x8028 /* GL_HISTOGRAM_RED_SIZE */: return "GL_HISTOGRAM_RED_SIZE (0x8028)"; +case 0x8029 /* GL_HISTOGRAM_GREEN_SIZE */: return "GL_HISTOGRAM_GREEN_SIZE (0x8029)"; +case 0x802A /* GL_HISTOGRAM_BLUE_SIZE */: return "GL_HISTOGRAM_BLUE_SIZE (0x802A)"; +case 0x802B /* GL_HISTOGRAM_ALPHA_SIZE */: return "GL_HISTOGRAM_ALPHA_SIZE (0x802B)"; +case 0x802C /* GL_HISTOGRAM_LUMINANCE_SIZE */: return "GL_HISTOGRAM_LUMINANCE_SIZE (0x802C)"; +case 0x802D /* GL_HISTOGRAM_SINK */: return "GL_HISTOGRAM_SINK (0x802D)"; +case 0x802E /* GL_MINMAX */: return "GL_MINMAX (0x802E)"; +case 0x802F /* GL_MINMAX_FORMAT */: return "GL_MINMAX_FORMAT (0x802F)"; +case 0x8030 /* GL_MINMAX_SINK */: return "GL_MINMAX_SINK (0x8030)"; +case 0x8031 /* GL_TABLE_TOO_LARGE */: return "GL_TABLE_TOO_LARGE (0x8031)"; +case 0x80B1 /* GL_COLOR_MATRIX */: return "GL_COLOR_MATRIX (0x80B1)"; +case 0x80B2 /* GL_COLOR_MATRIX_STACK_DEPTH */: return "GL_COLOR_MATRIX_STACK_DEPTH (0x80B2)"; +case 0x80B3 /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */: return "GL_MAX_COLOR_MATRIX_STACK_DEPTH (0x80B3)"; +case 0x80B4 /* GL_POST_COLOR_MATRIX_RED_SCALE */: return "GL_POST_COLOR_MATRIX_RED_SCALE (0x80B4)"; +case 0x80B5 /* GL_POST_COLOR_MATRIX_GREEN_SCALE */: return "GL_POST_COLOR_MATRIX_GREEN_SCALE (0x80B5)"; +case 0x80B6 /* GL_POST_COLOR_MATRIX_BLUE_SCALE */: return "GL_POST_COLOR_MATRIX_BLUE_SCALE (0x80B6)"; +case 0x80B7 /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */: return "GL_POST_COLOR_MATRIX_ALPHA_SCALE (0x80B7)"; +case 0x80B8 /* GL_POST_COLOR_MATRIX_RED_BIAS */: return "GL_POST_COLOR_MATRIX_RED_BIAS (0x80B8)"; +case 0x80B9 /* GL_POST_COLOR_MATRIX_GREEN_BIAS */: return "GL_POST_COLOR_MATRIX_GREEN_BIAS (0x80B9)"; +case 0x80BA /* GL_POST_COLOR_MATRIX_BLUE_BIAS */: return "GL_POST_COLOR_MATRIX_BLUE_BIAS (0x80BA)"; +case 0x80BB /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */: return "GL_POST_COLOR_MATRIX_ALPHA_BIAS (0x80BB)"; +case 0x80D0 /* GL_COLOR_TABLE */: return "GL_COLOR_TABLE (0x80D0)"; +case 0x80D1 /* GL_POST_CONVOLUTION_COLOR_TABLE */: return "GL_POST_CONVOLUTION_COLOR_TABLE (0x80D1)"; +case 0x80D2 /* GL_POST_COLOR_MATRIX_COLOR_TABLE */: return "GL_POST_COLOR_MATRIX_COLOR_TABLE (0x80D2)"; +case 0x80D3 /* GL_PROXY_COLOR_TABLE */: return "GL_PROXY_COLOR_TABLE (0x80D3)"; +case 0x80D4 /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */: return "GL_PROXY_POST_CONVOLUTION_COLOR_TABLE (0x80D4)"; +case 0x80D5 /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */: return "GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE (0x80D5)"; +case 0x80D6 /* GL_COLOR_TABLE_SCALE */: return "GL_COLOR_TABLE_SCALE (0x80D6)"; +case 0x80D7 /* GL_COLOR_TABLE_BIAS */: return "GL_COLOR_TABLE_BIAS (0x80D7)"; +case 0x80D8 /* GL_COLOR_TABLE_FORMAT */: return "GL_COLOR_TABLE_FORMAT (0x80D8)"; +case 0x80D9 /* GL_COLOR_TABLE_WIDTH */: return "GL_COLOR_TABLE_WIDTH (0x80D9)"; +case 0x80DA /* GL_COLOR_TABLE_RED_SIZE */: return "GL_COLOR_TABLE_RED_SIZE (0x80DA)"; +case 0x80DB /* GL_COLOR_TABLE_GREEN_SIZE */: return "GL_COLOR_TABLE_GREEN_SIZE (0x80DB)"; +case 0x80DC /* GL_COLOR_TABLE_BLUE_SIZE */: return "GL_COLOR_TABLE_BLUE_SIZE (0x80DC)"; +case 0x80DD /* GL_COLOR_TABLE_ALPHA_SIZE */: return "GL_COLOR_TABLE_ALPHA_SIZE (0x80DD)"; +case 0x80DE /* GL_COLOR_TABLE_LUMINANCE_SIZE */: return "GL_COLOR_TABLE_LUMINANCE_SIZE (0x80DE)"; +case 0x80DF /* GL_COLOR_TABLE_INTENSITY_SIZE */: return "GL_COLOR_TABLE_INTENSITY_SIZE (0x80DF)"; +case 0x8150 /* GL_IGNORE_BORDER */: return "GL_IGNORE_BORDER (0x8150)"; +case 0x8151 /* GL_CONSTANT_BORDER */: return "GL_CONSTANT_BORDER (0x8151)"; +case 0x8152 /* GL_WRAP_BORDER */: return "GL_WRAP_BORDER (0x8152)"; +case 0x8153 /* GL_REPLICATE_BORDER */: return "GL_REPLICATE_BORDER (0x8153)"; +case 0x8154 /* GL_CONVOLUTION_BORDER_COLOR */: return "GL_CONVOLUTION_BORDER_COLOR (0x8154)"; + +/* ------------------------ GL_ARB_instanced_arrays ------------------------ */ + + + + +//case 0x88FE /* GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB */: return "GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB (0x88FE)"; + + + +/* ---------------------- GL_ARB_internalformat_query ---------------------- */ + + + + +case 0x9380 /* GL_NUM_SAMPLE_COUNTS */: return "GL_NUM_SAMPLE_COUNTS (0x9380)";/* ---------------------- GL_ARB_internalformat_query2 --------------------- */ + + + + +//case 0x0DE0 /* GL_TEXTURE_1D */: return "GL_TEXTURE_1D (0x0DE0)"; +//case 0x0DE1 /* GL_TEXTURE_2D */: return "GL_TEXTURE_2D (0x0DE1)"; +//case 0x806F /* GL_TEXTURE_3D */: return "GL_TEXTURE_3D (0x806F)"; +//case 0x80A9 /* GL_SAMPLES */: return "GL_SAMPLES (0x80A9)"; +case 0x826F /* GL_INTERNALFORMAT_SUPPORTED */: return "GL_INTERNALFORMAT_SUPPORTED (0x826F)"; +case 0x8270 /* GL_INTERNALFORMAT_PREFERRED */: return "GL_INTERNALFORMAT_PREFERRED (0x8270)"; +case 0x8271 /* GL_INTERNALFORMAT_RED_SIZE */: return "GL_INTERNALFORMAT_RED_SIZE (0x8271)"; +case 0x8272 /* GL_INTERNALFORMAT_GREEN_SIZE */: return "GL_INTERNALFORMAT_GREEN_SIZE (0x8272)"; +case 0x8273 /* GL_INTERNALFORMAT_BLUE_SIZE */: return "GL_INTERNALFORMAT_BLUE_SIZE (0x8273)"; +case 0x8274 /* GL_INTERNALFORMAT_ALPHA_SIZE */: return "GL_INTERNALFORMAT_ALPHA_SIZE (0x8274)"; +case 0x8275 /* GL_INTERNALFORMAT_DEPTH_SIZE */: return "GL_INTERNALFORMAT_DEPTH_SIZE (0x8275)"; +case 0x8276 /* GL_INTERNALFORMAT_STENCIL_SIZE */: return "GL_INTERNALFORMAT_STENCIL_SIZE (0x8276)"; +case 0x8277 /* GL_INTERNALFORMAT_SHARED_SIZE */: return "GL_INTERNALFORMAT_SHARED_SIZE (0x8277)"; +case 0x8278 /* GL_INTERNALFORMAT_RED_TYPE */: return "GL_INTERNALFORMAT_RED_TYPE (0x8278)"; +case 0x8279 /* GL_INTERNALFORMAT_GREEN_TYPE */: return "GL_INTERNALFORMAT_GREEN_TYPE (0x8279)"; +case 0x827A /* GL_INTERNALFORMAT_BLUE_TYPE */: return "GL_INTERNALFORMAT_BLUE_TYPE (0x827A)"; +case 0x827B /* GL_INTERNALFORMAT_ALPHA_TYPE */: return "GL_INTERNALFORMAT_ALPHA_TYPE (0x827B)"; +case 0x827C /* GL_INTERNALFORMAT_DEPTH_TYPE */: return "GL_INTERNALFORMAT_DEPTH_TYPE (0x827C)"; +case 0x827D /* GL_INTERNALFORMAT_STENCIL_TYPE */: return "GL_INTERNALFORMAT_STENCIL_TYPE (0x827D)"; +case 0x827E /* GL_MAX_WIDTH */: return "GL_MAX_WIDTH (0x827E)"; +case 0x827F /* GL_MAX_HEIGHT */: return "GL_MAX_HEIGHT (0x827F)"; +case 0x8280 /* GL_MAX_DEPTH */: return "GL_MAX_DEPTH (0x8280)"; +case 0x8281 /* GL_MAX_LAYERS */: return "GL_MAX_LAYERS (0x8281)"; +case 0x8282 /* GL_MAX_COMBINED_DIMENSIONS */: return "GL_MAX_COMBINED_DIMENSIONS (0x8282)"; +case 0x8283 /* GL_COLOR_COMPONENTS */: return "GL_COLOR_COMPONENTS (0x8283)"; +case 0x8284 /* GL_DEPTH_COMPONENTS */: return "GL_DEPTH_COMPONENTS (0x8284)"; +case 0x8285 /* GL_STENCIL_COMPONENTS */: return "GL_STENCIL_COMPONENTS (0x8285)"; +case 0x8286 /* GL_COLOR_RENDERABLE */: return "GL_COLOR_RENDERABLE (0x8286)"; +case 0x8287 /* GL_DEPTH_RENDERABLE */: return "GL_DEPTH_RENDERABLE (0x8287)"; +case 0x8288 /* GL_STENCIL_RENDERABLE */: return "GL_STENCIL_RENDERABLE (0x8288)"; +case 0x8289 /* GL_FRAMEBUFFER_RENDERABLE */: return "GL_FRAMEBUFFER_RENDERABLE (0x8289)"; +case 0x828A /* GL_FRAMEBUFFER_RENDERABLE_LAYERED */: return "GL_FRAMEBUFFER_RENDERABLE_LAYERED (0x828A)"; +case 0x828B /* GL_FRAMEBUFFER_BLEND */: return "GL_FRAMEBUFFER_BLEND (0x828B)"; +case 0x828C /* GL_READ_PIXELS */: return "GL_READ_PIXELS (0x828C)"; +case 0x828D /* GL_READ_PIXELS_FORMAT */: return "GL_READ_PIXELS_FORMAT (0x828D)"; +case 0x828E /* GL_READ_PIXELS_TYPE */: return "GL_READ_PIXELS_TYPE (0x828E)"; +case 0x828F /* GL_TEXTURE_IMAGE_FORMAT */: return "GL_TEXTURE_IMAGE_FORMAT (0x828F)"; +case 0x8290 /* GL_TEXTURE_IMAGE_TYPE */: return "GL_TEXTURE_IMAGE_TYPE (0x8290)"; +case 0x8291 /* GL_GET_TEXTURE_IMAGE_FORMAT */: return "GL_GET_TEXTURE_IMAGE_FORMAT (0x8291)"; +case 0x8292 /* GL_GET_TEXTURE_IMAGE_TYPE */: return "GL_GET_TEXTURE_IMAGE_TYPE (0x8292)"; +case 0x8293 /* GL_MIPMAP */: return "GL_MIPMAP (0x8293)"; +case 0x8294 /* GL_MANUAL_GENERATE_MIPMAP */: return "GL_MANUAL_GENERATE_MIPMAP (0x8294)"; +case 0x8295 /* GL_AUTO_GENERATE_MIPMAP */: return "GL_AUTO_GENERATE_MIPMAP (0x8295)"; +case 0x8296 /* GL_COLOR_ENCODING */: return "GL_COLOR_ENCODING (0x8296)"; +case 0x8297 /* GL_SRGB_READ */: return "GL_SRGB_READ (0x8297)"; +case 0x8298 /* GL_SRGB_WRITE */: return "GL_SRGB_WRITE (0x8298)"; +case 0x8299 /* GL_SRGB_DECODE_ARB */: return "GL_SRGB_DECODE_ARB (0x8299)"; +case 0x829A /* GL_FILTER */: return "GL_FILTER (0x829A)"; +case 0x829B /* GL_VERTEX_TEXTURE */: return "GL_VERTEX_TEXTURE (0x829B)"; +case 0x829C /* GL_TESS_CONTROL_TEXTURE */: return "GL_TESS_CONTROL_TEXTURE (0x829C)"; +case 0x829D /* GL_TESS_EVALUATION_TEXTURE */: return "GL_TESS_EVALUATION_TEXTURE (0x829D)"; +case 0x829E /* GL_GEOMETRY_TEXTURE */: return "GL_GEOMETRY_TEXTURE (0x829E)"; +case 0x829F /* GL_FRAGMENT_TEXTURE */: return "GL_FRAGMENT_TEXTURE (0x829F)"; +case 0x82A0 /* GL_COMPUTE_TEXTURE */: return "GL_COMPUTE_TEXTURE (0x82A0)"; +case 0x82A1 /* GL_TEXTURE_SHADOW */: return "GL_TEXTURE_SHADOW (0x82A1)"; +case 0x82A2 /* GL_TEXTURE_GATHER */: return "GL_TEXTURE_GATHER (0x82A2)"; +case 0x82A3 /* GL_TEXTURE_GATHER_SHADOW */: return "GL_TEXTURE_GATHER_SHADOW (0x82A3)"; +case 0x82A4 /* GL_SHADER_IMAGE_LOAD */: return "GL_SHADER_IMAGE_LOAD (0x82A4)"; +case 0x82A5 /* GL_SHADER_IMAGE_STORE */: return "GL_SHADER_IMAGE_STORE (0x82A5)"; +case 0x82A6 /* GL_SHADER_IMAGE_ATOMIC */: return "GL_SHADER_IMAGE_ATOMIC (0x82A6)"; +case 0x82A7 /* GL_IMAGE_TEXEL_SIZE */: return "GL_IMAGE_TEXEL_SIZE (0x82A7)"; +case 0x82A8 /* GL_IMAGE_COMPATIBILITY_CLASS */: return "GL_IMAGE_COMPATIBILITY_CLASS (0x82A8)"; +case 0x82A9 /* GL_IMAGE_PIXEL_FORMAT */: return "GL_IMAGE_PIXEL_FORMAT (0x82A9)"; +case 0x82AA /* GL_IMAGE_PIXEL_TYPE */: return "GL_IMAGE_PIXEL_TYPE (0x82AA)"; +case 0x82AC /* GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST */: return "GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST (0x82AC)"; +case 0x82AD /* GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST */: return "GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST (0x82AD)"; +case 0x82AE /* GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE */: return "GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE (0x82AE)"; +case 0x82AF /* GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE */: return "GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE (0x82AF)"; +case 0x82B1 /* GL_TEXTURE_COMPRESSED_BLOCK_WIDTH */: return "GL_TEXTURE_COMPRESSED_BLOCK_WIDTH (0x82B1)"; +case 0x82B2 /* GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT */: return "GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT (0x82B2)"; +case 0x82B3 /* GL_TEXTURE_COMPRESSED_BLOCK_SIZE */: return "GL_TEXTURE_COMPRESSED_BLOCK_SIZE (0x82B3)"; +case 0x82B4 /* GL_CLEAR_BUFFER */: return "GL_CLEAR_BUFFER (0x82B4)"; +case 0x82B5 /* GL_TEXTURE_VIEW */: return "GL_TEXTURE_VIEW (0x82B5)"; +case 0x82B6 /* GL_VIEW_COMPATIBILITY_CLASS */: return "GL_VIEW_COMPATIBILITY_CLASS (0x82B6)"; +case 0x82B7 /* GL_FULL_SUPPORT */: return "GL_FULL_SUPPORT (0x82B7)"; +case 0x82B8 /* GL_CAVEAT_SUPPORT */: return "GL_CAVEAT_SUPPORT (0x82B8)"; +case 0x82B9 /* GL_IMAGE_CLASS_4_X_32 */: return "GL_IMAGE_CLASS_4_X_32 (0x82B9)"; +case 0x82BA /* GL_IMAGE_CLASS_2_X_32 */: return "GL_IMAGE_CLASS_2_X_32 (0x82BA)"; +case 0x82BB /* GL_IMAGE_CLASS_1_X_32 */: return "GL_IMAGE_CLASS_1_X_32 (0x82BB)"; +case 0x82BC /* GL_IMAGE_CLASS_4_X_16 */: return "GL_IMAGE_CLASS_4_X_16 (0x82BC)"; +case 0x82BD /* GL_IMAGE_CLASS_2_X_16 */: return "GL_IMAGE_CLASS_2_X_16 (0x82BD)"; +case 0x82BE /* GL_IMAGE_CLASS_1_X_16 */: return "GL_IMAGE_CLASS_1_X_16 (0x82BE)"; +case 0x82BF /* GL_IMAGE_CLASS_4_X_8 */: return "GL_IMAGE_CLASS_4_X_8 (0x82BF)"; +case 0x82C0 /* GL_IMAGE_CLASS_2_X_8 */: return "GL_IMAGE_CLASS_2_X_8 (0x82C0)"; +case 0x82C1 /* GL_IMAGE_CLASS_1_X_8 */: return "GL_IMAGE_CLASS_1_X_8 (0x82C1)"; +case 0x82C2 /* GL_IMAGE_CLASS_11_11_10 */: return "GL_IMAGE_CLASS_11_11_10 (0x82C2)"; +case 0x82C3 /* GL_IMAGE_CLASS_10_10_10_2 */: return "GL_IMAGE_CLASS_10_10_10_2 (0x82C3)"; +case 0x82C4 /* GL_VIEW_CLASS_128_BITS */: return "GL_VIEW_CLASS_128_BITS (0x82C4)"; +case 0x82C5 /* GL_VIEW_CLASS_96_BITS */: return "GL_VIEW_CLASS_96_BITS (0x82C5)"; +case 0x82C6 /* GL_VIEW_CLASS_64_BITS */: return "GL_VIEW_CLASS_64_BITS (0x82C6)"; +case 0x82C7 /* GL_VIEW_CLASS_48_BITS */: return "GL_VIEW_CLASS_48_BITS (0x82C7)"; +case 0x82C8 /* GL_VIEW_CLASS_32_BITS */: return "GL_VIEW_CLASS_32_BITS (0x82C8)"; +case 0x82C9 /* GL_VIEW_CLASS_24_BITS */: return "GL_VIEW_CLASS_24_BITS (0x82C9)"; +case 0x82CA /* GL_VIEW_CLASS_16_BITS */: return "GL_VIEW_CLASS_16_BITS (0x82CA)"; +case 0x82CB /* GL_VIEW_CLASS_8_BITS */: return "GL_VIEW_CLASS_8_BITS (0x82CB)"; +case 0x82CC /* GL_VIEW_CLASS_S3TC_DXT1_RGB */: return "GL_VIEW_CLASS_S3TC_DXT1_RGB (0x82CC)"; +case 0x82CD /* GL_VIEW_CLASS_S3TC_DXT1_RGBA */: return "GL_VIEW_CLASS_S3TC_DXT1_RGBA (0x82CD)"; +case 0x82CE /* GL_VIEW_CLASS_S3TC_DXT3_RGBA */: return "GL_VIEW_CLASS_S3TC_DXT3_RGBA (0x82CE)"; +case 0x82CF /* GL_VIEW_CLASS_S3TC_DXT5_RGBA */: return "GL_VIEW_CLASS_S3TC_DXT5_RGBA (0x82CF)"; +case 0x82D0 /* GL_VIEW_CLASS_RGTC1_RED */: return "GL_VIEW_CLASS_RGTC1_RED (0x82D0)"; +case 0x82D1 /* GL_VIEW_CLASS_RGTC2_RG */: return "GL_VIEW_CLASS_RGTC2_RG (0x82D1)"; +case 0x82D2 /* GL_VIEW_CLASS_BPTC_UNORM */: return "GL_VIEW_CLASS_BPTC_UNORM (0x82D2)"; +case 0x82D3 /* GL_VIEW_CLASS_BPTC_FLOAT */: return "GL_VIEW_CLASS_BPTC_FLOAT (0x82D3)"; +//case 0x84F5 /* GL_TEXTURE_RECTANGLE */: return "GL_TEXTURE_RECTANGLE (0x84F5)"; +//case 0x8C18 /* GL_TEXTURE_1D_ARRAY */: return "GL_TEXTURE_1D_ARRAY (0x8C18)"; +//case 0x8C1A /* GL_TEXTURE_2D_ARRAY */: return "GL_TEXTURE_2D_ARRAY (0x8C1A)"; +//case 0x8C2A /* GL_TEXTURE_BUFFER */: return "GL_TEXTURE_BUFFER (0x8C2A)"; +//case 0x8D41 /* GL_RENDERBUFFER */: return "GL_RENDERBUFFER (0x8D41)"; +//case 0x9009 /* GL_TEXTURE_CUBE_MAP_ARRAY */: return "GL_TEXTURE_CUBE_MAP_ARRAY (0x9009)"; +case 0x9100 /* GL_TEXTURE_2D_MULTISAMPLE */: return "GL_TEXTURE_2D_MULTISAMPLE (0x9100)"; +case 0x9102 /* GL_TEXTURE_2D_MULTISAMPLE_ARRAY */: return "GL_TEXTURE_2D_MULTISAMPLE_ARRAY (0x9102)"; +//case 0x9380 /* GL_NUM_SAMPLE_COUNTS */: return "GL_NUM_SAMPLE_COUNTS (0x9380)"; + /* ----------------------- GL_ARB_invalidate_subdata ----------------------- */ + + +/* ---------------------- GL_ARB_map_buffer_alignment ---------------------- */ + + + + +case 0x90BC /* GL_MIN_MAP_BUFFER_ALIGNMENT */: return "GL_MIN_MAP_BUFFER_ALIGNMENT (0x90BC)"; + + + + + +/* ------------------------ GL_ARB_map_buffer_range ------------------------ */ + + + + +//case 0x0001 /* GL_MAP_READ_BIT */: return "GL_MAP_READ_BIT (0x0001)"; +//case 0x0002 /* GL_MAP_WRITE_BIT */: return "GL_MAP_WRITE_BIT (0x0002)"; +//case 0x0004 /* GL_MAP_INVALIDATE_RANGE_BIT */: return "GL_MAP_INVALIDATE_RANGE_BIT (0x0004)"; +//case 0x0008 /* GL_MAP_INVALIDATE_BUFFER_BIT */: return "GL_MAP_INVALIDATE_BUFFER_BIT (0x0008)"; +//case 0x0010 /* GL_MAP_FLUSH_EXPLICIT_BIT */: return "GL_MAP_FLUSH_EXPLICIT_BIT (0x0010)"; +//case 0x0020 /* GL_MAP_UNSYNCHRONIZED_BIT */: return "GL_MAP_UNSYNCHRONIZED_BIT (0x0020)"; + +/* ------------------------- GL_ARB_matrix_palette ------------------------- */ + + + + +case 0x8840 /* GL_MATRIX_PALETTE_ARB */: return "GL_MATRIX_PALETTE_ARB (0x8840)"; +case 0x8841 /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */: return "GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB (0x8841)"; +case 0x8842 /* GL_MAX_PALETTE_MATRICES_ARB */: return "GL_MAX_PALETTE_MATRICES_ARB (0x8842)"; +case 0x8843 /* GL_CURRENT_PALETTE_MATRIX_ARB */: return "GL_CURRENT_PALETTE_MATRIX_ARB (0x8843)"; +case 0x8844 /* GL_MATRIX_INDEX_ARRAY_ARB */: return "GL_MATRIX_INDEX_ARRAY_ARB (0x8844)"; +case 0x8845 /* GL_CURRENT_MATRIX_INDEX_ARB */: return "GL_CURRENT_MATRIX_INDEX_ARB (0x8845)"; +case 0x8846 /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */: return "GL_MATRIX_INDEX_ARRAY_SIZE_ARB (0x8846)"; +case 0x8847 /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */: return "GL_MATRIX_INDEX_ARRAY_TYPE_ARB (0x8847)"; +case 0x8848 /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */: return "GL_MATRIX_INDEX_ARRAY_STRIDE_ARB (0x8848)"; +case 0x8849 /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */: return "GL_MATRIX_INDEX_ARRAY_POINTER_ARB (0x8849)"; + + + + + + + +/* ----------------------- GL_ARB_multi_draw_indirect ---------------------- */ + + + + +/* --------------------------- GL_ARB_multisample -------------------------- */ + + + + +//case 0x809D /* GL_MULTISAMPLE_ARB */: return "GL_MULTISAMPLE_ARB (0x809D)"; +//case 0x809E /* GL_SAMPLE_ALPHA_TO_COVERAGE_ARB */: return "GL_SAMPLE_ALPHA_TO_COVERAGE_ARB (0x809E)"; +//case 0x809F /* GL_SAMPLE_ALPHA_TO_ONE_ARB */: return "GL_SAMPLE_ALPHA_TO_ONE_ARB (0x809F)"; +//case 0x80A0 /* GL_SAMPLE_COVERAGE_ARB */: return "GL_SAMPLE_COVERAGE_ARB (0x80A0)"; +//case 0x80A8 /* GL_SAMPLE_BUFFERS_ARB */: return "GL_SAMPLE_BUFFERS_ARB (0x80A8)"; +//case 0x80A9 /* GL_SAMPLES_ARB */: return "GL_SAMPLES_ARB (0x80A9)"; +//case 0x80AA /* GL_SAMPLE_COVERAGE_VALUE_ARB */: return "GL_SAMPLE_COVERAGE_VALUE_ARB (0x80AA)"; +//case 0x80AB /* GL_SAMPLE_COVERAGE_INVERT_ARB */: return "GL_SAMPLE_COVERAGE_INVERT_ARB (0x80AB)"; +//case 0x20000000 /* GL_MULTISAMPLE_BIT_ARB */: return "GL_MULTISAMPLE_BIT_ARB (0x20000000)";/* -------------------------- GL_ARB_multitexture -------------------------- */ + + + + +//case 0x84C0 /* GL_TEXTURE0_ARB */: return "GL_TEXTURE0_ARB (0x84C0)"; +//case 0x84C1 /* GL_TEXTURE1_ARB */: return "GL_TEXTURE1_ARB (0x84C1)"; +//case 0x84C2 /* GL_TEXTURE2_ARB */: return "GL_TEXTURE2_ARB (0x84C2)"; +//case 0x84C3 /* GL_TEXTURE3_ARB */: return "GL_TEXTURE3_ARB (0x84C3)"; +//case 0x84C4 /* GL_TEXTURE4_ARB */: return "GL_TEXTURE4_ARB (0x84C4)"; +//case 0x84C5 /* GL_TEXTURE5_ARB */: return "GL_TEXTURE5_ARB (0x84C5)"; +//case 0x84C6 /* GL_TEXTURE6_ARB */: return "GL_TEXTURE6_ARB (0x84C6)"; +//case 0x84C7 /* GL_TEXTURE7_ARB */: return "GL_TEXTURE7_ARB (0x84C7)"; +//case 0x84C8 /* GL_TEXTURE8_ARB */: return "GL_TEXTURE8_ARB (0x84C8)"; +//case 0x84C9 /* GL_TEXTURE9_ARB */: return "GL_TEXTURE9_ARB (0x84C9)"; +//case 0x84CA /* GL_TEXTURE10_ARB */: return "GL_TEXTURE10_ARB (0x84CA)"; +//case 0x84CB /* GL_TEXTURE11_ARB */: return "GL_TEXTURE11_ARB (0x84CB)"; +//case 0x84CC /* GL_TEXTURE12_ARB */: return "GL_TEXTURE12_ARB (0x84CC)"; +//case 0x84CD /* GL_TEXTURE13_ARB */: return "GL_TEXTURE13_ARB (0x84CD)"; +//case 0x84CE /* GL_TEXTURE14_ARB */: return "GL_TEXTURE14_ARB (0x84CE)"; +//case 0x84CF /* GL_TEXTURE15_ARB */: return "GL_TEXTURE15_ARB (0x84CF)"; +//case 0x84D0 /* GL_TEXTURE16_ARB */: return "GL_TEXTURE16_ARB (0x84D0)"; +//case 0x84D1 /* GL_TEXTURE17_ARB */: return "GL_TEXTURE17_ARB (0x84D1)"; +//case 0x84D2 /* GL_TEXTURE18_ARB */: return "GL_TEXTURE18_ARB (0x84D2)"; +//case 0x84D3 /* GL_TEXTURE19_ARB */: return "GL_TEXTURE19_ARB (0x84D3)"; +//case 0x84D4 /* GL_TEXTURE20_ARB */: return "GL_TEXTURE20_ARB (0x84D4)"; +//case 0x84D5 /* GL_TEXTURE21_ARB */: return "GL_TEXTURE21_ARB (0x84D5)"; +//case 0x84D6 /* GL_TEXTURE22_ARB */: return "GL_TEXTURE22_ARB (0x84D6)"; +//case 0x84D7 /* GL_TEXTURE23_ARB */: return "GL_TEXTURE23_ARB (0x84D7)"; +//case 0x84D8 /* GL_TEXTURE24_ARB */: return "GL_TEXTURE24_ARB (0x84D8)"; +//case 0x84D9 /* GL_TEXTURE25_ARB */: return "GL_TEXTURE25_ARB (0x84D9)"; +//case 0x84DA /* GL_TEXTURE26_ARB */: return "GL_TEXTURE26_ARB (0x84DA)"; +//case 0x84DB /* GL_TEXTURE27_ARB */: return "GL_TEXTURE27_ARB (0x84DB)"; +//case 0x84DC /* GL_TEXTURE28_ARB */: return "GL_TEXTURE28_ARB (0x84DC)"; +//case 0x84DD /* GL_TEXTURE29_ARB */: return "GL_TEXTURE29_ARB (0x84DD)"; +//case 0x84DE /* GL_TEXTURE30_ARB */: return "GL_TEXTURE30_ARB (0x84DE)"; +//case 0x84DF /* GL_TEXTURE31_ARB */: return "GL_TEXTURE31_ARB (0x84DF)"; +//case 0x84E0 /* GL_ACTIVE_TEXTURE_ARB */: return "GL_ACTIVE_TEXTURE_ARB (0x84E0)"; +//case 0x84E1 /* GL_CLIENT_ACTIVE_TEXTURE_ARB */: return "GL_CLIENT_ACTIVE_TEXTURE_ARB (0x84E1)"; +//case 0x84E2 /* GL_MAX_TEXTURE_UNITS_ARB */: return "GL_MAX_TEXTURE_UNITS_ARB (0x84E2)"; + + + + + +/* ------------------------- GL_ARB_occlusion_query ------------------------ */ + + + + +//case 0x8864 /* GL_QUERY_COUNTER_BITS_ARB */: return "GL_QUERY_COUNTER_BITS_ARB (0x8864)"; +//case 0x8865 /* GL_CURRENT_QUERY_ARB */: return "GL_CURRENT_QUERY_ARB (0x8865)"; +//case 0x8866 /* GL_QUERY_RESULT_ARB */: return "GL_QUERY_RESULT_ARB (0x8866)"; +//case 0x8867 /* GL_QUERY_RESULT_AVAILABLE_ARB */: return "GL_QUERY_RESULT_AVAILABLE_ARB (0x8867)"; +//case 0x8914 /* GL_SAMPLES_PASSED_ARB */: return "GL_SAMPLES_PASSED_ARB (0x8914)"; + + + +/* ------------------------ GL_ARB_occlusion_query2 ------------------------ */ + + + + +case 0x8C2F /* GL_ANY_SAMPLES_PASSED */: return "GL_ANY_SAMPLES_PASSED (0x8C2F)"; + + + + + +/* ----------------------- GL_ARB_pixel_buffer_object ---------------------- */ + + + + +//case 0x88EB /* GL_PIXEL_PACK_BUFFER_ARB */: return "GL_PIXEL_PACK_BUFFER_ARB (0x88EB)"; +//case 0x88EC /* GL_PIXEL_UNPACK_BUFFER_ARB */: return "GL_PIXEL_UNPACK_BUFFER_ARB (0x88EC)"; +//case 0x88ED /* GL_PIXEL_PACK_BUFFER_BINDING_ARB */: return "GL_PIXEL_PACK_BUFFER_BINDING_ARB (0x88ED)"; +//case 0x88EF /* GL_PIXEL_UNPACK_BUFFER_BINDING_ARB */: return "GL_PIXEL_UNPACK_BUFFER_BINDING_ARB (0x88EF)"; + + + + + +/* ------------------------ GL_ARB_point_parameters ------------------------ */ + + + + +//case 0x8126 /* GL_POINT_SIZE_MIN_ARB */: return "GL_POINT_SIZE_MIN_ARB (0x8126)"; +//case 0x8127 /* GL_POINT_SIZE_MAX_ARB */: return "GL_POINT_SIZE_MAX_ARB (0x8127)"; +//case 0x8128 /* GL_POINT_FADE_THRESHOLD_SIZE_ARB */: return "GL_POINT_FADE_THRESHOLD_SIZE_ARB (0x8128)"; +//case 0x8129 /* GL_POINT_DISTANCE_ATTENUATION_ARB */: return "GL_POINT_DISTANCE_ATTENUATION_ARB (0x8129)"; + +/* -------------------------- GL_ARB_point_sprite -------------------------- */ + + + + +//case 0x8861 /* GL_POINT_SPRITE_ARB */: return "GL_POINT_SPRITE_ARB (0x8861)"; +//case 0x8862 /* GL_COORD_REPLACE_ARB */: return "GL_COORD_REPLACE_ARB (0x8862)"; + + + + + +/* --------------------- GL_ARB_program_interface_query -------------------- */ + + + + +case 0x92E1 /* GL_UNIFORM */: return "GL_UNIFORM (0x92E1)"; +case 0x92E2 /* GL_UNIFORM_BLOCK */: return "GL_UNIFORM_BLOCK (0x92E2)"; +case 0x92E3 /* GL_PROGRAM_INPUT */: return "GL_PROGRAM_INPUT (0x92E3)"; +case 0x92E4 /* GL_PROGRAM_OUTPUT */: return "GL_PROGRAM_OUTPUT (0x92E4)"; +case 0x92E5 /* GL_BUFFER_VARIABLE */: return "GL_BUFFER_VARIABLE (0x92E5)"; +case 0x92E6 /* GL_SHADER_STORAGE_BLOCK */: return "GL_SHADER_STORAGE_BLOCK (0x92E6)"; +case 0x92E7 /* GL_IS_PER_PATCH */: return "GL_IS_PER_PATCH (0x92E7)"; +case 0x92E8 /* GL_VERTEX_SUBROUTINE */: return "GL_VERTEX_SUBROUTINE (0x92E8)"; +case 0x92E9 /* GL_TESS_CONTROL_SUBROUTINE */: return "GL_TESS_CONTROL_SUBROUTINE (0x92E9)"; +case 0x92EA /* GL_TESS_EVALUATION_SUBROUTINE */: return "GL_TESS_EVALUATION_SUBROUTINE (0x92EA)"; +case 0x92EB /* GL_GEOMETRY_SUBROUTINE */: return "GL_GEOMETRY_SUBROUTINE (0x92EB)"; +case 0x92EC /* GL_FRAGMENT_SUBROUTINE */: return "GL_FRAGMENT_SUBROUTINE (0x92EC)"; +case 0x92ED /* GL_COMPUTE_SUBROUTINE */: return "GL_COMPUTE_SUBROUTINE (0x92ED)"; +case 0x92EE /* GL_VERTEX_SUBROUTINE_UNIFORM */: return "GL_VERTEX_SUBROUTINE_UNIFORM (0x92EE)"; +case 0x92EF /* GL_TESS_CONTROL_SUBROUTINE_UNIFORM */: return "GL_TESS_CONTROL_SUBROUTINE_UNIFORM (0x92EF)"; +case 0x92F0 /* GL_TESS_EVALUATION_SUBROUTINE_UNIFORM */: return "GL_TESS_EVALUATION_SUBROUTINE_UNIFORM (0x92F0)"; +case 0x92F1 /* GL_GEOMETRY_SUBROUTINE_UNIFORM */: return "GL_GEOMETRY_SUBROUTINE_UNIFORM (0x92F1)"; +case 0x92F2 /* GL_FRAGMENT_SUBROUTINE_UNIFORM */: return "GL_FRAGMENT_SUBROUTINE_UNIFORM (0x92F2)"; +case 0x92F3 /* GL_COMPUTE_SUBROUTINE_UNIFORM */: return "GL_COMPUTE_SUBROUTINE_UNIFORM (0x92F3)"; +case 0x92F4 /* GL_TRANSFORM_FEEDBACK_VARYING */: return "GL_TRANSFORM_FEEDBACK_VARYING (0x92F4)"; +case 0x92F5 /* GL_ACTIVE_RESOURCES */: return "GL_ACTIVE_RESOURCES (0x92F5)"; +case 0x92F6 /* GL_MAX_NAME_LENGTH */: return "GL_MAX_NAME_LENGTH (0x92F6)"; +case 0x92F7 /* GL_MAX_NUM_ACTIVE_VARIABLES */: return "GL_MAX_NUM_ACTIVE_VARIABLES (0x92F7)"; +case 0x92F8 /* GL_MAX_NUM_COMPATIBLE_SUBROUTINES */: return "GL_MAX_NUM_COMPATIBLE_SUBROUTINES (0x92F8)"; +case 0x92F9 /* GL_NAME_LENGTH */: return "GL_NAME_LENGTH (0x92F9)"; +case 0x92FA /* GL_TYPE */: return "GL_TYPE (0x92FA)"; +case 0x92FB /* GL_ARRAY_SIZE */: return "GL_ARRAY_SIZE (0x92FB)"; +case 0x92FC /* GL_OFFSET */: return "GL_OFFSET (0x92FC)"; +case 0x92FD /* GL_BLOCK_INDEX */: return "GL_BLOCK_INDEX (0x92FD)"; +case 0x92FE /* GL_ARRAY_STRIDE */: return "GL_ARRAY_STRIDE (0x92FE)"; +case 0x92FF /* GL_MATRIX_STRIDE */: return "GL_MATRIX_STRIDE (0x92FF)"; +case 0x9300 /* GL_IS_ROW_MAJOR */: return "GL_IS_ROW_MAJOR (0x9300)"; +case 0x9301 /* GL_ATOMIC_COUNTER_BUFFER_INDEX */: return "GL_ATOMIC_COUNTER_BUFFER_INDEX (0x9301)"; +case 0x9302 /* GL_BUFFER_BINDING */: return "GL_BUFFER_BINDING (0x9302)"; +case 0x9303 /* GL_BUFFER_DATA_SIZE */: return "GL_BUFFER_DATA_SIZE (0x9303)"; +case 0x9304 /* GL_NUM_ACTIVE_VARIABLES */: return "GL_NUM_ACTIVE_VARIABLES (0x9304)"; +case 0x9305 /* GL_ACTIVE_VARIABLES */: return "GL_ACTIVE_VARIABLES (0x9305)"; +case 0x9306 /* GL_REFERENCED_BY_VERTEX_SHADER */: return "GL_REFERENCED_BY_VERTEX_SHADER (0x9306)"; +case 0x9307 /* GL_REFERENCED_BY_TESS_CONTROL_SHADER */: return "GL_REFERENCED_BY_TESS_CONTROL_SHADER (0x9307)"; +case 0x9308 /* GL_REFERENCED_BY_TESS_EVALUATION_SHADER */: return "GL_REFERENCED_BY_TESS_EVALUATION_SHADER (0x9308)"; +case 0x9309 /* GL_REFERENCED_BY_GEOMETRY_SHADER */: return "GL_REFERENCED_BY_GEOMETRY_SHADER (0x9309)"; +case 0x930A /* GL_REFERENCED_BY_FRAGMENT_SHADER */: return "GL_REFERENCED_BY_FRAGMENT_SHADER (0x930A)"; +case 0x930B /* GL_REFERENCED_BY_COMPUTE_SHADER */: return "GL_REFERENCED_BY_COMPUTE_SHADER (0x930B)"; +case 0x930C /* GL_TOP_LEVEL_ARRAY_SIZE */: return "GL_TOP_LEVEL_ARRAY_SIZE (0x930C)"; +case 0x930D /* GL_TOP_LEVEL_ARRAY_STRIDE */: return "GL_TOP_LEVEL_ARRAY_STRIDE (0x930D)"; +case 0x930E /* GL_LOCATION */: return "GL_LOCATION (0x930E)"; +case 0x930F /* GL_LOCATION_INDEX */: return "GL_LOCATION_INDEX (0x930F)";/* ------------------------ GL_ARB_provoking_vertex ------------------------ */ + + + + +case 0x8E4C /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */: return "GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION (0x8E4C)"; +case 0x8E4D /* GL_FIRST_VERTEX_CONVENTION */: return "GL_FIRST_VERTEX_CONVENTION (0x8E4D)"; +case 0x8E4E /* GL_LAST_VERTEX_CONVENTION */: return "GL_LAST_VERTEX_CONVENTION (0x8E4E)"; +case 0x8E4F /* GL_PROVOKING_VERTEX */: return "GL_PROVOKING_VERTEX (0x8E4F)";/* ------------------ GL_ARB_robust_buffer_access_behavior ----------------- */ + + + + + + + + +/* --------------------------- GL_ARB_robustness --------------------------- */ + + + + +//case 0x00000004 /* GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB */: return "GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB (0x00000004)"; +case 0x8252 /* GL_LOSE_CONTEXT_ON_RESET_ARB */: return "GL_LOSE_CONTEXT_ON_RESET_ARB (0x8252)"; +case 0x8253 /* GL_GUILTY_CONTEXT_RESET_ARB */: return "GL_GUILTY_CONTEXT_RESET_ARB (0x8253)"; +case 0x8254 /* GL_INNOCENT_CONTEXT_RESET_ARB */: return "GL_INNOCENT_CONTEXT_RESET_ARB (0x8254)"; +case 0x8255 /* GL_UNKNOWN_CONTEXT_RESET_ARB */: return "GL_UNKNOWN_CONTEXT_RESET_ARB (0x8255)"; +case 0x8256 /* GL_RESET_NOTIFICATION_STRATEGY_ARB */: return "GL_RESET_NOTIFICATION_STRATEGY_ARB (0x8256)"; +case 0x8261 /* GL_NO_RESET_NOTIFICATION_ARB */: return "GL_NO_RESET_NOTIFICATION_ARB (0x8261)"; + + + + + + + +/* ---------------- GL_ARB_robustness_application_isolation ---------------- */ + + + + + + + + +/* ---------------- GL_ARB_robustness_share_group_isolation ---------------- */ + + + + + + + + +/* ------------------------- GL_ARB_sample_shading ------------------------- */ + + + + +//case 0x8C36 /* GL_SAMPLE_SHADING_ARB */: return "GL_SAMPLE_SHADING_ARB (0x8C36)"; +//case 0x8C37 /* GL_MIN_SAMPLE_SHADING_VALUE_ARB */: return "GL_MIN_SAMPLE_SHADING_VALUE_ARB (0x8C37)"; + /* ------------------------- GL_ARB_sampler_objects ------------------------ */ + + + + +case 0x8919 /* GL_SAMPLER_BINDING */: return "GL_SAMPLER_BINDING (0x8919)"; + + + + + +/* ------------------------ GL_ARB_seamless_cube_map ----------------------- */ + + + + +//case 0x884F /* GL_TEXTURE_CUBE_MAP_SEAMLESS */: return "GL_TEXTURE_CUBE_MAP_SEAMLESS (0x884F)"; + + + + + +/* --------------------- GL_ARB_separate_shader_objects -------------------- */ + + + + +//case 0x00000001 /* GL_VERTEX_SHADER_BIT */: return "GL_VERTEX_SHADER_BIT (0x00000001)"; +//case 0x00000002 /* GL_FRAGMENT_SHADER_BIT */: return "GL_FRAGMENT_SHADER_BIT (0x00000002)"; +//case 0x00000004 /* GL_GEOMETRY_SHADER_BIT */: return "GL_GEOMETRY_SHADER_BIT (0x00000004)"; +//case 0x00000008 /* GL_TESS_CONTROL_SHADER_BIT */: return "GL_TESS_CONTROL_SHADER_BIT (0x00000008)"; +//case 0x00000010 /* GL_TESS_EVALUATION_SHADER_BIT */: return "GL_TESS_EVALUATION_SHADER_BIT (0x00000010)"; +case 0x8258 /* GL_PROGRAM_SEPARABLE */: return "GL_PROGRAM_SEPARABLE (0x8258)"; +case 0x8259 /* GL_ACTIVE_PROGRAM */: return "GL_ACTIVE_PROGRAM (0x8259)"; +case 0x825A /* GL_PROGRAM_PIPELINE_BINDING */: return "GL_PROGRAM_PIPELINE_BINDING (0x825A)"; +//case 0xFFFFFFFF /* GL_ALL_SHADER_BITS */: return "GL_ALL_SHADER_BITS (0xFFFFFFFF)"; + + + + + + + +/* --------------------- GL_ARB_shader_atomic_counters --------------------- */ + + + + +case 0x92C0 /* GL_ATOMIC_COUNTER_BUFFER */: return "GL_ATOMIC_COUNTER_BUFFER (0x92C0)"; +case 0x92C1 /* GL_ATOMIC_COUNTER_BUFFER_BINDING */: return "GL_ATOMIC_COUNTER_BUFFER_BINDING (0x92C1)"; +case 0x92C2 /* GL_ATOMIC_COUNTER_BUFFER_START */: return "GL_ATOMIC_COUNTER_BUFFER_START (0x92C2)"; +case 0x92C3 /* GL_ATOMIC_COUNTER_BUFFER_SIZE */: return "GL_ATOMIC_COUNTER_BUFFER_SIZE (0x92C3)"; +case 0x92C4 /* GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE */: return "GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE (0x92C4)"; +case 0x92C5 /* GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS */: return "GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS (0x92C5)"; +case 0x92C6 /* GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES */: return "GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES (0x92C6)"; +case 0x92C7 /* GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER */: return "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER (0x92C7)"; +case 0x92C8 /* GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER */: return "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER (0x92C8)"; +case 0x92C9 /* GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER */: return "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER (0x92C9)"; +case 0x92CA /* GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER */: return "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER (0x92CA)"; +case 0x92CB /* GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER */: return "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER (0x92CB)"; +case 0x92CC /* GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS */: return "GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS (0x92CC)"; +case 0x92CD /* GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS */: return "GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS (0x92CD)"; +case 0x92CE /* GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS */: return "GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS (0x92CE)"; +case 0x92CF /* GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS */: return "GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS (0x92CF)"; +case 0x92D0 /* GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS */: return "GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS (0x92D0)"; +case 0x92D1 /* GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS */: return "GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS (0x92D1)"; +case 0x92D2 /* GL_MAX_VERTEX_ATOMIC_COUNTERS */: return "GL_MAX_VERTEX_ATOMIC_COUNTERS (0x92D2)"; +case 0x92D3 /* GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS */: return "GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS (0x92D3)"; +case 0x92D4 /* GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS */: return "GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS (0x92D4)"; +case 0x92D5 /* GL_MAX_GEOMETRY_ATOMIC_COUNTERS */: return "GL_MAX_GEOMETRY_ATOMIC_COUNTERS (0x92D5)"; +case 0x92D6 /* GL_MAX_FRAGMENT_ATOMIC_COUNTERS */: return "GL_MAX_FRAGMENT_ATOMIC_COUNTERS (0x92D6)"; +case 0x92D7 /* GL_MAX_COMBINED_ATOMIC_COUNTERS */: return "GL_MAX_COMBINED_ATOMIC_COUNTERS (0x92D7)"; +case 0x92D8 /* GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE */: return "GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE (0x92D8)"; +case 0x92D9 /* GL_ACTIVE_ATOMIC_COUNTER_BUFFERS */: return "GL_ACTIVE_ATOMIC_COUNTER_BUFFERS (0x92D9)"; +case 0x92DA /* GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX */: return "GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX (0x92DA)"; +case 0x92DB /* GL_UNSIGNED_INT_ATOMIC_COUNTER */: return "GL_UNSIGNED_INT_ATOMIC_COUNTER (0x92DB)"; +case 0x92DC /* GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS */: return "GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS (0x92DC)";/* ----------------------- GL_ARB_shader_bit_encoding ---------------------- */ + + + + + + + + +/* --------------------- GL_ARB_shader_image_load_store -------------------- */ + + + + +//case 0x00000001 /* GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT */: return "GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT (0x00000001)"; +//case 0x00000002 /* GL_ELEMENT_ARRAY_BARRIER_BIT */: return "GL_ELEMENT_ARRAY_BARRIER_BIT (0x00000002)"; +//case 0x00000004 /* GL_UNIFORM_BARRIER_BIT */: return "GL_UNIFORM_BARRIER_BIT (0x00000004)"; +//case 0x00000008 /* GL_TEXTURE_FETCH_BARRIER_BIT */: return "GL_TEXTURE_FETCH_BARRIER_BIT (0x00000008)"; +//case 0x00000020 /* GL_SHADER_IMAGE_ACCESS_BARRIER_BIT */: return "GL_SHADER_IMAGE_ACCESS_BARRIER_BIT (0x00000020)"; +//case 0x00000040 /* GL_COMMAND_BARRIER_BIT */: return "GL_COMMAND_BARRIER_BIT (0x00000040)"; +//case 0x00000080 /* GL_PIXEL_BUFFER_BARRIER_BIT */: return "GL_PIXEL_BUFFER_BARRIER_BIT (0x00000080)"; +//case 0x00000100 /* GL_TEXTURE_UPDATE_BARRIER_BIT */: return "GL_TEXTURE_UPDATE_BARRIER_BIT (0x00000100)"; +//case 0x00000200 /* GL_BUFFER_UPDATE_BARRIER_BIT */: return "GL_BUFFER_UPDATE_BARRIER_BIT (0x00000200)"; +//case 0x00000400 /* GL_FRAMEBUFFER_BARRIER_BIT */: return "GL_FRAMEBUFFER_BARRIER_BIT (0x00000400)"; +//case 0x00000800 /* GL_TRANSFORM_FEEDBACK_BARRIER_BIT */: return "GL_TRANSFORM_FEEDBACK_BARRIER_BIT (0x00000800)"; +//case 0x00001000 /* GL_ATOMIC_COUNTER_BARRIER_BIT */: return "GL_ATOMIC_COUNTER_BARRIER_BIT (0x00001000)"; +case 0x8F38 /* GL_MAX_IMAGE_UNITS */: return "GL_MAX_IMAGE_UNITS (0x8F38)"; +case 0x8F39 /* GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS */: return "GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS (0x8F39)"; +case 0x8F3A /* GL_IMAGE_BINDING_NAME */: return "GL_IMAGE_BINDING_NAME (0x8F3A)"; +case 0x8F3B /* GL_IMAGE_BINDING_LEVEL */: return "GL_IMAGE_BINDING_LEVEL (0x8F3B)"; +case 0x8F3C /* GL_IMAGE_BINDING_LAYERED */: return "GL_IMAGE_BINDING_LAYERED (0x8F3C)"; +case 0x8F3D /* GL_IMAGE_BINDING_LAYER */: return "GL_IMAGE_BINDING_LAYER (0x8F3D)"; +case 0x8F3E /* GL_IMAGE_BINDING_ACCESS */: return "GL_IMAGE_BINDING_ACCESS (0x8F3E)"; +case 0x904C /* GL_IMAGE_1D */: return "GL_IMAGE_1D (0x904C)"; +case 0x904D /* GL_IMAGE_2D */: return "GL_IMAGE_2D (0x904D)"; +case 0x904E /* GL_IMAGE_3D */: return "GL_IMAGE_3D (0x904E)"; +case 0x904F /* GL_IMAGE_2D_RECT */: return "GL_IMAGE_2D_RECT (0x904F)"; +case 0x9050 /* GL_IMAGE_CUBE */: return "GL_IMAGE_CUBE (0x9050)"; +case 0x9051 /* GL_IMAGE_BUFFER */: return "GL_IMAGE_BUFFER (0x9051)"; +case 0x9052 /* GL_IMAGE_1D_ARRAY */: return "GL_IMAGE_1D_ARRAY (0x9052)"; +case 0x9053 /* GL_IMAGE_2D_ARRAY */: return "GL_IMAGE_2D_ARRAY (0x9053)"; +case 0x9054 /* GL_IMAGE_CUBE_MAP_ARRAY */: return "GL_IMAGE_CUBE_MAP_ARRAY (0x9054)"; +case 0x9055 /* GL_IMAGE_2D_MULTISAMPLE */: return "GL_IMAGE_2D_MULTISAMPLE (0x9055)"; +case 0x9056 /* GL_IMAGE_2D_MULTISAMPLE_ARRAY */: return "GL_IMAGE_2D_MULTISAMPLE_ARRAY (0x9056)"; +case 0x9057 /* GL_INT_IMAGE_1D */: return "GL_INT_IMAGE_1D (0x9057)"; +case 0x9058 /* GL_INT_IMAGE_2D */: return "GL_INT_IMAGE_2D (0x9058)"; +case 0x9059 /* GL_INT_IMAGE_3D */: return "GL_INT_IMAGE_3D (0x9059)"; +case 0x905A /* GL_INT_IMAGE_2D_RECT */: return "GL_INT_IMAGE_2D_RECT (0x905A)"; +case 0x905B /* GL_INT_IMAGE_CUBE */: return "GL_INT_IMAGE_CUBE (0x905B)"; +case 0x905C /* GL_INT_IMAGE_BUFFER */: return "GL_INT_IMAGE_BUFFER (0x905C)"; +case 0x905D /* GL_INT_IMAGE_1D_ARRAY */: return "GL_INT_IMAGE_1D_ARRAY (0x905D)"; +case 0x905E /* GL_INT_IMAGE_2D_ARRAY */: return "GL_INT_IMAGE_2D_ARRAY (0x905E)"; +case 0x905F /* GL_INT_IMAGE_CUBE_MAP_ARRAY */: return "GL_INT_IMAGE_CUBE_MAP_ARRAY (0x905F)"; +case 0x9060 /* GL_INT_IMAGE_2D_MULTISAMPLE */: return "GL_INT_IMAGE_2D_MULTISAMPLE (0x9060)"; +case 0x9061 /* GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY */: return "GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY (0x9061)"; +case 0x9062 /* GL_UNSIGNED_INT_IMAGE_1D */: return "GL_UNSIGNED_INT_IMAGE_1D (0x9062)"; +case 0x9063 /* GL_UNSIGNED_INT_IMAGE_2D */: return "GL_UNSIGNED_INT_IMAGE_2D (0x9063)"; +case 0x9064 /* GL_UNSIGNED_INT_IMAGE_3D */: return "GL_UNSIGNED_INT_IMAGE_3D (0x9064)"; +case 0x9065 /* GL_UNSIGNED_INT_IMAGE_2D_RECT */: return "GL_UNSIGNED_INT_IMAGE_2D_RECT (0x9065)"; +case 0x9066 /* GL_UNSIGNED_INT_IMAGE_CUBE */: return "GL_UNSIGNED_INT_IMAGE_CUBE (0x9066)"; +case 0x9067 /* GL_UNSIGNED_INT_IMAGE_BUFFER */: return "GL_UNSIGNED_INT_IMAGE_BUFFER (0x9067)"; +case 0x9068 /* GL_UNSIGNED_INT_IMAGE_1D_ARRAY */: return "GL_UNSIGNED_INT_IMAGE_1D_ARRAY (0x9068)"; +case 0x9069 /* GL_UNSIGNED_INT_IMAGE_2D_ARRAY */: return "GL_UNSIGNED_INT_IMAGE_2D_ARRAY (0x9069)"; +case 0x906A /* GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY */: return "GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY (0x906A)"; +case 0x906B /* GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE */: return "GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE (0x906B)"; +case 0x906C /* GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY */: return "GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY (0x906C)"; +case 0x906D /* GL_MAX_IMAGE_SAMPLES */: return "GL_MAX_IMAGE_SAMPLES (0x906D)"; +case 0x906E /* GL_IMAGE_BINDING_FORMAT */: return "GL_IMAGE_BINDING_FORMAT (0x906E)"; +case 0x90C7 /* GL_IMAGE_FORMAT_COMPATIBILITY_TYPE */: return "GL_IMAGE_FORMAT_COMPATIBILITY_TYPE (0x90C7)"; +case 0x90C8 /* GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE */: return "GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE (0x90C8)"; +case 0x90C9 /* GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS */: return "GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS (0x90C9)"; +case 0x90CA /* GL_MAX_VERTEX_IMAGE_UNIFORMS */: return "GL_MAX_VERTEX_IMAGE_UNIFORMS (0x90CA)"; +case 0x90CB /* GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS */: return "GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS (0x90CB)"; +case 0x90CC /* GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS */: return "GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS (0x90CC)"; +case 0x90CD /* GL_MAX_GEOMETRY_IMAGE_UNIFORMS */: return "GL_MAX_GEOMETRY_IMAGE_UNIFORMS (0x90CD)"; +case 0x90CE /* GL_MAX_FRAGMENT_IMAGE_UNIFORMS */: return "GL_MAX_FRAGMENT_IMAGE_UNIFORMS (0x90CE)"; +case 0x90CF /* GL_MAX_COMBINED_IMAGE_UNIFORMS */: return "GL_MAX_COMBINED_IMAGE_UNIFORMS (0x90CF)"; +//case 0xFFFFFFFF /* GL_ALL_BARRIER_BITS */: return "GL_ALL_BARRIER_BITS (0xFFFFFFFF)"; + +/* ------------------------ GL_ARB_shader_image_size ----------------------- */ + + + + + + + + +/* ------------------------- GL_ARB_shader_objects ------------------------- */ + + + + +case 0x8B40 /* GL_PROGRAM_OBJECT_ARB */: return "GL_PROGRAM_OBJECT_ARB (0x8B40)"; +case 0x8B48 /* GL_SHADER_OBJECT_ARB */: return "GL_SHADER_OBJECT_ARB (0x8B48)"; +case 0x8B4E /* GL_OBJECT_TYPE_ARB */: return "GL_OBJECT_TYPE_ARB (0x8B4E)"; +//case 0x8B4F /* GL_OBJECT_SUBTYPE_ARB */: return "GL_OBJECT_SUBTYPE_ARB (0x8B4F)"; +//case 0x8B50 /* GL_FLOAT_VEC2_ARB */: return "GL_FLOAT_VEC2_ARB (0x8B50)"; +//case 0x8B51 /* GL_FLOAT_VEC3_ARB */: return "GL_FLOAT_VEC3_ARB (0x8B51)"; +//case 0x8B52 /* GL_FLOAT_VEC4_ARB */: return "GL_FLOAT_VEC4_ARB (0x8B52)"; +//case 0x8B53 /* GL_INT_VEC2_ARB */: return "GL_INT_VEC2_ARB (0x8B53)"; +//case 0x8B54 /* GL_INT_VEC3_ARB */: return "GL_INT_VEC3_ARB (0x8B54)"; +//case 0x8B55 /* GL_INT_VEC4_ARB */: return "GL_INT_VEC4_ARB (0x8B55)"; +//case 0x8B56 /* GL_BOOL_ARB */: return "GL_BOOL_ARB (0x8B56)"; +//case 0x8B57 /* GL_BOOL_VEC2_ARB */: return "GL_BOOL_VEC2_ARB (0x8B57)"; +//case 0x8B58 /* GL_BOOL_VEC3_ARB */: return "GL_BOOL_VEC3_ARB (0x8B58)"; +//case 0x8B59 /* GL_BOOL_VEC4_ARB */: return "GL_BOOL_VEC4_ARB (0x8B59)"; +//case 0x8B5A /* GL_FLOAT_MAT2_ARB */: return "GL_FLOAT_MAT2_ARB (0x8B5A)"; +//case 0x8B5B /* GL_FLOAT_MAT3_ARB */: return "GL_FLOAT_MAT3_ARB (0x8B5B)"; +//case 0x8B5C /* GL_FLOAT_MAT4_ARB */: return "GL_FLOAT_MAT4_ARB (0x8B5C)"; +//case 0x8B5D /* GL_SAMPLER_1D_ARB */: return "GL_SAMPLER_1D_ARB (0x8B5D)"; +//case 0x8B5E /* GL_SAMPLER_2D_ARB */: return "GL_SAMPLER_2D_ARB (0x8B5E)"; +//case 0x8B5F /* GL_SAMPLER_3D_ARB */: return "GL_SAMPLER_3D_ARB (0x8B5F)"; +//case 0x8B60 /* GL_SAMPLER_CUBE_ARB */: return "GL_SAMPLER_CUBE_ARB (0x8B60)"; +//case 0x8B61 /* GL_SAMPLER_1D_SHADOW_ARB */: return "GL_SAMPLER_1D_SHADOW_ARB (0x8B61)"; +//case 0x8B62 /* GL_SAMPLER_2D_SHADOW_ARB */: return "GL_SAMPLER_2D_SHADOW_ARB (0x8B62)"; +//case 0x8B63 /* GL_SAMPLER_2D_RECT_ARB */: return "GL_SAMPLER_2D_RECT_ARB (0x8B63)"; +//case 0x8B64 /* GL_SAMPLER_2D_RECT_SHADOW_ARB */: return "GL_SAMPLER_2D_RECT_SHADOW_ARB (0x8B64)"; +//case 0x8B80 /* GL_OBJECT_DELETE_STATUS_ARB */: return "GL_OBJECT_DELETE_STATUS_ARB (0x8B80)"; +//case 0x8B81 /* GL_OBJECT_COMPILE_STATUS_ARB */: return "GL_OBJECT_COMPILE_STATUS_ARB (0x8B81)"; +//case 0x8B82 /* GL_OBJECT_LINK_STATUS_ARB */: return "GL_OBJECT_LINK_STATUS_ARB (0x8B82)"; +//case 0x8B83 /* GL_OBJECT_VALIDATE_STATUS_ARB */: return "GL_OBJECT_VALIDATE_STATUS_ARB (0x8B83)"; +//case 0x8B84 /* GL_OBJECT_INFO_LOG_LENGTH_ARB */: return "GL_OBJECT_INFO_LOG_LENGTH_ARB (0x8B84)"; +//case 0x8B85 /* GL_OBJECT_ATTACHED_OBJECTS_ARB */: return "GL_OBJECT_ATTACHED_OBJECTS_ARB (0x8B85)"; +//case 0x8B86 /* GL_OBJECT_ACTIVE_UNIFORMS_ARB */: return "GL_OBJECT_ACTIVE_UNIFORMS_ARB (0x8B86)"; +//case 0x8B87 /* GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB */: return "GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB (0x8B87)"; +//case 0x8B88 /* GL_OBJECT_SHADER_SOURCE_LENGTH_ARB */: return "GL_OBJECT_SHADER_SOURCE_LENGTH_ARB (0x8B88)"; + + + + + + + + +/* ------------------------ GL_ARB_shader_precision ------------------------ */ + + + + + + + + +/* ---------------------- GL_ARB_shader_stencil_export --------------------- */ + + + + + + + + +/* ------------------ GL_ARB_shader_storage_buffer_object ------------------ */ + + + + +//case 0x2000 /* GL_SHADER_STORAGE_BARRIER_BIT */: return "GL_SHADER_STORAGE_BARRIER_BIT (0x2000)"; +//case 0x8F39 /* GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES */: return "GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES (0x8F39)"; +case 0x90D2 /* GL_SHADER_STORAGE_BUFFER */: return "GL_SHADER_STORAGE_BUFFER (0x90D2)"; +case 0x90D3 /* GL_SHADER_STORAGE_BUFFER_BINDING */: return "GL_SHADER_STORAGE_BUFFER_BINDING (0x90D3)"; +case 0x90D4 /* GL_SHADER_STORAGE_BUFFER_START */: return "GL_SHADER_STORAGE_BUFFER_START (0x90D4)"; +case 0x90D5 /* GL_SHADER_STORAGE_BUFFER_SIZE */: return "GL_SHADER_STORAGE_BUFFER_SIZE (0x90D5)"; +case 0x90D6 /* GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS */: return "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS (0x90D6)"; +case 0x90D7 /* GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS */: return "GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS (0x90D7)"; +case 0x90D8 /* GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS */: return "GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS (0x90D8)"; +case 0x90D9 /* GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS */: return "GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS (0x90D9)"; +case 0x90DA /* GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS */: return "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS (0x90DA)"; +case 0x90DB /* GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS */: return "GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS (0x90DB)"; +case 0x90DC /* GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS */: return "GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS (0x90DC)"; +case 0x90DD /* GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS */: return "GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS (0x90DD)"; +case 0x90DE /* GL_MAX_SHADER_STORAGE_BLOCK_SIZE */: return "GL_MAX_SHADER_STORAGE_BLOCK_SIZE (0x90DE)"; +case 0x90DF /* GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT */: return "GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT (0x90DF)";/* ------------------------ GL_ARB_shader_subroutine ----------------------- */ + + + + +case 0x8DE5 /* GL_ACTIVE_SUBROUTINES */: return "GL_ACTIVE_SUBROUTINES (0x8DE5)"; +case 0x8DE6 /* GL_ACTIVE_SUBROUTINE_UNIFORMS */: return "GL_ACTIVE_SUBROUTINE_UNIFORMS (0x8DE6)"; +case 0x8DE7 /* GL_MAX_SUBROUTINES */: return "GL_MAX_SUBROUTINES (0x8DE7)"; +case 0x8DE8 /* GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS */: return "GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS (0x8DE8)"; +case 0x8E47 /* GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS */: return "GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS (0x8E47)"; +case 0x8E48 /* GL_ACTIVE_SUBROUTINE_MAX_LENGTH */: return "GL_ACTIVE_SUBROUTINE_MAX_LENGTH (0x8E48)"; +case 0x8E49 /* GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH */: return "GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH (0x8E49)"; +case 0x8E4A /* GL_NUM_COMPATIBLE_SUBROUTINES */: return "GL_NUM_COMPATIBLE_SUBROUTINES (0x8E4A)"; +case 0x8E4B /* GL_COMPATIBLE_SUBROUTINES */: return "GL_COMPATIBLE_SUBROUTINES (0x8E4B)"; + + + +/* ----------------------- GL_ARB_shader_texture_lod ----------------------- */ + + + + + + + + +/* ---------------------- GL_ARB_shading_language_100 ---------------------- */ + + + + +//case 0x8B8C /* GL_SHADING_LANGUAGE_VERSION_ARB */: return "GL_SHADING_LANGUAGE_VERSION_ARB (0x8B8C)"; + + + + + +/* -------------------- GL_ARB_shading_language_420pack -------------------- */ + + + + + + + + +/* -------------------- GL_ARB_shading_language_include -------------------- */ + + + + +case 0x8DAE /* GL_SHADER_INCLUDE_ARB */: return "GL_SHADER_INCLUDE_ARB (0x8DAE)"; +case 0x8DE9 /* GL_NAMED_STRING_LENGTH_ARB */: return "GL_NAMED_STRING_LENGTH_ARB (0x8DE9)"; +case 0x8DEA /* GL_NAMED_STRING_TYPE_ARB */: return "GL_NAMED_STRING_TYPE_ARB (0x8DEA)";/* -------------------- GL_ARB_shading_language_packing -------------------- */ + + + + + + + + +/* ----------------------------- GL_ARB_shadow ----------------------------- */ + + + + +//case 0x884C /* GL_TEXTURE_COMPARE_MODE_ARB */: return "GL_TEXTURE_COMPARE_MODE_ARB (0x884C)"; +//case 0x884D /* GL_TEXTURE_COMPARE_FUNC_ARB */: return "GL_TEXTURE_COMPARE_FUNC_ARB (0x884D)"; +//case 0x884E /* GL_COMPARE_R_TO_TEXTURE_ARB */: return "GL_COMPARE_R_TO_TEXTURE_ARB (0x884E)"; + + + + + +/* ------------------------- GL_ARB_shadow_ambient ------------------------- */ + + + + +case 0x80BF /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */: return "GL_TEXTURE_COMPARE_FAIL_VALUE_ARB (0x80BF)"; + + + + + +/* ------------------------ GL_ARB_stencil_texturing ----------------------- */ + + + + +case 0x90EA /* GL_DEPTH_STENCIL_TEXTURE_MODE */: return "GL_DEPTH_STENCIL_TEXTURE_MODE (0x90EA)"; + + + + + +/* ------------------------------ GL_ARB_sync ------------------------------ */ + + + + +//case 0x00000001 /* GL_SYNC_FLUSH_COMMANDS_BIT */: return "GL_SYNC_FLUSH_COMMANDS_BIT (0x00000001)"; +case 0x9111 /* GL_MAX_SERVER_WAIT_TIMEOUT */: return "GL_MAX_SERVER_WAIT_TIMEOUT (0x9111)"; +case 0x9112 /* GL_OBJECT_TYPE */: return "GL_OBJECT_TYPE (0x9112)"; +case 0x9113 /* GL_SYNC_CONDITION */: return "GL_SYNC_CONDITION (0x9113)"; +case 0x9114 /* GL_SYNC_STATUS */: return "GL_SYNC_STATUS (0x9114)"; +case 0x9115 /* GL_SYNC_FLAGS */: return "GL_SYNC_FLAGS (0x9115)"; +case 0x9116 /* GL_SYNC_FENCE */: return "GL_SYNC_FENCE (0x9116)"; +case 0x9117 /* GL_SYNC_GPU_COMMANDS_COMPLETE */: return "GL_SYNC_GPU_COMMANDS_COMPLETE (0x9117)"; +case 0x9118 /* GL_UNSIGNALED */: return "GL_UNSIGNALED (0x9118)"; +case 0x9119 /* GL_SIGNALED */: return "GL_SIGNALED (0x9119)"; +case 0x911A /* GL_ALREADY_SIGNALED */: return "GL_ALREADY_SIGNALED (0x911A)"; +case 0x911B /* GL_TIMEOUT_EXPIRED */: return "GL_TIMEOUT_EXPIRED (0x911B)"; +case 0x911C /* GL_CONDITION_SATISFIED */: return "GL_CONDITION_SATISFIED (0x911C)"; +case 0x911D /* GL_WAIT_FAILED */: return "GL_WAIT_FAILED (0x911D)"; +//case 0xFFFFFFFFFFFFFFFF /* GL_TIMEOUT_IGNORED */: return "GL_TIMEOUT_IGNORED (0xFFFFFFFFFFFFFFFF)"; + +/* ----------------------- GL_ARB_tessellation_shader ---------------------- */ + + + + +case 0xE /* GL_PATCHES */: return "GL_PATCHES (0xE)"; +case 0x84F0 /* GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER */: return "GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER (0x84F0)"; +case 0x84F1 /* GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER */: return "GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER (0x84F1)"; +case 0x886C /* GL_MAX_TESS_CONTROL_INPUT_COMPONENTS */: return "GL_MAX_TESS_CONTROL_INPUT_COMPONENTS (0x886C)"; +case 0x886D /* GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS */: return "GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS (0x886D)"; +case 0x8E1E /* GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS */: return "GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS (0x8E1E)"; +case 0x8E1F /* GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS */: return "GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS (0x8E1F)"; +case 0x8E72 /* GL_PATCH_VERTICES */: return "GL_PATCH_VERTICES (0x8E72)"; +case 0x8E73 /* GL_PATCH_DEFAULT_INNER_LEVEL */: return "GL_PATCH_DEFAULT_INNER_LEVEL (0x8E73)"; +case 0x8E74 /* GL_PATCH_DEFAULT_OUTER_LEVEL */: return "GL_PATCH_DEFAULT_OUTER_LEVEL (0x8E74)"; +case 0x8E75 /* GL_TESS_CONTROL_OUTPUT_VERTICES */: return "GL_TESS_CONTROL_OUTPUT_VERTICES (0x8E75)"; +case 0x8E76 /* GL_TESS_GEN_MODE */: return "GL_TESS_GEN_MODE (0x8E76)"; +case 0x8E77 /* GL_TESS_GEN_SPACING */: return "GL_TESS_GEN_SPACING (0x8E77)"; +case 0x8E78 /* GL_TESS_GEN_VERTEX_ORDER */: return "GL_TESS_GEN_VERTEX_ORDER (0x8E78)"; +case 0x8E79 /* GL_TESS_GEN_POINT_MODE */: return "GL_TESS_GEN_POINT_MODE (0x8E79)"; +case 0x8E7A /* GL_ISOLINES */: return "GL_ISOLINES (0x8E7A)"; +case 0x8E7B /* GL_FRACTIONAL_ODD */: return "GL_FRACTIONAL_ODD (0x8E7B)"; +case 0x8E7C /* GL_FRACTIONAL_EVEN */: return "GL_FRACTIONAL_EVEN (0x8E7C)"; +case 0x8E7D /* GL_MAX_PATCH_VERTICES */: return "GL_MAX_PATCH_VERTICES (0x8E7D)"; +case 0x8E7E /* GL_MAX_TESS_GEN_LEVEL */: return "GL_MAX_TESS_GEN_LEVEL (0x8E7E)"; +case 0x8E7F /* GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS */: return "GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS (0x8E7F)"; +case 0x8E80 /* GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS */: return "GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS (0x8E80)"; +case 0x8E81 /* GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS */: return "GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS (0x8E81)"; +case 0x8E82 /* GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS */: return "GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS (0x8E82)"; +case 0x8E83 /* GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS */: return "GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS (0x8E83)"; +case 0x8E84 /* GL_MAX_TESS_PATCH_COMPONENTS */: return "GL_MAX_TESS_PATCH_COMPONENTS (0x8E84)"; +case 0x8E85 /* GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS */: return "GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS (0x8E85)"; +case 0x8E86 /* GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS */: return "GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS (0x8E86)"; +case 0x8E87 /* GL_TESS_EVALUATION_SHADER */: return "GL_TESS_EVALUATION_SHADER (0x8E87)"; +case 0x8E88 /* GL_TESS_CONTROL_SHADER */: return "GL_TESS_CONTROL_SHADER (0x8E88)"; +case 0x8E89 /* GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS */: return "GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS (0x8E89)"; +case 0x8E8A /* GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS */: return "GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS (0x8E8A)"; + +/* ---------------------- GL_ARB_texture_border_clamp ---------------------- */ + + + + +//case 0x812D /* GL_CLAMP_TO_BORDER_ARB */: return "GL_CLAMP_TO_BORDER_ARB (0x812D)"; + + + + + +/* ---------------------- GL_ARB_texture_buffer_object --------------------- */ + + + + +//case 0x8C2A /* GL_TEXTURE_BUFFER_ARB */: return "GL_TEXTURE_BUFFER_ARB (0x8C2A)"; +//case 0x8C2B /* GL_MAX_TEXTURE_BUFFER_SIZE_ARB */: return "GL_MAX_TEXTURE_BUFFER_SIZE_ARB (0x8C2B)"; +//case 0x8C2C /* GL_TEXTURE_BINDING_BUFFER_ARB */: return "GL_TEXTURE_BINDING_BUFFER_ARB (0x8C2C)"; +//case 0x8C2D /* GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB */: return "GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB (0x8C2D)"; +//case 0x8C2E /* GL_TEXTURE_BUFFER_FORMAT_ARB */: return "GL_TEXTURE_BUFFER_FORMAT_ARB (0x8C2E)";/* ------------------- GL_ARB_texture_buffer_object_rgb32 ------------------ */ + + + + + + + + +/* ---------------------- GL_ARB_texture_buffer_range ---------------------- */ + + + + +case 0x919D /* GL_TEXTURE_BUFFER_OFFSET */: return "GL_TEXTURE_BUFFER_OFFSET (0x919D)"; +case 0x919E /* GL_TEXTURE_BUFFER_SIZE */: return "GL_TEXTURE_BUFFER_SIZE (0x919E)"; +case 0x919F /* GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT */: return "GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT (0x919F)"; + +/* ----------------------- GL_ARB_texture_compression ---------------------- */ + + + + +//case 0x84E9 /* GL_COMPRESSED_ALPHA_ARB */: return "GL_COMPRESSED_ALPHA_ARB (0x84E9)"; +//case 0x84EA /* GL_COMPRESSED_LUMINANCE_ARB */: return "GL_COMPRESSED_LUMINANCE_ARB (0x84EA)"; +//case 0x84EB /* GL_COMPRESSED_LUMINANCE_ALPHA_ARB */: return "GL_COMPRESSED_LUMINANCE_ALPHA_ARB (0x84EB)"; +//case 0x84EC /* GL_COMPRESSED_INTENSITY_ARB */: return "GL_COMPRESSED_INTENSITY_ARB (0x84EC)"; +//case 0x84ED /* GL_COMPRESSED_RGB_ARB */: return "GL_COMPRESSED_RGB_ARB (0x84ED)"; +//case 0x84EE /* GL_COMPRESSED_RGBA_ARB */: return "GL_COMPRESSED_RGBA_ARB (0x84EE)"; +//case 0x84EF /* GL_TEXTURE_COMPRESSION_HINT_ARB */: return "GL_TEXTURE_COMPRESSION_HINT_ARB (0x84EF)"; +//case 0x86A0 /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB */: return "GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB (0x86A0)"; +//case 0x86A1 /* GL_TEXTURE_COMPRESSED_ARB */: return "GL_TEXTURE_COMPRESSED_ARB (0x86A1)"; +//case 0x86A2 /* GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB */: return "GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB (0x86A2)"; +//case 0x86A3 /* GL_COMPRESSED_TEXTURE_FORMATS_ARB */: return "GL_COMPRESSED_TEXTURE_FORMATS_ARB (0x86A3)"; + +/* -------------------- GL_ARB_texture_compression_bptc -------------------- */ + + + + +//case 0x8E8C /* GL_COMPRESSED_RGBA_BPTC_UNORM_ARB */: return "GL_COMPRESSED_RGBA_BPTC_UNORM_ARB (0x8E8C)"; +//case 0x8E8D /* GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB */: return "GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB (0x8E8D)"; +//case 0x8E8E /* GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB */: return "GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB (0x8E8E)"; +//case 0x8E8F /* GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB */: return "GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB (0x8E8F)"; + + + + + +/* -------------------- GL_ARB_texture_compression_rgtc -------------------- */ + + + + +case 0x8DBB /* GL_COMPRESSED_RED_RGTC1 */: return "GL_COMPRESSED_RED_RGTC1 (0x8DBB)"; +case 0x8DBC /* GL_COMPRESSED_SIGNED_RED_RGTC1 */: return "GL_COMPRESSED_SIGNED_RED_RGTC1 (0x8DBC)"; +case 0x8DBD /* GL_COMPRESSED_RG_RGTC2 */: return "GL_COMPRESSED_RG_RGTC2 (0x8DBD)"; +case 0x8DBE /* GL_COMPRESSED_SIGNED_RG_RGTC2 */: return "GL_COMPRESSED_SIGNED_RG_RGTC2 (0x8DBE)"; + + + + + +/* ------------------------ GL_ARB_texture_cube_map ------------------------ */ + + + + +//case 0x8511 /* GL_NORMAL_MAP_ARB */: return "GL_NORMAL_MAP_ARB (0x8511)"; +//case 0x8512 /* GL_REFLECTION_MAP_ARB */: return "GL_REFLECTION_MAP_ARB (0x8512)"; +//case 0x8513 /* GL_TEXTURE_CUBE_MAP_ARB */: return "GL_TEXTURE_CUBE_MAP_ARB (0x8513)"; +//case 0x8514 /* GL_TEXTURE_BINDING_CUBE_MAP_ARB */: return "GL_TEXTURE_BINDING_CUBE_MAP_ARB (0x8514)"; +//case 0x8515 /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB */: return "GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB (0x8515)"; +//case 0x8516 /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB */: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB (0x8516)"; +//case 0x8517 /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB */: return "GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB (0x8517)"; +//case 0x8518 /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB */: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB (0x8518)"; +//case 0x8519 /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB */: return "GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB (0x8519)"; +//case 0x851A /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB */: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB (0x851A)"; +//case 0x851B /* GL_PROXY_TEXTURE_CUBE_MAP_ARB */: return "GL_PROXY_TEXTURE_CUBE_MAP_ARB (0x851B)"; +//case 0x851C /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB */: return "GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB (0x851C)"; + + + + + +/* --------------------- GL_ARB_texture_cube_map_array --------------------- */ + + + + +//case 0x9009 /* GL_TEXTURE_CUBE_MAP_ARRAY_ARB */: return "GL_TEXTURE_CUBE_MAP_ARRAY_ARB (0x9009)"; +//case 0x900A /* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB */: return "GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB (0x900A)"; +//case 0x900B /* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB */: return "GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB (0x900B)"; +//case 0x900C /* GL_SAMPLER_CUBE_MAP_ARRAY_ARB */: return "GL_SAMPLER_CUBE_MAP_ARRAY_ARB (0x900C)"; +//case 0x900D /* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB */: return "GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB (0x900D)"; +//case 0x900E /* GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB */: return "GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB (0x900E)"; +//case 0x900F /* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB */: return "GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB (0x900F)"; + + + + + +/* ------------------------- GL_ARB_texture_env_add ------------------------ */ + + + + + + + + +/* ----------------------- GL_ARB_texture_env_combine ---------------------- */ + + + + +//case 0x84E7 /* GL_SUBTRACT_ARB */: return "GL_SUBTRACT_ARB (0x84E7)"; +//case 0x8570 /* GL_COMBINE_ARB */: return "GL_COMBINE_ARB (0x8570)"; +//case 0x8571 /* GL_COMBINE_RGB_ARB */: return "GL_COMBINE_RGB_ARB (0x8571)"; +//case 0x8572 /* GL_COMBINE_ALPHA_ARB */: return "GL_COMBINE_ALPHA_ARB (0x8572)"; +//case 0x8573 /* GL_RGB_SCALE_ARB */: return "GL_RGB_SCALE_ARB (0x8573)"; +//case 0x8574 /* GL_ADD_SIGNED_ARB */: return "GL_ADD_SIGNED_ARB (0x8574)"; +//case 0x8575 /* GL_INTERPOLATE_ARB */: return "GL_INTERPOLATE_ARB (0x8575)"; +//case 0x8576 /* GL_CONSTANT_ARB */: return "GL_CONSTANT_ARB (0x8576)"; +//case 0x8577 /* GL_PRIMARY_COLOR_ARB */: return "GL_PRIMARY_COLOR_ARB (0x8577)"; +//case 0x8578 /* GL_PREVIOUS_ARB */: return "GL_PREVIOUS_ARB (0x8578)"; +//case 0x8580 /* GL_SOURCE0_RGB_ARB */: return "GL_SOURCE0_RGB_ARB (0x8580)"; +//case 0x8581 /* GL_SOURCE1_RGB_ARB */: return "GL_SOURCE1_RGB_ARB (0x8581)"; +//case 0x8582 /* GL_SOURCE2_RGB_ARB */: return "GL_SOURCE2_RGB_ARB (0x8582)"; +//case 0x8588 /* GL_SOURCE0_ALPHA_ARB */: return "GL_SOURCE0_ALPHA_ARB (0x8588)"; +//case 0x8589 /* GL_SOURCE1_ALPHA_ARB */: return "GL_SOURCE1_ALPHA_ARB (0x8589)"; +//case 0x858A /* GL_SOURCE2_ALPHA_ARB */: return "GL_SOURCE2_ALPHA_ARB (0x858A)"; +//case 0x8590 /* GL_OPERAND0_RGB_ARB */: return "GL_OPERAND0_RGB_ARB (0x8590)"; +//case 0x8591 /* GL_OPERAND1_RGB_ARB */: return "GL_OPERAND1_RGB_ARB (0x8591)"; +//case 0x8592 /* GL_OPERAND2_RGB_ARB */: return "GL_OPERAND2_RGB_ARB (0x8592)"; +//case 0x8598 /* GL_OPERAND0_ALPHA_ARB */: return "GL_OPERAND0_ALPHA_ARB (0x8598)"; +//case 0x8599 /* GL_OPERAND1_ALPHA_ARB */: return "GL_OPERAND1_ALPHA_ARB (0x8599)"; +//case 0x859A /* GL_OPERAND2_ALPHA_ARB */: return "GL_OPERAND2_ALPHA_ARB (0x859A)"; + + + + + +/* ---------------------- GL_ARB_texture_env_crossbar ---------------------- */ + + + + + + + + +/* ------------------------ GL_ARB_texture_env_dot3 ------------------------ */ + + + + +//case 0x86AE /* GL_DOT3_RGB_ARB */: return "GL_DOT3_RGB_ARB (0x86AE)"; +//case 0x86AF /* GL_DOT3_RGBA_ARB */: return "GL_DOT3_RGBA_ARB (0x86AF)"; + + + + + +/* -------------------------- GL_ARB_texture_float ------------------------- */ + + + + +//case 0x8815 /* GL_RGB32F_ARB */: return "GL_RGB32F_ARB (0x8815)"; +//case 0x8816 /* GL_ALPHA32F_ARB */: return "GL_ALPHA32F_ARB (0x8816)"; +//case 0x8817 /* GL_INTENSITY32F_ARB */: return "GL_INTENSITY32F_ARB (0x8817)"; +//case 0x8818 /* GL_LUMINANCE32F_ARB */: return "GL_LUMINANCE32F_ARB (0x8818)"; +//case 0x8819 /* GL_LUMINANCE_ALPHA32F_ARB */: return "GL_LUMINANCE_ALPHA32F_ARB (0x8819)"; +//case 0x881A /* GL_RGBA16F_ARB */: return "GL_RGBA16F_ARB (0x881A)"; +//case 0x881B /* GL_RGB16F_ARB */: return "GL_RGB16F_ARB (0x881B)"; +//case 0x881C /* GL_ALPHA16F_ARB */: return "GL_ALPHA16F_ARB (0x881C)"; +//case 0x881D /* GL_INTENSITY16F_ARB */: return "GL_INTENSITY16F_ARB (0x881D)"; +//case 0x881E /* GL_LUMINANCE16F_ARB */: return "GL_LUMINANCE16F_ARB (0x881E)"; +//case 0x881F /* GL_LUMINANCE_ALPHA16F_ARB */: return "GL_LUMINANCE_ALPHA16F_ARB (0x881F)"; +//case 0x8C10 /* GL_TEXTURE_RED_TYPE_ARB */: return "GL_TEXTURE_RED_TYPE_ARB (0x8C10)"; +//case 0x8C11 /* GL_TEXTURE_GREEN_TYPE_ARB */: return "GL_TEXTURE_GREEN_TYPE_ARB (0x8C11)"; +//case 0x8C12 /* GL_TEXTURE_BLUE_TYPE_ARB */: return "GL_TEXTURE_BLUE_TYPE_ARB (0x8C12)"; +//case 0x8C13 /* GL_TEXTURE_ALPHA_TYPE_ARB */: return "GL_TEXTURE_ALPHA_TYPE_ARB (0x8C13)"; +//case 0x8C14 /* GL_TEXTURE_LUMINANCE_TYPE_ARB */: return "GL_TEXTURE_LUMINANCE_TYPE_ARB (0x8C14)"; +//case 0x8C15 /* GL_TEXTURE_INTENSITY_TYPE_ARB */: return "GL_TEXTURE_INTENSITY_TYPE_ARB (0x8C15)"; +//case 0x8C16 /* GL_TEXTURE_DEPTH_TYPE_ARB */: return "GL_TEXTURE_DEPTH_TYPE_ARB (0x8C16)"; +//case 0x8C17 /* GL_UNSIGNED_NORMALIZED_ARB */: return "GL_UNSIGNED_NORMALIZED_ARB (0x8C17)"; + + + + + +/* ------------------------- GL_ARB_texture_gather ------------------------- */ + + + + +//case 0x8E5E /* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB */: return "GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB (0x8E5E)"; +//case 0x8E5F /* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB */: return "GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB (0x8E5F)"; +//case 0x8F9F /* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB */: return "GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB (0x8F9F)"; + + + + + +/* --------------------- GL_ARB_texture_mirrored_repeat -------------------- */ + + + + +//case 0x8370 /* GL_MIRRORED_REPEAT_ARB */: return "GL_MIRRORED_REPEAT_ARB (0x8370)"; + + + + + +/* ----------------------- GL_ARB_texture_multisample ---------------------- */ + + + + +case 0x8E50 /* GL_SAMPLE_POSITION */: return "GL_SAMPLE_POSITION (0x8E50)"; +case 0x8E51 /* GL_SAMPLE_MASK */: return "GL_SAMPLE_MASK (0x8E51)"; +case 0x8E52 /* GL_SAMPLE_MASK_VALUE */: return "GL_SAMPLE_MASK_VALUE (0x8E52)"; +case 0x8E59 /* GL_MAX_SAMPLE_MASK_WORDS */: return "GL_MAX_SAMPLE_MASK_WORDS (0x8E59)"; +//case 0x9100 /* GL_TEXTURE_2D_MULTISAMPLE */: return "GL_TEXTURE_2D_MULTISAMPLE (0x9100)"; +case 0x9101 /* GL_PROXY_TEXTURE_2D_MULTISAMPLE */: return "GL_PROXY_TEXTURE_2D_MULTISAMPLE (0x9101)"; +//case 0x9102 /* GL_TEXTURE_2D_MULTISAMPLE_ARRAY */: return "GL_TEXTURE_2D_MULTISAMPLE_ARRAY (0x9102)"; +case 0x9103 /* GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY */: return "GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY (0x9103)"; +case 0x9104 /* GL_TEXTURE_BINDING_2D_MULTISAMPLE */: return "GL_TEXTURE_BINDING_2D_MULTISAMPLE (0x9104)"; +case 0x9105 /* GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY */: return "GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY (0x9105)"; +case 0x9106 /* GL_TEXTURE_SAMPLES */: return "GL_TEXTURE_SAMPLES (0x9106)"; +case 0x9107 /* GL_TEXTURE_FIXED_SAMPLE_LOCATIONS */: return "GL_TEXTURE_FIXED_SAMPLE_LOCATIONS (0x9107)"; +case 0x9108 /* GL_SAMPLER_2D_MULTISAMPLE */: return "GL_SAMPLER_2D_MULTISAMPLE (0x9108)"; +case 0x9109 /* GL_INT_SAMPLER_2D_MULTISAMPLE */: return "GL_INT_SAMPLER_2D_MULTISAMPLE (0x9109)"; +case 0x910A /* GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE */: return "GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE (0x910A)"; +case 0x910B /* GL_SAMPLER_2D_MULTISAMPLE_ARRAY */: return "GL_SAMPLER_2D_MULTISAMPLE_ARRAY (0x910B)"; +case 0x910C /* GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */: return "GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY (0x910C)"; +case 0x910D /* GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */: return "GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY (0x910D)"; +case 0x910E /* GL_MAX_COLOR_TEXTURE_SAMPLES */: return "GL_MAX_COLOR_TEXTURE_SAMPLES (0x910E)"; +case 0x910F /* GL_MAX_DEPTH_TEXTURE_SAMPLES */: return "GL_MAX_DEPTH_TEXTURE_SAMPLES (0x910F)"; +case 0x9110 /* GL_MAX_INTEGER_SAMPLES */: return "GL_MAX_INTEGER_SAMPLES (0x9110)"; + + + + + +/* -------------------- GL_ARB_texture_non_power_of_two -------------------- */ + + + + + + + + +/* ---------------------- GL_ARB_texture_query_levels ---------------------- */ + + + + + + + + +/* ------------------------ GL_ARB_texture_query_lod ----------------------- */ + + + + + + + + +/* ------------------------ GL_ARB_texture_rectangle ----------------------- */ + + + + +//case 0x84F5 /* GL_TEXTURE_RECTANGLE_ARB */: return "GL_TEXTURE_RECTANGLE_ARB (0x84F5)"; +//case 0x84F6 /* GL_TEXTURE_BINDING_RECTANGLE_ARB */: return "GL_TEXTURE_BINDING_RECTANGLE_ARB (0x84F6)"; +//case 0x84F7 /* GL_PROXY_TEXTURE_RECTANGLE_ARB */: return "GL_PROXY_TEXTURE_RECTANGLE_ARB (0x84F7)"; +//case 0x84F8 /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */: return "GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB (0x84F8)"; +//case 0x8B63 /* GL_SAMPLER_2D_RECT_ARB */: return "GL_SAMPLER_2D_RECT_ARB (0x8B63)"; +//case 0x8B64 /* GL_SAMPLER_2D_RECT_SHADOW_ARB */: return "GL_SAMPLER_2D_RECT_SHADOW_ARB (0x8B64)"; + + + + + +/* --------------------------- GL_ARB_texture_rg --------------------------- */ + + + + +//case 0x8225 /* GL_COMPRESSED_RED */: return "GL_COMPRESSED_RED (0x8225)"; +//case 0x8226 /* GL_COMPRESSED_RG */: return "GL_COMPRESSED_RG (0x8226)"; +case 0x8227 /* GL_RG */: return "GL_RG (0x8227)"; +case 0x8228 /* GL_RG_INTEGER */: return "GL_RG_INTEGER (0x8228)"; +case 0x8229 /* GL_R8 */: return "GL_R8 (0x8229)"; +case 0x822A /* GL_R16 */: return "GL_R16 (0x822A)"; +case 0x822B /* GL_RG8 */: return "GL_RG8 (0x822B)"; +case 0x822C /* GL_RG16 */: return "GL_RG16 (0x822C)"; +case 0x822D /* GL_R16F */: return "GL_R16F (0x822D)"; +case 0x822E /* GL_R32F */: return "GL_R32F (0x822E)"; +case 0x822F /* GL_RG16F */: return "GL_RG16F (0x822F)"; +case 0x8230 /* GL_RG32F */: return "GL_RG32F (0x8230)"; +case 0x8231 /* GL_R8I */: return "GL_R8I (0x8231)"; +case 0x8232 /* GL_R8UI */: return "GL_R8UI (0x8232)"; +case 0x8233 /* GL_R16I */: return "GL_R16I (0x8233)"; +case 0x8234 /* GL_R16UI */: return "GL_R16UI (0x8234)"; +case 0x8235 /* GL_R32I */: return "GL_R32I (0x8235)"; +case 0x8236 /* GL_R32UI */: return "GL_R32UI (0x8236)"; +case 0x8237 /* GL_RG8I */: return "GL_RG8I (0x8237)"; +case 0x8238 /* GL_RG8UI */: return "GL_RG8UI (0x8238)"; +case 0x8239 /* GL_RG16I */: return "GL_RG16I (0x8239)"; +case 0x823A /* GL_RG16UI */: return "GL_RG16UI (0x823A)"; +case 0x823B /* GL_RG32I */: return "GL_RG32I (0x823B)"; +case 0x823C /* GL_RG32UI */: return "GL_RG32UI (0x823C)"; + + + + + +/* ----------------------- GL_ARB_texture_rgb10_a2ui ----------------------- */ + + + + +//case 0x906F /* GL_RGB10_A2UI */: return "GL_RGB10_A2UI (0x906F)"; + + + + + +/* ------------------------- GL_ARB_texture_storage ------------------------ */ + + + + +case 0x912F /* GL_TEXTURE_IMMUTABLE_FORMAT */: return "GL_TEXTURE_IMMUTABLE_FORMAT (0x912F)";/* ------------------- GL_ARB_texture_storage_multisample ------------------ */ + + + + + + + + +/* ------------------------- GL_ARB_texture_swizzle ------------------------ */ + + + + +//case 0x8E42 /* GL_TEXTURE_SWIZZLE_R */: return "GL_TEXTURE_SWIZZLE_R (0x8E42)"; +//case 0x8E43 /* GL_TEXTURE_SWIZZLE_G */: return "GL_TEXTURE_SWIZZLE_G (0x8E43)"; +//case 0x8E44 /* GL_TEXTURE_SWIZZLE_B */: return "GL_TEXTURE_SWIZZLE_B (0x8E44)"; +//case 0x8E45 /* GL_TEXTURE_SWIZZLE_A */: return "GL_TEXTURE_SWIZZLE_A (0x8E45)"; +//case 0x8E46 /* GL_TEXTURE_SWIZZLE_RGBA */: return "GL_TEXTURE_SWIZZLE_RGBA (0x8E46)"; + + + + + +/* -------------------------- GL_ARB_texture_view -------------------------- */ + + + + +case 0x82DB /* GL_TEXTURE_VIEW_MIN_LEVEL */: return "GL_TEXTURE_VIEW_MIN_LEVEL (0x82DB)"; +case 0x82DC /* GL_TEXTURE_VIEW_NUM_LEVELS */: return "GL_TEXTURE_VIEW_NUM_LEVELS (0x82DC)"; +case 0x82DD /* GL_TEXTURE_VIEW_MIN_LAYER */: return "GL_TEXTURE_VIEW_MIN_LAYER (0x82DD)"; +case 0x82DE /* GL_TEXTURE_VIEW_NUM_LAYERS */: return "GL_TEXTURE_VIEW_NUM_LAYERS (0x82DE)"; +case 0x82DF /* GL_TEXTURE_IMMUTABLE_LEVELS */: return "GL_TEXTURE_IMMUTABLE_LEVELS (0x82DF)";/* --------------------------- GL_ARB_timer_query -------------------------- */ + + + + +case 0x88BF /* GL_TIME_ELAPSED */: return "GL_TIME_ELAPSED (0x88BF)"; +case 0x8E28 /* GL_TIMESTAMP */: return "GL_TIMESTAMP (0x8E28)"; + + + +/* ----------------------- GL_ARB_transform_feedback2 ---------------------- */ + + + + +case 0x8E22 /* GL_TRANSFORM_FEEDBACK */: return "GL_TRANSFORM_FEEDBACK (0x8E22)"; +case 0x8E23 /* GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */: return "GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED (0x8E23)"; +case 0x8E24 /* GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */: return "GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE (0x8E24)"; +case 0x8E25 /* GL_TRANSFORM_FEEDBACK_BINDING */: return "GL_TRANSFORM_FEEDBACK_BINDING (0x8E25)"; + +/* ----------------------- GL_ARB_transform_feedback3 ---------------------- */ + + + + +case 0x8E70 /* GL_MAX_TRANSFORM_FEEDBACK_BUFFERS */: return "GL_MAX_TRANSFORM_FEEDBACK_BUFFERS (0x8E70)"; +//case 0x8E71 /* GL_MAX_VERTEX_STREAMS */: return "GL_MAX_VERTEX_STREAMS (0x8E71)"; + + + + + +/* ------------------ GL_ARB_transform_feedback_instanced ------------------ */ + + + + +/* ------------------------ GL_ARB_transpose_matrix ------------------------ */ + + + + +//case 0x84E3 /* GL_TRANSPOSE_MODELVIEW_MATRIX_ARB */: return "GL_TRANSPOSE_MODELVIEW_MATRIX_ARB (0x84E3)"; +//case 0x84E4 /* GL_TRANSPOSE_PROJECTION_MATRIX_ARB */: return "GL_TRANSPOSE_PROJECTION_MATRIX_ARB (0x84E4)"; +//case 0x84E5 /* GL_TRANSPOSE_TEXTURE_MATRIX_ARB */: return "GL_TRANSPOSE_TEXTURE_MATRIX_ARB (0x84E5)"; +//case 0x84E6 /* GL_TRANSPOSE_COLOR_MATRIX_ARB */: return "GL_TRANSPOSE_COLOR_MATRIX_ARB (0x84E6)"; + + + + + +/* ---------------------- GL_ARB_uniform_buffer_object --------------------- */ + + + + +case 0x8A11 /* GL_UNIFORM_BUFFER */: return "GL_UNIFORM_BUFFER (0x8A11)"; +case 0x8A28 /* GL_UNIFORM_BUFFER_BINDING */: return "GL_UNIFORM_BUFFER_BINDING (0x8A28)"; +case 0x8A29 /* GL_UNIFORM_BUFFER_START */: return "GL_UNIFORM_BUFFER_START (0x8A29)"; +case 0x8A2A /* GL_UNIFORM_BUFFER_SIZE */: return "GL_UNIFORM_BUFFER_SIZE (0x8A2A)"; +case 0x8A2B /* GL_MAX_VERTEX_UNIFORM_BLOCKS */: return "GL_MAX_VERTEX_UNIFORM_BLOCKS (0x8A2B)"; +case 0x8A2C /* GL_MAX_GEOMETRY_UNIFORM_BLOCKS */: return "GL_MAX_GEOMETRY_UNIFORM_BLOCKS (0x8A2C)"; +case 0x8A2D /* GL_MAX_FRAGMENT_UNIFORM_BLOCKS */: return "GL_MAX_FRAGMENT_UNIFORM_BLOCKS (0x8A2D)"; +case 0x8A2E /* GL_MAX_COMBINED_UNIFORM_BLOCKS */: return "GL_MAX_COMBINED_UNIFORM_BLOCKS (0x8A2E)"; +case 0x8A2F /* GL_MAX_UNIFORM_BUFFER_BINDINGS */: return "GL_MAX_UNIFORM_BUFFER_BINDINGS (0x8A2F)"; +case 0x8A30 /* GL_MAX_UNIFORM_BLOCK_SIZE */: return "GL_MAX_UNIFORM_BLOCK_SIZE (0x8A30)"; +case 0x8A31 /* GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS */: return "GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS (0x8A31)"; +case 0x8A32 /* GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS */: return "GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS (0x8A32)"; +case 0x8A33 /* GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS */: return "GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS (0x8A33)"; +case 0x8A34 /* GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT */: return "GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT (0x8A34)"; +case 0x8A35 /* GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH */: return "GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH (0x8A35)"; +case 0x8A36 /* GL_ACTIVE_UNIFORM_BLOCKS */: return "GL_ACTIVE_UNIFORM_BLOCKS (0x8A36)"; +case 0x8A37 /* GL_UNIFORM_TYPE */: return "GL_UNIFORM_TYPE (0x8A37)"; +case 0x8A38 /* GL_UNIFORM_SIZE */: return "GL_UNIFORM_SIZE (0x8A38)"; +case 0x8A39 /* GL_UNIFORM_NAME_LENGTH */: return "GL_UNIFORM_NAME_LENGTH (0x8A39)"; +case 0x8A3A /* GL_UNIFORM_BLOCK_INDEX */: return "GL_UNIFORM_BLOCK_INDEX (0x8A3A)"; +case 0x8A3B /* GL_UNIFORM_OFFSET */: return "GL_UNIFORM_OFFSET (0x8A3B)"; +case 0x8A3C /* GL_UNIFORM_ARRAY_STRIDE */: return "GL_UNIFORM_ARRAY_STRIDE (0x8A3C)"; +case 0x8A3D /* GL_UNIFORM_MATRIX_STRIDE */: return "GL_UNIFORM_MATRIX_STRIDE (0x8A3D)"; +case 0x8A3E /* GL_UNIFORM_IS_ROW_MAJOR */: return "GL_UNIFORM_IS_ROW_MAJOR (0x8A3E)"; +case 0x8A3F /* GL_UNIFORM_BLOCK_BINDING */: return "GL_UNIFORM_BLOCK_BINDING (0x8A3F)"; +case 0x8A40 /* GL_UNIFORM_BLOCK_DATA_SIZE */: return "GL_UNIFORM_BLOCK_DATA_SIZE (0x8A40)"; +case 0x8A41 /* GL_UNIFORM_BLOCK_NAME_LENGTH */: return "GL_UNIFORM_BLOCK_NAME_LENGTH (0x8A41)"; +case 0x8A42 /* GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS */: return "GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS (0x8A42)"; +case 0x8A43 /* GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES */: return "GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES (0x8A43)"; +case 0x8A44 /* GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER */: return "GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER (0x8A44)"; +case 0x8A45 /* GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER */: return "GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER (0x8A45)"; +case 0x8A46 /* GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER */: return "GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER (0x8A46)"; +//case 0xFFFFFFFF /* GL_INVALID_INDEX */: return "GL_INVALID_INDEX (0xFFFFFFFF)"; + + + + + + + +/* ------------------------ GL_ARB_vertex_array_bgra ----------------------- */ + + + + +//case 0x80E1 /* GL_BGRA */: return "GL_BGRA (0x80E1)"; + + + + + +/* ----------------------- GL_ARB_vertex_array_object ---------------------- */ + + + + +//case 0x85B5 /* GL_VERTEX_ARRAY_BINDING */: return "GL_VERTEX_ARRAY_BINDING (0x85B5)"; + + + + + +/* ----------------------- GL_ARB_vertex_attrib_64bit ---------------------- */ + + + + +//case 0x8F46 /* GL_DOUBLE_MAT2 */: return "GL_DOUBLE_MAT2 (0x8F46)"; +//case 0x8F47 /* GL_DOUBLE_MAT3 */: return "GL_DOUBLE_MAT3 (0x8F47)"; +//case 0x8F48 /* GL_DOUBLE_MAT4 */: return "GL_DOUBLE_MAT4 (0x8F48)"; +//case 0x8FFC /* GL_DOUBLE_VEC2 */: return "GL_DOUBLE_VEC2 (0x8FFC)"; +//case 0x8FFD /* GL_DOUBLE_VEC3 */: return "GL_DOUBLE_VEC3 (0x8FFD)"; +//case 0x8FFE /* GL_DOUBLE_VEC4 */: return "GL_DOUBLE_VEC4 (0x8FFE)"; + + + + + + + +/* ---------------------- GL_ARB_vertex_attrib_binding --------------------- */ + + + + +case 0x82D4 /* GL_VERTEX_ATTRIB_BINDING */: return "GL_VERTEX_ATTRIB_BINDING (0x82D4)"; +case 0x82D5 /* GL_VERTEX_ATTRIB_RELATIVE_OFFSET */: return "GL_VERTEX_ATTRIB_RELATIVE_OFFSET (0x82D5)"; +case 0x82D6 /* GL_VERTEX_BINDING_DIVISOR */: return "GL_VERTEX_BINDING_DIVISOR (0x82D6)"; +case 0x82D7 /* GL_VERTEX_BINDING_OFFSET */: return "GL_VERTEX_BINDING_OFFSET (0x82D7)"; +case 0x82D8 /* GL_VERTEX_BINDING_STRIDE */: return "GL_VERTEX_BINDING_STRIDE (0x82D8)"; +case 0x82D9 /* GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET */: return "GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET (0x82D9)"; +case 0x82DA /* GL_MAX_VERTEX_ATTRIB_BINDINGS */: return "GL_MAX_VERTEX_ATTRIB_BINDINGS (0x82DA)";/* -------------------------- GL_ARB_vertex_blend -------------------------- */ + + + + +//case 0x1700 /* GL_MODELVIEW0_ARB */: return "GL_MODELVIEW0_ARB (0x1700)"; +case 0x850A /* GL_MODELVIEW1_ARB */: return "GL_MODELVIEW1_ARB (0x850A)"; +case 0x86A4 /* GL_MAX_VERTEX_UNITS_ARB */: return "GL_MAX_VERTEX_UNITS_ARB (0x86A4)"; +case 0x86A5 /* GL_ACTIVE_VERTEX_UNITS_ARB */: return "GL_ACTIVE_VERTEX_UNITS_ARB (0x86A5)"; +case 0x86A6 /* GL_WEIGHT_SUM_UNITY_ARB */: return "GL_WEIGHT_SUM_UNITY_ARB (0x86A6)"; +case 0x86A7 /* GL_VERTEX_BLEND_ARB */: return "GL_VERTEX_BLEND_ARB (0x86A7)"; +case 0x86A8 /* GL_CURRENT_WEIGHT_ARB */: return "GL_CURRENT_WEIGHT_ARB (0x86A8)"; +case 0x86A9 /* GL_WEIGHT_ARRAY_TYPE_ARB */: return "GL_WEIGHT_ARRAY_TYPE_ARB (0x86A9)"; +case 0x86AA /* GL_WEIGHT_ARRAY_STRIDE_ARB */: return "GL_WEIGHT_ARRAY_STRIDE_ARB (0x86AA)"; +case 0x86AB /* GL_WEIGHT_ARRAY_SIZE_ARB */: return "GL_WEIGHT_ARRAY_SIZE_ARB (0x86AB)"; +case 0x86AC /* GL_WEIGHT_ARRAY_POINTER_ARB */: return "GL_WEIGHT_ARRAY_POINTER_ARB (0x86AC)"; +case 0x86AD /* GL_WEIGHT_ARRAY_ARB */: return "GL_WEIGHT_ARRAY_ARB (0x86AD)"; +case 0x8722 /* GL_MODELVIEW2_ARB */: return "GL_MODELVIEW2_ARB (0x8722)"; +case 0x8723 /* GL_MODELVIEW3_ARB */: return "GL_MODELVIEW3_ARB (0x8723)"; +case 0x8724 /* GL_MODELVIEW4_ARB */: return "GL_MODELVIEW4_ARB (0x8724)"; +case 0x8725 /* GL_MODELVIEW5_ARB */: return "GL_MODELVIEW5_ARB (0x8725)"; +case 0x8726 /* GL_MODELVIEW6_ARB */: return "GL_MODELVIEW6_ARB (0x8726)"; +case 0x8727 /* GL_MODELVIEW7_ARB */: return "GL_MODELVIEW7_ARB (0x8727)"; +case 0x8728 /* GL_MODELVIEW8_ARB */: return "GL_MODELVIEW8_ARB (0x8728)"; +case 0x8729 /* GL_MODELVIEW9_ARB */: return "GL_MODELVIEW9_ARB (0x8729)"; +case 0x872A /* GL_MODELVIEW10_ARB */: return "GL_MODELVIEW10_ARB (0x872A)"; +case 0x872B /* GL_MODELVIEW11_ARB */: return "GL_MODELVIEW11_ARB (0x872B)"; +case 0x872C /* GL_MODELVIEW12_ARB */: return "GL_MODELVIEW12_ARB (0x872C)"; +case 0x872D /* GL_MODELVIEW13_ARB */: return "GL_MODELVIEW13_ARB (0x872D)"; +case 0x872E /* GL_MODELVIEW14_ARB */: return "GL_MODELVIEW14_ARB (0x872E)"; +case 0x872F /* GL_MODELVIEW15_ARB */: return "GL_MODELVIEW15_ARB (0x872F)"; +case 0x8730 /* GL_MODELVIEW16_ARB */: return "GL_MODELVIEW16_ARB (0x8730)"; +case 0x8731 /* GL_MODELVIEW17_ARB */: return "GL_MODELVIEW17_ARB (0x8731)"; +case 0x8732 /* GL_MODELVIEW18_ARB */: return "GL_MODELVIEW18_ARB (0x8732)"; +case 0x8733 /* GL_MODELVIEW19_ARB */: return "GL_MODELVIEW19_ARB (0x8733)"; +case 0x8734 /* GL_MODELVIEW20_ARB */: return "GL_MODELVIEW20_ARB (0x8734)"; +case 0x8735 /* GL_MODELVIEW21_ARB */: return "GL_MODELVIEW21_ARB (0x8735)"; +case 0x8736 /* GL_MODELVIEW22_ARB */: return "GL_MODELVIEW22_ARB (0x8736)"; +case 0x8737 /* GL_MODELVIEW23_ARB */: return "GL_MODELVIEW23_ARB (0x8737)"; +case 0x8738 /* GL_MODELVIEW24_ARB */: return "GL_MODELVIEW24_ARB (0x8738)"; +case 0x8739 /* GL_MODELVIEW25_ARB */: return "GL_MODELVIEW25_ARB (0x8739)"; +case 0x873A /* GL_MODELVIEW26_ARB */: return "GL_MODELVIEW26_ARB (0x873A)"; +case 0x873B /* GL_MODELVIEW27_ARB */: return "GL_MODELVIEW27_ARB (0x873B)"; +case 0x873C /* GL_MODELVIEW28_ARB */: return "GL_MODELVIEW28_ARB (0x873C)"; +case 0x873D /* GL_MODELVIEW29_ARB */: return "GL_MODELVIEW29_ARB (0x873D)"; +case 0x873E /* GL_MODELVIEW30_ARB */: return "GL_MODELVIEW30_ARB (0x873E)"; +case 0x873F /* GL_MODELVIEW31_ARB */: return "GL_MODELVIEW31_ARB (0x873F)"; + + + + + + + +/* ---------------------- GL_ARB_vertex_buffer_object ---------------------- */ + + + + +//case 0x8764 /* GL_BUFFER_SIZE_ARB */: return "GL_BUFFER_SIZE_ARB (0x8764)"; +//case 0x8765 /* GL_BUFFER_USAGE_ARB */: return "GL_BUFFER_USAGE_ARB (0x8765)"; +//case 0x8892 /* GL_ARRAY_BUFFER_ARB */: return "GL_ARRAY_BUFFER_ARB (0x8892)"; +//case 0x8893 /* GL_ELEMENT_ARRAY_BUFFER_ARB */: return "GL_ELEMENT_ARRAY_BUFFER_ARB (0x8893)"; +//case 0x8894 /* GL_ARRAY_BUFFER_BINDING_ARB */: return "GL_ARRAY_BUFFER_BINDING_ARB (0x8894)"; +//case 0x8895 /* GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB */: return "GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB (0x8895)"; +//case 0x8896 /* GL_VERTEX_ARRAY_BUFFER_BINDING_ARB */: return "GL_VERTEX_ARRAY_BUFFER_BINDING_ARB (0x8896)"; +//case 0x8897 /* GL_NORMAL_ARRAY_BUFFER_BINDING_ARB */: return "GL_NORMAL_ARRAY_BUFFER_BINDING_ARB (0x8897)"; +//case 0x8898 /* GL_COLOR_ARRAY_BUFFER_BINDING_ARB */: return "GL_COLOR_ARRAY_BUFFER_BINDING_ARB (0x8898)"; +//case 0x8899 /* GL_INDEX_ARRAY_BUFFER_BINDING_ARB */: return "GL_INDEX_ARRAY_BUFFER_BINDING_ARB (0x8899)"; +//case 0x889A /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB */: return "GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB (0x889A)"; +//case 0x889B /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB */: return "GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB (0x889B)"; +//case 0x889C /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB */: return "GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB (0x889C)"; +//case 0x889D /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB */: return "GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB (0x889D)"; +//case 0x889E /* GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB */: return "GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB (0x889E)"; +//case 0x889F /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB */: return "GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB (0x889F)"; +//case 0x88B8 /* GL_READ_ONLY_ARB */: return "GL_READ_ONLY_ARB (0x88B8)"; +//case 0x88B9 /* GL_WRITE_ONLY_ARB */: return "GL_WRITE_ONLY_ARB (0x88B9)"; +//case 0x88BA /* GL_READ_WRITE_ARB */: return "GL_READ_WRITE_ARB (0x88BA)"; +//case 0x88BB /* GL_BUFFER_ACCESS_ARB */: return "GL_BUFFER_ACCESS_ARB (0x88BB)"; +//case 0x88BC /* GL_BUFFER_MAPPED_ARB */: return "GL_BUFFER_MAPPED_ARB (0x88BC)"; +//case 0x88BD /* GL_BUFFER_MAP_POINTER_ARB */: return "GL_BUFFER_MAP_POINTER_ARB (0x88BD)"; +//case 0x88E0 /* GL_STREAM_DRAW_ARB */: return "GL_STREAM_DRAW_ARB (0x88E0)"; +//case 0x88E1 /* GL_STREAM_READ_ARB */: return "GL_STREAM_READ_ARB (0x88E1)"; +//case 0x88E2 /* GL_STREAM_COPY_ARB */: return "GL_STREAM_COPY_ARB (0x88E2)"; +//case 0x88E4 /* GL_STATIC_DRAW_ARB */: return "GL_STATIC_DRAW_ARB (0x88E4)"; +//case 0x88E5 /* GL_STATIC_READ_ARB */: return "GL_STATIC_READ_ARB (0x88E5)"; +//case 0x88E6 /* GL_STATIC_COPY_ARB */: return "GL_STATIC_COPY_ARB (0x88E6)"; +//case 0x88E8 /* GL_DYNAMIC_DRAW_ARB */: return "GL_DYNAMIC_DRAW_ARB (0x88E8)"; +//case 0x88E9 /* GL_DYNAMIC_READ_ARB */: return "GL_DYNAMIC_READ_ARB (0x88E9)"; +//case 0x88EA /* GL_DYNAMIC_COPY_ARB */: return "GL_DYNAMIC_COPY_ARB (0x88EA)"; + + +/* ------------------------- GL_ARB_vertex_program ------------------------- */ + + + + +//case 0x8458 /* GL_COLOR_SUM_ARB */: return "GL_COLOR_SUM_ARB (0x8458)"; +case 0x8620 /* GL_VERTEX_PROGRAM_ARB */: return "GL_VERTEX_PROGRAM_ARB (0x8620)"; +//case 0x8622 /* GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB */: return "GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB (0x8622)"; +//case 0x8623 /* GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB */: return "GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB (0x8623)"; +//case 0x8624 /* GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB */: return "GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB (0x8624)"; +//case 0x8625 /* GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB */: return "GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB (0x8625)"; +//case 0x8626 /* GL_CURRENT_VERTEX_ATTRIB_ARB */: return "GL_CURRENT_VERTEX_ATTRIB_ARB (0x8626)"; +case 0x8627 /* GL_PROGRAM_LENGTH_ARB */: return "GL_PROGRAM_LENGTH_ARB (0x8627)"; +case 0x8628 /* GL_PROGRAM_STRING_ARB */: return "GL_PROGRAM_STRING_ARB (0x8628)"; +case 0x862E /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */: return "GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB (0x862E)"; +case 0x862F /* GL_MAX_PROGRAM_MATRICES_ARB */: return "GL_MAX_PROGRAM_MATRICES_ARB (0x862F)"; +case 0x8640 /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */: return "GL_CURRENT_MATRIX_STACK_DEPTH_ARB (0x8640)"; +case 0x8641 /* GL_CURRENT_MATRIX_ARB */: return "GL_CURRENT_MATRIX_ARB (0x8641)"; +//case 0x8642 /* GL_VERTEX_PROGRAM_POINT_SIZE_ARB */: return "GL_VERTEX_PROGRAM_POINT_SIZE_ARB (0x8642)"; +//case 0x8643 /* GL_VERTEX_PROGRAM_TWO_SIDE_ARB */: return "GL_VERTEX_PROGRAM_TWO_SIDE_ARB (0x8643)"; +//case 0x8645 /* GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB */: return "GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB (0x8645)"; +case 0x864B /* GL_PROGRAM_ERROR_POSITION_ARB */: return "GL_PROGRAM_ERROR_POSITION_ARB (0x864B)"; +case 0x8677 /* GL_PROGRAM_BINDING_ARB */: return "GL_PROGRAM_BINDING_ARB (0x8677)"; +//case 0x8869 /* GL_MAX_VERTEX_ATTRIBS_ARB */: return "GL_MAX_VERTEX_ATTRIBS_ARB (0x8869)"; +//case 0x886A /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB */: return "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB (0x886A)"; +case 0x8874 /* GL_PROGRAM_ERROR_STRING_ARB */: return "GL_PROGRAM_ERROR_STRING_ARB (0x8874)"; +case 0x8875 /* GL_PROGRAM_FORMAT_ASCII_ARB */: return "GL_PROGRAM_FORMAT_ASCII_ARB (0x8875)"; +case 0x8876 /* GL_PROGRAM_FORMAT_ARB */: return "GL_PROGRAM_FORMAT_ARB (0x8876)"; +case 0x88A4 /* GL_PROGRAM_TEMPORARIES_ARB */: return "GL_PROGRAM_TEMPORARIES_ARB (0x88A4)"; +case 0x88A5 /* GL_MAX_PROGRAM_TEMPORARIES_ARB */: return "GL_MAX_PROGRAM_TEMPORARIES_ARB (0x88A5)"; +case 0x88A6 /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */: return "GL_PROGRAM_NATIVE_TEMPORARIES_ARB (0x88A6)"; +case 0x88A7 /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */: return "GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB (0x88A7)"; +case 0x88A8 /* GL_PROGRAM_PARAMETERS_ARB */: return "GL_PROGRAM_PARAMETERS_ARB (0x88A8)"; +case 0x88A9 /* GL_MAX_PROGRAM_PARAMETERS_ARB */: return "GL_MAX_PROGRAM_PARAMETERS_ARB (0x88A9)"; +case 0x88AA /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */: return "GL_PROGRAM_NATIVE_PARAMETERS_ARB (0x88AA)"; +case 0x88AB /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */: return "GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB (0x88AB)"; +case 0x88AC /* GL_PROGRAM_ATTRIBS_ARB */: return "GL_PROGRAM_ATTRIBS_ARB (0x88AC)"; +case 0x88AD /* GL_MAX_PROGRAM_ATTRIBS_ARB */: return "GL_MAX_PROGRAM_ATTRIBS_ARB (0x88AD)"; +case 0x88AE /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */: return "GL_PROGRAM_NATIVE_ATTRIBS_ARB (0x88AE)"; +case 0x88AF /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */: return "GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB (0x88AF)"; +case 0x88B0 /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */: return "GL_PROGRAM_ADDRESS_REGISTERS_ARB (0x88B0)"; +case 0x88B1 /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */: return "GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB (0x88B1)"; +case 0x88B2 /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */: return "GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB (0x88B2)"; +case 0x88B3 /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */: return "GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB (0x88B3)"; +case 0x88B4 /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */: return "GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB (0x88B4)"; +case 0x88B5 /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */: return "GL_MAX_PROGRAM_ENV_PARAMETERS_ARB (0x88B5)"; +case 0x88B6 /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */: return "GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB (0x88B6)"; +case 0x88B7 /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */: return "GL_TRANSPOSE_CURRENT_MATRIX_ARB (0x88B7)"; +case 0x88C0 /* GL_MATRIX0_ARB */: return "GL_MATRIX0_ARB (0x88C0)"; +case 0x88C1 /* GL_MATRIX1_ARB */: return "GL_MATRIX1_ARB (0x88C1)"; +case 0x88C2 /* GL_MATRIX2_ARB */: return "GL_MATRIX2_ARB (0x88C2)"; +case 0x88C3 /* GL_MATRIX3_ARB */: return "GL_MATRIX3_ARB (0x88C3)"; +case 0x88C4 /* GL_MATRIX4_ARB */: return "GL_MATRIX4_ARB (0x88C4)"; +case 0x88C5 /* GL_MATRIX5_ARB */: return "GL_MATRIX5_ARB (0x88C5)"; +case 0x88C6 /* GL_MATRIX6_ARB */: return "GL_MATRIX6_ARB (0x88C6)"; +case 0x88C7 /* GL_MATRIX7_ARB */: return "GL_MATRIX7_ARB (0x88C7)"; +case 0x88C8 /* GL_MATRIX8_ARB */: return "GL_MATRIX8_ARB (0x88C8)"; +case 0x88C9 /* GL_MATRIX9_ARB */: return "GL_MATRIX9_ARB (0x88C9)"; +case 0x88CA /* GL_MATRIX10_ARB */: return "GL_MATRIX10_ARB (0x88CA)"; +case 0x88CB /* GL_MATRIX11_ARB */: return "GL_MATRIX11_ARB (0x88CB)"; +case 0x88CC /* GL_MATRIX12_ARB */: return "GL_MATRIX12_ARB (0x88CC)"; +case 0x88CD /* GL_MATRIX13_ARB */: return "GL_MATRIX13_ARB (0x88CD)"; +case 0x88CE /* GL_MATRIX14_ARB */: return "GL_MATRIX14_ARB (0x88CE)"; +case 0x88CF /* GL_MATRIX15_ARB */: return "GL_MATRIX15_ARB (0x88CF)"; +case 0x88D0 /* GL_MATRIX16_ARB */: return "GL_MATRIX16_ARB (0x88D0)"; +case 0x88D1 /* GL_MATRIX17_ARB */: return "GL_MATRIX17_ARB (0x88D1)"; +case 0x88D2 /* GL_MATRIX18_ARB */: return "GL_MATRIX18_ARB (0x88D2)"; +case 0x88D3 /* GL_MATRIX19_ARB */: return "GL_MATRIX19_ARB (0x88D3)"; +case 0x88D4 /* GL_MATRIX20_ARB */: return "GL_MATRIX20_ARB (0x88D4)"; +case 0x88D5 /* GL_MATRIX21_ARB */: return "GL_MATRIX21_ARB (0x88D5)"; +case 0x88D6 /* GL_MATRIX22_ARB */: return "GL_MATRIX22_ARB (0x88D6)"; +case 0x88D7 /* GL_MATRIX23_ARB */: return "GL_MATRIX23_ARB (0x88D7)"; +case 0x88D8 /* GL_MATRIX24_ARB */: return "GL_MATRIX24_ARB (0x88D8)"; +case 0x88D9 /* GL_MATRIX25_ARB */: return "GL_MATRIX25_ARB (0x88D9)"; +case 0x88DA /* GL_MATRIX26_ARB */: return "GL_MATRIX26_ARB (0x88DA)"; +case 0x88DB /* GL_MATRIX27_ARB */: return "GL_MATRIX27_ARB (0x88DB)"; +case 0x88DC /* GL_MATRIX28_ARB */: return "GL_MATRIX28_ARB (0x88DC)"; +case 0x88DD /* GL_MATRIX29_ARB */: return "GL_MATRIX29_ARB (0x88DD)"; +case 0x88DE /* GL_MATRIX30_ARB */: return "GL_MATRIX30_ARB (0x88DE)"; +case 0x88DF /* GL_MATRIX31_ARB */: return "GL_MATRIX31_ARB (0x88DF)"; + +/* -------------------------- GL_ARB_vertex_shader ------------------------- */ + + + + +//case 0x8B31 /* GL_VERTEX_SHADER_ARB */: return "GL_VERTEX_SHADER_ARB (0x8B31)"; +//case 0x8B4A /* GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB */: return "GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB (0x8B4A)"; +//case 0x8B4B /* GL_MAX_VARYING_FLOATS_ARB */: return "GL_MAX_VARYING_FLOATS_ARB (0x8B4B)"; +//case 0x8B4C /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */: return "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB (0x8B4C)"; +//case 0x8B4D /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB */: return "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB (0x8B4D)"; +//case 0x8B89 /* GL_OBJECT_ACTIVE_ATTRIBUTES_ARB */: return "GL_OBJECT_ACTIVE_ATTRIBUTES_ARB (0x8B89)"; +//case 0x8B8A /* GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB */: return "GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB (0x8B8A)"; + + + +/* ------------------- GL_ARB_vertex_type_2_10_10_10_rev ------------------- */ + + + + +//case 0x8368 /* GL_UNSIGNED_INT_2_10_10_10_REV */: return "GL_UNSIGNED_INT_2_10_10_10_REV (0x8368)"; +case 0x8D9F /* GL_INT_2_10_10_10_REV */: return "GL_INT_2_10_10_10_REV (0x8D9F)"; + + + +/* ------------------------- GL_ARB_viewport_array ------------------------- */ + + + + +//case 0x0B70 /* GL_DEPTH_RANGE */: return "GL_DEPTH_RANGE (0x0B70)"; +//case 0x0BA2 /* GL_VIEWPORT */: return "GL_VIEWPORT (0x0BA2)"; +//case 0x0C10 /* GL_SCISSOR_BOX */: return "GL_SCISSOR_BOX (0x0C10)"; +//case 0x0C11 /* GL_SCISSOR_TEST */: return "GL_SCISSOR_TEST (0x0C11)"; +case 0x825B /* GL_MAX_VIEWPORTS */: return "GL_MAX_VIEWPORTS (0x825B)"; +case 0x825C /* GL_VIEWPORT_SUBPIXEL_BITS */: return "GL_VIEWPORT_SUBPIXEL_BITS (0x825C)"; +case 0x825D /* GL_VIEWPORT_BOUNDS_RANGE */: return "GL_VIEWPORT_BOUNDS_RANGE (0x825D)"; +case 0x825E /* GL_LAYER_PROVOKING_VERTEX */: return "GL_LAYER_PROVOKING_VERTEX (0x825E)"; +case 0x825F /* GL_VIEWPORT_INDEX_PROVOKING_VERTEX */: return "GL_VIEWPORT_INDEX_PROVOKING_VERTEX (0x825F)"; +case 0x8260 /* GL_UNDEFINED_VERTEX */: return "GL_UNDEFINED_VERTEX (0x8260)"; +//case 0x8E4D /* GL_FIRST_VERTEX_CONVENTION */: return "GL_FIRST_VERTEX_CONVENTION (0x8E4D)"; +//case 0x8E4E /* GL_LAST_VERTEX_CONVENTION */: return "GL_LAST_VERTEX_CONVENTION (0x8E4E)"; +//case 0x8E4F /* GL_PROVOKING_VERTEX */: return "GL_PROVOKING_VERTEX (0x8E4F)"; + + + + + + + +/* --------------------------- GL_ARB_window_pos --------------------------- */ + + +/* ------------------------- GL_ATIX_point_sprites ------------------------- */ + + + + +case 0x60B0 /* GL_TEXTURE_POINT_MODE_ATIX */: return "GL_TEXTURE_POINT_MODE_ATIX (0x60B0)"; +case 0x60B1 /* GL_TEXTURE_POINT_ONE_COORD_ATIX */: return "GL_TEXTURE_POINT_ONE_COORD_ATIX (0x60B1)"; +case 0x60B2 /* GL_TEXTURE_POINT_SPRITE_ATIX */: return "GL_TEXTURE_POINT_SPRITE_ATIX (0x60B2)"; +case 0x60B3 /* GL_POINT_SPRITE_CULL_MODE_ATIX */: return "GL_POINT_SPRITE_CULL_MODE_ATIX (0x60B3)"; +case 0x60B4 /* GL_POINT_SPRITE_CULL_CENTER_ATIX */: return "GL_POINT_SPRITE_CULL_CENTER_ATIX (0x60B4)"; +case 0x60B5 /* GL_POINT_SPRITE_CULL_CLIP_ATIX */: return "GL_POINT_SPRITE_CULL_CLIP_ATIX (0x60B5)"; + + + + + +/* ---------------------- GL_ATIX_texture_env_combine3 --------------------- */ + + + + +case 0x8744 /* GL_MODULATE_ADD_ATIX */: return "GL_MODULATE_ADD_ATIX (0x8744)"; +case 0x8745 /* GL_MODULATE_SIGNED_ADD_ATIX */: return "GL_MODULATE_SIGNED_ADD_ATIX (0x8745)"; +case 0x8746 /* GL_MODULATE_SUBTRACT_ATIX */: return "GL_MODULATE_SUBTRACT_ATIX (0x8746)"; + + + + + +/* ----------------------- GL_ATIX_texture_env_route ----------------------- */ + + + + +case 0x8747 /* GL_SECONDARY_COLOR_ATIX */: return "GL_SECONDARY_COLOR_ATIX (0x8747)"; +case 0x8748 /* GL_TEXTURE_OUTPUT_RGB_ATIX */: return "GL_TEXTURE_OUTPUT_RGB_ATIX (0x8748)"; +case 0x8749 /* GL_TEXTURE_OUTPUT_ALPHA_ATIX */: return "GL_TEXTURE_OUTPUT_ALPHA_ATIX (0x8749)"; + + + + + +/* ---------------- GL_ATIX_vertex_shader_output_point_size ---------------- */ + + + + +case 0x610E /* GL_OUTPUT_POINT_SIZE_ATIX */: return "GL_OUTPUT_POINT_SIZE_ATIX (0x610E)"; + + + + + +/* -------------------------- GL_ATI_draw_buffers -------------------------- */ + + + + +//case 0x8824 /* GL_MAX_DRAW_BUFFERS_ATI */: return "GL_MAX_DRAW_BUFFERS_ATI (0x8824)"; +//case 0x8825 /* GL_DRAW_BUFFER0_ATI */: return "GL_DRAW_BUFFER0_ATI (0x8825)"; +//case 0x8826 /* GL_DRAW_BUFFER1_ATI */: return "GL_DRAW_BUFFER1_ATI (0x8826)"; +//case 0x8827 /* GL_DRAW_BUFFER2_ATI */: return "GL_DRAW_BUFFER2_ATI (0x8827)"; +//case 0x8828 /* GL_DRAW_BUFFER3_ATI */: return "GL_DRAW_BUFFER3_ATI (0x8828)"; +//case 0x8829 /* GL_DRAW_BUFFER4_ATI */: return "GL_DRAW_BUFFER4_ATI (0x8829)"; +//case 0x882A /* GL_DRAW_BUFFER5_ATI */: return "GL_DRAW_BUFFER5_ATI (0x882A)"; +//case 0x882B /* GL_DRAW_BUFFER6_ATI */: return "GL_DRAW_BUFFER6_ATI (0x882B)"; +//case 0x882C /* GL_DRAW_BUFFER7_ATI */: return "GL_DRAW_BUFFER7_ATI (0x882C)"; +//case 0x882D /* GL_DRAW_BUFFER8_ATI */: return "GL_DRAW_BUFFER8_ATI (0x882D)"; +//case 0x882E /* GL_DRAW_BUFFER9_ATI */: return "GL_DRAW_BUFFER9_ATI (0x882E)"; +//case 0x882F /* GL_DRAW_BUFFER10_ATI */: return "GL_DRAW_BUFFER10_ATI (0x882F)"; +//case 0x8830 /* GL_DRAW_BUFFER11_ATI */: return "GL_DRAW_BUFFER11_ATI (0x8830)"; +//case 0x8831 /* GL_DRAW_BUFFER12_ATI */: return "GL_DRAW_BUFFER12_ATI (0x8831)"; +//case 0x8832 /* GL_DRAW_BUFFER13_ATI */: return "GL_DRAW_BUFFER13_ATI (0x8832)"; +//case 0x8833 /* GL_DRAW_BUFFER14_ATI */: return "GL_DRAW_BUFFER14_ATI (0x8833)"; +//case 0x8834 /* GL_DRAW_BUFFER15_ATI */: return "GL_DRAW_BUFFER15_ATI (0x8834)";/* -------------------------- GL_ATI_element_array ------------------------- */ + + + + +case 0x8768 /* GL_ELEMENT_ARRAY_ATI */: return "GL_ELEMENT_ARRAY_ATI (0x8768)"; +case 0x8769 /* GL_ELEMENT_ARRAY_TYPE_ATI */: return "GL_ELEMENT_ARRAY_TYPE_ATI (0x8769)"; +case 0x876A /* GL_ELEMENT_ARRAY_POINTER_ATI */: return "GL_ELEMENT_ARRAY_POINTER_ATI (0x876A)"; + + + +/* ------------------------- GL_ATI_envmap_bumpmap ------------------------- */ + + + + +case 0x8775 /* GL_BUMP_ROT_MATRIX_ATI */: return "GL_BUMP_ROT_MATRIX_ATI (0x8775)"; +case 0x8776 /* GL_BUMP_ROT_MATRIX_SIZE_ATI */: return "GL_BUMP_ROT_MATRIX_SIZE_ATI (0x8776)"; +case 0x8777 /* GL_BUMP_NUM_TEX_UNITS_ATI */: return "GL_BUMP_NUM_TEX_UNITS_ATI (0x8777)"; +case 0x8778 /* GL_BUMP_TEX_UNITS_ATI */: return "GL_BUMP_TEX_UNITS_ATI (0x8778)"; +case 0x8779 /* GL_DUDV_ATI */: return "GL_DUDV_ATI (0x8779)"; +case 0x877A /* GL_DU8DV8_ATI */: return "GL_DU8DV8_ATI (0x877A)"; +case 0x877B /* GL_BUMP_ENVMAP_ATI */: return "GL_BUMP_ENVMAP_ATI (0x877B)"; +case 0x877C /* GL_BUMP_TARGET_ATI */: return "GL_BUMP_TARGET_ATI (0x877C)"; + + + + + +/* ------------------------- GL_ATI_fragment_shader ------------------------ */ + + + + +//case 0x00000001 /* GL_RED_BIT_ATI */: return "GL_RED_BIT_ATI (0x00000001)"; +//case 0x00000001 /* GL_2X_BIT_ATI */: return "GL_2X_BIT_ATI (0x00000001)"; +//case 0x00000002 /* GL_4X_BIT_ATI */: return "GL_4X_BIT_ATI (0x00000002)"; +//case 0x00000002 /* GL_GREEN_BIT_ATI */: return "GL_GREEN_BIT_ATI (0x00000002)"; +//case 0x00000002 /* GL_COMP_BIT_ATI */: return "GL_COMP_BIT_ATI (0x00000002)"; +//case 0x00000004 /* GL_BLUE_BIT_ATI */: return "GL_BLUE_BIT_ATI (0x00000004)"; +//case 0x00000004 /* GL_8X_BIT_ATI */: return "GL_8X_BIT_ATI (0x00000004)"; +//case 0x00000004 /* GL_NEGATE_BIT_ATI */: return "GL_NEGATE_BIT_ATI (0x00000004)"; +//case 0x00000008 /* GL_BIAS_BIT_ATI */: return "GL_BIAS_BIT_ATI (0x00000008)"; +//case 0x00000008 /* GL_HALF_BIT_ATI */: return "GL_HALF_BIT_ATI (0x00000008)"; +//case 0x00000010 /* GL_QUARTER_BIT_ATI */: return "GL_QUARTER_BIT_ATI (0x00000010)"; +//case 0x00000020 /* GL_EIGHTH_BIT_ATI */: return "GL_EIGHTH_BIT_ATI (0x00000020)"; +//case 0x00000040 /* GL_SATURATE_BIT_ATI */: return "GL_SATURATE_BIT_ATI (0x00000040)"; +case 0x8920 /* GL_FRAGMENT_SHADER_ATI */: return "GL_FRAGMENT_SHADER_ATI (0x8920)"; +case 0x8921 /* GL_REG_0_ATI */: return "GL_REG_0_ATI (0x8921)"; +case 0x8922 /* GL_REG_1_ATI */: return "GL_REG_1_ATI (0x8922)"; +case 0x8923 /* GL_REG_2_ATI */: return "GL_REG_2_ATI (0x8923)"; +case 0x8924 /* GL_REG_3_ATI */: return "GL_REG_3_ATI (0x8924)"; +case 0x8925 /* GL_REG_4_ATI */: return "GL_REG_4_ATI (0x8925)"; +case 0x8926 /* GL_REG_5_ATI */: return "GL_REG_5_ATI (0x8926)"; +case 0x8941 /* GL_CON_0_ATI */: return "GL_CON_0_ATI (0x8941)"; +case 0x8942 /* GL_CON_1_ATI */: return "GL_CON_1_ATI (0x8942)"; +case 0x8943 /* GL_CON_2_ATI */: return "GL_CON_2_ATI (0x8943)"; +case 0x8944 /* GL_CON_3_ATI */: return "GL_CON_3_ATI (0x8944)"; +case 0x8945 /* GL_CON_4_ATI */: return "GL_CON_4_ATI (0x8945)"; +case 0x8946 /* GL_CON_5_ATI */: return "GL_CON_5_ATI (0x8946)"; +case 0x8947 /* GL_CON_6_ATI */: return "GL_CON_6_ATI (0x8947)"; +case 0x8948 /* GL_CON_7_ATI */: return "GL_CON_7_ATI (0x8948)"; +case 0x8961 /* GL_MOV_ATI */: return "GL_MOV_ATI (0x8961)"; +case 0x8963 /* GL_ADD_ATI */: return "GL_ADD_ATI (0x8963)"; +case 0x8964 /* GL_MUL_ATI */: return "GL_MUL_ATI (0x8964)"; +case 0x8965 /* GL_SUB_ATI */: return "GL_SUB_ATI (0x8965)"; +case 0x8966 /* GL_DOT3_ATI */: return "GL_DOT3_ATI (0x8966)"; +case 0x8967 /* GL_DOT4_ATI */: return "GL_DOT4_ATI (0x8967)"; +case 0x8968 /* GL_MAD_ATI */: return "GL_MAD_ATI (0x8968)"; +case 0x8969 /* GL_LERP_ATI */: return "GL_LERP_ATI (0x8969)"; +case 0x896A /* GL_CND_ATI */: return "GL_CND_ATI (0x896A)"; +case 0x896B /* GL_CND0_ATI */: return "GL_CND0_ATI (0x896B)"; +case 0x896C /* GL_DOT2_ADD_ATI */: return "GL_DOT2_ADD_ATI (0x896C)"; +case 0x896D /* GL_SECONDARY_INTERPOLATOR_ATI */: return "GL_SECONDARY_INTERPOLATOR_ATI (0x896D)"; +case 0x896E /* GL_NUM_FRAGMENT_REGISTERS_ATI */: return "GL_NUM_FRAGMENT_REGISTERS_ATI (0x896E)"; +case 0x896F /* GL_NUM_FRAGMENT_CONSTANTS_ATI */: return "GL_NUM_FRAGMENT_CONSTANTS_ATI (0x896F)"; +case 0x8970 /* GL_NUM_PASSES_ATI */: return "GL_NUM_PASSES_ATI (0x8970)"; +case 0x8973 /* GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI */: return "GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI (0x8973)"; +case 0x8974 /* GL_NUM_LOOPBACK_COMPONENTS_ATI */: return "GL_NUM_LOOPBACK_COMPONENTS_ATI (0x8974)"; +case 0x8975 /* GL_COLOR_ALPHA_PAIRING_ATI */: return "GL_COLOR_ALPHA_PAIRING_ATI (0x8975)"; +case 0x8976 /* GL_SWIZZLE_STR_ATI */: return "GL_SWIZZLE_STR_ATI (0x8976)"; +case 0x8977 /* GL_SWIZZLE_STQ_ATI */: return "GL_SWIZZLE_STQ_ATI (0x8977)"; +case 0x8978 /* GL_SWIZZLE_STR_DR_ATI */: return "GL_SWIZZLE_STR_DR_ATI (0x8978)"; +case 0x8979 /* GL_SWIZZLE_STQ_DQ_ATI */: return "GL_SWIZZLE_STQ_DQ_ATI (0x8979)"; +case 0x897A /* GL_SWIZZLE_STRQ_ATI */: return "GL_SWIZZLE_STRQ_ATI (0x897A)"; +case 0x897B /* GL_SWIZZLE_STRQ_DQ_ATI */: return "GL_SWIZZLE_STRQ_DQ_ATI (0x897B)"; + + + + + +/* ------------------------ GL_ATI_map_object_buffer ----------------------- */ + + + + +/* ----------------------------- GL_ATI_meminfo ---------------------------- */ + + + + +case 0x87FB /* GL_VBO_FREE_MEMORY_ATI */: return "GL_VBO_FREE_MEMORY_ATI (0x87FB)"; +case 0x87FC /* GL_TEXTURE_FREE_MEMORY_ATI */: return "GL_TEXTURE_FREE_MEMORY_ATI (0x87FC)"; +case 0x87FD /* GL_RENDERBUFFER_FREE_MEMORY_ATI */: return "GL_RENDERBUFFER_FREE_MEMORY_ATI (0x87FD)"; + + + + + +/* -------------------------- GL_ATI_pn_triangles -------------------------- */ + + + + +case 0x87F0 /* GL_PN_TRIANGLES_ATI */: return "GL_PN_TRIANGLES_ATI (0x87F0)"; +case 0x87F1 /* GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI */: return "GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI (0x87F1)"; +case 0x87F2 /* GL_PN_TRIANGLES_POINT_MODE_ATI */: return "GL_PN_TRIANGLES_POINT_MODE_ATI (0x87F2)"; +case 0x87F3 /* GL_PN_TRIANGLES_NORMAL_MODE_ATI */: return "GL_PN_TRIANGLES_NORMAL_MODE_ATI (0x87F3)"; +case 0x87F4 /* GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI */: return "GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI (0x87F4)"; +case 0x87F5 /* GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI */: return "GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI (0x87F5)"; +case 0x87F6 /* GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI */: return "GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI (0x87F6)"; +case 0x87F7 /* GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI */: return "GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI (0x87F7)"; +case 0x87F8 /* GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI */: return "GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI (0x87F8)"; + +/* ------------------------ GL_ATI_separate_stencil ------------------------ */ + + + + +//case 0x8800 /* GL_STENCIL_BACK_FUNC_ATI */: return "GL_STENCIL_BACK_FUNC_ATI (0x8800)"; +//case 0x8801 /* GL_STENCIL_BACK_FAIL_ATI */: return "GL_STENCIL_BACK_FAIL_ATI (0x8801)"; +//case 0x8802 /* GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI */: return "GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI (0x8802)"; +//case 0x8803 /* GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI */: return "GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI (0x8803)"; + +/* ----------------------- GL_ATI_shader_texture_lod ----------------------- */ + + + + + + + + +/* ---------------------- GL_ATI_text_fragment_shader ---------------------- */ + + + + +case 0x8200 /* GL_TEXT_FRAGMENT_SHADER_ATI */: return "GL_TEXT_FRAGMENT_SHADER_ATI (0x8200)"; + + + + + +/* --------------------- GL_ATI_texture_compression_3dc -------------------- */ + + + + +case 0x8837 /* GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI */: return "GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI (0x8837)"; + + + + + +/* ---------------------- GL_ATI_texture_env_combine3 ---------------------- */ + + + + +//case 0x8744 /* GL_MODULATE_ADD_ATI */: return "GL_MODULATE_ADD_ATI (0x8744)"; +//case 0x8745 /* GL_MODULATE_SIGNED_ADD_ATI */: return "GL_MODULATE_SIGNED_ADD_ATI (0x8745)"; +//case 0x8746 /* GL_MODULATE_SUBTRACT_ATI */: return "GL_MODULATE_SUBTRACT_ATI (0x8746)"; + + + + + +/* -------------------------- GL_ATI_texture_float ------------------------- */ + + + + +//case 0x8814 /* GL_RGBA_FLOAT32_ATI */: return "GL_RGBA_FLOAT32_ATI (0x8814)"; +//case 0x8815 /* GL_RGB_FLOAT32_ATI */: return "GL_RGB_FLOAT32_ATI (0x8815)"; +//case 0x8816 /* GL_ALPHA_FLOAT32_ATI */: return "GL_ALPHA_FLOAT32_ATI (0x8816)"; +//case 0x8817 /* GL_INTENSITY_FLOAT32_ATI */: return "GL_INTENSITY_FLOAT32_ATI (0x8817)"; +//case 0x8818 /* GL_LUMINANCE_FLOAT32_ATI */: return "GL_LUMINANCE_FLOAT32_ATI (0x8818)"; +//case 0x8819 /* GL_LUMINANCE_ALPHA_FLOAT32_ATI */: return "GL_LUMINANCE_ALPHA_FLOAT32_ATI (0x8819)"; +//case 0x881A /* GL_RGBA_FLOAT16_ATI */: return "GL_RGBA_FLOAT16_ATI (0x881A)"; +//case 0x881B /* GL_RGB_FLOAT16_ATI */: return "GL_RGB_FLOAT16_ATI (0x881B)"; +//case 0x881C /* GL_ALPHA_FLOAT16_ATI */: return "GL_ALPHA_FLOAT16_ATI (0x881C)"; +//case 0x881D /* GL_INTENSITY_FLOAT16_ATI */: return "GL_INTENSITY_FLOAT16_ATI (0x881D)"; +//case 0x881E /* GL_LUMINANCE_FLOAT16_ATI */: return "GL_LUMINANCE_FLOAT16_ATI (0x881E)"; +//case 0x881F /* GL_LUMINANCE_ALPHA_FLOAT16_ATI */: return "GL_LUMINANCE_ALPHA_FLOAT16_ATI (0x881F)"; + + + + + +/* ----------------------- GL_ATI_texture_mirror_once ---------------------- */ + + + + +case 0x8742 /* GL_MIRROR_CLAMP_ATI */: return "GL_MIRROR_CLAMP_ATI (0x8742)"; +case 0x8743 /* GL_MIRROR_CLAMP_TO_EDGE_ATI */: return "GL_MIRROR_CLAMP_TO_EDGE_ATI (0x8743)"; + + + + + +/* ----------------------- GL_ATI_vertex_array_object ---------------------- */ + + + + +case 0x8760 /* GL_STATIC_ATI */: return "GL_STATIC_ATI (0x8760)"; +case 0x8761 /* GL_DYNAMIC_ATI */: return "GL_DYNAMIC_ATI (0x8761)"; +case 0x8762 /* GL_PRESERVE_ATI */: return "GL_PRESERVE_ATI (0x8762)"; +case 0x8763 /* GL_DISCARD_ATI */: return "GL_DISCARD_ATI (0x8763)"; +//case 0x8764 /* GL_OBJECT_BUFFER_SIZE_ATI */: return "GL_OBJECT_BUFFER_SIZE_ATI (0x8764)"; +//case 0x8765 /* GL_OBJECT_BUFFER_USAGE_ATI */: return "GL_OBJECT_BUFFER_USAGE_ATI (0x8765)"; +case 0x8766 /* GL_ARRAY_OBJECT_BUFFER_ATI */: return "GL_ARRAY_OBJECT_BUFFER_ATI (0x8766)"; +case 0x8767 /* GL_ARRAY_OBJECT_OFFSET_ATI */: return "GL_ARRAY_OBJECT_OFFSET_ATI (0x8767)"; + +/* ------------------- GL_ATI_vertex_attrib_array_object ------------------- */ + + + + + + +/* ------------------------- GL_ATI_vertex_streams ------------------------- */ + + + + +case 0x876B /* GL_MAX_VERTEX_STREAMS_ATI */: return "GL_MAX_VERTEX_STREAMS_ATI (0x876B)"; +case 0x876C /* GL_VERTEX_SOURCE_ATI */: return "GL_VERTEX_SOURCE_ATI (0x876C)"; +case 0x876D /* GL_VERTEX_STREAM0_ATI */: return "GL_VERTEX_STREAM0_ATI (0x876D)"; +case 0x876E /* GL_VERTEX_STREAM1_ATI */: return "GL_VERTEX_STREAM1_ATI (0x876E)"; +case 0x876F /* GL_VERTEX_STREAM2_ATI */: return "GL_VERTEX_STREAM2_ATI (0x876F)"; +case 0x8770 /* GL_VERTEX_STREAM3_ATI */: return "GL_VERTEX_STREAM3_ATI (0x8770)"; +case 0x8771 /* GL_VERTEX_STREAM4_ATI */: return "GL_VERTEX_STREAM4_ATI (0x8771)"; +case 0x8772 /* GL_VERTEX_STREAM5_ATI */: return "GL_VERTEX_STREAM5_ATI (0x8772)"; +case 0x8773 /* GL_VERTEX_STREAM6_ATI */: return "GL_VERTEX_STREAM6_ATI (0x8773)"; +case 0x8774 /* GL_VERTEX_STREAM7_ATI */: return "GL_VERTEX_STREAM7_ATI (0x8774)"; + + + + + + + +/* --------------------------- GL_EXT_422_pixels --------------------------- */ + + + + +case 0x80CC /* GL_422_EXT */: return "GL_422_EXT (0x80CC)"; +case 0x80CD /* GL_422_REV_EXT */: return "GL_422_REV_EXT (0x80CD)"; +case 0x80CE /* GL_422_AVERAGE_EXT */: return "GL_422_AVERAGE_EXT (0x80CE)"; +case 0x80CF /* GL_422_REV_AVERAGE_EXT */: return "GL_422_REV_AVERAGE_EXT (0x80CF)"; + + + + + +/* ---------------------------- GL_EXT_Cg_shader --------------------------- */ + + + + +case 0x890E /* GL_CG_VERTEX_SHADER_EXT */: return "GL_CG_VERTEX_SHADER_EXT (0x890E)"; +case 0x890F /* GL_CG_FRAGMENT_SHADER_EXT */: return "GL_CG_FRAGMENT_SHADER_EXT (0x890F)"; + + + + + +/* ------------------------------ GL_EXT_abgr ------------------------------ */ + + + + +//case 0x8000 /* GL_ABGR_EXT */: return "GL_ABGR_EXT (0x8000)"; + + + + + +/* ------------------------------ GL_EXT_bgra ------------------------------ */ + + + + +//case 0x80E0 /* GL_BGR_EXT */: return "GL_BGR_EXT (0x80E0)"; +//case 0x80E1 /* GL_BGRA_EXT */: return "GL_BGRA_EXT (0x80E1)"; + + + + + +/* ------------------------ GL_EXT_bindable_uniform ------------------------ */ + + + + +case 0x8DE2 /* GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT */: return "GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT (0x8DE2)"; +case 0x8DE3 /* GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT */: return "GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT (0x8DE3)"; +case 0x8DE4 /* GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT */: return "GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT (0x8DE4)"; +case 0x8DED /* GL_MAX_BINDABLE_UNIFORM_SIZE_EXT */: return "GL_MAX_BINDABLE_UNIFORM_SIZE_EXT (0x8DED)"; +case 0x8DEE /* GL_UNIFORM_BUFFER_EXT */: return "GL_UNIFORM_BUFFER_EXT (0x8DEE)"; +case 0x8DEF /* GL_UNIFORM_BUFFER_BINDING_EXT */: return "GL_UNIFORM_BUFFER_BINDING_EXT (0x8DEF)"; + + + +/* --------------------------- GL_EXT_blend_color -------------------------- */ + + + + +//case 0x8001 /* GL_CONSTANT_COLOR_EXT */: return "GL_CONSTANT_COLOR_EXT (0x8001)"; +//case 0x8002 /* GL_ONE_MINUS_CONSTANT_COLOR_EXT */: return "GL_ONE_MINUS_CONSTANT_COLOR_EXT (0x8002)"; +//case 0x8003 /* GL_CONSTANT_ALPHA_EXT */: return "GL_CONSTANT_ALPHA_EXT (0x8003)"; +//case 0x8004 /* GL_ONE_MINUS_CONSTANT_ALPHA_EXT */: return "GL_ONE_MINUS_CONSTANT_ALPHA_EXT (0x8004)"; +//case 0x8005 /* GL_BLEND_COLOR_EXT */: return "GL_BLEND_COLOR_EXT (0x8005)";/* --------------------- GL_EXT_blend_equation_separate -------------------- */ + + + + +//case 0x8009 /* GL_BLEND_EQUATION_RGB_EXT */: return "GL_BLEND_EQUATION_RGB_EXT (0x8009)"; +//case 0x883D /* GL_BLEND_EQUATION_ALPHA_EXT */: return "GL_BLEND_EQUATION_ALPHA_EXT (0x883D)";/* ----------------------- GL_EXT_blend_func_separate ---------------------- */ + + + + +//case 0x80C8 /* GL_BLEND_DST_RGB_EXT */: return "GL_BLEND_DST_RGB_EXT (0x80C8)"; +//case 0x80C9 /* GL_BLEND_SRC_RGB_EXT */: return "GL_BLEND_SRC_RGB_EXT (0x80C9)"; +//case 0x80CA /* GL_BLEND_DST_ALPHA_EXT */: return "GL_BLEND_DST_ALPHA_EXT (0x80CA)"; +//case 0x80CB /* GL_BLEND_SRC_ALPHA_EXT */: return "GL_BLEND_SRC_ALPHA_EXT (0x80CB)";/* ------------------------- GL_EXT_blend_logic_op ------------------------- */ + + + + + + + + +/* -------------------------- GL_EXT_blend_minmax -------------------------- */ + + + + +//case 0x8006 /* GL_FUNC_ADD_EXT */: return "GL_FUNC_ADD_EXT (0x8006)"; +//case 0x8007 /* GL_MIN_EXT */: return "GL_MIN_EXT (0x8007)"; +//case 0x8008 /* GL_MAX_EXT */: return "GL_MAX_EXT (0x8008)"; +//case 0x8009 /* GL_BLEND_EQUATION_EXT */: return "GL_BLEND_EQUATION_EXT (0x8009)";/* ------------------------- GL_EXT_blend_subtract ------------------------- */ + + + + +//case 0x800A /* GL_FUNC_SUBTRACT_EXT */: return "GL_FUNC_SUBTRACT_EXT (0x800A)"; +//case 0x800B /* GL_FUNC_REVERSE_SUBTRACT_EXT */: return "GL_FUNC_REVERSE_SUBTRACT_EXT (0x800B)"; + + + + + +/* ------------------------ GL_EXT_clip_volume_hint ------------------------ */ + + + + +case 0x80F0 /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */: return "GL_CLIP_VOLUME_CLIPPING_HINT_EXT (0x80F0)"; + + + + + +/* ------------------------------ GL_EXT_cmyka ----------------------------- */ + + + + +case 0x800C /* GL_CMYK_EXT */: return "GL_CMYK_EXT (0x800C)"; +case 0x800D /* GL_CMYKA_EXT */: return "GL_CMYKA_EXT (0x800D)"; +case 0x800E /* GL_PACK_CMYK_HINT_EXT */: return "GL_PACK_CMYK_HINT_EXT (0x800E)"; +case 0x800F /* GL_UNPACK_CMYK_HINT_EXT */: return "GL_UNPACK_CMYK_HINT_EXT (0x800F)"; + + + + + +/* ------------------------- GL_EXT_color_subtable ------------------------- */ + + + + +/* ---------------------- GL_EXT_compiled_vertex_array --------------------- */ + + + + +case 0x81A8 /* GL_ARRAY_ELEMENT_LOCK_FIRST_EXT */: return "GL_ARRAY_ELEMENT_LOCK_FIRST_EXT (0x81A8)"; +case 0x81A9 /* GL_ARRAY_ELEMENT_LOCK_COUNT_EXT */: return "GL_ARRAY_ELEMENT_LOCK_COUNT_EXT (0x81A9)"; + +/* --------------------------- GL_EXT_convolution -------------------------- */ + + + + +//case 0x8010 /* GL_CONVOLUTION_1D_EXT */: return "GL_CONVOLUTION_1D_EXT (0x8010)"; +//case 0x8011 /* GL_CONVOLUTION_2D_EXT */: return "GL_CONVOLUTION_2D_EXT (0x8011)"; +//case 0x8012 /* GL_SEPARABLE_2D_EXT */: return "GL_SEPARABLE_2D_EXT (0x8012)"; +//case 0x8013 /* GL_CONVOLUTION_BORDER_MODE_EXT */: return "GL_CONVOLUTION_BORDER_MODE_EXT (0x8013)"; +//case 0x8014 /* GL_CONVOLUTION_FILTER_SCALE_EXT */: return "GL_CONVOLUTION_FILTER_SCALE_EXT (0x8014)"; +//case 0x8015 /* GL_CONVOLUTION_FILTER_BIAS_EXT */: return "GL_CONVOLUTION_FILTER_BIAS_EXT (0x8015)"; +//case 0x8016 /* GL_REDUCE_EXT */: return "GL_REDUCE_EXT (0x8016)"; +//case 0x8017 /* GL_CONVOLUTION_FORMAT_EXT */: return "GL_CONVOLUTION_FORMAT_EXT (0x8017)"; +//case 0x8018 /* GL_CONVOLUTION_WIDTH_EXT */: return "GL_CONVOLUTION_WIDTH_EXT (0x8018)"; +//case 0x8019 /* GL_CONVOLUTION_HEIGHT_EXT */: return "GL_CONVOLUTION_HEIGHT_EXT (0x8019)"; +//case 0x801A /* GL_MAX_CONVOLUTION_WIDTH_EXT */: return "GL_MAX_CONVOLUTION_WIDTH_EXT (0x801A)"; +//case 0x801B /* GL_MAX_CONVOLUTION_HEIGHT_EXT */: return "GL_MAX_CONVOLUTION_HEIGHT_EXT (0x801B)"; +//case 0x801C /* GL_POST_CONVOLUTION_RED_SCALE_EXT */: return "GL_POST_CONVOLUTION_RED_SCALE_EXT (0x801C)"; +//case 0x801D /* GL_POST_CONVOLUTION_GREEN_SCALE_EXT */: return "GL_POST_CONVOLUTION_GREEN_SCALE_EXT (0x801D)"; +//case 0x801E /* GL_POST_CONVOLUTION_BLUE_SCALE_EXT */: return "GL_POST_CONVOLUTION_BLUE_SCALE_EXT (0x801E)"; +//case 0x801F /* GL_POST_CONVOLUTION_ALPHA_SCALE_EXT */: return "GL_POST_CONVOLUTION_ALPHA_SCALE_EXT (0x801F)"; +//case 0x8020 /* GL_POST_CONVOLUTION_RED_BIAS_EXT */: return "GL_POST_CONVOLUTION_RED_BIAS_EXT (0x8020)"; +//case 0x8021 /* GL_POST_CONVOLUTION_GREEN_BIAS_EXT */: return "GL_POST_CONVOLUTION_GREEN_BIAS_EXT (0x8021)"; +//case 0x8022 /* GL_POST_CONVOLUTION_BLUE_BIAS_EXT */: return "GL_POST_CONVOLUTION_BLUE_BIAS_EXT (0x8022)"; +//case 0x8023 /* GL_POST_CONVOLUTION_ALPHA_BIAS_EXT */: return "GL_POST_CONVOLUTION_ALPHA_BIAS_EXT (0x8023)"; + + + +/* ------------------------ GL_EXT_coordinate_frame ------------------------ */ + + + + +case 0x8439 /* GL_TANGENT_ARRAY_EXT */: return "GL_TANGENT_ARRAY_EXT (0x8439)"; +case 0x843A /* GL_BINORMAL_ARRAY_EXT */: return "GL_BINORMAL_ARRAY_EXT (0x843A)"; +case 0x843B /* GL_CURRENT_TANGENT_EXT */: return "GL_CURRENT_TANGENT_EXT (0x843B)"; +case 0x843C /* GL_CURRENT_BINORMAL_EXT */: return "GL_CURRENT_BINORMAL_EXT (0x843C)"; +case 0x843E /* GL_TANGENT_ARRAY_TYPE_EXT */: return "GL_TANGENT_ARRAY_TYPE_EXT (0x843E)"; +case 0x843F /* GL_TANGENT_ARRAY_STRIDE_EXT */: return "GL_TANGENT_ARRAY_STRIDE_EXT (0x843F)"; +case 0x8440 /* GL_BINORMAL_ARRAY_TYPE_EXT */: return "GL_BINORMAL_ARRAY_TYPE_EXT (0x8440)"; +case 0x8441 /* GL_BINORMAL_ARRAY_STRIDE_EXT */: return "GL_BINORMAL_ARRAY_STRIDE_EXT (0x8441)"; +case 0x8442 /* GL_TANGENT_ARRAY_POINTER_EXT */: return "GL_TANGENT_ARRAY_POINTER_EXT (0x8442)"; +case 0x8443 /* GL_BINORMAL_ARRAY_POINTER_EXT */: return "GL_BINORMAL_ARRAY_POINTER_EXT (0x8443)"; +case 0x8444 /* GL_MAP1_TANGENT_EXT */: return "GL_MAP1_TANGENT_EXT (0x8444)"; +case 0x8445 /* GL_MAP2_TANGENT_EXT */: return "GL_MAP2_TANGENT_EXT (0x8445)"; +case 0x8446 /* GL_MAP1_BINORMAL_EXT */: return "GL_MAP1_BINORMAL_EXT (0x8446)"; +case 0x8447 /* GL_MAP2_BINORMAL_EXT */: return "GL_MAP2_BINORMAL_EXT (0x8447)"; + +/* -------------------------- GL_EXT_copy_texture -------------------------- */ +/* --------------------------- GL_EXT_cull_vertex -------------------------- */ + + + + +case 0x81AA /* GL_CULL_VERTEX_EXT */: return "GL_CULL_VERTEX_EXT (0x81AA)"; +case 0x81AB /* GL_CULL_VERTEX_EYE_POSITION_EXT */: return "GL_CULL_VERTEX_EYE_POSITION_EXT (0x81AB)"; +case 0x81AC /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */: return "GL_CULL_VERTEX_OBJECT_POSITION_EXT (0x81AC)"; + +/* -------------------------- GL_EXT_debug_marker -------------------------- */ + + + + + + +/* ------------------------ GL_EXT_depth_bounds_test ----------------------- */ + + + + +case 0x8890 /* GL_DEPTH_BOUNDS_TEST_EXT */: return "GL_DEPTH_BOUNDS_TEST_EXT (0x8890)"; +case 0x8891 /* GL_DEPTH_BOUNDS_EXT */: return "GL_DEPTH_BOUNDS_EXT (0x8891)";/* ----------------------- GL_EXT_direct_state_access ---------------------- */ + + + + +case 0x8E2D /* GL_PROGRAM_MATRIX_EXT */: return "GL_PROGRAM_MATRIX_EXT (0x8E2D)"; +case 0x8E2E /* GL_TRANSPOSE_PROGRAM_MATRIX_EXT */: return "GL_TRANSPOSE_PROGRAM_MATRIX_EXT (0x8E2E)"; +case 0x8E2F /* GL_PROGRAM_MATRIX_STACK_DEPTH_EXT */: return "GL_PROGRAM_MATRIX_STACK_DEPTH_EXT (0x8E2F)"; + + + + + + + +/* -------------------------- GL_EXT_draw_buffers2 ------------------------- */ + + +/* ------------------------- GL_EXT_draw_instanced ------------------------- */ + + + + +/* ----------------------- GL_EXT_draw_range_elements ---------------------- */ + + + + +//case 0x80E8 /* GL_MAX_ELEMENTS_VERTICES_EXT */: return "GL_MAX_ELEMENTS_VERTICES_EXT (0x80E8)"; +//case 0x80E9 /* GL_MAX_ELEMENTS_INDICES_EXT */: return "GL_MAX_ELEMENTS_INDICES_EXT (0x80E9)";/* ---------------------------- GL_EXT_fog_coord --------------------------- */ + + + + +//case 0x8450 /* GL_FOG_COORDINATE_SOURCE_EXT */: return "GL_FOG_COORDINATE_SOURCE_EXT (0x8450)"; +//case 0x8451 /* GL_FOG_COORDINATE_EXT */: return "GL_FOG_COORDINATE_EXT (0x8451)"; +//case 0x8452 /* GL_FRAGMENT_DEPTH_EXT */: return "GL_FRAGMENT_DEPTH_EXT (0x8452)"; +//case 0x8453 /* GL_CURRENT_FOG_COORDINATE_EXT */: return "GL_CURRENT_FOG_COORDINATE_EXT (0x8453)"; +//case 0x8454 /* GL_FOG_COORDINATE_ARRAY_TYPE_EXT */: return "GL_FOG_COORDINATE_ARRAY_TYPE_EXT (0x8454)"; +//case 0x8455 /* GL_FOG_COORDINATE_ARRAY_STRIDE_EXT */: return "GL_FOG_COORDINATE_ARRAY_STRIDE_EXT (0x8455)"; +//case 0x8456 /* GL_FOG_COORDINATE_ARRAY_POINTER_EXT */: return "GL_FOG_COORDINATE_ARRAY_POINTER_EXT (0x8456)"; +//case 0x8457 /* GL_FOG_COORDINATE_ARRAY_EXT */: return "GL_FOG_COORDINATE_ARRAY_EXT (0x8457)"; + + + + + + + +/* ------------------------ GL_EXT_fragment_lighting ----------------------- */ + + + + +case 0x8400 /* GL_FRAGMENT_LIGHTING_EXT */: return "GL_FRAGMENT_LIGHTING_EXT (0x8400)"; +case 0x8401 /* GL_FRAGMENT_COLOR_MATERIAL_EXT */: return "GL_FRAGMENT_COLOR_MATERIAL_EXT (0x8401)"; +case 0x8402 /* GL_FRAGMENT_COLOR_MATERIAL_FACE_EXT */: return "GL_FRAGMENT_COLOR_MATERIAL_FACE_EXT (0x8402)"; +case 0x8403 /* GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_EXT */: return "GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_EXT (0x8403)"; +case 0x8404 /* GL_MAX_FRAGMENT_LIGHTS_EXT */: return "GL_MAX_FRAGMENT_LIGHTS_EXT (0x8404)"; +case 0x8405 /* GL_MAX_ACTIVE_LIGHTS_EXT */: return "GL_MAX_ACTIVE_LIGHTS_EXT (0x8405)"; +case 0x8406 /* GL_CURRENT_RASTER_NORMAL_EXT */: return "GL_CURRENT_RASTER_NORMAL_EXT (0x8406)"; +case 0x8407 /* GL_LIGHT_ENV_MODE_EXT */: return "GL_LIGHT_ENV_MODE_EXT (0x8407)"; +case 0x8408 /* GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_EXT */: return "GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_EXT (0x8408)"; +case 0x8409 /* GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_EXT */: return "GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_EXT (0x8409)"; +case 0x840A /* GL_FRAGMENT_LIGHT_MODEL_AMBIENT_EXT */: return "GL_FRAGMENT_LIGHT_MODEL_AMBIENT_EXT (0x840A)"; +case 0x840B /* GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_EXT */: return "GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_EXT (0x840B)"; +case 0x840C /* GL_FRAGMENT_LIGHT0_EXT */: return "GL_FRAGMENT_LIGHT0_EXT (0x840C)"; +case 0x8413 /* GL_FRAGMENT_LIGHT7_EXT */: return "GL_FRAGMENT_LIGHT7_EXT (0x8413)"; + + + +/* ------------------------ GL_EXT_framebuffer_blit ------------------------ */ + + + + +//case 0x8CA6 /* GL_DRAW_FRAMEBUFFER_BINDING_EXT */: return "GL_DRAW_FRAMEBUFFER_BINDING_EXT (0x8CA6)"; +//case 0x8CA8 /* GL_READ_FRAMEBUFFER_EXT */: return "GL_READ_FRAMEBUFFER_EXT (0x8CA8)"; +//case 0x8CA9 /* GL_DRAW_FRAMEBUFFER_EXT */: return "GL_DRAW_FRAMEBUFFER_EXT (0x8CA9)"; +//case 0x8CAA /* GL_READ_FRAMEBUFFER_BINDING_EXT */: return "GL_READ_FRAMEBUFFER_BINDING_EXT (0x8CAA)";/* --------------------- GL_EXT_framebuffer_multisample -------------------- */ + + + + +//case 0x8CAB /* GL_RENDERBUFFER_SAMPLES_EXT */: return "GL_RENDERBUFFER_SAMPLES_EXT (0x8CAB)"; +//case 0x8D56 /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT */: return "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT (0x8D56)"; +//case 0x8D57 /* GL_MAX_SAMPLES_EXT */: return "GL_MAX_SAMPLES_EXT (0x8D57)";/* --------------- GL_EXT_framebuffer_multisample_blit_scaled -------------- */ + + + + +case 0x90BA /* GL_SCALED_RESOLVE_FASTEST_EXT */: return "GL_SCALED_RESOLVE_FASTEST_EXT (0x90BA)"; +case 0x90BB /* GL_SCALED_RESOLVE_NICEST_EXT */: return "GL_SCALED_RESOLVE_NICEST_EXT (0x90BB)"; + + + + + +/* ----------------------- GL_EXT_framebuffer_object ----------------------- */ + + + + +//case 0x0506 /* GL_INVALID_FRAMEBUFFER_OPERATION_EXT */: return "GL_INVALID_FRAMEBUFFER_OPERATION_EXT (0x0506)"; +//case 0x84E8 /* GL_MAX_RENDERBUFFER_SIZE_EXT */: return "GL_MAX_RENDERBUFFER_SIZE_EXT (0x84E8)"; +//case 0x8CA6 /* GL_FRAMEBUFFER_BINDING_EXT */: return "GL_FRAMEBUFFER_BINDING_EXT (0x8CA6)"; +//case 0x8CA7 /* GL_RENDERBUFFER_BINDING_EXT */: return "GL_RENDERBUFFER_BINDING_EXT (0x8CA7)"; +//case 0x8CD0 /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT */: return "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT (0x8CD0)"; +//case 0x8CD1 /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT */: return "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT (0x8CD1)"; +//case 0x8CD2 /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT */: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT (0x8CD2)"; +//case 0x8CD3 /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT */: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT (0x8CD3)"; +//case 0x8CD4 /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT */: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT (0x8CD4)"; +//case 0x8CD5 /* GL_FRAMEBUFFER_COMPLETE_EXT */: return "GL_FRAMEBUFFER_COMPLETE_EXT (0x8CD5)"; +//case 0x8CD6 /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT */: return "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT (0x8CD6)"; +//case 0x8CD7 /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT */: return "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT (0x8CD7)"; +case 0x8CD9 /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */: return "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT (0x8CD9)"; +case 0x8CDA /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */: return "GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT (0x8CDA)"; +//case 0x8CDB /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT */: return "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT (0x8CDB)"; +//case 0x8CDC /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT */: return "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT (0x8CDC)"; +//case 0x8CDD /* GL_FRAMEBUFFER_UNSUPPORTED_EXT */: return "GL_FRAMEBUFFER_UNSUPPORTED_EXT (0x8CDD)"; +//case 0x8CDF /* GL_MAX_COLOR_ATTACHMENTS_EXT */: return "GL_MAX_COLOR_ATTACHMENTS_EXT (0x8CDF)"; +//case 0x8CE0 /* GL_COLOR_ATTACHMENT0_EXT */: return "GL_COLOR_ATTACHMENT0_EXT (0x8CE0)"; +//case 0x8CE1 /* GL_COLOR_ATTACHMENT1_EXT */: return "GL_COLOR_ATTACHMENT1_EXT (0x8CE1)"; +//case 0x8CE2 /* GL_COLOR_ATTACHMENT2_EXT */: return "GL_COLOR_ATTACHMENT2_EXT (0x8CE2)"; +//case 0x8CE3 /* GL_COLOR_ATTACHMENT3_EXT */: return "GL_COLOR_ATTACHMENT3_EXT (0x8CE3)"; +//case 0x8CE4 /* GL_COLOR_ATTACHMENT4_EXT */: return "GL_COLOR_ATTACHMENT4_EXT (0x8CE4)"; +//case 0x8CE5 /* GL_COLOR_ATTACHMENT5_EXT */: return "GL_COLOR_ATTACHMENT5_EXT (0x8CE5)"; +//case 0x8CE6 /* GL_COLOR_ATTACHMENT6_EXT */: return "GL_COLOR_ATTACHMENT6_EXT (0x8CE6)"; +//case 0x8CE7 /* GL_COLOR_ATTACHMENT7_EXT */: return "GL_COLOR_ATTACHMENT7_EXT (0x8CE7)"; +//case 0x8CE8 /* GL_COLOR_ATTACHMENT8_EXT */: return "GL_COLOR_ATTACHMENT8_EXT (0x8CE8)"; +//case 0x8CE9 /* GL_COLOR_ATTACHMENT9_EXT */: return "GL_COLOR_ATTACHMENT9_EXT (0x8CE9)"; +//case 0x8CEA /* GL_COLOR_ATTACHMENT10_EXT */: return "GL_COLOR_ATTACHMENT10_EXT (0x8CEA)"; +//case 0x8CEB /* GL_COLOR_ATTACHMENT11_EXT */: return "GL_COLOR_ATTACHMENT11_EXT (0x8CEB)"; +//case 0x8CEC /* GL_COLOR_ATTACHMENT12_EXT */: return "GL_COLOR_ATTACHMENT12_EXT (0x8CEC)"; +//case 0x8CED /* GL_COLOR_ATTACHMENT13_EXT */: return "GL_COLOR_ATTACHMENT13_EXT (0x8CED)"; +//case 0x8CEE /* GL_COLOR_ATTACHMENT14_EXT */: return "GL_COLOR_ATTACHMENT14_EXT (0x8CEE)"; +//case 0x8CEF /* GL_COLOR_ATTACHMENT15_EXT */: return "GL_COLOR_ATTACHMENT15_EXT (0x8CEF)"; +//case 0x8D00 /* GL_DEPTH_ATTACHMENT_EXT */: return "GL_DEPTH_ATTACHMENT_EXT (0x8D00)"; +//case 0x8D20 /* GL_STENCIL_ATTACHMENT_EXT */: return "GL_STENCIL_ATTACHMENT_EXT (0x8D20)"; +//case 0x8D40 /* GL_FRAMEBUFFER_EXT */: return "GL_FRAMEBUFFER_EXT (0x8D40)"; +//case 0x8D41 /* GL_RENDERBUFFER_EXT */: return "GL_RENDERBUFFER_EXT (0x8D41)"; +//case 0x8D42 /* GL_RENDERBUFFER_WIDTH_EXT */: return "GL_RENDERBUFFER_WIDTH_EXT (0x8D42)"; +//case 0x8D43 /* GL_RENDERBUFFER_HEIGHT_EXT */: return "GL_RENDERBUFFER_HEIGHT_EXT (0x8D43)"; +//case 0x8D44 /* GL_RENDERBUFFER_INTERNAL_FORMAT_EXT */: return "GL_RENDERBUFFER_INTERNAL_FORMAT_EXT (0x8D44)"; +//case 0x8D46 /* GL_STENCIL_INDEX1_EXT */: return "GL_STENCIL_INDEX1_EXT (0x8D46)"; +//case 0x8D47 /* GL_STENCIL_INDEX4_EXT */: return "GL_STENCIL_INDEX4_EXT (0x8D47)"; +//case 0x8D48 /* GL_STENCIL_INDEX8_EXT */: return "GL_STENCIL_INDEX8_EXT (0x8D48)"; +//case 0x8D49 /* GL_STENCIL_INDEX16_EXT */: return "GL_STENCIL_INDEX16_EXT (0x8D49)"; +//case 0x8D50 /* GL_RENDERBUFFER_RED_SIZE_EXT */: return "GL_RENDERBUFFER_RED_SIZE_EXT (0x8D50)"; +//case 0x8D51 /* GL_RENDERBUFFER_GREEN_SIZE_EXT */: return "GL_RENDERBUFFER_GREEN_SIZE_EXT (0x8D51)"; +//case 0x8D52 /* GL_RENDERBUFFER_BLUE_SIZE_EXT */: return "GL_RENDERBUFFER_BLUE_SIZE_EXT (0x8D52)"; +//case 0x8D53 /* GL_RENDERBUFFER_ALPHA_SIZE_EXT */: return "GL_RENDERBUFFER_ALPHA_SIZE_EXT (0x8D53)"; +//case 0x8D54 /* GL_RENDERBUFFER_DEPTH_SIZE_EXT */: return "GL_RENDERBUFFER_DEPTH_SIZE_EXT (0x8D54)"; +//case 0x8D55 /* GL_RENDERBUFFER_STENCIL_SIZE_EXT */: return "GL_RENDERBUFFER_STENCIL_SIZE_EXT (0x8D55)"; + +/* ------------------------ GL_EXT_framebuffer_sRGB ------------------------ */ + + + + +//case 0x8DB9 /* GL_FRAMEBUFFER_SRGB_EXT */: return "GL_FRAMEBUFFER_SRGB_EXT (0x8DB9)"; +case 0x8DBA /* GL_FRAMEBUFFER_SRGB_CAPABLE_EXT */: return "GL_FRAMEBUFFER_SRGB_CAPABLE_EXT (0x8DBA)"; + + + + + +/* ------------------------ GL_EXT_geometry_shader4 ------------------------ */ + + + + +//case 0xA /* GL_LINES_ADJACENCY_EXT */: return "GL_LINES_ADJACENCY_EXT (0xA)"; +//case 0xB /* GL_LINE_STRIP_ADJACENCY_EXT */: return "GL_LINE_STRIP_ADJACENCY_EXT (0xB)"; +//case 0xC /* GL_TRIANGLES_ADJACENCY_EXT */: return "GL_TRIANGLES_ADJACENCY_EXT (0xC)"; +//case 0xD /* GL_TRIANGLE_STRIP_ADJACENCY_EXT */: return "GL_TRIANGLE_STRIP_ADJACENCY_EXT (0xD)"; +//case 0x8642 /* GL_PROGRAM_POINT_SIZE_EXT */: return "GL_PROGRAM_POINT_SIZE_EXT (0x8642)"; +//case 0x8B4B /* GL_MAX_VARYING_COMPONENTS_EXT */: return "GL_MAX_VARYING_COMPONENTS_EXT (0x8B4B)"; +//case 0x8C29 /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT */: return "GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT (0x8C29)"; +//case 0x8CD4 /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT (0x8CD4)"; +//case 0x8DA7 /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT */: return "GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT (0x8DA7)"; +//case 0x8DA8 /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT */: return "GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT (0x8DA8)"; +//case 0x8DA9 /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT */: return "GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT (0x8DA9)"; +//case 0x8DD9 /* GL_GEOMETRY_SHADER_EXT */: return "GL_GEOMETRY_SHADER_EXT (0x8DD9)"; +//case 0x8DDA /* GL_GEOMETRY_VERTICES_OUT_EXT */: return "GL_GEOMETRY_VERTICES_OUT_EXT (0x8DDA)"; +//case 0x8DDB /* GL_GEOMETRY_INPUT_TYPE_EXT */: return "GL_GEOMETRY_INPUT_TYPE_EXT (0x8DDB)"; +//case 0x8DDC /* GL_GEOMETRY_OUTPUT_TYPE_EXT */: return "GL_GEOMETRY_OUTPUT_TYPE_EXT (0x8DDC)"; +//case 0x8DDD /* GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT */: return "GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT (0x8DDD)"; +//case 0x8DDE /* GL_MAX_VERTEX_VARYING_COMPONENTS_EXT */: return "GL_MAX_VERTEX_VARYING_COMPONENTS_EXT (0x8DDE)"; +//case 0x8DDF /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT */: return "GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT (0x8DDF)"; +//case 0x8DE0 /* GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT */: return "GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT (0x8DE0)"; +//case 0x8DE1 /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT */: return "GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT (0x8DE1)"; + + + +/* --------------------- GL_EXT_gpu_program_parameters --------------------- */ + + + + +/* --------------------------- GL_EXT_gpu_shader4 -------------------------- */ + + + + +//case 0x88FD /* GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT */: return "GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT (0x88FD)"; +//case 0x8DC0 /* GL_SAMPLER_1D_ARRAY_EXT */: return "GL_SAMPLER_1D_ARRAY_EXT (0x8DC0)"; +//case 0x8DC1 /* GL_SAMPLER_2D_ARRAY_EXT */: return "GL_SAMPLER_2D_ARRAY_EXT (0x8DC1)"; +//case 0x8DC2 /* GL_SAMPLER_BUFFER_EXT */: return "GL_SAMPLER_BUFFER_EXT (0x8DC2)"; +//case 0x8DC3 /* GL_SAMPLER_1D_ARRAY_SHADOW_EXT */: return "GL_SAMPLER_1D_ARRAY_SHADOW_EXT (0x8DC3)"; +//case 0x8DC4 /* GL_SAMPLER_2D_ARRAY_SHADOW_EXT */: return "GL_SAMPLER_2D_ARRAY_SHADOW_EXT (0x8DC4)"; +//case 0x8DC5 /* GL_SAMPLER_CUBE_SHADOW_EXT */: return "GL_SAMPLER_CUBE_SHADOW_EXT (0x8DC5)"; +//case 0x8DC6 /* GL_UNSIGNED_INT_VEC2_EXT */: return "GL_UNSIGNED_INT_VEC2_EXT (0x8DC6)"; +//case 0x8DC7 /* GL_UNSIGNED_INT_VEC3_EXT */: return "GL_UNSIGNED_INT_VEC3_EXT (0x8DC7)"; +//case 0x8DC8 /* GL_UNSIGNED_INT_VEC4_EXT */: return "GL_UNSIGNED_INT_VEC4_EXT (0x8DC8)"; +//case 0x8DC9 /* GL_INT_SAMPLER_1D_EXT */: return "GL_INT_SAMPLER_1D_EXT (0x8DC9)"; +//case 0x8DCA /* GL_INT_SAMPLER_2D_EXT */: return "GL_INT_SAMPLER_2D_EXT (0x8DCA)"; +//case 0x8DCB /* GL_INT_SAMPLER_3D_EXT */: return "GL_INT_SAMPLER_3D_EXT (0x8DCB)"; +//case 0x8DCC /* GL_INT_SAMPLER_CUBE_EXT */: return "GL_INT_SAMPLER_CUBE_EXT (0x8DCC)"; +//case 0x8DCD /* GL_INT_SAMPLER_2D_RECT_EXT */: return "GL_INT_SAMPLER_2D_RECT_EXT (0x8DCD)"; +//case 0x8DCE /* GL_INT_SAMPLER_1D_ARRAY_EXT */: return "GL_INT_SAMPLER_1D_ARRAY_EXT (0x8DCE)"; +//case 0x8DCF /* GL_INT_SAMPLER_2D_ARRAY_EXT */: return "GL_INT_SAMPLER_2D_ARRAY_EXT (0x8DCF)"; +//case 0x8DD0 /* GL_INT_SAMPLER_BUFFER_EXT */: return "GL_INT_SAMPLER_BUFFER_EXT (0x8DD0)"; +//case 0x8DD1 /* GL_UNSIGNED_INT_SAMPLER_1D_EXT */: return "GL_UNSIGNED_INT_SAMPLER_1D_EXT (0x8DD1)"; +//case 0x8DD2 /* GL_UNSIGNED_INT_SAMPLER_2D_EXT */: return "GL_UNSIGNED_INT_SAMPLER_2D_EXT (0x8DD2)"; +//case 0x8DD3 /* GL_UNSIGNED_INT_SAMPLER_3D_EXT */: return "GL_UNSIGNED_INT_SAMPLER_3D_EXT (0x8DD3)"; +//case 0x8DD4 /* GL_UNSIGNED_INT_SAMPLER_CUBE_EXT */: return "GL_UNSIGNED_INT_SAMPLER_CUBE_EXT (0x8DD4)"; +//case 0x8DD5 /* GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT */: return "GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT (0x8DD5)"; +//case 0x8DD6 /* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT */: return "GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT (0x8DD6)"; +//case 0x8DD7 /* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT */: return "GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT (0x8DD7)"; +//case 0x8DD8 /* GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT */: return "GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT (0x8DD8)"; + + + + + +/* ---------------------------- GL_EXT_histogram --------------------------- */ + + + + +//case 0x8024 /* GL_HISTOGRAM_EXT */: return "GL_HISTOGRAM_EXT (0x8024)"; +//case 0x8025 /* GL_PROXY_HISTOGRAM_EXT */: return "GL_PROXY_HISTOGRAM_EXT (0x8025)"; +//case 0x8026 /* GL_HISTOGRAM_WIDTH_EXT */: return "GL_HISTOGRAM_WIDTH_EXT (0x8026)"; +//case 0x8027 /* GL_HISTOGRAM_FORMAT_EXT */: return "GL_HISTOGRAM_FORMAT_EXT (0x8027)"; +//case 0x8028 /* GL_HISTOGRAM_RED_SIZE_EXT */: return "GL_HISTOGRAM_RED_SIZE_EXT (0x8028)"; +//case 0x8029 /* GL_HISTOGRAM_GREEN_SIZE_EXT */: return "GL_HISTOGRAM_GREEN_SIZE_EXT (0x8029)"; +//case 0x802A /* GL_HISTOGRAM_BLUE_SIZE_EXT */: return "GL_HISTOGRAM_BLUE_SIZE_EXT (0x802A)"; +//case 0x802B /* GL_HISTOGRAM_ALPHA_SIZE_EXT */: return "GL_HISTOGRAM_ALPHA_SIZE_EXT (0x802B)"; +//case 0x802C /* GL_HISTOGRAM_LUMINANCE_SIZE_EXT */: return "GL_HISTOGRAM_LUMINANCE_SIZE_EXT (0x802C)"; +//case 0x802D /* GL_HISTOGRAM_SINK_EXT */: return "GL_HISTOGRAM_SINK_EXT (0x802D)"; +//case 0x802E /* GL_MINMAX_EXT */: return "GL_MINMAX_EXT (0x802E)"; +//case 0x802F /* GL_MINMAX_FORMAT_EXT */: return "GL_MINMAX_FORMAT_EXT (0x802F)"; +//case 0x8030 /* GL_MINMAX_SINK_EXT */: return "GL_MINMAX_SINK_EXT (0x8030)"; + + + + + + + +/* ----------------------- GL_EXT_index_array_formats ---------------------- */ + + + + + + + + +/* --------------------------- GL_EXT_index_func --------------------------- */ + + +/* ------------------------- GL_EXT_index_material ------------------------- */ + + +/* -------------------------- GL_EXT_index_texture ------------------------- */ + + + + + + + + +/* -------------------------- GL_EXT_light_texture ------------------------- */ + + + + +case 0x8349 /* GL_FRAGMENT_MATERIAL_EXT */: return "GL_FRAGMENT_MATERIAL_EXT (0x8349)"; +case 0x834A /* GL_FRAGMENT_NORMAL_EXT */: return "GL_FRAGMENT_NORMAL_EXT (0x834A)"; +case 0x834C /* GL_FRAGMENT_COLOR_EXT */: return "GL_FRAGMENT_COLOR_EXT (0x834C)"; +case 0x834D /* GL_ATTENUATION_EXT */: return "GL_ATTENUATION_EXT (0x834D)"; +case 0x834E /* GL_SHADOW_ATTENUATION_EXT */: return "GL_SHADOW_ATTENUATION_EXT (0x834E)"; +case 0x834F /* GL_TEXTURE_APPLICATION_MODE_EXT */: return "GL_TEXTURE_APPLICATION_MODE_EXT (0x834F)"; +case 0x8350 /* GL_TEXTURE_LIGHT_EXT */: return "GL_TEXTURE_LIGHT_EXT (0x8350)"; +case 0x8351 /* GL_TEXTURE_MATERIAL_FACE_EXT */: return "GL_TEXTURE_MATERIAL_FACE_EXT (0x8351)"; +case 0x8352 /* GL_TEXTURE_MATERIAL_PARAMETER_EXT */: return "GL_TEXTURE_MATERIAL_PARAMETER_EXT (0x8352)"; + + + +/* ------------------------- GL_EXT_misc_attribute ------------------------- */ + + + + + + + + +/* ------------------------ GL_EXT_multi_draw_arrays ----------------------- */ + + + + +/* --------------------------- GL_EXT_multisample -------------------------- */ + + + + +//case 0x809D /* GL_MULTISAMPLE_EXT */: return "GL_MULTISAMPLE_EXT (0x809D)"; +//case 0x809E /* GL_SAMPLE_ALPHA_TO_MASK_EXT */: return "GL_SAMPLE_ALPHA_TO_MASK_EXT (0x809E)"; +//case 0x809F /* GL_SAMPLE_ALPHA_TO_ONE_EXT */: return "GL_SAMPLE_ALPHA_TO_ONE_EXT (0x809F)"; +//case 0x80A0 /* GL_SAMPLE_MASK_EXT */: return "GL_SAMPLE_MASK_EXT (0x80A0)"; +case 0x80A1 /* GL_1PASS_EXT */: return "GL_1PASS_EXT (0x80A1)"; +case 0x80A2 /* GL_2PASS_0_EXT */: return "GL_2PASS_0_EXT (0x80A2)"; +case 0x80A3 /* GL_2PASS_1_EXT */: return "GL_2PASS_1_EXT (0x80A3)"; +case 0x80A4 /* GL_4PASS_0_EXT */: return "GL_4PASS_0_EXT (0x80A4)"; +case 0x80A5 /* GL_4PASS_1_EXT */: return "GL_4PASS_1_EXT (0x80A5)"; +case 0x80A6 /* GL_4PASS_2_EXT */: return "GL_4PASS_2_EXT (0x80A6)"; +case 0x80A7 /* GL_4PASS_3_EXT */: return "GL_4PASS_3_EXT (0x80A7)"; +//case 0x80A8 /* GL_SAMPLE_BUFFERS_EXT */: return "GL_SAMPLE_BUFFERS_EXT (0x80A8)"; +//case 0x80A9 /* GL_SAMPLES_EXT */: return "GL_SAMPLES_EXT (0x80A9)"; +//case 0x80AA /* GL_SAMPLE_MASK_VALUE_EXT */: return "GL_SAMPLE_MASK_VALUE_EXT (0x80AA)"; +//case 0x80AB /* GL_SAMPLE_MASK_INVERT_EXT */: return "GL_SAMPLE_MASK_INVERT_EXT (0x80AB)"; +case 0x80AC /* GL_SAMPLE_PATTERN_EXT */: return "GL_SAMPLE_PATTERN_EXT (0x80AC)"; +//case 0x20000000 /* GL_MULTISAMPLE_BIT_EXT */: return "GL_MULTISAMPLE_BIT_EXT (0x20000000)"; + +/* ---------------------- GL_EXT_packed_depth_stencil ---------------------- */ + + + + +//case 0x84F9 /* GL_DEPTH_STENCIL_EXT */: return "GL_DEPTH_STENCIL_EXT (0x84F9)"; +//case 0x84FA /* GL_UNSIGNED_INT_24_8_EXT */: return "GL_UNSIGNED_INT_24_8_EXT (0x84FA)"; +//case 0x88F0 /* GL_DEPTH24_STENCIL8_EXT */: return "GL_DEPTH24_STENCIL8_EXT (0x88F0)"; +//case 0x88F1 /* GL_TEXTURE_STENCIL_SIZE_EXT */: return "GL_TEXTURE_STENCIL_SIZE_EXT (0x88F1)"; + + + + + +/* -------------------------- GL_EXT_packed_float -------------------------- */ + + + + +//case 0x8C3A /* GL_R11F_G11F_B10F_EXT */: return "GL_R11F_G11F_B10F_EXT (0x8C3A)"; +//case 0x8C3B /* GL_UNSIGNED_INT_10F_11F_11F_REV_EXT */: return "GL_UNSIGNED_INT_10F_11F_11F_REV_EXT (0x8C3B)"; +case 0x8C3C /* GL_RGBA_SIGNED_COMPONENTS_EXT */: return "GL_RGBA_SIGNED_COMPONENTS_EXT (0x8C3C)"; + + + + + +/* -------------------------- GL_EXT_packed_pixels ------------------------- */ + + + + +///case 0x8032 /* GL_UNSIGNED_BYTE_3_3_2_EXT */: return "GL_UNSIGNED_BYTE_3_3_2_EXT (0x8032)"; +//case 0x8033 /* GL_UNSIGNED_SHORT_4_4_4_4_EXT */: return "GL_UNSIGNED_SHORT_4_4_4_4_EXT (0x8033)"; +//case 0x8034 /* GL_UNSIGNED_SHORT_5_5_5_1_EXT */: return "GL_UNSIGNED_SHORT_5_5_5_1_EXT (0x8034)"; +//case 0x8035 /* GL_UNSIGNED_INT_8_8_8_8_EXT */: return "GL_UNSIGNED_INT_8_8_8_8_EXT (0x8035)"; +//case 0x8036 /* GL_UNSIGNED_INT_10_10_10_2_EXT */: return "GL_UNSIGNED_INT_10_10_10_2_EXT (0x8036)"; + + + + + +/* ------------------------ GL_EXT_paletted_texture ------------------------ */ + + + + +//case 0x0DE0 /* GL_TEXTURE_1D */: return "GL_TEXTURE_1D (0x0DE0)"; +//case 0x0DE1 /* GL_TEXTURE_2D */: return "GL_TEXTURE_2D (0x0DE1)"; +//case 0x8063 /* GL_PROXY_TEXTURE_1D */: return "GL_PROXY_TEXTURE_1D (0x8063)"; +//case 0x8064 /* GL_PROXY_TEXTURE_2D */: return "GL_PROXY_TEXTURE_2D (0x8064)"; +//case 0x80D8 /* GL_COLOR_TABLE_FORMAT_EXT */: return "GL_COLOR_TABLE_FORMAT_EXT (0x80D8)"; +//case 0x80D9 /* GL_COLOR_TABLE_WIDTH_EXT */: return "GL_COLOR_TABLE_WIDTH_EXT (0x80D9)"; +//case 0x80DA /* GL_COLOR_TABLE_RED_SIZE_EXT */: return "GL_COLOR_TABLE_RED_SIZE_EXT (0x80DA)"; +//case 0x80DB /* GL_COLOR_TABLE_GREEN_SIZE_EXT */: return "GL_COLOR_TABLE_GREEN_SIZE_EXT (0x80DB)"; +//case 0x80DC /* GL_COLOR_TABLE_BLUE_SIZE_EXT */: return "GL_COLOR_TABLE_BLUE_SIZE_EXT (0x80DC)"; +//case 0x80DD /* GL_COLOR_TABLE_ALPHA_SIZE_EXT */: return "GL_COLOR_TABLE_ALPHA_SIZE_EXT (0x80DD)"; +//case 0x80DE /* GL_COLOR_TABLE_LUMINANCE_SIZE_EXT */: return "GL_COLOR_TABLE_LUMINANCE_SIZE_EXT (0x80DE)"; +//case 0x80DF /* GL_COLOR_TABLE_INTENSITY_SIZE_EXT */: return "GL_COLOR_TABLE_INTENSITY_SIZE_EXT (0x80DF)"; +//case 0x80E2 /* GL_COLOR_INDEX1_EXT */: return "GL_COLOR_INDEX1_EXT (0x80E2)"; +//case 0x80E3 /* GL_COLOR_INDEX2_EXT */: return "GL_COLOR_INDEX2_EXT (0x80E3)"; +//case 0x80E4 /* GL_COLOR_INDEX4_EXT */: return "GL_COLOR_INDEX4_EXT (0x80E4)"; +//case 0x80E5 /* GL_COLOR_INDEX8_EXT */: return "GL_COLOR_INDEX8_EXT (0x80E5)"; +//case 0x80E6 /* GL_COLOR_INDEX12_EXT */: return "GL_COLOR_INDEX12_EXT (0x80E6)"; +//case 0x80E7 /* GL_COLOR_INDEX16_EXT */: return "GL_COLOR_INDEX16_EXT (0x80E7)"; +case 0x80ED /* GL_TEXTURE_INDEX_SIZE_EXT */: return "GL_TEXTURE_INDEX_SIZE_EXT (0x80ED)"; +//case 0x8513 /* GL_TEXTURE_CUBE_MAP_ARB */: return "GL_TEXTURE_CUBE_MAP_ARB (0x8513)"; +//case 0x851B /* GL_PROXY_TEXTURE_CUBE_MAP_ARB */: return "GL_PROXY_TEXTURE_CUBE_MAP_ARB (0x851B)"; + + + + + +/* ----------------------- GL_EXT_pixel_buffer_object ---------------------- */ + + + + +//case 0x88EB /* GL_PIXEL_PACK_BUFFER_EXT */: return "GL_PIXEL_PACK_BUFFER_EXT (0x88EB)"; +//case 0x88EC /* GL_PIXEL_UNPACK_BUFFER_EXT */: return "GL_PIXEL_UNPACK_BUFFER_EXT (0x88EC)"; +//case 0x88ED /* GL_PIXEL_PACK_BUFFER_BINDING_EXT */: return "GL_PIXEL_PACK_BUFFER_BINDING_EXT (0x88ED)"; +//case 0x88EF /* GL_PIXEL_UNPACK_BUFFER_BINDING_EXT */: return "GL_PIXEL_UNPACK_BUFFER_BINDING_EXT (0x88EF)"; + + + + + +/* ------------------------- GL_EXT_pixel_transform ------------------------ */ + + + + +case 0x8330 /* GL_PIXEL_TRANSFORM_2D_EXT */: return "GL_PIXEL_TRANSFORM_2D_EXT (0x8330)"; +case 0x8331 /* GL_PIXEL_MAG_FILTER_EXT */: return "GL_PIXEL_MAG_FILTER_EXT (0x8331)"; +case 0x8332 /* GL_PIXEL_MIN_FILTER_EXT */: return "GL_PIXEL_MIN_FILTER_EXT (0x8332)"; +case 0x8333 /* GL_PIXEL_CUBIC_WEIGHT_EXT */: return "GL_PIXEL_CUBIC_WEIGHT_EXT (0x8333)"; +case 0x8334 /* GL_CUBIC_EXT */: return "GL_CUBIC_EXT (0x8334)"; +case 0x8335 /* GL_AVERAGE_EXT */: return "GL_AVERAGE_EXT (0x8335)"; +case 0x8336 /* GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT */: return "GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT (0x8336)"; +case 0x8337 /* GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT */: return "GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT (0x8337)"; +case 0x8338 /* GL_PIXEL_TRANSFORM_2D_MATRIX_EXT */: return "GL_PIXEL_TRANSFORM_2D_MATRIX_EXT (0x8338)";/* ------------------- GL_EXT_pixel_transform_color_table ------------------ */ + + + + + + + + +/* ------------------------ GL_EXT_point_parameters ------------------------ */ + + + + +//case 0x8126 /* GL_POINT_SIZE_MIN_EXT */: return "GL_POINT_SIZE_MIN_EXT (0x8126)"; +//case 0x8127 /* GL_POINT_SIZE_MAX_EXT */: return "GL_POINT_SIZE_MAX_EXT (0x8127)"; +//case 0x8128 /* GL_POINT_FADE_THRESHOLD_SIZE_EXT */: return "GL_POINT_FADE_THRESHOLD_SIZE_EXT (0x8128)"; +//case 0x8129 /* GL_DISTANCE_ATTENUATION_EXT */: return "GL_DISTANCE_ATTENUATION_EXT (0x8129)"; + +/* ------------------------- GL_EXT_polygon_offset ------------------------- */ + + + + +//case 0x8037 /* GL_POLYGON_OFFSET_EXT */: return "GL_POLYGON_OFFSET_EXT (0x8037)"; +//case 0x8038 /* GL_POLYGON_OFFSET_FACTOR_EXT */: return "GL_POLYGON_OFFSET_FACTOR_EXT (0x8038)"; +case 0x8039 /* GL_POLYGON_OFFSET_BIAS_EXT */: return "GL_POLYGON_OFFSET_BIAS_EXT (0x8039)";/* ------------------------ GL_EXT_provoking_vertex ------------------------ */ + + + + +//case 0x8E4C /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT */: return "GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT (0x8E4C)"; +//case 0x8E4D /* GL_FIRST_VERTEX_CONVENTION_EXT */: return "GL_FIRST_VERTEX_CONVENTION_EXT (0x8E4D)"; +//case 0x8E4E /* GL_LAST_VERTEX_CONVENTION_EXT */: return "GL_LAST_VERTEX_CONVENTION_EXT (0x8E4E)"; +//case 0x8E4F /* GL_PROVOKING_VERTEX_EXT */: return "GL_PROVOKING_VERTEX_EXT (0x8E4F)";/* ------------------------- GL_EXT_rescale_normal ------------------------- */ + + + + +//case 0x803A /* GL_RESCALE_NORMAL_EXT */: return "GL_RESCALE_NORMAL_EXT (0x803A)"; + + + + + +/* -------------------------- GL_EXT_scene_marker -------------------------- */ + + + + +/* ------------------------- GL_EXT_secondary_color ------------------------ */ + + + + +//case 0x8458 /* GL_COLOR_SUM_EXT */: return "GL_COLOR_SUM_EXT (0x8458)"; +//case 0x8459 /* GL_CURRENT_SECONDARY_COLOR_EXT */: return "GL_CURRENT_SECONDARY_COLOR_EXT (0x8459)"; +//case 0x845A /* GL_SECONDARY_COLOR_ARRAY_SIZE_EXT */: return "GL_SECONDARY_COLOR_ARRAY_SIZE_EXT (0x845A)"; +//case 0x845B /* GL_SECONDARY_COLOR_ARRAY_TYPE_EXT */: return "GL_SECONDARY_COLOR_ARRAY_TYPE_EXT (0x845B)"; +//case 0x845C /* GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT */: return "GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT (0x845C)"; +//case 0x845D /* GL_SECONDARY_COLOR_ARRAY_POINTER_EXT */: return "GL_SECONDARY_COLOR_ARRAY_POINTER_EXT (0x845D)"; +//case 0x845E /* GL_SECONDARY_COLOR_ARRAY_EXT */: return "GL_SECONDARY_COLOR_ARRAY_EXT (0x845E)"; + +/* --------------------- GL_EXT_separate_shader_objects -------------------- */ + + + + +//case 0x8B8D /* GL_ACTIVE_PROGRAM_EXT */: return "GL_ACTIVE_PROGRAM_EXT (0x8B8D)"; + + + +/* --------------------- GL_EXT_separate_specular_color -------------------- */ + + + + +//case 0x81F8 /* GL_LIGHT_MODEL_COLOR_CONTROL_EXT */: return "GL_LIGHT_MODEL_COLOR_CONTROL_EXT (0x81F8)"; +//case 0x81F9 /* GL_SINGLE_COLOR_EXT */: return "GL_SINGLE_COLOR_EXT (0x81F9)"; +//case 0x81FA /* GL_SEPARATE_SPECULAR_COLOR_EXT */: return "GL_SEPARATE_SPECULAR_COLOR_EXT (0x81FA)"; + + + + + +/* --------------------- GL_EXT_shader_image_load_store -------------------- */ + + + + +//case 0x00000001 /* GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT */: return "GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT (0x00000001)"; +//case 0x00000002 /* GL_ELEMENT_ARRAY_BARRIER_BIT_EXT */: return "GL_ELEMENT_ARRAY_BARRIER_BIT_EXT (0x00000002)"; +//case 0x00000004 /* GL_UNIFORM_BARRIER_BIT_EXT */: return "GL_UNIFORM_BARRIER_BIT_EXT (0x00000004)"; +//case 0x00000008 /* GL_TEXTURE_FETCH_BARRIER_BIT_EXT */: return "GL_TEXTURE_FETCH_BARRIER_BIT_EXT (0x00000008)"; +//case 0x00000020 /* GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT */: return "GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT (0x00000020)"; +//case 0x00000040 /* GL_COMMAND_BARRIER_BIT_EXT */: return "GL_COMMAND_BARRIER_BIT_EXT (0x00000040)"; +//case 0x00000080 /* GL_PIXEL_BUFFER_BARRIER_BIT_EXT */: return "GL_PIXEL_BUFFER_BARRIER_BIT_EXT (0x00000080)"; +//case 0x00000100 /* GL_TEXTURE_UPDATE_BARRIER_BIT_EXT */: return "GL_TEXTURE_UPDATE_BARRIER_BIT_EXT (0x00000100)"; +//case 0x00000200 /* GL_BUFFER_UPDATE_BARRIER_BIT_EXT */: return "GL_BUFFER_UPDATE_BARRIER_BIT_EXT (0x00000200)"; +//case 0x00000400 /* GL_FRAMEBUFFER_BARRIER_BIT_EXT */: return "GL_FRAMEBUFFER_BARRIER_BIT_EXT (0x00000400)"; +//case 0x00000800 /* GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT */: return "GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT (0x00000800)"; +//case 0x00001000 /* GL_ATOMIC_COUNTER_BARRIER_BIT_EXT */: return "GL_ATOMIC_COUNTER_BARRIER_BIT_EXT (0x00001000)"; +//case 0x8F38 /* GL_MAX_IMAGE_UNITS_EXT */: return "GL_MAX_IMAGE_UNITS_EXT (0x8F38)"; +//case 0x8F39 /* GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT */: return "GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT (0x8F39)"; +//case 0x8F3A /* GL_IMAGE_BINDING_NAME_EXT */: return "GL_IMAGE_BINDING_NAME_EXT (0x8F3A)"; +//case 0x8F3B /* GL_IMAGE_BINDING_LEVEL_EXT */: return "GL_IMAGE_BINDING_LEVEL_EXT (0x8F3B)"; +//case 0x8F3C /* GL_IMAGE_BINDING_LAYERED_EXT */: return "GL_IMAGE_BINDING_LAYERED_EXT (0x8F3C)"; +//case 0x8F3D /* GL_IMAGE_BINDING_LAYER_EXT */: return "GL_IMAGE_BINDING_LAYER_EXT (0x8F3D)"; +//case 0x8F3E /* GL_IMAGE_BINDING_ACCESS_EXT */: return "GL_IMAGE_BINDING_ACCESS_EXT (0x8F3E)"; +//case 0x904C /* GL_IMAGE_1D_EXT */: return "GL_IMAGE_1D_EXT (0x904C)"; +//case 0x904D /* GL_IMAGE_2D_EXT */: return "GL_IMAGE_2D_EXT (0x904D)"; +//case 0x904E /* GL_IMAGE_3D_EXT */: return "GL_IMAGE_3D_EXT (0x904E)"; +//case 0x904F /* GL_IMAGE_2D_RECT_EXT */: return "GL_IMAGE_2D_RECT_EXT (0x904F)"; +//case 0x9050 /* GL_IMAGE_CUBE_EXT */: return "GL_IMAGE_CUBE_EXT (0x9050)"; +//case 0x9051 /* GL_IMAGE_BUFFER_EXT */: return "GL_IMAGE_BUFFER_EXT (0x9051)"; +//case 0x9052 /* GL_IMAGE_1D_ARRAY_EXT */: return "GL_IMAGE_1D_ARRAY_EXT (0x9052)"; +//case 0x9053 /* GL_IMAGE_2D_ARRAY_EXT */: return "GL_IMAGE_2D_ARRAY_EXT (0x9053)"; +//case 0x9054 /* GL_IMAGE_CUBE_MAP_ARRAY_EXT */: return "GL_IMAGE_CUBE_MAP_ARRAY_EXT (0x9054)"; +//case 0x9055 /* GL_IMAGE_2D_MULTISAMPLE_EXT */: return "GL_IMAGE_2D_MULTISAMPLE_EXT (0x9055)"; +//case 0x9056 /* GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT */: return "GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT (0x9056)"; +//case 0x9057 /* GL_INT_IMAGE_1D_EXT */: return "GL_INT_IMAGE_1D_EXT (0x9057)"; +//case 0x9058 /* GL_INT_IMAGE_2D_EXT */: return "GL_INT_IMAGE_2D_EXT (0x9058)"; +//case 0x9059 /* GL_INT_IMAGE_3D_EXT */: return "GL_INT_IMAGE_3D_EXT (0x9059)"; +//case 0x905A /* GL_INT_IMAGE_2D_RECT_EXT */: return "GL_INT_IMAGE_2D_RECT_EXT (0x905A)"; +//case 0x905B /* GL_INT_IMAGE_CUBE_EXT */: return "GL_INT_IMAGE_CUBE_EXT (0x905B)"; +//case 0x905C /* GL_INT_IMAGE_BUFFER_EXT */: return "GL_INT_IMAGE_BUFFER_EXT (0x905C)"; +//case 0x905D /* GL_INT_IMAGE_1D_ARRAY_EXT */: return "GL_INT_IMAGE_1D_ARRAY_EXT (0x905D)"; +//case 0x905E /* GL_INT_IMAGE_2D_ARRAY_EXT */: return "GL_INT_IMAGE_2D_ARRAY_EXT (0x905E)"; +//case 0x905F /* GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT */: return "GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT (0x905F)"; +//case 0x9060 /* GL_INT_IMAGE_2D_MULTISAMPLE_EXT */: return "GL_INT_IMAGE_2D_MULTISAMPLE_EXT (0x9060)"; +//case 0x9061 /* GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT */: return "GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT (0x9061)"; +//case 0x9062 /* GL_UNSIGNED_INT_IMAGE_1D_EXT */: return "GL_UNSIGNED_INT_IMAGE_1D_EXT (0x9062)"; +//case 0x9063 /* GL_UNSIGNED_INT_IMAGE_2D_EXT */: return "GL_UNSIGNED_INT_IMAGE_2D_EXT (0x9063)"; +//case 0x9064 /* GL_UNSIGNED_INT_IMAGE_3D_EXT */: return "GL_UNSIGNED_INT_IMAGE_3D_EXT (0x9064)"; +//case 0x9065 /* GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT */: return "GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT (0x9065)"; +//case 0x9066 /* GL_UNSIGNED_INT_IMAGE_CUBE_EXT */: return "GL_UNSIGNED_INT_IMAGE_CUBE_EXT (0x9066)"; +//case 0x9067 /* GL_UNSIGNED_INT_IMAGE_BUFFER_EXT */: return "GL_UNSIGNED_INT_IMAGE_BUFFER_EXT (0x9067)"; +//case 0x9068 /* GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT */: return "GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT (0x9068)"; +//case 0x9069 /* GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT */: return "GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT (0x9069)"; +///case 0x906A /* GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT */: return "GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT (0x906A)"; +//case 0x906B /* GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT */: return "GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT (0x906B)"; +//case 0x906C /* GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT */: return "GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT (0x906C)"; +//case 0x906D /* GL_MAX_IMAGE_SAMPLES_EXT */: return "GL_MAX_IMAGE_SAMPLES_EXT (0x906D)"; +//case 0x906E /* GL_IMAGE_BINDING_FORMAT_EXT */: return "GL_IMAGE_BINDING_FORMAT_EXT (0x906E)"; +//case 0xFFFFFFFF /* GL_ALL_BARRIER_BITS_EXT */: return "GL_ALL_BARRIER_BITS_EXT (0xFFFFFFFF)"; + +/* -------------------------- GL_EXT_shadow_funcs -------------------------- */ + + + + + + + + +/* --------------------- GL_EXT_shared_texture_palette --------------------- */ + + + + +case 0x81FB /* GL_SHARED_TEXTURE_PALETTE_EXT */: return "GL_SHARED_TEXTURE_PALETTE_EXT (0x81FB)"; + + + + + +/* ------------------------ GL_EXT_stencil_clear_tag ----------------------- */ + + + + +case 0x88F2 /* GL_STENCIL_TAG_BITS_EXT */: return "GL_STENCIL_TAG_BITS_EXT (0x88F2)"; +case 0x88F3 /* GL_STENCIL_CLEAR_TAG_VALUE_EXT */: return "GL_STENCIL_CLEAR_TAG_VALUE_EXT (0x88F3)"; + + + + + +/* ------------------------ GL_EXT_stencil_two_side ------------------------ */ + + + + +case 0x8910 /* GL_STENCIL_TEST_TWO_SIDE_EXT */: return "GL_STENCIL_TEST_TWO_SIDE_EXT (0x8910)"; +case 0x8911 /* GL_ACTIVE_STENCIL_FACE_EXT */: return "GL_ACTIVE_STENCIL_FACE_EXT (0x8911)";/* -------------------------- GL_EXT_stencil_wrap -------------------------- */ + + + + +//case 0x8507 /* GL_INCR_WRAP_EXT */: return "GL_INCR_WRAP_EXT (0x8507)"; +//case 0x8508 /* GL_DECR_WRAP_EXT */: return "GL_DECR_WRAP_EXT (0x8508)"; + + + + + +/* --------------------------- GL_EXT_subtexture --------------------------- */ + + + + + + +/* ----------------------------- GL_EXT_texture ---------------------------- */ + + + + +//case 0x803B /* GL_ALPHA4_EXT */: return "GL_ALPHA4_EXT (0x803B)"; +//case 0x803C /* GL_ALPHA8_EXT */: return "GL_ALPHA8_EXT (0x803C)"; +//case 0x803D /* GL_ALPHA12_EXT */: return "GL_ALPHA12_EXT (0x803D)"; +//case 0x803E /* GL_ALPHA16_EXT */: return "GL_ALPHA16_EXT (0x803E)"; +//case 0x803F /* GL_LUMINANCE4_EXT */: return "GL_LUMINANCE4_EXT (0x803F)"; +//case 0x8040 /* GL_LUMINANCE8_EXT */: return "GL_LUMINANCE8_EXT (0x8040)"; +//case 0x8041 /* GL_LUMINANCE12_EXT */: return "GL_LUMINANCE12_EXT (0x8041)"; +//case 0x8042 /* GL_LUMINANCE16_EXT */: return "GL_LUMINANCE16_EXT (0x8042)"; +//case 0x8043 /* GL_LUMINANCE4_ALPHA4_EXT */: return "GL_LUMINANCE4_ALPHA4_EXT (0x8043)"; +//case 0x8044 /* GL_LUMINANCE6_ALPHA2_EXT */: return "GL_LUMINANCE6_ALPHA2_EXT (0x8044)"; +//case 0x8045 /* GL_LUMINANCE8_ALPHA8_EXT */: return "GL_LUMINANCE8_ALPHA8_EXT (0x8045)"; +//case 0x8046 /* GL_LUMINANCE12_ALPHA4_EXT */: return "GL_LUMINANCE12_ALPHA4_EXT (0x8046)"; +//case 0x8047 /* GL_LUMINANCE12_ALPHA12_EXT */: return "GL_LUMINANCE12_ALPHA12_EXT (0x8047)"; +//case 0x8048 /* GL_LUMINANCE16_ALPHA16_EXT */: return "GL_LUMINANCE16_ALPHA16_EXT (0x8048)"; +//case 0x8049 /* GL_INTENSITY_EXT */: return "GL_INTENSITY_EXT (0x8049)"; +//case 0x804A /* GL_INTENSITY4_EXT */: return "GL_INTENSITY4_EXT (0x804A)"; +//case 0x804B /* GL_INTENSITY8_EXT */: return "GL_INTENSITY8_EXT (0x804B)"; +//case 0x804C /* GL_INTENSITY12_EXT */: return "GL_INTENSITY12_EXT (0x804C)"; +//case 0x804D /* GL_INTENSITY16_EXT */: return "GL_INTENSITY16_EXT (0x804D)"; +case 0x804E /* GL_RGB2_EXT */: return "GL_RGB2_EXT (0x804E)"; +//case 0x804F /* GL_RGB4_EXT */: return "GL_RGB4_EXT (0x804F)"; +//case 0x8050 /* GL_RGB5_EXT */: return "GL_RGB5_EXT (0x8050)"; +//case 0x8051 /* GL_RGB8_EXT */: return "GL_RGB8_EXT (0x8051)"; +//case 0x8052 /* GL_RGB10_EXT */: return "GL_RGB10_EXT (0x8052)"; +//case 0x8053 /* GL_RGB12_EXT */: return "GL_RGB12_EXT (0x8053)"; +//case 0x8054 /* GL_RGB16_EXT */: return "GL_RGB16_EXT (0x8054)"; +//case 0x8055 /* GL_RGBA2_EXT */: return "GL_RGBA2_EXT (0x8055)"; +//case 0x8056 /* GL_RGBA4_EXT */: return "GL_RGBA4_EXT (0x8056)"; +//case 0x8057 /* GL_RGB5_A1_EXT */: return "GL_RGB5_A1_EXT (0x8057)"; +//case 0x8058 /* GL_RGBA8_EXT */: return "GL_RGBA8_EXT (0x8058)"; +//case 0x8059 /* GL_RGB10_A2_EXT */: return "GL_RGB10_A2_EXT (0x8059)"; +//case 0x805A /* GL_RGBA12_EXT */: return "GL_RGBA12_EXT (0x805A)"; +//case 0x805B /* GL_RGBA16_EXT */: return "GL_RGBA16_EXT (0x805B)"; +//case 0x805C /* GL_TEXTURE_RED_SIZE_EXT */: return "GL_TEXTURE_RED_SIZE_EXT (0x805C)"; +//case 0x805D /* GL_TEXTURE_GREEN_SIZE_EXT */: return "GL_TEXTURE_GREEN_SIZE_EXT (0x805D)"; +//case 0x805E /* GL_TEXTURE_BLUE_SIZE_EXT */: return "GL_TEXTURE_BLUE_SIZE_EXT (0x805E)"; +//case 0x805F /* GL_TEXTURE_ALPHA_SIZE_EXT */: return "GL_TEXTURE_ALPHA_SIZE_EXT (0x805F)"; +//case 0x8060 /* GL_TEXTURE_LUMINANCE_SIZE_EXT */: return "GL_TEXTURE_LUMINANCE_SIZE_EXT (0x8060)"; +//case 0x8061 /* GL_TEXTURE_INTENSITY_SIZE_EXT */: return "GL_TEXTURE_INTENSITY_SIZE_EXT (0x8061)"; +case 0x8062 /* GL_REPLACE_EXT */: return "GL_REPLACE_EXT (0x8062)"; +//case 0x8063 /* GL_PROXY_TEXTURE_1D_EXT */: return "GL_PROXY_TEXTURE_1D_EXT (0x8063)"; +//case 0x8064 /* GL_PROXY_TEXTURE_2D_EXT */: return "GL_PROXY_TEXTURE_2D_EXT (0x8064)"; + + + + + +/* ---------------------------- GL_EXT_texture3D --------------------------- */ + + + + +//case 0x806B /* GL_PACK_SKIP_IMAGES_EXT */: return "GL_PACK_SKIP_IMAGES_EXT (0x806B)"; +//case 0x806C /* GL_PACK_IMAGE_HEIGHT_EXT */: return "GL_PACK_IMAGE_HEIGHT_EXT (0x806C)"; +//case 0x806D /* GL_UNPACK_SKIP_IMAGES_EXT */: return "GL_UNPACK_SKIP_IMAGES_EXT (0x806D)"; +//case 0x806E /* GL_UNPACK_IMAGE_HEIGHT_EXT */: return "GL_UNPACK_IMAGE_HEIGHT_EXT (0x806E)"; +//case 0x806F /* GL_TEXTURE_3D_EXT */: return "GL_TEXTURE_3D_EXT (0x806F)"; +//case 0x8070 /* GL_PROXY_TEXTURE_3D_EXT */: return "GL_PROXY_TEXTURE_3D_EXT (0x8070)"; +//case 0x8071 /* GL_TEXTURE_DEPTH_EXT */: return "GL_TEXTURE_DEPTH_EXT (0x8071)"; +//case 0x8072 /* GL_TEXTURE_WRAP_R_EXT */: return "GL_TEXTURE_WRAP_R_EXT (0x8072)"; +//case 0x8073 /* GL_MAX_3D_TEXTURE_SIZE_EXT */: return "GL_MAX_3D_TEXTURE_SIZE_EXT (0x8073)";/* -------------------------- GL_EXT_texture_array ------------------------- */ + + + + +//case 0x884E /* GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT */: return "GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT (0x884E)"; +//case 0x88FF /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */: return "GL_MAX_ARRAY_TEXTURE_LAYERS_EXT (0x88FF)"; +//case 0x8C18 /* GL_TEXTURE_1D_ARRAY_EXT */: return "GL_TEXTURE_1D_ARRAY_EXT (0x8C18)"; +//case 0x8C19 /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */: return "GL_PROXY_TEXTURE_1D_ARRAY_EXT (0x8C19)"; +//case 0x8C1A /* GL_TEXTURE_2D_ARRAY_EXT */: return "GL_TEXTURE_2D_ARRAY_EXT (0x8C1A)"; +//case 0x8C1B /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */: return "GL_PROXY_TEXTURE_2D_ARRAY_EXT (0x8C1B)"; +//case 0x8C1C /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */: return "GL_TEXTURE_BINDING_1D_ARRAY_EXT (0x8C1C)"; +//case 0x8C1D /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */: return "GL_TEXTURE_BINDING_2D_ARRAY_EXT (0x8C1D)";/* ---------------------- GL_EXT_texture_buffer_object --------------------- */ + + + + +//case 0x8C2A /* GL_TEXTURE_BUFFER_EXT */: return "GL_TEXTURE_BUFFER_EXT (0x8C2A)"; +//case 0x8C2B /* GL_MAX_TEXTURE_BUFFER_SIZE_EXT */: return "GL_MAX_TEXTURE_BUFFER_SIZE_EXT (0x8C2B)"; +//case 0x8C2C /* GL_TEXTURE_BINDING_BUFFER_EXT */: return "GL_TEXTURE_BINDING_BUFFER_EXT (0x8C2C)"; +//case 0x8C2D /* GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT */: return "GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT (0x8C2D)"; +//case 0x8C2E /* GL_TEXTURE_BUFFER_FORMAT_EXT */: return "GL_TEXTURE_BUFFER_FORMAT_EXT (0x8C2E)";/* -------------------- GL_EXT_texture_compression_dxt1 -------------------- */ + + + + + + + + +/* -------------------- GL_EXT_texture_compression_latc -------------------- */ + + + + +case 0x8C70 /* GL_COMPRESSED_LUMINANCE_LATC1_EXT */: return "GL_COMPRESSED_LUMINANCE_LATC1_EXT (0x8C70)"; +case 0x8C71 /* GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT */: return "GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT (0x8C71)"; +case 0x8C72 /* GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT */: return "GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT (0x8C72)"; +case 0x8C73 /* GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT */: return "GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT (0x8C73)"; + + + + + +/* -------------------- GL_EXT_texture_compression_rgtc -------------------- */ + + + + +//case 0x8DBB /* GL_COMPRESSED_RED_RGTC1_EXT */: return "GL_COMPRESSED_RED_RGTC1_EXT (0x8DBB)"; +//case 0x8DBC /* GL_COMPRESSED_SIGNED_RED_RGTC1_EXT */: return "GL_COMPRESSED_SIGNED_RED_RGTC1_EXT (0x8DBC)"; +//case 0x8DBD /* GL_COMPRESSED_RED_GREEN_RGTC2_EXT */: return "GL_COMPRESSED_RED_GREEN_RGTC2_EXT (0x8DBD)"; +//case 0x8DBE /* GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT */: return "GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT (0x8DBE)"; + + + + + +/* -------------------- GL_EXT_texture_compression_s3tc -------------------- */ + + + + +case 0x83F0 /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */: return "GL_COMPRESSED_RGB_S3TC_DXT1_EXT (0x83F0)"; +case 0x83F1 /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */: return "GL_COMPRESSED_RGBA_S3TC_DXT1_EXT (0x83F1)"; +case 0x83F2 /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */: return "GL_COMPRESSED_RGBA_S3TC_DXT3_EXT (0x83F2)"; +case 0x83F3 /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */: return "GL_COMPRESSED_RGBA_S3TC_DXT5_EXT (0x83F3)"; + + + + + +/* ------------------------ GL_EXT_texture_cube_map ------------------------ */ + + + + +//case 0x8511 /* GL_NORMAL_MAP_EXT */: return "GL_NORMAL_MAP_EXT (0x8511)"; +//case 0x8512 /* GL_REFLECTION_MAP_EXT */: return "GL_REFLECTION_MAP_EXT (0x8512)"; +//case 0x8513 /* GL_TEXTURE_CUBE_MAP_EXT */: return "GL_TEXTURE_CUBE_MAP_EXT (0x8513)"; +//case 0x8514 /* GL_TEXTURE_BINDING_CUBE_MAP_EXT */: return "GL_TEXTURE_BINDING_CUBE_MAP_EXT (0x8514)"; +//case 0x8515 /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT */: return "GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT (0x8515)"; +//case 0x8516 /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT */: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT (0x8516)"; +//case 0x8517 /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT */: return "GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT (0x8517)"; +//case 0x8518 /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT */: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT (0x8518)"; +//case 0x8519 /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT */: return "GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT (0x8519)"; +//case 0x851A /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT */: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT (0x851A)"; +//case 0x851B /* GL_PROXY_TEXTURE_CUBE_MAP_EXT */: return "GL_PROXY_TEXTURE_CUBE_MAP_EXT (0x851B)"; +//case 0x851C /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT */: return "GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT (0x851C)"; + + + + + +/* ----------------------- GL_EXT_texture_edge_clamp ----------------------- */ + + + + +//case 0x812F /* GL_CLAMP_TO_EDGE_EXT */: return "GL_CLAMP_TO_EDGE_EXT (0x812F)"; + + + + + +/* --------------------------- GL_EXT_texture_env -------------------------- */ +/* ------------------------- GL_EXT_texture_env_add ------------------------ */ + + + + + + + + +/* ----------------------- GL_EXT_texture_env_combine ---------------------- */ + + + + +//case 0x8570 /* GL_COMBINE_EXT */: return "GL_COMBINE_EXT (0x8570)"; +//case 0x8571 /* GL_COMBINE_RGB_EXT */: return "GL_COMBINE_RGB_EXT (0x8571)"; +//case 0x8572 /* GL_COMBINE_ALPHA_EXT */: return "GL_COMBINE_ALPHA_EXT (0x8572)"; +//case 0x8573 /* GL_RGB_SCALE_EXT */: return "GL_RGB_SCALE_EXT (0x8573)"; +//case 0x8574 /* GL_ADD_SIGNED_EXT */: return "GL_ADD_SIGNED_EXT (0x8574)"; +///case 0x8575 /* GL_INTERPOLATE_EXT */: return "GL_INTERPOLATE_EXT (0x8575)"; +//case 0x8576 /* GL_CONSTANT_EXT */: return "GL_CONSTANT_EXT (0x8576)"; +//case 0x8577 /* GL_PRIMARY_COLOR_EXT */: return "GL_PRIMARY_COLOR_EXT (0x8577)"; +//case 0x8578 /* GL_PREVIOUS_EXT */: return "GL_PREVIOUS_EXT (0x8578)"; +//case 0x8580 /* GL_SOURCE0_RGB_EXT */: return "GL_SOURCE0_RGB_EXT (0x8580)"; +//case 0x8581 /* GL_SOURCE1_RGB_EXT */: return "GL_SOURCE1_RGB_EXT (0x8581)"; +//case 0x8582 /* GL_SOURCE2_RGB_EXT */: return "GL_SOURCE2_RGB_EXT (0x8582)"; +//case 0x8588 /* GL_SOURCE0_ALPHA_EXT */: return "GL_SOURCE0_ALPHA_EXT (0x8588)"; +//case 0x8589 /* GL_SOURCE1_ALPHA_EXT */: return "GL_SOURCE1_ALPHA_EXT (0x8589)"; +//case 0x858A /* GL_SOURCE2_ALPHA_EXT */: return "GL_SOURCE2_ALPHA_EXT (0x858A)"; +//case 0x8590 /* GL_OPERAND0_RGB_EXT */: return "GL_OPERAND0_RGB_EXT (0x8590)"; +//case 0x8591 /* GL_OPERAND1_RGB_EXT */: return "GL_OPERAND1_RGB_EXT (0x8591)"; +//case 0x8592 /* GL_OPERAND2_RGB_EXT */: return "GL_OPERAND2_RGB_EXT (0x8592)"; +//case 0x8598 /* GL_OPERAND0_ALPHA_EXT */: return "GL_OPERAND0_ALPHA_EXT (0x8598)"; +//case 0x8599 /* GL_OPERAND1_ALPHA_EXT */: return "GL_OPERAND1_ALPHA_EXT (0x8599)"; +//case 0x859A /* GL_OPERAND2_ALPHA_EXT */: return "GL_OPERAND2_ALPHA_EXT (0x859A)"; + + + + + +/* ------------------------ GL_EXT_texture_env_dot3 ------------------------ */ + + + + +case 0x8740 /* GL_DOT3_RGB_EXT */: return "GL_DOT3_RGB_EXT (0x8740)"; +//case 0x8741 /* GL_DOT3_RGBA_EXT */: return "GL_DOT3_RGBA_EXT (0x8741)"; + + + + + +/* ------------------- GL_EXT_texture_filter_anisotropic ------------------- */ + + + + +case 0x84FE /* GL_TEXTURE_MAX_ANISOTROPY_EXT */: return "GL_TEXTURE_MAX_ANISOTROPY_EXT (0x84FE)"; +case 0x84FF /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */: return "GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT (0x84FF)"; + + + + + +/* ------------------------- GL_EXT_texture_integer ------------------------ */ + + + + +//case 0x8D70 /* GL_RGBA32UI_EXT */: return "GL_RGBA32UI_EXT (0x8D70)"; +//case 0x8D71 /* GL_RGB32UI_EXT */: return "GL_RGB32UI_EXT (0x8D71)"; +case 0x8D72 /* GL_ALPHA32UI_EXT */: return "GL_ALPHA32UI_EXT (0x8D72)"; +case 0x8D73 /* GL_INTENSITY32UI_EXT */: return "GL_INTENSITY32UI_EXT (0x8D73)"; +case 0x8D74 /* GL_LUMINANCE32UI_EXT */: return "GL_LUMINANCE32UI_EXT (0x8D74)"; +case 0x8D75 /* GL_LUMINANCE_ALPHA32UI_EXT */: return "GL_LUMINANCE_ALPHA32UI_EXT (0x8D75)"; +//case 0x8D76 /* GL_RGBA16UI_EXT */: return "GL_RGBA16UI_EXT (0x8D76)"; +//case 0x8D77 /* GL_RGB16UI_EXT */: return "GL_RGB16UI_EXT (0x8D77)"; +case 0x8D78 /* GL_ALPHA16UI_EXT */: return "GL_ALPHA16UI_EXT (0x8D78)"; +case 0x8D79 /* GL_INTENSITY16UI_EXT */: return "GL_INTENSITY16UI_EXT (0x8D79)"; +case 0x8D7A /* GL_LUMINANCE16UI_EXT */: return "GL_LUMINANCE16UI_EXT (0x8D7A)"; +case 0x8D7B /* GL_LUMINANCE_ALPHA16UI_EXT */: return "GL_LUMINANCE_ALPHA16UI_EXT (0x8D7B)"; +//case 0x8D7C /* GL_RGBA8UI_EXT */: return "GL_RGBA8UI_EXT (0x8D7C)"; +//case 0x8D7D /* GL_RGB8UI_EXT */: return "GL_RGB8UI_EXT (0x8D7D)"; +case 0x8D7E /* GL_ALPHA8UI_EXT */: return "GL_ALPHA8UI_EXT (0x8D7E)"; +case 0x8D7F /* GL_INTENSITY8UI_EXT */: return "GL_INTENSITY8UI_EXT (0x8D7F)"; +case 0x8D80 /* GL_LUMINANCE8UI_EXT */: return "GL_LUMINANCE8UI_EXT (0x8D80)"; +case 0x8D81 /* GL_LUMINANCE_ALPHA8UI_EXT */: return "GL_LUMINANCE_ALPHA8UI_EXT (0x8D81)"; +//case 0x8D82 /* GL_RGBA32I_EXT */: return "GL_RGBA32I_EXT (0x8D82)"; +//case 0x8D83 /* GL_RGB32I_EXT */: return "GL_RGB32I_EXT (0x8D83)"; +case 0x8D84 /* GL_ALPHA32I_EXT */: return "GL_ALPHA32I_EXT (0x8D84)"; +case 0x8D85 /* GL_INTENSITY32I_EXT */: return "GL_INTENSITY32I_EXT (0x8D85)"; +case 0x8D86 /* GL_LUMINANCE32I_EXT */: return "GL_LUMINANCE32I_EXT (0x8D86)"; +case 0x8D87 /* GL_LUMINANCE_ALPHA32I_EXT */: return "GL_LUMINANCE_ALPHA32I_EXT (0x8D87)"; +//case 0x8D88 /* GL_RGBA16I_EXT */: return "GL_RGBA16I_EXT (0x8D88)"; +//case 0x8D89 /* GL_RGB16I_EXT */: return "GL_RGB16I_EXT (0x8D89)"; +case 0x8D8A /* GL_ALPHA16I_EXT */: return "GL_ALPHA16I_EXT (0x8D8A)"; +case 0x8D8B /* GL_INTENSITY16I_EXT */: return "GL_INTENSITY16I_EXT (0x8D8B)"; +case 0x8D8C /* GL_LUMINANCE16I_EXT */: return "GL_LUMINANCE16I_EXT (0x8D8C)"; +case 0x8D8D /* GL_LUMINANCE_ALPHA16I_EXT */: return "GL_LUMINANCE_ALPHA16I_EXT (0x8D8D)"; +//case 0x8D8E /* GL_RGBA8I_EXT */: return "GL_RGBA8I_EXT (0x8D8E)"; +//case 0x8D8F /* GL_RGB8I_EXT */: return "GL_RGB8I_EXT (0x8D8F)"; +case 0x8D90 /* GL_ALPHA8I_EXT */: return "GL_ALPHA8I_EXT (0x8D90)"; +case 0x8D91 /* GL_INTENSITY8I_EXT */: return "GL_INTENSITY8I_EXT (0x8D91)"; +case 0x8D92 /* GL_LUMINANCE8I_EXT */: return "GL_LUMINANCE8I_EXT (0x8D92)"; +case 0x8D93 /* GL_LUMINANCE_ALPHA8I_EXT */: return "GL_LUMINANCE_ALPHA8I_EXT (0x8D93)"; +//case 0x8D94 /* GL_RED_INTEGER_EXT */: return "GL_RED_INTEGER_EXT (0x8D94)"; +//case 0x8D95 /* GL_GREEN_INTEGER_EXT */: return "GL_GREEN_INTEGER_EXT (0x8D95)"; +//case 0x8D96 /* GL_BLUE_INTEGER_EXT */: return "GL_BLUE_INTEGER_EXT (0x8D96)"; +//case 0x8D97 /* GL_ALPHA_INTEGER_EXT */: return "GL_ALPHA_INTEGER_EXT (0x8D97)"; +//case 0x8D98 /* GL_RGB_INTEGER_EXT */: return "GL_RGB_INTEGER_EXT (0x8D98)"; +//case 0x8D99 /* GL_RGBA_INTEGER_EXT */: return "GL_RGBA_INTEGER_EXT (0x8D99)"; +//case 0x8D9A /* GL_BGR_INTEGER_EXT */: return "GL_BGR_INTEGER_EXT (0x8D9A)"; +//case 0x8D9B /* GL_BGRA_INTEGER_EXT */: return "GL_BGRA_INTEGER_EXT (0x8D9B)"; +case 0x8D9C /* GL_LUMINANCE_INTEGER_EXT */: return "GL_LUMINANCE_INTEGER_EXT (0x8D9C)"; +case 0x8D9D /* GL_LUMINANCE_ALPHA_INTEGER_EXT */: return "GL_LUMINANCE_ALPHA_INTEGER_EXT (0x8D9D)"; +case 0x8D9E /* GL_RGBA_INTEGER_MODE_EXT */: return "GL_RGBA_INTEGER_MODE_EXT (0x8D9E)";/* ------------------------ GL_EXT_texture_lod_bias ------------------------ */ + + + + +//case 0x84FD /* GL_MAX_TEXTURE_LOD_BIAS_EXT */: return "GL_MAX_TEXTURE_LOD_BIAS_EXT (0x84FD)"; +//case 0x8500 /* GL_TEXTURE_FILTER_CONTROL_EXT */: return "GL_TEXTURE_FILTER_CONTROL_EXT (0x8500)"; +//case 0x8501 /* GL_TEXTURE_LOD_BIAS_EXT */: return "GL_TEXTURE_LOD_BIAS_EXT (0x8501)"; + + + + + +/* ---------------------- GL_EXT_texture_mirror_clamp ---------------------- */ + + + + +//case 0x8742 /* GL_MIRROR_CLAMP_EXT */: return "GL_MIRROR_CLAMP_EXT (0x8742)"; +//case 0x8743 /* GL_MIRROR_CLAMP_TO_EDGE_EXT */: return "GL_MIRROR_CLAMP_TO_EDGE_EXT (0x8743)"; +case 0x8912 /* GL_MIRROR_CLAMP_TO_BORDER_EXT */: return "GL_MIRROR_CLAMP_TO_BORDER_EXT (0x8912)"; + + + + + +/* ------------------------- GL_EXT_texture_object ------------------------- */ + + + + +//case 0x8066 /* GL_TEXTURE_PRIORITY_EXT */: return "GL_TEXTURE_PRIORITY_EXT (0x8066)"; +//case 0x8067 /* GL_TEXTURE_RESIDENT_EXT */: return "GL_TEXTURE_RESIDENT_EXT (0x8067)"; +//case 0x8068 /* GL_TEXTURE_1D_BINDING_EXT */: return "GL_TEXTURE_1D_BINDING_EXT (0x8068)"; +//case 0x8069 /* GL_TEXTURE_2D_BINDING_EXT */: return "GL_TEXTURE_2D_BINDING_EXT (0x8069)"; +//case 0x806A /* GL_TEXTURE_3D_BINDING_EXT */: return "GL_TEXTURE_3D_BINDING_EXT (0x806A)";/* --------------------- GL_EXT_texture_perturb_normal --------------------- */ + + + + +case 0x85AE /* GL_PERTURB_EXT */: return "GL_PERTURB_EXT (0x85AE)"; +case 0x85AF /* GL_TEXTURE_NORMAL_EXT */: return "GL_TEXTURE_NORMAL_EXT (0x85AF)";/* ------------------------ GL_EXT_texture_rectangle ----------------------- */ + + + + +//case 0x84F5 /* GL_TEXTURE_RECTANGLE_EXT */: return "GL_TEXTURE_RECTANGLE_EXT (0x84F5)"; +//case 0x84F6 /* GL_TEXTURE_BINDING_RECTANGLE_EXT */: return "GL_TEXTURE_BINDING_RECTANGLE_EXT (0x84F6)"; +//case 0x84F7 /* GL_PROXY_TEXTURE_RECTANGLE_EXT */: return "GL_PROXY_TEXTURE_RECTANGLE_EXT (0x84F7)"; +//case 0x84F8 /* GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT */: return "GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT (0x84F8)"; + + + + + +/* -------------------------- GL_EXT_texture_sRGB -------------------------- */ + + + + +//case 0x8C40 /* GL_SRGB_EXT */: return "GL_SRGB_EXT (0x8C40)"; +//case 0x8C41 /* GL_SRGB8_EXT */: return "GL_SRGB8_EXT (0x8C41)"; +//case 0x8C42 /* GL_SRGB_ALPHA_EXT */: return "GL_SRGB_ALPHA_EXT (0x8C42)"; +//case 0x8C43 /* GL_SRGB8_ALPHA8_EXT */: return "GL_SRGB8_ALPHA8_EXT (0x8C43)"; +//case 0x8C44 /* GL_SLUMINANCE_ALPHA_EXT */: return "GL_SLUMINANCE_ALPHA_EXT (0x8C44)"; +//case 0x8C45 /* GL_SLUMINANCE8_ALPHA8_EXT */: return "GL_SLUMINANCE8_ALPHA8_EXT (0x8C45)"; +//case 0x8C46 /* GL_SLUMINANCE_EXT */: return "GL_SLUMINANCE_EXT (0x8C46)"; +//case 0x8C47 /* GL_SLUMINANCE8_EXT */: return "GL_SLUMINANCE8_EXT (0x8C47)"; +//case 0x8C48 /* GL_COMPRESSED_SRGB_EXT */: return "GL_COMPRESSED_SRGB_EXT (0x8C48)"; +//case 0x8C49 /* GL_COMPRESSED_SRGB_ALPHA_EXT */: return "GL_COMPRESSED_SRGB_ALPHA_EXT (0x8C49)"; +//case 0x8C4A /* GL_COMPRESSED_SLUMINANCE_EXT */: return "GL_COMPRESSED_SLUMINANCE_EXT (0x8C4A)"; +//case 0x8C4B /* GL_COMPRESSED_SLUMINANCE_ALPHA_EXT */: return "GL_COMPRESSED_SLUMINANCE_ALPHA_EXT (0x8C4B)"; +case 0x8C4C /* GL_COMPRESSED_SRGB_S3TC_DXT1_EXT */: return "GL_COMPRESSED_SRGB_S3TC_DXT1_EXT (0x8C4C)"; +case 0x8C4D /* GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT */: return "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT (0x8C4D)"; +case 0x8C4E /* GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT */: return "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT (0x8C4E)"; +case 0x8C4F /* GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT */: return "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT (0x8C4F)"; + + + + + +/* ----------------------- GL_EXT_texture_sRGB_decode ---------------------- */ + + + + +case 0x8A48 /* GL_TEXTURE_SRGB_DECODE_EXT */: return "GL_TEXTURE_SRGB_DECODE_EXT (0x8A48)"; +case 0x8A49 /* GL_DECODE_EXT */: return "GL_DECODE_EXT (0x8A49)"; +case 0x8A4A /* GL_SKIP_DECODE_EXT */: return "GL_SKIP_DECODE_EXT (0x8A4A)"; + + + + + +/* --------------------- GL_EXT_texture_shared_exponent -------------------- */ + + + + +//case 0x8C3D /* GL_RGB9_E5_EXT */: return "GL_RGB9_E5_EXT (0x8C3D)"; +//case 0x8C3E /* GL_UNSIGNED_INT_5_9_9_9_REV_EXT */: return "GL_UNSIGNED_INT_5_9_9_9_REV_EXT (0x8C3E)"; +//case 0x8C3F /* GL_TEXTURE_SHARED_SIZE_EXT */: return "GL_TEXTURE_SHARED_SIZE_EXT (0x8C3F)"; + + + + + +/* -------------------------- GL_EXT_texture_snorm ------------------------- */ + + + + +//case 0x8F90 /* GL_RED_SNORM */: return "GL_RED_SNORM (0x8F90)"; +//case 0x8F91 /* GL_RG_SNORM */: return "GL_RG_SNORM (0x8F91)"; +//case 0x8F92 /* GL_RGB_SNORM */: return "GL_RGB_SNORM (0x8F92)"; +//case 0x8F93 /* GL_RGBA_SNORM */: return "GL_RGBA_SNORM (0x8F93)"; +//case 0x8F94 /* GL_R8_SNORM */: return "GL_R8_SNORM (0x8F94)"; +//case 0x8F95 /* GL_RG8_SNORM */: return "GL_RG8_SNORM (0x8F95)"; +//case 0x8F96 /* GL_RGB8_SNORM */: return "GL_RGB8_SNORM (0x8F96)"; +//case 0x8F97 /* GL_RGBA8_SNORM */: return "GL_RGBA8_SNORM (0x8F97)"; +//case 0x8F98 /* GL_R16_SNORM */: return "GL_R16_SNORM (0x8F98)"; +//case 0x8F99 /* GL_RG16_SNORM */: return "GL_RG16_SNORM (0x8F99)"; +//case 0x8F9A /* GL_RGB16_SNORM */: return "GL_RGB16_SNORM (0x8F9A)"; +//case 0x8F9B /* GL_RGBA16_SNORM */: return "GL_RGBA16_SNORM (0x8F9B)"; +//case 0x8F9C /* GL_SIGNED_NORMALIZED */: return "GL_SIGNED_NORMALIZED (0x8F9C)"; +case 0x9010 /* GL_ALPHA_SNORM */: return "GL_ALPHA_SNORM (0x9010)"; +case 0x9011 /* GL_LUMINANCE_SNORM */: return "GL_LUMINANCE_SNORM (0x9011)"; +case 0x9012 /* GL_LUMINANCE_ALPHA_SNORM */: return "GL_LUMINANCE_ALPHA_SNORM (0x9012)"; +case 0x9013 /* GL_INTENSITY_SNORM */: return "GL_INTENSITY_SNORM (0x9013)"; +case 0x9014 /* GL_ALPHA8_SNORM */: return "GL_ALPHA8_SNORM (0x9014)"; +case 0x9015 /* GL_LUMINANCE8_SNORM */: return "GL_LUMINANCE8_SNORM (0x9015)"; +case 0x9016 /* GL_LUMINANCE8_ALPHA8_SNORM */: return "GL_LUMINANCE8_ALPHA8_SNORM (0x9016)"; +case 0x9017 /* GL_INTENSITY8_SNORM */: return "GL_INTENSITY8_SNORM (0x9017)"; +case 0x9018 /* GL_ALPHA16_SNORM */: return "GL_ALPHA16_SNORM (0x9018)"; +case 0x9019 /* GL_LUMINANCE16_SNORM */: return "GL_LUMINANCE16_SNORM (0x9019)"; +case 0x901A /* GL_LUMINANCE16_ALPHA16_SNORM */: return "GL_LUMINANCE16_ALPHA16_SNORM (0x901A)"; +case 0x901B /* GL_INTENSITY16_SNORM */: return "GL_INTENSITY16_SNORM (0x901B)"; + + + + + +/* ------------------------- GL_EXT_texture_swizzle ------------------------ */ + + + + +//case 0x8E42 /* GL_TEXTURE_SWIZZLE_R_EXT */: return "GL_TEXTURE_SWIZZLE_R_EXT (0x8E42)"; +//case 0x8E43 /* GL_TEXTURE_SWIZZLE_G_EXT */: return "GL_TEXTURE_SWIZZLE_G_EXT (0x8E43)"; +//case 0x8E44 /* GL_TEXTURE_SWIZZLE_B_EXT */: return "GL_TEXTURE_SWIZZLE_B_EXT (0x8E44)"; +//case 0x8E45 /* GL_TEXTURE_SWIZZLE_A_EXT */: return "GL_TEXTURE_SWIZZLE_A_EXT (0x8E45)"; +//case 0x8E46 /* GL_TEXTURE_SWIZZLE_RGBA_EXT */: return "GL_TEXTURE_SWIZZLE_RGBA_EXT (0x8E46)"; + + + + + +/* --------------------------- GL_EXT_timer_query -------------------------- */ + + + + +//case 0x88BF /* GL_TIME_ELAPSED_EXT */: return "GL_TIME_ELAPSED_EXT (0x88BF)"; + +/* ----------------------- GL_EXT_transform_feedback ----------------------- */ + + + + +//case 0x8C76 /* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT */: return "GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT (0x8C76)"; +//case 0x8C7F /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT */: return "GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT (0x8C7F)"; +///case 0x8C80 /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT */: return "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT (0x8C80)"; +//case 0x8C83 /* GL_TRANSFORM_FEEDBACK_VARYINGS_EXT */: return "GL_TRANSFORM_FEEDBACK_VARYINGS_EXT (0x8C83)"; +//case 0x8C84 /* GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT */: return "GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT (0x8C84)"; +//case 0x8C85 /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT */: return "GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT (0x8C85)"; +//case 0x8C87 /* GL_PRIMITIVES_GENERATED_EXT */: return "GL_PRIMITIVES_GENERATED_EXT (0x8C87)"; +//case 0x8C88 /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT */: return "GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT (0x8C88)"; +//case 0x8C89 /* GL_RASTERIZER_DISCARD_EXT */: return "GL_RASTERIZER_DISCARD_EXT (0x8C89)"; +//case 0x8C8A /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT */: return "GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT (0x8C8A)"; +//case 0x8C8B /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT */: return "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT (0x8C8B)"; +//case 0x8C8C /* GL_INTERLEAVED_ATTRIBS_EXT */: return "GL_INTERLEAVED_ATTRIBS_EXT (0x8C8C)"; +//case 0x8C8D /* GL_SEPARATE_ATTRIBS_EXT */: return "GL_SEPARATE_ATTRIBS_EXT (0x8C8D)"; +//case 0x8C8E /* GL_TRANSFORM_FEEDBACK_BUFFER_EXT */: return "GL_TRANSFORM_FEEDBACK_BUFFER_EXT (0x8C8E)"; +//case 0x8C8F /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT */: return "GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT (0x8C8F)"; + +/* -------------------------- GL_EXT_vertex_array -------------------------- */ + + + + +//case 0x140A /* GL_DOUBLE_EXT */: return "GL_DOUBLE_EXT (0x140A)"; +//case 0x8074 /* GL_VERTEX_ARRAY_EXT */: return "GL_VERTEX_ARRAY_EXT (0x8074)"; +//case 0x8075 /* GL_NORMAL_ARRAY_EXT */: return "GL_NORMAL_ARRAY_EXT (0x8075)"; +//case 0x8076 /* GL_COLOR_ARRAY_EXT */: return "GL_COLOR_ARRAY_EXT (0x8076)"; +//case 0x8077 /* GL_INDEX_ARRAY_EXT */: return "GL_INDEX_ARRAY_EXT (0x8077)"; +//case 0x8078 /* GL_TEXTURE_COORD_ARRAY_EXT */: return "GL_TEXTURE_COORD_ARRAY_EXT (0x8078)"; +//case 0x8079 /* GL_EDGE_FLAG_ARRAY_EXT */: return "GL_EDGE_FLAG_ARRAY_EXT (0x8079)"; +//case 0x807A /* GL_VERTEX_ARRAY_SIZE_EXT */: return "GL_VERTEX_ARRAY_SIZE_EXT (0x807A)"; +//case 0x807B /* GL_VERTEX_ARRAY_TYPE_EXT */: return "GL_VERTEX_ARRAY_TYPE_EXT (0x807B)"; +//case 0x807C /* GL_VERTEX_ARRAY_STRIDE_EXT */: return "GL_VERTEX_ARRAY_STRIDE_EXT (0x807C)"; +case 0x807D /* GL_VERTEX_ARRAY_COUNT_EXT */: return "GL_VERTEX_ARRAY_COUNT_EXT (0x807D)"; +//case 0x807E /* GL_NORMAL_ARRAY_TYPE_EXT */: return "GL_NORMAL_ARRAY_TYPE_EXT (0x807E)"; +//case 0x807F /* GL_NORMAL_ARRAY_STRIDE_EXT */: return "GL_NORMAL_ARRAY_STRIDE_EXT (0x807F)"; +case 0x8080 /* GL_NORMAL_ARRAY_COUNT_EXT */: return "GL_NORMAL_ARRAY_COUNT_EXT (0x8080)"; +//case 0x8081 /* GL_COLOR_ARRAY_SIZE_EXT */: return "GL_COLOR_ARRAY_SIZE_EXT (0x8081)"; +//case 0x8082 /* GL_COLOR_ARRAY_TYPE_EXT */: return "GL_COLOR_ARRAY_TYPE_EXT (0x8082)"; +//case 0x8083 /* GL_COLOR_ARRAY_STRIDE_EXT */: return "GL_COLOR_ARRAY_STRIDE_EXT (0x8083)"; +case 0x8084 /* GL_COLOR_ARRAY_COUNT_EXT */: return "GL_COLOR_ARRAY_COUNT_EXT (0x8084)"; +//case 0x8085 /* GL_INDEX_ARRAY_TYPE_EXT */: return "GL_INDEX_ARRAY_TYPE_EXT (0x8085)"; +//case 0x8086 /* GL_INDEX_ARRAY_STRIDE_EXT */: return "GL_INDEX_ARRAY_STRIDE_EXT (0x8086)"; +case 0x8087 /* GL_INDEX_ARRAY_COUNT_EXT */: return "GL_INDEX_ARRAY_COUNT_EXT (0x8087)"; +//case 0x8088 /* GL_TEXTURE_COORD_ARRAY_SIZE_EXT */: return "GL_TEXTURE_COORD_ARRAY_SIZE_EXT (0x8088)"; +//case 0x8089 /* GL_TEXTURE_COORD_ARRAY_TYPE_EXT */: return "GL_TEXTURE_COORD_ARRAY_TYPE_EXT (0x8089)"; +//case 0x808A /* GL_TEXTURE_COORD_ARRAY_STRIDE_EXT */: return "GL_TEXTURE_COORD_ARRAY_STRIDE_EXT (0x808A)"; +case 0x808B /* GL_TEXTURE_COORD_ARRAY_COUNT_EXT */: return "GL_TEXTURE_COORD_ARRAY_COUNT_EXT (0x808B)"; +//case 0x808C /* GL_EDGE_FLAG_ARRAY_STRIDE_EXT */: return "GL_EDGE_FLAG_ARRAY_STRIDE_EXT (0x808C)"; +case 0x808D /* GL_EDGE_FLAG_ARRAY_COUNT_EXT */: return "GL_EDGE_FLAG_ARRAY_COUNT_EXT (0x808D)"; +//case 0x808E /* GL_VERTEX_ARRAY_POINTER_EXT */: return "GL_VERTEX_ARRAY_POINTER_EXT (0x808E)"; +//case 0x808F /* GL_NORMAL_ARRAY_POINTER_EXT */: return "GL_NORMAL_ARRAY_POINTER_EXT (0x808F)"; +//case 0x8090 /* GL_COLOR_ARRAY_POINTER_EXT */: return "GL_COLOR_ARRAY_POINTER_EXT (0x8090)"; +///case 0x8091 /* GL_INDEX_ARRAY_POINTER_EXT */: return "GL_INDEX_ARRAY_POINTER_EXT (0x8091)"; +///case 0x8092 /* GL_TEXTURE_COORD_ARRAY_POINTER_EXT */: return "GL_TEXTURE_COORD_ARRAY_POINTER_EXT (0x8092)"; +//case 0x8093 /* GL_EDGE_FLAG_ARRAY_POINTER_EXT */: return "GL_EDGE_FLAG_ARRAY_POINTER_EXT (0x8093)"; + + + +/* ------------------------ GL_EXT_vertex_array_bgra ----------------------- */ + + + + +//case 0x80E1 /* GL_BGRA */: return "GL_BGRA (0x80E1)"; + + + + + +/* ----------------------- GL_EXT_vertex_attrib_64bit ---------------------- */ + + + + +//case 0x8F46 /* GL_DOUBLE_MAT2_EXT */: return "GL_DOUBLE_MAT2_EXT (0x8F46)"; +//case 0x8F47 /* GL_DOUBLE_MAT3_EXT */: return "GL_DOUBLE_MAT3_EXT (0x8F47)"; +//case 0x8F48 /* GL_DOUBLE_MAT4_EXT */: return "GL_DOUBLE_MAT4_EXT (0x8F48)"; +//case 0x8F49 /* GL_DOUBLE_MAT2x3_EXT */: return "GL_DOUBLE_MAT2x3_EXT (0x8F49)"; +//case 0x8F4A /* GL_DOUBLE_MAT2x4_EXT */: return "GL_DOUBLE_MAT2x4_EXT (0x8F4A)"; +//case 0x8F4B /* GL_DOUBLE_MAT3x2_EXT */: return "GL_DOUBLE_MAT3x2_EXT (0x8F4B)"; +//case 0x8F4C /* GL_DOUBLE_MAT3x4_EXT */: return "GL_DOUBLE_MAT3x4_EXT (0x8F4C)"; +//case 0x8F4D /* GL_DOUBLE_MAT4x2_EXT */: return "GL_DOUBLE_MAT4x2_EXT (0x8F4D)"; +//case 0x8F4E /* GL_DOUBLE_MAT4x3_EXT */: return "GL_DOUBLE_MAT4x3_EXT (0x8F4E)"; +//case 0x8FFC /* GL_DOUBLE_VEC2_EXT */: return "GL_DOUBLE_VEC2_EXT (0x8FFC)"; +//case 0x8FFD /* GL_DOUBLE_VEC3_EXT */: return "GL_DOUBLE_VEC3_EXT (0x8FFD)"; +//case 0x8FFE /* GL_DOUBLE_VEC4_EXT */: return "GL_DOUBLE_VEC4_EXT (0x8FFE)";/* -------------------------- GL_EXT_vertex_shader ------------------------- */ + + + + +case 0x8780 /* GL_VERTEX_SHADER_EXT */: return "GL_VERTEX_SHADER_EXT (0x8780)"; +case 0x8781 /* GL_VERTEX_SHADER_BINDING_EXT */: return "GL_VERTEX_SHADER_BINDING_EXT (0x8781)"; +case 0x8782 /* GL_OP_INDEX_EXT */: return "GL_OP_INDEX_EXT (0x8782)"; +case 0x8783 /* GL_OP_NEGATE_EXT */: return "GL_OP_NEGATE_EXT (0x8783)"; +case 0x8784 /* GL_OP_DOT3_EXT */: return "GL_OP_DOT3_EXT (0x8784)"; +case 0x8785 /* GL_OP_DOT4_EXT */: return "GL_OP_DOT4_EXT (0x8785)"; +case 0x8786 /* GL_OP_MUL_EXT */: return "GL_OP_MUL_EXT (0x8786)"; +case 0x8787 /* GL_OP_ADD_EXT */: return "GL_OP_ADD_EXT (0x8787)"; +case 0x8788 /* GL_OP_MADD_EXT */: return "GL_OP_MADD_EXT (0x8788)"; +case 0x8789 /* GL_OP_FRAC_EXT */: return "GL_OP_FRAC_EXT (0x8789)"; +case 0x878A /* GL_OP_MAX_EXT */: return "GL_OP_MAX_EXT (0x878A)"; +case 0x878B /* GL_OP_MIN_EXT */: return "GL_OP_MIN_EXT (0x878B)"; +case 0x878C /* GL_OP_SET_GE_EXT */: return "GL_OP_SET_GE_EXT (0x878C)"; +case 0x878D /* GL_OP_SET_LT_EXT */: return "GL_OP_SET_LT_EXT (0x878D)"; +case 0x878E /* GL_OP_CLAMP_EXT */: return "GL_OP_CLAMP_EXT (0x878E)"; +case 0x878F /* GL_OP_FLOOR_EXT */: return "GL_OP_FLOOR_EXT (0x878F)"; +case 0x8790 /* GL_OP_ROUND_EXT */: return "GL_OP_ROUND_EXT (0x8790)"; +case 0x8791 /* GL_OP_EXP_BASE_2_EXT */: return "GL_OP_EXP_BASE_2_EXT (0x8791)"; +case 0x8792 /* GL_OP_LOG_BASE_2_EXT */: return "GL_OP_LOG_BASE_2_EXT (0x8792)"; +case 0x8793 /* GL_OP_POWER_EXT */: return "GL_OP_POWER_EXT (0x8793)"; +case 0x8794 /* GL_OP_RECIP_EXT */: return "GL_OP_RECIP_EXT (0x8794)"; +case 0x8795 /* GL_OP_RECIP_SQRT_EXT */: return "GL_OP_RECIP_SQRT_EXT (0x8795)"; +case 0x8796 /* GL_OP_SUB_EXT */: return "GL_OP_SUB_EXT (0x8796)"; +case 0x8797 /* GL_OP_CROSS_PRODUCT_EXT */: return "GL_OP_CROSS_PRODUCT_EXT (0x8797)"; +case 0x8798 /* GL_OP_MULTIPLY_MATRIX_EXT */: return "GL_OP_MULTIPLY_MATRIX_EXT (0x8798)"; +case 0x8799 /* GL_OP_MOV_EXT */: return "GL_OP_MOV_EXT (0x8799)"; +case 0x879A /* GL_OUTPUT_VERTEX_EXT */: return "GL_OUTPUT_VERTEX_EXT (0x879A)"; +case 0x879B /* GL_OUTPUT_COLOR0_EXT */: return "GL_OUTPUT_COLOR0_EXT (0x879B)"; +case 0x879C /* GL_OUTPUT_COLOR1_EXT */: return "GL_OUTPUT_COLOR1_EXT (0x879C)"; +case 0x879D /* GL_OUTPUT_TEXTURE_COORD0_EXT */: return "GL_OUTPUT_TEXTURE_COORD0_EXT (0x879D)"; +case 0x879E /* GL_OUTPUT_TEXTURE_COORD1_EXT */: return "GL_OUTPUT_TEXTURE_COORD1_EXT (0x879E)"; +case 0x879F /* GL_OUTPUT_TEXTURE_COORD2_EXT */: return "GL_OUTPUT_TEXTURE_COORD2_EXT (0x879F)"; +case 0x87A0 /* GL_OUTPUT_TEXTURE_COORD3_EXT */: return "GL_OUTPUT_TEXTURE_COORD3_EXT (0x87A0)"; +case 0x87A1 /* GL_OUTPUT_TEXTURE_COORD4_EXT */: return "GL_OUTPUT_TEXTURE_COORD4_EXT (0x87A1)"; +case 0x87A2 /* GL_OUTPUT_TEXTURE_COORD5_EXT */: return "GL_OUTPUT_TEXTURE_COORD5_EXT (0x87A2)"; +case 0x87A3 /* GL_OUTPUT_TEXTURE_COORD6_EXT */: return "GL_OUTPUT_TEXTURE_COORD6_EXT (0x87A3)"; +case 0x87A4 /* GL_OUTPUT_TEXTURE_COORD7_EXT */: return "GL_OUTPUT_TEXTURE_COORD7_EXT (0x87A4)"; +case 0x87A5 /* GL_OUTPUT_TEXTURE_COORD8_EXT */: return "GL_OUTPUT_TEXTURE_COORD8_EXT (0x87A5)"; +case 0x87A6 /* GL_OUTPUT_TEXTURE_COORD9_EXT */: return "GL_OUTPUT_TEXTURE_COORD9_EXT (0x87A6)"; +case 0x87A7 /* GL_OUTPUT_TEXTURE_COORD10_EXT */: return "GL_OUTPUT_TEXTURE_COORD10_EXT (0x87A7)"; +case 0x87A8 /* GL_OUTPUT_TEXTURE_COORD11_EXT */: return "GL_OUTPUT_TEXTURE_COORD11_EXT (0x87A8)"; +case 0x87A9 /* GL_OUTPUT_TEXTURE_COORD12_EXT */: return "GL_OUTPUT_TEXTURE_COORD12_EXT (0x87A9)"; +case 0x87AA /* GL_OUTPUT_TEXTURE_COORD13_EXT */: return "GL_OUTPUT_TEXTURE_COORD13_EXT (0x87AA)"; +case 0x87AB /* GL_OUTPUT_TEXTURE_COORD14_EXT */: return "GL_OUTPUT_TEXTURE_COORD14_EXT (0x87AB)"; +case 0x87AC /* GL_OUTPUT_TEXTURE_COORD15_EXT */: return "GL_OUTPUT_TEXTURE_COORD15_EXT (0x87AC)"; +case 0x87AD /* GL_OUTPUT_TEXTURE_COORD16_EXT */: return "GL_OUTPUT_TEXTURE_COORD16_EXT (0x87AD)"; +case 0x87AE /* GL_OUTPUT_TEXTURE_COORD17_EXT */: return "GL_OUTPUT_TEXTURE_COORD17_EXT (0x87AE)"; +case 0x87AF /* GL_OUTPUT_TEXTURE_COORD18_EXT */: return "GL_OUTPUT_TEXTURE_COORD18_EXT (0x87AF)"; +case 0x87B0 /* GL_OUTPUT_TEXTURE_COORD19_EXT */: return "GL_OUTPUT_TEXTURE_COORD19_EXT (0x87B0)"; +case 0x87B1 /* GL_OUTPUT_TEXTURE_COORD20_EXT */: return "GL_OUTPUT_TEXTURE_COORD20_EXT (0x87B1)"; +case 0x87B2 /* GL_OUTPUT_TEXTURE_COORD21_EXT */: return "GL_OUTPUT_TEXTURE_COORD21_EXT (0x87B2)"; +case 0x87B3 /* GL_OUTPUT_TEXTURE_COORD22_EXT */: return "GL_OUTPUT_TEXTURE_COORD22_EXT (0x87B3)"; +case 0x87B4 /* GL_OUTPUT_TEXTURE_COORD23_EXT */: return "GL_OUTPUT_TEXTURE_COORD23_EXT (0x87B4)"; +case 0x87B5 /* GL_OUTPUT_TEXTURE_COORD24_EXT */: return "GL_OUTPUT_TEXTURE_COORD24_EXT (0x87B5)"; +case 0x87B6 /* GL_OUTPUT_TEXTURE_COORD25_EXT */: return "GL_OUTPUT_TEXTURE_COORD25_EXT (0x87B6)"; +case 0x87B7 /* GL_OUTPUT_TEXTURE_COORD26_EXT */: return "GL_OUTPUT_TEXTURE_COORD26_EXT (0x87B7)"; +case 0x87B8 /* GL_OUTPUT_TEXTURE_COORD27_EXT */: return "GL_OUTPUT_TEXTURE_COORD27_EXT (0x87B8)"; +case 0x87B9 /* GL_OUTPUT_TEXTURE_COORD28_EXT */: return "GL_OUTPUT_TEXTURE_COORD28_EXT (0x87B9)"; +case 0x87BA /* GL_OUTPUT_TEXTURE_COORD29_EXT */: return "GL_OUTPUT_TEXTURE_COORD29_EXT (0x87BA)"; +case 0x87BB /* GL_OUTPUT_TEXTURE_COORD30_EXT */: return "GL_OUTPUT_TEXTURE_COORD30_EXT (0x87BB)"; +case 0x87BC /* GL_OUTPUT_TEXTURE_COORD31_EXT */: return "GL_OUTPUT_TEXTURE_COORD31_EXT (0x87BC)"; +case 0x87BD /* GL_OUTPUT_FOG_EXT */: return "GL_OUTPUT_FOG_EXT (0x87BD)"; +case 0x87BE /* GL_SCALAR_EXT */: return "GL_SCALAR_EXT (0x87BE)"; +case 0x87BF /* GL_VECTOR_EXT */: return "GL_VECTOR_EXT (0x87BF)"; +case 0x87C0 /* GL_MATRIX_EXT */: return "GL_MATRIX_EXT (0x87C0)"; +case 0x87C1 /* GL_VARIANT_EXT */: return "GL_VARIANT_EXT (0x87C1)"; +case 0x87C2 /* GL_INVARIANT_EXT */: return "GL_INVARIANT_EXT (0x87C2)"; +case 0x87C3 /* GL_LOCAL_CONSTANT_EXT */: return "GL_LOCAL_CONSTANT_EXT (0x87C3)"; +case 0x87C4 /* GL_LOCAL_EXT */: return "GL_LOCAL_EXT (0x87C4)"; +case 0x87C6 /* GL_MAX_VERTEX_SHADER_VARIANTS_EXT */: return "GL_MAX_VERTEX_SHADER_VARIANTS_EXT (0x87C6)"; +case 0x87C7 /* GL_MAX_VERTEX_SHADER_INVARIANTS_EXT */: return "GL_MAX_VERTEX_SHADER_INVARIANTS_EXT (0x87C7)"; +case 0x87C8 /* GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT */: return "GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT (0x87C8)"; +case 0x87C9 /* GL_MAX_VERTEX_SHADER_LOCALS_EXT */: return "GL_MAX_VERTEX_SHADER_LOCALS_EXT (0x87C9)"; +case 0x87CB /* GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT */: return "GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT (0x87CB)"; +case 0x87CC /* GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT */: return "GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT (0x87CC)"; +case 0x87CD /* GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT */: return "GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT (0x87CD)"; +case 0x87CE /* GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT */: return "GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT (0x87CE)"; +case 0x87D0 /* GL_VERTEX_SHADER_VARIANTS_EXT */: return "GL_VERTEX_SHADER_VARIANTS_EXT (0x87D0)"; +case 0x87D1 /* GL_VERTEX_SHADER_INVARIANTS_EXT */: return "GL_VERTEX_SHADER_INVARIANTS_EXT (0x87D1)"; +case 0x87D2 /* GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT */: return "GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT (0x87D2)"; +case 0x87D3 /* GL_VERTEX_SHADER_LOCALS_EXT */: return "GL_VERTEX_SHADER_LOCALS_EXT (0x87D3)"; +case 0x87D4 /* GL_VERTEX_SHADER_OPTIMIZED_EXT */: return "GL_VERTEX_SHADER_OPTIMIZED_EXT (0x87D4)"; +case 0x87D5 /* GL_X_EXT */: return "GL_X_EXT (0x87D5)"; +case 0x87D6 /* GL_Y_EXT */: return "GL_Y_EXT (0x87D6)"; +case 0x87D7 /* GL_Z_EXT */: return "GL_Z_EXT (0x87D7)"; +case 0x87D8 /* GL_W_EXT */: return "GL_W_EXT (0x87D8)"; +case 0x87D9 /* GL_NEGATIVE_X_EXT */: return "GL_NEGATIVE_X_EXT (0x87D9)"; +case 0x87DA /* GL_NEGATIVE_Y_EXT */: return "GL_NEGATIVE_Y_EXT (0x87DA)"; +case 0x87DB /* GL_NEGATIVE_Z_EXT */: return "GL_NEGATIVE_Z_EXT (0x87DB)"; +case 0x87DC /* GL_NEGATIVE_W_EXT */: return "GL_NEGATIVE_W_EXT (0x87DC)"; +case 0x87DD /* GL_ZERO_EXT */: return "GL_ZERO_EXT (0x87DD)"; +case 0x87DE /* GL_ONE_EXT */: return "GL_ONE_EXT (0x87DE)"; +case 0x87DF /* GL_NEGATIVE_ONE_EXT */: return "GL_NEGATIVE_ONE_EXT (0x87DF)"; +case 0x87E0 /* GL_NORMALIZED_RANGE_EXT */: return "GL_NORMALIZED_RANGE_EXT (0x87E0)"; +case 0x87E1 /* GL_FULL_RANGE_EXT */: return "GL_FULL_RANGE_EXT (0x87E1)"; +case 0x87E2 /* GL_CURRENT_VERTEX_EXT */: return "GL_CURRENT_VERTEX_EXT (0x87E2)"; +case 0x87E3 /* GL_MVP_MATRIX_EXT */: return "GL_MVP_MATRIX_EXT (0x87E3)"; +case 0x87E4 /* GL_VARIANT_VALUE_EXT */: return "GL_VARIANT_VALUE_EXT (0x87E4)"; +case 0x87E5 /* GL_VARIANT_DATATYPE_EXT */: return "GL_VARIANT_DATATYPE_EXT (0x87E5)"; +case 0x87E6 /* GL_VARIANT_ARRAY_STRIDE_EXT */: return "GL_VARIANT_ARRAY_STRIDE_EXT (0x87E6)"; +case 0x87E7 /* GL_VARIANT_ARRAY_TYPE_EXT */: return "GL_VARIANT_ARRAY_TYPE_EXT (0x87E7)"; +case 0x87E8 /* GL_VARIANT_ARRAY_EXT */: return "GL_VARIANT_ARRAY_EXT (0x87E8)"; +case 0x87E9 /* GL_VARIANT_ARRAY_POINTER_EXT */: return "GL_VARIANT_ARRAY_POINTER_EXT (0x87E9)"; +case 0x87EA /* GL_INVARIANT_VALUE_EXT */: return "GL_INVARIANT_VALUE_EXT (0x87EA)"; +case 0x87EB /* GL_INVARIANT_DATATYPE_EXT */: return "GL_INVARIANT_DATATYPE_EXT (0x87EB)"; +case 0x87EC /* GL_LOCAL_CONSTANT_VALUE_EXT */: return "GL_LOCAL_CONSTANT_VALUE_EXT (0x87EC)"; +case 0x87ED /* GL_LOCAL_CONSTANT_DATATYPE_EXT */: return "GL_LOCAL_CONSTANT_DATATYPE_EXT (0x87ED)"; + +/* ------------------------ GL_EXT_vertex_weighting ------------------------ */ + + + + +//case 0x0BA3 /* GL_MODELVIEW0_STACK_DEPTH_EXT */: return "GL_MODELVIEW0_STACK_DEPTH_EXT (0x0BA3)"; +//case 0x0BA6 /* GL_MODELVIEW0_MATRIX_EXT */: return "GL_MODELVIEW0_MATRIX_EXT (0x0BA6)"; +//case 0x1700 /* GL_MODELVIEW0_EXT */: return "GL_MODELVIEW0_EXT (0x1700)"; +case 0x8502 /* GL_MODELVIEW1_STACK_DEPTH_EXT */: return "GL_MODELVIEW1_STACK_DEPTH_EXT (0x8502)"; +case 0x8506 /* GL_MODELVIEW1_MATRIX_EXT */: return "GL_MODELVIEW1_MATRIX_EXT (0x8506)"; +case 0x8509 /* GL_VERTEX_WEIGHTING_EXT */: return "GL_VERTEX_WEIGHTING_EXT (0x8509)"; +//case 0x850A /* GL_MODELVIEW1_EXT */: return "GL_MODELVIEW1_EXT (0x850A)"; +case 0x850B /* GL_CURRENT_VERTEX_WEIGHT_EXT */: return "GL_CURRENT_VERTEX_WEIGHT_EXT (0x850B)"; +case 0x850C /* GL_VERTEX_WEIGHT_ARRAY_EXT */: return "GL_VERTEX_WEIGHT_ARRAY_EXT (0x850C)"; +case 0x850D /* GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT */: return "GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT (0x850D)"; +case 0x850E /* GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT */: return "GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT (0x850E)"; +case 0x850F /* GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT */: return "GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT (0x850F)"; +case 0x8510 /* GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT */: return "GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT (0x8510)"; + + + +/* ------------------------- GL_EXT_x11_sync_object ------------------------ */ + + + + +case 0x90E1 /* GL_SYNC_X11_FENCE_EXT */: return "GL_SYNC_X11_FENCE_EXT (0x90E1)";/* ---------------------- GL_GREMEDY_frame_terminator ---------------------- */ + + +/* ------------------------ GL_GREMEDY_string_marker ----------------------- */ + + +/* --------------------- GL_HP_convolution_border_modes -------------------- */ + + + + + + + + +/* ------------------------- GL_HP_image_transform ------------------------- */ + + +/* -------------------------- GL_HP_occlusion_test ------------------------- */ + + + + +case 0x8165 /* GL_OCCLUSION_TEST_HP */: return "GL_OCCLUSION_TEST_HP (0x8165)"; +case 0x8166 /* GL_OCCLUSION_TEST_RESULT_HP */: return "GL_OCCLUSION_TEST_RESULT_HP (0x8166)"; + + + + + +/* ------------------------- GL_HP_texture_lighting ------------------------ */ + + + + + + + + +/* --------------------------- GL_IBM_cull_vertex -------------------------- */ +/* ---------------------- GL_IBM_multimode_draw_arrays --------------------- */ + + + + +/* ------------------------- GL_IBM_rasterpos_clip ------------------------- */ +/* --------------------------- GL_IBM_static_data -------------------------- */ + +/* --------------------- GL_IBM_texture_mirrored_repeat -------------------- */ + + + + +//case 0x8370 /* GL_MIRRORED_REPEAT_IBM */: return "GL_MIRRORED_REPEAT_IBM (0x8370)"; + + + + + +/* ----------------------- GL_IBM_vertex_array_lists ----------------------- */ + + + +/* -------------------------- GL_INGR_color_clamp -------------------------- */ + + + + +case 0x8560 /* GL_RED_MIN_CLAMP_INGR */: return "GL_RED_MIN_CLAMP_INGR (0x8560)"; +case 0x8561 /* GL_GREEN_MIN_CLAMP_INGR */: return "GL_GREEN_MIN_CLAMP_INGR (0x8561)"; +case 0x8562 /* GL_BLUE_MIN_CLAMP_INGR */: return "GL_BLUE_MIN_CLAMP_INGR (0x8562)"; +case 0x8563 /* GL_ALPHA_MIN_CLAMP_INGR */: return "GL_ALPHA_MIN_CLAMP_INGR (0x8563)"; +case 0x8564 /* GL_RED_MAX_CLAMP_INGR */: return "GL_RED_MAX_CLAMP_INGR (0x8564)"; +case 0x8565 /* GL_GREEN_MAX_CLAMP_INGR */: return "GL_GREEN_MAX_CLAMP_INGR (0x8565)"; +case 0x8566 /* GL_BLUE_MAX_CLAMP_INGR */: return "GL_BLUE_MAX_CLAMP_INGR (0x8566)"; +case 0x8567 /* GL_ALPHA_MAX_CLAMP_INGR */: return "GL_ALPHA_MAX_CLAMP_INGR (0x8567)"; + + + + + +/* ------------------------- GL_INGR_interlace_read ------------------------ */ + + + + +case 0x8568 /* GL_INTERLACE_READ_INGR */: return "GL_INTERLACE_READ_INGR (0x8568)"; + + + + + +/* ------------------------ GL_INTEL_parallel_arrays ----------------------- */ + + + + +case 0x83F4 /* GL_PARALLEL_ARRAYS_INTEL */: return "GL_PARALLEL_ARRAYS_INTEL (0x83F4)"; +case 0x83F5 /* GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL */: return "GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL (0x83F5)"; +case 0x83F6 /* GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL */: return "GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL (0x83F6)"; +case 0x83F7 /* GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL */: return "GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL (0x83F7)"; +case 0x83F8 /* GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL */: return "GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL (0x83F8)"; + + + + + +/* ------------------------ GL_INTEL_texture_scissor ----------------------- */ + + + + +/* ------------------------------ GL_KHR_debug ----------------------------- */ + + + + +//case 0x00000002 /* GL_CONTEXT_FLAG_DEBUG_BIT */: return "GL_CONTEXT_FLAG_DEBUG_BIT (0x00000002)"; +//case 0x0503 /* GL_STACK_OVERFLOW */: return "GL_STACK_OVERFLOW (0x0503)"; +//case 0x0504 /* GL_STACK_UNDERFLOW */: return "GL_STACK_UNDERFLOW (0x0504)"; +//case 0x8242 /* GL_DEBUG_OUTPUT_SYNCHRONOUS */: return "GL_DEBUG_OUTPUT_SYNCHRONOUS (0x8242)"; +//case 0x8243 /* GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH */: return "GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH (0x8243)"; +//case 0x8244 /* GL_DEBUG_CALLBACK_FUNCTION */: return "GL_DEBUG_CALLBACK_FUNCTION (0x8244)"; +//case 0x8245 /* GL_DEBUG_CALLBACK_USER_PARAM */: return "GL_DEBUG_CALLBACK_USER_PARAM (0x8245)"; +//case 0x8246 /* GL_DEBUG_SOURCE_API */: return "GL_DEBUG_SOURCE_API (0x8246)"; +//case 0x8247 /* GL_DEBUG_SOURCE_WINDOW_SYSTEM */: return "GL_DEBUG_SOURCE_WINDOW_SYSTEM (0x8247)"; +//case 0x8248 /* GL_DEBUG_SOURCE_SHADER_COMPILER */: return "GL_DEBUG_SOURCE_SHADER_COMPILER (0x8248)"; +//case 0x8249 /* GL_DEBUG_SOURCE_THIRD_PARTY */: return "GL_DEBUG_SOURCE_THIRD_PARTY (0x8249)"; +//case 0x824A /* GL_DEBUG_SOURCE_APPLICATION */: return "GL_DEBUG_SOURCE_APPLICATION (0x824A)"; +//case 0x824B /* GL_DEBUG_SOURCE_OTHER */: return "GL_DEBUG_SOURCE_OTHER (0x824B)"; +//case 0x824C /* GL_DEBUG_TYPE_ERROR */: return "GL_DEBUG_TYPE_ERROR (0x824C)"; +//case 0x824D /* GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR */: return "GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR (0x824D)"; +//case 0x824E /* GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR */: return "GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR (0x824E)"; +//case 0x824F /* GL_DEBUG_TYPE_PORTABILITY */: return "GL_DEBUG_TYPE_PORTABILITY (0x824F)"; +//case 0x8250 /* GL_DEBUG_TYPE_PERFORMANCE */: return "GL_DEBUG_TYPE_PERFORMANCE (0x8250)"; +//case 0x8251 /* GL_DEBUG_TYPE_OTHER */: return "GL_DEBUG_TYPE_OTHER (0x8251)"; +case 0x8268 /* GL_DEBUG_TYPE_MARKER */: return "GL_DEBUG_TYPE_MARKER (0x8268)"; +case 0x8269 /* GL_DEBUG_TYPE_PUSH_GROUP */: return "GL_DEBUG_TYPE_PUSH_GROUP (0x8269)"; +case 0x826A /* GL_DEBUG_TYPE_POP_GROUP */: return "GL_DEBUG_TYPE_POP_GROUP (0x826A)"; +case 0x826B /* GL_DEBUG_SEVERITY_NOTIFICATION */: return "GL_DEBUG_SEVERITY_NOTIFICATION (0x826B)"; +case 0x826C /* GL_MAX_DEBUG_GROUP_STACK_DEPTH */: return "GL_MAX_DEBUG_GROUP_STACK_DEPTH (0x826C)"; +case 0x826D /* GL_DEBUG_GROUP_STACK_DEPTH */: return "GL_DEBUG_GROUP_STACK_DEPTH (0x826D)"; +case 0x82E0 /* GL_BUFFER */: return "GL_BUFFER (0x82E0)"; +case 0x82E1 /* GL_SHADER */: return "GL_SHADER (0x82E1)"; +case 0x82E2 /* GL_PROGRAM */: return "GL_PROGRAM (0x82E2)"; +case 0x82E3 /* GL_QUERY */: return "GL_QUERY (0x82E3)"; +case 0x82E4 /* GL_PROGRAM_PIPELINE */: return "GL_PROGRAM_PIPELINE (0x82E4)"; +case 0x82E6 /* GL_SAMPLER */: return "GL_SAMPLER (0x82E6)"; +case 0x82E7 /* GL_DISPLAY_LIST */: return "GL_DISPLAY_LIST (0x82E7)"; +case 0x82E8 /* GL_MAX_LABEL_LENGTH */: return "GL_MAX_LABEL_LENGTH (0x82E8)"; +//case 0x9143 /* GL_MAX_DEBUG_MESSAGE_LENGTH */: return "GL_MAX_DEBUG_MESSAGE_LENGTH (0x9143)"; +//case 0x9144 /* GL_MAX_DEBUG_LOGGED_MESSAGES */: return "GL_MAX_DEBUG_LOGGED_MESSAGES (0x9144)"; +//case 0x9145 /* GL_DEBUG_LOGGED_MESSAGES */: return "GL_DEBUG_LOGGED_MESSAGES (0x9145)"; +//case 0x9146 /* GL_DEBUG_SEVERITY_HIGH */: return "GL_DEBUG_SEVERITY_HIGH (0x9146)"; +//case 0x9147 /* GL_DEBUG_SEVERITY_MEDIUM */: return "GL_DEBUG_SEVERITY_MEDIUM (0x9147)"; +//case 0x9148 /* GL_DEBUG_SEVERITY_LOW */: return "GL_DEBUG_SEVERITY_LOW (0x9148)"; +case 0x92E0 /* GL_DEBUG_OUTPUT */: return "GL_DEBUG_OUTPUT (0x92E0)";/* ------------------ GL_KHR_texture_compression_astc_ldr ------------------ */ + + + + +case 0x93B0 /* GL_COMPRESSED_RGBA_ASTC_4x4_KHR */: return "GL_COMPRESSED_RGBA_ASTC_4x4_KHR (0x93B0)"; +case 0x93B1 /* GL_COMPRESSED_RGBA_ASTC_5x4_KHR */: return "GL_COMPRESSED_RGBA_ASTC_5x4_KHR (0x93B1)"; +case 0x93B2 /* GL_COMPRESSED_RGBA_ASTC_5x5_KHR */: return "GL_COMPRESSED_RGBA_ASTC_5x5_KHR (0x93B2)"; +case 0x93B3 /* GL_COMPRESSED_RGBA_ASTC_6x5_KHR */: return "GL_COMPRESSED_RGBA_ASTC_6x5_KHR (0x93B3)"; +case 0x93B4 /* GL_COMPRESSED_RGBA_ASTC_6x6_KHR */: return "GL_COMPRESSED_RGBA_ASTC_6x6_KHR (0x93B4)"; +case 0x93B5 /* GL_COMPRESSED_RGBA_ASTC_8x5_KHR */: return "GL_COMPRESSED_RGBA_ASTC_8x5_KHR (0x93B5)"; +case 0x93B6 /* GL_COMPRESSED_RGBA_ASTC_8x6_KHR */: return "GL_COMPRESSED_RGBA_ASTC_8x6_KHR (0x93B6)"; +case 0x93B7 /* GL_COMPRESSED_RGBA_ASTC_8x8_KHR */: return "GL_COMPRESSED_RGBA_ASTC_8x8_KHR (0x93B7)"; +case 0x93B8 /* GL_COMPRESSED_RGBA_ASTC_10x5_KHR */: return "GL_COMPRESSED_RGBA_ASTC_10x5_KHR (0x93B8)"; +case 0x93B9 /* GL_COMPRESSED_RGBA_ASTC_10x6_KHR */: return "GL_COMPRESSED_RGBA_ASTC_10x6_KHR (0x93B9)"; +case 0x93BA /* GL_COMPRESSED_RGBA_ASTC_10x8_KHR */: return "GL_COMPRESSED_RGBA_ASTC_10x8_KHR (0x93BA)"; +case 0x93BB /* GL_COMPRESSED_RGBA_ASTC_10x10_KHR */: return "GL_COMPRESSED_RGBA_ASTC_10x10_KHR (0x93BB)"; +case 0x93BC /* GL_COMPRESSED_RGBA_ASTC_12x10_KHR */: return "GL_COMPRESSED_RGBA_ASTC_12x10_KHR (0x93BC)"; +case 0x93BD /* GL_COMPRESSED_RGBA_ASTC_12x12_KHR */: return "GL_COMPRESSED_RGBA_ASTC_12x12_KHR (0x93BD)"; +case 0x93D0 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR (0x93D0)"; +case 0x93D1 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR (0x93D1)"; +case 0x93D2 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR (0x93D2)"; +case 0x93D3 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR (0x93D3)"; +case 0x93D4 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR (0x93D4)"; +case 0x93D5 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR (0x93D5)"; +case 0x93D6 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR (0x93D6)"; +case 0x93D7 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR (0x93D7)"; +case 0x93D8 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR (0x93D8)"; +case 0x93D9 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR (0x93D9)"; +case 0x93DA /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR (0x93DA)"; +case 0x93DB /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR (0x93DB)"; +case 0x93DC /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR (0x93DC)"; +case 0x93DD /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR (0x93DD)"; + + + + + +/* -------------------------- GL_KTX_buffer_region ------------------------- */ + + + + +//case 0x0 /* GL_KTX_FRONT_REGION */: return "GL_KTX_FRONT_REGION (0x0)"; +//case 0x1 /* GL_KTX_BACK_REGION */: return "GL_KTX_BACK_REGION (0x1)"; +//case 0x2 /* GL_KTX_Z_REGION */: return "GL_KTX_Z_REGION (0x2)"; +//case 0x3 /* GL_KTX_STENCIL_REGION */: return "GL_KTX_STENCIL_REGION (0x3)"; + + + + + + + +/* ------------------------- GL_MESAX_texture_stack ------------------------ */ + + + + +case 0x8759 /* GL_TEXTURE_1D_STACK_MESAX */: return "GL_TEXTURE_1D_STACK_MESAX (0x8759)"; +case 0x875A /* GL_TEXTURE_2D_STACK_MESAX */: return "GL_TEXTURE_2D_STACK_MESAX (0x875A)"; +case 0x875B /* GL_PROXY_TEXTURE_1D_STACK_MESAX */: return "GL_PROXY_TEXTURE_1D_STACK_MESAX (0x875B)"; +case 0x875C /* GL_PROXY_TEXTURE_2D_STACK_MESAX */: return "GL_PROXY_TEXTURE_2D_STACK_MESAX (0x875C)"; +case 0x875D /* GL_TEXTURE_1D_STACK_BINDING_MESAX */: return "GL_TEXTURE_1D_STACK_BINDING_MESAX (0x875D)"; +case 0x875E /* GL_TEXTURE_2D_STACK_BINDING_MESAX */: return "GL_TEXTURE_2D_STACK_BINDING_MESAX (0x875E)"; + + + + + +/* -------------------------- GL_MESA_pack_invert -------------------------- */ + + + + +case 0x8758 /* GL_PACK_INVERT_MESA */: return "GL_PACK_INVERT_MESA (0x8758)"; + + + + + +/* ------------------------- GL_MESA_resize_buffers ------------------------ */ + + +/* --------------------------- GL_MESA_window_pos -------------------------- */ + + + + + + + + +/* ------------------------- GL_MESA_ycbcr_texture ------------------------- */ + + + + +//case 0x85BA /* GL_UNSIGNED_SHORT_8_8_MESA */: return "GL_UNSIGNED_SHORT_8_8_MESA (0x85BA)"; +//case 0x85BB /* GL_UNSIGNED_SHORT_8_8_REV_MESA */: return "GL_UNSIGNED_SHORT_8_8_REV_MESA (0x85BB)"; +case 0x8757 /* GL_YCBCR_MESA */: return "GL_YCBCR_MESA (0x8757)"; + + + + + +/* ------------------------- GL_NVX_gpu_memory_info ------------------------ */ + + + + +case 0x9047 /* GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX */: return "GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX (0x9047)"; +case 0x9048 /* GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX */: return "GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX (0x9048)"; +case 0x9049 /* GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX */: return "GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX (0x9049)"; +case 0x904A /* GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX */: return "GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX (0x904A)"; +case 0x904B /* GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX */: return "GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX (0x904B)"; + + + + + +/* ------------------------- GL_NV_bindless_texture ------------------------ */ + + + + + + +/* --------------------------- GL_NV_blend_square -------------------------- */ + + + + + + + + +/* ------------------------ GL_NV_conditional_render ----------------------- */ + + + + +//case 0x8E13 /* GL_QUERY_WAIT_NV */: return "GL_QUERY_WAIT_NV (0x8E13)"; +//case 0x8E14 /* GL_QUERY_NO_WAIT_NV */: return "GL_QUERY_NO_WAIT_NV (0x8E14)"; +//case 0x8E15 /* GL_QUERY_BY_REGION_WAIT_NV */: return "GL_QUERY_BY_REGION_WAIT_NV (0x8E15)"; +//case 0x8E16 /* GL_QUERY_BY_REGION_NO_WAIT_NV */: return "GL_QUERY_BY_REGION_NO_WAIT_NV (0x8E16)"; + +/* ----------------------- GL_NV_copy_depth_to_color ----------------------- */ + + + + +case 0x886E /* GL_DEPTH_STENCIL_TO_RGBA_NV */: return "GL_DEPTH_STENCIL_TO_RGBA_NV (0x886E)"; +case 0x886F /* GL_DEPTH_STENCIL_TO_BGRA_NV */: return "GL_DEPTH_STENCIL_TO_BGRA_NV (0x886F)"; + + + + + +/* ---------------------------- GL_NV_copy_image --------------------------- */ + + +/* ------------------------ GL_NV_depth_buffer_float ----------------------- */ + + + + +case 0x8DAB /* GL_DEPTH_COMPONENT32F_NV */: return "GL_DEPTH_COMPONENT32F_NV (0x8DAB)"; +case 0x8DAC /* GL_DEPTH32F_STENCIL8_NV */: return "GL_DEPTH32F_STENCIL8_NV (0x8DAC)"; +//case 0x8DAD /* GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV */: return "GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV (0x8DAD)"; +case 0x8DAF /* GL_DEPTH_BUFFER_FLOAT_MODE_NV */: return "GL_DEPTH_BUFFER_FLOAT_MODE_NV (0x8DAF)"; + + + +/* --------------------------- GL_NV_depth_clamp --------------------------- */ + + + + +//case 0x864F /* GL_DEPTH_CLAMP_NV */: return "GL_DEPTH_CLAMP_NV (0x864F)"; + + + + + +/* ---------------------- GL_NV_depth_range_unclamped ---------------------- */ + + + + +//case 0x8864 /* GL_SAMPLE_COUNT_BITS_NV */: return "GL_SAMPLE_COUNT_BITS_NV (0x8864)"; +//case 0x8865 /* GL_CURRENT_SAMPLE_COUNT_QUERY_NV */: return "GL_CURRENT_SAMPLE_COUNT_QUERY_NV (0x8865)"; +//case 0x8866 /* GL_QUERY_RESULT_NV */: return "GL_QUERY_RESULT_NV (0x8866)"; +//case 0x8867 /* GL_QUERY_RESULT_AVAILABLE_NV */: return "GL_QUERY_RESULT_AVAILABLE_NV (0x8867)"; +//case 0x8914 /* GL_SAMPLE_COUNT_NV */: return "GL_SAMPLE_COUNT_NV (0x8914)"; + + + + + +/* ---------------------------- GL_NV_evaluators --------------------------- */ + + + + +case 0x86C0 /* GL_EVAL_2D_NV */: return "GL_EVAL_2D_NV (0x86C0)"; +case 0x86C1 /* GL_EVAL_TRIANGULAR_2D_NV */: return "GL_EVAL_TRIANGULAR_2D_NV (0x86C1)"; +case 0x86C2 /* GL_MAP_TESSELLATION_NV */: return "GL_MAP_TESSELLATION_NV (0x86C2)"; +case 0x86C3 /* GL_MAP_ATTRIB_U_ORDER_NV */: return "GL_MAP_ATTRIB_U_ORDER_NV (0x86C3)"; +case 0x86C4 /* GL_MAP_ATTRIB_V_ORDER_NV */: return "GL_MAP_ATTRIB_V_ORDER_NV (0x86C4)"; +case 0x86C5 /* GL_EVAL_FRACTIONAL_TESSELLATION_NV */: return "GL_EVAL_FRACTIONAL_TESSELLATION_NV (0x86C5)"; +case 0x86C6 /* GL_EVAL_VERTEX_ATTRIB0_NV */: return "GL_EVAL_VERTEX_ATTRIB0_NV (0x86C6)"; +case 0x86C7 /* GL_EVAL_VERTEX_ATTRIB1_NV */: return "GL_EVAL_VERTEX_ATTRIB1_NV (0x86C7)"; +case 0x86C8 /* GL_EVAL_VERTEX_ATTRIB2_NV */: return "GL_EVAL_VERTEX_ATTRIB2_NV (0x86C8)"; +case 0x86C9 /* GL_EVAL_VERTEX_ATTRIB3_NV */: return "GL_EVAL_VERTEX_ATTRIB3_NV (0x86C9)"; +case 0x86CA /* GL_EVAL_VERTEX_ATTRIB4_NV */: return "GL_EVAL_VERTEX_ATTRIB4_NV (0x86CA)"; +case 0x86CB /* GL_EVAL_VERTEX_ATTRIB5_NV */: return "GL_EVAL_VERTEX_ATTRIB5_NV (0x86CB)"; +case 0x86CC /* GL_EVAL_VERTEX_ATTRIB6_NV */: return "GL_EVAL_VERTEX_ATTRIB6_NV (0x86CC)"; +case 0x86CD /* GL_EVAL_VERTEX_ATTRIB7_NV */: return "GL_EVAL_VERTEX_ATTRIB7_NV (0x86CD)"; +case 0x86CE /* GL_EVAL_VERTEX_ATTRIB8_NV */: return "GL_EVAL_VERTEX_ATTRIB8_NV (0x86CE)"; +case 0x86CF /* GL_EVAL_VERTEX_ATTRIB9_NV */: return "GL_EVAL_VERTEX_ATTRIB9_NV (0x86CF)"; +case 0x86D0 /* GL_EVAL_VERTEX_ATTRIB10_NV */: return "GL_EVAL_VERTEX_ATTRIB10_NV (0x86D0)"; +case 0x86D1 /* GL_EVAL_VERTEX_ATTRIB11_NV */: return "GL_EVAL_VERTEX_ATTRIB11_NV (0x86D1)"; +case 0x86D2 /* GL_EVAL_VERTEX_ATTRIB12_NV */: return "GL_EVAL_VERTEX_ATTRIB12_NV (0x86D2)"; +case 0x86D3 /* GL_EVAL_VERTEX_ATTRIB13_NV */: return "GL_EVAL_VERTEX_ATTRIB13_NV (0x86D3)"; +case 0x86D4 /* GL_EVAL_VERTEX_ATTRIB14_NV */: return "GL_EVAL_VERTEX_ATTRIB14_NV (0x86D4)"; +case 0x86D5 /* GL_EVAL_VERTEX_ATTRIB15_NV */: return "GL_EVAL_VERTEX_ATTRIB15_NV (0x86D5)"; +case 0x86D6 /* GL_MAX_MAP_TESSELLATION_NV */: return "GL_MAX_MAP_TESSELLATION_NV (0x86D6)"; +case 0x86D7 /* GL_MAX_RATIONAL_EVAL_ORDER_NV */: return "GL_MAX_RATIONAL_EVAL_ORDER_NV (0x86D7)"; + + + + + +/* ----------------------- GL_NV_explicit_multisample ---------------------- */ + + + + +//case 0x8E50 /* GL_SAMPLE_POSITION_NV */: return "GL_SAMPLE_POSITION_NV (0x8E50)"; +//case 0x8E51 /* GL_SAMPLE_MASK_NV */: return "GL_SAMPLE_MASK_NV (0x8E51)"; +//case 0x8E52 /* GL_SAMPLE_MASK_VALUE_NV */: return "GL_SAMPLE_MASK_VALUE_NV (0x8E52)"; +case 0x8E53 /* GL_TEXTURE_BINDING_RENDERBUFFER_NV */: return "GL_TEXTURE_BINDING_RENDERBUFFER_NV (0x8E53)"; +case 0x8E54 /* GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV */: return "GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV (0x8E54)"; +case 0x8E55 /* GL_TEXTURE_RENDERBUFFER_NV */: return "GL_TEXTURE_RENDERBUFFER_NV (0x8E55)"; +case 0x8E56 /* GL_SAMPLER_RENDERBUFFER_NV */: return "GL_SAMPLER_RENDERBUFFER_NV (0x8E56)"; +case 0x8E57 /* GL_INT_SAMPLER_RENDERBUFFER_NV */: return "GL_INT_SAMPLER_RENDERBUFFER_NV (0x8E57)"; +case 0x8E58 /* GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV */: return "GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV (0x8E58)"; +//case 0x8E59 /* GL_MAX_SAMPLE_MASK_WORDS_NV */: return "GL_MAX_SAMPLE_MASK_WORDS_NV (0x8E59)"; + + + +/* ------------------------------ GL_NV_fence ------------------------------ */ + + + + +case 0x84F2 /* GL_ALL_COMPLETED_NV */: return "GL_ALL_COMPLETED_NV (0x84F2)"; +case 0x84F3 /* GL_FENCE_STATUS_NV */: return "GL_FENCE_STATUS_NV (0x84F3)"; +case 0x84F4 /* GL_FENCE_CONDITION_NV */: return "GL_FENCE_CONDITION_NV (0x84F4)"; + +/* --------------------------- GL_NV_float_buffer -------------------------- */ + + + + +case 0x8880 /* GL_FLOAT_R_NV */: return "GL_FLOAT_R_NV (0x8880)"; +case 0x8881 /* GL_FLOAT_RG_NV */: return "GL_FLOAT_RG_NV (0x8881)"; +case 0x8882 /* GL_FLOAT_RGB_NV */: return "GL_FLOAT_RGB_NV (0x8882)"; +case 0x8883 /* GL_FLOAT_RGBA_NV */: return "GL_FLOAT_RGBA_NV (0x8883)"; +case 0x8884 /* GL_FLOAT_R16_NV */: return "GL_FLOAT_R16_NV (0x8884)"; +case 0x8885 /* GL_FLOAT_R32_NV */: return "GL_FLOAT_R32_NV (0x8885)"; +case 0x8886 /* GL_FLOAT_RG16_NV */: return "GL_FLOAT_RG16_NV (0x8886)"; +case 0x8887 /* GL_FLOAT_RG32_NV */: return "GL_FLOAT_RG32_NV (0x8887)"; +case 0x8888 /* GL_FLOAT_RGB16_NV */: return "GL_FLOAT_RGB16_NV (0x8888)"; +case 0x8889 /* GL_FLOAT_RGB32_NV */: return "GL_FLOAT_RGB32_NV (0x8889)"; +case 0x888A /* GL_FLOAT_RGBA16_NV */: return "GL_FLOAT_RGBA16_NV (0x888A)"; +case 0x888B /* GL_FLOAT_RGBA32_NV */: return "GL_FLOAT_RGBA32_NV (0x888B)"; +case 0x888C /* GL_TEXTURE_FLOAT_COMPONENTS_NV */: return "GL_TEXTURE_FLOAT_COMPONENTS_NV (0x888C)"; +case 0x888D /* GL_FLOAT_CLEAR_COLOR_VALUE_NV */: return "GL_FLOAT_CLEAR_COLOR_VALUE_NV (0x888D)"; +case 0x888E /* GL_FLOAT_RGBA_MODE_NV */: return "GL_FLOAT_RGBA_MODE_NV (0x888E)"; + + + + + +/* --------------------------- GL_NV_fog_distance -------------------------- */ + + + + +case 0x855A /* GL_FOG_DISTANCE_MODE_NV */: return "GL_FOG_DISTANCE_MODE_NV (0x855A)"; +case 0x855B /* GL_EYE_RADIAL_NV */: return "GL_EYE_RADIAL_NV (0x855B)"; +case 0x855C /* GL_EYE_PLANE_ABSOLUTE_NV */: return "GL_EYE_PLANE_ABSOLUTE_NV (0x855C)"; + + + + + +/* ------------------------- GL_NV_fragment_program ------------------------ */ + + + + +case 0x8868 /* GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV */: return "GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV (0x8868)"; +case 0x8870 /* GL_FRAGMENT_PROGRAM_NV */: return "GL_FRAGMENT_PROGRAM_NV (0x8870)"; +//case 0x8871 /* GL_MAX_TEXTURE_COORDS_NV */: return "GL_MAX_TEXTURE_COORDS_NV (0x8871)"; +//case 0x8872 /* GL_MAX_TEXTURE_IMAGE_UNITS_NV */: return "GL_MAX_TEXTURE_IMAGE_UNITS_NV (0x8872)"; +case 0x8873 /* GL_FRAGMENT_PROGRAM_BINDING_NV */: return "GL_FRAGMENT_PROGRAM_BINDING_NV (0x8873)"; +//case 0x8874 /* GL_PROGRAM_ERROR_STRING_NV */: return "GL_PROGRAM_ERROR_STRING_NV (0x8874)";/* ------------------------ GL_NV_fragment_program2 ------------------------ */ + + + + +case 0x88F5 /* GL_MAX_PROGRAM_CALL_DEPTH_NV */: return "GL_MAX_PROGRAM_CALL_DEPTH_NV (0x88F5)"; +case 0x88F6 /* GL_MAX_PROGRAM_IF_DEPTH_NV */: return "GL_MAX_PROGRAM_IF_DEPTH_NV (0x88F6)"; +case 0x88F7 /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */: return "GL_MAX_PROGRAM_LOOP_DEPTH_NV (0x88F7)"; +case 0x88F8 /* GL_MAX_PROGRAM_LOOP_COUNT_NV */: return "GL_MAX_PROGRAM_LOOP_COUNT_NV (0x88F8)"; + + + + + +/* ------------------------ GL_NV_fragment_program4 ------------------------ */ + + + + + + + + +/* --------------------- GL_NV_fragment_program_option --------------------- */ + + + + + + + + +/* ----------------- GL_NV_framebuffer_multisample_coverage ---------------- */ + + + + +//case 0x8CAB /* GL_RENDERBUFFER_COVERAGE_SAMPLES_NV */: return "GL_RENDERBUFFER_COVERAGE_SAMPLES_NV (0x8CAB)"; +case 0x8E10 /* GL_RENDERBUFFER_COLOR_SAMPLES_NV */: return "GL_RENDERBUFFER_COLOR_SAMPLES_NV (0x8E10)"; +case 0x8E11 /* GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV */: return "GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV (0x8E11)"; +case 0x8E12 /* GL_MULTISAMPLE_COVERAGE_MODES_NV */: return "GL_MULTISAMPLE_COVERAGE_MODES_NV (0x8E12)";/* ------------------------ GL_NV_geometry_program4 ------------------------ */ + + + + +case 0x8C26 /* GL_GEOMETRY_PROGRAM_NV */: return "GL_GEOMETRY_PROGRAM_NV (0x8C26)"; +case 0x8C27 /* GL_MAX_PROGRAM_OUTPUT_VERTICES_NV */: return "GL_MAX_PROGRAM_OUTPUT_VERTICES_NV (0x8C27)"; +case 0x8C28 /* GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV */: return "GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV (0x8C28)";/* ------------------------- GL_NV_geometry_shader4 ------------------------ */ + + + + + + + + +/* --------------------------- GL_NV_gpu_program4 -------------------------- */ + + + + +//case 0x8904 /* GL_MIN_PROGRAM_TEXEL_OFFSET_NV */: return "GL_MIN_PROGRAM_TEXEL_OFFSET_NV (0x8904)"; +//case 0x8905 /* GL_MAX_PROGRAM_TEXEL_OFFSET_NV */: return "GL_MAX_PROGRAM_TEXEL_OFFSET_NV (0x8905)"; +case 0x8906 /* GL_PROGRAM_ATTRIB_COMPONENTS_NV */: return "GL_PROGRAM_ATTRIB_COMPONENTS_NV (0x8906)"; +case 0x8907 /* GL_PROGRAM_RESULT_COMPONENTS_NV */: return "GL_PROGRAM_RESULT_COMPONENTS_NV (0x8907)"; +case 0x8908 /* GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV */: return "GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV (0x8908)"; +case 0x8909 /* GL_MAX_PROGRAM_RESULT_COMPONENTS_NV */: return "GL_MAX_PROGRAM_RESULT_COMPONENTS_NV (0x8909)"; +case 0x8DA5 /* GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV */: return "GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV (0x8DA5)"; +case 0x8DA6 /* GL_MAX_PROGRAM_GENERIC_RESULTS_NV */: return "GL_MAX_PROGRAM_GENERIC_RESULTS_NV (0x8DA6)"; + +/* --------------------------- GL_NV_gpu_program5 -------------------------- */ + + + + +//case 0x8E5A /* GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV */: return "GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV (0x8E5A)"; +//case 0x8E5B /* GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV */: return "GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV (0x8E5B)"; +//case 0x8E5C /* GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV */: return "GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV (0x8E5C)"; +//case 0x8E5D /* GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV */: return "GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV (0x8E5D)"; +//case 0x8E5E /* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV */: return "GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV (0x8E5E)"; +//case 0x8E5F /* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV */: return "GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV (0x8E5F)"; + + + + + +/* ------------------------- GL_NV_gpu_program_fp64 ------------------------ */ + + + + + + + + +/* --------------------------- GL_NV_gpu_shader5 --------------------------- */ + + + + +case 0x140E /* GL_INT64_NV */: return "GL_INT64_NV (0x140E)"; +case 0x140F /* GL_UNSIGNED_INT64_NV */: return "GL_UNSIGNED_INT64_NV (0x140F)"; +case 0x8FE0 /* GL_INT8_NV */: return "GL_INT8_NV (0x8FE0)"; +case 0x8FE1 /* GL_INT8_VEC2_NV */: return "GL_INT8_VEC2_NV (0x8FE1)"; +case 0x8FE2 /* GL_INT8_VEC3_NV */: return "GL_INT8_VEC3_NV (0x8FE2)"; +case 0x8FE3 /* GL_INT8_VEC4_NV */: return "GL_INT8_VEC4_NV (0x8FE3)"; +case 0x8FE4 /* GL_INT16_NV */: return "GL_INT16_NV (0x8FE4)"; +case 0x8FE5 /* GL_INT16_VEC2_NV */: return "GL_INT16_VEC2_NV (0x8FE5)"; +case 0x8FE6 /* GL_INT16_VEC3_NV */: return "GL_INT16_VEC3_NV (0x8FE6)"; +case 0x8FE7 /* GL_INT16_VEC4_NV */: return "GL_INT16_VEC4_NV (0x8FE7)"; +case 0x8FE9 /* GL_INT64_VEC2_NV */: return "GL_INT64_VEC2_NV (0x8FE9)"; +case 0x8FEA /* GL_INT64_VEC3_NV */: return "GL_INT64_VEC3_NV (0x8FEA)"; +case 0x8FEB /* GL_INT64_VEC4_NV */: return "GL_INT64_VEC4_NV (0x8FEB)"; +case 0x8FEC /* GL_UNSIGNED_INT8_NV */: return "GL_UNSIGNED_INT8_NV (0x8FEC)"; +case 0x8FED /* GL_UNSIGNED_INT8_VEC2_NV */: return "GL_UNSIGNED_INT8_VEC2_NV (0x8FED)"; +case 0x8FEE /* GL_UNSIGNED_INT8_VEC3_NV */: return "GL_UNSIGNED_INT8_VEC3_NV (0x8FEE)"; +case 0x8FEF /* GL_UNSIGNED_INT8_VEC4_NV */: return "GL_UNSIGNED_INT8_VEC4_NV (0x8FEF)"; +case 0x8FF0 /* GL_UNSIGNED_INT16_NV */: return "GL_UNSIGNED_INT16_NV (0x8FF0)"; +case 0x8FF1 /* GL_UNSIGNED_INT16_VEC2_NV */: return "GL_UNSIGNED_INT16_VEC2_NV (0x8FF1)"; +case 0x8FF2 /* GL_UNSIGNED_INT16_VEC3_NV */: return "GL_UNSIGNED_INT16_VEC3_NV (0x8FF2)"; +case 0x8FF3 /* GL_UNSIGNED_INT16_VEC4_NV */: return "GL_UNSIGNED_INT16_VEC4_NV (0x8FF3)"; +case 0x8FF5 /* GL_UNSIGNED_INT64_VEC2_NV */: return "GL_UNSIGNED_INT64_VEC2_NV (0x8FF5)"; +case 0x8FF6 /* GL_UNSIGNED_INT64_VEC3_NV */: return "GL_UNSIGNED_INT64_VEC3_NV (0x8FF6)"; +case 0x8FF7 /* GL_UNSIGNED_INT64_VEC4_NV */: return "GL_UNSIGNED_INT64_VEC4_NV (0x8FF7)"; +case 0x8FF8 /* GL_FLOAT16_NV */: return "GL_FLOAT16_NV (0x8FF8)"; +case 0x8FF9 /* GL_FLOAT16_VEC2_NV */: return "GL_FLOAT16_VEC2_NV (0x8FF9)"; +case 0x8FFA /* GL_FLOAT16_VEC3_NV */: return "GL_FLOAT16_VEC3_NV (0x8FFA)"; +case 0x8FFB /* GL_FLOAT16_VEC4_NV */: return "GL_FLOAT16_VEC4_NV (0x8FFB)"; + + + + + +/* ---------------------------- GL_NV_half_float --------------------------- */ + + + + +//case 0x140B /* GL_HALF_FLOAT_NV */: return "GL_HALF_FLOAT_NV (0x140B)"; + +/* ------------------------ GL_NV_light_max_exponent ----------------------- */ + + + + +case 0x8504 /* GL_MAX_SHININESS_NV */: return "GL_MAX_SHININESS_NV (0x8504)"; +case 0x8505 /* GL_MAX_SPOT_EXPONENT_NV */: return "GL_MAX_SPOT_EXPONENT_NV (0x8505)"; + + + + + +/* ----------------------- GL_NV_multisample_coverage ---------------------- */ + + + + +//case 0x80A9 /* GL_COVERAGE_SAMPLES_NV */: return "GL_COVERAGE_SAMPLES_NV (0x80A9)"; +case 0x8E20 /* GL_COLOR_SAMPLES_NV */: return "GL_COLOR_SAMPLES_NV (0x8E20)"; + + + + + +/* --------------------- GL_NV_multisample_filter_hint --------------------- */ + + + + +case 0x8534 /* GL_MULTISAMPLE_FILTER_HINT_NV */: return "GL_MULTISAMPLE_FILTER_HINT_NV (0x8534)"; + + + + + +/* ------------------------- GL_NV_occlusion_query ------------------------- */ + + + + +//case 0x8864 /* GL_PIXEL_COUNTER_BITS_NV */: return "GL_PIXEL_COUNTER_BITS_NV (0x8864)"; +//case 0x8865 /* GL_CURRENT_OCCLUSION_QUERY_ID_NV */: return "GL_CURRENT_OCCLUSION_QUERY_ID_NV (0x8865)"; +//case 0x8866 /* GL_PIXEL_COUNT_NV */: return "GL_PIXEL_COUNT_NV (0x8866)"; +//case 0x8867 /* GL_PIXEL_COUNT_AVAILABLE_NV */: return "GL_PIXEL_COUNT_AVAILABLE_NV (0x8867)"; + +/* ----------------------- GL_NV_packed_depth_stencil ---------------------- */ + + + + +//case 0x84F9 /* GL_DEPTH_STENCIL_NV */: return "GL_DEPTH_STENCIL_NV (0x84F9)"; +//case 0x84FA /* GL_UNSIGNED_INT_24_8_NV */: return "GL_UNSIGNED_INT_24_8_NV (0x84FA)"; + + + + + +/* --------------------- GL_NV_parameter_buffer_object --------------------- */ + + + + +case 0x8DA0 /* GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV */: return "GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV (0x8DA0)"; +case 0x8DA1 /* GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV */: return "GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV (0x8DA1)"; +case 0x8DA2 /* GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV */: return "GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV (0x8DA2)"; +case 0x8DA3 /* GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV */: return "GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV (0x8DA3)"; +case 0x8DA4 /* GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV */: return "GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV (0x8DA4)"; + + + +/* --------------------- GL_NV_parameter_buffer_object2 -------------------- */ + + + + + + + + +/* -------------------------- GL_NV_path_rendering ------------------------- */ + + + + +//case 0x00 /* GL_CLOSE_PATH_NV */: return "GL_CLOSE_PATH_NV (0x00)"; +//case 0x01 /* GL_BOLD_BIT_NV */: return "GL_BOLD_BIT_NV (0x01)"; +//case 0x01 /* GL_GLYPH_WIDTH_BIT_NV */: return "GL_GLYPH_WIDTH_BIT_NV (0x01)"; +//case 0x02 /* GL_GLYPH_HEIGHT_BIT_NV */: return "GL_GLYPH_HEIGHT_BIT_NV (0x02)"; +//case 0x02 /* GL_ITALIC_BIT_NV */: return "GL_ITALIC_BIT_NV (0x02)"; +//case 0x02 /* GL_MOVE_TO_NV */: return "GL_MOVE_TO_NV (0x02)"; +//case 0x03 /* GL_RELATIVE_MOVE_TO_NV */: return "GL_RELATIVE_MOVE_TO_NV (0x03)"; +//case 0x04 /* GL_LINE_TO_NV */: return "GL_LINE_TO_NV (0x04)"; +//case 0x04 /* GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV */: return "GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV (0x04)"; +//case 0x05 /* GL_RELATIVE_LINE_TO_NV */: return "GL_RELATIVE_LINE_TO_NV (0x05)"; +//case 0x06 /* GL_HORIZONTAL_LINE_TO_NV */: return "GL_HORIZONTAL_LINE_TO_NV (0x06)"; +//case 0x07 /* GL_RELATIVE_HORIZONTAL_LINE_TO_NV */: return "GL_RELATIVE_HORIZONTAL_LINE_TO_NV (0x07)"; +//case 0x08 /* GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV */: return "GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV (0x08)"; +//case 0x08 /* GL_VERTICAL_LINE_TO_NV */: return "GL_VERTICAL_LINE_TO_NV (0x08)"; +//case 0x09 /* GL_RELATIVE_VERTICAL_LINE_TO_NV */: return "GL_RELATIVE_VERTICAL_LINE_TO_NV (0x09)"; +//case 0x0A /* GL_QUADRATIC_CURVE_TO_NV */: return "GL_QUADRATIC_CURVE_TO_NV (0x0A)"; +//case 0x0B /* GL_RELATIVE_QUADRATIC_CURVE_TO_NV */: return "GL_RELATIVE_QUADRATIC_CURVE_TO_NV (0x0B)"; +//case 0x0C /* GL_CUBIC_CURVE_TO_NV */: return "GL_CUBIC_CURVE_TO_NV (0x0C)"; +//case 0x0D /* GL_RELATIVE_CUBIC_CURVE_TO_NV */: return "GL_RELATIVE_CUBIC_CURVE_TO_NV (0x0D)"; +//case 0x0E /* GL_SMOOTH_QUADRATIC_CURVE_TO_NV */: return "GL_SMOOTH_QUADRATIC_CURVE_TO_NV (0x0E)"; +case 0x0F /* GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV */: return "GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV (0x0F)"; +//case 0x10 /* GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV */: return "GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV (0x10)"; +//case 0x10 /* GL_SMOOTH_CUBIC_CURVE_TO_NV */: return "GL_SMOOTH_CUBIC_CURVE_TO_NV (0x10)"; +case 0x11 /* GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV */: return "GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV (0x11)"; +case 0x12 /* GL_SMALL_CCW_ARC_TO_NV */: return "GL_SMALL_CCW_ARC_TO_NV (0x12)"; +case 0x13 /* GL_RELATIVE_SMALL_CCW_ARC_TO_NV */: return "GL_RELATIVE_SMALL_CCW_ARC_TO_NV (0x13)"; +case 0x14 /* GL_SMALL_CW_ARC_TO_NV */: return "GL_SMALL_CW_ARC_TO_NV (0x14)"; +case 0x15 /* GL_RELATIVE_SMALL_CW_ARC_TO_NV */: return "GL_RELATIVE_SMALL_CW_ARC_TO_NV (0x15)"; +case 0x16 /* GL_LARGE_CCW_ARC_TO_NV */: return "GL_LARGE_CCW_ARC_TO_NV (0x16)"; +case 0x17 /* GL_RELATIVE_LARGE_CCW_ARC_TO_NV */: return "GL_RELATIVE_LARGE_CCW_ARC_TO_NV (0x17)"; +case 0x18 /* GL_LARGE_CW_ARC_TO_NV */: return "GL_LARGE_CW_ARC_TO_NV (0x18)"; +case 0x19 /* GL_RELATIVE_LARGE_CW_ARC_TO_NV */: return "GL_RELATIVE_LARGE_CW_ARC_TO_NV (0x19)"; +//case 0x20 /* GL_GLYPH_VERTICAL_BEARING_X_BIT_NV */: return "GL_GLYPH_VERTICAL_BEARING_X_BIT_NV (0x20)"; +//case 0x40 /* GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV */: return "GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV (0x40)"; +//case 0x80 /* GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV */: return "GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV (0x80)"; +case 0xF0 /* GL_RESTART_PATH_NV */: return "GL_RESTART_PATH_NV (0xF0)"; +case 0xF2 /* GL_DUP_FIRST_CUBIC_CURVE_TO_NV */: return "GL_DUP_FIRST_CUBIC_CURVE_TO_NV (0xF2)"; +case 0xF4 /* GL_DUP_LAST_CUBIC_CURVE_TO_NV */: return "GL_DUP_LAST_CUBIC_CURVE_TO_NV (0xF4)"; +case 0xF6 /* GL_RECT_NV */: return "GL_RECT_NV (0xF6)"; +case 0xF8 /* GL_CIRCULAR_CCW_ARC_TO_NV */: return "GL_CIRCULAR_CCW_ARC_TO_NV (0xF8)"; +case 0xFA /* GL_CIRCULAR_CW_ARC_TO_NV */: return "GL_CIRCULAR_CW_ARC_TO_NV (0xFA)"; +case 0xFC /* GL_CIRCULAR_TANGENT_ARC_TO_NV */: return "GL_CIRCULAR_TANGENT_ARC_TO_NV (0xFC)"; +case 0xFE /* GL_ARC_TO_NV */: return "GL_ARC_TO_NV (0xFE)"; +case 0xFF /* GL_RELATIVE_ARC_TO_NV */: return "GL_RELATIVE_ARC_TO_NV (0xFF)"; +//case 0x100 /* GL_GLYPH_HAS_KERNING_BIT_NV */: return "GL_GLYPH_HAS_KERNING_BIT_NV (0x100)"; +case 0x852C /* GL_PRIMARY_COLOR_NV */: return "GL_PRIMARY_COLOR_NV (0x852C)"; +case 0x852D /* GL_SECONDARY_COLOR_NV */: return "GL_SECONDARY_COLOR_NV (0x852D)"; +//case 0x8577 /* GL_PRIMARY_COLOR */: return "GL_PRIMARY_COLOR (0x8577)"; +case 0x9070 /* GL_PATH_FORMAT_SVG_NV */: return "GL_PATH_FORMAT_SVG_NV (0x9070)"; +case 0x9071 /* GL_PATH_FORMAT_PS_NV */: return "GL_PATH_FORMAT_PS_NV (0x9071)"; +case 0x9072 /* GL_STANDARD_FONT_NAME_NV */: return "GL_STANDARD_FONT_NAME_NV (0x9072)"; +case 0x9073 /* GL_SYSTEM_FONT_NAME_NV */: return "GL_SYSTEM_FONT_NAME_NV (0x9073)"; +case 0x9074 /* GL_FILE_NAME_NV */: return "GL_FILE_NAME_NV (0x9074)"; +case 0x9075 /* GL_PATH_STROKE_WIDTH_NV */: return "GL_PATH_STROKE_WIDTH_NV (0x9075)"; +case 0x9076 /* GL_PATH_END_CAPS_NV */: return "GL_PATH_END_CAPS_NV (0x9076)"; +case 0x9077 /* GL_PATH_INITIAL_END_CAP_NV */: return "GL_PATH_INITIAL_END_CAP_NV (0x9077)"; +case 0x9078 /* GL_PATH_TERMINAL_END_CAP_NV */: return "GL_PATH_TERMINAL_END_CAP_NV (0x9078)"; +case 0x9079 /* GL_PATH_JOIN_STYLE_NV */: return "GL_PATH_JOIN_STYLE_NV (0x9079)"; +case 0x907A /* GL_PATH_MITER_LIMIT_NV */: return "GL_PATH_MITER_LIMIT_NV (0x907A)"; +case 0x907B /* GL_PATH_DASH_CAPS_NV */: return "GL_PATH_DASH_CAPS_NV (0x907B)"; +case 0x907C /* GL_PATH_INITIAL_DASH_CAP_NV */: return "GL_PATH_INITIAL_DASH_CAP_NV (0x907C)"; +case 0x907D /* GL_PATH_TERMINAL_DASH_CAP_NV */: return "GL_PATH_TERMINAL_DASH_CAP_NV (0x907D)"; +case 0x907E /* GL_PATH_DASH_OFFSET_NV */: return "GL_PATH_DASH_OFFSET_NV (0x907E)"; +case 0x907F /* GL_PATH_CLIENT_LENGTH_NV */: return "GL_PATH_CLIENT_LENGTH_NV (0x907F)"; +case 0x9080 /* GL_PATH_FILL_MODE_NV */: return "GL_PATH_FILL_MODE_NV (0x9080)"; +case 0x9081 /* GL_PATH_FILL_MASK_NV */: return "GL_PATH_FILL_MASK_NV (0x9081)"; +case 0x9082 /* GL_PATH_FILL_COVER_MODE_NV */: return "GL_PATH_FILL_COVER_MODE_NV (0x9082)"; +case 0x9083 /* GL_PATH_STROKE_COVER_MODE_NV */: return "GL_PATH_STROKE_COVER_MODE_NV (0x9083)"; +case 0x9084 /* GL_PATH_STROKE_MASK_NV */: return "GL_PATH_STROKE_MASK_NV (0x9084)"; +case 0x9088 /* GL_COUNT_UP_NV */: return "GL_COUNT_UP_NV (0x9088)"; +case 0x9089 /* GL_COUNT_DOWN_NV */: return "GL_COUNT_DOWN_NV (0x9089)"; +case 0x908A /* GL_PATH_OBJECT_BOUNDING_BOX_NV */: return "GL_PATH_OBJECT_BOUNDING_BOX_NV (0x908A)"; +case 0x908B /* GL_CONVEX_HULL_NV */: return "GL_CONVEX_HULL_NV (0x908B)"; +case 0x908D /* GL_BOUNDING_BOX_NV */: return "GL_BOUNDING_BOX_NV (0x908D)"; +case 0x908E /* GL_TRANSLATE_X_NV */: return "GL_TRANSLATE_X_NV (0x908E)"; +case 0x908F /* GL_TRANSLATE_Y_NV */: return "GL_TRANSLATE_Y_NV (0x908F)"; +case 0x9090 /* GL_TRANSLATE_2D_NV */: return "GL_TRANSLATE_2D_NV (0x9090)"; +case 0x9091 /* GL_TRANSLATE_3D_NV */: return "GL_TRANSLATE_3D_NV (0x9091)"; +case 0x9092 /* GL_AFFINE_2D_NV */: return "GL_AFFINE_2D_NV (0x9092)"; +case 0x9094 /* GL_AFFINE_3D_NV */: return "GL_AFFINE_3D_NV (0x9094)"; +case 0x9096 /* GL_TRANSPOSE_AFFINE_2D_NV */: return "GL_TRANSPOSE_AFFINE_2D_NV (0x9096)"; +case 0x9098 /* GL_TRANSPOSE_AFFINE_3D_NV */: return "GL_TRANSPOSE_AFFINE_3D_NV (0x9098)"; +case 0x909A /* GL_UTF8_NV */: return "GL_UTF8_NV (0x909A)"; +case 0x909B /* GL_UTF16_NV */: return "GL_UTF16_NV (0x909B)"; +case 0x909C /* GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV */: return "GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV (0x909C)"; +case 0x909D /* GL_PATH_COMMAND_COUNT_NV */: return "GL_PATH_COMMAND_COUNT_NV (0x909D)"; +case 0x909E /* GL_PATH_COORD_COUNT_NV */: return "GL_PATH_COORD_COUNT_NV (0x909E)"; +case 0x909F /* GL_PATH_DASH_ARRAY_COUNT_NV */: return "GL_PATH_DASH_ARRAY_COUNT_NV (0x909F)"; +case 0x90A0 /* GL_PATH_COMPUTED_LENGTH_NV */: return "GL_PATH_COMPUTED_LENGTH_NV (0x90A0)"; +case 0x90A1 /* GL_PATH_FILL_BOUNDING_BOX_NV */: return "GL_PATH_FILL_BOUNDING_BOX_NV (0x90A1)"; +case 0x90A2 /* GL_PATH_STROKE_BOUNDING_BOX_NV */: return "GL_PATH_STROKE_BOUNDING_BOX_NV (0x90A2)"; +case 0x90A3 /* GL_SQUARE_NV */: return "GL_SQUARE_NV (0x90A3)"; +case 0x90A4 /* GL_ROUND_NV */: return "GL_ROUND_NV (0x90A4)"; +case 0x90A5 /* GL_TRIANGULAR_NV */: return "GL_TRIANGULAR_NV (0x90A5)"; +case 0x90A6 /* GL_BEVEL_NV */: return "GL_BEVEL_NV (0x90A6)"; +case 0x90A7 /* GL_MITER_REVERT_NV */: return "GL_MITER_REVERT_NV (0x90A7)"; +case 0x90A8 /* GL_MITER_TRUNCATE_NV */: return "GL_MITER_TRUNCATE_NV (0x90A8)"; +case 0x90A9 /* GL_SKIP_MISSING_GLYPH_NV */: return "GL_SKIP_MISSING_GLYPH_NV (0x90A9)"; +case 0x90AA /* GL_USE_MISSING_GLYPH_NV */: return "GL_USE_MISSING_GLYPH_NV (0x90AA)"; +case 0x90AB /* GL_PATH_ERROR_POSITION_NV */: return "GL_PATH_ERROR_POSITION_NV (0x90AB)"; +case 0x90AC /* GL_PATH_FOG_GEN_MODE_NV */: return "GL_PATH_FOG_GEN_MODE_NV (0x90AC)"; +case 0x90AD /* GL_ACCUM_ADJACENT_PAIRS_NV */: return "GL_ACCUM_ADJACENT_PAIRS_NV (0x90AD)"; +case 0x90AE /* GL_ADJACENT_PAIRS_NV */: return "GL_ADJACENT_PAIRS_NV (0x90AE)"; +case 0x90AF /* GL_FIRST_TO_REST_NV */: return "GL_FIRST_TO_REST_NV (0x90AF)"; +case 0x90B0 /* GL_PATH_GEN_MODE_NV */: return "GL_PATH_GEN_MODE_NV (0x90B0)"; +case 0x90B1 /* GL_PATH_GEN_COEFF_NV */: return "GL_PATH_GEN_COEFF_NV (0x90B1)"; +case 0x90B2 /* GL_PATH_GEN_COLOR_FORMAT_NV */: return "GL_PATH_GEN_COLOR_FORMAT_NV (0x90B2)"; +case 0x90B3 /* GL_PATH_GEN_COMPONENTS_NV */: return "GL_PATH_GEN_COMPONENTS_NV (0x90B3)"; +case 0x90B4 /* GL_PATH_DASH_OFFSET_RESET_NV */: return "GL_PATH_DASH_OFFSET_RESET_NV (0x90B4)"; +case 0x90B5 /* GL_MOVE_TO_RESETS_NV */: return "GL_MOVE_TO_RESETS_NV (0x90B5)"; +case 0x90B6 /* GL_MOVE_TO_CONTINUES_NV */: return "GL_MOVE_TO_CONTINUES_NV (0x90B6)"; +case 0x90B7 /* GL_PATH_STENCIL_FUNC_NV */: return "GL_PATH_STENCIL_FUNC_NV (0x90B7)"; +case 0x90B8 /* GL_PATH_STENCIL_REF_NV */: return "GL_PATH_STENCIL_REF_NV (0x90B8)"; +case 0x90B9 /* GL_PATH_STENCIL_VALUE_MASK_NV */: return "GL_PATH_STENCIL_VALUE_MASK_NV (0x90B9)"; +case 0x90BD /* GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV */: return "GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV (0x90BD)"; +case 0x90BE /* GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV */: return "GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV (0x90BE)"; +case 0x90BF /* GL_PATH_COVER_DEPTH_FUNC_NV */: return "GL_PATH_COVER_DEPTH_FUNC_NV (0x90BF)"; +//case 0x00010000 /* GL_FONT_X_MIN_BOUNDS_BIT_NV */: return "GL_FONT_X_MIN_BOUNDS_BIT_NV (0x00010000)"; +//case 0x00020000 /* GL_FONT_Y_MIN_BOUNDS_BIT_NV */: return "GL_FONT_Y_MIN_BOUNDS_BIT_NV (0x00020000)"; +//case 0x00040000 /* GL_FONT_X_MAX_BOUNDS_BIT_NV */: return "GL_FONT_X_MAX_BOUNDS_BIT_NV (0x00040000)"; +//case 0x00080000 /* GL_FONT_Y_MAX_BOUNDS_BIT_NV */: return "GL_FONT_Y_MAX_BOUNDS_BIT_NV (0x00080000)"; +case 0x00100000 /* GL_FONT_UNITS_PER_EM_BIT_NV */: return "GL_FONT_UNITS_PER_EM_BIT_NV (0x00100000)"; +case 0x00200000 /* GL_FONT_ASCENDER_BIT_NV */: return "GL_FONT_ASCENDER_BIT_NV (0x00200000)"; +case 0x00400000 /* GL_FONT_DESCENDER_BIT_NV */: return "GL_FONT_DESCENDER_BIT_NV (0x00400000)"; +case 0x00800000 /* GL_FONT_HEIGHT_BIT_NV */: return "GL_FONT_HEIGHT_BIT_NV (0x00800000)"; +case 0x01000000 /* GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV */: return "GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV (0x01000000)"; +case 0x02000000 /* GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV */: return "GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV (0x02000000)"; +case 0x04000000 /* GL_FONT_UNDERLINE_POSITION_BIT_NV */: return "GL_FONT_UNDERLINE_POSITION_BIT_NV (0x04000000)"; +case 0x08000000 /* GL_FONT_UNDERLINE_THICKNESS_BIT_NV */: return "GL_FONT_UNDERLINE_THICKNESS_BIT_NV (0x08000000)"; +case 0x10000000 /* GL_FONT_HAS_KERNING_BIT_NV */: return "GL_FONT_HAS_KERNING_BIT_NV (0x10000000)"; + + + + + +/* ------------------------- GL_NV_pixel_data_range ------------------------ */ + + + + +case 0x8878 /* GL_WRITE_PIXEL_DATA_RANGE_NV */: return "GL_WRITE_PIXEL_DATA_RANGE_NV (0x8878)"; +case 0x8879 /* GL_READ_PIXEL_DATA_RANGE_NV */: return "GL_READ_PIXEL_DATA_RANGE_NV (0x8879)"; +case 0x887A /* GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV */: return "GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV (0x887A)"; +case 0x887B /* GL_READ_PIXEL_DATA_RANGE_LENGTH_NV */: return "GL_READ_PIXEL_DATA_RANGE_LENGTH_NV (0x887B)"; +case 0x887C /* GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV */: return "GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV (0x887C)"; +case 0x887D /* GL_READ_PIXEL_DATA_RANGE_POINTER_NV */: return "GL_READ_PIXEL_DATA_RANGE_POINTER_NV (0x887D)"; + +/* --------------------------- GL_NV_point_sprite -------------------------- */ + + + + +//case 0x8861 /* GL_POINT_SPRITE_NV */: return "GL_POINT_SPRITE_NV (0x8861)"; +//case 0x8862 /* GL_COORD_REPLACE_NV */: return "GL_COORD_REPLACE_NV (0x8862)"; +case 0x8863 /* GL_POINT_SPRITE_R_MODE_NV */: return "GL_POINT_SPRITE_R_MODE_NV (0x8863)"; + +/* -------------------------- GL_NV_present_video -------------------------- */ + + + + +case 0x8E26 /* GL_FRAME_NV */: return "GL_FRAME_NV (0x8E26)"; +case 0x8E27 /* GL_FIELDS_NV */: return "GL_FIELDS_NV (0x8E27)"; +//case 0x8E28 /* GL_CURRENT_TIME_NV */: return "GL_CURRENT_TIME_NV (0x8E28)"; +case 0x8E29 /* GL_NUM_FILL_STREAMS_NV */: return "GL_NUM_FILL_STREAMS_NV (0x8E29)"; +case 0x8E2A /* GL_PRESENT_TIME_NV */: return "GL_PRESENT_TIME_NV (0x8E2A)"; +case 0x8E2B /* GL_PRESENT_DURATION_NV */: return "GL_PRESENT_DURATION_NV (0x8E2B)";/* ------------------------ GL_NV_primitive_restart ------------------------ */ + + + + +case 0x8558 /* GL_PRIMITIVE_RESTART_NV */: return "GL_PRIMITIVE_RESTART_NV (0x8558)"; +case 0x8559 /* GL_PRIMITIVE_RESTART_INDEX_NV */: return "GL_PRIMITIVE_RESTART_INDEX_NV (0x8559)"; + +/* ------------------------ GL_NV_register_combiners ----------------------- */ + + + + +case 0x8522 /* GL_REGISTER_COMBINERS_NV */: return "GL_REGISTER_COMBINERS_NV (0x8522)"; +case 0x8523 /* GL_VARIABLE_A_NV */: return "GL_VARIABLE_A_NV (0x8523)"; +case 0x8524 /* GL_VARIABLE_B_NV */: return "GL_VARIABLE_B_NV (0x8524)"; +case 0x8525 /* GL_VARIABLE_C_NV */: return "GL_VARIABLE_C_NV (0x8525)"; +case 0x8526 /* GL_VARIABLE_D_NV */: return "GL_VARIABLE_D_NV (0x8526)"; +case 0x8527 /* GL_VARIABLE_E_NV */: return "GL_VARIABLE_E_NV (0x8527)"; +case 0x8528 /* GL_VARIABLE_F_NV */: return "GL_VARIABLE_F_NV (0x8528)"; +case 0x8529 /* GL_VARIABLE_G_NV */: return "GL_VARIABLE_G_NV (0x8529)"; +case 0x852A /* GL_CONSTANT_COLOR0_NV */: return "GL_CONSTANT_COLOR0_NV (0x852A)"; +case 0x852B /* GL_CONSTANT_COLOR1_NV */: return "GL_CONSTANT_COLOR1_NV (0x852B)"; +//case 0x852C /* GL_PRIMARY_COLOR_NV */: return "GL_PRIMARY_COLOR_NV (0x852C)"; +//case 0x852D /* GL_SECONDARY_COLOR_NV */: return "GL_SECONDARY_COLOR_NV (0x852D)"; +case 0x852E /* GL_SPARE0_NV */: return "GL_SPARE0_NV (0x852E)"; +case 0x852F /* GL_SPARE1_NV */: return "GL_SPARE1_NV (0x852F)"; +case 0x8530 /* GL_DISCARD_NV */: return "GL_DISCARD_NV (0x8530)"; +case 0x8531 /* GL_E_TIMES_F_NV */: return "GL_E_TIMES_F_NV (0x8531)"; +case 0x8532 /* GL_SPARE0_PLUS_SECONDARY_COLOR_NV */: return "GL_SPARE0_PLUS_SECONDARY_COLOR_NV (0x8532)"; +case 0x8536 /* GL_UNSIGNED_IDENTITY_NV */: return "GL_UNSIGNED_IDENTITY_NV (0x8536)"; +case 0x8537 /* GL_UNSIGNED_INVERT_NV */: return "GL_UNSIGNED_INVERT_NV (0x8537)"; +case 0x8538 /* GL_EXPAND_NORMAL_NV */: return "GL_EXPAND_NORMAL_NV (0x8538)"; +case 0x8539 /* GL_EXPAND_NEGATE_NV */: return "GL_EXPAND_NEGATE_NV (0x8539)"; +case 0x853A /* GL_HALF_BIAS_NORMAL_NV */: return "GL_HALF_BIAS_NORMAL_NV (0x853A)"; +case 0x853B /* GL_HALF_BIAS_NEGATE_NV */: return "GL_HALF_BIAS_NEGATE_NV (0x853B)"; +case 0x853C /* GL_SIGNED_IDENTITY_NV */: return "GL_SIGNED_IDENTITY_NV (0x853C)"; +case 0x853D /* GL_SIGNED_NEGATE_NV */: return "GL_SIGNED_NEGATE_NV (0x853D)"; +case 0x853E /* GL_SCALE_BY_TWO_NV */: return "GL_SCALE_BY_TWO_NV (0x853E)"; +case 0x853F /* GL_SCALE_BY_FOUR_NV */: return "GL_SCALE_BY_FOUR_NV (0x853F)"; +case 0x8540 /* GL_SCALE_BY_ONE_HALF_NV */: return "GL_SCALE_BY_ONE_HALF_NV (0x8540)"; +case 0x8541 /* GL_BIAS_BY_NEGATIVE_ONE_HALF_NV */: return "GL_BIAS_BY_NEGATIVE_ONE_HALF_NV (0x8541)"; +case 0x8542 /* GL_COMBINER_INPUT_NV */: return "GL_COMBINER_INPUT_NV (0x8542)"; +case 0x8543 /* GL_COMBINER_MAPPING_NV */: return "GL_COMBINER_MAPPING_NV (0x8543)"; +case 0x8544 /* GL_COMBINER_COMPONENT_USAGE_NV */: return "GL_COMBINER_COMPONENT_USAGE_NV (0x8544)"; +case 0x8545 /* GL_COMBINER_AB_DOT_PRODUCT_NV */: return "GL_COMBINER_AB_DOT_PRODUCT_NV (0x8545)"; +case 0x8546 /* GL_COMBINER_CD_DOT_PRODUCT_NV */: return "GL_COMBINER_CD_DOT_PRODUCT_NV (0x8546)"; +case 0x8547 /* GL_COMBINER_MUX_SUM_NV */: return "GL_COMBINER_MUX_SUM_NV (0x8547)"; +case 0x8548 /* GL_COMBINER_SCALE_NV */: return "GL_COMBINER_SCALE_NV (0x8548)"; +case 0x8549 /* GL_COMBINER_BIAS_NV */: return "GL_COMBINER_BIAS_NV (0x8549)"; +case 0x854A /* GL_COMBINER_AB_OUTPUT_NV */: return "GL_COMBINER_AB_OUTPUT_NV (0x854A)"; +case 0x854B /* GL_COMBINER_CD_OUTPUT_NV */: return "GL_COMBINER_CD_OUTPUT_NV (0x854B)"; +case 0x854C /* GL_COMBINER_SUM_OUTPUT_NV */: return "GL_COMBINER_SUM_OUTPUT_NV (0x854C)"; +case 0x854D /* GL_MAX_GENERAL_COMBINERS_NV */: return "GL_MAX_GENERAL_COMBINERS_NV (0x854D)"; +case 0x854E /* GL_NUM_GENERAL_COMBINERS_NV */: return "GL_NUM_GENERAL_COMBINERS_NV (0x854E)"; +case 0x854F /* GL_COLOR_SUM_CLAMP_NV */: return "GL_COLOR_SUM_CLAMP_NV (0x854F)"; +case 0x8550 /* GL_COMBINER0_NV */: return "GL_COMBINER0_NV (0x8550)"; +case 0x8551 /* GL_COMBINER1_NV */: return "GL_COMBINER1_NV (0x8551)"; +case 0x8552 /* GL_COMBINER2_NV */: return "GL_COMBINER2_NV (0x8552)"; +case 0x8553 /* GL_COMBINER3_NV */: return "GL_COMBINER3_NV (0x8553)"; +case 0x8554 /* GL_COMBINER4_NV */: return "GL_COMBINER4_NV (0x8554)"; +case 0x8555 /* GL_COMBINER5_NV */: return "GL_COMBINER5_NV (0x8555)"; +case 0x8556 /* GL_COMBINER6_NV */: return "GL_COMBINER6_NV (0x8556)"; +case 0x8557 /* GL_COMBINER7_NV */: return "GL_COMBINER7_NV (0x8557)"; + + + +/* ----------------------- GL_NV_register_combiners2 ----------------------- */ + + + + +case 0x8535 /* GL_PER_STAGE_CONSTANTS_NV */: return "GL_PER_STAGE_CONSTANTS_NV (0x8535)"; + +/* ----------------------- GL_NV_shader_atomic_float ----------------------- */ + + + + + + + + +/* ------------------------ GL_NV_shader_buffer_load ----------------------- */ + + + + +case 0x8F1D /* GL_BUFFER_GPU_ADDRESS_NV */: return "GL_BUFFER_GPU_ADDRESS_NV (0x8F1D)"; +case 0x8F34 /* GL_GPU_ADDRESS_NV */: return "GL_GPU_ADDRESS_NV (0x8F34)"; +case 0x8F35 /* GL_MAX_SHADER_BUFFER_ADDRESS_NV */: return "GL_MAX_SHADER_BUFFER_ADDRESS_NV (0x8F35)"; + + + +/* ---------------------- GL_NV_tessellation_program5 ---------------------- */ + + + + +case 0x86D8 /* GL_MAX_PROGRAM_PATCH_ATTRIBS_NV */: return "GL_MAX_PROGRAM_PATCH_ATTRIBS_NV (0x86D8)"; +case 0x891E /* GL_TESS_CONTROL_PROGRAM_NV */: return "GL_TESS_CONTROL_PROGRAM_NV (0x891E)"; +case 0x891F /* GL_TESS_EVALUATION_PROGRAM_NV */: return "GL_TESS_EVALUATION_PROGRAM_NV (0x891F)"; +case 0x8C74 /* GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV */: return "GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV (0x8C74)"; +case 0x8C75 /* GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV */: return "GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV (0x8C75)"; + + + + + +/* -------------------------- GL_NV_texgen_emboss -------------------------- */ + + + + +case 0x855D /* GL_EMBOSS_LIGHT_NV */: return "GL_EMBOSS_LIGHT_NV (0x855D)"; +case 0x855E /* GL_EMBOSS_CONSTANT_NV */: return "GL_EMBOSS_CONSTANT_NV (0x855E)"; +case 0x855F /* GL_EMBOSS_MAP_NV */: return "GL_EMBOSS_MAP_NV (0x855F)"; + + + + + +/* ------------------------ GL_NV_texgen_reflection ------------------------ */ + + + + +//case 0x8511 /* GL_NORMAL_MAP_NV */: return "GL_NORMAL_MAP_NV (0x8511)"; +//case 0x8512 /* GL_REFLECTION_MAP_NV */: return "GL_REFLECTION_MAP_NV (0x8512)"; + + + + + +/* ------------------------- GL_NV_texture_barrier ------------------------- */ + + +/* --------------------- GL_NV_texture_compression_vtc --------------------- */ + + + + + + + + +/* ----------------------- GL_NV_texture_env_combine4 ---------------------- */ + + + + +case 0x8503 /* GL_COMBINE4_NV */: return "GL_COMBINE4_NV (0x8503)"; +case 0x8583 /* GL_SOURCE3_RGB_NV */: return "GL_SOURCE3_RGB_NV (0x8583)"; +case 0x858B /* GL_SOURCE3_ALPHA_NV */: return "GL_SOURCE3_ALPHA_NV (0x858B)"; +case 0x8593 /* GL_OPERAND3_RGB_NV */: return "GL_OPERAND3_RGB_NV (0x8593)"; +case 0x859B /* GL_OPERAND3_ALPHA_NV */: return "GL_OPERAND3_ALPHA_NV (0x859B)"; + + + + + +/* ---------------------- GL_NV_texture_expand_normal ---------------------- */ + + + + +case 0x888F /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */: return "GL_TEXTURE_UNSIGNED_REMAP_MODE_NV (0x888F)"; + + + + + +/* ----------------------- GL_NV_texture_multisample ----------------------- */ + + + + +case 0x9045 /* GL_TEXTURE_COVERAGE_SAMPLES_NV */: return "GL_TEXTURE_COVERAGE_SAMPLES_NV (0x9045)"; +case 0x9046 /* GL_TEXTURE_COLOR_SAMPLES_NV */: return "GL_TEXTURE_COLOR_SAMPLES_NV (0x9046)";/* ------------------------ GL_NV_texture_rectangle ------------------------ */ + + + + +//case 0x84F5 /* GL_TEXTURE_RECTANGLE_NV */: return "GL_TEXTURE_RECTANGLE_NV (0x84F5)"; +//case 0x84F6 /* GL_TEXTURE_BINDING_RECTANGLE_NV */: return "GL_TEXTURE_BINDING_RECTANGLE_NV (0x84F6)"; +//case 0x84F7 /* GL_PROXY_TEXTURE_RECTANGLE_NV */: return "GL_PROXY_TEXTURE_RECTANGLE_NV (0x84F7)"; +//case 0x84F8 /* GL_MAX_RECTANGLE_TEXTURE_SIZE_NV */: return "GL_MAX_RECTANGLE_TEXTURE_SIZE_NV (0x84F8)"; + + + + + +/* -------------------------- GL_NV_texture_shader ------------------------- */ + + + + +case 0x864C /* GL_OFFSET_TEXTURE_RECTANGLE_NV */: return "GL_OFFSET_TEXTURE_RECTANGLE_NV (0x864C)"; +case 0x864D /* GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV */: return "GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV (0x864D)"; +case 0x864E /* GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV */: return "GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV (0x864E)"; +case 0x86D9 /* GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV */: return "GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV (0x86D9)"; +case 0x86DA /* GL_UNSIGNED_INT_S8_S8_8_8_NV */: return "GL_UNSIGNED_INT_S8_S8_8_8_NV (0x86DA)"; +case 0x86DB /* GL_UNSIGNED_INT_8_8_S8_S8_REV_NV */: return "GL_UNSIGNED_INT_8_8_S8_S8_REV_NV (0x86DB)"; +case 0x86DC /* GL_DSDT_MAG_INTENSITY_NV */: return "GL_DSDT_MAG_INTENSITY_NV (0x86DC)"; +case 0x86DD /* GL_SHADER_CONSISTENT_NV */: return "GL_SHADER_CONSISTENT_NV (0x86DD)"; +case 0x86DE /* GL_TEXTURE_SHADER_NV */: return "GL_TEXTURE_SHADER_NV (0x86DE)"; +case 0x86DF /* GL_SHADER_OPERATION_NV */: return "GL_SHADER_OPERATION_NV (0x86DF)"; +case 0x86E0 /* GL_CULL_MODES_NV */: return "GL_CULL_MODES_NV (0x86E0)"; +case 0x86E1 /* GL_OFFSET_TEXTURE_2D_MATRIX_NV */: return "GL_OFFSET_TEXTURE_2D_MATRIX_NV (0x86E1)"; +//case 0x86E1 /* GL_OFFSET_TEXTURE_MATRIX_NV */: return "GL_OFFSET_TEXTURE_MATRIX_NV (0x86E1)"; +case 0x86E2 /* GL_OFFSET_TEXTURE_2D_SCALE_NV */: return "GL_OFFSET_TEXTURE_2D_SCALE_NV (0x86E2)"; +//case 0x86E2 /* GL_OFFSET_TEXTURE_SCALE_NV */: return "GL_OFFSET_TEXTURE_SCALE_NV (0x86E2)"; +case 0x86E3 /* GL_OFFSET_TEXTURE_BIAS_NV */: return "GL_OFFSET_TEXTURE_BIAS_NV (0x86E3)"; +//case 0x86E3 /* GL_OFFSET_TEXTURE_2D_BIAS_NV */: return "GL_OFFSET_TEXTURE_2D_BIAS_NV (0x86E3)"; +case 0x86E4 /* GL_PREVIOUS_TEXTURE_INPUT_NV */: return "GL_PREVIOUS_TEXTURE_INPUT_NV (0x86E4)"; +case 0x86E5 /* GL_CONST_EYE_NV */: return "GL_CONST_EYE_NV (0x86E5)"; +case 0x86E6 /* GL_PASS_THROUGH_NV */: return "GL_PASS_THROUGH_NV (0x86E6)"; +case 0x86E7 /* GL_CULL_FRAGMENT_NV */: return "GL_CULL_FRAGMENT_NV (0x86E7)"; +case 0x86E8 /* GL_OFFSET_TEXTURE_2D_NV */: return "GL_OFFSET_TEXTURE_2D_NV (0x86E8)"; +case 0x86E9 /* GL_DEPENDENT_AR_TEXTURE_2D_NV */: return "GL_DEPENDENT_AR_TEXTURE_2D_NV (0x86E9)"; +case 0x86EA /* GL_DEPENDENT_GB_TEXTURE_2D_NV */: return "GL_DEPENDENT_GB_TEXTURE_2D_NV (0x86EA)"; +case 0x86EC /* GL_DOT_PRODUCT_NV */: return "GL_DOT_PRODUCT_NV (0x86EC)"; +case 0x86ED /* GL_DOT_PRODUCT_DEPTH_REPLACE_NV */: return "GL_DOT_PRODUCT_DEPTH_REPLACE_NV (0x86ED)"; +case 0x86EE /* GL_DOT_PRODUCT_TEXTURE_2D_NV */: return "GL_DOT_PRODUCT_TEXTURE_2D_NV (0x86EE)"; +case 0x86F0 /* GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV */: return "GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV (0x86F0)"; +case 0x86F1 /* GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV */: return "GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV (0x86F1)"; +case 0x86F2 /* GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV */: return "GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV (0x86F2)"; +case 0x86F3 /* GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV */: return "GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV (0x86F3)"; +case 0x86F4 /* GL_HILO_NV */: return "GL_HILO_NV (0x86F4)"; +case 0x86F5 /* GL_DSDT_NV */: return "GL_DSDT_NV (0x86F5)"; +case 0x86F6 /* GL_DSDT_MAG_NV */: return "GL_DSDT_MAG_NV (0x86F6)"; +case 0x86F7 /* GL_DSDT_MAG_VIB_NV */: return "GL_DSDT_MAG_VIB_NV (0x86F7)"; +case 0x86F8 /* GL_HILO16_NV */: return "GL_HILO16_NV (0x86F8)"; +case 0x86F9 /* GL_SIGNED_HILO_NV */: return "GL_SIGNED_HILO_NV (0x86F9)"; +case 0x86FA /* GL_SIGNED_HILO16_NV */: return "GL_SIGNED_HILO16_NV (0x86FA)"; +case 0x86FB /* GL_SIGNED_RGBA_NV */: return "GL_SIGNED_RGBA_NV (0x86FB)"; +case 0x86FC /* GL_SIGNED_RGBA8_NV */: return "GL_SIGNED_RGBA8_NV (0x86FC)"; +case 0x86FE /* GL_SIGNED_RGB_NV */: return "GL_SIGNED_RGB_NV (0x86FE)"; +case 0x86FF /* GL_SIGNED_RGB8_NV */: return "GL_SIGNED_RGB8_NV (0x86FF)"; +case 0x8701 /* GL_SIGNED_LUMINANCE_NV */: return "GL_SIGNED_LUMINANCE_NV (0x8701)"; +case 0x8702 /* GL_SIGNED_LUMINANCE8_NV */: return "GL_SIGNED_LUMINANCE8_NV (0x8702)"; +case 0x8703 /* GL_SIGNED_LUMINANCE_ALPHA_NV */: return "GL_SIGNED_LUMINANCE_ALPHA_NV (0x8703)"; +case 0x8704 /* GL_SIGNED_LUMINANCE8_ALPHA8_NV */: return "GL_SIGNED_LUMINANCE8_ALPHA8_NV (0x8704)"; +case 0x8705 /* GL_SIGNED_ALPHA_NV */: return "GL_SIGNED_ALPHA_NV (0x8705)"; +case 0x8706 /* GL_SIGNED_ALPHA8_NV */: return "GL_SIGNED_ALPHA8_NV (0x8706)"; +case 0x8707 /* GL_SIGNED_INTENSITY_NV */: return "GL_SIGNED_INTENSITY_NV (0x8707)"; +case 0x8708 /* GL_SIGNED_INTENSITY8_NV */: return "GL_SIGNED_INTENSITY8_NV (0x8708)"; +case 0x8709 /* GL_DSDT8_NV */: return "GL_DSDT8_NV (0x8709)"; +case 0x870A /* GL_DSDT8_MAG8_NV */: return "GL_DSDT8_MAG8_NV (0x870A)"; +case 0x870B /* GL_DSDT8_MAG8_INTENSITY8_NV */: return "GL_DSDT8_MAG8_INTENSITY8_NV (0x870B)"; +case 0x870C /* GL_SIGNED_RGB_UNSIGNED_ALPHA_NV */: return "GL_SIGNED_RGB_UNSIGNED_ALPHA_NV (0x870C)"; +case 0x870D /* GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV */: return "GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV (0x870D)"; +case 0x870E /* GL_HI_SCALE_NV */: return "GL_HI_SCALE_NV (0x870E)"; +case 0x870F /* GL_LO_SCALE_NV */: return "GL_LO_SCALE_NV (0x870F)"; +case 0x8710 /* GL_DS_SCALE_NV */: return "GL_DS_SCALE_NV (0x8710)"; +case 0x8711 /* GL_DT_SCALE_NV */: return "GL_DT_SCALE_NV (0x8711)"; +case 0x8712 /* GL_MAGNITUDE_SCALE_NV */: return "GL_MAGNITUDE_SCALE_NV (0x8712)"; +case 0x8713 /* GL_VIBRANCE_SCALE_NV */: return "GL_VIBRANCE_SCALE_NV (0x8713)"; +case 0x8714 /* GL_HI_BIAS_NV */: return "GL_HI_BIAS_NV (0x8714)"; +case 0x8715 /* GL_LO_BIAS_NV */: return "GL_LO_BIAS_NV (0x8715)"; +case 0x8716 /* GL_DS_BIAS_NV */: return "GL_DS_BIAS_NV (0x8716)"; +case 0x8717 /* GL_DT_BIAS_NV */: return "GL_DT_BIAS_NV (0x8717)"; +case 0x8718 /* GL_MAGNITUDE_BIAS_NV */: return "GL_MAGNITUDE_BIAS_NV (0x8718)"; +case 0x8719 /* GL_VIBRANCE_BIAS_NV */: return "GL_VIBRANCE_BIAS_NV (0x8719)"; +case 0x871A /* GL_TEXTURE_BORDER_VALUES_NV */: return "GL_TEXTURE_BORDER_VALUES_NV (0x871A)"; +case 0x871B /* GL_TEXTURE_HI_SIZE_NV */: return "GL_TEXTURE_HI_SIZE_NV (0x871B)"; +case 0x871C /* GL_TEXTURE_LO_SIZE_NV */: return "GL_TEXTURE_LO_SIZE_NV (0x871C)"; +case 0x871D /* GL_TEXTURE_DS_SIZE_NV */: return "GL_TEXTURE_DS_SIZE_NV (0x871D)"; +case 0x871E /* GL_TEXTURE_DT_SIZE_NV */: return "GL_TEXTURE_DT_SIZE_NV (0x871E)"; +case 0x871F /* GL_TEXTURE_MAG_SIZE_NV */: return "GL_TEXTURE_MAG_SIZE_NV (0x871F)"; + + + + + +/* ------------------------- GL_NV_texture_shader2 ------------------------- */ + + + + +//case 0x86DA /* GL_UNSIGNED_INT_S8_S8_8_8_NV */: return "GL_UNSIGNED_INT_S8_S8_8_8_NV (0x86DA)"; +//case 0x86DB /* GL_UNSIGNED_INT_8_8_S8_S8_REV_NV */: return "GL_UNSIGNED_INT_8_8_S8_S8_REV_NV (0x86DB)"; +//case 0x86DC /* GL_DSDT_MAG_INTENSITY_NV */: return "GL_DSDT_MAG_INTENSITY_NV (0x86DC)"; +case 0x86EF /* GL_DOT_PRODUCT_TEXTURE_3D_NV */: return "GL_DOT_PRODUCT_TEXTURE_3D_NV (0x86EF)"; +//case 0x86F4 /* GL_HILO_NV */: return "GL_HILO_NV (0x86F4)"; +//case 0x86F5 /* GL_DSDT_NV */: return "GL_DSDT_NV (0x86F5)"; +//case 0x86F6 /* GL_DSDT_MAG_NV */: return "GL_DSDT_MAG_NV (0x86F6)"; +//case 0x86F7 /* GL_DSDT_MAG_VIB_NV */: return "GL_DSDT_MAG_VIB_NV (0x86F7)"; +//case 0x86F8 /* GL_HILO16_NV */: return "GL_HILO16_NV (0x86F8)"; +//case 0x86F9 /* GL_SIGNED_HILO_NV */: return "GL_SIGNED_HILO_NV (0x86F9)"; +//case 0x86FA /* GL_SIGNED_HILO16_NV */: return "GL_SIGNED_HILO16_NV (0x86FA)"; +//case 0x86FB /* GL_SIGNED_RGBA_NV */: return "GL_SIGNED_RGBA_NV (0x86FB)"; +//case 0x86FC /* GL_SIGNED_RGBA8_NV */: return "GL_SIGNED_RGBA8_NV (0x86FC)"; +//case 0x86FE /* GL_SIGNED_RGB_NV */: return "GL_SIGNED_RGB_NV (0x86FE)"; +//case 0x86FF /* GL_SIGNED_RGB8_NV */: return "GL_SIGNED_RGB8_NV (0x86FF)"; +//case 0x8701 /* GL_SIGNED_LUMINANCE_NV */: return "GL_SIGNED_LUMINANCE_NV (0x8701)"; +//case 0x8702 /* GL_SIGNED_LUMINANCE8_NV */: return "GL_SIGNED_LUMINANCE8_NV (0x8702)"; +//case 0x8703 /* GL_SIGNED_LUMINANCE_ALPHA_NV */: return "GL_SIGNED_LUMINANCE_ALPHA_NV (0x8703)"; +//case 0x8704 /* GL_SIGNED_LUMINANCE8_ALPHA8_NV */: return "GL_SIGNED_LUMINANCE8_ALPHA8_NV (0x8704)"; +//case 0x8705 /* GL_SIGNED_ALPHA_NV */: return "GL_SIGNED_ALPHA_NV (0x8705)"; +//case 0x8706 /* GL_SIGNED_ALPHA8_NV */: return "GL_SIGNED_ALPHA8_NV (0x8706)"; +//case 0x8707 /* GL_SIGNED_INTENSITY_NV */: return "GL_SIGNED_INTENSITY_NV (0x8707)"; +//case 0x8708 /* GL_SIGNED_INTENSITY8_NV */: return "GL_SIGNED_INTENSITY8_NV (0x8708)"; +//case 0x8709 /* GL_DSDT8_NV */: return "GL_DSDT8_NV (0x8709)"; +//case 0x870A /* GL_DSDT8_MAG8_NV */: return "GL_DSDT8_MAG8_NV (0x870A)"; +//case 0x870B /* GL_DSDT8_MAG8_INTENSITY8_NV */: return "GL_DSDT8_MAG8_INTENSITY8_NV (0x870B)"; +//case 0x870C /* GL_SIGNED_RGB_UNSIGNED_ALPHA_NV */: return "GL_SIGNED_RGB_UNSIGNED_ALPHA_NV (0x870C)"; +//case 0x870D /* GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV */: return "GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV (0x870D)"; + + + + + +/* ------------------------- GL_NV_texture_shader3 ------------------------- */ + + + + +case 0x8850 /* GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV */: return "GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV (0x8850)"; +case 0x8851 /* GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV */: return "GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV (0x8851)"; +case 0x8852 /* GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV */: return "GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV (0x8852)"; +case 0x8853 /* GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV */: return "GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV (0x8853)"; +case 0x8854 /* GL_OFFSET_HILO_TEXTURE_2D_NV */: return "GL_OFFSET_HILO_TEXTURE_2D_NV (0x8854)"; +case 0x8855 /* GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV */: return "GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV (0x8855)"; +case 0x8856 /* GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV */: return "GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV (0x8856)"; +case 0x8857 /* GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV */: return "GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV (0x8857)"; +case 0x8858 /* GL_DEPENDENT_HILO_TEXTURE_2D_NV */: return "GL_DEPENDENT_HILO_TEXTURE_2D_NV (0x8858)"; +case 0x8859 /* GL_DEPENDENT_RGB_TEXTURE_3D_NV */: return "GL_DEPENDENT_RGB_TEXTURE_3D_NV (0x8859)"; +case 0x885A /* GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV */: return "GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV (0x885A)"; +case 0x885B /* GL_DOT_PRODUCT_PASS_THROUGH_NV */: return "GL_DOT_PRODUCT_PASS_THROUGH_NV (0x885B)"; +case 0x885C /* GL_DOT_PRODUCT_TEXTURE_1D_NV */: return "GL_DOT_PRODUCT_TEXTURE_1D_NV (0x885C)"; +case 0x885D /* GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV */: return "GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV (0x885D)"; +case 0x885E /* GL_HILO8_NV */: return "GL_HILO8_NV (0x885E)"; +case 0x885F /* GL_SIGNED_HILO8_NV */: return "GL_SIGNED_HILO8_NV (0x885F)"; +case 0x8860 /* GL_FORCE_BLUE_TO_ONE_NV */: return "GL_FORCE_BLUE_TO_ONE_NV (0x8860)"; + + + + + +/* ------------------------ GL_NV_transform_feedback ----------------------- */ + + + + +case 0x8C77 /* GL_BACK_PRIMARY_COLOR_NV */: return "GL_BACK_PRIMARY_COLOR_NV (0x8C77)"; +case 0x8C78 /* GL_BACK_SECONDARY_COLOR_NV */: return "GL_BACK_SECONDARY_COLOR_NV (0x8C78)"; +case 0x8C79 /* GL_TEXTURE_COORD_NV */: return "GL_TEXTURE_COORD_NV (0x8C79)"; +case 0x8C7A /* GL_CLIP_DISTANCE_NV */: return "GL_CLIP_DISTANCE_NV (0x8C7A)"; +case 0x8C7B /* GL_VERTEX_ID_NV */: return "GL_VERTEX_ID_NV (0x8C7B)"; +case 0x8C7C /* GL_PRIMITIVE_ID_NV */: return "GL_PRIMITIVE_ID_NV (0x8C7C)"; +case 0x8C7D /* GL_GENERIC_ATTRIB_NV */: return "GL_GENERIC_ATTRIB_NV (0x8C7D)"; +case 0x8C7E /* GL_TRANSFORM_FEEDBACK_ATTRIBS_NV */: return "GL_TRANSFORM_FEEDBACK_ATTRIBS_NV (0x8C7E)"; +//case 0x8C7F /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV */: return "GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV (0x8C7F)"; +//case 0x8C80 /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV */: return "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV (0x8C80)"; +case 0x8C81 /* GL_ACTIVE_VARYINGS_NV */: return "GL_ACTIVE_VARYINGS_NV (0x8C81)"; +case 0x8C82 /* GL_ACTIVE_VARYING_MAX_LENGTH_NV */: return "GL_ACTIVE_VARYING_MAX_LENGTH_NV (0x8C82)"; +//case 0x8C83 /* GL_TRANSFORM_FEEDBACK_VARYINGS_NV */: return "GL_TRANSFORM_FEEDBACK_VARYINGS_NV (0x8C83)"; +//case 0x8C84 /* GL_TRANSFORM_FEEDBACK_BUFFER_START_NV */: return "GL_TRANSFORM_FEEDBACK_BUFFER_START_NV (0x8C84)"; +//case 0x8C85 /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV */: return "GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV (0x8C85)"; +case 0x8C86 /* GL_TRANSFORM_FEEDBACK_RECORD_NV */: return "GL_TRANSFORM_FEEDBACK_RECORD_NV (0x8C86)"; +//case 0x8C87 /* GL_PRIMITIVES_GENERATED_NV */: return "GL_PRIMITIVES_GENERATED_NV (0x8C87)"; +//case 0x8C88 /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV */: return "GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV (0x8C88)"; +//case 0x8C89 /* GL_RASTERIZER_DISCARD_NV */: return "GL_RASTERIZER_DISCARD_NV (0x8C89)"; +//case 0x8C8A /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV */: return "GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV (0x8C8A)"; +//case 0x8C8B /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV */: return "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV (0x8C8B)"; +//case 0x8C8C /* GL_INTERLEAVED_ATTRIBS_NV */: return "GL_INTERLEAVED_ATTRIBS_NV (0x8C8C)"; +//case 0x8C8D /* GL_SEPARATE_ATTRIBS_NV */: return "GL_SEPARATE_ATTRIBS_NV (0x8C8D)"; +//case 0x8C8E /* GL_TRANSFORM_FEEDBACK_BUFFER_NV */: return "GL_TRANSFORM_FEEDBACK_BUFFER_NV (0x8C8E)"; +//case 0x8C8F /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV */: return "GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV (0x8C8F)";/* ----------------------- GL_NV_transform_feedback2 ----------------------- */ + + + + +//case 0x8E22 /* GL_TRANSFORM_FEEDBACK_NV */: return "GL_TRANSFORM_FEEDBACK_NV (0x8E22)"; +//case 0x8E23 /* GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV */: return "GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV (0x8E23)"; +//case 0x8E24 /* GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV */: return "GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV (0x8E24)"; +//case 0x8E25 /* GL_TRANSFORM_FEEDBACK_BINDING_NV */: return "GL_TRANSFORM_FEEDBACK_BINDING_NV (0x8E25)"; + +/* -------------------------- GL_NV_vdpau_interop -------------------------- */ + + + + +case 0x86EB /* GL_SURFACE_STATE_NV */: return "GL_SURFACE_STATE_NV (0x86EB)"; +case 0x86FD /* GL_SURFACE_REGISTERED_NV */: return "GL_SURFACE_REGISTERED_NV (0x86FD)"; +case 0x8700 /* GL_SURFACE_MAPPED_NV */: return "GL_SURFACE_MAPPED_NV (0x8700)"; +case 0x88BE /* GL_WRITE_DISCARD_NV */: return "GL_WRITE_DISCARD_NV (0x88BE)";/* ------------------------ GL_NV_vertex_array_range ----------------------- */ + + + + +//case 0x851D /* GL_VERTEX_ARRAY_RANGE_NV */: return "GL_VERTEX_ARRAY_RANGE_NV (0x851D)"; +//case 0x851E /* GL_VERTEX_ARRAY_RANGE_LENGTH_NV */: return "GL_VERTEX_ARRAY_RANGE_LENGTH_NV (0x851E)"; +//case 0x851F /* GL_VERTEX_ARRAY_RANGE_VALID_NV */: return "GL_VERTEX_ARRAY_RANGE_VALID_NV (0x851F)"; +//case 0x8520 /* GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV */: return "GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV (0x8520)"; +//case 0x8521 /* GL_VERTEX_ARRAY_RANGE_POINTER_NV */: return "GL_VERTEX_ARRAY_RANGE_POINTER_NV (0x8521)"; + +/* ----------------------- GL_NV_vertex_array_range2 ----------------------- */ + + + + +case 0x8533 /* GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV */: return "GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV (0x8533)"; + + + + + +/* ------------------- GL_NV_vertex_attrib_integer_64bit ------------------- */ + + + + +//case 0x140E /* GL_INT64_NV */: return "GL_INT64_NV (0x140E)"; +//case 0x140F /* GL_UNSIGNED_INT64_NV */: return "GL_UNSIGNED_INT64_NV (0x140F)"; + + + + + +/* ------------------- GL_NV_vertex_buffer_unified_memory ------------------ */ + + + + +case 0x8F1E /* GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV */: return "GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV (0x8F1E)"; +case 0x8F1F /* GL_ELEMENT_ARRAY_UNIFIED_NV */: return "GL_ELEMENT_ARRAY_UNIFIED_NV (0x8F1F)"; +case 0x8F20 /* GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV */: return "GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV (0x8F20)"; +case 0x8F21 /* GL_VERTEX_ARRAY_ADDRESS_NV */: return "GL_VERTEX_ARRAY_ADDRESS_NV (0x8F21)"; +case 0x8F22 /* GL_NORMAL_ARRAY_ADDRESS_NV */: return "GL_NORMAL_ARRAY_ADDRESS_NV (0x8F22)"; +case 0x8F23 /* GL_COLOR_ARRAY_ADDRESS_NV */: return "GL_COLOR_ARRAY_ADDRESS_NV (0x8F23)"; +case 0x8F24 /* GL_INDEX_ARRAY_ADDRESS_NV */: return "GL_INDEX_ARRAY_ADDRESS_NV (0x8F24)"; +case 0x8F25 /* GL_TEXTURE_COORD_ARRAY_ADDRESS_NV */: return "GL_TEXTURE_COORD_ARRAY_ADDRESS_NV (0x8F25)"; +case 0x8F26 /* GL_EDGE_FLAG_ARRAY_ADDRESS_NV */: return "GL_EDGE_FLAG_ARRAY_ADDRESS_NV (0x8F26)"; +case 0x8F27 /* GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV */: return "GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV (0x8F27)"; +case 0x8F28 /* GL_FOG_COORD_ARRAY_ADDRESS_NV */: return "GL_FOG_COORD_ARRAY_ADDRESS_NV (0x8F28)"; +case 0x8F29 /* GL_ELEMENT_ARRAY_ADDRESS_NV */: return "GL_ELEMENT_ARRAY_ADDRESS_NV (0x8F29)"; +case 0x8F2A /* GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV */: return "GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV (0x8F2A)"; +case 0x8F2B /* GL_VERTEX_ARRAY_LENGTH_NV */: return "GL_VERTEX_ARRAY_LENGTH_NV (0x8F2B)"; +case 0x8F2C /* GL_NORMAL_ARRAY_LENGTH_NV */: return "GL_NORMAL_ARRAY_LENGTH_NV (0x8F2C)"; +case 0x8F2D /* GL_COLOR_ARRAY_LENGTH_NV */: return "GL_COLOR_ARRAY_LENGTH_NV (0x8F2D)"; +case 0x8F2E /* GL_INDEX_ARRAY_LENGTH_NV */: return "GL_INDEX_ARRAY_LENGTH_NV (0x8F2E)"; +case 0x8F2F /* GL_TEXTURE_COORD_ARRAY_LENGTH_NV */: return "GL_TEXTURE_COORD_ARRAY_LENGTH_NV (0x8F2F)"; +case 0x8F30 /* GL_EDGE_FLAG_ARRAY_LENGTH_NV */: return "GL_EDGE_FLAG_ARRAY_LENGTH_NV (0x8F30)"; +case 0x8F31 /* GL_SECONDARY_COLOR_ARRAY_LENGTH_NV */: return "GL_SECONDARY_COLOR_ARRAY_LENGTH_NV (0x8F31)"; +case 0x8F32 /* GL_FOG_COORD_ARRAY_LENGTH_NV */: return "GL_FOG_COORD_ARRAY_LENGTH_NV (0x8F32)"; +case 0x8F33 /* GL_ELEMENT_ARRAY_LENGTH_NV */: return "GL_ELEMENT_ARRAY_LENGTH_NV (0x8F33)"; +case 0x8F40 /* GL_DRAW_INDIRECT_UNIFIED_NV */: return "GL_DRAW_INDIRECT_UNIFIED_NV (0x8F40)"; +case 0x8F41 /* GL_DRAW_INDIRECT_ADDRESS_NV */: return "GL_DRAW_INDIRECT_ADDRESS_NV (0x8F41)"; +case 0x8F42 /* GL_DRAW_INDIRECT_LENGTH_NV */: return "GL_DRAW_INDIRECT_LENGTH_NV (0x8F42)"; + +/* -------------------------- GL_NV_vertex_program ------------------------- */ + + + + +//case 0x8620 /* GL_VERTEX_PROGRAM_NV */: return "GL_VERTEX_PROGRAM_NV (0x8620)"; +case 0x8621 /* GL_VERTEX_STATE_PROGRAM_NV */: return "GL_VERTEX_STATE_PROGRAM_NV (0x8621)"; +//case 0x8623 /* GL_ATTRIB_ARRAY_SIZE_NV */: return "GL_ATTRIB_ARRAY_SIZE_NV (0x8623)"; +//case 0x8624 /* GL_ATTRIB_ARRAY_STRIDE_NV */: return "GL_ATTRIB_ARRAY_STRIDE_NV (0x8624)"; +//case 0x8625 /* GL_ATTRIB_ARRAY_TYPE_NV */: return "GL_ATTRIB_ARRAY_TYPE_NV (0x8625)"; +//case 0x8626 /* GL_CURRENT_ATTRIB_NV */: return "GL_CURRENT_ATTRIB_NV (0x8626)"; +//case 0x8627 /* GL_PROGRAM_LENGTH_NV */: return "GL_PROGRAM_LENGTH_NV (0x8627)"; +//case 0x8628 /* GL_PROGRAM_STRING_NV */: return "GL_PROGRAM_STRING_NV (0x8628)"; +case 0x8629 /* GL_MODELVIEW_PROJECTION_NV */: return "GL_MODELVIEW_PROJECTION_NV (0x8629)"; +case 0x862A /* GL_IDENTITY_NV */: return "GL_IDENTITY_NV (0x862A)"; +case 0x862B /* GL_INVERSE_NV */: return "GL_INVERSE_NV (0x862B)"; +case 0x862C /* GL_TRANSPOSE_NV */: return "GL_TRANSPOSE_NV (0x862C)"; +case 0x862D /* GL_INVERSE_TRANSPOSE_NV */: return "GL_INVERSE_TRANSPOSE_NV (0x862D)"; +//case 0x862E /* GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV */: return "GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV (0x862E)"; +//case 0x862F /* GL_MAX_TRACK_MATRICES_NV */: return "GL_MAX_TRACK_MATRICES_NV (0x862F)"; +case 0x8630 /* GL_MATRIX0_NV */: return "GL_MATRIX0_NV (0x8630)"; +case 0x8631 /* GL_MATRIX1_NV */: return "GL_MATRIX1_NV (0x8631)"; +case 0x8632 /* GL_MATRIX2_NV */: return "GL_MATRIX2_NV (0x8632)"; +case 0x8633 /* GL_MATRIX3_NV */: return "GL_MATRIX3_NV (0x8633)"; +case 0x8634 /* GL_MATRIX4_NV */: return "GL_MATRIX4_NV (0x8634)"; +case 0x8635 /* GL_MATRIX5_NV */: return "GL_MATRIX5_NV (0x8635)"; +case 0x8636 /* GL_MATRIX6_NV */: return "GL_MATRIX6_NV (0x8636)"; +case 0x8637 /* GL_MATRIX7_NV */: return "GL_MATRIX7_NV (0x8637)"; +//case 0x8640 /* GL_CURRENT_MATRIX_STACK_DEPTH_NV */: return "GL_CURRENT_MATRIX_STACK_DEPTH_NV (0x8640)"; +//case 0x8641 /* GL_CURRENT_MATRIX_NV */: return "GL_CURRENT_MATRIX_NV (0x8641)"; +//case 0x8642 /* GL_VERTEX_PROGRAM_POINT_SIZE_NV */: return "GL_VERTEX_PROGRAM_POINT_SIZE_NV (0x8642)"; +//case 0x8643 /* GL_VERTEX_PROGRAM_TWO_SIDE_NV */: return "GL_VERTEX_PROGRAM_TWO_SIDE_NV (0x8643)"; +case 0x8644 /* GL_PROGRAM_PARAMETER_NV */: return "GL_PROGRAM_PARAMETER_NV (0x8644)"; +//case 0x8645 /* GL_ATTRIB_ARRAY_POINTER_NV */: return "GL_ATTRIB_ARRAY_POINTER_NV (0x8645)"; +case 0x8646 /* GL_PROGRAM_TARGET_NV */: return "GL_PROGRAM_TARGET_NV (0x8646)"; +case 0x8647 /* GL_PROGRAM_RESIDENT_NV */: return "GL_PROGRAM_RESIDENT_NV (0x8647)"; +case 0x8648 /* GL_TRACK_MATRIX_NV */: return "GL_TRACK_MATRIX_NV (0x8648)"; +case 0x8649 /* GL_TRACK_MATRIX_TRANSFORM_NV */: return "GL_TRACK_MATRIX_TRANSFORM_NV (0x8649)"; +case 0x864A /* GL_VERTEX_PROGRAM_BINDING_NV */: return "GL_VERTEX_PROGRAM_BINDING_NV (0x864A)"; +//case 0x864B /* GL_PROGRAM_ERROR_POSITION_NV */: return "GL_PROGRAM_ERROR_POSITION_NV (0x864B)"; +case 0x8650 /* GL_VERTEX_ATTRIB_ARRAY0_NV */: return "GL_VERTEX_ATTRIB_ARRAY0_NV (0x8650)"; +case 0x8651 /* GL_VERTEX_ATTRIB_ARRAY1_NV */: return "GL_VERTEX_ATTRIB_ARRAY1_NV (0x8651)"; +case 0x8652 /* GL_VERTEX_ATTRIB_ARRAY2_NV */: return "GL_VERTEX_ATTRIB_ARRAY2_NV (0x8652)"; +case 0x8653 /* GL_VERTEX_ATTRIB_ARRAY3_NV */: return "GL_VERTEX_ATTRIB_ARRAY3_NV (0x8653)"; +case 0x8654 /* GL_VERTEX_ATTRIB_ARRAY4_NV */: return "GL_VERTEX_ATTRIB_ARRAY4_NV (0x8654)"; +case 0x8655 /* GL_VERTEX_ATTRIB_ARRAY5_NV */: return "GL_VERTEX_ATTRIB_ARRAY5_NV (0x8655)"; +case 0x8656 /* GL_VERTEX_ATTRIB_ARRAY6_NV */: return "GL_VERTEX_ATTRIB_ARRAY6_NV (0x8656)"; +case 0x8657 /* GL_VERTEX_ATTRIB_ARRAY7_NV */: return "GL_VERTEX_ATTRIB_ARRAY7_NV (0x8657)"; +case 0x8658 /* GL_VERTEX_ATTRIB_ARRAY8_NV */: return "GL_VERTEX_ATTRIB_ARRAY8_NV (0x8658)"; +case 0x8659 /* GL_VERTEX_ATTRIB_ARRAY9_NV */: return "GL_VERTEX_ATTRIB_ARRAY9_NV (0x8659)"; +case 0x865A /* GL_VERTEX_ATTRIB_ARRAY10_NV */: return "GL_VERTEX_ATTRIB_ARRAY10_NV (0x865A)"; +case 0x865B /* GL_VERTEX_ATTRIB_ARRAY11_NV */: return "GL_VERTEX_ATTRIB_ARRAY11_NV (0x865B)"; +case 0x865C /* GL_VERTEX_ATTRIB_ARRAY12_NV */: return "GL_VERTEX_ATTRIB_ARRAY12_NV (0x865C)"; +case 0x865D /* GL_VERTEX_ATTRIB_ARRAY13_NV */: return "GL_VERTEX_ATTRIB_ARRAY13_NV (0x865D)"; +case 0x865E /* GL_VERTEX_ATTRIB_ARRAY14_NV */: return "GL_VERTEX_ATTRIB_ARRAY14_NV (0x865E)"; +case 0x865F /* GL_VERTEX_ATTRIB_ARRAY15_NV */: return "GL_VERTEX_ATTRIB_ARRAY15_NV (0x865F)"; +case 0x8660 /* GL_MAP1_VERTEX_ATTRIB0_4_NV */: return "GL_MAP1_VERTEX_ATTRIB0_4_NV (0x8660)"; +case 0x8661 /* GL_MAP1_VERTEX_ATTRIB1_4_NV */: return "GL_MAP1_VERTEX_ATTRIB1_4_NV (0x8661)"; +case 0x8662 /* GL_MAP1_VERTEX_ATTRIB2_4_NV */: return "GL_MAP1_VERTEX_ATTRIB2_4_NV (0x8662)"; +case 0x8663 /* GL_MAP1_VERTEX_ATTRIB3_4_NV */: return "GL_MAP1_VERTEX_ATTRIB3_4_NV (0x8663)"; +case 0x8664 /* GL_MAP1_VERTEX_ATTRIB4_4_NV */: return "GL_MAP1_VERTEX_ATTRIB4_4_NV (0x8664)"; +case 0x8665 /* GL_MAP1_VERTEX_ATTRIB5_4_NV */: return "GL_MAP1_VERTEX_ATTRIB5_4_NV (0x8665)"; +case 0x8666 /* GL_MAP1_VERTEX_ATTRIB6_4_NV */: return "GL_MAP1_VERTEX_ATTRIB6_4_NV (0x8666)"; +case 0x8667 /* GL_MAP1_VERTEX_ATTRIB7_4_NV */: return "GL_MAP1_VERTEX_ATTRIB7_4_NV (0x8667)"; +case 0x8668 /* GL_MAP1_VERTEX_ATTRIB8_4_NV */: return "GL_MAP1_VERTEX_ATTRIB8_4_NV (0x8668)"; +case 0x8669 /* GL_MAP1_VERTEX_ATTRIB9_4_NV */: return "GL_MAP1_VERTEX_ATTRIB9_4_NV (0x8669)"; +case 0x866A /* GL_MAP1_VERTEX_ATTRIB10_4_NV */: return "GL_MAP1_VERTEX_ATTRIB10_4_NV (0x866A)"; +case 0x866B /* GL_MAP1_VERTEX_ATTRIB11_4_NV */: return "GL_MAP1_VERTEX_ATTRIB11_4_NV (0x866B)"; +case 0x866C /* GL_MAP1_VERTEX_ATTRIB12_4_NV */: return "GL_MAP1_VERTEX_ATTRIB12_4_NV (0x866C)"; +case 0x866D /* GL_MAP1_VERTEX_ATTRIB13_4_NV */: return "GL_MAP1_VERTEX_ATTRIB13_4_NV (0x866D)"; +case 0x866E /* GL_MAP1_VERTEX_ATTRIB14_4_NV */: return "GL_MAP1_VERTEX_ATTRIB14_4_NV (0x866E)"; +case 0x866F /* GL_MAP1_VERTEX_ATTRIB15_4_NV */: return "GL_MAP1_VERTEX_ATTRIB15_4_NV (0x866F)"; +case 0x8670 /* GL_MAP2_VERTEX_ATTRIB0_4_NV */: return "GL_MAP2_VERTEX_ATTRIB0_4_NV (0x8670)"; +case 0x8671 /* GL_MAP2_VERTEX_ATTRIB1_4_NV */: return "GL_MAP2_VERTEX_ATTRIB1_4_NV (0x8671)"; +case 0x8672 /* GL_MAP2_VERTEX_ATTRIB2_4_NV */: return "GL_MAP2_VERTEX_ATTRIB2_4_NV (0x8672)"; +case 0x8673 /* GL_MAP2_VERTEX_ATTRIB3_4_NV */: return "GL_MAP2_VERTEX_ATTRIB3_4_NV (0x8673)"; +case 0x8674 /* GL_MAP2_VERTEX_ATTRIB4_4_NV */: return "GL_MAP2_VERTEX_ATTRIB4_4_NV (0x8674)"; +case 0x8675 /* GL_MAP2_VERTEX_ATTRIB5_4_NV */: return "GL_MAP2_VERTEX_ATTRIB5_4_NV (0x8675)"; +case 0x8676 /* GL_MAP2_VERTEX_ATTRIB6_4_NV */: return "GL_MAP2_VERTEX_ATTRIB6_4_NV (0x8676)"; +//case 0x8677 /* GL_MAP2_VERTEX_ATTRIB7_4_NV */: return "GL_MAP2_VERTEX_ATTRIB7_4_NV (0x8677)"; +case 0x8678 /* GL_MAP2_VERTEX_ATTRIB8_4_NV */: return "GL_MAP2_VERTEX_ATTRIB8_4_NV (0x8678)"; +case 0x8679 /* GL_MAP2_VERTEX_ATTRIB9_4_NV */: return "GL_MAP2_VERTEX_ATTRIB9_4_NV (0x8679)"; +case 0x867A /* GL_MAP2_VERTEX_ATTRIB10_4_NV */: return "GL_MAP2_VERTEX_ATTRIB10_4_NV (0x867A)"; +case 0x867B /* GL_MAP2_VERTEX_ATTRIB11_4_NV */: return "GL_MAP2_VERTEX_ATTRIB11_4_NV (0x867B)"; +case 0x867C /* GL_MAP2_VERTEX_ATTRIB12_4_NV */: return "GL_MAP2_VERTEX_ATTRIB12_4_NV (0x867C)"; +case 0x867D /* GL_MAP2_VERTEX_ATTRIB13_4_NV */: return "GL_MAP2_VERTEX_ATTRIB13_4_NV (0x867D)"; +case 0x867E /* GL_MAP2_VERTEX_ATTRIB14_4_NV */: return "GL_MAP2_VERTEX_ATTRIB14_4_NV (0x867E)"; +case 0x867F /* GL_MAP2_VERTEX_ATTRIB15_4_NV */: return "GL_MAP2_VERTEX_ATTRIB15_4_NV (0x867F)"; + + + + + +/* ------------------------ GL_NV_vertex_program1_1 ------------------------ */ + + + + + + + + +/* ------------------------- GL_NV_vertex_program2 ------------------------- */ + + + + + + + + +/* ---------------------- GL_NV_vertex_program2_option --------------------- */ + + + + +//case 0x88F5 /* GL_MAX_PROGRAM_CALL_DEPTH_NV */: return "GL_MAX_PROGRAM_CALL_DEPTH_NV (0x88F5)"; + + + + + +/* ------------------------- GL_NV_vertex_program3 ------------------------- */ +/* ------------------------- GL_NV_vertex_program4 ------------------------- */ + + + + +//case 0x88FD /* GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV */: return "GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV (0x88FD)"; + + + + + +/* -------------------------- GL_NV_video_capture -------------------------- */ + + + + +case 0x9020 /* GL_VIDEO_BUFFER_NV */: return "GL_VIDEO_BUFFER_NV (0x9020)"; +case 0x9021 /* GL_VIDEO_BUFFER_BINDING_NV */: return "GL_VIDEO_BUFFER_BINDING_NV (0x9021)"; +case 0x9022 /* GL_FIELD_UPPER_NV */: return "GL_FIELD_UPPER_NV (0x9022)"; +case 0x9023 /* GL_FIELD_LOWER_NV */: return "GL_FIELD_LOWER_NV (0x9023)"; +case 0x9024 /* GL_NUM_VIDEO_CAPTURE_STREAMS_NV */: return "GL_NUM_VIDEO_CAPTURE_STREAMS_NV (0x9024)"; +case 0x9025 /* GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV */: return "GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV (0x9025)"; +case 0x9026 /* GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV */: return "GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV (0x9026)"; +case 0x9027 /* GL_LAST_VIDEO_CAPTURE_STATUS_NV */: return "GL_LAST_VIDEO_CAPTURE_STATUS_NV (0x9027)"; +case 0x9028 /* GL_VIDEO_BUFFER_PITCH_NV */: return "GL_VIDEO_BUFFER_PITCH_NV (0x9028)"; +case 0x9029 /* GL_VIDEO_COLOR_CONVERSION_MATRIX_NV */: return "GL_VIDEO_COLOR_CONVERSION_MATRIX_NV (0x9029)"; +case 0x902A /* GL_VIDEO_COLOR_CONVERSION_MAX_NV */: return "GL_VIDEO_COLOR_CONVERSION_MAX_NV (0x902A)"; +case 0x902B /* GL_VIDEO_COLOR_CONVERSION_MIN_NV */: return "GL_VIDEO_COLOR_CONVERSION_MIN_NV (0x902B)"; +case 0x902C /* GL_VIDEO_COLOR_CONVERSION_OFFSET_NV */: return "GL_VIDEO_COLOR_CONVERSION_OFFSET_NV (0x902C)"; +case 0x902D /* GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV */: return "GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV (0x902D)"; +case 0x902E /* GL_PARTIAL_SUCCESS_NV */: return "GL_PARTIAL_SUCCESS_NV (0x902E)"; +case 0x902F /* GL_SUCCESS_NV */: return "GL_SUCCESS_NV (0x902F)"; +case 0x9030 /* GL_FAILURE_NV */: return "GL_FAILURE_NV (0x9030)"; +case 0x9031 /* GL_YCBYCR8_422_NV */: return "GL_YCBYCR8_422_NV (0x9031)"; +case 0x9032 /* GL_YCBAYCR8A_4224_NV */: return "GL_YCBAYCR8A_4224_NV (0x9032)"; +case 0x9033 /* GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV */: return "GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV (0x9033)"; +case 0x9034 /* GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV */: return "GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV (0x9034)"; +case 0x9035 /* GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV */: return "GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV (0x9035)"; +case 0x9036 /* GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV */: return "GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV (0x9036)"; +case 0x9037 /* GL_Z4Y12Z4CB12Z4CR12_444_NV */: return "GL_Z4Y12Z4CB12Z4CR12_444_NV (0x9037)"; +case 0x9038 /* GL_VIDEO_CAPTURE_FRAME_WIDTH_NV */: return "GL_VIDEO_CAPTURE_FRAME_WIDTH_NV (0x9038)"; +case 0x9039 /* GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV */: return "GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV (0x9039)"; +case 0x903A /* GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV */: return "GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV (0x903A)"; +case 0x903B /* GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV */: return "GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV (0x903B)"; +case 0x903C /* GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV */: return "GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV (0x903C)"; + +/* ------------------------ GL_OES_byte_coordinates ------------------------ */ + + + + +//case 0x1400 /* GL_BYTE */: return "GL_BYTE (0x1400)"; + + + + + +/* ------------------- GL_OES_compressed_paletted_texture ------------------ */ + + + + +case 0x8B90 /* GL_PALETTE4_RGB8_OES */: return "GL_PALETTE4_RGB8_OES (0x8B90)"; +case 0x8B91 /* GL_PALETTE4_RGBA8_OES */: return "GL_PALETTE4_RGBA8_OES (0x8B91)"; +case 0x8B92 /* GL_PALETTE4_R5_G6_B5_OES */: return "GL_PALETTE4_R5_G6_B5_OES (0x8B92)"; +case 0x8B93 /* GL_PALETTE4_RGBA4_OES */: return "GL_PALETTE4_RGBA4_OES (0x8B93)"; +case 0x8B94 /* GL_PALETTE4_RGB5_A1_OES */: return "GL_PALETTE4_RGB5_A1_OES (0x8B94)"; +case 0x8B95 /* GL_PALETTE8_RGB8_OES */: return "GL_PALETTE8_RGB8_OES (0x8B95)"; +case 0x8B96 /* GL_PALETTE8_RGBA8_OES */: return "GL_PALETTE8_RGBA8_OES (0x8B96)"; +case 0x8B97 /* GL_PALETTE8_R5_G6_B5_OES */: return "GL_PALETTE8_R5_G6_B5_OES (0x8B97)"; +case 0x8B98 /* GL_PALETTE8_RGBA4_OES */: return "GL_PALETTE8_RGBA4_OES (0x8B98)"; +case 0x8B99 /* GL_PALETTE8_RGB5_A1_OES */: return "GL_PALETTE8_RGB5_A1_OES (0x8B99)"; + + + + + +/* --------------------------- GL_OES_read_format -------------------------- */ + + + + +//case 0x8B9A /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */: return "GL_IMPLEMENTATION_COLOR_READ_TYPE_OES (0x8B9A)"; +//case 0x8B9B /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */: return "GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES (0x8B9B)"; + + + + + +/* ------------------------ GL_OES_single_precision ------------------------ */ + + +/* ---------------------------- GL_OML_interlace --------------------------- */ + + + + +case 0x8980 /* GL_INTERLACE_OML */: return "GL_INTERLACE_OML (0x8980)"; +case 0x8981 /* GL_INTERLACE_READ_OML */: return "GL_INTERLACE_READ_OML (0x8981)"; + + + + + +/* ---------------------------- GL_OML_resample ---------------------------- */ + + + + +case 0x8984 /* GL_PACK_RESAMPLE_OML */: return "GL_PACK_RESAMPLE_OML (0x8984)"; +case 0x8985 /* GL_UNPACK_RESAMPLE_OML */: return "GL_UNPACK_RESAMPLE_OML (0x8985)"; +case 0x8986 /* GL_RESAMPLE_REPLICATE_OML */: return "GL_RESAMPLE_REPLICATE_OML (0x8986)"; +case 0x8987 /* GL_RESAMPLE_ZERO_FILL_OML */: return "GL_RESAMPLE_ZERO_FILL_OML (0x8987)"; +case 0x8988 /* GL_RESAMPLE_AVERAGE_OML */: return "GL_RESAMPLE_AVERAGE_OML (0x8988)"; +case 0x8989 /* GL_RESAMPLE_DECIMATE_OML */: return "GL_RESAMPLE_DECIMATE_OML (0x8989)"; + + + + + +/* ---------------------------- GL_OML_subsample --------------------------- */ + + + + +case 0x8982 /* GL_FORMAT_SUBSAMPLE_24_24_OML */: return "GL_FORMAT_SUBSAMPLE_24_24_OML (0x8982)"; +case 0x8983 /* GL_FORMAT_SUBSAMPLE_244_244_OML */: return "GL_FORMAT_SUBSAMPLE_244_244_OML (0x8983)"; + + + + + +/* --------------------------- GL_PGI_misc_hints --------------------------- *//* -------------------------- GL_PGI_vertex_hints -------------------------- */ + + + + +//case 0x00000004 /* GL_VERTEX23_BIT_PGI */: return "GL_VERTEX23_BIT_PGI (0x00000004)"; +//case 0x00000008 /* GL_VERTEX4_BIT_PGI */: return "GL_VERTEX4_BIT_PGI (0x00000008)"; +//case 0x00010000 /* GL_COLOR3_BIT_PGI */: return "GL_COLOR3_BIT_PGI (0x00010000)"; +//case 0x00020000 /* GL_COLOR4_BIT_PGI */: return "GL_COLOR4_BIT_PGI (0x00020000)"; +//case 0x00040000 /* GL_EDGEFLAG_BIT_PGI */: return "GL_EDGEFLAG_BIT_PGI (0x00040000)"; +//case 0x00080000 /* GL_INDEX_BIT_PGI */: return "GL_INDEX_BIT_PGI (0x00080000)"; +//case 0x00100000 /* GL_MAT_AMBIENT_BIT_PGI */: return "GL_MAT_AMBIENT_BIT_PGI (0x00100000)"; + + + + +//case 0x00200000 /* GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI */: return "GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI (0x00200000)"; +//case 0x00400000 /* GL_MAT_DIFFUSE_BIT_PGI */: return "GL_MAT_DIFFUSE_BIT_PGI (0x00400000)"; +//case 0x00800000 /* GL_MAT_EMISSION_BIT_PGI */: return "GL_MAT_EMISSION_BIT_PGI (0x00800000)"; +//case 0x01000000 /* GL_MAT_COLOR_INDEXES_BIT_PGI */: return "GL_MAT_COLOR_INDEXES_BIT_PGI (0x01000000)"; +//case 0x02000000 /* GL_MAT_SHININESS_BIT_PGI */: return "GL_MAT_SHININESS_BIT_PGI (0x02000000)"; +//case 0x04000000 /* GL_MAT_SPECULAR_BIT_PGI */: return "GL_MAT_SPECULAR_BIT_PGI (0x04000000)"; +//case 0x08000000 /* GL_NORMAL_BIT_PGI */: return "GL_NORMAL_BIT_PGI (0x08000000)"; +//case 0x10000000 /* GL_TEXCOORD1_BIT_PGI */: return "GL_TEXCOORD1_BIT_PGI (0x10000000)"; +//case 0x20000000 /* GL_TEXCOORD2_BIT_PGI */: return "GL_TEXCOORD2_BIT_PGI (0x20000000)"; +case 0x40000000 /* GL_TEXCOORD3_BIT_PGI */: return "GL_TEXCOORD3_BIT_PGI (0x40000000)"; +case 0x80000000 /* GL_TEXCOORD4_BIT_PGI */: return "GL_TEXCOORD4_BIT_PGI (0x80000000)"; + + + + + +/* ------------------------- GL_REGAL_error_string ------------------------- */ + + +/* ------------------------ GL_REGAL_extension_query ----------------------- */ + + + + +/* ------------------------------ GL_REGAL_log ----------------------------- */ + + + + +case 0x9319 /* GL_LOG_ERROR_REGAL */: return "GL_LOG_ERROR_REGAL (0x9319)"; +case 0x931A /* GL_LOG_WARNING_REGAL */: return "GL_LOG_WARNING_REGAL (0x931A)"; +case 0x931B /* GL_LOG_INFO_REGAL */: return "GL_LOG_INFO_REGAL (0x931B)"; +case 0x931C /* GL_LOG_APP_REGAL */: return "GL_LOG_APP_REGAL (0x931C)"; +case 0x931D /* GL_LOG_DRIVER_REGAL */: return "GL_LOG_DRIVER_REGAL (0x931D)"; +case 0x931E /* GL_LOG_INTERNAL_REGAL */: return "GL_LOG_INTERNAL_REGAL (0x931E)"; +case 0x931F /* GL_LOG_DEBUG_REGAL */: return "GL_LOG_DEBUG_REGAL (0x931F)"; +case 0x9320 /* GL_LOG_STATUS_REGAL */: return "GL_LOG_STATUS_REGAL (0x9320)"; +case 0x9321 /* GL_LOG_HTTP_REGAL */: return "GL_LOG_HTTP_REGAL (0x9321)"; + + + + + +/* ----------------------- GL_REND_screen_coordinates ---------------------- */ + + + + +case 0x8490 /* GL_SCREEN_COORDINATES_REND */: return "GL_SCREEN_COORDINATES_REND (0x8490)"; +case 0x8491 /* GL_INVERTED_SCREEN_W_REND */: return "GL_INVERTED_SCREEN_W_REND (0x8491)"; + + + + + +/* ------------------------------- GL_S3_s3tc ------------------------------ */ + + + + +case 0x83A0 /* GL_RGB_S3TC */: return "GL_RGB_S3TC (0x83A0)"; +case 0x83A1 /* GL_RGB4_S3TC */: return "GL_RGB4_S3TC (0x83A1)"; +case 0x83A2 /* GL_RGBA_S3TC */: return "GL_RGBA_S3TC (0x83A2)"; +case 0x83A3 /* GL_RGBA4_S3TC */: return "GL_RGBA4_S3TC (0x83A3)"; +case 0x83A4 /* GL_RGBA_DXT5_S3TC */: return "GL_RGBA_DXT5_S3TC (0x83A4)"; +case 0x83A5 /* GL_RGBA4_DXT5_S3TC */: return "GL_RGBA4_DXT5_S3TC (0x83A5)"; + + + + + +/* -------------------------- GL_SGIS_color_range -------------------------- */ + + + + +case 0x85A5 /* GL_EXTENDED_RANGE_SGIS */: return "GL_EXTENDED_RANGE_SGIS (0x85A5)"; +case 0x85A6 /* GL_MIN_RED_SGIS */: return "GL_MIN_RED_SGIS (0x85A6)"; +case 0x85A7 /* GL_MAX_RED_SGIS */: return "GL_MAX_RED_SGIS (0x85A7)"; +case 0x85A8 /* GL_MIN_GREEN_SGIS */: return "GL_MIN_GREEN_SGIS (0x85A8)"; +case 0x85A9 /* GL_MAX_GREEN_SGIS */: return "GL_MAX_GREEN_SGIS (0x85A9)"; +case 0x85AA /* GL_MIN_BLUE_SGIS */: return "GL_MIN_BLUE_SGIS (0x85AA)"; +case 0x85AB /* GL_MAX_BLUE_SGIS */: return "GL_MAX_BLUE_SGIS (0x85AB)"; +case 0x85AC /* GL_MIN_ALPHA_SGIS */: return "GL_MIN_ALPHA_SGIS (0x85AC)"; +case 0x85AD /* GL_MAX_ALPHA_SGIS */: return "GL_MAX_ALPHA_SGIS (0x85AD)"; + + + + + +/* ------------------------- GL_SGIS_detail_texture ------------------------ */ + + + + +/* -------------------------- GL_SGIS_fog_function ------------------------- */ + + + + +/* ------------------------ GL_SGIS_generate_mipmap ------------------------ */ + + + + +//case 0x8191 /* GL_GENERATE_MIPMAP_SGIS */: return "GL_GENERATE_MIPMAP_SGIS (0x8191)"; +//case 0x8192 /* GL_GENERATE_MIPMAP_HINT_SGIS */: return "GL_GENERATE_MIPMAP_HINT_SGIS (0x8192)"; + + + + + +/* -------------------------- GL_SGIS_multisample -------------------------- */ + + + + +//case 0x809D /* GL_MULTISAMPLE_SGIS */: return "GL_MULTISAMPLE_SGIS (0x809D)"; +//case 0x809E /* GL_SAMPLE_ALPHA_TO_MASK_SGIS */: return "GL_SAMPLE_ALPHA_TO_MASK_SGIS (0x809E)"; +//case 0x809F /* GL_SAMPLE_ALPHA_TO_ONE_SGIS */: return "GL_SAMPLE_ALPHA_TO_ONE_SGIS (0x809F)"; +//case 0x80A0 /* GL_SAMPLE_MASK_SGIS */: return "GL_SAMPLE_MASK_SGIS (0x80A0)"; +//case 0x80A1 /* GL_1PASS_SGIS */: return "GL_1PASS_SGIS (0x80A1)"; +//case 0x80A2 /* GL_2PASS_0_SGIS */: return "GL_2PASS_0_SGIS (0x80A2)"; +//case 0x80A3 /* GL_2PASS_1_SGIS */: return "GL_2PASS_1_SGIS (0x80A3)"; +//case 0x80A4 /* GL_4PASS_0_SGIS */: return "GL_4PASS_0_SGIS (0x80A4)"; +//case 0x80A5 /* GL_4PASS_1_SGIS */: return "GL_4PASS_1_SGIS (0x80A5)"; +//case 0x80A6 /* GL_4PASS_2_SGIS */: return "GL_4PASS_2_SGIS (0x80A6)"; +//case 0x80A7 /* GL_4PASS_3_SGIS */: return "GL_4PASS_3_SGIS (0x80A7)"; +//case 0x80A8 /* GL_SAMPLE_BUFFERS_SGIS */: return "GL_SAMPLE_BUFFERS_SGIS (0x80A8)"; +//case 0x80A9 /* GL_SAMPLES_SGIS */: return "GL_SAMPLES_SGIS (0x80A9)"; +//case 0x80AA /* GL_SAMPLE_MASK_VALUE_SGIS */: return "GL_SAMPLE_MASK_VALUE_SGIS (0x80AA)"; +//case 0x80AB /* GL_SAMPLE_MASK_INVERT_SGIS */: return "GL_SAMPLE_MASK_INVERT_SGIS (0x80AB)"; +//case 0x80AC /* GL_SAMPLE_PATTERN_SGIS */: return "GL_SAMPLE_PATTERN_SGIS (0x80AC)"; + +/* ------------------------- GL_SGIS_pixel_texture ------------------------- */ + + + + + + + + +/* ----------------------- GL_SGIS_point_line_texgen ----------------------- */ + + + + +case 0x81F0 /* GL_EYE_DISTANCE_TO_POINT_SGIS */: return "GL_EYE_DISTANCE_TO_POINT_SGIS (0x81F0)"; +case 0x81F1 /* GL_OBJECT_DISTANCE_TO_POINT_SGIS */: return "GL_OBJECT_DISTANCE_TO_POINT_SGIS (0x81F1)"; +case 0x81F2 /* GL_EYE_DISTANCE_TO_LINE_SGIS */: return "GL_EYE_DISTANCE_TO_LINE_SGIS (0x81F2)"; +case 0x81F3 /* GL_OBJECT_DISTANCE_TO_LINE_SGIS */: return "GL_OBJECT_DISTANCE_TO_LINE_SGIS (0x81F3)"; +case 0x81F4 /* GL_EYE_POINT_SGIS */: return "GL_EYE_POINT_SGIS (0x81F4)"; +case 0x81F5 /* GL_OBJECT_POINT_SGIS */: return "GL_OBJECT_POINT_SGIS (0x81F5)"; +case 0x81F6 /* GL_EYE_LINE_SGIS */: return "GL_EYE_LINE_SGIS (0x81F6)"; +case 0x81F7 /* GL_OBJECT_LINE_SGIS */: return "GL_OBJECT_LINE_SGIS (0x81F7)"; + + + + + +/* ------------------------ GL_SGIS_sharpen_texture ------------------------ */ + + + + +/* --------------------------- GL_SGIS_texture4D --------------------------- */ + + + + +/* ---------------------- GL_SGIS_texture_border_clamp --------------------- */ + + + + +//case 0x812D /* GL_CLAMP_TO_BORDER_SGIS */: return "GL_CLAMP_TO_BORDER_SGIS (0x812D)"; + + + + + +/* ----------------------- GL_SGIS_texture_edge_clamp ---------------------- */ + + + + +//case 0x812F /* GL_CLAMP_TO_EDGE_SGIS */: return "GL_CLAMP_TO_EDGE_SGIS (0x812F)"; + + + + + +/* ------------------------ GL_SGIS_texture_filter4 ------------------------ */ + + + + +/* -------------------------- GL_SGIS_texture_lod -------------------------- */ + + + + +//case 0x813A /* GL_TEXTURE_MIN_LOD_SGIS */: return "GL_TEXTURE_MIN_LOD_SGIS (0x813A)"; +//case 0x813B /* GL_TEXTURE_MAX_LOD_SGIS */: return "GL_TEXTURE_MAX_LOD_SGIS (0x813B)"; +//case 0x813C /* GL_TEXTURE_BASE_LEVEL_SGIS */: return "GL_TEXTURE_BASE_LEVEL_SGIS (0x813C)"; +//case 0x813D /* GL_TEXTURE_MAX_LEVEL_SGIS */: return "GL_TEXTURE_MAX_LEVEL_SGIS (0x813D)"; + + + + + +/* ------------------------- GL_SGIS_texture_select ------------------------ */ + + + + + + + + +/* ----------------------------- GL_SGIX_async ----------------------------- */ + + + + +case 0x8329 /* GL_ASYNC_MARKER_SGIX */: return "GL_ASYNC_MARKER_SGIX (0x8329)"; + +/* ------------------------ GL_SGIX_async_histogram ------------------------ */ + + + + +case 0x832C /* GL_ASYNC_HISTOGRAM_SGIX */: return "GL_ASYNC_HISTOGRAM_SGIX (0x832C)"; +case 0x832D /* GL_MAX_ASYNC_HISTOGRAM_SGIX */: return "GL_MAX_ASYNC_HISTOGRAM_SGIX (0x832D)"; + + + + + +/* -------------------------- GL_SGIX_async_pixel -------------------------- */ + + + + +case 0x835C /* GL_ASYNC_TEX_IMAGE_SGIX */: return "GL_ASYNC_TEX_IMAGE_SGIX (0x835C)"; +case 0x835D /* GL_ASYNC_DRAW_PIXELS_SGIX */: return "GL_ASYNC_DRAW_PIXELS_SGIX (0x835D)"; +case 0x835E /* GL_ASYNC_READ_PIXELS_SGIX */: return "GL_ASYNC_READ_PIXELS_SGIX (0x835E)"; +case 0x835F /* GL_MAX_ASYNC_TEX_IMAGE_SGIX */: return "GL_MAX_ASYNC_TEX_IMAGE_SGIX (0x835F)"; +case 0x8360 /* GL_MAX_ASYNC_DRAW_PIXELS_SGIX */: return "GL_MAX_ASYNC_DRAW_PIXELS_SGIX (0x8360)"; +case 0x8361 /* GL_MAX_ASYNC_READ_PIXELS_SGIX */: return "GL_MAX_ASYNC_READ_PIXELS_SGIX (0x8361)"; + + + + + +/* ----------------------- GL_SGIX_blend_alpha_minmax ---------------------- */ + + + + +case 0x8320 /* GL_ALPHA_MIN_SGIX */: return "GL_ALPHA_MIN_SGIX (0x8320)"; +case 0x8321 /* GL_ALPHA_MAX_SGIX */: return "GL_ALPHA_MAX_SGIX (0x8321)"; + + + + + +/* ---------------------------- GL_SGIX_clipmap ---------------------------- */ + + + + + + + + +/* ---------------------- GL_SGIX_convolution_accuracy --------------------- */ + + + + +case 0x8316 /* GL_CONVOLUTION_HINT_SGIX */: return "GL_CONVOLUTION_HINT_SGIX (0x8316)"; + + + + + +/* ------------------------- GL_SGIX_depth_texture ------------------------- */ + + + + +//case 0x81A5 /* GL_DEPTH_COMPONENT16_SGIX */: return "GL_DEPTH_COMPONENT16_SGIX (0x81A5)"; +//case 0x81A6 /* GL_DEPTH_COMPONENT24_SGIX */: return "GL_DEPTH_COMPONENT24_SGIX (0x81A6)"; +//case 0x81A7 /* GL_DEPTH_COMPONENT32_SGIX */: return "GL_DEPTH_COMPONENT32_SGIX (0x81A7)"; + + + + + +/* -------------------------- GL_SGIX_flush_raster ------------------------- */ + + +/* --------------------------- GL_SGIX_fog_offset -------------------------- */ + + + + +case 0x8198 /* GL_FOG_OFFSET_SGIX */: return "GL_FOG_OFFSET_SGIX (0x8198)"; +case 0x8199 /* GL_FOG_OFFSET_VALUE_SGIX */: return "GL_FOG_OFFSET_VALUE_SGIX (0x8199)"; + + + + + +/* -------------------------- GL_SGIX_fog_texture -------------------------- */ + + + + + + +/* ------------------- GL_SGIX_fragment_specular_lighting ------------------ */ + + + + +/* --------------------------- GL_SGIX_framezoom --------------------------- */ + + +/* --------------------------- GL_SGIX_interlace --------------------------- */ + + + + +case 0x8094 /* GL_INTERLACE_SGIX */: return "GL_INTERLACE_SGIX (0x8094)"; + + + + + +/* ------------------------- GL_SGIX_ir_instrument1 ------------------------ */ + + + + + + + + +/* ------------------------- GL_SGIX_list_priority ------------------------- */ + + + + + + + + +/* ------------------------- GL_SGIX_pixel_texture ------------------------- */ + + +/* ----------------------- GL_SGIX_pixel_texture_bits ---------------------- */ + + + + + + + + +/* ------------------------ GL_SGIX_reference_plane ------------------------ */ + + +/* ---------------------------- GL_SGIX_resample --------------------------- */ + + + + +case 0x842E /* GL_PACK_RESAMPLE_SGIX */: return "GL_PACK_RESAMPLE_SGIX (0x842E)"; +case 0x842F /* GL_UNPACK_RESAMPLE_SGIX */: return "GL_UNPACK_RESAMPLE_SGIX (0x842F)"; +case 0x8430 /* GL_RESAMPLE_DECIMATE_SGIX */: return "GL_RESAMPLE_DECIMATE_SGIX (0x8430)"; +case 0x8433 /* GL_RESAMPLE_REPLICATE_SGIX */: return "GL_RESAMPLE_REPLICATE_SGIX (0x8433)"; +case 0x8434 /* GL_RESAMPLE_ZERO_FILL_SGIX */: return "GL_RESAMPLE_ZERO_FILL_SGIX (0x8434)"; + + + + + +/* ----------------------------- GL_SGIX_shadow ---------------------------- */ + + + + +case 0x819A /* GL_TEXTURE_COMPARE_SGIX */: return "GL_TEXTURE_COMPARE_SGIX (0x819A)"; +case 0x819B /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */: return "GL_TEXTURE_COMPARE_OPERATOR_SGIX (0x819B)"; +case 0x819C /* GL_TEXTURE_LEQUAL_R_SGIX */: return "GL_TEXTURE_LEQUAL_R_SGIX (0x819C)"; +case 0x819D /* GL_TEXTURE_GEQUAL_R_SGIX */: return "GL_TEXTURE_GEQUAL_R_SGIX (0x819D)"; + + + + + +/* ------------------------- GL_SGIX_shadow_ambient ------------------------ */ + + + + +//case 0x80BF /* GL_SHADOW_AMBIENT_SGIX */: return "GL_SHADOW_AMBIENT_SGIX (0x80BF)"; + + + + + +/* ----------------------------- GL_SGIX_sprite ---------------------------- */ + + + + + + + + +/* ----------------------- GL_SGIX_tag_sample_buffer ----------------------- */ + + +/* ------------------------ GL_SGIX_texture_add_env ------------------------ */ + + + + + + + + +/* -------------------- GL_SGIX_texture_coordinate_clamp ------------------- */ + + + + +case 0x8369 /* GL_TEXTURE_MAX_CLAMP_S_SGIX */: return "GL_TEXTURE_MAX_CLAMP_S_SGIX (0x8369)"; +case 0x836A /* GL_TEXTURE_MAX_CLAMP_T_SGIX */: return "GL_TEXTURE_MAX_CLAMP_T_SGIX (0x836A)"; +case 0x836B /* GL_TEXTURE_MAX_CLAMP_R_SGIX */: return "GL_TEXTURE_MAX_CLAMP_R_SGIX (0x836B)"; + + + + + +/* ------------------------ GL_SGIX_texture_lod_bias ----------------------- */ + + + + + + + + +/* ---------------------- GL_SGIX_texture_multi_buffer --------------------- */ + + + + +case 0x812E /* GL_TEXTURE_MULTI_BUFFER_HINT_SGIX */: return "GL_TEXTURE_MULTI_BUFFER_HINT_SGIX (0x812E)"; + + + + + +/* ------------------------- GL_SGIX_texture_range ------------------------- */ + + + + +case 0x85E0 /* GL_RGB_SIGNED_SGIX */: return "GL_RGB_SIGNED_SGIX (0x85E0)"; +case 0x85E1 /* GL_RGBA_SIGNED_SGIX */: return "GL_RGBA_SIGNED_SGIX (0x85E1)"; +case 0x85E2 /* GL_ALPHA_SIGNED_SGIX */: return "GL_ALPHA_SIGNED_SGIX (0x85E2)"; +case 0x85E3 /* GL_LUMINANCE_SIGNED_SGIX */: return "GL_LUMINANCE_SIGNED_SGIX (0x85E3)"; +case 0x85E4 /* GL_INTENSITY_SIGNED_SGIX */: return "GL_INTENSITY_SIGNED_SGIX (0x85E4)"; +case 0x85E5 /* GL_LUMINANCE_ALPHA_SIGNED_SGIX */: return "GL_LUMINANCE_ALPHA_SIGNED_SGIX (0x85E5)"; +case 0x85E6 /* GL_RGB16_SIGNED_SGIX */: return "GL_RGB16_SIGNED_SGIX (0x85E6)"; +case 0x85E7 /* GL_RGBA16_SIGNED_SGIX */: return "GL_RGBA16_SIGNED_SGIX (0x85E7)"; +case 0x85E8 /* GL_ALPHA16_SIGNED_SGIX */: return "GL_ALPHA16_SIGNED_SGIX (0x85E8)"; +case 0x85E9 /* GL_LUMINANCE16_SIGNED_SGIX */: return "GL_LUMINANCE16_SIGNED_SGIX (0x85E9)"; +case 0x85EA /* GL_INTENSITY16_SIGNED_SGIX */: return "GL_INTENSITY16_SIGNED_SGIX (0x85EA)"; +case 0x85EB /* GL_LUMINANCE16_ALPHA16_SIGNED_SGIX */: return "GL_LUMINANCE16_ALPHA16_SIGNED_SGIX (0x85EB)"; +case 0x85EC /* GL_RGB_EXTENDED_RANGE_SGIX */: return "GL_RGB_EXTENDED_RANGE_SGIX (0x85EC)"; +case 0x85ED /* GL_RGBA_EXTENDED_RANGE_SGIX */: return "GL_RGBA_EXTENDED_RANGE_SGIX (0x85ED)"; +case 0x85EE /* GL_ALPHA_EXTENDED_RANGE_SGIX */: return "GL_ALPHA_EXTENDED_RANGE_SGIX (0x85EE)"; +case 0x85EF /* GL_LUMINANCE_EXTENDED_RANGE_SGIX */: return "GL_LUMINANCE_EXTENDED_RANGE_SGIX (0x85EF)"; +case 0x85F0 /* GL_INTENSITY_EXTENDED_RANGE_SGIX */: return "GL_INTENSITY_EXTENDED_RANGE_SGIX (0x85F0)"; +case 0x85F1 /* GL_LUMINANCE_ALPHA_EXTENDED_RANGE_SGIX */: return "GL_LUMINANCE_ALPHA_EXTENDED_RANGE_SGIX (0x85F1)"; +case 0x85F2 /* GL_RGB16_EXTENDED_RANGE_SGIX */: return "GL_RGB16_EXTENDED_RANGE_SGIX (0x85F2)"; +case 0x85F3 /* GL_RGBA16_EXTENDED_RANGE_SGIX */: return "GL_RGBA16_EXTENDED_RANGE_SGIX (0x85F3)"; +case 0x85F4 /* GL_ALPHA16_EXTENDED_RANGE_SGIX */: return "GL_ALPHA16_EXTENDED_RANGE_SGIX (0x85F4)"; +case 0x85F5 /* GL_LUMINANCE16_EXTENDED_RANGE_SGIX */: return "GL_LUMINANCE16_EXTENDED_RANGE_SGIX (0x85F5)"; +case 0x85F6 /* GL_INTENSITY16_EXTENDED_RANGE_SGIX */: return "GL_INTENSITY16_EXTENDED_RANGE_SGIX (0x85F6)"; +case 0x85F7 /* GL_LUMINANCE16_ALPHA16_EXTENDED_RANGE_SGIX */: return "GL_LUMINANCE16_ALPHA16_EXTENDED_RANGE_SGIX (0x85F7)"; +case 0x85F8 /* GL_MIN_LUMINANCE_SGIS */: return "GL_MIN_LUMINANCE_SGIS (0x85F8)"; +case 0x85F9 /* GL_MAX_LUMINANCE_SGIS */: return "GL_MAX_LUMINANCE_SGIS (0x85F9)"; +case 0x85FA /* GL_MIN_INTENSITY_SGIS */: return "GL_MIN_INTENSITY_SGIS (0x85FA)"; +case 0x85FB /* GL_MAX_INTENSITY_SGIS */: return "GL_MAX_INTENSITY_SGIS (0x85FB)"; + + + + + +/* ----------------------- GL_SGIX_texture_scale_bias ---------------------- */ + + + + +case 0x8179 /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */: return "GL_POST_TEXTURE_FILTER_BIAS_SGIX (0x8179)"; +case 0x817A /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */: return "GL_POST_TEXTURE_FILTER_SCALE_SGIX (0x817A)"; +case 0x817B /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */: return "GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX (0x817B)"; +case 0x817C /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */: return "GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX (0x817C)"; + + + + + +/* ------------------------- GL_SGIX_vertex_preclip ------------------------ */ + + + + +case 0x83EE /* GL_VERTEX_PRECLIP_SGIX */: return "GL_VERTEX_PRECLIP_SGIX (0x83EE)"; +case 0x83EF /* GL_VERTEX_PRECLIP_HINT_SGIX */: return "GL_VERTEX_PRECLIP_HINT_SGIX (0x83EF)"; + + + + + +/* ---------------------- GL_SGIX_vertex_preclip_hint ---------------------- */ + + + + +//case 0x83EE /* GL_VERTEX_PRECLIP_SGIX */: return "GL_VERTEX_PRECLIP_SGIX (0x83EE)"; +//case 0x83EF /* GL_VERTEX_PRECLIP_HINT_SGIX */: return "GL_VERTEX_PRECLIP_HINT_SGIX (0x83EF)"; + + + + + +/* ----------------------------- GL_SGIX_ycrcb ----------------------------- */ + + + + + + + + +/* -------------------------- GL_SGI_color_matrix -------------------------- */ + + + + +//case 0x80B1 /* GL_COLOR_MATRIX_SGI */: return "GL_COLOR_MATRIX_SGI (0x80B1)"; +//case 0x80B2 /* GL_COLOR_MATRIX_STACK_DEPTH_SGI */: return "GL_COLOR_MATRIX_STACK_DEPTH_SGI (0x80B2)"; +//case 0x80B3 /* GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI */: return "GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI (0x80B3)"; +//case 0x80B4 /* GL_POST_COLOR_MATRIX_RED_SCALE_SGI */: return "GL_POST_COLOR_MATRIX_RED_SCALE_SGI (0x80B4)"; +//case 0x80B5 /* GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI */: return "GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI (0x80B5)"; +//case 0x80B6 /* GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI */: return "GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI (0x80B6)"; +//case 0x80B7 /* GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI */: return "GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI (0x80B7)"; +//case 0x80B8 /* GL_POST_COLOR_MATRIX_RED_BIAS_SGI */: return "GL_POST_COLOR_MATRIX_RED_BIAS_SGI (0x80B8)"; +//case 0x80B9 /* GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI */: return "GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI (0x80B9)"; +//case 0x80BA /* GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI */: return "GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI (0x80BA)"; +//case 0x80BB /* GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI */: return "GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI (0x80BB)"; + + + + + +/* --------------------------- GL_SGI_color_table -------------------------- */ + + + + +//case 0x80D0 /* GL_COLOR_TABLE_SGI */: return "GL_COLOR_TABLE_SGI (0x80D0)"; +//case 0x80D1 /* GL_POST_CONVOLUTION_COLOR_TABLE_SGI */: return "GL_POST_CONVOLUTION_COLOR_TABLE_SGI (0x80D1)"; +//case 0x80D2 /* GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI */: return "GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI (0x80D2)"; +//case 0x80D3 /* GL_PROXY_COLOR_TABLE_SGI */: return "GL_PROXY_COLOR_TABLE_SGI (0x80D3)"; +//case 0x80D4 /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI */: return "GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI (0x80D4)"; +//case 0x80D5 /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI */: return "GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI (0x80D5)"; +//case 0x80D6 /* GL_COLOR_TABLE_SCALE_SGI */: return "GL_COLOR_TABLE_SCALE_SGI (0x80D6)"; +//case 0x80D7 /* GL_COLOR_TABLE_BIAS_SGI */: return "GL_COLOR_TABLE_BIAS_SGI (0x80D7)"; +//case 0x80D8 /* GL_COLOR_TABLE_FORMAT_SGI */: return "GL_COLOR_TABLE_FORMAT_SGI (0x80D8)"; +//case 0x80D9 /* GL_COLOR_TABLE_WIDTH_SGI */: return "GL_COLOR_TABLE_WIDTH_SGI (0x80D9)"; +//case 0x80DA /* GL_COLOR_TABLE_RED_SIZE_SGI */: return "GL_COLOR_TABLE_RED_SIZE_SGI (0x80DA)"; +//case 0x80DB /* GL_COLOR_TABLE_GREEN_SIZE_SGI */: return "GL_COLOR_TABLE_GREEN_SIZE_SGI (0x80DB)"; +//case 0x80DC /* GL_COLOR_TABLE_BLUE_SIZE_SGI */: return "GL_COLOR_TABLE_BLUE_SIZE_SGI (0x80DC)"; +//case 0x80DD /* GL_COLOR_TABLE_ALPHA_SIZE_SGI */: return "GL_COLOR_TABLE_ALPHA_SIZE_SGI (0x80DD)"; +//case 0x80DE /* GL_COLOR_TABLE_LUMINANCE_SIZE_SGI */: return "GL_COLOR_TABLE_LUMINANCE_SIZE_SGI (0x80DE)"; +//case 0x80DF /* GL_COLOR_TABLE_INTENSITY_SIZE_SGI */: return "GL_COLOR_TABLE_INTENSITY_SIZE_SGI (0x80DF)"; + +/* ----------------------- GL_SGI_texture_color_table ---------------------- */ + + + + +case 0x80BC /* GL_TEXTURE_COLOR_TABLE_SGI */: return "GL_TEXTURE_COLOR_TABLE_SGI (0x80BC)"; +case 0x80BD /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */: return "GL_PROXY_TEXTURE_COLOR_TABLE_SGI (0x80BD)"; + + + + + +/* ------------------------- GL_SUNX_constant_data ------------------------- */ + + + + +case 0x81D5 /* GL_UNPACK_CONSTANT_DATA_SUNX */: return "GL_UNPACK_CONSTANT_DATA_SUNX (0x81D5)"; +case 0x81D6 /* GL_TEXTURE_CONSTANT_DATA_SUNX */: return "GL_TEXTURE_CONSTANT_DATA_SUNX (0x81D6)";/* -------------------- GL_SUN_convolution_border_modes -------------------- */ + + + + +case 0x81D4 /* GL_WRAP_BORDER_SUN */: return "GL_WRAP_BORDER_SUN (0x81D4)"; + + + + + +/* -------------------------- GL_SUN_global_alpha -------------------------- */ + + + + +case 0x81D9 /* GL_GLOBAL_ALPHA_SUN */: return "GL_GLOBAL_ALPHA_SUN (0x81D9)"; +case 0x81DA /* GL_GLOBAL_ALPHA_FACTOR_SUN */: return "GL_GLOBAL_ALPHA_FACTOR_SUN (0x81DA)"; + + + +/* --------------------------- GL_SUN_mesh_array --------------------------- */ + + + + +case 0x8614 /* GL_QUAD_MESH_SUN */: return "GL_QUAD_MESH_SUN (0x8614)"; +case 0x8615 /* GL_TRIANGLE_MESH_SUN */: return "GL_TRIANGLE_MESH_SUN (0x8615)"; + + + + + +/* ------------------------ GL_SUN_read_video_pixels ----------------------- */ + + +/* --------------------------- GL_SUN_slice_accum -------------------------- */ + + + + +case 0x85CC /* GL_SLICE_ACCUM_SUN */: return "GL_SLICE_ACCUM_SUN (0x85CC)"; + + + + + +/* -------------------------- GL_SUN_triangle_list ------------------------- */ + + + + +//case 0x01 /* GL_RESTART_SUN */: return "GL_RESTART_SUN (0x01)"; +//case 0x02 /* GL_REPLACE_MIDDLE_SUN */: return "GL_REPLACE_MIDDLE_SUN (0x02)"; +//case 0x03 /* GL_REPLACE_OLDEST_SUN */: return "GL_REPLACE_OLDEST_SUN (0x03)"; +case 0x81D7 /* GL_TRIANGLE_LIST_SUN */: return "GL_TRIANGLE_LIST_SUN (0x81D7)"; +case 0x81D8 /* GL_REPLACEMENT_CODE_SUN */: return "GL_REPLACEMENT_CODE_SUN (0x81D8)"; +case 0x85C0 /* GL_REPLACEMENT_CODE_ARRAY_SUN */: return "GL_REPLACEMENT_CODE_ARRAY_SUN (0x85C0)"; +case 0x85C1 /* GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN */: return "GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN (0x85C1)"; +case 0x85C2 /* GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN */: return "GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN (0x85C2)"; +case 0x85C3 /* GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN */: return "GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN (0x85C3)"; +case 0x85C4 /* GL_R1UI_V3F_SUN */: return "GL_R1UI_V3F_SUN (0x85C4)"; +case 0x85C5 /* GL_R1UI_C4UB_V3F_SUN */: return "GL_R1UI_C4UB_V3F_SUN (0x85C5)"; +case 0x85C6 /* GL_R1UI_C3F_V3F_SUN */: return "GL_R1UI_C3F_V3F_SUN (0x85C6)"; +case 0x85C7 /* GL_R1UI_N3F_V3F_SUN */: return "GL_R1UI_N3F_V3F_SUN (0x85C7)"; +case 0x85C8 /* GL_R1UI_C4F_N3F_V3F_SUN */: return "GL_R1UI_C4F_N3F_V3F_SUN (0x85C8)"; +case 0x85C9 /* GL_R1UI_T2F_V3F_SUN */: return "GL_R1UI_T2F_V3F_SUN (0x85C9)"; +case 0x85CA /* GL_R1UI_T2F_N3F_V3F_SUN */: return "GL_R1UI_T2F_N3F_V3F_SUN (0x85CA)"; +case 0x85CB /* GL_R1UI_T2F_C4F_N3F_V3F_SUN */: return "GL_R1UI_T2F_C4F_N3F_V3F_SUN (0x85CB)"; + +/* ----------------------------- GL_SUN_vertex ----------------------------- */ +/* -------------------------- GL_WIN_phong_shading ------------------------- */ + + + + +case 0x80EA /* GL_PHONG_WIN */: return "GL_PHONG_WIN (0x80EA)"; +case 0x80EB /* GL_PHONG_HINT_WIN */: return "GL_PHONG_HINT_WIN (0x80EB)"; + + + + + +/* -------------------------- GL_WIN_specular_fog -------------------------- */ + + + + +case 0x80EC /* GL_FOG_SPECULAR_TEXTURE_WIN */: return "GL_FOG_SPECULAR_TEXTURE_WIN (0x80EC)"; + + +default: + { + return "what?"; + } +} // ~switch + +} // ~WWWGLEnumToString + +int main() { + volatile int i; + i = 34962; + printf("%d: %s\n", i, WWWGLEnumToString(i)); + i = 26214; + printf("%d: %s\n", i, WWWGLEnumToString(i)); + i = 35040; + printf("%d: %s\n", i, WWWGLEnumToString(i)); + i = 3060; + printf("%d: %s\n", i, WWWGLEnumToString(i)); +} + diff --git a/src/binaryen/test/bigswitch.txt b/src/binaryen/test/bigswitch.txt new file mode 100644 index 0000000000..95d984dcbc --- /dev/null +++ b/src/binaryen/test/bigswitch.txt @@ -0,0 +1,5 @@ +34962: GL_ARRAY_BUFFER (0x8892) +26214: what? +35040: GL_STREAM_DRAW (0x88E0) +3060: what? + diff --git a/src/binaryen/test/binaryen.js/call_import_error.js b/src/binaryen/test/binaryen.js/call_import_error.js new file mode 100644 index 0000000000..4434584b52 --- /dev/null +++ b/src/binaryen/test/binaryen.js/call_import_error.js @@ -0,0 +1,13 @@ +var module = new Binaryen.Module(); + +var signature = module.addFunctionType("v", Binaryen.none, []); +module.addImport("fn", "env", "fn", signature); + +module.addFunction("main", signature, [], module.block("", [ + module.call("fn", [], Binaryen.none) // should be callImport +])); +module.addExport("main", "main"); + +console.log(module.emitText()); + +module.validate(); // fails diff --git a/src/binaryen/test/binaryen.js/call_import_error.js.txt b/src/binaryen/test/binaryen.js/call_import_error.js.txt new file mode 100644 index 0000000000..6f2e3b2ac6 --- /dev/null +++ b/src/binaryen/test/binaryen.js/call_import_error.js.txt @@ -0,0 +1,13 @@ +(module + (type $v (func)) + (import "env" "fn" (func $fn)) + (memory $0 0) + (export "main" (func $main)) + (func $main (; 1 ;) (type $v) + (call $fn) + ) +) + +[wasm-validator error in function $main] unexpected false: call target must exist, on +[none] (call $fn) +(perhaps it should be a CallImport instead of Call?) diff --git a/src/binaryen/test/binaryen.js/emit_asmjs.js b/src/binaryen/test/binaryen.js/emit_asmjs.js new file mode 100644 index 0000000000..6848f5f01b --- /dev/null +++ b/src/binaryen/test/binaryen.js/emit_asmjs.js @@ -0,0 +1,11 @@ +var module = new Binaryen.Module(); + +var signature = module.addFunctionType("ii", Binaryen.i32, [ Binaryen.i32 ]); + +module.addFunction("main", signature, [], module.getLocal(0, Binaryen.i32)); + +module.addExport("main", "main"); + +module.validate(); // should validate before calling emitAsmjs + +console.log(module.emitAsmjs()); diff --git a/src/binaryen/test/binaryen.js/emit_asmjs.js.txt b/src/binaryen/test/binaryen.js/emit_asmjs.js.txt new file mode 100644 index 0000000000..807936d93c --- /dev/null +++ b/src/binaryen/test/binaryen.js/emit_asmjs.js.txt @@ -0,0 +1,66 @@ +function asmFunc(global, env, buffer) { + "use asm"; + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + var Math_imul = global.Math.imul; + var Math_fround = global.Math.fround; + var Math_abs = global.Math.abs; + var Math_clz32 = global.Math.clz32; + function main($$0) { + $$0 = $$0 | 0; + var $$1 = 0, wasm2asm_i32$0 = 0; + return $$0 | 0; + return wasm2asm_i32$0 | 0; + } + + function __wasm_ctz_i32(x) { + x = x | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0; + if ((x | 0) == (0 | 0)) $$9 = 32; else $$9 = 31 - Math_clz32(x ^ (x - 1 | 0) | 0) | 0; + return $$9 | 0; + } + + function __wasm_popcnt_i32(x) { + x = x | 0; + var count = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0; + count = 0; + b : { + l : do { + $$5 = count; + if ((x | 0) == (0 | 0)) break b; + x = x & (x - 1 | 0) | 0; + count = count + 1 | 0; + continue l; + break l; + } while (1); + }; + return $$5 | 0; + } + + function __wasm_rotl_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 >>> (k & 31 | 0) | 0) & x | 0) << (k & 31 | 0) | 0 | (((4294967295 << (32 - (k & 31 | 0) | 0) | 0) & x | 0) >>> (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function __wasm_rotr_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 << (k & 31 | 0) | 0) & x | 0) >>> (k & 31 | 0) | 0 | (((4294967295 >>> (32 - (k & 31 | 0) | 0) | 0) & x | 0) << (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + return { + main: main + }; +} + diff --git a/src/binaryen/test/binaryen.js/hello-world.js b/src/binaryen/test/binaryen.js/hello-world.js new file mode 100644 index 0000000000..c08e673423 --- /dev/null +++ b/src/binaryen/test/binaryen.js/hello-world.js @@ -0,0 +1,53 @@ + +// "hello world" type example: create a function that adds two i32s and +// returns the result + +// Create a module to work on +var module = new Binaryen.Module(); + +// Create a function type for i32 (i32, i32) (i.e., return i32, pass two +// i32 params) +var iii = module.addFunctionType('iii', Binaryen.i32, [Binaryen.i32, Binaryen.i32]); + +// Start to create the function, starting with the contents: Get the 0 and +// 1 arguments, and add them, then return them +var left = module.getLocal(0, Binaryen.i32); +var right = module.getLocal(1, Binaryen.i32); +var add = module.i32.add(left, right); +var ret = module.return(add); + +// Create the add function +// Note: no additional local variables (that's the []) +module.addFunction('adder', iii, [], ret); + +// Export the function, so we can call it later (for simplicity we +// export it as the same name as it has internally) +module.addExport('adder', 'adder'); + +// Print out the text +console.log(module.emitText()); + +// Optimize the module! This removes the 'return', since the +// output of the add can just fall through +module.optimize(); + +// Print out the optimized module's text +console.log('optimized:\n\n' + module.emitText()); + +// Get the binary in typed array form +var binary = module.emitBinary(); +console.log('binary size: ' + binary.length); +console.log(); + +// We don't need the Binaryen module anymore, so we can tell it to +// clean itself up +module.dispose(); + +// Compile the binary and create an instance +var wasm = new WebAssembly.Instance(new WebAssembly.Module(binary), {}) +console.log(wasm); // prints something like "[object WebAssembly.Instance]" +console.log(); + +// Call the code! +console.log('an addition: ' + wasm.exports.adder(40, 2)); + diff --git a/src/binaryen/test/binaryen.js/hello-world.js.txt b/src/binaryen/test/binaryen.js/hello-world.js.txt new file mode 100644 index 0000000000..48a4e0a606 --- /dev/null +++ b/src/binaryen/test/binaryen.js/hello-world.js.txt @@ -0,0 +1,33 @@ +(module + (type $iii (func (param i32 i32) (result i32))) + (memory $0 0) + (export "adder" (func $adder)) + (func $adder (; 0 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.add + (get_local $0) + (get_local $1) + ) + ) + ) +) + +optimized: + +(module + (type $iii (func (param i32 i32) (result i32))) + (memory $0 0) + (export "adder" (func $adder)) + (func $adder (; 0 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (i32.add + (get_local $0) + (get_local $1) + ) + ) +) + +binary size: 60 + +[object WebAssembly.Instance] + +an addition: 42 diff --git a/src/binaryen/test/binaryen.js/kitchen-sink.js b/src/binaryen/test/binaryen.js/kitchen-sink.js new file mode 100644 index 0000000000..3205de7027 --- /dev/null +++ b/src/binaryen/test/binaryen.js/kitchen-sink.js @@ -0,0 +1,576 @@ + +// kitchen sink, tests the full API + +var module; + +// helpers + +function assert(x) { + if (!x) throw 'error!'; +} + +function makeInt32(x) { + return module.i32.const(x); +} + +function makeFloat32(x) { + return module.f32.const(x); +} + +function makeInt64(l, h) { + return module.i64.const(l, h); +} + +function makeFloat64(x) { + return module.f64.const(x); +} + +function makeSomething() { + return makeInt32(1337); +} + +function makeDroppedInt32(x) { + return module.drop(module.i32.const(x)); +} + +// tests + +function test_types() { + console.log("BinaryenNone: " + Binaryen.none); + console.log("BinaryenInt32: " + Binaryen.i32); + console.log("BinaryenInt64: " + Binaryen.i64); + console.log("BinaryenFloat32: " + Binaryen.f32); + console.log("BinaryenFloat64: " + Binaryen.f64); +} + +function test_ids() { + console.log("BinaryenInvalidId: " + Binaryen.InvalidId); + console.log("BinaryenBlockId: " + Binaryen.BlockId); + console.log("BinaryenIfId: " + Binaryen.IfId); + console.log("BinaryenLoopId: " + Binaryen.LoopId); + console.log("BinaryenBreakId: " + Binaryen.BreakId); + console.log("BinaryenSwitchId: " + Binaryen.SwitchId); + console.log("BinaryenCallId: " + Binaryen.CallId); + console.log("BinaryenCallImportId: " + Binaryen.CallImportId); + console.log("BinaryenCallIndirectId: " + Binaryen.CallIndirectId); + console.log("BinaryenGetLocalId: " + Binaryen.GetLocalId); + console.log("BinaryenSetLocalId: " + Binaryen.SetLocalId); + console.log("BinaryenGetGlobalId: " + Binaryen.GetGlobalId); + console.log("BinaryenSetGlobalId: " + Binaryen.SetGlobalId); + console.log("BinaryenLoadId: " + Binaryen.LoadId); + console.log("BinaryenStoreId: " + Binaryen.StoreId); + console.log("BinaryenConstId: " + Binaryen.ConstId); + console.log("BinaryenUnaryId: " + Binaryen.UnaryId); + console.log("BinaryenBinaryId: " + Binaryen.BinaryId); + console.log("BinaryenSelectId: " + Binaryen.SelectId); + console.log("BinaryenDropId: " + Binaryen.DropId); + console.log("BinaryenReturnId: " + Binaryen.ReturnId); + console.log("BinaryenHostId: " + Binaryen.HostId); + console.log("BinaryenNopId: " + Binaryen.NopId); + console.log("BinaryenUnreachableId: " + Binaryen.UnreachableId); + console.log("BinaryenAtomicCmpxchgId: " + Binaryen.AtomicCmpxchgId); + console.log("BinaryenAtomicRMWId: " + Binaryen.AtomicRMWId); + console.log("BinaryenAtomicWaitId: " + Binaryen.AtomicWaitId); + console.log("BinaryenAtomicWakeId: " + Binaryen.AtomicWakeId); +} + +function test_core() { + + // Module creation + + module = new Binaryen.Module(); + + // Literals and consts + + var constI32 = module.i32.const(1), + constI64 = module.i64.const(2), + constF32 = module.f32.const(3.14), + constF64 = module.f64.const(2.1828), + constF32Bits = module.f32.const_bits(0xffff1234), + constF64Bits = module.f64.const_bits(0x5678abcd, 0xffff1234); + + var iiIfF = module.addFunctionType("iiIfF", Binaryen.i32, [ Binaryen.i32, Binaryen.i64, Binaryen.f32, Binaryen.f64 ]); + + var temp1 = makeInt32(1), temp2 = makeInt32(2), temp3 = makeInt32(3), + temp4 = makeInt32(4), temp5 = makeInt32(5), + temp6 = makeInt32(0), temp7 = makeInt32(1), + temp8 = makeInt32(0), temp9 = makeInt32(1), + temp10 = makeInt32(1), temp11 = makeInt32(3), temp12 = makeInt32(5), + temp13 = makeInt32(10), temp14 = makeInt32(11), + temp15 = makeInt32(110), temp16 = makeInt64(111); + + var valueList = [ + // Unary + module.i32.clz(module.i32.const(-10)), + module.i64.ctz(module.i64.const(-22, -1)), + module.i32.popcnt(module.i32.const(-10)), + module.f32.neg(module.f32.const(-33.612)), + module.f64.abs(module.f64.const(-9005.841)), + module.f32.ceil(module.f32.const(-33.612)), + module.f64.floor(module.f64.const(-9005.841)), + module.f32.trunc(module.f32.const(-33.612)), + module.f32.nearest(module.f32.const(-33.612)), + module.f64.sqrt(module.f64.const(-9005.841)), + module.i32.eqz(module.i32.const(-10)), + module.i64.extend_s(module.i32.const(-10)), + module.i64.extend_u(module.i32.const(-10)), + module.i32.wrap(module.i64.const(-22, -1)), + module.i32.trunc_s.f32(module.f32.const(-33.612)), + module.i64.trunc_s.f32(module.f32.const(-33.612)), + module.i32.trunc_u.f32(module.f32.const(-33.612)), + module.i64.trunc_u.f32(module.f32.const(-33.612)), + module.i32.trunc_s.f64(module.f64.const(-9005.841)), + module.i64.trunc_s.f64(module.f64.const(-9005.841)), + module.i32.trunc_u.f64(module.f64.const(-9005.841)), + module.i64.trunc_u.f64(module.f64.const(-9005.841)), + module.i32.reinterpret(module.f32.const(-33.612)), + module.i64.reinterpret(module.f64.const(-9005.841)), + module.f32.convert_s.i32(module.i32.const(-10)), + module.f64.convert_s.i32(module.i32.const(-10)), + module.f32.convert_u.i32(module.i32.const(-10)), + module.f64.convert_u.i32(module.i32.const(-10)), + module.f32.convert_s.i64(module.i64.const(-22, -1)), + module.f64.convert_s.i64(module.i64.const(-22, -1)), + module.f32.convert_u.i64(module.i64.const(-22, -1)), + module.f64.convert_u.i64(module.i64.const(-22, -1)), + module.f64.promote(module.f32.const(-33.612)), + module.f32.demote(module.f64.const(-9005.841)), + module.f32.reinterpret(module.i32.const(-10)), + module.f64.reinterpret(module.i64.const(-22, -1)), + // Binary + module.i32.add(module.i32.const(-10), module.i32.const(-11)), + module.f64.sub(module.f64.const(-9005.841), module.f64.const(-9007.333)), + module.i32.div_s(module.i32.const(-10), module.i32.const(-11)), + module.i64.div_u(module.i64.const(-22, 0), module.i64.const(-23, 0)), + module.i64.rem_s(module.i64.const(-22, 0), module.i64.const(-23, 0)), + module.i32.rem_u(module.i32.const(-10), module.i32.const(-11)), + module.i32.and(module.i32.const(-10), module.i32.const(-11)), + module.i64.or(module.i64.const(-22, 0), module.i64.const(-23, 0)), + module.i32.xor(module.i32.const(-10), module.i32.const(-11)), + module.i64.shl(module.i64.const(-22, 0), module.i64.const(-23, 0)), + module.i64.shr_u(module.i64.const(-22, 0), module.i64.const(-23, 0)), + module.i32.shr_s(module.i32.const(-10), module.i32.const(-11)), + module.i32.rotl(module.i32.const(-10), module.i32.const(-11)), + module.i64.rotr(module.i64.const(-22, 0), module.i64.const(-23, 0)), + module.f32.div(module.f32.const(-33.612), module.f32.const(-62.5)), + module.f64.copysign(module.f64.const(-9005.841), module.f64.const(-9007.333)), + module.f32.min(module.f32.const(-33.612), module.f32.const(-62.5)), + module.f64.max(module.f64.const(-9005.841), module.f64.const(-9007.333)), + module.i32.eq(module.i32.const(-10), module.i32.const(-11)), + module.f32.ne(module.f32.const(-33.612), module.f32.const(-62.5)), + module.i32.lt_s(module.i32.const(-10), module.i32.const(-11)), + module.i64.lt_u(module.i64.const(-22, 0), module.i64.const(-23, 0)), + module.i64.le_s(module.i64.const(-22, 0), module.i64.const(-23, 0)), + module.i32.le_u(module.i32.const(-10), module.i32.const(-11)), + module.i64.gt_s(module.i64.const(-22, 0), module.i64.const(-23, 0)), + module.i32.gt_u(module.i32.const(-10), module.i32.const(-11)), + module.i32.ge_s(module.i32.const(-10), module.i32.const(-11)), + module.i64.ge_u(module.i64.const(-22, 0), module.i64.const(-23, 0)), + module.f32.lt(module.f32.const(-33.612), module.f32.const(-62.5)), + module.f64.le(module.f64.const(-9005.841), module.f64.const(-9007.333)), + module.f64.gt(module.f64.const(-9005.841), module.f64.const(-9007.333)), + module.f32.ge(module.f32.const(-33.612), module.f32.const(-62.5)), + // All the rest + module.block('', []), // block with no name + module.if(temp1, temp2, temp3), + module.if(temp4, temp5), + module.loop("in", makeInt32(0)), + module.loop(null, makeInt32(0)), + module.break("the-value", temp6, temp7), + module.break("the-nothing", makeInt32(2)), + module.break("the-value", null, makeInt32(3)), + module.break("the-nothing"), + module.switch([ "the-value" ], "the-value", temp8, temp9), + module.switch([ "the-nothing" ], "the-nothing", makeInt32(2)), + module.i32.eqz( // check the output type of the call node + module.call("kitchen()sinker", [ makeInt32(13), makeInt64(37, 0), makeFloat32(1.3), makeFloat64(3.7) ], Binaryen.i32) + ), + module.i32.eqz( // check the output type of the call node + module.i32.trunc_s.f32( + module.callImport("an-imported", [ makeInt32(13), makeFloat64(3.7) ], Binaryen.f32) + ) + ), + module.i32.eqz( // check the output type of the call node + module.callIndirect(makeInt32(2449), [ makeInt32(13), makeInt64(37, 0), makeFloat32(1.3), makeFloat64(3.7) ], "iiIfF") + ), + module.drop(module.getLocal(0, Binaryen.i32)), + module.setLocal(0, makeInt32(101)), + module.drop(module.teeLocal(0, makeInt32(102))), + module.i32.load(0, 0, makeInt32(1)), + module.i64.load16_s(2, 1, makeInt32(8)), + module.f32.load(0, 0, makeInt32(2)), + module.f64.load(2, 8, makeInt32(9)), + module.i32.store(0, 0, temp13, temp14), + module.i64.store(2, 4, temp15, temp16), + module.select(temp10, temp11, temp12), + module.return(makeInt32(1337)), + // TODO: Host + module.nop(), + module.unreachable(), + ]; + + // Test expression utility + console.log("getExpressionId=" + Binaryen.getExpressionId(valueList[3])); + console.log("getExpressionType=" + Binaryen.getExpressionType(valueList[3])); + console.log(Binaryen.emitText(valueList[3])); // test printing a standalone expression + console.log(Binaryen.getConstValueI32(module.i32.const(5))); + console.log(JSON.stringify(Binaryen.getConstValueI64(module.i64.const(6, 7)))); + console.log(Binaryen.getConstValueF32(module.f32.const(8.5))); + console.log(Binaryen.getConstValueF64(module.f64.const(9.5))); + + // Make the main body of the function. and one block with a return value, one without + var value = module.block("the-value", valueList); + var droppedValue = module.drop(value); + var nothing = module.block("the-nothing", [ droppedValue ]); + var body = module.block("the-body", [ nothing, makeInt32(42) ]); + + // Create the function + var sinker = module.addFunction("kitchen()sinker", iiIfF, [ Binaryen.i32 ], body); + + // Imports + + var fiF = module.addFunctionType("fiF", Binaryen.f32, [ Binaryen.i32, Binaryen.f64 ]); + module.addImport("an-imported", "module", "base", fiF); + + // Exports + + module.addExport("kitchen()sinker", "kitchen_sinker"); + + // Function table. One per module + + module.setFunctionTable([ sinker ]); + + // Memory. One per module + + module.setMemory(1, 256, "mem", [{ + offset: module.i32.const(10), + data: "hello, world".split('').map(function(x) { return x.charCodeAt(0) }) + }]); + + // Start function. One per module + + var v = module.addFunctionType("v", Binaryen.None, []); + var starter = module.addFunction("starter", v, [], module.nop()); + module.setStart(starter); + + // Unnamed function type + + var noname = module.addFunctionType(null, Binaryen.None, []); + + // A bunch of our code needs drop, auto-add it + module.autoDrop(); + + // Verify it validates + assert(module.validate()); + + // Print it out + console.log(module.emitText()); + + // Clean up the module, which owns all the objects we created above + module.dispose(); +} + +function makeCallCheck(x) { + return module.callImport("check", [ makeInt32(x) ], Binaryen.None); +} + +function test_relooper() { + module = new Binaryen.Module(); + var v = module.addFunctionType("v", Binaryen.None, []); + var localTypes = [ Binaryen.i32 ]; + + { + var vi = module.addFunctionType("vi", Binaryen.None, [ Binaryen.i32 ]); + module.addImport("check", "module", "check", vi); + } + + { // trivial: just one block + var relooper = new Binaryen.Relooper(); + var block = relooper.addBlock(makeCallCheck(1337)); + var body = relooper.renderAndDispose(block, 0, module); + module.addFunction("just-one-block", v, localTypes, body); + } + { // two blocks + var relooper = new Binaryen.Relooper(); + var block0 = relooper.addBlock(makeCallCheck(0)); + var block1 = relooper.addBlock(makeCallCheck(1)); + relooper.addBranch(block0, block1); // no condition, no code on branch + var body = relooper.renderAndDispose(block0, 0, module); + module.addFunction("two-blocks", v, localTypes, body); + } + { // two blocks with code between them + var relooper = new Binaryen.Relooper(); + var block0 = relooper.addBlock(makeCallCheck(0)); + var block1 = relooper.addBlock(makeCallCheck(1)); + relooper.addBranch(block0, block1, null, makeDroppedInt32(77)); // code on branch + var body = relooper.renderAndDispose(block0, 0, module); + module.addFunction("two-blocks-plus-code", v, localTypes, body); + } + { // two blocks in a loop + var relooper = new Binaryen.Relooper(); + var block0 = relooper.addBlock(makeCallCheck(0)); + var block1 = relooper.addBlock(makeCallCheck(1)); + relooper.addBranch(block0, block1, null, null); + relooper.addBranch(block1, block0, null, null); + var body = relooper.renderAndDispose(block0, 0, module); + module.addFunction("loop", v, localTypes, body); + } + { // two blocks in a loop with codes + var relooper = new Binaryen.Relooper(); + var block0 = relooper.addBlock(makeCallCheck(0)); + var block1 = relooper.addBlock(makeCallCheck(1)); + relooper.addBranch(block0, block1, null, makeDroppedInt32(33)); + relooper.addBranch(block1, block0, null, makeDroppedInt32(-66)); + var body = relooper.renderAndDispose(block0, 0, module); + module.addFunction("loop-plus-code", v, localTypes, body); + } + { // split + var relooper = new Binaryen.Relooper(); + var block0 = relooper.addBlock(makeCallCheck(0)); + var block1 = relooper.addBlock(makeCallCheck(1)); + var block2 = relooper.addBlock(makeCallCheck(2)); + relooper.addBranch(block0, block1, makeInt32(55), null); + relooper.addBranch(block0, block2, null, null); + var body = relooper.renderAndDispose(block0, 0, module); + module.addFunction("split", v, localTypes, body); + } + { // split + code + var relooper = new Binaryen.Relooper(); + var block0 = relooper.addBlock(makeCallCheck(0)); + var block1 = relooper.addBlock(makeCallCheck(1)); + var block2 = relooper.addBlock(makeCallCheck(2)); + temp = makeDroppedInt32(10); + relooper.addBranch(block0, block1, makeInt32(55), temp); + relooper.addBranch(block0, block2, null, makeDroppedInt32(20)); + var body = relooper.renderAndDispose(block0, 0, module); + module.addFunction("split-plus-code", v, localTypes, body); + } + { // if + var relooper = new Binaryen.Relooper(); + var block0 = relooper.addBlock(makeCallCheck(0)); + var block1 = relooper.addBlock(makeCallCheck(1)); + var block2 = relooper.addBlock(makeCallCheck(2)); + relooper.addBranch(block0, block1, makeInt32(55), null); + relooper.addBranch(block0, block2, null, null); + relooper.addBranch(block1, block2, null, null); + var body = relooper.renderAndDispose(block0, 0, module); + module.addFunction("if", v, localTypes, body); + } + { // if + code + var relooper = new Binaryen.Relooper(); + var block0 = relooper.addBlock(makeCallCheck(0)); + var block1 = relooper.addBlock(makeCallCheck(1)); + var block2 = relooper.addBlock(makeCallCheck(2)); + temp = makeDroppedInt32(-1); + relooper.addBranch(block0, block1, makeInt32(55), temp); + relooper.addBranch(block0, block2, null, makeDroppedInt32(-2)); + relooper.addBranch(block1, block2, null, makeDroppedInt32(-3)); + var body = relooper.renderAndDispose(block0, 0, module); + module.addFunction("if-plus-code", v, localTypes, body); + } + { // if-else + var relooper = new Binaryen.Relooper(); + var block0 = relooper.addBlock(makeCallCheck(0)); + var block1 = relooper.addBlock(makeCallCheck(1)); + var block2 = relooper.addBlock(makeCallCheck(2)); + var block3 = relooper.addBlock(makeCallCheck(3)); + relooper.addBranch(block0, block1, makeInt32(55), null); + relooper.addBranch(block0, block2, null, null); + relooper.addBranch(block1, block3, null, null); + relooper.addBranch(block2, block3, null, null); + var body = relooper.renderAndDispose(block0, 0, module); + module.addFunction("if-else", v, localTypes, body); + } + { // loop+tail + var relooper = new Binaryen.Relooper(); + var block0 = relooper.addBlock(makeCallCheck(0)); + var block1 = relooper.addBlock(makeCallCheck(1)); + var block2 = relooper.addBlock(makeCallCheck(2)); + relooper.addBranch(block0, block1, null, null); + relooper.addBranch(block1, block0, makeInt32(10), null); + relooper.addBranch(block1, block2, null, null); + var body = relooper.renderAndDispose(block0, 0, module); + module.addFunction("loop-tail", v, localTypes, body); + } + { // nontrivial loop + phi to head + var relooper = new Binaryen.Relooper(); + var block0 = relooper.addBlock(makeCallCheck(0)); + var block1 = relooper.addBlock(makeCallCheck(1)); + var block2 = relooper.addBlock(makeCallCheck(2)); + var block3 = relooper.addBlock(makeCallCheck(3)); + var block4 = relooper.addBlock(makeCallCheck(4)); + var block5 = relooper.addBlock(makeCallCheck(5)); + var block6 = relooper.addBlock(makeCallCheck(6)); + relooper.addBranch(block0, block1, null, makeDroppedInt32(10)); + relooper.addBranch(block1, block2, makeInt32(-2), null); + relooper.addBranch(block1, block6, null, makeDroppedInt32(20)); + relooper.addBranch(block2, block3, makeInt32(-6), null); + relooper.addBranch(block2, block1, null, makeDroppedInt32(30)); + relooper.addBranch(block3, block4, makeInt32(-10), null); + relooper.addBranch(block3, block5, null, null); + relooper.addBranch(block4, block5, null, null); + relooper.addBranch(block5, block6, null, makeDroppedInt32(40)); + var body = relooper.renderAndDispose(block0, 0, module); + module.addFunction("nontrivial-loop-plus-phi-to-head", v, localTypes, body); + } + { // switch + var relooper = new Binaryen.Relooper(); + temp = makeInt32(-99); + var block0 = relooper.addBlockWithSwitch(makeCallCheck(0), temp); + var block1 = relooper.addBlock(makeCallCheck(1)); + var block2 = relooper.addBlock(makeCallCheck(2)); + var block3 = relooper.addBlock(makeCallCheck(3)); + relooper.addBranchForSwitch(block0, block1, [ 2, 5 ]); + relooper.addBranchForSwitch(block0, block2, [4], makeDroppedInt32(55)); + relooper.addBranchForSwitch(block0, block3, [], null); + var body = relooper.renderAndDispose(block0, 0, module); + module.addFunction("switch", v, localTypes, body); + } + { // duff's device + var relooper = new Binaryen.Relooper(); + var block0 = relooper.addBlock(makeCallCheck(0)); + var block1 = relooper.addBlock(makeCallCheck(1)); + var block2 = relooper.addBlock(makeCallCheck(2)); + relooper.addBranch(block0, block1, makeInt32(10), null); + relooper.addBranch(block0, block2, null, null); + relooper.addBranch(block1, block2, null, null); + relooper.addBranch(block2, block1, null, null); + var body = relooper.renderAndDispose(block0, 3, module); // use $3 as the helper var + module.addFunction("duffs-device", v, [ Binaryen.i32, Binaryen.i32, Binaryen.i64, Binaryen.i32, Binaryen.f32, Binaryen.f64, Binaryen.i32 ], body); + } + + var i = module.addFunctionType("i", Binaryen.i32, []); + + { // return in a block + var relooper = new Binaryen.Relooper(); + var list = module.block("the-list", [ makeCallCheck(42), module.return(makeInt32(1337)) ]); + var block = relooper.addBlock(list); + var body = relooper.renderAndDispose(block, 0, module); + module.addFunction("return", i, localTypes, body); + } + + console.log("raw:"); + console.log(module.emitText()); + + assert(module.validate()); + + module.runPasses(["precompute"]); + + assert(module.validate()); + + module.optimize(); + + assert(module.validate()); + + console.log("optimized:"); + console.log(module.emitText()); + + module.dispose(); +} + +function test_binaries() { + var buffer, size; + + { // create a module and write it to binary + module = new Binaryen.Module(); + var iii = module.addFunctionType("iii", Binaryen.i32, [ Binaryen.i32, Binaryen.i32 ]); + var x = module.getLocal(0, Binaryen.i32), + y = module.getLocal(1, Binaryen.i32); + var add = module.i32.add(x, y); + var adder = module.addFunction("adder", iii, [], add); + buffer = module.emitBinary(); + size = buffer.length; // write out the module + module.dispose(); + } + + assert(size > 0); + assert(size < 512); // this is a tiny module + + // read the module from the binary + module = Binaryen.readBinary(buffer, size); + + // validate, print, and free + assert(module.validate()); + console.log("module loaded from binary form:"); + console.log(module.emitText()); + module.dispose(); +} + +function test_interpret() { + // create a simple module with a start method that prints a number, and interpret it, printing that number. + module = new Binaryen.Module(); + + var vi = module.addFunctionType("vi", Binaryen.None, [ Binaryen.i32 ]); + module.addImport("print-i32", "spectest", "print", vi); + + var v = module.addFunctionType("v", Binaryen.None, []); + call = module.callImport("print-i32", [ makeInt32(1234) ], Binaryen.None); + var starter = module.addFunction("starter", v, [], call); + module.setStart(starter); + + console.log(module.emitText()); + assert(module.validate()); + module.interpret(); + module.dispose(); +} + +function test_nonvalid() { + // create a module that fails to validate + module = new Binaryen.Module(); + + var v = module.addFunctionType("v", Binaryen.None, []); + var func = module.addFunction("func", v, [ Binaryen.i32 ], + module.setLocal(0, makeInt64(1234, 0)) // wrong type! + ); + + console.log(module.emitText()); + console.log("validation: " + module.validate()); + + module.dispose(); +} + +function test_tracing() { + Binaryen.setAPITracing(1); + test_core(); + test_relooper(); + Binaryen.setAPITracing(0); +} + +function test_parsing() { + var text; + + // create a module and write it to text + module = new Binaryen.Module(); + var iii = module.addFunctionType("iii", Binaryen.i32, [ Binaryen.i32, Binaryen.i32 ]); + var x = module.getLocal(0, Binaryen.i32), + y = module.getLocal(1, Binaryen.i32); + var add = module.i32.add(x, y); + var adder = module.addFunction("adder", iii, [], add); + text = module.emitText(); + module.dispose(); + module = null; + console.log('test_parsing text:\n' + text); + + text = text.replace('adder', 'ADD_ER'); + + var module2 = Binaryen.parseText(text); + assert(module2.validate()); + console.log("module loaded from text form:"); + console.log(module2.emitText()); + module2.dispose(); +} + +function main() { + test_types(); + test_ids(); + test_core(); + test_relooper(); + test_binaries(); + test_interpret(); + test_nonvalid(); + test_tracing(); + test_parsing(); +} + +main(); + diff --git a/src/binaryen/test/binaryen.js/kitchen-sink.js.txt b/src/binaryen/test/binaryen.js/kitchen-sink.js.txt new file mode 100644 index 0000000000..f585d28d8d --- /dev/null +++ b/src/binaryen/test/binaryen.js/kitchen-sink.js.txt @@ -0,0 +1,2989 @@ +BinaryenNone: 0 +BinaryenInt32: 1 +BinaryenInt64: 2 +BinaryenFloat32: 3 +BinaryenFloat64: 4 +BinaryenInvalidId: 0 +BinaryenBlockId: 1 +BinaryenIfId: 2 +BinaryenLoopId: 3 +BinaryenBreakId: 4 +BinaryenSwitchId: 5 +BinaryenCallId: 6 +BinaryenCallImportId: 7 +BinaryenCallIndirectId: 8 +BinaryenGetLocalId: 9 +BinaryenSetLocalId: 10 +BinaryenGetGlobalId: 11 +BinaryenSetGlobalId: 12 +BinaryenLoadId: 13 +BinaryenStoreId: 14 +BinaryenConstId: 15 +BinaryenUnaryId: 16 +BinaryenBinaryId: 17 +BinaryenSelectId: 18 +BinaryenDropId: 19 +BinaryenReturnId: 20 +BinaryenHostId: 21 +BinaryenNopId: 22 +BinaryenUnreachableId: 23 +BinaryenAtomicCmpxchgId: 24 +BinaryenAtomicRMWId: 25 +BinaryenAtomicWaitId: 26 +BinaryenAtomicWakeId: 27 +getExpressionId=16 +getExpressionType=3 +(f32.neg + (f32.const -33.61199951171875) +) + +5 +{"low":6,"high":7} +8.5 +9.5 +(module + (type $iiIfF (func (param i32 i64 f32 f64) (result i32))) + (type $fiF (func (param i32 f64) (result f32))) + (type $v (func)) + (type $3 (func)) + (import "module" "base" (func $an-imported (param i32 f64) (result f32))) + (table 1 1 anyfunc) + (elem (i32.const 0) "$kitchen()sinker") + (memory $0 1 256) + (data (i32.const 10) "hello, world") + (export "kitchen_sinker" (func "$kitchen()sinker")) + (export "mem" (memory $0)) + (start $starter) + (func "$kitchen()sinker" (; 1 ;) (type $iiIfF) (param $0 i32) (param $1 i64) (param $2 f32) (param $3 f64) (result i32) + (local $4 i32) + (block $the-body (result i32) + (block $the-nothing + (drop + (block $the-value (result i32) + (drop + (i32.clz + (i32.const -10) + ) + ) + (drop + (i64.ctz + (i64.const -22) + ) + ) + (drop + (i32.popcnt + (i32.const -10) + ) + ) + (drop + (f32.neg + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.abs + (f64.const -9005.841) + ) + ) + (drop + (f32.ceil + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.floor + (f64.const -9005.841) + ) + ) + (drop + (f32.trunc + (f32.const -33.61199951171875) + ) + ) + (drop + (f32.nearest + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.sqrt + (f64.const -9005.841) + ) + ) + (drop + (i32.eqz + (i32.const -10) + ) + ) + (drop + (i64.extend_s/i32 + (i32.const -10) + ) + ) + (drop + (i64.extend_u/i32 + (i32.const -10) + ) + ) + (drop + (i32.wrap/i64 + (i64.const -22) + ) + ) + (drop + (i32.trunc_s/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.trunc_s/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i32.trunc_u/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.trunc_u/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i32.trunc_s/f64 + (f64.const -9005.841) + ) + ) + (drop + (i64.trunc_s/f64 + (f64.const -9005.841) + ) + ) + (drop + (i32.trunc_u/f64 + (f64.const -9005.841) + ) + ) + (drop + (i64.trunc_u/f64 + (f64.const -9005.841) + ) + ) + (drop + (i32.reinterpret/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.reinterpret/f64 + (f64.const -9005.841) + ) + ) + (drop + (f32.convert_s/i32 + (i32.const -10) + ) + ) + (drop + (f64.convert_s/i32 + (i32.const -10) + ) + ) + (drop + (f32.convert_u/i32 + (i32.const -10) + ) + ) + (drop + (f64.convert_u/i32 + (i32.const -10) + ) + ) + (drop + (f32.convert_s/i64 + (i64.const -22) + ) + ) + (drop + (f64.convert_s/i64 + (i64.const -22) + ) + ) + (drop + (f32.convert_u/i64 + (i64.const -22) + ) + ) + (drop + (f64.convert_u/i64 + (i64.const -22) + ) + ) + (drop + (f64.promote/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (f32.demote/f64 + (f64.const -9005.841) + ) + ) + (drop + (f32.reinterpret/i32 + (i32.const -10) + ) + ) + (drop + (f64.reinterpret/i64 + (i64.const -22) + ) + ) + (drop + (i32.add + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (f64.sub + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (i32.div_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.div_u + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (i64.rem_s + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (i32.rem_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.and + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.or + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (i32.xor + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.shl + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (i64.shr_u + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (i32.shr_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.rotl + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.rotr + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (f32.div + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.copysign + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (f32.min + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.max + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (i32.eq + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (f32.ne + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (i32.lt_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.lt_u + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (i64.le_s + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (i32.le_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.gt_s + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (i32.gt_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.ge_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.ge_u + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (f32.lt + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.le + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (f64.gt + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (f32.ge + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (block + ) + (if + (i32.const 1) + (drop + (i32.const 2) + ) + (drop + (i32.const 3) + ) + ) + (if + (i32.const 4) + (drop + (i32.const 5) + ) + ) + (drop + (loop $in (result i32) + (i32.const 0) + ) + ) + (drop + (loop (result i32) + (i32.const 0) + ) + ) + (drop + (br_if $the-value + (i32.const 1) + (i32.const 0) + ) + ) + (br_if $the-nothing + (i32.const 2) + ) + (br $the-value + (i32.const 3) + ) + (br $the-nothing) + (br_table $the-value $the-value + (i32.const 1) + (i32.const 0) + ) + (br_table $the-nothing $the-nothing + (i32.const 2) + ) + (drop + (i32.eqz + (call "$kitchen()sinker" + (i32.const 13) + (i64.const 37) + (f32.const 1.2999999523162842) + (f64.const 3.7) + ) + ) + ) + (drop + (i32.eqz + (i32.trunc_s/f32 + (call $an-imported + (i32.const 13) + (f64.const 3.7) + ) + ) + ) + ) + (drop + (i32.eqz + (call_indirect (type $iiIfF) + (i32.const 13) + (i64.const 37) + (f32.const 1.2999999523162842) + (f64.const 3.7) + (i32.const 2449) + ) + ) + ) + (drop + (get_local $0) + ) + (set_local $0 + (i32.const 101) + ) + (drop + (tee_local $0 + (i32.const 102) + ) + ) + (drop + (i32.load + (i32.const 1) + ) + ) + (drop + (i64.load16_s offset=2 align=1 + (i32.const 8) + ) + ) + (drop + (f32.load + (i32.const 2) + ) + ) + (drop + (f64.load offset=2 + (i32.const 9) + ) + ) + (i32.store + (i32.const 10) + (i32.const 11) + ) + (i64.store offset=2 align=4 + (i32.const 110) + (i64.const 111) + ) + (drop + (select + (i32.const 3) + (i32.const 5) + (i32.const 1) + ) + ) + (return + (i32.const 1337) + ) + (nop) + (unreachable) + ) + ) + ) + (i32.const 42) + ) + ) + (func $starter (; 2 ;) (type $v) + (nop) + ) +) + +raw: +(module + (type $v (func)) + (type $vi (func (param i32))) + (type $i (func (result i32))) + (import "module" "check" (func $check (param i32))) + (memory $0 0) + (func $just-one-block (; 1 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 1337) + ) + ) + (func $two-blocks (; 2 ;) (type $v) + (local $0 i32) + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + ) + ) + (func $two-blocks-plus-code (; 3 ;) (type $v) + (local $0 i32) + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (drop + (i32.const 77) + ) + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + ) + ) + (func $loop (; 4 ;) (type $v) + (local $0 i32) + (loop $shape$0$continue + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + (block + (br $shape$0$continue) + ) + ) + ) + ) + (func $loop-plus-code (; 5 ;) (type $v) + (local $0 i32) + (loop $shape$0$continue + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (drop + (i32.const 33) + ) + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + (block + (drop + (i32.const -66) + ) + (br $shape$0$continue) + ) + ) + ) + ) + (func $split (; 6 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call $check + (i32.const 1) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + ) + (func $split-plus-code (; 7 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (drop + (i32.const 10) + ) + (block + (call $check + (i32.const 1) + ) + ) + ) + (block + (drop + (i32.const 20) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + ) + ) + (func $if (; 8 ;) (type $v) + (local $0 i32) + (block $block$3$break + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call $check + (i32.const 1) + ) + (block + (br $block$3$break) + ) + ) + (br $block$3$break) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (func $if-plus-code (; 9 ;) (type $v) + (local $0 i32) + (block $block$3$break + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (drop + (i32.const -1) + ) + (block + (call $check + (i32.const 1) + ) + (block + (drop + (i32.const -3) + ) + (br $block$3$break) + ) + ) + ) + (block + (drop + (i32.const -2) + ) + (br $block$3$break) + ) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (func $if-else (; 10 ;) (type $v) + (local $0 i32) + (block $block$4$break + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call $check + (i32.const 1) + ) + (block + (br $block$4$break) + ) + ) + (block + (call $check + (i32.const 2) + ) + (block + (br $block$4$break) + ) + ) + ) + ) + (block + (call $check + (i32.const 3) + ) + ) + ) + (func $loop-tail (; 11 ;) (type $v) + (local $0 i32) + (block $block$3$break + (loop $shape$0$continue + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + (if + (i32.const 10) + (br $shape$0$continue) + (br $block$3$break) + ) + ) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (func $nontrivial-loop-plus-phi-to-head (; 12 ;) (type $v) + (local $0 i32) + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (drop + (i32.const 10) + ) + (br $block$2$break) + ) + ) + (block + (block $block$7$break + (block $block$4$break + (loop $shape$1$continue + (block $block$3$break + (call $check + (i32.const 1) + ) + (if + (i32.const -2) + (br $block$3$break) + (block + (drop + (i32.const 20) + ) + (br $block$7$break) + ) + ) + ) + (block + (call $check + (i32.const 2) + ) + (if + (i32.const -6) + (br $block$4$break) + (block + (drop + (i32.const 30) + ) + (br $shape$1$continue) + ) + ) + ) + ) + ) + (block + (block $block$6$break + (call $check + (i32.const 3) + ) + (if + (i32.const -10) + (block + (call $check + (i32.const 4) + ) + (block + (br $block$6$break) + ) + ) + (br $block$6$break) + ) + ) + (block + (call $check + (i32.const 5) + ) + (block + (drop + (i32.const 40) + ) + (br $block$7$break) + ) + ) + ) + ) + (block + (call $check + (i32.const 6) + ) + ) + ) + ) + (func $switch (; 13 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 0) + ) + (block $switch$1$leave + (block $switch$1$default + (block $switch$1$case$3 + (block $switch$1$case$2 + (br_table $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$3 $switch$1$case$2 $switch$1$default + (i32.const -99) + ) + ) + (block + (block + (call $check + (i32.const 1) + ) + ) + ) + (br $switch$1$leave) + ) + (block + (drop + (i32.const 55) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (br $switch$1$leave) + ) + (block + (block + (call $check + (i32.const 3) + ) + ) + ) + (br $switch$1$leave) + ) + ) + (func $duffs-device (; 14 ;) (type $v) + (local $0 i32) + (local $1 i32) + (local $2 i64) + (local $3 i32) + (local $4 f32) + (local $5 f64) + (local $6 i32) + (block + (block $block$3$break + (block $block$2$break + (call $check + (i32.const 0) + ) + (if + (i32.const 10) + (block + (set_local $3 + (i32.const 2) + ) + (br $block$2$break) + ) + (block + (set_local $3 + (i32.const 3) + ) + (br $block$3$break) + ) + ) + ) + ) + ) + (loop $shape$1$continue + (if + (i32.eq + (get_local $3) + (i32.const 2) + ) + (block + (set_local $3 + (i32.const 0) + ) + (call $check + (i32.const 1) + ) + (block + (set_local $3 + (i32.const 3) + ) + (br $shape$1$continue) + ) + ) + (if + (i32.eq + (get_local $3) + (i32.const 3) + ) + (block + (set_local $3 + (i32.const 0) + ) + (call $check + (i32.const 2) + ) + (block + (set_local $3 + (i32.const 2) + ) + (br $shape$1$continue) + ) + ) + ) + ) + ) + ) + (func $return (; 15 ;) (type $i) (result i32) + (local $0 i32) + (block $the-list + (call $check + (i32.const 42) + ) + (return + (i32.const 1337) + ) + ) + ) +) + +optimized: +(module + (memory $0 0) +) + +module loaded from binary form: +(module + (type $0 (func (param i32 i32) (result i32))) + (memory $0 0) + (func $adder (; 0 ;) (type $0) (param $var$0 i32) (param $var$1 i32) (result i32) + (i32.add + (get_local $var$0) + (get_local $var$1) + ) + ) +) + +(module + (type $vi (func (param i32))) + (type $v (func)) + (import "spectest" "print" (func $print-i32 (param i32))) + (memory $0 0) + (start $starter) + (func $starter (; 1 ;) (type $v) + (call $print-i32 + (i32.const 1234) + ) + ) +) + +(i32.const 1234) +(module + (type $v (func)) + (memory $0 0) + (func $func (; 0 ;) (type $v) + (local $0 i32) + (set_local $0 + (i64.const 1234) + ) + ) +) + +[wasm-validator error in function $func] 1 != 2: set_local type must match function, on +[none] (set_local $0 + [i64] (i64.const 1234) +) +validation: 0 +// beginning a Binaryen API trace +#include +#include +#include "src/binaryen-c.h" +int main() { + std::map functionTypes; + std::map expressions; + std::map functions; + std::map relooperBlocks; + BinaryenModuleRef the_module = NULL; + RelooperRef the_relooper = NULL; + the_module = BinaryenModuleCreate(); + expressions[size_t(NULL)] = BinaryenExpressionRef(NULL); + expressions[1] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + expressions[2] = BinaryenConst(the_module, BinaryenLiteralInt64(2)); + expressions[3] = BinaryenConst(the_module, BinaryenLiteralFloat32(3.14)); + expressions[4] = BinaryenConst(the_module, BinaryenLiteralFloat64(2.1828)); + expressions[5] = BinaryenConst(the_module, BinaryenLiteralFloat32(NAN)); + expressions[6] = BinaryenConst(the_module, BinaryenLiteralFloat64(NAN)); + { + BinaryenType paramTypes[] = { 1, 2, 3, 4 }; + functionTypes[0] = BinaryenAddFunctionType(the_module, "iiIfF", 1, paramTypes, 4); + } + expressions[7] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + expressions[8] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + expressions[9] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + expressions[10] = BinaryenConst(the_module, BinaryenLiteralInt32(4)); + expressions[11] = BinaryenConst(the_module, BinaryenLiteralInt32(5)); + expressions[12] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[13] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + expressions[14] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[15] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + expressions[16] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + expressions[17] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + expressions[18] = BinaryenConst(the_module, BinaryenLiteralInt32(5)); + expressions[19] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + expressions[20] = BinaryenConst(the_module, BinaryenLiteralInt32(11)); + expressions[21] = BinaryenConst(the_module, BinaryenLiteralInt32(110)); + expressions[22] = BinaryenConst(the_module, BinaryenLiteralInt64(111)); + expressions[23] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[24] = BinaryenUnary(the_module, 0, expressions[23]); + expressions[25] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[26] = BinaryenUnary(the_module, 3, expressions[25]); + expressions[27] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[28] = BinaryenUnary(the_module, 4, expressions[27]); + expressions[29] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[30] = BinaryenUnary(the_module, 6, expressions[29]); + expressions[31] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[32] = BinaryenUnary(the_module, 9, expressions[31]); + expressions[33] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[34] = BinaryenUnary(the_module, 10, expressions[33]); + expressions[35] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[36] = BinaryenUnary(the_module, 13, expressions[35]); + expressions[37] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[38] = BinaryenUnary(the_module, 14, expressions[37]); + expressions[39] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[40] = BinaryenUnary(the_module, 16, expressions[39]); + expressions[41] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[42] = BinaryenUnary(the_module, 19, expressions[41]); + expressions[43] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[44] = BinaryenUnary(the_module, 20, expressions[43]); + expressions[45] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[46] = BinaryenUnary(the_module, 22, expressions[45]); + expressions[47] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[48] = BinaryenUnary(the_module, 23, expressions[47]); + expressions[49] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[50] = BinaryenUnary(the_module, 24, expressions[49]); + expressions[51] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[52] = BinaryenUnary(the_module, 25, expressions[51]); + expressions[53] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[54] = BinaryenUnary(the_module, 26, expressions[53]); + expressions[55] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[56] = BinaryenUnary(the_module, 27, expressions[55]); + expressions[57] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[58] = BinaryenUnary(the_module, 28, expressions[57]); + expressions[59] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[60] = BinaryenUnary(the_module, 29, expressions[59]); + expressions[61] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[62] = BinaryenUnary(the_module, 30, expressions[61]); + expressions[63] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[64] = BinaryenUnary(the_module, 31, expressions[63]); + expressions[65] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[66] = BinaryenUnary(the_module, 32, expressions[65]); + expressions[67] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[68] = BinaryenUnary(the_module, 33, expressions[67]); + expressions[69] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[70] = BinaryenUnary(the_module, 34, expressions[69]); + expressions[71] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[72] = BinaryenUnary(the_module, 35, expressions[71]); + expressions[73] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[74] = BinaryenUnary(the_module, 36, expressions[73]); + expressions[75] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[76] = BinaryenUnary(the_module, 37, expressions[75]); + expressions[77] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[78] = BinaryenUnary(the_module, 38, expressions[77]); + expressions[79] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[80] = BinaryenUnary(the_module, 39, expressions[79]); + expressions[81] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[82] = BinaryenUnary(the_module, 40, expressions[81]); + expressions[83] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[84] = BinaryenUnary(the_module, 41, expressions[83]); + expressions[85] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[86] = BinaryenUnary(the_module, 42, expressions[85]); + expressions[87] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[88] = BinaryenUnary(the_module, 43, expressions[87]); + expressions[89] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[90] = BinaryenUnary(the_module, 44, expressions[89]); + expressions[91] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[92] = BinaryenUnary(the_module, 45, expressions[91]); + expressions[93] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[94] = BinaryenUnary(the_module, 46, expressions[93]); + expressions[95] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[96] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[97] = BinaryenBinary(the_module, 0, expressions[95], expressions[96]); + expressions[98] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[99] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33)); + expressions[100] = BinaryenBinary(the_module, 64, expressions[98], expressions[99]); + expressions[101] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[102] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[103] = BinaryenBinary(the_module, 3, expressions[101], expressions[102]); + expressions[104] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274)); + expressions[105] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273)); + expressions[106] = BinaryenBinary(the_module, 29, expressions[104], expressions[105]); + expressions[107] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274)); + expressions[108] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273)); + expressions[109] = BinaryenBinary(the_module, 30, expressions[107], expressions[108]); + expressions[110] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[111] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[112] = BinaryenBinary(the_module, 6, expressions[110], expressions[111]); + expressions[113] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[114] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[115] = BinaryenBinary(the_module, 7, expressions[113], expressions[114]); + expressions[116] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274)); + expressions[117] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273)); + expressions[118] = BinaryenBinary(the_module, 33, expressions[116], expressions[117]); + expressions[119] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[120] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[121] = BinaryenBinary(the_module, 9, expressions[119], expressions[120]); + expressions[122] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274)); + expressions[123] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273)); + expressions[124] = BinaryenBinary(the_module, 35, expressions[122], expressions[123]); + expressions[125] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274)); + expressions[126] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273)); + expressions[127] = BinaryenBinary(the_module, 36, expressions[125], expressions[126]); + expressions[128] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[129] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[130] = BinaryenBinary(the_module, 12, expressions[128], expressions[129]); + expressions[131] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[132] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[133] = BinaryenBinary(the_module, 13, expressions[131], expressions[132]); + expressions[134] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274)); + expressions[135] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273)); + expressions[136] = BinaryenBinary(the_module, 39, expressions[134], expressions[135]); + expressions[137] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[138] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5)); + expressions[139] = BinaryenBinary(the_module, 53, expressions[137], expressions[138]); + expressions[140] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[141] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33)); + expressions[142] = BinaryenBinary(the_module, 67, expressions[140], expressions[141]); + expressions[143] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[144] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5)); + expressions[145] = BinaryenBinary(the_module, 55, expressions[143], expressions[144]); + expressions[146] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[147] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33)); + expressions[148] = BinaryenBinary(the_module, 69, expressions[146], expressions[147]); + expressions[149] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[150] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[151] = BinaryenBinary(the_module, 15, expressions[149], expressions[150]); + expressions[152] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[153] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5)); + expressions[154] = BinaryenBinary(the_module, 58, expressions[152], expressions[153]); + expressions[155] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[156] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[157] = BinaryenBinary(the_module, 17, expressions[155], expressions[156]); + expressions[158] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274)); + expressions[159] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273)); + expressions[160] = BinaryenBinary(the_module, 43, expressions[158], expressions[159]); + expressions[161] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274)); + expressions[162] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273)); + expressions[163] = BinaryenBinary(the_module, 44, expressions[161], expressions[162]); + expressions[164] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[165] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[166] = BinaryenBinary(the_module, 20, expressions[164], expressions[165]); + expressions[167] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274)); + expressions[168] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273)); + expressions[169] = BinaryenBinary(the_module, 46, expressions[167], expressions[168]); + expressions[170] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[171] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[172] = BinaryenBinary(the_module, 22, expressions[170], expressions[171]); + expressions[173] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[174] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[175] = BinaryenBinary(the_module, 23, expressions[173], expressions[174]); + expressions[176] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274)); + expressions[177] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273)); + expressions[178] = BinaryenBinary(the_module, 49, expressions[176], expressions[177]); + expressions[179] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[180] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5)); + expressions[181] = BinaryenBinary(the_module, 59, expressions[179], expressions[180]); + expressions[182] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[183] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33)); + expressions[184] = BinaryenBinary(the_module, 73, expressions[182], expressions[183]); + expressions[185] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[186] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33)); + expressions[187] = BinaryenBinary(the_module, 74, expressions[185], expressions[186]); + expressions[188] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[189] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5)); + expressions[190] = BinaryenBinary(the_module, 62, expressions[188], expressions[189]); + { + BinaryenExpressionRef children[] = { 0 }; + expressions[191] = BinaryenBlock(the_module, NULL, children, 0, BinaryenUndefined()); + } + expressions[192] = BinaryenIf(the_module, expressions[7], expressions[8], expressions[9]); + expressions[193] = BinaryenIf(the_module, expressions[10], expressions[11], expressions[0]); + expressions[194] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[195] = BinaryenLoop(the_module, "in", expressions[194]); + expressions[196] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[197] = BinaryenLoop(the_module, NULL, expressions[196]); + expressions[198] = BinaryenBreak(the_module, "the-value", expressions[12], expressions[13]); + expressions[199] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + expressions[200] = BinaryenBreak(the_module, "the-nothing", expressions[199], expressions[0]); + expressions[201] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + expressions[202] = BinaryenBreak(the_module, "the-value", expressions[0], expressions[201]); + expressions[203] = BinaryenBreak(the_module, "the-nothing", expressions[0], expressions[0]); + { + const char* names[] = { "the-value" }; + expressions[204] = BinaryenSwitch(the_module, names, 1, "the-value", expressions[14], expressions[15]); + } + expressions[205] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + const char* names[] = { "the-nothing" }; + expressions[206] = BinaryenSwitch(the_module, names, 1, "the-nothing", expressions[205], expressions[0]); + } + expressions[207] = BinaryenConst(the_module, BinaryenLiteralInt32(13)); + expressions[208] = BinaryenConst(the_module, BinaryenLiteralInt64(37)); + expressions[209] = BinaryenConst(the_module, BinaryenLiteralFloat32(1.3)); + expressions[210] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7)); + { + BinaryenExpressionRef operands[] = { expressions[207], expressions[208], expressions[209], expressions[210] }; + expressions[211] = BinaryenCall(the_module, "kitchen()sinker", operands, 4, 1); + } + expressions[212] = BinaryenUnary(the_module, 20, expressions[211]); + expressions[213] = BinaryenConst(the_module, BinaryenLiteralInt32(13)); + expressions[214] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7)); + { + BinaryenExpressionRef operands[] = { expressions[213], expressions[214] }; + expressions[215] = BinaryenCallImport(the_module, "an-imported", operands, 2, 3); + } + expressions[216] = BinaryenUnary(the_module, 25, expressions[215]); + expressions[217] = BinaryenUnary(the_module, 20, expressions[216]); + expressions[218] = BinaryenConst(the_module, BinaryenLiteralInt32(2449)); + expressions[219] = BinaryenConst(the_module, BinaryenLiteralInt32(13)); + expressions[220] = BinaryenConst(the_module, BinaryenLiteralInt64(37)); + expressions[221] = BinaryenConst(the_module, BinaryenLiteralFloat32(1.3)); + expressions[222] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7)); + { + BinaryenExpressionRef operands[] = { expressions[219], expressions[220], expressions[221], expressions[222] }; + expressions[223] = BinaryenCallIndirect(the_module, expressions[218], operands, 4, "iiIfF"); + } + expressions[224] = BinaryenUnary(the_module, 20, expressions[223]); + expressions[225] = BinaryenGetLocal(the_module, 0, 1); + expressions[226] = BinaryenDrop(the_module, expressions[225]); + expressions[227] = BinaryenConst(the_module, BinaryenLiteralInt32(101)); + expressions[228] = BinaryenSetLocal(the_module, 0, expressions[227]); + expressions[229] = BinaryenConst(the_module, BinaryenLiteralInt32(102)); + expressions[230] = BinaryenTeeLocal(the_module, 0, expressions[229]); + expressions[231] = BinaryenDrop(the_module, expressions[230]); + expressions[232] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + expressions[233] = BinaryenLoad(the_module, 4, 1, 0, 0, 1, expressions[232]); + expressions[234] = BinaryenConst(the_module, BinaryenLiteralInt32(8)); + expressions[235] = BinaryenLoad(the_module, 2, 1, 2, 1, 2, expressions[234]); + expressions[236] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + expressions[237] = BinaryenLoad(the_module, 4, 1, 0, 0, 3, expressions[236]); + expressions[238] = BinaryenConst(the_module, BinaryenLiteralInt32(9)); + expressions[239] = BinaryenLoad(the_module, 8, 1, 2, 8, 4, expressions[238]); + expressions[240] = BinaryenStore(the_module, 4, 0, 0, expressions[19], expressions[20], 1); + expressions[241] = BinaryenStore(the_module, 8, 2, 4, expressions[21], expressions[22], 2); + expressions[242] = BinaryenSelect(the_module, expressions[16], expressions[17], expressions[18]); + expressions[243] = BinaryenConst(the_module, BinaryenLiteralInt32(1337)); + expressions[244] = BinaryenReturn(the_module, expressions[243]); + expressions[245] = BinaryenNop(the_module); + expressions[246] = BinaryenUnreachable(the_module); + BinaryenExpressionGetId(expressions[30]); +getExpressionId=16 + BinaryenExpressionGetType(expressions[30]); +getExpressionType=3 + BinaryenExpressionPrint(expressions[30]); +(f32.neg + (f32.const -33.61199951171875) +) + + expressions[247] = BinaryenConst(the_module, BinaryenLiteralInt32(5)); + BinaryenConstGetValueI32(expressions[247]); +5 + expressions[248] = BinaryenConst(the_module, BinaryenLiteralInt64(30064771078)); + BinaryenConstGetValueI64Low(expressions[248]); + BinaryenConstGetValueI64High(expressions[248]); +{"low":6,"high":7} + expressions[249] = BinaryenConst(the_module, BinaryenLiteralFloat32(8.5)); + BinaryenConstGetValueF32(expressions[249]); +8.5 + expressions[250] = BinaryenConst(the_module, BinaryenLiteralFloat64(9.5)); + BinaryenConstGetValueF64(expressions[250]); +9.5 + { + BinaryenExpressionRef children[] = { expressions[24], expressions[26], expressions[28], expressions[30], expressions[32], expressions[34], expressions[36], expressions[38], expressions[40], expressions[42], expressions[44], expressions[46], expressions[48], expressions[50], expressions[52], expressions[54], expressions[56], expressions[58], expressions[60], expressions[62], expressions[64], expressions[66], expressions[68], expressions[70], expressions[72], expressions[74], expressions[76], expressions[78], expressions[80], expressions[82], expressions[84], expressions[86], expressions[88], expressions[90], expressions[92], expressions[94], expressions[97], expressions[100], expressions[103], expressions[106], expressions[109], expressions[112], expressions[115], expressions[118], expressions[121], expressions[124], expressions[127], expressions[130], expressions[133], expressions[136], expressions[139], expressions[142], expressions[145], expressions[148], expressions[151], expressions[154], expressions[157], expressions[160], expressions[163], expressions[166], expressions[169], expressions[172], expressions[175], expressions[178], expressions[181], expressions[184], expressions[187], expressions[190], expressions[191], expressions[192], expressions[193], expressions[195], expressions[197], expressions[198], expressions[200], expressions[202], expressions[203], expressions[204], expressions[206], expressions[212], expressions[217], expressions[224], expressions[226], expressions[228], expressions[231], expressions[233], expressions[235], expressions[237], expressions[239], expressions[240], expressions[241], expressions[242], expressions[244], expressions[245], expressions[246] }; + expressions[251] = BinaryenBlock(the_module, "the-value", children, 95, BinaryenUndefined()); + } + expressions[252] = BinaryenDrop(the_module, expressions[251]); + { + BinaryenExpressionRef children[] = { expressions[252] }; + expressions[253] = BinaryenBlock(the_module, "the-nothing", children, 1, BinaryenUndefined()); + } + expressions[254] = BinaryenConst(the_module, BinaryenLiteralInt32(42)); + { + BinaryenExpressionRef children[] = { expressions[253], expressions[254] }; + expressions[255] = BinaryenBlock(the_module, "the-body", children, 2, BinaryenUndefined()); + } + { + BinaryenType varTypes[] = { 1 }; + functions[0] = BinaryenAddFunction(the_module, "kitchen()sinker", functionTypes[0], varTypes, 1, expressions[255]); + } + { + BinaryenType paramTypes[] = { 1, 4 }; + functionTypes[1] = BinaryenAddFunctionType(the_module, "fiF", 3, paramTypes, 2); + } + BinaryenAddImport(the_module, "an-imported", "module", "base", functionTypes[1]); + BinaryenAddExport(the_module, "kitchen()sinker", "kitchen_sinker"); + { + BinaryenFunctionRef funcs[] = { functions[0] }; + BinaryenSetFunctionTable(the_module, funcs, 1); + } + expressions[256] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + { + const char segment0[] = { 104, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100 }; + const char* segments[] = { segment0 }; + BinaryenExpressionRef segmentOffsets[] = { expressions[256] }; + BinaryenIndex segmentSizes[] = { 12 }; + BinaryenSetMemory(the_module, 1, 256, "mem", segments, segmentOffsets, segmentSizes, 1); + } + { + BinaryenType paramTypes[] = { 0 }; + functionTypes[2] = BinaryenAddFunctionType(the_module, "v", 0, paramTypes, 0); + } + expressions[257] = BinaryenNop(the_module); + { + BinaryenType varTypes[] = { 0 }; + functions[1] = BinaryenAddFunction(the_module, "starter", functionTypes[2], varTypes, 0, expressions[257]); + } + BinaryenSetStart(the_module, functions[1]); + { + BinaryenType paramTypes[] = { 0 }; + functionTypes[3] = BinaryenAddFunctionType(the_module, NULL, 0, paramTypes, 0); + } + BinaryenModuleAutoDrop(the_module); + BinaryenModuleValidate(the_module); + BinaryenModulePrint(the_module); +(module + (type $iiIfF (func (param i32 i64 f32 f64) (result i32))) + (type $fiF (func (param i32 f64) (result f32))) + (type $v (func)) + (type $3 (func)) + (import "module" "base" (func $an-imported (param i32 f64) (result f32))) + (table 1 1 anyfunc) + (elem (i32.const 0) "$kitchen()sinker") + (memory $0 1 256) + (data (i32.const 10) "hello, world") + (export "kitchen_sinker" (func "$kitchen()sinker")) + (export "mem" (memory $0)) + (start $starter) + (func "$kitchen()sinker" (; 1 ;) (type $iiIfF) (param $0 i32) (param $1 i64) (param $2 f32) (param $3 f64) (result i32) + (local $4 i32) + (block $the-body (result i32) + (block $the-nothing + (drop + (block $the-value (result i32) + (drop + (i32.clz + (i32.const -10) + ) + ) + (drop + (i64.ctz + (i64.const -22) + ) + ) + (drop + (i32.popcnt + (i32.const -10) + ) + ) + (drop + (f32.neg + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.abs + (f64.const -9005.841) + ) + ) + (drop + (f32.ceil + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.floor + (f64.const -9005.841) + ) + ) + (drop + (f32.trunc + (f32.const -33.61199951171875) + ) + ) + (drop + (f32.nearest + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.sqrt + (f64.const -9005.841) + ) + ) + (drop + (i32.eqz + (i32.const -10) + ) + ) + (drop + (i64.extend_s/i32 + (i32.const -10) + ) + ) + (drop + (i64.extend_u/i32 + (i32.const -10) + ) + ) + (drop + (i32.wrap/i64 + (i64.const -22) + ) + ) + (drop + (i32.trunc_s/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.trunc_s/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i32.trunc_u/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.trunc_u/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i32.trunc_s/f64 + (f64.const -9005.841) + ) + ) + (drop + (i64.trunc_s/f64 + (f64.const -9005.841) + ) + ) + (drop + (i32.trunc_u/f64 + (f64.const -9005.841) + ) + ) + (drop + (i64.trunc_u/f64 + (f64.const -9005.841) + ) + ) + (drop + (i32.reinterpret/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.reinterpret/f64 + (f64.const -9005.841) + ) + ) + (drop + (f32.convert_s/i32 + (i32.const -10) + ) + ) + (drop + (f64.convert_s/i32 + (i32.const -10) + ) + ) + (drop + (f32.convert_u/i32 + (i32.const -10) + ) + ) + (drop + (f64.convert_u/i32 + (i32.const -10) + ) + ) + (drop + (f32.convert_s/i64 + (i64.const -22) + ) + ) + (drop + (f64.convert_s/i64 + (i64.const -22) + ) + ) + (drop + (f32.convert_u/i64 + (i64.const -22) + ) + ) + (drop + (f64.convert_u/i64 + (i64.const -22) + ) + ) + (drop + (f64.promote/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (f32.demote/f64 + (f64.const -9005.841) + ) + ) + (drop + (f32.reinterpret/i32 + (i32.const -10) + ) + ) + (drop + (f64.reinterpret/i64 + (i64.const -22) + ) + ) + (drop + (i32.add + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (f64.sub + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (i32.div_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.div_u + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (i64.rem_s + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (i32.rem_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.and + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.or + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (i32.xor + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.shl + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (i64.shr_u + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (i32.shr_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.rotl + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.rotr + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (f32.div + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.copysign + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (f32.min + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.max + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (i32.eq + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (f32.ne + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (i32.lt_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.lt_u + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (i64.le_s + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (i32.le_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.gt_s + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (i32.gt_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.ge_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.ge_u + (i64.const 4294967274) + (i64.const 4294967273) + ) + ) + (drop + (f32.lt + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.le + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (f64.gt + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (f32.ge + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (block + ) + (if + (i32.const 1) + (drop + (i32.const 2) + ) + (drop + (i32.const 3) + ) + ) + (if + (i32.const 4) + (drop + (i32.const 5) + ) + ) + (drop + (loop $in (result i32) + (i32.const 0) + ) + ) + (drop + (loop (result i32) + (i32.const 0) + ) + ) + (drop + (br_if $the-value + (i32.const 1) + (i32.const 0) + ) + ) + (br_if $the-nothing + (i32.const 2) + ) + (br $the-value + (i32.const 3) + ) + (br $the-nothing) + (br_table $the-value $the-value + (i32.const 1) + (i32.const 0) + ) + (br_table $the-nothing $the-nothing + (i32.const 2) + ) + (drop + (i32.eqz + (call "$kitchen()sinker" + (i32.const 13) + (i64.const 37) + (f32.const 1.2999999523162842) + (f64.const 3.7) + ) + ) + ) + (drop + (i32.eqz + (i32.trunc_s/f32 + (call $an-imported + (i32.const 13) + (f64.const 3.7) + ) + ) + ) + ) + (drop + (i32.eqz + (call_indirect (type $iiIfF) + (i32.const 13) + (i64.const 37) + (f32.const 1.2999999523162842) + (f64.const 3.7) + (i32.const 2449) + ) + ) + ) + (drop + (get_local $0) + ) + (set_local $0 + (i32.const 101) + ) + (drop + (tee_local $0 + (i32.const 102) + ) + ) + (drop + (i32.load + (i32.const 1) + ) + ) + (drop + (i64.load16_s offset=2 align=1 + (i32.const 8) + ) + ) + (drop + (f32.load + (i32.const 2) + ) + ) + (drop + (f64.load offset=2 + (i32.const 9) + ) + ) + (i32.store + (i32.const 10) + (i32.const 11) + ) + (i64.store offset=2 align=4 + (i32.const 110) + (i64.const 111) + ) + (drop + (select + (i32.const 3) + (i32.const 5) + (i32.const 1) + ) + ) + (return + (i32.const 1337) + ) + (nop) + (unreachable) + ) + ) + ) + (i32.const 42) + ) + ) + (func $starter (; 2 ;) (type $v) + (nop) + ) +) + + BinaryenModuleDispose(the_module); + functionTypes.clear(); + expressions.clear(); + functions.clear(); + relooperBlocks.clear(); + the_module = BinaryenModuleCreate(); + expressions[size_t(NULL)] = BinaryenExpressionRef(NULL); + { + BinaryenType paramTypes[] = { 0 }; + functionTypes[0] = BinaryenAddFunctionType(the_module, "v", 0, paramTypes, 0); + } + { + BinaryenType paramTypes[] = { 1 }; + functionTypes[1] = BinaryenAddFunctionType(the_module, "vi", 0, paramTypes, 1); + } + BinaryenAddImport(the_module, "check", "module", "check", functionTypes[1]); + the_relooper = RelooperCreate(); + expressions[1] = BinaryenConst(the_module, BinaryenLiteralInt32(1337)); + { + BinaryenExpressionRef operands[] = { expressions[1] }; + expressions[2] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[2]); + expressions[3] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[0] = BinaryenAddFunction(the_module, "just-one-block", functionTypes[0], varTypes, 1, expressions[3]); + } + the_relooper = RelooperCreate(); + expressions[4] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[4] }; + expressions[5] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[5]); + expressions[6] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[6] }; + expressions[7] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[7]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); + expressions[8] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[1] = BinaryenAddFunction(the_module, "two-blocks", functionTypes[0], varTypes, 1, expressions[8]); + } + the_relooper = RelooperCreate(); + expressions[9] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[9] }; + expressions[10] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[10]); + expressions[11] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[11] }; + expressions[12] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[12]); + expressions[13] = BinaryenConst(the_module, BinaryenLiteralInt32(77)); + expressions[14] = BinaryenDrop(the_module, expressions[13]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[14]); + expressions[15] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[2] = BinaryenAddFunction(the_module, "two-blocks-plus-code", functionTypes[0], varTypes, 1, expressions[15]); + } + the_relooper = RelooperCreate(); + expressions[16] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[16] }; + expressions[17] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[17]); + expressions[18] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[18] }; + expressions[19] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[19]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[0]); + expressions[20] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[3] = BinaryenAddFunction(the_module, "loop", functionTypes[0], varTypes, 1, expressions[20]); + } + the_relooper = RelooperCreate(); + expressions[21] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[21] }; + expressions[22] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[22]); + expressions[23] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[23] }; + expressions[24] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[24]); + expressions[25] = BinaryenConst(the_module, BinaryenLiteralInt32(33)); + expressions[26] = BinaryenDrop(the_module, expressions[25]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[26]); + expressions[27] = BinaryenConst(the_module, BinaryenLiteralInt32(-66)); + expressions[28] = BinaryenDrop(the_module, expressions[27]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[28]); + expressions[29] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[4] = BinaryenAddFunction(the_module, "loop-plus-code", functionTypes[0], varTypes, 1, expressions[29]); + } + the_relooper = RelooperCreate(); + expressions[30] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[30] }; + expressions[31] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[31]); + expressions[32] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[32] }; + expressions[33] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[33]); + expressions[34] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[34] }; + expressions[35] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[35]); + expressions[36] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[36], expressions[0]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); + expressions[37] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[5] = BinaryenAddFunction(the_module, "split", functionTypes[0], varTypes, 1, expressions[37]); + } + the_relooper = RelooperCreate(); + expressions[38] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[38] }; + expressions[39] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[39]); + expressions[40] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[40] }; + expressions[41] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[41]); + expressions[42] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[42] }; + expressions[43] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[43]); + expressions[44] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + expressions[45] = BinaryenDrop(the_module, expressions[44]); + expressions[46] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[46], expressions[45]); + expressions[47] = BinaryenConst(the_module, BinaryenLiteralInt32(20)); + expressions[48] = BinaryenDrop(the_module, expressions[47]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[48]); + expressions[49] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[6] = BinaryenAddFunction(the_module, "split-plus-code", functionTypes[0], varTypes, 1, expressions[49]); + } + the_relooper = RelooperCreate(); + expressions[50] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[50] }; + expressions[51] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[51]); + expressions[52] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[52] }; + expressions[53] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[53]); + expressions[54] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[54] }; + expressions[55] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[55]); + expressions[56] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[56], expressions[0]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[0], expressions[0]); + expressions[57] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[7] = BinaryenAddFunction(the_module, "if", functionTypes[0], varTypes, 1, expressions[57]); + } + the_relooper = RelooperCreate(); + expressions[58] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[58] }; + expressions[59] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[59]); + expressions[60] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[60] }; + expressions[61] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[61]); + expressions[62] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[62] }; + expressions[63] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[63]); + expressions[64] = BinaryenConst(the_module, BinaryenLiteralInt32(-1)); + expressions[65] = BinaryenDrop(the_module, expressions[64]); + expressions[66] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[66], expressions[65]); + expressions[67] = BinaryenConst(the_module, BinaryenLiteralInt32(-2)); + expressions[68] = BinaryenDrop(the_module, expressions[67]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[68]); + expressions[69] = BinaryenConst(the_module, BinaryenLiteralInt32(-3)); + expressions[70] = BinaryenDrop(the_module, expressions[69]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[0], expressions[70]); + expressions[71] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[8] = BinaryenAddFunction(the_module, "if-plus-code", functionTypes[0], varTypes, 1, expressions[71]); + } + the_relooper = RelooperCreate(); + expressions[72] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[72] }; + expressions[73] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[73]); + expressions[74] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[74] }; + expressions[75] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[75]); + expressions[76] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[76] }; + expressions[77] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[77]); + expressions[78] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + { + BinaryenExpressionRef operands[] = { expressions[78] }; + expressions[79] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[79]); + expressions[80] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[80], expressions[0]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[3], expressions[0], expressions[0]); + RelooperAddBranch(relooperBlocks[2], relooperBlocks[3], expressions[0], expressions[0]); + expressions[81] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[9] = BinaryenAddFunction(the_module, "if-else", functionTypes[0], varTypes, 1, expressions[81]); + } + the_relooper = RelooperCreate(); + expressions[82] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[82] }; + expressions[83] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[83]); + expressions[84] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[84] }; + expressions[85] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[85]); + expressions[86] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[86] }; + expressions[87] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[87]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); + expressions[88] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[88], expressions[0]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[0], expressions[0]); + expressions[89] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[10] = BinaryenAddFunction(the_module, "loop-tail", functionTypes[0], varTypes, 1, expressions[89]); + } + the_relooper = RelooperCreate(); + expressions[90] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[90] }; + expressions[91] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[91]); + expressions[92] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[92] }; + expressions[93] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[93]); + expressions[94] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[94] }; + expressions[95] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[95]); + expressions[96] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + { + BinaryenExpressionRef operands[] = { expressions[96] }; + expressions[97] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[97]); + expressions[98] = BinaryenConst(the_module, BinaryenLiteralInt32(4)); + { + BinaryenExpressionRef operands[] = { expressions[98] }; + expressions[99] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[4] = RelooperAddBlock(the_relooper, expressions[99]); + expressions[100] = BinaryenConst(the_module, BinaryenLiteralInt32(5)); + { + BinaryenExpressionRef operands[] = { expressions[100] }; + expressions[101] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[5] = RelooperAddBlock(the_relooper, expressions[101]); + expressions[102] = BinaryenConst(the_module, BinaryenLiteralInt32(6)); + { + BinaryenExpressionRef operands[] = { expressions[102] }; + expressions[103] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[6] = RelooperAddBlock(the_relooper, expressions[103]); + expressions[104] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + expressions[105] = BinaryenDrop(the_module, expressions[104]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[105]); + expressions[106] = BinaryenConst(the_module, BinaryenLiteralInt32(-2)); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[106], expressions[0]); + expressions[107] = BinaryenConst(the_module, BinaryenLiteralInt32(20)); + expressions[108] = BinaryenDrop(the_module, expressions[107]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[6], expressions[0], expressions[108]); + expressions[109] = BinaryenConst(the_module, BinaryenLiteralInt32(-6)); + RelooperAddBranch(relooperBlocks[2], relooperBlocks[3], expressions[109], expressions[0]); + expressions[110] = BinaryenConst(the_module, BinaryenLiteralInt32(30)); + expressions[111] = BinaryenDrop(the_module, expressions[110]); + RelooperAddBranch(relooperBlocks[2], relooperBlocks[1], expressions[0], expressions[111]); + expressions[112] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + RelooperAddBranch(relooperBlocks[3], relooperBlocks[4], expressions[112], expressions[0]); + RelooperAddBranch(relooperBlocks[3], relooperBlocks[5], expressions[0], expressions[0]); + RelooperAddBranch(relooperBlocks[4], relooperBlocks[5], expressions[0], expressions[0]); + expressions[113] = BinaryenConst(the_module, BinaryenLiteralInt32(40)); + expressions[114] = BinaryenDrop(the_module, expressions[113]); + RelooperAddBranch(relooperBlocks[5], relooperBlocks[6], expressions[0], expressions[114]); + expressions[115] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[11] = BinaryenAddFunction(the_module, "nontrivial-loop-plus-phi-to-head", functionTypes[0], varTypes, 1, expressions[115]); + } + the_relooper = RelooperCreate(); + expressions[116] = BinaryenConst(the_module, BinaryenLiteralInt32(-99)); + expressions[117] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[117] }; + expressions[118] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlockWithSwitch(the_relooper, expressions[118], expressions[116]); + expressions[119] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[119] }; + expressions[120] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[120]); + expressions[121] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[121] }; + expressions[122] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[122]); + expressions[123] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + { + BinaryenExpressionRef operands[] = { expressions[123] }; + expressions[124] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[124]); + { + BinaryenIndex indexes[] = { 2, 5 }; + RelooperAddBranchForSwitch(relooperBlocks[0], relooperBlocks[1], indexes, 2, expressions[0]); + } + expressions[125] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + expressions[126] = BinaryenDrop(the_module, expressions[125]); + { + BinaryenIndex indexes[] = { 4 }; + RelooperAddBranchForSwitch(relooperBlocks[0], relooperBlocks[2], indexes, 1, expressions[126]); + } + { + BinaryenIndex indexes[] = { 0 }; + RelooperAddBranchForSwitch(relooperBlocks[0], relooperBlocks[3], indexes, 0, expressions[0]); + } + expressions[127] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[12] = BinaryenAddFunction(the_module, "switch", functionTypes[0], varTypes, 1, expressions[127]); + } + the_relooper = RelooperCreate(); + expressions[128] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[128] }; + expressions[129] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[129]); + expressions[130] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[130] }; + expressions[131] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[131]); + expressions[132] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[132] }; + expressions[133] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[133]); + expressions[134] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[134], expressions[0]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[0], expressions[0]); + RelooperAddBranch(relooperBlocks[2], relooperBlocks[1], expressions[0], expressions[0]); + expressions[135] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 3, the_module); + { + BinaryenType varTypes[] = { 1, 1, 2, 1, 3, 4, 1 }; + functions[13] = BinaryenAddFunction(the_module, "duffs-device", functionTypes[0], varTypes, 7, expressions[135]); + } + { + BinaryenType paramTypes[] = { 0 }; + functionTypes[2] = BinaryenAddFunctionType(the_module, "i", 1, paramTypes, 0); + } + the_relooper = RelooperCreate(); + expressions[136] = BinaryenConst(the_module, BinaryenLiteralInt32(42)); + { + BinaryenExpressionRef operands[] = { expressions[136] }; + expressions[137] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + expressions[138] = BinaryenConst(the_module, BinaryenLiteralInt32(1337)); + expressions[139] = BinaryenReturn(the_module, expressions[138]); + { + BinaryenExpressionRef children[] = { expressions[137], expressions[139] }; + expressions[140] = BinaryenBlock(the_module, "the-list", children, 2, BinaryenUndefined()); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[140]); + expressions[141] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[14] = BinaryenAddFunction(the_module, "return", functionTypes[2], varTypes, 1, expressions[141]); + } +raw: + BinaryenModulePrint(the_module); +(module + (type $v (func)) + (type $vi (func (param i32))) + (type $i (func (result i32))) + (import "module" "check" (func $check (param i32))) + (memory $0 0) + (func $just-one-block (; 1 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 1337) + ) + ) + (func $two-blocks (; 2 ;) (type $v) + (local $0 i32) + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + ) + ) + (func $two-blocks-plus-code (; 3 ;) (type $v) + (local $0 i32) + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (drop + (i32.const 77) + ) + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + ) + ) + (func $loop (; 4 ;) (type $v) + (local $0 i32) + (loop $shape$0$continue + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + (block + (br $shape$0$continue) + ) + ) + ) + ) + (func $loop-plus-code (; 5 ;) (type $v) + (local $0 i32) + (loop $shape$0$continue + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (drop + (i32.const 33) + ) + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + (block + (drop + (i32.const -66) + ) + (br $shape$0$continue) + ) + ) + ) + ) + (func $split (; 6 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call $check + (i32.const 1) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + ) + (func $split-plus-code (; 7 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (drop + (i32.const 10) + ) + (block + (call $check + (i32.const 1) + ) + ) + ) + (block + (drop + (i32.const 20) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + ) + ) + (func $if (; 8 ;) (type $v) + (local $0 i32) + (block $block$3$break + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call $check + (i32.const 1) + ) + (block + (br $block$3$break) + ) + ) + (br $block$3$break) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (func $if-plus-code (; 9 ;) (type $v) + (local $0 i32) + (block $block$3$break + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (drop + (i32.const -1) + ) + (block + (call $check + (i32.const 1) + ) + (block + (drop + (i32.const -3) + ) + (br $block$3$break) + ) + ) + ) + (block + (drop + (i32.const -2) + ) + (br $block$3$break) + ) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (func $if-else (; 10 ;) (type $v) + (local $0 i32) + (block $block$4$break + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call $check + (i32.const 1) + ) + (block + (br $block$4$break) + ) + ) + (block + (call $check + (i32.const 2) + ) + (block + (br $block$4$break) + ) + ) + ) + ) + (block + (call $check + (i32.const 3) + ) + ) + ) + (func $loop-tail (; 11 ;) (type $v) + (local $0 i32) + (block $block$3$break + (loop $shape$0$continue + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + (if + (i32.const 10) + (br $shape$0$continue) + (br $block$3$break) + ) + ) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (func $nontrivial-loop-plus-phi-to-head (; 12 ;) (type $v) + (local $0 i32) + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (drop + (i32.const 10) + ) + (br $block$2$break) + ) + ) + (block + (block $block$7$break + (block $block$4$break + (loop $shape$1$continue + (block $block$3$break + (call $check + (i32.const 1) + ) + (if + (i32.const -2) + (br $block$3$break) + (block + (drop + (i32.const 20) + ) + (br $block$7$break) + ) + ) + ) + (block + (call $check + (i32.const 2) + ) + (if + (i32.const -6) + (br $block$4$break) + (block + (drop + (i32.const 30) + ) + (br $shape$1$continue) + ) + ) + ) + ) + ) + (block + (block $block$6$break + (call $check + (i32.const 3) + ) + (if + (i32.const -10) + (block + (call $check + (i32.const 4) + ) + (block + (br $block$6$break) + ) + ) + (br $block$6$break) + ) + ) + (block + (call $check + (i32.const 5) + ) + (block + (drop + (i32.const 40) + ) + (br $block$7$break) + ) + ) + ) + ) + (block + (call $check + (i32.const 6) + ) + ) + ) + ) + (func $switch (; 13 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 0) + ) + (block $switch$1$leave + (block $switch$1$default + (block $switch$1$case$3 + (block $switch$1$case$2 + (br_table $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$3 $switch$1$case$2 $switch$1$default + (i32.const -99) + ) + ) + (block + (block + (call $check + (i32.const 1) + ) + ) + ) + (br $switch$1$leave) + ) + (block + (drop + (i32.const 55) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (br $switch$1$leave) + ) + (block + (block + (call $check + (i32.const 3) + ) + ) + ) + (br $switch$1$leave) + ) + ) + (func $duffs-device (; 14 ;) (type $v) + (local $0 i32) + (local $1 i32) + (local $2 i64) + (local $3 i32) + (local $4 f32) + (local $5 f64) + (local $6 i32) + (block + (block $block$3$break + (block $block$2$break + (call $check + (i32.const 0) + ) + (if + (i32.const 10) + (block + (set_local $3 + (i32.const 2) + ) + (br $block$2$break) + ) + (block + (set_local $3 + (i32.const 3) + ) + (br $block$3$break) + ) + ) + ) + ) + ) + (loop $shape$1$continue + (if + (i32.eq + (get_local $3) + (i32.const 2) + ) + (block + (set_local $3 + (i32.const 0) + ) + (call $check + (i32.const 1) + ) + (block + (set_local $3 + (i32.const 3) + ) + (br $shape$1$continue) + ) + ) + (if + (i32.eq + (get_local $3) + (i32.const 3) + ) + (block + (set_local $3 + (i32.const 0) + ) + (call $check + (i32.const 2) + ) + (block + (set_local $3 + (i32.const 2) + ) + (br $shape$1$continue) + ) + ) + ) + ) + ) + ) + (func $return (; 15 ;) (type $i) (result i32) + (local $0 i32) + (block $the-list + (call $check + (i32.const 42) + ) + (return + (i32.const 1337) + ) + ) + ) +) + + BinaryenModuleValidate(the_module); + { + const char* passes[] = { "precompute" }; + BinaryenModuleRunPasses(the_module, passes, 1); + } + BinaryenModuleValidate(the_module); + BinaryenModuleOptimize(the_module); + BinaryenModuleValidate(the_module); +optimized: + BinaryenModulePrint(the_module); +(module + (memory $0 0) +) + + BinaryenModuleDispose(the_module); + functionTypes.clear(); + expressions.clear(); + functions.clear(); + relooperBlocks.clear(); + return 0; +} +test_parsing text: +(module + (type $iii (func (param i32 i32) (result i32))) + (memory $0 0) + (func $adder (; 0 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (i32.add + (get_local $0) + (get_local $1) + ) + ) +) + +module loaded from text form: +(module + (type $iii (func (param i32 i32) (result i32))) + (memory $0 0) + (func $ADD_ER (; 0 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (i32.add + (get_local $0) + (get_local $1) + ) + ) +) + diff --git a/src/binaryen/test/br_table_temp.2asm.js b/src/binaryen/test/br_table_temp.2asm.js new file mode 100644 index 0000000000..00f8f6ab92 --- /dev/null +++ b/src/binaryen/test/br_table_temp.2asm.js @@ -0,0 +1,50308 @@ +function asmFunc(global, env, buffer) { + "use asm"; + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + var Math_imul = global.Math.imul; + var Math_fround = global.Math.fround; + var Math_abs = global.Math.abs; + var Math_clz32 = global.Math.clz32; + function dummy() { + + } + + function $$1() { + + } + + function $$2() { + + } + + function $$3() { + + } + + function $$4() { + + } + + function $$5() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 1; + switch (0 | 0) { + case 0: + break block; + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$6() { + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0; + block : { + $i64toi32_block_1 : { + $i64toi32_block_0 : { + i64toi32_i32$0 = 0; + $$5 = 2; + $$6 = $$5; + $$7 = $$5; + switch (0 | 0) { + case 0: + break $i64toi32_block_0; + default: + break $i64toi32_block_1; + }; + }; + i64toi32_i32$1 = $$6; + $$11 = i64toi32_i32$1; + break block; + }; + i64toi32_i32$1 = $$7; + $$11 = i64toi32_i32$1; + break block; + }; + return $$11 | 0; + } + + function $$7() { + var $$0 = Math_fround(0), $$1 = Math_fround(0), $$2 = Math_fround(0); + block : { + $$1 = Math_fround(3.0); + switch (0 | 0) { + case 0: + break block; + default: + break block; + }; + }; + return Math_fround($$1); + } + + function $$8() { + var $$0 = 0.0, $$1 = 0.0, $$2 = 0.0; + block : { + $$1 = 4.0; + switch (0 | 0) { + case 0: + break block; + default: + break block; + }; + }; + return +$$1; + } + + function $$9($$0) { + $$0 = $$0 | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, wasm2asm_i32$0 = 0; + return 22 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$10($$0) { + $$0 = $$0 | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0; + block : { + $$3 = 33; + switch ($$0 | 0) { + default: + break block; + }; + }; + return $$3 | 0; + } + + function $$11($$0) { + $$0 = $$0 | 0; + var $$1 = 0, $$2 = 0, $$3 = 0; + block : { + block0 : { + switch ($$0 | 0) { + case 0: + break block; + default: + break block0; + }; + }; + return 20 | 0; + }; + return 22 | 0; + } + + function $$12($$0) { + $$0 = $$0 | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0; + block : { + block1 : { + $$2 = 33; + $$3 = $$2; + $$4 = $$2; + switch ($$0 | 0) { + case 0: + break block1; + default: + break block; + }; + }; + $$3 = 32; + }; + return $$3 | 0; + } + + function $$13($$0) { + $$0 = $$0 | 0; + var $$1 = 0, $$2 = 0, $$3 = 0; + block : { + block2 : { + block3 : { + block4 : { + block5 : { + switch ($$0 | 0) { + case 0: + break block2; + case 1: + break block3; + case 2: + break block4; + case 3: + break block5; + default: + break block; + }; + }; + return 100 | 0; + }; + return 101 | 0; + }; + return 102 | 0; + }; + return 103 | 0; + }; + return 104 | 0; + } + + function $$14($$0) { + $$0 = $$0 | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, $$21 = 0, $$22 = 0, $$23 = 0, $$24 = 0, $$25 = 0, $$26 = 0, $$27 = 0; + block : { + block6 : { + block7 : { + block8 : { + block9 : { + $$3 = 200; + $$4 = $$3; + $$5 = $$3; + $$6 = $$3; + $$7 = $$3; + $$8 = $$3; + switch ($$0 | 0) { + case 0: + break block6; + case 1: + break block7; + case 2: + break block8; + case 3: + break block9; + default: + break block; + }; + }; + $$1 = $$8; + return $$1 + 10 | 0 | 0; + }; + $$1 = $$7; + return $$1 + 11 | 0 | 0; + }; + $$1 = $$6; + return $$1 + 12 | 0 | 0; + }; + $$1 = $$5; + return $$1 + 13 | 0 | 0; + }; + $$1 = $$4; + return $$1 + 14 | 0 | 0; + } + + function $$15($$0) { + $$0 = $$0 | 0; + var $$1 = 0; + block : { + block10 : { + switch ($$0 | 0) { + case 0: + break block10; + case 1: + break block; + case 2: + break block10; + case 3: + break block; + case 4: + break block10; + case 5: + break block; + case 6: + break block10; + case 7: + break block; + case 8: + break block10; + case 9: + break block; + case 10: + break block10; + case 11: + break block; + case 12: + break block10; + case 13: + break block; + case 14: + break block10; + case 15: + break block; + case 16: + break block10; + case 17: + break block; + case 18: + break block10; + case 19: + break block; + case 20: + break block10; + case 21: + break block; + case 22: + break block10; + case 23: + break block; + case 24: + break block10; + case 25: + break block; + case 26: + break block10; + case 27: + break block; + case 28: + break block10; + case 29: + break block; + case 30: + break block10; + case 31: + break block; + case 32: + break block10; + case 33: + break block; + case 34: + break block10; + case 35: + break block; + case 36: + break block10; + case 37: + break block; + case 38: + break block10; + case 39: + break block; + case 40: + break block10; + case 41: + break block; + case 42: + break block10; + case 43: + break block; + case 44: + break block10; + case 45: + break block; + case 46: + break block10; + case 47: + break block; + case 48: + break block10; + case 49: + break block; + case 50: + break block10; + case 51: + break block; + case 52: + break block10; + case 53: + break block; + case 54: + break block10; + case 55: + break block; + case 56: + break block10; + case 57: + break block; + case 58: + break block10; + case 59: + break block; + case 60: + break block10; + case 61: + break block; + case 62: + break block10; + case 63: + break block; + case 64: + break block10; + case 65: + break block; + case 66: + break block10; + case 67: + break block; + case 68: + break block10; + case 69: + break block; + case 70: + break block10; + case 71: + break block; + case 72: + break block10; + case 73: + break block; + case 74: + break block10; + case 75: + break block; + case 76: + break block10; + case 77: + break block; + case 78: + break block10; + case 79: + break block; + case 80: + break block10; + case 81: + break block; + case 82: + break block10; + case 83: + break block; + case 84: + break block10; + case 85: + break block; + case 86: + break block10; + case 87: + break block; + case 88: + break block10; + case 89: + break block; + case 90: + break block10; + case 91: + break block; + case 92: + break block10; + case 93: + break block; + case 94: + break block10; + case 95: + break block; + case 96: + break block10; + case 97: + break block; + case 98: + break block10; + case 99: + break block; + case 100: + break block10; + case 101: + break block; + case 102: + break block10; + case 103: + break block; + case 104: + break block10; + case 105: + break block; + case 106: + break block10; + case 107: + break block; + case 108: + break block10; + case 109: + break block; + case 110: + break block10; + case 111: + break block; + case 112: + break block10; + case 113: + break block; + case 114: + break block10; + case 115: + break block; + case 116: + break block10; + case 117: + break block; + case 118: + break block10; + case 119: + break block; + case 120: + break block10; + case 121: + break block; + case 122: + break block10; + case 123: + break block; + case 124: + break block10; + case 125: + break block; + case 126: + break block10; + case 127: + break block; + case 128: + break block10; + case 129: + break block; + case 130: + break block10; + case 131: + break block; + case 132: + break block10; + case 133: + break block; + case 134: + break block10; + case 135: + break block; + case 136: + break block10; + case 137: + break block; + case 138: + break block10; + case 139: + break block; + case 140: + break block10; + case 141: + break block; + case 142: + break block10; + case 143: + break block; + case 144: + break block10; + case 145: + break block; + case 146: + break block10; + case 147: + break block; + case 148: + break block10; + case 149: + break block; + case 150: + break block10; + case 151: + break block; + case 152: + break block10; + case 153: + break block; + case 154: + break block10; + case 155: + break block; + case 156: + break block10; + case 157: + break block; + case 158: + break block10; + case 159: + break block; + case 160: + break block10; + case 161: + break block; + case 162: + break block10; + case 163: + break block; + case 164: + break block10; + case 165: + break block; + case 166: + break block10; + case 167: + break block; + case 168: + break block10; + case 169: + break block; + case 170: + break block10; + case 171: + break block; + case 172: + break block10; + case 173: + break block; + case 174: + break block10; + case 175: + break block; + case 176: + break block10; + case 177: + break block; + case 178: + break block10; + case 179: + break block; + case 180: + break block10; + case 181: + break block; + case 182: + break block10; + case 183: + break block; + case 184: + break block10; + case 185: + break block; + case 186: + break block10; + case 187: + break block; + case 188: + break block10; + case 189: + break block; + case 190: + break block10; + case 191: + break block; + case 192: + break block10; + case 193: + break block; + case 194: + break block10; + case 195: + break block; + case 196: + break block10; + case 197: + break block; + case 198: + break block10; + case 199: + break block; + case 200: + break block10; + case 201: + break block; + case 202: + break block10; + case 203: + break block; + case 204: + break block10; + case 205: + break block; + case 206: + break block10; + case 207: + break block; + case 208: + break block10; + case 209: + break block; + case 210: + break block10; + case 211: + break block; + case 212: + break block10; + case 213: + break block; + case 214: + break block10; + case 215: + break block; + case 216: + break block10; + case 217: + break block; + case 218: + break block10; + case 219: + break block; + case 220: + break block10; + case 221: + break block; + case 222: + break block10; + case 223: + break block; + case 224: + break block10; + case 225: + break block; + case 226: + break block10; + case 227: + break block; + case 228: + break block10; + case 229: + break block; + case 230: + break block10; + case 231: + break block; + case 232: + break block10; + case 233: + break block; + case 234: + break block10; + case 235: + break block; + case 236: + break block10; + case 237: + break block; + case 238: + break block10; + case 239: + break block; + case 240: + break block10; + case 241: + break block; + case 242: + break block10; + case 243: + break block; + case 244: + break block10; + case 245: + break block; + case 246: + break block10; + case 247: + break block; + case 248: + break block10; + case 249: + break block; + case 250: + break block10; + case 251: + break block; + case 252: + break block10; + case 253: + break block; + case 254: + break block10; + case 255: + break block; + case 256: + break block10; + case 257: + break block; + case 258: + break block10; + case 259: + break block; + case 260: + break block10; + case 261: + break block; + case 262: + break block10; + case 263: + break block; + case 264: + break block10; + case 265: + break block; + case 266: + break block10; + case 267: + break block; + case 268: + break block10; + case 269: + break block; + case 270: + break block10; + case 271: + break block; + case 272: + break block10; + case 273: + break block; + case 274: + break block10; + case 275: + break block; + case 276: + break block10; + case 277: + break block; + case 278: + break block10; + case 279: + break block; + case 280: + break block10; + case 281: + break block; + case 282: + break block10; + case 283: + break block; + case 284: + break block10; + case 285: + break block; + case 286: + break block10; + case 287: + break block; + case 288: + break block10; + case 289: + break block; + case 290: + break block10; + case 291: + break block; + case 292: + break block10; + case 293: + break block; + case 294: + break block10; + case 295: + break block; + case 296: + break block10; + case 297: + break block; + case 298: + break block10; + case 299: + break block; + case 300: + break block10; + case 301: + break block; + case 302: + break block10; + case 303: + break block; + case 304: + break block10; + case 305: + break block; + case 306: + break block10; + case 307: + break block; + case 308: + break block10; + case 309: + break block; + case 310: + break block10; + case 311: + break block; + case 312: + break block10; + case 313: + break block; + case 314: + break block10; + case 315: + break block; + case 316: + break block10; + case 317: + break block; + case 318: + break block10; + case 319: + break block; + case 320: + break block10; + case 321: + break block; + case 322: + break block10; + case 323: + break block; + case 324: + break block10; + case 325: + break block; + case 326: + break block10; + case 327: + break block; + case 328: + break block10; + case 329: + break block; + case 330: + break block10; + case 331: + break block; + case 332: + break block10; + case 333: + break block; + case 334: + break block10; + case 335: + break block; + case 336: + break block10; + case 337: + break block; + case 338: + break block10; + case 339: + break block; + case 340: + break block10; + case 341: + break block; + case 342: + break block10; + case 343: + break block; + case 344: + break block10; + case 345: + break block; + case 346: + break block10; + case 347: + break block; + case 348: + break block10; + case 349: + break block; + case 350: + break block10; + case 351: + break block; + case 352: + break block10; + case 353: + break block; + case 354: + break block10; + case 355: + break block; + case 356: + break block10; + case 357: + break block; + case 358: + break block10; + case 359: + break block; + case 360: + break block10; + case 361: + break block; + case 362: + break block10; + case 363: + break block; + case 364: + break block10; + case 365: + break block; + case 366: + break block10; + case 367: + break block; + case 368: + break block10; + case 369: + break block; + case 370: + break block10; + case 371: + break block; + case 372: + break block10; + case 373: + break block; + case 374: + break block10; + case 375: + break block; + case 376: + break block10; + case 377: + break block; + case 378: + break block10; + case 379: + break block; + case 380: + break block10; + case 381: + break block; + case 382: + break block10; + case 383: + break block; + case 384: + break block10; + case 385: + break block; + case 386: + break block10; + case 387: + break block; + case 388: + break block10; + case 389: + break block; + case 390: + break block10; + case 391: + break block; + case 392: + break block10; + case 393: + break block; + case 394: + break block10; + case 395: + break block; + case 396: + break block10; + case 397: + break block; + case 398: + break block10; + case 399: + break block; + case 400: + break block10; + case 401: + break block; + case 402: + break block10; + case 403: + break block; + case 404: + break block10; + case 405: + break block; + case 406: + break block10; + case 407: + break block; + case 408: + break block10; + case 409: + break block; + case 410: + break block10; + case 411: + break block; + case 412: + break block10; + case 413: + break block; + case 414: + break block10; + case 415: + break block; + case 416: + break block10; + case 417: + break block; + case 418: + break block10; + case 419: + break block; + case 420: + break block10; + case 421: + break block; + case 422: + break block10; + case 423: + break block; + case 424: + break block10; + case 425: + break block; + case 426: + break block10; + case 427: + break block; + case 428: + break block10; + case 429: + break block; + case 430: + break block10; + case 431: + break block; + case 432: + break block10; + case 433: + break block; + case 434: + break block10; + case 435: + break block; + case 436: + break block10; + case 437: + break block; + case 438: + break block10; + case 439: + break block; + case 440: + break block10; + case 441: + break block; + case 442: + break block10; + case 443: + break block; + case 444: + break block10; + case 445: + break block; + case 446: + break block10; + case 447: + break block; + case 448: + break block10; + case 449: + break block; + case 450: + break block10; + case 451: + break block; + case 452: + break block10; + case 453: + break block; + case 454: + break block10; + case 455: + break block; + case 456: + break block10; + case 457: + break block; + case 458: + break block10; + case 459: + break block; + case 460: + break block10; + case 461: + break block; + case 462: + break block10; + case 463: + break block; + case 464: + break block10; + case 465: + break block; + case 466: + break block10; + case 467: + break block; + case 468: + break block10; + case 469: + break block; + case 470: + break block10; + case 471: + break block; + case 472: + break block10; + case 473: + break block; + case 474: + break block10; + case 475: + break block; + case 476: + break block10; + case 477: + break block; + case 478: + break block10; + case 479: + break block; + case 480: + break block10; + case 481: + break block; + case 482: + break block10; + case 483: + break block; + case 484: + break block10; + case 485: + break block; + case 486: + break block10; + case 487: + break block; + case 488: + break block10; + case 489: + break block; + case 490: + break block10; + case 491: + break block; + case 492: + break block10; + case 493: + break block; + case 494: + break block10; + case 495: + break block; + case 496: + break block10; + case 497: + break block; + case 498: + break block10; + case 499: + break block; + case 500: + break block10; + case 501: + break block; + case 502: + break block10; + case 503: + break block; + case 504: + break block10; + case 505: + break block; + case 506: + break block10; + case 507: + break block; + case 508: + break block10; + case 509: + break block; + case 510: + break block10; + case 511: + break block; + case 512: + break block10; + case 513: + break block; + case 514: + break block10; + case 515: + break block; + case 516: + break block10; + case 517: + break block; + case 518: + break block10; + case 519: + break block; + case 520: + break block10; + case 521: + break block; + case 522: + break block10; + case 523: + break block; + case 524: + break block10; + case 525: + break block; + case 526: + break block10; + case 527: + break block; + case 528: + break block10; + case 529: + break block; + case 530: + break block10; + case 531: + break block; + case 532: + break block10; + case 533: + break block; + case 534: + break block10; + case 535: + break block; + case 536: + break block10; + case 537: + break block; + case 538: + break block10; + case 539: + break block; + case 540: + break block10; + case 541: + break block; + case 542: + break block10; + case 543: + break block; + case 544: + break block10; + case 545: + break block; + case 546: + break block10; + case 547: + break block; + case 548: + break block10; + case 549: + break block; + case 550: + break block10; + case 551: + break block; + case 552: + break block10; + case 553: + break block; + case 554: + break block10; + case 555: + break block; + case 556: + break block10; + case 557: + break block; + case 558: + break block10; + case 559: + break block; + case 560: + break block10; + case 561: + break block; + case 562: + break block10; + case 563: + break block; + case 564: + break block10; + case 565: + break block; + case 566: + break block10; + case 567: + break block; + case 568: + break block10; + case 569: + break block; + case 570: + break block10; + case 571: + break block; + case 572: + break block10; + case 573: + break block; + case 574: + break block10; + case 575: + break block; + case 576: + break block10; + case 577: + break block; + case 578: + break block10; + case 579: + break block; + case 580: + break block10; + case 581: + break block; + case 582: + break block10; + case 583: + break block; + case 584: + break block10; + case 585: + break block; + case 586: + break block10; + case 587: + break block; + case 588: + break block10; + case 589: + break block; + case 590: + break block10; + case 591: + break block; + case 592: + break block10; + case 593: + break block; + case 594: + break block10; + case 595: + break block; + case 596: + break block10; + case 597: + break block; + case 598: + break block10; + case 599: + break block; + case 600: + break block10; + case 601: + break block; + case 602: + break block10; + case 603: + break block; + case 604: + break block10; + case 605: + break block; + case 606: + break block10; + case 607: + break block; + case 608: + break block10; + case 609: + break block; + case 610: + break block10; + case 611: + break block; + case 612: + break block10; + case 613: + break block; + case 614: + break block10; + case 615: + break block; + case 616: + break block10; + case 617: + break block; + case 618: + break block10; + case 619: + break block; + case 620: + break block10; + case 621: + break block; + case 622: + break block10; + case 623: + break block; + case 624: + break block10; + case 625: + break block; + case 626: + break block10; + case 627: + break block; + case 628: + break block10; + case 629: + break block; + case 630: + break block10; + case 631: + break block; + case 632: + break block10; + case 633: + break block; + case 634: + break block10; + case 635: + break block; + case 636: + break block10; + case 637: + break block; + case 638: + break block10; + case 639: + break block; + case 640: + break block10; + case 641: + break block; + case 642: + break block10; + case 643: + break block; + case 644: + break block10; + case 645: + break block; + case 646: + break block10; + case 647: + break block; + case 648: + break block10; + case 649: + break block; + case 650: + break block10; + case 651: + break block; + case 652: + break block10; + case 653: + break block; + case 654: + break block10; + case 655: + break block; + case 656: + break block10; + case 657: + break block; + case 658: + break block10; + case 659: + break block; + case 660: + break block10; + case 661: + break block; + case 662: + break block10; + case 663: + break block; + case 664: + break block10; + case 665: + break block; + case 666: + break block10; + case 667: + break block; + case 668: + break block10; + case 669: + break block; + case 670: + break block10; + case 671: + break block; + case 672: + break block10; + case 673: + break block; + case 674: + break block10; + case 675: + break block; + case 676: + break block10; + case 677: + break block; + case 678: + break block10; + case 679: + break block; + case 680: + break block10; + case 681: + break block; + case 682: + break block10; + case 683: + break block; + case 684: + break block10; + case 685: + break block; + case 686: + break block10; + case 687: + break block; + case 688: + break block10; + case 689: + break block; + case 690: + break block10; + case 691: + break block; + case 692: + break block10; + case 693: + break block; + case 694: + break block10; + case 695: + break block; + case 696: + break block10; + case 697: + break block; + case 698: + break block10; + case 699: + break block; + case 700: + break block10; + case 701: + break block; + case 702: + break block10; + case 703: + break block; + case 704: + break block10; + case 705: + break block; + case 706: + break block10; + case 707: + break block; + case 708: + break block10; + case 709: + break block; + case 710: + break block10; + case 711: + break block; + case 712: + break block10; + case 713: + break block; + case 714: + break block10; + case 715: + break block; + case 716: + break block10; + case 717: + break block; + case 718: + break block10; + case 719: + break block; + case 720: + break block10; + case 721: + break block; + case 722: + break block10; + case 723: + break block; + case 724: + break block10; + case 725: + break block; + case 726: + break block10; + case 727: + break block; + case 728: + break block10; + case 729: + break block; + case 730: + break block10; + case 731: + break block; + case 732: + break block10; + case 733: + break block; + case 734: + break block10; + case 735: + break block; + case 736: + break block10; + case 737: + break block; + case 738: + break block10; + case 739: + break block; + case 740: + break block10; + case 741: + break block; + case 742: + break block10; + case 743: + break block; + case 744: + break block10; + case 745: + break block; + case 746: + break block10; + case 747: + break block; + case 748: + break block10; + case 749: + break block; + case 750: + break block10; + case 751: + break block; + case 752: + break block10; + case 753: + break block; + case 754: + break block10; + case 755: + break block; + case 756: + break block10; + case 757: + break block; + case 758: + break block10; + case 759: + break block; + case 760: + break block10; + case 761: + break block; + case 762: + break block10; + case 763: + break block; + case 764: + break block10; + case 765: + break block; + case 766: + break block10; + case 767: + break block; + case 768: + break block10; + case 769: + break block; + case 770: + break block10; + case 771: + break block; + case 772: + break block10; + case 773: + break block; + case 774: + break block10; + case 775: + break block; + case 776: + break block10; + case 777: + break block; + case 778: + break block10; + case 779: + break block; + case 780: + break block10; + case 781: + break block; + case 782: + break block10; + case 783: + break block; + case 784: + break block10; + case 785: + break block; + case 786: + break block10; + case 787: + break block; + case 788: + break block10; + case 789: + break block; + case 790: + break block10; + case 791: + break block; + case 792: + break block10; + case 793: + break block; + case 794: + break block10; + case 795: + break block; + case 796: + break block10; + case 797: + break block; + case 798: + break block10; + case 799: + break block; + case 800: + break block10; + case 801: + break block; + case 802: + break block10; + case 803: + break block; + case 804: + break block10; + case 805: + break block; + case 806: + break block10; + case 807: + break block; + case 808: + break block10; + case 809: + break block; + case 810: + break block10; + case 811: + break block; + case 812: + break block10; + case 813: + break block; + case 814: + break block10; + case 815: + break block; + case 816: + break block10; + case 817: + break block; + case 818: + break block10; + case 819: + break block; + case 820: + break block10; + case 821: + break block; + case 822: + break block10; + case 823: + break block; + case 824: + break block10; + case 825: + break block; + case 826: + break block10; + case 827: + break block; + case 828: + break block10; + case 829: + break block; + case 830: + break block10; + case 831: + break block; + case 832: + break block10; + case 833: + break block; + case 834: + break block10; + case 835: + break block; + case 836: + break block10; + case 837: + break block; + case 838: + break block10; + case 839: + break block; + case 840: + break block10; + case 841: + break block; + case 842: + break block10; + case 843: + break block; + case 844: + break block10; + case 845: + break block; + case 846: + break block10; + case 847: + break block; + case 848: + break block10; + case 849: + break block; + case 850: + break block10; + case 851: + break block; + case 852: + break block10; + case 853: + break block; + case 854: + break block10; + case 855: + break block; + case 856: + break block10; + case 857: + break block; + case 858: + break block10; + case 859: + break block; + case 860: + break block10; + case 861: + break block; + case 862: + break block10; + case 863: + break block; + case 864: + break block10; + case 865: + break block; + case 866: + break block10; + case 867: + break block; + case 868: + break block10; + case 869: + break block; + case 870: + break block10; + case 871: + break block; + case 872: + break block10; + case 873: + break block; + case 874: + break block10; + case 875: + break block; + case 876: + break block10; + case 877: + break block; + case 878: + break block10; + case 879: + break block; + case 880: + break block10; + case 881: + break block; + case 882: + break block10; + case 883: + break block; + case 884: + break block10; + case 885: + break block; + case 886: + break block10; + case 887: + break block; + case 888: + break block10; + case 889: + break block; + case 890: + break block10; + case 891: + break block; + case 892: + break block10; + case 893: + break block; + case 894: + break block10; + case 895: + break block; + case 896: + break block10; + case 897: + break block; + case 898: + break block10; + case 899: + break block; + case 900: + break block10; + case 901: + break block; + case 902: + break block10; + case 903: + break block; + case 904: + break block10; + case 905: + break block; + case 906: + break block10; + case 907: + break block; + case 908: + break block10; + case 909: + break block; + case 910: + break block10; + case 911: + break block; + case 912: + break block10; + case 913: + break block; + case 914: + break block10; + case 915: + break block; + case 916: + break block10; + case 917: + break block; + case 918: + break block10; + case 919: + break block; + case 920: + break block10; + case 921: + break block; + case 922: + break block10; + case 923: + break block; + case 924: + break block10; + case 925: + break block; + case 926: + break block10; + case 927: + break block; + case 928: + break block10; + case 929: + break block; + case 930: + break block10; + case 931: + break block; + case 932: + break block10; + case 933: + break block; + case 934: + break block10; + case 935: + break block; + case 936: + break block10; + case 937: + break block; + case 938: + break block10; + case 939: + break block; + case 940: + break block10; + case 941: + break block; + case 942: + break block10; + case 943: + break block; + case 944: + break block10; + case 945: + break block; + case 946: + break block10; + case 947: + break block; + case 948: + break block10; + case 949: + break block; + case 950: + break block10; + case 951: + break block; + case 952: + break block10; + case 953: + break block; + case 954: + break block10; + case 955: + break block; + case 956: + break block10; + case 957: + break block; + case 958: + break block10; + case 959: + break block; + case 960: + break block10; + case 961: + break block; + case 962: + break block10; + case 963: + break block; + case 964: + break block10; + case 965: + break block; + case 966: + break block10; + case 967: + break block; + case 968: + break block10; + case 969: + break block; + case 970: + break block10; + case 971: + break block; + case 972: + break block10; + case 973: + break block; + case 974: + break block10; + case 975: + break block; + case 976: + break block10; + case 977: + break block; + case 978: + break block10; + case 979: + break block; + case 980: + break block10; + case 981: + break block; + case 982: + break block10; + case 983: + break block; + case 984: + break block10; + case 985: + break block; + case 986: + break block10; + case 987: + break block; + case 988: + break block10; + case 989: + break block; + case 990: + break block10; + case 991: + break block; + case 992: + break block10; + case 993: + break block; + case 994: + break block10; + case 995: + break block; + case 996: + break block10; + case 997: + break block; + case 998: + break block10; + case 999: + break block; + case 1e3: + break block10; + case 1001: + break block; + case 1002: + break block10; + case 1003: + break block; + case 1004: + break block10; + case 1005: + break block; + case 1006: + break block10; + case 1007: + break block; + case 1008: + break block10; + case 1009: + break block; + case 1010: + break block10; + case 1011: + break block; + case 1012: + break block10; + case 1013: + break block; + case 1014: + break block10; + case 1015: + break block; + case 1016: + break block10; + case 1017: + break block; + case 1018: + break block10; + case 1019: + break block; + case 1020: + break block10; + case 1021: + break block; + case 1022: + break block10; + case 1023: + break block; + case 1024: + break block10; + case 1025: + break block; + case 1026: + break block10; + case 1027: + break block; + case 1028: + break block10; + case 1029: + break block; + case 1030: + break block10; + case 1031: + break block; + case 1032: + break block10; + case 1033: + break block; + case 1034: + break block10; + case 1035: + break block; + case 1036: + break block10; + case 1037: + break block; + case 1038: + break block10; + case 1039: + break block; + case 1040: + break block10; + case 1041: + break block; + case 1042: + break block10; + case 1043: + break block; + case 1044: + break block10; + case 1045: + break block; + case 1046: + break block10; + case 1047: + break block; + case 1048: + break block10; + case 1049: + break block; + case 1050: + break block10; + case 1051: + break block; + case 1052: + break block10; + case 1053: + break block; + case 1054: + break block10; + case 1055: + break block; + case 1056: + break block10; + case 1057: + break block; + case 1058: + break block10; + case 1059: + break block; + case 1060: + break block10; + case 1061: + break block; + case 1062: + break block10; + case 1063: + break block; + case 1064: + break block10; + case 1065: + break block; + case 1066: + break block10; + case 1067: + break block; + case 1068: + break block10; + case 1069: + break block; + case 1070: + break block10; + case 1071: + break block; + case 1072: + break block10; + case 1073: + break block; + case 1074: + break block10; + case 1075: + break block; + case 1076: + break block10; + case 1077: + break block; + case 1078: + break block10; + case 1079: + break block; + case 1080: + break block10; + case 1081: + break block; + case 1082: + break block10; + case 1083: + break block; + case 1084: + break block10; + case 1085: + break block; + case 1086: + break block10; + case 1087: + break block; + case 1088: + break block10; + case 1089: + break block; + case 1090: + break block10; + case 1091: + break block; + case 1092: + break block10; + case 1093: + break block; + case 1094: + break block10; + case 1095: + break block; + case 1096: + break block10; + case 1097: + break block; + case 1098: + break block10; + case 1099: + break block; + case 1100: + break block10; + case 1101: + break block; + case 1102: + break block10; + case 1103: + break block; + case 1104: + break block10; + case 1105: + break block; + case 1106: + break block10; + case 1107: + break block; + case 1108: + break block10; + case 1109: + break block; + case 1110: + break block10; + case 1111: + break block; + case 1112: + break block10; + case 1113: + break block; + case 1114: + break block10; + case 1115: + break block; + case 1116: + break block10; + case 1117: + break block; + case 1118: + break block10; + case 1119: + break block; + case 1120: + break block10; + case 1121: + break block; + case 1122: + break block10; + case 1123: + break block; + case 1124: + break block10; + case 1125: + break block; + case 1126: + break block10; + case 1127: + break block; + case 1128: + break block10; + case 1129: + break block; + case 1130: + break block10; + case 1131: + break block; + case 1132: + break block10; + case 1133: + break block; + case 1134: + break block10; + case 1135: + break block; + case 1136: + break block10; + case 1137: + break block; + case 1138: + break block10; + case 1139: + break block; + case 1140: + break block10; + case 1141: + break block; + case 1142: + break block10; + case 1143: + break block; + case 1144: + break block10; + case 1145: + break block; + case 1146: + break block10; + case 1147: + break block; + case 1148: + break block10; + case 1149: + break block; + case 1150: + break block10; + case 1151: + break block; + case 1152: + break block10; + case 1153: + break block; + case 1154: + break block10; + case 1155: + break block; + case 1156: + break block10; + case 1157: + break block; + case 1158: + break block10; + case 1159: + break block; + case 1160: + break block10; + case 1161: + break block; + case 1162: + break block10; + case 1163: + break block; + case 1164: + break block10; + case 1165: + break block; + case 1166: + break block10; + case 1167: + break block; + case 1168: + break block10; + case 1169: + break block; + case 1170: + break block10; + case 1171: + break block; + case 1172: + break block10; + case 1173: + break block; + case 1174: + break block10; + case 1175: + break block; + case 1176: + break block10; + case 1177: + break block; + case 1178: + break block10; + case 1179: + break block; + case 1180: + break block10; + case 1181: + break block; + case 1182: + break block10; + case 1183: + break block; + case 1184: + break block10; + case 1185: + break block; + case 1186: + break block10; + case 1187: + break block; + case 1188: + break block10; + case 1189: + break block; + case 1190: + break block10; + case 1191: + break block; + case 1192: + break block10; + case 1193: + break block; + case 1194: + break block10; + case 1195: + break block; + case 1196: + break block10; + case 1197: + break block; + case 1198: + break block10; + case 1199: + break block; + case 1200: + break block10; + case 1201: + break block; + case 1202: + break block10; + case 1203: + break block; + case 1204: + break block10; + case 1205: + break block; + case 1206: + break block10; + case 1207: + break block; + case 1208: + break block10; + case 1209: + break block; + case 1210: + break block10; + case 1211: + break block; + case 1212: + break block10; + case 1213: + break block; + case 1214: + break block10; + case 1215: + break block; + case 1216: + break block10; + case 1217: + break block; + case 1218: + break block10; + case 1219: + break block; + case 1220: + break block10; + case 1221: + break block; + case 1222: + break block10; + case 1223: + break block; + case 1224: + break block10; + case 1225: + break block; + case 1226: + break block10; + case 1227: + break block; + case 1228: + break block10; + case 1229: + break block; + case 1230: + break block10; + case 1231: + break block; + case 1232: + break block10; + case 1233: + break block; + case 1234: + break block10; + case 1235: + break block; + case 1236: + break block10; + case 1237: + break block; + case 1238: + break block10; + case 1239: + break block; + case 1240: + break block10; + case 1241: + break block; + case 1242: + break block10; + case 1243: + break block; + case 1244: + break block10; + case 1245: + break block; + case 1246: + break block10; + case 1247: + break block; + case 1248: + break block10; + case 1249: + break block; + case 1250: + break block10; + case 1251: + break block; + case 1252: + break block10; + case 1253: + break block; + case 1254: + break block10; + case 1255: + break block; + case 1256: + break block10; + case 1257: + break block; + case 1258: + break block10; + case 1259: + break block; + case 1260: + break block10; + case 1261: + break block; + case 1262: + break block10; + case 1263: + break block; + case 1264: + break block10; + case 1265: + break block; + case 1266: + break block10; + case 1267: + break block; + case 1268: + break block10; + case 1269: + break block; + case 1270: + break block10; + case 1271: + break block; + case 1272: + break block10; + case 1273: + break block; + case 1274: + break block10; + case 1275: + break block; + case 1276: + break block10; + case 1277: + break block; + case 1278: + break block10; + case 1279: + break block; + case 1280: + break block10; + case 1281: + break block; + case 1282: + break block10; + case 1283: + break block; + case 1284: + break block10; + case 1285: + break block; + case 1286: + break block10; + case 1287: + break block; + case 1288: + break block10; + case 1289: + break block; + case 1290: + break block10; + case 1291: + break block; + case 1292: + break block10; + case 1293: + break block; + case 1294: + break block10; + case 1295: + break block; + case 1296: + break block10; + case 1297: + break block; + case 1298: + break block10; + case 1299: + break block; + case 1300: + break block10; + case 1301: + break block; + case 1302: + break block10; + case 1303: + break block; + case 1304: + break block10; + case 1305: + break block; + case 1306: + break block10; + case 1307: + break block; + case 1308: + break block10; + case 1309: + break block; + case 1310: + break block10; + case 1311: + break block; + case 1312: + break block10; + case 1313: + break block; + case 1314: + break block10; + case 1315: + break block; + case 1316: + break block10; + case 1317: + break block; + case 1318: + break block10; + case 1319: + break block; + case 1320: + break block10; + case 1321: + break block; + case 1322: + break block10; + case 1323: + break block; + case 1324: + break block10; + case 1325: + break block; + case 1326: + break block10; + case 1327: + break block; + case 1328: + break block10; + case 1329: + break block; + case 1330: + break block10; + case 1331: + break block; + case 1332: + break block10; + case 1333: + break block; + case 1334: + break block10; + case 1335: + break block; + case 1336: + break block10; + case 1337: + break block; + case 1338: + break block10; + case 1339: + break block; + case 1340: + break block10; + case 1341: + break block; + case 1342: + break block10; + case 1343: + break block; + case 1344: + break block10; + case 1345: + break block; + case 1346: + break block10; + case 1347: + break block; + case 1348: + break block10; + case 1349: + break block; + case 1350: + break block10; + case 1351: + break block; + case 1352: + break block10; + case 1353: + break block; + case 1354: + break block10; + case 1355: + break block; + case 1356: + break block10; + case 1357: + break block; + case 1358: + break block10; + case 1359: + break block; + case 1360: + break block10; + case 1361: + break block; + case 1362: + break block10; + case 1363: + break block; + case 1364: + break block10; + case 1365: + break block; + case 1366: + break block10; + case 1367: + break block; + case 1368: + break block10; + case 1369: + break block; + case 1370: + break block10; + case 1371: + break block; + case 1372: + break block10; + case 1373: + break block; + case 1374: + break block10; + case 1375: + break block; + case 1376: + break block10; + case 1377: + break block; + case 1378: + break block10; + case 1379: + break block; + case 1380: + break block10; + case 1381: + break block; + case 1382: + break block10; + case 1383: + break block; + case 1384: + break block10; + case 1385: + break block; + case 1386: + break block10; + case 1387: + break block; + case 1388: + break block10; + case 1389: + break block; + case 1390: + break block10; + case 1391: + break block; + case 1392: + break block10; + case 1393: + break block; + case 1394: + break block10; + case 1395: + break block; + case 1396: + break block10; + case 1397: + break block; + case 1398: + break block10; + case 1399: + break block; + case 1400: + break block10; + case 1401: + break block; + case 1402: + break block10; + case 1403: + break block; + case 1404: + break block10; + case 1405: + break block; + case 1406: + break block10; + case 1407: + break block; + case 1408: + break block10; + case 1409: + break block; + case 1410: + break block10; + case 1411: + break block; + case 1412: + break block10; + case 1413: + break block; + case 1414: + break block10; + case 1415: + break block; + case 1416: + break block10; + case 1417: + break block; + case 1418: + break block10; + case 1419: + break block; + case 1420: + break block10; + case 1421: + break block; + case 1422: + break block10; + case 1423: + break block; + case 1424: + break block10; + case 1425: + break block; + case 1426: + break block10; + case 1427: + break block; + case 1428: + break block10; + case 1429: + break block; + case 1430: + break block10; + case 1431: + break block; + case 1432: + break block10; + case 1433: + break block; + case 1434: + break block10; + case 1435: + break block; + case 1436: + break block10; + case 1437: + break block; + case 1438: + break block10; + case 1439: + break block; + case 1440: + break block10; + case 1441: + break block; + case 1442: + break block10; + case 1443: + break block; + case 1444: + break block10; + case 1445: + break block; + case 1446: + break block10; + case 1447: + break block; + case 1448: + break block10; + case 1449: + break block; + case 1450: + break block10; + case 1451: + break block; + case 1452: + break block10; + case 1453: + break block; + case 1454: + break block10; + case 1455: + break block; + case 1456: + break block10; + case 1457: + break block; + case 1458: + break block10; + case 1459: + break block; + case 1460: + break block10; + case 1461: + break block; + case 1462: + break block10; + case 1463: + break block; + case 1464: + break block10; + case 1465: + break block; + case 1466: + break block10; + case 1467: + break block; + case 1468: + break block10; + case 1469: + break block; + case 1470: + break block10; + case 1471: + break block; + case 1472: + break block10; + case 1473: + break block; + case 1474: + break block10; + case 1475: + break block; + case 1476: + break block10; + case 1477: + break block; + case 1478: + break block10; + case 1479: + break block; + case 1480: + break block10; + case 1481: + break block; + case 1482: + break block10; + case 1483: + break block; + case 1484: + break block10; + case 1485: + break block; + case 1486: + break block10; + case 1487: + break block; + case 1488: + break block10; + case 1489: + break block; + case 1490: + break block10; + case 1491: + break block; + case 1492: + break block10; + case 1493: + break block; + case 1494: + break block10; + case 1495: + break block; + case 1496: + break block10; + case 1497: + break block; + case 1498: + break block10; + case 1499: + break block; + case 1500: + break block10; + case 1501: + break block; + case 1502: + break block10; + case 1503: + break block; + case 1504: + break block10; + case 1505: + break block; + case 1506: + break block10; + case 1507: + break block; + case 1508: + break block10; + case 1509: + break block; + case 1510: + break block10; + case 1511: + break block; + case 1512: + break block10; + case 1513: + break block; + case 1514: + break block10; + case 1515: + break block; + case 1516: + break block10; + case 1517: + break block; + case 1518: + break block10; + case 1519: + break block; + case 1520: + break block10; + case 1521: + break block; + case 1522: + break block10; + case 1523: + break block; + case 1524: + break block10; + case 1525: + break block; + case 1526: + break block10; + case 1527: + break block; + case 1528: + break block10; + case 1529: + break block; + case 1530: + break block10; + case 1531: + break block; + case 1532: + break block10; + case 1533: + break block; + case 1534: + break block10; + case 1535: + break block; + case 1536: + break block10; + case 1537: + break block; + case 1538: + break block10; + case 1539: + break block; + case 1540: + break block10; + case 1541: + break block; + case 1542: + break block10; + case 1543: + break block; + case 1544: + break block10; + case 1545: + break block; + case 1546: + break block10; + case 1547: + break block; + case 1548: + break block10; + case 1549: + break block; + case 1550: + break block10; + case 1551: + break block; + case 1552: + break block10; + case 1553: + break block; + case 1554: + break block10; + case 1555: + break block; + case 1556: + break block10; + case 1557: + break block; + case 1558: + break block10; + case 1559: + break block; + case 1560: + break block10; + case 1561: + break block; + case 1562: + break block10; + case 1563: + break block; + case 1564: + break block10; + case 1565: + break block; + case 1566: + break block10; + case 1567: + break block; + case 1568: + break block10; + case 1569: + break block; + case 1570: + break block10; + case 1571: + break block; + case 1572: + break block10; + case 1573: + break block; + case 1574: + break block10; + case 1575: + break block; + case 1576: + break block10; + case 1577: + break block; + case 1578: + break block10; + case 1579: + break block; + case 1580: + break block10; + case 1581: + break block; + case 1582: + break block10; + case 1583: + break block; + case 1584: + break block10; + case 1585: + break block; + case 1586: + break block10; + case 1587: + break block; + case 1588: + break block10; + case 1589: + break block; + case 1590: + break block10; + case 1591: + break block; + case 1592: + break block10; + case 1593: + break block; + case 1594: + break block10; + case 1595: + break block; + case 1596: + break block10; + case 1597: + break block; + case 1598: + break block10; + case 1599: + break block; + case 1600: + break block10; + case 1601: + break block; + case 1602: + break block10; + case 1603: + break block; + case 1604: + break block10; + case 1605: + break block; + case 1606: + break block10; + case 1607: + break block; + case 1608: + break block10; + case 1609: + break block; + case 1610: + break block10; + case 1611: + break block; + case 1612: + break block10; + case 1613: + break block; + case 1614: + break block10; + case 1615: + break block; + case 1616: + break block10; + case 1617: + break block; + case 1618: + break block10; + case 1619: + break block; + case 1620: + break block10; + case 1621: + break block; + case 1622: + break block10; + case 1623: + break block; + case 1624: + break block10; + case 1625: + break block; + case 1626: + break block10; + case 1627: + break block; + case 1628: + break block10; + case 1629: + break block; + case 1630: + break block10; + case 1631: + break block; + case 1632: + break block10; + case 1633: + break block; + case 1634: + break block10; + case 1635: + break block; + case 1636: + break block10; + case 1637: + break block; + case 1638: + break block10; + case 1639: + break block; + case 1640: + break block10; + case 1641: + break block; + case 1642: + break block10; + case 1643: + break block; + case 1644: + break block10; + case 1645: + break block; + case 1646: + break block10; + case 1647: + break block; + case 1648: + break block10; + case 1649: + break block; + case 1650: + break block10; + case 1651: + break block; + case 1652: + break block10; + case 1653: + break block; + case 1654: + break block10; + case 1655: + break block; + case 1656: + break block10; + case 1657: + break block; + case 1658: + break block10; + case 1659: + break block; + case 1660: + break block10; + case 1661: + break block; + case 1662: + break block10; + case 1663: + break block; + case 1664: + break block10; + case 1665: + break block; + case 1666: + break block10; + case 1667: + break block; + case 1668: + break block10; + case 1669: + break block; + case 1670: + break block10; + case 1671: + break block; + case 1672: + break block10; + case 1673: + break block; + case 1674: + break block10; + case 1675: + break block; + case 1676: + break block10; + case 1677: + break block; + case 1678: + break block10; + case 1679: + break block; + case 1680: + break block10; + case 1681: + break block; + case 1682: + break block10; + case 1683: + break block; + case 1684: + break block10; + case 1685: + break block; + case 1686: + break block10; + case 1687: + break block; + case 1688: + break block10; + case 1689: + break block; + case 1690: + break block10; + case 1691: + break block; + case 1692: + break block10; + case 1693: + break block; + case 1694: + break block10; + case 1695: + break block; + case 1696: + break block10; + case 1697: + break block; + case 1698: + break block10; + case 1699: + break block; + case 1700: + break block10; + case 1701: + break block; + case 1702: + break block10; + case 1703: + break block; + case 1704: + break block10; + case 1705: + break block; + case 1706: + break block10; + case 1707: + break block; + case 1708: + break block10; + case 1709: + break block; + case 1710: + break block10; + case 1711: + break block; + case 1712: + break block10; + case 1713: + break block; + case 1714: + break block10; + case 1715: + break block; + case 1716: + break block10; + case 1717: + break block; + case 1718: + break block10; + case 1719: + break block; + case 1720: + break block10; + case 1721: + break block; + case 1722: + break block10; + case 1723: + break block; + case 1724: + break block10; + case 1725: + break block; + case 1726: + break block10; + case 1727: + break block; + case 1728: + break block10; + case 1729: + break block; + case 1730: + break block10; + case 1731: + break block; + case 1732: + break block10; + case 1733: + break block; + case 1734: + break block10; + case 1735: + break block; + case 1736: + break block10; + case 1737: + break block; + case 1738: + break block10; + case 1739: + break block; + case 1740: + break block10; + case 1741: + break block; + case 1742: + break block10; + case 1743: + break block; + case 1744: + break block10; + case 1745: + break block; + case 1746: + break block10; + case 1747: + break block; + case 1748: + break block10; + case 1749: + break block; + case 1750: + break block10; + case 1751: + break block; + case 1752: + break block10; + case 1753: + break block; + case 1754: + break block10; + case 1755: + break block; + case 1756: + break block10; + case 1757: + break block; + case 1758: + break block10; + case 1759: + break block; + case 1760: + break block10; + case 1761: + break block; + case 1762: + break block10; + case 1763: + break block; + case 1764: + break block10; + case 1765: + break block; + case 1766: + break block10; + case 1767: + break block; + case 1768: + break block10; + case 1769: + break block; + case 1770: + break block10; + case 1771: + break block; + case 1772: + break block10; + case 1773: + break block; + case 1774: + break block10; + case 1775: + break block; + case 1776: + break block10; + case 1777: + break block; + case 1778: + break block10; + case 1779: + break block; + case 1780: + break block10; + case 1781: + break block; + case 1782: + break block10; + case 1783: + break block; + case 1784: + break block10; + case 1785: + break block; + case 1786: + break block10; + case 1787: + break block; + case 1788: + break block10; + case 1789: + break block; + case 1790: + break block10; + case 1791: + break block; + case 1792: + break block10; + case 1793: + break block; + case 1794: + break block10; + case 1795: + break block; + case 1796: + break block10; + case 1797: + break block; + case 1798: + break block10; + case 1799: + break block; + case 1800: + break block10; + case 1801: + break block; + case 1802: + break block10; + case 1803: + break block; + case 1804: + break block10; + case 1805: + break block; + case 1806: + break block10; + case 1807: + break block; + case 1808: + break block10; + case 1809: + break block; + case 1810: + break block10; + case 1811: + break block; + case 1812: + break block10; + case 1813: + break block; + case 1814: + break block10; + case 1815: + break block; + case 1816: + break block10; + case 1817: + break block; + case 1818: + break block10; + case 1819: + break block; + case 1820: + break block10; + case 1821: + break block; + case 1822: + break block10; + case 1823: + break block; + case 1824: + break block10; + case 1825: + break block; + case 1826: + break block10; + case 1827: + break block; + case 1828: + break block10; + case 1829: + break block; + case 1830: + break block10; + case 1831: + break block; + case 1832: + break block10; + case 1833: + break block; + case 1834: + break block10; + case 1835: + break block; + case 1836: + break block10; + case 1837: + break block; + case 1838: + break block10; + case 1839: + break block; + case 1840: + break block10; + case 1841: + break block; + case 1842: + break block10; + case 1843: + break block; + case 1844: + break block10; + case 1845: + break block; + case 1846: + break block10; + case 1847: + break block; + case 1848: + break block10; + case 1849: + break block; + case 1850: + break block10; + case 1851: + break block; + case 1852: + break block10; + case 1853: + break block; + case 1854: + break block10; + case 1855: + break block; + case 1856: + break block10; + case 1857: + break block; + case 1858: + break block10; + case 1859: + break block; + case 1860: + break block10; + case 1861: + break block; + case 1862: + break block10; + case 1863: + break block; + case 1864: + break block10; + case 1865: + break block; + case 1866: + break block10; + case 1867: + break block; + case 1868: + break block10; + case 1869: + break block; + case 1870: + break block10; + case 1871: + break block; + case 1872: + break block10; + case 1873: + break block; + case 1874: + break block10; + case 1875: + break block; + case 1876: + break block10; + case 1877: + break block; + case 1878: + break block10; + case 1879: + break block; + case 1880: + break block10; + case 1881: + break block; + case 1882: + break block10; + case 1883: + break block; + case 1884: + break block10; + case 1885: + break block; + case 1886: + break block10; + case 1887: + break block; + case 1888: + break block10; + case 1889: + break block; + case 1890: + break block10; + case 1891: + break block; + case 1892: + break block10; + case 1893: + break block; + case 1894: + break block10; + case 1895: + break block; + case 1896: + break block10; + case 1897: + break block; + case 1898: + break block10; + case 1899: + break block; + case 1900: + break block10; + case 1901: + break block; + case 1902: + break block10; + case 1903: + break block; + case 1904: + break block10; + case 1905: + break block; + case 1906: + break block10; + case 1907: + break block; + case 1908: + break block10; + case 1909: + break block; + case 1910: + break block10; + case 1911: + break block; + case 1912: + break block10; + case 1913: + break block; + case 1914: + break block10; + case 1915: + break block; + case 1916: + break block10; + case 1917: + break block; + case 1918: + break block10; + case 1919: + break block; + case 1920: + break block10; + case 1921: + break block; + case 1922: + break block10; + case 1923: + break block; + case 1924: + break block10; + case 1925: + break block; + case 1926: + break block10; + case 1927: + break block; + case 1928: + break block10; + case 1929: + break block; + case 1930: + break block10; + case 1931: + break block; + case 1932: + break block10; + case 1933: + break block; + case 1934: + break block10; + case 1935: + break block; + case 1936: + break block10; + case 1937: + break block; + case 1938: + break block10; + case 1939: + break block; + case 1940: + break block10; + case 1941: + break block; + case 1942: + break block10; + case 1943: + break block; + case 1944: + break block10; + case 1945: + break block; + case 1946: + break block10; + case 1947: + break block; + case 1948: + break block10; + case 1949: + break block; + case 1950: + break block10; + case 1951: + break block; + case 1952: + break block10; + case 1953: + break block; + case 1954: + break block10; + case 1955: + break block; + case 1956: + break block10; + case 1957: + break block; + case 1958: + break block10; + case 1959: + break block; + case 1960: + break block10; + case 1961: + break block; + case 1962: + break block10; + case 1963: + break block; + case 1964: + break block10; + case 1965: + break block; + case 1966: + break block10; + case 1967: + break block; + case 1968: + break block10; + case 1969: + break block; + case 1970: + break block10; + case 1971: + break block; + case 1972: + break block10; + case 1973: + break block; + case 1974: + break block10; + case 1975: + break block; + case 1976: + break block10; + case 1977: + break block; + case 1978: + break block10; + case 1979: + break block; + case 1980: + break block10; + case 1981: + break block; + case 1982: + break block10; + case 1983: + break block; + case 1984: + break block10; + case 1985: + break block; + case 1986: + break block10; + case 1987: + break block; + case 1988: + break block10; + case 1989: + break block; + case 1990: + break block10; + case 1991: + break block; + case 1992: + break block10; + case 1993: + break block; + case 1994: + break block10; + case 1995: + break block; + case 1996: + break block10; + case 1997: + break block; + case 1998: + break block10; + case 1999: + break block; + case 2e3: + break block10; + case 2001: + break block; + case 2002: + break block10; + case 2003: + break block; + case 2004: + break block10; + case 2005: + break block; + case 2006: + break block10; + case 2007: + break block; + case 2008: + break block10; + case 2009: + break block; + case 2010: + break block10; + case 2011: + break block; + case 2012: + break block10; + case 2013: + break block; + case 2014: + break block10; + case 2015: + break block; + case 2016: + break block10; + case 2017: + break block; + case 2018: + break block10; + case 2019: + break block; + case 2020: + break block10; + case 2021: + break block; + case 2022: + break block10; + case 2023: + break block; + case 2024: + break block10; + case 2025: + break block; + case 2026: + break block10; + case 2027: + break block; + case 2028: + break block10; + case 2029: + break block; + case 2030: + break block10; + case 2031: + break block; + case 2032: + break block10; + case 2033: + break block; + case 2034: + break block10; + case 2035: + break block; + case 2036: + break block10; + case 2037: + break block; + case 2038: + break block10; + case 2039: + break block; + case 2040: + break block10; + case 2041: + break block; + case 2042: + break block10; + case 2043: + break block; + case 2044: + break block10; + case 2045: + break block; + case 2046: + break block10; + case 2047: + break block; + case 2048: + break block10; + case 2049: + break block; + case 2050: + break block10; + case 2051: + break block; + case 2052: + break block10; + case 2053: + break block; + case 2054: + break block10; + case 2055: + break block; + case 2056: + break block10; + case 2057: + break block; + case 2058: + break block10; + case 2059: + break block; + case 2060: + break block10; + case 2061: + break block; + case 2062: + break block10; + case 2063: + break block; + case 2064: + break block10; + case 2065: + break block; + case 2066: + break block10; + case 2067: + break block; + case 2068: + break block10; + case 2069: + break block; + case 2070: + break block10; + case 2071: + break block; + case 2072: + break block10; + case 2073: + break block; + case 2074: + break block10; + case 2075: + break block; + case 2076: + break block10; + case 2077: + break block; + case 2078: + break block10; + case 2079: + break block; + case 2080: + break block10; + case 2081: + break block; + case 2082: + break block10; + case 2083: + break block; + case 2084: + break block10; + case 2085: + break block; + case 2086: + break block10; + case 2087: + break block; + case 2088: + break block10; + case 2089: + break block; + case 2090: + break block10; + case 2091: + break block; + case 2092: + break block10; + case 2093: + break block; + case 2094: + break block10; + case 2095: + break block; + case 2096: + break block10; + case 2097: + break block; + case 2098: + break block10; + case 2099: + break block; + case 2100: + break block10; + case 2101: + break block; + case 2102: + break block10; + case 2103: + break block; + case 2104: + break block10; + case 2105: + break block; + case 2106: + break block10; + case 2107: + break block; + case 2108: + break block10; + case 2109: + break block; + case 2110: + break block10; + case 2111: + break block; + case 2112: + break block10; + case 2113: + break block; + case 2114: + break block10; + case 2115: + break block; + case 2116: + break block10; + case 2117: + break block; + case 2118: + break block10; + case 2119: + break block; + case 2120: + break block10; + case 2121: + break block; + case 2122: + break block10; + case 2123: + break block; + case 2124: + break block10; + case 2125: + break block; + case 2126: + break block10; + case 2127: + break block; + case 2128: + break block10; + case 2129: + break block; + case 2130: + break block10; + case 2131: + break block; + case 2132: + break block10; + case 2133: + break block; + case 2134: + break block10; + case 2135: + break block; + case 2136: + break block10; + case 2137: + break block; + case 2138: + break block10; + case 2139: + break block; + case 2140: + break block10; + case 2141: + break block; + case 2142: + break block10; + case 2143: + break block; + case 2144: + break block10; + case 2145: + break block; + case 2146: + break block10; + case 2147: + break block; + case 2148: + break block10; + case 2149: + break block; + case 2150: + break block10; + case 2151: + break block; + case 2152: + break block10; + case 2153: + break block; + case 2154: + break block10; + case 2155: + break block; + case 2156: + break block10; + case 2157: + break block; + case 2158: + break block10; + case 2159: + break block; + case 2160: + break block10; + case 2161: + break block; + case 2162: + break block10; + case 2163: + break block; + case 2164: + break block10; + case 2165: + break block; + case 2166: + break block10; + case 2167: + break block; + case 2168: + break block10; + case 2169: + break block; + case 2170: + break block10; + case 2171: + break block; + case 2172: + break block10; + case 2173: + break block; + case 2174: + break block10; + case 2175: + break block; + case 2176: + break block10; + case 2177: + break block; + case 2178: + break block10; + case 2179: + break block; + case 2180: + break block10; + case 2181: + break block; + case 2182: + break block10; + case 2183: + break block; + case 2184: + break block10; + case 2185: + break block; + case 2186: + break block10; + case 2187: + break block; + case 2188: + break block10; + case 2189: + break block; + case 2190: + break block10; + case 2191: + break block; + case 2192: + break block10; + case 2193: + break block; + case 2194: + break block10; + case 2195: + break block; + case 2196: + break block10; + case 2197: + break block; + case 2198: + break block10; + case 2199: + break block; + case 2200: + break block10; + case 2201: + break block; + case 2202: + break block10; + case 2203: + break block; + case 2204: + break block10; + case 2205: + break block; + case 2206: + break block10; + case 2207: + break block; + case 2208: + break block10; + case 2209: + break block; + case 2210: + break block10; + case 2211: + break block; + case 2212: + break block10; + case 2213: + break block; + case 2214: + break block10; + case 2215: + break block; + case 2216: + break block10; + case 2217: + break block; + case 2218: + break block10; + case 2219: + break block; + case 2220: + break block10; + case 2221: + break block; + case 2222: + break block10; + case 2223: + break block; + case 2224: + break block10; + case 2225: + break block; + case 2226: + break block10; + case 2227: + break block; + case 2228: + break block10; + case 2229: + break block; + case 2230: + break block10; + case 2231: + break block; + case 2232: + break block10; + case 2233: + break block; + case 2234: + break block10; + case 2235: + break block; + case 2236: + break block10; + case 2237: + break block; + case 2238: + break block10; + case 2239: + break block; + case 2240: + break block10; + case 2241: + break block; + case 2242: + break block10; + case 2243: + break block; + case 2244: + break block10; + case 2245: + break block; + case 2246: + break block10; + case 2247: + break block; + case 2248: + break block10; + case 2249: + break block; + case 2250: + break block10; + case 2251: + break block; + case 2252: + break block10; + case 2253: + break block; + case 2254: + break block10; + case 2255: + break block; + case 2256: + break block10; + case 2257: + break block; + case 2258: + break block10; + case 2259: + break block; + case 2260: + break block10; + case 2261: + break block; + case 2262: + break block10; + case 2263: + break block; + case 2264: + break block10; + case 2265: + break block; + case 2266: + break block10; + case 2267: + break block; + case 2268: + break block10; + case 2269: + break block; + case 2270: + break block10; + case 2271: + break block; + case 2272: + break block10; + case 2273: + break block; + case 2274: + break block10; + case 2275: + break block; + case 2276: + break block10; + case 2277: + break block; + case 2278: + break block10; + case 2279: + break block; + case 2280: + break block10; + case 2281: + break block; + case 2282: + break block10; + case 2283: + break block; + case 2284: + break block10; + case 2285: + break block; + case 2286: + break block10; + case 2287: + break block; + case 2288: + break block10; + case 2289: + break block; + case 2290: + break block10; + case 2291: + break block; + case 2292: + break block10; + case 2293: + break block; + case 2294: + break block10; + case 2295: + break block; + case 2296: + break block10; + case 2297: + break block; + case 2298: + break block10; + case 2299: + break block; + case 2300: + break block10; + case 2301: + break block; + case 2302: + break block10; + case 2303: + break block; + case 2304: + break block10; + case 2305: + break block; + case 2306: + break block10; + case 2307: + break block; + case 2308: + break block10; + case 2309: + break block; + case 2310: + break block10; + case 2311: + break block; + case 2312: + break block10; + case 2313: + break block; + case 2314: + break block10; + case 2315: + break block; + case 2316: + break block10; + case 2317: + break block; + case 2318: + break block10; + case 2319: + break block; + case 2320: + break block10; + case 2321: + break block; + case 2322: + break block10; + case 2323: + break block; + case 2324: + break block10; + case 2325: + break block; + case 2326: + break block10; + case 2327: + break block; + case 2328: + break block10; + case 2329: + break block; + case 2330: + break block10; + case 2331: + break block; + case 2332: + break block10; + case 2333: + break block; + case 2334: + break block10; + case 2335: + break block; + case 2336: + break block10; + case 2337: + break block; + case 2338: + break block10; + case 2339: + break block; + case 2340: + break block10; + case 2341: + break block; + case 2342: + break block10; + case 2343: + break block; + case 2344: + break block10; + case 2345: + break block; + case 2346: + break block10; + case 2347: + break block; + case 2348: + break block10; + case 2349: + break block; + case 2350: + break block10; + case 2351: + break block; + case 2352: + break block10; + case 2353: + break block; + case 2354: + break block10; + case 2355: + break block; + case 2356: + break block10; + case 2357: + break block; + case 2358: + break block10; + case 2359: + break block; + case 2360: + break block10; + case 2361: + break block; + case 2362: + break block10; + case 2363: + break block; + case 2364: + break block10; + case 2365: + break block; + case 2366: + break block10; + case 2367: + break block; + case 2368: + break block10; + case 2369: + break block; + case 2370: + break block10; + case 2371: + break block; + case 2372: + break block10; + case 2373: + break block; + case 2374: + break block10; + case 2375: + break block; + case 2376: + break block10; + case 2377: + break block; + case 2378: + break block10; + case 2379: + break block; + case 2380: + break block10; + case 2381: + break block; + case 2382: + break block10; + case 2383: + break block; + case 2384: + break block10; + case 2385: + break block; + case 2386: + break block10; + case 2387: + break block; + case 2388: + break block10; + case 2389: + break block; + case 2390: + break block10; + case 2391: + break block; + case 2392: + break block10; + case 2393: + break block; + case 2394: + break block10; + case 2395: + break block; + case 2396: + break block10; + case 2397: + break block; + case 2398: + break block10; + case 2399: + break block; + case 2400: + break block10; + case 2401: + break block; + case 2402: + break block10; + case 2403: + break block; + case 2404: + break block10; + case 2405: + break block; + case 2406: + break block10; + case 2407: + break block; + case 2408: + break block10; + case 2409: + break block; + case 2410: + break block10; + case 2411: + break block; + case 2412: + break block10; + case 2413: + break block; + case 2414: + break block10; + case 2415: + break block; + case 2416: + break block10; + case 2417: + break block; + case 2418: + break block10; + case 2419: + break block; + case 2420: + break block10; + case 2421: + break block; + case 2422: + break block10; + case 2423: + break block; + case 2424: + break block10; + case 2425: + break block; + case 2426: + break block10; + case 2427: + break block; + case 2428: + break block10; + case 2429: + break block; + case 2430: + break block10; + case 2431: + break block; + case 2432: + break block10; + case 2433: + break block; + case 2434: + break block10; + case 2435: + break block; + case 2436: + break block10; + case 2437: + break block; + case 2438: + break block10; + case 2439: + break block; + case 2440: + break block10; + case 2441: + break block; + case 2442: + break block10; + case 2443: + break block; + case 2444: + break block10; + case 2445: + break block; + case 2446: + break block10; + case 2447: + break block; + case 2448: + break block10; + case 2449: + break block; + case 2450: + break block10; + case 2451: + break block; + case 2452: + break block10; + case 2453: + break block; + case 2454: + break block10; + case 2455: + break block; + case 2456: + break block10; + case 2457: + break block; + case 2458: + break block10; + case 2459: + break block; + case 2460: + break block10; + case 2461: + break block; + case 2462: + break block10; + case 2463: + break block; + case 2464: + break block10; + case 2465: + break block; + case 2466: + break block10; + case 2467: + break block; + case 2468: + break block10; + case 2469: + break block; + case 2470: + break block10; + case 2471: + break block; + case 2472: + break block10; + case 2473: + break block; + case 2474: + break block10; + case 2475: + break block; + case 2476: + break block10; + case 2477: + break block; + case 2478: + break block10; + case 2479: + break block; + case 2480: + break block10; + case 2481: + break block; + case 2482: + break block10; + case 2483: + break block; + case 2484: + break block10; + case 2485: + break block; + case 2486: + break block10; + case 2487: + break block; + case 2488: + break block10; + case 2489: + break block; + case 2490: + break block10; + case 2491: + break block; + case 2492: + break block10; + case 2493: + break block; + case 2494: + break block10; + case 2495: + break block; + case 2496: + break block10; + case 2497: + break block; + case 2498: + break block10; + case 2499: + break block; + case 2500: + break block10; + case 2501: + break block; + case 2502: + break block10; + case 2503: + break block; + case 2504: + break block10; + case 2505: + break block; + case 2506: + break block10; + case 2507: + break block; + case 2508: + break block10; + case 2509: + break block; + case 2510: + break block10; + case 2511: + break block; + case 2512: + break block10; + case 2513: + break block; + case 2514: + break block10; + case 2515: + break block; + case 2516: + break block10; + case 2517: + break block; + case 2518: + break block10; + case 2519: + break block; + case 2520: + break block10; + case 2521: + break block; + case 2522: + break block10; + case 2523: + break block; + case 2524: + break block10; + case 2525: + break block; + case 2526: + break block10; + case 2527: + break block; + case 2528: + break block10; + case 2529: + break block; + case 2530: + break block10; + case 2531: + break block; + case 2532: + break block10; + case 2533: + break block; + case 2534: + break block10; + case 2535: + break block; + case 2536: + break block10; + case 2537: + break block; + case 2538: + break block10; + case 2539: + break block; + case 2540: + break block10; + case 2541: + break block; + case 2542: + break block10; + case 2543: + break block; + case 2544: + break block10; + case 2545: + break block; + case 2546: + break block10; + case 2547: + break block; + case 2548: + break block10; + case 2549: + break block; + case 2550: + break block10; + case 2551: + break block; + case 2552: + break block10; + case 2553: + break block; + case 2554: + break block10; + case 2555: + break block; + case 2556: + break block10; + case 2557: + break block; + case 2558: + break block10; + case 2559: + break block; + case 2560: + break block10; + case 2561: + break block; + case 2562: + break block10; + case 2563: + break block; + case 2564: + break block10; + case 2565: + break block; + case 2566: + break block10; + case 2567: + break block; + case 2568: + break block10; + case 2569: + break block; + case 2570: + break block10; + case 2571: + break block; + case 2572: + break block10; + case 2573: + break block; + case 2574: + break block10; + case 2575: + break block; + case 2576: + break block10; + case 2577: + break block; + case 2578: + break block10; + case 2579: + break block; + case 2580: + break block10; + case 2581: + break block; + case 2582: + break block10; + case 2583: + break block; + case 2584: + break block10; + case 2585: + break block; + case 2586: + break block10; + case 2587: + break block; + case 2588: + break block10; + case 2589: + break block; + case 2590: + break block10; + case 2591: + break block; + case 2592: + break block10; + case 2593: + break block; + case 2594: + break block10; + case 2595: + break block; + case 2596: + break block10; + case 2597: + break block; + case 2598: + break block10; + case 2599: + break block; + case 2600: + break block10; + case 2601: + break block; + case 2602: + break block10; + case 2603: + break block; + case 2604: + break block10; + case 2605: + break block; + case 2606: + break block10; + case 2607: + break block; + case 2608: + break block10; + case 2609: + break block; + case 2610: + break block10; + case 2611: + break block; + case 2612: + break block10; + case 2613: + break block; + case 2614: + break block10; + case 2615: + break block; + case 2616: + break block10; + case 2617: + break block; + case 2618: + break block10; + case 2619: + break block; + case 2620: + break block10; + case 2621: + break block; + case 2622: + break block10; + case 2623: + break block; + case 2624: + break block10; + case 2625: + break block; + case 2626: + break block10; + case 2627: + break block; + case 2628: + break block10; + case 2629: + break block; + case 2630: + break block10; + case 2631: + break block; + case 2632: + break block10; + case 2633: + break block; + case 2634: + break block10; + case 2635: + break block; + case 2636: + break block10; + case 2637: + break block; + case 2638: + break block10; + case 2639: + break block; + case 2640: + break block10; + case 2641: + break block; + case 2642: + break block10; + case 2643: + break block; + case 2644: + break block10; + case 2645: + break block; + case 2646: + break block10; + case 2647: + break block; + case 2648: + break block10; + case 2649: + break block; + case 2650: + break block10; + case 2651: + break block; + case 2652: + break block10; + case 2653: + break block; + case 2654: + break block10; + case 2655: + break block; + case 2656: + break block10; + case 2657: + break block; + case 2658: + break block10; + case 2659: + break block; + case 2660: + break block10; + case 2661: + break block; + case 2662: + break block10; + case 2663: + break block; + case 2664: + break block10; + case 2665: + break block; + case 2666: + break block10; + case 2667: + break block; + case 2668: + break block10; + case 2669: + break block; + case 2670: + break block10; + case 2671: + break block; + case 2672: + break block10; + case 2673: + break block; + case 2674: + break block10; + case 2675: + break block; + case 2676: + break block10; + case 2677: + break block; + case 2678: + break block10; + case 2679: + break block; + case 2680: + break block10; + case 2681: + break block; + case 2682: + break block10; + case 2683: + break block; + case 2684: + break block10; + case 2685: + break block; + case 2686: + break block10; + case 2687: + break block; + case 2688: + break block10; + case 2689: + break block; + case 2690: + break block10; + case 2691: + break block; + case 2692: + break block10; + case 2693: + break block; + case 2694: + break block10; + case 2695: + break block; + case 2696: + break block10; + case 2697: + break block; + case 2698: + break block10; + case 2699: + break block; + case 2700: + break block10; + case 2701: + break block; + case 2702: + break block10; + case 2703: + break block; + case 2704: + break block10; + case 2705: + break block; + case 2706: + break block10; + case 2707: + break block; + case 2708: + break block10; + case 2709: + break block; + case 2710: + break block10; + case 2711: + break block; + case 2712: + break block10; + case 2713: + break block; + case 2714: + break block10; + case 2715: + break block; + case 2716: + break block10; + case 2717: + break block; + case 2718: + break block10; + case 2719: + break block; + case 2720: + break block10; + case 2721: + break block; + case 2722: + break block10; + case 2723: + break block; + case 2724: + break block10; + case 2725: + break block; + case 2726: + break block10; + case 2727: + break block; + case 2728: + break block10; + case 2729: + break block; + case 2730: + break block10; + case 2731: + break block; + case 2732: + break block10; + case 2733: + break block; + case 2734: + break block10; + case 2735: + break block; + case 2736: + break block10; + case 2737: + break block; + case 2738: + break block10; + case 2739: + break block; + case 2740: + break block10; + case 2741: + break block; + case 2742: + break block10; + case 2743: + break block; + case 2744: + break block10; + case 2745: + break block; + case 2746: + break block10; + case 2747: + break block; + case 2748: + break block10; + case 2749: + break block; + case 2750: + break block10; + case 2751: + break block; + case 2752: + break block10; + case 2753: + break block; + case 2754: + break block10; + case 2755: + break block; + case 2756: + break block10; + case 2757: + break block; + case 2758: + break block10; + case 2759: + break block; + case 2760: + break block10; + case 2761: + break block; + case 2762: + break block10; + case 2763: + break block; + case 2764: + break block10; + case 2765: + break block; + case 2766: + break block10; + case 2767: + break block; + case 2768: + break block10; + case 2769: + break block; + case 2770: + break block10; + case 2771: + break block; + case 2772: + break block10; + case 2773: + break block; + case 2774: + break block10; + case 2775: + break block; + case 2776: + break block10; + case 2777: + break block; + case 2778: + break block10; + case 2779: + break block; + case 2780: + break block10; + case 2781: + break block; + case 2782: + break block10; + case 2783: + break block; + case 2784: + break block10; + case 2785: + break block; + case 2786: + break block10; + case 2787: + break block; + case 2788: + break block10; + case 2789: + break block; + case 2790: + break block10; + case 2791: + break block; + case 2792: + break block10; + case 2793: + break block; + case 2794: + break block10; + case 2795: + break block; + case 2796: + break block10; + case 2797: + break block; + case 2798: + break block10; + case 2799: + break block; + case 2800: + break block10; + case 2801: + break block; + case 2802: + break block10; + case 2803: + break block; + case 2804: + break block10; + case 2805: + break block; + case 2806: + break block10; + case 2807: + break block; + case 2808: + break block10; + case 2809: + break block; + case 2810: + break block10; + case 2811: + break block; + case 2812: + break block10; + case 2813: + break block; + case 2814: + break block10; + case 2815: + break block; + case 2816: + break block10; + case 2817: + break block; + case 2818: + break block10; + case 2819: + break block; + case 2820: + break block10; + case 2821: + break block; + case 2822: + break block10; + case 2823: + break block; + case 2824: + break block10; + case 2825: + break block; + case 2826: + break block10; + case 2827: + break block; + case 2828: + break block10; + case 2829: + break block; + case 2830: + break block10; + case 2831: + break block; + case 2832: + break block10; + case 2833: + break block; + case 2834: + break block10; + case 2835: + break block; + case 2836: + break block10; + case 2837: + break block; + case 2838: + break block10; + case 2839: + break block; + case 2840: + break block10; + case 2841: + break block; + case 2842: + break block10; + case 2843: + break block; + case 2844: + break block10; + case 2845: + break block; + case 2846: + break block10; + case 2847: + break block; + case 2848: + break block10; + case 2849: + break block; + case 2850: + break block10; + case 2851: + break block; + case 2852: + break block10; + case 2853: + break block; + case 2854: + break block10; + case 2855: + break block; + case 2856: + break block10; + case 2857: + break block; + case 2858: + break block10; + case 2859: + break block; + case 2860: + break block10; + case 2861: + break block; + case 2862: + break block10; + case 2863: + break block; + case 2864: + break block10; + case 2865: + break block; + case 2866: + break block10; + case 2867: + break block; + case 2868: + break block10; + case 2869: + break block; + case 2870: + break block10; + case 2871: + break block; + case 2872: + break block10; + case 2873: + break block; + case 2874: + break block10; + case 2875: + break block; + case 2876: + break block10; + case 2877: + break block; + case 2878: + break block10; + case 2879: + break block; + case 2880: + break block10; + case 2881: + break block; + case 2882: + break block10; + case 2883: + break block; + case 2884: + break block10; + case 2885: + break block; + case 2886: + break block10; + case 2887: + break block; + case 2888: + break block10; + case 2889: + break block; + case 2890: + break block10; + case 2891: + break block; + case 2892: + break block10; + case 2893: + break block; + case 2894: + break block10; + case 2895: + break block; + case 2896: + break block10; + case 2897: + break block; + case 2898: + break block10; + case 2899: + break block; + case 2900: + break block10; + case 2901: + break block; + case 2902: + break block10; + case 2903: + break block; + case 2904: + break block10; + case 2905: + break block; + case 2906: + break block10; + case 2907: + break block; + case 2908: + break block10; + case 2909: + break block; + case 2910: + break block10; + case 2911: + break block; + case 2912: + break block10; + case 2913: + break block; + case 2914: + break block10; + case 2915: + break block; + case 2916: + break block10; + case 2917: + break block; + case 2918: + break block10; + case 2919: + break block; + case 2920: + break block10; + case 2921: + break block; + case 2922: + break block10; + case 2923: + break block; + case 2924: + break block10; + case 2925: + break block; + case 2926: + break block10; + case 2927: + break block; + case 2928: + break block10; + case 2929: + break block; + case 2930: + break block10; + case 2931: + break block; + case 2932: + break block10; + case 2933: + break block; + case 2934: + break block10; + case 2935: + break block; + case 2936: + break block10; + case 2937: + break block; + case 2938: + break block10; + case 2939: + break block; + case 2940: + break block10; + case 2941: + break block; + case 2942: + break block10; + case 2943: + break block; + case 2944: + break block10; + case 2945: + break block; + case 2946: + break block10; + case 2947: + break block; + case 2948: + break block10; + case 2949: + break block; + case 2950: + break block10; + case 2951: + break block; + case 2952: + break block10; + case 2953: + break block; + case 2954: + break block10; + case 2955: + break block; + case 2956: + break block10; + case 2957: + break block; + case 2958: + break block10; + case 2959: + break block; + case 2960: + break block10; + case 2961: + break block; + case 2962: + break block10; + case 2963: + break block; + case 2964: + break block10; + case 2965: + break block; + case 2966: + break block10; + case 2967: + break block; + case 2968: + break block10; + case 2969: + break block; + case 2970: + break block10; + case 2971: + break block; + case 2972: + break block10; + case 2973: + break block; + case 2974: + break block10; + case 2975: + break block; + case 2976: + break block10; + case 2977: + break block; + case 2978: + break block10; + case 2979: + break block; + case 2980: + break block10; + case 2981: + break block; + case 2982: + break block10; + case 2983: + break block; + case 2984: + break block10; + case 2985: + break block; + case 2986: + break block10; + case 2987: + break block; + case 2988: + break block10; + case 2989: + break block; + case 2990: + break block10; + case 2991: + break block; + case 2992: + break block10; + case 2993: + break block; + case 2994: + break block10; + case 2995: + break block; + case 2996: + break block10; + case 2997: + break block; + case 2998: + break block10; + case 2999: + break block; + case 3e3: + break block10; + case 3001: + break block; + case 3002: + break block10; + case 3003: + break block; + case 3004: + break block10; + case 3005: + break block; + case 3006: + break block10; + case 3007: + break block; + case 3008: + break block10; + case 3009: + break block; + case 3010: + break block10; + case 3011: + break block; + case 3012: + break block10; + case 3013: + break block; + case 3014: + break block10; + case 3015: + break block; + case 3016: + break block10; + case 3017: + break block; + case 3018: + break block10; + case 3019: + break block; + case 3020: + break block10; + case 3021: + break block; + case 3022: + break block10; + case 3023: + break block; + case 3024: + break block10; + case 3025: + break block; + case 3026: + break block10; + case 3027: + break block; + case 3028: + break block10; + case 3029: + break block; + case 3030: + break block10; + case 3031: + break block; + case 3032: + break block10; + case 3033: + break block; + case 3034: + break block10; + case 3035: + break block; + case 3036: + break block10; + case 3037: + break block; + case 3038: + break block10; + case 3039: + break block; + case 3040: + break block10; + case 3041: + break block; + case 3042: + break block10; + case 3043: + break block; + case 3044: + break block10; + case 3045: + break block; + case 3046: + break block10; + case 3047: + break block; + case 3048: + break block10; + case 3049: + break block; + case 3050: + break block10; + case 3051: + break block; + case 3052: + break block10; + case 3053: + break block; + case 3054: + break block10; + case 3055: + break block; + case 3056: + break block10; + case 3057: + break block; + case 3058: + break block10; + case 3059: + break block; + case 3060: + break block10; + case 3061: + break block; + case 3062: + break block10; + case 3063: + break block; + case 3064: + break block10; + case 3065: + break block; + case 3066: + break block10; + case 3067: + break block; + case 3068: + break block10; + case 3069: + break block; + case 3070: + break block10; + case 3071: + break block; + case 3072: + break block10; + case 3073: + break block; + case 3074: + break block10; + case 3075: + break block; + case 3076: + break block10; + case 3077: + break block; + case 3078: + break block10; + case 3079: + break block; + case 3080: + break block10; + case 3081: + break block; + case 3082: + break block10; + case 3083: + break block; + case 3084: + break block10; + case 3085: + break block; + case 3086: + break block10; + case 3087: + break block; + case 3088: + break block10; + case 3089: + break block; + case 3090: + break block10; + case 3091: + break block; + case 3092: + break block10; + case 3093: + break block; + case 3094: + break block10; + case 3095: + break block; + case 3096: + break block10; + case 3097: + break block; + case 3098: + break block10; + case 3099: + break block; + case 3100: + break block10; + case 3101: + break block; + case 3102: + break block10; + case 3103: + break block; + case 3104: + break block10; + case 3105: + break block; + case 3106: + break block10; + case 3107: + break block; + case 3108: + break block10; + case 3109: + break block; + case 3110: + break block10; + case 3111: + break block; + case 3112: + break block10; + case 3113: + break block; + case 3114: + break block10; + case 3115: + break block; + case 3116: + break block10; + case 3117: + break block; + case 3118: + break block10; + case 3119: + break block; + case 3120: + break block10; + case 3121: + break block; + case 3122: + break block10; + case 3123: + break block; + case 3124: + break block10; + case 3125: + break block; + case 3126: + break block10; + case 3127: + break block; + case 3128: + break block10; + case 3129: + break block; + case 3130: + break block10; + case 3131: + break block; + case 3132: + break block10; + case 3133: + break block; + case 3134: + break block10; + case 3135: + break block; + case 3136: + break block10; + case 3137: + break block; + case 3138: + break block10; + case 3139: + break block; + case 3140: + break block10; + case 3141: + break block; + case 3142: + break block10; + case 3143: + break block; + case 3144: + break block10; + case 3145: + break block; + case 3146: + break block10; + case 3147: + break block; + case 3148: + break block10; + case 3149: + break block; + case 3150: + break block10; + case 3151: + break block; + case 3152: + break block10; + case 3153: + break block; + case 3154: + break block10; + case 3155: + break block; + case 3156: + break block10; + case 3157: + break block; + case 3158: + break block10; + case 3159: + break block; + case 3160: + break block10; + case 3161: + break block; + case 3162: + break block10; + case 3163: + break block; + case 3164: + break block10; + case 3165: + break block; + case 3166: + break block10; + case 3167: + break block; + case 3168: + break block10; + case 3169: + break block; + case 3170: + break block10; + case 3171: + break block; + case 3172: + break block10; + case 3173: + break block; + case 3174: + break block10; + case 3175: + break block; + case 3176: + break block10; + case 3177: + break block; + case 3178: + break block10; + case 3179: + break block; + case 3180: + break block10; + case 3181: + break block; + case 3182: + break block10; + case 3183: + break block; + case 3184: + break block10; + case 3185: + break block; + case 3186: + break block10; + case 3187: + break block; + case 3188: + break block10; + case 3189: + break block; + case 3190: + break block10; + case 3191: + break block; + case 3192: + break block10; + case 3193: + break block; + case 3194: + break block10; + case 3195: + break block; + case 3196: + break block10; + case 3197: + break block; + case 3198: + break block10; + case 3199: + break block; + case 3200: + break block10; + case 3201: + break block; + case 3202: + break block10; + case 3203: + break block; + case 3204: + break block10; + case 3205: + break block; + case 3206: + break block10; + case 3207: + break block; + case 3208: + break block10; + case 3209: + break block; + case 3210: + break block10; + case 3211: + break block; + case 3212: + break block10; + case 3213: + break block; + case 3214: + break block10; + case 3215: + break block; + case 3216: + break block10; + case 3217: + break block; + case 3218: + break block10; + case 3219: + break block; + case 3220: + break block10; + case 3221: + break block; + case 3222: + break block10; + case 3223: + break block; + case 3224: + break block10; + case 3225: + break block; + case 3226: + break block10; + case 3227: + break block; + case 3228: + break block10; + case 3229: + break block; + case 3230: + break block10; + case 3231: + break block; + case 3232: + break block10; + case 3233: + break block; + case 3234: + break block10; + case 3235: + break block; + case 3236: + break block10; + case 3237: + break block; + case 3238: + break block10; + case 3239: + break block; + case 3240: + break block10; + case 3241: + break block; + case 3242: + break block10; + case 3243: + break block; + case 3244: + break block10; + case 3245: + break block; + case 3246: + break block10; + case 3247: + break block; + case 3248: + break block10; + case 3249: + break block; + case 3250: + break block10; + case 3251: + break block; + case 3252: + break block10; + case 3253: + break block; + case 3254: + break block10; + case 3255: + break block; + case 3256: + break block10; + case 3257: + break block; + case 3258: + break block10; + case 3259: + break block; + case 3260: + break block10; + case 3261: + break block; + case 3262: + break block10; + case 3263: + break block; + case 3264: + break block10; + case 3265: + break block; + case 3266: + break block10; + case 3267: + break block; + case 3268: + break block10; + case 3269: + break block; + case 3270: + break block10; + case 3271: + break block; + case 3272: + break block10; + case 3273: + break block; + case 3274: + break block10; + case 3275: + break block; + case 3276: + break block10; + case 3277: + break block; + case 3278: + break block10; + case 3279: + break block; + case 3280: + break block10; + case 3281: + break block; + case 3282: + break block10; + case 3283: + break block; + case 3284: + break block10; + case 3285: + break block; + case 3286: + break block10; + case 3287: + break block; + case 3288: + break block10; + case 3289: + break block; + case 3290: + break block10; + case 3291: + break block; + case 3292: + break block10; + case 3293: + break block; + case 3294: + break block10; + case 3295: + break block; + case 3296: + break block10; + case 3297: + break block; + case 3298: + break block10; + case 3299: + break block; + case 3300: + break block10; + case 3301: + break block; + case 3302: + break block10; + case 3303: + break block; + case 3304: + break block10; + case 3305: + break block; + case 3306: + break block10; + case 3307: + break block; + case 3308: + break block10; + case 3309: + break block; + case 3310: + break block10; + case 3311: + break block; + case 3312: + break block10; + case 3313: + break block; + case 3314: + break block10; + case 3315: + break block; + case 3316: + break block10; + case 3317: + break block; + case 3318: + break block10; + case 3319: + break block; + case 3320: + break block10; + case 3321: + break block; + case 3322: + break block10; + case 3323: + break block; + case 3324: + break block10; + case 3325: + break block; + case 3326: + break block10; + case 3327: + break block; + case 3328: + break block10; + case 3329: + break block; + case 3330: + break block10; + case 3331: + break block; + case 3332: + break block10; + case 3333: + break block; + case 3334: + break block10; + case 3335: + break block; + case 3336: + break block10; + case 3337: + break block; + case 3338: + break block10; + case 3339: + break block; + case 3340: + break block10; + case 3341: + break block; + case 3342: + break block10; + case 3343: + break block; + case 3344: + break block10; + case 3345: + break block; + case 3346: + break block10; + case 3347: + break block; + case 3348: + break block10; + case 3349: + break block; + case 3350: + break block10; + case 3351: + break block; + case 3352: + break block10; + case 3353: + break block; + case 3354: + break block10; + case 3355: + break block; + case 3356: + break block10; + case 3357: + break block; + case 3358: + break block10; + case 3359: + break block; + case 3360: + break block10; + case 3361: + break block; + case 3362: + break block10; + case 3363: + break block; + case 3364: + break block10; + case 3365: + break block; + case 3366: + break block10; + case 3367: + break block; + case 3368: + break block10; + case 3369: + break block; + case 3370: + break block10; + case 3371: + break block; + case 3372: + break block10; + case 3373: + break block; + case 3374: + break block10; + case 3375: + break block; + case 3376: + break block10; + case 3377: + break block; + case 3378: + break block10; + case 3379: + break block; + case 3380: + break block10; + case 3381: + break block; + case 3382: + break block10; + case 3383: + break block; + case 3384: + break block10; + case 3385: + break block; + case 3386: + break block10; + case 3387: + break block; + case 3388: + break block10; + case 3389: + break block; + case 3390: + break block10; + case 3391: + break block; + case 3392: + break block10; + case 3393: + break block; + case 3394: + break block10; + case 3395: + break block; + case 3396: + break block10; + case 3397: + break block; + case 3398: + break block10; + case 3399: + break block; + case 3400: + break block10; + case 3401: + break block; + case 3402: + break block10; + case 3403: + break block; + case 3404: + break block10; + case 3405: + break block; + case 3406: + break block10; + case 3407: + break block; + case 3408: + break block10; + case 3409: + break block; + case 3410: + break block10; + case 3411: + break block; + case 3412: + break block10; + case 3413: + break block; + case 3414: + break block10; + case 3415: + break block; + case 3416: + break block10; + case 3417: + break block; + case 3418: + break block10; + case 3419: + break block; + case 3420: + break block10; + case 3421: + break block; + case 3422: + break block10; + case 3423: + break block; + case 3424: + break block10; + case 3425: + break block; + case 3426: + break block10; + case 3427: + break block; + case 3428: + break block10; + case 3429: + break block; + case 3430: + break block10; + case 3431: + break block; + case 3432: + break block10; + case 3433: + break block; + case 3434: + break block10; + case 3435: + break block; + case 3436: + break block10; + case 3437: + break block; + case 3438: + break block10; + case 3439: + break block; + case 3440: + break block10; + case 3441: + break block; + case 3442: + break block10; + case 3443: + break block; + case 3444: + break block10; + case 3445: + break block; + case 3446: + break block10; + case 3447: + break block; + case 3448: + break block10; + case 3449: + break block; + case 3450: + break block10; + case 3451: + break block; + case 3452: + break block10; + case 3453: + break block; + case 3454: + break block10; + case 3455: + break block; + case 3456: + break block10; + case 3457: + break block; + case 3458: + break block10; + case 3459: + break block; + case 3460: + break block10; + case 3461: + break block; + case 3462: + break block10; + case 3463: + break block; + case 3464: + break block10; + case 3465: + break block; + case 3466: + break block10; + case 3467: + break block; + case 3468: + break block10; + case 3469: + break block; + case 3470: + break block10; + case 3471: + break block; + case 3472: + break block10; + case 3473: + break block; + case 3474: + break block10; + case 3475: + break block; + case 3476: + break block10; + case 3477: + break block; + case 3478: + break block10; + case 3479: + break block; + case 3480: + break block10; + case 3481: + break block; + case 3482: + break block10; + case 3483: + break block; + case 3484: + break block10; + case 3485: + break block; + case 3486: + break block10; + case 3487: + break block; + case 3488: + break block10; + case 3489: + break block; + case 3490: + break block10; + case 3491: + break block; + case 3492: + break block10; + case 3493: + break block; + case 3494: + break block10; + case 3495: + break block; + case 3496: + break block10; + case 3497: + break block; + case 3498: + break block10; + case 3499: + break block; + case 3500: + break block10; + case 3501: + break block; + case 3502: + break block10; + case 3503: + break block; + case 3504: + break block10; + case 3505: + break block; + case 3506: + break block10; + case 3507: + break block; + case 3508: + break block10; + case 3509: + break block; + case 3510: + break block10; + case 3511: + break block; + case 3512: + break block10; + case 3513: + break block; + case 3514: + break block10; + case 3515: + break block; + case 3516: + break block10; + case 3517: + break block; + case 3518: + break block10; + case 3519: + break block; + case 3520: + break block10; + case 3521: + break block; + case 3522: + break block10; + case 3523: + break block; + case 3524: + break block10; + case 3525: + break block; + case 3526: + break block10; + case 3527: + break block; + case 3528: + break block10; + case 3529: + break block; + case 3530: + break block10; + case 3531: + break block; + case 3532: + break block10; + case 3533: + break block; + case 3534: + break block10; + case 3535: + break block; + case 3536: + break block10; + case 3537: + break block; + case 3538: + break block10; + case 3539: + break block; + case 3540: + break block10; + case 3541: + break block; + case 3542: + break block10; + case 3543: + break block; + case 3544: + break block10; + case 3545: + break block; + case 3546: + break block10; + case 3547: + break block; + case 3548: + break block10; + case 3549: + break block; + case 3550: + break block10; + case 3551: + break block; + case 3552: + break block10; + case 3553: + break block; + case 3554: + break block10; + case 3555: + break block; + case 3556: + break block10; + case 3557: + break block; + case 3558: + break block10; + case 3559: + break block; + case 3560: + break block10; + case 3561: + break block; + case 3562: + break block10; + case 3563: + break block; + case 3564: + break block10; + case 3565: + break block; + case 3566: + break block10; + case 3567: + break block; + case 3568: + break block10; + case 3569: + break block; + case 3570: + break block10; + case 3571: + break block; + case 3572: + break block10; + case 3573: + break block; + case 3574: + break block10; + case 3575: + break block; + case 3576: + break block10; + case 3577: + break block; + case 3578: + break block10; + case 3579: + break block; + case 3580: + break block10; + case 3581: + break block; + case 3582: + break block10; + case 3583: + break block; + case 3584: + break block10; + case 3585: + break block; + case 3586: + break block10; + case 3587: + break block; + case 3588: + break block10; + case 3589: + break block; + case 3590: + break block10; + case 3591: + break block; + case 3592: + break block10; + case 3593: + break block; + case 3594: + break block10; + case 3595: + break block; + case 3596: + break block10; + case 3597: + break block; + case 3598: + break block10; + case 3599: + break block; + case 3600: + break block10; + case 3601: + break block; + case 3602: + break block10; + case 3603: + break block; + case 3604: + break block10; + case 3605: + break block; + case 3606: + break block10; + case 3607: + break block; + case 3608: + break block10; + case 3609: + break block; + case 3610: + break block10; + case 3611: + break block; + case 3612: + break block10; + case 3613: + break block; + case 3614: + break block10; + case 3615: + break block; + case 3616: + break block10; + case 3617: + break block; + case 3618: + break block10; + case 3619: + break block; + case 3620: + break block10; + case 3621: + break block; + case 3622: + break block10; + case 3623: + break block; + case 3624: + break block10; + case 3625: + break block; + case 3626: + break block10; + case 3627: + break block; + case 3628: + break block10; + case 3629: + break block; + case 3630: + break block10; + case 3631: + break block; + case 3632: + break block10; + case 3633: + break block; + case 3634: + break block10; + case 3635: + break block; + case 3636: + break block10; + case 3637: + break block; + case 3638: + break block10; + case 3639: + break block; + case 3640: + break block10; + case 3641: + break block; + case 3642: + break block10; + case 3643: + break block; + case 3644: + break block10; + case 3645: + break block; + case 3646: + break block10; + case 3647: + break block; + case 3648: + break block10; + case 3649: + break block; + case 3650: + break block10; + case 3651: + break block; + case 3652: + break block10; + case 3653: + break block; + case 3654: + break block10; + case 3655: + break block; + case 3656: + break block10; + case 3657: + break block; + case 3658: + break block10; + case 3659: + break block; + case 3660: + break block10; + case 3661: + break block; + case 3662: + break block10; + case 3663: + break block; + case 3664: + break block10; + case 3665: + break block; + case 3666: + break block10; + case 3667: + break block; + case 3668: + break block10; + case 3669: + break block; + case 3670: + break block10; + case 3671: + break block; + case 3672: + break block10; + case 3673: + break block; + case 3674: + break block10; + case 3675: + break block; + case 3676: + break block10; + case 3677: + break block; + case 3678: + break block10; + case 3679: + break block; + case 3680: + break block10; + case 3681: + break block; + case 3682: + break block10; + case 3683: + break block; + case 3684: + break block10; + case 3685: + break block; + case 3686: + break block10; + case 3687: + break block; + case 3688: + break block10; + case 3689: + break block; + case 3690: + break block10; + case 3691: + break block; + case 3692: + break block10; + case 3693: + break block; + case 3694: + break block10; + case 3695: + break block; + case 3696: + break block10; + case 3697: + break block; + case 3698: + break block10; + case 3699: + break block; + case 3700: + break block10; + case 3701: + break block; + case 3702: + break block10; + case 3703: + break block; + case 3704: + break block10; + case 3705: + break block; + case 3706: + break block10; + case 3707: + break block; + case 3708: + break block10; + case 3709: + break block; + case 3710: + break block10; + case 3711: + break block; + case 3712: + break block10; + case 3713: + break block; + case 3714: + break block10; + case 3715: + break block; + case 3716: + break block10; + case 3717: + break block; + case 3718: + break block10; + case 3719: + break block; + case 3720: + break block10; + case 3721: + break block; + case 3722: + break block10; + case 3723: + break block; + case 3724: + break block10; + case 3725: + break block; + case 3726: + break block10; + case 3727: + break block; + case 3728: + break block10; + case 3729: + break block; + case 3730: + break block10; + case 3731: + break block; + case 3732: + break block10; + case 3733: + break block; + case 3734: + break block10; + case 3735: + break block; + case 3736: + break block10; + case 3737: + break block; + case 3738: + break block10; + case 3739: + break block; + case 3740: + break block10; + case 3741: + break block; + case 3742: + break block10; + case 3743: + break block; + case 3744: + break block10; + case 3745: + break block; + case 3746: + break block10; + case 3747: + break block; + case 3748: + break block10; + case 3749: + break block; + case 3750: + break block10; + case 3751: + break block; + case 3752: + break block10; + case 3753: + break block; + case 3754: + break block10; + case 3755: + break block; + case 3756: + break block10; + case 3757: + break block; + case 3758: + break block10; + case 3759: + break block; + case 3760: + break block10; + case 3761: + break block; + case 3762: + break block10; + case 3763: + break block; + case 3764: + break block10; + case 3765: + break block; + case 3766: + break block10; + case 3767: + break block; + case 3768: + break block10; + case 3769: + break block; + case 3770: + break block10; + case 3771: + break block; + case 3772: + break block10; + case 3773: + break block; + case 3774: + break block10; + case 3775: + break block; + case 3776: + break block10; + case 3777: + break block; + case 3778: + break block10; + case 3779: + break block; + case 3780: + break block10; + case 3781: + break block; + case 3782: + break block10; + case 3783: + break block; + case 3784: + break block10; + case 3785: + break block; + case 3786: + break block10; + case 3787: + break block; + case 3788: + break block10; + case 3789: + break block; + case 3790: + break block10; + case 3791: + break block; + case 3792: + break block10; + case 3793: + break block; + case 3794: + break block10; + case 3795: + break block; + case 3796: + break block10; + case 3797: + break block; + case 3798: + break block10; + case 3799: + break block; + case 3800: + break block10; + case 3801: + break block; + case 3802: + break block10; + case 3803: + break block; + case 3804: + break block10; + case 3805: + break block; + case 3806: + break block10; + case 3807: + break block; + case 3808: + break block10; + case 3809: + break block; + case 3810: + break block10; + case 3811: + break block; + case 3812: + break block10; + case 3813: + break block; + case 3814: + break block10; + case 3815: + break block; + case 3816: + break block10; + case 3817: + break block; + case 3818: + break block10; + case 3819: + break block; + case 3820: + break block10; + case 3821: + break block; + case 3822: + break block10; + case 3823: + break block; + case 3824: + break block10; + case 3825: + break block; + case 3826: + break block10; + case 3827: + break block; + case 3828: + break block10; + case 3829: + break block; + case 3830: + break block10; + case 3831: + break block; + case 3832: + break block10; + case 3833: + break block; + case 3834: + break block10; + case 3835: + break block; + case 3836: + break block10; + case 3837: + break block; + case 3838: + break block10; + case 3839: + break block; + case 3840: + break block10; + case 3841: + break block; + case 3842: + break block10; + case 3843: + break block; + case 3844: + break block10; + case 3845: + break block; + case 3846: + break block10; + case 3847: + break block; + case 3848: + break block10; + case 3849: + break block; + case 3850: + break block10; + case 3851: + break block; + case 3852: + break block10; + case 3853: + break block; + case 3854: + break block10; + case 3855: + break block; + case 3856: + break block10; + case 3857: + break block; + case 3858: + break block10; + case 3859: + break block; + case 3860: + break block10; + case 3861: + break block; + case 3862: + break block10; + case 3863: + break block; + case 3864: + break block10; + case 3865: + break block; + case 3866: + break block10; + case 3867: + break block; + case 3868: + break block10; + case 3869: + break block; + case 3870: + break block10; + case 3871: + break block; + case 3872: + break block10; + case 3873: + break block; + case 3874: + break block10; + case 3875: + break block; + case 3876: + break block10; + case 3877: + break block; + case 3878: + break block10; + case 3879: + break block; + case 3880: + break block10; + case 3881: + break block; + case 3882: + break block10; + case 3883: + break block; + case 3884: + break block10; + case 3885: + break block; + case 3886: + break block10; + case 3887: + break block; + case 3888: + break block10; + case 3889: + break block; + case 3890: + break block10; + case 3891: + break block; + case 3892: + break block10; + case 3893: + break block; + case 3894: + break block10; + case 3895: + break block; + case 3896: + break block10; + case 3897: + break block; + case 3898: + break block10; + case 3899: + break block; + case 3900: + break block10; + case 3901: + break block; + case 3902: + break block10; + case 3903: + break block; + case 3904: + break block10; + case 3905: + break block; + case 3906: + break block10; + case 3907: + break block; + case 3908: + break block10; + case 3909: + break block; + case 3910: + break block10; + case 3911: + break block; + case 3912: + break block10; + case 3913: + break block; + case 3914: + break block10; + case 3915: + break block; + case 3916: + break block10; + case 3917: + break block; + case 3918: + break block10; + case 3919: + break block; + case 3920: + break block10; + case 3921: + break block; + case 3922: + break block10; + case 3923: + break block; + case 3924: + break block10; + case 3925: + break block; + case 3926: + break block10; + case 3927: + break block; + case 3928: + break block10; + case 3929: + break block; + case 3930: + break block10; + case 3931: + break block; + case 3932: + break block10; + case 3933: + break block; + case 3934: + break block10; + case 3935: + break block; + case 3936: + break block10; + case 3937: + break block; + case 3938: + break block10; + case 3939: + break block; + case 3940: + break block10; + case 3941: + break block; + case 3942: + break block10; + case 3943: + break block; + case 3944: + break block10; + case 3945: + break block; + case 3946: + break block10; + case 3947: + break block; + case 3948: + break block10; + case 3949: + break block; + case 3950: + break block10; + case 3951: + break block; + case 3952: + break block10; + case 3953: + break block; + case 3954: + break block10; + case 3955: + break block; + case 3956: + break block10; + case 3957: + break block; + case 3958: + break block10; + case 3959: + break block; + case 3960: + break block10; + case 3961: + break block; + case 3962: + break block10; + case 3963: + break block; + case 3964: + break block10; + case 3965: + break block; + case 3966: + break block10; + case 3967: + break block; + case 3968: + break block10; + case 3969: + break block; + case 3970: + break block10; + case 3971: + break block; + case 3972: + break block10; + case 3973: + break block; + case 3974: + break block10; + case 3975: + break block; + case 3976: + break block10; + case 3977: + break block; + case 3978: + break block10; + case 3979: + break block; + case 3980: + break block10; + case 3981: + break block; + case 3982: + break block10; + case 3983: + break block; + case 3984: + break block10; + case 3985: + break block; + case 3986: + break block10; + case 3987: + break block; + case 3988: + break block10; + case 3989: + break block; + case 3990: + break block10; + case 3991: + break block; + case 3992: + break block10; + case 3993: + break block; + case 3994: + break block10; + case 3995: + break block; + case 3996: + break block10; + case 3997: + break block; + case 3998: + break block10; + case 3999: + break block; + case 4e3: + break block10; + case 4001: + break block; + case 4002: + break block10; + case 4003: + break block; + case 4004: + break block10; + case 4005: + break block; + case 4006: + break block10; + case 4007: + break block; + case 4008: + break block10; + case 4009: + break block; + case 4010: + break block10; + case 4011: + break block; + case 4012: + break block10; + case 4013: + break block; + case 4014: + break block10; + case 4015: + break block; + case 4016: + break block10; + case 4017: + break block; + case 4018: + break block10; + case 4019: + break block; + case 4020: + break block10; + case 4021: + break block; + case 4022: + break block10; + case 4023: + break block; + case 4024: + break block10; + case 4025: + break block; + case 4026: + break block10; + case 4027: + break block; + case 4028: + break block10; + case 4029: + break block; + case 4030: + break block10; + case 4031: + break block; + case 4032: + break block10; + case 4033: + break block; + case 4034: + break block10; + case 4035: + break block; + case 4036: + break block10; + case 4037: + break block; + case 4038: + break block10; + case 4039: + break block; + case 4040: + break block10; + case 4041: + break block; + case 4042: + break block10; + case 4043: + break block; + case 4044: + break block10; + case 4045: + break block; + case 4046: + break block10; + case 4047: + break block; + case 4048: + break block10; + case 4049: + break block; + case 4050: + break block10; + case 4051: + break block; + case 4052: + break block10; + case 4053: + break block; + case 4054: + break block10; + case 4055: + break block; + case 4056: + break block10; + case 4057: + break block; + case 4058: + break block10; + case 4059: + break block; + case 4060: + break block10; + case 4061: + break block; + case 4062: + break block10; + case 4063: + break block; + case 4064: + break block10; + case 4065: + break block; + case 4066: + break block10; + case 4067: + break block; + case 4068: + break block10; + case 4069: + break block; + case 4070: + break block10; + case 4071: + break block; + case 4072: + break block10; + case 4073: + break block; + case 4074: + break block10; + case 4075: + break block; + case 4076: + break block10; + case 4077: + break block; + case 4078: + break block10; + case 4079: + break block; + case 4080: + break block10; + case 4081: + break block; + case 4082: + break block10; + case 4083: + break block; + case 4084: + break block10; + case 4085: + break block; + case 4086: + break block10; + case 4087: + break block; + case 4088: + break block10; + case 4089: + break block; + case 4090: + break block10; + case 4091: + break block; + case 4092: + break block10; + case 4093: + break block; + case 4094: + break block10; + case 4095: + break block; + case 4096: + break block10; + case 4097: + break block; + case 4098: + break block10; + case 4099: + break block; + case 4100: + break block10; + case 4101: + break block; + case 4102: + break block10; + case 4103: + break block; + case 4104: + break block10; + case 4105: + break block; + case 4106: + break block10; + case 4107: + break block; + case 4108: + break block10; + case 4109: + break block; + case 4110: + break block10; + case 4111: + break block; + case 4112: + break block10; + case 4113: + break block; + case 4114: + break block10; + case 4115: + break block; + case 4116: + break block10; + case 4117: + break block; + case 4118: + break block10; + case 4119: + break block; + case 4120: + break block10; + case 4121: + break block; + case 4122: + break block10; + case 4123: + break block; + case 4124: + break block10; + case 4125: + break block; + case 4126: + break block10; + case 4127: + break block; + case 4128: + break block10; + case 4129: + break block; + case 4130: + break block10; + case 4131: + break block; + case 4132: + break block10; + case 4133: + break block; + case 4134: + break block10; + case 4135: + break block; + case 4136: + break block10; + case 4137: + break block; + case 4138: + break block10; + case 4139: + break block; + case 4140: + break block10; + case 4141: + break block; + case 4142: + break block10; + case 4143: + break block; + case 4144: + break block10; + case 4145: + break block; + case 4146: + break block10; + case 4147: + break block; + case 4148: + break block10; + case 4149: + break block; + case 4150: + break block10; + case 4151: + break block; + case 4152: + break block10; + case 4153: + break block; + case 4154: + break block10; + case 4155: + break block; + case 4156: + break block10; + case 4157: + break block; + case 4158: + break block10; + case 4159: + break block; + case 4160: + break block10; + case 4161: + break block; + case 4162: + break block10; + case 4163: + break block; + case 4164: + break block10; + case 4165: + break block; + case 4166: + break block10; + case 4167: + break block; + case 4168: + break block10; + case 4169: + break block; + case 4170: + break block10; + case 4171: + break block; + case 4172: + break block10; + case 4173: + break block; + case 4174: + break block10; + case 4175: + break block; + case 4176: + break block10; + case 4177: + break block; + case 4178: + break block10; + case 4179: + break block; + case 4180: + break block10; + case 4181: + break block; + case 4182: + break block10; + case 4183: + break block; + case 4184: + break block10; + case 4185: + break block; + case 4186: + break block10; + case 4187: + break block; + case 4188: + break block10; + case 4189: + break block; + case 4190: + break block10; + case 4191: + break block; + case 4192: + break block10; + case 4193: + break block; + case 4194: + break block10; + case 4195: + break block; + case 4196: + break block10; + case 4197: + break block; + case 4198: + break block10; + case 4199: + break block; + case 4200: + break block10; + case 4201: + break block; + case 4202: + break block10; + case 4203: + break block; + case 4204: + break block10; + case 4205: + break block; + case 4206: + break block10; + case 4207: + break block; + case 4208: + break block10; + case 4209: + break block; + case 4210: + break block10; + case 4211: + break block; + case 4212: + break block10; + case 4213: + break block; + case 4214: + break block10; + case 4215: + break block; + case 4216: + break block10; + case 4217: + break block; + case 4218: + break block10; + case 4219: + break block; + case 4220: + break block10; + case 4221: + break block; + case 4222: + break block10; + case 4223: + break block; + case 4224: + break block10; + case 4225: + break block; + case 4226: + break block10; + case 4227: + break block; + case 4228: + break block10; + case 4229: + break block; + case 4230: + break block10; + case 4231: + break block; + case 4232: + break block10; + case 4233: + break block; + case 4234: + break block10; + case 4235: + break block; + case 4236: + break block10; + case 4237: + break block; + case 4238: + break block10; + case 4239: + break block; + case 4240: + break block10; + case 4241: + break block; + case 4242: + break block10; + case 4243: + break block; + case 4244: + break block10; + case 4245: + break block; + case 4246: + break block10; + case 4247: + break block; + case 4248: + break block10; + case 4249: + break block; + case 4250: + break block10; + case 4251: + break block; + case 4252: + break block10; + case 4253: + break block; + case 4254: + break block10; + case 4255: + break block; + case 4256: + break block10; + case 4257: + break block; + case 4258: + break block10; + case 4259: + break block; + case 4260: + break block10; + case 4261: + break block; + case 4262: + break block10; + case 4263: + break block; + case 4264: + break block10; + case 4265: + break block; + case 4266: + break block10; + case 4267: + break block; + case 4268: + break block10; + case 4269: + break block; + case 4270: + break block10; + case 4271: + break block; + case 4272: + break block10; + case 4273: + break block; + case 4274: + break block10; + case 4275: + break block; + case 4276: + break block10; + case 4277: + break block; + case 4278: + break block10; + case 4279: + break block; + case 4280: + break block10; + case 4281: + break block; + case 4282: + break block10; + case 4283: + break block; + case 4284: + break block10; + case 4285: + break block; + case 4286: + break block10; + case 4287: + break block; + case 4288: + break block10; + case 4289: + break block; + case 4290: + break block10; + case 4291: + break block; + case 4292: + break block10; + case 4293: + break block; + case 4294: + break block10; + case 4295: + break block; + case 4296: + break block10; + case 4297: + break block; + case 4298: + break block10; + case 4299: + break block; + case 4300: + break block10; + case 4301: + break block; + case 4302: + break block10; + case 4303: + break block; + case 4304: + break block10; + case 4305: + break block; + case 4306: + break block10; + case 4307: + break block; + case 4308: + break block10; + case 4309: + break block; + case 4310: + break block10; + case 4311: + break block; + case 4312: + break block10; + case 4313: + break block; + case 4314: + break block10; + case 4315: + break block; + case 4316: + break block10; + case 4317: + break block; + case 4318: + break block10; + case 4319: + break block; + case 4320: + break block10; + case 4321: + break block; + case 4322: + break block10; + case 4323: + break block; + case 4324: + break block10; + case 4325: + break block; + case 4326: + break block10; + case 4327: + break block; + case 4328: + break block10; + case 4329: + break block; + case 4330: + break block10; + case 4331: + break block; + case 4332: + break block10; + case 4333: + break block; + case 4334: + break block10; + case 4335: + break block; + case 4336: + break block10; + case 4337: + break block; + case 4338: + break block10; + case 4339: + break block; + case 4340: + break block10; + case 4341: + break block; + case 4342: + break block10; + case 4343: + break block; + case 4344: + break block10; + case 4345: + break block; + case 4346: + break block10; + case 4347: + break block; + case 4348: + break block10; + case 4349: + break block; + case 4350: + break block10; + case 4351: + break block; + case 4352: + break block10; + case 4353: + break block; + case 4354: + break block10; + case 4355: + break block; + case 4356: + break block10; + case 4357: + break block; + case 4358: + break block10; + case 4359: + break block; + case 4360: + break block10; + case 4361: + break block; + case 4362: + break block10; + case 4363: + break block; + case 4364: + break block10; + case 4365: + break block; + case 4366: + break block10; + case 4367: + break block; + case 4368: + break block10; + case 4369: + break block; + case 4370: + break block10; + case 4371: + break block; + case 4372: + break block10; + case 4373: + break block; + case 4374: + break block10; + case 4375: + break block; + case 4376: + break block10; + case 4377: + break block; + case 4378: + break block10; + case 4379: + break block; + case 4380: + break block10; + case 4381: + break block; + case 4382: + break block10; + case 4383: + break block; + case 4384: + break block10; + case 4385: + break block; + case 4386: + break block10; + case 4387: + break block; + case 4388: + break block10; + case 4389: + break block; + case 4390: + break block10; + case 4391: + break block; + case 4392: + break block10; + case 4393: + break block; + case 4394: + break block10; + case 4395: + break block; + case 4396: + break block10; + case 4397: + break block; + case 4398: + break block10; + case 4399: + break block; + case 4400: + break block10; + case 4401: + break block; + case 4402: + break block10; + case 4403: + break block; + case 4404: + break block10; + case 4405: + break block; + case 4406: + break block10; + case 4407: + break block; + case 4408: + break block10; + case 4409: + break block; + case 4410: + break block10; + case 4411: + break block; + case 4412: + break block10; + case 4413: + break block; + case 4414: + break block10; + case 4415: + break block; + case 4416: + break block10; + case 4417: + break block; + case 4418: + break block10; + case 4419: + break block; + case 4420: + break block10; + case 4421: + break block; + case 4422: + break block10; + case 4423: + break block; + case 4424: + break block10; + case 4425: + break block; + case 4426: + break block10; + case 4427: + break block; + case 4428: + break block10; + case 4429: + break block; + case 4430: + break block10; + case 4431: + break block; + case 4432: + break block10; + case 4433: + break block; + case 4434: + break block10; + case 4435: + break block; + case 4436: + break block10; + case 4437: + break block; + case 4438: + break block10; + case 4439: + break block; + case 4440: + break block10; + case 4441: + break block; + case 4442: + break block10; + case 4443: + break block; + case 4444: + break block10; + case 4445: + break block; + case 4446: + break block10; + case 4447: + break block; + case 4448: + break block10; + case 4449: + break block; + case 4450: + break block10; + case 4451: + break block; + case 4452: + break block10; + case 4453: + break block; + case 4454: + break block10; + case 4455: + break block; + case 4456: + break block10; + case 4457: + break block; + case 4458: + break block10; + case 4459: + break block; + case 4460: + break block10; + case 4461: + break block; + case 4462: + break block10; + case 4463: + break block; + case 4464: + break block10; + case 4465: + break block; + case 4466: + break block10; + case 4467: + break block; + case 4468: + break block10; + case 4469: + break block; + case 4470: + break block10; + case 4471: + break block; + case 4472: + break block10; + case 4473: + break block; + case 4474: + break block10; + case 4475: + break block; + case 4476: + break block10; + case 4477: + break block; + case 4478: + break block10; + case 4479: + break block; + case 4480: + break block10; + case 4481: + break block; + case 4482: + break block10; + case 4483: + break block; + case 4484: + break block10; + case 4485: + break block; + case 4486: + break block10; + case 4487: + break block; + case 4488: + break block10; + case 4489: + break block; + case 4490: + break block10; + case 4491: + break block; + case 4492: + break block10; + case 4493: + break block; + case 4494: + break block10; + case 4495: + break block; + case 4496: + break block10; + case 4497: + break block; + case 4498: + break block10; + case 4499: + break block; + case 4500: + break block10; + case 4501: + break block; + case 4502: + break block10; + case 4503: + break block; + case 4504: + break block10; + case 4505: + break block; + case 4506: + break block10; + case 4507: + break block; + case 4508: + break block10; + case 4509: + break block; + case 4510: + break block10; + case 4511: + break block; + case 4512: + break block10; + case 4513: + break block; + case 4514: + break block10; + case 4515: + break block; + case 4516: + break block10; + case 4517: + break block; + case 4518: + break block10; + case 4519: + break block; + case 4520: + break block10; + case 4521: + break block; + case 4522: + break block10; + case 4523: + break block; + case 4524: + break block10; + case 4525: + break block; + case 4526: + break block10; + case 4527: + break block; + case 4528: + break block10; + case 4529: + break block; + case 4530: + break block10; + case 4531: + break block; + case 4532: + break block10; + case 4533: + break block; + case 4534: + break block10; + case 4535: + break block; + case 4536: + break block10; + case 4537: + break block; + case 4538: + break block10; + case 4539: + break block; + case 4540: + break block10; + case 4541: + break block; + case 4542: + break block10; + case 4543: + break block; + case 4544: + break block10; + case 4545: + break block; + case 4546: + break block10; + case 4547: + break block; + case 4548: + break block10; + case 4549: + break block; + case 4550: + break block10; + case 4551: + break block; + case 4552: + break block10; + case 4553: + break block; + case 4554: + break block10; + case 4555: + break block; + case 4556: + break block10; + case 4557: + break block; + case 4558: + break block10; + case 4559: + break block; + case 4560: + break block10; + case 4561: + break block; + case 4562: + break block10; + case 4563: + break block; + case 4564: + break block10; + case 4565: + break block; + case 4566: + break block10; + case 4567: + break block; + case 4568: + break block10; + case 4569: + break block; + case 4570: + break block10; + case 4571: + break block; + case 4572: + break block10; + case 4573: + break block; + case 4574: + break block10; + case 4575: + break block; + case 4576: + break block10; + case 4577: + break block; + case 4578: + break block10; + case 4579: + break block; + case 4580: + break block10; + case 4581: + break block; + case 4582: + break block10; + case 4583: + break block; + case 4584: + break block10; + case 4585: + break block; + case 4586: + break block10; + case 4587: + break block; + case 4588: + break block10; + case 4589: + break block; + case 4590: + break block10; + case 4591: + break block; + case 4592: + break block10; + case 4593: + break block; + case 4594: + break block10; + case 4595: + break block; + case 4596: + break block10; + case 4597: + break block; + case 4598: + break block10; + case 4599: + break block; + case 4600: + break block10; + case 4601: + break block; + case 4602: + break block10; + case 4603: + break block; + case 4604: + break block10; + case 4605: + break block; + case 4606: + break block10; + case 4607: + break block; + case 4608: + break block10; + case 4609: + break block; + case 4610: + break block10; + case 4611: + break block; + case 4612: + break block10; + case 4613: + break block; + case 4614: + break block10; + case 4615: + break block; + case 4616: + break block10; + case 4617: + break block; + case 4618: + break block10; + case 4619: + break block; + case 4620: + break block10; + case 4621: + break block; + case 4622: + break block10; + case 4623: + break block; + case 4624: + break block10; + case 4625: + break block; + case 4626: + break block10; + case 4627: + break block; + case 4628: + break block10; + case 4629: + break block; + case 4630: + break block10; + case 4631: + break block; + case 4632: + break block10; + case 4633: + break block; + case 4634: + break block10; + case 4635: + break block; + case 4636: + break block10; + case 4637: + break block; + case 4638: + break block10; + case 4639: + break block; + case 4640: + break block10; + case 4641: + break block; + case 4642: + break block10; + case 4643: + break block; + case 4644: + break block10; + case 4645: + break block; + case 4646: + break block10; + case 4647: + break block; + case 4648: + break block10; + case 4649: + break block; + case 4650: + break block10; + case 4651: + break block; + case 4652: + break block10; + case 4653: + break block; + case 4654: + break block10; + case 4655: + break block; + case 4656: + break block10; + case 4657: + break block; + case 4658: + break block10; + case 4659: + break block; + case 4660: + break block10; + case 4661: + break block; + case 4662: + break block10; + case 4663: + break block; + case 4664: + break block10; + case 4665: + break block; + case 4666: + break block10; + case 4667: + break block; + case 4668: + break block10; + case 4669: + break block; + case 4670: + break block10; + case 4671: + break block; + case 4672: + break block10; + case 4673: + break block; + case 4674: + break block10; + case 4675: + break block; + case 4676: + break block10; + case 4677: + break block; + case 4678: + break block10; + case 4679: + break block; + case 4680: + break block10; + case 4681: + break block; + case 4682: + break block10; + case 4683: + break block; + case 4684: + break block10; + case 4685: + break block; + case 4686: + break block10; + case 4687: + break block; + case 4688: + break block10; + case 4689: + break block; + case 4690: + break block10; + case 4691: + break block; + case 4692: + break block10; + case 4693: + break block; + case 4694: + break block10; + case 4695: + break block; + case 4696: + break block10; + case 4697: + break block; + case 4698: + break block10; + case 4699: + break block; + case 4700: + break block10; + case 4701: + break block; + case 4702: + break block10; + case 4703: + break block; + case 4704: + break block10; + case 4705: + break block; + case 4706: + break block10; + case 4707: + break block; + case 4708: + break block10; + case 4709: + break block; + case 4710: + break block10; + case 4711: + break block; + case 4712: + break block10; + case 4713: + break block; + case 4714: + break block10; + case 4715: + break block; + case 4716: + break block10; + case 4717: + break block; + case 4718: + break block10; + case 4719: + break block; + case 4720: + break block10; + case 4721: + break block; + case 4722: + break block10; + case 4723: + break block; + case 4724: + break block10; + case 4725: + break block; + case 4726: + break block10; + case 4727: + break block; + case 4728: + break block10; + case 4729: + break block; + case 4730: + break block10; + case 4731: + break block; + case 4732: + break block10; + case 4733: + break block; + case 4734: + break block10; + case 4735: + break block; + case 4736: + break block10; + case 4737: + break block; + case 4738: + break block10; + case 4739: + break block; + case 4740: + break block10; + case 4741: + break block; + case 4742: + break block10; + case 4743: + break block; + case 4744: + break block10; + case 4745: + break block; + case 4746: + break block10; + case 4747: + break block; + case 4748: + break block10; + case 4749: + break block; + case 4750: + break block10; + case 4751: + break block; + case 4752: + break block10; + case 4753: + break block; + case 4754: + break block10; + case 4755: + break block; + case 4756: + break block10; + case 4757: + break block; + case 4758: + break block10; + case 4759: + break block; + case 4760: + break block10; + case 4761: + break block; + case 4762: + break block10; + case 4763: + break block; + case 4764: + break block10; + case 4765: + break block; + case 4766: + break block10; + case 4767: + break block; + case 4768: + break block10; + case 4769: + break block; + case 4770: + break block10; + case 4771: + break block; + case 4772: + break block10; + case 4773: + break block; + case 4774: + break block10; + case 4775: + break block; + case 4776: + break block10; + case 4777: + break block; + case 4778: + break block10; + case 4779: + break block; + case 4780: + break block10; + case 4781: + break block; + case 4782: + break block10; + case 4783: + break block; + case 4784: + break block10; + case 4785: + break block; + case 4786: + break block10; + case 4787: + break block; + case 4788: + break block10; + case 4789: + break block; + case 4790: + break block10; + case 4791: + break block; + case 4792: + break block10; + case 4793: + break block; + case 4794: + break block10; + case 4795: + break block; + case 4796: + break block10; + case 4797: + break block; + case 4798: + break block10; + case 4799: + break block; + case 4800: + break block10; + case 4801: + break block; + case 4802: + break block10; + case 4803: + break block; + case 4804: + break block10; + case 4805: + break block; + case 4806: + break block10; + case 4807: + break block; + case 4808: + break block10; + case 4809: + break block; + case 4810: + break block10; + case 4811: + break block; + case 4812: + break block10; + case 4813: + break block; + case 4814: + break block10; + case 4815: + break block; + case 4816: + break block10; + case 4817: + break block; + case 4818: + break block10; + case 4819: + break block; + case 4820: + break block10; + case 4821: + break block; + case 4822: + break block10; + case 4823: + break block; + case 4824: + break block10; + case 4825: + break block; + case 4826: + break block10; + case 4827: + break block; + case 4828: + break block10; + case 4829: + break block; + case 4830: + break block10; + case 4831: + break block; + case 4832: + break block10; + case 4833: + break block; + case 4834: + break block10; + case 4835: + break block; + case 4836: + break block10; + case 4837: + break block; + case 4838: + break block10; + case 4839: + break block; + case 4840: + break block10; + case 4841: + break block; + case 4842: + break block10; + case 4843: + break block; + case 4844: + break block10; + case 4845: + break block; + case 4846: + break block10; + case 4847: + break block; + case 4848: + break block10; + case 4849: + break block; + case 4850: + break block10; + case 4851: + break block; + case 4852: + break block10; + case 4853: + break block; + case 4854: + break block10; + case 4855: + break block; + case 4856: + break block10; + case 4857: + break block; + case 4858: + break block10; + case 4859: + break block; + case 4860: + break block10; + case 4861: + break block; + case 4862: + break block10; + case 4863: + break block; + case 4864: + break block10; + case 4865: + break block; + case 4866: + break block10; + case 4867: + break block; + case 4868: + break block10; + case 4869: + break block; + case 4870: + break block10; + case 4871: + break block; + case 4872: + break block10; + case 4873: + break block; + case 4874: + break block10; + case 4875: + break block; + case 4876: + break block10; + case 4877: + break block; + case 4878: + break block10; + case 4879: + break block; + case 4880: + break block10; + case 4881: + break block; + case 4882: + break block10; + case 4883: + break block; + case 4884: + break block10; + case 4885: + break block; + case 4886: + break block10; + case 4887: + break block; + case 4888: + break block10; + case 4889: + break block; + case 4890: + break block10; + case 4891: + break block; + case 4892: + break block10; + case 4893: + break block; + case 4894: + break block10; + case 4895: + break block; + case 4896: + break block10; + case 4897: + break block; + case 4898: + break block10; + case 4899: + break block; + case 4900: + break block10; + case 4901: + break block; + case 4902: + break block10; + case 4903: + break block; + case 4904: + break block10; + case 4905: + break block; + case 4906: + break block10; + case 4907: + break block; + case 4908: + break block10; + case 4909: + break block; + case 4910: + break block10; + case 4911: + break block; + case 4912: + break block10; + case 4913: + break block; + case 4914: + break block10; + case 4915: + break block; + case 4916: + break block10; + case 4917: + break block; + case 4918: + break block10; + case 4919: + break block; + case 4920: + break block10; + case 4921: + break block; + case 4922: + break block10; + case 4923: + break block; + case 4924: + break block10; + case 4925: + break block; + case 4926: + break block10; + case 4927: + break block; + case 4928: + break block10; + case 4929: + break block; + case 4930: + break block10; + case 4931: + break block; + case 4932: + break block10; + case 4933: + break block; + case 4934: + break block10; + case 4935: + break block; + case 4936: + break block10; + case 4937: + break block; + case 4938: + break block10; + case 4939: + break block; + case 4940: + break block10; + case 4941: + break block; + case 4942: + break block10; + case 4943: + break block; + case 4944: + break block10; + case 4945: + break block; + case 4946: + break block10; + case 4947: + break block; + case 4948: + break block10; + case 4949: + break block; + case 4950: + break block10; + case 4951: + break block; + case 4952: + break block10; + case 4953: + break block; + case 4954: + break block10; + case 4955: + break block; + case 4956: + break block10; + case 4957: + break block; + case 4958: + break block10; + case 4959: + break block; + case 4960: + break block10; + case 4961: + break block; + case 4962: + break block10; + case 4963: + break block; + case 4964: + break block10; + case 4965: + break block; + case 4966: + break block10; + case 4967: + break block; + case 4968: + break block10; + case 4969: + break block; + case 4970: + break block10; + case 4971: + break block; + case 4972: + break block10; + case 4973: + break block; + case 4974: + break block10; + case 4975: + break block; + case 4976: + break block10; + case 4977: + break block; + case 4978: + break block10; + case 4979: + break block; + case 4980: + break block10; + case 4981: + break block; + case 4982: + break block10; + case 4983: + break block; + case 4984: + break block10; + case 4985: + break block; + case 4986: + break block10; + case 4987: + break block; + case 4988: + break block10; + case 4989: + break block; + case 4990: + break block10; + case 4991: + break block; + case 4992: + break block10; + case 4993: + break block; + case 4994: + break block10; + case 4995: + break block; + case 4996: + break block10; + case 4997: + break block; + case 4998: + break block10; + case 4999: + break block; + case 5e3: + break block10; + case 5001: + break block; + case 5002: + break block10; + case 5003: + break block; + case 5004: + break block10; + case 5005: + break block; + case 5006: + break block10; + case 5007: + break block; + case 5008: + break block10; + case 5009: + break block; + case 5010: + break block10; + case 5011: + break block; + case 5012: + break block10; + case 5013: + break block; + case 5014: + break block10; + case 5015: + break block; + case 5016: + break block10; + case 5017: + break block; + case 5018: + break block10; + case 5019: + break block; + case 5020: + break block10; + case 5021: + break block; + case 5022: + break block10; + case 5023: + break block; + case 5024: + break block10; + case 5025: + break block; + case 5026: + break block10; + case 5027: + break block; + case 5028: + break block10; + case 5029: + break block; + case 5030: + break block10; + case 5031: + break block; + case 5032: + break block10; + case 5033: + break block; + case 5034: + break block10; + case 5035: + break block; + case 5036: + break block10; + case 5037: + break block; + case 5038: + break block10; + case 5039: + break block; + case 5040: + break block10; + case 5041: + break block; + case 5042: + break block10; + case 5043: + break block; + case 5044: + break block10; + case 5045: + break block; + case 5046: + break block10; + case 5047: + break block; + case 5048: + break block10; + case 5049: + break block; + case 5050: + break block10; + case 5051: + break block; + case 5052: + break block10; + case 5053: + break block; + case 5054: + break block10; + case 5055: + break block; + case 5056: + break block10; + case 5057: + break block; + case 5058: + break block10; + case 5059: + break block; + case 5060: + break block10; + case 5061: + break block; + case 5062: + break block10; + case 5063: + break block; + case 5064: + break block10; + case 5065: + break block; + case 5066: + break block10; + case 5067: + break block; + case 5068: + break block10; + case 5069: + break block; + case 5070: + break block10; + case 5071: + break block; + case 5072: + break block10; + case 5073: + break block; + case 5074: + break block10; + case 5075: + break block; + case 5076: + break block10; + case 5077: + break block; + case 5078: + break block10; + case 5079: + break block; + case 5080: + break block10; + case 5081: + break block; + case 5082: + break block10; + case 5083: + break block; + case 5084: + break block10; + case 5085: + break block; + case 5086: + break block10; + case 5087: + break block; + case 5088: + break block10; + case 5089: + break block; + case 5090: + break block10; + case 5091: + break block; + case 5092: + break block10; + case 5093: + break block; + case 5094: + break block10; + case 5095: + break block; + case 5096: + break block10; + case 5097: + break block; + case 5098: + break block10; + case 5099: + break block; + case 5100: + break block10; + case 5101: + break block; + case 5102: + break block10; + case 5103: + break block; + case 5104: + break block10; + case 5105: + break block; + case 5106: + break block10; + case 5107: + break block; + case 5108: + break block10; + case 5109: + break block; + case 5110: + break block10; + case 5111: + break block; + case 5112: + break block10; + case 5113: + break block; + case 5114: + break block10; + case 5115: + break block; + case 5116: + break block10; + case 5117: + break block; + case 5118: + break block10; + case 5119: + break block; + case 5120: + break block10; + case 5121: + break block; + case 5122: + break block10; + case 5123: + break block; + case 5124: + break block10; + case 5125: + break block; + case 5126: + break block10; + case 5127: + break block; + case 5128: + break block10; + case 5129: + break block; + case 5130: + break block10; + case 5131: + break block; + case 5132: + break block10; + case 5133: + break block; + case 5134: + break block10; + case 5135: + break block; + case 5136: + break block10; + case 5137: + break block; + case 5138: + break block10; + case 5139: + break block; + case 5140: + break block10; + case 5141: + break block; + case 5142: + break block10; + case 5143: + break block; + case 5144: + break block10; + case 5145: + break block; + case 5146: + break block10; + case 5147: + break block; + case 5148: + break block10; + case 5149: + break block; + case 5150: + break block10; + case 5151: + break block; + case 5152: + break block10; + case 5153: + break block; + case 5154: + break block10; + case 5155: + break block; + case 5156: + break block10; + case 5157: + break block; + case 5158: + break block10; + case 5159: + break block; + case 5160: + break block10; + case 5161: + break block; + case 5162: + break block10; + case 5163: + break block; + case 5164: + break block10; + case 5165: + break block; + case 5166: + break block10; + case 5167: + break block; + case 5168: + break block10; + case 5169: + break block; + case 5170: + break block10; + case 5171: + break block; + case 5172: + break block10; + case 5173: + break block; + case 5174: + break block10; + case 5175: + break block; + case 5176: + break block10; + case 5177: + break block; + case 5178: + break block10; + case 5179: + break block; + case 5180: + break block10; + case 5181: + break block; + case 5182: + break block10; + case 5183: + break block; + case 5184: + break block10; + case 5185: + break block; + case 5186: + break block10; + case 5187: + break block; + case 5188: + break block10; + case 5189: + break block; + case 5190: + break block10; + case 5191: + break block; + case 5192: + break block10; + case 5193: + break block; + case 5194: + break block10; + case 5195: + break block; + case 5196: + break block10; + case 5197: + break block; + case 5198: + break block10; + case 5199: + break block; + case 5200: + break block10; + case 5201: + break block; + case 5202: + break block10; + case 5203: + break block; + case 5204: + break block10; + case 5205: + break block; + case 5206: + break block10; + case 5207: + break block; + case 5208: + break block10; + case 5209: + break block; + case 5210: + break block10; + case 5211: + break block; + case 5212: + break block10; + case 5213: + break block; + case 5214: + break block10; + case 5215: + break block; + case 5216: + break block10; + case 5217: + break block; + case 5218: + break block10; + case 5219: + break block; + case 5220: + break block10; + case 5221: + break block; + case 5222: + break block10; + case 5223: + break block; + case 5224: + break block10; + case 5225: + break block; + case 5226: + break block10; + case 5227: + break block; + case 5228: + break block10; + case 5229: + break block; + case 5230: + break block10; + case 5231: + break block; + case 5232: + break block10; + case 5233: + break block; + case 5234: + break block10; + case 5235: + break block; + case 5236: + break block10; + case 5237: + break block; + case 5238: + break block10; + case 5239: + break block; + case 5240: + break block10; + case 5241: + break block; + case 5242: + break block10; + case 5243: + break block; + case 5244: + break block10; + case 5245: + break block; + case 5246: + break block10; + case 5247: + break block; + case 5248: + break block10; + case 5249: + break block; + case 5250: + break block10; + case 5251: + break block; + case 5252: + break block10; + case 5253: + break block; + case 5254: + break block10; + case 5255: + break block; + case 5256: + break block10; + case 5257: + break block; + case 5258: + break block10; + case 5259: + break block; + case 5260: + break block10; + case 5261: + break block; + case 5262: + break block10; + case 5263: + break block; + case 5264: + break block10; + case 5265: + break block; + case 5266: + break block10; + case 5267: + break block; + case 5268: + break block10; + case 5269: + break block; + case 5270: + break block10; + case 5271: + break block; + case 5272: + break block10; + case 5273: + break block; + case 5274: + break block10; + case 5275: + break block; + case 5276: + break block10; + case 5277: + break block; + case 5278: + break block10; + case 5279: + break block; + case 5280: + break block10; + case 5281: + break block; + case 5282: + break block10; + case 5283: + break block; + case 5284: + break block10; + case 5285: + break block; + case 5286: + break block10; + case 5287: + break block; + case 5288: + break block10; + case 5289: + break block; + case 5290: + break block10; + case 5291: + break block; + case 5292: + break block10; + case 5293: + break block; + case 5294: + break block10; + case 5295: + break block; + case 5296: + break block10; + case 5297: + break block; + case 5298: + break block10; + case 5299: + break block; + case 5300: + break block10; + case 5301: + break block; + case 5302: + break block10; + case 5303: + break block; + case 5304: + break block10; + case 5305: + break block; + case 5306: + break block10; + case 5307: + break block; + case 5308: + break block10; + case 5309: + break block; + case 5310: + break block10; + case 5311: + break block; + case 5312: + break block10; + case 5313: + break block; + case 5314: + break block10; + case 5315: + break block; + case 5316: + break block10; + case 5317: + break block; + case 5318: + break block10; + case 5319: + break block; + case 5320: + break block10; + case 5321: + break block; + case 5322: + break block10; + case 5323: + break block; + case 5324: + break block10; + case 5325: + break block; + case 5326: + break block10; + case 5327: + break block; + case 5328: + break block10; + case 5329: + break block; + case 5330: + break block10; + case 5331: + break block; + case 5332: + break block10; + case 5333: + break block; + case 5334: + break block10; + case 5335: + break block; + case 5336: + break block10; + case 5337: + break block; + case 5338: + break block10; + case 5339: + break block; + case 5340: + break block10; + case 5341: + break block; + case 5342: + break block10; + case 5343: + break block; + case 5344: + break block10; + case 5345: + break block; + case 5346: + break block10; + case 5347: + break block; + case 5348: + break block10; + case 5349: + break block; + case 5350: + break block10; + case 5351: + break block; + case 5352: + break block10; + case 5353: + break block; + case 5354: + break block10; + case 5355: + break block; + case 5356: + break block10; + case 5357: + break block; + case 5358: + break block10; + case 5359: + break block; + case 5360: + break block10; + case 5361: + break block; + case 5362: + break block10; + case 5363: + break block; + case 5364: + break block10; + case 5365: + break block; + case 5366: + break block10; + case 5367: + break block; + case 5368: + break block10; + case 5369: + break block; + case 5370: + break block10; + case 5371: + break block; + case 5372: + break block10; + case 5373: + break block; + case 5374: + break block10; + case 5375: + break block; + case 5376: + break block10; + case 5377: + break block; + case 5378: + break block10; + case 5379: + break block; + case 5380: + break block10; + case 5381: + break block; + case 5382: + break block10; + case 5383: + break block; + case 5384: + break block10; + case 5385: + break block; + case 5386: + break block10; + case 5387: + break block; + case 5388: + break block10; + case 5389: + break block; + case 5390: + break block10; + case 5391: + break block; + case 5392: + break block10; + case 5393: + break block; + case 5394: + break block10; + case 5395: + break block; + case 5396: + break block10; + case 5397: + break block; + case 5398: + break block10; + case 5399: + break block; + case 5400: + break block10; + case 5401: + break block; + case 5402: + break block10; + case 5403: + break block; + case 5404: + break block10; + case 5405: + break block; + case 5406: + break block10; + case 5407: + break block; + case 5408: + break block10; + case 5409: + break block; + case 5410: + break block10; + case 5411: + break block; + case 5412: + break block10; + case 5413: + break block; + case 5414: + break block10; + case 5415: + break block; + case 5416: + break block10; + case 5417: + break block; + case 5418: + break block10; + case 5419: + break block; + case 5420: + break block10; + case 5421: + break block; + case 5422: + break block10; + case 5423: + break block; + case 5424: + break block10; + case 5425: + break block; + case 5426: + break block10; + case 5427: + break block; + case 5428: + break block10; + case 5429: + break block; + case 5430: + break block10; + case 5431: + break block; + case 5432: + break block10; + case 5433: + break block; + case 5434: + break block10; + case 5435: + break block; + case 5436: + break block10; + case 5437: + break block; + case 5438: + break block10; + case 5439: + break block; + case 5440: + break block10; + case 5441: + break block; + case 5442: + break block10; + case 5443: + break block; + case 5444: + break block10; + case 5445: + break block; + case 5446: + break block10; + case 5447: + break block; + case 5448: + break block10; + case 5449: + break block; + case 5450: + break block10; + case 5451: + break block; + case 5452: + break block10; + case 5453: + break block; + case 5454: + break block10; + case 5455: + break block; + case 5456: + break block10; + case 5457: + break block; + case 5458: + break block10; + case 5459: + break block; + case 5460: + break block10; + case 5461: + break block; + case 5462: + break block10; + case 5463: + break block; + case 5464: + break block10; + case 5465: + break block; + case 5466: + break block10; + case 5467: + break block; + case 5468: + break block10; + case 5469: + break block; + case 5470: + break block10; + case 5471: + break block; + case 5472: + break block10; + case 5473: + break block; + case 5474: + break block10; + case 5475: + break block; + case 5476: + break block10; + case 5477: + break block; + case 5478: + break block10; + case 5479: + break block; + case 5480: + break block10; + case 5481: + break block; + case 5482: + break block10; + case 5483: + break block; + case 5484: + break block10; + case 5485: + break block; + case 5486: + break block10; + case 5487: + break block; + case 5488: + break block10; + case 5489: + break block; + case 5490: + break block10; + case 5491: + break block; + case 5492: + break block10; + case 5493: + break block; + case 5494: + break block10; + case 5495: + break block; + case 5496: + break block10; + case 5497: + break block; + case 5498: + break block10; + case 5499: + break block; + case 5500: + break block10; + case 5501: + break block; + case 5502: + break block10; + case 5503: + break block; + case 5504: + break block10; + case 5505: + break block; + case 5506: + break block10; + case 5507: + break block; + case 5508: + break block10; + case 5509: + break block; + case 5510: + break block10; + case 5511: + break block; + case 5512: + break block10; + case 5513: + break block; + case 5514: + break block10; + case 5515: + break block; + case 5516: + break block10; + case 5517: + break block; + case 5518: + break block10; + case 5519: + break block; + case 5520: + break block10; + case 5521: + break block; + case 5522: + break block10; + case 5523: + break block; + case 5524: + break block10; + case 5525: + break block; + case 5526: + break block10; + case 5527: + break block; + case 5528: + break block10; + case 5529: + break block; + case 5530: + break block10; + case 5531: + break block; + case 5532: + break block10; + case 5533: + break block; + case 5534: + break block10; + case 5535: + break block; + case 5536: + break block10; + case 5537: + break block; + case 5538: + break block10; + case 5539: + break block; + case 5540: + break block10; + case 5541: + break block; + case 5542: + break block10; + case 5543: + break block; + case 5544: + break block10; + case 5545: + break block; + case 5546: + break block10; + case 5547: + break block; + case 5548: + break block10; + case 5549: + break block; + case 5550: + break block10; + case 5551: + break block; + case 5552: + break block10; + case 5553: + break block; + case 5554: + break block10; + case 5555: + break block; + case 5556: + break block10; + case 5557: + break block; + case 5558: + break block10; + case 5559: + break block; + case 5560: + break block10; + case 5561: + break block; + case 5562: + break block10; + case 5563: + break block; + case 5564: + break block10; + case 5565: + break block; + case 5566: + break block10; + case 5567: + break block; + case 5568: + break block10; + case 5569: + break block; + case 5570: + break block10; + case 5571: + break block; + case 5572: + break block10; + case 5573: + break block; + case 5574: + break block10; + case 5575: + break block; + case 5576: + break block10; + case 5577: + break block; + case 5578: + break block10; + case 5579: + break block; + case 5580: + break block10; + case 5581: + break block; + case 5582: + break block10; + case 5583: + break block; + case 5584: + break block10; + case 5585: + break block; + case 5586: + break block10; + case 5587: + break block; + case 5588: + break block10; + case 5589: + break block; + case 5590: + break block10; + case 5591: + break block; + case 5592: + break block10; + case 5593: + break block; + case 5594: + break block10; + case 5595: + break block; + case 5596: + break block10; + case 5597: + break block; + case 5598: + break block10; + case 5599: + break block; + case 5600: + break block10; + case 5601: + break block; + case 5602: + break block10; + case 5603: + break block; + case 5604: + break block10; + case 5605: + break block; + case 5606: + break block10; + case 5607: + break block; + case 5608: + break block10; + case 5609: + break block; + case 5610: + break block10; + case 5611: + break block; + case 5612: + break block10; + case 5613: + break block; + case 5614: + break block10; + case 5615: + break block; + case 5616: + break block10; + case 5617: + break block; + case 5618: + break block10; + case 5619: + break block; + case 5620: + break block10; + case 5621: + break block; + case 5622: + break block10; + case 5623: + break block; + case 5624: + break block10; + case 5625: + break block; + case 5626: + break block10; + case 5627: + break block; + case 5628: + break block10; + case 5629: + break block; + case 5630: + break block10; + case 5631: + break block; + case 5632: + break block10; + case 5633: + break block; + case 5634: + break block10; + case 5635: + break block; + case 5636: + break block10; + case 5637: + break block; + case 5638: + break block10; + case 5639: + break block; + case 5640: + break block10; + case 5641: + break block; + case 5642: + break block10; + case 5643: + break block; + case 5644: + break block10; + case 5645: + break block; + case 5646: + break block10; + case 5647: + break block; + case 5648: + break block10; + case 5649: + break block; + case 5650: + break block10; + case 5651: + break block; + case 5652: + break block10; + case 5653: + break block; + case 5654: + break block10; + case 5655: + break block; + case 5656: + break block10; + case 5657: + break block; + case 5658: + break block10; + case 5659: + break block; + case 5660: + break block10; + case 5661: + break block; + case 5662: + break block10; + case 5663: + break block; + case 5664: + break block10; + case 5665: + break block; + case 5666: + break block10; + case 5667: + break block; + case 5668: + break block10; + case 5669: + break block; + case 5670: + break block10; + case 5671: + break block; + case 5672: + break block10; + case 5673: + break block; + case 5674: + break block10; + case 5675: + break block; + case 5676: + break block10; + case 5677: + break block; + case 5678: + break block10; + case 5679: + break block; + case 5680: + break block10; + case 5681: + break block; + case 5682: + break block10; + case 5683: + break block; + case 5684: + break block10; + case 5685: + break block; + case 5686: + break block10; + case 5687: + break block; + case 5688: + break block10; + case 5689: + break block; + case 5690: + break block10; + case 5691: + break block; + case 5692: + break block10; + case 5693: + break block; + case 5694: + break block10; + case 5695: + break block; + case 5696: + break block10; + case 5697: + break block; + case 5698: + break block10; + case 5699: + break block; + case 5700: + break block10; + case 5701: + break block; + case 5702: + break block10; + case 5703: + break block; + case 5704: + break block10; + case 5705: + break block; + case 5706: + break block10; + case 5707: + break block; + case 5708: + break block10; + case 5709: + break block; + case 5710: + break block10; + case 5711: + break block; + case 5712: + break block10; + case 5713: + break block; + case 5714: + break block10; + case 5715: + break block; + case 5716: + break block10; + case 5717: + break block; + case 5718: + break block10; + case 5719: + break block; + case 5720: + break block10; + case 5721: + break block; + case 5722: + break block10; + case 5723: + break block; + case 5724: + break block10; + case 5725: + break block; + case 5726: + break block10; + case 5727: + break block; + case 5728: + break block10; + case 5729: + break block; + case 5730: + break block10; + case 5731: + break block; + case 5732: + break block10; + case 5733: + break block; + case 5734: + break block10; + case 5735: + break block; + case 5736: + break block10; + case 5737: + break block; + case 5738: + break block10; + case 5739: + break block; + case 5740: + break block10; + case 5741: + break block; + case 5742: + break block10; + case 5743: + break block; + case 5744: + break block10; + case 5745: + break block; + case 5746: + break block10; + case 5747: + break block; + case 5748: + break block10; + case 5749: + break block; + case 5750: + break block10; + case 5751: + break block; + case 5752: + break block10; + case 5753: + break block; + case 5754: + break block10; + case 5755: + break block; + case 5756: + break block10; + case 5757: + break block; + case 5758: + break block10; + case 5759: + break block; + case 5760: + break block10; + case 5761: + break block; + case 5762: + break block10; + case 5763: + break block; + case 5764: + break block10; + case 5765: + break block; + case 5766: + break block10; + case 5767: + break block; + case 5768: + break block10; + case 5769: + break block; + case 5770: + break block10; + case 5771: + break block; + case 5772: + break block10; + case 5773: + break block; + case 5774: + break block10; + case 5775: + break block; + case 5776: + break block10; + case 5777: + break block; + case 5778: + break block10; + case 5779: + break block; + case 5780: + break block10; + case 5781: + break block; + case 5782: + break block10; + case 5783: + break block; + case 5784: + break block10; + case 5785: + break block; + case 5786: + break block10; + case 5787: + break block; + case 5788: + break block10; + case 5789: + break block; + case 5790: + break block10; + case 5791: + break block; + case 5792: + break block10; + case 5793: + break block; + case 5794: + break block10; + case 5795: + break block; + case 5796: + break block10; + case 5797: + break block; + case 5798: + break block10; + case 5799: + break block; + case 5800: + break block10; + case 5801: + break block; + case 5802: + break block10; + case 5803: + break block; + case 5804: + break block10; + case 5805: + break block; + case 5806: + break block10; + case 5807: + break block; + case 5808: + break block10; + case 5809: + break block; + case 5810: + break block10; + case 5811: + break block; + case 5812: + break block10; + case 5813: + break block; + case 5814: + break block10; + case 5815: + break block; + case 5816: + break block10; + case 5817: + break block; + case 5818: + break block10; + case 5819: + break block; + case 5820: + break block10; + case 5821: + break block; + case 5822: + break block10; + case 5823: + break block; + case 5824: + break block10; + case 5825: + break block; + case 5826: + break block10; + case 5827: + break block; + case 5828: + break block10; + case 5829: + break block; + case 5830: + break block10; + case 5831: + break block; + case 5832: + break block10; + case 5833: + break block; + case 5834: + break block10; + case 5835: + break block; + case 5836: + break block10; + case 5837: + break block; + case 5838: + break block10; + case 5839: + break block; + case 5840: + break block10; + case 5841: + break block; + case 5842: + break block10; + case 5843: + break block; + case 5844: + break block10; + case 5845: + break block; + case 5846: + break block10; + case 5847: + break block; + case 5848: + break block10; + case 5849: + break block; + case 5850: + break block10; + case 5851: + break block; + case 5852: + break block10; + case 5853: + break block; + case 5854: + break block10; + case 5855: + break block; + case 5856: + break block10; + case 5857: + break block; + case 5858: + break block10; + case 5859: + break block; + case 5860: + break block10; + case 5861: + break block; + case 5862: + break block10; + case 5863: + break block; + case 5864: + break block10; + case 5865: + break block; + case 5866: + break block10; + case 5867: + break block; + case 5868: + break block10; + case 5869: + break block; + case 5870: + break block10; + case 5871: + break block; + case 5872: + break block10; + case 5873: + break block; + case 5874: + break block10; + case 5875: + break block; + case 5876: + break block10; + case 5877: + break block; + case 5878: + break block10; + case 5879: + break block; + case 5880: + break block10; + case 5881: + break block; + case 5882: + break block10; + case 5883: + break block; + case 5884: + break block10; + case 5885: + break block; + case 5886: + break block10; + case 5887: + break block; + case 5888: + break block10; + case 5889: + break block; + case 5890: + break block10; + case 5891: + break block; + case 5892: + break block10; + case 5893: + break block; + case 5894: + break block10; + case 5895: + break block; + case 5896: + break block10; + case 5897: + break block; + case 5898: + break block10; + case 5899: + break block; + case 5900: + break block10; + case 5901: + break block; + case 5902: + break block10; + case 5903: + break block; + case 5904: + break block10; + case 5905: + break block; + case 5906: + break block10; + case 5907: + break block; + case 5908: + break block10; + case 5909: + break block; + case 5910: + break block10; + case 5911: + break block; + case 5912: + break block10; + case 5913: + break block; + case 5914: + break block10; + case 5915: + break block; + case 5916: + break block10; + case 5917: + break block; + case 5918: + break block10; + case 5919: + break block; + case 5920: + break block10; + case 5921: + break block; + case 5922: + break block10; + case 5923: + break block; + case 5924: + break block10; + case 5925: + break block; + case 5926: + break block10; + case 5927: + break block; + case 5928: + break block10; + case 5929: + break block; + case 5930: + break block10; + case 5931: + break block; + case 5932: + break block10; + case 5933: + break block; + case 5934: + break block10; + case 5935: + break block; + case 5936: + break block10; + case 5937: + break block; + case 5938: + break block10; + case 5939: + break block; + case 5940: + break block10; + case 5941: + break block; + case 5942: + break block10; + case 5943: + break block; + case 5944: + break block10; + case 5945: + break block; + case 5946: + break block10; + case 5947: + break block; + case 5948: + break block10; + case 5949: + break block; + case 5950: + break block10; + case 5951: + break block; + case 5952: + break block10; + case 5953: + break block; + case 5954: + break block10; + case 5955: + break block; + case 5956: + break block10; + case 5957: + break block; + case 5958: + break block10; + case 5959: + break block; + case 5960: + break block10; + case 5961: + break block; + case 5962: + break block10; + case 5963: + break block; + case 5964: + break block10; + case 5965: + break block; + case 5966: + break block10; + case 5967: + break block; + case 5968: + break block10; + case 5969: + break block; + case 5970: + break block10; + case 5971: + break block; + case 5972: + break block10; + case 5973: + break block; + case 5974: + break block10; + case 5975: + break block; + case 5976: + break block10; + case 5977: + break block; + case 5978: + break block10; + case 5979: + break block; + case 5980: + break block10; + case 5981: + break block; + case 5982: + break block10; + case 5983: + break block; + case 5984: + break block10; + case 5985: + break block; + case 5986: + break block10; + case 5987: + break block; + case 5988: + break block10; + case 5989: + break block; + case 5990: + break block10; + case 5991: + break block; + case 5992: + break block10; + case 5993: + break block; + case 5994: + break block10; + case 5995: + break block; + case 5996: + break block10; + case 5997: + break block; + case 5998: + break block10; + case 5999: + break block; + case 6e3: + break block10; + case 6001: + break block; + case 6002: + break block10; + case 6003: + break block; + case 6004: + break block10; + case 6005: + break block; + case 6006: + break block10; + case 6007: + break block; + case 6008: + break block10; + case 6009: + break block; + case 6010: + break block10; + case 6011: + break block; + case 6012: + break block10; + case 6013: + break block; + case 6014: + break block10; + case 6015: + break block; + case 6016: + break block10; + case 6017: + break block; + case 6018: + break block10; + case 6019: + break block; + case 6020: + break block10; + case 6021: + break block; + case 6022: + break block10; + case 6023: + break block; + case 6024: + break block10; + case 6025: + break block; + case 6026: + break block10; + case 6027: + break block; + case 6028: + break block10; + case 6029: + break block; + case 6030: + break block10; + case 6031: + break block; + case 6032: + break block10; + case 6033: + break block; + case 6034: + break block10; + case 6035: + break block; + case 6036: + break block10; + case 6037: + break block; + case 6038: + break block10; + case 6039: + break block; + case 6040: + break block10; + case 6041: + break block; + case 6042: + break block10; + case 6043: + break block; + case 6044: + break block10; + case 6045: + break block; + case 6046: + break block10; + case 6047: + break block; + case 6048: + break block10; + case 6049: + break block; + case 6050: + break block10; + case 6051: + break block; + case 6052: + break block10; + case 6053: + break block; + case 6054: + break block10; + case 6055: + break block; + case 6056: + break block10; + case 6057: + break block; + case 6058: + break block10; + case 6059: + break block; + case 6060: + break block10; + case 6061: + break block; + case 6062: + break block10; + case 6063: + break block; + case 6064: + break block10; + case 6065: + break block; + case 6066: + break block10; + case 6067: + break block; + case 6068: + break block10; + case 6069: + break block; + case 6070: + break block10; + case 6071: + break block; + case 6072: + break block10; + case 6073: + break block; + case 6074: + break block10; + case 6075: + break block; + case 6076: + break block10; + case 6077: + break block; + case 6078: + break block10; + case 6079: + break block; + case 6080: + break block10; + case 6081: + break block; + case 6082: + break block10; + case 6083: + break block; + case 6084: + break block10; + case 6085: + break block; + case 6086: + break block10; + case 6087: + break block; + case 6088: + break block10; + case 6089: + break block; + case 6090: + break block10; + case 6091: + break block; + case 6092: + break block10; + case 6093: + break block; + case 6094: + break block10; + case 6095: + break block; + case 6096: + break block10; + case 6097: + break block; + case 6098: + break block10; + case 6099: + break block; + case 6100: + break block10; + case 6101: + break block; + case 6102: + break block10; + case 6103: + break block; + case 6104: + break block10; + case 6105: + break block; + case 6106: + break block10; + case 6107: + break block; + case 6108: + break block10; + case 6109: + break block; + case 6110: + break block10; + case 6111: + break block; + case 6112: + break block10; + case 6113: + break block; + case 6114: + break block10; + case 6115: + break block; + case 6116: + break block10; + case 6117: + break block; + case 6118: + break block10; + case 6119: + break block; + case 6120: + break block10; + case 6121: + break block; + case 6122: + break block10; + case 6123: + break block; + case 6124: + break block10; + case 6125: + break block; + case 6126: + break block10; + case 6127: + break block; + case 6128: + break block10; + case 6129: + break block; + case 6130: + break block10; + case 6131: + break block; + case 6132: + break block10; + case 6133: + break block; + case 6134: + break block10; + case 6135: + break block; + case 6136: + break block10; + case 6137: + break block; + case 6138: + break block10; + case 6139: + break block; + case 6140: + break block10; + case 6141: + break block; + case 6142: + break block10; + case 6143: + break block; + case 6144: + break block10; + case 6145: + break block; + case 6146: + break block10; + case 6147: + break block; + case 6148: + break block10; + case 6149: + break block; + case 6150: + break block10; + case 6151: + break block; + case 6152: + break block10; + case 6153: + break block; + case 6154: + break block10; + case 6155: + break block; + case 6156: + break block10; + case 6157: + break block; + case 6158: + break block10; + case 6159: + break block; + case 6160: + break block10; + case 6161: + break block; + case 6162: + break block10; + case 6163: + break block; + case 6164: + break block10; + case 6165: + break block; + case 6166: + break block10; + case 6167: + break block; + case 6168: + break block10; + case 6169: + break block; + case 6170: + break block10; + case 6171: + break block; + case 6172: + break block10; + case 6173: + break block; + case 6174: + break block10; + case 6175: + break block; + case 6176: + break block10; + case 6177: + break block; + case 6178: + break block10; + case 6179: + break block; + case 6180: + break block10; + case 6181: + break block; + case 6182: + break block10; + case 6183: + break block; + case 6184: + break block10; + case 6185: + break block; + case 6186: + break block10; + case 6187: + break block; + case 6188: + break block10; + case 6189: + break block; + case 6190: + break block10; + case 6191: + break block; + case 6192: + break block10; + case 6193: + break block; + case 6194: + break block10; + case 6195: + break block; + case 6196: + break block10; + case 6197: + break block; + case 6198: + break block10; + case 6199: + break block; + case 6200: + break block10; + case 6201: + break block; + case 6202: + break block10; + case 6203: + break block; + case 6204: + break block10; + case 6205: + break block; + case 6206: + break block10; + case 6207: + break block; + case 6208: + break block10; + case 6209: + break block; + case 6210: + break block10; + case 6211: + break block; + case 6212: + break block10; + case 6213: + break block; + case 6214: + break block10; + case 6215: + break block; + case 6216: + break block10; + case 6217: + break block; + case 6218: + break block10; + case 6219: + break block; + case 6220: + break block10; + case 6221: + break block; + case 6222: + break block10; + case 6223: + break block; + case 6224: + break block10; + case 6225: + break block; + case 6226: + break block10; + case 6227: + break block; + case 6228: + break block10; + case 6229: + break block; + case 6230: + break block10; + case 6231: + break block; + case 6232: + break block10; + case 6233: + break block; + case 6234: + break block10; + case 6235: + break block; + case 6236: + break block10; + case 6237: + break block; + case 6238: + break block10; + case 6239: + break block; + case 6240: + break block10; + case 6241: + break block; + case 6242: + break block10; + case 6243: + break block; + case 6244: + break block10; + case 6245: + break block; + case 6246: + break block10; + case 6247: + break block; + case 6248: + break block10; + case 6249: + break block; + case 6250: + break block10; + case 6251: + break block; + case 6252: + break block10; + case 6253: + break block; + case 6254: + break block10; + case 6255: + break block; + case 6256: + break block10; + case 6257: + break block; + case 6258: + break block10; + case 6259: + break block; + case 6260: + break block10; + case 6261: + break block; + case 6262: + break block10; + case 6263: + break block; + case 6264: + break block10; + case 6265: + break block; + case 6266: + break block10; + case 6267: + break block; + case 6268: + break block10; + case 6269: + break block; + case 6270: + break block10; + case 6271: + break block; + case 6272: + break block10; + case 6273: + break block; + case 6274: + break block10; + case 6275: + break block; + case 6276: + break block10; + case 6277: + break block; + case 6278: + break block10; + case 6279: + break block; + case 6280: + break block10; + case 6281: + break block; + case 6282: + break block10; + case 6283: + break block; + case 6284: + break block10; + case 6285: + break block; + case 6286: + break block10; + case 6287: + break block; + case 6288: + break block10; + case 6289: + break block; + case 6290: + break block10; + case 6291: + break block; + case 6292: + break block10; + case 6293: + break block; + case 6294: + break block10; + case 6295: + break block; + case 6296: + break block10; + case 6297: + break block; + case 6298: + break block10; + case 6299: + break block; + case 6300: + break block10; + case 6301: + break block; + case 6302: + break block10; + case 6303: + break block; + case 6304: + break block10; + case 6305: + break block; + case 6306: + break block10; + case 6307: + break block; + case 6308: + break block10; + case 6309: + break block; + case 6310: + break block10; + case 6311: + break block; + case 6312: + break block10; + case 6313: + break block; + case 6314: + break block10; + case 6315: + break block; + case 6316: + break block10; + case 6317: + break block; + case 6318: + break block10; + case 6319: + break block; + case 6320: + break block10; + case 6321: + break block; + case 6322: + break block10; + case 6323: + break block; + case 6324: + break block10; + case 6325: + break block; + case 6326: + break block10; + case 6327: + break block; + case 6328: + break block10; + case 6329: + break block; + case 6330: + break block10; + case 6331: + break block; + case 6332: + break block10; + case 6333: + break block; + case 6334: + break block10; + case 6335: + break block; + case 6336: + break block10; + case 6337: + break block; + case 6338: + break block10; + case 6339: + break block; + case 6340: + break block10; + case 6341: + break block; + case 6342: + break block10; + case 6343: + break block; + case 6344: + break block10; + case 6345: + break block; + case 6346: + break block10; + case 6347: + break block; + case 6348: + break block10; + case 6349: + break block; + case 6350: + break block10; + case 6351: + break block; + case 6352: + break block10; + case 6353: + break block; + case 6354: + break block10; + case 6355: + break block; + case 6356: + break block10; + case 6357: + break block; + case 6358: + break block10; + case 6359: + break block; + case 6360: + break block10; + case 6361: + break block; + case 6362: + break block10; + case 6363: + break block; + case 6364: + break block10; + case 6365: + break block; + case 6366: + break block10; + case 6367: + break block; + case 6368: + break block10; + case 6369: + break block; + case 6370: + break block10; + case 6371: + break block; + case 6372: + break block10; + case 6373: + break block; + case 6374: + break block10; + case 6375: + break block; + case 6376: + break block10; + case 6377: + break block; + case 6378: + break block10; + case 6379: + break block; + case 6380: + break block10; + case 6381: + break block; + case 6382: + break block10; + case 6383: + break block; + case 6384: + break block10; + case 6385: + break block; + case 6386: + break block10; + case 6387: + break block; + case 6388: + break block10; + case 6389: + break block; + case 6390: + break block10; + case 6391: + break block; + case 6392: + break block10; + case 6393: + break block; + case 6394: + break block10; + case 6395: + break block; + case 6396: + break block10; + case 6397: + break block; + case 6398: + break block10; + case 6399: + break block; + case 6400: + break block10; + case 6401: + break block; + case 6402: + break block10; + case 6403: + break block; + case 6404: + break block10; + case 6405: + break block; + case 6406: + break block10; + case 6407: + break block; + case 6408: + break block10; + case 6409: + break block; + case 6410: + break block10; + case 6411: + break block; + case 6412: + break block10; + case 6413: + break block; + case 6414: + break block10; + case 6415: + break block; + case 6416: + break block10; + case 6417: + break block; + case 6418: + break block10; + case 6419: + break block; + case 6420: + break block10; + case 6421: + break block; + case 6422: + break block10; + case 6423: + break block; + case 6424: + break block10; + case 6425: + break block; + case 6426: + break block10; + case 6427: + break block; + case 6428: + break block10; + case 6429: + break block; + case 6430: + break block10; + case 6431: + break block; + case 6432: + break block10; + case 6433: + break block; + case 6434: + break block10; + case 6435: + break block; + case 6436: + break block10; + case 6437: + break block; + case 6438: + break block10; + case 6439: + break block; + case 6440: + break block10; + case 6441: + break block; + case 6442: + break block10; + case 6443: + break block; + case 6444: + break block10; + case 6445: + break block; + case 6446: + break block10; + case 6447: + break block; + case 6448: + break block10; + case 6449: + break block; + case 6450: + break block10; + case 6451: + break block; + case 6452: + break block10; + case 6453: + break block; + case 6454: + break block10; + case 6455: + break block; + case 6456: + break block10; + case 6457: + break block; + case 6458: + break block10; + case 6459: + break block; + case 6460: + break block10; + case 6461: + break block; + case 6462: + break block10; + case 6463: + break block; + case 6464: + break block10; + case 6465: + break block; + case 6466: + break block10; + case 6467: + break block; + case 6468: + break block10; + case 6469: + break block; + case 6470: + break block10; + case 6471: + break block; + case 6472: + break block10; + case 6473: + break block; + case 6474: + break block10; + case 6475: + break block; + case 6476: + break block10; + case 6477: + break block; + case 6478: + break block10; + case 6479: + break block; + case 6480: + break block10; + case 6481: + break block; + case 6482: + break block10; + case 6483: + break block; + case 6484: + break block10; + case 6485: + break block; + case 6486: + break block10; + case 6487: + break block; + case 6488: + break block10; + case 6489: + break block; + case 6490: + break block10; + case 6491: + break block; + case 6492: + break block10; + case 6493: + break block; + case 6494: + break block10; + case 6495: + break block; + case 6496: + break block10; + case 6497: + break block; + case 6498: + break block10; + case 6499: + break block; + case 6500: + break block10; + case 6501: + break block; + case 6502: + break block10; + case 6503: + break block; + case 6504: + break block10; + case 6505: + break block; + case 6506: + break block10; + case 6507: + break block; + case 6508: + break block10; + case 6509: + break block; + case 6510: + break block10; + case 6511: + break block; + case 6512: + break block10; + case 6513: + break block; + case 6514: + break block10; + case 6515: + break block; + case 6516: + break block10; + case 6517: + break block; + case 6518: + break block10; + case 6519: + break block; + case 6520: + break block10; + case 6521: + break block; + case 6522: + break block10; + case 6523: + break block; + case 6524: + break block10; + case 6525: + break block; + case 6526: + break block10; + case 6527: + break block; + case 6528: + break block10; + case 6529: + break block; + case 6530: + break block10; + case 6531: + break block; + case 6532: + break block10; + case 6533: + break block; + case 6534: + break block10; + case 6535: + break block; + case 6536: + break block10; + case 6537: + break block; + case 6538: + break block10; + case 6539: + break block; + case 6540: + break block10; + case 6541: + break block; + case 6542: + break block10; + case 6543: + break block; + case 6544: + break block10; + case 6545: + break block; + case 6546: + break block10; + case 6547: + break block; + case 6548: + break block10; + case 6549: + break block; + case 6550: + break block10; + case 6551: + break block; + case 6552: + break block10; + case 6553: + break block; + case 6554: + break block10; + case 6555: + break block; + case 6556: + break block10; + case 6557: + break block; + case 6558: + break block10; + case 6559: + break block; + case 6560: + break block10; + case 6561: + break block; + case 6562: + break block10; + case 6563: + break block; + case 6564: + break block10; + case 6565: + break block; + case 6566: + break block10; + case 6567: + break block; + case 6568: + break block10; + case 6569: + break block; + case 6570: + break block10; + case 6571: + break block; + case 6572: + break block10; + case 6573: + break block; + case 6574: + break block10; + case 6575: + break block; + case 6576: + break block10; + case 6577: + break block; + case 6578: + break block10; + case 6579: + break block; + case 6580: + break block10; + case 6581: + break block; + case 6582: + break block10; + case 6583: + break block; + case 6584: + break block10; + case 6585: + break block; + case 6586: + break block10; + case 6587: + break block; + case 6588: + break block10; + case 6589: + break block; + case 6590: + break block10; + case 6591: + break block; + case 6592: + break block10; + case 6593: + break block; + case 6594: + break block10; + case 6595: + break block; + case 6596: + break block10; + case 6597: + break block; + case 6598: + break block10; + case 6599: + break block; + case 6600: + break block10; + case 6601: + break block; + case 6602: + break block10; + case 6603: + break block; + case 6604: + break block10; + case 6605: + break block; + case 6606: + break block10; + case 6607: + break block; + case 6608: + break block10; + case 6609: + break block; + case 6610: + break block10; + case 6611: + break block; + case 6612: + break block10; + case 6613: + break block; + case 6614: + break block10; + case 6615: + break block; + case 6616: + break block10; + case 6617: + break block; + case 6618: + break block10; + case 6619: + break block; + case 6620: + break block10; + case 6621: + break block; + case 6622: + break block10; + case 6623: + break block; + case 6624: + break block10; + case 6625: + break block; + case 6626: + break block10; + case 6627: + break block; + case 6628: + break block10; + case 6629: + break block; + case 6630: + break block10; + case 6631: + break block; + case 6632: + break block10; + case 6633: + break block; + case 6634: + break block10; + case 6635: + break block; + case 6636: + break block10; + case 6637: + break block; + case 6638: + break block10; + case 6639: + break block; + case 6640: + break block10; + case 6641: + break block; + case 6642: + break block10; + case 6643: + break block; + case 6644: + break block10; + case 6645: + break block; + case 6646: + break block10; + case 6647: + break block; + case 6648: + break block10; + case 6649: + break block; + case 6650: + break block10; + case 6651: + break block; + case 6652: + break block10; + case 6653: + break block; + case 6654: + break block10; + case 6655: + break block; + case 6656: + break block10; + case 6657: + break block; + case 6658: + break block10; + case 6659: + break block; + case 6660: + break block10; + case 6661: + break block; + case 6662: + break block10; + case 6663: + break block; + case 6664: + break block10; + case 6665: + break block; + case 6666: + break block10; + case 6667: + break block; + case 6668: + break block10; + case 6669: + break block; + case 6670: + break block10; + case 6671: + break block; + case 6672: + break block10; + case 6673: + break block; + case 6674: + break block10; + case 6675: + break block; + case 6676: + break block10; + case 6677: + break block; + case 6678: + break block10; + case 6679: + break block; + case 6680: + break block10; + case 6681: + break block; + case 6682: + break block10; + case 6683: + break block; + case 6684: + break block10; + case 6685: + break block; + case 6686: + break block10; + case 6687: + break block; + case 6688: + break block10; + case 6689: + break block; + case 6690: + break block10; + case 6691: + break block; + case 6692: + break block10; + case 6693: + break block; + case 6694: + break block10; + case 6695: + break block; + case 6696: + break block10; + case 6697: + break block; + case 6698: + break block10; + case 6699: + break block; + case 6700: + break block10; + case 6701: + break block; + case 6702: + break block10; + case 6703: + break block; + case 6704: + break block10; + case 6705: + break block; + case 6706: + break block10; + case 6707: + break block; + case 6708: + break block10; + case 6709: + break block; + case 6710: + break block10; + case 6711: + break block; + case 6712: + break block10; + case 6713: + break block; + case 6714: + break block10; + case 6715: + break block; + case 6716: + break block10; + case 6717: + break block; + case 6718: + break block10; + case 6719: + break block; + case 6720: + break block10; + case 6721: + break block; + case 6722: + break block10; + case 6723: + break block; + case 6724: + break block10; + case 6725: + break block; + case 6726: + break block10; + case 6727: + break block; + case 6728: + break block10; + case 6729: + break block; + case 6730: + break block10; + case 6731: + break block; + case 6732: + break block10; + case 6733: + break block; + case 6734: + break block10; + case 6735: + break block; + case 6736: + break block10; + case 6737: + break block; + case 6738: + break block10; + case 6739: + break block; + case 6740: + break block10; + case 6741: + break block; + case 6742: + break block10; + case 6743: + break block; + case 6744: + break block10; + case 6745: + break block; + case 6746: + break block10; + case 6747: + break block; + case 6748: + break block10; + case 6749: + break block; + case 6750: + break block10; + case 6751: + break block; + case 6752: + break block10; + case 6753: + break block; + case 6754: + break block10; + case 6755: + break block; + case 6756: + break block10; + case 6757: + break block; + case 6758: + break block10; + case 6759: + break block; + case 6760: + break block10; + case 6761: + break block; + case 6762: + break block10; + case 6763: + break block; + case 6764: + break block10; + case 6765: + break block; + case 6766: + break block10; + case 6767: + break block; + case 6768: + break block10; + case 6769: + break block; + case 6770: + break block10; + case 6771: + break block; + case 6772: + break block10; + case 6773: + break block; + case 6774: + break block10; + case 6775: + break block; + case 6776: + break block10; + case 6777: + break block; + case 6778: + break block10; + case 6779: + break block; + case 6780: + break block10; + case 6781: + break block; + case 6782: + break block10; + case 6783: + break block; + case 6784: + break block10; + case 6785: + break block; + case 6786: + break block10; + case 6787: + break block; + case 6788: + break block10; + case 6789: + break block; + case 6790: + break block10; + case 6791: + break block; + case 6792: + break block10; + case 6793: + break block; + case 6794: + break block10; + case 6795: + break block; + case 6796: + break block10; + case 6797: + break block; + case 6798: + break block10; + case 6799: + break block; + case 6800: + break block10; + case 6801: + break block; + case 6802: + break block10; + case 6803: + break block; + case 6804: + break block10; + case 6805: + break block; + case 6806: + break block10; + case 6807: + break block; + case 6808: + break block10; + case 6809: + break block; + case 6810: + break block10; + case 6811: + break block; + case 6812: + break block10; + case 6813: + break block; + case 6814: + break block10; + case 6815: + break block; + case 6816: + break block10; + case 6817: + break block; + case 6818: + break block10; + case 6819: + break block; + case 6820: + break block10; + case 6821: + break block; + case 6822: + break block10; + case 6823: + break block; + case 6824: + break block10; + case 6825: + break block; + case 6826: + break block10; + case 6827: + break block; + case 6828: + break block10; + case 6829: + break block; + case 6830: + break block10; + case 6831: + break block; + case 6832: + break block10; + case 6833: + break block; + case 6834: + break block10; + case 6835: + break block; + case 6836: + break block10; + case 6837: + break block; + case 6838: + break block10; + case 6839: + break block; + case 6840: + break block10; + case 6841: + break block; + case 6842: + break block10; + case 6843: + break block; + case 6844: + break block10; + case 6845: + break block; + case 6846: + break block10; + case 6847: + break block; + case 6848: + break block10; + case 6849: + break block; + case 6850: + break block10; + case 6851: + break block; + case 6852: + break block10; + case 6853: + break block; + case 6854: + break block10; + case 6855: + break block; + case 6856: + break block10; + case 6857: + break block; + case 6858: + break block10; + case 6859: + break block; + case 6860: + break block10; + case 6861: + break block; + case 6862: + break block10; + case 6863: + break block; + case 6864: + break block10; + case 6865: + break block; + case 6866: + break block10; + case 6867: + break block; + case 6868: + break block10; + case 6869: + break block; + case 6870: + break block10; + case 6871: + break block; + case 6872: + break block10; + case 6873: + break block; + case 6874: + break block10; + case 6875: + break block; + case 6876: + break block10; + case 6877: + break block; + case 6878: + break block10; + case 6879: + break block; + case 6880: + break block10; + case 6881: + break block; + case 6882: + break block10; + case 6883: + break block; + case 6884: + break block10; + case 6885: + break block; + case 6886: + break block10; + case 6887: + break block; + case 6888: + break block10; + case 6889: + break block; + case 6890: + break block10; + case 6891: + break block; + case 6892: + break block10; + case 6893: + break block; + case 6894: + break block10; + case 6895: + break block; + case 6896: + break block10; + case 6897: + break block; + case 6898: + break block10; + case 6899: + break block; + case 6900: + break block10; + case 6901: + break block; + case 6902: + break block10; + case 6903: + break block; + case 6904: + break block10; + case 6905: + break block; + case 6906: + break block10; + case 6907: + break block; + case 6908: + break block10; + case 6909: + break block; + case 6910: + break block10; + case 6911: + break block; + case 6912: + break block10; + case 6913: + break block; + case 6914: + break block10; + case 6915: + break block; + case 6916: + break block10; + case 6917: + break block; + case 6918: + break block10; + case 6919: + break block; + case 6920: + break block10; + case 6921: + break block; + case 6922: + break block10; + case 6923: + break block; + case 6924: + break block10; + case 6925: + break block; + case 6926: + break block10; + case 6927: + break block; + case 6928: + break block10; + case 6929: + break block; + case 6930: + break block10; + case 6931: + break block; + case 6932: + break block10; + case 6933: + break block; + case 6934: + break block10; + case 6935: + break block; + case 6936: + break block10; + case 6937: + break block; + case 6938: + break block10; + case 6939: + break block; + case 6940: + break block10; + case 6941: + break block; + case 6942: + break block10; + case 6943: + break block; + case 6944: + break block10; + case 6945: + break block; + case 6946: + break block10; + case 6947: + break block; + case 6948: + break block10; + case 6949: + break block; + case 6950: + break block10; + case 6951: + break block; + case 6952: + break block10; + case 6953: + break block; + case 6954: + break block10; + case 6955: + break block; + case 6956: + break block10; + case 6957: + break block; + case 6958: + break block10; + case 6959: + break block; + case 6960: + break block10; + case 6961: + break block; + case 6962: + break block10; + case 6963: + break block; + case 6964: + break block10; + case 6965: + break block; + case 6966: + break block10; + case 6967: + break block; + case 6968: + break block10; + case 6969: + break block; + case 6970: + break block10; + case 6971: + break block; + case 6972: + break block10; + case 6973: + break block; + case 6974: + break block10; + case 6975: + break block; + case 6976: + break block10; + case 6977: + break block; + case 6978: + break block10; + case 6979: + break block; + case 6980: + break block10; + case 6981: + break block; + case 6982: + break block10; + case 6983: + break block; + case 6984: + break block10; + case 6985: + break block; + case 6986: + break block10; + case 6987: + break block; + case 6988: + break block10; + case 6989: + break block; + case 6990: + break block10; + case 6991: + break block; + case 6992: + break block10; + case 6993: + break block; + case 6994: + break block10; + case 6995: + break block; + case 6996: + break block10; + case 6997: + break block; + case 6998: + break block10; + case 6999: + break block; + case 7e3: + break block10; + case 7001: + break block; + case 7002: + break block10; + case 7003: + break block; + case 7004: + break block10; + case 7005: + break block; + case 7006: + break block10; + case 7007: + break block; + case 7008: + break block10; + case 7009: + break block; + case 7010: + break block10; + case 7011: + break block; + case 7012: + break block10; + case 7013: + break block; + case 7014: + break block10; + case 7015: + break block; + case 7016: + break block10; + case 7017: + break block; + case 7018: + break block10; + case 7019: + break block; + case 7020: + break block10; + case 7021: + break block; + case 7022: + break block10; + case 7023: + break block; + case 7024: + break block10; + case 7025: + break block; + case 7026: + break block10; + case 7027: + break block; + case 7028: + break block10; + case 7029: + break block; + case 7030: + break block10; + case 7031: + break block; + case 7032: + break block10; + case 7033: + break block; + case 7034: + break block10; + case 7035: + break block; + case 7036: + break block10; + case 7037: + break block; + case 7038: + break block10; + case 7039: + break block; + case 7040: + break block10; + case 7041: + break block; + case 7042: + break block10; + case 7043: + break block; + case 7044: + break block10; + case 7045: + break block; + case 7046: + break block10; + case 7047: + break block; + case 7048: + break block10; + case 7049: + break block; + case 7050: + break block10; + case 7051: + break block; + case 7052: + break block10; + case 7053: + break block; + case 7054: + break block10; + case 7055: + break block; + case 7056: + break block10; + case 7057: + break block; + case 7058: + break block10; + case 7059: + break block; + case 7060: + break block10; + case 7061: + break block; + case 7062: + break block10; + case 7063: + break block; + case 7064: + break block10; + case 7065: + break block; + case 7066: + break block10; + case 7067: + break block; + case 7068: + break block10; + case 7069: + break block; + case 7070: + break block10; + case 7071: + break block; + case 7072: + break block10; + case 7073: + break block; + case 7074: + break block10; + case 7075: + break block; + case 7076: + break block10; + case 7077: + break block; + case 7078: + break block10; + case 7079: + break block; + case 7080: + break block10; + case 7081: + break block; + case 7082: + break block10; + case 7083: + break block; + case 7084: + break block10; + case 7085: + break block; + case 7086: + break block10; + case 7087: + break block; + case 7088: + break block10; + case 7089: + break block; + case 7090: + break block10; + case 7091: + break block; + case 7092: + break block10; + case 7093: + break block; + case 7094: + break block10; + case 7095: + break block; + case 7096: + break block10; + case 7097: + break block; + case 7098: + break block10; + case 7099: + break block; + case 7100: + break block10; + case 7101: + break block; + case 7102: + break block10; + case 7103: + break block; + case 7104: + break block10; + case 7105: + break block; + case 7106: + break block10; + case 7107: + break block; + case 7108: + break block10; + case 7109: + break block; + case 7110: + break block10; + case 7111: + break block; + case 7112: + break block10; + case 7113: + break block; + case 7114: + break block10; + case 7115: + break block; + case 7116: + break block10; + case 7117: + break block; + case 7118: + break block10; + case 7119: + break block; + case 7120: + break block10; + case 7121: + break block; + case 7122: + break block10; + case 7123: + break block; + case 7124: + break block10; + case 7125: + break block; + case 7126: + break block10; + case 7127: + break block; + case 7128: + break block10; + case 7129: + break block; + case 7130: + break block10; + case 7131: + break block; + case 7132: + break block10; + case 7133: + break block; + case 7134: + break block10; + case 7135: + break block; + case 7136: + break block10; + case 7137: + break block; + case 7138: + break block10; + case 7139: + break block; + case 7140: + break block10; + case 7141: + break block; + case 7142: + break block10; + case 7143: + break block; + case 7144: + break block10; + case 7145: + break block; + case 7146: + break block10; + case 7147: + break block; + case 7148: + break block10; + case 7149: + break block; + case 7150: + break block10; + case 7151: + break block; + case 7152: + break block10; + case 7153: + break block; + case 7154: + break block10; + case 7155: + break block; + case 7156: + break block10; + case 7157: + break block; + case 7158: + break block10; + case 7159: + break block; + case 7160: + break block10; + case 7161: + break block; + case 7162: + break block10; + case 7163: + break block; + case 7164: + break block10; + case 7165: + break block; + case 7166: + break block10; + case 7167: + break block; + case 7168: + break block10; + case 7169: + break block; + case 7170: + break block10; + case 7171: + break block; + case 7172: + break block10; + case 7173: + break block; + case 7174: + break block10; + case 7175: + break block; + case 7176: + break block10; + case 7177: + break block; + case 7178: + break block10; + case 7179: + break block; + case 7180: + break block10; + case 7181: + break block; + case 7182: + break block10; + case 7183: + break block; + case 7184: + break block10; + case 7185: + break block; + case 7186: + break block10; + case 7187: + break block; + case 7188: + break block10; + case 7189: + break block; + case 7190: + break block10; + case 7191: + break block; + case 7192: + break block10; + case 7193: + break block; + case 7194: + break block10; + case 7195: + break block; + case 7196: + break block10; + case 7197: + break block; + case 7198: + break block10; + case 7199: + break block; + case 7200: + break block10; + case 7201: + break block; + case 7202: + break block10; + case 7203: + break block; + case 7204: + break block10; + case 7205: + break block; + case 7206: + break block10; + case 7207: + break block; + case 7208: + break block10; + case 7209: + break block; + case 7210: + break block10; + case 7211: + break block; + case 7212: + break block10; + case 7213: + break block; + case 7214: + break block10; + case 7215: + break block; + case 7216: + break block10; + case 7217: + break block; + case 7218: + break block10; + case 7219: + break block; + case 7220: + break block10; + case 7221: + break block; + case 7222: + break block10; + case 7223: + break block; + case 7224: + break block10; + case 7225: + break block; + case 7226: + break block10; + case 7227: + break block; + case 7228: + break block10; + case 7229: + break block; + case 7230: + break block10; + case 7231: + break block; + case 7232: + break block10; + case 7233: + break block; + case 7234: + break block10; + case 7235: + break block; + case 7236: + break block10; + case 7237: + break block; + case 7238: + break block10; + case 7239: + break block; + case 7240: + break block10; + case 7241: + break block; + case 7242: + break block10; + case 7243: + break block; + case 7244: + break block10; + case 7245: + break block; + case 7246: + break block10; + case 7247: + break block; + case 7248: + break block10; + case 7249: + break block; + case 7250: + break block10; + case 7251: + break block; + case 7252: + break block10; + case 7253: + break block; + case 7254: + break block10; + case 7255: + break block; + case 7256: + break block10; + case 7257: + break block; + case 7258: + break block10; + case 7259: + break block; + case 7260: + break block10; + case 7261: + break block; + case 7262: + break block10; + case 7263: + break block; + case 7264: + break block10; + case 7265: + break block; + case 7266: + break block10; + case 7267: + break block; + case 7268: + break block10; + case 7269: + break block; + case 7270: + break block10; + case 7271: + break block; + case 7272: + break block10; + case 7273: + break block; + case 7274: + break block10; + case 7275: + break block; + case 7276: + break block10; + case 7277: + break block; + case 7278: + break block10; + case 7279: + break block; + case 7280: + break block10; + case 7281: + break block; + case 7282: + break block10; + case 7283: + break block; + case 7284: + break block10; + case 7285: + break block; + case 7286: + break block10; + case 7287: + break block; + case 7288: + break block10; + case 7289: + break block; + case 7290: + break block10; + case 7291: + break block; + case 7292: + break block10; + case 7293: + break block; + case 7294: + break block10; + case 7295: + break block; + case 7296: + break block10; + case 7297: + break block; + case 7298: + break block10; + case 7299: + break block; + case 7300: + break block10; + case 7301: + break block; + case 7302: + break block10; + case 7303: + break block; + case 7304: + break block10; + case 7305: + break block; + case 7306: + break block10; + case 7307: + break block; + case 7308: + break block10; + case 7309: + break block; + case 7310: + break block10; + case 7311: + break block; + case 7312: + break block10; + case 7313: + break block; + case 7314: + break block10; + case 7315: + break block; + case 7316: + break block10; + case 7317: + break block; + case 7318: + break block10; + case 7319: + break block; + case 7320: + break block10; + case 7321: + break block; + case 7322: + break block10; + case 7323: + break block; + case 7324: + break block10; + case 7325: + break block; + case 7326: + break block10; + case 7327: + break block; + case 7328: + break block10; + case 7329: + break block; + case 7330: + break block10; + case 7331: + break block; + case 7332: + break block10; + case 7333: + break block; + case 7334: + break block10; + case 7335: + break block; + case 7336: + break block10; + case 7337: + break block; + case 7338: + break block10; + case 7339: + break block; + case 7340: + break block10; + case 7341: + break block; + case 7342: + break block10; + case 7343: + break block; + case 7344: + break block10; + case 7345: + break block; + case 7346: + break block10; + case 7347: + break block; + case 7348: + break block10; + case 7349: + break block; + case 7350: + break block10; + case 7351: + break block; + case 7352: + break block10; + case 7353: + break block; + case 7354: + break block10; + case 7355: + break block; + case 7356: + break block10; + case 7357: + break block; + case 7358: + break block10; + case 7359: + break block; + case 7360: + break block10; + case 7361: + break block; + case 7362: + break block10; + case 7363: + break block; + case 7364: + break block10; + case 7365: + break block; + case 7366: + break block10; + case 7367: + break block; + case 7368: + break block10; + case 7369: + break block; + case 7370: + break block10; + case 7371: + break block; + case 7372: + break block10; + case 7373: + break block; + case 7374: + break block10; + case 7375: + break block; + case 7376: + break block10; + case 7377: + break block; + case 7378: + break block10; + case 7379: + break block; + case 7380: + break block10; + case 7381: + break block; + case 7382: + break block10; + case 7383: + break block; + case 7384: + break block10; + case 7385: + break block; + case 7386: + break block10; + case 7387: + break block; + case 7388: + break block10; + case 7389: + break block; + case 7390: + break block10; + case 7391: + break block; + case 7392: + break block10; + case 7393: + break block; + case 7394: + break block10; + case 7395: + break block; + case 7396: + break block10; + case 7397: + break block; + case 7398: + break block10; + case 7399: + break block; + case 7400: + break block10; + case 7401: + break block; + case 7402: + break block10; + case 7403: + break block; + case 7404: + break block10; + case 7405: + break block; + case 7406: + break block10; + case 7407: + break block; + case 7408: + break block10; + case 7409: + break block; + case 7410: + break block10; + case 7411: + break block; + case 7412: + break block10; + case 7413: + break block; + case 7414: + break block10; + case 7415: + break block; + case 7416: + break block10; + case 7417: + break block; + case 7418: + break block10; + case 7419: + break block; + case 7420: + break block10; + case 7421: + break block; + case 7422: + break block10; + case 7423: + break block; + case 7424: + break block10; + case 7425: + break block; + case 7426: + break block10; + case 7427: + break block; + case 7428: + break block10; + case 7429: + break block; + case 7430: + break block10; + case 7431: + break block; + case 7432: + break block10; + case 7433: + break block; + case 7434: + break block10; + case 7435: + break block; + case 7436: + break block10; + case 7437: + break block; + case 7438: + break block10; + case 7439: + break block; + case 7440: + break block10; + case 7441: + break block; + case 7442: + break block10; + case 7443: + break block; + case 7444: + break block10; + case 7445: + break block; + case 7446: + break block10; + case 7447: + break block; + case 7448: + break block10; + case 7449: + break block; + case 7450: + break block10; + case 7451: + break block; + case 7452: + break block10; + case 7453: + break block; + case 7454: + break block10; + case 7455: + break block; + case 7456: + break block10; + case 7457: + break block; + case 7458: + break block10; + case 7459: + break block; + case 7460: + break block10; + case 7461: + break block; + case 7462: + break block10; + case 7463: + break block; + case 7464: + break block10; + case 7465: + break block; + case 7466: + break block10; + case 7467: + break block; + case 7468: + break block10; + case 7469: + break block; + case 7470: + break block10; + case 7471: + break block; + case 7472: + break block10; + case 7473: + break block; + case 7474: + break block10; + case 7475: + break block; + case 7476: + break block10; + case 7477: + break block; + case 7478: + break block10; + case 7479: + break block; + case 7480: + break block10; + case 7481: + break block; + case 7482: + break block10; + case 7483: + break block; + case 7484: + break block10; + case 7485: + break block; + case 7486: + break block10; + case 7487: + break block; + case 7488: + break block10; + case 7489: + break block; + case 7490: + break block10; + case 7491: + break block; + case 7492: + break block10; + case 7493: + break block; + case 7494: + break block10; + case 7495: + break block; + case 7496: + break block10; + case 7497: + break block; + case 7498: + break block10; + case 7499: + break block; + case 7500: + break block10; + case 7501: + break block; + case 7502: + break block10; + case 7503: + break block; + case 7504: + break block10; + case 7505: + break block; + case 7506: + break block10; + case 7507: + break block; + case 7508: + break block10; + case 7509: + break block; + case 7510: + break block10; + case 7511: + break block; + case 7512: + break block10; + case 7513: + break block; + case 7514: + break block10; + case 7515: + break block; + case 7516: + break block10; + case 7517: + break block; + case 7518: + break block10; + case 7519: + break block; + case 7520: + break block10; + case 7521: + break block; + case 7522: + break block10; + case 7523: + break block; + case 7524: + break block10; + case 7525: + break block; + case 7526: + break block10; + case 7527: + break block; + case 7528: + break block10; + case 7529: + break block; + case 7530: + break block10; + case 7531: + break block; + case 7532: + break block10; + case 7533: + break block; + case 7534: + break block10; + case 7535: + break block; + case 7536: + break block10; + case 7537: + break block; + case 7538: + break block10; + case 7539: + break block; + case 7540: + break block10; + case 7541: + break block; + case 7542: + break block10; + case 7543: + break block; + case 7544: + break block10; + case 7545: + break block; + case 7546: + break block10; + case 7547: + break block; + case 7548: + break block10; + case 7549: + break block; + case 7550: + break block10; + case 7551: + break block; + case 7552: + break block10; + case 7553: + break block; + case 7554: + break block10; + case 7555: + break block; + case 7556: + break block10; + case 7557: + break block; + case 7558: + break block10; + case 7559: + break block; + case 7560: + break block10; + case 7561: + break block; + case 7562: + break block10; + case 7563: + break block; + case 7564: + break block10; + case 7565: + break block; + case 7566: + break block10; + case 7567: + break block; + case 7568: + break block10; + case 7569: + break block; + case 7570: + break block10; + case 7571: + break block; + case 7572: + break block10; + case 7573: + break block; + case 7574: + break block10; + case 7575: + break block; + case 7576: + break block10; + case 7577: + break block; + case 7578: + break block10; + case 7579: + break block; + case 7580: + break block10; + case 7581: + break block; + case 7582: + break block10; + case 7583: + break block; + case 7584: + break block10; + case 7585: + break block; + case 7586: + break block10; + case 7587: + break block; + case 7588: + break block10; + case 7589: + break block; + case 7590: + break block10; + case 7591: + break block; + case 7592: + break block10; + case 7593: + break block; + case 7594: + break block10; + case 7595: + break block; + case 7596: + break block10; + case 7597: + break block; + case 7598: + break block10; + case 7599: + break block; + case 7600: + break block10; + case 7601: + break block; + case 7602: + break block10; + case 7603: + break block; + case 7604: + break block10; + case 7605: + break block; + case 7606: + break block10; + case 7607: + break block; + case 7608: + break block10; + case 7609: + break block; + case 7610: + break block10; + case 7611: + break block; + case 7612: + break block10; + case 7613: + break block; + case 7614: + break block10; + case 7615: + break block; + case 7616: + break block10; + case 7617: + break block; + case 7618: + break block10; + case 7619: + break block; + case 7620: + break block10; + case 7621: + break block; + case 7622: + break block10; + case 7623: + break block; + case 7624: + break block10; + case 7625: + break block; + case 7626: + break block10; + case 7627: + break block; + case 7628: + break block10; + case 7629: + break block; + case 7630: + break block10; + case 7631: + break block; + case 7632: + break block10; + case 7633: + break block; + case 7634: + break block10; + case 7635: + break block; + case 7636: + break block10; + case 7637: + break block; + case 7638: + break block10; + case 7639: + break block; + case 7640: + break block10; + case 7641: + break block; + case 7642: + break block10; + case 7643: + break block; + case 7644: + break block10; + case 7645: + break block; + case 7646: + break block10; + case 7647: + break block; + case 7648: + break block10; + case 7649: + break block; + case 7650: + break block10; + case 7651: + break block; + case 7652: + break block10; + case 7653: + break block; + case 7654: + break block10; + case 7655: + break block; + case 7656: + break block10; + case 7657: + break block; + case 7658: + break block10; + case 7659: + break block; + case 7660: + break block10; + case 7661: + break block; + case 7662: + break block10; + case 7663: + break block; + case 7664: + break block10; + case 7665: + break block; + case 7666: + break block10; + case 7667: + break block; + case 7668: + break block10; + case 7669: + break block; + case 7670: + break block10; + case 7671: + break block; + case 7672: + break block10; + case 7673: + break block; + case 7674: + break block10; + case 7675: + break block; + case 7676: + break block10; + case 7677: + break block; + case 7678: + break block10; + case 7679: + break block; + case 7680: + break block10; + case 7681: + break block; + case 7682: + break block10; + case 7683: + break block; + case 7684: + break block10; + case 7685: + break block; + case 7686: + break block10; + case 7687: + break block; + case 7688: + break block10; + case 7689: + break block; + case 7690: + break block10; + case 7691: + break block; + case 7692: + break block10; + case 7693: + break block; + case 7694: + break block10; + case 7695: + break block; + case 7696: + break block10; + case 7697: + break block; + case 7698: + break block10; + case 7699: + break block; + case 7700: + break block10; + case 7701: + break block; + case 7702: + break block10; + case 7703: + break block; + case 7704: + break block10; + case 7705: + break block; + case 7706: + break block10; + case 7707: + break block; + case 7708: + break block10; + case 7709: + break block; + case 7710: + break block10; + case 7711: + break block; + case 7712: + break block10; + case 7713: + break block; + case 7714: + break block10; + case 7715: + break block; + case 7716: + break block10; + case 7717: + break block; + case 7718: + break block10; + case 7719: + break block; + case 7720: + break block10; + case 7721: + break block; + case 7722: + break block10; + case 7723: + break block; + case 7724: + break block10; + case 7725: + break block; + case 7726: + break block10; + case 7727: + break block; + case 7728: + break block10; + case 7729: + break block; + case 7730: + break block10; + case 7731: + break block; + case 7732: + break block10; + case 7733: + break block; + case 7734: + break block10; + case 7735: + break block; + case 7736: + break block10; + case 7737: + break block; + case 7738: + break block10; + case 7739: + break block; + case 7740: + break block10; + case 7741: + break block; + case 7742: + break block10; + case 7743: + break block; + case 7744: + break block10; + case 7745: + break block; + case 7746: + break block10; + case 7747: + break block; + case 7748: + break block10; + case 7749: + break block; + case 7750: + break block10; + case 7751: + break block; + case 7752: + break block10; + case 7753: + break block; + case 7754: + break block10; + case 7755: + break block; + case 7756: + break block10; + case 7757: + break block; + case 7758: + break block10; + case 7759: + break block; + case 7760: + break block10; + case 7761: + break block; + case 7762: + break block10; + case 7763: + break block; + case 7764: + break block10; + case 7765: + break block; + case 7766: + break block10; + case 7767: + break block; + case 7768: + break block10; + case 7769: + break block; + case 7770: + break block10; + case 7771: + break block; + case 7772: + break block10; + case 7773: + break block; + case 7774: + break block10; + case 7775: + break block; + case 7776: + break block10; + case 7777: + break block; + case 7778: + break block10; + case 7779: + break block; + case 7780: + break block10; + case 7781: + break block; + case 7782: + break block10; + case 7783: + break block; + case 7784: + break block10; + case 7785: + break block; + case 7786: + break block10; + case 7787: + break block; + case 7788: + break block10; + case 7789: + break block; + case 7790: + break block10; + case 7791: + break block; + case 7792: + break block10; + case 7793: + break block; + case 7794: + break block10; + case 7795: + break block; + case 7796: + break block10; + case 7797: + break block; + case 7798: + break block10; + case 7799: + break block; + case 7800: + break block10; + case 7801: + break block; + case 7802: + break block10; + case 7803: + break block; + case 7804: + break block10; + case 7805: + break block; + case 7806: + break block10; + case 7807: + break block; + case 7808: + break block10; + case 7809: + break block; + case 7810: + break block10; + case 7811: + break block; + case 7812: + break block10; + case 7813: + break block; + case 7814: + break block10; + case 7815: + break block; + case 7816: + break block10; + case 7817: + break block; + case 7818: + break block10; + case 7819: + break block; + case 7820: + break block10; + case 7821: + break block; + case 7822: + break block10; + case 7823: + break block; + case 7824: + break block10; + case 7825: + break block; + case 7826: + break block10; + case 7827: + break block; + case 7828: + break block10; + case 7829: + break block; + case 7830: + break block10; + case 7831: + break block; + case 7832: + break block10; + case 7833: + break block; + case 7834: + break block10; + case 7835: + break block; + case 7836: + break block10; + case 7837: + break block; + case 7838: + break block10; + case 7839: + break block; + case 7840: + break block10; + case 7841: + break block; + case 7842: + break block10; + case 7843: + break block; + case 7844: + break block10; + case 7845: + break block; + case 7846: + break block10; + case 7847: + break block; + case 7848: + break block10; + case 7849: + break block; + case 7850: + break block10; + case 7851: + break block; + case 7852: + break block10; + case 7853: + break block; + case 7854: + break block10; + case 7855: + break block; + case 7856: + break block10; + case 7857: + break block; + case 7858: + break block10; + case 7859: + break block; + case 7860: + break block10; + case 7861: + break block; + case 7862: + break block10; + case 7863: + break block; + case 7864: + break block10; + case 7865: + break block; + case 7866: + break block10; + case 7867: + break block; + case 7868: + break block10; + case 7869: + break block; + case 7870: + break block10; + case 7871: + break block; + case 7872: + break block10; + case 7873: + break block; + case 7874: + break block10; + case 7875: + break block; + case 7876: + break block10; + case 7877: + break block; + case 7878: + break block10; + case 7879: + break block; + case 7880: + break block10; + case 7881: + break block; + case 7882: + break block10; + case 7883: + break block; + case 7884: + break block10; + case 7885: + break block; + case 7886: + break block10; + case 7887: + break block; + case 7888: + break block10; + case 7889: + break block; + case 7890: + break block10; + case 7891: + break block; + case 7892: + break block10; + case 7893: + break block; + case 7894: + break block10; + case 7895: + break block; + case 7896: + break block10; + case 7897: + break block; + case 7898: + break block10; + case 7899: + break block; + case 7900: + break block10; + case 7901: + break block; + case 7902: + break block10; + case 7903: + break block; + case 7904: + break block10; + case 7905: + break block; + case 7906: + break block10; + case 7907: + break block; + case 7908: + break block10; + case 7909: + break block; + case 7910: + break block10; + case 7911: + break block; + case 7912: + break block10; + case 7913: + break block; + case 7914: + break block10; + case 7915: + break block; + case 7916: + break block10; + case 7917: + break block; + case 7918: + break block10; + case 7919: + break block; + case 7920: + break block10; + case 7921: + break block; + case 7922: + break block10; + case 7923: + break block; + case 7924: + break block10; + case 7925: + break block; + case 7926: + break block10; + case 7927: + break block; + case 7928: + break block10; + case 7929: + break block; + case 7930: + break block10; + case 7931: + break block; + case 7932: + break block10; + case 7933: + break block; + case 7934: + break block10; + case 7935: + break block; + case 7936: + break block10; + case 7937: + break block; + case 7938: + break block10; + case 7939: + break block; + case 7940: + break block10; + case 7941: + break block; + case 7942: + break block10; + case 7943: + break block; + case 7944: + break block10; + case 7945: + break block; + case 7946: + break block10; + case 7947: + break block; + case 7948: + break block10; + case 7949: + break block; + case 7950: + break block10; + case 7951: + break block; + case 7952: + break block10; + case 7953: + break block; + case 7954: + break block10; + case 7955: + break block; + case 7956: + break block10; + case 7957: + break block; + case 7958: + break block10; + case 7959: + break block; + case 7960: + break block10; + case 7961: + break block; + case 7962: + break block10; + case 7963: + break block; + case 7964: + break block10; + case 7965: + break block; + case 7966: + break block10; + case 7967: + break block; + case 7968: + break block10; + case 7969: + break block; + case 7970: + break block10; + case 7971: + break block; + case 7972: + break block10; + case 7973: + break block; + case 7974: + break block10; + case 7975: + break block; + case 7976: + break block10; + case 7977: + break block; + case 7978: + break block10; + case 7979: + break block; + case 7980: + break block10; + case 7981: + break block; + case 7982: + break block10; + case 7983: + break block; + case 7984: + break block10; + case 7985: + break block; + case 7986: + break block10; + case 7987: + break block; + case 7988: + break block10; + case 7989: + break block; + case 7990: + break block10; + case 7991: + break block; + case 7992: + break block10; + case 7993: + break block; + case 7994: + break block10; + case 7995: + break block; + case 7996: + break block10; + case 7997: + break block; + case 7998: + break block10; + case 7999: + break block; + case 8e3: + break block10; + case 8001: + break block; + case 8002: + break block10; + case 8003: + break block; + case 8004: + break block10; + case 8005: + break block; + case 8006: + break block10; + case 8007: + break block; + case 8008: + break block10; + case 8009: + break block; + case 8010: + break block10; + case 8011: + break block; + case 8012: + break block10; + case 8013: + break block; + case 8014: + break block10; + case 8015: + break block; + case 8016: + break block10; + case 8017: + break block; + case 8018: + break block10; + case 8019: + break block; + case 8020: + break block10; + case 8021: + break block; + case 8022: + break block10; + case 8023: + break block; + case 8024: + break block10; + case 8025: + break block; + case 8026: + break block10; + case 8027: + break block; + case 8028: + break block10; + case 8029: + break block; + case 8030: + break block10; + case 8031: + break block; + case 8032: + break block10; + case 8033: + break block; + case 8034: + break block10; + case 8035: + break block; + case 8036: + break block10; + case 8037: + break block; + case 8038: + break block10; + case 8039: + break block; + case 8040: + break block10; + case 8041: + break block; + case 8042: + break block10; + case 8043: + break block; + case 8044: + break block10; + case 8045: + break block; + case 8046: + break block10; + case 8047: + break block; + case 8048: + break block10; + case 8049: + break block; + case 8050: + break block10; + case 8051: + break block; + case 8052: + break block10; + case 8053: + break block; + case 8054: + break block10; + case 8055: + break block; + case 8056: + break block10; + case 8057: + break block; + case 8058: + break block10; + case 8059: + break block; + case 8060: + break block10; + case 8061: + break block; + case 8062: + break block10; + case 8063: + break block; + case 8064: + break block10; + case 8065: + break block; + case 8066: + break block10; + case 8067: + break block; + case 8068: + break block10; + case 8069: + break block; + case 8070: + break block10; + case 8071: + break block; + case 8072: + break block10; + case 8073: + break block; + case 8074: + break block10; + case 8075: + break block; + case 8076: + break block10; + case 8077: + break block; + case 8078: + break block10; + case 8079: + break block; + case 8080: + break block10; + case 8081: + break block; + case 8082: + break block10; + case 8083: + break block; + case 8084: + break block10; + case 8085: + break block; + case 8086: + break block10; + case 8087: + break block; + case 8088: + break block10; + case 8089: + break block; + case 8090: + break block10; + case 8091: + break block; + case 8092: + break block10; + case 8093: + break block; + case 8094: + break block10; + case 8095: + break block; + case 8096: + break block10; + case 8097: + break block; + case 8098: + break block10; + case 8099: + break block; + case 8100: + break block10; + case 8101: + break block; + case 8102: + break block10; + case 8103: + break block; + case 8104: + break block10; + case 8105: + break block; + case 8106: + break block10; + case 8107: + break block; + case 8108: + break block10; + case 8109: + break block; + case 8110: + break block10; + case 8111: + break block; + case 8112: + break block10; + case 8113: + break block; + case 8114: + break block10; + case 8115: + break block; + case 8116: + break block10; + case 8117: + break block; + case 8118: + break block10; + case 8119: + break block; + case 8120: + break block10; + case 8121: + break block; + case 8122: + break block10; + case 8123: + break block; + case 8124: + break block10; + case 8125: + break block; + case 8126: + break block10; + case 8127: + break block; + case 8128: + break block10; + case 8129: + break block; + case 8130: + break block10; + case 8131: + break block; + case 8132: + break block10; + case 8133: + break block; + case 8134: + break block10; + case 8135: + break block; + case 8136: + break block10; + case 8137: + break block; + case 8138: + break block10; + case 8139: + break block; + case 8140: + break block10; + case 8141: + break block; + case 8142: + break block10; + case 8143: + break block; + case 8144: + break block10; + case 8145: + break block; + case 8146: + break block10; + case 8147: + break block; + case 8148: + break block10; + case 8149: + break block; + case 8150: + break block10; + case 8151: + break block; + case 8152: + break block10; + case 8153: + break block; + case 8154: + break block10; + case 8155: + break block; + case 8156: + break block10; + case 8157: + break block; + case 8158: + break block10; + case 8159: + break block; + case 8160: + break block10; + case 8161: + break block; + case 8162: + break block10; + case 8163: + break block; + case 8164: + break block10; + case 8165: + break block; + case 8166: + break block10; + case 8167: + break block; + case 8168: + break block10; + case 8169: + break block; + case 8170: + break block10; + case 8171: + break block; + case 8172: + break block10; + case 8173: + break block; + case 8174: + break block10; + case 8175: + break block; + case 8176: + break block10; + case 8177: + break block; + case 8178: + break block10; + case 8179: + break block; + case 8180: + break block10; + case 8181: + break block; + case 8182: + break block10; + case 8183: + break block; + case 8184: + break block10; + case 8185: + break block; + case 8186: + break block10; + case 8187: + break block; + case 8188: + break block10; + case 8189: + break block; + case 8190: + break block10; + case 8191: + break block; + case 8192: + break block10; + case 8193: + break block; + case 8194: + break block10; + case 8195: + break block; + case 8196: + break block10; + case 8197: + break block; + case 8198: + break block10; + case 8199: + break block; + case 8200: + break block10; + case 8201: + break block; + case 8202: + break block10; + case 8203: + break block; + case 8204: + break block10; + case 8205: + break block; + case 8206: + break block10; + case 8207: + break block; + case 8208: + break block10; + case 8209: + break block; + case 8210: + break block10; + case 8211: + break block; + case 8212: + break block10; + case 8213: + break block; + case 8214: + break block10; + case 8215: + break block; + case 8216: + break block10; + case 8217: + break block; + case 8218: + break block10; + case 8219: + break block; + case 8220: + break block10; + case 8221: + break block; + case 8222: + break block10; + case 8223: + break block; + case 8224: + break block10; + case 8225: + break block; + case 8226: + break block10; + case 8227: + break block; + case 8228: + break block10; + case 8229: + break block; + case 8230: + break block10; + case 8231: + break block; + case 8232: + break block10; + case 8233: + break block; + case 8234: + break block10; + case 8235: + break block; + case 8236: + break block10; + case 8237: + break block; + case 8238: + break block10; + case 8239: + break block; + case 8240: + break block10; + case 8241: + break block; + case 8242: + break block10; + case 8243: + break block; + case 8244: + break block10; + case 8245: + break block; + case 8246: + break block10; + case 8247: + break block; + case 8248: + break block10; + case 8249: + break block; + case 8250: + break block10; + case 8251: + break block; + case 8252: + break block10; + case 8253: + break block; + case 8254: + break block10; + case 8255: + break block; + case 8256: + break block10; + case 8257: + break block; + case 8258: + break block10; + case 8259: + break block; + case 8260: + break block10; + case 8261: + break block; + case 8262: + break block10; + case 8263: + break block; + case 8264: + break block10; + case 8265: + break block; + case 8266: + break block10; + case 8267: + break block; + case 8268: + break block10; + case 8269: + break block; + case 8270: + break block10; + case 8271: + break block; + case 8272: + break block10; + case 8273: + break block; + case 8274: + break block10; + case 8275: + break block; + case 8276: + break block10; + case 8277: + break block; + case 8278: + break block10; + case 8279: + break block; + case 8280: + break block10; + case 8281: + break block; + case 8282: + break block10; + case 8283: + break block; + case 8284: + break block10; + case 8285: + break block; + case 8286: + break block10; + case 8287: + break block; + case 8288: + break block10; + case 8289: + break block; + case 8290: + break block10; + case 8291: + break block; + case 8292: + break block10; + case 8293: + break block; + case 8294: + break block10; + case 8295: + break block; + case 8296: + break block10; + case 8297: + break block; + case 8298: + break block10; + case 8299: + break block; + case 8300: + break block10; + case 8301: + break block; + case 8302: + break block10; + case 8303: + break block; + case 8304: + break block10; + case 8305: + break block; + case 8306: + break block10; + case 8307: + break block; + case 8308: + break block10; + case 8309: + break block; + case 8310: + break block10; + case 8311: + break block; + case 8312: + break block10; + case 8313: + break block; + case 8314: + break block10; + case 8315: + break block; + case 8316: + break block10; + case 8317: + break block; + case 8318: + break block10; + case 8319: + break block; + case 8320: + break block10; + case 8321: + break block; + case 8322: + break block10; + case 8323: + break block; + case 8324: + break block10; + case 8325: + break block; + case 8326: + break block10; + case 8327: + break block; + case 8328: + break block10; + case 8329: + break block; + case 8330: + break block10; + case 8331: + break block; + case 8332: + break block10; + case 8333: + break block; + case 8334: + break block10; + case 8335: + break block; + case 8336: + break block10; + case 8337: + break block; + case 8338: + break block10; + case 8339: + break block; + case 8340: + break block10; + case 8341: + break block; + case 8342: + break block10; + case 8343: + break block; + case 8344: + break block10; + case 8345: + break block; + case 8346: + break block10; + case 8347: + break block; + case 8348: + break block10; + case 8349: + break block; + case 8350: + break block10; + case 8351: + break block; + case 8352: + break block10; + case 8353: + break block; + case 8354: + break block10; + case 8355: + break block; + case 8356: + break block10; + case 8357: + break block; + case 8358: + break block10; + case 8359: + break block; + case 8360: + break block10; + case 8361: + break block; + case 8362: + break block10; + case 8363: + break block; + case 8364: + break block10; + case 8365: + break block; + case 8366: + break block10; + case 8367: + break block; + case 8368: + break block10; + case 8369: + break block; + case 8370: + break block10; + case 8371: + break block; + case 8372: + break block10; + case 8373: + break block; + case 8374: + break block10; + case 8375: + break block; + case 8376: + break block10; + case 8377: + break block; + case 8378: + break block10; + case 8379: + break block; + case 8380: + break block10; + case 8381: + break block; + case 8382: + break block10; + case 8383: + break block; + case 8384: + break block10; + case 8385: + break block; + case 8386: + break block10; + case 8387: + break block; + case 8388: + break block10; + case 8389: + break block; + case 8390: + break block10; + case 8391: + break block; + case 8392: + break block10; + case 8393: + break block; + case 8394: + break block10; + case 8395: + break block; + case 8396: + break block10; + case 8397: + break block; + case 8398: + break block10; + case 8399: + break block; + case 8400: + break block10; + case 8401: + break block; + case 8402: + break block10; + case 8403: + break block; + case 8404: + break block10; + case 8405: + break block; + case 8406: + break block10; + case 8407: + break block; + case 8408: + break block10; + case 8409: + break block; + case 8410: + break block10; + case 8411: + break block; + case 8412: + break block10; + case 8413: + break block; + case 8414: + break block10; + case 8415: + break block; + case 8416: + break block10; + case 8417: + break block; + case 8418: + break block10; + case 8419: + break block; + case 8420: + break block10; + case 8421: + break block; + case 8422: + break block10; + case 8423: + break block; + case 8424: + break block10; + case 8425: + break block; + case 8426: + break block10; + case 8427: + break block; + case 8428: + break block10; + case 8429: + break block; + case 8430: + break block10; + case 8431: + break block; + case 8432: + break block10; + case 8433: + break block; + case 8434: + break block10; + case 8435: + break block; + case 8436: + break block10; + case 8437: + break block; + case 8438: + break block10; + case 8439: + break block; + case 8440: + break block10; + case 8441: + break block; + case 8442: + break block10; + case 8443: + break block; + case 8444: + break block10; + case 8445: + break block; + case 8446: + break block10; + case 8447: + break block; + case 8448: + break block10; + case 8449: + break block; + case 8450: + break block10; + case 8451: + break block; + case 8452: + break block10; + case 8453: + break block; + case 8454: + break block10; + case 8455: + break block; + case 8456: + break block10; + case 8457: + break block; + case 8458: + break block10; + case 8459: + break block; + case 8460: + break block10; + case 8461: + break block; + case 8462: + break block10; + case 8463: + break block; + case 8464: + break block10; + case 8465: + break block; + case 8466: + break block10; + case 8467: + break block; + case 8468: + break block10; + case 8469: + break block; + case 8470: + break block10; + case 8471: + break block; + case 8472: + break block10; + case 8473: + break block; + case 8474: + break block10; + case 8475: + break block; + case 8476: + break block10; + case 8477: + break block; + case 8478: + break block10; + case 8479: + break block; + case 8480: + break block10; + case 8481: + break block; + case 8482: + break block10; + case 8483: + break block; + case 8484: + break block10; + case 8485: + break block; + case 8486: + break block10; + case 8487: + break block; + case 8488: + break block10; + case 8489: + break block; + case 8490: + break block10; + case 8491: + break block; + case 8492: + break block10; + case 8493: + break block; + case 8494: + break block10; + case 8495: + break block; + case 8496: + break block10; + case 8497: + break block; + case 8498: + break block10; + case 8499: + break block; + case 8500: + break block10; + case 8501: + break block; + case 8502: + break block10; + case 8503: + break block; + case 8504: + break block10; + case 8505: + break block; + case 8506: + break block10; + case 8507: + break block; + case 8508: + break block10; + case 8509: + break block; + case 8510: + break block10; + case 8511: + break block; + case 8512: + break block10; + case 8513: + break block; + case 8514: + break block10; + case 8515: + break block; + case 8516: + break block10; + case 8517: + break block; + case 8518: + break block10; + case 8519: + break block; + case 8520: + break block10; + case 8521: + break block; + case 8522: + break block10; + case 8523: + break block; + case 8524: + break block10; + case 8525: + break block; + case 8526: + break block10; + case 8527: + break block; + case 8528: + break block10; + case 8529: + break block; + case 8530: + break block10; + case 8531: + break block; + case 8532: + break block10; + case 8533: + break block; + case 8534: + break block10; + case 8535: + break block; + case 8536: + break block10; + case 8537: + break block; + case 8538: + break block10; + case 8539: + break block; + case 8540: + break block10; + case 8541: + break block; + case 8542: + break block10; + case 8543: + break block; + case 8544: + break block10; + case 8545: + break block; + case 8546: + break block10; + case 8547: + break block; + case 8548: + break block10; + case 8549: + break block; + case 8550: + break block10; + case 8551: + break block; + case 8552: + break block10; + case 8553: + break block; + case 8554: + break block10; + case 8555: + break block; + case 8556: + break block10; + case 8557: + break block; + case 8558: + break block10; + case 8559: + break block; + case 8560: + break block10; + case 8561: + break block; + case 8562: + break block10; + case 8563: + break block; + case 8564: + break block10; + case 8565: + break block; + case 8566: + break block10; + case 8567: + break block; + case 8568: + break block10; + case 8569: + break block; + case 8570: + break block10; + case 8571: + break block; + case 8572: + break block10; + case 8573: + break block; + case 8574: + break block10; + case 8575: + break block; + case 8576: + break block10; + case 8577: + break block; + case 8578: + break block10; + case 8579: + break block; + case 8580: + break block10; + case 8581: + break block; + case 8582: + break block10; + case 8583: + break block; + case 8584: + break block10; + case 8585: + break block; + case 8586: + break block10; + case 8587: + break block; + case 8588: + break block10; + case 8589: + break block; + case 8590: + break block10; + case 8591: + break block; + case 8592: + break block10; + case 8593: + break block; + case 8594: + break block10; + case 8595: + break block; + case 8596: + break block10; + case 8597: + break block; + case 8598: + break block10; + case 8599: + break block; + case 8600: + break block10; + case 8601: + break block; + case 8602: + break block10; + case 8603: + break block; + case 8604: + break block10; + case 8605: + break block; + case 8606: + break block10; + case 8607: + break block; + case 8608: + break block10; + case 8609: + break block; + case 8610: + break block10; + case 8611: + break block; + case 8612: + break block10; + case 8613: + break block; + case 8614: + break block10; + case 8615: + break block; + case 8616: + break block10; + case 8617: + break block; + case 8618: + break block10; + case 8619: + break block; + case 8620: + break block10; + case 8621: + break block; + case 8622: + break block10; + case 8623: + break block; + case 8624: + break block10; + case 8625: + break block; + case 8626: + break block10; + case 8627: + break block; + case 8628: + break block10; + case 8629: + break block; + case 8630: + break block10; + case 8631: + break block; + case 8632: + break block10; + case 8633: + break block; + case 8634: + break block10; + case 8635: + break block; + case 8636: + break block10; + case 8637: + break block; + case 8638: + break block10; + case 8639: + break block; + case 8640: + break block10; + case 8641: + break block; + case 8642: + break block10; + case 8643: + break block; + case 8644: + break block10; + case 8645: + break block; + case 8646: + break block10; + case 8647: + break block; + case 8648: + break block10; + case 8649: + break block; + case 8650: + break block10; + case 8651: + break block; + case 8652: + break block10; + case 8653: + break block; + case 8654: + break block10; + case 8655: + break block; + case 8656: + break block10; + case 8657: + break block; + case 8658: + break block10; + case 8659: + break block; + case 8660: + break block10; + case 8661: + break block; + case 8662: + break block10; + case 8663: + break block; + case 8664: + break block10; + case 8665: + break block; + case 8666: + break block10; + case 8667: + break block; + case 8668: + break block10; + case 8669: + break block; + case 8670: + break block10; + case 8671: + break block; + case 8672: + break block10; + case 8673: + break block; + case 8674: + break block10; + case 8675: + break block; + case 8676: + break block10; + case 8677: + break block; + case 8678: + break block10; + case 8679: + break block; + case 8680: + break block10; + case 8681: + break block; + case 8682: + break block10; + case 8683: + break block; + case 8684: + break block10; + case 8685: + break block; + case 8686: + break block10; + case 8687: + break block; + case 8688: + break block10; + case 8689: + break block; + case 8690: + break block10; + case 8691: + break block; + case 8692: + break block10; + case 8693: + break block; + case 8694: + break block10; + case 8695: + break block; + case 8696: + break block10; + case 8697: + break block; + case 8698: + break block10; + case 8699: + break block; + case 8700: + break block10; + case 8701: + break block; + case 8702: + break block10; + case 8703: + break block; + case 8704: + break block10; + case 8705: + break block; + case 8706: + break block10; + case 8707: + break block; + case 8708: + break block10; + case 8709: + break block; + case 8710: + break block10; + case 8711: + break block; + case 8712: + break block10; + case 8713: + break block; + case 8714: + break block10; + case 8715: + break block; + case 8716: + break block10; + case 8717: + break block; + case 8718: + break block10; + case 8719: + break block; + case 8720: + break block10; + case 8721: + break block; + case 8722: + break block10; + case 8723: + break block; + case 8724: + break block10; + case 8725: + break block; + case 8726: + break block10; + case 8727: + break block; + case 8728: + break block10; + case 8729: + break block; + case 8730: + break block10; + case 8731: + break block; + case 8732: + break block10; + case 8733: + break block; + case 8734: + break block10; + case 8735: + break block; + case 8736: + break block10; + case 8737: + break block; + case 8738: + break block10; + case 8739: + break block; + case 8740: + break block10; + case 8741: + break block; + case 8742: + break block10; + case 8743: + break block; + case 8744: + break block10; + case 8745: + break block; + case 8746: + break block10; + case 8747: + break block; + case 8748: + break block10; + case 8749: + break block; + case 8750: + break block10; + case 8751: + break block; + case 8752: + break block10; + case 8753: + break block; + case 8754: + break block10; + case 8755: + break block; + case 8756: + break block10; + case 8757: + break block; + case 8758: + break block10; + case 8759: + break block; + case 8760: + break block10; + case 8761: + break block; + case 8762: + break block10; + case 8763: + break block; + case 8764: + break block10; + case 8765: + break block; + case 8766: + break block10; + case 8767: + break block; + case 8768: + break block10; + case 8769: + break block; + case 8770: + break block10; + case 8771: + break block; + case 8772: + break block10; + case 8773: + break block; + case 8774: + break block10; + case 8775: + break block; + case 8776: + break block10; + case 8777: + break block; + case 8778: + break block10; + case 8779: + break block; + case 8780: + break block10; + case 8781: + break block; + case 8782: + break block10; + case 8783: + break block; + case 8784: + break block10; + case 8785: + break block; + case 8786: + break block10; + case 8787: + break block; + case 8788: + break block10; + case 8789: + break block; + case 8790: + break block10; + case 8791: + break block; + case 8792: + break block10; + case 8793: + break block; + case 8794: + break block10; + case 8795: + break block; + case 8796: + break block10; + case 8797: + break block; + case 8798: + break block10; + case 8799: + break block; + case 8800: + break block10; + case 8801: + break block; + case 8802: + break block10; + case 8803: + break block; + case 8804: + break block10; + case 8805: + break block; + case 8806: + break block10; + case 8807: + break block; + case 8808: + break block10; + case 8809: + break block; + case 8810: + break block10; + case 8811: + break block; + case 8812: + break block10; + case 8813: + break block; + case 8814: + break block10; + case 8815: + break block; + case 8816: + break block10; + case 8817: + break block; + case 8818: + break block10; + case 8819: + break block; + case 8820: + break block10; + case 8821: + break block; + case 8822: + break block10; + case 8823: + break block; + case 8824: + break block10; + case 8825: + break block; + case 8826: + break block10; + case 8827: + break block; + case 8828: + break block10; + case 8829: + break block; + case 8830: + break block10; + case 8831: + break block; + case 8832: + break block10; + case 8833: + break block; + case 8834: + break block10; + case 8835: + break block; + case 8836: + break block10; + case 8837: + break block; + case 8838: + break block10; + case 8839: + break block; + case 8840: + break block10; + case 8841: + break block; + case 8842: + break block10; + case 8843: + break block; + case 8844: + break block10; + case 8845: + break block; + case 8846: + break block10; + case 8847: + break block; + case 8848: + break block10; + case 8849: + break block; + case 8850: + break block10; + case 8851: + break block; + case 8852: + break block10; + case 8853: + break block; + case 8854: + break block10; + case 8855: + break block; + case 8856: + break block10; + case 8857: + break block; + case 8858: + break block10; + case 8859: + break block; + case 8860: + break block10; + case 8861: + break block; + case 8862: + break block10; + case 8863: + break block; + case 8864: + break block10; + case 8865: + break block; + case 8866: + break block10; + case 8867: + break block; + case 8868: + break block10; + case 8869: + break block; + case 8870: + break block10; + case 8871: + break block; + case 8872: + break block10; + case 8873: + break block; + case 8874: + break block10; + case 8875: + break block; + case 8876: + break block10; + case 8877: + break block; + case 8878: + break block10; + case 8879: + break block; + case 8880: + break block10; + case 8881: + break block; + case 8882: + break block10; + case 8883: + break block; + case 8884: + break block10; + case 8885: + break block; + case 8886: + break block10; + case 8887: + break block; + case 8888: + break block10; + case 8889: + break block; + case 8890: + break block10; + case 8891: + break block; + case 8892: + break block10; + case 8893: + break block; + case 8894: + break block10; + case 8895: + break block; + case 8896: + break block10; + case 8897: + break block; + case 8898: + break block10; + case 8899: + break block; + case 8900: + break block10; + case 8901: + break block; + case 8902: + break block10; + case 8903: + break block; + case 8904: + break block10; + case 8905: + break block; + case 8906: + break block10; + case 8907: + break block; + case 8908: + break block10; + case 8909: + break block; + case 8910: + break block10; + case 8911: + break block; + case 8912: + break block10; + case 8913: + break block; + case 8914: + break block10; + case 8915: + break block; + case 8916: + break block10; + case 8917: + break block; + case 8918: + break block10; + case 8919: + break block; + case 8920: + break block10; + case 8921: + break block; + case 8922: + break block10; + case 8923: + break block; + case 8924: + break block10; + case 8925: + break block; + case 8926: + break block10; + case 8927: + break block; + case 8928: + break block10; + case 8929: + break block; + case 8930: + break block10; + case 8931: + break block; + case 8932: + break block10; + case 8933: + break block; + case 8934: + break block10; + case 8935: + break block; + case 8936: + break block10; + case 8937: + break block; + case 8938: + break block10; + case 8939: + break block; + case 8940: + break block10; + case 8941: + break block; + case 8942: + break block10; + case 8943: + break block; + case 8944: + break block10; + case 8945: + break block; + case 8946: + break block10; + case 8947: + break block; + case 8948: + break block10; + case 8949: + break block; + case 8950: + break block10; + case 8951: + break block; + case 8952: + break block10; + case 8953: + break block; + case 8954: + break block10; + case 8955: + break block; + case 8956: + break block10; + case 8957: + break block; + case 8958: + break block10; + case 8959: + break block; + case 8960: + break block10; + case 8961: + break block; + case 8962: + break block10; + case 8963: + break block; + case 8964: + break block10; + case 8965: + break block; + case 8966: + break block10; + case 8967: + break block; + case 8968: + break block10; + case 8969: + break block; + case 8970: + break block10; + case 8971: + break block; + case 8972: + break block10; + case 8973: + break block; + case 8974: + break block10; + case 8975: + break block; + case 8976: + break block10; + case 8977: + break block; + case 8978: + break block10; + case 8979: + break block; + case 8980: + break block10; + case 8981: + break block; + case 8982: + break block10; + case 8983: + break block; + case 8984: + break block10; + case 8985: + break block; + case 8986: + break block10; + case 8987: + break block; + case 8988: + break block10; + case 8989: + break block; + case 8990: + break block10; + case 8991: + break block; + case 8992: + break block10; + case 8993: + break block; + case 8994: + break block10; + case 8995: + break block; + case 8996: + break block10; + case 8997: + break block; + case 8998: + break block10; + case 8999: + break block; + case 9e3: + break block10; + case 9001: + break block; + case 9002: + break block10; + case 9003: + break block; + case 9004: + break block10; + case 9005: + break block; + case 9006: + break block10; + case 9007: + break block; + case 9008: + break block10; + case 9009: + break block; + case 9010: + break block10; + case 9011: + break block; + case 9012: + break block10; + case 9013: + break block; + case 9014: + break block10; + case 9015: + break block; + case 9016: + break block10; + case 9017: + break block; + case 9018: + break block10; + case 9019: + break block; + case 9020: + break block10; + case 9021: + break block; + case 9022: + break block10; + case 9023: + break block; + case 9024: + break block10; + case 9025: + break block; + case 9026: + break block10; + case 9027: + break block; + case 9028: + break block10; + case 9029: + break block; + case 9030: + break block10; + case 9031: + break block; + case 9032: + break block10; + case 9033: + break block; + case 9034: + break block10; + case 9035: + break block; + case 9036: + break block10; + case 9037: + break block; + case 9038: + break block10; + case 9039: + break block; + case 9040: + break block10; + case 9041: + break block; + case 9042: + break block10; + case 9043: + break block; + case 9044: + break block10; + case 9045: + break block; + case 9046: + break block10; + case 9047: + break block; + case 9048: + break block10; + case 9049: + break block; + case 9050: + break block10; + case 9051: + break block; + case 9052: + break block10; + case 9053: + break block; + case 9054: + break block10; + case 9055: + break block; + case 9056: + break block10; + case 9057: + break block; + case 9058: + break block10; + case 9059: + break block; + case 9060: + break block10; + case 9061: + break block; + case 9062: + break block10; + case 9063: + break block; + case 9064: + break block10; + case 9065: + break block; + case 9066: + break block10; + case 9067: + break block; + case 9068: + break block10; + case 9069: + break block; + case 9070: + break block10; + case 9071: + break block; + case 9072: + break block10; + case 9073: + break block; + case 9074: + break block10; + case 9075: + break block; + case 9076: + break block10; + case 9077: + break block; + case 9078: + break block10; + case 9079: + break block; + case 9080: + break block10; + case 9081: + break block; + case 9082: + break block10; + case 9083: + break block; + case 9084: + break block10; + case 9085: + break block; + case 9086: + break block10; + case 9087: + break block; + case 9088: + break block10; + case 9089: + break block; + case 9090: + break block10; + case 9091: + break block; + case 9092: + break block10; + case 9093: + break block; + case 9094: + break block10; + case 9095: + break block; + case 9096: + break block10; + case 9097: + break block; + case 9098: + break block10; + case 9099: + break block; + case 9100: + break block10; + case 9101: + break block; + case 9102: + break block10; + case 9103: + break block; + case 9104: + break block10; + case 9105: + break block; + case 9106: + break block10; + case 9107: + break block; + case 9108: + break block10; + case 9109: + break block; + case 9110: + break block10; + case 9111: + break block; + case 9112: + break block10; + case 9113: + break block; + case 9114: + break block10; + case 9115: + break block; + case 9116: + break block10; + case 9117: + break block; + case 9118: + break block10; + case 9119: + break block; + case 9120: + break block10; + case 9121: + break block; + case 9122: + break block10; + case 9123: + break block; + case 9124: + break block10; + case 9125: + break block; + case 9126: + break block10; + case 9127: + break block; + case 9128: + break block10; + case 9129: + break block; + case 9130: + break block10; + case 9131: + break block; + case 9132: + break block10; + case 9133: + break block; + case 9134: + break block10; + case 9135: + break block; + case 9136: + break block10; + case 9137: + break block; + case 9138: + break block10; + case 9139: + break block; + case 9140: + break block10; + case 9141: + break block; + case 9142: + break block10; + case 9143: + break block; + case 9144: + break block10; + case 9145: + break block; + case 9146: + break block10; + case 9147: + break block; + case 9148: + break block10; + case 9149: + break block; + case 9150: + break block10; + case 9151: + break block; + case 9152: + break block10; + case 9153: + break block; + case 9154: + break block10; + case 9155: + break block; + case 9156: + break block10; + case 9157: + break block; + case 9158: + break block10; + case 9159: + break block; + case 9160: + break block10; + case 9161: + break block; + case 9162: + break block10; + case 9163: + break block; + case 9164: + break block10; + case 9165: + break block; + case 9166: + break block10; + case 9167: + break block; + case 9168: + break block10; + case 9169: + break block; + case 9170: + break block10; + case 9171: + break block; + case 9172: + break block10; + case 9173: + break block; + case 9174: + break block10; + case 9175: + break block; + case 9176: + break block10; + case 9177: + break block; + case 9178: + break block10; + case 9179: + break block; + case 9180: + break block10; + case 9181: + break block; + case 9182: + break block10; + case 9183: + break block; + case 9184: + break block10; + case 9185: + break block; + case 9186: + break block10; + case 9187: + break block; + case 9188: + break block10; + case 9189: + break block; + case 9190: + break block10; + case 9191: + break block; + case 9192: + break block10; + case 9193: + break block; + case 9194: + break block10; + case 9195: + break block; + case 9196: + break block10; + case 9197: + break block; + case 9198: + break block10; + case 9199: + break block; + case 9200: + break block10; + case 9201: + break block; + case 9202: + break block10; + case 9203: + break block; + case 9204: + break block10; + case 9205: + break block; + case 9206: + break block10; + case 9207: + break block; + case 9208: + break block10; + case 9209: + break block; + case 9210: + break block10; + case 9211: + break block; + case 9212: + break block10; + case 9213: + break block; + case 9214: + break block10; + case 9215: + break block; + case 9216: + break block10; + case 9217: + break block; + case 9218: + break block10; + case 9219: + break block; + case 9220: + break block10; + case 9221: + break block; + case 9222: + break block10; + case 9223: + break block; + case 9224: + break block10; + case 9225: + break block; + case 9226: + break block10; + case 9227: + break block; + case 9228: + break block10; + case 9229: + break block; + case 9230: + break block10; + case 9231: + break block; + case 9232: + break block10; + case 9233: + break block; + case 9234: + break block10; + case 9235: + break block; + case 9236: + break block10; + case 9237: + break block; + case 9238: + break block10; + case 9239: + break block; + case 9240: + break block10; + case 9241: + break block; + case 9242: + break block10; + case 9243: + break block; + case 9244: + break block10; + case 9245: + break block; + case 9246: + break block10; + case 9247: + break block; + case 9248: + break block10; + case 9249: + break block; + case 9250: + break block10; + case 9251: + break block; + case 9252: + break block10; + case 9253: + break block; + case 9254: + break block10; + case 9255: + break block; + case 9256: + break block10; + case 9257: + break block; + case 9258: + break block10; + case 9259: + break block; + case 9260: + break block10; + case 9261: + break block; + case 9262: + break block10; + case 9263: + break block; + case 9264: + break block10; + case 9265: + break block; + case 9266: + break block10; + case 9267: + break block; + case 9268: + break block10; + case 9269: + break block; + case 9270: + break block10; + case 9271: + break block; + case 9272: + break block10; + case 9273: + break block; + case 9274: + break block10; + case 9275: + break block; + case 9276: + break block10; + case 9277: + break block; + case 9278: + break block10; + case 9279: + break block; + case 9280: + break block10; + case 9281: + break block; + case 9282: + break block10; + case 9283: + break block; + case 9284: + break block10; + case 9285: + break block; + case 9286: + break block10; + case 9287: + break block; + case 9288: + break block10; + case 9289: + break block; + case 9290: + break block10; + case 9291: + break block; + case 9292: + break block10; + case 9293: + break block; + case 9294: + break block10; + case 9295: + break block; + case 9296: + break block10; + case 9297: + break block; + case 9298: + break block10; + case 9299: + break block; + case 9300: + break block10; + case 9301: + break block; + case 9302: + break block10; + case 9303: + break block; + case 9304: + break block10; + case 9305: + break block; + case 9306: + break block10; + case 9307: + break block; + case 9308: + break block10; + case 9309: + break block; + case 9310: + break block10; + case 9311: + break block; + case 9312: + break block10; + case 9313: + break block; + case 9314: + break block10; + case 9315: + break block; + case 9316: + break block10; + case 9317: + break block; + case 9318: + break block10; + case 9319: + break block; + case 9320: + break block10; + case 9321: + break block; + case 9322: + break block10; + case 9323: + break block; + case 9324: + break block10; + case 9325: + break block; + case 9326: + break block10; + case 9327: + break block; + case 9328: + break block10; + case 9329: + break block; + case 9330: + break block10; + case 9331: + break block; + case 9332: + break block10; + case 9333: + break block; + case 9334: + break block10; + case 9335: + break block; + case 9336: + break block10; + case 9337: + break block; + case 9338: + break block10; + case 9339: + break block; + case 9340: + break block10; + case 9341: + break block; + case 9342: + break block10; + case 9343: + break block; + case 9344: + break block10; + case 9345: + break block; + case 9346: + break block10; + case 9347: + break block; + case 9348: + break block10; + case 9349: + break block; + case 9350: + break block10; + case 9351: + break block; + case 9352: + break block10; + case 9353: + break block; + case 9354: + break block10; + case 9355: + break block; + case 9356: + break block10; + case 9357: + break block; + case 9358: + break block10; + case 9359: + break block; + case 9360: + break block10; + case 9361: + break block; + case 9362: + break block10; + case 9363: + break block; + case 9364: + break block10; + case 9365: + break block; + case 9366: + break block10; + case 9367: + break block; + case 9368: + break block10; + case 9369: + break block; + case 9370: + break block10; + case 9371: + break block; + case 9372: + break block10; + case 9373: + break block; + case 9374: + break block10; + case 9375: + break block; + case 9376: + break block10; + case 9377: + break block; + case 9378: + break block10; + case 9379: + break block; + case 9380: + break block10; + case 9381: + break block; + case 9382: + break block10; + case 9383: + break block; + case 9384: + break block10; + case 9385: + break block; + case 9386: + break block10; + case 9387: + break block; + case 9388: + break block10; + case 9389: + break block; + case 9390: + break block10; + case 9391: + break block; + case 9392: + break block10; + case 9393: + break block; + case 9394: + break block10; + case 9395: + break block; + case 9396: + break block10; + case 9397: + break block; + case 9398: + break block10; + case 9399: + break block; + case 9400: + break block10; + case 9401: + break block; + case 9402: + break block10; + case 9403: + break block; + case 9404: + break block10; + case 9405: + break block; + case 9406: + break block10; + case 9407: + break block; + case 9408: + break block10; + case 9409: + break block; + case 9410: + break block10; + case 9411: + break block; + case 9412: + break block10; + case 9413: + break block; + case 9414: + break block10; + case 9415: + break block; + case 9416: + break block10; + case 9417: + break block; + case 9418: + break block10; + case 9419: + break block; + case 9420: + break block10; + case 9421: + break block; + case 9422: + break block10; + case 9423: + break block; + case 9424: + break block10; + case 9425: + break block; + case 9426: + break block10; + case 9427: + break block; + case 9428: + break block10; + case 9429: + break block; + case 9430: + break block10; + case 9431: + break block; + case 9432: + break block10; + case 9433: + break block; + case 9434: + break block10; + case 9435: + break block; + case 9436: + break block10; + case 9437: + break block; + case 9438: + break block10; + case 9439: + break block; + case 9440: + break block10; + case 9441: + break block; + case 9442: + break block10; + case 9443: + break block; + case 9444: + break block10; + case 9445: + break block; + case 9446: + break block10; + case 9447: + break block; + case 9448: + break block10; + case 9449: + break block; + case 9450: + break block10; + case 9451: + break block; + case 9452: + break block10; + case 9453: + break block; + case 9454: + break block10; + case 9455: + break block; + case 9456: + break block10; + case 9457: + break block; + case 9458: + break block10; + case 9459: + break block; + case 9460: + break block10; + case 9461: + break block; + case 9462: + break block10; + case 9463: + break block; + case 9464: + break block10; + case 9465: + break block; + case 9466: + break block10; + case 9467: + break block; + case 9468: + break block10; + case 9469: + break block; + case 9470: + break block10; + case 9471: + break block; + case 9472: + break block10; + case 9473: + break block; + case 9474: + break block10; + case 9475: + break block; + case 9476: + break block10; + case 9477: + break block; + case 9478: + break block10; + case 9479: + break block; + case 9480: + break block10; + case 9481: + break block; + case 9482: + break block10; + case 9483: + break block; + case 9484: + break block10; + case 9485: + break block; + case 9486: + break block10; + case 9487: + break block; + case 9488: + break block10; + case 9489: + break block; + case 9490: + break block10; + case 9491: + break block; + case 9492: + break block10; + case 9493: + break block; + case 9494: + break block10; + case 9495: + break block; + case 9496: + break block10; + case 9497: + break block; + case 9498: + break block10; + case 9499: + break block; + case 9500: + break block10; + case 9501: + break block; + case 9502: + break block10; + case 9503: + break block; + case 9504: + break block10; + case 9505: + break block; + case 9506: + break block10; + case 9507: + break block; + case 9508: + break block10; + case 9509: + break block; + case 9510: + break block10; + case 9511: + break block; + case 9512: + break block10; + case 9513: + break block; + case 9514: + break block10; + case 9515: + break block; + case 9516: + break block10; + case 9517: + break block; + case 9518: + break block10; + case 9519: + break block; + case 9520: + break block10; + case 9521: + break block; + case 9522: + break block10; + case 9523: + break block; + case 9524: + break block10; + case 9525: + break block; + case 9526: + break block10; + case 9527: + break block; + case 9528: + break block10; + case 9529: + break block; + case 9530: + break block10; + case 9531: + break block; + case 9532: + break block10; + case 9533: + break block; + case 9534: + break block10; + case 9535: + break block; + case 9536: + break block10; + case 9537: + break block; + case 9538: + break block10; + case 9539: + break block; + case 9540: + break block10; + case 9541: + break block; + case 9542: + break block10; + case 9543: + break block; + case 9544: + break block10; + case 9545: + break block; + case 9546: + break block10; + case 9547: + break block; + case 9548: + break block10; + case 9549: + break block; + case 9550: + break block10; + case 9551: + break block; + case 9552: + break block10; + case 9553: + break block; + case 9554: + break block10; + case 9555: + break block; + case 9556: + break block10; + case 9557: + break block; + case 9558: + break block10; + case 9559: + break block; + case 9560: + break block10; + case 9561: + break block; + case 9562: + break block10; + case 9563: + break block; + case 9564: + break block10; + case 9565: + break block; + case 9566: + break block10; + case 9567: + break block; + case 9568: + break block10; + case 9569: + break block; + case 9570: + break block10; + case 9571: + break block; + case 9572: + break block10; + case 9573: + break block; + case 9574: + break block10; + case 9575: + break block; + case 9576: + break block10; + case 9577: + break block; + case 9578: + break block10; + case 9579: + break block; + case 9580: + break block10; + case 9581: + break block; + case 9582: + break block10; + case 9583: + break block; + case 9584: + break block10; + case 9585: + break block; + case 9586: + break block10; + case 9587: + break block; + case 9588: + break block10; + case 9589: + break block; + case 9590: + break block10; + case 9591: + break block; + case 9592: + break block10; + case 9593: + break block; + case 9594: + break block10; + case 9595: + break block; + case 9596: + break block10; + case 9597: + break block; + case 9598: + break block10; + case 9599: + break block; + case 9600: + break block10; + case 9601: + break block; + case 9602: + break block10; + case 9603: + break block; + case 9604: + break block10; + case 9605: + break block; + case 9606: + break block10; + case 9607: + break block; + case 9608: + break block10; + case 9609: + break block; + case 9610: + break block10; + case 9611: + break block; + case 9612: + break block10; + case 9613: + break block; + case 9614: + break block10; + case 9615: + break block; + case 9616: + break block10; + case 9617: + break block; + case 9618: + break block10; + case 9619: + break block; + case 9620: + break block10; + case 9621: + break block; + case 9622: + break block10; + case 9623: + break block; + case 9624: + break block10; + case 9625: + break block; + case 9626: + break block10; + case 9627: + break block; + case 9628: + break block10; + case 9629: + break block; + case 9630: + break block10; + case 9631: + break block; + case 9632: + break block10; + case 9633: + break block; + case 9634: + break block10; + case 9635: + break block; + case 9636: + break block10; + case 9637: + break block; + case 9638: + break block10; + case 9639: + break block; + case 9640: + break block10; + case 9641: + break block; + case 9642: + break block10; + case 9643: + break block; + case 9644: + break block10; + case 9645: + break block; + case 9646: + break block10; + case 9647: + break block; + case 9648: + break block10; + case 9649: + break block; + case 9650: + break block10; + case 9651: + break block; + case 9652: + break block10; + case 9653: + break block; + case 9654: + break block10; + case 9655: + break block; + case 9656: + break block10; + case 9657: + break block; + case 9658: + break block10; + case 9659: + break block; + case 9660: + break block10; + case 9661: + break block; + case 9662: + break block10; + case 9663: + break block; + case 9664: + break block10; + case 9665: + break block; + case 9666: + break block10; + case 9667: + break block; + case 9668: + break block10; + case 9669: + break block; + case 9670: + break block10; + case 9671: + break block; + case 9672: + break block10; + case 9673: + break block; + case 9674: + break block10; + case 9675: + break block; + case 9676: + break block10; + case 9677: + break block; + case 9678: + break block10; + case 9679: + break block; + case 9680: + break block10; + case 9681: + break block; + case 9682: + break block10; + case 9683: + break block; + case 9684: + break block10; + case 9685: + break block; + case 9686: + break block10; + case 9687: + break block; + case 9688: + break block10; + case 9689: + break block; + case 9690: + break block10; + case 9691: + break block; + case 9692: + break block10; + case 9693: + break block; + case 9694: + break block10; + case 9695: + break block; + case 9696: + break block10; + case 9697: + break block; + case 9698: + break block10; + case 9699: + break block; + case 9700: + break block10; + case 9701: + break block; + case 9702: + break block10; + case 9703: + break block; + case 9704: + break block10; + case 9705: + break block; + case 9706: + break block10; + case 9707: + break block; + case 9708: + break block10; + case 9709: + break block; + case 9710: + break block10; + case 9711: + break block; + case 9712: + break block10; + case 9713: + break block; + case 9714: + break block10; + case 9715: + break block; + case 9716: + break block10; + case 9717: + break block; + case 9718: + break block10; + case 9719: + break block; + case 9720: + break block10; + case 9721: + break block; + case 9722: + break block10; + case 9723: + break block; + case 9724: + break block10; + case 9725: + break block; + case 9726: + break block10; + case 9727: + break block; + case 9728: + break block10; + case 9729: + break block; + case 9730: + break block10; + case 9731: + break block; + case 9732: + break block10; + case 9733: + break block; + case 9734: + break block10; + case 9735: + break block; + case 9736: + break block10; + case 9737: + break block; + case 9738: + break block10; + case 9739: + break block; + case 9740: + break block10; + case 9741: + break block; + case 9742: + break block10; + case 9743: + break block; + case 9744: + break block10; + case 9745: + break block; + case 9746: + break block10; + case 9747: + break block; + case 9748: + break block10; + case 9749: + break block; + case 9750: + break block10; + case 9751: + break block; + case 9752: + break block10; + case 9753: + break block; + case 9754: + break block10; + case 9755: + break block; + case 9756: + break block10; + case 9757: + break block; + case 9758: + break block10; + case 9759: + break block; + case 9760: + break block10; + case 9761: + break block; + case 9762: + break block10; + case 9763: + break block; + case 9764: + break block10; + case 9765: + break block; + case 9766: + break block10; + case 9767: + break block; + case 9768: + break block10; + case 9769: + break block; + case 9770: + break block10; + case 9771: + break block; + case 9772: + break block10; + case 9773: + break block; + case 9774: + break block10; + case 9775: + break block; + case 9776: + break block10; + case 9777: + break block; + case 9778: + break block10; + case 9779: + break block; + case 9780: + break block10; + case 9781: + break block; + case 9782: + break block10; + case 9783: + break block; + case 9784: + break block10; + case 9785: + break block; + case 9786: + break block10; + case 9787: + break block; + case 9788: + break block10; + case 9789: + break block; + case 9790: + break block10; + case 9791: + break block; + case 9792: + break block10; + case 9793: + break block; + case 9794: + break block10; + case 9795: + break block; + case 9796: + break block10; + case 9797: + break block; + case 9798: + break block10; + case 9799: + break block; + case 9800: + break block10; + case 9801: + break block; + case 9802: + break block10; + case 9803: + break block; + case 9804: + break block10; + case 9805: + break block; + case 9806: + break block10; + case 9807: + break block; + case 9808: + break block10; + case 9809: + break block; + case 9810: + break block10; + case 9811: + break block; + case 9812: + break block10; + case 9813: + break block; + case 9814: + break block10; + case 9815: + break block; + case 9816: + break block10; + case 9817: + break block; + case 9818: + break block10; + case 9819: + break block; + case 9820: + break block10; + case 9821: + break block; + case 9822: + break block10; + case 9823: + break block; + case 9824: + break block10; + case 9825: + break block; + case 9826: + break block10; + case 9827: + break block; + case 9828: + break block10; + case 9829: + break block; + case 9830: + break block10; + case 9831: + break block; + case 9832: + break block10; + case 9833: + break block; + case 9834: + break block10; + case 9835: + break block; + case 9836: + break block10; + case 9837: + break block; + case 9838: + break block10; + case 9839: + break block; + case 9840: + break block10; + case 9841: + break block; + case 9842: + break block10; + case 9843: + break block; + case 9844: + break block10; + case 9845: + break block; + case 9846: + break block10; + case 9847: + break block; + case 9848: + break block10; + case 9849: + break block; + case 9850: + break block10; + case 9851: + break block; + case 9852: + break block10; + case 9853: + break block; + case 9854: + break block10; + case 9855: + break block; + case 9856: + break block10; + case 9857: + break block; + case 9858: + break block10; + case 9859: + break block; + case 9860: + break block10; + case 9861: + break block; + case 9862: + break block10; + case 9863: + break block; + case 9864: + break block10; + case 9865: + break block; + case 9866: + break block10; + case 9867: + break block; + case 9868: + break block10; + case 9869: + break block; + case 9870: + break block10; + case 9871: + break block; + case 9872: + break block10; + case 9873: + break block; + case 9874: + break block10; + case 9875: + break block; + case 9876: + break block10; + case 9877: + break block; + case 9878: + break block10; + case 9879: + break block; + case 9880: + break block10; + case 9881: + break block; + case 9882: + break block10; + case 9883: + break block; + case 9884: + break block10; + case 9885: + break block; + case 9886: + break block10; + case 9887: + break block; + case 9888: + break block10; + case 9889: + break block; + case 9890: + break block10; + case 9891: + break block; + case 9892: + break block10; + case 9893: + break block; + case 9894: + break block10; + case 9895: + break block; + case 9896: + break block10; + case 9897: + break block; + case 9898: + break block10; + case 9899: + break block; + case 9900: + break block10; + case 9901: + break block; + case 9902: + break block10; + case 9903: + break block; + case 9904: + break block10; + case 9905: + break block; + case 9906: + break block10; + case 9907: + break block; + case 9908: + break block10; + case 9909: + break block; + case 9910: + break block10; + case 9911: + break block; + case 9912: + break block10; + case 9913: + break block; + case 9914: + break block10; + case 9915: + break block; + case 9916: + break block10; + case 9917: + break block; + case 9918: + break block10; + case 9919: + break block; + case 9920: + break block10; + case 9921: + break block; + case 9922: + break block10; + case 9923: + break block; + case 9924: + break block10; + case 9925: + break block; + case 9926: + break block10; + case 9927: + break block; + case 9928: + break block10; + case 9929: + break block; + case 9930: + break block10; + case 9931: + break block; + case 9932: + break block10; + case 9933: + break block; + case 9934: + break block10; + case 9935: + break block; + case 9936: + break block10; + case 9937: + break block; + case 9938: + break block10; + case 9939: + break block; + case 9940: + break block10; + case 9941: + break block; + case 9942: + break block10; + case 9943: + break block; + case 9944: + break block10; + case 9945: + break block; + case 9946: + break block10; + case 9947: + break block; + case 9948: + break block10; + case 9949: + break block; + case 9950: + break block10; + case 9951: + break block; + case 9952: + break block10; + case 9953: + break block; + case 9954: + break block10; + case 9955: + break block; + case 9956: + break block10; + case 9957: + break block; + case 9958: + break block10; + case 9959: + break block; + case 9960: + break block10; + case 9961: + break block; + case 9962: + break block10; + case 9963: + break block; + case 9964: + break block10; + case 9965: + break block; + case 9966: + break block10; + case 9967: + break block; + case 9968: + break block10; + case 9969: + break block; + case 9970: + break block10; + case 9971: + break block; + case 9972: + break block10; + case 9973: + break block; + case 9974: + break block10; + case 9975: + break block; + case 9976: + break block10; + case 9977: + break block; + case 9978: + break block10; + case 9979: + break block; + case 9980: + break block10; + case 9981: + break block; + case 9982: + break block10; + case 9983: + break block; + case 9984: + break block10; + case 9985: + break block; + case 9986: + break block10; + case 9987: + break block; + case 9988: + break block10; + case 9989: + break block; + case 9990: + break block10; + case 9991: + break block; + case 9992: + break block10; + case 9993: + break block; + case 9994: + break block10; + case 9995: + break block; + case 9996: + break block10; + case 9997: + break block; + case 9998: + break block10; + case 9999: + break block; + case 1e4: + break block10; + case 10001: + break block; + case 10002: + break block10; + case 10003: + break block; + case 10004: + break block10; + case 10005: + break block; + case 10006: + break block10; + case 10007: + break block; + case 10008: + break block10; + case 10009: + break block; + case 10010: + break block10; + case 10011: + break block; + case 10012: + break block10; + case 10013: + break block; + case 10014: + break block10; + case 10015: + break block; + case 10016: + break block10; + case 10017: + break block; + case 10018: + break block10; + case 10019: + break block; + case 10020: + break block10; + case 10021: + break block; + case 10022: + break block10; + case 10023: + break block; + case 10024: + break block10; + case 10025: + break block; + case 10026: + break block10; + case 10027: + break block; + case 10028: + break block10; + case 10029: + break block; + case 10030: + break block10; + case 10031: + break block; + case 10032: + break block10; + case 10033: + break block; + case 10034: + break block10; + case 10035: + break block; + case 10036: + break block10; + case 10037: + break block; + case 10038: + break block10; + case 10039: + break block; + case 10040: + break block10; + case 10041: + break block; + case 10042: + break block10; + case 10043: + break block; + case 10044: + break block10; + case 10045: + break block; + case 10046: + break block10; + case 10047: + break block; + case 10048: + break block10; + case 10049: + break block; + case 10050: + break block10; + case 10051: + break block; + case 10052: + break block10; + case 10053: + break block; + case 10054: + break block10; + case 10055: + break block; + case 10056: + break block10; + case 10057: + break block; + case 10058: + break block10; + case 10059: + break block; + case 10060: + break block10; + case 10061: + break block; + case 10062: + break block10; + case 10063: + break block; + case 10064: + break block10; + case 10065: + break block; + case 10066: + break block10; + case 10067: + break block; + case 10068: + break block10; + case 10069: + break block; + case 10070: + break block10; + case 10071: + break block; + case 10072: + break block10; + case 10073: + break block; + case 10074: + break block10; + case 10075: + break block; + case 10076: + break block10; + case 10077: + break block; + case 10078: + break block10; + case 10079: + break block; + case 10080: + break block10; + case 10081: + break block; + case 10082: + break block10; + case 10083: + break block; + case 10084: + break block10; + case 10085: + break block; + case 10086: + break block10; + case 10087: + break block; + case 10088: + break block10; + case 10089: + break block; + case 10090: + break block10; + case 10091: + break block; + case 10092: + break block10; + case 10093: + break block; + case 10094: + break block10; + case 10095: + break block; + case 10096: + break block10; + case 10097: + break block; + case 10098: + break block10; + case 10099: + break block; + case 10100: + break block10; + case 10101: + break block; + case 10102: + break block10; + case 10103: + break block; + case 10104: + break block10; + case 10105: + break block; + case 10106: + break block10; + case 10107: + break block; + case 10108: + break block10; + case 10109: + break block; + case 10110: + break block10; + case 10111: + break block; + case 10112: + break block10; + case 10113: + break block; + case 10114: + break block10; + case 10115: + break block; + case 10116: + break block10; + case 10117: + break block; + case 10118: + break block10; + case 10119: + break block; + case 10120: + break block10; + case 10121: + break block; + case 10122: + break block10; + case 10123: + break block; + case 10124: + break block10; + case 10125: + break block; + case 10126: + break block10; + case 10127: + break block; + case 10128: + break block10; + case 10129: + break block; + case 10130: + break block10; + case 10131: + break block; + case 10132: + break block10; + case 10133: + break block; + case 10134: + break block10; + case 10135: + break block; + case 10136: + break block10; + case 10137: + break block; + case 10138: + break block10; + case 10139: + break block; + case 10140: + break block10; + case 10141: + break block; + case 10142: + break block10; + case 10143: + break block; + case 10144: + break block10; + case 10145: + break block; + case 10146: + break block10; + case 10147: + break block; + case 10148: + break block10; + case 10149: + break block; + case 10150: + break block10; + case 10151: + break block; + case 10152: + break block10; + case 10153: + break block; + case 10154: + break block10; + case 10155: + break block; + case 10156: + break block10; + case 10157: + break block; + case 10158: + break block10; + case 10159: + break block; + case 10160: + break block10; + case 10161: + break block; + case 10162: + break block10; + case 10163: + break block; + case 10164: + break block10; + case 10165: + break block; + case 10166: + break block10; + case 10167: + break block; + case 10168: + break block10; + case 10169: + break block; + case 10170: + break block10; + case 10171: + break block; + case 10172: + break block10; + case 10173: + break block; + case 10174: + break block10; + case 10175: + break block; + case 10176: + break block10; + case 10177: + break block; + case 10178: + break block10; + case 10179: + break block; + case 10180: + break block10; + case 10181: + break block; + case 10182: + break block10; + case 10183: + break block; + case 10184: + break block10; + case 10185: + break block; + case 10186: + break block10; + case 10187: + break block; + case 10188: + break block10; + case 10189: + break block; + case 10190: + break block10; + case 10191: + break block; + case 10192: + break block10; + case 10193: + break block; + case 10194: + break block10; + case 10195: + break block; + case 10196: + break block10; + case 10197: + break block; + case 10198: + break block10; + case 10199: + break block; + case 10200: + break block10; + case 10201: + break block; + case 10202: + break block10; + case 10203: + break block; + case 10204: + break block10; + case 10205: + break block; + case 10206: + break block10; + case 10207: + break block; + case 10208: + break block10; + case 10209: + break block; + case 10210: + break block10; + case 10211: + break block; + case 10212: + break block10; + case 10213: + break block; + case 10214: + break block10; + case 10215: + break block; + case 10216: + break block10; + case 10217: + break block; + case 10218: + break block10; + case 10219: + break block; + case 10220: + break block10; + case 10221: + break block; + case 10222: + break block10; + case 10223: + break block; + case 10224: + break block10; + case 10225: + break block; + case 10226: + break block10; + case 10227: + break block; + case 10228: + break block10; + case 10229: + break block; + case 10230: + break block10; + case 10231: + break block; + case 10232: + break block10; + case 10233: + break block; + case 10234: + break block10; + case 10235: + break block; + case 10236: + break block10; + case 10237: + break block; + case 10238: + break block10; + case 10239: + break block; + case 10240: + break block10; + case 10241: + break block; + case 10242: + break block10; + case 10243: + break block; + case 10244: + break block10; + case 10245: + break block; + case 10246: + break block10; + case 10247: + break block; + case 10248: + break block10; + case 10249: + break block; + case 10250: + break block10; + case 10251: + break block; + case 10252: + break block10; + case 10253: + break block; + case 10254: + break block10; + case 10255: + break block; + case 10256: + break block10; + case 10257: + break block; + case 10258: + break block10; + case 10259: + break block; + case 10260: + break block10; + case 10261: + break block; + case 10262: + break block10; + case 10263: + break block; + case 10264: + break block10; + case 10265: + break block; + case 10266: + break block10; + case 10267: + break block; + case 10268: + break block10; + case 10269: + break block; + case 10270: + break block10; + case 10271: + break block; + case 10272: + break block10; + case 10273: + break block; + case 10274: + break block10; + case 10275: + break block; + case 10276: + break block10; + case 10277: + break block; + case 10278: + break block10; + case 10279: + break block; + case 10280: + break block10; + case 10281: + break block; + case 10282: + break block10; + case 10283: + break block; + case 10284: + break block10; + case 10285: + break block; + case 10286: + break block10; + case 10287: + break block; + case 10288: + break block10; + case 10289: + break block; + case 10290: + break block10; + case 10291: + break block; + case 10292: + break block10; + case 10293: + break block; + case 10294: + break block10; + case 10295: + break block; + case 10296: + break block10; + case 10297: + break block; + case 10298: + break block10; + case 10299: + break block; + case 10300: + break block10; + case 10301: + break block; + case 10302: + break block10; + case 10303: + break block; + case 10304: + break block10; + case 10305: + break block; + case 10306: + break block10; + case 10307: + break block; + case 10308: + break block10; + case 10309: + break block; + case 10310: + break block10; + case 10311: + break block; + case 10312: + break block10; + case 10313: + break block; + case 10314: + break block10; + case 10315: + break block; + case 10316: + break block10; + case 10317: + break block; + case 10318: + break block10; + case 10319: + break block; + case 10320: + break block10; + case 10321: + break block; + case 10322: + break block10; + case 10323: + break block; + case 10324: + break block10; + case 10325: + break block; + case 10326: + break block10; + case 10327: + break block; + case 10328: + break block10; + case 10329: + break block; + case 10330: + break block10; + case 10331: + break block; + case 10332: + break block10; + case 10333: + break block; + case 10334: + break block10; + case 10335: + break block; + case 10336: + break block10; + case 10337: + break block; + case 10338: + break block10; + case 10339: + break block; + case 10340: + break block10; + case 10341: + break block; + case 10342: + break block10; + case 10343: + break block; + case 10344: + break block10; + case 10345: + break block; + case 10346: + break block10; + case 10347: + break block; + case 10348: + break block10; + case 10349: + break block; + case 10350: + break block10; + case 10351: + break block; + case 10352: + break block10; + case 10353: + break block; + case 10354: + break block10; + case 10355: + break block; + case 10356: + break block10; + case 10357: + break block; + case 10358: + break block10; + case 10359: + break block; + case 10360: + break block10; + case 10361: + break block; + case 10362: + break block10; + case 10363: + break block; + case 10364: + break block10; + case 10365: + break block; + case 10366: + break block10; + case 10367: + break block; + case 10368: + break block10; + case 10369: + break block; + case 10370: + break block10; + case 10371: + break block; + case 10372: + break block10; + case 10373: + break block; + case 10374: + break block10; + case 10375: + break block; + case 10376: + break block10; + case 10377: + break block; + case 10378: + break block10; + case 10379: + break block; + case 10380: + break block10; + case 10381: + break block; + case 10382: + break block10; + case 10383: + break block; + case 10384: + break block10; + case 10385: + break block; + case 10386: + break block10; + case 10387: + break block; + case 10388: + break block10; + case 10389: + break block; + case 10390: + break block10; + case 10391: + break block; + case 10392: + break block10; + case 10393: + break block; + case 10394: + break block10; + case 10395: + break block; + case 10396: + break block10; + case 10397: + break block; + case 10398: + break block10; + case 10399: + break block; + case 10400: + break block10; + case 10401: + break block; + case 10402: + break block10; + case 10403: + break block; + case 10404: + break block10; + case 10405: + break block; + case 10406: + break block10; + case 10407: + break block; + case 10408: + break block10; + case 10409: + break block; + case 10410: + break block10; + case 10411: + break block; + case 10412: + break block10; + case 10413: + break block; + case 10414: + break block10; + case 10415: + break block; + case 10416: + break block10; + case 10417: + break block; + case 10418: + break block10; + case 10419: + break block; + case 10420: + break block10; + case 10421: + break block; + case 10422: + break block10; + case 10423: + break block; + case 10424: + break block10; + case 10425: + break block; + case 10426: + break block10; + case 10427: + break block; + case 10428: + break block10; + case 10429: + break block; + case 10430: + break block10; + case 10431: + break block; + case 10432: + break block10; + case 10433: + break block; + case 10434: + break block10; + case 10435: + break block; + case 10436: + break block10; + case 10437: + break block; + case 10438: + break block10; + case 10439: + break block; + case 10440: + break block10; + case 10441: + break block; + case 10442: + break block10; + case 10443: + break block; + case 10444: + break block10; + case 10445: + break block; + case 10446: + break block10; + case 10447: + break block; + case 10448: + break block10; + case 10449: + break block; + case 10450: + break block10; + case 10451: + break block; + case 10452: + break block10; + case 10453: + break block; + case 10454: + break block10; + case 10455: + break block; + case 10456: + break block10; + case 10457: + break block; + case 10458: + break block10; + case 10459: + break block; + case 10460: + break block10; + case 10461: + break block; + case 10462: + break block10; + case 10463: + break block; + case 10464: + break block10; + case 10465: + break block; + case 10466: + break block10; + case 10467: + break block; + case 10468: + break block10; + case 10469: + break block; + case 10470: + break block10; + case 10471: + break block; + case 10472: + break block10; + case 10473: + break block; + case 10474: + break block10; + case 10475: + break block; + case 10476: + break block10; + case 10477: + break block; + case 10478: + break block10; + case 10479: + break block; + case 10480: + break block10; + case 10481: + break block; + case 10482: + break block10; + case 10483: + break block; + case 10484: + break block10; + case 10485: + break block; + case 10486: + break block10; + case 10487: + break block; + case 10488: + break block10; + case 10489: + break block; + case 10490: + break block10; + case 10491: + break block; + case 10492: + break block10; + case 10493: + break block; + case 10494: + break block10; + case 10495: + break block; + case 10496: + break block10; + case 10497: + break block; + case 10498: + break block10; + case 10499: + break block; + case 10500: + break block10; + case 10501: + break block; + case 10502: + break block10; + case 10503: + break block; + case 10504: + break block10; + case 10505: + break block; + case 10506: + break block10; + case 10507: + break block; + case 10508: + break block10; + case 10509: + break block; + case 10510: + break block10; + case 10511: + break block; + case 10512: + break block10; + case 10513: + break block; + case 10514: + break block10; + case 10515: + break block; + case 10516: + break block10; + case 10517: + break block; + case 10518: + break block10; + case 10519: + break block; + case 10520: + break block10; + case 10521: + break block; + case 10522: + break block10; + case 10523: + break block; + case 10524: + break block10; + case 10525: + break block; + case 10526: + break block10; + case 10527: + break block; + case 10528: + break block10; + case 10529: + break block; + case 10530: + break block10; + case 10531: + break block; + case 10532: + break block10; + case 10533: + break block; + case 10534: + break block10; + case 10535: + break block; + case 10536: + break block10; + case 10537: + break block; + case 10538: + break block10; + case 10539: + break block; + case 10540: + break block10; + case 10541: + break block; + case 10542: + break block10; + case 10543: + break block; + case 10544: + break block10; + case 10545: + break block; + case 10546: + break block10; + case 10547: + break block; + case 10548: + break block10; + case 10549: + break block; + case 10550: + break block10; + case 10551: + break block; + case 10552: + break block10; + case 10553: + break block; + case 10554: + break block10; + case 10555: + break block; + case 10556: + break block10; + case 10557: + break block; + case 10558: + break block10; + case 10559: + break block; + case 10560: + break block10; + case 10561: + break block; + case 10562: + break block10; + case 10563: + break block; + case 10564: + break block10; + case 10565: + break block; + case 10566: + break block10; + case 10567: + break block; + case 10568: + break block10; + case 10569: + break block; + case 10570: + break block10; + case 10571: + break block; + case 10572: + break block10; + case 10573: + break block; + case 10574: + break block10; + case 10575: + break block; + case 10576: + break block10; + case 10577: + break block; + case 10578: + break block10; + case 10579: + break block; + case 10580: + break block10; + case 10581: + break block; + case 10582: + break block10; + case 10583: + break block; + case 10584: + break block10; + case 10585: + break block; + case 10586: + break block10; + case 10587: + break block; + case 10588: + break block10; + case 10589: + break block; + case 10590: + break block10; + case 10591: + break block; + case 10592: + break block10; + case 10593: + break block; + case 10594: + break block10; + case 10595: + break block; + case 10596: + break block10; + case 10597: + break block; + case 10598: + break block10; + case 10599: + break block; + case 10600: + break block10; + case 10601: + break block; + case 10602: + break block10; + case 10603: + break block; + case 10604: + break block10; + case 10605: + break block; + case 10606: + break block10; + case 10607: + break block; + case 10608: + break block10; + case 10609: + break block; + case 10610: + break block10; + case 10611: + break block; + case 10612: + break block10; + case 10613: + break block; + case 10614: + break block10; + case 10615: + break block; + case 10616: + break block10; + case 10617: + break block; + case 10618: + break block10; + case 10619: + break block; + case 10620: + break block10; + case 10621: + break block; + case 10622: + break block10; + case 10623: + break block; + case 10624: + break block10; + case 10625: + break block; + case 10626: + break block10; + case 10627: + break block; + case 10628: + break block10; + case 10629: + break block; + case 10630: + break block10; + case 10631: + break block; + case 10632: + break block10; + case 10633: + break block; + case 10634: + break block10; + case 10635: + break block; + case 10636: + break block10; + case 10637: + break block; + case 10638: + break block10; + case 10639: + break block; + case 10640: + break block10; + case 10641: + break block; + case 10642: + break block10; + case 10643: + break block; + case 10644: + break block10; + case 10645: + break block; + case 10646: + break block10; + case 10647: + break block; + case 10648: + break block10; + case 10649: + break block; + case 10650: + break block10; + case 10651: + break block; + case 10652: + break block10; + case 10653: + break block; + case 10654: + break block10; + case 10655: + break block; + case 10656: + break block10; + case 10657: + break block; + case 10658: + break block10; + case 10659: + break block; + case 10660: + break block10; + case 10661: + break block; + case 10662: + break block10; + case 10663: + break block; + case 10664: + break block10; + case 10665: + break block; + case 10666: + break block10; + case 10667: + break block; + case 10668: + break block10; + case 10669: + break block; + case 10670: + break block10; + case 10671: + break block; + case 10672: + break block10; + case 10673: + break block; + case 10674: + break block10; + case 10675: + break block; + case 10676: + break block10; + case 10677: + break block; + case 10678: + break block10; + case 10679: + break block; + case 10680: + break block10; + case 10681: + break block; + case 10682: + break block10; + case 10683: + break block; + case 10684: + break block10; + case 10685: + break block; + case 10686: + break block10; + case 10687: + break block; + case 10688: + break block10; + case 10689: + break block; + case 10690: + break block10; + case 10691: + break block; + case 10692: + break block10; + case 10693: + break block; + case 10694: + break block10; + case 10695: + break block; + case 10696: + break block10; + case 10697: + break block; + case 10698: + break block10; + case 10699: + break block; + case 10700: + break block10; + case 10701: + break block; + case 10702: + break block10; + case 10703: + break block; + case 10704: + break block10; + case 10705: + break block; + case 10706: + break block10; + case 10707: + break block; + case 10708: + break block10; + case 10709: + break block; + case 10710: + break block10; + case 10711: + break block; + case 10712: + break block10; + case 10713: + break block; + case 10714: + break block10; + case 10715: + break block; + case 10716: + break block10; + case 10717: + break block; + case 10718: + break block10; + case 10719: + break block; + case 10720: + break block10; + case 10721: + break block; + case 10722: + break block10; + case 10723: + break block; + case 10724: + break block10; + case 10725: + break block; + case 10726: + break block10; + case 10727: + break block; + case 10728: + break block10; + case 10729: + break block; + case 10730: + break block10; + case 10731: + break block; + case 10732: + break block10; + case 10733: + break block; + case 10734: + break block10; + case 10735: + break block; + case 10736: + break block10; + case 10737: + break block; + case 10738: + break block10; + case 10739: + break block; + case 10740: + break block10; + case 10741: + break block; + case 10742: + break block10; + case 10743: + break block; + case 10744: + break block10; + case 10745: + break block; + case 10746: + break block10; + case 10747: + break block; + case 10748: + break block10; + case 10749: + break block; + case 10750: + break block10; + case 10751: + break block; + case 10752: + break block10; + case 10753: + break block; + case 10754: + break block10; + case 10755: + break block; + case 10756: + break block10; + case 10757: + break block; + case 10758: + break block10; + case 10759: + break block; + case 10760: + break block10; + case 10761: + break block; + case 10762: + break block10; + case 10763: + break block; + case 10764: + break block10; + case 10765: + break block; + case 10766: + break block10; + case 10767: + break block; + case 10768: + break block10; + case 10769: + break block; + case 10770: + break block10; + case 10771: + break block; + case 10772: + break block10; + case 10773: + break block; + case 10774: + break block10; + case 10775: + break block; + case 10776: + break block10; + case 10777: + break block; + case 10778: + break block10; + case 10779: + break block; + case 10780: + break block10; + case 10781: + break block; + case 10782: + break block10; + case 10783: + break block; + case 10784: + break block10; + case 10785: + break block; + case 10786: + break block10; + case 10787: + break block; + case 10788: + break block10; + case 10789: + break block; + case 10790: + break block10; + case 10791: + break block; + case 10792: + break block10; + case 10793: + break block; + case 10794: + break block10; + case 10795: + break block; + case 10796: + break block10; + case 10797: + break block; + case 10798: + break block10; + case 10799: + break block; + case 10800: + break block10; + case 10801: + break block; + case 10802: + break block10; + case 10803: + break block; + case 10804: + break block10; + case 10805: + break block; + case 10806: + break block10; + case 10807: + break block; + case 10808: + break block10; + case 10809: + break block; + case 10810: + break block10; + case 10811: + break block; + case 10812: + break block10; + case 10813: + break block; + case 10814: + break block10; + case 10815: + break block; + case 10816: + break block10; + case 10817: + break block; + case 10818: + break block10; + case 10819: + break block; + case 10820: + break block10; + case 10821: + break block; + case 10822: + break block10; + case 10823: + break block; + case 10824: + break block10; + case 10825: + break block; + case 10826: + break block10; + case 10827: + break block; + case 10828: + break block10; + case 10829: + break block; + case 10830: + break block10; + case 10831: + break block; + case 10832: + break block10; + case 10833: + break block; + case 10834: + break block10; + case 10835: + break block; + case 10836: + break block10; + case 10837: + break block; + case 10838: + break block10; + case 10839: + break block; + case 10840: + break block10; + case 10841: + break block; + case 10842: + break block10; + case 10843: + break block; + case 10844: + break block10; + case 10845: + break block; + case 10846: + break block10; + case 10847: + break block; + case 10848: + break block10; + case 10849: + break block; + case 10850: + break block10; + case 10851: + break block; + case 10852: + break block10; + case 10853: + break block; + case 10854: + break block10; + case 10855: + break block; + case 10856: + break block10; + case 10857: + break block; + case 10858: + break block10; + case 10859: + break block; + case 10860: + break block10; + case 10861: + break block; + case 10862: + break block10; + case 10863: + break block; + case 10864: + break block10; + case 10865: + break block; + case 10866: + break block10; + case 10867: + break block; + case 10868: + break block10; + case 10869: + break block; + case 10870: + break block10; + case 10871: + break block; + case 10872: + break block10; + case 10873: + break block; + case 10874: + break block10; + case 10875: + break block; + case 10876: + break block10; + case 10877: + break block; + case 10878: + break block10; + case 10879: + break block; + case 10880: + break block10; + case 10881: + break block; + case 10882: + break block10; + case 10883: + break block; + case 10884: + break block10; + case 10885: + break block; + case 10886: + break block10; + case 10887: + break block; + case 10888: + break block10; + case 10889: + break block; + case 10890: + break block10; + case 10891: + break block; + case 10892: + break block10; + case 10893: + break block; + case 10894: + break block10; + case 10895: + break block; + case 10896: + break block10; + case 10897: + break block; + case 10898: + break block10; + case 10899: + break block; + case 10900: + break block10; + case 10901: + break block; + case 10902: + break block10; + case 10903: + break block; + case 10904: + break block10; + case 10905: + break block; + case 10906: + break block10; + case 10907: + break block; + case 10908: + break block10; + case 10909: + break block; + case 10910: + break block10; + case 10911: + break block; + case 10912: + break block10; + case 10913: + break block; + case 10914: + break block10; + case 10915: + break block; + case 10916: + break block10; + case 10917: + break block; + case 10918: + break block10; + case 10919: + break block; + case 10920: + break block10; + case 10921: + break block; + case 10922: + break block10; + case 10923: + break block; + case 10924: + break block10; + case 10925: + break block; + case 10926: + break block10; + case 10927: + break block; + case 10928: + break block10; + case 10929: + break block; + case 10930: + break block10; + case 10931: + break block; + case 10932: + break block10; + case 10933: + break block; + case 10934: + break block10; + case 10935: + break block; + case 10936: + break block10; + case 10937: + break block; + case 10938: + break block10; + case 10939: + break block; + case 10940: + break block10; + case 10941: + break block; + case 10942: + break block10; + case 10943: + break block; + case 10944: + break block10; + case 10945: + break block; + case 10946: + break block10; + case 10947: + break block; + case 10948: + break block10; + case 10949: + break block; + case 10950: + break block10; + case 10951: + break block; + case 10952: + break block10; + case 10953: + break block; + case 10954: + break block10; + case 10955: + break block; + case 10956: + break block10; + case 10957: + break block; + case 10958: + break block10; + case 10959: + break block; + case 10960: + break block10; + case 10961: + break block; + case 10962: + break block10; + case 10963: + break block; + case 10964: + break block10; + case 10965: + break block; + case 10966: + break block10; + case 10967: + break block; + case 10968: + break block10; + case 10969: + break block; + case 10970: + break block10; + case 10971: + break block; + case 10972: + break block10; + case 10973: + break block; + case 10974: + break block10; + case 10975: + break block; + case 10976: + break block10; + case 10977: + break block; + case 10978: + break block10; + case 10979: + break block; + case 10980: + break block10; + case 10981: + break block; + case 10982: + break block10; + case 10983: + break block; + case 10984: + break block10; + case 10985: + break block; + case 10986: + break block10; + case 10987: + break block; + case 10988: + break block10; + case 10989: + break block; + case 10990: + break block10; + case 10991: + break block; + case 10992: + break block10; + case 10993: + break block; + case 10994: + break block10; + case 10995: + break block; + case 10996: + break block10; + case 10997: + break block; + case 10998: + break block10; + case 10999: + break block; + case 11e3: + break block10; + case 11001: + break block; + case 11002: + break block10; + case 11003: + break block; + case 11004: + break block10; + case 11005: + break block; + case 11006: + break block10; + case 11007: + break block; + case 11008: + break block10; + case 11009: + break block; + case 11010: + break block10; + case 11011: + break block; + case 11012: + break block10; + case 11013: + break block; + case 11014: + break block10; + case 11015: + break block; + case 11016: + break block10; + case 11017: + break block; + case 11018: + break block10; + case 11019: + break block; + case 11020: + break block10; + case 11021: + break block; + case 11022: + break block10; + case 11023: + break block; + case 11024: + break block10; + case 11025: + break block; + case 11026: + break block10; + case 11027: + break block; + case 11028: + break block10; + case 11029: + break block; + case 11030: + break block10; + case 11031: + break block; + case 11032: + break block10; + case 11033: + break block; + case 11034: + break block10; + case 11035: + break block; + case 11036: + break block10; + case 11037: + break block; + case 11038: + break block10; + case 11039: + break block; + case 11040: + break block10; + case 11041: + break block; + case 11042: + break block10; + case 11043: + break block; + case 11044: + break block10; + case 11045: + break block; + case 11046: + break block10; + case 11047: + break block; + case 11048: + break block10; + case 11049: + break block; + case 11050: + break block10; + case 11051: + break block; + case 11052: + break block10; + case 11053: + break block; + case 11054: + break block10; + case 11055: + break block; + case 11056: + break block10; + case 11057: + break block; + case 11058: + break block10; + case 11059: + break block; + case 11060: + break block10; + case 11061: + break block; + case 11062: + break block10; + case 11063: + break block; + case 11064: + break block10; + case 11065: + break block; + case 11066: + break block10; + case 11067: + break block; + case 11068: + break block10; + case 11069: + break block; + case 11070: + break block10; + case 11071: + break block; + case 11072: + break block10; + case 11073: + break block; + case 11074: + break block10; + case 11075: + break block; + case 11076: + break block10; + case 11077: + break block; + case 11078: + break block10; + case 11079: + break block; + case 11080: + break block10; + case 11081: + break block; + case 11082: + break block10; + case 11083: + break block; + case 11084: + break block10; + case 11085: + break block; + case 11086: + break block10; + case 11087: + break block; + case 11088: + break block10; + case 11089: + break block; + case 11090: + break block10; + case 11091: + break block; + case 11092: + break block10; + case 11093: + break block; + case 11094: + break block10; + case 11095: + break block; + case 11096: + break block10; + case 11097: + break block; + case 11098: + break block10; + case 11099: + break block; + case 11100: + break block10; + case 11101: + break block; + case 11102: + break block10; + case 11103: + break block; + case 11104: + break block10; + case 11105: + break block; + case 11106: + break block10; + case 11107: + break block; + case 11108: + break block10; + case 11109: + break block; + case 11110: + break block10; + case 11111: + break block; + case 11112: + break block10; + case 11113: + break block; + case 11114: + break block10; + case 11115: + break block; + case 11116: + break block10; + case 11117: + break block; + case 11118: + break block10; + case 11119: + break block; + case 11120: + break block10; + case 11121: + break block; + case 11122: + break block10; + case 11123: + break block; + case 11124: + break block10; + case 11125: + break block; + case 11126: + break block10; + case 11127: + break block; + case 11128: + break block10; + case 11129: + break block; + case 11130: + break block10; + case 11131: + break block; + case 11132: + break block10; + case 11133: + break block; + case 11134: + break block10; + case 11135: + break block; + case 11136: + break block10; + case 11137: + break block; + case 11138: + break block10; + case 11139: + break block; + case 11140: + break block10; + case 11141: + break block; + case 11142: + break block10; + case 11143: + break block; + case 11144: + break block10; + case 11145: + break block; + case 11146: + break block10; + case 11147: + break block; + case 11148: + break block10; + case 11149: + break block; + case 11150: + break block10; + case 11151: + break block; + case 11152: + break block10; + case 11153: + break block; + case 11154: + break block10; + case 11155: + break block; + case 11156: + break block10; + case 11157: + break block; + case 11158: + break block10; + case 11159: + break block; + case 11160: + break block10; + case 11161: + break block; + case 11162: + break block10; + case 11163: + break block; + case 11164: + break block10; + case 11165: + break block; + case 11166: + break block10; + case 11167: + break block; + case 11168: + break block10; + case 11169: + break block; + case 11170: + break block10; + case 11171: + break block; + case 11172: + break block10; + case 11173: + break block; + case 11174: + break block10; + case 11175: + break block; + case 11176: + break block10; + case 11177: + break block; + case 11178: + break block10; + case 11179: + break block; + case 11180: + break block10; + case 11181: + break block; + case 11182: + break block10; + case 11183: + break block; + case 11184: + break block10; + case 11185: + break block; + case 11186: + break block10; + case 11187: + break block; + case 11188: + break block10; + case 11189: + break block; + case 11190: + break block10; + case 11191: + break block; + case 11192: + break block10; + case 11193: + break block; + case 11194: + break block10; + case 11195: + break block; + case 11196: + break block10; + case 11197: + break block; + case 11198: + break block10; + case 11199: + break block; + case 11200: + break block10; + case 11201: + break block; + case 11202: + break block10; + case 11203: + break block; + case 11204: + break block10; + case 11205: + break block; + case 11206: + break block10; + case 11207: + break block; + case 11208: + break block10; + case 11209: + break block; + case 11210: + break block10; + case 11211: + break block; + case 11212: + break block10; + case 11213: + break block; + case 11214: + break block10; + case 11215: + break block; + case 11216: + break block10; + case 11217: + break block; + case 11218: + break block10; + case 11219: + break block; + case 11220: + break block10; + case 11221: + break block; + case 11222: + break block10; + case 11223: + break block; + case 11224: + break block10; + case 11225: + break block; + case 11226: + break block10; + case 11227: + break block; + case 11228: + break block10; + case 11229: + break block; + case 11230: + break block10; + case 11231: + break block; + case 11232: + break block10; + case 11233: + break block; + case 11234: + break block10; + case 11235: + break block; + case 11236: + break block10; + case 11237: + break block; + case 11238: + break block10; + case 11239: + break block; + case 11240: + break block10; + case 11241: + break block; + case 11242: + break block10; + case 11243: + break block; + case 11244: + break block10; + case 11245: + break block; + case 11246: + break block10; + case 11247: + break block; + case 11248: + break block10; + case 11249: + break block; + case 11250: + break block10; + case 11251: + break block; + case 11252: + break block10; + case 11253: + break block; + case 11254: + break block10; + case 11255: + break block; + case 11256: + break block10; + case 11257: + break block; + case 11258: + break block10; + case 11259: + break block; + case 11260: + break block10; + case 11261: + break block; + case 11262: + break block10; + case 11263: + break block; + case 11264: + break block10; + case 11265: + break block; + case 11266: + break block10; + case 11267: + break block; + case 11268: + break block10; + case 11269: + break block; + case 11270: + break block10; + case 11271: + break block; + case 11272: + break block10; + case 11273: + break block; + case 11274: + break block10; + case 11275: + break block; + case 11276: + break block10; + case 11277: + break block; + case 11278: + break block10; + case 11279: + break block; + case 11280: + break block10; + case 11281: + break block; + case 11282: + break block10; + case 11283: + break block; + case 11284: + break block10; + case 11285: + break block; + case 11286: + break block10; + case 11287: + break block; + case 11288: + break block10; + case 11289: + break block; + case 11290: + break block10; + case 11291: + break block; + case 11292: + break block10; + case 11293: + break block; + case 11294: + break block10; + case 11295: + break block; + case 11296: + break block10; + case 11297: + break block; + case 11298: + break block10; + case 11299: + break block; + case 11300: + break block10; + case 11301: + break block; + case 11302: + break block10; + case 11303: + break block; + case 11304: + break block10; + case 11305: + break block; + case 11306: + break block10; + case 11307: + break block; + case 11308: + break block10; + case 11309: + break block; + case 11310: + break block10; + case 11311: + break block; + case 11312: + break block10; + case 11313: + break block; + case 11314: + break block10; + case 11315: + break block; + case 11316: + break block10; + case 11317: + break block; + case 11318: + break block10; + case 11319: + break block; + case 11320: + break block10; + case 11321: + break block; + case 11322: + break block10; + case 11323: + break block; + case 11324: + break block10; + case 11325: + break block; + case 11326: + break block10; + case 11327: + break block; + case 11328: + break block10; + case 11329: + break block; + case 11330: + break block10; + case 11331: + break block; + case 11332: + break block10; + case 11333: + break block; + case 11334: + break block10; + case 11335: + break block; + case 11336: + break block10; + case 11337: + break block; + case 11338: + break block10; + case 11339: + break block; + case 11340: + break block10; + case 11341: + break block; + case 11342: + break block10; + case 11343: + break block; + case 11344: + break block10; + case 11345: + break block; + case 11346: + break block10; + case 11347: + break block; + case 11348: + break block10; + case 11349: + break block; + case 11350: + break block10; + case 11351: + break block; + case 11352: + break block10; + case 11353: + break block; + case 11354: + break block10; + case 11355: + break block; + case 11356: + break block10; + case 11357: + break block; + case 11358: + break block10; + case 11359: + break block; + case 11360: + break block10; + case 11361: + break block; + case 11362: + break block10; + case 11363: + break block; + case 11364: + break block10; + case 11365: + break block; + case 11366: + break block10; + case 11367: + break block; + case 11368: + break block10; + case 11369: + break block; + case 11370: + break block10; + case 11371: + break block; + case 11372: + break block10; + case 11373: + break block; + case 11374: + break block10; + case 11375: + break block; + case 11376: + break block10; + case 11377: + break block; + case 11378: + break block10; + case 11379: + break block; + case 11380: + break block10; + case 11381: + break block; + case 11382: + break block10; + case 11383: + break block; + case 11384: + break block10; + case 11385: + break block; + case 11386: + break block10; + case 11387: + break block; + case 11388: + break block10; + case 11389: + break block; + case 11390: + break block10; + case 11391: + break block; + case 11392: + break block10; + case 11393: + break block; + case 11394: + break block10; + case 11395: + break block; + case 11396: + break block10; + case 11397: + break block; + case 11398: + break block10; + case 11399: + break block; + case 11400: + break block10; + case 11401: + break block; + case 11402: + break block10; + case 11403: + break block; + case 11404: + break block10; + case 11405: + break block; + case 11406: + break block10; + case 11407: + break block; + case 11408: + break block10; + case 11409: + break block; + case 11410: + break block10; + case 11411: + break block; + case 11412: + break block10; + case 11413: + break block; + case 11414: + break block10; + case 11415: + break block; + case 11416: + break block10; + case 11417: + break block; + case 11418: + break block10; + case 11419: + break block; + case 11420: + break block10; + case 11421: + break block; + case 11422: + break block10; + case 11423: + break block; + case 11424: + break block10; + case 11425: + break block; + case 11426: + break block10; + case 11427: + break block; + case 11428: + break block10; + case 11429: + break block; + case 11430: + break block10; + case 11431: + break block; + case 11432: + break block10; + case 11433: + break block; + case 11434: + break block10; + case 11435: + break block; + case 11436: + break block10; + case 11437: + break block; + case 11438: + break block10; + case 11439: + break block; + case 11440: + break block10; + case 11441: + break block; + case 11442: + break block10; + case 11443: + break block; + case 11444: + break block10; + case 11445: + break block; + case 11446: + break block10; + case 11447: + break block; + case 11448: + break block10; + case 11449: + break block; + case 11450: + break block10; + case 11451: + break block; + case 11452: + break block10; + case 11453: + break block; + case 11454: + break block10; + case 11455: + break block; + case 11456: + break block10; + case 11457: + break block; + case 11458: + break block10; + case 11459: + break block; + case 11460: + break block10; + case 11461: + break block; + case 11462: + break block10; + case 11463: + break block; + case 11464: + break block10; + case 11465: + break block; + case 11466: + break block10; + case 11467: + break block; + case 11468: + break block10; + case 11469: + break block; + case 11470: + break block10; + case 11471: + break block; + case 11472: + break block10; + case 11473: + break block; + case 11474: + break block10; + case 11475: + break block; + case 11476: + break block10; + case 11477: + break block; + case 11478: + break block10; + case 11479: + break block; + case 11480: + break block10; + case 11481: + break block; + case 11482: + break block10; + case 11483: + break block; + case 11484: + break block10; + case 11485: + break block; + case 11486: + break block10; + case 11487: + break block; + case 11488: + break block10; + case 11489: + break block; + case 11490: + break block10; + case 11491: + break block; + case 11492: + break block10; + case 11493: + break block; + case 11494: + break block10; + case 11495: + break block; + case 11496: + break block10; + case 11497: + break block; + case 11498: + break block10; + case 11499: + break block; + case 11500: + break block10; + case 11501: + break block; + case 11502: + break block10; + case 11503: + break block; + case 11504: + break block10; + case 11505: + break block; + case 11506: + break block10; + case 11507: + break block; + case 11508: + break block10; + case 11509: + break block; + case 11510: + break block10; + case 11511: + break block; + case 11512: + break block10; + case 11513: + break block; + case 11514: + break block10; + case 11515: + break block; + case 11516: + break block10; + case 11517: + break block; + case 11518: + break block10; + case 11519: + break block; + case 11520: + break block10; + case 11521: + break block; + case 11522: + break block10; + case 11523: + break block; + case 11524: + break block10; + case 11525: + break block; + case 11526: + break block10; + case 11527: + break block; + case 11528: + break block10; + case 11529: + break block; + case 11530: + break block10; + case 11531: + break block; + case 11532: + break block10; + case 11533: + break block; + case 11534: + break block10; + case 11535: + break block; + case 11536: + break block10; + case 11537: + break block; + case 11538: + break block10; + case 11539: + break block; + case 11540: + break block10; + case 11541: + break block; + case 11542: + break block10; + case 11543: + break block; + case 11544: + break block10; + case 11545: + break block; + case 11546: + break block10; + case 11547: + break block; + case 11548: + break block10; + case 11549: + break block; + case 11550: + break block10; + case 11551: + break block; + case 11552: + break block10; + case 11553: + break block; + case 11554: + break block10; + case 11555: + break block; + case 11556: + break block10; + case 11557: + break block; + case 11558: + break block10; + case 11559: + break block; + case 11560: + break block10; + case 11561: + break block; + case 11562: + break block10; + case 11563: + break block; + case 11564: + break block10; + case 11565: + break block; + case 11566: + break block10; + case 11567: + break block; + case 11568: + break block10; + case 11569: + break block; + case 11570: + break block10; + case 11571: + break block; + case 11572: + break block10; + case 11573: + break block; + case 11574: + break block10; + case 11575: + break block; + case 11576: + break block10; + case 11577: + break block; + case 11578: + break block10; + case 11579: + break block; + case 11580: + break block10; + case 11581: + break block; + case 11582: + break block10; + case 11583: + break block; + case 11584: + break block10; + case 11585: + break block; + case 11586: + break block10; + case 11587: + break block; + case 11588: + break block10; + case 11589: + break block; + case 11590: + break block10; + case 11591: + break block; + case 11592: + break block10; + case 11593: + break block; + case 11594: + break block10; + case 11595: + break block; + case 11596: + break block10; + case 11597: + break block; + case 11598: + break block10; + case 11599: + break block; + case 11600: + break block10; + case 11601: + break block; + case 11602: + break block10; + case 11603: + break block; + case 11604: + break block10; + case 11605: + break block; + case 11606: + break block10; + case 11607: + break block; + case 11608: + break block10; + case 11609: + break block; + case 11610: + break block10; + case 11611: + break block; + case 11612: + break block10; + case 11613: + break block; + case 11614: + break block10; + case 11615: + break block; + case 11616: + break block10; + case 11617: + break block; + case 11618: + break block10; + case 11619: + break block; + case 11620: + break block10; + case 11621: + break block; + case 11622: + break block10; + case 11623: + break block; + case 11624: + break block10; + case 11625: + break block; + case 11626: + break block10; + case 11627: + break block; + case 11628: + break block10; + case 11629: + break block; + case 11630: + break block10; + case 11631: + break block; + case 11632: + break block10; + case 11633: + break block; + case 11634: + break block10; + case 11635: + break block; + case 11636: + break block10; + case 11637: + break block; + case 11638: + break block10; + case 11639: + break block; + case 11640: + break block10; + case 11641: + break block; + case 11642: + break block10; + case 11643: + break block; + case 11644: + break block10; + case 11645: + break block; + case 11646: + break block10; + case 11647: + break block; + case 11648: + break block10; + case 11649: + break block; + case 11650: + break block10; + case 11651: + break block; + case 11652: + break block10; + case 11653: + break block; + case 11654: + break block10; + case 11655: + break block; + case 11656: + break block10; + case 11657: + break block; + case 11658: + break block10; + case 11659: + break block; + case 11660: + break block10; + case 11661: + break block; + case 11662: + break block10; + case 11663: + break block; + case 11664: + break block10; + case 11665: + break block; + case 11666: + break block10; + case 11667: + break block; + case 11668: + break block10; + case 11669: + break block; + case 11670: + break block10; + case 11671: + break block; + case 11672: + break block10; + case 11673: + break block; + case 11674: + break block10; + case 11675: + break block; + case 11676: + break block10; + case 11677: + break block; + case 11678: + break block10; + case 11679: + break block; + case 11680: + break block10; + case 11681: + break block; + case 11682: + break block10; + case 11683: + break block; + case 11684: + break block10; + case 11685: + break block; + case 11686: + break block10; + case 11687: + break block; + case 11688: + break block10; + case 11689: + break block; + case 11690: + break block10; + case 11691: + break block; + case 11692: + break block10; + case 11693: + break block; + case 11694: + break block10; + case 11695: + break block; + case 11696: + break block10; + case 11697: + break block; + case 11698: + break block10; + case 11699: + break block; + case 11700: + break block10; + case 11701: + break block; + case 11702: + break block10; + case 11703: + break block; + case 11704: + break block10; + case 11705: + break block; + case 11706: + break block10; + case 11707: + break block; + case 11708: + break block10; + case 11709: + break block; + case 11710: + break block10; + case 11711: + break block; + case 11712: + break block10; + case 11713: + break block; + case 11714: + break block10; + case 11715: + break block; + case 11716: + break block10; + case 11717: + break block; + case 11718: + break block10; + case 11719: + break block; + case 11720: + break block10; + case 11721: + break block; + case 11722: + break block10; + case 11723: + break block; + case 11724: + break block10; + case 11725: + break block; + case 11726: + break block10; + case 11727: + break block; + case 11728: + break block10; + case 11729: + break block; + case 11730: + break block10; + case 11731: + break block; + case 11732: + break block10; + case 11733: + break block; + case 11734: + break block10; + case 11735: + break block; + case 11736: + break block10; + case 11737: + break block; + case 11738: + break block10; + case 11739: + break block; + case 11740: + break block10; + case 11741: + break block; + case 11742: + break block10; + case 11743: + break block; + case 11744: + break block10; + case 11745: + break block; + case 11746: + break block10; + case 11747: + break block; + case 11748: + break block10; + case 11749: + break block; + case 11750: + break block10; + case 11751: + break block; + case 11752: + break block10; + case 11753: + break block; + case 11754: + break block10; + case 11755: + break block; + case 11756: + break block10; + case 11757: + break block; + case 11758: + break block10; + case 11759: + break block; + case 11760: + break block10; + case 11761: + break block; + case 11762: + break block10; + case 11763: + break block; + case 11764: + break block10; + case 11765: + break block; + case 11766: + break block10; + case 11767: + break block; + case 11768: + break block10; + case 11769: + break block; + case 11770: + break block10; + case 11771: + break block; + case 11772: + break block10; + case 11773: + break block; + case 11774: + break block10; + case 11775: + break block; + case 11776: + break block10; + case 11777: + break block; + case 11778: + break block10; + case 11779: + break block; + case 11780: + break block10; + case 11781: + break block; + case 11782: + break block10; + case 11783: + break block; + case 11784: + break block10; + case 11785: + break block; + case 11786: + break block10; + case 11787: + break block; + case 11788: + break block10; + case 11789: + break block; + case 11790: + break block10; + case 11791: + break block; + case 11792: + break block10; + case 11793: + break block; + case 11794: + break block10; + case 11795: + break block; + case 11796: + break block10; + case 11797: + break block; + case 11798: + break block10; + case 11799: + break block; + case 11800: + break block10; + case 11801: + break block; + case 11802: + break block10; + case 11803: + break block; + case 11804: + break block10; + case 11805: + break block; + case 11806: + break block10; + case 11807: + break block; + case 11808: + break block10; + case 11809: + break block; + case 11810: + break block10; + case 11811: + break block; + case 11812: + break block10; + case 11813: + break block; + case 11814: + break block10; + case 11815: + break block; + case 11816: + break block10; + case 11817: + break block; + case 11818: + break block10; + case 11819: + break block; + case 11820: + break block10; + case 11821: + break block; + case 11822: + break block10; + case 11823: + break block; + case 11824: + break block10; + case 11825: + break block; + case 11826: + break block10; + case 11827: + break block; + case 11828: + break block10; + case 11829: + break block; + case 11830: + break block10; + case 11831: + break block; + case 11832: + break block10; + case 11833: + break block; + case 11834: + break block10; + case 11835: + break block; + case 11836: + break block10; + case 11837: + break block; + case 11838: + break block10; + case 11839: + break block; + case 11840: + break block10; + case 11841: + break block; + case 11842: + break block10; + case 11843: + break block; + case 11844: + break block10; + case 11845: + break block; + case 11846: + break block10; + case 11847: + break block; + case 11848: + break block10; + case 11849: + break block; + case 11850: + break block10; + case 11851: + break block; + case 11852: + break block10; + case 11853: + break block; + case 11854: + break block10; + case 11855: + break block; + case 11856: + break block10; + case 11857: + break block; + case 11858: + break block10; + case 11859: + break block; + case 11860: + break block10; + case 11861: + break block; + case 11862: + break block10; + case 11863: + break block; + case 11864: + break block10; + case 11865: + break block; + case 11866: + break block10; + case 11867: + break block; + case 11868: + break block10; + case 11869: + break block; + case 11870: + break block10; + case 11871: + break block; + case 11872: + break block10; + case 11873: + break block; + case 11874: + break block10; + case 11875: + break block; + case 11876: + break block10; + case 11877: + break block; + case 11878: + break block10; + case 11879: + break block; + case 11880: + break block10; + case 11881: + break block; + case 11882: + break block10; + case 11883: + break block; + case 11884: + break block10; + case 11885: + break block; + case 11886: + break block10; + case 11887: + break block; + case 11888: + break block10; + case 11889: + break block; + case 11890: + break block10; + case 11891: + break block; + case 11892: + break block10; + case 11893: + break block; + case 11894: + break block10; + case 11895: + break block; + case 11896: + break block10; + case 11897: + break block; + case 11898: + break block10; + case 11899: + break block; + case 11900: + break block10; + case 11901: + break block; + case 11902: + break block10; + case 11903: + break block; + case 11904: + break block10; + case 11905: + break block; + case 11906: + break block10; + case 11907: + break block; + case 11908: + break block10; + case 11909: + break block; + case 11910: + break block10; + case 11911: + break block; + case 11912: + break block10; + case 11913: + break block; + case 11914: + break block10; + case 11915: + break block; + case 11916: + break block10; + case 11917: + break block; + case 11918: + break block10; + case 11919: + break block; + case 11920: + break block10; + case 11921: + break block; + case 11922: + break block10; + case 11923: + break block; + case 11924: + break block10; + case 11925: + break block; + case 11926: + break block10; + case 11927: + break block; + case 11928: + break block10; + case 11929: + break block; + case 11930: + break block10; + case 11931: + break block; + case 11932: + break block10; + case 11933: + break block; + case 11934: + break block10; + case 11935: + break block; + case 11936: + break block10; + case 11937: + break block; + case 11938: + break block10; + case 11939: + break block; + case 11940: + break block10; + case 11941: + break block; + case 11942: + break block10; + case 11943: + break block; + case 11944: + break block10; + case 11945: + break block; + case 11946: + break block10; + case 11947: + break block; + case 11948: + break block10; + case 11949: + break block; + case 11950: + break block10; + case 11951: + break block; + case 11952: + break block10; + case 11953: + break block; + case 11954: + break block10; + case 11955: + break block; + case 11956: + break block10; + case 11957: + break block; + case 11958: + break block10; + case 11959: + break block; + case 11960: + break block10; + case 11961: + break block; + case 11962: + break block10; + case 11963: + break block; + case 11964: + break block10; + case 11965: + break block; + case 11966: + break block10; + case 11967: + break block; + case 11968: + break block10; + case 11969: + break block; + case 11970: + break block10; + case 11971: + break block; + case 11972: + break block10; + case 11973: + break block; + case 11974: + break block10; + case 11975: + break block; + case 11976: + break block10; + case 11977: + break block; + case 11978: + break block10; + case 11979: + break block; + case 11980: + break block10; + case 11981: + break block; + case 11982: + break block10; + case 11983: + break block; + case 11984: + break block10; + case 11985: + break block; + case 11986: + break block10; + case 11987: + break block; + case 11988: + break block10; + case 11989: + break block; + case 11990: + break block10; + case 11991: + break block; + case 11992: + break block10; + case 11993: + break block; + case 11994: + break block10; + case 11995: + break block; + case 11996: + break block10; + case 11997: + break block; + case 11998: + break block10; + case 11999: + break block; + case 12e3: + break block10; + case 12001: + break block; + case 12002: + break block10; + case 12003: + break block; + case 12004: + break block10; + case 12005: + break block; + case 12006: + break block10; + case 12007: + break block; + case 12008: + break block10; + case 12009: + break block; + case 12010: + break block10; + case 12011: + break block; + case 12012: + break block10; + case 12013: + break block; + case 12014: + break block10; + case 12015: + break block; + case 12016: + break block10; + case 12017: + break block; + case 12018: + break block10; + case 12019: + break block; + case 12020: + break block10; + case 12021: + break block; + case 12022: + break block10; + case 12023: + break block; + case 12024: + break block10; + case 12025: + break block; + case 12026: + break block10; + case 12027: + break block; + case 12028: + break block10; + case 12029: + break block; + case 12030: + break block10; + case 12031: + break block; + case 12032: + break block10; + case 12033: + break block; + case 12034: + break block10; + case 12035: + break block; + case 12036: + break block10; + case 12037: + break block; + case 12038: + break block10; + case 12039: + break block; + case 12040: + break block10; + case 12041: + break block; + case 12042: + break block10; + case 12043: + break block; + case 12044: + break block10; + case 12045: + break block; + case 12046: + break block10; + case 12047: + break block; + case 12048: + break block10; + case 12049: + break block; + case 12050: + break block10; + case 12051: + break block; + case 12052: + break block10; + case 12053: + break block; + case 12054: + break block10; + case 12055: + break block; + case 12056: + break block10; + case 12057: + break block; + case 12058: + break block10; + case 12059: + break block; + case 12060: + break block10; + case 12061: + break block; + case 12062: + break block10; + case 12063: + break block; + case 12064: + break block10; + case 12065: + break block; + case 12066: + break block10; + case 12067: + break block; + case 12068: + break block10; + case 12069: + break block; + case 12070: + break block10; + case 12071: + break block; + case 12072: + break block10; + case 12073: + break block; + case 12074: + break block10; + case 12075: + break block; + case 12076: + break block10; + case 12077: + break block; + case 12078: + break block10; + case 12079: + break block; + case 12080: + break block10; + case 12081: + break block; + case 12082: + break block10; + case 12083: + break block; + case 12084: + break block10; + case 12085: + break block; + case 12086: + break block10; + case 12087: + break block; + case 12088: + break block10; + case 12089: + break block; + case 12090: + break block10; + case 12091: + break block; + case 12092: + break block10; + case 12093: + break block; + case 12094: + break block10; + case 12095: + break block; + case 12096: + break block10; + case 12097: + break block; + case 12098: + break block10; + case 12099: + break block; + case 12100: + break block10; + case 12101: + break block; + case 12102: + break block10; + case 12103: + break block; + case 12104: + break block10; + case 12105: + break block; + case 12106: + break block10; + case 12107: + break block; + case 12108: + break block10; + case 12109: + break block; + case 12110: + break block10; + case 12111: + break block; + case 12112: + break block10; + case 12113: + break block; + case 12114: + break block10; + case 12115: + break block; + case 12116: + break block10; + case 12117: + break block; + case 12118: + break block10; + case 12119: + break block; + case 12120: + break block10; + case 12121: + break block; + case 12122: + break block10; + case 12123: + break block; + case 12124: + break block10; + case 12125: + break block; + case 12126: + break block10; + case 12127: + break block; + case 12128: + break block10; + case 12129: + break block; + case 12130: + break block10; + case 12131: + break block; + case 12132: + break block10; + case 12133: + break block; + case 12134: + break block10; + case 12135: + break block; + case 12136: + break block10; + case 12137: + break block; + case 12138: + break block10; + case 12139: + break block; + case 12140: + break block10; + case 12141: + break block; + case 12142: + break block10; + case 12143: + break block; + case 12144: + break block10; + case 12145: + break block; + case 12146: + break block10; + case 12147: + break block; + case 12148: + break block10; + case 12149: + break block; + case 12150: + break block10; + case 12151: + break block; + case 12152: + break block10; + case 12153: + break block; + case 12154: + break block10; + case 12155: + break block; + case 12156: + break block10; + case 12157: + break block; + case 12158: + break block10; + case 12159: + break block; + case 12160: + break block10; + case 12161: + break block; + case 12162: + break block10; + case 12163: + break block; + case 12164: + break block10; + case 12165: + break block; + case 12166: + break block10; + case 12167: + break block; + case 12168: + break block10; + case 12169: + break block; + case 12170: + break block10; + case 12171: + break block; + case 12172: + break block10; + case 12173: + break block; + case 12174: + break block10; + case 12175: + break block; + case 12176: + break block10; + case 12177: + break block; + case 12178: + break block10; + case 12179: + break block; + case 12180: + break block10; + case 12181: + break block; + case 12182: + break block10; + case 12183: + break block; + case 12184: + break block10; + case 12185: + break block; + case 12186: + break block10; + case 12187: + break block; + case 12188: + break block10; + case 12189: + break block; + case 12190: + break block10; + case 12191: + break block; + case 12192: + break block10; + case 12193: + break block; + case 12194: + break block10; + case 12195: + break block; + case 12196: + break block10; + case 12197: + break block; + case 12198: + break block10; + case 12199: + break block; + case 12200: + break block10; + case 12201: + break block; + case 12202: + break block10; + case 12203: + break block; + case 12204: + break block10; + case 12205: + break block; + case 12206: + break block10; + case 12207: + break block; + case 12208: + break block10; + case 12209: + break block; + case 12210: + break block10; + case 12211: + break block; + case 12212: + break block10; + case 12213: + break block; + case 12214: + break block10; + case 12215: + break block; + case 12216: + break block10; + case 12217: + break block; + case 12218: + break block10; + case 12219: + break block; + case 12220: + break block10; + case 12221: + break block; + case 12222: + break block10; + case 12223: + break block; + case 12224: + break block10; + case 12225: + break block; + case 12226: + break block10; + case 12227: + break block; + case 12228: + break block10; + case 12229: + break block; + case 12230: + break block10; + case 12231: + break block; + case 12232: + break block10; + case 12233: + break block; + case 12234: + break block10; + case 12235: + break block; + case 12236: + break block10; + case 12237: + break block; + case 12238: + break block10; + case 12239: + break block; + case 12240: + break block10; + case 12241: + break block; + case 12242: + break block10; + case 12243: + break block; + case 12244: + break block10; + case 12245: + break block; + case 12246: + break block10; + case 12247: + break block; + case 12248: + break block10; + case 12249: + break block; + case 12250: + break block10; + case 12251: + break block; + case 12252: + break block10; + case 12253: + break block; + case 12254: + break block10; + case 12255: + break block; + case 12256: + break block10; + case 12257: + break block; + case 12258: + break block10; + case 12259: + break block; + case 12260: + break block10; + case 12261: + break block; + case 12262: + break block10; + case 12263: + break block; + case 12264: + break block10; + case 12265: + break block; + case 12266: + break block10; + case 12267: + break block; + case 12268: + break block10; + case 12269: + break block; + case 12270: + break block10; + case 12271: + break block; + case 12272: + break block10; + case 12273: + break block; + case 12274: + break block10; + case 12275: + break block; + case 12276: + break block10; + case 12277: + break block; + case 12278: + break block10; + case 12279: + break block; + case 12280: + break block10; + case 12281: + break block; + case 12282: + break block10; + case 12283: + break block; + case 12284: + break block10; + case 12285: + break block; + case 12286: + break block10; + case 12287: + break block; + case 12288: + break block10; + case 12289: + break block; + case 12290: + break block10; + case 12291: + break block; + case 12292: + break block10; + case 12293: + break block; + case 12294: + break block10; + case 12295: + break block; + case 12296: + break block10; + case 12297: + break block; + case 12298: + break block10; + case 12299: + break block; + case 12300: + break block10; + case 12301: + break block; + case 12302: + break block10; + case 12303: + break block; + case 12304: + break block10; + case 12305: + break block; + case 12306: + break block10; + case 12307: + break block; + case 12308: + break block10; + case 12309: + break block; + case 12310: + break block10; + case 12311: + break block; + case 12312: + break block10; + case 12313: + break block; + case 12314: + break block10; + case 12315: + break block; + case 12316: + break block10; + case 12317: + break block; + case 12318: + break block10; + case 12319: + break block; + case 12320: + break block10; + case 12321: + break block; + case 12322: + break block10; + case 12323: + break block; + case 12324: + break block10; + case 12325: + break block; + case 12326: + break block10; + case 12327: + break block; + case 12328: + break block10; + case 12329: + break block; + case 12330: + break block10; + case 12331: + break block; + case 12332: + break block10; + case 12333: + break block; + case 12334: + break block10; + case 12335: + break block; + case 12336: + break block10; + case 12337: + break block; + case 12338: + break block10; + case 12339: + break block; + case 12340: + break block10; + case 12341: + break block; + case 12342: + break block10; + case 12343: + break block; + case 12344: + break block10; + case 12345: + break block; + case 12346: + break block10; + case 12347: + break block; + case 12348: + break block10; + case 12349: + break block; + case 12350: + break block10; + case 12351: + break block; + case 12352: + break block10; + case 12353: + break block; + case 12354: + break block10; + case 12355: + break block; + case 12356: + break block10; + case 12357: + break block; + case 12358: + break block10; + case 12359: + break block; + case 12360: + break block10; + case 12361: + break block; + case 12362: + break block10; + case 12363: + break block; + case 12364: + break block10; + case 12365: + break block; + case 12366: + break block10; + case 12367: + break block; + case 12368: + break block10; + case 12369: + break block; + case 12370: + break block10; + case 12371: + break block; + case 12372: + break block10; + case 12373: + break block; + case 12374: + break block10; + case 12375: + break block; + case 12376: + break block10; + case 12377: + break block; + case 12378: + break block10; + case 12379: + break block; + case 12380: + break block10; + case 12381: + break block; + case 12382: + break block10; + case 12383: + break block; + case 12384: + break block10; + case 12385: + break block; + case 12386: + break block10; + case 12387: + break block; + case 12388: + break block10; + case 12389: + break block; + case 12390: + break block10; + case 12391: + break block; + case 12392: + break block10; + case 12393: + break block; + case 12394: + break block10; + case 12395: + break block; + case 12396: + break block10; + case 12397: + break block; + case 12398: + break block10; + case 12399: + break block; + case 12400: + break block10; + case 12401: + break block; + case 12402: + break block10; + case 12403: + break block; + case 12404: + break block10; + case 12405: + break block; + case 12406: + break block10; + case 12407: + break block; + case 12408: + break block10; + case 12409: + break block; + case 12410: + break block10; + case 12411: + break block; + case 12412: + break block10; + case 12413: + break block; + case 12414: + break block10; + case 12415: + break block; + case 12416: + break block10; + case 12417: + break block; + case 12418: + break block10; + case 12419: + break block; + case 12420: + break block10; + case 12421: + break block; + case 12422: + break block10; + case 12423: + break block; + case 12424: + break block10; + case 12425: + break block; + case 12426: + break block10; + case 12427: + break block; + case 12428: + break block10; + case 12429: + break block; + case 12430: + break block10; + case 12431: + break block; + case 12432: + break block10; + case 12433: + break block; + case 12434: + break block10; + case 12435: + break block; + case 12436: + break block10; + case 12437: + break block; + case 12438: + break block10; + case 12439: + break block; + case 12440: + break block10; + case 12441: + break block; + case 12442: + break block10; + case 12443: + break block; + case 12444: + break block10; + case 12445: + break block; + case 12446: + break block10; + case 12447: + break block; + case 12448: + break block10; + case 12449: + break block; + case 12450: + break block10; + case 12451: + break block; + case 12452: + break block10; + case 12453: + break block; + case 12454: + break block10; + case 12455: + break block; + case 12456: + break block10; + case 12457: + break block; + case 12458: + break block10; + case 12459: + break block; + case 12460: + break block10; + case 12461: + break block; + case 12462: + break block10; + case 12463: + break block; + case 12464: + break block10; + case 12465: + break block; + case 12466: + break block10; + case 12467: + break block; + case 12468: + break block10; + case 12469: + break block; + case 12470: + break block10; + case 12471: + break block; + case 12472: + break block10; + case 12473: + break block; + case 12474: + break block10; + case 12475: + break block; + case 12476: + break block10; + case 12477: + break block; + case 12478: + break block10; + case 12479: + break block; + case 12480: + break block10; + case 12481: + break block; + case 12482: + break block10; + case 12483: + break block; + case 12484: + break block10; + case 12485: + break block; + case 12486: + break block10; + case 12487: + break block; + case 12488: + break block10; + case 12489: + break block; + case 12490: + break block10; + case 12491: + break block; + case 12492: + break block10; + case 12493: + break block; + case 12494: + break block10; + case 12495: + break block; + case 12496: + break block10; + case 12497: + break block; + case 12498: + break block10; + case 12499: + break block; + case 12500: + break block10; + case 12501: + break block; + case 12502: + break block10; + case 12503: + break block; + case 12504: + break block10; + case 12505: + break block; + case 12506: + break block10; + case 12507: + break block; + case 12508: + break block10; + case 12509: + break block; + case 12510: + break block10; + case 12511: + break block; + case 12512: + break block10; + case 12513: + break block; + case 12514: + break block10; + case 12515: + break block; + case 12516: + break block10; + case 12517: + break block; + case 12518: + break block10; + case 12519: + break block; + case 12520: + break block10; + case 12521: + break block; + case 12522: + break block10; + case 12523: + break block; + case 12524: + break block10; + case 12525: + break block; + case 12526: + break block10; + case 12527: + break block; + case 12528: + break block10; + case 12529: + break block; + case 12530: + break block10; + case 12531: + break block; + case 12532: + break block10; + case 12533: + break block; + case 12534: + break block10; + case 12535: + break block; + case 12536: + break block10; + case 12537: + break block; + case 12538: + break block10; + case 12539: + break block; + case 12540: + break block10; + case 12541: + break block; + case 12542: + break block10; + case 12543: + break block; + case 12544: + break block10; + case 12545: + break block; + case 12546: + break block10; + case 12547: + break block; + case 12548: + break block10; + case 12549: + break block; + case 12550: + break block10; + case 12551: + break block; + case 12552: + break block10; + case 12553: + break block; + case 12554: + break block10; + case 12555: + break block; + case 12556: + break block10; + case 12557: + break block; + case 12558: + break block10; + case 12559: + break block; + case 12560: + break block10; + case 12561: + break block; + case 12562: + break block10; + case 12563: + break block; + case 12564: + break block10; + case 12565: + break block; + case 12566: + break block10; + case 12567: + break block; + case 12568: + break block10; + case 12569: + break block; + case 12570: + break block10; + case 12571: + break block; + case 12572: + break block10; + case 12573: + break block; + case 12574: + break block10; + case 12575: + break block; + case 12576: + break block10; + case 12577: + break block; + case 12578: + break block10; + case 12579: + break block; + case 12580: + break block10; + case 12581: + break block; + case 12582: + break block10; + case 12583: + break block; + case 12584: + break block10; + case 12585: + break block; + case 12586: + break block10; + case 12587: + break block; + case 12588: + break block10; + case 12589: + break block; + case 12590: + break block10; + case 12591: + break block; + case 12592: + break block10; + case 12593: + break block; + case 12594: + break block10; + case 12595: + break block; + case 12596: + break block10; + case 12597: + break block; + case 12598: + break block10; + case 12599: + break block; + case 12600: + break block10; + case 12601: + break block; + case 12602: + break block10; + case 12603: + break block; + case 12604: + break block10; + case 12605: + break block; + case 12606: + break block10; + case 12607: + break block; + case 12608: + break block10; + case 12609: + break block; + case 12610: + break block10; + case 12611: + break block; + case 12612: + break block10; + case 12613: + break block; + case 12614: + break block10; + case 12615: + break block; + case 12616: + break block10; + case 12617: + break block; + case 12618: + break block10; + case 12619: + break block; + case 12620: + break block10; + case 12621: + break block; + case 12622: + break block10; + case 12623: + break block; + case 12624: + break block10; + case 12625: + break block; + case 12626: + break block10; + case 12627: + break block; + case 12628: + break block10; + case 12629: + break block; + case 12630: + break block10; + case 12631: + break block; + case 12632: + break block10; + case 12633: + break block; + case 12634: + break block10; + case 12635: + break block; + case 12636: + break block10; + case 12637: + break block; + case 12638: + break block10; + case 12639: + break block; + case 12640: + break block10; + case 12641: + break block; + case 12642: + break block10; + case 12643: + break block; + case 12644: + break block10; + case 12645: + break block; + case 12646: + break block10; + case 12647: + break block; + case 12648: + break block10; + case 12649: + break block; + case 12650: + break block10; + case 12651: + break block; + case 12652: + break block10; + case 12653: + break block; + case 12654: + break block10; + case 12655: + break block; + case 12656: + break block10; + case 12657: + break block; + case 12658: + break block10; + case 12659: + break block; + case 12660: + break block10; + case 12661: + break block; + case 12662: + break block10; + case 12663: + break block; + case 12664: + break block10; + case 12665: + break block; + case 12666: + break block10; + case 12667: + break block; + case 12668: + break block10; + case 12669: + break block; + case 12670: + break block10; + case 12671: + break block; + case 12672: + break block10; + case 12673: + break block; + case 12674: + break block10; + case 12675: + break block; + case 12676: + break block10; + case 12677: + break block; + case 12678: + break block10; + case 12679: + break block; + case 12680: + break block10; + case 12681: + break block; + case 12682: + break block10; + case 12683: + break block; + case 12684: + break block10; + case 12685: + break block; + case 12686: + break block10; + case 12687: + break block; + case 12688: + break block10; + case 12689: + break block; + case 12690: + break block10; + case 12691: + break block; + case 12692: + break block10; + case 12693: + break block; + case 12694: + break block10; + case 12695: + break block; + case 12696: + break block10; + case 12697: + break block; + case 12698: + break block10; + case 12699: + break block; + case 12700: + break block10; + case 12701: + break block; + case 12702: + break block10; + case 12703: + break block; + case 12704: + break block10; + case 12705: + break block; + case 12706: + break block10; + case 12707: + break block; + case 12708: + break block10; + case 12709: + break block; + case 12710: + break block10; + case 12711: + break block; + case 12712: + break block10; + case 12713: + break block; + case 12714: + break block10; + case 12715: + break block; + case 12716: + break block10; + case 12717: + break block; + case 12718: + break block10; + case 12719: + break block; + case 12720: + break block10; + case 12721: + break block; + case 12722: + break block10; + case 12723: + break block; + case 12724: + break block10; + case 12725: + break block; + case 12726: + break block10; + case 12727: + break block; + case 12728: + break block10; + case 12729: + break block; + case 12730: + break block10; + case 12731: + break block; + case 12732: + break block10; + case 12733: + break block; + case 12734: + break block10; + case 12735: + break block; + case 12736: + break block10; + case 12737: + break block; + case 12738: + break block10; + case 12739: + break block; + case 12740: + break block10; + case 12741: + break block; + case 12742: + break block10; + case 12743: + break block; + case 12744: + break block10; + case 12745: + break block; + case 12746: + break block10; + case 12747: + break block; + case 12748: + break block10; + case 12749: + break block; + case 12750: + break block10; + case 12751: + break block; + case 12752: + break block10; + case 12753: + break block; + case 12754: + break block10; + case 12755: + break block; + case 12756: + break block10; + case 12757: + break block; + case 12758: + break block10; + case 12759: + break block; + case 12760: + break block10; + case 12761: + break block; + case 12762: + break block10; + case 12763: + break block; + case 12764: + break block10; + case 12765: + break block; + case 12766: + break block10; + case 12767: + break block; + case 12768: + break block10; + case 12769: + break block; + case 12770: + break block10; + case 12771: + break block; + case 12772: + break block10; + case 12773: + break block; + case 12774: + break block10; + case 12775: + break block; + case 12776: + break block10; + case 12777: + break block; + case 12778: + break block10; + case 12779: + break block; + case 12780: + break block10; + case 12781: + break block; + case 12782: + break block10; + case 12783: + break block; + case 12784: + break block10; + case 12785: + break block; + case 12786: + break block10; + case 12787: + break block; + case 12788: + break block10; + case 12789: + break block; + case 12790: + break block10; + case 12791: + break block; + case 12792: + break block10; + case 12793: + break block; + case 12794: + break block10; + case 12795: + break block; + case 12796: + break block10; + case 12797: + break block; + case 12798: + break block10; + case 12799: + break block; + case 12800: + break block10; + case 12801: + break block; + case 12802: + break block10; + case 12803: + break block; + case 12804: + break block10; + case 12805: + break block; + case 12806: + break block10; + case 12807: + break block; + case 12808: + break block10; + case 12809: + break block; + case 12810: + break block10; + case 12811: + break block; + case 12812: + break block10; + case 12813: + break block; + case 12814: + break block10; + case 12815: + break block; + case 12816: + break block10; + case 12817: + break block; + case 12818: + break block10; + case 12819: + break block; + case 12820: + break block10; + case 12821: + break block; + case 12822: + break block10; + case 12823: + break block; + case 12824: + break block10; + case 12825: + break block; + case 12826: + break block10; + case 12827: + break block; + case 12828: + break block10; + case 12829: + break block; + case 12830: + break block10; + case 12831: + break block; + case 12832: + break block10; + case 12833: + break block; + case 12834: + break block10; + case 12835: + break block; + case 12836: + break block10; + case 12837: + break block; + case 12838: + break block10; + case 12839: + break block; + case 12840: + break block10; + case 12841: + break block; + case 12842: + break block10; + case 12843: + break block; + case 12844: + break block10; + case 12845: + break block; + case 12846: + break block10; + case 12847: + break block; + case 12848: + break block10; + case 12849: + break block; + case 12850: + break block10; + case 12851: + break block; + case 12852: + break block10; + case 12853: + break block; + case 12854: + break block10; + case 12855: + break block; + case 12856: + break block10; + case 12857: + break block; + case 12858: + break block10; + case 12859: + break block; + case 12860: + break block10; + case 12861: + break block; + case 12862: + break block10; + case 12863: + break block; + case 12864: + break block10; + case 12865: + break block; + case 12866: + break block10; + case 12867: + break block; + case 12868: + break block10; + case 12869: + break block; + case 12870: + break block10; + case 12871: + break block; + case 12872: + break block10; + case 12873: + break block; + case 12874: + break block10; + case 12875: + break block; + case 12876: + break block10; + case 12877: + break block; + case 12878: + break block10; + case 12879: + break block; + case 12880: + break block10; + case 12881: + break block; + case 12882: + break block10; + case 12883: + break block; + case 12884: + break block10; + case 12885: + break block; + case 12886: + break block10; + case 12887: + break block; + case 12888: + break block10; + case 12889: + break block; + case 12890: + break block10; + case 12891: + break block; + case 12892: + break block10; + case 12893: + break block; + case 12894: + break block10; + case 12895: + break block; + case 12896: + break block10; + case 12897: + break block; + case 12898: + break block10; + case 12899: + break block; + case 12900: + break block10; + case 12901: + break block; + case 12902: + break block10; + case 12903: + break block; + case 12904: + break block10; + case 12905: + break block; + case 12906: + break block10; + case 12907: + break block; + case 12908: + break block10; + case 12909: + break block; + case 12910: + break block10; + case 12911: + break block; + case 12912: + break block10; + case 12913: + break block; + case 12914: + break block10; + case 12915: + break block; + case 12916: + break block10; + case 12917: + break block; + case 12918: + break block10; + case 12919: + break block; + case 12920: + break block10; + case 12921: + break block; + case 12922: + break block10; + case 12923: + break block; + case 12924: + break block10; + case 12925: + break block; + case 12926: + break block10; + case 12927: + break block; + case 12928: + break block10; + case 12929: + break block; + case 12930: + break block10; + case 12931: + break block; + case 12932: + break block10; + case 12933: + break block; + case 12934: + break block10; + case 12935: + break block; + case 12936: + break block10; + case 12937: + break block; + case 12938: + break block10; + case 12939: + break block; + case 12940: + break block10; + case 12941: + break block; + case 12942: + break block10; + case 12943: + break block; + case 12944: + break block10; + case 12945: + break block; + case 12946: + break block10; + case 12947: + break block; + case 12948: + break block10; + case 12949: + break block; + case 12950: + break block10; + case 12951: + break block; + case 12952: + break block10; + case 12953: + break block; + case 12954: + break block10; + case 12955: + break block; + case 12956: + break block10; + case 12957: + break block; + case 12958: + break block10; + case 12959: + break block; + case 12960: + break block10; + case 12961: + break block; + case 12962: + break block10; + case 12963: + break block; + case 12964: + break block10; + case 12965: + break block; + case 12966: + break block10; + case 12967: + break block; + case 12968: + break block10; + case 12969: + break block; + case 12970: + break block10; + case 12971: + break block; + case 12972: + break block10; + case 12973: + break block; + case 12974: + break block10; + case 12975: + break block; + case 12976: + break block10; + case 12977: + break block; + case 12978: + break block10; + case 12979: + break block; + case 12980: + break block10; + case 12981: + break block; + case 12982: + break block10; + case 12983: + break block; + case 12984: + break block10; + case 12985: + break block; + case 12986: + break block10; + case 12987: + break block; + case 12988: + break block10; + case 12989: + break block; + case 12990: + break block10; + case 12991: + break block; + case 12992: + break block10; + case 12993: + break block; + case 12994: + break block10; + case 12995: + break block; + case 12996: + break block10; + case 12997: + break block; + case 12998: + break block10; + case 12999: + break block; + case 13e3: + break block10; + case 13001: + break block; + case 13002: + break block10; + case 13003: + break block; + case 13004: + break block10; + case 13005: + break block; + case 13006: + break block10; + case 13007: + break block; + case 13008: + break block10; + case 13009: + break block; + case 13010: + break block10; + case 13011: + break block; + case 13012: + break block10; + case 13013: + break block; + case 13014: + break block10; + case 13015: + break block; + case 13016: + break block10; + case 13017: + break block; + case 13018: + break block10; + case 13019: + break block; + case 13020: + break block10; + case 13021: + break block; + case 13022: + break block10; + case 13023: + break block; + case 13024: + break block10; + case 13025: + break block; + case 13026: + break block10; + case 13027: + break block; + case 13028: + break block10; + case 13029: + break block; + case 13030: + break block10; + case 13031: + break block; + case 13032: + break block10; + case 13033: + break block; + case 13034: + break block10; + case 13035: + break block; + case 13036: + break block10; + case 13037: + break block; + case 13038: + break block10; + case 13039: + break block; + case 13040: + break block10; + case 13041: + break block; + case 13042: + break block10; + case 13043: + break block; + case 13044: + break block10; + case 13045: + break block; + case 13046: + break block10; + case 13047: + break block; + case 13048: + break block10; + case 13049: + break block; + case 13050: + break block10; + case 13051: + break block; + case 13052: + break block10; + case 13053: + break block; + case 13054: + break block10; + case 13055: + break block; + case 13056: + break block10; + case 13057: + break block; + case 13058: + break block10; + case 13059: + break block; + case 13060: + break block10; + case 13061: + break block; + case 13062: + break block10; + case 13063: + break block; + case 13064: + break block10; + case 13065: + break block; + case 13066: + break block10; + case 13067: + break block; + case 13068: + break block10; + case 13069: + break block; + case 13070: + break block10; + case 13071: + break block; + case 13072: + break block10; + case 13073: + break block; + case 13074: + break block10; + case 13075: + break block; + case 13076: + break block10; + case 13077: + break block; + case 13078: + break block10; + case 13079: + break block; + case 13080: + break block10; + case 13081: + break block; + case 13082: + break block10; + case 13083: + break block; + case 13084: + break block10; + case 13085: + break block; + case 13086: + break block10; + case 13087: + break block; + case 13088: + break block10; + case 13089: + break block; + case 13090: + break block10; + case 13091: + break block; + case 13092: + break block10; + case 13093: + break block; + case 13094: + break block10; + case 13095: + break block; + case 13096: + break block10; + case 13097: + break block; + case 13098: + break block10; + case 13099: + break block; + case 13100: + break block10; + case 13101: + break block; + case 13102: + break block10; + case 13103: + break block; + case 13104: + break block10; + case 13105: + break block; + case 13106: + break block10; + case 13107: + break block; + case 13108: + break block10; + case 13109: + break block; + case 13110: + break block10; + case 13111: + break block; + case 13112: + break block10; + case 13113: + break block; + case 13114: + break block10; + case 13115: + break block; + case 13116: + break block10; + case 13117: + break block; + case 13118: + break block10; + case 13119: + break block; + case 13120: + break block10; + case 13121: + break block; + case 13122: + break block10; + case 13123: + break block; + case 13124: + break block10; + case 13125: + break block; + case 13126: + break block10; + case 13127: + break block; + case 13128: + break block10; + case 13129: + break block; + case 13130: + break block10; + case 13131: + break block; + case 13132: + break block10; + case 13133: + break block; + case 13134: + break block10; + case 13135: + break block; + case 13136: + break block10; + case 13137: + break block; + case 13138: + break block10; + case 13139: + break block; + case 13140: + break block10; + case 13141: + break block; + case 13142: + break block10; + case 13143: + break block; + case 13144: + break block10; + case 13145: + break block; + case 13146: + break block10; + case 13147: + break block; + case 13148: + break block10; + case 13149: + break block; + case 13150: + break block10; + case 13151: + break block; + case 13152: + break block10; + case 13153: + break block; + case 13154: + break block10; + case 13155: + break block; + case 13156: + break block10; + case 13157: + break block; + case 13158: + break block10; + case 13159: + break block; + case 13160: + break block10; + case 13161: + break block; + case 13162: + break block10; + case 13163: + break block; + case 13164: + break block10; + case 13165: + break block; + case 13166: + break block10; + case 13167: + break block; + case 13168: + break block10; + case 13169: + break block; + case 13170: + break block10; + case 13171: + break block; + case 13172: + break block10; + case 13173: + break block; + case 13174: + break block10; + case 13175: + break block; + case 13176: + break block10; + case 13177: + break block; + case 13178: + break block10; + case 13179: + break block; + case 13180: + break block10; + case 13181: + break block; + case 13182: + break block10; + case 13183: + break block; + case 13184: + break block10; + case 13185: + break block; + case 13186: + break block10; + case 13187: + break block; + case 13188: + break block10; + case 13189: + break block; + case 13190: + break block10; + case 13191: + break block; + case 13192: + break block10; + case 13193: + break block; + case 13194: + break block10; + case 13195: + break block; + case 13196: + break block10; + case 13197: + break block; + case 13198: + break block10; + case 13199: + break block; + case 13200: + break block10; + case 13201: + break block; + case 13202: + break block10; + case 13203: + break block; + case 13204: + break block10; + case 13205: + break block; + case 13206: + break block10; + case 13207: + break block; + case 13208: + break block10; + case 13209: + break block; + case 13210: + break block10; + case 13211: + break block; + case 13212: + break block10; + case 13213: + break block; + case 13214: + break block10; + case 13215: + break block; + case 13216: + break block10; + case 13217: + break block; + case 13218: + break block10; + case 13219: + break block; + case 13220: + break block10; + case 13221: + break block; + case 13222: + break block10; + case 13223: + break block; + case 13224: + break block10; + case 13225: + break block; + case 13226: + break block10; + case 13227: + break block; + case 13228: + break block10; + case 13229: + break block; + case 13230: + break block10; + case 13231: + break block; + case 13232: + break block10; + case 13233: + break block; + case 13234: + break block10; + case 13235: + break block; + case 13236: + break block10; + case 13237: + break block; + case 13238: + break block10; + case 13239: + break block; + case 13240: + break block10; + case 13241: + break block; + case 13242: + break block10; + case 13243: + break block; + case 13244: + break block10; + case 13245: + break block; + case 13246: + break block10; + case 13247: + break block; + case 13248: + break block10; + case 13249: + break block; + case 13250: + break block10; + case 13251: + break block; + case 13252: + break block10; + case 13253: + break block; + case 13254: + break block10; + case 13255: + break block; + case 13256: + break block10; + case 13257: + break block; + case 13258: + break block10; + case 13259: + break block; + case 13260: + break block10; + case 13261: + break block; + case 13262: + break block10; + case 13263: + break block; + case 13264: + break block10; + case 13265: + break block; + case 13266: + break block10; + case 13267: + break block; + case 13268: + break block10; + case 13269: + break block; + case 13270: + break block10; + case 13271: + break block; + case 13272: + break block10; + case 13273: + break block; + case 13274: + break block10; + case 13275: + break block; + case 13276: + break block10; + case 13277: + break block; + case 13278: + break block10; + case 13279: + break block; + case 13280: + break block10; + case 13281: + break block; + case 13282: + break block10; + case 13283: + break block; + case 13284: + break block10; + case 13285: + break block; + case 13286: + break block10; + case 13287: + break block; + case 13288: + break block10; + case 13289: + break block; + case 13290: + break block10; + case 13291: + break block; + case 13292: + break block10; + case 13293: + break block; + case 13294: + break block10; + case 13295: + break block; + case 13296: + break block10; + case 13297: + break block; + case 13298: + break block10; + case 13299: + break block; + case 13300: + break block10; + case 13301: + break block; + case 13302: + break block10; + case 13303: + break block; + case 13304: + break block10; + case 13305: + break block; + case 13306: + break block10; + case 13307: + break block; + case 13308: + break block10; + case 13309: + break block; + case 13310: + break block10; + case 13311: + break block; + case 13312: + break block10; + case 13313: + break block; + case 13314: + break block10; + case 13315: + break block; + case 13316: + break block10; + case 13317: + break block; + case 13318: + break block10; + case 13319: + break block; + case 13320: + break block10; + case 13321: + break block; + case 13322: + break block10; + case 13323: + break block; + case 13324: + break block10; + case 13325: + break block; + case 13326: + break block10; + case 13327: + break block; + case 13328: + break block10; + case 13329: + break block; + case 13330: + break block10; + case 13331: + break block; + case 13332: + break block10; + case 13333: + break block; + case 13334: + break block10; + case 13335: + break block; + case 13336: + break block10; + case 13337: + break block; + case 13338: + break block10; + case 13339: + break block; + case 13340: + break block10; + case 13341: + break block; + case 13342: + break block10; + case 13343: + break block; + case 13344: + break block10; + case 13345: + break block; + case 13346: + break block10; + case 13347: + break block; + case 13348: + break block10; + case 13349: + break block; + case 13350: + break block10; + case 13351: + break block; + case 13352: + break block10; + case 13353: + break block; + case 13354: + break block10; + case 13355: + break block; + case 13356: + break block10; + case 13357: + break block; + case 13358: + break block10; + case 13359: + break block; + case 13360: + break block10; + case 13361: + break block; + case 13362: + break block10; + case 13363: + break block; + case 13364: + break block10; + case 13365: + break block; + case 13366: + break block10; + case 13367: + break block; + case 13368: + break block10; + case 13369: + break block; + case 13370: + break block10; + case 13371: + break block; + case 13372: + break block10; + case 13373: + break block; + case 13374: + break block10; + case 13375: + break block; + case 13376: + break block10; + case 13377: + break block; + case 13378: + break block10; + case 13379: + break block; + case 13380: + break block10; + case 13381: + break block; + case 13382: + break block10; + case 13383: + break block; + case 13384: + break block10; + case 13385: + break block; + case 13386: + break block10; + case 13387: + break block; + case 13388: + break block10; + case 13389: + break block; + case 13390: + break block10; + case 13391: + break block; + case 13392: + break block10; + case 13393: + break block; + case 13394: + break block10; + case 13395: + break block; + case 13396: + break block10; + case 13397: + break block; + case 13398: + break block10; + case 13399: + break block; + case 13400: + break block10; + case 13401: + break block; + case 13402: + break block10; + case 13403: + break block; + case 13404: + break block10; + case 13405: + break block; + case 13406: + break block10; + case 13407: + break block; + case 13408: + break block10; + case 13409: + break block; + case 13410: + break block10; + case 13411: + break block; + case 13412: + break block10; + case 13413: + break block; + case 13414: + break block10; + case 13415: + break block; + case 13416: + break block10; + case 13417: + break block; + case 13418: + break block10; + case 13419: + break block; + case 13420: + break block10; + case 13421: + break block; + case 13422: + break block10; + case 13423: + break block; + case 13424: + break block10; + case 13425: + break block; + case 13426: + break block10; + case 13427: + break block; + case 13428: + break block10; + case 13429: + break block; + case 13430: + break block10; + case 13431: + break block; + case 13432: + break block10; + case 13433: + break block; + case 13434: + break block10; + case 13435: + break block; + case 13436: + break block10; + case 13437: + break block; + case 13438: + break block10; + case 13439: + break block; + case 13440: + break block10; + case 13441: + break block; + case 13442: + break block10; + case 13443: + break block; + case 13444: + break block10; + case 13445: + break block; + case 13446: + break block10; + case 13447: + break block; + case 13448: + break block10; + case 13449: + break block; + case 13450: + break block10; + case 13451: + break block; + case 13452: + break block10; + case 13453: + break block; + case 13454: + break block10; + case 13455: + break block; + case 13456: + break block10; + case 13457: + break block; + case 13458: + break block10; + case 13459: + break block; + case 13460: + break block10; + case 13461: + break block; + case 13462: + break block10; + case 13463: + break block; + case 13464: + break block10; + case 13465: + break block; + case 13466: + break block10; + case 13467: + break block; + case 13468: + break block10; + case 13469: + break block; + case 13470: + break block10; + case 13471: + break block; + case 13472: + break block10; + case 13473: + break block; + case 13474: + break block10; + case 13475: + break block; + case 13476: + break block10; + case 13477: + break block; + case 13478: + break block10; + case 13479: + break block; + case 13480: + break block10; + case 13481: + break block; + case 13482: + break block10; + case 13483: + break block; + case 13484: + break block10; + case 13485: + break block; + case 13486: + break block10; + case 13487: + break block; + case 13488: + break block10; + case 13489: + break block; + case 13490: + break block10; + case 13491: + break block; + case 13492: + break block10; + case 13493: + break block; + case 13494: + break block10; + case 13495: + break block; + case 13496: + break block10; + case 13497: + break block; + case 13498: + break block10; + case 13499: + break block; + case 13500: + break block10; + case 13501: + break block; + case 13502: + break block10; + case 13503: + break block; + case 13504: + break block10; + case 13505: + break block; + case 13506: + break block10; + case 13507: + break block; + case 13508: + break block10; + case 13509: + break block; + case 13510: + break block10; + case 13511: + break block; + case 13512: + break block10; + case 13513: + break block; + case 13514: + break block10; + case 13515: + break block; + case 13516: + break block10; + case 13517: + break block; + case 13518: + break block10; + case 13519: + break block; + case 13520: + break block10; + case 13521: + break block; + case 13522: + break block10; + case 13523: + break block; + case 13524: + break block10; + case 13525: + break block; + case 13526: + break block10; + case 13527: + break block; + case 13528: + break block10; + case 13529: + break block; + case 13530: + break block10; + case 13531: + break block; + case 13532: + break block10; + case 13533: + break block; + case 13534: + break block10; + case 13535: + break block; + case 13536: + break block10; + case 13537: + break block; + case 13538: + break block10; + case 13539: + break block; + case 13540: + break block10; + case 13541: + break block; + case 13542: + break block10; + case 13543: + break block; + case 13544: + break block10; + case 13545: + break block; + case 13546: + break block10; + case 13547: + break block; + case 13548: + break block10; + case 13549: + break block; + case 13550: + break block10; + case 13551: + break block; + case 13552: + break block10; + case 13553: + break block; + case 13554: + break block10; + case 13555: + break block; + case 13556: + break block10; + case 13557: + break block; + case 13558: + break block10; + case 13559: + break block; + case 13560: + break block10; + case 13561: + break block; + case 13562: + break block10; + case 13563: + break block; + case 13564: + break block10; + case 13565: + break block; + case 13566: + break block10; + case 13567: + break block; + case 13568: + break block10; + case 13569: + break block; + case 13570: + break block10; + case 13571: + break block; + case 13572: + break block10; + case 13573: + break block; + case 13574: + break block10; + case 13575: + break block; + case 13576: + break block10; + case 13577: + break block; + case 13578: + break block10; + case 13579: + break block; + case 13580: + break block10; + case 13581: + break block; + case 13582: + break block10; + case 13583: + break block; + case 13584: + break block10; + case 13585: + break block; + case 13586: + break block10; + case 13587: + break block; + case 13588: + break block10; + case 13589: + break block; + case 13590: + break block10; + case 13591: + break block; + case 13592: + break block10; + case 13593: + break block; + case 13594: + break block10; + case 13595: + break block; + case 13596: + break block10; + case 13597: + break block; + case 13598: + break block10; + case 13599: + break block; + case 13600: + break block10; + case 13601: + break block; + case 13602: + break block10; + case 13603: + break block; + case 13604: + break block10; + case 13605: + break block; + case 13606: + break block10; + case 13607: + break block; + case 13608: + break block10; + case 13609: + break block; + case 13610: + break block10; + case 13611: + break block; + case 13612: + break block10; + case 13613: + break block; + case 13614: + break block10; + case 13615: + break block; + case 13616: + break block10; + case 13617: + break block; + case 13618: + break block10; + case 13619: + break block; + case 13620: + break block10; + case 13621: + break block; + case 13622: + break block10; + case 13623: + break block; + case 13624: + break block10; + case 13625: + break block; + case 13626: + break block10; + case 13627: + break block; + case 13628: + break block10; + case 13629: + break block; + case 13630: + break block10; + case 13631: + break block; + case 13632: + break block10; + case 13633: + break block; + case 13634: + break block10; + case 13635: + break block; + case 13636: + break block10; + case 13637: + break block; + case 13638: + break block10; + case 13639: + break block; + case 13640: + break block10; + case 13641: + break block; + case 13642: + break block10; + case 13643: + break block; + case 13644: + break block10; + case 13645: + break block; + case 13646: + break block10; + case 13647: + break block; + case 13648: + break block10; + case 13649: + break block; + case 13650: + break block10; + case 13651: + break block; + case 13652: + break block10; + case 13653: + break block; + case 13654: + break block10; + case 13655: + break block; + case 13656: + break block10; + case 13657: + break block; + case 13658: + break block10; + case 13659: + break block; + case 13660: + break block10; + case 13661: + break block; + case 13662: + break block10; + case 13663: + break block; + case 13664: + break block10; + case 13665: + break block; + case 13666: + break block10; + case 13667: + break block; + case 13668: + break block10; + case 13669: + break block; + case 13670: + break block10; + case 13671: + break block; + case 13672: + break block10; + case 13673: + break block; + case 13674: + break block10; + case 13675: + break block; + case 13676: + break block10; + case 13677: + break block; + case 13678: + break block10; + case 13679: + break block; + case 13680: + break block10; + case 13681: + break block; + case 13682: + break block10; + case 13683: + break block; + case 13684: + break block10; + case 13685: + break block; + case 13686: + break block10; + case 13687: + break block; + case 13688: + break block10; + case 13689: + break block; + case 13690: + break block10; + case 13691: + break block; + case 13692: + break block10; + case 13693: + break block; + case 13694: + break block10; + case 13695: + break block; + case 13696: + break block10; + case 13697: + break block; + case 13698: + break block10; + case 13699: + break block; + case 13700: + break block10; + case 13701: + break block; + case 13702: + break block10; + case 13703: + break block; + case 13704: + break block10; + case 13705: + break block; + case 13706: + break block10; + case 13707: + break block; + case 13708: + break block10; + case 13709: + break block; + case 13710: + break block10; + case 13711: + break block; + case 13712: + break block10; + case 13713: + break block; + case 13714: + break block10; + case 13715: + break block; + case 13716: + break block10; + case 13717: + break block; + case 13718: + break block10; + case 13719: + break block; + case 13720: + break block10; + case 13721: + break block; + case 13722: + break block10; + case 13723: + break block; + case 13724: + break block10; + case 13725: + break block; + case 13726: + break block10; + case 13727: + break block; + case 13728: + break block10; + case 13729: + break block; + case 13730: + break block10; + case 13731: + break block; + case 13732: + break block10; + case 13733: + break block; + case 13734: + break block10; + case 13735: + break block; + case 13736: + break block10; + case 13737: + break block; + case 13738: + break block10; + case 13739: + break block; + case 13740: + break block10; + case 13741: + break block; + case 13742: + break block10; + case 13743: + break block; + case 13744: + break block10; + case 13745: + break block; + case 13746: + break block10; + case 13747: + break block; + case 13748: + break block10; + case 13749: + break block; + case 13750: + break block10; + case 13751: + break block; + case 13752: + break block10; + case 13753: + break block; + case 13754: + break block10; + case 13755: + break block; + case 13756: + break block10; + case 13757: + break block; + case 13758: + break block10; + case 13759: + break block; + case 13760: + break block10; + case 13761: + break block; + case 13762: + break block10; + case 13763: + break block; + case 13764: + break block10; + case 13765: + break block; + case 13766: + break block10; + case 13767: + break block; + case 13768: + break block10; + case 13769: + break block; + case 13770: + break block10; + case 13771: + break block; + case 13772: + break block10; + case 13773: + break block; + case 13774: + break block10; + case 13775: + break block; + case 13776: + break block10; + case 13777: + break block; + case 13778: + break block10; + case 13779: + break block; + case 13780: + break block10; + case 13781: + break block; + case 13782: + break block10; + case 13783: + break block; + case 13784: + break block10; + case 13785: + break block; + case 13786: + break block10; + case 13787: + break block; + case 13788: + break block10; + case 13789: + break block; + case 13790: + break block10; + case 13791: + break block; + case 13792: + break block10; + case 13793: + break block; + case 13794: + break block10; + case 13795: + break block; + case 13796: + break block10; + case 13797: + break block; + case 13798: + break block10; + case 13799: + break block; + case 13800: + break block10; + case 13801: + break block; + case 13802: + break block10; + case 13803: + break block; + case 13804: + break block10; + case 13805: + break block; + case 13806: + break block10; + case 13807: + break block; + case 13808: + break block10; + case 13809: + break block; + case 13810: + break block10; + case 13811: + break block; + case 13812: + break block10; + case 13813: + break block; + case 13814: + break block10; + case 13815: + break block; + case 13816: + break block10; + case 13817: + break block; + case 13818: + break block10; + case 13819: + break block; + case 13820: + break block10; + case 13821: + break block; + case 13822: + break block10; + case 13823: + break block; + case 13824: + break block10; + case 13825: + break block; + case 13826: + break block10; + case 13827: + break block; + case 13828: + break block10; + case 13829: + break block; + case 13830: + break block10; + case 13831: + break block; + case 13832: + break block10; + case 13833: + break block; + case 13834: + break block10; + case 13835: + break block; + case 13836: + break block10; + case 13837: + break block; + case 13838: + break block10; + case 13839: + break block; + case 13840: + break block10; + case 13841: + break block; + case 13842: + break block10; + case 13843: + break block; + case 13844: + break block10; + case 13845: + break block; + case 13846: + break block10; + case 13847: + break block; + case 13848: + break block10; + case 13849: + break block; + case 13850: + break block10; + case 13851: + break block; + case 13852: + break block10; + case 13853: + break block; + case 13854: + break block10; + case 13855: + break block; + case 13856: + break block10; + case 13857: + break block; + case 13858: + break block10; + case 13859: + break block; + case 13860: + break block10; + case 13861: + break block; + case 13862: + break block10; + case 13863: + break block; + case 13864: + break block10; + case 13865: + break block; + case 13866: + break block10; + case 13867: + break block; + case 13868: + break block10; + case 13869: + break block; + case 13870: + break block10; + case 13871: + break block; + case 13872: + break block10; + case 13873: + break block; + case 13874: + break block10; + case 13875: + break block; + case 13876: + break block10; + case 13877: + break block; + case 13878: + break block10; + case 13879: + break block; + case 13880: + break block10; + case 13881: + break block; + case 13882: + break block10; + case 13883: + break block; + case 13884: + break block10; + case 13885: + break block; + case 13886: + break block10; + case 13887: + break block; + case 13888: + break block10; + case 13889: + break block; + case 13890: + break block10; + case 13891: + break block; + case 13892: + break block10; + case 13893: + break block; + case 13894: + break block10; + case 13895: + break block; + case 13896: + break block10; + case 13897: + break block; + case 13898: + break block10; + case 13899: + break block; + case 13900: + break block10; + case 13901: + break block; + case 13902: + break block10; + case 13903: + break block; + case 13904: + break block10; + case 13905: + break block; + case 13906: + break block10; + case 13907: + break block; + case 13908: + break block10; + case 13909: + break block; + case 13910: + break block10; + case 13911: + break block; + case 13912: + break block10; + case 13913: + break block; + case 13914: + break block10; + case 13915: + break block; + case 13916: + break block10; + case 13917: + break block; + case 13918: + break block10; + case 13919: + break block; + case 13920: + break block10; + case 13921: + break block; + case 13922: + break block10; + case 13923: + break block; + case 13924: + break block10; + case 13925: + break block; + case 13926: + break block10; + case 13927: + break block; + case 13928: + break block10; + case 13929: + break block; + case 13930: + break block10; + case 13931: + break block; + case 13932: + break block10; + case 13933: + break block; + case 13934: + break block10; + case 13935: + break block; + case 13936: + break block10; + case 13937: + break block; + case 13938: + break block10; + case 13939: + break block; + case 13940: + break block10; + case 13941: + break block; + case 13942: + break block10; + case 13943: + break block; + case 13944: + break block10; + case 13945: + break block; + case 13946: + break block10; + case 13947: + break block; + case 13948: + break block10; + case 13949: + break block; + case 13950: + break block10; + case 13951: + break block; + case 13952: + break block10; + case 13953: + break block; + case 13954: + break block10; + case 13955: + break block; + case 13956: + break block10; + case 13957: + break block; + case 13958: + break block10; + case 13959: + break block; + case 13960: + break block10; + case 13961: + break block; + case 13962: + break block10; + case 13963: + break block; + case 13964: + break block10; + case 13965: + break block; + case 13966: + break block10; + case 13967: + break block; + case 13968: + break block10; + case 13969: + break block; + case 13970: + break block10; + case 13971: + break block; + case 13972: + break block10; + case 13973: + break block; + case 13974: + break block10; + case 13975: + break block; + case 13976: + break block10; + case 13977: + break block; + case 13978: + break block10; + case 13979: + break block; + case 13980: + break block10; + case 13981: + break block; + case 13982: + break block10; + case 13983: + break block; + case 13984: + break block10; + case 13985: + break block; + case 13986: + break block10; + case 13987: + break block; + case 13988: + break block10; + case 13989: + break block; + case 13990: + break block10; + case 13991: + break block; + case 13992: + break block10; + case 13993: + break block; + case 13994: + break block10; + case 13995: + break block; + case 13996: + break block10; + case 13997: + break block; + case 13998: + break block10; + case 13999: + break block; + case 14e3: + break block10; + case 14001: + break block; + case 14002: + break block10; + case 14003: + break block; + case 14004: + break block10; + case 14005: + break block; + case 14006: + break block10; + case 14007: + break block; + case 14008: + break block10; + case 14009: + break block; + case 14010: + break block10; + case 14011: + break block; + case 14012: + break block10; + case 14013: + break block; + case 14014: + break block10; + case 14015: + break block; + case 14016: + break block10; + case 14017: + break block; + case 14018: + break block10; + case 14019: + break block; + case 14020: + break block10; + case 14021: + break block; + case 14022: + break block10; + case 14023: + break block; + case 14024: + break block10; + case 14025: + break block; + case 14026: + break block10; + case 14027: + break block; + case 14028: + break block10; + case 14029: + break block; + case 14030: + break block10; + case 14031: + break block; + case 14032: + break block10; + case 14033: + break block; + case 14034: + break block10; + case 14035: + break block; + case 14036: + break block10; + case 14037: + break block; + case 14038: + break block10; + case 14039: + break block; + case 14040: + break block10; + case 14041: + break block; + case 14042: + break block10; + case 14043: + break block; + case 14044: + break block10; + case 14045: + break block; + case 14046: + break block10; + case 14047: + break block; + case 14048: + break block10; + case 14049: + break block; + case 14050: + break block10; + case 14051: + break block; + case 14052: + break block10; + case 14053: + break block; + case 14054: + break block10; + case 14055: + break block; + case 14056: + break block10; + case 14057: + break block; + case 14058: + break block10; + case 14059: + break block; + case 14060: + break block10; + case 14061: + break block; + case 14062: + break block10; + case 14063: + break block; + case 14064: + break block10; + case 14065: + break block; + case 14066: + break block10; + case 14067: + break block; + case 14068: + break block10; + case 14069: + break block; + case 14070: + break block10; + case 14071: + break block; + case 14072: + break block10; + case 14073: + break block; + case 14074: + break block10; + case 14075: + break block; + case 14076: + break block10; + case 14077: + break block; + case 14078: + break block10; + case 14079: + break block; + case 14080: + break block10; + case 14081: + break block; + case 14082: + break block10; + case 14083: + break block; + case 14084: + break block10; + case 14085: + break block; + case 14086: + break block10; + case 14087: + break block; + case 14088: + break block10; + case 14089: + break block; + case 14090: + break block10; + case 14091: + break block; + case 14092: + break block10; + case 14093: + break block; + case 14094: + break block10; + case 14095: + break block; + case 14096: + break block10; + case 14097: + break block; + case 14098: + break block10; + case 14099: + break block; + case 14100: + break block10; + case 14101: + break block; + case 14102: + break block10; + case 14103: + break block; + case 14104: + break block10; + case 14105: + break block; + case 14106: + break block10; + case 14107: + break block; + case 14108: + break block10; + case 14109: + break block; + case 14110: + break block10; + case 14111: + break block; + case 14112: + break block10; + case 14113: + break block; + case 14114: + break block10; + case 14115: + break block; + case 14116: + break block10; + case 14117: + break block; + case 14118: + break block10; + case 14119: + break block; + case 14120: + break block10; + case 14121: + break block; + case 14122: + break block10; + case 14123: + break block; + case 14124: + break block10; + case 14125: + break block; + case 14126: + break block10; + case 14127: + break block; + case 14128: + break block10; + case 14129: + break block; + case 14130: + break block10; + case 14131: + break block; + case 14132: + break block10; + case 14133: + break block; + case 14134: + break block10; + case 14135: + break block; + case 14136: + break block10; + case 14137: + break block; + case 14138: + break block10; + case 14139: + break block; + case 14140: + break block10; + case 14141: + break block; + case 14142: + break block10; + case 14143: + break block; + case 14144: + break block10; + case 14145: + break block; + case 14146: + break block10; + case 14147: + break block; + case 14148: + break block10; + case 14149: + break block; + case 14150: + break block10; + case 14151: + break block; + case 14152: + break block10; + case 14153: + break block; + case 14154: + break block10; + case 14155: + break block; + case 14156: + break block10; + case 14157: + break block; + case 14158: + break block10; + case 14159: + break block; + case 14160: + break block10; + case 14161: + break block; + case 14162: + break block10; + case 14163: + break block; + case 14164: + break block10; + case 14165: + break block; + case 14166: + break block10; + case 14167: + break block; + case 14168: + break block10; + case 14169: + break block; + case 14170: + break block10; + case 14171: + break block; + case 14172: + break block10; + case 14173: + break block; + case 14174: + break block10; + case 14175: + break block; + case 14176: + break block10; + case 14177: + break block; + case 14178: + break block10; + case 14179: + break block; + case 14180: + break block10; + case 14181: + break block; + case 14182: + break block10; + case 14183: + break block; + case 14184: + break block10; + case 14185: + break block; + case 14186: + break block10; + case 14187: + break block; + case 14188: + break block10; + case 14189: + break block; + case 14190: + break block10; + case 14191: + break block; + case 14192: + break block10; + case 14193: + break block; + case 14194: + break block10; + case 14195: + break block; + case 14196: + break block10; + case 14197: + break block; + case 14198: + break block10; + case 14199: + break block; + case 14200: + break block10; + case 14201: + break block; + case 14202: + break block10; + case 14203: + break block; + case 14204: + break block10; + case 14205: + break block; + case 14206: + break block10; + case 14207: + break block; + case 14208: + break block10; + case 14209: + break block; + case 14210: + break block10; + case 14211: + break block; + case 14212: + break block10; + case 14213: + break block; + case 14214: + break block10; + case 14215: + break block; + case 14216: + break block10; + case 14217: + break block; + case 14218: + break block10; + case 14219: + break block; + case 14220: + break block10; + case 14221: + break block; + case 14222: + break block10; + case 14223: + break block; + case 14224: + break block10; + case 14225: + break block; + case 14226: + break block10; + case 14227: + break block; + case 14228: + break block10; + case 14229: + break block; + case 14230: + break block10; + case 14231: + break block; + case 14232: + break block10; + case 14233: + break block; + case 14234: + break block10; + case 14235: + break block; + case 14236: + break block10; + case 14237: + break block; + case 14238: + break block10; + case 14239: + break block; + case 14240: + break block10; + case 14241: + break block; + case 14242: + break block10; + case 14243: + break block; + case 14244: + break block10; + case 14245: + break block; + case 14246: + break block10; + case 14247: + break block; + case 14248: + break block10; + case 14249: + break block; + case 14250: + break block10; + case 14251: + break block; + case 14252: + break block10; + case 14253: + break block; + case 14254: + break block10; + case 14255: + break block; + case 14256: + break block10; + case 14257: + break block; + case 14258: + break block10; + case 14259: + break block; + case 14260: + break block10; + case 14261: + break block; + case 14262: + break block10; + case 14263: + break block; + case 14264: + break block10; + case 14265: + break block; + case 14266: + break block10; + case 14267: + break block; + case 14268: + break block10; + case 14269: + break block; + case 14270: + break block10; + case 14271: + break block; + case 14272: + break block10; + case 14273: + break block; + case 14274: + break block10; + case 14275: + break block; + case 14276: + break block10; + case 14277: + break block; + case 14278: + break block10; + case 14279: + break block; + case 14280: + break block10; + case 14281: + break block; + case 14282: + break block10; + case 14283: + break block; + case 14284: + break block10; + case 14285: + break block; + case 14286: + break block10; + case 14287: + break block; + case 14288: + break block10; + case 14289: + break block; + case 14290: + break block10; + case 14291: + break block; + case 14292: + break block10; + case 14293: + break block; + case 14294: + break block10; + case 14295: + break block; + case 14296: + break block10; + case 14297: + break block; + case 14298: + break block10; + case 14299: + break block; + case 14300: + break block10; + case 14301: + break block; + case 14302: + break block10; + case 14303: + break block; + case 14304: + break block10; + case 14305: + break block; + case 14306: + break block10; + case 14307: + break block; + case 14308: + break block10; + case 14309: + break block; + case 14310: + break block10; + case 14311: + break block; + case 14312: + break block10; + case 14313: + break block; + case 14314: + break block10; + case 14315: + break block; + case 14316: + break block10; + case 14317: + break block; + case 14318: + break block10; + case 14319: + break block; + case 14320: + break block10; + case 14321: + break block; + case 14322: + break block10; + case 14323: + break block; + case 14324: + break block10; + case 14325: + break block; + case 14326: + break block10; + case 14327: + break block; + case 14328: + break block10; + case 14329: + break block; + case 14330: + break block10; + case 14331: + break block; + case 14332: + break block10; + case 14333: + break block; + case 14334: + break block10; + case 14335: + break block; + case 14336: + break block10; + case 14337: + break block; + case 14338: + break block10; + case 14339: + break block; + case 14340: + break block10; + case 14341: + break block; + case 14342: + break block10; + case 14343: + break block; + case 14344: + break block10; + case 14345: + break block; + case 14346: + break block10; + case 14347: + break block; + case 14348: + break block10; + case 14349: + break block; + case 14350: + break block10; + case 14351: + break block; + case 14352: + break block10; + case 14353: + break block; + case 14354: + break block10; + case 14355: + break block; + case 14356: + break block10; + case 14357: + break block; + case 14358: + break block10; + case 14359: + break block; + case 14360: + break block10; + case 14361: + break block; + case 14362: + break block10; + case 14363: + break block; + case 14364: + break block10; + case 14365: + break block; + case 14366: + break block10; + case 14367: + break block; + case 14368: + break block10; + case 14369: + break block; + case 14370: + break block10; + case 14371: + break block; + case 14372: + break block10; + case 14373: + break block; + case 14374: + break block10; + case 14375: + break block; + case 14376: + break block10; + case 14377: + break block; + case 14378: + break block10; + case 14379: + break block; + case 14380: + break block10; + case 14381: + break block; + case 14382: + break block10; + case 14383: + break block; + case 14384: + break block10; + case 14385: + break block; + case 14386: + break block10; + case 14387: + break block; + case 14388: + break block10; + case 14389: + break block; + case 14390: + break block10; + case 14391: + break block; + case 14392: + break block10; + case 14393: + break block; + case 14394: + break block10; + case 14395: + break block; + case 14396: + break block10; + case 14397: + break block; + case 14398: + break block10; + case 14399: + break block; + case 14400: + break block10; + case 14401: + break block; + case 14402: + break block10; + case 14403: + break block; + case 14404: + break block10; + case 14405: + break block; + case 14406: + break block10; + case 14407: + break block; + case 14408: + break block10; + case 14409: + break block; + case 14410: + break block10; + case 14411: + break block; + case 14412: + break block10; + case 14413: + break block; + case 14414: + break block10; + case 14415: + break block; + case 14416: + break block10; + case 14417: + break block; + case 14418: + break block10; + case 14419: + break block; + case 14420: + break block10; + case 14421: + break block; + case 14422: + break block10; + case 14423: + break block; + case 14424: + break block10; + case 14425: + break block; + case 14426: + break block10; + case 14427: + break block; + case 14428: + break block10; + case 14429: + break block; + case 14430: + break block10; + case 14431: + break block; + case 14432: + break block10; + case 14433: + break block; + case 14434: + break block10; + case 14435: + break block; + case 14436: + break block10; + case 14437: + break block; + case 14438: + break block10; + case 14439: + break block; + case 14440: + break block10; + case 14441: + break block; + case 14442: + break block10; + case 14443: + break block; + case 14444: + break block10; + case 14445: + break block; + case 14446: + break block10; + case 14447: + break block; + case 14448: + break block10; + case 14449: + break block; + case 14450: + break block10; + case 14451: + break block; + case 14452: + break block10; + case 14453: + break block; + case 14454: + break block10; + case 14455: + break block; + case 14456: + break block10; + case 14457: + break block; + case 14458: + break block10; + case 14459: + break block; + case 14460: + break block10; + case 14461: + break block; + case 14462: + break block10; + case 14463: + break block; + case 14464: + break block10; + case 14465: + break block; + case 14466: + break block10; + case 14467: + break block; + case 14468: + break block10; + case 14469: + break block; + case 14470: + break block10; + case 14471: + break block; + case 14472: + break block10; + case 14473: + break block; + case 14474: + break block10; + case 14475: + break block; + case 14476: + break block10; + case 14477: + break block; + case 14478: + break block10; + case 14479: + break block; + case 14480: + break block10; + case 14481: + break block; + case 14482: + break block10; + case 14483: + break block; + case 14484: + break block10; + case 14485: + break block; + case 14486: + break block10; + case 14487: + break block; + case 14488: + break block10; + case 14489: + break block; + case 14490: + break block10; + case 14491: + break block; + case 14492: + break block10; + case 14493: + break block; + case 14494: + break block10; + case 14495: + break block; + case 14496: + break block10; + case 14497: + break block; + case 14498: + break block10; + case 14499: + break block; + case 14500: + break block10; + case 14501: + break block; + case 14502: + break block10; + case 14503: + break block; + case 14504: + break block10; + case 14505: + break block; + case 14506: + break block10; + case 14507: + break block; + case 14508: + break block10; + case 14509: + break block; + case 14510: + break block10; + case 14511: + break block; + case 14512: + break block10; + case 14513: + break block; + case 14514: + break block10; + case 14515: + break block; + case 14516: + break block10; + case 14517: + break block; + case 14518: + break block10; + case 14519: + break block; + case 14520: + break block10; + case 14521: + break block; + case 14522: + break block10; + case 14523: + break block; + case 14524: + break block10; + case 14525: + break block; + case 14526: + break block10; + case 14527: + break block; + case 14528: + break block10; + case 14529: + break block; + case 14530: + break block10; + case 14531: + break block; + case 14532: + break block10; + case 14533: + break block; + case 14534: + break block10; + case 14535: + break block; + case 14536: + break block10; + case 14537: + break block; + case 14538: + break block10; + case 14539: + break block; + case 14540: + break block10; + case 14541: + break block; + case 14542: + break block10; + case 14543: + break block; + case 14544: + break block10; + case 14545: + break block; + case 14546: + break block10; + case 14547: + break block; + case 14548: + break block10; + case 14549: + break block; + case 14550: + break block10; + case 14551: + break block; + case 14552: + break block10; + case 14553: + break block; + case 14554: + break block10; + case 14555: + break block; + case 14556: + break block10; + case 14557: + break block; + case 14558: + break block10; + case 14559: + break block; + case 14560: + break block10; + case 14561: + break block; + case 14562: + break block10; + case 14563: + break block; + case 14564: + break block10; + case 14565: + break block; + case 14566: + break block10; + case 14567: + break block; + case 14568: + break block10; + case 14569: + break block; + case 14570: + break block10; + case 14571: + break block; + case 14572: + break block10; + case 14573: + break block; + case 14574: + break block10; + case 14575: + break block; + case 14576: + break block10; + case 14577: + break block; + case 14578: + break block10; + case 14579: + break block; + case 14580: + break block10; + case 14581: + break block; + case 14582: + break block10; + case 14583: + break block; + case 14584: + break block10; + case 14585: + break block; + case 14586: + break block10; + case 14587: + break block; + case 14588: + break block10; + case 14589: + break block; + case 14590: + break block10; + case 14591: + break block; + case 14592: + break block10; + case 14593: + break block; + case 14594: + break block10; + case 14595: + break block; + case 14596: + break block10; + case 14597: + break block; + case 14598: + break block10; + case 14599: + break block; + case 14600: + break block10; + case 14601: + break block; + case 14602: + break block10; + case 14603: + break block; + case 14604: + break block10; + case 14605: + break block; + case 14606: + break block10; + case 14607: + break block; + case 14608: + break block10; + case 14609: + break block; + case 14610: + break block10; + case 14611: + break block; + case 14612: + break block10; + case 14613: + break block; + case 14614: + break block10; + case 14615: + break block; + case 14616: + break block10; + case 14617: + break block; + case 14618: + break block10; + case 14619: + break block; + case 14620: + break block10; + case 14621: + break block; + case 14622: + break block10; + case 14623: + break block; + case 14624: + break block10; + case 14625: + break block; + case 14626: + break block10; + case 14627: + break block; + case 14628: + break block10; + case 14629: + break block; + case 14630: + break block10; + case 14631: + break block; + case 14632: + break block10; + case 14633: + break block; + case 14634: + break block10; + case 14635: + break block; + case 14636: + break block10; + case 14637: + break block; + case 14638: + break block10; + case 14639: + break block; + case 14640: + break block10; + case 14641: + break block; + case 14642: + break block10; + case 14643: + break block; + case 14644: + break block10; + case 14645: + break block; + case 14646: + break block10; + case 14647: + break block; + case 14648: + break block10; + case 14649: + break block; + case 14650: + break block10; + case 14651: + break block; + case 14652: + break block10; + case 14653: + break block; + case 14654: + break block10; + case 14655: + break block; + case 14656: + break block10; + case 14657: + break block; + case 14658: + break block10; + case 14659: + break block; + case 14660: + break block10; + case 14661: + break block; + case 14662: + break block10; + case 14663: + break block; + case 14664: + break block10; + case 14665: + break block; + case 14666: + break block10; + case 14667: + break block; + case 14668: + break block10; + case 14669: + break block; + case 14670: + break block10; + case 14671: + break block; + case 14672: + break block10; + case 14673: + break block; + case 14674: + break block10; + case 14675: + break block; + case 14676: + break block10; + case 14677: + break block; + case 14678: + break block10; + case 14679: + break block; + case 14680: + break block10; + case 14681: + break block; + case 14682: + break block10; + case 14683: + break block; + case 14684: + break block10; + case 14685: + break block; + case 14686: + break block10; + case 14687: + break block; + case 14688: + break block10; + case 14689: + break block; + case 14690: + break block10; + case 14691: + break block; + case 14692: + break block10; + case 14693: + break block; + case 14694: + break block10; + case 14695: + break block; + case 14696: + break block10; + case 14697: + break block; + case 14698: + break block10; + case 14699: + break block; + case 14700: + break block10; + case 14701: + break block; + case 14702: + break block10; + case 14703: + break block; + case 14704: + break block10; + case 14705: + break block; + case 14706: + break block10; + case 14707: + break block; + case 14708: + break block10; + case 14709: + break block; + case 14710: + break block10; + case 14711: + break block; + case 14712: + break block10; + case 14713: + break block; + case 14714: + break block10; + case 14715: + break block; + case 14716: + break block10; + case 14717: + break block; + case 14718: + break block10; + case 14719: + break block; + case 14720: + break block10; + case 14721: + break block; + case 14722: + break block10; + case 14723: + break block; + case 14724: + break block10; + case 14725: + break block; + case 14726: + break block10; + case 14727: + break block; + case 14728: + break block10; + case 14729: + break block; + case 14730: + break block10; + case 14731: + break block; + case 14732: + break block10; + case 14733: + break block; + case 14734: + break block10; + case 14735: + break block; + case 14736: + break block10; + case 14737: + break block; + case 14738: + break block10; + case 14739: + break block; + case 14740: + break block10; + case 14741: + break block; + case 14742: + break block10; + case 14743: + break block; + case 14744: + break block10; + case 14745: + break block; + case 14746: + break block10; + case 14747: + break block; + case 14748: + break block10; + case 14749: + break block; + case 14750: + break block10; + case 14751: + break block; + case 14752: + break block10; + case 14753: + break block; + case 14754: + break block10; + case 14755: + break block; + case 14756: + break block10; + case 14757: + break block; + case 14758: + break block10; + case 14759: + break block; + case 14760: + break block10; + case 14761: + break block; + case 14762: + break block10; + case 14763: + break block; + case 14764: + break block10; + case 14765: + break block; + case 14766: + break block10; + case 14767: + break block; + case 14768: + break block10; + case 14769: + break block; + case 14770: + break block10; + case 14771: + break block; + case 14772: + break block10; + case 14773: + break block; + case 14774: + break block10; + case 14775: + break block; + case 14776: + break block10; + case 14777: + break block; + case 14778: + break block10; + case 14779: + break block; + case 14780: + break block10; + case 14781: + break block; + case 14782: + break block10; + case 14783: + break block; + case 14784: + break block10; + case 14785: + break block; + case 14786: + break block10; + case 14787: + break block; + case 14788: + break block10; + case 14789: + break block; + case 14790: + break block10; + case 14791: + break block; + case 14792: + break block10; + case 14793: + break block; + case 14794: + break block10; + case 14795: + break block; + case 14796: + break block10; + case 14797: + break block; + case 14798: + break block10; + case 14799: + break block; + case 14800: + break block10; + case 14801: + break block; + case 14802: + break block10; + case 14803: + break block; + case 14804: + break block10; + case 14805: + break block; + case 14806: + break block10; + case 14807: + break block; + case 14808: + break block10; + case 14809: + break block; + case 14810: + break block10; + case 14811: + break block; + case 14812: + break block10; + case 14813: + break block; + case 14814: + break block10; + case 14815: + break block; + case 14816: + break block10; + case 14817: + break block; + case 14818: + break block10; + case 14819: + break block; + case 14820: + break block10; + case 14821: + break block; + case 14822: + break block10; + case 14823: + break block; + case 14824: + break block10; + case 14825: + break block; + case 14826: + break block10; + case 14827: + break block; + case 14828: + break block10; + case 14829: + break block; + case 14830: + break block10; + case 14831: + break block; + case 14832: + break block10; + case 14833: + break block; + case 14834: + break block10; + case 14835: + break block; + case 14836: + break block10; + case 14837: + break block; + case 14838: + break block10; + case 14839: + break block; + case 14840: + break block10; + case 14841: + break block; + case 14842: + break block10; + case 14843: + break block; + case 14844: + break block10; + case 14845: + break block; + case 14846: + break block10; + case 14847: + break block; + case 14848: + break block10; + case 14849: + break block; + case 14850: + break block10; + case 14851: + break block; + case 14852: + break block10; + case 14853: + break block; + case 14854: + break block10; + case 14855: + break block; + case 14856: + break block10; + case 14857: + break block; + case 14858: + break block10; + case 14859: + break block; + case 14860: + break block10; + case 14861: + break block; + case 14862: + break block10; + case 14863: + break block; + case 14864: + break block10; + case 14865: + break block; + case 14866: + break block10; + case 14867: + break block; + case 14868: + break block10; + case 14869: + break block; + case 14870: + break block10; + case 14871: + break block; + case 14872: + break block10; + case 14873: + break block; + case 14874: + break block10; + case 14875: + break block; + case 14876: + break block10; + case 14877: + break block; + case 14878: + break block10; + case 14879: + break block; + case 14880: + break block10; + case 14881: + break block; + case 14882: + break block10; + case 14883: + break block; + case 14884: + break block10; + case 14885: + break block; + case 14886: + break block10; + case 14887: + break block; + case 14888: + break block10; + case 14889: + break block; + case 14890: + break block10; + case 14891: + break block; + case 14892: + break block10; + case 14893: + break block; + case 14894: + break block10; + case 14895: + break block; + case 14896: + break block10; + case 14897: + break block; + case 14898: + break block10; + case 14899: + break block; + case 14900: + break block10; + case 14901: + break block; + case 14902: + break block10; + case 14903: + break block; + case 14904: + break block10; + case 14905: + break block; + case 14906: + break block10; + case 14907: + break block; + case 14908: + break block10; + case 14909: + break block; + case 14910: + break block10; + case 14911: + break block; + case 14912: + break block10; + case 14913: + break block; + case 14914: + break block10; + case 14915: + break block; + case 14916: + break block10; + case 14917: + break block; + case 14918: + break block10; + case 14919: + break block; + case 14920: + break block10; + case 14921: + break block; + case 14922: + break block10; + case 14923: + break block; + case 14924: + break block10; + case 14925: + break block; + case 14926: + break block10; + case 14927: + break block; + case 14928: + break block10; + case 14929: + break block; + case 14930: + break block10; + case 14931: + break block; + case 14932: + break block10; + case 14933: + break block; + case 14934: + break block10; + case 14935: + break block; + case 14936: + break block10; + case 14937: + break block; + case 14938: + break block10; + case 14939: + break block; + case 14940: + break block10; + case 14941: + break block; + case 14942: + break block10; + case 14943: + break block; + case 14944: + break block10; + case 14945: + break block; + case 14946: + break block10; + case 14947: + break block; + case 14948: + break block10; + case 14949: + break block; + case 14950: + break block10; + case 14951: + break block; + case 14952: + break block10; + case 14953: + break block; + case 14954: + break block10; + case 14955: + break block; + case 14956: + break block10; + case 14957: + break block; + case 14958: + break block10; + case 14959: + break block; + case 14960: + break block10; + case 14961: + break block; + case 14962: + break block10; + case 14963: + break block; + case 14964: + break block10; + case 14965: + break block; + case 14966: + break block10; + case 14967: + break block; + case 14968: + break block10; + case 14969: + break block; + case 14970: + break block10; + case 14971: + break block; + case 14972: + break block10; + case 14973: + break block; + case 14974: + break block10; + case 14975: + break block; + case 14976: + break block10; + case 14977: + break block; + case 14978: + break block10; + case 14979: + break block; + case 14980: + break block10; + case 14981: + break block; + case 14982: + break block10; + case 14983: + break block; + case 14984: + break block10; + case 14985: + break block; + case 14986: + break block10; + case 14987: + break block; + case 14988: + break block10; + case 14989: + break block; + case 14990: + break block10; + case 14991: + break block; + case 14992: + break block10; + case 14993: + break block; + case 14994: + break block10; + case 14995: + break block; + case 14996: + break block10; + case 14997: + break block; + case 14998: + break block10; + case 14999: + break block; + case 15e3: + break block10; + case 15001: + break block; + case 15002: + break block10; + case 15003: + break block; + case 15004: + break block10; + case 15005: + break block; + case 15006: + break block10; + case 15007: + break block; + case 15008: + break block10; + case 15009: + break block; + case 15010: + break block10; + case 15011: + break block; + case 15012: + break block10; + case 15013: + break block; + case 15014: + break block10; + case 15015: + break block; + case 15016: + break block10; + case 15017: + break block; + case 15018: + break block10; + case 15019: + break block; + case 15020: + break block10; + case 15021: + break block; + case 15022: + break block10; + case 15023: + break block; + case 15024: + break block10; + case 15025: + break block; + case 15026: + break block10; + case 15027: + break block; + case 15028: + break block10; + case 15029: + break block; + case 15030: + break block10; + case 15031: + break block; + case 15032: + break block10; + case 15033: + break block; + case 15034: + break block10; + case 15035: + break block; + case 15036: + break block10; + case 15037: + break block; + case 15038: + break block10; + case 15039: + break block; + case 15040: + break block10; + case 15041: + break block; + case 15042: + break block10; + case 15043: + break block; + case 15044: + break block10; + case 15045: + break block; + case 15046: + break block10; + case 15047: + break block; + case 15048: + break block10; + case 15049: + break block; + case 15050: + break block10; + case 15051: + break block; + case 15052: + break block10; + case 15053: + break block; + case 15054: + break block10; + case 15055: + break block; + case 15056: + break block10; + case 15057: + break block; + case 15058: + break block10; + case 15059: + break block; + case 15060: + break block10; + case 15061: + break block; + case 15062: + break block10; + case 15063: + break block; + case 15064: + break block10; + case 15065: + break block; + case 15066: + break block10; + case 15067: + break block; + case 15068: + break block10; + case 15069: + break block; + case 15070: + break block10; + case 15071: + break block; + case 15072: + break block10; + case 15073: + break block; + case 15074: + break block10; + case 15075: + break block; + case 15076: + break block10; + case 15077: + break block; + case 15078: + break block10; + case 15079: + break block; + case 15080: + break block10; + case 15081: + break block; + case 15082: + break block10; + case 15083: + break block; + case 15084: + break block10; + case 15085: + break block; + case 15086: + break block10; + case 15087: + break block; + case 15088: + break block10; + case 15089: + break block; + case 15090: + break block10; + case 15091: + break block; + case 15092: + break block10; + case 15093: + break block; + case 15094: + break block10; + case 15095: + break block; + case 15096: + break block10; + case 15097: + break block; + case 15098: + break block10; + case 15099: + break block; + case 15100: + break block10; + case 15101: + break block; + case 15102: + break block10; + case 15103: + break block; + case 15104: + break block10; + case 15105: + break block; + case 15106: + break block10; + case 15107: + break block; + case 15108: + break block10; + case 15109: + break block; + case 15110: + break block10; + case 15111: + break block; + case 15112: + break block10; + case 15113: + break block; + case 15114: + break block10; + case 15115: + break block; + case 15116: + break block10; + case 15117: + break block; + case 15118: + break block10; + case 15119: + break block; + case 15120: + break block10; + case 15121: + break block; + case 15122: + break block10; + case 15123: + break block; + case 15124: + break block10; + case 15125: + break block; + case 15126: + break block10; + case 15127: + break block; + case 15128: + break block10; + case 15129: + break block; + case 15130: + break block10; + case 15131: + break block; + case 15132: + break block10; + case 15133: + break block; + case 15134: + break block10; + case 15135: + break block; + case 15136: + break block10; + case 15137: + break block; + case 15138: + break block10; + case 15139: + break block; + case 15140: + break block10; + case 15141: + break block; + case 15142: + break block10; + case 15143: + break block; + case 15144: + break block10; + case 15145: + break block; + case 15146: + break block10; + case 15147: + break block; + case 15148: + break block10; + case 15149: + break block; + case 15150: + break block10; + case 15151: + break block; + case 15152: + break block10; + case 15153: + break block; + case 15154: + break block10; + case 15155: + break block; + case 15156: + break block10; + case 15157: + break block; + case 15158: + break block10; + case 15159: + break block; + case 15160: + break block10; + case 15161: + break block; + case 15162: + break block10; + case 15163: + break block; + case 15164: + break block10; + case 15165: + break block; + case 15166: + break block10; + case 15167: + break block; + case 15168: + break block10; + case 15169: + break block; + case 15170: + break block10; + case 15171: + break block; + case 15172: + break block10; + case 15173: + break block; + case 15174: + break block10; + case 15175: + break block; + case 15176: + break block10; + case 15177: + break block; + case 15178: + break block10; + case 15179: + break block; + case 15180: + break block10; + case 15181: + break block; + case 15182: + break block10; + case 15183: + break block; + case 15184: + break block10; + case 15185: + break block; + case 15186: + break block10; + case 15187: + break block; + case 15188: + break block10; + case 15189: + break block; + case 15190: + break block10; + case 15191: + break block; + case 15192: + break block10; + case 15193: + break block; + case 15194: + break block10; + case 15195: + break block; + case 15196: + break block10; + case 15197: + break block; + case 15198: + break block10; + case 15199: + break block; + case 15200: + break block10; + case 15201: + break block; + case 15202: + break block10; + case 15203: + break block; + case 15204: + break block10; + case 15205: + break block; + case 15206: + break block10; + case 15207: + break block; + case 15208: + break block10; + case 15209: + break block; + case 15210: + break block10; + case 15211: + break block; + case 15212: + break block10; + case 15213: + break block; + case 15214: + break block10; + case 15215: + break block; + case 15216: + break block10; + case 15217: + break block; + case 15218: + break block10; + case 15219: + break block; + case 15220: + break block10; + case 15221: + break block; + case 15222: + break block10; + case 15223: + break block; + case 15224: + break block10; + case 15225: + break block; + case 15226: + break block10; + case 15227: + break block; + case 15228: + break block10; + case 15229: + break block; + case 15230: + break block10; + case 15231: + break block; + case 15232: + break block10; + case 15233: + break block; + case 15234: + break block10; + case 15235: + break block; + case 15236: + break block10; + case 15237: + break block; + case 15238: + break block10; + case 15239: + break block; + case 15240: + break block10; + case 15241: + break block; + case 15242: + break block10; + case 15243: + break block; + case 15244: + break block10; + case 15245: + break block; + case 15246: + break block10; + case 15247: + break block; + case 15248: + break block10; + case 15249: + break block; + case 15250: + break block10; + case 15251: + break block; + case 15252: + break block10; + case 15253: + break block; + case 15254: + break block10; + case 15255: + break block; + case 15256: + break block10; + case 15257: + break block; + case 15258: + break block10; + case 15259: + break block; + case 15260: + break block10; + case 15261: + break block; + case 15262: + break block10; + case 15263: + break block; + case 15264: + break block10; + case 15265: + break block; + case 15266: + break block10; + case 15267: + break block; + case 15268: + break block10; + case 15269: + break block; + case 15270: + break block10; + case 15271: + break block; + case 15272: + break block10; + case 15273: + break block; + case 15274: + break block10; + case 15275: + break block; + case 15276: + break block10; + case 15277: + break block; + case 15278: + break block10; + case 15279: + break block; + case 15280: + break block10; + case 15281: + break block; + case 15282: + break block10; + case 15283: + break block; + case 15284: + break block10; + case 15285: + break block; + case 15286: + break block10; + case 15287: + break block; + case 15288: + break block10; + case 15289: + break block; + case 15290: + break block10; + case 15291: + break block; + case 15292: + break block10; + case 15293: + break block; + case 15294: + break block10; + case 15295: + break block; + case 15296: + break block10; + case 15297: + break block; + case 15298: + break block10; + case 15299: + break block; + case 15300: + break block10; + case 15301: + break block; + case 15302: + break block10; + case 15303: + break block; + case 15304: + break block10; + case 15305: + break block; + case 15306: + break block10; + case 15307: + break block; + case 15308: + break block10; + case 15309: + break block; + case 15310: + break block10; + case 15311: + break block; + case 15312: + break block10; + case 15313: + break block; + case 15314: + break block10; + case 15315: + break block; + case 15316: + break block10; + case 15317: + break block; + case 15318: + break block10; + case 15319: + break block; + case 15320: + break block10; + case 15321: + break block; + case 15322: + break block10; + case 15323: + break block; + case 15324: + break block10; + case 15325: + break block; + case 15326: + break block10; + case 15327: + break block; + case 15328: + break block10; + case 15329: + break block; + case 15330: + break block10; + case 15331: + break block; + case 15332: + break block10; + case 15333: + break block; + case 15334: + break block10; + case 15335: + break block; + case 15336: + break block10; + case 15337: + break block; + case 15338: + break block10; + case 15339: + break block; + case 15340: + break block10; + case 15341: + break block; + case 15342: + break block10; + case 15343: + break block; + case 15344: + break block10; + case 15345: + break block; + case 15346: + break block10; + case 15347: + break block; + case 15348: + break block10; + case 15349: + break block; + case 15350: + break block10; + case 15351: + break block; + case 15352: + break block10; + case 15353: + break block; + case 15354: + break block10; + case 15355: + break block; + case 15356: + break block10; + case 15357: + break block; + case 15358: + break block10; + case 15359: + break block; + case 15360: + break block10; + case 15361: + break block; + case 15362: + break block10; + case 15363: + break block; + case 15364: + break block10; + case 15365: + break block; + case 15366: + break block10; + case 15367: + break block; + case 15368: + break block10; + case 15369: + break block; + case 15370: + break block10; + case 15371: + break block; + case 15372: + break block10; + case 15373: + break block; + case 15374: + break block10; + case 15375: + break block; + case 15376: + break block10; + case 15377: + break block; + case 15378: + break block10; + case 15379: + break block; + case 15380: + break block10; + case 15381: + break block; + case 15382: + break block10; + case 15383: + break block; + case 15384: + break block10; + case 15385: + break block; + case 15386: + break block10; + case 15387: + break block; + case 15388: + break block10; + case 15389: + break block; + case 15390: + break block10; + case 15391: + break block; + case 15392: + break block10; + case 15393: + break block; + case 15394: + break block10; + case 15395: + break block; + case 15396: + break block10; + case 15397: + break block; + case 15398: + break block10; + case 15399: + break block; + case 15400: + break block10; + case 15401: + break block; + case 15402: + break block10; + case 15403: + break block; + case 15404: + break block10; + case 15405: + break block; + case 15406: + break block10; + case 15407: + break block; + case 15408: + break block10; + case 15409: + break block; + case 15410: + break block10; + case 15411: + break block; + case 15412: + break block10; + case 15413: + break block; + case 15414: + break block10; + case 15415: + break block; + case 15416: + break block10; + case 15417: + break block; + case 15418: + break block10; + case 15419: + break block; + case 15420: + break block10; + case 15421: + break block; + case 15422: + break block10; + case 15423: + break block; + case 15424: + break block10; + case 15425: + break block; + case 15426: + break block10; + case 15427: + break block; + case 15428: + break block10; + case 15429: + break block; + case 15430: + break block10; + case 15431: + break block; + case 15432: + break block10; + case 15433: + break block; + case 15434: + break block10; + case 15435: + break block; + case 15436: + break block10; + case 15437: + break block; + case 15438: + break block10; + case 15439: + break block; + case 15440: + break block10; + case 15441: + break block; + case 15442: + break block10; + case 15443: + break block; + case 15444: + break block10; + case 15445: + break block; + case 15446: + break block10; + case 15447: + break block; + case 15448: + break block10; + case 15449: + break block; + case 15450: + break block10; + case 15451: + break block; + case 15452: + break block10; + case 15453: + break block; + case 15454: + break block10; + case 15455: + break block; + case 15456: + break block10; + case 15457: + break block; + case 15458: + break block10; + case 15459: + break block; + case 15460: + break block10; + case 15461: + break block; + case 15462: + break block10; + case 15463: + break block; + case 15464: + break block10; + case 15465: + break block; + case 15466: + break block10; + case 15467: + break block; + case 15468: + break block10; + case 15469: + break block; + case 15470: + break block10; + case 15471: + break block; + case 15472: + break block10; + case 15473: + break block; + case 15474: + break block10; + case 15475: + break block; + case 15476: + break block10; + case 15477: + break block; + case 15478: + break block10; + case 15479: + break block; + case 15480: + break block10; + case 15481: + break block; + case 15482: + break block10; + case 15483: + break block; + case 15484: + break block10; + case 15485: + break block; + case 15486: + break block10; + case 15487: + break block; + case 15488: + break block10; + case 15489: + break block; + case 15490: + break block10; + case 15491: + break block; + case 15492: + break block10; + case 15493: + break block; + case 15494: + break block10; + case 15495: + break block; + case 15496: + break block10; + case 15497: + break block; + case 15498: + break block10; + case 15499: + break block; + case 15500: + break block10; + case 15501: + break block; + case 15502: + break block10; + case 15503: + break block; + case 15504: + break block10; + case 15505: + break block; + case 15506: + break block10; + case 15507: + break block; + case 15508: + break block10; + case 15509: + break block; + case 15510: + break block10; + case 15511: + break block; + case 15512: + break block10; + case 15513: + break block; + case 15514: + break block10; + case 15515: + break block; + case 15516: + break block10; + case 15517: + break block; + case 15518: + break block10; + case 15519: + break block; + case 15520: + break block10; + case 15521: + break block; + case 15522: + break block10; + case 15523: + break block; + case 15524: + break block10; + case 15525: + break block; + case 15526: + break block10; + case 15527: + break block; + case 15528: + break block10; + case 15529: + break block; + case 15530: + break block10; + case 15531: + break block; + case 15532: + break block10; + case 15533: + break block; + case 15534: + break block10; + case 15535: + break block; + case 15536: + break block10; + case 15537: + break block; + case 15538: + break block10; + case 15539: + break block; + case 15540: + break block10; + case 15541: + break block; + case 15542: + break block10; + case 15543: + break block; + case 15544: + break block10; + case 15545: + break block; + case 15546: + break block10; + case 15547: + break block; + case 15548: + break block10; + case 15549: + break block; + case 15550: + break block10; + case 15551: + break block; + case 15552: + break block10; + case 15553: + break block; + case 15554: + break block10; + case 15555: + break block; + case 15556: + break block10; + case 15557: + break block; + case 15558: + break block10; + case 15559: + break block; + case 15560: + break block10; + case 15561: + break block; + case 15562: + break block10; + case 15563: + break block; + case 15564: + break block10; + case 15565: + break block; + case 15566: + break block10; + case 15567: + break block; + case 15568: + break block10; + case 15569: + break block; + case 15570: + break block10; + case 15571: + break block; + case 15572: + break block10; + case 15573: + break block; + case 15574: + break block10; + case 15575: + break block; + case 15576: + break block10; + case 15577: + break block; + case 15578: + break block10; + case 15579: + break block; + case 15580: + break block10; + case 15581: + break block; + case 15582: + break block10; + case 15583: + break block; + case 15584: + break block10; + case 15585: + break block; + case 15586: + break block10; + case 15587: + break block; + case 15588: + break block10; + case 15589: + break block; + case 15590: + break block10; + case 15591: + break block; + case 15592: + break block10; + case 15593: + break block; + case 15594: + break block10; + case 15595: + break block; + case 15596: + break block10; + case 15597: + break block; + case 15598: + break block10; + case 15599: + break block; + case 15600: + break block10; + case 15601: + break block; + case 15602: + break block10; + case 15603: + break block; + case 15604: + break block10; + case 15605: + break block; + case 15606: + break block10; + case 15607: + break block; + case 15608: + break block10; + case 15609: + break block; + case 15610: + break block10; + case 15611: + break block; + case 15612: + break block10; + case 15613: + break block; + case 15614: + break block10; + case 15615: + break block; + case 15616: + break block10; + case 15617: + break block; + case 15618: + break block10; + case 15619: + break block; + case 15620: + break block10; + case 15621: + break block; + case 15622: + break block10; + case 15623: + break block; + case 15624: + break block10; + case 15625: + break block; + case 15626: + break block10; + case 15627: + break block; + case 15628: + break block10; + case 15629: + break block; + case 15630: + break block10; + case 15631: + break block; + case 15632: + break block10; + case 15633: + break block; + case 15634: + break block10; + case 15635: + break block; + case 15636: + break block10; + case 15637: + break block; + case 15638: + break block10; + case 15639: + break block; + case 15640: + break block10; + case 15641: + break block; + case 15642: + break block10; + case 15643: + break block; + case 15644: + break block10; + case 15645: + break block; + case 15646: + break block10; + case 15647: + break block; + case 15648: + break block10; + case 15649: + break block; + case 15650: + break block10; + case 15651: + break block; + case 15652: + break block10; + case 15653: + break block; + case 15654: + break block10; + case 15655: + break block; + case 15656: + break block10; + case 15657: + break block; + case 15658: + break block10; + case 15659: + break block; + case 15660: + break block10; + case 15661: + break block; + case 15662: + break block10; + case 15663: + break block; + case 15664: + break block10; + case 15665: + break block; + case 15666: + break block10; + case 15667: + break block; + case 15668: + break block10; + case 15669: + break block; + case 15670: + break block10; + case 15671: + break block; + case 15672: + break block10; + case 15673: + break block; + case 15674: + break block10; + case 15675: + break block; + case 15676: + break block10; + case 15677: + break block; + case 15678: + break block10; + case 15679: + break block; + case 15680: + break block10; + case 15681: + break block; + case 15682: + break block10; + case 15683: + break block; + case 15684: + break block10; + case 15685: + break block; + case 15686: + break block10; + case 15687: + break block; + case 15688: + break block10; + case 15689: + break block; + case 15690: + break block10; + case 15691: + break block; + case 15692: + break block10; + case 15693: + break block; + case 15694: + break block10; + case 15695: + break block; + case 15696: + break block10; + case 15697: + break block; + case 15698: + break block10; + case 15699: + break block; + case 15700: + break block10; + case 15701: + break block; + case 15702: + break block10; + case 15703: + break block; + case 15704: + break block10; + case 15705: + break block; + case 15706: + break block10; + case 15707: + break block; + case 15708: + break block10; + case 15709: + break block; + case 15710: + break block10; + case 15711: + break block; + case 15712: + break block10; + case 15713: + break block; + case 15714: + break block10; + case 15715: + break block; + case 15716: + break block10; + case 15717: + break block; + case 15718: + break block10; + case 15719: + break block; + case 15720: + break block10; + case 15721: + break block; + case 15722: + break block10; + case 15723: + break block; + case 15724: + break block10; + case 15725: + break block; + case 15726: + break block10; + case 15727: + break block; + case 15728: + break block10; + case 15729: + break block; + case 15730: + break block10; + case 15731: + break block; + case 15732: + break block10; + case 15733: + break block; + case 15734: + break block10; + case 15735: + break block; + case 15736: + break block10; + case 15737: + break block; + case 15738: + break block10; + case 15739: + break block; + case 15740: + break block10; + case 15741: + break block; + case 15742: + break block10; + case 15743: + break block; + case 15744: + break block10; + case 15745: + break block; + case 15746: + break block10; + case 15747: + break block; + case 15748: + break block10; + case 15749: + break block; + case 15750: + break block10; + case 15751: + break block; + case 15752: + break block10; + case 15753: + break block; + case 15754: + break block10; + case 15755: + break block; + case 15756: + break block10; + case 15757: + break block; + case 15758: + break block10; + case 15759: + break block; + case 15760: + break block10; + case 15761: + break block; + case 15762: + break block10; + case 15763: + break block; + case 15764: + break block10; + case 15765: + break block; + case 15766: + break block10; + case 15767: + break block; + case 15768: + break block10; + case 15769: + break block; + case 15770: + break block10; + case 15771: + break block; + case 15772: + break block10; + case 15773: + break block; + case 15774: + break block10; + case 15775: + break block; + case 15776: + break block10; + case 15777: + break block; + case 15778: + break block10; + case 15779: + break block; + case 15780: + break block10; + case 15781: + break block; + case 15782: + break block10; + case 15783: + break block; + case 15784: + break block10; + case 15785: + break block; + case 15786: + break block10; + case 15787: + break block; + case 15788: + break block10; + case 15789: + break block; + case 15790: + break block10; + case 15791: + break block; + case 15792: + break block10; + case 15793: + break block; + case 15794: + break block10; + case 15795: + break block; + case 15796: + break block10; + case 15797: + break block; + case 15798: + break block10; + case 15799: + break block; + case 15800: + break block10; + case 15801: + break block; + case 15802: + break block10; + case 15803: + break block; + case 15804: + break block10; + case 15805: + break block; + case 15806: + break block10; + case 15807: + break block; + case 15808: + break block10; + case 15809: + break block; + case 15810: + break block10; + case 15811: + break block; + case 15812: + break block10; + case 15813: + break block; + case 15814: + break block10; + case 15815: + break block; + case 15816: + break block10; + case 15817: + break block; + case 15818: + break block10; + case 15819: + break block; + case 15820: + break block10; + case 15821: + break block; + case 15822: + break block10; + case 15823: + break block; + case 15824: + break block10; + case 15825: + break block; + case 15826: + break block10; + case 15827: + break block; + case 15828: + break block10; + case 15829: + break block; + case 15830: + break block10; + case 15831: + break block; + case 15832: + break block10; + case 15833: + break block; + case 15834: + break block10; + case 15835: + break block; + case 15836: + break block10; + case 15837: + break block; + case 15838: + break block10; + case 15839: + break block; + case 15840: + break block10; + case 15841: + break block; + case 15842: + break block10; + case 15843: + break block; + case 15844: + break block10; + case 15845: + break block; + case 15846: + break block10; + case 15847: + break block; + case 15848: + break block10; + case 15849: + break block; + case 15850: + break block10; + case 15851: + break block; + case 15852: + break block10; + case 15853: + break block; + case 15854: + break block10; + case 15855: + break block; + case 15856: + break block10; + case 15857: + break block; + case 15858: + break block10; + case 15859: + break block; + case 15860: + break block10; + case 15861: + break block; + case 15862: + break block10; + case 15863: + break block; + case 15864: + break block10; + case 15865: + break block; + case 15866: + break block10; + case 15867: + break block; + case 15868: + break block10; + case 15869: + break block; + case 15870: + break block10; + case 15871: + break block; + case 15872: + break block10; + case 15873: + break block; + case 15874: + break block10; + case 15875: + break block; + case 15876: + break block10; + case 15877: + break block; + case 15878: + break block10; + case 15879: + break block; + case 15880: + break block10; + case 15881: + break block; + case 15882: + break block10; + case 15883: + break block; + case 15884: + break block10; + case 15885: + break block; + case 15886: + break block10; + case 15887: + break block; + case 15888: + break block10; + case 15889: + break block; + case 15890: + break block10; + case 15891: + break block; + case 15892: + break block10; + case 15893: + break block; + case 15894: + break block10; + case 15895: + break block; + case 15896: + break block10; + case 15897: + break block; + case 15898: + break block10; + case 15899: + break block; + case 15900: + break block10; + case 15901: + break block; + case 15902: + break block10; + case 15903: + break block; + case 15904: + break block10; + case 15905: + break block; + case 15906: + break block10; + case 15907: + break block; + case 15908: + break block10; + case 15909: + break block; + case 15910: + break block10; + case 15911: + break block; + case 15912: + break block10; + case 15913: + break block; + case 15914: + break block10; + case 15915: + break block; + case 15916: + break block10; + case 15917: + break block; + case 15918: + break block10; + case 15919: + break block; + case 15920: + break block10; + case 15921: + break block; + case 15922: + break block10; + case 15923: + break block; + case 15924: + break block10; + case 15925: + break block; + case 15926: + break block10; + case 15927: + break block; + case 15928: + break block10; + case 15929: + break block; + case 15930: + break block10; + case 15931: + break block; + case 15932: + break block10; + case 15933: + break block; + case 15934: + break block10; + case 15935: + break block; + case 15936: + break block10; + case 15937: + break block; + case 15938: + break block10; + case 15939: + break block; + case 15940: + break block10; + case 15941: + break block; + case 15942: + break block10; + case 15943: + break block; + case 15944: + break block10; + case 15945: + break block; + case 15946: + break block10; + case 15947: + break block; + case 15948: + break block10; + case 15949: + break block; + case 15950: + break block10; + case 15951: + break block; + case 15952: + break block10; + case 15953: + break block; + case 15954: + break block10; + case 15955: + break block; + case 15956: + break block10; + case 15957: + break block; + case 15958: + break block10; + case 15959: + break block; + case 15960: + break block10; + case 15961: + break block; + case 15962: + break block10; + case 15963: + break block; + case 15964: + break block10; + case 15965: + break block; + case 15966: + break block10; + case 15967: + break block; + case 15968: + break block10; + case 15969: + break block; + case 15970: + break block10; + case 15971: + break block; + case 15972: + break block10; + case 15973: + break block; + case 15974: + break block10; + case 15975: + break block; + case 15976: + break block10; + case 15977: + break block; + case 15978: + break block10; + case 15979: + break block; + case 15980: + break block10; + case 15981: + break block; + case 15982: + break block10; + case 15983: + break block; + case 15984: + break block10; + case 15985: + break block; + case 15986: + break block10; + case 15987: + break block; + case 15988: + break block10; + case 15989: + break block; + case 15990: + break block10; + case 15991: + break block; + case 15992: + break block10; + case 15993: + break block; + case 15994: + break block10; + case 15995: + break block; + case 15996: + break block10; + case 15997: + break block; + case 15998: + break block10; + case 15999: + break block; + case 16e3: + break block10; + case 16001: + break block; + case 16002: + break block10; + case 16003: + break block; + case 16004: + break block10; + case 16005: + break block; + case 16006: + break block10; + case 16007: + break block; + case 16008: + break block10; + case 16009: + break block; + case 16010: + break block10; + case 16011: + break block; + case 16012: + break block10; + case 16013: + break block; + case 16014: + break block10; + case 16015: + break block; + case 16016: + break block10; + case 16017: + break block; + case 16018: + break block10; + case 16019: + break block; + case 16020: + break block10; + case 16021: + break block; + case 16022: + break block10; + case 16023: + break block; + case 16024: + break block10; + case 16025: + break block; + case 16026: + break block10; + case 16027: + break block; + case 16028: + break block10; + case 16029: + break block; + case 16030: + break block10; + case 16031: + break block; + case 16032: + break block10; + case 16033: + break block; + case 16034: + break block10; + case 16035: + break block; + case 16036: + break block10; + case 16037: + break block; + case 16038: + break block10; + case 16039: + break block; + case 16040: + break block10; + case 16041: + break block; + case 16042: + break block10; + case 16043: + break block; + case 16044: + break block10; + case 16045: + break block; + case 16046: + break block10; + case 16047: + break block; + case 16048: + break block10; + case 16049: + break block; + case 16050: + break block10; + case 16051: + break block; + case 16052: + break block10; + case 16053: + break block; + case 16054: + break block10; + case 16055: + break block; + case 16056: + break block10; + case 16057: + break block; + case 16058: + break block10; + case 16059: + break block; + case 16060: + break block10; + case 16061: + break block; + case 16062: + break block10; + case 16063: + break block; + case 16064: + break block10; + case 16065: + break block; + case 16066: + break block10; + case 16067: + break block; + case 16068: + break block10; + case 16069: + break block; + case 16070: + break block10; + case 16071: + break block; + case 16072: + break block10; + case 16073: + break block; + case 16074: + break block10; + case 16075: + break block; + case 16076: + break block10; + case 16077: + break block; + case 16078: + break block10; + case 16079: + break block; + case 16080: + break block10; + case 16081: + break block; + case 16082: + break block10; + case 16083: + break block; + case 16084: + break block10; + case 16085: + break block; + case 16086: + break block10; + case 16087: + break block; + case 16088: + break block10; + case 16089: + break block; + case 16090: + break block10; + case 16091: + break block; + case 16092: + break block10; + case 16093: + break block; + case 16094: + break block10; + case 16095: + break block; + case 16096: + break block10; + case 16097: + break block; + case 16098: + break block10; + case 16099: + break block; + case 16100: + break block10; + case 16101: + break block; + case 16102: + break block10; + case 16103: + break block; + case 16104: + break block10; + case 16105: + break block; + case 16106: + break block10; + case 16107: + break block; + case 16108: + break block10; + case 16109: + break block; + case 16110: + break block10; + case 16111: + break block; + case 16112: + break block10; + case 16113: + break block; + case 16114: + break block10; + case 16115: + break block; + case 16116: + break block10; + case 16117: + break block; + case 16118: + break block10; + case 16119: + break block; + case 16120: + break block10; + case 16121: + break block; + case 16122: + break block10; + case 16123: + break block; + case 16124: + break block10; + case 16125: + break block; + case 16126: + break block10; + case 16127: + break block; + case 16128: + break block10; + case 16129: + break block; + case 16130: + break block10; + case 16131: + break block; + case 16132: + break block10; + case 16133: + break block; + case 16134: + break block10; + case 16135: + break block; + case 16136: + break block10; + case 16137: + break block; + case 16138: + break block10; + case 16139: + break block; + case 16140: + break block10; + case 16141: + break block; + case 16142: + break block10; + case 16143: + break block; + case 16144: + break block10; + case 16145: + break block; + case 16146: + break block10; + case 16147: + break block; + case 16148: + break block10; + case 16149: + break block; + case 16150: + break block10; + case 16151: + break block; + case 16152: + break block10; + case 16153: + break block; + case 16154: + break block10; + case 16155: + break block; + case 16156: + break block10; + case 16157: + break block; + case 16158: + break block10; + case 16159: + break block; + case 16160: + break block10; + case 16161: + break block; + case 16162: + break block10; + case 16163: + break block; + case 16164: + break block10; + case 16165: + break block; + case 16166: + break block10; + case 16167: + break block; + case 16168: + break block10; + case 16169: + break block; + case 16170: + break block10; + case 16171: + break block; + case 16172: + break block10; + case 16173: + break block; + case 16174: + break block10; + case 16175: + break block; + case 16176: + break block10; + case 16177: + break block; + case 16178: + break block10; + case 16179: + break block; + case 16180: + break block10; + case 16181: + break block; + case 16182: + break block10; + case 16183: + break block; + case 16184: + break block10; + case 16185: + break block; + case 16186: + break block10; + case 16187: + break block; + case 16188: + break block10; + case 16189: + break block; + case 16190: + break block10; + case 16191: + break block; + case 16192: + break block10; + case 16193: + break block; + case 16194: + break block10; + case 16195: + break block; + case 16196: + break block10; + case 16197: + break block; + case 16198: + break block10; + case 16199: + break block; + case 16200: + break block10; + case 16201: + break block; + case 16202: + break block10; + case 16203: + break block; + case 16204: + break block10; + case 16205: + break block; + case 16206: + break block10; + case 16207: + break block; + case 16208: + break block10; + case 16209: + break block; + case 16210: + break block10; + case 16211: + break block; + case 16212: + break block10; + case 16213: + break block; + case 16214: + break block10; + case 16215: + break block; + case 16216: + break block10; + case 16217: + break block; + case 16218: + break block10; + case 16219: + break block; + case 16220: + break block10; + case 16221: + break block; + case 16222: + break block10; + case 16223: + break block; + case 16224: + break block10; + case 16225: + break block; + case 16226: + break block10; + case 16227: + break block; + case 16228: + break block10; + case 16229: + break block; + case 16230: + break block10; + case 16231: + break block; + case 16232: + break block10; + case 16233: + break block; + case 16234: + break block10; + case 16235: + break block; + case 16236: + break block10; + case 16237: + break block; + case 16238: + break block10; + case 16239: + break block; + case 16240: + break block10; + case 16241: + break block; + case 16242: + break block10; + case 16243: + break block; + case 16244: + break block10; + case 16245: + break block; + case 16246: + break block10; + case 16247: + break block; + case 16248: + break block10; + case 16249: + break block; + case 16250: + break block10; + case 16251: + break block; + case 16252: + break block10; + case 16253: + break block; + case 16254: + break block10; + case 16255: + break block; + case 16256: + break block10; + case 16257: + break block; + case 16258: + break block10; + case 16259: + break block; + case 16260: + break block10; + case 16261: + break block; + case 16262: + break block10; + case 16263: + break block; + case 16264: + break block10; + case 16265: + break block; + case 16266: + break block10; + case 16267: + break block; + case 16268: + break block10; + case 16269: + break block; + case 16270: + break block10; + case 16271: + break block; + case 16272: + break block10; + case 16273: + break block; + case 16274: + break block10; + case 16275: + break block; + case 16276: + break block10; + case 16277: + break block; + case 16278: + break block10; + case 16279: + break block; + case 16280: + break block10; + case 16281: + break block; + case 16282: + break block10; + case 16283: + break block; + case 16284: + break block10; + case 16285: + break block; + case 16286: + break block10; + case 16287: + break block; + case 16288: + break block10; + case 16289: + break block; + case 16290: + break block10; + case 16291: + break block; + case 16292: + break block10; + case 16293: + break block; + case 16294: + break block10; + case 16295: + break block; + case 16296: + break block10; + case 16297: + break block; + case 16298: + break block10; + case 16299: + break block; + case 16300: + break block10; + case 16301: + break block; + case 16302: + break block10; + case 16303: + break block; + case 16304: + break block10; + case 16305: + break block; + case 16306: + break block10; + case 16307: + break block; + case 16308: + break block10; + case 16309: + break block; + case 16310: + break block10; + case 16311: + break block; + case 16312: + break block10; + case 16313: + break block; + case 16314: + break block10; + case 16315: + break block; + case 16316: + break block10; + case 16317: + break block; + case 16318: + break block10; + case 16319: + break block; + case 16320: + break block10; + case 16321: + break block; + case 16322: + break block10; + case 16323: + break block; + case 16324: + break block10; + case 16325: + break block; + case 16326: + break block10; + case 16327: + break block; + case 16328: + break block10; + case 16329: + break block; + case 16330: + break block10; + case 16331: + break block; + case 16332: + break block10; + case 16333: + break block; + case 16334: + break block10; + case 16335: + break block; + case 16336: + break block10; + case 16337: + break block; + case 16338: + break block10; + case 16339: + break block; + case 16340: + break block10; + case 16341: + break block; + case 16342: + break block10; + case 16343: + break block; + case 16344: + break block10; + case 16345: + break block; + case 16346: + break block10; + case 16347: + break block; + case 16348: + break block10; + case 16349: + break block; + case 16350: + break block10; + case 16351: + break block; + case 16352: + break block10; + case 16353: + break block; + case 16354: + break block10; + case 16355: + break block; + case 16356: + break block10; + case 16357: + break block; + case 16358: + break block10; + case 16359: + break block; + case 16360: + break block10; + case 16361: + break block; + case 16362: + break block10; + case 16363: + break block; + case 16364: + break block10; + case 16365: + break block; + case 16366: + break block10; + case 16367: + break block; + case 16368: + break block10; + case 16369: + break block; + case 16370: + break block10; + case 16371: + break block; + case 16372: + break block10; + case 16373: + break block; + case 16374: + break block10; + case 16375: + break block; + case 16376: + break block10; + case 16377: + break block; + case 16378: + break block10; + case 16379: + break block; + case 16380: + break block10; + case 16381: + break block; + case 16382: + break block10; + case 16383: + break block; + case 16384: + break block10; + case 16385: + break block; + case 16386: + break block10; + case 16387: + break block; + case 16388: + break block10; + case 16389: + break block; + case 16390: + break block10; + case 16391: + break block; + case 16392: + break block10; + case 16393: + break block; + case 16394: + break block10; + case 16395: + break block; + case 16396: + break block10; + case 16397: + break block; + case 16398: + break block10; + case 16399: + break block; + case 16400: + break block10; + case 16401: + break block; + case 16402: + break block10; + case 16403: + break block; + case 16404: + break block10; + case 16405: + break block; + case 16406: + break block10; + case 16407: + break block; + case 16408: + break block10; + case 16409: + break block; + case 16410: + break block10; + case 16411: + break block; + case 16412: + break block10; + case 16413: + break block; + case 16414: + break block10; + case 16415: + break block; + case 16416: + break block10; + case 16417: + break block; + case 16418: + break block10; + case 16419: + break block; + case 16420: + break block10; + case 16421: + break block; + case 16422: + break block10; + case 16423: + break block; + case 16424: + break block10; + case 16425: + break block; + case 16426: + break block10; + case 16427: + break block; + case 16428: + break block10; + case 16429: + break block; + case 16430: + break block10; + case 16431: + break block; + case 16432: + break block10; + case 16433: + break block; + case 16434: + break block10; + case 16435: + break block; + case 16436: + break block10; + case 16437: + break block; + case 16438: + break block10; + case 16439: + break block; + case 16440: + break block10; + case 16441: + break block; + case 16442: + break block10; + case 16443: + break block; + case 16444: + break block10; + case 16445: + break block; + case 16446: + break block10; + case 16447: + break block; + case 16448: + break block10; + case 16449: + break block; + case 16450: + break block10; + case 16451: + break block; + case 16452: + break block10; + case 16453: + break block; + case 16454: + break block10; + case 16455: + break block; + case 16456: + break block10; + case 16457: + break block; + case 16458: + break block10; + case 16459: + break block; + case 16460: + break block10; + case 16461: + break block; + case 16462: + break block10; + case 16463: + break block; + case 16464: + break block10; + case 16465: + break block; + case 16466: + break block10; + case 16467: + break block; + case 16468: + break block10; + case 16469: + break block; + case 16470: + break block10; + case 16471: + break block; + case 16472: + break block10; + case 16473: + break block; + case 16474: + break block10; + case 16475: + break block; + case 16476: + break block10; + case 16477: + break block; + case 16478: + break block10; + case 16479: + break block; + case 16480: + break block10; + case 16481: + break block; + case 16482: + break block10; + case 16483: + break block; + case 16484: + break block10; + case 16485: + break block; + case 16486: + break block10; + case 16487: + break block; + case 16488: + break block10; + case 16489: + break block; + case 16490: + break block10; + case 16491: + break block; + case 16492: + break block10; + case 16493: + break block; + case 16494: + break block10; + case 16495: + break block; + case 16496: + break block10; + case 16497: + break block; + case 16498: + break block10; + case 16499: + break block; + case 16500: + break block10; + case 16501: + break block; + case 16502: + break block10; + case 16503: + break block; + case 16504: + break block10; + case 16505: + break block; + case 16506: + break block10; + case 16507: + break block; + case 16508: + break block10; + case 16509: + break block; + case 16510: + break block10; + case 16511: + break block; + case 16512: + break block10; + case 16513: + break block; + case 16514: + break block10; + case 16515: + break block; + case 16516: + break block10; + case 16517: + break block; + case 16518: + break block10; + case 16519: + break block; + case 16520: + break block10; + case 16521: + break block; + case 16522: + break block10; + case 16523: + break block; + case 16524: + break block10; + case 16525: + break block; + case 16526: + break block10; + case 16527: + break block; + case 16528: + break block10; + case 16529: + break block; + case 16530: + break block10; + case 16531: + break block; + case 16532: + break block10; + case 16533: + break block; + case 16534: + break block10; + case 16535: + break block; + case 16536: + break block10; + case 16537: + break block; + case 16538: + break block10; + case 16539: + break block; + case 16540: + break block10; + case 16541: + break block; + case 16542: + break block10; + case 16543: + break block; + case 16544: + break block10; + case 16545: + break block; + case 16546: + break block10; + case 16547: + break block; + case 16548: + break block10; + case 16549: + break block; + case 16550: + break block10; + case 16551: + break block; + case 16552: + break block10; + case 16553: + break block; + case 16554: + break block10; + case 16555: + break block; + case 16556: + break block10; + case 16557: + break block; + case 16558: + break block10; + case 16559: + break block; + case 16560: + break block10; + case 16561: + break block; + case 16562: + break block10; + case 16563: + break block; + case 16564: + break block10; + case 16565: + break block; + case 16566: + break block10; + case 16567: + break block; + case 16568: + break block10; + case 16569: + break block; + case 16570: + break block10; + case 16571: + break block; + case 16572: + break block10; + case 16573: + break block; + case 16574: + break block10; + case 16575: + break block; + case 16576: + break block10; + case 16577: + break block; + case 16578: + break block10; + case 16579: + break block; + case 16580: + break block10; + case 16581: + break block; + case 16582: + break block10; + case 16583: + break block; + case 16584: + break block10; + case 16585: + break block; + case 16586: + break block10; + case 16587: + break block; + case 16588: + break block10; + case 16589: + break block; + case 16590: + break block10; + case 16591: + break block; + case 16592: + break block10; + case 16593: + break block; + case 16594: + break block10; + case 16595: + break block; + case 16596: + break block10; + case 16597: + break block; + case 16598: + break block10; + case 16599: + break block; + case 16600: + break block10; + case 16601: + break block; + case 16602: + break block10; + case 16603: + break block; + case 16604: + break block10; + case 16605: + break block; + case 16606: + break block10; + case 16607: + break block; + case 16608: + break block10; + case 16609: + break block; + case 16610: + break block10; + case 16611: + break block; + case 16612: + break block10; + case 16613: + break block; + case 16614: + break block10; + case 16615: + break block; + case 16616: + break block10; + case 16617: + break block; + case 16618: + break block10; + case 16619: + break block; + case 16620: + break block10; + case 16621: + break block; + case 16622: + break block10; + case 16623: + break block; + case 16624: + break block10; + case 16625: + break block; + case 16626: + break block10; + case 16627: + break block; + case 16628: + break block10; + case 16629: + break block; + case 16630: + break block10; + case 16631: + break block; + case 16632: + break block10; + case 16633: + break block; + case 16634: + break block10; + case 16635: + break block; + case 16636: + break block10; + case 16637: + break block; + case 16638: + break block10; + case 16639: + break block; + case 16640: + break block10; + case 16641: + break block; + case 16642: + break block10; + case 16643: + break block; + case 16644: + break block10; + case 16645: + break block; + case 16646: + break block10; + case 16647: + break block; + case 16648: + break block10; + case 16649: + break block; + case 16650: + break block10; + case 16651: + break block; + case 16652: + break block10; + case 16653: + break block; + case 16654: + break block10; + case 16655: + break block; + case 16656: + break block10; + case 16657: + break block; + case 16658: + break block10; + case 16659: + break block; + case 16660: + break block10; + case 16661: + break block; + case 16662: + break block10; + case 16663: + break block; + case 16664: + break block10; + case 16665: + break block; + case 16666: + break block10; + case 16667: + break block; + case 16668: + break block10; + case 16669: + break block; + case 16670: + break block10; + case 16671: + break block; + case 16672: + break block10; + case 16673: + break block; + case 16674: + break block10; + case 16675: + break block; + case 16676: + break block10; + case 16677: + break block; + case 16678: + break block10; + case 16679: + break block; + case 16680: + break block10; + case 16681: + break block; + case 16682: + break block10; + case 16683: + break block; + case 16684: + break block10; + case 16685: + break block; + case 16686: + break block10; + case 16687: + break block; + case 16688: + break block10; + case 16689: + break block; + case 16690: + break block10; + case 16691: + break block; + case 16692: + break block10; + case 16693: + break block; + case 16694: + break block10; + case 16695: + break block; + case 16696: + break block10; + case 16697: + break block; + case 16698: + break block10; + case 16699: + break block; + case 16700: + break block10; + case 16701: + break block; + case 16702: + break block10; + case 16703: + break block; + case 16704: + break block10; + case 16705: + break block; + case 16706: + break block10; + case 16707: + break block; + case 16708: + break block10; + case 16709: + break block; + case 16710: + break block10; + case 16711: + break block; + case 16712: + break block10; + case 16713: + break block; + case 16714: + break block10; + case 16715: + break block; + case 16716: + break block10; + case 16717: + break block; + case 16718: + break block10; + case 16719: + break block; + case 16720: + break block10; + case 16721: + break block; + case 16722: + break block10; + case 16723: + break block; + case 16724: + break block10; + case 16725: + break block; + case 16726: + break block10; + case 16727: + break block; + case 16728: + break block10; + case 16729: + break block; + case 16730: + break block10; + case 16731: + break block; + case 16732: + break block10; + case 16733: + break block; + case 16734: + break block10; + case 16735: + break block; + case 16736: + break block10; + case 16737: + break block; + case 16738: + break block10; + case 16739: + break block; + case 16740: + break block10; + case 16741: + break block; + case 16742: + break block10; + case 16743: + break block; + case 16744: + break block10; + case 16745: + break block; + case 16746: + break block10; + case 16747: + break block; + case 16748: + break block10; + case 16749: + break block; + case 16750: + break block10; + case 16751: + break block; + case 16752: + break block10; + case 16753: + break block; + case 16754: + break block10; + case 16755: + break block; + case 16756: + break block10; + case 16757: + break block; + case 16758: + break block10; + case 16759: + break block; + case 16760: + break block10; + case 16761: + break block; + case 16762: + break block10; + case 16763: + break block; + case 16764: + break block10; + case 16765: + break block; + case 16766: + break block10; + case 16767: + break block; + case 16768: + break block10; + case 16769: + break block; + case 16770: + break block10; + case 16771: + break block; + case 16772: + break block10; + case 16773: + break block; + case 16774: + break block10; + case 16775: + break block; + case 16776: + break block10; + case 16777: + break block; + case 16778: + break block10; + case 16779: + break block; + case 16780: + break block10; + case 16781: + break block; + case 16782: + break block10; + case 16783: + break block; + case 16784: + break block10; + case 16785: + break block; + case 16786: + break block10; + case 16787: + break block; + case 16788: + break block10; + case 16789: + break block; + case 16790: + break block10; + case 16791: + break block; + case 16792: + break block10; + case 16793: + break block; + case 16794: + break block10; + case 16795: + break block; + case 16796: + break block10; + case 16797: + break block; + case 16798: + break block10; + case 16799: + break block; + case 16800: + break block10; + case 16801: + break block; + case 16802: + break block10; + case 16803: + break block; + case 16804: + break block10; + case 16805: + break block; + case 16806: + break block10; + case 16807: + break block; + case 16808: + break block10; + case 16809: + break block; + case 16810: + break block10; + case 16811: + break block; + case 16812: + break block10; + case 16813: + break block; + case 16814: + break block10; + case 16815: + break block; + case 16816: + break block10; + case 16817: + break block; + case 16818: + break block10; + case 16819: + break block; + case 16820: + break block10; + case 16821: + break block; + case 16822: + break block10; + case 16823: + break block; + case 16824: + break block10; + case 16825: + break block; + case 16826: + break block10; + case 16827: + break block; + case 16828: + break block10; + case 16829: + break block; + case 16830: + break block10; + case 16831: + break block; + case 16832: + break block10; + case 16833: + break block; + case 16834: + break block10; + case 16835: + break block; + case 16836: + break block10; + case 16837: + break block; + case 16838: + break block10; + case 16839: + break block; + case 16840: + break block10; + case 16841: + break block; + case 16842: + break block10; + case 16843: + break block; + case 16844: + break block10; + case 16845: + break block; + case 16846: + break block10; + case 16847: + break block; + case 16848: + break block10; + case 16849: + break block; + case 16850: + break block10; + case 16851: + break block; + case 16852: + break block10; + case 16853: + break block; + case 16854: + break block10; + case 16855: + break block; + case 16856: + break block10; + case 16857: + break block; + case 16858: + break block10; + case 16859: + break block; + case 16860: + break block10; + case 16861: + break block; + case 16862: + break block10; + case 16863: + break block; + case 16864: + break block10; + case 16865: + break block; + case 16866: + break block10; + case 16867: + break block; + case 16868: + break block10; + case 16869: + break block; + case 16870: + break block10; + case 16871: + break block; + case 16872: + break block10; + case 16873: + break block; + case 16874: + break block10; + case 16875: + break block; + case 16876: + break block10; + case 16877: + break block; + case 16878: + break block10; + case 16879: + break block; + case 16880: + break block10; + case 16881: + break block; + case 16882: + break block10; + case 16883: + break block; + case 16884: + break block10; + case 16885: + break block; + case 16886: + break block10; + case 16887: + break block; + case 16888: + break block10; + case 16889: + break block; + case 16890: + break block10; + case 16891: + break block; + case 16892: + break block10; + case 16893: + break block; + case 16894: + break block10; + case 16895: + break block; + case 16896: + break block10; + case 16897: + break block; + case 16898: + break block10; + case 16899: + break block; + case 16900: + break block10; + case 16901: + break block; + case 16902: + break block10; + case 16903: + break block; + case 16904: + break block10; + case 16905: + break block; + case 16906: + break block10; + case 16907: + break block; + case 16908: + break block10; + case 16909: + break block; + case 16910: + break block10; + case 16911: + break block; + case 16912: + break block10; + case 16913: + break block; + case 16914: + break block10; + case 16915: + break block; + case 16916: + break block10; + case 16917: + break block; + case 16918: + break block10; + case 16919: + break block; + case 16920: + break block10; + case 16921: + break block; + case 16922: + break block10; + case 16923: + break block; + case 16924: + break block10; + case 16925: + break block; + case 16926: + break block10; + case 16927: + break block; + case 16928: + break block10; + case 16929: + break block; + case 16930: + break block10; + case 16931: + break block; + case 16932: + break block10; + case 16933: + break block; + case 16934: + break block10; + case 16935: + break block; + case 16936: + break block10; + case 16937: + break block; + case 16938: + break block10; + case 16939: + break block; + case 16940: + break block10; + case 16941: + break block; + case 16942: + break block10; + case 16943: + break block; + case 16944: + break block10; + case 16945: + break block; + case 16946: + break block10; + case 16947: + break block; + case 16948: + break block10; + case 16949: + break block; + case 16950: + break block10; + case 16951: + break block; + case 16952: + break block10; + case 16953: + break block; + case 16954: + break block10; + case 16955: + break block; + case 16956: + break block10; + case 16957: + break block; + case 16958: + break block10; + case 16959: + break block; + case 16960: + break block10; + case 16961: + break block; + case 16962: + break block10; + case 16963: + break block; + case 16964: + break block10; + case 16965: + break block; + case 16966: + break block10; + case 16967: + break block; + case 16968: + break block10; + case 16969: + break block; + case 16970: + break block10; + case 16971: + break block; + case 16972: + break block10; + case 16973: + break block; + case 16974: + break block10; + case 16975: + break block; + case 16976: + break block10; + case 16977: + break block; + case 16978: + break block10; + case 16979: + break block; + case 16980: + break block10; + case 16981: + break block; + case 16982: + break block10; + case 16983: + break block; + case 16984: + break block10; + case 16985: + break block; + case 16986: + break block10; + case 16987: + break block; + case 16988: + break block10; + case 16989: + break block; + case 16990: + break block10; + case 16991: + break block; + case 16992: + break block10; + case 16993: + break block; + case 16994: + break block10; + case 16995: + break block; + case 16996: + break block10; + case 16997: + break block; + case 16998: + break block10; + case 16999: + break block; + case 17e3: + break block10; + case 17001: + break block; + case 17002: + break block10; + case 17003: + break block; + case 17004: + break block10; + case 17005: + break block; + case 17006: + break block10; + case 17007: + break block; + case 17008: + break block10; + case 17009: + break block; + case 17010: + break block10; + case 17011: + break block; + case 17012: + break block10; + case 17013: + break block; + case 17014: + break block10; + case 17015: + break block; + case 17016: + break block10; + case 17017: + break block; + case 17018: + break block10; + case 17019: + break block; + case 17020: + break block10; + case 17021: + break block; + case 17022: + break block10; + case 17023: + break block; + case 17024: + break block10; + case 17025: + break block; + case 17026: + break block10; + case 17027: + break block; + case 17028: + break block10; + case 17029: + break block; + case 17030: + break block10; + case 17031: + break block; + case 17032: + break block10; + case 17033: + break block; + case 17034: + break block10; + case 17035: + break block; + case 17036: + break block10; + case 17037: + break block; + case 17038: + break block10; + case 17039: + break block; + case 17040: + break block10; + case 17041: + break block; + case 17042: + break block10; + case 17043: + break block; + case 17044: + break block10; + case 17045: + break block; + case 17046: + break block10; + case 17047: + break block; + case 17048: + break block10; + case 17049: + break block; + case 17050: + break block10; + case 17051: + break block; + case 17052: + break block10; + case 17053: + break block; + case 17054: + break block10; + case 17055: + break block; + case 17056: + break block10; + case 17057: + break block; + case 17058: + break block10; + case 17059: + break block; + case 17060: + break block10; + case 17061: + break block; + case 17062: + break block10; + case 17063: + break block; + case 17064: + break block10; + case 17065: + break block; + case 17066: + break block10; + case 17067: + break block; + case 17068: + break block10; + case 17069: + break block; + case 17070: + break block10; + case 17071: + break block; + case 17072: + break block10; + case 17073: + break block; + case 17074: + break block10; + case 17075: + break block; + case 17076: + break block10; + case 17077: + break block; + case 17078: + break block10; + case 17079: + break block; + case 17080: + break block10; + case 17081: + break block; + case 17082: + break block10; + case 17083: + break block; + case 17084: + break block10; + case 17085: + break block; + case 17086: + break block10; + case 17087: + break block; + case 17088: + break block10; + case 17089: + break block; + case 17090: + break block10; + case 17091: + break block; + case 17092: + break block10; + case 17093: + break block; + case 17094: + break block10; + case 17095: + break block; + case 17096: + break block10; + case 17097: + break block; + case 17098: + break block10; + case 17099: + break block; + case 17100: + break block10; + case 17101: + break block; + case 17102: + break block10; + case 17103: + break block; + case 17104: + break block10; + case 17105: + break block; + case 17106: + break block10; + case 17107: + break block; + case 17108: + break block10; + case 17109: + break block; + case 17110: + break block10; + case 17111: + break block; + case 17112: + break block10; + case 17113: + break block; + case 17114: + break block10; + case 17115: + break block; + case 17116: + break block10; + case 17117: + break block; + case 17118: + break block10; + case 17119: + break block; + case 17120: + break block10; + case 17121: + break block; + case 17122: + break block10; + case 17123: + break block; + case 17124: + break block10; + case 17125: + break block; + case 17126: + break block10; + case 17127: + break block; + case 17128: + break block10; + case 17129: + break block; + case 17130: + break block10; + case 17131: + break block; + case 17132: + break block10; + case 17133: + break block; + case 17134: + break block10; + case 17135: + break block; + case 17136: + break block10; + case 17137: + break block; + case 17138: + break block10; + case 17139: + break block; + case 17140: + break block10; + case 17141: + break block; + case 17142: + break block10; + case 17143: + break block; + case 17144: + break block10; + case 17145: + break block; + case 17146: + break block10; + case 17147: + break block; + case 17148: + break block10; + case 17149: + break block; + case 17150: + break block10; + case 17151: + break block; + case 17152: + break block10; + case 17153: + break block; + case 17154: + break block10; + case 17155: + break block; + case 17156: + break block10; + case 17157: + break block; + case 17158: + break block10; + case 17159: + break block; + case 17160: + break block10; + case 17161: + break block; + case 17162: + break block10; + case 17163: + break block; + case 17164: + break block10; + case 17165: + break block; + case 17166: + break block10; + case 17167: + break block; + case 17168: + break block10; + case 17169: + break block; + case 17170: + break block10; + case 17171: + break block; + case 17172: + break block10; + case 17173: + break block; + case 17174: + break block10; + case 17175: + break block; + case 17176: + break block10; + case 17177: + break block; + case 17178: + break block10; + case 17179: + break block; + case 17180: + break block10; + case 17181: + break block; + case 17182: + break block10; + case 17183: + break block; + case 17184: + break block10; + case 17185: + break block; + case 17186: + break block10; + case 17187: + break block; + case 17188: + break block10; + case 17189: + break block; + case 17190: + break block10; + case 17191: + break block; + case 17192: + break block10; + case 17193: + break block; + case 17194: + break block10; + case 17195: + break block; + case 17196: + break block10; + case 17197: + break block; + case 17198: + break block10; + case 17199: + break block; + case 17200: + break block10; + case 17201: + break block; + case 17202: + break block10; + case 17203: + break block; + case 17204: + break block10; + case 17205: + break block; + case 17206: + break block10; + case 17207: + break block; + case 17208: + break block10; + case 17209: + break block; + case 17210: + break block10; + case 17211: + break block; + case 17212: + break block10; + case 17213: + break block; + case 17214: + break block10; + case 17215: + break block; + case 17216: + break block10; + case 17217: + break block; + case 17218: + break block10; + case 17219: + break block; + case 17220: + break block10; + case 17221: + break block; + case 17222: + break block10; + case 17223: + break block; + case 17224: + break block10; + case 17225: + break block; + case 17226: + break block10; + case 17227: + break block; + case 17228: + break block10; + case 17229: + break block; + case 17230: + break block10; + case 17231: + break block; + case 17232: + break block10; + case 17233: + break block; + case 17234: + break block10; + case 17235: + break block; + case 17236: + break block10; + case 17237: + break block; + case 17238: + break block10; + case 17239: + break block; + case 17240: + break block10; + case 17241: + break block; + case 17242: + break block10; + case 17243: + break block; + case 17244: + break block10; + case 17245: + break block; + case 17246: + break block10; + case 17247: + break block; + case 17248: + break block10; + case 17249: + break block; + case 17250: + break block10; + case 17251: + break block; + case 17252: + break block10; + case 17253: + break block; + case 17254: + break block10; + case 17255: + break block; + case 17256: + break block10; + case 17257: + break block; + case 17258: + break block10; + case 17259: + break block; + case 17260: + break block10; + case 17261: + break block; + case 17262: + break block10; + case 17263: + break block; + case 17264: + break block10; + case 17265: + break block; + case 17266: + break block10; + case 17267: + break block; + case 17268: + break block10; + case 17269: + break block; + case 17270: + break block10; + case 17271: + break block; + case 17272: + break block10; + case 17273: + break block; + case 17274: + break block10; + case 17275: + break block; + case 17276: + break block10; + case 17277: + break block; + case 17278: + break block10; + case 17279: + break block; + case 17280: + break block10; + case 17281: + break block; + case 17282: + break block10; + case 17283: + break block; + case 17284: + break block10; + case 17285: + break block; + case 17286: + break block10; + case 17287: + break block; + case 17288: + break block10; + case 17289: + break block; + case 17290: + break block10; + case 17291: + break block; + case 17292: + break block10; + case 17293: + break block; + case 17294: + break block10; + case 17295: + break block; + case 17296: + break block10; + case 17297: + break block; + case 17298: + break block10; + case 17299: + break block; + case 17300: + break block10; + case 17301: + break block; + case 17302: + break block10; + case 17303: + break block; + case 17304: + break block10; + case 17305: + break block; + case 17306: + break block10; + case 17307: + break block; + case 17308: + break block10; + case 17309: + break block; + case 17310: + break block10; + case 17311: + break block; + case 17312: + break block10; + case 17313: + break block; + case 17314: + break block10; + case 17315: + break block; + case 17316: + break block10; + case 17317: + break block; + case 17318: + break block10; + case 17319: + break block; + case 17320: + break block10; + case 17321: + break block; + case 17322: + break block10; + case 17323: + break block; + case 17324: + break block10; + case 17325: + break block; + case 17326: + break block10; + case 17327: + break block; + case 17328: + break block10; + case 17329: + break block; + case 17330: + break block10; + case 17331: + break block; + case 17332: + break block10; + case 17333: + break block; + case 17334: + break block10; + case 17335: + break block; + case 17336: + break block10; + case 17337: + break block; + case 17338: + break block10; + case 17339: + break block; + case 17340: + break block10; + case 17341: + break block; + case 17342: + break block10; + case 17343: + break block; + case 17344: + break block10; + case 17345: + break block; + case 17346: + break block10; + case 17347: + break block; + case 17348: + break block10; + case 17349: + break block; + case 17350: + break block10; + case 17351: + break block; + case 17352: + break block10; + case 17353: + break block; + case 17354: + break block10; + case 17355: + break block; + case 17356: + break block10; + case 17357: + break block; + case 17358: + break block10; + case 17359: + break block; + case 17360: + break block10; + case 17361: + break block; + case 17362: + break block10; + case 17363: + break block; + case 17364: + break block10; + case 17365: + break block; + case 17366: + break block10; + case 17367: + break block; + case 17368: + break block10; + case 17369: + break block; + case 17370: + break block10; + case 17371: + break block; + case 17372: + break block10; + case 17373: + break block; + case 17374: + break block10; + case 17375: + break block; + case 17376: + break block10; + case 17377: + break block; + case 17378: + break block10; + case 17379: + break block; + case 17380: + break block10; + case 17381: + break block; + case 17382: + break block10; + case 17383: + break block; + case 17384: + break block10; + case 17385: + break block; + case 17386: + break block10; + case 17387: + break block; + case 17388: + break block10; + case 17389: + break block; + case 17390: + break block10; + case 17391: + break block; + case 17392: + break block10; + case 17393: + break block; + case 17394: + break block10; + case 17395: + break block; + case 17396: + break block10; + case 17397: + break block; + case 17398: + break block10; + case 17399: + break block; + case 17400: + break block10; + case 17401: + break block; + case 17402: + break block10; + case 17403: + break block; + case 17404: + break block10; + case 17405: + break block; + case 17406: + break block10; + case 17407: + break block; + case 17408: + break block10; + case 17409: + break block; + case 17410: + break block10; + case 17411: + break block; + case 17412: + break block10; + case 17413: + break block; + case 17414: + break block10; + case 17415: + break block; + case 17416: + break block10; + case 17417: + break block; + case 17418: + break block10; + case 17419: + break block; + case 17420: + break block10; + case 17421: + break block; + case 17422: + break block10; + case 17423: + break block; + case 17424: + break block10; + case 17425: + break block; + case 17426: + break block10; + case 17427: + break block; + case 17428: + break block10; + case 17429: + break block; + case 17430: + break block10; + case 17431: + break block; + case 17432: + break block10; + case 17433: + break block; + case 17434: + break block10; + case 17435: + break block; + case 17436: + break block10; + case 17437: + break block; + case 17438: + break block10; + case 17439: + break block; + case 17440: + break block10; + case 17441: + break block; + case 17442: + break block10; + case 17443: + break block; + case 17444: + break block10; + case 17445: + break block; + case 17446: + break block10; + case 17447: + break block; + case 17448: + break block10; + case 17449: + break block; + case 17450: + break block10; + case 17451: + break block; + case 17452: + break block10; + case 17453: + break block; + case 17454: + break block10; + case 17455: + break block; + case 17456: + break block10; + case 17457: + break block; + case 17458: + break block10; + case 17459: + break block; + case 17460: + break block10; + case 17461: + break block; + case 17462: + break block10; + case 17463: + break block; + case 17464: + break block10; + case 17465: + break block; + case 17466: + break block10; + case 17467: + break block; + case 17468: + break block10; + case 17469: + break block; + case 17470: + break block10; + case 17471: + break block; + case 17472: + break block10; + case 17473: + break block; + case 17474: + break block10; + case 17475: + break block; + case 17476: + break block10; + case 17477: + break block; + case 17478: + break block10; + case 17479: + break block; + case 17480: + break block10; + case 17481: + break block; + case 17482: + break block10; + case 17483: + break block; + case 17484: + break block10; + case 17485: + break block; + case 17486: + break block10; + case 17487: + break block; + case 17488: + break block10; + case 17489: + break block; + case 17490: + break block10; + case 17491: + break block; + case 17492: + break block10; + case 17493: + break block; + case 17494: + break block10; + case 17495: + break block; + case 17496: + break block10; + case 17497: + break block; + case 17498: + break block10; + case 17499: + break block; + case 17500: + break block10; + case 17501: + break block; + case 17502: + break block10; + case 17503: + break block; + case 17504: + break block10; + case 17505: + break block; + case 17506: + break block10; + case 17507: + break block; + case 17508: + break block10; + case 17509: + break block; + case 17510: + break block10; + case 17511: + break block; + case 17512: + break block10; + case 17513: + break block; + case 17514: + break block10; + case 17515: + break block; + case 17516: + break block10; + case 17517: + break block; + case 17518: + break block10; + case 17519: + break block; + case 17520: + break block10; + case 17521: + break block; + case 17522: + break block10; + case 17523: + break block; + case 17524: + break block10; + case 17525: + break block; + case 17526: + break block10; + case 17527: + break block; + case 17528: + break block10; + case 17529: + break block; + case 17530: + break block10; + case 17531: + break block; + case 17532: + break block10; + case 17533: + break block; + case 17534: + break block10; + case 17535: + break block; + case 17536: + break block10; + case 17537: + break block; + case 17538: + break block10; + case 17539: + break block; + case 17540: + break block10; + case 17541: + break block; + case 17542: + break block10; + case 17543: + break block; + case 17544: + break block10; + case 17545: + break block; + case 17546: + break block10; + case 17547: + break block; + case 17548: + break block10; + case 17549: + break block; + case 17550: + break block10; + case 17551: + break block; + case 17552: + break block10; + case 17553: + break block; + case 17554: + break block10; + case 17555: + break block; + case 17556: + break block10; + case 17557: + break block; + case 17558: + break block10; + case 17559: + break block; + case 17560: + break block10; + case 17561: + break block; + case 17562: + break block10; + case 17563: + break block; + case 17564: + break block10; + case 17565: + break block; + case 17566: + break block10; + case 17567: + break block; + case 17568: + break block10; + case 17569: + break block; + case 17570: + break block10; + case 17571: + break block; + case 17572: + break block10; + case 17573: + break block; + case 17574: + break block10; + case 17575: + break block; + case 17576: + break block10; + case 17577: + break block; + case 17578: + break block10; + case 17579: + break block; + case 17580: + break block10; + case 17581: + break block; + case 17582: + break block10; + case 17583: + break block; + case 17584: + break block10; + case 17585: + break block; + case 17586: + break block10; + case 17587: + break block; + case 17588: + break block10; + case 17589: + break block; + case 17590: + break block10; + case 17591: + break block; + case 17592: + break block10; + case 17593: + break block; + case 17594: + break block10; + case 17595: + break block; + case 17596: + break block10; + case 17597: + break block; + case 17598: + break block10; + case 17599: + break block; + case 17600: + break block10; + case 17601: + break block; + case 17602: + break block10; + case 17603: + break block; + case 17604: + break block10; + case 17605: + break block; + case 17606: + break block10; + case 17607: + break block; + case 17608: + break block10; + case 17609: + break block; + case 17610: + break block10; + case 17611: + break block; + case 17612: + break block10; + case 17613: + break block; + case 17614: + break block10; + case 17615: + break block; + case 17616: + break block10; + case 17617: + break block; + case 17618: + break block10; + case 17619: + break block; + case 17620: + break block10; + case 17621: + break block; + case 17622: + break block10; + case 17623: + break block; + case 17624: + break block10; + case 17625: + break block; + case 17626: + break block10; + case 17627: + break block; + case 17628: + break block10; + case 17629: + break block; + case 17630: + break block10; + case 17631: + break block; + case 17632: + break block10; + case 17633: + break block; + case 17634: + break block10; + case 17635: + break block; + case 17636: + break block10; + case 17637: + break block; + case 17638: + break block10; + case 17639: + break block; + case 17640: + break block10; + case 17641: + break block; + case 17642: + break block10; + case 17643: + break block; + case 17644: + break block10; + case 17645: + break block; + case 17646: + break block10; + case 17647: + break block; + case 17648: + break block10; + case 17649: + break block; + case 17650: + break block10; + case 17651: + break block; + case 17652: + break block10; + case 17653: + break block; + case 17654: + break block10; + case 17655: + break block; + case 17656: + break block10; + case 17657: + break block; + case 17658: + break block10; + case 17659: + break block; + case 17660: + break block10; + case 17661: + break block; + case 17662: + break block10; + case 17663: + break block; + case 17664: + break block10; + case 17665: + break block; + case 17666: + break block10; + case 17667: + break block; + case 17668: + break block10; + case 17669: + break block; + case 17670: + break block10; + case 17671: + break block; + case 17672: + break block10; + case 17673: + break block; + case 17674: + break block10; + case 17675: + break block; + case 17676: + break block10; + case 17677: + break block; + case 17678: + break block10; + case 17679: + break block; + case 17680: + break block10; + case 17681: + break block; + case 17682: + break block10; + case 17683: + break block; + case 17684: + break block10; + case 17685: + break block; + case 17686: + break block10; + case 17687: + break block; + case 17688: + break block10; + case 17689: + break block; + case 17690: + break block10; + case 17691: + break block; + case 17692: + break block10; + case 17693: + break block; + case 17694: + break block10; + case 17695: + break block; + case 17696: + break block10; + case 17697: + break block; + case 17698: + break block10; + case 17699: + break block; + case 17700: + break block10; + case 17701: + break block; + case 17702: + break block10; + case 17703: + break block; + case 17704: + break block10; + case 17705: + break block; + case 17706: + break block10; + case 17707: + break block; + case 17708: + break block10; + case 17709: + break block; + case 17710: + break block10; + case 17711: + break block; + case 17712: + break block10; + case 17713: + break block; + case 17714: + break block10; + case 17715: + break block; + case 17716: + break block10; + case 17717: + break block; + case 17718: + break block10; + case 17719: + break block; + case 17720: + break block10; + case 17721: + break block; + case 17722: + break block10; + case 17723: + break block; + case 17724: + break block10; + case 17725: + break block; + case 17726: + break block10; + case 17727: + break block; + case 17728: + break block10; + case 17729: + break block; + case 17730: + break block10; + case 17731: + break block; + case 17732: + break block10; + case 17733: + break block; + case 17734: + break block10; + case 17735: + break block; + case 17736: + break block10; + case 17737: + break block; + case 17738: + break block10; + case 17739: + break block; + case 17740: + break block10; + case 17741: + break block; + case 17742: + break block10; + case 17743: + break block; + case 17744: + break block10; + case 17745: + break block; + case 17746: + break block10; + case 17747: + break block; + case 17748: + break block10; + case 17749: + break block; + case 17750: + break block10; + case 17751: + break block; + case 17752: + break block10; + case 17753: + break block; + case 17754: + break block10; + case 17755: + break block; + case 17756: + break block10; + case 17757: + break block; + case 17758: + break block10; + case 17759: + break block; + case 17760: + break block10; + case 17761: + break block; + case 17762: + break block10; + case 17763: + break block; + case 17764: + break block10; + case 17765: + break block; + case 17766: + break block10; + case 17767: + break block; + case 17768: + break block10; + case 17769: + break block; + case 17770: + break block10; + case 17771: + break block; + case 17772: + break block10; + case 17773: + break block; + case 17774: + break block10; + case 17775: + break block; + case 17776: + break block10; + case 17777: + break block; + case 17778: + break block10; + case 17779: + break block; + case 17780: + break block10; + case 17781: + break block; + case 17782: + break block10; + case 17783: + break block; + case 17784: + break block10; + case 17785: + break block; + case 17786: + break block10; + case 17787: + break block; + case 17788: + break block10; + case 17789: + break block; + case 17790: + break block10; + case 17791: + break block; + case 17792: + break block10; + case 17793: + break block; + case 17794: + break block10; + case 17795: + break block; + case 17796: + break block10; + case 17797: + break block; + case 17798: + break block10; + case 17799: + break block; + case 17800: + break block10; + case 17801: + break block; + case 17802: + break block10; + case 17803: + break block; + case 17804: + break block10; + case 17805: + break block; + case 17806: + break block10; + case 17807: + break block; + case 17808: + break block10; + case 17809: + break block; + case 17810: + break block10; + case 17811: + break block; + case 17812: + break block10; + case 17813: + break block; + case 17814: + break block10; + case 17815: + break block; + case 17816: + break block10; + case 17817: + break block; + case 17818: + break block10; + case 17819: + break block; + case 17820: + break block10; + case 17821: + break block; + case 17822: + break block10; + case 17823: + break block; + case 17824: + break block10; + case 17825: + break block; + case 17826: + break block10; + case 17827: + break block; + case 17828: + break block10; + case 17829: + break block; + case 17830: + break block10; + case 17831: + break block; + case 17832: + break block10; + case 17833: + break block; + case 17834: + break block10; + case 17835: + break block; + case 17836: + break block10; + case 17837: + break block; + case 17838: + break block10; + case 17839: + break block; + case 17840: + break block10; + case 17841: + break block; + case 17842: + break block10; + case 17843: + break block; + case 17844: + break block10; + case 17845: + break block; + case 17846: + break block10; + case 17847: + break block; + case 17848: + break block10; + case 17849: + break block; + case 17850: + break block10; + case 17851: + break block; + case 17852: + break block10; + case 17853: + break block; + case 17854: + break block10; + case 17855: + break block; + case 17856: + break block10; + case 17857: + break block; + case 17858: + break block10; + case 17859: + break block; + case 17860: + break block10; + case 17861: + break block; + case 17862: + break block10; + case 17863: + break block; + case 17864: + break block10; + case 17865: + break block; + case 17866: + break block10; + case 17867: + break block; + case 17868: + break block10; + case 17869: + break block; + case 17870: + break block10; + case 17871: + break block; + case 17872: + break block10; + case 17873: + break block; + case 17874: + break block10; + case 17875: + break block; + case 17876: + break block10; + case 17877: + break block; + case 17878: + break block10; + case 17879: + break block; + case 17880: + break block10; + case 17881: + break block; + case 17882: + break block10; + case 17883: + break block; + case 17884: + break block10; + case 17885: + break block; + case 17886: + break block10; + case 17887: + break block; + case 17888: + break block10; + case 17889: + break block; + case 17890: + break block10; + case 17891: + break block; + case 17892: + break block10; + case 17893: + break block; + case 17894: + break block10; + case 17895: + break block; + case 17896: + break block10; + case 17897: + break block; + case 17898: + break block10; + case 17899: + break block; + case 17900: + break block10; + case 17901: + break block; + case 17902: + break block10; + case 17903: + break block; + case 17904: + break block10; + case 17905: + break block; + case 17906: + break block10; + case 17907: + break block; + case 17908: + break block10; + case 17909: + break block; + case 17910: + break block10; + case 17911: + break block; + case 17912: + break block10; + case 17913: + break block; + case 17914: + break block10; + case 17915: + break block; + case 17916: + break block10; + case 17917: + break block; + case 17918: + break block10; + case 17919: + break block; + case 17920: + break block10; + case 17921: + break block; + case 17922: + break block10; + case 17923: + break block; + case 17924: + break block10; + case 17925: + break block; + case 17926: + break block10; + case 17927: + break block; + case 17928: + break block10; + case 17929: + break block; + case 17930: + break block10; + case 17931: + break block; + case 17932: + break block10; + case 17933: + break block; + case 17934: + break block10; + case 17935: + break block; + case 17936: + break block10; + case 17937: + break block; + case 17938: + break block10; + case 17939: + break block; + case 17940: + break block10; + case 17941: + break block; + case 17942: + break block10; + case 17943: + break block; + case 17944: + break block10; + case 17945: + break block; + case 17946: + break block10; + case 17947: + break block; + case 17948: + break block10; + case 17949: + break block; + case 17950: + break block10; + case 17951: + break block; + case 17952: + break block10; + case 17953: + break block; + case 17954: + break block10; + case 17955: + break block; + case 17956: + break block10; + case 17957: + break block; + case 17958: + break block10; + case 17959: + break block; + case 17960: + break block10; + case 17961: + break block; + case 17962: + break block10; + case 17963: + break block; + case 17964: + break block10; + case 17965: + break block; + case 17966: + break block10; + case 17967: + break block; + case 17968: + break block10; + case 17969: + break block; + case 17970: + break block10; + case 17971: + break block; + case 17972: + break block10; + case 17973: + break block; + case 17974: + break block10; + case 17975: + break block; + case 17976: + break block10; + case 17977: + break block; + case 17978: + break block10; + case 17979: + break block; + case 17980: + break block10; + case 17981: + break block; + case 17982: + break block10; + case 17983: + break block; + case 17984: + break block10; + case 17985: + break block; + case 17986: + break block10; + case 17987: + break block; + case 17988: + break block10; + case 17989: + break block; + case 17990: + break block10; + case 17991: + break block; + case 17992: + break block10; + case 17993: + break block; + case 17994: + break block10; + case 17995: + break block; + case 17996: + break block10; + case 17997: + break block; + case 17998: + break block10; + case 17999: + break block; + case 18e3: + break block10; + case 18001: + break block; + case 18002: + break block10; + case 18003: + break block; + case 18004: + break block10; + case 18005: + break block; + case 18006: + break block10; + case 18007: + break block; + case 18008: + break block10; + case 18009: + break block; + case 18010: + break block10; + case 18011: + break block; + case 18012: + break block10; + case 18013: + break block; + case 18014: + break block10; + case 18015: + break block; + case 18016: + break block10; + case 18017: + break block; + case 18018: + break block10; + case 18019: + break block; + case 18020: + break block10; + case 18021: + break block; + case 18022: + break block10; + case 18023: + break block; + case 18024: + break block10; + case 18025: + break block; + case 18026: + break block10; + case 18027: + break block; + case 18028: + break block10; + case 18029: + break block; + case 18030: + break block10; + case 18031: + break block; + case 18032: + break block10; + case 18033: + break block; + case 18034: + break block10; + case 18035: + break block; + case 18036: + break block10; + case 18037: + break block; + case 18038: + break block10; + case 18039: + break block; + case 18040: + break block10; + case 18041: + break block; + case 18042: + break block10; + case 18043: + break block; + case 18044: + break block10; + case 18045: + break block; + case 18046: + break block10; + case 18047: + break block; + case 18048: + break block10; + case 18049: + break block; + case 18050: + break block10; + case 18051: + break block; + case 18052: + break block10; + case 18053: + break block; + case 18054: + break block10; + case 18055: + break block; + case 18056: + break block10; + case 18057: + break block; + case 18058: + break block10; + case 18059: + break block; + case 18060: + break block10; + case 18061: + break block; + case 18062: + break block10; + case 18063: + break block; + case 18064: + break block10; + case 18065: + break block; + case 18066: + break block10; + case 18067: + break block; + case 18068: + break block10; + case 18069: + break block; + case 18070: + break block10; + case 18071: + break block; + case 18072: + break block10; + case 18073: + break block; + case 18074: + break block10; + case 18075: + break block; + case 18076: + break block10; + case 18077: + break block; + case 18078: + break block10; + case 18079: + break block; + case 18080: + break block10; + case 18081: + break block; + case 18082: + break block10; + case 18083: + break block; + case 18084: + break block10; + case 18085: + break block; + case 18086: + break block10; + case 18087: + break block; + case 18088: + break block10; + case 18089: + break block; + case 18090: + break block10; + case 18091: + break block; + case 18092: + break block10; + case 18093: + break block; + case 18094: + break block10; + case 18095: + break block; + case 18096: + break block10; + case 18097: + break block; + case 18098: + break block10; + case 18099: + break block; + case 18100: + break block10; + case 18101: + break block; + case 18102: + break block10; + case 18103: + break block; + case 18104: + break block10; + case 18105: + break block; + case 18106: + break block10; + case 18107: + break block; + case 18108: + break block10; + case 18109: + break block; + case 18110: + break block10; + case 18111: + break block; + case 18112: + break block10; + case 18113: + break block; + case 18114: + break block10; + case 18115: + break block; + case 18116: + break block10; + case 18117: + break block; + case 18118: + break block10; + case 18119: + break block; + case 18120: + break block10; + case 18121: + break block; + case 18122: + break block10; + case 18123: + break block; + case 18124: + break block10; + case 18125: + break block; + case 18126: + break block10; + case 18127: + break block; + case 18128: + break block10; + case 18129: + break block; + case 18130: + break block10; + case 18131: + break block; + case 18132: + break block10; + case 18133: + break block; + case 18134: + break block10; + case 18135: + break block; + case 18136: + break block10; + case 18137: + break block; + case 18138: + break block10; + case 18139: + break block; + case 18140: + break block10; + case 18141: + break block; + case 18142: + break block10; + case 18143: + break block; + case 18144: + break block10; + case 18145: + break block; + case 18146: + break block10; + case 18147: + break block; + case 18148: + break block10; + case 18149: + break block; + case 18150: + break block10; + case 18151: + break block; + case 18152: + break block10; + case 18153: + break block; + case 18154: + break block10; + case 18155: + break block; + case 18156: + break block10; + case 18157: + break block; + case 18158: + break block10; + case 18159: + break block; + case 18160: + break block10; + case 18161: + break block; + case 18162: + break block10; + case 18163: + break block; + case 18164: + break block10; + case 18165: + break block; + case 18166: + break block10; + case 18167: + break block; + case 18168: + break block10; + case 18169: + break block; + case 18170: + break block10; + case 18171: + break block; + case 18172: + break block10; + case 18173: + break block; + case 18174: + break block10; + case 18175: + break block; + case 18176: + break block10; + case 18177: + break block; + case 18178: + break block10; + case 18179: + break block; + case 18180: + break block10; + case 18181: + break block; + case 18182: + break block10; + case 18183: + break block; + case 18184: + break block10; + case 18185: + break block; + case 18186: + break block10; + case 18187: + break block; + case 18188: + break block10; + case 18189: + break block; + case 18190: + break block10; + case 18191: + break block; + case 18192: + break block10; + case 18193: + break block; + case 18194: + break block10; + case 18195: + break block; + case 18196: + break block10; + case 18197: + break block; + case 18198: + break block10; + case 18199: + break block; + case 18200: + break block10; + case 18201: + break block; + case 18202: + break block10; + case 18203: + break block; + case 18204: + break block10; + case 18205: + break block; + case 18206: + break block10; + case 18207: + break block; + case 18208: + break block10; + case 18209: + break block; + case 18210: + break block10; + case 18211: + break block; + case 18212: + break block10; + case 18213: + break block; + case 18214: + break block10; + case 18215: + break block; + case 18216: + break block10; + case 18217: + break block; + case 18218: + break block10; + case 18219: + break block; + case 18220: + break block10; + case 18221: + break block; + case 18222: + break block10; + case 18223: + break block; + case 18224: + break block10; + case 18225: + break block; + case 18226: + break block10; + case 18227: + break block; + case 18228: + break block10; + case 18229: + break block; + case 18230: + break block10; + case 18231: + break block; + case 18232: + break block10; + case 18233: + break block; + case 18234: + break block10; + case 18235: + break block; + case 18236: + break block10; + case 18237: + break block; + case 18238: + break block10; + case 18239: + break block; + case 18240: + break block10; + case 18241: + break block; + case 18242: + break block10; + case 18243: + break block; + case 18244: + break block10; + case 18245: + break block; + case 18246: + break block10; + case 18247: + break block; + case 18248: + break block10; + case 18249: + break block; + case 18250: + break block10; + case 18251: + break block; + case 18252: + break block10; + case 18253: + break block; + case 18254: + break block10; + case 18255: + break block; + case 18256: + break block10; + case 18257: + break block; + case 18258: + break block10; + case 18259: + break block; + case 18260: + break block10; + case 18261: + break block; + case 18262: + break block10; + case 18263: + break block; + case 18264: + break block10; + case 18265: + break block; + case 18266: + break block10; + case 18267: + break block; + case 18268: + break block10; + case 18269: + break block; + case 18270: + break block10; + case 18271: + break block; + case 18272: + break block10; + case 18273: + break block; + case 18274: + break block10; + case 18275: + break block; + case 18276: + break block10; + case 18277: + break block; + case 18278: + break block10; + case 18279: + break block; + case 18280: + break block10; + case 18281: + break block; + case 18282: + break block10; + case 18283: + break block; + case 18284: + break block10; + case 18285: + break block; + case 18286: + break block10; + case 18287: + break block; + case 18288: + break block10; + case 18289: + break block; + case 18290: + break block10; + case 18291: + break block; + case 18292: + break block10; + case 18293: + break block; + case 18294: + break block10; + case 18295: + break block; + case 18296: + break block10; + case 18297: + break block; + case 18298: + break block10; + case 18299: + break block; + case 18300: + break block10; + case 18301: + break block; + case 18302: + break block10; + case 18303: + break block; + case 18304: + break block10; + case 18305: + break block; + case 18306: + break block10; + case 18307: + break block; + case 18308: + break block10; + case 18309: + break block; + case 18310: + break block10; + case 18311: + break block; + case 18312: + break block10; + case 18313: + break block; + case 18314: + break block10; + case 18315: + break block; + case 18316: + break block10; + case 18317: + break block; + case 18318: + break block10; + case 18319: + break block; + case 18320: + break block10; + case 18321: + break block; + case 18322: + break block10; + case 18323: + break block; + case 18324: + break block10; + case 18325: + break block; + case 18326: + break block10; + case 18327: + break block; + case 18328: + break block10; + case 18329: + break block; + case 18330: + break block10; + case 18331: + break block; + case 18332: + break block10; + case 18333: + break block; + case 18334: + break block10; + case 18335: + break block; + case 18336: + break block10; + case 18337: + break block; + case 18338: + break block10; + case 18339: + break block; + case 18340: + break block10; + case 18341: + break block; + case 18342: + break block10; + case 18343: + break block; + case 18344: + break block10; + case 18345: + break block; + case 18346: + break block10; + case 18347: + break block; + case 18348: + break block10; + case 18349: + break block; + case 18350: + break block10; + case 18351: + break block; + case 18352: + break block10; + case 18353: + break block; + case 18354: + break block10; + case 18355: + break block; + case 18356: + break block10; + case 18357: + break block; + case 18358: + break block10; + case 18359: + break block; + case 18360: + break block10; + case 18361: + break block; + case 18362: + break block10; + case 18363: + break block; + case 18364: + break block10; + case 18365: + break block; + case 18366: + break block10; + case 18367: + break block; + case 18368: + break block10; + case 18369: + break block; + case 18370: + break block10; + case 18371: + break block; + case 18372: + break block10; + case 18373: + break block; + case 18374: + break block10; + case 18375: + break block; + case 18376: + break block10; + case 18377: + break block; + case 18378: + break block10; + case 18379: + break block; + case 18380: + break block10; + case 18381: + break block; + case 18382: + break block10; + case 18383: + break block; + case 18384: + break block10; + case 18385: + break block; + case 18386: + break block10; + case 18387: + break block; + case 18388: + break block10; + case 18389: + break block; + case 18390: + break block10; + case 18391: + break block; + case 18392: + break block10; + case 18393: + break block; + case 18394: + break block10; + case 18395: + break block; + case 18396: + break block10; + case 18397: + break block; + case 18398: + break block10; + case 18399: + break block; + case 18400: + break block10; + case 18401: + break block; + case 18402: + break block10; + case 18403: + break block; + case 18404: + break block10; + case 18405: + break block; + case 18406: + break block10; + case 18407: + break block; + case 18408: + break block10; + case 18409: + break block; + case 18410: + break block10; + case 18411: + break block; + case 18412: + break block10; + case 18413: + break block; + case 18414: + break block10; + case 18415: + break block; + case 18416: + break block10; + case 18417: + break block; + case 18418: + break block10; + case 18419: + break block; + case 18420: + break block10; + case 18421: + break block; + case 18422: + break block10; + case 18423: + break block; + case 18424: + break block10; + case 18425: + break block; + case 18426: + break block10; + case 18427: + break block; + case 18428: + break block10; + case 18429: + break block; + case 18430: + break block10; + case 18431: + break block; + case 18432: + break block10; + case 18433: + break block; + case 18434: + break block10; + case 18435: + break block; + case 18436: + break block10; + case 18437: + break block; + case 18438: + break block10; + case 18439: + break block; + case 18440: + break block10; + case 18441: + break block; + case 18442: + break block10; + case 18443: + break block; + case 18444: + break block10; + case 18445: + break block; + case 18446: + break block10; + case 18447: + break block; + case 18448: + break block10; + case 18449: + break block; + case 18450: + break block10; + case 18451: + break block; + case 18452: + break block10; + case 18453: + break block; + case 18454: + break block10; + case 18455: + break block; + case 18456: + break block10; + case 18457: + break block; + case 18458: + break block10; + case 18459: + break block; + case 18460: + break block10; + case 18461: + break block; + case 18462: + break block10; + case 18463: + break block; + case 18464: + break block10; + case 18465: + break block; + case 18466: + break block10; + case 18467: + break block; + case 18468: + break block10; + case 18469: + break block; + case 18470: + break block10; + case 18471: + break block; + case 18472: + break block10; + case 18473: + break block; + case 18474: + break block10; + case 18475: + break block; + case 18476: + break block10; + case 18477: + break block; + case 18478: + break block10; + case 18479: + break block; + case 18480: + break block10; + case 18481: + break block; + case 18482: + break block10; + case 18483: + break block; + case 18484: + break block10; + case 18485: + break block; + case 18486: + break block10; + case 18487: + break block; + case 18488: + break block10; + case 18489: + break block; + case 18490: + break block10; + case 18491: + break block; + case 18492: + break block10; + case 18493: + break block; + case 18494: + break block10; + case 18495: + break block; + case 18496: + break block10; + case 18497: + break block; + case 18498: + break block10; + case 18499: + break block; + case 18500: + break block10; + case 18501: + break block; + case 18502: + break block10; + case 18503: + break block; + case 18504: + break block10; + case 18505: + break block; + case 18506: + break block10; + case 18507: + break block; + case 18508: + break block10; + case 18509: + break block; + case 18510: + break block10; + case 18511: + break block; + case 18512: + break block10; + case 18513: + break block; + case 18514: + break block10; + case 18515: + break block; + case 18516: + break block10; + case 18517: + break block; + case 18518: + break block10; + case 18519: + break block; + case 18520: + break block10; + case 18521: + break block; + case 18522: + break block10; + case 18523: + break block; + case 18524: + break block10; + case 18525: + break block; + case 18526: + break block10; + case 18527: + break block; + case 18528: + break block10; + case 18529: + break block; + case 18530: + break block10; + case 18531: + break block; + case 18532: + break block10; + case 18533: + break block; + case 18534: + break block10; + case 18535: + break block; + case 18536: + break block10; + case 18537: + break block; + case 18538: + break block10; + case 18539: + break block; + case 18540: + break block10; + case 18541: + break block; + case 18542: + break block10; + case 18543: + break block; + case 18544: + break block10; + case 18545: + break block; + case 18546: + break block10; + case 18547: + break block; + case 18548: + break block10; + case 18549: + break block; + case 18550: + break block10; + case 18551: + break block; + case 18552: + break block10; + case 18553: + break block; + case 18554: + break block10; + case 18555: + break block; + case 18556: + break block10; + case 18557: + break block; + case 18558: + break block10; + case 18559: + break block; + case 18560: + break block10; + case 18561: + break block; + case 18562: + break block10; + case 18563: + break block; + case 18564: + break block10; + case 18565: + break block; + case 18566: + break block10; + case 18567: + break block; + case 18568: + break block10; + case 18569: + break block; + case 18570: + break block10; + case 18571: + break block; + case 18572: + break block10; + case 18573: + break block; + case 18574: + break block10; + case 18575: + break block; + case 18576: + break block10; + case 18577: + break block; + case 18578: + break block10; + case 18579: + break block; + case 18580: + break block10; + case 18581: + break block; + case 18582: + break block10; + case 18583: + break block; + case 18584: + break block10; + case 18585: + break block; + case 18586: + break block10; + case 18587: + break block; + case 18588: + break block10; + case 18589: + break block; + case 18590: + break block10; + case 18591: + break block; + case 18592: + break block10; + case 18593: + break block; + case 18594: + break block10; + case 18595: + break block; + case 18596: + break block10; + case 18597: + break block; + case 18598: + break block10; + case 18599: + break block; + case 18600: + break block10; + case 18601: + break block; + case 18602: + break block10; + case 18603: + break block; + case 18604: + break block10; + case 18605: + break block; + case 18606: + break block10; + case 18607: + break block; + case 18608: + break block10; + case 18609: + break block; + case 18610: + break block10; + case 18611: + break block; + case 18612: + break block10; + case 18613: + break block; + case 18614: + break block10; + case 18615: + break block; + case 18616: + break block10; + case 18617: + break block; + case 18618: + break block10; + case 18619: + break block; + case 18620: + break block10; + case 18621: + break block; + case 18622: + break block10; + case 18623: + break block; + case 18624: + break block10; + case 18625: + break block; + case 18626: + break block10; + case 18627: + break block; + case 18628: + break block10; + case 18629: + break block; + case 18630: + break block10; + case 18631: + break block; + case 18632: + break block10; + case 18633: + break block; + case 18634: + break block10; + case 18635: + break block; + case 18636: + break block10; + case 18637: + break block; + case 18638: + break block10; + case 18639: + break block; + case 18640: + break block10; + case 18641: + break block; + case 18642: + break block10; + case 18643: + break block; + case 18644: + break block10; + case 18645: + break block; + case 18646: + break block10; + case 18647: + break block; + case 18648: + break block10; + case 18649: + break block; + case 18650: + break block10; + case 18651: + break block; + case 18652: + break block10; + case 18653: + break block; + case 18654: + break block10; + case 18655: + break block; + case 18656: + break block10; + case 18657: + break block; + case 18658: + break block10; + case 18659: + break block; + case 18660: + break block10; + case 18661: + break block; + case 18662: + break block10; + case 18663: + break block; + case 18664: + break block10; + case 18665: + break block; + case 18666: + break block10; + case 18667: + break block; + case 18668: + break block10; + case 18669: + break block; + case 18670: + break block10; + case 18671: + break block; + case 18672: + break block10; + case 18673: + break block; + case 18674: + break block10; + case 18675: + break block; + case 18676: + break block10; + case 18677: + break block; + case 18678: + break block10; + case 18679: + break block; + case 18680: + break block10; + case 18681: + break block; + case 18682: + break block10; + case 18683: + break block; + case 18684: + break block10; + case 18685: + break block; + case 18686: + break block10; + case 18687: + break block; + case 18688: + break block10; + case 18689: + break block; + case 18690: + break block10; + case 18691: + break block; + case 18692: + break block10; + case 18693: + break block; + case 18694: + break block10; + case 18695: + break block; + case 18696: + break block10; + case 18697: + break block; + case 18698: + break block10; + case 18699: + break block; + case 18700: + break block10; + case 18701: + break block; + case 18702: + break block10; + case 18703: + break block; + case 18704: + break block10; + case 18705: + break block; + case 18706: + break block10; + case 18707: + break block; + case 18708: + break block10; + case 18709: + break block; + case 18710: + break block10; + case 18711: + break block; + case 18712: + break block10; + case 18713: + break block; + case 18714: + break block10; + case 18715: + break block; + case 18716: + break block10; + case 18717: + break block; + case 18718: + break block10; + case 18719: + break block; + case 18720: + break block10; + case 18721: + break block; + case 18722: + break block10; + case 18723: + break block; + case 18724: + break block10; + case 18725: + break block; + case 18726: + break block10; + case 18727: + break block; + case 18728: + break block10; + case 18729: + break block; + case 18730: + break block10; + case 18731: + break block; + case 18732: + break block10; + case 18733: + break block; + case 18734: + break block10; + case 18735: + break block; + case 18736: + break block10; + case 18737: + break block; + case 18738: + break block10; + case 18739: + break block; + case 18740: + break block10; + case 18741: + break block; + case 18742: + break block10; + case 18743: + break block; + case 18744: + break block10; + case 18745: + break block; + case 18746: + break block10; + case 18747: + break block; + case 18748: + break block10; + case 18749: + break block; + case 18750: + break block10; + case 18751: + break block; + case 18752: + break block10; + case 18753: + break block; + case 18754: + break block10; + case 18755: + break block; + case 18756: + break block10; + case 18757: + break block; + case 18758: + break block10; + case 18759: + break block; + case 18760: + break block10; + case 18761: + break block; + case 18762: + break block10; + case 18763: + break block; + case 18764: + break block10; + case 18765: + break block; + case 18766: + break block10; + case 18767: + break block; + case 18768: + break block10; + case 18769: + break block; + case 18770: + break block10; + case 18771: + break block; + case 18772: + break block10; + case 18773: + break block; + case 18774: + break block10; + case 18775: + break block; + case 18776: + break block10; + case 18777: + break block; + case 18778: + break block10; + case 18779: + break block; + case 18780: + break block10; + case 18781: + break block; + case 18782: + break block10; + case 18783: + break block; + case 18784: + break block10; + case 18785: + break block; + case 18786: + break block10; + case 18787: + break block; + case 18788: + break block10; + case 18789: + break block; + case 18790: + break block10; + case 18791: + break block; + case 18792: + break block10; + case 18793: + break block; + case 18794: + break block10; + case 18795: + break block; + case 18796: + break block10; + case 18797: + break block; + case 18798: + break block10; + case 18799: + break block; + case 18800: + break block10; + case 18801: + break block; + case 18802: + break block10; + case 18803: + break block; + case 18804: + break block10; + case 18805: + break block; + case 18806: + break block10; + case 18807: + break block; + case 18808: + break block10; + case 18809: + break block; + case 18810: + break block10; + case 18811: + break block; + case 18812: + break block10; + case 18813: + break block; + case 18814: + break block10; + case 18815: + break block; + case 18816: + break block10; + case 18817: + break block; + case 18818: + break block10; + case 18819: + break block; + case 18820: + break block10; + case 18821: + break block; + case 18822: + break block10; + case 18823: + break block; + case 18824: + break block10; + case 18825: + break block; + case 18826: + break block10; + case 18827: + break block; + case 18828: + break block10; + case 18829: + break block; + case 18830: + break block10; + case 18831: + break block; + case 18832: + break block10; + case 18833: + break block; + case 18834: + break block10; + case 18835: + break block; + case 18836: + break block10; + case 18837: + break block; + case 18838: + break block10; + case 18839: + break block; + case 18840: + break block10; + case 18841: + break block; + case 18842: + break block10; + case 18843: + break block; + case 18844: + break block10; + case 18845: + break block; + case 18846: + break block10; + case 18847: + break block; + case 18848: + break block10; + case 18849: + break block; + case 18850: + break block10; + case 18851: + break block; + case 18852: + break block10; + case 18853: + break block; + case 18854: + break block10; + case 18855: + break block; + case 18856: + break block10; + case 18857: + break block; + case 18858: + break block10; + case 18859: + break block; + case 18860: + break block10; + case 18861: + break block; + case 18862: + break block10; + case 18863: + break block; + case 18864: + break block10; + case 18865: + break block; + case 18866: + break block10; + case 18867: + break block; + case 18868: + break block10; + case 18869: + break block; + case 18870: + break block10; + case 18871: + break block; + case 18872: + break block10; + case 18873: + break block; + case 18874: + break block10; + case 18875: + break block; + case 18876: + break block10; + case 18877: + break block; + case 18878: + break block10; + case 18879: + break block; + case 18880: + break block10; + case 18881: + break block; + case 18882: + break block10; + case 18883: + break block; + case 18884: + break block10; + case 18885: + break block; + case 18886: + break block10; + case 18887: + break block; + case 18888: + break block10; + case 18889: + break block; + case 18890: + break block10; + case 18891: + break block; + case 18892: + break block10; + case 18893: + break block; + case 18894: + break block10; + case 18895: + break block; + case 18896: + break block10; + case 18897: + break block; + case 18898: + break block10; + case 18899: + break block; + case 18900: + break block10; + case 18901: + break block; + case 18902: + break block10; + case 18903: + break block; + case 18904: + break block10; + case 18905: + break block; + case 18906: + break block10; + case 18907: + break block; + case 18908: + break block10; + case 18909: + break block; + case 18910: + break block10; + case 18911: + break block; + case 18912: + break block10; + case 18913: + break block; + case 18914: + break block10; + case 18915: + break block; + case 18916: + break block10; + case 18917: + break block; + case 18918: + break block10; + case 18919: + break block; + case 18920: + break block10; + case 18921: + break block; + case 18922: + break block10; + case 18923: + break block; + case 18924: + break block10; + case 18925: + break block; + case 18926: + break block10; + case 18927: + break block; + case 18928: + break block10; + case 18929: + break block; + case 18930: + break block10; + case 18931: + break block; + case 18932: + break block10; + case 18933: + break block; + case 18934: + break block10; + case 18935: + break block; + case 18936: + break block10; + case 18937: + break block; + case 18938: + break block10; + case 18939: + break block; + case 18940: + break block10; + case 18941: + break block; + case 18942: + break block10; + case 18943: + break block; + case 18944: + break block10; + case 18945: + break block; + case 18946: + break block10; + case 18947: + break block; + case 18948: + break block10; + case 18949: + break block; + case 18950: + break block10; + case 18951: + break block; + case 18952: + break block10; + case 18953: + break block; + case 18954: + break block10; + case 18955: + break block; + case 18956: + break block10; + case 18957: + break block; + case 18958: + break block10; + case 18959: + break block; + case 18960: + break block10; + case 18961: + break block; + case 18962: + break block10; + case 18963: + break block; + case 18964: + break block10; + case 18965: + break block; + case 18966: + break block10; + case 18967: + break block; + case 18968: + break block10; + case 18969: + break block; + case 18970: + break block10; + case 18971: + break block; + case 18972: + break block10; + case 18973: + break block; + case 18974: + break block10; + case 18975: + break block; + case 18976: + break block10; + case 18977: + break block; + case 18978: + break block10; + case 18979: + break block; + case 18980: + break block10; + case 18981: + break block; + case 18982: + break block10; + case 18983: + break block; + case 18984: + break block10; + case 18985: + break block; + case 18986: + break block10; + case 18987: + break block; + case 18988: + break block10; + case 18989: + break block; + case 18990: + break block10; + case 18991: + break block; + case 18992: + break block10; + case 18993: + break block; + case 18994: + break block10; + case 18995: + break block; + case 18996: + break block10; + case 18997: + break block; + case 18998: + break block10; + case 18999: + break block; + case 19e3: + break block10; + case 19001: + break block; + case 19002: + break block10; + case 19003: + break block; + case 19004: + break block10; + case 19005: + break block; + case 19006: + break block10; + case 19007: + break block; + case 19008: + break block10; + case 19009: + break block; + case 19010: + break block10; + case 19011: + break block; + case 19012: + break block10; + case 19013: + break block; + case 19014: + break block10; + case 19015: + break block; + case 19016: + break block10; + case 19017: + break block; + case 19018: + break block10; + case 19019: + break block; + case 19020: + break block10; + case 19021: + break block; + case 19022: + break block10; + case 19023: + break block; + case 19024: + break block10; + case 19025: + break block; + case 19026: + break block10; + case 19027: + break block; + case 19028: + break block10; + case 19029: + break block; + case 19030: + break block10; + case 19031: + break block; + case 19032: + break block10; + case 19033: + break block; + case 19034: + break block10; + case 19035: + break block; + case 19036: + break block10; + case 19037: + break block; + case 19038: + break block10; + case 19039: + break block; + case 19040: + break block10; + case 19041: + break block; + case 19042: + break block10; + case 19043: + break block; + case 19044: + break block10; + case 19045: + break block; + case 19046: + break block10; + case 19047: + break block; + case 19048: + break block10; + case 19049: + break block; + case 19050: + break block10; + case 19051: + break block; + case 19052: + break block10; + case 19053: + break block; + case 19054: + break block10; + case 19055: + break block; + case 19056: + break block10; + case 19057: + break block; + case 19058: + break block10; + case 19059: + break block; + case 19060: + break block10; + case 19061: + break block; + case 19062: + break block10; + case 19063: + break block; + case 19064: + break block10; + case 19065: + break block; + case 19066: + break block10; + case 19067: + break block; + case 19068: + break block10; + case 19069: + break block; + case 19070: + break block10; + case 19071: + break block; + case 19072: + break block10; + case 19073: + break block; + case 19074: + break block10; + case 19075: + break block; + case 19076: + break block10; + case 19077: + break block; + case 19078: + break block10; + case 19079: + break block; + case 19080: + break block10; + case 19081: + break block; + case 19082: + break block10; + case 19083: + break block; + case 19084: + break block10; + case 19085: + break block; + case 19086: + break block10; + case 19087: + break block; + case 19088: + break block10; + case 19089: + break block; + case 19090: + break block10; + case 19091: + break block; + case 19092: + break block10; + case 19093: + break block; + case 19094: + break block10; + case 19095: + break block; + case 19096: + break block10; + case 19097: + break block; + case 19098: + break block10; + case 19099: + break block; + case 19100: + break block10; + case 19101: + break block; + case 19102: + break block10; + case 19103: + break block; + case 19104: + break block10; + case 19105: + break block; + case 19106: + break block10; + case 19107: + break block; + case 19108: + break block10; + case 19109: + break block; + case 19110: + break block10; + case 19111: + break block; + case 19112: + break block10; + case 19113: + break block; + case 19114: + break block10; + case 19115: + break block; + case 19116: + break block10; + case 19117: + break block; + case 19118: + break block10; + case 19119: + break block; + case 19120: + break block10; + case 19121: + break block; + case 19122: + break block10; + case 19123: + break block; + case 19124: + break block10; + case 19125: + break block; + case 19126: + break block10; + case 19127: + break block; + case 19128: + break block10; + case 19129: + break block; + case 19130: + break block10; + case 19131: + break block; + case 19132: + break block10; + case 19133: + break block; + case 19134: + break block10; + case 19135: + break block; + case 19136: + break block10; + case 19137: + break block; + case 19138: + break block10; + case 19139: + break block; + case 19140: + break block10; + case 19141: + break block; + case 19142: + break block10; + case 19143: + break block; + case 19144: + break block10; + case 19145: + break block; + case 19146: + break block10; + case 19147: + break block; + case 19148: + break block10; + case 19149: + break block; + case 19150: + break block10; + case 19151: + break block; + case 19152: + break block10; + case 19153: + break block; + case 19154: + break block10; + case 19155: + break block; + case 19156: + break block10; + case 19157: + break block; + case 19158: + break block10; + case 19159: + break block; + case 19160: + break block10; + case 19161: + break block; + case 19162: + break block10; + case 19163: + break block; + case 19164: + break block10; + case 19165: + break block; + case 19166: + break block10; + case 19167: + break block; + case 19168: + break block10; + case 19169: + break block; + case 19170: + break block10; + case 19171: + break block; + case 19172: + break block10; + case 19173: + break block; + case 19174: + break block10; + case 19175: + break block; + case 19176: + break block10; + case 19177: + break block; + case 19178: + break block10; + case 19179: + break block; + case 19180: + break block10; + case 19181: + break block; + case 19182: + break block10; + case 19183: + break block; + case 19184: + break block10; + case 19185: + break block; + case 19186: + break block10; + case 19187: + break block; + case 19188: + break block10; + case 19189: + break block; + case 19190: + break block10; + case 19191: + break block; + case 19192: + break block10; + case 19193: + break block; + case 19194: + break block10; + case 19195: + break block; + case 19196: + break block10; + case 19197: + break block; + case 19198: + break block10; + case 19199: + break block; + case 19200: + break block10; + case 19201: + break block; + case 19202: + break block10; + case 19203: + break block; + case 19204: + break block10; + case 19205: + break block; + case 19206: + break block10; + case 19207: + break block; + case 19208: + break block10; + case 19209: + break block; + case 19210: + break block10; + case 19211: + break block; + case 19212: + break block10; + case 19213: + break block; + case 19214: + break block10; + case 19215: + break block; + case 19216: + break block10; + case 19217: + break block; + case 19218: + break block10; + case 19219: + break block; + case 19220: + break block10; + case 19221: + break block; + case 19222: + break block10; + case 19223: + break block; + case 19224: + break block10; + case 19225: + break block; + case 19226: + break block10; + case 19227: + break block; + case 19228: + break block10; + case 19229: + break block; + case 19230: + break block10; + case 19231: + break block; + case 19232: + break block10; + case 19233: + break block; + case 19234: + break block10; + case 19235: + break block; + case 19236: + break block10; + case 19237: + break block; + case 19238: + break block10; + case 19239: + break block; + case 19240: + break block10; + case 19241: + break block; + case 19242: + break block10; + case 19243: + break block; + case 19244: + break block10; + case 19245: + break block; + case 19246: + break block10; + case 19247: + break block; + case 19248: + break block10; + case 19249: + break block; + case 19250: + break block10; + case 19251: + break block; + case 19252: + break block10; + case 19253: + break block; + case 19254: + break block10; + case 19255: + break block; + case 19256: + break block10; + case 19257: + break block; + case 19258: + break block10; + case 19259: + break block; + case 19260: + break block10; + case 19261: + break block; + case 19262: + break block10; + case 19263: + break block; + case 19264: + break block10; + case 19265: + break block; + case 19266: + break block10; + case 19267: + break block; + case 19268: + break block10; + case 19269: + break block; + case 19270: + break block10; + case 19271: + break block; + case 19272: + break block10; + case 19273: + break block; + case 19274: + break block10; + case 19275: + break block; + case 19276: + break block10; + case 19277: + break block; + case 19278: + break block10; + case 19279: + break block; + case 19280: + break block10; + case 19281: + break block; + case 19282: + break block10; + case 19283: + break block; + case 19284: + break block10; + case 19285: + break block; + case 19286: + break block10; + case 19287: + break block; + case 19288: + break block10; + case 19289: + break block; + case 19290: + break block10; + case 19291: + break block; + case 19292: + break block10; + case 19293: + break block; + case 19294: + break block10; + case 19295: + break block; + case 19296: + break block10; + case 19297: + break block; + case 19298: + break block10; + case 19299: + break block; + case 19300: + break block10; + case 19301: + break block; + case 19302: + break block10; + case 19303: + break block; + case 19304: + break block10; + case 19305: + break block; + case 19306: + break block10; + case 19307: + break block; + case 19308: + break block10; + case 19309: + break block; + case 19310: + break block10; + case 19311: + break block; + case 19312: + break block10; + case 19313: + break block; + case 19314: + break block10; + case 19315: + break block; + case 19316: + break block10; + case 19317: + break block; + case 19318: + break block10; + case 19319: + break block; + case 19320: + break block10; + case 19321: + break block; + case 19322: + break block10; + case 19323: + break block; + case 19324: + break block10; + case 19325: + break block; + case 19326: + break block10; + case 19327: + break block; + case 19328: + break block10; + case 19329: + break block; + case 19330: + break block10; + case 19331: + break block; + case 19332: + break block10; + case 19333: + break block; + case 19334: + break block10; + case 19335: + break block; + case 19336: + break block10; + case 19337: + break block; + case 19338: + break block10; + case 19339: + break block; + case 19340: + break block10; + case 19341: + break block; + case 19342: + break block10; + case 19343: + break block; + case 19344: + break block10; + case 19345: + break block; + case 19346: + break block10; + case 19347: + break block; + case 19348: + break block10; + case 19349: + break block; + case 19350: + break block10; + case 19351: + break block; + case 19352: + break block10; + case 19353: + break block; + case 19354: + break block10; + case 19355: + break block; + case 19356: + break block10; + case 19357: + break block; + case 19358: + break block10; + case 19359: + break block; + case 19360: + break block10; + case 19361: + break block; + case 19362: + break block10; + case 19363: + break block; + case 19364: + break block10; + case 19365: + break block; + case 19366: + break block10; + case 19367: + break block; + case 19368: + break block10; + case 19369: + break block; + case 19370: + break block10; + case 19371: + break block; + case 19372: + break block10; + case 19373: + break block; + case 19374: + break block10; + case 19375: + break block; + case 19376: + break block10; + case 19377: + break block; + case 19378: + break block10; + case 19379: + break block; + case 19380: + break block10; + case 19381: + break block; + case 19382: + break block10; + case 19383: + break block; + case 19384: + break block10; + case 19385: + break block; + case 19386: + break block10; + case 19387: + break block; + case 19388: + break block10; + case 19389: + break block; + case 19390: + break block10; + case 19391: + break block; + case 19392: + break block10; + case 19393: + break block; + case 19394: + break block10; + case 19395: + break block; + case 19396: + break block10; + case 19397: + break block; + case 19398: + break block10; + case 19399: + break block; + case 19400: + break block10; + case 19401: + break block; + case 19402: + break block10; + case 19403: + break block; + case 19404: + break block10; + case 19405: + break block; + case 19406: + break block10; + case 19407: + break block; + case 19408: + break block10; + case 19409: + break block; + case 19410: + break block10; + case 19411: + break block; + case 19412: + break block10; + case 19413: + break block; + case 19414: + break block10; + case 19415: + break block; + case 19416: + break block10; + case 19417: + break block; + case 19418: + break block10; + case 19419: + break block; + case 19420: + break block10; + case 19421: + break block; + case 19422: + break block10; + case 19423: + break block; + case 19424: + break block10; + case 19425: + break block; + case 19426: + break block10; + case 19427: + break block; + case 19428: + break block10; + case 19429: + break block; + case 19430: + break block10; + case 19431: + break block; + case 19432: + break block10; + case 19433: + break block; + case 19434: + break block10; + case 19435: + break block; + case 19436: + break block10; + case 19437: + break block; + case 19438: + break block10; + case 19439: + break block; + case 19440: + break block10; + case 19441: + break block; + case 19442: + break block10; + case 19443: + break block; + case 19444: + break block10; + case 19445: + break block; + case 19446: + break block10; + case 19447: + break block; + case 19448: + break block10; + case 19449: + break block; + case 19450: + break block10; + case 19451: + break block; + case 19452: + break block10; + case 19453: + break block; + case 19454: + break block10; + case 19455: + break block; + case 19456: + break block10; + case 19457: + break block; + case 19458: + break block10; + case 19459: + break block; + case 19460: + break block10; + case 19461: + break block; + case 19462: + break block10; + case 19463: + break block; + case 19464: + break block10; + case 19465: + break block; + case 19466: + break block10; + case 19467: + break block; + case 19468: + break block10; + case 19469: + break block; + case 19470: + break block10; + case 19471: + break block; + case 19472: + break block10; + case 19473: + break block; + case 19474: + break block10; + case 19475: + break block; + case 19476: + break block10; + case 19477: + break block; + case 19478: + break block10; + case 19479: + break block; + case 19480: + break block10; + case 19481: + break block; + case 19482: + break block10; + case 19483: + break block; + case 19484: + break block10; + case 19485: + break block; + case 19486: + break block10; + case 19487: + break block; + case 19488: + break block10; + case 19489: + break block; + case 19490: + break block10; + case 19491: + break block; + case 19492: + break block10; + case 19493: + break block; + case 19494: + break block10; + case 19495: + break block; + case 19496: + break block10; + case 19497: + break block; + case 19498: + break block10; + case 19499: + break block; + case 19500: + break block10; + case 19501: + break block; + case 19502: + break block10; + case 19503: + break block; + case 19504: + break block10; + case 19505: + break block; + case 19506: + break block10; + case 19507: + break block; + case 19508: + break block10; + case 19509: + break block; + case 19510: + break block10; + case 19511: + break block; + case 19512: + break block10; + case 19513: + break block; + case 19514: + break block10; + case 19515: + break block; + case 19516: + break block10; + case 19517: + break block; + case 19518: + break block10; + case 19519: + break block; + case 19520: + break block10; + case 19521: + break block; + case 19522: + break block10; + case 19523: + break block; + case 19524: + break block10; + case 19525: + break block; + case 19526: + break block10; + case 19527: + break block; + case 19528: + break block10; + case 19529: + break block; + case 19530: + break block10; + case 19531: + break block; + case 19532: + break block10; + case 19533: + break block; + case 19534: + break block10; + case 19535: + break block; + case 19536: + break block10; + case 19537: + break block; + case 19538: + break block10; + case 19539: + break block; + case 19540: + break block10; + case 19541: + break block; + case 19542: + break block10; + case 19543: + break block; + case 19544: + break block10; + case 19545: + break block; + case 19546: + break block10; + case 19547: + break block; + case 19548: + break block10; + case 19549: + break block; + case 19550: + break block10; + case 19551: + break block; + case 19552: + break block10; + case 19553: + break block; + case 19554: + break block10; + case 19555: + break block; + case 19556: + break block10; + case 19557: + break block; + case 19558: + break block10; + case 19559: + break block; + case 19560: + break block10; + case 19561: + break block; + case 19562: + break block10; + case 19563: + break block; + case 19564: + break block10; + case 19565: + break block; + case 19566: + break block10; + case 19567: + break block; + case 19568: + break block10; + case 19569: + break block; + case 19570: + break block10; + case 19571: + break block; + case 19572: + break block10; + case 19573: + break block; + case 19574: + break block10; + case 19575: + break block; + case 19576: + break block10; + case 19577: + break block; + case 19578: + break block10; + case 19579: + break block; + case 19580: + break block10; + case 19581: + break block; + case 19582: + break block10; + case 19583: + break block; + case 19584: + break block10; + case 19585: + break block; + case 19586: + break block10; + case 19587: + break block; + case 19588: + break block10; + case 19589: + break block; + case 19590: + break block10; + case 19591: + break block; + case 19592: + break block10; + case 19593: + break block; + case 19594: + break block10; + case 19595: + break block; + case 19596: + break block10; + case 19597: + break block; + case 19598: + break block10; + case 19599: + break block; + case 19600: + break block10; + case 19601: + break block; + case 19602: + break block10; + case 19603: + break block; + case 19604: + break block10; + case 19605: + break block; + case 19606: + break block10; + case 19607: + break block; + case 19608: + break block10; + case 19609: + break block; + case 19610: + break block10; + case 19611: + break block; + case 19612: + break block10; + case 19613: + break block; + case 19614: + break block10; + case 19615: + break block; + case 19616: + break block10; + case 19617: + break block; + case 19618: + break block10; + case 19619: + break block; + case 19620: + break block10; + case 19621: + break block; + case 19622: + break block10; + case 19623: + break block; + case 19624: + break block10; + case 19625: + break block; + case 19626: + break block10; + case 19627: + break block; + case 19628: + break block10; + case 19629: + break block; + case 19630: + break block10; + case 19631: + break block; + case 19632: + break block10; + case 19633: + break block; + case 19634: + break block10; + case 19635: + break block; + case 19636: + break block10; + case 19637: + break block; + case 19638: + break block10; + case 19639: + break block; + case 19640: + break block10; + case 19641: + break block; + case 19642: + break block10; + case 19643: + break block; + case 19644: + break block10; + case 19645: + break block; + case 19646: + break block10; + case 19647: + break block; + case 19648: + break block10; + case 19649: + break block; + case 19650: + break block10; + case 19651: + break block; + case 19652: + break block10; + case 19653: + break block; + case 19654: + break block10; + case 19655: + break block; + case 19656: + break block10; + case 19657: + break block; + case 19658: + break block10; + case 19659: + break block; + case 19660: + break block10; + case 19661: + break block; + case 19662: + break block10; + case 19663: + break block; + case 19664: + break block10; + case 19665: + break block; + case 19666: + break block10; + case 19667: + break block; + case 19668: + break block10; + case 19669: + break block; + case 19670: + break block10; + case 19671: + break block; + case 19672: + break block10; + case 19673: + break block; + case 19674: + break block10; + case 19675: + break block; + case 19676: + break block10; + case 19677: + break block; + case 19678: + break block10; + case 19679: + break block; + case 19680: + break block10; + case 19681: + break block; + case 19682: + break block10; + case 19683: + break block; + case 19684: + break block10; + case 19685: + break block; + case 19686: + break block10; + case 19687: + break block; + case 19688: + break block10; + case 19689: + break block; + case 19690: + break block10; + case 19691: + break block; + case 19692: + break block10; + case 19693: + break block; + case 19694: + break block10; + case 19695: + break block; + case 19696: + break block10; + case 19697: + break block; + case 19698: + break block10; + case 19699: + break block; + case 19700: + break block10; + case 19701: + break block; + case 19702: + break block10; + case 19703: + break block; + case 19704: + break block10; + case 19705: + break block; + case 19706: + break block10; + case 19707: + break block; + case 19708: + break block10; + case 19709: + break block; + case 19710: + break block10; + case 19711: + break block; + case 19712: + break block10; + case 19713: + break block; + case 19714: + break block10; + case 19715: + break block; + case 19716: + break block10; + case 19717: + break block; + case 19718: + break block10; + case 19719: + break block; + case 19720: + break block10; + case 19721: + break block; + case 19722: + break block10; + case 19723: + break block; + case 19724: + break block10; + case 19725: + break block; + case 19726: + break block10; + case 19727: + break block; + case 19728: + break block10; + case 19729: + break block; + case 19730: + break block10; + case 19731: + break block; + case 19732: + break block10; + case 19733: + break block; + case 19734: + break block10; + case 19735: + break block; + case 19736: + break block10; + case 19737: + break block; + case 19738: + break block10; + case 19739: + break block; + case 19740: + break block10; + case 19741: + break block; + case 19742: + break block10; + case 19743: + break block; + case 19744: + break block10; + case 19745: + break block; + case 19746: + break block10; + case 19747: + break block; + case 19748: + break block10; + case 19749: + break block; + case 19750: + break block10; + case 19751: + break block; + case 19752: + break block10; + case 19753: + break block; + case 19754: + break block10; + case 19755: + break block; + case 19756: + break block10; + case 19757: + break block; + case 19758: + break block10; + case 19759: + break block; + case 19760: + break block10; + case 19761: + break block; + case 19762: + break block10; + case 19763: + break block; + case 19764: + break block10; + case 19765: + break block; + case 19766: + break block10; + case 19767: + break block; + case 19768: + break block10; + case 19769: + break block; + case 19770: + break block10; + case 19771: + break block; + case 19772: + break block10; + case 19773: + break block; + case 19774: + break block10; + case 19775: + break block; + case 19776: + break block10; + case 19777: + break block; + case 19778: + break block10; + case 19779: + break block; + case 19780: + break block10; + case 19781: + break block; + case 19782: + break block10; + case 19783: + break block; + case 19784: + break block10; + case 19785: + break block; + case 19786: + break block10; + case 19787: + break block; + case 19788: + break block10; + case 19789: + break block; + case 19790: + break block10; + case 19791: + break block; + case 19792: + break block10; + case 19793: + break block; + case 19794: + break block10; + case 19795: + break block; + case 19796: + break block10; + case 19797: + break block; + case 19798: + break block10; + case 19799: + break block; + case 19800: + break block10; + case 19801: + break block; + case 19802: + break block10; + case 19803: + break block; + case 19804: + break block10; + case 19805: + break block; + case 19806: + break block10; + case 19807: + break block; + case 19808: + break block10; + case 19809: + break block; + case 19810: + break block10; + case 19811: + break block; + case 19812: + break block10; + case 19813: + break block; + case 19814: + break block10; + case 19815: + break block; + case 19816: + break block10; + case 19817: + break block; + case 19818: + break block10; + case 19819: + break block; + case 19820: + break block10; + case 19821: + break block; + case 19822: + break block10; + case 19823: + break block; + case 19824: + break block10; + case 19825: + break block; + case 19826: + break block10; + case 19827: + break block; + case 19828: + break block10; + case 19829: + break block; + case 19830: + break block10; + case 19831: + break block; + case 19832: + break block10; + case 19833: + break block; + case 19834: + break block10; + case 19835: + break block; + case 19836: + break block10; + case 19837: + break block; + case 19838: + break block10; + case 19839: + break block; + case 19840: + break block10; + case 19841: + break block; + case 19842: + break block10; + case 19843: + break block; + case 19844: + break block10; + case 19845: + break block; + case 19846: + break block10; + case 19847: + break block; + case 19848: + break block10; + case 19849: + break block; + case 19850: + break block10; + case 19851: + break block; + case 19852: + break block10; + case 19853: + break block; + case 19854: + break block10; + case 19855: + break block; + case 19856: + break block10; + case 19857: + break block; + case 19858: + break block10; + case 19859: + break block; + case 19860: + break block10; + case 19861: + break block; + case 19862: + break block10; + case 19863: + break block; + case 19864: + break block10; + case 19865: + break block; + case 19866: + break block10; + case 19867: + break block; + case 19868: + break block10; + case 19869: + break block; + case 19870: + break block10; + case 19871: + break block; + case 19872: + break block10; + case 19873: + break block; + case 19874: + break block10; + case 19875: + break block; + case 19876: + break block10; + case 19877: + break block; + case 19878: + break block10; + case 19879: + break block; + case 19880: + break block10; + case 19881: + break block; + case 19882: + break block10; + case 19883: + break block; + case 19884: + break block10; + case 19885: + break block; + case 19886: + break block10; + case 19887: + break block; + case 19888: + break block10; + case 19889: + break block; + case 19890: + break block10; + case 19891: + break block; + case 19892: + break block10; + case 19893: + break block; + case 19894: + break block10; + case 19895: + break block; + case 19896: + break block10; + case 19897: + break block; + case 19898: + break block10; + case 19899: + break block; + case 19900: + break block10; + case 19901: + break block; + case 19902: + break block10; + case 19903: + break block; + case 19904: + break block10; + case 19905: + break block; + case 19906: + break block10; + case 19907: + break block; + case 19908: + break block10; + case 19909: + break block; + case 19910: + break block10; + case 19911: + break block; + case 19912: + break block10; + case 19913: + break block; + case 19914: + break block10; + case 19915: + break block; + case 19916: + break block10; + case 19917: + break block; + case 19918: + break block10; + case 19919: + break block; + case 19920: + break block10; + case 19921: + break block; + case 19922: + break block10; + case 19923: + break block; + case 19924: + break block10; + case 19925: + break block; + case 19926: + break block10; + case 19927: + break block; + case 19928: + break block10; + case 19929: + break block; + case 19930: + break block10; + case 19931: + break block; + case 19932: + break block10; + case 19933: + break block; + case 19934: + break block10; + case 19935: + break block; + case 19936: + break block10; + case 19937: + break block; + case 19938: + break block10; + case 19939: + break block; + case 19940: + break block10; + case 19941: + break block; + case 19942: + break block10; + case 19943: + break block; + case 19944: + break block10; + case 19945: + break block; + case 19946: + break block10; + case 19947: + break block; + case 19948: + break block10; + case 19949: + break block; + case 19950: + break block10; + case 19951: + break block; + case 19952: + break block10; + case 19953: + break block; + case 19954: + break block10; + case 19955: + break block; + case 19956: + break block10; + case 19957: + break block; + case 19958: + break block10; + case 19959: + break block; + case 19960: + break block10; + case 19961: + break block; + case 19962: + break block10; + case 19963: + break block; + case 19964: + break block10; + case 19965: + break block; + case 19966: + break block10; + case 19967: + break block; + case 19968: + break block10; + case 19969: + break block; + case 19970: + break block10; + case 19971: + break block; + case 19972: + break block10; + case 19973: + break block; + case 19974: + break block10; + case 19975: + break block; + case 19976: + break block10; + case 19977: + break block; + case 19978: + break block10; + case 19979: + break block; + case 19980: + break block10; + case 19981: + break block; + case 19982: + break block10; + case 19983: + break block; + case 19984: + break block10; + case 19985: + break block; + case 19986: + break block10; + case 19987: + break block; + case 19988: + break block10; + case 19989: + break block; + case 19990: + break block10; + case 19991: + break block; + case 19992: + break block10; + case 19993: + break block; + case 19994: + break block10; + case 19995: + break block; + case 19996: + break block10; + case 19997: + break block; + case 19998: + break block10; + case 19999: + break block; + case 2e4: + break block10; + case 20001: + break block; + case 20002: + break block10; + case 20003: + break block; + case 20004: + break block10; + case 20005: + break block; + case 20006: + break block10; + case 20007: + break block; + case 20008: + break block10; + case 20009: + break block; + case 20010: + break block10; + case 20011: + break block; + case 20012: + break block10; + case 20013: + break block; + case 20014: + break block10; + case 20015: + break block; + case 20016: + break block10; + case 20017: + break block; + case 20018: + break block10; + case 20019: + break block; + case 20020: + break block10; + case 20021: + break block; + case 20022: + break block10; + case 20023: + break block; + case 20024: + break block10; + case 20025: + break block; + case 20026: + break block10; + case 20027: + break block; + case 20028: + break block10; + case 20029: + break block; + case 20030: + break block10; + case 20031: + break block; + case 20032: + break block10; + case 20033: + break block; + case 20034: + break block10; + case 20035: + break block; + case 20036: + break block10; + case 20037: + break block; + case 20038: + break block10; + case 20039: + break block; + case 20040: + break block10; + case 20041: + break block; + case 20042: + break block10; + case 20043: + break block; + case 20044: + break block10; + case 20045: + break block; + case 20046: + break block10; + case 20047: + break block; + case 20048: + break block10; + case 20049: + break block; + case 20050: + break block10; + case 20051: + break block; + case 20052: + break block10; + case 20053: + break block; + case 20054: + break block10; + case 20055: + break block; + case 20056: + break block10; + case 20057: + break block; + case 20058: + break block10; + case 20059: + break block; + case 20060: + break block10; + case 20061: + break block; + case 20062: + break block10; + case 20063: + break block; + case 20064: + break block10; + case 20065: + break block; + case 20066: + break block10; + case 20067: + break block; + case 20068: + break block10; + case 20069: + break block; + case 20070: + break block10; + case 20071: + break block; + case 20072: + break block10; + case 20073: + break block; + case 20074: + break block10; + case 20075: + break block; + case 20076: + break block10; + case 20077: + break block; + case 20078: + break block10; + case 20079: + break block; + case 20080: + break block10; + case 20081: + break block; + case 20082: + break block10; + case 20083: + break block; + case 20084: + break block10; + case 20085: + break block; + case 20086: + break block10; + case 20087: + break block; + case 20088: + break block10; + case 20089: + break block; + case 20090: + break block10; + case 20091: + break block; + case 20092: + break block10; + case 20093: + break block; + case 20094: + break block10; + case 20095: + break block; + case 20096: + break block10; + case 20097: + break block; + case 20098: + break block10; + case 20099: + break block; + case 20100: + break block10; + case 20101: + break block; + case 20102: + break block10; + case 20103: + break block; + case 20104: + break block10; + case 20105: + break block; + case 20106: + break block10; + case 20107: + break block; + case 20108: + break block10; + case 20109: + break block; + case 20110: + break block10; + case 20111: + break block; + case 20112: + break block10; + case 20113: + break block; + case 20114: + break block10; + case 20115: + break block; + case 20116: + break block10; + case 20117: + break block; + case 20118: + break block10; + case 20119: + break block; + case 20120: + break block10; + case 20121: + break block; + case 20122: + break block10; + case 20123: + break block; + case 20124: + break block10; + case 20125: + break block; + case 20126: + break block10; + case 20127: + break block; + case 20128: + break block10; + case 20129: + break block; + case 20130: + break block10; + case 20131: + break block; + case 20132: + break block10; + case 20133: + break block; + case 20134: + break block10; + case 20135: + break block; + case 20136: + break block10; + case 20137: + break block; + case 20138: + break block10; + case 20139: + break block; + case 20140: + break block10; + case 20141: + break block; + case 20142: + break block10; + case 20143: + break block; + case 20144: + break block10; + case 20145: + break block; + case 20146: + break block10; + case 20147: + break block; + case 20148: + break block10; + case 20149: + break block; + case 20150: + break block10; + case 20151: + break block; + case 20152: + break block10; + case 20153: + break block; + case 20154: + break block10; + case 20155: + break block; + case 20156: + break block10; + case 20157: + break block; + case 20158: + break block10; + case 20159: + break block; + case 20160: + break block10; + case 20161: + break block; + case 20162: + break block10; + case 20163: + break block; + case 20164: + break block10; + case 20165: + break block; + case 20166: + break block10; + case 20167: + break block; + case 20168: + break block10; + case 20169: + break block; + case 20170: + break block10; + case 20171: + break block; + case 20172: + break block10; + case 20173: + break block; + case 20174: + break block10; + case 20175: + break block; + case 20176: + break block10; + case 20177: + break block; + case 20178: + break block10; + case 20179: + break block; + case 20180: + break block10; + case 20181: + break block; + case 20182: + break block10; + case 20183: + break block; + case 20184: + break block10; + case 20185: + break block; + case 20186: + break block10; + case 20187: + break block; + case 20188: + break block10; + case 20189: + break block; + case 20190: + break block10; + case 20191: + break block; + case 20192: + break block10; + case 20193: + break block; + case 20194: + break block10; + case 20195: + break block; + case 20196: + break block10; + case 20197: + break block; + case 20198: + break block10; + case 20199: + break block; + case 20200: + break block10; + case 20201: + break block; + case 20202: + break block10; + case 20203: + break block; + case 20204: + break block10; + case 20205: + break block; + case 20206: + break block10; + case 20207: + break block; + case 20208: + break block10; + case 20209: + break block; + case 20210: + break block10; + case 20211: + break block; + case 20212: + break block10; + case 20213: + break block; + case 20214: + break block10; + case 20215: + break block; + case 20216: + break block10; + case 20217: + break block; + case 20218: + break block10; + case 20219: + break block; + case 20220: + break block10; + case 20221: + break block; + case 20222: + break block10; + case 20223: + break block; + case 20224: + break block10; + case 20225: + break block; + case 20226: + break block10; + case 20227: + break block; + case 20228: + break block10; + case 20229: + break block; + case 20230: + break block10; + case 20231: + break block; + case 20232: + break block10; + case 20233: + break block; + case 20234: + break block10; + case 20235: + break block; + case 20236: + break block10; + case 20237: + break block; + case 20238: + break block10; + case 20239: + break block; + case 20240: + break block10; + case 20241: + break block; + case 20242: + break block10; + case 20243: + break block; + case 20244: + break block10; + case 20245: + break block; + case 20246: + break block10; + case 20247: + break block; + case 20248: + break block10; + case 20249: + break block; + case 20250: + break block10; + case 20251: + break block; + case 20252: + break block10; + case 20253: + break block; + case 20254: + break block10; + case 20255: + break block; + case 20256: + break block10; + case 20257: + break block; + case 20258: + break block10; + case 20259: + break block; + case 20260: + break block10; + case 20261: + break block; + case 20262: + break block10; + case 20263: + break block; + case 20264: + break block10; + case 20265: + break block; + case 20266: + break block10; + case 20267: + break block; + case 20268: + break block10; + case 20269: + break block; + case 20270: + break block10; + case 20271: + break block; + case 20272: + break block10; + case 20273: + break block; + case 20274: + break block10; + case 20275: + break block; + case 20276: + break block10; + case 20277: + break block; + case 20278: + break block10; + case 20279: + break block; + case 20280: + break block10; + case 20281: + break block; + case 20282: + break block10; + case 20283: + break block; + case 20284: + break block10; + case 20285: + break block; + case 20286: + break block10; + case 20287: + break block; + case 20288: + break block10; + case 20289: + break block; + case 20290: + break block10; + case 20291: + break block; + case 20292: + break block10; + case 20293: + break block; + case 20294: + break block10; + case 20295: + break block; + case 20296: + break block10; + case 20297: + break block; + case 20298: + break block10; + case 20299: + break block; + case 20300: + break block10; + case 20301: + break block; + case 20302: + break block10; + case 20303: + break block; + case 20304: + break block10; + case 20305: + break block; + case 20306: + break block10; + case 20307: + break block; + case 20308: + break block10; + case 20309: + break block; + case 20310: + break block10; + case 20311: + break block; + case 20312: + break block10; + case 20313: + break block; + case 20314: + break block10; + case 20315: + break block; + case 20316: + break block10; + case 20317: + break block; + case 20318: + break block10; + case 20319: + break block; + case 20320: + break block10; + case 20321: + break block; + case 20322: + break block10; + case 20323: + break block; + case 20324: + break block10; + case 20325: + break block; + case 20326: + break block10; + case 20327: + break block; + case 20328: + break block10; + case 20329: + break block; + case 20330: + break block10; + case 20331: + break block; + case 20332: + break block10; + case 20333: + break block; + case 20334: + break block10; + case 20335: + break block; + case 20336: + break block10; + case 20337: + break block; + case 20338: + break block10; + case 20339: + break block; + case 20340: + break block10; + case 20341: + break block; + case 20342: + break block10; + case 20343: + break block; + case 20344: + break block10; + case 20345: + break block; + case 20346: + break block10; + case 20347: + break block; + case 20348: + break block10; + case 20349: + break block; + case 20350: + break block10; + case 20351: + break block; + case 20352: + break block10; + case 20353: + break block; + case 20354: + break block10; + case 20355: + break block; + case 20356: + break block10; + case 20357: + break block; + case 20358: + break block10; + case 20359: + break block; + case 20360: + break block10; + case 20361: + break block; + case 20362: + break block10; + case 20363: + break block; + case 20364: + break block10; + case 20365: + break block; + case 20366: + break block10; + case 20367: + break block; + case 20368: + break block10; + case 20369: + break block; + case 20370: + break block10; + case 20371: + break block; + case 20372: + break block10; + case 20373: + break block; + case 20374: + break block10; + case 20375: + break block; + case 20376: + break block10; + case 20377: + break block; + case 20378: + break block10; + case 20379: + break block; + case 20380: + break block10; + case 20381: + break block; + case 20382: + break block10; + case 20383: + break block; + case 20384: + break block10; + case 20385: + break block; + case 20386: + break block10; + case 20387: + break block; + case 20388: + break block10; + case 20389: + break block; + case 20390: + break block10; + case 20391: + break block; + case 20392: + break block10; + case 20393: + break block; + case 20394: + break block10; + case 20395: + break block; + case 20396: + break block10; + case 20397: + break block; + case 20398: + break block10; + case 20399: + break block; + case 20400: + break block10; + case 20401: + break block; + case 20402: + break block10; + case 20403: + break block; + case 20404: + break block10; + case 20405: + break block; + case 20406: + break block10; + case 20407: + break block; + case 20408: + break block10; + case 20409: + break block; + case 20410: + break block10; + case 20411: + break block; + case 20412: + break block10; + case 20413: + break block; + case 20414: + break block10; + case 20415: + break block; + case 20416: + break block10; + case 20417: + break block; + case 20418: + break block10; + case 20419: + break block; + case 20420: + break block10; + case 20421: + break block; + case 20422: + break block10; + case 20423: + break block; + case 20424: + break block10; + case 20425: + break block; + case 20426: + break block10; + case 20427: + break block; + case 20428: + break block10; + case 20429: + break block; + case 20430: + break block10; + case 20431: + break block; + case 20432: + break block10; + case 20433: + break block; + case 20434: + break block10; + case 20435: + break block; + case 20436: + break block10; + case 20437: + break block; + case 20438: + break block10; + case 20439: + break block; + case 20440: + break block10; + case 20441: + break block; + case 20442: + break block10; + case 20443: + break block; + case 20444: + break block10; + case 20445: + break block; + case 20446: + break block10; + case 20447: + break block; + case 20448: + break block10; + case 20449: + break block; + case 20450: + break block10; + case 20451: + break block; + case 20452: + break block10; + case 20453: + break block; + case 20454: + break block10; + case 20455: + break block; + case 20456: + break block10; + case 20457: + break block; + case 20458: + break block10; + case 20459: + break block; + case 20460: + break block10; + case 20461: + break block; + case 20462: + break block10; + case 20463: + break block; + case 20464: + break block10; + case 20465: + break block; + case 20466: + break block10; + case 20467: + break block; + case 20468: + break block10; + case 20469: + break block; + case 20470: + break block10; + case 20471: + break block; + case 20472: + break block10; + case 20473: + break block; + case 20474: + break block10; + case 20475: + break block; + case 20476: + break block10; + case 20477: + break block; + case 20478: + break block10; + case 20479: + break block; + case 20480: + break block10; + case 20481: + break block; + case 20482: + break block10; + case 20483: + break block; + case 20484: + break block10; + case 20485: + break block; + case 20486: + break block10; + case 20487: + break block; + case 20488: + break block10; + case 20489: + break block; + case 20490: + break block10; + case 20491: + break block; + case 20492: + break block10; + case 20493: + break block; + case 20494: + break block10; + case 20495: + break block; + case 20496: + break block10; + case 20497: + break block; + case 20498: + break block10; + case 20499: + break block; + case 20500: + break block10; + case 20501: + break block; + case 20502: + break block10; + case 20503: + break block; + case 20504: + break block10; + case 20505: + break block; + case 20506: + break block10; + case 20507: + break block; + case 20508: + break block10; + case 20509: + break block; + case 20510: + break block10; + case 20511: + break block; + case 20512: + break block10; + case 20513: + break block; + case 20514: + break block10; + case 20515: + break block; + case 20516: + break block10; + case 20517: + break block; + case 20518: + break block10; + case 20519: + break block; + case 20520: + break block10; + case 20521: + break block; + case 20522: + break block10; + case 20523: + break block; + case 20524: + break block10; + case 20525: + break block; + case 20526: + break block10; + case 20527: + break block; + case 20528: + break block10; + case 20529: + break block; + case 20530: + break block10; + case 20531: + break block; + case 20532: + break block10; + case 20533: + break block; + case 20534: + break block10; + case 20535: + break block; + case 20536: + break block10; + case 20537: + break block; + case 20538: + break block10; + case 20539: + break block; + case 20540: + break block10; + case 20541: + break block; + case 20542: + break block10; + case 20543: + break block; + case 20544: + break block10; + case 20545: + break block; + case 20546: + break block10; + case 20547: + break block; + case 20548: + break block10; + case 20549: + break block; + case 20550: + break block10; + case 20551: + break block; + case 20552: + break block10; + case 20553: + break block; + case 20554: + break block10; + case 20555: + break block; + case 20556: + break block10; + case 20557: + break block; + case 20558: + break block10; + case 20559: + break block; + case 20560: + break block10; + case 20561: + break block; + case 20562: + break block10; + case 20563: + break block; + case 20564: + break block10; + case 20565: + break block; + case 20566: + break block10; + case 20567: + break block; + case 20568: + break block10; + case 20569: + break block; + case 20570: + break block10; + case 20571: + break block; + case 20572: + break block10; + case 20573: + break block; + case 20574: + break block10; + case 20575: + break block; + case 20576: + break block10; + case 20577: + break block; + case 20578: + break block10; + case 20579: + break block; + case 20580: + break block10; + case 20581: + break block; + case 20582: + break block10; + case 20583: + break block; + case 20584: + break block10; + case 20585: + break block; + case 20586: + break block10; + case 20587: + break block; + case 20588: + break block10; + case 20589: + break block; + case 20590: + break block10; + case 20591: + break block; + case 20592: + break block10; + case 20593: + break block; + case 20594: + break block10; + case 20595: + break block; + case 20596: + break block10; + case 20597: + break block; + case 20598: + break block10; + case 20599: + break block; + case 20600: + break block10; + case 20601: + break block; + case 20602: + break block10; + case 20603: + break block; + case 20604: + break block10; + case 20605: + break block; + case 20606: + break block10; + case 20607: + break block; + case 20608: + break block10; + case 20609: + break block; + case 20610: + break block10; + case 20611: + break block; + case 20612: + break block10; + case 20613: + break block; + case 20614: + break block10; + case 20615: + break block; + case 20616: + break block10; + case 20617: + break block; + case 20618: + break block10; + case 20619: + break block; + case 20620: + break block10; + case 20621: + break block; + case 20622: + break block10; + case 20623: + break block; + case 20624: + break block10; + case 20625: + break block; + case 20626: + break block10; + case 20627: + break block; + case 20628: + break block10; + case 20629: + break block; + case 20630: + break block10; + case 20631: + break block; + case 20632: + break block10; + case 20633: + break block; + case 20634: + break block10; + case 20635: + break block; + case 20636: + break block10; + case 20637: + break block; + case 20638: + break block10; + case 20639: + break block; + case 20640: + break block10; + case 20641: + break block; + case 20642: + break block10; + case 20643: + break block; + case 20644: + break block10; + case 20645: + break block; + case 20646: + break block10; + case 20647: + break block; + case 20648: + break block10; + case 20649: + break block; + case 20650: + break block10; + case 20651: + break block; + case 20652: + break block10; + case 20653: + break block; + case 20654: + break block10; + case 20655: + break block; + case 20656: + break block10; + case 20657: + break block; + case 20658: + break block10; + case 20659: + break block; + case 20660: + break block10; + case 20661: + break block; + case 20662: + break block10; + case 20663: + break block; + case 20664: + break block10; + case 20665: + break block; + case 20666: + break block10; + case 20667: + break block; + case 20668: + break block10; + case 20669: + break block; + case 20670: + break block10; + case 20671: + break block; + case 20672: + break block10; + case 20673: + break block; + case 20674: + break block10; + case 20675: + break block; + case 20676: + break block10; + case 20677: + break block; + case 20678: + break block10; + case 20679: + break block; + case 20680: + break block10; + case 20681: + break block; + case 20682: + break block10; + case 20683: + break block; + case 20684: + break block10; + case 20685: + break block; + case 20686: + break block10; + case 20687: + break block; + case 20688: + break block10; + case 20689: + break block; + case 20690: + break block10; + case 20691: + break block; + case 20692: + break block10; + case 20693: + break block; + case 20694: + break block10; + case 20695: + break block; + case 20696: + break block10; + case 20697: + break block; + case 20698: + break block10; + case 20699: + break block; + case 20700: + break block10; + case 20701: + break block; + case 20702: + break block10; + case 20703: + break block; + case 20704: + break block10; + case 20705: + break block; + case 20706: + break block10; + case 20707: + break block; + case 20708: + break block10; + case 20709: + break block; + case 20710: + break block10; + case 20711: + break block; + case 20712: + break block10; + case 20713: + break block; + case 20714: + break block10; + case 20715: + break block; + case 20716: + break block10; + case 20717: + break block; + case 20718: + break block10; + case 20719: + break block; + case 20720: + break block10; + case 20721: + break block; + case 20722: + break block10; + case 20723: + break block; + case 20724: + break block10; + case 20725: + break block; + case 20726: + break block10; + case 20727: + break block; + case 20728: + break block10; + case 20729: + break block; + case 20730: + break block10; + case 20731: + break block; + case 20732: + break block10; + case 20733: + break block; + case 20734: + break block10; + case 20735: + break block; + case 20736: + break block10; + case 20737: + break block; + case 20738: + break block10; + case 20739: + break block; + case 20740: + break block10; + case 20741: + break block; + case 20742: + break block10; + case 20743: + break block; + case 20744: + break block10; + case 20745: + break block; + case 20746: + break block10; + case 20747: + break block; + case 20748: + break block10; + case 20749: + break block; + case 20750: + break block10; + case 20751: + break block; + case 20752: + break block10; + case 20753: + break block; + case 20754: + break block10; + case 20755: + break block; + case 20756: + break block10; + case 20757: + break block; + case 20758: + break block10; + case 20759: + break block; + case 20760: + break block10; + case 20761: + break block; + case 20762: + break block10; + case 20763: + break block; + case 20764: + break block10; + case 20765: + break block; + case 20766: + break block10; + case 20767: + break block; + case 20768: + break block10; + case 20769: + break block; + case 20770: + break block10; + case 20771: + break block; + case 20772: + break block10; + case 20773: + break block; + case 20774: + break block10; + case 20775: + break block; + case 20776: + break block10; + case 20777: + break block; + case 20778: + break block10; + case 20779: + break block; + case 20780: + break block10; + case 20781: + break block; + case 20782: + break block10; + case 20783: + break block; + case 20784: + break block10; + case 20785: + break block; + case 20786: + break block10; + case 20787: + break block; + case 20788: + break block10; + case 20789: + break block; + case 20790: + break block10; + case 20791: + break block; + case 20792: + break block10; + case 20793: + break block; + case 20794: + break block10; + case 20795: + break block; + case 20796: + break block10; + case 20797: + break block; + case 20798: + break block10; + case 20799: + break block; + case 20800: + break block10; + case 20801: + break block; + case 20802: + break block10; + case 20803: + break block; + case 20804: + break block10; + case 20805: + break block; + case 20806: + break block10; + case 20807: + break block; + case 20808: + break block10; + case 20809: + break block; + case 20810: + break block10; + case 20811: + break block; + case 20812: + break block10; + case 20813: + break block; + case 20814: + break block10; + case 20815: + break block; + case 20816: + break block10; + case 20817: + break block; + case 20818: + break block10; + case 20819: + break block; + case 20820: + break block10; + case 20821: + break block; + case 20822: + break block10; + case 20823: + break block; + case 20824: + break block10; + case 20825: + break block; + case 20826: + break block10; + case 20827: + break block; + case 20828: + break block10; + case 20829: + break block; + case 20830: + break block10; + case 20831: + break block; + case 20832: + break block10; + case 20833: + break block; + case 20834: + break block10; + case 20835: + break block; + case 20836: + break block10; + case 20837: + break block; + case 20838: + break block10; + case 20839: + break block; + case 20840: + break block10; + case 20841: + break block; + case 20842: + break block10; + case 20843: + break block; + case 20844: + break block10; + case 20845: + break block; + case 20846: + break block10; + case 20847: + break block; + case 20848: + break block10; + case 20849: + break block; + case 20850: + break block10; + case 20851: + break block; + case 20852: + break block10; + case 20853: + break block; + case 20854: + break block10; + case 20855: + break block; + case 20856: + break block10; + case 20857: + break block; + case 20858: + break block10; + case 20859: + break block; + case 20860: + break block10; + case 20861: + break block; + case 20862: + break block10; + case 20863: + break block; + case 20864: + break block10; + case 20865: + break block; + case 20866: + break block10; + case 20867: + break block; + case 20868: + break block10; + case 20869: + break block; + case 20870: + break block10; + case 20871: + break block; + case 20872: + break block10; + case 20873: + break block; + case 20874: + break block10; + case 20875: + break block; + case 20876: + break block10; + case 20877: + break block; + case 20878: + break block10; + case 20879: + break block; + case 20880: + break block10; + case 20881: + break block; + case 20882: + break block10; + case 20883: + break block; + case 20884: + break block10; + case 20885: + break block; + case 20886: + break block10; + case 20887: + break block; + case 20888: + break block10; + case 20889: + break block; + case 20890: + break block10; + case 20891: + break block; + case 20892: + break block10; + case 20893: + break block; + case 20894: + break block10; + case 20895: + break block; + case 20896: + break block10; + case 20897: + break block; + case 20898: + break block10; + case 20899: + break block; + case 20900: + break block10; + case 20901: + break block; + case 20902: + break block10; + case 20903: + break block; + case 20904: + break block10; + case 20905: + break block; + case 20906: + break block10; + case 20907: + break block; + case 20908: + break block10; + case 20909: + break block; + case 20910: + break block10; + case 20911: + break block; + case 20912: + break block10; + case 20913: + break block; + case 20914: + break block10; + case 20915: + break block; + case 20916: + break block10; + case 20917: + break block; + case 20918: + break block10; + case 20919: + break block; + case 20920: + break block10; + case 20921: + break block; + case 20922: + break block10; + case 20923: + break block; + case 20924: + break block10; + case 20925: + break block; + case 20926: + break block10; + case 20927: + break block; + case 20928: + break block10; + case 20929: + break block; + case 20930: + break block10; + case 20931: + break block; + case 20932: + break block10; + case 20933: + break block; + case 20934: + break block10; + case 20935: + break block; + case 20936: + break block10; + case 20937: + break block; + case 20938: + break block10; + case 20939: + break block; + case 20940: + break block10; + case 20941: + break block; + case 20942: + break block10; + case 20943: + break block; + case 20944: + break block10; + case 20945: + break block; + case 20946: + break block10; + case 20947: + break block; + case 20948: + break block10; + case 20949: + break block; + case 20950: + break block10; + case 20951: + break block; + case 20952: + break block10; + case 20953: + break block; + case 20954: + break block10; + case 20955: + break block; + case 20956: + break block10; + case 20957: + break block; + case 20958: + break block10; + case 20959: + break block; + case 20960: + break block10; + case 20961: + break block; + case 20962: + break block10; + case 20963: + break block; + case 20964: + break block10; + case 20965: + break block; + case 20966: + break block10; + case 20967: + break block; + case 20968: + break block10; + case 20969: + break block; + case 20970: + break block10; + case 20971: + break block; + case 20972: + break block10; + case 20973: + break block; + case 20974: + break block10; + case 20975: + break block; + case 20976: + break block10; + case 20977: + break block; + case 20978: + break block10; + case 20979: + break block; + case 20980: + break block10; + case 20981: + break block; + case 20982: + break block10; + case 20983: + break block; + case 20984: + break block10; + case 20985: + break block; + case 20986: + break block10; + case 20987: + break block; + case 20988: + break block10; + case 20989: + break block; + case 20990: + break block10; + case 20991: + break block; + case 20992: + break block10; + case 20993: + break block; + case 20994: + break block10; + case 20995: + break block; + case 20996: + break block10; + case 20997: + break block; + case 20998: + break block10; + case 20999: + break block; + case 21e3: + break block10; + case 21001: + break block; + case 21002: + break block10; + case 21003: + break block; + case 21004: + break block10; + case 21005: + break block; + case 21006: + break block10; + case 21007: + break block; + case 21008: + break block10; + case 21009: + break block; + case 21010: + break block10; + case 21011: + break block; + case 21012: + break block10; + case 21013: + break block; + case 21014: + break block10; + case 21015: + break block; + case 21016: + break block10; + case 21017: + break block; + case 21018: + break block10; + case 21019: + break block; + case 21020: + break block10; + case 21021: + break block; + case 21022: + break block10; + case 21023: + break block; + case 21024: + break block10; + case 21025: + break block; + case 21026: + break block10; + case 21027: + break block; + case 21028: + break block10; + case 21029: + break block; + case 21030: + break block10; + case 21031: + break block; + case 21032: + break block10; + case 21033: + break block; + case 21034: + break block10; + case 21035: + break block; + case 21036: + break block10; + case 21037: + break block; + case 21038: + break block10; + case 21039: + break block; + case 21040: + break block10; + case 21041: + break block; + case 21042: + break block10; + case 21043: + break block; + case 21044: + break block10; + case 21045: + break block; + case 21046: + break block10; + case 21047: + break block; + case 21048: + break block10; + case 21049: + break block; + case 21050: + break block10; + case 21051: + break block; + case 21052: + break block10; + case 21053: + break block; + case 21054: + break block10; + case 21055: + break block; + case 21056: + break block10; + case 21057: + break block; + case 21058: + break block10; + case 21059: + break block; + case 21060: + break block10; + case 21061: + break block; + case 21062: + break block10; + case 21063: + break block; + case 21064: + break block10; + case 21065: + break block; + case 21066: + break block10; + case 21067: + break block; + case 21068: + break block10; + case 21069: + break block; + case 21070: + break block10; + case 21071: + break block; + case 21072: + break block10; + case 21073: + break block; + case 21074: + break block10; + case 21075: + break block; + case 21076: + break block10; + case 21077: + break block; + case 21078: + break block10; + case 21079: + break block; + case 21080: + break block10; + case 21081: + break block; + case 21082: + break block10; + case 21083: + break block; + case 21084: + break block10; + case 21085: + break block; + case 21086: + break block10; + case 21087: + break block; + case 21088: + break block10; + case 21089: + break block; + case 21090: + break block10; + case 21091: + break block; + case 21092: + break block10; + case 21093: + break block; + case 21094: + break block10; + case 21095: + break block; + case 21096: + break block10; + case 21097: + break block; + case 21098: + break block10; + case 21099: + break block; + case 21100: + break block10; + case 21101: + break block; + case 21102: + break block10; + case 21103: + break block; + case 21104: + break block10; + case 21105: + break block; + case 21106: + break block10; + case 21107: + break block; + case 21108: + break block10; + case 21109: + break block; + case 21110: + break block10; + case 21111: + break block; + case 21112: + break block10; + case 21113: + break block; + case 21114: + break block10; + case 21115: + break block; + case 21116: + break block10; + case 21117: + break block; + case 21118: + break block10; + case 21119: + break block; + case 21120: + break block10; + case 21121: + break block; + case 21122: + break block10; + case 21123: + break block; + case 21124: + break block10; + case 21125: + break block; + case 21126: + break block10; + case 21127: + break block; + case 21128: + break block10; + case 21129: + break block; + case 21130: + break block10; + case 21131: + break block; + case 21132: + break block10; + case 21133: + break block; + case 21134: + break block10; + case 21135: + break block; + case 21136: + break block10; + case 21137: + break block; + case 21138: + break block10; + case 21139: + break block; + case 21140: + break block10; + case 21141: + break block; + case 21142: + break block10; + case 21143: + break block; + case 21144: + break block10; + case 21145: + break block; + case 21146: + break block10; + case 21147: + break block; + case 21148: + break block10; + case 21149: + break block; + case 21150: + break block10; + case 21151: + break block; + case 21152: + break block10; + case 21153: + break block; + case 21154: + break block10; + case 21155: + break block; + case 21156: + break block10; + case 21157: + break block; + case 21158: + break block10; + case 21159: + break block; + case 21160: + break block10; + case 21161: + break block; + case 21162: + break block10; + case 21163: + break block; + case 21164: + break block10; + case 21165: + break block; + case 21166: + break block10; + case 21167: + break block; + case 21168: + break block10; + case 21169: + break block; + case 21170: + break block10; + case 21171: + break block; + case 21172: + break block10; + case 21173: + break block; + case 21174: + break block10; + case 21175: + break block; + case 21176: + break block10; + case 21177: + break block; + case 21178: + break block10; + case 21179: + break block; + case 21180: + break block10; + case 21181: + break block; + case 21182: + break block10; + case 21183: + break block; + case 21184: + break block10; + case 21185: + break block; + case 21186: + break block10; + case 21187: + break block; + case 21188: + break block10; + case 21189: + break block; + case 21190: + break block10; + case 21191: + break block; + case 21192: + break block10; + case 21193: + break block; + case 21194: + break block10; + case 21195: + break block; + case 21196: + break block10; + case 21197: + break block; + case 21198: + break block10; + case 21199: + break block; + case 21200: + break block10; + case 21201: + break block; + case 21202: + break block10; + case 21203: + break block; + case 21204: + break block10; + case 21205: + break block; + case 21206: + break block10; + case 21207: + break block; + case 21208: + break block10; + case 21209: + break block; + case 21210: + break block10; + case 21211: + break block; + case 21212: + break block10; + case 21213: + break block; + case 21214: + break block10; + case 21215: + break block; + case 21216: + break block10; + case 21217: + break block; + case 21218: + break block10; + case 21219: + break block; + case 21220: + break block10; + case 21221: + break block; + case 21222: + break block10; + case 21223: + break block; + case 21224: + break block10; + case 21225: + break block; + case 21226: + break block10; + case 21227: + break block; + case 21228: + break block10; + case 21229: + break block; + case 21230: + break block10; + case 21231: + break block; + case 21232: + break block10; + case 21233: + break block; + case 21234: + break block10; + case 21235: + break block; + case 21236: + break block10; + case 21237: + break block; + case 21238: + break block10; + case 21239: + break block; + case 21240: + break block10; + case 21241: + break block; + case 21242: + break block10; + case 21243: + break block; + case 21244: + break block10; + case 21245: + break block; + case 21246: + break block10; + case 21247: + break block; + case 21248: + break block10; + case 21249: + break block; + case 21250: + break block10; + case 21251: + break block; + case 21252: + break block10; + case 21253: + break block; + case 21254: + break block10; + case 21255: + break block; + case 21256: + break block10; + case 21257: + break block; + case 21258: + break block10; + case 21259: + break block; + case 21260: + break block10; + case 21261: + break block; + case 21262: + break block10; + case 21263: + break block; + case 21264: + break block10; + case 21265: + break block; + case 21266: + break block10; + case 21267: + break block; + case 21268: + break block10; + case 21269: + break block; + case 21270: + break block10; + case 21271: + break block; + case 21272: + break block10; + case 21273: + break block; + case 21274: + break block10; + case 21275: + break block; + case 21276: + break block10; + case 21277: + break block; + case 21278: + break block10; + case 21279: + break block; + case 21280: + break block10; + case 21281: + break block; + case 21282: + break block10; + case 21283: + break block; + case 21284: + break block10; + case 21285: + break block; + case 21286: + break block10; + case 21287: + break block; + case 21288: + break block10; + case 21289: + break block; + case 21290: + break block10; + case 21291: + break block; + case 21292: + break block10; + case 21293: + break block; + case 21294: + break block10; + case 21295: + break block; + case 21296: + break block10; + case 21297: + break block; + case 21298: + break block10; + case 21299: + break block; + case 21300: + break block10; + case 21301: + break block; + case 21302: + break block10; + case 21303: + break block; + case 21304: + break block10; + case 21305: + break block; + case 21306: + break block10; + case 21307: + break block; + case 21308: + break block10; + case 21309: + break block; + case 21310: + break block10; + case 21311: + break block; + case 21312: + break block10; + case 21313: + break block; + case 21314: + break block10; + case 21315: + break block; + case 21316: + break block10; + case 21317: + break block; + case 21318: + break block10; + case 21319: + break block; + case 21320: + break block10; + case 21321: + break block; + case 21322: + break block10; + case 21323: + break block; + case 21324: + break block10; + case 21325: + break block; + case 21326: + break block10; + case 21327: + break block; + case 21328: + break block10; + case 21329: + break block; + case 21330: + break block10; + case 21331: + break block; + case 21332: + break block10; + case 21333: + break block; + case 21334: + break block10; + case 21335: + break block; + case 21336: + break block10; + case 21337: + break block; + case 21338: + break block10; + case 21339: + break block; + case 21340: + break block10; + case 21341: + break block; + case 21342: + break block10; + case 21343: + break block; + case 21344: + break block10; + case 21345: + break block; + case 21346: + break block10; + case 21347: + break block; + case 21348: + break block10; + case 21349: + break block; + case 21350: + break block10; + case 21351: + break block; + case 21352: + break block10; + case 21353: + break block; + case 21354: + break block10; + case 21355: + break block; + case 21356: + break block10; + case 21357: + break block; + case 21358: + break block10; + case 21359: + break block; + case 21360: + break block10; + case 21361: + break block; + case 21362: + break block10; + case 21363: + break block; + case 21364: + break block10; + case 21365: + break block; + case 21366: + break block10; + case 21367: + break block; + case 21368: + break block10; + case 21369: + break block; + case 21370: + break block10; + case 21371: + break block; + case 21372: + break block10; + case 21373: + break block; + case 21374: + break block10; + case 21375: + break block; + case 21376: + break block10; + case 21377: + break block; + case 21378: + break block10; + case 21379: + break block; + case 21380: + break block10; + case 21381: + break block; + case 21382: + break block10; + case 21383: + break block; + case 21384: + break block10; + case 21385: + break block; + case 21386: + break block10; + case 21387: + break block; + case 21388: + break block10; + case 21389: + break block; + case 21390: + break block10; + case 21391: + break block; + case 21392: + break block10; + case 21393: + break block; + case 21394: + break block10; + case 21395: + break block; + case 21396: + break block10; + case 21397: + break block; + case 21398: + break block10; + case 21399: + break block; + case 21400: + break block10; + case 21401: + break block; + case 21402: + break block10; + case 21403: + break block; + case 21404: + break block10; + case 21405: + break block; + case 21406: + break block10; + case 21407: + break block; + case 21408: + break block10; + case 21409: + break block; + case 21410: + break block10; + case 21411: + break block; + case 21412: + break block10; + case 21413: + break block; + case 21414: + break block10; + case 21415: + break block; + case 21416: + break block10; + case 21417: + break block; + case 21418: + break block10; + case 21419: + break block; + case 21420: + break block10; + case 21421: + break block; + case 21422: + break block10; + case 21423: + break block; + case 21424: + break block10; + case 21425: + break block; + case 21426: + break block10; + case 21427: + break block; + case 21428: + break block10; + case 21429: + break block; + case 21430: + break block10; + case 21431: + break block; + case 21432: + break block10; + case 21433: + break block; + case 21434: + break block10; + case 21435: + break block; + case 21436: + break block10; + case 21437: + break block; + case 21438: + break block10; + case 21439: + break block; + case 21440: + break block10; + case 21441: + break block; + case 21442: + break block10; + case 21443: + break block; + case 21444: + break block10; + case 21445: + break block; + case 21446: + break block10; + case 21447: + break block; + case 21448: + break block10; + case 21449: + break block; + case 21450: + break block10; + case 21451: + break block; + case 21452: + break block10; + case 21453: + break block; + case 21454: + break block10; + case 21455: + break block; + case 21456: + break block10; + case 21457: + break block; + case 21458: + break block10; + case 21459: + break block; + case 21460: + break block10; + case 21461: + break block; + case 21462: + break block10; + case 21463: + break block; + case 21464: + break block10; + case 21465: + break block; + case 21466: + break block10; + case 21467: + break block; + case 21468: + break block10; + case 21469: + break block; + case 21470: + break block10; + case 21471: + break block; + case 21472: + break block10; + case 21473: + break block; + case 21474: + break block10; + case 21475: + break block; + case 21476: + break block10; + case 21477: + break block; + case 21478: + break block10; + case 21479: + break block; + case 21480: + break block10; + case 21481: + break block; + case 21482: + break block10; + case 21483: + break block; + case 21484: + break block10; + case 21485: + break block; + case 21486: + break block10; + case 21487: + break block; + case 21488: + break block10; + case 21489: + break block; + case 21490: + break block10; + case 21491: + break block; + case 21492: + break block10; + case 21493: + break block; + case 21494: + break block10; + case 21495: + break block; + case 21496: + break block10; + case 21497: + break block; + case 21498: + break block10; + case 21499: + break block; + case 21500: + break block10; + case 21501: + break block; + case 21502: + break block10; + case 21503: + break block; + case 21504: + break block10; + case 21505: + break block; + case 21506: + break block10; + case 21507: + break block; + case 21508: + break block10; + case 21509: + break block; + case 21510: + break block10; + case 21511: + break block; + case 21512: + break block10; + case 21513: + break block; + case 21514: + break block10; + case 21515: + break block; + case 21516: + break block10; + case 21517: + break block; + case 21518: + break block10; + case 21519: + break block; + case 21520: + break block10; + case 21521: + break block; + case 21522: + break block10; + case 21523: + break block; + case 21524: + break block10; + case 21525: + break block; + case 21526: + break block10; + case 21527: + break block; + case 21528: + break block10; + case 21529: + break block; + case 21530: + break block10; + case 21531: + break block; + case 21532: + break block10; + case 21533: + break block; + case 21534: + break block10; + case 21535: + break block; + case 21536: + break block10; + case 21537: + break block; + case 21538: + break block10; + case 21539: + break block; + case 21540: + break block10; + case 21541: + break block; + case 21542: + break block10; + case 21543: + break block; + case 21544: + break block10; + case 21545: + break block; + case 21546: + break block10; + case 21547: + break block; + case 21548: + break block10; + case 21549: + break block; + case 21550: + break block10; + case 21551: + break block; + case 21552: + break block10; + case 21553: + break block; + case 21554: + break block10; + case 21555: + break block; + case 21556: + break block10; + case 21557: + break block; + case 21558: + break block10; + case 21559: + break block; + case 21560: + break block10; + case 21561: + break block; + case 21562: + break block10; + case 21563: + break block; + case 21564: + break block10; + case 21565: + break block; + case 21566: + break block10; + case 21567: + break block; + case 21568: + break block10; + case 21569: + break block; + case 21570: + break block10; + case 21571: + break block; + case 21572: + break block10; + case 21573: + break block; + case 21574: + break block10; + case 21575: + break block; + case 21576: + break block10; + case 21577: + break block; + case 21578: + break block10; + case 21579: + break block; + case 21580: + break block10; + case 21581: + break block; + case 21582: + break block10; + case 21583: + break block; + case 21584: + break block10; + case 21585: + break block; + case 21586: + break block10; + case 21587: + break block; + case 21588: + break block10; + case 21589: + break block; + case 21590: + break block10; + case 21591: + break block; + case 21592: + break block10; + case 21593: + break block; + case 21594: + break block10; + case 21595: + break block; + case 21596: + break block10; + case 21597: + break block; + case 21598: + break block10; + case 21599: + break block; + case 21600: + break block10; + case 21601: + break block; + case 21602: + break block10; + case 21603: + break block; + case 21604: + break block10; + case 21605: + break block; + case 21606: + break block10; + case 21607: + break block; + case 21608: + break block10; + case 21609: + break block; + case 21610: + break block10; + case 21611: + break block; + case 21612: + break block10; + case 21613: + break block; + case 21614: + break block10; + case 21615: + break block; + case 21616: + break block10; + case 21617: + break block; + case 21618: + break block10; + case 21619: + break block; + case 21620: + break block10; + case 21621: + break block; + case 21622: + break block10; + case 21623: + break block; + case 21624: + break block10; + case 21625: + break block; + case 21626: + break block10; + case 21627: + break block; + case 21628: + break block10; + case 21629: + break block; + case 21630: + break block10; + case 21631: + break block; + case 21632: + break block10; + case 21633: + break block; + case 21634: + break block10; + case 21635: + break block; + case 21636: + break block10; + case 21637: + break block; + case 21638: + break block10; + case 21639: + break block; + case 21640: + break block10; + case 21641: + break block; + case 21642: + break block10; + case 21643: + break block; + case 21644: + break block10; + case 21645: + break block; + case 21646: + break block10; + case 21647: + break block; + case 21648: + break block10; + case 21649: + break block; + case 21650: + break block10; + case 21651: + break block; + case 21652: + break block10; + case 21653: + break block; + case 21654: + break block10; + case 21655: + break block; + case 21656: + break block10; + case 21657: + break block; + case 21658: + break block10; + case 21659: + break block; + case 21660: + break block10; + case 21661: + break block; + case 21662: + break block10; + case 21663: + break block; + case 21664: + break block10; + case 21665: + break block; + case 21666: + break block10; + case 21667: + break block; + case 21668: + break block10; + case 21669: + break block; + case 21670: + break block10; + case 21671: + break block; + case 21672: + break block10; + case 21673: + break block; + case 21674: + break block10; + case 21675: + break block; + case 21676: + break block10; + case 21677: + break block; + case 21678: + break block10; + case 21679: + break block; + case 21680: + break block10; + case 21681: + break block; + case 21682: + break block10; + case 21683: + break block; + case 21684: + break block10; + case 21685: + break block; + case 21686: + break block10; + case 21687: + break block; + case 21688: + break block10; + case 21689: + break block; + case 21690: + break block10; + case 21691: + break block; + case 21692: + break block10; + case 21693: + break block; + case 21694: + break block10; + case 21695: + break block; + case 21696: + break block10; + case 21697: + break block; + case 21698: + break block10; + case 21699: + break block; + case 21700: + break block10; + case 21701: + break block; + case 21702: + break block10; + case 21703: + break block; + case 21704: + break block10; + case 21705: + break block; + case 21706: + break block10; + case 21707: + break block; + case 21708: + break block10; + case 21709: + break block; + case 21710: + break block10; + case 21711: + break block; + case 21712: + break block10; + case 21713: + break block; + case 21714: + break block10; + case 21715: + break block; + case 21716: + break block10; + case 21717: + break block; + case 21718: + break block10; + case 21719: + break block; + case 21720: + break block10; + case 21721: + break block; + case 21722: + break block10; + case 21723: + break block; + case 21724: + break block10; + case 21725: + break block; + case 21726: + break block10; + case 21727: + break block; + case 21728: + break block10; + case 21729: + break block; + case 21730: + break block10; + case 21731: + break block; + case 21732: + break block10; + case 21733: + break block; + case 21734: + break block10; + case 21735: + break block; + case 21736: + break block10; + case 21737: + break block; + case 21738: + break block10; + case 21739: + break block; + case 21740: + break block10; + case 21741: + break block; + case 21742: + break block10; + case 21743: + break block; + case 21744: + break block10; + case 21745: + break block; + case 21746: + break block10; + case 21747: + break block; + case 21748: + break block10; + case 21749: + break block; + case 21750: + break block10; + case 21751: + break block; + case 21752: + break block10; + case 21753: + break block; + case 21754: + break block10; + case 21755: + break block; + case 21756: + break block10; + case 21757: + break block; + case 21758: + break block10; + case 21759: + break block; + case 21760: + break block10; + case 21761: + break block; + case 21762: + break block10; + case 21763: + break block; + case 21764: + break block10; + case 21765: + break block; + case 21766: + break block10; + case 21767: + break block; + case 21768: + break block10; + case 21769: + break block; + case 21770: + break block10; + case 21771: + break block; + case 21772: + break block10; + case 21773: + break block; + case 21774: + break block10; + case 21775: + break block; + case 21776: + break block10; + case 21777: + break block; + case 21778: + break block10; + case 21779: + break block; + case 21780: + break block10; + case 21781: + break block; + case 21782: + break block10; + case 21783: + break block; + case 21784: + break block10; + case 21785: + break block; + case 21786: + break block10; + case 21787: + break block; + case 21788: + break block10; + case 21789: + break block; + case 21790: + break block10; + case 21791: + break block; + case 21792: + break block10; + case 21793: + break block; + case 21794: + break block10; + case 21795: + break block; + case 21796: + break block10; + case 21797: + break block; + case 21798: + break block10; + case 21799: + break block; + case 21800: + break block10; + case 21801: + break block; + case 21802: + break block10; + case 21803: + break block; + case 21804: + break block10; + case 21805: + break block; + case 21806: + break block10; + case 21807: + break block; + case 21808: + break block10; + case 21809: + break block; + case 21810: + break block10; + case 21811: + break block; + case 21812: + break block10; + case 21813: + break block; + case 21814: + break block10; + case 21815: + break block; + case 21816: + break block10; + case 21817: + break block; + case 21818: + break block10; + case 21819: + break block; + case 21820: + break block10; + case 21821: + break block; + case 21822: + break block10; + case 21823: + break block; + case 21824: + break block10; + case 21825: + break block; + case 21826: + break block10; + case 21827: + break block; + case 21828: + break block10; + case 21829: + break block; + case 21830: + break block10; + case 21831: + break block; + case 21832: + break block10; + case 21833: + break block; + case 21834: + break block10; + case 21835: + break block; + case 21836: + break block10; + case 21837: + break block; + case 21838: + break block10; + case 21839: + break block; + case 21840: + break block10; + case 21841: + break block; + case 21842: + break block10; + case 21843: + break block; + case 21844: + break block10; + case 21845: + break block; + case 21846: + break block10; + case 21847: + break block; + case 21848: + break block10; + case 21849: + break block; + case 21850: + break block10; + case 21851: + break block; + case 21852: + break block10; + case 21853: + break block; + case 21854: + break block10; + case 21855: + break block; + case 21856: + break block10; + case 21857: + break block; + case 21858: + break block10; + case 21859: + break block; + case 21860: + break block10; + case 21861: + break block; + case 21862: + break block10; + case 21863: + break block; + case 21864: + break block10; + case 21865: + break block; + case 21866: + break block10; + case 21867: + break block; + case 21868: + break block10; + case 21869: + break block; + case 21870: + break block10; + case 21871: + break block; + case 21872: + break block10; + case 21873: + break block; + case 21874: + break block10; + case 21875: + break block; + case 21876: + break block10; + case 21877: + break block; + case 21878: + break block10; + case 21879: + break block; + case 21880: + break block10; + case 21881: + break block; + case 21882: + break block10; + case 21883: + break block; + case 21884: + break block10; + case 21885: + break block; + case 21886: + break block10; + case 21887: + break block; + case 21888: + break block10; + case 21889: + break block; + case 21890: + break block10; + case 21891: + break block; + case 21892: + break block10; + case 21893: + break block; + case 21894: + break block10; + case 21895: + break block; + case 21896: + break block10; + case 21897: + break block; + case 21898: + break block10; + case 21899: + break block; + case 21900: + break block10; + case 21901: + break block; + case 21902: + break block10; + case 21903: + break block; + case 21904: + break block10; + case 21905: + break block; + case 21906: + break block10; + case 21907: + break block; + case 21908: + break block10; + case 21909: + break block; + case 21910: + break block10; + case 21911: + break block; + case 21912: + break block10; + case 21913: + break block; + case 21914: + break block10; + case 21915: + break block; + case 21916: + break block10; + case 21917: + break block; + case 21918: + break block10; + case 21919: + break block; + case 21920: + break block10; + case 21921: + break block; + case 21922: + break block10; + case 21923: + break block; + case 21924: + break block10; + case 21925: + break block; + case 21926: + break block10; + case 21927: + break block; + case 21928: + break block10; + case 21929: + break block; + case 21930: + break block10; + case 21931: + break block; + case 21932: + break block10; + case 21933: + break block; + case 21934: + break block10; + case 21935: + break block; + case 21936: + break block10; + case 21937: + break block; + case 21938: + break block10; + case 21939: + break block; + case 21940: + break block10; + case 21941: + break block; + case 21942: + break block10; + case 21943: + break block; + case 21944: + break block10; + case 21945: + break block; + case 21946: + break block10; + case 21947: + break block; + case 21948: + break block10; + case 21949: + break block; + case 21950: + break block10; + case 21951: + break block; + case 21952: + break block10; + case 21953: + break block; + case 21954: + break block10; + case 21955: + break block; + case 21956: + break block10; + case 21957: + break block; + case 21958: + break block10; + case 21959: + break block; + case 21960: + break block10; + case 21961: + break block; + case 21962: + break block10; + case 21963: + break block; + case 21964: + break block10; + case 21965: + break block; + case 21966: + break block10; + case 21967: + break block; + case 21968: + break block10; + case 21969: + break block; + case 21970: + break block10; + case 21971: + break block; + case 21972: + break block10; + case 21973: + break block; + case 21974: + break block10; + case 21975: + break block; + case 21976: + break block10; + case 21977: + break block; + case 21978: + break block10; + case 21979: + break block; + case 21980: + break block10; + case 21981: + break block; + case 21982: + break block10; + case 21983: + break block; + case 21984: + break block10; + case 21985: + break block; + case 21986: + break block10; + case 21987: + break block; + case 21988: + break block10; + case 21989: + break block; + case 21990: + break block10; + case 21991: + break block; + case 21992: + break block10; + case 21993: + break block; + case 21994: + break block10; + case 21995: + break block; + case 21996: + break block10; + case 21997: + break block; + case 21998: + break block10; + case 21999: + break block; + case 22e3: + break block10; + case 22001: + break block; + case 22002: + break block10; + case 22003: + break block; + case 22004: + break block10; + case 22005: + break block; + case 22006: + break block10; + case 22007: + break block; + case 22008: + break block10; + case 22009: + break block; + case 22010: + break block10; + case 22011: + break block; + case 22012: + break block10; + case 22013: + break block; + case 22014: + break block10; + case 22015: + break block; + case 22016: + break block10; + case 22017: + break block; + case 22018: + break block10; + case 22019: + break block; + case 22020: + break block10; + case 22021: + break block; + case 22022: + break block10; + case 22023: + break block; + case 22024: + break block10; + case 22025: + break block; + case 22026: + break block10; + case 22027: + break block; + case 22028: + break block10; + case 22029: + break block; + case 22030: + break block10; + case 22031: + break block; + case 22032: + break block10; + case 22033: + break block; + case 22034: + break block10; + case 22035: + break block; + case 22036: + break block10; + case 22037: + break block; + case 22038: + break block10; + case 22039: + break block; + case 22040: + break block10; + case 22041: + break block; + case 22042: + break block10; + case 22043: + break block; + case 22044: + break block10; + case 22045: + break block; + case 22046: + break block10; + case 22047: + break block; + case 22048: + break block10; + case 22049: + break block; + case 22050: + break block10; + case 22051: + break block; + case 22052: + break block10; + case 22053: + break block; + case 22054: + break block10; + case 22055: + break block; + case 22056: + break block10; + case 22057: + break block; + case 22058: + break block10; + case 22059: + break block; + case 22060: + break block10; + case 22061: + break block; + case 22062: + break block10; + case 22063: + break block; + case 22064: + break block10; + case 22065: + break block; + case 22066: + break block10; + case 22067: + break block; + case 22068: + break block10; + case 22069: + break block; + case 22070: + break block10; + case 22071: + break block; + case 22072: + break block10; + case 22073: + break block; + case 22074: + break block10; + case 22075: + break block; + case 22076: + break block10; + case 22077: + break block; + case 22078: + break block10; + case 22079: + break block; + case 22080: + break block10; + case 22081: + break block; + case 22082: + break block10; + case 22083: + break block; + case 22084: + break block10; + case 22085: + break block; + case 22086: + break block10; + case 22087: + break block; + case 22088: + break block10; + case 22089: + break block; + case 22090: + break block10; + case 22091: + break block; + case 22092: + break block10; + case 22093: + break block; + case 22094: + break block10; + case 22095: + break block; + case 22096: + break block10; + case 22097: + break block; + case 22098: + break block10; + case 22099: + break block; + case 22100: + break block10; + case 22101: + break block; + case 22102: + break block10; + case 22103: + break block; + case 22104: + break block10; + case 22105: + break block; + case 22106: + break block10; + case 22107: + break block; + case 22108: + break block10; + case 22109: + break block; + case 22110: + break block10; + case 22111: + break block; + case 22112: + break block10; + case 22113: + break block; + case 22114: + break block10; + case 22115: + break block; + case 22116: + break block10; + case 22117: + break block; + case 22118: + break block10; + case 22119: + break block; + case 22120: + break block10; + case 22121: + break block; + case 22122: + break block10; + case 22123: + break block; + case 22124: + break block10; + case 22125: + break block; + case 22126: + break block10; + case 22127: + break block; + case 22128: + break block10; + case 22129: + break block; + case 22130: + break block10; + case 22131: + break block; + case 22132: + break block10; + case 22133: + break block; + case 22134: + break block10; + case 22135: + break block; + case 22136: + break block10; + case 22137: + break block; + case 22138: + break block10; + case 22139: + break block; + case 22140: + break block10; + case 22141: + break block; + case 22142: + break block10; + case 22143: + break block; + case 22144: + break block10; + case 22145: + break block; + case 22146: + break block10; + case 22147: + break block; + case 22148: + break block10; + case 22149: + break block; + case 22150: + break block10; + case 22151: + break block; + case 22152: + break block10; + case 22153: + break block; + case 22154: + break block10; + case 22155: + break block; + case 22156: + break block10; + case 22157: + break block; + case 22158: + break block10; + case 22159: + break block; + case 22160: + break block10; + case 22161: + break block; + case 22162: + break block10; + case 22163: + break block; + case 22164: + break block10; + case 22165: + break block; + case 22166: + break block10; + case 22167: + break block; + case 22168: + break block10; + case 22169: + break block; + case 22170: + break block10; + case 22171: + break block; + case 22172: + break block10; + case 22173: + break block; + case 22174: + break block10; + case 22175: + break block; + case 22176: + break block10; + case 22177: + break block; + case 22178: + break block10; + case 22179: + break block; + case 22180: + break block10; + case 22181: + break block; + case 22182: + break block10; + case 22183: + break block; + case 22184: + break block10; + case 22185: + break block; + case 22186: + break block10; + case 22187: + break block; + case 22188: + break block10; + case 22189: + break block; + case 22190: + break block10; + case 22191: + break block; + case 22192: + break block10; + case 22193: + break block; + case 22194: + break block10; + case 22195: + break block; + case 22196: + break block10; + case 22197: + break block; + case 22198: + break block10; + case 22199: + break block; + case 22200: + break block10; + case 22201: + break block; + case 22202: + break block10; + case 22203: + break block; + case 22204: + break block10; + case 22205: + break block; + case 22206: + break block10; + case 22207: + break block; + case 22208: + break block10; + case 22209: + break block; + case 22210: + break block10; + case 22211: + break block; + case 22212: + break block10; + case 22213: + break block; + case 22214: + break block10; + case 22215: + break block; + case 22216: + break block10; + case 22217: + break block; + case 22218: + break block10; + case 22219: + break block; + case 22220: + break block10; + case 22221: + break block; + case 22222: + break block10; + case 22223: + break block; + case 22224: + break block10; + case 22225: + break block; + case 22226: + break block10; + case 22227: + break block; + case 22228: + break block10; + case 22229: + break block; + case 22230: + break block10; + case 22231: + break block; + case 22232: + break block10; + case 22233: + break block; + case 22234: + break block10; + case 22235: + break block; + case 22236: + break block10; + case 22237: + break block; + case 22238: + break block10; + case 22239: + break block; + case 22240: + break block10; + case 22241: + break block; + case 22242: + break block10; + case 22243: + break block; + case 22244: + break block10; + case 22245: + break block; + case 22246: + break block10; + case 22247: + break block; + case 22248: + break block10; + case 22249: + break block; + case 22250: + break block10; + case 22251: + break block; + case 22252: + break block10; + case 22253: + break block; + case 22254: + break block10; + case 22255: + break block; + case 22256: + break block10; + case 22257: + break block; + case 22258: + break block10; + case 22259: + break block; + case 22260: + break block10; + case 22261: + break block; + case 22262: + break block10; + case 22263: + break block; + case 22264: + break block10; + case 22265: + break block; + case 22266: + break block10; + case 22267: + break block; + case 22268: + break block10; + case 22269: + break block; + case 22270: + break block10; + case 22271: + break block; + case 22272: + break block10; + case 22273: + break block; + case 22274: + break block10; + case 22275: + break block; + case 22276: + break block10; + case 22277: + break block; + case 22278: + break block10; + case 22279: + break block; + case 22280: + break block10; + case 22281: + break block; + case 22282: + break block10; + case 22283: + break block; + case 22284: + break block10; + case 22285: + break block; + case 22286: + break block10; + case 22287: + break block; + case 22288: + break block10; + case 22289: + break block; + case 22290: + break block10; + case 22291: + break block; + case 22292: + break block10; + case 22293: + break block; + case 22294: + break block10; + case 22295: + break block; + case 22296: + break block10; + case 22297: + break block; + case 22298: + break block10; + case 22299: + break block; + case 22300: + break block10; + case 22301: + break block; + case 22302: + break block10; + case 22303: + break block; + case 22304: + break block10; + case 22305: + break block; + case 22306: + break block10; + case 22307: + break block; + case 22308: + break block10; + case 22309: + break block; + case 22310: + break block10; + case 22311: + break block; + case 22312: + break block10; + case 22313: + break block; + case 22314: + break block10; + case 22315: + break block; + case 22316: + break block10; + case 22317: + break block; + case 22318: + break block10; + case 22319: + break block; + case 22320: + break block10; + case 22321: + break block; + case 22322: + break block10; + case 22323: + break block; + case 22324: + break block10; + case 22325: + break block; + case 22326: + break block10; + case 22327: + break block; + case 22328: + break block10; + case 22329: + break block; + case 22330: + break block10; + case 22331: + break block; + case 22332: + break block10; + case 22333: + break block; + case 22334: + break block10; + case 22335: + break block; + case 22336: + break block10; + case 22337: + break block; + case 22338: + break block10; + case 22339: + break block; + case 22340: + break block10; + case 22341: + break block; + case 22342: + break block10; + case 22343: + break block; + case 22344: + break block10; + case 22345: + break block; + case 22346: + break block10; + case 22347: + break block; + case 22348: + break block10; + case 22349: + break block; + case 22350: + break block10; + case 22351: + break block; + case 22352: + break block10; + case 22353: + break block; + case 22354: + break block10; + case 22355: + break block; + case 22356: + break block10; + case 22357: + break block; + case 22358: + break block10; + case 22359: + break block; + case 22360: + break block10; + case 22361: + break block; + case 22362: + break block10; + case 22363: + break block; + case 22364: + break block10; + case 22365: + break block; + case 22366: + break block10; + case 22367: + break block; + case 22368: + break block10; + case 22369: + break block; + case 22370: + break block10; + case 22371: + break block; + case 22372: + break block10; + case 22373: + break block; + case 22374: + break block10; + case 22375: + break block; + case 22376: + break block10; + case 22377: + break block; + case 22378: + break block10; + case 22379: + break block; + case 22380: + break block10; + case 22381: + break block; + case 22382: + break block10; + case 22383: + break block; + case 22384: + break block10; + case 22385: + break block; + case 22386: + break block10; + case 22387: + break block; + case 22388: + break block10; + case 22389: + break block; + case 22390: + break block10; + case 22391: + break block; + case 22392: + break block10; + case 22393: + break block; + case 22394: + break block10; + case 22395: + break block; + case 22396: + break block10; + case 22397: + break block; + case 22398: + break block10; + case 22399: + break block; + case 22400: + break block10; + case 22401: + break block; + case 22402: + break block10; + case 22403: + break block; + case 22404: + break block10; + case 22405: + break block; + case 22406: + break block10; + case 22407: + break block; + case 22408: + break block10; + case 22409: + break block; + case 22410: + break block10; + case 22411: + break block; + case 22412: + break block10; + case 22413: + break block; + case 22414: + break block10; + case 22415: + break block; + case 22416: + break block10; + case 22417: + break block; + case 22418: + break block10; + case 22419: + break block; + case 22420: + break block10; + case 22421: + break block; + case 22422: + break block10; + case 22423: + break block; + case 22424: + break block10; + case 22425: + break block; + case 22426: + break block10; + case 22427: + break block; + case 22428: + break block10; + case 22429: + break block; + case 22430: + break block10; + case 22431: + break block; + case 22432: + break block10; + case 22433: + break block; + case 22434: + break block10; + case 22435: + break block; + case 22436: + break block10; + case 22437: + break block; + case 22438: + break block10; + case 22439: + break block; + case 22440: + break block10; + case 22441: + break block; + case 22442: + break block10; + case 22443: + break block; + case 22444: + break block10; + case 22445: + break block; + case 22446: + break block10; + case 22447: + break block; + case 22448: + break block10; + case 22449: + break block; + case 22450: + break block10; + case 22451: + break block; + case 22452: + break block10; + case 22453: + break block; + case 22454: + break block10; + case 22455: + break block; + case 22456: + break block10; + case 22457: + break block; + case 22458: + break block10; + case 22459: + break block; + case 22460: + break block10; + case 22461: + break block; + case 22462: + break block10; + case 22463: + break block; + case 22464: + break block10; + case 22465: + break block; + case 22466: + break block10; + case 22467: + break block; + case 22468: + break block10; + case 22469: + break block; + case 22470: + break block10; + case 22471: + break block; + case 22472: + break block10; + case 22473: + break block; + case 22474: + break block10; + case 22475: + break block; + case 22476: + break block10; + case 22477: + break block; + case 22478: + break block10; + case 22479: + break block; + case 22480: + break block10; + case 22481: + break block; + case 22482: + break block10; + case 22483: + break block; + case 22484: + break block10; + case 22485: + break block; + case 22486: + break block10; + case 22487: + break block; + case 22488: + break block10; + case 22489: + break block; + case 22490: + break block10; + case 22491: + break block; + case 22492: + break block10; + case 22493: + break block; + case 22494: + break block10; + case 22495: + break block; + case 22496: + break block10; + case 22497: + break block; + case 22498: + break block10; + case 22499: + break block; + case 22500: + break block10; + case 22501: + break block; + case 22502: + break block10; + case 22503: + break block; + case 22504: + break block10; + case 22505: + break block; + case 22506: + break block10; + case 22507: + break block; + case 22508: + break block10; + case 22509: + break block; + case 22510: + break block10; + case 22511: + break block; + case 22512: + break block10; + case 22513: + break block; + case 22514: + break block10; + case 22515: + break block; + case 22516: + break block10; + case 22517: + break block; + case 22518: + break block10; + case 22519: + break block; + case 22520: + break block10; + case 22521: + break block; + case 22522: + break block10; + case 22523: + break block; + case 22524: + break block10; + case 22525: + break block; + case 22526: + break block10; + case 22527: + break block; + case 22528: + break block10; + case 22529: + break block; + case 22530: + break block10; + case 22531: + break block; + case 22532: + break block10; + case 22533: + break block; + case 22534: + break block10; + case 22535: + break block; + case 22536: + break block10; + case 22537: + break block; + case 22538: + break block10; + case 22539: + break block; + case 22540: + break block10; + case 22541: + break block; + case 22542: + break block10; + case 22543: + break block; + case 22544: + break block10; + case 22545: + break block; + case 22546: + break block10; + case 22547: + break block; + case 22548: + break block10; + case 22549: + break block; + case 22550: + break block10; + case 22551: + break block; + case 22552: + break block10; + case 22553: + break block; + case 22554: + break block10; + case 22555: + break block; + case 22556: + break block10; + case 22557: + break block; + case 22558: + break block10; + case 22559: + break block; + case 22560: + break block10; + case 22561: + break block; + case 22562: + break block10; + case 22563: + break block; + case 22564: + break block10; + case 22565: + break block; + case 22566: + break block10; + case 22567: + break block; + case 22568: + break block10; + case 22569: + break block; + case 22570: + break block10; + case 22571: + break block; + case 22572: + break block10; + case 22573: + break block; + case 22574: + break block10; + case 22575: + break block; + case 22576: + break block10; + case 22577: + break block; + case 22578: + break block10; + case 22579: + break block; + case 22580: + break block10; + case 22581: + break block; + case 22582: + break block10; + case 22583: + break block; + case 22584: + break block10; + case 22585: + break block; + case 22586: + break block10; + case 22587: + break block; + case 22588: + break block10; + case 22589: + break block; + case 22590: + break block10; + case 22591: + break block; + case 22592: + break block10; + case 22593: + break block; + case 22594: + break block10; + case 22595: + break block; + case 22596: + break block10; + case 22597: + break block; + case 22598: + break block10; + case 22599: + break block; + case 22600: + break block10; + case 22601: + break block; + case 22602: + break block10; + case 22603: + break block; + case 22604: + break block10; + case 22605: + break block; + case 22606: + break block10; + case 22607: + break block; + case 22608: + break block10; + case 22609: + break block; + case 22610: + break block10; + case 22611: + break block; + case 22612: + break block10; + case 22613: + break block; + case 22614: + break block10; + case 22615: + break block; + case 22616: + break block10; + case 22617: + break block; + case 22618: + break block10; + case 22619: + break block; + case 22620: + break block10; + case 22621: + break block; + case 22622: + break block10; + case 22623: + break block; + case 22624: + break block10; + case 22625: + break block; + case 22626: + break block10; + case 22627: + break block; + case 22628: + break block10; + case 22629: + break block; + case 22630: + break block10; + case 22631: + break block; + case 22632: + break block10; + case 22633: + break block; + case 22634: + break block10; + case 22635: + break block; + case 22636: + break block10; + case 22637: + break block; + case 22638: + break block10; + case 22639: + break block; + case 22640: + break block10; + case 22641: + break block; + case 22642: + break block10; + case 22643: + break block; + case 22644: + break block10; + case 22645: + break block; + case 22646: + break block10; + case 22647: + break block; + case 22648: + break block10; + case 22649: + break block; + case 22650: + break block10; + case 22651: + break block; + case 22652: + break block10; + case 22653: + break block; + case 22654: + break block10; + case 22655: + break block; + case 22656: + break block10; + case 22657: + break block; + case 22658: + break block10; + case 22659: + break block; + case 22660: + break block10; + case 22661: + break block; + case 22662: + break block10; + case 22663: + break block; + case 22664: + break block10; + case 22665: + break block; + case 22666: + break block10; + case 22667: + break block; + case 22668: + break block10; + case 22669: + break block; + case 22670: + break block10; + case 22671: + break block; + case 22672: + break block10; + case 22673: + break block; + case 22674: + break block10; + case 22675: + break block; + case 22676: + break block10; + case 22677: + break block; + case 22678: + break block10; + case 22679: + break block; + case 22680: + break block10; + case 22681: + break block; + case 22682: + break block10; + case 22683: + break block; + case 22684: + break block10; + case 22685: + break block; + case 22686: + break block10; + case 22687: + break block; + case 22688: + break block10; + case 22689: + break block; + case 22690: + break block10; + case 22691: + break block; + case 22692: + break block10; + case 22693: + break block; + case 22694: + break block10; + case 22695: + break block; + case 22696: + break block10; + case 22697: + break block; + case 22698: + break block10; + case 22699: + break block; + case 22700: + break block10; + case 22701: + break block; + case 22702: + break block10; + case 22703: + break block; + case 22704: + break block10; + case 22705: + break block; + case 22706: + break block10; + case 22707: + break block; + case 22708: + break block10; + case 22709: + break block; + case 22710: + break block10; + case 22711: + break block; + case 22712: + break block10; + case 22713: + break block; + case 22714: + break block10; + case 22715: + break block; + case 22716: + break block10; + case 22717: + break block; + case 22718: + break block10; + case 22719: + break block; + case 22720: + break block10; + case 22721: + break block; + case 22722: + break block10; + case 22723: + break block; + case 22724: + break block10; + case 22725: + break block; + case 22726: + break block10; + case 22727: + break block; + case 22728: + break block10; + case 22729: + break block; + case 22730: + break block10; + case 22731: + break block; + case 22732: + break block10; + case 22733: + break block; + case 22734: + break block10; + case 22735: + break block; + case 22736: + break block10; + case 22737: + break block; + case 22738: + break block10; + case 22739: + break block; + case 22740: + break block10; + case 22741: + break block; + case 22742: + break block10; + case 22743: + break block; + case 22744: + break block10; + case 22745: + break block; + case 22746: + break block10; + case 22747: + break block; + case 22748: + break block10; + case 22749: + break block; + case 22750: + break block10; + case 22751: + break block; + case 22752: + break block10; + case 22753: + break block; + case 22754: + break block10; + case 22755: + break block; + case 22756: + break block10; + case 22757: + break block; + case 22758: + break block10; + case 22759: + break block; + case 22760: + break block10; + case 22761: + break block; + case 22762: + break block10; + case 22763: + break block; + case 22764: + break block10; + case 22765: + break block; + case 22766: + break block10; + case 22767: + break block; + case 22768: + break block10; + case 22769: + break block; + case 22770: + break block10; + case 22771: + break block; + case 22772: + break block10; + case 22773: + break block; + case 22774: + break block10; + case 22775: + break block; + case 22776: + break block10; + case 22777: + break block; + case 22778: + break block10; + case 22779: + break block; + case 22780: + break block10; + case 22781: + break block; + case 22782: + break block10; + case 22783: + break block; + case 22784: + break block10; + case 22785: + break block; + case 22786: + break block10; + case 22787: + break block; + case 22788: + break block10; + case 22789: + break block; + case 22790: + break block10; + case 22791: + break block; + case 22792: + break block10; + case 22793: + break block; + case 22794: + break block10; + case 22795: + break block; + case 22796: + break block10; + case 22797: + break block; + case 22798: + break block10; + case 22799: + break block; + case 22800: + break block10; + case 22801: + break block; + case 22802: + break block10; + case 22803: + break block; + case 22804: + break block10; + case 22805: + break block; + case 22806: + break block10; + case 22807: + break block; + case 22808: + break block10; + case 22809: + break block; + case 22810: + break block10; + case 22811: + break block; + case 22812: + break block10; + case 22813: + break block; + case 22814: + break block10; + case 22815: + break block; + case 22816: + break block10; + case 22817: + break block; + case 22818: + break block10; + case 22819: + break block; + case 22820: + break block10; + case 22821: + break block; + case 22822: + break block10; + case 22823: + break block; + case 22824: + break block10; + case 22825: + break block; + case 22826: + break block10; + case 22827: + break block; + case 22828: + break block10; + case 22829: + break block; + case 22830: + break block10; + case 22831: + break block; + case 22832: + break block10; + case 22833: + break block; + case 22834: + break block10; + case 22835: + break block; + case 22836: + break block10; + case 22837: + break block; + case 22838: + break block10; + case 22839: + break block; + case 22840: + break block10; + case 22841: + break block; + case 22842: + break block10; + case 22843: + break block; + case 22844: + break block10; + case 22845: + break block; + case 22846: + break block10; + case 22847: + break block; + case 22848: + break block10; + case 22849: + break block; + case 22850: + break block10; + case 22851: + break block; + case 22852: + break block10; + case 22853: + break block; + case 22854: + break block10; + case 22855: + break block; + case 22856: + break block10; + case 22857: + break block; + case 22858: + break block10; + case 22859: + break block; + case 22860: + break block10; + case 22861: + break block; + case 22862: + break block10; + case 22863: + break block; + case 22864: + break block10; + case 22865: + break block; + case 22866: + break block10; + case 22867: + break block; + case 22868: + break block10; + case 22869: + break block; + case 22870: + break block10; + case 22871: + break block; + case 22872: + break block10; + case 22873: + break block; + case 22874: + break block10; + case 22875: + break block; + case 22876: + break block10; + case 22877: + break block; + case 22878: + break block10; + case 22879: + break block; + case 22880: + break block10; + case 22881: + break block; + case 22882: + break block10; + case 22883: + break block; + case 22884: + break block10; + case 22885: + break block; + case 22886: + break block10; + case 22887: + break block; + case 22888: + break block10; + case 22889: + break block; + case 22890: + break block10; + case 22891: + break block; + case 22892: + break block10; + case 22893: + break block; + case 22894: + break block10; + case 22895: + break block; + case 22896: + break block10; + case 22897: + break block; + case 22898: + break block10; + case 22899: + break block; + case 22900: + break block10; + case 22901: + break block; + case 22902: + break block10; + case 22903: + break block; + case 22904: + break block10; + case 22905: + break block; + case 22906: + break block10; + case 22907: + break block; + case 22908: + break block10; + case 22909: + break block; + case 22910: + break block10; + case 22911: + break block; + case 22912: + break block10; + case 22913: + break block; + case 22914: + break block10; + case 22915: + break block; + case 22916: + break block10; + case 22917: + break block; + case 22918: + break block10; + case 22919: + break block; + case 22920: + break block10; + case 22921: + break block; + case 22922: + break block10; + case 22923: + break block; + case 22924: + break block10; + case 22925: + break block; + case 22926: + break block10; + case 22927: + break block; + case 22928: + break block10; + case 22929: + break block; + case 22930: + break block10; + case 22931: + break block; + case 22932: + break block10; + case 22933: + break block; + case 22934: + break block10; + case 22935: + break block; + case 22936: + break block10; + case 22937: + break block; + case 22938: + break block10; + case 22939: + break block; + case 22940: + break block10; + case 22941: + break block; + case 22942: + break block10; + case 22943: + break block; + case 22944: + break block10; + case 22945: + break block; + case 22946: + break block10; + case 22947: + break block; + case 22948: + break block10; + case 22949: + break block; + case 22950: + break block10; + case 22951: + break block; + case 22952: + break block10; + case 22953: + break block; + case 22954: + break block10; + case 22955: + break block; + case 22956: + break block10; + case 22957: + break block; + case 22958: + break block10; + case 22959: + break block; + case 22960: + break block10; + case 22961: + break block; + case 22962: + break block10; + case 22963: + break block; + case 22964: + break block10; + case 22965: + break block; + case 22966: + break block10; + case 22967: + break block; + case 22968: + break block10; + case 22969: + break block; + case 22970: + break block10; + case 22971: + break block; + case 22972: + break block10; + case 22973: + break block; + case 22974: + break block10; + case 22975: + break block; + case 22976: + break block10; + case 22977: + break block; + case 22978: + break block10; + case 22979: + break block; + case 22980: + break block10; + case 22981: + break block; + case 22982: + break block10; + case 22983: + break block; + case 22984: + break block10; + case 22985: + break block; + case 22986: + break block10; + case 22987: + break block; + case 22988: + break block10; + case 22989: + break block; + case 22990: + break block10; + case 22991: + break block; + case 22992: + break block10; + case 22993: + break block; + case 22994: + break block10; + case 22995: + break block; + case 22996: + break block10; + case 22997: + break block; + case 22998: + break block10; + case 22999: + break block; + case 23e3: + break block10; + case 23001: + break block; + case 23002: + break block10; + case 23003: + break block; + case 23004: + break block10; + case 23005: + break block; + case 23006: + break block10; + case 23007: + break block; + case 23008: + break block10; + case 23009: + break block; + case 23010: + break block10; + case 23011: + break block; + case 23012: + break block10; + case 23013: + break block; + case 23014: + break block10; + case 23015: + break block; + case 23016: + break block10; + case 23017: + break block; + case 23018: + break block10; + case 23019: + break block; + case 23020: + break block10; + case 23021: + break block; + case 23022: + break block10; + case 23023: + break block; + case 23024: + break block10; + case 23025: + break block; + case 23026: + break block10; + case 23027: + break block; + case 23028: + break block10; + case 23029: + break block; + case 23030: + break block10; + case 23031: + break block; + case 23032: + break block10; + case 23033: + break block; + case 23034: + break block10; + case 23035: + break block; + case 23036: + break block10; + case 23037: + break block; + case 23038: + break block10; + case 23039: + break block; + case 23040: + break block10; + case 23041: + break block; + case 23042: + break block10; + case 23043: + break block; + case 23044: + break block10; + case 23045: + break block; + case 23046: + break block10; + case 23047: + break block; + case 23048: + break block10; + case 23049: + break block; + case 23050: + break block10; + case 23051: + break block; + case 23052: + break block10; + case 23053: + break block; + case 23054: + break block10; + case 23055: + break block; + case 23056: + break block10; + case 23057: + break block; + case 23058: + break block10; + case 23059: + break block; + case 23060: + break block10; + case 23061: + break block; + case 23062: + break block10; + case 23063: + break block; + case 23064: + break block10; + case 23065: + break block; + case 23066: + break block10; + case 23067: + break block; + case 23068: + break block10; + case 23069: + break block; + case 23070: + break block10; + case 23071: + break block; + case 23072: + break block10; + case 23073: + break block; + case 23074: + break block10; + case 23075: + break block; + case 23076: + break block10; + case 23077: + break block; + case 23078: + break block10; + case 23079: + break block; + case 23080: + break block10; + case 23081: + break block; + case 23082: + break block10; + case 23083: + break block; + case 23084: + break block10; + case 23085: + break block; + case 23086: + break block10; + case 23087: + break block; + case 23088: + break block10; + case 23089: + break block; + case 23090: + break block10; + case 23091: + break block; + case 23092: + break block10; + case 23093: + break block; + case 23094: + break block10; + case 23095: + break block; + case 23096: + break block10; + case 23097: + break block; + case 23098: + break block10; + case 23099: + break block; + case 23100: + break block10; + case 23101: + break block; + case 23102: + break block10; + case 23103: + break block; + case 23104: + break block10; + case 23105: + break block; + case 23106: + break block10; + case 23107: + break block; + case 23108: + break block10; + case 23109: + break block; + case 23110: + break block10; + case 23111: + break block; + case 23112: + break block10; + case 23113: + break block; + case 23114: + break block10; + case 23115: + break block; + case 23116: + break block10; + case 23117: + break block; + case 23118: + break block10; + case 23119: + break block; + case 23120: + break block10; + case 23121: + break block; + case 23122: + break block10; + case 23123: + break block; + case 23124: + break block10; + case 23125: + break block; + case 23126: + break block10; + case 23127: + break block; + case 23128: + break block10; + case 23129: + break block; + case 23130: + break block10; + case 23131: + break block; + case 23132: + break block10; + case 23133: + break block; + case 23134: + break block10; + case 23135: + break block; + case 23136: + break block10; + case 23137: + break block; + case 23138: + break block10; + case 23139: + break block; + case 23140: + break block10; + case 23141: + break block; + case 23142: + break block10; + case 23143: + break block; + case 23144: + break block10; + case 23145: + break block; + case 23146: + break block10; + case 23147: + break block; + case 23148: + break block10; + case 23149: + break block; + case 23150: + break block10; + case 23151: + break block; + case 23152: + break block10; + case 23153: + break block; + case 23154: + break block10; + case 23155: + break block; + case 23156: + break block10; + case 23157: + break block; + case 23158: + break block10; + case 23159: + break block; + case 23160: + break block10; + case 23161: + break block; + case 23162: + break block10; + case 23163: + break block; + case 23164: + break block10; + case 23165: + break block; + case 23166: + break block10; + case 23167: + break block; + case 23168: + break block10; + case 23169: + break block; + case 23170: + break block10; + case 23171: + break block; + case 23172: + break block10; + case 23173: + break block; + case 23174: + break block10; + case 23175: + break block; + case 23176: + break block10; + case 23177: + break block; + case 23178: + break block10; + case 23179: + break block; + case 23180: + break block10; + case 23181: + break block; + case 23182: + break block10; + case 23183: + break block; + case 23184: + break block10; + case 23185: + break block; + case 23186: + break block10; + case 23187: + break block; + case 23188: + break block10; + case 23189: + break block; + case 23190: + break block10; + case 23191: + break block; + case 23192: + break block10; + case 23193: + break block; + case 23194: + break block10; + case 23195: + break block; + case 23196: + break block10; + case 23197: + break block; + case 23198: + break block10; + case 23199: + break block; + case 23200: + break block10; + case 23201: + break block; + case 23202: + break block10; + case 23203: + break block; + case 23204: + break block10; + case 23205: + break block; + case 23206: + break block10; + case 23207: + break block; + case 23208: + break block10; + case 23209: + break block; + case 23210: + break block10; + case 23211: + break block; + case 23212: + break block10; + case 23213: + break block; + case 23214: + break block10; + case 23215: + break block; + case 23216: + break block10; + case 23217: + break block; + case 23218: + break block10; + case 23219: + break block; + case 23220: + break block10; + case 23221: + break block; + case 23222: + break block10; + case 23223: + break block; + case 23224: + break block10; + case 23225: + break block; + case 23226: + break block10; + case 23227: + break block; + case 23228: + break block10; + case 23229: + break block; + case 23230: + break block10; + case 23231: + break block; + case 23232: + break block10; + case 23233: + break block; + case 23234: + break block10; + case 23235: + break block; + case 23236: + break block10; + case 23237: + break block; + case 23238: + break block10; + case 23239: + break block; + case 23240: + break block10; + case 23241: + break block; + case 23242: + break block10; + case 23243: + break block; + case 23244: + break block10; + case 23245: + break block; + case 23246: + break block10; + case 23247: + break block; + case 23248: + break block10; + case 23249: + break block; + case 23250: + break block10; + case 23251: + break block; + case 23252: + break block10; + case 23253: + break block; + case 23254: + break block10; + case 23255: + break block; + case 23256: + break block10; + case 23257: + break block; + case 23258: + break block10; + case 23259: + break block; + case 23260: + break block10; + case 23261: + break block; + case 23262: + break block10; + case 23263: + break block; + case 23264: + break block10; + case 23265: + break block; + case 23266: + break block10; + case 23267: + break block; + case 23268: + break block10; + case 23269: + break block; + case 23270: + break block10; + case 23271: + break block; + case 23272: + break block10; + case 23273: + break block; + case 23274: + break block10; + case 23275: + break block; + case 23276: + break block10; + case 23277: + break block; + case 23278: + break block10; + case 23279: + break block; + case 23280: + break block10; + case 23281: + break block; + case 23282: + break block10; + case 23283: + break block; + case 23284: + break block10; + case 23285: + break block; + case 23286: + break block10; + case 23287: + break block; + case 23288: + break block10; + case 23289: + break block; + case 23290: + break block10; + case 23291: + break block; + case 23292: + break block10; + case 23293: + break block; + case 23294: + break block10; + case 23295: + break block; + case 23296: + break block10; + case 23297: + break block; + case 23298: + break block10; + case 23299: + break block; + case 23300: + break block10; + case 23301: + break block; + case 23302: + break block10; + case 23303: + break block; + case 23304: + break block10; + case 23305: + break block; + case 23306: + break block10; + case 23307: + break block; + case 23308: + break block10; + case 23309: + break block; + case 23310: + break block10; + case 23311: + break block; + case 23312: + break block10; + case 23313: + break block; + case 23314: + break block10; + case 23315: + break block; + case 23316: + break block10; + case 23317: + break block; + case 23318: + break block10; + case 23319: + break block; + case 23320: + break block10; + case 23321: + break block; + case 23322: + break block10; + case 23323: + break block; + case 23324: + break block10; + case 23325: + break block; + case 23326: + break block10; + case 23327: + break block; + case 23328: + break block10; + case 23329: + break block; + case 23330: + break block10; + case 23331: + break block; + case 23332: + break block10; + case 23333: + break block; + case 23334: + break block10; + case 23335: + break block; + case 23336: + break block10; + case 23337: + break block; + case 23338: + break block10; + case 23339: + break block; + case 23340: + break block10; + case 23341: + break block; + case 23342: + break block10; + case 23343: + break block; + case 23344: + break block10; + case 23345: + break block; + case 23346: + break block10; + case 23347: + break block; + case 23348: + break block10; + case 23349: + break block; + case 23350: + break block10; + case 23351: + break block; + case 23352: + break block10; + case 23353: + break block; + case 23354: + break block10; + case 23355: + break block; + case 23356: + break block10; + case 23357: + break block; + case 23358: + break block10; + case 23359: + break block; + case 23360: + break block10; + case 23361: + break block; + case 23362: + break block10; + case 23363: + break block; + case 23364: + break block10; + case 23365: + break block; + case 23366: + break block10; + case 23367: + break block; + case 23368: + break block10; + case 23369: + break block; + case 23370: + break block10; + case 23371: + break block; + case 23372: + break block10; + case 23373: + break block; + case 23374: + break block10; + case 23375: + break block; + case 23376: + break block10; + case 23377: + break block; + case 23378: + break block10; + case 23379: + break block; + case 23380: + break block10; + case 23381: + break block; + case 23382: + break block10; + case 23383: + break block; + case 23384: + break block10; + case 23385: + break block; + case 23386: + break block10; + case 23387: + break block; + case 23388: + break block10; + case 23389: + break block; + case 23390: + break block10; + case 23391: + break block; + case 23392: + break block10; + case 23393: + break block; + case 23394: + break block10; + case 23395: + break block; + case 23396: + break block10; + case 23397: + break block; + case 23398: + break block10; + case 23399: + break block; + case 23400: + break block10; + case 23401: + break block; + case 23402: + break block10; + case 23403: + break block; + case 23404: + break block10; + case 23405: + break block; + case 23406: + break block10; + case 23407: + break block; + case 23408: + break block10; + case 23409: + break block; + case 23410: + break block10; + case 23411: + break block; + case 23412: + break block10; + case 23413: + break block; + case 23414: + break block10; + case 23415: + break block; + case 23416: + break block10; + case 23417: + break block; + case 23418: + break block10; + case 23419: + break block; + case 23420: + break block10; + case 23421: + break block; + case 23422: + break block10; + case 23423: + break block; + case 23424: + break block10; + case 23425: + break block; + case 23426: + break block10; + case 23427: + break block; + case 23428: + break block10; + case 23429: + break block; + case 23430: + break block10; + case 23431: + break block; + case 23432: + break block10; + case 23433: + break block; + case 23434: + break block10; + case 23435: + break block; + case 23436: + break block10; + case 23437: + break block; + case 23438: + break block10; + case 23439: + break block; + case 23440: + break block10; + case 23441: + break block; + case 23442: + break block10; + case 23443: + break block; + case 23444: + break block10; + case 23445: + break block; + case 23446: + break block10; + case 23447: + break block; + case 23448: + break block10; + case 23449: + break block; + case 23450: + break block10; + case 23451: + break block; + case 23452: + break block10; + case 23453: + break block; + case 23454: + break block10; + case 23455: + break block; + case 23456: + break block10; + case 23457: + break block; + case 23458: + break block10; + case 23459: + break block; + case 23460: + break block10; + case 23461: + break block; + case 23462: + break block10; + case 23463: + break block; + case 23464: + break block10; + case 23465: + break block; + case 23466: + break block10; + case 23467: + break block; + case 23468: + break block10; + case 23469: + break block; + case 23470: + break block10; + case 23471: + break block; + case 23472: + break block10; + case 23473: + break block; + case 23474: + break block10; + case 23475: + break block; + case 23476: + break block10; + case 23477: + break block; + case 23478: + break block10; + case 23479: + break block; + case 23480: + break block10; + case 23481: + break block; + case 23482: + break block10; + case 23483: + break block; + case 23484: + break block10; + case 23485: + break block; + case 23486: + break block10; + case 23487: + break block; + case 23488: + break block10; + case 23489: + break block; + case 23490: + break block10; + case 23491: + break block; + case 23492: + break block10; + case 23493: + break block; + case 23494: + break block10; + case 23495: + break block; + case 23496: + break block10; + case 23497: + break block; + case 23498: + break block10; + case 23499: + break block; + case 23500: + break block10; + case 23501: + break block; + case 23502: + break block10; + case 23503: + break block; + case 23504: + break block10; + case 23505: + break block; + case 23506: + break block10; + case 23507: + break block; + case 23508: + break block10; + case 23509: + break block; + case 23510: + break block10; + case 23511: + break block; + case 23512: + break block10; + case 23513: + break block; + case 23514: + break block10; + case 23515: + break block; + case 23516: + break block10; + case 23517: + break block; + case 23518: + break block10; + case 23519: + break block; + case 23520: + break block10; + case 23521: + break block; + case 23522: + break block10; + case 23523: + break block; + case 23524: + break block10; + case 23525: + break block; + case 23526: + break block10; + case 23527: + break block; + case 23528: + break block10; + case 23529: + break block; + case 23530: + break block10; + case 23531: + break block; + case 23532: + break block10; + case 23533: + break block; + case 23534: + break block10; + case 23535: + break block; + case 23536: + break block10; + case 23537: + break block; + case 23538: + break block10; + case 23539: + break block; + case 23540: + break block10; + case 23541: + break block; + case 23542: + break block10; + case 23543: + break block; + case 23544: + break block10; + case 23545: + break block; + case 23546: + break block10; + case 23547: + break block; + case 23548: + break block10; + case 23549: + break block; + case 23550: + break block10; + case 23551: + break block; + case 23552: + break block10; + case 23553: + break block; + case 23554: + break block10; + case 23555: + break block; + case 23556: + break block10; + case 23557: + break block; + case 23558: + break block10; + case 23559: + break block; + case 23560: + break block10; + case 23561: + break block; + case 23562: + break block10; + case 23563: + break block; + case 23564: + break block10; + case 23565: + break block; + case 23566: + break block10; + case 23567: + break block; + case 23568: + break block10; + case 23569: + break block; + case 23570: + break block10; + case 23571: + break block; + case 23572: + break block10; + case 23573: + break block; + case 23574: + break block10; + case 23575: + break block; + case 23576: + break block10; + case 23577: + break block; + case 23578: + break block10; + case 23579: + break block; + case 23580: + break block10; + case 23581: + break block; + case 23582: + break block10; + case 23583: + break block; + case 23584: + break block10; + case 23585: + break block; + case 23586: + break block10; + case 23587: + break block; + case 23588: + break block10; + case 23589: + break block; + case 23590: + break block10; + case 23591: + break block; + case 23592: + break block10; + case 23593: + break block; + case 23594: + break block10; + case 23595: + break block; + case 23596: + break block10; + case 23597: + break block; + case 23598: + break block10; + case 23599: + break block; + case 23600: + break block10; + case 23601: + break block; + case 23602: + break block10; + case 23603: + break block; + case 23604: + break block10; + case 23605: + break block; + case 23606: + break block10; + case 23607: + break block; + case 23608: + break block10; + case 23609: + break block; + case 23610: + break block10; + case 23611: + break block; + case 23612: + break block10; + case 23613: + break block; + case 23614: + break block10; + case 23615: + break block; + case 23616: + break block10; + case 23617: + break block; + case 23618: + break block10; + case 23619: + break block; + case 23620: + break block10; + case 23621: + break block; + case 23622: + break block10; + case 23623: + break block; + case 23624: + break block10; + case 23625: + break block; + case 23626: + break block10; + case 23627: + break block; + case 23628: + break block10; + case 23629: + break block; + case 23630: + break block10; + case 23631: + break block; + case 23632: + break block10; + case 23633: + break block; + case 23634: + break block10; + case 23635: + break block; + case 23636: + break block10; + case 23637: + break block; + case 23638: + break block10; + case 23639: + break block; + case 23640: + break block10; + case 23641: + break block; + case 23642: + break block10; + case 23643: + break block; + case 23644: + break block10; + case 23645: + break block; + case 23646: + break block10; + case 23647: + break block; + case 23648: + break block10; + case 23649: + break block; + case 23650: + break block10; + case 23651: + break block; + case 23652: + break block10; + case 23653: + break block; + case 23654: + break block10; + case 23655: + break block; + case 23656: + break block10; + case 23657: + break block; + case 23658: + break block10; + case 23659: + break block; + case 23660: + break block10; + case 23661: + break block; + case 23662: + break block10; + case 23663: + break block; + case 23664: + break block10; + case 23665: + break block; + case 23666: + break block10; + case 23667: + break block; + case 23668: + break block10; + case 23669: + break block; + case 23670: + break block10; + case 23671: + break block; + case 23672: + break block10; + case 23673: + break block; + case 23674: + break block10; + case 23675: + break block; + case 23676: + break block10; + case 23677: + break block; + case 23678: + break block10; + case 23679: + break block; + case 23680: + break block10; + case 23681: + break block; + case 23682: + break block10; + case 23683: + break block; + case 23684: + break block10; + case 23685: + break block; + case 23686: + break block10; + case 23687: + break block; + case 23688: + break block10; + case 23689: + break block; + case 23690: + break block10; + case 23691: + break block; + case 23692: + break block10; + case 23693: + break block; + case 23694: + break block10; + case 23695: + break block; + case 23696: + break block10; + case 23697: + break block; + case 23698: + break block10; + case 23699: + break block; + case 23700: + break block10; + case 23701: + break block; + case 23702: + break block10; + case 23703: + break block; + case 23704: + break block10; + case 23705: + break block; + case 23706: + break block10; + case 23707: + break block; + case 23708: + break block10; + case 23709: + break block; + case 23710: + break block10; + case 23711: + break block; + case 23712: + break block10; + case 23713: + break block; + case 23714: + break block10; + case 23715: + break block; + case 23716: + break block10; + case 23717: + break block; + case 23718: + break block10; + case 23719: + break block; + case 23720: + break block10; + case 23721: + break block; + case 23722: + break block10; + case 23723: + break block; + case 23724: + break block10; + case 23725: + break block; + case 23726: + break block10; + case 23727: + break block; + case 23728: + break block10; + case 23729: + break block; + case 23730: + break block10; + case 23731: + break block; + case 23732: + break block10; + case 23733: + break block; + case 23734: + break block10; + case 23735: + break block; + case 23736: + break block10; + case 23737: + break block; + case 23738: + break block10; + case 23739: + break block; + case 23740: + break block10; + case 23741: + break block; + case 23742: + break block10; + case 23743: + break block; + case 23744: + break block10; + case 23745: + break block; + case 23746: + break block10; + case 23747: + break block; + case 23748: + break block10; + case 23749: + break block; + case 23750: + break block10; + case 23751: + break block; + case 23752: + break block10; + case 23753: + break block; + case 23754: + break block10; + case 23755: + break block; + case 23756: + break block10; + case 23757: + break block; + case 23758: + break block10; + case 23759: + break block; + case 23760: + break block10; + case 23761: + break block; + case 23762: + break block10; + case 23763: + break block; + case 23764: + break block10; + case 23765: + break block; + case 23766: + break block10; + case 23767: + break block; + case 23768: + break block10; + case 23769: + break block; + case 23770: + break block10; + case 23771: + break block; + case 23772: + break block10; + case 23773: + break block; + case 23774: + break block10; + case 23775: + break block; + case 23776: + break block10; + case 23777: + break block; + case 23778: + break block10; + case 23779: + break block; + case 23780: + break block10; + case 23781: + break block; + case 23782: + break block10; + case 23783: + break block; + case 23784: + break block10; + case 23785: + break block; + case 23786: + break block10; + case 23787: + break block; + case 23788: + break block10; + case 23789: + break block; + case 23790: + break block10; + case 23791: + break block; + case 23792: + break block10; + case 23793: + break block; + case 23794: + break block10; + case 23795: + break block; + case 23796: + break block10; + case 23797: + break block; + case 23798: + break block10; + case 23799: + break block; + case 23800: + break block10; + case 23801: + break block; + case 23802: + break block10; + case 23803: + break block; + case 23804: + break block10; + case 23805: + break block; + case 23806: + break block10; + case 23807: + break block; + case 23808: + break block10; + case 23809: + break block; + case 23810: + break block10; + case 23811: + break block; + case 23812: + break block10; + case 23813: + break block; + case 23814: + break block10; + case 23815: + break block; + case 23816: + break block10; + case 23817: + break block; + case 23818: + break block10; + case 23819: + break block; + case 23820: + break block10; + case 23821: + break block; + case 23822: + break block10; + case 23823: + break block; + case 23824: + break block10; + case 23825: + break block; + case 23826: + break block10; + case 23827: + break block; + case 23828: + break block10; + case 23829: + break block; + case 23830: + break block10; + case 23831: + break block; + case 23832: + break block10; + case 23833: + break block; + case 23834: + break block10; + case 23835: + break block; + case 23836: + break block10; + case 23837: + break block; + case 23838: + break block10; + case 23839: + break block; + case 23840: + break block10; + case 23841: + break block; + case 23842: + break block10; + case 23843: + break block; + case 23844: + break block10; + case 23845: + break block; + case 23846: + break block10; + case 23847: + break block; + case 23848: + break block10; + case 23849: + break block; + case 23850: + break block10; + case 23851: + break block; + case 23852: + break block10; + case 23853: + break block; + case 23854: + break block10; + case 23855: + break block; + case 23856: + break block10; + case 23857: + break block; + case 23858: + break block10; + case 23859: + break block; + case 23860: + break block10; + case 23861: + break block; + case 23862: + break block10; + case 23863: + break block; + case 23864: + break block10; + case 23865: + break block; + case 23866: + break block10; + case 23867: + break block; + case 23868: + break block10; + case 23869: + break block; + case 23870: + break block10; + case 23871: + break block; + case 23872: + break block10; + case 23873: + break block; + case 23874: + break block10; + case 23875: + break block; + case 23876: + break block10; + case 23877: + break block; + case 23878: + break block10; + case 23879: + break block; + case 23880: + break block10; + case 23881: + break block; + case 23882: + break block10; + case 23883: + break block; + case 23884: + break block10; + case 23885: + break block; + case 23886: + break block10; + case 23887: + break block; + case 23888: + break block10; + case 23889: + break block; + case 23890: + break block10; + case 23891: + break block; + case 23892: + break block10; + case 23893: + break block; + case 23894: + break block10; + case 23895: + break block; + case 23896: + break block10; + case 23897: + break block; + case 23898: + break block10; + case 23899: + break block; + case 23900: + break block10; + case 23901: + break block; + case 23902: + break block10; + case 23903: + break block; + case 23904: + break block10; + case 23905: + break block; + case 23906: + break block10; + case 23907: + break block; + case 23908: + break block10; + case 23909: + break block; + case 23910: + break block10; + case 23911: + break block; + case 23912: + break block10; + case 23913: + break block; + case 23914: + break block10; + case 23915: + break block; + case 23916: + break block10; + case 23917: + break block; + case 23918: + break block10; + case 23919: + break block; + case 23920: + break block10; + case 23921: + break block; + case 23922: + break block10; + case 23923: + break block; + case 23924: + break block10; + case 23925: + break block; + case 23926: + break block10; + case 23927: + break block; + case 23928: + break block10; + case 23929: + break block; + case 23930: + break block10; + case 23931: + break block; + case 23932: + break block10; + case 23933: + break block; + case 23934: + break block10; + case 23935: + break block; + case 23936: + break block10; + case 23937: + break block; + case 23938: + break block10; + case 23939: + break block; + case 23940: + break block10; + case 23941: + break block; + case 23942: + break block10; + case 23943: + break block; + case 23944: + break block10; + case 23945: + break block; + case 23946: + break block10; + case 23947: + break block; + case 23948: + break block10; + case 23949: + break block; + case 23950: + break block10; + case 23951: + break block; + case 23952: + break block10; + case 23953: + break block; + case 23954: + break block10; + case 23955: + break block; + case 23956: + break block10; + case 23957: + break block; + case 23958: + break block10; + case 23959: + break block; + case 23960: + break block10; + case 23961: + break block; + case 23962: + break block10; + case 23963: + break block; + case 23964: + break block10; + case 23965: + break block; + case 23966: + break block10; + case 23967: + break block; + case 23968: + break block10; + case 23969: + break block; + case 23970: + break block10; + case 23971: + break block; + case 23972: + break block10; + case 23973: + break block; + case 23974: + break block10; + case 23975: + break block; + case 23976: + break block10; + case 23977: + break block; + case 23978: + break block10; + case 23979: + break block; + case 23980: + break block10; + case 23981: + break block; + case 23982: + break block10; + case 23983: + break block; + case 23984: + break block10; + case 23985: + break block; + case 23986: + break block10; + case 23987: + break block; + case 23988: + break block10; + case 23989: + break block; + case 23990: + break block10; + case 23991: + break block; + case 23992: + break block10; + case 23993: + break block; + case 23994: + break block10; + case 23995: + break block; + case 23996: + break block10; + case 23997: + break block; + case 23998: + break block10; + case 23999: + break block; + case 24e3: + break block10; + case 24001: + break block; + case 24002: + break block10; + case 24003: + break block; + case 24004: + break block10; + case 24005: + break block; + case 24006: + break block10; + case 24007: + break block; + case 24008: + break block10; + case 24009: + break block; + case 24010: + break block10; + case 24011: + break block; + case 24012: + break block10; + case 24013: + break block; + case 24014: + break block10; + case 24015: + break block; + case 24016: + break block10; + case 24017: + break block; + case 24018: + break block10; + case 24019: + break block; + case 24020: + break block10; + case 24021: + break block; + case 24022: + break block10; + case 24023: + break block; + case 24024: + break block10; + case 24025: + break block; + case 24026: + break block10; + case 24027: + break block; + case 24028: + break block10; + case 24029: + break block; + case 24030: + break block10; + case 24031: + break block; + case 24032: + break block10; + case 24033: + break block; + case 24034: + break block10; + case 24035: + break block; + case 24036: + break block10; + case 24037: + break block; + case 24038: + break block10; + case 24039: + break block; + case 24040: + break block10; + case 24041: + break block; + case 24042: + break block10; + case 24043: + break block; + case 24044: + break block10; + case 24045: + break block; + case 24046: + break block10; + case 24047: + break block; + case 24048: + break block10; + case 24049: + break block; + case 24050: + break block10; + case 24051: + break block; + case 24052: + break block10; + case 24053: + break block; + case 24054: + break block10; + case 24055: + break block; + case 24056: + break block10; + case 24057: + break block; + case 24058: + break block10; + case 24059: + break block; + case 24060: + break block10; + case 24061: + break block; + case 24062: + break block10; + case 24063: + break block; + case 24064: + break block10; + case 24065: + break block; + case 24066: + break block10; + case 24067: + break block; + case 24068: + break block10; + case 24069: + break block; + case 24070: + break block10; + case 24071: + break block; + case 24072: + break block10; + case 24073: + break block; + case 24074: + break block10; + case 24075: + break block; + case 24076: + break block10; + case 24077: + break block; + case 24078: + break block10; + case 24079: + break block; + case 24080: + break block10; + case 24081: + break block; + case 24082: + break block10; + case 24083: + break block; + case 24084: + break block10; + case 24085: + break block; + case 24086: + break block10; + case 24087: + break block; + case 24088: + break block10; + case 24089: + break block; + case 24090: + break block10; + case 24091: + break block; + case 24092: + break block10; + case 24093: + break block; + case 24094: + break block10; + case 24095: + break block; + case 24096: + break block10; + case 24097: + break block; + case 24098: + break block10; + case 24099: + break block; + case 24100: + break block10; + case 24101: + break block; + case 24102: + break block10; + case 24103: + break block; + case 24104: + break block10; + case 24105: + break block; + case 24106: + break block10; + case 24107: + break block; + case 24108: + break block10; + case 24109: + break block; + case 24110: + break block10; + case 24111: + break block; + case 24112: + break block10; + case 24113: + break block; + case 24114: + break block10; + case 24115: + break block; + case 24116: + break block10; + case 24117: + break block; + case 24118: + break block10; + case 24119: + break block; + case 24120: + break block10; + case 24121: + break block; + case 24122: + break block10; + case 24123: + break block; + case 24124: + break block10; + case 24125: + break block; + case 24126: + break block10; + case 24127: + break block; + case 24128: + break block10; + case 24129: + break block; + case 24130: + break block10; + case 24131: + break block; + case 24132: + break block10; + case 24133: + break block; + case 24134: + break block10; + case 24135: + break block; + case 24136: + break block10; + case 24137: + break block; + case 24138: + break block10; + case 24139: + break block; + case 24140: + break block10; + case 24141: + break block; + case 24142: + break block10; + case 24143: + break block; + case 24144: + break block10; + case 24145: + break block; + case 24146: + break block10; + case 24147: + break block; + case 24148: + break block10; + case 24149: + break block; + case 24150: + break block10; + case 24151: + break block; + case 24152: + break block10; + case 24153: + break block; + case 24154: + break block10; + case 24155: + break block; + case 24156: + break block10; + case 24157: + break block; + case 24158: + break block10; + case 24159: + break block; + case 24160: + break block10; + case 24161: + break block; + case 24162: + break block10; + case 24163: + break block; + case 24164: + break block10; + case 24165: + break block; + case 24166: + break block10; + case 24167: + break block; + case 24168: + break block10; + case 24169: + break block; + case 24170: + break block10; + case 24171: + break block; + case 24172: + break block10; + case 24173: + break block; + case 24174: + break block10; + case 24175: + break block; + case 24176: + break block10; + case 24177: + break block; + case 24178: + break block10; + case 24179: + break block; + case 24180: + break block10; + case 24181: + break block; + case 24182: + break block10; + case 24183: + break block; + case 24184: + break block10; + case 24185: + break block; + case 24186: + break block10; + case 24187: + break block; + case 24188: + break block10; + case 24189: + break block; + case 24190: + break block10; + case 24191: + break block; + case 24192: + break block10; + case 24193: + break block; + case 24194: + break block10; + case 24195: + break block; + case 24196: + break block10; + case 24197: + break block; + case 24198: + break block10; + case 24199: + break block; + case 24200: + break block10; + case 24201: + break block; + case 24202: + break block10; + case 24203: + break block; + case 24204: + break block10; + case 24205: + break block; + case 24206: + break block10; + case 24207: + break block; + case 24208: + break block10; + case 24209: + break block; + case 24210: + break block10; + case 24211: + break block; + case 24212: + break block10; + case 24213: + break block; + case 24214: + break block10; + case 24215: + break block; + case 24216: + break block10; + case 24217: + break block; + case 24218: + break block10; + case 24219: + break block; + case 24220: + break block10; + case 24221: + break block; + case 24222: + break block10; + case 24223: + break block; + case 24224: + break block10; + case 24225: + break block; + case 24226: + break block10; + case 24227: + break block; + case 24228: + break block10; + case 24229: + break block; + case 24230: + break block10; + case 24231: + break block; + case 24232: + break block10; + case 24233: + break block; + case 24234: + break block10; + case 24235: + break block; + case 24236: + break block10; + case 24237: + break block; + case 24238: + break block10; + case 24239: + break block; + case 24240: + break block10; + case 24241: + break block; + case 24242: + break block10; + case 24243: + break block; + case 24244: + break block10; + case 24245: + break block; + case 24246: + break block10; + case 24247: + break block; + case 24248: + break block10; + case 24249: + break block; + case 24250: + break block10; + case 24251: + break block; + case 24252: + break block10; + case 24253: + break block; + case 24254: + break block10; + case 24255: + break block; + case 24256: + break block10; + case 24257: + break block; + case 24258: + break block10; + case 24259: + break block; + case 24260: + break block10; + case 24261: + break block; + case 24262: + break block10; + case 24263: + break block; + case 24264: + break block10; + case 24265: + break block; + case 24266: + break block10; + case 24267: + break block; + case 24268: + break block10; + case 24269: + break block; + case 24270: + break block10; + case 24271: + break block; + case 24272: + break block10; + case 24273: + break block; + case 24274: + break block10; + case 24275: + break block; + case 24276: + break block10; + case 24277: + break block; + case 24278: + break block10; + case 24279: + break block; + case 24280: + break block10; + case 24281: + break block; + case 24282: + break block10; + case 24283: + break block; + case 24284: + break block10; + case 24285: + break block; + case 24286: + break block10; + case 24287: + break block; + case 24288: + break block10; + case 24289: + break block; + case 24290: + break block10; + case 24291: + break block; + case 24292: + break block10; + case 24293: + break block; + case 24294: + break block10; + case 24295: + break block; + case 24296: + break block10; + case 24297: + break block; + case 24298: + break block10; + case 24299: + break block; + case 24300: + break block10; + case 24301: + break block; + case 24302: + break block10; + case 24303: + break block; + case 24304: + break block10; + case 24305: + break block; + case 24306: + break block10; + case 24307: + break block; + case 24308: + break block10; + case 24309: + break block; + case 24310: + break block10; + case 24311: + break block; + case 24312: + break block10; + case 24313: + break block; + case 24314: + break block10; + case 24315: + break block; + case 24316: + break block10; + case 24317: + break block; + case 24318: + break block10; + case 24319: + break block; + case 24320: + break block10; + case 24321: + break block; + case 24322: + break block10; + case 24323: + break block; + case 24324: + break block10; + case 24325: + break block; + case 24326: + break block10; + case 24327: + break block; + case 24328: + break block10; + case 24329: + break block; + case 24330: + break block10; + case 24331: + break block; + case 24332: + break block10; + case 24333: + break block; + case 24334: + break block10; + case 24335: + break block; + case 24336: + break block10; + case 24337: + break block; + case 24338: + break block10; + case 24339: + break block; + case 24340: + break block10; + case 24341: + break block; + case 24342: + break block10; + case 24343: + break block; + case 24344: + break block10; + case 24345: + break block; + case 24346: + break block10; + case 24347: + break block; + case 24348: + break block10; + case 24349: + break block; + case 24350: + break block10; + case 24351: + break block; + case 24352: + break block10; + case 24353: + break block; + case 24354: + break block10; + case 24355: + break block; + case 24356: + break block10; + case 24357: + break block; + case 24358: + break block10; + case 24359: + break block; + case 24360: + break block10; + case 24361: + break block; + case 24362: + break block10; + case 24363: + break block; + case 24364: + break block10; + case 24365: + break block; + case 24366: + break block10; + case 24367: + break block; + case 24368: + break block10; + case 24369: + break block; + case 24370: + break block10; + case 24371: + break block; + case 24372: + break block10; + case 24373: + break block; + case 24374: + break block10; + case 24375: + break block; + case 24376: + break block10; + case 24377: + break block; + case 24378: + break block10; + case 24379: + break block; + case 24380: + break block10; + case 24381: + break block; + case 24382: + break block10; + case 24383: + break block; + case 24384: + break block10; + case 24385: + break block; + case 24386: + break block10; + case 24387: + break block; + case 24388: + break block10; + case 24389: + break block; + case 24390: + break block10; + case 24391: + break block; + case 24392: + break block10; + case 24393: + break block; + case 24394: + break block10; + case 24395: + break block; + case 24396: + break block10; + case 24397: + break block; + case 24398: + break block10; + case 24399: + break block; + case 24400: + break block10; + case 24401: + break block; + case 24402: + break block10; + case 24403: + break block; + case 24404: + break block10; + case 24405: + break block; + case 24406: + break block10; + case 24407: + break block; + case 24408: + break block10; + case 24409: + break block; + case 24410: + break block10; + case 24411: + break block; + case 24412: + break block10; + case 24413: + break block; + case 24414: + break block10; + case 24415: + break block; + case 24416: + break block10; + case 24417: + break block; + case 24418: + break block10; + case 24419: + break block; + case 24420: + break block10; + case 24421: + break block; + case 24422: + break block10; + case 24423: + break block; + case 24424: + break block10; + case 24425: + break block; + case 24426: + break block10; + case 24427: + break block; + case 24428: + break block10; + case 24429: + break block; + case 24430: + break block10; + case 24431: + break block; + case 24432: + break block10; + case 24433: + break block; + case 24434: + break block10; + case 24435: + break block; + case 24436: + break block10; + case 24437: + break block; + case 24438: + break block10; + case 24439: + break block; + case 24440: + break block10; + case 24441: + break block; + case 24442: + break block10; + case 24443: + break block; + case 24444: + break block10; + case 24445: + break block; + case 24446: + break block10; + case 24447: + break block; + case 24448: + break block10; + case 24449: + break block; + case 24450: + break block10; + case 24451: + break block; + case 24452: + break block10; + case 24453: + break block; + case 24454: + break block10; + case 24455: + break block; + case 24456: + break block10; + case 24457: + break block; + case 24458: + break block10; + case 24459: + break block; + case 24460: + break block10; + case 24461: + break block; + case 24462: + break block10; + case 24463: + break block; + case 24464: + break block10; + case 24465: + break block; + case 24466: + break block10; + case 24467: + break block; + case 24468: + break block10; + case 24469: + break block; + case 24470: + break block10; + case 24471: + break block; + case 24472: + break block10; + case 24473: + break block; + case 24474: + break block10; + case 24475: + break block; + case 24476: + break block10; + case 24477: + break block; + case 24478: + break block10; + case 24479: + break block; + case 24480: + break block10; + case 24481: + break block; + case 24482: + break block10; + case 24483: + break block; + case 24484: + break block10; + case 24485: + break block; + case 24486: + break block10; + case 24487: + break block; + case 24488: + break block10; + case 24489: + break block; + case 24490: + break block10; + case 24491: + break block; + case 24492: + break block10; + case 24493: + break block; + case 24494: + break block10; + case 24495: + break block; + case 24496: + break block10; + case 24497: + break block; + case 24498: + break block10; + case 24499: + break block; + case 24500: + break block10; + case 24501: + break block; + case 24502: + break block10; + case 24503: + break block; + case 24504: + break block10; + case 24505: + break block; + case 24506: + break block10; + case 24507: + break block; + case 24508: + break block10; + case 24509: + break block; + case 24510: + break block10; + case 24511: + break block; + case 24512: + break block10; + case 24513: + break block; + case 24514: + break block10; + case 24515: + break block; + case 24516: + break block10; + case 24517: + break block; + case 24518: + break block10; + case 24519: + break block; + case 24520: + break block10; + case 24521: + break block; + case 24522: + break block10; + case 24523: + break block; + case 24524: + break block10; + case 24525: + break block; + case 24526: + break block10; + case 24527: + break block; + case 24528: + break block10; + case 24529: + break block; + case 24530: + break block10; + case 24531: + break block; + case 24532: + break block10; + case 24533: + break block; + case 24534: + break block10; + case 24535: + break block; + case 24536: + break block10; + case 24537: + break block; + case 24538: + break block10; + case 24539: + break block; + case 24540: + break block10; + case 24541: + break block; + case 24542: + break block10; + case 24543: + break block; + case 24544: + break block10; + case 24545: + break block; + case 24546: + break block10; + case 24547: + break block; + case 24548: + break block10; + case 24549: + break block; + case 24550: + break block10; + case 24551: + break block; + case 24552: + break block10; + case 24553: + break block; + case 24554: + break block10; + case 24555: + break block; + case 24556: + break block10; + case 24557: + break block; + case 24558: + break block10; + case 24559: + break block; + case 24560: + break block10; + case 24561: + break block; + case 24562: + break block10; + case 24563: + break block; + case 24564: + break block10; + case 24565: + break block; + case 24566: + break block10; + case 24567: + break block; + case 24568: + break block10; + case 24569: + break block; + case 24570: + break block10; + case 24571: + break block; + case 24572: + break block10; + case 24573: + break block; + case 24574: + break block10; + case 24575: + break block; + case 24576: + break block10; + case 24577: + break block; + case 24578: + break block10; + case 24579: + break block; + case 24580: + break block10; + case 24581: + break block; + case 24582: + break block10; + case 24583: + break block; + case 24584: + break block10; + case 24585: + break block; + case 24586: + break block10; + case 24587: + break block; + case 24588: + break block10; + case 24589: + break block; + case 24590: + break block10; + case 24591: + break block; + case 24592: + break block10; + case 24593: + break block; + case 24594: + break block10; + case 24595: + break block; + case 24596: + break block10; + case 24597: + break block; + case 24598: + break block10; + case 24599: + break block; + case 24600: + break block10; + case 24601: + break block; + case 24602: + break block10; + case 24603: + break block; + case 24604: + break block10; + case 24605: + break block; + case 24606: + break block10; + case 24607: + break block; + case 24608: + break block10; + case 24609: + break block; + case 24610: + break block10; + case 24611: + break block; + case 24612: + break block10; + case 24613: + break block; + case 24614: + break block10; + default: + break block; + }; + }; + return 0 | 0; + }; + return 1 | 0; + } + + function $$16() { + + } + + function $$17() { + block : { + dummy(); + switch (0 | 0) { + case 0: + break block; + case 1: + break block; + default: + break block; + }; + }; + } + + function $$18() { + block : { + dummy(); + switch (0 | 0) { + case 0: + break block; + case 1: + break block; + default: + break block; + }; + }; + } + + function $$19() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + dummy(); + $$1 = 2; + switch (0 | 0) { + case 0: + break block; + case 1: + break block; + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$20() { + var $$0 = 0, $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0; + fake_return_waka123 : { + loop_in : do { + $$1 = 3; + switch (0 | 0) { + case 0: + break fake_return_waka123; + default: + break fake_return_waka123; + }; + break loop_in; + } while (1); + }; + return $$1 | 0; + } + + function $$21() { + var $$0 = 0, $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0; + fake_return_waka123 : { + loop_in : do { + dummy(); + $$1 = 4; + switch (4294967295 | 0) { + case 0: + break fake_return_waka123; + case 1: + break fake_return_waka123; + default: + break fake_return_waka123; + }; + break loop_in; + } while (1); + }; + return $$1 | 0; + } + + function $$22() { + var $$0 = 0, $$1 = 0, $$2 = 0; + fake_return_waka123 : { + loop_in : do { + dummy(); + $$1 = 5; + switch (1 | 0) { + case 0: + break fake_return_waka123; + case 1: + break fake_return_waka123; + default: + break fake_return_waka123; + }; + break loop_in; + } while (1); + }; + return $$1 | 0; + } + + function $$23() { + var $$0 = 0, $$1 = 0; + block : { + $$0 = 9; + break block; + }; + return $$0 | 0; + } + + function $$24() { + + } + + function $$25() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 8; + switch (0 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$26() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 9; + switch (0 | 0) { + case 0: + break block; + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$27() { + + } + + function $$28() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 10; + switch (0 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$29() { + var $$0 = 0, $$1 = 0, $$2 = 0, $$3 = 0; + block : { + $$1 = 11; + switch (1 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$30() { + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0; + block : { + $i64toi32_block_0 : { + i64toi32_i32$0 = 0; + $$6 = 7; + switch (0 | 0) { + default: + break $i64toi32_block_0; + }; + }; + $$10 = $$6; + break block; + }; + return $$10 | 0; + } + + function $$31() { + var $$0 = 0, $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0; + $$if : { + $$1 = 2; + switch (0 | 0) { + default: + break $$if; + }; + }; + return $$1 | 0; + } + + function $$32($$0, $$1) { + $$0 = $$0 | 0; + $$1 = $$1 | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0; + block : { + if ($$0) { + $$4 = 3; + switch (0 | 0) { + default: + break block; + }; + } else $$6 = $$1; + $$4 = $$6; + }; + return $$4 | 0; + } + + function $$33($$0, $$1) { + $$0 = $$0 | 0; + $$1 = $$1 | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0; + block : { + $$if : { + if ($$0) $$7 = $$1; else { + $$4 = 4; + $$5 = $$4; + $$6 = $$4; + switch (0 | 0) { + case 0: + break block; + default: + break $$if; + }; + } + $$6 = $$7; + }; + $$5 = $$6; + }; + return $$5 | 0; + } + + function $$34($$0, $$1) { + $$0 = $$0 | 0; + $$1 = $$1 | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0; + block : { + $$3 = 5; + switch (0 | 0) { + default: + break block; + }; + }; + return $$3 | 0; + } + + function $$35($$0, $$1) { + $$0 = $$0 | 0; + $$1 = $$1 | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0; + block : { + $$2 = $$0; + $$4 = 6; + switch (1 | 0) { + default: + break block; + }; + }; + return $$4 | 0; + } + + function $$36() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 7; + switch (1 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function f($$0, $$1, $$2) { + $$0 = $$0 | 0; + $$1 = $$1 | 0; + $$2 = $$2 | 0; + var wasm2asm_i32$0 = 0; + return 4294967295 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$38() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 12; + switch (1 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$39() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 13; + switch (1 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$40() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 14; + switch (1 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$41() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 20; + switch (1 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$42() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 21; + switch (1 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$43() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 22; + switch (1 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$44() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 23; + switch (1 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$45() { + var $$0 = Math_fround(0), $$1 = 0, $$2 = 0, $$3 = 0; + block : { + $$2 = 17; + switch (1 | 0) { + default: + break block; + }; + }; + return $$2 | 0; + } + + function $$46() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 2; + switch (1 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$47() { + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0; + block : { + $i64toi32_block_0 : { + i64toi32_i32$0 = 0; + $$6 = 30; + switch (1 | 0) { + default: + break $i64toi32_block_0; + }; + }; + $$10 = $$6; + break block; + }; + return $$10 | 0; + } + + function $$48() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 30; + switch (1 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$49() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 31; + switch (1 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$50() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 32; + switch (0 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$51() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 33; + switch (0 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$52() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 3; + switch (0 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$53() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 3; + switch (0 | 0) { + case 0: + break block; + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$54() { + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0; + block : { + $i64toi32_block_0 : { + i64toi32_i32$1 = 0; + $$9 = 45; + switch (0 | 0) { + default: + break $i64toi32_block_0; + }; + }; + $$13 = $$9; + break block; + }; + return $$13 | 0; + } + + function $$55() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 44; + switch (0 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$56() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 43; + switch (0 | 0) { + case 0: + break block; + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$57() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 42; + switch (0 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$58() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 41; + switch (0 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$59() { + var $$0 = 0, $$1 = 0, $$2 = 0; + block : { + $$1 = 40; + switch (0 | 0) { + default: + break block; + }; + }; + return $$1 | 0; + } + + function $$60($$0) { + $$0 = $$0 | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0; + block : { + block11 : { + block12 : { + $$2 = 16; + $$3 = $$2; + $$4 = $$2; + $$5 = $$2; + switch ($$0 | 0) { + case 0: + break block12; + case 1: + break block11; + default: + break block; + }; + }; + $$4 = 2 + $$5 | 0; + }; + $$3 = 1 + $$4 | 0; + }; + return $$3 | 0; + } + + function $$61($$0) { + $$0 = $$0 | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0; + block : { + block13 : { + block14 : { + $$2 = 8; + $$3 = $$2; + $$4 = $$2; + $$5 = $$2; + switch ($$0 | 0) { + case 0: + break block; + case 1: + break block13; + default: + break block14; + }; + }; + $$4 = 16; + }; + $$3 = 1 + $$4 | 0; + }; + return $$3 | 0; + } + + function $$62($$0) { + $$0 = $$0 | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0; + block : { + block15 : { + block16 : { + $$2 = 8; + $$3 = $$2; + $$4 = $$2; + $$5 = $$2; + switch ($$0 | 0) { + case 0: + break block16; + case 1: + break block15; + default: + break block; + }; + }; + $$4 = 16; + }; + $$3 = 1 + $$4 | 0; + }; + return $$3 | 0; + } + + function $$63($$0) { + $$0 = $$0 | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0; + block : { + block17 : { + $$2 = 8; + $$3 = $$2; + $$4 = $$2; + switch ($$0 | 0) { + case 0: + break block17; + case 1: + break block; + default: + break block17; + }; + }; + $$3 = 1 + $$4 | 0; + }; + return $$3 | 0; + } + + function $$64($$0) { + $$0 = $$0 | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0; + block : { + block18 : { + block19 : { + $$2 = 8; + $$3 = $$2; + $$4 = $$2; + $$5 = $$2; + switch ($$0 | 0) { + case 0: + break block19; + case 1: + break block18; + default: + break block; + }; + }; + $$4 = 16; + }; + $$3 = 1 + $$4 | 0; + }; + return $$3 | 0; + } + + function $$65($$0) { + $$0 = $$0 | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0; + block : { + block20 : { + $$2 = 8; + $$3 = $$2; + $$4 = $$2; + switch ($$0 | 0) { + case 0: + break block20; + case 1: + break block; + default: + break block20; + }; + }; + $$3 = 1 + $$4 | 0; + }; + return $$3 | 0; + } + + function __wasm_ctz_i32(x) { + x = x | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0; + if ((x | 0) == (0 | 0)) $$9 = 32; else $$9 = 31 - Math_clz32(x ^ (x - 1 | 0) | 0) | 0; + return $$9 | 0; + } + + function __wasm_popcnt_i32(x) { + x = x | 0; + var count = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0; + count = 0; + b : { + l : do { + $$5 = count; + if ((x | 0) == (0 | 0)) break b; + x = x & (x - 1 | 0) | 0; + count = count + 1 | 0; + continue l; + break l; + } while (1); + }; + return $$5 | 0; + } + + function __wasm_rotl_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 >>> (k & 31 | 0) | 0) & x | 0) << (k & 31 | 0) | 0 | (((4294967295 << (32 - (k & 31 | 0) | 0) | 0) & x | 0) >>> (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function __wasm_rotr_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 << (k & 31 | 0) | 0) & x | 0) >>> (k & 31 | 0) | 0 | (((4294967295 >>> (32 - (k & 31 | 0) | 0) | 0) & x | 0) << (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + var FUNCTION_TABLE_iiii = [f]; + return { + type_i32: $$1, + type_i64: $$2, + type_f32: $$3, + type_f64: $$4, + type_i32_value: $$5, + type_i64_value: $$6, + type_f32_value: $$7, + type_f64_value: $$8, + empty: $$9, + empty_value: $$10, + singleton: $$11, + singleton_value: $$12, + multiple: $$13, + multiple_value: $$14, + large: $$15, + as_block_first: $$16, + as_block_mid: $$17, + as_block_last: $$18, + as_block_value: $$19, + as_loop_first: $$20, + as_loop_mid: $$21, + as_loop_last: $$22, + as_br_value: $$23, + as_br_if_cond: $$24, + as_br_if_value: $$25, + as_br_if_value_cond: $$26, + as_br_table_index: $$27, + as_br_table_value: $$28, + as_br_table_value_index: $$29, + as_return_value: $$30, + as_if_cond: $$31, + as_if_then: $$32, + as_if_else: $$33, + as_select_first: $$34, + as_select_second: $$35, + as_select_cond: $$36, + as_call_first: $$38, + as_call_mid: $$39, + as_call_last: $$40, + as_call_indirect_first: $$41, + as_call_indirect_mid: $$42, + as_call_indirect_last: $$43, + as_call_indirect_func: $$44, + as_set_local_value: $$45, + as_load_address: $$46, + as_loadN_address: $$47, + as_store_address: $$48, + as_store_value: $$49, + as_storeN_address: $$50, + as_storeN_value: $$51, + as_unary_operand: $$52, + as_binary_left: $$53, + as_binary_right: $$54, + as_test_operand: $$55, + as_compare_left: $$56, + as_compare_right: $$57, + as_convert_operand: $$58, + as_grow_memory_size: $$59, + nested_block_value: $$60, + nested_br_value: $$61, + nested_br_if_value: $$62, + nested_br_if_value_cond: $$63, + nested_br_table_value: $$64, + nested_br_table_value_index: $$65 + }; +} + diff --git a/src/binaryen/test/break-to-return.wasm b/src/binaryen/test/break-to-return.wasm new file mode 100644 index 0000000000000000000000000000000000000000..c1e51e2d61460631f78a463ade550fabee76523a GIT binary patch literal 51 zcmV~$!3}^Q5CFm5BT5vDpfpK%nfS7RqjYB&-z#ACj!d(JY`d;lQLAOl31{=5(|s=5 E54#@*UjP6A literal 0 HcmV?d00001 diff --git a/src/binaryen/test/break-to-return.wasm.fromBinary b/src/binaryen/test/break-to-return.wasm.fromBinary new file mode 100644 index 0000000000..72588beadf --- /dev/null +++ b/src/binaryen/test/break-to-return.wasm.fromBinary @@ -0,0 +1,16 @@ +(module + (type $0 (func (param i32 i32) (result i32))) + (memory $0 256 256) + (export "add" (func $0)) + (func $0 (; 0 ;) (type $0) (param $var$0 i32) (param $var$1 i32) (result i32) + (block $label$0 (result i32) + (br $label$0 + (i32.add + (get_local $var$0) + (get_local $var$1) + ) + ) + ) + ) +) + diff --git a/src/binaryen/test/calls.cpp b/src/binaryen/test/calls.cpp new file mode 100644 index 0000000000..0afb0eb694 --- /dev/null +++ b/src/binaryen/test/calls.cpp @@ -0,0 +1,24 @@ +#include + +extern "C" { + +int inner(int x) { + return x*x + 2; +} + +int EMSCRIPTEN_KEEPALIVE simple(int x) { + return inner(x); +} + +int EMSCRIPTEN_KEEPALIVE fibo(int x) { + if (x == 0 || x == 1) return 1; + return fibo(x-1) + fibo(x-2); +} + +int EMSCRIPTEN_KEEPALIVE run_script() { + emscripten_run_script("Module.print('hello from called script')"); + return emscripten_run_script_int("1+2+3+4-1"); +} + +} + diff --git a/src/binaryen/test/calls.emcc b/src/binaryen/test/calls.emcc new file mode 100644 index 0000000000..40c421eee9 --- /dev/null +++ b/src/binaryen/test/calls.emcc @@ -0,0 +1 @@ +["-s", "ASSERTIONS=0"] diff --git a/src/binaryen/test/calls.post.js b/src/binaryen/test/calls.post.js new file mode 100644 index 0000000000..bec4d498b8 --- /dev/null +++ b/src/binaryen/test/calls.post.js @@ -0,0 +1,23 @@ + +function test(name) { + Module.print(name); + function doTest(x) { + Module.print(' ' + [x] + ' ==> ' + Module['_' + name](x)); + } + doTest(1); + doTest(2); + doTest(3); + doTest(4); + doTest(7); +} + +test('simple'); +test('fibo'); + +Module.print('run_script'); +Module.print(Module['_run_script']()); + +Module.print('too many/few arguments'); +Module.print(Module['_simple']()); +Module.print(Module['_simple'](10, 20)); + diff --git a/src/binaryen/test/calls.txt b/src/binaryen/test/calls.txt new file mode 100644 index 0000000000..6a175ed048 --- /dev/null +++ b/src/binaryen/test/calls.txt @@ -0,0 +1,18 @@ +simple + 1 ==> 3 + 2 ==> 6 + 3 ==> 11 + 4 ==> 18 + 7 ==> 51 +fibo + 1 ==> 1 + 2 ==> 2 + 3 ==> 3 + 4 ==> 5 + 7 ==> 21 +run_script +hello from called script +9 +too many/few arguments +2 +102 diff --git a/src/binaryen/test/consume-stacky.wasm b/src/binaryen/test/consume-stacky.wasm new file mode 100644 index 0000000000000000000000000000000000000000..8193dab45a5a1e8aa8c4efc23408d8ce32c2196d GIT binary patch literal 40 tcmZQbEY4+QU|?WmWlUgTtY>CoWME}s1OhHzMs5a2Mn@(`W-}%RZU9p?18e{Q literal 0 HcmV?d00001 diff --git a/src/binaryen/test/consume-stacky.wasm.fromBinary b/src/binaryen/test/consume-stacky.wasm.fromBinary new file mode 100644 index 0000000000..b92d207b0b --- /dev/null +++ b/src/binaryen/test/consume-stacky.wasm.fromBinary @@ -0,0 +1,16 @@ +(module + (type $0 (func (result i32))) + (memory $0 1 1) + (func $0 (; 0 ;) (type $0) (result i32) + (local $0 i32) + (set_local $0 + (i32.const 1) + ) + (i32.store + (i32.const 2) + (i32.const 3) + ) + (get_local $0) + ) +) + diff --git a/src/binaryen/test/control_flow.cpp b/src/binaryen/test/control_flow.cpp new file mode 100644 index 0000000000..504db2646a --- /dev/null +++ b/src/binaryen/test/control_flow.cpp @@ -0,0 +1,117 @@ +#include +#include +#include + +extern "C" { + +int EMSCRIPTEN_KEEPALIVE check_if(int x) { + if (x < 10) x++; + return x; +} + +int EMSCRIPTEN_KEEPALIVE check_loop(int x) { + while (x < 100) x *= 2; + return x; +} + +int EMSCRIPTEN_KEEPALIVE check_loop_break(int x) { + while (x < 100) { + x *= 2; + if (x > 30) break; + x++; + } + return x; +} + +int EMSCRIPTEN_KEEPALIVE check_loop_continue(int x) { + while (x < 100) { + x *= 2; + if (x > 30) continue; + x++; + } + return x; +} + +int EMSCRIPTEN_KEEPALIVE check_do_loop(int x) { + do { + x *= 2; + if (x > 1000) break; + x--; + if (x > 30) continue; + x++; + } while (x < 100); + return x; +} + +int EMSCRIPTEN_KEEPALIVE check_do_once(int x) { + do { + x *= 2; + if (x > 1000) break; + x--; + if (x > 30) continue; + x++; + } while (0); + return x; +} + +int EMSCRIPTEN_KEEPALIVE check_while_forever(int x) { + while (1) { + x *= 2; + if (x > 1000) break; + x--; + if (x > 30) continue; + x++; + } + return x; +} + +int EMSCRIPTEN_KEEPALIVE check_switch(int x) { + switch (x) { + case 1: return 10; + case 3: return 20; + case 5: return 30; + case 10: return 40; + case 11: return 50; + default: return 60; + } + return 70; +} + +int EMSCRIPTEN_KEEPALIVE check_switch_nodefault(int x) { + switch (x) { + case 1: return 10; + case 3: return 20; + case 5: return 30; + case 10: return 40; + case 11: return 50; + } + return 70; +} + +int EMSCRIPTEN_KEEPALIVE check_switch_rdefault(int x) { + switch (x) { + default: return -60; + case 1: return 10; + case 3: return 20; + case 5: return 30; + case 10: return 40; + case 11: return 50; + } + return 70; +} + +int EMSCRIPTEN_KEEPALIVE check_switch_fallthrough(int x) { + switch (x) { + case 1: return 10; + case 2: + case 3: x++; + case 5: return x; + case 10: return 40; + case 11: return 50; + default: return 60; + } + return 70; +} + +} + diff --git a/src/binaryen/test/control_flow.emcc b/src/binaryen/test/control_flow.emcc new file mode 100644 index 0000000000..40c421eee9 --- /dev/null +++ b/src/binaryen/test/control_flow.emcc @@ -0,0 +1 @@ +["-s", "ASSERTIONS=0"] diff --git a/src/binaryen/test/control_flow.post.js b/src/binaryen/test/control_flow.post.js new file mode 100644 index 0000000000..823580e7b3 --- /dev/null +++ b/src/binaryen/test/control_flow.post.js @@ -0,0 +1,26 @@ + +function test(name) { + Module.print(name); + function doTest(x) { + Module.print(' ' + [x] + ' ==> ' + Module['_check_' + name](x)); + } + doTest(1); + doTest(2); + doTest(3); + doTest(4); + doTest(11); + doTest(90); +} + +test('if'); +test('loop'); +test('loop_break'); +test('loop_continue'); +test('do_loop'); +test('do_once'); +test('while_forever'); +test('switch'); +test('switch_nodefault'); +test('switch_rdefault'); +test('switch_fallthrough'); + diff --git a/src/binaryen/test/control_flow.txt b/src/binaryen/test/control_flow.txt new file mode 100644 index 0000000000..68ee62bcdf --- /dev/null +++ b/src/binaryen/test/control_flow.txt @@ -0,0 +1,77 @@ +if + 1 ==> 2 + 2 ==> 3 + 3 ==> 4 + 4 ==> 5 + 11 ==> 11 + 90 ==> 90 +loop + 1 ==> 128 + 2 ==> 128 + 3 ==> 192 + 4 ==> 128 + 11 ==> 176 + 90 ==> 180 +loop_break + 1 ==> 62 + 2 ==> 46 + 3 ==> 62 + 4 ==> 38 + 11 ==> 46 + 90 ==> 180 +loop_continue + 1 ==> 124 + 2 ==> 184 + 3 ==> 124 + 4 ==> 152 + 11 ==> 184 + 90 ==> 180 +do_loop + 1 ==> 121 + 2 ==> 121 + 3 ==> 185 + 4 ==> 121 + 11 ==> 169 + 90 ==> 179 +do_once + 1 ==> 2 + 2 ==> 4 + 3 ==> 6 + 4 ==> 8 + 11 ==> 22 + 90 ==> 179 +while_forever + 1 ==> 1922 + 2 ==> 1922 + 3 ==> 1474 + 4 ==> 1922 + 11 ==> 1346 + 90 ==> 1426 +switch + 1 ==> 10 + 2 ==> 60 + 3 ==> 20 + 4 ==> 60 + 11 ==> 50 + 90 ==> 60 +switch_nodefault + 1 ==> 10 + 2 ==> 70 + 3 ==> 20 + 4 ==> 70 + 11 ==> 50 + 90 ==> 70 +switch_rdefault + 1 ==> 10 + 2 ==> -60 + 3 ==> 20 + 4 ==> -60 + 11 ==> 50 + 90 ==> -60 +switch_fallthrough + 1 ==> 10 + 2 ==> 3 + 3 ==> 4 + 4 ==> 60 + 11 ==> 50 + 90 ==> 60 diff --git a/src/binaryen/test/ctor-eval/bad-indirect-call.wast b/src/binaryen/test/ctor-eval/bad-indirect-call.wast new file mode 100644 index 0000000000..cbc48427ab --- /dev/null +++ b/src/binaryen/test/ctor-eval/bad-indirect-call.wast @@ -0,0 +1,15 @@ +(module + (type $v (func)) + (memory 256 256) + (data (i32.const 10) "waka waka waka waka waka") + (table 1 1 anyfunc) + (elem (i32.const 0) $call-indirect) + (export "test1" $test1) + (func $test1 + (call_indirect (type $v) (i32.const 1)) ;; unsafe to call, out of range + (i32.store8 (i32.const 20) (i32.const 120)) + ) + (func $call-indirect + (i32.store8 (i32.const 40) (i32.const 67)) + ) +) diff --git a/src/binaryen/test/ctor-eval/bad-indirect-call.wast.ctors b/src/binaryen/test/ctor-eval/bad-indirect-call.wast.ctors new file mode 100644 index 0000000000..a5bce3fd25 --- /dev/null +++ b/src/binaryen/test/ctor-eval/bad-indirect-call.wast.ctors @@ -0,0 +1 @@ +test1 diff --git a/src/binaryen/test/ctor-eval/bad-indirect-call.wast.out b/src/binaryen/test/ctor-eval/bad-indirect-call.wast.out new file mode 100644 index 0000000000..9c9897731e --- /dev/null +++ b/src/binaryen/test/ctor-eval/bad-indirect-call.wast.out @@ -0,0 +1,23 @@ +(module + (type $v (func)) + (table 1 1 anyfunc) + (elem (i32.const 0) $call-indirect) + (memory $0 256 256) + (data (i32.const 10) "waka waka waka waka waka") + (export "test1" (func $test1)) + (func $test1 (; 0 ;) (type $v) + (call_indirect (type $v) + (i32.const 1) + ) + (i32.store8 + (i32.const 20) + (i32.const 120) + ) + ) + (func $call-indirect (; 1 ;) (type $v) + (i32.store8 + (i32.const 40) + (i32.const 67) + ) + ) +) diff --git a/src/binaryen/test/ctor-eval/bad-indirect-call2.wast b/src/binaryen/test/ctor-eval/bad-indirect-call2.wast new file mode 100644 index 0000000000..a19d02be7d --- /dev/null +++ b/src/binaryen/test/ctor-eval/bad-indirect-call2.wast @@ -0,0 +1,16 @@ +(module + (type $v (func)) + (memory 256 256) + (data (i32.const 10) "waka waka waka waka waka") + (import "env" "_abort" (func $_abort)) + (table 2 2 anyfunc) + (elem (i32.const 0) $_abort $call-indirect) + (export "test1" $test1) + (func $test1 + (call_indirect (type $v) (i32.const 0)) ;; unsafe to call, imported + (i32.store8 (i32.const 20) (i32.const 120)) + ) + (func $call-indirect + (i32.store8 (i32.const 40) (i32.const 67)) + ) +) diff --git a/src/binaryen/test/ctor-eval/bad-indirect-call2.wast.ctors b/src/binaryen/test/ctor-eval/bad-indirect-call2.wast.ctors new file mode 100644 index 0000000000..a5bce3fd25 --- /dev/null +++ b/src/binaryen/test/ctor-eval/bad-indirect-call2.wast.ctors @@ -0,0 +1 @@ +test1 diff --git a/src/binaryen/test/ctor-eval/bad-indirect-call2.wast.out b/src/binaryen/test/ctor-eval/bad-indirect-call2.wast.out new file mode 100644 index 0000000000..b6a50c2f5e --- /dev/null +++ b/src/binaryen/test/ctor-eval/bad-indirect-call2.wast.out @@ -0,0 +1,25 @@ +(module + (type $v (func)) + (type $FUNCSIG$v (func)) + (import "env" "_abort" (func $_abort)) + (table 2 2 anyfunc) + (elem (i32.const 0) $_abort $call-indirect) + (memory $0 256 256) + (data (i32.const 10) "waka waka waka waka waka") + (export "test1" (func $test1)) + (func $test1 (; 1 ;) (type $v) + (call_indirect (type $v) + (i32.const 0) + ) + (i32.store8 + (i32.const 20) + (i32.const 120) + ) + ) + (func $call-indirect (; 2 ;) (type $v) + (i32.store8 + (i32.const 40) + (i32.const 67) + ) + ) +) diff --git a/src/binaryen/test/ctor-eval/basics-flatten.wast b/src/binaryen/test/ctor-eval/basics-flatten.wast new file mode 100644 index 0000000000..da8b76163d --- /dev/null +++ b/src/binaryen/test/ctor-eval/basics-flatten.wast @@ -0,0 +1,36 @@ +(module + (type $v (func)) + (memory 256 256) + ;; test flattening of multiple segments + (data (i32.const 10) "waka ") + (data (i32.const 15) "waka") ;; skip a byte here + (data (i32.const 20) "waka waka waka") + (table 1 1 anyfunc) + (elem (i32.const 0) $call-indirect) + (export "test1" $test1) + (export "test2" $test2) + (export "test3" $test3) + (func $test1 + (drop (i32.const 0)) ;; no work at all, really + (call $safe-to-call) ;; safe to call + (call_indirect (type $v) (i32.const 0)) ;; safe to call + ) + (func $test2 + (drop (i32.load (i32.const 12))) ;; a safe load + (drop (i32.load16 (i32.const 12))) + (drop (i32.load8 (i32.const 12))) + ) + (func $test3 + (i32.store (i32.const 12) (i32.const 115)) ;; a safe store, should alter memory + (i32.store16 (i32.const 20) (i32.const 31353)) + (i32.store8 (i32.const 23) (i32.const 120)) + ) + (func $safe-to-call + (drop (i32.const 1)) + (i32.store8 (i32.const 10) (i32.const 110)) ;; safe write too (lowest possible) + (i32.store8 (i32.const 33) (i32.const 109)) ;; safe write too (highest possible) + ) + (func $call-indirect + (i32.store8 (i32.const 40) (i32.const 67)) + ) +) diff --git a/src/binaryen/test/ctor-eval/basics-flatten.wast.ctors b/src/binaryen/test/ctor-eval/basics-flatten.wast.ctors new file mode 100644 index 0000000000..c7060ede55 --- /dev/null +++ b/src/binaryen/test/ctor-eval/basics-flatten.wast.ctors @@ -0,0 +1 @@ +test1,test2,test3 diff --git a/src/binaryen/test/ctor-eval/basics-flatten.wast.out b/src/binaryen/test/ctor-eval/basics-flatten.wast.out new file mode 100644 index 0000000000..b3b937c591 --- /dev/null +++ b/src/binaryen/test/ctor-eval/basics-flatten.wast.out @@ -0,0 +1,35 @@ +(module + (type $v (func)) + (table 1 1 anyfunc) + (elem (i32.const 0) $call-indirect) + (memory $0 256 256) + (data (i32.const 10) "nas\00\00\00aka\00yzkx waka wakm\00\00\00\00\00\00C") + (export "test1" (func $test1)) + (export "test2" (func $test2)) + (export "test3" (func $test3)) + (func $test1 (; 0 ;) (type $v) + (nop) + ) + (func $test2 (; 1 ;) (type $v) + (nop) + ) + (func $test3 (; 2 ;) (type $v) + (nop) + ) + (func $safe-to-call (; 3 ;) (type $v) + (i32.store8 + (i32.const 10) + (i32.const 110) + ) + (i32.store8 + (i32.const 33) + (i32.const 109) + ) + ) + (func $call-indirect (; 4 ;) (type $v) + (i32.store8 + (i32.const 40) + (i32.const 67) + ) + ) +) diff --git a/src/binaryen/test/ctor-eval/basics.wast b/src/binaryen/test/ctor-eval/basics.wast new file mode 100644 index 0000000000..997e2cd112 --- /dev/null +++ b/src/binaryen/test/ctor-eval/basics.wast @@ -0,0 +1,33 @@ +(module + (type $v (func)) + (memory 256 256) + (data (i32.const 10) "waka waka waka waka waka") + (table 1 1 anyfunc) + (elem (i32.const 0) $call-indirect) + (export "test1" $test1) + (export "test2" $test2) + (export "test3" $test3) + (func $test1 + (drop (i32.const 0)) ;; no work at all, really + (call $safe-to-call) ;; safe to call + (call_indirect (type $v) (i32.const 0)) ;; safe to call + ) + (func $test2 + (drop (i32.load (i32.const 12))) ;; a safe load + (drop (i32.load16 (i32.const 12))) + (drop (i32.load8 (i32.const 12))) + ) + (func $test3 + (i32.store (i32.const 12) (i32.const 115)) ;; a safe store, should alter memory + (i32.store16 (i32.const 20) (i32.const 31353)) + (i32.store8 (i32.const 23) (i32.const 120)) + ) + (func $safe-to-call + (drop (i32.const 1)) + (i32.store8 (i32.const 10) (i32.const 110)) ;; safe write too (lowest possible) + (i32.store8 (i32.const 33) (i32.const 109)) ;; safe write too (highest possible) + ) + (func $call-indirect + (i32.store8 (i32.const 40) (i32.const 67)) + ) +) diff --git a/src/binaryen/test/ctor-eval/basics.wast.ctors b/src/binaryen/test/ctor-eval/basics.wast.ctors new file mode 100644 index 0000000000..c7060ede55 --- /dev/null +++ b/src/binaryen/test/ctor-eval/basics.wast.ctors @@ -0,0 +1 @@ +test1,test2,test3 diff --git a/src/binaryen/test/ctor-eval/basics.wast.out b/src/binaryen/test/ctor-eval/basics.wast.out new file mode 100644 index 0000000000..3179f7b36f --- /dev/null +++ b/src/binaryen/test/ctor-eval/basics.wast.out @@ -0,0 +1,35 @@ +(module + (type $v (func)) + (table 1 1 anyfunc) + (elem (i32.const 0) $call-indirect) + (memory $0 256 256) + (data (i32.const 10) "nas\00\00\00aka yzkx waka wakm\00\00\00\00\00\00C") + (export "test1" (func $test1)) + (export "test2" (func $test2)) + (export "test3" (func $test3)) + (func $test1 (; 0 ;) (type $v) + (nop) + ) + (func $test2 (; 1 ;) (type $v) + (nop) + ) + (func $test3 (; 2 ;) (type $v) + (nop) + ) + (func $safe-to-call (; 3 ;) (type $v) + (i32.store8 + (i32.const 10) + (i32.const 110) + ) + (i32.store8 + (i32.const 33) + (i32.const 109) + ) + ) + (func $call-indirect (; 4 ;) (type $v) + (i32.store8 + (i32.const 40) + (i32.const 67) + ) + ) +) diff --git a/src/binaryen/test/ctor-eval/imported-min.wast b/src/binaryen/test/ctor-eval/imported-min.wast new file mode 100644 index 0000000000..8972a2ee1e --- /dev/null +++ b/src/binaryen/test/ctor-eval/imported-min.wast @@ -0,0 +1,48 @@ +(module + (memory 256 256) + (data (i32.const 10) "waka waka waka waka waka") + ;; stack imports are special + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + ;; other imports must not be touched! + (import "env" "tempDoublePtr" (global $tempDoublePtr i32)) + (export "test1" $test1) + (export "test2" $test2) + (export "test3" $test3) + ;; ok to modify a global, if we keep it the same value + (global $mine (mut i32) (i32.const 1)) + ;; stack imports are ok to use. their uses are the same as other + ;; globals - must keep the same value (which means, unwind the stack) + ;; here the global names are "minified" + (global $global0 (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $global1 (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + ;; a global initialized by an import, so bad, but ok if not used + (global $do-not-use (mut i32) (get_global $tempDoublePtr)) + (func $test1 + (local $temp i32) + (set_global $mine (i32.const 1)) + (set_local $temp (get_global $global0)) + (set_global $global0 (i32.const 1337)) ;; bad + (set_global $global0 (get_local $temp)) ;; save us + (set_global $global1 (i32.const 913370)) ;; bad + (set_global $global1 (get_local $temp)) ;; save us + ;; use the stack memory + (i32.store (get_local $temp) (i32.const 1337)) + (if + (i32.ne + (i32.load (get_local $temp)) + (i32.const 1337) + ) + (unreachable) ;; they should be equal, never get here + ) + ;; finally, do a valid store + (i32.store8 (i32.const 12) (i32.const 115)) + ) + (func $test2 + (set_global $tempDoublePtr (i32.const 1)) ;; bad! + (i32.store8 (i32.const 13) (i32.const 115)) + ) + (func $test3 + (i32.store8 (i32.const 14) (i32.const 115)) + ) +) diff --git a/src/binaryen/test/ctor-eval/imported-min.wast.ctors b/src/binaryen/test/ctor-eval/imported-min.wast.ctors new file mode 100644 index 0000000000..c7060ede55 --- /dev/null +++ b/src/binaryen/test/ctor-eval/imported-min.wast.ctors @@ -0,0 +1 @@ +test1,test2,test3 diff --git a/src/binaryen/test/ctor-eval/imported-min.wast.out b/src/binaryen/test/ctor-eval/imported-min.wast.out new file mode 100644 index 0000000000..dd0f888417 --- /dev/null +++ b/src/binaryen/test/ctor-eval/imported-min.wast.out @@ -0,0 +1,34 @@ +(module + (type $0 (func)) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr i32)) + (global $mine (mut i32) (i32.const 1)) + (global $global0 (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $global1 (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $do-not-use (mut i32) (get_global $tempDoublePtr)) + (memory $0 256 256) + (data (i32.const 10) "wasa waka waka waka waka") + (export "test1" (func $test1)) + (export "test2" (func $test2)) + (export "test3" (func $test3)) + (func $test1 (; 0 ;) (type $0) + (local $temp i32) + (nop) + ) + (func $test2 (; 1 ;) (type $0) + (set_global $tempDoublePtr + (i32.const 1) + ) + (i32.store8 + (i32.const 13) + (i32.const 115) + ) + ) + (func $test3 (; 2 ;) (type $0) + (i32.store8 + (i32.const 14) + (i32.const 115) + ) + ) +) diff --git a/src/binaryen/test/ctor-eval/imported.wast b/src/binaryen/test/ctor-eval/imported.wast new file mode 100644 index 0000000000..3f065377d2 --- /dev/null +++ b/src/binaryen/test/ctor-eval/imported.wast @@ -0,0 +1,45 @@ +(module + (memory 256 256) + (data (i32.const 10) "waka waka waka waka waka") + ;; stack imports are special + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + ;; other imports must not be touched! + (import "env" "tempDoublePtr" (global $tempDoublePtr i32)) + (export "test1" $test1) + (export "test2" $test2) + (export "test3" $test3) + ;; ok to modify a global, if we keep it the same value + (global $mine (mut i32) (i32.const 1)) + ;; stack imports are ok to use. their uses are the same as other + ;; globals - must keep the same value (which means, unwind the stack) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + ;; a global initialized by an import, so bad, but ok if not used + (global $do-not-use (mut i32) (get_global $tempDoublePtr)) + (func $test1 + (local $temp i32) + (set_global $mine (i32.const 1)) + (set_local $temp (get_global $STACKTOP)) + (set_global $STACKTOP (i32.const 1337)) ;; bad + (set_global $STACKTOP (get_local $temp)) ;; save us + ;; use the stack memory + (i32.store (get_local $temp) (i32.const 1337)) + (if + (i32.ne + (i32.load (get_local $temp)) + (i32.const 1337) + ) + (unreachable) ;; they should be equal, never get here + ) + ;; finally, do a valid store + (i32.store8 (i32.const 12) (i32.const 115)) + ) + (func $test2 + (set_global $tempDoublePtr (i32.const 1)) ;; bad! + (i32.store8 (i32.const 13) (i32.const 115)) + ) + (func $test3 + (i32.store8 (i32.const 14) (i32.const 115)) + ) +) diff --git a/src/binaryen/test/ctor-eval/imported.wast.ctors b/src/binaryen/test/ctor-eval/imported.wast.ctors new file mode 100644 index 0000000000..c7060ede55 --- /dev/null +++ b/src/binaryen/test/ctor-eval/imported.wast.ctors @@ -0,0 +1 @@ +test1,test2,test3 diff --git a/src/binaryen/test/ctor-eval/imported.wast.out b/src/binaryen/test/ctor-eval/imported.wast.out new file mode 100644 index 0000000000..6a7557e88d --- /dev/null +++ b/src/binaryen/test/ctor-eval/imported.wast.out @@ -0,0 +1,34 @@ +(module + (type $0 (func)) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr i32)) + (global $mine (mut i32) (i32.const 1)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $do-not-use (mut i32) (get_global $tempDoublePtr)) + (memory $0 256 256) + (data (i32.const 10) "wasa waka waka waka waka") + (export "test1" (func $test1)) + (export "test2" (func $test2)) + (export "test3" (func $test3)) + (func $test1 (; 0 ;) (type $0) + (local $temp i32) + (nop) + ) + (func $test2 (; 1 ;) (type $0) + (set_global $tempDoublePtr + (i32.const 1) + ) + (i32.store8 + (i32.const 13) + (i32.const 115) + ) + ) + (func $test3 (; 2 ;) (type $0) + (i32.store8 + (i32.const 14) + (i32.const 115) + ) + ) +) diff --git a/src/binaryen/test/ctor-eval/imported2.wast b/src/binaryen/test/ctor-eval/imported2.wast new file mode 100644 index 0000000000..bfdbc5ee80 --- /dev/null +++ b/src/binaryen/test/ctor-eval/imported2.wast @@ -0,0 +1,26 @@ +(module + (memory 256 256) + (data (i32.const 10) "waka waka waka waka waka") + ;; stack imports are special-cased + (import "env" "STACKTOP" (global $STACKTOP i32)) + (import "env" "STACK_MAX" (global $STACK_MAX i32)) + ;; other imports must not be touched! + (import "env" "tempDoublePtr" (global $tempDoublePtr i32)) + (export "test1" $test1) + (export "test2" $test2) + (export "test3" $test3) + ;; ok to modify a global, if we keep it the same value + (global $mine (mut i32) (i32.const 1)) + (func $test1 + (set_global $mine (i32.const 2)) + (set_global $mine (i32.const 1)) ;; restore! + (i32.store8 (i32.const 12) (i32.const 115)) + ) + (func $test2 + (set_global $mine (i32.const 2)) ;; embadden + (i32.store8 (i32.const 13) (i32.const 115)) + ) + (func $test3 + (i32.store8 (i32.const 14) (i32.const 115)) + ) +) diff --git a/src/binaryen/test/ctor-eval/imported2.wast.ctors b/src/binaryen/test/ctor-eval/imported2.wast.ctors new file mode 100644 index 0000000000..c7060ede55 --- /dev/null +++ b/src/binaryen/test/ctor-eval/imported2.wast.ctors @@ -0,0 +1 @@ +test1,test2,test3 diff --git a/src/binaryen/test/ctor-eval/imported2.wast.out b/src/binaryen/test/ctor-eval/imported2.wast.out new file mode 100644 index 0000000000..add5a1e99e --- /dev/null +++ b/src/binaryen/test/ctor-eval/imported2.wast.out @@ -0,0 +1,30 @@ +(module + (type $0 (func)) + (import "env" "STACKTOP" (global $STACKTOP i32)) + (import "env" "STACK_MAX" (global $STACK_MAX i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr i32)) + (global $mine (mut i32) (i32.const 1)) + (memory $0 256 256) + (data (i32.const 10) "wasa waka waka waka waka") + (export "test1" (func $test1)) + (export "test2" (func $test2)) + (export "test3" (func $test3)) + (func $test1 (; 0 ;) (type $0) + (nop) + ) + (func $test2 (; 1 ;) (type $0) + (set_global $mine + (i32.const 2) + ) + (i32.store8 + (i32.const 13) + (i32.const 115) + ) + ) + (func $test3 (; 2 ;) (type $0) + (i32.store8 + (i32.const 14) + (i32.const 115) + ) + ) +) diff --git a/src/binaryen/test/ctor-eval/imported3.wast b/src/binaryen/test/ctor-eval/imported3.wast new file mode 100644 index 0000000000..b43ce3038d --- /dev/null +++ b/src/binaryen/test/ctor-eval/imported3.wast @@ -0,0 +1,14 @@ +(module + (memory 256 256) + (data (i32.const 10) "waka waka waka waka waka") + ;; imports must not be used + (import "env" "tempDoublePtr" (global $tempDoublePtr i32)) + (export "test1" $test1) + (export "test2" $test2) + (export "test3" $test3) + (global $mine (mut i32) (get_global $tempDoublePtr)) ;; BAD, if used + (func $test1 + (drop (get_global $mine)) + (i32.store8 (i32.const 13) (i32.const 115)) ;; we never get here. + ) +) diff --git a/src/binaryen/test/ctor-eval/imported3.wast.ctors b/src/binaryen/test/ctor-eval/imported3.wast.ctors new file mode 100644 index 0000000000..a5bce3fd25 --- /dev/null +++ b/src/binaryen/test/ctor-eval/imported3.wast.ctors @@ -0,0 +1 @@ +test1 diff --git a/src/binaryen/test/ctor-eval/imported3.wast.out b/src/binaryen/test/ctor-eval/imported3.wast.out new file mode 100644 index 0000000000..b7e9dc5a36 --- /dev/null +++ b/src/binaryen/test/ctor-eval/imported3.wast.out @@ -0,0 +1,16 @@ +(module + (type $0 (func)) + (import "env" "tempDoublePtr" (global $tempDoublePtr i32)) + (global $mine (mut i32) (get_global $tempDoublePtr)) + (memory $0 256 256) + (data (i32.const 10) "waka waka waka waka waka") + (export "test1" (func $test1)) + (export "test2" (func $test2)) + (export "test3" (func $test3)) + (func $test1 (; 0 ;) (type $0) + (i32.store8 + (i32.const 13) + (i32.const 115) + ) + ) +) diff --git a/src/binaryen/test/ctor-eval/indirect-call3.wast b/src/binaryen/test/ctor-eval/indirect-call3.wast new file mode 100644 index 0000000000..6695fc5b82 --- /dev/null +++ b/src/binaryen/test/ctor-eval/indirect-call3.wast @@ -0,0 +1,17 @@ +(module + (type $v (func)) + (memory 256 256) + (data (i32.const 10) "waka waka waka waka waka") + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "_abort" (func $_abort)) + (table 2 2 anyfunc) + (elem (get_global $tableBase) $_abort $call-indirect) + (export "test1" $test1) + (func $test1 + (call_indirect (type $v) (i32.const 1)) ;; safe to call + (i32.store8 (i32.const 20) (i32.const 120)) + ) + (func $call-indirect + (i32.store8 (i32.const 40) (i32.const 67)) + ) +) diff --git a/src/binaryen/test/ctor-eval/indirect-call3.wast.ctors b/src/binaryen/test/ctor-eval/indirect-call3.wast.ctors new file mode 100644 index 0000000000..a5bce3fd25 --- /dev/null +++ b/src/binaryen/test/ctor-eval/indirect-call3.wast.ctors @@ -0,0 +1 @@ +test1 diff --git a/src/binaryen/test/ctor-eval/indirect-call3.wast.out b/src/binaryen/test/ctor-eval/indirect-call3.wast.out new file mode 100644 index 0000000000..a4b2ac3374 --- /dev/null +++ b/src/binaryen/test/ctor-eval/indirect-call3.wast.out @@ -0,0 +1,20 @@ +(module + (type $v (func)) + (type $FUNCSIG$v (func)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "_abort" (func $_abort)) + (table 2 2 anyfunc) + (elem (get_global $tableBase) $_abort $call-indirect) + (memory $0 256 256) + (data (i32.const 10) "waka waka xaka waka waka\00\00\00\00\00\00C") + (export "test1" (func $test1)) + (func $test1 (; 1 ;) (type $v) + (nop) + ) + (func $call-indirect (; 2 ;) (type $v) + (i32.store8 + (i32.const 40) + (i32.const 67) + ) + ) +) diff --git a/src/binaryen/test/ctor-eval/just_some.wast b/src/binaryen/test/ctor-eval/just_some.wast new file mode 100644 index 0000000000..64aa18d27f --- /dev/null +++ b/src/binaryen/test/ctor-eval/just_some.wast @@ -0,0 +1,17 @@ +(module + (memory 256 256) + (data (i32.const 10) "waka waka waka waka waka") + (export "test1" $test1) + (export "test2" $test2) + (export "test3" $test3) + (func $test1 + (i32.store8 (i32.const 12) (i32.const 115)) ;; a safe store, should alter memory + ) + (func $test2 + (unreachable) + (i32.store8 (i32.const 13) (i32.const 114)) ;; a safe store, should alter memory, but we trapped already + ) + (func $test3 + (i32.store8 (i32.const 13) (i32.const 113)) ;; a safe store, should alter memory, but we trapped already + ) +) diff --git a/src/binaryen/test/ctor-eval/just_some.wast.ctors b/src/binaryen/test/ctor-eval/just_some.wast.ctors new file mode 100644 index 0000000000..c7060ede55 --- /dev/null +++ b/src/binaryen/test/ctor-eval/just_some.wast.ctors @@ -0,0 +1 @@ +test1,test2,test3 diff --git a/src/binaryen/test/ctor-eval/just_some.wast.out b/src/binaryen/test/ctor-eval/just_some.wast.out new file mode 100644 index 0000000000..c44e6a9df0 --- /dev/null +++ b/src/binaryen/test/ctor-eval/just_some.wast.out @@ -0,0 +1,20 @@ +(module + (type $0 (func)) + (memory $0 256 256) + (data (i32.const 10) "wasa waka waka waka waka") + (export "test1" (func $test1)) + (export "test2" (func $test2)) + (export "test3" (func $test3)) + (func $test1 (; 0 ;) (type $0) + (nop) + ) + (func $test2 (; 1 ;) (type $0) + (unreachable) + ) + (func $test3 (; 2 ;) (type $0) + (i32.store8 + (i32.const 13) + (i32.const 113) + ) + ) +) diff --git a/src/binaryen/test/ctor-eval/no_partial.wast b/src/binaryen/test/ctor-eval/no_partial.wast new file mode 100644 index 0000000000..18ef177b78 --- /dev/null +++ b/src/binaryen/test/ctor-eval/no_partial.wast @@ -0,0 +1,10 @@ +(module + (memory 256 256) + (data (i32.const 10) "waka waka waka waka waka") + (export "test1" $test1) + (func $test1 + (i32.store8 (i32.const 12) (i32.const 115)) ;; a safe store, should alter memory + (unreachable) + (i32.store8 (i32.const 13) (i32.const 114)) ;; a safe store, should alter memory, but we trapped already, and so must roll back the first one too + ) +) diff --git a/src/binaryen/test/ctor-eval/no_partial.wast.ctors b/src/binaryen/test/ctor-eval/no_partial.wast.ctors new file mode 100644 index 0000000000..a5bce3fd25 --- /dev/null +++ b/src/binaryen/test/ctor-eval/no_partial.wast.ctors @@ -0,0 +1 @@ +test1 diff --git a/src/binaryen/test/ctor-eval/no_partial.wast.out b/src/binaryen/test/ctor-eval/no_partial.wast.out new file mode 100644 index 0000000000..ac943d57c0 --- /dev/null +++ b/src/binaryen/test/ctor-eval/no_partial.wast.out @@ -0,0 +1,13 @@ +(module + (type $0 (func)) + (memory $0 256 256) + (data (i32.const 10) "waka waka waka waka waka") + (export "test1" (func $test1)) + (func $test1 (; 0 ;) (type $0) + (i32.store8 + (i32.const 12) + (i32.const 115) + ) + (unreachable) + ) +) diff --git a/src/binaryen/test/ctor-eval/unsafe_call.wast b/src/binaryen/test/ctor-eval/unsafe_call.wast new file mode 100644 index 0000000000..703760744c --- /dev/null +++ b/src/binaryen/test/ctor-eval/unsafe_call.wast @@ -0,0 +1,16 @@ +(module + (memory 256 256) + (data (i32.const 10) "waka waka waka waka waka") + (export "test1" $test1) + (export "test2" $test2) + (export "test3" $test3) + (func $test1 + (call $unsafe-to-call) ;; unsafe to call + (i32.store (i32.const 12) (i32.const 115)) ;; a safe store, should alter memory + (i32.store16 (i32.const 20) (i32.const 31353)) + (i32.store8 (i32.const 23) (i32.const 120)) + ) + (func $unsafe-to-call + (unreachable) + ) +) diff --git a/src/binaryen/test/ctor-eval/unsafe_call.wast.ctors b/src/binaryen/test/ctor-eval/unsafe_call.wast.ctors new file mode 100644 index 0000000000..a5bce3fd25 --- /dev/null +++ b/src/binaryen/test/ctor-eval/unsafe_call.wast.ctors @@ -0,0 +1 @@ +test1 diff --git a/src/binaryen/test/ctor-eval/unsafe_call.wast.out b/src/binaryen/test/ctor-eval/unsafe_call.wast.out new file mode 100644 index 0000000000..5a16a61125 --- /dev/null +++ b/src/binaryen/test/ctor-eval/unsafe_call.wast.out @@ -0,0 +1,26 @@ +(module + (type $0 (func)) + (memory $0 256 256) + (data (i32.const 10) "waka waka waka waka waka") + (export "test1" (func $test1)) + (export "test2" (func $test2)) + (export "test3" (func $test3)) + (func $test1 (; 0 ;) (type $0) + (call $unsafe-to-call) + (i32.store + (i32.const 12) + (i32.const 115) + ) + (i32.store16 + (i32.const 20) + (i32.const 31353) + ) + (i32.store8 + (i32.const 23) + (i32.const 120) + ) + ) + (func $unsafe-to-call (; 1 ;) (type $0) + (unreachable) + ) +) diff --git a/src/binaryen/test/ctor-eval/unsafe_store.wast b/src/binaryen/test/ctor-eval/unsafe_store.wast new file mode 100644 index 0000000000..f851672a72 --- /dev/null +++ b/src/binaryen/test/ctor-eval/unsafe_store.wast @@ -0,0 +1,10 @@ +(module + (memory 256 256) + (data (i32.const 10) "waka waka waka waka waka") + (export "test1" $test1) + (export "test2" $test2) + (export "test3" $test3) + (func $test1 + (i32.store8 (i32.const 9) (i32.const 109)) ;; before first segment + ) +) diff --git a/src/binaryen/test/ctor-eval/unsafe_store.wast.ctors b/src/binaryen/test/ctor-eval/unsafe_store.wast.ctors new file mode 100644 index 0000000000..a5bce3fd25 --- /dev/null +++ b/src/binaryen/test/ctor-eval/unsafe_store.wast.ctors @@ -0,0 +1 @@ +test1 diff --git a/src/binaryen/test/ctor-eval/unsafe_store.wast.out b/src/binaryen/test/ctor-eval/unsafe_store.wast.out new file mode 100644 index 0000000000..36f3b74bd3 --- /dev/null +++ b/src/binaryen/test/ctor-eval/unsafe_store.wast.out @@ -0,0 +1,11 @@ +(module + (type $0 (func)) + (memory $0 256 256) + (data (i32.const 9) "mwaka waka waka waka waka") + (export "test1" (func $test1)) + (export "test2" (func $test2)) + (export "test3" (func $test3)) + (func $test1 (; 0 ;) (type $0) + (nop) + ) +) diff --git a/src/binaryen/test/ctor-eval/unsafe_store2.wast b/src/binaryen/test/ctor-eval/unsafe_store2.wast new file mode 100644 index 0000000000..cc5eb1105f --- /dev/null +++ b/src/binaryen/test/ctor-eval/unsafe_store2.wast @@ -0,0 +1,10 @@ +(module + (memory 256 256) + (data (i32.const 10) "waka waka waka waka waka") + (export "test1" $test1) + (export "test2" $test2) + (export "test3" $test3) + (func $test1 + (i32.store8 (i32.const 34) (i32.const 109)) ;; after last segment + ) +) diff --git a/src/binaryen/test/ctor-eval/unsafe_store2.wast.ctors b/src/binaryen/test/ctor-eval/unsafe_store2.wast.ctors new file mode 100644 index 0000000000..a5bce3fd25 --- /dev/null +++ b/src/binaryen/test/ctor-eval/unsafe_store2.wast.ctors @@ -0,0 +1 @@ +test1 diff --git a/src/binaryen/test/ctor-eval/unsafe_store2.wast.out b/src/binaryen/test/ctor-eval/unsafe_store2.wast.out new file mode 100644 index 0000000000..a0d34e8b4e --- /dev/null +++ b/src/binaryen/test/ctor-eval/unsafe_store2.wast.out @@ -0,0 +1,11 @@ +(module + (type $0 (func)) + (memory $0 256 256) + (data (i32.const 10) "waka waka waka waka wakam") + (export "test1" (func $test1)) + (export "test2" (func $test2)) + (export "test3" (func $test3)) + (func $test1 (; 0 ;) (type $0) + (nop) + ) +) diff --git a/src/binaryen/test/ctor-eval/unsafe_store3.wast b/src/binaryen/test/ctor-eval/unsafe_store3.wast new file mode 100644 index 0000000000..701e4b32e0 --- /dev/null +++ b/src/binaryen/test/ctor-eval/unsafe_store3.wast @@ -0,0 +1,10 @@ +(module + (memory 256 256) + (data (i32.const 10) "waka waka waka waka waka") + (export "test1" $test1) + (export "test2" $test2) + (export "test3" $test3) + (func $test1 + (i32.store16 (i32.const 33) (i32.const 109)) ;; after last segment due to size of type + ) +) diff --git a/src/binaryen/test/ctor-eval/unsafe_store3.wast.ctors b/src/binaryen/test/ctor-eval/unsafe_store3.wast.ctors new file mode 100644 index 0000000000..a5bce3fd25 --- /dev/null +++ b/src/binaryen/test/ctor-eval/unsafe_store3.wast.ctors @@ -0,0 +1 @@ +test1 diff --git a/src/binaryen/test/ctor-eval/unsafe_store3.wast.out b/src/binaryen/test/ctor-eval/unsafe_store3.wast.out new file mode 100644 index 0000000000..189f830e78 --- /dev/null +++ b/src/binaryen/test/ctor-eval/unsafe_store3.wast.out @@ -0,0 +1,11 @@ +(module + (type $0 (func)) + (memory $0 256 256) + (data (i32.const 10) "waka waka waka waka wakm") + (export "test1" (func $test1)) + (export "test2" (func $test2)) + (export "test3" (func $test3)) + (func $test1 (; 0 ;) (type $0) + (nop) + ) +) diff --git a/src/binaryen/test/debugInfo.asm.js b/src/binaryen/test/debugInfo.asm.js new file mode 100644 index 0000000000..29b08575a0 --- /dev/null +++ b/src/binaryen/test/debugInfo.asm.js @@ -0,0 +1,86 @@ +function () { + "use asm"; + var STACKTOP = 0; + function add(x, y) { + x = x | 0; + y = y | 0; + x = x; //@line 5 "tests/hello_world.c" + y = y; //@line 6 "tests/hello_world.c" + x = y; //@line 314159 "tests/other_file.cpp" + return x + y | 0; + } + function ret(x) { + x = x | 0; + x = x << 1; //@line 50 "return.cpp" + return x + 1 | 0; //@line 100 "return.cpp" + } + function opts(x, y) { + x = x | 0; + y = y | 0; + x = (x + y) | 0; //@line 1 "even-opted.cpp" + y = y >> x; //@line 2 "even-opted.cpp" + x = (x | 0) % (y | 0); //@line 3 "even-opted.cpp" + return x + y | 0; + } + function fib($0) { + $0 = $0|0; + var $$0$lcssa = 0, $$01518 = 0, $$01518$phi = 0, $$01617 = 0, $$019 = 0, $1 = 0, $2 = 0, $3 = 0, $exitcond = 0, label = 0, sp = 0; + sp = STACKTOP; + $1 = ($0|0)>(0); //@line 3 "fib.c" + if ($1) { + $$01518 = 0;$$01617 = 0;$$019 = 1; + } else { + $$0$lcssa = 1; + return ($$0$lcssa|0); //@line 8 "fib.c" + } + while(1) { + $2 = (($$019) + ($$01518))|0; //@line 4 "fib.c" + $3 = (($$01617) + 1)|0; //@line 3 "fib.c" + $exitcond = ($3|0)==($0|0); //@line 3 "fib.c" + if ($exitcond) { + $$0$lcssa = $2; + break; + } else { + $$01518$phi = $$019;$$01617 = $3;$$019 = $2;$$01518 = $$01518$phi; + } + } + return ($$0$lcssa|0); //@line 8 "fib.c" + } + function switch_reach($p) { + $p = $p|0; + var $0 = 0, $call = 0, $magic = 0, $rc$0 = 0, $switch$split2D = 0, label = 0, sp = 0; + sp = STACKTOP; + $magic = ((($p)) + 52|0); + $0 = $magic; + $switch$split2D = ($0|0)<(1369188723); + if ($switch$split2D) { + switch ($0|0) { + case -1108210269: { + label = 2; + break; + } + default: { + $rc$0 = 0; + } + } + } else { + switch ($0|0) { + case 1369188723: { + label = 2; + break; + } + default: { + $rc$0 = 0; + } + } + } + if ((label|0) == 2) { + $call = switch_reach($p) | 0; + $rc$0 = $call; + } + switch_reach($p) | 0; + return ($rc$0|0); //@line 59950 "/tmp/emscripten_test_binaryen2_28hnAe/src.c" + } + return { add: add, ret: ret, opts: opts, fib: fib, switch_reach: switch_reach }; +} + diff --git a/src/binaryen/test/debugInfo.fromasm b/src/binaryen/test/debugInfo.fromasm new file mode 100644 index 0000000000..dcb2a8f74f --- /dev/null +++ b/src/binaryen/test/debugInfo.fromasm @@ -0,0 +1,191 @@ +(module + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (data (get_global $memoryBase) "debugInfo.asm.js") + (export "add" (func $add)) + (export "ret" (func $ret)) + (export "opts" (func $opts)) + (export "fib" (func $fib)) + (export "switch_reach" (func $switch_reach)) + (func $add (; 0 ;) (param $0 i32) (param $1 i32) (result i32) + ;;@ tests/other_file.cpp:314159:0 + (i32.add + (get_local $1) + (get_local $1) + ) + ) + (func $ret (; 1 ;) (param $0 i32) (result i32) + ;;@ return.cpp:50:0 + (set_local $0 + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ;;@ return.cpp:100:0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (func $opts (; 2 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + ;;@ even-opted.cpp:1:0 + (set_local $0 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + ;;@ even-opted.cpp:2:0 + (set_local $1 + (i32.shr_s + (get_local $1) + (get_local $0) + ) + ) + (i32.add + (if (result i32) + ;;@ even-opted.cpp:3:0 + (tee_local $2 + (get_local $1) + ) + (i32.rem_s + (get_local $0) + (get_local $2) + ) + (i32.const 0) + ) + (get_local $1) + ) + ) + (func $fib (; 3 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (if + ;;@ fib.c:3:0 + (i32.gt_s + (get_local $0) + (i32.const 0) + ) + (block + (set_local $4 + (i32.const 0) + ) + (set_local $2 + (i32.const 0) + ) + (set_local $3 + (i32.const 1) + ) + ) + (block + (set_local $1 + (i32.const 1) + ) + ;;@ fib.c:8:0 + (return + (get_local $1) + ) + ) + ) + (loop $while-in + ;;@ fib.c:4:0 + (set_local $1 + (i32.add + (get_local $3) + (get_local $4) + ) + ) + ;;@ fib.c:3:0 + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $2) + (get_local $0) + ) + (block + (set_local $4 + (get_local $3) + ) + (set_local $3 + (get_local $1) + ) + (br $while-in) + ) + ) + ) + ;;@ fib.c:8:0 + (get_local $1) + ) + (func $switch_reach (; 4 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (block $__rjto$0 (result i32) + (block $__rjti$0 + (br $__rjto$0 + (if (result i32) + (i32.lt_s + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 52) + ) + ) + (i32.const 1369188723) + ) + (block $switch (result i32) + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default + (i32.sub + (get_local $1) + (i32.const -1108210269) + ) + ) + ) + (br $__rjti$0) + ) + (i32.const 0) + ) + (block $switch0 (result i32) + (block $switch-default2 + (block $switch-case1 + (br_table $switch-case1 $switch-default2 + (i32.sub + (get_local $1) + (i32.const 1369188723) + ) + ) + ) + (br $__rjti$0) + ) + (i32.const 0) + ) + ) + ) + ) + (call $switch_reach + (get_local $0) + ) + ) + ) + (drop + (call $switch_reach + (get_local $0) + ) + ) + ;;@ /tmp/emscripten_test_binaryen2_28hnAe/src.c:59950:0 + (get_local $1) + ) +) diff --git a/src/binaryen/test/debugInfo.fromasm.clamp b/src/binaryen/test/debugInfo.fromasm.clamp new file mode 100644 index 0000000000..dcb2a8f74f --- /dev/null +++ b/src/binaryen/test/debugInfo.fromasm.clamp @@ -0,0 +1,191 @@ +(module + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (data (get_global $memoryBase) "debugInfo.asm.js") + (export "add" (func $add)) + (export "ret" (func $ret)) + (export "opts" (func $opts)) + (export "fib" (func $fib)) + (export "switch_reach" (func $switch_reach)) + (func $add (; 0 ;) (param $0 i32) (param $1 i32) (result i32) + ;;@ tests/other_file.cpp:314159:0 + (i32.add + (get_local $1) + (get_local $1) + ) + ) + (func $ret (; 1 ;) (param $0 i32) (result i32) + ;;@ return.cpp:50:0 + (set_local $0 + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ;;@ return.cpp:100:0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (func $opts (; 2 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + ;;@ even-opted.cpp:1:0 + (set_local $0 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + ;;@ even-opted.cpp:2:0 + (set_local $1 + (i32.shr_s + (get_local $1) + (get_local $0) + ) + ) + (i32.add + (if (result i32) + ;;@ even-opted.cpp:3:0 + (tee_local $2 + (get_local $1) + ) + (i32.rem_s + (get_local $0) + (get_local $2) + ) + (i32.const 0) + ) + (get_local $1) + ) + ) + (func $fib (; 3 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (if + ;;@ fib.c:3:0 + (i32.gt_s + (get_local $0) + (i32.const 0) + ) + (block + (set_local $4 + (i32.const 0) + ) + (set_local $2 + (i32.const 0) + ) + (set_local $3 + (i32.const 1) + ) + ) + (block + (set_local $1 + (i32.const 1) + ) + ;;@ fib.c:8:0 + (return + (get_local $1) + ) + ) + ) + (loop $while-in + ;;@ fib.c:4:0 + (set_local $1 + (i32.add + (get_local $3) + (get_local $4) + ) + ) + ;;@ fib.c:3:0 + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $2) + (get_local $0) + ) + (block + (set_local $4 + (get_local $3) + ) + (set_local $3 + (get_local $1) + ) + (br $while-in) + ) + ) + ) + ;;@ fib.c:8:0 + (get_local $1) + ) + (func $switch_reach (; 4 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (block $__rjto$0 (result i32) + (block $__rjti$0 + (br $__rjto$0 + (if (result i32) + (i32.lt_s + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 52) + ) + ) + (i32.const 1369188723) + ) + (block $switch (result i32) + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default + (i32.sub + (get_local $1) + (i32.const -1108210269) + ) + ) + ) + (br $__rjti$0) + ) + (i32.const 0) + ) + (block $switch0 (result i32) + (block $switch-default2 + (block $switch-case1 + (br_table $switch-case1 $switch-default2 + (i32.sub + (get_local $1) + (i32.const 1369188723) + ) + ) + ) + (br $__rjti$0) + ) + (i32.const 0) + ) + ) + ) + ) + (call $switch_reach + (get_local $0) + ) + ) + ) + (drop + (call $switch_reach + (get_local $0) + ) + ) + ;;@ /tmp/emscripten_test_binaryen2_28hnAe/src.c:59950:0 + (get_local $1) + ) +) diff --git a/src/binaryen/test/debugInfo.fromasm.clamp.map b/src/binaryen/test/debugInfo.fromasm.clamp.map new file mode 100644 index 0000000000..838607f310 --- /dev/null +++ b/src/binaryen/test/debugInfo.fromasm.clamp.map @@ -0,0 +1 @@ +{"version":3,"sources":["tests/hello_world.c","tests/other_file.cpp","return.cpp","even-opted.cpp","fib.c","/tmp/emscripten_test_binaryen2_28hnAe/src.c"],"names":[],"mappings":"oKC8ylTA,QC7vlTA,OAkDA,UCnGA,OACA,OACA,uBCAA,wBAKA,MAJA,OADA,0BAKA,0FCsi1DA"} \ No newline at end of file diff --git a/src/binaryen/test/debugInfo.fromasm.clamp.no-opts b/src/binaryen/test/debugInfo.fromasm.clamp.no-opts new file mode 100644 index 0000000000..8e4ebdd3f2 --- /dev/null +++ b/src/binaryen/test/debugInfo.fromasm.clamp.no-opts @@ -0,0 +1,285 @@ +(module + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (i32.const 0)) + (export "add" (func $add)) + (export "ret" (func $ret)) + (export "opts" (func $opts)) + (export "fib" (func $fib)) + (export "switch_reach" (func $switch_reach)) + (func $add (; 0 ;) (param $x i32) (param $y i32) (result i32) + ;;@ tests/hello_world.c:5:0 + (set_local $x + (get_local $x) + ) + ;;@ tests/hello_world.c:6:0 + (set_local $y + (get_local $y) + ) + ;;@ tests/other_file.cpp:314159:0 + (set_local $x + (get_local $y) + ) + (return + (i32.add + (get_local $x) + (get_local $y) + ) + ) + ) + (func $ret (; 1 ;) (param $x i32) (result i32) + ;;@ return.cpp:50:0 + (set_local $x + (i32.shl + (get_local $x) + (i32.const 1) + ) + ) + ;;@ return.cpp:100:0 + (return + (i32.add + (get_local $x) + (i32.const 1) + ) + ) + ) + (func $i32s-rem (; 2 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (i32.rem_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $opts (; 3 ;) (param $x i32) (param $y i32) (result i32) + ;;@ even-opted.cpp:1:0 + (set_local $x + (i32.add + (get_local $x) + (get_local $y) + ) + ) + ;;@ even-opted.cpp:2:0 + (set_local $y + (i32.shr_s + (get_local $y) + (get_local $x) + ) + ) + ;;@ even-opted.cpp:3:0 + (set_local $x + (call $i32s-rem + (get_local $x) + (get_local $y) + ) + ) + (return + (i32.add + (get_local $x) + (get_local $y) + ) + ) + ) + (func $fib (; 4 ;) (param $$0 i32) (result i32) + (local $$$0$lcssa i32) + (local $$$01518 i32) + (local $$$01518$phi i32) + (local $$$01617 i32) + (local $$$019 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$exitcond i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + ;;@ fib.c:3:0 + (set_local $$1 + (i32.gt_s + (get_local $$0) + (i32.const 0) + ) + ) + (if + (get_local $$1) + (block + (set_local $$$01518 + (i32.const 0) + ) + (set_local $$$01617 + (i32.const 0) + ) + (set_local $$$019 + (i32.const 1) + ) + ) + (block + (set_local $$$0$lcssa + (i32.const 1) + ) + ;;@ fib.c:8:0 + (return + (get_local $$$0$lcssa) + ) + ) + ) + (loop $while-in + (block $while-out + ;;@ fib.c:4:0 + (set_local $$2 + (i32.add + (get_local $$$019) + (get_local $$$01518) + ) + ) + ;;@ fib.c:3:0 + (set_local $$3 + (i32.add + (get_local $$$01617) + (i32.const 1) + ) + ) + (set_local $$exitcond + (i32.eq + (get_local $$3) + (get_local $$0) + ) + ) + (if + (get_local $$exitcond) + (block + (set_local $$$0$lcssa + (get_local $$2) + ) + (br $while-out) + ) + (block + (set_local $$$01518$phi + (get_local $$$019) + ) + (set_local $$$01617 + (get_local $$3) + ) + (set_local $$$019 + (get_local $$2) + ) + (set_local $$$01518 + (get_local $$$01518$phi) + ) + ) + ) + (br $while-in) + ) + ) + ;;@ fib.c:8:0 + (return + (get_local $$$0$lcssa) + ) + ) + (func $switch_reach (; 5 ;) (param $$p i32) (result i32) + (local $$0 i32) + (local $$call i32) + (local $$magic i32) + (local $$rc$0 i32) + (local $$switch$split2D i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$magic + (i32.add + (get_local $$p) + (i32.const 52) + ) + ) + (set_local $$0 + (get_local $$magic) + ) + (set_local $$switch$split2D + (i32.lt_s + (get_local $$0) + (i32.const 1369188723) + ) + ) + (if + (get_local $$switch$split2D) + (block $switch + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default + (i32.sub + (get_local $$0) + (i32.const -1108210269) + ) + ) + ) + (block + (set_local $label + (i32.const 2) + ) + (br $switch) + ) + ) + (set_local $$rc$0 + (i32.const 0) + ) + ) + (block $switch0 + (block $switch-default2 + (block $switch-case1 + (br_table $switch-case1 $switch-default2 + (i32.sub + (get_local $$0) + (i32.const 1369188723) + ) + ) + ) + (block + (set_local $label + (i32.const 2) + ) + (br $switch0) + ) + ) + (set_local $$rc$0 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 2) + ) + (block + (set_local $$call + (call $switch_reach + (get_local $$p) + ) + ) + (set_local $$rc$0 + (get_local $$call) + ) + ) + ) + (drop + (call $switch_reach + (get_local $$p) + ) + ) + ;;@ /tmp/emscripten_test_binaryen2_28hnAe/src.c:59950:0 + (return + (get_local $$rc$0) + ) + ) +) diff --git a/src/binaryen/test/debugInfo.fromasm.clamp.no-opts.map b/src/binaryen/test/debugInfo.fromasm.clamp.no-opts.map new file mode 100644 index 0000000000..fc2087bb32 --- /dev/null +++ b/src/binaryen/test/debugInfo.fromasm.clamp.no-opts.map @@ -0,0 +1 @@ +{"version":3,"sources":["tests/hello_world.c","tests/other_file.cpp","return.cpp","even-opted.cpp","fib.c","/tmp/emscripten_test_binaryen2_28hnAe/src.c"],"names":[],"mappings":"6KAIA,IACA,ICyylTA,aC7vlTA,OAkDA,0BCnGA,OACA,OACA,uBCAA,4BAKA,QAJA,OADA,8CAKA,yICsi1DA"} \ No newline at end of file diff --git a/src/binaryen/test/debugInfo.fromasm.imprecise b/src/binaryen/test/debugInfo.fromasm.imprecise new file mode 100644 index 0000000000..1cfc5d1141 --- /dev/null +++ b/src/binaryen/test/debugInfo.fromasm.imprecise @@ -0,0 +1,183 @@ +(module + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "add" (func $add)) + (export "ret" (func $ret)) + (export "opts" (func $opts)) + (export "fib" (func $fib)) + (export "switch_reach" (func $switch_reach)) + (func $add (; 0 ;) (param $0 i32) (param $1 i32) (result i32) + ;;@ tests/other_file.cpp:314159:0 + (i32.add + (get_local $1) + (get_local $1) + ) + ) + (func $ret (; 1 ;) (param $0 i32) (result i32) + ;;@ return.cpp:50:0 + (set_local $0 + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ;;@ return.cpp:100:0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (func $opts (; 2 ;) (param $0 i32) (param $1 i32) (result i32) + ;;@ even-opted.cpp:1:0 + (set_local $0 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + ;;@ even-opted.cpp:2:0 + (set_local $1 + (i32.shr_s + (get_local $1) + (get_local $0) + ) + ) + ;;@ even-opted.cpp:3:0 + (i32.add + (i32.rem_s + (get_local $0) + (get_local $1) + ) + (get_local $1) + ) + ) + (func $fib (; 3 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (if + ;;@ fib.c:3:0 + (i32.gt_s + (get_local $0) + (i32.const 0) + ) + (block + (set_local $4 + (i32.const 0) + ) + (set_local $2 + (i32.const 0) + ) + (set_local $3 + (i32.const 1) + ) + ) + (block + (set_local $1 + (i32.const 1) + ) + ;;@ fib.c:8:0 + (return + (get_local $1) + ) + ) + ) + (loop $while-in + ;;@ fib.c:4:0 + (set_local $1 + (i32.add + (get_local $3) + (get_local $4) + ) + ) + ;;@ fib.c:3:0 + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $2) + (get_local $0) + ) + (block + (set_local $4 + (get_local $3) + ) + (set_local $3 + (get_local $1) + ) + (br $while-in) + ) + ) + ) + ;;@ fib.c:8:0 + (get_local $1) + ) + (func $switch_reach (; 4 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (block $__rjto$0 (result i32) + (block $__rjti$0 + (br $__rjto$0 + (if (result i32) + (i32.lt_s + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 52) + ) + ) + (i32.const 1369188723) + ) + (block $switch (result i32) + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default + (i32.sub + (get_local $1) + (i32.const -1108210269) + ) + ) + ) + (br $__rjti$0) + ) + (i32.const 0) + ) + (block $switch0 (result i32) + (block $switch-default2 + (block $switch-case1 + (br_table $switch-case1 $switch-default2 + (i32.sub + (get_local $1) + (i32.const 1369188723) + ) + ) + ) + (br $__rjti$0) + ) + (i32.const 0) + ) + ) + ) + ) + (call $switch_reach + (get_local $0) + ) + ) + ) + (drop + (call $switch_reach + (get_local $0) + ) + ) + ;;@ /tmp/emscripten_test_binaryen2_28hnAe/src.c:59950:0 + (get_local $1) + ) +) diff --git a/src/binaryen/test/debugInfo.fromasm.imprecise.map b/src/binaryen/test/debugInfo.fromasm.imprecise.map new file mode 100644 index 0000000000..2988459c59 --- /dev/null +++ b/src/binaryen/test/debugInfo.fromasm.imprecise.map @@ -0,0 +1 @@ +{"version":3,"sources":["tests/hello_world.c","tests/other_file.cpp","return.cpp","even-opted.cpp","fib.c","/tmp/emscripten_test_binaryen2_28hnAe/src.c"],"names":[],"mappings":"oKC8ylTA,QC7vlTA,OAkDA,QCnGA,OACA,OACA,aCAA,wBAKA,MAJA,OADA,0BAKA,0FCsi1DA"} \ No newline at end of file diff --git a/src/binaryen/test/debugInfo.fromasm.imprecise.no-opts b/src/binaryen/test/debugInfo.fromasm.imprecise.no-opts new file mode 100644 index 0000000000..cf61703247 --- /dev/null +++ b/src/binaryen/test/debugInfo.fromasm.imprecise.no-opts @@ -0,0 +1,273 @@ +(module + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (i32.const 0)) + (export "add" (func $add)) + (export "ret" (func $ret)) + (export "opts" (func $opts)) + (export "fib" (func $fib)) + (export "switch_reach" (func $switch_reach)) + (func $add (; 0 ;) (param $x i32) (param $y i32) (result i32) + ;;@ tests/hello_world.c:5:0 + (set_local $x + (get_local $x) + ) + ;;@ tests/hello_world.c:6:0 + (set_local $y + (get_local $y) + ) + ;;@ tests/other_file.cpp:314159:0 + (set_local $x + (get_local $y) + ) + (return + (i32.add + (get_local $x) + (get_local $y) + ) + ) + ) + (func $ret (; 1 ;) (param $x i32) (result i32) + ;;@ return.cpp:50:0 + (set_local $x + (i32.shl + (get_local $x) + (i32.const 1) + ) + ) + ;;@ return.cpp:100:0 + (return + (i32.add + (get_local $x) + (i32.const 1) + ) + ) + ) + (func $opts (; 2 ;) (param $x i32) (param $y i32) (result i32) + ;;@ even-opted.cpp:1:0 + (set_local $x + (i32.add + (get_local $x) + (get_local $y) + ) + ) + ;;@ even-opted.cpp:2:0 + (set_local $y + (i32.shr_s + (get_local $y) + (get_local $x) + ) + ) + ;;@ even-opted.cpp:3:0 + (set_local $x + (i32.rem_s + (get_local $x) + (get_local $y) + ) + ) + (return + (i32.add + (get_local $x) + (get_local $y) + ) + ) + ) + (func $fib (; 3 ;) (param $$0 i32) (result i32) + (local $$$0$lcssa i32) + (local $$$01518 i32) + (local $$$01518$phi i32) + (local $$$01617 i32) + (local $$$019 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$exitcond i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + ;;@ fib.c:3:0 + (set_local $$1 + (i32.gt_s + (get_local $$0) + (i32.const 0) + ) + ) + (if + (get_local $$1) + (block + (set_local $$$01518 + (i32.const 0) + ) + (set_local $$$01617 + (i32.const 0) + ) + (set_local $$$019 + (i32.const 1) + ) + ) + (block + (set_local $$$0$lcssa + (i32.const 1) + ) + ;;@ fib.c:8:0 + (return + (get_local $$$0$lcssa) + ) + ) + ) + (loop $while-in + (block $while-out + ;;@ fib.c:4:0 + (set_local $$2 + (i32.add + (get_local $$$019) + (get_local $$$01518) + ) + ) + ;;@ fib.c:3:0 + (set_local $$3 + (i32.add + (get_local $$$01617) + (i32.const 1) + ) + ) + (set_local $$exitcond + (i32.eq + (get_local $$3) + (get_local $$0) + ) + ) + (if + (get_local $$exitcond) + (block + (set_local $$$0$lcssa + (get_local $$2) + ) + (br $while-out) + ) + (block + (set_local $$$01518$phi + (get_local $$$019) + ) + (set_local $$$01617 + (get_local $$3) + ) + (set_local $$$019 + (get_local $$2) + ) + (set_local $$$01518 + (get_local $$$01518$phi) + ) + ) + ) + (br $while-in) + ) + ) + ;;@ fib.c:8:0 + (return + (get_local $$$0$lcssa) + ) + ) + (func $switch_reach (; 4 ;) (param $$p i32) (result i32) + (local $$0 i32) + (local $$call i32) + (local $$magic i32) + (local $$rc$0 i32) + (local $$switch$split2D i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$magic + (i32.add + (get_local $$p) + (i32.const 52) + ) + ) + (set_local $$0 + (get_local $$magic) + ) + (set_local $$switch$split2D + (i32.lt_s + (get_local $$0) + (i32.const 1369188723) + ) + ) + (if + (get_local $$switch$split2D) + (block $switch + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default + (i32.sub + (get_local $$0) + (i32.const -1108210269) + ) + ) + ) + (block + (set_local $label + (i32.const 2) + ) + (br $switch) + ) + ) + (set_local $$rc$0 + (i32.const 0) + ) + ) + (block $switch0 + (block $switch-default2 + (block $switch-case1 + (br_table $switch-case1 $switch-default2 + (i32.sub + (get_local $$0) + (i32.const 1369188723) + ) + ) + ) + (block + (set_local $label + (i32.const 2) + ) + (br $switch0) + ) + ) + (set_local $$rc$0 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 2) + ) + (block + (set_local $$call + (call $switch_reach + (get_local $$p) + ) + ) + (set_local $$rc$0 + (get_local $$call) + ) + ) + ) + (drop + (call $switch_reach + (get_local $$p) + ) + ) + ;;@ /tmp/emscripten_test_binaryen2_28hnAe/src.c:59950:0 + (return + (get_local $$rc$0) + ) + ) +) diff --git a/src/binaryen/test/debugInfo.fromasm.imprecise.no-opts.map b/src/binaryen/test/debugInfo.fromasm.imprecise.no-opts.map new file mode 100644 index 0000000000..4dd296b9a7 --- /dev/null +++ b/src/binaryen/test/debugInfo.fromasm.imprecise.no-opts.map @@ -0,0 +1 @@ +{"version":3,"sources":["tests/hello_world.c","tests/other_file.cpp","return.cpp","even-opted.cpp","fib.c","/tmp/emscripten_test_binaryen2_28hnAe/src.c"],"names":[],"mappings":"4KAIA,IACA,ICyylTA,aC7vlTA,OAkDA,SCnGA,OACA,OACA,sBCAA,4BAKA,QAJA,OADA,8CAKA,yICsi1DA"} \ No newline at end of file diff --git a/src/binaryen/test/debugInfo.fromasm.map b/src/binaryen/test/debugInfo.fromasm.map new file mode 100644 index 0000000000..838607f310 --- /dev/null +++ b/src/binaryen/test/debugInfo.fromasm.map @@ -0,0 +1 @@ +{"version":3,"sources":["tests/hello_world.c","tests/other_file.cpp","return.cpp","even-opted.cpp","fib.c","/tmp/emscripten_test_binaryen2_28hnAe/src.c"],"names":[],"mappings":"oKC8ylTA,QC7vlTA,OAkDA,UCnGA,OACA,OACA,uBCAA,wBAKA,MAJA,OADA,0BAKA,0FCsi1DA"} \ No newline at end of file diff --git a/src/binaryen/test/debugInfo.fromasm.no-opts b/src/binaryen/test/debugInfo.fromasm.no-opts new file mode 100644 index 0000000000..8e4ebdd3f2 --- /dev/null +++ b/src/binaryen/test/debugInfo.fromasm.no-opts @@ -0,0 +1,285 @@ +(module + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (i32.const 0)) + (export "add" (func $add)) + (export "ret" (func $ret)) + (export "opts" (func $opts)) + (export "fib" (func $fib)) + (export "switch_reach" (func $switch_reach)) + (func $add (; 0 ;) (param $x i32) (param $y i32) (result i32) + ;;@ tests/hello_world.c:5:0 + (set_local $x + (get_local $x) + ) + ;;@ tests/hello_world.c:6:0 + (set_local $y + (get_local $y) + ) + ;;@ tests/other_file.cpp:314159:0 + (set_local $x + (get_local $y) + ) + (return + (i32.add + (get_local $x) + (get_local $y) + ) + ) + ) + (func $ret (; 1 ;) (param $x i32) (result i32) + ;;@ return.cpp:50:0 + (set_local $x + (i32.shl + (get_local $x) + (i32.const 1) + ) + ) + ;;@ return.cpp:100:0 + (return + (i32.add + (get_local $x) + (i32.const 1) + ) + ) + ) + (func $i32s-rem (; 2 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (i32.rem_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $opts (; 3 ;) (param $x i32) (param $y i32) (result i32) + ;;@ even-opted.cpp:1:0 + (set_local $x + (i32.add + (get_local $x) + (get_local $y) + ) + ) + ;;@ even-opted.cpp:2:0 + (set_local $y + (i32.shr_s + (get_local $y) + (get_local $x) + ) + ) + ;;@ even-opted.cpp:3:0 + (set_local $x + (call $i32s-rem + (get_local $x) + (get_local $y) + ) + ) + (return + (i32.add + (get_local $x) + (get_local $y) + ) + ) + ) + (func $fib (; 4 ;) (param $$0 i32) (result i32) + (local $$$0$lcssa i32) + (local $$$01518 i32) + (local $$$01518$phi i32) + (local $$$01617 i32) + (local $$$019 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$exitcond i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + ;;@ fib.c:3:0 + (set_local $$1 + (i32.gt_s + (get_local $$0) + (i32.const 0) + ) + ) + (if + (get_local $$1) + (block + (set_local $$$01518 + (i32.const 0) + ) + (set_local $$$01617 + (i32.const 0) + ) + (set_local $$$019 + (i32.const 1) + ) + ) + (block + (set_local $$$0$lcssa + (i32.const 1) + ) + ;;@ fib.c:8:0 + (return + (get_local $$$0$lcssa) + ) + ) + ) + (loop $while-in + (block $while-out + ;;@ fib.c:4:0 + (set_local $$2 + (i32.add + (get_local $$$019) + (get_local $$$01518) + ) + ) + ;;@ fib.c:3:0 + (set_local $$3 + (i32.add + (get_local $$$01617) + (i32.const 1) + ) + ) + (set_local $$exitcond + (i32.eq + (get_local $$3) + (get_local $$0) + ) + ) + (if + (get_local $$exitcond) + (block + (set_local $$$0$lcssa + (get_local $$2) + ) + (br $while-out) + ) + (block + (set_local $$$01518$phi + (get_local $$$019) + ) + (set_local $$$01617 + (get_local $$3) + ) + (set_local $$$019 + (get_local $$2) + ) + (set_local $$$01518 + (get_local $$$01518$phi) + ) + ) + ) + (br $while-in) + ) + ) + ;;@ fib.c:8:0 + (return + (get_local $$$0$lcssa) + ) + ) + (func $switch_reach (; 5 ;) (param $$p i32) (result i32) + (local $$0 i32) + (local $$call i32) + (local $$magic i32) + (local $$rc$0 i32) + (local $$switch$split2D i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$magic + (i32.add + (get_local $$p) + (i32.const 52) + ) + ) + (set_local $$0 + (get_local $$magic) + ) + (set_local $$switch$split2D + (i32.lt_s + (get_local $$0) + (i32.const 1369188723) + ) + ) + (if + (get_local $$switch$split2D) + (block $switch + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default + (i32.sub + (get_local $$0) + (i32.const -1108210269) + ) + ) + ) + (block + (set_local $label + (i32.const 2) + ) + (br $switch) + ) + ) + (set_local $$rc$0 + (i32.const 0) + ) + ) + (block $switch0 + (block $switch-default2 + (block $switch-case1 + (br_table $switch-case1 $switch-default2 + (i32.sub + (get_local $$0) + (i32.const 1369188723) + ) + ) + ) + (block + (set_local $label + (i32.const 2) + ) + (br $switch0) + ) + ) + (set_local $$rc$0 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 2) + ) + (block + (set_local $$call + (call $switch_reach + (get_local $$p) + ) + ) + (set_local $$rc$0 + (get_local $$call) + ) + ) + ) + (drop + (call $switch_reach + (get_local $$p) + ) + ) + ;;@ /tmp/emscripten_test_binaryen2_28hnAe/src.c:59950:0 + (return + (get_local $$rc$0) + ) + ) +) diff --git a/src/binaryen/test/debugInfo.fromasm.no-opts.map b/src/binaryen/test/debugInfo.fromasm.no-opts.map new file mode 100644 index 0000000000..fc2087bb32 --- /dev/null +++ b/src/binaryen/test/debugInfo.fromasm.no-opts.map @@ -0,0 +1 @@ +{"version":3,"sources":["tests/hello_world.c","tests/other_file.cpp","return.cpp","even-opted.cpp","fib.c","/tmp/emscripten_test_binaryen2_28hnAe/src.c"],"names":[],"mappings":"6KAIA,IACA,ICyylTA,aC7vlTA,OAkDA,0BCnGA,OACA,OACA,uBCAA,4BAKA,QAJA,OADA,8CAKA,yICsi1DA"} \ No newline at end of file diff --git a/src/binaryen/test/dot_s/alias.s b/src/binaryen/test/dot_s/alias.s new file mode 100644 index 0000000000..5b719d18cc --- /dev/null +++ b/src/binaryen/test/dot_s/alias.s @@ -0,0 +1,51 @@ + .text + .file "alias.c" + + .hidden __exit + .globl __exit + .type __exit,@function +__exit: # @__exit + i32.const $push0=, _B + i32.load $push1=, 0($pop0) + i32.const $push2=, ._C + i32.load $push3=, 0($pop2) + i32.add $drop=, $pop1, $pop3 +# BB#0: # %entry + .endfunc +.Lfunc_end0: + .size __exit, .Lfunc_end0-__exit + + .hidden __needs_exit + .globl __needs_exit + .type __needs_exit,@function +__needs_exit: # @__needs_exit + .result i32 +# BB#0: # %entry + call __exit_needed@FUNCTION + i32.const $push0=, __exit_needed@FUNCTION + return $pop0 + .endfunc +.Lfunc_end1: + .size __needs_exit, .Lfunc_end1-__needs_exit + + .weak __exit_needed + .type __exit_needed,@function + .hidden __exit_needed +__exit_needed = __exit@FUNCTION + + .type .L__unnamed_1,@object + .p2align 4 +.L__unnamed_1: + .int32 1234 + .skip 4 + .int32 2345 + .size .L__unnamed_1, 12 + + .weak .A +._A = .L__unname_1 + .weak ._B +_B = .L__unnamed_1 + .size _B, 12 + .weak ._C +._C = _B+8 + .size ._C, 4 diff --git a/src/binaryen/test/dot_s/alias.wast b/src/binaryen/test/dot_s/alias.wast new file mode 100644 index 0000000000..acb13f8f08 --- /dev/null +++ b/src/binaryen/test/dot_s/alias.wast @@ -0,0 +1,70 @@ +(module + (type $FUNCSIG$v (func)) + (import "env" "memory" (memory $0 1)) + (table 2 2 anyfunc) + (elem (i32.const 0) $__wasm_nullptr $__exit) + (data (i32.const 16) "\d2\04\00\00\00\00\00\00)\t\00\00") + (export "__exit" (func $__exit)) + (export "__needs_exit" (func $__needs_exit)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (export "dynCall_v" (func $dynCall_v)) + (func $__exit (; 0 ;) (type $FUNCSIG$v) + (drop + (i32.add + (i32.load + (i32.const 16) + ) + (i32.load + (i32.const 24) + ) + ) + ) + ) + (func $__needs_exit (; 1 ;) (result i32) + (call $__exit) + (return + (i32.const 1) + ) + ) + (func $__wasm_nullptr (; 2 ;) (type $FUNCSIG$v) + (unreachable) + ) + (func $stackSave (; 3 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 4 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 5 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) + (func $dynCall_v (; 6 ;) (param $fptr i32) + (call_indirect (type $FUNCSIG$v) + (get_local $fptr) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 28, "initializers": [] } diff --git a/src/binaryen/test/dot_s/alternate-lcomm.s b/src/binaryen/test/dot_s/alternate-lcomm.s new file mode 100644 index 0000000000..70966ef055 --- /dev/null +++ b/src/binaryen/test/dot_s/alternate-lcomm.s @@ -0,0 +1,5 @@ + .data + .type a,@object + .lcomm a,1 + .type b,@object + .lcomm b,3 diff --git a/src/binaryen/test/dot_s/alternate-lcomm.wast b/src/binaryen/test/dot_s/alternate-lcomm.wast new file mode 100644 index 0000000000..b998ca27a7 --- /dev/null +++ b/src/binaryen/test/dot_s/alternate-lcomm.wast @@ -0,0 +1,38 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $stackSave (; 0 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 1 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 2 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 16, "initializers": [] } diff --git a/src/binaryen/test/dot_s/asm_const.s b/src/binaryen/test/dot_s/asm_const.s new file mode 100644 index 0000000000..a58f16a48e --- /dev/null +++ b/src/binaryen/test/dot_s/asm_const.s @@ -0,0 +1,24 @@ + .text + .file "/tmp/tmpkxUaTH/a.out.bc" + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: + i32.const $push0=, .str + call emscripten_asm_const@FUNCTION, $pop0 + i32.const $push1=, 0 + return $pop1 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + + .type .str,@object # @.str + .data +.str: + .asciz "{ Module.print(\"hello, world!\"); }" + .size .str, 35 + + + .imports + .import emscripten_asm_const "" emscripten_asm_const (param i32) diff --git a/src/binaryen/test/dot_s/asm_const.wast b/src/binaryen/test/dot_s/asm_const.wast new file mode 100644 index 0000000000..0974c817e5 --- /dev/null +++ b/src/binaryen/test/dot_s/asm_const.wast @@ -0,0 +1,50 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (import "env" "memory" (memory $0 1)) + (import "env" "emscripten_asm_const_v" (func $emscripten_asm_const_v (param i32))) + (table 0 anyfunc) + (data (i32.const 16) "{ Module.print(\"hello, world!\"); }\00") + (export "main" (func $main)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $main (; 1 ;) (result i32) + (call $emscripten_asm_const_v + (i32.const 0) + ) + (return + (i32.const 0) + ) + ) + (func $stackSave (; 2 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 3 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 4 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {"0": ["{ Module.print(\"hello, world!\"); }", ["v"]]},"staticBump": 51, "initializers": [] } diff --git a/src/binaryen/test/dot_s/basics.s b/src/binaryen/test/dot_s/basics.s new file mode 100644 index 0000000000..fd2f328647 --- /dev/null +++ b/src/binaryen/test/dot_s/basics.s @@ -0,0 +1,77 @@ + .text + .file "/tmp/tmplu1mMq/a.out.bc" + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: + i32.const $push0=, .str + call $drop=, puts@FUNCTION, $pop0 + i32.const $push1=, 31 + i32.shr_s $push2=, $0, $pop1 + i32.const $push3=, 30 + i32.shr_u $push4=, $pop2, $pop3 + i32.add $push5=, $0, $pop4 + i32.const $push6=, -4 + i32.and $push7=, $pop5, $pop6 + i32.sub $push8=, $0, $pop7 + i32.const $push9=, 1 + i32.ne $push10=, $pop8, $pop9 + block + block + br_if 0, $pop10 +.LBB0_1: # %.preheader + # =>This Inner Loop Header: Depth=1 + block + loop + i32.const $push12=, 10 + i32.gt_s $push13=, $0, $pop12 + i32.add $0=, $pop13, $0 + i32.const $push14=, 5 + i32.rem_s $push15=, $0, $pop14 + i32.const $push16=, 3 + i32.ne $push17=, $pop15, $pop16 + block + br_if 0, $pop17 +# BB#2: # in Loop: Header=.LBB0_1 Depth=1 + i32.const $push18=, 111 + i32.rem_s $push19=, $0, $pop18 + i32.add $0=, $pop19, $0 + end_block + i32.const $push20=, 7 + i32.rem_s $push21=, $0, $pop20 + i32.const $push22=, 0 + i32.eq $push23=, $pop21, $pop22 + br_if 2, $pop23 + br 0 + end_loop + end_block + end_block + i32.const $push11=, -12 + i32.add $0=, $0, $pop11 + i32.const $drop=, main@FUNCTION # just take address for testing + end_block + copy_local $push24=, $0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + + .type .str,@object # @.str + .data +.str: + .asciz "hello, world!\n" + .size .str, 15 + + .type a2,@object # @a2 + .globl a2 +a2: + .int8 118 # 0x76 + .ascii "cq" + .size a2, 3 # surprisingly large size + + .type a3,@object # @a3 + .globl a3 +a3: + .int32 a2-10 + diff --git a/src/binaryen/test/dot_s/basics.wast b/src/binaryen/test/dot_s/basics.wast new file mode 100644 index 0000000000..57b3b98993 --- /dev/null +++ b/src/binaryen/test/dot_s/basics.wast @@ -0,0 +1,141 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (import "env" "puts" (func $puts (param i32))) + (import "env" "memory" (memory $0 1)) + (table 2 2 anyfunc) + (elem (i32.const 0) $__wasm_nullptr $main) + (data (i32.const 16) "hello, world!\n\00") + (data (i32.const 32) "vcq") + (data (i32.const 48) "\16\00\00\00") + (export "main" (func $main)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (export "dynCall_iii" (func $dynCall_iii)) + (func $main (; 1 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (call $puts + (i32.const 16) + ) + (block $label$0 + (block $label$1 + (br_if $label$1 + (i32.ne + (i32.sub + (get_local $0) + (i32.and + (i32.add + (get_local $0) + (i32.shr_u + (i32.shr_s + (get_local $0) + (i32.const 31) + ) + (i32.const 30) + ) + ) + (i32.const -4) + ) + ) + (i32.const 1) + ) + ) + (block $label$2 + (loop $label$3 + (set_local $0 + (i32.add + (i32.gt_s + (get_local $0) + (i32.const 10) + ) + (get_local $0) + ) + ) + (block $label$4 + (br_if $label$4 + (i32.ne + (i32.rem_s + (get_local $0) + (i32.const 5) + ) + (i32.const 3) + ) + ) + (set_local $0 + (i32.add + (i32.rem_s + (get_local $0) + (i32.const 111) + ) + (get_local $0) + ) + ) + ) + (br_if $label$1 + (i32.eq + (i32.rem_s + (get_local $0) + (i32.const 7) + ) + (i32.const 0) + ) + ) + (br $label$3) + ) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const -12) + ) + ) + (drop + (i32.const 1) + ) + ) + (get_local $0) + ) + (func $__wasm_nullptr (; 2 ;) (type $FUNCSIG$v) + (unreachable) + ) + (func $stackSave (; 3 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 4 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 5 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) + (func $dynCall_iii (; 6 ;) (param $fptr i32) (param $0 i32) (param $1 i32) (result i32) + (call_indirect (type $FUNCSIG$iii) + (get_local $0) + (get_local $1) + (get_local $fptr) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 52, "initializers": [] } diff --git a/src/binaryen/test/dot_s/bcp-1.s b/src/binaryen/test/dot_s/bcp-1.s new file mode 100644 index 0000000000..e63778462a --- /dev/null +++ b/src/binaryen/test/dot_s/bcp-1.s @@ -0,0 +1,424 @@ + .text + .file "/b/build/slave/linux/build/src/src/work/gcc/gcc/testsuite/gcc.c-torture/execute/bcp-1.c" + .section .text.bad0,"ax",@progbits + .hidden bad0 + .globl bad0 + .type bad0,@function +bad0: # @bad0 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + return $pop0 + .endfunc +.Lfunc_end0: + .size bad0, .Lfunc_end0-bad0 + + .section .text.bad1,"ax",@progbits + .hidden bad1 + .globl bad1 + .type bad1,@function +bad1: # @bad1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + return $pop0 + .endfunc +.Lfunc_end1: + .size bad1, .Lfunc_end1-bad1 + + .section .text.bad2,"ax",@progbits + .hidden bad2 + .globl bad2 + .type bad2,@function +bad2: # @bad2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + return $pop0 + .endfunc +.Lfunc_end2: + .size bad2, .Lfunc_end2-bad2 + + .section .text.bad3,"ax",@progbits + .hidden bad3 + .globl bad3 + .type bad3,@function +bad3: # @bad3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + return $pop0 + .endfunc +.Lfunc_end3: + .size bad3, .Lfunc_end3-bad3 + + .section .text.bad4,"ax",@progbits + .hidden bad4 + .globl bad4 + .type bad4,@function +bad4: # @bad4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + return $pop0 + .endfunc +.Lfunc_end4: + .size bad4, .Lfunc_end4-bad4 + + .section .text.bad5,"ax",@progbits + .hidden bad5 + .globl bad5 + .type bad5,@function +bad5: # @bad5 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + return $pop0 + .endfunc +.Lfunc_end5: + .size bad5, .Lfunc_end5-bad5 + + .section .text.bad6,"ax",@progbits + .hidden bad6 + .globl bad6 + .type bad6,@function +bad6: # @bad6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + return $pop0 + .endfunc +.Lfunc_end6: + .size bad6, .Lfunc_end6-bad6 + + .section .text.bad7,"ax",@progbits + .hidden bad7 + .globl bad7 + .type bad7,@function +bad7: # @bad7 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + return $pop0 + .endfunc +.Lfunc_end7: + .size bad7, .Lfunc_end7-bad7 + + .section .text.bad8,"ax",@progbits + .hidden bad8 + .globl bad8 + .type bad8,@function +bad8: # @bad8 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + return $pop0 + .endfunc +.Lfunc_end8: + .size bad8, .Lfunc_end8-bad8 + + .section .text.bad9,"ax",@progbits + .hidden bad9 + .globl bad9 + .type bad9,@function +bad9: # @bad9 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + return $pop0 + .endfunc +.Lfunc_end9: + .size bad9, .Lfunc_end9-bad9 + + .section .text.bad10,"ax",@progbits + .hidden bad10 + .globl bad10 + .type bad10,@function +bad10: # @bad10 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + return $pop0 + .endfunc +.Lfunc_end10: + .size bad10, .Lfunc_end10-bad10 + + .section .text.good0,"ax",@progbits + .hidden good0 + .globl good0 + .type good0,@function +good0: # @good0 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + return $pop0 + .endfunc +.Lfunc_end11: + .size good0, .Lfunc_end11-good0 + + .section .text.good1,"ax",@progbits + .hidden good1 + .globl good1 + .type good1,@function +good1: # @good1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + return $pop0 + .endfunc +.Lfunc_end12: + .size good1, .Lfunc_end12-good1 + + .section .text.good2,"ax",@progbits + .hidden good2 + .globl good2 + .type good2,@function +good2: # @good2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + return $pop0 + .endfunc +.Lfunc_end13: + .size good2, .Lfunc_end13-good2 + + .section .text.opt0,"ax",@progbits + .hidden opt0 + .globl opt0 + .type opt0,@function +opt0: # @opt0 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + return $pop0 + .endfunc +.Lfunc_end14: + .size opt0, .Lfunc_end14-opt0 + + .section .text.opt1,"ax",@progbits + .hidden opt1 + .globl opt1 + .type opt1,@function +opt1: # @opt1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + return $pop0 + .endfunc +.Lfunc_end15: + .size opt1, .Lfunc_end15-opt1 + + .section .text.opt2,"ax",@progbits + .hidden opt2 + .globl opt2 + .type opt2,@function +opt2: # @opt2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + return $pop0 + .endfunc +.Lfunc_end16: + .size opt2, .Lfunc_end16-opt2 + + .section .text.main,"ax",@progbits + .hidden main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $0=, 0 + block + i32.load $push0=, bad_t0($0) + i32.call_indirect $push1=, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %for.cond + i32.load $push2=, bad_t0+4($0) + i32.call_indirect $push3=, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %for.cond.1 + i32.load $push4=, bad_t0+8($0) + i32.call_indirect $push5=, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#3: # %for.cond.2 + i32.load $push6=, bad_t0+12($0) + i32.call_indirect $push7=, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#4: # %for.cond.3 + i32.load $push8=, bad_t0+16($0) + i32.call_indirect $push9=, $pop8 + br_if 0, $pop9 # 0: down to label0 +# BB#5: # %for.cond.4 + i32.load $push10=, bad_t0+20($0) + i32.call_indirect $push11=, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#6: # %for.cond.5 + i32.load $1=, bad_t1($0) + i32.const $2=, 1 + block + i32.call_indirect $push12=, $2, $1 + br_if 0, $pop12 # 0: down to label1 +# BB#7: # %for.cond1 + i32.load $push13=, bad_t1+4($0) + i32.call_indirect $push14=, $2, $pop13 + br_if 0, $pop14 # 0: down to label1 +# BB#8: # %for.cond1.1 + i32.load $push15=, bad_t1+8($0) + i32.call_indirect $push16=, $2, $pop15 + br_if 0, $pop16 # 0: down to label1 +# BB#9: # %for.cond1.2 + i32.load $1=, bad_t2($0) + i32.const $2=, .L.str + block + i32.call_indirect $push17=, $2, $1 + br_if 0, $pop17 # 0: down to label2 +# BB#10: # %for.cond12 + i32.load $push18=, bad_t2+4($0) + i32.call_indirect $push19=, $2, $pop18 + br_if 0, $pop19 # 0: down to label2 +# BB#11: # %for.cond12.1 + block + i32.load $push20=, good_t0($0) + i32.call_indirect $push21=, $pop20 + i32.const $push32=, 0 + i32.eq $push33=, $pop21, $pop32 + br_if 0, $pop33 # 0: down to label3 +# BB#12: # %for.cond23 + i32.load $push22=, good_t0+4($0) + i32.call_indirect $push23=, $pop22 + i32.const $push34=, 0 + i32.eq $push35=, $pop23, $pop34 + br_if 0, $pop35 # 0: down to label3 +# BB#13: # %for.cond23.1 + i32.load $push24=, good_t0+8($0) + i32.call_indirect $push25=, $pop24 + i32.const $push36=, 0 + i32.eq $push37=, $pop25, $pop36 + br_if 0, $pop37 # 0: down to label3 +# BB#14: # %for.cond23.2 + block + i32.load $push26=, opt_t0($0) + i32.call_indirect $push27=, $pop26 + i32.const $push38=, 0 + i32.eq $push39=, $pop27, $pop38 + br_if 0, $pop39 # 0: down to label4 +# BB#15: # %for.cond34 + i32.load $push28=, opt_t0+4($0) + i32.call_indirect $push29=, $pop28 + i32.const $push40=, 0 + i32.eq $push41=, $pop29, $pop40 + br_if 0, $pop41 # 0: down to label4 +# BB#16: # %for.cond34.1 + i32.load $push30=, opt_t0+8($0) + i32.call_indirect $push31=, $pop30 + i32.const $push42=, 0 + i32.eq $push43=, $pop31, $pop42 + br_if 0, $pop43 # 0: down to label4 +# BB#17: # %for.cond34.2 + call exit@FUNCTION, $0 + unreachable +.LBB17_18: # %if.then40 + end_block # label4: + call abort@FUNCTION + unreachable +.LBB17_19: # %if.then29 + end_block # label3: + call abort@FUNCTION + unreachable +.LBB17_20: # %if.then18 + end_block # label2: + call abort@FUNCTION + unreachable +.LBB17_21: # %if.then7 + end_block # label1: + call abort@FUNCTION + unreachable +.LBB17_22: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end17: + .size main, .Lfunc_end17-main + + .hidden bad_t0 # @bad_t0 + .type bad_t0,@object + .section .data.bad_t0,"aw",@progbits + .globl bad_t0 + .align 4 +bad_t0: + .int32 bad0@FUNCTION + .int32 bad1@FUNCTION + .int32 bad5@FUNCTION + .int32 bad7@FUNCTION + .int32 bad8@FUNCTION + .int32 bad10@FUNCTION + .size bad_t0, 24 + + .hidden bad_t1 # @bad_t1 + .type bad_t1,@object + .section .data.bad_t1,"aw",@progbits + .globl bad_t1 + .align 2 +bad_t1: + .int32 bad2@FUNCTION + .int32 bad3@FUNCTION + .int32 bad6@FUNCTION + .size bad_t1, 12 + + .hidden bad_t2 # @bad_t2 + .type bad_t2,@object + .section .data.bad_t2,"aw",@progbits + .globl bad_t2 + .align 2 +bad_t2: + .int32 bad4@FUNCTION + .int32 bad9@FUNCTION + .size bad_t2, 8 + + .hidden good_t0 # @good_t0 + .type good_t0,@object + .section .data.good_t0,"aw",@progbits + .globl good_t0 + .align 2 +good_t0: + .int32 good0@FUNCTION + .int32 good1@FUNCTION + .int32 good2@FUNCTION + .size good_t0, 12 + + .hidden opt_t0 # @opt_t0 + .type opt_t0,@object + .section .data.opt_t0,"aw",@progbits + .globl opt_t0 + .align 2 +opt_t0: + .int32 opt0@FUNCTION + .int32 opt1@FUNCTION + .int32 opt2@FUNCTION + .size opt_t0, 12 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "hi" + .size .L.str, 3 + + .hidden global # @global + .type global,@object + .section .bss.global,"aw",@nobits + .globl global + .align 2 +global: + .int32 0 # 0x0 + .size global, 4 + + + .ident "clang version 3.9.0 " diff --git a/src/binaryen/test/dot_s/bcp-1.wast b/src/binaryen/test/dot_s/bcp-1.wast new file mode 100644 index 0000000000..c756875371 --- /dev/null +++ b/src/binaryen/test/dot_s/bcp-1.wast @@ -0,0 +1,357 @@ +(module + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$vi (func (param i32))) + (import "env" "abort" (func $abort)) + (import "env" "exit" (func $exit (param i32))) + (import "env" "memory" (memory $0 1)) + (table 18 18 anyfunc) + (elem (i32.const 0) $__wasm_nullptr $bad0 $bad1 $bad5 $bad7 $bad8 $bad10 $bad2 $bad3 $bad6 $bad4 $bad9 $good0 $good1 $good2 $opt0 $opt1 $opt2) + (data (i32.const 16) "\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00") + (data (i32.const 40) "\07\00\00\00\08\00\00\00\t\00\00\00") + (data (i32.const 52) "\n\00\00\00\0b\00\00\00") + (data (i32.const 60) "\0c\00\00\00\0d\00\00\00\0e\00\00\00") + (data (i32.const 72) "\0f\00\00\00\10\00\00\00\11\00\00\00") + (data (i32.const 96) "hi\00") + (data (i32.const 100) "\00\00\00\00") + (export "bad0" (func $bad0)) + (export "bad1" (func $bad1)) + (export "bad2" (func $bad2)) + (export "bad3" (func $bad3)) + (export "bad4" (func $bad4)) + (export "bad5" (func $bad5)) + (export "bad6" (func $bad6)) + (export "bad7" (func $bad7)) + (export "bad8" (func $bad8)) + (export "bad9" (func $bad9)) + (export "bad10" (func $bad10)) + (export "good0" (func $good0)) + (export "good1" (func $good1)) + (export "good2" (func $good2)) + (export "opt0" (func $opt0)) + (export "opt1" (func $opt1)) + (export "opt2" (func $opt2)) + (export "main" (func $main)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (export "dynCall_i" (func $dynCall_i)) + (export "dynCall_ii" (func $dynCall_ii)) + (func $bad0 (; 2 ;) (type $FUNCSIG$i) (result i32) + (return + (i32.const 0) + ) + ) + (func $bad1 (; 3 ;) (type $FUNCSIG$i) (result i32) + (return + (i32.const 0) + ) + ) + (func $bad2 (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (return + (i32.const 0) + ) + ) + (func $bad3 (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (return + (i32.const 0) + ) + ) + (func $bad4 (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (return + (i32.const 0) + ) + ) + (func $bad5 (; 7 ;) (type $FUNCSIG$i) (result i32) + (return + (i32.const 0) + ) + ) + (func $bad6 (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (return + (i32.const 0) + ) + ) + (func $bad7 (; 9 ;) (type $FUNCSIG$i) (result i32) + (return + (i32.const 0) + ) + ) + (func $bad8 (; 10 ;) (type $FUNCSIG$i) (result i32) + (return + (i32.const 0) + ) + ) + (func $bad9 (; 11 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (return + (i32.const 0) + ) + ) + (func $bad10 (; 12 ;) (type $FUNCSIG$i) (result i32) + (return + (i32.const 0) + ) + ) + (func $good0 (; 13 ;) (type $FUNCSIG$i) (result i32) + (return + (i32.const 1) + ) + ) + (func $good1 (; 14 ;) (type $FUNCSIG$i) (result i32) + (return + (i32.const 1) + ) + ) + (func $good2 (; 15 ;) (type $FUNCSIG$i) (result i32) + (return + (i32.const 1) + ) + ) + (func $opt0 (; 16 ;) (type $FUNCSIG$i) (result i32) + (return + (i32.const 0) + ) + ) + (func $opt1 (; 17 ;) (type $FUNCSIG$i) (result i32) + (return + (i32.const 0) + ) + ) + (func $opt2 (; 18 ;) (type $FUNCSIG$i) (result i32) + (return + (i32.const 1) + ) + ) + (func $main (; 19 ;) (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (set_local $0 + (i32.const 0) + ) + (block $label$0 + (br_if $label$0 + (call_indirect (type $FUNCSIG$i) + (i32.load offset=16 + (get_local $0) + ) + ) + ) + (br_if $label$0 + (call_indirect (type $FUNCSIG$i) + (i32.load offset=20 + (get_local $0) + ) + ) + ) + (br_if $label$0 + (call_indirect (type $FUNCSIG$i) + (i32.load offset=24 + (get_local $0) + ) + ) + ) + (br_if $label$0 + (call_indirect (type $FUNCSIG$i) + (i32.load offset=28 + (get_local $0) + ) + ) + ) + (br_if $label$0 + (call_indirect (type $FUNCSIG$i) + (i32.load offset=32 + (get_local $0) + ) + ) + ) + (br_if $label$0 + (call_indirect (type $FUNCSIG$i) + (i32.load offset=36 + (get_local $0) + ) + ) + ) + (set_local $1 + (i32.load offset=40 + (get_local $0) + ) + ) + (set_local $2 + (i32.const 1) + ) + (block $label$1 + (br_if $label$1 + (call_indirect (type $FUNCSIG$ii) + (get_local $2) + (get_local $1) + ) + ) + (br_if $label$1 + (call_indirect (type $FUNCSIG$ii) + (get_local $2) + (i32.load offset=44 + (get_local $0) + ) + ) + ) + (br_if $label$1 + (call_indirect (type $FUNCSIG$ii) + (get_local $2) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (set_local $1 + (i32.load offset=52 + (get_local $0) + ) + ) + (set_local $2 + (i32.const 96) + ) + (block $label$2 + (br_if $label$2 + (call_indirect (type $FUNCSIG$ii) + (get_local $2) + (get_local $1) + ) + ) + (br_if $label$2 + (call_indirect (type $FUNCSIG$ii) + (get_local $2) + (i32.load offset=56 + (get_local $0) + ) + ) + ) + (block $label$3 + (br_if $label$3 + (i32.eq + (call_indirect (type $FUNCSIG$i) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.const 0) + ) + ) + (br_if $label$3 + (i32.eq + (call_indirect (type $FUNCSIG$i) + (i32.load offset=64 + (get_local $0) + ) + ) + (i32.const 0) + ) + ) + (br_if $label$3 + (i32.eq + (call_indirect (type $FUNCSIG$i) + (i32.load offset=68 + (get_local $0) + ) + ) + (i32.const 0) + ) + ) + (block $label$4 + (br_if $label$4 + (i32.eq + (call_indirect (type $FUNCSIG$i) + (i32.load offset=72 + (get_local $0) + ) + ) + (i32.const 0) + ) + ) + (br_if $label$4 + (i32.eq + (call_indirect (type $FUNCSIG$i) + (i32.load offset=76 + (get_local $0) + ) + ) + (i32.const 0) + ) + ) + (br_if $label$4 + (i32.eq + (call_indirect (type $FUNCSIG$i) + (i32.load offset=80 + (get_local $0) + ) + ) + (i32.const 0) + ) + ) + (call $exit + (get_local $0) + ) + (unreachable) + ) + (call $abort) + (unreachable) + ) + (call $abort) + (unreachable) + ) + (call $abort) + (unreachable) + ) + (call $abort) + (unreachable) + ) + (call $abort) + (unreachable) + ) + (func $__wasm_nullptr (; 20 ;) (type $FUNCSIG$v) + (unreachable) + ) + (func $stackSave (; 21 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 22 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 23 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) + (func $dynCall_i (; 24 ;) (param $fptr i32) (result i32) + (call_indirect (type $FUNCSIG$i) + (get_local $fptr) + ) + ) + (func $dynCall_ii (; 25 ;) (param $fptr i32) (param $0 i32) (result i32) + (call_indirect (type $FUNCSIG$ii) + (get_local $0) + (get_local $fptr) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 104, "initializers": [] } diff --git a/src/binaryen/test/dot_s/data-offset-folding.s b/src/binaryen/test/dot_s/data-offset-folding.s new file mode 100644 index 0000000000..6286467948 --- /dev/null +++ b/src/binaryen/test/dot_s/data-offset-folding.s @@ -0,0 +1,19 @@ + .data + .type pad,@object + .globl pad + .align 2 +pad: + .int32 0 + .type arr,@object + .globl arr + .align 4 +arr: + .zero 400 + .size arr, 400 + + .type ptr,@object + .globl ptr + .align 2 +ptr: + .int32 arr+80 + .size ptr, 4 diff --git a/src/binaryen/test/dot_s/data-offset-folding.wast b/src/binaryen/test/dot_s/data-offset-folding.wast new file mode 100644 index 0000000000..78aa965395 --- /dev/null +++ b/src/binaryen/test/dot_s/data-offset-folding.wast @@ -0,0 +1,40 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 12) "\00\00\00\00") + (data (i32.const 416) "`\00\00\00") + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $stackSave (; 0 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 1 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 2 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 420, "initializers": [] } diff --git a/src/binaryen/test/dot_s/debug.s b/src/binaryen/test/dot_s/debug.s new file mode 100644 index 0000000000..2414fe28fc --- /dev/null +++ b/src/binaryen/test/dot_s/debug.s @@ -0,0 +1,309 @@ + .text + .file "fib.bc" + .hidden fib + .globl fib + .type fib,@function +fib: +.Lfunc_begin0: + .file 1 "fib.c" + .loc 1 1 0 + .param i32 + .result i32 + .local i32, i32, i32, i32 +.Ltmp0: + i32.const $3=, 0 +.Ltmp1: + i32.const $2=, -1 + i32.const $4=, 1 +.LBB0_1: + block + loop + i32.const $push1=, 1 +.Ltmp2: + .loc 1 3 17 prologue_end discriminator 1 + i32.add $2=, $2, $pop1 + .loc 1 3 3 is_stmt 0 discriminator 1 + i32.ge_s $push0=, $2, $0 + br_if 1, $pop0 +.Ltmp3: + .loc 1 4 11 is_stmt 1 + i32.add $1=, $4, $3 +.Ltmp4: + copy_local $3=, $4 + copy_local $4=, $1 + br 0 +.Ltmp5: +.LBB0_3: + end_loop + end_block +.Ltmp6: + .loc 1 6 3 + return $4 +.Ltmp7: + .endfunc +.Lfunc_end0: + .size fib, .Lfunc_end0-fib + + .section .debug_str,"MS",@progbits,1 +.Linfo_string0: + .asciz "clang version 3.9.0 (trunk 266025)" +.Linfo_string1: + .asciz "fib.c" +.Linfo_string2: + .asciz "/Users/yury/llvmwasm" +.Linfo_string3: + .asciz "fib" +.Linfo_string4: + .asciz "int" +.Linfo_string5: + .asciz "n" +.Linfo_string6: + .asciz "a" +.Linfo_string7: + .asciz "b" +.Linfo_string8: + .asciz "i" +.Linfo_string9: + .asciz "t" + .section .debug_loc,"",@progbits +.Ldebug_loc0: + .int32 .Lfunc_begin0-.Lfunc_begin0 + .int32 .Lfunc_end0-.Lfunc_begin0 + .int16 1 + .int8 150 + .int32 0 + .int32 0 +.Ldebug_loc1: + .int32 .Ltmp0-.Lfunc_begin0 + .int32 .Ltmp6-.Lfunc_begin0 + .int16 3 + .int8 17 + .int8 0 + .int8 159 + .int32 .Ltmp6-.Lfunc_begin0 + .int32 .Lfunc_end0-.Lfunc_begin0 + .int16 1 + .int8 150 + .int32 0 + .int32 0 +.Ldebug_loc2: + .int32 .Ltmp0-.Lfunc_begin0 + .int32 .Ltmp4-.Lfunc_begin0 + .int16 3 + .int8 17 + .int8 1 + .int8 159 + .int32 .Ltmp4-.Lfunc_begin0 + .int32 .Lfunc_end0-.Lfunc_begin0 + .int16 1 + .int8 150 + .int32 0 + .int32 0 +.Ldebug_loc3: + .int32 .Ltmp4-.Lfunc_begin0 + .int32 .Lfunc_end0-.Lfunc_begin0 + .int16 1 + .int8 150 + .int32 0 + .int32 0 + .section .debug_abbrev,"",@progbits +.Lsection_abbrev: + .int8 1 + .int8 17 + .int8 1 + .int8 37 + .int8 14 + .int8 19 + .int8 5 + .int8 3 + .int8 14 + .int8 16 + .int8 23 + .int8 27 + .int8 14 + .ascii "\341\177" + .int8 25 + .int8 17 + .int8 1 + .int8 18 + .int8 6 + .int8 0 + .int8 0 + .int8 2 + .int8 46 + .int8 1 + .int8 17 + .int8 1 + .int8 18 + .int8 6 + .ascii "\347\177" + .int8 25 + .int8 64 + .int8 24 + .int8 3 + .int8 14 + .int8 58 + .int8 11 + .int8 59 + .int8 11 + .int8 39 + .int8 25 + .int8 73 + .int8 19 + .int8 63 + .int8 25 + .ascii "\341\177" + .int8 25 + .int8 0 + .int8 0 + .int8 3 + .int8 5 + .int8 0 + .int8 2 + .int8 23 + .int8 3 + .int8 14 + .int8 58 + .int8 11 + .int8 59 + .int8 11 + .int8 73 + .int8 19 + .int8 0 + .int8 0 + .int8 4 + .int8 52 + .int8 0 + .int8 2 + .int8 23 + .int8 3 + .int8 14 + .int8 58 + .int8 11 + .int8 59 + .int8 11 + .int8 73 + .int8 19 + .int8 0 + .int8 0 + .int8 5 + .int8 52 + .int8 0 + .int8 28 + .int8 13 + .int8 3 + .int8 14 + .int8 58 + .int8 11 + .int8 59 + .int8 11 + .int8 73 + .int8 19 + .int8 0 + .int8 0 + .int8 6 + .int8 36 + .int8 0 + .int8 3 + .int8 14 + .int8 62 + .int8 11 + .int8 11 + .int8 11 + .int8 0 + .int8 0 + .int8 0 + .section .debug_info,"",@progbits +.Lsection_info: +.Lcu_begin0: + .int32 135 + .int16 4 + .int32 .Lsection_abbrev + .int8 4 + .int8 1 + .int32 .Linfo_string0 + .int16 12 + .int32 .Linfo_string1 + .int32 .Lline_table_start0 + .int32 .Linfo_string2 + + .int32 .Lfunc_begin0 + .int32 .Lfunc_end0-.Lfunc_begin0 + .int8 2 + .int32 .Lfunc_begin0 + .int32 .Lfunc_end0-.Lfunc_begin0 + + .int8 0 + .int32 .Linfo_string3 + .int8 1 + .int8 1 + + .int32 131 + + + .int8 3 + .int32 .Ldebug_loc0 + .int32 .Linfo_string5 + .int8 1 + .int8 1 + .int32 131 + .int8 4 + .int32 .Ldebug_loc1 + .int32 .Linfo_string6 + .int8 1 + .int8 2 + .int32 131 + .int8 4 + .int32 .Ldebug_loc2 + .int32 .Linfo_string7 + .int8 1 + .int8 2 + .int32 131 + .int8 5 + .int8 0 + .int32 .Linfo_string8 + .int8 1 + .int8 2 + .int32 131 + .int8 4 + .int32 .Ldebug_loc3 + .int32 .Linfo_string9 + .int8 1 + .int8 2 + .int32 131 + .int8 0 + .int8 6 + .int32 .Linfo_string4 + .int8 5 + .int8 4 + .int8 0 + .section .debug_ranges,"",@progbits +.Ldebug_range: + .section .debug_macinfo,"",@progbits +.Ldebug_macinfo: +.Lcu_macro_begin0: + .int8 0 + .section .debug_pubnames,"",@progbits + .int32 .LpubNames_end0-.LpubNames_begin0 +.LpubNames_begin0: + .int16 2 + .int32 .Lcu_begin0 + .int32 139 + .int32 38 + .asciz "fib" + .int32 0 +.LpubNames_end0: + .section .debug_pubtypes,"",@progbits + .int32 .LpubTypes_end0-.LpubTypes_begin0 +.LpubTypes_begin0: + .int16 2 + .int32 .Lcu_begin0 + .int32 139 + .int32 131 + .asciz "int" + .int32 0 +.LpubTypes_end0: + + .ident "clang version 3.9.0 (trunk 266025)" + .section .debug_line,"",@progbits +.Lline_table_start0: diff --git a/src/binaryen/test/dot_s/debug.wast b/src/binaryen/test/dot_s/debug.wast new file mode 100644 index 0000000000..6a7d36eace --- /dev/null +++ b/src/binaryen/test/dot_s/debug.wast @@ -0,0 +1,91 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (export "fib" (func $fib)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $fib (; 0 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + ;;@ fib.c:1:0 + (set_local $3 + (i32.const 0) + ) + (set_local $2 + (i32.const -1) + ) + (set_local $4 + (i32.const 1) + ) + (block $label$0 + (loop $label$1 + ;;@ fib.c:3:17 + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + ;;@ fib.c:3:3 + (br_if $label$0 + (i32.ge_s + (get_local $2) + (get_local $0) + ) + ) + ;;@ fib.c:4:11 + (set_local $1 + (i32.add + (get_local $4) + (get_local $3) + ) + ) + (set_local $3 + (get_local $4) + ) + (set_local $4 + (get_local $1) + ) + (br $label$1) + ) + ) + ;;@ fib.c:6:3 + (return + (get_local $4) + ) + ) + (func $stackSave (; 1 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 2 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 3 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] } diff --git a/src/binaryen/test/dot_s/dso_handle.s b/src/binaryen/test/dot_s/dso_handle.s new file mode 100644 index 0000000000..87cf165fbb --- /dev/null +++ b/src/binaryen/test/dot_s/dso_handle.s @@ -0,0 +1,12 @@ + .text + .file "/tmp/tmplu1mMq/a.out.bc" + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: + i32.const $push0=, __dso_handle + return $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main diff --git a/src/binaryen/test/dot_s/dso_handle.wast b/src/binaryen/test/dot_s/dso_handle.wast new file mode 100644 index 0000000000..7dfb84db2f --- /dev/null +++ b/src/binaryen/test/dot_s/dso_handle.wast @@ -0,0 +1,44 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (export "main" (func $main)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $main (; 0 ;) (result i32) + (return + (i32.const 8) + ) + ) + (func $stackSave (; 1 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 2 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 3 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] } diff --git a/src/binaryen/test/dot_s/dyncall.c b/src/binaryen/test/dot_s/dyncall.c new file mode 100644 index 0000000000..791c5d67a9 --- /dev/null +++ b/src/binaryen/test/dot_s/dyncall.c @@ -0,0 +1,30 @@ +#include + +/* Used to generate dyncall.s */ + +uint32_t i() { + return 0; +} +uint32_t i_f(float f) { + return 0; +} +void vd(double d) { + return; +} +float ffjjdi(float f, uint64_t j, uint64_t j2, double d, uint32_t i) { + return 0.0; +} + +/* Duplicates sig vd */ +void vd2(double d) { + return; +} + +int main() { + asm(" i32.const $drop=, i@FUNCTION"); + asm(" i32.const $drop=, i_f@FUNCTION"); + asm(" i32.const $drop=, vd@FUNCTION"); + asm(" i32.const $drop=, ffjjdi@FUNCTION"); + asm(" i32.const $drop=, vd2@FUNCTION"); + return 0; +} diff --git a/src/binaryen/test/dot_s/dyncall.s b/src/binaryen/test/dot_s/dyncall.s new file mode 100644 index 0000000000..0d36f74639 --- /dev/null +++ b/src/binaryen/test/dot_s/dyncall.s @@ -0,0 +1,97 @@ + .text + .file "test/dot_s/dyncall.c" + .section .text.i,"ax",@progbits + .hidden i + .globl i + .type i,@function +i: # @i + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size i, .Lfunc_end0-i + + .section .text.i_f,"ax",@progbits + .hidden i_f + .globl i_f + .type i_f,@function +i_f: # @i_f + .param f32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size i_f, .Lfunc_end1-i_f + + .section .text.vd,"ax",@progbits + .hidden vd + .globl vd + .type vd,@function +vd: # @vd + .param f64 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end2: + .size vd, .Lfunc_end2-vd + + .section .text.ffjjdi,"ax",@progbits + .hidden ffjjdi + .globl ffjjdi + .type ffjjdi,@function +ffjjdi: # @ffjjdi + .param f32, i64, i64, f64, i32 + .result f32 +# BB#0: # %entry + f32.const $push0=, 0x0p0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size ffjjdi, .Lfunc_end3-ffjjdi + + .section .text.vd2,"ax",@progbits + .hidden vd2 + .globl vd2 + .type vd2,@function +vd2: # @vd2 + .param f64 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end4: + .size vd2, .Lfunc_end4-vd2 + + .section .text.main,"ax",@progbits + .hidden main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + #APP + i32.const $drop=, i@FUNCTION + #NO_APP + #APP + i32.const $drop=, i_f@FUNCTION + #NO_APP + #APP + i32.const $drop=, vd@FUNCTION + #NO_APP + #APP + i32.const $drop=, ffjjdi@FUNCTION + #NO_APP + #APP + i32.const $drop=, vd2@FUNCTION + #NO_APP + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end5: + .size main, .Lfunc_end5-main + + + .ident "clang version 3.9.0 (trunk 272564) (llvm/trunk 272563)" diff --git a/src/binaryen/test/dot_s/dyncall.wast b/src/binaryen/test/dot_s/dyncall.wast new file mode 100644 index 0000000000..35ee92d9b2 --- /dev/null +++ b/src/binaryen/test/dot_s/dyncall.wast @@ -0,0 +1,104 @@ +(module + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$if (func (param f32) (result i32))) + (type $FUNCSIG$vd (func (param f64))) + (type $FUNCSIG$ffjjdi (func (param f32 i64 i64 f64 i32) (result f32))) + (import "env" "memory" (memory $0 1)) + (table 6 6 anyfunc) + (elem (i32.const 0) $__wasm_nullptr $i $i_f $vd $ffjjdi $vd2) + (export "i" (func $i)) + (export "i_f" (func $i_f)) + (export "vd" (func $vd)) + (export "ffjjdi" (func $ffjjdi)) + (export "vd2" (func $vd2)) + (export "main" (func $main)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (export "dynCall_i" (func $dynCall_i)) + (export "dynCall_if" (func $dynCall_if)) + (export "dynCall_vd" (func $dynCall_vd)) + (func $i (; 0 ;) (type $FUNCSIG$i) (result i32) + (i32.const 0) + ) + (func $i_f (; 1 ;) (type $FUNCSIG$if) (param $0 f32) (result i32) + (i32.const 0) + ) + (func $vd (; 2 ;) (type $FUNCSIG$vd) (param $0 f64) + ) + (func $ffjjdi (; 3 ;) (type $FUNCSIG$ffjjdi) (param $0 f32) (param $1 i64) (param $2 i64) (param $3 f64) (param $4 i32) (result f32) + (f32.const 0) + ) + (func $vd2 (; 4 ;) (type $FUNCSIG$vd) (param $0 f64) + ) + (func $main (; 5 ;) (result i32) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + (drop + (i32.const 3) + ) + (drop + (i32.const 4) + ) + (drop + (i32.const 5) + ) + (i32.const 0) + ) + (func $__wasm_nullptr (; 6 ;) (type $FUNCSIG$v) + (unreachable) + ) + (func $stackSave (; 7 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 8 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 9 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) + (func $dynCall_i (; 10 ;) (param $fptr i32) (result i32) + (call_indirect (type $FUNCSIG$i) + (get_local $fptr) + ) + ) + (func $dynCall_if (; 11 ;) (param $fptr i32) (param $0 f32) (result i32) + (call_indirect (type $FUNCSIG$if) + (get_local $0) + (get_local $fptr) + ) + ) + (func $dynCall_vd (; 12 ;) (param $fptr i32) (param $0 f64) + (call_indirect (type $FUNCSIG$vd) + (get_local $0) + (get_local $fptr) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] } diff --git a/src/binaryen/test/dot_s/exit.s b/src/binaryen/test/dot_s/exit.s new file mode 100644 index 0000000000..9b8121fbdb --- /dev/null +++ b/src/binaryen/test/dot_s/exit.s @@ -0,0 +1,13 @@ +.text + .file "/s/newgit/native_client/toolchain_build/src/pnacl-gcc/gcc/testsuite/gcc.c-torture/execute/enum-1.c" + .globl main + .type main,@function +main: + .result i32 + .local i32 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main diff --git a/src/binaryen/test/dot_s/exit.wast b/src/binaryen/test/dot_s/exit.wast new file mode 100644 index 0000000000..65fb224cc0 --- /dev/null +++ b/src/binaryen/test/dot_s/exit.wast @@ -0,0 +1,48 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (import "env" "exit" (func $exit (param i32))) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (export "main" (func $main)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $main (; 1 ;) (result i32) + (local $0 i32) + (call $exit + (i32.const 0) + ) + (unreachable) + ) + (func $stackSave (; 2 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 3 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 4 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] } diff --git a/src/binaryen/test/dot_s/export_malloc_free.s b/src/binaryen/test/dot_s/export_malloc_free.s new file mode 100644 index 0000000000..084ab03837 --- /dev/null +++ b/src/binaryen/test/dot_s/export_malloc_free.s @@ -0,0 +1,57 @@ + .text + .file "export_malloc_free.bc" + .hidden main + .globl main + .type main,@function +main: + .result i32 + i32.const $push0=, 0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + + .weak malloc + .type malloc,@function +malloc: + .param i32 + .result i32 + i32.const $push0=, 0 + .endfunc +.Lfunc_end20: + .size malloc, .Lfunc_end20-malloc + + .weak free + .type free,@function +free: + .param i32 + .endfunc +.Lfunc_end21: + .size free, .Lfunc_end21-free + + .weak realloc + .type realloc,@function +realloc: + .param i32, i32 + .result i32 + i32.const $push0=, 0 + .endfunc +.Lfunc_end22: + .size realloc, .Lfunc_end22-realloc + + .type memalign,@function +memalign: + .param i32, i32 + .result i32 + i32.const $push0=, 0 + .endfunc +.Lfunc_end2: + .size memalign, .Lfunc_end2-memalign + + .type not_a_malloc,@function +not_a_malloc: + .param i32, i32 + .result i32 + i32.const $push0=, 0 + .endfunc +.Lfunc_end2: + .size not_a_malloc, .Lfunc_end2-not_a_malloc diff --git a/src/binaryen/test/dot_s/export_malloc_free.wast b/src/binaryen/test/dot_s/export_malloc_free.wast new file mode 100644 index 0000000000..33dbcdfe75 --- /dev/null +++ b/src/binaryen/test/dot_s/export_malloc_free.wast @@ -0,0 +1,60 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (export "main" (func $main)) + (export "malloc" (func $malloc)) + (export "free" (func $free)) + (export "realloc" (func $realloc)) + (export "memalign" (func $memalign)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $main (; 0 ;) (result i32) + (i32.const 0) + ) + (func $malloc (; 1 ;) (param $0 i32) (result i32) + (i32.const 0) + ) + (func $free (; 2 ;) (param $0 i32) + ) + (func $realloc (; 3 ;) (param $0 i32) (param $1 i32) (result i32) + (i32.const 0) + ) + (func $memalign (; 4 ;) (param $0 i32) (param $1 i32) (result i32) + (i32.const 0) + ) + (func $not_a_malloc (; 5 ;) (param $0 i32) (param $1 i32) (result i32) + (i32.const 0) + ) + (func $stackSave (; 6 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 7 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 8 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] } diff --git a/src/binaryen/test/dot_s/fix_em_ehsjlj_names.s b/src/binaryen/test/dot_s/fix_em_ehsjlj_names.s new file mode 100644 index 0000000000..15d4452b1d --- /dev/null +++ b/src/binaryen/test/dot_s/fix_em_ehsjlj_names.s @@ -0,0 +1,73 @@ + .text + .file "fix_em_ehsjlj_names.bc" + .type _Z5func1v,@function +_Z5func1v: + .endfunc +.Lfunc_end0: + .size _Z5func1v, .Lfunc_end0-_Z5func1v + + .type _Z5func2iii,@function +_Z5func2iii: + .param i32, i32, i32 + .result i32 + i32.const $push0=, 3 + .endfunc +.Lfunc_end1: + .size _Z5func2iii, .Lfunc_end1-_Z5func2iii + + .type _Z5func3fd,@function +_Z5func3fd: + .param f32, f64 + .result f32 + f32.const $push0=, 0x1p0 + .endfunc +.Lfunc_end2: + .size _Z5func3fd, .Lfunc_end2-_Z5func3fd + + .type _Z5func4P8mystructS_,@function +_Z5func4P8mystructS_: + .param i32, i32 + .result i32 + i32.const $push0=, 0 + .endfunc +.Lfunc_end3: + .size _Z5func4P8mystructS_, .Lfunc_end3-_Z5func4P8mystructS_ + + .hidden main + .globl main + .type main,@function +main: + .result i32 + .local i32, i32, i32, i32 + i32.const $push1=, _Z5func1v@FUNCTION + call __invoke_void@FUNCTION, $pop1 + i32.const $push5=, _Z5func2iii@FUNCTION + i32.const $push4=, 1 + i32.const $push3=, 2 + i32.const $push2=, 3 + i32.call $drop=, __invoke_i32_i32_i32_i32@FUNCTION, $pop5, $pop4, $pop3, $pop2 + i32.const $push8=, _Z5func3fd@FUNCTION + f32.const $push7=, 0x1.8p0 + f64.const $push6=, 0x1.b333333333333p1 + f32.call $drop=, __invoke_float_float_double@FUNCTION, $pop8, $pop7, $pop6 + i32.const $push9=, _Z5func4P8mystructS_@FUNCTION + i32.const $push10=, 32 + i32.add $push11=, $1, $pop10 + i32.const $push12=, 4 + i32.add $push13=, $1, $pop12 + i32.call $drop=, "__invoke_%struct.mystruct*_%struct.mystruct*_%struct.mystruct*"@FUNCTION, $pop9, $pop11, $pop13 + i32.const $push14=, 5 + i32.const $push15=, 6 + call emscripten_longjmp_jmpbuf@FUNCTION, $pop15, $pop14 + i32.const $push16=, 0 + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + + .functype __invoke_void, void, i32 + .functype __invoke_i32_i32_i32_i32, i32, i32, i32, i32, i32 + .functype __invoke_float_float_double, f32, i32, f32, f64 + .functype __invoke_%struct.mystruct*_%struct.mystruct*_%struct.mystruct*, i32, i32, i32, i32 + .functype emscripten_longjmp_jmpbuf, void, i32, i32 + .functype emscripten_longjmp, void, i32, i32 + diff --git a/src/binaryen/test/dot_s/fix_em_ehsjlj_names.wast b/src/binaryen/test/dot_s/fix_em_ehsjlj_names.wast new file mode 100644 index 0000000000..28dc008670 --- /dev/null +++ b/src/binaryen/test/dot_s/fix_em_ehsjlj_names.wast @@ -0,0 +1,140 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) + (type $FUNCSIG$fifd (func (param i32 f32 f64) (result f32))) + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$ffd (func (param f32 f64) (result f32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (import "env" "emscripten_longjmp" (func $emscripten_longjmp (param i32 i32))) + (import "env" "invoke_ffd" (func $invoke_ffd (param i32 f32 f64) (result f32))) + (import "env" "invoke_iii" (func $invoke_iii (param i32 i32 i32) (result i32))) + (import "env" "invoke_iiii" (func $invoke_iiii (param i32 i32 i32 i32) (result i32))) + (import "env" "invoke_v" (func $invoke_v (param i32))) + (import "env" "memory" (memory $0 1)) + (table 5 5 anyfunc) + (elem (i32.const 0) $__wasm_nullptr $_Z5func1v $_Z5func2iii $_Z5func3fd $_Z5func4P8mystructS_) + (export "main" (func $main)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (export "dynCall_v" (func $dynCall_v)) + (export "dynCall_iiii" (func $dynCall_iiii)) + (export "dynCall_ffd" (func $dynCall_ffd)) + (export "dynCall_iii" (func $dynCall_iii)) + (func $_Z5func1v (; 5 ;) (type $FUNCSIG$v) + ) + (func $_Z5func2iii (; 6 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (i32.const 3) + ) + (func $_Z5func3fd (; 7 ;) (type $FUNCSIG$ffd) (param $0 f32) (param $1 f64) (result f32) + (f32.const 1) + ) + (func $_Z5func4P8mystructS_ (; 8 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (i32.const 0) + ) + (func $main (; 9 ;) (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (call $invoke_v + (i32.const 1) + ) + (drop + (call $invoke_iiii + (i32.const 2) + (i32.const 1) + (i32.const 2) + (i32.const 3) + ) + ) + (drop + (call $invoke_ffd + (i32.const 3) + (f32.const 1.5) + (f64.const 3.4) + ) + ) + (drop + (call $invoke_iii + (i32.const 4) + (i32.add + (get_local $1) + (i32.const 32) + ) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + ) + (call $emscripten_longjmp + (i32.const 5) + (i32.const 6) + ) + (i32.const 0) + ) + (func $__wasm_nullptr (; 10 ;) (type $FUNCSIG$v) + (unreachable) + ) + (func $stackSave (; 11 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 12 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 13 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) + (func $dynCall_v (; 14 ;) (param $fptr i32) + (call_indirect (type $FUNCSIG$v) + (get_local $fptr) + ) + ) + (func $dynCall_iiii (; 15 ;) (param $fptr i32) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $fptr) + ) + ) + (func $dynCall_ffd (; 16 ;) (param $fptr i32) (param $0 f32) (param $1 f64) (result f32) + (call_indirect (type $FUNCSIG$ffd) + (get_local $0) + (get_local $1) + (get_local $fptr) + ) + ) + (func $dynCall_iii (; 17 ;) (param $fptr i32) (param $0 i32) (param $1 i32) (result i32) + (call_indirect (type $FUNCSIG$iii) + (get_local $0) + (get_local $1) + (get_local $fptr) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] } diff --git a/src/binaryen/test/dot_s/function-data-sections.s b/src/binaryen/test/dot_s/function-data-sections.s new file mode 100644 index 0000000000..b950a5f18b --- /dev/null +++ b/src/binaryen/test/dot_s/function-data-sections.s @@ -0,0 +1,56 @@ + .text + .section .text.foo,"ax",@progbits + .globl foo + .type foo,@function +foo: + return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + + .section .text.bar,"ax",@progbits + .globl bar + .type bar,@function +bar: + .param i32 + .result i32 + return $0 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + + .section .text.qux,"ax",@progbits + .globl qux + .type qux,@function +qux: + .param f64, f64 + .result f64 + f64.add $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end2: + .size qux, .Lfunc_end2-qux + + .type aaa,@object + .section .bss.aaa,"aw",@nobits + .globl aaa + .align 2 +aaa: + .int32 0 + .size aaa, 4 + + .type bbb,@object + .section .data.bbb,"aw",@progbits + .globl bbb + .align 2 +bbb: + .int32 1 + .size bbb, 4 + + .type ccc,@object + .section .data.ccc,"aw",@progbits + .globl ccc + .align 2 +ccc: + .int32 1075000115 + .size ccc, 4 diff --git a/src/binaryen/test/dot_s/function-data-sections.wast b/src/binaryen/test/dot_s/function-data-sections.wast new file mode 100644 index 0000000000..205d815f44 --- /dev/null +++ b/src/binaryen/test/dot_s/function-data-sections.wast @@ -0,0 +1,60 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 12) "\00\00\00\00") + (data (i32.const 16) "\01\00\00\00") + (data (i32.const 20) "33\13@") + (export "foo" (func $foo)) + (export "bar" (func $bar)) + (export "qux" (func $qux)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $foo (; 0 ;) + (return) + ) + (func $bar (; 1 ;) (param $0 i32) (result i32) + (return + (get_local $0) + ) + ) + (func $qux (; 2 ;) (param $0 f64) (param $1 f64) (result f64) + (return + (f64.add + (get_local $0) + (get_local $1) + ) + ) + ) + (func $stackSave (; 3 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 4 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 5 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 24, "initializers": [] } diff --git a/src/binaryen/test/dot_s/globals.s b/src/binaryen/test/dot_s/globals.s new file mode 100644 index 0000000000..4ea8041a91 --- /dev/null +++ b/src/binaryen/test/dot_s/globals.s @@ -0,0 +1,72 @@ + .text + .globl globals + .type globals,@function +globals: + i32.const $push0=, 0 + i32.const $push1=, 7 + i32.store local_global($pop0), $pop1 + i32.const $push2=, 0 + i32.load $drop=, local_global($pop2) + i32.const $drop=, local_global + .endfunc +.Lfunc_end0: + .size globals, .Lfunc_end0-globals + + .globl import_globals + .type import_globals,@function +import_globals: + i32.const $push0=, 0 + i32.const $push1=, 7 + i32.store imported_global($pop0), $pop1 + i32.const $push2=, 0 + i32.load $drop=, imported_global($pop2) + i32.const $drop=, imported_global + .endfunc +.Lfunc_end0: + .size import_globals, .Lfunc_end0-import_globals + + .globl globals_offset + .type globals_offset,@function +globals_offset: + i32.const $push0=, 4 + i32.const $push1=, 7 + i32.store local_global+12($pop0), $pop1 + i32.const $push2=, 8 + i32.load $drop=, local_global-4($pop2) + i32.const $drop=, local_global+16 + .endfunc +.Lfunc_end0: + .size globals_offset, .Lfunc_end0-globals_offset + + .globl import_globals_offset + .type import_globals_offset,@function +import_globals_offset: + i32.const $push0=, 4 + i32.const $push1=, 7 + i32.store imported_global+12($pop0), $pop1 + i32.const $push2=, 8 + i32.load $drop=, imported_global-4($pop2) + i32.const $drop=, imported_global+16 + .endfunc +.Lfunc_end0: + .size import_globals_offset, .Lfunc_end0-import_globals_offset + + .type local_global,@object + .p2align 2 +local_global: + .int32 17 + .size local_global, 4 + + .type initialized_with_global,@object + .p2align 2 +initialized_with_global: + .int32 local_global + .size initialized_with_global, 4 + + .type initialized_with_global_offset,@object + .p2align 2 +initialized_with_global_offset: + .int32 local_global+2 + .size initialized_with_global_offset, 4 + + .import_global imported_global diff --git a/src/binaryen/test/dot_s/globals.wast b/src/binaryen/test/dot_s/globals.wast new file mode 100644 index 0000000000..4e08e3375d --- /dev/null +++ b/src/binaryen/test/dot_s/globals.wast @@ -0,0 +1,114 @@ +(module + (import "env" "memory" (memory $0 1)) + (import "env" "imported_global" (global $imported_global i32)) + (table 0 anyfunc) + (data (i32.const 12) "\11\00\00\00") + (data (i32.const 16) "\0c\00\00\00") + (data (i32.const 20) "\0e\00\00\00") + (export "globals" (func $globals)) + (export "import_globals" (func $import_globals)) + (export "globals_offset" (func $globals_offset)) + (export "import_globals_offset" (func $import_globals_offset)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $globals (; 0 ;) + (i32.store offset=12 + (i32.const 0) + (i32.const 7) + ) + (drop + (i32.load offset=12 + (i32.const 0) + ) + ) + (drop + (i32.const 12) + ) + ) + (func $import_globals (; 1 ;) + (i32.store + (get_global $imported_global) + (i32.const 7) + ) + (drop + (i32.load + (get_global $imported_global) + ) + ) + (drop + (get_global $imported_global) + ) + ) + (func $globals_offset (; 2 ;) + (i32.store offset=24 + (i32.const 4) + (i32.const 7) + ) + (drop + (i32.load offset=8 + (i32.const 8) + ) + ) + (drop + (i32.const 28) + ) + ) + (func $import_globals_offset (; 3 ;) + (i32.store offset=12 + (i32.add + (i32.const 4) + (get_global $imported_global) + ) + (i32.const 7) + ) + (drop + (i32.load + (i32.add + (i32.const 8) + (i32.add + (i32.const -4) + (get_global $imported_global) + ) + ) + ) + ) + (drop + (i32.add + (i32.const 16) + (get_global $imported_global) + ) + ) + ) + (func $stackSave (; 4 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 5 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 6 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 24, "initializers": [] } diff --git a/src/binaryen/test/dot_s/hostFinalize.s b/src/binaryen/test/dot_s/hostFinalize.s new file mode 100644 index 0000000000..cd9129d124 --- /dev/null +++ b/src/binaryen/test/dot_s/hostFinalize.s @@ -0,0 +1,9 @@ + .text + .type _main, @function +_main: + current_memory $push0= + i32.const $push1=, 1 + i32.add $push2=, $pop0, $pop1 + grow_memory $pop2 + .endfunc + .size _main diff --git a/src/binaryen/test/dot_s/hostFinalize.wast b/src/binaryen/test/dot_s/hostFinalize.wast new file mode 100644 index 0000000000..b3d30a93f0 --- /dev/null +++ b/src/binaryen/test/dot_s/hostFinalize.wast @@ -0,0 +1,48 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $_main (; 0 ;) + (drop + (grow_memory + (i32.add + (current_memory) + (i32.const 1) + ) + ) + ) + ) + (func $stackSave (; 1 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 2 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 3 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] } diff --git a/src/binaryen/test/dot_s/indidx.s b/src/binaryen/test/dot_s/indidx.s new file mode 100644 index 0000000000..68d8f5b774 --- /dev/null +++ b/src/binaryen/test/dot_s/indidx.s @@ -0,0 +1,93 @@ + .text + .file "cfi-wasm.bs.bc" + .type a,@function +a: # @a + .indidx 4 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size a, .Lfunc_end0-a + + .type b,@function +b: # @b + .indidx 2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size b, .Lfunc_end1-b + + .type c,@function +c: # @c + .indidx 1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size c, .Lfunc_end2-c + + .type d,@function +d: # @d + .indidx 3 + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size d, .Lfunc_end3-d + + .hidden main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + block + i32.call $push1=, getchar@FUNCTION + i32.const $push0=, 2 + i32.shl $push2=, $pop1, $pop0 + i32.const $push3=, .Lmain.fp-192 + i32.add $push4=, $pop2, $pop3 + i32.load $push9=, 0($pop4) + tee_local $push8=, $2=, $pop9 + i32.const $push5=, 4 + i32.ge_u $push6=, $pop8, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %cont + i32.call_indirect $push7=, $2 + return $pop7 +.LBB4_2: # %trap + end_block # label0: + unreachable + unreachable + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + + .type .Lmain.fp,@object # @main.fp + .section .data.rel.ro,"aw",@progbits + .p2align 4 +.Lmain.fp: + .int32 a@FUNCTION + .int32 b@FUNCTION + .int32 c@FUNCTION + .int32 d@FUNCTION + .size .Lmain.fp, 16 + + .type .L__unnamed_1,@object # @0 + .section .rodata,"a",@progbits +.L__unnamed_1: + .size .L__unnamed_1, 0 + + + .ident "clang version 3.9.0 (trunk 271314) (llvm/trunk 271322)" diff --git a/src/binaryen/test/dot_s/indidx.wast b/src/binaryen/test/dot_s/indidx.wast new file mode 100644 index 0000000000..105b0faa02 --- /dev/null +++ b/src/binaryen/test/dot_s/indidx.wast @@ -0,0 +1,93 @@ +(module + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$v (func)) + (import "env" "getchar" (func $getchar (result i32))) + (import "env" "memory" (memory $0 1)) + (table 5 5 anyfunc) + (elem (i32.const 0) $__wasm_nullptr $c $b $d $a) + (data (i32.const 16) "\04\00\00\00\02\00\00\00\01\00\00\00\03\00\00\00") + (export "main" (func $main)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (export "dynCall_i" (func $dynCall_i)) + (func $a (; 1 ;) (type $FUNCSIG$i) (result i32) + (i32.const 0) + ) + (func $b (; 2 ;) (type $FUNCSIG$i) (result i32) + (i32.const 1) + ) + (func $c (; 3 ;) (type $FUNCSIG$i) (result i32) + (i32.const 2) + ) + (func $d (; 4 ;) (type $FUNCSIG$i) (result i32) + (i32.const 3) + ) + (func $main (; 5 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (block $label$0 + (br_if $label$0 + (i32.ge_u + (tee_local $2 + (i32.load + (i32.add + (i32.shl + (call $getchar) + (i32.const 2) + ) + (i32.const -176) + ) + ) + ) + (i32.const 4) + ) + ) + (return + (call_indirect (type $FUNCSIG$i) + (get_local $2) + ) + ) + ) + (unreachable) + (unreachable) + ) + (func $__wasm_nullptr (; 6 ;) (type $FUNCSIG$v) + (unreachable) + ) + (func $stackSave (; 7 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 8 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 9 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) + (func $dynCall_i (; 10 ;) (param $fptr i32) (result i32) + (call_indirect (type $FUNCSIG$i) + (get_local $fptr) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 32, "initializers": [] } diff --git a/src/binaryen/test/dot_s/indirect-import.c b/src/binaryen/test/dot_s/indirect-import.c new file mode 100644 index 0000000000..679d862c74 --- /dev/null +++ b/src/binaryen/test/dot_s/indirect-import.c @@ -0,0 +1,31 @@ +#include + +struct big { + float a; + double b; + int32_t c; +}; + +float extern_fd(double); +void extern_vj(uint64_t); +void extern_v(void); +int32_t extern_ijidf(int64_t, int32_t, double, float); +void extern_struct(struct big); +struct big extern_sret(void); + +intptr_t bar() { + float (*fd)(double) = &extern_fd; + void (*vj)(uint64_t) = &extern_vj; + vj(1ULL); + void (*v)(void) = &extern_v; + v(); + int32_t (*ijidf)(int64_t, int32_t, double, float) = &extern_ijidf; + ijidf(1LL, 2, 3.0, 4.0f); + void (*vs)(struct big) = &extern_struct; + struct big (*s)(void) = &extern_sret; + return (intptr_t)fd; +} + +intptr_t baz() { + return (intptr_t)extern_v; +} diff --git a/src/binaryen/test/dot_s/indirect-import.s b/src/binaryen/test/dot_s/indirect-import.s new file mode 100644 index 0000000000..0a828cd32e --- /dev/null +++ b/src/binaryen/test/dot_s/indirect-import.s @@ -0,0 +1,67 @@ + .text + .file "test/dot_s/indirect-import.ll" + .hidden bar + .globl bar + .type bar,@function +bar: # @bar + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push13=, 0 + i32.const $push10=, 0 + i32.load $push11=, __stack_pointer($pop10) + i32.const $push12=, 32 + i32.sub $push19=, $pop11, $pop12 + tee_local $push18=, $1=, $pop19 + i32.store __stack_pointer($pop13), $pop18 + i32.const $push0=, extern_fd@FUNCTION + i32.store 28($1), $pop0 + i32.const $push1=, extern_vj@FUNCTION + i32.store 24($1), $pop1 + i64.const $push2=, 1 + call extern_vj@FUNCTION, $pop2 + i32.const $push3=, extern_v@FUNCTION + i32.store 20($1), $pop3 + call extern_v@FUNCTION + i32.const $push4=, extern_ijidf@FUNCTION + i32.store 16($1), $pop4 + i64.const $push17=, 1 + i32.const $push7=, 2 + f64.const $push6=, 0x1.8p1 + f32.const $push5=, 0x1p2 + i32.call $drop=, extern_ijidf@FUNCTION, $pop17, $pop7, $pop6, $pop5 + i32.const $push8=, extern_struct@FUNCTION + i32.store 12($1), $pop8 + i32.const $push9=, extern_sret@FUNCTION + i32.store 8($1), $pop9 + i32.load $0=, 28($1) + i32.const $push16=, 0 + i32.const $push14=, 32 + i32.add $push15=, $1, $pop14 + i32.store __stack_pointer($pop16), $pop15 + copy_local $push20=, $0 + # fallthrough-return: $pop20 + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + + .hidden baz + .globl baz + .type baz,@function +baz: # @baz + .result i32 +# BB#0: # %entry + i32.const $push0=, extern_v@FUNCTION + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size baz, .Lfunc_end1-baz + + + .ident "clang version 4.0.0 (trunk 281345) (llvm/trunk 281343)" + .functype extern_fd, f32, f64 + .functype extern_vj, void, i64 + .functype extern_v, void + .functype extern_ijidf, i32, i64, i32, f64, f32 + .functype extern_struct, void, i32 + .functype extern_sret, void, i32 diff --git a/src/binaryen/test/dot_s/indirect-import.wast b/src/binaryen/test/dot_s/indirect-import.wast new file mode 100644 index 0000000000..cd8a13ed64 --- /dev/null +++ b/src/binaryen/test/dot_s/indirect-import.wast @@ -0,0 +1,173 @@ +(module + (type $FUNCSIG$fd (func (param f64) (result f32))) + (type $FUNCSIG$vj (func (param i64))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$ijidf (func (param i64 i32 f64 f32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (import "env" "extern_ijidf" (func $extern_ijidf (param i64 i32 f64 f32) (result i32))) + (import "env" "extern_v" (func $extern_v)) + (import "env" "extern_vj" (func $extern_vj (param i64))) + (import "env" "memory" (memory $0 1)) + (import "env" "extern_fd" (func $extern_fd (param f64) (result f32))) + (import "env" "extern_struct" (func $extern_struct (param i32))) + (import "env" "extern_sret" (func $extern_sret (param i32))) + (table 7 7 anyfunc) + (elem (i32.const 0) $__wasm_nullptr $__importThunk_extern_fd $__importThunk_extern_vj $__importThunk_extern_v $__importThunk_extern_ijidf $__importThunk_extern_struct $__importThunk_extern_sret) + (export "bar" (func $bar)) + (export "baz" (func $baz)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (export "dynCall_fd" (func $dynCall_fd)) + (export "dynCall_v" (func $dynCall_v)) + (export "dynCall_vi" (func $dynCall_vi)) + (func $bar (; 6 ;) (result i32) + (local $0 i32) + (local $1 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $1 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 32) + ) + ) + ) + (i32.store offset=28 + (get_local $1) + (i32.const 1) + ) + (i32.store offset=24 + (get_local $1) + (i32.const 2) + ) + (call $extern_vj + (i64.const 1) + ) + (i32.store offset=20 + (get_local $1) + (i32.const 3) + ) + (call $extern_v) + (i32.store offset=16 + (get_local $1) + (i32.const 4) + ) + (drop + (call $extern_ijidf + (i64.const 1) + (i32.const 2) + (f64.const 3) + (f32.const 4) + ) + ) + (i32.store offset=12 + (get_local $1) + (i32.const 5) + ) + (i32.store offset=8 + (get_local $1) + (i32.const 6) + ) + (set_local $0 + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $1) + (i32.const 32) + ) + ) + (get_local $0) + ) + (func $baz (; 7 ;) (result i32) + (i32.const 3) + ) + (func $__wasm_nullptr (; 8 ;) (type $FUNCSIG$v) + (unreachable) + ) + (func $__importThunk_extern_fd (; 9 ;) (type $FUNCSIG$fd) (param $0 f64) (result f32) + (call $extern_fd + (get_local $0) + ) + ) + (func $__importThunk_extern_vj (; 10 ;) (type $FUNCSIG$vj) (param $0 i64) + (call $extern_vj + (get_local $0) + ) + ) + (func $__importThunk_extern_v (; 11 ;) (type $FUNCSIG$v) + (call $extern_v) + ) + (func $__importThunk_extern_ijidf (; 12 ;) (type $FUNCSIG$ijidf) (param $0 i64) (param $1 i32) (param $2 f64) (param $3 f32) (result i32) + (call $extern_ijidf + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $3) + ) + ) + (func $__importThunk_extern_struct (; 13 ;) (type $FUNCSIG$vi) (param $0 i32) + (call $extern_struct + (get_local $0) + ) + ) + (func $__importThunk_extern_sret (; 14 ;) (type $FUNCSIG$vi) (param $0 i32) + (call $extern_sret + (get_local $0) + ) + ) + (func $stackSave (; 15 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 16 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 17 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) + (func $dynCall_fd (; 18 ;) (param $fptr i32) (param $0 f64) (result f32) + (call_indirect (type $FUNCSIG$fd) + (get_local $0) + (get_local $fptr) + ) + ) + (func $dynCall_v (; 19 ;) (param $fptr i32) + (call_indirect (type $FUNCSIG$v) + (get_local $fptr) + ) + ) + (func $dynCall_vi (; 20 ;) (param $fptr i32) (param $0 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $0) + (get_local $fptr) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] } diff --git a/src/binaryen/test/dot_s/initializers.s b/src/binaryen/test/dot_s/initializers.s new file mode 100644 index 0000000000..aa6b1d502a --- /dev/null +++ b/src/binaryen/test/dot_s/initializers.s @@ -0,0 +1,33 @@ + .text + .file "/tmp/tmpAEEklZ/a.out.bc" + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: + i32.const $push0=, 5 + return $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + .globl f1 + .type f1,@function +f1: + return + .endfunc +.Lfunc_end1: + .size f1, .Lfunc_end1-f1 + .globl f2 + .type f2,@function +f2: + return + .endfunc +.Lfunc_end2: + .size f2, .Lfunc_end2-f2 + .section .init_array.101,"aw",@init_array + .p2align 2 + .int32 main@FUNCTION + .section .init_array,"aw",@init_array + .p2align 2 + .int32 f1@FUNCTION + .int32 f2@FUNCTION diff --git a/src/binaryen/test/dot_s/initializers.wast b/src/binaryen/test/dot_s/initializers.wast new file mode 100644 index 0000000000..e3e866cc3e --- /dev/null +++ b/src/binaryen/test/dot_s/initializers.wast @@ -0,0 +1,52 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (export "main" (func $main)) + (export "f1" (func $f1)) + (export "f2" (func $f2)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $main (; 0 ;) (result i32) + (return + (i32.const 5) + ) + ) + (func $f1 (; 1 ;) + (return) + ) + (func $f2 (; 2 ;) + (return) + ) + (func $stackSave (; 3 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 4 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 5 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": ["main", "f1", "f2"] } diff --git a/src/binaryen/test/dot_s/lcomm-in-text-segment.s b/src/binaryen/test/dot_s/lcomm-in-text-segment.s new file mode 100644 index 0000000000..b059e63099 --- /dev/null +++ b/src/binaryen/test/dot_s/lcomm-in-text-segment.s @@ -0,0 +1,12 @@ + .text + .type a,@object + .lcomm a,4,2 + .type b,@object + .lcomm b,4,2 + .type c,@object + .data + .globl c + .align 2 +c: + .int32 b + .size c, 4 diff --git a/src/binaryen/test/dot_s/lcomm-in-text-segment.wast b/src/binaryen/test/dot_s/lcomm-in-text-segment.wast new file mode 100644 index 0000000000..2f7e3173e4 --- /dev/null +++ b/src/binaryen/test/dot_s/lcomm-in-text-segment.wast @@ -0,0 +1,39 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 20) "\10\00\00\00") + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $stackSave (; 0 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 1 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 2 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 24, "initializers": [] } diff --git a/src/binaryen/test/dot_s/local_align.s b/src/binaryen/test/dot_s/local_align.s new file mode 100644 index 0000000000..0a8d5bc983 --- /dev/null +++ b/src/binaryen/test/dot_s/local_align.s @@ -0,0 +1,26 @@ + .text + .file "local_align.bc" + .type foo,@function +foo: + .param i32 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + + .hidden main + .globl main + .type main,@function +main: + .result i32 + i32.const $push0=, buf + call foo@FUNCTION, $pop0 + i32.const $push1=, 0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + + .type temp,@object + .lcomm temp,1,1 + + .type buf,@object + .lcomm buf,156,4 diff --git a/src/binaryen/test/dot_s/local_align.wast b/src/binaryen/test/dot_s/local_align.wast new file mode 100644 index 0000000000..046b2b9f6a --- /dev/null +++ b/src/binaryen/test/dot_s/local_align.wast @@ -0,0 +1,47 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (export "main" (func $main)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $foo (; 0 ;) (param $0 i32) + ) + (func $main (; 1 ;) (result i32) + (call $foo + (i32.const 16) + ) + (i32.const 0) + ) + (func $stackSave (; 2 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 3 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 4 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 172, "initializers": [] } diff --git a/src/binaryen/test/dot_s/macClangMetaData.s b/src/binaryen/test/dot_s/macClangMetaData.s new file mode 100644 index 0000000000..5c24e73407 --- /dev/null +++ b/src/binaryen/test/dot_s/macClangMetaData.s @@ -0,0 +1,25 @@ +.text +.macosx_version_min 10, 10 +.file "test.ll" +.globl main +.type main,@function +main: # @main +.param i32, i32 +.result i32 +# BB#0: # %entry +i32.const $push0=, .Lstr +i32.call $drop=, puts@FUNCTION, $pop0 +i32.const $push1=, 0 +return $pop1 +.endfunc +.Lfunc_end0: +.size main, .Lfunc_end0-main + +.type .Lstr,@object # @str +.section .rodata.str1.1,"aMS",@progbits,1 +.Lstr: +.asciz "Hello, World!" +.size .Lstr, 14 + + +.ident "clang version 3.9.0 (trunk 258659)" diff --git a/src/binaryen/test/dot_s/macClangMetaData.wast b/src/binaryen/test/dot_s/macClangMetaData.wast new file mode 100644 index 0000000000..3dcde706c5 --- /dev/null +++ b/src/binaryen/test/dot_s/macClangMetaData.wast @@ -0,0 +1,52 @@ +(module + (type $FUNCSIG$ii (func (param i32) (result i32))) + (import "env" "puts" (func $puts (param i32) (result i32))) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 16) "Hello, World!\00") + (export "main" (func $main)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $main (; 1 ;) (param $0 i32) (param $1 i32) (result i32) + (drop + (call $puts + (i32.const 16) + ) + ) + (return + (i32.const 0) + ) + ) + (func $stackSave (; 2 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 3 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 4 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 30, "initializers": [] } diff --git a/src/binaryen/test/dot_s/memops.s b/src/binaryen/test/dot_s/memops.s new file mode 100644 index 0000000000..fbfdb33272 --- /dev/null +++ b/src/binaryen/test/dot_s/memops.s @@ -0,0 +1,100 @@ + .text + .file "/tmp/tmpG0LbqO/a.out.bc" + .type _Z6reporti,@function +_Z6reporti: # @_Z6reporti + .param i32 +# BB#0: + i32.const $push0=, 8 + i32.store 0($pop0), $0 + i32.const $push1=, .str + call emscripten_asm_const@FUNCTION, $pop1 + return + .endfunc +.Lfunc_end0: + .size _Z6reporti, .Lfunc_end0-_Z6reporti + + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 # XXX this was 1 short in the backend output, an extra one was added manually +# BB#0: + i32.const $7=, 0 + i32.load $7=, 0($7) + i32.const $8=, 1048576 + i32.sub $12=, $7, $8 + i32.const $8=, 0 + i32.store 0($8), $12 + i32.const $1=, 0 + copy_local $0=, $1 + copy_local $6=, $1 +.LBB1_1: # %.preheader1 + # =>This Loop Header: Depth=1 + # Child Loop .LBB1_2 Depth 2 + # Child Loop .LBB1_3 Depth 2 + block + loop .LBB1_5 + copy_local $4=, $1 +.LBB1_2: # Parent Loop .LBB1_1 Depth=1 + # => This Inner Loop Header: Depth=2 + block + loop + i32.const $10=, 0 + i32.add $10=, $12, $10 + i32.add $push1=, $10, $4 + i32.add $push0=, $6, $4 + i32.store8 0($pop1), $pop0 + i32.const $2=, 1 + i32.add $4=, $4, $2 + i32.const $3=, 1048576 + i32.ne $push2=, $4, $3 + copy_local $5=, $1 + br_if 0, $pop2 + end_loop + end_block + block + loop + i32.const $11=, 0 + i32.add $11=, $12, $11 + i32.add $push3=, $11, $5 + i32.load8_u $push4=, 0($pop3) + i32.and $push5=, $pop4, $2 + i32.add $6=, $pop5, $6 + i32.add $5=, $5, $2 + i32.ne $push6=, $5, $3 + br_if 0, $pop6 + end_loop + end_block + i32.const $push7=, 3 + i32.mul $push8=, $6, $pop7 + i32.const $push9=, 5 + i32.div_s $push10=, $6, $pop9 + i32.add $push11=, $pop8, $pop10 + i32.const $push12=, 17 + i32.add $push13=, $pop11, $pop12 + i32.const $push14=, 65535 + i32.and $6=, $pop13, $pop14 + i32.add $0=, $0, $2 + i32.const $push15=, 100 + i32.ne $push16=, $0, $pop15 + br_if 0, $pop16 + end_loop + end_block + call _Z6reporti@FUNCTION, $6 + i32.const $push17=, 0 + i32.const $9=, 1048576 + i32.add $12=, $12, $9 + i32.const $9=, 0 + i32.store 0($9), $12 + return $pop17 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + + .type .str,@object # @.str + .data +.str: + .asciz "{ Module.print(\"hello, world! \" + HEAP32[8>>2]); }" + .size .str, 51 + + diff --git a/src/binaryen/test/dot_s/memops.wast b/src/binaryen/test/dot_s/memops.wast new file mode 100644 index 0000000000..acb70e5114 --- /dev/null +++ b/src/binaryen/test/dot_s/memops.wast @@ -0,0 +1,242 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (import "env" "memory" (memory $0 1)) + (import "env" "emscripten_asm_const_v" (func $emscripten_asm_const_v (param i32))) + (table 0 anyfunc) + (data (i32.const 16) "{ Module.print(\"hello, world! \" + HEAP32[8>>2]); }\00") + (export "main" (func $main)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $_Z6reporti (; 1 ;) (param $0 i32) + (i32.store + (i32.const 8) + (get_local $0) + ) + (call $emscripten_asm_const_v + (i32.const 0) + ) + (return) + ) + (func $main (; 2 ;) (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (set_local $7 + (i32.const 0) + ) + (set_local $7 + (i32.load + (get_local $7) + ) + ) + (set_local $8 + (i32.const 1048576) + ) + (set_local $12 + (i32.sub + (get_local $7) + (get_local $8) + ) + ) + (set_local $8 + (i32.const 0) + ) + (i32.store + (get_local $8) + (get_local $12) + ) + (set_local $1 + (i32.const 0) + ) + (set_local $0 + (get_local $1) + ) + (set_local $6 + (get_local $1) + ) + (block $label$0 + (loop $label$1 + (set_local $4 + (get_local $1) + ) + (block $label$2 + (loop $label$3 + (set_local $10 + (i32.const 0) + ) + (set_local $10 + (i32.add + (get_local $12) + (get_local $10) + ) + ) + (i32.store8 + (i32.add + (get_local $10) + (get_local $4) + ) + (i32.add + (get_local $6) + (get_local $4) + ) + ) + (set_local $2 + (i32.const 1) + ) + (set_local $4 + (i32.add + (get_local $4) + (get_local $2) + ) + ) + (set_local $3 + (i32.const 1048576) + ) + (set_local $5 + (get_local $1) + ) + (br_if $label$3 + (i32.ne + (get_local $4) + (get_local $3) + ) + ) + ) + ) + (block $label$4 + (loop $label$5 + (set_local $11 + (i32.const 0) + ) + (set_local $11 + (i32.add + (get_local $12) + (get_local $11) + ) + ) + (set_local $6 + (i32.add + (i32.and + (i32.load8_u + (i32.add + (get_local $11) + (get_local $5) + ) + ) + (get_local $2) + ) + (get_local $6) + ) + ) + (set_local $5 + (i32.add + (get_local $5) + (get_local $2) + ) + ) + (br_if $label$5 + (i32.ne + (get_local $5) + (get_local $3) + ) + ) + ) + ) + (set_local $6 + (i32.and + (i32.add + (i32.add + (i32.mul + (get_local $6) + (i32.const 3) + ) + (i32.div_s + (get_local $6) + (i32.const 5) + ) + ) + (i32.const 17) + ) + (i32.const 65535) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (br_if $label$1 + (i32.ne + (get_local $0) + (i32.const 100) + ) + ) + ) + ) + (call $_Z6reporti + (get_local $6) + ) + (set_local $9 + (i32.const 1048576) + ) + (set_local $12 + (i32.add + (get_local $12) + (get_local $9) + ) + ) + (set_local $9 + (i32.const 0) + ) + (i32.store + (get_local $9) + (get_local $12) + ) + (return + (i32.const 0) + ) + ) + (func $stackSave (; 3 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 4 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 5 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {"0": ["{ Module.print(\"hello, world! \" + HEAP32[8>>2]); }", ["v"]]},"staticBump": 67, "initializers": [] } diff --git a/src/binaryen/test/dot_s/minimal.s b/src/binaryen/test/dot_s/minimal.s new file mode 100644 index 0000000000..e91aa09306 --- /dev/null +++ b/src/binaryen/test/dot_s/minimal.s @@ -0,0 +1,13 @@ + .text + .file "/tmp/tmpAEEklZ/a.out.bc" + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: + i32.const $push0=, 5 + return $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + diff --git a/src/binaryen/test/dot_s/minimal.wast b/src/binaryen/test/dot_s/minimal.wast new file mode 100644 index 0000000000..ae918b3e5d --- /dev/null +++ b/src/binaryen/test/dot_s/minimal.wast @@ -0,0 +1,44 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (export "main" (func $main)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $main (; 0 ;) (result i32) + (return + (i32.const 5) + ) + ) + (func $stackSave (; 1 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 2 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 3 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] } diff --git a/src/binaryen/test/dot_s/permute.s b/src/binaryen/test/dot_s/permute.s new file mode 100644 index 0000000000..a2df647c9c --- /dev/null +++ b/src/binaryen/test/dot_s/permute.s @@ -0,0 +1,6 @@ + .data + .type _ZL7permute,@object + .align 4 +_ZL7permute: + .ascii "hE?\215s\0167\333[g\217\2255it\304k\013\342\357\274ld\340\375\214\236\206&~\330\224\211+\310\244\302\362\373\022\034ej\3319\267\263W\306w\257\256\312M>\222ub\226\204\266\260N\354;q\021\367\277\3431\346\247\220\374\003\344\252\327\314- \025\203DH\200r\372\001X\353:_\000A\315\351o`n\254(\255\2720\334yS#\364$\"\202\177}\216\366\223L'\273\275Z\3554\030\363\300\317\377\243\370\007\005\234\323\017\240\006m%\\\371^B<\347\261\027\230]\f\335\305\365p\345\376zJ\253,F\245@\bR\205!\270\032\316\325\004\nI\246\321\237\212\311\251|\227\232G\2768Y\213\301\033\324\352\271\031\024\233\22163\320\035\322\337=C\037\rc\341\307QUv\002\265aK\264\tV\303x\350\241\036\201\336/{\332\326Pf\020T\360)\210\026\356\250\235\361\313O*\262\231\0232\207.\242" + .size _ZL7permute, 256 diff --git a/src/binaryen/test/dot_s/permute.wast b/src/binaryen/test/dot_s/permute.wast new file mode 100644 index 0000000000..4ff88947d1 --- /dev/null +++ b/src/binaryen/test/dot_s/permute.wast @@ -0,0 +1,39 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 16) "hE?\8ds\0e7\db[g\8f\955it\c4k\0b\e2\ef\bcld\e0\fd\8c\9e\86&~\d8\94\89+\c8\a4\c2\f2\fb\12\1cej\d99\b7\b3W\c6w\af\ae\caM>\92ub\96\84\b6\b0N\ec;q\11\f7\bf\e31\e6\a7\90\fc\03\e4\aa\d7\cc- \15\83DH\80r\fa\01X\eb:_\00A\cd\e9o`n\ac(\ad\ba0\dcyS#\f4$\"\82\7f}\8e\f6\93L\'\bb\bdZ\ed4\18\f3\c0\cf\ff\a3\f8\07\05\9c\d3\0f\a0\06m%\\\f9^B<\e7\b1\17\98]\0c\dd\c5\f5p\e5\fezJ\ab,F\a5@\08R\85!\b8\1a\ce\d5\04\nI\a6\d1\9f\8a\c9\a9|\97\9aG\be8Y\8b\c1\1b\d4\ea\b9\19\14\9b\9163\d0\1d\d2\df=C\1f\0dc\e1\c7QUv\02\b5aK\b4\tV\c3x\e8\a1\1e\81\de/{\da\d6Pf\10T\f0)\88\16\ee\a8\9d\f1\cbO*\b2\99\132\87.\a2") + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $stackSave (; 0 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 1 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 2 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 272, "initializers": [] } diff --git a/src/binaryen/test/dot_s/relocation.s b/src/binaryen/test/dot_s/relocation.s new file mode 100644 index 0000000000..474da3cf87 --- /dev/null +++ b/src/binaryen/test/dot_s/relocation.s @@ -0,0 +1,31 @@ + .text + .file "relocation.c" + .globl main + .type main,@function +main: + .result i32 + .local i32 + i32.const $push0=, a + i32.load $push1=, 0($pop0) + return $pop1 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + + .type b,@object + .data + .globl b + .align 2 +b: + .int32 a + .size b, 4 + + .type a,@object + .globl a + .align 2 +a: + .int32 b + .size a, 4 + + + diff --git a/src/binaryen/test/dot_s/relocation.wast b/src/binaryen/test/dot_s/relocation.wast new file mode 100644 index 0000000000..c528efcae6 --- /dev/null +++ b/src/binaryen/test/dot_s/relocation.wast @@ -0,0 +1,49 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 12) "\10\00\00\00") + (data (i32.const 16) "\0c\00\00\00") + (export "main" (func $main)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $main (; 0 ;) (result i32) + (local $0 i32) + (return + (i32.load + (i32.const 16) + ) + ) + ) + (func $stackSave (; 1 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 2 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 3 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 20, "initializers": [] } diff --git a/src/binaryen/test/dot_s/return.s b/src/binaryen/test/dot_s/return.s new file mode 100644 index 0000000000..9ceaabaf58 --- /dev/null +++ b/src/binaryen/test/dot_s/return.s @@ -0,0 +1,29 @@ + .text + .globl return_i32 + .type return_i32,@function +return_i32: + .result i32 + i32.const $push0=, 5 + .endfunc +.Lfunc_end0: + .size return_i32, .Lfunc_end0-return_i32 + + .globl return_void + .type return_void,@function +return_void: + .endfunc +.Lfunc_end0: + .size return_void, .Lfunc_end0-return_void + + .type fallthrough_return_nested_loop_i32,@function +fallthrough_return_nested_loop_i32: + .result i32 + loop i32 + loop i32 + i32.const $push0=, 1 + return $pop0 + end_loop + end_loop + .endfunc +.Lfunc_end0: + .size fallthrough_return_nested_loop_i32, .Lfunc_end0-fallthrough_return_nested_loop_i32 diff --git a/src/binaryen/test/dot_s/return.wast b/src/binaryen/test/dot_s/return.wast new file mode 100644 index 0000000000..8a527b01a5 --- /dev/null +++ b/src/binaryen/test/dot_s/return.wast @@ -0,0 +1,54 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (export "return_i32" (func $return_i32)) + (export "return_void" (func $return_void)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $return_i32 (; 0 ;) (result i32) + (i32.const 5) + ) + (func $return_void (; 1 ;) + ) + (func $fallthrough_return_nested_loop_i32 (; 2 ;) (result i32) + (loop $label$0 (result i32) + (loop $label$1 (result i32) + (return + (i32.const 1) + ) + ) + ) + ) + (func $stackSave (; 3 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 4 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 5 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] } diff --git a/src/binaryen/test/dot_s/start_main0.s b/src/binaryen/test/dot_s/start_main0.s new file mode 100644 index 0000000000..c3f735a52f --- /dev/null +++ b/src/binaryen/test/dot_s/start_main0.s @@ -0,0 +1,9 @@ + .text + .file "main0" + .globl main + .type main,@function +main: # @main +# BB#0: + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main diff --git a/src/binaryen/test/dot_s/start_main0.wast b/src/binaryen/test/dot_s/start_main0.wast new file mode 100644 index 0000000000..79ab8b2171 --- /dev/null +++ b/src/binaryen/test/dot_s/start_main0.wast @@ -0,0 +1,45 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (export "main" (func $main)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (start $_start) + (func $main (; 0 ;) + ) + (func $_start (; 1 ;) + (call $main) + ) + (func $stackSave (; 2 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 3 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 4 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] } diff --git a/src/binaryen/test/dot_s/start_main2.s b/src/binaryen/test/dot_s/start_main2.s new file mode 100644 index 0000000000..d413f92136 --- /dev/null +++ b/src/binaryen/test/dot_s/start_main2.s @@ -0,0 +1,12 @@ + .text + .file "main2" + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: + return $0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main diff --git a/src/binaryen/test/dot_s/start_main2.wast b/src/binaryen/test/dot_s/start_main2.wast new file mode 100644 index 0000000000..cd67cdeda8 --- /dev/null +++ b/src/binaryen/test/dot_s/start_main2.wast @@ -0,0 +1,55 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (export "main" (func $main)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (start $_start) + (func $main (; 0 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (get_local $0) + ) + ) + (func $_start (; 1 ;) + (local $0 i32) + (local $1 i32) + (drop + (call $main + (get_local $0) + (get_local $1) + ) + ) + ) + (func $stackSave (; 2 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 3 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 4 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] } diff --git a/src/binaryen/test/dot_s/symbolic-offset.s b/src/binaryen/test/dot_s/symbolic-offset.s new file mode 100644 index 0000000000..8c801813cd --- /dev/null +++ b/src/binaryen/test/dot_s/symbolic-offset.s @@ -0,0 +1,20 @@ + .text + .globl f + .type f,@function +f: + .param i32 + .param i32 + i32.store m+4($0), $1 + return + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + + .type m,@object + .data + .align 2 +m: + .int32 1 + .int32 0 + .int32 0 + .size m, 12 diff --git a/src/binaryen/test/dot_s/symbolic-offset.wast b/src/binaryen/test/dot_s/symbolic-offset.wast new file mode 100644 index 0000000000..e9fe0eb0b5 --- /dev/null +++ b/src/binaryen/test/dot_s/symbolic-offset.wast @@ -0,0 +1,47 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 12) "\01\00\00\00\00\00\00\00\00\00\00\00") + (export "f" (func $f)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $f (; 0 ;) (param $0 i32) (param $1 i32) + (i32.store offset=16 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $stackSave (; 1 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 2 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 3 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 24, "initializers": [] } diff --git a/src/binaryen/test/dot_s/text_before_type.s b/src/binaryen/test/dot_s/text_before_type.s new file mode 100644 index 0000000000..c76ecfbed6 --- /dev/null +++ b/src/binaryen/test/dot_s/text_before_type.s @@ -0,0 +1,19 @@ + .text + .file "text_before_type.bc" + .hidden main + .globl main + .type main,@function +main: + .result i32 + call foo@FUNCTION + i32.const $push0=, 0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + .text + .type foo,@function +foo: + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + diff --git a/src/binaryen/test/dot_s/text_before_type.wast b/src/binaryen/test/dot_s/text_before_type.wast new file mode 100644 index 0000000000..04d8ec8068 --- /dev/null +++ b/src/binaryen/test/dot_s/text_before_type.wast @@ -0,0 +1,45 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (export "main" (func $main)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $main (; 0 ;) (result i32) + (call $foo) + (i32.const 0) + ) + (func $foo (; 1 ;) + ) + (func $stackSave (; 2 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 3 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 4 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] } diff --git a/src/binaryen/test/dot_s/traps.clamp.wast b/src/binaryen/test/dot_s/traps.clamp.wast new file mode 100644 index 0000000000..7228741bba --- /dev/null +++ b/src/binaryen/test/dot_s/traps.clamp.wast @@ -0,0 +1,113 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (export "test_traps" (func $test_traps)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $test_traps (; 0 ;) (param $0 f32) (param $1 f64) (result i32) + (call $i32u-div + (call $f32-to-int + (get_local $0) + ) + (call $f64-to-uint + (get_local $1) + ) + ) + ) + (func $f32-to-int (; 1 ;) (param $0 f32) (result i32) + (if (result i32) + (f32.ne + (get_local $0) + (get_local $0) + ) + (i32.const -2147483648) + (if (result i32) + (f32.ge + (get_local $0) + (f32.const 2147483648) + ) + (i32.const -2147483648) + (if (result i32) + (f32.le + (get_local $0) + (f32.const -2147483648) + ) + (i32.const -2147483648) + (i32.trunc_s/f32 + (get_local $0) + ) + ) + ) + ) + ) + (func $f64-to-uint (; 2 ;) (param $0 f64) (result i32) + (if (result i32) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i32.const 0) + (if (result i32) + (f64.ge + (get_local $0) + (f64.const 4294967296) + ) + (i32.const 0) + (if (result i32) + (f64.le + (get_local $0) + (f64.const -1) + ) + (i32.const 0) + (i32.trunc_u/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $i32u-div (; 3 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (i32.div_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $stackSave (; 4 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 5 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 6 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] } diff --git a/src/binaryen/test/dot_s/traps.js.wast b/src/binaryen/test/dot_s/traps.js.wast new file mode 100644 index 0000000000..2dd71d29a6 --- /dev/null +++ b/src/binaryen/test/dot_s/traps.js.wast @@ -0,0 +1,65 @@ +(module + (type $FUNCSIG$id (func (param f64) (result i32))) + (import "asm2wasm" "f64-to-int" (func $f64-to-int (param f64) (result i32))) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (export "test_traps" (func $test_traps)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $test_traps (; 1 ;) (param $0 f32) (param $1 f64) (result i32) + (call $i32u-div + (call $f64-to-int + (f64.promote/f32 + (get_local $0) + ) + ) + (call $f64-to-int + (get_local $1) + ) + ) + ) + (func $i32u-div (; 2 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (i32.div_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $stackSave (; 3 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 4 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 5 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] } diff --git a/src/binaryen/test/dot_s/traps.s b/src/binaryen/test/dot_s/traps.s new file mode 100644 index 0000000000..b75cf8d00e --- /dev/null +++ b/src/binaryen/test/dot_s/traps.s @@ -0,0 +1,14 @@ + .text + .file "" + .globl test_traps + .type test_traps,@function +test_traps: + .param f32, f64 + .result i32 +# BB#0: + i32.trunc_s/f32 $push0=, $0 + i32.trunc_u/f64 $push1=, $1 + i32.div_u $push2=, $pop0, $pop1 + .endfunc +.Lfunc_end0: + .size test_traps, .Lfunc_end0-test_traps diff --git a/src/binaryen/test/dot_s/traps.wast b/src/binaryen/test/dot_s/traps.wast new file mode 100644 index 0000000000..e6371fdaf1 --- /dev/null +++ b/src/binaryen/test/dot_s/traps.wast @@ -0,0 +1,49 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (export "test_traps" (func $test_traps)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $test_traps (; 0 ;) (param $0 f32) (param $1 f64) (result i32) + (i32.div_u + (i32.trunc_s/f32 + (get_local $0) + ) + (i32.trunc_u/f64 + (get_local $1) + ) + ) + ) + (func $stackSave (; 1 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 2 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 3 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] } diff --git a/src/binaryen/test/dot_s/unreachable_blocks.s b/src/binaryen/test/dot_s/unreachable_blocks.s new file mode 100644 index 0000000000..9885be2b1f --- /dev/null +++ b/src/binaryen/test/dot_s/unreachable_blocks.s @@ -0,0 +1,123 @@ + .text + .file "/tmp/tmplu1mMq/a.out.bc" + + .type unreachable_block_void,@function +unreachable_block_void: + .result i32 + block + # Tests that we don't consume the type of the first item inside a block + i32.const $push0=, 1 + end_block + return $pop0 + block i32 + end_block + .endfunc +.Lfunc_end0: + .size unreachable_block_void, .Lfunc_end0-unreachable_block_void + + .type unreachable_block_i32,@function +unreachable_block_i32: + .result i32 + i32.const $push0=, 2 + return $pop0 + block i32 + end_block + .endfunc +.Lfunc_end0: + .size unreachable_block_i32, .Lfunc_end0-unreachable_block_i32 + + .type unreachable_block_i64,@function +unreachable_block_i64: + .result i64 + i64.const $push0=, 3 + return $pop0 + block i64 + end_block + .endfunc +.Lfunc_end0: + .size unreachable_block_i64, .Lfunc_end0-unreachable_block_i64 + + .type unreachable_block_f32,@function +unreachable_block_f32: + .result f32 + f32.const $push0=, 4.5 + return $pop0 + block f32 + end_block + .endfunc +.Lfunc_end0: + .size unreachable_block_f32, .Lfunc_end0-unreachable_block_f32 + + .type unreachable_block_f64,@function +unreachable_block_f64: + .result f64 + f64.const $push0=, 5.5 + return $pop0 + block f64 + end_block + .endfunc +.Lfunc_end0: + .size unreachable_block_f64, .Lfunc_end0-unreachable_block_f64 + + .type unreachable_loop_void,@function +unreachable_loop_void: + .result i32 + loop + i32.const $push0=, 6 + br 0 + end_loop + return $pop0 + loop + br 0 + end_loop + .endfunc +.Lfunc_end0: + .size unreachable_loop_void, .Lfunc_end0-unreachable_loop_void + + .type unreachable_loop_i32,@function +unreachable_loop_i32: + .result i32 + i32.const $push0=, 7 + return $pop0 + loop i32 + br 0 + end_loop + .endfunc +.Lfunc_end0: + .size unreachable_loop_i32, .Lfunc_end0-unreachable_loop_i32 + + .type unreachable_loop_i64,@function +unreachable_loop_i64: + .result i64 + i64.const $push0=, 8 + return $pop0 + loop i64 + br 0 + end_loop + .endfunc +.Lfunc_end0: + .size unreachable_loop_i64, .Lfunc_end0-unreachable_loop_i64 + + .type unreachable_loop_f32,@function +unreachable_loop_f32: + .result f32 + f32.const $push0=, 9.5 + return $pop0 + loop f32 + br 0 + end_loop + .endfunc +.Lfunc_end0: + .size unreachable_loop_f32, .Lfunc_end0-unreachable_loop_f32 + + .type unreachable_loop_f64,@function +unreachable_loop_f64: + .result f64 + f64.const $push0=, 10.5 + return $pop0 + loop f64 + br 0 + end_loop + .endfunc +.Lfunc_end0: + .size unreachable_loop_f64, .Lfunc_end0-unreachable_loop_f64 diff --git a/src/binaryen/test/dot_s/unreachable_blocks.wast b/src/binaryen/test/dot_s/unreachable_blocks.wast new file mode 100644 index 0000000000..43450bb07a --- /dev/null +++ b/src/binaryen/test/dot_s/unreachable_blocks.wast @@ -0,0 +1,123 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $unreachable_block_void (; 0 ;) (result i32) + (block $label$0 + ) + (return + (i32.const 1) + ) + (block $label$1 + (unreachable) + ) + ) + (func $unreachable_block_i32 (; 1 ;) (result i32) + (return + (i32.const 2) + ) + (block $label$0 + (unreachable) + ) + ) + (func $unreachable_block_i64 (; 2 ;) (result i64) + (return + (i64.const 3) + ) + (block $label$0 + (unreachable) + ) + ) + (func $unreachable_block_f32 (; 3 ;) (result f32) + (return + (f32.const 4.5) + ) + (block $label$0 + (unreachable) + ) + ) + (func $unreachable_block_f64 (; 4 ;) (result f64) + (return + (f64.const 5.5) + ) + (block $label$0 + (unreachable) + ) + ) + (func $unreachable_loop_void (; 5 ;) (result i32) + (loop $label$0 + (br $label$0) + ) + (return + (i32.const 6) + ) + (loop $label$1 + (br $label$1) + ) + ) + (func $unreachable_loop_i32 (; 6 ;) (result i32) + (return + (i32.const 7) + ) + (loop $label$0 (result i32) + (br $label$0) + ) + ) + (func $unreachable_loop_i64 (; 7 ;) (result i64) + (return + (i64.const 8) + ) + (loop $label$0 (result i64) + (br $label$0) + ) + ) + (func $unreachable_loop_f32 (; 8 ;) (result f32) + (return + (f32.const 9.5) + ) + (loop $label$0 (result f32) + (br $label$0) + ) + ) + (func $unreachable_loop_f64 (; 9 ;) (result f64) + (return + (f64.const 10.5) + ) + (loop $label$0 (result f64) + (br $label$0) + ) + ) + (func $stackSave (; 10 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 11 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 12 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] } diff --git a/src/binaryen/test/dot_s/visibilities.s b/src/binaryen/test/dot_s/visibilities.s new file mode 100644 index 0000000000..1bc19a7675 --- /dev/null +++ b/src/binaryen/test/dot_s/visibilities.s @@ -0,0 +1,27 @@ + .text + .hidden foo + .globl foo + .type foo,@function +foo: + return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + + .protected bar + .globl bar + .type bar,@function +bar: + return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + + .internal qux + .globl qux + .type qux,@function +qux: + return + .endfunc +.Lfunc_end2: + .size qux, .Lfunc_end2-qux diff --git a/src/binaryen/test/dot_s/visibilities.wast b/src/binaryen/test/dot_s/visibilities.wast new file mode 100644 index 0000000000..58442bd37b --- /dev/null +++ b/src/binaryen/test/dot_s/visibilities.wast @@ -0,0 +1,50 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (export "foo" (func $foo)) + (export "bar" (func $bar)) + (export "qux" (func $qux)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $foo (; 0 ;) + (return) + ) + (func $bar (; 1 ;) + (return) + ) + (func $qux (; 2 ;) + (return) + ) + (func $stackSave (; 3 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 4 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 5 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] } diff --git a/src/binaryen/test/dylib.wasm b/src/binaryen/test/dylib.wasm new file mode 100644 index 0000000000000000000000000000000000000000..06ac55e86fab562d40853c6c8081bbbdff8baa74 GIT binary patch literal 306 zcmXw!!Ait15Qb+aZDltK#iJ*sd-Nf!PayaJ*~kX$nx>`6Dtk&qj|vN3d=C#^eF5Le zB*lRl{`o&
1Ngc!%wX0JQ*a0ovH_#Q$4wnmSB4JmPTpyS;|v$M`=5NxSCFVWWaY61J{O4U=qtI!sSx8}o#>2p(zs4K z1*{ak>8(j-*Q8~ff~-@TK d@%inF)x= (STACK_MAX|0)) abortStackOverflow(size|0); + + return ret|0; +} +function stackSave() { + return STACKTOP|0; +} +function stackRestore(top) { + top = top|0; + STACKTOP = top; +} +function establishStackSpace(stackBase, stackMax) { + stackBase = stackBase|0; + stackMax = stackMax|0; + STACKTOP = stackBase; + STACK_MAX = stackMax; +} + +function setThrew(threw, value) { + threw = threw|0; + value = value|0; + if ((__THREW__|0) == 0) { + __THREW__ = threw; + threwValue = value; + } +} + +function ___cxx_global_var_init() { + var label = 0, sp = 0; + sp = STACKTOP; + __ZN3FooC2Ev((memoryBase + (5242912) | 0)); + return; +} +function __ZN3FooC2Ev($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + (_puts(((memoryBase + (0) | 0)|0))|0); + STACKTOP = sp;return; +} +function __GLOBAL__sub_I_liblib_cpp() { + var label = 0, sp = 0; + sp = STACKTOP; + ___cxx_global_var_init(); + return; +} +function runPostSets() { + var temp = 0; +} +function __post_instantiate() { + STACKTOP = (memoryBase + (32) | 0); + STACK_MAX = STACKTOP + 5242880 | 0; + runPostSets(); + __GLOBAL__sub_I_liblib_cpp(); +} + + + + +// EMSCRIPTEN_END_FUNCS + + + return { __ZN3FooC2Ev: __ZN3FooC2Ev, __post_instantiate: __post_instantiate, runPostSets: runPostSets, _global: 5242912 }; +}) +; \ No newline at end of file diff --git a/src/binaryen/test/dynamicLibrary.fromasm b/src/binaryen/test/dynamicLibrary.fromasm new file mode 100644 index 0000000000..2233b204e5 --- /dev/null +++ b/src/binaryen/test/dynamicLibrary.fromasm @@ -0,0 +1,71 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "abortStackOverflow" (func $abortStackOverflow (param i32))) + (import "env" "_puts" (func $_puts (param i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (i32.const 0)) + (global $STACK_MAX (mut i32) (i32.const 0)) + (global $_global i32 (i32.const 5242912)) + (data (get_global $memoryBase) "dynamicLibrary.asm.js") + (export "__ZN3FooC2Ev" (func $__ZN3FooC2Ev)) + (export "__post_instantiate" (func $__post_instantiate)) + (export "runPostSets" (func $runPostSets)) + (export "_global" (global $_global)) + (func $__ZN3FooC2Ev (; 2 ;) (param $0 i32) + (local $1 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abortStackOverflow + (i32.const 16) + ) + ) + (drop + (call $_puts + (get_global $memoryBase) + ) + ) + (set_global $STACKTOP + (get_local $1) + ) + ) + (func $runPostSets (; 3 ;) + (nop) + ) + (func $__post_instantiate (; 4 ;) + (set_global $STACKTOP + (i32.add + (get_global $memoryBase) + (i32.const 32) + ) + ) + (set_global $STACK_MAX + (i32.add + (get_global $STACKTOP) + (i32.const 5242880) + ) + ) + (call $runPostSets) + (call $__ZN3FooC2Ev + (i32.add + (get_global $memoryBase) + (i32.const 5242912) + ) + ) + ) +) diff --git a/src/binaryen/test/dynamicLibrary.fromasm.clamp b/src/binaryen/test/dynamicLibrary.fromasm.clamp new file mode 100644 index 0000000000..2233b204e5 --- /dev/null +++ b/src/binaryen/test/dynamicLibrary.fromasm.clamp @@ -0,0 +1,71 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "abortStackOverflow" (func $abortStackOverflow (param i32))) + (import "env" "_puts" (func $_puts (param i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (i32.const 0)) + (global $STACK_MAX (mut i32) (i32.const 0)) + (global $_global i32 (i32.const 5242912)) + (data (get_global $memoryBase) "dynamicLibrary.asm.js") + (export "__ZN3FooC2Ev" (func $__ZN3FooC2Ev)) + (export "__post_instantiate" (func $__post_instantiate)) + (export "runPostSets" (func $runPostSets)) + (export "_global" (global $_global)) + (func $__ZN3FooC2Ev (; 2 ;) (param $0 i32) + (local $1 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abortStackOverflow + (i32.const 16) + ) + ) + (drop + (call $_puts + (get_global $memoryBase) + ) + ) + (set_global $STACKTOP + (get_local $1) + ) + ) + (func $runPostSets (; 3 ;) + (nop) + ) + (func $__post_instantiate (; 4 ;) + (set_global $STACKTOP + (i32.add + (get_global $memoryBase) + (i32.const 32) + ) + ) + (set_global $STACK_MAX + (i32.add + (get_global $STACKTOP) + (i32.const 5242880) + ) + ) + (call $runPostSets) + (call $__ZN3FooC2Ev + (i32.add + (get_global $memoryBase) + (i32.const 5242912) + ) + ) + ) +) diff --git a/src/binaryen/test/dynamicLibrary.fromasm.clamp.no-opts b/src/binaryen/test/dynamicLibrary.fromasm.clamp.no-opts new file mode 100644 index 0000000000..4680b89b5e --- /dev/null +++ b/src/binaryen/test/dynamicLibrary.fromasm.clamp.no-opts @@ -0,0 +1,191 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (import "env" "DYNAMICTOP_PTR" (global $DYNAMICTOP_PTR$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "ABORT" (global $ABORT$asm2wasm$import i32)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "global" "NaN" (global $nan$asm2wasm$import f64)) + (import "global" "Infinity" (global $inf$asm2wasm$import f64)) + (import "env" "abortStackOverflow" (func $abortStackOverflow (param i32))) + (import "env" "_puts" (func $_puts (param i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (global $DYNAMICTOP_PTR (mut i32) (get_global $DYNAMICTOP_PTR$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $ABORT (mut i32) (get_global $ABORT$asm2wasm$import)) + (global $STACKTOP (mut i32) (i32.const 0)) + (global $STACK_MAX (mut i32) (i32.const 0)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $setjmpId (mut i32) (i32.const 0)) + (global $undef (mut i32) (i32.const 0)) + (global $nan (mut f64) (get_global $nan$asm2wasm$import)) + (global $inf (mut f64) (get_global $inf$asm2wasm$import)) + (global $tempInt (mut i32) (i32.const 0)) + (global $tempBigInt (mut i32) (i32.const 0)) + (global $tempBigIntP (mut i32) (i32.const 0)) + (global $tempBigIntS (mut i32) (i32.const 0)) + (global $tempBigIntR (mut f64) (f64.const 0)) + (global $tempBigIntI (mut i32) (i32.const 0)) + (global $tempBigIntD (mut i32) (i32.const 0)) + (global $tempValue (mut i32) (i32.const 0)) + (global $tempDouble (mut f64) (f64.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (global $tempFloat (mut f32) (f32.const 0)) + (global $f0 (mut f32) (f32.const 0)) + (global $_global i32 (i32.const 5242912)) + (export "__ZN3FooC2Ev" (func $__ZN3FooC2Ev)) + (export "__post_instantiate" (func $__post_instantiate)) + (export "runPostSets" (func $runPostSets)) + (export "_global" (global $_global)) + (func $stackAlloc (; 2 ;) (param $size i32) (result i32) + (local $ret i32) + (set_local $ret + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $size) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abortStackOverflow + (get_local $size) + ) + ) + (return + (get_local $ret) + ) + ) + (func $stackSave (; 3 ;) (result i32) + (return + (get_global $STACKTOP) + ) + ) + (func $stackRestore (; 4 ;) (param $top i32) + (set_global $STACKTOP + (get_local $top) + ) + ) + (func $establishStackSpace (; 5 ;) (param $stackBase i32) (param $stackMax i32) + (set_global $STACKTOP + (get_local $stackBase) + ) + (set_global $STACK_MAX + (get_local $stackMax) + ) + ) + (func $setThrew (; 6 ;) (param $threw i32) (param $value i32) + (if + (i32.eq + (get_global $__THREW__) + (i32.const 0) + ) + (block + (set_global $__THREW__ + (get_local $threw) + ) + (set_global $threwValue + (get_local $value) + ) + ) + ) + ) + (func $___cxx_global_var_init (; 7 ;) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (call $__ZN3FooC2Ev + (i32.add + (get_global $memoryBase) + (i32.const 5242912) + ) + ) + (return) + ) + (func $__ZN3FooC2Ev (; 8 ;) (param $$0 i32) + (local $$1 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abortStackOverflow + (i32.const 16) + ) + ) + (set_local $$1 + (get_local $$0) + ) + (drop + (call $_puts + (i32.add + (get_global $memoryBase) + (i32.const 0) + ) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return) + ) + (func $__GLOBAL__sub_I_liblib_cpp (; 9 ;) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (call $___cxx_global_var_init) + (return) + ) + (func $runPostSets (; 10 ;) + (local $temp i32) + (nop) + ) + (func $__post_instantiate (; 11 ;) + (set_global $STACKTOP + (i32.add + (get_global $memoryBase) + (i32.const 32) + ) + ) + (set_global $STACK_MAX + (i32.add + (get_global $STACKTOP) + (i32.const 5242880) + ) + ) + (call $runPostSets) + (call $__GLOBAL__sub_I_liblib_cpp) + ) +) diff --git a/src/binaryen/test/dynamicLibrary.fromasm.imprecise b/src/binaryen/test/dynamicLibrary.fromasm.imprecise new file mode 100644 index 0000000000..49b6196340 --- /dev/null +++ b/src/binaryen/test/dynamicLibrary.fromasm.imprecise @@ -0,0 +1,70 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "abortStackOverflow" (func $abortStackOverflow (param i32))) + (import "env" "_puts" (func $_puts (param i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (i32.const 0)) + (global $STACK_MAX (mut i32) (i32.const 0)) + (global $_global i32 (i32.const 5242912)) + (export "__ZN3FooC2Ev" (func $__ZN3FooC2Ev)) + (export "__post_instantiate" (func $__post_instantiate)) + (export "runPostSets" (func $runPostSets)) + (export "_global" (global $_global)) + (func $__ZN3FooC2Ev (; 2 ;) (param $0 i32) + (local $1 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abortStackOverflow + (i32.const 16) + ) + ) + (drop + (call $_puts + (get_global $memoryBase) + ) + ) + (set_global $STACKTOP + (get_local $1) + ) + ) + (func $runPostSets (; 3 ;) + (nop) + ) + (func $__post_instantiate (; 4 ;) + (set_global $STACKTOP + (i32.add + (get_global $memoryBase) + (i32.const 32) + ) + ) + (set_global $STACK_MAX + (i32.add + (get_global $STACKTOP) + (i32.const 5242880) + ) + ) + (call $runPostSets) + (call $__ZN3FooC2Ev + (i32.add + (get_global $memoryBase) + (i32.const 5242912) + ) + ) + ) +) diff --git a/src/binaryen/test/dynamicLibrary.fromasm.imprecise.no-opts b/src/binaryen/test/dynamicLibrary.fromasm.imprecise.no-opts new file mode 100644 index 0000000000..4680b89b5e --- /dev/null +++ b/src/binaryen/test/dynamicLibrary.fromasm.imprecise.no-opts @@ -0,0 +1,191 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (import "env" "DYNAMICTOP_PTR" (global $DYNAMICTOP_PTR$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "ABORT" (global $ABORT$asm2wasm$import i32)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "global" "NaN" (global $nan$asm2wasm$import f64)) + (import "global" "Infinity" (global $inf$asm2wasm$import f64)) + (import "env" "abortStackOverflow" (func $abortStackOverflow (param i32))) + (import "env" "_puts" (func $_puts (param i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (global $DYNAMICTOP_PTR (mut i32) (get_global $DYNAMICTOP_PTR$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $ABORT (mut i32) (get_global $ABORT$asm2wasm$import)) + (global $STACKTOP (mut i32) (i32.const 0)) + (global $STACK_MAX (mut i32) (i32.const 0)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $setjmpId (mut i32) (i32.const 0)) + (global $undef (mut i32) (i32.const 0)) + (global $nan (mut f64) (get_global $nan$asm2wasm$import)) + (global $inf (mut f64) (get_global $inf$asm2wasm$import)) + (global $tempInt (mut i32) (i32.const 0)) + (global $tempBigInt (mut i32) (i32.const 0)) + (global $tempBigIntP (mut i32) (i32.const 0)) + (global $tempBigIntS (mut i32) (i32.const 0)) + (global $tempBigIntR (mut f64) (f64.const 0)) + (global $tempBigIntI (mut i32) (i32.const 0)) + (global $tempBigIntD (mut i32) (i32.const 0)) + (global $tempValue (mut i32) (i32.const 0)) + (global $tempDouble (mut f64) (f64.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (global $tempFloat (mut f32) (f32.const 0)) + (global $f0 (mut f32) (f32.const 0)) + (global $_global i32 (i32.const 5242912)) + (export "__ZN3FooC2Ev" (func $__ZN3FooC2Ev)) + (export "__post_instantiate" (func $__post_instantiate)) + (export "runPostSets" (func $runPostSets)) + (export "_global" (global $_global)) + (func $stackAlloc (; 2 ;) (param $size i32) (result i32) + (local $ret i32) + (set_local $ret + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $size) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abortStackOverflow + (get_local $size) + ) + ) + (return + (get_local $ret) + ) + ) + (func $stackSave (; 3 ;) (result i32) + (return + (get_global $STACKTOP) + ) + ) + (func $stackRestore (; 4 ;) (param $top i32) + (set_global $STACKTOP + (get_local $top) + ) + ) + (func $establishStackSpace (; 5 ;) (param $stackBase i32) (param $stackMax i32) + (set_global $STACKTOP + (get_local $stackBase) + ) + (set_global $STACK_MAX + (get_local $stackMax) + ) + ) + (func $setThrew (; 6 ;) (param $threw i32) (param $value i32) + (if + (i32.eq + (get_global $__THREW__) + (i32.const 0) + ) + (block + (set_global $__THREW__ + (get_local $threw) + ) + (set_global $threwValue + (get_local $value) + ) + ) + ) + ) + (func $___cxx_global_var_init (; 7 ;) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (call $__ZN3FooC2Ev + (i32.add + (get_global $memoryBase) + (i32.const 5242912) + ) + ) + (return) + ) + (func $__ZN3FooC2Ev (; 8 ;) (param $$0 i32) + (local $$1 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abortStackOverflow + (i32.const 16) + ) + ) + (set_local $$1 + (get_local $$0) + ) + (drop + (call $_puts + (i32.add + (get_global $memoryBase) + (i32.const 0) + ) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return) + ) + (func $__GLOBAL__sub_I_liblib_cpp (; 9 ;) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (call $___cxx_global_var_init) + (return) + ) + (func $runPostSets (; 10 ;) + (local $temp i32) + (nop) + ) + (func $__post_instantiate (; 11 ;) + (set_global $STACKTOP + (i32.add + (get_global $memoryBase) + (i32.const 32) + ) + ) + (set_global $STACK_MAX + (i32.add + (get_global $STACKTOP) + (i32.const 5242880) + ) + ) + (call $runPostSets) + (call $__GLOBAL__sub_I_liblib_cpp) + ) +) diff --git a/src/binaryen/test/dynamicLibrary.fromasm.no-opts b/src/binaryen/test/dynamicLibrary.fromasm.no-opts new file mode 100644 index 0000000000..4680b89b5e --- /dev/null +++ b/src/binaryen/test/dynamicLibrary.fromasm.no-opts @@ -0,0 +1,191 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (import "env" "DYNAMICTOP_PTR" (global $DYNAMICTOP_PTR$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "ABORT" (global $ABORT$asm2wasm$import i32)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "global" "NaN" (global $nan$asm2wasm$import f64)) + (import "global" "Infinity" (global $inf$asm2wasm$import f64)) + (import "env" "abortStackOverflow" (func $abortStackOverflow (param i32))) + (import "env" "_puts" (func $_puts (param i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (global $DYNAMICTOP_PTR (mut i32) (get_global $DYNAMICTOP_PTR$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $ABORT (mut i32) (get_global $ABORT$asm2wasm$import)) + (global $STACKTOP (mut i32) (i32.const 0)) + (global $STACK_MAX (mut i32) (i32.const 0)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $setjmpId (mut i32) (i32.const 0)) + (global $undef (mut i32) (i32.const 0)) + (global $nan (mut f64) (get_global $nan$asm2wasm$import)) + (global $inf (mut f64) (get_global $inf$asm2wasm$import)) + (global $tempInt (mut i32) (i32.const 0)) + (global $tempBigInt (mut i32) (i32.const 0)) + (global $tempBigIntP (mut i32) (i32.const 0)) + (global $tempBigIntS (mut i32) (i32.const 0)) + (global $tempBigIntR (mut f64) (f64.const 0)) + (global $tempBigIntI (mut i32) (i32.const 0)) + (global $tempBigIntD (mut i32) (i32.const 0)) + (global $tempValue (mut i32) (i32.const 0)) + (global $tempDouble (mut f64) (f64.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (global $tempFloat (mut f32) (f32.const 0)) + (global $f0 (mut f32) (f32.const 0)) + (global $_global i32 (i32.const 5242912)) + (export "__ZN3FooC2Ev" (func $__ZN3FooC2Ev)) + (export "__post_instantiate" (func $__post_instantiate)) + (export "runPostSets" (func $runPostSets)) + (export "_global" (global $_global)) + (func $stackAlloc (; 2 ;) (param $size i32) (result i32) + (local $ret i32) + (set_local $ret + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $size) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abortStackOverflow + (get_local $size) + ) + ) + (return + (get_local $ret) + ) + ) + (func $stackSave (; 3 ;) (result i32) + (return + (get_global $STACKTOP) + ) + ) + (func $stackRestore (; 4 ;) (param $top i32) + (set_global $STACKTOP + (get_local $top) + ) + ) + (func $establishStackSpace (; 5 ;) (param $stackBase i32) (param $stackMax i32) + (set_global $STACKTOP + (get_local $stackBase) + ) + (set_global $STACK_MAX + (get_local $stackMax) + ) + ) + (func $setThrew (; 6 ;) (param $threw i32) (param $value i32) + (if + (i32.eq + (get_global $__THREW__) + (i32.const 0) + ) + (block + (set_global $__THREW__ + (get_local $threw) + ) + (set_global $threwValue + (get_local $value) + ) + ) + ) + ) + (func $___cxx_global_var_init (; 7 ;) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (call $__ZN3FooC2Ev + (i32.add + (get_global $memoryBase) + (i32.const 5242912) + ) + ) + (return) + ) + (func $__ZN3FooC2Ev (; 8 ;) (param $$0 i32) + (local $$1 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abortStackOverflow + (i32.const 16) + ) + ) + (set_local $$1 + (get_local $$0) + ) + (drop + (call $_puts + (i32.add + (get_global $memoryBase) + (i32.const 0) + ) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return) + ) + (func $__GLOBAL__sub_I_liblib_cpp (; 9 ;) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (call $___cxx_global_var_init) + (return) + ) + (func $runPostSets (; 10 ;) + (local $temp i32) + (nop) + ) + (func $__post_instantiate (; 11 ;) + (set_global $STACKTOP + (i32.add + (get_global $memoryBase) + (i32.const 32) + ) + ) + (set_global $STACK_MAX + (i32.add + (get_global $STACKTOP) + (i32.const 5242880) + ) + ) + (call $runPostSets) + (call $__GLOBAL__sub_I_liblib_cpp) + ) +) diff --git a/src/binaryen/test/emcc_O2_hello_world.asm.js b/src/binaryen/test/emcc_O2_hello_world.asm.js new file mode 100644 index 0000000000..a803b97ffe --- /dev/null +++ b/src/binaryen/test/emcc_O2_hello_world.asm.js @@ -0,0 +1,2293 @@ +Module["asm"] = (function(global,env,buffer) { + + 'use asm'; + + + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + + + var STACKTOP=env.STACKTOP|0; + var STACK_MAX=env.STACK_MAX|0; + var tempDoublePtr=env.tempDoublePtr|0; + var ABORT=env.ABORT|0; + + var __THREW__ = 0; + var threwValue = 0; + var setjmpId = 0; + var undef = 0; + var nan = global.NaN, inf = global.Infinity; + var tempInt = 0, tempBigInt = 0, tempBigIntP = 0, tempBigIntS = 0, tempBigIntR = 0.0, tempBigIntI = 0, tempBigIntD = 0, tempValue = 0, tempDouble = 0.0; + + var tempRet0 = 0; + var tempRet1 = 0; + var tempRet2 = 0; + var tempRet3 = 0; + var tempRet4 = 0; + var tempRet5 = 0; + var tempRet6 = 0; + var tempRet7 = 0; + var tempRet8 = 0; + var tempRet9 = 0; + var Math_floor=global.Math.floor; + var Math_abs=global.Math.abs; + var Math_sqrt=global.Math.sqrt; + var Math_pow=global.Math.pow; + var Math_cos=global.Math.cos; + var Math_sin=global.Math.sin; + var Math_tan=global.Math.tan; + var Math_acos=global.Math.acos; + var Math_asin=global.Math.asin; + var Math_atan=global.Math.atan; + var Math_atan2=global.Math.atan2; + var Math_exp=global.Math.exp; + var Math_log=global.Math.log; + var Math_ceil=global.Math.ceil; + var Math_imul=global.Math.imul; + var Math_min=global.Math.min; + var Math_clz32=global.Math.clz32; + var abort=env.abort; + var assert=env.assert; + var invoke_ii=env.invoke_ii; + var invoke_iiii=env.invoke_iiii; + var invoke_vi=env.invoke_vi; + var _pthread_cleanup_pop=env._pthread_cleanup_pop; + var _pthread_self=env._pthread_self; + var _sysconf=env._sysconf; + var ___lock=env.___lock; + var ___syscall6=env.___syscall6; + var ___setErrNo=env.___setErrNo; + var _abort=env._abort; + var _sbrk=env._sbrk; + var _time=env._time; + var _pthread_cleanup_push=env._pthread_cleanup_push; + var _emscripten_memcpy_big=env._emscripten_memcpy_big; + var ___syscall54=env.___syscall54; + var ___unlock=env.___unlock; + var ___syscall140=env.___syscall140; + var _emscripten_set_main_loop_timing=env._emscripten_set_main_loop_timing; + var _emscripten_set_main_loop=env._emscripten_set_main_loop; + var ___syscall146=env.___syscall146; + var tempFloat = 0.0; + +// EMSCRIPTEN_START_FUNCS + +function _malloc(i1) { + i1 = i1 | 0; + var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0, i37 = 0, i38 = 0, i39 = 0, i40 = 0, i41 = 0, i42 = 0, i43 = 0, i44 = 0, i45 = 0, i46 = 0, i47 = 0, i48 = 0, i49 = 0, i50 = 0, i51 = 0, i52 = 0, i53 = 0, i54 = 0, i55 = 0, i56 = 0, i57 = 0, i58 = 0, i59 = 0, i60 = 0, i61 = 0, i62 = 0, i63 = 0, i64 = 0, i65 = 0, i66 = 0, i67 = 0, i68 = 0, i69 = 0, i70 = 0, i71 = 0, i72 = 0, i73 = 0, i74 = 0, i75 = 0, i76 = 0, i77 = 0, i78 = 0, i79 = 0, i80 = 0, i81 = 0, i82 = 0, i83 = 0, i84 = 0, i85 = 0, i86 = 0, i87 = 0, i88 = 0, i89 = 0, i90 = 0, i91 = 0, i92 = 0; + do if (i1 >>> 0 < 245) { + i2 = i1 >>> 0 < 11 ? 16 : i1 + 11 & -8; + i3 = i2 >>> 3; + i4 = HEAP32[44] | 0; + i5 = i4 >>> i3; + if (i5 & 3) { + i6 = (i5 & 1 ^ 1) + i3 | 0; + i7 = 216 + (i6 << 1 << 2) | 0; + i8 = i7 + 8 | 0; + i9 = HEAP32[i8 >> 2] | 0; + i10 = i9 + 8 | 0; + i11 = HEAP32[i10 >> 2] | 0; + do if ((i7 | 0) != (i11 | 0)) { + if (i11 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); + i12 = i11 + 12 | 0; + if ((HEAP32[i12 >> 2] | 0) == (i9 | 0)) { + HEAP32[i12 >> 2] = i7; + HEAP32[i8 >> 2] = i11; + break; + } else _abort(); + } else HEAP32[44] = i4 & ~(1 << i6); while (0); + i11 = i6 << 3; + HEAP32[i9 + 4 >> 2] = i11 | 3; + i8 = i9 + i11 + 4 | 0; + HEAP32[i8 >> 2] = HEAP32[i8 >> 2] | 1; + i13 = i10; + return i13 | 0; + } + i8 = HEAP32[46] | 0; + if (i2 >>> 0 > i8 >>> 0) { + if (i5) { + i11 = 2 << i3; + i7 = i5 << i3 & (i11 | 0 - i11); + i11 = (i7 & 0 - i7) + -1 | 0; + i7 = i11 >>> 12 & 16; + i12 = i11 >>> i7; + i11 = i12 >>> 5 & 8; + i14 = i12 >>> i11; + i12 = i14 >>> 2 & 4; + i15 = i14 >>> i12; + i14 = i15 >>> 1 & 2; + i16 = i15 >>> i14; + i15 = i16 >>> 1 & 1; + i17 = (i11 | i7 | i12 | i14 | i15) + (i16 >>> i15) | 0; + i15 = 216 + (i17 << 1 << 2) | 0; + i16 = i15 + 8 | 0; + i14 = HEAP32[i16 >> 2] | 0; + i12 = i14 + 8 | 0; + i7 = HEAP32[i12 >> 2] | 0; + do if ((i15 | 0) != (i7 | 0)) { + if (i7 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); + i11 = i7 + 12 | 0; + if ((HEAP32[i11 >> 2] | 0) == (i14 | 0)) { + HEAP32[i11 >> 2] = i15; + HEAP32[i16 >> 2] = i7; + i18 = HEAP32[46] | 0; + break; + } else _abort(); + } else { + HEAP32[44] = i4 & ~(1 << i17); + i18 = i8; + } while (0); + i8 = (i17 << 3) - i2 | 0; + HEAP32[i14 + 4 >> 2] = i2 | 3; + i4 = i14 + i2 | 0; + HEAP32[i4 + 4 >> 2] = i8 | 1; + HEAP32[i4 + i8 >> 2] = i8; + if (i18) { + i7 = HEAP32[49] | 0; + i16 = i18 >>> 3; + i15 = 216 + (i16 << 1 << 2) | 0; + i3 = HEAP32[44] | 0; + i5 = 1 << i16; + if (i3 & i5) { + i16 = i15 + 8 | 0; + i10 = HEAP32[i16 >> 2] | 0; + if (i10 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); else { + i19 = i16; + i20 = i10; + } + } else { + HEAP32[44] = i3 | i5; + i19 = i15 + 8 | 0; + i20 = i15; + } + HEAP32[i19 >> 2] = i7; + HEAP32[i20 + 12 >> 2] = i7; + HEAP32[i7 + 8 >> 2] = i20; + HEAP32[i7 + 12 >> 2] = i15; + } + HEAP32[46] = i8; + HEAP32[49] = i4; + i13 = i12; + return i13 | 0; + } + i4 = HEAP32[45] | 0; + if (i4) { + i8 = (i4 & 0 - i4) + -1 | 0; + i4 = i8 >>> 12 & 16; + i15 = i8 >>> i4; + i8 = i15 >>> 5 & 8; + i7 = i15 >>> i8; + i15 = i7 >>> 2 & 4; + i5 = i7 >>> i15; + i7 = i5 >>> 1 & 2; + i3 = i5 >>> i7; + i5 = i3 >>> 1 & 1; + i10 = HEAP32[480 + ((i8 | i4 | i15 | i7 | i5) + (i3 >>> i5) << 2) >> 2] | 0; + i5 = (HEAP32[i10 + 4 >> 2] & -8) - i2 | 0; + i3 = i10; + i7 = i10; + while (1) { + i10 = HEAP32[i3 + 16 >> 2] | 0; + if (!i10) { + i15 = HEAP32[i3 + 20 >> 2] | 0; + if (!i15) { + i21 = i5; + i22 = i7; + break; + } else i23 = i15; + } else i23 = i10; + i10 = (HEAP32[i23 + 4 >> 2] & -8) - i2 | 0; + i15 = i10 >>> 0 < i5 >>> 0; + i5 = i15 ? i10 : i5; + i3 = i23; + i7 = i15 ? i23 : i7; + } + i7 = HEAP32[48] | 0; + if (i22 >>> 0 < i7 >>> 0) _abort(); + i3 = i22 + i2 | 0; + if (i22 >>> 0 >= i3 >>> 0) _abort(); + i5 = HEAP32[i22 + 24 >> 2] | 0; + i12 = HEAP32[i22 + 12 >> 2] | 0; + do if ((i12 | 0) == (i22 | 0)) { + i14 = i22 + 20 | 0; + i17 = HEAP32[i14 >> 2] | 0; + if (!i17) { + i15 = i22 + 16 | 0; + i10 = HEAP32[i15 >> 2] | 0; + if (!i10) { + i24 = 0; + break; + } else { + i25 = i10; + i26 = i15; + } + } else { + i25 = i17; + i26 = i14; + } + while (1) { + i14 = i25 + 20 | 0; + i17 = HEAP32[i14 >> 2] | 0; + if (i17) { + i25 = i17; + i26 = i14; + continue; + } + i14 = i25 + 16 | 0; + i17 = HEAP32[i14 >> 2] | 0; + if (!i17) { + i27 = i25; + i28 = i26; + break; + } else { + i25 = i17; + i26 = i14; + } + } + if (i28 >>> 0 < i7 >>> 0) _abort(); else { + HEAP32[i28 >> 2] = 0; + i24 = i27; + break; + } + } else { + i14 = HEAP32[i22 + 8 >> 2] | 0; + if (i14 >>> 0 < i7 >>> 0) _abort(); + i17 = i14 + 12 | 0; + if ((HEAP32[i17 >> 2] | 0) != (i22 | 0)) _abort(); + i15 = i12 + 8 | 0; + if ((HEAP32[i15 >> 2] | 0) == (i22 | 0)) { + HEAP32[i17 >> 2] = i12; + HEAP32[i15 >> 2] = i14; + i24 = i12; + break; + } else _abort(); + } while (0); + do if (i5) { + i12 = HEAP32[i22 + 28 >> 2] | 0; + i7 = 480 + (i12 << 2) | 0; + if ((i22 | 0) == (HEAP32[i7 >> 2] | 0)) { + HEAP32[i7 >> 2] = i24; + if (!i24) { + HEAP32[45] = HEAP32[45] & ~(1 << i12); + break; + } + } else { + if (i5 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); + i12 = i5 + 16 | 0; + if ((HEAP32[i12 >> 2] | 0) == (i22 | 0)) HEAP32[i12 >> 2] = i24; else HEAP32[i5 + 20 >> 2] = i24; + if (!i24) break; + } + i12 = HEAP32[48] | 0; + if (i24 >>> 0 < i12 >>> 0) _abort(); + HEAP32[i24 + 24 >> 2] = i5; + i7 = HEAP32[i22 + 16 >> 2] | 0; + do if (i7) if (i7 >>> 0 < i12 >>> 0) _abort(); else { + HEAP32[i24 + 16 >> 2] = i7; + HEAP32[i7 + 24 >> 2] = i24; + break; + } while (0); + i7 = HEAP32[i22 + 20 >> 2] | 0; + if (i7) if (i7 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); else { + HEAP32[i24 + 20 >> 2] = i7; + HEAP32[i7 + 24 >> 2] = i24; + break; + } + } while (0); + if (i21 >>> 0 < 16) { + i5 = i21 + i2 | 0; + HEAP32[i22 + 4 >> 2] = i5 | 3; + i7 = i22 + i5 + 4 | 0; + HEAP32[i7 >> 2] = HEAP32[i7 >> 2] | 1; + } else { + HEAP32[i22 + 4 >> 2] = i2 | 3; + HEAP32[i3 + 4 >> 2] = i21 | 1; + HEAP32[i3 + i21 >> 2] = i21; + i7 = HEAP32[46] | 0; + if (i7) { + i5 = HEAP32[49] | 0; + i12 = i7 >>> 3; + i7 = 216 + (i12 << 1 << 2) | 0; + i14 = HEAP32[44] | 0; + i15 = 1 << i12; + if (i14 & i15) { + i12 = i7 + 8 | 0; + i17 = HEAP32[i12 >> 2] | 0; + if (i17 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); else { + i29 = i12; + i30 = i17; + } + } else { + HEAP32[44] = i14 | i15; + i29 = i7 + 8 | 0; + i30 = i7; + } + HEAP32[i29 >> 2] = i5; + HEAP32[i30 + 12 >> 2] = i5; + HEAP32[i5 + 8 >> 2] = i30; + HEAP32[i5 + 12 >> 2] = i7; + } + HEAP32[46] = i21; + HEAP32[49] = i3; + } + i13 = i22 + 8 | 0; + return i13 | 0; + } else i31 = i2; + } else i31 = i2; + } else if (i1 >>> 0 <= 4294967231) { + i7 = i1 + 11 | 0; + i5 = i7 & -8; + i15 = HEAP32[45] | 0; + if (i15) { + i14 = 0 - i5 | 0; + i17 = i7 >>> 8; + if (i17) if (i5 >>> 0 > 16777215) i32 = 31; else { + i7 = (i17 + 1048320 | 0) >>> 16 & 8; + i12 = i17 << i7; + i17 = (i12 + 520192 | 0) >>> 16 & 4; + i10 = i12 << i17; + i12 = (i10 + 245760 | 0) >>> 16 & 2; + i4 = 14 - (i17 | i7 | i12) + (i10 << i12 >>> 15) | 0; + i32 = i5 >>> (i4 + 7 | 0) & 1 | i4 << 1; + } else i32 = 0; + i4 = HEAP32[480 + (i32 << 2) >> 2] | 0; + L123 : do if (!i4) { + i33 = i14; + i34 = 0; + i35 = 0; + i36 = 86; + } else { + i12 = i14; + i10 = 0; + i7 = i5 << ((i32 | 0) == 31 ? 0 : 25 - (i32 >>> 1) | 0); + i17 = i4; + i8 = 0; + while (1) { + i16 = HEAP32[i17 + 4 >> 2] & -8; + i9 = i16 - i5 | 0; + if (i9 >>> 0 < i12 >>> 0) if ((i16 | 0) == (i5 | 0)) { + i37 = i9; + i38 = i17; + i39 = i17; + i36 = 90; + break L123; + } else { + i40 = i9; + i41 = i17; + } else { + i40 = i12; + i41 = i8; + } + i9 = HEAP32[i17 + 20 >> 2] | 0; + i17 = HEAP32[i17 + 16 + (i7 >>> 31 << 2) >> 2] | 0; + i16 = (i9 | 0) == 0 | (i9 | 0) == (i17 | 0) ? i10 : i9; + i9 = (i17 | 0) == 0; + if (i9) { + i33 = i40; + i34 = i16; + i35 = i41; + i36 = 86; + break; + } else { + i12 = i40; + i10 = i16; + i7 = i7 << (i9 & 1 ^ 1); + i8 = i41; + } + } + } while (0); + if ((i36 | 0) == 86) { + if ((i34 | 0) == 0 & (i35 | 0) == 0) { + i4 = 2 << i32; + i14 = i15 & (i4 | 0 - i4); + if (!i14) { + i31 = i5; + break; + } + i4 = (i14 & 0 - i14) + -1 | 0; + i14 = i4 >>> 12 & 16; + i2 = i4 >>> i14; + i4 = i2 >>> 5 & 8; + i3 = i2 >>> i4; + i2 = i3 >>> 2 & 4; + i8 = i3 >>> i2; + i3 = i8 >>> 1 & 2; + i7 = i8 >>> i3; + i8 = i7 >>> 1 & 1; + i42 = HEAP32[480 + ((i4 | i14 | i2 | i3 | i8) + (i7 >>> i8) << 2) >> 2] | 0; + } else i42 = i34; + if (!i42) { + i43 = i33; + i44 = i35; + } else { + i37 = i33; + i38 = i42; + i39 = i35; + i36 = 90; + } + } + if ((i36 | 0) == 90) while (1) { + i36 = 0; + i8 = (HEAP32[i38 + 4 >> 2] & -8) - i5 | 0; + i7 = i8 >>> 0 < i37 >>> 0; + i3 = i7 ? i8 : i37; + i8 = i7 ? i38 : i39; + i7 = HEAP32[i38 + 16 >> 2] | 0; + if (i7) { + i37 = i3; + i38 = i7; + i39 = i8; + i36 = 90; + continue; + } + i38 = HEAP32[i38 + 20 >> 2] | 0; + if (!i38) { + i43 = i3; + i44 = i8; + break; + } else { + i37 = i3; + i39 = i8; + i36 = 90; + } + } + if ((i44 | 0) != 0 ? i43 >>> 0 < ((HEAP32[46] | 0) - i5 | 0) >>> 0 : 0) { + i15 = HEAP32[48] | 0; + if (i44 >>> 0 < i15 >>> 0) _abort(); + i8 = i44 + i5 | 0; + if (i44 >>> 0 >= i8 >>> 0) _abort(); + i3 = HEAP32[i44 + 24 >> 2] | 0; + i7 = HEAP32[i44 + 12 >> 2] | 0; + do if ((i7 | 0) == (i44 | 0)) { + i2 = i44 + 20 | 0; + i14 = HEAP32[i2 >> 2] | 0; + if (!i14) { + i4 = i44 + 16 | 0; + i10 = HEAP32[i4 >> 2] | 0; + if (!i10) { + i45 = 0; + break; + } else { + i46 = i10; + i47 = i4; + } + } else { + i46 = i14; + i47 = i2; + } + while (1) { + i2 = i46 + 20 | 0; + i14 = HEAP32[i2 >> 2] | 0; + if (i14) { + i46 = i14; + i47 = i2; + continue; + } + i2 = i46 + 16 | 0; + i14 = HEAP32[i2 >> 2] | 0; + if (!i14) { + i48 = i46; + i49 = i47; + break; + } else { + i46 = i14; + i47 = i2; + } + } + if (i49 >>> 0 < i15 >>> 0) _abort(); else { + HEAP32[i49 >> 2] = 0; + i45 = i48; + break; + } + } else { + i2 = HEAP32[i44 + 8 >> 2] | 0; + if (i2 >>> 0 < i15 >>> 0) _abort(); + i14 = i2 + 12 | 0; + if ((HEAP32[i14 >> 2] | 0) != (i44 | 0)) _abort(); + i4 = i7 + 8 | 0; + if ((HEAP32[i4 >> 2] | 0) == (i44 | 0)) { + HEAP32[i14 >> 2] = i7; + HEAP32[i4 >> 2] = i2; + i45 = i7; + break; + } else _abort(); + } while (0); + do if (i3) { + i7 = HEAP32[i44 + 28 >> 2] | 0; + i15 = 480 + (i7 << 2) | 0; + if ((i44 | 0) == (HEAP32[i15 >> 2] | 0)) { + HEAP32[i15 >> 2] = i45; + if (!i45) { + HEAP32[45] = HEAP32[45] & ~(1 << i7); + break; + } + } else { + if (i3 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); + i7 = i3 + 16 | 0; + if ((HEAP32[i7 >> 2] | 0) == (i44 | 0)) HEAP32[i7 >> 2] = i45; else HEAP32[i3 + 20 >> 2] = i45; + if (!i45) break; + } + i7 = HEAP32[48] | 0; + if (i45 >>> 0 < i7 >>> 0) _abort(); + HEAP32[i45 + 24 >> 2] = i3; + i15 = HEAP32[i44 + 16 >> 2] | 0; + do if (i15) if (i15 >>> 0 < i7 >>> 0) _abort(); else { + HEAP32[i45 + 16 >> 2] = i15; + HEAP32[i15 + 24 >> 2] = i45; + break; + } while (0); + i15 = HEAP32[i44 + 20 >> 2] | 0; + if (i15) if (i15 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); else { + HEAP32[i45 + 20 >> 2] = i15; + HEAP32[i15 + 24 >> 2] = i45; + break; + } + } while (0); + do if (i43 >>> 0 >= 16) { + HEAP32[i44 + 4 >> 2] = i5 | 3; + HEAP32[i8 + 4 >> 2] = i43 | 1; + HEAP32[i8 + i43 >> 2] = i43; + i3 = i43 >>> 3; + if (i43 >>> 0 < 256) { + i15 = 216 + (i3 << 1 << 2) | 0; + i7 = HEAP32[44] | 0; + i2 = 1 << i3; + if (i7 & i2) { + i3 = i15 + 8 | 0; + i4 = HEAP32[i3 >> 2] | 0; + if (i4 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); else { + i50 = i3; + i51 = i4; + } + } else { + HEAP32[44] = i7 | i2; + i50 = i15 + 8 | 0; + i51 = i15; + } + HEAP32[i50 >> 2] = i8; + HEAP32[i51 + 12 >> 2] = i8; + HEAP32[i8 + 8 >> 2] = i51; + HEAP32[i8 + 12 >> 2] = i15; + break; + } + i15 = i43 >>> 8; + if (i15) if (i43 >>> 0 > 16777215) i52 = 31; else { + i2 = (i15 + 1048320 | 0) >>> 16 & 8; + i7 = i15 << i2; + i15 = (i7 + 520192 | 0) >>> 16 & 4; + i4 = i7 << i15; + i7 = (i4 + 245760 | 0) >>> 16 & 2; + i3 = 14 - (i15 | i2 | i7) + (i4 << i7 >>> 15) | 0; + i52 = i43 >>> (i3 + 7 | 0) & 1 | i3 << 1; + } else i52 = 0; + i3 = 480 + (i52 << 2) | 0; + HEAP32[i8 + 28 >> 2] = i52; + i7 = i8 + 16 | 0; + HEAP32[i7 + 4 >> 2] = 0; + HEAP32[i7 >> 2] = 0; + i7 = HEAP32[45] | 0; + i4 = 1 << i52; + if (!(i7 & i4)) { + HEAP32[45] = i7 | i4; + HEAP32[i3 >> 2] = i8; + HEAP32[i8 + 24 >> 2] = i3; + HEAP32[i8 + 12 >> 2] = i8; + HEAP32[i8 + 8 >> 2] = i8; + break; + } + i4 = i43 << ((i52 | 0) == 31 ? 0 : 25 - (i52 >>> 1) | 0); + i7 = HEAP32[i3 >> 2] | 0; + while (1) { + if ((HEAP32[i7 + 4 >> 2] & -8 | 0) == (i43 | 0)) { + i53 = i7; + i36 = 148; + break; + } + i3 = i7 + 16 + (i4 >>> 31 << 2) | 0; + i2 = HEAP32[i3 >> 2] | 0; + if (!i2) { + i54 = i3; + i55 = i7; + i36 = 145; + break; + } else { + i4 = i4 << 1; + i7 = i2; + } + } + if ((i36 | 0) == 145) if (i54 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); else { + HEAP32[i54 >> 2] = i8; + HEAP32[i8 + 24 >> 2] = i55; + HEAP32[i8 + 12 >> 2] = i8; + HEAP32[i8 + 8 >> 2] = i8; + break; + } else if ((i36 | 0) == 148) { + i7 = i53 + 8 | 0; + i4 = HEAP32[i7 >> 2] | 0; + i2 = HEAP32[48] | 0; + if (i4 >>> 0 >= i2 >>> 0 & i53 >>> 0 >= i2 >>> 0) { + HEAP32[i4 + 12 >> 2] = i8; + HEAP32[i7 >> 2] = i8; + HEAP32[i8 + 8 >> 2] = i4; + HEAP32[i8 + 12 >> 2] = i53; + HEAP32[i8 + 24 >> 2] = 0; + break; + } else _abort(); + } + } else { + i4 = i43 + i5 | 0; + HEAP32[i44 + 4 >> 2] = i4 | 3; + i7 = i44 + i4 + 4 | 0; + HEAP32[i7 >> 2] = HEAP32[i7 >> 2] | 1; + } while (0); + i13 = i44 + 8 | 0; + return i13 | 0; + } else i31 = i5; + } else i31 = i5; + } else i31 = -1; while (0); + i44 = HEAP32[46] | 0; + if (i44 >>> 0 >= i31 >>> 0) { + i43 = i44 - i31 | 0; + i53 = HEAP32[49] | 0; + if (i43 >>> 0 > 15) { + i55 = i53 + i31 | 0; + HEAP32[49] = i55; + HEAP32[46] = i43; + HEAP32[i55 + 4 >> 2] = i43 | 1; + HEAP32[i55 + i43 >> 2] = i43; + HEAP32[i53 + 4 >> 2] = i31 | 3; + } else { + HEAP32[46] = 0; + HEAP32[49] = 0; + HEAP32[i53 + 4 >> 2] = i44 | 3; + i43 = i53 + i44 + 4 | 0; + HEAP32[i43 >> 2] = HEAP32[i43 >> 2] | 1; + } + i13 = i53 + 8 | 0; + return i13 | 0; + } + i53 = HEAP32[47] | 0; + if (i53 >>> 0 > i31 >>> 0) { + i43 = i53 - i31 | 0; + HEAP32[47] = i43; + i53 = HEAP32[50] | 0; + i44 = i53 + i31 | 0; + HEAP32[50] = i44; + HEAP32[i44 + 4 >> 2] = i43 | 1; + HEAP32[i53 + 4 >> 2] = i31 | 3; + i13 = i53 + 8 | 0; + return i13 | 0; + } + do if (!(HEAP32[162] | 0)) { + i53 = _sysconf(30) | 0; + if (!(i53 + -1 & i53)) { + HEAP32[164] = i53; + HEAP32[163] = i53; + HEAP32[165] = -1; + HEAP32[166] = -1; + HEAP32[167] = 0; + HEAP32[155] = 0; + HEAP32[162] = (_time(0) | 0) & -16 ^ 1431655768; + break; + } else _abort(); + } while (0); + i53 = i31 + 48 | 0; + i43 = HEAP32[164] | 0; + i44 = i31 + 47 | 0; + i55 = i43 + i44 | 0; + i54 = 0 - i43 | 0; + i43 = i55 & i54; + if (i43 >>> 0 <= i31 >>> 0) { + i13 = 0; + return i13 | 0; + } + i52 = HEAP32[154] | 0; + if ((i52 | 0) != 0 ? (i51 = HEAP32[152] | 0, i50 = i51 + i43 | 0, i50 >>> 0 <= i51 >>> 0 | i50 >>> 0 > i52 >>> 0) : 0) { + i13 = 0; + return i13 | 0; + } + L257 : do if (!(HEAP32[155] & 4)) { + i52 = HEAP32[50] | 0; + L259 : do if (i52) { + i50 = 624; + while (1) { + i51 = HEAP32[i50 >> 2] | 0; + if (i51 >>> 0 <= i52 >>> 0 ? (i45 = i50 + 4 | 0, (i51 + (HEAP32[i45 >> 2] | 0) | 0) >>> 0 > i52 >>> 0) : 0) { + i56 = i50; + i57 = i45; + break; + } + i50 = HEAP32[i50 + 8 >> 2] | 0; + if (!i50) { + i36 = 173; + break L259; + } + } + i50 = i55 - (HEAP32[47] | 0) & i54; + if (i50 >>> 0 < 2147483647) { + i45 = _sbrk(i50 | 0) | 0; + if ((i45 | 0) == ((HEAP32[i56 >> 2] | 0) + (HEAP32[i57 >> 2] | 0) | 0)) { + if ((i45 | 0) != (-1 | 0)) { + i58 = i45; + i59 = i50; + i36 = 193; + break L257; + } + } else { + i60 = i45; + i61 = i50; + i36 = 183; + } + } + } else i36 = 173; while (0); + do if ((i36 | 0) == 173 ? (i52 = _sbrk(0) | 0, (i52 | 0) != (-1 | 0)) : 0) { + i5 = i52; + i50 = HEAP32[163] | 0; + i45 = i50 + -1 | 0; + if (!(i45 & i5)) i62 = i43; else i62 = i43 - i5 + (i45 + i5 & 0 - i50) | 0; + i50 = HEAP32[152] | 0; + i5 = i50 + i62 | 0; + if (i62 >>> 0 > i31 >>> 0 & i62 >>> 0 < 2147483647) { + i45 = HEAP32[154] | 0; + if ((i45 | 0) != 0 ? i5 >>> 0 <= i50 >>> 0 | i5 >>> 0 > i45 >>> 0 : 0) break; + i45 = _sbrk(i62 | 0) | 0; + if ((i45 | 0) == (i52 | 0)) { + i58 = i52; + i59 = i62; + i36 = 193; + break L257; + } else { + i60 = i45; + i61 = i62; + i36 = 183; + } + } + } while (0); + L279 : do if ((i36 | 0) == 183) { + i45 = 0 - i61 | 0; + do if (i53 >>> 0 > i61 >>> 0 & (i61 >>> 0 < 2147483647 & (i60 | 0) != (-1 | 0)) ? (i52 = HEAP32[164] | 0, i5 = i44 - i61 + i52 & 0 - i52, i5 >>> 0 < 2147483647) : 0) if ((_sbrk(i5 | 0) | 0) == (-1 | 0)) { + _sbrk(i45 | 0) | 0; + break L279; + } else { + i63 = i5 + i61 | 0; + break; + } else i63 = i61; while (0); + if ((i60 | 0) != (-1 | 0)) { + i58 = i60; + i59 = i63; + i36 = 193; + break L257; + } + } while (0); + HEAP32[155] = HEAP32[155] | 4; + i36 = 190; + } else i36 = 190; while (0); + if ((((i36 | 0) == 190 ? i43 >>> 0 < 2147483647 : 0) ? (i63 = _sbrk(i43 | 0) | 0, i43 = _sbrk(0) | 0, i63 >>> 0 < i43 >>> 0 & ((i63 | 0) != (-1 | 0) & (i43 | 0) != (-1 | 0))) : 0) ? (i60 = i43 - i63 | 0, i60 >>> 0 > (i31 + 40 | 0) >>> 0) : 0) { + i58 = i63; + i59 = i60; + i36 = 193; + } + if ((i36 | 0) == 193) { + i60 = (HEAP32[152] | 0) + i59 | 0; + HEAP32[152] = i60; + if (i60 >>> 0 > (HEAP32[153] | 0) >>> 0) HEAP32[153] = i60; + i60 = HEAP32[50] | 0; + do if (i60) { + i63 = 624; + do { + i43 = HEAP32[i63 >> 2] | 0; + i61 = i63 + 4 | 0; + i44 = HEAP32[i61 >> 2] | 0; + if ((i58 | 0) == (i43 + i44 | 0)) { + i64 = i43; + i65 = i61; + i66 = i44; + i67 = i63; + i36 = 203; + break; + } + i63 = HEAP32[i63 + 8 >> 2] | 0; + } while ((i63 | 0) != 0); + if (((i36 | 0) == 203 ? (HEAP32[i67 + 12 >> 2] & 8 | 0) == 0 : 0) ? i60 >>> 0 < i58 >>> 0 & i60 >>> 0 >= i64 >>> 0 : 0) { + HEAP32[i65 >> 2] = i66 + i59; + i63 = i60 + 8 | 0; + i44 = (i63 & 7 | 0) == 0 ? 0 : 0 - i63 & 7; + i63 = i60 + i44 | 0; + i61 = i59 - i44 + (HEAP32[47] | 0) | 0; + HEAP32[50] = i63; + HEAP32[47] = i61; + HEAP32[i63 + 4 >> 2] = i61 | 1; + HEAP32[i63 + i61 + 4 >> 2] = 40; + HEAP32[51] = HEAP32[166]; + break; + } + i61 = HEAP32[48] | 0; + if (i58 >>> 0 < i61 >>> 0) { + HEAP32[48] = i58; + i68 = i58; + } else i68 = i61; + i61 = i58 + i59 | 0; + i63 = 624; + while (1) { + if ((HEAP32[i63 >> 2] | 0) == (i61 | 0)) { + i69 = i63; + i70 = i63; + i36 = 211; + break; + } + i63 = HEAP32[i63 + 8 >> 2] | 0; + if (!i63) { + i71 = 624; + break; + } + } + if ((i36 | 0) == 211) if (!(HEAP32[i70 + 12 >> 2] & 8)) { + HEAP32[i69 >> 2] = i58; + i63 = i70 + 4 | 0; + HEAP32[i63 >> 2] = (HEAP32[i63 >> 2] | 0) + i59; + i63 = i58 + 8 | 0; + i44 = i58 + ((i63 & 7 | 0) == 0 ? 0 : 0 - i63 & 7) | 0; + i63 = i61 + 8 | 0; + i43 = i61 + ((i63 & 7 | 0) == 0 ? 0 : 0 - i63 & 7) | 0; + i63 = i44 + i31 | 0; + i53 = i43 - i44 - i31 | 0; + HEAP32[i44 + 4 >> 2] = i31 | 3; + do if ((i43 | 0) != (i60 | 0)) { + if ((i43 | 0) == (HEAP32[49] | 0)) { + i62 = (HEAP32[46] | 0) + i53 | 0; + HEAP32[46] = i62; + HEAP32[49] = i63; + HEAP32[i63 + 4 >> 2] = i62 | 1; + HEAP32[i63 + i62 >> 2] = i62; + break; + } + i62 = HEAP32[i43 + 4 >> 2] | 0; + if ((i62 & 3 | 0) == 1) { + i57 = i62 & -8; + i56 = i62 >>> 3; + L331 : do if (i62 >>> 0 >= 256) { + i54 = HEAP32[i43 + 24 >> 2] | 0; + i55 = HEAP32[i43 + 12 >> 2] | 0; + do if ((i55 | 0) == (i43 | 0)) { + i45 = i43 + 16 | 0; + i5 = i45 + 4 | 0; + i52 = HEAP32[i5 >> 2] | 0; + if (!i52) { + i50 = HEAP32[i45 >> 2] | 0; + if (!i50) { + i72 = 0; + break; + } else { + i73 = i50; + i74 = i45; + } + } else { + i73 = i52; + i74 = i5; + } + while (1) { + i5 = i73 + 20 | 0; + i52 = HEAP32[i5 >> 2] | 0; + if (i52) { + i73 = i52; + i74 = i5; + continue; + } + i5 = i73 + 16 | 0; + i52 = HEAP32[i5 >> 2] | 0; + if (!i52) { + i75 = i73; + i76 = i74; + break; + } else { + i73 = i52; + i74 = i5; + } + } + if (i76 >>> 0 < i68 >>> 0) _abort(); else { + HEAP32[i76 >> 2] = 0; + i72 = i75; + break; + } + } else { + i5 = HEAP32[i43 + 8 >> 2] | 0; + if (i5 >>> 0 < i68 >>> 0) _abort(); + i52 = i5 + 12 | 0; + if ((HEAP32[i52 >> 2] | 0) != (i43 | 0)) _abort(); + i45 = i55 + 8 | 0; + if ((HEAP32[i45 >> 2] | 0) == (i43 | 0)) { + HEAP32[i52 >> 2] = i55; + HEAP32[i45 >> 2] = i5; + i72 = i55; + break; + } else _abort(); + } while (0); + if (!i54) break; + i55 = HEAP32[i43 + 28 >> 2] | 0; + i5 = 480 + (i55 << 2) | 0; + do if ((i43 | 0) != (HEAP32[i5 >> 2] | 0)) { + if (i54 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); + i45 = i54 + 16 | 0; + if ((HEAP32[i45 >> 2] | 0) == (i43 | 0)) HEAP32[i45 >> 2] = i72; else HEAP32[i54 + 20 >> 2] = i72; + if (!i72) break L331; + } else { + HEAP32[i5 >> 2] = i72; + if (i72) break; + HEAP32[45] = HEAP32[45] & ~(1 << i55); + break L331; + } while (0); + i55 = HEAP32[48] | 0; + if (i72 >>> 0 < i55 >>> 0) _abort(); + HEAP32[i72 + 24 >> 2] = i54; + i5 = i43 + 16 | 0; + i45 = HEAP32[i5 >> 2] | 0; + do if (i45) if (i45 >>> 0 < i55 >>> 0) _abort(); else { + HEAP32[i72 + 16 >> 2] = i45; + HEAP32[i45 + 24 >> 2] = i72; + break; + } while (0); + i45 = HEAP32[i5 + 4 >> 2] | 0; + if (!i45) break; + if (i45 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); else { + HEAP32[i72 + 20 >> 2] = i45; + HEAP32[i45 + 24 >> 2] = i72; + break; + } + } else { + i45 = HEAP32[i43 + 8 >> 2] | 0; + i55 = HEAP32[i43 + 12 >> 2] | 0; + i54 = 216 + (i56 << 1 << 2) | 0; + do if ((i45 | 0) != (i54 | 0)) { + if (i45 >>> 0 < i68 >>> 0) _abort(); + if ((HEAP32[i45 + 12 >> 2] | 0) == (i43 | 0)) break; + _abort(); + } while (0); + if ((i55 | 0) == (i45 | 0)) { + HEAP32[44] = HEAP32[44] & ~(1 << i56); + break; + } + do if ((i55 | 0) == (i54 | 0)) i77 = i55 + 8 | 0; else { + if (i55 >>> 0 < i68 >>> 0) _abort(); + i5 = i55 + 8 | 0; + if ((HEAP32[i5 >> 2] | 0) == (i43 | 0)) { + i77 = i5; + break; + } + _abort(); + } while (0); + HEAP32[i45 + 12 >> 2] = i55; + HEAP32[i77 >> 2] = i45; + } while (0); + i78 = i43 + i57 | 0; + i79 = i57 + i53 | 0; + } else { + i78 = i43; + i79 = i53; + } + i56 = i78 + 4 | 0; + HEAP32[i56 >> 2] = HEAP32[i56 >> 2] & -2; + HEAP32[i63 + 4 >> 2] = i79 | 1; + HEAP32[i63 + i79 >> 2] = i79; + i56 = i79 >>> 3; + if (i79 >>> 0 < 256) { + i62 = 216 + (i56 << 1 << 2) | 0; + i54 = HEAP32[44] | 0; + i5 = 1 << i56; + do if (!(i54 & i5)) { + HEAP32[44] = i54 | i5; + i80 = i62 + 8 | 0; + i81 = i62; + } else { + i56 = i62 + 8 | 0; + i52 = HEAP32[i56 >> 2] | 0; + if (i52 >>> 0 >= (HEAP32[48] | 0) >>> 0) { + i80 = i56; + i81 = i52; + break; + } + _abort(); + } while (0); + HEAP32[i80 >> 2] = i63; + HEAP32[i81 + 12 >> 2] = i63; + HEAP32[i63 + 8 >> 2] = i81; + HEAP32[i63 + 12 >> 2] = i62; + break; + } + i5 = i79 >>> 8; + do if (!i5) i82 = 0; else { + if (i79 >>> 0 > 16777215) { + i82 = 31; + break; + } + i54 = (i5 + 1048320 | 0) >>> 16 & 8; + i57 = i5 << i54; + i52 = (i57 + 520192 | 0) >>> 16 & 4; + i56 = i57 << i52; + i57 = (i56 + 245760 | 0) >>> 16 & 2; + i50 = 14 - (i52 | i54 | i57) + (i56 << i57 >>> 15) | 0; + i82 = i79 >>> (i50 + 7 | 0) & 1 | i50 << 1; + } while (0); + i5 = 480 + (i82 << 2) | 0; + HEAP32[i63 + 28 >> 2] = i82; + i62 = i63 + 16 | 0; + HEAP32[i62 + 4 >> 2] = 0; + HEAP32[i62 >> 2] = 0; + i62 = HEAP32[45] | 0; + i50 = 1 << i82; + if (!(i62 & i50)) { + HEAP32[45] = i62 | i50; + HEAP32[i5 >> 2] = i63; + HEAP32[i63 + 24 >> 2] = i5; + HEAP32[i63 + 12 >> 2] = i63; + HEAP32[i63 + 8 >> 2] = i63; + break; + } + i50 = i79 << ((i82 | 0) == 31 ? 0 : 25 - (i82 >>> 1) | 0); + i62 = HEAP32[i5 >> 2] | 0; + while (1) { + if ((HEAP32[i62 + 4 >> 2] & -8 | 0) == (i79 | 0)) { + i83 = i62; + i36 = 281; + break; + } + i5 = i62 + 16 + (i50 >>> 31 << 2) | 0; + i57 = HEAP32[i5 >> 2] | 0; + if (!i57) { + i84 = i5; + i85 = i62; + i36 = 278; + break; + } else { + i50 = i50 << 1; + i62 = i57; + } + } + if ((i36 | 0) == 278) if (i84 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); else { + HEAP32[i84 >> 2] = i63; + HEAP32[i63 + 24 >> 2] = i85; + HEAP32[i63 + 12 >> 2] = i63; + HEAP32[i63 + 8 >> 2] = i63; + break; + } else if ((i36 | 0) == 281) { + i62 = i83 + 8 | 0; + i50 = HEAP32[i62 >> 2] | 0; + i57 = HEAP32[48] | 0; + if (i50 >>> 0 >= i57 >>> 0 & i83 >>> 0 >= i57 >>> 0) { + HEAP32[i50 + 12 >> 2] = i63; + HEAP32[i62 >> 2] = i63; + HEAP32[i63 + 8 >> 2] = i50; + HEAP32[i63 + 12 >> 2] = i83; + HEAP32[i63 + 24 >> 2] = 0; + break; + } else _abort(); + } + } else { + i50 = (HEAP32[47] | 0) + i53 | 0; + HEAP32[47] = i50; + HEAP32[50] = i63; + HEAP32[i63 + 4 >> 2] = i50 | 1; + } while (0); + i13 = i44 + 8 | 0; + return i13 | 0; + } else i71 = 624; + while (1) { + i63 = HEAP32[i71 >> 2] | 0; + if (i63 >>> 0 <= i60 >>> 0 ? (i53 = i63 + (HEAP32[i71 + 4 >> 2] | 0) | 0, i53 >>> 0 > i60 >>> 0) : 0) { + i86 = i53; + break; + } + i71 = HEAP32[i71 + 8 >> 2] | 0; + } + i44 = i86 + -47 | 0; + i53 = i44 + 8 | 0; + i63 = i44 + ((i53 & 7 | 0) == 0 ? 0 : 0 - i53 & 7) | 0; + i53 = i60 + 16 | 0; + i44 = i63 >>> 0 < i53 >>> 0 ? i60 : i63; + i63 = i44 + 8 | 0; + i43 = i58 + 8 | 0; + i61 = (i43 & 7 | 0) == 0 ? 0 : 0 - i43 & 7; + i43 = i58 + i61 | 0; + i50 = i59 + -40 - i61 | 0; + HEAP32[50] = i43; + HEAP32[47] = i50; + HEAP32[i43 + 4 >> 2] = i50 | 1; + HEAP32[i43 + i50 + 4 >> 2] = 40; + HEAP32[51] = HEAP32[166]; + i50 = i44 + 4 | 0; + HEAP32[i50 >> 2] = 27; + HEAP32[i63 >> 2] = HEAP32[156]; + HEAP32[i63 + 4 >> 2] = HEAP32[157]; + HEAP32[i63 + 8 >> 2] = HEAP32[158]; + HEAP32[i63 + 12 >> 2] = HEAP32[159]; + HEAP32[156] = i58; + HEAP32[157] = i59; + HEAP32[159] = 0; + HEAP32[158] = i63; + i63 = i44 + 24 | 0; + do { + i63 = i63 + 4 | 0; + HEAP32[i63 >> 2] = 7; + } while ((i63 + 4 | 0) >>> 0 < i86 >>> 0); + if ((i44 | 0) != (i60 | 0)) { + i63 = i44 - i60 | 0; + HEAP32[i50 >> 2] = HEAP32[i50 >> 2] & -2; + HEAP32[i60 + 4 >> 2] = i63 | 1; + HEAP32[i44 >> 2] = i63; + i43 = i63 >>> 3; + if (i63 >>> 0 < 256) { + i61 = 216 + (i43 << 1 << 2) | 0; + i62 = HEAP32[44] | 0; + i57 = 1 << i43; + if (i62 & i57) { + i43 = i61 + 8 | 0; + i5 = HEAP32[i43 >> 2] | 0; + if (i5 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); else { + i87 = i43; + i88 = i5; + } + } else { + HEAP32[44] = i62 | i57; + i87 = i61 + 8 | 0; + i88 = i61; + } + HEAP32[i87 >> 2] = i60; + HEAP32[i88 + 12 >> 2] = i60; + HEAP32[i60 + 8 >> 2] = i88; + HEAP32[i60 + 12 >> 2] = i61; + break; + } + i61 = i63 >>> 8; + if (i61) if (i63 >>> 0 > 16777215) i89 = 31; else { + i57 = (i61 + 1048320 | 0) >>> 16 & 8; + i62 = i61 << i57; + i61 = (i62 + 520192 | 0) >>> 16 & 4; + i5 = i62 << i61; + i62 = (i5 + 245760 | 0) >>> 16 & 2; + i43 = 14 - (i61 | i57 | i62) + (i5 << i62 >>> 15) | 0; + i89 = i63 >>> (i43 + 7 | 0) & 1 | i43 << 1; + } else i89 = 0; + i43 = 480 + (i89 << 2) | 0; + HEAP32[i60 + 28 >> 2] = i89; + HEAP32[i60 + 20 >> 2] = 0; + HEAP32[i53 >> 2] = 0; + i62 = HEAP32[45] | 0; + i5 = 1 << i89; + if (!(i62 & i5)) { + HEAP32[45] = i62 | i5; + HEAP32[i43 >> 2] = i60; + HEAP32[i60 + 24 >> 2] = i43; + HEAP32[i60 + 12 >> 2] = i60; + HEAP32[i60 + 8 >> 2] = i60; + break; + } + i5 = i63 << ((i89 | 0) == 31 ? 0 : 25 - (i89 >>> 1) | 0); + i62 = HEAP32[i43 >> 2] | 0; + while (1) { + if ((HEAP32[i62 + 4 >> 2] & -8 | 0) == (i63 | 0)) { + i90 = i62; + i36 = 307; + break; + } + i43 = i62 + 16 + (i5 >>> 31 << 2) | 0; + i57 = HEAP32[i43 >> 2] | 0; + if (!i57) { + i91 = i43; + i92 = i62; + i36 = 304; + break; + } else { + i5 = i5 << 1; + i62 = i57; + } + } + if ((i36 | 0) == 304) if (i91 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); else { + HEAP32[i91 >> 2] = i60; + HEAP32[i60 + 24 >> 2] = i92; + HEAP32[i60 + 12 >> 2] = i60; + HEAP32[i60 + 8 >> 2] = i60; + break; + } else if ((i36 | 0) == 307) { + i62 = i90 + 8 | 0; + i5 = HEAP32[i62 >> 2] | 0; + i63 = HEAP32[48] | 0; + if (i5 >>> 0 >= i63 >>> 0 & i90 >>> 0 >= i63 >>> 0) { + HEAP32[i5 + 12 >> 2] = i60; + HEAP32[i62 >> 2] = i60; + HEAP32[i60 + 8 >> 2] = i5; + HEAP32[i60 + 12 >> 2] = i90; + HEAP32[i60 + 24 >> 2] = 0; + break; + } else _abort(); + } + } + } else { + i5 = HEAP32[48] | 0; + if ((i5 | 0) == 0 | i58 >>> 0 < i5 >>> 0) HEAP32[48] = i58; + HEAP32[156] = i58; + HEAP32[157] = i59; + HEAP32[159] = 0; + HEAP32[53] = HEAP32[162]; + HEAP32[52] = -1; + i5 = 0; + do { + i62 = 216 + (i5 << 1 << 2) | 0; + HEAP32[i62 + 12 >> 2] = i62; + HEAP32[i62 + 8 >> 2] = i62; + i5 = i5 + 1 | 0; + } while ((i5 | 0) != 32); + i5 = i58 + 8 | 0; + i62 = (i5 & 7 | 0) == 0 ? 0 : 0 - i5 & 7; + i5 = i58 + i62 | 0; + i63 = i59 + -40 - i62 | 0; + HEAP32[50] = i5; + HEAP32[47] = i63; + HEAP32[i5 + 4 >> 2] = i63 | 1; + HEAP32[i5 + i63 + 4 >> 2] = 40; + HEAP32[51] = HEAP32[166]; + } while (0); + i59 = HEAP32[47] | 0; + if (i59 >>> 0 > i31 >>> 0) { + i58 = i59 - i31 | 0; + HEAP32[47] = i58; + i59 = HEAP32[50] | 0; + i60 = i59 + i31 | 0; + HEAP32[50] = i60; + HEAP32[i60 + 4 >> 2] = i58 | 1; + HEAP32[i59 + 4 >> 2] = i31 | 3; + i13 = i59 + 8 | 0; + return i13 | 0; + } + } + HEAP32[(___errno_location() | 0) >> 2] = 12; + i13 = 0; + return i13 | 0; +} + +function _free(i1) { + i1 = i1 | 0; + var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0, i37 = 0; + if (!i1) return; + i2 = i1 + -8 | 0; + i3 = HEAP32[48] | 0; + if (i2 >>> 0 < i3 >>> 0) _abort(); + i4 = HEAP32[i1 + -4 >> 2] | 0; + i1 = i4 & 3; + if ((i1 | 0) == 1) _abort(); + i5 = i4 & -8; + i6 = i2 + i5 | 0; + do if (!(i4 & 1)) { + i7 = HEAP32[i2 >> 2] | 0; + if (!i1) return; + i8 = i2 + (0 - i7) | 0; + i9 = i7 + i5 | 0; + if (i8 >>> 0 < i3 >>> 0) _abort(); + if ((i8 | 0) == (HEAP32[49] | 0)) { + i10 = i6 + 4 | 0; + i11 = HEAP32[i10 >> 2] | 0; + if ((i11 & 3 | 0) != 3) { + i12 = i8; + i13 = i9; + break; + } + HEAP32[46] = i9; + HEAP32[i10 >> 2] = i11 & -2; + HEAP32[i8 + 4 >> 2] = i9 | 1; + HEAP32[i8 + i9 >> 2] = i9; + return; + } + i11 = i7 >>> 3; + if (i7 >>> 0 < 256) { + i7 = HEAP32[i8 + 8 >> 2] | 0; + i10 = HEAP32[i8 + 12 >> 2] | 0; + i14 = 216 + (i11 << 1 << 2) | 0; + if ((i7 | 0) != (i14 | 0)) { + if (i7 >>> 0 < i3 >>> 0) _abort(); + if ((HEAP32[i7 + 12 >> 2] | 0) != (i8 | 0)) _abort(); + } + if ((i10 | 0) == (i7 | 0)) { + HEAP32[44] = HEAP32[44] & ~(1 << i11); + i12 = i8; + i13 = i9; + break; + } + if ((i10 | 0) != (i14 | 0)) { + if (i10 >>> 0 < i3 >>> 0) _abort(); + i14 = i10 + 8 | 0; + if ((HEAP32[i14 >> 2] | 0) == (i8 | 0)) i15 = i14; else _abort(); + } else i15 = i10 + 8 | 0; + HEAP32[i7 + 12 >> 2] = i10; + HEAP32[i15 >> 2] = i7; + i12 = i8; + i13 = i9; + break; + } + i7 = HEAP32[i8 + 24 >> 2] | 0; + i10 = HEAP32[i8 + 12 >> 2] | 0; + do if ((i10 | 0) == (i8 | 0)) { + i14 = i8 + 16 | 0; + i11 = i14 + 4 | 0; + i16 = HEAP32[i11 >> 2] | 0; + if (!i16) { + i17 = HEAP32[i14 >> 2] | 0; + if (!i17) { + i18 = 0; + break; + } else { + i19 = i17; + i20 = i14; + } + } else { + i19 = i16; + i20 = i11; + } + while (1) { + i11 = i19 + 20 | 0; + i16 = HEAP32[i11 >> 2] | 0; + if (i16) { + i19 = i16; + i20 = i11; + continue; + } + i11 = i19 + 16 | 0; + i16 = HEAP32[i11 >> 2] | 0; + if (!i16) { + i21 = i19; + i22 = i20; + break; + } else { + i19 = i16; + i20 = i11; + } + } + if (i22 >>> 0 < i3 >>> 0) _abort(); else { + HEAP32[i22 >> 2] = 0; + i18 = i21; + break; + } + } else { + i11 = HEAP32[i8 + 8 >> 2] | 0; + if (i11 >>> 0 < i3 >>> 0) _abort(); + i16 = i11 + 12 | 0; + if ((HEAP32[i16 >> 2] | 0) != (i8 | 0)) _abort(); + i14 = i10 + 8 | 0; + if ((HEAP32[i14 >> 2] | 0) == (i8 | 0)) { + HEAP32[i16 >> 2] = i10; + HEAP32[i14 >> 2] = i11; + i18 = i10; + break; + } else _abort(); + } while (0); + if (i7) { + i10 = HEAP32[i8 + 28 >> 2] | 0; + i11 = 480 + (i10 << 2) | 0; + if ((i8 | 0) == (HEAP32[i11 >> 2] | 0)) { + HEAP32[i11 >> 2] = i18; + if (!i18) { + HEAP32[45] = HEAP32[45] & ~(1 << i10); + i12 = i8; + i13 = i9; + break; + } + } else { + if (i7 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); + i10 = i7 + 16 | 0; + if ((HEAP32[i10 >> 2] | 0) == (i8 | 0)) HEAP32[i10 >> 2] = i18; else HEAP32[i7 + 20 >> 2] = i18; + if (!i18) { + i12 = i8; + i13 = i9; + break; + } + } + i10 = HEAP32[48] | 0; + if (i18 >>> 0 < i10 >>> 0) _abort(); + HEAP32[i18 + 24 >> 2] = i7; + i11 = i8 + 16 | 0; + i14 = HEAP32[i11 >> 2] | 0; + do if (i14) if (i14 >>> 0 < i10 >>> 0) _abort(); else { + HEAP32[i18 + 16 >> 2] = i14; + HEAP32[i14 + 24 >> 2] = i18; + break; + } while (0); + i14 = HEAP32[i11 + 4 >> 2] | 0; + if (i14) if (i14 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); else { + HEAP32[i18 + 20 >> 2] = i14; + HEAP32[i14 + 24 >> 2] = i18; + i12 = i8; + i13 = i9; + break; + } else { + i12 = i8; + i13 = i9; + } + } else { + i12 = i8; + i13 = i9; + } + } else { + i12 = i2; + i13 = i5; + } while (0); + if (i12 >>> 0 >= i6 >>> 0) _abort(); + i5 = i6 + 4 | 0; + i2 = HEAP32[i5 >> 2] | 0; + if (!(i2 & 1)) _abort(); + if (!(i2 & 2)) { + if ((i6 | 0) == (HEAP32[50] | 0)) { + i18 = (HEAP32[47] | 0) + i13 | 0; + HEAP32[47] = i18; + HEAP32[50] = i12; + HEAP32[i12 + 4 >> 2] = i18 | 1; + if ((i12 | 0) != (HEAP32[49] | 0)) return; + HEAP32[49] = 0; + HEAP32[46] = 0; + return; + } + if ((i6 | 0) == (HEAP32[49] | 0)) { + i18 = (HEAP32[46] | 0) + i13 | 0; + HEAP32[46] = i18; + HEAP32[49] = i12; + HEAP32[i12 + 4 >> 2] = i18 | 1; + HEAP32[i12 + i18 >> 2] = i18; + return; + } + i18 = (i2 & -8) + i13 | 0; + i3 = i2 >>> 3; + do if (i2 >>> 0 >= 256) { + i21 = HEAP32[i6 + 24 >> 2] | 0; + i22 = HEAP32[i6 + 12 >> 2] | 0; + do if ((i22 | 0) == (i6 | 0)) { + i20 = i6 + 16 | 0; + i19 = i20 + 4 | 0; + i15 = HEAP32[i19 >> 2] | 0; + if (!i15) { + i1 = HEAP32[i20 >> 2] | 0; + if (!i1) { + i23 = 0; + break; + } else { + i24 = i1; + i25 = i20; + } + } else { + i24 = i15; + i25 = i19; + } + while (1) { + i19 = i24 + 20 | 0; + i15 = HEAP32[i19 >> 2] | 0; + if (i15) { + i24 = i15; + i25 = i19; + continue; + } + i19 = i24 + 16 | 0; + i15 = HEAP32[i19 >> 2] | 0; + if (!i15) { + i26 = i24; + i27 = i25; + break; + } else { + i24 = i15; + i25 = i19; + } + } + if (i27 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); else { + HEAP32[i27 >> 2] = 0; + i23 = i26; + break; + } + } else { + i19 = HEAP32[i6 + 8 >> 2] | 0; + if (i19 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); + i15 = i19 + 12 | 0; + if ((HEAP32[i15 >> 2] | 0) != (i6 | 0)) _abort(); + i20 = i22 + 8 | 0; + if ((HEAP32[i20 >> 2] | 0) == (i6 | 0)) { + HEAP32[i15 >> 2] = i22; + HEAP32[i20 >> 2] = i19; + i23 = i22; + break; + } else _abort(); + } while (0); + if (i21) { + i22 = HEAP32[i6 + 28 >> 2] | 0; + i9 = 480 + (i22 << 2) | 0; + if ((i6 | 0) == (HEAP32[i9 >> 2] | 0)) { + HEAP32[i9 >> 2] = i23; + if (!i23) { + HEAP32[45] = HEAP32[45] & ~(1 << i22); + break; + } + } else { + if (i21 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); + i22 = i21 + 16 | 0; + if ((HEAP32[i22 >> 2] | 0) == (i6 | 0)) HEAP32[i22 >> 2] = i23; else HEAP32[i21 + 20 >> 2] = i23; + if (!i23) break; + } + i22 = HEAP32[48] | 0; + if (i23 >>> 0 < i22 >>> 0) _abort(); + HEAP32[i23 + 24 >> 2] = i21; + i9 = i6 + 16 | 0; + i8 = HEAP32[i9 >> 2] | 0; + do if (i8) if (i8 >>> 0 < i22 >>> 0) _abort(); else { + HEAP32[i23 + 16 >> 2] = i8; + HEAP32[i8 + 24 >> 2] = i23; + break; + } while (0); + i8 = HEAP32[i9 + 4 >> 2] | 0; + if (i8) if (i8 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); else { + HEAP32[i23 + 20 >> 2] = i8; + HEAP32[i8 + 24 >> 2] = i23; + break; + } + } + } else { + i8 = HEAP32[i6 + 8 >> 2] | 0; + i22 = HEAP32[i6 + 12 >> 2] | 0; + i21 = 216 + (i3 << 1 << 2) | 0; + if ((i8 | 0) != (i21 | 0)) { + if (i8 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); + if ((HEAP32[i8 + 12 >> 2] | 0) != (i6 | 0)) _abort(); + } + if ((i22 | 0) == (i8 | 0)) { + HEAP32[44] = HEAP32[44] & ~(1 << i3); + break; + } + if ((i22 | 0) != (i21 | 0)) { + if (i22 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); + i21 = i22 + 8 | 0; + if ((HEAP32[i21 >> 2] | 0) == (i6 | 0)) i28 = i21; else _abort(); + } else i28 = i22 + 8 | 0; + HEAP32[i8 + 12 >> 2] = i22; + HEAP32[i28 >> 2] = i8; + } while (0); + HEAP32[i12 + 4 >> 2] = i18 | 1; + HEAP32[i12 + i18 >> 2] = i18; + if ((i12 | 0) == (HEAP32[49] | 0)) { + HEAP32[46] = i18; + return; + } else i29 = i18; + } else { + HEAP32[i5 >> 2] = i2 & -2; + HEAP32[i12 + 4 >> 2] = i13 | 1; + HEAP32[i12 + i13 >> 2] = i13; + i29 = i13; + } + i13 = i29 >>> 3; + if (i29 >>> 0 < 256) { + i2 = 216 + (i13 << 1 << 2) | 0; + i5 = HEAP32[44] | 0; + i18 = 1 << i13; + if (i5 & i18) { + i13 = i2 + 8 | 0; + i28 = HEAP32[i13 >> 2] | 0; + if (i28 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); else { + i30 = i13; + i31 = i28; + } + } else { + HEAP32[44] = i5 | i18; + i30 = i2 + 8 | 0; + i31 = i2; + } + HEAP32[i30 >> 2] = i12; + HEAP32[i31 + 12 >> 2] = i12; + HEAP32[i12 + 8 >> 2] = i31; + HEAP32[i12 + 12 >> 2] = i2; + return; + } + i2 = i29 >>> 8; + if (i2) if (i29 >>> 0 > 16777215) i32 = 31; else { + i31 = (i2 + 1048320 | 0) >>> 16 & 8; + i30 = i2 << i31; + i2 = (i30 + 520192 | 0) >>> 16 & 4; + i18 = i30 << i2; + i30 = (i18 + 245760 | 0) >>> 16 & 2; + i5 = 14 - (i2 | i31 | i30) + (i18 << i30 >>> 15) | 0; + i32 = i29 >>> (i5 + 7 | 0) & 1 | i5 << 1; + } else i32 = 0; + i5 = 480 + (i32 << 2) | 0; + HEAP32[i12 + 28 >> 2] = i32; + HEAP32[i12 + 20 >> 2] = 0; + HEAP32[i12 + 16 >> 2] = 0; + i30 = HEAP32[45] | 0; + i18 = 1 << i32; + do if (i30 & i18) { + i31 = i29 << ((i32 | 0) == 31 ? 0 : 25 - (i32 >>> 1) | 0); + i2 = HEAP32[i5 >> 2] | 0; + while (1) { + if ((HEAP32[i2 + 4 >> 2] & -8 | 0) == (i29 | 0)) { + i33 = i2; + i34 = 130; + break; + } + i28 = i2 + 16 + (i31 >>> 31 << 2) | 0; + i13 = HEAP32[i28 >> 2] | 0; + if (!i13) { + i35 = i28; + i36 = i2; + i34 = 127; + break; + } else { + i31 = i31 << 1; + i2 = i13; + } + } + if ((i34 | 0) == 127) if (i35 >>> 0 < (HEAP32[48] | 0) >>> 0) _abort(); else { + HEAP32[i35 >> 2] = i12; + HEAP32[i12 + 24 >> 2] = i36; + HEAP32[i12 + 12 >> 2] = i12; + HEAP32[i12 + 8 >> 2] = i12; + break; + } else if ((i34 | 0) == 130) { + i2 = i33 + 8 | 0; + i31 = HEAP32[i2 >> 2] | 0; + i9 = HEAP32[48] | 0; + if (i31 >>> 0 >= i9 >>> 0 & i33 >>> 0 >= i9 >>> 0) { + HEAP32[i31 + 12 >> 2] = i12; + HEAP32[i2 >> 2] = i12; + HEAP32[i12 + 8 >> 2] = i31; + HEAP32[i12 + 12 >> 2] = i33; + HEAP32[i12 + 24 >> 2] = 0; + break; + } else _abort(); + } + } else { + HEAP32[45] = i30 | i18; + HEAP32[i5 >> 2] = i12; + HEAP32[i12 + 24 >> 2] = i5; + HEAP32[i12 + 12 >> 2] = i12; + HEAP32[i12 + 8 >> 2] = i12; + } while (0); + i12 = (HEAP32[52] | 0) + -1 | 0; + HEAP32[52] = i12; + if (!i12) i37 = 632; else return; + while (1) { + i12 = HEAP32[i37 >> 2] | 0; + if (!i12) break; else i37 = i12 + 8 | 0; + } + HEAP32[52] = -1; + return; +} + +function ___stdio_write(i1, i2, i3) { + i1 = i1 | 0; + i2 = i2 | 0; + i3 = i3 | 0; + var i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0; + i4 = STACKTOP; + STACKTOP = STACKTOP + 48 | 0; + i5 = i4 + 16 | 0; + i6 = i4; + i7 = i4 + 32 | 0; + i8 = i1 + 28 | 0; + i9 = HEAP32[i8 >> 2] | 0; + HEAP32[i7 >> 2] = i9; + i10 = i1 + 20 | 0; + i11 = (HEAP32[i10 >> 2] | 0) - i9 | 0; + HEAP32[i7 + 4 >> 2] = i11; + HEAP32[i7 + 8 >> 2] = i2; + HEAP32[i7 + 12 >> 2] = i3; + i2 = i1 + 60 | 0; + i9 = i1 + 44 | 0; + i12 = i7; + i7 = 2; + i13 = i11 + i3 | 0; + while (1) { + if (!(HEAP32[2] | 0)) { + HEAP32[i5 >> 2] = HEAP32[i2 >> 2]; + HEAP32[i5 + 4 >> 2] = i12; + HEAP32[i5 + 8 >> 2] = i7; + i14 = ___syscall_ret(___syscall146(146, i5 | 0) | 0) | 0; + } else { + _pthread_cleanup_push(4, i1 | 0); + HEAP32[i6 >> 2] = HEAP32[i2 >> 2]; + HEAP32[i6 + 4 >> 2] = i12; + HEAP32[i6 + 8 >> 2] = i7; + i11 = ___syscall_ret(___syscall146(146, i6 | 0) | 0) | 0; + _pthread_cleanup_pop(0); + i14 = i11; + } + if ((i13 | 0) == (i14 | 0)) { + i15 = 6; + break; + } + if ((i14 | 0) < 0) { + i16 = i12; + i17 = i7; + i15 = 8; + break; + } + i11 = i13 - i14 | 0; + i18 = HEAP32[i12 + 4 >> 2] | 0; + if (i14 >>> 0 <= i18 >>> 0) if ((i7 | 0) == 2) { + HEAP32[i8 >> 2] = (HEAP32[i8 >> 2] | 0) + i14; + i19 = i18; + i20 = i14; + i21 = i12; + i22 = 2; + } else { + i19 = i18; + i20 = i14; + i21 = i12; + i22 = i7; + } else { + i23 = HEAP32[i9 >> 2] | 0; + HEAP32[i8 >> 2] = i23; + HEAP32[i10 >> 2] = i23; + i19 = HEAP32[i12 + 12 >> 2] | 0; + i20 = i14 - i18 | 0; + i21 = i12 + 8 | 0; + i22 = i7 + -1 | 0; + } + HEAP32[i21 >> 2] = (HEAP32[i21 >> 2] | 0) + i20; + HEAP32[i21 + 4 >> 2] = i19 - i20; + i12 = i21; + i7 = i22; + i13 = i11; + } + if ((i15 | 0) == 6) { + i13 = HEAP32[i9 >> 2] | 0; + HEAP32[i1 + 16 >> 2] = i13 + (HEAP32[i1 + 48 >> 2] | 0); + i9 = i13; + HEAP32[i8 >> 2] = i9; + HEAP32[i10 >> 2] = i9; + i24 = i3; + } else if ((i15 | 0) == 8) { + HEAP32[i1 + 16 >> 2] = 0; + HEAP32[i8 >> 2] = 0; + HEAP32[i10 >> 2] = 0; + HEAP32[i1 >> 2] = HEAP32[i1 >> 2] | 32; + if ((i17 | 0) == 2) i24 = 0; else i24 = i3 - (HEAP32[i16 + 4 >> 2] | 0) | 0; + } + STACKTOP = i4; + return i24 | 0; +} + +function ___fwritex(i1, i2, i3) { + i1 = i1 | 0; + i2 = i2 | 0; + i3 = i3 | 0; + var i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0; + i4 = i3 + 16 | 0; + i5 = HEAP32[i4 >> 2] | 0; + if (!i5) if (!(___towrite(i3) | 0)) { + i6 = HEAP32[i4 >> 2] | 0; + i7 = 5; + } else i8 = 0; else { + i6 = i5; + i7 = 5; + } + L5 : do if ((i7 | 0) == 5) { + i5 = i3 + 20 | 0; + i4 = HEAP32[i5 >> 2] | 0; + i9 = i4; + if ((i6 - i4 | 0) >>> 0 < i2 >>> 0) { + i8 = FUNCTION_TABLE_iiii[HEAP32[i3 + 36 >> 2] & 7](i3, i1, i2) | 0; + break; + } + L10 : do if ((HEAP8[i3 + 75 >> 0] | 0) > -1) { + i4 = i2; + while (1) { + if (!i4) { + i10 = i2; + i11 = i1; + i12 = i9; + i13 = 0; + break L10; + } + i14 = i4 + -1 | 0; + if ((HEAP8[i1 + i14 >> 0] | 0) == 10) { + i15 = i4; + break; + } else i4 = i14; + } + if ((FUNCTION_TABLE_iiii[HEAP32[i3 + 36 >> 2] & 7](i3, i1, i15) | 0) >>> 0 < i15 >>> 0) { + i8 = i15; + break L5; + } + i10 = i2 - i15 | 0; + i11 = i1 + i15 | 0; + i12 = HEAP32[i5 >> 2] | 0; + i13 = i15; + } else { + i10 = i2; + i11 = i1; + i12 = i9; + i13 = 0; + } while (0); + _memcpy(i12 | 0, i11 | 0, i10 | 0) | 0; + HEAP32[i5 >> 2] = (HEAP32[i5 >> 2] | 0) + i10; + i8 = i13 + i10 | 0; + } while (0); + return i8 | 0; +} + +function _fflush(i1) { + i1 = i1 | 0; + var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0; + do if (i1) { + if ((HEAP32[i1 + 76 >> 2] | 0) <= -1) { + i2 = ___fflush_unlocked(i1) | 0; + break; + } + i3 = (___lockfile(i1) | 0) == 0; + i4 = ___fflush_unlocked(i1) | 0; + if (i3) i2 = i4; else { + ___unlockfile(i1); + i2 = i4; + } + } else { + if (!(HEAP32[14] | 0)) i5 = 0; else i5 = _fflush(HEAP32[14] | 0) | 0; + ___lock(36); + i4 = HEAP32[8] | 0; + if (!i4) i6 = i5; else { + i3 = i4; + i4 = i5; + while (1) { + if ((HEAP32[i3 + 76 >> 2] | 0) > -1) i7 = ___lockfile(i3) | 0; else i7 = 0; + if ((HEAP32[i3 + 20 >> 2] | 0) >>> 0 > (HEAP32[i3 + 28 >> 2] | 0) >>> 0) i8 = ___fflush_unlocked(i3) | 0 | i4; else i8 = i4; + if (i7) ___unlockfile(i3); + i3 = HEAP32[i3 + 56 >> 2] | 0; + if (!i3) { + i6 = i8; + break; + } else i4 = i8; + } + } + ___unlock(36); + i2 = i6; + } while (0); + return i2 | 0; +} + +function _strlen(i1) { + i1 = i1 | 0; + var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0; + i2 = i1; + L1 : do if (!(i2 & 3)) { + i3 = i1; + i4 = 4; + } else { + i5 = i1; + i6 = i2; + while (1) { + if (!(HEAP8[i5 >> 0] | 0)) { + i7 = i6; + break L1; + } + i8 = i5 + 1 | 0; + i6 = i8; + if (!(i6 & 3)) { + i3 = i8; + i4 = 4; + break; + } else i5 = i8; + } + } while (0); + if ((i4 | 0) == 4) { + i4 = i3; + while (1) { + i3 = HEAP32[i4 >> 2] | 0; + if (!((i3 & -2139062144 ^ -2139062144) & i3 + -16843009)) i4 = i4 + 4 | 0; else { + i9 = i3; + i10 = i4; + break; + } + } + if (!((i9 & 255) << 24 >> 24)) i11 = i10; else { + i9 = i10; + while (1) { + i10 = i9 + 1 | 0; + if (!(HEAP8[i10 >> 0] | 0)) { + i11 = i10; + break; + } else i9 = i10; + } + } + i7 = i11; + } + return i7 - i2 | 0; +} + +function ___overflow(i1, i2) { + i1 = i1 | 0; + i2 = i2 | 0; + var i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0; + i3 = STACKTOP; + STACKTOP = STACKTOP + 16 | 0; + i4 = i3; + i5 = i2 & 255; + HEAP8[i4 >> 0] = i5; + i6 = i1 + 16 | 0; + i7 = HEAP32[i6 >> 2] | 0; + if (!i7) if (!(___towrite(i1) | 0)) { + i8 = HEAP32[i6 >> 2] | 0; + i9 = 4; + } else i10 = -1; else { + i8 = i7; + i9 = 4; + } + do if ((i9 | 0) == 4) { + i7 = i1 + 20 | 0; + i6 = HEAP32[i7 >> 2] | 0; + if (i6 >>> 0 < i8 >>> 0 ? (i11 = i2 & 255, (i11 | 0) != (HEAP8[i1 + 75 >> 0] | 0)) : 0) { + HEAP32[i7 >> 2] = i6 + 1; + HEAP8[i6 >> 0] = i5; + i10 = i11; + break; + } + if ((FUNCTION_TABLE_iiii[HEAP32[i1 + 36 >> 2] & 7](i1, i4, 1) | 0) == 1) i10 = HEAPU8[i4 >> 0] | 0; else i10 = -1; + } while (0); + STACKTOP = i3; + return i10 | 0; +} + +function ___fflush_unlocked(i1) { + i1 = i1 | 0; + var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0; + i2 = i1 + 20 | 0; + i3 = i1 + 28 | 0; + if ((HEAP32[i2 >> 2] | 0) >>> 0 > (HEAP32[i3 >> 2] | 0) >>> 0 ? (FUNCTION_TABLE_iiii[HEAP32[i1 + 36 >> 2] & 7](i1, 0, 0) | 0, (HEAP32[i2 >> 2] | 0) == 0) : 0) i4 = -1; else { + i5 = i1 + 4 | 0; + i6 = HEAP32[i5 >> 2] | 0; + i7 = i1 + 8 | 0; + i8 = HEAP32[i7 >> 2] | 0; + if (i6 >>> 0 < i8 >>> 0) FUNCTION_TABLE_iiii[HEAP32[i1 + 40 >> 2] & 7](i1, i6 - i8 | 0, 1) | 0; + HEAP32[i1 + 16 >> 2] = 0; + HEAP32[i3 >> 2] = 0; + HEAP32[i2 >> 2] = 0; + HEAP32[i7 >> 2] = 0; + HEAP32[i5 >> 2] = 0; + i4 = 0; + } + return i4 | 0; +} + +function _memcpy(i1, i2, i3) { + i1 = i1 | 0; + i2 = i2 | 0; + i3 = i3 | 0; + var i4 = 0; + if ((i3 | 0) >= 4096) return _emscripten_memcpy_big(i1 | 0, i2 | 0, i3 | 0) | 0; + i4 = i1 | 0; + if ((i1 & 3) == (i2 & 3)) { + while (i1 & 3) { + if (!i3) return i4 | 0; + HEAP8[i1 >> 0] = HEAP8[i2 >> 0] | 0; + i1 = i1 + 1 | 0; + i2 = i2 + 1 | 0; + i3 = i3 - 1 | 0; + } + while ((i3 | 0) >= 4) { + HEAP32[i1 >> 2] = HEAP32[i2 >> 2]; + i1 = i1 + 4 | 0; + i2 = i2 + 4 | 0; + i3 = i3 - 4 | 0; + } + } + while ((i3 | 0) > 0) { + HEAP8[i1 >> 0] = HEAP8[i2 >> 0] | 0; + i1 = i1 + 1 | 0; + i2 = i2 + 1 | 0; + i3 = i3 - 1 | 0; + } + return i4 | 0; +} + +function runPostSets() {} +function _memset(i1, i2, i3) { + i1 = i1 | 0; + i2 = i2 | 0; + i3 = i3 | 0; + var i4 = 0, i5 = 0, i6 = 0, i7 = 0; + i4 = i1 + i3 | 0; + if ((i3 | 0) >= 20) { + i2 = i2 & 255; + i5 = i1 & 3; + i6 = i2 | i2 << 8 | i2 << 16 | i2 << 24; + i7 = i4 & ~3; + if (i5) { + i5 = i1 + 4 - i5 | 0; + while ((i1 | 0) < (i5 | 0)) { + HEAP8[i1 >> 0] = i2; + i1 = i1 + 1 | 0; + } + } + while ((i1 | 0) < (i7 | 0)) { + HEAP32[i1 >> 2] = i6; + i1 = i1 + 4 | 0; + } + } + while ((i1 | 0) < (i4 | 0)) { + HEAP8[i1 >> 0] = i2; + i1 = i1 + 1 | 0; + } + return i1 - i3 | 0; +} + +function _puts(i1) { + i1 = i1 | 0; + var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0; + i2 = HEAP32[13] | 0; + if ((HEAP32[i2 + 76 >> 2] | 0) > -1) i3 = ___lockfile(i2) | 0; else i3 = 0; + do if ((_fputs(i1, i2) | 0) < 0) i4 = 1; else { + if ((HEAP8[i2 + 75 >> 0] | 0) != 10 ? (i5 = i2 + 20 | 0, i6 = HEAP32[i5 >> 2] | 0, i6 >>> 0 < (HEAP32[i2 + 16 >> 2] | 0) >>> 0) : 0) { + HEAP32[i5 >> 2] = i6 + 1; + HEAP8[i6 >> 0] = 10; + i4 = 0; + break; + } + i4 = (___overflow(i2, 10) | 0) < 0; + } while (0); + if (i3) ___unlockfile(i2); + return i4 << 31 >> 31 | 0; +} + +function ___stdio_seek(i1, i2, i3) { + i1 = i1 | 0; + i2 = i2 | 0; + i3 = i3 | 0; + var i4 = 0, i5 = 0, i6 = 0, i7 = 0; + i4 = STACKTOP; + STACKTOP = STACKTOP + 32 | 0; + i5 = i4; + i6 = i4 + 20 | 0; + HEAP32[i5 >> 2] = HEAP32[i1 + 60 >> 2]; + HEAP32[i5 + 4 >> 2] = 0; + HEAP32[i5 + 8 >> 2] = i2; + HEAP32[i5 + 12 >> 2] = i6; + HEAP32[i5 + 16 >> 2] = i3; + if ((___syscall_ret(___syscall140(140, i5 | 0) | 0) | 0) < 0) { + HEAP32[i6 >> 2] = -1; + i7 = -1; + } else i7 = HEAP32[i6 >> 2] | 0; + STACKTOP = i4; + return i7 | 0; +} + +function ___towrite(i1) { + i1 = i1 | 0; + var i2 = 0, i3 = 0, i4 = 0; + i2 = i1 + 74 | 0; + i3 = HEAP8[i2 >> 0] | 0; + HEAP8[i2 >> 0] = i3 + 255 | i3; + i3 = HEAP32[i1 >> 2] | 0; + if (!(i3 & 8)) { + HEAP32[i1 + 8 >> 2] = 0; + HEAP32[i1 + 4 >> 2] = 0; + i2 = HEAP32[i1 + 44 >> 2] | 0; + HEAP32[i1 + 28 >> 2] = i2; + HEAP32[i1 + 20 >> 2] = i2; + HEAP32[i1 + 16 >> 2] = i2 + (HEAP32[i1 + 48 >> 2] | 0); + i4 = 0; + } else { + HEAP32[i1 >> 2] = i3 | 32; + i4 = -1; + } + return i4 | 0; +} + +function _fwrite(i1, i2, i3, i4) { + i1 = i1 | 0; + i2 = i2 | 0; + i3 = i3 | 0; + i4 = i4 | 0; + var i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0; + i5 = Math_imul(i3, i2) | 0; + if ((HEAP32[i4 + 76 >> 2] | 0) > -1) { + i6 = (___lockfile(i4) | 0) == 0; + i7 = ___fwritex(i1, i5, i4) | 0; + if (i6) i8 = i7; else { + ___unlockfile(i4); + i8 = i7; + } + } else i8 = ___fwritex(i1, i5, i4) | 0; + if ((i8 | 0) == (i5 | 0)) i9 = i3; else i9 = (i8 >>> 0) / (i2 >>> 0) | 0; + return i9 | 0; +} + +function ___stdout_write(i1, i2, i3) { + i1 = i1 | 0; + i2 = i2 | 0; + i3 = i3 | 0; + var i4 = 0, i5 = 0; + i4 = STACKTOP; + STACKTOP = STACKTOP + 80 | 0; + i5 = i4; + HEAP32[i1 + 36 >> 2] = 5; + if ((HEAP32[i1 >> 2] & 64 | 0) == 0 ? (HEAP32[i5 >> 2] = HEAP32[i1 + 60 >> 2], HEAP32[i5 + 4 >> 2] = 21505, HEAP32[i5 + 8 >> 2] = i4 + 12, (___syscall54(54, i5 | 0) | 0) != 0) : 0) HEAP8[i1 + 75 >> 0] = -1; + i5 = ___stdio_write(i1, i2, i3) | 0; + STACKTOP = i4; + return i5 | 0; +} + +function copyTempDouble(i1) { + i1 = i1 | 0; + HEAP8[tempDoublePtr >> 0] = HEAP8[i1 >> 0]; + HEAP8[tempDoublePtr + 1 >> 0] = HEAP8[i1 + 1 >> 0]; + HEAP8[tempDoublePtr + 2 >> 0] = HEAP8[i1 + 2 >> 0]; + HEAP8[tempDoublePtr + 3 >> 0] = HEAP8[i1 + 3 >> 0]; + HEAP8[tempDoublePtr + 4 >> 0] = HEAP8[i1 + 4 >> 0]; + HEAP8[tempDoublePtr + 5 >> 0] = HEAP8[i1 + 5 >> 0]; + HEAP8[tempDoublePtr + 6 >> 0] = HEAP8[i1 + 6 >> 0]; + HEAP8[tempDoublePtr + 7 >> 0] = HEAP8[i1 + 7 >> 0]; +} + +function ___stdio_close(i1) { + i1 = i1 | 0; + var i2 = 0, i3 = 0; + i2 = STACKTOP; + STACKTOP = STACKTOP + 16 | 0; + i3 = i2; + HEAP32[i3 >> 2] = HEAP32[i1 + 60 >> 2]; + i1 = ___syscall_ret(___syscall6(6, i3 | 0) | 0) | 0; + STACKTOP = i2; + return i1 | 0; +} + +function copyTempFloat(i1) { + i1 = i1 | 0; + HEAP8[tempDoublePtr >> 0] = HEAP8[i1 >> 0]; + HEAP8[tempDoublePtr + 1 >> 0] = HEAP8[i1 + 1 >> 0]; + HEAP8[tempDoublePtr + 2 >> 0] = HEAP8[i1 + 2 >> 0]; + HEAP8[tempDoublePtr + 3 >> 0] = HEAP8[i1 + 3 >> 0]; +} + +function ___syscall_ret(i1) { + i1 = i1 | 0; + var i2 = 0; + if (i1 >>> 0 > 4294963200) { + HEAP32[(___errno_location() | 0) >> 2] = 0 - i1; + i2 = -1; + } else i2 = i1; + return i2 | 0; +} + +function dynCall_iiii(i1, i2, i3, i4) { + i1 = i1 | 0; + i2 = i2 | 0; + i3 = i3 | 0; + i4 = i4 | 0; + return FUNCTION_TABLE_iiii[i1 & 7](i2 | 0, i3 | 0, i4 | 0) | 0; +} +function stackAlloc(i1) { + i1 = i1 | 0; + var i2 = 0; + i2 = STACKTOP; + STACKTOP = STACKTOP + i1 | 0; + STACKTOP = STACKTOP + 15 & -16; + return i2 | 0; +} + +function ___errno_location() { + var i1 = 0; + if (!(HEAP32[2] | 0)) i1 = 60; else i1 = HEAP32[(_pthread_self() | 0) + 60 >> 2] | 0; + return i1 | 0; +} + +function setThrew(i1, i2) { + i1 = i1 | 0; + i2 = i2 | 0; + if (!__THREW__) { + __THREW__ = i1; + threwValue = i2; + } +} + +function _fputs(i1, i2) { + i1 = i1 | 0; + i2 = i2 | 0; + return (_fwrite(i1, _strlen(i1) | 0, 1, i2) | 0) + -1 | 0; +} + +function dynCall_ii(i1, i2) { + i1 = i1 | 0; + i2 = i2 | 0; + return FUNCTION_TABLE_ii[i1 & 1](i2 | 0) | 0; +} + +function _cleanup_418(i1) { + i1 = i1 | 0; + if (!(HEAP32[i1 + 68 >> 2] | 0)) ___unlockfile(i1); + return; +} + +function establishStackSpace(i1, i2) { + i1 = i1 | 0; + i2 = i2 | 0; + STACKTOP = i1; + STACK_MAX = i2; +} + +function dynCall_vi(i1, i2) { + i1 = i1 | 0; + i2 = i2 | 0; + FUNCTION_TABLE_vi[i1 & 7](i2 | 0); +} + +function b1(i1, i2, i3) { + i1 = i1 | 0; + i2 = i2 | 0; + i3 = i3 | 0; + abort(1); + return 0; +} + +function stackRestore(i1) { + i1 = i1 | 0; + STACKTOP = i1; +} + +function setTempRet0(i1) { + i1 = i1 | 0; + tempRet0 = i1; +} + +function b0(i1) { + i1 = i1 | 0; + abort(0); + return 0; +} + +function ___unlockfile(i1) { + i1 = i1 | 0; + return; +} + +function ___lockfile(i1) { + i1 = i1 | 0; + return 0; +} + +function getTempRet0() { + return tempRet0 | 0; +} + +function _main() { + _puts(672) | 0; + return 0; +} + +function stackSave() { + return STACKTOP | 0; +} + +function b2(i1) { + i1 = i1 | 0; + abort(2); +} + +// EMSCRIPTEN_END_FUNCS +var FUNCTION_TABLE_ii = [b0,___stdio_close]; +var FUNCTION_TABLE_iiii = [b1,b1,___stdout_write,___stdio_seek,b1,___stdio_write,b1,b1]; +var FUNCTION_TABLE_vi = [b2,b2,b2,b2,_cleanup_418,b2,b2,b2]; + + return { _free: _free, _main: _main, _memset: _memset, _malloc: _malloc, _memcpy: _memcpy, _fflush: _fflush, ___errno_location: ___errno_location, runPostSets: runPostSets, stackAlloc: stackAlloc, stackSave: stackSave, stackRestore: stackRestore, establishStackSpace: establishStackSpace, setThrew: setThrew, setTempRet0: setTempRet0, getTempRet0: getTempRet0, dynCall_ii: dynCall_ii, dynCall_iiii: dynCall_iiii, dynCall_vi: dynCall_vi }; +}) +; \ No newline at end of file diff --git a/src/binaryen/test/emcc_O2_hello_world.fromasm b/src/binaryen/test/emcc_O2_hello_world.fromasm new file mode 100644 index 0000000000..8d7fbec6f3 --- /dev/null +++ b/src/binaryen/test/emcc_O2_hello_world.fromasm @@ -0,0 +1,9754 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "abort" (func $abort (param i32))) + (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) + (import "env" "_pthread_self" (func $_pthread_self (result i32))) + (import "env" "_sysconf" (func $_sysconf (param i32) (result i32))) + (import "env" "___lock" (func $___lock (param i32))) + (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) + (import "env" "_abort" (func $_abort)) + (import "env" "_sbrk" (func $_sbrk (param i32) (result i32))) + (import "env" "_time" (func $_time (param i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) + (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $___unlock (param i32))) + (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) + (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 18 18 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (elem (get_global $tableBase) $b0 $___stdio_close $b1 $b1 $___stdout_write $___stdio_seek $b1 $___stdio_write $b1 $b1 $b2 $b2 $b2 $b2 $_cleanup_418 $b2 $b2 $b2) + (data (i32.const 1024) "emcc_O2_hello_world.asm.js") + (export "_free" (func $_free)) + (export "_main" (func $_main)) + (export "_memset" (func $_memset)) + (export "_malloc" (func $_malloc)) + (export "_memcpy" (func $_memcpy)) + (export "_fflush" (func $_fflush)) + (export "___errno_location" (func $___errno_location)) + (export "runPostSets" (func $runPostSets)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackSave" (func $stackSave)) + (export "stackRestore" (func $stackRestore)) + (export "establishStackSpace" (func $establishStackSpace)) + (export "setThrew" (func $setThrew)) + (export "setTempRet0" (func $setTempRet0)) + (export "getTempRet0" (func $getTempRet0)) + (export "dynCall_ii" (func $dynCall_ii)) + (export "dynCall_iiii" (func $dynCall_iiii)) + (export "dynCall_vi" (func $dynCall_vi)) + (func $_malloc (; 15 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (local $47 i32) + (local $48 i32) + (local $49 i32) + (local $50 i32) + (local $51 i32) + (local $52 i32) + (block $do-once + (if + (i32.lt_u + (get_local $0) + (i32.const 245) + ) + (block + (if + (i32.and + (tee_local $2 + (i32.shr_u + (tee_local $15 + (i32.load + (i32.const 176) + ) + ) + (tee_local $6 + (i32.shr_u + (tee_local $9 + (select + (i32.const 16) + (i32.and + (i32.add + (get_local $0) + (i32.const 11) + ) + (i32.const -8) + ) + (i32.lt_u + (get_local $0) + (i32.const 11) + ) + ) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 3) + ) + (block + (set_local $2 + (i32.load + (tee_local $17 + (i32.add + (tee_local $0 + (i32.load + (tee_local $5 + (i32.add + (tee_local $1 + (i32.add + (i32.shl + (tee_local $10 + (i32.add + (i32.xor + (i32.and + (get_local $2) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $6) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.ne + (get_local $1) + (get_local $2) + ) + (block + (if + (i32.lt_u + (get_local $2) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $7 + (i32.add + (get_local $2) + (i32.const 12) + ) + ) + ) + (get_local $0) + ) + (block + (i32.store + (get_local $7) + (get_local $1) + ) + (i32.store + (get_local $5) + (get_local $2) + ) + ) + (call $_abort) + ) + ) + (i32.store + (i32.const 176) + (i32.and + (get_local $15) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $10) + ) + (i32.const -1) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.or + (tee_local $2 + (i32.shl + (get_local $10) + (i32.const 3) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (i32.add + (get_local $0) + (get_local $2) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 1) + ) + ) + (return + (get_local $17) + ) + ) + ) + (if + (i32.gt_u + (get_local $9) + (tee_local $5 + (i32.load + (i32.const 184) + ) + ) + ) + (block + (if + (get_local $2) + (block + (set_local $1 + (i32.and + (i32.shr_u + (tee_local $2 + (i32.add + (i32.and + (tee_local $1 + (i32.and + (i32.shl + (get_local $2) + (get_local $6) + ) + (i32.or + (tee_local $2 + (i32.shl + (i32.const 2) + (get_local $6) + ) + ) + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $1 + (i32.load + (tee_local $7 + (i32.add + (tee_local $0 + (i32.load + (tee_local $19 + (i32.add + (tee_local $11 + (i32.add + (i32.shl + (tee_local $10 + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $2) + (get_local $1) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $1) + ) + (tee_local $7 + (i32.and + (i32.shr_u + (tee_local $0 + (i32.shr_u + (get_local $7) + (get_local $2) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $11 + (i32.shr_u + (get_local $0) + (get_local $7) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $11 + (i32.and + (i32.shr_u + (tee_local $19 + (i32.shr_u + (get_local $11) + (get_local $0) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $19) + (get_local $11) + ) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.ne + (get_local $11) + (get_local $1) + ) + (block + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 12) + ) + ) + ) + (get_local $0) + ) + (block + (i32.store + (get_local $2) + (get_local $11) + ) + (i32.store + (get_local $19) + (get_local $1) + ) + (set_local $17 + (i32.load + (i32.const 184) + ) + ) + ) + (call $_abort) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (get_local $15) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $10) + ) + (i32.const -1) + ) + ) + ) + (set_local $17 + (get_local $5) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.or + (get_local $9) + (i32.const 3) + ) + ) + (i32.store offset=4 + (tee_local $15 + (i32.add + (get_local $0) + (get_local $9) + ) + ) + (i32.or + (tee_local $5 + (i32.sub + (i32.shl + (get_local $10) + (i32.const 3) + ) + (get_local $9) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $15) + (get_local $5) + ) + (get_local $5) + ) + (if + (get_local $17) + (block + (set_local $1 + (i32.load + (i32.const 196) + ) + ) + (set_local $11 + (i32.add + (i32.shl + (tee_local $19 + (i32.shr_u + (get_local $17) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $6 + (i32.load + (i32.const 176) + ) + ) + (tee_local $2 + (i32.shl + (i32.const 1) + (get_local $19) + ) + ) + ) + (if + (i32.lt_u + (tee_local $17 + (i32.load + (tee_local $19 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $38 + (get_local $19) + ) + (set_local $31 + (get_local $17) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $6) + (get_local $2) + ) + ) + (set_local $38 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + (set_local $31 + (get_local $11) + ) + ) + ) + (i32.store + (get_local $38) + (get_local $1) + ) + (i32.store offset=12 + (get_local $31) + (get_local $1) + ) + (i32.store offset=8 + (get_local $1) + (get_local $31) + ) + (i32.store offset=12 + (get_local $1) + (get_local $11) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $5) + ) + (i32.store + (i32.const 196) + (get_local $15) + ) + (return + (get_local $7) + ) + ) + ) + (if + (tee_local $15 + (i32.load + (i32.const 180) + ) + ) + (block + (set_local $15 + (i32.and + (i32.shr_u + (tee_local $5 + (i32.add + (i32.and + (get_local $15) + (i32.sub + (i32.const 0) + (get_local $15) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $2 + (i32.sub + (i32.and + (i32.load offset=4 + (tee_local $17 + (i32.load offset=480 + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $5 + (i32.and + (i32.shr_u + (tee_local $11 + (i32.shr_u + (get_local $5) + (get_local $15) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $15) + ) + (tee_local $11 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $11) + (get_local $5) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $2 + (i32.shr_u + (get_local $1) + (get_local $11) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $6 + (i32.shr_u + (get_local $2) + (get_local $1) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $6) + (get_local $2) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const -8) + ) + (get_local $9) + ) + ) + (set_local $6 + (get_local $17) + ) + (set_local $1 + (get_local $17) + ) + (loop $while-in + (block $while-out + (if + (tee_local $17 + (i32.load offset=16 + (get_local $6) + ) + ) + (set_local $0 + (get_local $17) + ) + (if + (tee_local $11 + (i32.load offset=20 + (get_local $6) + ) + ) + (set_local $0 + (get_local $11) + ) + (block + (set_local $8 + (get_local $2) + ) + (set_local $3 + (get_local $1) + ) + (br $while-out) + ) + ) + ) + (set_local $11 + (i32.lt_u + (tee_local $17 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $9) + ) + ) + (get_local $2) + ) + ) + (set_local $2 + (select + (get_local $17) + (get_local $2) + (get_local $11) + ) + ) + (set_local $6 + (get_local $0) + ) + (set_local $1 + (select + (get_local $0) + (get_local $1) + (get_local $11) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (get_local $3) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $3) + (tee_local $6 + (i32.add + (get_local $3) + (get_local $9) + ) + ) + ) + (call $_abort) + ) + (set_local $2 + (i32.load offset=24 + (get_local $3) + ) + ) + (block $do-once4 + (if + (i32.eq + (tee_local $7 + (i32.load offset=12 + (get_local $3) + ) + ) + (get_local $3) + ) + (block + (if + (tee_local $10 + (i32.load + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $17 + (get_local $10) + ) + (set_local $5 + (get_local $0) + ) + ) + (if + (tee_local $17 + (i32.load + (tee_local $11 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (set_local $5 + (get_local $11) + ) + (block + (set_local $19 + (i32.const 0) + ) + (br $do-once4) + ) + ) + ) + (loop $while-in7 + (if + (tee_local $10 + (i32.load + (tee_local $0 + (i32.add + (get_local $17) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $17 + (get_local $10) + ) + (set_local $5 + (get_local $0) + ) + (br $while-in7) + ) + ) + (if + (tee_local $10 + (i32.load + (tee_local $0 + (i32.add + (get_local $17) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $17 + (get_local $10) + ) + (set_local $5 + (get_local $0) + ) + (br $while-in7) + ) + ) + ) + (if + (i32.lt_u + (get_local $5) + (get_local $1) + ) + (call $_abort) + (block + (i32.store + (get_local $5) + (i32.const 0) + ) + (set_local $19 + (get_local $17) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $0 + (i32.load offset=8 + (get_local $3) + ) + ) + (get_local $1) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $10 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + (get_local $3) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $11 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + ) + (get_local $3) + ) + (block + (i32.store + (get_local $10) + (get_local $7) + ) + (i32.store + (get_local $11) + (get_local $0) + ) + (set_local $19 + (get_local $7) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once8 + (if + (get_local $2) + (block + (if + (i32.eq + (get_local $3) + (i32.load + (tee_local $1 + (i32.add + (i32.shl + (tee_local $7 + (i32.load offset=28 + (get_local $3) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $1) + (get_local $19) + ) + (if + (i32.eqz + (get_local $19) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $7) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $2) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $7 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + (get_local $3) + ) + (i32.store + (get_local $7) + (get_local $19) + ) + (i32.store offset=20 + (get_local $2) + (get_local $19) + ) + ) + (br_if $do-once8 + (i32.eqz + (get_local $19) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $19) + (tee_local $7 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $19) + (get_local $2) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $3) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $7) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $19) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $19) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load offset=20 + (get_local $3) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $19) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $19) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $8) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $3) + (i32.or + (tee_local $2 + (i32.add + (get_local $8) + (get_local $9) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $1 + (i32.add + (i32.add + (get_local $3) + (get_local $2) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $1) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $9) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $6) + (i32.or + (get_local $8) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $6) + (get_local $8) + ) + (get_local $8) + ) + (if + (tee_local $1 + (i32.load + (i32.const 184) + ) + ) + (block + (set_local $2 + (i32.load + (i32.const 196) + ) + ) + (set_local $1 + (i32.add + (i32.shl + (tee_local $7 + (i32.shr_u + (get_local $1) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $0 + (i32.load + (i32.const 176) + ) + ) + (tee_local $11 + (i32.shl + (i32.const 1) + (get_local $7) + ) + ) + ) + (if + (i32.lt_u + (tee_local $10 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $39 + (get_local $7) + ) + (set_local $32 + (get_local $10) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $0) + (get_local $11) + ) + ) + (set_local $39 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $32 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $39) + (get_local $2) + ) + (i32.store offset=12 + (get_local $32) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $32) + ) + (i32.store offset=12 + (get_local $2) + (get_local $1) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $8) + ) + (i32.store + (i32.const 196) + (get_local $6) + ) + ) + ) + (return + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.le_u + (get_local $0) + (i32.const -65) + ) + (block + (set_local $2 + (i32.and + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 11) + ) + ) + (i32.const -8) + ) + ) + (if + (tee_local $11 + (i32.load + (i32.const 180) + ) + ) + (block + (set_local $0 + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + (block $label$break$L123 + (if + (tee_local $15 + (i32.load offset=480 + (i32.shl + (tee_local $9 + (if (result i32) + (tee_local $10 + (i32.shr_u + (get_local $1) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $2) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $2) + (i32.add + (tee_local $15 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $10 + (i32.and + (i32.shr_u + (i32.add + (tee_local $7 + (i32.shl + (get_local $10) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (get_local $10) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $1) + ) + (tee_local $7 + (i32.and + (i32.shr_u + (i32.add + (tee_local $17 + (i32.shl + (get_local $7) + (get_local $10) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $17) + (get_local $7) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $15) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + ) + ) + (block + (set_local $7 + (get_local $0) + ) + (set_local $17 + (i32.const 0) + ) + (set_local $1 + (i32.shl + (get_local $2) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $9) + (i32.const 1) + ) + ) + (i32.eq + (get_local $9) + (i32.const 31) + ) + ) + ) + ) + (set_local $10 + (get_local $15) + ) + (set_local $5 + (i32.const 0) + ) + (loop $while-in14 + (if + (i32.lt_u + (tee_local $0 + (i32.sub + (tee_local $19 + (i32.and + (i32.load offset=4 + (get_local $10) + ) + (i32.const -8) + ) + ) + (get_local $2) + ) + ) + (get_local $7) + ) + (if + (i32.eq + (get_local $19) + (get_local $2) + ) + (block + (set_local $27 + (get_local $0) + ) + (set_local $25 + (get_local $10) + ) + (set_local $29 + (get_local $10) + ) + (set_local $7 + (i32.const 90) + ) + (br $label$break$L123) + ) + (block + (set_local $7 + (get_local $0) + ) + (set_local $5 + (get_local $10) + ) + ) + ) + ) + (set_local $19 + (select + (get_local $17) + (tee_local $0 + (i32.load offset=20 + (get_local $10) + ) + ) + (i32.or + (i32.eqz + (get_local $0) + ) + (i32.eq + (get_local $0) + (tee_local $10 + (i32.load + (i32.add + (i32.add + (get_local $10) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $1) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.eqz + (get_local $10) + ) + ) + (block + (set_local $33 + (get_local $7) + ) + (set_local $6 + (get_local $19) + ) + (set_local $30 + (get_local $5) + ) + (set_local $7 + (i32.const 86) + ) + ) + (block + (set_local $17 + (get_local $19) + ) + (set_local $1 + (i32.shl + (get_local $1) + (i32.xor + (i32.and + (get_local $0) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (br $while-in14) + ) + ) + ) + ) + (block + (set_local $33 + (get_local $0) + ) + (set_local $6 + (i32.const 0) + ) + (set_local $30 + (i32.const 0) + ) + (set_local $7 + (i32.const 86) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 86) + ) + (block + (if + (i32.and + (i32.eqz + (get_local $6) + ) + (i32.eqz + (get_local $30) + ) + ) + (block + (if + (i32.eqz + (tee_local $0 + (i32.and + (get_local $11) + (i32.or + (tee_local $15 + (i32.shl + (i32.const 2) + (get_local $9) + ) + ) + (i32.sub + (i32.const 0) + (get_local $15) + ) + ) + ) + ) + ) + (block + (set_local $9 + (get_local $2) + ) + (br $do-once) + ) + ) + (set_local $0 + (i32.and + (i32.shr_u + (tee_local $15 + (i32.add + (i32.and + (get_local $0) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $6 + (i32.load offset=480 + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $15 + (i32.and + (i32.shr_u + (tee_local $9 + (i32.shr_u + (get_local $15) + (get_local $0) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $0) + ) + (tee_local $9 + (i32.and + (i32.shr_u + (tee_local $6 + (i32.shr_u + (get_local $9) + (get_local $15) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $6 + (i32.and + (i32.shr_u + (tee_local $5 + (i32.shr_u + (get_local $6) + (get_local $9) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $5 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $5) + (get_local $6) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $1) + (get_local $5) + ) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (if + (get_local $6) + (block + (set_local $27 + (get_local $33) + ) + (set_local $25 + (get_local $6) + ) + (set_local $29 + (get_local $30) + ) + (set_local $7 + (i32.const 90) + ) + ) + (block + (set_local $3 + (get_local $33) + ) + (set_local $12 + (get_local $30) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 90) + ) + (loop $while-in16 + (set_local $7 + (i32.const 0) + ) + (set_local $1 + (i32.lt_u + (tee_local $5 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $25) + ) + (i32.const -8) + ) + (get_local $2) + ) + ) + (get_local $27) + ) + ) + (set_local $6 + (select + (get_local $5) + (get_local $27) + (get_local $1) + ) + ) + (set_local $5 + (select + (get_local $25) + (get_local $29) + (get_local $1) + ) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $25) + ) + ) + (block + (set_local $27 + (get_local $6) + ) + (set_local $25 + (get_local $1) + ) + (set_local $29 + (get_local $5) + ) + (br $while-in16) + ) + ) + (if + (tee_local $25 + (i32.load offset=20 + (get_local $25) + ) + ) + (block + (set_local $27 + (get_local $6) + ) + (set_local $29 + (get_local $5) + ) + (br $while-in16) + ) + (block + (set_local $3 + (get_local $6) + ) + (set_local $12 + (get_local $5) + ) + ) + ) + ) + ) + (if + (if (result i32) + (get_local $12) + (i32.lt_u + (get_local $3) + (i32.sub + (i32.load + (i32.const 184) + ) + (get_local $2) + ) + ) + (i32.const 0) + ) + (block + (if + (i32.lt_u + (get_local $12) + (tee_local $11 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $12) + (tee_local $5 + (i32.add + (get_local $12) + (get_local $2) + ) + ) + ) + (call $_abort) + ) + (set_local $6 + (i32.load offset=24 + (get_local $12) + ) + ) + (block $do-once17 + (if + (i32.eq + (tee_local $1 + (i32.load offset=12 + (get_local $12) + ) + ) + (get_local $12) + ) + (block + (if + (tee_local $0 + (i32.load + (tee_local $9 + (i32.add + (get_local $12) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $17 + (get_local $0) + ) + (set_local $1 + (get_local $9) + ) + ) + (if + (tee_local $17 + (i32.load + (tee_local $15 + (i32.add + (get_local $12) + (i32.const 16) + ) + ) + ) + ) + (set_local $1 + (get_local $15) + ) + (block + (set_local $8 + (i32.const 0) + ) + (br $do-once17) + ) + ) + ) + (loop $while-in20 + (if + (tee_local $0 + (i32.load + (tee_local $9 + (i32.add + (get_local $17) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $17 + (get_local $0) + ) + (set_local $1 + (get_local $9) + ) + (br $while-in20) + ) + ) + (if + (tee_local $0 + (i32.load + (tee_local $9 + (i32.add + (get_local $17) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $17 + (get_local $0) + ) + (set_local $1 + (get_local $9) + ) + (br $while-in20) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $11) + ) + (call $_abort) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $8 + (get_local $17) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $9 + (i32.load offset=8 + (get_local $12) + ) + ) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $0 + (i32.add + (get_local $9) + (i32.const 12) + ) + ) + ) + (get_local $12) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $15 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (get_local $12) + ) + (block + (i32.store + (get_local $0) + (get_local $1) + ) + (i32.store + (get_local $15) + (get_local $9) + ) + (set_local $8 + (get_local $1) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once21 + (if + (get_local $6) + (block + (if + (i32.eq + (get_local $12) + (i32.load + (tee_local $11 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $12) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $11) + (get_local $8) + ) + (if + (i32.eqz + (get_local $8) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $12) + ) + (i32.store + (get_local $1) + (get_local $8) + ) + (i32.store offset=20 + (get_local $6) + (get_local $8) + ) + ) + (br_if $do-once21 + (i32.eqz + (get_local $8) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $8) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $8) + (get_local $6) + ) + (if + (tee_local $11 + (i32.load offset=16 + (get_local $12) + ) + ) + (if + (i32.lt_u + (get_local $11) + (get_local $1) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $8) + (get_local $11) + ) + (i32.store offset=24 + (get_local $11) + (get_local $8) + ) + ) + ) + ) + (if + (tee_local $11 + (i32.load offset=20 + (get_local $12) + ) + ) + (if + (i32.lt_u + (get_local $11) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $8) + (get_local $11) + ) + (i32.store offset=24 + (get_local $11) + (get_local $8) + ) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.ge_u + (get_local $3) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $12) + (i32.or + (get_local $2) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $5) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $5) + (get_local $3) + ) + (get_local $3) + ) + (set_local $6 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $3) + (i32.const 256) + ) + (block + (set_local $11 + (i32.add + (i32.shl + (get_local $6) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 176) + ) + ) + (tee_local $9 + (i32.shl + (i32.const 1) + (get_local $6) + ) + ) + ) + (if + (i32.lt_u + (tee_local $15 + (i32.load + (tee_local $6 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $16 + (get_local $6) + ) + (set_local $26 + (get_local $15) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $1) + (get_local $9) + ) + ) + (set_local $16 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + (set_local $26 + (get_local $11) + ) + ) + ) + (i32.store + (get_local $16) + (get_local $5) + ) + (i32.store offset=12 + (get_local $26) + (get_local $5) + ) + (i32.store offset=8 + (get_local $5) + (get_local $26) + ) + (i32.store offset=12 + (get_local $5) + (get_local $11) + ) + (br $do-once25) + ) + ) + (set_local $6 + (i32.add + (i32.shl + (tee_local $10 + (if (result i32) + (tee_local $11 + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $3) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $3) + (i32.add + (tee_local $6 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $11 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $11) + (tee_local $9 + (i32.and + (i32.shr_u + (i32.add + (get_local $11) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $9) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $15 + (i32.shl + (get_local $1) + (get_local $11) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $15) + (get_local $1) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $6) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $5) + (get_local $10) + ) + (i32.store offset=4 + (tee_local $1 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (i32.const 180) + ) + ) + (tee_local $15 + (i32.shl + (i32.const 1) + (get_local $10) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $1) + (get_local $15) + ) + ) + (i32.store + (get_local $6) + (get_local $5) + ) + (i32.store offset=24 + (get_local $5) + (get_local $6) + ) + (i32.store offset=12 + (get_local $5) + (get_local $5) + ) + (i32.store offset=8 + (get_local $5) + (get_local $5) + ) + (br $do-once25) + ) + ) + (set_local $15 + (i32.shl + (get_local $3) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $10) + (i32.const 1) + ) + ) + (i32.eq + (get_local $10) + (i32.const 31) + ) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $6) + ) + ) + (loop $while-in28 + (block $while-out27 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $1) + ) + (i32.const -8) + ) + (get_local $3) + ) + (block + (set_local $14 + (get_local $1) + ) + (set_local $7 + (i32.const 148) + ) + (br $while-out27) + ) + ) + (if + (tee_local $9 + (i32.load + (tee_local $6 + (i32.add + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $15) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $15 + (i32.shl + (get_local $15) + (i32.const 1) + ) + ) + (set_local $1 + (get_local $9) + ) + (br $while-in28) + ) + (block + (set_local $23 + (get_local $6) + ) + (set_local $21 + (get_local $1) + ) + (set_local $7 + (i32.const 145) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 145) + ) + (if + (i32.lt_u + (get_local $23) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $23) + (get_local $5) + ) + (i32.store offset=24 + (get_local $5) + (get_local $21) + ) + (i32.store offset=12 + (get_local $5) + (get_local $5) + ) + (i32.store offset=8 + (get_local $5) + (get_local $5) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 148) + ) + (if + (i32.and + (i32.ge_u + (tee_local $15 + (i32.load + (tee_local $1 + (i32.add + (get_local $14) + (i32.const 8) + ) + ) + ) + ) + (tee_local $9 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $14) + (get_local $9) + ) + ) + (block + (i32.store offset=12 + (get_local $15) + (get_local $5) + ) + (i32.store + (get_local $1) + (get_local $5) + ) + (i32.store offset=8 + (get_local $5) + (get_local $15) + ) + (i32.store offset=12 + (get_local $5) + (get_local $14) + ) + (i32.store offset=24 + (get_local $5) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $12) + (i32.or + (tee_local $15 + (i32.add + (get_local $3) + (get_local $2) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $1 + (i32.add + (i32.add + (get_local $12) + (get_local $15) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $1) + ) + (i32.const 1) + ) + ) + ) + ) + ) + (return + (i32.add + (get_local $12) + (i32.const 8) + ) + ) + ) + (set_local $9 + (get_local $2) + ) + ) + ) + (set_local $9 + (get_local $2) + ) + ) + ) + (set_local $9 + (i32.const -1) + ) + ) + ) + ) + (if + (i32.ge_u + (tee_local $12 + (i32.load + (i32.const 184) + ) + ) + (get_local $9) + ) + (block + (set_local $14 + (i32.load + (i32.const 196) + ) + ) + (if + (i32.gt_u + (tee_local $3 + (i32.sub + (get_local $12) + (get_local $9) + ) + ) + (i32.const 15) + ) + (block + (i32.store + (i32.const 196) + (tee_local $21 + (i32.add + (get_local $14) + (get_local $9) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $3) + ) + (i32.store offset=4 + (get_local $21) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $21) + (get_local $3) + ) + (get_local $3) + ) + (i32.store offset=4 + (get_local $14) + (i32.or + (get_local $9) + (i32.const 3) + ) + ) + ) + (block + (i32.store + (i32.const 184) + (i32.const 0) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $14) + (i32.or + (get_local $12) + (i32.const 3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (i32.add + (get_local $14) + (get_local $12) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $3) + ) + (i32.const 1) + ) + ) + ) + ) + (return + (i32.add + (get_local $14) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.gt_u + (tee_local $14 + (i32.load + (i32.const 188) + ) + ) + (get_local $9) + ) + (block + (i32.store + (i32.const 188) + (tee_local $3 + (i32.sub + (get_local $14) + (get_local $9) + ) + ) + ) + (i32.store + (i32.const 200) + (tee_local $12 + (i32.add + (tee_local $14 + (i32.load + (i32.const 200) + ) + ) + (get_local $9) + ) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $14) + (i32.or + (get_local $9) + (i32.const 3) + ) + ) + (return + (i32.add + (get_local $14) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eqz + (i32.load + (i32.const 648) + ) + ) + (if + (i32.and + (i32.add + (tee_local $14 + (call $_sysconf + (i32.const 30) + ) + ) + (i32.const -1) + ) + (get_local $14) + ) + (call $_abort) + (block + (i32.store + (i32.const 656) + (get_local $14) + ) + (i32.store + (i32.const 652) + (get_local $14) + ) + (i32.store + (i32.const 660) + (i32.const -1) + ) + (i32.store + (i32.const 664) + (i32.const -1) + ) + (i32.store + (i32.const 668) + (i32.const 0) + ) + (i32.store + (i32.const 620) + (i32.const 0) + ) + (i32.store + (i32.const 648) + (i32.xor + (i32.and + (call $_time + (i32.const 0) + ) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + ) + ) + ) + (set_local $14 + (i32.add + (get_local $9) + (i32.const 48) + ) + ) + (if + (i32.le_u + (tee_local $3 + (i32.and + (tee_local $21 + (i32.add + (tee_local $3 + (i32.load + (i32.const 656) + ) + ) + (tee_local $12 + (i32.add + (get_local $9) + (i32.const 47) + ) + ) + ) + ) + (tee_local $23 + (i32.sub + (i32.const 0) + (get_local $3) + ) + ) + ) + ) + (get_local $9) + ) + (return + (i32.const 0) + ) + ) + (if + (if (result i32) + (tee_local $10 + (i32.load + (i32.const 616) + ) + ) + (i32.or + (i32.le_u + (tee_local $16 + (i32.add + (tee_local $26 + (i32.load + (i32.const 608) + ) + ) + (get_local $3) + ) + ) + (get_local $26) + ) + (i32.gt_u + (get_local $16) + (get_local $10) + ) + ) + (i32.const 0) + ) + (return + (i32.const 0) + ) + ) + (if + (if (result i32) + (if (result i32) + (select + (i32.lt_u + (get_local $3) + (i32.const 2147483647) + ) + (i32.const 0) + (i32.eq + (tee_local $7 + (block $label$break$L257 (result i32) + (if (result i32) + (i32.and + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + (i32.const 190) + (block (result i32) + (block $label$break$L259 + (if + (tee_local $10 + (i32.load + (i32.const 200) + ) + ) + (block + (set_local $16 + (i32.const 624) + ) + (loop $while-in34 + (block $while-out33 + (if + (if (result i32) + (i32.le_u + (tee_local $26 + (i32.load + (get_local $16) + ) + ) + (get_local $10) + ) + (i32.gt_u + (i32.add + (get_local $26) + (i32.load + (tee_local $8 + (i32.add + (get_local $16) + (i32.const 4) + ) + ) + ) + ) + (get_local $10) + ) + (i32.const 0) + ) + (block + (set_local $6 + (get_local $16) + ) + (set_local $1 + (get_local $8) + ) + (br $while-out33) + ) + ) + (br_if $while-in34 + (tee_local $16 + (i32.load offset=8 + (get_local $16) + ) + ) + ) + (set_local $7 + (i32.const 173) + ) + (br $label$break$L259) + ) + ) + (if + (i32.lt_u + (tee_local $16 + (i32.and + (i32.sub + (get_local $21) + (i32.load + (i32.const 188) + ) + ) + (get_local $23) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (tee_local $8 + (call $_sbrk + (get_local $16) + ) + ) + (i32.add + (i32.load + (get_local $6) + ) + (i32.load + (get_local $1) + ) + ) + ) + (if + (i32.ne + (get_local $8) + (i32.const -1) + ) + (block + (set_local $20 + (get_local $8) + ) + (set_local $22 + (get_local $16) + ) + (br $label$break$L257 + (i32.const 193) + ) + ) + ) + (block + (set_local $13 + (get_local $8) + ) + (set_local $18 + (get_local $16) + ) + (set_local $7 + (i32.const 183) + ) + ) + ) + ) + ) + (set_local $7 + (i32.const 173) + ) + ) + ) + (block $do-once35 + (if + (if (result i32) + (i32.eq + (get_local $7) + (i32.const 173) + ) + (i32.ne + (tee_local $10 + (call $_sbrk + (i32.const 0) + ) + ) + (i32.const -1) + ) + (i32.const 0) + ) + (block + (set_local $0 + (if (result i32) + (i32.and + (tee_local $8 + (i32.add + (tee_local $16 + (i32.load + (i32.const 652) + ) + ) + (i32.const -1) + ) + ) + (tee_local $2 + (get_local $10) + ) + ) + (i32.add + (i32.sub + (get_local $3) + (get_local $2) + ) + (i32.and + (i32.add + (get_local $8) + (get_local $2) + ) + (i32.sub + (i32.const 0) + (get_local $16) + ) + ) + ) + (get_local $3) + ) + ) + (set_local $2 + (i32.add + (tee_local $16 + (i32.load + (i32.const 608) + ) + ) + (get_local $0) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $0) + (get_local $9) + ) + (i32.lt_u + (get_local $0) + (i32.const 2147483647) + ) + ) + (block + (br_if $do-once35 + (select + (i32.or + (i32.le_u + (get_local $2) + (get_local $16) + ) + (i32.gt_u + (get_local $2) + (tee_local $8 + (i32.load + (i32.const 616) + ) + ) + ) + ) + (i32.const 0) + (get_local $8) + ) + ) + (if + (i32.eq + (tee_local $8 + (call $_sbrk + (get_local $0) + ) + ) + (get_local $10) + ) + (block + (set_local $20 + (get_local $10) + ) + (set_local $22 + (get_local $0) + ) + (br $label$break$L257 + (i32.const 193) + ) + ) + (block + (set_local $13 + (get_local $8) + ) + (set_local $18 + (get_local $0) + ) + (set_local $7 + (i32.const 183) + ) + ) + ) + ) + ) + ) + ) + ) + (block $label$break$L279 + (if + (i32.eq + (get_local $7) + (i32.const 183) + ) + (block + (set_local $8 + (i32.sub + (i32.const 0) + (get_local $18) + ) + ) + (if + (if (result i32) + (i32.and + (i32.gt_u + (get_local $14) + (get_local $18) + ) + (i32.and + (i32.lt_u + (get_local $18) + (i32.const 2147483647) + ) + (i32.ne + (get_local $13) + (i32.const -1) + ) + ) + ) + (i32.lt_u + (tee_local $2 + (i32.and + (i32.add + (i32.sub + (get_local $12) + (get_local $18) + ) + (tee_local $10 + (i32.load + (i32.const 656) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $10) + ) + ) + ) + (i32.const 2147483647) + ) + (i32.const 0) + ) + (if + (i32.eq + (call $_sbrk + (get_local $2) + ) + (i32.const -1) + ) + (block + (drop + (call $_sbrk + (get_local $8) + ) + ) + (br $label$break$L279) + ) + (set_local $4 + (i32.add + (get_local $2) + (get_local $18) + ) + ) + ) + (set_local $4 + (get_local $18) + ) + ) + (if + (i32.ne + (get_local $13) + (i32.const -1) + ) + (block + (set_local $20 + (get_local $13) + ) + (set_local $22 + (get_local $4) + ) + (br $label$break$L257 + (i32.const 193) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 620) + (i32.or + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + ) + (i32.const 190) + ) + ) + ) + ) + (i32.const 190) + ) + ) + (i32.and + (i32.lt_u + (tee_local $4 + (call $_sbrk + (get_local $3) + ) + ) + (tee_local $3 + (call $_sbrk + (i32.const 0) + ) + ) + ) + (i32.and + (i32.ne + (get_local $4) + (i32.const -1) + ) + (i32.ne + (get_local $3) + (i32.const -1) + ) + ) + ) + (i32.const 0) + ) + (i32.gt_u + (tee_local $13 + (i32.sub + (get_local $3) + (get_local $4) + ) + ) + (i32.add + (get_local $9) + (i32.const 40) + ) + ) + (i32.const 0) + ) + (block + (set_local $20 + (get_local $4) + ) + (set_local $22 + (get_local $13) + ) + (set_local $7 + (i32.const 193) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 193) + ) + (block + (i32.store + (i32.const 608) + (tee_local $13 + (i32.add + (i32.load + (i32.const 608) + ) + (get_local $22) + ) + ) + ) + (if + (i32.gt_u + (get_local $13) + (i32.load + (i32.const 612) + ) + ) + (i32.store + (i32.const 612) + (get_local $13) + ) + ) + (block $do-once40 + (if + (tee_local $13 + (i32.load + (i32.const 200) + ) + ) + (block + (set_local $4 + (i32.const 624) + ) + (loop $do-in + (block $do-out + (if + (i32.eq + (get_local $20) + (i32.add + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (tee_local $12 + (i32.load + (tee_local $18 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + ) + ) + ) + ) + (block + (set_local $46 + (get_local $3) + ) + (set_local $47 + (get_local $18) + ) + (set_local $48 + (get_local $12) + ) + (set_local $49 + (get_local $4) + ) + (set_local $7 + (i32.const 203) + ) + (br $do-out) + ) + ) + (br_if $do-in + (tee_local $4 + (i32.load offset=8 + (get_local $4) + ) + ) + ) + ) + ) + (if + (if (result i32) + (if (result i32) + (i32.eq + (get_local $7) + (i32.const 203) + ) + (i32.eqz + (i32.and + (i32.load offset=12 + (get_local $49) + ) + (i32.const 8) + ) + ) + (i32.const 0) + ) + (i32.and + (i32.lt_u + (get_local $13) + (get_local $20) + ) + (i32.ge_u + (get_local $13) + (get_local $46) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $47) + (i32.add + (get_local $48) + (get_local $22) + ) + ) + (set_local $4 + (i32.add + (get_local $13) + (tee_local $12 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $4 + (i32.add + (get_local $13) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $4) + (i32.const 7) + ) + ) + ) + ) + ) + (set_local $18 + (i32.add + (i32.sub + (get_local $22) + (get_local $12) + ) + (i32.load + (i32.const 188) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $4) + ) + (i32.store + (i32.const 188) + (get_local $18) + ) + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $18) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $4) + (get_local $18) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (br $do-once40) + ) + ) + (set_local $5 + (if (result i32) + (i32.lt_u + (get_local $20) + (tee_local $18 + (i32.load + (i32.const 192) + ) + ) + ) + (block (result i32) + (i32.store + (i32.const 192) + (get_local $20) + ) + (get_local $20) + ) + (get_local $18) + ) + ) + (set_local $18 + (i32.add + (get_local $20) + (get_local $22) + ) + ) + (set_local $4 + (i32.const 624) + ) + (loop $while-in43 + (block $while-out42 + (if + (i32.eq + (i32.load + (get_local $4) + ) + (get_local $18) + ) + (block + (set_local $50 + (get_local $4) + ) + (set_local $40 + (get_local $4) + ) + (set_local $7 + (i32.const 211) + ) + (br $while-out42) + ) + ) + (br_if $while-in43 + (tee_local $4 + (i32.load offset=8 + (get_local $4) + ) + ) + ) + (set_local $28 + (i32.const 624) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 211) + ) + (if + (i32.and + (i32.load offset=12 + (get_local $40) + ) + (i32.const 8) + ) + (set_local $28 + (i32.const 624) + ) + (block + (i32.store + (get_local $50) + (get_local $20) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $40) + (i32.const 4) + ) + ) + (i32.add + (i32.load + (get_local $4) + ) + (get_local $22) + ) + ) + (set_local $12 + (i32.add + (get_local $20) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $4 + (i32.add + (get_local $20) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $4) + (i32.const 7) + ) + ) + ) + ) + (set_local $3 + (i32.add + (get_local $18) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $4 + (i32.add + (get_local $18) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $4) + (i32.const 7) + ) + ) + ) + ) + (set_local $4 + (i32.add + (get_local $12) + (get_local $9) + ) + ) + (set_local $14 + (i32.sub + (i32.sub + (get_local $3) + (get_local $12) + ) + (get_local $9) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.or + (get_local $9) + (i32.const 3) + ) + ) + (block $do-once44 + (if + (i32.ne + (get_local $3) + (get_local $13) + ) + (block + (if + (i32.eq + (get_local $3) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (tee_local $0 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $14) + ) + ) + ) + (i32.store + (i32.const 196) + (get_local $4) + ) + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $4) + (get_local $0) + ) + (get_local $0) + ) + (br $do-once44) + ) + ) + (if + (i32.eq + (i32.and + (tee_local $0 + (i32.load offset=4 + (get_local $3) + ) + ) + (i32.const 3) + ) + (i32.const 1) + ) + (block + (set_local $1 + (i32.and + (get_local $0) + (i32.const -8) + ) + ) + (set_local $6 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (block $label$break$L331 + (if + (i32.ge_u + (get_local $0) + (i32.const 256) + ) + (block + (set_local $23 + (i32.load offset=24 + (get_local $3) + ) + ) + (block $do-once47 + (if + (i32.eq + (tee_local $21 + (i32.load offset=12 + (get_local $3) + ) + ) + (get_local $3) + ) + (block + (if + (tee_local $10 + (i32.load + (tee_local $2 + (i32.add + (tee_local $8 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $10) + ) + (set_local $8 + (get_local $2) + ) + ) + (if + (tee_local $16 + (i32.load + (get_local $8) + ) + ) + (set_local $0 + (get_local $16) + ) + (block + (set_local $24 + (i32.const 0) + ) + (br $do-once47) + ) + ) + ) + (loop $while-in50 + (if + (tee_local $10 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $10) + ) + (set_local $8 + (get_local $2) + ) + (br $while-in50) + ) + ) + (if + (tee_local $10 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $10) + ) + (set_local $8 + (get_local $2) + ) + (br $while-in50) + ) + ) + ) + (if + (i32.lt_u + (get_local $8) + (get_local $5) + ) + (call $_abort) + (block + (i32.store + (get_local $8) + (i32.const 0) + ) + (set_local $24 + (get_local $0) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $2 + (i32.load offset=8 + (get_local $3) + ) + ) + (get_local $5) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $10 + (i32.add + (get_local $2) + (i32.const 12) + ) + ) + ) + (get_local $3) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $8 + (i32.add + (get_local $21) + (i32.const 8) + ) + ) + ) + (get_local $3) + ) + (block + (i32.store + (get_local $10) + (get_local $21) + ) + (i32.store + (get_local $8) + (get_local $2) + ) + (set_local $24 + (get_local $21) + ) + ) + (call $_abort) + ) + ) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (get_local $23) + ) + ) + (block $do-once51 + (if + (i32.ne + (get_local $3) + (i32.load + (tee_local $2 + (i32.add + (i32.shl + (tee_local $21 + (i32.load offset=28 + (get_local $3) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $23) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $8 + (i32.add + (get_local $23) + (i32.const 16) + ) + ) + ) + (get_local $3) + ) + (i32.store + (get_local $8) + (get_local $24) + ) + (i32.store offset=20 + (get_local $23) + (get_local $24) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (get_local $24) + ) + ) + ) + (block + (i32.store + (get_local $2) + (get_local $24) + ) + (br_if $do-once51 + (get_local $24) + ) + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $21) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + ) + ) + (if + (i32.lt_u + (get_local $24) + (tee_local $21 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $24) + (get_local $23) + ) + (if + (tee_local $8 + (i32.load + (tee_local $2 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $8) + (get_local $21) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $24) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $24) + ) + ) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (tee_local $8 + (i32.load offset=4 + (get_local $2) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $8) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $24) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $24) + ) + ) + ) + ) + (block + (set_local $21 + (i32.load offset=12 + (get_local $3) + ) + ) + (block $do-once55 + (if + (i32.ne + (tee_local $8 + (i32.load offset=8 + (get_local $3) + ) + ) + (tee_local $23 + (i32.add + (i32.shl + (get_local $6) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $8) + (get_local $5) + ) + (call $_abort) + ) + (br_if $do-once55 + (i32.eq + (i32.load offset=12 + (get_local $8) + ) + (get_local $3) + ) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $21) + (get_local $8) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $6) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + ) + (block $do-once57 + (if + (i32.eq + (get_local $21) + (get_local $23) + ) + (set_local $41 + (i32.add + (get_local $21) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $21) + (get_local $5) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $2 + (i32.add + (get_local $21) + (i32.const 8) + ) + ) + ) + (get_local $3) + ) + (block + (set_local $41 + (get_local $2) + ) + (br $do-once57) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $8) + (get_local $21) + ) + (i32.store + (get_local $41) + (get_local $8) + ) + ) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (get_local $1) + ) + ) + (set_local $14 + (i32.add + (get_local $1) + (get_local $14) + ) + ) + ) + ) + (i32.store + (tee_local $6 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (i32.and + (i32.load + (get_local $6) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $14) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $4) + (get_local $14) + ) + (get_local $14) + ) + (set_local $6 + (i32.shr_u + (get_local $14) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $14) + (i32.const 256) + ) + (block + (set_local $0 + (i32.add + (i32.shl + (get_local $6) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (block $do-once59 + (if + (i32.and + (tee_local $23 + (i32.load + (i32.const 176) + ) + ) + (tee_local $2 + (i32.shl + (i32.const 1) + (get_local $6) + ) + ) + ) + (block + (if + (i32.ge_u + (tee_local $10 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (block + (set_local $42 + (get_local $6) + ) + (set_local $34 + (get_local $10) + ) + (br $do-once59) + ) + ) + (call $_abort) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $23) + (get_local $2) + ) + ) + (set_local $42 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (set_local $34 + (get_local $0) + ) + ) + ) + ) + (i32.store + (get_local $42) + (get_local $4) + ) + (i32.store offset=12 + (get_local $34) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $34) + ) + (i32.store offset=12 + (get_local $4) + (get_local $0) + ) + (br $do-once44) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $1 + (block $do-once61 (result i32) + (if (result i32) + (tee_local $2 + (i32.shr_u + (get_local $14) + (i32.const 8) + ) + ) + (block (result i32) + (drop + (br_if $do-once61 + (i32.const 31) + (i32.gt_u + (get_local $14) + (i32.const 16777215) + ) + ) + ) + (i32.or + (i32.and + (i32.shr_u + (get_local $14) + (i32.add + (tee_local $16 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $10 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $2) + (tee_local $23 + (i32.and + (i32.shr_u + (i32.add + (get_local $2) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $23) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $6 + (i32.shl + (get_local $1) + (get_local $10) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $6) + (get_local $1) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $16) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $4) + (get_local $1) + ) + (i32.store offset=4 + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $0 + (i32.load + (i32.const 180) + ) + ) + (tee_local $16 + (i32.shl + (i32.const 1) + (get_local $1) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $0) + (get_local $16) + ) + ) + (i32.store + (get_local $2) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $2) + ) + (i32.store offset=12 + (get_local $4) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $4) + ) + (br $do-once44) + ) + ) + (set_local $16 + (i32.shl + (get_local $14) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $1) + (i32.const 1) + ) + ) + (i32.eq + (get_local $1) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $2) + ) + ) + (loop $while-in64 + (block $while-out63 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $14) + ) + (block + (set_local $35 + (get_local $0) + ) + (set_local $7 + (i32.const 281) + ) + (br $while-out63) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $16) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $16 + (i32.shl + (get_local $16) + (i32.const 1) + ) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in64) + ) + (block + (set_local $43 + (get_local $2) + ) + (set_local $51 + (get_local $0) + ) + (set_local $7 + (i32.const 278) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 278) + ) + (if + (i32.lt_u + (get_local $43) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $43) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $51) + ) + (i32.store offset=12 + (get_local $4) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $4) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 281) + ) + (if + (i32.and + (i32.ge_u + (tee_local $16 + (i32.load + (tee_local $0 + (i32.add + (get_local $35) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $35) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $16) + (get_local $4) + ) + (i32.store + (get_local $0) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $16) + ) + (i32.store offset=12 + (get_local $4) + (get_local $35) + ) + (i32.store offset=24 + (get_local $4) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block + (i32.store + (i32.const 188) + (tee_local $16 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $14) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $4) + ) + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $16) + (i32.const 1) + ) + ) + ) + ) + ) + (return + (i32.add + (get_local $12) + (i32.const 8) + ) + ) + ) + ) + ) + (loop $while-in66 + (if + (if (result i32) + (i32.le_u + (tee_local $4 + (i32.load + (get_local $28) + ) + ) + (get_local $13) + ) + (i32.gt_u + (tee_local $14 + (i32.add + (get_local $4) + (i32.load offset=4 + (get_local $28) + ) + ) + ) + (get_local $13) + ) + (i32.const 0) + ) + (set_local $0 + (get_local $14) + ) + (block + (set_local $28 + (i32.load offset=8 + (get_local $28) + ) + ) + (br $while-in66) + ) + ) + ) + (set_local $14 + (i32.add + (tee_local $12 + (i32.add + (get_local $0) + (i32.const -47) + ) + ) + (i32.const 8) + ) + ) + (set_local $4 + (i32.add + (tee_local $12 + (select + (get_local $13) + (tee_local $4 + (i32.add + (get_local $12) + (select + (i32.and + (i32.sub + (i32.const 0) + (get_local $14) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $14) + (i32.const 7) + ) + ) + ) + ) + (i32.lt_u + (get_local $4) + (tee_local $14 + (i32.add + (get_local $13) + (i32.const 16) + ) + ) + ) + ) + ) + (i32.const 8) + ) + ) + (i32.store + (i32.const 200) + (tee_local $3 + (i32.add + (get_local $20) + (tee_local $18 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $3 + (i32.add + (get_local $20) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $3) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 188) + (tee_local $16 + (i32.sub + (i32.add + (get_local $22) + (i32.const -40) + ) + (get_local $18) + ) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $16) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $3) + (get_local $16) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (i32.store + (tee_local $16 + (i32.add + (get_local $12) + (i32.const 4) + ) + ) + (i32.const 27) + ) + (i32.store + (get_local $4) + (i32.load + (i32.const 624) + ) + ) + (i32.store offset=4 + (get_local $4) + (i32.load + (i32.const 628) + ) + ) + (i32.store offset=8 + (get_local $4) + (i32.load + (i32.const 632) + ) + ) + (i32.store offset=12 + (get_local $4) + (i32.load + (i32.const 636) + ) + ) + (i32.store + (i32.const 624) + (get_local $20) + ) + (i32.store + (i32.const 628) + (get_local $22) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 632) + (get_local $4) + ) + (set_local $4 + (i32.add + (get_local $12) + (i32.const 24) + ) + ) + (loop $do-in68 + (i32.store + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + (i32.const 7) + ) + (br_if $do-in68 + (i32.lt_u + (i32.add + (get_local $4) + (i32.const 4) + ) + (get_local $0) + ) + ) + ) + (if + (i32.ne + (get_local $12) + (get_local $13) + ) + (block + (i32.store + (get_local $16) + (i32.and + (i32.load + (get_local $16) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $13) + (i32.or + (tee_local $4 + (i32.sub + (get_local $12) + (get_local $13) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (get_local $12) + (get_local $4) + ) + (set_local $3 + (i32.shr_u + (get_local $4) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.const 256) + ) + (block + (set_local $18 + (i32.add + (i32.shl + (get_local $3) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $0 + (i32.load + (i32.const 176) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $3) + ) + ) + ) + (if + (i32.lt_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $18) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $44 + (get_local $3) + ) + (set_local $36 + (get_local $2) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $0) + (get_local $1) + ) + ) + (set_local $44 + (i32.add + (get_local $18) + (i32.const 8) + ) + ) + (set_local $36 + (get_local $18) + ) + ) + ) + (i32.store + (get_local $44) + (get_local $13) + ) + (i32.store offset=12 + (get_local $36) + (get_local $13) + ) + (i32.store offset=8 + (get_local $13) + (get_local $36) + ) + (i32.store offset=12 + (get_local $13) + (get_local $18) + ) + (br $do-once40) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (tee_local $1 + (if (result i32) + (tee_local $18 + (i32.shr_u + (get_local $4) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $4) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $4) + (i32.add + (tee_local $3 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $18 + (i32.and + (i32.shr_u + (i32.add + (tee_local $0 + (i32.shl + (get_local $18) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (get_local $18) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $1) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $2 + (i32.shl + (get_local $0) + (get_local $18) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $2) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $13) + (get_local $1) + ) + (i32.store offset=20 + (get_local $13) + (i32.const 0) + ) + (i32.store + (get_local $14) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $0 + (i32.load + (i32.const 180) + ) + ) + (tee_local $2 + (i32.shl + (i32.const 1) + (get_local $1) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $0) + (get_local $2) + ) + ) + (i32.store + (get_local $3) + (get_local $13) + ) + (i32.store offset=24 + (get_local $13) + (get_local $3) + ) + (i32.store offset=12 + (get_local $13) + (get_local $13) + ) + (i32.store offset=8 + (get_local $13) + (get_local $13) + ) + (br $do-once40) + ) + ) + (set_local $2 + (i32.shl + (get_local $4) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $1) + (i32.const 1) + ) + ) + (i32.eq + (get_local $1) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $3) + ) + ) + (loop $while-in70 + (block $while-out69 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $4) + ) + (block + (set_local $37 + (get_local $0) + ) + (set_local $7 + (i32.const 307) + ) + (br $while-out69) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $3 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $2) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $2 + (i32.shl + (get_local $2) + (i32.const 1) + ) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in70) + ) + (block + (set_local $45 + (get_local $3) + ) + (set_local $52 + (get_local $0) + ) + (set_local $7 + (i32.const 304) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 304) + ) + (if + (i32.lt_u + (get_local $45) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $45) + (get_local $13) + ) + (i32.store offset=24 + (get_local $13) + (get_local $52) + ) + (i32.store offset=12 + (get_local $13) + (get_local $13) + ) + (i32.store offset=8 + (get_local $13) + (get_local $13) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 307) + ) + (if + (i32.and + (i32.ge_u + (tee_local $2 + (i32.load + (tee_local $0 + (i32.add + (get_local $37) + (i32.const 8) + ) + ) + ) + ) + (tee_local $4 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $37) + (get_local $4) + ) + ) + (block + (i32.store offset=12 + (get_local $2) + (get_local $13) + ) + (i32.store + (get_local $0) + (get_local $13) + ) + (i32.store offset=8 + (get_local $13) + (get_local $2) + ) + (i32.store offset=12 + (get_local $13) + (get_local $37) + ) + (i32.store offset=24 + (get_local $13) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + ) + (block + (if + (i32.or + (i32.eqz + (tee_local $2 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.lt_u + (get_local $20) + (get_local $2) + ) + ) + (i32.store + (i32.const 192) + (get_local $20) + ) + ) + (i32.store + (i32.const 624) + (get_local $20) + ) + (i32.store + (i32.const 628) + (get_local $22) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 212) + (i32.load + (i32.const 648) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (set_local $2 + (i32.const 0) + ) + (loop $do-in72 + (i32.store offset=12 + (tee_local $0 + (i32.add + (i32.shl + (get_local $2) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (get_local $0) + ) + (i32.store offset=8 + (get_local $0) + (get_local $0) + ) + (br_if $do-in72 + (i32.ne + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 32) + ) + ) + ) + (i32.store + (i32.const 200) + (tee_local $2 + (i32.add + (get_local $20) + (tee_local $0 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $2 + (i32.add + (get_local $20) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $2) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 188) + (tee_local $4 + (i32.sub + (i32.add + (get_local $22) + (i32.const -40) + ) + (get_local $0) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $4) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $2) + (get_local $4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + ) + ) + ) + (if + (i32.gt_u + (tee_local $22 + (i32.load + (i32.const 188) + ) + ) + (get_local $9) + ) + (block + (i32.store + (i32.const 188) + (tee_local $20 + (i32.sub + (get_local $22) + (get_local $9) + ) + ) + ) + (i32.store + (i32.const 200) + (tee_local $13 + (i32.add + (tee_local $22 + (i32.load + (i32.const 200) + ) + ) + (get_local $9) + ) + ) + ) + (i32.store offset=4 + (get_local $13) + (i32.or + (get_local $20) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $22) + (i32.or + (get_local $9) + (i32.const 3) + ) + ) + (return + (i32.add + (get_local $22) + (i32.const 8) + ) + ) + ) + ) + ) + ) + (i32.store + (call $___errno_location) + (i32.const 12) + ) + (i32.const 0) + ) + (func $_free (; 16 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (if + (i32.eqz + (get_local $0) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $0) + (i32.const -8) + ) + ) + (tee_local $14 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (tee_local $0 + (i32.and + (tee_local $4 + (i32.load + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + ) + (i32.const 3) + ) + ) + (i32.const 1) + ) + (call $_abort) + ) + (set_local $8 + (i32.add + (get_local $1) + (tee_local $5 + (i32.and + (get_local $4) + (i32.const -8) + ) + ) + ) + ) + (block $do-once + (if + (i32.and + (get_local $4) + (i32.const 1) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + ) + (block + (set_local $11 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eqz + (get_local $0) + ) + (return) + ) + (set_local $5 + (i32.add + (get_local $11) + (get_local $5) + ) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.sub + (i32.const 0) + (get_local $11) + ) + ) + ) + (get_local $14) + ) + (call $_abort) + ) + (if + (i32.eq + (get_local $1) + (i32.load + (i32.const 196) + ) + ) + (block + (if + (i32.ne + (i32.and + (tee_local $7 + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 3) + ) + (i32.const 3) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 184) + (get_local $5) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $7) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $5) + ) + (get_local $5) + ) + (return) + ) + ) + (set_local $7 + (i32.shr_u + (get_local $11) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $11) + (i32.const 256) + ) + (block + (set_local $0 + (i32.load offset=12 + (get_local $1) + ) + ) + (if + (i32.ne + (tee_local $11 + (i32.load offset=8 + (get_local $1) + ) + ) + (tee_local $4 + (i32.add + (i32.shl + (get_local $7) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $11) + (get_local $14) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $11) + ) + (get_local $1) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (get_local $11) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $7) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + (br $do-once) + ) + ) + (if + (i32.ne + (get_local $0) + (get_local $4) + ) + (block + (if + (i32.lt_u + (get_local $0) + (get_local $14) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (set_local $10 + (get_local $4) + ) + (call $_abort) + ) + ) + (set_local $10 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (i32.store offset=12 + (get_local $11) + (get_local $0) + ) + (i32.store + (get_local $10) + (get_local $11) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + (br $do-once) + ) + ) + (set_local $11 + (i32.load offset=24 + (get_local $1) + ) + ) + (block $do-once0 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $1) + ) + ) + (get_local $1) + ) + (block + (if + (tee_local $10 + (i32.load + (tee_local $7 + (i32.add + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $10) + ) + (set_local $4 + (get_local $7) + ) + ) + (if + (i32.eqz + (tee_local $0 + (i32.load + (get_local $4) + ) + ) + ) + (block + (set_local $6 + (i32.const 0) + ) + (br $do-once0) + ) + ) + ) + (loop $while-in + (if + (tee_local $10 + (i32.load + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $10) + ) + (set_local $4 + (get_local $7) + ) + (br $while-in) + ) + ) + (if + (tee_local $10 + (i32.load + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $10) + ) + (set_local $4 + (get_local $7) + ) + (br $while-in) + ) + (block + (set_local $7 + (get_local $0) + ) + (set_local $9 + (get_local $4) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $9) + (get_local $14) + ) + (call $_abort) + (block + (i32.store + (get_local $9) + (i32.const 0) + ) + (set_local $6 + (get_local $7) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $7 + (i32.load offset=8 + (get_local $1) + ) + ) + (get_local $14) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $10 + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + ) + (get_local $1) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (block + (i32.store + (get_local $10) + (get_local $0) + ) + (i32.store + (get_local $4) + (get_local $7) + ) + (set_local $6 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $11) + (block + (if + (i32.eq + (get_local $1) + (i32.load + (tee_local $7 + (i32.add + (i32.shl + (tee_local $0 + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $7) + (get_local $6) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $0) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $11) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $11) + (i32.const 16) + ) + ) + ) + (get_local $1) + ) + (i32.store + (get_local $0) + (get_local $6) + ) + (i32.store offset=20 + (get_local $11) + (get_local $6) + ) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + (br $do-once) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $6) + (tee_local $0 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $6) + (get_local $11) + ) + (if + (tee_local $4 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (get_local $0) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $6) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $6) + ) + ) + ) + ) + (if + (tee_local $4 + (i32.load offset=4 + (get_local $7) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $6) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $6) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (get_local $2) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (tee_local $5 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 1) + ) + ) + (call $_abort) + ) + (if + (i32.and + (get_local $1) + (i32.const 2) + ) + (block + (i32.store + (get_local $5) + (i32.and + (get_local $1) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $3) + ) + (get_local $3) + ) + (set_local $0 + (get_local $3) + ) + ) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 200) + ) + ) + (block + (i32.store + (i32.const 188) + (tee_local $6 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $6) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $2) + (i32.load + (i32.const 196) + ) + ) + (return) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store + (i32.const 184) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (tee_local $6 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 196) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $6) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $6) + ) + (get_local $6) + ) + (return) + ) + ) + (set_local $6 + (i32.add + (i32.and + (get_local $1) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $14 + (i32.shr_u + (get_local $1) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.ge_u + (get_local $1) + (i32.const 256) + ) + (block + (set_local $7 + (i32.load offset=24 + (get_local $8) + ) + ) + (block $do-once6 + (if + (i32.eq + (tee_local $9 + (i32.load offset=12 + (get_local $8) + ) + ) + (get_local $8) + ) + (block + (if + (tee_local $10 + (i32.load + (tee_local $0 + (i32.add + (tee_local $4 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $10) + ) + (set_local $4 + (get_local $0) + ) + ) + (if + (tee_local $0 + (i32.load + (get_local $4) + ) + ) + (set_local $3 + (get_local $0) + ) + (block + (set_local $12 + (i32.const 0) + ) + (br $do-once6) + ) + ) + ) + (loop $while-in9 + (if + (tee_local $10 + (i32.load + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $10) + ) + (set_local $4 + (get_local $0) + ) + (br $while-in9) + ) + ) + (if + (tee_local $10 + (i32.load + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $10) + ) + (set_local $4 + (get_local $0) + ) + (br $while-in9) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $12 + (get_local $3) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $0 + (i32.load offset=8 + (get_local $8) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $10 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (block + (i32.store + (get_local $10) + (get_local $9) + ) + (i32.store + (get_local $4) + (get_local $0) + ) + (set_local $12 + (get_local $9) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $7) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (tee_local $5 + (i32.add + (i32.shl + (tee_local $9 + (i32.load offset=28 + (get_local $8) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $5) + (get_local $12) + ) + (if + (i32.eqz + (get_local $12) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $9) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $7) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $9 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + ) + (get_local $8) + ) + (i32.store + (get_local $9) + (get_local $12) + ) + (i32.store offset=20 + (get_local $7) + (get_local $12) + ) + ) + (br_if $do-once4 + (i32.eqz + (get_local $12) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $12) + (tee_local $9 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $12) + (get_local $7) + ) + (if + (tee_local $1 + (i32.load + (tee_local $5 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $9) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $12) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $12) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load offset=4 + (get_local $5) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $12) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $12) + ) + ) + ) + ) + ) + ) + ) + (block + (set_local $9 + (i32.load offset=12 + (get_local $8) + ) + ) + (if + (i32.ne + (tee_local $1 + (i32.load offset=8 + (get_local $8) + ) + ) + (tee_local $7 + (i32.add + (i32.shl + (get_local $14) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $1) + ) + (get_local $8) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $9) + (get_local $1) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $14) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.ne + (get_local $9) + (get_local $7) + ) + (block + (if + (i32.lt_u + (get_local $9) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $7 + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (set_local $16 + (get_local $7) + ) + (call $_abort) + ) + ) + (set_local $16 + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + ) + (i32.store offset=12 + (get_local $1) + (get_local $9) + ) + (i32.store + (get_local $16) + (get_local $1) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $6) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $6) + ) + (get_local $6) + ) + (if + (i32.eq + (get_local $2) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (get_local $6) + ) + (return) + ) + (set_local $0 + (get_local $6) + ) + ) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.const 256) + ) + (block + (set_local $1 + (i32.add + (i32.shl + (get_local $3) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $5 + (i32.load + (i32.const 176) + ) + ) + (tee_local $6 + (i32.shl + (i32.const 1) + (get_local $3) + ) + ) + ) + (if + (i32.lt_u + (tee_local $16 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $15 + (get_local $3) + ) + (set_local $13 + (get_local $16) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $5) + (get_local $6) + ) + ) + (set_local $15 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $13 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $2) + ) + (i32.store offset=12 + (get_local $13) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $13) + ) + (i32.store offset=12 + (get_local $2) + (get_local $1) + ) + (return) + ) + ) + (set_local $5 + (i32.add + (i32.shl + (tee_local $3 + (if (result i32) + (tee_local $1 + (i32.shr_u + (get_local $0) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $0) + (i32.add + (tee_local $5 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $15 + (i32.shl + (get_local $1) + (tee_local $13 + (i32.and + (i32.shr_u + (i32.add + (get_local $1) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $13) + ) + (tee_local $15 + (i32.and + (i32.shr_u + (i32.add + (tee_local $6 + (i32.shl + (get_local $15) + (get_local $1) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $6) + (get_local $15) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $5) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $2) + (get_local $3) + ) + (i32.store offset=20 + (get_local $2) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $2) + (i32.const 0) + ) + (if + (i32.and + (tee_local $15 + (i32.load + (i32.const 180) + ) + ) + (tee_local $6 + (i32.shl + (i32.const 1) + (get_local $3) + ) + ) + ) + (block + (set_local $13 + (i32.shl + (get_local $0) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $3) + (i32.const 1) + ) + ) + (i32.eq + (get_local $3) + (i32.const 31) + ) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $5) + ) + ) + (loop $while-in15 + (block $while-out14 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $1) + ) + (i32.const -8) + ) + (get_local $0) + ) + (block + (set_local $17 + (get_local $1) + ) + (set_local $0 + (i32.const 130) + ) + (br $while-out14) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $16 + (i32.add + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $13) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $13 + (i32.shl + (get_local $13) + (i32.const 1) + ) + ) + (set_local $1 + (get_local $3) + ) + (br $while-in15) + ) + (block + (set_local $18 + (get_local $16) + ) + (set_local $19 + (get_local $1) + ) + (set_local $0 + (i32.const 127) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (i32.const 127) + ) + (if + (i32.lt_u + (get_local $18) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $18) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $19) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (i32.const 130) + ) + (if + (i32.and + (i32.ge_u + (tee_local $13 + (i32.load + (tee_local $1 + (i32.add + (get_local $17) + (i32.const 8) + ) + ) + ) + ) + (tee_local $5 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $17) + (get_local $5) + ) + ) + (block + (i32.store offset=12 + (get_local $13) + (get_local $2) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $13) + ) + (i32.store offset=12 + (get_local $2) + (get_local $17) + ) + (i32.store offset=24 + (get_local $2) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $15) + (get_local $6) + ) + ) + (i32.store + (get_local $5) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $5) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + (i32.store + (i32.const 208) + (tee_local $2 + (i32.add + (i32.load + (i32.const 208) + ) + (i32.const -1) + ) + ) + ) + (if + (get_local $2) + (return) + (set_local $0 + (i32.const 632) + ) + ) + (loop $while-in17 + (if + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (block + (set_local $0 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (br $while-in17) + ) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + ) + (func $___stdio_write (; 17 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (set_local $10 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 16) + ) + ) + (set_local $12 + (get_local $10) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $10) + (i32.const 32) + ) + ) + (tee_local $7 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $3) + (tee_local $9 + (i32.sub + (i32.load + (tee_local $13 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (get_local $7) + ) + ) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (get_local $2) + ) + (set_local $1 + (i32.add + (get_local $0) + (i32.const 60) + ) + ) + (set_local $7 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (set_local $4 + (get_local $3) + ) + (set_local $3 + (i32.const 2) + ) + (set_local $5 + (i32.add + (get_local $9) + (get_local $2) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eq + (get_local $5) + (tee_local $6 + (if (result i32) + (i32.load + (i32.const 8) + ) + (block (result i32) + (call $_pthread_cleanup_push + (i32.const 4) + (get_local $0) + ) + (i32.store + (get_local $12) + (i32.load + (get_local $1) + ) + ) + (i32.store offset=4 + (get_local $12) + (get_local $4) + ) + (i32.store offset=8 + (get_local $12) + (get_local $3) + ) + (set_local $9 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $12) + ) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + (get_local $9) + ) + (block (result i32) + (i32.store + (get_local $11) + (i32.load + (get_local $1) + ) + ) + (i32.store offset=4 + (get_local $11) + (get_local $4) + ) + (i32.store offset=8 + (get_local $11) + (get_local $3) + ) + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $11) + ) + ) + ) + ) + ) + ) + (block + (set_local $1 + (i32.const 6) + ) + (br $while-out) + ) + ) + (if + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (block + (set_local $16 + (get_local $4) + ) + (set_local $17 + (get_local $3) + ) + (set_local $1 + (i32.const 8) + ) + (br $while-out) + ) + ) + (set_local $9 + (i32.sub + (get_local $5) + (get_local $6) + ) + ) + (if + (i32.le_u + (get_local $6) + (tee_local $14 + (i32.load offset=4 + (get_local $4) + ) + ) + ) + (set_local $5 + (if (result i32) + (i32.eq + (get_local $3) + (i32.const 2) + ) + (block (result i32) + (i32.store + (get_local $8) + (i32.add + (i32.load + (get_local $8) + ) + (get_local $6) + ) + ) + (set_local $3 + (i32.const 2) + ) + (get_local $14) + ) + (get_local $14) + ) + ) + (block + (i32.store + (get_local $8) + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + ) + (i32.store + (get_local $13) + (get_local $5) + ) + (set_local $5 + (i32.load offset=12 + (get_local $4) + ) + ) + (set_local $6 + (i32.sub + (get_local $6) + (get_local $14) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + (i32.store + (get_local $4) + (i32.add + (i32.load + (get_local $4) + ) + (get_local $6) + ) + ) + (i32.store offset=4 + (get_local $4) + (i32.sub + (get_local $5) + (get_local $6) + ) + ) + (set_local $5 + (get_local $9) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 6) + ) + (block + (i32.store offset=16 + (get_local $0) + (i32.add + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.store + (get_local $8) + (tee_local $7 + (get_local $5) + ) + ) + (i32.store + (get_local $13) + (get_local $7) + ) + (set_local $15 + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 8) + ) + (block + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $13) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (set_local $15 + (if (result i32) + (i32.eq + (get_local $17) + (i32.const 2) + ) + (i32.const 0) + (i32.sub + (get_local $2) + (i32.load offset=4 + (get_local $16) + ) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $10) + ) + (get_local $15) + ) + (func $___fwritex (; 18 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (if + (tee_local $5 + (i32.load + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $5) + ) + (set_local $7 + (i32.const 5) + ) + ) + (if + (call $___towrite + (get_local $2) + ) + (set_local $4 + (i32.const 0) + ) + (block + (set_local $6 + (i32.load + (get_local $3) + ) + ) + (set_local $7 + (i32.const 5) + ) + ) + ) + ) + (block $label$break$L5 + (if + (i32.eq + (get_local $7) + (i32.const 5) + ) + (block + (if + (i32.lt_u + (i32.sub + (get_local $6) + (tee_local $3 + (i32.load + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 20) + ) + ) + ) + ) + ) + (get_local $1) + ) + (block + (set_local $4 + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (br $label$break$L5) + ) + ) + (set_local $4 + (get_local $3) + ) + (block $label$break$L10 + (if + (i32.gt_s + (i32.load8_s offset=75 + (get_local $2) + ) + (i32.const -1) + ) + (block + (set_local $3 + (get_local $1) + ) + (loop $while-in + (if + (i32.eqz + (get_local $3) + ) + (block + (set_local $3 + (i32.const 0) + ) + (br $label$break$L10) + ) + ) + (if + (i32.ne + (i32.load8_s + (i32.add + (get_local $0) + (tee_local $6 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + (i32.const 10) + ) + (block + (set_local $3 + (get_local $6) + ) + (br $while-in) + ) + ) + ) + (if + (i32.lt_u + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + (get_local $3) + ) + (block + (set_local $4 + (get_local $3) + ) + (br $label$break$L5) + ) + ) + (set_local $1 + (i32.sub + (get_local $1) + (get_local $3) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (get_local $3) + ) + ) + (set_local $4 + (i32.load + (get_local $5) + ) + ) + ) + (set_local $3 + (i32.const 0) + ) + ) + ) + (drop + (call $_memcpy + (get_local $4) + (get_local $0) + (get_local $1) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $1) + ) + ) + (set_local $4 + (i32.add + (get_local $3) + (get_local $1) + ) + ) + ) + ) + ) + (get_local $4) + ) + (func $_fflush (; 19 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (block $do-once + (if + (get_local $0) + (block + (if + (i32.le_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (block + (set_local $2 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (br $do-once) + ) + ) + (set_local $1 + (i32.eqz + (call $___lockfile + (get_local $0) + ) + ) + ) + (set_local $2 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (if + (i32.eqz + (get_local $1) + ) + (call $___unlockfile + (get_local $0) + ) + ) + ) + (block + (set_local $0 + (if (result i32) + (i32.load + (i32.const 56) + ) + (call $_fflush + (i32.load + (i32.const 56) + ) + ) + (i32.const 0) + ) + ) + (call $___lock + (i32.const 36) + ) + (if + (tee_local $2 + (i32.load + (i32.const 32) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (set_local $0 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (get_local $1) + ) + (i32.const -1) + ) + (call $___lockfile + (get_local $1) + ) + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.load offset=20 + (get_local $1) + ) + (i32.load offset=28 + (get_local $1) + ) + ) + (set_local $2 + (i32.or + (call $___fflush_unlocked + (get_local $1) + ) + (get_local $2) + ) + ) + ) + (if + (get_local $0) + (call $___unlockfile + (get_local $1) + ) + ) + (br_if $while-in + (tee_local $1 + (i32.load offset=56 + (get_local $1) + ) + ) + ) + ) + ) + (set_local $2 + (get_local $0) + ) + ) + (call $___unlock + (i32.const 36) + ) + ) + ) + ) + (get_local $2) + ) + (func $_strlen (; 20 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (block $label$break$L1 + (if + (i32.and + (tee_local $3 + (get_local $0) + ) + (i32.const 3) + ) + (block + (set_local $4 + (get_local $3) + ) + (loop $while-in + (if + (i32.eqz + (i32.load8_s + (get_local $0) + ) + ) + (block + (set_local $5 + (get_local $4) + ) + (br $label$break$L1) + ) + ) + (br_if $while-in + (i32.and + (tee_local $4 + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 3) + ) + ) + (set_local $1 + (get_local $0) + ) + (set_local $2 + (i32.const 4) + ) + ) + ) + (block + (set_local $1 + (get_local $0) + ) + (set_local $2 + (i32.const 4) + ) + ) + ) + ) + (if + (i32.eq + (get_local $2) + (i32.const 4) + ) + (block + (set_local $2 + (get_local $1) + ) + (loop $while-in1 + (if + (i32.and + (i32.xor + (i32.and + (tee_local $1 + (i32.load + (get_local $2) + ) + ) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $1) + (i32.const -16843009) + ) + ) + (set_local $0 + (get_local $2) + ) + (block + (set_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + (if + (i32.and + (get_local $1) + (i32.const 255) + ) + (block + (set_local $1 + (get_local $0) + ) + (loop $while-in3 + (if + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + (block + (set_local $1 + (get_local $0) + ) + (br $while-in3) + ) + ) + ) + ) + ) + (set_local $5 + (get_local $0) + ) + ) + ) + (i32.sub + (get_local $5) + (get_local $3) + ) + ) + (func $___overflow (; 21 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (set_local $5 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store8 + (tee_local $6 + (get_local $5) + ) + (tee_local $9 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $3) + ) + (set_local $8 + (i32.const 4) + ) + ) + (if + (call $___towrite + (get_local $0) + ) + (set_local $4 + (i32.const -1) + ) + (block + (set_local $7 + (i32.load + (get_local $2) + ) + ) + (set_local $8 + (i32.const 4) + ) + ) + ) + ) + (block $do-once + (if + (i32.eq + (get_local $8) + (i32.const 4) + ) + (block + (if + (if (result i32) + (i32.lt_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (get_local $7) + ) + (i32.ne + (tee_local $10 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (i32.load8_s offset=75 + (get_local $0) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $3) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $2) + (get_local $9) + ) + (set_local $4 + (get_local $10) + ) + (br $do-once) + ) + ) + (set_local $4 + (if (result i32) + (i32.eq + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (get_local $6) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + (i32.const 1) + ) + (i32.load8_u + (get_local $6) + ) + (i32.const -1) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + (get_local $4) + ) + (func $___fflush_unlocked (; 22 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (tee_local $0 + (if (result i32) + (if (result i32) + (i32.gt_u + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + (block (result i32) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (i32.eqz + (i32.load + (get_local $1) + ) + ) + ) + (i32.const 0) + ) + (i32.const -1) + (block (result i32) + (if + (i32.lt_u + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (tee_local $6 + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.sub + (get_local $4) + (get_local $6) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=40 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + ) + (func $_memcpy (; 23 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.ge_s + (get_local $2) + (i32.const 4096) + ) + (return + (call $_emscripten_memcpy_big + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (set_local $3 + (get_local $0) + ) + (if + (i32.eq + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.and + (get_local $1) + (i32.const 3) + ) + ) + (block + (loop $while-in + (if + (i32.and + (get_local $0) + (i32.const 3) + ) + (block + (if + (i32.eqz + (get_local $2) + ) + (return + (get_local $3) + ) + ) + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (loop $while-in1 + (if + (i32.ge_s + (get_local $2) + (i32.const 4) + ) + (block + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (get_local $3) + ) + (func $runPostSets (; 24 ;) + (nop) + ) + (func $_memset (; 25 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (if + (i32.ge_s + (get_local $2) + (i32.const 20) + ) + (block + (set_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (if + (tee_local $3 + (i32.and + (get_local $0) + (i32.const 3) + ) + ) + (block + (set_local $3 + (i32.sub + (i32.add + (get_local $0) + (i32.const 4) + ) + (get_local $3) + ) + ) + (loop $while-in + (if + (i32.lt_s + (get_local $0) + (get_local $3) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (set_local $3 + (i32.or + (i32.or + (i32.or + (get_local $1) + (i32.shl + (get_local $1) + (i32.const 8) + ) + ) + (i32.shl + (get_local $1) + (i32.const 16) + ) + ) + (i32.shl + (get_local $1) + (i32.const 24) + ) + ) + ) + (set_local $5 + (i32.and + (get_local $4) + (i32.const -4) + ) + ) + (loop $while-in1 + (if + (i32.lt_s + (get_local $0) + (get_local $5) + ) + (block + (i32.store + (get_local $0) + (get_local $3) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.lt_s + (get_local $0) + (get_local $4) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $_puts (; 26 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (set_local $3 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (tee_local $1 + (i32.load + (i32.const 52) + ) + ) + ) + (i32.const -1) + ) + (call $___lockfile + (get_local $1) + ) + (i32.const 0) + ) + ) + (set_local $0 + (block $do-once (result i32) + (if (result i32) + (i32.lt_s + (i32.add + (call $_fwrite + (get_local $0) + (call $_strlen + (get_local $0) + ) + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + (i32.const 0) + ) + (i32.const 1) + (block (result i32) + (if + (if (result i32) + (i32.ne + (i32.load8_s offset=75 + (get_local $1) + ) + (i32.const 10) + ) + (i32.lt_u + (tee_local $2 + (i32.load + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $1) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $4) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $2) + (i32.const 10) + ) + (br $do-once + (i32.const 0) + ) + ) + ) + (i32.lt_s + (call $___overflow + (get_local $1) + (i32.const 10) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (if + (get_local $3) + (call $___unlockfile + (get_local $1) + ) + ) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (func $___stdio_seek (; 27 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (i32.store + (tee_local $3 + (get_local $4) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + (i32.store offset=16 + (get_local $3) + (get_local $2) + ) + (set_local $0 + (if (result i32) + (i32.lt_s + (call $___syscall_ret + (call $___syscall140 + (i32.const 140) + (get_local $3) + ) + ) + (i32.const 0) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.const -1) + ) + (i32.const -1) + ) + (i32.load + (get_local $0) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $___towrite (; 28 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $2 + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 74) + ) + ) + ) + ) + (i32.store8 + (get_local $1) + (i32.or + (i32.add + (get_local $2) + (i32.const 255) + ) + (get_local $2) + ) + ) + (tee_local $0 + (if (result i32) + (i32.and + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.const 8) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.or + (get_local $2) + (i32.const 32) + ) + ) + (i32.const -1) + ) + (block (result i32) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=28 + (get_local $0) + (tee_local $1 + (i32.load offset=44 + (get_local $0) + ) + ) + ) + (i32.store offset=20 + (get_local $0) + (get_local $1) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (get_local $1) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (func $_fwrite (; 29 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.mul + (get_local $2) + (get_local $1) + ) + ) + (if + (i32.gt_s + (i32.load offset=76 + (get_local $3) + ) + (i32.const -1) + ) + (block + (set_local $5 + (i32.eqz + (call $___lockfile + (get_local $3) + ) + ) + ) + (set_local $0 + (call $___fwritex + (get_local $0) + (get_local $4) + (get_local $3) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (call $___unlockfile + (get_local $3) + ) + ) + ) + (set_local $0 + (call $___fwritex + (get_local $0) + (get_local $4) + (get_local $3) + ) + ) + ) + (if + (i32.ne + (get_local $0) + (get_local $4) + ) + (set_local $2 + (if (result i32) + (get_local $1) + (i32.div_u + (get_local $0) + (get_local $1) + ) + (i32.const 0) + ) + ) + ) + (get_local $2) + ) + (func $___stdout_write (; 30 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 80) + ) + ) + (set_local $3 + (get_local $4) + ) + (i32.store offset=36 + (get_local $0) + (i32.const 5) + ) + (if + (if (result i32) + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 64) + ) + (i32.const 0) + (block (result i32) + (i32.store + (get_local $3) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 21505) + ) + (i32.store offset=8 + (get_local $3) + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + (call $___syscall54 + (i32.const 54) + (get_local $3) + ) + ) + ) + (i32.store8 offset=75 + (get_local $0) + (i32.const -1) + ) + ) + (set_local $3 + (call $___stdio_write + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $3) + ) + (func $___stdio_close (; 31 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $2 + (get_local $1) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (set_local $0 + (call $___syscall_ret + (call $___syscall6 + (i32.const 6) + (get_local $2) + ) + ) + ) + (set_global $STACKTOP + (get_local $1) + ) + (get_local $0) + ) + (func $___syscall_ret (; 32 ;) (param $0 i32) (result i32) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const -4096) + ) + (block (result i32) + (i32.store + (call $___errno_location) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + (get_local $0) + ) + ) + (func $dynCall_iiii (; 33 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call_indirect (type $FUNCSIG$iiii) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (func $stackAlloc (; 34 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $0) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $___errno_location (; 35 ;) (result i32) + (if (result i32) + (i32.load + (i32.const 8) + ) + (i32.load offset=60 + (call $_pthread_self) + ) + (i32.const 60) + ) + ) + (func $setThrew (; 36 ;) (param $0 i32) (param $1 i32) + (if + (i32.eqz + (get_global $__THREW__) + ) + (block + (set_global $__THREW__ + (get_local $0) + ) + (set_global $threwValue + (get_local $1) + ) + ) + ) + ) + (func $dynCall_ii (; 37 ;) (param $0 i32) (param $1 i32) (result i32) + (call_indirect (type $FUNCSIG$ii) + (get_local $1) + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + ) + (func $_cleanup_418 (; 38 ;) (param $0 i32) + (if + (i32.eqz + (i32.load offset=68 + (get_local $0) + ) + ) + (call $___unlockfile + (get_local $0) + ) + ) + ) + (func $establishStackSpace (; 39 ;) (param $0 i32) (param $1 i32) + (set_global $STACKTOP + (get_local $0) + ) + (set_global $STACK_MAX + (get_local $1) + ) + ) + (func $dynCall_vi (; 40 ;) (param $0 i32) (param $1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $1) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 10) + ) + ) + ) + (func $b1 (; 41 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $abort + (i32.const 1) + ) + (i32.const 0) + ) + (func $stackRestore (; 42 ;) (param $0 i32) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $setTempRet0 (; 43 ;) (param $0 i32) + (set_global $tempRet0 + (get_local $0) + ) + ) + (func $b0 (; 44 ;) (param $0 i32) (result i32) + (call $abort + (i32.const 0) + ) + (i32.const 0) + ) + (func $___unlockfile (; 45 ;) (param $0 i32) + (nop) + ) + (func $___lockfile (; 46 ;) (param $0 i32) (result i32) + (i32.const 0) + ) + (func $getTempRet0 (; 47 ;) (result i32) + (get_global $tempRet0) + ) + (func $_main (; 48 ;) (result i32) + (drop + (call $_puts + (i32.const 672) + ) + ) + (i32.const 0) + ) + (func $stackSave (; 49 ;) (result i32) + (get_global $STACKTOP) + ) + (func $b2 (; 50 ;) (param $0 i32) + (call $abort + (i32.const 2) + ) + ) +) diff --git a/src/binaryen/test/emcc_O2_hello_world.fromasm.clamp b/src/binaryen/test/emcc_O2_hello_world.fromasm.clamp new file mode 100644 index 0000000000..8d7fbec6f3 --- /dev/null +++ b/src/binaryen/test/emcc_O2_hello_world.fromasm.clamp @@ -0,0 +1,9754 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "abort" (func $abort (param i32))) + (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) + (import "env" "_pthread_self" (func $_pthread_self (result i32))) + (import "env" "_sysconf" (func $_sysconf (param i32) (result i32))) + (import "env" "___lock" (func $___lock (param i32))) + (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) + (import "env" "_abort" (func $_abort)) + (import "env" "_sbrk" (func $_sbrk (param i32) (result i32))) + (import "env" "_time" (func $_time (param i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) + (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $___unlock (param i32))) + (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) + (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 18 18 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (elem (get_global $tableBase) $b0 $___stdio_close $b1 $b1 $___stdout_write $___stdio_seek $b1 $___stdio_write $b1 $b1 $b2 $b2 $b2 $b2 $_cleanup_418 $b2 $b2 $b2) + (data (i32.const 1024) "emcc_O2_hello_world.asm.js") + (export "_free" (func $_free)) + (export "_main" (func $_main)) + (export "_memset" (func $_memset)) + (export "_malloc" (func $_malloc)) + (export "_memcpy" (func $_memcpy)) + (export "_fflush" (func $_fflush)) + (export "___errno_location" (func $___errno_location)) + (export "runPostSets" (func $runPostSets)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackSave" (func $stackSave)) + (export "stackRestore" (func $stackRestore)) + (export "establishStackSpace" (func $establishStackSpace)) + (export "setThrew" (func $setThrew)) + (export "setTempRet0" (func $setTempRet0)) + (export "getTempRet0" (func $getTempRet0)) + (export "dynCall_ii" (func $dynCall_ii)) + (export "dynCall_iiii" (func $dynCall_iiii)) + (export "dynCall_vi" (func $dynCall_vi)) + (func $_malloc (; 15 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (local $47 i32) + (local $48 i32) + (local $49 i32) + (local $50 i32) + (local $51 i32) + (local $52 i32) + (block $do-once + (if + (i32.lt_u + (get_local $0) + (i32.const 245) + ) + (block + (if + (i32.and + (tee_local $2 + (i32.shr_u + (tee_local $15 + (i32.load + (i32.const 176) + ) + ) + (tee_local $6 + (i32.shr_u + (tee_local $9 + (select + (i32.const 16) + (i32.and + (i32.add + (get_local $0) + (i32.const 11) + ) + (i32.const -8) + ) + (i32.lt_u + (get_local $0) + (i32.const 11) + ) + ) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 3) + ) + (block + (set_local $2 + (i32.load + (tee_local $17 + (i32.add + (tee_local $0 + (i32.load + (tee_local $5 + (i32.add + (tee_local $1 + (i32.add + (i32.shl + (tee_local $10 + (i32.add + (i32.xor + (i32.and + (get_local $2) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $6) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.ne + (get_local $1) + (get_local $2) + ) + (block + (if + (i32.lt_u + (get_local $2) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $7 + (i32.add + (get_local $2) + (i32.const 12) + ) + ) + ) + (get_local $0) + ) + (block + (i32.store + (get_local $7) + (get_local $1) + ) + (i32.store + (get_local $5) + (get_local $2) + ) + ) + (call $_abort) + ) + ) + (i32.store + (i32.const 176) + (i32.and + (get_local $15) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $10) + ) + (i32.const -1) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.or + (tee_local $2 + (i32.shl + (get_local $10) + (i32.const 3) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (i32.add + (get_local $0) + (get_local $2) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 1) + ) + ) + (return + (get_local $17) + ) + ) + ) + (if + (i32.gt_u + (get_local $9) + (tee_local $5 + (i32.load + (i32.const 184) + ) + ) + ) + (block + (if + (get_local $2) + (block + (set_local $1 + (i32.and + (i32.shr_u + (tee_local $2 + (i32.add + (i32.and + (tee_local $1 + (i32.and + (i32.shl + (get_local $2) + (get_local $6) + ) + (i32.or + (tee_local $2 + (i32.shl + (i32.const 2) + (get_local $6) + ) + ) + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $1 + (i32.load + (tee_local $7 + (i32.add + (tee_local $0 + (i32.load + (tee_local $19 + (i32.add + (tee_local $11 + (i32.add + (i32.shl + (tee_local $10 + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $2) + (get_local $1) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $1) + ) + (tee_local $7 + (i32.and + (i32.shr_u + (tee_local $0 + (i32.shr_u + (get_local $7) + (get_local $2) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $11 + (i32.shr_u + (get_local $0) + (get_local $7) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $11 + (i32.and + (i32.shr_u + (tee_local $19 + (i32.shr_u + (get_local $11) + (get_local $0) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $19) + (get_local $11) + ) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.ne + (get_local $11) + (get_local $1) + ) + (block + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 12) + ) + ) + ) + (get_local $0) + ) + (block + (i32.store + (get_local $2) + (get_local $11) + ) + (i32.store + (get_local $19) + (get_local $1) + ) + (set_local $17 + (i32.load + (i32.const 184) + ) + ) + ) + (call $_abort) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (get_local $15) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $10) + ) + (i32.const -1) + ) + ) + ) + (set_local $17 + (get_local $5) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.or + (get_local $9) + (i32.const 3) + ) + ) + (i32.store offset=4 + (tee_local $15 + (i32.add + (get_local $0) + (get_local $9) + ) + ) + (i32.or + (tee_local $5 + (i32.sub + (i32.shl + (get_local $10) + (i32.const 3) + ) + (get_local $9) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $15) + (get_local $5) + ) + (get_local $5) + ) + (if + (get_local $17) + (block + (set_local $1 + (i32.load + (i32.const 196) + ) + ) + (set_local $11 + (i32.add + (i32.shl + (tee_local $19 + (i32.shr_u + (get_local $17) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $6 + (i32.load + (i32.const 176) + ) + ) + (tee_local $2 + (i32.shl + (i32.const 1) + (get_local $19) + ) + ) + ) + (if + (i32.lt_u + (tee_local $17 + (i32.load + (tee_local $19 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $38 + (get_local $19) + ) + (set_local $31 + (get_local $17) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $6) + (get_local $2) + ) + ) + (set_local $38 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + (set_local $31 + (get_local $11) + ) + ) + ) + (i32.store + (get_local $38) + (get_local $1) + ) + (i32.store offset=12 + (get_local $31) + (get_local $1) + ) + (i32.store offset=8 + (get_local $1) + (get_local $31) + ) + (i32.store offset=12 + (get_local $1) + (get_local $11) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $5) + ) + (i32.store + (i32.const 196) + (get_local $15) + ) + (return + (get_local $7) + ) + ) + ) + (if + (tee_local $15 + (i32.load + (i32.const 180) + ) + ) + (block + (set_local $15 + (i32.and + (i32.shr_u + (tee_local $5 + (i32.add + (i32.and + (get_local $15) + (i32.sub + (i32.const 0) + (get_local $15) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $2 + (i32.sub + (i32.and + (i32.load offset=4 + (tee_local $17 + (i32.load offset=480 + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $5 + (i32.and + (i32.shr_u + (tee_local $11 + (i32.shr_u + (get_local $5) + (get_local $15) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $15) + ) + (tee_local $11 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $11) + (get_local $5) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $2 + (i32.shr_u + (get_local $1) + (get_local $11) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $6 + (i32.shr_u + (get_local $2) + (get_local $1) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $6) + (get_local $2) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const -8) + ) + (get_local $9) + ) + ) + (set_local $6 + (get_local $17) + ) + (set_local $1 + (get_local $17) + ) + (loop $while-in + (block $while-out + (if + (tee_local $17 + (i32.load offset=16 + (get_local $6) + ) + ) + (set_local $0 + (get_local $17) + ) + (if + (tee_local $11 + (i32.load offset=20 + (get_local $6) + ) + ) + (set_local $0 + (get_local $11) + ) + (block + (set_local $8 + (get_local $2) + ) + (set_local $3 + (get_local $1) + ) + (br $while-out) + ) + ) + ) + (set_local $11 + (i32.lt_u + (tee_local $17 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $9) + ) + ) + (get_local $2) + ) + ) + (set_local $2 + (select + (get_local $17) + (get_local $2) + (get_local $11) + ) + ) + (set_local $6 + (get_local $0) + ) + (set_local $1 + (select + (get_local $0) + (get_local $1) + (get_local $11) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (get_local $3) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $3) + (tee_local $6 + (i32.add + (get_local $3) + (get_local $9) + ) + ) + ) + (call $_abort) + ) + (set_local $2 + (i32.load offset=24 + (get_local $3) + ) + ) + (block $do-once4 + (if + (i32.eq + (tee_local $7 + (i32.load offset=12 + (get_local $3) + ) + ) + (get_local $3) + ) + (block + (if + (tee_local $10 + (i32.load + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $17 + (get_local $10) + ) + (set_local $5 + (get_local $0) + ) + ) + (if + (tee_local $17 + (i32.load + (tee_local $11 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (set_local $5 + (get_local $11) + ) + (block + (set_local $19 + (i32.const 0) + ) + (br $do-once4) + ) + ) + ) + (loop $while-in7 + (if + (tee_local $10 + (i32.load + (tee_local $0 + (i32.add + (get_local $17) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $17 + (get_local $10) + ) + (set_local $5 + (get_local $0) + ) + (br $while-in7) + ) + ) + (if + (tee_local $10 + (i32.load + (tee_local $0 + (i32.add + (get_local $17) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $17 + (get_local $10) + ) + (set_local $5 + (get_local $0) + ) + (br $while-in7) + ) + ) + ) + (if + (i32.lt_u + (get_local $5) + (get_local $1) + ) + (call $_abort) + (block + (i32.store + (get_local $5) + (i32.const 0) + ) + (set_local $19 + (get_local $17) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $0 + (i32.load offset=8 + (get_local $3) + ) + ) + (get_local $1) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $10 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + (get_local $3) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $11 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + ) + (get_local $3) + ) + (block + (i32.store + (get_local $10) + (get_local $7) + ) + (i32.store + (get_local $11) + (get_local $0) + ) + (set_local $19 + (get_local $7) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once8 + (if + (get_local $2) + (block + (if + (i32.eq + (get_local $3) + (i32.load + (tee_local $1 + (i32.add + (i32.shl + (tee_local $7 + (i32.load offset=28 + (get_local $3) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $1) + (get_local $19) + ) + (if + (i32.eqz + (get_local $19) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $7) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $2) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $7 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + (get_local $3) + ) + (i32.store + (get_local $7) + (get_local $19) + ) + (i32.store offset=20 + (get_local $2) + (get_local $19) + ) + ) + (br_if $do-once8 + (i32.eqz + (get_local $19) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $19) + (tee_local $7 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $19) + (get_local $2) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $3) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $7) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $19) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $19) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load offset=20 + (get_local $3) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $19) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $19) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $8) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $3) + (i32.or + (tee_local $2 + (i32.add + (get_local $8) + (get_local $9) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $1 + (i32.add + (i32.add + (get_local $3) + (get_local $2) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $1) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $9) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $6) + (i32.or + (get_local $8) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $6) + (get_local $8) + ) + (get_local $8) + ) + (if + (tee_local $1 + (i32.load + (i32.const 184) + ) + ) + (block + (set_local $2 + (i32.load + (i32.const 196) + ) + ) + (set_local $1 + (i32.add + (i32.shl + (tee_local $7 + (i32.shr_u + (get_local $1) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $0 + (i32.load + (i32.const 176) + ) + ) + (tee_local $11 + (i32.shl + (i32.const 1) + (get_local $7) + ) + ) + ) + (if + (i32.lt_u + (tee_local $10 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $39 + (get_local $7) + ) + (set_local $32 + (get_local $10) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $0) + (get_local $11) + ) + ) + (set_local $39 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $32 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $39) + (get_local $2) + ) + (i32.store offset=12 + (get_local $32) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $32) + ) + (i32.store offset=12 + (get_local $2) + (get_local $1) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $8) + ) + (i32.store + (i32.const 196) + (get_local $6) + ) + ) + ) + (return + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.le_u + (get_local $0) + (i32.const -65) + ) + (block + (set_local $2 + (i32.and + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 11) + ) + ) + (i32.const -8) + ) + ) + (if + (tee_local $11 + (i32.load + (i32.const 180) + ) + ) + (block + (set_local $0 + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + (block $label$break$L123 + (if + (tee_local $15 + (i32.load offset=480 + (i32.shl + (tee_local $9 + (if (result i32) + (tee_local $10 + (i32.shr_u + (get_local $1) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $2) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $2) + (i32.add + (tee_local $15 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $10 + (i32.and + (i32.shr_u + (i32.add + (tee_local $7 + (i32.shl + (get_local $10) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (get_local $10) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $1) + ) + (tee_local $7 + (i32.and + (i32.shr_u + (i32.add + (tee_local $17 + (i32.shl + (get_local $7) + (get_local $10) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $17) + (get_local $7) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $15) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + ) + ) + (block + (set_local $7 + (get_local $0) + ) + (set_local $17 + (i32.const 0) + ) + (set_local $1 + (i32.shl + (get_local $2) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $9) + (i32.const 1) + ) + ) + (i32.eq + (get_local $9) + (i32.const 31) + ) + ) + ) + ) + (set_local $10 + (get_local $15) + ) + (set_local $5 + (i32.const 0) + ) + (loop $while-in14 + (if + (i32.lt_u + (tee_local $0 + (i32.sub + (tee_local $19 + (i32.and + (i32.load offset=4 + (get_local $10) + ) + (i32.const -8) + ) + ) + (get_local $2) + ) + ) + (get_local $7) + ) + (if + (i32.eq + (get_local $19) + (get_local $2) + ) + (block + (set_local $27 + (get_local $0) + ) + (set_local $25 + (get_local $10) + ) + (set_local $29 + (get_local $10) + ) + (set_local $7 + (i32.const 90) + ) + (br $label$break$L123) + ) + (block + (set_local $7 + (get_local $0) + ) + (set_local $5 + (get_local $10) + ) + ) + ) + ) + (set_local $19 + (select + (get_local $17) + (tee_local $0 + (i32.load offset=20 + (get_local $10) + ) + ) + (i32.or + (i32.eqz + (get_local $0) + ) + (i32.eq + (get_local $0) + (tee_local $10 + (i32.load + (i32.add + (i32.add + (get_local $10) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $1) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.eqz + (get_local $10) + ) + ) + (block + (set_local $33 + (get_local $7) + ) + (set_local $6 + (get_local $19) + ) + (set_local $30 + (get_local $5) + ) + (set_local $7 + (i32.const 86) + ) + ) + (block + (set_local $17 + (get_local $19) + ) + (set_local $1 + (i32.shl + (get_local $1) + (i32.xor + (i32.and + (get_local $0) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (br $while-in14) + ) + ) + ) + ) + (block + (set_local $33 + (get_local $0) + ) + (set_local $6 + (i32.const 0) + ) + (set_local $30 + (i32.const 0) + ) + (set_local $7 + (i32.const 86) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 86) + ) + (block + (if + (i32.and + (i32.eqz + (get_local $6) + ) + (i32.eqz + (get_local $30) + ) + ) + (block + (if + (i32.eqz + (tee_local $0 + (i32.and + (get_local $11) + (i32.or + (tee_local $15 + (i32.shl + (i32.const 2) + (get_local $9) + ) + ) + (i32.sub + (i32.const 0) + (get_local $15) + ) + ) + ) + ) + ) + (block + (set_local $9 + (get_local $2) + ) + (br $do-once) + ) + ) + (set_local $0 + (i32.and + (i32.shr_u + (tee_local $15 + (i32.add + (i32.and + (get_local $0) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $6 + (i32.load offset=480 + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $15 + (i32.and + (i32.shr_u + (tee_local $9 + (i32.shr_u + (get_local $15) + (get_local $0) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $0) + ) + (tee_local $9 + (i32.and + (i32.shr_u + (tee_local $6 + (i32.shr_u + (get_local $9) + (get_local $15) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $6 + (i32.and + (i32.shr_u + (tee_local $5 + (i32.shr_u + (get_local $6) + (get_local $9) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $5 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $5) + (get_local $6) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $1) + (get_local $5) + ) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (if + (get_local $6) + (block + (set_local $27 + (get_local $33) + ) + (set_local $25 + (get_local $6) + ) + (set_local $29 + (get_local $30) + ) + (set_local $7 + (i32.const 90) + ) + ) + (block + (set_local $3 + (get_local $33) + ) + (set_local $12 + (get_local $30) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 90) + ) + (loop $while-in16 + (set_local $7 + (i32.const 0) + ) + (set_local $1 + (i32.lt_u + (tee_local $5 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $25) + ) + (i32.const -8) + ) + (get_local $2) + ) + ) + (get_local $27) + ) + ) + (set_local $6 + (select + (get_local $5) + (get_local $27) + (get_local $1) + ) + ) + (set_local $5 + (select + (get_local $25) + (get_local $29) + (get_local $1) + ) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $25) + ) + ) + (block + (set_local $27 + (get_local $6) + ) + (set_local $25 + (get_local $1) + ) + (set_local $29 + (get_local $5) + ) + (br $while-in16) + ) + ) + (if + (tee_local $25 + (i32.load offset=20 + (get_local $25) + ) + ) + (block + (set_local $27 + (get_local $6) + ) + (set_local $29 + (get_local $5) + ) + (br $while-in16) + ) + (block + (set_local $3 + (get_local $6) + ) + (set_local $12 + (get_local $5) + ) + ) + ) + ) + ) + (if + (if (result i32) + (get_local $12) + (i32.lt_u + (get_local $3) + (i32.sub + (i32.load + (i32.const 184) + ) + (get_local $2) + ) + ) + (i32.const 0) + ) + (block + (if + (i32.lt_u + (get_local $12) + (tee_local $11 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $12) + (tee_local $5 + (i32.add + (get_local $12) + (get_local $2) + ) + ) + ) + (call $_abort) + ) + (set_local $6 + (i32.load offset=24 + (get_local $12) + ) + ) + (block $do-once17 + (if + (i32.eq + (tee_local $1 + (i32.load offset=12 + (get_local $12) + ) + ) + (get_local $12) + ) + (block + (if + (tee_local $0 + (i32.load + (tee_local $9 + (i32.add + (get_local $12) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $17 + (get_local $0) + ) + (set_local $1 + (get_local $9) + ) + ) + (if + (tee_local $17 + (i32.load + (tee_local $15 + (i32.add + (get_local $12) + (i32.const 16) + ) + ) + ) + ) + (set_local $1 + (get_local $15) + ) + (block + (set_local $8 + (i32.const 0) + ) + (br $do-once17) + ) + ) + ) + (loop $while-in20 + (if + (tee_local $0 + (i32.load + (tee_local $9 + (i32.add + (get_local $17) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $17 + (get_local $0) + ) + (set_local $1 + (get_local $9) + ) + (br $while-in20) + ) + ) + (if + (tee_local $0 + (i32.load + (tee_local $9 + (i32.add + (get_local $17) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $17 + (get_local $0) + ) + (set_local $1 + (get_local $9) + ) + (br $while-in20) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $11) + ) + (call $_abort) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $8 + (get_local $17) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $9 + (i32.load offset=8 + (get_local $12) + ) + ) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $0 + (i32.add + (get_local $9) + (i32.const 12) + ) + ) + ) + (get_local $12) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $15 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (get_local $12) + ) + (block + (i32.store + (get_local $0) + (get_local $1) + ) + (i32.store + (get_local $15) + (get_local $9) + ) + (set_local $8 + (get_local $1) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once21 + (if + (get_local $6) + (block + (if + (i32.eq + (get_local $12) + (i32.load + (tee_local $11 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $12) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $11) + (get_local $8) + ) + (if + (i32.eqz + (get_local $8) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $12) + ) + (i32.store + (get_local $1) + (get_local $8) + ) + (i32.store offset=20 + (get_local $6) + (get_local $8) + ) + ) + (br_if $do-once21 + (i32.eqz + (get_local $8) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $8) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $8) + (get_local $6) + ) + (if + (tee_local $11 + (i32.load offset=16 + (get_local $12) + ) + ) + (if + (i32.lt_u + (get_local $11) + (get_local $1) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $8) + (get_local $11) + ) + (i32.store offset=24 + (get_local $11) + (get_local $8) + ) + ) + ) + ) + (if + (tee_local $11 + (i32.load offset=20 + (get_local $12) + ) + ) + (if + (i32.lt_u + (get_local $11) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $8) + (get_local $11) + ) + (i32.store offset=24 + (get_local $11) + (get_local $8) + ) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.ge_u + (get_local $3) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $12) + (i32.or + (get_local $2) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $5) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $5) + (get_local $3) + ) + (get_local $3) + ) + (set_local $6 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $3) + (i32.const 256) + ) + (block + (set_local $11 + (i32.add + (i32.shl + (get_local $6) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 176) + ) + ) + (tee_local $9 + (i32.shl + (i32.const 1) + (get_local $6) + ) + ) + ) + (if + (i32.lt_u + (tee_local $15 + (i32.load + (tee_local $6 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $16 + (get_local $6) + ) + (set_local $26 + (get_local $15) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $1) + (get_local $9) + ) + ) + (set_local $16 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + (set_local $26 + (get_local $11) + ) + ) + ) + (i32.store + (get_local $16) + (get_local $5) + ) + (i32.store offset=12 + (get_local $26) + (get_local $5) + ) + (i32.store offset=8 + (get_local $5) + (get_local $26) + ) + (i32.store offset=12 + (get_local $5) + (get_local $11) + ) + (br $do-once25) + ) + ) + (set_local $6 + (i32.add + (i32.shl + (tee_local $10 + (if (result i32) + (tee_local $11 + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $3) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $3) + (i32.add + (tee_local $6 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $11 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $11) + (tee_local $9 + (i32.and + (i32.shr_u + (i32.add + (get_local $11) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $9) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $15 + (i32.shl + (get_local $1) + (get_local $11) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $15) + (get_local $1) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $6) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $5) + (get_local $10) + ) + (i32.store offset=4 + (tee_local $1 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (i32.const 180) + ) + ) + (tee_local $15 + (i32.shl + (i32.const 1) + (get_local $10) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $1) + (get_local $15) + ) + ) + (i32.store + (get_local $6) + (get_local $5) + ) + (i32.store offset=24 + (get_local $5) + (get_local $6) + ) + (i32.store offset=12 + (get_local $5) + (get_local $5) + ) + (i32.store offset=8 + (get_local $5) + (get_local $5) + ) + (br $do-once25) + ) + ) + (set_local $15 + (i32.shl + (get_local $3) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $10) + (i32.const 1) + ) + ) + (i32.eq + (get_local $10) + (i32.const 31) + ) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $6) + ) + ) + (loop $while-in28 + (block $while-out27 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $1) + ) + (i32.const -8) + ) + (get_local $3) + ) + (block + (set_local $14 + (get_local $1) + ) + (set_local $7 + (i32.const 148) + ) + (br $while-out27) + ) + ) + (if + (tee_local $9 + (i32.load + (tee_local $6 + (i32.add + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $15) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $15 + (i32.shl + (get_local $15) + (i32.const 1) + ) + ) + (set_local $1 + (get_local $9) + ) + (br $while-in28) + ) + (block + (set_local $23 + (get_local $6) + ) + (set_local $21 + (get_local $1) + ) + (set_local $7 + (i32.const 145) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 145) + ) + (if + (i32.lt_u + (get_local $23) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $23) + (get_local $5) + ) + (i32.store offset=24 + (get_local $5) + (get_local $21) + ) + (i32.store offset=12 + (get_local $5) + (get_local $5) + ) + (i32.store offset=8 + (get_local $5) + (get_local $5) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 148) + ) + (if + (i32.and + (i32.ge_u + (tee_local $15 + (i32.load + (tee_local $1 + (i32.add + (get_local $14) + (i32.const 8) + ) + ) + ) + ) + (tee_local $9 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $14) + (get_local $9) + ) + ) + (block + (i32.store offset=12 + (get_local $15) + (get_local $5) + ) + (i32.store + (get_local $1) + (get_local $5) + ) + (i32.store offset=8 + (get_local $5) + (get_local $15) + ) + (i32.store offset=12 + (get_local $5) + (get_local $14) + ) + (i32.store offset=24 + (get_local $5) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $12) + (i32.or + (tee_local $15 + (i32.add + (get_local $3) + (get_local $2) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $1 + (i32.add + (i32.add + (get_local $12) + (get_local $15) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $1) + ) + (i32.const 1) + ) + ) + ) + ) + ) + (return + (i32.add + (get_local $12) + (i32.const 8) + ) + ) + ) + (set_local $9 + (get_local $2) + ) + ) + ) + (set_local $9 + (get_local $2) + ) + ) + ) + (set_local $9 + (i32.const -1) + ) + ) + ) + ) + (if + (i32.ge_u + (tee_local $12 + (i32.load + (i32.const 184) + ) + ) + (get_local $9) + ) + (block + (set_local $14 + (i32.load + (i32.const 196) + ) + ) + (if + (i32.gt_u + (tee_local $3 + (i32.sub + (get_local $12) + (get_local $9) + ) + ) + (i32.const 15) + ) + (block + (i32.store + (i32.const 196) + (tee_local $21 + (i32.add + (get_local $14) + (get_local $9) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $3) + ) + (i32.store offset=4 + (get_local $21) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $21) + (get_local $3) + ) + (get_local $3) + ) + (i32.store offset=4 + (get_local $14) + (i32.or + (get_local $9) + (i32.const 3) + ) + ) + ) + (block + (i32.store + (i32.const 184) + (i32.const 0) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $14) + (i32.or + (get_local $12) + (i32.const 3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (i32.add + (get_local $14) + (get_local $12) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $3) + ) + (i32.const 1) + ) + ) + ) + ) + (return + (i32.add + (get_local $14) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.gt_u + (tee_local $14 + (i32.load + (i32.const 188) + ) + ) + (get_local $9) + ) + (block + (i32.store + (i32.const 188) + (tee_local $3 + (i32.sub + (get_local $14) + (get_local $9) + ) + ) + ) + (i32.store + (i32.const 200) + (tee_local $12 + (i32.add + (tee_local $14 + (i32.load + (i32.const 200) + ) + ) + (get_local $9) + ) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $14) + (i32.or + (get_local $9) + (i32.const 3) + ) + ) + (return + (i32.add + (get_local $14) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eqz + (i32.load + (i32.const 648) + ) + ) + (if + (i32.and + (i32.add + (tee_local $14 + (call $_sysconf + (i32.const 30) + ) + ) + (i32.const -1) + ) + (get_local $14) + ) + (call $_abort) + (block + (i32.store + (i32.const 656) + (get_local $14) + ) + (i32.store + (i32.const 652) + (get_local $14) + ) + (i32.store + (i32.const 660) + (i32.const -1) + ) + (i32.store + (i32.const 664) + (i32.const -1) + ) + (i32.store + (i32.const 668) + (i32.const 0) + ) + (i32.store + (i32.const 620) + (i32.const 0) + ) + (i32.store + (i32.const 648) + (i32.xor + (i32.and + (call $_time + (i32.const 0) + ) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + ) + ) + ) + (set_local $14 + (i32.add + (get_local $9) + (i32.const 48) + ) + ) + (if + (i32.le_u + (tee_local $3 + (i32.and + (tee_local $21 + (i32.add + (tee_local $3 + (i32.load + (i32.const 656) + ) + ) + (tee_local $12 + (i32.add + (get_local $9) + (i32.const 47) + ) + ) + ) + ) + (tee_local $23 + (i32.sub + (i32.const 0) + (get_local $3) + ) + ) + ) + ) + (get_local $9) + ) + (return + (i32.const 0) + ) + ) + (if + (if (result i32) + (tee_local $10 + (i32.load + (i32.const 616) + ) + ) + (i32.or + (i32.le_u + (tee_local $16 + (i32.add + (tee_local $26 + (i32.load + (i32.const 608) + ) + ) + (get_local $3) + ) + ) + (get_local $26) + ) + (i32.gt_u + (get_local $16) + (get_local $10) + ) + ) + (i32.const 0) + ) + (return + (i32.const 0) + ) + ) + (if + (if (result i32) + (if (result i32) + (select + (i32.lt_u + (get_local $3) + (i32.const 2147483647) + ) + (i32.const 0) + (i32.eq + (tee_local $7 + (block $label$break$L257 (result i32) + (if (result i32) + (i32.and + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + (i32.const 190) + (block (result i32) + (block $label$break$L259 + (if + (tee_local $10 + (i32.load + (i32.const 200) + ) + ) + (block + (set_local $16 + (i32.const 624) + ) + (loop $while-in34 + (block $while-out33 + (if + (if (result i32) + (i32.le_u + (tee_local $26 + (i32.load + (get_local $16) + ) + ) + (get_local $10) + ) + (i32.gt_u + (i32.add + (get_local $26) + (i32.load + (tee_local $8 + (i32.add + (get_local $16) + (i32.const 4) + ) + ) + ) + ) + (get_local $10) + ) + (i32.const 0) + ) + (block + (set_local $6 + (get_local $16) + ) + (set_local $1 + (get_local $8) + ) + (br $while-out33) + ) + ) + (br_if $while-in34 + (tee_local $16 + (i32.load offset=8 + (get_local $16) + ) + ) + ) + (set_local $7 + (i32.const 173) + ) + (br $label$break$L259) + ) + ) + (if + (i32.lt_u + (tee_local $16 + (i32.and + (i32.sub + (get_local $21) + (i32.load + (i32.const 188) + ) + ) + (get_local $23) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (tee_local $8 + (call $_sbrk + (get_local $16) + ) + ) + (i32.add + (i32.load + (get_local $6) + ) + (i32.load + (get_local $1) + ) + ) + ) + (if + (i32.ne + (get_local $8) + (i32.const -1) + ) + (block + (set_local $20 + (get_local $8) + ) + (set_local $22 + (get_local $16) + ) + (br $label$break$L257 + (i32.const 193) + ) + ) + ) + (block + (set_local $13 + (get_local $8) + ) + (set_local $18 + (get_local $16) + ) + (set_local $7 + (i32.const 183) + ) + ) + ) + ) + ) + (set_local $7 + (i32.const 173) + ) + ) + ) + (block $do-once35 + (if + (if (result i32) + (i32.eq + (get_local $7) + (i32.const 173) + ) + (i32.ne + (tee_local $10 + (call $_sbrk + (i32.const 0) + ) + ) + (i32.const -1) + ) + (i32.const 0) + ) + (block + (set_local $0 + (if (result i32) + (i32.and + (tee_local $8 + (i32.add + (tee_local $16 + (i32.load + (i32.const 652) + ) + ) + (i32.const -1) + ) + ) + (tee_local $2 + (get_local $10) + ) + ) + (i32.add + (i32.sub + (get_local $3) + (get_local $2) + ) + (i32.and + (i32.add + (get_local $8) + (get_local $2) + ) + (i32.sub + (i32.const 0) + (get_local $16) + ) + ) + ) + (get_local $3) + ) + ) + (set_local $2 + (i32.add + (tee_local $16 + (i32.load + (i32.const 608) + ) + ) + (get_local $0) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $0) + (get_local $9) + ) + (i32.lt_u + (get_local $0) + (i32.const 2147483647) + ) + ) + (block + (br_if $do-once35 + (select + (i32.or + (i32.le_u + (get_local $2) + (get_local $16) + ) + (i32.gt_u + (get_local $2) + (tee_local $8 + (i32.load + (i32.const 616) + ) + ) + ) + ) + (i32.const 0) + (get_local $8) + ) + ) + (if + (i32.eq + (tee_local $8 + (call $_sbrk + (get_local $0) + ) + ) + (get_local $10) + ) + (block + (set_local $20 + (get_local $10) + ) + (set_local $22 + (get_local $0) + ) + (br $label$break$L257 + (i32.const 193) + ) + ) + (block + (set_local $13 + (get_local $8) + ) + (set_local $18 + (get_local $0) + ) + (set_local $7 + (i32.const 183) + ) + ) + ) + ) + ) + ) + ) + ) + (block $label$break$L279 + (if + (i32.eq + (get_local $7) + (i32.const 183) + ) + (block + (set_local $8 + (i32.sub + (i32.const 0) + (get_local $18) + ) + ) + (if + (if (result i32) + (i32.and + (i32.gt_u + (get_local $14) + (get_local $18) + ) + (i32.and + (i32.lt_u + (get_local $18) + (i32.const 2147483647) + ) + (i32.ne + (get_local $13) + (i32.const -1) + ) + ) + ) + (i32.lt_u + (tee_local $2 + (i32.and + (i32.add + (i32.sub + (get_local $12) + (get_local $18) + ) + (tee_local $10 + (i32.load + (i32.const 656) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $10) + ) + ) + ) + (i32.const 2147483647) + ) + (i32.const 0) + ) + (if + (i32.eq + (call $_sbrk + (get_local $2) + ) + (i32.const -1) + ) + (block + (drop + (call $_sbrk + (get_local $8) + ) + ) + (br $label$break$L279) + ) + (set_local $4 + (i32.add + (get_local $2) + (get_local $18) + ) + ) + ) + (set_local $4 + (get_local $18) + ) + ) + (if + (i32.ne + (get_local $13) + (i32.const -1) + ) + (block + (set_local $20 + (get_local $13) + ) + (set_local $22 + (get_local $4) + ) + (br $label$break$L257 + (i32.const 193) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 620) + (i32.or + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + ) + (i32.const 190) + ) + ) + ) + ) + (i32.const 190) + ) + ) + (i32.and + (i32.lt_u + (tee_local $4 + (call $_sbrk + (get_local $3) + ) + ) + (tee_local $3 + (call $_sbrk + (i32.const 0) + ) + ) + ) + (i32.and + (i32.ne + (get_local $4) + (i32.const -1) + ) + (i32.ne + (get_local $3) + (i32.const -1) + ) + ) + ) + (i32.const 0) + ) + (i32.gt_u + (tee_local $13 + (i32.sub + (get_local $3) + (get_local $4) + ) + ) + (i32.add + (get_local $9) + (i32.const 40) + ) + ) + (i32.const 0) + ) + (block + (set_local $20 + (get_local $4) + ) + (set_local $22 + (get_local $13) + ) + (set_local $7 + (i32.const 193) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 193) + ) + (block + (i32.store + (i32.const 608) + (tee_local $13 + (i32.add + (i32.load + (i32.const 608) + ) + (get_local $22) + ) + ) + ) + (if + (i32.gt_u + (get_local $13) + (i32.load + (i32.const 612) + ) + ) + (i32.store + (i32.const 612) + (get_local $13) + ) + ) + (block $do-once40 + (if + (tee_local $13 + (i32.load + (i32.const 200) + ) + ) + (block + (set_local $4 + (i32.const 624) + ) + (loop $do-in + (block $do-out + (if + (i32.eq + (get_local $20) + (i32.add + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (tee_local $12 + (i32.load + (tee_local $18 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + ) + ) + ) + ) + (block + (set_local $46 + (get_local $3) + ) + (set_local $47 + (get_local $18) + ) + (set_local $48 + (get_local $12) + ) + (set_local $49 + (get_local $4) + ) + (set_local $7 + (i32.const 203) + ) + (br $do-out) + ) + ) + (br_if $do-in + (tee_local $4 + (i32.load offset=8 + (get_local $4) + ) + ) + ) + ) + ) + (if + (if (result i32) + (if (result i32) + (i32.eq + (get_local $7) + (i32.const 203) + ) + (i32.eqz + (i32.and + (i32.load offset=12 + (get_local $49) + ) + (i32.const 8) + ) + ) + (i32.const 0) + ) + (i32.and + (i32.lt_u + (get_local $13) + (get_local $20) + ) + (i32.ge_u + (get_local $13) + (get_local $46) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $47) + (i32.add + (get_local $48) + (get_local $22) + ) + ) + (set_local $4 + (i32.add + (get_local $13) + (tee_local $12 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $4 + (i32.add + (get_local $13) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $4) + (i32.const 7) + ) + ) + ) + ) + ) + (set_local $18 + (i32.add + (i32.sub + (get_local $22) + (get_local $12) + ) + (i32.load + (i32.const 188) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $4) + ) + (i32.store + (i32.const 188) + (get_local $18) + ) + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $18) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $4) + (get_local $18) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (br $do-once40) + ) + ) + (set_local $5 + (if (result i32) + (i32.lt_u + (get_local $20) + (tee_local $18 + (i32.load + (i32.const 192) + ) + ) + ) + (block (result i32) + (i32.store + (i32.const 192) + (get_local $20) + ) + (get_local $20) + ) + (get_local $18) + ) + ) + (set_local $18 + (i32.add + (get_local $20) + (get_local $22) + ) + ) + (set_local $4 + (i32.const 624) + ) + (loop $while-in43 + (block $while-out42 + (if + (i32.eq + (i32.load + (get_local $4) + ) + (get_local $18) + ) + (block + (set_local $50 + (get_local $4) + ) + (set_local $40 + (get_local $4) + ) + (set_local $7 + (i32.const 211) + ) + (br $while-out42) + ) + ) + (br_if $while-in43 + (tee_local $4 + (i32.load offset=8 + (get_local $4) + ) + ) + ) + (set_local $28 + (i32.const 624) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 211) + ) + (if + (i32.and + (i32.load offset=12 + (get_local $40) + ) + (i32.const 8) + ) + (set_local $28 + (i32.const 624) + ) + (block + (i32.store + (get_local $50) + (get_local $20) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $40) + (i32.const 4) + ) + ) + (i32.add + (i32.load + (get_local $4) + ) + (get_local $22) + ) + ) + (set_local $12 + (i32.add + (get_local $20) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $4 + (i32.add + (get_local $20) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $4) + (i32.const 7) + ) + ) + ) + ) + (set_local $3 + (i32.add + (get_local $18) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $4 + (i32.add + (get_local $18) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $4) + (i32.const 7) + ) + ) + ) + ) + (set_local $4 + (i32.add + (get_local $12) + (get_local $9) + ) + ) + (set_local $14 + (i32.sub + (i32.sub + (get_local $3) + (get_local $12) + ) + (get_local $9) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.or + (get_local $9) + (i32.const 3) + ) + ) + (block $do-once44 + (if + (i32.ne + (get_local $3) + (get_local $13) + ) + (block + (if + (i32.eq + (get_local $3) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (tee_local $0 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $14) + ) + ) + ) + (i32.store + (i32.const 196) + (get_local $4) + ) + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $4) + (get_local $0) + ) + (get_local $0) + ) + (br $do-once44) + ) + ) + (if + (i32.eq + (i32.and + (tee_local $0 + (i32.load offset=4 + (get_local $3) + ) + ) + (i32.const 3) + ) + (i32.const 1) + ) + (block + (set_local $1 + (i32.and + (get_local $0) + (i32.const -8) + ) + ) + (set_local $6 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (block $label$break$L331 + (if + (i32.ge_u + (get_local $0) + (i32.const 256) + ) + (block + (set_local $23 + (i32.load offset=24 + (get_local $3) + ) + ) + (block $do-once47 + (if + (i32.eq + (tee_local $21 + (i32.load offset=12 + (get_local $3) + ) + ) + (get_local $3) + ) + (block + (if + (tee_local $10 + (i32.load + (tee_local $2 + (i32.add + (tee_local $8 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $10) + ) + (set_local $8 + (get_local $2) + ) + ) + (if + (tee_local $16 + (i32.load + (get_local $8) + ) + ) + (set_local $0 + (get_local $16) + ) + (block + (set_local $24 + (i32.const 0) + ) + (br $do-once47) + ) + ) + ) + (loop $while-in50 + (if + (tee_local $10 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $10) + ) + (set_local $8 + (get_local $2) + ) + (br $while-in50) + ) + ) + (if + (tee_local $10 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $10) + ) + (set_local $8 + (get_local $2) + ) + (br $while-in50) + ) + ) + ) + (if + (i32.lt_u + (get_local $8) + (get_local $5) + ) + (call $_abort) + (block + (i32.store + (get_local $8) + (i32.const 0) + ) + (set_local $24 + (get_local $0) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $2 + (i32.load offset=8 + (get_local $3) + ) + ) + (get_local $5) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $10 + (i32.add + (get_local $2) + (i32.const 12) + ) + ) + ) + (get_local $3) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $8 + (i32.add + (get_local $21) + (i32.const 8) + ) + ) + ) + (get_local $3) + ) + (block + (i32.store + (get_local $10) + (get_local $21) + ) + (i32.store + (get_local $8) + (get_local $2) + ) + (set_local $24 + (get_local $21) + ) + ) + (call $_abort) + ) + ) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (get_local $23) + ) + ) + (block $do-once51 + (if + (i32.ne + (get_local $3) + (i32.load + (tee_local $2 + (i32.add + (i32.shl + (tee_local $21 + (i32.load offset=28 + (get_local $3) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $23) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $8 + (i32.add + (get_local $23) + (i32.const 16) + ) + ) + ) + (get_local $3) + ) + (i32.store + (get_local $8) + (get_local $24) + ) + (i32.store offset=20 + (get_local $23) + (get_local $24) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (get_local $24) + ) + ) + ) + (block + (i32.store + (get_local $2) + (get_local $24) + ) + (br_if $do-once51 + (get_local $24) + ) + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $21) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + ) + ) + (if + (i32.lt_u + (get_local $24) + (tee_local $21 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $24) + (get_local $23) + ) + (if + (tee_local $8 + (i32.load + (tee_local $2 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $8) + (get_local $21) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $24) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $24) + ) + ) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (tee_local $8 + (i32.load offset=4 + (get_local $2) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $8) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $24) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $24) + ) + ) + ) + ) + (block + (set_local $21 + (i32.load offset=12 + (get_local $3) + ) + ) + (block $do-once55 + (if + (i32.ne + (tee_local $8 + (i32.load offset=8 + (get_local $3) + ) + ) + (tee_local $23 + (i32.add + (i32.shl + (get_local $6) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $8) + (get_local $5) + ) + (call $_abort) + ) + (br_if $do-once55 + (i32.eq + (i32.load offset=12 + (get_local $8) + ) + (get_local $3) + ) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $21) + (get_local $8) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $6) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + ) + (block $do-once57 + (if + (i32.eq + (get_local $21) + (get_local $23) + ) + (set_local $41 + (i32.add + (get_local $21) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $21) + (get_local $5) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $2 + (i32.add + (get_local $21) + (i32.const 8) + ) + ) + ) + (get_local $3) + ) + (block + (set_local $41 + (get_local $2) + ) + (br $do-once57) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $8) + (get_local $21) + ) + (i32.store + (get_local $41) + (get_local $8) + ) + ) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (get_local $1) + ) + ) + (set_local $14 + (i32.add + (get_local $1) + (get_local $14) + ) + ) + ) + ) + (i32.store + (tee_local $6 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (i32.and + (i32.load + (get_local $6) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $14) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $4) + (get_local $14) + ) + (get_local $14) + ) + (set_local $6 + (i32.shr_u + (get_local $14) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $14) + (i32.const 256) + ) + (block + (set_local $0 + (i32.add + (i32.shl + (get_local $6) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (block $do-once59 + (if + (i32.and + (tee_local $23 + (i32.load + (i32.const 176) + ) + ) + (tee_local $2 + (i32.shl + (i32.const 1) + (get_local $6) + ) + ) + ) + (block + (if + (i32.ge_u + (tee_local $10 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (block + (set_local $42 + (get_local $6) + ) + (set_local $34 + (get_local $10) + ) + (br $do-once59) + ) + ) + (call $_abort) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $23) + (get_local $2) + ) + ) + (set_local $42 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (set_local $34 + (get_local $0) + ) + ) + ) + ) + (i32.store + (get_local $42) + (get_local $4) + ) + (i32.store offset=12 + (get_local $34) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $34) + ) + (i32.store offset=12 + (get_local $4) + (get_local $0) + ) + (br $do-once44) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $1 + (block $do-once61 (result i32) + (if (result i32) + (tee_local $2 + (i32.shr_u + (get_local $14) + (i32.const 8) + ) + ) + (block (result i32) + (drop + (br_if $do-once61 + (i32.const 31) + (i32.gt_u + (get_local $14) + (i32.const 16777215) + ) + ) + ) + (i32.or + (i32.and + (i32.shr_u + (get_local $14) + (i32.add + (tee_local $16 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $10 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $2) + (tee_local $23 + (i32.and + (i32.shr_u + (i32.add + (get_local $2) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $23) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $6 + (i32.shl + (get_local $1) + (get_local $10) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $6) + (get_local $1) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $16) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $4) + (get_local $1) + ) + (i32.store offset=4 + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $0 + (i32.load + (i32.const 180) + ) + ) + (tee_local $16 + (i32.shl + (i32.const 1) + (get_local $1) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $0) + (get_local $16) + ) + ) + (i32.store + (get_local $2) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $2) + ) + (i32.store offset=12 + (get_local $4) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $4) + ) + (br $do-once44) + ) + ) + (set_local $16 + (i32.shl + (get_local $14) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $1) + (i32.const 1) + ) + ) + (i32.eq + (get_local $1) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $2) + ) + ) + (loop $while-in64 + (block $while-out63 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $14) + ) + (block + (set_local $35 + (get_local $0) + ) + (set_local $7 + (i32.const 281) + ) + (br $while-out63) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $16) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $16 + (i32.shl + (get_local $16) + (i32.const 1) + ) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in64) + ) + (block + (set_local $43 + (get_local $2) + ) + (set_local $51 + (get_local $0) + ) + (set_local $7 + (i32.const 278) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 278) + ) + (if + (i32.lt_u + (get_local $43) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $43) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $51) + ) + (i32.store offset=12 + (get_local $4) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $4) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 281) + ) + (if + (i32.and + (i32.ge_u + (tee_local $16 + (i32.load + (tee_local $0 + (i32.add + (get_local $35) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $35) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $16) + (get_local $4) + ) + (i32.store + (get_local $0) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $16) + ) + (i32.store offset=12 + (get_local $4) + (get_local $35) + ) + (i32.store offset=24 + (get_local $4) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block + (i32.store + (i32.const 188) + (tee_local $16 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $14) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $4) + ) + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $16) + (i32.const 1) + ) + ) + ) + ) + ) + (return + (i32.add + (get_local $12) + (i32.const 8) + ) + ) + ) + ) + ) + (loop $while-in66 + (if + (if (result i32) + (i32.le_u + (tee_local $4 + (i32.load + (get_local $28) + ) + ) + (get_local $13) + ) + (i32.gt_u + (tee_local $14 + (i32.add + (get_local $4) + (i32.load offset=4 + (get_local $28) + ) + ) + ) + (get_local $13) + ) + (i32.const 0) + ) + (set_local $0 + (get_local $14) + ) + (block + (set_local $28 + (i32.load offset=8 + (get_local $28) + ) + ) + (br $while-in66) + ) + ) + ) + (set_local $14 + (i32.add + (tee_local $12 + (i32.add + (get_local $0) + (i32.const -47) + ) + ) + (i32.const 8) + ) + ) + (set_local $4 + (i32.add + (tee_local $12 + (select + (get_local $13) + (tee_local $4 + (i32.add + (get_local $12) + (select + (i32.and + (i32.sub + (i32.const 0) + (get_local $14) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $14) + (i32.const 7) + ) + ) + ) + ) + (i32.lt_u + (get_local $4) + (tee_local $14 + (i32.add + (get_local $13) + (i32.const 16) + ) + ) + ) + ) + ) + (i32.const 8) + ) + ) + (i32.store + (i32.const 200) + (tee_local $3 + (i32.add + (get_local $20) + (tee_local $18 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $3 + (i32.add + (get_local $20) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $3) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 188) + (tee_local $16 + (i32.sub + (i32.add + (get_local $22) + (i32.const -40) + ) + (get_local $18) + ) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $16) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $3) + (get_local $16) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (i32.store + (tee_local $16 + (i32.add + (get_local $12) + (i32.const 4) + ) + ) + (i32.const 27) + ) + (i32.store + (get_local $4) + (i32.load + (i32.const 624) + ) + ) + (i32.store offset=4 + (get_local $4) + (i32.load + (i32.const 628) + ) + ) + (i32.store offset=8 + (get_local $4) + (i32.load + (i32.const 632) + ) + ) + (i32.store offset=12 + (get_local $4) + (i32.load + (i32.const 636) + ) + ) + (i32.store + (i32.const 624) + (get_local $20) + ) + (i32.store + (i32.const 628) + (get_local $22) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 632) + (get_local $4) + ) + (set_local $4 + (i32.add + (get_local $12) + (i32.const 24) + ) + ) + (loop $do-in68 + (i32.store + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + (i32.const 7) + ) + (br_if $do-in68 + (i32.lt_u + (i32.add + (get_local $4) + (i32.const 4) + ) + (get_local $0) + ) + ) + ) + (if + (i32.ne + (get_local $12) + (get_local $13) + ) + (block + (i32.store + (get_local $16) + (i32.and + (i32.load + (get_local $16) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $13) + (i32.or + (tee_local $4 + (i32.sub + (get_local $12) + (get_local $13) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (get_local $12) + (get_local $4) + ) + (set_local $3 + (i32.shr_u + (get_local $4) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.const 256) + ) + (block + (set_local $18 + (i32.add + (i32.shl + (get_local $3) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $0 + (i32.load + (i32.const 176) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $3) + ) + ) + ) + (if + (i32.lt_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $18) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $44 + (get_local $3) + ) + (set_local $36 + (get_local $2) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $0) + (get_local $1) + ) + ) + (set_local $44 + (i32.add + (get_local $18) + (i32.const 8) + ) + ) + (set_local $36 + (get_local $18) + ) + ) + ) + (i32.store + (get_local $44) + (get_local $13) + ) + (i32.store offset=12 + (get_local $36) + (get_local $13) + ) + (i32.store offset=8 + (get_local $13) + (get_local $36) + ) + (i32.store offset=12 + (get_local $13) + (get_local $18) + ) + (br $do-once40) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (tee_local $1 + (if (result i32) + (tee_local $18 + (i32.shr_u + (get_local $4) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $4) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $4) + (i32.add + (tee_local $3 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $18 + (i32.and + (i32.shr_u + (i32.add + (tee_local $0 + (i32.shl + (get_local $18) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (get_local $18) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $1) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $2 + (i32.shl + (get_local $0) + (get_local $18) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $2) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $13) + (get_local $1) + ) + (i32.store offset=20 + (get_local $13) + (i32.const 0) + ) + (i32.store + (get_local $14) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $0 + (i32.load + (i32.const 180) + ) + ) + (tee_local $2 + (i32.shl + (i32.const 1) + (get_local $1) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $0) + (get_local $2) + ) + ) + (i32.store + (get_local $3) + (get_local $13) + ) + (i32.store offset=24 + (get_local $13) + (get_local $3) + ) + (i32.store offset=12 + (get_local $13) + (get_local $13) + ) + (i32.store offset=8 + (get_local $13) + (get_local $13) + ) + (br $do-once40) + ) + ) + (set_local $2 + (i32.shl + (get_local $4) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $1) + (i32.const 1) + ) + ) + (i32.eq + (get_local $1) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $3) + ) + ) + (loop $while-in70 + (block $while-out69 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $4) + ) + (block + (set_local $37 + (get_local $0) + ) + (set_local $7 + (i32.const 307) + ) + (br $while-out69) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $3 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $2) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $2 + (i32.shl + (get_local $2) + (i32.const 1) + ) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in70) + ) + (block + (set_local $45 + (get_local $3) + ) + (set_local $52 + (get_local $0) + ) + (set_local $7 + (i32.const 304) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 304) + ) + (if + (i32.lt_u + (get_local $45) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $45) + (get_local $13) + ) + (i32.store offset=24 + (get_local $13) + (get_local $52) + ) + (i32.store offset=12 + (get_local $13) + (get_local $13) + ) + (i32.store offset=8 + (get_local $13) + (get_local $13) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 307) + ) + (if + (i32.and + (i32.ge_u + (tee_local $2 + (i32.load + (tee_local $0 + (i32.add + (get_local $37) + (i32.const 8) + ) + ) + ) + ) + (tee_local $4 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $37) + (get_local $4) + ) + ) + (block + (i32.store offset=12 + (get_local $2) + (get_local $13) + ) + (i32.store + (get_local $0) + (get_local $13) + ) + (i32.store offset=8 + (get_local $13) + (get_local $2) + ) + (i32.store offset=12 + (get_local $13) + (get_local $37) + ) + (i32.store offset=24 + (get_local $13) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + ) + (block + (if + (i32.or + (i32.eqz + (tee_local $2 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.lt_u + (get_local $20) + (get_local $2) + ) + ) + (i32.store + (i32.const 192) + (get_local $20) + ) + ) + (i32.store + (i32.const 624) + (get_local $20) + ) + (i32.store + (i32.const 628) + (get_local $22) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 212) + (i32.load + (i32.const 648) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (set_local $2 + (i32.const 0) + ) + (loop $do-in72 + (i32.store offset=12 + (tee_local $0 + (i32.add + (i32.shl + (get_local $2) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (get_local $0) + ) + (i32.store offset=8 + (get_local $0) + (get_local $0) + ) + (br_if $do-in72 + (i32.ne + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 32) + ) + ) + ) + (i32.store + (i32.const 200) + (tee_local $2 + (i32.add + (get_local $20) + (tee_local $0 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $2 + (i32.add + (get_local $20) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $2) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 188) + (tee_local $4 + (i32.sub + (i32.add + (get_local $22) + (i32.const -40) + ) + (get_local $0) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $4) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $2) + (get_local $4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + ) + ) + ) + (if + (i32.gt_u + (tee_local $22 + (i32.load + (i32.const 188) + ) + ) + (get_local $9) + ) + (block + (i32.store + (i32.const 188) + (tee_local $20 + (i32.sub + (get_local $22) + (get_local $9) + ) + ) + ) + (i32.store + (i32.const 200) + (tee_local $13 + (i32.add + (tee_local $22 + (i32.load + (i32.const 200) + ) + ) + (get_local $9) + ) + ) + ) + (i32.store offset=4 + (get_local $13) + (i32.or + (get_local $20) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $22) + (i32.or + (get_local $9) + (i32.const 3) + ) + ) + (return + (i32.add + (get_local $22) + (i32.const 8) + ) + ) + ) + ) + ) + ) + (i32.store + (call $___errno_location) + (i32.const 12) + ) + (i32.const 0) + ) + (func $_free (; 16 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (if + (i32.eqz + (get_local $0) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $0) + (i32.const -8) + ) + ) + (tee_local $14 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (tee_local $0 + (i32.and + (tee_local $4 + (i32.load + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + ) + (i32.const 3) + ) + ) + (i32.const 1) + ) + (call $_abort) + ) + (set_local $8 + (i32.add + (get_local $1) + (tee_local $5 + (i32.and + (get_local $4) + (i32.const -8) + ) + ) + ) + ) + (block $do-once + (if + (i32.and + (get_local $4) + (i32.const 1) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + ) + (block + (set_local $11 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eqz + (get_local $0) + ) + (return) + ) + (set_local $5 + (i32.add + (get_local $11) + (get_local $5) + ) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.sub + (i32.const 0) + (get_local $11) + ) + ) + ) + (get_local $14) + ) + (call $_abort) + ) + (if + (i32.eq + (get_local $1) + (i32.load + (i32.const 196) + ) + ) + (block + (if + (i32.ne + (i32.and + (tee_local $7 + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 3) + ) + (i32.const 3) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 184) + (get_local $5) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $7) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $5) + ) + (get_local $5) + ) + (return) + ) + ) + (set_local $7 + (i32.shr_u + (get_local $11) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $11) + (i32.const 256) + ) + (block + (set_local $0 + (i32.load offset=12 + (get_local $1) + ) + ) + (if + (i32.ne + (tee_local $11 + (i32.load offset=8 + (get_local $1) + ) + ) + (tee_local $4 + (i32.add + (i32.shl + (get_local $7) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $11) + (get_local $14) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $11) + ) + (get_local $1) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (get_local $11) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $7) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + (br $do-once) + ) + ) + (if + (i32.ne + (get_local $0) + (get_local $4) + ) + (block + (if + (i32.lt_u + (get_local $0) + (get_local $14) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (set_local $10 + (get_local $4) + ) + (call $_abort) + ) + ) + (set_local $10 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (i32.store offset=12 + (get_local $11) + (get_local $0) + ) + (i32.store + (get_local $10) + (get_local $11) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + (br $do-once) + ) + ) + (set_local $11 + (i32.load offset=24 + (get_local $1) + ) + ) + (block $do-once0 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $1) + ) + ) + (get_local $1) + ) + (block + (if + (tee_local $10 + (i32.load + (tee_local $7 + (i32.add + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $10) + ) + (set_local $4 + (get_local $7) + ) + ) + (if + (i32.eqz + (tee_local $0 + (i32.load + (get_local $4) + ) + ) + ) + (block + (set_local $6 + (i32.const 0) + ) + (br $do-once0) + ) + ) + ) + (loop $while-in + (if + (tee_local $10 + (i32.load + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $10) + ) + (set_local $4 + (get_local $7) + ) + (br $while-in) + ) + ) + (if + (tee_local $10 + (i32.load + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $10) + ) + (set_local $4 + (get_local $7) + ) + (br $while-in) + ) + (block + (set_local $7 + (get_local $0) + ) + (set_local $9 + (get_local $4) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $9) + (get_local $14) + ) + (call $_abort) + (block + (i32.store + (get_local $9) + (i32.const 0) + ) + (set_local $6 + (get_local $7) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $7 + (i32.load offset=8 + (get_local $1) + ) + ) + (get_local $14) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $10 + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + ) + (get_local $1) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (block + (i32.store + (get_local $10) + (get_local $0) + ) + (i32.store + (get_local $4) + (get_local $7) + ) + (set_local $6 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $11) + (block + (if + (i32.eq + (get_local $1) + (i32.load + (tee_local $7 + (i32.add + (i32.shl + (tee_local $0 + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $7) + (get_local $6) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $0) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $11) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $11) + (i32.const 16) + ) + ) + ) + (get_local $1) + ) + (i32.store + (get_local $0) + (get_local $6) + ) + (i32.store offset=20 + (get_local $11) + (get_local $6) + ) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + (br $do-once) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $6) + (tee_local $0 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $6) + (get_local $11) + ) + (if + (tee_local $4 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (get_local $0) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $6) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $6) + ) + ) + ) + ) + (if + (tee_local $4 + (i32.load offset=4 + (get_local $7) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $6) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $6) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (get_local $2) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (tee_local $5 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 1) + ) + ) + (call $_abort) + ) + (if + (i32.and + (get_local $1) + (i32.const 2) + ) + (block + (i32.store + (get_local $5) + (i32.and + (get_local $1) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $3) + ) + (get_local $3) + ) + (set_local $0 + (get_local $3) + ) + ) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 200) + ) + ) + (block + (i32.store + (i32.const 188) + (tee_local $6 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $6) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $2) + (i32.load + (i32.const 196) + ) + ) + (return) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store + (i32.const 184) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (tee_local $6 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 196) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $6) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $6) + ) + (get_local $6) + ) + (return) + ) + ) + (set_local $6 + (i32.add + (i32.and + (get_local $1) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $14 + (i32.shr_u + (get_local $1) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.ge_u + (get_local $1) + (i32.const 256) + ) + (block + (set_local $7 + (i32.load offset=24 + (get_local $8) + ) + ) + (block $do-once6 + (if + (i32.eq + (tee_local $9 + (i32.load offset=12 + (get_local $8) + ) + ) + (get_local $8) + ) + (block + (if + (tee_local $10 + (i32.load + (tee_local $0 + (i32.add + (tee_local $4 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $10) + ) + (set_local $4 + (get_local $0) + ) + ) + (if + (tee_local $0 + (i32.load + (get_local $4) + ) + ) + (set_local $3 + (get_local $0) + ) + (block + (set_local $12 + (i32.const 0) + ) + (br $do-once6) + ) + ) + ) + (loop $while-in9 + (if + (tee_local $10 + (i32.load + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $10) + ) + (set_local $4 + (get_local $0) + ) + (br $while-in9) + ) + ) + (if + (tee_local $10 + (i32.load + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $10) + ) + (set_local $4 + (get_local $0) + ) + (br $while-in9) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $12 + (get_local $3) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $0 + (i32.load offset=8 + (get_local $8) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $10 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (block + (i32.store + (get_local $10) + (get_local $9) + ) + (i32.store + (get_local $4) + (get_local $0) + ) + (set_local $12 + (get_local $9) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $7) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (tee_local $5 + (i32.add + (i32.shl + (tee_local $9 + (i32.load offset=28 + (get_local $8) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $5) + (get_local $12) + ) + (if + (i32.eqz + (get_local $12) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $9) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $7) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $9 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + ) + (get_local $8) + ) + (i32.store + (get_local $9) + (get_local $12) + ) + (i32.store offset=20 + (get_local $7) + (get_local $12) + ) + ) + (br_if $do-once4 + (i32.eqz + (get_local $12) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $12) + (tee_local $9 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $12) + (get_local $7) + ) + (if + (tee_local $1 + (i32.load + (tee_local $5 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $9) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $12) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $12) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load offset=4 + (get_local $5) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $12) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $12) + ) + ) + ) + ) + ) + ) + ) + (block + (set_local $9 + (i32.load offset=12 + (get_local $8) + ) + ) + (if + (i32.ne + (tee_local $1 + (i32.load offset=8 + (get_local $8) + ) + ) + (tee_local $7 + (i32.add + (i32.shl + (get_local $14) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $1) + ) + (get_local $8) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $9) + (get_local $1) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $14) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.ne + (get_local $9) + (get_local $7) + ) + (block + (if + (i32.lt_u + (get_local $9) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $7 + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (set_local $16 + (get_local $7) + ) + (call $_abort) + ) + ) + (set_local $16 + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + ) + (i32.store offset=12 + (get_local $1) + (get_local $9) + ) + (i32.store + (get_local $16) + (get_local $1) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $6) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $6) + ) + (get_local $6) + ) + (if + (i32.eq + (get_local $2) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (get_local $6) + ) + (return) + ) + (set_local $0 + (get_local $6) + ) + ) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.const 256) + ) + (block + (set_local $1 + (i32.add + (i32.shl + (get_local $3) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $5 + (i32.load + (i32.const 176) + ) + ) + (tee_local $6 + (i32.shl + (i32.const 1) + (get_local $3) + ) + ) + ) + (if + (i32.lt_u + (tee_local $16 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $15 + (get_local $3) + ) + (set_local $13 + (get_local $16) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $5) + (get_local $6) + ) + ) + (set_local $15 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $13 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $2) + ) + (i32.store offset=12 + (get_local $13) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $13) + ) + (i32.store offset=12 + (get_local $2) + (get_local $1) + ) + (return) + ) + ) + (set_local $5 + (i32.add + (i32.shl + (tee_local $3 + (if (result i32) + (tee_local $1 + (i32.shr_u + (get_local $0) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $0) + (i32.add + (tee_local $5 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $15 + (i32.shl + (get_local $1) + (tee_local $13 + (i32.and + (i32.shr_u + (i32.add + (get_local $1) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $13) + ) + (tee_local $15 + (i32.and + (i32.shr_u + (i32.add + (tee_local $6 + (i32.shl + (get_local $15) + (get_local $1) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $6) + (get_local $15) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $5) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $2) + (get_local $3) + ) + (i32.store offset=20 + (get_local $2) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $2) + (i32.const 0) + ) + (if + (i32.and + (tee_local $15 + (i32.load + (i32.const 180) + ) + ) + (tee_local $6 + (i32.shl + (i32.const 1) + (get_local $3) + ) + ) + ) + (block + (set_local $13 + (i32.shl + (get_local $0) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $3) + (i32.const 1) + ) + ) + (i32.eq + (get_local $3) + (i32.const 31) + ) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $5) + ) + ) + (loop $while-in15 + (block $while-out14 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $1) + ) + (i32.const -8) + ) + (get_local $0) + ) + (block + (set_local $17 + (get_local $1) + ) + (set_local $0 + (i32.const 130) + ) + (br $while-out14) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $16 + (i32.add + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $13) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $13 + (i32.shl + (get_local $13) + (i32.const 1) + ) + ) + (set_local $1 + (get_local $3) + ) + (br $while-in15) + ) + (block + (set_local $18 + (get_local $16) + ) + (set_local $19 + (get_local $1) + ) + (set_local $0 + (i32.const 127) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (i32.const 127) + ) + (if + (i32.lt_u + (get_local $18) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $18) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $19) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (i32.const 130) + ) + (if + (i32.and + (i32.ge_u + (tee_local $13 + (i32.load + (tee_local $1 + (i32.add + (get_local $17) + (i32.const 8) + ) + ) + ) + ) + (tee_local $5 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $17) + (get_local $5) + ) + ) + (block + (i32.store offset=12 + (get_local $13) + (get_local $2) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $13) + ) + (i32.store offset=12 + (get_local $2) + (get_local $17) + ) + (i32.store offset=24 + (get_local $2) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $15) + (get_local $6) + ) + ) + (i32.store + (get_local $5) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $5) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + (i32.store + (i32.const 208) + (tee_local $2 + (i32.add + (i32.load + (i32.const 208) + ) + (i32.const -1) + ) + ) + ) + (if + (get_local $2) + (return) + (set_local $0 + (i32.const 632) + ) + ) + (loop $while-in17 + (if + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (block + (set_local $0 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (br $while-in17) + ) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + ) + (func $___stdio_write (; 17 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (set_local $10 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 16) + ) + ) + (set_local $12 + (get_local $10) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $10) + (i32.const 32) + ) + ) + (tee_local $7 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $3) + (tee_local $9 + (i32.sub + (i32.load + (tee_local $13 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (get_local $7) + ) + ) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (get_local $2) + ) + (set_local $1 + (i32.add + (get_local $0) + (i32.const 60) + ) + ) + (set_local $7 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (set_local $4 + (get_local $3) + ) + (set_local $3 + (i32.const 2) + ) + (set_local $5 + (i32.add + (get_local $9) + (get_local $2) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eq + (get_local $5) + (tee_local $6 + (if (result i32) + (i32.load + (i32.const 8) + ) + (block (result i32) + (call $_pthread_cleanup_push + (i32.const 4) + (get_local $0) + ) + (i32.store + (get_local $12) + (i32.load + (get_local $1) + ) + ) + (i32.store offset=4 + (get_local $12) + (get_local $4) + ) + (i32.store offset=8 + (get_local $12) + (get_local $3) + ) + (set_local $9 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $12) + ) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + (get_local $9) + ) + (block (result i32) + (i32.store + (get_local $11) + (i32.load + (get_local $1) + ) + ) + (i32.store offset=4 + (get_local $11) + (get_local $4) + ) + (i32.store offset=8 + (get_local $11) + (get_local $3) + ) + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $11) + ) + ) + ) + ) + ) + ) + (block + (set_local $1 + (i32.const 6) + ) + (br $while-out) + ) + ) + (if + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (block + (set_local $16 + (get_local $4) + ) + (set_local $17 + (get_local $3) + ) + (set_local $1 + (i32.const 8) + ) + (br $while-out) + ) + ) + (set_local $9 + (i32.sub + (get_local $5) + (get_local $6) + ) + ) + (if + (i32.le_u + (get_local $6) + (tee_local $14 + (i32.load offset=4 + (get_local $4) + ) + ) + ) + (set_local $5 + (if (result i32) + (i32.eq + (get_local $3) + (i32.const 2) + ) + (block (result i32) + (i32.store + (get_local $8) + (i32.add + (i32.load + (get_local $8) + ) + (get_local $6) + ) + ) + (set_local $3 + (i32.const 2) + ) + (get_local $14) + ) + (get_local $14) + ) + ) + (block + (i32.store + (get_local $8) + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + ) + (i32.store + (get_local $13) + (get_local $5) + ) + (set_local $5 + (i32.load offset=12 + (get_local $4) + ) + ) + (set_local $6 + (i32.sub + (get_local $6) + (get_local $14) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + (i32.store + (get_local $4) + (i32.add + (i32.load + (get_local $4) + ) + (get_local $6) + ) + ) + (i32.store offset=4 + (get_local $4) + (i32.sub + (get_local $5) + (get_local $6) + ) + ) + (set_local $5 + (get_local $9) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 6) + ) + (block + (i32.store offset=16 + (get_local $0) + (i32.add + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.store + (get_local $8) + (tee_local $7 + (get_local $5) + ) + ) + (i32.store + (get_local $13) + (get_local $7) + ) + (set_local $15 + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 8) + ) + (block + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $13) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (set_local $15 + (if (result i32) + (i32.eq + (get_local $17) + (i32.const 2) + ) + (i32.const 0) + (i32.sub + (get_local $2) + (i32.load offset=4 + (get_local $16) + ) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $10) + ) + (get_local $15) + ) + (func $___fwritex (; 18 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (if + (tee_local $5 + (i32.load + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $5) + ) + (set_local $7 + (i32.const 5) + ) + ) + (if + (call $___towrite + (get_local $2) + ) + (set_local $4 + (i32.const 0) + ) + (block + (set_local $6 + (i32.load + (get_local $3) + ) + ) + (set_local $7 + (i32.const 5) + ) + ) + ) + ) + (block $label$break$L5 + (if + (i32.eq + (get_local $7) + (i32.const 5) + ) + (block + (if + (i32.lt_u + (i32.sub + (get_local $6) + (tee_local $3 + (i32.load + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 20) + ) + ) + ) + ) + ) + (get_local $1) + ) + (block + (set_local $4 + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (br $label$break$L5) + ) + ) + (set_local $4 + (get_local $3) + ) + (block $label$break$L10 + (if + (i32.gt_s + (i32.load8_s offset=75 + (get_local $2) + ) + (i32.const -1) + ) + (block + (set_local $3 + (get_local $1) + ) + (loop $while-in + (if + (i32.eqz + (get_local $3) + ) + (block + (set_local $3 + (i32.const 0) + ) + (br $label$break$L10) + ) + ) + (if + (i32.ne + (i32.load8_s + (i32.add + (get_local $0) + (tee_local $6 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + (i32.const 10) + ) + (block + (set_local $3 + (get_local $6) + ) + (br $while-in) + ) + ) + ) + (if + (i32.lt_u + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + (get_local $3) + ) + (block + (set_local $4 + (get_local $3) + ) + (br $label$break$L5) + ) + ) + (set_local $1 + (i32.sub + (get_local $1) + (get_local $3) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (get_local $3) + ) + ) + (set_local $4 + (i32.load + (get_local $5) + ) + ) + ) + (set_local $3 + (i32.const 0) + ) + ) + ) + (drop + (call $_memcpy + (get_local $4) + (get_local $0) + (get_local $1) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $1) + ) + ) + (set_local $4 + (i32.add + (get_local $3) + (get_local $1) + ) + ) + ) + ) + ) + (get_local $4) + ) + (func $_fflush (; 19 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (block $do-once + (if + (get_local $0) + (block + (if + (i32.le_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (block + (set_local $2 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (br $do-once) + ) + ) + (set_local $1 + (i32.eqz + (call $___lockfile + (get_local $0) + ) + ) + ) + (set_local $2 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (if + (i32.eqz + (get_local $1) + ) + (call $___unlockfile + (get_local $0) + ) + ) + ) + (block + (set_local $0 + (if (result i32) + (i32.load + (i32.const 56) + ) + (call $_fflush + (i32.load + (i32.const 56) + ) + ) + (i32.const 0) + ) + ) + (call $___lock + (i32.const 36) + ) + (if + (tee_local $2 + (i32.load + (i32.const 32) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (set_local $0 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (get_local $1) + ) + (i32.const -1) + ) + (call $___lockfile + (get_local $1) + ) + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.load offset=20 + (get_local $1) + ) + (i32.load offset=28 + (get_local $1) + ) + ) + (set_local $2 + (i32.or + (call $___fflush_unlocked + (get_local $1) + ) + (get_local $2) + ) + ) + ) + (if + (get_local $0) + (call $___unlockfile + (get_local $1) + ) + ) + (br_if $while-in + (tee_local $1 + (i32.load offset=56 + (get_local $1) + ) + ) + ) + ) + ) + (set_local $2 + (get_local $0) + ) + ) + (call $___unlock + (i32.const 36) + ) + ) + ) + ) + (get_local $2) + ) + (func $_strlen (; 20 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (block $label$break$L1 + (if + (i32.and + (tee_local $3 + (get_local $0) + ) + (i32.const 3) + ) + (block + (set_local $4 + (get_local $3) + ) + (loop $while-in + (if + (i32.eqz + (i32.load8_s + (get_local $0) + ) + ) + (block + (set_local $5 + (get_local $4) + ) + (br $label$break$L1) + ) + ) + (br_if $while-in + (i32.and + (tee_local $4 + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 3) + ) + ) + (set_local $1 + (get_local $0) + ) + (set_local $2 + (i32.const 4) + ) + ) + ) + (block + (set_local $1 + (get_local $0) + ) + (set_local $2 + (i32.const 4) + ) + ) + ) + ) + (if + (i32.eq + (get_local $2) + (i32.const 4) + ) + (block + (set_local $2 + (get_local $1) + ) + (loop $while-in1 + (if + (i32.and + (i32.xor + (i32.and + (tee_local $1 + (i32.load + (get_local $2) + ) + ) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $1) + (i32.const -16843009) + ) + ) + (set_local $0 + (get_local $2) + ) + (block + (set_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + (if + (i32.and + (get_local $1) + (i32.const 255) + ) + (block + (set_local $1 + (get_local $0) + ) + (loop $while-in3 + (if + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + (block + (set_local $1 + (get_local $0) + ) + (br $while-in3) + ) + ) + ) + ) + ) + (set_local $5 + (get_local $0) + ) + ) + ) + (i32.sub + (get_local $5) + (get_local $3) + ) + ) + (func $___overflow (; 21 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (set_local $5 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store8 + (tee_local $6 + (get_local $5) + ) + (tee_local $9 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $3) + ) + (set_local $8 + (i32.const 4) + ) + ) + (if + (call $___towrite + (get_local $0) + ) + (set_local $4 + (i32.const -1) + ) + (block + (set_local $7 + (i32.load + (get_local $2) + ) + ) + (set_local $8 + (i32.const 4) + ) + ) + ) + ) + (block $do-once + (if + (i32.eq + (get_local $8) + (i32.const 4) + ) + (block + (if + (if (result i32) + (i32.lt_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (get_local $7) + ) + (i32.ne + (tee_local $10 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (i32.load8_s offset=75 + (get_local $0) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $3) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $2) + (get_local $9) + ) + (set_local $4 + (get_local $10) + ) + (br $do-once) + ) + ) + (set_local $4 + (if (result i32) + (i32.eq + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (get_local $6) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + (i32.const 1) + ) + (i32.load8_u + (get_local $6) + ) + (i32.const -1) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + (get_local $4) + ) + (func $___fflush_unlocked (; 22 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (tee_local $0 + (if (result i32) + (if (result i32) + (i32.gt_u + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + (block (result i32) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (i32.eqz + (i32.load + (get_local $1) + ) + ) + ) + (i32.const 0) + ) + (i32.const -1) + (block (result i32) + (if + (i32.lt_u + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (tee_local $6 + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.sub + (get_local $4) + (get_local $6) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=40 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + ) + (func $_memcpy (; 23 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.ge_s + (get_local $2) + (i32.const 4096) + ) + (return + (call $_emscripten_memcpy_big + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (set_local $3 + (get_local $0) + ) + (if + (i32.eq + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.and + (get_local $1) + (i32.const 3) + ) + ) + (block + (loop $while-in + (if + (i32.and + (get_local $0) + (i32.const 3) + ) + (block + (if + (i32.eqz + (get_local $2) + ) + (return + (get_local $3) + ) + ) + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (loop $while-in1 + (if + (i32.ge_s + (get_local $2) + (i32.const 4) + ) + (block + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (get_local $3) + ) + (func $runPostSets (; 24 ;) + (nop) + ) + (func $_memset (; 25 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (if + (i32.ge_s + (get_local $2) + (i32.const 20) + ) + (block + (set_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (if + (tee_local $3 + (i32.and + (get_local $0) + (i32.const 3) + ) + ) + (block + (set_local $3 + (i32.sub + (i32.add + (get_local $0) + (i32.const 4) + ) + (get_local $3) + ) + ) + (loop $while-in + (if + (i32.lt_s + (get_local $0) + (get_local $3) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (set_local $3 + (i32.or + (i32.or + (i32.or + (get_local $1) + (i32.shl + (get_local $1) + (i32.const 8) + ) + ) + (i32.shl + (get_local $1) + (i32.const 16) + ) + ) + (i32.shl + (get_local $1) + (i32.const 24) + ) + ) + ) + (set_local $5 + (i32.and + (get_local $4) + (i32.const -4) + ) + ) + (loop $while-in1 + (if + (i32.lt_s + (get_local $0) + (get_local $5) + ) + (block + (i32.store + (get_local $0) + (get_local $3) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.lt_s + (get_local $0) + (get_local $4) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $_puts (; 26 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (set_local $3 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (tee_local $1 + (i32.load + (i32.const 52) + ) + ) + ) + (i32.const -1) + ) + (call $___lockfile + (get_local $1) + ) + (i32.const 0) + ) + ) + (set_local $0 + (block $do-once (result i32) + (if (result i32) + (i32.lt_s + (i32.add + (call $_fwrite + (get_local $0) + (call $_strlen + (get_local $0) + ) + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + (i32.const 0) + ) + (i32.const 1) + (block (result i32) + (if + (if (result i32) + (i32.ne + (i32.load8_s offset=75 + (get_local $1) + ) + (i32.const 10) + ) + (i32.lt_u + (tee_local $2 + (i32.load + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $1) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $4) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $2) + (i32.const 10) + ) + (br $do-once + (i32.const 0) + ) + ) + ) + (i32.lt_s + (call $___overflow + (get_local $1) + (i32.const 10) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (if + (get_local $3) + (call $___unlockfile + (get_local $1) + ) + ) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (func $___stdio_seek (; 27 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (i32.store + (tee_local $3 + (get_local $4) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + (i32.store offset=16 + (get_local $3) + (get_local $2) + ) + (set_local $0 + (if (result i32) + (i32.lt_s + (call $___syscall_ret + (call $___syscall140 + (i32.const 140) + (get_local $3) + ) + ) + (i32.const 0) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.const -1) + ) + (i32.const -1) + ) + (i32.load + (get_local $0) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $___towrite (; 28 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $2 + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 74) + ) + ) + ) + ) + (i32.store8 + (get_local $1) + (i32.or + (i32.add + (get_local $2) + (i32.const 255) + ) + (get_local $2) + ) + ) + (tee_local $0 + (if (result i32) + (i32.and + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.const 8) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.or + (get_local $2) + (i32.const 32) + ) + ) + (i32.const -1) + ) + (block (result i32) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=28 + (get_local $0) + (tee_local $1 + (i32.load offset=44 + (get_local $0) + ) + ) + ) + (i32.store offset=20 + (get_local $0) + (get_local $1) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (get_local $1) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (func $_fwrite (; 29 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.mul + (get_local $2) + (get_local $1) + ) + ) + (if + (i32.gt_s + (i32.load offset=76 + (get_local $3) + ) + (i32.const -1) + ) + (block + (set_local $5 + (i32.eqz + (call $___lockfile + (get_local $3) + ) + ) + ) + (set_local $0 + (call $___fwritex + (get_local $0) + (get_local $4) + (get_local $3) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (call $___unlockfile + (get_local $3) + ) + ) + ) + (set_local $0 + (call $___fwritex + (get_local $0) + (get_local $4) + (get_local $3) + ) + ) + ) + (if + (i32.ne + (get_local $0) + (get_local $4) + ) + (set_local $2 + (if (result i32) + (get_local $1) + (i32.div_u + (get_local $0) + (get_local $1) + ) + (i32.const 0) + ) + ) + ) + (get_local $2) + ) + (func $___stdout_write (; 30 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 80) + ) + ) + (set_local $3 + (get_local $4) + ) + (i32.store offset=36 + (get_local $0) + (i32.const 5) + ) + (if + (if (result i32) + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 64) + ) + (i32.const 0) + (block (result i32) + (i32.store + (get_local $3) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 21505) + ) + (i32.store offset=8 + (get_local $3) + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + (call $___syscall54 + (i32.const 54) + (get_local $3) + ) + ) + ) + (i32.store8 offset=75 + (get_local $0) + (i32.const -1) + ) + ) + (set_local $3 + (call $___stdio_write + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $3) + ) + (func $___stdio_close (; 31 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $2 + (get_local $1) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (set_local $0 + (call $___syscall_ret + (call $___syscall6 + (i32.const 6) + (get_local $2) + ) + ) + ) + (set_global $STACKTOP + (get_local $1) + ) + (get_local $0) + ) + (func $___syscall_ret (; 32 ;) (param $0 i32) (result i32) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const -4096) + ) + (block (result i32) + (i32.store + (call $___errno_location) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + (get_local $0) + ) + ) + (func $dynCall_iiii (; 33 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call_indirect (type $FUNCSIG$iiii) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (func $stackAlloc (; 34 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $0) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $___errno_location (; 35 ;) (result i32) + (if (result i32) + (i32.load + (i32.const 8) + ) + (i32.load offset=60 + (call $_pthread_self) + ) + (i32.const 60) + ) + ) + (func $setThrew (; 36 ;) (param $0 i32) (param $1 i32) + (if + (i32.eqz + (get_global $__THREW__) + ) + (block + (set_global $__THREW__ + (get_local $0) + ) + (set_global $threwValue + (get_local $1) + ) + ) + ) + ) + (func $dynCall_ii (; 37 ;) (param $0 i32) (param $1 i32) (result i32) + (call_indirect (type $FUNCSIG$ii) + (get_local $1) + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + ) + (func $_cleanup_418 (; 38 ;) (param $0 i32) + (if + (i32.eqz + (i32.load offset=68 + (get_local $0) + ) + ) + (call $___unlockfile + (get_local $0) + ) + ) + ) + (func $establishStackSpace (; 39 ;) (param $0 i32) (param $1 i32) + (set_global $STACKTOP + (get_local $0) + ) + (set_global $STACK_MAX + (get_local $1) + ) + ) + (func $dynCall_vi (; 40 ;) (param $0 i32) (param $1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $1) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 10) + ) + ) + ) + (func $b1 (; 41 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $abort + (i32.const 1) + ) + (i32.const 0) + ) + (func $stackRestore (; 42 ;) (param $0 i32) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $setTempRet0 (; 43 ;) (param $0 i32) + (set_global $tempRet0 + (get_local $0) + ) + ) + (func $b0 (; 44 ;) (param $0 i32) (result i32) + (call $abort + (i32.const 0) + ) + (i32.const 0) + ) + (func $___unlockfile (; 45 ;) (param $0 i32) + (nop) + ) + (func $___lockfile (; 46 ;) (param $0 i32) (result i32) + (i32.const 0) + ) + (func $getTempRet0 (; 47 ;) (result i32) + (get_global $tempRet0) + ) + (func $_main (; 48 ;) (result i32) + (drop + (call $_puts + (i32.const 672) + ) + ) + (i32.const 0) + ) + (func $stackSave (; 49 ;) (result i32) + (get_global $STACKTOP) + ) + (func $b2 (; 50 ;) (param $0 i32) + (call $abort + (i32.const 2) + ) + ) +) diff --git a/src/binaryen/test/emcc_O2_hello_world.fromasm.clamp.no-opts b/src/binaryen/test/emcc_O2_hello_world.fromasm.clamp.no-opts new file mode 100644 index 0000000000..52192d925d --- /dev/null +++ b/src/binaryen/test/emcc_O2_hello_world.fromasm.clamp.no-opts @@ -0,0 +1,11942 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "ABORT" (global $ABORT$asm2wasm$import i32)) + (import "global" "NaN" (global $nan$asm2wasm$import f64)) + (import "global" "Infinity" (global $inf$asm2wasm$import f64)) + (import "env" "abort" (func $abort (param i32))) + (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) + (import "env" "_pthread_self" (func $_pthread_self (result i32))) + (import "env" "_sysconf" (func $_sysconf (param i32) (result i32))) + (import "env" "___lock" (func $___lock (param i32))) + (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) + (import "env" "_abort" (func $_abort)) + (import "env" "_sbrk" (func $_sbrk (param i32) (result i32))) + (import "env" "_time" (func $_time (param i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) + (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $___unlock (param i32))) + (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) + (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 18 18 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $ABORT (mut i32) (get_global $ABORT$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $setjmpId (mut i32) (i32.const 0)) + (global $undef (mut i32) (i32.const 0)) + (global $nan (mut f64) (get_global $nan$asm2wasm$import)) + (global $inf (mut f64) (get_global $inf$asm2wasm$import)) + (global $tempInt (mut i32) (i32.const 0)) + (global $tempBigInt (mut i32) (i32.const 0)) + (global $tempBigIntP (mut i32) (i32.const 0)) + (global $tempBigIntS (mut i32) (i32.const 0)) + (global $tempBigIntR (mut f64) (f64.const 0)) + (global $tempBigIntI (mut i32) (i32.const 0)) + (global $tempBigIntD (mut i32) (i32.const 0)) + (global $tempValue (mut i32) (i32.const 0)) + (global $tempDouble (mut f64) (f64.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (global $tempRet1 (mut i32) (i32.const 0)) + (global $tempRet2 (mut i32) (i32.const 0)) + (global $tempRet3 (mut i32) (i32.const 0)) + (global $tempRet4 (mut i32) (i32.const 0)) + (global $tempRet5 (mut i32) (i32.const 0)) + (global $tempRet6 (mut i32) (i32.const 0)) + (global $tempRet7 (mut i32) (i32.const 0)) + (global $tempRet8 (mut i32) (i32.const 0)) + (global $tempRet9 (mut i32) (i32.const 0)) + (global $tempFloat (mut f64) (f64.const 0)) + (elem (get_global $tableBase) $b0 $___stdio_close $b1 $b1 $___stdout_write $___stdio_seek $b1 $___stdio_write $b1 $b1 $b2 $b2 $b2 $b2 $_cleanup_418 $b2 $b2 $b2) + (export "_free" (func $_free)) + (export "_main" (func $_main)) + (export "_memset" (func $_memset)) + (export "_malloc" (func $_malloc)) + (export "_memcpy" (func $_memcpy)) + (export "_fflush" (func $_fflush)) + (export "___errno_location" (func $___errno_location)) + (export "runPostSets" (func $runPostSets)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackSave" (func $stackSave)) + (export "stackRestore" (func $stackRestore)) + (export "establishStackSpace" (func $establishStackSpace)) + (export "setThrew" (func $setThrew)) + (export "setTempRet0" (func $setTempRet0)) + (export "getTempRet0" (func $getTempRet0)) + (export "dynCall_ii" (func $dynCall_ii)) + (export "dynCall_iiii" (func $dynCall_iiii)) + (export "dynCall_vi" (func $dynCall_vi)) + (func $_malloc (; 15 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (local $i10 i32) + (local $i11 i32) + (local $i12 i32) + (local $i13 i32) + (local $i14 i32) + (local $i15 i32) + (local $i16 i32) + (local $i17 i32) + (local $i18 i32) + (local $i19 i32) + (local $i20 i32) + (local $i21 i32) + (local $i22 i32) + (local $i23 i32) + (local $i24 i32) + (local $i25 i32) + (local $i26 i32) + (local $i27 i32) + (local $i28 i32) + (local $i29 i32) + (local $i30 i32) + (local $i31 i32) + (local $i32 i32) + (local $i33 i32) + (local $i34 i32) + (local $i35 i32) + (local $i36 i32) + (local $i37 i32) + (local $i38 i32) + (local $i39 i32) + (local $i40 i32) + (local $i41 i32) + (local $i42 i32) + (local $i43 i32) + (local $i44 i32) + (local $i45 i32) + (local $i46 i32) + (local $i47 i32) + (local $i48 i32) + (local $i49 i32) + (local $i50 i32) + (local $i51 i32) + (local $i52 i32) + (local $i53 i32) + (local $i54 i32) + (local $i55 i32) + (local $i56 i32) + (local $i57 i32) + (local $i58 i32) + (local $i59 i32) + (local $i60 i32) + (local $i61 i32) + (local $i62 i32) + (local $i63 i32) + (local $i64 i32) + (local $i65 i32) + (local $i66 i32) + (local $i67 i32) + (local $i68 i32) + (local $i69 i32) + (local $i70 i32) + (local $i71 i32) + (local $i72 i32) + (local $i73 i32) + (local $i74 i32) + (local $i75 i32) + (local $i76 i32) + (local $i77 i32) + (local $i78 i32) + (local $i79 i32) + (local $i80 i32) + (local $i81 i32) + (local $i82 i32) + (local $i83 i32) + (local $i84 i32) + (local $i85 i32) + (local $i86 i32) + (local $i87 i32) + (local $i88 i32) + (local $i89 i32) + (local $i90 i32) + (local $i91 i32) + (local $i92 i32) + (block $do-once + (if + (i32.lt_u + (get_local $i1) + (i32.const 245) + ) + (block + (set_local $i2 + (if (result i32) + (i32.lt_u + (get_local $i1) + (i32.const 11) + ) + (i32.const 16) + (i32.and + (i32.add + (get_local $i1) + (i32.const 11) + ) + (i32.const -8) + ) + ) + ) + (set_local $i3 + (i32.shr_u + (get_local $i2) + (i32.const 3) + ) + ) + (set_local $i4 + (i32.load + (i32.const 176) + ) + ) + (set_local $i5 + (i32.shr_u + (get_local $i4) + (get_local $i3) + ) + ) + (if + (i32.and + (get_local $i5) + (i32.const 3) + ) + (block + (set_local $i6 + (i32.add + (i32.xor + (i32.and + (get_local $i5) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $i3) + ) + ) + (set_local $i7 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i6) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i8 + (i32.add + (get_local $i7) + (i32.const 8) + ) + ) + (set_local $i9 + (i32.load + (get_local $i8) + ) + ) + (set_local $i10 + (i32.add + (get_local $i9) + (i32.const 8) + ) + ) + (set_local $i11 + (i32.load + (get_local $i10) + ) + ) + (block $do-once0 + (if + (i32.ne + (get_local $i7) + (get_local $i11) + ) + (block + (if + (i32.lt_u + (get_local $i11) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i12 + (i32.add + (get_local $i11) + (i32.const 12) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i12) + ) + (get_local $i9) + ) + (block + (i32.store + (get_local $i12) + (get_local $i7) + ) + (i32.store + (get_local $i8) + (get_local $i11) + ) + (br $do-once0) + ) + (call $_abort) + ) + ) + (i32.store + (i32.const 176) + (i32.and + (get_local $i4) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i6) + ) + (i32.const -1) + ) + ) + ) + ) + ) + (set_local $i11 + (i32.shl + (get_local $i6) + (i32.const 3) + ) + ) + (i32.store + (i32.add + (get_local $i9) + (i32.const 4) + ) + (i32.or + (get_local $i11) + (i32.const 3) + ) + ) + (set_local $i8 + (i32.add + (i32.add + (get_local $i9) + (get_local $i11) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $i8) + (i32.or + (i32.load + (get_local $i8) + ) + (i32.const 1) + ) + ) + (set_local $i13 + (get_local $i10) + ) + (return + (get_local $i13) + ) + ) + ) + (set_local $i8 + (i32.load + (i32.const 184) + ) + ) + (if + (i32.gt_u + (get_local $i2) + (get_local $i8) + ) + (block + (if + (get_local $i5) + (block + (set_local $i11 + (i32.shl + (i32.const 2) + (get_local $i3) + ) + ) + (set_local $i7 + (i32.and + (i32.shl + (get_local $i5) + (get_local $i3) + ) + (i32.or + (get_local $i11) + (i32.sub + (i32.const 0) + (get_local $i11) + ) + ) + ) + ) + (set_local $i11 + (i32.add + (i32.and + (get_local $i7) + (i32.sub + (i32.const 0) + (get_local $i7) + ) + ) + (i32.const -1) + ) + ) + (set_local $i7 + (i32.and + (i32.shr_u + (get_local $i11) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $i12 + (i32.shr_u + (get_local $i11) + (get_local $i7) + ) + ) + (set_local $i11 + (i32.and + (i32.shr_u + (get_local $i12) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $i14 + (i32.shr_u + (get_local $i12) + (get_local $i11) + ) + ) + (set_local $i12 + (i32.and + (i32.shr_u + (get_local $i14) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $i15 + (i32.shr_u + (get_local $i14) + (get_local $i12) + ) + ) + (set_local $i14 + (i32.and + (i32.shr_u + (get_local $i15) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $i16 + (i32.shr_u + (get_local $i15) + (get_local $i14) + ) + ) + (set_local $i15 + (i32.and + (i32.shr_u + (get_local $i16) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $i17 + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $i11) + (get_local $i7) + ) + (get_local $i12) + ) + (get_local $i14) + ) + (get_local $i15) + ) + (i32.shr_u + (get_local $i16) + (get_local $i15) + ) + ) + ) + (set_local $i15 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i17) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i16 + (i32.add + (get_local $i15) + (i32.const 8) + ) + ) + (set_local $i14 + (i32.load + (get_local $i16) + ) + ) + (set_local $i12 + (i32.add + (get_local $i14) + (i32.const 8) + ) + ) + (set_local $i7 + (i32.load + (get_local $i12) + ) + ) + (block $do-once2 + (if + (i32.ne + (get_local $i15) + (get_local $i7) + ) + (block + (if + (i32.lt_u + (get_local $i7) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i11 + (i32.add + (get_local $i7) + (i32.const 12) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i11) + ) + (get_local $i14) + ) + (block + (i32.store + (get_local $i11) + (get_local $i15) + ) + (i32.store + (get_local $i16) + (get_local $i7) + ) + (set_local $i18 + (i32.load + (i32.const 184) + ) + ) + (br $do-once2) + ) + (call $_abort) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (get_local $i4) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i17) + ) + (i32.const -1) + ) + ) + ) + (set_local $i18 + (get_local $i8) + ) + ) + ) + ) + (set_local $i8 + (i32.sub + (i32.shl + (get_local $i17) + (i32.const 3) + ) + (get_local $i2) + ) + ) + (i32.store + (i32.add + (get_local $i14) + (i32.const 4) + ) + (i32.or + (get_local $i2) + (i32.const 3) + ) + ) + (set_local $i4 + (i32.add + (get_local $i14) + (get_local $i2) + ) + ) + (i32.store + (i32.add + (get_local $i4) + (i32.const 4) + ) + (i32.or + (get_local $i8) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i4) + (get_local $i8) + ) + (get_local $i8) + ) + (if + (get_local $i18) + (block + (set_local $i7 + (i32.load + (i32.const 196) + ) + ) + (set_local $i16 + (i32.shr_u + (get_local $i18) + (i32.const 3) + ) + ) + (set_local $i15 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i16) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i3 + (i32.load + (i32.const 176) + ) + ) + (set_local $i5 + (i32.shl + (i32.const 1) + (get_local $i16) + ) + ) + (if + (i32.and + (get_local $i3) + (get_local $i5) + ) + (block + (set_local $i16 + (i32.add + (get_local $i15) + (i32.const 8) + ) + ) + (set_local $i10 + (i32.load + (get_local $i16) + ) + ) + (if + (i32.lt_u + (get_local $i10) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $i19 + (get_local $i16) + ) + (set_local $i20 + (get_local $i10) + ) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i3) + (get_local $i5) + ) + ) + (set_local $i19 + (i32.add + (get_local $i15) + (i32.const 8) + ) + ) + (set_local $i20 + (get_local $i15) + ) + ) + ) + (i32.store + (get_local $i19) + (get_local $i7) + ) + (i32.store + (i32.add + (get_local $i20) + (i32.const 12) + ) + (get_local $i7) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 8) + ) + (get_local $i20) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 12) + ) + (get_local $i15) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $i8) + ) + (i32.store + (i32.const 196) + (get_local $i4) + ) + (set_local $i13 + (get_local $i12) + ) + (return + (get_local $i13) + ) + ) + ) + (set_local $i4 + (i32.load + (i32.const 180) + ) + ) + (if + (get_local $i4) + (block + (set_local $i8 + (i32.add + (i32.and + (get_local $i4) + (i32.sub + (i32.const 0) + (get_local $i4) + ) + ) + (i32.const -1) + ) + ) + (set_local $i4 + (i32.and + (i32.shr_u + (get_local $i8) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $i15 + (i32.shr_u + (get_local $i8) + (get_local $i4) + ) + ) + (set_local $i8 + (i32.and + (i32.shr_u + (get_local $i15) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $i7 + (i32.shr_u + (get_local $i15) + (get_local $i8) + ) + ) + (set_local $i15 + (i32.and + (i32.shr_u + (get_local $i7) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $i5 + (i32.shr_u + (get_local $i7) + (get_local $i15) + ) + ) + (set_local $i7 + (i32.and + (i32.shr_u + (get_local $i5) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $i3 + (i32.shr_u + (get_local $i5) + (get_local $i7) + ) + ) + (set_local $i5 + (i32.and + (i32.shr_u + (get_local $i3) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $i10 + (i32.load + (i32.add + (i32.const 480) + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $i8) + (get_local $i4) + ) + (get_local $i15) + ) + (get_local $i7) + ) + (get_local $i5) + ) + (i32.shr_u + (get_local $i3) + (get_local $i5) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $i5 + (i32.sub + (i32.and + (i32.load + (i32.add + (get_local $i10) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i2) + ) + ) + (set_local $i3 + (get_local $i10) + ) + (set_local $i7 + (get_local $i10) + ) + (loop $while-in + (block $while-out + (set_local $i10 + (i32.load + (i32.add + (get_local $i3) + (i32.const 16) + ) + ) + ) + (if + (i32.eqz + (get_local $i10) + ) + (block + (set_local $i15 + (i32.load + (i32.add + (get_local $i3) + (i32.const 20) + ) + ) + ) + (if + (i32.eqz + (get_local $i15) + ) + (block + (set_local $i21 + (get_local $i5) + ) + (set_local $i22 + (get_local $i7) + ) + (br $while-out) + ) + (set_local $i23 + (get_local $i15) + ) + ) + ) + (set_local $i23 + (get_local $i10) + ) + ) + (set_local $i10 + (i32.sub + (i32.and + (i32.load + (i32.add + (get_local $i23) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i2) + ) + ) + (set_local $i15 + (i32.lt_u + (get_local $i10) + (get_local $i5) + ) + ) + (set_local $i5 + (if (result i32) + (get_local $i15) + (get_local $i10) + (get_local $i5) + ) + ) + (set_local $i3 + (get_local $i23) + ) + (set_local $i7 + (if (result i32) + (get_local $i15) + (get_local $i23) + (get_local $i7) + ) + ) + (br $while-in) + ) + ) + (set_local $i7 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i22) + (get_local $i7) + ) + (call $_abort) + ) + (set_local $i3 + (i32.add + (get_local $i22) + (get_local $i2) + ) + ) + (if + (i32.ge_u + (get_local $i22) + (get_local $i3) + ) + (call $_abort) + ) + (set_local $i5 + (i32.load + (i32.add + (get_local $i22) + (i32.const 24) + ) + ) + ) + (set_local $i12 + (i32.load + (i32.add + (get_local $i22) + (i32.const 12) + ) + ) + ) + (block $do-once4 + (if + (i32.eq + (get_local $i12) + (get_local $i22) + ) + (block + (set_local $i14 + (i32.add + (get_local $i22) + (i32.const 20) + ) + ) + (set_local $i17 + (i32.load + (get_local $i14) + ) + ) + (if + (i32.eqz + (get_local $i17) + ) + (block + (set_local $i15 + (i32.add + (get_local $i22) + (i32.const 16) + ) + ) + (set_local $i10 + (i32.load + (get_local $i15) + ) + ) + (if + (i32.eqz + (get_local $i10) + ) + (block + (set_local $i24 + (i32.const 0) + ) + (br $do-once4) + ) + (block + (set_local $i25 + (get_local $i10) + ) + (set_local $i26 + (get_local $i15) + ) + ) + ) + ) + (block + (set_local $i25 + (get_local $i17) + ) + (set_local $i26 + (get_local $i14) + ) + ) + ) + (loop $while-in7 + (block $while-out6 + (set_local $i14 + (i32.add + (get_local $i25) + (i32.const 20) + ) + ) + (set_local $i17 + (i32.load + (get_local $i14) + ) + ) + (if + (get_local $i17) + (block + (set_local $i25 + (get_local $i17) + ) + (set_local $i26 + (get_local $i14) + ) + (br $while-in7) + ) + ) + (set_local $i14 + (i32.add + (get_local $i25) + (i32.const 16) + ) + ) + (set_local $i17 + (i32.load + (get_local $i14) + ) + ) + (if + (i32.eqz + (get_local $i17) + ) + (block + (set_local $i27 + (get_local $i25) + ) + (set_local $i28 + (get_local $i26) + ) + (br $while-out6) + ) + (block + (set_local $i25 + (get_local $i17) + ) + (set_local $i26 + (get_local $i14) + ) + ) + ) + (br $while-in7) + ) + ) + (if + (i32.lt_u + (get_local $i28) + (get_local $i7) + ) + (call $_abort) + (block + (i32.store + (get_local $i28) + (i32.const 0) + ) + (set_local $i24 + (get_local $i27) + ) + (br $do-once4) + ) + ) + ) + (block + (set_local $i14 + (i32.load + (i32.add + (get_local $i22) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $i14) + (get_local $i7) + ) + (call $_abort) + ) + (set_local $i17 + (i32.add + (get_local $i14) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $i17) + ) + (get_local $i22) + ) + (call $_abort) + ) + (set_local $i15 + (i32.add + (get_local $i12) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i15) + ) + (get_local $i22) + ) + (block + (i32.store + (get_local $i17) + (get_local $i12) + ) + (i32.store + (get_local $i15) + (get_local $i14) + ) + (set_local $i24 + (get_local $i12) + ) + (br $do-once4) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once8 + (if + (get_local $i5) + (block + (set_local $i12 + (i32.load + (i32.add + (get_local $i22) + (i32.const 28) + ) + ) + ) + (set_local $i7 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i12) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $i22) + (i32.load + (get_local $i7) + ) + ) + (block + (i32.store + (get_local $i7) + (get_local $i24) + ) + (if + (i32.eqz + (get_local $i24) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i12) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $i5) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i12 + (i32.add + (get_local $i5) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i12) + ) + (get_local $i22) + ) + (i32.store + (get_local $i12) + (get_local $i24) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 20) + ) + (get_local $i24) + ) + ) + (if + (i32.eqz + (get_local $i24) + ) + (br $do-once8) + ) + ) + ) + (set_local $i12 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i24) + (get_local $i12) + ) + (call $_abort) + ) + (i32.store + (i32.add + (get_local $i24) + (i32.const 24) + ) + (get_local $i5) + ) + (set_local $i7 + (i32.load + (i32.add + (get_local $i22) + (i32.const 16) + ) + ) + ) + (block $do-once10 + (if + (get_local $i7) + (if + (i32.lt_u + (get_local $i7) + (get_local $i12) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i24) + (i32.const 16) + ) + (get_local $i7) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 24) + ) + (get_local $i24) + ) + (br $do-once10) + ) + ) + ) + ) + (set_local $i7 + (i32.load + (i32.add + (get_local $i22) + (i32.const 20) + ) + ) + ) + (if + (get_local $i7) + (if + (i32.lt_u + (get_local $i7) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i24) + (i32.const 20) + ) + (get_local $i7) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 24) + ) + (get_local $i24) + ) + (br $do-once8) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $i21) + (i32.const 16) + ) + (block + (set_local $i5 + (i32.add + (get_local $i21) + (get_local $i2) + ) + ) + (i32.store + (i32.add + (get_local $i22) + (i32.const 4) + ) + (i32.or + (get_local $i5) + (i32.const 3) + ) + ) + (set_local $i7 + (i32.add + (i32.add + (get_local $i22) + (get_local $i5) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $i7) + (i32.or + (i32.load + (get_local $i7) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store + (i32.add + (get_local $i22) + (i32.const 4) + ) + (i32.or + (get_local $i2) + (i32.const 3) + ) + ) + (i32.store + (i32.add + (get_local $i3) + (i32.const 4) + ) + (i32.or + (get_local $i21) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i3) + (get_local $i21) + ) + (get_local $i21) + ) + (set_local $i7 + (i32.load + (i32.const 184) + ) + ) + (if + (get_local $i7) + (block + (set_local $i5 + (i32.load + (i32.const 196) + ) + ) + (set_local $i12 + (i32.shr_u + (get_local $i7) + (i32.const 3) + ) + ) + (set_local $i7 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i12) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i14 + (i32.load + (i32.const 176) + ) + ) + (set_local $i15 + (i32.shl + (i32.const 1) + (get_local $i12) + ) + ) + (if + (i32.and + (get_local $i14) + (get_local $i15) + ) + (block + (set_local $i12 + (i32.add + (get_local $i7) + (i32.const 8) + ) + ) + (set_local $i17 + (i32.load + (get_local $i12) + ) + ) + (if + (i32.lt_u + (get_local $i17) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $i29 + (get_local $i12) + ) + (set_local $i30 + (get_local $i17) + ) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i14) + (get_local $i15) + ) + ) + (set_local $i29 + (i32.add + (get_local $i7) + (i32.const 8) + ) + ) + (set_local $i30 + (get_local $i7) + ) + ) + ) + (i32.store + (get_local $i29) + (get_local $i5) + ) + (i32.store + (i32.add + (get_local $i30) + (i32.const 12) + ) + (get_local $i5) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 8) + ) + (get_local $i30) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 12) + ) + (get_local $i7) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $i21) + ) + (i32.store + (i32.const 196) + (get_local $i3) + ) + ) + ) + (set_local $i13 + (i32.add + (get_local $i22) + (i32.const 8) + ) + ) + (return + (get_local $i13) + ) + ) + (set_local $i31 + (get_local $i2) + ) + ) + ) + (set_local $i31 + (get_local $i2) + ) + ) + ) + (if + (i32.le_u + (get_local $i1) + (i32.const -65) + ) + (block + (set_local $i7 + (i32.add + (get_local $i1) + (i32.const 11) + ) + ) + (set_local $i5 + (i32.and + (get_local $i7) + (i32.const -8) + ) + ) + (set_local $i15 + (i32.load + (i32.const 180) + ) + ) + (if + (get_local $i15) + (block + (set_local $i14 + (i32.sub + (i32.const 0) + (get_local $i5) + ) + ) + (set_local $i17 + (i32.shr_u + (get_local $i7) + (i32.const 8) + ) + ) + (if + (get_local $i17) + (if + (i32.gt_u + (get_local $i5) + (i32.const 16777215) + ) + (set_local $i32 + (i32.const 31) + ) + (block + (set_local $i7 + (i32.and + (i32.shr_u + (i32.add + (get_local $i17) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $i12 + (i32.shl + (get_local $i17) + (get_local $i7) + ) + ) + (set_local $i17 + (i32.and + (i32.shr_u + (i32.add + (get_local $i12) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $i10 + (i32.shl + (get_local $i12) + (get_local $i17) + ) + ) + (set_local $i12 + (i32.and + (i32.shr_u + (i32.add + (get_local $i10) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $i4 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $i17) + (get_local $i7) + ) + (get_local $i12) + ) + ) + (i32.shr_u + (i32.shl + (get_local $i10) + (get_local $i12) + ) + (i32.const 15) + ) + ) + ) + (set_local $i32 + (i32.or + (i32.and + (i32.shr_u + (get_local $i5) + (i32.add + (get_local $i4) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $i4) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i32 + (i32.const 0) + ) + ) + (set_local $i4 + (i32.load + (i32.add + (i32.const 480) + (i32.shl + (get_local $i32) + (i32.const 2) + ) + ) + ) + ) + (block $label$break$L123 + (if + (i32.eqz + (get_local $i4) + ) + (block + (set_local $i33 + (get_local $i14) + ) + (set_local $i34 + (i32.const 0) + ) + (set_local $i35 + (i32.const 0) + ) + (set_local $i36 + (i32.const 86) + ) + ) + (block + (set_local $i12 + (get_local $i14) + ) + (set_local $i10 + (i32.const 0) + ) + (set_local $i7 + (i32.shl + (get_local $i5) + (if (result i32) + (i32.eq + (get_local $i32) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $i32) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i17 + (get_local $i4) + ) + (set_local $i8 + (i32.const 0) + ) + (loop $while-in14 + (block $while-out13 + (set_local $i16 + (i32.and + (i32.load + (i32.add + (get_local $i17) + (i32.const 4) + ) + ) + (i32.const -8) + ) + ) + (set_local $i9 + (i32.sub + (get_local $i16) + (get_local $i5) + ) + ) + (if + (i32.lt_u + (get_local $i9) + (get_local $i12) + ) + (if + (i32.eq + (get_local $i16) + (get_local $i5) + ) + (block + (set_local $i37 + (get_local $i9) + ) + (set_local $i38 + (get_local $i17) + ) + (set_local $i39 + (get_local $i17) + ) + (set_local $i36 + (i32.const 90) + ) + (br $label$break$L123) + ) + (block + (set_local $i40 + (get_local $i9) + ) + (set_local $i41 + (get_local $i17) + ) + ) + ) + (block + (set_local $i40 + (get_local $i12) + ) + (set_local $i41 + (get_local $i8) + ) + ) + ) + (set_local $i9 + (i32.load + (i32.add + (get_local $i17) + (i32.const 20) + ) + ) + ) + (set_local $i17 + (i32.load + (i32.add + (i32.add + (get_local $i17) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $i7) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $i16 + (if (result i32) + (i32.or + (i32.eq + (get_local $i9) + (i32.const 0) + ) + (i32.eq + (get_local $i9) + (get_local $i17) + ) + ) + (get_local $i10) + (get_local $i9) + ) + ) + (set_local $i9 + (i32.eq + (get_local $i17) + (i32.const 0) + ) + ) + (if + (get_local $i9) + (block + (set_local $i33 + (get_local $i40) + ) + (set_local $i34 + (get_local $i16) + ) + (set_local $i35 + (get_local $i41) + ) + (set_local $i36 + (i32.const 86) + ) + (br $while-out13) + ) + (block + (set_local $i12 + (get_local $i40) + ) + (set_local $i10 + (get_local $i16) + ) + (set_local $i7 + (i32.shl + (get_local $i7) + (i32.xor + (i32.and + (get_local $i9) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (set_local $i8 + (get_local $i41) + ) + ) + ) + (br $while-in14) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 86) + ) + (block + (if + (i32.and + (i32.eq + (get_local $i34) + (i32.const 0) + ) + (i32.eq + (get_local $i35) + (i32.const 0) + ) + ) + (block + (set_local $i4 + (i32.shl + (i32.const 2) + (get_local $i32) + ) + ) + (set_local $i14 + (i32.and + (get_local $i15) + (i32.or + (get_local $i4) + (i32.sub + (i32.const 0) + (get_local $i4) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $i14) + ) + (block + (set_local $i31 + (get_local $i5) + ) + (br $do-once) + ) + ) + (set_local $i4 + (i32.add + (i32.and + (get_local $i14) + (i32.sub + (i32.const 0) + (get_local $i14) + ) + ) + (i32.const -1) + ) + ) + (set_local $i14 + (i32.and + (i32.shr_u + (get_local $i4) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $i2 + (i32.shr_u + (get_local $i4) + (get_local $i14) + ) + ) + (set_local $i4 + (i32.and + (i32.shr_u + (get_local $i2) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $i3 + (i32.shr_u + (get_local $i2) + (get_local $i4) + ) + ) + (set_local $i2 + (i32.and + (i32.shr_u + (get_local $i3) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $i8 + (i32.shr_u + (get_local $i3) + (get_local $i2) + ) + ) + (set_local $i3 + (i32.and + (i32.shr_u + (get_local $i8) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $i7 + (i32.shr_u + (get_local $i8) + (get_local $i3) + ) + ) + (set_local $i8 + (i32.and + (i32.shr_u + (get_local $i7) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $i42 + (i32.load + (i32.add + (i32.const 480) + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $i4) + (get_local $i14) + ) + (get_local $i2) + ) + (get_local $i3) + ) + (get_local $i8) + ) + (i32.shr_u + (get_local $i7) + (get_local $i8) + ) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (set_local $i42 + (get_local $i34) + ) + ) + (if + (i32.eqz + (get_local $i42) + ) + (block + (set_local $i43 + (get_local $i33) + ) + (set_local $i44 + (get_local $i35) + ) + ) + (block + (set_local $i37 + (get_local $i33) + ) + (set_local $i38 + (get_local $i42) + ) + (set_local $i39 + (get_local $i35) + ) + (set_local $i36 + (i32.const 90) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 90) + ) + (loop $while-in16 + (block $while-out15 + (set_local $i36 + (i32.const 0) + ) + (set_local $i8 + (i32.sub + (i32.and + (i32.load + (i32.add + (get_local $i38) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i5) + ) + ) + (set_local $i7 + (i32.lt_u + (get_local $i8) + (get_local $i37) + ) + ) + (set_local $i3 + (if (result i32) + (get_local $i7) + (get_local $i8) + (get_local $i37) + ) + ) + (set_local $i8 + (if (result i32) + (get_local $i7) + (get_local $i38) + (get_local $i39) + ) + ) + (set_local $i7 + (i32.load + (i32.add + (get_local $i38) + (i32.const 16) + ) + ) + ) + (if + (get_local $i7) + (block + (set_local $i37 + (get_local $i3) + ) + (set_local $i38 + (get_local $i7) + ) + (set_local $i39 + (get_local $i8) + ) + (set_local $i36 + (i32.const 90) + ) + (br $while-in16) + ) + ) + (set_local $i38 + (i32.load + (i32.add + (get_local $i38) + (i32.const 20) + ) + ) + ) + (if + (i32.eqz + (get_local $i38) + ) + (block + (set_local $i43 + (get_local $i3) + ) + (set_local $i44 + (get_local $i8) + ) + (br $while-out15) + ) + (block + (set_local $i37 + (get_local $i3) + ) + (set_local $i39 + (get_local $i8) + ) + (set_local $i36 + (i32.const 90) + ) + ) + ) + (br $while-in16) + ) + ) + ) + (if + (if (result i32) + (i32.ne + (get_local $i44) + (i32.const 0) + ) + (i32.lt_u + (get_local $i43) + (i32.sub + (i32.load + (i32.const 184) + ) + (get_local $i5) + ) + ) + (i32.const 0) + ) + (block + (set_local $i15 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i44) + (get_local $i15) + ) + (call $_abort) + ) + (set_local $i8 + (i32.add + (get_local $i44) + (get_local $i5) + ) + ) + (if + (i32.ge_u + (get_local $i44) + (get_local $i8) + ) + (call $_abort) + ) + (set_local $i3 + (i32.load + (i32.add + (get_local $i44) + (i32.const 24) + ) + ) + ) + (set_local $i7 + (i32.load + (i32.add + (get_local $i44) + (i32.const 12) + ) + ) + ) + (block $do-once17 + (if + (i32.eq + (get_local $i7) + (get_local $i44) + ) + (block + (set_local $i2 + (i32.add + (get_local $i44) + (i32.const 20) + ) + ) + (set_local $i14 + (i32.load + (get_local $i2) + ) + ) + (if + (i32.eqz + (get_local $i14) + ) + (block + (set_local $i4 + (i32.add + (get_local $i44) + (i32.const 16) + ) + ) + (set_local $i10 + (i32.load + (get_local $i4) + ) + ) + (if + (i32.eqz + (get_local $i10) + ) + (block + (set_local $i45 + (i32.const 0) + ) + (br $do-once17) + ) + (block + (set_local $i46 + (get_local $i10) + ) + (set_local $i47 + (get_local $i4) + ) + ) + ) + ) + (block + (set_local $i46 + (get_local $i14) + ) + (set_local $i47 + (get_local $i2) + ) + ) + ) + (loop $while-in20 + (block $while-out19 + (set_local $i2 + (i32.add + (get_local $i46) + (i32.const 20) + ) + ) + (set_local $i14 + (i32.load + (get_local $i2) + ) + ) + (if + (get_local $i14) + (block + (set_local $i46 + (get_local $i14) + ) + (set_local $i47 + (get_local $i2) + ) + (br $while-in20) + ) + ) + (set_local $i2 + (i32.add + (get_local $i46) + (i32.const 16) + ) + ) + (set_local $i14 + (i32.load + (get_local $i2) + ) + ) + (if + (i32.eqz + (get_local $i14) + ) + (block + (set_local $i48 + (get_local $i46) + ) + (set_local $i49 + (get_local $i47) + ) + (br $while-out19) + ) + (block + (set_local $i46 + (get_local $i14) + ) + (set_local $i47 + (get_local $i2) + ) + ) + ) + (br $while-in20) + ) + ) + (if + (i32.lt_u + (get_local $i49) + (get_local $i15) + ) + (call $_abort) + (block + (i32.store + (get_local $i49) + (i32.const 0) + ) + (set_local $i45 + (get_local $i48) + ) + (br $do-once17) + ) + ) + ) + (block + (set_local $i2 + (i32.load + (i32.add + (get_local $i44) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $i2) + (get_local $i15) + ) + (call $_abort) + ) + (set_local $i14 + (i32.add + (get_local $i2) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $i14) + ) + (get_local $i44) + ) + (call $_abort) + ) + (set_local $i4 + (i32.add + (get_local $i7) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i4) + ) + (get_local $i44) + ) + (block + (i32.store + (get_local $i14) + (get_local $i7) + ) + (i32.store + (get_local $i4) + (get_local $i2) + ) + (set_local $i45 + (get_local $i7) + ) + (br $do-once17) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once21 + (if + (get_local $i3) + (block + (set_local $i7 + (i32.load + (i32.add + (get_local $i44) + (i32.const 28) + ) + ) + ) + (set_local $i15 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i7) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $i44) + (i32.load + (get_local $i15) + ) + ) + (block + (i32.store + (get_local $i15) + (get_local $i45) + ) + (if + (i32.eqz + (get_local $i45) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i7) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $i3) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i7 + (i32.add + (get_local $i3) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i7) + ) + (get_local $i44) + ) + (i32.store + (get_local $i7) + (get_local $i45) + ) + (i32.store + (i32.add + (get_local $i3) + (i32.const 20) + ) + (get_local $i45) + ) + ) + (if + (i32.eqz + (get_local $i45) + ) + (br $do-once21) + ) + ) + ) + (set_local $i7 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i45) + (get_local $i7) + ) + (call $_abort) + ) + (i32.store + (i32.add + (get_local $i45) + (i32.const 24) + ) + (get_local $i3) + ) + (set_local $i15 + (i32.load + (i32.add + (get_local $i44) + (i32.const 16) + ) + ) + ) + (block $do-once23 + (if + (get_local $i15) + (if + (i32.lt_u + (get_local $i15) + (get_local $i7) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i45) + (i32.const 16) + ) + (get_local $i15) + ) + (i32.store + (i32.add + (get_local $i15) + (i32.const 24) + ) + (get_local $i45) + ) + (br $do-once23) + ) + ) + ) + ) + (set_local $i15 + (i32.load + (i32.add + (get_local $i44) + (i32.const 20) + ) + ) + ) + (if + (get_local $i15) + (if + (i32.lt_u + (get_local $i15) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i45) + (i32.const 20) + ) + (get_local $i15) + ) + (i32.store + (i32.add + (get_local $i15) + (i32.const 24) + ) + (get_local $i45) + ) + (br $do-once21) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.ge_u + (get_local $i43) + (i32.const 16) + ) + (block + (i32.store + (i32.add + (get_local $i44) + (i32.const 4) + ) + (i32.or + (get_local $i5) + (i32.const 3) + ) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 4) + ) + (i32.or + (get_local $i43) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i8) + (get_local $i43) + ) + (get_local $i43) + ) + (set_local $i3 + (i32.shr_u + (get_local $i43) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $i43) + (i32.const 256) + ) + (block + (set_local $i15 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i3) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i7 + (i32.load + (i32.const 176) + ) + ) + (set_local $i2 + (i32.shl + (i32.const 1) + (get_local $i3) + ) + ) + (if + (i32.and + (get_local $i7) + (get_local $i2) + ) + (block + (set_local $i3 + (i32.add + (get_local $i15) + (i32.const 8) + ) + ) + (set_local $i4 + (i32.load + (get_local $i3) + ) + ) + (if + (i32.lt_u + (get_local $i4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $i50 + (get_local $i3) + ) + (set_local $i51 + (get_local $i4) + ) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i7) + (get_local $i2) + ) + ) + (set_local $i50 + (i32.add + (get_local $i15) + (i32.const 8) + ) + ) + (set_local $i51 + (get_local $i15) + ) + ) + ) + (i32.store + (get_local $i50) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i51) + (i32.const 12) + ) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 8) + ) + (get_local $i51) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 12) + ) + (get_local $i15) + ) + (br $do-once25) + ) + ) + (set_local $i15 + (i32.shr_u + (get_local $i43) + (i32.const 8) + ) + ) + (if + (get_local $i15) + (if + (i32.gt_u + (get_local $i43) + (i32.const 16777215) + ) + (set_local $i52 + (i32.const 31) + ) + (block + (set_local $i2 + (i32.and + (i32.shr_u + (i32.add + (get_local $i15) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $i7 + (i32.shl + (get_local $i15) + (get_local $i2) + ) + ) + (set_local $i15 + (i32.and + (i32.shr_u + (i32.add + (get_local $i7) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $i4 + (i32.shl + (get_local $i7) + (get_local $i15) + ) + ) + (set_local $i7 + (i32.and + (i32.shr_u + (i32.add + (get_local $i4) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $i3 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $i15) + (get_local $i2) + ) + (get_local $i7) + ) + ) + (i32.shr_u + (i32.shl + (get_local $i4) + (get_local $i7) + ) + (i32.const 15) + ) + ) + ) + (set_local $i52 + (i32.or + (i32.and + (i32.shr_u + (get_local $i43) + (i32.add + (get_local $i3) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $i3) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i52 + (i32.const 0) + ) + ) + (set_local $i3 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i52) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 28) + ) + (get_local $i52) + ) + (set_local $i7 + (i32.add + (get_local $i8) + (i32.const 16) + ) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store + (get_local $i7) + (i32.const 0) + ) + (set_local $i7 + (i32.load + (i32.const 180) + ) + ) + (set_local $i4 + (i32.shl + (i32.const 1) + (get_local $i52) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $i7) + (get_local $i4) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $i7) + (get_local $i4) + ) + ) + (i32.store + (get_local $i3) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 24) + ) + (get_local $i3) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 12) + ) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 8) + ) + (get_local $i8) + ) + (br $do-once25) + ) + ) + (set_local $i4 + (i32.shl + (get_local $i43) + (if (result i32) + (i32.eq + (get_local $i52) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $i52) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i7 + (i32.load + (get_local $i3) + ) + ) + (loop $while-in28 + (block $while-out27 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $i7) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i43) + ) + (block + (set_local $i53 + (get_local $i7) + ) + (set_local $i36 + (i32.const 148) + ) + (br $while-out27) + ) + ) + (set_local $i3 + (i32.add + (i32.add + (get_local $i7) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $i4) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $i2 + (i32.load + (get_local $i3) + ) + ) + (if + (i32.eqz + (get_local $i2) + ) + (block + (set_local $i54 + (get_local $i3) + ) + (set_local $i55 + (get_local $i7) + ) + (set_local $i36 + (i32.const 145) + ) + (br $while-out27) + ) + (block + (set_local $i4 + (i32.shl + (get_local $i4) + (i32.const 1) + ) + ) + (set_local $i7 + (get_local $i2) + ) + ) + ) + (br $while-in28) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 145) + ) + (if + (i32.lt_u + (get_local $i54) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $i54) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 24) + ) + (get_local $i55) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 12) + ) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 8) + ) + (get_local $i8) + ) + (br $do-once25) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 148) + ) + (block + (set_local $i7 + (i32.add + (get_local $i53) + (i32.const 8) + ) + ) + (set_local $i4 + (i32.load + (get_local $i7) + ) + ) + (set_local $i2 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $i4) + (get_local $i2) + ) + (i32.ge_u + (get_local $i53) + (get_local $i2) + ) + ) + (block + (i32.store + (i32.add + (get_local $i4) + (i32.const 12) + ) + (get_local $i8) + ) + (i32.store + (get_local $i7) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 8) + ) + (get_local $i4) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 12) + ) + (get_local $i53) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once25) + ) + (call $_abort) + ) + ) + ) + ) + ) + (block + (set_local $i4 + (i32.add + (get_local $i43) + (get_local $i5) + ) + ) + (i32.store + (i32.add + (get_local $i44) + (i32.const 4) + ) + (i32.or + (get_local $i4) + (i32.const 3) + ) + ) + (set_local $i7 + (i32.add + (i32.add + (get_local $i44) + (get_local $i4) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $i7) + (i32.or + (i32.load + (get_local $i7) + ) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i13 + (i32.add + (get_local $i44) + (i32.const 8) + ) + ) + (return + (get_local $i13) + ) + ) + (set_local $i31 + (get_local $i5) + ) + ) + ) + (set_local $i31 + (get_local $i5) + ) + ) + ) + (set_local $i31 + (i32.const -1) + ) + ) + ) + ) + (set_local $i44 + (i32.load + (i32.const 184) + ) + ) + (if + (i32.ge_u + (get_local $i44) + (get_local $i31) + ) + (block + (set_local $i43 + (i32.sub + (get_local $i44) + (get_local $i31) + ) + ) + (set_local $i53 + (i32.load + (i32.const 196) + ) + ) + (if + (i32.gt_u + (get_local $i43) + (i32.const 15) + ) + (block + (set_local $i55 + (i32.add + (get_local $i53) + (get_local $i31) + ) + ) + (i32.store + (i32.const 196) + (get_local $i55) + ) + (i32.store + (i32.const 184) + (get_local $i43) + ) + (i32.store + (i32.add + (get_local $i55) + (i32.const 4) + ) + (i32.or + (get_local $i43) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i55) + (get_local $i43) + ) + (get_local $i43) + ) + (i32.store + (i32.add + (get_local $i53) + (i32.const 4) + ) + (i32.or + (get_local $i31) + (i32.const 3) + ) + ) + ) + (block + (i32.store + (i32.const 184) + (i32.const 0) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $i53) + (i32.const 4) + ) + (i32.or + (get_local $i44) + (i32.const 3) + ) + ) + (set_local $i43 + (i32.add + (i32.add + (get_local $i53) + (get_local $i44) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $i43) + (i32.or + (i32.load + (get_local $i43) + ) + (i32.const 1) + ) + ) + ) + ) + (set_local $i13 + (i32.add + (get_local $i53) + (i32.const 8) + ) + ) + (return + (get_local $i13) + ) + ) + ) + (set_local $i53 + (i32.load + (i32.const 188) + ) + ) + (if + (i32.gt_u + (get_local $i53) + (get_local $i31) + ) + (block + (set_local $i43 + (i32.sub + (get_local $i53) + (get_local $i31) + ) + ) + (i32.store + (i32.const 188) + (get_local $i43) + ) + (set_local $i53 + (i32.load + (i32.const 200) + ) + ) + (set_local $i44 + (i32.add + (get_local $i53) + (get_local $i31) + ) + ) + (i32.store + (i32.const 200) + (get_local $i44) + ) + (i32.store + (i32.add + (get_local $i44) + (i32.const 4) + ) + (i32.or + (get_local $i43) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i53) + (i32.const 4) + ) + (i32.or + (get_local $i31) + (i32.const 3) + ) + ) + (set_local $i13 + (i32.add + (get_local $i53) + (i32.const 8) + ) + ) + (return + (get_local $i13) + ) + ) + ) + (block $do-once29 + (if + (i32.eqz + (i32.load + (i32.const 648) + ) + ) + (block + (set_local $i53 + (call $_sysconf + (i32.const 30) + ) + ) + (if + (i32.eqz + (i32.and + (i32.add + (get_local $i53) + (i32.const -1) + ) + (get_local $i53) + ) + ) + (block + (i32.store + (i32.const 656) + (get_local $i53) + ) + (i32.store + (i32.const 652) + (get_local $i53) + ) + (i32.store + (i32.const 660) + (i32.const -1) + ) + (i32.store + (i32.const 664) + (i32.const -1) + ) + (i32.store + (i32.const 668) + (i32.const 0) + ) + (i32.store + (i32.const 620) + (i32.const 0) + ) + (i32.store + (i32.const 648) + (i32.xor + (i32.and + (call $_time + (i32.const 0) + ) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + (br $do-once29) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $i53 + (i32.add + (get_local $i31) + (i32.const 48) + ) + ) + (set_local $i43 + (i32.load + (i32.const 656) + ) + ) + (set_local $i44 + (i32.add + (get_local $i31) + (i32.const 47) + ) + ) + (set_local $i55 + (i32.add + (get_local $i43) + (get_local $i44) + ) + ) + (set_local $i54 + (i32.sub + (i32.const 0) + (get_local $i43) + ) + ) + (set_local $i43 + (i32.and + (get_local $i55) + (get_local $i54) + ) + ) + (if + (i32.le_u + (get_local $i43) + (get_local $i31) + ) + (block + (set_local $i13 + (i32.const 0) + ) + (return + (get_local $i13) + ) + ) + ) + (set_local $i52 + (i32.load + (i32.const 616) + ) + ) + (if + (if (result i32) + (i32.ne + (get_local $i52) + (i32.const 0) + ) + (block (result i32) + (set_local $i51 + (i32.load + (i32.const 608) + ) + ) + (block (result i32) + (set_local $i50 + (i32.add + (get_local $i51) + (get_local $i43) + ) + ) + (i32.or + (i32.le_u + (get_local $i50) + (get_local $i51) + ) + (i32.gt_u + (get_local $i50) + (get_local $i52) + ) + ) + ) + ) + (i32.const 0) + ) + (block + (set_local $i13 + (i32.const 0) + ) + (return + (get_local $i13) + ) + ) + ) + (block $label$break$L257 + (if + (i32.eqz + (i32.and + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + ) + (block + (set_local $i52 + (i32.load + (i32.const 200) + ) + ) + (block $label$break$L259 + (if + (get_local $i52) + (block + (set_local $i50 + (i32.const 624) + ) + (loop $while-in34 + (block $while-out33 + (set_local $i51 + (i32.load + (get_local $i50) + ) + ) + (if + (if (result i32) + (i32.le_u + (get_local $i51) + (get_local $i52) + ) + (block (result i32) + (set_local $i45 + (i32.add + (get_local $i50) + (i32.const 4) + ) + ) + (i32.gt_u + (i32.add + (get_local $i51) + (i32.load + (get_local $i45) + ) + ) + (get_local $i52) + ) + ) + (i32.const 0) + ) + (block + (set_local $i56 + (get_local $i50) + ) + (set_local $i57 + (get_local $i45) + ) + (br $while-out33) + ) + ) + (set_local $i50 + (i32.load + (i32.add + (get_local $i50) + (i32.const 8) + ) + ) + ) + (if + (i32.eqz + (get_local $i50) + ) + (block + (set_local $i36 + (i32.const 173) + ) + (br $label$break$L259) + ) + ) + (br $while-in34) + ) + ) + (set_local $i50 + (i32.and + (i32.sub + (get_local $i55) + (i32.load + (i32.const 188) + ) + ) + (get_local $i54) + ) + ) + (if + (i32.lt_u + (get_local $i50) + (i32.const 2147483647) + ) + (block + (set_local $i45 + (call $_sbrk + (get_local $i50) + ) + ) + (if + (i32.eq + (get_local $i45) + (i32.add + (i32.load + (get_local $i56) + ) + (i32.load + (get_local $i57) + ) + ) + ) + (if + (i32.ne + (get_local $i45) + (i32.const -1) + ) + (block + (set_local $i58 + (get_local $i45) + ) + (set_local $i59 + (get_local $i50) + ) + (set_local $i36 + (i32.const 193) + ) + (br $label$break$L257) + ) + ) + (block + (set_local $i60 + (get_local $i45) + ) + (set_local $i61 + (get_local $i50) + ) + (set_local $i36 + (i32.const 183) + ) + ) + ) + ) + ) + ) + (set_local $i36 + (i32.const 173) + ) + ) + ) + (block $do-once35 + (if + (if (result i32) + (i32.eq + (get_local $i36) + (i32.const 173) + ) + (block (result i32) + (set_local $i52 + (call $_sbrk + (i32.const 0) + ) + ) + (i32.ne + (get_local $i52) + (i32.const -1) + ) + ) + (i32.const 0) + ) + (block + (set_local $i5 + (get_local $i52) + ) + (set_local $i50 + (i32.load + (i32.const 652) + ) + ) + (set_local $i45 + (i32.add + (get_local $i50) + (i32.const -1) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $i45) + (get_local $i5) + ) + ) + (set_local $i62 + (get_local $i43) + ) + (set_local $i62 + (i32.add + (i32.sub + (get_local $i43) + (get_local $i5) + ) + (i32.and + (i32.add + (get_local $i45) + (get_local $i5) + ) + (i32.sub + (i32.const 0) + (get_local $i50) + ) + ) + ) + ) + ) + (set_local $i50 + (i32.load + (i32.const 608) + ) + ) + (set_local $i5 + (i32.add + (get_local $i50) + (get_local $i62) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $i62) + (get_local $i31) + ) + (i32.lt_u + (get_local $i62) + (i32.const 2147483647) + ) + ) + (block + (set_local $i45 + (i32.load + (i32.const 616) + ) + ) + (if + (if (result i32) + (i32.ne + (get_local $i45) + (i32.const 0) + ) + (i32.or + (i32.le_u + (get_local $i5) + (get_local $i50) + ) + (i32.gt_u + (get_local $i5) + (get_local $i45) + ) + ) + (i32.const 0) + ) + (br $do-once35) + ) + (set_local $i45 + (call $_sbrk + (get_local $i62) + ) + ) + (if + (i32.eq + (get_local $i45) + (get_local $i52) + ) + (block + (set_local $i58 + (get_local $i52) + ) + (set_local $i59 + (get_local $i62) + ) + (set_local $i36 + (i32.const 193) + ) + (br $label$break$L257) + ) + (block + (set_local $i60 + (get_local $i45) + ) + (set_local $i61 + (get_local $i62) + ) + (set_local $i36 + (i32.const 183) + ) + ) + ) + ) + ) + ) + ) + ) + (block $label$break$L279 + (if + (i32.eq + (get_local $i36) + (i32.const 183) + ) + (block + (set_local $i45 + (i32.sub + (i32.const 0) + (get_local $i61) + ) + ) + (block $do-once38 + (if + (if (result i32) + (i32.and + (i32.gt_u + (get_local $i53) + (get_local $i61) + ) + (i32.and + (i32.lt_u + (get_local $i61) + (i32.const 2147483647) + ) + (i32.ne + (get_local $i60) + (i32.const -1) + ) + ) + ) + (block (result i32) + (set_local $i52 + (i32.load + (i32.const 656) + ) + ) + (block (result i32) + (set_local $i5 + (i32.and + (i32.add + (i32.sub + (get_local $i44) + (get_local $i61) + ) + (get_local $i52) + ) + (i32.sub + (i32.const 0) + (get_local $i52) + ) + ) + ) + (i32.lt_u + (get_local $i5) + (i32.const 2147483647) + ) + ) + ) + (i32.const 0) + ) + (if + (i32.eq + (call $_sbrk + (get_local $i5) + ) + (i32.const -1) + ) + (block + (drop + (call $_sbrk + (get_local $i45) + ) + ) + (br $label$break$L279) + ) + (block + (set_local $i63 + (i32.add + (get_local $i5) + (get_local $i61) + ) + ) + (br $do-once38) + ) + ) + (set_local $i63 + (get_local $i61) + ) + ) + ) + (if + (i32.ne + (get_local $i60) + (i32.const -1) + ) + (block + (set_local $i58 + (get_local $i60) + ) + (set_local $i59 + (get_local $i63) + ) + (set_local $i36 + (i32.const 193) + ) + (br $label$break$L257) + ) + ) + ) + ) + ) + (i32.store + (i32.const 620) + (i32.or + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + ) + (set_local $i36 + (i32.const 190) + ) + ) + (set_local $i36 + (i32.const 190) + ) + ) + ) + (if + (if (result i32) + (if (result i32) + (if (result i32) + (i32.eq + (get_local $i36) + (i32.const 190) + ) + (i32.lt_u + (get_local $i43) + (i32.const 2147483647) + ) + (i32.const 0) + ) + (block (result i32) + (set_local $i63 + (call $_sbrk + (get_local $i43) + ) + ) + (block (result i32) + (set_local $i43 + (call $_sbrk + (i32.const 0) + ) + ) + (i32.and + (i32.lt_u + (get_local $i63) + (get_local $i43) + ) + (i32.and + (i32.ne + (get_local $i63) + (i32.const -1) + ) + (i32.ne + (get_local $i43) + (i32.const -1) + ) + ) + ) + ) + ) + (i32.const 0) + ) + (block (result i32) + (set_local $i60 + (i32.sub + (get_local $i43) + (get_local $i63) + ) + ) + (i32.gt_u + (get_local $i60) + (i32.add + (get_local $i31) + (i32.const 40) + ) + ) + ) + (i32.const 0) + ) + (block + (set_local $i58 + (get_local $i63) + ) + (set_local $i59 + (get_local $i60) + ) + (set_local $i36 + (i32.const 193) + ) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 193) + ) + (block + (set_local $i60 + (i32.add + (i32.load + (i32.const 608) + ) + (get_local $i59) + ) + ) + (i32.store + (i32.const 608) + (get_local $i60) + ) + (if + (i32.gt_u + (get_local $i60) + (i32.load + (i32.const 612) + ) + ) + (i32.store + (i32.const 612) + (get_local $i60) + ) + ) + (set_local $i60 + (i32.load + (i32.const 200) + ) + ) + (block $do-once40 + (if + (get_local $i60) + (block + (set_local $i63 + (i32.const 624) + ) + (loop $do-in + (block $do-out + (set_local $i43 + (i32.load + (get_local $i63) + ) + ) + (set_local $i61 + (i32.add + (get_local $i63) + (i32.const 4) + ) + ) + (set_local $i44 + (i32.load + (get_local $i61) + ) + ) + (if + (i32.eq + (get_local $i58) + (i32.add + (get_local $i43) + (get_local $i44) + ) + ) + (block + (set_local $i64 + (get_local $i43) + ) + (set_local $i65 + (get_local $i61) + ) + (set_local $i66 + (get_local $i44) + ) + (set_local $i67 + (get_local $i63) + ) + (set_local $i36 + (i32.const 203) + ) + (br $do-out) + ) + ) + (set_local $i63 + (i32.load + (i32.add + (get_local $i63) + (i32.const 8) + ) + ) + ) + (br_if $do-in + (i32.ne + (get_local $i63) + (i32.const 0) + ) + ) + ) + ) + (if + (if (result i32) + (if (result i32) + (i32.eq + (get_local $i36) + (i32.const 203) + ) + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $i67) + (i32.const 12) + ) + ) + (i32.const 8) + ) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.and + (i32.lt_u + (get_local $i60) + (get_local $i58) + ) + (i32.ge_u + (get_local $i60) + (get_local $i64) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $i65) + (i32.add + (get_local $i66) + (get_local $i59) + ) + ) + (set_local $i63 + (i32.add + (get_local $i60) + (i32.const 8) + ) + ) + (set_local $i44 + (if (result i32) + (i32.eq + (i32.and + (get_local $i63) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $i63) + ) + (i32.const 7) + ) + ) + ) + (set_local $i63 + (i32.add + (get_local $i60) + (get_local $i44) + ) + ) + (set_local $i61 + (i32.add + (i32.sub + (get_local $i59) + (get_local $i44) + ) + (i32.load + (i32.const 188) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $i63) + ) + (i32.store + (i32.const 188) + (get_local $i61) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 4) + ) + (i32.or + (get_local $i61) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $i63) + (get_local $i61) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (br $do-once40) + ) + ) + (set_local $i61 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i58) + (get_local $i61) + ) + (block + (i32.store + (i32.const 192) + (get_local $i58) + ) + (set_local $i68 + (get_local $i58) + ) + ) + (set_local $i68 + (get_local $i61) + ) + ) + (set_local $i61 + (i32.add + (get_local $i58) + (get_local $i59) + ) + ) + (set_local $i63 + (i32.const 624) + ) + (loop $while-in43 + (block $while-out42 + (if + (i32.eq + (i32.load + (get_local $i63) + ) + (get_local $i61) + ) + (block + (set_local $i69 + (get_local $i63) + ) + (set_local $i70 + (get_local $i63) + ) + (set_local $i36 + (i32.const 211) + ) + (br $while-out42) + ) + ) + (set_local $i63 + (i32.load + (i32.add + (get_local $i63) + (i32.const 8) + ) + ) + ) + (if + (i32.eqz + (get_local $i63) + ) + (block + (set_local $i71 + (i32.const 624) + ) + (br $while-out42) + ) + ) + (br $while-in43) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 211) + ) + (if + (i32.eqz + (i32.and + (i32.load + (i32.add + (get_local $i70) + (i32.const 12) + ) + ) + (i32.const 8) + ) + ) + (block + (i32.store + (get_local $i69) + (get_local $i58) + ) + (set_local $i63 + (i32.add + (get_local $i70) + (i32.const 4) + ) + ) + (i32.store + (get_local $i63) + (i32.add + (i32.load + (get_local $i63) + ) + (get_local $i59) + ) + ) + (set_local $i63 + (i32.add + (get_local $i58) + (i32.const 8) + ) + ) + (set_local $i44 + (i32.add + (get_local $i58) + (if (result i32) + (i32.eq + (i32.and + (get_local $i63) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $i63) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $i63 + (i32.add + (get_local $i61) + (i32.const 8) + ) + ) + (set_local $i43 + (i32.add + (get_local $i61) + (if (result i32) + (i32.eq + (i32.and + (get_local $i63) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $i63) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $i63 + (i32.add + (get_local $i44) + (get_local $i31) + ) + ) + (set_local $i53 + (i32.sub + (i32.sub + (get_local $i43) + (get_local $i44) + ) + (get_local $i31) + ) + ) + (i32.store + (i32.add + (get_local $i44) + (i32.const 4) + ) + (i32.or + (get_local $i31) + (i32.const 3) + ) + ) + (block $do-once44 + (if + (i32.ne + (get_local $i43) + (get_local $i60) + ) + (block + (if + (i32.eq + (get_local $i43) + (i32.load + (i32.const 196) + ) + ) + (block + (set_local $i62 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $i53) + ) + ) + (i32.store + (i32.const 184) + (get_local $i62) + ) + (i32.store + (i32.const 196) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 4) + ) + (i32.or + (get_local $i62) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (get_local $i62) + ) + (get_local $i62) + ) + (br $do-once44) + ) + ) + (set_local $i62 + (i32.load + (i32.add + (get_local $i43) + (i32.const 4) + ) + ) + ) + (if + (i32.eq + (i32.and + (get_local $i62) + (i32.const 3) + ) + (i32.const 1) + ) + (block + (set_local $i57 + (i32.and + (get_local $i62) + (i32.const -8) + ) + ) + (set_local $i56 + (i32.shr_u + (get_local $i62) + (i32.const 3) + ) + ) + (block $label$break$L331 + (if + (i32.ge_u + (get_local $i62) + (i32.const 256) + ) + (block + (set_local $i54 + (i32.load + (i32.add + (get_local $i43) + (i32.const 24) + ) + ) + ) + (set_local $i55 + (i32.load + (i32.add + (get_local $i43) + (i32.const 12) + ) + ) + ) + (block $do-once47 + (if + (i32.eq + (get_local $i55) + (get_local $i43) + ) + (block + (set_local $i45 + (i32.add + (get_local $i43) + (i32.const 16) + ) + ) + (set_local $i5 + (i32.add + (get_local $i45) + (i32.const 4) + ) + ) + (set_local $i52 + (i32.load + (get_local $i5) + ) + ) + (if + (i32.eqz + (get_local $i52) + ) + (block + (set_local $i50 + (i32.load + (get_local $i45) + ) + ) + (if + (i32.eqz + (get_local $i50) + ) + (block + (set_local $i72 + (i32.const 0) + ) + (br $do-once47) + ) + (block + (set_local $i73 + (get_local $i50) + ) + (set_local $i74 + (get_local $i45) + ) + ) + ) + ) + (block + (set_local $i73 + (get_local $i52) + ) + (set_local $i74 + (get_local $i5) + ) + ) + ) + (loop $while-in50 + (block $while-out49 + (set_local $i5 + (i32.add + (get_local $i73) + (i32.const 20) + ) + ) + (set_local $i52 + (i32.load + (get_local $i5) + ) + ) + (if + (get_local $i52) + (block + (set_local $i73 + (get_local $i52) + ) + (set_local $i74 + (get_local $i5) + ) + (br $while-in50) + ) + ) + (set_local $i5 + (i32.add + (get_local $i73) + (i32.const 16) + ) + ) + (set_local $i52 + (i32.load + (get_local $i5) + ) + ) + (if + (i32.eqz + (get_local $i52) + ) + (block + (set_local $i75 + (get_local $i73) + ) + (set_local $i76 + (get_local $i74) + ) + (br $while-out49) + ) + (block + (set_local $i73 + (get_local $i52) + ) + (set_local $i74 + (get_local $i5) + ) + ) + ) + (br $while-in50) + ) + ) + (if + (i32.lt_u + (get_local $i76) + (get_local $i68) + ) + (call $_abort) + (block + (i32.store + (get_local $i76) + (i32.const 0) + ) + (set_local $i72 + (get_local $i75) + ) + (br $do-once47) + ) + ) + ) + (block + (set_local $i5 + (i32.load + (i32.add + (get_local $i43) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $i5) + (get_local $i68) + ) + (call $_abort) + ) + (set_local $i52 + (i32.add + (get_local $i5) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $i52) + ) + (get_local $i43) + ) + (call $_abort) + ) + (set_local $i45 + (i32.add + (get_local $i55) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i45) + ) + (get_local $i43) + ) + (block + (i32.store + (get_local $i52) + (get_local $i55) + ) + (i32.store + (get_local $i45) + (get_local $i5) + ) + (set_local $i72 + (get_local $i55) + ) + (br $do-once47) + ) + (call $_abort) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $i54) + ) + (br $label$break$L331) + ) + (set_local $i55 + (i32.load + (i32.add + (get_local $i43) + (i32.const 28) + ) + ) + ) + (set_local $i5 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i55) + (i32.const 2) + ) + ) + ) + (block $do-once51 + (if + (i32.ne + (get_local $i43) + (i32.load + (get_local $i5) + ) + ) + (block + (if + (i32.lt_u + (get_local $i54) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i45 + (i32.add + (get_local $i54) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i45) + ) + (get_local $i43) + ) + (i32.store + (get_local $i45) + (get_local $i72) + ) + (i32.store + (i32.add + (get_local $i54) + (i32.const 20) + ) + (get_local $i72) + ) + ) + (if + (i32.eqz + (get_local $i72) + ) + (br $label$break$L331) + ) + ) + (block + (i32.store + (get_local $i5) + (get_local $i72) + ) + (if + (get_local $i72) + (br $do-once51) + ) + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i55) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + ) + ) + (set_local $i55 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i72) + (get_local $i55) + ) + (call $_abort) + ) + (i32.store + (i32.add + (get_local $i72) + (i32.const 24) + ) + (get_local $i54) + ) + (set_local $i5 + (i32.add + (get_local $i43) + (i32.const 16) + ) + ) + (set_local $i45 + (i32.load + (get_local $i5) + ) + ) + (block $do-once53 + (if + (get_local $i45) + (if + (i32.lt_u + (get_local $i45) + (get_local $i55) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i72) + (i32.const 16) + ) + (get_local $i45) + ) + (i32.store + (i32.add + (get_local $i45) + (i32.const 24) + ) + (get_local $i72) + ) + (br $do-once53) + ) + ) + ) + ) + (set_local $i45 + (i32.load + (i32.add + (get_local $i5) + (i32.const 4) + ) + ) + ) + (if + (i32.eqz + (get_local $i45) + ) + (br $label$break$L331) + ) + (if + (i32.lt_u + (get_local $i45) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i72) + (i32.const 20) + ) + (get_local $i45) + ) + (i32.store + (i32.add + (get_local $i45) + (i32.const 24) + ) + (get_local $i72) + ) + (br $label$break$L331) + ) + ) + ) + (block + (set_local $i45 + (i32.load + (i32.add + (get_local $i43) + (i32.const 8) + ) + ) + ) + (set_local $i55 + (i32.load + (i32.add + (get_local $i43) + (i32.const 12) + ) + ) + ) + (set_local $i54 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i56) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (block $do-once55 + (if + (i32.ne + (get_local $i45) + (get_local $i54) + ) + (block + (if + (i32.lt_u + (get_local $i45) + (get_local $i68) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (i32.add + (get_local $i45) + (i32.const 12) + ) + ) + (get_local $i43) + ) + (br $do-once55) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $i55) + (get_local $i45) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i56) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + ) + (block $do-once57 + (if + (i32.eq + (get_local $i55) + (get_local $i54) + ) + (set_local $i77 + (i32.add + (get_local $i55) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $i55) + (get_local $i68) + ) + (call $_abort) + ) + (set_local $i5 + (i32.add + (get_local $i55) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i5) + ) + (get_local $i43) + ) + (block + (set_local $i77 + (get_local $i5) + ) + (br $do-once57) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store + (i32.add + (get_local $i45) + (i32.const 12) + ) + (get_local $i55) + ) + (i32.store + (get_local $i77) + (get_local $i45) + ) + ) + ) + ) + (set_local $i78 + (i32.add + (get_local $i43) + (get_local $i57) + ) + ) + (set_local $i79 + (i32.add + (get_local $i57) + (get_local $i53) + ) + ) + ) + (block + (set_local $i78 + (get_local $i43) + ) + (set_local $i79 + (get_local $i53) + ) + ) + ) + (set_local $i56 + (i32.add + (get_local $i78) + (i32.const 4) + ) + ) + (i32.store + (get_local $i56) + (i32.and + (i32.load + (get_local $i56) + ) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 4) + ) + (i32.or + (get_local $i79) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (get_local $i79) + ) + (get_local $i79) + ) + (set_local $i56 + (i32.shr_u + (get_local $i79) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $i79) + (i32.const 256) + ) + (block + (set_local $i62 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i56) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i54 + (i32.load + (i32.const 176) + ) + ) + (set_local $i5 + (i32.shl + (i32.const 1) + (get_local $i56) + ) + ) + (block $do-once59 + (if + (i32.eqz + (i32.and + (get_local $i54) + (get_local $i5) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i54) + (get_local $i5) + ) + ) + (set_local $i80 + (i32.add + (get_local $i62) + (i32.const 8) + ) + ) + (set_local $i81 + (get_local $i62) + ) + ) + (block + (set_local $i56 + (i32.add + (get_local $i62) + (i32.const 8) + ) + ) + (set_local $i52 + (i32.load + (get_local $i56) + ) + ) + (if + (i32.ge_u + (get_local $i52) + (i32.load + (i32.const 192) + ) + ) + (block + (set_local $i80 + (get_local $i56) + ) + (set_local $i81 + (get_local $i52) + ) + (br $do-once59) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store + (get_local $i80) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i81) + (i32.const 12) + ) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 8) + ) + (get_local $i81) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 12) + ) + (get_local $i62) + ) + (br $do-once44) + ) + ) + (set_local $i5 + (i32.shr_u + (get_local $i79) + (i32.const 8) + ) + ) + (block $do-once61 + (if + (i32.eqz + (get_local $i5) + ) + (set_local $i82 + (i32.const 0) + ) + (block + (if + (i32.gt_u + (get_local $i79) + (i32.const 16777215) + ) + (block + (set_local $i82 + (i32.const 31) + ) + (br $do-once61) + ) + ) + (set_local $i54 + (i32.and + (i32.shr_u + (i32.add + (get_local $i5) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $i57 + (i32.shl + (get_local $i5) + (get_local $i54) + ) + ) + (set_local $i52 + (i32.and + (i32.shr_u + (i32.add + (get_local $i57) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $i56 + (i32.shl + (get_local $i57) + (get_local $i52) + ) + ) + (set_local $i57 + (i32.and + (i32.shr_u + (i32.add + (get_local $i56) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $i50 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $i52) + (get_local $i54) + ) + (get_local $i57) + ) + ) + (i32.shr_u + (i32.shl + (get_local $i56) + (get_local $i57) + ) + (i32.const 15) + ) + ) + ) + (set_local $i82 + (i32.or + (i32.and + (i32.shr_u + (get_local $i79) + (i32.add + (get_local $i50) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $i50) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $i5 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i82) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 28) + ) + (get_local $i82) + ) + (set_local $i62 + (i32.add + (get_local $i63) + (i32.const 16) + ) + ) + (i32.store + (i32.add + (get_local $i62) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store + (get_local $i62) + (i32.const 0) + ) + (set_local $i62 + (i32.load + (i32.const 180) + ) + ) + (set_local $i50 + (i32.shl + (i32.const 1) + (get_local $i82) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $i62) + (get_local $i50) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $i62) + (get_local $i50) + ) + ) + (i32.store + (get_local $i5) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 24) + ) + (get_local $i5) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 12) + ) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 8) + ) + (get_local $i63) + ) + (br $do-once44) + ) + ) + (set_local $i50 + (i32.shl + (get_local $i79) + (if (result i32) + (i32.eq + (get_local $i82) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $i82) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i62 + (i32.load + (get_local $i5) + ) + ) + (loop $while-in64 + (block $while-out63 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $i62) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i79) + ) + (block + (set_local $i83 + (get_local $i62) + ) + (set_local $i36 + (i32.const 281) + ) + (br $while-out63) + ) + ) + (set_local $i5 + (i32.add + (i32.add + (get_local $i62) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $i50) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $i57 + (i32.load + (get_local $i5) + ) + ) + (if + (i32.eqz + (get_local $i57) + ) + (block + (set_local $i84 + (get_local $i5) + ) + (set_local $i85 + (get_local $i62) + ) + (set_local $i36 + (i32.const 278) + ) + (br $while-out63) + ) + (block + (set_local $i50 + (i32.shl + (get_local $i50) + (i32.const 1) + ) + ) + (set_local $i62 + (get_local $i57) + ) + ) + ) + (br $while-in64) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 278) + ) + (if + (i32.lt_u + (get_local $i84) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $i84) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 24) + ) + (get_local $i85) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 12) + ) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 8) + ) + (get_local $i63) + ) + (br $do-once44) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 281) + ) + (block + (set_local $i62 + (i32.add + (get_local $i83) + (i32.const 8) + ) + ) + (set_local $i50 + (i32.load + (get_local $i62) + ) + ) + (set_local $i57 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $i50) + (get_local $i57) + ) + (i32.ge_u + (get_local $i83) + (get_local $i57) + ) + ) + (block + (i32.store + (i32.add + (get_local $i50) + (i32.const 12) + ) + (get_local $i63) + ) + (i32.store + (get_local $i62) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 8) + ) + (get_local $i50) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 12) + ) + (get_local $i83) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once44) + ) + (call $_abort) + ) + ) + ) + ) + ) + (block + (set_local $i50 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $i53) + ) + ) + (i32.store + (i32.const 188) + (get_local $i50) + ) + (i32.store + (i32.const 200) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 4) + ) + (i32.or + (get_local $i50) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i13 + (i32.add + (get_local $i44) + (i32.const 8) + ) + ) + (return + (get_local $i13) + ) + ) + (set_local $i71 + (i32.const 624) + ) + ) + ) + (loop $while-in66 + (block $while-out65 + (set_local $i63 + (i32.load + (get_local $i71) + ) + ) + (if + (if (result i32) + (i32.le_u + (get_local $i63) + (get_local $i60) + ) + (block (result i32) + (set_local $i53 + (i32.add + (get_local $i63) + (i32.load + (i32.add + (get_local $i71) + (i32.const 4) + ) + ) + ) + ) + (i32.gt_u + (get_local $i53) + (get_local $i60) + ) + ) + (i32.const 0) + ) + (block + (set_local $i86 + (get_local $i53) + ) + (br $while-out65) + ) + ) + (set_local $i71 + (i32.load + (i32.add + (get_local $i71) + (i32.const 8) + ) + ) + ) + (br $while-in66) + ) + ) + (set_local $i44 + (i32.add + (get_local $i86) + (i32.const -47) + ) + ) + (set_local $i53 + (i32.add + (get_local $i44) + (i32.const 8) + ) + ) + (set_local $i63 + (i32.add + (get_local $i44) + (if (result i32) + (i32.eq + (i32.and + (get_local $i53) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $i53) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $i53 + (i32.add + (get_local $i60) + (i32.const 16) + ) + ) + (set_local $i44 + (if (result i32) + (i32.lt_u + (get_local $i63) + (get_local $i53) + ) + (get_local $i60) + (get_local $i63) + ) + ) + (set_local $i63 + (i32.add + (get_local $i44) + (i32.const 8) + ) + ) + (set_local $i43 + (i32.add + (get_local $i58) + (i32.const 8) + ) + ) + (set_local $i61 + (if (result i32) + (i32.eq + (i32.and + (get_local $i43) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $i43) + ) + (i32.const 7) + ) + ) + ) + (set_local $i43 + (i32.add + (get_local $i58) + (get_local $i61) + ) + ) + (set_local $i50 + (i32.sub + (i32.add + (get_local $i59) + (i32.const -40) + ) + (get_local $i61) + ) + ) + (i32.store + (i32.const 200) + (get_local $i43) + ) + (i32.store + (i32.const 188) + (get_local $i50) + ) + (i32.store + (i32.add + (get_local $i43) + (i32.const 4) + ) + (i32.or + (get_local $i50) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $i43) + (get_local $i50) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (set_local $i50 + (i32.add + (get_local $i44) + (i32.const 4) + ) + ) + (i32.store + (get_local $i50) + (i32.const 27) + ) + (i32.store + (get_local $i63) + (i32.load + (i32.const 624) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 4) + ) + (i32.load + (i32.const 628) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 8) + ) + (i32.load + (i32.const 632) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 12) + ) + (i32.load + (i32.const 636) + ) + ) + (i32.store + (i32.const 624) + (get_local $i58) + ) + (i32.store + (i32.const 628) + (get_local $i59) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 632) + (get_local $i63) + ) + (set_local $i63 + (i32.add + (get_local $i44) + (i32.const 24) + ) + ) + (loop $do-in68 + (block $do-out67 + (set_local $i63 + (i32.add + (get_local $i63) + (i32.const 4) + ) + ) + (i32.store + (get_local $i63) + (i32.const 7) + ) + (br_if $do-in68 + (i32.lt_u + (i32.add + (get_local $i63) + (i32.const 4) + ) + (get_local $i86) + ) + ) + ) + ) + (if + (i32.ne + (get_local $i44) + (get_local $i60) + ) + (block + (set_local $i63 + (i32.sub + (get_local $i44) + (get_local $i60) + ) + ) + (i32.store + (get_local $i50) + (i32.and + (i32.load + (get_local $i50) + ) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 4) + ) + (i32.or + (get_local $i63) + (i32.const 1) + ) + ) + (i32.store + (get_local $i44) + (get_local $i63) + ) + (set_local $i43 + (i32.shr_u + (get_local $i63) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $i63) + (i32.const 256) + ) + (block + (set_local $i61 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i43) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i62 + (i32.load + (i32.const 176) + ) + ) + (set_local $i57 + (i32.shl + (i32.const 1) + (get_local $i43) + ) + ) + (if + (i32.and + (get_local $i62) + (get_local $i57) + ) + (block + (set_local $i43 + (i32.add + (get_local $i61) + (i32.const 8) + ) + ) + (set_local $i5 + (i32.load + (get_local $i43) + ) + ) + (if + (i32.lt_u + (get_local $i5) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $i87 + (get_local $i43) + ) + (set_local $i88 + (get_local $i5) + ) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i62) + (get_local $i57) + ) + ) + (set_local $i87 + (i32.add + (get_local $i61) + (i32.const 8) + ) + ) + (set_local $i88 + (get_local $i61) + ) + ) + ) + (i32.store + (get_local $i87) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i88) + (i32.const 12) + ) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 8) + ) + (get_local $i88) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 12) + ) + (get_local $i61) + ) + (br $do-once40) + ) + ) + (set_local $i61 + (i32.shr_u + (get_local $i63) + (i32.const 8) + ) + ) + (if + (get_local $i61) + (if + (i32.gt_u + (get_local $i63) + (i32.const 16777215) + ) + (set_local $i89 + (i32.const 31) + ) + (block + (set_local $i57 + (i32.and + (i32.shr_u + (i32.add + (get_local $i61) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $i62 + (i32.shl + (get_local $i61) + (get_local $i57) + ) + ) + (set_local $i61 + (i32.and + (i32.shr_u + (i32.add + (get_local $i62) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $i5 + (i32.shl + (get_local $i62) + (get_local $i61) + ) + ) + (set_local $i62 + (i32.and + (i32.shr_u + (i32.add + (get_local $i5) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $i43 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $i61) + (get_local $i57) + ) + (get_local $i62) + ) + ) + (i32.shr_u + (i32.shl + (get_local $i5) + (get_local $i62) + ) + (i32.const 15) + ) + ) + ) + (set_local $i89 + (i32.or + (i32.and + (i32.shr_u + (get_local $i63) + (i32.add + (get_local $i43) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $i43) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i89 + (i32.const 0) + ) + ) + (set_local $i43 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i89) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 28) + ) + (get_local $i89) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 20) + ) + (i32.const 0) + ) + (i32.store + (get_local $i53) + (i32.const 0) + ) + (set_local $i62 + (i32.load + (i32.const 180) + ) + ) + (set_local $i5 + (i32.shl + (i32.const 1) + (get_local $i89) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $i62) + (get_local $i5) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $i62) + (get_local $i5) + ) + ) + (i32.store + (get_local $i43) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 24) + ) + (get_local $i43) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 12) + ) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 8) + ) + (get_local $i60) + ) + (br $do-once40) + ) + ) + (set_local $i5 + (i32.shl + (get_local $i63) + (if (result i32) + (i32.eq + (get_local $i89) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $i89) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i62 + (i32.load + (get_local $i43) + ) + ) + (loop $while-in70 + (block $while-out69 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $i62) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i63) + ) + (block + (set_local $i90 + (get_local $i62) + ) + (set_local $i36 + (i32.const 307) + ) + (br $while-out69) + ) + ) + (set_local $i43 + (i32.add + (i32.add + (get_local $i62) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $i5) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $i57 + (i32.load + (get_local $i43) + ) + ) + (if + (i32.eqz + (get_local $i57) + ) + (block + (set_local $i91 + (get_local $i43) + ) + (set_local $i92 + (get_local $i62) + ) + (set_local $i36 + (i32.const 304) + ) + (br $while-out69) + ) + (block + (set_local $i5 + (i32.shl + (get_local $i5) + (i32.const 1) + ) + ) + (set_local $i62 + (get_local $i57) + ) + ) + ) + (br $while-in70) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 304) + ) + (if + (i32.lt_u + (get_local $i91) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $i91) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 24) + ) + (get_local $i92) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 12) + ) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 8) + ) + (get_local $i60) + ) + (br $do-once40) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 307) + ) + (block + (set_local $i62 + (i32.add + (get_local $i90) + (i32.const 8) + ) + ) + (set_local $i5 + (i32.load + (get_local $i62) + ) + ) + (set_local $i63 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $i5) + (get_local $i63) + ) + (i32.ge_u + (get_local $i90) + (get_local $i63) + ) + ) + (block + (i32.store + (i32.add + (get_local $i5) + (i32.const 12) + ) + (get_local $i60) + ) + (i32.store + (get_local $i62) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 8) + ) + (get_local $i5) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 12) + ) + (get_local $i90) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once40) + ) + (call $_abort) + ) + ) + ) + ) + ) + ) + ) + (block + (set_local $i5 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.or + (i32.eq + (get_local $i5) + (i32.const 0) + ) + (i32.lt_u + (get_local $i58) + (get_local $i5) + ) + ) + (i32.store + (i32.const 192) + (get_local $i58) + ) + ) + (i32.store + (i32.const 624) + (get_local $i58) + ) + (i32.store + (i32.const 628) + (get_local $i59) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 212) + (i32.load + (i32.const 648) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (set_local $i5 + (i32.const 0) + ) + (loop $do-in72 + (block $do-out71 + (set_local $i62 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i5) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $i62) + (i32.const 12) + ) + (get_local $i62) + ) + (i32.store + (i32.add + (get_local $i62) + (i32.const 8) + ) + (get_local $i62) + ) + (set_local $i5 + (i32.add + (get_local $i5) + (i32.const 1) + ) + ) + (br_if $do-in72 + (i32.ne + (get_local $i5) + (i32.const 32) + ) + ) + ) + ) + (set_local $i5 + (i32.add + (get_local $i58) + (i32.const 8) + ) + ) + (set_local $i62 + (if (result i32) + (i32.eq + (i32.and + (get_local $i5) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $i5) + ) + (i32.const 7) + ) + ) + ) + (set_local $i5 + (i32.add + (get_local $i58) + (get_local $i62) + ) + ) + (set_local $i63 + (i32.sub + (i32.add + (get_local $i59) + (i32.const -40) + ) + (get_local $i62) + ) + ) + (i32.store + (i32.const 200) + (get_local $i5) + ) + (i32.store + (i32.const 188) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 4) + ) + (i32.or + (get_local $i63) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $i5) + (get_local $i63) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + ) + ) + ) + (set_local $i59 + (i32.load + (i32.const 188) + ) + ) + (if + (i32.gt_u + (get_local $i59) + (get_local $i31) + ) + (block + (set_local $i58 + (i32.sub + (get_local $i59) + (get_local $i31) + ) + ) + (i32.store + (i32.const 188) + (get_local $i58) + ) + (set_local $i59 + (i32.load + (i32.const 200) + ) + ) + (set_local $i60 + (i32.add + (get_local $i59) + (get_local $i31) + ) + ) + (i32.store + (i32.const 200) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 4) + ) + (i32.or + (get_local $i58) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i59) + (i32.const 4) + ) + (i32.or + (get_local $i31) + (i32.const 3) + ) + ) + (set_local $i13 + (i32.add + (get_local $i59) + (i32.const 8) + ) + ) + (return + (get_local $i13) + ) + ) + ) + ) + ) + (i32.store + (call $___errno_location) + (i32.const 12) + ) + (set_local $i13 + (i32.const 0) + ) + (return + (get_local $i13) + ) + ) + (func $_free (; 16 ;) (param $i1 i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (local $i10 i32) + (local $i11 i32) + (local $i12 i32) + (local $i13 i32) + (local $i14 i32) + (local $i15 i32) + (local $i16 i32) + (local $i17 i32) + (local $i18 i32) + (local $i19 i32) + (local $i20 i32) + (local $i21 i32) + (local $i22 i32) + (local $i23 i32) + (local $i24 i32) + (local $i25 i32) + (local $i26 i32) + (local $i27 i32) + (local $i28 i32) + (local $i29 i32) + (local $i30 i32) + (local $i31 i32) + (local $i32 i32) + (local $i33 i32) + (local $i34 i32) + (local $i35 i32) + (local $i36 i32) + (local $i37 i32) + (if + (i32.eqz + (get_local $i1) + ) + (return) + ) + (set_local $i2 + (i32.add + (get_local $i1) + (i32.const -8) + ) + ) + (set_local $i3 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i2) + (get_local $i3) + ) + (call $_abort) + ) + (set_local $i4 + (i32.load + (i32.add + (get_local $i1) + (i32.const -4) + ) + ) + ) + (set_local $i1 + (i32.and + (get_local $i4) + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $i1) + (i32.const 1) + ) + (call $_abort) + ) + (set_local $i5 + (i32.and + (get_local $i4) + (i32.const -8) + ) + ) + (set_local $i6 + (i32.add + (get_local $i2) + (get_local $i5) + ) + ) + (block $do-once + (if + (i32.eqz + (i32.and + (get_local $i4) + (i32.const 1) + ) + ) + (block + (set_local $i7 + (i32.load + (get_local $i2) + ) + ) + (if + (i32.eqz + (get_local $i1) + ) + (return) + ) + (set_local $i8 + (i32.add + (get_local $i2) + (i32.sub + (i32.const 0) + (get_local $i7) + ) + ) + ) + (set_local $i9 + (i32.add + (get_local $i7) + (get_local $i5) + ) + ) + (if + (i32.lt_u + (get_local $i8) + (get_local $i3) + ) + (call $_abort) + ) + (if + (i32.eq + (get_local $i8) + (i32.load + (i32.const 196) + ) + ) + (block + (set_local $i10 + (i32.add + (get_local $i6) + (i32.const 4) + ) + ) + (set_local $i11 + (i32.load + (get_local $i10) + ) + ) + (if + (i32.ne + (i32.and + (get_local $i11) + (i32.const 3) + ) + (i32.const 3) + ) + (block + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 184) + (get_local $i9) + ) + (i32.store + (get_local $i10) + (i32.and + (get_local $i11) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 4) + ) + (i32.or + (get_local $i9) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i8) + (get_local $i9) + ) + (get_local $i9) + ) + (return) + ) + ) + (set_local $i11 + (i32.shr_u + (get_local $i7) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $i7) + (i32.const 256) + ) + (block + (set_local $i7 + (i32.load + (i32.add + (get_local $i8) + (i32.const 8) + ) + ) + ) + (set_local $i10 + (i32.load + (i32.add + (get_local $i8) + (i32.const 12) + ) + ) + ) + (set_local $i14 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i11) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.ne + (get_local $i7) + (get_local $i14) + ) + (block + (if + (i32.lt_u + (get_local $i7) + (get_local $i3) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (i32.add + (get_local $i7) + (i32.const 12) + ) + ) + (get_local $i8) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $i10) + (get_local $i7) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i11) + ) + (i32.const -1) + ) + ) + ) + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + (br $do-once) + ) + ) + (if + (i32.ne + (get_local $i10) + (get_local $i14) + ) + (block + (if + (i32.lt_u + (get_local $i10) + (get_local $i3) + ) + (call $_abort) + ) + (set_local $i14 + (i32.add + (get_local $i10) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i14) + ) + (get_local $i8) + ) + (set_local $i15 + (get_local $i14) + ) + (call $_abort) + ) + ) + (set_local $i15 + (i32.add + (get_local $i10) + (i32.const 8) + ) + ) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 12) + ) + (get_local $i10) + ) + (i32.store + (get_local $i15) + (get_local $i7) + ) + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + (br $do-once) + ) + ) + (set_local $i7 + (i32.load + (i32.add + (get_local $i8) + (i32.const 24) + ) + ) + ) + (set_local $i10 + (i32.load + (i32.add + (get_local $i8) + (i32.const 12) + ) + ) + ) + (block $do-once0 + (if + (i32.eq + (get_local $i10) + (get_local $i8) + ) + (block + (set_local $i14 + (i32.add + (get_local $i8) + (i32.const 16) + ) + ) + (set_local $i11 + (i32.add + (get_local $i14) + (i32.const 4) + ) + ) + (set_local $i16 + (i32.load + (get_local $i11) + ) + ) + (if + (i32.eqz + (get_local $i16) + ) + (block + (set_local $i17 + (i32.load + (get_local $i14) + ) + ) + (if + (i32.eqz + (get_local $i17) + ) + (block + (set_local $i18 + (i32.const 0) + ) + (br $do-once0) + ) + (block + (set_local $i19 + (get_local $i17) + ) + (set_local $i20 + (get_local $i14) + ) + ) + ) + ) + (block + (set_local $i19 + (get_local $i16) + ) + (set_local $i20 + (get_local $i11) + ) + ) + ) + (loop $while-in + (block $while-out + (set_local $i11 + (i32.add + (get_local $i19) + (i32.const 20) + ) + ) + (set_local $i16 + (i32.load + (get_local $i11) + ) + ) + (if + (get_local $i16) + (block + (set_local $i19 + (get_local $i16) + ) + (set_local $i20 + (get_local $i11) + ) + (br $while-in) + ) + ) + (set_local $i11 + (i32.add + (get_local $i19) + (i32.const 16) + ) + ) + (set_local $i16 + (i32.load + (get_local $i11) + ) + ) + (if + (i32.eqz + (get_local $i16) + ) + (block + (set_local $i21 + (get_local $i19) + ) + (set_local $i22 + (get_local $i20) + ) + (br $while-out) + ) + (block + (set_local $i19 + (get_local $i16) + ) + (set_local $i20 + (get_local $i11) + ) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (get_local $i22) + (get_local $i3) + ) + (call $_abort) + (block + (i32.store + (get_local $i22) + (i32.const 0) + ) + (set_local $i18 + (get_local $i21) + ) + (br $do-once0) + ) + ) + ) + (block + (set_local $i11 + (i32.load + (i32.add + (get_local $i8) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $i11) + (get_local $i3) + ) + (call $_abort) + ) + (set_local $i16 + (i32.add + (get_local $i11) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $i16) + ) + (get_local $i8) + ) + (call $_abort) + ) + (set_local $i14 + (i32.add + (get_local $i10) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i14) + ) + (get_local $i8) + ) + (block + (i32.store + (get_local $i16) + (get_local $i10) + ) + (i32.store + (get_local $i14) + (get_local $i11) + ) + (set_local $i18 + (get_local $i10) + ) + (br $do-once0) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $i7) + (block + (set_local $i10 + (i32.load + (i32.add + (get_local $i8) + (i32.const 28) + ) + ) + ) + (set_local $i11 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i10) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $i8) + (i32.load + (get_local $i11) + ) + ) + (block + (i32.store + (get_local $i11) + (get_local $i18) + ) + (if + (i32.eqz + (get_local $i18) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i10) + ) + (i32.const -1) + ) + ) + ) + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $i7) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i10 + (i32.add + (get_local $i7) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i10) + ) + (get_local $i8) + ) + (i32.store + (get_local $i10) + (get_local $i18) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 20) + ) + (get_local $i18) + ) + ) + (if + (i32.eqz + (get_local $i18) + ) + (block + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + (br $do-once) + ) + ) + ) + ) + (set_local $i10 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i18) + (get_local $i10) + ) + (call $_abort) + ) + (i32.store + (i32.add + (get_local $i18) + (i32.const 24) + ) + (get_local $i7) + ) + (set_local $i11 + (i32.add + (get_local $i8) + (i32.const 16) + ) + ) + (set_local $i14 + (i32.load + (get_local $i11) + ) + ) + (block $do-once2 + (if + (get_local $i14) + (if + (i32.lt_u + (get_local $i14) + (get_local $i10) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i18) + (i32.const 16) + ) + (get_local $i14) + ) + (i32.store + (i32.add + (get_local $i14) + (i32.const 24) + ) + (get_local $i18) + ) + (br $do-once2) + ) + ) + ) + ) + (set_local $i14 + (i32.load + (i32.add + (get_local $i11) + (i32.const 4) + ) + ) + ) + (if + (get_local $i14) + (if + (i32.lt_u + (get_local $i14) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i18) + (i32.const 20) + ) + (get_local $i14) + ) + (i32.store + (i32.add + (get_local $i14) + (i32.const 24) + ) + (get_local $i18) + ) + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + (br $do-once) + ) + ) + (block + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + ) + ) + ) + (block + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + ) + ) + ) + (block + (set_local $i12 + (get_local $i2) + ) + (set_local $i13 + (get_local $i5) + ) + ) + ) + ) + (if + (i32.ge_u + (get_local $i12) + (get_local $i6) + ) + (call $_abort) + ) + (set_local $i5 + (i32.add + (get_local $i6) + (i32.const 4) + ) + ) + (set_local $i2 + (i32.load + (get_local $i5) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $i2) + (i32.const 1) + ) + ) + (call $_abort) + ) + (if + (i32.eqz + (i32.and + (get_local $i2) + (i32.const 2) + ) + ) + (block + (if + (i32.eq + (get_local $i6) + (i32.load + (i32.const 200) + ) + ) + (block + (set_local $i18 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $i13) + ) + ) + (i32.store + (i32.const 188) + (get_local $i18) + ) + (i32.store + (i32.const 200) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 4) + ) + (i32.or + (get_local $i18) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $i12) + (i32.load + (i32.const 196) + ) + ) + (return) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store + (i32.const 184) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $i6) + (i32.load + (i32.const 196) + ) + ) + (block + (set_local $i18 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $i13) + ) + ) + (i32.store + (i32.const 184) + (get_local $i18) + ) + (i32.store + (i32.const 196) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 4) + ) + (i32.or + (get_local $i18) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (get_local $i18) + ) + (get_local $i18) + ) + (return) + ) + ) + (set_local $i18 + (i32.add + (i32.and + (get_local $i2) + (i32.const -8) + ) + (get_local $i13) + ) + ) + (set_local $i3 + (i32.shr_u + (get_local $i2) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.ge_u + (get_local $i2) + (i32.const 256) + ) + (block + (set_local $i21 + (i32.load + (i32.add + (get_local $i6) + (i32.const 24) + ) + ) + ) + (set_local $i22 + (i32.load + (i32.add + (get_local $i6) + (i32.const 12) + ) + ) + ) + (block $do-once6 + (if + (i32.eq + (get_local $i22) + (get_local $i6) + ) + (block + (set_local $i20 + (i32.add + (get_local $i6) + (i32.const 16) + ) + ) + (set_local $i19 + (i32.add + (get_local $i20) + (i32.const 4) + ) + ) + (set_local $i15 + (i32.load + (get_local $i19) + ) + ) + (if + (i32.eqz + (get_local $i15) + ) + (block + (set_local $i1 + (i32.load + (get_local $i20) + ) + ) + (if + (i32.eqz + (get_local $i1) + ) + (block + (set_local $i23 + (i32.const 0) + ) + (br $do-once6) + ) + (block + (set_local $i24 + (get_local $i1) + ) + (set_local $i25 + (get_local $i20) + ) + ) + ) + ) + (block + (set_local $i24 + (get_local $i15) + ) + (set_local $i25 + (get_local $i19) + ) + ) + ) + (loop $while-in9 + (block $while-out8 + (set_local $i19 + (i32.add + (get_local $i24) + (i32.const 20) + ) + ) + (set_local $i15 + (i32.load + (get_local $i19) + ) + ) + (if + (get_local $i15) + (block + (set_local $i24 + (get_local $i15) + ) + (set_local $i25 + (get_local $i19) + ) + (br $while-in9) + ) + ) + (set_local $i19 + (i32.add + (get_local $i24) + (i32.const 16) + ) + ) + (set_local $i15 + (i32.load + (get_local $i19) + ) + ) + (if + (i32.eqz + (get_local $i15) + ) + (block + (set_local $i26 + (get_local $i24) + ) + (set_local $i27 + (get_local $i25) + ) + (br $while-out8) + ) + (block + (set_local $i24 + (get_local $i15) + ) + (set_local $i25 + (get_local $i19) + ) + ) + ) + (br $while-in9) + ) + ) + (if + (i32.lt_u + (get_local $i27) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $i27) + (i32.const 0) + ) + (set_local $i23 + (get_local $i26) + ) + (br $do-once6) + ) + ) + ) + (block + (set_local $i19 + (i32.load + (i32.add + (get_local $i6) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $i19) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i15 + (i32.add + (get_local $i19) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $i15) + ) + (get_local $i6) + ) + (call $_abort) + ) + (set_local $i20 + (i32.add + (get_local $i22) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i20) + ) + (get_local $i6) + ) + (block + (i32.store + (get_local $i15) + (get_local $i22) + ) + (i32.store + (get_local $i20) + (get_local $i19) + ) + (set_local $i23 + (get_local $i22) + ) + (br $do-once6) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $i21) + (block + (set_local $i22 + (i32.load + (i32.add + (get_local $i6) + (i32.const 28) + ) + ) + ) + (set_local $i9 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i22) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $i6) + (i32.load + (get_local $i9) + ) + ) + (block + (i32.store + (get_local $i9) + (get_local $i23) + ) + (if + (i32.eqz + (get_local $i23) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i22) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $i21) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i22 + (i32.add + (get_local $i21) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i22) + ) + (get_local $i6) + ) + (i32.store + (get_local $i22) + (get_local $i23) + ) + (i32.store + (i32.add + (get_local $i21) + (i32.const 20) + ) + (get_local $i23) + ) + ) + (if + (i32.eqz + (get_local $i23) + ) + (br $do-once4) + ) + ) + ) + (set_local $i22 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i23) + (get_local $i22) + ) + (call $_abort) + ) + (i32.store + (i32.add + (get_local $i23) + (i32.const 24) + ) + (get_local $i21) + ) + (set_local $i9 + (i32.add + (get_local $i6) + (i32.const 16) + ) + ) + (set_local $i8 + (i32.load + (get_local $i9) + ) + ) + (block $do-once10 + (if + (get_local $i8) + (if + (i32.lt_u + (get_local $i8) + (get_local $i22) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i23) + (i32.const 16) + ) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 24) + ) + (get_local $i23) + ) + (br $do-once10) + ) + ) + ) + ) + (set_local $i8 + (i32.load + (i32.add + (get_local $i9) + (i32.const 4) + ) + ) + ) + (if + (get_local $i8) + (if + (i32.lt_u + (get_local $i8) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i23) + (i32.const 20) + ) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 24) + ) + (get_local $i23) + ) + (br $do-once4) + ) + ) + ) + ) + ) + ) + (block + (set_local $i8 + (i32.load + (i32.add + (get_local $i6) + (i32.const 8) + ) + ) + ) + (set_local $i22 + (i32.load + (i32.add + (get_local $i6) + (i32.const 12) + ) + ) + ) + (set_local $i21 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i3) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.ne + (get_local $i8) + (get_local $i21) + ) + (block + (if + (i32.lt_u + (get_local $i8) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (i32.add + (get_local $i8) + (i32.const 12) + ) + ) + (get_local $i6) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $i22) + (get_local $i8) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.ne + (get_local $i22) + (get_local $i21) + ) + (block + (if + (i32.lt_u + (get_local $i22) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i21 + (i32.add + (get_local $i22) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i21) + ) + (get_local $i6) + ) + (set_local $i28 + (get_local $i21) + ) + (call $_abort) + ) + ) + (set_local $i28 + (i32.add + (get_local $i22) + (i32.const 8) + ) + ) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 12) + ) + (get_local $i22) + ) + (i32.store + (get_local $i28) + (get_local $i8) + ) + ) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 4) + ) + (i32.or + (get_local $i18) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (get_local $i18) + ) + (get_local $i18) + ) + (if + (i32.eq + (get_local $i12) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (get_local $i18) + ) + (return) + ) + (set_local $i29 + (get_local $i18) + ) + ) + ) + (block + (i32.store + (get_local $i5) + (i32.and + (get_local $i2) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 4) + ) + (i32.or + (get_local $i13) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (get_local $i13) + ) + (get_local $i13) + ) + (set_local $i29 + (get_local $i13) + ) + ) + ) + (set_local $i13 + (i32.shr_u + (get_local $i29) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $i29) + (i32.const 256) + ) + (block + (set_local $i2 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i13) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i5 + (i32.load + (i32.const 176) + ) + ) + (set_local $i18 + (i32.shl + (i32.const 1) + (get_local $i13) + ) + ) + (if + (i32.and + (get_local $i5) + (get_local $i18) + ) + (block + (set_local $i13 + (i32.add + (get_local $i2) + (i32.const 8) + ) + ) + (set_local $i28 + (i32.load + (get_local $i13) + ) + ) + (if + (i32.lt_u + (get_local $i28) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $i30 + (get_local $i13) + ) + (set_local $i31 + (get_local $i28) + ) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i5) + (get_local $i18) + ) + ) + (set_local $i30 + (i32.add + (get_local $i2) + (i32.const 8) + ) + ) + (set_local $i31 + (get_local $i2) + ) + ) + ) + (i32.store + (get_local $i30) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i31) + (i32.const 12) + ) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 8) + ) + (get_local $i31) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 12) + ) + (get_local $i2) + ) + (return) + ) + ) + (set_local $i2 + (i32.shr_u + (get_local $i29) + (i32.const 8) + ) + ) + (if + (get_local $i2) + (if + (i32.gt_u + (get_local $i29) + (i32.const 16777215) + ) + (set_local $i32 + (i32.const 31) + ) + (block + (set_local $i31 + (i32.and + (i32.shr_u + (i32.add + (get_local $i2) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $i30 + (i32.shl + (get_local $i2) + (get_local $i31) + ) + ) + (set_local $i2 + (i32.and + (i32.shr_u + (i32.add + (get_local $i30) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $i18 + (i32.shl + (get_local $i30) + (get_local $i2) + ) + ) + (set_local $i30 + (i32.and + (i32.shr_u + (i32.add + (get_local $i18) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $i5 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $i2) + (get_local $i31) + ) + (get_local $i30) + ) + ) + (i32.shr_u + (i32.shl + (get_local $i18) + (get_local $i30) + ) + (i32.const 15) + ) + ) + ) + (set_local $i32 + (i32.or + (i32.and + (i32.shr_u + (get_local $i29) + (i32.add + (get_local $i5) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $i5) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i32 + (i32.const 0) + ) + ) + (set_local $i5 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i32) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 28) + ) + (get_local $i32) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 20) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 16) + ) + (i32.const 0) + ) + (set_local $i30 + (i32.load + (i32.const 180) + ) + ) + (set_local $i18 + (i32.shl + (i32.const 1) + (get_local $i32) + ) + ) + (block $do-once12 + (if + (i32.and + (get_local $i30) + (get_local $i18) + ) + (block + (set_local $i31 + (i32.shl + (get_local $i29) + (if (result i32) + (i32.eq + (get_local $i32) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $i32) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i2 + (i32.load + (get_local $i5) + ) + ) + (loop $while-in15 + (block $while-out14 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $i2) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i29) + ) + (block + (set_local $i33 + (get_local $i2) + ) + (set_local $i34 + (i32.const 130) + ) + (br $while-out14) + ) + ) + (set_local $i28 + (i32.add + (i32.add + (get_local $i2) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $i31) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $i13 + (i32.load + (get_local $i28) + ) + ) + (if + (i32.eqz + (get_local $i13) + ) + (block + (set_local $i35 + (get_local $i28) + ) + (set_local $i36 + (get_local $i2) + ) + (set_local $i34 + (i32.const 127) + ) + (br $while-out14) + ) + (block + (set_local $i31 + (i32.shl + (get_local $i31) + (i32.const 1) + ) + ) + (set_local $i2 + (get_local $i13) + ) + ) + ) + (br $while-in15) + ) + ) + (if + (i32.eq + (get_local $i34) + (i32.const 127) + ) + (if + (i32.lt_u + (get_local $i35) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $i35) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 24) + ) + (get_local $i36) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 12) + ) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 8) + ) + (get_local $i12) + ) + (br $do-once12) + ) + ) + (if + (i32.eq + (get_local $i34) + (i32.const 130) + ) + (block + (set_local $i2 + (i32.add + (get_local $i33) + (i32.const 8) + ) + ) + (set_local $i31 + (i32.load + (get_local $i2) + ) + ) + (set_local $i9 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $i31) + (get_local $i9) + ) + (i32.ge_u + (get_local $i33) + (get_local $i9) + ) + ) + (block + (i32.store + (i32.add + (get_local $i31) + (i32.const 12) + ) + (get_local $i12) + ) + (i32.store + (get_local $i2) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 8) + ) + (get_local $i31) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 12) + ) + (get_local $i33) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once12) + ) + (call $_abort) + ) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $i30) + (get_local $i18) + ) + ) + (i32.store + (get_local $i5) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 24) + ) + (get_local $i5) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 12) + ) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 8) + ) + (get_local $i12) + ) + ) + ) + ) + (set_local $i12 + (i32.add + (i32.load + (i32.const 208) + ) + (i32.const -1) + ) + ) + (i32.store + (i32.const 208) + (get_local $i12) + ) + (if + (i32.eqz + (get_local $i12) + ) + (set_local $i37 + (i32.const 632) + ) + (return) + ) + (loop $while-in17 + (block $while-out16 + (set_local $i12 + (i32.load + (get_local $i37) + ) + ) + (if + (i32.eqz + (get_local $i12) + ) + (br $while-out16) + (set_local $i37 + (i32.add + (get_local $i12) + (i32.const 8) + ) + ) + ) + (br $while-in17) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (return) + ) + (func $___stdio_write (; 17 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (local $i10 i32) + (local $i11 i32) + (local $i12 i32) + (local $i13 i32) + (local $i14 i32) + (local $i15 i32) + (local $i16 i32) + (local $i17 i32) + (local $i18 i32) + (local $i19 i32) + (local $i20 i32) + (local $i21 i32) + (local $i22 i32) + (local $i23 i32) + (local $i24 i32) + (set_local $i4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (set_local $i5 + (i32.add + (get_local $i4) + (i32.const 16) + ) + ) + (set_local $i6 + (get_local $i4) + ) + (set_local $i7 + (i32.add + (get_local $i4) + (i32.const 32) + ) + ) + (set_local $i8 + (i32.add + (get_local $i1) + (i32.const 28) + ) + ) + (set_local $i9 + (i32.load + (get_local $i8) + ) + ) + (i32.store + (get_local $i7) + (get_local $i9) + ) + (set_local $i10 + (i32.add + (get_local $i1) + (i32.const 20) + ) + ) + (set_local $i11 + (i32.sub + (i32.load + (get_local $i10) + ) + (get_local $i9) + ) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 4) + ) + (get_local $i11) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 8) + ) + (get_local $i2) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 12) + ) + (get_local $i3) + ) + (set_local $i2 + (i32.add + (get_local $i1) + (i32.const 60) + ) + ) + (set_local $i9 + (i32.add + (get_local $i1) + (i32.const 44) + ) + ) + (set_local $i12 + (get_local $i7) + ) + (set_local $i7 + (i32.const 2) + ) + (set_local $i13 + (i32.add + (get_local $i11) + (get_local $i3) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.load + (i32.const 8) + ) + ) + (block + (i32.store + (get_local $i5) + (i32.load + (get_local $i2) + ) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 4) + ) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 8) + ) + (get_local $i7) + ) + (set_local $i14 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $i5) + ) + ) + ) + ) + (block + (call $_pthread_cleanup_push + (i32.const 4) + (get_local $i1) + ) + (i32.store + (get_local $i6) + (i32.load + (get_local $i2) + ) + ) + (i32.store + (i32.add + (get_local $i6) + (i32.const 4) + ) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i6) + (i32.const 8) + ) + (get_local $i7) + ) + (set_local $i11 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $i6) + ) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + (set_local $i14 + (get_local $i11) + ) + ) + ) + (if + (i32.eq + (get_local $i13) + (get_local $i14) + ) + (block + (set_local $i15 + (i32.const 6) + ) + (br $while-out) + ) + ) + (if + (i32.lt_s + (get_local $i14) + (i32.const 0) + ) + (block + (set_local $i16 + (get_local $i12) + ) + (set_local $i17 + (get_local $i7) + ) + (set_local $i15 + (i32.const 8) + ) + (br $while-out) + ) + ) + (set_local $i11 + (i32.sub + (get_local $i13) + (get_local $i14) + ) + ) + (set_local $i18 + (i32.load + (i32.add + (get_local $i12) + (i32.const 4) + ) + ) + ) + (if + (i32.le_u + (get_local $i14) + (get_local $i18) + ) + (if + (i32.eq + (get_local $i7) + (i32.const 2) + ) + (block + (i32.store + (get_local $i8) + (i32.add + (i32.load + (get_local $i8) + ) + (get_local $i14) + ) + ) + (set_local $i19 + (get_local $i18) + ) + (set_local $i20 + (get_local $i14) + ) + (set_local $i21 + (get_local $i12) + ) + (set_local $i22 + (i32.const 2) + ) + ) + (block + (set_local $i19 + (get_local $i18) + ) + (set_local $i20 + (get_local $i14) + ) + (set_local $i21 + (get_local $i12) + ) + (set_local $i22 + (get_local $i7) + ) + ) + ) + (block + (set_local $i23 + (i32.load + (get_local $i9) + ) + ) + (i32.store + (get_local $i8) + (get_local $i23) + ) + (i32.store + (get_local $i10) + (get_local $i23) + ) + (set_local $i19 + (i32.load + (i32.add + (get_local $i12) + (i32.const 12) + ) + ) + ) + (set_local $i20 + (i32.sub + (get_local $i14) + (get_local $i18) + ) + ) + (set_local $i21 + (i32.add + (get_local $i12) + (i32.const 8) + ) + ) + (set_local $i22 + (i32.add + (get_local $i7) + (i32.const -1) + ) + ) + ) + ) + (i32.store + (get_local $i21) + (i32.add + (i32.load + (get_local $i21) + ) + (get_local $i20) + ) + ) + (i32.store + (i32.add + (get_local $i21) + (i32.const 4) + ) + (i32.sub + (get_local $i19) + (get_local $i20) + ) + ) + (set_local $i12 + (get_local $i21) + ) + (set_local $i7 + (get_local $i22) + ) + (set_local $i13 + (get_local $i11) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $i15) + (i32.const 6) + ) + (block + (set_local $i13 + (i32.load + (get_local $i9) + ) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 16) + ) + (i32.add + (get_local $i13) + (i32.load + (i32.add + (get_local $i1) + (i32.const 48) + ) + ) + ) + ) + (set_local $i9 + (get_local $i13) + ) + (i32.store + (get_local $i8) + (get_local $i9) + ) + (i32.store + (get_local $i10) + (get_local $i9) + ) + (set_local $i24 + (get_local $i3) + ) + ) + (if + (i32.eq + (get_local $i15) + (i32.const 8) + ) + (block + (i32.store + (i32.add + (get_local $i1) + (i32.const 16) + ) + (i32.const 0) + ) + (i32.store + (get_local $i8) + (i32.const 0) + ) + (i32.store + (get_local $i10) + (i32.const 0) + ) + (i32.store + (get_local $i1) + (i32.or + (i32.load + (get_local $i1) + ) + (i32.const 32) + ) + ) + (if + (i32.eq + (get_local $i17) + (i32.const 2) + ) + (set_local $i24 + (i32.const 0) + ) + (set_local $i24 + (i32.sub + (get_local $i3) + (i32.load + (i32.add + (get_local $i16) + (i32.const 4) + ) + ) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $i4) + ) + (return + (get_local $i24) + ) + ) + (func $___fwritex (; 18 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (local $i10 i32) + (local $i11 i32) + (local $i12 i32) + (local $i13 i32) + (local $i14 i32) + (local $i15 i32) + (set_local $i4 + (i32.add + (get_local $i3) + (i32.const 16) + ) + ) + (set_local $i5 + (i32.load + (get_local $i4) + ) + ) + (if + (i32.eqz + (get_local $i5) + ) + (if + (i32.eqz + (call $___towrite + (get_local $i3) + ) + ) + (block + (set_local $i6 + (i32.load + (get_local $i4) + ) + ) + (set_local $i7 + (i32.const 5) + ) + ) + (set_local $i8 + (i32.const 0) + ) + ) + (block + (set_local $i6 + (get_local $i5) + ) + (set_local $i7 + (i32.const 5) + ) + ) + ) + (block $label$break$L5 + (if + (i32.eq + (get_local $i7) + (i32.const 5) + ) + (block + (set_local $i5 + (i32.add + (get_local $i3) + (i32.const 20) + ) + ) + (set_local $i4 + (i32.load + (get_local $i5) + ) + ) + (set_local $i9 + (get_local $i4) + ) + (if + (i32.lt_u + (i32.sub + (get_local $i6) + (get_local $i4) + ) + (get_local $i2) + ) + (block + (set_local $i8 + (call_indirect (type $FUNCSIG$iiii) + (get_local $i3) + (get_local $i1) + (get_local $i2) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $i3) + (i32.const 36) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (br $label$break$L5) + ) + ) + (block $label$break$L10 + (if + (i32.gt_s + (i32.load8_s + (i32.add + (get_local $i3) + (i32.const 75) + ) + ) + (i32.const -1) + ) + (block + (set_local $i4 + (get_local $i2) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (get_local $i4) + ) + (block + (set_local $i10 + (get_local $i2) + ) + (set_local $i11 + (get_local $i1) + ) + (set_local $i12 + (get_local $i9) + ) + (set_local $i13 + (i32.const 0) + ) + (br $label$break$L10) + ) + ) + (set_local $i14 + (i32.add + (get_local $i4) + (i32.const -1) + ) + ) + (if + (i32.eq + (i32.load8_s + (i32.add + (get_local $i1) + (get_local $i14) + ) + ) + (i32.const 10) + ) + (block + (set_local $i15 + (get_local $i4) + ) + (br $while-out) + ) + (set_local $i4 + (get_local $i14) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (call_indirect (type $FUNCSIG$iiii) + (get_local $i3) + (get_local $i1) + (get_local $i15) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $i3) + (i32.const 36) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + (get_local $i15) + ) + (block + (set_local $i8 + (get_local $i15) + ) + (br $label$break$L5) + ) + ) + (set_local $i10 + (i32.sub + (get_local $i2) + (get_local $i15) + ) + ) + (set_local $i11 + (i32.add + (get_local $i1) + (get_local $i15) + ) + ) + (set_local $i12 + (i32.load + (get_local $i5) + ) + ) + (set_local $i13 + (get_local $i15) + ) + ) + (block + (set_local $i10 + (get_local $i2) + ) + (set_local $i11 + (get_local $i1) + ) + (set_local $i12 + (get_local $i9) + ) + (set_local $i13 + (i32.const 0) + ) + ) + ) + ) + (drop + (call $_memcpy + (get_local $i12) + (get_local $i11) + (get_local $i10) + ) + ) + (i32.store + (get_local $i5) + (i32.add + (i32.load + (get_local $i5) + ) + (get_local $i10) + ) + ) + (set_local $i8 + (i32.add + (get_local $i13) + (get_local $i10) + ) + ) + ) + ) + ) + (return + (get_local $i8) + ) + ) + (func $_fflush (; 19 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (block $do-once + (if + (get_local $i1) + (block + (if + (i32.le_s + (i32.load + (i32.add + (get_local $i1) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (block + (set_local $i2 + (call $___fflush_unlocked + (get_local $i1) + ) + ) + (br $do-once) + ) + ) + (set_local $i3 + (i32.eq + (call $___lockfile + (get_local $i1) + ) + (i32.const 0) + ) + ) + (set_local $i4 + (call $___fflush_unlocked + (get_local $i1) + ) + ) + (if + (get_local $i3) + (set_local $i2 + (get_local $i4) + ) + (block + (call $___unlockfile + (get_local $i1) + ) + (set_local $i2 + (get_local $i4) + ) + ) + ) + ) + (block + (if + (i32.eqz + (i32.load + (i32.const 56) + ) + ) + (set_local $i5 + (i32.const 0) + ) + (set_local $i5 + (call $_fflush + (i32.load + (i32.const 56) + ) + ) + ) + ) + (call $___lock + (i32.const 36) + ) + (set_local $i4 + (i32.load + (i32.const 32) + ) + ) + (if + (i32.eqz + (get_local $i4) + ) + (set_local $i6 + (get_local $i5) + ) + (block + (set_local $i3 + (get_local $i4) + ) + (set_local $i4 + (get_local $i5) + ) + (loop $while-in + (block $while-out + (if + (i32.gt_s + (i32.load + (i32.add + (get_local $i3) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (set_local $i7 + (call $___lockfile + (get_local $i3) + ) + ) + (set_local $i7 + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.load + (i32.add + (get_local $i3) + (i32.const 20) + ) + ) + (i32.load + (i32.add + (get_local $i3) + (i32.const 28) + ) + ) + ) + (set_local $i8 + (i32.or + (call $___fflush_unlocked + (get_local $i3) + ) + (get_local $i4) + ) + ) + (set_local $i8 + (get_local $i4) + ) + ) + (if + (get_local $i7) + (call $___unlockfile + (get_local $i3) + ) + ) + (set_local $i3 + (i32.load + (i32.add + (get_local $i3) + (i32.const 56) + ) + ) + ) + (if + (i32.eqz + (get_local $i3) + ) + (block + (set_local $i6 + (get_local $i8) + ) + (br $while-out) + ) + (set_local $i4 + (get_local $i8) + ) + ) + (br $while-in) + ) + ) + ) + ) + (call $___unlock + (i32.const 36) + ) + (set_local $i2 + (get_local $i6) + ) + ) + ) + ) + (return + (get_local $i2) + ) + ) + (func $_strlen (; 20 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (local $i10 i32) + (local $i11 i32) + (set_local $i2 + (get_local $i1) + ) + (block $label$break$L1 + (if + (i32.eqz + (i32.and + (get_local $i2) + (i32.const 3) + ) + ) + (block + (set_local $i3 + (get_local $i1) + ) + (set_local $i4 + (i32.const 4) + ) + ) + (block + (set_local $i5 + (get_local $i1) + ) + (set_local $i6 + (get_local $i2) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.load8_s + (get_local $i5) + ) + ) + (block + (set_local $i7 + (get_local $i6) + ) + (br $label$break$L1) + ) + ) + (set_local $i8 + (i32.add + (get_local $i5) + (i32.const 1) + ) + ) + (set_local $i6 + (get_local $i8) + ) + (if + (i32.eqz + (i32.and + (get_local $i6) + (i32.const 3) + ) + ) + (block + (set_local $i3 + (get_local $i8) + ) + (set_local $i4 + (i32.const 4) + ) + (br $while-out) + ) + (set_local $i5 + (get_local $i8) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $i4) + (i32.const 4) + ) + (block + (set_local $i4 + (get_local $i3) + ) + (loop $while-in1 + (block $while-out0 + (set_local $i3 + (i32.load + (get_local $i4) + ) + ) + (if + (i32.eqz + (i32.and + (i32.xor + (i32.and + (get_local $i3) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $i3) + (i32.const -16843009) + ) + ) + ) + (set_local $i4 + (i32.add + (get_local $i4) + (i32.const 4) + ) + ) + (block + (set_local $i9 + (get_local $i3) + ) + (set_local $i10 + (get_local $i4) + ) + (br $while-out0) + ) + ) + (br $while-in1) + ) + ) + (if + (i32.eqz + (i32.shr_s + (i32.shl + (i32.and + (get_local $i9) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $i11 + (get_local $i10) + ) + (block + (set_local $i9 + (get_local $i10) + ) + (loop $while-in3 + (block $while-out2 + (set_local $i10 + (i32.add + (get_local $i9) + (i32.const 1) + ) + ) + (if + (i32.eqz + (i32.load8_s + (get_local $i10) + ) + ) + (block + (set_local $i11 + (get_local $i10) + ) + (br $while-out2) + ) + (set_local $i9 + (get_local $i10) + ) + ) + (br $while-in3) + ) + ) + ) + ) + (set_local $i7 + (get_local $i11) + ) + ) + ) + (return + (i32.sub + (get_local $i7) + (get_local $i2) + ) + ) + ) + (func $___overflow (; 21 ;) (param $i1 i32) (param $i2 i32) (result i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (local $i10 i32) + (local $i11 i32) + (set_local $i3 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $i4 + (get_local $i3) + ) + (set_local $i5 + (i32.and + (get_local $i2) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $i4) + (get_local $i5) + ) + (set_local $i6 + (i32.add + (get_local $i1) + (i32.const 16) + ) + ) + (set_local $i7 + (i32.load + (get_local $i6) + ) + ) + (if + (i32.eqz + (get_local $i7) + ) + (if + (i32.eqz + (call $___towrite + (get_local $i1) + ) + ) + (block + (set_local $i8 + (i32.load + (get_local $i6) + ) + ) + (set_local $i9 + (i32.const 4) + ) + ) + (set_local $i10 + (i32.const -1) + ) + ) + (block + (set_local $i8 + (get_local $i7) + ) + (set_local $i9 + (i32.const 4) + ) + ) + ) + (block $do-once + (if + (i32.eq + (get_local $i9) + (i32.const 4) + ) + (block + (set_local $i7 + (i32.add + (get_local $i1) + (i32.const 20) + ) + ) + (set_local $i6 + (i32.load + (get_local $i7) + ) + ) + (if + (if (result i32) + (i32.lt_u + (get_local $i6) + (get_local $i8) + ) + (block (result i32) + (set_local $i11 + (i32.and + (get_local $i2) + (i32.const 255) + ) + ) + (i32.ne + (get_local $i11) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 75) + ) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $i7) + (i32.add + (get_local $i6) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $i6) + (get_local $i5) + ) + (set_local $i10 + (get_local $i11) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (call_indirect (type $FUNCSIG$iiii) + (get_local $i1) + (get_local $i4) + (i32.const 1) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $i1) + (i32.const 36) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + (i32.const 1) + ) + (set_local $i10 + (i32.load8_u + (get_local $i4) + ) + ) + (set_local $i10 + (i32.const -1) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $i3) + ) + (return + (get_local $i10) + ) + ) + (func $___fflush_unlocked (; 22 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (set_local $i2 + (i32.add + (get_local $i1) + (i32.const 20) + ) + ) + (set_local $i3 + (i32.add + (get_local $i1) + (i32.const 28) + ) + ) + (if + (if (result i32) + (i32.gt_u + (i32.load + (get_local $i2) + ) + (i32.load + (get_local $i3) + ) + ) + (block (result i32) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $i1) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $i1) + (i32.const 36) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (i32.eq + (i32.load + (get_local $i2) + ) + (i32.const 0) + ) + ) + (i32.const 0) + ) + (set_local $i4 + (i32.const -1) + ) + (block + (set_local $i5 + (i32.add + (get_local $i1) + (i32.const 4) + ) + ) + (set_local $i6 + (i32.load + (get_local $i5) + ) + ) + (set_local $i7 + (i32.add + (get_local $i1) + (i32.const 8) + ) + ) + (set_local $i8 + (i32.load + (get_local $i7) + ) + ) + (if + (i32.lt_u + (get_local $i6) + (get_local $i8) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $i1) + (i32.sub + (get_local $i6) + (get_local $i8) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $i1) + (i32.const 40) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 16) + ) + (i32.const 0) + ) + (i32.store + (get_local $i3) + (i32.const 0) + ) + (i32.store + (get_local $i2) + (i32.const 0) + ) + (i32.store + (get_local $i7) + (i32.const 0) + ) + (i32.store + (get_local $i5) + (i32.const 0) + ) + (set_local $i4 + (i32.const 0) + ) + ) + ) + (return + (get_local $i4) + ) + ) + (func $_memcpy (; 23 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (if + (i32.ge_s + (get_local $i3) + (i32.const 4096) + ) + (return + (call $_emscripten_memcpy_big + (get_local $i1) + (get_local $i2) + (get_local $i3) + ) + ) + ) + (set_local $i4 + (get_local $i1) + ) + (if + (i32.eq + (i32.and + (get_local $i1) + (i32.const 3) + ) + (i32.and + (get_local $i2) + (i32.const 3) + ) + ) + (block + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.and + (get_local $i1) + (i32.const 3) + ) + ) + (br $while-out) + ) + (block + (if + (i32.eqz + (get_local $i3) + ) + (return + (get_local $i4) + ) + ) + (i32.store8 + (get_local $i1) + (i32.load8_s + (get_local $i2) + ) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + (set_local $i2 + (i32.add + (get_local $i2) + (i32.const 1) + ) + ) + (set_local $i3 + (i32.sub + (get_local $i3) + (i32.const 1) + ) + ) + ) + (br $while-in) + ) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eqz + (i32.ge_s + (get_local $i3) + (i32.const 4) + ) + ) + (br $while-out0) + ) + (block + (i32.store + (get_local $i1) + (i32.load + (get_local $i2) + ) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 4) + ) + ) + (set_local $i2 + (i32.add + (get_local $i2) + (i32.const 4) + ) + ) + (set_local $i3 + (i32.sub + (get_local $i3) + (i32.const 4) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eqz + (i32.gt_s + (get_local $i3) + (i32.const 0) + ) + ) + (br $while-out2) + ) + (block + (i32.store8 + (get_local $i1) + (i32.load8_s + (get_local $i2) + ) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + (set_local $i2 + (i32.add + (get_local $i2) + (i32.const 1) + ) + ) + (set_local $i3 + (i32.sub + (get_local $i3) + (i32.const 1) + ) + ) + ) + (br $while-in3) + ) + ) + (return + (get_local $i4) + ) + ) + (func $runPostSets (; 24 ;) + (nop) + ) + (func $_memset (; 25 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (set_local $i4 + (i32.add + (get_local $i1) + (get_local $i3) + ) + ) + (if + (i32.ge_s + (get_local $i3) + (i32.const 20) + ) + (block + (set_local $i2 + (i32.and + (get_local $i2) + (i32.const 255) + ) + ) + (set_local $i5 + (i32.and + (get_local $i1) + (i32.const 3) + ) + ) + (set_local $i6 + (i32.or + (i32.or + (i32.or + (get_local $i2) + (i32.shl + (get_local $i2) + (i32.const 8) + ) + ) + (i32.shl + (get_local $i2) + (i32.const 16) + ) + ) + (i32.shl + (get_local $i2) + (i32.const 24) + ) + ) + ) + (set_local $i7 + (i32.and + (get_local $i4) + (i32.xor + (i32.const 3) + (i32.const -1) + ) + ) + ) + (if + (get_local $i5) + (block + (set_local $i5 + (i32.sub + (i32.add + (get_local $i1) + (i32.const 4) + ) + (get_local $i5) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.lt_s + (get_local $i1) + (get_local $i5) + ) + ) + (br $while-out) + ) + (block + (i32.store8 + (get_local $i1) + (get_local $i2) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + ) + (br $while-in) + ) + ) + ) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eqz + (i32.lt_s + (get_local $i1) + (get_local $i7) + ) + ) + (br $while-out0) + ) + (block + (i32.store + (get_local $i1) + (get_local $i6) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 4) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eqz + (i32.lt_s + (get_local $i1) + (get_local $i4) + ) + ) + (br $while-out2) + ) + (block + (i32.store8 + (get_local $i1) + (get_local $i2) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + ) + (br $while-in3) + ) + ) + (return + (i32.sub + (get_local $i1) + (get_local $i3) + ) + ) + ) + (func $_puts (; 26 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (set_local $i2 + (i32.load + (i32.const 52) + ) + ) + (if + (i32.gt_s + (i32.load + (i32.add + (get_local $i2) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (set_local $i3 + (call $___lockfile + (get_local $i2) + ) + ) + (set_local $i3 + (i32.const 0) + ) + ) + (block $do-once + (if + (i32.lt_s + (call $_fputs + (get_local $i1) + (get_local $i2) + ) + (i32.const 0) + ) + (set_local $i4 + (i32.const 1) + ) + (block + (if + (if (result i32) + (i32.ne + (i32.load8_s + (i32.add + (get_local $i2) + (i32.const 75) + ) + ) + (i32.const 10) + ) + (block (result i32) + (set_local $i5 + (i32.add + (get_local $i2) + (i32.const 20) + ) + ) + (block (result i32) + (set_local $i6 + (i32.load + (get_local $i5) + ) + ) + (i32.lt_u + (get_local $i6) + (i32.load + (i32.add + (get_local $i2) + (i32.const 16) + ) + ) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $i5) + (i32.add + (get_local $i6) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $i6) + (i32.const 10) + ) + (set_local $i4 + (i32.const 0) + ) + (br $do-once) + ) + ) + (set_local $i4 + (i32.lt_s + (call $___overflow + (get_local $i2) + (i32.const 10) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (if + (get_local $i3) + (call $___unlockfile + (get_local $i2) + ) + ) + (return + (i32.shr_s + (i32.shl + (get_local $i4) + (i32.const 31) + ) + (i32.const 31) + ) + ) + ) + (func $___stdio_seek (; 27 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (set_local $i4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (set_local $i5 + (get_local $i4) + ) + (set_local $i6 + (i32.add + (get_local $i4) + (i32.const 20) + ) + ) + (i32.store + (get_local $i5) + (i32.load + (i32.add + (get_local $i1) + (i32.const 60) + ) + ) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 8) + ) + (get_local $i2) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 12) + ) + (get_local $i6) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 16) + ) + (get_local $i3) + ) + (if + (i32.lt_s + (call $___syscall_ret + (call $___syscall140 + (i32.const 140) + (get_local $i5) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $i6) + (i32.const -1) + ) + (set_local $i7 + (i32.const -1) + ) + ) + (set_local $i7 + (i32.load + (get_local $i6) + ) + ) + ) + (set_global $STACKTOP + (get_local $i4) + ) + (return + (get_local $i7) + ) + ) + (func $___towrite (; 28 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (set_local $i2 + (i32.add + (get_local $i1) + (i32.const 74) + ) + ) + (set_local $i3 + (i32.load8_s + (get_local $i2) + ) + ) + (i32.store8 + (get_local $i2) + (i32.or + (i32.add + (get_local $i3) + (i32.const 255) + ) + (get_local $i3) + ) + ) + (set_local $i3 + (i32.load + (get_local $i1) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $i3) + (i32.const 8) + ) + ) + (block + (i32.store + (i32.add + (get_local $i1) + (i32.const 8) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 4) + ) + (i32.const 0) + ) + (set_local $i2 + (i32.load + (i32.add + (get_local $i1) + (i32.const 44) + ) + ) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 28) + ) + (get_local $i2) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 20) + ) + (get_local $i2) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 16) + ) + (i32.add + (get_local $i2) + (i32.load + (i32.add + (get_local $i1) + (i32.const 48) + ) + ) + ) + ) + (set_local $i4 + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $i1) + (i32.or + (get_local $i3) + (i32.const 32) + ) + ) + (set_local $i4 + (i32.const -1) + ) + ) + ) + (return + (get_local $i4) + ) + ) + (func $i32u-div (; 29 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (i32.div_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $_fwrite (; 30 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (param $i4 i32) (result i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (set_local $i5 + (i32.mul + (get_local $i3) + (get_local $i2) + ) + ) + (if + (i32.gt_s + (i32.load + (i32.add + (get_local $i4) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (block + (set_local $i6 + (i32.eq + (call $___lockfile + (get_local $i4) + ) + (i32.const 0) + ) + ) + (set_local $i7 + (call $___fwritex + (get_local $i1) + (get_local $i5) + (get_local $i4) + ) + ) + (if + (get_local $i6) + (set_local $i8 + (get_local $i7) + ) + (block + (call $___unlockfile + (get_local $i4) + ) + (set_local $i8 + (get_local $i7) + ) + ) + ) + ) + (set_local $i8 + (call $___fwritex + (get_local $i1) + (get_local $i5) + (get_local $i4) + ) + ) + ) + (if + (i32.eq + (get_local $i8) + (get_local $i5) + ) + (set_local $i9 + (get_local $i3) + ) + (set_local $i9 + (call $i32u-div + (get_local $i8) + (get_local $i2) + ) + ) + ) + (return + (get_local $i9) + ) + ) + (func $___stdout_write (; 31 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (local $i5 i32) + (set_local $i4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 80) + ) + ) + (set_local $i5 + (get_local $i4) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 36) + ) + (i32.const 5) + ) + (if + (if (result i32) + (i32.eq + (i32.and + (i32.load + (get_local $i1) + ) + (i32.const 64) + ) + (i32.const 0) + ) + (block (result i32) + (i32.store + (get_local $i5) + (i32.load + (i32.add + (get_local $i1) + (i32.const 60) + ) + ) + ) + (block (result i32) + (i32.store + (i32.add + (get_local $i5) + (i32.const 4) + ) + (i32.const 21505) + ) + (block (result i32) + (i32.store + (i32.add + (get_local $i5) + (i32.const 8) + ) + (i32.add + (get_local $i4) + (i32.const 12) + ) + ) + (i32.ne + (call $___syscall54 + (i32.const 54) + (get_local $i5) + ) + (i32.const 0) + ) + ) + ) + ) + (i32.const 0) + ) + (i32.store8 + (i32.add + (get_local $i1) + (i32.const 75) + ) + (i32.const -1) + ) + ) + (set_local $i5 + (call $___stdio_write + (get_local $i1) + (get_local $i2) + (get_local $i3) + ) + ) + (set_global $STACKTOP + (get_local $i4) + ) + (return + (get_local $i5) + ) + ) + (func $copyTempDouble (; 32 ;) (param $i1 i32) + (i32.store8 + (get_global $tempDoublePtr) + (i32.load8_s + (get_local $i1) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 1) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 2) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 2) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 3) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 3) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 4) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 4) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 5) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 5) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 6) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 6) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 7) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 7) + ) + ) + ) + ) + (func $___stdio_close (; 33 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (set_local $i2 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $i3 + (get_local $i2) + ) + (i32.store + (get_local $i3) + (i32.load + (i32.add + (get_local $i1) + (i32.const 60) + ) + ) + ) + (set_local $i1 + (call $___syscall_ret + (call $___syscall6 + (i32.const 6) + (get_local $i3) + ) + ) + ) + (set_global $STACKTOP + (get_local $i2) + ) + (return + (get_local $i1) + ) + ) + (func $copyTempFloat (; 34 ;) (param $i1 i32) + (i32.store8 + (get_global $tempDoublePtr) + (i32.load8_s + (get_local $i1) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 1) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 2) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 2) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 3) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 3) + ) + ) + ) + ) + (func $___syscall_ret (; 35 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (if + (i32.gt_u + (get_local $i1) + (i32.const -4096) + ) + (block + (i32.store + (call $___errno_location) + (i32.sub + (i32.const 0) + (get_local $i1) + ) + ) + (set_local $i2 + (i32.const -1) + ) + ) + (set_local $i2 + (get_local $i1) + ) + ) + (return + (get_local $i2) + ) + ) + (func $dynCall_iiii (; 36 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (param $i4 i32) (result i32) + (return + (call_indirect (type $FUNCSIG$iiii) + (get_local $i2) + (get_local $i3) + (get_local $i4) + (i32.add + (i32.and + (get_local $i1) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (func $stackAlloc (; 37 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (set_local $i2 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $i1) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (return + (get_local $i2) + ) + ) + (func $___errno_location (; 38 ;) (result i32) + (local $i1 i32) + (if + (i32.eqz + (i32.load + (i32.const 8) + ) + ) + (set_local $i1 + (i32.const 60) + ) + (set_local $i1 + (i32.load + (i32.add + (call $_pthread_self) + (i32.const 60) + ) + ) + ) + ) + (return + (get_local $i1) + ) + ) + (func $setThrew (; 39 ;) (param $i1 i32) (param $i2 i32) + (if + (i32.eqz + (get_global $__THREW__) + ) + (block + (set_global $__THREW__ + (get_local $i1) + ) + (set_global $threwValue + (get_local $i2) + ) + ) + ) + ) + (func $_fputs (; 40 ;) (param $i1 i32) (param $i2 i32) (result i32) + (return + (i32.add + (call $_fwrite + (get_local $i1) + (call $_strlen + (get_local $i1) + ) + (i32.const 1) + (get_local $i2) + ) + (i32.const -1) + ) + ) + ) + (func $dynCall_ii (; 41 ;) (param $i1 i32) (param $i2 i32) (result i32) + (return + (call_indirect (type $FUNCSIG$ii) + (get_local $i2) + (i32.add + (i32.and + (get_local $i1) + (i32.const 1) + ) + (i32.const 0) + ) + ) + ) + ) + (func $_cleanup_418 (; 42 ;) (param $i1 i32) + (if + (i32.eqz + (i32.load + (i32.add + (get_local $i1) + (i32.const 68) + ) + ) + ) + (call $___unlockfile + (get_local $i1) + ) + ) + (return) + ) + (func $establishStackSpace (; 43 ;) (param $i1 i32) (param $i2 i32) + (set_global $STACKTOP + (get_local $i1) + ) + (set_global $STACK_MAX + (get_local $i2) + ) + ) + (func $dynCall_vi (; 44 ;) (param $i1 i32) (param $i2 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $i2) + (i32.add + (i32.and + (get_local $i1) + (i32.const 7) + ) + (i32.const 10) + ) + ) + ) + (func $b1 (; 45 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (call $abort + (i32.const 1) + ) + (return + (i32.const 0) + ) + ) + (func $stackRestore (; 46 ;) (param $i1 i32) + (set_global $STACKTOP + (get_local $i1) + ) + ) + (func $setTempRet0 (; 47 ;) (param $i1 i32) + (set_global $tempRet0 + (get_local $i1) + ) + ) + (func $b0 (; 48 ;) (param $i1 i32) (result i32) + (call $abort + (i32.const 0) + ) + (return + (i32.const 0) + ) + ) + (func $___unlockfile (; 49 ;) (param $i1 i32) + (return) + ) + (func $___lockfile (; 50 ;) (param $i1 i32) (result i32) + (return + (i32.const 0) + ) + ) + (func $getTempRet0 (; 51 ;) (result i32) + (return + (get_global $tempRet0) + ) + ) + (func $_main (; 52 ;) (result i32) + (drop + (call $_puts + (i32.const 672) + ) + ) + (return + (i32.const 0) + ) + ) + (func $stackSave (; 53 ;) (result i32) + (return + (get_global $STACKTOP) + ) + ) + (func $b2 (; 54 ;) (param $i1 i32) + (call $abort + (i32.const 2) + ) + ) +) diff --git a/src/binaryen/test/emcc_O2_hello_world.fromasm.imprecise b/src/binaryen/test/emcc_O2_hello_world.fromasm.imprecise new file mode 100644 index 0000000000..2a716a8962 --- /dev/null +++ b/src/binaryen/test/emcc_O2_hello_world.fromasm.imprecise @@ -0,0 +1,9749 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "abort" (func $abort (param i32))) + (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) + (import "env" "_pthread_self" (func $_pthread_self (result i32))) + (import "env" "_sysconf" (func $_sysconf (param i32) (result i32))) + (import "env" "___lock" (func $___lock (param i32))) + (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) + (import "env" "_abort" (func $_abort)) + (import "env" "_sbrk" (func $_sbrk (param i32) (result i32))) + (import "env" "_time" (func $_time (param i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) + (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $___unlock (param i32))) + (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) + (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 18 18 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (elem (get_global $tableBase) $b0 $___stdio_close $b1 $b1 $___stdout_write $___stdio_seek $b1 $___stdio_write $b1 $b1 $b2 $b2 $b2 $b2 $_cleanup_418 $b2 $b2 $b2) + (export "_free" (func $_free)) + (export "_main" (func $_main)) + (export "_memset" (func $_memset)) + (export "_malloc" (func $_malloc)) + (export "_memcpy" (func $_memcpy)) + (export "_fflush" (func $_fflush)) + (export "___errno_location" (func $___errno_location)) + (export "runPostSets" (func $runPostSets)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackSave" (func $stackSave)) + (export "stackRestore" (func $stackRestore)) + (export "establishStackSpace" (func $establishStackSpace)) + (export "setThrew" (func $setThrew)) + (export "setTempRet0" (func $setTempRet0)) + (export "getTempRet0" (func $getTempRet0)) + (export "dynCall_ii" (func $dynCall_ii)) + (export "dynCall_iiii" (func $dynCall_iiii)) + (export "dynCall_vi" (func $dynCall_vi)) + (func $_malloc (; 15 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (local $47 i32) + (local $48 i32) + (local $49 i32) + (local $50 i32) + (local $51 i32) + (local $52 i32) + (block $do-once + (if + (i32.lt_u + (get_local $0) + (i32.const 245) + ) + (block + (if + (i32.and + (tee_local $2 + (i32.shr_u + (tee_local $15 + (i32.load + (i32.const 176) + ) + ) + (tee_local $6 + (i32.shr_u + (tee_local $9 + (select + (i32.const 16) + (i32.and + (i32.add + (get_local $0) + (i32.const 11) + ) + (i32.const -8) + ) + (i32.lt_u + (get_local $0) + (i32.const 11) + ) + ) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 3) + ) + (block + (set_local $2 + (i32.load + (tee_local $17 + (i32.add + (tee_local $0 + (i32.load + (tee_local $5 + (i32.add + (tee_local $1 + (i32.add + (i32.shl + (tee_local $10 + (i32.add + (i32.xor + (i32.and + (get_local $2) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $6) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.ne + (get_local $1) + (get_local $2) + ) + (block + (if + (i32.lt_u + (get_local $2) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $7 + (i32.add + (get_local $2) + (i32.const 12) + ) + ) + ) + (get_local $0) + ) + (block + (i32.store + (get_local $7) + (get_local $1) + ) + (i32.store + (get_local $5) + (get_local $2) + ) + ) + (call $_abort) + ) + ) + (i32.store + (i32.const 176) + (i32.and + (get_local $15) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $10) + ) + (i32.const -1) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.or + (tee_local $2 + (i32.shl + (get_local $10) + (i32.const 3) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (i32.add + (get_local $0) + (get_local $2) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 1) + ) + ) + (return + (get_local $17) + ) + ) + ) + (if + (i32.gt_u + (get_local $9) + (tee_local $5 + (i32.load + (i32.const 184) + ) + ) + ) + (block + (if + (get_local $2) + (block + (set_local $1 + (i32.and + (i32.shr_u + (tee_local $2 + (i32.add + (i32.and + (tee_local $1 + (i32.and + (i32.shl + (get_local $2) + (get_local $6) + ) + (i32.or + (tee_local $2 + (i32.shl + (i32.const 2) + (get_local $6) + ) + ) + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $1 + (i32.load + (tee_local $7 + (i32.add + (tee_local $0 + (i32.load + (tee_local $19 + (i32.add + (tee_local $11 + (i32.add + (i32.shl + (tee_local $10 + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $2) + (get_local $1) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $1) + ) + (tee_local $7 + (i32.and + (i32.shr_u + (tee_local $0 + (i32.shr_u + (get_local $7) + (get_local $2) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $11 + (i32.shr_u + (get_local $0) + (get_local $7) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $11 + (i32.and + (i32.shr_u + (tee_local $19 + (i32.shr_u + (get_local $11) + (get_local $0) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $19) + (get_local $11) + ) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.ne + (get_local $11) + (get_local $1) + ) + (block + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 12) + ) + ) + ) + (get_local $0) + ) + (block + (i32.store + (get_local $2) + (get_local $11) + ) + (i32.store + (get_local $19) + (get_local $1) + ) + (set_local $17 + (i32.load + (i32.const 184) + ) + ) + ) + (call $_abort) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (get_local $15) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $10) + ) + (i32.const -1) + ) + ) + ) + (set_local $17 + (get_local $5) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.or + (get_local $9) + (i32.const 3) + ) + ) + (i32.store offset=4 + (tee_local $15 + (i32.add + (get_local $0) + (get_local $9) + ) + ) + (i32.or + (tee_local $5 + (i32.sub + (i32.shl + (get_local $10) + (i32.const 3) + ) + (get_local $9) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $15) + (get_local $5) + ) + (get_local $5) + ) + (if + (get_local $17) + (block + (set_local $1 + (i32.load + (i32.const 196) + ) + ) + (set_local $11 + (i32.add + (i32.shl + (tee_local $19 + (i32.shr_u + (get_local $17) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $6 + (i32.load + (i32.const 176) + ) + ) + (tee_local $2 + (i32.shl + (i32.const 1) + (get_local $19) + ) + ) + ) + (if + (i32.lt_u + (tee_local $17 + (i32.load + (tee_local $19 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $38 + (get_local $19) + ) + (set_local $31 + (get_local $17) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $6) + (get_local $2) + ) + ) + (set_local $38 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + (set_local $31 + (get_local $11) + ) + ) + ) + (i32.store + (get_local $38) + (get_local $1) + ) + (i32.store offset=12 + (get_local $31) + (get_local $1) + ) + (i32.store offset=8 + (get_local $1) + (get_local $31) + ) + (i32.store offset=12 + (get_local $1) + (get_local $11) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $5) + ) + (i32.store + (i32.const 196) + (get_local $15) + ) + (return + (get_local $7) + ) + ) + ) + (if + (tee_local $15 + (i32.load + (i32.const 180) + ) + ) + (block + (set_local $15 + (i32.and + (i32.shr_u + (tee_local $5 + (i32.add + (i32.and + (get_local $15) + (i32.sub + (i32.const 0) + (get_local $15) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $2 + (i32.sub + (i32.and + (i32.load offset=4 + (tee_local $17 + (i32.load offset=480 + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $5 + (i32.and + (i32.shr_u + (tee_local $11 + (i32.shr_u + (get_local $5) + (get_local $15) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $15) + ) + (tee_local $11 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $11) + (get_local $5) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $2 + (i32.shr_u + (get_local $1) + (get_local $11) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $6 + (i32.shr_u + (get_local $2) + (get_local $1) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $6) + (get_local $2) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const -8) + ) + (get_local $9) + ) + ) + (set_local $6 + (get_local $17) + ) + (set_local $1 + (get_local $17) + ) + (loop $while-in + (block $while-out + (if + (tee_local $17 + (i32.load offset=16 + (get_local $6) + ) + ) + (set_local $0 + (get_local $17) + ) + (if + (tee_local $11 + (i32.load offset=20 + (get_local $6) + ) + ) + (set_local $0 + (get_local $11) + ) + (block + (set_local $8 + (get_local $2) + ) + (set_local $3 + (get_local $1) + ) + (br $while-out) + ) + ) + ) + (set_local $11 + (i32.lt_u + (tee_local $17 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $9) + ) + ) + (get_local $2) + ) + ) + (set_local $2 + (select + (get_local $17) + (get_local $2) + (get_local $11) + ) + ) + (set_local $6 + (get_local $0) + ) + (set_local $1 + (select + (get_local $0) + (get_local $1) + (get_local $11) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (get_local $3) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $3) + (tee_local $6 + (i32.add + (get_local $3) + (get_local $9) + ) + ) + ) + (call $_abort) + ) + (set_local $2 + (i32.load offset=24 + (get_local $3) + ) + ) + (block $do-once4 + (if + (i32.eq + (tee_local $7 + (i32.load offset=12 + (get_local $3) + ) + ) + (get_local $3) + ) + (block + (if + (tee_local $10 + (i32.load + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $17 + (get_local $10) + ) + (set_local $5 + (get_local $0) + ) + ) + (if + (tee_local $17 + (i32.load + (tee_local $11 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (set_local $5 + (get_local $11) + ) + (block + (set_local $19 + (i32.const 0) + ) + (br $do-once4) + ) + ) + ) + (loop $while-in7 + (if + (tee_local $10 + (i32.load + (tee_local $0 + (i32.add + (get_local $17) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $17 + (get_local $10) + ) + (set_local $5 + (get_local $0) + ) + (br $while-in7) + ) + ) + (if + (tee_local $10 + (i32.load + (tee_local $0 + (i32.add + (get_local $17) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $17 + (get_local $10) + ) + (set_local $5 + (get_local $0) + ) + (br $while-in7) + ) + ) + ) + (if + (i32.lt_u + (get_local $5) + (get_local $1) + ) + (call $_abort) + (block + (i32.store + (get_local $5) + (i32.const 0) + ) + (set_local $19 + (get_local $17) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $0 + (i32.load offset=8 + (get_local $3) + ) + ) + (get_local $1) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $10 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + (get_local $3) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $11 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + ) + (get_local $3) + ) + (block + (i32.store + (get_local $10) + (get_local $7) + ) + (i32.store + (get_local $11) + (get_local $0) + ) + (set_local $19 + (get_local $7) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once8 + (if + (get_local $2) + (block + (if + (i32.eq + (get_local $3) + (i32.load + (tee_local $1 + (i32.add + (i32.shl + (tee_local $7 + (i32.load offset=28 + (get_local $3) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $1) + (get_local $19) + ) + (if + (i32.eqz + (get_local $19) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $7) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $2) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $7 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + (get_local $3) + ) + (i32.store + (get_local $7) + (get_local $19) + ) + (i32.store offset=20 + (get_local $2) + (get_local $19) + ) + ) + (br_if $do-once8 + (i32.eqz + (get_local $19) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $19) + (tee_local $7 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $19) + (get_local $2) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $3) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $7) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $19) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $19) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load offset=20 + (get_local $3) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $19) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $19) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $8) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $3) + (i32.or + (tee_local $2 + (i32.add + (get_local $8) + (get_local $9) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $1 + (i32.add + (i32.add + (get_local $3) + (get_local $2) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $1) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $9) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $6) + (i32.or + (get_local $8) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $6) + (get_local $8) + ) + (get_local $8) + ) + (if + (tee_local $1 + (i32.load + (i32.const 184) + ) + ) + (block + (set_local $2 + (i32.load + (i32.const 196) + ) + ) + (set_local $1 + (i32.add + (i32.shl + (tee_local $7 + (i32.shr_u + (get_local $1) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $0 + (i32.load + (i32.const 176) + ) + ) + (tee_local $11 + (i32.shl + (i32.const 1) + (get_local $7) + ) + ) + ) + (if + (i32.lt_u + (tee_local $10 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $39 + (get_local $7) + ) + (set_local $32 + (get_local $10) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $0) + (get_local $11) + ) + ) + (set_local $39 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $32 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $39) + (get_local $2) + ) + (i32.store offset=12 + (get_local $32) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $32) + ) + (i32.store offset=12 + (get_local $2) + (get_local $1) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $8) + ) + (i32.store + (i32.const 196) + (get_local $6) + ) + ) + ) + (return + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.le_u + (get_local $0) + (i32.const -65) + ) + (block + (set_local $2 + (i32.and + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 11) + ) + ) + (i32.const -8) + ) + ) + (if + (tee_local $11 + (i32.load + (i32.const 180) + ) + ) + (block + (set_local $0 + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + (block $label$break$L123 + (if + (tee_local $15 + (i32.load offset=480 + (i32.shl + (tee_local $9 + (if (result i32) + (tee_local $10 + (i32.shr_u + (get_local $1) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $2) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $2) + (i32.add + (tee_local $15 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $10 + (i32.and + (i32.shr_u + (i32.add + (tee_local $7 + (i32.shl + (get_local $10) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (get_local $10) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $1) + ) + (tee_local $7 + (i32.and + (i32.shr_u + (i32.add + (tee_local $17 + (i32.shl + (get_local $7) + (get_local $10) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $17) + (get_local $7) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $15) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + ) + ) + (block + (set_local $7 + (get_local $0) + ) + (set_local $17 + (i32.const 0) + ) + (set_local $1 + (i32.shl + (get_local $2) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $9) + (i32.const 1) + ) + ) + (i32.eq + (get_local $9) + (i32.const 31) + ) + ) + ) + ) + (set_local $10 + (get_local $15) + ) + (set_local $5 + (i32.const 0) + ) + (loop $while-in14 + (if + (i32.lt_u + (tee_local $0 + (i32.sub + (tee_local $19 + (i32.and + (i32.load offset=4 + (get_local $10) + ) + (i32.const -8) + ) + ) + (get_local $2) + ) + ) + (get_local $7) + ) + (if + (i32.eq + (get_local $19) + (get_local $2) + ) + (block + (set_local $27 + (get_local $0) + ) + (set_local $25 + (get_local $10) + ) + (set_local $29 + (get_local $10) + ) + (set_local $7 + (i32.const 90) + ) + (br $label$break$L123) + ) + (block + (set_local $7 + (get_local $0) + ) + (set_local $5 + (get_local $10) + ) + ) + ) + ) + (set_local $19 + (select + (get_local $17) + (tee_local $0 + (i32.load offset=20 + (get_local $10) + ) + ) + (i32.or + (i32.eqz + (get_local $0) + ) + (i32.eq + (get_local $0) + (tee_local $10 + (i32.load + (i32.add + (i32.add + (get_local $10) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $1) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.eqz + (get_local $10) + ) + ) + (block + (set_local $33 + (get_local $7) + ) + (set_local $6 + (get_local $19) + ) + (set_local $30 + (get_local $5) + ) + (set_local $7 + (i32.const 86) + ) + ) + (block + (set_local $17 + (get_local $19) + ) + (set_local $1 + (i32.shl + (get_local $1) + (i32.xor + (i32.and + (get_local $0) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (br $while-in14) + ) + ) + ) + ) + (block + (set_local $33 + (get_local $0) + ) + (set_local $6 + (i32.const 0) + ) + (set_local $30 + (i32.const 0) + ) + (set_local $7 + (i32.const 86) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 86) + ) + (block + (if + (i32.and + (i32.eqz + (get_local $6) + ) + (i32.eqz + (get_local $30) + ) + ) + (block + (if + (i32.eqz + (tee_local $0 + (i32.and + (get_local $11) + (i32.or + (tee_local $15 + (i32.shl + (i32.const 2) + (get_local $9) + ) + ) + (i32.sub + (i32.const 0) + (get_local $15) + ) + ) + ) + ) + ) + (block + (set_local $9 + (get_local $2) + ) + (br $do-once) + ) + ) + (set_local $0 + (i32.and + (i32.shr_u + (tee_local $15 + (i32.add + (i32.and + (get_local $0) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $6 + (i32.load offset=480 + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $15 + (i32.and + (i32.shr_u + (tee_local $9 + (i32.shr_u + (get_local $15) + (get_local $0) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $0) + ) + (tee_local $9 + (i32.and + (i32.shr_u + (tee_local $6 + (i32.shr_u + (get_local $9) + (get_local $15) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $6 + (i32.and + (i32.shr_u + (tee_local $5 + (i32.shr_u + (get_local $6) + (get_local $9) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $5 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $5) + (get_local $6) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $1) + (get_local $5) + ) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (if + (get_local $6) + (block + (set_local $27 + (get_local $33) + ) + (set_local $25 + (get_local $6) + ) + (set_local $29 + (get_local $30) + ) + (set_local $7 + (i32.const 90) + ) + ) + (block + (set_local $3 + (get_local $33) + ) + (set_local $12 + (get_local $30) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 90) + ) + (loop $while-in16 + (set_local $7 + (i32.const 0) + ) + (set_local $1 + (i32.lt_u + (tee_local $5 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $25) + ) + (i32.const -8) + ) + (get_local $2) + ) + ) + (get_local $27) + ) + ) + (set_local $6 + (select + (get_local $5) + (get_local $27) + (get_local $1) + ) + ) + (set_local $5 + (select + (get_local $25) + (get_local $29) + (get_local $1) + ) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $25) + ) + ) + (block + (set_local $27 + (get_local $6) + ) + (set_local $25 + (get_local $1) + ) + (set_local $29 + (get_local $5) + ) + (br $while-in16) + ) + ) + (if + (tee_local $25 + (i32.load offset=20 + (get_local $25) + ) + ) + (block + (set_local $27 + (get_local $6) + ) + (set_local $29 + (get_local $5) + ) + (br $while-in16) + ) + (block + (set_local $3 + (get_local $6) + ) + (set_local $12 + (get_local $5) + ) + ) + ) + ) + ) + (if + (select + (i32.lt_u + (get_local $3) + (i32.sub + (i32.load + (i32.const 184) + ) + (get_local $2) + ) + ) + (i32.const 0) + (get_local $12) + ) + (block + (if + (i32.lt_u + (get_local $12) + (tee_local $11 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $12) + (tee_local $5 + (i32.add + (get_local $12) + (get_local $2) + ) + ) + ) + (call $_abort) + ) + (set_local $6 + (i32.load offset=24 + (get_local $12) + ) + ) + (block $do-once17 + (if + (i32.eq + (tee_local $1 + (i32.load offset=12 + (get_local $12) + ) + ) + (get_local $12) + ) + (block + (if + (tee_local $0 + (i32.load + (tee_local $9 + (i32.add + (get_local $12) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $17 + (get_local $0) + ) + (set_local $1 + (get_local $9) + ) + ) + (if + (tee_local $17 + (i32.load + (tee_local $15 + (i32.add + (get_local $12) + (i32.const 16) + ) + ) + ) + ) + (set_local $1 + (get_local $15) + ) + (block + (set_local $8 + (i32.const 0) + ) + (br $do-once17) + ) + ) + ) + (loop $while-in20 + (if + (tee_local $0 + (i32.load + (tee_local $9 + (i32.add + (get_local $17) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $17 + (get_local $0) + ) + (set_local $1 + (get_local $9) + ) + (br $while-in20) + ) + ) + (if + (tee_local $0 + (i32.load + (tee_local $9 + (i32.add + (get_local $17) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $17 + (get_local $0) + ) + (set_local $1 + (get_local $9) + ) + (br $while-in20) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $11) + ) + (call $_abort) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $8 + (get_local $17) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $9 + (i32.load offset=8 + (get_local $12) + ) + ) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $0 + (i32.add + (get_local $9) + (i32.const 12) + ) + ) + ) + (get_local $12) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $15 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (get_local $12) + ) + (block + (i32.store + (get_local $0) + (get_local $1) + ) + (i32.store + (get_local $15) + (get_local $9) + ) + (set_local $8 + (get_local $1) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once21 + (if + (get_local $6) + (block + (if + (i32.eq + (get_local $12) + (i32.load + (tee_local $11 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $12) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $11) + (get_local $8) + ) + (if + (i32.eqz + (get_local $8) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $12) + ) + (i32.store + (get_local $1) + (get_local $8) + ) + (i32.store offset=20 + (get_local $6) + (get_local $8) + ) + ) + (br_if $do-once21 + (i32.eqz + (get_local $8) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $8) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $8) + (get_local $6) + ) + (if + (tee_local $11 + (i32.load offset=16 + (get_local $12) + ) + ) + (if + (i32.lt_u + (get_local $11) + (get_local $1) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $8) + (get_local $11) + ) + (i32.store offset=24 + (get_local $11) + (get_local $8) + ) + ) + ) + ) + (if + (tee_local $11 + (i32.load offset=20 + (get_local $12) + ) + ) + (if + (i32.lt_u + (get_local $11) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $8) + (get_local $11) + ) + (i32.store offset=24 + (get_local $11) + (get_local $8) + ) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.ge_u + (get_local $3) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $12) + (i32.or + (get_local $2) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $5) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $5) + (get_local $3) + ) + (get_local $3) + ) + (set_local $6 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $3) + (i32.const 256) + ) + (block + (set_local $11 + (i32.add + (i32.shl + (get_local $6) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 176) + ) + ) + (tee_local $9 + (i32.shl + (i32.const 1) + (get_local $6) + ) + ) + ) + (if + (i32.lt_u + (tee_local $15 + (i32.load + (tee_local $6 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $16 + (get_local $6) + ) + (set_local $26 + (get_local $15) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $1) + (get_local $9) + ) + ) + (set_local $16 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + (set_local $26 + (get_local $11) + ) + ) + ) + (i32.store + (get_local $16) + (get_local $5) + ) + (i32.store offset=12 + (get_local $26) + (get_local $5) + ) + (i32.store offset=8 + (get_local $5) + (get_local $26) + ) + (i32.store offset=12 + (get_local $5) + (get_local $11) + ) + (br $do-once25) + ) + ) + (set_local $6 + (i32.add + (i32.shl + (tee_local $10 + (if (result i32) + (tee_local $11 + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $3) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $3) + (i32.add + (tee_local $6 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $11 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $11) + (tee_local $9 + (i32.and + (i32.shr_u + (i32.add + (get_local $11) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $9) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $15 + (i32.shl + (get_local $1) + (get_local $11) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $15) + (get_local $1) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $6) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $5) + (get_local $10) + ) + (i32.store offset=4 + (tee_local $1 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (i32.const 180) + ) + ) + (tee_local $15 + (i32.shl + (i32.const 1) + (get_local $10) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $1) + (get_local $15) + ) + ) + (i32.store + (get_local $6) + (get_local $5) + ) + (i32.store offset=24 + (get_local $5) + (get_local $6) + ) + (i32.store offset=12 + (get_local $5) + (get_local $5) + ) + (i32.store offset=8 + (get_local $5) + (get_local $5) + ) + (br $do-once25) + ) + ) + (set_local $15 + (i32.shl + (get_local $3) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $10) + (i32.const 1) + ) + ) + (i32.eq + (get_local $10) + (i32.const 31) + ) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $6) + ) + ) + (loop $while-in28 + (block $while-out27 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $1) + ) + (i32.const -8) + ) + (get_local $3) + ) + (block + (set_local $14 + (get_local $1) + ) + (set_local $7 + (i32.const 148) + ) + (br $while-out27) + ) + ) + (if + (tee_local $9 + (i32.load + (tee_local $6 + (i32.add + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $15) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $15 + (i32.shl + (get_local $15) + (i32.const 1) + ) + ) + (set_local $1 + (get_local $9) + ) + (br $while-in28) + ) + (block + (set_local $23 + (get_local $6) + ) + (set_local $21 + (get_local $1) + ) + (set_local $7 + (i32.const 145) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 145) + ) + (if + (i32.lt_u + (get_local $23) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $23) + (get_local $5) + ) + (i32.store offset=24 + (get_local $5) + (get_local $21) + ) + (i32.store offset=12 + (get_local $5) + (get_local $5) + ) + (i32.store offset=8 + (get_local $5) + (get_local $5) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 148) + ) + (if + (i32.and + (i32.ge_u + (tee_local $15 + (i32.load + (tee_local $1 + (i32.add + (get_local $14) + (i32.const 8) + ) + ) + ) + ) + (tee_local $9 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $14) + (get_local $9) + ) + ) + (block + (i32.store offset=12 + (get_local $15) + (get_local $5) + ) + (i32.store + (get_local $1) + (get_local $5) + ) + (i32.store offset=8 + (get_local $5) + (get_local $15) + ) + (i32.store offset=12 + (get_local $5) + (get_local $14) + ) + (i32.store offset=24 + (get_local $5) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $12) + (i32.or + (tee_local $15 + (i32.add + (get_local $3) + (get_local $2) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $1 + (i32.add + (i32.add + (get_local $12) + (get_local $15) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $1) + ) + (i32.const 1) + ) + ) + ) + ) + ) + (return + (i32.add + (get_local $12) + (i32.const 8) + ) + ) + ) + (set_local $9 + (get_local $2) + ) + ) + ) + (set_local $9 + (get_local $2) + ) + ) + ) + (set_local $9 + (i32.const -1) + ) + ) + ) + ) + (if + (i32.ge_u + (tee_local $12 + (i32.load + (i32.const 184) + ) + ) + (get_local $9) + ) + (block + (set_local $14 + (i32.load + (i32.const 196) + ) + ) + (if + (i32.gt_u + (tee_local $3 + (i32.sub + (get_local $12) + (get_local $9) + ) + ) + (i32.const 15) + ) + (block + (i32.store + (i32.const 196) + (tee_local $21 + (i32.add + (get_local $14) + (get_local $9) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $3) + ) + (i32.store offset=4 + (get_local $21) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $21) + (get_local $3) + ) + (get_local $3) + ) + (i32.store offset=4 + (get_local $14) + (i32.or + (get_local $9) + (i32.const 3) + ) + ) + ) + (block + (i32.store + (i32.const 184) + (i32.const 0) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $14) + (i32.or + (get_local $12) + (i32.const 3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (i32.add + (get_local $14) + (get_local $12) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $3) + ) + (i32.const 1) + ) + ) + ) + ) + (return + (i32.add + (get_local $14) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.gt_u + (tee_local $14 + (i32.load + (i32.const 188) + ) + ) + (get_local $9) + ) + (block + (i32.store + (i32.const 188) + (tee_local $3 + (i32.sub + (get_local $14) + (get_local $9) + ) + ) + ) + (i32.store + (i32.const 200) + (tee_local $12 + (i32.add + (tee_local $14 + (i32.load + (i32.const 200) + ) + ) + (get_local $9) + ) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $14) + (i32.or + (get_local $9) + (i32.const 3) + ) + ) + (return + (i32.add + (get_local $14) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eqz + (i32.load + (i32.const 648) + ) + ) + (if + (i32.and + (i32.add + (tee_local $14 + (call $_sysconf + (i32.const 30) + ) + ) + (i32.const -1) + ) + (get_local $14) + ) + (call $_abort) + (block + (i32.store + (i32.const 656) + (get_local $14) + ) + (i32.store + (i32.const 652) + (get_local $14) + ) + (i32.store + (i32.const 660) + (i32.const -1) + ) + (i32.store + (i32.const 664) + (i32.const -1) + ) + (i32.store + (i32.const 668) + (i32.const 0) + ) + (i32.store + (i32.const 620) + (i32.const 0) + ) + (i32.store + (i32.const 648) + (i32.xor + (i32.and + (call $_time + (i32.const 0) + ) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + ) + ) + ) + (set_local $14 + (i32.add + (get_local $9) + (i32.const 48) + ) + ) + (if + (i32.le_u + (tee_local $3 + (i32.and + (tee_local $21 + (i32.add + (tee_local $3 + (i32.load + (i32.const 656) + ) + ) + (tee_local $12 + (i32.add + (get_local $9) + (i32.const 47) + ) + ) + ) + ) + (tee_local $23 + (i32.sub + (i32.const 0) + (get_local $3) + ) + ) + ) + ) + (get_local $9) + ) + (return + (i32.const 0) + ) + ) + (if + (if (result i32) + (tee_local $10 + (i32.load + (i32.const 616) + ) + ) + (i32.or + (i32.le_u + (tee_local $16 + (i32.add + (tee_local $26 + (i32.load + (i32.const 608) + ) + ) + (get_local $3) + ) + ) + (get_local $26) + ) + (i32.gt_u + (get_local $16) + (get_local $10) + ) + ) + (i32.const 0) + ) + (return + (i32.const 0) + ) + ) + (if + (if (result i32) + (if (result i32) + (select + (i32.lt_u + (get_local $3) + (i32.const 2147483647) + ) + (i32.const 0) + (i32.eq + (tee_local $7 + (block $label$break$L257 (result i32) + (if (result i32) + (i32.and + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + (i32.const 190) + (block (result i32) + (block $label$break$L259 + (if + (tee_local $10 + (i32.load + (i32.const 200) + ) + ) + (block + (set_local $16 + (i32.const 624) + ) + (loop $while-in34 + (block $while-out33 + (if + (if (result i32) + (i32.le_u + (tee_local $26 + (i32.load + (get_local $16) + ) + ) + (get_local $10) + ) + (i32.gt_u + (i32.add + (get_local $26) + (i32.load + (tee_local $8 + (i32.add + (get_local $16) + (i32.const 4) + ) + ) + ) + ) + (get_local $10) + ) + (i32.const 0) + ) + (block + (set_local $6 + (get_local $16) + ) + (set_local $1 + (get_local $8) + ) + (br $while-out33) + ) + ) + (br_if $while-in34 + (tee_local $16 + (i32.load offset=8 + (get_local $16) + ) + ) + ) + (set_local $7 + (i32.const 173) + ) + (br $label$break$L259) + ) + ) + (if + (i32.lt_u + (tee_local $16 + (i32.and + (i32.sub + (get_local $21) + (i32.load + (i32.const 188) + ) + ) + (get_local $23) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (tee_local $8 + (call $_sbrk + (get_local $16) + ) + ) + (i32.add + (i32.load + (get_local $6) + ) + (i32.load + (get_local $1) + ) + ) + ) + (if + (i32.ne + (get_local $8) + (i32.const -1) + ) + (block + (set_local $20 + (get_local $8) + ) + (set_local $22 + (get_local $16) + ) + (br $label$break$L257 + (i32.const 193) + ) + ) + ) + (block + (set_local $13 + (get_local $8) + ) + (set_local $18 + (get_local $16) + ) + (set_local $7 + (i32.const 183) + ) + ) + ) + ) + ) + (set_local $7 + (i32.const 173) + ) + ) + ) + (block $do-once35 + (if + (if (result i32) + (i32.eq + (get_local $7) + (i32.const 173) + ) + (i32.ne + (tee_local $10 + (call $_sbrk + (i32.const 0) + ) + ) + (i32.const -1) + ) + (i32.const 0) + ) + (block + (set_local $0 + (if (result i32) + (i32.and + (tee_local $8 + (i32.add + (tee_local $16 + (i32.load + (i32.const 652) + ) + ) + (i32.const -1) + ) + ) + (tee_local $2 + (get_local $10) + ) + ) + (i32.add + (i32.sub + (get_local $3) + (get_local $2) + ) + (i32.and + (i32.add + (get_local $8) + (get_local $2) + ) + (i32.sub + (i32.const 0) + (get_local $16) + ) + ) + ) + (get_local $3) + ) + ) + (set_local $2 + (i32.add + (tee_local $16 + (i32.load + (i32.const 608) + ) + ) + (get_local $0) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $0) + (get_local $9) + ) + (i32.lt_u + (get_local $0) + (i32.const 2147483647) + ) + ) + (block + (br_if $do-once35 + (select + (i32.or + (i32.le_u + (get_local $2) + (get_local $16) + ) + (i32.gt_u + (get_local $2) + (tee_local $8 + (i32.load + (i32.const 616) + ) + ) + ) + ) + (i32.const 0) + (get_local $8) + ) + ) + (if + (i32.eq + (tee_local $8 + (call $_sbrk + (get_local $0) + ) + ) + (get_local $10) + ) + (block + (set_local $20 + (get_local $10) + ) + (set_local $22 + (get_local $0) + ) + (br $label$break$L257 + (i32.const 193) + ) + ) + (block + (set_local $13 + (get_local $8) + ) + (set_local $18 + (get_local $0) + ) + (set_local $7 + (i32.const 183) + ) + ) + ) + ) + ) + ) + ) + ) + (block $label$break$L279 + (if + (i32.eq + (get_local $7) + (i32.const 183) + ) + (block + (set_local $8 + (i32.sub + (i32.const 0) + (get_local $18) + ) + ) + (if + (if (result i32) + (i32.and + (i32.gt_u + (get_local $14) + (get_local $18) + ) + (i32.and + (i32.lt_u + (get_local $18) + (i32.const 2147483647) + ) + (i32.ne + (get_local $13) + (i32.const -1) + ) + ) + ) + (i32.lt_u + (tee_local $2 + (i32.and + (i32.add + (i32.sub + (get_local $12) + (get_local $18) + ) + (tee_local $10 + (i32.load + (i32.const 656) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $10) + ) + ) + ) + (i32.const 2147483647) + ) + (i32.const 0) + ) + (if + (i32.eq + (call $_sbrk + (get_local $2) + ) + (i32.const -1) + ) + (block + (drop + (call $_sbrk + (get_local $8) + ) + ) + (br $label$break$L279) + ) + (set_local $4 + (i32.add + (get_local $2) + (get_local $18) + ) + ) + ) + (set_local $4 + (get_local $18) + ) + ) + (if + (i32.ne + (get_local $13) + (i32.const -1) + ) + (block + (set_local $20 + (get_local $13) + ) + (set_local $22 + (get_local $4) + ) + (br $label$break$L257 + (i32.const 193) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 620) + (i32.or + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + ) + (i32.const 190) + ) + ) + ) + ) + (i32.const 190) + ) + ) + (i32.and + (i32.lt_u + (tee_local $4 + (call $_sbrk + (get_local $3) + ) + ) + (tee_local $3 + (call $_sbrk + (i32.const 0) + ) + ) + ) + (i32.and + (i32.ne + (get_local $4) + (i32.const -1) + ) + (i32.ne + (get_local $3) + (i32.const -1) + ) + ) + ) + (i32.const 0) + ) + (i32.gt_u + (tee_local $13 + (i32.sub + (get_local $3) + (get_local $4) + ) + ) + (i32.add + (get_local $9) + (i32.const 40) + ) + ) + (i32.const 0) + ) + (block + (set_local $20 + (get_local $4) + ) + (set_local $22 + (get_local $13) + ) + (set_local $7 + (i32.const 193) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 193) + ) + (block + (i32.store + (i32.const 608) + (tee_local $13 + (i32.add + (i32.load + (i32.const 608) + ) + (get_local $22) + ) + ) + ) + (if + (i32.gt_u + (get_local $13) + (i32.load + (i32.const 612) + ) + ) + (i32.store + (i32.const 612) + (get_local $13) + ) + ) + (block $do-once40 + (if + (tee_local $13 + (i32.load + (i32.const 200) + ) + ) + (block + (set_local $4 + (i32.const 624) + ) + (loop $do-in + (block $do-out + (if + (i32.eq + (get_local $20) + (i32.add + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (tee_local $12 + (i32.load + (tee_local $18 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + ) + ) + ) + ) + (block + (set_local $46 + (get_local $3) + ) + (set_local $47 + (get_local $18) + ) + (set_local $48 + (get_local $12) + ) + (set_local $49 + (get_local $4) + ) + (set_local $7 + (i32.const 203) + ) + (br $do-out) + ) + ) + (br_if $do-in + (tee_local $4 + (i32.load offset=8 + (get_local $4) + ) + ) + ) + ) + ) + (if + (select + (i32.and + (i32.lt_u + (get_local $13) + (get_local $20) + ) + (i32.ge_u + (get_local $13) + (get_local $46) + ) + ) + (i32.const 0) + (select + (i32.eqz + (i32.and + (i32.load offset=12 + (get_local $49) + ) + (i32.const 8) + ) + ) + (i32.const 0) + (i32.eq + (get_local $7) + (i32.const 203) + ) + ) + ) + (block + (i32.store + (get_local $47) + (i32.add + (get_local $48) + (get_local $22) + ) + ) + (set_local $4 + (i32.add + (get_local $13) + (tee_local $12 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $4 + (i32.add + (get_local $13) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $4) + (i32.const 7) + ) + ) + ) + ) + ) + (set_local $18 + (i32.add + (i32.sub + (get_local $22) + (get_local $12) + ) + (i32.load + (i32.const 188) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $4) + ) + (i32.store + (i32.const 188) + (get_local $18) + ) + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $18) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $4) + (get_local $18) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (br $do-once40) + ) + ) + (set_local $5 + (if (result i32) + (i32.lt_u + (get_local $20) + (tee_local $18 + (i32.load + (i32.const 192) + ) + ) + ) + (block (result i32) + (i32.store + (i32.const 192) + (get_local $20) + ) + (get_local $20) + ) + (get_local $18) + ) + ) + (set_local $18 + (i32.add + (get_local $20) + (get_local $22) + ) + ) + (set_local $4 + (i32.const 624) + ) + (loop $while-in43 + (block $while-out42 + (if + (i32.eq + (i32.load + (get_local $4) + ) + (get_local $18) + ) + (block + (set_local $50 + (get_local $4) + ) + (set_local $40 + (get_local $4) + ) + (set_local $7 + (i32.const 211) + ) + (br $while-out42) + ) + ) + (br_if $while-in43 + (tee_local $4 + (i32.load offset=8 + (get_local $4) + ) + ) + ) + (set_local $28 + (i32.const 624) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 211) + ) + (if + (i32.and + (i32.load offset=12 + (get_local $40) + ) + (i32.const 8) + ) + (set_local $28 + (i32.const 624) + ) + (block + (i32.store + (get_local $50) + (get_local $20) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $40) + (i32.const 4) + ) + ) + (i32.add + (i32.load + (get_local $4) + ) + (get_local $22) + ) + ) + (set_local $12 + (i32.add + (get_local $20) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $4 + (i32.add + (get_local $20) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $4) + (i32.const 7) + ) + ) + ) + ) + (set_local $3 + (i32.add + (get_local $18) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $4 + (i32.add + (get_local $18) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $4) + (i32.const 7) + ) + ) + ) + ) + (set_local $4 + (i32.add + (get_local $12) + (get_local $9) + ) + ) + (set_local $14 + (i32.sub + (i32.sub + (get_local $3) + (get_local $12) + ) + (get_local $9) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.or + (get_local $9) + (i32.const 3) + ) + ) + (block $do-once44 + (if + (i32.ne + (get_local $3) + (get_local $13) + ) + (block + (if + (i32.eq + (get_local $3) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (tee_local $0 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $14) + ) + ) + ) + (i32.store + (i32.const 196) + (get_local $4) + ) + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $4) + (get_local $0) + ) + (get_local $0) + ) + (br $do-once44) + ) + ) + (if + (i32.eq + (i32.and + (tee_local $0 + (i32.load offset=4 + (get_local $3) + ) + ) + (i32.const 3) + ) + (i32.const 1) + ) + (block + (set_local $1 + (i32.and + (get_local $0) + (i32.const -8) + ) + ) + (set_local $6 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (block $label$break$L331 + (if + (i32.ge_u + (get_local $0) + (i32.const 256) + ) + (block + (set_local $23 + (i32.load offset=24 + (get_local $3) + ) + ) + (block $do-once47 + (if + (i32.eq + (tee_local $21 + (i32.load offset=12 + (get_local $3) + ) + ) + (get_local $3) + ) + (block + (if + (tee_local $10 + (i32.load + (tee_local $2 + (i32.add + (tee_local $8 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $10) + ) + (set_local $8 + (get_local $2) + ) + ) + (if + (tee_local $16 + (i32.load + (get_local $8) + ) + ) + (set_local $0 + (get_local $16) + ) + (block + (set_local $24 + (i32.const 0) + ) + (br $do-once47) + ) + ) + ) + (loop $while-in50 + (if + (tee_local $10 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $10) + ) + (set_local $8 + (get_local $2) + ) + (br $while-in50) + ) + ) + (if + (tee_local $10 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $10) + ) + (set_local $8 + (get_local $2) + ) + (br $while-in50) + ) + ) + ) + (if + (i32.lt_u + (get_local $8) + (get_local $5) + ) + (call $_abort) + (block + (i32.store + (get_local $8) + (i32.const 0) + ) + (set_local $24 + (get_local $0) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $2 + (i32.load offset=8 + (get_local $3) + ) + ) + (get_local $5) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $10 + (i32.add + (get_local $2) + (i32.const 12) + ) + ) + ) + (get_local $3) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $8 + (i32.add + (get_local $21) + (i32.const 8) + ) + ) + ) + (get_local $3) + ) + (block + (i32.store + (get_local $10) + (get_local $21) + ) + (i32.store + (get_local $8) + (get_local $2) + ) + (set_local $24 + (get_local $21) + ) + ) + (call $_abort) + ) + ) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (get_local $23) + ) + ) + (block $do-once51 + (if + (i32.ne + (get_local $3) + (i32.load + (tee_local $2 + (i32.add + (i32.shl + (tee_local $21 + (i32.load offset=28 + (get_local $3) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $23) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $8 + (i32.add + (get_local $23) + (i32.const 16) + ) + ) + ) + (get_local $3) + ) + (i32.store + (get_local $8) + (get_local $24) + ) + (i32.store offset=20 + (get_local $23) + (get_local $24) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (get_local $24) + ) + ) + ) + (block + (i32.store + (get_local $2) + (get_local $24) + ) + (br_if $do-once51 + (get_local $24) + ) + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $21) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + ) + ) + (if + (i32.lt_u + (get_local $24) + (tee_local $21 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $24) + (get_local $23) + ) + (if + (tee_local $8 + (i32.load + (tee_local $2 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $8) + (get_local $21) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $24) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $24) + ) + ) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (tee_local $8 + (i32.load offset=4 + (get_local $2) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $8) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $24) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $24) + ) + ) + ) + ) + (block + (set_local $21 + (i32.load offset=12 + (get_local $3) + ) + ) + (block $do-once55 + (if + (i32.ne + (tee_local $8 + (i32.load offset=8 + (get_local $3) + ) + ) + (tee_local $23 + (i32.add + (i32.shl + (get_local $6) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $8) + (get_local $5) + ) + (call $_abort) + ) + (br_if $do-once55 + (i32.eq + (i32.load offset=12 + (get_local $8) + ) + (get_local $3) + ) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $21) + (get_local $8) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $6) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + ) + (block $do-once57 + (if + (i32.eq + (get_local $21) + (get_local $23) + ) + (set_local $41 + (i32.add + (get_local $21) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $21) + (get_local $5) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $2 + (i32.add + (get_local $21) + (i32.const 8) + ) + ) + ) + (get_local $3) + ) + (block + (set_local $41 + (get_local $2) + ) + (br $do-once57) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $8) + (get_local $21) + ) + (i32.store + (get_local $41) + (get_local $8) + ) + ) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (get_local $1) + ) + ) + (set_local $14 + (i32.add + (get_local $1) + (get_local $14) + ) + ) + ) + ) + (i32.store + (tee_local $6 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (i32.and + (i32.load + (get_local $6) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $14) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $4) + (get_local $14) + ) + (get_local $14) + ) + (set_local $6 + (i32.shr_u + (get_local $14) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $14) + (i32.const 256) + ) + (block + (set_local $0 + (i32.add + (i32.shl + (get_local $6) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (block $do-once59 + (if + (i32.and + (tee_local $23 + (i32.load + (i32.const 176) + ) + ) + (tee_local $2 + (i32.shl + (i32.const 1) + (get_local $6) + ) + ) + ) + (block + (if + (i32.ge_u + (tee_local $10 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (block + (set_local $42 + (get_local $6) + ) + (set_local $34 + (get_local $10) + ) + (br $do-once59) + ) + ) + (call $_abort) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $23) + (get_local $2) + ) + ) + (set_local $42 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (set_local $34 + (get_local $0) + ) + ) + ) + ) + (i32.store + (get_local $42) + (get_local $4) + ) + (i32.store offset=12 + (get_local $34) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $34) + ) + (i32.store offset=12 + (get_local $4) + (get_local $0) + ) + (br $do-once44) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $1 + (block $do-once61 (result i32) + (if (result i32) + (tee_local $2 + (i32.shr_u + (get_local $14) + (i32.const 8) + ) + ) + (block (result i32) + (drop + (br_if $do-once61 + (i32.const 31) + (i32.gt_u + (get_local $14) + (i32.const 16777215) + ) + ) + ) + (i32.or + (i32.and + (i32.shr_u + (get_local $14) + (i32.add + (tee_local $16 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $10 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $2) + (tee_local $23 + (i32.and + (i32.shr_u + (i32.add + (get_local $2) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $23) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $6 + (i32.shl + (get_local $1) + (get_local $10) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $6) + (get_local $1) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $16) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $4) + (get_local $1) + ) + (i32.store offset=4 + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $0 + (i32.load + (i32.const 180) + ) + ) + (tee_local $16 + (i32.shl + (i32.const 1) + (get_local $1) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $0) + (get_local $16) + ) + ) + (i32.store + (get_local $2) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $2) + ) + (i32.store offset=12 + (get_local $4) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $4) + ) + (br $do-once44) + ) + ) + (set_local $16 + (i32.shl + (get_local $14) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $1) + (i32.const 1) + ) + ) + (i32.eq + (get_local $1) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $2) + ) + ) + (loop $while-in64 + (block $while-out63 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $14) + ) + (block + (set_local $35 + (get_local $0) + ) + (set_local $7 + (i32.const 281) + ) + (br $while-out63) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $16) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $16 + (i32.shl + (get_local $16) + (i32.const 1) + ) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in64) + ) + (block + (set_local $43 + (get_local $2) + ) + (set_local $51 + (get_local $0) + ) + (set_local $7 + (i32.const 278) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 278) + ) + (if + (i32.lt_u + (get_local $43) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $43) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $51) + ) + (i32.store offset=12 + (get_local $4) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $4) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 281) + ) + (if + (i32.and + (i32.ge_u + (tee_local $16 + (i32.load + (tee_local $0 + (i32.add + (get_local $35) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $35) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $16) + (get_local $4) + ) + (i32.store + (get_local $0) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $16) + ) + (i32.store offset=12 + (get_local $4) + (get_local $35) + ) + (i32.store offset=24 + (get_local $4) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block + (i32.store + (i32.const 188) + (tee_local $16 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $14) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $4) + ) + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $16) + (i32.const 1) + ) + ) + ) + ) + ) + (return + (i32.add + (get_local $12) + (i32.const 8) + ) + ) + ) + ) + ) + (loop $while-in66 + (if + (if (result i32) + (i32.le_u + (tee_local $4 + (i32.load + (get_local $28) + ) + ) + (get_local $13) + ) + (i32.gt_u + (tee_local $14 + (i32.add + (get_local $4) + (i32.load offset=4 + (get_local $28) + ) + ) + ) + (get_local $13) + ) + (i32.const 0) + ) + (set_local $0 + (get_local $14) + ) + (block + (set_local $28 + (i32.load offset=8 + (get_local $28) + ) + ) + (br $while-in66) + ) + ) + ) + (set_local $14 + (i32.add + (tee_local $12 + (i32.add + (get_local $0) + (i32.const -47) + ) + ) + (i32.const 8) + ) + ) + (set_local $4 + (i32.add + (tee_local $12 + (select + (get_local $13) + (tee_local $4 + (i32.add + (get_local $12) + (select + (i32.and + (i32.sub + (i32.const 0) + (get_local $14) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $14) + (i32.const 7) + ) + ) + ) + ) + (i32.lt_u + (get_local $4) + (tee_local $14 + (i32.add + (get_local $13) + (i32.const 16) + ) + ) + ) + ) + ) + (i32.const 8) + ) + ) + (i32.store + (i32.const 200) + (tee_local $3 + (i32.add + (get_local $20) + (tee_local $18 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $3 + (i32.add + (get_local $20) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $3) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 188) + (tee_local $16 + (i32.sub + (i32.add + (get_local $22) + (i32.const -40) + ) + (get_local $18) + ) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $16) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $3) + (get_local $16) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (i32.store + (tee_local $16 + (i32.add + (get_local $12) + (i32.const 4) + ) + ) + (i32.const 27) + ) + (i32.store + (get_local $4) + (i32.load + (i32.const 624) + ) + ) + (i32.store offset=4 + (get_local $4) + (i32.load + (i32.const 628) + ) + ) + (i32.store offset=8 + (get_local $4) + (i32.load + (i32.const 632) + ) + ) + (i32.store offset=12 + (get_local $4) + (i32.load + (i32.const 636) + ) + ) + (i32.store + (i32.const 624) + (get_local $20) + ) + (i32.store + (i32.const 628) + (get_local $22) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 632) + (get_local $4) + ) + (set_local $4 + (i32.add + (get_local $12) + (i32.const 24) + ) + ) + (loop $do-in68 + (i32.store + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + (i32.const 7) + ) + (br_if $do-in68 + (i32.lt_u + (i32.add + (get_local $4) + (i32.const 4) + ) + (get_local $0) + ) + ) + ) + (if + (i32.ne + (get_local $12) + (get_local $13) + ) + (block + (i32.store + (get_local $16) + (i32.and + (i32.load + (get_local $16) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $13) + (i32.or + (tee_local $4 + (i32.sub + (get_local $12) + (get_local $13) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (get_local $12) + (get_local $4) + ) + (set_local $3 + (i32.shr_u + (get_local $4) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.const 256) + ) + (block + (set_local $18 + (i32.add + (i32.shl + (get_local $3) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $0 + (i32.load + (i32.const 176) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $3) + ) + ) + ) + (if + (i32.lt_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $18) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $44 + (get_local $3) + ) + (set_local $36 + (get_local $2) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $0) + (get_local $1) + ) + ) + (set_local $44 + (i32.add + (get_local $18) + (i32.const 8) + ) + ) + (set_local $36 + (get_local $18) + ) + ) + ) + (i32.store + (get_local $44) + (get_local $13) + ) + (i32.store offset=12 + (get_local $36) + (get_local $13) + ) + (i32.store offset=8 + (get_local $13) + (get_local $36) + ) + (i32.store offset=12 + (get_local $13) + (get_local $18) + ) + (br $do-once40) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (tee_local $1 + (if (result i32) + (tee_local $18 + (i32.shr_u + (get_local $4) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $4) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $4) + (i32.add + (tee_local $3 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $18 + (i32.and + (i32.shr_u + (i32.add + (tee_local $0 + (i32.shl + (get_local $18) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (get_local $18) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $1) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $2 + (i32.shl + (get_local $0) + (get_local $18) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $2) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $13) + (get_local $1) + ) + (i32.store offset=20 + (get_local $13) + (i32.const 0) + ) + (i32.store + (get_local $14) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $0 + (i32.load + (i32.const 180) + ) + ) + (tee_local $2 + (i32.shl + (i32.const 1) + (get_local $1) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $0) + (get_local $2) + ) + ) + (i32.store + (get_local $3) + (get_local $13) + ) + (i32.store offset=24 + (get_local $13) + (get_local $3) + ) + (i32.store offset=12 + (get_local $13) + (get_local $13) + ) + (i32.store offset=8 + (get_local $13) + (get_local $13) + ) + (br $do-once40) + ) + ) + (set_local $2 + (i32.shl + (get_local $4) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $1) + (i32.const 1) + ) + ) + (i32.eq + (get_local $1) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $3) + ) + ) + (loop $while-in70 + (block $while-out69 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $4) + ) + (block + (set_local $37 + (get_local $0) + ) + (set_local $7 + (i32.const 307) + ) + (br $while-out69) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $3 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $2) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $2 + (i32.shl + (get_local $2) + (i32.const 1) + ) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in70) + ) + (block + (set_local $45 + (get_local $3) + ) + (set_local $52 + (get_local $0) + ) + (set_local $7 + (i32.const 304) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 304) + ) + (if + (i32.lt_u + (get_local $45) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $45) + (get_local $13) + ) + (i32.store offset=24 + (get_local $13) + (get_local $52) + ) + (i32.store offset=12 + (get_local $13) + (get_local $13) + ) + (i32.store offset=8 + (get_local $13) + (get_local $13) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 307) + ) + (if + (i32.and + (i32.ge_u + (tee_local $2 + (i32.load + (tee_local $0 + (i32.add + (get_local $37) + (i32.const 8) + ) + ) + ) + ) + (tee_local $4 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $37) + (get_local $4) + ) + ) + (block + (i32.store offset=12 + (get_local $2) + (get_local $13) + ) + (i32.store + (get_local $0) + (get_local $13) + ) + (i32.store offset=8 + (get_local $13) + (get_local $2) + ) + (i32.store offset=12 + (get_local $13) + (get_local $37) + ) + (i32.store offset=24 + (get_local $13) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + ) + (block + (if + (i32.or + (i32.eqz + (tee_local $2 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.lt_u + (get_local $20) + (get_local $2) + ) + ) + (i32.store + (i32.const 192) + (get_local $20) + ) + ) + (i32.store + (i32.const 624) + (get_local $20) + ) + (i32.store + (i32.const 628) + (get_local $22) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 212) + (i32.load + (i32.const 648) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (set_local $2 + (i32.const 0) + ) + (loop $do-in72 + (i32.store offset=12 + (tee_local $0 + (i32.add + (i32.shl + (get_local $2) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (get_local $0) + ) + (i32.store offset=8 + (get_local $0) + (get_local $0) + ) + (br_if $do-in72 + (i32.ne + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 32) + ) + ) + ) + (i32.store + (i32.const 200) + (tee_local $2 + (i32.add + (get_local $20) + (tee_local $0 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $2 + (i32.add + (get_local $20) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $2) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 188) + (tee_local $4 + (i32.sub + (i32.add + (get_local $22) + (i32.const -40) + ) + (get_local $0) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $4) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $2) + (get_local $4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + ) + ) + ) + (if + (i32.gt_u + (tee_local $22 + (i32.load + (i32.const 188) + ) + ) + (get_local $9) + ) + (block + (i32.store + (i32.const 188) + (tee_local $20 + (i32.sub + (get_local $22) + (get_local $9) + ) + ) + ) + (i32.store + (i32.const 200) + (tee_local $13 + (i32.add + (tee_local $22 + (i32.load + (i32.const 200) + ) + ) + (get_local $9) + ) + ) + ) + (i32.store offset=4 + (get_local $13) + (i32.or + (get_local $20) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $22) + (i32.or + (get_local $9) + (i32.const 3) + ) + ) + (return + (i32.add + (get_local $22) + (i32.const 8) + ) + ) + ) + ) + ) + ) + (i32.store + (call $___errno_location) + (i32.const 12) + ) + (i32.const 0) + ) + (func $_free (; 16 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (if + (i32.eqz + (get_local $0) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $0) + (i32.const -8) + ) + ) + (tee_local $14 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (tee_local $0 + (i32.and + (tee_local $4 + (i32.load + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + ) + (i32.const 3) + ) + ) + (i32.const 1) + ) + (call $_abort) + ) + (set_local $8 + (i32.add + (get_local $1) + (tee_local $5 + (i32.and + (get_local $4) + (i32.const -8) + ) + ) + ) + ) + (block $do-once + (if + (i32.and + (get_local $4) + (i32.const 1) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + ) + (block + (set_local $11 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eqz + (get_local $0) + ) + (return) + ) + (set_local $5 + (i32.add + (get_local $11) + (get_local $5) + ) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.sub + (i32.const 0) + (get_local $11) + ) + ) + ) + (get_local $14) + ) + (call $_abort) + ) + (if + (i32.eq + (get_local $1) + (i32.load + (i32.const 196) + ) + ) + (block + (if + (i32.ne + (i32.and + (tee_local $7 + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 3) + ) + (i32.const 3) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 184) + (get_local $5) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $7) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $5) + ) + (get_local $5) + ) + (return) + ) + ) + (set_local $7 + (i32.shr_u + (get_local $11) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $11) + (i32.const 256) + ) + (block + (set_local $0 + (i32.load offset=12 + (get_local $1) + ) + ) + (if + (i32.ne + (tee_local $11 + (i32.load offset=8 + (get_local $1) + ) + ) + (tee_local $4 + (i32.add + (i32.shl + (get_local $7) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $11) + (get_local $14) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $11) + ) + (get_local $1) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (get_local $11) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $7) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + (br $do-once) + ) + ) + (if + (i32.ne + (get_local $0) + (get_local $4) + ) + (block + (if + (i32.lt_u + (get_local $0) + (get_local $14) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (set_local $10 + (get_local $4) + ) + (call $_abort) + ) + ) + (set_local $10 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (i32.store offset=12 + (get_local $11) + (get_local $0) + ) + (i32.store + (get_local $10) + (get_local $11) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + (br $do-once) + ) + ) + (set_local $11 + (i32.load offset=24 + (get_local $1) + ) + ) + (block $do-once0 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $1) + ) + ) + (get_local $1) + ) + (block + (if + (tee_local $10 + (i32.load + (tee_local $7 + (i32.add + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $10) + ) + (set_local $4 + (get_local $7) + ) + ) + (if + (i32.eqz + (tee_local $0 + (i32.load + (get_local $4) + ) + ) + ) + (block + (set_local $6 + (i32.const 0) + ) + (br $do-once0) + ) + ) + ) + (loop $while-in + (if + (tee_local $10 + (i32.load + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $10) + ) + (set_local $4 + (get_local $7) + ) + (br $while-in) + ) + ) + (if + (tee_local $10 + (i32.load + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $10) + ) + (set_local $4 + (get_local $7) + ) + (br $while-in) + ) + (block + (set_local $7 + (get_local $0) + ) + (set_local $9 + (get_local $4) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $9) + (get_local $14) + ) + (call $_abort) + (block + (i32.store + (get_local $9) + (i32.const 0) + ) + (set_local $6 + (get_local $7) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $7 + (i32.load offset=8 + (get_local $1) + ) + ) + (get_local $14) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $10 + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + ) + (get_local $1) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (block + (i32.store + (get_local $10) + (get_local $0) + ) + (i32.store + (get_local $4) + (get_local $7) + ) + (set_local $6 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $11) + (block + (if + (i32.eq + (get_local $1) + (i32.load + (tee_local $7 + (i32.add + (i32.shl + (tee_local $0 + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $7) + (get_local $6) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $0) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $11) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $11) + (i32.const 16) + ) + ) + ) + (get_local $1) + ) + (i32.store + (get_local $0) + (get_local $6) + ) + (i32.store offset=20 + (get_local $11) + (get_local $6) + ) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + (br $do-once) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $6) + (tee_local $0 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $6) + (get_local $11) + ) + (if + (tee_local $4 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (get_local $0) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $6) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $6) + ) + ) + ) + ) + (if + (tee_local $4 + (i32.load offset=4 + (get_local $7) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $6) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $6) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (get_local $2) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (tee_local $5 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 1) + ) + ) + (call $_abort) + ) + (if + (i32.and + (get_local $1) + (i32.const 2) + ) + (block + (i32.store + (get_local $5) + (i32.and + (get_local $1) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $3) + ) + (get_local $3) + ) + (set_local $0 + (get_local $3) + ) + ) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 200) + ) + ) + (block + (i32.store + (i32.const 188) + (tee_local $6 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $6) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $2) + (i32.load + (i32.const 196) + ) + ) + (return) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store + (i32.const 184) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (tee_local $6 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 196) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $6) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $6) + ) + (get_local $6) + ) + (return) + ) + ) + (set_local $6 + (i32.add + (i32.and + (get_local $1) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $14 + (i32.shr_u + (get_local $1) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.ge_u + (get_local $1) + (i32.const 256) + ) + (block + (set_local $7 + (i32.load offset=24 + (get_local $8) + ) + ) + (block $do-once6 + (if + (i32.eq + (tee_local $9 + (i32.load offset=12 + (get_local $8) + ) + ) + (get_local $8) + ) + (block + (if + (tee_local $10 + (i32.load + (tee_local $0 + (i32.add + (tee_local $4 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $10) + ) + (set_local $4 + (get_local $0) + ) + ) + (if + (tee_local $0 + (i32.load + (get_local $4) + ) + ) + (set_local $3 + (get_local $0) + ) + (block + (set_local $12 + (i32.const 0) + ) + (br $do-once6) + ) + ) + ) + (loop $while-in9 + (if + (tee_local $10 + (i32.load + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $10) + ) + (set_local $4 + (get_local $0) + ) + (br $while-in9) + ) + ) + (if + (tee_local $10 + (i32.load + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $10) + ) + (set_local $4 + (get_local $0) + ) + (br $while-in9) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $12 + (get_local $3) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $0 + (i32.load offset=8 + (get_local $8) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $10 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (block + (i32.store + (get_local $10) + (get_local $9) + ) + (i32.store + (get_local $4) + (get_local $0) + ) + (set_local $12 + (get_local $9) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $7) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (tee_local $5 + (i32.add + (i32.shl + (tee_local $9 + (i32.load offset=28 + (get_local $8) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $5) + (get_local $12) + ) + (if + (i32.eqz + (get_local $12) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $9) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $7) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $9 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + ) + (get_local $8) + ) + (i32.store + (get_local $9) + (get_local $12) + ) + (i32.store offset=20 + (get_local $7) + (get_local $12) + ) + ) + (br_if $do-once4 + (i32.eqz + (get_local $12) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $12) + (tee_local $9 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $12) + (get_local $7) + ) + (if + (tee_local $1 + (i32.load + (tee_local $5 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $9) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $12) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $12) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load offset=4 + (get_local $5) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $12) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $12) + ) + ) + ) + ) + ) + ) + ) + (block + (set_local $9 + (i32.load offset=12 + (get_local $8) + ) + ) + (if + (i32.ne + (tee_local $1 + (i32.load offset=8 + (get_local $8) + ) + ) + (tee_local $7 + (i32.add + (i32.shl + (get_local $14) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $1) + ) + (get_local $8) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $9) + (get_local $1) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $14) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.ne + (get_local $9) + (get_local $7) + ) + (block + (if + (i32.lt_u + (get_local $9) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $7 + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (set_local $16 + (get_local $7) + ) + (call $_abort) + ) + ) + (set_local $16 + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + ) + (i32.store offset=12 + (get_local $1) + (get_local $9) + ) + (i32.store + (get_local $16) + (get_local $1) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $6) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $6) + ) + (get_local $6) + ) + (if + (i32.eq + (get_local $2) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (get_local $6) + ) + (return) + ) + (set_local $0 + (get_local $6) + ) + ) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.const 256) + ) + (block + (set_local $1 + (i32.add + (i32.shl + (get_local $3) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $5 + (i32.load + (i32.const 176) + ) + ) + (tee_local $6 + (i32.shl + (i32.const 1) + (get_local $3) + ) + ) + ) + (if + (i32.lt_u + (tee_local $16 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $15 + (get_local $3) + ) + (set_local $13 + (get_local $16) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $5) + (get_local $6) + ) + ) + (set_local $15 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $13 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $2) + ) + (i32.store offset=12 + (get_local $13) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $13) + ) + (i32.store offset=12 + (get_local $2) + (get_local $1) + ) + (return) + ) + ) + (set_local $5 + (i32.add + (i32.shl + (tee_local $3 + (if (result i32) + (tee_local $1 + (i32.shr_u + (get_local $0) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $0) + (i32.add + (tee_local $5 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $15 + (i32.shl + (get_local $1) + (tee_local $13 + (i32.and + (i32.shr_u + (i32.add + (get_local $1) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $13) + ) + (tee_local $15 + (i32.and + (i32.shr_u + (i32.add + (tee_local $6 + (i32.shl + (get_local $15) + (get_local $1) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $6) + (get_local $15) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $5) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $2) + (get_local $3) + ) + (i32.store offset=20 + (get_local $2) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $2) + (i32.const 0) + ) + (if + (i32.and + (tee_local $15 + (i32.load + (i32.const 180) + ) + ) + (tee_local $6 + (i32.shl + (i32.const 1) + (get_local $3) + ) + ) + ) + (block + (set_local $13 + (i32.shl + (get_local $0) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $3) + (i32.const 1) + ) + ) + (i32.eq + (get_local $3) + (i32.const 31) + ) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $5) + ) + ) + (loop $while-in15 + (block $while-out14 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $1) + ) + (i32.const -8) + ) + (get_local $0) + ) + (block + (set_local $17 + (get_local $1) + ) + (set_local $0 + (i32.const 130) + ) + (br $while-out14) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $16 + (i32.add + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $13) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $13 + (i32.shl + (get_local $13) + (i32.const 1) + ) + ) + (set_local $1 + (get_local $3) + ) + (br $while-in15) + ) + (block + (set_local $18 + (get_local $16) + ) + (set_local $19 + (get_local $1) + ) + (set_local $0 + (i32.const 127) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (i32.const 127) + ) + (if + (i32.lt_u + (get_local $18) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $18) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $19) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (i32.const 130) + ) + (if + (i32.and + (i32.ge_u + (tee_local $13 + (i32.load + (tee_local $1 + (i32.add + (get_local $17) + (i32.const 8) + ) + ) + ) + ) + (tee_local $5 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $17) + (get_local $5) + ) + ) + (block + (i32.store offset=12 + (get_local $13) + (get_local $2) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $13) + ) + (i32.store offset=12 + (get_local $2) + (get_local $17) + ) + (i32.store offset=24 + (get_local $2) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $15) + (get_local $6) + ) + ) + (i32.store + (get_local $5) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $5) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + (i32.store + (i32.const 208) + (tee_local $2 + (i32.add + (i32.load + (i32.const 208) + ) + (i32.const -1) + ) + ) + ) + (if + (get_local $2) + (return) + (set_local $0 + (i32.const 632) + ) + ) + (loop $while-in17 + (if + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (block + (set_local $0 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (br $while-in17) + ) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + ) + (func $___stdio_write (; 17 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (set_local $10 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 16) + ) + ) + (set_local $12 + (get_local $10) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $10) + (i32.const 32) + ) + ) + (tee_local $7 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $3) + (tee_local $9 + (i32.sub + (i32.load + (tee_local $13 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (get_local $7) + ) + ) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (get_local $2) + ) + (set_local $1 + (i32.add + (get_local $0) + (i32.const 60) + ) + ) + (set_local $7 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (set_local $4 + (get_local $3) + ) + (set_local $3 + (i32.const 2) + ) + (set_local $5 + (i32.add + (get_local $9) + (get_local $2) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eq + (get_local $5) + (tee_local $6 + (if (result i32) + (i32.load + (i32.const 8) + ) + (block (result i32) + (call $_pthread_cleanup_push + (i32.const 4) + (get_local $0) + ) + (i32.store + (get_local $12) + (i32.load + (get_local $1) + ) + ) + (i32.store offset=4 + (get_local $12) + (get_local $4) + ) + (i32.store offset=8 + (get_local $12) + (get_local $3) + ) + (set_local $9 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $12) + ) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + (get_local $9) + ) + (block (result i32) + (i32.store + (get_local $11) + (i32.load + (get_local $1) + ) + ) + (i32.store offset=4 + (get_local $11) + (get_local $4) + ) + (i32.store offset=8 + (get_local $11) + (get_local $3) + ) + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $11) + ) + ) + ) + ) + ) + ) + (block + (set_local $1 + (i32.const 6) + ) + (br $while-out) + ) + ) + (if + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (block + (set_local $16 + (get_local $4) + ) + (set_local $17 + (get_local $3) + ) + (set_local $1 + (i32.const 8) + ) + (br $while-out) + ) + ) + (set_local $9 + (i32.sub + (get_local $5) + (get_local $6) + ) + ) + (if + (i32.le_u + (get_local $6) + (tee_local $14 + (i32.load offset=4 + (get_local $4) + ) + ) + ) + (set_local $5 + (if (result i32) + (i32.eq + (get_local $3) + (i32.const 2) + ) + (block (result i32) + (i32.store + (get_local $8) + (i32.add + (i32.load + (get_local $8) + ) + (get_local $6) + ) + ) + (set_local $3 + (i32.const 2) + ) + (get_local $14) + ) + (get_local $14) + ) + ) + (block + (i32.store + (get_local $8) + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + ) + (i32.store + (get_local $13) + (get_local $5) + ) + (set_local $5 + (i32.load offset=12 + (get_local $4) + ) + ) + (set_local $6 + (i32.sub + (get_local $6) + (get_local $14) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + (i32.store + (get_local $4) + (i32.add + (i32.load + (get_local $4) + ) + (get_local $6) + ) + ) + (i32.store offset=4 + (get_local $4) + (i32.sub + (get_local $5) + (get_local $6) + ) + ) + (set_local $5 + (get_local $9) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 6) + ) + (block + (i32.store offset=16 + (get_local $0) + (i32.add + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.store + (get_local $8) + (tee_local $7 + (get_local $5) + ) + ) + (i32.store + (get_local $13) + (get_local $7) + ) + (set_local $15 + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 8) + ) + (block + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $13) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (set_local $15 + (select + (i32.const 0) + (i32.sub + (get_local $2) + (i32.load offset=4 + (get_local $16) + ) + ) + (i32.eq + (get_local $17) + (i32.const 2) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $10) + ) + (get_local $15) + ) + (func $___fwritex (; 18 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (if + (tee_local $5 + (i32.load + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $5) + ) + (set_local $7 + (i32.const 5) + ) + ) + (if + (call $___towrite + (get_local $2) + ) + (set_local $4 + (i32.const 0) + ) + (block + (set_local $6 + (i32.load + (get_local $3) + ) + ) + (set_local $7 + (i32.const 5) + ) + ) + ) + ) + (block $label$break$L5 + (if + (i32.eq + (get_local $7) + (i32.const 5) + ) + (block + (if + (i32.lt_u + (i32.sub + (get_local $6) + (tee_local $3 + (i32.load + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 20) + ) + ) + ) + ) + ) + (get_local $1) + ) + (block + (set_local $4 + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (br $label$break$L5) + ) + ) + (set_local $4 + (get_local $3) + ) + (block $label$break$L10 + (if + (i32.gt_s + (i32.load8_s offset=75 + (get_local $2) + ) + (i32.const -1) + ) + (block + (set_local $3 + (get_local $1) + ) + (loop $while-in + (if + (i32.eqz + (get_local $3) + ) + (block + (set_local $3 + (i32.const 0) + ) + (br $label$break$L10) + ) + ) + (if + (i32.ne + (i32.load8_s + (i32.add + (get_local $0) + (tee_local $6 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + (i32.const 10) + ) + (block + (set_local $3 + (get_local $6) + ) + (br $while-in) + ) + ) + ) + (if + (i32.lt_u + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + (get_local $3) + ) + (block + (set_local $4 + (get_local $3) + ) + (br $label$break$L5) + ) + ) + (set_local $1 + (i32.sub + (get_local $1) + (get_local $3) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (get_local $3) + ) + ) + (set_local $4 + (i32.load + (get_local $5) + ) + ) + ) + (set_local $3 + (i32.const 0) + ) + ) + ) + (drop + (call $_memcpy + (get_local $4) + (get_local $0) + (get_local $1) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $1) + ) + ) + (set_local $4 + (i32.add + (get_local $3) + (get_local $1) + ) + ) + ) + ) + ) + (get_local $4) + ) + (func $_fflush (; 19 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (block $do-once + (if + (get_local $0) + (block + (if + (i32.le_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (block + (set_local $2 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (br $do-once) + ) + ) + (set_local $1 + (i32.eqz + (call $___lockfile + (get_local $0) + ) + ) + ) + (set_local $2 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (if + (i32.eqz + (get_local $1) + ) + (call $___unlockfile + (get_local $0) + ) + ) + ) + (block + (set_local $0 + (if (result i32) + (i32.load + (i32.const 56) + ) + (call $_fflush + (i32.load + (i32.const 56) + ) + ) + (i32.const 0) + ) + ) + (call $___lock + (i32.const 36) + ) + (if + (tee_local $2 + (i32.load + (i32.const 32) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (set_local $0 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (get_local $1) + ) + (i32.const -1) + ) + (call $___lockfile + (get_local $1) + ) + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.load offset=20 + (get_local $1) + ) + (i32.load offset=28 + (get_local $1) + ) + ) + (set_local $2 + (i32.or + (call $___fflush_unlocked + (get_local $1) + ) + (get_local $2) + ) + ) + ) + (if + (get_local $0) + (call $___unlockfile + (get_local $1) + ) + ) + (br_if $while-in + (tee_local $1 + (i32.load offset=56 + (get_local $1) + ) + ) + ) + ) + ) + (set_local $2 + (get_local $0) + ) + ) + (call $___unlock + (i32.const 36) + ) + ) + ) + ) + (get_local $2) + ) + (func $_strlen (; 20 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (block $label$break$L1 + (if + (i32.and + (tee_local $3 + (get_local $0) + ) + (i32.const 3) + ) + (block + (set_local $4 + (get_local $3) + ) + (loop $while-in + (if + (i32.eqz + (i32.load8_s + (get_local $0) + ) + ) + (block + (set_local $5 + (get_local $4) + ) + (br $label$break$L1) + ) + ) + (br_if $while-in + (i32.and + (tee_local $4 + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 3) + ) + ) + (set_local $1 + (get_local $0) + ) + (set_local $2 + (i32.const 4) + ) + ) + ) + (block + (set_local $1 + (get_local $0) + ) + (set_local $2 + (i32.const 4) + ) + ) + ) + ) + (if + (i32.eq + (get_local $2) + (i32.const 4) + ) + (block + (set_local $2 + (get_local $1) + ) + (loop $while-in1 + (if + (i32.and + (i32.xor + (i32.and + (tee_local $1 + (i32.load + (get_local $2) + ) + ) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $1) + (i32.const -16843009) + ) + ) + (set_local $0 + (get_local $2) + ) + (block + (set_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + (if + (i32.and + (get_local $1) + (i32.const 255) + ) + (block + (set_local $1 + (get_local $0) + ) + (loop $while-in3 + (if + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + (block + (set_local $1 + (get_local $0) + ) + (br $while-in3) + ) + ) + ) + ) + ) + (set_local $5 + (get_local $0) + ) + ) + ) + (i32.sub + (get_local $5) + (get_local $3) + ) + ) + (func $___overflow (; 21 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (set_local $5 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store8 + (tee_local $6 + (get_local $5) + ) + (tee_local $9 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $3) + ) + (set_local $8 + (i32.const 4) + ) + ) + (if + (call $___towrite + (get_local $0) + ) + (set_local $4 + (i32.const -1) + ) + (block + (set_local $7 + (i32.load + (get_local $2) + ) + ) + (set_local $8 + (i32.const 4) + ) + ) + ) + ) + (block $do-once + (if + (i32.eq + (get_local $8) + (i32.const 4) + ) + (block + (if + (if (result i32) + (i32.lt_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (get_local $7) + ) + (i32.ne + (tee_local $10 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (i32.load8_s offset=75 + (get_local $0) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $3) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $2) + (get_local $9) + ) + (set_local $4 + (get_local $10) + ) + (br $do-once) + ) + ) + (set_local $4 + (if (result i32) + (i32.eq + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (get_local $6) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + (i32.const 1) + ) + (i32.load8_u + (get_local $6) + ) + (i32.const -1) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + (get_local $4) + ) + (func $___fflush_unlocked (; 22 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (tee_local $0 + (if (result i32) + (if (result i32) + (i32.gt_u + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + (block (result i32) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (i32.eqz + (i32.load + (get_local $1) + ) + ) + ) + (i32.const 0) + ) + (i32.const -1) + (block (result i32) + (if + (i32.lt_u + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (tee_local $6 + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.sub + (get_local $4) + (get_local $6) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=40 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + ) + (func $_memcpy (; 23 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.ge_s + (get_local $2) + (i32.const 4096) + ) + (return + (call $_emscripten_memcpy_big + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (set_local $3 + (get_local $0) + ) + (if + (i32.eq + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.and + (get_local $1) + (i32.const 3) + ) + ) + (block + (loop $while-in + (if + (i32.and + (get_local $0) + (i32.const 3) + ) + (block + (if + (i32.eqz + (get_local $2) + ) + (return + (get_local $3) + ) + ) + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (loop $while-in1 + (if + (i32.ge_s + (get_local $2) + (i32.const 4) + ) + (block + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (get_local $3) + ) + (func $runPostSets (; 24 ;) + (nop) + ) + (func $_memset (; 25 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (if + (i32.ge_s + (get_local $2) + (i32.const 20) + ) + (block + (set_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (if + (tee_local $3 + (i32.and + (get_local $0) + (i32.const 3) + ) + ) + (block + (set_local $3 + (i32.sub + (i32.add + (get_local $0) + (i32.const 4) + ) + (get_local $3) + ) + ) + (loop $while-in + (if + (i32.lt_s + (get_local $0) + (get_local $3) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (set_local $3 + (i32.or + (i32.or + (i32.or + (get_local $1) + (i32.shl + (get_local $1) + (i32.const 8) + ) + ) + (i32.shl + (get_local $1) + (i32.const 16) + ) + ) + (i32.shl + (get_local $1) + (i32.const 24) + ) + ) + ) + (set_local $5 + (i32.and + (get_local $4) + (i32.const -4) + ) + ) + (loop $while-in1 + (if + (i32.lt_s + (get_local $0) + (get_local $5) + ) + (block + (i32.store + (get_local $0) + (get_local $3) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.lt_s + (get_local $0) + (get_local $4) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $_puts (; 26 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (set_local $3 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (tee_local $1 + (i32.load + (i32.const 52) + ) + ) + ) + (i32.const -1) + ) + (call $___lockfile + (get_local $1) + ) + (i32.const 0) + ) + ) + (set_local $0 + (block $do-once (result i32) + (if (result i32) + (i32.lt_s + (i32.add + (call $_fwrite + (get_local $0) + (call $_strlen + (get_local $0) + ) + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + (i32.const 0) + ) + (i32.const 1) + (block (result i32) + (if + (if (result i32) + (i32.ne + (i32.load8_s offset=75 + (get_local $1) + ) + (i32.const 10) + ) + (i32.lt_u + (tee_local $2 + (i32.load + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $1) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $4) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $2) + (i32.const 10) + ) + (br $do-once + (i32.const 0) + ) + ) + ) + (i32.lt_s + (call $___overflow + (get_local $1) + (i32.const 10) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (if + (get_local $3) + (call $___unlockfile + (get_local $1) + ) + ) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (func $___stdio_seek (; 27 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (i32.store + (tee_local $3 + (get_local $4) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + (i32.store offset=16 + (get_local $3) + (get_local $2) + ) + (set_local $0 + (if (result i32) + (i32.lt_s + (call $___syscall_ret + (call $___syscall140 + (i32.const 140) + (get_local $3) + ) + ) + (i32.const 0) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.const -1) + ) + (i32.const -1) + ) + (i32.load + (get_local $0) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $___towrite (; 28 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $2 + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 74) + ) + ) + ) + ) + (i32.store8 + (get_local $1) + (i32.or + (i32.add + (get_local $2) + (i32.const 255) + ) + (get_local $2) + ) + ) + (tee_local $0 + (if (result i32) + (i32.and + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.const 8) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.or + (get_local $2) + (i32.const 32) + ) + ) + (i32.const -1) + ) + (block (result i32) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=28 + (get_local $0) + (tee_local $1 + (i32.load offset=44 + (get_local $0) + ) + ) + ) + (i32.store offset=20 + (get_local $0) + (get_local $1) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (get_local $1) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (func $_fwrite (; 29 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.mul + (get_local $2) + (get_local $1) + ) + ) + (if + (i32.gt_s + (i32.load offset=76 + (get_local $3) + ) + (i32.const -1) + ) + (block + (set_local $5 + (i32.eqz + (call $___lockfile + (get_local $3) + ) + ) + ) + (set_local $0 + (call $___fwritex + (get_local $0) + (get_local $4) + (get_local $3) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (call $___unlockfile + (get_local $3) + ) + ) + ) + (set_local $0 + (call $___fwritex + (get_local $0) + (get_local $4) + (get_local $3) + ) + ) + ) + (if + (i32.ne + (get_local $0) + (get_local $4) + ) + (set_local $2 + (i32.div_u + (get_local $0) + (get_local $1) + ) + ) + ) + (get_local $2) + ) + (func $___stdout_write (; 30 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 80) + ) + ) + (set_local $3 + (get_local $4) + ) + (i32.store offset=36 + (get_local $0) + (i32.const 5) + ) + (if + (if (result i32) + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 64) + ) + (i32.const 0) + (block (result i32) + (i32.store + (get_local $3) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 21505) + ) + (i32.store offset=8 + (get_local $3) + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + (call $___syscall54 + (i32.const 54) + (get_local $3) + ) + ) + ) + (i32.store8 offset=75 + (get_local $0) + (i32.const -1) + ) + ) + (set_local $3 + (call $___stdio_write + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $3) + ) + (func $___stdio_close (; 31 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $2 + (get_local $1) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (set_local $0 + (call $___syscall_ret + (call $___syscall6 + (i32.const 6) + (get_local $2) + ) + ) + ) + (set_global $STACKTOP + (get_local $1) + ) + (get_local $0) + ) + (func $___syscall_ret (; 32 ;) (param $0 i32) (result i32) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const -4096) + ) + (block (result i32) + (i32.store + (call $___errno_location) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + (get_local $0) + ) + ) + (func $dynCall_iiii (; 33 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call_indirect (type $FUNCSIG$iiii) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (func $stackAlloc (; 34 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $0) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $___errno_location (; 35 ;) (result i32) + (if (result i32) + (i32.load + (i32.const 8) + ) + (i32.load offset=60 + (call $_pthread_self) + ) + (i32.const 60) + ) + ) + (func $setThrew (; 36 ;) (param $0 i32) (param $1 i32) + (if + (i32.eqz + (get_global $__THREW__) + ) + (block + (set_global $__THREW__ + (get_local $0) + ) + (set_global $threwValue + (get_local $1) + ) + ) + ) + ) + (func $dynCall_ii (; 37 ;) (param $0 i32) (param $1 i32) (result i32) + (call_indirect (type $FUNCSIG$ii) + (get_local $1) + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + ) + (func $_cleanup_418 (; 38 ;) (param $0 i32) + (if + (i32.eqz + (i32.load offset=68 + (get_local $0) + ) + ) + (call $___unlockfile + (get_local $0) + ) + ) + ) + (func $establishStackSpace (; 39 ;) (param $0 i32) (param $1 i32) + (set_global $STACKTOP + (get_local $0) + ) + (set_global $STACK_MAX + (get_local $1) + ) + ) + (func $dynCall_vi (; 40 ;) (param $0 i32) (param $1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $1) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 10) + ) + ) + ) + (func $b1 (; 41 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $abort + (i32.const 1) + ) + (i32.const 0) + ) + (func $stackRestore (; 42 ;) (param $0 i32) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $setTempRet0 (; 43 ;) (param $0 i32) + (set_global $tempRet0 + (get_local $0) + ) + ) + (func $b0 (; 44 ;) (param $0 i32) (result i32) + (call $abort + (i32.const 0) + ) + (i32.const 0) + ) + (func $___unlockfile (; 45 ;) (param $0 i32) + (nop) + ) + (func $___lockfile (; 46 ;) (param $0 i32) (result i32) + (i32.const 0) + ) + (func $getTempRet0 (; 47 ;) (result i32) + (get_global $tempRet0) + ) + (func $_main (; 48 ;) (result i32) + (drop + (call $_puts + (i32.const 672) + ) + ) + (i32.const 0) + ) + (func $stackSave (; 49 ;) (result i32) + (get_global $STACKTOP) + ) + (func $b2 (; 50 ;) (param $0 i32) + (call $abort + (i32.const 2) + ) + ) +) diff --git a/src/binaryen/test/emcc_O2_hello_world.fromasm.imprecise.no-opts b/src/binaryen/test/emcc_O2_hello_world.fromasm.imprecise.no-opts new file mode 100644 index 0000000000..f1b2457a36 --- /dev/null +++ b/src/binaryen/test/emcc_O2_hello_world.fromasm.imprecise.no-opts @@ -0,0 +1,11930 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "ABORT" (global $ABORT$asm2wasm$import i32)) + (import "global" "NaN" (global $nan$asm2wasm$import f64)) + (import "global" "Infinity" (global $inf$asm2wasm$import f64)) + (import "env" "abort" (func $abort (param i32))) + (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) + (import "env" "_pthread_self" (func $_pthread_self (result i32))) + (import "env" "_sysconf" (func $_sysconf (param i32) (result i32))) + (import "env" "___lock" (func $___lock (param i32))) + (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) + (import "env" "_abort" (func $_abort)) + (import "env" "_sbrk" (func $_sbrk (param i32) (result i32))) + (import "env" "_time" (func $_time (param i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) + (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $___unlock (param i32))) + (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) + (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 18 18 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $ABORT (mut i32) (get_global $ABORT$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $setjmpId (mut i32) (i32.const 0)) + (global $undef (mut i32) (i32.const 0)) + (global $nan (mut f64) (get_global $nan$asm2wasm$import)) + (global $inf (mut f64) (get_global $inf$asm2wasm$import)) + (global $tempInt (mut i32) (i32.const 0)) + (global $tempBigInt (mut i32) (i32.const 0)) + (global $tempBigIntP (mut i32) (i32.const 0)) + (global $tempBigIntS (mut i32) (i32.const 0)) + (global $tempBigIntR (mut f64) (f64.const 0)) + (global $tempBigIntI (mut i32) (i32.const 0)) + (global $tempBigIntD (mut i32) (i32.const 0)) + (global $tempValue (mut i32) (i32.const 0)) + (global $tempDouble (mut f64) (f64.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (global $tempRet1 (mut i32) (i32.const 0)) + (global $tempRet2 (mut i32) (i32.const 0)) + (global $tempRet3 (mut i32) (i32.const 0)) + (global $tempRet4 (mut i32) (i32.const 0)) + (global $tempRet5 (mut i32) (i32.const 0)) + (global $tempRet6 (mut i32) (i32.const 0)) + (global $tempRet7 (mut i32) (i32.const 0)) + (global $tempRet8 (mut i32) (i32.const 0)) + (global $tempRet9 (mut i32) (i32.const 0)) + (global $tempFloat (mut f64) (f64.const 0)) + (elem (get_global $tableBase) $b0 $___stdio_close $b1 $b1 $___stdout_write $___stdio_seek $b1 $___stdio_write $b1 $b1 $b2 $b2 $b2 $b2 $_cleanup_418 $b2 $b2 $b2) + (export "_free" (func $_free)) + (export "_main" (func $_main)) + (export "_memset" (func $_memset)) + (export "_malloc" (func $_malloc)) + (export "_memcpy" (func $_memcpy)) + (export "_fflush" (func $_fflush)) + (export "___errno_location" (func $___errno_location)) + (export "runPostSets" (func $runPostSets)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackSave" (func $stackSave)) + (export "stackRestore" (func $stackRestore)) + (export "establishStackSpace" (func $establishStackSpace)) + (export "setThrew" (func $setThrew)) + (export "setTempRet0" (func $setTempRet0)) + (export "getTempRet0" (func $getTempRet0)) + (export "dynCall_ii" (func $dynCall_ii)) + (export "dynCall_iiii" (func $dynCall_iiii)) + (export "dynCall_vi" (func $dynCall_vi)) + (func $_malloc (; 15 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (local $i10 i32) + (local $i11 i32) + (local $i12 i32) + (local $i13 i32) + (local $i14 i32) + (local $i15 i32) + (local $i16 i32) + (local $i17 i32) + (local $i18 i32) + (local $i19 i32) + (local $i20 i32) + (local $i21 i32) + (local $i22 i32) + (local $i23 i32) + (local $i24 i32) + (local $i25 i32) + (local $i26 i32) + (local $i27 i32) + (local $i28 i32) + (local $i29 i32) + (local $i30 i32) + (local $i31 i32) + (local $i32 i32) + (local $i33 i32) + (local $i34 i32) + (local $i35 i32) + (local $i36 i32) + (local $i37 i32) + (local $i38 i32) + (local $i39 i32) + (local $i40 i32) + (local $i41 i32) + (local $i42 i32) + (local $i43 i32) + (local $i44 i32) + (local $i45 i32) + (local $i46 i32) + (local $i47 i32) + (local $i48 i32) + (local $i49 i32) + (local $i50 i32) + (local $i51 i32) + (local $i52 i32) + (local $i53 i32) + (local $i54 i32) + (local $i55 i32) + (local $i56 i32) + (local $i57 i32) + (local $i58 i32) + (local $i59 i32) + (local $i60 i32) + (local $i61 i32) + (local $i62 i32) + (local $i63 i32) + (local $i64 i32) + (local $i65 i32) + (local $i66 i32) + (local $i67 i32) + (local $i68 i32) + (local $i69 i32) + (local $i70 i32) + (local $i71 i32) + (local $i72 i32) + (local $i73 i32) + (local $i74 i32) + (local $i75 i32) + (local $i76 i32) + (local $i77 i32) + (local $i78 i32) + (local $i79 i32) + (local $i80 i32) + (local $i81 i32) + (local $i82 i32) + (local $i83 i32) + (local $i84 i32) + (local $i85 i32) + (local $i86 i32) + (local $i87 i32) + (local $i88 i32) + (local $i89 i32) + (local $i90 i32) + (local $i91 i32) + (local $i92 i32) + (block $do-once + (if + (i32.lt_u + (get_local $i1) + (i32.const 245) + ) + (block + (set_local $i2 + (if (result i32) + (i32.lt_u + (get_local $i1) + (i32.const 11) + ) + (i32.const 16) + (i32.and + (i32.add + (get_local $i1) + (i32.const 11) + ) + (i32.const -8) + ) + ) + ) + (set_local $i3 + (i32.shr_u + (get_local $i2) + (i32.const 3) + ) + ) + (set_local $i4 + (i32.load + (i32.const 176) + ) + ) + (set_local $i5 + (i32.shr_u + (get_local $i4) + (get_local $i3) + ) + ) + (if + (i32.and + (get_local $i5) + (i32.const 3) + ) + (block + (set_local $i6 + (i32.add + (i32.xor + (i32.and + (get_local $i5) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $i3) + ) + ) + (set_local $i7 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i6) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i8 + (i32.add + (get_local $i7) + (i32.const 8) + ) + ) + (set_local $i9 + (i32.load + (get_local $i8) + ) + ) + (set_local $i10 + (i32.add + (get_local $i9) + (i32.const 8) + ) + ) + (set_local $i11 + (i32.load + (get_local $i10) + ) + ) + (block $do-once0 + (if + (i32.ne + (get_local $i7) + (get_local $i11) + ) + (block + (if + (i32.lt_u + (get_local $i11) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i12 + (i32.add + (get_local $i11) + (i32.const 12) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i12) + ) + (get_local $i9) + ) + (block + (i32.store + (get_local $i12) + (get_local $i7) + ) + (i32.store + (get_local $i8) + (get_local $i11) + ) + (br $do-once0) + ) + (call $_abort) + ) + ) + (i32.store + (i32.const 176) + (i32.and + (get_local $i4) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i6) + ) + (i32.const -1) + ) + ) + ) + ) + ) + (set_local $i11 + (i32.shl + (get_local $i6) + (i32.const 3) + ) + ) + (i32.store + (i32.add + (get_local $i9) + (i32.const 4) + ) + (i32.or + (get_local $i11) + (i32.const 3) + ) + ) + (set_local $i8 + (i32.add + (i32.add + (get_local $i9) + (get_local $i11) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $i8) + (i32.or + (i32.load + (get_local $i8) + ) + (i32.const 1) + ) + ) + (set_local $i13 + (get_local $i10) + ) + (return + (get_local $i13) + ) + ) + ) + (set_local $i8 + (i32.load + (i32.const 184) + ) + ) + (if + (i32.gt_u + (get_local $i2) + (get_local $i8) + ) + (block + (if + (get_local $i5) + (block + (set_local $i11 + (i32.shl + (i32.const 2) + (get_local $i3) + ) + ) + (set_local $i7 + (i32.and + (i32.shl + (get_local $i5) + (get_local $i3) + ) + (i32.or + (get_local $i11) + (i32.sub + (i32.const 0) + (get_local $i11) + ) + ) + ) + ) + (set_local $i11 + (i32.add + (i32.and + (get_local $i7) + (i32.sub + (i32.const 0) + (get_local $i7) + ) + ) + (i32.const -1) + ) + ) + (set_local $i7 + (i32.and + (i32.shr_u + (get_local $i11) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $i12 + (i32.shr_u + (get_local $i11) + (get_local $i7) + ) + ) + (set_local $i11 + (i32.and + (i32.shr_u + (get_local $i12) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $i14 + (i32.shr_u + (get_local $i12) + (get_local $i11) + ) + ) + (set_local $i12 + (i32.and + (i32.shr_u + (get_local $i14) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $i15 + (i32.shr_u + (get_local $i14) + (get_local $i12) + ) + ) + (set_local $i14 + (i32.and + (i32.shr_u + (get_local $i15) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $i16 + (i32.shr_u + (get_local $i15) + (get_local $i14) + ) + ) + (set_local $i15 + (i32.and + (i32.shr_u + (get_local $i16) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $i17 + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $i11) + (get_local $i7) + ) + (get_local $i12) + ) + (get_local $i14) + ) + (get_local $i15) + ) + (i32.shr_u + (get_local $i16) + (get_local $i15) + ) + ) + ) + (set_local $i15 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i17) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i16 + (i32.add + (get_local $i15) + (i32.const 8) + ) + ) + (set_local $i14 + (i32.load + (get_local $i16) + ) + ) + (set_local $i12 + (i32.add + (get_local $i14) + (i32.const 8) + ) + ) + (set_local $i7 + (i32.load + (get_local $i12) + ) + ) + (block $do-once2 + (if + (i32.ne + (get_local $i15) + (get_local $i7) + ) + (block + (if + (i32.lt_u + (get_local $i7) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i11 + (i32.add + (get_local $i7) + (i32.const 12) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i11) + ) + (get_local $i14) + ) + (block + (i32.store + (get_local $i11) + (get_local $i15) + ) + (i32.store + (get_local $i16) + (get_local $i7) + ) + (set_local $i18 + (i32.load + (i32.const 184) + ) + ) + (br $do-once2) + ) + (call $_abort) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (get_local $i4) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i17) + ) + (i32.const -1) + ) + ) + ) + (set_local $i18 + (get_local $i8) + ) + ) + ) + ) + (set_local $i8 + (i32.sub + (i32.shl + (get_local $i17) + (i32.const 3) + ) + (get_local $i2) + ) + ) + (i32.store + (i32.add + (get_local $i14) + (i32.const 4) + ) + (i32.or + (get_local $i2) + (i32.const 3) + ) + ) + (set_local $i4 + (i32.add + (get_local $i14) + (get_local $i2) + ) + ) + (i32.store + (i32.add + (get_local $i4) + (i32.const 4) + ) + (i32.or + (get_local $i8) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i4) + (get_local $i8) + ) + (get_local $i8) + ) + (if + (get_local $i18) + (block + (set_local $i7 + (i32.load + (i32.const 196) + ) + ) + (set_local $i16 + (i32.shr_u + (get_local $i18) + (i32.const 3) + ) + ) + (set_local $i15 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i16) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i3 + (i32.load + (i32.const 176) + ) + ) + (set_local $i5 + (i32.shl + (i32.const 1) + (get_local $i16) + ) + ) + (if + (i32.and + (get_local $i3) + (get_local $i5) + ) + (block + (set_local $i16 + (i32.add + (get_local $i15) + (i32.const 8) + ) + ) + (set_local $i10 + (i32.load + (get_local $i16) + ) + ) + (if + (i32.lt_u + (get_local $i10) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $i19 + (get_local $i16) + ) + (set_local $i20 + (get_local $i10) + ) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i3) + (get_local $i5) + ) + ) + (set_local $i19 + (i32.add + (get_local $i15) + (i32.const 8) + ) + ) + (set_local $i20 + (get_local $i15) + ) + ) + ) + (i32.store + (get_local $i19) + (get_local $i7) + ) + (i32.store + (i32.add + (get_local $i20) + (i32.const 12) + ) + (get_local $i7) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 8) + ) + (get_local $i20) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 12) + ) + (get_local $i15) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $i8) + ) + (i32.store + (i32.const 196) + (get_local $i4) + ) + (set_local $i13 + (get_local $i12) + ) + (return + (get_local $i13) + ) + ) + ) + (set_local $i4 + (i32.load + (i32.const 180) + ) + ) + (if + (get_local $i4) + (block + (set_local $i8 + (i32.add + (i32.and + (get_local $i4) + (i32.sub + (i32.const 0) + (get_local $i4) + ) + ) + (i32.const -1) + ) + ) + (set_local $i4 + (i32.and + (i32.shr_u + (get_local $i8) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $i15 + (i32.shr_u + (get_local $i8) + (get_local $i4) + ) + ) + (set_local $i8 + (i32.and + (i32.shr_u + (get_local $i15) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $i7 + (i32.shr_u + (get_local $i15) + (get_local $i8) + ) + ) + (set_local $i15 + (i32.and + (i32.shr_u + (get_local $i7) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $i5 + (i32.shr_u + (get_local $i7) + (get_local $i15) + ) + ) + (set_local $i7 + (i32.and + (i32.shr_u + (get_local $i5) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $i3 + (i32.shr_u + (get_local $i5) + (get_local $i7) + ) + ) + (set_local $i5 + (i32.and + (i32.shr_u + (get_local $i3) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $i10 + (i32.load + (i32.add + (i32.const 480) + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $i8) + (get_local $i4) + ) + (get_local $i15) + ) + (get_local $i7) + ) + (get_local $i5) + ) + (i32.shr_u + (get_local $i3) + (get_local $i5) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $i5 + (i32.sub + (i32.and + (i32.load + (i32.add + (get_local $i10) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i2) + ) + ) + (set_local $i3 + (get_local $i10) + ) + (set_local $i7 + (get_local $i10) + ) + (loop $while-in + (block $while-out + (set_local $i10 + (i32.load + (i32.add + (get_local $i3) + (i32.const 16) + ) + ) + ) + (if + (i32.eqz + (get_local $i10) + ) + (block + (set_local $i15 + (i32.load + (i32.add + (get_local $i3) + (i32.const 20) + ) + ) + ) + (if + (i32.eqz + (get_local $i15) + ) + (block + (set_local $i21 + (get_local $i5) + ) + (set_local $i22 + (get_local $i7) + ) + (br $while-out) + ) + (set_local $i23 + (get_local $i15) + ) + ) + ) + (set_local $i23 + (get_local $i10) + ) + ) + (set_local $i10 + (i32.sub + (i32.and + (i32.load + (i32.add + (get_local $i23) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i2) + ) + ) + (set_local $i15 + (i32.lt_u + (get_local $i10) + (get_local $i5) + ) + ) + (set_local $i5 + (if (result i32) + (get_local $i15) + (get_local $i10) + (get_local $i5) + ) + ) + (set_local $i3 + (get_local $i23) + ) + (set_local $i7 + (if (result i32) + (get_local $i15) + (get_local $i23) + (get_local $i7) + ) + ) + (br $while-in) + ) + ) + (set_local $i7 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i22) + (get_local $i7) + ) + (call $_abort) + ) + (set_local $i3 + (i32.add + (get_local $i22) + (get_local $i2) + ) + ) + (if + (i32.ge_u + (get_local $i22) + (get_local $i3) + ) + (call $_abort) + ) + (set_local $i5 + (i32.load + (i32.add + (get_local $i22) + (i32.const 24) + ) + ) + ) + (set_local $i12 + (i32.load + (i32.add + (get_local $i22) + (i32.const 12) + ) + ) + ) + (block $do-once4 + (if + (i32.eq + (get_local $i12) + (get_local $i22) + ) + (block + (set_local $i14 + (i32.add + (get_local $i22) + (i32.const 20) + ) + ) + (set_local $i17 + (i32.load + (get_local $i14) + ) + ) + (if + (i32.eqz + (get_local $i17) + ) + (block + (set_local $i15 + (i32.add + (get_local $i22) + (i32.const 16) + ) + ) + (set_local $i10 + (i32.load + (get_local $i15) + ) + ) + (if + (i32.eqz + (get_local $i10) + ) + (block + (set_local $i24 + (i32.const 0) + ) + (br $do-once4) + ) + (block + (set_local $i25 + (get_local $i10) + ) + (set_local $i26 + (get_local $i15) + ) + ) + ) + ) + (block + (set_local $i25 + (get_local $i17) + ) + (set_local $i26 + (get_local $i14) + ) + ) + ) + (loop $while-in7 + (block $while-out6 + (set_local $i14 + (i32.add + (get_local $i25) + (i32.const 20) + ) + ) + (set_local $i17 + (i32.load + (get_local $i14) + ) + ) + (if + (get_local $i17) + (block + (set_local $i25 + (get_local $i17) + ) + (set_local $i26 + (get_local $i14) + ) + (br $while-in7) + ) + ) + (set_local $i14 + (i32.add + (get_local $i25) + (i32.const 16) + ) + ) + (set_local $i17 + (i32.load + (get_local $i14) + ) + ) + (if + (i32.eqz + (get_local $i17) + ) + (block + (set_local $i27 + (get_local $i25) + ) + (set_local $i28 + (get_local $i26) + ) + (br $while-out6) + ) + (block + (set_local $i25 + (get_local $i17) + ) + (set_local $i26 + (get_local $i14) + ) + ) + ) + (br $while-in7) + ) + ) + (if + (i32.lt_u + (get_local $i28) + (get_local $i7) + ) + (call $_abort) + (block + (i32.store + (get_local $i28) + (i32.const 0) + ) + (set_local $i24 + (get_local $i27) + ) + (br $do-once4) + ) + ) + ) + (block + (set_local $i14 + (i32.load + (i32.add + (get_local $i22) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $i14) + (get_local $i7) + ) + (call $_abort) + ) + (set_local $i17 + (i32.add + (get_local $i14) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $i17) + ) + (get_local $i22) + ) + (call $_abort) + ) + (set_local $i15 + (i32.add + (get_local $i12) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i15) + ) + (get_local $i22) + ) + (block + (i32.store + (get_local $i17) + (get_local $i12) + ) + (i32.store + (get_local $i15) + (get_local $i14) + ) + (set_local $i24 + (get_local $i12) + ) + (br $do-once4) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once8 + (if + (get_local $i5) + (block + (set_local $i12 + (i32.load + (i32.add + (get_local $i22) + (i32.const 28) + ) + ) + ) + (set_local $i7 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i12) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $i22) + (i32.load + (get_local $i7) + ) + ) + (block + (i32.store + (get_local $i7) + (get_local $i24) + ) + (if + (i32.eqz + (get_local $i24) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i12) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $i5) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i12 + (i32.add + (get_local $i5) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i12) + ) + (get_local $i22) + ) + (i32.store + (get_local $i12) + (get_local $i24) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 20) + ) + (get_local $i24) + ) + ) + (if + (i32.eqz + (get_local $i24) + ) + (br $do-once8) + ) + ) + ) + (set_local $i12 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i24) + (get_local $i12) + ) + (call $_abort) + ) + (i32.store + (i32.add + (get_local $i24) + (i32.const 24) + ) + (get_local $i5) + ) + (set_local $i7 + (i32.load + (i32.add + (get_local $i22) + (i32.const 16) + ) + ) + ) + (block $do-once10 + (if + (get_local $i7) + (if + (i32.lt_u + (get_local $i7) + (get_local $i12) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i24) + (i32.const 16) + ) + (get_local $i7) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 24) + ) + (get_local $i24) + ) + (br $do-once10) + ) + ) + ) + ) + (set_local $i7 + (i32.load + (i32.add + (get_local $i22) + (i32.const 20) + ) + ) + ) + (if + (get_local $i7) + (if + (i32.lt_u + (get_local $i7) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i24) + (i32.const 20) + ) + (get_local $i7) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 24) + ) + (get_local $i24) + ) + (br $do-once8) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $i21) + (i32.const 16) + ) + (block + (set_local $i5 + (i32.add + (get_local $i21) + (get_local $i2) + ) + ) + (i32.store + (i32.add + (get_local $i22) + (i32.const 4) + ) + (i32.or + (get_local $i5) + (i32.const 3) + ) + ) + (set_local $i7 + (i32.add + (i32.add + (get_local $i22) + (get_local $i5) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $i7) + (i32.or + (i32.load + (get_local $i7) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store + (i32.add + (get_local $i22) + (i32.const 4) + ) + (i32.or + (get_local $i2) + (i32.const 3) + ) + ) + (i32.store + (i32.add + (get_local $i3) + (i32.const 4) + ) + (i32.or + (get_local $i21) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i3) + (get_local $i21) + ) + (get_local $i21) + ) + (set_local $i7 + (i32.load + (i32.const 184) + ) + ) + (if + (get_local $i7) + (block + (set_local $i5 + (i32.load + (i32.const 196) + ) + ) + (set_local $i12 + (i32.shr_u + (get_local $i7) + (i32.const 3) + ) + ) + (set_local $i7 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i12) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i14 + (i32.load + (i32.const 176) + ) + ) + (set_local $i15 + (i32.shl + (i32.const 1) + (get_local $i12) + ) + ) + (if + (i32.and + (get_local $i14) + (get_local $i15) + ) + (block + (set_local $i12 + (i32.add + (get_local $i7) + (i32.const 8) + ) + ) + (set_local $i17 + (i32.load + (get_local $i12) + ) + ) + (if + (i32.lt_u + (get_local $i17) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $i29 + (get_local $i12) + ) + (set_local $i30 + (get_local $i17) + ) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i14) + (get_local $i15) + ) + ) + (set_local $i29 + (i32.add + (get_local $i7) + (i32.const 8) + ) + ) + (set_local $i30 + (get_local $i7) + ) + ) + ) + (i32.store + (get_local $i29) + (get_local $i5) + ) + (i32.store + (i32.add + (get_local $i30) + (i32.const 12) + ) + (get_local $i5) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 8) + ) + (get_local $i30) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 12) + ) + (get_local $i7) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $i21) + ) + (i32.store + (i32.const 196) + (get_local $i3) + ) + ) + ) + (set_local $i13 + (i32.add + (get_local $i22) + (i32.const 8) + ) + ) + (return + (get_local $i13) + ) + ) + (set_local $i31 + (get_local $i2) + ) + ) + ) + (set_local $i31 + (get_local $i2) + ) + ) + ) + (if + (i32.le_u + (get_local $i1) + (i32.const -65) + ) + (block + (set_local $i7 + (i32.add + (get_local $i1) + (i32.const 11) + ) + ) + (set_local $i5 + (i32.and + (get_local $i7) + (i32.const -8) + ) + ) + (set_local $i15 + (i32.load + (i32.const 180) + ) + ) + (if + (get_local $i15) + (block + (set_local $i14 + (i32.sub + (i32.const 0) + (get_local $i5) + ) + ) + (set_local $i17 + (i32.shr_u + (get_local $i7) + (i32.const 8) + ) + ) + (if + (get_local $i17) + (if + (i32.gt_u + (get_local $i5) + (i32.const 16777215) + ) + (set_local $i32 + (i32.const 31) + ) + (block + (set_local $i7 + (i32.and + (i32.shr_u + (i32.add + (get_local $i17) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $i12 + (i32.shl + (get_local $i17) + (get_local $i7) + ) + ) + (set_local $i17 + (i32.and + (i32.shr_u + (i32.add + (get_local $i12) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $i10 + (i32.shl + (get_local $i12) + (get_local $i17) + ) + ) + (set_local $i12 + (i32.and + (i32.shr_u + (i32.add + (get_local $i10) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $i4 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $i17) + (get_local $i7) + ) + (get_local $i12) + ) + ) + (i32.shr_u + (i32.shl + (get_local $i10) + (get_local $i12) + ) + (i32.const 15) + ) + ) + ) + (set_local $i32 + (i32.or + (i32.and + (i32.shr_u + (get_local $i5) + (i32.add + (get_local $i4) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $i4) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i32 + (i32.const 0) + ) + ) + (set_local $i4 + (i32.load + (i32.add + (i32.const 480) + (i32.shl + (get_local $i32) + (i32.const 2) + ) + ) + ) + ) + (block $label$break$L123 + (if + (i32.eqz + (get_local $i4) + ) + (block + (set_local $i33 + (get_local $i14) + ) + (set_local $i34 + (i32.const 0) + ) + (set_local $i35 + (i32.const 0) + ) + (set_local $i36 + (i32.const 86) + ) + ) + (block + (set_local $i12 + (get_local $i14) + ) + (set_local $i10 + (i32.const 0) + ) + (set_local $i7 + (i32.shl + (get_local $i5) + (if (result i32) + (i32.eq + (get_local $i32) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $i32) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i17 + (get_local $i4) + ) + (set_local $i8 + (i32.const 0) + ) + (loop $while-in14 + (block $while-out13 + (set_local $i16 + (i32.and + (i32.load + (i32.add + (get_local $i17) + (i32.const 4) + ) + ) + (i32.const -8) + ) + ) + (set_local $i9 + (i32.sub + (get_local $i16) + (get_local $i5) + ) + ) + (if + (i32.lt_u + (get_local $i9) + (get_local $i12) + ) + (if + (i32.eq + (get_local $i16) + (get_local $i5) + ) + (block + (set_local $i37 + (get_local $i9) + ) + (set_local $i38 + (get_local $i17) + ) + (set_local $i39 + (get_local $i17) + ) + (set_local $i36 + (i32.const 90) + ) + (br $label$break$L123) + ) + (block + (set_local $i40 + (get_local $i9) + ) + (set_local $i41 + (get_local $i17) + ) + ) + ) + (block + (set_local $i40 + (get_local $i12) + ) + (set_local $i41 + (get_local $i8) + ) + ) + ) + (set_local $i9 + (i32.load + (i32.add + (get_local $i17) + (i32.const 20) + ) + ) + ) + (set_local $i17 + (i32.load + (i32.add + (i32.add + (get_local $i17) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $i7) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $i16 + (if (result i32) + (i32.or + (i32.eq + (get_local $i9) + (i32.const 0) + ) + (i32.eq + (get_local $i9) + (get_local $i17) + ) + ) + (get_local $i10) + (get_local $i9) + ) + ) + (set_local $i9 + (i32.eq + (get_local $i17) + (i32.const 0) + ) + ) + (if + (get_local $i9) + (block + (set_local $i33 + (get_local $i40) + ) + (set_local $i34 + (get_local $i16) + ) + (set_local $i35 + (get_local $i41) + ) + (set_local $i36 + (i32.const 86) + ) + (br $while-out13) + ) + (block + (set_local $i12 + (get_local $i40) + ) + (set_local $i10 + (get_local $i16) + ) + (set_local $i7 + (i32.shl + (get_local $i7) + (i32.xor + (i32.and + (get_local $i9) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (set_local $i8 + (get_local $i41) + ) + ) + ) + (br $while-in14) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 86) + ) + (block + (if + (i32.and + (i32.eq + (get_local $i34) + (i32.const 0) + ) + (i32.eq + (get_local $i35) + (i32.const 0) + ) + ) + (block + (set_local $i4 + (i32.shl + (i32.const 2) + (get_local $i32) + ) + ) + (set_local $i14 + (i32.and + (get_local $i15) + (i32.or + (get_local $i4) + (i32.sub + (i32.const 0) + (get_local $i4) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $i14) + ) + (block + (set_local $i31 + (get_local $i5) + ) + (br $do-once) + ) + ) + (set_local $i4 + (i32.add + (i32.and + (get_local $i14) + (i32.sub + (i32.const 0) + (get_local $i14) + ) + ) + (i32.const -1) + ) + ) + (set_local $i14 + (i32.and + (i32.shr_u + (get_local $i4) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $i2 + (i32.shr_u + (get_local $i4) + (get_local $i14) + ) + ) + (set_local $i4 + (i32.and + (i32.shr_u + (get_local $i2) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $i3 + (i32.shr_u + (get_local $i2) + (get_local $i4) + ) + ) + (set_local $i2 + (i32.and + (i32.shr_u + (get_local $i3) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $i8 + (i32.shr_u + (get_local $i3) + (get_local $i2) + ) + ) + (set_local $i3 + (i32.and + (i32.shr_u + (get_local $i8) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $i7 + (i32.shr_u + (get_local $i8) + (get_local $i3) + ) + ) + (set_local $i8 + (i32.and + (i32.shr_u + (get_local $i7) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $i42 + (i32.load + (i32.add + (i32.const 480) + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $i4) + (get_local $i14) + ) + (get_local $i2) + ) + (get_local $i3) + ) + (get_local $i8) + ) + (i32.shr_u + (get_local $i7) + (get_local $i8) + ) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (set_local $i42 + (get_local $i34) + ) + ) + (if + (i32.eqz + (get_local $i42) + ) + (block + (set_local $i43 + (get_local $i33) + ) + (set_local $i44 + (get_local $i35) + ) + ) + (block + (set_local $i37 + (get_local $i33) + ) + (set_local $i38 + (get_local $i42) + ) + (set_local $i39 + (get_local $i35) + ) + (set_local $i36 + (i32.const 90) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 90) + ) + (loop $while-in16 + (block $while-out15 + (set_local $i36 + (i32.const 0) + ) + (set_local $i8 + (i32.sub + (i32.and + (i32.load + (i32.add + (get_local $i38) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i5) + ) + ) + (set_local $i7 + (i32.lt_u + (get_local $i8) + (get_local $i37) + ) + ) + (set_local $i3 + (if (result i32) + (get_local $i7) + (get_local $i8) + (get_local $i37) + ) + ) + (set_local $i8 + (if (result i32) + (get_local $i7) + (get_local $i38) + (get_local $i39) + ) + ) + (set_local $i7 + (i32.load + (i32.add + (get_local $i38) + (i32.const 16) + ) + ) + ) + (if + (get_local $i7) + (block + (set_local $i37 + (get_local $i3) + ) + (set_local $i38 + (get_local $i7) + ) + (set_local $i39 + (get_local $i8) + ) + (set_local $i36 + (i32.const 90) + ) + (br $while-in16) + ) + ) + (set_local $i38 + (i32.load + (i32.add + (get_local $i38) + (i32.const 20) + ) + ) + ) + (if + (i32.eqz + (get_local $i38) + ) + (block + (set_local $i43 + (get_local $i3) + ) + (set_local $i44 + (get_local $i8) + ) + (br $while-out15) + ) + (block + (set_local $i37 + (get_local $i3) + ) + (set_local $i39 + (get_local $i8) + ) + (set_local $i36 + (i32.const 90) + ) + ) + ) + (br $while-in16) + ) + ) + ) + (if + (if (result i32) + (i32.ne + (get_local $i44) + (i32.const 0) + ) + (i32.lt_u + (get_local $i43) + (i32.sub + (i32.load + (i32.const 184) + ) + (get_local $i5) + ) + ) + (i32.const 0) + ) + (block + (set_local $i15 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i44) + (get_local $i15) + ) + (call $_abort) + ) + (set_local $i8 + (i32.add + (get_local $i44) + (get_local $i5) + ) + ) + (if + (i32.ge_u + (get_local $i44) + (get_local $i8) + ) + (call $_abort) + ) + (set_local $i3 + (i32.load + (i32.add + (get_local $i44) + (i32.const 24) + ) + ) + ) + (set_local $i7 + (i32.load + (i32.add + (get_local $i44) + (i32.const 12) + ) + ) + ) + (block $do-once17 + (if + (i32.eq + (get_local $i7) + (get_local $i44) + ) + (block + (set_local $i2 + (i32.add + (get_local $i44) + (i32.const 20) + ) + ) + (set_local $i14 + (i32.load + (get_local $i2) + ) + ) + (if + (i32.eqz + (get_local $i14) + ) + (block + (set_local $i4 + (i32.add + (get_local $i44) + (i32.const 16) + ) + ) + (set_local $i10 + (i32.load + (get_local $i4) + ) + ) + (if + (i32.eqz + (get_local $i10) + ) + (block + (set_local $i45 + (i32.const 0) + ) + (br $do-once17) + ) + (block + (set_local $i46 + (get_local $i10) + ) + (set_local $i47 + (get_local $i4) + ) + ) + ) + ) + (block + (set_local $i46 + (get_local $i14) + ) + (set_local $i47 + (get_local $i2) + ) + ) + ) + (loop $while-in20 + (block $while-out19 + (set_local $i2 + (i32.add + (get_local $i46) + (i32.const 20) + ) + ) + (set_local $i14 + (i32.load + (get_local $i2) + ) + ) + (if + (get_local $i14) + (block + (set_local $i46 + (get_local $i14) + ) + (set_local $i47 + (get_local $i2) + ) + (br $while-in20) + ) + ) + (set_local $i2 + (i32.add + (get_local $i46) + (i32.const 16) + ) + ) + (set_local $i14 + (i32.load + (get_local $i2) + ) + ) + (if + (i32.eqz + (get_local $i14) + ) + (block + (set_local $i48 + (get_local $i46) + ) + (set_local $i49 + (get_local $i47) + ) + (br $while-out19) + ) + (block + (set_local $i46 + (get_local $i14) + ) + (set_local $i47 + (get_local $i2) + ) + ) + ) + (br $while-in20) + ) + ) + (if + (i32.lt_u + (get_local $i49) + (get_local $i15) + ) + (call $_abort) + (block + (i32.store + (get_local $i49) + (i32.const 0) + ) + (set_local $i45 + (get_local $i48) + ) + (br $do-once17) + ) + ) + ) + (block + (set_local $i2 + (i32.load + (i32.add + (get_local $i44) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $i2) + (get_local $i15) + ) + (call $_abort) + ) + (set_local $i14 + (i32.add + (get_local $i2) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $i14) + ) + (get_local $i44) + ) + (call $_abort) + ) + (set_local $i4 + (i32.add + (get_local $i7) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i4) + ) + (get_local $i44) + ) + (block + (i32.store + (get_local $i14) + (get_local $i7) + ) + (i32.store + (get_local $i4) + (get_local $i2) + ) + (set_local $i45 + (get_local $i7) + ) + (br $do-once17) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once21 + (if + (get_local $i3) + (block + (set_local $i7 + (i32.load + (i32.add + (get_local $i44) + (i32.const 28) + ) + ) + ) + (set_local $i15 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i7) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $i44) + (i32.load + (get_local $i15) + ) + ) + (block + (i32.store + (get_local $i15) + (get_local $i45) + ) + (if + (i32.eqz + (get_local $i45) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i7) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $i3) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i7 + (i32.add + (get_local $i3) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i7) + ) + (get_local $i44) + ) + (i32.store + (get_local $i7) + (get_local $i45) + ) + (i32.store + (i32.add + (get_local $i3) + (i32.const 20) + ) + (get_local $i45) + ) + ) + (if + (i32.eqz + (get_local $i45) + ) + (br $do-once21) + ) + ) + ) + (set_local $i7 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i45) + (get_local $i7) + ) + (call $_abort) + ) + (i32.store + (i32.add + (get_local $i45) + (i32.const 24) + ) + (get_local $i3) + ) + (set_local $i15 + (i32.load + (i32.add + (get_local $i44) + (i32.const 16) + ) + ) + ) + (block $do-once23 + (if + (get_local $i15) + (if + (i32.lt_u + (get_local $i15) + (get_local $i7) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i45) + (i32.const 16) + ) + (get_local $i15) + ) + (i32.store + (i32.add + (get_local $i15) + (i32.const 24) + ) + (get_local $i45) + ) + (br $do-once23) + ) + ) + ) + ) + (set_local $i15 + (i32.load + (i32.add + (get_local $i44) + (i32.const 20) + ) + ) + ) + (if + (get_local $i15) + (if + (i32.lt_u + (get_local $i15) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i45) + (i32.const 20) + ) + (get_local $i15) + ) + (i32.store + (i32.add + (get_local $i15) + (i32.const 24) + ) + (get_local $i45) + ) + (br $do-once21) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.ge_u + (get_local $i43) + (i32.const 16) + ) + (block + (i32.store + (i32.add + (get_local $i44) + (i32.const 4) + ) + (i32.or + (get_local $i5) + (i32.const 3) + ) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 4) + ) + (i32.or + (get_local $i43) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i8) + (get_local $i43) + ) + (get_local $i43) + ) + (set_local $i3 + (i32.shr_u + (get_local $i43) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $i43) + (i32.const 256) + ) + (block + (set_local $i15 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i3) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i7 + (i32.load + (i32.const 176) + ) + ) + (set_local $i2 + (i32.shl + (i32.const 1) + (get_local $i3) + ) + ) + (if + (i32.and + (get_local $i7) + (get_local $i2) + ) + (block + (set_local $i3 + (i32.add + (get_local $i15) + (i32.const 8) + ) + ) + (set_local $i4 + (i32.load + (get_local $i3) + ) + ) + (if + (i32.lt_u + (get_local $i4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $i50 + (get_local $i3) + ) + (set_local $i51 + (get_local $i4) + ) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i7) + (get_local $i2) + ) + ) + (set_local $i50 + (i32.add + (get_local $i15) + (i32.const 8) + ) + ) + (set_local $i51 + (get_local $i15) + ) + ) + ) + (i32.store + (get_local $i50) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i51) + (i32.const 12) + ) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 8) + ) + (get_local $i51) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 12) + ) + (get_local $i15) + ) + (br $do-once25) + ) + ) + (set_local $i15 + (i32.shr_u + (get_local $i43) + (i32.const 8) + ) + ) + (if + (get_local $i15) + (if + (i32.gt_u + (get_local $i43) + (i32.const 16777215) + ) + (set_local $i52 + (i32.const 31) + ) + (block + (set_local $i2 + (i32.and + (i32.shr_u + (i32.add + (get_local $i15) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $i7 + (i32.shl + (get_local $i15) + (get_local $i2) + ) + ) + (set_local $i15 + (i32.and + (i32.shr_u + (i32.add + (get_local $i7) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $i4 + (i32.shl + (get_local $i7) + (get_local $i15) + ) + ) + (set_local $i7 + (i32.and + (i32.shr_u + (i32.add + (get_local $i4) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $i3 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $i15) + (get_local $i2) + ) + (get_local $i7) + ) + ) + (i32.shr_u + (i32.shl + (get_local $i4) + (get_local $i7) + ) + (i32.const 15) + ) + ) + ) + (set_local $i52 + (i32.or + (i32.and + (i32.shr_u + (get_local $i43) + (i32.add + (get_local $i3) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $i3) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i52 + (i32.const 0) + ) + ) + (set_local $i3 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i52) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 28) + ) + (get_local $i52) + ) + (set_local $i7 + (i32.add + (get_local $i8) + (i32.const 16) + ) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store + (get_local $i7) + (i32.const 0) + ) + (set_local $i7 + (i32.load + (i32.const 180) + ) + ) + (set_local $i4 + (i32.shl + (i32.const 1) + (get_local $i52) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $i7) + (get_local $i4) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $i7) + (get_local $i4) + ) + ) + (i32.store + (get_local $i3) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 24) + ) + (get_local $i3) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 12) + ) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 8) + ) + (get_local $i8) + ) + (br $do-once25) + ) + ) + (set_local $i4 + (i32.shl + (get_local $i43) + (if (result i32) + (i32.eq + (get_local $i52) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $i52) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i7 + (i32.load + (get_local $i3) + ) + ) + (loop $while-in28 + (block $while-out27 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $i7) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i43) + ) + (block + (set_local $i53 + (get_local $i7) + ) + (set_local $i36 + (i32.const 148) + ) + (br $while-out27) + ) + ) + (set_local $i3 + (i32.add + (i32.add + (get_local $i7) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $i4) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $i2 + (i32.load + (get_local $i3) + ) + ) + (if + (i32.eqz + (get_local $i2) + ) + (block + (set_local $i54 + (get_local $i3) + ) + (set_local $i55 + (get_local $i7) + ) + (set_local $i36 + (i32.const 145) + ) + (br $while-out27) + ) + (block + (set_local $i4 + (i32.shl + (get_local $i4) + (i32.const 1) + ) + ) + (set_local $i7 + (get_local $i2) + ) + ) + ) + (br $while-in28) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 145) + ) + (if + (i32.lt_u + (get_local $i54) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $i54) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 24) + ) + (get_local $i55) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 12) + ) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 8) + ) + (get_local $i8) + ) + (br $do-once25) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 148) + ) + (block + (set_local $i7 + (i32.add + (get_local $i53) + (i32.const 8) + ) + ) + (set_local $i4 + (i32.load + (get_local $i7) + ) + ) + (set_local $i2 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $i4) + (get_local $i2) + ) + (i32.ge_u + (get_local $i53) + (get_local $i2) + ) + ) + (block + (i32.store + (i32.add + (get_local $i4) + (i32.const 12) + ) + (get_local $i8) + ) + (i32.store + (get_local $i7) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 8) + ) + (get_local $i4) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 12) + ) + (get_local $i53) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once25) + ) + (call $_abort) + ) + ) + ) + ) + ) + (block + (set_local $i4 + (i32.add + (get_local $i43) + (get_local $i5) + ) + ) + (i32.store + (i32.add + (get_local $i44) + (i32.const 4) + ) + (i32.or + (get_local $i4) + (i32.const 3) + ) + ) + (set_local $i7 + (i32.add + (i32.add + (get_local $i44) + (get_local $i4) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $i7) + (i32.or + (i32.load + (get_local $i7) + ) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i13 + (i32.add + (get_local $i44) + (i32.const 8) + ) + ) + (return + (get_local $i13) + ) + ) + (set_local $i31 + (get_local $i5) + ) + ) + ) + (set_local $i31 + (get_local $i5) + ) + ) + ) + (set_local $i31 + (i32.const -1) + ) + ) + ) + ) + (set_local $i44 + (i32.load + (i32.const 184) + ) + ) + (if + (i32.ge_u + (get_local $i44) + (get_local $i31) + ) + (block + (set_local $i43 + (i32.sub + (get_local $i44) + (get_local $i31) + ) + ) + (set_local $i53 + (i32.load + (i32.const 196) + ) + ) + (if + (i32.gt_u + (get_local $i43) + (i32.const 15) + ) + (block + (set_local $i55 + (i32.add + (get_local $i53) + (get_local $i31) + ) + ) + (i32.store + (i32.const 196) + (get_local $i55) + ) + (i32.store + (i32.const 184) + (get_local $i43) + ) + (i32.store + (i32.add + (get_local $i55) + (i32.const 4) + ) + (i32.or + (get_local $i43) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i55) + (get_local $i43) + ) + (get_local $i43) + ) + (i32.store + (i32.add + (get_local $i53) + (i32.const 4) + ) + (i32.or + (get_local $i31) + (i32.const 3) + ) + ) + ) + (block + (i32.store + (i32.const 184) + (i32.const 0) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $i53) + (i32.const 4) + ) + (i32.or + (get_local $i44) + (i32.const 3) + ) + ) + (set_local $i43 + (i32.add + (i32.add + (get_local $i53) + (get_local $i44) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $i43) + (i32.or + (i32.load + (get_local $i43) + ) + (i32.const 1) + ) + ) + ) + ) + (set_local $i13 + (i32.add + (get_local $i53) + (i32.const 8) + ) + ) + (return + (get_local $i13) + ) + ) + ) + (set_local $i53 + (i32.load + (i32.const 188) + ) + ) + (if + (i32.gt_u + (get_local $i53) + (get_local $i31) + ) + (block + (set_local $i43 + (i32.sub + (get_local $i53) + (get_local $i31) + ) + ) + (i32.store + (i32.const 188) + (get_local $i43) + ) + (set_local $i53 + (i32.load + (i32.const 200) + ) + ) + (set_local $i44 + (i32.add + (get_local $i53) + (get_local $i31) + ) + ) + (i32.store + (i32.const 200) + (get_local $i44) + ) + (i32.store + (i32.add + (get_local $i44) + (i32.const 4) + ) + (i32.or + (get_local $i43) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i53) + (i32.const 4) + ) + (i32.or + (get_local $i31) + (i32.const 3) + ) + ) + (set_local $i13 + (i32.add + (get_local $i53) + (i32.const 8) + ) + ) + (return + (get_local $i13) + ) + ) + ) + (block $do-once29 + (if + (i32.eqz + (i32.load + (i32.const 648) + ) + ) + (block + (set_local $i53 + (call $_sysconf + (i32.const 30) + ) + ) + (if + (i32.eqz + (i32.and + (i32.add + (get_local $i53) + (i32.const -1) + ) + (get_local $i53) + ) + ) + (block + (i32.store + (i32.const 656) + (get_local $i53) + ) + (i32.store + (i32.const 652) + (get_local $i53) + ) + (i32.store + (i32.const 660) + (i32.const -1) + ) + (i32.store + (i32.const 664) + (i32.const -1) + ) + (i32.store + (i32.const 668) + (i32.const 0) + ) + (i32.store + (i32.const 620) + (i32.const 0) + ) + (i32.store + (i32.const 648) + (i32.xor + (i32.and + (call $_time + (i32.const 0) + ) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + (br $do-once29) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $i53 + (i32.add + (get_local $i31) + (i32.const 48) + ) + ) + (set_local $i43 + (i32.load + (i32.const 656) + ) + ) + (set_local $i44 + (i32.add + (get_local $i31) + (i32.const 47) + ) + ) + (set_local $i55 + (i32.add + (get_local $i43) + (get_local $i44) + ) + ) + (set_local $i54 + (i32.sub + (i32.const 0) + (get_local $i43) + ) + ) + (set_local $i43 + (i32.and + (get_local $i55) + (get_local $i54) + ) + ) + (if + (i32.le_u + (get_local $i43) + (get_local $i31) + ) + (block + (set_local $i13 + (i32.const 0) + ) + (return + (get_local $i13) + ) + ) + ) + (set_local $i52 + (i32.load + (i32.const 616) + ) + ) + (if + (if (result i32) + (i32.ne + (get_local $i52) + (i32.const 0) + ) + (block (result i32) + (set_local $i51 + (i32.load + (i32.const 608) + ) + ) + (block (result i32) + (set_local $i50 + (i32.add + (get_local $i51) + (get_local $i43) + ) + ) + (i32.or + (i32.le_u + (get_local $i50) + (get_local $i51) + ) + (i32.gt_u + (get_local $i50) + (get_local $i52) + ) + ) + ) + ) + (i32.const 0) + ) + (block + (set_local $i13 + (i32.const 0) + ) + (return + (get_local $i13) + ) + ) + ) + (block $label$break$L257 + (if + (i32.eqz + (i32.and + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + ) + (block + (set_local $i52 + (i32.load + (i32.const 200) + ) + ) + (block $label$break$L259 + (if + (get_local $i52) + (block + (set_local $i50 + (i32.const 624) + ) + (loop $while-in34 + (block $while-out33 + (set_local $i51 + (i32.load + (get_local $i50) + ) + ) + (if + (if (result i32) + (i32.le_u + (get_local $i51) + (get_local $i52) + ) + (block (result i32) + (set_local $i45 + (i32.add + (get_local $i50) + (i32.const 4) + ) + ) + (i32.gt_u + (i32.add + (get_local $i51) + (i32.load + (get_local $i45) + ) + ) + (get_local $i52) + ) + ) + (i32.const 0) + ) + (block + (set_local $i56 + (get_local $i50) + ) + (set_local $i57 + (get_local $i45) + ) + (br $while-out33) + ) + ) + (set_local $i50 + (i32.load + (i32.add + (get_local $i50) + (i32.const 8) + ) + ) + ) + (if + (i32.eqz + (get_local $i50) + ) + (block + (set_local $i36 + (i32.const 173) + ) + (br $label$break$L259) + ) + ) + (br $while-in34) + ) + ) + (set_local $i50 + (i32.and + (i32.sub + (get_local $i55) + (i32.load + (i32.const 188) + ) + ) + (get_local $i54) + ) + ) + (if + (i32.lt_u + (get_local $i50) + (i32.const 2147483647) + ) + (block + (set_local $i45 + (call $_sbrk + (get_local $i50) + ) + ) + (if + (i32.eq + (get_local $i45) + (i32.add + (i32.load + (get_local $i56) + ) + (i32.load + (get_local $i57) + ) + ) + ) + (if + (i32.ne + (get_local $i45) + (i32.const -1) + ) + (block + (set_local $i58 + (get_local $i45) + ) + (set_local $i59 + (get_local $i50) + ) + (set_local $i36 + (i32.const 193) + ) + (br $label$break$L257) + ) + ) + (block + (set_local $i60 + (get_local $i45) + ) + (set_local $i61 + (get_local $i50) + ) + (set_local $i36 + (i32.const 183) + ) + ) + ) + ) + ) + ) + (set_local $i36 + (i32.const 173) + ) + ) + ) + (block $do-once35 + (if + (if (result i32) + (i32.eq + (get_local $i36) + (i32.const 173) + ) + (block (result i32) + (set_local $i52 + (call $_sbrk + (i32.const 0) + ) + ) + (i32.ne + (get_local $i52) + (i32.const -1) + ) + ) + (i32.const 0) + ) + (block + (set_local $i5 + (get_local $i52) + ) + (set_local $i50 + (i32.load + (i32.const 652) + ) + ) + (set_local $i45 + (i32.add + (get_local $i50) + (i32.const -1) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $i45) + (get_local $i5) + ) + ) + (set_local $i62 + (get_local $i43) + ) + (set_local $i62 + (i32.add + (i32.sub + (get_local $i43) + (get_local $i5) + ) + (i32.and + (i32.add + (get_local $i45) + (get_local $i5) + ) + (i32.sub + (i32.const 0) + (get_local $i50) + ) + ) + ) + ) + ) + (set_local $i50 + (i32.load + (i32.const 608) + ) + ) + (set_local $i5 + (i32.add + (get_local $i50) + (get_local $i62) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $i62) + (get_local $i31) + ) + (i32.lt_u + (get_local $i62) + (i32.const 2147483647) + ) + ) + (block + (set_local $i45 + (i32.load + (i32.const 616) + ) + ) + (if + (if (result i32) + (i32.ne + (get_local $i45) + (i32.const 0) + ) + (i32.or + (i32.le_u + (get_local $i5) + (get_local $i50) + ) + (i32.gt_u + (get_local $i5) + (get_local $i45) + ) + ) + (i32.const 0) + ) + (br $do-once35) + ) + (set_local $i45 + (call $_sbrk + (get_local $i62) + ) + ) + (if + (i32.eq + (get_local $i45) + (get_local $i52) + ) + (block + (set_local $i58 + (get_local $i52) + ) + (set_local $i59 + (get_local $i62) + ) + (set_local $i36 + (i32.const 193) + ) + (br $label$break$L257) + ) + (block + (set_local $i60 + (get_local $i45) + ) + (set_local $i61 + (get_local $i62) + ) + (set_local $i36 + (i32.const 183) + ) + ) + ) + ) + ) + ) + ) + ) + (block $label$break$L279 + (if + (i32.eq + (get_local $i36) + (i32.const 183) + ) + (block + (set_local $i45 + (i32.sub + (i32.const 0) + (get_local $i61) + ) + ) + (block $do-once38 + (if + (if (result i32) + (i32.and + (i32.gt_u + (get_local $i53) + (get_local $i61) + ) + (i32.and + (i32.lt_u + (get_local $i61) + (i32.const 2147483647) + ) + (i32.ne + (get_local $i60) + (i32.const -1) + ) + ) + ) + (block (result i32) + (set_local $i52 + (i32.load + (i32.const 656) + ) + ) + (block (result i32) + (set_local $i5 + (i32.and + (i32.add + (i32.sub + (get_local $i44) + (get_local $i61) + ) + (get_local $i52) + ) + (i32.sub + (i32.const 0) + (get_local $i52) + ) + ) + ) + (i32.lt_u + (get_local $i5) + (i32.const 2147483647) + ) + ) + ) + (i32.const 0) + ) + (if + (i32.eq + (call $_sbrk + (get_local $i5) + ) + (i32.const -1) + ) + (block + (drop + (call $_sbrk + (get_local $i45) + ) + ) + (br $label$break$L279) + ) + (block + (set_local $i63 + (i32.add + (get_local $i5) + (get_local $i61) + ) + ) + (br $do-once38) + ) + ) + (set_local $i63 + (get_local $i61) + ) + ) + ) + (if + (i32.ne + (get_local $i60) + (i32.const -1) + ) + (block + (set_local $i58 + (get_local $i60) + ) + (set_local $i59 + (get_local $i63) + ) + (set_local $i36 + (i32.const 193) + ) + (br $label$break$L257) + ) + ) + ) + ) + ) + (i32.store + (i32.const 620) + (i32.or + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + ) + (set_local $i36 + (i32.const 190) + ) + ) + (set_local $i36 + (i32.const 190) + ) + ) + ) + (if + (if (result i32) + (if (result i32) + (if (result i32) + (i32.eq + (get_local $i36) + (i32.const 190) + ) + (i32.lt_u + (get_local $i43) + (i32.const 2147483647) + ) + (i32.const 0) + ) + (block (result i32) + (set_local $i63 + (call $_sbrk + (get_local $i43) + ) + ) + (block (result i32) + (set_local $i43 + (call $_sbrk + (i32.const 0) + ) + ) + (i32.and + (i32.lt_u + (get_local $i63) + (get_local $i43) + ) + (i32.and + (i32.ne + (get_local $i63) + (i32.const -1) + ) + (i32.ne + (get_local $i43) + (i32.const -1) + ) + ) + ) + ) + ) + (i32.const 0) + ) + (block (result i32) + (set_local $i60 + (i32.sub + (get_local $i43) + (get_local $i63) + ) + ) + (i32.gt_u + (get_local $i60) + (i32.add + (get_local $i31) + (i32.const 40) + ) + ) + ) + (i32.const 0) + ) + (block + (set_local $i58 + (get_local $i63) + ) + (set_local $i59 + (get_local $i60) + ) + (set_local $i36 + (i32.const 193) + ) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 193) + ) + (block + (set_local $i60 + (i32.add + (i32.load + (i32.const 608) + ) + (get_local $i59) + ) + ) + (i32.store + (i32.const 608) + (get_local $i60) + ) + (if + (i32.gt_u + (get_local $i60) + (i32.load + (i32.const 612) + ) + ) + (i32.store + (i32.const 612) + (get_local $i60) + ) + ) + (set_local $i60 + (i32.load + (i32.const 200) + ) + ) + (block $do-once40 + (if + (get_local $i60) + (block + (set_local $i63 + (i32.const 624) + ) + (loop $do-in + (block $do-out + (set_local $i43 + (i32.load + (get_local $i63) + ) + ) + (set_local $i61 + (i32.add + (get_local $i63) + (i32.const 4) + ) + ) + (set_local $i44 + (i32.load + (get_local $i61) + ) + ) + (if + (i32.eq + (get_local $i58) + (i32.add + (get_local $i43) + (get_local $i44) + ) + ) + (block + (set_local $i64 + (get_local $i43) + ) + (set_local $i65 + (get_local $i61) + ) + (set_local $i66 + (get_local $i44) + ) + (set_local $i67 + (get_local $i63) + ) + (set_local $i36 + (i32.const 203) + ) + (br $do-out) + ) + ) + (set_local $i63 + (i32.load + (i32.add + (get_local $i63) + (i32.const 8) + ) + ) + ) + (br_if $do-in + (i32.ne + (get_local $i63) + (i32.const 0) + ) + ) + ) + ) + (if + (if (result i32) + (if (result i32) + (i32.eq + (get_local $i36) + (i32.const 203) + ) + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $i67) + (i32.const 12) + ) + ) + (i32.const 8) + ) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.and + (i32.lt_u + (get_local $i60) + (get_local $i58) + ) + (i32.ge_u + (get_local $i60) + (get_local $i64) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $i65) + (i32.add + (get_local $i66) + (get_local $i59) + ) + ) + (set_local $i63 + (i32.add + (get_local $i60) + (i32.const 8) + ) + ) + (set_local $i44 + (if (result i32) + (i32.eq + (i32.and + (get_local $i63) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $i63) + ) + (i32.const 7) + ) + ) + ) + (set_local $i63 + (i32.add + (get_local $i60) + (get_local $i44) + ) + ) + (set_local $i61 + (i32.add + (i32.sub + (get_local $i59) + (get_local $i44) + ) + (i32.load + (i32.const 188) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $i63) + ) + (i32.store + (i32.const 188) + (get_local $i61) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 4) + ) + (i32.or + (get_local $i61) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $i63) + (get_local $i61) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (br $do-once40) + ) + ) + (set_local $i61 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i58) + (get_local $i61) + ) + (block + (i32.store + (i32.const 192) + (get_local $i58) + ) + (set_local $i68 + (get_local $i58) + ) + ) + (set_local $i68 + (get_local $i61) + ) + ) + (set_local $i61 + (i32.add + (get_local $i58) + (get_local $i59) + ) + ) + (set_local $i63 + (i32.const 624) + ) + (loop $while-in43 + (block $while-out42 + (if + (i32.eq + (i32.load + (get_local $i63) + ) + (get_local $i61) + ) + (block + (set_local $i69 + (get_local $i63) + ) + (set_local $i70 + (get_local $i63) + ) + (set_local $i36 + (i32.const 211) + ) + (br $while-out42) + ) + ) + (set_local $i63 + (i32.load + (i32.add + (get_local $i63) + (i32.const 8) + ) + ) + ) + (if + (i32.eqz + (get_local $i63) + ) + (block + (set_local $i71 + (i32.const 624) + ) + (br $while-out42) + ) + ) + (br $while-in43) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 211) + ) + (if + (i32.eqz + (i32.and + (i32.load + (i32.add + (get_local $i70) + (i32.const 12) + ) + ) + (i32.const 8) + ) + ) + (block + (i32.store + (get_local $i69) + (get_local $i58) + ) + (set_local $i63 + (i32.add + (get_local $i70) + (i32.const 4) + ) + ) + (i32.store + (get_local $i63) + (i32.add + (i32.load + (get_local $i63) + ) + (get_local $i59) + ) + ) + (set_local $i63 + (i32.add + (get_local $i58) + (i32.const 8) + ) + ) + (set_local $i44 + (i32.add + (get_local $i58) + (if (result i32) + (i32.eq + (i32.and + (get_local $i63) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $i63) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $i63 + (i32.add + (get_local $i61) + (i32.const 8) + ) + ) + (set_local $i43 + (i32.add + (get_local $i61) + (if (result i32) + (i32.eq + (i32.and + (get_local $i63) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $i63) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $i63 + (i32.add + (get_local $i44) + (get_local $i31) + ) + ) + (set_local $i53 + (i32.sub + (i32.sub + (get_local $i43) + (get_local $i44) + ) + (get_local $i31) + ) + ) + (i32.store + (i32.add + (get_local $i44) + (i32.const 4) + ) + (i32.or + (get_local $i31) + (i32.const 3) + ) + ) + (block $do-once44 + (if + (i32.ne + (get_local $i43) + (get_local $i60) + ) + (block + (if + (i32.eq + (get_local $i43) + (i32.load + (i32.const 196) + ) + ) + (block + (set_local $i62 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $i53) + ) + ) + (i32.store + (i32.const 184) + (get_local $i62) + ) + (i32.store + (i32.const 196) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 4) + ) + (i32.or + (get_local $i62) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (get_local $i62) + ) + (get_local $i62) + ) + (br $do-once44) + ) + ) + (set_local $i62 + (i32.load + (i32.add + (get_local $i43) + (i32.const 4) + ) + ) + ) + (if + (i32.eq + (i32.and + (get_local $i62) + (i32.const 3) + ) + (i32.const 1) + ) + (block + (set_local $i57 + (i32.and + (get_local $i62) + (i32.const -8) + ) + ) + (set_local $i56 + (i32.shr_u + (get_local $i62) + (i32.const 3) + ) + ) + (block $label$break$L331 + (if + (i32.ge_u + (get_local $i62) + (i32.const 256) + ) + (block + (set_local $i54 + (i32.load + (i32.add + (get_local $i43) + (i32.const 24) + ) + ) + ) + (set_local $i55 + (i32.load + (i32.add + (get_local $i43) + (i32.const 12) + ) + ) + ) + (block $do-once47 + (if + (i32.eq + (get_local $i55) + (get_local $i43) + ) + (block + (set_local $i45 + (i32.add + (get_local $i43) + (i32.const 16) + ) + ) + (set_local $i5 + (i32.add + (get_local $i45) + (i32.const 4) + ) + ) + (set_local $i52 + (i32.load + (get_local $i5) + ) + ) + (if + (i32.eqz + (get_local $i52) + ) + (block + (set_local $i50 + (i32.load + (get_local $i45) + ) + ) + (if + (i32.eqz + (get_local $i50) + ) + (block + (set_local $i72 + (i32.const 0) + ) + (br $do-once47) + ) + (block + (set_local $i73 + (get_local $i50) + ) + (set_local $i74 + (get_local $i45) + ) + ) + ) + ) + (block + (set_local $i73 + (get_local $i52) + ) + (set_local $i74 + (get_local $i5) + ) + ) + ) + (loop $while-in50 + (block $while-out49 + (set_local $i5 + (i32.add + (get_local $i73) + (i32.const 20) + ) + ) + (set_local $i52 + (i32.load + (get_local $i5) + ) + ) + (if + (get_local $i52) + (block + (set_local $i73 + (get_local $i52) + ) + (set_local $i74 + (get_local $i5) + ) + (br $while-in50) + ) + ) + (set_local $i5 + (i32.add + (get_local $i73) + (i32.const 16) + ) + ) + (set_local $i52 + (i32.load + (get_local $i5) + ) + ) + (if + (i32.eqz + (get_local $i52) + ) + (block + (set_local $i75 + (get_local $i73) + ) + (set_local $i76 + (get_local $i74) + ) + (br $while-out49) + ) + (block + (set_local $i73 + (get_local $i52) + ) + (set_local $i74 + (get_local $i5) + ) + ) + ) + (br $while-in50) + ) + ) + (if + (i32.lt_u + (get_local $i76) + (get_local $i68) + ) + (call $_abort) + (block + (i32.store + (get_local $i76) + (i32.const 0) + ) + (set_local $i72 + (get_local $i75) + ) + (br $do-once47) + ) + ) + ) + (block + (set_local $i5 + (i32.load + (i32.add + (get_local $i43) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $i5) + (get_local $i68) + ) + (call $_abort) + ) + (set_local $i52 + (i32.add + (get_local $i5) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $i52) + ) + (get_local $i43) + ) + (call $_abort) + ) + (set_local $i45 + (i32.add + (get_local $i55) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i45) + ) + (get_local $i43) + ) + (block + (i32.store + (get_local $i52) + (get_local $i55) + ) + (i32.store + (get_local $i45) + (get_local $i5) + ) + (set_local $i72 + (get_local $i55) + ) + (br $do-once47) + ) + (call $_abort) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $i54) + ) + (br $label$break$L331) + ) + (set_local $i55 + (i32.load + (i32.add + (get_local $i43) + (i32.const 28) + ) + ) + ) + (set_local $i5 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i55) + (i32.const 2) + ) + ) + ) + (block $do-once51 + (if + (i32.ne + (get_local $i43) + (i32.load + (get_local $i5) + ) + ) + (block + (if + (i32.lt_u + (get_local $i54) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i45 + (i32.add + (get_local $i54) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i45) + ) + (get_local $i43) + ) + (i32.store + (get_local $i45) + (get_local $i72) + ) + (i32.store + (i32.add + (get_local $i54) + (i32.const 20) + ) + (get_local $i72) + ) + ) + (if + (i32.eqz + (get_local $i72) + ) + (br $label$break$L331) + ) + ) + (block + (i32.store + (get_local $i5) + (get_local $i72) + ) + (if + (get_local $i72) + (br $do-once51) + ) + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i55) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + ) + ) + (set_local $i55 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i72) + (get_local $i55) + ) + (call $_abort) + ) + (i32.store + (i32.add + (get_local $i72) + (i32.const 24) + ) + (get_local $i54) + ) + (set_local $i5 + (i32.add + (get_local $i43) + (i32.const 16) + ) + ) + (set_local $i45 + (i32.load + (get_local $i5) + ) + ) + (block $do-once53 + (if + (get_local $i45) + (if + (i32.lt_u + (get_local $i45) + (get_local $i55) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i72) + (i32.const 16) + ) + (get_local $i45) + ) + (i32.store + (i32.add + (get_local $i45) + (i32.const 24) + ) + (get_local $i72) + ) + (br $do-once53) + ) + ) + ) + ) + (set_local $i45 + (i32.load + (i32.add + (get_local $i5) + (i32.const 4) + ) + ) + ) + (if + (i32.eqz + (get_local $i45) + ) + (br $label$break$L331) + ) + (if + (i32.lt_u + (get_local $i45) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i72) + (i32.const 20) + ) + (get_local $i45) + ) + (i32.store + (i32.add + (get_local $i45) + (i32.const 24) + ) + (get_local $i72) + ) + (br $label$break$L331) + ) + ) + ) + (block + (set_local $i45 + (i32.load + (i32.add + (get_local $i43) + (i32.const 8) + ) + ) + ) + (set_local $i55 + (i32.load + (i32.add + (get_local $i43) + (i32.const 12) + ) + ) + ) + (set_local $i54 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i56) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (block $do-once55 + (if + (i32.ne + (get_local $i45) + (get_local $i54) + ) + (block + (if + (i32.lt_u + (get_local $i45) + (get_local $i68) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (i32.add + (get_local $i45) + (i32.const 12) + ) + ) + (get_local $i43) + ) + (br $do-once55) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $i55) + (get_local $i45) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i56) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + ) + (block $do-once57 + (if + (i32.eq + (get_local $i55) + (get_local $i54) + ) + (set_local $i77 + (i32.add + (get_local $i55) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $i55) + (get_local $i68) + ) + (call $_abort) + ) + (set_local $i5 + (i32.add + (get_local $i55) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i5) + ) + (get_local $i43) + ) + (block + (set_local $i77 + (get_local $i5) + ) + (br $do-once57) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store + (i32.add + (get_local $i45) + (i32.const 12) + ) + (get_local $i55) + ) + (i32.store + (get_local $i77) + (get_local $i45) + ) + ) + ) + ) + (set_local $i78 + (i32.add + (get_local $i43) + (get_local $i57) + ) + ) + (set_local $i79 + (i32.add + (get_local $i57) + (get_local $i53) + ) + ) + ) + (block + (set_local $i78 + (get_local $i43) + ) + (set_local $i79 + (get_local $i53) + ) + ) + ) + (set_local $i56 + (i32.add + (get_local $i78) + (i32.const 4) + ) + ) + (i32.store + (get_local $i56) + (i32.and + (i32.load + (get_local $i56) + ) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 4) + ) + (i32.or + (get_local $i79) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (get_local $i79) + ) + (get_local $i79) + ) + (set_local $i56 + (i32.shr_u + (get_local $i79) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $i79) + (i32.const 256) + ) + (block + (set_local $i62 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i56) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i54 + (i32.load + (i32.const 176) + ) + ) + (set_local $i5 + (i32.shl + (i32.const 1) + (get_local $i56) + ) + ) + (block $do-once59 + (if + (i32.eqz + (i32.and + (get_local $i54) + (get_local $i5) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i54) + (get_local $i5) + ) + ) + (set_local $i80 + (i32.add + (get_local $i62) + (i32.const 8) + ) + ) + (set_local $i81 + (get_local $i62) + ) + ) + (block + (set_local $i56 + (i32.add + (get_local $i62) + (i32.const 8) + ) + ) + (set_local $i52 + (i32.load + (get_local $i56) + ) + ) + (if + (i32.ge_u + (get_local $i52) + (i32.load + (i32.const 192) + ) + ) + (block + (set_local $i80 + (get_local $i56) + ) + (set_local $i81 + (get_local $i52) + ) + (br $do-once59) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store + (get_local $i80) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i81) + (i32.const 12) + ) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 8) + ) + (get_local $i81) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 12) + ) + (get_local $i62) + ) + (br $do-once44) + ) + ) + (set_local $i5 + (i32.shr_u + (get_local $i79) + (i32.const 8) + ) + ) + (block $do-once61 + (if + (i32.eqz + (get_local $i5) + ) + (set_local $i82 + (i32.const 0) + ) + (block + (if + (i32.gt_u + (get_local $i79) + (i32.const 16777215) + ) + (block + (set_local $i82 + (i32.const 31) + ) + (br $do-once61) + ) + ) + (set_local $i54 + (i32.and + (i32.shr_u + (i32.add + (get_local $i5) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $i57 + (i32.shl + (get_local $i5) + (get_local $i54) + ) + ) + (set_local $i52 + (i32.and + (i32.shr_u + (i32.add + (get_local $i57) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $i56 + (i32.shl + (get_local $i57) + (get_local $i52) + ) + ) + (set_local $i57 + (i32.and + (i32.shr_u + (i32.add + (get_local $i56) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $i50 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $i52) + (get_local $i54) + ) + (get_local $i57) + ) + ) + (i32.shr_u + (i32.shl + (get_local $i56) + (get_local $i57) + ) + (i32.const 15) + ) + ) + ) + (set_local $i82 + (i32.or + (i32.and + (i32.shr_u + (get_local $i79) + (i32.add + (get_local $i50) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $i50) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $i5 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i82) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 28) + ) + (get_local $i82) + ) + (set_local $i62 + (i32.add + (get_local $i63) + (i32.const 16) + ) + ) + (i32.store + (i32.add + (get_local $i62) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store + (get_local $i62) + (i32.const 0) + ) + (set_local $i62 + (i32.load + (i32.const 180) + ) + ) + (set_local $i50 + (i32.shl + (i32.const 1) + (get_local $i82) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $i62) + (get_local $i50) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $i62) + (get_local $i50) + ) + ) + (i32.store + (get_local $i5) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 24) + ) + (get_local $i5) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 12) + ) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 8) + ) + (get_local $i63) + ) + (br $do-once44) + ) + ) + (set_local $i50 + (i32.shl + (get_local $i79) + (if (result i32) + (i32.eq + (get_local $i82) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $i82) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i62 + (i32.load + (get_local $i5) + ) + ) + (loop $while-in64 + (block $while-out63 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $i62) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i79) + ) + (block + (set_local $i83 + (get_local $i62) + ) + (set_local $i36 + (i32.const 281) + ) + (br $while-out63) + ) + ) + (set_local $i5 + (i32.add + (i32.add + (get_local $i62) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $i50) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $i57 + (i32.load + (get_local $i5) + ) + ) + (if + (i32.eqz + (get_local $i57) + ) + (block + (set_local $i84 + (get_local $i5) + ) + (set_local $i85 + (get_local $i62) + ) + (set_local $i36 + (i32.const 278) + ) + (br $while-out63) + ) + (block + (set_local $i50 + (i32.shl + (get_local $i50) + (i32.const 1) + ) + ) + (set_local $i62 + (get_local $i57) + ) + ) + ) + (br $while-in64) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 278) + ) + (if + (i32.lt_u + (get_local $i84) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $i84) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 24) + ) + (get_local $i85) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 12) + ) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 8) + ) + (get_local $i63) + ) + (br $do-once44) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 281) + ) + (block + (set_local $i62 + (i32.add + (get_local $i83) + (i32.const 8) + ) + ) + (set_local $i50 + (i32.load + (get_local $i62) + ) + ) + (set_local $i57 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $i50) + (get_local $i57) + ) + (i32.ge_u + (get_local $i83) + (get_local $i57) + ) + ) + (block + (i32.store + (i32.add + (get_local $i50) + (i32.const 12) + ) + (get_local $i63) + ) + (i32.store + (get_local $i62) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 8) + ) + (get_local $i50) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 12) + ) + (get_local $i83) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once44) + ) + (call $_abort) + ) + ) + ) + ) + ) + (block + (set_local $i50 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $i53) + ) + ) + (i32.store + (i32.const 188) + (get_local $i50) + ) + (i32.store + (i32.const 200) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 4) + ) + (i32.or + (get_local $i50) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i13 + (i32.add + (get_local $i44) + (i32.const 8) + ) + ) + (return + (get_local $i13) + ) + ) + (set_local $i71 + (i32.const 624) + ) + ) + ) + (loop $while-in66 + (block $while-out65 + (set_local $i63 + (i32.load + (get_local $i71) + ) + ) + (if + (if (result i32) + (i32.le_u + (get_local $i63) + (get_local $i60) + ) + (block (result i32) + (set_local $i53 + (i32.add + (get_local $i63) + (i32.load + (i32.add + (get_local $i71) + (i32.const 4) + ) + ) + ) + ) + (i32.gt_u + (get_local $i53) + (get_local $i60) + ) + ) + (i32.const 0) + ) + (block + (set_local $i86 + (get_local $i53) + ) + (br $while-out65) + ) + ) + (set_local $i71 + (i32.load + (i32.add + (get_local $i71) + (i32.const 8) + ) + ) + ) + (br $while-in66) + ) + ) + (set_local $i44 + (i32.add + (get_local $i86) + (i32.const -47) + ) + ) + (set_local $i53 + (i32.add + (get_local $i44) + (i32.const 8) + ) + ) + (set_local $i63 + (i32.add + (get_local $i44) + (if (result i32) + (i32.eq + (i32.and + (get_local $i53) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $i53) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $i53 + (i32.add + (get_local $i60) + (i32.const 16) + ) + ) + (set_local $i44 + (if (result i32) + (i32.lt_u + (get_local $i63) + (get_local $i53) + ) + (get_local $i60) + (get_local $i63) + ) + ) + (set_local $i63 + (i32.add + (get_local $i44) + (i32.const 8) + ) + ) + (set_local $i43 + (i32.add + (get_local $i58) + (i32.const 8) + ) + ) + (set_local $i61 + (if (result i32) + (i32.eq + (i32.and + (get_local $i43) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $i43) + ) + (i32.const 7) + ) + ) + ) + (set_local $i43 + (i32.add + (get_local $i58) + (get_local $i61) + ) + ) + (set_local $i50 + (i32.sub + (i32.add + (get_local $i59) + (i32.const -40) + ) + (get_local $i61) + ) + ) + (i32.store + (i32.const 200) + (get_local $i43) + ) + (i32.store + (i32.const 188) + (get_local $i50) + ) + (i32.store + (i32.add + (get_local $i43) + (i32.const 4) + ) + (i32.or + (get_local $i50) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $i43) + (get_local $i50) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (set_local $i50 + (i32.add + (get_local $i44) + (i32.const 4) + ) + ) + (i32.store + (get_local $i50) + (i32.const 27) + ) + (i32.store + (get_local $i63) + (i32.load + (i32.const 624) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 4) + ) + (i32.load + (i32.const 628) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 8) + ) + (i32.load + (i32.const 632) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 12) + ) + (i32.load + (i32.const 636) + ) + ) + (i32.store + (i32.const 624) + (get_local $i58) + ) + (i32.store + (i32.const 628) + (get_local $i59) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 632) + (get_local $i63) + ) + (set_local $i63 + (i32.add + (get_local $i44) + (i32.const 24) + ) + ) + (loop $do-in68 + (block $do-out67 + (set_local $i63 + (i32.add + (get_local $i63) + (i32.const 4) + ) + ) + (i32.store + (get_local $i63) + (i32.const 7) + ) + (br_if $do-in68 + (i32.lt_u + (i32.add + (get_local $i63) + (i32.const 4) + ) + (get_local $i86) + ) + ) + ) + ) + (if + (i32.ne + (get_local $i44) + (get_local $i60) + ) + (block + (set_local $i63 + (i32.sub + (get_local $i44) + (get_local $i60) + ) + ) + (i32.store + (get_local $i50) + (i32.and + (i32.load + (get_local $i50) + ) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 4) + ) + (i32.or + (get_local $i63) + (i32.const 1) + ) + ) + (i32.store + (get_local $i44) + (get_local $i63) + ) + (set_local $i43 + (i32.shr_u + (get_local $i63) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $i63) + (i32.const 256) + ) + (block + (set_local $i61 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i43) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i62 + (i32.load + (i32.const 176) + ) + ) + (set_local $i57 + (i32.shl + (i32.const 1) + (get_local $i43) + ) + ) + (if + (i32.and + (get_local $i62) + (get_local $i57) + ) + (block + (set_local $i43 + (i32.add + (get_local $i61) + (i32.const 8) + ) + ) + (set_local $i5 + (i32.load + (get_local $i43) + ) + ) + (if + (i32.lt_u + (get_local $i5) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $i87 + (get_local $i43) + ) + (set_local $i88 + (get_local $i5) + ) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i62) + (get_local $i57) + ) + ) + (set_local $i87 + (i32.add + (get_local $i61) + (i32.const 8) + ) + ) + (set_local $i88 + (get_local $i61) + ) + ) + ) + (i32.store + (get_local $i87) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i88) + (i32.const 12) + ) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 8) + ) + (get_local $i88) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 12) + ) + (get_local $i61) + ) + (br $do-once40) + ) + ) + (set_local $i61 + (i32.shr_u + (get_local $i63) + (i32.const 8) + ) + ) + (if + (get_local $i61) + (if + (i32.gt_u + (get_local $i63) + (i32.const 16777215) + ) + (set_local $i89 + (i32.const 31) + ) + (block + (set_local $i57 + (i32.and + (i32.shr_u + (i32.add + (get_local $i61) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $i62 + (i32.shl + (get_local $i61) + (get_local $i57) + ) + ) + (set_local $i61 + (i32.and + (i32.shr_u + (i32.add + (get_local $i62) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $i5 + (i32.shl + (get_local $i62) + (get_local $i61) + ) + ) + (set_local $i62 + (i32.and + (i32.shr_u + (i32.add + (get_local $i5) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $i43 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $i61) + (get_local $i57) + ) + (get_local $i62) + ) + ) + (i32.shr_u + (i32.shl + (get_local $i5) + (get_local $i62) + ) + (i32.const 15) + ) + ) + ) + (set_local $i89 + (i32.or + (i32.and + (i32.shr_u + (get_local $i63) + (i32.add + (get_local $i43) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $i43) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i89 + (i32.const 0) + ) + ) + (set_local $i43 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i89) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 28) + ) + (get_local $i89) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 20) + ) + (i32.const 0) + ) + (i32.store + (get_local $i53) + (i32.const 0) + ) + (set_local $i62 + (i32.load + (i32.const 180) + ) + ) + (set_local $i5 + (i32.shl + (i32.const 1) + (get_local $i89) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $i62) + (get_local $i5) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $i62) + (get_local $i5) + ) + ) + (i32.store + (get_local $i43) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 24) + ) + (get_local $i43) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 12) + ) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 8) + ) + (get_local $i60) + ) + (br $do-once40) + ) + ) + (set_local $i5 + (i32.shl + (get_local $i63) + (if (result i32) + (i32.eq + (get_local $i89) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $i89) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i62 + (i32.load + (get_local $i43) + ) + ) + (loop $while-in70 + (block $while-out69 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $i62) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i63) + ) + (block + (set_local $i90 + (get_local $i62) + ) + (set_local $i36 + (i32.const 307) + ) + (br $while-out69) + ) + ) + (set_local $i43 + (i32.add + (i32.add + (get_local $i62) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $i5) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $i57 + (i32.load + (get_local $i43) + ) + ) + (if + (i32.eqz + (get_local $i57) + ) + (block + (set_local $i91 + (get_local $i43) + ) + (set_local $i92 + (get_local $i62) + ) + (set_local $i36 + (i32.const 304) + ) + (br $while-out69) + ) + (block + (set_local $i5 + (i32.shl + (get_local $i5) + (i32.const 1) + ) + ) + (set_local $i62 + (get_local $i57) + ) + ) + ) + (br $while-in70) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 304) + ) + (if + (i32.lt_u + (get_local $i91) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $i91) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 24) + ) + (get_local $i92) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 12) + ) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 8) + ) + (get_local $i60) + ) + (br $do-once40) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 307) + ) + (block + (set_local $i62 + (i32.add + (get_local $i90) + (i32.const 8) + ) + ) + (set_local $i5 + (i32.load + (get_local $i62) + ) + ) + (set_local $i63 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $i5) + (get_local $i63) + ) + (i32.ge_u + (get_local $i90) + (get_local $i63) + ) + ) + (block + (i32.store + (i32.add + (get_local $i5) + (i32.const 12) + ) + (get_local $i60) + ) + (i32.store + (get_local $i62) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 8) + ) + (get_local $i5) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 12) + ) + (get_local $i90) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once40) + ) + (call $_abort) + ) + ) + ) + ) + ) + ) + ) + (block + (set_local $i5 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.or + (i32.eq + (get_local $i5) + (i32.const 0) + ) + (i32.lt_u + (get_local $i58) + (get_local $i5) + ) + ) + (i32.store + (i32.const 192) + (get_local $i58) + ) + ) + (i32.store + (i32.const 624) + (get_local $i58) + ) + (i32.store + (i32.const 628) + (get_local $i59) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 212) + (i32.load + (i32.const 648) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (set_local $i5 + (i32.const 0) + ) + (loop $do-in72 + (block $do-out71 + (set_local $i62 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i5) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $i62) + (i32.const 12) + ) + (get_local $i62) + ) + (i32.store + (i32.add + (get_local $i62) + (i32.const 8) + ) + (get_local $i62) + ) + (set_local $i5 + (i32.add + (get_local $i5) + (i32.const 1) + ) + ) + (br_if $do-in72 + (i32.ne + (get_local $i5) + (i32.const 32) + ) + ) + ) + ) + (set_local $i5 + (i32.add + (get_local $i58) + (i32.const 8) + ) + ) + (set_local $i62 + (if (result i32) + (i32.eq + (i32.and + (get_local $i5) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $i5) + ) + (i32.const 7) + ) + ) + ) + (set_local $i5 + (i32.add + (get_local $i58) + (get_local $i62) + ) + ) + (set_local $i63 + (i32.sub + (i32.add + (get_local $i59) + (i32.const -40) + ) + (get_local $i62) + ) + ) + (i32.store + (i32.const 200) + (get_local $i5) + ) + (i32.store + (i32.const 188) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 4) + ) + (i32.or + (get_local $i63) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $i5) + (get_local $i63) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + ) + ) + ) + (set_local $i59 + (i32.load + (i32.const 188) + ) + ) + (if + (i32.gt_u + (get_local $i59) + (get_local $i31) + ) + (block + (set_local $i58 + (i32.sub + (get_local $i59) + (get_local $i31) + ) + ) + (i32.store + (i32.const 188) + (get_local $i58) + ) + (set_local $i59 + (i32.load + (i32.const 200) + ) + ) + (set_local $i60 + (i32.add + (get_local $i59) + (get_local $i31) + ) + ) + (i32.store + (i32.const 200) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 4) + ) + (i32.or + (get_local $i58) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i59) + (i32.const 4) + ) + (i32.or + (get_local $i31) + (i32.const 3) + ) + ) + (set_local $i13 + (i32.add + (get_local $i59) + (i32.const 8) + ) + ) + (return + (get_local $i13) + ) + ) + ) + ) + ) + (i32.store + (call $___errno_location) + (i32.const 12) + ) + (set_local $i13 + (i32.const 0) + ) + (return + (get_local $i13) + ) + ) + (func $_free (; 16 ;) (param $i1 i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (local $i10 i32) + (local $i11 i32) + (local $i12 i32) + (local $i13 i32) + (local $i14 i32) + (local $i15 i32) + (local $i16 i32) + (local $i17 i32) + (local $i18 i32) + (local $i19 i32) + (local $i20 i32) + (local $i21 i32) + (local $i22 i32) + (local $i23 i32) + (local $i24 i32) + (local $i25 i32) + (local $i26 i32) + (local $i27 i32) + (local $i28 i32) + (local $i29 i32) + (local $i30 i32) + (local $i31 i32) + (local $i32 i32) + (local $i33 i32) + (local $i34 i32) + (local $i35 i32) + (local $i36 i32) + (local $i37 i32) + (if + (i32.eqz + (get_local $i1) + ) + (return) + ) + (set_local $i2 + (i32.add + (get_local $i1) + (i32.const -8) + ) + ) + (set_local $i3 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i2) + (get_local $i3) + ) + (call $_abort) + ) + (set_local $i4 + (i32.load + (i32.add + (get_local $i1) + (i32.const -4) + ) + ) + ) + (set_local $i1 + (i32.and + (get_local $i4) + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $i1) + (i32.const 1) + ) + (call $_abort) + ) + (set_local $i5 + (i32.and + (get_local $i4) + (i32.const -8) + ) + ) + (set_local $i6 + (i32.add + (get_local $i2) + (get_local $i5) + ) + ) + (block $do-once + (if + (i32.eqz + (i32.and + (get_local $i4) + (i32.const 1) + ) + ) + (block + (set_local $i7 + (i32.load + (get_local $i2) + ) + ) + (if + (i32.eqz + (get_local $i1) + ) + (return) + ) + (set_local $i8 + (i32.add + (get_local $i2) + (i32.sub + (i32.const 0) + (get_local $i7) + ) + ) + ) + (set_local $i9 + (i32.add + (get_local $i7) + (get_local $i5) + ) + ) + (if + (i32.lt_u + (get_local $i8) + (get_local $i3) + ) + (call $_abort) + ) + (if + (i32.eq + (get_local $i8) + (i32.load + (i32.const 196) + ) + ) + (block + (set_local $i10 + (i32.add + (get_local $i6) + (i32.const 4) + ) + ) + (set_local $i11 + (i32.load + (get_local $i10) + ) + ) + (if + (i32.ne + (i32.and + (get_local $i11) + (i32.const 3) + ) + (i32.const 3) + ) + (block + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 184) + (get_local $i9) + ) + (i32.store + (get_local $i10) + (i32.and + (get_local $i11) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 4) + ) + (i32.or + (get_local $i9) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i8) + (get_local $i9) + ) + (get_local $i9) + ) + (return) + ) + ) + (set_local $i11 + (i32.shr_u + (get_local $i7) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $i7) + (i32.const 256) + ) + (block + (set_local $i7 + (i32.load + (i32.add + (get_local $i8) + (i32.const 8) + ) + ) + ) + (set_local $i10 + (i32.load + (i32.add + (get_local $i8) + (i32.const 12) + ) + ) + ) + (set_local $i14 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i11) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.ne + (get_local $i7) + (get_local $i14) + ) + (block + (if + (i32.lt_u + (get_local $i7) + (get_local $i3) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (i32.add + (get_local $i7) + (i32.const 12) + ) + ) + (get_local $i8) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $i10) + (get_local $i7) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i11) + ) + (i32.const -1) + ) + ) + ) + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + (br $do-once) + ) + ) + (if + (i32.ne + (get_local $i10) + (get_local $i14) + ) + (block + (if + (i32.lt_u + (get_local $i10) + (get_local $i3) + ) + (call $_abort) + ) + (set_local $i14 + (i32.add + (get_local $i10) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i14) + ) + (get_local $i8) + ) + (set_local $i15 + (get_local $i14) + ) + (call $_abort) + ) + ) + (set_local $i15 + (i32.add + (get_local $i10) + (i32.const 8) + ) + ) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 12) + ) + (get_local $i10) + ) + (i32.store + (get_local $i15) + (get_local $i7) + ) + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + (br $do-once) + ) + ) + (set_local $i7 + (i32.load + (i32.add + (get_local $i8) + (i32.const 24) + ) + ) + ) + (set_local $i10 + (i32.load + (i32.add + (get_local $i8) + (i32.const 12) + ) + ) + ) + (block $do-once0 + (if + (i32.eq + (get_local $i10) + (get_local $i8) + ) + (block + (set_local $i14 + (i32.add + (get_local $i8) + (i32.const 16) + ) + ) + (set_local $i11 + (i32.add + (get_local $i14) + (i32.const 4) + ) + ) + (set_local $i16 + (i32.load + (get_local $i11) + ) + ) + (if + (i32.eqz + (get_local $i16) + ) + (block + (set_local $i17 + (i32.load + (get_local $i14) + ) + ) + (if + (i32.eqz + (get_local $i17) + ) + (block + (set_local $i18 + (i32.const 0) + ) + (br $do-once0) + ) + (block + (set_local $i19 + (get_local $i17) + ) + (set_local $i20 + (get_local $i14) + ) + ) + ) + ) + (block + (set_local $i19 + (get_local $i16) + ) + (set_local $i20 + (get_local $i11) + ) + ) + ) + (loop $while-in + (block $while-out + (set_local $i11 + (i32.add + (get_local $i19) + (i32.const 20) + ) + ) + (set_local $i16 + (i32.load + (get_local $i11) + ) + ) + (if + (get_local $i16) + (block + (set_local $i19 + (get_local $i16) + ) + (set_local $i20 + (get_local $i11) + ) + (br $while-in) + ) + ) + (set_local $i11 + (i32.add + (get_local $i19) + (i32.const 16) + ) + ) + (set_local $i16 + (i32.load + (get_local $i11) + ) + ) + (if + (i32.eqz + (get_local $i16) + ) + (block + (set_local $i21 + (get_local $i19) + ) + (set_local $i22 + (get_local $i20) + ) + (br $while-out) + ) + (block + (set_local $i19 + (get_local $i16) + ) + (set_local $i20 + (get_local $i11) + ) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (get_local $i22) + (get_local $i3) + ) + (call $_abort) + (block + (i32.store + (get_local $i22) + (i32.const 0) + ) + (set_local $i18 + (get_local $i21) + ) + (br $do-once0) + ) + ) + ) + (block + (set_local $i11 + (i32.load + (i32.add + (get_local $i8) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $i11) + (get_local $i3) + ) + (call $_abort) + ) + (set_local $i16 + (i32.add + (get_local $i11) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $i16) + ) + (get_local $i8) + ) + (call $_abort) + ) + (set_local $i14 + (i32.add + (get_local $i10) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i14) + ) + (get_local $i8) + ) + (block + (i32.store + (get_local $i16) + (get_local $i10) + ) + (i32.store + (get_local $i14) + (get_local $i11) + ) + (set_local $i18 + (get_local $i10) + ) + (br $do-once0) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $i7) + (block + (set_local $i10 + (i32.load + (i32.add + (get_local $i8) + (i32.const 28) + ) + ) + ) + (set_local $i11 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i10) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $i8) + (i32.load + (get_local $i11) + ) + ) + (block + (i32.store + (get_local $i11) + (get_local $i18) + ) + (if + (i32.eqz + (get_local $i18) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i10) + ) + (i32.const -1) + ) + ) + ) + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $i7) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i10 + (i32.add + (get_local $i7) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i10) + ) + (get_local $i8) + ) + (i32.store + (get_local $i10) + (get_local $i18) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 20) + ) + (get_local $i18) + ) + ) + (if + (i32.eqz + (get_local $i18) + ) + (block + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + (br $do-once) + ) + ) + ) + ) + (set_local $i10 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i18) + (get_local $i10) + ) + (call $_abort) + ) + (i32.store + (i32.add + (get_local $i18) + (i32.const 24) + ) + (get_local $i7) + ) + (set_local $i11 + (i32.add + (get_local $i8) + (i32.const 16) + ) + ) + (set_local $i14 + (i32.load + (get_local $i11) + ) + ) + (block $do-once2 + (if + (get_local $i14) + (if + (i32.lt_u + (get_local $i14) + (get_local $i10) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i18) + (i32.const 16) + ) + (get_local $i14) + ) + (i32.store + (i32.add + (get_local $i14) + (i32.const 24) + ) + (get_local $i18) + ) + (br $do-once2) + ) + ) + ) + ) + (set_local $i14 + (i32.load + (i32.add + (get_local $i11) + (i32.const 4) + ) + ) + ) + (if + (get_local $i14) + (if + (i32.lt_u + (get_local $i14) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i18) + (i32.const 20) + ) + (get_local $i14) + ) + (i32.store + (i32.add + (get_local $i14) + (i32.const 24) + ) + (get_local $i18) + ) + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + (br $do-once) + ) + ) + (block + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + ) + ) + ) + (block + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + ) + ) + ) + (block + (set_local $i12 + (get_local $i2) + ) + (set_local $i13 + (get_local $i5) + ) + ) + ) + ) + (if + (i32.ge_u + (get_local $i12) + (get_local $i6) + ) + (call $_abort) + ) + (set_local $i5 + (i32.add + (get_local $i6) + (i32.const 4) + ) + ) + (set_local $i2 + (i32.load + (get_local $i5) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $i2) + (i32.const 1) + ) + ) + (call $_abort) + ) + (if + (i32.eqz + (i32.and + (get_local $i2) + (i32.const 2) + ) + ) + (block + (if + (i32.eq + (get_local $i6) + (i32.load + (i32.const 200) + ) + ) + (block + (set_local $i18 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $i13) + ) + ) + (i32.store + (i32.const 188) + (get_local $i18) + ) + (i32.store + (i32.const 200) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 4) + ) + (i32.or + (get_local $i18) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $i12) + (i32.load + (i32.const 196) + ) + ) + (return) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store + (i32.const 184) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $i6) + (i32.load + (i32.const 196) + ) + ) + (block + (set_local $i18 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $i13) + ) + ) + (i32.store + (i32.const 184) + (get_local $i18) + ) + (i32.store + (i32.const 196) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 4) + ) + (i32.or + (get_local $i18) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (get_local $i18) + ) + (get_local $i18) + ) + (return) + ) + ) + (set_local $i18 + (i32.add + (i32.and + (get_local $i2) + (i32.const -8) + ) + (get_local $i13) + ) + ) + (set_local $i3 + (i32.shr_u + (get_local $i2) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.ge_u + (get_local $i2) + (i32.const 256) + ) + (block + (set_local $i21 + (i32.load + (i32.add + (get_local $i6) + (i32.const 24) + ) + ) + ) + (set_local $i22 + (i32.load + (i32.add + (get_local $i6) + (i32.const 12) + ) + ) + ) + (block $do-once6 + (if + (i32.eq + (get_local $i22) + (get_local $i6) + ) + (block + (set_local $i20 + (i32.add + (get_local $i6) + (i32.const 16) + ) + ) + (set_local $i19 + (i32.add + (get_local $i20) + (i32.const 4) + ) + ) + (set_local $i15 + (i32.load + (get_local $i19) + ) + ) + (if + (i32.eqz + (get_local $i15) + ) + (block + (set_local $i1 + (i32.load + (get_local $i20) + ) + ) + (if + (i32.eqz + (get_local $i1) + ) + (block + (set_local $i23 + (i32.const 0) + ) + (br $do-once6) + ) + (block + (set_local $i24 + (get_local $i1) + ) + (set_local $i25 + (get_local $i20) + ) + ) + ) + ) + (block + (set_local $i24 + (get_local $i15) + ) + (set_local $i25 + (get_local $i19) + ) + ) + ) + (loop $while-in9 + (block $while-out8 + (set_local $i19 + (i32.add + (get_local $i24) + (i32.const 20) + ) + ) + (set_local $i15 + (i32.load + (get_local $i19) + ) + ) + (if + (get_local $i15) + (block + (set_local $i24 + (get_local $i15) + ) + (set_local $i25 + (get_local $i19) + ) + (br $while-in9) + ) + ) + (set_local $i19 + (i32.add + (get_local $i24) + (i32.const 16) + ) + ) + (set_local $i15 + (i32.load + (get_local $i19) + ) + ) + (if + (i32.eqz + (get_local $i15) + ) + (block + (set_local $i26 + (get_local $i24) + ) + (set_local $i27 + (get_local $i25) + ) + (br $while-out8) + ) + (block + (set_local $i24 + (get_local $i15) + ) + (set_local $i25 + (get_local $i19) + ) + ) + ) + (br $while-in9) + ) + ) + (if + (i32.lt_u + (get_local $i27) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $i27) + (i32.const 0) + ) + (set_local $i23 + (get_local $i26) + ) + (br $do-once6) + ) + ) + ) + (block + (set_local $i19 + (i32.load + (i32.add + (get_local $i6) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $i19) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i15 + (i32.add + (get_local $i19) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $i15) + ) + (get_local $i6) + ) + (call $_abort) + ) + (set_local $i20 + (i32.add + (get_local $i22) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i20) + ) + (get_local $i6) + ) + (block + (i32.store + (get_local $i15) + (get_local $i22) + ) + (i32.store + (get_local $i20) + (get_local $i19) + ) + (set_local $i23 + (get_local $i22) + ) + (br $do-once6) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $i21) + (block + (set_local $i22 + (i32.load + (i32.add + (get_local $i6) + (i32.const 28) + ) + ) + ) + (set_local $i9 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i22) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $i6) + (i32.load + (get_local $i9) + ) + ) + (block + (i32.store + (get_local $i9) + (get_local $i23) + ) + (if + (i32.eqz + (get_local $i23) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i22) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $i21) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i22 + (i32.add + (get_local $i21) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i22) + ) + (get_local $i6) + ) + (i32.store + (get_local $i22) + (get_local $i23) + ) + (i32.store + (i32.add + (get_local $i21) + (i32.const 20) + ) + (get_local $i23) + ) + ) + (if + (i32.eqz + (get_local $i23) + ) + (br $do-once4) + ) + ) + ) + (set_local $i22 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i23) + (get_local $i22) + ) + (call $_abort) + ) + (i32.store + (i32.add + (get_local $i23) + (i32.const 24) + ) + (get_local $i21) + ) + (set_local $i9 + (i32.add + (get_local $i6) + (i32.const 16) + ) + ) + (set_local $i8 + (i32.load + (get_local $i9) + ) + ) + (block $do-once10 + (if + (get_local $i8) + (if + (i32.lt_u + (get_local $i8) + (get_local $i22) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i23) + (i32.const 16) + ) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 24) + ) + (get_local $i23) + ) + (br $do-once10) + ) + ) + ) + ) + (set_local $i8 + (i32.load + (i32.add + (get_local $i9) + (i32.const 4) + ) + ) + ) + (if + (get_local $i8) + (if + (i32.lt_u + (get_local $i8) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i23) + (i32.const 20) + ) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 24) + ) + (get_local $i23) + ) + (br $do-once4) + ) + ) + ) + ) + ) + ) + (block + (set_local $i8 + (i32.load + (i32.add + (get_local $i6) + (i32.const 8) + ) + ) + ) + (set_local $i22 + (i32.load + (i32.add + (get_local $i6) + (i32.const 12) + ) + ) + ) + (set_local $i21 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i3) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.ne + (get_local $i8) + (get_local $i21) + ) + (block + (if + (i32.lt_u + (get_local $i8) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (i32.add + (get_local $i8) + (i32.const 12) + ) + ) + (get_local $i6) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $i22) + (get_local $i8) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.ne + (get_local $i22) + (get_local $i21) + ) + (block + (if + (i32.lt_u + (get_local $i22) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i21 + (i32.add + (get_local $i22) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i21) + ) + (get_local $i6) + ) + (set_local $i28 + (get_local $i21) + ) + (call $_abort) + ) + ) + (set_local $i28 + (i32.add + (get_local $i22) + (i32.const 8) + ) + ) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 12) + ) + (get_local $i22) + ) + (i32.store + (get_local $i28) + (get_local $i8) + ) + ) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 4) + ) + (i32.or + (get_local $i18) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (get_local $i18) + ) + (get_local $i18) + ) + (if + (i32.eq + (get_local $i12) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (get_local $i18) + ) + (return) + ) + (set_local $i29 + (get_local $i18) + ) + ) + ) + (block + (i32.store + (get_local $i5) + (i32.and + (get_local $i2) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 4) + ) + (i32.or + (get_local $i13) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (get_local $i13) + ) + (get_local $i13) + ) + (set_local $i29 + (get_local $i13) + ) + ) + ) + (set_local $i13 + (i32.shr_u + (get_local $i29) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $i29) + (i32.const 256) + ) + (block + (set_local $i2 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i13) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i5 + (i32.load + (i32.const 176) + ) + ) + (set_local $i18 + (i32.shl + (i32.const 1) + (get_local $i13) + ) + ) + (if + (i32.and + (get_local $i5) + (get_local $i18) + ) + (block + (set_local $i13 + (i32.add + (get_local $i2) + (i32.const 8) + ) + ) + (set_local $i28 + (i32.load + (get_local $i13) + ) + ) + (if + (i32.lt_u + (get_local $i28) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $i30 + (get_local $i13) + ) + (set_local $i31 + (get_local $i28) + ) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i5) + (get_local $i18) + ) + ) + (set_local $i30 + (i32.add + (get_local $i2) + (i32.const 8) + ) + ) + (set_local $i31 + (get_local $i2) + ) + ) + ) + (i32.store + (get_local $i30) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i31) + (i32.const 12) + ) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 8) + ) + (get_local $i31) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 12) + ) + (get_local $i2) + ) + (return) + ) + ) + (set_local $i2 + (i32.shr_u + (get_local $i29) + (i32.const 8) + ) + ) + (if + (get_local $i2) + (if + (i32.gt_u + (get_local $i29) + (i32.const 16777215) + ) + (set_local $i32 + (i32.const 31) + ) + (block + (set_local $i31 + (i32.and + (i32.shr_u + (i32.add + (get_local $i2) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $i30 + (i32.shl + (get_local $i2) + (get_local $i31) + ) + ) + (set_local $i2 + (i32.and + (i32.shr_u + (i32.add + (get_local $i30) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $i18 + (i32.shl + (get_local $i30) + (get_local $i2) + ) + ) + (set_local $i30 + (i32.and + (i32.shr_u + (i32.add + (get_local $i18) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $i5 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $i2) + (get_local $i31) + ) + (get_local $i30) + ) + ) + (i32.shr_u + (i32.shl + (get_local $i18) + (get_local $i30) + ) + (i32.const 15) + ) + ) + ) + (set_local $i32 + (i32.or + (i32.and + (i32.shr_u + (get_local $i29) + (i32.add + (get_local $i5) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $i5) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i32 + (i32.const 0) + ) + ) + (set_local $i5 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i32) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 28) + ) + (get_local $i32) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 20) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 16) + ) + (i32.const 0) + ) + (set_local $i30 + (i32.load + (i32.const 180) + ) + ) + (set_local $i18 + (i32.shl + (i32.const 1) + (get_local $i32) + ) + ) + (block $do-once12 + (if + (i32.and + (get_local $i30) + (get_local $i18) + ) + (block + (set_local $i31 + (i32.shl + (get_local $i29) + (if (result i32) + (i32.eq + (get_local $i32) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $i32) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i2 + (i32.load + (get_local $i5) + ) + ) + (loop $while-in15 + (block $while-out14 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $i2) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i29) + ) + (block + (set_local $i33 + (get_local $i2) + ) + (set_local $i34 + (i32.const 130) + ) + (br $while-out14) + ) + ) + (set_local $i28 + (i32.add + (i32.add + (get_local $i2) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $i31) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $i13 + (i32.load + (get_local $i28) + ) + ) + (if + (i32.eqz + (get_local $i13) + ) + (block + (set_local $i35 + (get_local $i28) + ) + (set_local $i36 + (get_local $i2) + ) + (set_local $i34 + (i32.const 127) + ) + (br $while-out14) + ) + (block + (set_local $i31 + (i32.shl + (get_local $i31) + (i32.const 1) + ) + ) + (set_local $i2 + (get_local $i13) + ) + ) + ) + (br $while-in15) + ) + ) + (if + (i32.eq + (get_local $i34) + (i32.const 127) + ) + (if + (i32.lt_u + (get_local $i35) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $i35) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 24) + ) + (get_local $i36) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 12) + ) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 8) + ) + (get_local $i12) + ) + (br $do-once12) + ) + ) + (if + (i32.eq + (get_local $i34) + (i32.const 130) + ) + (block + (set_local $i2 + (i32.add + (get_local $i33) + (i32.const 8) + ) + ) + (set_local $i31 + (i32.load + (get_local $i2) + ) + ) + (set_local $i9 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $i31) + (get_local $i9) + ) + (i32.ge_u + (get_local $i33) + (get_local $i9) + ) + ) + (block + (i32.store + (i32.add + (get_local $i31) + (i32.const 12) + ) + (get_local $i12) + ) + (i32.store + (get_local $i2) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 8) + ) + (get_local $i31) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 12) + ) + (get_local $i33) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once12) + ) + (call $_abort) + ) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $i30) + (get_local $i18) + ) + ) + (i32.store + (get_local $i5) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 24) + ) + (get_local $i5) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 12) + ) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 8) + ) + (get_local $i12) + ) + ) + ) + ) + (set_local $i12 + (i32.add + (i32.load + (i32.const 208) + ) + (i32.const -1) + ) + ) + (i32.store + (i32.const 208) + (get_local $i12) + ) + (if + (i32.eqz + (get_local $i12) + ) + (set_local $i37 + (i32.const 632) + ) + (return) + ) + (loop $while-in17 + (block $while-out16 + (set_local $i12 + (i32.load + (get_local $i37) + ) + ) + (if + (i32.eqz + (get_local $i12) + ) + (br $while-out16) + (set_local $i37 + (i32.add + (get_local $i12) + (i32.const 8) + ) + ) + ) + (br $while-in17) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (return) + ) + (func $___stdio_write (; 17 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (local $i10 i32) + (local $i11 i32) + (local $i12 i32) + (local $i13 i32) + (local $i14 i32) + (local $i15 i32) + (local $i16 i32) + (local $i17 i32) + (local $i18 i32) + (local $i19 i32) + (local $i20 i32) + (local $i21 i32) + (local $i22 i32) + (local $i23 i32) + (local $i24 i32) + (set_local $i4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (set_local $i5 + (i32.add + (get_local $i4) + (i32.const 16) + ) + ) + (set_local $i6 + (get_local $i4) + ) + (set_local $i7 + (i32.add + (get_local $i4) + (i32.const 32) + ) + ) + (set_local $i8 + (i32.add + (get_local $i1) + (i32.const 28) + ) + ) + (set_local $i9 + (i32.load + (get_local $i8) + ) + ) + (i32.store + (get_local $i7) + (get_local $i9) + ) + (set_local $i10 + (i32.add + (get_local $i1) + (i32.const 20) + ) + ) + (set_local $i11 + (i32.sub + (i32.load + (get_local $i10) + ) + (get_local $i9) + ) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 4) + ) + (get_local $i11) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 8) + ) + (get_local $i2) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 12) + ) + (get_local $i3) + ) + (set_local $i2 + (i32.add + (get_local $i1) + (i32.const 60) + ) + ) + (set_local $i9 + (i32.add + (get_local $i1) + (i32.const 44) + ) + ) + (set_local $i12 + (get_local $i7) + ) + (set_local $i7 + (i32.const 2) + ) + (set_local $i13 + (i32.add + (get_local $i11) + (get_local $i3) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.load + (i32.const 8) + ) + ) + (block + (i32.store + (get_local $i5) + (i32.load + (get_local $i2) + ) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 4) + ) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 8) + ) + (get_local $i7) + ) + (set_local $i14 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $i5) + ) + ) + ) + ) + (block + (call $_pthread_cleanup_push + (i32.const 4) + (get_local $i1) + ) + (i32.store + (get_local $i6) + (i32.load + (get_local $i2) + ) + ) + (i32.store + (i32.add + (get_local $i6) + (i32.const 4) + ) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i6) + (i32.const 8) + ) + (get_local $i7) + ) + (set_local $i11 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $i6) + ) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + (set_local $i14 + (get_local $i11) + ) + ) + ) + (if + (i32.eq + (get_local $i13) + (get_local $i14) + ) + (block + (set_local $i15 + (i32.const 6) + ) + (br $while-out) + ) + ) + (if + (i32.lt_s + (get_local $i14) + (i32.const 0) + ) + (block + (set_local $i16 + (get_local $i12) + ) + (set_local $i17 + (get_local $i7) + ) + (set_local $i15 + (i32.const 8) + ) + (br $while-out) + ) + ) + (set_local $i11 + (i32.sub + (get_local $i13) + (get_local $i14) + ) + ) + (set_local $i18 + (i32.load + (i32.add + (get_local $i12) + (i32.const 4) + ) + ) + ) + (if + (i32.le_u + (get_local $i14) + (get_local $i18) + ) + (if + (i32.eq + (get_local $i7) + (i32.const 2) + ) + (block + (i32.store + (get_local $i8) + (i32.add + (i32.load + (get_local $i8) + ) + (get_local $i14) + ) + ) + (set_local $i19 + (get_local $i18) + ) + (set_local $i20 + (get_local $i14) + ) + (set_local $i21 + (get_local $i12) + ) + (set_local $i22 + (i32.const 2) + ) + ) + (block + (set_local $i19 + (get_local $i18) + ) + (set_local $i20 + (get_local $i14) + ) + (set_local $i21 + (get_local $i12) + ) + (set_local $i22 + (get_local $i7) + ) + ) + ) + (block + (set_local $i23 + (i32.load + (get_local $i9) + ) + ) + (i32.store + (get_local $i8) + (get_local $i23) + ) + (i32.store + (get_local $i10) + (get_local $i23) + ) + (set_local $i19 + (i32.load + (i32.add + (get_local $i12) + (i32.const 12) + ) + ) + ) + (set_local $i20 + (i32.sub + (get_local $i14) + (get_local $i18) + ) + ) + (set_local $i21 + (i32.add + (get_local $i12) + (i32.const 8) + ) + ) + (set_local $i22 + (i32.add + (get_local $i7) + (i32.const -1) + ) + ) + ) + ) + (i32.store + (get_local $i21) + (i32.add + (i32.load + (get_local $i21) + ) + (get_local $i20) + ) + ) + (i32.store + (i32.add + (get_local $i21) + (i32.const 4) + ) + (i32.sub + (get_local $i19) + (get_local $i20) + ) + ) + (set_local $i12 + (get_local $i21) + ) + (set_local $i7 + (get_local $i22) + ) + (set_local $i13 + (get_local $i11) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $i15) + (i32.const 6) + ) + (block + (set_local $i13 + (i32.load + (get_local $i9) + ) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 16) + ) + (i32.add + (get_local $i13) + (i32.load + (i32.add + (get_local $i1) + (i32.const 48) + ) + ) + ) + ) + (set_local $i9 + (get_local $i13) + ) + (i32.store + (get_local $i8) + (get_local $i9) + ) + (i32.store + (get_local $i10) + (get_local $i9) + ) + (set_local $i24 + (get_local $i3) + ) + ) + (if + (i32.eq + (get_local $i15) + (i32.const 8) + ) + (block + (i32.store + (i32.add + (get_local $i1) + (i32.const 16) + ) + (i32.const 0) + ) + (i32.store + (get_local $i8) + (i32.const 0) + ) + (i32.store + (get_local $i10) + (i32.const 0) + ) + (i32.store + (get_local $i1) + (i32.or + (i32.load + (get_local $i1) + ) + (i32.const 32) + ) + ) + (if + (i32.eq + (get_local $i17) + (i32.const 2) + ) + (set_local $i24 + (i32.const 0) + ) + (set_local $i24 + (i32.sub + (get_local $i3) + (i32.load + (i32.add + (get_local $i16) + (i32.const 4) + ) + ) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $i4) + ) + (return + (get_local $i24) + ) + ) + (func $___fwritex (; 18 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (local $i10 i32) + (local $i11 i32) + (local $i12 i32) + (local $i13 i32) + (local $i14 i32) + (local $i15 i32) + (set_local $i4 + (i32.add + (get_local $i3) + (i32.const 16) + ) + ) + (set_local $i5 + (i32.load + (get_local $i4) + ) + ) + (if + (i32.eqz + (get_local $i5) + ) + (if + (i32.eqz + (call $___towrite + (get_local $i3) + ) + ) + (block + (set_local $i6 + (i32.load + (get_local $i4) + ) + ) + (set_local $i7 + (i32.const 5) + ) + ) + (set_local $i8 + (i32.const 0) + ) + ) + (block + (set_local $i6 + (get_local $i5) + ) + (set_local $i7 + (i32.const 5) + ) + ) + ) + (block $label$break$L5 + (if + (i32.eq + (get_local $i7) + (i32.const 5) + ) + (block + (set_local $i5 + (i32.add + (get_local $i3) + (i32.const 20) + ) + ) + (set_local $i4 + (i32.load + (get_local $i5) + ) + ) + (set_local $i9 + (get_local $i4) + ) + (if + (i32.lt_u + (i32.sub + (get_local $i6) + (get_local $i4) + ) + (get_local $i2) + ) + (block + (set_local $i8 + (call_indirect (type $FUNCSIG$iiii) + (get_local $i3) + (get_local $i1) + (get_local $i2) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $i3) + (i32.const 36) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (br $label$break$L5) + ) + ) + (block $label$break$L10 + (if + (i32.gt_s + (i32.load8_s + (i32.add + (get_local $i3) + (i32.const 75) + ) + ) + (i32.const -1) + ) + (block + (set_local $i4 + (get_local $i2) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (get_local $i4) + ) + (block + (set_local $i10 + (get_local $i2) + ) + (set_local $i11 + (get_local $i1) + ) + (set_local $i12 + (get_local $i9) + ) + (set_local $i13 + (i32.const 0) + ) + (br $label$break$L10) + ) + ) + (set_local $i14 + (i32.add + (get_local $i4) + (i32.const -1) + ) + ) + (if + (i32.eq + (i32.load8_s + (i32.add + (get_local $i1) + (get_local $i14) + ) + ) + (i32.const 10) + ) + (block + (set_local $i15 + (get_local $i4) + ) + (br $while-out) + ) + (set_local $i4 + (get_local $i14) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (call_indirect (type $FUNCSIG$iiii) + (get_local $i3) + (get_local $i1) + (get_local $i15) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $i3) + (i32.const 36) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + (get_local $i15) + ) + (block + (set_local $i8 + (get_local $i15) + ) + (br $label$break$L5) + ) + ) + (set_local $i10 + (i32.sub + (get_local $i2) + (get_local $i15) + ) + ) + (set_local $i11 + (i32.add + (get_local $i1) + (get_local $i15) + ) + ) + (set_local $i12 + (i32.load + (get_local $i5) + ) + ) + (set_local $i13 + (get_local $i15) + ) + ) + (block + (set_local $i10 + (get_local $i2) + ) + (set_local $i11 + (get_local $i1) + ) + (set_local $i12 + (get_local $i9) + ) + (set_local $i13 + (i32.const 0) + ) + ) + ) + ) + (drop + (call $_memcpy + (get_local $i12) + (get_local $i11) + (get_local $i10) + ) + ) + (i32.store + (get_local $i5) + (i32.add + (i32.load + (get_local $i5) + ) + (get_local $i10) + ) + ) + (set_local $i8 + (i32.add + (get_local $i13) + (get_local $i10) + ) + ) + ) + ) + ) + (return + (get_local $i8) + ) + ) + (func $_fflush (; 19 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (block $do-once + (if + (get_local $i1) + (block + (if + (i32.le_s + (i32.load + (i32.add + (get_local $i1) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (block + (set_local $i2 + (call $___fflush_unlocked + (get_local $i1) + ) + ) + (br $do-once) + ) + ) + (set_local $i3 + (i32.eq + (call $___lockfile + (get_local $i1) + ) + (i32.const 0) + ) + ) + (set_local $i4 + (call $___fflush_unlocked + (get_local $i1) + ) + ) + (if + (get_local $i3) + (set_local $i2 + (get_local $i4) + ) + (block + (call $___unlockfile + (get_local $i1) + ) + (set_local $i2 + (get_local $i4) + ) + ) + ) + ) + (block + (if + (i32.eqz + (i32.load + (i32.const 56) + ) + ) + (set_local $i5 + (i32.const 0) + ) + (set_local $i5 + (call $_fflush + (i32.load + (i32.const 56) + ) + ) + ) + ) + (call $___lock + (i32.const 36) + ) + (set_local $i4 + (i32.load + (i32.const 32) + ) + ) + (if + (i32.eqz + (get_local $i4) + ) + (set_local $i6 + (get_local $i5) + ) + (block + (set_local $i3 + (get_local $i4) + ) + (set_local $i4 + (get_local $i5) + ) + (loop $while-in + (block $while-out + (if + (i32.gt_s + (i32.load + (i32.add + (get_local $i3) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (set_local $i7 + (call $___lockfile + (get_local $i3) + ) + ) + (set_local $i7 + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.load + (i32.add + (get_local $i3) + (i32.const 20) + ) + ) + (i32.load + (i32.add + (get_local $i3) + (i32.const 28) + ) + ) + ) + (set_local $i8 + (i32.or + (call $___fflush_unlocked + (get_local $i3) + ) + (get_local $i4) + ) + ) + (set_local $i8 + (get_local $i4) + ) + ) + (if + (get_local $i7) + (call $___unlockfile + (get_local $i3) + ) + ) + (set_local $i3 + (i32.load + (i32.add + (get_local $i3) + (i32.const 56) + ) + ) + ) + (if + (i32.eqz + (get_local $i3) + ) + (block + (set_local $i6 + (get_local $i8) + ) + (br $while-out) + ) + (set_local $i4 + (get_local $i8) + ) + ) + (br $while-in) + ) + ) + ) + ) + (call $___unlock + (i32.const 36) + ) + (set_local $i2 + (get_local $i6) + ) + ) + ) + ) + (return + (get_local $i2) + ) + ) + (func $_strlen (; 20 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (local $i10 i32) + (local $i11 i32) + (set_local $i2 + (get_local $i1) + ) + (block $label$break$L1 + (if + (i32.eqz + (i32.and + (get_local $i2) + (i32.const 3) + ) + ) + (block + (set_local $i3 + (get_local $i1) + ) + (set_local $i4 + (i32.const 4) + ) + ) + (block + (set_local $i5 + (get_local $i1) + ) + (set_local $i6 + (get_local $i2) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.load8_s + (get_local $i5) + ) + ) + (block + (set_local $i7 + (get_local $i6) + ) + (br $label$break$L1) + ) + ) + (set_local $i8 + (i32.add + (get_local $i5) + (i32.const 1) + ) + ) + (set_local $i6 + (get_local $i8) + ) + (if + (i32.eqz + (i32.and + (get_local $i6) + (i32.const 3) + ) + ) + (block + (set_local $i3 + (get_local $i8) + ) + (set_local $i4 + (i32.const 4) + ) + (br $while-out) + ) + (set_local $i5 + (get_local $i8) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $i4) + (i32.const 4) + ) + (block + (set_local $i4 + (get_local $i3) + ) + (loop $while-in1 + (block $while-out0 + (set_local $i3 + (i32.load + (get_local $i4) + ) + ) + (if + (i32.eqz + (i32.and + (i32.xor + (i32.and + (get_local $i3) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $i3) + (i32.const -16843009) + ) + ) + ) + (set_local $i4 + (i32.add + (get_local $i4) + (i32.const 4) + ) + ) + (block + (set_local $i9 + (get_local $i3) + ) + (set_local $i10 + (get_local $i4) + ) + (br $while-out0) + ) + ) + (br $while-in1) + ) + ) + (if + (i32.eqz + (i32.shr_s + (i32.shl + (i32.and + (get_local $i9) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $i11 + (get_local $i10) + ) + (block + (set_local $i9 + (get_local $i10) + ) + (loop $while-in3 + (block $while-out2 + (set_local $i10 + (i32.add + (get_local $i9) + (i32.const 1) + ) + ) + (if + (i32.eqz + (i32.load8_s + (get_local $i10) + ) + ) + (block + (set_local $i11 + (get_local $i10) + ) + (br $while-out2) + ) + (set_local $i9 + (get_local $i10) + ) + ) + (br $while-in3) + ) + ) + ) + ) + (set_local $i7 + (get_local $i11) + ) + ) + ) + (return + (i32.sub + (get_local $i7) + (get_local $i2) + ) + ) + ) + (func $___overflow (; 21 ;) (param $i1 i32) (param $i2 i32) (result i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (local $i10 i32) + (local $i11 i32) + (set_local $i3 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $i4 + (get_local $i3) + ) + (set_local $i5 + (i32.and + (get_local $i2) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $i4) + (get_local $i5) + ) + (set_local $i6 + (i32.add + (get_local $i1) + (i32.const 16) + ) + ) + (set_local $i7 + (i32.load + (get_local $i6) + ) + ) + (if + (i32.eqz + (get_local $i7) + ) + (if + (i32.eqz + (call $___towrite + (get_local $i1) + ) + ) + (block + (set_local $i8 + (i32.load + (get_local $i6) + ) + ) + (set_local $i9 + (i32.const 4) + ) + ) + (set_local $i10 + (i32.const -1) + ) + ) + (block + (set_local $i8 + (get_local $i7) + ) + (set_local $i9 + (i32.const 4) + ) + ) + ) + (block $do-once + (if + (i32.eq + (get_local $i9) + (i32.const 4) + ) + (block + (set_local $i7 + (i32.add + (get_local $i1) + (i32.const 20) + ) + ) + (set_local $i6 + (i32.load + (get_local $i7) + ) + ) + (if + (if (result i32) + (i32.lt_u + (get_local $i6) + (get_local $i8) + ) + (block (result i32) + (set_local $i11 + (i32.and + (get_local $i2) + (i32.const 255) + ) + ) + (i32.ne + (get_local $i11) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 75) + ) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $i7) + (i32.add + (get_local $i6) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $i6) + (get_local $i5) + ) + (set_local $i10 + (get_local $i11) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (call_indirect (type $FUNCSIG$iiii) + (get_local $i1) + (get_local $i4) + (i32.const 1) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $i1) + (i32.const 36) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + (i32.const 1) + ) + (set_local $i10 + (i32.load8_u + (get_local $i4) + ) + ) + (set_local $i10 + (i32.const -1) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $i3) + ) + (return + (get_local $i10) + ) + ) + (func $___fflush_unlocked (; 22 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (set_local $i2 + (i32.add + (get_local $i1) + (i32.const 20) + ) + ) + (set_local $i3 + (i32.add + (get_local $i1) + (i32.const 28) + ) + ) + (if + (if (result i32) + (i32.gt_u + (i32.load + (get_local $i2) + ) + (i32.load + (get_local $i3) + ) + ) + (block (result i32) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $i1) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $i1) + (i32.const 36) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (i32.eq + (i32.load + (get_local $i2) + ) + (i32.const 0) + ) + ) + (i32.const 0) + ) + (set_local $i4 + (i32.const -1) + ) + (block + (set_local $i5 + (i32.add + (get_local $i1) + (i32.const 4) + ) + ) + (set_local $i6 + (i32.load + (get_local $i5) + ) + ) + (set_local $i7 + (i32.add + (get_local $i1) + (i32.const 8) + ) + ) + (set_local $i8 + (i32.load + (get_local $i7) + ) + ) + (if + (i32.lt_u + (get_local $i6) + (get_local $i8) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $i1) + (i32.sub + (get_local $i6) + (get_local $i8) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $i1) + (i32.const 40) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 16) + ) + (i32.const 0) + ) + (i32.store + (get_local $i3) + (i32.const 0) + ) + (i32.store + (get_local $i2) + (i32.const 0) + ) + (i32.store + (get_local $i7) + (i32.const 0) + ) + (i32.store + (get_local $i5) + (i32.const 0) + ) + (set_local $i4 + (i32.const 0) + ) + ) + ) + (return + (get_local $i4) + ) + ) + (func $_memcpy (; 23 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (if + (i32.ge_s + (get_local $i3) + (i32.const 4096) + ) + (return + (call $_emscripten_memcpy_big + (get_local $i1) + (get_local $i2) + (get_local $i3) + ) + ) + ) + (set_local $i4 + (get_local $i1) + ) + (if + (i32.eq + (i32.and + (get_local $i1) + (i32.const 3) + ) + (i32.and + (get_local $i2) + (i32.const 3) + ) + ) + (block + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.and + (get_local $i1) + (i32.const 3) + ) + ) + (br $while-out) + ) + (block + (if + (i32.eqz + (get_local $i3) + ) + (return + (get_local $i4) + ) + ) + (i32.store8 + (get_local $i1) + (i32.load8_s + (get_local $i2) + ) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + (set_local $i2 + (i32.add + (get_local $i2) + (i32.const 1) + ) + ) + (set_local $i3 + (i32.sub + (get_local $i3) + (i32.const 1) + ) + ) + ) + (br $while-in) + ) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eqz + (i32.ge_s + (get_local $i3) + (i32.const 4) + ) + ) + (br $while-out0) + ) + (block + (i32.store + (get_local $i1) + (i32.load + (get_local $i2) + ) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 4) + ) + ) + (set_local $i2 + (i32.add + (get_local $i2) + (i32.const 4) + ) + ) + (set_local $i3 + (i32.sub + (get_local $i3) + (i32.const 4) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eqz + (i32.gt_s + (get_local $i3) + (i32.const 0) + ) + ) + (br $while-out2) + ) + (block + (i32.store8 + (get_local $i1) + (i32.load8_s + (get_local $i2) + ) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + (set_local $i2 + (i32.add + (get_local $i2) + (i32.const 1) + ) + ) + (set_local $i3 + (i32.sub + (get_local $i3) + (i32.const 1) + ) + ) + ) + (br $while-in3) + ) + ) + (return + (get_local $i4) + ) + ) + (func $runPostSets (; 24 ;) + (nop) + ) + (func $_memset (; 25 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (set_local $i4 + (i32.add + (get_local $i1) + (get_local $i3) + ) + ) + (if + (i32.ge_s + (get_local $i3) + (i32.const 20) + ) + (block + (set_local $i2 + (i32.and + (get_local $i2) + (i32.const 255) + ) + ) + (set_local $i5 + (i32.and + (get_local $i1) + (i32.const 3) + ) + ) + (set_local $i6 + (i32.or + (i32.or + (i32.or + (get_local $i2) + (i32.shl + (get_local $i2) + (i32.const 8) + ) + ) + (i32.shl + (get_local $i2) + (i32.const 16) + ) + ) + (i32.shl + (get_local $i2) + (i32.const 24) + ) + ) + ) + (set_local $i7 + (i32.and + (get_local $i4) + (i32.xor + (i32.const 3) + (i32.const -1) + ) + ) + ) + (if + (get_local $i5) + (block + (set_local $i5 + (i32.sub + (i32.add + (get_local $i1) + (i32.const 4) + ) + (get_local $i5) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.lt_s + (get_local $i1) + (get_local $i5) + ) + ) + (br $while-out) + ) + (block + (i32.store8 + (get_local $i1) + (get_local $i2) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + ) + (br $while-in) + ) + ) + ) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eqz + (i32.lt_s + (get_local $i1) + (get_local $i7) + ) + ) + (br $while-out0) + ) + (block + (i32.store + (get_local $i1) + (get_local $i6) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 4) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eqz + (i32.lt_s + (get_local $i1) + (get_local $i4) + ) + ) + (br $while-out2) + ) + (block + (i32.store8 + (get_local $i1) + (get_local $i2) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + ) + (br $while-in3) + ) + ) + (return + (i32.sub + (get_local $i1) + (get_local $i3) + ) + ) + ) + (func $_puts (; 26 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (set_local $i2 + (i32.load + (i32.const 52) + ) + ) + (if + (i32.gt_s + (i32.load + (i32.add + (get_local $i2) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (set_local $i3 + (call $___lockfile + (get_local $i2) + ) + ) + (set_local $i3 + (i32.const 0) + ) + ) + (block $do-once + (if + (i32.lt_s + (call $_fputs + (get_local $i1) + (get_local $i2) + ) + (i32.const 0) + ) + (set_local $i4 + (i32.const 1) + ) + (block + (if + (if (result i32) + (i32.ne + (i32.load8_s + (i32.add + (get_local $i2) + (i32.const 75) + ) + ) + (i32.const 10) + ) + (block (result i32) + (set_local $i5 + (i32.add + (get_local $i2) + (i32.const 20) + ) + ) + (block (result i32) + (set_local $i6 + (i32.load + (get_local $i5) + ) + ) + (i32.lt_u + (get_local $i6) + (i32.load + (i32.add + (get_local $i2) + (i32.const 16) + ) + ) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $i5) + (i32.add + (get_local $i6) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $i6) + (i32.const 10) + ) + (set_local $i4 + (i32.const 0) + ) + (br $do-once) + ) + ) + (set_local $i4 + (i32.lt_s + (call $___overflow + (get_local $i2) + (i32.const 10) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (if + (get_local $i3) + (call $___unlockfile + (get_local $i2) + ) + ) + (return + (i32.shr_s + (i32.shl + (get_local $i4) + (i32.const 31) + ) + (i32.const 31) + ) + ) + ) + (func $___stdio_seek (; 27 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (set_local $i4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (set_local $i5 + (get_local $i4) + ) + (set_local $i6 + (i32.add + (get_local $i4) + (i32.const 20) + ) + ) + (i32.store + (get_local $i5) + (i32.load + (i32.add + (get_local $i1) + (i32.const 60) + ) + ) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 8) + ) + (get_local $i2) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 12) + ) + (get_local $i6) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 16) + ) + (get_local $i3) + ) + (if + (i32.lt_s + (call $___syscall_ret + (call $___syscall140 + (i32.const 140) + (get_local $i5) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $i6) + (i32.const -1) + ) + (set_local $i7 + (i32.const -1) + ) + ) + (set_local $i7 + (i32.load + (get_local $i6) + ) + ) + ) + (set_global $STACKTOP + (get_local $i4) + ) + (return + (get_local $i7) + ) + ) + (func $___towrite (; 28 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (set_local $i2 + (i32.add + (get_local $i1) + (i32.const 74) + ) + ) + (set_local $i3 + (i32.load8_s + (get_local $i2) + ) + ) + (i32.store8 + (get_local $i2) + (i32.or + (i32.add + (get_local $i3) + (i32.const 255) + ) + (get_local $i3) + ) + ) + (set_local $i3 + (i32.load + (get_local $i1) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $i3) + (i32.const 8) + ) + ) + (block + (i32.store + (i32.add + (get_local $i1) + (i32.const 8) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 4) + ) + (i32.const 0) + ) + (set_local $i2 + (i32.load + (i32.add + (get_local $i1) + (i32.const 44) + ) + ) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 28) + ) + (get_local $i2) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 20) + ) + (get_local $i2) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 16) + ) + (i32.add + (get_local $i2) + (i32.load + (i32.add + (get_local $i1) + (i32.const 48) + ) + ) + ) + ) + (set_local $i4 + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $i1) + (i32.or + (get_local $i3) + (i32.const 32) + ) + ) + (set_local $i4 + (i32.const -1) + ) + ) + ) + (return + (get_local $i4) + ) + ) + (func $_fwrite (; 29 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (param $i4 i32) (result i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (set_local $i5 + (i32.mul + (get_local $i3) + (get_local $i2) + ) + ) + (if + (i32.gt_s + (i32.load + (i32.add + (get_local $i4) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (block + (set_local $i6 + (i32.eq + (call $___lockfile + (get_local $i4) + ) + (i32.const 0) + ) + ) + (set_local $i7 + (call $___fwritex + (get_local $i1) + (get_local $i5) + (get_local $i4) + ) + ) + (if + (get_local $i6) + (set_local $i8 + (get_local $i7) + ) + (block + (call $___unlockfile + (get_local $i4) + ) + (set_local $i8 + (get_local $i7) + ) + ) + ) + ) + (set_local $i8 + (call $___fwritex + (get_local $i1) + (get_local $i5) + (get_local $i4) + ) + ) + ) + (if + (i32.eq + (get_local $i8) + (get_local $i5) + ) + (set_local $i9 + (get_local $i3) + ) + (set_local $i9 + (i32.div_u + (get_local $i8) + (get_local $i2) + ) + ) + ) + (return + (get_local $i9) + ) + ) + (func $___stdout_write (; 30 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (local $i5 i32) + (set_local $i4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 80) + ) + ) + (set_local $i5 + (get_local $i4) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 36) + ) + (i32.const 5) + ) + (if + (if (result i32) + (i32.eq + (i32.and + (i32.load + (get_local $i1) + ) + (i32.const 64) + ) + (i32.const 0) + ) + (block (result i32) + (i32.store + (get_local $i5) + (i32.load + (i32.add + (get_local $i1) + (i32.const 60) + ) + ) + ) + (block (result i32) + (i32.store + (i32.add + (get_local $i5) + (i32.const 4) + ) + (i32.const 21505) + ) + (block (result i32) + (i32.store + (i32.add + (get_local $i5) + (i32.const 8) + ) + (i32.add + (get_local $i4) + (i32.const 12) + ) + ) + (i32.ne + (call $___syscall54 + (i32.const 54) + (get_local $i5) + ) + (i32.const 0) + ) + ) + ) + ) + (i32.const 0) + ) + (i32.store8 + (i32.add + (get_local $i1) + (i32.const 75) + ) + (i32.const -1) + ) + ) + (set_local $i5 + (call $___stdio_write + (get_local $i1) + (get_local $i2) + (get_local $i3) + ) + ) + (set_global $STACKTOP + (get_local $i4) + ) + (return + (get_local $i5) + ) + ) + (func $copyTempDouble (; 31 ;) (param $i1 i32) + (i32.store8 + (get_global $tempDoublePtr) + (i32.load8_s + (get_local $i1) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 1) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 2) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 2) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 3) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 3) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 4) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 4) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 5) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 5) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 6) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 6) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 7) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 7) + ) + ) + ) + ) + (func $___stdio_close (; 32 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (set_local $i2 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $i3 + (get_local $i2) + ) + (i32.store + (get_local $i3) + (i32.load + (i32.add + (get_local $i1) + (i32.const 60) + ) + ) + ) + (set_local $i1 + (call $___syscall_ret + (call $___syscall6 + (i32.const 6) + (get_local $i3) + ) + ) + ) + (set_global $STACKTOP + (get_local $i2) + ) + (return + (get_local $i1) + ) + ) + (func $copyTempFloat (; 33 ;) (param $i1 i32) + (i32.store8 + (get_global $tempDoublePtr) + (i32.load8_s + (get_local $i1) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 1) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 2) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 2) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 3) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 3) + ) + ) + ) + ) + (func $___syscall_ret (; 34 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (if + (i32.gt_u + (get_local $i1) + (i32.const -4096) + ) + (block + (i32.store + (call $___errno_location) + (i32.sub + (i32.const 0) + (get_local $i1) + ) + ) + (set_local $i2 + (i32.const -1) + ) + ) + (set_local $i2 + (get_local $i1) + ) + ) + (return + (get_local $i2) + ) + ) + (func $dynCall_iiii (; 35 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (param $i4 i32) (result i32) + (return + (call_indirect (type $FUNCSIG$iiii) + (get_local $i2) + (get_local $i3) + (get_local $i4) + (i32.add + (i32.and + (get_local $i1) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (func $stackAlloc (; 36 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (set_local $i2 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $i1) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (return + (get_local $i2) + ) + ) + (func $___errno_location (; 37 ;) (result i32) + (local $i1 i32) + (if + (i32.eqz + (i32.load + (i32.const 8) + ) + ) + (set_local $i1 + (i32.const 60) + ) + (set_local $i1 + (i32.load + (i32.add + (call $_pthread_self) + (i32.const 60) + ) + ) + ) + ) + (return + (get_local $i1) + ) + ) + (func $setThrew (; 38 ;) (param $i1 i32) (param $i2 i32) + (if + (i32.eqz + (get_global $__THREW__) + ) + (block + (set_global $__THREW__ + (get_local $i1) + ) + (set_global $threwValue + (get_local $i2) + ) + ) + ) + ) + (func $_fputs (; 39 ;) (param $i1 i32) (param $i2 i32) (result i32) + (return + (i32.add + (call $_fwrite + (get_local $i1) + (call $_strlen + (get_local $i1) + ) + (i32.const 1) + (get_local $i2) + ) + (i32.const -1) + ) + ) + ) + (func $dynCall_ii (; 40 ;) (param $i1 i32) (param $i2 i32) (result i32) + (return + (call_indirect (type $FUNCSIG$ii) + (get_local $i2) + (i32.add + (i32.and + (get_local $i1) + (i32.const 1) + ) + (i32.const 0) + ) + ) + ) + ) + (func $_cleanup_418 (; 41 ;) (param $i1 i32) + (if + (i32.eqz + (i32.load + (i32.add + (get_local $i1) + (i32.const 68) + ) + ) + ) + (call $___unlockfile + (get_local $i1) + ) + ) + (return) + ) + (func $establishStackSpace (; 42 ;) (param $i1 i32) (param $i2 i32) + (set_global $STACKTOP + (get_local $i1) + ) + (set_global $STACK_MAX + (get_local $i2) + ) + ) + (func $dynCall_vi (; 43 ;) (param $i1 i32) (param $i2 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $i2) + (i32.add + (i32.and + (get_local $i1) + (i32.const 7) + ) + (i32.const 10) + ) + ) + ) + (func $b1 (; 44 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (call $abort + (i32.const 1) + ) + (return + (i32.const 0) + ) + ) + (func $stackRestore (; 45 ;) (param $i1 i32) + (set_global $STACKTOP + (get_local $i1) + ) + ) + (func $setTempRet0 (; 46 ;) (param $i1 i32) + (set_global $tempRet0 + (get_local $i1) + ) + ) + (func $b0 (; 47 ;) (param $i1 i32) (result i32) + (call $abort + (i32.const 0) + ) + (return + (i32.const 0) + ) + ) + (func $___unlockfile (; 48 ;) (param $i1 i32) + (return) + ) + (func $___lockfile (; 49 ;) (param $i1 i32) (result i32) + (return + (i32.const 0) + ) + ) + (func $getTempRet0 (; 50 ;) (result i32) + (return + (get_global $tempRet0) + ) + ) + (func $_main (; 51 ;) (result i32) + (drop + (call $_puts + (i32.const 672) + ) + ) + (return + (i32.const 0) + ) + ) + (func $stackSave (; 52 ;) (result i32) + (return + (get_global $STACKTOP) + ) + ) + (func $b2 (; 53 ;) (param $i1 i32) + (call $abort + (i32.const 2) + ) + ) +) diff --git a/src/binaryen/test/emcc_O2_hello_world.fromasm.no-opts b/src/binaryen/test/emcc_O2_hello_world.fromasm.no-opts new file mode 100644 index 0000000000..52192d925d --- /dev/null +++ b/src/binaryen/test/emcc_O2_hello_world.fromasm.no-opts @@ -0,0 +1,11942 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "ABORT" (global $ABORT$asm2wasm$import i32)) + (import "global" "NaN" (global $nan$asm2wasm$import f64)) + (import "global" "Infinity" (global $inf$asm2wasm$import f64)) + (import "env" "abort" (func $abort (param i32))) + (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) + (import "env" "_pthread_self" (func $_pthread_self (result i32))) + (import "env" "_sysconf" (func $_sysconf (param i32) (result i32))) + (import "env" "___lock" (func $___lock (param i32))) + (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) + (import "env" "_abort" (func $_abort)) + (import "env" "_sbrk" (func $_sbrk (param i32) (result i32))) + (import "env" "_time" (func $_time (param i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) + (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $___unlock (param i32))) + (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) + (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 18 18 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $ABORT (mut i32) (get_global $ABORT$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $setjmpId (mut i32) (i32.const 0)) + (global $undef (mut i32) (i32.const 0)) + (global $nan (mut f64) (get_global $nan$asm2wasm$import)) + (global $inf (mut f64) (get_global $inf$asm2wasm$import)) + (global $tempInt (mut i32) (i32.const 0)) + (global $tempBigInt (mut i32) (i32.const 0)) + (global $tempBigIntP (mut i32) (i32.const 0)) + (global $tempBigIntS (mut i32) (i32.const 0)) + (global $tempBigIntR (mut f64) (f64.const 0)) + (global $tempBigIntI (mut i32) (i32.const 0)) + (global $tempBigIntD (mut i32) (i32.const 0)) + (global $tempValue (mut i32) (i32.const 0)) + (global $tempDouble (mut f64) (f64.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (global $tempRet1 (mut i32) (i32.const 0)) + (global $tempRet2 (mut i32) (i32.const 0)) + (global $tempRet3 (mut i32) (i32.const 0)) + (global $tempRet4 (mut i32) (i32.const 0)) + (global $tempRet5 (mut i32) (i32.const 0)) + (global $tempRet6 (mut i32) (i32.const 0)) + (global $tempRet7 (mut i32) (i32.const 0)) + (global $tempRet8 (mut i32) (i32.const 0)) + (global $tempRet9 (mut i32) (i32.const 0)) + (global $tempFloat (mut f64) (f64.const 0)) + (elem (get_global $tableBase) $b0 $___stdio_close $b1 $b1 $___stdout_write $___stdio_seek $b1 $___stdio_write $b1 $b1 $b2 $b2 $b2 $b2 $_cleanup_418 $b2 $b2 $b2) + (export "_free" (func $_free)) + (export "_main" (func $_main)) + (export "_memset" (func $_memset)) + (export "_malloc" (func $_malloc)) + (export "_memcpy" (func $_memcpy)) + (export "_fflush" (func $_fflush)) + (export "___errno_location" (func $___errno_location)) + (export "runPostSets" (func $runPostSets)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackSave" (func $stackSave)) + (export "stackRestore" (func $stackRestore)) + (export "establishStackSpace" (func $establishStackSpace)) + (export "setThrew" (func $setThrew)) + (export "setTempRet0" (func $setTempRet0)) + (export "getTempRet0" (func $getTempRet0)) + (export "dynCall_ii" (func $dynCall_ii)) + (export "dynCall_iiii" (func $dynCall_iiii)) + (export "dynCall_vi" (func $dynCall_vi)) + (func $_malloc (; 15 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (local $i10 i32) + (local $i11 i32) + (local $i12 i32) + (local $i13 i32) + (local $i14 i32) + (local $i15 i32) + (local $i16 i32) + (local $i17 i32) + (local $i18 i32) + (local $i19 i32) + (local $i20 i32) + (local $i21 i32) + (local $i22 i32) + (local $i23 i32) + (local $i24 i32) + (local $i25 i32) + (local $i26 i32) + (local $i27 i32) + (local $i28 i32) + (local $i29 i32) + (local $i30 i32) + (local $i31 i32) + (local $i32 i32) + (local $i33 i32) + (local $i34 i32) + (local $i35 i32) + (local $i36 i32) + (local $i37 i32) + (local $i38 i32) + (local $i39 i32) + (local $i40 i32) + (local $i41 i32) + (local $i42 i32) + (local $i43 i32) + (local $i44 i32) + (local $i45 i32) + (local $i46 i32) + (local $i47 i32) + (local $i48 i32) + (local $i49 i32) + (local $i50 i32) + (local $i51 i32) + (local $i52 i32) + (local $i53 i32) + (local $i54 i32) + (local $i55 i32) + (local $i56 i32) + (local $i57 i32) + (local $i58 i32) + (local $i59 i32) + (local $i60 i32) + (local $i61 i32) + (local $i62 i32) + (local $i63 i32) + (local $i64 i32) + (local $i65 i32) + (local $i66 i32) + (local $i67 i32) + (local $i68 i32) + (local $i69 i32) + (local $i70 i32) + (local $i71 i32) + (local $i72 i32) + (local $i73 i32) + (local $i74 i32) + (local $i75 i32) + (local $i76 i32) + (local $i77 i32) + (local $i78 i32) + (local $i79 i32) + (local $i80 i32) + (local $i81 i32) + (local $i82 i32) + (local $i83 i32) + (local $i84 i32) + (local $i85 i32) + (local $i86 i32) + (local $i87 i32) + (local $i88 i32) + (local $i89 i32) + (local $i90 i32) + (local $i91 i32) + (local $i92 i32) + (block $do-once + (if + (i32.lt_u + (get_local $i1) + (i32.const 245) + ) + (block + (set_local $i2 + (if (result i32) + (i32.lt_u + (get_local $i1) + (i32.const 11) + ) + (i32.const 16) + (i32.and + (i32.add + (get_local $i1) + (i32.const 11) + ) + (i32.const -8) + ) + ) + ) + (set_local $i3 + (i32.shr_u + (get_local $i2) + (i32.const 3) + ) + ) + (set_local $i4 + (i32.load + (i32.const 176) + ) + ) + (set_local $i5 + (i32.shr_u + (get_local $i4) + (get_local $i3) + ) + ) + (if + (i32.and + (get_local $i5) + (i32.const 3) + ) + (block + (set_local $i6 + (i32.add + (i32.xor + (i32.and + (get_local $i5) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $i3) + ) + ) + (set_local $i7 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i6) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i8 + (i32.add + (get_local $i7) + (i32.const 8) + ) + ) + (set_local $i9 + (i32.load + (get_local $i8) + ) + ) + (set_local $i10 + (i32.add + (get_local $i9) + (i32.const 8) + ) + ) + (set_local $i11 + (i32.load + (get_local $i10) + ) + ) + (block $do-once0 + (if + (i32.ne + (get_local $i7) + (get_local $i11) + ) + (block + (if + (i32.lt_u + (get_local $i11) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i12 + (i32.add + (get_local $i11) + (i32.const 12) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i12) + ) + (get_local $i9) + ) + (block + (i32.store + (get_local $i12) + (get_local $i7) + ) + (i32.store + (get_local $i8) + (get_local $i11) + ) + (br $do-once0) + ) + (call $_abort) + ) + ) + (i32.store + (i32.const 176) + (i32.and + (get_local $i4) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i6) + ) + (i32.const -1) + ) + ) + ) + ) + ) + (set_local $i11 + (i32.shl + (get_local $i6) + (i32.const 3) + ) + ) + (i32.store + (i32.add + (get_local $i9) + (i32.const 4) + ) + (i32.or + (get_local $i11) + (i32.const 3) + ) + ) + (set_local $i8 + (i32.add + (i32.add + (get_local $i9) + (get_local $i11) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $i8) + (i32.or + (i32.load + (get_local $i8) + ) + (i32.const 1) + ) + ) + (set_local $i13 + (get_local $i10) + ) + (return + (get_local $i13) + ) + ) + ) + (set_local $i8 + (i32.load + (i32.const 184) + ) + ) + (if + (i32.gt_u + (get_local $i2) + (get_local $i8) + ) + (block + (if + (get_local $i5) + (block + (set_local $i11 + (i32.shl + (i32.const 2) + (get_local $i3) + ) + ) + (set_local $i7 + (i32.and + (i32.shl + (get_local $i5) + (get_local $i3) + ) + (i32.or + (get_local $i11) + (i32.sub + (i32.const 0) + (get_local $i11) + ) + ) + ) + ) + (set_local $i11 + (i32.add + (i32.and + (get_local $i7) + (i32.sub + (i32.const 0) + (get_local $i7) + ) + ) + (i32.const -1) + ) + ) + (set_local $i7 + (i32.and + (i32.shr_u + (get_local $i11) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $i12 + (i32.shr_u + (get_local $i11) + (get_local $i7) + ) + ) + (set_local $i11 + (i32.and + (i32.shr_u + (get_local $i12) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $i14 + (i32.shr_u + (get_local $i12) + (get_local $i11) + ) + ) + (set_local $i12 + (i32.and + (i32.shr_u + (get_local $i14) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $i15 + (i32.shr_u + (get_local $i14) + (get_local $i12) + ) + ) + (set_local $i14 + (i32.and + (i32.shr_u + (get_local $i15) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $i16 + (i32.shr_u + (get_local $i15) + (get_local $i14) + ) + ) + (set_local $i15 + (i32.and + (i32.shr_u + (get_local $i16) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $i17 + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $i11) + (get_local $i7) + ) + (get_local $i12) + ) + (get_local $i14) + ) + (get_local $i15) + ) + (i32.shr_u + (get_local $i16) + (get_local $i15) + ) + ) + ) + (set_local $i15 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i17) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i16 + (i32.add + (get_local $i15) + (i32.const 8) + ) + ) + (set_local $i14 + (i32.load + (get_local $i16) + ) + ) + (set_local $i12 + (i32.add + (get_local $i14) + (i32.const 8) + ) + ) + (set_local $i7 + (i32.load + (get_local $i12) + ) + ) + (block $do-once2 + (if + (i32.ne + (get_local $i15) + (get_local $i7) + ) + (block + (if + (i32.lt_u + (get_local $i7) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i11 + (i32.add + (get_local $i7) + (i32.const 12) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i11) + ) + (get_local $i14) + ) + (block + (i32.store + (get_local $i11) + (get_local $i15) + ) + (i32.store + (get_local $i16) + (get_local $i7) + ) + (set_local $i18 + (i32.load + (i32.const 184) + ) + ) + (br $do-once2) + ) + (call $_abort) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (get_local $i4) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i17) + ) + (i32.const -1) + ) + ) + ) + (set_local $i18 + (get_local $i8) + ) + ) + ) + ) + (set_local $i8 + (i32.sub + (i32.shl + (get_local $i17) + (i32.const 3) + ) + (get_local $i2) + ) + ) + (i32.store + (i32.add + (get_local $i14) + (i32.const 4) + ) + (i32.or + (get_local $i2) + (i32.const 3) + ) + ) + (set_local $i4 + (i32.add + (get_local $i14) + (get_local $i2) + ) + ) + (i32.store + (i32.add + (get_local $i4) + (i32.const 4) + ) + (i32.or + (get_local $i8) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i4) + (get_local $i8) + ) + (get_local $i8) + ) + (if + (get_local $i18) + (block + (set_local $i7 + (i32.load + (i32.const 196) + ) + ) + (set_local $i16 + (i32.shr_u + (get_local $i18) + (i32.const 3) + ) + ) + (set_local $i15 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i16) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i3 + (i32.load + (i32.const 176) + ) + ) + (set_local $i5 + (i32.shl + (i32.const 1) + (get_local $i16) + ) + ) + (if + (i32.and + (get_local $i3) + (get_local $i5) + ) + (block + (set_local $i16 + (i32.add + (get_local $i15) + (i32.const 8) + ) + ) + (set_local $i10 + (i32.load + (get_local $i16) + ) + ) + (if + (i32.lt_u + (get_local $i10) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $i19 + (get_local $i16) + ) + (set_local $i20 + (get_local $i10) + ) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i3) + (get_local $i5) + ) + ) + (set_local $i19 + (i32.add + (get_local $i15) + (i32.const 8) + ) + ) + (set_local $i20 + (get_local $i15) + ) + ) + ) + (i32.store + (get_local $i19) + (get_local $i7) + ) + (i32.store + (i32.add + (get_local $i20) + (i32.const 12) + ) + (get_local $i7) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 8) + ) + (get_local $i20) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 12) + ) + (get_local $i15) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $i8) + ) + (i32.store + (i32.const 196) + (get_local $i4) + ) + (set_local $i13 + (get_local $i12) + ) + (return + (get_local $i13) + ) + ) + ) + (set_local $i4 + (i32.load + (i32.const 180) + ) + ) + (if + (get_local $i4) + (block + (set_local $i8 + (i32.add + (i32.and + (get_local $i4) + (i32.sub + (i32.const 0) + (get_local $i4) + ) + ) + (i32.const -1) + ) + ) + (set_local $i4 + (i32.and + (i32.shr_u + (get_local $i8) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $i15 + (i32.shr_u + (get_local $i8) + (get_local $i4) + ) + ) + (set_local $i8 + (i32.and + (i32.shr_u + (get_local $i15) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $i7 + (i32.shr_u + (get_local $i15) + (get_local $i8) + ) + ) + (set_local $i15 + (i32.and + (i32.shr_u + (get_local $i7) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $i5 + (i32.shr_u + (get_local $i7) + (get_local $i15) + ) + ) + (set_local $i7 + (i32.and + (i32.shr_u + (get_local $i5) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $i3 + (i32.shr_u + (get_local $i5) + (get_local $i7) + ) + ) + (set_local $i5 + (i32.and + (i32.shr_u + (get_local $i3) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $i10 + (i32.load + (i32.add + (i32.const 480) + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $i8) + (get_local $i4) + ) + (get_local $i15) + ) + (get_local $i7) + ) + (get_local $i5) + ) + (i32.shr_u + (get_local $i3) + (get_local $i5) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $i5 + (i32.sub + (i32.and + (i32.load + (i32.add + (get_local $i10) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i2) + ) + ) + (set_local $i3 + (get_local $i10) + ) + (set_local $i7 + (get_local $i10) + ) + (loop $while-in + (block $while-out + (set_local $i10 + (i32.load + (i32.add + (get_local $i3) + (i32.const 16) + ) + ) + ) + (if + (i32.eqz + (get_local $i10) + ) + (block + (set_local $i15 + (i32.load + (i32.add + (get_local $i3) + (i32.const 20) + ) + ) + ) + (if + (i32.eqz + (get_local $i15) + ) + (block + (set_local $i21 + (get_local $i5) + ) + (set_local $i22 + (get_local $i7) + ) + (br $while-out) + ) + (set_local $i23 + (get_local $i15) + ) + ) + ) + (set_local $i23 + (get_local $i10) + ) + ) + (set_local $i10 + (i32.sub + (i32.and + (i32.load + (i32.add + (get_local $i23) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i2) + ) + ) + (set_local $i15 + (i32.lt_u + (get_local $i10) + (get_local $i5) + ) + ) + (set_local $i5 + (if (result i32) + (get_local $i15) + (get_local $i10) + (get_local $i5) + ) + ) + (set_local $i3 + (get_local $i23) + ) + (set_local $i7 + (if (result i32) + (get_local $i15) + (get_local $i23) + (get_local $i7) + ) + ) + (br $while-in) + ) + ) + (set_local $i7 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i22) + (get_local $i7) + ) + (call $_abort) + ) + (set_local $i3 + (i32.add + (get_local $i22) + (get_local $i2) + ) + ) + (if + (i32.ge_u + (get_local $i22) + (get_local $i3) + ) + (call $_abort) + ) + (set_local $i5 + (i32.load + (i32.add + (get_local $i22) + (i32.const 24) + ) + ) + ) + (set_local $i12 + (i32.load + (i32.add + (get_local $i22) + (i32.const 12) + ) + ) + ) + (block $do-once4 + (if + (i32.eq + (get_local $i12) + (get_local $i22) + ) + (block + (set_local $i14 + (i32.add + (get_local $i22) + (i32.const 20) + ) + ) + (set_local $i17 + (i32.load + (get_local $i14) + ) + ) + (if + (i32.eqz + (get_local $i17) + ) + (block + (set_local $i15 + (i32.add + (get_local $i22) + (i32.const 16) + ) + ) + (set_local $i10 + (i32.load + (get_local $i15) + ) + ) + (if + (i32.eqz + (get_local $i10) + ) + (block + (set_local $i24 + (i32.const 0) + ) + (br $do-once4) + ) + (block + (set_local $i25 + (get_local $i10) + ) + (set_local $i26 + (get_local $i15) + ) + ) + ) + ) + (block + (set_local $i25 + (get_local $i17) + ) + (set_local $i26 + (get_local $i14) + ) + ) + ) + (loop $while-in7 + (block $while-out6 + (set_local $i14 + (i32.add + (get_local $i25) + (i32.const 20) + ) + ) + (set_local $i17 + (i32.load + (get_local $i14) + ) + ) + (if + (get_local $i17) + (block + (set_local $i25 + (get_local $i17) + ) + (set_local $i26 + (get_local $i14) + ) + (br $while-in7) + ) + ) + (set_local $i14 + (i32.add + (get_local $i25) + (i32.const 16) + ) + ) + (set_local $i17 + (i32.load + (get_local $i14) + ) + ) + (if + (i32.eqz + (get_local $i17) + ) + (block + (set_local $i27 + (get_local $i25) + ) + (set_local $i28 + (get_local $i26) + ) + (br $while-out6) + ) + (block + (set_local $i25 + (get_local $i17) + ) + (set_local $i26 + (get_local $i14) + ) + ) + ) + (br $while-in7) + ) + ) + (if + (i32.lt_u + (get_local $i28) + (get_local $i7) + ) + (call $_abort) + (block + (i32.store + (get_local $i28) + (i32.const 0) + ) + (set_local $i24 + (get_local $i27) + ) + (br $do-once4) + ) + ) + ) + (block + (set_local $i14 + (i32.load + (i32.add + (get_local $i22) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $i14) + (get_local $i7) + ) + (call $_abort) + ) + (set_local $i17 + (i32.add + (get_local $i14) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $i17) + ) + (get_local $i22) + ) + (call $_abort) + ) + (set_local $i15 + (i32.add + (get_local $i12) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i15) + ) + (get_local $i22) + ) + (block + (i32.store + (get_local $i17) + (get_local $i12) + ) + (i32.store + (get_local $i15) + (get_local $i14) + ) + (set_local $i24 + (get_local $i12) + ) + (br $do-once4) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once8 + (if + (get_local $i5) + (block + (set_local $i12 + (i32.load + (i32.add + (get_local $i22) + (i32.const 28) + ) + ) + ) + (set_local $i7 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i12) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $i22) + (i32.load + (get_local $i7) + ) + ) + (block + (i32.store + (get_local $i7) + (get_local $i24) + ) + (if + (i32.eqz + (get_local $i24) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i12) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $i5) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i12 + (i32.add + (get_local $i5) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i12) + ) + (get_local $i22) + ) + (i32.store + (get_local $i12) + (get_local $i24) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 20) + ) + (get_local $i24) + ) + ) + (if + (i32.eqz + (get_local $i24) + ) + (br $do-once8) + ) + ) + ) + (set_local $i12 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i24) + (get_local $i12) + ) + (call $_abort) + ) + (i32.store + (i32.add + (get_local $i24) + (i32.const 24) + ) + (get_local $i5) + ) + (set_local $i7 + (i32.load + (i32.add + (get_local $i22) + (i32.const 16) + ) + ) + ) + (block $do-once10 + (if + (get_local $i7) + (if + (i32.lt_u + (get_local $i7) + (get_local $i12) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i24) + (i32.const 16) + ) + (get_local $i7) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 24) + ) + (get_local $i24) + ) + (br $do-once10) + ) + ) + ) + ) + (set_local $i7 + (i32.load + (i32.add + (get_local $i22) + (i32.const 20) + ) + ) + ) + (if + (get_local $i7) + (if + (i32.lt_u + (get_local $i7) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i24) + (i32.const 20) + ) + (get_local $i7) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 24) + ) + (get_local $i24) + ) + (br $do-once8) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $i21) + (i32.const 16) + ) + (block + (set_local $i5 + (i32.add + (get_local $i21) + (get_local $i2) + ) + ) + (i32.store + (i32.add + (get_local $i22) + (i32.const 4) + ) + (i32.or + (get_local $i5) + (i32.const 3) + ) + ) + (set_local $i7 + (i32.add + (i32.add + (get_local $i22) + (get_local $i5) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $i7) + (i32.or + (i32.load + (get_local $i7) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store + (i32.add + (get_local $i22) + (i32.const 4) + ) + (i32.or + (get_local $i2) + (i32.const 3) + ) + ) + (i32.store + (i32.add + (get_local $i3) + (i32.const 4) + ) + (i32.or + (get_local $i21) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i3) + (get_local $i21) + ) + (get_local $i21) + ) + (set_local $i7 + (i32.load + (i32.const 184) + ) + ) + (if + (get_local $i7) + (block + (set_local $i5 + (i32.load + (i32.const 196) + ) + ) + (set_local $i12 + (i32.shr_u + (get_local $i7) + (i32.const 3) + ) + ) + (set_local $i7 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i12) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i14 + (i32.load + (i32.const 176) + ) + ) + (set_local $i15 + (i32.shl + (i32.const 1) + (get_local $i12) + ) + ) + (if + (i32.and + (get_local $i14) + (get_local $i15) + ) + (block + (set_local $i12 + (i32.add + (get_local $i7) + (i32.const 8) + ) + ) + (set_local $i17 + (i32.load + (get_local $i12) + ) + ) + (if + (i32.lt_u + (get_local $i17) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $i29 + (get_local $i12) + ) + (set_local $i30 + (get_local $i17) + ) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i14) + (get_local $i15) + ) + ) + (set_local $i29 + (i32.add + (get_local $i7) + (i32.const 8) + ) + ) + (set_local $i30 + (get_local $i7) + ) + ) + ) + (i32.store + (get_local $i29) + (get_local $i5) + ) + (i32.store + (i32.add + (get_local $i30) + (i32.const 12) + ) + (get_local $i5) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 8) + ) + (get_local $i30) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 12) + ) + (get_local $i7) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $i21) + ) + (i32.store + (i32.const 196) + (get_local $i3) + ) + ) + ) + (set_local $i13 + (i32.add + (get_local $i22) + (i32.const 8) + ) + ) + (return + (get_local $i13) + ) + ) + (set_local $i31 + (get_local $i2) + ) + ) + ) + (set_local $i31 + (get_local $i2) + ) + ) + ) + (if + (i32.le_u + (get_local $i1) + (i32.const -65) + ) + (block + (set_local $i7 + (i32.add + (get_local $i1) + (i32.const 11) + ) + ) + (set_local $i5 + (i32.and + (get_local $i7) + (i32.const -8) + ) + ) + (set_local $i15 + (i32.load + (i32.const 180) + ) + ) + (if + (get_local $i15) + (block + (set_local $i14 + (i32.sub + (i32.const 0) + (get_local $i5) + ) + ) + (set_local $i17 + (i32.shr_u + (get_local $i7) + (i32.const 8) + ) + ) + (if + (get_local $i17) + (if + (i32.gt_u + (get_local $i5) + (i32.const 16777215) + ) + (set_local $i32 + (i32.const 31) + ) + (block + (set_local $i7 + (i32.and + (i32.shr_u + (i32.add + (get_local $i17) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $i12 + (i32.shl + (get_local $i17) + (get_local $i7) + ) + ) + (set_local $i17 + (i32.and + (i32.shr_u + (i32.add + (get_local $i12) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $i10 + (i32.shl + (get_local $i12) + (get_local $i17) + ) + ) + (set_local $i12 + (i32.and + (i32.shr_u + (i32.add + (get_local $i10) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $i4 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $i17) + (get_local $i7) + ) + (get_local $i12) + ) + ) + (i32.shr_u + (i32.shl + (get_local $i10) + (get_local $i12) + ) + (i32.const 15) + ) + ) + ) + (set_local $i32 + (i32.or + (i32.and + (i32.shr_u + (get_local $i5) + (i32.add + (get_local $i4) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $i4) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i32 + (i32.const 0) + ) + ) + (set_local $i4 + (i32.load + (i32.add + (i32.const 480) + (i32.shl + (get_local $i32) + (i32.const 2) + ) + ) + ) + ) + (block $label$break$L123 + (if + (i32.eqz + (get_local $i4) + ) + (block + (set_local $i33 + (get_local $i14) + ) + (set_local $i34 + (i32.const 0) + ) + (set_local $i35 + (i32.const 0) + ) + (set_local $i36 + (i32.const 86) + ) + ) + (block + (set_local $i12 + (get_local $i14) + ) + (set_local $i10 + (i32.const 0) + ) + (set_local $i7 + (i32.shl + (get_local $i5) + (if (result i32) + (i32.eq + (get_local $i32) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $i32) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i17 + (get_local $i4) + ) + (set_local $i8 + (i32.const 0) + ) + (loop $while-in14 + (block $while-out13 + (set_local $i16 + (i32.and + (i32.load + (i32.add + (get_local $i17) + (i32.const 4) + ) + ) + (i32.const -8) + ) + ) + (set_local $i9 + (i32.sub + (get_local $i16) + (get_local $i5) + ) + ) + (if + (i32.lt_u + (get_local $i9) + (get_local $i12) + ) + (if + (i32.eq + (get_local $i16) + (get_local $i5) + ) + (block + (set_local $i37 + (get_local $i9) + ) + (set_local $i38 + (get_local $i17) + ) + (set_local $i39 + (get_local $i17) + ) + (set_local $i36 + (i32.const 90) + ) + (br $label$break$L123) + ) + (block + (set_local $i40 + (get_local $i9) + ) + (set_local $i41 + (get_local $i17) + ) + ) + ) + (block + (set_local $i40 + (get_local $i12) + ) + (set_local $i41 + (get_local $i8) + ) + ) + ) + (set_local $i9 + (i32.load + (i32.add + (get_local $i17) + (i32.const 20) + ) + ) + ) + (set_local $i17 + (i32.load + (i32.add + (i32.add + (get_local $i17) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $i7) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $i16 + (if (result i32) + (i32.or + (i32.eq + (get_local $i9) + (i32.const 0) + ) + (i32.eq + (get_local $i9) + (get_local $i17) + ) + ) + (get_local $i10) + (get_local $i9) + ) + ) + (set_local $i9 + (i32.eq + (get_local $i17) + (i32.const 0) + ) + ) + (if + (get_local $i9) + (block + (set_local $i33 + (get_local $i40) + ) + (set_local $i34 + (get_local $i16) + ) + (set_local $i35 + (get_local $i41) + ) + (set_local $i36 + (i32.const 86) + ) + (br $while-out13) + ) + (block + (set_local $i12 + (get_local $i40) + ) + (set_local $i10 + (get_local $i16) + ) + (set_local $i7 + (i32.shl + (get_local $i7) + (i32.xor + (i32.and + (get_local $i9) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (set_local $i8 + (get_local $i41) + ) + ) + ) + (br $while-in14) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 86) + ) + (block + (if + (i32.and + (i32.eq + (get_local $i34) + (i32.const 0) + ) + (i32.eq + (get_local $i35) + (i32.const 0) + ) + ) + (block + (set_local $i4 + (i32.shl + (i32.const 2) + (get_local $i32) + ) + ) + (set_local $i14 + (i32.and + (get_local $i15) + (i32.or + (get_local $i4) + (i32.sub + (i32.const 0) + (get_local $i4) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $i14) + ) + (block + (set_local $i31 + (get_local $i5) + ) + (br $do-once) + ) + ) + (set_local $i4 + (i32.add + (i32.and + (get_local $i14) + (i32.sub + (i32.const 0) + (get_local $i14) + ) + ) + (i32.const -1) + ) + ) + (set_local $i14 + (i32.and + (i32.shr_u + (get_local $i4) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $i2 + (i32.shr_u + (get_local $i4) + (get_local $i14) + ) + ) + (set_local $i4 + (i32.and + (i32.shr_u + (get_local $i2) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $i3 + (i32.shr_u + (get_local $i2) + (get_local $i4) + ) + ) + (set_local $i2 + (i32.and + (i32.shr_u + (get_local $i3) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $i8 + (i32.shr_u + (get_local $i3) + (get_local $i2) + ) + ) + (set_local $i3 + (i32.and + (i32.shr_u + (get_local $i8) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $i7 + (i32.shr_u + (get_local $i8) + (get_local $i3) + ) + ) + (set_local $i8 + (i32.and + (i32.shr_u + (get_local $i7) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $i42 + (i32.load + (i32.add + (i32.const 480) + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $i4) + (get_local $i14) + ) + (get_local $i2) + ) + (get_local $i3) + ) + (get_local $i8) + ) + (i32.shr_u + (get_local $i7) + (get_local $i8) + ) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (set_local $i42 + (get_local $i34) + ) + ) + (if + (i32.eqz + (get_local $i42) + ) + (block + (set_local $i43 + (get_local $i33) + ) + (set_local $i44 + (get_local $i35) + ) + ) + (block + (set_local $i37 + (get_local $i33) + ) + (set_local $i38 + (get_local $i42) + ) + (set_local $i39 + (get_local $i35) + ) + (set_local $i36 + (i32.const 90) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 90) + ) + (loop $while-in16 + (block $while-out15 + (set_local $i36 + (i32.const 0) + ) + (set_local $i8 + (i32.sub + (i32.and + (i32.load + (i32.add + (get_local $i38) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i5) + ) + ) + (set_local $i7 + (i32.lt_u + (get_local $i8) + (get_local $i37) + ) + ) + (set_local $i3 + (if (result i32) + (get_local $i7) + (get_local $i8) + (get_local $i37) + ) + ) + (set_local $i8 + (if (result i32) + (get_local $i7) + (get_local $i38) + (get_local $i39) + ) + ) + (set_local $i7 + (i32.load + (i32.add + (get_local $i38) + (i32.const 16) + ) + ) + ) + (if + (get_local $i7) + (block + (set_local $i37 + (get_local $i3) + ) + (set_local $i38 + (get_local $i7) + ) + (set_local $i39 + (get_local $i8) + ) + (set_local $i36 + (i32.const 90) + ) + (br $while-in16) + ) + ) + (set_local $i38 + (i32.load + (i32.add + (get_local $i38) + (i32.const 20) + ) + ) + ) + (if + (i32.eqz + (get_local $i38) + ) + (block + (set_local $i43 + (get_local $i3) + ) + (set_local $i44 + (get_local $i8) + ) + (br $while-out15) + ) + (block + (set_local $i37 + (get_local $i3) + ) + (set_local $i39 + (get_local $i8) + ) + (set_local $i36 + (i32.const 90) + ) + ) + ) + (br $while-in16) + ) + ) + ) + (if + (if (result i32) + (i32.ne + (get_local $i44) + (i32.const 0) + ) + (i32.lt_u + (get_local $i43) + (i32.sub + (i32.load + (i32.const 184) + ) + (get_local $i5) + ) + ) + (i32.const 0) + ) + (block + (set_local $i15 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i44) + (get_local $i15) + ) + (call $_abort) + ) + (set_local $i8 + (i32.add + (get_local $i44) + (get_local $i5) + ) + ) + (if + (i32.ge_u + (get_local $i44) + (get_local $i8) + ) + (call $_abort) + ) + (set_local $i3 + (i32.load + (i32.add + (get_local $i44) + (i32.const 24) + ) + ) + ) + (set_local $i7 + (i32.load + (i32.add + (get_local $i44) + (i32.const 12) + ) + ) + ) + (block $do-once17 + (if + (i32.eq + (get_local $i7) + (get_local $i44) + ) + (block + (set_local $i2 + (i32.add + (get_local $i44) + (i32.const 20) + ) + ) + (set_local $i14 + (i32.load + (get_local $i2) + ) + ) + (if + (i32.eqz + (get_local $i14) + ) + (block + (set_local $i4 + (i32.add + (get_local $i44) + (i32.const 16) + ) + ) + (set_local $i10 + (i32.load + (get_local $i4) + ) + ) + (if + (i32.eqz + (get_local $i10) + ) + (block + (set_local $i45 + (i32.const 0) + ) + (br $do-once17) + ) + (block + (set_local $i46 + (get_local $i10) + ) + (set_local $i47 + (get_local $i4) + ) + ) + ) + ) + (block + (set_local $i46 + (get_local $i14) + ) + (set_local $i47 + (get_local $i2) + ) + ) + ) + (loop $while-in20 + (block $while-out19 + (set_local $i2 + (i32.add + (get_local $i46) + (i32.const 20) + ) + ) + (set_local $i14 + (i32.load + (get_local $i2) + ) + ) + (if + (get_local $i14) + (block + (set_local $i46 + (get_local $i14) + ) + (set_local $i47 + (get_local $i2) + ) + (br $while-in20) + ) + ) + (set_local $i2 + (i32.add + (get_local $i46) + (i32.const 16) + ) + ) + (set_local $i14 + (i32.load + (get_local $i2) + ) + ) + (if + (i32.eqz + (get_local $i14) + ) + (block + (set_local $i48 + (get_local $i46) + ) + (set_local $i49 + (get_local $i47) + ) + (br $while-out19) + ) + (block + (set_local $i46 + (get_local $i14) + ) + (set_local $i47 + (get_local $i2) + ) + ) + ) + (br $while-in20) + ) + ) + (if + (i32.lt_u + (get_local $i49) + (get_local $i15) + ) + (call $_abort) + (block + (i32.store + (get_local $i49) + (i32.const 0) + ) + (set_local $i45 + (get_local $i48) + ) + (br $do-once17) + ) + ) + ) + (block + (set_local $i2 + (i32.load + (i32.add + (get_local $i44) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $i2) + (get_local $i15) + ) + (call $_abort) + ) + (set_local $i14 + (i32.add + (get_local $i2) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $i14) + ) + (get_local $i44) + ) + (call $_abort) + ) + (set_local $i4 + (i32.add + (get_local $i7) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i4) + ) + (get_local $i44) + ) + (block + (i32.store + (get_local $i14) + (get_local $i7) + ) + (i32.store + (get_local $i4) + (get_local $i2) + ) + (set_local $i45 + (get_local $i7) + ) + (br $do-once17) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once21 + (if + (get_local $i3) + (block + (set_local $i7 + (i32.load + (i32.add + (get_local $i44) + (i32.const 28) + ) + ) + ) + (set_local $i15 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i7) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $i44) + (i32.load + (get_local $i15) + ) + ) + (block + (i32.store + (get_local $i15) + (get_local $i45) + ) + (if + (i32.eqz + (get_local $i45) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i7) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $i3) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i7 + (i32.add + (get_local $i3) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i7) + ) + (get_local $i44) + ) + (i32.store + (get_local $i7) + (get_local $i45) + ) + (i32.store + (i32.add + (get_local $i3) + (i32.const 20) + ) + (get_local $i45) + ) + ) + (if + (i32.eqz + (get_local $i45) + ) + (br $do-once21) + ) + ) + ) + (set_local $i7 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i45) + (get_local $i7) + ) + (call $_abort) + ) + (i32.store + (i32.add + (get_local $i45) + (i32.const 24) + ) + (get_local $i3) + ) + (set_local $i15 + (i32.load + (i32.add + (get_local $i44) + (i32.const 16) + ) + ) + ) + (block $do-once23 + (if + (get_local $i15) + (if + (i32.lt_u + (get_local $i15) + (get_local $i7) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i45) + (i32.const 16) + ) + (get_local $i15) + ) + (i32.store + (i32.add + (get_local $i15) + (i32.const 24) + ) + (get_local $i45) + ) + (br $do-once23) + ) + ) + ) + ) + (set_local $i15 + (i32.load + (i32.add + (get_local $i44) + (i32.const 20) + ) + ) + ) + (if + (get_local $i15) + (if + (i32.lt_u + (get_local $i15) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i45) + (i32.const 20) + ) + (get_local $i15) + ) + (i32.store + (i32.add + (get_local $i15) + (i32.const 24) + ) + (get_local $i45) + ) + (br $do-once21) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.ge_u + (get_local $i43) + (i32.const 16) + ) + (block + (i32.store + (i32.add + (get_local $i44) + (i32.const 4) + ) + (i32.or + (get_local $i5) + (i32.const 3) + ) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 4) + ) + (i32.or + (get_local $i43) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i8) + (get_local $i43) + ) + (get_local $i43) + ) + (set_local $i3 + (i32.shr_u + (get_local $i43) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $i43) + (i32.const 256) + ) + (block + (set_local $i15 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i3) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i7 + (i32.load + (i32.const 176) + ) + ) + (set_local $i2 + (i32.shl + (i32.const 1) + (get_local $i3) + ) + ) + (if + (i32.and + (get_local $i7) + (get_local $i2) + ) + (block + (set_local $i3 + (i32.add + (get_local $i15) + (i32.const 8) + ) + ) + (set_local $i4 + (i32.load + (get_local $i3) + ) + ) + (if + (i32.lt_u + (get_local $i4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $i50 + (get_local $i3) + ) + (set_local $i51 + (get_local $i4) + ) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i7) + (get_local $i2) + ) + ) + (set_local $i50 + (i32.add + (get_local $i15) + (i32.const 8) + ) + ) + (set_local $i51 + (get_local $i15) + ) + ) + ) + (i32.store + (get_local $i50) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i51) + (i32.const 12) + ) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 8) + ) + (get_local $i51) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 12) + ) + (get_local $i15) + ) + (br $do-once25) + ) + ) + (set_local $i15 + (i32.shr_u + (get_local $i43) + (i32.const 8) + ) + ) + (if + (get_local $i15) + (if + (i32.gt_u + (get_local $i43) + (i32.const 16777215) + ) + (set_local $i52 + (i32.const 31) + ) + (block + (set_local $i2 + (i32.and + (i32.shr_u + (i32.add + (get_local $i15) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $i7 + (i32.shl + (get_local $i15) + (get_local $i2) + ) + ) + (set_local $i15 + (i32.and + (i32.shr_u + (i32.add + (get_local $i7) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $i4 + (i32.shl + (get_local $i7) + (get_local $i15) + ) + ) + (set_local $i7 + (i32.and + (i32.shr_u + (i32.add + (get_local $i4) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $i3 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $i15) + (get_local $i2) + ) + (get_local $i7) + ) + ) + (i32.shr_u + (i32.shl + (get_local $i4) + (get_local $i7) + ) + (i32.const 15) + ) + ) + ) + (set_local $i52 + (i32.or + (i32.and + (i32.shr_u + (get_local $i43) + (i32.add + (get_local $i3) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $i3) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i52 + (i32.const 0) + ) + ) + (set_local $i3 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i52) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 28) + ) + (get_local $i52) + ) + (set_local $i7 + (i32.add + (get_local $i8) + (i32.const 16) + ) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store + (get_local $i7) + (i32.const 0) + ) + (set_local $i7 + (i32.load + (i32.const 180) + ) + ) + (set_local $i4 + (i32.shl + (i32.const 1) + (get_local $i52) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $i7) + (get_local $i4) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $i7) + (get_local $i4) + ) + ) + (i32.store + (get_local $i3) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 24) + ) + (get_local $i3) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 12) + ) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 8) + ) + (get_local $i8) + ) + (br $do-once25) + ) + ) + (set_local $i4 + (i32.shl + (get_local $i43) + (if (result i32) + (i32.eq + (get_local $i52) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $i52) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i7 + (i32.load + (get_local $i3) + ) + ) + (loop $while-in28 + (block $while-out27 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $i7) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i43) + ) + (block + (set_local $i53 + (get_local $i7) + ) + (set_local $i36 + (i32.const 148) + ) + (br $while-out27) + ) + ) + (set_local $i3 + (i32.add + (i32.add + (get_local $i7) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $i4) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $i2 + (i32.load + (get_local $i3) + ) + ) + (if + (i32.eqz + (get_local $i2) + ) + (block + (set_local $i54 + (get_local $i3) + ) + (set_local $i55 + (get_local $i7) + ) + (set_local $i36 + (i32.const 145) + ) + (br $while-out27) + ) + (block + (set_local $i4 + (i32.shl + (get_local $i4) + (i32.const 1) + ) + ) + (set_local $i7 + (get_local $i2) + ) + ) + ) + (br $while-in28) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 145) + ) + (if + (i32.lt_u + (get_local $i54) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $i54) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 24) + ) + (get_local $i55) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 12) + ) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 8) + ) + (get_local $i8) + ) + (br $do-once25) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 148) + ) + (block + (set_local $i7 + (i32.add + (get_local $i53) + (i32.const 8) + ) + ) + (set_local $i4 + (i32.load + (get_local $i7) + ) + ) + (set_local $i2 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $i4) + (get_local $i2) + ) + (i32.ge_u + (get_local $i53) + (get_local $i2) + ) + ) + (block + (i32.store + (i32.add + (get_local $i4) + (i32.const 12) + ) + (get_local $i8) + ) + (i32.store + (get_local $i7) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 8) + ) + (get_local $i4) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 12) + ) + (get_local $i53) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once25) + ) + (call $_abort) + ) + ) + ) + ) + ) + (block + (set_local $i4 + (i32.add + (get_local $i43) + (get_local $i5) + ) + ) + (i32.store + (i32.add + (get_local $i44) + (i32.const 4) + ) + (i32.or + (get_local $i4) + (i32.const 3) + ) + ) + (set_local $i7 + (i32.add + (i32.add + (get_local $i44) + (get_local $i4) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $i7) + (i32.or + (i32.load + (get_local $i7) + ) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i13 + (i32.add + (get_local $i44) + (i32.const 8) + ) + ) + (return + (get_local $i13) + ) + ) + (set_local $i31 + (get_local $i5) + ) + ) + ) + (set_local $i31 + (get_local $i5) + ) + ) + ) + (set_local $i31 + (i32.const -1) + ) + ) + ) + ) + (set_local $i44 + (i32.load + (i32.const 184) + ) + ) + (if + (i32.ge_u + (get_local $i44) + (get_local $i31) + ) + (block + (set_local $i43 + (i32.sub + (get_local $i44) + (get_local $i31) + ) + ) + (set_local $i53 + (i32.load + (i32.const 196) + ) + ) + (if + (i32.gt_u + (get_local $i43) + (i32.const 15) + ) + (block + (set_local $i55 + (i32.add + (get_local $i53) + (get_local $i31) + ) + ) + (i32.store + (i32.const 196) + (get_local $i55) + ) + (i32.store + (i32.const 184) + (get_local $i43) + ) + (i32.store + (i32.add + (get_local $i55) + (i32.const 4) + ) + (i32.or + (get_local $i43) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i55) + (get_local $i43) + ) + (get_local $i43) + ) + (i32.store + (i32.add + (get_local $i53) + (i32.const 4) + ) + (i32.or + (get_local $i31) + (i32.const 3) + ) + ) + ) + (block + (i32.store + (i32.const 184) + (i32.const 0) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $i53) + (i32.const 4) + ) + (i32.or + (get_local $i44) + (i32.const 3) + ) + ) + (set_local $i43 + (i32.add + (i32.add + (get_local $i53) + (get_local $i44) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $i43) + (i32.or + (i32.load + (get_local $i43) + ) + (i32.const 1) + ) + ) + ) + ) + (set_local $i13 + (i32.add + (get_local $i53) + (i32.const 8) + ) + ) + (return + (get_local $i13) + ) + ) + ) + (set_local $i53 + (i32.load + (i32.const 188) + ) + ) + (if + (i32.gt_u + (get_local $i53) + (get_local $i31) + ) + (block + (set_local $i43 + (i32.sub + (get_local $i53) + (get_local $i31) + ) + ) + (i32.store + (i32.const 188) + (get_local $i43) + ) + (set_local $i53 + (i32.load + (i32.const 200) + ) + ) + (set_local $i44 + (i32.add + (get_local $i53) + (get_local $i31) + ) + ) + (i32.store + (i32.const 200) + (get_local $i44) + ) + (i32.store + (i32.add + (get_local $i44) + (i32.const 4) + ) + (i32.or + (get_local $i43) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i53) + (i32.const 4) + ) + (i32.or + (get_local $i31) + (i32.const 3) + ) + ) + (set_local $i13 + (i32.add + (get_local $i53) + (i32.const 8) + ) + ) + (return + (get_local $i13) + ) + ) + ) + (block $do-once29 + (if + (i32.eqz + (i32.load + (i32.const 648) + ) + ) + (block + (set_local $i53 + (call $_sysconf + (i32.const 30) + ) + ) + (if + (i32.eqz + (i32.and + (i32.add + (get_local $i53) + (i32.const -1) + ) + (get_local $i53) + ) + ) + (block + (i32.store + (i32.const 656) + (get_local $i53) + ) + (i32.store + (i32.const 652) + (get_local $i53) + ) + (i32.store + (i32.const 660) + (i32.const -1) + ) + (i32.store + (i32.const 664) + (i32.const -1) + ) + (i32.store + (i32.const 668) + (i32.const 0) + ) + (i32.store + (i32.const 620) + (i32.const 0) + ) + (i32.store + (i32.const 648) + (i32.xor + (i32.and + (call $_time + (i32.const 0) + ) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + (br $do-once29) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $i53 + (i32.add + (get_local $i31) + (i32.const 48) + ) + ) + (set_local $i43 + (i32.load + (i32.const 656) + ) + ) + (set_local $i44 + (i32.add + (get_local $i31) + (i32.const 47) + ) + ) + (set_local $i55 + (i32.add + (get_local $i43) + (get_local $i44) + ) + ) + (set_local $i54 + (i32.sub + (i32.const 0) + (get_local $i43) + ) + ) + (set_local $i43 + (i32.and + (get_local $i55) + (get_local $i54) + ) + ) + (if + (i32.le_u + (get_local $i43) + (get_local $i31) + ) + (block + (set_local $i13 + (i32.const 0) + ) + (return + (get_local $i13) + ) + ) + ) + (set_local $i52 + (i32.load + (i32.const 616) + ) + ) + (if + (if (result i32) + (i32.ne + (get_local $i52) + (i32.const 0) + ) + (block (result i32) + (set_local $i51 + (i32.load + (i32.const 608) + ) + ) + (block (result i32) + (set_local $i50 + (i32.add + (get_local $i51) + (get_local $i43) + ) + ) + (i32.or + (i32.le_u + (get_local $i50) + (get_local $i51) + ) + (i32.gt_u + (get_local $i50) + (get_local $i52) + ) + ) + ) + ) + (i32.const 0) + ) + (block + (set_local $i13 + (i32.const 0) + ) + (return + (get_local $i13) + ) + ) + ) + (block $label$break$L257 + (if + (i32.eqz + (i32.and + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + ) + (block + (set_local $i52 + (i32.load + (i32.const 200) + ) + ) + (block $label$break$L259 + (if + (get_local $i52) + (block + (set_local $i50 + (i32.const 624) + ) + (loop $while-in34 + (block $while-out33 + (set_local $i51 + (i32.load + (get_local $i50) + ) + ) + (if + (if (result i32) + (i32.le_u + (get_local $i51) + (get_local $i52) + ) + (block (result i32) + (set_local $i45 + (i32.add + (get_local $i50) + (i32.const 4) + ) + ) + (i32.gt_u + (i32.add + (get_local $i51) + (i32.load + (get_local $i45) + ) + ) + (get_local $i52) + ) + ) + (i32.const 0) + ) + (block + (set_local $i56 + (get_local $i50) + ) + (set_local $i57 + (get_local $i45) + ) + (br $while-out33) + ) + ) + (set_local $i50 + (i32.load + (i32.add + (get_local $i50) + (i32.const 8) + ) + ) + ) + (if + (i32.eqz + (get_local $i50) + ) + (block + (set_local $i36 + (i32.const 173) + ) + (br $label$break$L259) + ) + ) + (br $while-in34) + ) + ) + (set_local $i50 + (i32.and + (i32.sub + (get_local $i55) + (i32.load + (i32.const 188) + ) + ) + (get_local $i54) + ) + ) + (if + (i32.lt_u + (get_local $i50) + (i32.const 2147483647) + ) + (block + (set_local $i45 + (call $_sbrk + (get_local $i50) + ) + ) + (if + (i32.eq + (get_local $i45) + (i32.add + (i32.load + (get_local $i56) + ) + (i32.load + (get_local $i57) + ) + ) + ) + (if + (i32.ne + (get_local $i45) + (i32.const -1) + ) + (block + (set_local $i58 + (get_local $i45) + ) + (set_local $i59 + (get_local $i50) + ) + (set_local $i36 + (i32.const 193) + ) + (br $label$break$L257) + ) + ) + (block + (set_local $i60 + (get_local $i45) + ) + (set_local $i61 + (get_local $i50) + ) + (set_local $i36 + (i32.const 183) + ) + ) + ) + ) + ) + ) + (set_local $i36 + (i32.const 173) + ) + ) + ) + (block $do-once35 + (if + (if (result i32) + (i32.eq + (get_local $i36) + (i32.const 173) + ) + (block (result i32) + (set_local $i52 + (call $_sbrk + (i32.const 0) + ) + ) + (i32.ne + (get_local $i52) + (i32.const -1) + ) + ) + (i32.const 0) + ) + (block + (set_local $i5 + (get_local $i52) + ) + (set_local $i50 + (i32.load + (i32.const 652) + ) + ) + (set_local $i45 + (i32.add + (get_local $i50) + (i32.const -1) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $i45) + (get_local $i5) + ) + ) + (set_local $i62 + (get_local $i43) + ) + (set_local $i62 + (i32.add + (i32.sub + (get_local $i43) + (get_local $i5) + ) + (i32.and + (i32.add + (get_local $i45) + (get_local $i5) + ) + (i32.sub + (i32.const 0) + (get_local $i50) + ) + ) + ) + ) + ) + (set_local $i50 + (i32.load + (i32.const 608) + ) + ) + (set_local $i5 + (i32.add + (get_local $i50) + (get_local $i62) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $i62) + (get_local $i31) + ) + (i32.lt_u + (get_local $i62) + (i32.const 2147483647) + ) + ) + (block + (set_local $i45 + (i32.load + (i32.const 616) + ) + ) + (if + (if (result i32) + (i32.ne + (get_local $i45) + (i32.const 0) + ) + (i32.or + (i32.le_u + (get_local $i5) + (get_local $i50) + ) + (i32.gt_u + (get_local $i5) + (get_local $i45) + ) + ) + (i32.const 0) + ) + (br $do-once35) + ) + (set_local $i45 + (call $_sbrk + (get_local $i62) + ) + ) + (if + (i32.eq + (get_local $i45) + (get_local $i52) + ) + (block + (set_local $i58 + (get_local $i52) + ) + (set_local $i59 + (get_local $i62) + ) + (set_local $i36 + (i32.const 193) + ) + (br $label$break$L257) + ) + (block + (set_local $i60 + (get_local $i45) + ) + (set_local $i61 + (get_local $i62) + ) + (set_local $i36 + (i32.const 183) + ) + ) + ) + ) + ) + ) + ) + ) + (block $label$break$L279 + (if + (i32.eq + (get_local $i36) + (i32.const 183) + ) + (block + (set_local $i45 + (i32.sub + (i32.const 0) + (get_local $i61) + ) + ) + (block $do-once38 + (if + (if (result i32) + (i32.and + (i32.gt_u + (get_local $i53) + (get_local $i61) + ) + (i32.and + (i32.lt_u + (get_local $i61) + (i32.const 2147483647) + ) + (i32.ne + (get_local $i60) + (i32.const -1) + ) + ) + ) + (block (result i32) + (set_local $i52 + (i32.load + (i32.const 656) + ) + ) + (block (result i32) + (set_local $i5 + (i32.and + (i32.add + (i32.sub + (get_local $i44) + (get_local $i61) + ) + (get_local $i52) + ) + (i32.sub + (i32.const 0) + (get_local $i52) + ) + ) + ) + (i32.lt_u + (get_local $i5) + (i32.const 2147483647) + ) + ) + ) + (i32.const 0) + ) + (if + (i32.eq + (call $_sbrk + (get_local $i5) + ) + (i32.const -1) + ) + (block + (drop + (call $_sbrk + (get_local $i45) + ) + ) + (br $label$break$L279) + ) + (block + (set_local $i63 + (i32.add + (get_local $i5) + (get_local $i61) + ) + ) + (br $do-once38) + ) + ) + (set_local $i63 + (get_local $i61) + ) + ) + ) + (if + (i32.ne + (get_local $i60) + (i32.const -1) + ) + (block + (set_local $i58 + (get_local $i60) + ) + (set_local $i59 + (get_local $i63) + ) + (set_local $i36 + (i32.const 193) + ) + (br $label$break$L257) + ) + ) + ) + ) + ) + (i32.store + (i32.const 620) + (i32.or + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + ) + (set_local $i36 + (i32.const 190) + ) + ) + (set_local $i36 + (i32.const 190) + ) + ) + ) + (if + (if (result i32) + (if (result i32) + (if (result i32) + (i32.eq + (get_local $i36) + (i32.const 190) + ) + (i32.lt_u + (get_local $i43) + (i32.const 2147483647) + ) + (i32.const 0) + ) + (block (result i32) + (set_local $i63 + (call $_sbrk + (get_local $i43) + ) + ) + (block (result i32) + (set_local $i43 + (call $_sbrk + (i32.const 0) + ) + ) + (i32.and + (i32.lt_u + (get_local $i63) + (get_local $i43) + ) + (i32.and + (i32.ne + (get_local $i63) + (i32.const -1) + ) + (i32.ne + (get_local $i43) + (i32.const -1) + ) + ) + ) + ) + ) + (i32.const 0) + ) + (block (result i32) + (set_local $i60 + (i32.sub + (get_local $i43) + (get_local $i63) + ) + ) + (i32.gt_u + (get_local $i60) + (i32.add + (get_local $i31) + (i32.const 40) + ) + ) + ) + (i32.const 0) + ) + (block + (set_local $i58 + (get_local $i63) + ) + (set_local $i59 + (get_local $i60) + ) + (set_local $i36 + (i32.const 193) + ) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 193) + ) + (block + (set_local $i60 + (i32.add + (i32.load + (i32.const 608) + ) + (get_local $i59) + ) + ) + (i32.store + (i32.const 608) + (get_local $i60) + ) + (if + (i32.gt_u + (get_local $i60) + (i32.load + (i32.const 612) + ) + ) + (i32.store + (i32.const 612) + (get_local $i60) + ) + ) + (set_local $i60 + (i32.load + (i32.const 200) + ) + ) + (block $do-once40 + (if + (get_local $i60) + (block + (set_local $i63 + (i32.const 624) + ) + (loop $do-in + (block $do-out + (set_local $i43 + (i32.load + (get_local $i63) + ) + ) + (set_local $i61 + (i32.add + (get_local $i63) + (i32.const 4) + ) + ) + (set_local $i44 + (i32.load + (get_local $i61) + ) + ) + (if + (i32.eq + (get_local $i58) + (i32.add + (get_local $i43) + (get_local $i44) + ) + ) + (block + (set_local $i64 + (get_local $i43) + ) + (set_local $i65 + (get_local $i61) + ) + (set_local $i66 + (get_local $i44) + ) + (set_local $i67 + (get_local $i63) + ) + (set_local $i36 + (i32.const 203) + ) + (br $do-out) + ) + ) + (set_local $i63 + (i32.load + (i32.add + (get_local $i63) + (i32.const 8) + ) + ) + ) + (br_if $do-in + (i32.ne + (get_local $i63) + (i32.const 0) + ) + ) + ) + ) + (if + (if (result i32) + (if (result i32) + (i32.eq + (get_local $i36) + (i32.const 203) + ) + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $i67) + (i32.const 12) + ) + ) + (i32.const 8) + ) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.and + (i32.lt_u + (get_local $i60) + (get_local $i58) + ) + (i32.ge_u + (get_local $i60) + (get_local $i64) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $i65) + (i32.add + (get_local $i66) + (get_local $i59) + ) + ) + (set_local $i63 + (i32.add + (get_local $i60) + (i32.const 8) + ) + ) + (set_local $i44 + (if (result i32) + (i32.eq + (i32.and + (get_local $i63) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $i63) + ) + (i32.const 7) + ) + ) + ) + (set_local $i63 + (i32.add + (get_local $i60) + (get_local $i44) + ) + ) + (set_local $i61 + (i32.add + (i32.sub + (get_local $i59) + (get_local $i44) + ) + (i32.load + (i32.const 188) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $i63) + ) + (i32.store + (i32.const 188) + (get_local $i61) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 4) + ) + (i32.or + (get_local $i61) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $i63) + (get_local $i61) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (br $do-once40) + ) + ) + (set_local $i61 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i58) + (get_local $i61) + ) + (block + (i32.store + (i32.const 192) + (get_local $i58) + ) + (set_local $i68 + (get_local $i58) + ) + ) + (set_local $i68 + (get_local $i61) + ) + ) + (set_local $i61 + (i32.add + (get_local $i58) + (get_local $i59) + ) + ) + (set_local $i63 + (i32.const 624) + ) + (loop $while-in43 + (block $while-out42 + (if + (i32.eq + (i32.load + (get_local $i63) + ) + (get_local $i61) + ) + (block + (set_local $i69 + (get_local $i63) + ) + (set_local $i70 + (get_local $i63) + ) + (set_local $i36 + (i32.const 211) + ) + (br $while-out42) + ) + ) + (set_local $i63 + (i32.load + (i32.add + (get_local $i63) + (i32.const 8) + ) + ) + ) + (if + (i32.eqz + (get_local $i63) + ) + (block + (set_local $i71 + (i32.const 624) + ) + (br $while-out42) + ) + ) + (br $while-in43) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 211) + ) + (if + (i32.eqz + (i32.and + (i32.load + (i32.add + (get_local $i70) + (i32.const 12) + ) + ) + (i32.const 8) + ) + ) + (block + (i32.store + (get_local $i69) + (get_local $i58) + ) + (set_local $i63 + (i32.add + (get_local $i70) + (i32.const 4) + ) + ) + (i32.store + (get_local $i63) + (i32.add + (i32.load + (get_local $i63) + ) + (get_local $i59) + ) + ) + (set_local $i63 + (i32.add + (get_local $i58) + (i32.const 8) + ) + ) + (set_local $i44 + (i32.add + (get_local $i58) + (if (result i32) + (i32.eq + (i32.and + (get_local $i63) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $i63) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $i63 + (i32.add + (get_local $i61) + (i32.const 8) + ) + ) + (set_local $i43 + (i32.add + (get_local $i61) + (if (result i32) + (i32.eq + (i32.and + (get_local $i63) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $i63) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $i63 + (i32.add + (get_local $i44) + (get_local $i31) + ) + ) + (set_local $i53 + (i32.sub + (i32.sub + (get_local $i43) + (get_local $i44) + ) + (get_local $i31) + ) + ) + (i32.store + (i32.add + (get_local $i44) + (i32.const 4) + ) + (i32.or + (get_local $i31) + (i32.const 3) + ) + ) + (block $do-once44 + (if + (i32.ne + (get_local $i43) + (get_local $i60) + ) + (block + (if + (i32.eq + (get_local $i43) + (i32.load + (i32.const 196) + ) + ) + (block + (set_local $i62 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $i53) + ) + ) + (i32.store + (i32.const 184) + (get_local $i62) + ) + (i32.store + (i32.const 196) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 4) + ) + (i32.or + (get_local $i62) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (get_local $i62) + ) + (get_local $i62) + ) + (br $do-once44) + ) + ) + (set_local $i62 + (i32.load + (i32.add + (get_local $i43) + (i32.const 4) + ) + ) + ) + (if + (i32.eq + (i32.and + (get_local $i62) + (i32.const 3) + ) + (i32.const 1) + ) + (block + (set_local $i57 + (i32.and + (get_local $i62) + (i32.const -8) + ) + ) + (set_local $i56 + (i32.shr_u + (get_local $i62) + (i32.const 3) + ) + ) + (block $label$break$L331 + (if + (i32.ge_u + (get_local $i62) + (i32.const 256) + ) + (block + (set_local $i54 + (i32.load + (i32.add + (get_local $i43) + (i32.const 24) + ) + ) + ) + (set_local $i55 + (i32.load + (i32.add + (get_local $i43) + (i32.const 12) + ) + ) + ) + (block $do-once47 + (if + (i32.eq + (get_local $i55) + (get_local $i43) + ) + (block + (set_local $i45 + (i32.add + (get_local $i43) + (i32.const 16) + ) + ) + (set_local $i5 + (i32.add + (get_local $i45) + (i32.const 4) + ) + ) + (set_local $i52 + (i32.load + (get_local $i5) + ) + ) + (if + (i32.eqz + (get_local $i52) + ) + (block + (set_local $i50 + (i32.load + (get_local $i45) + ) + ) + (if + (i32.eqz + (get_local $i50) + ) + (block + (set_local $i72 + (i32.const 0) + ) + (br $do-once47) + ) + (block + (set_local $i73 + (get_local $i50) + ) + (set_local $i74 + (get_local $i45) + ) + ) + ) + ) + (block + (set_local $i73 + (get_local $i52) + ) + (set_local $i74 + (get_local $i5) + ) + ) + ) + (loop $while-in50 + (block $while-out49 + (set_local $i5 + (i32.add + (get_local $i73) + (i32.const 20) + ) + ) + (set_local $i52 + (i32.load + (get_local $i5) + ) + ) + (if + (get_local $i52) + (block + (set_local $i73 + (get_local $i52) + ) + (set_local $i74 + (get_local $i5) + ) + (br $while-in50) + ) + ) + (set_local $i5 + (i32.add + (get_local $i73) + (i32.const 16) + ) + ) + (set_local $i52 + (i32.load + (get_local $i5) + ) + ) + (if + (i32.eqz + (get_local $i52) + ) + (block + (set_local $i75 + (get_local $i73) + ) + (set_local $i76 + (get_local $i74) + ) + (br $while-out49) + ) + (block + (set_local $i73 + (get_local $i52) + ) + (set_local $i74 + (get_local $i5) + ) + ) + ) + (br $while-in50) + ) + ) + (if + (i32.lt_u + (get_local $i76) + (get_local $i68) + ) + (call $_abort) + (block + (i32.store + (get_local $i76) + (i32.const 0) + ) + (set_local $i72 + (get_local $i75) + ) + (br $do-once47) + ) + ) + ) + (block + (set_local $i5 + (i32.load + (i32.add + (get_local $i43) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $i5) + (get_local $i68) + ) + (call $_abort) + ) + (set_local $i52 + (i32.add + (get_local $i5) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $i52) + ) + (get_local $i43) + ) + (call $_abort) + ) + (set_local $i45 + (i32.add + (get_local $i55) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i45) + ) + (get_local $i43) + ) + (block + (i32.store + (get_local $i52) + (get_local $i55) + ) + (i32.store + (get_local $i45) + (get_local $i5) + ) + (set_local $i72 + (get_local $i55) + ) + (br $do-once47) + ) + (call $_abort) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $i54) + ) + (br $label$break$L331) + ) + (set_local $i55 + (i32.load + (i32.add + (get_local $i43) + (i32.const 28) + ) + ) + ) + (set_local $i5 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i55) + (i32.const 2) + ) + ) + ) + (block $do-once51 + (if + (i32.ne + (get_local $i43) + (i32.load + (get_local $i5) + ) + ) + (block + (if + (i32.lt_u + (get_local $i54) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i45 + (i32.add + (get_local $i54) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i45) + ) + (get_local $i43) + ) + (i32.store + (get_local $i45) + (get_local $i72) + ) + (i32.store + (i32.add + (get_local $i54) + (i32.const 20) + ) + (get_local $i72) + ) + ) + (if + (i32.eqz + (get_local $i72) + ) + (br $label$break$L331) + ) + ) + (block + (i32.store + (get_local $i5) + (get_local $i72) + ) + (if + (get_local $i72) + (br $do-once51) + ) + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i55) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + ) + ) + (set_local $i55 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i72) + (get_local $i55) + ) + (call $_abort) + ) + (i32.store + (i32.add + (get_local $i72) + (i32.const 24) + ) + (get_local $i54) + ) + (set_local $i5 + (i32.add + (get_local $i43) + (i32.const 16) + ) + ) + (set_local $i45 + (i32.load + (get_local $i5) + ) + ) + (block $do-once53 + (if + (get_local $i45) + (if + (i32.lt_u + (get_local $i45) + (get_local $i55) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i72) + (i32.const 16) + ) + (get_local $i45) + ) + (i32.store + (i32.add + (get_local $i45) + (i32.const 24) + ) + (get_local $i72) + ) + (br $do-once53) + ) + ) + ) + ) + (set_local $i45 + (i32.load + (i32.add + (get_local $i5) + (i32.const 4) + ) + ) + ) + (if + (i32.eqz + (get_local $i45) + ) + (br $label$break$L331) + ) + (if + (i32.lt_u + (get_local $i45) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i72) + (i32.const 20) + ) + (get_local $i45) + ) + (i32.store + (i32.add + (get_local $i45) + (i32.const 24) + ) + (get_local $i72) + ) + (br $label$break$L331) + ) + ) + ) + (block + (set_local $i45 + (i32.load + (i32.add + (get_local $i43) + (i32.const 8) + ) + ) + ) + (set_local $i55 + (i32.load + (i32.add + (get_local $i43) + (i32.const 12) + ) + ) + ) + (set_local $i54 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i56) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (block $do-once55 + (if + (i32.ne + (get_local $i45) + (get_local $i54) + ) + (block + (if + (i32.lt_u + (get_local $i45) + (get_local $i68) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (i32.add + (get_local $i45) + (i32.const 12) + ) + ) + (get_local $i43) + ) + (br $do-once55) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $i55) + (get_local $i45) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i56) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + ) + (block $do-once57 + (if + (i32.eq + (get_local $i55) + (get_local $i54) + ) + (set_local $i77 + (i32.add + (get_local $i55) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $i55) + (get_local $i68) + ) + (call $_abort) + ) + (set_local $i5 + (i32.add + (get_local $i55) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i5) + ) + (get_local $i43) + ) + (block + (set_local $i77 + (get_local $i5) + ) + (br $do-once57) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store + (i32.add + (get_local $i45) + (i32.const 12) + ) + (get_local $i55) + ) + (i32.store + (get_local $i77) + (get_local $i45) + ) + ) + ) + ) + (set_local $i78 + (i32.add + (get_local $i43) + (get_local $i57) + ) + ) + (set_local $i79 + (i32.add + (get_local $i57) + (get_local $i53) + ) + ) + ) + (block + (set_local $i78 + (get_local $i43) + ) + (set_local $i79 + (get_local $i53) + ) + ) + ) + (set_local $i56 + (i32.add + (get_local $i78) + (i32.const 4) + ) + ) + (i32.store + (get_local $i56) + (i32.and + (i32.load + (get_local $i56) + ) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 4) + ) + (i32.or + (get_local $i79) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (get_local $i79) + ) + (get_local $i79) + ) + (set_local $i56 + (i32.shr_u + (get_local $i79) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $i79) + (i32.const 256) + ) + (block + (set_local $i62 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i56) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i54 + (i32.load + (i32.const 176) + ) + ) + (set_local $i5 + (i32.shl + (i32.const 1) + (get_local $i56) + ) + ) + (block $do-once59 + (if + (i32.eqz + (i32.and + (get_local $i54) + (get_local $i5) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i54) + (get_local $i5) + ) + ) + (set_local $i80 + (i32.add + (get_local $i62) + (i32.const 8) + ) + ) + (set_local $i81 + (get_local $i62) + ) + ) + (block + (set_local $i56 + (i32.add + (get_local $i62) + (i32.const 8) + ) + ) + (set_local $i52 + (i32.load + (get_local $i56) + ) + ) + (if + (i32.ge_u + (get_local $i52) + (i32.load + (i32.const 192) + ) + ) + (block + (set_local $i80 + (get_local $i56) + ) + (set_local $i81 + (get_local $i52) + ) + (br $do-once59) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store + (get_local $i80) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i81) + (i32.const 12) + ) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 8) + ) + (get_local $i81) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 12) + ) + (get_local $i62) + ) + (br $do-once44) + ) + ) + (set_local $i5 + (i32.shr_u + (get_local $i79) + (i32.const 8) + ) + ) + (block $do-once61 + (if + (i32.eqz + (get_local $i5) + ) + (set_local $i82 + (i32.const 0) + ) + (block + (if + (i32.gt_u + (get_local $i79) + (i32.const 16777215) + ) + (block + (set_local $i82 + (i32.const 31) + ) + (br $do-once61) + ) + ) + (set_local $i54 + (i32.and + (i32.shr_u + (i32.add + (get_local $i5) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $i57 + (i32.shl + (get_local $i5) + (get_local $i54) + ) + ) + (set_local $i52 + (i32.and + (i32.shr_u + (i32.add + (get_local $i57) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $i56 + (i32.shl + (get_local $i57) + (get_local $i52) + ) + ) + (set_local $i57 + (i32.and + (i32.shr_u + (i32.add + (get_local $i56) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $i50 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $i52) + (get_local $i54) + ) + (get_local $i57) + ) + ) + (i32.shr_u + (i32.shl + (get_local $i56) + (get_local $i57) + ) + (i32.const 15) + ) + ) + ) + (set_local $i82 + (i32.or + (i32.and + (i32.shr_u + (get_local $i79) + (i32.add + (get_local $i50) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $i50) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $i5 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i82) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 28) + ) + (get_local $i82) + ) + (set_local $i62 + (i32.add + (get_local $i63) + (i32.const 16) + ) + ) + (i32.store + (i32.add + (get_local $i62) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store + (get_local $i62) + (i32.const 0) + ) + (set_local $i62 + (i32.load + (i32.const 180) + ) + ) + (set_local $i50 + (i32.shl + (i32.const 1) + (get_local $i82) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $i62) + (get_local $i50) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $i62) + (get_local $i50) + ) + ) + (i32.store + (get_local $i5) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 24) + ) + (get_local $i5) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 12) + ) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 8) + ) + (get_local $i63) + ) + (br $do-once44) + ) + ) + (set_local $i50 + (i32.shl + (get_local $i79) + (if (result i32) + (i32.eq + (get_local $i82) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $i82) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i62 + (i32.load + (get_local $i5) + ) + ) + (loop $while-in64 + (block $while-out63 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $i62) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i79) + ) + (block + (set_local $i83 + (get_local $i62) + ) + (set_local $i36 + (i32.const 281) + ) + (br $while-out63) + ) + ) + (set_local $i5 + (i32.add + (i32.add + (get_local $i62) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $i50) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $i57 + (i32.load + (get_local $i5) + ) + ) + (if + (i32.eqz + (get_local $i57) + ) + (block + (set_local $i84 + (get_local $i5) + ) + (set_local $i85 + (get_local $i62) + ) + (set_local $i36 + (i32.const 278) + ) + (br $while-out63) + ) + (block + (set_local $i50 + (i32.shl + (get_local $i50) + (i32.const 1) + ) + ) + (set_local $i62 + (get_local $i57) + ) + ) + ) + (br $while-in64) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 278) + ) + (if + (i32.lt_u + (get_local $i84) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $i84) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 24) + ) + (get_local $i85) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 12) + ) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 8) + ) + (get_local $i63) + ) + (br $do-once44) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 281) + ) + (block + (set_local $i62 + (i32.add + (get_local $i83) + (i32.const 8) + ) + ) + (set_local $i50 + (i32.load + (get_local $i62) + ) + ) + (set_local $i57 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $i50) + (get_local $i57) + ) + (i32.ge_u + (get_local $i83) + (get_local $i57) + ) + ) + (block + (i32.store + (i32.add + (get_local $i50) + (i32.const 12) + ) + (get_local $i63) + ) + (i32.store + (get_local $i62) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 8) + ) + (get_local $i50) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 12) + ) + (get_local $i83) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once44) + ) + (call $_abort) + ) + ) + ) + ) + ) + (block + (set_local $i50 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $i53) + ) + ) + (i32.store + (i32.const 188) + (get_local $i50) + ) + (i32.store + (i32.const 200) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 4) + ) + (i32.or + (get_local $i50) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i13 + (i32.add + (get_local $i44) + (i32.const 8) + ) + ) + (return + (get_local $i13) + ) + ) + (set_local $i71 + (i32.const 624) + ) + ) + ) + (loop $while-in66 + (block $while-out65 + (set_local $i63 + (i32.load + (get_local $i71) + ) + ) + (if + (if (result i32) + (i32.le_u + (get_local $i63) + (get_local $i60) + ) + (block (result i32) + (set_local $i53 + (i32.add + (get_local $i63) + (i32.load + (i32.add + (get_local $i71) + (i32.const 4) + ) + ) + ) + ) + (i32.gt_u + (get_local $i53) + (get_local $i60) + ) + ) + (i32.const 0) + ) + (block + (set_local $i86 + (get_local $i53) + ) + (br $while-out65) + ) + ) + (set_local $i71 + (i32.load + (i32.add + (get_local $i71) + (i32.const 8) + ) + ) + ) + (br $while-in66) + ) + ) + (set_local $i44 + (i32.add + (get_local $i86) + (i32.const -47) + ) + ) + (set_local $i53 + (i32.add + (get_local $i44) + (i32.const 8) + ) + ) + (set_local $i63 + (i32.add + (get_local $i44) + (if (result i32) + (i32.eq + (i32.and + (get_local $i53) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $i53) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $i53 + (i32.add + (get_local $i60) + (i32.const 16) + ) + ) + (set_local $i44 + (if (result i32) + (i32.lt_u + (get_local $i63) + (get_local $i53) + ) + (get_local $i60) + (get_local $i63) + ) + ) + (set_local $i63 + (i32.add + (get_local $i44) + (i32.const 8) + ) + ) + (set_local $i43 + (i32.add + (get_local $i58) + (i32.const 8) + ) + ) + (set_local $i61 + (if (result i32) + (i32.eq + (i32.and + (get_local $i43) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $i43) + ) + (i32.const 7) + ) + ) + ) + (set_local $i43 + (i32.add + (get_local $i58) + (get_local $i61) + ) + ) + (set_local $i50 + (i32.sub + (i32.add + (get_local $i59) + (i32.const -40) + ) + (get_local $i61) + ) + ) + (i32.store + (i32.const 200) + (get_local $i43) + ) + (i32.store + (i32.const 188) + (get_local $i50) + ) + (i32.store + (i32.add + (get_local $i43) + (i32.const 4) + ) + (i32.or + (get_local $i50) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $i43) + (get_local $i50) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (set_local $i50 + (i32.add + (get_local $i44) + (i32.const 4) + ) + ) + (i32.store + (get_local $i50) + (i32.const 27) + ) + (i32.store + (get_local $i63) + (i32.load + (i32.const 624) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 4) + ) + (i32.load + (i32.const 628) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 8) + ) + (i32.load + (i32.const 632) + ) + ) + (i32.store + (i32.add + (get_local $i63) + (i32.const 12) + ) + (i32.load + (i32.const 636) + ) + ) + (i32.store + (i32.const 624) + (get_local $i58) + ) + (i32.store + (i32.const 628) + (get_local $i59) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 632) + (get_local $i63) + ) + (set_local $i63 + (i32.add + (get_local $i44) + (i32.const 24) + ) + ) + (loop $do-in68 + (block $do-out67 + (set_local $i63 + (i32.add + (get_local $i63) + (i32.const 4) + ) + ) + (i32.store + (get_local $i63) + (i32.const 7) + ) + (br_if $do-in68 + (i32.lt_u + (i32.add + (get_local $i63) + (i32.const 4) + ) + (get_local $i86) + ) + ) + ) + ) + (if + (i32.ne + (get_local $i44) + (get_local $i60) + ) + (block + (set_local $i63 + (i32.sub + (get_local $i44) + (get_local $i60) + ) + ) + (i32.store + (get_local $i50) + (i32.and + (i32.load + (get_local $i50) + ) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 4) + ) + (i32.or + (get_local $i63) + (i32.const 1) + ) + ) + (i32.store + (get_local $i44) + (get_local $i63) + ) + (set_local $i43 + (i32.shr_u + (get_local $i63) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $i63) + (i32.const 256) + ) + (block + (set_local $i61 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i43) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i62 + (i32.load + (i32.const 176) + ) + ) + (set_local $i57 + (i32.shl + (i32.const 1) + (get_local $i43) + ) + ) + (if + (i32.and + (get_local $i62) + (get_local $i57) + ) + (block + (set_local $i43 + (i32.add + (get_local $i61) + (i32.const 8) + ) + ) + (set_local $i5 + (i32.load + (get_local $i43) + ) + ) + (if + (i32.lt_u + (get_local $i5) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $i87 + (get_local $i43) + ) + (set_local $i88 + (get_local $i5) + ) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i62) + (get_local $i57) + ) + ) + (set_local $i87 + (i32.add + (get_local $i61) + (i32.const 8) + ) + ) + (set_local $i88 + (get_local $i61) + ) + ) + ) + (i32.store + (get_local $i87) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i88) + (i32.const 12) + ) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 8) + ) + (get_local $i88) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 12) + ) + (get_local $i61) + ) + (br $do-once40) + ) + ) + (set_local $i61 + (i32.shr_u + (get_local $i63) + (i32.const 8) + ) + ) + (if + (get_local $i61) + (if + (i32.gt_u + (get_local $i63) + (i32.const 16777215) + ) + (set_local $i89 + (i32.const 31) + ) + (block + (set_local $i57 + (i32.and + (i32.shr_u + (i32.add + (get_local $i61) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $i62 + (i32.shl + (get_local $i61) + (get_local $i57) + ) + ) + (set_local $i61 + (i32.and + (i32.shr_u + (i32.add + (get_local $i62) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $i5 + (i32.shl + (get_local $i62) + (get_local $i61) + ) + ) + (set_local $i62 + (i32.and + (i32.shr_u + (i32.add + (get_local $i5) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $i43 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $i61) + (get_local $i57) + ) + (get_local $i62) + ) + ) + (i32.shr_u + (i32.shl + (get_local $i5) + (get_local $i62) + ) + (i32.const 15) + ) + ) + ) + (set_local $i89 + (i32.or + (i32.and + (i32.shr_u + (get_local $i63) + (i32.add + (get_local $i43) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $i43) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i89 + (i32.const 0) + ) + ) + (set_local $i43 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i89) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 28) + ) + (get_local $i89) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 20) + ) + (i32.const 0) + ) + (i32.store + (get_local $i53) + (i32.const 0) + ) + (set_local $i62 + (i32.load + (i32.const 180) + ) + ) + (set_local $i5 + (i32.shl + (i32.const 1) + (get_local $i89) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $i62) + (get_local $i5) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $i62) + (get_local $i5) + ) + ) + (i32.store + (get_local $i43) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 24) + ) + (get_local $i43) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 12) + ) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 8) + ) + (get_local $i60) + ) + (br $do-once40) + ) + ) + (set_local $i5 + (i32.shl + (get_local $i63) + (if (result i32) + (i32.eq + (get_local $i89) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $i89) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i62 + (i32.load + (get_local $i43) + ) + ) + (loop $while-in70 + (block $while-out69 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $i62) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i63) + ) + (block + (set_local $i90 + (get_local $i62) + ) + (set_local $i36 + (i32.const 307) + ) + (br $while-out69) + ) + ) + (set_local $i43 + (i32.add + (i32.add + (get_local $i62) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $i5) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $i57 + (i32.load + (get_local $i43) + ) + ) + (if + (i32.eqz + (get_local $i57) + ) + (block + (set_local $i91 + (get_local $i43) + ) + (set_local $i92 + (get_local $i62) + ) + (set_local $i36 + (i32.const 304) + ) + (br $while-out69) + ) + (block + (set_local $i5 + (i32.shl + (get_local $i5) + (i32.const 1) + ) + ) + (set_local $i62 + (get_local $i57) + ) + ) + ) + (br $while-in70) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 304) + ) + (if + (i32.lt_u + (get_local $i91) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $i91) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 24) + ) + (get_local $i92) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 12) + ) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 8) + ) + (get_local $i60) + ) + (br $do-once40) + ) + ) + (if + (i32.eq + (get_local $i36) + (i32.const 307) + ) + (block + (set_local $i62 + (i32.add + (get_local $i90) + (i32.const 8) + ) + ) + (set_local $i5 + (i32.load + (get_local $i62) + ) + ) + (set_local $i63 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $i5) + (get_local $i63) + ) + (i32.ge_u + (get_local $i90) + (get_local $i63) + ) + ) + (block + (i32.store + (i32.add + (get_local $i5) + (i32.const 12) + ) + (get_local $i60) + ) + (i32.store + (get_local $i62) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 8) + ) + (get_local $i5) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 12) + ) + (get_local $i90) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once40) + ) + (call $_abort) + ) + ) + ) + ) + ) + ) + ) + (block + (set_local $i5 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.or + (i32.eq + (get_local $i5) + (i32.const 0) + ) + (i32.lt_u + (get_local $i58) + (get_local $i5) + ) + ) + (i32.store + (i32.const 192) + (get_local $i58) + ) + ) + (i32.store + (i32.const 624) + (get_local $i58) + ) + (i32.store + (i32.const 628) + (get_local $i59) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 212) + (i32.load + (i32.const 648) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (set_local $i5 + (i32.const 0) + ) + (loop $do-in72 + (block $do-out71 + (set_local $i62 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i5) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $i62) + (i32.const 12) + ) + (get_local $i62) + ) + (i32.store + (i32.add + (get_local $i62) + (i32.const 8) + ) + (get_local $i62) + ) + (set_local $i5 + (i32.add + (get_local $i5) + (i32.const 1) + ) + ) + (br_if $do-in72 + (i32.ne + (get_local $i5) + (i32.const 32) + ) + ) + ) + ) + (set_local $i5 + (i32.add + (get_local $i58) + (i32.const 8) + ) + ) + (set_local $i62 + (if (result i32) + (i32.eq + (i32.and + (get_local $i5) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $i5) + ) + (i32.const 7) + ) + ) + ) + (set_local $i5 + (i32.add + (get_local $i58) + (get_local $i62) + ) + ) + (set_local $i63 + (i32.sub + (i32.add + (get_local $i59) + (i32.const -40) + ) + (get_local $i62) + ) + ) + (i32.store + (i32.const 200) + (get_local $i5) + ) + (i32.store + (i32.const 188) + (get_local $i63) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 4) + ) + (i32.or + (get_local $i63) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $i5) + (get_local $i63) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + ) + ) + ) + (set_local $i59 + (i32.load + (i32.const 188) + ) + ) + (if + (i32.gt_u + (get_local $i59) + (get_local $i31) + ) + (block + (set_local $i58 + (i32.sub + (get_local $i59) + (get_local $i31) + ) + ) + (i32.store + (i32.const 188) + (get_local $i58) + ) + (set_local $i59 + (i32.load + (i32.const 200) + ) + ) + (set_local $i60 + (i32.add + (get_local $i59) + (get_local $i31) + ) + ) + (i32.store + (i32.const 200) + (get_local $i60) + ) + (i32.store + (i32.add + (get_local $i60) + (i32.const 4) + ) + (i32.or + (get_local $i58) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i59) + (i32.const 4) + ) + (i32.or + (get_local $i31) + (i32.const 3) + ) + ) + (set_local $i13 + (i32.add + (get_local $i59) + (i32.const 8) + ) + ) + (return + (get_local $i13) + ) + ) + ) + ) + ) + (i32.store + (call $___errno_location) + (i32.const 12) + ) + (set_local $i13 + (i32.const 0) + ) + (return + (get_local $i13) + ) + ) + (func $_free (; 16 ;) (param $i1 i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (local $i10 i32) + (local $i11 i32) + (local $i12 i32) + (local $i13 i32) + (local $i14 i32) + (local $i15 i32) + (local $i16 i32) + (local $i17 i32) + (local $i18 i32) + (local $i19 i32) + (local $i20 i32) + (local $i21 i32) + (local $i22 i32) + (local $i23 i32) + (local $i24 i32) + (local $i25 i32) + (local $i26 i32) + (local $i27 i32) + (local $i28 i32) + (local $i29 i32) + (local $i30 i32) + (local $i31 i32) + (local $i32 i32) + (local $i33 i32) + (local $i34 i32) + (local $i35 i32) + (local $i36 i32) + (local $i37 i32) + (if + (i32.eqz + (get_local $i1) + ) + (return) + ) + (set_local $i2 + (i32.add + (get_local $i1) + (i32.const -8) + ) + ) + (set_local $i3 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i2) + (get_local $i3) + ) + (call $_abort) + ) + (set_local $i4 + (i32.load + (i32.add + (get_local $i1) + (i32.const -4) + ) + ) + ) + (set_local $i1 + (i32.and + (get_local $i4) + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $i1) + (i32.const 1) + ) + (call $_abort) + ) + (set_local $i5 + (i32.and + (get_local $i4) + (i32.const -8) + ) + ) + (set_local $i6 + (i32.add + (get_local $i2) + (get_local $i5) + ) + ) + (block $do-once + (if + (i32.eqz + (i32.and + (get_local $i4) + (i32.const 1) + ) + ) + (block + (set_local $i7 + (i32.load + (get_local $i2) + ) + ) + (if + (i32.eqz + (get_local $i1) + ) + (return) + ) + (set_local $i8 + (i32.add + (get_local $i2) + (i32.sub + (i32.const 0) + (get_local $i7) + ) + ) + ) + (set_local $i9 + (i32.add + (get_local $i7) + (get_local $i5) + ) + ) + (if + (i32.lt_u + (get_local $i8) + (get_local $i3) + ) + (call $_abort) + ) + (if + (i32.eq + (get_local $i8) + (i32.load + (i32.const 196) + ) + ) + (block + (set_local $i10 + (i32.add + (get_local $i6) + (i32.const 4) + ) + ) + (set_local $i11 + (i32.load + (get_local $i10) + ) + ) + (if + (i32.ne + (i32.and + (get_local $i11) + (i32.const 3) + ) + (i32.const 3) + ) + (block + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 184) + (get_local $i9) + ) + (i32.store + (get_local $i10) + (i32.and + (get_local $i11) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 4) + ) + (i32.or + (get_local $i9) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i8) + (get_local $i9) + ) + (get_local $i9) + ) + (return) + ) + ) + (set_local $i11 + (i32.shr_u + (get_local $i7) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $i7) + (i32.const 256) + ) + (block + (set_local $i7 + (i32.load + (i32.add + (get_local $i8) + (i32.const 8) + ) + ) + ) + (set_local $i10 + (i32.load + (i32.add + (get_local $i8) + (i32.const 12) + ) + ) + ) + (set_local $i14 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i11) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.ne + (get_local $i7) + (get_local $i14) + ) + (block + (if + (i32.lt_u + (get_local $i7) + (get_local $i3) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (i32.add + (get_local $i7) + (i32.const 12) + ) + ) + (get_local $i8) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $i10) + (get_local $i7) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i11) + ) + (i32.const -1) + ) + ) + ) + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + (br $do-once) + ) + ) + (if + (i32.ne + (get_local $i10) + (get_local $i14) + ) + (block + (if + (i32.lt_u + (get_local $i10) + (get_local $i3) + ) + (call $_abort) + ) + (set_local $i14 + (i32.add + (get_local $i10) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i14) + ) + (get_local $i8) + ) + (set_local $i15 + (get_local $i14) + ) + (call $_abort) + ) + ) + (set_local $i15 + (i32.add + (get_local $i10) + (i32.const 8) + ) + ) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 12) + ) + (get_local $i10) + ) + (i32.store + (get_local $i15) + (get_local $i7) + ) + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + (br $do-once) + ) + ) + (set_local $i7 + (i32.load + (i32.add + (get_local $i8) + (i32.const 24) + ) + ) + ) + (set_local $i10 + (i32.load + (i32.add + (get_local $i8) + (i32.const 12) + ) + ) + ) + (block $do-once0 + (if + (i32.eq + (get_local $i10) + (get_local $i8) + ) + (block + (set_local $i14 + (i32.add + (get_local $i8) + (i32.const 16) + ) + ) + (set_local $i11 + (i32.add + (get_local $i14) + (i32.const 4) + ) + ) + (set_local $i16 + (i32.load + (get_local $i11) + ) + ) + (if + (i32.eqz + (get_local $i16) + ) + (block + (set_local $i17 + (i32.load + (get_local $i14) + ) + ) + (if + (i32.eqz + (get_local $i17) + ) + (block + (set_local $i18 + (i32.const 0) + ) + (br $do-once0) + ) + (block + (set_local $i19 + (get_local $i17) + ) + (set_local $i20 + (get_local $i14) + ) + ) + ) + ) + (block + (set_local $i19 + (get_local $i16) + ) + (set_local $i20 + (get_local $i11) + ) + ) + ) + (loop $while-in + (block $while-out + (set_local $i11 + (i32.add + (get_local $i19) + (i32.const 20) + ) + ) + (set_local $i16 + (i32.load + (get_local $i11) + ) + ) + (if + (get_local $i16) + (block + (set_local $i19 + (get_local $i16) + ) + (set_local $i20 + (get_local $i11) + ) + (br $while-in) + ) + ) + (set_local $i11 + (i32.add + (get_local $i19) + (i32.const 16) + ) + ) + (set_local $i16 + (i32.load + (get_local $i11) + ) + ) + (if + (i32.eqz + (get_local $i16) + ) + (block + (set_local $i21 + (get_local $i19) + ) + (set_local $i22 + (get_local $i20) + ) + (br $while-out) + ) + (block + (set_local $i19 + (get_local $i16) + ) + (set_local $i20 + (get_local $i11) + ) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (get_local $i22) + (get_local $i3) + ) + (call $_abort) + (block + (i32.store + (get_local $i22) + (i32.const 0) + ) + (set_local $i18 + (get_local $i21) + ) + (br $do-once0) + ) + ) + ) + (block + (set_local $i11 + (i32.load + (i32.add + (get_local $i8) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $i11) + (get_local $i3) + ) + (call $_abort) + ) + (set_local $i16 + (i32.add + (get_local $i11) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $i16) + ) + (get_local $i8) + ) + (call $_abort) + ) + (set_local $i14 + (i32.add + (get_local $i10) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i14) + ) + (get_local $i8) + ) + (block + (i32.store + (get_local $i16) + (get_local $i10) + ) + (i32.store + (get_local $i14) + (get_local $i11) + ) + (set_local $i18 + (get_local $i10) + ) + (br $do-once0) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $i7) + (block + (set_local $i10 + (i32.load + (i32.add + (get_local $i8) + (i32.const 28) + ) + ) + ) + (set_local $i11 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i10) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $i8) + (i32.load + (get_local $i11) + ) + ) + (block + (i32.store + (get_local $i11) + (get_local $i18) + ) + (if + (i32.eqz + (get_local $i18) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i10) + ) + (i32.const -1) + ) + ) + ) + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $i7) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i10 + (i32.add + (get_local $i7) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i10) + ) + (get_local $i8) + ) + (i32.store + (get_local $i10) + (get_local $i18) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 20) + ) + (get_local $i18) + ) + ) + (if + (i32.eqz + (get_local $i18) + ) + (block + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + (br $do-once) + ) + ) + ) + ) + (set_local $i10 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i18) + (get_local $i10) + ) + (call $_abort) + ) + (i32.store + (i32.add + (get_local $i18) + (i32.const 24) + ) + (get_local $i7) + ) + (set_local $i11 + (i32.add + (get_local $i8) + (i32.const 16) + ) + ) + (set_local $i14 + (i32.load + (get_local $i11) + ) + ) + (block $do-once2 + (if + (get_local $i14) + (if + (i32.lt_u + (get_local $i14) + (get_local $i10) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i18) + (i32.const 16) + ) + (get_local $i14) + ) + (i32.store + (i32.add + (get_local $i14) + (i32.const 24) + ) + (get_local $i18) + ) + (br $do-once2) + ) + ) + ) + ) + (set_local $i14 + (i32.load + (i32.add + (get_local $i11) + (i32.const 4) + ) + ) + ) + (if + (get_local $i14) + (if + (i32.lt_u + (get_local $i14) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i18) + (i32.const 20) + ) + (get_local $i14) + ) + (i32.store + (i32.add + (get_local $i14) + (i32.const 24) + ) + (get_local $i18) + ) + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + (br $do-once) + ) + ) + (block + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + ) + ) + ) + (block + (set_local $i12 + (get_local $i8) + ) + (set_local $i13 + (get_local $i9) + ) + ) + ) + ) + (block + (set_local $i12 + (get_local $i2) + ) + (set_local $i13 + (get_local $i5) + ) + ) + ) + ) + (if + (i32.ge_u + (get_local $i12) + (get_local $i6) + ) + (call $_abort) + ) + (set_local $i5 + (i32.add + (get_local $i6) + (i32.const 4) + ) + ) + (set_local $i2 + (i32.load + (get_local $i5) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $i2) + (i32.const 1) + ) + ) + (call $_abort) + ) + (if + (i32.eqz + (i32.and + (get_local $i2) + (i32.const 2) + ) + ) + (block + (if + (i32.eq + (get_local $i6) + (i32.load + (i32.const 200) + ) + ) + (block + (set_local $i18 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $i13) + ) + ) + (i32.store + (i32.const 188) + (get_local $i18) + ) + (i32.store + (i32.const 200) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 4) + ) + (i32.or + (get_local $i18) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $i12) + (i32.load + (i32.const 196) + ) + ) + (return) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store + (i32.const 184) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $i6) + (i32.load + (i32.const 196) + ) + ) + (block + (set_local $i18 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $i13) + ) + ) + (i32.store + (i32.const 184) + (get_local $i18) + ) + (i32.store + (i32.const 196) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 4) + ) + (i32.or + (get_local $i18) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (get_local $i18) + ) + (get_local $i18) + ) + (return) + ) + ) + (set_local $i18 + (i32.add + (i32.and + (get_local $i2) + (i32.const -8) + ) + (get_local $i13) + ) + ) + (set_local $i3 + (i32.shr_u + (get_local $i2) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.ge_u + (get_local $i2) + (i32.const 256) + ) + (block + (set_local $i21 + (i32.load + (i32.add + (get_local $i6) + (i32.const 24) + ) + ) + ) + (set_local $i22 + (i32.load + (i32.add + (get_local $i6) + (i32.const 12) + ) + ) + ) + (block $do-once6 + (if + (i32.eq + (get_local $i22) + (get_local $i6) + ) + (block + (set_local $i20 + (i32.add + (get_local $i6) + (i32.const 16) + ) + ) + (set_local $i19 + (i32.add + (get_local $i20) + (i32.const 4) + ) + ) + (set_local $i15 + (i32.load + (get_local $i19) + ) + ) + (if + (i32.eqz + (get_local $i15) + ) + (block + (set_local $i1 + (i32.load + (get_local $i20) + ) + ) + (if + (i32.eqz + (get_local $i1) + ) + (block + (set_local $i23 + (i32.const 0) + ) + (br $do-once6) + ) + (block + (set_local $i24 + (get_local $i1) + ) + (set_local $i25 + (get_local $i20) + ) + ) + ) + ) + (block + (set_local $i24 + (get_local $i15) + ) + (set_local $i25 + (get_local $i19) + ) + ) + ) + (loop $while-in9 + (block $while-out8 + (set_local $i19 + (i32.add + (get_local $i24) + (i32.const 20) + ) + ) + (set_local $i15 + (i32.load + (get_local $i19) + ) + ) + (if + (get_local $i15) + (block + (set_local $i24 + (get_local $i15) + ) + (set_local $i25 + (get_local $i19) + ) + (br $while-in9) + ) + ) + (set_local $i19 + (i32.add + (get_local $i24) + (i32.const 16) + ) + ) + (set_local $i15 + (i32.load + (get_local $i19) + ) + ) + (if + (i32.eqz + (get_local $i15) + ) + (block + (set_local $i26 + (get_local $i24) + ) + (set_local $i27 + (get_local $i25) + ) + (br $while-out8) + ) + (block + (set_local $i24 + (get_local $i15) + ) + (set_local $i25 + (get_local $i19) + ) + ) + ) + (br $while-in9) + ) + ) + (if + (i32.lt_u + (get_local $i27) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $i27) + (i32.const 0) + ) + (set_local $i23 + (get_local $i26) + ) + (br $do-once6) + ) + ) + ) + (block + (set_local $i19 + (i32.load + (i32.add + (get_local $i6) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $i19) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i15 + (i32.add + (get_local $i19) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $i15) + ) + (get_local $i6) + ) + (call $_abort) + ) + (set_local $i20 + (i32.add + (get_local $i22) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i20) + ) + (get_local $i6) + ) + (block + (i32.store + (get_local $i15) + (get_local $i22) + ) + (i32.store + (get_local $i20) + (get_local $i19) + ) + (set_local $i23 + (get_local $i22) + ) + (br $do-once6) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $i21) + (block + (set_local $i22 + (i32.load + (i32.add + (get_local $i6) + (i32.const 28) + ) + ) + ) + (set_local $i9 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i22) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $i6) + (i32.load + (get_local $i9) + ) + ) + (block + (i32.store + (get_local $i9) + (get_local $i23) + ) + (if + (i32.eqz + (get_local $i23) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i22) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $i21) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i22 + (i32.add + (get_local $i21) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i22) + ) + (get_local $i6) + ) + (i32.store + (get_local $i22) + (get_local $i23) + ) + (i32.store + (i32.add + (get_local $i21) + (i32.const 20) + ) + (get_local $i23) + ) + ) + (if + (i32.eqz + (get_local $i23) + ) + (br $do-once4) + ) + ) + ) + (set_local $i22 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.lt_u + (get_local $i23) + (get_local $i22) + ) + (call $_abort) + ) + (i32.store + (i32.add + (get_local $i23) + (i32.const 24) + ) + (get_local $i21) + ) + (set_local $i9 + (i32.add + (get_local $i6) + (i32.const 16) + ) + ) + (set_local $i8 + (i32.load + (get_local $i9) + ) + ) + (block $do-once10 + (if + (get_local $i8) + (if + (i32.lt_u + (get_local $i8) + (get_local $i22) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i23) + (i32.const 16) + ) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 24) + ) + (get_local $i23) + ) + (br $do-once10) + ) + ) + ) + ) + (set_local $i8 + (i32.load + (i32.add + (get_local $i9) + (i32.const 4) + ) + ) + ) + (if + (get_local $i8) + (if + (i32.lt_u + (get_local $i8) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (i32.add + (get_local $i23) + (i32.const 20) + ) + (get_local $i8) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 24) + ) + (get_local $i23) + ) + (br $do-once4) + ) + ) + ) + ) + ) + ) + (block + (set_local $i8 + (i32.load + (i32.add + (get_local $i6) + (i32.const 8) + ) + ) + ) + (set_local $i22 + (i32.load + (i32.add + (get_local $i6) + (i32.const 12) + ) + ) + ) + (set_local $i21 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i3) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.ne + (get_local $i8) + (get_local $i21) + ) + (block + (if + (i32.lt_u + (get_local $i8) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (i32.add + (get_local $i8) + (i32.const 12) + ) + ) + (get_local $i6) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $i22) + (get_local $i8) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $i3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.ne + (get_local $i22) + (get_local $i21) + ) + (block + (if + (i32.lt_u + (get_local $i22) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (set_local $i21 + (i32.add + (get_local $i22) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $i21) + ) + (get_local $i6) + ) + (set_local $i28 + (get_local $i21) + ) + (call $_abort) + ) + ) + (set_local $i28 + (i32.add + (get_local $i22) + (i32.const 8) + ) + ) + ) + (i32.store + (i32.add + (get_local $i8) + (i32.const 12) + ) + (get_local $i22) + ) + (i32.store + (get_local $i28) + (get_local $i8) + ) + ) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 4) + ) + (i32.or + (get_local $i18) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (get_local $i18) + ) + (get_local $i18) + ) + (if + (i32.eq + (get_local $i12) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (get_local $i18) + ) + (return) + ) + (set_local $i29 + (get_local $i18) + ) + ) + ) + (block + (i32.store + (get_local $i5) + (i32.and + (get_local $i2) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 4) + ) + (i32.or + (get_local $i13) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (get_local $i13) + ) + (get_local $i13) + ) + (set_local $i29 + (get_local $i13) + ) + ) + ) + (set_local $i13 + (i32.shr_u + (get_local $i29) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $i29) + (i32.const 256) + ) + (block + (set_local $i2 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $i13) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $i5 + (i32.load + (i32.const 176) + ) + ) + (set_local $i18 + (i32.shl + (i32.const 1) + (get_local $i13) + ) + ) + (if + (i32.and + (get_local $i5) + (get_local $i18) + ) + (block + (set_local $i13 + (i32.add + (get_local $i2) + (i32.const 8) + ) + ) + (set_local $i28 + (i32.load + (get_local $i13) + ) + ) + (if + (i32.lt_u + (get_local $i28) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $i30 + (get_local $i13) + ) + (set_local $i31 + (get_local $i28) + ) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i5) + (get_local $i18) + ) + ) + (set_local $i30 + (i32.add + (get_local $i2) + (i32.const 8) + ) + ) + (set_local $i31 + (get_local $i2) + ) + ) + ) + (i32.store + (get_local $i30) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i31) + (i32.const 12) + ) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 8) + ) + (get_local $i31) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 12) + ) + (get_local $i2) + ) + (return) + ) + ) + (set_local $i2 + (i32.shr_u + (get_local $i29) + (i32.const 8) + ) + ) + (if + (get_local $i2) + (if + (i32.gt_u + (get_local $i29) + (i32.const 16777215) + ) + (set_local $i32 + (i32.const 31) + ) + (block + (set_local $i31 + (i32.and + (i32.shr_u + (i32.add + (get_local $i2) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $i30 + (i32.shl + (get_local $i2) + (get_local $i31) + ) + ) + (set_local $i2 + (i32.and + (i32.shr_u + (i32.add + (get_local $i30) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $i18 + (i32.shl + (get_local $i30) + (get_local $i2) + ) + ) + (set_local $i30 + (i32.and + (i32.shr_u + (i32.add + (get_local $i18) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $i5 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $i2) + (get_local $i31) + ) + (get_local $i30) + ) + ) + (i32.shr_u + (i32.shl + (get_local $i18) + (get_local $i30) + ) + (i32.const 15) + ) + ) + ) + (set_local $i32 + (i32.or + (i32.and + (i32.shr_u + (get_local $i29) + (i32.add + (get_local $i5) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $i5) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i32 + (i32.const 0) + ) + ) + (set_local $i5 + (i32.add + (i32.const 480) + (i32.shl + (get_local $i32) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 28) + ) + (get_local $i32) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 20) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 16) + ) + (i32.const 0) + ) + (set_local $i30 + (i32.load + (i32.const 180) + ) + ) + (set_local $i18 + (i32.shl + (i32.const 1) + (get_local $i32) + ) + ) + (block $do-once12 + (if + (i32.and + (get_local $i30) + (get_local $i18) + ) + (block + (set_local $i31 + (i32.shl + (get_local $i29) + (if (result i32) + (i32.eq + (get_local $i32) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $i32) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $i2 + (i32.load + (get_local $i5) + ) + ) + (loop $while-in15 + (block $while-out14 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $i2) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $i29) + ) + (block + (set_local $i33 + (get_local $i2) + ) + (set_local $i34 + (i32.const 130) + ) + (br $while-out14) + ) + ) + (set_local $i28 + (i32.add + (i32.add + (get_local $i2) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $i31) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $i13 + (i32.load + (get_local $i28) + ) + ) + (if + (i32.eqz + (get_local $i13) + ) + (block + (set_local $i35 + (get_local $i28) + ) + (set_local $i36 + (get_local $i2) + ) + (set_local $i34 + (i32.const 127) + ) + (br $while-out14) + ) + (block + (set_local $i31 + (i32.shl + (get_local $i31) + (i32.const 1) + ) + ) + (set_local $i2 + (get_local $i13) + ) + ) + ) + (br $while-in15) + ) + ) + (if + (i32.eq + (get_local $i34) + (i32.const 127) + ) + (if + (i32.lt_u + (get_local $i35) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $i35) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 24) + ) + (get_local $i36) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 12) + ) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 8) + ) + (get_local $i12) + ) + (br $do-once12) + ) + ) + (if + (i32.eq + (get_local $i34) + (i32.const 130) + ) + (block + (set_local $i2 + (i32.add + (get_local $i33) + (i32.const 8) + ) + ) + (set_local $i31 + (i32.load + (get_local $i2) + ) + ) + (set_local $i9 + (i32.load + (i32.const 192) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $i31) + (get_local $i9) + ) + (i32.ge_u + (get_local $i33) + (get_local $i9) + ) + ) + (block + (i32.store + (i32.add + (get_local $i31) + (i32.const 12) + ) + (get_local $i12) + ) + (i32.store + (get_local $i2) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 8) + ) + (get_local $i31) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 12) + ) + (get_local $i33) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once12) + ) + (call $_abort) + ) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $i30) + (get_local $i18) + ) + ) + (i32.store + (get_local $i5) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 24) + ) + (get_local $i5) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 12) + ) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i12) + (i32.const 8) + ) + (get_local $i12) + ) + ) + ) + ) + (set_local $i12 + (i32.add + (i32.load + (i32.const 208) + ) + (i32.const -1) + ) + ) + (i32.store + (i32.const 208) + (get_local $i12) + ) + (if + (i32.eqz + (get_local $i12) + ) + (set_local $i37 + (i32.const 632) + ) + (return) + ) + (loop $while-in17 + (block $while-out16 + (set_local $i12 + (i32.load + (get_local $i37) + ) + ) + (if + (i32.eqz + (get_local $i12) + ) + (br $while-out16) + (set_local $i37 + (i32.add + (get_local $i12) + (i32.const 8) + ) + ) + ) + (br $while-in17) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (return) + ) + (func $___stdio_write (; 17 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (local $i10 i32) + (local $i11 i32) + (local $i12 i32) + (local $i13 i32) + (local $i14 i32) + (local $i15 i32) + (local $i16 i32) + (local $i17 i32) + (local $i18 i32) + (local $i19 i32) + (local $i20 i32) + (local $i21 i32) + (local $i22 i32) + (local $i23 i32) + (local $i24 i32) + (set_local $i4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (set_local $i5 + (i32.add + (get_local $i4) + (i32.const 16) + ) + ) + (set_local $i6 + (get_local $i4) + ) + (set_local $i7 + (i32.add + (get_local $i4) + (i32.const 32) + ) + ) + (set_local $i8 + (i32.add + (get_local $i1) + (i32.const 28) + ) + ) + (set_local $i9 + (i32.load + (get_local $i8) + ) + ) + (i32.store + (get_local $i7) + (get_local $i9) + ) + (set_local $i10 + (i32.add + (get_local $i1) + (i32.const 20) + ) + ) + (set_local $i11 + (i32.sub + (i32.load + (get_local $i10) + ) + (get_local $i9) + ) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 4) + ) + (get_local $i11) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 8) + ) + (get_local $i2) + ) + (i32.store + (i32.add + (get_local $i7) + (i32.const 12) + ) + (get_local $i3) + ) + (set_local $i2 + (i32.add + (get_local $i1) + (i32.const 60) + ) + ) + (set_local $i9 + (i32.add + (get_local $i1) + (i32.const 44) + ) + ) + (set_local $i12 + (get_local $i7) + ) + (set_local $i7 + (i32.const 2) + ) + (set_local $i13 + (i32.add + (get_local $i11) + (get_local $i3) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.load + (i32.const 8) + ) + ) + (block + (i32.store + (get_local $i5) + (i32.load + (get_local $i2) + ) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 4) + ) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 8) + ) + (get_local $i7) + ) + (set_local $i14 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $i5) + ) + ) + ) + ) + (block + (call $_pthread_cleanup_push + (i32.const 4) + (get_local $i1) + ) + (i32.store + (get_local $i6) + (i32.load + (get_local $i2) + ) + ) + (i32.store + (i32.add + (get_local $i6) + (i32.const 4) + ) + (get_local $i12) + ) + (i32.store + (i32.add + (get_local $i6) + (i32.const 8) + ) + (get_local $i7) + ) + (set_local $i11 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $i6) + ) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + (set_local $i14 + (get_local $i11) + ) + ) + ) + (if + (i32.eq + (get_local $i13) + (get_local $i14) + ) + (block + (set_local $i15 + (i32.const 6) + ) + (br $while-out) + ) + ) + (if + (i32.lt_s + (get_local $i14) + (i32.const 0) + ) + (block + (set_local $i16 + (get_local $i12) + ) + (set_local $i17 + (get_local $i7) + ) + (set_local $i15 + (i32.const 8) + ) + (br $while-out) + ) + ) + (set_local $i11 + (i32.sub + (get_local $i13) + (get_local $i14) + ) + ) + (set_local $i18 + (i32.load + (i32.add + (get_local $i12) + (i32.const 4) + ) + ) + ) + (if + (i32.le_u + (get_local $i14) + (get_local $i18) + ) + (if + (i32.eq + (get_local $i7) + (i32.const 2) + ) + (block + (i32.store + (get_local $i8) + (i32.add + (i32.load + (get_local $i8) + ) + (get_local $i14) + ) + ) + (set_local $i19 + (get_local $i18) + ) + (set_local $i20 + (get_local $i14) + ) + (set_local $i21 + (get_local $i12) + ) + (set_local $i22 + (i32.const 2) + ) + ) + (block + (set_local $i19 + (get_local $i18) + ) + (set_local $i20 + (get_local $i14) + ) + (set_local $i21 + (get_local $i12) + ) + (set_local $i22 + (get_local $i7) + ) + ) + ) + (block + (set_local $i23 + (i32.load + (get_local $i9) + ) + ) + (i32.store + (get_local $i8) + (get_local $i23) + ) + (i32.store + (get_local $i10) + (get_local $i23) + ) + (set_local $i19 + (i32.load + (i32.add + (get_local $i12) + (i32.const 12) + ) + ) + ) + (set_local $i20 + (i32.sub + (get_local $i14) + (get_local $i18) + ) + ) + (set_local $i21 + (i32.add + (get_local $i12) + (i32.const 8) + ) + ) + (set_local $i22 + (i32.add + (get_local $i7) + (i32.const -1) + ) + ) + ) + ) + (i32.store + (get_local $i21) + (i32.add + (i32.load + (get_local $i21) + ) + (get_local $i20) + ) + ) + (i32.store + (i32.add + (get_local $i21) + (i32.const 4) + ) + (i32.sub + (get_local $i19) + (get_local $i20) + ) + ) + (set_local $i12 + (get_local $i21) + ) + (set_local $i7 + (get_local $i22) + ) + (set_local $i13 + (get_local $i11) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $i15) + (i32.const 6) + ) + (block + (set_local $i13 + (i32.load + (get_local $i9) + ) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 16) + ) + (i32.add + (get_local $i13) + (i32.load + (i32.add + (get_local $i1) + (i32.const 48) + ) + ) + ) + ) + (set_local $i9 + (get_local $i13) + ) + (i32.store + (get_local $i8) + (get_local $i9) + ) + (i32.store + (get_local $i10) + (get_local $i9) + ) + (set_local $i24 + (get_local $i3) + ) + ) + (if + (i32.eq + (get_local $i15) + (i32.const 8) + ) + (block + (i32.store + (i32.add + (get_local $i1) + (i32.const 16) + ) + (i32.const 0) + ) + (i32.store + (get_local $i8) + (i32.const 0) + ) + (i32.store + (get_local $i10) + (i32.const 0) + ) + (i32.store + (get_local $i1) + (i32.or + (i32.load + (get_local $i1) + ) + (i32.const 32) + ) + ) + (if + (i32.eq + (get_local $i17) + (i32.const 2) + ) + (set_local $i24 + (i32.const 0) + ) + (set_local $i24 + (i32.sub + (get_local $i3) + (i32.load + (i32.add + (get_local $i16) + (i32.const 4) + ) + ) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $i4) + ) + (return + (get_local $i24) + ) + ) + (func $___fwritex (; 18 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (local $i10 i32) + (local $i11 i32) + (local $i12 i32) + (local $i13 i32) + (local $i14 i32) + (local $i15 i32) + (set_local $i4 + (i32.add + (get_local $i3) + (i32.const 16) + ) + ) + (set_local $i5 + (i32.load + (get_local $i4) + ) + ) + (if + (i32.eqz + (get_local $i5) + ) + (if + (i32.eqz + (call $___towrite + (get_local $i3) + ) + ) + (block + (set_local $i6 + (i32.load + (get_local $i4) + ) + ) + (set_local $i7 + (i32.const 5) + ) + ) + (set_local $i8 + (i32.const 0) + ) + ) + (block + (set_local $i6 + (get_local $i5) + ) + (set_local $i7 + (i32.const 5) + ) + ) + ) + (block $label$break$L5 + (if + (i32.eq + (get_local $i7) + (i32.const 5) + ) + (block + (set_local $i5 + (i32.add + (get_local $i3) + (i32.const 20) + ) + ) + (set_local $i4 + (i32.load + (get_local $i5) + ) + ) + (set_local $i9 + (get_local $i4) + ) + (if + (i32.lt_u + (i32.sub + (get_local $i6) + (get_local $i4) + ) + (get_local $i2) + ) + (block + (set_local $i8 + (call_indirect (type $FUNCSIG$iiii) + (get_local $i3) + (get_local $i1) + (get_local $i2) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $i3) + (i32.const 36) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (br $label$break$L5) + ) + ) + (block $label$break$L10 + (if + (i32.gt_s + (i32.load8_s + (i32.add + (get_local $i3) + (i32.const 75) + ) + ) + (i32.const -1) + ) + (block + (set_local $i4 + (get_local $i2) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (get_local $i4) + ) + (block + (set_local $i10 + (get_local $i2) + ) + (set_local $i11 + (get_local $i1) + ) + (set_local $i12 + (get_local $i9) + ) + (set_local $i13 + (i32.const 0) + ) + (br $label$break$L10) + ) + ) + (set_local $i14 + (i32.add + (get_local $i4) + (i32.const -1) + ) + ) + (if + (i32.eq + (i32.load8_s + (i32.add + (get_local $i1) + (get_local $i14) + ) + ) + (i32.const 10) + ) + (block + (set_local $i15 + (get_local $i4) + ) + (br $while-out) + ) + (set_local $i4 + (get_local $i14) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (call_indirect (type $FUNCSIG$iiii) + (get_local $i3) + (get_local $i1) + (get_local $i15) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $i3) + (i32.const 36) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + (get_local $i15) + ) + (block + (set_local $i8 + (get_local $i15) + ) + (br $label$break$L5) + ) + ) + (set_local $i10 + (i32.sub + (get_local $i2) + (get_local $i15) + ) + ) + (set_local $i11 + (i32.add + (get_local $i1) + (get_local $i15) + ) + ) + (set_local $i12 + (i32.load + (get_local $i5) + ) + ) + (set_local $i13 + (get_local $i15) + ) + ) + (block + (set_local $i10 + (get_local $i2) + ) + (set_local $i11 + (get_local $i1) + ) + (set_local $i12 + (get_local $i9) + ) + (set_local $i13 + (i32.const 0) + ) + ) + ) + ) + (drop + (call $_memcpy + (get_local $i12) + (get_local $i11) + (get_local $i10) + ) + ) + (i32.store + (get_local $i5) + (i32.add + (i32.load + (get_local $i5) + ) + (get_local $i10) + ) + ) + (set_local $i8 + (i32.add + (get_local $i13) + (get_local $i10) + ) + ) + ) + ) + ) + (return + (get_local $i8) + ) + ) + (func $_fflush (; 19 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (block $do-once + (if + (get_local $i1) + (block + (if + (i32.le_s + (i32.load + (i32.add + (get_local $i1) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (block + (set_local $i2 + (call $___fflush_unlocked + (get_local $i1) + ) + ) + (br $do-once) + ) + ) + (set_local $i3 + (i32.eq + (call $___lockfile + (get_local $i1) + ) + (i32.const 0) + ) + ) + (set_local $i4 + (call $___fflush_unlocked + (get_local $i1) + ) + ) + (if + (get_local $i3) + (set_local $i2 + (get_local $i4) + ) + (block + (call $___unlockfile + (get_local $i1) + ) + (set_local $i2 + (get_local $i4) + ) + ) + ) + ) + (block + (if + (i32.eqz + (i32.load + (i32.const 56) + ) + ) + (set_local $i5 + (i32.const 0) + ) + (set_local $i5 + (call $_fflush + (i32.load + (i32.const 56) + ) + ) + ) + ) + (call $___lock + (i32.const 36) + ) + (set_local $i4 + (i32.load + (i32.const 32) + ) + ) + (if + (i32.eqz + (get_local $i4) + ) + (set_local $i6 + (get_local $i5) + ) + (block + (set_local $i3 + (get_local $i4) + ) + (set_local $i4 + (get_local $i5) + ) + (loop $while-in + (block $while-out + (if + (i32.gt_s + (i32.load + (i32.add + (get_local $i3) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (set_local $i7 + (call $___lockfile + (get_local $i3) + ) + ) + (set_local $i7 + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.load + (i32.add + (get_local $i3) + (i32.const 20) + ) + ) + (i32.load + (i32.add + (get_local $i3) + (i32.const 28) + ) + ) + ) + (set_local $i8 + (i32.or + (call $___fflush_unlocked + (get_local $i3) + ) + (get_local $i4) + ) + ) + (set_local $i8 + (get_local $i4) + ) + ) + (if + (get_local $i7) + (call $___unlockfile + (get_local $i3) + ) + ) + (set_local $i3 + (i32.load + (i32.add + (get_local $i3) + (i32.const 56) + ) + ) + ) + (if + (i32.eqz + (get_local $i3) + ) + (block + (set_local $i6 + (get_local $i8) + ) + (br $while-out) + ) + (set_local $i4 + (get_local $i8) + ) + ) + (br $while-in) + ) + ) + ) + ) + (call $___unlock + (i32.const 36) + ) + (set_local $i2 + (get_local $i6) + ) + ) + ) + ) + (return + (get_local $i2) + ) + ) + (func $_strlen (; 20 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (local $i10 i32) + (local $i11 i32) + (set_local $i2 + (get_local $i1) + ) + (block $label$break$L1 + (if + (i32.eqz + (i32.and + (get_local $i2) + (i32.const 3) + ) + ) + (block + (set_local $i3 + (get_local $i1) + ) + (set_local $i4 + (i32.const 4) + ) + ) + (block + (set_local $i5 + (get_local $i1) + ) + (set_local $i6 + (get_local $i2) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.load8_s + (get_local $i5) + ) + ) + (block + (set_local $i7 + (get_local $i6) + ) + (br $label$break$L1) + ) + ) + (set_local $i8 + (i32.add + (get_local $i5) + (i32.const 1) + ) + ) + (set_local $i6 + (get_local $i8) + ) + (if + (i32.eqz + (i32.and + (get_local $i6) + (i32.const 3) + ) + ) + (block + (set_local $i3 + (get_local $i8) + ) + (set_local $i4 + (i32.const 4) + ) + (br $while-out) + ) + (set_local $i5 + (get_local $i8) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $i4) + (i32.const 4) + ) + (block + (set_local $i4 + (get_local $i3) + ) + (loop $while-in1 + (block $while-out0 + (set_local $i3 + (i32.load + (get_local $i4) + ) + ) + (if + (i32.eqz + (i32.and + (i32.xor + (i32.and + (get_local $i3) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $i3) + (i32.const -16843009) + ) + ) + ) + (set_local $i4 + (i32.add + (get_local $i4) + (i32.const 4) + ) + ) + (block + (set_local $i9 + (get_local $i3) + ) + (set_local $i10 + (get_local $i4) + ) + (br $while-out0) + ) + ) + (br $while-in1) + ) + ) + (if + (i32.eqz + (i32.shr_s + (i32.shl + (i32.and + (get_local $i9) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $i11 + (get_local $i10) + ) + (block + (set_local $i9 + (get_local $i10) + ) + (loop $while-in3 + (block $while-out2 + (set_local $i10 + (i32.add + (get_local $i9) + (i32.const 1) + ) + ) + (if + (i32.eqz + (i32.load8_s + (get_local $i10) + ) + ) + (block + (set_local $i11 + (get_local $i10) + ) + (br $while-out2) + ) + (set_local $i9 + (get_local $i10) + ) + ) + (br $while-in3) + ) + ) + ) + ) + (set_local $i7 + (get_local $i11) + ) + ) + ) + (return + (i32.sub + (get_local $i7) + (get_local $i2) + ) + ) + ) + (func $___overflow (; 21 ;) (param $i1 i32) (param $i2 i32) (result i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (local $i10 i32) + (local $i11 i32) + (set_local $i3 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $i4 + (get_local $i3) + ) + (set_local $i5 + (i32.and + (get_local $i2) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $i4) + (get_local $i5) + ) + (set_local $i6 + (i32.add + (get_local $i1) + (i32.const 16) + ) + ) + (set_local $i7 + (i32.load + (get_local $i6) + ) + ) + (if + (i32.eqz + (get_local $i7) + ) + (if + (i32.eqz + (call $___towrite + (get_local $i1) + ) + ) + (block + (set_local $i8 + (i32.load + (get_local $i6) + ) + ) + (set_local $i9 + (i32.const 4) + ) + ) + (set_local $i10 + (i32.const -1) + ) + ) + (block + (set_local $i8 + (get_local $i7) + ) + (set_local $i9 + (i32.const 4) + ) + ) + ) + (block $do-once + (if + (i32.eq + (get_local $i9) + (i32.const 4) + ) + (block + (set_local $i7 + (i32.add + (get_local $i1) + (i32.const 20) + ) + ) + (set_local $i6 + (i32.load + (get_local $i7) + ) + ) + (if + (if (result i32) + (i32.lt_u + (get_local $i6) + (get_local $i8) + ) + (block (result i32) + (set_local $i11 + (i32.and + (get_local $i2) + (i32.const 255) + ) + ) + (i32.ne + (get_local $i11) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 75) + ) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $i7) + (i32.add + (get_local $i6) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $i6) + (get_local $i5) + ) + (set_local $i10 + (get_local $i11) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (call_indirect (type $FUNCSIG$iiii) + (get_local $i1) + (get_local $i4) + (i32.const 1) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $i1) + (i32.const 36) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + (i32.const 1) + ) + (set_local $i10 + (i32.load8_u + (get_local $i4) + ) + ) + (set_local $i10 + (i32.const -1) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $i3) + ) + (return + (get_local $i10) + ) + ) + (func $___fflush_unlocked (; 22 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (set_local $i2 + (i32.add + (get_local $i1) + (i32.const 20) + ) + ) + (set_local $i3 + (i32.add + (get_local $i1) + (i32.const 28) + ) + ) + (if + (if (result i32) + (i32.gt_u + (i32.load + (get_local $i2) + ) + (i32.load + (get_local $i3) + ) + ) + (block (result i32) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $i1) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $i1) + (i32.const 36) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (i32.eq + (i32.load + (get_local $i2) + ) + (i32.const 0) + ) + ) + (i32.const 0) + ) + (set_local $i4 + (i32.const -1) + ) + (block + (set_local $i5 + (i32.add + (get_local $i1) + (i32.const 4) + ) + ) + (set_local $i6 + (i32.load + (get_local $i5) + ) + ) + (set_local $i7 + (i32.add + (get_local $i1) + (i32.const 8) + ) + ) + (set_local $i8 + (i32.load + (get_local $i7) + ) + ) + (if + (i32.lt_u + (get_local $i6) + (get_local $i8) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $i1) + (i32.sub + (get_local $i6) + (get_local $i8) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $i1) + (i32.const 40) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 16) + ) + (i32.const 0) + ) + (i32.store + (get_local $i3) + (i32.const 0) + ) + (i32.store + (get_local $i2) + (i32.const 0) + ) + (i32.store + (get_local $i7) + (i32.const 0) + ) + (i32.store + (get_local $i5) + (i32.const 0) + ) + (set_local $i4 + (i32.const 0) + ) + ) + ) + (return + (get_local $i4) + ) + ) + (func $_memcpy (; 23 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (if + (i32.ge_s + (get_local $i3) + (i32.const 4096) + ) + (return + (call $_emscripten_memcpy_big + (get_local $i1) + (get_local $i2) + (get_local $i3) + ) + ) + ) + (set_local $i4 + (get_local $i1) + ) + (if + (i32.eq + (i32.and + (get_local $i1) + (i32.const 3) + ) + (i32.and + (get_local $i2) + (i32.const 3) + ) + ) + (block + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.and + (get_local $i1) + (i32.const 3) + ) + ) + (br $while-out) + ) + (block + (if + (i32.eqz + (get_local $i3) + ) + (return + (get_local $i4) + ) + ) + (i32.store8 + (get_local $i1) + (i32.load8_s + (get_local $i2) + ) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + (set_local $i2 + (i32.add + (get_local $i2) + (i32.const 1) + ) + ) + (set_local $i3 + (i32.sub + (get_local $i3) + (i32.const 1) + ) + ) + ) + (br $while-in) + ) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eqz + (i32.ge_s + (get_local $i3) + (i32.const 4) + ) + ) + (br $while-out0) + ) + (block + (i32.store + (get_local $i1) + (i32.load + (get_local $i2) + ) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 4) + ) + ) + (set_local $i2 + (i32.add + (get_local $i2) + (i32.const 4) + ) + ) + (set_local $i3 + (i32.sub + (get_local $i3) + (i32.const 4) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eqz + (i32.gt_s + (get_local $i3) + (i32.const 0) + ) + ) + (br $while-out2) + ) + (block + (i32.store8 + (get_local $i1) + (i32.load8_s + (get_local $i2) + ) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + (set_local $i2 + (i32.add + (get_local $i2) + (i32.const 1) + ) + ) + (set_local $i3 + (i32.sub + (get_local $i3) + (i32.const 1) + ) + ) + ) + (br $while-in3) + ) + ) + (return + (get_local $i4) + ) + ) + (func $runPostSets (; 24 ;) + (nop) + ) + (func $_memset (; 25 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (set_local $i4 + (i32.add + (get_local $i1) + (get_local $i3) + ) + ) + (if + (i32.ge_s + (get_local $i3) + (i32.const 20) + ) + (block + (set_local $i2 + (i32.and + (get_local $i2) + (i32.const 255) + ) + ) + (set_local $i5 + (i32.and + (get_local $i1) + (i32.const 3) + ) + ) + (set_local $i6 + (i32.or + (i32.or + (i32.or + (get_local $i2) + (i32.shl + (get_local $i2) + (i32.const 8) + ) + ) + (i32.shl + (get_local $i2) + (i32.const 16) + ) + ) + (i32.shl + (get_local $i2) + (i32.const 24) + ) + ) + ) + (set_local $i7 + (i32.and + (get_local $i4) + (i32.xor + (i32.const 3) + (i32.const -1) + ) + ) + ) + (if + (get_local $i5) + (block + (set_local $i5 + (i32.sub + (i32.add + (get_local $i1) + (i32.const 4) + ) + (get_local $i5) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.lt_s + (get_local $i1) + (get_local $i5) + ) + ) + (br $while-out) + ) + (block + (i32.store8 + (get_local $i1) + (get_local $i2) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + ) + (br $while-in) + ) + ) + ) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eqz + (i32.lt_s + (get_local $i1) + (get_local $i7) + ) + ) + (br $while-out0) + ) + (block + (i32.store + (get_local $i1) + (get_local $i6) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 4) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eqz + (i32.lt_s + (get_local $i1) + (get_local $i4) + ) + ) + (br $while-out2) + ) + (block + (i32.store8 + (get_local $i1) + (get_local $i2) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + ) + (br $while-in3) + ) + ) + (return + (i32.sub + (get_local $i1) + (get_local $i3) + ) + ) + ) + (func $_puts (; 26 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (set_local $i2 + (i32.load + (i32.const 52) + ) + ) + (if + (i32.gt_s + (i32.load + (i32.add + (get_local $i2) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (set_local $i3 + (call $___lockfile + (get_local $i2) + ) + ) + (set_local $i3 + (i32.const 0) + ) + ) + (block $do-once + (if + (i32.lt_s + (call $_fputs + (get_local $i1) + (get_local $i2) + ) + (i32.const 0) + ) + (set_local $i4 + (i32.const 1) + ) + (block + (if + (if (result i32) + (i32.ne + (i32.load8_s + (i32.add + (get_local $i2) + (i32.const 75) + ) + ) + (i32.const 10) + ) + (block (result i32) + (set_local $i5 + (i32.add + (get_local $i2) + (i32.const 20) + ) + ) + (block (result i32) + (set_local $i6 + (i32.load + (get_local $i5) + ) + ) + (i32.lt_u + (get_local $i6) + (i32.load + (i32.add + (get_local $i2) + (i32.const 16) + ) + ) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $i5) + (i32.add + (get_local $i6) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $i6) + (i32.const 10) + ) + (set_local $i4 + (i32.const 0) + ) + (br $do-once) + ) + ) + (set_local $i4 + (i32.lt_s + (call $___overflow + (get_local $i2) + (i32.const 10) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (if + (get_local $i3) + (call $___unlockfile + (get_local $i2) + ) + ) + (return + (i32.shr_s + (i32.shl + (get_local $i4) + (i32.const 31) + ) + (i32.const 31) + ) + ) + ) + (func $___stdio_seek (; 27 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (set_local $i4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (set_local $i5 + (get_local $i4) + ) + (set_local $i6 + (i32.add + (get_local $i4) + (i32.const 20) + ) + ) + (i32.store + (get_local $i5) + (i32.load + (i32.add + (get_local $i1) + (i32.const 60) + ) + ) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 8) + ) + (get_local $i2) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 12) + ) + (get_local $i6) + ) + (i32.store + (i32.add + (get_local $i5) + (i32.const 16) + ) + (get_local $i3) + ) + (if + (i32.lt_s + (call $___syscall_ret + (call $___syscall140 + (i32.const 140) + (get_local $i5) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $i6) + (i32.const -1) + ) + (set_local $i7 + (i32.const -1) + ) + ) + (set_local $i7 + (i32.load + (get_local $i6) + ) + ) + ) + (set_global $STACKTOP + (get_local $i4) + ) + (return + (get_local $i7) + ) + ) + (func $___towrite (; 28 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (local $i4 i32) + (set_local $i2 + (i32.add + (get_local $i1) + (i32.const 74) + ) + ) + (set_local $i3 + (i32.load8_s + (get_local $i2) + ) + ) + (i32.store8 + (get_local $i2) + (i32.or + (i32.add + (get_local $i3) + (i32.const 255) + ) + (get_local $i3) + ) + ) + (set_local $i3 + (i32.load + (get_local $i1) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $i3) + (i32.const 8) + ) + ) + (block + (i32.store + (i32.add + (get_local $i1) + (i32.const 8) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 4) + ) + (i32.const 0) + ) + (set_local $i2 + (i32.load + (i32.add + (get_local $i1) + (i32.const 44) + ) + ) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 28) + ) + (get_local $i2) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 20) + ) + (get_local $i2) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 16) + ) + (i32.add + (get_local $i2) + (i32.load + (i32.add + (get_local $i1) + (i32.const 48) + ) + ) + ) + ) + (set_local $i4 + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $i1) + (i32.or + (get_local $i3) + (i32.const 32) + ) + ) + (set_local $i4 + (i32.const -1) + ) + ) + ) + (return + (get_local $i4) + ) + ) + (func $i32u-div (; 29 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (i32.div_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $_fwrite (; 30 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (param $i4 i32) (result i32) + (local $i5 i32) + (local $i6 i32) + (local $i7 i32) + (local $i8 i32) + (local $i9 i32) + (set_local $i5 + (i32.mul + (get_local $i3) + (get_local $i2) + ) + ) + (if + (i32.gt_s + (i32.load + (i32.add + (get_local $i4) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (block + (set_local $i6 + (i32.eq + (call $___lockfile + (get_local $i4) + ) + (i32.const 0) + ) + ) + (set_local $i7 + (call $___fwritex + (get_local $i1) + (get_local $i5) + (get_local $i4) + ) + ) + (if + (get_local $i6) + (set_local $i8 + (get_local $i7) + ) + (block + (call $___unlockfile + (get_local $i4) + ) + (set_local $i8 + (get_local $i7) + ) + ) + ) + ) + (set_local $i8 + (call $___fwritex + (get_local $i1) + (get_local $i5) + (get_local $i4) + ) + ) + ) + (if + (i32.eq + (get_local $i8) + (get_local $i5) + ) + (set_local $i9 + (get_local $i3) + ) + (set_local $i9 + (call $i32u-div + (get_local $i8) + (get_local $i2) + ) + ) + ) + (return + (get_local $i9) + ) + ) + (func $___stdout_write (; 31 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (local $i5 i32) + (set_local $i4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 80) + ) + ) + (set_local $i5 + (get_local $i4) + ) + (i32.store + (i32.add + (get_local $i1) + (i32.const 36) + ) + (i32.const 5) + ) + (if + (if (result i32) + (i32.eq + (i32.and + (i32.load + (get_local $i1) + ) + (i32.const 64) + ) + (i32.const 0) + ) + (block (result i32) + (i32.store + (get_local $i5) + (i32.load + (i32.add + (get_local $i1) + (i32.const 60) + ) + ) + ) + (block (result i32) + (i32.store + (i32.add + (get_local $i5) + (i32.const 4) + ) + (i32.const 21505) + ) + (block (result i32) + (i32.store + (i32.add + (get_local $i5) + (i32.const 8) + ) + (i32.add + (get_local $i4) + (i32.const 12) + ) + ) + (i32.ne + (call $___syscall54 + (i32.const 54) + (get_local $i5) + ) + (i32.const 0) + ) + ) + ) + ) + (i32.const 0) + ) + (i32.store8 + (i32.add + (get_local $i1) + (i32.const 75) + ) + (i32.const -1) + ) + ) + (set_local $i5 + (call $___stdio_write + (get_local $i1) + (get_local $i2) + (get_local $i3) + ) + ) + (set_global $STACKTOP + (get_local $i4) + ) + (return + (get_local $i5) + ) + ) + (func $copyTempDouble (; 32 ;) (param $i1 i32) + (i32.store8 + (get_global $tempDoublePtr) + (i32.load8_s + (get_local $i1) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 1) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 2) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 2) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 3) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 3) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 4) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 4) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 5) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 5) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 6) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 6) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 7) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 7) + ) + ) + ) + ) + (func $___stdio_close (; 33 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (local $i3 i32) + (set_local $i2 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $i3 + (get_local $i2) + ) + (i32.store + (get_local $i3) + (i32.load + (i32.add + (get_local $i1) + (i32.const 60) + ) + ) + ) + (set_local $i1 + (call $___syscall_ret + (call $___syscall6 + (i32.const 6) + (get_local $i3) + ) + ) + ) + (set_global $STACKTOP + (get_local $i2) + ) + (return + (get_local $i1) + ) + ) + (func $copyTempFloat (; 34 ;) (param $i1 i32) + (i32.store8 + (get_global $tempDoublePtr) + (i32.load8_s + (get_local $i1) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 1) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 2) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 2) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 3) + ) + (i32.load8_s + (i32.add + (get_local $i1) + (i32.const 3) + ) + ) + ) + ) + (func $___syscall_ret (; 35 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (if + (i32.gt_u + (get_local $i1) + (i32.const -4096) + ) + (block + (i32.store + (call $___errno_location) + (i32.sub + (i32.const 0) + (get_local $i1) + ) + ) + (set_local $i2 + (i32.const -1) + ) + ) + (set_local $i2 + (get_local $i1) + ) + ) + (return + (get_local $i2) + ) + ) + (func $dynCall_iiii (; 36 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (param $i4 i32) (result i32) + (return + (call_indirect (type $FUNCSIG$iiii) + (get_local $i2) + (get_local $i3) + (get_local $i4) + (i32.add + (i32.and + (get_local $i1) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (func $stackAlloc (; 37 ;) (param $i1 i32) (result i32) + (local $i2 i32) + (set_local $i2 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $i1) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (return + (get_local $i2) + ) + ) + (func $___errno_location (; 38 ;) (result i32) + (local $i1 i32) + (if + (i32.eqz + (i32.load + (i32.const 8) + ) + ) + (set_local $i1 + (i32.const 60) + ) + (set_local $i1 + (i32.load + (i32.add + (call $_pthread_self) + (i32.const 60) + ) + ) + ) + ) + (return + (get_local $i1) + ) + ) + (func $setThrew (; 39 ;) (param $i1 i32) (param $i2 i32) + (if + (i32.eqz + (get_global $__THREW__) + ) + (block + (set_global $__THREW__ + (get_local $i1) + ) + (set_global $threwValue + (get_local $i2) + ) + ) + ) + ) + (func $_fputs (; 40 ;) (param $i1 i32) (param $i2 i32) (result i32) + (return + (i32.add + (call $_fwrite + (get_local $i1) + (call $_strlen + (get_local $i1) + ) + (i32.const 1) + (get_local $i2) + ) + (i32.const -1) + ) + ) + ) + (func $dynCall_ii (; 41 ;) (param $i1 i32) (param $i2 i32) (result i32) + (return + (call_indirect (type $FUNCSIG$ii) + (get_local $i2) + (i32.add + (i32.and + (get_local $i1) + (i32.const 1) + ) + (i32.const 0) + ) + ) + ) + ) + (func $_cleanup_418 (; 42 ;) (param $i1 i32) + (if + (i32.eqz + (i32.load + (i32.add + (get_local $i1) + (i32.const 68) + ) + ) + ) + (call $___unlockfile + (get_local $i1) + ) + ) + (return) + ) + (func $establishStackSpace (; 43 ;) (param $i1 i32) (param $i2 i32) + (set_global $STACKTOP + (get_local $i1) + ) + (set_global $STACK_MAX + (get_local $i2) + ) + ) + (func $dynCall_vi (; 44 ;) (param $i1 i32) (param $i2 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $i2) + (i32.add + (i32.and + (get_local $i1) + (i32.const 7) + ) + (i32.const 10) + ) + ) + ) + (func $b1 (; 45 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (call $abort + (i32.const 1) + ) + (return + (i32.const 0) + ) + ) + (func $stackRestore (; 46 ;) (param $i1 i32) + (set_global $STACKTOP + (get_local $i1) + ) + ) + (func $setTempRet0 (; 47 ;) (param $i1 i32) + (set_global $tempRet0 + (get_local $i1) + ) + ) + (func $b0 (; 48 ;) (param $i1 i32) (result i32) + (call $abort + (i32.const 0) + ) + (return + (i32.const 0) + ) + ) + (func $___unlockfile (; 49 ;) (param $i1 i32) + (return) + ) + (func $___lockfile (; 50 ;) (param $i1 i32) (result i32) + (return + (i32.const 0) + ) + ) + (func $getTempRet0 (; 51 ;) (result i32) + (return + (get_global $tempRet0) + ) + ) + (func $_main (; 52 ;) (result i32) + (drop + (call $_puts + (i32.const 672) + ) + ) + (return + (i32.const 0) + ) + ) + (func $stackSave (; 53 ;) (result i32) + (return + (get_global $STACKTOP) + ) + ) + (func $b2 (; 54 ;) (param $i1 i32) + (call $abort + (i32.const 2) + ) + ) +) diff --git a/src/binaryen/test/emcc_O2_hello_world.wast.fromBinary b/src/binaryen/test/emcc_O2_hello_world.wast.fromBinary new file mode 100644 index 0000000000..d984427eea --- /dev/null +++ b/src/binaryen/test/emcc_O2_hello_world.wast.fromBinary @@ -0,0 +1,12698 @@ +(module + (memory 256 256) + (type $0 (func (param i32 i32 i32) (result i32))) + (type $1 (func (param i32) (result i32))) + (type $2 (func (param i32))) + (type $3 (func (result i32))) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func)) + (type $6 (func (param i32 i32))) + (type $7 (func (param i32 i32 i32 i32) (result i32))) + (import $abort "env" "abort" (param i32)) + (import $_pthread_cleanup_pop "env" "_pthread_cleanup_pop" (param i32)) + (import $_pthread_self "env" "_pthread_self" (result i32)) + (import $_sysconf "env" "_sysconf" (param i32) (result i32)) + (import $___lock "env" "___lock" (param i32)) + (import $___syscall6 "env" "___syscall6" (param i32 i32) (result i32)) + (import $_abort "env" "_abort") + (import $_sbrk "env" "_sbrk" (param i32) (result i32)) + (import $_time "env" "_time" (param i32) (result i32)) + (import $_pthread_cleanup_push "env" "_pthread_cleanup_push" (param i32 i32)) + (import $_emscripten_memcpy_big "env" "_emscripten_memcpy_big" (param i32 i32 i32) (result i32)) + (import $___syscall54 "env" "___syscall54" (param i32 i32) (result i32)) + (import $___unlock "env" "___unlock" (param i32)) + (import $___syscall140 "env" "___syscall140" (param i32 i32) (result i32)) + (import $___syscall146 "env" "___syscall146" (param i32 i32) (result i32)) + (export "_malloc" $_malloc) + (export "_free" $_free) + (export "_fflush" $_fflush) + (export "_memcpy" $_memcpy) + (export "runPostSets" $runPostSets) + (export "_memset" $_memset) + (export "dynCall_iiii" $dynCall_iiii) + (export "stackAlloc" $stackAlloc) + (export "___errno_location" $___errno_location) + (export "setThrew" $setThrew) + (export "dynCall_ii" $dynCall_ii) + (export "establishStackSpace" $establishStackSpace) + (export "dynCall_vi" $dynCall_vi) + (export "stackRestore" $stackRestore) + (export "setTempRet0" $setTempRet0) + (export "getTempRet0" $getTempRet0) + (export "_main" $_main) + (export "stackSave" $stackSave) + (table $b0 $___stdio_close $b1 $b1 $___stdout_write $___stdio_seek $b1 $___stdio_write $b1 $b1 $b2 $b2 $b2 $b2 $_cleanup_418 $b2 $b2 $b2) + (func $_malloc (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (local $var$19 i32) + (local $var$20 i32) + (local $var$21 i32) + (local $var$22 i32) + (local $var$23 i32) + (local $var$24 i32) + (local $var$25 i32) + (local $var$26 i32) + (local $var$27 i32) + (local $var$28 i32) + (local $var$29 i32) + (local $var$30 i32) + (local $var$31 i32) + (local $var$32 i32) + (local $var$33 i32) + (local $var$34 i32) + (local $var$35 i32) + (local $var$36 i32) + (local $var$37 i32) + (local $var$38 i32) + (local $var$39 i32) + (local $var$40 i32) + (local $var$41 i32) + (local $var$42 i32) + (local $var$43 i32) + (local $var$44 i32) + (local $var$45 i32) + (local $var$46 i32) + (local $var$47 i32) + (local $var$48 i32) + (local $var$49 i32) + (local $var$50 i32) + (local $var$51 i32) + (local $var$52 i32) + (local $var$53 i32) + (local $var$54 i32) + (local $var$55 i32) + (local $var$56 i32) + (local $var$57 i32) + (local $var$58 i32) + (local $var$59 i32) + (local $var$60 i32) + (local $var$61 i32) + (local $var$62 i32) + (local $var$63 i32) + (local $var$64 i32) + (local $var$65 i32) + (local $var$66 i32) + (local $var$67 i32) + (local $var$68 i32) + (local $var$69 i32) + (local $var$70 i32) + (local $var$71 i32) + (local $var$72 i32) + (local $var$73 i32) + (local $var$74 i32) + (local $var$75 i32) + (local $var$76 i32) + (local $var$77 i32) + (local $var$78 i32) + (local $var$79 i32) + (local $var$80 i32) + (local $var$81 i32) + (local $var$82 i32) + (local $var$83 i32) + (local $var$84 i32) + (local $var$85 i32) + (local $var$86 i32) + (local $var$87 i32) + (local $var$88 i32) + (local $var$89 i32) + (local $var$90 i32) + (local $var$91 i32) + (block $label$0 + (block $label$1 + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$0) + (i32.const 0) + ) + (i32.const 245) + ) + (block $label$2 + (set_local $var$1 + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$0) + (i32.const 0) + ) + (i32.const 11) + ) + (i32.const 16) + (i32.and + (i32.add + (get_local $var$0) + (i32.const 11) + ) + (i32.const -8) + ) + ) + ) + (set_local $var$2 + (i32.shr_u + (get_local $var$1) + (i32.const 3) + ) + ) + (set_local $var$3 + (i32.load align=4 + (i32.const 176) + ) + ) + (set_local $var$4 + (i32.shr_u + (get_local $var$3) + (get_local $var$2) + ) + ) + (if + (i32.and + (get_local $var$4) + (i32.const 3) + ) + (block $label$3 + (set_local $var$5 + (i32.add + (i32.xor + (i32.and + (get_local $var$4) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $var$2) + ) + ) + (set_local $var$6 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $var$5) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $var$7 + (i32.add + (get_local $var$6) + (i32.const 8) + ) + ) + (set_local $var$8 + (i32.load align=4 + (get_local $var$7) + ) + ) + (set_local $var$9 + (i32.add + (get_local $var$8) + (i32.const 8) + ) + ) + (set_local $var$10 + (i32.load align=4 + (get_local $var$9) + ) + ) + (block $label$4 + (if_else + (i32.ne + (get_local $var$6) + (get_local $var$10) + ) + (block $label$5 + (if + (i32.lt_u + (i32.shr_u + (get_local $var$10) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$11 + (i32.add + (get_local $var$10) + (i32.const 12) + ) + ) + (if_else + (i32.eq + (i32.load align=4 + (get_local $var$11) + ) + (get_local $var$8) + ) + (block $label$6 + (i32.store align=4 + (get_local $var$11) + (get_local $var$6) + ) + (i32.store align=4 + (get_local $var$7) + (get_local $var$10) + ) + (br $label$4) + ) + (call_import $_abort) + ) + ) + (i32.store align=4 + (i32.const 176) + (i32.and + (get_local $var$3) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $var$5) + ) + (i32.const -1) + ) + ) + ) + ) + ) + (set_local $var$10 + (i32.shl + (get_local $var$5) + (i32.const 3) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$8) + (i32.const 4) + ) + (i32.or + (get_local $var$10) + (i32.const 3) + ) + ) + (set_local $var$7 + (i32.add + (i32.add + (get_local $var$8) + (get_local $var$10) + ) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$7) + (i32.or + (i32.load align=4 + (get_local $var$7) + ) + (i32.const 1) + ) + ) + (set_local $var$12 + (get_local $var$9) + ) + (br $label$0 + (get_local $var$12) + ) + ) + ) + (set_local $var$7 + (i32.load align=4 + (i32.const 184) + ) + ) + (if_else + (i32.gt_u + (i32.shr_u + (get_local $var$1) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$7) + (i32.const 0) + ) + ) + (block $label$7 + (if + (get_local $var$4) + (block $label$8 + (set_local $var$10 + (i32.shl + (i32.const 2) + (get_local $var$2) + ) + ) + (set_local $var$6 + (i32.and + (i32.shl + (get_local $var$4) + (get_local $var$2) + ) + (i32.or + (get_local $var$10) + (i32.sub + (i32.const 0) + (get_local $var$10) + ) + ) + ) + ) + (set_local $var$10 + (i32.add + (i32.and + (get_local $var$6) + (i32.sub + (i32.const 0) + (get_local $var$6) + ) + ) + (i32.const -1) + ) + ) + (set_local $var$6 + (i32.and + (i32.shr_u + (get_local $var$10) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $var$11 + (i32.shr_u + (get_local $var$10) + (get_local $var$6) + ) + ) + (set_local $var$10 + (i32.and + (i32.shr_u + (get_local $var$11) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $var$13 + (i32.shr_u + (get_local $var$11) + (get_local $var$10) + ) + ) + (set_local $var$11 + (i32.and + (i32.shr_u + (get_local $var$13) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $var$14 + (i32.shr_u + (get_local $var$13) + (get_local $var$11) + ) + ) + (set_local $var$13 + (i32.and + (i32.shr_u + (get_local $var$14) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $var$15 + (i32.shr_u + (get_local $var$14) + (get_local $var$13) + ) + ) + (set_local $var$14 + (i32.and + (i32.shr_u + (get_local $var$15) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $var$16 + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $var$10) + (get_local $var$6) + ) + (get_local $var$11) + ) + (get_local $var$13) + ) + (get_local $var$14) + ) + (i32.shr_u + (get_local $var$15) + (get_local $var$14) + ) + ) + ) + (set_local $var$14 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $var$16) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $var$15 + (i32.add + (get_local $var$14) + (i32.const 8) + ) + ) + (set_local $var$13 + (i32.load align=4 + (get_local $var$15) + ) + ) + (set_local $var$11 + (i32.add + (get_local $var$13) + (i32.const 8) + ) + ) + (set_local $var$6 + (i32.load align=4 + (get_local $var$11) + ) + ) + (block $label$9 + (if_else + (i32.ne + (get_local $var$14) + (get_local $var$6) + ) + (block $label$10 + (if + (i32.lt_u + (i32.shr_u + (get_local $var$6) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$10 + (i32.add + (get_local $var$6) + (i32.const 12) + ) + ) + (if_else + (i32.eq + (i32.load align=4 + (get_local $var$10) + ) + (get_local $var$13) + ) + (block $label$11 + (i32.store align=4 + (get_local $var$10) + (get_local $var$14) + ) + (i32.store align=4 + (get_local $var$15) + (get_local $var$6) + ) + (set_local $var$17 + (i32.load align=4 + (i32.const 184) + ) + ) + (br $label$9) + ) + (call_import $_abort) + ) + ) + (block $label$12 + (i32.store align=4 + (i32.const 176) + (i32.and + (get_local $var$3) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $var$16) + ) + (i32.const -1) + ) + ) + ) + (set_local $var$17 + (get_local $var$7) + ) + ) + ) + ) + (set_local $var$7 + (i32.sub + (i32.shl + (get_local $var$16) + (i32.const 3) + ) + (get_local $var$1) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$13) + (i32.const 4) + ) + (i32.or + (get_local $var$1) + (i32.const 3) + ) + ) + (set_local $var$3 + (i32.add + (get_local $var$13) + (get_local $var$1) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$3) + (i32.const 4) + ) + (i32.or + (get_local $var$7) + (i32.const 1) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$3) + (get_local $var$7) + ) + (get_local $var$7) + ) + (if + (get_local $var$17) + (block $label$13 + (set_local $var$6 + (i32.load align=4 + (i32.const 196) + ) + ) + (set_local $var$15 + (i32.shr_u + (get_local $var$17) + (i32.const 3) + ) + ) + (set_local $var$14 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $var$15) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $var$2 + (i32.load align=4 + (i32.const 176) + ) + ) + (set_local $var$4 + (i32.shl + (i32.const 1) + (get_local $var$15) + ) + ) + (if_else + (i32.and + (get_local $var$2) + (get_local $var$4) + ) + (block $label$14 + (set_local $var$15 + (i32.add + (get_local $var$14) + (i32.const 8) + ) + ) + (set_local $var$9 + (i32.load align=4 + (get_local $var$15) + ) + ) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$9) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$15 + (set_local $var$18 + (get_local $var$15) + ) + (set_local $var$19 + (get_local $var$9) + ) + ) + ) + ) + (block $label$16 + (i32.store align=4 + (i32.const 176) + (i32.or + (get_local $var$2) + (get_local $var$4) + ) + ) + (set_local $var$18 + (i32.add + (get_local $var$14) + (i32.const 8) + ) + ) + (set_local $var$19 + (get_local $var$14) + ) + ) + ) + (i32.store align=4 + (get_local $var$18) + (get_local $var$6) + ) + (i32.store align=4 + (i32.add + (get_local $var$19) + (i32.const 12) + ) + (get_local $var$6) + ) + (i32.store align=4 + (i32.add + (get_local $var$6) + (i32.const 8) + ) + (get_local $var$19) + ) + (i32.store align=4 + (i32.add + (get_local $var$6) + (i32.const 12) + ) + (get_local $var$14) + ) + ) + ) + (i32.store align=4 + (i32.const 184) + (get_local $var$7) + ) + (i32.store align=4 + (i32.const 196) + (get_local $var$3) + ) + (set_local $var$12 + (get_local $var$11) + ) + (br $label$0 + (get_local $var$12) + ) + ) + ) + (set_local $var$3 + (i32.load align=4 + (i32.const 180) + ) + ) + (if_else + (get_local $var$3) + (block $label$17 + (set_local $var$7 + (i32.add + (i32.and + (get_local $var$3) + (i32.sub + (i32.const 0) + (get_local $var$3) + ) + ) + (i32.const -1) + ) + ) + (set_local $var$3 + (i32.and + (i32.shr_u + (get_local $var$7) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $var$14 + (i32.shr_u + (get_local $var$7) + (get_local $var$3) + ) + ) + (set_local $var$7 + (i32.and + (i32.shr_u + (get_local $var$14) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $var$6 + (i32.shr_u + (get_local $var$14) + (get_local $var$7) + ) + ) + (set_local $var$14 + (i32.and + (i32.shr_u + (get_local $var$6) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $var$4 + (i32.shr_u + (get_local $var$6) + (get_local $var$14) + ) + ) + (set_local $var$6 + (i32.and + (i32.shr_u + (get_local $var$4) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $var$2 + (i32.shr_u + (get_local $var$4) + (get_local $var$6) + ) + ) + (set_local $var$4 + (i32.and + (i32.shr_u + (get_local $var$2) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $var$9 + (i32.load align=4 + (i32.add + (i32.const 480) + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $var$7) + (get_local $var$3) + ) + (get_local $var$14) + ) + (get_local $var$6) + ) + (get_local $var$4) + ) + (i32.shr_u + (get_local $var$2) + (get_local $var$4) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $var$4 + (i32.sub + (i32.and + (i32.load align=4 + (i32.add + (get_local $var$9) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $var$1) + ) + ) + (set_local $var$2 + (get_local $var$9) + ) + (set_local $var$6 + (get_local $var$9) + ) + (loop $label$18 $label$19 + (block $label$20 + (set_local $var$9 + (i32.load align=4 + (i32.add + (get_local $var$2) + (i32.const 16) + ) + ) + ) + (if_else + (i32.eq + (get_local $var$9) + (i32.const 0) + ) + (block $label$21 + (set_local $var$14 + (i32.load align=4 + (i32.add + (get_local $var$2) + (i32.const 20) + ) + ) + ) + (if_else + (i32.eq + (get_local $var$14) + (i32.const 0) + ) + (block $label$22 + (set_local $var$20 + (get_local $var$4) + ) + (set_local $var$21 + (get_local $var$6) + ) + (br $label$18) + ) + (set_local $var$22 + (get_local $var$14) + ) + ) + ) + (set_local $var$22 + (get_local $var$9) + ) + ) + (set_local $var$9 + (i32.sub + (i32.and + (i32.load align=4 + (i32.add + (get_local $var$22) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $var$1) + ) + ) + (set_local $var$14 + (i32.lt_u + (i32.shr_u + (get_local $var$9) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$4) + (i32.const 0) + ) + ) + ) + (set_local $var$4 + (if_else + (get_local $var$14) + (get_local $var$9) + (get_local $var$4) + ) + ) + (set_local $var$2 + (get_local $var$22) + ) + (set_local $var$6 + (if_else + (get_local $var$14) + (get_local $var$22) + (get_local $var$6) + ) + ) + (br $label$19) + ) + ) + (set_local $var$6 + (i32.load align=4 + (i32.const 192) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$21) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$6) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$2 + (i32.add + (get_local $var$21) + (get_local $var$1) + ) + ) + (if + (i32.ge_u + (i32.shr_u + (get_local $var$21) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$2) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$4 + (i32.load align=4 + (i32.add + (get_local $var$21) + (i32.const 24) + ) + ) + ) + (set_local $var$11 + (i32.load align=4 + (i32.add + (get_local $var$21) + (i32.const 12) + ) + ) + ) + (block $label$23 + (if_else + (i32.eq + (get_local $var$11) + (get_local $var$21) + ) + (block $label$24 + (set_local $var$13 + (i32.add + (get_local $var$21) + (i32.const 20) + ) + ) + (set_local $var$16 + (i32.load align=4 + (get_local $var$13) + ) + ) + (if_else + (i32.eq + (get_local $var$16) + (i32.const 0) + ) + (block $label$25 + (set_local $var$14 + (i32.add + (get_local $var$21) + (i32.const 16) + ) + ) + (set_local $var$9 + (i32.load align=4 + (get_local $var$14) + ) + ) + (if_else + (i32.eq + (get_local $var$9) + (i32.const 0) + ) + (block $label$26 + (set_local $var$23 + (i32.const 0) + ) + (br $label$23) + ) + (block $label$27 + (set_local $var$24 + (get_local $var$9) + ) + (set_local $var$25 + (get_local $var$14) + ) + ) + ) + ) + (block $label$28 + (set_local $var$24 + (get_local $var$16) + ) + (set_local $var$25 + (get_local $var$13) + ) + ) + ) + (loop $label$29 $label$30 + (block $label$31 + (set_local $var$13 + (i32.add + (get_local $var$24) + (i32.const 20) + ) + ) + (set_local $var$16 + (i32.load align=4 + (get_local $var$13) + ) + ) + (if + (get_local $var$16) + (block $label$32 + (set_local $var$24 + (get_local $var$16) + ) + (set_local $var$25 + (get_local $var$13) + ) + (br $label$30) + ) + ) + (set_local $var$13 + (i32.add + (get_local $var$24) + (i32.const 16) + ) + ) + (set_local $var$16 + (i32.load align=4 + (get_local $var$13) + ) + ) + (if_else + (i32.eq + (get_local $var$16) + (i32.const 0) + ) + (block $label$33 + (set_local $var$26 + (get_local $var$24) + ) + (set_local $var$27 + (get_local $var$25) + ) + (br $label$29) + ) + (block $label$34 + (set_local $var$24 + (get_local $var$16) + ) + (set_local $var$25 + (get_local $var$13) + ) + ) + ) + (br $label$30) + ) + ) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$27) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$6) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$35 + (i32.store align=4 + (get_local $var$27) + (i32.const 0) + ) + (set_local $var$23 + (get_local $var$26) + ) + (br $label$23) + ) + ) + ) + (block $label$36 + (set_local $var$13 + (i32.load align=4 + (i32.add + (get_local $var$21) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$13) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$6) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$16 + (i32.add + (get_local $var$13) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load align=4 + (get_local $var$16) + ) + (get_local $var$21) + ) + (call_import $_abort) + ) + (set_local $var$14 + (i32.add + (get_local $var$11) + (i32.const 8) + ) + ) + (if_else + (i32.eq + (i32.load align=4 + (get_local $var$14) + ) + (get_local $var$21) + ) + (block $label$37 + (i32.store align=4 + (get_local $var$16) + (get_local $var$11) + ) + (i32.store align=4 + (get_local $var$14) + (get_local $var$13) + ) + (set_local $var$23 + (get_local $var$11) + ) + (br $label$23) + ) + (call_import $_abort) + ) + ) + ) + ) + (block $label$38 + (if + (get_local $var$4) + (block $label$39 + (set_local $var$11 + (i32.load align=4 + (i32.add + (get_local $var$21) + (i32.const 28) + ) + ) + ) + (set_local $var$6 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$11) + (i32.const 2) + ) + ) + ) + (if_else + (i32.eq + (get_local $var$21) + (i32.load align=4 + (get_local $var$6) + ) + ) + (block $label$40 + (i32.store align=4 + (get_local $var$6) + (get_local $var$23) + ) + (if + (i32.eq + (get_local $var$23) + (i32.const 0) + ) + (block $label$41 + (i32.store align=4 + (i32.const 180) + (i32.and + (i32.load align=4 + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $var$11) + ) + (i32.const -1) + ) + ) + ) + (br $label$38) + ) + ) + ) + (block $label$42 + (if + (i32.lt_u + (i32.shr_u + (get_local $var$4) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$11 + (i32.add + (get_local $var$4) + (i32.const 16) + ) + ) + (if_else + (i32.eq + (i32.load align=4 + (get_local $var$11) + ) + (get_local $var$21) + ) + (i32.store align=4 + (get_local $var$11) + (get_local $var$23) + ) + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 20) + ) + (get_local $var$23) + ) + ) + (if + (i32.eq + (get_local $var$23) + (i32.const 0) + ) + (br $label$38) + ) + ) + ) + (set_local $var$11 + (i32.load align=4 + (i32.const 192) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$23) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$11) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (i32.store align=4 + (i32.add + (get_local $var$23) + (i32.const 24) + ) + (get_local $var$4) + ) + (set_local $var$6 + (i32.load align=4 + (i32.add + (get_local $var$21) + (i32.const 16) + ) + ) + ) + (block $label$43 + (if + (get_local $var$6) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$6) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$11) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$44 + (i32.store align=4 + (i32.add + (get_local $var$23) + (i32.const 16) + ) + (get_local $var$6) + ) + (i32.store align=4 + (i32.add + (get_local $var$6) + (i32.const 24) + ) + (get_local $var$23) + ) + (br $label$43) + ) + ) + ) + ) + (set_local $var$6 + (i32.load align=4 + (i32.add + (get_local $var$21) + (i32.const 20) + ) + ) + ) + (if + (get_local $var$6) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$6) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$45 + (i32.store align=4 + (i32.add + (get_local $var$23) + (i32.const 20) + ) + (get_local $var$6) + ) + (i32.store align=4 + (i32.add + (get_local $var$6) + (i32.const 24) + ) + (get_local $var$23) + ) + (br $label$38) + ) + ) + ) + ) + ) + ) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$20) + (i32.const 0) + ) + (i32.const 16) + ) + (block $label$46 + (set_local $var$4 + (i32.add + (get_local $var$20) + (get_local $var$1) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$21) + (i32.const 4) + ) + (i32.or + (get_local $var$4) + (i32.const 3) + ) + ) + (set_local $var$6 + (i32.add + (i32.add + (get_local $var$21) + (get_local $var$4) + ) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$6) + (i32.or + (i32.load align=4 + (get_local $var$6) + ) + (i32.const 1) + ) + ) + ) + (block $label$47 + (i32.store align=4 + (i32.add + (get_local $var$21) + (i32.const 4) + ) + (i32.or + (get_local $var$1) + (i32.const 3) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$2) + (i32.const 4) + ) + (i32.or + (get_local $var$20) + (i32.const 1) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$2) + (get_local $var$20) + ) + (get_local $var$20) + ) + (set_local $var$6 + (i32.load align=4 + (i32.const 184) + ) + ) + (if + (get_local $var$6) + (block $label$48 + (set_local $var$4 + (i32.load align=4 + (i32.const 196) + ) + ) + (set_local $var$11 + (i32.shr_u + (get_local $var$6) + (i32.const 3) + ) + ) + (set_local $var$6 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $var$11) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $var$13 + (i32.load align=4 + (i32.const 176) + ) + ) + (set_local $var$14 + (i32.shl + (i32.const 1) + (get_local $var$11) + ) + ) + (if_else + (i32.and + (get_local $var$13) + (get_local $var$14) + ) + (block $label$49 + (set_local $var$11 + (i32.add + (get_local $var$6) + (i32.const 8) + ) + ) + (set_local $var$16 + (i32.load align=4 + (get_local $var$11) + ) + ) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$16) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$50 + (set_local $var$28 + (get_local $var$11) + ) + (set_local $var$29 + (get_local $var$16) + ) + ) + ) + ) + (block $label$51 + (i32.store align=4 + (i32.const 176) + (i32.or + (get_local $var$13) + (get_local $var$14) + ) + ) + (set_local $var$28 + (i32.add + (get_local $var$6) + (i32.const 8) + ) + ) + (set_local $var$29 + (get_local $var$6) + ) + ) + ) + (i32.store align=4 + (get_local $var$28) + (get_local $var$4) + ) + (i32.store align=4 + (i32.add + (get_local $var$29) + (i32.const 12) + ) + (get_local $var$4) + ) + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 8) + ) + (get_local $var$29) + ) + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 12) + ) + (get_local $var$6) + ) + ) + ) + (i32.store align=4 + (i32.const 184) + (get_local $var$20) + ) + (i32.store align=4 + (i32.const 196) + (get_local $var$2) + ) + ) + ) + (set_local $var$12 + (i32.add + (get_local $var$21) + (i32.const 8) + ) + ) + (br $label$0 + (get_local $var$12) + ) + ) + (set_local $var$30 + (get_local $var$1) + ) + ) + ) + (set_local $var$30 + (get_local $var$1) + ) + ) + ) + (if_else + (i32.le_u + (i32.shr_u + (get_local $var$0) + (i32.const 0) + ) + (i32.const -65) + ) + (block $label$52 + (set_local $var$6 + (i32.add + (get_local $var$0) + (i32.const 11) + ) + ) + (set_local $var$4 + (i32.and + (get_local $var$6) + (i32.const -8) + ) + ) + (set_local $var$14 + (i32.load align=4 + (i32.const 180) + ) + ) + (if_else + (get_local $var$14) + (block $label$53 + (set_local $var$13 + (i32.sub + (i32.const 0) + (get_local $var$4) + ) + ) + (set_local $var$16 + (i32.shr_u + (get_local $var$6) + (i32.const 8) + ) + ) + (if_else + (get_local $var$16) + (if_else + (i32.gt_u + (i32.shr_u + (get_local $var$4) + (i32.const 0) + ) + (i32.const 16777215) + ) + (set_local $var$31 + (i32.const 31) + ) + (block $label$54 + (set_local $var$6 + (i32.and + (i32.shr_u + (i32.add + (get_local $var$16) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $var$11 + (i32.shl + (get_local $var$16) + (get_local $var$6) + ) + ) + (set_local $var$16 + (i32.and + (i32.shr_u + (i32.add + (get_local $var$11) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $var$9 + (i32.shl + (get_local $var$11) + (get_local $var$16) + ) + ) + (set_local $var$11 + (i32.and + (i32.shr_u + (i32.add + (get_local $var$9) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $var$3 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $var$16) + (get_local $var$6) + ) + (get_local $var$11) + ) + ) + (i32.shr_u + (i32.shl + (get_local $var$9) + (get_local $var$11) + ) + (i32.const 15) + ) + ) + ) + (set_local $var$31 + (i32.or + (i32.and + (i32.shr_u + (get_local $var$4) + (i32.add + (get_local $var$3) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $var$3) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $var$31 + (i32.const 0) + ) + ) + (set_local $var$3 + (i32.load align=4 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$31) + (i32.const 2) + ) + ) + ) + ) + (block $label$55 + (if_else + (i32.eq + (get_local $var$3) + (i32.const 0) + ) + (block $label$56 + (set_local $var$32 + (get_local $var$13) + ) + (set_local $var$33 + (i32.const 0) + ) + (set_local $var$34 + (i32.const 0) + ) + (set_local $var$35 + (i32.const 86) + ) + ) + (block $label$57 + (set_local $var$11 + (get_local $var$13) + ) + (set_local $var$9 + (i32.const 0) + ) + (set_local $var$6 + (i32.shl + (get_local $var$4) + (if_else + (i32.eq + (get_local $var$31) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $var$31) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $var$16 + (get_local $var$3) + ) + (set_local $var$7 + (i32.const 0) + ) + (loop $label$58 $label$59 + (block $label$60 + (set_local $var$15 + (i32.and + (i32.load align=4 + (i32.add + (get_local $var$16) + (i32.const 4) + ) + ) + (i32.const -8) + ) + ) + (set_local $var$8 + (i32.sub + (get_local $var$15) + (get_local $var$4) + ) + ) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$8) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$11) + (i32.const 0) + ) + ) + (if_else + (i32.eq + (get_local $var$15) + (get_local $var$4) + ) + (block $label$61 + (set_local $var$36 + (get_local $var$8) + ) + (set_local $var$37 + (get_local $var$16) + ) + (set_local $var$38 + (get_local $var$16) + ) + (set_local $var$35 + (i32.const 90) + ) + (br $label$55) + ) + (block $label$62 + (set_local $var$39 + (get_local $var$8) + ) + (set_local $var$40 + (get_local $var$16) + ) + ) + ) + (block $label$63 + (set_local $var$39 + (get_local $var$11) + ) + (set_local $var$40 + (get_local $var$7) + ) + ) + ) + (set_local $var$8 + (i32.load align=4 + (i32.add + (get_local $var$16) + (i32.const 20) + ) + ) + ) + (set_local $var$16 + (i32.load align=4 + (i32.add + (i32.add + (get_local $var$16) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $var$6) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $var$15 + (if_else + (i32.or + (i32.eq + (get_local $var$8) + (i32.const 0) + ) + (i32.eq + (get_local $var$8) + (get_local $var$16) + ) + ) + (get_local $var$9) + (get_local $var$8) + ) + ) + (set_local $var$8 + (i32.eq + (get_local $var$16) + (i32.const 0) + ) + ) + (if_else + (get_local $var$8) + (block $label$64 + (set_local $var$32 + (get_local $var$39) + ) + (set_local $var$33 + (get_local $var$15) + ) + (set_local $var$34 + (get_local $var$40) + ) + (set_local $var$35 + (i32.const 86) + ) + (br $label$58) + ) + (block $label$65 + (set_local $var$11 + (get_local $var$39) + ) + (set_local $var$9 + (get_local $var$15) + ) + (set_local $var$6 + (i32.shl + (get_local $var$6) + (i32.xor + (i32.and + (get_local $var$8) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (set_local $var$7 + (get_local $var$40) + ) + ) + ) + (br $label$59) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $var$35) + (i32.const 86) + ) + (block $label$66 + (if_else + (i32.and + (i32.eq + (get_local $var$33) + (i32.const 0) + ) + (i32.eq + (get_local $var$34) + (i32.const 0) + ) + ) + (block $label$67 + (set_local $var$3 + (i32.shl + (i32.const 2) + (get_local $var$31) + ) + ) + (set_local $var$13 + (i32.and + (get_local $var$14) + (i32.or + (get_local $var$3) + (i32.sub + (i32.const 0) + (get_local $var$3) + ) + ) + ) + ) + (if + (i32.eq + (get_local $var$13) + (i32.const 0) + ) + (block $label$68 + (set_local $var$30 + (get_local $var$4) + ) + (br $label$1) + ) + ) + (set_local $var$3 + (i32.add + (i32.and + (get_local $var$13) + (i32.sub + (i32.const 0) + (get_local $var$13) + ) + ) + (i32.const -1) + ) + ) + (set_local $var$13 + (i32.and + (i32.shr_u + (get_local $var$3) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $var$1 + (i32.shr_u + (get_local $var$3) + (get_local $var$13) + ) + ) + (set_local $var$3 + (i32.and + (i32.shr_u + (get_local $var$1) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $var$2 + (i32.shr_u + (get_local $var$1) + (get_local $var$3) + ) + ) + (set_local $var$1 + (i32.and + (i32.shr_u + (get_local $var$2) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $var$7 + (i32.shr_u + (get_local $var$2) + (get_local $var$1) + ) + ) + (set_local $var$2 + (i32.and + (i32.shr_u + (get_local $var$7) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $var$6 + (i32.shr_u + (get_local $var$7) + (get_local $var$2) + ) + ) + (set_local $var$7 + (i32.and + (i32.shr_u + (get_local $var$6) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $var$41 + (i32.load align=4 + (i32.add + (i32.const 480) + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $var$3) + (get_local $var$13) + ) + (get_local $var$1) + ) + (get_local $var$2) + ) + (get_local $var$7) + ) + (i32.shr_u + (get_local $var$6) + (get_local $var$7) + ) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (set_local $var$41 + (get_local $var$33) + ) + ) + (if_else + (i32.eq + (get_local $var$41) + (i32.const 0) + ) + (block $label$69 + (set_local $var$42 + (get_local $var$32) + ) + (set_local $var$43 + (get_local $var$34) + ) + ) + (block $label$70 + (set_local $var$36 + (get_local $var$32) + ) + (set_local $var$37 + (get_local $var$41) + ) + (set_local $var$38 + (get_local $var$34) + ) + (set_local $var$35 + (i32.const 90) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $var$35) + (i32.const 90) + ) + (loop $label$71 $label$72 + (block $label$73 + (set_local $var$35 + (i32.const 0) + ) + (set_local $var$7 + (i32.sub + (i32.and + (i32.load align=4 + (i32.add + (get_local $var$37) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $var$4) + ) + ) + (set_local $var$6 + (i32.lt_u + (i32.shr_u + (get_local $var$7) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$36) + (i32.const 0) + ) + ) + ) + (set_local $var$2 + (if_else + (get_local $var$6) + (get_local $var$7) + (get_local $var$36) + ) + ) + (set_local $var$7 + (if_else + (get_local $var$6) + (get_local $var$37) + (get_local $var$38) + ) + ) + (set_local $var$6 + (i32.load align=4 + (i32.add + (get_local $var$37) + (i32.const 16) + ) + ) + ) + (if + (get_local $var$6) + (block $label$74 + (set_local $var$36 + (get_local $var$2) + ) + (set_local $var$37 + (get_local $var$6) + ) + (set_local $var$38 + (get_local $var$7) + ) + (set_local $var$35 + (i32.const 90) + ) + (br $label$72) + ) + ) + (set_local $var$37 + (i32.load align=4 + (i32.add + (get_local $var$37) + (i32.const 20) + ) + ) + ) + (if_else + (i32.eq + (get_local $var$37) + (i32.const 0) + ) + (block $label$75 + (set_local $var$42 + (get_local $var$2) + ) + (set_local $var$43 + (get_local $var$7) + ) + (br $label$71) + ) + (block $label$76 + (set_local $var$36 + (get_local $var$2) + ) + (set_local $var$38 + (get_local $var$7) + ) + (set_local $var$35 + (i32.const 90) + ) + ) + ) + (br $label$72) + ) + ) + ) + (if_else + (if_else + (i32.ne + (get_local $var$43) + (i32.const 0) + ) + (i32.lt_u + (i32.shr_u + (get_local $var$42) + (i32.const 0) + ) + (i32.shr_u + (i32.sub + (i32.load align=4 + (i32.const 184) + ) + (get_local $var$4) + ) + (i32.const 0) + ) + ) + (i32.const 0) + ) + (block $label$77 + (set_local $var$14 + (i32.load align=4 + (i32.const 192) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$43) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$14) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$7 + (i32.add + (get_local $var$43) + (get_local $var$4) + ) + ) + (if + (i32.ge_u + (i32.shr_u + (get_local $var$43) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$7) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$2 + (i32.load align=4 + (i32.add + (get_local $var$43) + (i32.const 24) + ) + ) + ) + (set_local $var$6 + (i32.load align=4 + (i32.add + (get_local $var$43) + (i32.const 12) + ) + ) + ) + (block $label$78 + (if_else + (i32.eq + (get_local $var$6) + (get_local $var$43) + ) + (block $label$79 + (set_local $var$1 + (i32.add + (get_local $var$43) + (i32.const 20) + ) + ) + (set_local $var$13 + (i32.load align=4 + (get_local $var$1) + ) + ) + (if_else + (i32.eq + (get_local $var$13) + (i32.const 0) + ) + (block $label$80 + (set_local $var$3 + (i32.add + (get_local $var$43) + (i32.const 16) + ) + ) + (set_local $var$9 + (i32.load align=4 + (get_local $var$3) + ) + ) + (if_else + (i32.eq + (get_local $var$9) + (i32.const 0) + ) + (block $label$81 + (set_local $var$44 + (i32.const 0) + ) + (br $label$78) + ) + (block $label$82 + (set_local $var$45 + (get_local $var$9) + ) + (set_local $var$46 + (get_local $var$3) + ) + ) + ) + ) + (block $label$83 + (set_local $var$45 + (get_local $var$13) + ) + (set_local $var$46 + (get_local $var$1) + ) + ) + ) + (loop $label$84 $label$85 + (block $label$86 + (set_local $var$1 + (i32.add + (get_local $var$45) + (i32.const 20) + ) + ) + (set_local $var$13 + (i32.load align=4 + (get_local $var$1) + ) + ) + (if + (get_local $var$13) + (block $label$87 + (set_local $var$45 + (get_local $var$13) + ) + (set_local $var$46 + (get_local $var$1) + ) + (br $label$85) + ) + ) + (set_local $var$1 + (i32.add + (get_local $var$45) + (i32.const 16) + ) + ) + (set_local $var$13 + (i32.load align=4 + (get_local $var$1) + ) + ) + (if_else + (i32.eq + (get_local $var$13) + (i32.const 0) + ) + (block $label$88 + (set_local $var$47 + (get_local $var$45) + ) + (set_local $var$48 + (get_local $var$46) + ) + (br $label$84) + ) + (block $label$89 + (set_local $var$45 + (get_local $var$13) + ) + (set_local $var$46 + (get_local $var$1) + ) + ) + ) + (br $label$85) + ) + ) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$48) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$14) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$90 + (i32.store align=4 + (get_local $var$48) + (i32.const 0) + ) + (set_local $var$44 + (get_local $var$47) + ) + (br $label$78) + ) + ) + ) + (block $label$91 + (set_local $var$1 + (i32.load align=4 + (i32.add + (get_local $var$43) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$1) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$14) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$13 + (i32.add + (get_local $var$1) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load align=4 + (get_local $var$13) + ) + (get_local $var$43) + ) + (call_import $_abort) + ) + (set_local $var$3 + (i32.add + (get_local $var$6) + (i32.const 8) + ) + ) + (if_else + (i32.eq + (i32.load align=4 + (get_local $var$3) + ) + (get_local $var$43) + ) + (block $label$92 + (i32.store align=4 + (get_local $var$13) + (get_local $var$6) + ) + (i32.store align=4 + (get_local $var$3) + (get_local $var$1) + ) + (set_local $var$44 + (get_local $var$6) + ) + (br $label$78) + ) + (call_import $_abort) + ) + ) + ) + ) + (block $label$93 + (if + (get_local $var$2) + (block $label$94 + (set_local $var$6 + (i32.load align=4 + (i32.add + (get_local $var$43) + (i32.const 28) + ) + ) + ) + (set_local $var$14 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$6) + (i32.const 2) + ) + ) + ) + (if_else + (i32.eq + (get_local $var$43) + (i32.load align=4 + (get_local $var$14) + ) + ) + (block $label$95 + (i32.store align=4 + (get_local $var$14) + (get_local $var$44) + ) + (if + (i32.eq + (get_local $var$44) + (i32.const 0) + ) + (block $label$96 + (i32.store align=4 + (i32.const 180) + (i32.and + (i32.load align=4 + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $var$6) + ) + (i32.const -1) + ) + ) + ) + (br $label$93) + ) + ) + ) + (block $label$97 + (if + (i32.lt_u + (i32.shr_u + (get_local $var$2) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$6 + (i32.add + (get_local $var$2) + (i32.const 16) + ) + ) + (if_else + (i32.eq + (i32.load align=4 + (get_local $var$6) + ) + (get_local $var$43) + ) + (i32.store align=4 + (get_local $var$6) + (get_local $var$44) + ) + (i32.store align=4 + (i32.add + (get_local $var$2) + (i32.const 20) + ) + (get_local $var$44) + ) + ) + (if + (i32.eq + (get_local $var$44) + (i32.const 0) + ) + (br $label$93) + ) + ) + ) + (set_local $var$6 + (i32.load align=4 + (i32.const 192) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$44) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$6) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (i32.store align=4 + (i32.add + (get_local $var$44) + (i32.const 24) + ) + (get_local $var$2) + ) + (set_local $var$14 + (i32.load align=4 + (i32.add + (get_local $var$43) + (i32.const 16) + ) + ) + ) + (block $label$98 + (if + (get_local $var$14) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$14) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$6) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$99 + (i32.store align=4 + (i32.add + (get_local $var$44) + (i32.const 16) + ) + (get_local $var$14) + ) + (i32.store align=4 + (i32.add + (get_local $var$14) + (i32.const 24) + ) + (get_local $var$44) + ) + (br $label$98) + ) + ) + ) + ) + (set_local $var$14 + (i32.load align=4 + (i32.add + (get_local $var$43) + (i32.const 20) + ) + ) + ) + (if + (get_local $var$14) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$14) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$100 + (i32.store align=4 + (i32.add + (get_local $var$44) + (i32.const 20) + ) + (get_local $var$14) + ) + (i32.store align=4 + (i32.add + (get_local $var$14) + (i32.const 24) + ) + (get_local $var$44) + ) + (br $label$93) + ) + ) + ) + ) + ) + ) + (block $label$101 + (if_else + (i32.ge_u + (i32.shr_u + (get_local $var$42) + (i32.const 0) + ) + (i32.const 16) + ) + (block $label$102 + (i32.store align=4 + (i32.add + (get_local $var$43) + (i32.const 4) + ) + (i32.or + (get_local $var$4) + (i32.const 3) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$7) + (i32.const 4) + ) + (i32.or + (get_local $var$42) + (i32.const 1) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$7) + (get_local $var$42) + ) + (get_local $var$42) + ) + (set_local $var$2 + (i32.shr_u + (get_local $var$42) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$42) + (i32.const 0) + ) + (i32.const 256) + ) + (block $label$103 + (set_local $var$14 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $var$2) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $var$6 + (i32.load align=4 + (i32.const 176) + ) + ) + (set_local $var$1 + (i32.shl + (i32.const 1) + (get_local $var$2) + ) + ) + (if_else + (i32.and + (get_local $var$6) + (get_local $var$1) + ) + (block $label$104 + (set_local $var$2 + (i32.add + (get_local $var$14) + (i32.const 8) + ) + ) + (set_local $var$3 + (i32.load align=4 + (get_local $var$2) + ) + ) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$3) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$105 + (set_local $var$49 + (get_local $var$2) + ) + (set_local $var$50 + (get_local $var$3) + ) + ) + ) + ) + (block $label$106 + (i32.store align=4 + (i32.const 176) + (i32.or + (get_local $var$6) + (get_local $var$1) + ) + ) + (set_local $var$49 + (i32.add + (get_local $var$14) + (i32.const 8) + ) + ) + (set_local $var$50 + (get_local $var$14) + ) + ) + ) + (i32.store align=4 + (get_local $var$49) + (get_local $var$7) + ) + (i32.store align=4 + (i32.add + (get_local $var$50) + (i32.const 12) + ) + (get_local $var$7) + ) + (i32.store align=4 + (i32.add + (get_local $var$7) + (i32.const 8) + ) + (get_local $var$50) + ) + (i32.store align=4 + (i32.add + (get_local $var$7) + (i32.const 12) + ) + (get_local $var$14) + ) + (br $label$101) + ) + ) + (set_local $var$14 + (i32.shr_u + (get_local $var$42) + (i32.const 8) + ) + ) + (if_else + (get_local $var$14) + (if_else + (i32.gt_u + (i32.shr_u + (get_local $var$42) + (i32.const 0) + ) + (i32.const 16777215) + ) + (set_local $var$51 + (i32.const 31) + ) + (block $label$107 + (set_local $var$1 + (i32.and + (i32.shr_u + (i32.add + (get_local $var$14) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $var$6 + (i32.shl + (get_local $var$14) + (get_local $var$1) + ) + ) + (set_local $var$14 + (i32.and + (i32.shr_u + (i32.add + (get_local $var$6) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $var$3 + (i32.shl + (get_local $var$6) + (get_local $var$14) + ) + ) + (set_local $var$6 + (i32.and + (i32.shr_u + (i32.add + (get_local $var$3) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $var$2 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $var$14) + (get_local $var$1) + ) + (get_local $var$6) + ) + ) + (i32.shr_u + (i32.shl + (get_local $var$3) + (get_local $var$6) + ) + (i32.const 15) + ) + ) + ) + (set_local $var$51 + (i32.or + (i32.and + (i32.shr_u + (get_local $var$42) + (i32.add + (get_local $var$2) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $var$2) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $var$51 + (i32.const 0) + ) + ) + (set_local $var$2 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$51) + (i32.const 2) + ) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$7) + (i32.const 28) + ) + (get_local $var$51) + ) + (set_local $var$6 + (i32.add + (get_local $var$7) + (i32.const 16) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$6) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$6) + (i32.const 0) + ) + (set_local $var$6 + (i32.load align=4 + (i32.const 180) + ) + ) + (set_local $var$3 + (i32.shl + (i32.const 1) + (get_local $var$51) + ) + ) + (if + (i32.eq + (i32.and + (get_local $var$6) + (get_local $var$3) + ) + (i32.const 0) + ) + (block $label$108 + (i32.store align=4 + (i32.const 180) + (i32.or + (get_local $var$6) + (get_local $var$3) + ) + ) + (i32.store align=4 + (get_local $var$2) + (get_local $var$7) + ) + (i32.store align=4 + (i32.add + (get_local $var$7) + (i32.const 24) + ) + (get_local $var$2) + ) + (i32.store align=4 + (i32.add + (get_local $var$7) + (i32.const 12) + ) + (get_local $var$7) + ) + (i32.store align=4 + (i32.add + (get_local $var$7) + (i32.const 8) + ) + (get_local $var$7) + ) + (br $label$101) + ) + ) + (set_local $var$3 + (i32.shl + (get_local $var$42) + (if_else + (i32.eq + (get_local $var$51) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $var$51) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $var$6 + (i32.load align=4 + (get_local $var$2) + ) + ) + (loop $label$109 $label$110 + (block $label$111 + (if + (i32.eq + (i32.and + (i32.load align=4 + (i32.add + (get_local $var$6) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $var$42) + ) + (block $label$112 + (set_local $var$52 + (get_local $var$6) + ) + (set_local $var$35 + (i32.const 148) + ) + (br $label$109) + ) + ) + (set_local $var$2 + (i32.add + (i32.add + (get_local $var$6) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $var$3) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $var$1 + (i32.load align=4 + (get_local $var$2) + ) + ) + (if_else + (i32.eq + (get_local $var$1) + (i32.const 0) + ) + (block $label$113 + (set_local $var$53 + (get_local $var$2) + ) + (set_local $var$54 + (get_local $var$6) + ) + (set_local $var$35 + (i32.const 145) + ) + (br $label$109) + ) + (block $label$114 + (set_local $var$3 + (i32.shl + (get_local $var$3) + (i32.const 1) + ) + ) + (set_local $var$6 + (get_local $var$1) + ) + ) + ) + (br $label$110) + ) + ) + (if_else + (i32.eq + (get_local $var$35) + (i32.const 145) + ) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$53) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$115 + (i32.store align=4 + (get_local $var$53) + (get_local $var$7) + ) + (i32.store align=4 + (i32.add + (get_local $var$7) + (i32.const 24) + ) + (get_local $var$54) + ) + (i32.store align=4 + (i32.add + (get_local $var$7) + (i32.const 12) + ) + (get_local $var$7) + ) + (i32.store align=4 + (i32.add + (get_local $var$7) + (i32.const 8) + ) + (get_local $var$7) + ) + (br $label$101) + ) + ) + (if + (i32.eq + (get_local $var$35) + (i32.const 148) + ) + (block $label$116 + (set_local $var$6 + (i32.add + (get_local $var$52) + (i32.const 8) + ) + ) + (set_local $var$3 + (i32.load align=4 + (get_local $var$6) + ) + ) + (set_local $var$1 + (i32.load align=4 + (i32.const 192) + ) + ) + (if_else + (i32.and + (i32.ge_u + (i32.shr_u + (get_local $var$3) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$1) + (i32.const 0) + ) + ) + (i32.ge_u + (i32.shr_u + (get_local $var$52) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$1) + (i32.const 0) + ) + ) + ) + (block $label$117 + (i32.store align=4 + (i32.add + (get_local $var$3) + (i32.const 12) + ) + (get_local $var$7) + ) + (i32.store align=4 + (get_local $var$6) + (get_local $var$7) + ) + (i32.store align=4 + (i32.add + (get_local $var$7) + (i32.const 8) + ) + (get_local $var$3) + ) + (i32.store align=4 + (i32.add + (get_local $var$7) + (i32.const 12) + ) + (get_local $var$52) + ) + (i32.store align=4 + (i32.add + (get_local $var$7) + (i32.const 24) + ) + (i32.const 0) + ) + (br $label$101) + ) + (call_import $_abort) + ) + ) + ) + ) + ) + (block $label$118 + (set_local $var$3 + (i32.add + (get_local $var$42) + (get_local $var$4) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$43) + (i32.const 4) + ) + (i32.or + (get_local $var$3) + (i32.const 3) + ) + ) + (set_local $var$6 + (i32.add + (i32.add + (get_local $var$43) + (get_local $var$3) + ) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$6) + (i32.or + (i32.load align=4 + (get_local $var$6) + ) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $var$12 + (i32.add + (get_local $var$43) + (i32.const 8) + ) + ) + (br $label$0 + (get_local $var$12) + ) + ) + (set_local $var$30 + (get_local $var$4) + ) + ) + ) + (set_local $var$30 + (get_local $var$4) + ) + ) + ) + (set_local $var$30 + (i32.const -1) + ) + ) + ) + ) + (set_local $var$43 + (i32.load align=4 + (i32.const 184) + ) + ) + (if + (i32.ge_u + (i32.shr_u + (get_local $var$43) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$30) + (i32.const 0) + ) + ) + (block $label$119 + (set_local $var$42 + (i32.sub + (get_local $var$43) + (get_local $var$30) + ) + ) + (set_local $var$52 + (i32.load align=4 + (i32.const 196) + ) + ) + (if_else + (i32.gt_u + (i32.shr_u + (get_local $var$42) + (i32.const 0) + ) + (i32.const 15) + ) + (block $label$120 + (set_local $var$54 + (i32.add + (get_local $var$52) + (get_local $var$30) + ) + ) + (i32.store align=4 + (i32.const 196) + (get_local $var$54) + ) + (i32.store align=4 + (i32.const 184) + (get_local $var$42) + ) + (i32.store align=4 + (i32.add + (get_local $var$54) + (i32.const 4) + ) + (i32.or + (get_local $var$42) + (i32.const 1) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$54) + (get_local $var$42) + ) + (get_local $var$42) + ) + (i32.store align=4 + (i32.add + (get_local $var$52) + (i32.const 4) + ) + (i32.or + (get_local $var$30) + (i32.const 3) + ) + ) + ) + (block $label$121 + (i32.store align=4 + (i32.const 184) + (i32.const 0) + ) + (i32.store align=4 + (i32.const 196) + (i32.const 0) + ) + (i32.store align=4 + (i32.add + (get_local $var$52) + (i32.const 4) + ) + (i32.or + (get_local $var$43) + (i32.const 3) + ) + ) + (set_local $var$42 + (i32.add + (i32.add + (get_local $var$52) + (get_local $var$43) + ) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$42) + (i32.or + (i32.load align=4 + (get_local $var$42) + ) + (i32.const 1) + ) + ) + ) + ) + (set_local $var$12 + (i32.add + (get_local $var$52) + (i32.const 8) + ) + ) + (br $label$0 + (get_local $var$12) + ) + ) + ) + (set_local $var$52 + (i32.load align=4 + (i32.const 188) + ) + ) + (if + (i32.gt_u + (i32.shr_u + (get_local $var$52) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$30) + (i32.const 0) + ) + ) + (block $label$122 + (set_local $var$42 + (i32.sub + (get_local $var$52) + (get_local $var$30) + ) + ) + (i32.store align=4 + (i32.const 188) + (get_local $var$42) + ) + (set_local $var$52 + (i32.load align=4 + (i32.const 200) + ) + ) + (set_local $var$43 + (i32.add + (get_local $var$52) + (get_local $var$30) + ) + ) + (i32.store align=4 + (i32.const 200) + (get_local $var$43) + ) + (i32.store align=4 + (i32.add + (get_local $var$43) + (i32.const 4) + ) + (i32.or + (get_local $var$42) + (i32.const 1) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$52) + (i32.const 4) + ) + (i32.or + (get_local $var$30) + (i32.const 3) + ) + ) + (set_local $var$12 + (i32.add + (get_local $var$52) + (i32.const 8) + ) + ) + (br $label$0 + (get_local $var$12) + ) + ) + ) + (block $label$123 + (if + (i32.eq + (i32.load align=4 + (i32.const 648) + ) + (i32.const 0) + ) + (block $label$124 + (set_local $var$52 + (call_import $_sysconf + (i32.const 30) + ) + ) + (if_else + (i32.eq + (i32.and + (i32.add + (get_local $var$52) + (i32.const -1) + ) + (get_local $var$52) + ) + (i32.const 0) + ) + (block $label$125 + (i32.store align=4 + (i32.const 656) + (get_local $var$52) + ) + (i32.store align=4 + (i32.const 652) + (get_local $var$52) + ) + (i32.store align=4 + (i32.const 660) + (i32.const -1) + ) + (i32.store align=4 + (i32.const 664) + (i32.const -1) + ) + (i32.store align=4 + (i32.const 668) + (i32.const 0) + ) + (i32.store align=4 + (i32.const 620) + (i32.const 0) + ) + (i32.store align=4 + (i32.const 648) + (i32.xor + (i32.and + (call_import $_time + (i32.const 0) + ) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + (br $label$123) + ) + (call_import $_abort) + ) + ) + ) + ) + (set_local $var$52 + (i32.add + (get_local $var$30) + (i32.const 48) + ) + ) + (set_local $var$42 + (i32.load align=4 + (i32.const 656) + ) + ) + (set_local $var$43 + (i32.add + (get_local $var$30) + (i32.const 47) + ) + ) + (set_local $var$54 + (i32.add + (get_local $var$42) + (get_local $var$43) + ) + ) + (set_local $var$53 + (i32.sub + (i32.const 0) + (get_local $var$42) + ) + ) + (set_local $var$42 + (i32.and + (get_local $var$54) + (get_local $var$53) + ) + ) + (if + (i32.le_u + (i32.shr_u + (get_local $var$42) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$30) + (i32.const 0) + ) + ) + (block $label$126 + (set_local $var$12 + (i32.const 0) + ) + (br $label$0 + (get_local $var$12) + ) + ) + ) + (set_local $var$51 + (i32.load align=4 + (i32.const 616) + ) + ) + (if + (if_else + (i32.ne + (get_local $var$51) + (i32.const 0) + ) + (block $label$127 + (set_local $var$50 + (i32.load align=4 + (i32.const 608) + ) + ) + (block $label$128 + (set_local $var$49 + (i32.add + (get_local $var$50) + (get_local $var$42) + ) + ) + (i32.or + (i32.le_u + (i32.shr_u + (get_local $var$49) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$50) + (i32.const 0) + ) + ) + (i32.gt_u + (i32.shr_u + (get_local $var$49) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$51) + (i32.const 0) + ) + ) + ) + ) + ) + (i32.const 0) + ) + (block $label$129 + (set_local $var$12 + (i32.const 0) + ) + (br $label$0 + (get_local $var$12) + ) + ) + ) + (block $label$130 + (if_else + (i32.eq + (i32.and + (i32.load align=4 + (i32.const 620) + ) + (i32.const 4) + ) + (i32.const 0) + ) + (block $label$131 + (set_local $var$51 + (i32.load align=4 + (i32.const 200) + ) + ) + (block $label$132 + (if_else + (get_local $var$51) + (block $label$133 + (set_local $var$49 + (i32.const 624) + ) + (loop $label$134 $label$135 + (block $label$136 + (set_local $var$50 + (i32.load align=4 + (get_local $var$49) + ) + ) + (if + (if_else + (i32.le_u + (i32.shr_u + (get_local $var$50) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$51) + (i32.const 0) + ) + ) + (block $label$137 + (set_local $var$44 + (i32.add + (get_local $var$49) + (i32.const 4) + ) + ) + (i32.gt_u + (i32.shr_u + (i32.add + (get_local $var$50) + (i32.load align=4 + (get_local $var$44) + ) + ) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$51) + (i32.const 0) + ) + ) + ) + (i32.const 0) + ) + (block $label$138 + (set_local $var$55 + (get_local $var$49) + ) + (set_local $var$56 + (get_local $var$44) + ) + (br $label$134) + ) + ) + (set_local $var$49 + (i32.load align=4 + (i32.add + (get_local $var$49) + (i32.const 8) + ) + ) + ) + (if + (i32.eq + (get_local $var$49) + (i32.const 0) + ) + (block $label$139 + (set_local $var$35 + (i32.const 173) + ) + (br $label$132) + ) + ) + (br $label$135) + ) + ) + (set_local $var$49 + (i32.and + (i32.sub + (get_local $var$54) + (i32.load align=4 + (i32.const 188) + ) + ) + (get_local $var$53) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$49) + (i32.const 0) + ) + (i32.const 2147483647) + ) + (block $label$140 + (set_local $var$44 + (call_import $_sbrk + (get_local $var$49) + ) + ) + (if_else + (i32.eq + (get_local $var$44) + (i32.add + (i32.load align=4 + (get_local $var$55) + ) + (i32.load align=4 + (get_local $var$56) + ) + ) + ) + (if + (i32.ne + (get_local $var$44) + (i32.const -1) + ) + (block $label$141 + (set_local $var$57 + (get_local $var$44) + ) + (set_local $var$58 + (get_local $var$49) + ) + (set_local $var$35 + (i32.const 193) + ) + (br $label$130) + ) + ) + (block $label$142 + (set_local $var$59 + (get_local $var$44) + ) + (set_local $var$60 + (get_local $var$49) + ) + (set_local $var$35 + (i32.const 183) + ) + ) + ) + ) + ) + ) + (set_local $var$35 + (i32.const 173) + ) + ) + ) + (block $label$143 + (if + (if_else + (i32.eq + (get_local $var$35) + (i32.const 173) + ) + (block $label$144 + (set_local $var$51 + (call_import $_sbrk + (i32.const 0) + ) + ) + (i32.ne + (get_local $var$51) + (i32.const -1) + ) + ) + (i32.const 0) + ) + (block $label$145 + (set_local $var$4 + (get_local $var$51) + ) + (set_local $var$49 + (i32.load align=4 + (i32.const 652) + ) + ) + (set_local $var$44 + (i32.add + (get_local $var$49) + (i32.const -1) + ) + ) + (if_else + (i32.eq + (i32.and + (get_local $var$44) + (get_local $var$4) + ) + (i32.const 0) + ) + (set_local $var$61 + (get_local $var$42) + ) + (set_local $var$61 + (i32.add + (i32.sub + (get_local $var$42) + (get_local $var$4) + ) + (i32.and + (i32.add + (get_local $var$44) + (get_local $var$4) + ) + (i32.sub + (i32.const 0) + (get_local $var$49) + ) + ) + ) + ) + ) + (set_local $var$49 + (i32.load align=4 + (i32.const 608) + ) + ) + (set_local $var$4 + (i32.add + (get_local $var$49) + (get_local $var$61) + ) + ) + (if + (i32.and + (i32.gt_u + (i32.shr_u + (get_local $var$61) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$30) + (i32.const 0) + ) + ) + (i32.lt_u + (i32.shr_u + (get_local $var$61) + (i32.const 0) + ) + (i32.const 2147483647) + ) + ) + (block $label$146 + (set_local $var$44 + (i32.load align=4 + (i32.const 616) + ) + ) + (if + (if_else + (i32.ne + (get_local $var$44) + (i32.const 0) + ) + (i32.or + (i32.le_u + (i32.shr_u + (get_local $var$4) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$49) + (i32.const 0) + ) + ) + (i32.gt_u + (i32.shr_u + (get_local $var$4) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$44) + (i32.const 0) + ) + ) + ) + (i32.const 0) + ) + (br $label$143) + ) + (set_local $var$44 + (call_import $_sbrk + (get_local $var$61) + ) + ) + (if_else + (i32.eq + (get_local $var$44) + (get_local $var$51) + ) + (block $label$147 + (set_local $var$57 + (get_local $var$51) + ) + (set_local $var$58 + (get_local $var$61) + ) + (set_local $var$35 + (i32.const 193) + ) + (br $label$130) + ) + (block $label$148 + (set_local $var$59 + (get_local $var$44) + ) + (set_local $var$60 + (get_local $var$61) + ) + (set_local $var$35 + (i32.const 183) + ) + ) + ) + ) + ) + ) + ) + ) + (block $label$149 + (if + (i32.eq + (get_local $var$35) + (i32.const 183) + ) + (block $label$150 + (set_local $var$44 + (i32.sub + (i32.const 0) + (get_local $var$60) + ) + ) + (block $label$151 + (if_else + (if_else + (i32.and + (i32.gt_u + (i32.shr_u + (get_local $var$52) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$60) + (i32.const 0) + ) + ) + (i32.and + (i32.lt_u + (i32.shr_u + (get_local $var$60) + (i32.const 0) + ) + (i32.const 2147483647) + ) + (i32.ne + (get_local $var$59) + (i32.const -1) + ) + ) + ) + (block $label$152 + (set_local $var$51 + (i32.load align=4 + (i32.const 656) + ) + ) + (block $label$153 + (set_local $var$4 + (i32.and + (i32.add + (i32.sub + (get_local $var$43) + (get_local $var$60) + ) + (get_local $var$51) + ) + (i32.sub + (i32.const 0) + (get_local $var$51) + ) + ) + ) + (i32.lt_u + (i32.shr_u + (get_local $var$4) + (i32.const 0) + ) + (i32.const 2147483647) + ) + ) + ) + (i32.const 0) + ) + (if_else + (i32.eq + (call_import $_sbrk + (get_local $var$4) + ) + (i32.const -1) + ) + (block $label$154 + (call_import $_sbrk + (get_local $var$44) + ) + (br $label$149) + ) + (block $label$155 + (set_local $var$62 + (i32.add + (get_local $var$4) + (get_local $var$60) + ) + ) + (br $label$151) + ) + ) + (set_local $var$62 + (get_local $var$60) + ) + ) + ) + (if + (i32.ne + (get_local $var$59) + (i32.const -1) + ) + (block $label$156 + (set_local $var$57 + (get_local $var$59) + ) + (set_local $var$58 + (get_local $var$62) + ) + (set_local $var$35 + (i32.const 193) + ) + (br $label$130) + ) + ) + ) + ) + ) + (i32.store align=4 + (i32.const 620) + (i32.or + (i32.load align=4 + (i32.const 620) + ) + (i32.const 4) + ) + ) + (set_local $var$35 + (i32.const 190) + ) + ) + (set_local $var$35 + (i32.const 190) + ) + ) + ) + (if + (if_else + (if_else + (if_else + (i32.eq + (get_local $var$35) + (i32.const 190) + ) + (i32.lt_u + (i32.shr_u + (get_local $var$42) + (i32.const 0) + ) + (i32.const 2147483647) + ) + (i32.const 0) + ) + (block $label$157 + (set_local $var$62 + (call_import $_sbrk + (get_local $var$42) + ) + ) + (block $label$158 + (set_local $var$42 + (call_import $_sbrk + (i32.const 0) + ) + ) + (i32.and + (i32.lt_u + (i32.shr_u + (get_local $var$62) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$42) + (i32.const 0) + ) + ) + (i32.and + (i32.ne + (get_local $var$62) + (i32.const -1) + ) + (i32.ne + (get_local $var$42) + (i32.const -1) + ) + ) + ) + ) + ) + (i32.const 0) + ) + (block $label$159 + (set_local $var$59 + (i32.sub + (get_local $var$42) + (get_local $var$62) + ) + ) + (i32.gt_u + (i32.shr_u + (get_local $var$59) + (i32.const 0) + ) + (i32.shr_u + (i32.add + (get_local $var$30) + (i32.const 40) + ) + (i32.const 0) + ) + ) + ) + (i32.const 0) + ) + (block $label$160 + (set_local $var$57 + (get_local $var$62) + ) + (set_local $var$58 + (get_local $var$59) + ) + (set_local $var$35 + (i32.const 193) + ) + ) + ) + (if + (i32.eq + (get_local $var$35) + (i32.const 193) + ) + (block $label$161 + (set_local $var$59 + (i32.add + (i32.load align=4 + (i32.const 608) + ) + (get_local $var$58) + ) + ) + (i32.store align=4 + (i32.const 608) + (get_local $var$59) + ) + (if + (i32.gt_u + (i32.shr_u + (get_local $var$59) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 612) + ) + (i32.const 0) + ) + ) + (i32.store align=4 + (i32.const 612) + (get_local $var$59) + ) + ) + (set_local $var$59 + (i32.load align=4 + (i32.const 200) + ) + ) + (block $label$162 + (if_else + (get_local $var$59) + (block $label$163 + (set_local $var$62 + (i32.const 624) + ) + (loop $label$164 $label$165 + (block $label$166 + (set_local $var$42 + (i32.load align=4 + (get_local $var$62) + ) + ) + (set_local $var$60 + (i32.add + (get_local $var$62) + (i32.const 4) + ) + ) + (set_local $var$43 + (i32.load align=4 + (get_local $var$60) + ) + ) + (if + (i32.eq + (get_local $var$57) + (i32.add + (get_local $var$42) + (get_local $var$43) + ) + ) + (block $label$167 + (set_local $var$63 + (get_local $var$42) + ) + (set_local $var$64 + (get_local $var$60) + ) + (set_local $var$65 + (get_local $var$43) + ) + (set_local $var$66 + (get_local $var$62) + ) + (set_local $var$35 + (i32.const 203) + ) + (br $label$164) + ) + ) + (set_local $var$62 + (i32.load align=4 + (i32.add + (get_local $var$62) + (i32.const 8) + ) + ) + ) + (br_if $label$165 + (i32.ne + (get_local $var$62) + (i32.const 0) + ) + ) + ) + ) + (if + (if_else + (if_else + (i32.eq + (get_local $var$35) + (i32.const 203) + ) + (i32.eq + (i32.and + (i32.load align=4 + (i32.add + (get_local $var$66) + (i32.const 12) + ) + ) + (i32.const 8) + ) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.and + (i32.lt_u + (i32.shr_u + (get_local $var$59) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$57) + (i32.const 0) + ) + ) + (i32.ge_u + (i32.shr_u + (get_local $var$59) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$63) + (i32.const 0) + ) + ) + ) + (i32.const 0) + ) + (block $label$168 + (i32.store align=4 + (get_local $var$64) + (i32.add + (get_local $var$65) + (get_local $var$58) + ) + ) + (set_local $var$62 + (i32.add + (get_local $var$59) + (i32.const 8) + ) + ) + (set_local $var$43 + (if_else + (i32.eq + (i32.and + (get_local $var$62) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $var$62) + ) + (i32.const 7) + ) + ) + ) + (set_local $var$62 + (i32.add + (get_local $var$59) + (get_local $var$43) + ) + ) + (set_local $var$60 + (i32.add + (i32.sub + (get_local $var$58) + (get_local $var$43) + ) + (i32.load align=4 + (i32.const 188) + ) + ) + ) + (i32.store align=4 + (i32.const 200) + (get_local $var$62) + ) + (i32.store align=4 + (i32.const 188) + (get_local $var$60) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (i32.const 4) + ) + (i32.or + (get_local $var$60) + (i32.const 1) + ) + ) + (i32.store align=4 + (i32.add + (i32.add + (get_local $var$62) + (get_local $var$60) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store align=4 + (i32.const 204) + (i32.load align=4 + (i32.const 664) + ) + ) + (br $label$162) + ) + ) + (set_local $var$60 + (i32.load align=4 + (i32.const 192) + ) + ) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$57) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$60) + (i32.const 0) + ) + ) + (block $label$169 + (i32.store align=4 + (i32.const 192) + (get_local $var$57) + ) + (set_local $var$67 + (get_local $var$57) + ) + ) + (set_local $var$67 + (get_local $var$60) + ) + ) + (set_local $var$60 + (i32.add + (get_local $var$57) + (get_local $var$58) + ) + ) + (set_local $var$62 + (i32.const 624) + ) + (loop $label$170 $label$171 + (block $label$172 + (if + (i32.eq + (i32.load align=4 + (get_local $var$62) + ) + (get_local $var$60) + ) + (block $label$173 + (set_local $var$68 + (get_local $var$62) + ) + (set_local $var$69 + (get_local $var$62) + ) + (set_local $var$35 + (i32.const 211) + ) + (br $label$170) + ) + ) + (set_local $var$62 + (i32.load align=4 + (i32.add + (get_local $var$62) + (i32.const 8) + ) + ) + ) + (if + (i32.eq + (get_local $var$62) + (i32.const 0) + ) + (block $label$174 + (set_local $var$70 + (i32.const 624) + ) + (br $label$170) + ) + ) + (br $label$171) + ) + ) + (if + (i32.eq + (get_local $var$35) + (i32.const 211) + ) + (if_else + (i32.eq + (i32.and + (i32.load align=4 + (i32.add + (get_local $var$69) + (i32.const 12) + ) + ) + (i32.const 8) + ) + (i32.const 0) + ) + (block $label$175 + (i32.store align=4 + (get_local $var$68) + (get_local $var$57) + ) + (set_local $var$62 + (i32.add + (get_local $var$69) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$62) + (i32.add + (i32.load align=4 + (get_local $var$62) + ) + (get_local $var$58) + ) + ) + (set_local $var$62 + (i32.add + (get_local $var$57) + (i32.const 8) + ) + ) + (set_local $var$43 + (i32.add + (get_local $var$57) + (if_else + (i32.eq + (i32.and + (get_local $var$62) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $var$62) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $var$62 + (i32.add + (get_local $var$60) + (i32.const 8) + ) + ) + (set_local $var$42 + (i32.add + (get_local $var$60) + (if_else + (i32.eq + (i32.and + (get_local $var$62) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $var$62) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $var$62 + (i32.add + (get_local $var$43) + (get_local $var$30) + ) + ) + (set_local $var$52 + (i32.sub + (i32.sub + (get_local $var$42) + (get_local $var$43) + ) + (get_local $var$30) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$43) + (i32.const 4) + ) + (i32.or + (get_local $var$30) + (i32.const 3) + ) + ) + (block $label$176 + (if_else + (i32.ne + (get_local $var$42) + (get_local $var$59) + ) + (block $label$177 + (if + (i32.eq + (get_local $var$42) + (i32.load align=4 + (i32.const 196) + ) + ) + (block $label$178 + (set_local $var$61 + (i32.add + (i32.load align=4 + (i32.const 184) + ) + (get_local $var$52) + ) + ) + (i32.store align=4 + (i32.const 184) + (get_local $var$61) + ) + (i32.store align=4 + (i32.const 196) + (get_local $var$62) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (i32.const 4) + ) + (i32.or + (get_local $var$61) + (i32.const 1) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (get_local $var$61) + ) + (get_local $var$61) + ) + (br $label$176) + ) + ) + (set_local $var$61 + (i32.load align=4 + (i32.add + (get_local $var$42) + (i32.const 4) + ) + ) + ) + (if_else + (i32.eq + (i32.and + (get_local $var$61) + (i32.const 3) + ) + (i32.const 1) + ) + (block $label$179 + (set_local $var$56 + (i32.and + (get_local $var$61) + (i32.const -8) + ) + ) + (set_local $var$55 + (i32.shr_u + (get_local $var$61) + (i32.const 3) + ) + ) + (block $label$180 + (if_else + (i32.ge_u + (i32.shr_u + (get_local $var$61) + (i32.const 0) + ) + (i32.const 256) + ) + (block $label$181 + (set_local $var$53 + (i32.load align=4 + (i32.add + (get_local $var$42) + (i32.const 24) + ) + ) + ) + (set_local $var$54 + (i32.load align=4 + (i32.add + (get_local $var$42) + (i32.const 12) + ) + ) + ) + (block $label$182 + (if_else + (i32.eq + (get_local $var$54) + (get_local $var$42) + ) + (block $label$183 + (set_local $var$44 + (i32.add + (get_local $var$42) + (i32.const 16) + ) + ) + (set_local $var$4 + (i32.add + (get_local $var$44) + (i32.const 4) + ) + ) + (set_local $var$51 + (i32.load align=4 + (get_local $var$4) + ) + ) + (if_else + (i32.eq + (get_local $var$51) + (i32.const 0) + ) + (block $label$184 + (set_local $var$49 + (i32.load align=4 + (get_local $var$44) + ) + ) + (if_else + (i32.eq + (get_local $var$49) + (i32.const 0) + ) + (block $label$185 + (set_local $var$71 + (i32.const 0) + ) + (br $label$182) + ) + (block $label$186 + (set_local $var$72 + (get_local $var$49) + ) + (set_local $var$73 + (get_local $var$44) + ) + ) + ) + ) + (block $label$187 + (set_local $var$72 + (get_local $var$51) + ) + (set_local $var$73 + (get_local $var$4) + ) + ) + ) + (loop $label$188 $label$189 + (block $label$190 + (set_local $var$4 + (i32.add + (get_local $var$72) + (i32.const 20) + ) + ) + (set_local $var$51 + (i32.load align=4 + (get_local $var$4) + ) + ) + (if + (get_local $var$51) + (block $label$191 + (set_local $var$72 + (get_local $var$51) + ) + (set_local $var$73 + (get_local $var$4) + ) + (br $label$189) + ) + ) + (set_local $var$4 + (i32.add + (get_local $var$72) + (i32.const 16) + ) + ) + (set_local $var$51 + (i32.load align=4 + (get_local $var$4) + ) + ) + (if_else + (i32.eq + (get_local $var$51) + (i32.const 0) + ) + (block $label$192 + (set_local $var$74 + (get_local $var$72) + ) + (set_local $var$75 + (get_local $var$73) + ) + (br $label$188) + ) + (block $label$193 + (set_local $var$72 + (get_local $var$51) + ) + (set_local $var$73 + (get_local $var$4) + ) + ) + ) + (br $label$189) + ) + ) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$75) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$67) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$194 + (i32.store align=4 + (get_local $var$75) + (i32.const 0) + ) + (set_local $var$71 + (get_local $var$74) + ) + (br $label$182) + ) + ) + ) + (block $label$195 + (set_local $var$4 + (i32.load align=4 + (i32.add + (get_local $var$42) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$4) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$67) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$51 + (i32.add + (get_local $var$4) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load align=4 + (get_local $var$51) + ) + (get_local $var$42) + ) + (call_import $_abort) + ) + (set_local $var$44 + (i32.add + (get_local $var$54) + (i32.const 8) + ) + ) + (if_else + (i32.eq + (i32.load align=4 + (get_local $var$44) + ) + (get_local $var$42) + ) + (block $label$196 + (i32.store align=4 + (get_local $var$51) + (get_local $var$54) + ) + (i32.store align=4 + (get_local $var$44) + (get_local $var$4) + ) + (set_local $var$71 + (get_local $var$54) + ) + (br $label$182) + ) + (call_import $_abort) + ) + ) + ) + ) + (if + (i32.eq + (get_local $var$53) + (i32.const 0) + ) + (br $label$180) + ) + (set_local $var$54 + (i32.load align=4 + (i32.add + (get_local $var$42) + (i32.const 28) + ) + ) + ) + (set_local $var$4 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$54) + (i32.const 2) + ) + ) + ) + (block $label$197 + (if_else + (i32.ne + (get_local $var$42) + (i32.load align=4 + (get_local $var$4) + ) + ) + (block $label$198 + (if + (i32.lt_u + (i32.shr_u + (get_local $var$53) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$44 + (i32.add + (get_local $var$53) + (i32.const 16) + ) + ) + (if_else + (i32.eq + (i32.load align=4 + (get_local $var$44) + ) + (get_local $var$42) + ) + (i32.store align=4 + (get_local $var$44) + (get_local $var$71) + ) + (i32.store align=4 + (i32.add + (get_local $var$53) + (i32.const 20) + ) + (get_local $var$71) + ) + ) + (if + (i32.eq + (get_local $var$71) + (i32.const 0) + ) + (br $label$180) + ) + ) + (block $label$199 + (i32.store align=4 + (get_local $var$4) + (get_local $var$71) + ) + (if + (get_local $var$71) + (br $label$197) + ) + (i32.store align=4 + (i32.const 180) + (i32.and + (i32.load align=4 + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $var$54) + ) + (i32.const -1) + ) + ) + ) + (br $label$180) + ) + ) + ) + (set_local $var$54 + (i32.load align=4 + (i32.const 192) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$71) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$54) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (i32.store align=4 + (i32.add + (get_local $var$71) + (i32.const 24) + ) + (get_local $var$53) + ) + (set_local $var$4 + (i32.add + (get_local $var$42) + (i32.const 16) + ) + ) + (set_local $var$44 + (i32.load align=4 + (get_local $var$4) + ) + ) + (block $label$200 + (if + (get_local $var$44) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$44) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$54) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$201 + (i32.store align=4 + (i32.add + (get_local $var$71) + (i32.const 16) + ) + (get_local $var$44) + ) + (i32.store align=4 + (i32.add + (get_local $var$44) + (i32.const 24) + ) + (get_local $var$71) + ) + (br $label$200) + ) + ) + ) + ) + (set_local $var$44 + (i32.load align=4 + (i32.add + (get_local $var$4) + (i32.const 4) + ) + ) + ) + (if + (i32.eq + (get_local $var$44) + (i32.const 0) + ) + (br $label$180) + ) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$44) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$202 + (i32.store align=4 + (i32.add + (get_local $var$71) + (i32.const 20) + ) + (get_local $var$44) + ) + (i32.store align=4 + (i32.add + (get_local $var$44) + (i32.const 24) + ) + (get_local $var$71) + ) + (br $label$180) + ) + ) + ) + (block $label$203 + (set_local $var$44 + (i32.load align=4 + (i32.add + (get_local $var$42) + (i32.const 8) + ) + ) + ) + (set_local $var$54 + (i32.load align=4 + (i32.add + (get_local $var$42) + (i32.const 12) + ) + ) + ) + (set_local $var$53 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $var$55) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (block $label$204 + (if + (i32.ne + (get_local $var$44) + (get_local $var$53) + ) + (block $label$205 + (if + (i32.lt_u + (i32.shr_u + (get_local $var$44) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$67) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (if + (i32.eq + (i32.load align=4 + (i32.add + (get_local $var$44) + (i32.const 12) + ) + ) + (get_local $var$42) + ) + (br $label$204) + ) + (call_import $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $var$54) + (get_local $var$44) + ) + (block $label$206 + (i32.store align=4 + (i32.const 176) + (i32.and + (i32.load align=4 + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $var$55) + ) + (i32.const -1) + ) + ) + ) + (br $label$180) + ) + ) + (block $label$207 + (if_else + (i32.eq + (get_local $var$54) + (get_local $var$53) + ) + (set_local $var$76 + (i32.add + (get_local $var$54) + (i32.const 8) + ) + ) + (block $label$208 + (if + (i32.lt_u + (i32.shr_u + (get_local $var$54) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$67) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$4 + (i32.add + (get_local $var$54) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load align=4 + (get_local $var$4) + ) + (get_local $var$42) + ) + (block $label$209 + (set_local $var$76 + (get_local $var$4) + ) + (br $label$207) + ) + ) + (call_import $_abort) + ) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$44) + (i32.const 12) + ) + (get_local $var$54) + ) + (i32.store align=4 + (get_local $var$76) + (get_local $var$44) + ) + ) + ) + ) + (set_local $var$77 + (i32.add + (get_local $var$42) + (get_local $var$56) + ) + ) + (set_local $var$78 + (i32.add + (get_local $var$56) + (get_local $var$52) + ) + ) + ) + (block $label$210 + (set_local $var$77 + (get_local $var$42) + ) + (set_local $var$78 + (get_local $var$52) + ) + ) + ) + (set_local $var$55 + (i32.add + (get_local $var$77) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$55) + (i32.and + (i32.load align=4 + (get_local $var$55) + ) + (i32.const -2) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (i32.const 4) + ) + (i32.or + (get_local $var$78) + (i32.const 1) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (get_local $var$78) + ) + (get_local $var$78) + ) + (set_local $var$55 + (i32.shr_u + (get_local $var$78) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$78) + (i32.const 0) + ) + (i32.const 256) + ) + (block $label$211 + (set_local $var$61 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $var$55) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $var$53 + (i32.load align=4 + (i32.const 176) + ) + ) + (set_local $var$4 + (i32.shl + (i32.const 1) + (get_local $var$55) + ) + ) + (block $label$212 + (if_else + (i32.eq + (i32.and + (get_local $var$53) + (get_local $var$4) + ) + (i32.const 0) + ) + (block $label$213 + (i32.store align=4 + (i32.const 176) + (i32.or + (get_local $var$53) + (get_local $var$4) + ) + ) + (set_local $var$79 + (i32.add + (get_local $var$61) + (i32.const 8) + ) + ) + (set_local $var$80 + (get_local $var$61) + ) + ) + (block $label$214 + (set_local $var$55 + (i32.add + (get_local $var$61) + (i32.const 8) + ) + ) + (set_local $var$51 + (i32.load align=4 + (get_local $var$55) + ) + ) + (if + (i32.ge_u + (i32.shr_u + (get_local $var$51) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (block $label$215 + (set_local $var$79 + (get_local $var$55) + ) + (set_local $var$80 + (get_local $var$51) + ) + (br $label$212) + ) + ) + (call_import $_abort) + ) + ) + ) + (i32.store align=4 + (get_local $var$79) + (get_local $var$62) + ) + (i32.store align=4 + (i32.add + (get_local $var$80) + (i32.const 12) + ) + (get_local $var$62) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (i32.const 8) + ) + (get_local $var$80) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (i32.const 12) + ) + (get_local $var$61) + ) + (br $label$176) + ) + ) + (set_local $var$4 + (i32.shr_u + (get_local $var$78) + (i32.const 8) + ) + ) + (block $label$216 + (if_else + (i32.eq + (get_local $var$4) + (i32.const 0) + ) + (set_local $var$81 + (i32.const 0) + ) + (block $label$217 + (if + (i32.gt_u + (i32.shr_u + (get_local $var$78) + (i32.const 0) + ) + (i32.const 16777215) + ) + (block $label$218 + (set_local $var$81 + (i32.const 31) + ) + (br $label$216) + ) + ) + (set_local $var$53 + (i32.and + (i32.shr_u + (i32.add + (get_local $var$4) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $var$56 + (i32.shl + (get_local $var$4) + (get_local $var$53) + ) + ) + (set_local $var$51 + (i32.and + (i32.shr_u + (i32.add + (get_local $var$56) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $var$55 + (i32.shl + (get_local $var$56) + (get_local $var$51) + ) + ) + (set_local $var$56 + (i32.and + (i32.shr_u + (i32.add + (get_local $var$55) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $var$49 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $var$51) + (get_local $var$53) + ) + (get_local $var$56) + ) + ) + (i32.shr_u + (i32.shl + (get_local $var$55) + (get_local $var$56) + ) + (i32.const 15) + ) + ) + ) + (set_local $var$81 + (i32.or + (i32.and + (i32.shr_u + (get_local $var$78) + (i32.add + (get_local $var$49) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $var$49) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $var$4 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$81) + (i32.const 2) + ) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (i32.const 28) + ) + (get_local $var$81) + ) + (set_local $var$61 + (i32.add + (get_local $var$62) + (i32.const 16) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$61) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$61) + (i32.const 0) + ) + (set_local $var$61 + (i32.load align=4 + (i32.const 180) + ) + ) + (set_local $var$49 + (i32.shl + (i32.const 1) + (get_local $var$81) + ) + ) + (if + (i32.eq + (i32.and + (get_local $var$61) + (get_local $var$49) + ) + (i32.const 0) + ) + (block $label$219 + (i32.store align=4 + (i32.const 180) + (i32.or + (get_local $var$61) + (get_local $var$49) + ) + ) + (i32.store align=4 + (get_local $var$4) + (get_local $var$62) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (i32.const 24) + ) + (get_local $var$4) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (i32.const 12) + ) + (get_local $var$62) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (i32.const 8) + ) + (get_local $var$62) + ) + (br $label$176) + ) + ) + (set_local $var$49 + (i32.shl + (get_local $var$78) + (if_else + (i32.eq + (get_local $var$81) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $var$81) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $var$61 + (i32.load align=4 + (get_local $var$4) + ) + ) + (loop $label$220 $label$221 + (block $label$222 + (if + (i32.eq + (i32.and + (i32.load align=4 + (i32.add + (get_local $var$61) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $var$78) + ) + (block $label$223 + (set_local $var$82 + (get_local $var$61) + ) + (set_local $var$35 + (i32.const 281) + ) + (br $label$220) + ) + ) + (set_local $var$4 + (i32.add + (i32.add + (get_local $var$61) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $var$49) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $var$56 + (i32.load align=4 + (get_local $var$4) + ) + ) + (if_else + (i32.eq + (get_local $var$56) + (i32.const 0) + ) + (block $label$224 + (set_local $var$83 + (get_local $var$4) + ) + (set_local $var$84 + (get_local $var$61) + ) + (set_local $var$35 + (i32.const 278) + ) + (br $label$220) + ) + (block $label$225 + (set_local $var$49 + (i32.shl + (get_local $var$49) + (i32.const 1) + ) + ) + (set_local $var$61 + (get_local $var$56) + ) + ) + ) + (br $label$221) + ) + ) + (if_else + (i32.eq + (get_local $var$35) + (i32.const 278) + ) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$83) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$226 + (i32.store align=4 + (get_local $var$83) + (get_local $var$62) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (i32.const 24) + ) + (get_local $var$84) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (i32.const 12) + ) + (get_local $var$62) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (i32.const 8) + ) + (get_local $var$62) + ) + (br $label$176) + ) + ) + (if + (i32.eq + (get_local $var$35) + (i32.const 281) + ) + (block $label$227 + (set_local $var$61 + (i32.add + (get_local $var$82) + (i32.const 8) + ) + ) + (set_local $var$49 + (i32.load align=4 + (get_local $var$61) + ) + ) + (set_local $var$56 + (i32.load align=4 + (i32.const 192) + ) + ) + (if_else + (i32.and + (i32.ge_u + (i32.shr_u + (get_local $var$49) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$56) + (i32.const 0) + ) + ) + (i32.ge_u + (i32.shr_u + (get_local $var$82) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$56) + (i32.const 0) + ) + ) + ) + (block $label$228 + (i32.store align=4 + (i32.add + (get_local $var$49) + (i32.const 12) + ) + (get_local $var$62) + ) + (i32.store align=4 + (get_local $var$61) + (get_local $var$62) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (i32.const 8) + ) + (get_local $var$49) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (i32.const 12) + ) + (get_local $var$82) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (i32.const 24) + ) + (i32.const 0) + ) + (br $label$176) + ) + (call_import $_abort) + ) + ) + ) + ) + ) + (block $label$229 + (set_local $var$49 + (i32.add + (i32.load align=4 + (i32.const 188) + ) + (get_local $var$52) + ) + ) + (i32.store align=4 + (i32.const 188) + (get_local $var$49) + ) + (i32.store align=4 + (i32.const 200) + (get_local $var$62) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (i32.const 4) + ) + (i32.or + (get_local $var$49) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $var$12 + (i32.add + (get_local $var$43) + (i32.const 8) + ) + ) + (br $label$0 + (get_local $var$12) + ) + ) + (set_local $var$70 + (i32.const 624) + ) + ) + ) + (loop $label$230 $label$231 + (block $label$232 + (set_local $var$62 + (i32.load align=4 + (get_local $var$70) + ) + ) + (if + (if_else + (i32.le_u + (i32.shr_u + (get_local $var$62) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$59) + (i32.const 0) + ) + ) + (block $label$233 + (set_local $var$52 + (i32.add + (get_local $var$62) + (i32.load align=4 + (i32.add + (get_local $var$70) + (i32.const 4) + ) + ) + ) + ) + (i32.gt_u + (i32.shr_u + (get_local $var$52) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$59) + (i32.const 0) + ) + ) + ) + (i32.const 0) + ) + (block $label$234 + (set_local $var$85 + (get_local $var$52) + ) + (br $label$230) + ) + ) + (set_local $var$70 + (i32.load align=4 + (i32.add + (get_local $var$70) + (i32.const 8) + ) + ) + ) + (br $label$231) + ) + ) + (set_local $var$43 + (i32.add + (get_local $var$85) + (i32.const -47) + ) + ) + (set_local $var$52 + (i32.add + (get_local $var$43) + (i32.const 8) + ) + ) + (set_local $var$62 + (i32.add + (get_local $var$43) + (if_else + (i32.eq + (i32.and + (get_local $var$52) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $var$52) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $var$52 + (i32.add + (get_local $var$59) + (i32.const 16) + ) + ) + (set_local $var$43 + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$62) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$52) + (i32.const 0) + ) + ) + (get_local $var$59) + (get_local $var$62) + ) + ) + (set_local $var$62 + (i32.add + (get_local $var$43) + (i32.const 8) + ) + ) + (set_local $var$42 + (i32.add + (get_local $var$57) + (i32.const 8) + ) + ) + (set_local $var$60 + (if_else + (i32.eq + (i32.and + (get_local $var$42) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $var$42) + ) + (i32.const 7) + ) + ) + ) + (set_local $var$42 + (i32.add + (get_local $var$57) + (get_local $var$60) + ) + ) + (set_local $var$49 + (i32.sub + (i32.add + (get_local $var$58) + (i32.const -40) + ) + (get_local $var$60) + ) + ) + (i32.store align=4 + (i32.const 200) + (get_local $var$42) + ) + (i32.store align=4 + (i32.const 188) + (get_local $var$49) + ) + (i32.store align=4 + (i32.add + (get_local $var$42) + (i32.const 4) + ) + (i32.or + (get_local $var$49) + (i32.const 1) + ) + ) + (i32.store align=4 + (i32.add + (i32.add + (get_local $var$42) + (get_local $var$49) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store align=4 + (i32.const 204) + (i32.load align=4 + (i32.const 664) + ) + ) + (set_local $var$49 + (i32.add + (get_local $var$43) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$49) + (i32.const 27) + ) + (i32.store align=4 + (get_local $var$62) + (i32.load align=4 + (i32.const 624) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (i32.const 4) + ) + (i32.load align=4 + (i32.const 628) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (i32.const 8) + ) + (i32.load align=4 + (i32.const 632) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$62) + (i32.const 12) + ) + (i32.load align=4 + (i32.const 636) + ) + ) + (i32.store align=4 + (i32.const 624) + (get_local $var$57) + ) + (i32.store align=4 + (i32.const 628) + (get_local $var$58) + ) + (i32.store align=4 + (i32.const 636) + (i32.const 0) + ) + (i32.store align=4 + (i32.const 632) + (get_local $var$62) + ) + (set_local $var$62 + (i32.add + (get_local $var$43) + (i32.const 24) + ) + ) + (loop $label$235 $label$236 + (block $label$237 + (set_local $var$62 + (i32.add + (get_local $var$62) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$62) + (i32.const 7) + ) + (br_if $label$236 + (i32.lt_u + (i32.shr_u + (i32.add + (get_local $var$62) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$85) + (i32.const 0) + ) + ) + ) + ) + ) + (if + (i32.ne + (get_local $var$43) + (get_local $var$59) + ) + (block $label$238 + (set_local $var$62 + (i32.sub + (get_local $var$43) + (get_local $var$59) + ) + ) + (i32.store align=4 + (get_local $var$49) + (i32.and + (i32.load align=4 + (get_local $var$49) + ) + (i32.const -2) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$59) + (i32.const 4) + ) + (i32.or + (get_local $var$62) + (i32.const 1) + ) + ) + (i32.store align=4 + (get_local $var$43) + (get_local $var$62) + ) + (set_local $var$42 + (i32.shr_u + (get_local $var$62) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$62) + (i32.const 0) + ) + (i32.const 256) + ) + (block $label$239 + (set_local $var$60 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $var$42) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $var$61 + (i32.load align=4 + (i32.const 176) + ) + ) + (set_local $var$56 + (i32.shl + (i32.const 1) + (get_local $var$42) + ) + ) + (if_else + (i32.and + (get_local $var$61) + (get_local $var$56) + ) + (block $label$240 + (set_local $var$42 + (i32.add + (get_local $var$60) + (i32.const 8) + ) + ) + (set_local $var$4 + (i32.load align=4 + (get_local $var$42) + ) + ) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$4) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$241 + (set_local $var$86 + (get_local $var$42) + ) + (set_local $var$87 + (get_local $var$4) + ) + ) + ) + ) + (block $label$242 + (i32.store align=4 + (i32.const 176) + (i32.or + (get_local $var$61) + (get_local $var$56) + ) + ) + (set_local $var$86 + (i32.add + (get_local $var$60) + (i32.const 8) + ) + ) + (set_local $var$87 + (get_local $var$60) + ) + ) + ) + (i32.store align=4 + (get_local $var$86) + (get_local $var$59) + ) + (i32.store align=4 + (i32.add + (get_local $var$87) + (i32.const 12) + ) + (get_local $var$59) + ) + (i32.store align=4 + (i32.add + (get_local $var$59) + (i32.const 8) + ) + (get_local $var$87) + ) + (i32.store align=4 + (i32.add + (get_local $var$59) + (i32.const 12) + ) + (get_local $var$60) + ) + (br $label$162) + ) + ) + (set_local $var$60 + (i32.shr_u + (get_local $var$62) + (i32.const 8) + ) + ) + (if_else + (get_local $var$60) + (if_else + (i32.gt_u + (i32.shr_u + (get_local $var$62) + (i32.const 0) + ) + (i32.const 16777215) + ) + (set_local $var$88 + (i32.const 31) + ) + (block $label$243 + (set_local $var$56 + (i32.and + (i32.shr_u + (i32.add + (get_local $var$60) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $var$61 + (i32.shl + (get_local $var$60) + (get_local $var$56) + ) + ) + (set_local $var$60 + (i32.and + (i32.shr_u + (i32.add + (get_local $var$61) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $var$4 + (i32.shl + (get_local $var$61) + (get_local $var$60) + ) + ) + (set_local $var$61 + (i32.and + (i32.shr_u + (i32.add + (get_local $var$4) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $var$42 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $var$60) + (get_local $var$56) + ) + (get_local $var$61) + ) + ) + (i32.shr_u + (i32.shl + (get_local $var$4) + (get_local $var$61) + ) + (i32.const 15) + ) + ) + ) + (set_local $var$88 + (i32.or + (i32.and + (i32.shr_u + (get_local $var$62) + (i32.add + (get_local $var$42) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $var$42) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $var$88 + (i32.const 0) + ) + ) + (set_local $var$42 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$88) + (i32.const 2) + ) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$59) + (i32.const 28) + ) + (get_local $var$88) + ) + (i32.store align=4 + (i32.add + (get_local $var$59) + (i32.const 20) + ) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$52) + (i32.const 0) + ) + (set_local $var$61 + (i32.load align=4 + (i32.const 180) + ) + ) + (set_local $var$4 + (i32.shl + (i32.const 1) + (get_local $var$88) + ) + ) + (if + (i32.eq + (i32.and + (get_local $var$61) + (get_local $var$4) + ) + (i32.const 0) + ) + (block $label$244 + (i32.store align=4 + (i32.const 180) + (i32.or + (get_local $var$61) + (get_local $var$4) + ) + ) + (i32.store align=4 + (get_local $var$42) + (get_local $var$59) + ) + (i32.store align=4 + (i32.add + (get_local $var$59) + (i32.const 24) + ) + (get_local $var$42) + ) + (i32.store align=4 + (i32.add + (get_local $var$59) + (i32.const 12) + ) + (get_local $var$59) + ) + (i32.store align=4 + (i32.add + (get_local $var$59) + (i32.const 8) + ) + (get_local $var$59) + ) + (br $label$162) + ) + ) + (set_local $var$4 + (i32.shl + (get_local $var$62) + (if_else + (i32.eq + (get_local $var$88) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $var$88) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $var$61 + (i32.load align=4 + (get_local $var$42) + ) + ) + (loop $label$245 $label$246 + (block $label$247 + (if + (i32.eq + (i32.and + (i32.load align=4 + (i32.add + (get_local $var$61) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $var$62) + ) + (block $label$248 + (set_local $var$89 + (get_local $var$61) + ) + (set_local $var$35 + (i32.const 307) + ) + (br $label$245) + ) + ) + (set_local $var$42 + (i32.add + (i32.add + (get_local $var$61) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $var$4) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $var$56 + (i32.load align=4 + (get_local $var$42) + ) + ) + (if_else + (i32.eq + (get_local $var$56) + (i32.const 0) + ) + (block $label$249 + (set_local $var$90 + (get_local $var$42) + ) + (set_local $var$91 + (get_local $var$61) + ) + (set_local $var$35 + (i32.const 304) + ) + (br $label$245) + ) + (block $label$250 + (set_local $var$4 + (i32.shl + (get_local $var$4) + (i32.const 1) + ) + ) + (set_local $var$61 + (get_local $var$56) + ) + ) + ) + (br $label$246) + ) + ) + (if_else + (i32.eq + (get_local $var$35) + (i32.const 304) + ) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$90) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$251 + (i32.store align=4 + (get_local $var$90) + (get_local $var$59) + ) + (i32.store align=4 + (i32.add + (get_local $var$59) + (i32.const 24) + ) + (get_local $var$91) + ) + (i32.store align=4 + (i32.add + (get_local $var$59) + (i32.const 12) + ) + (get_local $var$59) + ) + (i32.store align=4 + (i32.add + (get_local $var$59) + (i32.const 8) + ) + (get_local $var$59) + ) + (br $label$162) + ) + ) + (if + (i32.eq + (get_local $var$35) + (i32.const 307) + ) + (block $label$252 + (set_local $var$61 + (i32.add + (get_local $var$89) + (i32.const 8) + ) + ) + (set_local $var$4 + (i32.load align=4 + (get_local $var$61) + ) + ) + (set_local $var$62 + (i32.load align=4 + (i32.const 192) + ) + ) + (if_else + (i32.and + (i32.ge_u + (i32.shr_u + (get_local $var$4) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$62) + (i32.const 0) + ) + ) + (i32.ge_u + (i32.shr_u + (get_local $var$89) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$62) + (i32.const 0) + ) + ) + ) + (block $label$253 + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 12) + ) + (get_local $var$59) + ) + (i32.store align=4 + (get_local $var$61) + (get_local $var$59) + ) + (i32.store align=4 + (i32.add + (get_local $var$59) + (i32.const 8) + ) + (get_local $var$4) + ) + (i32.store align=4 + (i32.add + (get_local $var$59) + (i32.const 12) + ) + (get_local $var$89) + ) + (i32.store align=4 + (i32.add + (get_local $var$59) + (i32.const 24) + ) + (i32.const 0) + ) + (br $label$162) + ) + (call_import $_abort) + ) + ) + ) + ) + ) + ) + ) + (block $label$254 + (set_local $var$4 + (i32.load align=4 + (i32.const 192) + ) + ) + (if + (i32.or + (i32.eq + (get_local $var$4) + (i32.const 0) + ) + (i32.lt_u + (i32.shr_u + (get_local $var$57) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$4) + (i32.const 0) + ) + ) + ) + (i32.store align=4 + (i32.const 192) + (get_local $var$57) + ) + ) + (i32.store align=4 + (i32.const 624) + (get_local $var$57) + ) + (i32.store align=4 + (i32.const 628) + (get_local $var$58) + ) + (i32.store align=4 + (i32.const 636) + (i32.const 0) + ) + (i32.store align=4 + (i32.const 212) + (i32.load align=4 + (i32.const 648) + ) + ) + (i32.store align=4 + (i32.const 208) + (i32.const -1) + ) + (set_local $var$4 + (i32.const 0) + ) + (loop $label$255 $label$256 + (block $label$257 + (set_local $var$61 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $var$4) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$61) + (i32.const 12) + ) + (get_local $var$61) + ) + (i32.store align=4 + (i32.add + (get_local $var$61) + (i32.const 8) + ) + (get_local $var$61) + ) + (set_local $var$4 + (i32.add + (get_local $var$4) + (i32.const 1) + ) + ) + (br_if $label$256 + (i32.ne + (get_local $var$4) + (i32.const 32) + ) + ) + ) + ) + (set_local $var$4 + (i32.add + (get_local $var$57) + (i32.const 8) + ) + ) + (set_local $var$61 + (if_else + (i32.eq + (i32.and + (get_local $var$4) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $var$4) + ) + (i32.const 7) + ) + ) + ) + (set_local $var$4 + (i32.add + (get_local $var$57) + (get_local $var$61) + ) + ) + (set_local $var$62 + (i32.sub + (i32.add + (get_local $var$58) + (i32.const -40) + ) + (get_local $var$61) + ) + ) + (i32.store align=4 + (i32.const 200) + (get_local $var$4) + ) + (i32.store align=4 + (i32.const 188) + (get_local $var$62) + ) + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 4) + ) + (i32.or + (get_local $var$62) + (i32.const 1) + ) + ) + (i32.store align=4 + (i32.add + (i32.add + (get_local $var$4) + (get_local $var$62) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store align=4 + (i32.const 204) + (i32.load align=4 + (i32.const 664) + ) + ) + ) + ) + ) + (set_local $var$58 + (i32.load align=4 + (i32.const 188) + ) + ) + (if + (i32.gt_u + (i32.shr_u + (get_local $var$58) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$30) + (i32.const 0) + ) + ) + (block $label$258 + (set_local $var$57 + (i32.sub + (get_local $var$58) + (get_local $var$30) + ) + ) + (i32.store align=4 + (i32.const 188) + (get_local $var$57) + ) + (set_local $var$58 + (i32.load align=4 + (i32.const 200) + ) + ) + (set_local $var$59 + (i32.add + (get_local $var$58) + (get_local $var$30) + ) + ) + (i32.store align=4 + (i32.const 200) + (get_local $var$59) + ) + (i32.store align=4 + (i32.add + (get_local $var$59) + (i32.const 4) + ) + (i32.or + (get_local $var$57) + (i32.const 1) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$58) + (i32.const 4) + ) + (i32.or + (get_local $var$30) + (i32.const 3) + ) + ) + (set_local $var$12 + (i32.add + (get_local $var$58) + (i32.const 8) + ) + ) + (br $label$0 + (get_local $var$12) + ) + ) + ) + ) + ) + (i32.store align=4 + (call $___errno_location) + (i32.const 12) + ) + (set_local $var$12 + (i32.const 0) + ) + (get_local $var$12) + ) + ) + (func $_free (type $2) (param $var$0 i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (local $var$19 i32) + (local $var$20 i32) + (local $var$21 i32) + (local $var$22 i32) + (local $var$23 i32) + (local $var$24 i32) + (local $var$25 i32) + (local $var$26 i32) + (local $var$27 i32) + (local $var$28 i32) + (local $var$29 i32) + (local $var$30 i32) + (local $var$31 i32) + (local $var$32 i32) + (local $var$33 i32) + (local $var$34 i32) + (local $var$35 i32) + (local $var$36 i32) + (block $label$0 + (if + (i32.eq + (get_local $var$0) + (i32.const 0) + ) + (br $label$0) + ) + (set_local $var$1 + (i32.add + (get_local $var$0) + (i32.const -8) + ) + ) + (set_local $var$2 + (i32.load align=4 + (i32.const 192) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$1) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$2) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$3 + (i32.load align=4 + (i32.add + (get_local $var$0) + (i32.const -4) + ) + ) + ) + (set_local $var$0 + (i32.and + (get_local $var$3) + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $var$0) + (i32.const 1) + ) + (call_import $_abort) + ) + (set_local $var$4 + (i32.and + (get_local $var$3) + (i32.const -8) + ) + ) + (set_local $var$5 + (i32.add + (get_local $var$1) + (get_local $var$4) + ) + ) + (block $label$1 + (if_else + (i32.eq + (i32.and + (get_local $var$3) + (i32.const 1) + ) + (i32.const 0) + ) + (block $label$2 + (set_local $var$6 + (i32.load align=4 + (get_local $var$1) + ) + ) + (if + (i32.eq + (get_local $var$0) + (i32.const 0) + ) + (br $label$0) + ) + (set_local $var$7 + (i32.add + (get_local $var$1) + (i32.sub + (i32.const 0) + (get_local $var$6) + ) + ) + ) + (set_local $var$8 + (i32.add + (get_local $var$6) + (get_local $var$4) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$7) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$2) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (if + (i32.eq + (get_local $var$7) + (i32.load align=4 + (i32.const 196) + ) + ) + (block $label$3 + (set_local $var$9 + (i32.add + (get_local $var$5) + (i32.const 4) + ) + ) + (set_local $var$10 + (i32.load align=4 + (get_local $var$9) + ) + ) + (if + (i32.ne + (i32.and + (get_local $var$10) + (i32.const 3) + ) + (i32.const 3) + ) + (block $label$4 + (set_local $var$11 + (get_local $var$7) + ) + (set_local $var$12 + (get_local $var$8) + ) + (br $label$1) + ) + ) + (i32.store align=4 + (i32.const 184) + (get_local $var$8) + ) + (i32.store align=4 + (get_local $var$9) + (i32.and + (get_local $var$10) + (i32.const -2) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$7) + (i32.const 4) + ) + (i32.or + (get_local $var$8) + (i32.const 1) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$7) + (get_local $var$8) + ) + (get_local $var$8) + ) + (br $label$0) + ) + ) + (set_local $var$10 + (i32.shr_u + (get_local $var$6) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$6) + (i32.const 0) + ) + (i32.const 256) + ) + (block $label$5 + (set_local $var$6 + (i32.load align=4 + (i32.add + (get_local $var$7) + (i32.const 8) + ) + ) + ) + (set_local $var$9 + (i32.load align=4 + (i32.add + (get_local $var$7) + (i32.const 12) + ) + ) + ) + (set_local $var$13 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $var$10) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.ne + (get_local $var$6) + (get_local $var$13) + ) + (block $label$6 + (if + (i32.lt_u + (i32.shr_u + (get_local $var$6) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$2) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (if + (i32.ne + (i32.load align=4 + (i32.add + (get_local $var$6) + (i32.const 12) + ) + ) + (get_local $var$7) + ) + (call_import $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $var$9) + (get_local $var$6) + ) + (block $label$7 + (i32.store align=4 + (i32.const 176) + (i32.and + (i32.load align=4 + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $var$10) + ) + (i32.const -1) + ) + ) + ) + (set_local $var$11 + (get_local $var$7) + ) + (set_local $var$12 + (get_local $var$8) + ) + (br $label$1) + ) + ) + (if_else + (i32.ne + (get_local $var$9) + (get_local $var$13) + ) + (block $label$8 + (if + (i32.lt_u + (i32.shr_u + (get_local $var$9) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$2) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$13 + (i32.add + (get_local $var$9) + (i32.const 8) + ) + ) + (if_else + (i32.eq + (i32.load align=4 + (get_local $var$13) + ) + (get_local $var$7) + ) + (set_local $var$14 + (get_local $var$13) + ) + (call_import $_abort) + ) + ) + (set_local $var$14 + (i32.add + (get_local $var$9) + (i32.const 8) + ) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$6) + (i32.const 12) + ) + (get_local $var$9) + ) + (i32.store align=4 + (get_local $var$14) + (get_local $var$6) + ) + (set_local $var$11 + (get_local $var$7) + ) + (set_local $var$12 + (get_local $var$8) + ) + (br $label$1) + ) + ) + (set_local $var$6 + (i32.load align=4 + (i32.add + (get_local $var$7) + (i32.const 24) + ) + ) + ) + (set_local $var$9 + (i32.load align=4 + (i32.add + (get_local $var$7) + (i32.const 12) + ) + ) + ) + (block $label$9 + (if_else + (i32.eq + (get_local $var$9) + (get_local $var$7) + ) + (block $label$10 + (set_local $var$13 + (i32.add + (get_local $var$7) + (i32.const 16) + ) + ) + (set_local $var$10 + (i32.add + (get_local $var$13) + (i32.const 4) + ) + ) + (set_local $var$15 + (i32.load align=4 + (get_local $var$10) + ) + ) + (if_else + (i32.eq + (get_local $var$15) + (i32.const 0) + ) + (block $label$11 + (set_local $var$16 + (i32.load align=4 + (get_local $var$13) + ) + ) + (if_else + (i32.eq + (get_local $var$16) + (i32.const 0) + ) + (block $label$12 + (set_local $var$17 + (i32.const 0) + ) + (br $label$9) + ) + (block $label$13 + (set_local $var$18 + (get_local $var$16) + ) + (set_local $var$19 + (get_local $var$13) + ) + ) + ) + ) + (block $label$14 + (set_local $var$18 + (get_local $var$15) + ) + (set_local $var$19 + (get_local $var$10) + ) + ) + ) + (loop $label$15 $label$16 + (block $label$17 + (set_local $var$10 + (i32.add + (get_local $var$18) + (i32.const 20) + ) + ) + (set_local $var$15 + (i32.load align=4 + (get_local $var$10) + ) + ) + (if + (get_local $var$15) + (block $label$18 + (set_local $var$18 + (get_local $var$15) + ) + (set_local $var$19 + (get_local $var$10) + ) + (br $label$16) + ) + ) + (set_local $var$10 + (i32.add + (get_local $var$18) + (i32.const 16) + ) + ) + (set_local $var$15 + (i32.load align=4 + (get_local $var$10) + ) + ) + (if_else + (i32.eq + (get_local $var$15) + (i32.const 0) + ) + (block $label$19 + (set_local $var$20 + (get_local $var$18) + ) + (set_local $var$21 + (get_local $var$19) + ) + (br $label$15) + ) + (block $label$20 + (set_local $var$18 + (get_local $var$15) + ) + (set_local $var$19 + (get_local $var$10) + ) + ) + ) + (br $label$16) + ) + ) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$21) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$2) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$21 + (i32.store align=4 + (get_local $var$21) + (i32.const 0) + ) + (set_local $var$17 + (get_local $var$20) + ) + (br $label$9) + ) + ) + ) + (block $label$22 + (set_local $var$10 + (i32.load align=4 + (i32.add + (get_local $var$7) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$10) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$2) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$15 + (i32.add + (get_local $var$10) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load align=4 + (get_local $var$15) + ) + (get_local $var$7) + ) + (call_import $_abort) + ) + (set_local $var$13 + (i32.add + (get_local $var$9) + (i32.const 8) + ) + ) + (if_else + (i32.eq + (i32.load align=4 + (get_local $var$13) + ) + (get_local $var$7) + ) + (block $label$23 + (i32.store align=4 + (get_local $var$15) + (get_local $var$9) + ) + (i32.store align=4 + (get_local $var$13) + (get_local $var$10) + ) + (set_local $var$17 + (get_local $var$9) + ) + (br $label$9) + ) + (call_import $_abort) + ) + ) + ) + ) + (if_else + (get_local $var$6) + (block $label$24 + (set_local $var$9 + (i32.load align=4 + (i32.add + (get_local $var$7) + (i32.const 28) + ) + ) + ) + (set_local $var$10 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$9) + (i32.const 2) + ) + ) + ) + (if_else + (i32.eq + (get_local $var$7) + (i32.load align=4 + (get_local $var$10) + ) + ) + (block $label$25 + (i32.store align=4 + (get_local $var$10) + (get_local $var$17) + ) + (if + (i32.eq + (get_local $var$17) + (i32.const 0) + ) + (block $label$26 + (i32.store align=4 + (i32.const 180) + (i32.and + (i32.load align=4 + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $var$9) + ) + (i32.const -1) + ) + ) + ) + (set_local $var$11 + (get_local $var$7) + ) + (set_local $var$12 + (get_local $var$8) + ) + (br $label$1) + ) + ) + ) + (block $label$27 + (if + (i32.lt_u + (i32.shr_u + (get_local $var$6) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$9 + (i32.add + (get_local $var$6) + (i32.const 16) + ) + ) + (if_else + (i32.eq + (i32.load align=4 + (get_local $var$9) + ) + (get_local $var$7) + ) + (i32.store align=4 + (get_local $var$9) + (get_local $var$17) + ) + (i32.store align=4 + (i32.add + (get_local $var$6) + (i32.const 20) + ) + (get_local $var$17) + ) + ) + (if + (i32.eq + (get_local $var$17) + (i32.const 0) + ) + (block $label$28 + (set_local $var$11 + (get_local $var$7) + ) + (set_local $var$12 + (get_local $var$8) + ) + (br $label$1) + ) + ) + ) + ) + (set_local $var$9 + (i32.load align=4 + (i32.const 192) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$17) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$9) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (i32.store align=4 + (i32.add + (get_local $var$17) + (i32.const 24) + ) + (get_local $var$6) + ) + (set_local $var$10 + (i32.add + (get_local $var$7) + (i32.const 16) + ) + ) + (set_local $var$13 + (i32.load align=4 + (get_local $var$10) + ) + ) + (block $label$29 + (if + (get_local $var$13) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$13) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$9) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$30 + (i32.store align=4 + (i32.add + (get_local $var$17) + (i32.const 16) + ) + (get_local $var$13) + ) + (i32.store align=4 + (i32.add + (get_local $var$13) + (i32.const 24) + ) + (get_local $var$17) + ) + (br $label$29) + ) + ) + ) + ) + (set_local $var$13 + (i32.load align=4 + (i32.add + (get_local $var$10) + (i32.const 4) + ) + ) + ) + (if_else + (get_local $var$13) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$13) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$31 + (i32.store align=4 + (i32.add + (get_local $var$17) + (i32.const 20) + ) + (get_local $var$13) + ) + (i32.store align=4 + (i32.add + (get_local $var$13) + (i32.const 24) + ) + (get_local $var$17) + ) + (set_local $var$11 + (get_local $var$7) + ) + (set_local $var$12 + (get_local $var$8) + ) + (br $label$1) + ) + ) + (block $label$32 + (set_local $var$11 + (get_local $var$7) + ) + (set_local $var$12 + (get_local $var$8) + ) + ) + ) + ) + (block $label$33 + (set_local $var$11 + (get_local $var$7) + ) + (set_local $var$12 + (get_local $var$8) + ) + ) + ) + ) + (block $label$34 + (set_local $var$11 + (get_local $var$1) + ) + (set_local $var$12 + (get_local $var$4) + ) + ) + ) + ) + (if + (i32.ge_u + (i32.shr_u + (get_local $var$11) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$5) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$4 + (i32.add + (get_local $var$5) + (i32.const 4) + ) + ) + (set_local $var$1 + (i32.load align=4 + (get_local $var$4) + ) + ) + (if + (i32.eq + (i32.and + (get_local $var$1) + (i32.const 1) + ) + (i32.const 0) + ) + (call_import $_abort) + ) + (if_else + (i32.eq + (i32.and + (get_local $var$1) + (i32.const 2) + ) + (i32.const 0) + ) + (block $label$35 + (if + (i32.eq + (get_local $var$5) + (i32.load align=4 + (i32.const 200) + ) + ) + (block $label$36 + (set_local $var$17 + (i32.add + (i32.load align=4 + (i32.const 188) + ) + (get_local $var$12) + ) + ) + (i32.store align=4 + (i32.const 188) + (get_local $var$17) + ) + (i32.store align=4 + (i32.const 200) + (get_local $var$11) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (i32.const 4) + ) + (i32.or + (get_local $var$17) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $var$11) + (i32.load align=4 + (i32.const 196) + ) + ) + (br $label$0) + ) + (i32.store align=4 + (i32.const 196) + (i32.const 0) + ) + (i32.store align=4 + (i32.const 184) + (i32.const 0) + ) + (br $label$0) + ) + ) + (if + (i32.eq + (get_local $var$5) + (i32.load align=4 + (i32.const 196) + ) + ) + (block $label$37 + (set_local $var$17 + (i32.add + (i32.load align=4 + (i32.const 184) + ) + (get_local $var$12) + ) + ) + (i32.store align=4 + (i32.const 184) + (get_local $var$17) + ) + (i32.store align=4 + (i32.const 196) + (get_local $var$11) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (i32.const 4) + ) + (i32.or + (get_local $var$17) + (i32.const 1) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (get_local $var$17) + ) + (get_local $var$17) + ) + (br $label$0) + ) + ) + (set_local $var$17 + (i32.add + (i32.and + (get_local $var$1) + (i32.const -8) + ) + (get_local $var$12) + ) + ) + (set_local $var$2 + (i32.shr_u + (get_local $var$1) + (i32.const 3) + ) + ) + (block $label$38 + (if_else + (i32.ge_u + (i32.shr_u + (get_local $var$1) + (i32.const 0) + ) + (i32.const 256) + ) + (block $label$39 + (set_local $var$20 + (i32.load align=4 + (i32.add + (get_local $var$5) + (i32.const 24) + ) + ) + ) + (set_local $var$21 + (i32.load align=4 + (i32.add + (get_local $var$5) + (i32.const 12) + ) + ) + ) + (block $label$40 + (if_else + (i32.eq + (get_local $var$21) + (get_local $var$5) + ) + (block $label$41 + (set_local $var$19 + (i32.add + (get_local $var$5) + (i32.const 16) + ) + ) + (set_local $var$18 + (i32.add + (get_local $var$19) + (i32.const 4) + ) + ) + (set_local $var$14 + (i32.load align=4 + (get_local $var$18) + ) + ) + (if_else + (i32.eq + (get_local $var$14) + (i32.const 0) + ) + (block $label$42 + (set_local $var$0 + (i32.load align=4 + (get_local $var$19) + ) + ) + (if_else + (i32.eq + (get_local $var$0) + (i32.const 0) + ) + (block $label$43 + (set_local $var$22 + (i32.const 0) + ) + (br $label$40) + ) + (block $label$44 + (set_local $var$23 + (get_local $var$0) + ) + (set_local $var$24 + (get_local $var$19) + ) + ) + ) + ) + (block $label$45 + (set_local $var$23 + (get_local $var$14) + ) + (set_local $var$24 + (get_local $var$18) + ) + ) + ) + (loop $label$46 $label$47 + (block $label$48 + (set_local $var$18 + (i32.add + (get_local $var$23) + (i32.const 20) + ) + ) + (set_local $var$14 + (i32.load align=4 + (get_local $var$18) + ) + ) + (if + (get_local $var$14) + (block $label$49 + (set_local $var$23 + (get_local $var$14) + ) + (set_local $var$24 + (get_local $var$18) + ) + (br $label$47) + ) + ) + (set_local $var$18 + (i32.add + (get_local $var$23) + (i32.const 16) + ) + ) + (set_local $var$14 + (i32.load align=4 + (get_local $var$18) + ) + ) + (if_else + (i32.eq + (get_local $var$14) + (i32.const 0) + ) + (block $label$50 + (set_local $var$25 + (get_local $var$23) + ) + (set_local $var$26 + (get_local $var$24) + ) + (br $label$46) + ) + (block $label$51 + (set_local $var$23 + (get_local $var$14) + ) + (set_local $var$24 + (get_local $var$18) + ) + ) + ) + (br $label$47) + ) + ) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$26) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$52 + (i32.store align=4 + (get_local $var$26) + (i32.const 0) + ) + (set_local $var$22 + (get_local $var$25) + ) + (br $label$40) + ) + ) + ) + (block $label$53 + (set_local $var$18 + (i32.load align=4 + (i32.add + (get_local $var$5) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$18) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$14 + (i32.add + (get_local $var$18) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load align=4 + (get_local $var$14) + ) + (get_local $var$5) + ) + (call_import $_abort) + ) + (set_local $var$19 + (i32.add + (get_local $var$21) + (i32.const 8) + ) + ) + (if_else + (i32.eq + (i32.load align=4 + (get_local $var$19) + ) + (get_local $var$5) + ) + (block $label$54 + (i32.store align=4 + (get_local $var$14) + (get_local $var$21) + ) + (i32.store align=4 + (get_local $var$19) + (get_local $var$18) + ) + (set_local $var$22 + (get_local $var$21) + ) + (br $label$40) + ) + (call_import $_abort) + ) + ) + ) + ) + (if + (get_local $var$20) + (block $label$55 + (set_local $var$21 + (i32.load align=4 + (i32.add + (get_local $var$5) + (i32.const 28) + ) + ) + ) + (set_local $var$8 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$21) + (i32.const 2) + ) + ) + ) + (if_else + (i32.eq + (get_local $var$5) + (i32.load align=4 + (get_local $var$8) + ) + ) + (block $label$56 + (i32.store align=4 + (get_local $var$8) + (get_local $var$22) + ) + (if + (i32.eq + (get_local $var$22) + (i32.const 0) + ) + (block $label$57 + (i32.store align=4 + (i32.const 180) + (i32.and + (i32.load align=4 + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $var$21) + ) + (i32.const -1) + ) + ) + ) + (br $label$38) + ) + ) + ) + (block $label$58 + (if + (i32.lt_u + (i32.shr_u + (get_local $var$20) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$21 + (i32.add + (get_local $var$20) + (i32.const 16) + ) + ) + (if_else + (i32.eq + (i32.load align=4 + (get_local $var$21) + ) + (get_local $var$5) + ) + (i32.store align=4 + (get_local $var$21) + (get_local $var$22) + ) + (i32.store align=4 + (i32.add + (get_local $var$20) + (i32.const 20) + ) + (get_local $var$22) + ) + ) + (if + (i32.eq + (get_local $var$22) + (i32.const 0) + ) + (br $label$38) + ) + ) + ) + (set_local $var$21 + (i32.load align=4 + (i32.const 192) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$22) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$21) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (i32.store align=4 + (i32.add + (get_local $var$22) + (i32.const 24) + ) + (get_local $var$20) + ) + (set_local $var$8 + (i32.add + (get_local $var$5) + (i32.const 16) + ) + ) + (set_local $var$7 + (i32.load align=4 + (get_local $var$8) + ) + ) + (block $label$59 + (if + (get_local $var$7) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$7) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$21) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$60 + (i32.store align=4 + (i32.add + (get_local $var$22) + (i32.const 16) + ) + (get_local $var$7) + ) + (i32.store align=4 + (i32.add + (get_local $var$7) + (i32.const 24) + ) + (get_local $var$22) + ) + (br $label$59) + ) + ) + ) + ) + (set_local $var$7 + (i32.load align=4 + (i32.add + (get_local $var$8) + (i32.const 4) + ) + ) + ) + (if + (get_local $var$7) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$7) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$61 + (i32.store align=4 + (i32.add + (get_local $var$22) + (i32.const 20) + ) + (get_local $var$7) + ) + (i32.store align=4 + (i32.add + (get_local $var$7) + (i32.const 24) + ) + (get_local $var$22) + ) + (br $label$38) + ) + ) + ) + ) + ) + ) + (block $label$62 + (set_local $var$7 + (i32.load align=4 + (i32.add + (get_local $var$5) + (i32.const 8) + ) + ) + ) + (set_local $var$21 + (i32.load align=4 + (i32.add + (get_local $var$5) + (i32.const 12) + ) + ) + ) + (set_local $var$20 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $var$2) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.ne + (get_local $var$7) + (get_local $var$20) + ) + (block $label$63 + (if + (i32.lt_u + (i32.shr_u + (get_local $var$7) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (if + (i32.ne + (i32.load align=4 + (i32.add + (get_local $var$7) + (i32.const 12) + ) + ) + (get_local $var$5) + ) + (call_import $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $var$21) + (get_local $var$7) + ) + (block $label$64 + (i32.store align=4 + (i32.const 176) + (i32.and + (i32.load align=4 + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $var$2) + ) + (i32.const -1) + ) + ) + ) + (br $label$38) + ) + ) + (if_else + (i32.ne + (get_local $var$21) + (get_local $var$20) + ) + (block $label$65 + (if + (i32.lt_u + (i32.shr_u + (get_local $var$21) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + ) + (set_local $var$20 + (i32.add + (get_local $var$21) + (i32.const 8) + ) + ) + (if_else + (i32.eq + (i32.load align=4 + (get_local $var$20) + ) + (get_local $var$5) + ) + (set_local $var$27 + (get_local $var$20) + ) + (call_import $_abort) + ) + ) + (set_local $var$27 + (i32.add + (get_local $var$21) + (i32.const 8) + ) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$7) + (i32.const 12) + ) + (get_local $var$21) + ) + (i32.store align=4 + (get_local $var$27) + (get_local $var$7) + ) + ) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (i32.const 4) + ) + (i32.or + (get_local $var$17) + (i32.const 1) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (get_local $var$17) + ) + (get_local $var$17) + ) + (if_else + (i32.eq + (get_local $var$11) + (i32.load align=4 + (i32.const 196) + ) + ) + (block $label$66 + (i32.store align=4 + (i32.const 184) + (get_local $var$17) + ) + (br $label$0) + ) + (set_local $var$28 + (get_local $var$17) + ) + ) + ) + (block $label$67 + (i32.store align=4 + (get_local $var$4) + (i32.and + (get_local $var$1) + (i32.const -2) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (i32.const 4) + ) + (i32.or + (get_local $var$12) + (i32.const 1) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (get_local $var$12) + ) + (get_local $var$12) + ) + (set_local $var$28 + (get_local $var$12) + ) + ) + ) + (set_local $var$12 + (i32.shr_u + (get_local $var$28) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$28) + (i32.const 0) + ) + (i32.const 256) + ) + (block $label$68 + (set_local $var$1 + (i32.add + (i32.const 216) + (i32.shl + (i32.shl + (get_local $var$12) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $var$4 + (i32.load align=4 + (i32.const 176) + ) + ) + (set_local $var$17 + (i32.shl + (i32.const 1) + (get_local $var$12) + ) + ) + (if_else + (i32.and + (get_local $var$4) + (get_local $var$17) + ) + (block $label$69 + (set_local $var$12 + (i32.add + (get_local $var$1) + (i32.const 8) + ) + ) + (set_local $var$27 + (i32.load align=4 + (get_local $var$12) + ) + ) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$27) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$70 + (set_local $var$29 + (get_local $var$12) + ) + (set_local $var$30 + (get_local $var$27) + ) + ) + ) + ) + (block $label$71 + (i32.store align=4 + (i32.const 176) + (i32.or + (get_local $var$4) + (get_local $var$17) + ) + ) + (set_local $var$29 + (i32.add + (get_local $var$1) + (i32.const 8) + ) + ) + (set_local $var$30 + (get_local $var$1) + ) + ) + ) + (i32.store align=4 + (get_local $var$29) + (get_local $var$11) + ) + (i32.store align=4 + (i32.add + (get_local $var$30) + (i32.const 12) + ) + (get_local $var$11) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (i32.const 8) + ) + (get_local $var$30) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (i32.const 12) + ) + (get_local $var$1) + ) + (br $label$0) + ) + ) + (set_local $var$1 + (i32.shr_u + (get_local $var$28) + (i32.const 8) + ) + ) + (if_else + (get_local $var$1) + (if_else + (i32.gt_u + (i32.shr_u + (get_local $var$28) + (i32.const 0) + ) + (i32.const 16777215) + ) + (set_local $var$31 + (i32.const 31) + ) + (block $label$72 + (set_local $var$30 + (i32.and + (i32.shr_u + (i32.add + (get_local $var$1) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $var$29 + (i32.shl + (get_local $var$1) + (get_local $var$30) + ) + ) + (set_local $var$1 + (i32.and + (i32.shr_u + (i32.add + (get_local $var$29) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $var$17 + (i32.shl + (get_local $var$29) + (get_local $var$1) + ) + ) + (set_local $var$29 + (i32.and + (i32.shr_u + (i32.add + (get_local $var$17) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $var$4 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $var$1) + (get_local $var$30) + ) + (get_local $var$29) + ) + ) + (i32.shr_u + (i32.shl + (get_local $var$17) + (get_local $var$29) + ) + (i32.const 15) + ) + ) + ) + (set_local $var$31 + (i32.or + (i32.and + (i32.shr_u + (get_local $var$28) + (i32.add + (get_local $var$4) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $var$4) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $var$31 + (i32.const 0) + ) + ) + (set_local $var$4 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$31) + (i32.const 2) + ) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (i32.const 28) + ) + (get_local $var$31) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (i32.const 20) + ) + (i32.const 0) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (i32.const 16) + ) + (i32.const 0) + ) + (set_local $var$29 + (i32.load align=4 + (i32.const 180) + ) + ) + (set_local $var$17 + (i32.shl + (i32.const 1) + (get_local $var$31) + ) + ) + (block $label$73 + (if_else + (i32.and + (get_local $var$29) + (get_local $var$17) + ) + (block $label$74 + (set_local $var$30 + (i32.shl + (get_local $var$28) + (if_else + (i32.eq + (get_local $var$31) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $var$31) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $var$1 + (i32.load align=4 + (get_local $var$4) + ) + ) + (loop $label$75 $label$76 + (block $label$77 + (if + (i32.eq + (i32.and + (i32.load align=4 + (i32.add + (get_local $var$1) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $var$28) + ) + (block $label$78 + (set_local $var$32 + (get_local $var$1) + ) + (set_local $var$33 + (i32.const 130) + ) + (br $label$75) + ) + ) + (set_local $var$27 + (i32.add + (i32.add + (get_local $var$1) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $var$30) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $var$12 + (i32.load align=4 + (get_local $var$27) + ) + ) + (if_else + (i32.eq + (get_local $var$12) + (i32.const 0) + ) + (block $label$79 + (set_local $var$34 + (get_local $var$27) + ) + (set_local $var$35 + (get_local $var$1) + ) + (set_local $var$33 + (i32.const 127) + ) + (br $label$75) + ) + (block $label$80 + (set_local $var$30 + (i32.shl + (get_local $var$30) + (i32.const 1) + ) + ) + (set_local $var$1 + (get_local $var$12) + ) + ) + ) + (br $label$76) + ) + ) + (if_else + (i32.eq + (get_local $var$33) + (i32.const 127) + ) + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$34) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.const 192) + ) + (i32.const 0) + ) + ) + (call_import $_abort) + (block $label$81 + (i32.store align=4 + (get_local $var$34) + (get_local $var$11) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (i32.const 24) + ) + (get_local $var$35) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (i32.const 12) + ) + (get_local $var$11) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (i32.const 8) + ) + (get_local $var$11) + ) + (br $label$73) + ) + ) + (if + (i32.eq + (get_local $var$33) + (i32.const 130) + ) + (block $label$82 + (set_local $var$1 + (i32.add + (get_local $var$32) + (i32.const 8) + ) + ) + (set_local $var$30 + (i32.load align=4 + (get_local $var$1) + ) + ) + (set_local $var$8 + (i32.load align=4 + (i32.const 192) + ) + ) + (if_else + (i32.and + (i32.ge_u + (i32.shr_u + (get_local $var$30) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$8) + (i32.const 0) + ) + ) + (i32.ge_u + (i32.shr_u + (get_local $var$32) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$8) + (i32.const 0) + ) + ) + ) + (block $label$83 + (i32.store align=4 + (i32.add + (get_local $var$30) + (i32.const 12) + ) + (get_local $var$11) + ) + (i32.store align=4 + (get_local $var$1) + (get_local $var$11) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (i32.const 8) + ) + (get_local $var$30) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (i32.const 12) + ) + (get_local $var$32) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (i32.const 24) + ) + (i32.const 0) + ) + (br $label$73) + ) + (call_import $_abort) + ) + ) + ) + ) + ) + (block $label$84 + (i32.store align=4 + (i32.const 180) + (i32.or + (get_local $var$29) + (get_local $var$17) + ) + ) + (i32.store align=4 + (get_local $var$4) + (get_local $var$11) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (i32.const 24) + ) + (get_local $var$4) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (i32.const 12) + ) + (get_local $var$11) + ) + (i32.store align=4 + (i32.add + (get_local $var$11) + (i32.const 8) + ) + (get_local $var$11) + ) + ) + ) + ) + (set_local $var$11 + (i32.add + (i32.load align=4 + (i32.const 208) + ) + (i32.const -1) + ) + ) + (i32.store align=4 + (i32.const 208) + (get_local $var$11) + ) + (if_else + (i32.eq + (get_local $var$11) + (i32.const 0) + ) + (set_local $var$36 + (i32.const 632) + ) + (br $label$0) + ) + (loop $label$85 $label$86 + (block $label$87 + (set_local $var$11 + (i32.load align=4 + (get_local $var$36) + ) + ) + (if_else + (i32.eq + (get_local $var$11) + (i32.const 0) + ) + (br $label$85) + (set_local $var$36 + (i32.add + (get_local $var$11) + (i32.const 8) + ) + ) + ) + (br $label$86) + ) + ) + (i32.store align=4 + (i32.const 208) + (i32.const -1) + ) + (br $label$0) + ) + ) + (func $___stdio_write (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (local $var$19 i32) + (local $var$20 i32) + (local $var$21 i32) + (local $var$22 i32) + (local $var$23 i32) + (block $label$0 + (set_local $var$3 + (i32.load align=4 + (i32.const 8) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (i32.const 48) + ) + ) + (set_local $var$4 + (i32.add + (get_local $var$3) + (i32.const 16) + ) + ) + (set_local $var$5 + (get_local $var$3) + ) + (set_local $var$6 + (i32.add + (get_local $var$3) + (i32.const 32) + ) + ) + (set_local $var$7 + (i32.add + (get_local $var$0) + (i32.const 28) + ) + ) + (set_local $var$8 + (i32.load align=4 + (get_local $var$7) + ) + ) + (i32.store align=4 + (get_local $var$6) + (get_local $var$8) + ) + (set_local $var$9 + (i32.add + (get_local $var$0) + (i32.const 20) + ) + ) + (set_local $var$10 + (i32.sub + (i32.load align=4 + (get_local $var$9) + ) + (get_local $var$8) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$6) + (i32.const 4) + ) + (get_local $var$10) + ) + (i32.store align=4 + (i32.add + (get_local $var$6) + (i32.const 8) + ) + (get_local $var$1) + ) + (i32.store align=4 + (i32.add + (get_local $var$6) + (i32.const 12) + ) + (get_local $var$2) + ) + (set_local $var$1 + (i32.add + (get_local $var$0) + (i32.const 60) + ) + ) + (set_local $var$8 + (i32.add + (get_local $var$0) + (i32.const 44) + ) + ) + (set_local $var$11 + (get_local $var$6) + ) + (set_local $var$6 + (i32.const 2) + ) + (set_local $var$12 + (i32.add + (get_local $var$10) + (get_local $var$2) + ) + ) + (loop $label$1 $label$2 + (block $label$3 + (if_else + (i32.eq + (i32.load align=4 + (i32.const 8) + ) + (i32.const 0) + ) + (block $label$4 + (i32.store align=4 + (get_local $var$4) + (i32.load align=4 + (get_local $var$1) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 4) + ) + (get_local $var$11) + ) + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 8) + ) + (get_local $var$6) + ) + (set_local $var$13 + (call $___syscall_ret + (call_import $___syscall146 + (i32.const 146) + (get_local $var$4) + ) + ) + ) + ) + (block $label$5 + (call_import $_pthread_cleanup_push + (i32.const 4) + (get_local $var$0) + ) + (i32.store align=4 + (get_local $var$5) + (i32.load align=4 + (get_local $var$1) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$5) + (i32.const 4) + ) + (get_local $var$11) + ) + (i32.store align=4 + (i32.add + (get_local $var$5) + (i32.const 8) + ) + (get_local $var$6) + ) + (set_local $var$10 + (call $___syscall_ret + (call_import $___syscall146 + (i32.const 146) + (get_local $var$5) + ) + ) + ) + (call_import $_pthread_cleanup_pop + (i32.const 0) + ) + (set_local $var$13 + (get_local $var$10) + ) + ) + ) + (if + (i32.eq + (get_local $var$12) + (get_local $var$13) + ) + (block $label$6 + (set_local $var$14 + (i32.const 6) + ) + (br $label$1) + ) + ) + (if + (i32.lt_s + (get_local $var$13) + (i32.const 0) + ) + (block $label$7 + (set_local $var$15 + (get_local $var$11) + ) + (set_local $var$16 + (get_local $var$6) + ) + (set_local $var$14 + (i32.const 8) + ) + (br $label$1) + ) + ) + (set_local $var$10 + (i32.sub + (get_local $var$12) + (get_local $var$13) + ) + ) + (set_local $var$17 + (i32.load align=4 + (i32.add + (get_local $var$11) + (i32.const 4) + ) + ) + ) + (if_else + (i32.le_u + (i32.shr_u + (get_local $var$13) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$17) + (i32.const 0) + ) + ) + (if_else + (i32.eq + (get_local $var$6) + (i32.const 2) + ) + (block $label$8 + (i32.store align=4 + (get_local $var$7) + (i32.add + (i32.load align=4 + (get_local $var$7) + ) + (get_local $var$13) + ) + ) + (set_local $var$18 + (get_local $var$17) + ) + (set_local $var$19 + (get_local $var$13) + ) + (set_local $var$20 + (get_local $var$11) + ) + (set_local $var$21 + (i32.const 2) + ) + ) + (block $label$9 + (set_local $var$18 + (get_local $var$17) + ) + (set_local $var$19 + (get_local $var$13) + ) + (set_local $var$20 + (get_local $var$11) + ) + (set_local $var$21 + (get_local $var$6) + ) + ) + ) + (block $label$10 + (set_local $var$22 + (i32.load align=4 + (get_local $var$8) + ) + ) + (i32.store align=4 + (get_local $var$7) + (get_local $var$22) + ) + (i32.store align=4 + (get_local $var$9) + (get_local $var$22) + ) + (set_local $var$18 + (i32.load align=4 + (i32.add + (get_local $var$11) + (i32.const 12) + ) + ) + ) + (set_local $var$19 + (i32.sub + (get_local $var$13) + (get_local $var$17) + ) + ) + (set_local $var$20 + (i32.add + (get_local $var$11) + (i32.const 8) + ) + ) + (set_local $var$21 + (i32.add + (get_local $var$6) + (i32.const -1) + ) + ) + ) + ) + (i32.store align=4 + (get_local $var$20) + (i32.add + (i32.load align=4 + (get_local $var$20) + ) + (get_local $var$19) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$20) + (i32.const 4) + ) + (i32.sub + (get_local $var$18) + (get_local $var$19) + ) + ) + (set_local $var$11 + (get_local $var$20) + ) + (set_local $var$6 + (get_local $var$21) + ) + (set_local $var$12 + (get_local $var$10) + ) + (br $label$2) + ) + ) + (if_else + (i32.eq + (get_local $var$14) + (i32.const 6) + ) + (block $label$11 + (set_local $var$12 + (i32.load align=4 + (get_local $var$8) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$0) + (i32.const 16) + ) + (i32.add + (get_local $var$12) + (i32.load align=4 + (i32.add + (get_local $var$0) + (i32.const 48) + ) + ) + ) + ) + (set_local $var$8 + (get_local $var$12) + ) + (i32.store align=4 + (get_local $var$7) + (get_local $var$8) + ) + (i32.store align=4 + (get_local $var$9) + (get_local $var$8) + ) + (set_local $var$23 + (get_local $var$2) + ) + ) + (if + (i32.eq + (get_local $var$14) + (i32.const 8) + ) + (block $label$12 + (i32.store align=4 + (i32.add + (get_local $var$0) + (i32.const 16) + ) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$7) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$9) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$0) + (i32.or + (i32.load align=4 + (get_local $var$0) + ) + (i32.const 32) + ) + ) + (if_else + (i32.eq + (get_local $var$16) + (i32.const 2) + ) + (set_local $var$23 + (i32.const 0) + ) + (set_local $var$23 + (i32.sub + (get_local $var$2) + (i32.load align=4 + (i32.add + (get_local $var$15) + (i32.const 4) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.store align=4 + (i32.const 8) + (get_local $var$3) + ) + (get_local $var$23) + ) + ) + (func $___fwritex (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (block $label$0 + (set_local $var$3 + (i32.add + (get_local $var$2) + (i32.const 16) + ) + ) + (set_local $var$4 + (i32.load align=4 + (get_local $var$3) + ) + ) + (if_else + (i32.eq + (get_local $var$4) + (i32.const 0) + ) + (if_else + (i32.eq + (call $___towrite + (get_local $var$2) + ) + (i32.const 0) + ) + (block $label$1 + (set_local $var$5 + (i32.load align=4 + (get_local $var$3) + ) + ) + (set_local $var$6 + (i32.const 5) + ) + ) + (set_local $var$7 + (i32.const 0) + ) + ) + (block $label$2 + (set_local $var$5 + (get_local $var$4) + ) + (set_local $var$6 + (i32.const 5) + ) + ) + ) + (block $label$3 + (if + (i32.eq + (get_local $var$6) + (i32.const 5) + ) + (block $label$4 + (set_local $var$4 + (i32.add + (get_local $var$2) + (i32.const 20) + ) + ) + (set_local $var$3 + (i32.load align=4 + (get_local $var$4) + ) + ) + (set_local $var$8 + (get_local $var$3) + ) + (if + (i32.lt_u + (i32.shr_u + (i32.sub + (get_local $var$5) + (get_local $var$3) + ) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$1) + (i32.const 0) + ) + ) + (block $label$5 + (set_local $var$7 + (call_indirect $0 + (i32.add + (i32.and + (i32.load align=4 + (i32.add + (get_local $var$2) + (i32.const 36) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + (get_local $var$2) + (get_local $var$0) + (get_local $var$1) + ) + ) + (br $label$3) + ) + ) + (block $label$6 + (if_else + (i32.gt_s + (i32.load8_s align=1 + (i32.add + (get_local $var$2) + (i32.const 75) + ) + ) + (i32.const -1) + ) + (block $label$7 + (set_local $var$3 + (get_local $var$1) + ) + (loop $label$8 $label$9 + (block $label$10 + (if + (i32.eq + (get_local $var$3) + (i32.const 0) + ) + (block $label$11 + (set_local $var$9 + (get_local $var$1) + ) + (set_local $var$10 + (get_local $var$0) + ) + (set_local $var$11 + (get_local $var$8) + ) + (set_local $var$12 + (i32.const 0) + ) + (br $label$6) + ) + ) + (set_local $var$13 + (i32.add + (get_local $var$3) + (i32.const -1) + ) + ) + (if_else + (i32.eq + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (get_local $var$13) + ) + ) + (i32.const 10) + ) + (block $label$12 + (set_local $var$14 + (get_local $var$3) + ) + (br $label$8) + ) + (set_local $var$3 + (get_local $var$13) + ) + ) + (br $label$9) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (call_indirect $0 + (i32.add + (i32.and + (i32.load align=4 + (i32.add + (get_local $var$2) + (i32.const 36) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + (get_local $var$2) + (get_local $var$0) + (get_local $var$14) + ) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$14) + (i32.const 0) + ) + ) + (block $label$13 + (set_local $var$7 + (get_local $var$14) + ) + (br $label$3) + ) + ) + (set_local $var$9 + (i32.sub + (get_local $var$1) + (get_local $var$14) + ) + ) + (set_local $var$10 + (i32.add + (get_local $var$0) + (get_local $var$14) + ) + ) + (set_local $var$11 + (i32.load align=4 + (get_local $var$4) + ) + ) + (set_local $var$12 + (get_local $var$14) + ) + ) + (block $label$14 + (set_local $var$9 + (get_local $var$1) + ) + (set_local $var$10 + (get_local $var$0) + ) + (set_local $var$11 + (get_local $var$8) + ) + (set_local $var$12 + (i32.const 0) + ) + ) + ) + ) + (call $_memcpy + (get_local $var$11) + (get_local $var$10) + (get_local $var$9) + ) + (i32.store align=4 + (get_local $var$4) + (i32.add + (i32.load align=4 + (get_local $var$4) + ) + (get_local $var$9) + ) + ) + (set_local $var$7 + (i32.add + (get_local $var$12) + (get_local $var$9) + ) + ) + ) + ) + ) + (get_local $var$7) + ) + ) + (func $_fflush (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (block $label$0 + (block $label$1 + (if_else + (get_local $var$0) + (block $label$2 + (if + (i32.le_s + (i32.load align=4 + (i32.add + (get_local $var$0) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (block $label$3 + (set_local $var$1 + (call $___fflush_unlocked + (get_local $var$0) + ) + ) + (br $label$1) + ) + ) + (set_local $var$2 + (i32.eq + (call $___lockfile + (get_local $var$0) + ) + (i32.const 0) + ) + ) + (set_local $var$3 + (call $___fflush_unlocked + (get_local $var$0) + ) + ) + (if_else + (get_local $var$2) + (set_local $var$1 + (get_local $var$3) + ) + (block $label$4 + (call $___unlockfile + (get_local $var$0) + ) + (set_local $var$1 + (get_local $var$3) + ) + ) + ) + ) + (block $label$5 + (if_else + (i32.eq + (i32.load align=4 + (i32.const 56) + ) + (i32.const 0) + ) + (set_local $var$4 + (i32.const 0) + ) + (set_local $var$4 + (call $_fflush + (i32.load align=4 + (i32.const 56) + ) + ) + ) + ) + (call_import $___lock + (i32.const 36) + ) + (set_local $var$3 + (i32.load align=4 + (i32.const 32) + ) + ) + (if_else + (i32.eq + (get_local $var$3) + (i32.const 0) + ) + (set_local $var$5 + (get_local $var$4) + ) + (block $label$6 + (set_local $var$2 + (get_local $var$3) + ) + (set_local $var$3 + (get_local $var$4) + ) + (loop $label$7 $label$8 + (block $label$9 + (if_else + (i32.gt_s + (i32.load align=4 + (i32.add + (get_local $var$2) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (set_local $var$6 + (call $___lockfile + (get_local $var$2) + ) + ) + (set_local $var$6 + (i32.const 0) + ) + ) + (if_else + (i32.gt_u + (i32.shr_u + (i32.load align=4 + (i32.add + (get_local $var$2) + (i32.const 20) + ) + ) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.add + (get_local $var$2) + (i32.const 28) + ) + ) + (i32.const 0) + ) + ) + (set_local $var$7 + (i32.or + (call $___fflush_unlocked + (get_local $var$2) + ) + (get_local $var$3) + ) + ) + (set_local $var$7 + (get_local $var$3) + ) + ) + (if + (get_local $var$6) + (call $___unlockfile + (get_local $var$2) + ) + ) + (set_local $var$2 + (i32.load align=4 + (i32.add + (get_local $var$2) + (i32.const 56) + ) + ) + ) + (if_else + (i32.eq + (get_local $var$2) + (i32.const 0) + ) + (block $label$10 + (set_local $var$5 + (get_local $var$7) + ) + (br $label$7) + ) + (set_local $var$3 + (get_local $var$7) + ) + ) + (br $label$8) + ) + ) + ) + ) + (call_import $___unlock + (i32.const 36) + ) + (set_local $var$1 + (get_local $var$5) + ) + ) + ) + ) + (get_local $var$1) + ) + ) + (func $_strlen (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (block $label$0 + (set_local $var$1 + (get_local $var$0) + ) + (block $label$1 + (if_else + (i32.eq + (i32.and + (get_local $var$1) + (i32.const 3) + ) + (i32.const 0) + ) + (block $label$2 + (set_local $var$2 + (get_local $var$0) + ) + (set_local $var$3 + (i32.const 4) + ) + ) + (block $label$3 + (set_local $var$4 + (get_local $var$0) + ) + (set_local $var$5 + (get_local $var$1) + ) + (loop $label$4 $label$5 + (block $label$6 + (if + (i32.eq + (i32.load8_s align=1 + (get_local $var$4) + ) + (i32.const 0) + ) + (block $label$7 + (set_local $var$6 + (get_local $var$5) + ) + (br $label$1) + ) + ) + (set_local $var$7 + (i32.add + (get_local $var$4) + (i32.const 1) + ) + ) + (set_local $var$5 + (get_local $var$7) + ) + (if_else + (i32.eq + (i32.and + (get_local $var$5) + (i32.const 3) + ) + (i32.const 0) + ) + (block $label$8 + (set_local $var$2 + (get_local $var$7) + ) + (set_local $var$3 + (i32.const 4) + ) + (br $label$4) + ) + (set_local $var$4 + (get_local $var$7) + ) + ) + (br $label$5) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $var$3) + (i32.const 4) + ) + (block $label$9 + (set_local $var$3 + (get_local $var$2) + ) + (loop $label$10 $label$11 + (block $label$12 + (set_local $var$2 + (i32.load align=4 + (get_local $var$3) + ) + ) + (if_else + (i32.eq + (i32.and + (i32.xor + (i32.and + (get_local $var$2) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $var$2) + (i32.const -16843009) + ) + ) + (i32.const 0) + ) + (set_local $var$3 + (i32.add + (get_local $var$3) + (i32.const 4) + ) + ) + (block $label$13 + (set_local $var$8 + (get_local $var$2) + ) + (set_local $var$9 + (get_local $var$3) + ) + (br $label$10) + ) + ) + (br $label$11) + ) + ) + (if_else + (i32.eq + (i32.shr_s + (i32.shl + (i32.and + (get_local $var$8) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + (set_local $var$10 + (get_local $var$9) + ) + (block $label$14 + (set_local $var$8 + (get_local $var$9) + ) + (loop $label$15 $label$16 + (block $label$17 + (set_local $var$9 + (i32.add + (get_local $var$8) + (i32.const 1) + ) + ) + (if_else + (i32.eq + (i32.load8_s align=1 + (get_local $var$9) + ) + (i32.const 0) + ) + (block $label$18 + (set_local $var$10 + (get_local $var$9) + ) + (br $label$15) + ) + (set_local $var$8 + (get_local $var$9) + ) + ) + (br $label$16) + ) + ) + ) + ) + (set_local $var$6 + (get_local $var$10) + ) + ) + ) + (i32.sub + (get_local $var$6) + (get_local $var$1) + ) + ) + ) + (func $___overflow (type $4) (param $var$0 i32) (param $var$1 i32) (result i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (block $label$0 + (set_local $var$2 + (i32.load align=4 + (i32.const 8) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (i32.const 16) + ) + ) + (set_local $var$3 + (get_local $var$2) + ) + (set_local $var$4 + (i32.and + (get_local $var$1) + (i32.const 255) + ) + ) + (i32.store8 align=1 + (get_local $var$3) + (get_local $var$4) + ) + (set_local $var$5 + (i32.add + (get_local $var$0) + (i32.const 16) + ) + ) + (set_local $var$6 + (i32.load align=4 + (get_local $var$5) + ) + ) + (if_else + (i32.eq + (get_local $var$6) + (i32.const 0) + ) + (if_else + (i32.eq + (call $___towrite + (get_local $var$0) + ) + (i32.const 0) + ) + (block $label$1 + (set_local $var$7 + (i32.load align=4 + (get_local $var$5) + ) + ) + (set_local $var$8 + (i32.const 4) + ) + ) + (set_local $var$9 + (i32.const -1) + ) + ) + (block $label$2 + (set_local $var$7 + (get_local $var$6) + ) + (set_local $var$8 + (i32.const 4) + ) + ) + ) + (block $label$3 + (if + (i32.eq + (get_local $var$8) + (i32.const 4) + ) + (block $label$4 + (set_local $var$6 + (i32.add + (get_local $var$0) + (i32.const 20) + ) + ) + (set_local $var$5 + (i32.load align=4 + (get_local $var$6) + ) + ) + (if + (if_else + (i32.lt_u + (i32.shr_u + (get_local $var$5) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$7) + (i32.const 0) + ) + ) + (block $label$5 + (set_local $var$10 + (i32.and + (get_local $var$1) + (i32.const 255) + ) + ) + (i32.ne + (get_local $var$10) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 75) + ) + ) + ) + ) + (i32.const 0) + ) + (block $label$6 + (i32.store align=4 + (get_local $var$6) + (i32.add + (get_local $var$5) + (i32.const 1) + ) + ) + (i32.store8 align=1 + (get_local $var$5) + (get_local $var$4) + ) + (set_local $var$9 + (get_local $var$10) + ) + (br $label$3) + ) + ) + (if_else + (i32.eq + (call_indirect $0 + (i32.add + (i32.and + (i32.load align=4 + (i32.add + (get_local $var$0) + (i32.const 36) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + (get_local $var$0) + (get_local $var$3) + (i32.const 1) + ) + (i32.const 1) + ) + (set_local $var$9 + (i32.load8_u align=1 + (get_local $var$3) + ) + ) + (set_local $var$9 + (i32.const -1) + ) + ) + ) + ) + ) + (i32.store align=4 + (i32.const 8) + (get_local $var$2) + ) + (get_local $var$9) + ) + ) + (func $___fflush_unlocked (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (block $label$0 + (set_local $var$1 + (i32.add + (get_local $var$0) + (i32.const 20) + ) + ) + (set_local $var$2 + (i32.add + (get_local $var$0) + (i32.const 28) + ) + ) + (if_else + (if_else + (i32.gt_u + (i32.shr_u + (i32.load align=4 + (get_local $var$1) + ) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (get_local $var$2) + ) + (i32.const 0) + ) + ) + (block $label$1 + (call_indirect $0 + (i32.add + (i32.and + (i32.load align=4 + (i32.add + (get_local $var$0) + (i32.const 36) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + (get_local $var$0) + (i32.const 0) + (i32.const 0) + ) + (i32.eq + (i32.load align=4 + (get_local $var$1) + ) + (i32.const 0) + ) + ) + (i32.const 0) + ) + (set_local $var$3 + (i32.const -1) + ) + (block $label$2 + (set_local $var$4 + (i32.add + (get_local $var$0) + (i32.const 4) + ) + ) + (set_local $var$5 + (i32.load align=4 + (get_local $var$4) + ) + ) + (set_local $var$6 + (i32.add + (get_local $var$0) + (i32.const 8) + ) + ) + (set_local $var$7 + (i32.load align=4 + (get_local $var$6) + ) + ) + (if + (i32.lt_u + (i32.shr_u + (get_local $var$5) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$7) + (i32.const 0) + ) + ) + (call_indirect $0 + (i32.add + (i32.and + (i32.load align=4 + (i32.add + (get_local $var$0) + (i32.const 40) + ) + ) + (i32.const 7) + ) + (i32.const 2) + ) + (get_local $var$0) + (i32.sub + (get_local $var$5) + (get_local $var$7) + ) + (i32.const 1) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$0) + (i32.const 16) + ) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$2) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$1) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$6) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$4) + (i32.const 0) + ) + (set_local $var$3 + (i32.const 0) + ) + ) + ) + (get_local $var$3) + ) + ) + (func $_memcpy (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (local $var$3 i32) + (block $label$0 + (if + (i32.ge_s + (get_local $var$2) + (i32.const 4096) + ) + (br $label$0 + (call_import $_emscripten_memcpy_big + (get_local $var$0) + (get_local $var$1) + (get_local $var$2) + ) + ) + ) + (set_local $var$3 + (get_local $var$0) + ) + (if + (i32.eq + (i32.and + (get_local $var$0) + (i32.const 3) + ) + (i32.and + (get_local $var$1) + (i32.const 3) + ) + ) + (block $label$1 + (loop $label$2 $label$3 + (block $label$4 + (if_else + (i32.and + (get_local $var$0) + (i32.const 3) + ) + (nop) + (br $label$2) + ) + (block $label$5 + (if + (i32.eq + (get_local $var$2) + (i32.const 0) + ) + (br $label$0 + (get_local $var$3) + ) + ) + (i32.store8 align=1 + (get_local $var$0) + (i32.load8_s align=1 + (get_local $var$1) + ) + ) + (set_local $var$0 + (i32.add + (get_local $var$0) + (i32.const 1) + ) + ) + (set_local $var$1 + (i32.add + (get_local $var$1) + (i32.const 1) + ) + ) + (set_local $var$2 + (i32.sub + (get_local $var$2) + (i32.const 1) + ) + ) + ) + (br $label$3) + ) + ) + (loop $label$6 $label$7 + (block $label$8 + (if_else + (i32.ge_s + (get_local $var$2) + (i32.const 4) + ) + (nop) + (br $label$6) + ) + (block $label$9 + (i32.store align=4 + (get_local $var$0) + (i32.load align=4 + (get_local $var$1) + ) + ) + (set_local $var$0 + (i32.add + (get_local $var$0) + (i32.const 4) + ) + ) + (set_local $var$1 + (i32.add + (get_local $var$1) + (i32.const 4) + ) + ) + (set_local $var$2 + (i32.sub + (get_local $var$2) + (i32.const 4) + ) + ) + ) + (br $label$7) + ) + ) + ) + ) + (loop $label$10 $label$11 + (block $label$12 + (if_else + (i32.gt_s + (get_local $var$2) + (i32.const 0) + ) + (nop) + (br $label$10) + ) + (block $label$13 + (i32.store8 align=1 + (get_local $var$0) + (i32.load8_s align=1 + (get_local $var$1) + ) + ) + (set_local $var$0 + (i32.add + (get_local $var$0) + (i32.const 1) + ) + ) + (set_local $var$1 + (i32.add + (get_local $var$1) + (i32.const 1) + ) + ) + (set_local $var$2 + (i32.sub + (get_local $var$2) + (i32.const 1) + ) + ) + ) + (br $label$11) + ) + ) + (get_local $var$3) + ) + ) + (func $runPostSets (type $5) + (nop) + ) + (func $_memset (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (block $label$0 + (set_local $var$3 + (i32.add + (get_local $var$0) + (get_local $var$2) + ) + ) + (if + (i32.ge_s + (get_local $var$2) + (i32.const 20) + ) + (block $label$1 + (set_local $var$1 + (i32.and + (get_local $var$1) + (i32.const 255) + ) + ) + (set_local $var$4 + (i32.and + (get_local $var$0) + (i32.const 3) + ) + ) + (set_local $var$5 + (i32.or + (i32.or + (i32.or + (get_local $var$1) + (i32.shl + (get_local $var$1) + (i32.const 8) + ) + ) + (i32.shl + (get_local $var$1) + (i32.const 16) + ) + ) + (i32.shl + (get_local $var$1) + (i32.const 24) + ) + ) + ) + (set_local $var$6 + (i32.and + (get_local $var$3) + (i32.xor + (i32.const 3) + (i32.const -1) + ) + ) + ) + (if + (get_local $var$4) + (block $label$2 + (set_local $var$4 + (i32.sub + (i32.add + (get_local $var$0) + (i32.const 4) + ) + (get_local $var$4) + ) + ) + (loop $label$3 $label$4 + (block $label$5 + (if_else + (i32.lt_s + (get_local $var$0) + (get_local $var$4) + ) + (nop) + (br $label$3) + ) + (block $label$6 + (i32.store8 align=1 + (get_local $var$0) + (get_local $var$1) + ) + (set_local $var$0 + (i32.add + (get_local $var$0) + (i32.const 1) + ) + ) + ) + (br $label$4) + ) + ) + ) + ) + (loop $label$7 $label$8 + (block $label$9 + (if_else + (i32.lt_s + (get_local $var$0) + (get_local $var$6) + ) + (nop) + (br $label$7) + ) + (block $label$10 + (i32.store align=4 + (get_local $var$0) + (get_local $var$5) + ) + (set_local $var$0 + (i32.add + (get_local $var$0) + (i32.const 4) + ) + ) + ) + (br $label$8) + ) + ) + ) + ) + (loop $label$11 $label$12 + (block $label$13 + (if_else + (i32.lt_s + (get_local $var$0) + (get_local $var$3) + ) + (nop) + (br $label$11) + ) + (block $label$14 + (i32.store8 align=1 + (get_local $var$0) + (get_local $var$1) + ) + (set_local $var$0 + (i32.add + (get_local $var$0) + (i32.const 1) + ) + ) + ) + (br $label$12) + ) + ) + (i32.sub + (get_local $var$0) + (get_local $var$2) + ) + ) + ) + (func $_puts (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (block $label$0 + (set_local $var$1 + (i32.load align=4 + (i32.const 52) + ) + ) + (if_else + (i32.gt_s + (i32.load align=4 + (i32.add + (get_local $var$1) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (set_local $var$2 + (call $___lockfile + (get_local $var$1) + ) + ) + (set_local $var$2 + (i32.const 0) + ) + ) + (block $label$1 + (if_else + (i32.lt_s + (call $_fputs + (get_local $var$0) + (get_local $var$1) + ) + (i32.const 0) + ) + (set_local $var$3 + (i32.const 1) + ) + (block $label$2 + (if + (if_else + (i32.ne + (i32.load8_s align=1 + (i32.add + (get_local $var$1) + (i32.const 75) + ) + ) + (i32.const 10) + ) + (block $label$3 + (set_local $var$4 + (i32.add + (get_local $var$1) + (i32.const 20) + ) + ) + (block $label$4 + (set_local $var$5 + (i32.load align=4 + (get_local $var$4) + ) + ) + (i32.lt_u + (i32.shr_u + (get_local $var$5) + (i32.const 0) + ) + (i32.shr_u + (i32.load align=4 + (i32.add + (get_local $var$1) + (i32.const 16) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (i32.const 0) + ) + (block $label$5 + (i32.store align=4 + (get_local $var$4) + (i32.add + (get_local $var$5) + (i32.const 1) + ) + ) + (i32.store8 align=1 + (get_local $var$5) + (i32.const 10) + ) + (set_local $var$3 + (i32.const 0) + ) + (br $label$1) + ) + ) + (set_local $var$3 + (i32.lt_s + (call $___overflow + (get_local $var$1) + (i32.const 10) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (if + (get_local $var$2) + (call $___unlockfile + (get_local $var$1) + ) + ) + (i32.shr_s + (i32.shl + (get_local $var$3) + (i32.const 31) + ) + (i32.const 31) + ) + ) + ) + (func $___stdio_seek (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (block $label$0 + (set_local $var$3 + (i32.load align=4 + (i32.const 8) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (i32.const 32) + ) + ) + (set_local $var$4 + (get_local $var$3) + ) + (set_local $var$5 + (i32.add + (get_local $var$3) + (i32.const 20) + ) + ) + (i32.store align=4 + (get_local $var$4) + (i32.load align=4 + (i32.add + (get_local $var$0) + (i32.const 60) + ) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 8) + ) + (get_local $var$1) + ) + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 12) + ) + (get_local $var$5) + ) + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 16) + ) + (get_local $var$2) + ) + (if_else + (i32.lt_s + (call $___syscall_ret + (call_import $___syscall140 + (i32.const 140) + (get_local $var$4) + ) + ) + (i32.const 0) + ) + (block $label$1 + (i32.store align=4 + (get_local $var$5) + (i32.const -1) + ) + (set_local $var$6 + (i32.const -1) + ) + ) + (set_local $var$6 + (i32.load align=4 + (get_local $var$5) + ) + ) + ) + (i32.store align=4 + (i32.const 8) + (get_local $var$3) + ) + (get_local $var$6) + ) + ) + (func $___towrite (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (block $label$0 + (set_local $var$1 + (i32.add + (get_local $var$0) + (i32.const 74) + ) + ) + (set_local $var$2 + (i32.load8_s align=1 + (get_local $var$1) + ) + ) + (i32.store8 align=1 + (get_local $var$1) + (i32.or + (i32.add + (get_local $var$2) + (i32.const 255) + ) + (get_local $var$2) + ) + ) + (set_local $var$2 + (i32.load align=4 + (get_local $var$0) + ) + ) + (if_else + (i32.eq + (i32.and + (get_local $var$2) + (i32.const 8) + ) + (i32.const 0) + ) + (block $label$1 + (i32.store align=4 + (i32.add + (get_local $var$0) + (i32.const 8) + ) + (i32.const 0) + ) + (i32.store align=4 + (i32.add + (get_local $var$0) + (i32.const 4) + ) + (i32.const 0) + ) + (set_local $var$1 + (i32.load align=4 + (i32.add + (get_local $var$0) + (i32.const 44) + ) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$0) + (i32.const 28) + ) + (get_local $var$1) + ) + (i32.store align=4 + (i32.add + (get_local $var$0) + (i32.const 20) + ) + (get_local $var$1) + ) + (i32.store align=4 + (i32.add + (get_local $var$0) + (i32.const 16) + ) + (i32.add + (get_local $var$1) + (i32.load align=4 + (i32.add + (get_local $var$0) + (i32.const 48) + ) + ) + ) + ) + (set_local $var$3 + (i32.const 0) + ) + ) + (block $label$2 + (i32.store align=4 + (get_local $var$0) + (i32.or + (get_local $var$2) + (i32.const 32) + ) + ) + (set_local $var$3 + (i32.const -1) + ) + ) + ) + (get_local $var$3) + ) + ) + (func $_fwrite (type $7) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (result i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (block $label$0 + (set_local $var$4 + (i32.mul + (get_local $var$2) + (get_local $var$1) + ) + ) + (if_else + (i32.gt_s + (i32.load align=4 + (i32.add + (get_local $var$3) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (block $label$1 + (set_local $var$5 + (i32.eq + (call $___lockfile + (get_local $var$3) + ) + (i32.const 0) + ) + ) + (set_local $var$6 + (call $___fwritex + (get_local $var$0) + (get_local $var$4) + (get_local $var$3) + ) + ) + (if_else + (get_local $var$5) + (set_local $var$7 + (get_local $var$6) + ) + (block $label$2 + (call $___unlockfile + (get_local $var$3) + ) + (set_local $var$7 + (get_local $var$6) + ) + ) + ) + ) + (set_local $var$7 + (call $___fwritex + (get_local $var$0) + (get_local $var$4) + (get_local $var$3) + ) + ) + ) + (if_else + (i32.eq + (get_local $var$7) + (get_local $var$4) + ) + (set_local $var$8 + (get_local $var$2) + ) + (set_local $var$8 + (i32.div_u + (i32.shr_u + (get_local $var$7) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$1) + (i32.const 0) + ) + ) + ) + ) + (get_local $var$8) + ) + ) + (func $___stdout_write (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (local $var$3 i32) + (local $var$4 i32) + (block $label$0 + (set_local $var$3 + (i32.load align=4 + (i32.const 8) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (i32.const 80) + ) + ) + (set_local $var$4 + (get_local $var$3) + ) + (i32.store align=4 + (i32.add + (get_local $var$0) + (i32.const 36) + ) + (i32.const 5) + ) + (if + (if_else + (i32.eq + (i32.and + (i32.load align=4 + (get_local $var$0) + ) + (i32.const 64) + ) + (i32.const 0) + ) + (block $label$1 + (i32.store align=4 + (get_local $var$4) + (i32.load align=4 + (i32.add + (get_local $var$0) + (i32.const 60) + ) + ) + ) + (block $label$2 + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 4) + ) + (i32.const 21505) + ) + (block $label$3 + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 8) + ) + (i32.add + (get_local $var$3) + (i32.const 12) + ) + ) + (i32.ne + (call_import $___syscall54 + (i32.const 54) + (get_local $var$4) + ) + (i32.const 0) + ) + ) + ) + ) + (i32.const 0) + ) + (i32.store8 align=1 + (i32.add + (get_local $var$0) + (i32.const 75) + ) + (i32.const -1) + ) + ) + (set_local $var$4 + (call $___stdio_write + (get_local $var$0) + (get_local $var$1) + (get_local $var$2) + ) + ) + (i32.store align=4 + (i32.const 8) + (get_local $var$3) + ) + (get_local $var$4) + ) + ) + (func $copyTempDouble (type $2) (param $var$0 i32) + (block $label$0 + (i32.store8 align=1 + (i32.load align=4 + (i32.const 24) + ) + (i32.load8_s align=1 + (get_local $var$0) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 1) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 1) + ) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 2) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 2) + ) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 3) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 3) + ) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 4) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 4) + ) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 5) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 5) + ) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 6) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 6) + ) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 7) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 7) + ) + ) + ) + ) + ) + (func $___stdio_close (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (local $var$2 i32) + (block $label$0 + (set_local $var$1 + (i32.load align=4 + (i32.const 8) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (i32.const 16) + ) + ) + (set_local $var$2 + (get_local $var$1) + ) + (i32.store align=4 + (get_local $var$2) + (i32.load align=4 + (i32.add + (get_local $var$0) + (i32.const 60) + ) + ) + ) + (set_local $var$0 + (call $___syscall_ret + (call_import $___syscall6 + (i32.const 6) + (get_local $var$2) + ) + ) + ) + (i32.store align=4 + (i32.const 8) + (get_local $var$1) + ) + (get_local $var$0) + ) + ) + (func $copyTempFloat (type $2) (param $var$0 i32) + (block $label$0 + (i32.store8 align=1 + (i32.load align=4 + (i32.const 24) + ) + (i32.load8_s align=1 + (get_local $var$0) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 1) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 1) + ) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 2) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 2) + ) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 3) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 3) + ) + ) + ) + ) + ) + (func $___syscall_ret (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (block $label$0 + (if_else + (i32.gt_u + (i32.shr_u + (get_local $var$0) + (i32.const 0) + ) + (i32.const -4096) + ) + (block $label$1 + (i32.store align=4 + (call $___errno_location) + (i32.sub + (i32.const 0) + (get_local $var$0) + ) + ) + (set_local $var$1 + (i32.const -1) + ) + ) + (set_local $var$1 + (get_local $var$0) + ) + ) + (get_local $var$1) + ) + ) + (func $dynCall_iiii (type $7) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (result i32) + (call_indirect $0 + (i32.add + (i32.and + (get_local $var$0) + (i32.const 7) + ) + (i32.const 2) + ) + (get_local $var$1) + (get_local $var$2) + (get_local $var$3) + ) + ) + (func $stackAlloc (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (block $label$0 + (set_local $var$1 + (i32.load align=4 + (i32.const 8) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (get_local $var$0) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.and + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (get_local $var$1) + ) + ) + (func $___errno_location (type $3) (result i32) + (local $var$0 i32) + (block $label$0 + (if_else + (i32.eq + (i32.load align=4 + (i32.const 8) + ) + (i32.const 0) + ) + (set_local $var$0 + (i32.const 60) + ) + (set_local $var$0 + (i32.load align=4 + (i32.add + (call_import $_pthread_self) + (i32.const 60) + ) + ) + ) + ) + (get_local $var$0) + ) + ) + (func $setThrew (type $6) (param $var$0 i32) (param $var$1 i32) + (if + (i32.eq + (i32.load align=4 + (i32.const 40) + ) + (i32.const 0) + ) + (block $label$0 + (i32.store align=4 + (i32.const 40) + (get_local $var$0) + ) + (i32.store align=4 + (i32.const 48) + (get_local $var$1) + ) + ) + ) + ) + (func $_fputs (type $4) (param $var$0 i32) (param $var$1 i32) (result i32) + (i32.add + (call $_fwrite + (get_local $var$0) + (call $_strlen + (get_local $var$0) + ) + (i32.const 1) + (get_local $var$1) + ) + (i32.const -1) + ) + ) + (func $dynCall_ii (type $4) (param $var$0 i32) (param $var$1 i32) (result i32) + (call_indirect $1 + (i32.add + (i32.and + (get_local $var$0) + (i32.const 1) + ) + (i32.const 0) + ) + (get_local $var$1) + ) + ) + (func $_cleanup_418 (type $2) (param $var$0 i32) + (block $label$0 + (if + (i32.eq + (i32.load align=4 + (i32.add + (get_local $var$0) + (i32.const 68) + ) + ) + (i32.const 0) + ) + (call $___unlockfile + (get_local $var$0) + ) + ) + (br $label$0) + ) + ) + (func $establishStackSpace (type $6) (param $var$0 i32) (param $var$1 i32) + (block $label$0 + (i32.store align=4 + (i32.const 8) + (get_local $var$0) + ) + (i32.store align=4 + (i32.const 16) + (get_local $var$1) + ) + ) + ) + (func $dynCall_vi (type $6) (param $var$0 i32) (param $var$1 i32) + (call_indirect $2 + (i32.add + (i32.and + (get_local $var$0) + (i32.const 7) + ) + (i32.const 10) + ) + (get_local $var$1) + ) + ) + (func $b1 (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (block $label$0 + (call_import $abort + (i32.const 1) + ) + (i32.const 0) + ) + ) + (func $stackRestore (type $2) (param $var$0 i32) + (i32.store align=4 + (i32.const 8) + (get_local $var$0) + ) + ) + (func $setTempRet0 (type $2) (param $var$0 i32) + (i32.store align=4 + (i32.const 160) + (get_local $var$0) + ) + ) + (func $b0 (type $1) (param $var$0 i32) (result i32) + (block $label$0 + (call_import $abort + (i32.const 0) + ) + (i32.const 0) + ) + ) + (func $___unlockfile (type $2) (param $var$0 i32) + (block $label$0 + (br $label$0) + ) + ) + (func $___lockfile (type $1) (param $var$0 i32) (result i32) + (i32.const 0) + ) + (func $getTempRet0 (type $3) (result i32) + (i32.load align=4 + (i32.const 160) + ) + ) + (func $_main (type $3) (result i32) + (block $label$0 + (call $_puts + (i32.const 672) + ) + (i32.const 0) + ) + ) + (func $stackSave (type $3) (result i32) + (i32.load align=4 + (i32.const 8) + ) + ) + (func $b2 (type $2) (param $var$0 i32) + (call_import $abort + (i32.const 2) + ) + ) +) + diff --git a/src/binaryen/test/emcc_hello_world.asm.js b/src/binaryen/test/emcc_hello_world.asm.js new file mode 100644 index 0000000000..cd188303e9 --- /dev/null +++ b/src/binaryen/test/emcc_hello_world.asm.js @@ -0,0 +1,7101 @@ +Module["asm"] = (function(global, env, buffer) { + 'almost asm'; + + + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + + + var STACKTOP=env.STACKTOP|0; + var STACK_MAX=env.STACK_MAX|0; + var tempDoublePtr=env.tempDoublePtr|0; + var ABORT=env.ABORT|0; + var cttz_i8=env.cttz_i8|0; + + var __THREW__ = 0; + var threwValue = 0; + var setjmpId = 0; + var undef = 0; + var nan = global.NaN, inf = global.Infinity; + var tempInt = 0, tempBigInt = 0, tempBigIntP = 0, tempBigIntS = 0, tempBigIntR = 0.0, tempBigIntI = 0, tempBigIntD = 0, tempValue = 0, tempDouble = 0.0; + + var tempRet0 = 0; + var tempRet1 = 0; + var tempRet2 = 0; + var tempRet3 = 0; + var tempRet4 = 0; + var tempRet5 = 0; + var tempRet6 = 0; + var tempRet7 = 0; + var tempRet8 = 0; + var tempRet9 = 0; + var Math_floor=global.Math.floor; + var Math_abs=global.Math.abs; + var Math_sqrt=global.Math.sqrt; + var Math_pow=global.Math.pow; + var Math_cos=global.Math.cos; + var Math_sin=global.Math.sin; + var Math_tan=global.Math.tan; + var Math_acos=global.Math.acos; + var Math_asin=global.Math.asin; + var Math_atan=global.Math.atan; + var Math_atan2=global.Math.atan2; + var Math_exp=global.Math.exp; + var Math_log=global.Math.log; + var Math_ceil=global.Math.ceil; + var Math_imul=global.Math.imul; + var Math_min=global.Math.min; + var Math_clz32=global.Math.clz32; + var abort=env.abort; + var assert=env.assert; + var nullFunc_ii=env.nullFunc_ii; + var nullFunc_iiii=env.nullFunc_iiii; + var nullFunc_vi=env.nullFunc_vi; + var invoke_ii=env.invoke_ii; + var invoke_iiii=env.invoke_iiii; + var invoke_vi=env.invoke_vi; + var _pthread_cleanup_pop=env._pthread_cleanup_pop; + var ___lock=env.___lock; + var _emscripten_set_main_loop=env._emscripten_set_main_loop; + var _pthread_self=env._pthread_self; + var _abort=env._abort; + var _emscripten_set_main_loop_timing=env._emscripten_set_main_loop_timing; + var ___syscall6=env.___syscall6; + var _sbrk=env._sbrk; + var _time=env._time; + var ___setErrNo=env.___setErrNo; + var _emscripten_memcpy_big=env._emscripten_memcpy_big; + var ___syscall54=env.___syscall54; + var ___unlock=env.___unlock; + var ___syscall140=env.___syscall140; + var _pthread_cleanup_push=env._pthread_cleanup_push; + var _sysconf=env._sysconf; + var ___syscall146=env.___syscall146; + var _llvm_cttz_i32=env._llvm_cttz_i32; + var tempFloat = 0.0; + +// EMSCRIPTEN_START_FUNCS +function stackAlloc(size) { + size = size|0; + var ret = 0; + ret = STACKTOP; + STACKTOP = (STACKTOP + size)|0; + STACKTOP = (STACKTOP + 15)&-16; +if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + + return ret|0; +} +function stackSave() { + return STACKTOP|0; +} +function stackRestore(top) { + top = top|0; + STACKTOP = top; +} +function establishStackSpace(stackBase, stackMax) { + stackBase = stackBase|0; + stackMax = stackMax|0; + STACKTOP = stackBase; + STACK_MAX = stackMax; +} + +function setThrew(threw, value) { + threw = threw|0; + value = value|0; + if ((__THREW__|0) == 0) { + __THREW__ = threw; + threwValue = value; + } +} +function copyTempFloat(ptr) { + ptr = ptr|0; + HEAP8[tempDoublePtr>>0] = HEAP8[ptr>>0]; + HEAP8[tempDoublePtr+1>>0] = HEAP8[ptr+1>>0]; + HEAP8[tempDoublePtr+2>>0] = HEAP8[ptr+2>>0]; + HEAP8[tempDoublePtr+3>>0] = HEAP8[ptr+3>>0]; +} +function copyTempDouble(ptr) { + ptr = ptr|0; + HEAP8[tempDoublePtr>>0] = HEAP8[ptr>>0]; + HEAP8[tempDoublePtr+1>>0] = HEAP8[ptr+1>>0]; + HEAP8[tempDoublePtr+2>>0] = HEAP8[ptr+2>>0]; + HEAP8[tempDoublePtr+3>>0] = HEAP8[ptr+3>>0]; + HEAP8[tempDoublePtr+4>>0] = HEAP8[ptr+4>>0]; + HEAP8[tempDoublePtr+5>>0] = HEAP8[ptr+5>>0]; + HEAP8[tempDoublePtr+6>>0] = HEAP8[ptr+6>>0]; + HEAP8[tempDoublePtr+7>>0] = HEAP8[ptr+7>>0]; +} + +function setTempRet0(value) { + value = value|0; + tempRet0 = value; +} +function getTempRet0() { + return tempRet0|0; +} + +function _main() { + var $retval = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $retval = 0; + (_printf(672,$vararg_buffer)|0); + STACKTOP = sp;return 0; +} +function _frexp($x,$e) { + $x = +$x; + $e = $e|0; + var $0 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0.0, $call = 0.0, $conv = 0, $mul = 0.0, $retval$0 = 0.0, $storemerge = 0, $sub = 0, $sub8 = 0, $tobool1 = 0, $x$addr$0 = 0.0, label = 0, sp = 0; + sp = STACKTOP; + HEAPF64[tempDoublePtr>>3] = $x;$0 = HEAP32[tempDoublePtr>>2]|0; + $1 = HEAP32[tempDoublePtr+4>>2]|0; + $2 = (_bitshift64Lshr(($0|0),($1|0),52)|0); + $3 = tempRet0; + $conv = $2 & 2047; + switch ($conv|0) { + case 0: { + $tobool1 = $x != 0.0; + if ($tobool1) { + $mul = $x * 1.8446744073709552E+19; + $call = (+_frexp($mul,$e)); + $4 = HEAP32[$e>>2]|0; + $sub = (($4) + -64)|0; + $storemerge = $sub;$x$addr$0 = $call; + } else { + $storemerge = 0;$x$addr$0 = $x; + } + HEAP32[$e>>2] = $storemerge; + $retval$0 = $x$addr$0; + break; + } + case 2047: { + $retval$0 = $x; + break; + } + default: { + $sub8 = (($conv) + -1022)|0; + HEAP32[$e>>2] = $sub8; + $5 = $1 & -2146435073; + $6 = $5 | 1071644672; + HEAP32[tempDoublePtr>>2] = $0;HEAP32[tempDoublePtr+4>>2] = $6;$7 = +HEAPF64[tempDoublePtr>>3]; + $retval$0 = $7; + } + } + return (+$retval$0); +} +function _frexpl($x,$e) { + $x = +$x; + $e = $e|0; + var $call = 0.0, label = 0, sp = 0; + sp = STACKTOP; + $call = (+_frexp($x,$e)); + return (+$call); +} +function _strerror($e) { + $e = $e|0; + var $0 = 0, $1 = 0, $arrayidx = 0, $cmp = 0, $conv = 0, $dec = 0, $i$012 = 0, $i$012$lcssa = 0, $i$111 = 0, $inc = 0, $incdec$ptr = 0, $incdec$ptr$lcssa = 0, $s$0$lcssa = 0, $s$010 = 0, $s$1 = 0, $tobool = 0, $tobool5 = 0, $tobool5$9 = 0, $tobool8 = 0, label = 0; + var sp = 0; + sp = STACKTOP; + $i$012 = 0; + while(1) { + $arrayidx = (687 + ($i$012)|0); + $0 = HEAP8[$arrayidx>>0]|0; + $conv = $0&255; + $cmp = ($conv|0)==($e|0); + if ($cmp) { + $i$012$lcssa = $i$012; + label = 2; + break; + } + $inc = (($i$012) + 1)|0; + $tobool = ($inc|0)==(87); + if ($tobool) { + $i$111 = 87;$s$010 = 775; + label = 5; + break; + } else { + $i$012 = $inc; + } + } + if ((label|0) == 2) { + $tobool5$9 = ($i$012$lcssa|0)==(0); + if ($tobool5$9) { + $s$0$lcssa = 775; + } else { + $i$111 = $i$012$lcssa;$s$010 = 775; + label = 5; + } + } + if ((label|0) == 5) { + while(1) { + label = 0; + $s$1 = $s$010; + while(1) { + $1 = HEAP8[$s$1>>0]|0; + $tobool8 = ($1<<24>>24)==(0); + $incdec$ptr = ((($s$1)) + 1|0); + if ($tobool8) { + $incdec$ptr$lcssa = $incdec$ptr; + break; + } else { + $s$1 = $incdec$ptr; + } + } + $dec = (($i$111) + -1)|0; + $tobool5 = ($dec|0)==(0); + if ($tobool5) { + $s$0$lcssa = $incdec$ptr$lcssa; + break; + } else { + $i$111 = $dec;$s$010 = $incdec$ptr$lcssa; + label = 5; + } + } + } + return ($s$0$lcssa|0); +} +function ___errno_location() { + var $0 = 0, $1 = 0, $call$i = 0, $errno_ptr = 0, $retval$0 = 0, $tobool = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = HEAP32[4]|0; + $tobool = ($0|0)==(0|0); + if ($tobool) { + $retval$0 = 60; + } else { + $call$i = (_pthread_self()|0); + $errno_ptr = ((($call$i)) + 60|0); + $1 = HEAP32[$errno_ptr>>2]|0; + $retval$0 = $1; + } + return ($retval$0|0); +} +function ___stdio_close($f) { + $f = $f|0; + var $0 = 0, $call = 0, $call1 = 0, $fd = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $fd = ((($f)) + 60|0); + $0 = HEAP32[$fd>>2]|0; + HEAP32[$vararg_buffer>>2] = $0; + $call = (___syscall6(6,($vararg_buffer|0))|0); + $call1 = (___syscall_ret($call)|0); + STACKTOP = sp;return ($call1|0); +} +function ___stdout_write($f,$buf,$len) { + $f = $f|0; + $buf = $buf|0; + $len = $len|0; + var $0 = 0, $1 = 0, $and = 0, $call = 0, $call3 = 0, $fd = 0, $lbf = 0, $tio = 0, $tobool = 0, $tobool2 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, $write = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $tio = sp + 12|0; + $write = ((($f)) + 36|0); + HEAP32[$write>>2] = 4; + $0 = HEAP32[$f>>2]|0; + $and = $0 & 64; + $tobool = ($and|0)==(0); + if ($tobool) { + $fd = ((($f)) + 60|0); + $1 = HEAP32[$fd>>2]|0; + HEAP32[$vararg_buffer>>2] = $1; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = 21505; + $vararg_ptr2 = ((($vararg_buffer)) + 8|0); + HEAP32[$vararg_ptr2>>2] = $tio; + $call = (___syscall54(54,($vararg_buffer|0))|0); + $tobool2 = ($call|0)==(0); + if (!($tobool2)) { + $lbf = ((($f)) + 75|0); + HEAP8[$lbf>>0] = -1; + } + } + $call3 = (___stdio_write($f,$buf,$len)|0); + STACKTOP = sp;return ($call3|0); +} +function ___stdio_seek($f,$off,$whence) { + $f = $f|0; + $off = $off|0; + $whence = $whence|0; + var $$pre = 0, $0 = 0, $1 = 0, $call = 0, $call1 = 0, $cmp = 0, $fd = 0, $ret = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, $vararg_ptr3 = 0, $vararg_ptr4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $ret = sp + 20|0; + $fd = ((($f)) + 60|0); + $0 = HEAP32[$fd>>2]|0; + HEAP32[$vararg_buffer>>2] = $0; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = 0; + $vararg_ptr2 = ((($vararg_buffer)) + 8|0); + HEAP32[$vararg_ptr2>>2] = $off; + $vararg_ptr3 = ((($vararg_buffer)) + 12|0); + HEAP32[$vararg_ptr3>>2] = $ret; + $vararg_ptr4 = ((($vararg_buffer)) + 16|0); + HEAP32[$vararg_ptr4>>2] = $whence; + $call = (___syscall140(140,($vararg_buffer|0))|0); + $call1 = (___syscall_ret($call)|0); + $cmp = ($call1|0)<(0); + if ($cmp) { + HEAP32[$ret>>2] = -1; + $1 = -1; + } else { + $$pre = HEAP32[$ret>>2]|0; + $1 = $$pre; + } + STACKTOP = sp;return ($1|0); +} +function _fflush($f) { + $f = $f|0; + var $0 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $call = 0, $call1 = 0, $call1$18 = 0, $call16 = 0, $call22 = 0, $call7 = 0, $cmp = 0, $cmp14 = 0, $cmp20 = 0, $cond10 = 0, $cond19 = 0, $f$addr$0 = 0, $f$addr$0$19 = 0, $f$addr$022 = 0; + var $lock = 0, $lock13 = 0, $next = 0, $or = 0, $phitmp = 0, $r$0$lcssa = 0, $r$021 = 0, $r$1 = 0, $retval$0 = 0, $tobool = 0, $tobool11 = 0, $tobool11$20 = 0, $tobool24 = 0, $tobool5 = 0, $wbase = 0, $wpos = 0, label = 0, sp = 0; + sp = STACKTOP; + $tobool = ($f|0)==(0|0); + do { + if ($tobool) { + $1 = HEAP32[3]|0; + $tobool5 = ($1|0)==(0|0); + if ($tobool5) { + $cond10 = 0; + } else { + $2 = HEAP32[3]|0; + $call7 = (_fflush($2)|0); + $cond10 = $call7; + } + ___lock(((44)|0)); + $f$addr$0$19 = HEAP32[(40)>>2]|0; + $tobool11$20 = ($f$addr$0$19|0)==(0|0); + if ($tobool11$20) { + $r$0$lcssa = $cond10; + } else { + $f$addr$022 = $f$addr$0$19;$r$021 = $cond10; + while(1) { + $lock13 = ((($f$addr$022)) + 76|0); + $3 = HEAP32[$lock13>>2]|0; + $cmp14 = ($3|0)>(-1); + if ($cmp14) { + $call16 = (___lockfile($f$addr$022)|0); + $cond19 = $call16; + } else { + $cond19 = 0; + } + $wpos = ((($f$addr$022)) + 20|0); + $4 = HEAP32[$wpos>>2]|0; + $wbase = ((($f$addr$022)) + 28|0); + $5 = HEAP32[$wbase>>2]|0; + $cmp20 = ($4>>>0)>($5>>>0); + if ($cmp20) { + $call22 = (___fflush_unlocked($f$addr$022)|0); + $or = $call22 | $r$021; + $r$1 = $or; + } else { + $r$1 = $r$021; + } + $tobool24 = ($cond19|0)==(0); + if (!($tobool24)) { + ___unlockfile($f$addr$022); + } + $next = ((($f$addr$022)) + 56|0); + $f$addr$0 = HEAP32[$next>>2]|0; + $tobool11 = ($f$addr$0|0)==(0|0); + if ($tobool11) { + $r$0$lcssa = $r$1; + break; + } else { + $f$addr$022 = $f$addr$0;$r$021 = $r$1; + } + } + } + ___unlock(((44)|0)); + $retval$0 = $r$0$lcssa; + } else { + $lock = ((($f)) + 76|0); + $0 = HEAP32[$lock>>2]|0; + $cmp = ($0|0)>(-1); + if (!($cmp)) { + $call1$18 = (___fflush_unlocked($f)|0); + $retval$0 = $call1$18; + break; + } + $call = (___lockfile($f)|0); + $phitmp = ($call|0)==(0); + $call1 = (___fflush_unlocked($f)|0); + if ($phitmp) { + $retval$0 = $call1; + } else { + ___unlockfile($f); + $retval$0 = $call1; + } + } + } while(0); + return ($retval$0|0); +} +function _printf($fmt,$varargs) { + $fmt = $fmt|0; + $varargs = $varargs|0; + var $0 = 0, $ap = 0, $call = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $ap = sp; + HEAP32[$ap>>2] = $varargs; + $0 = HEAP32[2]|0; + $call = (_vfprintf($0,$fmt,$ap)|0); + STACKTOP = sp;return ($call|0); +} +function ___lockfile($f) { + $f = $f|0; + var label = 0, sp = 0; + sp = STACKTOP; + return 0; +} +function ___unlockfile($f) { + $f = $f|0; + var label = 0, sp = 0; + sp = STACKTOP; + return; +} +function ___stdio_write($f,$buf,$len) { + $f = $f|0; + $buf = $buf|0; + $len = $len|0; + var $$pre = 0, $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $add = 0, $add$ptr = 0, $add$ptr41 = 0, $add$ptr46 = 0; + var $buf31 = 0, $buf_size = 0, $call = 0, $call10 = 0, $call7 = 0, $call9 = 0, $cmp = 0, $cmp17 = 0, $cmp22 = 0, $cmp29 = 0, $cmp38 = 0, $cnt$0 = 0, $cnt$1 = 0, $dec = 0, $fd8 = 0, $incdec$ptr = 0, $iov$0 = 0, $iov$0$lcssa57 = 0, $iov$1 = 0, $iov_base2 = 0; + var $iov_len = 0, $iov_len24 = 0, $iov_len28 = 0, $iov_len3 = 0, $iov_len50 = 0, $iov_len50$phi$trans$insert = 0, $iovcnt$0 = 0, $iovcnt$0$lcssa58 = 0, $iovcnt$1 = 0, $iovs = 0, $or = 0, $rem$0 = 0, $retval$0 = 0, $sub = 0, $sub$ptr$sub = 0, $sub26 = 0, $sub36 = 0, $sub51 = 0, $tobool = 0, $vararg_buffer = 0; + var $vararg_buffer3 = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, $vararg_ptr6 = 0, $vararg_ptr7 = 0, $wbase = 0, $wend = 0, $wend19 = 0, $wpos = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer3 = sp + 16|0; + $vararg_buffer = sp; + $iovs = sp + 32|0; + $wbase = ((($f)) + 28|0); + $0 = HEAP32[$wbase>>2]|0; + HEAP32[$iovs>>2] = $0; + $iov_len = ((($iovs)) + 4|0); + $wpos = ((($f)) + 20|0); + $1 = HEAP32[$wpos>>2]|0; + $sub$ptr$sub = (($1) - ($0))|0; + HEAP32[$iov_len>>2] = $sub$ptr$sub; + $iov_base2 = ((($iovs)) + 8|0); + HEAP32[$iov_base2>>2] = $buf; + $iov_len3 = ((($iovs)) + 12|0); + HEAP32[$iov_len3>>2] = $len; + $add = (($sub$ptr$sub) + ($len))|0; + $fd8 = ((($f)) + 60|0); + $buf31 = ((($f)) + 44|0); + $iov$0 = $iovs;$iovcnt$0 = 2;$rem$0 = $add; + while(1) { + $2 = HEAP32[4]|0; + $tobool = ($2|0)==(0|0); + if ($tobool) { + $4 = HEAP32[$fd8>>2]|0; + HEAP32[$vararg_buffer3>>2] = $4; + $vararg_ptr6 = ((($vararg_buffer3)) + 4|0); + HEAP32[$vararg_ptr6>>2] = $iov$0; + $vararg_ptr7 = ((($vararg_buffer3)) + 8|0); + HEAP32[$vararg_ptr7>>2] = $iovcnt$0; + $call9 = (___syscall146(146,($vararg_buffer3|0))|0); + $call10 = (___syscall_ret($call9)|0); + $cnt$0 = $call10; + } else { + _pthread_cleanup_push((5|0),($f|0)); + $3 = HEAP32[$fd8>>2]|0; + HEAP32[$vararg_buffer>>2] = $3; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $iov$0; + $vararg_ptr2 = ((($vararg_buffer)) + 8|0); + HEAP32[$vararg_ptr2>>2] = $iovcnt$0; + $call = (___syscall146(146,($vararg_buffer|0))|0); + $call7 = (___syscall_ret($call)|0); + _pthread_cleanup_pop(0); + $cnt$0 = $call7; + } + $cmp = ($rem$0|0)==($cnt$0|0); + if ($cmp) { + label = 6; + break; + } + $cmp17 = ($cnt$0|0)<(0); + if ($cmp17) { + $iov$0$lcssa57 = $iov$0;$iovcnt$0$lcssa58 = $iovcnt$0; + label = 8; + break; + } + $sub26 = (($rem$0) - ($cnt$0))|0; + $iov_len28 = ((($iov$0)) + 4|0); + $10 = HEAP32[$iov_len28>>2]|0; + $cmp29 = ($cnt$0>>>0)>($10>>>0); + if ($cmp29) { + $11 = HEAP32[$buf31>>2]|0; + HEAP32[$wbase>>2] = $11; + HEAP32[$wpos>>2] = $11; + $sub36 = (($cnt$0) - ($10))|0; + $incdec$ptr = ((($iov$0)) + 8|0); + $dec = (($iovcnt$0) + -1)|0; + $iov_len50$phi$trans$insert = ((($iov$0)) + 12|0); + $$pre = HEAP32[$iov_len50$phi$trans$insert>>2]|0; + $14 = $$pre;$cnt$1 = $sub36;$iov$1 = $incdec$ptr;$iovcnt$1 = $dec; + } else { + $cmp38 = ($iovcnt$0|0)==(2); + if ($cmp38) { + $12 = HEAP32[$wbase>>2]|0; + $add$ptr41 = (($12) + ($cnt$0)|0); + HEAP32[$wbase>>2] = $add$ptr41; + $14 = $10;$cnt$1 = $cnt$0;$iov$1 = $iov$0;$iovcnt$1 = 2; + } else { + $14 = $10;$cnt$1 = $cnt$0;$iov$1 = $iov$0;$iovcnt$1 = $iovcnt$0; + } + } + $13 = HEAP32[$iov$1>>2]|0; + $add$ptr46 = (($13) + ($cnt$1)|0); + HEAP32[$iov$1>>2] = $add$ptr46; + $iov_len50 = ((($iov$1)) + 4|0); + $sub51 = (($14) - ($cnt$1))|0; + HEAP32[$iov_len50>>2] = $sub51; + $iov$0 = $iov$1;$iovcnt$0 = $iovcnt$1;$rem$0 = $sub26; + } + if ((label|0) == 6) { + $5 = HEAP32[$buf31>>2]|0; + $buf_size = ((($f)) + 48|0); + $6 = HEAP32[$buf_size>>2]|0; + $add$ptr = (($5) + ($6)|0); + $wend = ((($f)) + 16|0); + HEAP32[$wend>>2] = $add$ptr; + $7 = $5; + HEAP32[$wbase>>2] = $7; + HEAP32[$wpos>>2] = $7; + $retval$0 = $len; + } + else if ((label|0) == 8) { + $wend19 = ((($f)) + 16|0); + HEAP32[$wend19>>2] = 0; + HEAP32[$wbase>>2] = 0; + HEAP32[$wpos>>2] = 0; + $8 = HEAP32[$f>>2]|0; + $or = $8 | 32; + HEAP32[$f>>2] = $or; + $cmp22 = ($iovcnt$0$lcssa58|0)==(2); + if ($cmp22) { + $retval$0 = 0; + } else { + $iov_len24 = ((($iov$0$lcssa57)) + 4|0); + $9 = HEAP32[$iov_len24>>2]|0; + $sub = (($len) - ($9))|0; + $retval$0 = $sub; + } + } + STACKTOP = sp;return ($retval$0|0); +} +function _vfprintf($f,$fmt,$ap) { + $f = $f|0; + $fmt = $fmt|0; + $ap = $ap|0; + var $$call21 = 0, $0 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $add$ptr = 0, $and = 0, $and11 = 0, $and36 = 0, $ap2 = 0, $buf = 0, $buf_size = 0, $call = 0, $call21 = 0, $call21$30 = 0, $call6 = 0; + var $cmp = 0, $cmp5 = 0, $cmp7 = 0, $cond = 0, $internal_buf = 0, $lock = 0, $mode = 0, $nl_arg = 0, $nl_type = 0, $or = 0, $ret$1 = 0, $ret$1$ = 0, $retval$0 = 0, $tobool = 0, $tobool22 = 0, $tobool26 = 0, $tobool37 = 0, $tobool41 = 0, $vacopy_currentptr = 0, $wbase = 0; + var $wend = 0, $wpos = 0, $write = 0, dest = 0, label = 0, sp = 0, stop = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 224|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $ap2 = sp + 120|0; + $nl_type = sp + 80|0; + $nl_arg = sp; + $internal_buf = sp + 136|0; + dest=$nl_type; stop=dest+40|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $vacopy_currentptr = HEAP32[$ap>>2]|0; + HEAP32[$ap2>>2] = $vacopy_currentptr; + $call = (_printf_core(0,$fmt,$ap2,$nl_arg,$nl_type)|0); + $cmp = ($call|0)<(0); + if ($cmp) { + $retval$0 = -1; + } else { + $lock = ((($f)) + 76|0); + $0 = HEAP32[$lock>>2]|0; + $cmp5 = ($0|0)>(-1); + if ($cmp5) { + $call6 = (___lockfile($f)|0); + $cond = $call6; + } else { + $cond = 0; + } + $1 = HEAP32[$f>>2]|0; + $and = $1 & 32; + $mode = ((($f)) + 74|0); + $2 = HEAP8[$mode>>0]|0; + $cmp7 = ($2<<24>>24)<(1); + if ($cmp7) { + $and11 = $1 & -33; + HEAP32[$f>>2] = $and11; + } + $buf_size = ((($f)) + 48|0); + $3 = HEAP32[$buf_size>>2]|0; + $tobool = ($3|0)==(0); + if ($tobool) { + $buf = ((($f)) + 44|0); + $4 = HEAP32[$buf>>2]|0; + HEAP32[$buf>>2] = $internal_buf; + $wbase = ((($f)) + 28|0); + HEAP32[$wbase>>2] = $internal_buf; + $wpos = ((($f)) + 20|0); + HEAP32[$wpos>>2] = $internal_buf; + HEAP32[$buf_size>>2] = 80; + $add$ptr = ((($internal_buf)) + 80|0); + $wend = ((($f)) + 16|0); + HEAP32[$wend>>2] = $add$ptr; + $call21 = (_printf_core($f,$fmt,$ap2,$nl_arg,$nl_type)|0); + $tobool22 = ($4|0)==(0|0); + if ($tobool22) { + $ret$1 = $call21; + } else { + $write = ((($f)) + 36|0); + $5 = HEAP32[$write>>2]|0; + (FUNCTION_TABLE_iiii[$5 & 7]($f,0,0)|0); + $6 = HEAP32[$wpos>>2]|0; + $tobool26 = ($6|0)==(0|0); + $$call21 = $tobool26 ? -1 : $call21; + HEAP32[$buf>>2] = $4; + HEAP32[$buf_size>>2] = 0; + HEAP32[$wend>>2] = 0; + HEAP32[$wbase>>2] = 0; + HEAP32[$wpos>>2] = 0; + $ret$1 = $$call21; + } + } else { + $call21$30 = (_printf_core($f,$fmt,$ap2,$nl_arg,$nl_type)|0); + $ret$1 = $call21$30; + } + $7 = HEAP32[$f>>2]|0; + $and36 = $7 & 32; + $tobool37 = ($and36|0)==(0); + $ret$1$ = $tobool37 ? $ret$1 : -1; + $or = $7 | $and; + HEAP32[$f>>2] = $or; + $tobool41 = ($cond|0)==(0); + if (!($tobool41)) { + ___unlockfile($f); + } + $retval$0 = $ret$1$; + } + STACKTOP = sp;return ($retval$0|0); +} +function ___fwritex($s,$l,$f) { + $s = $s|0; + $l = $l|0; + $f = $f|0; + var $$pre = 0, $$pre31 = 0, $0 = 0, $1 = 0, $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $add = 0, $add$ptr = 0, $add$ptr26 = 0, $arrayidx = 0, $call = 0, $call16 = 0, $call4 = 0; + var $cmp = 0, $cmp11 = 0, $cmp17 = 0, $cmp6 = 0, $i$0 = 0, $i$0$lcssa36 = 0, $i$1 = 0, $l$addr$0 = 0, $lbf = 0, $retval$0 = 0, $s$addr$0 = 0, $sub = 0, $sub$ptr$sub = 0, $sub21 = 0, $tobool = 0, $tobool1 = 0, $tobool9 = 0, $wend = 0, $wpos = 0, $write = 0; + var $write15 = 0, label = 0, sp = 0; + sp = STACKTOP; + $wend = ((($f)) + 16|0); + $0 = HEAP32[$wend>>2]|0; + $tobool = ($0|0)==(0|0); + if ($tobool) { + $call = (___towrite($f)|0); + $tobool1 = ($call|0)==(0); + if ($tobool1) { + $$pre = HEAP32[$wend>>2]|0; + $3 = $$pre; + label = 5; + } else { + $retval$0 = 0; + } + } else { + $1 = $0; + $3 = $1; + label = 5; + } + L5: do { + if ((label|0) == 5) { + $wpos = ((($f)) + 20|0); + $2 = HEAP32[$wpos>>2]|0; + $sub$ptr$sub = (($3) - ($2))|0; + $cmp = ($sub$ptr$sub>>>0)<($l>>>0); + $4 = $2; + if ($cmp) { + $write = ((($f)) + 36|0); + $5 = HEAP32[$write>>2]|0; + $call4 = (FUNCTION_TABLE_iiii[$5 & 7]($f,$s,$l)|0); + $retval$0 = $call4; + break; + } + $lbf = ((($f)) + 75|0); + $6 = HEAP8[$lbf>>0]|0; + $cmp6 = ($6<<24>>24)>(-1); + L10: do { + if ($cmp6) { + $i$0 = $l; + while(1) { + $tobool9 = ($i$0|0)==(0); + if ($tobool9) { + $9 = $4;$i$1 = 0;$l$addr$0 = $l;$s$addr$0 = $s; + break L10; + } + $sub = (($i$0) + -1)|0; + $arrayidx = (($s) + ($sub)|0); + $7 = HEAP8[$arrayidx>>0]|0; + $cmp11 = ($7<<24>>24)==(10); + if ($cmp11) { + $i$0$lcssa36 = $i$0; + break; + } else { + $i$0 = $sub; + } + } + $write15 = ((($f)) + 36|0); + $8 = HEAP32[$write15>>2]|0; + $call16 = (FUNCTION_TABLE_iiii[$8 & 7]($f,$s,$i$0$lcssa36)|0); + $cmp17 = ($call16>>>0)<($i$0$lcssa36>>>0); + if ($cmp17) { + $retval$0 = $i$0$lcssa36; + break L5; + } + $add$ptr = (($s) + ($i$0$lcssa36)|0); + $sub21 = (($l) - ($i$0$lcssa36))|0; + $$pre31 = HEAP32[$wpos>>2]|0; + $9 = $$pre31;$i$1 = $i$0$lcssa36;$l$addr$0 = $sub21;$s$addr$0 = $add$ptr; + } else { + $9 = $4;$i$1 = 0;$l$addr$0 = $l;$s$addr$0 = $s; + } + } while(0); + _memcpy(($9|0),($s$addr$0|0),($l$addr$0|0))|0; + $10 = HEAP32[$wpos>>2]|0; + $add$ptr26 = (($10) + ($l$addr$0)|0); + HEAP32[$wpos>>2] = $add$ptr26; + $add = (($i$1) + ($l$addr$0))|0; + $retval$0 = $add; + } + } while(0); + return ($retval$0|0); +} +function ___towrite($f) { + $f = $f|0; + var $0 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $add$ptr = 0, $and = 0, $buf = 0, $buf_size = 0, $conv = 0, $conv3 = 0, $mode = 0, $or = 0, $or5 = 0, $rend = 0, $retval$0 = 0, $rpos = 0, $sub = 0, $tobool = 0, $wbase = 0; + var $wend = 0, $wpos = 0, label = 0, sp = 0; + sp = STACKTOP; + $mode = ((($f)) + 74|0); + $0 = HEAP8[$mode>>0]|0; + $conv = $0 << 24 >> 24; + $sub = (($conv) + 255)|0; + $or = $sub | $conv; + $conv3 = $or&255; + HEAP8[$mode>>0] = $conv3; + $1 = HEAP32[$f>>2]|0; + $and = $1 & 8; + $tobool = ($and|0)==(0); + if ($tobool) { + $rend = ((($f)) + 8|0); + HEAP32[$rend>>2] = 0; + $rpos = ((($f)) + 4|0); + HEAP32[$rpos>>2] = 0; + $buf = ((($f)) + 44|0); + $2 = HEAP32[$buf>>2]|0; + $wbase = ((($f)) + 28|0); + HEAP32[$wbase>>2] = $2; + $wpos = ((($f)) + 20|0); + HEAP32[$wpos>>2] = $2; + $3 = $2; + $buf_size = ((($f)) + 48|0); + $4 = HEAP32[$buf_size>>2]|0; + $add$ptr = (($3) + ($4)|0); + $wend = ((($f)) + 16|0); + HEAP32[$wend>>2] = $add$ptr; + $retval$0 = 0; + } else { + $or5 = $1 | 32; + HEAP32[$f>>2] = $or5; + $retval$0 = -1; + } + return ($retval$0|0); +} +function _wcrtomb($s,$wc,$st) { + $s = $s|0; + $wc = $wc|0; + $st = $st|0; + var $0 = 0, $and = 0, $and19 = 0, $and23 = 0, $and36 = 0, $and41 = 0, $and45 = 0, $call = 0, $cmp = 0, $cmp11 = 0, $cmp2 = 0, $cmp28 = 0, $cmp9 = 0, $conv = 0, $conv16 = 0, $conv21 = 0, $conv25 = 0, $conv33 = 0, $conv38 = 0, $conv43 = 0; + var $conv47 = 0, $conv5 = 0, $conv7 = 0, $incdec$ptr = 0, $incdec$ptr17 = 0, $incdec$ptr22 = 0, $incdec$ptr34 = 0, $incdec$ptr39 = 0, $incdec$ptr44 = 0, $or = 0, $or$cond = 0, $or15 = 0, $or20 = 0, $or24 = 0, $or32 = 0, $or37 = 0, $or42 = 0, $or46 = 0, $or6 = 0, $retval$0 = 0; + var $shr$28 = 0, $shr14$26 = 0, $shr18$27 = 0, $shr31$23 = 0, $shr35$24 = 0, $shr40$25 = 0, $sub27 = 0, $tobool = 0, label = 0, sp = 0; + sp = STACKTOP; + $tobool = ($s|0)==(0|0); + do { + if ($tobool) { + $retval$0 = 1; + } else { + $cmp = ($wc>>>0)<(128); + if ($cmp) { + $conv = $wc&255; + HEAP8[$s>>0] = $conv; + $retval$0 = 1; + break; + } + $cmp2 = ($wc>>>0)<(2048); + if ($cmp2) { + $shr$28 = $wc >>> 6; + $or = $shr$28 | 192; + $conv5 = $or&255; + $incdec$ptr = ((($s)) + 1|0); + HEAP8[$s>>0] = $conv5; + $and = $wc & 63; + $or6 = $and | 128; + $conv7 = $or6&255; + HEAP8[$incdec$ptr>>0] = $conv7; + $retval$0 = 2; + break; + } + $cmp9 = ($wc>>>0)<(55296); + $0 = $wc & -8192; + $cmp11 = ($0|0)==(57344); + $or$cond = $cmp9 | $cmp11; + if ($or$cond) { + $shr14$26 = $wc >>> 12; + $or15 = $shr14$26 | 224; + $conv16 = $or15&255; + $incdec$ptr17 = ((($s)) + 1|0); + HEAP8[$s>>0] = $conv16; + $shr18$27 = $wc >>> 6; + $and19 = $shr18$27 & 63; + $or20 = $and19 | 128; + $conv21 = $or20&255; + $incdec$ptr22 = ((($s)) + 2|0); + HEAP8[$incdec$ptr17>>0] = $conv21; + $and23 = $wc & 63; + $or24 = $and23 | 128; + $conv25 = $or24&255; + HEAP8[$incdec$ptr22>>0] = $conv25; + $retval$0 = 3; + break; + } + $sub27 = (($wc) + -65536)|0; + $cmp28 = ($sub27>>>0)<(1048576); + if ($cmp28) { + $shr31$23 = $wc >>> 18; + $or32 = $shr31$23 | 240; + $conv33 = $or32&255; + $incdec$ptr34 = ((($s)) + 1|0); + HEAP8[$s>>0] = $conv33; + $shr35$24 = $wc >>> 12; + $and36 = $shr35$24 & 63; + $or37 = $and36 | 128; + $conv38 = $or37&255; + $incdec$ptr39 = ((($s)) + 2|0); + HEAP8[$incdec$ptr34>>0] = $conv38; + $shr40$25 = $wc >>> 6; + $and41 = $shr40$25 & 63; + $or42 = $and41 | 128; + $conv43 = $or42&255; + $incdec$ptr44 = ((($s)) + 3|0); + HEAP8[$incdec$ptr39>>0] = $conv43; + $and45 = $wc & 63; + $or46 = $and45 | 128; + $conv47 = $or46&255; + HEAP8[$incdec$ptr44>>0] = $conv47; + $retval$0 = 4; + break; + } else { + $call = (___errno_location()|0); + HEAP32[$call>>2] = 84; + $retval$0 = -1; + break; + } + } + } while(0); + return ($retval$0|0); +} +function _wctomb($s,$wc) { + $s = $s|0; + $wc = $wc|0; + var $call = 0, $retval$0 = 0, $tobool = 0, label = 0, sp = 0; + sp = STACKTOP; + $tobool = ($s|0)==(0|0); + if ($tobool) { + $retval$0 = 0; + } else { + $call = (_wcrtomb($s,$wc,0)|0); + $retval$0 = $call; + } + return ($retval$0|0); +} +function _memchr($src,$c,$n) { + $src = $src|0; + $c = $c|0; + $n = $n|0; + var $0 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $and = 0, $and$39 = 0, $and15 = 0, $and16 = 0, $cmp = 0, $cmp11 = 0, $cmp11$32 = 0, $cmp28 = 0, $cmp8 = 0, $cond = 0, $conv1 = 0, $dec = 0; + var $dec34 = 0, $incdec$ptr = 0, $incdec$ptr21 = 0, $incdec$ptr33 = 0, $lnot = 0, $mul = 0, $n$addr$0$lcssa = 0, $n$addr$0$lcssa61 = 0, $n$addr$043 = 0, $n$addr$1$lcssa = 0, $n$addr$133 = 0, $n$addr$133$lcssa = 0, $n$addr$227 = 0, $n$addr$3 = 0, $neg = 0, $or$cond = 0, $or$cond$42 = 0, $s$0$lcssa = 0, $s$0$lcssa60 = 0, $s$044 = 0; + var $s$128 = 0, $s$2 = 0, $sub = 0, $sub22 = 0, $tobool = 0, $tobool$40 = 0, $tobool2 = 0, $tobool2$41 = 0, $tobool2$lcssa = 0, $tobool25 = 0, $tobool25$26 = 0, $tobool36 = 0, $w$0$lcssa = 0, $w$034 = 0, $w$034$lcssa = 0, $xor = 0, label = 0, sp = 0; + sp = STACKTOP; + $conv1 = $c & 255; + $0 = $src; + $and$39 = $0 & 3; + $tobool$40 = ($and$39|0)!=(0); + $tobool2$41 = ($n|0)!=(0); + $or$cond$42 = $tobool2$41 & $tobool$40; + L1: do { + if ($or$cond$42) { + $1 = $c&255; + $n$addr$043 = $n;$s$044 = $src; + while(1) { + $2 = HEAP8[$s$044>>0]|0; + $cmp = ($2<<24>>24)==($1<<24>>24); + if ($cmp) { + $n$addr$0$lcssa61 = $n$addr$043;$s$0$lcssa60 = $s$044; + label = 6; + break L1; + } + $incdec$ptr = ((($s$044)) + 1|0); + $dec = (($n$addr$043) + -1)|0; + $3 = $incdec$ptr; + $and = $3 & 3; + $tobool = ($and|0)!=(0); + $tobool2 = ($dec|0)!=(0); + $or$cond = $tobool2 & $tobool; + if ($or$cond) { + $n$addr$043 = $dec;$s$044 = $incdec$ptr; + } else { + $n$addr$0$lcssa = $dec;$s$0$lcssa = $incdec$ptr;$tobool2$lcssa = $tobool2; + label = 5; + break; + } + } + } else { + $n$addr$0$lcssa = $n;$s$0$lcssa = $src;$tobool2$lcssa = $tobool2$41; + label = 5; + } + } while(0); + if ((label|0) == 5) { + if ($tobool2$lcssa) { + $n$addr$0$lcssa61 = $n$addr$0$lcssa;$s$0$lcssa60 = $s$0$lcssa; + label = 6; + } else { + $n$addr$3 = 0;$s$2 = $s$0$lcssa; + } + } + L8: do { + if ((label|0) == 6) { + $4 = HEAP8[$s$0$lcssa60>>0]|0; + $5 = $c&255; + $cmp8 = ($4<<24>>24)==($5<<24>>24); + if ($cmp8) { + $n$addr$3 = $n$addr$0$lcssa61;$s$2 = $s$0$lcssa60; + } else { + $mul = Math_imul($conv1, 16843009)|0; + $cmp11$32 = ($n$addr$0$lcssa61>>>0)>(3); + L11: do { + if ($cmp11$32) { + $n$addr$133 = $n$addr$0$lcssa61;$w$034 = $s$0$lcssa60; + while(1) { + $6 = HEAP32[$w$034>>2]|0; + $xor = $6 ^ $mul; + $sub = (($xor) + -16843009)|0; + $neg = $xor & -2139062144; + $and15 = $neg ^ -2139062144; + $and16 = $and15 & $sub; + $lnot = ($and16|0)==(0); + if (!($lnot)) { + $n$addr$133$lcssa = $n$addr$133;$w$034$lcssa = $w$034; + break; + } + $incdec$ptr21 = ((($w$034)) + 4|0); + $sub22 = (($n$addr$133) + -4)|0; + $cmp11 = ($sub22>>>0)>(3); + if ($cmp11) { + $n$addr$133 = $sub22;$w$034 = $incdec$ptr21; + } else { + $n$addr$1$lcssa = $sub22;$w$0$lcssa = $incdec$ptr21; + label = 11; + break L11; + } + } + $n$addr$227 = $n$addr$133$lcssa;$s$128 = $w$034$lcssa; + } else { + $n$addr$1$lcssa = $n$addr$0$lcssa61;$w$0$lcssa = $s$0$lcssa60; + label = 11; + } + } while(0); + if ((label|0) == 11) { + $tobool25$26 = ($n$addr$1$lcssa|0)==(0); + if ($tobool25$26) { + $n$addr$3 = 0;$s$2 = $w$0$lcssa; + break; + } else { + $n$addr$227 = $n$addr$1$lcssa;$s$128 = $w$0$lcssa; + } + } + while(1) { + $7 = HEAP8[$s$128>>0]|0; + $cmp28 = ($7<<24>>24)==($5<<24>>24); + if ($cmp28) { + $n$addr$3 = $n$addr$227;$s$2 = $s$128; + break L8; + } + $incdec$ptr33 = ((($s$128)) + 1|0); + $dec34 = (($n$addr$227) + -1)|0; + $tobool25 = ($dec34|0)==(0); + if ($tobool25) { + $n$addr$3 = 0;$s$2 = $incdec$ptr33; + break; + } else { + $n$addr$227 = $dec34;$s$128 = $incdec$ptr33; + } + } + } + } + } while(0); + $tobool36 = ($n$addr$3|0)!=(0); + $cond = $tobool36 ? $s$2 : 0; + return ($cond|0); +} +function ___syscall_ret($r) { + $r = $r|0; + var $call = 0, $cmp = 0, $retval$0 = 0, $sub = 0, label = 0, sp = 0; + sp = STACKTOP; + $cmp = ($r>>>0)>(4294963200); + if ($cmp) { + $sub = (0 - ($r))|0; + $call = (___errno_location()|0); + HEAP32[$call>>2] = $sub; + $retval$0 = -1; + } else { + $retval$0 = $r; + } + return ($retval$0|0); +} +function ___fflush_unlocked($f) { + $f = $f|0; + var $0 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $cmp = 0, $cmp4 = 0, $rend = 0, $retval$0 = 0, $rpos = 0, $seek = 0, $sub$ptr$lhs$cast = 0, $sub$ptr$rhs$cast = 0, $sub$ptr$sub = 0, $tobool = 0, $wbase = 0, $wend = 0, $wpos = 0; + var $write = 0, label = 0, sp = 0; + sp = STACKTOP; + $wpos = ((($f)) + 20|0); + $0 = HEAP32[$wpos>>2]|0; + $wbase = ((($f)) + 28|0); + $1 = HEAP32[$wbase>>2]|0; + $cmp = ($0>>>0)>($1>>>0); + if ($cmp) { + $write = ((($f)) + 36|0); + $2 = HEAP32[$write>>2]|0; + (FUNCTION_TABLE_iiii[$2 & 7]($f,0,0)|0); + $3 = HEAP32[$wpos>>2]|0; + $tobool = ($3|0)==(0|0); + if ($tobool) { + $retval$0 = -1; + } else { + label = 3; + } + } else { + label = 3; + } + if ((label|0) == 3) { + $rpos = ((($f)) + 4|0); + $4 = HEAP32[$rpos>>2]|0; + $rend = ((($f)) + 8|0); + $5 = HEAP32[$rend>>2]|0; + $cmp4 = ($4>>>0)<($5>>>0); + if ($cmp4) { + $seek = ((($f)) + 40|0); + $6 = HEAP32[$seek>>2]|0; + $sub$ptr$lhs$cast = $4; + $sub$ptr$rhs$cast = $5; + $sub$ptr$sub = (($sub$ptr$lhs$cast) - ($sub$ptr$rhs$cast))|0; + (FUNCTION_TABLE_iiii[$6 & 7]($f,$sub$ptr$sub,1)|0); + } + $wend = ((($f)) + 16|0); + HEAP32[$wend>>2] = 0; + HEAP32[$wbase>>2] = 0; + HEAP32[$wpos>>2] = 0; + HEAP32[$rend>>2] = 0; + HEAP32[$rpos>>2] = 0; + $retval$0 = 0; + } + return ($retval$0|0); +} +function _cleanup($p) { + $p = $p|0; + var $0 = 0, $lockcount = 0, $tobool = 0, label = 0, sp = 0; + sp = STACKTOP; + $lockcount = ((($p)) + 68|0); + $0 = HEAP32[$lockcount>>2]|0; + $tobool = ($0|0)==(0); + if ($tobool) { + ___unlockfile($p); + } + return; +} +function _printf_core($f,$fmt,$ap,$nl_arg,$nl_type) { + $f = $f|0; + $fmt = $fmt|0; + $ap = $ap|0; + $nl_arg = $nl_arg|0; + $nl_type = $nl_type|0; + var $$ = 0, $$$i = 0, $$396$i = 0.0, $$404$i = 0.0, $$l10n$0 = 0, $$lcssa = 0, $$p$i = 0, $$p$inc468$i = 0, $$pr$i = 0, $$pr477$i = 0, $$pre = 0, $$pre$i = 0, $$pre357 = 0, $$pre564$i = 0, $$pre566$i = 0, $$pre567$i = 0, $$sub514$i = 0, $$sub562$i = 0, $0 = 0, $1 = 0; + var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; + var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; + var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0; + var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0; + var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0.0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0; + var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0; + var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0; + var $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0; + var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0; + var $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0; + var $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0; + var $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0; + var $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0; + var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $a$0 = 0, $a$1 = 0, $a$1$lcssa$i = 0, $a$1549$i = 0, $a$2 = 0, $a$2$ph$i = 0, $a$3$lcssa$i = 0, $a$3539$i = 0, $a$5$lcssa$i = 0, $a$5521$i = 0, $a$6$i = 0, $a$8$i = 0, $a$9$ph$i = 0; + var $add = 0, $add$i = 0, $add$i$203 = 0, $add$i$239 = 0, $add$i$lcssa = 0, $add$ptr = 0, $add$ptr139 = 0, $add$ptr205 = 0, $add$ptr213$i = 0, $add$ptr257 = 0, $add$ptr311$i = 0, $add$ptr311$z$4$i = 0, $add$ptr340 = 0, $add$ptr354$i = 0, $add$ptr358$i = 0, $add$ptr359 = 0, $add$ptr373$i = 0, $add$ptr43 = 0, $add$ptr43$arrayidx31 = 0, $add$ptr442$i = 0; + var $add$ptr442$z$3$i = 0, $add$ptr473 = 0, $add$ptr65$i = 0, $add$ptr671$i = 0, $add$ptr742$i = 0, $add$ptr88 = 0, $add113$i = 0, $add150$i = 0, $add154$i = 0, $add163$i = 0, $add165$i = 0, $add269 = 0, $add269$p$0 = 0, $add273$i = 0, $add275$i = 0, $add284$i = 0, $add313$i = 0, $add322 = 0, $add355$i = 0, $add395 = 0; + var $add410$i = 0.0, $add412 = 0, $add414$i = 0, $add441 = 0, $add477$neg$i = 0, $add561$i = 0, $add608$i = 0, $add612$i = 0, $add620$i = 0, $add653$i = 0, $add67$i = 0, $add737$i = 0, $add810$i = 0, $add87$i = 0.0, $add90$i = 0.0, $and = 0, $and$i = 0, $and$i$216 = 0, $and$i$231 = 0, $and$i$238 = 0; + var $and$i$244 = 0, $and$i$406$i = 0, $and$i$412$i = 0, $and$i$418$i = 0, $and$i$424$i = 0, $and$i$430$i = 0, $and$i$436$i = 0, $and$i$442$i = 0, $and$i$448$i = 0, $and$i$454$i = 0, $and$i$460$i = 0, $and$i$466$i = 0, $and$i$472$i = 0, $and$i$i = 0, $and12$i = 0, $and134$i = 0, $and210 = 0, $and214 = 0, $and216 = 0, $and219 = 0; + var $and249 = 0, $and254 = 0, $and263 = 0, $and282$i = 0, $and289 = 0, $and294 = 0, $and309 = 0, $and309$fl$4 = 0, $and36$i = 0, $and379$i = 0, $and483$i = 0, $and610$pre$phi$iZ2D = 0, $and62$i = 0, $arg = 0, $arglist_current = 0, $arglist_current2 = 0, $arglist_next = 0, $arglist_next3 = 0, $argpos$0 = 0, $arraydecay208$add$ptr213$i = 0; + var $arrayidx$i = 0, $arrayidx$i$236 = 0, $arrayidx114 = 0, $arrayidx117$i = 0, $arrayidx119 = 0, $arrayidx124 = 0, $arrayidx132 = 0, $arrayidx16 = 0, $arrayidx173 = 0, $arrayidx192 = 0, $arrayidx251$i = 0, $arrayidx31 = 0, $arrayidx35 = 0, $arrayidx370 = 0, $arrayidx453$i = 0, $arrayidx469 = 0, $arrayidx481 = 0, $arrayidx489$i = 0, $arrayidx68 = 0, $arrayidx73 = 0; + var $arrayidx81 = 0, $big$i = 0, $buf = 0, $buf$i = 0, $call = 0, $call344 = 0, $call345 = 0, $call356 = 0, $call384 = 0, $call411 = 0, $call55$i = 0.0, $carry$0544$i = 0, $carry262$0535$i = 0, $cmp = 0, $cmp1 = 0, $cmp103$i = 0, $cmp105 = 0, $cmp111 = 0, $cmp116 = 0, $cmp126 = 0; + var $cmp127$i = 0, $cmp13 = 0, $cmp147$i = 0, $cmp165 = 0, $cmp176 = 0, $cmp18 = 0, $cmp181 = 0, $cmp184 = 0, $cmp188$i = 0, $cmp196$i = 0, $cmp205$i = 0, $cmp211 = 0, $cmp225$547$i = 0, $cmp225$i = 0, $cmp228$i = 0, $cmp235$543$i = 0, $cmp235$i = 0, $cmp240 = 0, $cmp249$i = 0, $cmp259$537$i = 0; + var $cmp259$i = 0, $cmp265$i = 0, $cmp270 = 0, $cmp277$533$i = 0, $cmp277$i = 0, $cmp299$i = 0, $cmp306 = 0, $cmp308$i = 0, $cmp315$i = 0, $cmp323 = 0, $cmp324$529$i = 0, $cmp324$i = 0, $cmp333$i = 0, $cmp338$i = 0, $cmp350$i = 0, $cmp363$525$i = 0, $cmp37 = 0, $cmp374$i = 0, $cmp377 = 0, $cmp377$314 = 0; + var $cmp38$i = 0, $cmp385 = 0, $cmp385$i = 0, $cmp390 = 0, $cmp390$i = 0, $cmp397 = 0, $cmp403$i = 0, $cmp404 = 0, $cmp404$324 = 0, $cmp411$i = 0, $cmp413 = 0, $cmp416$519$i = 0, $cmp416$i = 0, $cmp420$i = 0, $cmp421 = 0, $cmp433$515$i = 0, $cmp433$i = 0, $cmp434 = 0, $cmp442 = 0, $cmp443$i = 0; + var $cmp450$i = 0, $cmp450$lcssa$i = 0, $cmp466 = 0, $cmp470$i = 0, $cmp473$i = 0, $cmp478 = 0, $cmp478$295 = 0, $cmp48$i = 0, $cmp495$511$i = 0, $cmp495$i = 0, $cmp50 = 0, $cmp50$308 = 0, $cmp505$i = 0, $cmp515$i = 0, $cmp528$i = 0, $cmp563$i = 0, $cmp577$i = 0, $cmp59$i = 0, $cmp614$i = 0, $cmp617$i = 0; + var $cmp623$i = 0, $cmp636$506$i = 0, $cmp636$i = 0, $cmp65 = 0, $cmp660$i = 0, $cmp665$i = 0, $cmp673$i = 0, $cmp678$491$i = 0, $cmp678$i = 0, $cmp686$i = 0, $cmp707$486$i = 0, $cmp707$i = 0, $cmp710$487$i = 0, $cmp710$i = 0, $cmp722$483$i = 0, $cmp722$i = 0, $cmp727$i = 0, $cmp745$i = 0, $cmp748$499$i = 0, $cmp748$i = 0; + var $cmp75 = 0, $cmp760$i = 0, $cmp765$i = 0, $cmp770$495$i = 0, $cmp770$i = 0, $cmp777$i = 0, $cmp790$i = 0, $cmp818$i = 0, $cmp82$i = 0, $cmp94$i = 0, $cmp97 = 0, $cnt$0 = 0, $cnt$1 = 0, $cnt$1$lcssa = 0, $cond$i = 0, $cond100$i = 0, $cond233$i = 0, $cond245 = 0, $cond271$i = 0, $cond304$i = 0; + var $cond354 = 0, $cond426 = 0, $cond43$i = 0, $cond53$i = 0, $cond629$i = 0, $cond732$i = 0, $cond800$i = 0, $conv$4$i = 0, $conv$4$i$197 = 0, $conv$4$i$211 = 0, $conv$i = 0, $conv$i$205 = 0, $conv1$i = 0, $conv111$i = 0, $conv114$i = 0, $conv116$i = 0, $conv118$393$i = 0, $conv120 = 0, $conv121$i = 0, $conv123$i = 0.0; + var $conv134 = 0, $conv163 = 0, $conv174 = 0, $conv174$lcssa = 0, $conv207 = 0, $conv216$i = 0, $conv218$i = 0.0, $conv229 = 0, $conv232 = 0, $conv242$i$lcssa = 0, $conv32 = 0, $conv48 = 0, $conv48$307 = 0, $conv48311 = 0, $conv58 = 0, $conv644$i = 0, $conv646$i = 0, $conv69 = 0, $conv83 = 0, $d$0$542$i = 0; + var $d$0$i = 0, $d$0545$i = 0, $d$1534$i = 0, $d$2$lcssa$i = 0, $d$2520$i = 0, $d$4$i = 0, $d$5494$i = 0, $d$6488$i = 0, $d$7500$i = 0, $dec$i = 0, $dec476$i = 0, $dec481$i = 0, $dec78$i = 0, $div274$i = 0, $div356$i = 0, $div378$i = 0, $div384$i = 0, $e$0531$i = 0, $e$1$i = 0, $e$2517$i = 0; + var $e$4$i = 0, $e$5$ph$i = 0, $e2$i = 0, $ebuf0$i = 0, $estr$0$i = 0, $estr$1$lcssa$i = 0, $estr$1507$i = 0, $estr$2$i = 0, $exitcond$i = 0, $expanded = 0, $expanded10 = 0, $expanded11 = 0, $expanded13 = 0, $expanded14 = 0, $expanded15 = 0, $expanded4 = 0, $expanded6 = 0, $expanded7 = 0, $expanded8 = 0, $fl$0284 = 0; + var $fl$0310 = 0, $fl$1 = 0, $fl$1$and219 = 0, $fl$3 = 0, $fl$4 = 0, $fl$6 = 0, $i$0$lcssa = 0, $i$0$lcssa368 = 0, $i$0316 = 0, $i$0530$i = 0, $i$07$i = 0, $i$07$i$201 = 0, $i$1$lcssa$i = 0, $i$1325 = 0, $i$1526$i = 0, $i$2299 = 0, $i$2299$lcssa = 0, $i$2516$i = 0, $i$3296 = 0, $i$3512$i = 0; + var $i137 = 0, $i86 = 0, $idxprom$i = 0, $inc = 0, $inc$i = 0, $inc425$i = 0, $inc438$i = 0, $inc468$i = 0, $inc488 = 0, $inc500$i = 0, $incdec$ptr = 0, $incdec$ptr$i = 0, $incdec$ptr$i$204 = 0, $incdec$ptr$i$212 = 0, $incdec$ptr$i$212$lcssa = 0, $incdec$ptr$i$225 = 0, $incdec$ptr$i$lcssa = 0, $incdec$ptr106$i = 0, $incdec$ptr112$i = 0, $incdec$ptr115$i = 0; + var $incdec$ptr122$i = 0, $incdec$ptr137$i = 0, $incdec$ptr169 = 0, $incdec$ptr169$lcssa = 0, $incdec$ptr169269 = 0, $incdec$ptr169271 = 0, $incdec$ptr169271$lcssa414 = 0, $incdec$ptr169272 = 0, $incdec$ptr169274 = 0, $incdec$ptr169275 = 0, $incdec$ptr169276$lcssa = 0, $incdec$ptr169276301 = 0, $incdec$ptr217$i = 0, $incdec$ptr217$i$lcssa = 0, $incdec$ptr23 = 0, $incdec$ptr246$i = 0, $incdec$ptr288$i = 0, $incdec$ptr292$570$i = 0, $incdec$ptr292$a$3$571$i = 0, $incdec$ptr292$a$3$i = 0; + var $incdec$ptr292$a$3573$i = 0, $incdec$ptr292$i = 0, $incdec$ptr296$i = 0, $incdec$ptr383 = 0, $incdec$ptr410 = 0, $incdec$ptr419$i = 0, $incdec$ptr423$i = 0, $incdec$ptr62 = 0, $incdec$ptr639$i = 0, $incdec$ptr645$i = 0, $incdec$ptr647$i = 0, $incdec$ptr681$i = 0, $incdec$ptr689$i = 0, $incdec$ptr698$i = 0, $incdec$ptr698$i$lcssa = 0, $incdec$ptr725$i = 0, $incdec$ptr734$i = 0, $incdec$ptr773$i = 0, $incdec$ptr776$i = 0, $incdec$ptr808$i = 0; + var $isdigit = 0, $isdigit$6$i = 0, $isdigit$6$i$199 = 0, $isdigit$i = 0, $isdigit$i$207 = 0, $isdigit188 = 0, $isdigit190 = 0, $isdigittmp = 0, $isdigittmp$ = 0, $isdigittmp$5$i = 0, $isdigittmp$5$i$198 = 0, $isdigittmp$i = 0, $isdigittmp$i$206 = 0, $isdigittmp187 = 0, $isdigittmp189 = 0, $isdigittmp8$i = 0, $isdigittmp8$i$200 = 0, $j$0$524$i = 0, $j$0$i = 0, $j$0527$i = 0; + var $j$1513$i = 0, $j$2$i = 0, $l$0 = 0, $l$0$i = 0, $l$1$i = 0, $l$1315 = 0, $l$2 = 0, $l10n$0 = 0, $l10n$0$lcssa = 0, $l10n$0$phi = 0, $l10n$1 = 0, $l10n$2 = 0, $l10n$3 = 0, $land$ext$neg$i = 0, $lnot$ext = 0, $lnot$i = 0, $lnot455$i = 0, $lnot483 = 0, $lor$ext$i = 0, $mb = 0; + var $mul$i = 0, $mul$i$202 = 0, $mul$i$240 = 0.0, $mul125$i = 0.0, $mul202$i = 0.0, $mul220$i = 0.0, $mul286$i = 0, $mul286$i$lcssa = 0, $mul322$i = 0, $mul328$i = 0, $mul335$i = 0, $mul349$i = 0, $mul367$i = 0, $mul406$i = 0.0, $mul407$i = 0.0, $mul431$i = 0, $mul437$i = 0, $mul499$i = 0, $mul513$i = 0, $mul80$i = 0.0; + var $mul80$i$lcssa = 0.0, $notlhs$i = 0, $notrhs$i = 0, $or = 0, $or$cond = 0, $or$cond$i = 0, $or$cond1$not$i = 0, $or$cond192 = 0, $or$cond193 = 0, $or$cond195 = 0, $or$cond2$i = 0, $or$cond384 = 0, $or$cond395$i = 0, $or$cond397$i = 0, $or$cond401$i = 0, $or$i = 0, $or$i$241 = 0, $or100 = 0, $or120$i = 0, $or246 = 0; + var $or504$i = 0, $or613$i = 0, $p$0 = 0, $p$1 = 0, $p$2 = 0, $p$2$add322 = 0, $p$3 = 0, $p$4365 = 0, $p$5 = 0, $p$addr$2$$sub514398$i = 0, $p$addr$2$$sub562399$i = 0, $p$addr$2$i = 0, $p$addr$3$i = 0, $p$addr$4$lcssa$i = 0, $p$addr$4489$i = 0, $p$addr$5$lcssa$i = 0, $p$addr$5501$i = 0, $pl$0 = 0, $pl$0$i = 0, $pl$1 = 0; + var $pl$1$i = 0, $pl$2 = 0, $prefix$0 = 0, $prefix$0$add$ptr65$i = 0, $prefix$0$i = 0, $prefix$1 = 0, $prefix$2 = 0, $r$0$a$9$i = 0, $re$1482$i = 0, $rem360$i = 0, $rem370$i = 0, $rem494$510$i = 0, $rem494$i = 0, $retval$0 = 0, $retval$0$i = 0, $round$0481$i = 0.0, $round377$1$i = 0.0, $s$0$i = 0, $s$1$i = 0, $s$1$i$lcssa = 0; + var $s$addr$0$lcssa$i$229 = 0, $s$addr$06$i = 0, $s$addr$06$i$221 = 0, $s35$0$i = 0, $s668$0492$i = 0, $s668$1$i = 0, $s715$0$lcssa$i = 0, $s715$0484$i = 0, $s753$0$i = 0, $s753$1496$i = 0, $s753$2$i = 0, $shl = 0, $shl280$i = 0, $shl60 = 0, $shr = 0, $shr283$i = 0, $shr285$i = 0, $small$0$i = 0.0, $small$1$i = 0.0, $st$0 = 0; + var $st$0$lcssa415 = 0, $storemerge = 0, $storemerge$186282 = 0, $storemerge$186309 = 0, $storemerge$191 = 0, $sub = 0, $sub$i = 0.0, $sub$ptr$div$i = 0, $sub$ptr$div321$i = 0, $sub$ptr$div347$i = 0, $sub$ptr$div430$i = 0, $sub$ptr$div511$i = 0, $sub$ptr$lhs$cast = 0, $sub$ptr$lhs$cast$i = 0, $sub$ptr$lhs$cast160$i = 0, $sub$ptr$lhs$cast305$i = 0, $sub$ptr$lhs$cast317 = 0, $sub$ptr$lhs$cast344$i = 0, $sub$ptr$lhs$cast361 = 0, $sub$ptr$lhs$cast431 = 0; + var $sub$ptr$lhs$cast508$i = 0, $sub$ptr$lhs$cast694$i = 0, $sub$ptr$rhs$cast = 0, $sub$ptr$rhs$cast$i = 0, $sub$ptr$rhs$cast152$i = 0, $sub$ptr$rhs$cast161$i = 0, $sub$ptr$rhs$cast174$i = 0, $sub$ptr$rhs$cast267 = 0, $sub$ptr$rhs$cast306$i = 0, $sub$ptr$rhs$cast318 = 0, $sub$ptr$rhs$cast319$i = 0, $sub$ptr$rhs$cast345$i = 0, $sub$ptr$rhs$cast362 = 0, $sub$ptr$rhs$cast428$i = 0, $sub$ptr$rhs$cast432 = 0, $sub$ptr$rhs$cast634$504$i = 0, $sub$ptr$rhs$cast634$i = 0, $sub$ptr$rhs$cast649$i = 0, $sub$ptr$rhs$cast695$i = 0, $sub$ptr$rhs$cast788$i = 0; + var $sub$ptr$rhs$cast812$i = 0, $sub$ptr$sub = 0, $sub$ptr$sub$i = 0, $sub$ptr$sub145$i = 0, $sub$ptr$sub153$i = 0, $sub$ptr$sub159$i = 0, $sub$ptr$sub162$i = 0, $sub$ptr$sub172$i = 0, $sub$ptr$sub175$i = 0, $sub$ptr$sub268 = 0, $sub$ptr$sub307$i = 0, $sub$ptr$sub319 = 0, $sub$ptr$sub320$i = 0, $sub$ptr$sub346$i = 0, $sub$ptr$sub363 = 0, $sub$ptr$sub429$i = 0, $sub$ptr$sub433 = 0, $sub$ptr$sub433$p$5 = 0, $sub$ptr$sub510$i = 0, $sub$ptr$sub635$505$i = 0; + var $sub$ptr$sub635$i = 0, $sub$ptr$sub650$i = 0, $sub$ptr$sub650$pn$i = 0, $sub$ptr$sub696$i = 0, $sub$ptr$sub789$i = 0, $sub$ptr$sub813$i = 0, $sub101 = 0, $sub124$i = 0.0, $sub135 = 0, $sub146$i = 0, $sub164 = 0, $sub175 = 0, $sub181$i = 0, $sub203$i = 0, $sub219$i = 0.0, $sub256$i = 0, $sub264$i = 0, $sub281$i = 0, $sub336$i = 0, $sub343$i = 0; + var $sub357$i = 0, $sub389 = 0, $sub409$i = 0, $sub478$i = 0, $sub480$i = 0, $sub514$i = 0, $sub54 = 0, $sub562$i = 0, $sub59 = 0, $sub626$le$i = 0, $sub735$i = 0, $sub74$i = 0, $sub806$i = 0, $sub84 = 0, $sub85$i = 0.0, $sub86$i = 0.0, $sub88$i = 0.0, $sub91$i = 0.0, $sub97$i = 0, $sum = 0; + var $t$0 = 0, $t$1 = 0, $t$addr$0$i = 0, $t$addr$1$i = 0, $tobool = 0, $tobool$i = 0, $tobool$i$217 = 0, $tobool$i$232 = 0, $tobool$i$245 = 0, $tobool$i$407$i = 0, $tobool$i$413$i = 0, $tobool$i$419$i = 0, $tobool$i$425$i = 0, $tobool$i$431$i = 0, $tobool$i$437$i = 0, $tobool$i$443$i = 0, $tobool$i$449$i = 0, $tobool$i$455$i = 0, $tobool$i$461$i = 0, $tobool$i$467$i = 0; + var $tobool$i$473$i = 0, $tobool$i$i = 0, $tobool13$i = 0, $tobool135$i = 0, $tobool139$i = 0, $tobool140$i = 0, $tobool141 = 0, $tobool178 = 0, $tobool208 = 0, $tobool217 = 0, $tobool222$i = 0, $tobool244$i = 0, $tobool25 = 0, $tobool255 = 0, $tobool264 = 0, $tobool28 = 0, $tobool290 = 0, $tobool290$569$i = 0, $tobool290$i = 0, $tobool294$i = 0; + var $tobool295 = 0, $tobool314 = 0, $tobool341$i = 0, $tobool349 = 0, $tobool357 = 0, $tobool37$i = 0, $tobool371$i = 0, $tobool380 = 0, $tobool380$i = 0, $tobool400$i = 0, $tobool407 = 0, $tobool459 = 0, $tobool462 = 0, $tobool470 = 0, $tobool484$i = 0, $tobool490$i = 0, $tobool55 = 0, $tobool56$i = 0, $tobool63$i = 0, $tobool76$i = 0; + var $tobool76552$i = 0, $tobool781$i = 0, $tobool79$i = 0, $tobool9$i = 0, $tobool90 = 0, $w$0 = 0, $w$1 = 0, $w$2 = 0, $w$add165$i = 0, $w$add653$i = 0, $wc = 0, $ws$0317 = 0, $ws$1326 = 0, $xor = 0, $xor$i = 0, $xor167$i = 0, $xor186$i = 0, $xor449 = 0, $xor457 = 0, $xor655$i = 0; + var $xor816$i = 0, $y$addr$0$i = 0.0, $y$addr$1$i = 0.0, $y$addr$2$i = 0.0, $y$addr$3$i = 0.0, $y$addr$4$i = 0.0, $z$0$i = 0, $z$0$lcssa = 0, $z$0302 = 0, $z$1 = 0, $z$1$lcssa$i = 0, $z$1548$i = 0, $z$2 = 0, $z$2$i = 0, $z$2$i$lcssa = 0, $z$3$lcssa$i = 0, $z$3538$i = 0, $z$4$i = 0, $z$7$add$ptr742$i = 0, $z$7$i = 0; + var $z$7$i$lcssa = 0, $z$7$ph$i = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 624|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $big$i = sp + 24|0; + $e2$i = sp + 16|0; + $buf$i = sp + 588|0; + $ebuf0$i = sp + 576|0; + $arg = sp; + $buf = sp + 536|0; + $wc = sp + 8|0; + $mb = sp + 528|0; + $tobool25 = ($f|0)!=(0|0); + $add$ptr205 = ((($buf)) + 40|0); + $sub$ptr$lhs$cast317 = $add$ptr205; + $add$ptr340 = ((($buf)) + 39|0); + $arrayidx370 = ((($wc)) + 4|0); + $arrayidx$i$236 = ((($ebuf0$i)) + 12|0); + $incdec$ptr106$i = ((($ebuf0$i)) + 11|0); + $sub$ptr$rhs$cast$i = $buf$i; + $sub$ptr$lhs$cast160$i = $arrayidx$i$236; + $sub$ptr$sub159$i = (($sub$ptr$lhs$cast160$i) - ($sub$ptr$rhs$cast$i))|0; + $sub$ptr$sub145$i = (-2 - ($sub$ptr$rhs$cast$i))|0; + $sub$ptr$sub153$i = (($sub$ptr$lhs$cast160$i) + 2)|0; + $add$ptr213$i = ((($big$i)) + 288|0); + $add$ptr671$i = ((($buf$i)) + 9|0); + $sub$ptr$lhs$cast694$i = $add$ptr671$i; + $incdec$ptr689$i = ((($buf$i)) + 8|0); + $cnt$0 = 0;$incdec$ptr169275 = $fmt;$l$0 = 0;$l10n$0 = 0; + L1: while(1) { + $cmp = ($cnt$0|0)>(-1); + do { + if ($cmp) { + $sub = (2147483647 - ($cnt$0))|0; + $cmp1 = ($l$0|0)>($sub|0); + if ($cmp1) { + $call = (___errno_location()|0); + HEAP32[$call>>2] = 75; + $cnt$1 = -1; + break; + } else { + $add = (($l$0) + ($cnt$0))|0; + $cnt$1 = $add; + break; + } + } else { + $cnt$1 = $cnt$0; + } + } while(0); + $0 = HEAP8[$incdec$ptr169275>>0]|0; + $tobool = ($0<<24>>24)==(0); + if ($tobool) { + $cnt$1$lcssa = $cnt$1;$l10n$0$lcssa = $l10n$0; + label = 242; + break; + } else { + $1 = $0;$incdec$ptr169274 = $incdec$ptr169275; + } + L9: while(1) { + switch ($1<<24>>24) { + case 37: { + $incdec$ptr169276301 = $incdec$ptr169274;$z$0302 = $incdec$ptr169274; + label = 9; + break L9; + break; + } + case 0: { + $incdec$ptr169276$lcssa = $incdec$ptr169274;$z$0$lcssa = $incdec$ptr169274; + break L9; + break; + } + default: { + } + } + $incdec$ptr = ((($incdec$ptr169274)) + 1|0); + $$pre = HEAP8[$incdec$ptr>>0]|0; + $1 = $$pre;$incdec$ptr169274 = $incdec$ptr; + } + L12: do { + if ((label|0) == 9) { + while(1) { + label = 0; + $arrayidx16 = ((($incdec$ptr169276301)) + 1|0); + $2 = HEAP8[$arrayidx16>>0]|0; + $cmp18 = ($2<<24>>24)==(37); + if (!($cmp18)) { + $incdec$ptr169276$lcssa = $incdec$ptr169276301;$z$0$lcssa = $z$0302; + break L12; + } + $incdec$ptr23 = ((($z$0302)) + 1|0); + $add$ptr = ((($incdec$ptr169276301)) + 2|0); + $3 = HEAP8[$add$ptr>>0]|0; + $cmp13 = ($3<<24>>24)==(37); + if ($cmp13) { + $incdec$ptr169276301 = $add$ptr;$z$0302 = $incdec$ptr23; + label = 9; + } else { + $incdec$ptr169276$lcssa = $add$ptr;$z$0$lcssa = $incdec$ptr23; + break; + } + } + } + } while(0); + $sub$ptr$lhs$cast = $z$0$lcssa; + $sub$ptr$rhs$cast = $incdec$ptr169275; + $sub$ptr$sub = (($sub$ptr$lhs$cast) - ($sub$ptr$rhs$cast))|0; + if ($tobool25) { + $4 = HEAP32[$f>>2]|0; + $and$i = $4 & 32; + $tobool$i = ($and$i|0)==(0); + if ($tobool$i) { + (___fwritex($incdec$ptr169275,$sub$ptr$sub,$f)|0); + } + } + $tobool28 = ($z$0$lcssa|0)==($incdec$ptr169275|0); + if (!($tobool28)) { + $l10n$0$phi = $l10n$0;$cnt$0 = $cnt$1;$incdec$ptr169275 = $incdec$ptr169276$lcssa;$l$0 = $sub$ptr$sub;$l10n$0 = $l10n$0$phi; + continue; + } + $arrayidx31 = ((($incdec$ptr169276$lcssa)) + 1|0); + $5 = HEAP8[$arrayidx31>>0]|0; + $conv32 = $5 << 24 >> 24; + $isdigittmp = (($conv32) + -48)|0; + $isdigit = ($isdigittmp>>>0)<(10); + if ($isdigit) { + $arrayidx35 = ((($incdec$ptr169276$lcssa)) + 2|0); + $6 = HEAP8[$arrayidx35>>0]|0; + $cmp37 = ($6<<24>>24)==(36); + $add$ptr43 = ((($incdec$ptr169276$lcssa)) + 3|0); + $add$ptr43$arrayidx31 = $cmp37 ? $add$ptr43 : $arrayidx31; + $$l10n$0 = $cmp37 ? 1 : $l10n$0; + $isdigittmp$ = $cmp37 ? $isdigittmp : -1; + $$pre357 = HEAP8[$add$ptr43$arrayidx31>>0]|0; + $7 = $$pre357;$argpos$0 = $isdigittmp$;$l10n$1 = $$l10n$0;$storemerge = $add$ptr43$arrayidx31; + } else { + $7 = $5;$argpos$0 = -1;$l10n$1 = $l10n$0;$storemerge = $arrayidx31; + } + $conv48$307 = $7 << 24 >> 24; + $8 = $conv48$307 & -32; + $cmp50$308 = ($8|0)==(32); + L25: do { + if ($cmp50$308) { + $9 = $7;$conv48311 = $conv48$307;$fl$0310 = 0;$storemerge$186309 = $storemerge; + while(1) { + $sub54 = (($conv48311) + -32)|0; + $shl = 1 << $sub54; + $and = $shl & 75913; + $tobool55 = ($and|0)==(0); + if ($tobool55) { + $12 = $9;$fl$0284 = $fl$0310;$storemerge$186282 = $storemerge$186309; + break L25; + } + $conv58 = $9 << 24 >> 24; + $sub59 = (($conv58) + -32)|0; + $shl60 = 1 << $sub59; + $or = $shl60 | $fl$0310; + $incdec$ptr62 = ((($storemerge$186309)) + 1|0); + $10 = HEAP8[$incdec$ptr62>>0]|0; + $conv48 = $10 << 24 >> 24; + $11 = $conv48 & -32; + $cmp50 = ($11|0)==(32); + if ($cmp50) { + $9 = $10;$conv48311 = $conv48;$fl$0310 = $or;$storemerge$186309 = $incdec$ptr62; + } else { + $12 = $10;$fl$0284 = $or;$storemerge$186282 = $incdec$ptr62; + break; + } + } + } else { + $12 = $7;$fl$0284 = 0;$storemerge$186282 = $storemerge; + } + } while(0); + $cmp65 = ($12<<24>>24)==(42); + do { + if ($cmp65) { + $arrayidx68 = ((($storemerge$186282)) + 1|0); + $13 = HEAP8[$arrayidx68>>0]|0; + $conv69 = $13 << 24 >> 24; + $isdigittmp189 = (($conv69) + -48)|0; + $isdigit190 = ($isdigittmp189>>>0)<(10); + if ($isdigit190) { + $arrayidx73 = ((($storemerge$186282)) + 2|0); + $14 = HEAP8[$arrayidx73>>0]|0; + $cmp75 = ($14<<24>>24)==(36); + if ($cmp75) { + $arrayidx81 = (($nl_type) + ($isdigittmp189<<2)|0); + HEAP32[$arrayidx81>>2] = 10; + $15 = HEAP8[$arrayidx68>>0]|0; + $conv83 = $15 << 24 >> 24; + $sub84 = (($conv83) + -48)|0; + $i86 = (($nl_arg) + ($sub84<<3)|0); + $16 = $i86; + $17 = $16; + $18 = HEAP32[$17>>2]|0; + $19 = (($16) + 4)|0; + $20 = $19; + $21 = HEAP32[$20>>2]|0; + $add$ptr88 = ((($storemerge$186282)) + 3|0); + $l10n$2 = 1;$storemerge$191 = $add$ptr88;$w$0 = $18; + } else { + label = 24; + } + } else { + label = 24; + } + if ((label|0) == 24) { + label = 0; + $tobool90 = ($l10n$1|0)==(0); + if (!($tobool90)) { + $retval$0 = -1; + break L1; + } + if (!($tobool25)) { + $fl$1 = $fl$0284;$incdec$ptr169269 = $arrayidx68;$l10n$3 = 0;$w$1 = 0; + break; + } + $arglist_current = HEAP32[$ap>>2]|0; + $22 = $arglist_current; + $23 = ((0) + 4|0); + $expanded4 = $23; + $expanded = (($expanded4) - 1)|0; + $24 = (($22) + ($expanded))|0; + $25 = ((0) + 4|0); + $expanded8 = $25; + $expanded7 = (($expanded8) - 1)|0; + $expanded6 = $expanded7 ^ -1; + $26 = $24 & $expanded6; + $27 = $26; + $28 = HEAP32[$27>>2]|0; + $arglist_next = ((($27)) + 4|0); + HEAP32[$ap>>2] = $arglist_next; + $l10n$2 = 0;$storemerge$191 = $arrayidx68;$w$0 = $28; + } + $cmp97 = ($w$0|0)<(0); + if ($cmp97) { + $or100 = $fl$0284 | 8192; + $sub101 = (0 - ($w$0))|0; + $fl$1 = $or100;$incdec$ptr169269 = $storemerge$191;$l10n$3 = $l10n$2;$w$1 = $sub101; + } else { + $fl$1 = $fl$0284;$incdec$ptr169269 = $storemerge$191;$l10n$3 = $l10n$2;$w$1 = $w$0; + } + } else { + $conv$4$i = $12 << 24 >> 24; + $isdigittmp$5$i = (($conv$4$i) + -48)|0; + $isdigit$6$i = ($isdigittmp$5$i>>>0)<(10); + if ($isdigit$6$i) { + $29 = $storemerge$186282;$i$07$i = 0;$isdigittmp8$i = $isdigittmp$5$i; + while(1) { + $mul$i = ($i$07$i*10)|0; + $add$i = (($mul$i) + ($isdigittmp8$i))|0; + $incdec$ptr$i = ((($29)) + 1|0); + $30 = HEAP8[$incdec$ptr$i>>0]|0; + $conv$i = $30 << 24 >> 24; + $isdigittmp$i = (($conv$i) + -48)|0; + $isdigit$i = ($isdigittmp$i>>>0)<(10); + if ($isdigit$i) { + $29 = $incdec$ptr$i;$i$07$i = $add$i;$isdigittmp8$i = $isdigittmp$i; + } else { + $add$i$lcssa = $add$i;$incdec$ptr$i$lcssa = $incdec$ptr$i; + break; + } + } + $cmp105 = ($add$i$lcssa|0)<(0); + if ($cmp105) { + $retval$0 = -1; + break L1; + } else { + $fl$1 = $fl$0284;$incdec$ptr169269 = $incdec$ptr$i$lcssa;$l10n$3 = $l10n$1;$w$1 = $add$i$lcssa; + } + } else { + $fl$1 = $fl$0284;$incdec$ptr169269 = $storemerge$186282;$l10n$3 = $l10n$1;$w$1 = 0; + } + } + } while(0); + $31 = HEAP8[$incdec$ptr169269>>0]|0; + $cmp111 = ($31<<24>>24)==(46); + L46: do { + if ($cmp111) { + $arrayidx114 = ((($incdec$ptr169269)) + 1|0); + $32 = HEAP8[$arrayidx114>>0]|0; + $cmp116 = ($32<<24>>24)==(42); + if (!($cmp116)) { + $conv$4$i$197 = $32 << 24 >> 24; + $isdigittmp$5$i$198 = (($conv$4$i$197) + -48)|0; + $isdigit$6$i$199 = ($isdigittmp$5$i$198>>>0)<(10); + if ($isdigit$6$i$199) { + $49 = $arrayidx114;$i$07$i$201 = 0;$isdigittmp8$i$200 = $isdigittmp$5$i$198; + } else { + $incdec$ptr169272 = $arrayidx114;$p$0 = 0; + break; + } + while(1) { + $mul$i$202 = ($i$07$i$201*10)|0; + $add$i$203 = (($mul$i$202) + ($isdigittmp8$i$200))|0; + $incdec$ptr$i$204 = ((($49)) + 1|0); + $50 = HEAP8[$incdec$ptr$i$204>>0]|0; + $conv$i$205 = $50 << 24 >> 24; + $isdigittmp$i$206 = (($conv$i$205) + -48)|0; + $isdigit$i$207 = ($isdigittmp$i$206>>>0)<(10); + if ($isdigit$i$207) { + $49 = $incdec$ptr$i$204;$i$07$i$201 = $add$i$203;$isdigittmp8$i$200 = $isdigittmp$i$206; + } else { + $incdec$ptr169272 = $incdec$ptr$i$204;$p$0 = $add$i$203; + break L46; + } + } + } + $arrayidx119 = ((($incdec$ptr169269)) + 2|0); + $33 = HEAP8[$arrayidx119>>0]|0; + $conv120 = $33 << 24 >> 24; + $isdigittmp187 = (($conv120) + -48)|0; + $isdigit188 = ($isdigittmp187>>>0)<(10); + if ($isdigit188) { + $arrayidx124 = ((($incdec$ptr169269)) + 3|0); + $34 = HEAP8[$arrayidx124>>0]|0; + $cmp126 = ($34<<24>>24)==(36); + if ($cmp126) { + $arrayidx132 = (($nl_type) + ($isdigittmp187<<2)|0); + HEAP32[$arrayidx132>>2] = 10; + $35 = HEAP8[$arrayidx119>>0]|0; + $conv134 = $35 << 24 >> 24; + $sub135 = (($conv134) + -48)|0; + $i137 = (($nl_arg) + ($sub135<<3)|0); + $36 = $i137; + $37 = $36; + $38 = HEAP32[$37>>2]|0; + $39 = (($36) + 4)|0; + $40 = $39; + $41 = HEAP32[$40>>2]|0; + $add$ptr139 = ((($incdec$ptr169269)) + 4|0); + $incdec$ptr169272 = $add$ptr139;$p$0 = $38; + break; + } + } + $tobool141 = ($l10n$3|0)==(0); + if (!($tobool141)) { + $retval$0 = -1; + break L1; + } + if ($tobool25) { + $arglist_current2 = HEAP32[$ap>>2]|0; + $42 = $arglist_current2; + $43 = ((0) + 4|0); + $expanded11 = $43; + $expanded10 = (($expanded11) - 1)|0; + $44 = (($42) + ($expanded10))|0; + $45 = ((0) + 4|0); + $expanded15 = $45; + $expanded14 = (($expanded15) - 1)|0; + $expanded13 = $expanded14 ^ -1; + $46 = $44 & $expanded13; + $47 = $46; + $48 = HEAP32[$47>>2]|0; + $arglist_next3 = ((($47)) + 4|0); + HEAP32[$ap>>2] = $arglist_next3; + $incdec$ptr169272 = $arrayidx119;$p$0 = $48; + } else { + $incdec$ptr169272 = $arrayidx119;$p$0 = 0; + } + } else { + $incdec$ptr169272 = $incdec$ptr169269;$p$0 = -1; + } + } while(0); + $incdec$ptr169271 = $incdec$ptr169272;$st$0 = 0; + while(1) { + $51 = HEAP8[$incdec$ptr169271>>0]|0; + $conv163 = $51 << 24 >> 24; + $sub164 = (($conv163) + -65)|0; + $cmp165 = ($sub164>>>0)>(57); + if ($cmp165) { + $retval$0 = -1; + break L1; + } + $incdec$ptr169 = ((($incdec$ptr169271)) + 1|0); + $arrayidx173 = ((3611 + (($st$0*58)|0)|0) + ($sub164)|0); + $52 = HEAP8[$arrayidx173>>0]|0; + $conv174 = $52&255; + $sub175 = (($conv174) + -1)|0; + $cmp176 = ($sub175>>>0)<(8); + if ($cmp176) { + $incdec$ptr169271 = $incdec$ptr169;$st$0 = $conv174; + } else { + $$lcssa = $52;$conv174$lcssa = $conv174;$incdec$ptr169$lcssa = $incdec$ptr169;$incdec$ptr169271$lcssa414 = $incdec$ptr169271;$st$0$lcssa415 = $st$0; + break; + } + } + $tobool178 = ($$lcssa<<24>>24)==(0); + if ($tobool178) { + $retval$0 = -1; + break; + } + $cmp181 = ($$lcssa<<24>>24)==(19); + $cmp184 = ($argpos$0|0)>(-1); + do { + if ($cmp181) { + if ($cmp184) { + $retval$0 = -1; + break L1; + } else { + label = 52; + } + } else { + if ($cmp184) { + $arrayidx192 = (($nl_type) + ($argpos$0<<2)|0); + HEAP32[$arrayidx192>>2] = $conv174$lcssa; + $53 = (($nl_arg) + ($argpos$0<<3)|0); + $54 = $53; + $55 = $54; + $56 = HEAP32[$55>>2]|0; + $57 = (($54) + 4)|0; + $58 = $57; + $59 = HEAP32[$58>>2]|0; + $60 = $arg; + $61 = $60; + HEAP32[$61>>2] = $56; + $62 = (($60) + 4)|0; + $63 = $62; + HEAP32[$63>>2] = $59; + label = 52; + break; + } + if (!($tobool25)) { + $retval$0 = 0; + break L1; + } + _pop_arg_336($arg,$conv174$lcssa,$ap); + } + } while(0); + if ((label|0) == 52) { + label = 0; + if (!($tobool25)) { + $cnt$0 = $cnt$1;$incdec$ptr169275 = $incdec$ptr169$lcssa;$l$0 = $sub$ptr$sub;$l10n$0 = $l10n$3; + continue; + } + } + $64 = HEAP8[$incdec$ptr169271$lcssa414>>0]|0; + $conv207 = $64 << 24 >> 24; + $tobool208 = ($st$0$lcssa415|0)!=(0); + $and210 = $conv207 & 15; + $cmp211 = ($and210|0)==(3); + $or$cond192 = $tobool208 & $cmp211; + $and214 = $conv207 & -33; + $t$0 = $or$cond192 ? $and214 : $conv207; + $and216 = $fl$1 & 8192; + $tobool217 = ($and216|0)==(0); + $and219 = $fl$1 & -65537; + $fl$1$and219 = $tobool217 ? $fl$1 : $and219; + L75: do { + switch ($t$0|0) { + case 110: { + switch ($st$0$lcssa415|0) { + case 0: { + $71 = HEAP32[$arg>>2]|0; + HEAP32[$71>>2] = $cnt$1; + $cnt$0 = $cnt$1;$incdec$ptr169275 = $incdec$ptr169$lcssa;$l$0 = $sub$ptr$sub;$l10n$0 = $l10n$3; + continue L1; + break; + } + case 1: { + $72 = HEAP32[$arg>>2]|0; + HEAP32[$72>>2] = $cnt$1; + $cnt$0 = $cnt$1;$incdec$ptr169275 = $incdec$ptr169$lcssa;$l$0 = $sub$ptr$sub;$l10n$0 = $l10n$3; + continue L1; + break; + } + case 2: { + $73 = ($cnt$1|0)<(0); + $74 = $73 << 31 >> 31; + $75 = HEAP32[$arg>>2]|0; + $76 = $75; + $77 = $76; + HEAP32[$77>>2] = $cnt$1; + $78 = (($76) + 4)|0; + $79 = $78; + HEAP32[$79>>2] = $74; + $cnt$0 = $cnt$1;$incdec$ptr169275 = $incdec$ptr169$lcssa;$l$0 = $sub$ptr$sub;$l10n$0 = $l10n$3; + continue L1; + break; + } + case 3: { + $conv229 = $cnt$1&65535; + $80 = HEAP32[$arg>>2]|0; + HEAP16[$80>>1] = $conv229; + $cnt$0 = $cnt$1;$incdec$ptr169275 = $incdec$ptr169$lcssa;$l$0 = $sub$ptr$sub;$l10n$0 = $l10n$3; + continue L1; + break; + } + case 4: { + $conv232 = $cnt$1&255; + $81 = HEAP32[$arg>>2]|0; + HEAP8[$81>>0] = $conv232; + $cnt$0 = $cnt$1;$incdec$ptr169275 = $incdec$ptr169$lcssa;$l$0 = $sub$ptr$sub;$l10n$0 = $l10n$3; + continue L1; + break; + } + case 6: { + $82 = HEAP32[$arg>>2]|0; + HEAP32[$82>>2] = $cnt$1; + $cnt$0 = $cnt$1;$incdec$ptr169275 = $incdec$ptr169$lcssa;$l$0 = $sub$ptr$sub;$l10n$0 = $l10n$3; + continue L1; + break; + } + case 7: { + $83 = ($cnt$1|0)<(0); + $84 = $83 << 31 >> 31; + $85 = HEAP32[$arg>>2]|0; + $86 = $85; + $87 = $86; + HEAP32[$87>>2] = $cnt$1; + $88 = (($86) + 4)|0; + $89 = $88; + HEAP32[$89>>2] = $84; + $cnt$0 = $cnt$1;$incdec$ptr169275 = $incdec$ptr169$lcssa;$l$0 = $sub$ptr$sub;$l10n$0 = $l10n$3; + continue L1; + break; + } + default: { + $cnt$0 = $cnt$1;$incdec$ptr169275 = $incdec$ptr169$lcssa;$l$0 = $sub$ptr$sub;$l10n$0 = $l10n$3; + continue L1; + } + } + break; + } + case 112: { + $cmp240 = ($p$0>>>0)>(8); + $cond245 = $cmp240 ? $p$0 : 8; + $or246 = $fl$1$and219 | 8; + $fl$3 = $or246;$p$1 = $cond245;$t$1 = 120; + label = 64; + break; + } + case 88: case 120: { + $fl$3 = $fl$1$and219;$p$1 = $p$0;$t$1 = $t$0; + label = 64; + break; + } + case 111: { + $116 = $arg; + $117 = $116; + $118 = HEAP32[$117>>2]|0; + $119 = (($116) + 4)|0; + $120 = $119; + $121 = HEAP32[$120>>2]|0; + $122 = ($118|0)==(0); + $123 = ($121|0)==(0); + $124 = $122 & $123; + if ($124) { + $s$addr$0$lcssa$i$229 = $add$ptr205; + } else { + $126 = $118;$129 = $121;$s$addr$06$i$221 = $add$ptr205; + while(1) { + $125 = $126 & 7; + $127 = $125 | 48; + $128 = $127&255; + $incdec$ptr$i$225 = ((($s$addr$06$i$221)) + -1|0); + HEAP8[$incdec$ptr$i$225>>0] = $128; + $130 = (_bitshift64Lshr(($126|0),($129|0),3)|0); + $131 = tempRet0; + $132 = ($130|0)==(0); + $133 = ($131|0)==(0); + $134 = $132 & $133; + if ($134) { + $s$addr$0$lcssa$i$229 = $incdec$ptr$i$225; + break; + } else { + $126 = $130;$129 = $131;$s$addr$06$i$221 = $incdec$ptr$i$225; + } + } + } + $and263 = $fl$1$and219 & 8; + $tobool264 = ($and263|0)==(0); + if ($tobool264) { + $a$0 = $s$addr$0$lcssa$i$229;$fl$4 = $fl$1$and219;$p$2 = $p$0;$pl$1 = 0;$prefix$1 = 4091; + label = 77; + } else { + $sub$ptr$rhs$cast267 = $s$addr$0$lcssa$i$229; + $sub$ptr$sub268 = (($sub$ptr$lhs$cast317) - ($sub$ptr$rhs$cast267))|0; + $add269 = (($sub$ptr$sub268) + 1)|0; + $cmp270 = ($p$0|0)<($add269|0); + $add269$p$0 = $cmp270 ? $add269 : $p$0; + $a$0 = $s$addr$0$lcssa$i$229;$fl$4 = $fl$1$and219;$p$2 = $add269$p$0;$pl$1 = 0;$prefix$1 = 4091; + label = 77; + } + break; + } + case 105: case 100: { + $135 = $arg; + $136 = $135; + $137 = HEAP32[$136>>2]|0; + $138 = (($135) + 4)|0; + $139 = $138; + $140 = HEAP32[$139>>2]|0; + $141 = ($140|0)<(0); + if ($141) { + $142 = (_i64Subtract(0,0,($137|0),($140|0))|0); + $143 = tempRet0; + $144 = $arg; + $145 = $144; + HEAP32[$145>>2] = $142; + $146 = (($144) + 4)|0; + $147 = $146; + HEAP32[$147>>2] = $143; + $148 = $142;$149 = $143;$pl$0 = 1;$prefix$0 = 4091; + label = 76; + break L75; + } + $and289 = $fl$1$and219 & 2048; + $tobool290 = ($and289|0)==(0); + if ($tobool290) { + $and294 = $fl$1$and219 & 1; + $tobool295 = ($and294|0)==(0); + $$ = $tobool295 ? 4091 : (4093); + $148 = $137;$149 = $140;$pl$0 = $and294;$prefix$0 = $$; + label = 76; + } else { + $148 = $137;$149 = $140;$pl$0 = 1;$prefix$0 = (4092); + label = 76; + } + break; + } + case 117: { + $65 = $arg; + $66 = $65; + $67 = HEAP32[$66>>2]|0; + $68 = (($65) + 4)|0; + $69 = $68; + $70 = HEAP32[$69>>2]|0; + $148 = $67;$149 = $70;$pl$0 = 0;$prefix$0 = 4091; + label = 76; + break; + } + case 99: { + $161 = $arg; + $162 = $161; + $163 = HEAP32[$162>>2]|0; + $164 = (($161) + 4)|0; + $165 = $164; + $166 = HEAP32[$165>>2]|0; + $167 = $163&255; + HEAP8[$add$ptr340>>0] = $167; + $a$2 = $add$ptr340;$fl$6 = $and219;$p$5 = 1;$pl$2 = 0;$prefix$2 = 4091;$z$2 = $add$ptr205; + break; + } + case 109: { + $call344 = (___errno_location()|0); + $168 = HEAP32[$call344>>2]|0; + $call345 = (_strerror($168)|0); + $a$1 = $call345; + label = 82; + break; + } + case 115: { + $169 = HEAP32[$arg>>2]|0; + $tobool349 = ($169|0)!=(0|0); + $cond354 = $tobool349 ? $169 : 4101; + $a$1 = $cond354; + label = 82; + break; + } + case 67: { + $170 = $arg; + $171 = $170; + $172 = HEAP32[$171>>2]|0; + $173 = (($170) + 4)|0; + $174 = $173; + $175 = HEAP32[$174>>2]|0; + HEAP32[$wc>>2] = $172; + HEAP32[$arrayidx370>>2] = 0; + HEAP32[$arg>>2] = $wc; + $p$4365 = -1; + label = 86; + break; + } + case 83: { + $cmp377$314 = ($p$0|0)==(0); + if ($cmp377$314) { + _pad($f,32,$w$1,0,$fl$1$and219); + $i$0$lcssa368 = 0; + label = 98; + } else { + $p$4365 = $p$0; + label = 86; + } + break; + } + case 65: case 71: case 70: case 69: case 97: case 103: case 102: case 101: { + $181 = +HEAPF64[$arg>>3]; + HEAP32[$e2$i>>2] = 0; + HEAPF64[tempDoublePtr>>3] = $181;$182 = HEAP32[tempDoublePtr>>2]|0; + $183 = HEAP32[tempDoublePtr+4>>2]|0; + $184 = ($183|0)<(0); + if ($184) { + $sub$i = -$181; + $pl$0$i = 1;$prefix$0$i = 4108;$y$addr$0$i = $sub$i; + } else { + $and$i$238 = $fl$1$and219 & 2048; + $tobool9$i = ($and$i$238|0)==(0); + if ($tobool9$i) { + $and12$i = $fl$1$and219 & 1; + $tobool13$i = ($and12$i|0)==(0); + $$$i = $tobool13$i ? (4109) : (4114); + $pl$0$i = $and12$i;$prefix$0$i = $$$i;$y$addr$0$i = $181; + } else { + $pl$0$i = 1;$prefix$0$i = (4111);$y$addr$0$i = $181; + } + } + HEAPF64[tempDoublePtr>>3] = $y$addr$0$i;$185 = HEAP32[tempDoublePtr>>2]|0; + $186 = HEAP32[tempDoublePtr+4>>2]|0; + $187 = $186 & 2146435072; + $188 = ($187>>>0)<(2146435072); + $189 = (0)<(0); + $190 = ($187|0)==(2146435072); + $191 = $190 & $189; + $192 = $188 | $191; + do { + if ($192) { + $call55$i = (+_frexpl($y$addr$0$i,$e2$i)); + $mul$i$240 = $call55$i * 2.0; + $tobool56$i = $mul$i$240 != 0.0; + if ($tobool56$i) { + $195 = HEAP32[$e2$i>>2]|0; + $dec$i = (($195) + -1)|0; + HEAP32[$e2$i>>2] = $dec$i; + } + $or$i$241 = $t$0 | 32; + $cmp59$i = ($or$i$241|0)==(97); + if ($cmp59$i) { + $and62$i = $t$0 & 32; + $tobool63$i = ($and62$i|0)==(0); + $add$ptr65$i = ((($prefix$0$i)) + 9|0); + $prefix$0$add$ptr65$i = $tobool63$i ? $prefix$0$i : $add$ptr65$i; + $add67$i = $pl$0$i | 2; + $196 = ($p$0>>>0)>(11); + $sub74$i = (12 - ($p$0))|0; + $tobool76552$i = ($sub74$i|0)==(0); + $tobool76$i = $196 | $tobool76552$i; + do { + if ($tobool76$i) { + $y$addr$1$i = $mul$i$240; + } else { + $re$1482$i = $sub74$i;$round$0481$i = 8.0; + while(1) { + $dec78$i = (($re$1482$i) + -1)|0; + $mul80$i = $round$0481$i * 16.0; + $tobool79$i = ($dec78$i|0)==(0); + if ($tobool79$i) { + $mul80$i$lcssa = $mul80$i; + break; + } else { + $re$1482$i = $dec78$i;$round$0481$i = $mul80$i; + } + } + $197 = HEAP8[$prefix$0$add$ptr65$i>>0]|0; + $cmp82$i = ($197<<24>>24)==(45); + if ($cmp82$i) { + $sub85$i = -$mul$i$240; + $sub86$i = $sub85$i - $mul80$i$lcssa; + $add87$i = $mul80$i$lcssa + $sub86$i; + $sub88$i = -$add87$i; + $y$addr$1$i = $sub88$i; + break; + } else { + $add90$i = $mul$i$240 + $mul80$i$lcssa; + $sub91$i = $add90$i - $mul80$i$lcssa; + $y$addr$1$i = $sub91$i; + break; + } + } + } while(0); + $198 = HEAP32[$e2$i>>2]|0; + $cmp94$i = ($198|0)<(0); + $sub97$i = (0 - ($198))|0; + $cond100$i = $cmp94$i ? $sub97$i : $198; + $199 = ($cond100$i|0)<(0); + $200 = $199 << 31 >> 31; + $201 = (_fmt_u($cond100$i,$200,$arrayidx$i$236)|0); + $cmp103$i = ($201|0)==($arrayidx$i$236|0); + if ($cmp103$i) { + HEAP8[$incdec$ptr106$i>>0] = 48; + $estr$0$i = $incdec$ptr106$i; + } else { + $estr$0$i = $201; + } + $202 = $198 >> 31; + $203 = $202 & 2; + $204 = (($203) + 43)|0; + $conv111$i = $204&255; + $incdec$ptr112$i = ((($estr$0$i)) + -1|0); + HEAP8[$incdec$ptr112$i>>0] = $conv111$i; + $add113$i = (($t$0) + 15)|0; + $conv114$i = $add113$i&255; + $incdec$ptr115$i = ((($estr$0$i)) + -2|0); + HEAP8[$incdec$ptr115$i>>0] = $conv114$i; + $notrhs$i = ($p$0|0)<(1); + $and134$i = $fl$1$and219 & 8; + $tobool135$i = ($and134$i|0)==(0); + $s$0$i = $buf$i;$y$addr$2$i = $y$addr$1$i; + while(1) { + $conv116$i = (~~(($y$addr$2$i))); + $arrayidx117$i = (4075 + ($conv116$i)|0); + $205 = HEAP8[$arrayidx117$i>>0]|0; + $conv118$393$i = $205&255; + $or120$i = $conv118$393$i | $and62$i; + $conv121$i = $or120$i&255; + $incdec$ptr122$i = ((($s$0$i)) + 1|0); + HEAP8[$s$0$i>>0] = $conv121$i; + $conv123$i = (+($conv116$i|0)); + $sub124$i = $y$addr$2$i - $conv123$i; + $mul125$i = $sub124$i * 16.0; + $sub$ptr$lhs$cast$i = $incdec$ptr122$i; + $sub$ptr$sub$i = (($sub$ptr$lhs$cast$i) - ($sub$ptr$rhs$cast$i))|0; + $cmp127$i = ($sub$ptr$sub$i|0)==(1); + do { + if ($cmp127$i) { + $notlhs$i = $mul125$i == 0.0; + $or$cond1$not$i = $notrhs$i & $notlhs$i; + $or$cond$i = $tobool135$i & $or$cond1$not$i; + if ($or$cond$i) { + $s$1$i = $incdec$ptr122$i; + break; + } + $incdec$ptr137$i = ((($s$0$i)) + 2|0); + HEAP8[$incdec$ptr122$i>>0] = 46; + $s$1$i = $incdec$ptr137$i; + } else { + $s$1$i = $incdec$ptr122$i; + } + } while(0); + $tobool139$i = $mul125$i != 0.0; + if ($tobool139$i) { + $s$0$i = $s$1$i;$y$addr$2$i = $mul125$i; + } else { + $s$1$i$lcssa = $s$1$i; + break; + } + } + $tobool140$i = ($p$0|0)!=(0); + $$pre566$i = $s$1$i$lcssa; + $sub146$i = (($sub$ptr$sub145$i) + ($$pre566$i))|0; + $cmp147$i = ($sub146$i|0)<($p$0|0); + $or$cond384 = $tobool140$i & $cmp147$i; + $sub$ptr$rhs$cast152$i = $incdec$ptr115$i; + $add150$i = (($sub$ptr$sub153$i) + ($p$0))|0; + $add154$i = (($add150$i) - ($sub$ptr$rhs$cast152$i))|0; + $sub$ptr$rhs$cast161$i = $incdec$ptr115$i; + $sub$ptr$sub162$i = (($sub$ptr$sub159$i) - ($sub$ptr$rhs$cast161$i))|0; + $add163$i = (($sub$ptr$sub162$i) + ($$pre566$i))|0; + $l$0$i = $or$cond384 ? $add154$i : $add163$i; + $add165$i = (($l$0$i) + ($add67$i))|0; + _pad($f,32,$w$1,$add165$i,$fl$1$and219); + $206 = HEAP32[$f>>2]|0; + $and$i$418$i = $206 & 32; + $tobool$i$419$i = ($and$i$418$i|0)==(0); + if ($tobool$i$419$i) { + (___fwritex($prefix$0$add$ptr65$i,$add67$i,$f)|0); + } + $xor167$i = $fl$1$and219 ^ 65536; + _pad($f,48,$w$1,$add165$i,$xor167$i); + $sub$ptr$sub172$i = (($$pre566$i) - ($sub$ptr$rhs$cast$i))|0; + $207 = HEAP32[$f>>2]|0; + $and$i$424$i = $207 & 32; + $tobool$i$425$i = ($and$i$424$i|0)==(0); + if ($tobool$i$425$i) { + (___fwritex($buf$i,$sub$ptr$sub172$i,$f)|0); + } + $sub$ptr$rhs$cast174$i = $incdec$ptr115$i; + $sub$ptr$sub175$i = (($sub$ptr$lhs$cast160$i) - ($sub$ptr$rhs$cast174$i))|0; + $sum = (($sub$ptr$sub172$i) + ($sub$ptr$sub175$i))|0; + $sub181$i = (($l$0$i) - ($sum))|0; + _pad($f,48,$sub181$i,0,0); + $208 = HEAP32[$f>>2]|0; + $and$i$430$i = $208 & 32; + $tobool$i$431$i = ($and$i$430$i|0)==(0); + if ($tobool$i$431$i) { + (___fwritex($incdec$ptr115$i,$sub$ptr$sub175$i,$f)|0); + } + $xor186$i = $fl$1$and219 ^ 8192; + _pad($f,32,$w$1,$add165$i,$xor186$i); + $cmp188$i = ($add165$i|0)<($w$1|0); + $w$add165$i = $cmp188$i ? $w$1 : $add165$i; + $retval$0$i = $w$add165$i; + break; + } + $cmp196$i = ($p$0|0)<(0); + $$p$i = $cmp196$i ? 6 : $p$0; + if ($tobool56$i) { + $mul202$i = $mul$i$240 * 268435456.0; + $209 = HEAP32[$e2$i>>2]|0; + $sub203$i = (($209) + -28)|0; + HEAP32[$e2$i>>2] = $sub203$i; + $210 = $sub203$i;$y$addr$3$i = $mul202$i; + } else { + $$pre564$i = HEAP32[$e2$i>>2]|0; + $210 = $$pre564$i;$y$addr$3$i = $mul$i$240; + } + $cmp205$i = ($210|0)<(0); + $arraydecay208$add$ptr213$i = $cmp205$i ? $big$i : $add$ptr213$i; + $sub$ptr$rhs$cast345$i = $arraydecay208$add$ptr213$i; + $y$addr$4$i = $y$addr$3$i;$z$0$i = $arraydecay208$add$ptr213$i; + while(1) { + $conv216$i = (~~(($y$addr$4$i))>>>0); + HEAP32[$z$0$i>>2] = $conv216$i; + $incdec$ptr217$i = ((($z$0$i)) + 4|0); + $conv218$i = (+($conv216$i>>>0)); + $sub219$i = $y$addr$4$i - $conv218$i; + $mul220$i = $sub219$i * 1.0E+9; + $tobool222$i = $mul220$i != 0.0; + if ($tobool222$i) { + $y$addr$4$i = $mul220$i;$z$0$i = $incdec$ptr217$i; + } else { + $incdec$ptr217$i$lcssa = $incdec$ptr217$i; + break; + } + } + $$pr$i = HEAP32[$e2$i>>2]|0; + $cmp225$547$i = ($$pr$i|0)>(0); + if ($cmp225$547$i) { + $211 = $$pr$i;$a$1549$i = $arraydecay208$add$ptr213$i;$z$1548$i = $incdec$ptr217$i$lcssa; + while(1) { + $cmp228$i = ($211|0)>(29); + $cond233$i = $cmp228$i ? 29 : $211; + $d$0$542$i = ((($z$1548$i)) + -4|0); + $cmp235$543$i = ($d$0$542$i>>>0)<($a$1549$i>>>0); + do { + if ($cmp235$543$i) { + $a$2$ph$i = $a$1549$i; + } else { + $carry$0544$i = 0;$d$0545$i = $d$0$542$i; + while(1) { + $212 = HEAP32[$d$0545$i>>2]|0; + $213 = (_bitshift64Shl(($212|0),0,($cond233$i|0))|0); + $214 = tempRet0; + $215 = (_i64Add(($213|0),($214|0),($carry$0544$i|0),0)|0); + $216 = tempRet0; + $217 = (___uremdi3(($215|0),($216|0),1000000000,0)|0); + $218 = tempRet0; + HEAP32[$d$0545$i>>2] = $217; + $219 = (___udivdi3(($215|0),($216|0),1000000000,0)|0); + $220 = tempRet0; + $d$0$i = ((($d$0545$i)) + -4|0); + $cmp235$i = ($d$0$i>>>0)<($a$1549$i>>>0); + if ($cmp235$i) { + $conv242$i$lcssa = $219; + break; + } else { + $carry$0544$i = $219;$d$0545$i = $d$0$i; + } + } + $tobool244$i = ($conv242$i$lcssa|0)==(0); + if ($tobool244$i) { + $a$2$ph$i = $a$1549$i; + break; + } + $incdec$ptr246$i = ((($a$1549$i)) + -4|0); + HEAP32[$incdec$ptr246$i>>2] = $conv242$i$lcssa; + $a$2$ph$i = $incdec$ptr246$i; + } + } while(0); + $z$2$i = $z$1548$i; + while(1) { + $cmp249$i = ($z$2$i>>>0)>($a$2$ph$i>>>0); + if (!($cmp249$i)) { + $z$2$i$lcssa = $z$2$i; + break; + } + $arrayidx251$i = ((($z$2$i)) + -4|0); + $221 = HEAP32[$arrayidx251$i>>2]|0; + $lnot$i = ($221|0)==(0); + if ($lnot$i) { + $z$2$i = $arrayidx251$i; + } else { + $z$2$i$lcssa = $z$2$i; + break; + } + } + $222 = HEAP32[$e2$i>>2]|0; + $sub256$i = (($222) - ($cond233$i))|0; + HEAP32[$e2$i>>2] = $sub256$i; + $cmp225$i = ($sub256$i|0)>(0); + if ($cmp225$i) { + $211 = $sub256$i;$a$1549$i = $a$2$ph$i;$z$1548$i = $z$2$i$lcssa; + } else { + $$pr477$i = $sub256$i;$a$1$lcssa$i = $a$2$ph$i;$z$1$lcssa$i = $z$2$i$lcssa; + break; + } + } + } else { + $$pr477$i = $$pr$i;$a$1$lcssa$i = $arraydecay208$add$ptr213$i;$z$1$lcssa$i = $incdec$ptr217$i$lcssa; + } + $cmp259$537$i = ($$pr477$i|0)<(0); + if ($cmp259$537$i) { + $add273$i = (($$p$i) + 25)|0; + $div274$i = (($add273$i|0) / 9)&-1; + $add275$i = (($div274$i) + 1)|0; + $cmp299$i = ($or$i$241|0)==(102); + $223 = $$pr477$i;$a$3539$i = $a$1$lcssa$i;$z$3538$i = $z$1$lcssa$i; + while(1) { + $sub264$i = (0 - ($223))|0; + $cmp265$i = ($sub264$i|0)>(9); + $cond271$i = $cmp265$i ? 9 : $sub264$i; + $cmp277$533$i = ($a$3539$i>>>0)<($z$3538$i>>>0); + do { + if ($cmp277$533$i) { + $shl280$i = 1 << $cond271$i; + $sub281$i = (($shl280$i) + -1)|0; + $shr285$i = 1000000000 >>> $cond271$i; + $carry262$0535$i = 0;$d$1534$i = $a$3539$i; + while(1) { + $225 = HEAP32[$d$1534$i>>2]|0; + $and282$i = $225 & $sub281$i; + $shr283$i = $225 >>> $cond271$i; + $add284$i = (($shr283$i) + ($carry262$0535$i))|0; + HEAP32[$d$1534$i>>2] = $add284$i; + $mul286$i = Math_imul($and282$i, $shr285$i)|0; + $incdec$ptr288$i = ((($d$1534$i)) + 4|0); + $cmp277$i = ($incdec$ptr288$i>>>0)<($z$3538$i>>>0); + if ($cmp277$i) { + $carry262$0535$i = $mul286$i;$d$1534$i = $incdec$ptr288$i; + } else { + $mul286$i$lcssa = $mul286$i; + break; + } + } + $226 = HEAP32[$a$3539$i>>2]|0; + $tobool290$i = ($226|0)==(0); + $incdec$ptr292$i = ((($a$3539$i)) + 4|0); + $incdec$ptr292$a$3$i = $tobool290$i ? $incdec$ptr292$i : $a$3539$i; + $tobool294$i = ($mul286$i$lcssa|0)==(0); + if ($tobool294$i) { + $incdec$ptr292$a$3573$i = $incdec$ptr292$a$3$i;$z$4$i = $z$3538$i; + break; + } + $incdec$ptr296$i = ((($z$3538$i)) + 4|0); + HEAP32[$z$3538$i>>2] = $mul286$i$lcssa; + $incdec$ptr292$a$3573$i = $incdec$ptr292$a$3$i;$z$4$i = $incdec$ptr296$i; + } else { + $224 = HEAP32[$a$3539$i>>2]|0; + $tobool290$569$i = ($224|0)==(0); + $incdec$ptr292$570$i = ((($a$3539$i)) + 4|0); + $incdec$ptr292$a$3$571$i = $tobool290$569$i ? $incdec$ptr292$570$i : $a$3539$i; + $incdec$ptr292$a$3573$i = $incdec$ptr292$a$3$571$i;$z$4$i = $z$3538$i; + } + } while(0); + $cond304$i = $cmp299$i ? $arraydecay208$add$ptr213$i : $incdec$ptr292$a$3573$i; + $sub$ptr$lhs$cast305$i = $z$4$i; + $sub$ptr$rhs$cast306$i = $cond304$i; + $sub$ptr$sub307$i = (($sub$ptr$lhs$cast305$i) - ($sub$ptr$rhs$cast306$i))|0; + $sub$ptr$div$i = $sub$ptr$sub307$i >> 2; + $cmp308$i = ($sub$ptr$div$i|0)>($add275$i|0); + $add$ptr311$i = (($cond304$i) + ($add275$i<<2)|0); + $add$ptr311$z$4$i = $cmp308$i ? $add$ptr311$i : $z$4$i; + $227 = HEAP32[$e2$i>>2]|0; + $add313$i = (($227) + ($cond271$i))|0; + HEAP32[$e2$i>>2] = $add313$i; + $cmp259$i = ($add313$i|0)<(0); + if ($cmp259$i) { + $223 = $add313$i;$a$3539$i = $incdec$ptr292$a$3573$i;$z$3538$i = $add$ptr311$z$4$i; + } else { + $a$3$lcssa$i = $incdec$ptr292$a$3573$i;$z$3$lcssa$i = $add$ptr311$z$4$i; + break; + } + } + } else { + $a$3$lcssa$i = $a$1$lcssa$i;$z$3$lcssa$i = $z$1$lcssa$i; + } + $cmp315$i = ($a$3$lcssa$i>>>0)<($z$3$lcssa$i>>>0); + do { + if ($cmp315$i) { + $sub$ptr$rhs$cast319$i = $a$3$lcssa$i; + $sub$ptr$sub320$i = (($sub$ptr$rhs$cast345$i) - ($sub$ptr$rhs$cast319$i))|0; + $sub$ptr$div321$i = $sub$ptr$sub320$i >> 2; + $mul322$i = ($sub$ptr$div321$i*9)|0; + $228 = HEAP32[$a$3$lcssa$i>>2]|0; + $cmp324$529$i = ($228>>>0)<(10); + if ($cmp324$529$i) { + $e$1$i = $mul322$i; + break; + } else { + $e$0531$i = $mul322$i;$i$0530$i = 10; + } + while(1) { + $mul328$i = ($i$0530$i*10)|0; + $inc$i = (($e$0531$i) + 1)|0; + $cmp324$i = ($228>>>0)<($mul328$i>>>0); + if ($cmp324$i) { + $e$1$i = $inc$i; + break; + } else { + $e$0531$i = $inc$i;$i$0530$i = $mul328$i; + } + } + } else { + $e$1$i = 0; + } + } while(0); + $cmp333$i = ($or$i$241|0)!=(102); + $mul335$i = $cmp333$i ? $e$1$i : 0; + $sub336$i = (($$p$i) - ($mul335$i))|0; + $cmp338$i = ($or$i$241|0)==(103); + $tobool341$i = ($$p$i|0)!=(0); + $229 = $tobool341$i & $cmp338$i; + $land$ext$neg$i = $229 << 31 >> 31; + $sub343$i = (($sub336$i) + ($land$ext$neg$i))|0; + $sub$ptr$lhs$cast344$i = $z$3$lcssa$i; + $sub$ptr$sub346$i = (($sub$ptr$lhs$cast344$i) - ($sub$ptr$rhs$cast345$i))|0; + $sub$ptr$div347$i = $sub$ptr$sub346$i >> 2; + $230 = ($sub$ptr$div347$i*9)|0; + $mul349$i = (($230) + -9)|0; + $cmp350$i = ($sub343$i|0)<($mul349$i|0); + if ($cmp350$i) { + $add$ptr354$i = ((($arraydecay208$add$ptr213$i)) + 4|0); + $add355$i = (($sub343$i) + 9216)|0; + $div356$i = (($add355$i|0) / 9)&-1; + $sub357$i = (($div356$i) + -1024)|0; + $add$ptr358$i = (($add$ptr354$i) + ($sub357$i<<2)|0); + $rem360$i = (($add355$i|0) % 9)&-1; + $j$0$524$i = (($rem360$i) + 1)|0; + $cmp363$525$i = ($j$0$524$i|0)<(9); + if ($cmp363$525$i) { + $i$1526$i = 10;$j$0527$i = $j$0$524$i; + while(1) { + $mul367$i = ($i$1526$i*10)|0; + $j$0$i = (($j$0527$i) + 1)|0; + $exitcond$i = ($j$0$i|0)==(9); + if ($exitcond$i) { + $i$1$lcssa$i = $mul367$i; + break; + } else { + $i$1526$i = $mul367$i;$j$0527$i = $j$0$i; + } + } + } else { + $i$1$lcssa$i = 10; + } + $231 = HEAP32[$add$ptr358$i>>2]|0; + $rem370$i = (($231>>>0) % ($i$1$lcssa$i>>>0))&-1; + $tobool371$i = ($rem370$i|0)==(0); + $add$ptr373$i = ((($add$ptr358$i)) + 4|0); + $cmp374$i = ($add$ptr373$i|0)==($z$3$lcssa$i|0); + $or$cond395$i = $cmp374$i & $tobool371$i; + do { + if ($or$cond395$i) { + $a$8$i = $a$3$lcssa$i;$d$4$i = $add$ptr358$i;$e$4$i = $e$1$i; + } else { + $div378$i = (($231>>>0) / ($i$1$lcssa$i>>>0))&-1; + $and379$i = $div378$i & 1; + $tobool380$i = ($and379$i|0)==(0); + $$396$i = $tobool380$i ? 9007199254740992.0 : 9007199254740994.0; + $div384$i = (($i$1$lcssa$i|0) / 2)&-1; + $cmp385$i = ($rem370$i>>>0)<($div384$i>>>0); + if ($cmp385$i) { + $small$0$i = 0.5; + } else { + $cmp390$i = ($rem370$i|0)==($div384$i|0); + $or$cond397$i = $cmp374$i & $cmp390$i; + $$404$i = $or$cond397$i ? 1.0 : 1.5; + $small$0$i = $$404$i; + } + $tobool400$i = ($pl$0$i|0)==(0); + do { + if ($tobool400$i) { + $round377$1$i = $$396$i;$small$1$i = $small$0$i; + } else { + $232 = HEAP8[$prefix$0$i>>0]|0; + $cmp403$i = ($232<<24>>24)==(45); + if (!($cmp403$i)) { + $round377$1$i = $$396$i;$small$1$i = $small$0$i; + break; + } + $mul406$i = -$$396$i; + $mul407$i = -$small$0$i; + $round377$1$i = $mul406$i;$small$1$i = $mul407$i; + } + } while(0); + $sub409$i = (($231) - ($rem370$i))|0; + HEAP32[$add$ptr358$i>>2] = $sub409$i; + $add410$i = $round377$1$i + $small$1$i; + $cmp411$i = $add410$i != $round377$1$i; + if (!($cmp411$i)) { + $a$8$i = $a$3$lcssa$i;$d$4$i = $add$ptr358$i;$e$4$i = $e$1$i; + break; + } + $add414$i = (($sub409$i) + ($i$1$lcssa$i))|0; + HEAP32[$add$ptr358$i>>2] = $add414$i; + $cmp416$519$i = ($add414$i>>>0)>(999999999); + if ($cmp416$519$i) { + $a$5521$i = $a$3$lcssa$i;$d$2520$i = $add$ptr358$i; + while(1) { + $incdec$ptr419$i = ((($d$2520$i)) + -4|0); + HEAP32[$d$2520$i>>2] = 0; + $cmp420$i = ($incdec$ptr419$i>>>0)<($a$5521$i>>>0); + if ($cmp420$i) { + $incdec$ptr423$i = ((($a$5521$i)) + -4|0); + HEAP32[$incdec$ptr423$i>>2] = 0; + $a$6$i = $incdec$ptr423$i; + } else { + $a$6$i = $a$5521$i; + } + $233 = HEAP32[$incdec$ptr419$i>>2]|0; + $inc425$i = (($233) + 1)|0; + HEAP32[$incdec$ptr419$i>>2] = $inc425$i; + $cmp416$i = ($inc425$i>>>0)>(999999999); + if ($cmp416$i) { + $a$5521$i = $a$6$i;$d$2520$i = $incdec$ptr419$i; + } else { + $a$5$lcssa$i = $a$6$i;$d$2$lcssa$i = $incdec$ptr419$i; + break; + } + } + } else { + $a$5$lcssa$i = $a$3$lcssa$i;$d$2$lcssa$i = $add$ptr358$i; + } + $sub$ptr$rhs$cast428$i = $a$5$lcssa$i; + $sub$ptr$sub429$i = (($sub$ptr$rhs$cast345$i) - ($sub$ptr$rhs$cast428$i))|0; + $sub$ptr$div430$i = $sub$ptr$sub429$i >> 2; + $mul431$i = ($sub$ptr$div430$i*9)|0; + $234 = HEAP32[$a$5$lcssa$i>>2]|0; + $cmp433$515$i = ($234>>>0)<(10); + if ($cmp433$515$i) { + $a$8$i = $a$5$lcssa$i;$d$4$i = $d$2$lcssa$i;$e$4$i = $mul431$i; + break; + } else { + $e$2517$i = $mul431$i;$i$2516$i = 10; + } + while(1) { + $mul437$i = ($i$2516$i*10)|0; + $inc438$i = (($e$2517$i) + 1)|0; + $cmp433$i = ($234>>>0)<($mul437$i>>>0); + if ($cmp433$i) { + $a$8$i = $a$5$lcssa$i;$d$4$i = $d$2$lcssa$i;$e$4$i = $inc438$i; + break; + } else { + $e$2517$i = $inc438$i;$i$2516$i = $mul437$i; + } + } + } + } while(0); + $add$ptr442$i = ((($d$4$i)) + 4|0); + $cmp443$i = ($z$3$lcssa$i>>>0)>($add$ptr442$i>>>0); + $add$ptr442$z$3$i = $cmp443$i ? $add$ptr442$i : $z$3$lcssa$i; + $a$9$ph$i = $a$8$i;$e$5$ph$i = $e$4$i;$z$7$ph$i = $add$ptr442$z$3$i; + } else { + $a$9$ph$i = $a$3$lcssa$i;$e$5$ph$i = $e$1$i;$z$7$ph$i = $z$3$lcssa$i; + } + $sub626$le$i = (0 - ($e$5$ph$i))|0; + $z$7$i = $z$7$ph$i; + while(1) { + $cmp450$i = ($z$7$i>>>0)>($a$9$ph$i>>>0); + if (!($cmp450$i)) { + $cmp450$lcssa$i = 0;$z$7$i$lcssa = $z$7$i; + break; + } + $arrayidx453$i = ((($z$7$i)) + -4|0); + $235 = HEAP32[$arrayidx453$i>>2]|0; + $lnot455$i = ($235|0)==(0); + if ($lnot455$i) { + $z$7$i = $arrayidx453$i; + } else { + $cmp450$lcssa$i = 1;$z$7$i$lcssa = $z$7$i; + break; + } + } + do { + if ($cmp338$i) { + $236 = $tobool341$i&1; + $inc468$i = $236 ^ 1; + $$p$inc468$i = (($inc468$i) + ($$p$i))|0; + $cmp470$i = ($$p$inc468$i|0)>($e$5$ph$i|0); + $cmp473$i = ($e$5$ph$i|0)>(-5); + $or$cond2$i = $cmp470$i & $cmp473$i; + if ($or$cond2$i) { + $dec476$i = (($t$0) + -1)|0; + $add477$neg$i = (($$p$inc468$i) + -1)|0; + $sub478$i = (($add477$neg$i) - ($e$5$ph$i))|0; + $p$addr$2$i = $sub478$i;$t$addr$0$i = $dec476$i; + } else { + $sub480$i = (($t$0) + -2)|0; + $dec481$i = (($$p$inc468$i) + -1)|0; + $p$addr$2$i = $dec481$i;$t$addr$0$i = $sub480$i; + } + $and483$i = $fl$1$and219 & 8; + $tobool484$i = ($and483$i|0)==(0); + if (!($tobool484$i)) { + $and610$pre$phi$iZ2D = $and483$i;$p$addr$3$i = $p$addr$2$i;$t$addr$1$i = $t$addr$0$i; + break; + } + do { + if ($cmp450$lcssa$i) { + $arrayidx489$i = ((($z$7$i$lcssa)) + -4|0); + $237 = HEAP32[$arrayidx489$i>>2]|0; + $tobool490$i = ($237|0)==(0); + if ($tobool490$i) { + $j$2$i = 9; + break; + } + $rem494$510$i = (($237>>>0) % 10)&-1; + $cmp495$511$i = ($rem494$510$i|0)==(0); + if ($cmp495$511$i) { + $i$3512$i = 10;$j$1513$i = 0; + } else { + $j$2$i = 0; + break; + } + while(1) { + $mul499$i = ($i$3512$i*10)|0; + $inc500$i = (($j$1513$i) + 1)|0; + $rem494$i = (($237>>>0) % ($mul499$i>>>0))&-1; + $cmp495$i = ($rem494$i|0)==(0); + if ($cmp495$i) { + $i$3512$i = $mul499$i;$j$1513$i = $inc500$i; + } else { + $j$2$i = $inc500$i; + break; + } + } + } else { + $j$2$i = 9; + } + } while(0); + $or504$i = $t$addr$0$i | 32; + $cmp505$i = ($or504$i|0)==(102); + $sub$ptr$lhs$cast508$i = $z$7$i$lcssa; + $sub$ptr$sub510$i = (($sub$ptr$lhs$cast508$i) - ($sub$ptr$rhs$cast345$i))|0; + $sub$ptr$div511$i = $sub$ptr$sub510$i >> 2; + $238 = ($sub$ptr$div511$i*9)|0; + $mul513$i = (($238) + -9)|0; + if ($cmp505$i) { + $sub514$i = (($mul513$i) - ($j$2$i))|0; + $cmp515$i = ($sub514$i|0)<(0); + $$sub514$i = $cmp515$i ? 0 : $sub514$i; + $cmp528$i = ($p$addr$2$i|0)<($$sub514$i|0); + $p$addr$2$$sub514398$i = $cmp528$i ? $p$addr$2$i : $$sub514$i; + $and610$pre$phi$iZ2D = 0;$p$addr$3$i = $p$addr$2$$sub514398$i;$t$addr$1$i = $t$addr$0$i; + break; + } else { + $add561$i = (($mul513$i) + ($e$5$ph$i))|0; + $sub562$i = (($add561$i) - ($j$2$i))|0; + $cmp563$i = ($sub562$i|0)<(0); + $$sub562$i = $cmp563$i ? 0 : $sub562$i; + $cmp577$i = ($p$addr$2$i|0)<($$sub562$i|0); + $p$addr$2$$sub562399$i = $cmp577$i ? $p$addr$2$i : $$sub562$i; + $and610$pre$phi$iZ2D = 0;$p$addr$3$i = $p$addr$2$$sub562399$i;$t$addr$1$i = $t$addr$0$i; + break; + } + } else { + $$pre567$i = $fl$1$and219 & 8; + $and610$pre$phi$iZ2D = $$pre567$i;$p$addr$3$i = $$p$i;$t$addr$1$i = $t$0; + } + } while(0); + $239 = $p$addr$3$i | $and610$pre$phi$iZ2D; + $240 = ($239|0)!=(0); + $lor$ext$i = $240&1; + $or613$i = $t$addr$1$i | 32; + $cmp614$i = ($or613$i|0)==(102); + if ($cmp614$i) { + $cmp617$i = ($e$5$ph$i|0)>(0); + $add620$i = $cmp617$i ? $e$5$ph$i : 0; + $estr$2$i = 0;$sub$ptr$sub650$pn$i = $add620$i; + } else { + $cmp623$i = ($e$5$ph$i|0)<(0); + $cond629$i = $cmp623$i ? $sub626$le$i : $e$5$ph$i; + $241 = ($cond629$i|0)<(0); + $242 = $241 << 31 >> 31; + $243 = (_fmt_u($cond629$i,$242,$arrayidx$i$236)|0); + $sub$ptr$rhs$cast634$504$i = $243; + $sub$ptr$sub635$505$i = (($sub$ptr$lhs$cast160$i) - ($sub$ptr$rhs$cast634$504$i))|0; + $cmp636$506$i = ($sub$ptr$sub635$505$i|0)<(2); + if ($cmp636$506$i) { + $estr$1507$i = $243; + while(1) { + $incdec$ptr639$i = ((($estr$1507$i)) + -1|0); + HEAP8[$incdec$ptr639$i>>0] = 48; + $sub$ptr$rhs$cast634$i = $incdec$ptr639$i; + $sub$ptr$sub635$i = (($sub$ptr$lhs$cast160$i) - ($sub$ptr$rhs$cast634$i))|0; + $cmp636$i = ($sub$ptr$sub635$i|0)<(2); + if ($cmp636$i) { + $estr$1507$i = $incdec$ptr639$i; + } else { + $estr$1$lcssa$i = $incdec$ptr639$i; + break; + } + } + } else { + $estr$1$lcssa$i = $243; + } + $244 = $e$5$ph$i >> 31; + $245 = $244 & 2; + $246 = (($245) + 43)|0; + $conv644$i = $246&255; + $incdec$ptr645$i = ((($estr$1$lcssa$i)) + -1|0); + HEAP8[$incdec$ptr645$i>>0] = $conv644$i; + $conv646$i = $t$addr$1$i&255; + $incdec$ptr647$i = ((($estr$1$lcssa$i)) + -2|0); + HEAP8[$incdec$ptr647$i>>0] = $conv646$i; + $sub$ptr$rhs$cast649$i = $incdec$ptr647$i; + $sub$ptr$sub650$i = (($sub$ptr$lhs$cast160$i) - ($sub$ptr$rhs$cast649$i))|0; + $estr$2$i = $incdec$ptr647$i;$sub$ptr$sub650$pn$i = $sub$ptr$sub650$i; + } + $add608$i = (($pl$0$i) + 1)|0; + $add612$i = (($add608$i) + ($p$addr$3$i))|0; + $l$1$i = (($add612$i) + ($lor$ext$i))|0; + $add653$i = (($l$1$i) + ($sub$ptr$sub650$pn$i))|0; + _pad($f,32,$w$1,$add653$i,$fl$1$and219); + $247 = HEAP32[$f>>2]|0; + $and$i$436$i = $247 & 32; + $tobool$i$437$i = ($and$i$436$i|0)==(0); + if ($tobool$i$437$i) { + (___fwritex($prefix$0$i,$pl$0$i,$f)|0); + } + $xor655$i = $fl$1$and219 ^ 65536; + _pad($f,48,$w$1,$add653$i,$xor655$i); + do { + if ($cmp614$i) { + $cmp660$i = ($a$9$ph$i>>>0)>($arraydecay208$add$ptr213$i>>>0); + $r$0$a$9$i = $cmp660$i ? $arraydecay208$add$ptr213$i : $a$9$ph$i; + $d$5494$i = $r$0$a$9$i; + while(1) { + $248 = HEAP32[$d$5494$i>>2]|0; + $249 = (_fmt_u($248,0,$add$ptr671$i)|0); + $cmp673$i = ($d$5494$i|0)==($r$0$a$9$i|0); + do { + if ($cmp673$i) { + $cmp686$i = ($249|0)==($add$ptr671$i|0); + if (!($cmp686$i)) { + $s668$1$i = $249; + break; + } + HEAP8[$incdec$ptr689$i>>0] = 48; + $s668$1$i = $incdec$ptr689$i; + } else { + $cmp678$491$i = ($249>>>0)>($buf$i>>>0); + if ($cmp678$491$i) { + $s668$0492$i = $249; + } else { + $s668$1$i = $249; + break; + } + while(1) { + $incdec$ptr681$i = ((($s668$0492$i)) + -1|0); + HEAP8[$incdec$ptr681$i>>0] = 48; + $cmp678$i = ($incdec$ptr681$i>>>0)>($buf$i>>>0); + if ($cmp678$i) { + $s668$0492$i = $incdec$ptr681$i; + } else { + $s668$1$i = $incdec$ptr681$i; + break; + } + } + } + } while(0); + $250 = HEAP32[$f>>2]|0; + $and$i$442$i = $250 & 32; + $tobool$i$443$i = ($and$i$442$i|0)==(0); + if ($tobool$i$443$i) { + $sub$ptr$rhs$cast695$i = $s668$1$i; + $sub$ptr$sub696$i = (($sub$ptr$lhs$cast694$i) - ($sub$ptr$rhs$cast695$i))|0; + (___fwritex($s668$1$i,$sub$ptr$sub696$i,$f)|0); + } + $incdec$ptr698$i = ((($d$5494$i)) + 4|0); + $cmp665$i = ($incdec$ptr698$i>>>0)>($arraydecay208$add$ptr213$i>>>0); + if ($cmp665$i) { + $incdec$ptr698$i$lcssa = $incdec$ptr698$i; + break; + } else { + $d$5494$i = $incdec$ptr698$i; + } + } + $251 = ($239|0)==(0); + do { + if (!($251)) { + $252 = HEAP32[$f>>2]|0; + $and$i$448$i = $252 & 32; + $tobool$i$449$i = ($and$i$448$i|0)==(0); + if (!($tobool$i$449$i)) { + break; + } + (___fwritex(4143,1,$f)|0); + } + } while(0); + $cmp707$486$i = ($incdec$ptr698$i$lcssa>>>0)<($z$7$i$lcssa>>>0); + $cmp710$487$i = ($p$addr$3$i|0)>(0); + $253 = $cmp710$487$i & $cmp707$486$i; + if ($253) { + $d$6488$i = $incdec$ptr698$i$lcssa;$p$addr$4489$i = $p$addr$3$i; + while(1) { + $254 = HEAP32[$d$6488$i>>2]|0; + $255 = (_fmt_u($254,0,$add$ptr671$i)|0); + $cmp722$483$i = ($255>>>0)>($buf$i>>>0); + if ($cmp722$483$i) { + $s715$0484$i = $255; + while(1) { + $incdec$ptr725$i = ((($s715$0484$i)) + -1|0); + HEAP8[$incdec$ptr725$i>>0] = 48; + $cmp722$i = ($incdec$ptr725$i>>>0)>($buf$i>>>0); + if ($cmp722$i) { + $s715$0484$i = $incdec$ptr725$i; + } else { + $s715$0$lcssa$i = $incdec$ptr725$i; + break; + } + } + } else { + $s715$0$lcssa$i = $255; + } + $256 = HEAP32[$f>>2]|0; + $and$i$454$i = $256 & 32; + $tobool$i$455$i = ($and$i$454$i|0)==(0); + if ($tobool$i$455$i) { + $cmp727$i = ($p$addr$4489$i|0)>(9); + $cond732$i = $cmp727$i ? 9 : $p$addr$4489$i; + (___fwritex($s715$0$lcssa$i,$cond732$i,$f)|0); + } + $incdec$ptr734$i = ((($d$6488$i)) + 4|0); + $sub735$i = (($p$addr$4489$i) + -9)|0; + $cmp707$i = ($incdec$ptr734$i>>>0)<($z$7$i$lcssa>>>0); + $cmp710$i = ($p$addr$4489$i|0)>(9); + $257 = $cmp710$i & $cmp707$i; + if ($257) { + $d$6488$i = $incdec$ptr734$i;$p$addr$4489$i = $sub735$i; + } else { + $p$addr$4$lcssa$i = $sub735$i; + break; + } + } + } else { + $p$addr$4$lcssa$i = $p$addr$3$i; + } + $add737$i = (($p$addr$4$lcssa$i) + 9)|0; + _pad($f,48,$add737$i,9,0); + } else { + $add$ptr742$i = ((($a$9$ph$i)) + 4|0); + $z$7$add$ptr742$i = $cmp450$lcssa$i ? $z$7$i$lcssa : $add$ptr742$i; + $cmp748$499$i = ($p$addr$3$i|0)>(-1); + if ($cmp748$499$i) { + $tobool781$i = ($and610$pre$phi$iZ2D|0)==(0); + $d$7500$i = $a$9$ph$i;$p$addr$5501$i = $p$addr$3$i; + while(1) { + $258 = HEAP32[$d$7500$i>>2]|0; + $259 = (_fmt_u($258,0,$add$ptr671$i)|0); + $cmp760$i = ($259|0)==($add$ptr671$i|0); + if ($cmp760$i) { + HEAP8[$incdec$ptr689$i>>0] = 48; + $s753$0$i = $incdec$ptr689$i; + } else { + $s753$0$i = $259; + } + $cmp765$i = ($d$7500$i|0)==($a$9$ph$i|0); + do { + if ($cmp765$i) { + $incdec$ptr776$i = ((($s753$0$i)) + 1|0); + $260 = HEAP32[$f>>2]|0; + $and$i$460$i = $260 & 32; + $tobool$i$461$i = ($and$i$460$i|0)==(0); + if ($tobool$i$461$i) { + (___fwritex($s753$0$i,1,$f)|0); + } + $cmp777$i = ($p$addr$5501$i|0)<(1); + $or$cond401$i = $tobool781$i & $cmp777$i; + if ($or$cond401$i) { + $s753$2$i = $incdec$ptr776$i; + break; + } + $261 = HEAP32[$f>>2]|0; + $and$i$466$i = $261 & 32; + $tobool$i$467$i = ($and$i$466$i|0)==(0); + if (!($tobool$i$467$i)) { + $s753$2$i = $incdec$ptr776$i; + break; + } + (___fwritex(4143,1,$f)|0); + $s753$2$i = $incdec$ptr776$i; + } else { + $cmp770$495$i = ($s753$0$i>>>0)>($buf$i>>>0); + if ($cmp770$495$i) { + $s753$1496$i = $s753$0$i; + } else { + $s753$2$i = $s753$0$i; + break; + } + while(1) { + $incdec$ptr773$i = ((($s753$1496$i)) + -1|0); + HEAP8[$incdec$ptr773$i>>0] = 48; + $cmp770$i = ($incdec$ptr773$i>>>0)>($buf$i>>>0); + if ($cmp770$i) { + $s753$1496$i = $incdec$ptr773$i; + } else { + $s753$2$i = $incdec$ptr773$i; + break; + } + } + } + } while(0); + $sub$ptr$rhs$cast788$i = $s753$2$i; + $sub$ptr$sub789$i = (($sub$ptr$lhs$cast694$i) - ($sub$ptr$rhs$cast788$i))|0; + $262 = HEAP32[$f>>2]|0; + $and$i$472$i = $262 & 32; + $tobool$i$473$i = ($and$i$472$i|0)==(0); + if ($tobool$i$473$i) { + $cmp790$i = ($p$addr$5501$i|0)>($sub$ptr$sub789$i|0); + $cond800$i = $cmp790$i ? $sub$ptr$sub789$i : $p$addr$5501$i; + (___fwritex($s753$2$i,$cond800$i,$f)|0); + } + $sub806$i = (($p$addr$5501$i) - ($sub$ptr$sub789$i))|0; + $incdec$ptr808$i = ((($d$7500$i)) + 4|0); + $cmp745$i = ($incdec$ptr808$i>>>0)<($z$7$add$ptr742$i>>>0); + $cmp748$i = ($sub806$i|0)>(-1); + $263 = $cmp745$i & $cmp748$i; + if ($263) { + $d$7500$i = $incdec$ptr808$i;$p$addr$5501$i = $sub806$i; + } else { + $p$addr$5$lcssa$i = $sub806$i; + break; + } + } + } else { + $p$addr$5$lcssa$i = $p$addr$3$i; + } + $add810$i = (($p$addr$5$lcssa$i) + 18)|0; + _pad($f,48,$add810$i,18,0); + $264 = HEAP32[$f>>2]|0; + $and$i$i = $264 & 32; + $tobool$i$i = ($and$i$i|0)==(0); + if (!($tobool$i$i)) { + break; + } + $sub$ptr$rhs$cast812$i = $estr$2$i; + $sub$ptr$sub813$i = (($sub$ptr$lhs$cast160$i) - ($sub$ptr$rhs$cast812$i))|0; + (___fwritex($estr$2$i,$sub$ptr$sub813$i,$f)|0); + } + } while(0); + $xor816$i = $fl$1$and219 ^ 8192; + _pad($f,32,$w$1,$add653$i,$xor816$i); + $cmp818$i = ($add653$i|0)<($w$1|0); + $w$add653$i = $cmp818$i ? $w$1 : $add653$i; + $retval$0$i = $w$add653$i; + } else { + $and36$i = $t$0 & 32; + $tobool37$i = ($and36$i|0)!=(0); + $cond$i = $tobool37$i ? 4127 : 4131; + $cmp38$i = ($y$addr$0$i != $y$addr$0$i) | (0.0 != 0.0); + $cond43$i = $tobool37$i ? 4135 : 4139; + $pl$1$i = $cmp38$i ? 0 : $pl$0$i; + $s35$0$i = $cmp38$i ? $cond43$i : $cond$i; + $add$i$239 = (($pl$1$i) + 3)|0; + _pad($f,32,$w$1,$add$i$239,$and219); + $193 = HEAP32[$f>>2]|0; + $and$i$406$i = $193 & 32; + $tobool$i$407$i = ($and$i$406$i|0)==(0); + if ($tobool$i$407$i) { + (___fwritex($prefix$0$i,$pl$1$i,$f)|0); + $$pre$i = HEAP32[$f>>2]|0; + $194 = $$pre$i; + } else { + $194 = $193; + } + $and$i$412$i = $194 & 32; + $tobool$i$413$i = ($and$i$412$i|0)==(0); + if ($tobool$i$413$i) { + (___fwritex($s35$0$i,3,$f)|0); + } + $xor$i = $fl$1$and219 ^ 8192; + _pad($f,32,$w$1,$add$i$239,$xor$i); + $cmp48$i = ($add$i$239|0)<($w$1|0); + $cond53$i = $cmp48$i ? $w$1 : $add$i$239; + $retval$0$i = $cond53$i; + } + } while(0); + $cnt$0 = $cnt$1;$incdec$ptr169275 = $incdec$ptr169$lcssa;$l$0 = $retval$0$i;$l10n$0 = $l10n$3; + continue L1; + break; + } + default: { + $a$2 = $incdec$ptr169275;$fl$6 = $fl$1$and219;$p$5 = $p$0;$pl$2 = 0;$prefix$2 = 4091;$z$2 = $add$ptr205; + } + } + } while(0); + L308: do { + if ((label|0) == 64) { + label = 0; + $90 = $arg; + $91 = $90; + $92 = HEAP32[$91>>2]|0; + $93 = (($90) + 4)|0; + $94 = $93; + $95 = HEAP32[$94>>2]|0; + $and249 = $t$1 & 32; + $96 = ($92|0)==(0); + $97 = ($95|0)==(0); + $98 = $96 & $97; + if ($98) { + $a$0 = $add$ptr205;$fl$4 = $fl$3;$p$2 = $p$1;$pl$1 = 0;$prefix$1 = 4091; + label = 77; + } else { + $101 = $95;$99 = $92;$s$addr$06$i = $add$ptr205; + while(1) { + $idxprom$i = $99 & 15; + $arrayidx$i = (4075 + ($idxprom$i)|0); + $100 = HEAP8[$arrayidx$i>>0]|0; + $conv$4$i$211 = $100&255; + $or$i = $conv$4$i$211 | $and249; + $conv1$i = $or$i&255; + $incdec$ptr$i$212 = ((($s$addr$06$i)) + -1|0); + HEAP8[$incdec$ptr$i$212>>0] = $conv1$i; + $102 = (_bitshift64Lshr(($99|0),($101|0),4)|0); + $103 = tempRet0; + $104 = ($102|0)==(0); + $105 = ($103|0)==(0); + $106 = $104 & $105; + if ($106) { + $incdec$ptr$i$212$lcssa = $incdec$ptr$i$212; + break; + } else { + $101 = $103;$99 = $102;$s$addr$06$i = $incdec$ptr$i$212; + } + } + $107 = $arg; + $108 = $107; + $109 = HEAP32[$108>>2]|0; + $110 = (($107) + 4)|0; + $111 = $110; + $112 = HEAP32[$111>>2]|0; + $113 = ($109|0)==(0); + $114 = ($112|0)==(0); + $115 = $113 & $114; + $and254 = $fl$3 & 8; + $tobool255 = ($and254|0)==(0); + $or$cond193 = $tobool255 | $115; + if ($or$cond193) { + $a$0 = $incdec$ptr$i$212$lcssa;$fl$4 = $fl$3;$p$2 = $p$1;$pl$1 = 0;$prefix$1 = 4091; + label = 77; + } else { + $shr = $t$1 >> 4; + $add$ptr257 = (4091 + ($shr)|0); + $a$0 = $incdec$ptr$i$212$lcssa;$fl$4 = $fl$3;$p$2 = $p$1;$pl$1 = 2;$prefix$1 = $add$ptr257; + label = 77; + } + } + } + else if ((label|0) == 76) { + label = 0; + $150 = (_fmt_u($148,$149,$add$ptr205)|0); + $a$0 = $150;$fl$4 = $fl$1$and219;$p$2 = $p$0;$pl$1 = $pl$0;$prefix$1 = $prefix$0; + label = 77; + } + else if ((label|0) == 82) { + label = 0; + $call356 = (_memchr($a$1,0,$p$0)|0); + $tobool357 = ($call356|0)==(0|0); + $sub$ptr$lhs$cast361 = $call356; + $sub$ptr$rhs$cast362 = $a$1; + $sub$ptr$sub363 = (($sub$ptr$lhs$cast361) - ($sub$ptr$rhs$cast362))|0; + $add$ptr359 = (($a$1) + ($p$0)|0); + $z$1 = $tobool357 ? $add$ptr359 : $call356; + $p$3 = $tobool357 ? $p$0 : $sub$ptr$sub363; + $a$2 = $a$1;$fl$6 = $and219;$p$5 = $p$3;$pl$2 = 0;$prefix$2 = 4091;$z$2 = $z$1; + } + else if ((label|0) == 86) { + label = 0; + $176 = HEAP32[$arg>>2]|0; + $i$0316 = 0;$l$1315 = 0;$ws$0317 = $176; + while(1) { + $177 = HEAP32[$ws$0317>>2]|0; + $tobool380 = ($177|0)==(0); + if ($tobool380) { + $i$0$lcssa = $i$0316;$l$2 = $l$1315; + break; + } + $call384 = (_wctomb($mb,$177)|0); + $cmp385 = ($call384|0)<(0); + $sub389 = (($p$4365) - ($i$0316))|0; + $cmp390 = ($call384>>>0)>($sub389>>>0); + $or$cond195 = $cmp385 | $cmp390; + if ($or$cond195) { + $i$0$lcssa = $i$0316;$l$2 = $call384; + break; + } + $incdec$ptr383 = ((($ws$0317)) + 4|0); + $add395 = (($call384) + ($i$0316))|0; + $cmp377 = ($p$4365>>>0)>($add395>>>0); + if ($cmp377) { + $i$0316 = $add395;$l$1315 = $call384;$ws$0317 = $incdec$ptr383; + } else { + $i$0$lcssa = $add395;$l$2 = $call384; + break; + } + } + $cmp397 = ($l$2|0)<(0); + if ($cmp397) { + $retval$0 = -1; + break L1; + } + _pad($f,32,$w$1,$i$0$lcssa,$fl$1$and219); + $cmp404$324 = ($i$0$lcssa|0)==(0); + if ($cmp404$324) { + $i$0$lcssa368 = 0; + label = 98; + } else { + $178 = HEAP32[$arg>>2]|0; + $i$1325 = 0;$ws$1326 = $178; + while(1) { + $179 = HEAP32[$ws$1326>>2]|0; + $tobool407 = ($179|0)==(0); + if ($tobool407) { + $i$0$lcssa368 = $i$0$lcssa; + label = 98; + break L308; + } + $incdec$ptr410 = ((($ws$1326)) + 4|0); + $call411 = (_wctomb($mb,$179)|0); + $add412 = (($call411) + ($i$1325))|0; + $cmp413 = ($add412|0)>($i$0$lcssa|0); + if ($cmp413) { + $i$0$lcssa368 = $i$0$lcssa; + label = 98; + break L308; + } + $180 = HEAP32[$f>>2]|0; + $and$i$231 = $180 & 32; + $tobool$i$232 = ($and$i$231|0)==(0); + if ($tobool$i$232) { + (___fwritex($mb,$call411,$f)|0); + } + $cmp404 = ($add412>>>0)<($i$0$lcssa>>>0); + if ($cmp404) { + $i$1325 = $add412;$ws$1326 = $incdec$ptr410; + } else { + $i$0$lcssa368 = $i$0$lcssa; + label = 98; + break; + } + } + } + } + } while(0); + if ((label|0) == 98) { + label = 0; + $xor = $fl$1$and219 ^ 8192; + _pad($f,32,$w$1,$i$0$lcssa368,$xor); + $cmp421 = ($w$1|0)>($i$0$lcssa368|0); + $cond426 = $cmp421 ? $w$1 : $i$0$lcssa368; + $cnt$0 = $cnt$1;$incdec$ptr169275 = $incdec$ptr169$lcssa;$l$0 = $cond426;$l10n$0 = $l10n$3; + continue; + } + if ((label|0) == 77) { + label = 0; + $cmp306 = ($p$2|0)>(-1); + $and309 = $fl$4 & -65537; + $and309$fl$4 = $cmp306 ? $and309 : $fl$4; + $151 = $arg; + $152 = $151; + $153 = HEAP32[$152>>2]|0; + $154 = (($151) + 4)|0; + $155 = $154; + $156 = HEAP32[$155>>2]|0; + $157 = ($153|0)!=(0); + $158 = ($156|0)!=(0); + $159 = $157 | $158; + $tobool314 = ($p$2|0)!=(0); + $or$cond = $tobool314 | $159; + if ($or$cond) { + $sub$ptr$rhs$cast318 = $a$0; + $sub$ptr$sub319 = (($sub$ptr$lhs$cast317) - ($sub$ptr$rhs$cast318))|0; + $160 = $159&1; + $lnot$ext = $160 ^ 1; + $add322 = (($lnot$ext) + ($sub$ptr$sub319))|0; + $cmp323 = ($p$2|0)>($add322|0); + $p$2$add322 = $cmp323 ? $p$2 : $add322; + $a$2 = $a$0;$fl$6 = $and309$fl$4;$p$5 = $p$2$add322;$pl$2 = $pl$1;$prefix$2 = $prefix$1;$z$2 = $add$ptr205; + } else { + $a$2 = $add$ptr205;$fl$6 = $and309$fl$4;$p$5 = 0;$pl$2 = $pl$1;$prefix$2 = $prefix$1;$z$2 = $add$ptr205; + } + } + $sub$ptr$lhs$cast431 = $z$2; + $sub$ptr$rhs$cast432 = $a$2; + $sub$ptr$sub433 = (($sub$ptr$lhs$cast431) - ($sub$ptr$rhs$cast432))|0; + $cmp434 = ($p$5|0)<($sub$ptr$sub433|0); + $sub$ptr$sub433$p$5 = $cmp434 ? $sub$ptr$sub433 : $p$5; + $add441 = (($pl$2) + ($sub$ptr$sub433$p$5))|0; + $cmp442 = ($w$1|0)<($add441|0); + $w$2 = $cmp442 ? $add441 : $w$1; + _pad($f,32,$w$2,$add441,$fl$6); + $265 = HEAP32[$f>>2]|0; + $and$i$244 = $265 & 32; + $tobool$i$245 = ($and$i$244|0)==(0); + if ($tobool$i$245) { + (___fwritex($prefix$2,$pl$2,$f)|0); + } + $xor449 = $fl$6 ^ 65536; + _pad($f,48,$w$2,$add441,$xor449); + _pad($f,48,$sub$ptr$sub433$p$5,$sub$ptr$sub433,0); + $266 = HEAP32[$f>>2]|0; + $and$i$216 = $266 & 32; + $tobool$i$217 = ($and$i$216|0)==(0); + if ($tobool$i$217) { + (___fwritex($a$2,$sub$ptr$sub433,$f)|0); + } + $xor457 = $fl$6 ^ 8192; + _pad($f,32,$w$2,$add441,$xor457); + $cnt$0 = $cnt$1;$incdec$ptr169275 = $incdec$ptr169$lcssa;$l$0 = $w$2;$l10n$0 = $l10n$3; + } + L343: do { + if ((label|0) == 242) { + $tobool459 = ($f|0)==(0|0); + if ($tobool459) { + $tobool462 = ($l10n$0$lcssa|0)==(0); + if ($tobool462) { + $retval$0 = 0; + } else { + $i$2299 = 1; + while(1) { + $arrayidx469 = (($nl_type) + ($i$2299<<2)|0); + $267 = HEAP32[$arrayidx469>>2]|0; + $tobool470 = ($267|0)==(0); + if ($tobool470) { + $i$2299$lcssa = $i$2299; + break; + } + $add$ptr473 = (($nl_arg) + ($i$2299<<3)|0); + _pop_arg_336($add$ptr473,$267,$ap); + $inc = (($i$2299) + 1)|0; + $cmp466 = ($inc|0)<(10); + if ($cmp466) { + $i$2299 = $inc; + } else { + $retval$0 = 1; + break L343; + } + } + $cmp478$295 = ($i$2299$lcssa|0)<(10); + if ($cmp478$295) { + $i$3296 = $i$2299$lcssa; + while(1) { + $arrayidx481 = (($nl_type) + ($i$3296<<2)|0); + $268 = HEAP32[$arrayidx481>>2]|0; + $lnot483 = ($268|0)==(0); + $inc488 = (($i$3296) + 1)|0; + if (!($lnot483)) { + $retval$0 = -1; + break L343; + } + $cmp478 = ($inc488|0)<(10); + if ($cmp478) { + $i$3296 = $inc488; + } else { + $retval$0 = 1; + break; + } + } + } else { + $retval$0 = 1; + } + } + } else { + $retval$0 = $cnt$1$lcssa; + } + } + } while(0); + STACKTOP = sp;return ($retval$0|0); +} +function _pop_arg_336($arg,$type,$ap) { + $arg = $arg|0; + $type = $type|0; + $ap = $ap|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0.0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0.0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0; + var $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0; + var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0; + var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0; + var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0; + var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $arglist_current = 0, $arglist_current11 = 0, $arglist_current14 = 0, $arglist_current17 = 0, $arglist_current2 = 0, $arglist_current20 = 0, $arglist_current23 = 0, $arglist_current26 = 0, $arglist_current5 = 0; + var $arglist_current8 = 0, $arglist_next = 0, $arglist_next12 = 0, $arglist_next15 = 0, $arglist_next18 = 0, $arglist_next21 = 0, $arglist_next24 = 0, $arglist_next27 = 0, $arglist_next3 = 0, $arglist_next6 = 0, $arglist_next9 = 0, $cmp = 0, $conv12 = 0, $conv17$mask = 0, $conv22 = 0, $conv27$mask = 0, $expanded = 0, $expanded28 = 0, $expanded30 = 0, $expanded31 = 0; + var $expanded32 = 0, $expanded34 = 0, $expanded35 = 0, $expanded37 = 0, $expanded38 = 0, $expanded39 = 0, $expanded41 = 0, $expanded42 = 0, $expanded44 = 0, $expanded45 = 0, $expanded46 = 0, $expanded48 = 0, $expanded49 = 0, $expanded51 = 0, $expanded52 = 0, $expanded53 = 0, $expanded55 = 0, $expanded56 = 0, $expanded58 = 0, $expanded59 = 0; + var $expanded60 = 0, $expanded62 = 0, $expanded63 = 0, $expanded65 = 0, $expanded66 = 0, $expanded67 = 0, $expanded69 = 0, $expanded70 = 0, $expanded72 = 0, $expanded73 = 0, $expanded74 = 0, $expanded76 = 0, $expanded77 = 0, $expanded79 = 0, $expanded80 = 0, $expanded81 = 0, $expanded83 = 0, $expanded84 = 0, $expanded86 = 0, $expanded87 = 0; + var $expanded88 = 0, $expanded90 = 0, $expanded91 = 0, $expanded93 = 0, $expanded94 = 0, $expanded95 = 0, label = 0, sp = 0; + sp = STACKTOP; + $cmp = ($type>>>0)>(20); + L1: do { + if (!($cmp)) { + do { + switch ($type|0) { + case 9: { + $arglist_current = HEAP32[$ap>>2]|0; + $0 = $arglist_current; + $1 = ((0) + 4|0); + $expanded28 = $1; + $expanded = (($expanded28) - 1)|0; + $2 = (($0) + ($expanded))|0; + $3 = ((0) + 4|0); + $expanded32 = $3; + $expanded31 = (($expanded32) - 1)|0; + $expanded30 = $expanded31 ^ -1; + $4 = $2 & $expanded30; + $5 = $4; + $6 = HEAP32[$5>>2]|0; + $arglist_next = ((($5)) + 4|0); + HEAP32[$ap>>2] = $arglist_next; + HEAP32[$arg>>2] = $6; + break L1; + break; + } + case 10: { + $arglist_current2 = HEAP32[$ap>>2]|0; + $7 = $arglist_current2; + $8 = ((0) + 4|0); + $expanded35 = $8; + $expanded34 = (($expanded35) - 1)|0; + $9 = (($7) + ($expanded34))|0; + $10 = ((0) + 4|0); + $expanded39 = $10; + $expanded38 = (($expanded39) - 1)|0; + $expanded37 = $expanded38 ^ -1; + $11 = $9 & $expanded37; + $12 = $11; + $13 = HEAP32[$12>>2]|0; + $arglist_next3 = ((($12)) + 4|0); + HEAP32[$ap>>2] = $arglist_next3; + $14 = ($13|0)<(0); + $15 = $14 << 31 >> 31; + $16 = $arg; + $17 = $16; + HEAP32[$17>>2] = $13; + $18 = (($16) + 4)|0; + $19 = $18; + HEAP32[$19>>2] = $15; + break L1; + break; + } + case 11: { + $arglist_current5 = HEAP32[$ap>>2]|0; + $20 = $arglist_current5; + $21 = ((0) + 4|0); + $expanded42 = $21; + $expanded41 = (($expanded42) - 1)|0; + $22 = (($20) + ($expanded41))|0; + $23 = ((0) + 4|0); + $expanded46 = $23; + $expanded45 = (($expanded46) - 1)|0; + $expanded44 = $expanded45 ^ -1; + $24 = $22 & $expanded44; + $25 = $24; + $26 = HEAP32[$25>>2]|0; + $arglist_next6 = ((($25)) + 4|0); + HEAP32[$ap>>2] = $arglist_next6; + $27 = $arg; + $28 = $27; + HEAP32[$28>>2] = $26; + $29 = (($27) + 4)|0; + $30 = $29; + HEAP32[$30>>2] = 0; + break L1; + break; + } + case 12: { + $arglist_current8 = HEAP32[$ap>>2]|0; + $31 = $arglist_current8; + $32 = ((0) + 8|0); + $expanded49 = $32; + $expanded48 = (($expanded49) - 1)|0; + $33 = (($31) + ($expanded48))|0; + $34 = ((0) + 8|0); + $expanded53 = $34; + $expanded52 = (($expanded53) - 1)|0; + $expanded51 = $expanded52 ^ -1; + $35 = $33 & $expanded51; + $36 = $35; + $37 = $36; + $38 = $37; + $39 = HEAP32[$38>>2]|0; + $40 = (($37) + 4)|0; + $41 = $40; + $42 = HEAP32[$41>>2]|0; + $arglist_next9 = ((($36)) + 8|0); + HEAP32[$ap>>2] = $arglist_next9; + $43 = $arg; + $44 = $43; + HEAP32[$44>>2] = $39; + $45 = (($43) + 4)|0; + $46 = $45; + HEAP32[$46>>2] = $42; + break L1; + break; + } + case 13: { + $arglist_current11 = HEAP32[$ap>>2]|0; + $47 = $arglist_current11; + $48 = ((0) + 4|0); + $expanded56 = $48; + $expanded55 = (($expanded56) - 1)|0; + $49 = (($47) + ($expanded55))|0; + $50 = ((0) + 4|0); + $expanded60 = $50; + $expanded59 = (($expanded60) - 1)|0; + $expanded58 = $expanded59 ^ -1; + $51 = $49 & $expanded58; + $52 = $51; + $53 = HEAP32[$52>>2]|0; + $arglist_next12 = ((($52)) + 4|0); + HEAP32[$ap>>2] = $arglist_next12; + $conv12 = $53&65535; + $54 = $conv12 << 16 >> 16; + $55 = ($54|0)<(0); + $56 = $55 << 31 >> 31; + $57 = $arg; + $58 = $57; + HEAP32[$58>>2] = $54; + $59 = (($57) + 4)|0; + $60 = $59; + HEAP32[$60>>2] = $56; + break L1; + break; + } + case 14: { + $arglist_current14 = HEAP32[$ap>>2]|0; + $61 = $arglist_current14; + $62 = ((0) + 4|0); + $expanded63 = $62; + $expanded62 = (($expanded63) - 1)|0; + $63 = (($61) + ($expanded62))|0; + $64 = ((0) + 4|0); + $expanded67 = $64; + $expanded66 = (($expanded67) - 1)|0; + $expanded65 = $expanded66 ^ -1; + $65 = $63 & $expanded65; + $66 = $65; + $67 = HEAP32[$66>>2]|0; + $arglist_next15 = ((($66)) + 4|0); + HEAP32[$ap>>2] = $arglist_next15; + $conv17$mask = $67 & 65535; + $68 = $arg; + $69 = $68; + HEAP32[$69>>2] = $conv17$mask; + $70 = (($68) + 4)|0; + $71 = $70; + HEAP32[$71>>2] = 0; + break L1; + break; + } + case 15: { + $arglist_current17 = HEAP32[$ap>>2]|0; + $72 = $arglist_current17; + $73 = ((0) + 4|0); + $expanded70 = $73; + $expanded69 = (($expanded70) - 1)|0; + $74 = (($72) + ($expanded69))|0; + $75 = ((0) + 4|0); + $expanded74 = $75; + $expanded73 = (($expanded74) - 1)|0; + $expanded72 = $expanded73 ^ -1; + $76 = $74 & $expanded72; + $77 = $76; + $78 = HEAP32[$77>>2]|0; + $arglist_next18 = ((($77)) + 4|0); + HEAP32[$ap>>2] = $arglist_next18; + $conv22 = $78&255; + $79 = $conv22 << 24 >> 24; + $80 = ($79|0)<(0); + $81 = $80 << 31 >> 31; + $82 = $arg; + $83 = $82; + HEAP32[$83>>2] = $79; + $84 = (($82) + 4)|0; + $85 = $84; + HEAP32[$85>>2] = $81; + break L1; + break; + } + case 16: { + $arglist_current20 = HEAP32[$ap>>2]|0; + $86 = $arglist_current20; + $87 = ((0) + 4|0); + $expanded77 = $87; + $expanded76 = (($expanded77) - 1)|0; + $88 = (($86) + ($expanded76))|0; + $89 = ((0) + 4|0); + $expanded81 = $89; + $expanded80 = (($expanded81) - 1)|0; + $expanded79 = $expanded80 ^ -1; + $90 = $88 & $expanded79; + $91 = $90; + $92 = HEAP32[$91>>2]|0; + $arglist_next21 = ((($91)) + 4|0); + HEAP32[$ap>>2] = $arglist_next21; + $conv27$mask = $92 & 255; + $93 = $arg; + $94 = $93; + HEAP32[$94>>2] = $conv27$mask; + $95 = (($93) + 4)|0; + $96 = $95; + HEAP32[$96>>2] = 0; + break L1; + break; + } + case 17: { + $arglist_current23 = HEAP32[$ap>>2]|0; + $97 = $arglist_current23; + $98 = ((0) + 8|0); + $expanded84 = $98; + $expanded83 = (($expanded84) - 1)|0; + $99 = (($97) + ($expanded83))|0; + $100 = ((0) + 8|0); + $expanded88 = $100; + $expanded87 = (($expanded88) - 1)|0; + $expanded86 = $expanded87 ^ -1; + $101 = $99 & $expanded86; + $102 = $101; + $103 = +HEAPF64[$102>>3]; + $arglist_next24 = ((($102)) + 8|0); + HEAP32[$ap>>2] = $arglist_next24; + HEAPF64[$arg>>3] = $103; + break L1; + break; + } + case 18: { + $arglist_current26 = HEAP32[$ap>>2]|0; + $104 = $arglist_current26; + $105 = ((0) + 8|0); + $expanded91 = $105; + $expanded90 = (($expanded91) - 1)|0; + $106 = (($104) + ($expanded90))|0; + $107 = ((0) + 8|0); + $expanded95 = $107; + $expanded94 = (($expanded95) - 1)|0; + $expanded93 = $expanded94 ^ -1; + $108 = $106 & $expanded93; + $109 = $108; + $110 = +HEAPF64[$109>>3]; + $arglist_next27 = ((($109)) + 8|0); + HEAP32[$ap>>2] = $arglist_next27; + HEAPF64[$arg>>3] = $110; + break L1; + break; + } + default: { + break L1; + } + } + } while(0); + } + } while(0); + return; +} +function _fmt_u($0,$1,$s) { + $0 = $0|0; + $1 = $1|0; + $s = $s|0; + var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0; + var $9 = 0, $add5 = 0, $conv6 = 0, $div9 = 0, $incdec$ptr = 0, $incdec$ptr$lcssa = 0, $incdec$ptr7 = 0, $rem4 = 0, $s$addr$0$lcssa = 0, $s$addr$013 = 0, $s$addr$1$lcssa = 0, $s$addr$19 = 0, $tobool$8 = 0, $x$addr$0$lcssa$off0 = 0, $y$010 = 0, label = 0, sp = 0; + sp = STACKTOP; + $2 = ($1>>>0)>(0); + $3 = ($0>>>0)>(4294967295); + $4 = ($1|0)==(0); + $5 = $4 & $3; + $6 = $2 | $5; + if ($6) { + $7 = $0;$8 = $1;$s$addr$013 = $s; + while(1) { + $9 = (___uremdi3(($7|0),($8|0),10,0)|0); + $10 = tempRet0; + $11 = $9 | 48; + $12 = $11&255; + $incdec$ptr = ((($s$addr$013)) + -1|0); + HEAP8[$incdec$ptr>>0] = $12; + $13 = (___udivdi3(($7|0),($8|0),10,0)|0); + $14 = tempRet0; + $15 = ($8>>>0)>(9); + $16 = ($7>>>0)>(4294967295); + $17 = ($8|0)==(9); + $18 = $17 & $16; + $19 = $15 | $18; + if ($19) { + $7 = $13;$8 = $14;$s$addr$013 = $incdec$ptr; + } else { + $21 = $13;$22 = $14;$incdec$ptr$lcssa = $incdec$ptr; + break; + } + } + $s$addr$0$lcssa = $incdec$ptr$lcssa;$x$addr$0$lcssa$off0 = $21; + } else { + $s$addr$0$lcssa = $s;$x$addr$0$lcssa$off0 = $0; + } + $tobool$8 = ($x$addr$0$lcssa$off0|0)==(0); + if ($tobool$8) { + $s$addr$1$lcssa = $s$addr$0$lcssa; + } else { + $s$addr$19 = $s$addr$0$lcssa;$y$010 = $x$addr$0$lcssa$off0; + while(1) { + $rem4 = (($y$010>>>0) % 10)&-1; + $add5 = $rem4 | 48; + $conv6 = $add5&255; + $incdec$ptr7 = ((($s$addr$19)) + -1|0); + HEAP8[$incdec$ptr7>>0] = $conv6; + $div9 = (($y$010>>>0) / 10)&-1; + $20 = ($y$010>>>0)<(10); + if ($20) { + $s$addr$1$lcssa = $incdec$ptr7; + break; + } else { + $s$addr$19 = $incdec$ptr7;$y$010 = $div9; + } + } + } + return ($s$addr$1$lcssa|0); +} +function _pad($f,$c,$w,$l,$fl) { + $f = $f|0; + $c = $c|0; + $w = $w|0; + $l = $l|0; + $fl = $fl|0; + var $$pre = 0, $0 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $and = 0, $and$i = 0, $and$i$15 = 0, $cmp = 0, $cmp1 = 0, $cmp3 = 0, $cmp3$14 = 0, $cond = 0, $l$addr$0$lcssa21 = 0, $l$addr$017 = 0, $or$cond = 0, $pad = 0, $sub = 0, $sub5 = 0; + var $tobool = 0, $tobool$i = 0, $tobool$i$16 = 0, $tobool$i18 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 256|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $pad = sp; + $and = $fl & 73728; + $tobool = ($and|0)==(0); + $cmp = ($w|0)>($l|0); + $or$cond = $cmp & $tobool; + do { + if ($or$cond) { + $sub = (($w) - ($l))|0; + $cmp1 = ($sub>>>0)>(256); + $cond = $cmp1 ? 256 : $sub; + _memset(($pad|0),($c|0),($cond|0))|0; + $cmp3$14 = ($sub>>>0)>(255); + $0 = HEAP32[$f>>2]|0; + $and$i$15 = $0 & 32; + $tobool$i$16 = ($and$i$15|0)==(0); + if ($cmp3$14) { + $1 = (($w) - ($l))|0; + $4 = $0;$l$addr$017 = $sub;$tobool$i18 = $tobool$i$16; + while(1) { + if ($tobool$i18) { + (___fwritex($pad,256,$f)|0); + $$pre = HEAP32[$f>>2]|0; + $2 = $$pre; + } else { + $2 = $4; + } + $sub5 = (($l$addr$017) + -256)|0; + $cmp3 = ($sub5>>>0)>(255); + $and$i = $2 & 32; + $tobool$i = ($and$i|0)==(0); + if ($cmp3) { + $4 = $2;$l$addr$017 = $sub5;$tobool$i18 = $tobool$i; + } else { + break; + } + } + $3 = $1 & 255; + if ($tobool$i) { + $l$addr$0$lcssa21 = $3; + } else { + break; + } + } else { + if ($tobool$i$16) { + $l$addr$0$lcssa21 = $sub; + } else { + break; + } + } + (___fwritex($pad,$l$addr$0$lcssa21,$f)|0); + } + } while(0); + STACKTOP = sp;return; +} +function _malloc($bytes) { + $bytes = $bytes|0; + var $$lcssa = 0, $$lcssa290 = 0, $$pre = 0, $$pre$i = 0, $$pre$i$177 = 0, $$pre$i$56$i = 0, $$pre$i$i = 0, $$pre$phi$i$178Z2D = 0, $$pre$phi$i$57$iZ2D = 0, $$pre$phi$i$iZ2D = 0, $$pre$phi$iZ2D = 0, $$pre$phiZ2D = 0, $$pre241 = 0, $$pre5$i$i = 0, $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0; + var $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0; + var $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0; + var $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0; + var $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0; + var $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0; + var $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $21 = 0, $22 = 0, $23 = 0; + var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0; + var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0; + var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0; + var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0; + var $97 = 0, $98 = 0, $99 = 0, $F$0$i$i = 0, $F104$0 = 0, $F197$0$i = 0, $F224$0$i$i = 0, $F290$0$i = 0, $I252$0$i$i = 0, $I316$0$i = 0, $I57$0$i$i = 0, $K105$0$i$i = 0, $K305$0$i$i = 0, $K373$0$i = 0, $R$1$i = 0, $R$1$i$168 = 0, $R$1$i$168$lcssa = 0, $R$1$i$i = 0, $R$1$i$i$lcssa = 0, $R$1$i$lcssa = 0; + var $R$3$i = 0, $R$3$i$171 = 0, $R$3$i$i = 0, $RP$1$i = 0, $RP$1$i$167 = 0, $RP$1$i$167$lcssa = 0, $RP$1$i$i = 0, $RP$1$i$i$lcssa = 0, $RP$1$i$lcssa = 0, $T$0$i = 0, $T$0$i$58$i = 0, $T$0$i$58$i$lcssa = 0, $T$0$i$58$i$lcssa283 = 0, $T$0$i$i = 0, $T$0$i$i$lcssa = 0, $T$0$i$i$lcssa284 = 0, $T$0$i$lcssa = 0, $T$0$i$lcssa293 = 0, $add$i = 0, $add$i$146 = 0; + var $add$i$180 = 0, $add$i$i = 0, $add$ptr = 0, $add$ptr$i = 0, $add$ptr$i$1$i$i = 0, $add$ptr$i$11$i = 0, $add$ptr$i$161 = 0, $add$ptr$i$193 = 0, $add$ptr$i$21$i = 0, $add$ptr$i$32$i = 0, $add$ptr$i$i = 0, $add$ptr$i$i$i = 0, $add$ptr$i$i$i$lcssa = 0, $add$ptr14$i$i = 0, $add$ptr15$i$i = 0, $add$ptr16$i$i = 0, $add$ptr166 = 0, $add$ptr169 = 0, $add$ptr17$i$i = 0, $add$ptr178 = 0; + var $add$ptr181$i = 0, $add$ptr182 = 0, $add$ptr189$i = 0, $add$ptr190$i = 0, $add$ptr193 = 0, $add$ptr199 = 0, $add$ptr2$i$i = 0, $add$ptr205$i$i = 0, $add$ptr212$i$i = 0, $add$ptr225$i = 0, $add$ptr227$i = 0, $add$ptr24$i$i = 0, $add$ptr262$i = 0, $add$ptr269$i = 0, $add$ptr273$i = 0, $add$ptr282$i = 0, $add$ptr3$i$i = 0, $add$ptr30$i$i = 0, $add$ptr369$i$i = 0, $add$ptr4$i$26$i = 0; + var $add$ptr4$i$37$i = 0, $add$ptr4$i$i = 0, $add$ptr4$i$i$i = 0, $add$ptr441$i = 0, $add$ptr5$i$i = 0, $add$ptr6$i$30$i = 0, $add$ptr6$i$i = 0, $add$ptr6$i$i$i = 0, $add$ptr7$i$i = 0, $add$ptr8$i122$i = 0, $add$ptr95 = 0, $add$ptr98 = 0, $add10$i = 0, $add101$i = 0, $add110$i = 0, $add13$i = 0, $add14$i = 0, $add140$i = 0, $add144 = 0, $add150$i = 0; + var $add17$i = 0, $add17$i$183 = 0, $add177$i = 0, $add18$i = 0, $add19$i = 0, $add2 = 0, $add20$i = 0, $add206$i$i = 0, $add212$i = 0, $add215$i = 0, $add22$i = 0, $add246$i = 0, $add26$i$i = 0, $add268$i = 0, $add269$i$i = 0, $add274$i$i = 0, $add278$i$i = 0, $add280$i$i = 0, $add283$i$i = 0, $add337$i = 0; + var $add342$i = 0, $add346$i = 0, $add348$i = 0, $add351$i = 0, $add46$i = 0, $add50 = 0, $add51$i = 0, $add54 = 0, $add54$i = 0, $add58 = 0, $add62 = 0, $add64 = 0, $add74$i$i = 0, $add77$i = 0, $add78$i = 0, $add79$i$i = 0, $add8 = 0, $add82$i = 0, $add83$i$i = 0, $add85$i$i = 0; + var $add86$i = 0, $add88$i$i = 0, $add9$i = 0, $add90$i = 0, $add92$i = 0, $and = 0, $and$i = 0, $and$i$12$i = 0, $and$i$14$i = 0, $and$i$143 = 0, $and$i$22$i = 0, $and$i$33$i = 0, $and$i$i = 0, $and$i$i$i = 0, $and100$i = 0, $and103$i = 0, $and104$i = 0, $and106 = 0, $and11$i = 0, $and119$i$i = 0; + var $and12$i = 0, $and13$i = 0, $and13$i$i = 0, $and133$i$i = 0, $and14 = 0, $and145 = 0, $and17$i = 0, $and194$i = 0, $and194$i$204 = 0, $and199$i = 0, $and209$i$i = 0, $and21$i = 0, $and21$i$149 = 0, $and227$i$i = 0, $and236$i = 0, $and264$i$i = 0, $and268$i$i = 0, $and273$i$i = 0, $and282$i$i = 0, $and29$i = 0; + var $and292$i = 0, $and295$i$i = 0, $and3$i = 0, $and3$i$24$i = 0, $and3$i$35$i = 0, $and3$i$i = 0, $and3$i$i$i = 0, $and30$i = 0, $and318$i$i = 0, $and32$i = 0, $and32$i$i = 0, $and33$i$i = 0, $and331$i = 0, $and336$i = 0, $and341$i = 0, $and350$i = 0, $and363$i = 0, $and37$i$i = 0, $and387$i = 0, $and4 = 0; + var $and40$i$i = 0, $and41 = 0, $and42$i = 0, $and43 = 0, $and46 = 0, $and49 = 0, $and49$i = 0, $and49$i$i = 0, $and53 = 0, $and57 = 0, $and6$i = 0, $and6$i$38$i = 0, $and6$i$i = 0, $and61 = 0, $and64$i = 0, $and68$i = 0, $and69$i$i = 0, $and7 = 0, $and7$i$i = 0, $and73$i = 0; + var $and73$i$i = 0, $and74 = 0, $and77$i = 0, $and78$i$i = 0, $and8$i = 0, $and80$i = 0, $and81$i = 0, $and85$i = 0, $and87$i$i = 0, $and89$i = 0, $and9$i = 0, $and96$i$i = 0, $arrayidx = 0, $arrayidx$i = 0, $arrayidx$i$150 = 0, $arrayidx$i$20$i = 0, $arrayidx$i$48$i = 0, $arrayidx$i$i = 0, $arrayidx103 = 0, $arrayidx103$i$i = 0; + var $arrayidx106$i = 0, $arrayidx107$i$i = 0, $arrayidx113$i = 0, $arrayidx113$i$159 = 0, $arrayidx121$i = 0, $arrayidx123$i$i = 0, $arrayidx126$i$i = 0, $arrayidx126$i$i$lcssa = 0, $arrayidx137$i = 0, $arrayidx143$i$i = 0, $arrayidx148$i = 0, $arrayidx151$i = 0, $arrayidx151$i$i = 0, $arrayidx154$i = 0, $arrayidx155$i = 0, $arrayidx161$i = 0, $arrayidx165$i = 0, $arrayidx165$i$169 = 0, $arrayidx178$i$i = 0, $arrayidx184$i = 0; + var $arrayidx184$i$i = 0, $arrayidx195$i$i = 0, $arrayidx196$i = 0, $arrayidx204$i = 0, $arrayidx212$i = 0, $arrayidx223$i$i = 0, $arrayidx228$i = 0, $arrayidx23$i = 0, $arrayidx239$i = 0, $arrayidx245$i = 0, $arrayidx256$i = 0, $arrayidx27$i = 0, $arrayidx287$i$i = 0, $arrayidx289$i = 0, $arrayidx290$i$i = 0, $arrayidx325$i$i = 0, $arrayidx325$i$i$lcssa = 0, $arrayidx355$i = 0, $arrayidx358$i = 0, $arrayidx394$i = 0; + var $arrayidx394$i$lcssa = 0, $arrayidx40$i = 0, $arrayidx44$i = 0, $arrayidx61$i = 0, $arrayidx65$i = 0, $arrayidx66 = 0, $arrayidx71$i = 0, $arrayidx75$i = 0, $arrayidx91$i$i = 0, $arrayidx92$i$i = 0, $arrayidx94$i = 0, $arrayidx94$i$156 = 0, $arrayidx96$i$i = 0, $base$i$i$lcssa = 0, $base226$i$lcssa = 0, $bk = 0, $bk$i = 0, $bk$i$163 = 0, $bk$i$46$i = 0, $bk$i$i = 0; + var $bk102$i$i = 0, $bk122 = 0, $bk124 = 0, $bk136$i = 0, $bk139$i$i = 0, $bk158$i$i = 0, $bk161$i$i = 0, $bk218$i = 0, $bk220$i = 0, $bk246$i$i = 0, $bk248$i$i = 0, $bk302$i$i = 0, $bk311$i = 0, $bk313$i = 0, $bk338$i$i = 0, $bk357$i$i = 0, $bk360$i$i = 0, $bk370$i = 0, $bk407$i = 0, $bk429$i = 0; + var $bk43$i$i = 0, $bk432$i = 0, $bk47$i = 0, $bk55$i$i = 0, $bk67$i$i = 0, $bk74$i$i = 0, $bk78 = 0, $bk82$i$i = 0, $br$2$ph$i = 0, $call$i$i = 0, $call107$i = 0, $call131$i = 0, $call132$i = 0, $call275$i = 0, $call37$i = 0, $call6$i$i = 0, $call68$i = 0, $call83$i = 0, $child$i$i = 0, $child166$i$i = 0; + var $child289$i$i = 0, $child357$i = 0, $cmp = 0, $cmp$i = 0, $cmp$i$13$i = 0, $cmp$i$140 = 0, $cmp$i$15$i = 0, $cmp$i$179 = 0, $cmp$i$2$i$i = 0, $cmp$i$23$i = 0, $cmp$i$34$i = 0, $cmp$i$9$i = 0, $cmp$i$i$i = 0, $cmp1 = 0, $cmp1$i = 0, $cmp1$i$i = 0, $cmp10 = 0, $cmp100$i$i = 0, $cmp102$i = 0, $cmp104$i$i = 0; + var $cmp105$i = 0, $cmp106$i$i = 0, $cmp107$i = 0, $cmp107$i$157 = 0, $cmp108$i = 0, $cmp108$i$i = 0, $cmp112$i$i = 0, $cmp113 = 0, $cmp114$i = 0, $cmp116$i = 0, $cmp118$i = 0, $cmp119$i = 0, $cmp12$i = 0, $cmp120$i$53$i = 0, $cmp120$i$i = 0, $cmp121$i = 0, $cmp123$i = 0, $cmp124$i$i = 0, $cmp126$i = 0, $cmp127$i = 0; + var $cmp128 = 0, $cmp128$i = 0, $cmp128$i$i = 0, $cmp130$i = 0, $cmp133$i = 0, $cmp133$i$196 = 0, $cmp133$i$i = 0, $cmp135$i = 0, $cmp137$i = 0, $cmp137$i$197 = 0, $cmp137$i$i = 0, $cmp138$i = 0, $cmp139 = 0, $cmp140$i = 0, $cmp141$not$i = 0, $cmp142$i = 0, $cmp144$i$i = 0, $cmp146 = 0, $cmp15 = 0, $cmp15$i = 0; + var $cmp151$i = 0, $cmp152$i = 0, $cmp153$i$i = 0, $cmp155$i = 0, $cmp156 = 0, $cmp156$i = 0, $cmp156$i$i = 0, $cmp157$i = 0, $cmp159$i = 0, $cmp159$i$199 = 0, $cmp16 = 0, $cmp160$i$i = 0, $cmp162 = 0, $cmp162$i = 0, $cmp162$i$200 = 0, $cmp166$i = 0, $cmp168$i$i = 0, $cmp171$i = 0, $cmp172$i$i = 0, $cmp174$i = 0; + var $cmp180$i = 0, $cmp185$i = 0, $cmp185$i$i = 0, $cmp186 = 0, $cmp186$i = 0, $cmp189$i$i = 0, $cmp19$i = 0, $cmp190$i = 0, $cmp191$i = 0, $cmp198$i = 0, $cmp2$i$i = 0, $cmp2$i$i$i = 0, $cmp20$i$i = 0, $cmp203$i = 0, $cmp205$i = 0, $cmp208$i = 0, $cmp209$i = 0, $cmp21$i = 0, $cmp215$i$i = 0, $cmp217$i = 0; + var $cmp218$i = 0, $cmp221$i = 0, $cmp224$i = 0, $cmp228$i = 0, $cmp229$i = 0, $cmp233$i = 0, $cmp236$i$i = 0, $cmp24$i = 0, $cmp24$i$i = 0, $cmp246$i = 0, $cmp250$i = 0, $cmp254$i$i = 0, $cmp257$i = 0, $cmp258$i$i = 0, $cmp26$i = 0, $cmp265$i = 0, $cmp27$i$i = 0, $cmp28$i = 0, $cmp28$i$i = 0, $cmp284$i = 0; + var $cmp29 = 0, $cmp3$i$i = 0, $cmp301$i = 0, $cmp306$i$i = 0, $cmp31 = 0, $cmp319$i = 0, $cmp319$i$i = 0, $cmp32$i = 0, $cmp32$i$185 = 0, $cmp323$i = 0, $cmp327$i$i = 0, $cmp33$i = 0, $cmp332$i$i = 0, $cmp34$i = 0, $cmp34$i$i = 0, $cmp35$i = 0, $cmp350$i$i = 0, $cmp36$i = 0, $cmp36$i$i = 0, $cmp374$i = 0; + var $cmp38$i = 0, $cmp38$i$i = 0, $cmp388$i = 0, $cmp396$i = 0, $cmp40$i = 0, $cmp401$i = 0, $cmp41$i$i = 0, $cmp42$i$i = 0, $cmp422$i = 0, $cmp43$i = 0, $cmp44$i$i = 0, $cmp45$i = 0, $cmp45$i$155 = 0, $cmp46$i = 0, $cmp46$i$49$i = 0, $cmp46$i$i = 0, $cmp48$i = 0, $cmp49$i = 0, $cmp5 = 0, $cmp51$i = 0; + var $cmp54$i$i = 0, $cmp55$i = 0, $cmp55$i$187 = 0, $cmp57$i = 0, $cmp57$i$188 = 0, $cmp57$i$i = 0, $cmp59$i$i = 0, $cmp60$i = 0, $cmp60$i$i = 0, $cmp62$i = 0, $cmp63$i = 0, $cmp63$i$i = 0, $cmp65$i = 0, $cmp66$i = 0, $cmp66$i$190 = 0, $cmp69$i = 0, $cmp7$i$i = 0, $cmp70 = 0, $cmp72$i = 0, $cmp75$i$i = 0; + var $cmp76 = 0, $cmp76$i = 0, $cmp79 = 0, $cmp81$i = 0, $cmp81$i$191 = 0, $cmp81$i$i = 0, $cmp83$i$i = 0, $cmp85$i = 0, $cmp86$i$i = 0, $cmp89$i = 0, $cmp9$i$i = 0, $cmp90$i = 0, $cmp91$i = 0, $cmp93$i = 0, $cmp95$i = 0, $cmp96$i = 0, $cmp97$7$i = 0, $cmp97$i = 0, $cmp97$i$i = 0, $cmp99 = 0; + var $cond = 0, $cond$i = 0, $cond$i$16$i = 0, $cond$i$25$i = 0, $cond$i$36$i = 0, $cond$i$i = 0, $cond$i$i$i = 0, $cond$v$0$i = 0, $cond115$i$i = 0, $cond13$i$i = 0, $cond15$i$i = 0, $cond2$i = 0, $cond2$i$i = 0, $cond3$i = 0, $cond315$i$i = 0, $cond383$i = 0, $cond4$i = 0, $exitcond$i$i = 0, $fd$i = 0, $fd$i$164 = 0; + var $fd$i$i = 0, $fd103$i$i = 0, $fd123 = 0, $fd139$i = 0, $fd140$i$i = 0, $fd148$i$i = 0, $fd160$i$i = 0, $fd219$i = 0, $fd247$i$i = 0, $fd303$i$i = 0, $fd312$i = 0, $fd339$i$i = 0, $fd344$i$i = 0, $fd359$i$i = 0, $fd371$i = 0, $fd408$i = 0, $fd416$i = 0, $fd431$i = 0, $fd50$i = 0, $fd54$i$i = 0; + var $fd59$i$i = 0, $fd68$pre$phi$i$iZ2D = 0, $fd69 = 0, $fd78$i$i = 0, $fd85$i$i = 0, $fd9 = 0, $head = 0, $head$i = 0, $head$i$154 = 0, $head$i$17$i = 0, $head$i$29$i = 0, $head$i$42$i = 0, $head$i$i = 0, $head$i$i$i = 0, $head118$i$i = 0, $head168 = 0, $head173 = 0, $head177 = 0, $head179 = 0, $head179$i = 0; + var $head182$i = 0, $head187$i = 0, $head189$i = 0, $head195 = 0, $head198 = 0, $head208$i$i = 0, $head211$i$i = 0, $head23$i$i = 0, $head25 = 0, $head265$i = 0, $head268$i = 0, $head271$i = 0, $head274$i = 0, $head279$i = 0, $head281$i = 0, $head29$i = 0, $head29$i$i = 0, $head317$i$i = 0, $head32$i$i = 0, $head34$i$i = 0; + var $head386$i = 0, $head7$i$31$i = 0, $head7$i$i = 0, $head7$i$i$i = 0, $head94 = 0, $head97 = 0, $head99$i = 0, $i$01$i$i = 0, $idx$0$i = 0, $inc$i$i = 0, $index$i = 0, $index$i$172 = 0, $index$i$54$i = 0, $index$i$i = 0, $index288$i$i = 0, $index356$i = 0, $nb$0 = 0, $neg = 0, $neg$i = 0, $neg$i$173 = 0; + var $neg$i$182 = 0, $neg$i$i = 0, $neg103$i = 0, $neg13 = 0, $neg132$i$i = 0, $neg48$i = 0, $neg73 = 0, $next$i = 0, $next$i$i = 0, $next$i$i$i = 0, $next231$i = 0, $not$cmp150$i$i = 0, $not$cmp346$i$i = 0, $not$cmp418$i = 0, $oldfirst$0$i$i = 0, $or$cond$i = 0, $or$cond$i$189 = 0, $or$cond1$i = 0, $or$cond1$i$184 = 0, $or$cond2$i = 0; + var $or$cond3$i = 0, $or$cond4$i = 0, $or$cond5$i = 0, $or$cond7$i = 0, $or$cond8$i = 0, $or$cond98$i = 0, $or$i = 0, $or$i$195 = 0, $or$i$28$i = 0, $or$i$i = 0, $or$i$i$i = 0, $or101$i$i = 0, $or110 = 0, $or167 = 0, $or172 = 0, $or176 = 0, $or178$i = 0, $or180 = 0, $or183$i = 0, $or186$i = 0; + var $or188$i = 0, $or19$i$i = 0, $or194 = 0, $or197 = 0, $or204$i = 0, $or210$i$i = 0, $or22$i$i = 0, $or23 = 0, $or232$i$i = 0, $or26 = 0, $or264$i = 0, $or267$i = 0, $or270$i = 0, $or275$i = 0, $or278$i = 0, $or28$i$i = 0, $or280$i = 0, $or297$i = 0, $or300$i$i = 0, $or33$i$i = 0; + var $or368$i = 0, $or40 = 0, $or44$i$i = 0, $or93 = 0, $or96 = 0, $p$0$i$i = 0, $parent$i = 0, $parent$i$162 = 0, $parent$i$51$i = 0, $parent$i$i = 0, $parent135$i = 0, $parent138$i$i = 0, $parent149$i = 0, $parent162$i$i = 0, $parent165$i$i = 0, $parent166$i = 0, $parent179$i$i = 0, $parent196$i$i = 0, $parent226$i = 0, $parent240$i = 0; + var $parent257$i = 0, $parent301$i$i = 0, $parent337$i$i = 0, $parent361$i$i = 0, $parent369$i = 0, $parent406$i = 0, $parent433$i = 0, $qsize$0$i$i = 0, $retval$0 = 0, $rsize$0$i = 0, $rsize$0$i$152 = 0, $rsize$0$i$lcssa = 0, $rsize$1$i = 0, $rsize$3$i = 0, $rsize$4$lcssa$i = 0, $rsize$49$i = 0, $rst$0$i = 0, $rst$1$i = 0, $sflags193$i = 0, $sflags235$i = 0; + var $shl = 0, $shl$i = 0, $shl$i$144 = 0, $shl$i$19$i = 0, $shl$i$47$i = 0, $shl$i$i = 0, $shl102 = 0, $shl105 = 0, $shl116$i$i = 0, $shl12 = 0, $shl127$i$i = 0, $shl131$i$i = 0, $shl15$i = 0, $shl18$i = 0, $shl192$i = 0, $shl195$i = 0, $shl198$i = 0, $shl22 = 0, $shl221$i$i = 0, $shl226$i$i = 0; + var $shl265$i$i = 0, $shl270$i$i = 0, $shl276$i$i = 0, $shl279$i$i = 0, $shl288$i = 0, $shl291$i = 0, $shl294$i$i = 0, $shl31$i = 0, $shl316$i$i = 0, $shl326$i$i = 0, $shl333$i = 0, $shl338$i = 0, $shl344$i = 0, $shl347$i = 0, $shl35 = 0, $shl362$i = 0, $shl37 = 0, $shl384$i = 0, $shl39$i$i = 0, $shl395$i = 0; + var $shl48$i$i = 0, $shl52$i = 0, $shl60$i = 0, $shl65 = 0, $shl70$i$i = 0, $shl72 = 0, $shl75$i$i = 0, $shl81$i$i = 0, $shl84$i$i = 0, $shl9$i = 0, $shl90 = 0, $shl95$i$i = 0, $shr = 0, $shr$i = 0, $shr$i$139 = 0, $shr$i$45$i = 0, $shr$i$i = 0, $shr101 = 0, $shr11$i = 0, $shr11$i$147 = 0; + var $shr110$i$i = 0, $shr12$i = 0, $shr123$i$i = 0, $shr15$i = 0, $shr16$i = 0, $shr16$i$148 = 0, $shr19$i = 0, $shr194$i = 0, $shr20$i = 0, $shr214$i$i = 0, $shr253$i$i = 0, $shr263$i$i = 0, $shr267$i$i = 0, $shr27$i = 0, $shr272$i$i = 0, $shr277$i$i = 0, $shr281$i$i = 0, $shr283$i = 0, $shr3 = 0, $shr310$i$i = 0; + var $shr318$i = 0, $shr322$i$i = 0, $shr330$i = 0, $shr335$i = 0, $shr340$i = 0, $shr345$i = 0, $shr349$i = 0, $shr378$i = 0, $shr391$i = 0, $shr4$i = 0, $shr41$i = 0, $shr45 = 0, $shr47 = 0, $shr48 = 0, $shr5$i = 0, $shr5$i$142 = 0, $shr51 = 0, $shr52 = 0, $shr55 = 0, $shr56 = 0; + var $shr58$i$i = 0, $shr59 = 0, $shr60 = 0, $shr63 = 0, $shr68$i$i = 0, $shr7$i = 0, $shr7$i$145 = 0, $shr72$i = 0, $shr72$i$i = 0, $shr75$i = 0, $shr76$i = 0, $shr77$i$i = 0, $shr79$i = 0, $shr8$i = 0, $shr80$i = 0, $shr82$i$i = 0, $shr83$i = 0, $shr84$i = 0, $shr86$i$i = 0, $shr87$i = 0; + var $shr88$i = 0, $shr91$i = 0, $size$i$i = 0, $size$i$i$i = 0, $size$i$i$lcssa = 0, $size188$i = 0, $size188$i$lcssa = 0, $size245$i = 0, $sizebits$0$i = 0, $sizebits$0$shl52$i = 0, $sp$0$i$i = 0, $sp$0$i$i$i = 0, $sp$0108$i = 0, $sp$0108$i$lcssa = 0, $sp$1107$i = 0, $sp$1107$i$lcssa = 0, $ssize$0$i = 0, $ssize$2$ph$i = 0, $ssize$5$i = 0, $sub = 0; + var $sub$i = 0, $sub$i$138 = 0, $sub$i$181 = 0, $sub$i$i = 0, $sub$ptr$lhs$cast$i = 0, $sub$ptr$lhs$cast$i$39$i = 0, $sub$ptr$lhs$cast$i$i = 0, $sub$ptr$rhs$cast$i = 0, $sub$ptr$rhs$cast$i$40$i = 0, $sub$ptr$rhs$cast$i$i = 0, $sub$ptr$sub$i = 0, $sub$ptr$sub$i$41$i = 0, $sub$ptr$sub$i$i = 0, $sub10$i = 0, $sub101$i = 0, $sub101$rsize$4$i = 0, $sub112$i = 0, $sub113$i$i = 0, $sub118$i = 0, $sub14$i = 0; + var $sub16$i$i = 0, $sub160 = 0, $sub172$i = 0, $sub18$i$i = 0, $sub190 = 0, $sub2$i = 0, $sub22$i = 0, $sub260$i = 0, $sub262$i$i = 0, $sub266$i$i = 0, $sub271$i$i = 0, $sub275$i$i = 0, $sub30$i = 0, $sub31$i = 0, $sub31$rsize$0$i = 0, $sub313$i$i = 0, $sub329$i = 0, $sub33$i = 0, $sub334$i = 0, $sub339$i = 0; + var $sub343$i = 0, $sub381$i = 0, $sub4$i = 0, $sub41$i = 0, $sub42 = 0, $sub44 = 0, $sub5$i$27$i = 0, $sub5$i$i = 0, $sub5$i$i$i = 0, $sub50$i = 0, $sub6$i = 0, $sub63$i = 0, $sub67$i = 0, $sub67$i$i = 0, $sub70$i = 0, $sub71$i$i = 0, $sub76$i$i = 0, $sub80$i$i = 0, $sub91 = 0, $sub99$i = 0; + var $t$0$i = 0, $t$0$i$151 = 0, $t$2$i = 0, $t$4$ph$i = 0, $t$4$v$4$i = 0, $t$48$i = 0, $tbase$796$i = 0, $tobool$i$i = 0, $tobool107 = 0, $tobool195$i = 0, $tobool200$i = 0, $tobool228$i$i = 0, $tobool237$i = 0, $tobool293$i = 0, $tobool296$i$i = 0, $tobool30$i = 0, $tobool364$i = 0, $tobool97$i$i = 0, $tsize$795$i = 0, $v$0$i = 0; + var $v$0$i$153 = 0, $v$0$i$lcssa = 0, $v$1$i = 0, $v$3$i = 0, $v$4$lcssa$i = 0, $v$410$i = 0, $xor$i$i = 0, label = 0, sp = 0; + sp = STACKTOP; + $cmp = ($bytes>>>0)<(245); + do { + if ($cmp) { + $cmp1 = ($bytes>>>0)<(11); + $add2 = (($bytes) + 11)|0; + $and = $add2 & -8; + $cond = $cmp1 ? 16 : $and; + $shr = $cond >>> 3; + $0 = HEAP32[44]|0; + $shr3 = $0 >>> $shr; + $and4 = $shr3 & 3; + $cmp5 = ($and4|0)==(0); + if (!($cmp5)) { + $neg = $shr3 & 1; + $and7 = $neg ^ 1; + $add8 = (($and7) + ($shr))|0; + $shl = $add8 << 1; + $arrayidx = (216 + ($shl<<2)|0); + $1 = ((($arrayidx)) + 8|0); + $2 = HEAP32[$1>>2]|0; + $fd9 = ((($2)) + 8|0); + $3 = HEAP32[$fd9>>2]|0; + $cmp10 = ($arrayidx|0)==($3|0); + do { + if ($cmp10) { + $shl12 = 1 << $add8; + $neg13 = $shl12 ^ -1; + $and14 = $0 & $neg13; + HEAP32[44] = $and14; + } else { + $4 = HEAP32[(192)>>2]|0; + $cmp15 = ($3>>>0)<($4>>>0); + if ($cmp15) { + _abort(); + // unreachable; + } + $bk = ((($3)) + 12|0); + $5 = HEAP32[$bk>>2]|0; + $cmp16 = ($5|0)==($2|0); + if ($cmp16) { + HEAP32[$bk>>2] = $arrayidx; + HEAP32[$1>>2] = $3; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $shl22 = $add8 << 3; + $or23 = $shl22 | 3; + $head = ((($2)) + 4|0); + HEAP32[$head>>2] = $or23; + $add$ptr = (($2) + ($shl22)|0); + $head25 = ((($add$ptr)) + 4|0); + $6 = HEAP32[$head25>>2]|0; + $or26 = $6 | 1; + HEAP32[$head25>>2] = $or26; + $retval$0 = $fd9; + return ($retval$0|0); + } + $7 = HEAP32[(184)>>2]|0; + $cmp29 = ($cond>>>0)>($7>>>0); + if ($cmp29) { + $cmp31 = ($shr3|0)==(0); + if (!($cmp31)) { + $shl35 = $shr3 << $shr; + $shl37 = 2 << $shr; + $sub = (0 - ($shl37))|0; + $or40 = $shl37 | $sub; + $and41 = $shl35 & $or40; + $sub42 = (0 - ($and41))|0; + $and43 = $and41 & $sub42; + $sub44 = (($and43) + -1)|0; + $shr45 = $sub44 >>> 12; + $and46 = $shr45 & 16; + $shr47 = $sub44 >>> $and46; + $shr48 = $shr47 >>> 5; + $and49 = $shr48 & 8; + $add50 = $and49 | $and46; + $shr51 = $shr47 >>> $and49; + $shr52 = $shr51 >>> 2; + $and53 = $shr52 & 4; + $add54 = $add50 | $and53; + $shr55 = $shr51 >>> $and53; + $shr56 = $shr55 >>> 1; + $and57 = $shr56 & 2; + $add58 = $add54 | $and57; + $shr59 = $shr55 >>> $and57; + $shr60 = $shr59 >>> 1; + $and61 = $shr60 & 1; + $add62 = $add58 | $and61; + $shr63 = $shr59 >>> $and61; + $add64 = (($add62) + ($shr63))|0; + $shl65 = $add64 << 1; + $arrayidx66 = (216 + ($shl65<<2)|0); + $8 = ((($arrayidx66)) + 8|0); + $9 = HEAP32[$8>>2]|0; + $fd69 = ((($9)) + 8|0); + $10 = HEAP32[$fd69>>2]|0; + $cmp70 = ($arrayidx66|0)==($10|0); + do { + if ($cmp70) { + $shl72 = 1 << $add64; + $neg73 = $shl72 ^ -1; + $and74 = $0 & $neg73; + HEAP32[44] = $and74; + $13 = $7; + } else { + $11 = HEAP32[(192)>>2]|0; + $cmp76 = ($10>>>0)<($11>>>0); + if ($cmp76) { + _abort(); + // unreachable; + } + $bk78 = ((($10)) + 12|0); + $12 = HEAP32[$bk78>>2]|0; + $cmp79 = ($12|0)==($9|0); + if ($cmp79) { + HEAP32[$bk78>>2] = $arrayidx66; + HEAP32[$8>>2] = $10; + $$pre = HEAP32[(184)>>2]|0; + $13 = $$pre; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $shl90 = $add64 << 3; + $sub91 = (($shl90) - ($cond))|0; + $or93 = $cond | 3; + $head94 = ((($9)) + 4|0); + HEAP32[$head94>>2] = $or93; + $add$ptr95 = (($9) + ($cond)|0); + $or96 = $sub91 | 1; + $head97 = ((($add$ptr95)) + 4|0); + HEAP32[$head97>>2] = $or96; + $add$ptr98 = (($add$ptr95) + ($sub91)|0); + HEAP32[$add$ptr98>>2] = $sub91; + $cmp99 = ($13|0)==(0); + if (!($cmp99)) { + $14 = HEAP32[(196)>>2]|0; + $shr101 = $13 >>> 3; + $shl102 = $shr101 << 1; + $arrayidx103 = (216 + ($shl102<<2)|0); + $15 = HEAP32[44]|0; + $shl105 = 1 << $shr101; + $and106 = $15 & $shl105; + $tobool107 = ($and106|0)==(0); + if ($tobool107) { + $or110 = $15 | $shl105; + HEAP32[44] = $or110; + $$pre241 = ((($arrayidx103)) + 8|0); + $$pre$phiZ2D = $$pre241;$F104$0 = $arrayidx103; + } else { + $16 = ((($arrayidx103)) + 8|0); + $17 = HEAP32[$16>>2]|0; + $18 = HEAP32[(192)>>2]|0; + $cmp113 = ($17>>>0)<($18>>>0); + if ($cmp113) { + _abort(); + // unreachable; + } else { + $$pre$phiZ2D = $16;$F104$0 = $17; + } + } + HEAP32[$$pre$phiZ2D>>2] = $14; + $bk122 = ((($F104$0)) + 12|0); + HEAP32[$bk122>>2] = $14; + $fd123 = ((($14)) + 8|0); + HEAP32[$fd123>>2] = $F104$0; + $bk124 = ((($14)) + 12|0); + HEAP32[$bk124>>2] = $arrayidx103; + } + HEAP32[(184)>>2] = $sub91; + HEAP32[(196)>>2] = $add$ptr95; + $retval$0 = $fd69; + return ($retval$0|0); + } + $19 = HEAP32[(180)>>2]|0; + $cmp128 = ($19|0)==(0); + if ($cmp128) { + $nb$0 = $cond; + } else { + $sub$i = (0 - ($19))|0; + $and$i = $19 & $sub$i; + $sub2$i = (($and$i) + -1)|0; + $shr$i = $sub2$i >>> 12; + $and3$i = $shr$i & 16; + $shr4$i = $sub2$i >>> $and3$i; + $shr5$i = $shr4$i >>> 5; + $and6$i = $shr5$i & 8; + $add$i = $and6$i | $and3$i; + $shr7$i = $shr4$i >>> $and6$i; + $shr8$i = $shr7$i >>> 2; + $and9$i = $shr8$i & 4; + $add10$i = $add$i | $and9$i; + $shr11$i = $shr7$i >>> $and9$i; + $shr12$i = $shr11$i >>> 1; + $and13$i = $shr12$i & 2; + $add14$i = $add10$i | $and13$i; + $shr15$i = $shr11$i >>> $and13$i; + $shr16$i = $shr15$i >>> 1; + $and17$i = $shr16$i & 1; + $add18$i = $add14$i | $and17$i; + $shr19$i = $shr15$i >>> $and17$i; + $add20$i = (($add18$i) + ($shr19$i))|0; + $arrayidx$i = (480 + ($add20$i<<2)|0); + $20 = HEAP32[$arrayidx$i>>2]|0; + $head$i = ((($20)) + 4|0); + $21 = HEAP32[$head$i>>2]|0; + $and21$i = $21 & -8; + $sub22$i = (($and21$i) - ($cond))|0; + $rsize$0$i = $sub22$i;$t$0$i = $20;$v$0$i = $20; + while(1) { + $arrayidx23$i = ((($t$0$i)) + 16|0); + $22 = HEAP32[$arrayidx23$i>>2]|0; + $cmp$i = ($22|0)==(0|0); + if ($cmp$i) { + $arrayidx27$i = ((($t$0$i)) + 20|0); + $23 = HEAP32[$arrayidx27$i>>2]|0; + $cmp28$i = ($23|0)==(0|0); + if ($cmp28$i) { + $rsize$0$i$lcssa = $rsize$0$i;$v$0$i$lcssa = $v$0$i; + break; + } else { + $cond4$i = $23; + } + } else { + $cond4$i = $22; + } + $head29$i = ((($cond4$i)) + 4|0); + $24 = HEAP32[$head29$i>>2]|0; + $and30$i = $24 & -8; + $sub31$i = (($and30$i) - ($cond))|0; + $cmp32$i = ($sub31$i>>>0)<($rsize$0$i>>>0); + $sub31$rsize$0$i = $cmp32$i ? $sub31$i : $rsize$0$i; + $cond$v$0$i = $cmp32$i ? $cond4$i : $v$0$i; + $rsize$0$i = $sub31$rsize$0$i;$t$0$i = $cond4$i;$v$0$i = $cond$v$0$i; + } + $25 = HEAP32[(192)>>2]|0; + $cmp33$i = ($v$0$i$lcssa>>>0)<($25>>>0); + if ($cmp33$i) { + _abort(); + // unreachable; + } + $add$ptr$i = (($v$0$i$lcssa) + ($cond)|0); + $cmp35$i = ($v$0$i$lcssa>>>0)<($add$ptr$i>>>0); + if (!($cmp35$i)) { + _abort(); + // unreachable; + } + $parent$i = ((($v$0$i$lcssa)) + 24|0); + $26 = HEAP32[$parent$i>>2]|0; + $bk$i = ((($v$0$i$lcssa)) + 12|0); + $27 = HEAP32[$bk$i>>2]|0; + $cmp40$i = ($27|0)==($v$0$i$lcssa|0); + do { + if ($cmp40$i) { + $arrayidx61$i = ((($v$0$i$lcssa)) + 20|0); + $31 = HEAP32[$arrayidx61$i>>2]|0; + $cmp62$i = ($31|0)==(0|0); + if ($cmp62$i) { + $arrayidx65$i = ((($v$0$i$lcssa)) + 16|0); + $32 = HEAP32[$arrayidx65$i>>2]|0; + $cmp66$i = ($32|0)==(0|0); + if ($cmp66$i) { + $R$3$i = 0; + break; + } else { + $R$1$i = $32;$RP$1$i = $arrayidx65$i; + } + } else { + $R$1$i = $31;$RP$1$i = $arrayidx61$i; + } + while(1) { + $arrayidx71$i = ((($R$1$i)) + 20|0); + $33 = HEAP32[$arrayidx71$i>>2]|0; + $cmp72$i = ($33|0)==(0|0); + if (!($cmp72$i)) { + $R$1$i = $33;$RP$1$i = $arrayidx71$i; + continue; + } + $arrayidx75$i = ((($R$1$i)) + 16|0); + $34 = HEAP32[$arrayidx75$i>>2]|0; + $cmp76$i = ($34|0)==(0|0); + if ($cmp76$i) { + $R$1$i$lcssa = $R$1$i;$RP$1$i$lcssa = $RP$1$i; + break; + } else { + $R$1$i = $34;$RP$1$i = $arrayidx75$i; + } + } + $cmp81$i = ($RP$1$i$lcssa>>>0)<($25>>>0); + if ($cmp81$i) { + _abort(); + // unreachable; + } else { + HEAP32[$RP$1$i$lcssa>>2] = 0; + $R$3$i = $R$1$i$lcssa; + break; + } + } else { + $fd$i = ((($v$0$i$lcssa)) + 8|0); + $28 = HEAP32[$fd$i>>2]|0; + $cmp45$i = ($28>>>0)<($25>>>0); + if ($cmp45$i) { + _abort(); + // unreachable; + } + $bk47$i = ((($28)) + 12|0); + $29 = HEAP32[$bk47$i>>2]|0; + $cmp48$i = ($29|0)==($v$0$i$lcssa|0); + if (!($cmp48$i)) { + _abort(); + // unreachable; + } + $fd50$i = ((($27)) + 8|0); + $30 = HEAP32[$fd50$i>>2]|0; + $cmp51$i = ($30|0)==($v$0$i$lcssa|0); + if ($cmp51$i) { + HEAP32[$bk47$i>>2] = $27; + HEAP32[$fd50$i>>2] = $28; + $R$3$i = $27; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $cmp90$i = ($26|0)==(0|0); + do { + if (!($cmp90$i)) { + $index$i = ((($v$0$i$lcssa)) + 28|0); + $35 = HEAP32[$index$i>>2]|0; + $arrayidx94$i = (480 + ($35<<2)|0); + $36 = HEAP32[$arrayidx94$i>>2]|0; + $cmp95$i = ($v$0$i$lcssa|0)==($36|0); + if ($cmp95$i) { + HEAP32[$arrayidx94$i>>2] = $R$3$i; + $cond2$i = ($R$3$i|0)==(0|0); + if ($cond2$i) { + $shl$i = 1 << $35; + $neg$i = $shl$i ^ -1; + $37 = HEAP32[(180)>>2]|0; + $and103$i = $37 & $neg$i; + HEAP32[(180)>>2] = $and103$i; + break; + } + } else { + $38 = HEAP32[(192)>>2]|0; + $cmp107$i = ($26>>>0)<($38>>>0); + if ($cmp107$i) { + _abort(); + // unreachable; + } + $arrayidx113$i = ((($26)) + 16|0); + $39 = HEAP32[$arrayidx113$i>>2]|0; + $cmp114$i = ($39|0)==($v$0$i$lcssa|0); + if ($cmp114$i) { + HEAP32[$arrayidx113$i>>2] = $R$3$i; + } else { + $arrayidx121$i = ((($26)) + 20|0); + HEAP32[$arrayidx121$i>>2] = $R$3$i; + } + $cmp126$i = ($R$3$i|0)==(0|0); + if ($cmp126$i) { + break; + } + } + $40 = HEAP32[(192)>>2]|0; + $cmp130$i = ($R$3$i>>>0)<($40>>>0); + if ($cmp130$i) { + _abort(); + // unreachable; + } + $parent135$i = ((($R$3$i)) + 24|0); + HEAP32[$parent135$i>>2] = $26; + $arrayidx137$i = ((($v$0$i$lcssa)) + 16|0); + $41 = HEAP32[$arrayidx137$i>>2]|0; + $cmp138$i = ($41|0)==(0|0); + do { + if (!($cmp138$i)) { + $cmp142$i = ($41>>>0)<($40>>>0); + if ($cmp142$i) { + _abort(); + // unreachable; + } else { + $arrayidx148$i = ((($R$3$i)) + 16|0); + HEAP32[$arrayidx148$i>>2] = $41; + $parent149$i = ((($41)) + 24|0); + HEAP32[$parent149$i>>2] = $R$3$i; + break; + } + } + } while(0); + $arrayidx154$i = ((($v$0$i$lcssa)) + 20|0); + $42 = HEAP32[$arrayidx154$i>>2]|0; + $cmp155$i = ($42|0)==(0|0); + if (!($cmp155$i)) { + $43 = HEAP32[(192)>>2]|0; + $cmp159$i = ($42>>>0)<($43>>>0); + if ($cmp159$i) { + _abort(); + // unreachable; + } else { + $arrayidx165$i = ((($R$3$i)) + 20|0); + HEAP32[$arrayidx165$i>>2] = $42; + $parent166$i = ((($42)) + 24|0); + HEAP32[$parent166$i>>2] = $R$3$i; + break; + } + } + } + } while(0); + $cmp174$i = ($rsize$0$i$lcssa>>>0)<(16); + if ($cmp174$i) { + $add177$i = (($rsize$0$i$lcssa) + ($cond))|0; + $or178$i = $add177$i | 3; + $head179$i = ((($v$0$i$lcssa)) + 4|0); + HEAP32[$head179$i>>2] = $or178$i; + $add$ptr181$i = (($v$0$i$lcssa) + ($add177$i)|0); + $head182$i = ((($add$ptr181$i)) + 4|0); + $44 = HEAP32[$head182$i>>2]|0; + $or183$i = $44 | 1; + HEAP32[$head182$i>>2] = $or183$i; + } else { + $or186$i = $cond | 3; + $head187$i = ((($v$0$i$lcssa)) + 4|0); + HEAP32[$head187$i>>2] = $or186$i; + $or188$i = $rsize$0$i$lcssa | 1; + $head189$i = ((($add$ptr$i)) + 4|0); + HEAP32[$head189$i>>2] = $or188$i; + $add$ptr190$i = (($add$ptr$i) + ($rsize$0$i$lcssa)|0); + HEAP32[$add$ptr190$i>>2] = $rsize$0$i$lcssa; + $45 = HEAP32[(184)>>2]|0; + $cmp191$i = ($45|0)==(0); + if (!($cmp191$i)) { + $46 = HEAP32[(196)>>2]|0; + $shr194$i = $45 >>> 3; + $shl195$i = $shr194$i << 1; + $arrayidx196$i = (216 + ($shl195$i<<2)|0); + $47 = HEAP32[44]|0; + $shl198$i = 1 << $shr194$i; + $and199$i = $47 & $shl198$i; + $tobool200$i = ($and199$i|0)==(0); + if ($tobool200$i) { + $or204$i = $47 | $shl198$i; + HEAP32[44] = $or204$i; + $$pre$i = ((($arrayidx196$i)) + 8|0); + $$pre$phi$iZ2D = $$pre$i;$F197$0$i = $arrayidx196$i; + } else { + $48 = ((($arrayidx196$i)) + 8|0); + $49 = HEAP32[$48>>2]|0; + $50 = HEAP32[(192)>>2]|0; + $cmp208$i = ($49>>>0)<($50>>>0); + if ($cmp208$i) { + _abort(); + // unreachable; + } else { + $$pre$phi$iZ2D = $48;$F197$0$i = $49; + } + } + HEAP32[$$pre$phi$iZ2D>>2] = $46; + $bk218$i = ((($F197$0$i)) + 12|0); + HEAP32[$bk218$i>>2] = $46; + $fd219$i = ((($46)) + 8|0); + HEAP32[$fd219$i>>2] = $F197$0$i; + $bk220$i = ((($46)) + 12|0); + HEAP32[$bk220$i>>2] = $arrayidx196$i; + } + HEAP32[(184)>>2] = $rsize$0$i$lcssa; + HEAP32[(196)>>2] = $add$ptr$i; + } + $add$ptr225$i = ((($v$0$i$lcssa)) + 8|0); + $retval$0 = $add$ptr225$i; + return ($retval$0|0); + } + } else { + $nb$0 = $cond; + } + } else { + $cmp139 = ($bytes>>>0)>(4294967231); + if ($cmp139) { + $nb$0 = -1; + } else { + $add144 = (($bytes) + 11)|0; + $and145 = $add144 & -8; + $51 = HEAP32[(180)>>2]|0; + $cmp146 = ($51|0)==(0); + if ($cmp146) { + $nb$0 = $and145; + } else { + $sub$i$138 = (0 - ($and145))|0; + $shr$i$139 = $add144 >>> 8; + $cmp$i$140 = ($shr$i$139|0)==(0); + if ($cmp$i$140) { + $idx$0$i = 0; + } else { + $cmp1$i = ($and145>>>0)>(16777215); + if ($cmp1$i) { + $idx$0$i = 31; + } else { + $sub4$i = (($shr$i$139) + 1048320)|0; + $shr5$i$142 = $sub4$i >>> 16; + $and$i$143 = $shr5$i$142 & 8; + $shl$i$144 = $shr$i$139 << $and$i$143; + $sub6$i = (($shl$i$144) + 520192)|0; + $shr7$i$145 = $sub6$i >>> 16; + $and8$i = $shr7$i$145 & 4; + $add$i$146 = $and8$i | $and$i$143; + $shl9$i = $shl$i$144 << $and8$i; + $sub10$i = (($shl9$i) + 245760)|0; + $shr11$i$147 = $sub10$i >>> 16; + $and12$i = $shr11$i$147 & 2; + $add13$i = $add$i$146 | $and12$i; + $sub14$i = (14 - ($add13$i))|0; + $shl15$i = $shl9$i << $and12$i; + $shr16$i$148 = $shl15$i >>> 15; + $add17$i = (($sub14$i) + ($shr16$i$148))|0; + $shl18$i = $add17$i << 1; + $add19$i = (($add17$i) + 7)|0; + $shr20$i = $and145 >>> $add19$i; + $and21$i$149 = $shr20$i & 1; + $add22$i = $and21$i$149 | $shl18$i; + $idx$0$i = $add22$i; + } + } + $arrayidx$i$150 = (480 + ($idx$0$i<<2)|0); + $52 = HEAP32[$arrayidx$i$150>>2]|0; + $cmp24$i = ($52|0)==(0|0); + L123: do { + if ($cmp24$i) { + $rsize$3$i = $sub$i$138;$t$2$i = 0;$v$3$i = 0; + label = 86; + } else { + $cmp26$i = ($idx$0$i|0)==(31); + $shr27$i = $idx$0$i >>> 1; + $sub30$i = (25 - ($shr27$i))|0; + $cond$i = $cmp26$i ? 0 : $sub30$i; + $shl31$i = $and145 << $cond$i; + $rsize$0$i$152 = $sub$i$138;$rst$0$i = 0;$sizebits$0$i = $shl31$i;$t$0$i$151 = $52;$v$0$i$153 = 0; + while(1) { + $head$i$154 = ((($t$0$i$151)) + 4|0); + $53 = HEAP32[$head$i$154>>2]|0; + $and32$i = $53 & -8; + $sub33$i = (($and32$i) - ($and145))|0; + $cmp34$i = ($sub33$i>>>0)<($rsize$0$i$152>>>0); + if ($cmp34$i) { + $cmp36$i = ($and32$i|0)==($and145|0); + if ($cmp36$i) { + $rsize$49$i = $sub33$i;$t$48$i = $t$0$i$151;$v$410$i = $t$0$i$151; + label = 90; + break L123; + } else { + $rsize$1$i = $sub33$i;$v$1$i = $t$0$i$151; + } + } else { + $rsize$1$i = $rsize$0$i$152;$v$1$i = $v$0$i$153; + } + $arrayidx40$i = ((($t$0$i$151)) + 20|0); + $54 = HEAP32[$arrayidx40$i>>2]|0; + $shr41$i = $sizebits$0$i >>> 31; + $arrayidx44$i = (((($t$0$i$151)) + 16|0) + ($shr41$i<<2)|0); + $55 = HEAP32[$arrayidx44$i>>2]|0; + $cmp45$i$155 = ($54|0)==(0|0); + $cmp46$i = ($54|0)==($55|0); + $or$cond1$i = $cmp45$i$155 | $cmp46$i; + $rst$1$i = $or$cond1$i ? $rst$0$i : $54; + $cmp49$i = ($55|0)==(0|0); + $56 = $cmp49$i&1; + $shl52$i = $56 ^ 1; + $sizebits$0$shl52$i = $sizebits$0$i << $shl52$i; + if ($cmp49$i) { + $rsize$3$i = $rsize$1$i;$t$2$i = $rst$1$i;$v$3$i = $v$1$i; + label = 86; + break; + } else { + $rsize$0$i$152 = $rsize$1$i;$rst$0$i = $rst$1$i;$sizebits$0$i = $sizebits$0$shl52$i;$t$0$i$151 = $55;$v$0$i$153 = $v$1$i; + } + } + } + } while(0); + if ((label|0) == 86) { + $cmp55$i = ($t$2$i|0)==(0|0); + $cmp57$i = ($v$3$i|0)==(0|0); + $or$cond$i = $cmp55$i & $cmp57$i; + if ($or$cond$i) { + $shl60$i = 2 << $idx$0$i; + $sub63$i = (0 - ($shl60$i))|0; + $or$i = $shl60$i | $sub63$i; + $and64$i = $51 & $or$i; + $cmp65$i = ($and64$i|0)==(0); + if ($cmp65$i) { + $nb$0 = $and145; + break; + } + $sub67$i = (0 - ($and64$i))|0; + $and68$i = $and64$i & $sub67$i; + $sub70$i = (($and68$i) + -1)|0; + $shr72$i = $sub70$i >>> 12; + $and73$i = $shr72$i & 16; + $shr75$i = $sub70$i >>> $and73$i; + $shr76$i = $shr75$i >>> 5; + $and77$i = $shr76$i & 8; + $add78$i = $and77$i | $and73$i; + $shr79$i = $shr75$i >>> $and77$i; + $shr80$i = $shr79$i >>> 2; + $and81$i = $shr80$i & 4; + $add82$i = $add78$i | $and81$i; + $shr83$i = $shr79$i >>> $and81$i; + $shr84$i = $shr83$i >>> 1; + $and85$i = $shr84$i & 2; + $add86$i = $add82$i | $and85$i; + $shr87$i = $shr83$i >>> $and85$i; + $shr88$i = $shr87$i >>> 1; + $and89$i = $shr88$i & 1; + $add90$i = $add86$i | $and89$i; + $shr91$i = $shr87$i >>> $and89$i; + $add92$i = (($add90$i) + ($shr91$i))|0; + $arrayidx94$i$156 = (480 + ($add92$i<<2)|0); + $57 = HEAP32[$arrayidx94$i$156>>2]|0; + $t$4$ph$i = $57; + } else { + $t$4$ph$i = $t$2$i; + } + $cmp97$7$i = ($t$4$ph$i|0)==(0|0); + if ($cmp97$7$i) { + $rsize$4$lcssa$i = $rsize$3$i;$v$4$lcssa$i = $v$3$i; + } else { + $rsize$49$i = $rsize$3$i;$t$48$i = $t$4$ph$i;$v$410$i = $v$3$i; + label = 90; + } + } + if ((label|0) == 90) { + while(1) { + label = 0; + $head99$i = ((($t$48$i)) + 4|0); + $58 = HEAP32[$head99$i>>2]|0; + $and100$i = $58 & -8; + $sub101$i = (($and100$i) - ($and145))|0; + $cmp102$i = ($sub101$i>>>0)<($rsize$49$i>>>0); + $sub101$rsize$4$i = $cmp102$i ? $sub101$i : $rsize$49$i; + $t$4$v$4$i = $cmp102$i ? $t$48$i : $v$410$i; + $arrayidx106$i = ((($t$48$i)) + 16|0); + $59 = HEAP32[$arrayidx106$i>>2]|0; + $cmp107$i$157 = ($59|0)==(0|0); + if (!($cmp107$i$157)) { + $rsize$49$i = $sub101$rsize$4$i;$t$48$i = $59;$v$410$i = $t$4$v$4$i; + label = 90; + continue; + } + $arrayidx113$i$159 = ((($t$48$i)) + 20|0); + $60 = HEAP32[$arrayidx113$i$159>>2]|0; + $cmp97$i = ($60|0)==(0|0); + if ($cmp97$i) { + $rsize$4$lcssa$i = $sub101$rsize$4$i;$v$4$lcssa$i = $t$4$v$4$i; + break; + } else { + $rsize$49$i = $sub101$rsize$4$i;$t$48$i = $60;$v$410$i = $t$4$v$4$i; + label = 90; + } + } + } + $cmp116$i = ($v$4$lcssa$i|0)==(0|0); + if ($cmp116$i) { + $nb$0 = $and145; + } else { + $61 = HEAP32[(184)>>2]|0; + $sub118$i = (($61) - ($and145))|0; + $cmp119$i = ($rsize$4$lcssa$i>>>0)<($sub118$i>>>0); + if ($cmp119$i) { + $62 = HEAP32[(192)>>2]|0; + $cmp121$i = ($v$4$lcssa$i>>>0)<($62>>>0); + if ($cmp121$i) { + _abort(); + // unreachable; + } + $add$ptr$i$161 = (($v$4$lcssa$i) + ($and145)|0); + $cmp123$i = ($v$4$lcssa$i>>>0)<($add$ptr$i$161>>>0); + if (!($cmp123$i)) { + _abort(); + // unreachable; + } + $parent$i$162 = ((($v$4$lcssa$i)) + 24|0); + $63 = HEAP32[$parent$i$162>>2]|0; + $bk$i$163 = ((($v$4$lcssa$i)) + 12|0); + $64 = HEAP32[$bk$i$163>>2]|0; + $cmp128$i = ($64|0)==($v$4$lcssa$i|0); + do { + if ($cmp128$i) { + $arrayidx151$i = ((($v$4$lcssa$i)) + 20|0); + $68 = HEAP32[$arrayidx151$i>>2]|0; + $cmp152$i = ($68|0)==(0|0); + if ($cmp152$i) { + $arrayidx155$i = ((($v$4$lcssa$i)) + 16|0); + $69 = HEAP32[$arrayidx155$i>>2]|0; + $cmp156$i = ($69|0)==(0|0); + if ($cmp156$i) { + $R$3$i$171 = 0; + break; + } else { + $R$1$i$168 = $69;$RP$1$i$167 = $arrayidx155$i; + } + } else { + $R$1$i$168 = $68;$RP$1$i$167 = $arrayidx151$i; + } + while(1) { + $arrayidx161$i = ((($R$1$i$168)) + 20|0); + $70 = HEAP32[$arrayidx161$i>>2]|0; + $cmp162$i = ($70|0)==(0|0); + if (!($cmp162$i)) { + $R$1$i$168 = $70;$RP$1$i$167 = $arrayidx161$i; + continue; + } + $arrayidx165$i$169 = ((($R$1$i$168)) + 16|0); + $71 = HEAP32[$arrayidx165$i$169>>2]|0; + $cmp166$i = ($71|0)==(0|0); + if ($cmp166$i) { + $R$1$i$168$lcssa = $R$1$i$168;$RP$1$i$167$lcssa = $RP$1$i$167; + break; + } else { + $R$1$i$168 = $71;$RP$1$i$167 = $arrayidx165$i$169; + } + } + $cmp171$i = ($RP$1$i$167$lcssa>>>0)<($62>>>0); + if ($cmp171$i) { + _abort(); + // unreachable; + } else { + HEAP32[$RP$1$i$167$lcssa>>2] = 0; + $R$3$i$171 = $R$1$i$168$lcssa; + break; + } + } else { + $fd$i$164 = ((($v$4$lcssa$i)) + 8|0); + $65 = HEAP32[$fd$i$164>>2]|0; + $cmp133$i = ($65>>>0)<($62>>>0); + if ($cmp133$i) { + _abort(); + // unreachable; + } + $bk136$i = ((($65)) + 12|0); + $66 = HEAP32[$bk136$i>>2]|0; + $cmp137$i = ($66|0)==($v$4$lcssa$i|0); + if (!($cmp137$i)) { + _abort(); + // unreachable; + } + $fd139$i = ((($64)) + 8|0); + $67 = HEAP32[$fd139$i>>2]|0; + $cmp140$i = ($67|0)==($v$4$lcssa$i|0); + if ($cmp140$i) { + HEAP32[$bk136$i>>2] = $64; + HEAP32[$fd139$i>>2] = $65; + $R$3$i$171 = $64; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $cmp180$i = ($63|0)==(0|0); + do { + if (!($cmp180$i)) { + $index$i$172 = ((($v$4$lcssa$i)) + 28|0); + $72 = HEAP32[$index$i$172>>2]|0; + $arrayidx184$i = (480 + ($72<<2)|0); + $73 = HEAP32[$arrayidx184$i>>2]|0; + $cmp185$i = ($v$4$lcssa$i|0)==($73|0); + if ($cmp185$i) { + HEAP32[$arrayidx184$i>>2] = $R$3$i$171; + $cond3$i = ($R$3$i$171|0)==(0|0); + if ($cond3$i) { + $shl192$i = 1 << $72; + $neg$i$173 = $shl192$i ^ -1; + $74 = HEAP32[(180)>>2]|0; + $and194$i = $74 & $neg$i$173; + HEAP32[(180)>>2] = $and194$i; + break; + } + } else { + $75 = HEAP32[(192)>>2]|0; + $cmp198$i = ($63>>>0)<($75>>>0); + if ($cmp198$i) { + _abort(); + // unreachable; + } + $arrayidx204$i = ((($63)) + 16|0); + $76 = HEAP32[$arrayidx204$i>>2]|0; + $cmp205$i = ($76|0)==($v$4$lcssa$i|0); + if ($cmp205$i) { + HEAP32[$arrayidx204$i>>2] = $R$3$i$171; + } else { + $arrayidx212$i = ((($63)) + 20|0); + HEAP32[$arrayidx212$i>>2] = $R$3$i$171; + } + $cmp217$i = ($R$3$i$171|0)==(0|0); + if ($cmp217$i) { + break; + } + } + $77 = HEAP32[(192)>>2]|0; + $cmp221$i = ($R$3$i$171>>>0)<($77>>>0); + if ($cmp221$i) { + _abort(); + // unreachable; + } + $parent226$i = ((($R$3$i$171)) + 24|0); + HEAP32[$parent226$i>>2] = $63; + $arrayidx228$i = ((($v$4$lcssa$i)) + 16|0); + $78 = HEAP32[$arrayidx228$i>>2]|0; + $cmp229$i = ($78|0)==(0|0); + do { + if (!($cmp229$i)) { + $cmp233$i = ($78>>>0)<($77>>>0); + if ($cmp233$i) { + _abort(); + // unreachable; + } else { + $arrayidx239$i = ((($R$3$i$171)) + 16|0); + HEAP32[$arrayidx239$i>>2] = $78; + $parent240$i = ((($78)) + 24|0); + HEAP32[$parent240$i>>2] = $R$3$i$171; + break; + } + } + } while(0); + $arrayidx245$i = ((($v$4$lcssa$i)) + 20|0); + $79 = HEAP32[$arrayidx245$i>>2]|0; + $cmp246$i = ($79|0)==(0|0); + if (!($cmp246$i)) { + $80 = HEAP32[(192)>>2]|0; + $cmp250$i = ($79>>>0)<($80>>>0); + if ($cmp250$i) { + _abort(); + // unreachable; + } else { + $arrayidx256$i = ((($R$3$i$171)) + 20|0); + HEAP32[$arrayidx256$i>>2] = $79; + $parent257$i = ((($79)) + 24|0); + HEAP32[$parent257$i>>2] = $R$3$i$171; + break; + } + } + } + } while(0); + $cmp265$i = ($rsize$4$lcssa$i>>>0)<(16); + do { + if ($cmp265$i) { + $add268$i = (($rsize$4$lcssa$i) + ($and145))|0; + $or270$i = $add268$i | 3; + $head271$i = ((($v$4$lcssa$i)) + 4|0); + HEAP32[$head271$i>>2] = $or270$i; + $add$ptr273$i = (($v$4$lcssa$i) + ($add268$i)|0); + $head274$i = ((($add$ptr273$i)) + 4|0); + $81 = HEAP32[$head274$i>>2]|0; + $or275$i = $81 | 1; + HEAP32[$head274$i>>2] = $or275$i; + } else { + $or278$i = $and145 | 3; + $head279$i = ((($v$4$lcssa$i)) + 4|0); + HEAP32[$head279$i>>2] = $or278$i; + $or280$i = $rsize$4$lcssa$i | 1; + $head281$i = ((($add$ptr$i$161)) + 4|0); + HEAP32[$head281$i>>2] = $or280$i; + $add$ptr282$i = (($add$ptr$i$161) + ($rsize$4$lcssa$i)|0); + HEAP32[$add$ptr282$i>>2] = $rsize$4$lcssa$i; + $shr283$i = $rsize$4$lcssa$i >>> 3; + $cmp284$i = ($rsize$4$lcssa$i>>>0)<(256); + if ($cmp284$i) { + $shl288$i = $shr283$i << 1; + $arrayidx289$i = (216 + ($shl288$i<<2)|0); + $82 = HEAP32[44]|0; + $shl291$i = 1 << $shr283$i; + $and292$i = $82 & $shl291$i; + $tobool293$i = ($and292$i|0)==(0); + if ($tobool293$i) { + $or297$i = $82 | $shl291$i; + HEAP32[44] = $or297$i; + $$pre$i$177 = ((($arrayidx289$i)) + 8|0); + $$pre$phi$i$178Z2D = $$pre$i$177;$F290$0$i = $arrayidx289$i; + } else { + $83 = ((($arrayidx289$i)) + 8|0); + $84 = HEAP32[$83>>2]|0; + $85 = HEAP32[(192)>>2]|0; + $cmp301$i = ($84>>>0)<($85>>>0); + if ($cmp301$i) { + _abort(); + // unreachable; + } else { + $$pre$phi$i$178Z2D = $83;$F290$0$i = $84; + } + } + HEAP32[$$pre$phi$i$178Z2D>>2] = $add$ptr$i$161; + $bk311$i = ((($F290$0$i)) + 12|0); + HEAP32[$bk311$i>>2] = $add$ptr$i$161; + $fd312$i = ((($add$ptr$i$161)) + 8|0); + HEAP32[$fd312$i>>2] = $F290$0$i; + $bk313$i = ((($add$ptr$i$161)) + 12|0); + HEAP32[$bk313$i>>2] = $arrayidx289$i; + break; + } + $shr318$i = $rsize$4$lcssa$i >>> 8; + $cmp319$i = ($shr318$i|0)==(0); + if ($cmp319$i) { + $I316$0$i = 0; + } else { + $cmp323$i = ($rsize$4$lcssa$i>>>0)>(16777215); + if ($cmp323$i) { + $I316$0$i = 31; + } else { + $sub329$i = (($shr318$i) + 1048320)|0; + $shr330$i = $sub329$i >>> 16; + $and331$i = $shr330$i & 8; + $shl333$i = $shr318$i << $and331$i; + $sub334$i = (($shl333$i) + 520192)|0; + $shr335$i = $sub334$i >>> 16; + $and336$i = $shr335$i & 4; + $add337$i = $and336$i | $and331$i; + $shl338$i = $shl333$i << $and336$i; + $sub339$i = (($shl338$i) + 245760)|0; + $shr340$i = $sub339$i >>> 16; + $and341$i = $shr340$i & 2; + $add342$i = $add337$i | $and341$i; + $sub343$i = (14 - ($add342$i))|0; + $shl344$i = $shl338$i << $and341$i; + $shr345$i = $shl344$i >>> 15; + $add346$i = (($sub343$i) + ($shr345$i))|0; + $shl347$i = $add346$i << 1; + $add348$i = (($add346$i) + 7)|0; + $shr349$i = $rsize$4$lcssa$i >>> $add348$i; + $and350$i = $shr349$i & 1; + $add351$i = $and350$i | $shl347$i; + $I316$0$i = $add351$i; + } + } + $arrayidx355$i = (480 + ($I316$0$i<<2)|0); + $index356$i = ((($add$ptr$i$161)) + 28|0); + HEAP32[$index356$i>>2] = $I316$0$i; + $child357$i = ((($add$ptr$i$161)) + 16|0); + $arrayidx358$i = ((($child357$i)) + 4|0); + HEAP32[$arrayidx358$i>>2] = 0; + HEAP32[$child357$i>>2] = 0; + $86 = HEAP32[(180)>>2]|0; + $shl362$i = 1 << $I316$0$i; + $and363$i = $86 & $shl362$i; + $tobool364$i = ($and363$i|0)==(0); + if ($tobool364$i) { + $or368$i = $86 | $shl362$i; + HEAP32[(180)>>2] = $or368$i; + HEAP32[$arrayidx355$i>>2] = $add$ptr$i$161; + $parent369$i = ((($add$ptr$i$161)) + 24|0); + HEAP32[$parent369$i>>2] = $arrayidx355$i; + $bk370$i = ((($add$ptr$i$161)) + 12|0); + HEAP32[$bk370$i>>2] = $add$ptr$i$161; + $fd371$i = ((($add$ptr$i$161)) + 8|0); + HEAP32[$fd371$i>>2] = $add$ptr$i$161; + break; + } + $87 = HEAP32[$arrayidx355$i>>2]|0; + $cmp374$i = ($I316$0$i|0)==(31); + $shr378$i = $I316$0$i >>> 1; + $sub381$i = (25 - ($shr378$i))|0; + $cond383$i = $cmp374$i ? 0 : $sub381$i; + $shl384$i = $rsize$4$lcssa$i << $cond383$i; + $K373$0$i = $shl384$i;$T$0$i = $87; + while(1) { + $head386$i = ((($T$0$i)) + 4|0); + $88 = HEAP32[$head386$i>>2]|0; + $and387$i = $88 & -8; + $cmp388$i = ($and387$i|0)==($rsize$4$lcssa$i|0); + if ($cmp388$i) { + $T$0$i$lcssa = $T$0$i; + label = 148; + break; + } + $shr391$i = $K373$0$i >>> 31; + $arrayidx394$i = (((($T$0$i)) + 16|0) + ($shr391$i<<2)|0); + $shl395$i = $K373$0$i << 1; + $89 = HEAP32[$arrayidx394$i>>2]|0; + $cmp396$i = ($89|0)==(0|0); + if ($cmp396$i) { + $T$0$i$lcssa293 = $T$0$i;$arrayidx394$i$lcssa = $arrayidx394$i; + label = 145; + break; + } else { + $K373$0$i = $shl395$i;$T$0$i = $89; + } + } + if ((label|0) == 145) { + $90 = HEAP32[(192)>>2]|0; + $cmp401$i = ($arrayidx394$i$lcssa>>>0)<($90>>>0); + if ($cmp401$i) { + _abort(); + // unreachable; + } else { + HEAP32[$arrayidx394$i$lcssa>>2] = $add$ptr$i$161; + $parent406$i = ((($add$ptr$i$161)) + 24|0); + HEAP32[$parent406$i>>2] = $T$0$i$lcssa293; + $bk407$i = ((($add$ptr$i$161)) + 12|0); + HEAP32[$bk407$i>>2] = $add$ptr$i$161; + $fd408$i = ((($add$ptr$i$161)) + 8|0); + HEAP32[$fd408$i>>2] = $add$ptr$i$161; + break; + } + } + else if ((label|0) == 148) { + $fd416$i = ((($T$0$i$lcssa)) + 8|0); + $91 = HEAP32[$fd416$i>>2]|0; + $92 = HEAP32[(192)>>2]|0; + $cmp422$i = ($91>>>0)>=($92>>>0); + $not$cmp418$i = ($T$0$i$lcssa>>>0)>=($92>>>0); + $93 = $cmp422$i & $not$cmp418$i; + if ($93) { + $bk429$i = ((($91)) + 12|0); + HEAP32[$bk429$i>>2] = $add$ptr$i$161; + HEAP32[$fd416$i>>2] = $add$ptr$i$161; + $fd431$i = ((($add$ptr$i$161)) + 8|0); + HEAP32[$fd431$i>>2] = $91; + $bk432$i = ((($add$ptr$i$161)) + 12|0); + HEAP32[$bk432$i>>2] = $T$0$i$lcssa; + $parent433$i = ((($add$ptr$i$161)) + 24|0); + HEAP32[$parent433$i>>2] = 0; + break; + } else { + _abort(); + // unreachable; + } + } + } + } while(0); + $add$ptr441$i = ((($v$4$lcssa$i)) + 8|0); + $retval$0 = $add$ptr441$i; + return ($retval$0|0); + } else { + $nb$0 = $and145; + } + } + } + } + } + } while(0); + $94 = HEAP32[(184)>>2]|0; + $cmp156 = ($94>>>0)<($nb$0>>>0); + if (!($cmp156)) { + $sub160 = (($94) - ($nb$0))|0; + $95 = HEAP32[(196)>>2]|0; + $cmp162 = ($sub160>>>0)>(15); + if ($cmp162) { + $add$ptr166 = (($95) + ($nb$0)|0); + HEAP32[(196)>>2] = $add$ptr166; + HEAP32[(184)>>2] = $sub160; + $or167 = $sub160 | 1; + $head168 = ((($add$ptr166)) + 4|0); + HEAP32[$head168>>2] = $or167; + $add$ptr169 = (($add$ptr166) + ($sub160)|0); + HEAP32[$add$ptr169>>2] = $sub160; + $or172 = $nb$0 | 3; + $head173 = ((($95)) + 4|0); + HEAP32[$head173>>2] = $or172; + } else { + HEAP32[(184)>>2] = 0; + HEAP32[(196)>>2] = 0; + $or176 = $94 | 3; + $head177 = ((($95)) + 4|0); + HEAP32[$head177>>2] = $or176; + $add$ptr178 = (($95) + ($94)|0); + $head179 = ((($add$ptr178)) + 4|0); + $96 = HEAP32[$head179>>2]|0; + $or180 = $96 | 1; + HEAP32[$head179>>2] = $or180; + } + $add$ptr182 = ((($95)) + 8|0); + $retval$0 = $add$ptr182; + return ($retval$0|0); + } + $97 = HEAP32[(188)>>2]|0; + $cmp186 = ($97>>>0)>($nb$0>>>0); + if ($cmp186) { + $sub190 = (($97) - ($nb$0))|0; + HEAP32[(188)>>2] = $sub190; + $98 = HEAP32[(200)>>2]|0; + $add$ptr193 = (($98) + ($nb$0)|0); + HEAP32[(200)>>2] = $add$ptr193; + $or194 = $sub190 | 1; + $head195 = ((($add$ptr193)) + 4|0); + HEAP32[$head195>>2] = $or194; + $or197 = $nb$0 | 3; + $head198 = ((($98)) + 4|0); + HEAP32[$head198>>2] = $or197; + $add$ptr199 = ((($98)) + 8|0); + $retval$0 = $add$ptr199; + return ($retval$0|0); + } + $99 = HEAP32[162]|0; + $cmp$i$179 = ($99|0)==(0); + do { + if ($cmp$i$179) { + $call$i$i = (_sysconf(30)|0); + $sub$i$i = (($call$i$i) + -1)|0; + $and$i$i = $sub$i$i & $call$i$i; + $cmp1$i$i = ($and$i$i|0)==(0); + if ($cmp1$i$i) { + HEAP32[(656)>>2] = $call$i$i; + HEAP32[(652)>>2] = $call$i$i; + HEAP32[(660)>>2] = -1; + HEAP32[(664)>>2] = -1; + HEAP32[(668)>>2] = 0; + HEAP32[(620)>>2] = 0; + $call6$i$i = (_time((0|0))|0); + $xor$i$i = $call6$i$i & -16; + $and7$i$i = $xor$i$i ^ 1431655768; + HEAP32[162] = $and7$i$i; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $add$i$180 = (($nb$0) + 48)|0; + $100 = HEAP32[(656)>>2]|0; + $sub$i$181 = (($nb$0) + 47)|0; + $add9$i = (($100) + ($sub$i$181))|0; + $neg$i$182 = (0 - ($100))|0; + $and11$i = $add9$i & $neg$i$182; + $cmp12$i = ($and11$i>>>0)>($nb$0>>>0); + if (!($cmp12$i)) { + $retval$0 = 0; + return ($retval$0|0); + } + $101 = HEAP32[(616)>>2]|0; + $cmp15$i = ($101|0)==(0); + if (!($cmp15$i)) { + $102 = HEAP32[(608)>>2]|0; + $add17$i$183 = (($102) + ($and11$i))|0; + $cmp19$i = ($add17$i$183>>>0)<=($102>>>0); + $cmp21$i = ($add17$i$183>>>0)>($101>>>0); + $or$cond1$i$184 = $cmp19$i | $cmp21$i; + if ($or$cond1$i$184) { + $retval$0 = 0; + return ($retval$0|0); + } + } + $103 = HEAP32[(620)>>2]|0; + $and29$i = $103 & 4; + $tobool30$i = ($and29$i|0)==(0); + L257: do { + if ($tobool30$i) { + $104 = HEAP32[(200)>>2]|0; + $cmp32$i$185 = ($104|0)==(0|0); + L259: do { + if ($cmp32$i$185) { + label = 173; + } else { + $sp$0$i$i = (624); + while(1) { + $105 = HEAP32[$sp$0$i$i>>2]|0; + $cmp$i$9$i = ($105>>>0)>($104>>>0); + if (!($cmp$i$9$i)) { + $size$i$i = ((($sp$0$i$i)) + 4|0); + $106 = HEAP32[$size$i$i>>2]|0; + $add$ptr$i$i = (($105) + ($106)|0); + $cmp2$i$i = ($add$ptr$i$i>>>0)>($104>>>0); + if ($cmp2$i$i) { + $base$i$i$lcssa = $sp$0$i$i;$size$i$i$lcssa = $size$i$i; + break; + } + } + $next$i$i = ((($sp$0$i$i)) + 8|0); + $107 = HEAP32[$next$i$i>>2]|0; + $cmp3$i$i = ($107|0)==(0|0); + if ($cmp3$i$i) { + label = 173; + break L259; + } else { + $sp$0$i$i = $107; + } + } + $112 = HEAP32[(188)>>2]|0; + $add77$i = (($add9$i) - ($112))|0; + $and80$i = $add77$i & $neg$i$182; + $cmp81$i$191 = ($and80$i>>>0)<(2147483647); + if ($cmp81$i$191) { + $call83$i = (_sbrk(($and80$i|0))|0); + $113 = HEAP32[$base$i$i$lcssa>>2]|0; + $114 = HEAP32[$size$i$i$lcssa>>2]|0; + $add$ptr$i$193 = (($113) + ($114)|0); + $cmp85$i = ($call83$i|0)==($add$ptr$i$193|0); + if ($cmp85$i) { + $cmp89$i = ($call83$i|0)==((-1)|0); + if (!($cmp89$i)) { + $tbase$796$i = $call83$i;$tsize$795$i = $and80$i; + label = 193; + break L257; + } + } else { + $br$2$ph$i = $call83$i;$ssize$2$ph$i = $and80$i; + label = 183; + } + } + } + } while(0); + do { + if ((label|0) == 173) { + $call37$i = (_sbrk(0)|0); + $cmp38$i = ($call37$i|0)==((-1)|0); + if (!($cmp38$i)) { + $108 = $call37$i; + $109 = HEAP32[(652)>>2]|0; + $sub41$i = (($109) + -1)|0; + $and42$i = $sub41$i & $108; + $cmp43$i = ($and42$i|0)==(0); + if ($cmp43$i) { + $ssize$0$i = $and11$i; + } else { + $add46$i = (($sub41$i) + ($108))|0; + $neg48$i = (0 - ($109))|0; + $and49$i = $add46$i & $neg48$i; + $sub50$i = (($and11$i) - ($108))|0; + $add51$i = (($sub50$i) + ($and49$i))|0; + $ssize$0$i = $add51$i; + } + $110 = HEAP32[(608)>>2]|0; + $add54$i = (($110) + ($ssize$0$i))|0; + $cmp55$i$187 = ($ssize$0$i>>>0)>($nb$0>>>0); + $cmp57$i$188 = ($ssize$0$i>>>0)<(2147483647); + $or$cond$i$189 = $cmp55$i$187 & $cmp57$i$188; + if ($or$cond$i$189) { + $111 = HEAP32[(616)>>2]|0; + $cmp60$i = ($111|0)==(0); + if (!($cmp60$i)) { + $cmp63$i = ($add54$i>>>0)<=($110>>>0); + $cmp66$i$190 = ($add54$i>>>0)>($111>>>0); + $or$cond2$i = $cmp63$i | $cmp66$i$190; + if ($or$cond2$i) { + break; + } + } + $call68$i = (_sbrk(($ssize$0$i|0))|0); + $cmp69$i = ($call68$i|0)==($call37$i|0); + if ($cmp69$i) { + $tbase$796$i = $call37$i;$tsize$795$i = $ssize$0$i; + label = 193; + break L257; + } else { + $br$2$ph$i = $call68$i;$ssize$2$ph$i = $ssize$0$i; + label = 183; + } + } + } + } + } while(0); + L279: do { + if ((label|0) == 183) { + $sub112$i = (0 - ($ssize$2$ph$i))|0; + $cmp91$i = ($br$2$ph$i|0)!=((-1)|0); + $cmp93$i = ($ssize$2$ph$i>>>0)<(2147483647); + $or$cond5$i = $cmp93$i & $cmp91$i; + $cmp96$i = ($add$i$180>>>0)>($ssize$2$ph$i>>>0); + $or$cond3$i = $cmp96$i & $or$cond5$i; + do { + if ($or$cond3$i) { + $115 = HEAP32[(656)>>2]|0; + $sub99$i = (($sub$i$181) - ($ssize$2$ph$i))|0; + $add101$i = (($sub99$i) + ($115))|0; + $neg103$i = (0 - ($115))|0; + $and104$i = $add101$i & $neg103$i; + $cmp105$i = ($and104$i>>>0)<(2147483647); + if ($cmp105$i) { + $call107$i = (_sbrk(($and104$i|0))|0); + $cmp108$i = ($call107$i|0)==((-1)|0); + if ($cmp108$i) { + (_sbrk(($sub112$i|0))|0); + break L279; + } else { + $add110$i = (($and104$i) + ($ssize$2$ph$i))|0; + $ssize$5$i = $add110$i; + break; + } + } else { + $ssize$5$i = $ssize$2$ph$i; + } + } else { + $ssize$5$i = $ssize$2$ph$i; + } + } while(0); + $cmp118$i = ($br$2$ph$i|0)==((-1)|0); + if (!($cmp118$i)) { + $tbase$796$i = $br$2$ph$i;$tsize$795$i = $ssize$5$i; + label = 193; + break L257; + } + } + } while(0); + $116 = HEAP32[(620)>>2]|0; + $or$i$195 = $116 | 4; + HEAP32[(620)>>2] = $or$i$195; + label = 190; + } else { + label = 190; + } + } while(0); + if ((label|0) == 190) { + $cmp127$i = ($and11$i>>>0)<(2147483647); + if ($cmp127$i) { + $call131$i = (_sbrk(($and11$i|0))|0); + $call132$i = (_sbrk(0)|0); + $cmp133$i$196 = ($call131$i|0)!=((-1)|0); + $cmp135$i = ($call132$i|0)!=((-1)|0); + $or$cond4$i = $cmp133$i$196 & $cmp135$i; + $cmp137$i$197 = ($call131$i>>>0)<($call132$i>>>0); + $or$cond7$i = $cmp137$i$197 & $or$cond4$i; + if ($or$cond7$i) { + $sub$ptr$lhs$cast$i = $call132$i; + $sub$ptr$rhs$cast$i = $call131$i; + $sub$ptr$sub$i = (($sub$ptr$lhs$cast$i) - ($sub$ptr$rhs$cast$i))|0; + $add140$i = (($nb$0) + 40)|0; + $cmp141$not$i = ($sub$ptr$sub$i>>>0)>($add140$i>>>0); + if ($cmp141$not$i) { + $tbase$796$i = $call131$i;$tsize$795$i = $sub$ptr$sub$i; + label = 193; + } + } + } + } + if ((label|0) == 193) { + $117 = HEAP32[(608)>>2]|0; + $add150$i = (($117) + ($tsize$795$i))|0; + HEAP32[(608)>>2] = $add150$i; + $118 = HEAP32[(612)>>2]|0; + $cmp151$i = ($add150$i>>>0)>($118>>>0); + if ($cmp151$i) { + HEAP32[(612)>>2] = $add150$i; + } + $119 = HEAP32[(200)>>2]|0; + $cmp157$i = ($119|0)==(0|0); + do { + if ($cmp157$i) { + $120 = HEAP32[(192)>>2]|0; + $cmp159$i$199 = ($120|0)==(0|0); + $cmp162$i$200 = ($tbase$796$i>>>0)<($120>>>0); + $or$cond8$i = $cmp159$i$199 | $cmp162$i$200; + if ($or$cond8$i) { + HEAP32[(192)>>2] = $tbase$796$i; + } + HEAP32[(624)>>2] = $tbase$796$i; + HEAP32[(628)>>2] = $tsize$795$i; + HEAP32[(636)>>2] = 0; + $121 = HEAP32[162]|0; + HEAP32[(212)>>2] = $121; + HEAP32[(208)>>2] = -1; + $i$01$i$i = 0; + while(1) { + $shl$i$i = $i$01$i$i << 1; + $arrayidx$i$i = (216 + ($shl$i$i<<2)|0); + $122 = ((($arrayidx$i$i)) + 12|0); + HEAP32[$122>>2] = $arrayidx$i$i; + $123 = ((($arrayidx$i$i)) + 8|0); + HEAP32[$123>>2] = $arrayidx$i$i; + $inc$i$i = (($i$01$i$i) + 1)|0; + $exitcond$i$i = ($inc$i$i|0)==(32); + if ($exitcond$i$i) { + break; + } else { + $i$01$i$i = $inc$i$i; + } + } + $sub172$i = (($tsize$795$i) + -40)|0; + $add$ptr$i$11$i = ((($tbase$796$i)) + 8|0); + $124 = $add$ptr$i$11$i; + $and$i$12$i = $124 & 7; + $cmp$i$13$i = ($and$i$12$i|0)==(0); + $125 = (0 - ($124))|0; + $and3$i$i = $125 & 7; + $cond$i$i = $cmp$i$13$i ? 0 : $and3$i$i; + $add$ptr4$i$i = (($tbase$796$i) + ($cond$i$i)|0); + $sub5$i$i = (($sub172$i) - ($cond$i$i))|0; + HEAP32[(200)>>2] = $add$ptr4$i$i; + HEAP32[(188)>>2] = $sub5$i$i; + $or$i$i = $sub5$i$i | 1; + $head$i$i = ((($add$ptr4$i$i)) + 4|0); + HEAP32[$head$i$i>>2] = $or$i$i; + $add$ptr6$i$i = (($add$ptr4$i$i) + ($sub5$i$i)|0); + $head7$i$i = ((($add$ptr6$i$i)) + 4|0); + HEAP32[$head7$i$i>>2] = 40; + $126 = HEAP32[(664)>>2]|0; + HEAP32[(204)>>2] = $126; + } else { + $sp$0108$i = (624); + while(1) { + $127 = HEAP32[$sp$0108$i>>2]|0; + $size188$i = ((($sp$0108$i)) + 4|0); + $128 = HEAP32[$size188$i>>2]|0; + $add$ptr189$i = (($127) + ($128)|0); + $cmp190$i = ($tbase$796$i|0)==($add$ptr189$i|0); + if ($cmp190$i) { + $$lcssa = $127;$$lcssa290 = $128;$size188$i$lcssa = $size188$i;$sp$0108$i$lcssa = $sp$0108$i; + label = 203; + break; + } + $next$i = ((($sp$0108$i)) + 8|0); + $129 = HEAP32[$next$i>>2]|0; + $cmp186$i = ($129|0)==(0|0); + if ($cmp186$i) { + break; + } else { + $sp$0108$i = $129; + } + } + if ((label|0) == 203) { + $sflags193$i = ((($sp$0108$i$lcssa)) + 12|0); + $130 = HEAP32[$sflags193$i>>2]|0; + $and194$i$204 = $130 & 8; + $tobool195$i = ($and194$i$204|0)==(0); + if ($tobool195$i) { + $cmp203$i = ($119>>>0)>=($$lcssa>>>0); + $cmp209$i = ($119>>>0)<($tbase$796$i>>>0); + $or$cond98$i = $cmp209$i & $cmp203$i; + if ($or$cond98$i) { + $add212$i = (($$lcssa290) + ($tsize$795$i))|0; + HEAP32[$size188$i$lcssa>>2] = $add212$i; + $131 = HEAP32[(188)>>2]|0; + $add$ptr$i$21$i = ((($119)) + 8|0); + $132 = $add$ptr$i$21$i; + $and$i$22$i = $132 & 7; + $cmp$i$23$i = ($and$i$22$i|0)==(0); + $133 = (0 - ($132))|0; + $and3$i$24$i = $133 & 7; + $cond$i$25$i = $cmp$i$23$i ? 0 : $and3$i$24$i; + $add$ptr4$i$26$i = (($119) + ($cond$i$25$i)|0); + $add215$i = (($tsize$795$i) - ($cond$i$25$i))|0; + $sub5$i$27$i = (($add215$i) + ($131))|0; + HEAP32[(200)>>2] = $add$ptr4$i$26$i; + HEAP32[(188)>>2] = $sub5$i$27$i; + $or$i$28$i = $sub5$i$27$i | 1; + $head$i$29$i = ((($add$ptr4$i$26$i)) + 4|0); + HEAP32[$head$i$29$i>>2] = $or$i$28$i; + $add$ptr6$i$30$i = (($add$ptr4$i$26$i) + ($sub5$i$27$i)|0); + $head7$i$31$i = ((($add$ptr6$i$30$i)) + 4|0); + HEAP32[$head7$i$31$i>>2] = 40; + $134 = HEAP32[(664)>>2]|0; + HEAP32[(204)>>2] = $134; + break; + } + } + } + $135 = HEAP32[(192)>>2]|0; + $cmp218$i = ($tbase$796$i>>>0)<($135>>>0); + if ($cmp218$i) { + HEAP32[(192)>>2] = $tbase$796$i; + $150 = $tbase$796$i; + } else { + $150 = $135; + } + $add$ptr227$i = (($tbase$796$i) + ($tsize$795$i)|0); + $sp$1107$i = (624); + while(1) { + $136 = HEAP32[$sp$1107$i>>2]|0; + $cmp228$i = ($136|0)==($add$ptr227$i|0); + if ($cmp228$i) { + $base226$i$lcssa = $sp$1107$i;$sp$1107$i$lcssa = $sp$1107$i; + label = 211; + break; + } + $next231$i = ((($sp$1107$i)) + 8|0); + $137 = HEAP32[$next231$i>>2]|0; + $cmp224$i = ($137|0)==(0|0); + if ($cmp224$i) { + $sp$0$i$i$i = (624); + break; + } else { + $sp$1107$i = $137; + } + } + if ((label|0) == 211) { + $sflags235$i = ((($sp$1107$i$lcssa)) + 12|0); + $138 = HEAP32[$sflags235$i>>2]|0; + $and236$i = $138 & 8; + $tobool237$i = ($and236$i|0)==(0); + if ($tobool237$i) { + HEAP32[$base226$i$lcssa>>2] = $tbase$796$i; + $size245$i = ((($sp$1107$i$lcssa)) + 4|0); + $139 = HEAP32[$size245$i>>2]|0; + $add246$i = (($139) + ($tsize$795$i))|0; + HEAP32[$size245$i>>2] = $add246$i; + $add$ptr$i$32$i = ((($tbase$796$i)) + 8|0); + $140 = $add$ptr$i$32$i; + $and$i$33$i = $140 & 7; + $cmp$i$34$i = ($and$i$33$i|0)==(0); + $141 = (0 - ($140))|0; + $and3$i$35$i = $141 & 7; + $cond$i$36$i = $cmp$i$34$i ? 0 : $and3$i$35$i; + $add$ptr4$i$37$i = (($tbase$796$i) + ($cond$i$36$i)|0); + $add$ptr5$i$i = ((($add$ptr227$i)) + 8|0); + $142 = $add$ptr5$i$i; + $and6$i$38$i = $142 & 7; + $cmp7$i$i = ($and6$i$38$i|0)==(0); + $143 = (0 - ($142))|0; + $and13$i$i = $143 & 7; + $cond15$i$i = $cmp7$i$i ? 0 : $and13$i$i; + $add$ptr16$i$i = (($add$ptr227$i) + ($cond15$i$i)|0); + $sub$ptr$lhs$cast$i$39$i = $add$ptr16$i$i; + $sub$ptr$rhs$cast$i$40$i = $add$ptr4$i$37$i; + $sub$ptr$sub$i$41$i = (($sub$ptr$lhs$cast$i$39$i) - ($sub$ptr$rhs$cast$i$40$i))|0; + $add$ptr17$i$i = (($add$ptr4$i$37$i) + ($nb$0)|0); + $sub18$i$i = (($sub$ptr$sub$i$41$i) - ($nb$0))|0; + $or19$i$i = $nb$0 | 3; + $head$i$42$i = ((($add$ptr4$i$37$i)) + 4|0); + HEAP32[$head$i$42$i>>2] = $or19$i$i; + $cmp20$i$i = ($add$ptr16$i$i|0)==($119|0); + do { + if ($cmp20$i$i) { + $144 = HEAP32[(188)>>2]|0; + $add$i$i = (($144) + ($sub18$i$i))|0; + HEAP32[(188)>>2] = $add$i$i; + HEAP32[(200)>>2] = $add$ptr17$i$i; + $or22$i$i = $add$i$i | 1; + $head23$i$i = ((($add$ptr17$i$i)) + 4|0); + HEAP32[$head23$i$i>>2] = $or22$i$i; + } else { + $145 = HEAP32[(196)>>2]|0; + $cmp24$i$i = ($add$ptr16$i$i|0)==($145|0); + if ($cmp24$i$i) { + $146 = HEAP32[(184)>>2]|0; + $add26$i$i = (($146) + ($sub18$i$i))|0; + HEAP32[(184)>>2] = $add26$i$i; + HEAP32[(196)>>2] = $add$ptr17$i$i; + $or28$i$i = $add26$i$i | 1; + $head29$i$i = ((($add$ptr17$i$i)) + 4|0); + HEAP32[$head29$i$i>>2] = $or28$i$i; + $add$ptr30$i$i = (($add$ptr17$i$i) + ($add26$i$i)|0); + HEAP32[$add$ptr30$i$i>>2] = $add26$i$i; + break; + } + $head32$i$i = ((($add$ptr16$i$i)) + 4|0); + $147 = HEAP32[$head32$i$i>>2]|0; + $and33$i$i = $147 & 3; + $cmp34$i$i = ($and33$i$i|0)==(1); + if ($cmp34$i$i) { + $and37$i$i = $147 & -8; + $shr$i$45$i = $147 >>> 3; + $cmp38$i$i = ($147>>>0)<(256); + L331: do { + if ($cmp38$i$i) { + $fd$i$i = ((($add$ptr16$i$i)) + 8|0); + $148 = HEAP32[$fd$i$i>>2]|0; + $bk$i$46$i = ((($add$ptr16$i$i)) + 12|0); + $149 = HEAP32[$bk$i$46$i>>2]|0; + $shl$i$47$i = $shr$i$45$i << 1; + $arrayidx$i$48$i = (216 + ($shl$i$47$i<<2)|0); + $cmp41$i$i = ($148|0)==($arrayidx$i$48$i|0); + do { + if (!($cmp41$i$i)) { + $cmp42$i$i = ($148>>>0)<($150>>>0); + if ($cmp42$i$i) { + _abort(); + // unreachable; + } + $bk43$i$i = ((($148)) + 12|0); + $151 = HEAP32[$bk43$i$i>>2]|0; + $cmp44$i$i = ($151|0)==($add$ptr16$i$i|0); + if ($cmp44$i$i) { + break; + } + _abort(); + // unreachable; + } + } while(0); + $cmp46$i$49$i = ($149|0)==($148|0); + if ($cmp46$i$49$i) { + $shl48$i$i = 1 << $shr$i$45$i; + $neg$i$i = $shl48$i$i ^ -1; + $152 = HEAP32[44]|0; + $and49$i$i = $152 & $neg$i$i; + HEAP32[44] = $and49$i$i; + break; + } + $cmp54$i$i = ($149|0)==($arrayidx$i$48$i|0); + do { + if ($cmp54$i$i) { + $$pre5$i$i = ((($149)) + 8|0); + $fd68$pre$phi$i$iZ2D = $$pre5$i$i; + } else { + $cmp57$i$i = ($149>>>0)<($150>>>0); + if ($cmp57$i$i) { + _abort(); + // unreachable; + } + $fd59$i$i = ((($149)) + 8|0); + $153 = HEAP32[$fd59$i$i>>2]|0; + $cmp60$i$i = ($153|0)==($add$ptr16$i$i|0); + if ($cmp60$i$i) { + $fd68$pre$phi$i$iZ2D = $fd59$i$i; + break; + } + _abort(); + // unreachable; + } + } while(0); + $bk67$i$i = ((($148)) + 12|0); + HEAP32[$bk67$i$i>>2] = $149; + HEAP32[$fd68$pre$phi$i$iZ2D>>2] = $148; + } else { + $parent$i$51$i = ((($add$ptr16$i$i)) + 24|0); + $154 = HEAP32[$parent$i$51$i>>2]|0; + $bk74$i$i = ((($add$ptr16$i$i)) + 12|0); + $155 = HEAP32[$bk74$i$i>>2]|0; + $cmp75$i$i = ($155|0)==($add$ptr16$i$i|0); + do { + if ($cmp75$i$i) { + $child$i$i = ((($add$ptr16$i$i)) + 16|0); + $arrayidx96$i$i = ((($child$i$i)) + 4|0); + $159 = HEAP32[$arrayidx96$i$i>>2]|0; + $cmp97$i$i = ($159|0)==(0|0); + if ($cmp97$i$i) { + $160 = HEAP32[$child$i$i>>2]|0; + $cmp100$i$i = ($160|0)==(0|0); + if ($cmp100$i$i) { + $R$3$i$i = 0; + break; + } else { + $R$1$i$i = $160;$RP$1$i$i = $child$i$i; + } + } else { + $R$1$i$i = $159;$RP$1$i$i = $arrayidx96$i$i; + } + while(1) { + $arrayidx103$i$i = ((($R$1$i$i)) + 20|0); + $161 = HEAP32[$arrayidx103$i$i>>2]|0; + $cmp104$i$i = ($161|0)==(0|0); + if (!($cmp104$i$i)) { + $R$1$i$i = $161;$RP$1$i$i = $arrayidx103$i$i; + continue; + } + $arrayidx107$i$i = ((($R$1$i$i)) + 16|0); + $162 = HEAP32[$arrayidx107$i$i>>2]|0; + $cmp108$i$i = ($162|0)==(0|0); + if ($cmp108$i$i) { + $R$1$i$i$lcssa = $R$1$i$i;$RP$1$i$i$lcssa = $RP$1$i$i; + break; + } else { + $R$1$i$i = $162;$RP$1$i$i = $arrayidx107$i$i; + } + } + $cmp112$i$i = ($RP$1$i$i$lcssa>>>0)<($150>>>0); + if ($cmp112$i$i) { + _abort(); + // unreachable; + } else { + HEAP32[$RP$1$i$i$lcssa>>2] = 0; + $R$3$i$i = $R$1$i$i$lcssa; + break; + } + } else { + $fd78$i$i = ((($add$ptr16$i$i)) + 8|0); + $156 = HEAP32[$fd78$i$i>>2]|0; + $cmp81$i$i = ($156>>>0)<($150>>>0); + if ($cmp81$i$i) { + _abort(); + // unreachable; + } + $bk82$i$i = ((($156)) + 12|0); + $157 = HEAP32[$bk82$i$i>>2]|0; + $cmp83$i$i = ($157|0)==($add$ptr16$i$i|0); + if (!($cmp83$i$i)) { + _abort(); + // unreachable; + } + $fd85$i$i = ((($155)) + 8|0); + $158 = HEAP32[$fd85$i$i>>2]|0; + $cmp86$i$i = ($158|0)==($add$ptr16$i$i|0); + if ($cmp86$i$i) { + HEAP32[$bk82$i$i>>2] = $155; + HEAP32[$fd85$i$i>>2] = $156; + $R$3$i$i = $155; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $cmp120$i$53$i = ($154|0)==(0|0); + if ($cmp120$i$53$i) { + break; + } + $index$i$54$i = ((($add$ptr16$i$i)) + 28|0); + $163 = HEAP32[$index$i$54$i>>2]|0; + $arrayidx123$i$i = (480 + ($163<<2)|0); + $164 = HEAP32[$arrayidx123$i$i>>2]|0; + $cmp124$i$i = ($add$ptr16$i$i|0)==($164|0); + do { + if ($cmp124$i$i) { + HEAP32[$arrayidx123$i$i>>2] = $R$3$i$i; + $cond2$i$i = ($R$3$i$i|0)==(0|0); + if (!($cond2$i$i)) { + break; + } + $shl131$i$i = 1 << $163; + $neg132$i$i = $shl131$i$i ^ -1; + $165 = HEAP32[(180)>>2]|0; + $and133$i$i = $165 & $neg132$i$i; + HEAP32[(180)>>2] = $and133$i$i; + break L331; + } else { + $166 = HEAP32[(192)>>2]|0; + $cmp137$i$i = ($154>>>0)<($166>>>0); + if ($cmp137$i$i) { + _abort(); + // unreachable; + } + $arrayidx143$i$i = ((($154)) + 16|0); + $167 = HEAP32[$arrayidx143$i$i>>2]|0; + $cmp144$i$i = ($167|0)==($add$ptr16$i$i|0); + if ($cmp144$i$i) { + HEAP32[$arrayidx143$i$i>>2] = $R$3$i$i; + } else { + $arrayidx151$i$i = ((($154)) + 20|0); + HEAP32[$arrayidx151$i$i>>2] = $R$3$i$i; + } + $cmp156$i$i = ($R$3$i$i|0)==(0|0); + if ($cmp156$i$i) { + break L331; + } + } + } while(0); + $168 = HEAP32[(192)>>2]|0; + $cmp160$i$i = ($R$3$i$i>>>0)<($168>>>0); + if ($cmp160$i$i) { + _abort(); + // unreachable; + } + $parent165$i$i = ((($R$3$i$i)) + 24|0); + HEAP32[$parent165$i$i>>2] = $154; + $child166$i$i = ((($add$ptr16$i$i)) + 16|0); + $169 = HEAP32[$child166$i$i>>2]|0; + $cmp168$i$i = ($169|0)==(0|0); + do { + if (!($cmp168$i$i)) { + $cmp172$i$i = ($169>>>0)<($168>>>0); + if ($cmp172$i$i) { + _abort(); + // unreachable; + } else { + $arrayidx178$i$i = ((($R$3$i$i)) + 16|0); + HEAP32[$arrayidx178$i$i>>2] = $169; + $parent179$i$i = ((($169)) + 24|0); + HEAP32[$parent179$i$i>>2] = $R$3$i$i; + break; + } + } + } while(0); + $arrayidx184$i$i = ((($child166$i$i)) + 4|0); + $170 = HEAP32[$arrayidx184$i$i>>2]|0; + $cmp185$i$i = ($170|0)==(0|0); + if ($cmp185$i$i) { + break; + } + $171 = HEAP32[(192)>>2]|0; + $cmp189$i$i = ($170>>>0)<($171>>>0); + if ($cmp189$i$i) { + _abort(); + // unreachable; + } else { + $arrayidx195$i$i = ((($R$3$i$i)) + 20|0); + HEAP32[$arrayidx195$i$i>>2] = $170; + $parent196$i$i = ((($170)) + 24|0); + HEAP32[$parent196$i$i>>2] = $R$3$i$i; + break; + } + } + } while(0); + $add$ptr205$i$i = (($add$ptr16$i$i) + ($and37$i$i)|0); + $add206$i$i = (($and37$i$i) + ($sub18$i$i))|0; + $oldfirst$0$i$i = $add$ptr205$i$i;$qsize$0$i$i = $add206$i$i; + } else { + $oldfirst$0$i$i = $add$ptr16$i$i;$qsize$0$i$i = $sub18$i$i; + } + $head208$i$i = ((($oldfirst$0$i$i)) + 4|0); + $172 = HEAP32[$head208$i$i>>2]|0; + $and209$i$i = $172 & -2; + HEAP32[$head208$i$i>>2] = $and209$i$i; + $or210$i$i = $qsize$0$i$i | 1; + $head211$i$i = ((($add$ptr17$i$i)) + 4|0); + HEAP32[$head211$i$i>>2] = $or210$i$i; + $add$ptr212$i$i = (($add$ptr17$i$i) + ($qsize$0$i$i)|0); + HEAP32[$add$ptr212$i$i>>2] = $qsize$0$i$i; + $shr214$i$i = $qsize$0$i$i >>> 3; + $cmp215$i$i = ($qsize$0$i$i>>>0)<(256); + if ($cmp215$i$i) { + $shl221$i$i = $shr214$i$i << 1; + $arrayidx223$i$i = (216 + ($shl221$i$i<<2)|0); + $173 = HEAP32[44]|0; + $shl226$i$i = 1 << $shr214$i$i; + $and227$i$i = $173 & $shl226$i$i; + $tobool228$i$i = ($and227$i$i|0)==(0); + do { + if ($tobool228$i$i) { + $or232$i$i = $173 | $shl226$i$i; + HEAP32[44] = $or232$i$i; + $$pre$i$56$i = ((($arrayidx223$i$i)) + 8|0); + $$pre$phi$i$57$iZ2D = $$pre$i$56$i;$F224$0$i$i = $arrayidx223$i$i; + } else { + $174 = ((($arrayidx223$i$i)) + 8|0); + $175 = HEAP32[$174>>2]|0; + $176 = HEAP32[(192)>>2]|0; + $cmp236$i$i = ($175>>>0)<($176>>>0); + if (!($cmp236$i$i)) { + $$pre$phi$i$57$iZ2D = $174;$F224$0$i$i = $175; + break; + } + _abort(); + // unreachable; + } + } while(0); + HEAP32[$$pre$phi$i$57$iZ2D>>2] = $add$ptr17$i$i; + $bk246$i$i = ((($F224$0$i$i)) + 12|0); + HEAP32[$bk246$i$i>>2] = $add$ptr17$i$i; + $fd247$i$i = ((($add$ptr17$i$i)) + 8|0); + HEAP32[$fd247$i$i>>2] = $F224$0$i$i; + $bk248$i$i = ((($add$ptr17$i$i)) + 12|0); + HEAP32[$bk248$i$i>>2] = $arrayidx223$i$i; + break; + } + $shr253$i$i = $qsize$0$i$i >>> 8; + $cmp254$i$i = ($shr253$i$i|0)==(0); + do { + if ($cmp254$i$i) { + $I252$0$i$i = 0; + } else { + $cmp258$i$i = ($qsize$0$i$i>>>0)>(16777215); + if ($cmp258$i$i) { + $I252$0$i$i = 31; + break; + } + $sub262$i$i = (($shr253$i$i) + 1048320)|0; + $shr263$i$i = $sub262$i$i >>> 16; + $and264$i$i = $shr263$i$i & 8; + $shl265$i$i = $shr253$i$i << $and264$i$i; + $sub266$i$i = (($shl265$i$i) + 520192)|0; + $shr267$i$i = $sub266$i$i >>> 16; + $and268$i$i = $shr267$i$i & 4; + $add269$i$i = $and268$i$i | $and264$i$i; + $shl270$i$i = $shl265$i$i << $and268$i$i; + $sub271$i$i = (($shl270$i$i) + 245760)|0; + $shr272$i$i = $sub271$i$i >>> 16; + $and273$i$i = $shr272$i$i & 2; + $add274$i$i = $add269$i$i | $and273$i$i; + $sub275$i$i = (14 - ($add274$i$i))|0; + $shl276$i$i = $shl270$i$i << $and273$i$i; + $shr277$i$i = $shl276$i$i >>> 15; + $add278$i$i = (($sub275$i$i) + ($shr277$i$i))|0; + $shl279$i$i = $add278$i$i << 1; + $add280$i$i = (($add278$i$i) + 7)|0; + $shr281$i$i = $qsize$0$i$i >>> $add280$i$i; + $and282$i$i = $shr281$i$i & 1; + $add283$i$i = $and282$i$i | $shl279$i$i; + $I252$0$i$i = $add283$i$i; + } + } while(0); + $arrayidx287$i$i = (480 + ($I252$0$i$i<<2)|0); + $index288$i$i = ((($add$ptr17$i$i)) + 28|0); + HEAP32[$index288$i$i>>2] = $I252$0$i$i; + $child289$i$i = ((($add$ptr17$i$i)) + 16|0); + $arrayidx290$i$i = ((($child289$i$i)) + 4|0); + HEAP32[$arrayidx290$i$i>>2] = 0; + HEAP32[$child289$i$i>>2] = 0; + $177 = HEAP32[(180)>>2]|0; + $shl294$i$i = 1 << $I252$0$i$i; + $and295$i$i = $177 & $shl294$i$i; + $tobool296$i$i = ($and295$i$i|0)==(0); + if ($tobool296$i$i) { + $or300$i$i = $177 | $shl294$i$i; + HEAP32[(180)>>2] = $or300$i$i; + HEAP32[$arrayidx287$i$i>>2] = $add$ptr17$i$i; + $parent301$i$i = ((($add$ptr17$i$i)) + 24|0); + HEAP32[$parent301$i$i>>2] = $arrayidx287$i$i; + $bk302$i$i = ((($add$ptr17$i$i)) + 12|0); + HEAP32[$bk302$i$i>>2] = $add$ptr17$i$i; + $fd303$i$i = ((($add$ptr17$i$i)) + 8|0); + HEAP32[$fd303$i$i>>2] = $add$ptr17$i$i; + break; + } + $178 = HEAP32[$arrayidx287$i$i>>2]|0; + $cmp306$i$i = ($I252$0$i$i|0)==(31); + $shr310$i$i = $I252$0$i$i >>> 1; + $sub313$i$i = (25 - ($shr310$i$i))|0; + $cond315$i$i = $cmp306$i$i ? 0 : $sub313$i$i; + $shl316$i$i = $qsize$0$i$i << $cond315$i$i; + $K305$0$i$i = $shl316$i$i;$T$0$i$58$i = $178; + while(1) { + $head317$i$i = ((($T$0$i$58$i)) + 4|0); + $179 = HEAP32[$head317$i$i>>2]|0; + $and318$i$i = $179 & -8; + $cmp319$i$i = ($and318$i$i|0)==($qsize$0$i$i|0); + if ($cmp319$i$i) { + $T$0$i$58$i$lcssa = $T$0$i$58$i; + label = 281; + break; + } + $shr322$i$i = $K305$0$i$i >>> 31; + $arrayidx325$i$i = (((($T$0$i$58$i)) + 16|0) + ($shr322$i$i<<2)|0); + $shl326$i$i = $K305$0$i$i << 1; + $180 = HEAP32[$arrayidx325$i$i>>2]|0; + $cmp327$i$i = ($180|0)==(0|0); + if ($cmp327$i$i) { + $T$0$i$58$i$lcssa283 = $T$0$i$58$i;$arrayidx325$i$i$lcssa = $arrayidx325$i$i; + label = 278; + break; + } else { + $K305$0$i$i = $shl326$i$i;$T$0$i$58$i = $180; + } + } + if ((label|0) == 278) { + $181 = HEAP32[(192)>>2]|0; + $cmp332$i$i = ($arrayidx325$i$i$lcssa>>>0)<($181>>>0); + if ($cmp332$i$i) { + _abort(); + // unreachable; + } else { + HEAP32[$arrayidx325$i$i$lcssa>>2] = $add$ptr17$i$i; + $parent337$i$i = ((($add$ptr17$i$i)) + 24|0); + HEAP32[$parent337$i$i>>2] = $T$0$i$58$i$lcssa283; + $bk338$i$i = ((($add$ptr17$i$i)) + 12|0); + HEAP32[$bk338$i$i>>2] = $add$ptr17$i$i; + $fd339$i$i = ((($add$ptr17$i$i)) + 8|0); + HEAP32[$fd339$i$i>>2] = $add$ptr17$i$i; + break; + } + } + else if ((label|0) == 281) { + $fd344$i$i = ((($T$0$i$58$i$lcssa)) + 8|0); + $182 = HEAP32[$fd344$i$i>>2]|0; + $183 = HEAP32[(192)>>2]|0; + $cmp350$i$i = ($182>>>0)>=($183>>>0); + $not$cmp346$i$i = ($T$0$i$58$i$lcssa>>>0)>=($183>>>0); + $184 = $cmp350$i$i & $not$cmp346$i$i; + if ($184) { + $bk357$i$i = ((($182)) + 12|0); + HEAP32[$bk357$i$i>>2] = $add$ptr17$i$i; + HEAP32[$fd344$i$i>>2] = $add$ptr17$i$i; + $fd359$i$i = ((($add$ptr17$i$i)) + 8|0); + HEAP32[$fd359$i$i>>2] = $182; + $bk360$i$i = ((($add$ptr17$i$i)) + 12|0); + HEAP32[$bk360$i$i>>2] = $T$0$i$58$i$lcssa; + $parent361$i$i = ((($add$ptr17$i$i)) + 24|0); + HEAP32[$parent361$i$i>>2] = 0; + break; + } else { + _abort(); + // unreachable; + } + } + } + } while(0); + $add$ptr369$i$i = ((($add$ptr4$i$37$i)) + 8|0); + $retval$0 = $add$ptr369$i$i; + return ($retval$0|0); + } else { + $sp$0$i$i$i = (624); + } + } + while(1) { + $185 = HEAP32[$sp$0$i$i$i>>2]|0; + $cmp$i$i$i = ($185>>>0)>($119>>>0); + if (!($cmp$i$i$i)) { + $size$i$i$i = ((($sp$0$i$i$i)) + 4|0); + $186 = HEAP32[$size$i$i$i>>2]|0; + $add$ptr$i$i$i = (($185) + ($186)|0); + $cmp2$i$i$i = ($add$ptr$i$i$i>>>0)>($119>>>0); + if ($cmp2$i$i$i) { + $add$ptr$i$i$i$lcssa = $add$ptr$i$i$i; + break; + } + } + $next$i$i$i = ((($sp$0$i$i$i)) + 8|0); + $187 = HEAP32[$next$i$i$i>>2]|0; + $sp$0$i$i$i = $187; + } + $add$ptr2$i$i = ((($add$ptr$i$i$i$lcssa)) + -47|0); + $add$ptr3$i$i = ((($add$ptr2$i$i)) + 8|0); + $188 = $add$ptr3$i$i; + $and$i$14$i = $188 & 7; + $cmp$i$15$i = ($and$i$14$i|0)==(0); + $189 = (0 - ($188))|0; + $and6$i$i = $189 & 7; + $cond$i$16$i = $cmp$i$15$i ? 0 : $and6$i$i; + $add$ptr7$i$i = (($add$ptr2$i$i) + ($cond$i$16$i)|0); + $add$ptr8$i122$i = ((($119)) + 16|0); + $cmp9$i$i = ($add$ptr7$i$i>>>0)<($add$ptr8$i122$i>>>0); + $cond13$i$i = $cmp9$i$i ? $119 : $add$ptr7$i$i; + $add$ptr14$i$i = ((($cond13$i$i)) + 8|0); + $add$ptr15$i$i = ((($cond13$i$i)) + 24|0); + $sub16$i$i = (($tsize$795$i) + -40)|0; + $add$ptr$i$1$i$i = ((($tbase$796$i)) + 8|0); + $190 = $add$ptr$i$1$i$i; + $and$i$i$i = $190 & 7; + $cmp$i$2$i$i = ($and$i$i$i|0)==(0); + $191 = (0 - ($190))|0; + $and3$i$i$i = $191 & 7; + $cond$i$i$i = $cmp$i$2$i$i ? 0 : $and3$i$i$i; + $add$ptr4$i$i$i = (($tbase$796$i) + ($cond$i$i$i)|0); + $sub5$i$i$i = (($sub16$i$i) - ($cond$i$i$i))|0; + HEAP32[(200)>>2] = $add$ptr4$i$i$i; + HEAP32[(188)>>2] = $sub5$i$i$i; + $or$i$i$i = $sub5$i$i$i | 1; + $head$i$i$i = ((($add$ptr4$i$i$i)) + 4|0); + HEAP32[$head$i$i$i>>2] = $or$i$i$i; + $add$ptr6$i$i$i = (($add$ptr4$i$i$i) + ($sub5$i$i$i)|0); + $head7$i$i$i = ((($add$ptr6$i$i$i)) + 4|0); + HEAP32[$head7$i$i$i>>2] = 40; + $192 = HEAP32[(664)>>2]|0; + HEAP32[(204)>>2] = $192; + $head$i$17$i = ((($cond13$i$i)) + 4|0); + HEAP32[$head$i$17$i>>2] = 27; + ;HEAP32[$add$ptr14$i$i>>2]=HEAP32[(624)>>2]|0;HEAP32[$add$ptr14$i$i+4>>2]=HEAP32[(624)+4>>2]|0;HEAP32[$add$ptr14$i$i+8>>2]=HEAP32[(624)+8>>2]|0;HEAP32[$add$ptr14$i$i+12>>2]=HEAP32[(624)+12>>2]|0; + HEAP32[(624)>>2] = $tbase$796$i; + HEAP32[(628)>>2] = $tsize$795$i; + HEAP32[(636)>>2] = 0; + HEAP32[(632)>>2] = $add$ptr14$i$i; + $p$0$i$i = $add$ptr15$i$i; + while(1) { + $add$ptr24$i$i = ((($p$0$i$i)) + 4|0); + HEAP32[$add$ptr24$i$i>>2] = 7; + $193 = ((($add$ptr24$i$i)) + 4|0); + $cmp27$i$i = ($193>>>0)<($add$ptr$i$i$i$lcssa>>>0); + if ($cmp27$i$i) { + $p$0$i$i = $add$ptr24$i$i; + } else { + break; + } + } + $cmp28$i$i = ($cond13$i$i|0)==($119|0); + if (!($cmp28$i$i)) { + $sub$ptr$lhs$cast$i$i = $cond13$i$i; + $sub$ptr$rhs$cast$i$i = $119; + $sub$ptr$sub$i$i = (($sub$ptr$lhs$cast$i$i) - ($sub$ptr$rhs$cast$i$i))|0; + $194 = HEAP32[$head$i$17$i>>2]|0; + $and32$i$i = $194 & -2; + HEAP32[$head$i$17$i>>2] = $and32$i$i; + $or33$i$i = $sub$ptr$sub$i$i | 1; + $head34$i$i = ((($119)) + 4|0); + HEAP32[$head34$i$i>>2] = $or33$i$i; + HEAP32[$cond13$i$i>>2] = $sub$ptr$sub$i$i; + $shr$i$i = $sub$ptr$sub$i$i >>> 3; + $cmp36$i$i = ($sub$ptr$sub$i$i>>>0)<(256); + if ($cmp36$i$i) { + $shl$i$19$i = $shr$i$i << 1; + $arrayidx$i$20$i = (216 + ($shl$i$19$i<<2)|0); + $195 = HEAP32[44]|0; + $shl39$i$i = 1 << $shr$i$i; + $and40$i$i = $195 & $shl39$i$i; + $tobool$i$i = ($and40$i$i|0)==(0); + if ($tobool$i$i) { + $or44$i$i = $195 | $shl39$i$i; + HEAP32[44] = $or44$i$i; + $$pre$i$i = ((($arrayidx$i$20$i)) + 8|0); + $$pre$phi$i$iZ2D = $$pre$i$i;$F$0$i$i = $arrayidx$i$20$i; + } else { + $196 = ((($arrayidx$i$20$i)) + 8|0); + $197 = HEAP32[$196>>2]|0; + $198 = HEAP32[(192)>>2]|0; + $cmp46$i$i = ($197>>>0)<($198>>>0); + if ($cmp46$i$i) { + _abort(); + // unreachable; + } else { + $$pre$phi$i$iZ2D = $196;$F$0$i$i = $197; + } + } + HEAP32[$$pre$phi$i$iZ2D>>2] = $119; + $bk$i$i = ((($F$0$i$i)) + 12|0); + HEAP32[$bk$i$i>>2] = $119; + $fd54$i$i = ((($119)) + 8|0); + HEAP32[$fd54$i$i>>2] = $F$0$i$i; + $bk55$i$i = ((($119)) + 12|0); + HEAP32[$bk55$i$i>>2] = $arrayidx$i$20$i; + break; + } + $shr58$i$i = $sub$ptr$sub$i$i >>> 8; + $cmp59$i$i = ($shr58$i$i|0)==(0); + if ($cmp59$i$i) { + $I57$0$i$i = 0; + } else { + $cmp63$i$i = ($sub$ptr$sub$i$i>>>0)>(16777215); + if ($cmp63$i$i) { + $I57$0$i$i = 31; + } else { + $sub67$i$i = (($shr58$i$i) + 1048320)|0; + $shr68$i$i = $sub67$i$i >>> 16; + $and69$i$i = $shr68$i$i & 8; + $shl70$i$i = $shr58$i$i << $and69$i$i; + $sub71$i$i = (($shl70$i$i) + 520192)|0; + $shr72$i$i = $sub71$i$i >>> 16; + $and73$i$i = $shr72$i$i & 4; + $add74$i$i = $and73$i$i | $and69$i$i; + $shl75$i$i = $shl70$i$i << $and73$i$i; + $sub76$i$i = (($shl75$i$i) + 245760)|0; + $shr77$i$i = $sub76$i$i >>> 16; + $and78$i$i = $shr77$i$i & 2; + $add79$i$i = $add74$i$i | $and78$i$i; + $sub80$i$i = (14 - ($add79$i$i))|0; + $shl81$i$i = $shl75$i$i << $and78$i$i; + $shr82$i$i = $shl81$i$i >>> 15; + $add83$i$i = (($sub80$i$i) + ($shr82$i$i))|0; + $shl84$i$i = $add83$i$i << 1; + $add85$i$i = (($add83$i$i) + 7)|0; + $shr86$i$i = $sub$ptr$sub$i$i >>> $add85$i$i; + $and87$i$i = $shr86$i$i & 1; + $add88$i$i = $and87$i$i | $shl84$i$i; + $I57$0$i$i = $add88$i$i; + } + } + $arrayidx91$i$i = (480 + ($I57$0$i$i<<2)|0); + $index$i$i = ((($119)) + 28|0); + HEAP32[$index$i$i>>2] = $I57$0$i$i; + $arrayidx92$i$i = ((($119)) + 20|0); + HEAP32[$arrayidx92$i$i>>2] = 0; + HEAP32[$add$ptr8$i122$i>>2] = 0; + $199 = HEAP32[(180)>>2]|0; + $shl95$i$i = 1 << $I57$0$i$i; + $and96$i$i = $199 & $shl95$i$i; + $tobool97$i$i = ($and96$i$i|0)==(0); + if ($tobool97$i$i) { + $or101$i$i = $199 | $shl95$i$i; + HEAP32[(180)>>2] = $or101$i$i; + HEAP32[$arrayidx91$i$i>>2] = $119; + $parent$i$i = ((($119)) + 24|0); + HEAP32[$parent$i$i>>2] = $arrayidx91$i$i; + $bk102$i$i = ((($119)) + 12|0); + HEAP32[$bk102$i$i>>2] = $119; + $fd103$i$i = ((($119)) + 8|0); + HEAP32[$fd103$i$i>>2] = $119; + break; + } + $200 = HEAP32[$arrayidx91$i$i>>2]|0; + $cmp106$i$i = ($I57$0$i$i|0)==(31); + $shr110$i$i = $I57$0$i$i >>> 1; + $sub113$i$i = (25 - ($shr110$i$i))|0; + $cond115$i$i = $cmp106$i$i ? 0 : $sub113$i$i; + $shl116$i$i = $sub$ptr$sub$i$i << $cond115$i$i; + $K105$0$i$i = $shl116$i$i;$T$0$i$i = $200; + while(1) { + $head118$i$i = ((($T$0$i$i)) + 4|0); + $201 = HEAP32[$head118$i$i>>2]|0; + $and119$i$i = $201 & -8; + $cmp120$i$i = ($and119$i$i|0)==($sub$ptr$sub$i$i|0); + if ($cmp120$i$i) { + $T$0$i$i$lcssa = $T$0$i$i; + label = 307; + break; + } + $shr123$i$i = $K105$0$i$i >>> 31; + $arrayidx126$i$i = (((($T$0$i$i)) + 16|0) + ($shr123$i$i<<2)|0); + $shl127$i$i = $K105$0$i$i << 1; + $202 = HEAP32[$arrayidx126$i$i>>2]|0; + $cmp128$i$i = ($202|0)==(0|0); + if ($cmp128$i$i) { + $T$0$i$i$lcssa284 = $T$0$i$i;$arrayidx126$i$i$lcssa = $arrayidx126$i$i; + label = 304; + break; + } else { + $K105$0$i$i = $shl127$i$i;$T$0$i$i = $202; + } + } + if ((label|0) == 304) { + $203 = HEAP32[(192)>>2]|0; + $cmp133$i$i = ($arrayidx126$i$i$lcssa>>>0)<($203>>>0); + if ($cmp133$i$i) { + _abort(); + // unreachable; + } else { + HEAP32[$arrayidx126$i$i$lcssa>>2] = $119; + $parent138$i$i = ((($119)) + 24|0); + HEAP32[$parent138$i$i>>2] = $T$0$i$i$lcssa284; + $bk139$i$i = ((($119)) + 12|0); + HEAP32[$bk139$i$i>>2] = $119; + $fd140$i$i = ((($119)) + 8|0); + HEAP32[$fd140$i$i>>2] = $119; + break; + } + } + else if ((label|0) == 307) { + $fd148$i$i = ((($T$0$i$i$lcssa)) + 8|0); + $204 = HEAP32[$fd148$i$i>>2]|0; + $205 = HEAP32[(192)>>2]|0; + $cmp153$i$i = ($204>>>0)>=($205>>>0); + $not$cmp150$i$i = ($T$0$i$i$lcssa>>>0)>=($205>>>0); + $206 = $cmp153$i$i & $not$cmp150$i$i; + if ($206) { + $bk158$i$i = ((($204)) + 12|0); + HEAP32[$bk158$i$i>>2] = $119; + HEAP32[$fd148$i$i>>2] = $119; + $fd160$i$i = ((($119)) + 8|0); + HEAP32[$fd160$i$i>>2] = $204; + $bk161$i$i = ((($119)) + 12|0); + HEAP32[$bk161$i$i>>2] = $T$0$i$i$lcssa; + $parent162$i$i = ((($119)) + 24|0); + HEAP32[$parent162$i$i>>2] = 0; + break; + } else { + _abort(); + // unreachable; + } + } + } + } + } while(0); + $207 = HEAP32[(188)>>2]|0; + $cmp257$i = ($207>>>0)>($nb$0>>>0); + if ($cmp257$i) { + $sub260$i = (($207) - ($nb$0))|0; + HEAP32[(188)>>2] = $sub260$i; + $208 = HEAP32[(200)>>2]|0; + $add$ptr262$i = (($208) + ($nb$0)|0); + HEAP32[(200)>>2] = $add$ptr262$i; + $or264$i = $sub260$i | 1; + $head265$i = ((($add$ptr262$i)) + 4|0); + HEAP32[$head265$i>>2] = $or264$i; + $or267$i = $nb$0 | 3; + $head268$i = ((($208)) + 4|0); + HEAP32[$head268$i>>2] = $or267$i; + $add$ptr269$i = ((($208)) + 8|0); + $retval$0 = $add$ptr269$i; + return ($retval$0|0); + } + } + $call275$i = (___errno_location()|0); + HEAP32[$call275$i>>2] = 12; + $retval$0 = 0; + return ($retval$0|0); +} +function _free($mem) { + $mem = $mem|0; + var $$pre = 0, $$pre$phiZ2D = 0, $$pre312 = 0, $$pre313 = 0, $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0; + var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0; + var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0; + var $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $8 = 0, $9 = 0, $F510$0 = 0; + var $I534$0 = 0, $K583$0 = 0, $R$1 = 0, $R$1$lcssa = 0, $R$3 = 0, $R332$1 = 0, $R332$1$lcssa = 0, $R332$3 = 0, $RP$1 = 0, $RP$1$lcssa = 0, $RP360$1 = 0, $RP360$1$lcssa = 0, $T$0 = 0, $T$0$lcssa = 0, $T$0$lcssa319 = 0, $add$ptr = 0, $add$ptr16 = 0, $add$ptr217 = 0, $add$ptr261 = 0, $add$ptr482 = 0; + var $add$ptr498 = 0, $add$ptr6 = 0, $add17 = 0, $add246 = 0, $add258 = 0, $add267 = 0, $add550 = 0, $add555 = 0, $add559 = 0, $add561 = 0, $add564 = 0, $and = 0, $and140 = 0, $and210 = 0, $and215 = 0, $and232 = 0, $and240 = 0, $and266 = 0, $and301 = 0, $and410 = 0; + var $and46 = 0, $and495 = 0, $and5 = 0, $and512 = 0, $and545 = 0, $and549 = 0, $and554 = 0, $and563 = 0, $and574 = 0, $and592 = 0, $and8 = 0, $arrayidx = 0, $arrayidx108 = 0, $arrayidx113 = 0, $arrayidx130 = 0, $arrayidx149 = 0, $arrayidx157 = 0, $arrayidx182 = 0, $arrayidx188 = 0, $arrayidx198 = 0; + var $arrayidx279 = 0, $arrayidx362 = 0, $arrayidx374 = 0, $arrayidx379 = 0, $arrayidx400 = 0, $arrayidx419 = 0, $arrayidx427 = 0, $arrayidx454 = 0, $arrayidx460 = 0, $arrayidx470 = 0, $arrayidx509 = 0, $arrayidx567 = 0, $arrayidx570 = 0, $arrayidx599 = 0, $arrayidx599$lcssa = 0, $arrayidx99 = 0, $bk = 0, $bk275 = 0, $bk286 = 0, $bk321 = 0; + var $bk333 = 0, $bk34 = 0, $bk343 = 0, $bk529 = 0, $bk531 = 0, $bk580 = 0, $bk611 = 0, $bk631 = 0, $bk634 = 0, $bk66 = 0, $bk73 = 0, $bk82 = 0, $child = 0, $child171 = 0, $child361 = 0, $child443 = 0, $child569 = 0, $cmp = 0, $cmp$i = 0, $cmp1 = 0; + var $cmp100 = 0, $cmp104 = 0, $cmp109 = 0, $cmp114 = 0, $cmp118 = 0, $cmp127 = 0, $cmp13 = 0, $cmp131 = 0, $cmp143 = 0, $cmp150 = 0, $cmp162 = 0, $cmp165 = 0, $cmp173 = 0, $cmp176 = 0, $cmp18 = 0, $cmp189 = 0, $cmp192 = 0, $cmp2 = 0, $cmp211 = 0, $cmp22 = 0; + var $cmp228 = 0, $cmp243 = 0, $cmp249 = 0, $cmp25 = 0, $cmp255 = 0, $cmp269 = 0, $cmp280 = 0, $cmp283 = 0, $cmp287 = 0, $cmp29 = 0, $cmp296 = 0, $cmp305 = 0, $cmp308 = 0, $cmp31 = 0, $cmp312 = 0, $cmp334 = 0, $cmp340 = 0, $cmp344 = 0, $cmp348 = 0, $cmp35 = 0; + var $cmp363 = 0, $cmp368 = 0, $cmp375 = 0, $cmp380 = 0, $cmp386 = 0, $cmp395 = 0, $cmp401 = 0, $cmp413 = 0, $cmp42 = 0, $cmp420 = 0, $cmp432 = 0, $cmp435 = 0, $cmp445 = 0, $cmp448 = 0, $cmp461 = 0, $cmp464 = 0, $cmp484 = 0, $cmp50 = 0, $cmp502 = 0, $cmp519 = 0; + var $cmp53 = 0, $cmp536 = 0, $cmp540 = 0, $cmp57 = 0, $cmp584 = 0, $cmp593 = 0, $cmp601 = 0, $cmp605 = 0, $cmp624 = 0, $cmp640 = 0, $cmp74 = 0, $cmp80 = 0, $cmp83 = 0, $cmp87 = 0, $cond = 0, $cond291 = 0, $cond292 = 0, $dec = 0, $fd = 0, $fd273 = 0; + var $fd311 = 0, $fd322$pre$phiZ2D = 0, $fd338 = 0, $fd347 = 0, $fd530 = 0, $fd56 = 0, $fd581 = 0, $fd612 = 0, $fd620 = 0, $fd633 = 0, $fd67$pre$phiZ2D = 0, $fd78 = 0, $fd86 = 0, $head = 0, $head209 = 0, $head216 = 0, $head231 = 0, $head248 = 0, $head260 = 0, $head481 = 0; + var $head497 = 0, $head591 = 0, $idx$neg = 0, $index = 0, $index399 = 0, $index568 = 0, $neg = 0, $neg139 = 0, $neg300 = 0, $neg409 = 0, $next4$i = 0, $not$cmp621 = 0, $or = 0, $or247 = 0, $or259 = 0, $or480 = 0, $or496 = 0, $or516 = 0, $or578 = 0, $p$1 = 0; + var $parent = 0, $parent170 = 0, $parent183 = 0, $parent199 = 0, $parent331 = 0, $parent442 = 0, $parent455 = 0, $parent471 = 0, $parent579 = 0, $parent610 = 0, $parent635 = 0, $psize$1 = 0, $psize$2 = 0, $shl = 0, $shl138 = 0, $shl278 = 0, $shl299 = 0, $shl408 = 0, $shl45 = 0, $shl508 = 0; + var $shl511 = 0, $shl546 = 0, $shl551 = 0, $shl557 = 0, $shl560 = 0, $shl573 = 0, $shl590 = 0, $shl600 = 0, $shr = 0, $shr268 = 0, $shr501 = 0, $shr535 = 0, $shr544 = 0, $shr548 = 0, $shr553 = 0, $shr558 = 0, $shr562 = 0, $shr586 = 0, $shr596 = 0, $sp$0$i = 0; + var $sp$0$in$i = 0, $sub = 0, $sub547 = 0, $sub552 = 0, $sub556 = 0, $sub589 = 0, $tobool233 = 0, $tobool241 = 0, $tobool513 = 0, $tobool575 = 0, $tobool9 = 0, label = 0, sp = 0; + sp = STACKTOP; + $cmp = ($mem|0)==(0|0); + if ($cmp) { + return; + } + $add$ptr = ((($mem)) + -8|0); + $0 = HEAP32[(192)>>2]|0; + $cmp1 = ($add$ptr>>>0)<($0>>>0); + if ($cmp1) { + _abort(); + // unreachable; + } + $head = ((($mem)) + -4|0); + $1 = HEAP32[$head>>2]|0; + $and = $1 & 3; + $cmp2 = ($and|0)==(1); + if ($cmp2) { + _abort(); + // unreachable; + } + $and5 = $1 & -8; + $add$ptr6 = (($add$ptr) + ($and5)|0); + $and8 = $1 & 1; + $tobool9 = ($and8|0)==(0); + do { + if ($tobool9) { + $2 = HEAP32[$add$ptr>>2]|0; + $cmp13 = ($and|0)==(0); + if ($cmp13) { + return; + } + $idx$neg = (0 - ($2))|0; + $add$ptr16 = (($add$ptr) + ($idx$neg)|0); + $add17 = (($2) + ($and5))|0; + $cmp18 = ($add$ptr16>>>0)<($0>>>0); + if ($cmp18) { + _abort(); + // unreachable; + } + $3 = HEAP32[(196)>>2]|0; + $cmp22 = ($add$ptr16|0)==($3|0); + if ($cmp22) { + $head209 = ((($add$ptr6)) + 4|0); + $27 = HEAP32[$head209>>2]|0; + $and210 = $27 & 3; + $cmp211 = ($and210|0)==(3); + if (!($cmp211)) { + $p$1 = $add$ptr16;$psize$1 = $add17; + break; + } + HEAP32[(184)>>2] = $add17; + $and215 = $27 & -2; + HEAP32[$head209>>2] = $and215; + $or = $add17 | 1; + $head216 = ((($add$ptr16)) + 4|0); + HEAP32[$head216>>2] = $or; + $add$ptr217 = (($add$ptr16) + ($add17)|0); + HEAP32[$add$ptr217>>2] = $add17; + return; + } + $shr = $2 >>> 3; + $cmp25 = ($2>>>0)<(256); + if ($cmp25) { + $fd = ((($add$ptr16)) + 8|0); + $4 = HEAP32[$fd>>2]|0; + $bk = ((($add$ptr16)) + 12|0); + $5 = HEAP32[$bk>>2]|0; + $shl = $shr << 1; + $arrayidx = (216 + ($shl<<2)|0); + $cmp29 = ($4|0)==($arrayidx|0); + if (!($cmp29)) { + $cmp31 = ($4>>>0)<($0>>>0); + if ($cmp31) { + _abort(); + // unreachable; + } + $bk34 = ((($4)) + 12|0); + $6 = HEAP32[$bk34>>2]|0; + $cmp35 = ($6|0)==($add$ptr16|0); + if (!($cmp35)) { + _abort(); + // unreachable; + } + } + $cmp42 = ($5|0)==($4|0); + if ($cmp42) { + $shl45 = 1 << $shr; + $neg = $shl45 ^ -1; + $7 = HEAP32[44]|0; + $and46 = $7 & $neg; + HEAP32[44] = $and46; + $p$1 = $add$ptr16;$psize$1 = $add17; + break; + } + $cmp50 = ($5|0)==($arrayidx|0); + if ($cmp50) { + $$pre313 = ((($5)) + 8|0); + $fd67$pre$phiZ2D = $$pre313; + } else { + $cmp53 = ($5>>>0)<($0>>>0); + if ($cmp53) { + _abort(); + // unreachable; + } + $fd56 = ((($5)) + 8|0); + $8 = HEAP32[$fd56>>2]|0; + $cmp57 = ($8|0)==($add$ptr16|0); + if ($cmp57) { + $fd67$pre$phiZ2D = $fd56; + } else { + _abort(); + // unreachable; + } + } + $bk66 = ((($4)) + 12|0); + HEAP32[$bk66>>2] = $5; + HEAP32[$fd67$pre$phiZ2D>>2] = $4; + $p$1 = $add$ptr16;$psize$1 = $add17; + break; + } + $parent = ((($add$ptr16)) + 24|0); + $9 = HEAP32[$parent>>2]|0; + $bk73 = ((($add$ptr16)) + 12|0); + $10 = HEAP32[$bk73>>2]|0; + $cmp74 = ($10|0)==($add$ptr16|0); + do { + if ($cmp74) { + $child = ((($add$ptr16)) + 16|0); + $arrayidx99 = ((($child)) + 4|0); + $14 = HEAP32[$arrayidx99>>2]|0; + $cmp100 = ($14|0)==(0|0); + if ($cmp100) { + $15 = HEAP32[$child>>2]|0; + $cmp104 = ($15|0)==(0|0); + if ($cmp104) { + $R$3 = 0; + break; + } else { + $R$1 = $15;$RP$1 = $child; + } + } else { + $R$1 = $14;$RP$1 = $arrayidx99; + } + while(1) { + $arrayidx108 = ((($R$1)) + 20|0); + $16 = HEAP32[$arrayidx108>>2]|0; + $cmp109 = ($16|0)==(0|0); + if (!($cmp109)) { + $R$1 = $16;$RP$1 = $arrayidx108; + continue; + } + $arrayidx113 = ((($R$1)) + 16|0); + $17 = HEAP32[$arrayidx113>>2]|0; + $cmp114 = ($17|0)==(0|0); + if ($cmp114) { + $R$1$lcssa = $R$1;$RP$1$lcssa = $RP$1; + break; + } else { + $R$1 = $17;$RP$1 = $arrayidx113; + } + } + $cmp118 = ($RP$1$lcssa>>>0)<($0>>>0); + if ($cmp118) { + _abort(); + // unreachable; + } else { + HEAP32[$RP$1$lcssa>>2] = 0; + $R$3 = $R$1$lcssa; + break; + } + } else { + $fd78 = ((($add$ptr16)) + 8|0); + $11 = HEAP32[$fd78>>2]|0; + $cmp80 = ($11>>>0)<($0>>>0); + if ($cmp80) { + _abort(); + // unreachable; + } + $bk82 = ((($11)) + 12|0); + $12 = HEAP32[$bk82>>2]|0; + $cmp83 = ($12|0)==($add$ptr16|0); + if (!($cmp83)) { + _abort(); + // unreachable; + } + $fd86 = ((($10)) + 8|0); + $13 = HEAP32[$fd86>>2]|0; + $cmp87 = ($13|0)==($add$ptr16|0); + if ($cmp87) { + HEAP32[$bk82>>2] = $10; + HEAP32[$fd86>>2] = $11; + $R$3 = $10; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $cmp127 = ($9|0)==(0|0); + if ($cmp127) { + $p$1 = $add$ptr16;$psize$1 = $add17; + } else { + $index = ((($add$ptr16)) + 28|0); + $18 = HEAP32[$index>>2]|0; + $arrayidx130 = (480 + ($18<<2)|0); + $19 = HEAP32[$arrayidx130>>2]|0; + $cmp131 = ($add$ptr16|0)==($19|0); + if ($cmp131) { + HEAP32[$arrayidx130>>2] = $R$3; + $cond291 = ($R$3|0)==(0|0); + if ($cond291) { + $shl138 = 1 << $18; + $neg139 = $shl138 ^ -1; + $20 = HEAP32[(180)>>2]|0; + $and140 = $20 & $neg139; + HEAP32[(180)>>2] = $and140; + $p$1 = $add$ptr16;$psize$1 = $add17; + break; + } + } else { + $21 = HEAP32[(192)>>2]|0; + $cmp143 = ($9>>>0)<($21>>>0); + if ($cmp143) { + _abort(); + // unreachable; + } + $arrayidx149 = ((($9)) + 16|0); + $22 = HEAP32[$arrayidx149>>2]|0; + $cmp150 = ($22|0)==($add$ptr16|0); + if ($cmp150) { + HEAP32[$arrayidx149>>2] = $R$3; + } else { + $arrayidx157 = ((($9)) + 20|0); + HEAP32[$arrayidx157>>2] = $R$3; + } + $cmp162 = ($R$3|0)==(0|0); + if ($cmp162) { + $p$1 = $add$ptr16;$psize$1 = $add17; + break; + } + } + $23 = HEAP32[(192)>>2]|0; + $cmp165 = ($R$3>>>0)<($23>>>0); + if ($cmp165) { + _abort(); + // unreachable; + } + $parent170 = ((($R$3)) + 24|0); + HEAP32[$parent170>>2] = $9; + $child171 = ((($add$ptr16)) + 16|0); + $24 = HEAP32[$child171>>2]|0; + $cmp173 = ($24|0)==(0|0); + do { + if (!($cmp173)) { + $cmp176 = ($24>>>0)<($23>>>0); + if ($cmp176) { + _abort(); + // unreachable; + } else { + $arrayidx182 = ((($R$3)) + 16|0); + HEAP32[$arrayidx182>>2] = $24; + $parent183 = ((($24)) + 24|0); + HEAP32[$parent183>>2] = $R$3; + break; + } + } + } while(0); + $arrayidx188 = ((($child171)) + 4|0); + $25 = HEAP32[$arrayidx188>>2]|0; + $cmp189 = ($25|0)==(0|0); + if ($cmp189) { + $p$1 = $add$ptr16;$psize$1 = $add17; + } else { + $26 = HEAP32[(192)>>2]|0; + $cmp192 = ($25>>>0)<($26>>>0); + if ($cmp192) { + _abort(); + // unreachable; + } else { + $arrayidx198 = ((($R$3)) + 20|0); + HEAP32[$arrayidx198>>2] = $25; + $parent199 = ((($25)) + 24|0); + HEAP32[$parent199>>2] = $R$3; + $p$1 = $add$ptr16;$psize$1 = $add17; + break; + } + } + } + } else { + $p$1 = $add$ptr;$psize$1 = $and5; + } + } while(0); + $cmp228 = ($p$1>>>0)<($add$ptr6>>>0); + if (!($cmp228)) { + _abort(); + // unreachable; + } + $head231 = ((($add$ptr6)) + 4|0); + $28 = HEAP32[$head231>>2]|0; + $and232 = $28 & 1; + $tobool233 = ($and232|0)==(0); + if ($tobool233) { + _abort(); + // unreachable; + } + $and240 = $28 & 2; + $tobool241 = ($and240|0)==(0); + if ($tobool241) { + $29 = HEAP32[(200)>>2]|0; + $cmp243 = ($add$ptr6|0)==($29|0); + if ($cmp243) { + $30 = HEAP32[(188)>>2]|0; + $add246 = (($30) + ($psize$1))|0; + HEAP32[(188)>>2] = $add246; + HEAP32[(200)>>2] = $p$1; + $or247 = $add246 | 1; + $head248 = ((($p$1)) + 4|0); + HEAP32[$head248>>2] = $or247; + $31 = HEAP32[(196)>>2]|0; + $cmp249 = ($p$1|0)==($31|0); + if (!($cmp249)) { + return; + } + HEAP32[(196)>>2] = 0; + HEAP32[(184)>>2] = 0; + return; + } + $32 = HEAP32[(196)>>2]|0; + $cmp255 = ($add$ptr6|0)==($32|0); + if ($cmp255) { + $33 = HEAP32[(184)>>2]|0; + $add258 = (($33) + ($psize$1))|0; + HEAP32[(184)>>2] = $add258; + HEAP32[(196)>>2] = $p$1; + $or259 = $add258 | 1; + $head260 = ((($p$1)) + 4|0); + HEAP32[$head260>>2] = $or259; + $add$ptr261 = (($p$1) + ($add258)|0); + HEAP32[$add$ptr261>>2] = $add258; + return; + } + $and266 = $28 & -8; + $add267 = (($and266) + ($psize$1))|0; + $shr268 = $28 >>> 3; + $cmp269 = ($28>>>0)<(256); + do { + if ($cmp269) { + $fd273 = ((($add$ptr6)) + 8|0); + $34 = HEAP32[$fd273>>2]|0; + $bk275 = ((($add$ptr6)) + 12|0); + $35 = HEAP32[$bk275>>2]|0; + $shl278 = $shr268 << 1; + $arrayidx279 = (216 + ($shl278<<2)|0); + $cmp280 = ($34|0)==($arrayidx279|0); + if (!($cmp280)) { + $36 = HEAP32[(192)>>2]|0; + $cmp283 = ($34>>>0)<($36>>>0); + if ($cmp283) { + _abort(); + // unreachable; + } + $bk286 = ((($34)) + 12|0); + $37 = HEAP32[$bk286>>2]|0; + $cmp287 = ($37|0)==($add$ptr6|0); + if (!($cmp287)) { + _abort(); + // unreachable; + } + } + $cmp296 = ($35|0)==($34|0); + if ($cmp296) { + $shl299 = 1 << $shr268; + $neg300 = $shl299 ^ -1; + $38 = HEAP32[44]|0; + $and301 = $38 & $neg300; + HEAP32[44] = $and301; + break; + } + $cmp305 = ($35|0)==($arrayidx279|0); + if ($cmp305) { + $$pre312 = ((($35)) + 8|0); + $fd322$pre$phiZ2D = $$pre312; + } else { + $39 = HEAP32[(192)>>2]|0; + $cmp308 = ($35>>>0)<($39>>>0); + if ($cmp308) { + _abort(); + // unreachable; + } + $fd311 = ((($35)) + 8|0); + $40 = HEAP32[$fd311>>2]|0; + $cmp312 = ($40|0)==($add$ptr6|0); + if ($cmp312) { + $fd322$pre$phiZ2D = $fd311; + } else { + _abort(); + // unreachable; + } + } + $bk321 = ((($34)) + 12|0); + HEAP32[$bk321>>2] = $35; + HEAP32[$fd322$pre$phiZ2D>>2] = $34; + } else { + $parent331 = ((($add$ptr6)) + 24|0); + $41 = HEAP32[$parent331>>2]|0; + $bk333 = ((($add$ptr6)) + 12|0); + $42 = HEAP32[$bk333>>2]|0; + $cmp334 = ($42|0)==($add$ptr6|0); + do { + if ($cmp334) { + $child361 = ((($add$ptr6)) + 16|0); + $arrayidx362 = ((($child361)) + 4|0); + $47 = HEAP32[$arrayidx362>>2]|0; + $cmp363 = ($47|0)==(0|0); + if ($cmp363) { + $48 = HEAP32[$child361>>2]|0; + $cmp368 = ($48|0)==(0|0); + if ($cmp368) { + $R332$3 = 0; + break; + } else { + $R332$1 = $48;$RP360$1 = $child361; + } + } else { + $R332$1 = $47;$RP360$1 = $arrayidx362; + } + while(1) { + $arrayidx374 = ((($R332$1)) + 20|0); + $49 = HEAP32[$arrayidx374>>2]|0; + $cmp375 = ($49|0)==(0|0); + if (!($cmp375)) { + $R332$1 = $49;$RP360$1 = $arrayidx374; + continue; + } + $arrayidx379 = ((($R332$1)) + 16|0); + $50 = HEAP32[$arrayidx379>>2]|0; + $cmp380 = ($50|0)==(0|0); + if ($cmp380) { + $R332$1$lcssa = $R332$1;$RP360$1$lcssa = $RP360$1; + break; + } else { + $R332$1 = $50;$RP360$1 = $arrayidx379; + } + } + $51 = HEAP32[(192)>>2]|0; + $cmp386 = ($RP360$1$lcssa>>>0)<($51>>>0); + if ($cmp386) { + _abort(); + // unreachable; + } else { + HEAP32[$RP360$1$lcssa>>2] = 0; + $R332$3 = $R332$1$lcssa; + break; + } + } else { + $fd338 = ((($add$ptr6)) + 8|0); + $43 = HEAP32[$fd338>>2]|0; + $44 = HEAP32[(192)>>2]|0; + $cmp340 = ($43>>>0)<($44>>>0); + if ($cmp340) { + _abort(); + // unreachable; + } + $bk343 = ((($43)) + 12|0); + $45 = HEAP32[$bk343>>2]|0; + $cmp344 = ($45|0)==($add$ptr6|0); + if (!($cmp344)) { + _abort(); + // unreachable; + } + $fd347 = ((($42)) + 8|0); + $46 = HEAP32[$fd347>>2]|0; + $cmp348 = ($46|0)==($add$ptr6|0); + if ($cmp348) { + HEAP32[$bk343>>2] = $42; + HEAP32[$fd347>>2] = $43; + $R332$3 = $42; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $cmp395 = ($41|0)==(0|0); + if (!($cmp395)) { + $index399 = ((($add$ptr6)) + 28|0); + $52 = HEAP32[$index399>>2]|0; + $arrayidx400 = (480 + ($52<<2)|0); + $53 = HEAP32[$arrayidx400>>2]|0; + $cmp401 = ($add$ptr6|0)==($53|0); + if ($cmp401) { + HEAP32[$arrayidx400>>2] = $R332$3; + $cond292 = ($R332$3|0)==(0|0); + if ($cond292) { + $shl408 = 1 << $52; + $neg409 = $shl408 ^ -1; + $54 = HEAP32[(180)>>2]|0; + $and410 = $54 & $neg409; + HEAP32[(180)>>2] = $and410; + break; + } + } else { + $55 = HEAP32[(192)>>2]|0; + $cmp413 = ($41>>>0)<($55>>>0); + if ($cmp413) { + _abort(); + // unreachable; + } + $arrayidx419 = ((($41)) + 16|0); + $56 = HEAP32[$arrayidx419>>2]|0; + $cmp420 = ($56|0)==($add$ptr6|0); + if ($cmp420) { + HEAP32[$arrayidx419>>2] = $R332$3; + } else { + $arrayidx427 = ((($41)) + 20|0); + HEAP32[$arrayidx427>>2] = $R332$3; + } + $cmp432 = ($R332$3|0)==(0|0); + if ($cmp432) { + break; + } + } + $57 = HEAP32[(192)>>2]|0; + $cmp435 = ($R332$3>>>0)<($57>>>0); + if ($cmp435) { + _abort(); + // unreachable; + } + $parent442 = ((($R332$3)) + 24|0); + HEAP32[$parent442>>2] = $41; + $child443 = ((($add$ptr6)) + 16|0); + $58 = HEAP32[$child443>>2]|0; + $cmp445 = ($58|0)==(0|0); + do { + if (!($cmp445)) { + $cmp448 = ($58>>>0)<($57>>>0); + if ($cmp448) { + _abort(); + // unreachable; + } else { + $arrayidx454 = ((($R332$3)) + 16|0); + HEAP32[$arrayidx454>>2] = $58; + $parent455 = ((($58)) + 24|0); + HEAP32[$parent455>>2] = $R332$3; + break; + } + } + } while(0); + $arrayidx460 = ((($child443)) + 4|0); + $59 = HEAP32[$arrayidx460>>2]|0; + $cmp461 = ($59|0)==(0|0); + if (!($cmp461)) { + $60 = HEAP32[(192)>>2]|0; + $cmp464 = ($59>>>0)<($60>>>0); + if ($cmp464) { + _abort(); + // unreachable; + } else { + $arrayidx470 = ((($R332$3)) + 20|0); + HEAP32[$arrayidx470>>2] = $59; + $parent471 = ((($59)) + 24|0); + HEAP32[$parent471>>2] = $R332$3; + break; + } + } + } + } + } while(0); + $or480 = $add267 | 1; + $head481 = ((($p$1)) + 4|0); + HEAP32[$head481>>2] = $or480; + $add$ptr482 = (($p$1) + ($add267)|0); + HEAP32[$add$ptr482>>2] = $add267; + $61 = HEAP32[(196)>>2]|0; + $cmp484 = ($p$1|0)==($61|0); + if ($cmp484) { + HEAP32[(184)>>2] = $add267; + return; + } else { + $psize$2 = $add267; + } + } else { + $and495 = $28 & -2; + HEAP32[$head231>>2] = $and495; + $or496 = $psize$1 | 1; + $head497 = ((($p$1)) + 4|0); + HEAP32[$head497>>2] = $or496; + $add$ptr498 = (($p$1) + ($psize$1)|0); + HEAP32[$add$ptr498>>2] = $psize$1; + $psize$2 = $psize$1; + } + $shr501 = $psize$2 >>> 3; + $cmp502 = ($psize$2>>>0)<(256); + if ($cmp502) { + $shl508 = $shr501 << 1; + $arrayidx509 = (216 + ($shl508<<2)|0); + $62 = HEAP32[44]|0; + $shl511 = 1 << $shr501; + $and512 = $62 & $shl511; + $tobool513 = ($and512|0)==(0); + if ($tobool513) { + $or516 = $62 | $shl511; + HEAP32[44] = $or516; + $$pre = ((($arrayidx509)) + 8|0); + $$pre$phiZ2D = $$pre;$F510$0 = $arrayidx509; + } else { + $63 = ((($arrayidx509)) + 8|0); + $64 = HEAP32[$63>>2]|0; + $65 = HEAP32[(192)>>2]|0; + $cmp519 = ($64>>>0)<($65>>>0); + if ($cmp519) { + _abort(); + // unreachable; + } else { + $$pre$phiZ2D = $63;$F510$0 = $64; + } + } + HEAP32[$$pre$phiZ2D>>2] = $p$1; + $bk529 = ((($F510$0)) + 12|0); + HEAP32[$bk529>>2] = $p$1; + $fd530 = ((($p$1)) + 8|0); + HEAP32[$fd530>>2] = $F510$0; + $bk531 = ((($p$1)) + 12|0); + HEAP32[$bk531>>2] = $arrayidx509; + return; + } + $shr535 = $psize$2 >>> 8; + $cmp536 = ($shr535|0)==(0); + if ($cmp536) { + $I534$0 = 0; + } else { + $cmp540 = ($psize$2>>>0)>(16777215); + if ($cmp540) { + $I534$0 = 31; + } else { + $sub = (($shr535) + 1048320)|0; + $shr544 = $sub >>> 16; + $and545 = $shr544 & 8; + $shl546 = $shr535 << $and545; + $sub547 = (($shl546) + 520192)|0; + $shr548 = $sub547 >>> 16; + $and549 = $shr548 & 4; + $add550 = $and549 | $and545; + $shl551 = $shl546 << $and549; + $sub552 = (($shl551) + 245760)|0; + $shr553 = $sub552 >>> 16; + $and554 = $shr553 & 2; + $add555 = $add550 | $and554; + $sub556 = (14 - ($add555))|0; + $shl557 = $shl551 << $and554; + $shr558 = $shl557 >>> 15; + $add559 = (($sub556) + ($shr558))|0; + $shl560 = $add559 << 1; + $add561 = (($add559) + 7)|0; + $shr562 = $psize$2 >>> $add561; + $and563 = $shr562 & 1; + $add564 = $and563 | $shl560; + $I534$0 = $add564; + } + } + $arrayidx567 = (480 + ($I534$0<<2)|0); + $index568 = ((($p$1)) + 28|0); + HEAP32[$index568>>2] = $I534$0; + $child569 = ((($p$1)) + 16|0); + $arrayidx570 = ((($p$1)) + 20|0); + HEAP32[$arrayidx570>>2] = 0; + HEAP32[$child569>>2] = 0; + $66 = HEAP32[(180)>>2]|0; + $shl573 = 1 << $I534$0; + $and574 = $66 & $shl573; + $tobool575 = ($and574|0)==(0); + do { + if ($tobool575) { + $or578 = $66 | $shl573; + HEAP32[(180)>>2] = $or578; + HEAP32[$arrayidx567>>2] = $p$1; + $parent579 = ((($p$1)) + 24|0); + HEAP32[$parent579>>2] = $arrayidx567; + $bk580 = ((($p$1)) + 12|0); + HEAP32[$bk580>>2] = $p$1; + $fd581 = ((($p$1)) + 8|0); + HEAP32[$fd581>>2] = $p$1; + } else { + $67 = HEAP32[$arrayidx567>>2]|0; + $cmp584 = ($I534$0|0)==(31); + $shr586 = $I534$0 >>> 1; + $sub589 = (25 - ($shr586))|0; + $cond = $cmp584 ? 0 : $sub589; + $shl590 = $psize$2 << $cond; + $K583$0 = $shl590;$T$0 = $67; + while(1) { + $head591 = ((($T$0)) + 4|0); + $68 = HEAP32[$head591>>2]|0; + $and592 = $68 & -8; + $cmp593 = ($and592|0)==($psize$2|0); + if ($cmp593) { + $T$0$lcssa = $T$0; + label = 130; + break; + } + $shr596 = $K583$0 >>> 31; + $arrayidx599 = (((($T$0)) + 16|0) + ($shr596<<2)|0); + $shl600 = $K583$0 << 1; + $69 = HEAP32[$arrayidx599>>2]|0; + $cmp601 = ($69|0)==(0|0); + if ($cmp601) { + $T$0$lcssa319 = $T$0;$arrayidx599$lcssa = $arrayidx599; + label = 127; + break; + } else { + $K583$0 = $shl600;$T$0 = $69; + } + } + if ((label|0) == 127) { + $70 = HEAP32[(192)>>2]|0; + $cmp605 = ($arrayidx599$lcssa>>>0)<($70>>>0); + if ($cmp605) { + _abort(); + // unreachable; + } else { + HEAP32[$arrayidx599$lcssa>>2] = $p$1; + $parent610 = ((($p$1)) + 24|0); + HEAP32[$parent610>>2] = $T$0$lcssa319; + $bk611 = ((($p$1)) + 12|0); + HEAP32[$bk611>>2] = $p$1; + $fd612 = ((($p$1)) + 8|0); + HEAP32[$fd612>>2] = $p$1; + break; + } + } + else if ((label|0) == 130) { + $fd620 = ((($T$0$lcssa)) + 8|0); + $71 = HEAP32[$fd620>>2]|0; + $72 = HEAP32[(192)>>2]|0; + $cmp624 = ($71>>>0)>=($72>>>0); + $not$cmp621 = ($T$0$lcssa>>>0)>=($72>>>0); + $73 = $cmp624 & $not$cmp621; + if ($73) { + $bk631 = ((($71)) + 12|0); + HEAP32[$bk631>>2] = $p$1; + HEAP32[$fd620>>2] = $p$1; + $fd633 = ((($p$1)) + 8|0); + HEAP32[$fd633>>2] = $71; + $bk634 = ((($p$1)) + 12|0); + HEAP32[$bk634>>2] = $T$0$lcssa; + $parent635 = ((($p$1)) + 24|0); + HEAP32[$parent635>>2] = 0; + break; + } else { + _abort(); + // unreachable; + } + } + } + } while(0); + $74 = HEAP32[(208)>>2]|0; + $dec = (($74) + -1)|0; + HEAP32[(208)>>2] = $dec; + $cmp640 = ($dec|0)==(0); + if ($cmp640) { + $sp$0$in$i = (632); + } else { + return; + } + while(1) { + $sp$0$i = HEAP32[$sp$0$in$i>>2]|0; + $cmp$i = ($sp$0$i|0)==(0|0); + $next4$i = ((($sp$0$i)) + 8|0); + if ($cmp$i) { + break; + } else { + $sp$0$in$i = $next4$i; + } + } + HEAP32[(208)>>2] = -1; + return; +} +function runPostSets() { +} +function _i64Subtract(a, b, c, d) { + a = a|0; b = b|0; c = c|0; d = d|0; + var l = 0, h = 0; + l = (a - c)>>>0; + h = (b - d)>>>0; + h = (b - d - (((c>>>0) > (a>>>0))|0))>>>0; // Borrow one from high word to low word on underflow. + return ((tempRet0 = h,l|0)|0); +} +function _i64Add(a, b, c, d) { + /* + x = a + b*2^32 + y = c + d*2^32 + result = l + h*2^32 + */ + a = a|0; b = b|0; c = c|0; d = d|0; + var l = 0, h = 0; + l = (a + c)>>>0; + h = (b + d + (((l>>>0) < (a>>>0))|0))>>>0; // Add carry from low word to high word on overflow. + return ((tempRet0 = h,l|0)|0); +} +function _memset(ptr, value, num) { + ptr = ptr|0; value = value|0; num = num|0; + var stop = 0, value4 = 0, stop4 = 0, unaligned = 0; + stop = (ptr + num)|0; + if ((num|0) >= 20) { + // This is unaligned, but quite large, so work hard to get to aligned settings + value = value & 0xff; + unaligned = ptr & 3; + value4 = value | (value << 8) | (value << 16) | (value << 24); + stop4 = stop & ~3; + if (unaligned) { + unaligned = (ptr + 4 - unaligned)|0; + while ((ptr|0) < (unaligned|0)) { // no need to check for stop, since we have large num + HEAP8[((ptr)>>0)]=value; + ptr = (ptr+1)|0; + } + } + while ((ptr|0) < (stop4|0)) { + HEAP32[((ptr)>>2)]=value4; + ptr = (ptr+4)|0; + } + } + while ((ptr|0) < (stop|0)) { + HEAP8[((ptr)>>0)]=value; + ptr = (ptr+1)|0; + } + return (ptr-num)|0; +} +function _bitshift64Lshr(low, high, bits) { + low = low|0; high = high|0; bits = bits|0; + var ander = 0; + if ((bits|0) < 32) { + ander = ((1 << bits) - 1)|0; + tempRet0 = high >>> bits; + return (low >>> bits) | ((high&ander) << (32 - bits)); + } + tempRet0 = 0; + return (high >>> (bits - 32))|0; +} +function _bitshift64Shl(low, high, bits) { + low = low|0; high = high|0; bits = bits|0; + var ander = 0; + if ((bits|0) < 32) { + ander = ((1 << bits) - 1)|0; + tempRet0 = (high << bits) | ((low&(ander << (32 - bits))) >>> (32 - bits)); + return low << bits; + } + tempRet0 = low << (bits - 32); + return 0; +} +function _memcpy(dest, src, num) { + dest = dest|0; src = src|0; num = num|0; + var ret = 0; + if ((num|0) >= 4096) return _emscripten_memcpy_big(dest|0, src|0, num|0)|0; + ret = dest|0; + if ((dest&3) == (src&3)) { + while (dest & 3) { + if ((num|0) == 0) return ret|0; + HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0); + dest = (dest+1)|0; + src = (src+1)|0; + num = (num-1)|0; + } + while ((num|0) >= 4) { + HEAP32[((dest)>>2)]=((HEAP32[((src)>>2)])|0); + dest = (dest+4)|0; + src = (src+4)|0; + num = (num-4)|0; + } + } + while ((num|0) > 0) { + HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0); + dest = (dest+1)|0; + src = (src+1)|0; + num = (num-1)|0; + } + return ret|0; +} +function _bitshift64Ashr(low, high, bits) { + low = low|0; high = high|0; bits = bits|0; + var ander = 0; + if ((bits|0) < 32) { + ander = ((1 << bits) - 1)|0; + tempRet0 = high >> bits; + return (low >>> bits) | ((high&ander) << (32 - bits)); + } + tempRet0 = (high|0) < 0 ? -1 : 0; + return (high >> (bits - 32))|0; + } + +// ======== compiled code from system/lib/compiler-rt , see readme therein +function ___muldsi3($a, $b) { + $a = $a | 0; + $b = $b | 0; + var $1 = 0, $2 = 0, $3 = 0, $6 = 0, $8 = 0, $11 = 0, $12 = 0; + $1 = $a & 65535; + $2 = $b & 65535; + $3 = Math_imul($2, $1) | 0; + $6 = $a >>> 16; + $8 = ($3 >>> 16) + (Math_imul($2, $6) | 0) | 0; + $11 = $b >>> 16; + $12 = Math_imul($11, $1) | 0; + return (tempRet0 = (($8 >>> 16) + (Math_imul($11, $6) | 0) | 0) + ((($8 & 65535) + $12 | 0) >>> 16) | 0, 0 | ($8 + $12 << 16 | $3 & 65535)) | 0; +} +function ___divdi3($a$0, $a$1, $b$0, $b$1) { + $a$0 = $a$0 | 0; + $a$1 = $a$1 | 0; + $b$0 = $b$0 | 0; + $b$1 = $b$1 | 0; + var $1$0 = 0, $1$1 = 0, $2$0 = 0, $2$1 = 0, $4$0 = 0, $4$1 = 0, $6$0 = 0, $7$0 = 0, $7$1 = 0, $8$0 = 0, $10$0 = 0; + $1$0 = $a$1 >> 31 | (($a$1 | 0) < 0 ? -1 : 0) << 1; + $1$1 = (($a$1 | 0) < 0 ? -1 : 0) >> 31 | (($a$1 | 0) < 0 ? -1 : 0) << 1; + $2$0 = $b$1 >> 31 | (($b$1 | 0) < 0 ? -1 : 0) << 1; + $2$1 = (($b$1 | 0) < 0 ? -1 : 0) >> 31 | (($b$1 | 0) < 0 ? -1 : 0) << 1; + $4$0 = _i64Subtract($1$0 ^ $a$0, $1$1 ^ $a$1, $1$0, $1$1) | 0; + $4$1 = tempRet0; + $6$0 = _i64Subtract($2$0 ^ $b$0, $2$1 ^ $b$1, $2$0, $2$1) | 0; + $7$0 = $2$0 ^ $1$0; + $7$1 = $2$1 ^ $1$1; + $8$0 = ___udivmoddi4($4$0, $4$1, $6$0, tempRet0, 0) | 0; + $10$0 = _i64Subtract($8$0 ^ $7$0, tempRet0 ^ $7$1, $7$0, $7$1) | 0; + return $10$0 | 0; +} +function ___remdi3($a$0, $a$1, $b$0, $b$1) { + $a$0 = $a$0 | 0; + $a$1 = $a$1 | 0; + $b$0 = $b$0 | 0; + $b$1 = $b$1 | 0; + var $rem = 0, $1$0 = 0, $1$1 = 0, $2$0 = 0, $2$1 = 0, $4$0 = 0, $4$1 = 0, $6$0 = 0, $10$0 = 0, $10$1 = 0, __stackBase__ = 0; + __stackBase__ = STACKTOP; + STACKTOP = STACKTOP + 16 | 0; + $rem = __stackBase__ | 0; + $1$0 = $a$1 >> 31 | (($a$1 | 0) < 0 ? -1 : 0) << 1; + $1$1 = (($a$1 | 0) < 0 ? -1 : 0) >> 31 | (($a$1 | 0) < 0 ? -1 : 0) << 1; + $2$0 = $b$1 >> 31 | (($b$1 | 0) < 0 ? -1 : 0) << 1; + $2$1 = (($b$1 | 0) < 0 ? -1 : 0) >> 31 | (($b$1 | 0) < 0 ? -1 : 0) << 1; + $4$0 = _i64Subtract($1$0 ^ $a$0, $1$1 ^ $a$1, $1$0, $1$1) | 0; + $4$1 = tempRet0; + $6$0 = _i64Subtract($2$0 ^ $b$0, $2$1 ^ $b$1, $2$0, $2$1) | 0; + ___udivmoddi4($4$0, $4$1, $6$0, tempRet0, $rem) | 0; + $10$0 = _i64Subtract(HEAP32[$rem >> 2] ^ $1$0, HEAP32[$rem + 4 >> 2] ^ $1$1, $1$0, $1$1) | 0; + $10$1 = tempRet0; + STACKTOP = __stackBase__; + return (tempRet0 = $10$1, $10$0) | 0; +} +function ___muldi3($a$0, $a$1, $b$0, $b$1) { + $a$0 = $a$0 | 0; + $a$1 = $a$1 | 0; + $b$0 = $b$0 | 0; + $b$1 = $b$1 | 0; + var $x_sroa_0_0_extract_trunc = 0, $y_sroa_0_0_extract_trunc = 0, $1$0 = 0, $1$1 = 0, $2 = 0; + $x_sroa_0_0_extract_trunc = $a$0; + $y_sroa_0_0_extract_trunc = $b$0; + $1$0 = ___muldsi3($x_sroa_0_0_extract_trunc, $y_sroa_0_0_extract_trunc) | 0; + $1$1 = tempRet0; + $2 = Math_imul($a$1, $y_sroa_0_0_extract_trunc) | 0; + return (tempRet0 = ((Math_imul($b$1, $x_sroa_0_0_extract_trunc) | 0) + $2 | 0) + $1$1 | $1$1 & 0, 0 | $1$0 & -1) | 0; +} +function ___udivdi3($a$0, $a$1, $b$0, $b$1) { + $a$0 = $a$0 | 0; + $a$1 = $a$1 | 0; + $b$0 = $b$0 | 0; + $b$1 = $b$1 | 0; + var $1$0 = 0; + $1$0 = ___udivmoddi4($a$0, $a$1, $b$0, $b$1, 0) | 0; + return $1$0 | 0; +} +function ___uremdi3($a$0, $a$1, $b$0, $b$1) { + $a$0 = $a$0 | 0; + $a$1 = $a$1 | 0; + $b$0 = $b$0 | 0; + $b$1 = $b$1 | 0; + var $rem = 0, __stackBase__ = 0; + __stackBase__ = STACKTOP; + STACKTOP = STACKTOP + 16 | 0; + $rem = __stackBase__ | 0; + ___udivmoddi4($a$0, $a$1, $b$0, $b$1, $rem) | 0; + STACKTOP = __stackBase__; + return (tempRet0 = HEAP32[$rem + 4 >> 2] | 0, HEAP32[$rem >> 2] | 0) | 0; +} +function ___udivmoddi4($a$0, $a$1, $b$0, $b$1, $rem) { + $a$0 = $a$0 | 0; + $a$1 = $a$1 | 0; + $b$0 = $b$0 | 0; + $b$1 = $b$1 | 0; + $rem = $rem | 0; + var $n_sroa_0_0_extract_trunc = 0, $n_sroa_1_4_extract_shift$0 = 0, $n_sroa_1_4_extract_trunc = 0, $d_sroa_0_0_extract_trunc = 0, $d_sroa_1_4_extract_shift$0 = 0, $d_sroa_1_4_extract_trunc = 0, $4 = 0, $17 = 0, $37 = 0, $49 = 0, $51 = 0, $57 = 0, $58 = 0, $66 = 0, $78 = 0, $86 = 0, $88 = 0, $89 = 0, $91 = 0, $92 = 0, $95 = 0, $105 = 0, $117 = 0, $119 = 0, $125 = 0, $126 = 0, $130 = 0, $q_sroa_1_1_ph = 0, $q_sroa_0_1_ph = 0, $r_sroa_1_1_ph = 0, $r_sroa_0_1_ph = 0, $sr_1_ph = 0, $d_sroa_0_0_insert_insert99$0 = 0, $d_sroa_0_0_insert_insert99$1 = 0, $137$0 = 0, $137$1 = 0, $carry_0203 = 0, $sr_1202 = 0, $r_sroa_0_1201 = 0, $r_sroa_1_1200 = 0, $q_sroa_0_1199 = 0, $q_sroa_1_1198 = 0, $147 = 0, $149 = 0, $r_sroa_0_0_insert_insert42$0 = 0, $r_sroa_0_0_insert_insert42$1 = 0, $150$1 = 0, $151$0 = 0, $152 = 0, $154$0 = 0, $r_sroa_0_0_extract_trunc = 0, $r_sroa_1_4_extract_trunc = 0, $155 = 0, $carry_0_lcssa$0 = 0, $carry_0_lcssa$1 = 0, $r_sroa_0_1_lcssa = 0, $r_sroa_1_1_lcssa = 0, $q_sroa_0_1_lcssa = 0, $q_sroa_1_1_lcssa = 0, $q_sroa_0_0_insert_ext75$0 = 0, $q_sroa_0_0_insert_ext75$1 = 0, $q_sroa_0_0_insert_insert77$1 = 0, $_0$0 = 0, $_0$1 = 0; + $n_sroa_0_0_extract_trunc = $a$0; + $n_sroa_1_4_extract_shift$0 = $a$1; + $n_sroa_1_4_extract_trunc = $n_sroa_1_4_extract_shift$0; + $d_sroa_0_0_extract_trunc = $b$0; + $d_sroa_1_4_extract_shift$0 = $b$1; + $d_sroa_1_4_extract_trunc = $d_sroa_1_4_extract_shift$0; + if (($n_sroa_1_4_extract_trunc | 0) == 0) { + $4 = ($rem | 0) != 0; + if (($d_sroa_1_4_extract_trunc | 0) == 0) { + if ($4) { + HEAP32[$rem >> 2] = ($n_sroa_0_0_extract_trunc >>> 0) % ($d_sroa_0_0_extract_trunc >>> 0); + HEAP32[$rem + 4 >> 2] = 0; + } + $_0$1 = 0; + $_0$0 = ($n_sroa_0_0_extract_trunc >>> 0) / ($d_sroa_0_0_extract_trunc >>> 0) >>> 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } else { + if (!$4) { + $_0$1 = 0; + $_0$0 = 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } + HEAP32[$rem >> 2] = $a$0 & -1; + HEAP32[$rem + 4 >> 2] = $a$1 & 0; + $_0$1 = 0; + $_0$0 = 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } + } + $17 = ($d_sroa_1_4_extract_trunc | 0) == 0; + do { + if (($d_sroa_0_0_extract_trunc | 0) == 0) { + if ($17) { + if (($rem | 0) != 0) { + HEAP32[$rem >> 2] = ($n_sroa_1_4_extract_trunc >>> 0) % ($d_sroa_0_0_extract_trunc >>> 0); + HEAP32[$rem + 4 >> 2] = 0; + } + $_0$1 = 0; + $_0$0 = ($n_sroa_1_4_extract_trunc >>> 0) / ($d_sroa_0_0_extract_trunc >>> 0) >>> 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } + if (($n_sroa_0_0_extract_trunc | 0) == 0) { + if (($rem | 0) != 0) { + HEAP32[$rem >> 2] = 0; + HEAP32[$rem + 4 >> 2] = ($n_sroa_1_4_extract_trunc >>> 0) % ($d_sroa_1_4_extract_trunc >>> 0); + } + $_0$1 = 0; + $_0$0 = ($n_sroa_1_4_extract_trunc >>> 0) / ($d_sroa_1_4_extract_trunc >>> 0) >>> 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } + $37 = $d_sroa_1_4_extract_trunc - 1 | 0; + if (($37 & $d_sroa_1_4_extract_trunc | 0) == 0) { + if (($rem | 0) != 0) { + HEAP32[$rem >> 2] = 0 | $a$0 & -1; + HEAP32[$rem + 4 >> 2] = $37 & $n_sroa_1_4_extract_trunc | $a$1 & 0; + } + $_0$1 = 0; + $_0$0 = $n_sroa_1_4_extract_trunc >>> ((_llvm_cttz_i32($d_sroa_1_4_extract_trunc | 0) | 0) >>> 0); + return (tempRet0 = $_0$1, $_0$0) | 0; + } + $49 = Math_clz32($d_sroa_1_4_extract_trunc | 0) | 0; + $51 = $49 - (Math_clz32($n_sroa_1_4_extract_trunc | 0) | 0) | 0; + if ($51 >>> 0 <= 30) { + $57 = $51 + 1 | 0; + $58 = 31 - $51 | 0; + $sr_1_ph = $57; + $r_sroa_0_1_ph = $n_sroa_1_4_extract_trunc << $58 | $n_sroa_0_0_extract_trunc >>> ($57 >>> 0); + $r_sroa_1_1_ph = $n_sroa_1_4_extract_trunc >>> ($57 >>> 0); + $q_sroa_0_1_ph = 0; + $q_sroa_1_1_ph = $n_sroa_0_0_extract_trunc << $58; + break; + } + if (($rem | 0) == 0) { + $_0$1 = 0; + $_0$0 = 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } + HEAP32[$rem >> 2] = 0 | $a$0 & -1; + HEAP32[$rem + 4 >> 2] = $n_sroa_1_4_extract_shift$0 | $a$1 & 0; + $_0$1 = 0; + $_0$0 = 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } else { + if (!$17) { + $117 = Math_clz32($d_sroa_1_4_extract_trunc | 0) | 0; + $119 = $117 - (Math_clz32($n_sroa_1_4_extract_trunc | 0) | 0) | 0; + if ($119 >>> 0 <= 31) { + $125 = $119 + 1 | 0; + $126 = 31 - $119 | 0; + $130 = $119 - 31 >> 31; + $sr_1_ph = $125; + $r_sroa_0_1_ph = $n_sroa_0_0_extract_trunc >>> ($125 >>> 0) & $130 | $n_sroa_1_4_extract_trunc << $126; + $r_sroa_1_1_ph = $n_sroa_1_4_extract_trunc >>> ($125 >>> 0) & $130; + $q_sroa_0_1_ph = 0; + $q_sroa_1_1_ph = $n_sroa_0_0_extract_trunc << $126; + break; + } + if (($rem | 0) == 0) { + $_0$1 = 0; + $_0$0 = 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } + HEAP32[$rem >> 2] = 0 | $a$0 & -1; + HEAP32[$rem + 4 >> 2] = $n_sroa_1_4_extract_shift$0 | $a$1 & 0; + $_0$1 = 0; + $_0$0 = 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } + $66 = $d_sroa_0_0_extract_trunc - 1 | 0; + if (($66 & $d_sroa_0_0_extract_trunc | 0) != 0) { + $86 = (Math_clz32($d_sroa_0_0_extract_trunc | 0) | 0) + 33 | 0; + $88 = $86 - (Math_clz32($n_sroa_1_4_extract_trunc | 0) | 0) | 0; + $89 = 64 - $88 | 0; + $91 = 32 - $88 | 0; + $92 = $91 >> 31; + $95 = $88 - 32 | 0; + $105 = $95 >> 31; + $sr_1_ph = $88; + $r_sroa_0_1_ph = $91 - 1 >> 31 & $n_sroa_1_4_extract_trunc >>> ($95 >>> 0) | ($n_sroa_1_4_extract_trunc << $91 | $n_sroa_0_0_extract_trunc >>> ($88 >>> 0)) & $105; + $r_sroa_1_1_ph = $105 & $n_sroa_1_4_extract_trunc >>> ($88 >>> 0); + $q_sroa_0_1_ph = $n_sroa_0_0_extract_trunc << $89 & $92; + $q_sroa_1_1_ph = ($n_sroa_1_4_extract_trunc << $89 | $n_sroa_0_0_extract_trunc >>> ($95 >>> 0)) & $92 | $n_sroa_0_0_extract_trunc << $91 & $88 - 33 >> 31; + break; + } + if (($rem | 0) != 0) { + HEAP32[$rem >> 2] = $66 & $n_sroa_0_0_extract_trunc; + HEAP32[$rem + 4 >> 2] = 0; + } + if (($d_sroa_0_0_extract_trunc | 0) == 1) { + $_0$1 = $n_sroa_1_4_extract_shift$0 | $a$1 & 0; + $_0$0 = 0 | $a$0 & -1; + return (tempRet0 = $_0$1, $_0$0) | 0; + } else { + $78 = _llvm_cttz_i32($d_sroa_0_0_extract_trunc | 0) | 0; + $_0$1 = 0 | $n_sroa_1_4_extract_trunc >>> ($78 >>> 0); + $_0$0 = $n_sroa_1_4_extract_trunc << 32 - $78 | $n_sroa_0_0_extract_trunc >>> ($78 >>> 0) | 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } + } + } while (0); + if (($sr_1_ph | 0) == 0) { + $q_sroa_1_1_lcssa = $q_sroa_1_1_ph; + $q_sroa_0_1_lcssa = $q_sroa_0_1_ph; + $r_sroa_1_1_lcssa = $r_sroa_1_1_ph; + $r_sroa_0_1_lcssa = $r_sroa_0_1_ph; + $carry_0_lcssa$1 = 0; + $carry_0_lcssa$0 = 0; + } else { + $d_sroa_0_0_insert_insert99$0 = 0 | $b$0 & -1; + $d_sroa_0_0_insert_insert99$1 = $d_sroa_1_4_extract_shift$0 | $b$1 & 0; + $137$0 = _i64Add($d_sroa_0_0_insert_insert99$0 | 0, $d_sroa_0_0_insert_insert99$1 | 0, -1, -1) | 0; + $137$1 = tempRet0; + $q_sroa_1_1198 = $q_sroa_1_1_ph; + $q_sroa_0_1199 = $q_sroa_0_1_ph; + $r_sroa_1_1200 = $r_sroa_1_1_ph; + $r_sroa_0_1201 = $r_sroa_0_1_ph; + $sr_1202 = $sr_1_ph; + $carry_0203 = 0; + while (1) { + $147 = $q_sroa_0_1199 >>> 31 | $q_sroa_1_1198 << 1; + $149 = $carry_0203 | $q_sroa_0_1199 << 1; + $r_sroa_0_0_insert_insert42$0 = 0 | ($r_sroa_0_1201 << 1 | $q_sroa_1_1198 >>> 31); + $r_sroa_0_0_insert_insert42$1 = $r_sroa_0_1201 >>> 31 | $r_sroa_1_1200 << 1 | 0; + _i64Subtract($137$0, $137$1, $r_sroa_0_0_insert_insert42$0, $r_sroa_0_0_insert_insert42$1) | 0; + $150$1 = tempRet0; + $151$0 = $150$1 >> 31 | (($150$1 | 0) < 0 ? -1 : 0) << 1; + $152 = $151$0 & 1; + $154$0 = _i64Subtract($r_sroa_0_0_insert_insert42$0, $r_sroa_0_0_insert_insert42$1, $151$0 & $d_sroa_0_0_insert_insert99$0, ((($150$1 | 0) < 0 ? -1 : 0) >> 31 | (($150$1 | 0) < 0 ? -1 : 0) << 1) & $d_sroa_0_0_insert_insert99$1) | 0; + $r_sroa_0_0_extract_trunc = $154$0; + $r_sroa_1_4_extract_trunc = tempRet0; + $155 = $sr_1202 - 1 | 0; + if (($155 | 0) == 0) { + break; + } else { + $q_sroa_1_1198 = $147; + $q_sroa_0_1199 = $149; + $r_sroa_1_1200 = $r_sroa_1_4_extract_trunc; + $r_sroa_0_1201 = $r_sroa_0_0_extract_trunc; + $sr_1202 = $155; + $carry_0203 = $152; + } + } + $q_sroa_1_1_lcssa = $147; + $q_sroa_0_1_lcssa = $149; + $r_sroa_1_1_lcssa = $r_sroa_1_4_extract_trunc; + $r_sroa_0_1_lcssa = $r_sroa_0_0_extract_trunc; + $carry_0_lcssa$1 = 0; + $carry_0_lcssa$0 = $152; + } + $q_sroa_0_0_insert_ext75$0 = $q_sroa_0_1_lcssa; + $q_sroa_0_0_insert_ext75$1 = 0; + $q_sroa_0_0_insert_insert77$1 = $q_sroa_1_1_lcssa | $q_sroa_0_0_insert_ext75$1; + if (($rem | 0) != 0) { + HEAP32[$rem >> 2] = 0 | $r_sroa_0_1_lcssa; + HEAP32[$rem + 4 >> 2] = $r_sroa_1_1_lcssa | 0; + } + $_0$1 = (0 | $q_sroa_0_0_insert_ext75$0) >>> 31 | $q_sroa_0_0_insert_insert77$1 << 1 | ($q_sroa_0_0_insert_ext75$1 << 1 | $q_sroa_0_0_insert_ext75$0 >>> 31) & 0 | $carry_0_lcssa$1; + $_0$0 = ($q_sroa_0_0_insert_ext75$0 << 1 | 0 >>> 31) & -2 | $carry_0_lcssa$0; + return (tempRet0 = $_0$1, $_0$0) | 0; +} +// ======================================================================= + + + + +function dynCall_ii(index,a1) { + index = index|0; + a1=a1|0; + return FUNCTION_TABLE_ii[index&1](a1|0)|0; +} + + +function dynCall_iiii(index,a1,a2,a3) { + index = index|0; + a1=a1|0; a2=a2|0; a3=a3|0; + return FUNCTION_TABLE_iiii[index&7](a1|0,a2|0,a3|0)|0; +} + + +function dynCall_vi(index,a1) { + index = index|0; + a1=a1|0; + FUNCTION_TABLE_vi[index&7](a1|0); +} + +function b0(p0) { + p0 = p0|0; nullFunc_ii(0);return 0; +} +function b1(p0,p1,p2) { + p0 = p0|0;p1 = p1|0;p2 = p2|0; nullFunc_iiii(1);return 0; +} +function b2(p0) { + p0 = p0|0; nullFunc_vi(2); +} + +// EMSCRIPTEN_END_FUNCS +var FUNCTION_TABLE_ii = [b0,___stdio_close]; +var FUNCTION_TABLE_iiii = [b1,b1,___stdout_write,___stdio_seek,___stdio_write,b1,b1,b1]; +var FUNCTION_TABLE_vi = [b2,b2,b2,b2,b2,_cleanup,b2,b2]; + + return { _i64Subtract: _i64Subtract, _free: _free, _main: _main, _i64Add: _i64Add, _memset: _memset, _malloc: _malloc, _memcpy: _memcpy, _bitshift64Lshr: _bitshift64Lshr, _fflush: _fflush, ___errno_location: ___errno_location, _bitshift64Shl: _bitshift64Shl, runPostSets: runPostSets, stackAlloc: stackAlloc, stackSave: stackSave, stackRestore: stackRestore, establishStackSpace: establishStackSpace, setThrew: setThrew, setTempRet0: setTempRet0, getTempRet0: getTempRet0, dynCall_ii: dynCall_ii, dynCall_iiii: dynCall_iiii, dynCall_vi: dynCall_vi, ___udivmoddi4: ___udivmoddi4 }; +}) +; diff --git a/src/binaryen/test/emcc_hello_world.fromasm b/src/binaryen/test/emcc_hello_world.fromasm new file mode 100644 index 0000000000..2b03ce2a06 --- /dev/null +++ b/src/binaryen/test/emcc_hello_world.fromasm @@ -0,0 +1,15672 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$id (func (param f64) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "abort" (func $abort)) + (import "env" "nullFunc_ii" (func $nullFunc_ii (param i32))) + (import "env" "nullFunc_iiii" (func $nullFunc_iiii (param i32))) + (import "env" "nullFunc_vi" (func $nullFunc_vi (param i32))) + (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) + (import "env" "___lock" (func $___lock (param i32))) + (import "env" "_pthread_self" (func $_pthread_self (result i32))) + (import "env" "_abort" (func $_abort)) + (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) + (import "env" "_sbrk" (func $_sbrk (param i32) (result i32))) + (import "env" "_time" (func $_time (param i32) (result i32))) + (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $___unlock (param i32))) + (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) + (import "env" "_sysconf" (func $_sysconf (param i32) (result i32))) + (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) + (import "asm2wasm" "f64-to-int" (func $f64-to-int (param f64) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 18 18 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (elem (get_global $tableBase) $b0 $___stdio_close $b1 $b1 $___stdout_write $___stdio_seek $___stdio_write $b1 $b1 $b1 $b2 $b2 $b2 $b2 $b2 $_cleanup $b2 $b2) + (data (i32.const 1024) "emcc_hello_world.asm.js") + (export "_i64Subtract" (func $_i64Subtract)) + (export "_free" (func $_free)) + (export "_main" (func $_main)) + (export "_i64Add" (func $_i64Add)) + (export "_memset" (func $_memset)) + (export "_malloc" (func $_malloc)) + (export "_memcpy" (func $_memcpy)) + (export "_bitshift64Lshr" (func $_bitshift64Lshr)) + (export "_fflush" (func $_fflush)) + (export "___errno_location" (func $___errno_location)) + (export "_bitshift64Shl" (func $_bitshift64Shl)) + (export "runPostSets" (func $runPostSets)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackSave" (func $stackSave)) + (export "stackRestore" (func $stackRestore)) + (export "establishStackSpace" (func $establishStackSpace)) + (export "setThrew" (func $setThrew)) + (export "setTempRet0" (func $setTempRet0)) + (export "getTempRet0" (func $getTempRet0)) + (export "dynCall_ii" (func $dynCall_ii)) + (export "dynCall_iiii" (func $dynCall_iiii)) + (export "dynCall_vi" (func $dynCall_vi)) + (export "___udivmoddi4" (func $___udivmoddi4)) + (func $stackAlloc (; 19 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $0) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (get_local $1) + ) + (func $stackSave (; 20 ;) (result i32) + (get_global $STACKTOP) + ) + (func $stackRestore (; 21 ;) (param $0 i32) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $establishStackSpace (; 22 ;) (param $0 i32) (param $1 i32) + (set_global $STACKTOP + (get_local $0) + ) + (set_global $STACK_MAX + (get_local $1) + ) + ) + (func $setThrew (; 23 ;) (param $0 i32) (param $1 i32) + (if + (i32.eqz + (get_global $__THREW__) + ) + (block + (set_global $__THREW__ + (get_local $0) + ) + (set_global $threwValue + (get_local $1) + ) + ) + ) + ) + (func $setTempRet0 (; 24 ;) (param $0 i32) + (set_global $tempRet0 + (get_local $0) + ) + ) + (func $getTempRet0 (; 25 ;) (result i32) + (get_global $tempRet0) + ) + (func $_main (; 26 ;) (result i32) + (local $0 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (drop + (call $_printf + (i32.const 672) + (get_local $0) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (i32.const 0) + ) + (func $_frexp (; 27 ;) (param $0 f64) (param $1 i32) (result f64) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (f64.store + (get_global $tempDoublePtr) + (get_local $0) + ) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default + (tee_local $3 + (i32.and + (tee_local $3 + (call $_bitshift64Lshr + (tee_local $2 + (i32.load + (get_global $tempDoublePtr) + ) + ) + (tee_local $4 + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + ) + (i32.const 52) + ) + ) + (i32.const 2047) + ) + ) + ) + ) + (i32.store + (get_local $1) + (tee_local $2 + (if (result i32) + (f64.ne + (get_local $0) + (f64.const 0) + ) + (block (result i32) + (set_local $0 + (call $_frexp + (f64.mul + (get_local $0) + (f64.const 18446744073709551615) + ) + (get_local $1) + ) + ) + (i32.add + (i32.load + (get_local $1) + ) + (i32.const -64) + ) + ) + (i32.const 0) + ) + ) + ) + (br $switch) + ) + (br $switch) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $3) + (i32.const -1022) + ) + ) + (i32.store + (get_global $tempDoublePtr) + (get_local $2) + ) + (i32.store offset=4 + (get_global $tempDoublePtr) + (i32.or + (i32.and + (get_local $4) + (i32.const -2146435073) + ) + (i32.const 1071644672) + ) + ) + (set_local $0 + (f64.load + (get_global $tempDoublePtr) + ) + ) + ) + (get_local $0) + ) + (func $_strerror (; 28 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (i32.const 0) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in + (br_if $__rjti$0 + (i32.eq + (i32.load8_u offset=687 + (get_local $1) + ) + (get_local $0) + ) + ) + (br_if $while-in + (i32.ne + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 87) + ) + ) + (set_local $1 + (i32.const 87) + ) + (br $__rjti$1) + ) + ) + (br_if $__rjti$1 + (get_local $1) + ) + (set_local $0 + (i32.const 775) + ) + (br $__rjto$1) + ) + (set_local $0 + (i32.const 775) + ) + (loop $while-in1 + (loop $while-in3 + (set_local $2 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (if + (i32.load8_s + (get_local $0) + ) + (block + (set_local $0 + (get_local $2) + ) + (br $while-in3) + ) + (set_local $0 + (get_local $2) + ) + ) + ) + (br_if $while-in1 + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + ) + ) + ) + (get_local $0) + ) + (func $___errno_location (; 29 ;) (result i32) + (if (result i32) + (i32.load + (i32.const 16) + ) + (i32.load offset=60 + (call $_pthread_self) + ) + (i32.const 60) + ) + ) + (func $___stdio_close (; 30 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (i32.store + (tee_local $2 + (get_local $1) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (set_local $0 + (call $___syscall_ret + (call $___syscall6 + (i32.const 6) + (get_local $2) + ) + ) + ) + (set_global $STACKTOP + (get_local $1) + ) + (get_local $0) + ) + (func $___stdout_write (; 31 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 80) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $3 + (get_local $4) + ) + (set_local $5 + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + (i32.store offset=36 + (get_local $0) + (i32.const 4) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 64) + ) + ) + (block + (i32.store + (get_local $3) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 21505) + ) + (i32.store offset=8 + (get_local $3) + (get_local $5) + ) + (if + (call $___syscall54 + (i32.const 54) + (get_local $3) + ) + (i32.store8 offset=75 + (get_local $0) + (i32.const -1) + ) + ) + ) + ) + (set_local $0 + (call $___stdio_write + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $___stdio_seek (; 32 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (i32.store + (tee_local $3 + (get_local $4) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + (i32.store offset=16 + (get_local $3) + (get_local $2) + ) + (set_local $0 + (if (result i32) + (i32.lt_s + (call $___syscall_ret + (call $___syscall140 + (i32.const 140) + (get_local $3) + ) + ) + (i32.const 0) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.const -1) + ) + (i32.const -1) + ) + (i32.load + (get_local $0) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $_fflush (; 33 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (block $do-once + (if + (get_local $0) + (block + (if + (i32.le_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (block + (set_local $0 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (br $do-once) + ) + ) + (set_local $2 + (i32.eqz + (call $___lockfile + (get_local $0) + ) + ) + ) + (set_local $1 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (set_local $0 + (if (result i32) + (get_local $2) + (get_local $1) + (block (result i32) + (call $___unlockfile + (get_local $0) + ) + (get_local $1) + ) + ) + ) + ) + (block + (set_local $0 + (if (result i32) + (i32.load + (i32.const 12) + ) + (call $_fflush + (i32.load + (i32.const 12) + ) + ) + (i32.const 0) + ) + ) + (call $___lock + (i32.const 44) + ) + (if + (tee_local $1 + (i32.load + (i32.const 40) + ) + ) + (loop $while-in + (set_local $2 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (get_local $1) + ) + (i32.const -1) + ) + (call $___lockfile + (get_local $1) + ) + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.load offset=20 + (get_local $1) + ) + (i32.load offset=28 + (get_local $1) + ) + ) + (set_local $0 + (i32.or + (call $___fflush_unlocked + (get_local $1) + ) + (get_local $0) + ) + ) + ) + (if + (get_local $2) + (call $___unlockfile + (get_local $1) + ) + ) + (br_if $while-in + (tee_local $1 + (i32.load offset=56 + (get_local $1) + ) + ) + ) + ) + ) + (call $___unlock + (i32.const 44) + ) + ) + ) + ) + (get_local $0) + ) + (func $_printf (; 34 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (set_local $2 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (i32.store + (tee_local $3 + (get_local $2) + ) + (get_local $1) + ) + (set_local $0 + (call $_vfprintf + (i32.load + (i32.const 8) + ) + (get_local $0) + (get_local $3) + ) + ) + (set_global $STACKTOP + (get_local $2) + ) + (get_local $0) + ) + (func $___lockfile (; 35 ;) (param $0 i32) (result i32) + (i32.const 0) + ) + (func $___unlockfile (; 36 ;) (param $0 i32) + (nop) + ) + (func $___stdio_write (; 37 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $8 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $9 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (set_local $10 + (get_local $8) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $8) + (i32.const 32) + ) + ) + (tee_local $3 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $4) + (tee_local $3 + (i32.sub + (i32.load + (tee_local $11 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (get_local $3) + ) + ) + ) + (i32.store offset=8 + (get_local $4) + (get_local $1) + ) + (i32.store offset=12 + (get_local $4) + (get_local $2) + ) + (set_local $13 + (i32.add + (get_local $0) + (i32.const 60) + ) + ) + (set_local $14 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (set_local $1 + (get_local $4) + ) + (set_local $4 + (i32.const 2) + ) + (set_local $12 + (i32.add + (get_local $3) + (get_local $2) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in + (if + (i32.load + (i32.const 16) + ) + (block + (call $_pthread_cleanup_push + (i32.const 5) + (get_local $0) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $10) + (get_local $1) + ) + (i32.store offset=8 + (get_local $10) + (get_local $4) + ) + (set_local $3 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $10) + ) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $9) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $9) + (get_local $1) + ) + (i32.store offset=8 + (get_local $9) + (get_local $4) + ) + (set_local $3 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $9) + ) + ) + ) + ) + ) + (br_if $__rjti$0 + (i32.eq + (get_local $12) + (get_local $3) + ) + ) + (br_if $__rjti$1 + (i32.lt_s + (get_local $3) + (i32.const 0) + ) + ) + (set_local $5 + (if (result i32) + (i32.gt_u + (get_local $3) + (tee_local $5 + (i32.load offset=4 + (get_local $1) + ) + ) + ) + (block (result i32) + (i32.store + (get_local $6) + (tee_local $7 + (i32.load + (get_local $14) + ) + ) + ) + (i32.store + (get_local $11) + (get_local $7) + ) + (set_local $7 + (i32.load offset=12 + (get_local $1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const -1) + ) + ) + (i32.sub + (get_local $3) + (get_local $5) + ) + ) + (block (result i32) + (if + (i32.eq + (get_local $4) + (i32.const 2) + ) + (block + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (get_local $3) + ) + ) + (set_local $7 + (get_local $5) + ) + (set_local $4 + (i32.const 2) + ) + ) + (set_local $7 + (get_local $5) + ) + ) + (get_local $3) + ) + ) + ) + (i32.store + (get_local $1) + (i32.add + (i32.load + (get_local $1) + ) + (get_local $5) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.sub + (get_local $7) + (get_local $5) + ) + ) + (set_local $12 + (i32.sub + (get_local $12) + (get_local $3) + ) + ) + (br $while-in) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (tee_local $1 + (i32.load + (get_local $14) + ) + ) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.store + (get_local $6) + (get_local $1) + ) + (i32.store + (get_local $11) + (get_local $1) + ) + (br $__rjto$1) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (set_local $2 + (if (result i32) + (i32.eq + (get_local $4) + (i32.const 2) + ) + (i32.const 0) + (i32.sub + (get_local $2) + (i32.load offset=4 + (get_local $1) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $8) + ) + (get_local $2) + ) + (func $_vfprintf (; 38 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 224) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $5 + (i32.add + (get_local $4) + (i32.const 120) + ) + ) + (set_local $7 + (get_local $4) + ) + (set_local $6 + (i32.add + (get_local $4) + (i32.const 136) + ) + ) + (set_local $9 + (i32.add + (tee_local $3 + (tee_local $8 + (i32.add + (get_local $4) + (i32.const 80) + ) + ) + ) + (i32.const 40) + ) + ) + (loop $do-in + (i32.store + (get_local $3) + (i32.const 0) + ) + (br_if $do-in + (i32.lt_s + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (get_local $9) + ) + ) + ) + (i32.store + (get_local $5) + (i32.load + (get_local $2) + ) + ) + (set_local $0 + (if (result i32) + (i32.lt_s + (call $_printf_core + (i32.const 0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + (i32.const 0) + ) + (i32.const -1) + (block (result i32) + (set_local $14 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (call $___lockfile + (get_local $0) + ) + (i32.const 0) + ) + ) + (set_local $10 + (i32.load + (get_local $0) + ) + ) + (if + (i32.lt_s + (i32.load8_s offset=74 + (get_local $0) + ) + (i32.const 1) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $10) + (i32.const -33) + ) + ) + ) + (if + (i32.load + (tee_local $11 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + ) + (set_local $1 + (call $_printf_core + (get_local $0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + ) + (block + (set_local $13 + (i32.load + (tee_local $12 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + ) + ) + (i32.store + (get_local $12) + (get_local $6) + ) + (i32.store + (tee_local $9 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + (get_local $6) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (get_local $6) + ) + (i32.store + (get_local $11) + (i32.const 80) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (i32.add + (get_local $6) + (i32.const 80) + ) + ) + (set_local $1 + (call $_printf_core + (get_local $0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + ) + (if + (get_local $13) + (block + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (set_local $1 + (select + (get_local $1) + (i32.const -1) + (i32.load + (get_local $3) + ) + ) + ) + (i32.store + (get_local $12) + (get_local $13) + ) + (i32.store + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $9) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + ) + ) + ) + ) + (i32.store + (get_local $0) + (i32.or + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.and + (get_local $10) + (i32.const 32) + ) + ) + ) + (if + (get_local $14) + (call $___unlockfile + (get_local $0) + ) + ) + (select + (i32.const -1) + (get_local $1) + (i32.and + (get_local $2) + (i32.const 32) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $___fwritex (; 39 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (block $label$break$L5 + (block $__rjti$0 + (br_if $__rjti$0 + (tee_local $3 + (i32.load + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + ) + (if + (call $___towrite + (get_local $2) + ) + (set_local $3 + (i32.const 0) + ) + (block + (set_local $3 + (i32.load + (get_local $4) + ) + ) + (br $__rjti$0) + ) + ) + (br $label$break$L5) + ) + (if + (i32.lt_u + (i32.sub + (get_local $3) + (tee_local $4 + (i32.load + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 20) + ) + ) + ) + ) + ) + (get_local $1) + ) + (block + (set_local $3 + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (br $label$break$L5) + ) + ) + (set_local $2 + (block $label$break$L10 (result i32) + (if (result i32) + (i32.gt_s + (i32.load8_s offset=75 + (get_local $2) + ) + (i32.const -1) + ) + (block (result i32) + (set_local $3 + (get_local $1) + ) + (loop $while-in + (drop + (br_if $label$break$L10 + (i32.const 0) + (i32.eqz + (get_local $3) + ) + ) + ) + (if + (i32.ne + (i32.load8_s + (i32.add + (get_local $0) + (tee_local $6 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + (i32.const 10) + ) + (block + (set_local $3 + (get_local $6) + ) + (br $while-in) + ) + ) + ) + (br_if $label$break$L5 + (i32.lt_u + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + (get_local $3) + ) + ) + (set_local $4 + (i32.load + (get_local $5) + ) + ) + (set_local $1 + (i32.sub + (get_local $1) + (get_local $3) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (get_local $3) + ) + ) + (get_local $3) + ) + (i32.const 0) + ) + ) + ) + (drop + (call $_memcpy + (get_local $4) + (get_local $0) + (get_local $1) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $1) + ) + ) + (set_local $3 + (i32.add + (get_local $2) + (get_local $1) + ) + ) + ) + (get_local $3) + ) + (func $___towrite (; 40 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (i32.load8_s + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 74) + ) + ) + ) + ) + (i32.store8 + (get_local $2) + (i32.or + (i32.add + (get_local $1) + (i32.const 255) + ) + (get_local $1) + ) + ) + (tee_local $0 + (if (result i32) + (i32.and + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.const 8) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.or + (get_local $1) + (i32.const 32) + ) + ) + (i32.const -1) + ) + (block (result i32) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=28 + (get_local $0) + (tee_local $1 + (i32.load offset=44 + (get_local $0) + ) + ) + ) + (i32.store offset=20 + (get_local $0) + (get_local $1) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (get_local $1) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (func $_wcrtomb (; 41 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $do-once (result i32) + (if (result i32) + (get_local $0) + (block (result i32) + (if + (i32.lt_u + (get_local $1) + (i32.const 128) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (br $do-once + (i32.const 1) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.const 2048) + ) + (block + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 192) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (br $do-once + (i32.const 2) + ) + ) + ) + (if + (i32.or + (i32.lt_u + (get_local $1) + (i32.const 55296) + ) + (i32.eq + (i32.and + (get_local $1) + (i32.const -8192) + ) + (i32.const 57344) + ) + ) + (block + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 12) + ) + (i32.const 224) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=2 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (br $do-once + (i32.const 3) + ) + ) + ) + (if (result i32) + (i32.lt_u + (i32.add + (get_local $1) + (i32.const -65536) + ) + (i32.const 1048576) + ) + (block (result i32) + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 18) + ) + (i32.const 240) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 12) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=2 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=3 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.const 4) + ) + (block (result i32) + (i32.store + (call $___errno_location) + (i32.const 84) + ) + (i32.const -1) + ) + ) + ) + (i32.const 1) + ) + ) + ) + (func $_wctomb (; 42 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (get_local $0) + (call $_wcrtomb + (get_local $0) + (get_local $1) + (i32.const 0) + ) + (i32.const 0) + ) + ) + (func $_memchr (; 43 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $5 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (block $label$break$L8 + (block $__rjti$2 + (if + (i32.and + (tee_local $4 + (i32.ne + (get_local $2) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.const 0) + ) + ) + (block + (set_local $4 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (br_if $__rjti$2 + (i32.eq + (i32.load8_u + (get_local $2) + ) + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + ) + (br_if $while-in + (i32.and + (tee_local $0 + (i32.ne + (tee_local $3 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 3) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (set_local $0 + (i32.const 0) + ) + (br $label$break$L8) + ) + (set_local $0 + (get_local $3) + ) + (if + (i32.ne + (i32.load8_u + (get_local $2) + ) + (tee_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (block + (set_local $3 + (i32.mul + (get_local $5) + (i32.const 16843009) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.le_u + (get_local $0) + (i32.const 3) + ) + ) + (loop $while-in3 + (if + (i32.eqz + (i32.and + (i32.xor + (i32.and + (tee_local $4 + (i32.xor + (i32.load + (get_local $2) + ) + (get_local $3) + ) + ) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $4) + (i32.const -16843009) + ) + ) + ) + (block + (set_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (br_if $while-in3 + (i32.gt_u + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + (i32.const 3) + ) + ) + (br $__rjti$0) + ) + ) + ) + (br $__rjto$0) + ) + (if + (i32.eqz + (get_local $0) + ) + (block + (set_local $0 + (i32.const 0) + ) + (br $label$break$L8) + ) + ) + ) + (loop $while-in5 + (br_if $label$break$L8 + (i32.eq + (i32.load8_u + (get_local $2) + ) + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br_if $while-in5 + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -1) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + ) + (select + (get_local $2) + (i32.const 0) + (get_local $0) + ) + ) + (func $___syscall_ret (; 44 ;) (param $0 i32) (result i32) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const -4096) + ) + (block (result i32) + (i32.store + (call $___errno_location) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + (get_local $0) + ) + ) + (func $___fflush_unlocked (; 45 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (tee_local $0 + (block $__rjto$0 (result i32) + (block $__rjti$0 + (br_if $__rjti$0 + (i32.le_u + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (br_if $__rjti$0 + (i32.load + (get_local $1) + ) + ) + (br $__rjto$0 + (i32.const -1) + ) + ) + (if + (i32.lt_u + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (tee_local $6 + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.sub + (get_local $4) + (get_local $6) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=40 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + (func $_cleanup (; 46 ;) (param $0 i32) + (if + (i32.eqz + (i32.load offset=68 + (get_local $0) + ) + ) + (call $___unlockfile + (get_local $0) + ) + ) + ) + (func $i32s-div (; 47 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (get_local $1) + (if (result i32) + (i32.and + (i32.eq + (get_local $0) + (i32.const -2147483648) + ) + (i32.eq + (get_local $1) + (i32.const -1) + ) + ) + (i32.const 0) + (i32.div_s + (get_local $0) + (get_local $1) + ) + ) + (i32.const 0) + ) + ) + (func $i32u-rem (; 48 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (get_local $1) + (i32.rem_u + (get_local $0) + (get_local $1) + ) + (i32.const 0) + ) + ) + (func $i32u-div (; 49 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (get_local $1) + (i32.div_u + (get_local $0) + (get_local $1) + ) + (i32.const 0) + ) + ) + (func $_printf_core (; 50 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 f64) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 f64) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (local $47 i32) + (local $48 i32) + (local $49 i32) + (local $50 i32) + (local $51 i32) + (set_local $25 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 624) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $20 + (i32.add + (get_local $25) + (i32.const 16) + ) + ) + (set_local $19 + (get_local $25) + ) + (set_local $36 + (i32.add + (get_local $25) + (i32.const 528) + ) + ) + (set_local $29 + (i32.ne + (get_local $0) + (i32.const 0) + ) + ) + (set_local $39 + (tee_local $26 + (i32.add + (tee_local $5 + (i32.add + (get_local $25) + (i32.const 536) + ) + ) + (i32.const 40) + ) + ) + ) + (set_local $40 + (i32.add + (get_local $5) + (i32.const 39) + ) + ) + (set_local $44 + (i32.add + (tee_local $41 + (i32.add + (get_local $25) + (i32.const 8) + ) + ) + (i32.const 4) + ) + ) + (set_local $34 + (i32.add + (tee_local $5 + (i32.add + (get_local $25) + (i32.const 576) + ) + ) + (i32.const 12) + ) + ) + (set_local $42 + (i32.add + (get_local $5) + (i32.const 11) + ) + ) + (set_local $45 + (i32.sub + (tee_local $28 + (get_local $34) + ) + (tee_local $37 + (tee_local $22 + (i32.add + (get_local $25) + (i32.const 588) + ) + ) + ) + ) + ) + (set_local $46 + (i32.sub + (i32.const -2) + (get_local $37) + ) + ) + (set_local $47 + (i32.add + (get_local $28) + (i32.const 2) + ) + ) + (set_local $49 + (i32.add + (tee_local $48 + (i32.add + (get_local $25) + (i32.const 24) + ) + ) + (i32.const 288) + ) + ) + (set_local $43 + (tee_local $30 + (i32.add + (get_local $22) + (i32.const 9) + ) + ) + ) + (set_local $35 + (i32.add + (get_local $22) + (i32.const 8) + ) + ) + (set_local $16 + (i32.const 0) + ) + (set_local $5 + (get_local $1) + ) + (set_local $10 + (i32.const 0) + ) + (set_local $1 + (i32.const 0) + ) + (block $label$break$L343 + (block $__rjti$9 + (loop $label$continue$L1 + (block $label$break$L1 + (if + (i32.gt_s + (get_local $16) + (i32.const -1) + ) + (set_local $16 + (if (result i32) + (i32.gt_s + (get_local $10) + (i32.sub + (i32.const 2147483647) + (get_local $16) + ) + ) + (block (result i32) + (i32.store + (call $___errno_location) + (i32.const 75) + ) + (i32.const -1) + ) + (i32.add + (get_local $10) + (get_local $16) + ) + ) + ) + ) + (br_if $__rjti$9 + (i32.eqz + (tee_local $7 + (i32.load8_s + (get_local $5) + ) + ) + ) + ) + (set_local $10 + (get_local $5) + ) + (block $label$break$L12 + (block $__rjti$1 + (loop $label$continue$L9 + (block $label$break$L9 + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.shr_s + (i32.shl + (get_local $7) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (set_local $6 + (get_local $10) + ) + (br $__rjti$1) + ) + (set_local $6 + (get_local $10) + ) + (br $label$break$L9) + ) + (set_local $7 + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + ) + (br $label$continue$L9) + ) + ) + (br $label$break$L12) + ) + (loop $while-in + (br_if $label$break$L12 + (i32.ne + (i32.load8_s offset=1 + (get_local $6) + ) + (i32.const 37) + ) + ) + (set_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (br_if $while-in + (i32.eq + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 2) + ) + ) + ) + (i32.const 37) + ) + ) + ) + ) + (set_local $7 + (i32.sub + (get_local $10) + (get_local $5) + ) + ) + (if + (get_local $29) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $5) + (get_local $7) + (get_local $0) + ) + ) + ) + ) + (if + (i32.ne + (get_local $10) + (get_local $5) + ) + (block + (set_local $5 + (get_local $6) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + ) + (set_local $8 + (if (result i32) + (i32.lt_u + (tee_local $8 + (i32.add + (tee_local $11 + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block (result i32) + (set_local $6 + (i32.load8_s + (tee_local $10 + (select + (i32.add + (get_local $6) + (i32.const 3) + ) + (get_local $10) + (tee_local $11 + (i32.eq + (i32.load8_s offset=2 + (get_local $6) + ) + (i32.const 36) + ) + ) + ) + ) + ) + ) + (set_local $17 + (select + (get_local $8) + (i32.const -1) + (get_local $11) + ) + ) + (select + (i32.const 1) + (get_local $1) + (get_local $11) + ) + ) + (block (result i32) + (set_local $6 + (get_local $11) + ) + (set_local $17 + (i32.const -1) + ) + (get_local $1) + ) + ) + ) + (block $label$break$L25 + (if + (i32.eq + (i32.and + (tee_local $11 + (i32.shr_s + (i32.shl + (get_local $6) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (i32.const -32) + ) + (i32.const 32) + ) + (block + (set_local $1 + (get_local $6) + ) + (set_local $6 + (get_local $11) + ) + (set_local $11 + (i32.const 0) + ) + (loop $while-in4 + (if + (i32.eqz + (i32.and + (i32.shl + (i32.const 1) + (i32.add + (get_local $6) + (i32.const -32) + ) + ) + (i32.const 75913) + ) + ) + (block + (set_local $6 + (get_local $1) + ) + (set_local $1 + (get_local $11) + ) + (br $label$break$L25) + ) + ) + (set_local $11 + (i32.or + (i32.shl + (i32.const 1) + (i32.add + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -32) + ) + ) + (get_local $11) + ) + ) + (br_if $while-in4 + (i32.eq + (i32.and + (tee_local $6 + (tee_local $1 + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + ) + ) + (i32.const -32) + ) + (i32.const 32) + ) + ) + (set_local $6 + (get_local $1) + ) + (set_local $1 + (get_local $11) + ) + ) + ) + (set_local $1 + (i32.const 0) + ) + ) + ) + (block $do-once5 + (if + (i32.eq + (i32.and + (get_local $6) + (i32.const 255) + ) + (i32.const 42) + ) + (block + (set_local $10 + (block $__rjto$0 (result i32) + (block $__rjti$0 + (br_if $__rjti$0 + (i32.ge_u + (tee_local $11 + (i32.add + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + ) + (br_if $__rjti$0 + (i32.ne + (i32.load8_s offset=2 + (get_local $10) + ) + (i32.const 36) + ) + ) + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + (i32.const 10) + ) + (drop + (i32.load offset=4 + (tee_local $6 + (i32.add + (get_local $3) + (i32.shl + (i32.add + (i32.load8_s + (get_local $6) + ) + (i32.const -48) + ) + (i32.const 3) + ) + ) + ) + ) + ) + (set_local $8 + (i32.const 1) + ) + (set_local $14 + (i32.load + (get_local $6) + ) + ) + (br $__rjto$0 + (i32.add + (get_local $10) + (i32.const 3) + ) + ) + ) + (if + (get_local $8) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (if + (i32.eqz + (get_local $29) + ) + (block + (set_local $11 + (get_local $1) + ) + (set_local $10 + (get_local $6) + ) + (set_local $1 + (i32.const 0) + ) + (set_local $14 + (i32.const 0) + ) + (br $do-once5) + ) + ) + (set_local $14 + (i32.load + (tee_local $10 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $8 + (i32.const 0) + ) + (get_local $6) + ) + ) + (set_local $11 + (if (result i32) + (i32.lt_s + (get_local $14) + (i32.const 0) + ) + (block (result i32) + (set_local $14 + (i32.sub + (i32.const 0) + (get_local $14) + ) + ) + (i32.or + (get_local $1) + (i32.const 8192) + ) + ) + (get_local $1) + ) + ) + (set_local $1 + (get_local $8) + ) + ) + (if + (i32.lt_u + (tee_local $6 + (i32.add + (i32.shr_s + (i32.shl + (get_local $6) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $11 + (i32.const 0) + ) + (loop $while-in8 + (set_local $6 + (i32.add + (i32.mul + (get_local $11) + (i32.const 10) + ) + (get_local $6) + ) + ) + (if + (i32.lt_u + (tee_local $9 + (i32.add + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $11 + (get_local $6) + ) + (set_local $6 + (get_local $9) + ) + (br $while-in8) + ) + ) + ) + (if + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + (block + (set_local $11 + (get_local $1) + ) + (set_local $1 + (get_local $8) + ) + (set_local $14 + (get_local $6) + ) + ) + ) + ) + (block + (set_local $11 + (get_local $1) + ) + (set_local $1 + (get_local $8) + ) + (set_local $14 + (i32.const 0) + ) + ) + ) + ) + ) + (set_local $6 + (block $label$break$L46 (result i32) + (if (result i32) + (i32.eq + (i32.load8_s + (get_local $10) + ) + (i32.const 46) + ) + (block (result i32) + (if + (i32.ne + (tee_local $8 + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + ) + (i32.const 42) + ) + (block + (if + (i32.lt_u + (tee_local $9 + (i32.add + (get_local $8) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $10 + (get_local $6) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $6 + (get_local $9) + ) + ) + (block + (set_local $10 + (get_local $6) + ) + (br $label$break$L46 + (i32.const 0) + ) + ) + ) + (loop $while-in11 + (drop + (br_if $label$break$L46 + (tee_local $6 + (i32.add + (i32.mul + (get_local $8) + (i32.const 10) + ) + (get_local $6) + ) + ) + (i32.ge_u + (tee_local $9 + (i32.add + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + ) + ) + (set_local $8 + (get_local $6) + ) + (set_local $6 + (get_local $9) + ) + (br $while-in11) + ) + ) + ) + (if + (i32.lt_u + (tee_local $8 + (i32.add + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $10) + (i32.const 2) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (if + (i32.eq + (i32.load8_s offset=3 + (get_local $10) + ) + (i32.const 36) + ) + (block + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $8) + (i32.const 2) + ) + ) + (i32.const 10) + ) + (drop + (i32.load offset=4 + (tee_local $6 + (i32.add + (get_local $3) + (i32.shl + (i32.add + (i32.load8_s + (get_local $6) + ) + (i32.const -48) + ) + (i32.const 3) + ) + ) + ) + ) + ) + (set_local $10 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (br $label$break$L46 + (i32.load + (get_local $6) + ) + ) + ) + ) + ) + (if + (get_local $1) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (if (result i32) + (get_local $29) + (block (result i32) + (set_local $8 + (i32.load + (tee_local $10 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $10 + (get_local $6) + ) + (get_local $8) + ) + (block (result i32) + (set_local $10 + (get_local $6) + ) + (i32.const 0) + ) + ) + ) + (i32.const -1) + ) + ) + ) + (set_local $8 + (get_local $10) + ) + (set_local $9 + (i32.const 0) + ) + (loop $while-in13 + (if + (i32.gt_u + (tee_local $12 + (i32.add + (i32.load8_s + (get_local $8) + ) + (i32.const -65) + ) + ) + (i32.const 57) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $10 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + (if + (i32.lt_u + (i32.add + (tee_local $12 + (i32.and + (tee_local $13 + (i32.load8_s + (i32.add + (i32.add + (i32.mul + (get_local $9) + (i32.const 58) + ) + (i32.const 3611) + ) + (get_local $12) + ) + ) + ) + (i32.const 255) + ) + ) + (i32.const -1) + ) + (i32.const 8) + ) + (block + (set_local $8 + (get_local $10) + ) + (set_local $9 + (get_local $12) + ) + (br $while-in13) + ) + (set_local $18 + (get_local $8) + ) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $13) + (i32.const 255) + ) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $8 + (i32.gt_s + (get_local $17) + (i32.const -1) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (if + (i32.eq + (i32.and + (get_local $13) + (i32.const 255) + ) + (i32.const 19) + ) + (if + (get_local $8) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + (br $__rjti$2) + ) + (block + (if + (get_local $8) + (block + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $17) + (i32.const 2) + ) + ) + (get_local $12) + ) + (set_local $13 + (i32.load offset=4 + (tee_local $12 + (i32.add + (get_local $3) + (i32.shl + (get_local $17) + (i32.const 3) + ) + ) + ) + ) + ) + (i32.store + (tee_local $8 + (get_local $19) + ) + (i32.load + (get_local $12) + ) + ) + (i32.store offset=4 + (get_local $8) + (get_local $13) + ) + (br $__rjti$2) + ) + ) + (if + (i32.eqz + (get_local $29) + ) + (block + (set_local $16 + (i32.const 0) + ) + (br $label$break$L1) + ) + ) + (call $_pop_arg_336 + (get_local $19) + (get_local $12) + (get_local $2) + ) + ) + ) + (br $__rjto$2) + ) + (if + (i32.eqz + (get_local $29) + ) + (block + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + ) + ) + (set_local $11 + (select + (tee_local $8 + (i32.and + (get_local $11) + (i32.const -65537) + ) + ) + (get_local $11) + (i32.and + (get_local $11) + (i32.const 8192) + ) + ) + ) + (set_local $5 + (block $__rjto$8 (result i32) + (block $__rjti$8 + (block $__rjti$7 + (block $__rjti$6 + (block $__rjti$5 + (block $__rjti$4 + (block $__rjti$3 + (block $switch-default120 + (block $switch-case42 + (block $switch-case41 + (block $switch-case40 + (block $switch-case39 + (block $switch-case38 + (block $switch-case37 + (block $switch-case36 + (block $switch-case34 + (block $switch-case33 + (block $switch-case29 + (block $switch-case28 + (block $switch-case27 + (br_table $switch-case42 $switch-default120 $switch-case40 $switch-default120 $switch-case42 $switch-case42 $switch-case42 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case41 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case29 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case42 $switch-default120 $switch-case37 $switch-case34 $switch-case42 $switch-case42 $switch-case42 $switch-default120 $switch-case34 $switch-default120 $switch-default120 $switch-default120 $switch-case38 $switch-case27 $switch-case33 $switch-case28 $switch-default120 $switch-default120 $switch-case39 $switch-default120 $switch-case36 $switch-default120 $switch-default120 $switch-case29 $switch-default120 + (i32.sub + (tee_local $18 + (select + (i32.and + (tee_local $12 + (i32.load8_s + (get_local $18) + ) + ) + (i32.const -33) + ) + (get_local $12) + (i32.and + (i32.ne + (get_local $9) + (i32.const 0) + ) + (i32.eq + (i32.and + (get_local $12) + (i32.const 15) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 65) + ) + ) + ) + (block $switch-default26 + (block $switch-case25 + (block $switch-case24 + (block $switch-case23 + (block $switch-case22 + (block $switch-case21 + (block $switch-case20 + (block $switch-case19 + (br_table $switch-case19 $switch-case20 $switch-case21 $switch-case22 $switch-case23 $switch-default26 $switch-case24 $switch-case25 $switch-default26 + (get_local $9) + ) + ) + (i32.store + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (tee_local $5 + (i32.load + (get_local $19) + ) + ) + (get_local $16) + ) + (i32.store offset=4 + (get_local $5) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $16) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store16 + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store8 + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (tee_local $5 + (i32.load + (get_local $19) + ) + ) + (get_local $16) + ) + (i32.store offset=4 + (get_local $5) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $16) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (set_local $7 + (i32.or + (get_local $11) + (i32.const 8) + ) + ) + (set_local $6 + (select + (get_local $6) + (i32.const 8) + (i32.gt_u + (get_local $6) + (i32.const 8) + ) + ) + ) + (set_local $18 + (i32.const 120) + ) + (br $__rjti$3) + ) + (set_local $7 + (get_local $11) + ) + (br $__rjti$3) + ) + (if + (i32.and + (i32.eqz + (tee_local $7 + (i32.load + (tee_local $5 + (get_local $19) + ) + ) + ) + ) + (i32.eqz + (tee_local $8 + (i32.load offset=4 + (get_local $5) + ) + ) + ) + ) + (set_local $8 + (get_local $26) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $7 + (get_local $8) + ) + (set_local $8 + (get_local $26) + ) + (loop $while-in32 + (i32.store8 + (tee_local $8 + (i32.add + (get_local $8) + (i32.const -1) + ) + ) + (i32.or + (i32.and + (get_local $5) + (i32.const 7) + ) + (i32.const 48) + ) + ) + (br_if $while-in32 + (i32.eqz + (i32.and + (i32.eqz + (tee_local $5 + (call $_bitshift64Lshr + (get_local $5) + (get_local $7) + (i32.const 3) + ) + ) + ) + (i32.eqz + (tee_local $7 + (get_global $tempRet0) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $5 + (if (result i32) + (i32.and + (get_local $11) + (i32.const 8) + ) + (block (result i32) + (set_local $7 + (get_local $11) + ) + (set_local $6 + (select + (tee_local $11 + (i32.add + (i32.sub + (get_local $39) + (get_local $8) + ) + (i32.const 1) + ) + ) + (get_local $6) + (i32.lt_s + (get_local $6) + (get_local $11) + ) + ) + ) + (get_local $8) + ) + (block (result i32) + (set_local $7 + (get_local $11) + ) + (get_local $8) + ) + ) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$8) + ) + (set_local $5 + (i32.load + (tee_local $7 + (get_local $19) + ) + ) + ) + (if + (i32.lt_s + (tee_local $7 + (i32.load offset=4 + (get_local $7) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (tee_local $8 + (get_local $19) + ) + (tee_local $5 + (call $_i64Subtract + (i32.const 0) + (i32.const 0) + (get_local $5) + (get_local $7) + ) + ) + ) + (i32.store offset=4 + (get_local $8) + (tee_local $7 + (get_global $tempRet0) + ) + ) + (set_local $8 + (i32.const 1) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$4) + ) + ) + (set_local $9 + (if (result i32) + (i32.and + (get_local $11) + (i32.const 2048) + ) + (block (result i32) + (set_local $8 + (i32.const 1) + ) + (i32.const 4092) + ) + (block (result i32) + (set_local $8 + (tee_local $9 + (i32.and + (get_local $11) + (i32.const 1) + ) + ) + ) + (select + (i32.const 4093) + (i32.const 4091) + (get_local $9) + ) + ) + ) + ) + (br $__rjti$4) + ) + (set_local $5 + (i32.load + (tee_local $7 + (get_local $19) + ) + ) + ) + (set_local $7 + (i32.load offset=4 + (get_local $7) + ) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$4) + ) + (drop + (i32.load offset=4 + (tee_local $5 + (get_local $19) + ) + ) + ) + (i32.store8 + (get_local $40) + (i32.load + (get_local $5) + ) + ) + (set_local $7 + (get_local $40) + ) + (set_local $11 + (get_local $8) + ) + (set_local $12 + (i32.const 1) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjto$8 + (get_local $26) + ) + ) + (set_local $5 + (call $_strerror + (i32.load + (call $___errno_location) + ) + ) + ) + (br $__rjti$5) + ) + (set_local $5 + (select + (tee_local $5 + (i32.load + (get_local $19) + ) + ) + (i32.const 4101) + (get_local $5) + ) + ) + (br $__rjti$5) + ) + (drop + (i32.load offset=4 + (tee_local $5 + (get_local $19) + ) + ) + ) + (i32.store + (get_local $41) + (i32.load + (get_local $5) + ) + ) + (i32.store + (get_local $44) + (i32.const 0) + ) + (i32.store + (get_local $19) + (get_local $41) + ) + (set_local $8 + (i32.const -1) + ) + (br $__rjti$6) + ) + (if + (get_local $6) + (block + (set_local $8 + (get_local $6) + ) + (br $__rjti$6) + ) + (block + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (i32.const 0) + (get_local $11) + ) + (set_local $7 + (i32.const 0) + ) + (br $__rjti$7) + ) + ) + ) + (set_local $15 + (f64.load + (get_local $19) + ) + ) + (i32.store + (get_local $20) + (i32.const 0) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $15) + ) + (drop + (i32.load + (get_global $tempDoublePtr) + ) + ) + (set_local $31 + (if (result i32) + (i32.lt_s + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + (i32.const 0) + ) + (block (result i32) + (set_local $27 + (i32.const 1) + ) + (set_local $15 + (f64.neg + (get_local $15) + ) + ) + (i32.const 4108) + ) + (if (result i32) + (i32.and + (get_local $11) + (i32.const 2048) + ) + (block (result i32) + (set_local $27 + (i32.const 1) + ) + (i32.const 4111) + ) + (block (result i32) + (set_local $27 + (tee_local $5 + (i32.and + (get_local $11) + (i32.const 1) + ) + ) + ) + (select + (i32.const 4114) + (i32.const 4109) + (get_local $5) + ) + ) + ) + ) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $15) + ) + (drop + (i32.load + (get_global $tempDoublePtr) + ) + ) + (set_local $7 + (block $do-once49 (result i32) + (if (result i32) + (i32.or + (i32.lt_u + (tee_local $5 + (i32.and + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + (i32.const 2146435072) + ) + ) + (i32.const 2146435072) + ) + (i32.and + (i32.eq + (get_local $5) + (i32.const 2146435072) + ) + (i32.const 0) + ) + ) + (block (result i32) + (if + (tee_local $5 + (f64.ne + (tee_local $23 + (f64.mul + (call $_frexp + (get_local $15) + (tee_local $5 + (get_local $20) + ) + ) + (f64.const 2) + ) + ) + (f64.const 0) + ) + ) + (i32.store + (get_local $20) + (i32.add + (i32.load + (get_local $20) + ) + (i32.const -1) + ) + ) + ) + (if + (i32.eq + (tee_local $24 + (i32.or + (get_local $18) + (i32.const 32) + ) + ) + (i32.const 97) + ) + (block + (set_local $9 + (select + (i32.add + (get_local $31) + (i32.const 9) + ) + (get_local $31) + (tee_local $13 + (i32.and + (get_local $18) + (i32.const 32) + ) + ) + ) + ) + (set_local $15 + (if (result f64) + (i32.or + (i32.gt_u + (get_local $6) + (i32.const 11) + ) + (i32.eqz + (tee_local $5 + (i32.sub + (i32.const 12) + (get_local $6) + ) + ) + ) + ) + (get_local $23) + (block (result f64) + (set_local $15 + (f64.const 8) + ) + (loop $while-in54 + (set_local $15 + (f64.mul + (get_local $15) + (f64.const 16) + ) + ) + (br_if $while-in54 + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + ) + ) + (if (result f64) + (i32.eq + (i32.load8_s + (get_local $9) + ) + (i32.const 45) + ) + (f64.neg + (f64.add + (get_local $15) + (f64.sub + (f64.neg + (get_local $23) + ) + (get_local $15) + ) + ) + ) + (f64.sub + (f64.add + (get_local $23) + (get_local $15) + ) + (get_local $15) + ) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $5 + (call $_fmt_u + (tee_local $5 + (select + (i32.sub + (i32.const 0) + (tee_local $7 + (i32.load + (get_local $20) + ) + ) + ) + (get_local $7) + (i32.lt_s + (get_local $7) + (i32.const 0) + ) + ) + ) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + (get_local $34) + ) + ) + (get_local $34) + ) + (block + (i32.store8 + (get_local $42) + (i32.const 48) + ) + (set_local $5 + (get_local $42) + ) + ) + ) + (set_local $12 + (i32.or + (get_local $27) + (i32.const 2) + ) + ) + (i32.store8 + (i32.add + (get_local $5) + (i32.const -1) + ) + (i32.add + (i32.and + (i32.shr_s + (get_local $7) + (i32.const 31) + ) + (i32.const 2) + ) + (i32.const 43) + ) + ) + (i32.store8 + (tee_local $8 + (i32.add + (get_local $5) + (i32.const -2) + ) + ) + (i32.add + (get_local $18) + (i32.const 15) + ) + ) + (set_local $18 + (i32.lt_s + (get_local $6) + (i32.const 1) + ) + ) + (set_local $17 + (i32.eqz + (i32.and + (get_local $11) + (i32.const 8) + ) + ) + ) + (set_local $5 + (get_local $22) + ) + (loop $while-in56 + (i32.store8 + (get_local $5) + (i32.or + (i32.load8_u + (i32.add + (tee_local $7 + (call $f64-to-int + (get_local $15) + ) + ) + (i32.const 4075) + ) + ) + (get_local $13) + ) + ) + (set_local $15 + (f64.mul + (f64.sub + (get_local $15) + (f64.convert_s/i32 + (get_local $7) + ) + ) + (f64.const 16) + ) + ) + (set_local $5 + (block $do-once57 (result i32) + (if (result i32) + (i32.eq + (i32.sub + (tee_local $7 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (get_local $37) + ) + (i32.const 1) + ) + (block (result i32) + (drop + (br_if $do-once57 + (get_local $7) + (i32.and + (get_local $17) + (i32.and + (get_local $18) + (f64.eq + (get_local $15) + (f64.const 0) + ) + ) + ) + ) + ) + (i32.store8 + (get_local $7) + (i32.const 46) + ) + (i32.add + (get_local $5) + (i32.const 2) + ) + ) + (get_local $7) + ) + ) + ) + (br_if $while-in56 + (f64.ne + (get_local $15) + (f64.const 0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (tee_local $7 + (i32.add + (tee_local $6 + (select + (i32.sub + (i32.add + (get_local $47) + (get_local $6) + ) + (get_local $8) + ) + (i32.add + (i32.sub + (get_local $45) + (get_local $8) + ) + (get_local $5) + ) + (i32.and + (i32.ne + (get_local $6) + (i32.const 0) + ) + (i32.lt_s + (i32.add + (get_local $46) + (get_local $5) + ) + (get_local $6) + ) + ) + ) + ) + (get_local $12) + ) + ) + (get_local $11) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $9) + (get_local $12) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $11) + (i32.const 65536) + ) + ) + (set_local $5 + (i32.sub + (get_local $5) + (get_local $37) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $22) + (get_local $5) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.sub + (get_local $6) + (i32.add + (get_local $5) + (tee_local $5 + (i32.sub + (get_local $28) + (get_local $8) + ) + ) + ) + ) + (i32.const 0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $8) + (get_local $5) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (br $do-once49 + (select + (get_local $14) + (get_local $7) + (i32.lt_s + (get_local $7) + (get_local $14) + ) + ) + ) + ) + ) + (set_local $15 + (if (result f64) + (get_local $5) + (block (result f64) + (i32.store + (get_local $20) + (tee_local $5 + (i32.add + (i32.load + (get_local $20) + ) + (i32.const -28) + ) + ) + ) + (f64.mul + (get_local $23) + (f64.const 268435456) + ) + ) + (block (result f64) + (set_local $5 + (i32.load + (get_local $20) + ) + ) + (get_local $23) + ) + ) + ) + (set_local $7 + (tee_local $8 + (select + (get_local $48) + (get_local $49) + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + ) + ) + ) + (loop $while-in60 + (i32.store + (get_local $7) + (tee_local $5 + (call $f64-to-int + (get_local $15) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (br_if $while-in60 + (f64.ne + (tee_local $15 + (f64.mul + (f64.sub + (get_local $15) + (f64.convert_u/i32 + (get_local $5) + ) + ) + (f64.const 1e9) + ) + ) + (f64.const 0) + ) + ) + ) + (if + (i32.gt_s + (tee_local $9 + (i32.load + (get_local $20) + ) + ) + (i32.const 0) + ) + (block + (set_local $5 + (get_local $8) + ) + (loop $while-in62 + (set_local $13 + (select + (i32.const 29) + (get_local $9) + (i32.gt_s + (get_local $9) + (i32.const 29) + ) + ) + ) + (block $do-once63 + (if + (i32.ge_u + (tee_local $9 + (i32.add + (get_local $7) + (i32.const -4) + ) + ) + (get_local $5) + ) + (block + (set_local $12 + (i32.const 0) + ) + (loop $while-in66 + (i32.store + (get_local $9) + (call $___uremdi3 + (tee_local $12 + (call $_i64Add + (call $_bitshift64Shl + (i32.load + (get_local $9) + ) + (i32.const 0) + (get_local $13) + ) + (get_global $tempRet0) + (get_local $12) + (i32.const 0) + ) + ) + (tee_local $17 + (get_global $tempRet0) + ) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (set_local $12 + (call $___udivdi3 + (get_local $12) + (get_local $17) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (br_if $while-in66 + (i32.ge_u + (tee_local $9 + (i32.add + (get_local $9) + (i32.const -4) + ) + ) + (get_local $5) + ) + ) + ) + (br_if $do-once63 + (i32.eqz + (get_local $12) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -4) + ) + ) + (get_local $12) + ) + ) + ) + ) + (loop $while-in68 + (if + (i32.gt_u + (get_local $7) + (get_local $5) + ) + (if + (i32.eqz + (i32.load + (tee_local $9 + (i32.add + (get_local $7) + (i32.const -4) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $9) + ) + (br $while-in68) + ) + ) + ) + ) + (i32.store + (get_local $20) + (tee_local $9 + (i32.sub + (i32.load + (get_local $20) + ) + (get_local $13) + ) + ) + ) + (br_if $while-in62 + (i32.gt_s + (get_local $9) + (i32.const 0) + ) + ) + ) + ) + (set_local $5 + (get_local $8) + ) + ) + (set_local $17 + (select + (i32.const 6) + (get_local $6) + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + ) + ) + (if + (i32.lt_s + (get_local $9) + (i32.const 0) + ) + (block + (set_local $21 + (i32.add + (call $i32s-div + (i32.add + (get_local $17) + (i32.const 25) + ) + (i32.const 9) + ) + (i32.const 1) + ) + ) + (set_local $32 + (i32.eq + (get_local $24) + (i32.const 102) + ) + ) + (set_local $6 + (get_local $5) + ) + (set_local $5 + (get_local $7) + ) + (loop $while-in70 + (set_local $13 + (select + (i32.const 9) + (tee_local $7 + (i32.sub + (i32.const 0) + (get_local $9) + ) + ) + (i32.gt_s + (get_local $7) + (i32.const 9) + ) + ) + ) + (block $do-once71 + (if + (i32.lt_u + (get_local $6) + (get_local $5) + ) + (block + (set_local $12 + (i32.add + (i32.shl + (i32.const 1) + (get_local $13) + ) + (i32.const -1) + ) + ) + (set_local $38 + (i32.shr_u + (i32.const 1000000000) + (get_local $13) + ) + ) + (set_local $9 + (i32.const 0) + ) + (set_local $7 + (get_local $6) + ) + (loop $while-in74 + (i32.store + (get_local $7) + (i32.add + (i32.shr_u + (tee_local $33 + (i32.load + (get_local $7) + ) + ) + (get_local $13) + ) + (get_local $9) + ) + ) + (set_local $9 + (i32.mul + (i32.and + (get_local $33) + (get_local $12) + ) + (get_local $38) + ) + ) + (br_if $while-in74 + (i32.lt_u + (tee_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (get_local $5) + ) + ) + ) + (set_local $7 + (select + (get_local $6) + (i32.add + (get_local $6) + (i32.const 4) + ) + (i32.load + (get_local $6) + ) + ) + ) + (br_if $do-once71 + (i32.eqz + (get_local $9) + ) + ) + (i32.store + (get_local $5) + (get_local $9) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + ) + (set_local $7 + (select + (get_local $6) + (i32.add + (get_local $6) + (i32.const 4) + ) + (i32.load + (get_local $6) + ) + ) + ) + ) + ) + (set_local $12 + (select + (i32.add + (tee_local $6 + (select + (get_local $8) + (get_local $7) + (get_local $32) + ) + ) + (i32.shl + (get_local $21) + (i32.const 2) + ) + ) + (get_local $5) + (i32.gt_s + (i32.shr_s + (i32.sub + (get_local $5) + (get_local $6) + ) + (i32.const 2) + ) + (get_local $21) + ) + ) + ) + (i32.store + (get_local $20) + (tee_local $9 + (i32.add + (i32.load + (get_local $20) + ) + (get_local $13) + ) + ) + ) + (if + (i32.lt_s + (get_local $9) + (i32.const 0) + ) + (block + (set_local $6 + (get_local $7) + ) + (set_local $5 + (get_local $12) + ) + (br $while-in70) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $9 + (get_local $12) + ) + ) + ) + ) + ) + (set_local $9 + (get_local $7) + ) + ) + (set_local $21 + (get_local $8) + ) + (block $do-once75 + (if + (i32.lt_u + (get_local $5) + (get_local $9) + ) + (block + (set_local $7 + (i32.mul + (i32.shr_s + (i32.sub + (get_local $21) + (get_local $5) + ) + (i32.const 2) + ) + (i32.const 9) + ) + ) + (br_if $do-once75 + (i32.lt_u + (tee_local $12 + (i32.load + (get_local $5) + ) + ) + (i32.const 10) + ) + ) + (set_local $6 + (i32.const 10) + ) + (loop $while-in78 + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br_if $while-in78 + (i32.ge_u + (get_local $12) + (tee_local $6 + (i32.mul + (get_local $6) + (i32.const 10) + ) + ) + ) + ) + ) + ) + (set_local $7 + (i32.const 0) + ) + ) + ) + (set_local $5 + (if (result i32) + (i32.lt_s + (tee_local $6 + (i32.add + (i32.sub + (get_local $17) + (select + (get_local $7) + (i32.const 0) + (i32.ne + (get_local $24) + (i32.const 102) + ) + ) + ) + (i32.shr_s + (i32.shl + (i32.and + (tee_local $32 + (i32.ne + (get_local $17) + (i32.const 0) + ) + ) + (tee_local $38 + (i32.eq + (get_local $24) + (i32.const 103) + ) + ) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + ) + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (get_local $9) + (get_local $21) + ) + (i32.const 2) + ) + (i32.const 9) + ) + (i32.const -9) + ) + ) + (block (result i32) + (set_local $13 + (call $i32s-div + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 9216) + ) + ) + (i32.const 9) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.add + (i32.rem_s + (get_local $6) + (i32.const 9) + ) + (i32.const 1) + ) + ) + (i32.const 9) + ) + (block + (set_local $12 + (i32.const 10) + ) + (loop $while-in80 + (set_local $12 + (i32.mul + (get_local $12) + (i32.const 10) + ) + ) + (br_if $while-in80 + (i32.ne + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (i32.const 9) + ) + ) + ) + ) + (set_local $12 + (i32.const 10) + ) + ) + (set_local $13 + (call $i32u-rem + (tee_local $24 + (i32.load + (tee_local $6 + (i32.add + (i32.add + (get_local $8) + (i32.shl + (get_local $13) + (i32.const 2) + ) + ) + (i32.const -4092) + ) + ) + ) + ) + (get_local $12) + ) + ) + (block $do-once81 + (if + (i32.eqz + (i32.and + (tee_local $33 + (i32.eq + (i32.add + (get_local $6) + (i32.const 4) + ) + (get_local $9) + ) + ) + (i32.eqz + (get_local $13) + ) + ) + ) + (block + (set_local $50 + (call $i32u-div + (get_local $24) + (get_local $12) + ) + ) + (set_local $15 + (if (result f64) + (i32.lt_u + (get_local $13) + (tee_local $51 + (call $i32s-div + (get_local $12) + (i32.const 2) + ) + ) + ) + (f64.const 0.5) + (select + (f64.const 1) + (f64.const 1.5) + (i32.and + (get_local $33) + (i32.eq + (get_local $13) + (get_local $51) + ) + ) + ) + ) + ) + (set_local $23 + (select + (f64.const 9007199254740994) + (f64.const 9007199254740992) + (i32.and + (get_local $50) + (i32.const 1) + ) + ) + ) + (block $do-once83 + (if + (get_local $27) + (block + (br_if $do-once83 + (i32.ne + (i32.load8_s + (get_local $31) + ) + (i32.const 45) + ) + ) + (set_local $23 + (f64.neg + (get_local $23) + ) + ) + (set_local $15 + (f64.neg + (get_local $15) + ) + ) + ) + ) + ) + (i32.store + (get_local $6) + (tee_local $13 + (i32.sub + (get_local $24) + (get_local $13) + ) + ) + ) + (br_if $do-once81 + (f64.eq + (f64.add + (get_local $23) + (get_local $15) + ) + (get_local $23) + ) + ) + (i32.store + (get_local $6) + (tee_local $7 + (i32.add + (get_local $13) + (get_local $12) + ) + ) + ) + (if + (i32.gt_u + (get_local $7) + (i32.const 999999999) + ) + (loop $while-in86 + (i32.store + (get_local $6) + (i32.const 0) + ) + (if + (i32.lt_u + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -4) + ) + ) + (get_local $5) + ) + (i32.store + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -4) + ) + ) + (i32.const 0) + ) + ) + (i32.store + (get_local $6) + (tee_local $7 + (i32.add + (i32.load + (get_local $6) + ) + (i32.const 1) + ) + ) + ) + (br_if $while-in86 + (i32.gt_u + (get_local $7) + (i32.const 999999999) + ) + ) + ) + ) + (set_local $7 + (i32.mul + (i32.shr_s + (i32.sub + (get_local $21) + (get_local $5) + ) + (i32.const 2) + ) + (i32.const 9) + ) + ) + (br_if $do-once81 + (i32.lt_u + (tee_local $13 + (i32.load + (get_local $5) + ) + ) + (i32.const 10) + ) + ) + (set_local $12 + (i32.const 10) + ) + (loop $while-in88 + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br_if $while-in88 + (i32.ge_u + (get_local $13) + (tee_local $12 + (i32.mul + (get_local $12) + (i32.const 10) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $12 + (get_local $5) + ) + (set_local $13 + (get_local $7) + ) + (select + (tee_local $5 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (get_local $9) + (i32.gt_u + (get_local $9) + (get_local $5) + ) + ) + ) + (block (result i32) + (set_local $12 + (get_local $5) + ) + (set_local $13 + (get_local $7) + ) + (get_local $9) + ) + ) + ) + (set_local $33 + (i32.sub + (i32.const 0) + (get_local $13) + ) + ) + (loop $while-in90 + (block $while-out89 + (if + (i32.le_u + (get_local $5) + (get_local $12) + ) + (block + (set_local $24 + (i32.const 0) + ) + (set_local $9 + (get_local $5) + ) + (br $while-out89) + ) + ) + (if + (i32.load + (tee_local $7 + (i32.add + (get_local $5) + (i32.const -4) + ) + ) + ) + (block + (set_local $24 + (i32.const 1) + ) + (set_local $9 + (get_local $5) + ) + ) + (block + (set_local $5 + (get_local $7) + ) + (br $while-in90) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (tee_local $13 + (i32.add + (i32.add + (i32.add + (i32.add + (get_local $27) + (i32.const 1) + ) + (tee_local $5 + (block $do-once91 (result i32) + (if (result i32) + (get_local $38) + (block (result i32) + (set_local $7 + (if (result i32) + (i32.and + (i32.gt_s + (tee_local $5 + (i32.add + (i32.xor + (get_local $32) + (i32.const 1) + ) + (get_local $17) + ) + ) + (get_local $13) + ) + (i32.gt_s + (get_local $13) + (i32.const -5) + ) + ) + (block (result i32) + (set_local $17 + (i32.sub + (i32.add + (get_local $5) + (i32.const -1) + ) + (get_local $13) + ) + ) + (i32.add + (get_local $18) + (i32.const -1) + ) + ) + (block (result i32) + (set_local $17 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + (i32.add + (get_local $18) + (i32.const -2) + ) + ) + ) + ) + (if + (tee_local $5 + (i32.and + (get_local $11) + (i32.const 8) + ) + ) + (block + (set_local $21 + (get_local $5) + ) + (br $do-once91 + (get_local $17) + ) + ) + ) + (block $do-once93 + (if + (get_local $24) + (block + (if + (i32.eqz + (tee_local $18 + (i32.load + (i32.add + (get_local $9) + (i32.const -4) + ) + ) + ) + ) + (block + (set_local $5 + (i32.const 9) + ) + (br $do-once93) + ) + ) + (if + (call $i32u-rem + (get_local $18) + (i32.const 10) + ) + (block + (set_local $5 + (i32.const 0) + ) + (br $do-once93) + ) + (block + (set_local $6 + (i32.const 10) + ) + (set_local $5 + (i32.const 0) + ) + ) + ) + (loop $while-in96 + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (br_if $while-in96 + (i32.eqz + (call $i32u-rem + (get_local $18) + (tee_local $6 + (i32.mul + (get_local $6) + (i32.const 10) + ) + ) + ) + ) + ) + ) + ) + (set_local $5 + (i32.const 9) + ) + ) + ) + (set_local $6 + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (get_local $9) + (get_local $21) + ) + (i32.const 2) + ) + (i32.const 9) + ) + (i32.const -9) + ) + ) + (if (result i32) + (i32.eq + (i32.or + (get_local $7) + (i32.const 32) + ) + (i32.const 102) + ) + (block (result i32) + (set_local $21 + (i32.const 0) + ) + (select + (get_local $17) + (tee_local $5 + (select + (i32.const 0) + (tee_local $5 + (i32.sub + (get_local $6) + (get_local $5) + ) + ) + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + ) + ) + (i32.lt_s + (get_local $17) + (get_local $5) + ) + ) + ) + (block (result i32) + (set_local $21 + (i32.const 0) + ) + (select + (get_local $17) + (tee_local $5 + (select + (i32.const 0) + (tee_local $5 + (i32.sub + (i32.add + (get_local $6) + (get_local $13) + ) + (get_local $5) + ) + ) + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + ) + ) + (i32.lt_s + (get_local $17) + (get_local $5) + ) + ) + ) + ) + ) + (block (result i32) + (set_local $21 + (i32.and + (get_local $11) + (i32.const 8) + ) + ) + (set_local $7 + (get_local $18) + ) + (get_local $17) + ) + ) + ) + ) + ) + (i32.ne + (tee_local $32 + (i32.or + (get_local $5) + (get_local $21) + ) + ) + (i32.const 0) + ) + ) + (if (result i32) + (tee_local $17 + (i32.eq + (i32.or + (get_local $7) + (i32.const 32) + ) + (i32.const 102) + ) + ) + (block (result i32) + (set_local $18 + (i32.const 0) + ) + (select + (get_local $13) + (i32.const 0) + (i32.gt_s + (get_local $13) + (i32.const 0) + ) + ) + ) + (block (result i32) + (if + (i32.lt_s + (i32.sub + (get_local $28) + (tee_local $6 + (call $_fmt_u + (tee_local $6 + (select + (get_local $33) + (get_local $13) + (i32.lt_s + (get_local $13) + (i32.const 0) + ) + ) + ) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + (get_local $34) + ) + ) + ) + (i32.const 2) + ) + (loop $while-in98 + (i32.store8 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in98 + (i32.lt_s + (i32.sub + (get_local $28) + (get_local $6) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store8 + (i32.add + (get_local $6) + (i32.const -1) + ) + (i32.add + (i32.and + (i32.shr_s + (get_local $13) + (i32.const 31) + ) + (i32.const 2) + ) + (i32.const 43) + ) + ) + (i32.store8 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -2) + ) + ) + (get_local $7) + ) + (set_local $18 + (get_local $6) + ) + (i32.sub + (get_local $28) + (get_local $6) + ) + ) + ) + ) + ) + (get_local $11) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $31) + (get_local $27) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $14) + (get_local $13) + (i32.xor + (get_local $11) + (i32.const 65536) + ) + ) + (block $do-once99 + (if + (get_local $17) + (block + (set_local $6 + (tee_local $12 + (select + (get_local $8) + (get_local $12) + (i32.gt_u + (get_local $12) + (get_local $8) + ) + ) + ) + ) + (loop $while-in102 + (set_local $7 + (call $_fmt_u + (i32.load + (get_local $6) + ) + (i32.const 0) + (get_local $30) + ) + ) + (block $do-once103 + (if + (i32.eq + (get_local $6) + (get_local $12) + ) + (block + (br_if $do-once103 + (i32.ne + (get_local $7) + (get_local $30) + ) + ) + (i32.store8 + (get_local $35) + (i32.const 48) + ) + (set_local $7 + (get_local $35) + ) + ) + (block + (br_if $do-once103 + (i32.le_u + (get_local $7) + (get_local $22) + ) + ) + (loop $while-in106 + (i32.store8 + (tee_local $7 + (i32.add + (get_local $7) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in106 + (i32.gt_u + (get_local $7) + (get_local $22) + ) + ) + ) + ) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $7) + (i32.sub + (get_local $43) + (get_local $7) + ) + (get_local $0) + ) + ) + ) + (if + (i32.le_u + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (get_local $8) + ) + (block + (set_local $6 + (get_local $7) + ) + (br $while-in102) + ) + ) + ) + (block $do-once107 + (if + (get_local $32) + (block + (br_if $do-once107 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $0) + ) + ) + ) + ) + ) + (if + (i32.and + (i32.gt_s + (get_local $5) + (i32.const 0) + ) + (i32.lt_u + (get_local $7) + (get_local $9) + ) + ) + (loop $while-in110 + (if + (i32.gt_u + (tee_local $6 + (call $_fmt_u + (i32.load + (get_local $7) + ) + (i32.const 0) + (get_local $30) + ) + ) + (get_local $22) + ) + (loop $while-in112 + (i32.store8 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in112 + (i32.gt_u + (get_local $6) + (get_local $22) + ) + ) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $6) + (select + (i32.const 9) + (get_local $5) + (i32.gt_s + (get_local $5) + (i32.const 9) + ) + ) + (get_local $0) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $5) + (i32.const -9) + ) + ) + (if + (i32.and + (i32.gt_s + (get_local $5) + (i32.const 9) + ) + (i32.lt_u + (tee_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (get_local $9) + ) + ) + (block + (set_local $5 + (get_local $6) + ) + (br $while-in110) + ) + (set_local $5 + (get_local $6) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.add + (get_local $5) + (i32.const 9) + ) + (i32.const 9) + (i32.const 0) + ) + ) + (block + (set_local $9 + (select + (get_local $9) + (i32.add + (get_local $12) + (i32.const 4) + ) + (get_local $24) + ) + ) + (if + (i32.gt_s + (get_local $5) + (i32.const -1) + ) + (block + (set_local $17 + (i32.eqz + (get_local $21) + ) + ) + (set_local $6 + (get_local $12) + ) + (set_local $7 + (get_local $5) + ) + (loop $while-in114 + (if + (i32.eq + (tee_local $5 + (call $_fmt_u + (i32.load + (get_local $6) + ) + (i32.const 0) + (get_local $30) + ) + ) + (get_local $30) + ) + (block + (i32.store8 + (get_local $35) + (i32.const 48) + ) + (set_local $5 + (get_local $35) + ) + ) + ) + (block $do-once115 + (if + (i32.eq + (get_local $6) + (get_local $12) + ) + (block + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $5) + (i32.const 1) + (get_local $0) + ) + ) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (br_if $do-once115 + (i32.and + (get_local $17) + (i32.lt_s + (get_local $7) + (i32.const 1) + ) + ) + ) + (br_if $do-once115 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $0) + ) + ) + ) + (block + (br_if $do-once115 + (i32.le_u + (get_local $5) + (get_local $22) + ) + ) + (loop $while-in118 + (i32.store8 + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in118 + (i32.gt_u + (get_local $5) + (get_local $22) + ) + ) + ) + ) + ) + ) + (set_local $8 + (i32.sub + (get_local $43) + (get_local $5) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $5) + (select + (get_local $8) + (get_local $7) + (i32.gt_s + (get_local $7) + (get_local $8) + ) + ) + (get_local $0) + ) + ) + ) + (br_if $while-in114 + (i32.and + (i32.lt_u + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (get_local $9) + ) + (i32.gt_s + (tee_local $7 + (i32.sub + (get_local $7) + (get_local $8) + ) + ) + (i32.const -1) + ) + ) + ) + (set_local $5 + (get_local $7) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.add + (get_local $5) + (i32.const 18) + ) + (i32.const 18) + (i32.const 0) + ) + (br_if $do-once99 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $18) + (i32.sub + (get_local $28) + (get_local $18) + ) + (get_local $0) + ) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $13) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (select + (get_local $14) + (get_local $13) + (i32.lt_s + (get_local $13) + (get_local $14) + ) + ) + ) + (block (result i32) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (tee_local $7 + (i32.add + (tee_local $9 + (select + (i32.const 0) + (get_local $27) + (tee_local $6 + (i32.or + (f64.ne + (get_local $15) + (get_local $15) + ) + (i32.const 0) + ) + ) + ) + ) + (i32.const 3) + ) + ) + (get_local $8) + ) + (if + (i32.eqz + (i32.and + (tee_local $5 + (i32.load + (get_local $0) + ) + ) + (i32.const 32) + ) + ) + (block + (drop + (call $___fwritex + (get_local $31) + (get_local $9) + (get_local $0) + ) + ) + (set_local $5 + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $6 + (select + (select + (i32.const 4135) + (i32.const 4139) + (tee_local $8 + (i32.ne + (i32.and + (get_local $18) + (i32.const 32) + ) + (i32.const 0) + ) + ) + ) + (select + (i32.const 4127) + (i32.const 4131) + (get_local $8) + ) + (get_local $6) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $5) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $6) + (i32.const 3) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (select + (get_local $14) + (get_local $7) + (i32.lt_s + (get_local $7) + (get_local $14) + ) + ) + ) + ) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (set_local $7 + (get_local $5) + ) + (set_local $12 + (get_local $6) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjto$8 + (get_local $26) + ) + ) + (set_local $9 + (i32.and + (get_local $18) + (i32.const 32) + ) + ) + (if + (i32.and + (i32.eqz + (tee_local $8 + (i32.load + (tee_local $5 + (get_local $19) + ) + ) + ) + ) + (i32.eqz + (tee_local $11 + (i32.load offset=4 + (get_local $5) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $26) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$8) + ) + (block + (set_local $5 + (get_local $8) + ) + (set_local $8 + (get_local $26) + ) + (loop $while-in123 + (i32.store8 + (tee_local $8 + (i32.add + (get_local $8) + (i32.const -1) + ) + ) + (i32.or + (i32.load8_u + (i32.add + (i32.and + (get_local $5) + (i32.const 15) + ) + (i32.const 4075) + ) + ) + (get_local $9) + ) + ) + (br_if $while-in123 + (i32.eqz + (i32.and + (i32.eqz + (tee_local $5 + (call $_bitshift64Lshr + (get_local $5) + (get_local $11) + (i32.const 4) + ) + ) + ) + (i32.eqz + (tee_local $11 + (get_global $tempRet0) + ) + ) + ) + ) + ) + (set_local $5 + (get_local $8) + ) + ) + (set_local $8 + (if (result i32) + (i32.or + (i32.eqz + (i32.and + (get_local $7) + (i32.const 8) + ) + ) + (i32.and + (i32.eqz + (i32.load + (tee_local $11 + (get_local $19) + ) + ) + ) + (i32.eqz + (i32.load offset=4 + (get_local $11) + ) + ) + ) + ) + (block (result i32) + (set_local $9 + (i32.const 4091) + ) + (i32.const 0) + ) + (block (result i32) + (set_local $9 + (i32.add + (i32.shr_s + (get_local $18) + (i32.const 4) + ) + (i32.const 4091) + ) + ) + (i32.const 2) + ) + ) + ) + (br $__rjti$8) + ) + ) + ) + (set_local $5 + (call $_fmt_u + (get_local $5) + (get_local $7) + (get_local $26) + ) + ) + (set_local $7 + (get_local $11) + ) + (br $__rjti$8) + ) + (set_local $18 + (i32.eqz + (tee_local $13 + (call $_memchr + (get_local $5) + (i32.const 0) + (get_local $6) + ) + ) + ) + ) + (set_local $7 + (get_local $5) + ) + (set_local $11 + (get_local $8) + ) + (set_local $12 + (select + (get_local $6) + (i32.sub + (get_local $13) + (get_local $5) + ) + (get_local $18) + ) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjto$8 + (select + (i32.add + (get_local $5) + (get_local $6) + ) + (get_local $13) + (get_local $18) + ) + ) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $6 + (i32.load + (get_local $19) + ) + ) + (loop $while-in125 + (block $while-out124 + (br_if $while-out124 + (i32.eqz + (tee_local $9 + (i32.load + (get_local $6) + ) + ) + ) + ) + (br_if $while-out124 + (i32.or + (i32.lt_s + (tee_local $7 + (call $_wctomb + (get_local $36) + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.gt_u + (get_local $7) + (i32.sub + (get_local $8) + (get_local $5) + ) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (br_if $while-in125 + (i32.gt_u + (get_local $8) + (tee_local $5 + (i32.add + (get_local $7) + (get_local $5) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_s + (get_local $7) + (i32.const 0) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $5) + (get_local $11) + ) + (if + (get_local $5) + (block + (set_local $6 + (i32.const 0) + ) + (set_local $7 + (i32.load + (get_local $19) + ) + ) + (loop $while-in127 + (if + (i32.eqz + (tee_local $8 + (i32.load + (get_local $7) + ) + ) + ) + (block + (set_local $7 + (get_local $5) + ) + (br $__rjti$7) + ) + ) + (if + (i32.gt_s + (tee_local $6 + (i32.add + (tee_local $8 + (call $_wctomb + (get_local $36) + (get_local $8) + ) + ) + (get_local $6) + ) + ) + (get_local $5) + ) + (block + (set_local $7 + (get_local $5) + ) + (br $__rjti$7) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $36) + (get_local $8) + (get_local $0) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (br_if $while-in127 + (i32.lt_u + (get_local $6) + (get_local $5) + ) + ) + (set_local $7 + (get_local $5) + ) + ) + ) + (set_local $7 + (i32.const 0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (select + (get_local $14) + (get_local $7) + (i32.gt_s + (get_local $14) + (get_local $7) + ) + ) + ) + (br $label$continue$L1) + ) + (set_local $11 + (select + (i32.and + (get_local $7) + (i32.const -65537) + ) + (get_local $7) + (i32.gt_s + (get_local $6) + (i32.const -1) + ) + ) + ) + (set_local $12 + (if (result i32) + (i32.or + (get_local $6) + (tee_local $12 + (i32.or + (i32.ne + (i32.load + (tee_local $7 + (get_local $19) + ) + ) + (i32.const 0) + ) + (i32.ne + (i32.load offset=4 + (get_local $7) + ) + (i32.const 0) + ) + ) + ) + ) + (block (result i32) + (set_local $7 + (get_local $5) + ) + (select + (get_local $6) + (tee_local $5 + (i32.add + (i32.xor + (i32.and + (get_local $12) + (i32.const 1) + ) + (i32.const 1) + ) + (i32.sub + (get_local $39) + (get_local $5) + ) + ) + ) + (i32.gt_s + (get_local $6) + (get_local $5) + ) + ) + ) + (block (result i32) + (set_local $7 + (get_local $26) + ) + (i32.const 0) + ) + ) + ) + (get_local $26) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (tee_local $6 + (select + (tee_local $5 + (i32.add + (get_local $8) + (tee_local $12 + (select + (tee_local $13 + (i32.sub + (get_local $5) + (get_local $7) + ) + ) + (get_local $12) + (i32.lt_s + (get_local $12) + (get_local $13) + ) + ) + ) + ) + ) + (get_local $14) + (i32.lt_s + (get_local $14) + (get_local $5) + ) + ) + ) + (get_local $5) + (get_local $11) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $9) + (get_local $8) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $6) + (get_local $5) + (i32.xor + (get_local $11) + (i32.const 65536) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $12) + (get_local $13) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $7) + (get_local $13) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $6) + (get_local $5) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $6) + ) + (br $label$continue$L1) + ) + ) + (br $label$break$L343) + ) + (if + (i32.eqz + (get_local $0) + ) + (if + (get_local $1) + (block + (set_local $0 + (i32.const 1) + ) + (loop $while-in130 + (if + (tee_local $1 + (i32.load + (i32.add + (get_local $4) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + ) + ) + (block + (call $_pop_arg_336 + (i32.add + (get_local $3) + (i32.shl + (get_local $0) + (i32.const 3) + ) + ) + (get_local $1) + (get_local $2) + ) + (br_if $while-in130 + (i32.lt_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.const 10) + ) + ) + (set_local $16 + (i32.const 1) + ) + (br $label$break$L343) + ) + ) + ) + (if + (i32.lt_s + (get_local $0) + (i32.const 10) + ) + (loop $while-in132 + (if + (i32.load + (i32.add + (get_local $4) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L343) + ) + ) + (br_if $while-in132 + (i32.lt_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.const 10) + ) + ) + (set_local $16 + (i32.const 1) + ) + ) + (set_local $16 + (i32.const 1) + ) + ) + ) + (set_local $16 + (i32.const 0) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $25) + ) + (get_local $16) + ) + (func $_pop_arg_336 (; 51 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 f64) + (local $5 i32) + (block $label$break$L1 + (if + (i32.le_u + (get_local $1) + (i32.const 20) + ) + (block $switch-default + (block $switch-case9 + (block $switch-case8 + (block $switch-case7 + (block $switch-case6 + (block $switch-case5 + (block $switch-case4 + (block $switch-case3 + (block $switch-case2 + (block $switch-case1 + (block $switch-case + (br_table $switch-case $switch-case1 $switch-case2 $switch-case3 $switch-case4 $switch-case5 $switch-case6 $switch-case7 $switch-case8 $switch-case9 $switch-default + (i32.sub + (get_local $1) + (i32.const 9) + ) + ) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + (br $label$break$L1) + ) + (set_local $1 + (i32.load + (tee_local $3 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $1) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $5 + (i32.load + (tee_local $3 + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + ) + (set_local $3 + (i32.load offset=4 + (get_local $3) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (i32.store + (get_local $0) + (get_local $5) + ) + (i32.store offset=4 + (get_local $0) + (get_local $3) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (tee_local $1 + (i32.shr_s + (i32.shl + (i32.and + (get_local $3) + (i32.const 65535) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $3) + (i32.const 65535) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (tee_local $1 + (i32.shr_s + (i32.shl + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $4 + (f64.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (f64.store + (get_local $0) + (get_local $4) + ) + (br $label$break$L1) + ) + (set_local $4 + (f64.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (f64.store + (get_local $0) + (get_local $4) + ) + ) + ) + ) + ) + (func $_fmt_u (; 52 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (if + (i32.or + (i32.gt_u + (get_local $1) + (i32.const 0) + ) + (i32.and + (i32.eqz + (get_local $1) + ) + (i32.gt_u + (get_local $0) + (i32.const -1) + ) + ) + ) + (loop $while-in + (i32.store8 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.or + (tee_local $3 + (call $___uremdi3 + (get_local $0) + (get_local $1) + (i32.const 10) + (i32.const 0) + ) + ) + (i32.const 48) + ) + ) + (set_local $3 + (call $___udivdi3 + (get_local $0) + (get_local $1) + (i32.const 10) + (i32.const 0) + ) + ) + (set_local $4 + (get_global $tempRet0) + ) + (if + (i32.or + (i32.gt_u + (get_local $1) + (i32.const 9) + ) + (i32.and + (i32.eq + (get_local $1) + (i32.const 9) + ) + (i32.gt_u + (get_local $0) + (i32.const -1) + ) + ) + ) + (block + (set_local $0 + (get_local $3) + ) + (set_local $1 + (get_local $4) + ) + (br $while-in) + ) + (set_local $0 + (get_local $3) + ) + ) + ) + ) + (if + (get_local $0) + (loop $while-in1 + (i32.store8 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.or + (call $i32u-rem + (get_local $0) + (i32.const 10) + ) + (i32.const 48) + ) + ) + (set_local $1 + (call $i32u-div + (get_local $0) + (i32.const 10) + ) + ) + (if + (i32.ge_u + (get_local $0) + (i32.const 10) + ) + (block + (set_local $0 + (get_local $1) + ) + (br $while-in1) + ) + ) + ) + ) + (get_local $2) + ) + (func $_pad (; 53 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 256) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $6 + (get_local $7) + ) + (block $do-once + (if + (i32.and + (i32.gt_s + (get_local $2) + (get_local $3) + ) + (i32.eqz + (i32.and + (get_local $4) + (i32.const 73728) + ) + ) + ) + (block + (drop + (call $_memset + (get_local $6) + (get_local $1) + (select + (i32.const 256) + (tee_local $5 + (i32.sub + (get_local $2) + (get_local $3) + ) + ) + (i32.gt_u + (get_local $5) + (i32.const 256) + ) + ) + ) + ) + (set_local $4 + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.const 32) + ) + ) + ) + (if + (i32.gt_u + (get_local $5) + (i32.const 255) + ) + (block + (loop $while-in + (if + (get_local $4) + (block + (drop + (call $___fwritex + (get_local $6) + (i32.const 256) + (get_local $0) + ) + ) + (set_local $1 + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $4 + (i32.eqz + (i32.and + (get_local $1) + (i32.const 32) + ) + ) + ) + (br_if $while-in + (i32.gt_u + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -256) + ) + ) + (i32.const 255) + ) + ) + ) + (br_if $do-once + (i32.eqz + (get_local $4) + ) + ) + (set_local $5 + (i32.and + (i32.sub + (get_local $2) + (get_local $3) + ) + (i32.const 255) + ) + ) + ) + (br_if $do-once + (i32.eqz + (get_local $4) + ) + ) + ) + (drop + (call $___fwritex + (get_local $6) + (get_local $5) + (get_local $0) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + ) + (func $_malloc (; 54 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (block $folding-inner0 + (block $do-once + (if + (i32.lt_u + (get_local $0) + (i32.const 245) + ) + (block + (if + (i32.and + (tee_local $5 + (i32.shr_u + (tee_local $11 + (i32.load + (i32.const 176) + ) + ) + (tee_local $13 + (i32.shr_u + (tee_local $4 + (select + (i32.const 16) + (i32.and + (i32.add + (get_local $0) + (i32.const 11) + ) + (i32.const -8) + ) + (i32.lt_u + (get_local $0) + (i32.const 11) + ) + ) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 3) + ) + (block + (set_local $10 + (i32.load + (tee_local $1 + (i32.add + (tee_local $7 + (i32.load + (tee_local $3 + (i32.add + (tee_local $2 + (i32.add + (i32.shl + (tee_local $4 + (i32.add + (i32.xor + (i32.and + (get_local $5) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $13) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $2) + (get_local $10) + ) + (i32.store + (i32.const 176) + (i32.and + (get_local $11) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $4) + ) + (i32.const -1) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + ) + (get_local $7) + ) + (block + (i32.store + (get_local $0) + (get_local $2) + ) + (i32.store + (get_local $3) + (get_local $10) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=4 + (get_local $7) + (i32.or + (tee_local $0 + (i32.shl + (get_local $4) + (i32.const 3) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $7) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + (return + (get_local $1) + ) + ) + ) + (if + (i32.gt_u + (get_local $4) + (tee_local $0 + (i32.load + (i32.const 184) + ) + ) + ) + (block + (if + (get_local $5) + (block + (set_local $10 + (i32.and + (i32.shr_u + (tee_local $3 + (i32.add + (i32.and + (tee_local $3 + (i32.and + (i32.shl + (get_local $5) + (get_local $13) + ) + (i32.or + (tee_local $3 + (i32.shl + (i32.const 2) + (get_local $13) + ) + ) + (i32.sub + (i32.const 0) + (get_local $3) + ) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $3) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $9 + (i32.load + (tee_local $7 + (i32.add + (tee_local $12 + (i32.load + (tee_local $3 + (i32.add + (tee_local $10 + (i32.add + (i32.shl + (tee_local $5 + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $3) + (get_local $10) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $10) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $10) + (get_local $9) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (get_local $11) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $8 + (get_local $0) + ) + ) + (block + (if + (i32.lt_u + (get_local $9) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $9) + (i32.const 12) + ) + ) + ) + (get_local $12) + ) + (block + (i32.store + (get_local $0) + (get_local $10) + ) + (i32.store + (get_local $3) + (get_local $9) + ) + (set_local $8 + (i32.load + (i32.const 184) + ) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.or + (get_local $4) + (i32.const 3) + ) + ) + (i32.store offset=4 + (tee_local $10 + (i32.add + (get_local $12) + (get_local $4) + ) + ) + (i32.or + (tee_local $5 + (i32.sub + (i32.shl + (get_local $5) + (i32.const 3) + ) + (get_local $4) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $10) + (get_local $5) + ) + (get_local $5) + ) + (if + (get_local $8) + (block + (set_local $12 + (i32.load + (i32.const 196) + ) + ) + (set_local $4 + (i32.add + (i32.shl + (tee_local $0 + (i32.shr_u + (get_local $8) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $3 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $2 + (get_local $3) + ) + (set_local $1 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $3) + (get_local $0) + ) + ) + (set_local $2 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (set_local $1 + (get_local $4) + ) + ) + ) + (i32.store + (get_local $2) + (get_local $12) + ) + (i32.store offset=12 + (get_local $1) + (get_local $12) + ) + (i32.store offset=8 + (get_local $12) + (get_local $1) + ) + (i32.store offset=12 + (get_local $12) + (get_local $4) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $5) + ) + (i32.store + (i32.const 196) + (get_local $10) + ) + (return + (get_local $7) + ) + ) + ) + (if + (tee_local $0 + (i32.load + (i32.const 180) + ) + ) + (block + (set_local $2 + (i32.and + (i32.shr_u + (tee_local $0 + (i32.add + (i32.and + (get_local $0) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $7 + (i32.sub + (i32.and + (i32.load offset=4 + (tee_local $0 + (i32.load offset=480 + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $0) + (get_local $2) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $2) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const -8) + ) + (get_local $4) + ) + ) + (set_local $1 + (get_local $0) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (tee_local $0 + (i32.load offset=16 + (get_local $1) + ) + ) + ) + (if + (i32.eqz + (tee_local $0 + (i32.load offset=20 + (get_local $1) + ) + ) + ) + (block + (set_local $10 + (get_local $7) + ) + (set_local $5 + (get_local $2) + ) + (br $while-out) + ) + ) + ) + (set_local $10 + (i32.lt_u + (tee_local $1 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $4) + ) + ) + (get_local $7) + ) + ) + (set_local $7 + (select + (get_local $1) + (get_local $7) + (get_local $10) + ) + ) + (set_local $1 + (get_local $0) + ) + (set_local $2 + (select + (get_local $0) + (get_local $2) + (get_local $10) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (get_local $5) + (tee_local $12 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $5) + (tee_local $11 + (i32.add + (get_local $5) + (get_local $4) + ) + ) + ) + (call $_abort) + ) + (set_local $8 + (i32.load offset=24 + (get_local $5) + ) + ) + (block $do-once4 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $5) + ) + ) + (get_local $5) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $5) + (i32.const 20) + ) + ) + ) + ) + ) + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + ) + ) + (block + (set_local $9 + (i32.const 0) + ) + (br $do-once4) + ) + ) + ) + (loop $while-in7 + (if + (tee_local $2 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $0 + (get_local $7) + ) + (br $while-in7) + ) + ) + (if + (tee_local $2 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $0 + (get_local $7) + ) + (br $while-in7) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $12) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $9 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $7 + (i32.load offset=8 + (get_local $5) + ) + ) + (get_local $12) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $2 + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + ) + (get_local $5) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $5) + ) + (block + (i32.store + (get_local $2) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $7) + ) + (set_local $9 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once8 + (if + (get_local $8) + (block + (if + (i32.eq + (get_local $5) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $5) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $9) + ) + (if + (i32.eqz + (get_local $9) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $8) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + ) + (get_local $5) + ) + (i32.store + (get_local $0) + (get_local $9) + ) + (i32.store offset=20 + (get_local $8) + (get_local $9) + ) + ) + (br_if $do-once8 + (i32.eqz + (get_local $9) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $9) + (tee_local $0 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $9) + (get_local $8) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $5) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $0) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $9) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $9) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=20 + (get_local $5) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $9) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $9) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $10) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $5) + (i32.or + (tee_local $0 + (i32.add + (get_local $10) + (get_local $4) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $5) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $5) + (i32.or + (get_local $4) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $11) + (i32.or + (get_local $10) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $11) + (get_local $10) + ) + (get_local $10) + ) + (if + (tee_local $0 + (i32.load + (i32.const 184) + ) + ) + (block + (set_local $4 + (i32.load + (i32.const 196) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $0 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $6 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $6 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (set_local $3 + (get_local $2) + ) + ) + ) + (i32.store + (get_local $6) + (get_local $4) + ) + (i32.store offset=12 + (get_local $3) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $3) + ) + (i32.store offset=12 + (get_local $4) + (get_local $2) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $10) + ) + (i32.store + (i32.const 196) + (get_local $11) + ) + ) + ) + (return + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (if + (i32.gt_u + (get_local $0) + (i32.const -65) + ) + (set_local $0 + (i32.const -1) + ) + (block + (set_local $2 + (i32.and + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 11) + ) + ) + (i32.const -8) + ) + ) + (if + (tee_local $18 + (i32.load + (i32.const 180) + ) + ) + (block + (set_local $14 + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $0) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $2) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $2) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $3 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $3) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (set_local $3 + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + (block $__rjto$3 + (block $__rjti$3 + (if + (tee_local $0 + (i32.load offset=480 + (i32.shl + (get_local $14) + (i32.const 2) + ) + ) + ) + (block + (set_local $6 + (i32.const 0) + ) + (set_local $8 + (i32.shl + (get_local $2) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $14) + (i32.const 1) + ) + ) + (i32.eq + (get_local $14) + (i32.const 31) + ) + ) + ) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in14 + (if + (i32.lt_u + (tee_local $4 + (i32.sub + (tee_local $9 + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + ) + (get_local $2) + ) + ) + (get_local $3) + ) + (if + (i32.eq + (get_local $9) + (get_local $2) + ) + (block + (set_local $1 + (get_local $4) + ) + (set_local $3 + (get_local $0) + ) + (br $__rjti$3) + ) + (block + (set_local $3 + (get_local $4) + ) + (set_local $1 + (get_local $0) + ) + ) + ) + ) + (set_local $0 + (select + (get_local $6) + (tee_local $4 + (i32.load offset=20 + (get_local $0) + ) + ) + (i32.or + (i32.eqz + (get_local $4) + ) + (i32.eq + (get_local $4) + (tee_local $9 + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $8) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $4 + (i32.shl + (get_local $8) + (i32.xor + (tee_local $6 + (i32.eqz + (get_local $9) + ) + ) + (i32.const 1) + ) + ) + ) + (if + (get_local $6) + (block + (set_local $4 + (get_local $0) + ) + (set_local $0 + (get_local $1) + ) + ) + (block + (set_local $6 + (get_local $0) + ) + (set_local $8 + (get_local $4) + ) + (set_local $0 + (get_local $9) + ) + (br $while-in14) + ) + ) + ) + ) + (block + (set_local $4 + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + (if + (i32.and + (i32.eqz + (get_local $4) + ) + (i32.eqz + (get_local $0) + ) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.and + (get_local $18) + (i32.or + (tee_local $1 + (i32.shl + (i32.const 2) + (get_local $14) + ) + ) + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $2) + ) + (br $do-once) + ) + ) + (set_local $9 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.add + (i32.and + (get_local $1) + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $4 + (i32.load offset=480 + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $1) + (get_local $9) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $9) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (if + (get_local $4) + (block + (set_local $1 + (get_local $3) + ) + (set_local $3 + (get_local $4) + ) + (br $__rjti$3) + ) + (set_local $4 + (get_local $0) + ) + ) + (br $__rjto$3) + ) + (loop $while-in16 + (set_local $9 + (i32.lt_u + (tee_local $4 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const -8) + ) + (get_local $2) + ) + ) + (get_local $1) + ) + ) + (set_local $1 + (select + (get_local $4) + (get_local $1) + (get_local $9) + ) + ) + (set_local $0 + (select + (get_local $3) + (get_local $0) + (get_local $9) + ) + ) + (if + (tee_local $4 + (i32.load offset=16 + (get_local $3) + ) + ) + (block + (set_local $3 + (get_local $4) + ) + (br $while-in16) + ) + ) + (br_if $while-in16 + (tee_local $3 + (i32.load offset=20 + (get_local $3) + ) + ) + ) + (set_local $3 + (get_local $1) + ) + (set_local $4 + (get_local $0) + ) + ) + ) + (if + (get_local $4) + (if + (i32.lt_u + (get_local $3) + (i32.sub + (i32.load + (i32.const 184) + ) + (get_local $2) + ) + ) + (block + (if + (i32.lt_u + (get_local $4) + (tee_local $12 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $4) + (tee_local $6 + (i32.add + (get_local $4) + (get_local $2) + ) + ) + ) + (call $_abort) + ) + (set_local $9 + (i32.load offset=24 + (get_local $4) + ) + ) + (block $do-once17 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $4) + ) + ) + (get_local $4) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + ) + ) + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 16) + ) + ) + ) + ) + ) + (block + (set_local $11 + (i32.const 0) + ) + (br $do-once17) + ) + ) + ) + (loop $while-in20 + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $7) + ) + (set_local $0 + (get_local $10) + ) + (br $while-in20) + ) + ) + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $7) + ) + (set_local $0 + (get_local $10) + ) + (br $while-in20) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $12) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $11 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $10 + (i32.load offset=8 + (get_local $4) + ) + ) + (get_local $12) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $7 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + ) + (get_local $4) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $4) + ) + (block + (i32.store + (get_local $7) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $10) + ) + (set_local $11 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once21 + (if + (get_local $9) + (block + (if + (i32.eq + (get_local $4) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $4) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $11) + ) + (if + (i32.eqz + (get_local $11) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $9) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $9) + (i32.const 16) + ) + ) + ) + (get_local $4) + ) + (i32.store + (get_local $0) + (get_local $11) + ) + (i32.store offset=20 + (get_local $9) + (get_local $11) + ) + ) + (br_if $do-once21 + (i32.eqz + (get_local $11) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $11) + (tee_local $0 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $11) + (get_local $9) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $4) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $0) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $11) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $11) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=20 + (get_local $4) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $11) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $11) + ) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.lt_u + (get_local $3) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $4) + (i32.or + (tee_local $0 + (i32.add + (get_local $3) + (get_local $2) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $4) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $2) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $6) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $6) + (get_local $3) + ) + (get_local $3) + ) + (set_local $0 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $3) + (i32.const 256) + ) + (block + (set_local $3 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $13 + (get_local $1) + ) + (set_local $5 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $13 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $5 + (get_local $3) + ) + ) + ) + (i32.store + (get_local $13) + (get_local $6) + ) + (i32.store offset=12 + (get_local $5) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $5) + ) + (i32.store offset=12 + (get_local $6) + (get_local $3) + ) + (br $do-once25) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $7 + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $3) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $3) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $2 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $2) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $6) + (get_local $7) + ) + (i32.store offset=4 + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (i32.const 180) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $7) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $2) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $2) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once25) + ) + ) + (set_local $7 + (i32.shl + (get_local $3) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $7) + (i32.const 1) + ) + ) + (i32.eq + (get_local $7) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $2) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (loop $while-in28 + (br_if $__rjti$1 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $2 + (i32.shl + (get_local $7) + (i32.const 1) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $7 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $7) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $2) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in28) + ) + ) + ) + (if + (i32.lt_u + (get_local $7) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $7) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $0) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once25) + ) + ) + (br $__rjto$1) + ) + (if + (i32.and + (i32.ge_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $2) + (get_local $6) + ) + (i32.store + (get_local $3) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $2) + ) + (i32.store offset=12 + (get_local $6) + (get_local $0) + ) + (i32.store offset=24 + (get_local $6) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (return + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (set_local $0 + (get_local $2) + ) + ) + (set_local $0 + (get_local $2) + ) + ) + ) + (set_local $0 + (get_local $2) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (tee_local $1 + (i32.load + (i32.const 184) + ) + ) + (get_local $0) + ) + (block + (set_local $2 + (i32.load + (i32.const 196) + ) + ) + (if + (i32.gt_u + (tee_local $3 + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + (i32.const 15) + ) + (block + (i32.store + (i32.const 196) + (tee_local $1 + (i32.add + (get_local $2) + (get_local $0) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $3) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $3) + ) + (get_local $3) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + ) + (block + (i32.store + (i32.const 184) + (i32.const 0) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $1) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $2) + (get_local $1) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + ) + (return + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (br_if $folding-inner0 + (i32.gt_u + (tee_local $1 + (i32.load + (i32.const 188) + ) + ) + (get_local $0) + ) + ) + (if + (i32.eqz + (i32.load + (i32.const 648) + ) + ) + (if + (i32.and + (i32.add + (tee_local $1 + (call $_sysconf + (i32.const 30) + ) + ) + (i32.const -1) + ) + (get_local $1) + ) + (call $_abort) + (block + (i32.store + (i32.const 656) + (get_local $1) + ) + (i32.store + (i32.const 652) + (get_local $1) + ) + (i32.store + (i32.const 660) + (i32.const -1) + ) + (i32.store + (i32.const 664) + (i32.const -1) + ) + (i32.store + (i32.const 668) + (i32.const 0) + ) + (i32.store + (i32.const 620) + (i32.const 0) + ) + (i32.store + (i32.const 648) + (i32.xor + (i32.and + (call $_time + (i32.const 0) + ) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + ) + ) + ) + (if + (i32.le_u + (tee_local $5 + (i32.and + (tee_local $6 + (i32.add + (tee_local $1 + (i32.load + (i32.const 656) + ) + ) + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 47) + ) + ) + ) + ) + (tee_local $9 + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + ) + ) + (get_local $0) + ) + (return + (i32.const 0) + ) + ) + (if + (tee_local $2 + (i32.load + (i32.const 616) + ) + ) + (if + (i32.or + (i32.le_u + (tee_local $1 + (i32.add + (tee_local $3 + (i32.load + (i32.const 608) + ) + ) + (get_local $5) + ) + ) + (get_local $3) + ) + (i32.gt_u + (get_local $1) + (get_local $2) + ) + ) + (return + (i32.const 0) + ) + ) + ) + (set_local $11 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + (block $__rjto$13 + (block $__rjti$13 + (if + (i32.eqz + (i32.and + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + ) + (block + (block $label$break$L279 + (block $__rjti$5 + (block $__rjti$4 + (br_if $__rjti$4 + (i32.eqz + (tee_local $4 + (i32.load + (i32.const 200) + ) + ) + ) + ) + (set_local $1 + (i32.const 624) + ) + (loop $while-in34 + (block $while-out33 + (if + (i32.le_u + (tee_local $3 + (i32.load + (get_local $1) + ) + ) + (get_local $4) + ) + (if + (i32.gt_u + (i32.add + (get_local $3) + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + ) + ) + (get_local $4) + ) + (block + (set_local $4 + (get_local $1) + ) + (br $while-out33) + ) + ) + ) + (br_if $while-in34 + (tee_local $1 + (i32.load offset=8 + (get_local $1) + ) + ) + ) + (br $__rjti$4) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.and + (i32.sub + (get_local $6) + (i32.load + (i32.const 188) + ) + ) + (get_local $9) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (tee_local $1 + (call $_sbrk + (get_local $3) + ) + ) + (i32.add + (i32.load + (get_local $4) + ) + (i32.load + (get_local $2) + ) + ) + ) + (br_if $__rjti$13 + (i32.ne + (get_local $1) + (i32.const -1) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (br $__rjti$5) + ) + ) + ) + (br $label$break$L279) + ) + (if + (i32.ne + (tee_local $1 + (call $_sbrk + (i32.const 0) + ) + ) + (i32.const -1) + ) + (block + (set_local $3 + (if (result i32) + (i32.and + (tee_local $2 + (i32.add + (tee_local $4 + (i32.load + (i32.const 652) + ) + ) + (i32.const -1) + ) + ) + (tee_local $3 + (get_local $1) + ) + ) + (i32.add + (i32.sub + (get_local $5) + (get_local $3) + ) + (i32.and + (i32.add + (get_local $2) + (get_local $3) + ) + (i32.sub + (i32.const 0) + (get_local $4) + ) + ) + ) + (get_local $5) + ) + ) + (set_local $9 + (i32.add + (tee_local $4 + (i32.load + (i32.const 608) + ) + ) + (get_local $3) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $3) + (get_local $0) + ) + (i32.lt_u + (get_local $3) + (i32.const 2147483647) + ) + ) + (block + (if + (tee_local $2 + (i32.load + (i32.const 616) + ) + ) + (br_if $label$break$L279 + (i32.or + (i32.le_u + (get_local $9) + (get_local $4) + ) + (i32.gt_u + (get_local $9) + (get_local $2) + ) + ) + ) + ) + (br_if $__rjti$13 + (i32.eq + (tee_local $2 + (call $_sbrk + (get_local $3) + ) + ) + (get_local $1) + ) + ) + (br $__rjti$5) + ) + ) + ) + ) + (br $label$break$L279) + ) + (set_local $1 + (get_local $3) + ) + (set_local $4 + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $11) + (get_local $1) + ) + (i32.and + (i32.lt_u + (get_local $1) + (i32.const 2147483647) + ) + (i32.ne + (get_local $2) + (i32.const -1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.and + (i32.add + (i32.sub + (get_local $8) + (get_local $1) + ) + (tee_local $3 + (i32.load + (i32.const 656) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $3) + ) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (call $_sbrk + (get_local $3) + ) + (i32.const -1) + ) + (block + (drop + (call $_sbrk + (get_local $4) + ) + ) + (br $label$break$L279) + ) + (set_local $3 + (i32.add + (get_local $3) + (get_local $1) + ) + ) + ) + (set_local $3 + (get_local $1) + ) + ) + (set_local $3 + (get_local $1) + ) + ) + (if + (i32.ne + (get_local $2) + (i32.const -1) + ) + (block + (set_local $1 + (get_local $2) + ) + (br $__rjti$13) + ) + ) + ) + (i32.store + (i32.const 620) + (i32.or + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.const 2147483647) + ) + (if + (i32.and + (i32.lt_u + (tee_local $1 + (call $_sbrk + (get_local $5) + ) + ) + (tee_local $3 + (call $_sbrk + (i32.const 0) + ) + ) + ) + (i32.and + (i32.ne + (get_local $1) + (i32.const -1) + ) + (i32.ne + (get_local $3) + (i32.const -1) + ) + ) + ) + (br_if $__rjti$13 + (i32.gt_u + (tee_local $3 + (i32.sub + (get_local $3) + (get_local $1) + ) + ) + (i32.add + (get_local $0) + (i32.const 40) + ) + ) + ) + ) + ) + (br $__rjto$13) + ) + (i32.store + (i32.const 608) + (tee_local $2 + (i32.add + (i32.load + (i32.const 608) + ) + (get_local $3) + ) + ) + ) + (if + (i32.gt_u + (get_local $2) + (i32.load + (i32.const 612) + ) + ) + (i32.store + (i32.const 612) + (get_local $2) + ) + ) + (block $do-once40 + (if + (tee_local $6 + (i32.load + (i32.const 200) + ) + ) + (block + (set_local $2 + (i32.const 624) + ) + (block $__rjto$10 + (block $__rjti$10 + (loop $while-in45 + (br_if $__rjti$10 + (i32.eq + (get_local $1) + (i32.add + (tee_local $11 + (i32.load + (get_local $2) + ) + ) + (tee_local $5 + (i32.load + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + ) + ) + ) + ) + ) + (br_if $while-in45 + (tee_local $2 + (i32.load offset=8 + (get_local $2) + ) + ) + ) + ) + (br $__rjto$10) + ) + (if + (i32.eqz + (i32.and + (i32.load offset=12 + (get_local $2) + ) + (i32.const 8) + ) + ) + (if + (i32.and + (i32.lt_u + (get_local $6) + (get_local $1) + ) + (i32.ge_u + (get_local $6) + (get_local $11) + ) + ) + (block + (i32.store + (get_local $4) + (i32.add + (get_local $5) + (get_local $3) + ) + ) + (set_local $2 + (i32.add + (get_local $6) + (tee_local $1 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + ) + (set_local $1 + (i32.add + (i32.sub + (get_local $3) + (get_local $1) + ) + (i32.load + (i32.const 188) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $2) + ) + (i32.store + (i32.const 188) + (get_local $1) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $1) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $2) + (get_local $1) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (br $do-once40) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (tee_local $4 + (i32.load + (i32.const 192) + ) + ) + ) + (block + (i32.store + (i32.const 192) + (get_local $1) + ) + (set_local $4 + (get_local $1) + ) + ) + ) + (set_local $11 + (i32.add + (get_local $1) + (get_local $3) + ) + ) + (set_local $2 + (i32.const 624) + ) + (block $__rjto$11 + (block $__rjti$11 + (loop $while-in47 + (if + (i32.eq + (i32.load + (get_local $2) + ) + (get_local $11) + ) + (block + (set_local $5 + (get_local $2) + ) + (br $__rjti$11) + ) + ) + (br_if $while-in47 + (tee_local $2 + (i32.load offset=8 + (get_local $2) + ) + ) + ) + (set_local $4 + (i32.const 624) + ) + ) + (br $__rjto$11) + ) + (if + (i32.and + (i32.load offset=12 + (get_local $2) + ) + (i32.const 8) + ) + (set_local $4 + (i32.const 624) + ) + (block + (i32.store + (get_local $5) + (get_local $1) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (i32.add + (i32.load + (get_local $2) + ) + (get_local $3) + ) + ) + (set_local $8 + (i32.add + (tee_local $9 + (i32.add + (get_local $1) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + (get_local $0) + ) + ) + (set_local $7 + (i32.sub + (i32.sub + (tee_local $5 + (i32.add + (get_local $11) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + (get_local $9) + ) + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $9) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + (block $do-once48 + (if + (i32.eq + (get_local $5) + (get_local $6) + ) + (block + (i32.store + (i32.const 188) + (tee_local $0 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $7) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $8) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + ) + (block + (if + (i32.eq + (get_local $5) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (tee_local $0 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $7) + ) + ) + ) + (i32.store + (i32.const 196) + (get_local $8) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $8) + (get_local $0) + ) + (get_local $0) + ) + (br $do-once48) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (tee_local $0 + (if (result i32) + (i32.eq + (i32.and + (tee_local $0 + (i32.load offset=4 + (get_local $5) + ) + ) + (i32.const 3) + ) + (i32.const 1) + ) + (block (result i32) + (set_local $11 + (i32.and + (get_local $0) + (i32.const -8) + ) + ) + (set_local $1 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (block $label$break$L331 + (if + (i32.lt_u + (get_local $0) + (i32.const 256) + ) + (block + (set_local $2 + (i32.load offset=12 + (get_local $5) + ) + ) + (block $do-once51 + (if + (i32.ne + (tee_local $3 + (i32.load offset=8 + (get_local $5) + ) + ) + (tee_local $0 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $3) + (get_local $4) + ) + (call $_abort) + ) + (br_if $do-once51 + (i32.eq + (i32.load offset=12 + (get_local $3) + ) + (get_local $5) + ) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $2) + (get_local $3) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + ) + (block $do-once53 + (if + (i32.eq + (get_local $2) + (get_local $0) + ) + (set_local $15 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $2) + (get_local $4) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + (get_local $5) + ) + (block + (set_local $15 + (get_local $0) + ) + (br $do-once53) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $3) + (get_local $2) + ) + (i32.store + (get_local $15) + (get_local $3) + ) + ) + (block + (set_local $6 + (i32.load offset=24 + (get_local $5) + ) + ) + (block $do-once55 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $5) + ) + ) + (get_local $5) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (tee_local $3 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load + (get_local $3) + ) + ) + (set_local $0 + (get_local $3) + ) + (block + (set_local $12 + (i32.const 0) + ) + (br $do-once55) + ) + ) + ) + (loop $while-in58 + (if + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $3) + ) + (set_local $0 + (get_local $2) + ) + (br $while-in58) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $3) + ) + (set_local $0 + (get_local $2) + ) + (br $while-in58) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $4) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $12 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $2 + (i32.load offset=8 + (get_local $5) + ) + ) + (get_local $4) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 12) + ) + ) + ) + (get_local $5) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $5) + ) + (block + (i32.store + (get_local $3) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (set_local $12 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (get_local $6) + ) + ) + (block $do-once59 + (if + (i32.eq + (get_local $5) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $5) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $12) + ) + (br_if $do-once59 + (get_local $12) + ) + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $5) + ) + (i32.store + (get_local $0) + (get_local $12) + ) + (i32.store offset=20 + (get_local $6) + (get_local $12) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (get_local $12) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $12) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $12) + (get_local $6) + ) + (if + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $3) + (get_local $1) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $12) + (get_local $3) + ) + (i32.store offset=24 + (get_local $3) + (get_local $12) + ) + ) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (tee_local $0 + (i32.load offset=4 + (get_local $0) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $12) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $12) + ) + ) + ) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $11) + (get_local $7) + ) + ) + (i32.add + (get_local $5) + (get_local $11) + ) + ) + (get_local $5) + ) + ) + (i32.const 4) + ) + ) + (i32.and + (i32.load + (get_local $0) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $7) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $8) + (get_local $7) + ) + (get_local $7) + ) + (set_local $0 + (i32.shr_u + (get_local $7) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $7) + (i32.const 256) + ) + (block + (set_local $3 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (block $do-once63 + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (block + (if + (i32.ge_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (block + (set_local $16 + (get_local $1) + ) + (set_local $10 + (get_local $0) + ) + (br $do-once63) + ) + ) + (call $_abort) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $16 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $10 + (get_local $3) + ) + ) + ) + ) + (i32.store + (get_local $16) + (get_local $8) + ) + (i32.store offset=12 + (get_local $10) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $10) + ) + (i32.store offset=12 + (get_local $8) + (get_local $3) + ) + (br $do-once48) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (tee_local $2 + (block $do-once65 (result i32) + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $7) + (i32.const 8) + ) + ) + (block (result i32) + (drop + (br_if $do-once65 + (i32.const 31) + (i32.gt_u + (get_local $7) + (i32.const 16777215) + ) + ) + ) + (i32.or + (i32.and + (i32.shr_u + (get_local $7) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $3 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $3) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $8) + (get_local $2) + ) + (i32.store offset=4 + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (i32.const 180) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $2) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $3) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $3) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + (br $do-once48) + ) + ) + (set_local $2 + (i32.shl + (get_local $7) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $2) + (i32.const 1) + ) + ) + (i32.eq + (get_local $2) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $3) + ) + ) + (block $__rjto$7 + (block $__rjti$7 + (loop $while-in68 + (br_if $__rjti$7 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $7) + ) + ) + (set_local $3 + (i32.shl + (get_local $2) + (i32.const 1) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $2) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $3) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in68) + ) + ) + ) + (if + (i32.lt_u + (get_local $2) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $2) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $0) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + (br $do-once48) + ) + ) + (br $__rjto$7) + ) + (if + (i32.and + (i32.ge_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $2) + (get_local $8) + ) + (i32.store + (get_local $3) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $2) + ) + (i32.store offset=12 + (get_local $8) + (get_local $0) + ) + (i32.store offset=24 + (get_local $8) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (return + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + ) + ) + ) + (loop $while-in70 + (block $while-out69 + (if + (i32.le_u + (tee_local $2 + (i32.load + (get_local $4) + ) + ) + (get_local $6) + ) + (br_if $while-out69 + (i32.gt_u + (tee_local $2 + (i32.add + (get_local $2) + (i32.load offset=4 + (get_local $4) + ) + ) + ) + (get_local $6) + ) + ) + ) + (set_local $4 + (i32.load offset=8 + (get_local $4) + ) + ) + (br $while-in70) + ) + ) + (set_local $10 + (i32.add + (tee_local $4 + (i32.add + (get_local $2) + (i32.const -47) + ) + ) + (i32.const 8) + ) + ) + (set_local $12 + (i32.add + (tee_local $11 + (select + (get_local $6) + (tee_local $4 + (i32.add + (get_local $4) + (select + (i32.and + (i32.sub + (i32.const 0) + (get_local $10) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $10) + (i32.const 7) + ) + ) + ) + ) + (i32.lt_u + (get_local $4) + (tee_local $10 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + ) + ) + (i32.const 8) + ) + ) + (i32.store + (i32.const 200) + (tee_local $5 + (i32.add + (get_local $1) + (tee_local $4 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $4) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 188) + (tee_local $4 + (i32.sub + (i32.add + (get_local $3) + (i32.const -40) + ) + (get_local $4) + ) + ) + ) + (i32.store offset=4 + (get_local $5) + (i32.or + (get_local $4) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $5) + (get_local $4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (i32.const 27) + ) + (i32.store + (get_local $12) + (i32.load + (i32.const 624) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.load + (i32.const 628) + ) + ) + (i32.store offset=8 + (get_local $12) + (i32.load + (i32.const 632) + ) + ) + (i32.store offset=12 + (get_local $12) + (i32.load + (i32.const 636) + ) + ) + (i32.store + (i32.const 624) + (get_local $1) + ) + (i32.store + (i32.const 628) + (get_local $3) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 632) + (get_local $12) + ) + (set_local $1 + (i32.add + (get_local $11) + (i32.const 24) + ) + ) + (loop $while-in72 + (i32.store + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.const 7) + ) + (br_if $while-in72 + (i32.lt_u + (i32.add + (get_local $1) + (i32.const 4) + ) + (get_local $2) + ) + ) + ) + (if + (i32.ne + (get_local $11) + (get_local $6) + ) + (block + (i32.store + (get_local $4) + (i32.and + (i32.load + (get_local $4) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $6) + (i32.or + (tee_local $5 + (i32.sub + (get_local $11) + (get_local $6) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (get_local $11) + (get_local $5) + ) + (set_local $1 + (i32.shr_u + (get_local $5) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.const 256) + ) + (block + (set_local $2 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 176) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.load + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $17 + (get_local $3) + ) + (set_local $7 + (get_local $1) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $3) + (get_local $1) + ) + ) + (set_local $17 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (set_local $7 + (get_local $2) + ) + ) + ) + (i32.store + (get_local $17) + (get_local $6) + ) + (i32.store offset=12 + (get_local $7) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $7) + ) + (i32.store offset=12 + (get_local $6) + (get_local $2) + ) + (br $do-once40) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $4 + (if (result i32) + (tee_local $1 + (i32.shr_u + (get_local $5) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $5) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $5) + (i32.add + (tee_local $1 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $3 + (i32.shl + (get_local $1) + (tee_local $2 + (i32.and + (i32.shr_u + (i32.add + (get_local $1) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $2) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $3 + (i32.shl + (get_local $3) + (get_local $1) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $3) + (get_local $1) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $6) + (get_local $4) + ) + (i32.store offset=20 + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $10) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (i32.const 180) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $4) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $3) + (get_local $1) + ) + ) + (i32.store + (get_local $2) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $2) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once40) + ) + ) + (set_local $4 + (i32.shl + (get_local $5) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $4) + (i32.const 1) + ) + ) + (i32.eq + (get_local $4) + (i32.const 31) + ) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $2) + ) + ) + (block $__rjto$9 + (block $__rjti$9 + (loop $while-in74 + (br_if $__rjti$9 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $1) + ) + (i32.const -8) + ) + (get_local $5) + ) + ) + (set_local $2 + (i32.shl + (get_local $4) + (i32.const 1) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $4 + (i32.add + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $4) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $4 + (get_local $2) + ) + (set_local $1 + (get_local $3) + ) + (br $while-in74) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $4) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $1) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once40) + ) + ) + (br $__rjto$9) + ) + (if + (i32.and + (i32.ge_u + (tee_local $4 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (tee_local $3 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $1) + (get_local $3) + ) + ) + (block + (i32.store offset=12 + (get_local $4) + (get_local $6) + ) + (i32.store + (get_local $2) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $4) + ) + (i32.store offset=12 + (get_local $6) + (get_local $1) + ) + (i32.store offset=24 + (get_local $6) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (block + (if + (i32.or + (i32.eqz + (tee_local $2 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.lt_u + (get_local $1) + (get_local $2) + ) + ) + (i32.store + (i32.const 192) + (get_local $1) + ) + ) + (i32.store + (i32.const 624) + (get_local $1) + ) + (i32.store + (i32.const 628) + (get_local $3) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 212) + (i32.load + (i32.const 648) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (set_local $2 + (i32.const 0) + ) + (loop $while-in43 + (i32.store offset=12 + (tee_local $4 + (i32.add + (i32.shl + (get_local $2) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $4) + ) + (br_if $while-in43 + (i32.ne + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 32) + ) + ) + ) + (i32.store + (i32.const 200) + (tee_local $2 + (i32.add + (get_local $1) + (tee_local $1 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 188) + (tee_local $1 + (i32.sub + (i32.add + (get_local $3) + (i32.const -40) + ) + (get_local $1) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $1) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $2) + (get_local $1) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + ) + ) + ) + (br_if $folding-inner0 + (i32.gt_u + (tee_local $1 + (i32.load + (i32.const 188) + ) + ) + (get_local $0) + ) + ) + ) + (i32.store + (call $___errno_location) + (i32.const 12) + ) + (return + (i32.const 0) + ) + ) + (i32.store + (i32.const 188) + (tee_local $3 + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + ) + (i32.store + (i32.const 200) + (tee_local $1 + (i32.add + (tee_local $2 + (i32.load + (i32.const 200) + ) + ) + (get_local $0) + ) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (func $_free (; 55 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (if + (i32.eqz + (get_local $0) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $0) + (i32.const -8) + ) + ) + (tee_local $11 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (tee_local $5 + (i32.and + (tee_local $7 + (i32.load + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + ) + (i32.const 3) + ) + ) + (i32.const 1) + ) + (call $_abort) + ) + (set_local $8 + (i32.add + (get_local $1) + (tee_local $0 + (i32.and + (get_local $7) + (i32.const -8) + ) + ) + ) + ) + (block $do-once + (if + (i32.and + (get_local $7) + (i32.const 1) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + (block + (set_local $7 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.sub + (i32.const 0) + (get_local $7) + ) + ) + ) + (get_local $11) + ) + (call $_abort) + ) + (set_local $0 + (i32.add + (get_local $7) + (get_local $0) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.load + (i32.const 196) + ) + ) + (block + (if + (i32.ne + (i32.and + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 3) + ) + (i32.const 3) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 184) + (get_local $0) + ) + (i32.store + (get_local $2) + (i32.and + (get_local $3) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $0) + ) + (get_local $0) + ) + (return) + ) + ) + (set_local $5 + (i32.shr_u + (get_local $7) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $7) + (i32.const 256) + ) + (block + (set_local $6 + (i32.load offset=12 + (get_local $1) + ) + ) + (if + (i32.ne + (tee_local $2 + (i32.load offset=8 + (get_local $1) + ) + ) + (tee_local $3 + (i32.add + (i32.shl + (get_local $5) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $2) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $2) + ) + (get_local $1) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $6) + (get_local $2) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (get_local $6) + (get_local $3) + ) + (set_local $4 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $3 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (set_local $4 + (get_local $3) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $2) + (get_local $6) + ) + (i32.store + (get_local $4) + (get_local $2) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (set_local $12 + (i32.load offset=24 + (get_local $1) + ) + ) + (block $do-once0 + (if + (i32.eq + (tee_local $4 + (i32.load offset=12 + (get_local $1) + ) + ) + (get_local $1) + ) + (block + (if + (i32.eqz + (tee_local $5 + (i32.load + (tee_local $4 + (i32.add + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + (set_local $4 + (get_local $7) + ) + (block + (set_local $6 + (i32.const 0) + ) + (br $do-once0) + ) + ) + ) + (loop $while-in + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $5) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $4 + (get_local $10) + ) + (br $while-in) + ) + ) + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $4 + (get_local $10) + ) + (br $while-in) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (get_local $11) + ) + (call $_abort) + (block + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $6 + (get_local $5) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $10 + (i32.load offset=8 + (get_local $1) + ) + ) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $7 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + ) + (get_local $1) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $5 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (block + (i32.store + (get_local $7) + (get_local $4) + ) + (i32.store + (get_local $5) + (get_local $10) + ) + (set_local $6 + (get_local $4) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $12) + (block + (if + (i32.eq + (get_local $1) + (i32.load + (tee_local $4 + (i32.add + (i32.shl + (tee_local $5 + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $4) + (get_local $6) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $12) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $12) + (i32.const 16) + ) + ) + ) + (get_local $1) + ) + (i32.store + (get_local $4) + (get_local $6) + ) + (i32.store offset=20 + (get_local $12) + (get_local $6) + ) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $6) + (tee_local $5 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $6) + (get_local $12) + ) + (if + (tee_local $7 + (i32.load + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $7) + (get_local $5) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $6) + (get_local $7) + ) + (i32.store offset=24 + (get_local $7) + (get_local $6) + ) + ) + ) + ) + (if + (tee_local $4 + (i32.load offset=4 + (get_local $4) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $6) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $6) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (get_local $2) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 1) + ) + ) + (call $_abort) + ) + (if + (i32.and + (get_local $1) + (i32.const 2) + ) + (block + (i32.store + (get_local $0) + (i32.and + (get_local $1) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $3) + ) + (get_local $3) + ) + ) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 200) + ) + ) + (block + (i32.store + (i32.const 188) + (tee_local $0 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $2) + (i32.load + (i32.const 196) + ) + ) + (return) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store + (i32.const 184) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (tee_local $0 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 196) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $0) + ) + (get_local $0) + ) + (return) + ) + ) + (set_local $5 + (i32.add + (i32.and + (get_local $1) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $1) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.lt_u + (get_local $1) + (i32.const 256) + ) + (block + (set_local $4 + (i32.load offset=12 + (get_local $8) + ) + ) + (if + (i32.ne + (tee_local $1 + (i32.load offset=8 + (get_local $8) + ) + ) + (tee_local $0 + (i32.add + (i32.shl + (get_local $3) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $1) + ) + (get_local $8) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $1) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $0) + ) + (set_local $14 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (set_local $14 + (get_local $0) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $1) + (get_local $4) + ) + (i32.store + (get_local $14) + (get_local $1) + ) + ) + (block + (set_local $6 + (i32.load offset=24 + (get_local $8) + ) + ) + (block $do-once6 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $8) + ) + ) + (get_local $8) + ) + (block + (if + (i32.eqz + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (tee_local $1 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $3 + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (get_local $1) + ) + (block + (set_local $9 + (i32.const 0) + ) + (br $do-once6) + ) + ) + ) + (loop $while-in9 + (if + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $0 + (get_local $4) + ) + (br $while-in9) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $0 + (get_local $4) + ) + (br $while-in9) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $9 + (get_local $3) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $4 + (i32.load offset=8 + (get_local $8) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $1 + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + ) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (block + (i32.store + (get_local $1) + (get_local $0) + ) + (i32.store + (get_local $3) + (get_local $4) + ) + (set_local $9 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $6) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $3 + (i32.load offset=28 + (get_local $8) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $9) + ) + (if + (i32.eqz + (get_local $9) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $8) + ) + (i32.store + (get_local $0) + (get_local $9) + ) + (i32.store offset=20 + (get_local $6) + (get_local $9) + ) + ) + (br_if $do-once4 + (i32.eqz + (get_local $9) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $9) + (tee_local $3 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $9) + (get_local $6) + ) + (if + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $3) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $9) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $9) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=4 + (get_local $0) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $9) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $9) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $5) + ) + (get_local $5) + ) + (if + (i32.eq + (get_local $2) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (get_local $5) + ) + (return) + ) + (set_local $3 + (get_local $5) + ) + ) + ) + ) + (set_local $0 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $3) + (i32.const 256) + ) + (block + (set_local $1 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $15 + (get_local $3) + ) + (set_local $13 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $3) + (get_local $0) + ) + ) + (set_local $15 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $13 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $2) + ) + (i32.store offset=12 + (get_local $13) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $13) + ) + (i32.store offset=12 + (get_local $2) + (get_local $1) + ) + (return) + ) + ) + (set_local $4 + (i32.add + (i32.shl + (tee_local $5 + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $3) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $3) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $4 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $4) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $2) + (get_local $5) + ) + (i32.store offset=20 + (get_local $2) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $2) + (i32.const 0) + ) + (block $do-once12 + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 180) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $5) + ) + ) + ) + (block + (set_local $5 + (i32.shl + (get_local $3) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $5) + (i32.const 1) + ) + ) + (i32.eq + (get_local $5) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $4) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (loop $while-in15 + (br_if $__rjti$1 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $4 + (i32.shl + (get_local $5) + (i32.const 1) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $5 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $5) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $4) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in15) + ) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $5) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $0) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + (br $do-once12) + ) + ) + (br $__rjto$1) + ) + (if + (i32.and + (i32.ge_u + (tee_local $4 + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $3 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $3) + ) + ) + (block + (i32.store offset=12 + (get_local $4) + (get_local $2) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $4) + ) + (i32.store offset=12 + (get_local $2) + (get_local $0) + ) + (i32.store offset=24 + (get_local $2) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $4) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $4) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + ) + (i32.store + (i32.const 208) + (tee_local $0 + (i32.add + (i32.load + (i32.const 208) + ) + (i32.const -1) + ) + ) + ) + (if + (get_local $0) + (return) + (set_local $0 + (i32.const 632) + ) + ) + (loop $while-in17 + (set_local $0 + (i32.add + (tee_local $3 + (i32.load + (get_local $0) + ) + ) + (i32.const 8) + ) + ) + (br_if $while-in17 + (get_local $3) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + ) + (func $runPostSets (; 56 ;) + (nop) + ) + (func $_i64Subtract (; 57 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (set_global $tempRet0 + (i32.sub + (i32.sub + (get_local $1) + (get_local $3) + ) + (i32.gt_u + (get_local $2) + (get_local $0) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $_i64Add (; 58 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (set_global $tempRet0 + (i32.add + (i32.add + (get_local $1) + (get_local $3) + ) + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (get_local $0) + ) + ) + ) + (get_local $4) + ) + (func $_memset (; 59 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (if + (i32.ge_s + (get_local $2) + (i32.const 20) + ) + (block + (set_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (if + (tee_local $3 + (i32.and + (get_local $0) + (i32.const 3) + ) + ) + (block + (set_local $3 + (i32.sub + (i32.add + (get_local $0) + (i32.const 4) + ) + (get_local $3) + ) + ) + (loop $while-in + (if + (i32.lt_s + (get_local $0) + (get_local $3) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (set_local $3 + (i32.or + (i32.or + (i32.or + (get_local $1) + (i32.shl + (get_local $1) + (i32.const 8) + ) + ) + (i32.shl + (get_local $1) + (i32.const 16) + ) + ) + (i32.shl + (get_local $1) + (i32.const 24) + ) + ) + ) + (set_local $5 + (i32.and + (get_local $4) + (i32.const -4) + ) + ) + (loop $while-in1 + (if + (i32.lt_s + (get_local $0) + (get_local $5) + ) + (block + (i32.store + (get_local $0) + (get_local $3) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.lt_s + (get_local $0) + (get_local $4) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $_bitshift64Lshr (; 60 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if + (i32.lt_s + (get_local $2) + (i32.const 32) + ) + (block + (set_global $tempRet0 + (i32.shr_u + (get_local $1) + (get_local $2) + ) + ) + (return + (i32.or + (i32.shr_u + (get_local $0) + (get_local $2) + ) + (i32.shl + (i32.and + (get_local $1) + (i32.sub + (i32.shl + (i32.const 1) + (get_local $2) + ) + (i32.const 1) + ) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.const 0) + ) + (i32.shr_u + (get_local $1) + (i32.sub + (get_local $2) + (i32.const 32) + ) + ) + ) + (func $_bitshift64Shl (; 61 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if + (i32.lt_s + (get_local $2) + (i32.const 32) + ) + (block + (set_global $tempRet0 + (i32.or + (i32.shl + (get_local $1) + (get_local $2) + ) + (i32.shr_u + (i32.and + (get_local $0) + (i32.shl + (i32.sub + (i32.shl + (i32.const 1) + (get_local $2) + ) + (i32.const 1) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + ) + (return + (i32.shl + (get_local $0) + (get_local $2) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.shl + (get_local $0) + (i32.sub + (get_local $2) + (i32.const 32) + ) + ) + ) + (i32.const 0) + ) + (func $_memcpy (; 62 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.ge_s + (get_local $2) + (i32.const 4096) + ) + (return + (call $_emscripten_memcpy_big + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (set_local $3 + (get_local $0) + ) + (if + (i32.eq + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.and + (get_local $1) + (i32.const 3) + ) + ) + (block + (loop $while-in + (if + (i32.and + (get_local $0) + (i32.const 3) + ) + (block + (if + (i32.eqz + (get_local $2) + ) + (return + (get_local $3) + ) + ) + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (loop $while-in1 + (if + (i32.ge_s + (get_local $2) + (i32.const 4) + ) + (block + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (get_local $3) + ) + (func $___udivdi3 (; 63 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call $___udivmoddi4 + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.const 0) + ) + ) + (func $___uremdi3 (; 64 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (drop + (call $___udivmoddi4 + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $3) + (tee_local $0 + (get_local $4) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (set_global $tempRet0 + (i32.load offset=4 + (get_local $0) + ) + ) + (i32.load + (get_local $0) + ) + ) + (func $___udivmoddi4 (; 65 ;) (param $xl i32) (param $xh i32) (param $yl i32) (param $yh i32) (param $r i32) (result i32) + (local $x64 i64) + (local $y64 i64) + (set_local $x64 + (i64.or + (i64.extend_u/i32 + (get_local $xl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $xh) + ) + (i64.const 32) + ) + ) + ) + (set_local $y64 + (i64.or + (i64.extend_u/i32 + (get_local $yl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $yh) + ) + (i64.const 32) + ) + ) + ) + (if + (get_local $r) + (i64.store + (get_local $r) + (i64.rem_u + (get_local $x64) + (get_local $y64) + ) + ) + ) + (set_local $x64 + (i64.div_u + (get_local $x64) + (get_local $y64) + ) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $x64) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $x64) + ) + ) + (func $dynCall_ii (; 66 ;) (param $0 i32) (param $1 i32) (result i32) + (call_indirect (type $FUNCSIG$ii) + (get_local $1) + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + ) + (func $dynCall_iiii (; 67 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call_indirect (type $FUNCSIG$iiii) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (func $dynCall_vi (; 68 ;) (param $0 i32) (param $1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $1) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 10) + ) + ) + ) + (func $b0 (; 69 ;) (param $0 i32) (result i32) + (call $nullFunc_ii + (i32.const 0) + ) + (i32.const 0) + ) + (func $b1 (; 70 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $nullFunc_iiii + (i32.const 1) + ) + (i32.const 0) + ) + (func $b2 (; 71 ;) (param $0 i32) + (call $nullFunc_vi + (i32.const 2) + ) + ) +) diff --git a/src/binaryen/test/emcc_hello_world.fromasm.clamp b/src/binaryen/test/emcc_hello_world.fromasm.clamp new file mode 100644 index 0000000000..84c48ed9d8 --- /dev/null +++ b/src/binaryen/test/emcc_hello_world.fromasm.clamp @@ -0,0 +1,15722 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "abort" (func $abort)) + (import "env" "nullFunc_ii" (func $nullFunc_ii (param i32))) + (import "env" "nullFunc_iiii" (func $nullFunc_iiii (param i32))) + (import "env" "nullFunc_vi" (func $nullFunc_vi (param i32))) + (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) + (import "env" "___lock" (func $___lock (param i32))) + (import "env" "_pthread_self" (func $_pthread_self (result i32))) + (import "env" "_abort" (func $_abort)) + (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) + (import "env" "_sbrk" (func $_sbrk (param i32) (result i32))) + (import "env" "_time" (func $_time (param i32) (result i32))) + (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $___unlock (param i32))) + (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) + (import "env" "_sysconf" (func $_sysconf (param i32) (result i32))) + (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 18 18 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (elem (get_global $tableBase) $b0 $___stdio_close $b1 $b1 $___stdout_write $___stdio_seek $___stdio_write $b1 $b1 $b1 $b2 $b2 $b2 $b2 $b2 $_cleanup $b2 $b2) + (data (i32.const 1024) "emcc_hello_world.asm.js") + (export "_i64Subtract" (func $_i64Subtract)) + (export "_free" (func $_free)) + (export "_main" (func $_main)) + (export "_i64Add" (func $_i64Add)) + (export "_memset" (func $_memset)) + (export "_malloc" (func $_malloc)) + (export "_memcpy" (func $_memcpy)) + (export "_bitshift64Lshr" (func $_bitshift64Lshr)) + (export "_fflush" (func $_fflush)) + (export "___errno_location" (func $___errno_location)) + (export "_bitshift64Shl" (func $_bitshift64Shl)) + (export "runPostSets" (func $runPostSets)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackSave" (func $stackSave)) + (export "stackRestore" (func $stackRestore)) + (export "establishStackSpace" (func $establishStackSpace)) + (export "setThrew" (func $setThrew)) + (export "setTempRet0" (func $setTempRet0)) + (export "getTempRet0" (func $getTempRet0)) + (export "dynCall_ii" (func $dynCall_ii)) + (export "dynCall_iiii" (func $dynCall_iiii)) + (export "dynCall_vi" (func $dynCall_vi)) + (export "___udivmoddi4" (func $___udivmoddi4)) + (func $stackAlloc (; 18 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $0) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (get_local $1) + ) + (func $stackSave (; 19 ;) (result i32) + (get_global $STACKTOP) + ) + (func $stackRestore (; 20 ;) (param $0 i32) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $establishStackSpace (; 21 ;) (param $0 i32) (param $1 i32) + (set_global $STACKTOP + (get_local $0) + ) + (set_global $STACK_MAX + (get_local $1) + ) + ) + (func $setThrew (; 22 ;) (param $0 i32) (param $1 i32) + (if + (i32.eqz + (get_global $__THREW__) + ) + (block + (set_global $__THREW__ + (get_local $0) + ) + (set_global $threwValue + (get_local $1) + ) + ) + ) + ) + (func $setTempRet0 (; 23 ;) (param $0 i32) + (set_global $tempRet0 + (get_local $0) + ) + ) + (func $getTempRet0 (; 24 ;) (result i32) + (get_global $tempRet0) + ) + (func $_main (; 25 ;) (result i32) + (local $0 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (drop + (call $_printf + (i32.const 672) + (get_local $0) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (i32.const 0) + ) + (func $_frexp (; 26 ;) (param $0 f64) (param $1 i32) (result f64) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (f64.store + (get_global $tempDoublePtr) + (get_local $0) + ) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default + (tee_local $3 + (i32.and + (tee_local $3 + (call $_bitshift64Lshr + (tee_local $2 + (i32.load + (get_global $tempDoublePtr) + ) + ) + (tee_local $4 + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + ) + (i32.const 52) + ) + ) + (i32.const 2047) + ) + ) + ) + ) + (i32.store + (get_local $1) + (tee_local $2 + (if (result i32) + (f64.ne + (get_local $0) + (f64.const 0) + ) + (block (result i32) + (set_local $0 + (call $_frexp + (f64.mul + (get_local $0) + (f64.const 18446744073709551615) + ) + (get_local $1) + ) + ) + (i32.add + (i32.load + (get_local $1) + ) + (i32.const -64) + ) + ) + (i32.const 0) + ) + ) + ) + (br $switch) + ) + (br $switch) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $3) + (i32.const -1022) + ) + ) + (i32.store + (get_global $tempDoublePtr) + (get_local $2) + ) + (i32.store offset=4 + (get_global $tempDoublePtr) + (i32.or + (i32.and + (get_local $4) + (i32.const -2146435073) + ) + (i32.const 1071644672) + ) + ) + (set_local $0 + (f64.load + (get_global $tempDoublePtr) + ) + ) + ) + (get_local $0) + ) + (func $_strerror (; 27 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (i32.const 0) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in + (br_if $__rjti$0 + (i32.eq + (i32.load8_u offset=687 + (get_local $1) + ) + (get_local $0) + ) + ) + (br_if $while-in + (i32.ne + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 87) + ) + ) + (set_local $1 + (i32.const 87) + ) + (br $__rjti$1) + ) + ) + (br_if $__rjti$1 + (get_local $1) + ) + (set_local $0 + (i32.const 775) + ) + (br $__rjto$1) + ) + (set_local $0 + (i32.const 775) + ) + (loop $while-in1 + (loop $while-in3 + (set_local $2 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (if + (i32.load8_s + (get_local $0) + ) + (block + (set_local $0 + (get_local $2) + ) + (br $while-in3) + ) + (set_local $0 + (get_local $2) + ) + ) + ) + (br_if $while-in1 + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + ) + ) + ) + (get_local $0) + ) + (func $___errno_location (; 28 ;) (result i32) + (if (result i32) + (i32.load + (i32.const 16) + ) + (i32.load offset=60 + (call $_pthread_self) + ) + (i32.const 60) + ) + ) + (func $___stdio_close (; 29 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (i32.store + (tee_local $2 + (get_local $1) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (set_local $0 + (call $___syscall_ret + (call $___syscall6 + (i32.const 6) + (get_local $2) + ) + ) + ) + (set_global $STACKTOP + (get_local $1) + ) + (get_local $0) + ) + (func $___stdout_write (; 30 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 80) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $3 + (get_local $4) + ) + (set_local $5 + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + (i32.store offset=36 + (get_local $0) + (i32.const 4) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 64) + ) + ) + (block + (i32.store + (get_local $3) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 21505) + ) + (i32.store offset=8 + (get_local $3) + (get_local $5) + ) + (if + (call $___syscall54 + (i32.const 54) + (get_local $3) + ) + (i32.store8 offset=75 + (get_local $0) + (i32.const -1) + ) + ) + ) + ) + (set_local $0 + (call $___stdio_write + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $___stdio_seek (; 31 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (i32.store + (tee_local $3 + (get_local $4) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + (i32.store offset=16 + (get_local $3) + (get_local $2) + ) + (set_local $0 + (if (result i32) + (i32.lt_s + (call $___syscall_ret + (call $___syscall140 + (i32.const 140) + (get_local $3) + ) + ) + (i32.const 0) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.const -1) + ) + (i32.const -1) + ) + (i32.load + (get_local $0) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $_fflush (; 32 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (block $do-once + (if + (get_local $0) + (block + (if + (i32.le_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (block + (set_local $0 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (br $do-once) + ) + ) + (set_local $2 + (i32.eqz + (call $___lockfile + (get_local $0) + ) + ) + ) + (set_local $1 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (set_local $0 + (if (result i32) + (get_local $2) + (get_local $1) + (block (result i32) + (call $___unlockfile + (get_local $0) + ) + (get_local $1) + ) + ) + ) + ) + (block + (set_local $0 + (if (result i32) + (i32.load + (i32.const 12) + ) + (call $_fflush + (i32.load + (i32.const 12) + ) + ) + (i32.const 0) + ) + ) + (call $___lock + (i32.const 44) + ) + (if + (tee_local $1 + (i32.load + (i32.const 40) + ) + ) + (loop $while-in + (set_local $2 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (get_local $1) + ) + (i32.const -1) + ) + (call $___lockfile + (get_local $1) + ) + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.load offset=20 + (get_local $1) + ) + (i32.load offset=28 + (get_local $1) + ) + ) + (set_local $0 + (i32.or + (call $___fflush_unlocked + (get_local $1) + ) + (get_local $0) + ) + ) + ) + (if + (get_local $2) + (call $___unlockfile + (get_local $1) + ) + ) + (br_if $while-in + (tee_local $1 + (i32.load offset=56 + (get_local $1) + ) + ) + ) + ) + ) + (call $___unlock + (i32.const 44) + ) + ) + ) + ) + (get_local $0) + ) + (func $_printf (; 33 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (set_local $2 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (i32.store + (tee_local $3 + (get_local $2) + ) + (get_local $1) + ) + (set_local $0 + (call $_vfprintf + (i32.load + (i32.const 8) + ) + (get_local $0) + (get_local $3) + ) + ) + (set_global $STACKTOP + (get_local $2) + ) + (get_local $0) + ) + (func $___lockfile (; 34 ;) (param $0 i32) (result i32) + (i32.const 0) + ) + (func $___unlockfile (; 35 ;) (param $0 i32) + (nop) + ) + (func $___stdio_write (; 36 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $8 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $9 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (set_local $10 + (get_local $8) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $8) + (i32.const 32) + ) + ) + (tee_local $3 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $4) + (tee_local $3 + (i32.sub + (i32.load + (tee_local $11 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (get_local $3) + ) + ) + ) + (i32.store offset=8 + (get_local $4) + (get_local $1) + ) + (i32.store offset=12 + (get_local $4) + (get_local $2) + ) + (set_local $13 + (i32.add + (get_local $0) + (i32.const 60) + ) + ) + (set_local $14 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (set_local $1 + (get_local $4) + ) + (set_local $4 + (i32.const 2) + ) + (set_local $12 + (i32.add + (get_local $3) + (get_local $2) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in + (if + (i32.load + (i32.const 16) + ) + (block + (call $_pthread_cleanup_push + (i32.const 5) + (get_local $0) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $10) + (get_local $1) + ) + (i32.store offset=8 + (get_local $10) + (get_local $4) + ) + (set_local $3 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $10) + ) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $9) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $9) + (get_local $1) + ) + (i32.store offset=8 + (get_local $9) + (get_local $4) + ) + (set_local $3 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $9) + ) + ) + ) + ) + ) + (br_if $__rjti$0 + (i32.eq + (get_local $12) + (get_local $3) + ) + ) + (br_if $__rjti$1 + (i32.lt_s + (get_local $3) + (i32.const 0) + ) + ) + (set_local $5 + (if (result i32) + (i32.gt_u + (get_local $3) + (tee_local $5 + (i32.load offset=4 + (get_local $1) + ) + ) + ) + (block (result i32) + (i32.store + (get_local $6) + (tee_local $7 + (i32.load + (get_local $14) + ) + ) + ) + (i32.store + (get_local $11) + (get_local $7) + ) + (set_local $7 + (i32.load offset=12 + (get_local $1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const -1) + ) + ) + (i32.sub + (get_local $3) + (get_local $5) + ) + ) + (block (result i32) + (if + (i32.eq + (get_local $4) + (i32.const 2) + ) + (block + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (get_local $3) + ) + ) + (set_local $7 + (get_local $5) + ) + (set_local $4 + (i32.const 2) + ) + ) + (set_local $7 + (get_local $5) + ) + ) + (get_local $3) + ) + ) + ) + (i32.store + (get_local $1) + (i32.add + (i32.load + (get_local $1) + ) + (get_local $5) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.sub + (get_local $7) + (get_local $5) + ) + ) + (set_local $12 + (i32.sub + (get_local $12) + (get_local $3) + ) + ) + (br $while-in) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (tee_local $1 + (i32.load + (get_local $14) + ) + ) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.store + (get_local $6) + (get_local $1) + ) + (i32.store + (get_local $11) + (get_local $1) + ) + (br $__rjto$1) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (set_local $2 + (if (result i32) + (i32.eq + (get_local $4) + (i32.const 2) + ) + (i32.const 0) + (i32.sub + (get_local $2) + (i32.load offset=4 + (get_local $1) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $8) + ) + (get_local $2) + ) + (func $_vfprintf (; 37 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 224) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $5 + (i32.add + (get_local $4) + (i32.const 120) + ) + ) + (set_local $7 + (get_local $4) + ) + (set_local $6 + (i32.add + (get_local $4) + (i32.const 136) + ) + ) + (set_local $9 + (i32.add + (tee_local $3 + (tee_local $8 + (i32.add + (get_local $4) + (i32.const 80) + ) + ) + ) + (i32.const 40) + ) + ) + (loop $do-in + (i32.store + (get_local $3) + (i32.const 0) + ) + (br_if $do-in + (i32.lt_s + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (get_local $9) + ) + ) + ) + (i32.store + (get_local $5) + (i32.load + (get_local $2) + ) + ) + (set_local $0 + (if (result i32) + (i32.lt_s + (call $_printf_core + (i32.const 0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + (i32.const 0) + ) + (i32.const -1) + (block (result i32) + (set_local $14 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (call $___lockfile + (get_local $0) + ) + (i32.const 0) + ) + ) + (set_local $10 + (i32.load + (get_local $0) + ) + ) + (if + (i32.lt_s + (i32.load8_s offset=74 + (get_local $0) + ) + (i32.const 1) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $10) + (i32.const -33) + ) + ) + ) + (if + (i32.load + (tee_local $11 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + ) + (set_local $1 + (call $_printf_core + (get_local $0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + ) + (block + (set_local $13 + (i32.load + (tee_local $12 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + ) + ) + (i32.store + (get_local $12) + (get_local $6) + ) + (i32.store + (tee_local $9 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + (get_local $6) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (get_local $6) + ) + (i32.store + (get_local $11) + (i32.const 80) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (i32.add + (get_local $6) + (i32.const 80) + ) + ) + (set_local $1 + (call $_printf_core + (get_local $0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + ) + (if + (get_local $13) + (block + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (set_local $1 + (select + (get_local $1) + (i32.const -1) + (i32.load + (get_local $3) + ) + ) + ) + (i32.store + (get_local $12) + (get_local $13) + ) + (i32.store + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $9) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + ) + ) + ) + ) + (i32.store + (get_local $0) + (i32.or + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.and + (get_local $10) + (i32.const 32) + ) + ) + ) + (if + (get_local $14) + (call $___unlockfile + (get_local $0) + ) + ) + (select + (i32.const -1) + (get_local $1) + (i32.and + (get_local $2) + (i32.const 32) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $___fwritex (; 38 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (block $label$break$L5 + (block $__rjti$0 + (br_if $__rjti$0 + (tee_local $3 + (i32.load + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + ) + (if + (call $___towrite + (get_local $2) + ) + (set_local $3 + (i32.const 0) + ) + (block + (set_local $3 + (i32.load + (get_local $4) + ) + ) + (br $__rjti$0) + ) + ) + (br $label$break$L5) + ) + (if + (i32.lt_u + (i32.sub + (get_local $3) + (tee_local $4 + (i32.load + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 20) + ) + ) + ) + ) + ) + (get_local $1) + ) + (block + (set_local $3 + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (br $label$break$L5) + ) + ) + (set_local $2 + (block $label$break$L10 (result i32) + (if (result i32) + (i32.gt_s + (i32.load8_s offset=75 + (get_local $2) + ) + (i32.const -1) + ) + (block (result i32) + (set_local $3 + (get_local $1) + ) + (loop $while-in + (drop + (br_if $label$break$L10 + (i32.const 0) + (i32.eqz + (get_local $3) + ) + ) + ) + (if + (i32.ne + (i32.load8_s + (i32.add + (get_local $0) + (tee_local $6 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + (i32.const 10) + ) + (block + (set_local $3 + (get_local $6) + ) + (br $while-in) + ) + ) + ) + (br_if $label$break$L5 + (i32.lt_u + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + (get_local $3) + ) + ) + (set_local $4 + (i32.load + (get_local $5) + ) + ) + (set_local $1 + (i32.sub + (get_local $1) + (get_local $3) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (get_local $3) + ) + ) + (get_local $3) + ) + (i32.const 0) + ) + ) + ) + (drop + (call $_memcpy + (get_local $4) + (get_local $0) + (get_local $1) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $1) + ) + ) + (set_local $3 + (i32.add + (get_local $2) + (get_local $1) + ) + ) + ) + (get_local $3) + ) + (func $___towrite (; 39 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (i32.load8_s + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 74) + ) + ) + ) + ) + (i32.store8 + (get_local $2) + (i32.or + (i32.add + (get_local $1) + (i32.const 255) + ) + (get_local $1) + ) + ) + (tee_local $0 + (if (result i32) + (i32.and + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.const 8) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.or + (get_local $1) + (i32.const 32) + ) + ) + (i32.const -1) + ) + (block (result i32) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=28 + (get_local $0) + (tee_local $1 + (i32.load offset=44 + (get_local $0) + ) + ) + ) + (i32.store offset=20 + (get_local $0) + (get_local $1) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (get_local $1) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (func $_wcrtomb (; 40 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $do-once (result i32) + (if (result i32) + (get_local $0) + (block (result i32) + (if + (i32.lt_u + (get_local $1) + (i32.const 128) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (br $do-once + (i32.const 1) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.const 2048) + ) + (block + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 192) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (br $do-once + (i32.const 2) + ) + ) + ) + (if + (i32.or + (i32.lt_u + (get_local $1) + (i32.const 55296) + ) + (i32.eq + (i32.and + (get_local $1) + (i32.const -8192) + ) + (i32.const 57344) + ) + ) + (block + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 12) + ) + (i32.const 224) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=2 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (br $do-once + (i32.const 3) + ) + ) + ) + (if (result i32) + (i32.lt_u + (i32.add + (get_local $1) + (i32.const -65536) + ) + (i32.const 1048576) + ) + (block (result i32) + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 18) + ) + (i32.const 240) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 12) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=2 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=3 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.const 4) + ) + (block (result i32) + (i32.store + (call $___errno_location) + (i32.const 84) + ) + (i32.const -1) + ) + ) + ) + (i32.const 1) + ) + ) + ) + (func $_wctomb (; 41 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (get_local $0) + (call $_wcrtomb + (get_local $0) + (get_local $1) + (i32.const 0) + ) + (i32.const 0) + ) + ) + (func $_memchr (; 42 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $5 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (block $label$break$L8 + (block $__rjti$2 + (if + (i32.and + (tee_local $4 + (i32.ne + (get_local $2) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.const 0) + ) + ) + (block + (set_local $4 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (br_if $__rjti$2 + (i32.eq + (i32.load8_u + (get_local $2) + ) + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + ) + (br_if $while-in + (i32.and + (tee_local $0 + (i32.ne + (tee_local $3 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 3) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (set_local $0 + (i32.const 0) + ) + (br $label$break$L8) + ) + (set_local $0 + (get_local $3) + ) + (if + (i32.ne + (i32.load8_u + (get_local $2) + ) + (tee_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (block + (set_local $3 + (i32.mul + (get_local $5) + (i32.const 16843009) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.le_u + (get_local $0) + (i32.const 3) + ) + ) + (loop $while-in3 + (if + (i32.eqz + (i32.and + (i32.xor + (i32.and + (tee_local $4 + (i32.xor + (i32.load + (get_local $2) + ) + (get_local $3) + ) + ) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $4) + (i32.const -16843009) + ) + ) + ) + (block + (set_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (br_if $while-in3 + (i32.gt_u + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + (i32.const 3) + ) + ) + (br $__rjti$0) + ) + ) + ) + (br $__rjto$0) + ) + (if + (i32.eqz + (get_local $0) + ) + (block + (set_local $0 + (i32.const 0) + ) + (br $label$break$L8) + ) + ) + ) + (loop $while-in5 + (br_if $label$break$L8 + (i32.eq + (i32.load8_u + (get_local $2) + ) + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br_if $while-in5 + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -1) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + ) + (select + (get_local $2) + (i32.const 0) + (get_local $0) + ) + ) + (func $___syscall_ret (; 43 ;) (param $0 i32) (result i32) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const -4096) + ) + (block (result i32) + (i32.store + (call $___errno_location) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + (get_local $0) + ) + ) + (func $___fflush_unlocked (; 44 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (tee_local $0 + (block $__rjto$0 (result i32) + (block $__rjti$0 + (br_if $__rjti$0 + (i32.le_u + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (br_if $__rjti$0 + (i32.load + (get_local $1) + ) + ) + (br $__rjto$0 + (i32.const -1) + ) + ) + (if + (i32.lt_u + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (tee_local $6 + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.sub + (get_local $4) + (get_local $6) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=40 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + (func $_cleanup (; 45 ;) (param $0 i32) + (if + (i32.eqz + (i32.load offset=68 + (get_local $0) + ) + ) + (call $___unlockfile + (get_local $0) + ) + ) + ) + (func $f64-to-int (; 46 ;) (param $0 f64) (result i32) + (if (result i32) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i32.const -2147483648) + (if (result i32) + (f64.ge + (get_local $0) + (f64.const 2147483648) + ) + (i32.const -2147483648) + (if (result i32) + (f64.le + (get_local $0) + (f64.const -2147483649) + ) + (i32.const -2147483648) + (i32.trunc_s/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $f64-to-uint (; 47 ;) (param $0 f64) (result i32) + (if (result i32) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i32.const 0) + (if (result i32) + (f64.ge + (get_local $0) + (f64.const 4294967296) + ) + (i32.const 0) + (if (result i32) + (f64.le + (get_local $0) + (f64.const -1) + ) + (i32.const 0) + (i32.trunc_u/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $i32s-div (; 48 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (get_local $1) + (if (result i32) + (i32.and + (i32.eq + (get_local $0) + (i32.const -2147483648) + ) + (i32.eq + (get_local $1) + (i32.const -1) + ) + ) + (i32.const 0) + (i32.div_s + (get_local $0) + (get_local $1) + ) + ) + (i32.const 0) + ) + ) + (func $i32u-rem (; 49 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (get_local $1) + (i32.rem_u + (get_local $0) + (get_local $1) + ) + (i32.const 0) + ) + ) + (func $i32u-div (; 50 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (get_local $1) + (i32.div_u + (get_local $0) + (get_local $1) + ) + (i32.const 0) + ) + ) + (func $_printf_core (; 51 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 f64) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 f64) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (local $47 i32) + (local $48 i32) + (local $49 i32) + (local $50 i32) + (local $51 i32) + (set_local $25 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 624) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $20 + (i32.add + (get_local $25) + (i32.const 16) + ) + ) + (set_local $19 + (get_local $25) + ) + (set_local $36 + (i32.add + (get_local $25) + (i32.const 528) + ) + ) + (set_local $29 + (i32.ne + (get_local $0) + (i32.const 0) + ) + ) + (set_local $39 + (tee_local $26 + (i32.add + (tee_local $5 + (i32.add + (get_local $25) + (i32.const 536) + ) + ) + (i32.const 40) + ) + ) + ) + (set_local $40 + (i32.add + (get_local $5) + (i32.const 39) + ) + ) + (set_local $44 + (i32.add + (tee_local $41 + (i32.add + (get_local $25) + (i32.const 8) + ) + ) + (i32.const 4) + ) + ) + (set_local $34 + (i32.add + (tee_local $5 + (i32.add + (get_local $25) + (i32.const 576) + ) + ) + (i32.const 12) + ) + ) + (set_local $42 + (i32.add + (get_local $5) + (i32.const 11) + ) + ) + (set_local $45 + (i32.sub + (tee_local $28 + (get_local $34) + ) + (tee_local $37 + (tee_local $22 + (i32.add + (get_local $25) + (i32.const 588) + ) + ) + ) + ) + ) + (set_local $46 + (i32.sub + (i32.const -2) + (get_local $37) + ) + ) + (set_local $47 + (i32.add + (get_local $28) + (i32.const 2) + ) + ) + (set_local $49 + (i32.add + (tee_local $48 + (i32.add + (get_local $25) + (i32.const 24) + ) + ) + (i32.const 288) + ) + ) + (set_local $43 + (tee_local $30 + (i32.add + (get_local $22) + (i32.const 9) + ) + ) + ) + (set_local $35 + (i32.add + (get_local $22) + (i32.const 8) + ) + ) + (set_local $16 + (i32.const 0) + ) + (set_local $5 + (get_local $1) + ) + (set_local $10 + (i32.const 0) + ) + (set_local $1 + (i32.const 0) + ) + (block $label$break$L343 + (block $__rjti$9 + (loop $label$continue$L1 + (block $label$break$L1 + (if + (i32.gt_s + (get_local $16) + (i32.const -1) + ) + (set_local $16 + (if (result i32) + (i32.gt_s + (get_local $10) + (i32.sub + (i32.const 2147483647) + (get_local $16) + ) + ) + (block (result i32) + (i32.store + (call $___errno_location) + (i32.const 75) + ) + (i32.const -1) + ) + (i32.add + (get_local $10) + (get_local $16) + ) + ) + ) + ) + (br_if $__rjti$9 + (i32.eqz + (tee_local $7 + (i32.load8_s + (get_local $5) + ) + ) + ) + ) + (set_local $10 + (get_local $5) + ) + (block $label$break$L12 + (block $__rjti$1 + (loop $label$continue$L9 + (block $label$break$L9 + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.shr_s + (i32.shl + (get_local $7) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (set_local $6 + (get_local $10) + ) + (br $__rjti$1) + ) + (set_local $6 + (get_local $10) + ) + (br $label$break$L9) + ) + (set_local $7 + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + ) + (br $label$continue$L9) + ) + ) + (br $label$break$L12) + ) + (loop $while-in + (br_if $label$break$L12 + (i32.ne + (i32.load8_s offset=1 + (get_local $6) + ) + (i32.const 37) + ) + ) + (set_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (br_if $while-in + (i32.eq + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 2) + ) + ) + ) + (i32.const 37) + ) + ) + ) + ) + (set_local $7 + (i32.sub + (get_local $10) + (get_local $5) + ) + ) + (if + (get_local $29) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $5) + (get_local $7) + (get_local $0) + ) + ) + ) + ) + (if + (i32.ne + (get_local $10) + (get_local $5) + ) + (block + (set_local $5 + (get_local $6) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + ) + (set_local $8 + (if (result i32) + (i32.lt_u + (tee_local $8 + (i32.add + (tee_local $11 + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block (result i32) + (set_local $6 + (i32.load8_s + (tee_local $10 + (select + (i32.add + (get_local $6) + (i32.const 3) + ) + (get_local $10) + (tee_local $11 + (i32.eq + (i32.load8_s offset=2 + (get_local $6) + ) + (i32.const 36) + ) + ) + ) + ) + ) + ) + (set_local $17 + (select + (get_local $8) + (i32.const -1) + (get_local $11) + ) + ) + (select + (i32.const 1) + (get_local $1) + (get_local $11) + ) + ) + (block (result i32) + (set_local $6 + (get_local $11) + ) + (set_local $17 + (i32.const -1) + ) + (get_local $1) + ) + ) + ) + (block $label$break$L25 + (if + (i32.eq + (i32.and + (tee_local $11 + (i32.shr_s + (i32.shl + (get_local $6) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (i32.const -32) + ) + (i32.const 32) + ) + (block + (set_local $1 + (get_local $6) + ) + (set_local $6 + (get_local $11) + ) + (set_local $11 + (i32.const 0) + ) + (loop $while-in4 + (if + (i32.eqz + (i32.and + (i32.shl + (i32.const 1) + (i32.add + (get_local $6) + (i32.const -32) + ) + ) + (i32.const 75913) + ) + ) + (block + (set_local $6 + (get_local $1) + ) + (set_local $1 + (get_local $11) + ) + (br $label$break$L25) + ) + ) + (set_local $11 + (i32.or + (i32.shl + (i32.const 1) + (i32.add + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -32) + ) + ) + (get_local $11) + ) + ) + (br_if $while-in4 + (i32.eq + (i32.and + (tee_local $6 + (tee_local $1 + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + ) + ) + (i32.const -32) + ) + (i32.const 32) + ) + ) + (set_local $6 + (get_local $1) + ) + (set_local $1 + (get_local $11) + ) + ) + ) + (set_local $1 + (i32.const 0) + ) + ) + ) + (block $do-once5 + (if + (i32.eq + (i32.and + (get_local $6) + (i32.const 255) + ) + (i32.const 42) + ) + (block + (set_local $10 + (block $__rjto$0 (result i32) + (block $__rjti$0 + (br_if $__rjti$0 + (i32.ge_u + (tee_local $11 + (i32.add + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + ) + (br_if $__rjti$0 + (i32.ne + (i32.load8_s offset=2 + (get_local $10) + ) + (i32.const 36) + ) + ) + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + (i32.const 10) + ) + (drop + (i32.load offset=4 + (tee_local $6 + (i32.add + (get_local $3) + (i32.shl + (i32.add + (i32.load8_s + (get_local $6) + ) + (i32.const -48) + ) + (i32.const 3) + ) + ) + ) + ) + ) + (set_local $8 + (i32.const 1) + ) + (set_local $14 + (i32.load + (get_local $6) + ) + ) + (br $__rjto$0 + (i32.add + (get_local $10) + (i32.const 3) + ) + ) + ) + (if + (get_local $8) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (if + (i32.eqz + (get_local $29) + ) + (block + (set_local $11 + (get_local $1) + ) + (set_local $10 + (get_local $6) + ) + (set_local $1 + (i32.const 0) + ) + (set_local $14 + (i32.const 0) + ) + (br $do-once5) + ) + ) + (set_local $14 + (i32.load + (tee_local $10 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $8 + (i32.const 0) + ) + (get_local $6) + ) + ) + (set_local $11 + (if (result i32) + (i32.lt_s + (get_local $14) + (i32.const 0) + ) + (block (result i32) + (set_local $14 + (i32.sub + (i32.const 0) + (get_local $14) + ) + ) + (i32.or + (get_local $1) + (i32.const 8192) + ) + ) + (get_local $1) + ) + ) + (set_local $1 + (get_local $8) + ) + ) + (if + (i32.lt_u + (tee_local $6 + (i32.add + (i32.shr_s + (i32.shl + (get_local $6) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $11 + (i32.const 0) + ) + (loop $while-in8 + (set_local $6 + (i32.add + (i32.mul + (get_local $11) + (i32.const 10) + ) + (get_local $6) + ) + ) + (if + (i32.lt_u + (tee_local $9 + (i32.add + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $11 + (get_local $6) + ) + (set_local $6 + (get_local $9) + ) + (br $while-in8) + ) + ) + ) + (if + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + (block + (set_local $11 + (get_local $1) + ) + (set_local $1 + (get_local $8) + ) + (set_local $14 + (get_local $6) + ) + ) + ) + ) + (block + (set_local $11 + (get_local $1) + ) + (set_local $1 + (get_local $8) + ) + (set_local $14 + (i32.const 0) + ) + ) + ) + ) + ) + (set_local $6 + (block $label$break$L46 (result i32) + (if (result i32) + (i32.eq + (i32.load8_s + (get_local $10) + ) + (i32.const 46) + ) + (block (result i32) + (if + (i32.ne + (tee_local $8 + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + ) + (i32.const 42) + ) + (block + (if + (i32.lt_u + (tee_local $9 + (i32.add + (get_local $8) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $10 + (get_local $6) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $6 + (get_local $9) + ) + ) + (block + (set_local $10 + (get_local $6) + ) + (br $label$break$L46 + (i32.const 0) + ) + ) + ) + (loop $while-in11 + (drop + (br_if $label$break$L46 + (tee_local $6 + (i32.add + (i32.mul + (get_local $8) + (i32.const 10) + ) + (get_local $6) + ) + ) + (i32.ge_u + (tee_local $9 + (i32.add + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + ) + ) + (set_local $8 + (get_local $6) + ) + (set_local $6 + (get_local $9) + ) + (br $while-in11) + ) + ) + ) + (if + (i32.lt_u + (tee_local $8 + (i32.add + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $10) + (i32.const 2) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (if + (i32.eq + (i32.load8_s offset=3 + (get_local $10) + ) + (i32.const 36) + ) + (block + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $8) + (i32.const 2) + ) + ) + (i32.const 10) + ) + (drop + (i32.load offset=4 + (tee_local $6 + (i32.add + (get_local $3) + (i32.shl + (i32.add + (i32.load8_s + (get_local $6) + ) + (i32.const -48) + ) + (i32.const 3) + ) + ) + ) + ) + ) + (set_local $10 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (br $label$break$L46 + (i32.load + (get_local $6) + ) + ) + ) + ) + ) + (if + (get_local $1) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (if (result i32) + (get_local $29) + (block (result i32) + (set_local $8 + (i32.load + (tee_local $10 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $10 + (get_local $6) + ) + (get_local $8) + ) + (block (result i32) + (set_local $10 + (get_local $6) + ) + (i32.const 0) + ) + ) + ) + (i32.const -1) + ) + ) + ) + (set_local $8 + (get_local $10) + ) + (set_local $9 + (i32.const 0) + ) + (loop $while-in13 + (if + (i32.gt_u + (tee_local $12 + (i32.add + (i32.load8_s + (get_local $8) + ) + (i32.const -65) + ) + ) + (i32.const 57) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $10 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + (if + (i32.lt_u + (i32.add + (tee_local $12 + (i32.and + (tee_local $13 + (i32.load8_s + (i32.add + (i32.add + (i32.mul + (get_local $9) + (i32.const 58) + ) + (i32.const 3611) + ) + (get_local $12) + ) + ) + ) + (i32.const 255) + ) + ) + (i32.const -1) + ) + (i32.const 8) + ) + (block + (set_local $8 + (get_local $10) + ) + (set_local $9 + (get_local $12) + ) + (br $while-in13) + ) + (set_local $18 + (get_local $8) + ) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $13) + (i32.const 255) + ) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $8 + (i32.gt_s + (get_local $17) + (i32.const -1) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (if + (i32.eq + (i32.and + (get_local $13) + (i32.const 255) + ) + (i32.const 19) + ) + (if + (get_local $8) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + (br $__rjti$2) + ) + (block + (if + (get_local $8) + (block + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $17) + (i32.const 2) + ) + ) + (get_local $12) + ) + (set_local $13 + (i32.load offset=4 + (tee_local $12 + (i32.add + (get_local $3) + (i32.shl + (get_local $17) + (i32.const 3) + ) + ) + ) + ) + ) + (i32.store + (tee_local $8 + (get_local $19) + ) + (i32.load + (get_local $12) + ) + ) + (i32.store offset=4 + (get_local $8) + (get_local $13) + ) + (br $__rjti$2) + ) + ) + (if + (i32.eqz + (get_local $29) + ) + (block + (set_local $16 + (i32.const 0) + ) + (br $label$break$L1) + ) + ) + (call $_pop_arg_336 + (get_local $19) + (get_local $12) + (get_local $2) + ) + ) + ) + (br $__rjto$2) + ) + (if + (i32.eqz + (get_local $29) + ) + (block + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + ) + ) + (set_local $11 + (select + (tee_local $8 + (i32.and + (get_local $11) + (i32.const -65537) + ) + ) + (get_local $11) + (i32.and + (get_local $11) + (i32.const 8192) + ) + ) + ) + (set_local $5 + (block $__rjto$8 (result i32) + (block $__rjti$8 + (block $__rjti$7 + (block $__rjti$6 + (block $__rjti$5 + (block $__rjti$4 + (block $__rjti$3 + (block $switch-default120 + (block $switch-case42 + (block $switch-case41 + (block $switch-case40 + (block $switch-case39 + (block $switch-case38 + (block $switch-case37 + (block $switch-case36 + (block $switch-case34 + (block $switch-case33 + (block $switch-case29 + (block $switch-case28 + (block $switch-case27 + (br_table $switch-case42 $switch-default120 $switch-case40 $switch-default120 $switch-case42 $switch-case42 $switch-case42 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case41 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case29 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case42 $switch-default120 $switch-case37 $switch-case34 $switch-case42 $switch-case42 $switch-case42 $switch-default120 $switch-case34 $switch-default120 $switch-default120 $switch-default120 $switch-case38 $switch-case27 $switch-case33 $switch-case28 $switch-default120 $switch-default120 $switch-case39 $switch-default120 $switch-case36 $switch-default120 $switch-default120 $switch-case29 $switch-default120 + (i32.sub + (tee_local $18 + (select + (i32.and + (tee_local $12 + (i32.load8_s + (get_local $18) + ) + ) + (i32.const -33) + ) + (get_local $12) + (i32.and + (i32.ne + (get_local $9) + (i32.const 0) + ) + (i32.eq + (i32.and + (get_local $12) + (i32.const 15) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 65) + ) + ) + ) + (block $switch-default26 + (block $switch-case25 + (block $switch-case24 + (block $switch-case23 + (block $switch-case22 + (block $switch-case21 + (block $switch-case20 + (block $switch-case19 + (br_table $switch-case19 $switch-case20 $switch-case21 $switch-case22 $switch-case23 $switch-default26 $switch-case24 $switch-case25 $switch-default26 + (get_local $9) + ) + ) + (i32.store + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (tee_local $5 + (i32.load + (get_local $19) + ) + ) + (get_local $16) + ) + (i32.store offset=4 + (get_local $5) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $16) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store16 + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store8 + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (tee_local $5 + (i32.load + (get_local $19) + ) + ) + (get_local $16) + ) + (i32.store offset=4 + (get_local $5) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $16) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (set_local $7 + (i32.or + (get_local $11) + (i32.const 8) + ) + ) + (set_local $6 + (select + (get_local $6) + (i32.const 8) + (i32.gt_u + (get_local $6) + (i32.const 8) + ) + ) + ) + (set_local $18 + (i32.const 120) + ) + (br $__rjti$3) + ) + (set_local $7 + (get_local $11) + ) + (br $__rjti$3) + ) + (if + (i32.and + (i32.eqz + (tee_local $7 + (i32.load + (tee_local $5 + (get_local $19) + ) + ) + ) + ) + (i32.eqz + (tee_local $8 + (i32.load offset=4 + (get_local $5) + ) + ) + ) + ) + (set_local $8 + (get_local $26) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $7 + (get_local $8) + ) + (set_local $8 + (get_local $26) + ) + (loop $while-in32 + (i32.store8 + (tee_local $8 + (i32.add + (get_local $8) + (i32.const -1) + ) + ) + (i32.or + (i32.and + (get_local $5) + (i32.const 7) + ) + (i32.const 48) + ) + ) + (br_if $while-in32 + (i32.eqz + (i32.and + (i32.eqz + (tee_local $5 + (call $_bitshift64Lshr + (get_local $5) + (get_local $7) + (i32.const 3) + ) + ) + ) + (i32.eqz + (tee_local $7 + (get_global $tempRet0) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $5 + (if (result i32) + (i32.and + (get_local $11) + (i32.const 8) + ) + (block (result i32) + (set_local $7 + (get_local $11) + ) + (set_local $6 + (select + (tee_local $11 + (i32.add + (i32.sub + (get_local $39) + (get_local $8) + ) + (i32.const 1) + ) + ) + (get_local $6) + (i32.lt_s + (get_local $6) + (get_local $11) + ) + ) + ) + (get_local $8) + ) + (block (result i32) + (set_local $7 + (get_local $11) + ) + (get_local $8) + ) + ) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$8) + ) + (set_local $5 + (i32.load + (tee_local $7 + (get_local $19) + ) + ) + ) + (if + (i32.lt_s + (tee_local $7 + (i32.load offset=4 + (get_local $7) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (tee_local $8 + (get_local $19) + ) + (tee_local $5 + (call $_i64Subtract + (i32.const 0) + (i32.const 0) + (get_local $5) + (get_local $7) + ) + ) + ) + (i32.store offset=4 + (get_local $8) + (tee_local $7 + (get_global $tempRet0) + ) + ) + (set_local $8 + (i32.const 1) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$4) + ) + ) + (set_local $9 + (if (result i32) + (i32.and + (get_local $11) + (i32.const 2048) + ) + (block (result i32) + (set_local $8 + (i32.const 1) + ) + (i32.const 4092) + ) + (block (result i32) + (set_local $8 + (tee_local $9 + (i32.and + (get_local $11) + (i32.const 1) + ) + ) + ) + (select + (i32.const 4093) + (i32.const 4091) + (get_local $9) + ) + ) + ) + ) + (br $__rjti$4) + ) + (set_local $5 + (i32.load + (tee_local $7 + (get_local $19) + ) + ) + ) + (set_local $7 + (i32.load offset=4 + (get_local $7) + ) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$4) + ) + (drop + (i32.load offset=4 + (tee_local $5 + (get_local $19) + ) + ) + ) + (i32.store8 + (get_local $40) + (i32.load + (get_local $5) + ) + ) + (set_local $7 + (get_local $40) + ) + (set_local $11 + (get_local $8) + ) + (set_local $12 + (i32.const 1) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjto$8 + (get_local $26) + ) + ) + (set_local $5 + (call $_strerror + (i32.load + (call $___errno_location) + ) + ) + ) + (br $__rjti$5) + ) + (set_local $5 + (select + (tee_local $5 + (i32.load + (get_local $19) + ) + ) + (i32.const 4101) + (get_local $5) + ) + ) + (br $__rjti$5) + ) + (drop + (i32.load offset=4 + (tee_local $5 + (get_local $19) + ) + ) + ) + (i32.store + (get_local $41) + (i32.load + (get_local $5) + ) + ) + (i32.store + (get_local $44) + (i32.const 0) + ) + (i32.store + (get_local $19) + (get_local $41) + ) + (set_local $8 + (i32.const -1) + ) + (br $__rjti$6) + ) + (if + (get_local $6) + (block + (set_local $8 + (get_local $6) + ) + (br $__rjti$6) + ) + (block + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (i32.const 0) + (get_local $11) + ) + (set_local $7 + (i32.const 0) + ) + (br $__rjti$7) + ) + ) + ) + (set_local $15 + (f64.load + (get_local $19) + ) + ) + (i32.store + (get_local $20) + (i32.const 0) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $15) + ) + (drop + (i32.load + (get_global $tempDoublePtr) + ) + ) + (set_local $31 + (if (result i32) + (i32.lt_s + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + (i32.const 0) + ) + (block (result i32) + (set_local $27 + (i32.const 1) + ) + (set_local $15 + (f64.neg + (get_local $15) + ) + ) + (i32.const 4108) + ) + (if (result i32) + (i32.and + (get_local $11) + (i32.const 2048) + ) + (block (result i32) + (set_local $27 + (i32.const 1) + ) + (i32.const 4111) + ) + (block (result i32) + (set_local $27 + (tee_local $5 + (i32.and + (get_local $11) + (i32.const 1) + ) + ) + ) + (select + (i32.const 4114) + (i32.const 4109) + (get_local $5) + ) + ) + ) + ) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $15) + ) + (drop + (i32.load + (get_global $tempDoublePtr) + ) + ) + (set_local $7 + (block $do-once49 (result i32) + (if (result i32) + (i32.or + (i32.lt_u + (tee_local $5 + (i32.and + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + (i32.const 2146435072) + ) + ) + (i32.const 2146435072) + ) + (i32.and + (i32.eq + (get_local $5) + (i32.const 2146435072) + ) + (i32.const 0) + ) + ) + (block (result i32) + (if + (tee_local $5 + (f64.ne + (tee_local $23 + (f64.mul + (call $_frexp + (get_local $15) + (tee_local $5 + (get_local $20) + ) + ) + (f64.const 2) + ) + ) + (f64.const 0) + ) + ) + (i32.store + (get_local $20) + (i32.add + (i32.load + (get_local $20) + ) + (i32.const -1) + ) + ) + ) + (if + (i32.eq + (tee_local $24 + (i32.or + (get_local $18) + (i32.const 32) + ) + ) + (i32.const 97) + ) + (block + (set_local $9 + (select + (i32.add + (get_local $31) + (i32.const 9) + ) + (get_local $31) + (tee_local $13 + (i32.and + (get_local $18) + (i32.const 32) + ) + ) + ) + ) + (set_local $15 + (if (result f64) + (i32.or + (i32.gt_u + (get_local $6) + (i32.const 11) + ) + (i32.eqz + (tee_local $5 + (i32.sub + (i32.const 12) + (get_local $6) + ) + ) + ) + ) + (get_local $23) + (block (result f64) + (set_local $15 + (f64.const 8) + ) + (loop $while-in54 + (set_local $15 + (f64.mul + (get_local $15) + (f64.const 16) + ) + ) + (br_if $while-in54 + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + ) + ) + (if (result f64) + (i32.eq + (i32.load8_s + (get_local $9) + ) + (i32.const 45) + ) + (f64.neg + (f64.add + (get_local $15) + (f64.sub + (f64.neg + (get_local $23) + ) + (get_local $15) + ) + ) + ) + (f64.sub + (f64.add + (get_local $23) + (get_local $15) + ) + (get_local $15) + ) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $5 + (call $_fmt_u + (tee_local $5 + (select + (i32.sub + (i32.const 0) + (tee_local $7 + (i32.load + (get_local $20) + ) + ) + ) + (get_local $7) + (i32.lt_s + (get_local $7) + (i32.const 0) + ) + ) + ) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + (get_local $34) + ) + ) + (get_local $34) + ) + (block + (i32.store8 + (get_local $42) + (i32.const 48) + ) + (set_local $5 + (get_local $42) + ) + ) + ) + (set_local $12 + (i32.or + (get_local $27) + (i32.const 2) + ) + ) + (i32.store8 + (i32.add + (get_local $5) + (i32.const -1) + ) + (i32.add + (i32.and + (i32.shr_s + (get_local $7) + (i32.const 31) + ) + (i32.const 2) + ) + (i32.const 43) + ) + ) + (i32.store8 + (tee_local $8 + (i32.add + (get_local $5) + (i32.const -2) + ) + ) + (i32.add + (get_local $18) + (i32.const 15) + ) + ) + (set_local $18 + (i32.lt_s + (get_local $6) + (i32.const 1) + ) + ) + (set_local $17 + (i32.eqz + (i32.and + (get_local $11) + (i32.const 8) + ) + ) + ) + (set_local $5 + (get_local $22) + ) + (loop $while-in56 + (i32.store8 + (get_local $5) + (i32.or + (i32.load8_u + (i32.add + (tee_local $7 + (call $f64-to-int + (get_local $15) + ) + ) + (i32.const 4075) + ) + ) + (get_local $13) + ) + ) + (set_local $15 + (f64.mul + (f64.sub + (get_local $15) + (f64.convert_s/i32 + (get_local $7) + ) + ) + (f64.const 16) + ) + ) + (set_local $5 + (block $do-once57 (result i32) + (if (result i32) + (i32.eq + (i32.sub + (tee_local $7 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (get_local $37) + ) + (i32.const 1) + ) + (block (result i32) + (drop + (br_if $do-once57 + (get_local $7) + (i32.and + (get_local $17) + (i32.and + (get_local $18) + (f64.eq + (get_local $15) + (f64.const 0) + ) + ) + ) + ) + ) + (i32.store8 + (get_local $7) + (i32.const 46) + ) + (i32.add + (get_local $5) + (i32.const 2) + ) + ) + (get_local $7) + ) + ) + ) + (br_if $while-in56 + (f64.ne + (get_local $15) + (f64.const 0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (tee_local $7 + (i32.add + (tee_local $6 + (select + (i32.sub + (i32.add + (get_local $47) + (get_local $6) + ) + (get_local $8) + ) + (i32.add + (i32.sub + (get_local $45) + (get_local $8) + ) + (get_local $5) + ) + (i32.and + (i32.ne + (get_local $6) + (i32.const 0) + ) + (i32.lt_s + (i32.add + (get_local $46) + (get_local $5) + ) + (get_local $6) + ) + ) + ) + ) + (get_local $12) + ) + ) + (get_local $11) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $9) + (get_local $12) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $11) + (i32.const 65536) + ) + ) + (set_local $5 + (i32.sub + (get_local $5) + (get_local $37) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $22) + (get_local $5) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.sub + (get_local $6) + (i32.add + (get_local $5) + (tee_local $5 + (i32.sub + (get_local $28) + (get_local $8) + ) + ) + ) + ) + (i32.const 0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $8) + (get_local $5) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (br $do-once49 + (select + (get_local $14) + (get_local $7) + (i32.lt_s + (get_local $7) + (get_local $14) + ) + ) + ) + ) + ) + (set_local $15 + (if (result f64) + (get_local $5) + (block (result f64) + (i32.store + (get_local $20) + (tee_local $5 + (i32.add + (i32.load + (get_local $20) + ) + (i32.const -28) + ) + ) + ) + (f64.mul + (get_local $23) + (f64.const 268435456) + ) + ) + (block (result f64) + (set_local $5 + (i32.load + (get_local $20) + ) + ) + (get_local $23) + ) + ) + ) + (set_local $7 + (tee_local $8 + (select + (get_local $48) + (get_local $49) + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + ) + ) + ) + (loop $while-in60 + (i32.store + (get_local $7) + (tee_local $5 + (call $f64-to-uint + (get_local $15) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (br_if $while-in60 + (f64.ne + (tee_local $15 + (f64.mul + (f64.sub + (get_local $15) + (f64.convert_u/i32 + (get_local $5) + ) + ) + (f64.const 1e9) + ) + ) + (f64.const 0) + ) + ) + ) + (if + (i32.gt_s + (tee_local $9 + (i32.load + (get_local $20) + ) + ) + (i32.const 0) + ) + (block + (set_local $5 + (get_local $8) + ) + (loop $while-in62 + (set_local $13 + (select + (i32.const 29) + (get_local $9) + (i32.gt_s + (get_local $9) + (i32.const 29) + ) + ) + ) + (block $do-once63 + (if + (i32.ge_u + (tee_local $9 + (i32.add + (get_local $7) + (i32.const -4) + ) + ) + (get_local $5) + ) + (block + (set_local $12 + (i32.const 0) + ) + (loop $while-in66 + (i32.store + (get_local $9) + (call $___uremdi3 + (tee_local $12 + (call $_i64Add + (call $_bitshift64Shl + (i32.load + (get_local $9) + ) + (i32.const 0) + (get_local $13) + ) + (get_global $tempRet0) + (get_local $12) + (i32.const 0) + ) + ) + (tee_local $17 + (get_global $tempRet0) + ) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (set_local $12 + (call $___udivdi3 + (get_local $12) + (get_local $17) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (br_if $while-in66 + (i32.ge_u + (tee_local $9 + (i32.add + (get_local $9) + (i32.const -4) + ) + ) + (get_local $5) + ) + ) + ) + (br_if $do-once63 + (i32.eqz + (get_local $12) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -4) + ) + ) + (get_local $12) + ) + ) + ) + ) + (loop $while-in68 + (if + (i32.gt_u + (get_local $7) + (get_local $5) + ) + (if + (i32.eqz + (i32.load + (tee_local $9 + (i32.add + (get_local $7) + (i32.const -4) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $9) + ) + (br $while-in68) + ) + ) + ) + ) + (i32.store + (get_local $20) + (tee_local $9 + (i32.sub + (i32.load + (get_local $20) + ) + (get_local $13) + ) + ) + ) + (br_if $while-in62 + (i32.gt_s + (get_local $9) + (i32.const 0) + ) + ) + ) + ) + (set_local $5 + (get_local $8) + ) + ) + (set_local $17 + (select + (i32.const 6) + (get_local $6) + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + ) + ) + (if + (i32.lt_s + (get_local $9) + (i32.const 0) + ) + (block + (set_local $21 + (i32.add + (call $i32s-div + (i32.add + (get_local $17) + (i32.const 25) + ) + (i32.const 9) + ) + (i32.const 1) + ) + ) + (set_local $32 + (i32.eq + (get_local $24) + (i32.const 102) + ) + ) + (set_local $6 + (get_local $5) + ) + (set_local $5 + (get_local $7) + ) + (loop $while-in70 + (set_local $13 + (select + (i32.const 9) + (tee_local $7 + (i32.sub + (i32.const 0) + (get_local $9) + ) + ) + (i32.gt_s + (get_local $7) + (i32.const 9) + ) + ) + ) + (block $do-once71 + (if + (i32.lt_u + (get_local $6) + (get_local $5) + ) + (block + (set_local $12 + (i32.add + (i32.shl + (i32.const 1) + (get_local $13) + ) + (i32.const -1) + ) + ) + (set_local $38 + (i32.shr_u + (i32.const 1000000000) + (get_local $13) + ) + ) + (set_local $9 + (i32.const 0) + ) + (set_local $7 + (get_local $6) + ) + (loop $while-in74 + (i32.store + (get_local $7) + (i32.add + (i32.shr_u + (tee_local $33 + (i32.load + (get_local $7) + ) + ) + (get_local $13) + ) + (get_local $9) + ) + ) + (set_local $9 + (i32.mul + (i32.and + (get_local $33) + (get_local $12) + ) + (get_local $38) + ) + ) + (br_if $while-in74 + (i32.lt_u + (tee_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (get_local $5) + ) + ) + ) + (set_local $7 + (select + (get_local $6) + (i32.add + (get_local $6) + (i32.const 4) + ) + (i32.load + (get_local $6) + ) + ) + ) + (br_if $do-once71 + (i32.eqz + (get_local $9) + ) + ) + (i32.store + (get_local $5) + (get_local $9) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + ) + (set_local $7 + (select + (get_local $6) + (i32.add + (get_local $6) + (i32.const 4) + ) + (i32.load + (get_local $6) + ) + ) + ) + ) + ) + (set_local $12 + (select + (i32.add + (tee_local $6 + (select + (get_local $8) + (get_local $7) + (get_local $32) + ) + ) + (i32.shl + (get_local $21) + (i32.const 2) + ) + ) + (get_local $5) + (i32.gt_s + (i32.shr_s + (i32.sub + (get_local $5) + (get_local $6) + ) + (i32.const 2) + ) + (get_local $21) + ) + ) + ) + (i32.store + (get_local $20) + (tee_local $9 + (i32.add + (i32.load + (get_local $20) + ) + (get_local $13) + ) + ) + ) + (if + (i32.lt_s + (get_local $9) + (i32.const 0) + ) + (block + (set_local $6 + (get_local $7) + ) + (set_local $5 + (get_local $12) + ) + (br $while-in70) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $9 + (get_local $12) + ) + ) + ) + ) + ) + (set_local $9 + (get_local $7) + ) + ) + (set_local $21 + (get_local $8) + ) + (block $do-once75 + (if + (i32.lt_u + (get_local $5) + (get_local $9) + ) + (block + (set_local $7 + (i32.mul + (i32.shr_s + (i32.sub + (get_local $21) + (get_local $5) + ) + (i32.const 2) + ) + (i32.const 9) + ) + ) + (br_if $do-once75 + (i32.lt_u + (tee_local $12 + (i32.load + (get_local $5) + ) + ) + (i32.const 10) + ) + ) + (set_local $6 + (i32.const 10) + ) + (loop $while-in78 + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br_if $while-in78 + (i32.ge_u + (get_local $12) + (tee_local $6 + (i32.mul + (get_local $6) + (i32.const 10) + ) + ) + ) + ) + ) + ) + (set_local $7 + (i32.const 0) + ) + ) + ) + (set_local $5 + (if (result i32) + (i32.lt_s + (tee_local $6 + (i32.add + (i32.sub + (get_local $17) + (select + (get_local $7) + (i32.const 0) + (i32.ne + (get_local $24) + (i32.const 102) + ) + ) + ) + (i32.shr_s + (i32.shl + (i32.and + (tee_local $32 + (i32.ne + (get_local $17) + (i32.const 0) + ) + ) + (tee_local $38 + (i32.eq + (get_local $24) + (i32.const 103) + ) + ) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + ) + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (get_local $9) + (get_local $21) + ) + (i32.const 2) + ) + (i32.const 9) + ) + (i32.const -9) + ) + ) + (block (result i32) + (set_local $13 + (call $i32s-div + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 9216) + ) + ) + (i32.const 9) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.add + (i32.rem_s + (get_local $6) + (i32.const 9) + ) + (i32.const 1) + ) + ) + (i32.const 9) + ) + (block + (set_local $12 + (i32.const 10) + ) + (loop $while-in80 + (set_local $12 + (i32.mul + (get_local $12) + (i32.const 10) + ) + ) + (br_if $while-in80 + (i32.ne + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (i32.const 9) + ) + ) + ) + ) + (set_local $12 + (i32.const 10) + ) + ) + (set_local $13 + (call $i32u-rem + (tee_local $24 + (i32.load + (tee_local $6 + (i32.add + (i32.add + (get_local $8) + (i32.shl + (get_local $13) + (i32.const 2) + ) + ) + (i32.const -4092) + ) + ) + ) + ) + (get_local $12) + ) + ) + (block $do-once81 + (if + (i32.eqz + (i32.and + (tee_local $33 + (i32.eq + (i32.add + (get_local $6) + (i32.const 4) + ) + (get_local $9) + ) + ) + (i32.eqz + (get_local $13) + ) + ) + ) + (block + (set_local $50 + (call $i32u-div + (get_local $24) + (get_local $12) + ) + ) + (set_local $15 + (if (result f64) + (i32.lt_u + (get_local $13) + (tee_local $51 + (call $i32s-div + (get_local $12) + (i32.const 2) + ) + ) + ) + (f64.const 0.5) + (select + (f64.const 1) + (f64.const 1.5) + (i32.and + (get_local $33) + (i32.eq + (get_local $13) + (get_local $51) + ) + ) + ) + ) + ) + (set_local $23 + (select + (f64.const 9007199254740994) + (f64.const 9007199254740992) + (i32.and + (get_local $50) + (i32.const 1) + ) + ) + ) + (block $do-once83 + (if + (get_local $27) + (block + (br_if $do-once83 + (i32.ne + (i32.load8_s + (get_local $31) + ) + (i32.const 45) + ) + ) + (set_local $23 + (f64.neg + (get_local $23) + ) + ) + (set_local $15 + (f64.neg + (get_local $15) + ) + ) + ) + ) + ) + (i32.store + (get_local $6) + (tee_local $13 + (i32.sub + (get_local $24) + (get_local $13) + ) + ) + ) + (br_if $do-once81 + (f64.eq + (f64.add + (get_local $23) + (get_local $15) + ) + (get_local $23) + ) + ) + (i32.store + (get_local $6) + (tee_local $7 + (i32.add + (get_local $13) + (get_local $12) + ) + ) + ) + (if + (i32.gt_u + (get_local $7) + (i32.const 999999999) + ) + (loop $while-in86 + (i32.store + (get_local $6) + (i32.const 0) + ) + (if + (i32.lt_u + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -4) + ) + ) + (get_local $5) + ) + (i32.store + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -4) + ) + ) + (i32.const 0) + ) + ) + (i32.store + (get_local $6) + (tee_local $7 + (i32.add + (i32.load + (get_local $6) + ) + (i32.const 1) + ) + ) + ) + (br_if $while-in86 + (i32.gt_u + (get_local $7) + (i32.const 999999999) + ) + ) + ) + ) + (set_local $7 + (i32.mul + (i32.shr_s + (i32.sub + (get_local $21) + (get_local $5) + ) + (i32.const 2) + ) + (i32.const 9) + ) + ) + (br_if $do-once81 + (i32.lt_u + (tee_local $13 + (i32.load + (get_local $5) + ) + ) + (i32.const 10) + ) + ) + (set_local $12 + (i32.const 10) + ) + (loop $while-in88 + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br_if $while-in88 + (i32.ge_u + (get_local $13) + (tee_local $12 + (i32.mul + (get_local $12) + (i32.const 10) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $12 + (get_local $5) + ) + (set_local $13 + (get_local $7) + ) + (select + (tee_local $5 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (get_local $9) + (i32.gt_u + (get_local $9) + (get_local $5) + ) + ) + ) + (block (result i32) + (set_local $12 + (get_local $5) + ) + (set_local $13 + (get_local $7) + ) + (get_local $9) + ) + ) + ) + (set_local $33 + (i32.sub + (i32.const 0) + (get_local $13) + ) + ) + (loop $while-in90 + (block $while-out89 + (if + (i32.le_u + (get_local $5) + (get_local $12) + ) + (block + (set_local $24 + (i32.const 0) + ) + (set_local $9 + (get_local $5) + ) + (br $while-out89) + ) + ) + (if + (i32.load + (tee_local $7 + (i32.add + (get_local $5) + (i32.const -4) + ) + ) + ) + (block + (set_local $24 + (i32.const 1) + ) + (set_local $9 + (get_local $5) + ) + ) + (block + (set_local $5 + (get_local $7) + ) + (br $while-in90) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (tee_local $13 + (i32.add + (i32.add + (i32.add + (i32.add + (get_local $27) + (i32.const 1) + ) + (tee_local $5 + (block $do-once91 (result i32) + (if (result i32) + (get_local $38) + (block (result i32) + (set_local $7 + (if (result i32) + (i32.and + (i32.gt_s + (tee_local $5 + (i32.add + (i32.xor + (get_local $32) + (i32.const 1) + ) + (get_local $17) + ) + ) + (get_local $13) + ) + (i32.gt_s + (get_local $13) + (i32.const -5) + ) + ) + (block (result i32) + (set_local $17 + (i32.sub + (i32.add + (get_local $5) + (i32.const -1) + ) + (get_local $13) + ) + ) + (i32.add + (get_local $18) + (i32.const -1) + ) + ) + (block (result i32) + (set_local $17 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + (i32.add + (get_local $18) + (i32.const -2) + ) + ) + ) + ) + (if + (tee_local $5 + (i32.and + (get_local $11) + (i32.const 8) + ) + ) + (block + (set_local $21 + (get_local $5) + ) + (br $do-once91 + (get_local $17) + ) + ) + ) + (block $do-once93 + (if + (get_local $24) + (block + (if + (i32.eqz + (tee_local $18 + (i32.load + (i32.add + (get_local $9) + (i32.const -4) + ) + ) + ) + ) + (block + (set_local $5 + (i32.const 9) + ) + (br $do-once93) + ) + ) + (if + (call $i32u-rem + (get_local $18) + (i32.const 10) + ) + (block + (set_local $5 + (i32.const 0) + ) + (br $do-once93) + ) + (block + (set_local $6 + (i32.const 10) + ) + (set_local $5 + (i32.const 0) + ) + ) + ) + (loop $while-in96 + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (br_if $while-in96 + (i32.eqz + (call $i32u-rem + (get_local $18) + (tee_local $6 + (i32.mul + (get_local $6) + (i32.const 10) + ) + ) + ) + ) + ) + ) + ) + (set_local $5 + (i32.const 9) + ) + ) + ) + (set_local $6 + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (get_local $9) + (get_local $21) + ) + (i32.const 2) + ) + (i32.const 9) + ) + (i32.const -9) + ) + ) + (if (result i32) + (i32.eq + (i32.or + (get_local $7) + (i32.const 32) + ) + (i32.const 102) + ) + (block (result i32) + (set_local $21 + (i32.const 0) + ) + (select + (get_local $17) + (tee_local $5 + (select + (i32.const 0) + (tee_local $5 + (i32.sub + (get_local $6) + (get_local $5) + ) + ) + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + ) + ) + (i32.lt_s + (get_local $17) + (get_local $5) + ) + ) + ) + (block (result i32) + (set_local $21 + (i32.const 0) + ) + (select + (get_local $17) + (tee_local $5 + (select + (i32.const 0) + (tee_local $5 + (i32.sub + (i32.add + (get_local $6) + (get_local $13) + ) + (get_local $5) + ) + ) + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + ) + ) + (i32.lt_s + (get_local $17) + (get_local $5) + ) + ) + ) + ) + ) + (block (result i32) + (set_local $21 + (i32.and + (get_local $11) + (i32.const 8) + ) + ) + (set_local $7 + (get_local $18) + ) + (get_local $17) + ) + ) + ) + ) + ) + (i32.ne + (tee_local $32 + (i32.or + (get_local $5) + (get_local $21) + ) + ) + (i32.const 0) + ) + ) + (if (result i32) + (tee_local $17 + (i32.eq + (i32.or + (get_local $7) + (i32.const 32) + ) + (i32.const 102) + ) + ) + (block (result i32) + (set_local $18 + (i32.const 0) + ) + (select + (get_local $13) + (i32.const 0) + (i32.gt_s + (get_local $13) + (i32.const 0) + ) + ) + ) + (block (result i32) + (if + (i32.lt_s + (i32.sub + (get_local $28) + (tee_local $6 + (call $_fmt_u + (tee_local $6 + (select + (get_local $33) + (get_local $13) + (i32.lt_s + (get_local $13) + (i32.const 0) + ) + ) + ) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + (get_local $34) + ) + ) + ) + (i32.const 2) + ) + (loop $while-in98 + (i32.store8 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in98 + (i32.lt_s + (i32.sub + (get_local $28) + (get_local $6) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store8 + (i32.add + (get_local $6) + (i32.const -1) + ) + (i32.add + (i32.and + (i32.shr_s + (get_local $13) + (i32.const 31) + ) + (i32.const 2) + ) + (i32.const 43) + ) + ) + (i32.store8 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -2) + ) + ) + (get_local $7) + ) + (set_local $18 + (get_local $6) + ) + (i32.sub + (get_local $28) + (get_local $6) + ) + ) + ) + ) + ) + (get_local $11) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $31) + (get_local $27) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $14) + (get_local $13) + (i32.xor + (get_local $11) + (i32.const 65536) + ) + ) + (block $do-once99 + (if + (get_local $17) + (block + (set_local $6 + (tee_local $12 + (select + (get_local $8) + (get_local $12) + (i32.gt_u + (get_local $12) + (get_local $8) + ) + ) + ) + ) + (loop $while-in102 + (set_local $7 + (call $_fmt_u + (i32.load + (get_local $6) + ) + (i32.const 0) + (get_local $30) + ) + ) + (block $do-once103 + (if + (i32.eq + (get_local $6) + (get_local $12) + ) + (block + (br_if $do-once103 + (i32.ne + (get_local $7) + (get_local $30) + ) + ) + (i32.store8 + (get_local $35) + (i32.const 48) + ) + (set_local $7 + (get_local $35) + ) + ) + (block + (br_if $do-once103 + (i32.le_u + (get_local $7) + (get_local $22) + ) + ) + (loop $while-in106 + (i32.store8 + (tee_local $7 + (i32.add + (get_local $7) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in106 + (i32.gt_u + (get_local $7) + (get_local $22) + ) + ) + ) + ) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $7) + (i32.sub + (get_local $43) + (get_local $7) + ) + (get_local $0) + ) + ) + ) + (if + (i32.le_u + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (get_local $8) + ) + (block + (set_local $6 + (get_local $7) + ) + (br $while-in102) + ) + ) + ) + (block $do-once107 + (if + (get_local $32) + (block + (br_if $do-once107 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $0) + ) + ) + ) + ) + ) + (if + (i32.and + (i32.gt_s + (get_local $5) + (i32.const 0) + ) + (i32.lt_u + (get_local $7) + (get_local $9) + ) + ) + (loop $while-in110 + (if + (i32.gt_u + (tee_local $6 + (call $_fmt_u + (i32.load + (get_local $7) + ) + (i32.const 0) + (get_local $30) + ) + ) + (get_local $22) + ) + (loop $while-in112 + (i32.store8 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in112 + (i32.gt_u + (get_local $6) + (get_local $22) + ) + ) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $6) + (select + (i32.const 9) + (get_local $5) + (i32.gt_s + (get_local $5) + (i32.const 9) + ) + ) + (get_local $0) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $5) + (i32.const -9) + ) + ) + (if + (i32.and + (i32.gt_s + (get_local $5) + (i32.const 9) + ) + (i32.lt_u + (tee_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (get_local $9) + ) + ) + (block + (set_local $5 + (get_local $6) + ) + (br $while-in110) + ) + (set_local $5 + (get_local $6) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.add + (get_local $5) + (i32.const 9) + ) + (i32.const 9) + (i32.const 0) + ) + ) + (block + (set_local $9 + (select + (get_local $9) + (i32.add + (get_local $12) + (i32.const 4) + ) + (get_local $24) + ) + ) + (if + (i32.gt_s + (get_local $5) + (i32.const -1) + ) + (block + (set_local $17 + (i32.eqz + (get_local $21) + ) + ) + (set_local $6 + (get_local $12) + ) + (set_local $7 + (get_local $5) + ) + (loop $while-in114 + (if + (i32.eq + (tee_local $5 + (call $_fmt_u + (i32.load + (get_local $6) + ) + (i32.const 0) + (get_local $30) + ) + ) + (get_local $30) + ) + (block + (i32.store8 + (get_local $35) + (i32.const 48) + ) + (set_local $5 + (get_local $35) + ) + ) + ) + (block $do-once115 + (if + (i32.eq + (get_local $6) + (get_local $12) + ) + (block + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $5) + (i32.const 1) + (get_local $0) + ) + ) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (br_if $do-once115 + (i32.and + (get_local $17) + (i32.lt_s + (get_local $7) + (i32.const 1) + ) + ) + ) + (br_if $do-once115 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $0) + ) + ) + ) + (block + (br_if $do-once115 + (i32.le_u + (get_local $5) + (get_local $22) + ) + ) + (loop $while-in118 + (i32.store8 + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in118 + (i32.gt_u + (get_local $5) + (get_local $22) + ) + ) + ) + ) + ) + ) + (set_local $8 + (i32.sub + (get_local $43) + (get_local $5) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $5) + (select + (get_local $8) + (get_local $7) + (i32.gt_s + (get_local $7) + (get_local $8) + ) + ) + (get_local $0) + ) + ) + ) + (br_if $while-in114 + (i32.and + (i32.lt_u + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (get_local $9) + ) + (i32.gt_s + (tee_local $7 + (i32.sub + (get_local $7) + (get_local $8) + ) + ) + (i32.const -1) + ) + ) + ) + (set_local $5 + (get_local $7) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.add + (get_local $5) + (i32.const 18) + ) + (i32.const 18) + (i32.const 0) + ) + (br_if $do-once99 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $18) + (i32.sub + (get_local $28) + (get_local $18) + ) + (get_local $0) + ) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $13) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (select + (get_local $14) + (get_local $13) + (i32.lt_s + (get_local $13) + (get_local $14) + ) + ) + ) + (block (result i32) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (tee_local $7 + (i32.add + (tee_local $9 + (select + (i32.const 0) + (get_local $27) + (tee_local $6 + (i32.or + (f64.ne + (get_local $15) + (get_local $15) + ) + (i32.const 0) + ) + ) + ) + ) + (i32.const 3) + ) + ) + (get_local $8) + ) + (if + (i32.eqz + (i32.and + (tee_local $5 + (i32.load + (get_local $0) + ) + ) + (i32.const 32) + ) + ) + (block + (drop + (call $___fwritex + (get_local $31) + (get_local $9) + (get_local $0) + ) + ) + (set_local $5 + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $6 + (select + (select + (i32.const 4135) + (i32.const 4139) + (tee_local $8 + (i32.ne + (i32.and + (get_local $18) + (i32.const 32) + ) + (i32.const 0) + ) + ) + ) + (select + (i32.const 4127) + (i32.const 4131) + (get_local $8) + ) + (get_local $6) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $5) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $6) + (i32.const 3) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (select + (get_local $14) + (get_local $7) + (i32.lt_s + (get_local $7) + (get_local $14) + ) + ) + ) + ) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (set_local $7 + (get_local $5) + ) + (set_local $12 + (get_local $6) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjto$8 + (get_local $26) + ) + ) + (set_local $9 + (i32.and + (get_local $18) + (i32.const 32) + ) + ) + (if + (i32.and + (i32.eqz + (tee_local $8 + (i32.load + (tee_local $5 + (get_local $19) + ) + ) + ) + ) + (i32.eqz + (tee_local $11 + (i32.load offset=4 + (get_local $5) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $26) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$8) + ) + (block + (set_local $5 + (get_local $8) + ) + (set_local $8 + (get_local $26) + ) + (loop $while-in123 + (i32.store8 + (tee_local $8 + (i32.add + (get_local $8) + (i32.const -1) + ) + ) + (i32.or + (i32.load8_u + (i32.add + (i32.and + (get_local $5) + (i32.const 15) + ) + (i32.const 4075) + ) + ) + (get_local $9) + ) + ) + (br_if $while-in123 + (i32.eqz + (i32.and + (i32.eqz + (tee_local $5 + (call $_bitshift64Lshr + (get_local $5) + (get_local $11) + (i32.const 4) + ) + ) + ) + (i32.eqz + (tee_local $11 + (get_global $tempRet0) + ) + ) + ) + ) + ) + (set_local $5 + (get_local $8) + ) + ) + (set_local $8 + (if (result i32) + (i32.or + (i32.eqz + (i32.and + (get_local $7) + (i32.const 8) + ) + ) + (i32.and + (i32.eqz + (i32.load + (tee_local $11 + (get_local $19) + ) + ) + ) + (i32.eqz + (i32.load offset=4 + (get_local $11) + ) + ) + ) + ) + (block (result i32) + (set_local $9 + (i32.const 4091) + ) + (i32.const 0) + ) + (block (result i32) + (set_local $9 + (i32.add + (i32.shr_s + (get_local $18) + (i32.const 4) + ) + (i32.const 4091) + ) + ) + (i32.const 2) + ) + ) + ) + (br $__rjti$8) + ) + ) + ) + (set_local $5 + (call $_fmt_u + (get_local $5) + (get_local $7) + (get_local $26) + ) + ) + (set_local $7 + (get_local $11) + ) + (br $__rjti$8) + ) + (set_local $18 + (i32.eqz + (tee_local $13 + (call $_memchr + (get_local $5) + (i32.const 0) + (get_local $6) + ) + ) + ) + ) + (set_local $7 + (get_local $5) + ) + (set_local $11 + (get_local $8) + ) + (set_local $12 + (select + (get_local $6) + (i32.sub + (get_local $13) + (get_local $5) + ) + (get_local $18) + ) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjto$8 + (select + (i32.add + (get_local $5) + (get_local $6) + ) + (get_local $13) + (get_local $18) + ) + ) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $6 + (i32.load + (get_local $19) + ) + ) + (loop $while-in125 + (block $while-out124 + (br_if $while-out124 + (i32.eqz + (tee_local $9 + (i32.load + (get_local $6) + ) + ) + ) + ) + (br_if $while-out124 + (i32.or + (i32.lt_s + (tee_local $7 + (call $_wctomb + (get_local $36) + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.gt_u + (get_local $7) + (i32.sub + (get_local $8) + (get_local $5) + ) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (br_if $while-in125 + (i32.gt_u + (get_local $8) + (tee_local $5 + (i32.add + (get_local $7) + (get_local $5) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_s + (get_local $7) + (i32.const 0) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $5) + (get_local $11) + ) + (if + (get_local $5) + (block + (set_local $6 + (i32.const 0) + ) + (set_local $7 + (i32.load + (get_local $19) + ) + ) + (loop $while-in127 + (if + (i32.eqz + (tee_local $8 + (i32.load + (get_local $7) + ) + ) + ) + (block + (set_local $7 + (get_local $5) + ) + (br $__rjti$7) + ) + ) + (if + (i32.gt_s + (tee_local $6 + (i32.add + (tee_local $8 + (call $_wctomb + (get_local $36) + (get_local $8) + ) + ) + (get_local $6) + ) + ) + (get_local $5) + ) + (block + (set_local $7 + (get_local $5) + ) + (br $__rjti$7) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $36) + (get_local $8) + (get_local $0) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (br_if $while-in127 + (i32.lt_u + (get_local $6) + (get_local $5) + ) + ) + (set_local $7 + (get_local $5) + ) + ) + ) + (set_local $7 + (i32.const 0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (select + (get_local $14) + (get_local $7) + (i32.gt_s + (get_local $14) + (get_local $7) + ) + ) + ) + (br $label$continue$L1) + ) + (set_local $11 + (select + (i32.and + (get_local $7) + (i32.const -65537) + ) + (get_local $7) + (i32.gt_s + (get_local $6) + (i32.const -1) + ) + ) + ) + (set_local $12 + (if (result i32) + (i32.or + (get_local $6) + (tee_local $12 + (i32.or + (i32.ne + (i32.load + (tee_local $7 + (get_local $19) + ) + ) + (i32.const 0) + ) + (i32.ne + (i32.load offset=4 + (get_local $7) + ) + (i32.const 0) + ) + ) + ) + ) + (block (result i32) + (set_local $7 + (get_local $5) + ) + (select + (get_local $6) + (tee_local $5 + (i32.add + (i32.xor + (i32.and + (get_local $12) + (i32.const 1) + ) + (i32.const 1) + ) + (i32.sub + (get_local $39) + (get_local $5) + ) + ) + ) + (i32.gt_s + (get_local $6) + (get_local $5) + ) + ) + ) + (block (result i32) + (set_local $7 + (get_local $26) + ) + (i32.const 0) + ) + ) + ) + (get_local $26) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (tee_local $6 + (select + (tee_local $5 + (i32.add + (get_local $8) + (tee_local $12 + (select + (tee_local $13 + (i32.sub + (get_local $5) + (get_local $7) + ) + ) + (get_local $12) + (i32.lt_s + (get_local $12) + (get_local $13) + ) + ) + ) + ) + ) + (get_local $14) + (i32.lt_s + (get_local $14) + (get_local $5) + ) + ) + ) + (get_local $5) + (get_local $11) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $9) + (get_local $8) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $6) + (get_local $5) + (i32.xor + (get_local $11) + (i32.const 65536) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $12) + (get_local $13) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $7) + (get_local $13) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $6) + (get_local $5) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $6) + ) + (br $label$continue$L1) + ) + ) + (br $label$break$L343) + ) + (if + (i32.eqz + (get_local $0) + ) + (if + (get_local $1) + (block + (set_local $0 + (i32.const 1) + ) + (loop $while-in130 + (if + (tee_local $1 + (i32.load + (i32.add + (get_local $4) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + ) + ) + (block + (call $_pop_arg_336 + (i32.add + (get_local $3) + (i32.shl + (get_local $0) + (i32.const 3) + ) + ) + (get_local $1) + (get_local $2) + ) + (br_if $while-in130 + (i32.lt_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.const 10) + ) + ) + (set_local $16 + (i32.const 1) + ) + (br $label$break$L343) + ) + ) + ) + (if + (i32.lt_s + (get_local $0) + (i32.const 10) + ) + (loop $while-in132 + (if + (i32.load + (i32.add + (get_local $4) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L343) + ) + ) + (br_if $while-in132 + (i32.lt_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.const 10) + ) + ) + (set_local $16 + (i32.const 1) + ) + ) + (set_local $16 + (i32.const 1) + ) + ) + ) + (set_local $16 + (i32.const 0) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $25) + ) + (get_local $16) + ) + (func $_pop_arg_336 (; 52 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 f64) + (local $5 i32) + (block $label$break$L1 + (if + (i32.le_u + (get_local $1) + (i32.const 20) + ) + (block $switch-default + (block $switch-case9 + (block $switch-case8 + (block $switch-case7 + (block $switch-case6 + (block $switch-case5 + (block $switch-case4 + (block $switch-case3 + (block $switch-case2 + (block $switch-case1 + (block $switch-case + (br_table $switch-case $switch-case1 $switch-case2 $switch-case3 $switch-case4 $switch-case5 $switch-case6 $switch-case7 $switch-case8 $switch-case9 $switch-default + (i32.sub + (get_local $1) + (i32.const 9) + ) + ) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + (br $label$break$L1) + ) + (set_local $1 + (i32.load + (tee_local $3 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $1) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $5 + (i32.load + (tee_local $3 + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + ) + (set_local $3 + (i32.load offset=4 + (get_local $3) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (i32.store + (get_local $0) + (get_local $5) + ) + (i32.store offset=4 + (get_local $0) + (get_local $3) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (tee_local $1 + (i32.shr_s + (i32.shl + (i32.and + (get_local $3) + (i32.const 65535) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $3) + (i32.const 65535) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (tee_local $1 + (i32.shr_s + (i32.shl + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $4 + (f64.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (f64.store + (get_local $0) + (get_local $4) + ) + (br $label$break$L1) + ) + (set_local $4 + (f64.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (f64.store + (get_local $0) + (get_local $4) + ) + ) + ) + ) + ) + (func $_fmt_u (; 53 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (if + (i32.or + (i32.gt_u + (get_local $1) + (i32.const 0) + ) + (i32.and + (i32.eqz + (get_local $1) + ) + (i32.gt_u + (get_local $0) + (i32.const -1) + ) + ) + ) + (loop $while-in + (i32.store8 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.or + (tee_local $3 + (call $___uremdi3 + (get_local $0) + (get_local $1) + (i32.const 10) + (i32.const 0) + ) + ) + (i32.const 48) + ) + ) + (set_local $3 + (call $___udivdi3 + (get_local $0) + (get_local $1) + (i32.const 10) + (i32.const 0) + ) + ) + (set_local $4 + (get_global $tempRet0) + ) + (if + (i32.or + (i32.gt_u + (get_local $1) + (i32.const 9) + ) + (i32.and + (i32.eq + (get_local $1) + (i32.const 9) + ) + (i32.gt_u + (get_local $0) + (i32.const -1) + ) + ) + ) + (block + (set_local $0 + (get_local $3) + ) + (set_local $1 + (get_local $4) + ) + (br $while-in) + ) + (set_local $0 + (get_local $3) + ) + ) + ) + ) + (if + (get_local $0) + (loop $while-in1 + (i32.store8 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.or + (call $i32u-rem + (get_local $0) + (i32.const 10) + ) + (i32.const 48) + ) + ) + (set_local $1 + (call $i32u-div + (get_local $0) + (i32.const 10) + ) + ) + (if + (i32.ge_u + (get_local $0) + (i32.const 10) + ) + (block + (set_local $0 + (get_local $1) + ) + (br $while-in1) + ) + ) + ) + ) + (get_local $2) + ) + (func $_pad (; 54 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 256) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $6 + (get_local $7) + ) + (block $do-once + (if + (i32.and + (i32.gt_s + (get_local $2) + (get_local $3) + ) + (i32.eqz + (i32.and + (get_local $4) + (i32.const 73728) + ) + ) + ) + (block + (drop + (call $_memset + (get_local $6) + (get_local $1) + (select + (i32.const 256) + (tee_local $5 + (i32.sub + (get_local $2) + (get_local $3) + ) + ) + (i32.gt_u + (get_local $5) + (i32.const 256) + ) + ) + ) + ) + (set_local $4 + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.const 32) + ) + ) + ) + (if + (i32.gt_u + (get_local $5) + (i32.const 255) + ) + (block + (loop $while-in + (if + (get_local $4) + (block + (drop + (call $___fwritex + (get_local $6) + (i32.const 256) + (get_local $0) + ) + ) + (set_local $1 + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $4 + (i32.eqz + (i32.and + (get_local $1) + (i32.const 32) + ) + ) + ) + (br_if $while-in + (i32.gt_u + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -256) + ) + ) + (i32.const 255) + ) + ) + ) + (br_if $do-once + (i32.eqz + (get_local $4) + ) + ) + (set_local $5 + (i32.and + (i32.sub + (get_local $2) + (get_local $3) + ) + (i32.const 255) + ) + ) + ) + (br_if $do-once + (i32.eqz + (get_local $4) + ) + ) + ) + (drop + (call $___fwritex + (get_local $6) + (get_local $5) + (get_local $0) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + ) + (func $_malloc (; 55 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (block $folding-inner0 + (block $do-once + (if + (i32.lt_u + (get_local $0) + (i32.const 245) + ) + (block + (if + (i32.and + (tee_local $5 + (i32.shr_u + (tee_local $11 + (i32.load + (i32.const 176) + ) + ) + (tee_local $13 + (i32.shr_u + (tee_local $4 + (select + (i32.const 16) + (i32.and + (i32.add + (get_local $0) + (i32.const 11) + ) + (i32.const -8) + ) + (i32.lt_u + (get_local $0) + (i32.const 11) + ) + ) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 3) + ) + (block + (set_local $10 + (i32.load + (tee_local $1 + (i32.add + (tee_local $7 + (i32.load + (tee_local $3 + (i32.add + (tee_local $2 + (i32.add + (i32.shl + (tee_local $4 + (i32.add + (i32.xor + (i32.and + (get_local $5) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $13) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $2) + (get_local $10) + ) + (i32.store + (i32.const 176) + (i32.and + (get_local $11) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $4) + ) + (i32.const -1) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + ) + (get_local $7) + ) + (block + (i32.store + (get_local $0) + (get_local $2) + ) + (i32.store + (get_local $3) + (get_local $10) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=4 + (get_local $7) + (i32.or + (tee_local $0 + (i32.shl + (get_local $4) + (i32.const 3) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $7) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + (return + (get_local $1) + ) + ) + ) + (if + (i32.gt_u + (get_local $4) + (tee_local $0 + (i32.load + (i32.const 184) + ) + ) + ) + (block + (if + (get_local $5) + (block + (set_local $10 + (i32.and + (i32.shr_u + (tee_local $3 + (i32.add + (i32.and + (tee_local $3 + (i32.and + (i32.shl + (get_local $5) + (get_local $13) + ) + (i32.or + (tee_local $3 + (i32.shl + (i32.const 2) + (get_local $13) + ) + ) + (i32.sub + (i32.const 0) + (get_local $3) + ) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $3) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $9 + (i32.load + (tee_local $7 + (i32.add + (tee_local $12 + (i32.load + (tee_local $3 + (i32.add + (tee_local $10 + (i32.add + (i32.shl + (tee_local $5 + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $3) + (get_local $10) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $10) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $10) + (get_local $9) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (get_local $11) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $8 + (get_local $0) + ) + ) + (block + (if + (i32.lt_u + (get_local $9) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $9) + (i32.const 12) + ) + ) + ) + (get_local $12) + ) + (block + (i32.store + (get_local $0) + (get_local $10) + ) + (i32.store + (get_local $3) + (get_local $9) + ) + (set_local $8 + (i32.load + (i32.const 184) + ) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.or + (get_local $4) + (i32.const 3) + ) + ) + (i32.store offset=4 + (tee_local $10 + (i32.add + (get_local $12) + (get_local $4) + ) + ) + (i32.or + (tee_local $5 + (i32.sub + (i32.shl + (get_local $5) + (i32.const 3) + ) + (get_local $4) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $10) + (get_local $5) + ) + (get_local $5) + ) + (if + (get_local $8) + (block + (set_local $12 + (i32.load + (i32.const 196) + ) + ) + (set_local $4 + (i32.add + (i32.shl + (tee_local $0 + (i32.shr_u + (get_local $8) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $3 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $2 + (get_local $3) + ) + (set_local $1 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $3) + (get_local $0) + ) + ) + (set_local $2 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (set_local $1 + (get_local $4) + ) + ) + ) + (i32.store + (get_local $2) + (get_local $12) + ) + (i32.store offset=12 + (get_local $1) + (get_local $12) + ) + (i32.store offset=8 + (get_local $12) + (get_local $1) + ) + (i32.store offset=12 + (get_local $12) + (get_local $4) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $5) + ) + (i32.store + (i32.const 196) + (get_local $10) + ) + (return + (get_local $7) + ) + ) + ) + (if + (tee_local $0 + (i32.load + (i32.const 180) + ) + ) + (block + (set_local $2 + (i32.and + (i32.shr_u + (tee_local $0 + (i32.add + (i32.and + (get_local $0) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $7 + (i32.sub + (i32.and + (i32.load offset=4 + (tee_local $0 + (i32.load offset=480 + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $0) + (get_local $2) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $2) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const -8) + ) + (get_local $4) + ) + ) + (set_local $1 + (get_local $0) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (tee_local $0 + (i32.load offset=16 + (get_local $1) + ) + ) + ) + (if + (i32.eqz + (tee_local $0 + (i32.load offset=20 + (get_local $1) + ) + ) + ) + (block + (set_local $10 + (get_local $7) + ) + (set_local $5 + (get_local $2) + ) + (br $while-out) + ) + ) + ) + (set_local $10 + (i32.lt_u + (tee_local $1 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $4) + ) + ) + (get_local $7) + ) + ) + (set_local $7 + (select + (get_local $1) + (get_local $7) + (get_local $10) + ) + ) + (set_local $1 + (get_local $0) + ) + (set_local $2 + (select + (get_local $0) + (get_local $2) + (get_local $10) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (get_local $5) + (tee_local $12 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $5) + (tee_local $11 + (i32.add + (get_local $5) + (get_local $4) + ) + ) + ) + (call $_abort) + ) + (set_local $8 + (i32.load offset=24 + (get_local $5) + ) + ) + (block $do-once4 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $5) + ) + ) + (get_local $5) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $5) + (i32.const 20) + ) + ) + ) + ) + ) + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + ) + ) + (block + (set_local $9 + (i32.const 0) + ) + (br $do-once4) + ) + ) + ) + (loop $while-in7 + (if + (tee_local $2 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $0 + (get_local $7) + ) + (br $while-in7) + ) + ) + (if + (tee_local $2 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $0 + (get_local $7) + ) + (br $while-in7) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $12) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $9 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $7 + (i32.load offset=8 + (get_local $5) + ) + ) + (get_local $12) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $2 + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + ) + (get_local $5) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $5) + ) + (block + (i32.store + (get_local $2) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $7) + ) + (set_local $9 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once8 + (if + (get_local $8) + (block + (if + (i32.eq + (get_local $5) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $5) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $9) + ) + (if + (i32.eqz + (get_local $9) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $8) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + ) + (get_local $5) + ) + (i32.store + (get_local $0) + (get_local $9) + ) + (i32.store offset=20 + (get_local $8) + (get_local $9) + ) + ) + (br_if $do-once8 + (i32.eqz + (get_local $9) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $9) + (tee_local $0 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $9) + (get_local $8) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $5) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $0) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $9) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $9) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=20 + (get_local $5) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $9) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $9) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $10) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $5) + (i32.or + (tee_local $0 + (i32.add + (get_local $10) + (get_local $4) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $5) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $5) + (i32.or + (get_local $4) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $11) + (i32.or + (get_local $10) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $11) + (get_local $10) + ) + (get_local $10) + ) + (if + (tee_local $0 + (i32.load + (i32.const 184) + ) + ) + (block + (set_local $4 + (i32.load + (i32.const 196) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $0 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $6 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $6 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (set_local $3 + (get_local $2) + ) + ) + ) + (i32.store + (get_local $6) + (get_local $4) + ) + (i32.store offset=12 + (get_local $3) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $3) + ) + (i32.store offset=12 + (get_local $4) + (get_local $2) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $10) + ) + (i32.store + (i32.const 196) + (get_local $11) + ) + ) + ) + (return + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (if + (i32.gt_u + (get_local $0) + (i32.const -65) + ) + (set_local $0 + (i32.const -1) + ) + (block + (set_local $2 + (i32.and + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 11) + ) + ) + (i32.const -8) + ) + ) + (if + (tee_local $18 + (i32.load + (i32.const 180) + ) + ) + (block + (set_local $14 + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $0) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $2) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $2) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $3 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $3) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (set_local $3 + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + (block $__rjto$3 + (block $__rjti$3 + (if + (tee_local $0 + (i32.load offset=480 + (i32.shl + (get_local $14) + (i32.const 2) + ) + ) + ) + (block + (set_local $6 + (i32.const 0) + ) + (set_local $8 + (i32.shl + (get_local $2) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $14) + (i32.const 1) + ) + ) + (i32.eq + (get_local $14) + (i32.const 31) + ) + ) + ) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in14 + (if + (i32.lt_u + (tee_local $4 + (i32.sub + (tee_local $9 + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + ) + (get_local $2) + ) + ) + (get_local $3) + ) + (if + (i32.eq + (get_local $9) + (get_local $2) + ) + (block + (set_local $1 + (get_local $4) + ) + (set_local $3 + (get_local $0) + ) + (br $__rjti$3) + ) + (block + (set_local $3 + (get_local $4) + ) + (set_local $1 + (get_local $0) + ) + ) + ) + ) + (set_local $0 + (select + (get_local $6) + (tee_local $4 + (i32.load offset=20 + (get_local $0) + ) + ) + (i32.or + (i32.eqz + (get_local $4) + ) + (i32.eq + (get_local $4) + (tee_local $9 + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $8) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $4 + (i32.shl + (get_local $8) + (i32.xor + (tee_local $6 + (i32.eqz + (get_local $9) + ) + ) + (i32.const 1) + ) + ) + ) + (if + (get_local $6) + (block + (set_local $4 + (get_local $0) + ) + (set_local $0 + (get_local $1) + ) + ) + (block + (set_local $6 + (get_local $0) + ) + (set_local $8 + (get_local $4) + ) + (set_local $0 + (get_local $9) + ) + (br $while-in14) + ) + ) + ) + ) + (block + (set_local $4 + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + (if + (i32.and + (i32.eqz + (get_local $4) + ) + (i32.eqz + (get_local $0) + ) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.and + (get_local $18) + (i32.or + (tee_local $1 + (i32.shl + (i32.const 2) + (get_local $14) + ) + ) + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $2) + ) + (br $do-once) + ) + ) + (set_local $9 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.add + (i32.and + (get_local $1) + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $4 + (i32.load offset=480 + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $1) + (get_local $9) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $9) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (if + (get_local $4) + (block + (set_local $1 + (get_local $3) + ) + (set_local $3 + (get_local $4) + ) + (br $__rjti$3) + ) + (set_local $4 + (get_local $0) + ) + ) + (br $__rjto$3) + ) + (loop $while-in16 + (set_local $9 + (i32.lt_u + (tee_local $4 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const -8) + ) + (get_local $2) + ) + ) + (get_local $1) + ) + ) + (set_local $1 + (select + (get_local $4) + (get_local $1) + (get_local $9) + ) + ) + (set_local $0 + (select + (get_local $3) + (get_local $0) + (get_local $9) + ) + ) + (if + (tee_local $4 + (i32.load offset=16 + (get_local $3) + ) + ) + (block + (set_local $3 + (get_local $4) + ) + (br $while-in16) + ) + ) + (br_if $while-in16 + (tee_local $3 + (i32.load offset=20 + (get_local $3) + ) + ) + ) + (set_local $3 + (get_local $1) + ) + (set_local $4 + (get_local $0) + ) + ) + ) + (if + (get_local $4) + (if + (i32.lt_u + (get_local $3) + (i32.sub + (i32.load + (i32.const 184) + ) + (get_local $2) + ) + ) + (block + (if + (i32.lt_u + (get_local $4) + (tee_local $12 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $4) + (tee_local $6 + (i32.add + (get_local $4) + (get_local $2) + ) + ) + ) + (call $_abort) + ) + (set_local $9 + (i32.load offset=24 + (get_local $4) + ) + ) + (block $do-once17 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $4) + ) + ) + (get_local $4) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + ) + ) + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 16) + ) + ) + ) + ) + ) + (block + (set_local $11 + (i32.const 0) + ) + (br $do-once17) + ) + ) + ) + (loop $while-in20 + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $7) + ) + (set_local $0 + (get_local $10) + ) + (br $while-in20) + ) + ) + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $7) + ) + (set_local $0 + (get_local $10) + ) + (br $while-in20) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $12) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $11 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $10 + (i32.load offset=8 + (get_local $4) + ) + ) + (get_local $12) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $7 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + ) + (get_local $4) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $4) + ) + (block + (i32.store + (get_local $7) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $10) + ) + (set_local $11 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once21 + (if + (get_local $9) + (block + (if + (i32.eq + (get_local $4) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $4) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $11) + ) + (if + (i32.eqz + (get_local $11) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $9) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $9) + (i32.const 16) + ) + ) + ) + (get_local $4) + ) + (i32.store + (get_local $0) + (get_local $11) + ) + (i32.store offset=20 + (get_local $9) + (get_local $11) + ) + ) + (br_if $do-once21 + (i32.eqz + (get_local $11) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $11) + (tee_local $0 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $11) + (get_local $9) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $4) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $0) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $11) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $11) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=20 + (get_local $4) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $11) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $11) + ) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.lt_u + (get_local $3) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $4) + (i32.or + (tee_local $0 + (i32.add + (get_local $3) + (get_local $2) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $4) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $2) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $6) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $6) + (get_local $3) + ) + (get_local $3) + ) + (set_local $0 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $3) + (i32.const 256) + ) + (block + (set_local $3 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $13 + (get_local $1) + ) + (set_local $5 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $13 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $5 + (get_local $3) + ) + ) + ) + (i32.store + (get_local $13) + (get_local $6) + ) + (i32.store offset=12 + (get_local $5) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $5) + ) + (i32.store offset=12 + (get_local $6) + (get_local $3) + ) + (br $do-once25) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $7 + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $3) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $3) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $2 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $2) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $6) + (get_local $7) + ) + (i32.store offset=4 + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (i32.const 180) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $7) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $2) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $2) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once25) + ) + ) + (set_local $7 + (i32.shl + (get_local $3) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $7) + (i32.const 1) + ) + ) + (i32.eq + (get_local $7) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $2) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (loop $while-in28 + (br_if $__rjti$1 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $2 + (i32.shl + (get_local $7) + (i32.const 1) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $7 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $7) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $2) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in28) + ) + ) + ) + (if + (i32.lt_u + (get_local $7) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $7) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $0) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once25) + ) + ) + (br $__rjto$1) + ) + (if + (i32.and + (i32.ge_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $2) + (get_local $6) + ) + (i32.store + (get_local $3) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $2) + ) + (i32.store offset=12 + (get_local $6) + (get_local $0) + ) + (i32.store offset=24 + (get_local $6) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (return + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (set_local $0 + (get_local $2) + ) + ) + (set_local $0 + (get_local $2) + ) + ) + ) + (set_local $0 + (get_local $2) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (tee_local $1 + (i32.load + (i32.const 184) + ) + ) + (get_local $0) + ) + (block + (set_local $2 + (i32.load + (i32.const 196) + ) + ) + (if + (i32.gt_u + (tee_local $3 + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + (i32.const 15) + ) + (block + (i32.store + (i32.const 196) + (tee_local $1 + (i32.add + (get_local $2) + (get_local $0) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $3) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $3) + ) + (get_local $3) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + ) + (block + (i32.store + (i32.const 184) + (i32.const 0) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $1) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $2) + (get_local $1) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + ) + (return + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (br_if $folding-inner0 + (i32.gt_u + (tee_local $1 + (i32.load + (i32.const 188) + ) + ) + (get_local $0) + ) + ) + (if + (i32.eqz + (i32.load + (i32.const 648) + ) + ) + (if + (i32.and + (i32.add + (tee_local $1 + (call $_sysconf + (i32.const 30) + ) + ) + (i32.const -1) + ) + (get_local $1) + ) + (call $_abort) + (block + (i32.store + (i32.const 656) + (get_local $1) + ) + (i32.store + (i32.const 652) + (get_local $1) + ) + (i32.store + (i32.const 660) + (i32.const -1) + ) + (i32.store + (i32.const 664) + (i32.const -1) + ) + (i32.store + (i32.const 668) + (i32.const 0) + ) + (i32.store + (i32.const 620) + (i32.const 0) + ) + (i32.store + (i32.const 648) + (i32.xor + (i32.and + (call $_time + (i32.const 0) + ) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + ) + ) + ) + (if + (i32.le_u + (tee_local $5 + (i32.and + (tee_local $6 + (i32.add + (tee_local $1 + (i32.load + (i32.const 656) + ) + ) + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 47) + ) + ) + ) + ) + (tee_local $9 + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + ) + ) + (get_local $0) + ) + (return + (i32.const 0) + ) + ) + (if + (tee_local $2 + (i32.load + (i32.const 616) + ) + ) + (if + (i32.or + (i32.le_u + (tee_local $1 + (i32.add + (tee_local $3 + (i32.load + (i32.const 608) + ) + ) + (get_local $5) + ) + ) + (get_local $3) + ) + (i32.gt_u + (get_local $1) + (get_local $2) + ) + ) + (return + (i32.const 0) + ) + ) + ) + (set_local $11 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + (block $__rjto$13 + (block $__rjti$13 + (if + (i32.eqz + (i32.and + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + ) + (block + (block $label$break$L279 + (block $__rjti$5 + (block $__rjti$4 + (br_if $__rjti$4 + (i32.eqz + (tee_local $4 + (i32.load + (i32.const 200) + ) + ) + ) + ) + (set_local $1 + (i32.const 624) + ) + (loop $while-in34 + (block $while-out33 + (if + (i32.le_u + (tee_local $3 + (i32.load + (get_local $1) + ) + ) + (get_local $4) + ) + (if + (i32.gt_u + (i32.add + (get_local $3) + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + ) + ) + (get_local $4) + ) + (block + (set_local $4 + (get_local $1) + ) + (br $while-out33) + ) + ) + ) + (br_if $while-in34 + (tee_local $1 + (i32.load offset=8 + (get_local $1) + ) + ) + ) + (br $__rjti$4) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.and + (i32.sub + (get_local $6) + (i32.load + (i32.const 188) + ) + ) + (get_local $9) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (tee_local $1 + (call $_sbrk + (get_local $3) + ) + ) + (i32.add + (i32.load + (get_local $4) + ) + (i32.load + (get_local $2) + ) + ) + ) + (br_if $__rjti$13 + (i32.ne + (get_local $1) + (i32.const -1) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (br $__rjti$5) + ) + ) + ) + (br $label$break$L279) + ) + (if + (i32.ne + (tee_local $1 + (call $_sbrk + (i32.const 0) + ) + ) + (i32.const -1) + ) + (block + (set_local $3 + (if (result i32) + (i32.and + (tee_local $2 + (i32.add + (tee_local $4 + (i32.load + (i32.const 652) + ) + ) + (i32.const -1) + ) + ) + (tee_local $3 + (get_local $1) + ) + ) + (i32.add + (i32.sub + (get_local $5) + (get_local $3) + ) + (i32.and + (i32.add + (get_local $2) + (get_local $3) + ) + (i32.sub + (i32.const 0) + (get_local $4) + ) + ) + ) + (get_local $5) + ) + ) + (set_local $9 + (i32.add + (tee_local $4 + (i32.load + (i32.const 608) + ) + ) + (get_local $3) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $3) + (get_local $0) + ) + (i32.lt_u + (get_local $3) + (i32.const 2147483647) + ) + ) + (block + (if + (tee_local $2 + (i32.load + (i32.const 616) + ) + ) + (br_if $label$break$L279 + (i32.or + (i32.le_u + (get_local $9) + (get_local $4) + ) + (i32.gt_u + (get_local $9) + (get_local $2) + ) + ) + ) + ) + (br_if $__rjti$13 + (i32.eq + (tee_local $2 + (call $_sbrk + (get_local $3) + ) + ) + (get_local $1) + ) + ) + (br $__rjti$5) + ) + ) + ) + ) + (br $label$break$L279) + ) + (set_local $1 + (get_local $3) + ) + (set_local $4 + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $11) + (get_local $1) + ) + (i32.and + (i32.lt_u + (get_local $1) + (i32.const 2147483647) + ) + (i32.ne + (get_local $2) + (i32.const -1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.and + (i32.add + (i32.sub + (get_local $8) + (get_local $1) + ) + (tee_local $3 + (i32.load + (i32.const 656) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $3) + ) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (call $_sbrk + (get_local $3) + ) + (i32.const -1) + ) + (block + (drop + (call $_sbrk + (get_local $4) + ) + ) + (br $label$break$L279) + ) + (set_local $3 + (i32.add + (get_local $3) + (get_local $1) + ) + ) + ) + (set_local $3 + (get_local $1) + ) + ) + (set_local $3 + (get_local $1) + ) + ) + (if + (i32.ne + (get_local $2) + (i32.const -1) + ) + (block + (set_local $1 + (get_local $2) + ) + (br $__rjti$13) + ) + ) + ) + (i32.store + (i32.const 620) + (i32.or + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.const 2147483647) + ) + (if + (i32.and + (i32.lt_u + (tee_local $1 + (call $_sbrk + (get_local $5) + ) + ) + (tee_local $3 + (call $_sbrk + (i32.const 0) + ) + ) + ) + (i32.and + (i32.ne + (get_local $1) + (i32.const -1) + ) + (i32.ne + (get_local $3) + (i32.const -1) + ) + ) + ) + (br_if $__rjti$13 + (i32.gt_u + (tee_local $3 + (i32.sub + (get_local $3) + (get_local $1) + ) + ) + (i32.add + (get_local $0) + (i32.const 40) + ) + ) + ) + ) + ) + (br $__rjto$13) + ) + (i32.store + (i32.const 608) + (tee_local $2 + (i32.add + (i32.load + (i32.const 608) + ) + (get_local $3) + ) + ) + ) + (if + (i32.gt_u + (get_local $2) + (i32.load + (i32.const 612) + ) + ) + (i32.store + (i32.const 612) + (get_local $2) + ) + ) + (block $do-once40 + (if + (tee_local $6 + (i32.load + (i32.const 200) + ) + ) + (block + (set_local $2 + (i32.const 624) + ) + (block $__rjto$10 + (block $__rjti$10 + (loop $while-in45 + (br_if $__rjti$10 + (i32.eq + (get_local $1) + (i32.add + (tee_local $11 + (i32.load + (get_local $2) + ) + ) + (tee_local $5 + (i32.load + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + ) + ) + ) + ) + ) + (br_if $while-in45 + (tee_local $2 + (i32.load offset=8 + (get_local $2) + ) + ) + ) + ) + (br $__rjto$10) + ) + (if + (i32.eqz + (i32.and + (i32.load offset=12 + (get_local $2) + ) + (i32.const 8) + ) + ) + (if + (i32.and + (i32.lt_u + (get_local $6) + (get_local $1) + ) + (i32.ge_u + (get_local $6) + (get_local $11) + ) + ) + (block + (i32.store + (get_local $4) + (i32.add + (get_local $5) + (get_local $3) + ) + ) + (set_local $2 + (i32.add + (get_local $6) + (tee_local $1 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + ) + (set_local $1 + (i32.add + (i32.sub + (get_local $3) + (get_local $1) + ) + (i32.load + (i32.const 188) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $2) + ) + (i32.store + (i32.const 188) + (get_local $1) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $1) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $2) + (get_local $1) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (br $do-once40) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (tee_local $4 + (i32.load + (i32.const 192) + ) + ) + ) + (block + (i32.store + (i32.const 192) + (get_local $1) + ) + (set_local $4 + (get_local $1) + ) + ) + ) + (set_local $11 + (i32.add + (get_local $1) + (get_local $3) + ) + ) + (set_local $2 + (i32.const 624) + ) + (block $__rjto$11 + (block $__rjti$11 + (loop $while-in47 + (if + (i32.eq + (i32.load + (get_local $2) + ) + (get_local $11) + ) + (block + (set_local $5 + (get_local $2) + ) + (br $__rjti$11) + ) + ) + (br_if $while-in47 + (tee_local $2 + (i32.load offset=8 + (get_local $2) + ) + ) + ) + (set_local $4 + (i32.const 624) + ) + ) + (br $__rjto$11) + ) + (if + (i32.and + (i32.load offset=12 + (get_local $2) + ) + (i32.const 8) + ) + (set_local $4 + (i32.const 624) + ) + (block + (i32.store + (get_local $5) + (get_local $1) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (i32.add + (i32.load + (get_local $2) + ) + (get_local $3) + ) + ) + (set_local $8 + (i32.add + (tee_local $9 + (i32.add + (get_local $1) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + (get_local $0) + ) + ) + (set_local $7 + (i32.sub + (i32.sub + (tee_local $5 + (i32.add + (get_local $11) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + (get_local $9) + ) + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $9) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + (block $do-once48 + (if + (i32.eq + (get_local $5) + (get_local $6) + ) + (block + (i32.store + (i32.const 188) + (tee_local $0 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $7) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $8) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + ) + (block + (if + (i32.eq + (get_local $5) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (tee_local $0 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $7) + ) + ) + ) + (i32.store + (i32.const 196) + (get_local $8) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $8) + (get_local $0) + ) + (get_local $0) + ) + (br $do-once48) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (tee_local $0 + (if (result i32) + (i32.eq + (i32.and + (tee_local $0 + (i32.load offset=4 + (get_local $5) + ) + ) + (i32.const 3) + ) + (i32.const 1) + ) + (block (result i32) + (set_local $11 + (i32.and + (get_local $0) + (i32.const -8) + ) + ) + (set_local $1 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (block $label$break$L331 + (if + (i32.lt_u + (get_local $0) + (i32.const 256) + ) + (block + (set_local $2 + (i32.load offset=12 + (get_local $5) + ) + ) + (block $do-once51 + (if + (i32.ne + (tee_local $3 + (i32.load offset=8 + (get_local $5) + ) + ) + (tee_local $0 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $3) + (get_local $4) + ) + (call $_abort) + ) + (br_if $do-once51 + (i32.eq + (i32.load offset=12 + (get_local $3) + ) + (get_local $5) + ) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $2) + (get_local $3) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + ) + (block $do-once53 + (if + (i32.eq + (get_local $2) + (get_local $0) + ) + (set_local $15 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $2) + (get_local $4) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + (get_local $5) + ) + (block + (set_local $15 + (get_local $0) + ) + (br $do-once53) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $3) + (get_local $2) + ) + (i32.store + (get_local $15) + (get_local $3) + ) + ) + (block + (set_local $6 + (i32.load offset=24 + (get_local $5) + ) + ) + (block $do-once55 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $5) + ) + ) + (get_local $5) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (tee_local $3 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load + (get_local $3) + ) + ) + (set_local $0 + (get_local $3) + ) + (block + (set_local $12 + (i32.const 0) + ) + (br $do-once55) + ) + ) + ) + (loop $while-in58 + (if + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $3) + ) + (set_local $0 + (get_local $2) + ) + (br $while-in58) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $3) + ) + (set_local $0 + (get_local $2) + ) + (br $while-in58) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $4) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $12 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $2 + (i32.load offset=8 + (get_local $5) + ) + ) + (get_local $4) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 12) + ) + ) + ) + (get_local $5) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $5) + ) + (block + (i32.store + (get_local $3) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (set_local $12 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (get_local $6) + ) + ) + (block $do-once59 + (if + (i32.eq + (get_local $5) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $5) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $12) + ) + (br_if $do-once59 + (get_local $12) + ) + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $5) + ) + (i32.store + (get_local $0) + (get_local $12) + ) + (i32.store offset=20 + (get_local $6) + (get_local $12) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (get_local $12) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $12) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $12) + (get_local $6) + ) + (if + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $3) + (get_local $1) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $12) + (get_local $3) + ) + (i32.store offset=24 + (get_local $3) + (get_local $12) + ) + ) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (tee_local $0 + (i32.load offset=4 + (get_local $0) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $12) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $12) + ) + ) + ) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $11) + (get_local $7) + ) + ) + (i32.add + (get_local $5) + (get_local $11) + ) + ) + (get_local $5) + ) + ) + (i32.const 4) + ) + ) + (i32.and + (i32.load + (get_local $0) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $7) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $8) + (get_local $7) + ) + (get_local $7) + ) + (set_local $0 + (i32.shr_u + (get_local $7) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $7) + (i32.const 256) + ) + (block + (set_local $3 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (block $do-once63 + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (block + (if + (i32.ge_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (block + (set_local $16 + (get_local $1) + ) + (set_local $10 + (get_local $0) + ) + (br $do-once63) + ) + ) + (call $_abort) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $16 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $10 + (get_local $3) + ) + ) + ) + ) + (i32.store + (get_local $16) + (get_local $8) + ) + (i32.store offset=12 + (get_local $10) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $10) + ) + (i32.store offset=12 + (get_local $8) + (get_local $3) + ) + (br $do-once48) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (tee_local $2 + (block $do-once65 (result i32) + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $7) + (i32.const 8) + ) + ) + (block (result i32) + (drop + (br_if $do-once65 + (i32.const 31) + (i32.gt_u + (get_local $7) + (i32.const 16777215) + ) + ) + ) + (i32.or + (i32.and + (i32.shr_u + (get_local $7) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $3 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $3) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $8) + (get_local $2) + ) + (i32.store offset=4 + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (i32.const 180) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $2) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $3) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $3) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + (br $do-once48) + ) + ) + (set_local $2 + (i32.shl + (get_local $7) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $2) + (i32.const 1) + ) + ) + (i32.eq + (get_local $2) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $3) + ) + ) + (block $__rjto$7 + (block $__rjti$7 + (loop $while-in68 + (br_if $__rjti$7 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $7) + ) + ) + (set_local $3 + (i32.shl + (get_local $2) + (i32.const 1) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $2) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $3) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in68) + ) + ) + ) + (if + (i32.lt_u + (get_local $2) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $2) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $0) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + (br $do-once48) + ) + ) + (br $__rjto$7) + ) + (if + (i32.and + (i32.ge_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $2) + (get_local $8) + ) + (i32.store + (get_local $3) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $2) + ) + (i32.store offset=12 + (get_local $8) + (get_local $0) + ) + (i32.store offset=24 + (get_local $8) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (return + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + ) + ) + ) + (loop $while-in70 + (block $while-out69 + (if + (i32.le_u + (tee_local $2 + (i32.load + (get_local $4) + ) + ) + (get_local $6) + ) + (br_if $while-out69 + (i32.gt_u + (tee_local $2 + (i32.add + (get_local $2) + (i32.load offset=4 + (get_local $4) + ) + ) + ) + (get_local $6) + ) + ) + ) + (set_local $4 + (i32.load offset=8 + (get_local $4) + ) + ) + (br $while-in70) + ) + ) + (set_local $10 + (i32.add + (tee_local $4 + (i32.add + (get_local $2) + (i32.const -47) + ) + ) + (i32.const 8) + ) + ) + (set_local $12 + (i32.add + (tee_local $11 + (select + (get_local $6) + (tee_local $4 + (i32.add + (get_local $4) + (select + (i32.and + (i32.sub + (i32.const 0) + (get_local $10) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $10) + (i32.const 7) + ) + ) + ) + ) + (i32.lt_u + (get_local $4) + (tee_local $10 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + ) + ) + (i32.const 8) + ) + ) + (i32.store + (i32.const 200) + (tee_local $5 + (i32.add + (get_local $1) + (tee_local $4 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $4) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 188) + (tee_local $4 + (i32.sub + (i32.add + (get_local $3) + (i32.const -40) + ) + (get_local $4) + ) + ) + ) + (i32.store offset=4 + (get_local $5) + (i32.or + (get_local $4) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $5) + (get_local $4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (i32.const 27) + ) + (i32.store + (get_local $12) + (i32.load + (i32.const 624) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.load + (i32.const 628) + ) + ) + (i32.store offset=8 + (get_local $12) + (i32.load + (i32.const 632) + ) + ) + (i32.store offset=12 + (get_local $12) + (i32.load + (i32.const 636) + ) + ) + (i32.store + (i32.const 624) + (get_local $1) + ) + (i32.store + (i32.const 628) + (get_local $3) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 632) + (get_local $12) + ) + (set_local $1 + (i32.add + (get_local $11) + (i32.const 24) + ) + ) + (loop $while-in72 + (i32.store + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.const 7) + ) + (br_if $while-in72 + (i32.lt_u + (i32.add + (get_local $1) + (i32.const 4) + ) + (get_local $2) + ) + ) + ) + (if + (i32.ne + (get_local $11) + (get_local $6) + ) + (block + (i32.store + (get_local $4) + (i32.and + (i32.load + (get_local $4) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $6) + (i32.or + (tee_local $5 + (i32.sub + (get_local $11) + (get_local $6) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (get_local $11) + (get_local $5) + ) + (set_local $1 + (i32.shr_u + (get_local $5) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.const 256) + ) + (block + (set_local $2 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 176) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.load + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $17 + (get_local $3) + ) + (set_local $7 + (get_local $1) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $3) + (get_local $1) + ) + ) + (set_local $17 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (set_local $7 + (get_local $2) + ) + ) + ) + (i32.store + (get_local $17) + (get_local $6) + ) + (i32.store offset=12 + (get_local $7) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $7) + ) + (i32.store offset=12 + (get_local $6) + (get_local $2) + ) + (br $do-once40) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $4 + (if (result i32) + (tee_local $1 + (i32.shr_u + (get_local $5) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $5) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $5) + (i32.add + (tee_local $1 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $3 + (i32.shl + (get_local $1) + (tee_local $2 + (i32.and + (i32.shr_u + (i32.add + (get_local $1) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $2) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $3 + (i32.shl + (get_local $3) + (get_local $1) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $3) + (get_local $1) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $6) + (get_local $4) + ) + (i32.store offset=20 + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $10) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (i32.const 180) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $4) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $3) + (get_local $1) + ) + ) + (i32.store + (get_local $2) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $2) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once40) + ) + ) + (set_local $4 + (i32.shl + (get_local $5) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $4) + (i32.const 1) + ) + ) + (i32.eq + (get_local $4) + (i32.const 31) + ) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $2) + ) + ) + (block $__rjto$9 + (block $__rjti$9 + (loop $while-in74 + (br_if $__rjti$9 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $1) + ) + (i32.const -8) + ) + (get_local $5) + ) + ) + (set_local $2 + (i32.shl + (get_local $4) + (i32.const 1) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $4 + (i32.add + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $4) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $4 + (get_local $2) + ) + (set_local $1 + (get_local $3) + ) + (br $while-in74) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $4) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $1) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once40) + ) + ) + (br $__rjto$9) + ) + (if + (i32.and + (i32.ge_u + (tee_local $4 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (tee_local $3 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $1) + (get_local $3) + ) + ) + (block + (i32.store offset=12 + (get_local $4) + (get_local $6) + ) + (i32.store + (get_local $2) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $4) + ) + (i32.store offset=12 + (get_local $6) + (get_local $1) + ) + (i32.store offset=24 + (get_local $6) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (block + (if + (i32.or + (i32.eqz + (tee_local $2 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.lt_u + (get_local $1) + (get_local $2) + ) + ) + (i32.store + (i32.const 192) + (get_local $1) + ) + ) + (i32.store + (i32.const 624) + (get_local $1) + ) + (i32.store + (i32.const 628) + (get_local $3) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 212) + (i32.load + (i32.const 648) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (set_local $2 + (i32.const 0) + ) + (loop $while-in43 + (i32.store offset=12 + (tee_local $4 + (i32.add + (i32.shl + (get_local $2) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $4) + ) + (br_if $while-in43 + (i32.ne + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 32) + ) + ) + ) + (i32.store + (i32.const 200) + (tee_local $2 + (i32.add + (get_local $1) + (tee_local $1 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 188) + (tee_local $1 + (i32.sub + (i32.add + (get_local $3) + (i32.const -40) + ) + (get_local $1) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $1) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $2) + (get_local $1) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + ) + ) + ) + (br_if $folding-inner0 + (i32.gt_u + (tee_local $1 + (i32.load + (i32.const 188) + ) + ) + (get_local $0) + ) + ) + ) + (i32.store + (call $___errno_location) + (i32.const 12) + ) + (return + (i32.const 0) + ) + ) + (i32.store + (i32.const 188) + (tee_local $3 + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + ) + (i32.store + (i32.const 200) + (tee_local $1 + (i32.add + (tee_local $2 + (i32.load + (i32.const 200) + ) + ) + (get_local $0) + ) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (func $_free (; 56 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (if + (i32.eqz + (get_local $0) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $0) + (i32.const -8) + ) + ) + (tee_local $11 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (tee_local $5 + (i32.and + (tee_local $7 + (i32.load + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + ) + (i32.const 3) + ) + ) + (i32.const 1) + ) + (call $_abort) + ) + (set_local $8 + (i32.add + (get_local $1) + (tee_local $0 + (i32.and + (get_local $7) + (i32.const -8) + ) + ) + ) + ) + (block $do-once + (if + (i32.and + (get_local $7) + (i32.const 1) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + (block + (set_local $7 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.sub + (i32.const 0) + (get_local $7) + ) + ) + ) + (get_local $11) + ) + (call $_abort) + ) + (set_local $0 + (i32.add + (get_local $7) + (get_local $0) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.load + (i32.const 196) + ) + ) + (block + (if + (i32.ne + (i32.and + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 3) + ) + (i32.const 3) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 184) + (get_local $0) + ) + (i32.store + (get_local $2) + (i32.and + (get_local $3) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $0) + ) + (get_local $0) + ) + (return) + ) + ) + (set_local $5 + (i32.shr_u + (get_local $7) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $7) + (i32.const 256) + ) + (block + (set_local $6 + (i32.load offset=12 + (get_local $1) + ) + ) + (if + (i32.ne + (tee_local $2 + (i32.load offset=8 + (get_local $1) + ) + ) + (tee_local $3 + (i32.add + (i32.shl + (get_local $5) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $2) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $2) + ) + (get_local $1) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $6) + (get_local $2) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (get_local $6) + (get_local $3) + ) + (set_local $4 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $3 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (set_local $4 + (get_local $3) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $2) + (get_local $6) + ) + (i32.store + (get_local $4) + (get_local $2) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (set_local $12 + (i32.load offset=24 + (get_local $1) + ) + ) + (block $do-once0 + (if + (i32.eq + (tee_local $4 + (i32.load offset=12 + (get_local $1) + ) + ) + (get_local $1) + ) + (block + (if + (i32.eqz + (tee_local $5 + (i32.load + (tee_local $4 + (i32.add + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + (set_local $4 + (get_local $7) + ) + (block + (set_local $6 + (i32.const 0) + ) + (br $do-once0) + ) + ) + ) + (loop $while-in + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $5) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $4 + (get_local $10) + ) + (br $while-in) + ) + ) + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $4 + (get_local $10) + ) + (br $while-in) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (get_local $11) + ) + (call $_abort) + (block + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $6 + (get_local $5) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $10 + (i32.load offset=8 + (get_local $1) + ) + ) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $7 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + ) + (get_local $1) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $5 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (block + (i32.store + (get_local $7) + (get_local $4) + ) + (i32.store + (get_local $5) + (get_local $10) + ) + (set_local $6 + (get_local $4) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $12) + (block + (if + (i32.eq + (get_local $1) + (i32.load + (tee_local $4 + (i32.add + (i32.shl + (tee_local $5 + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $4) + (get_local $6) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $12) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $12) + (i32.const 16) + ) + ) + ) + (get_local $1) + ) + (i32.store + (get_local $4) + (get_local $6) + ) + (i32.store offset=20 + (get_local $12) + (get_local $6) + ) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $6) + (tee_local $5 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $6) + (get_local $12) + ) + (if + (tee_local $7 + (i32.load + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $7) + (get_local $5) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $6) + (get_local $7) + ) + (i32.store offset=24 + (get_local $7) + (get_local $6) + ) + ) + ) + ) + (if + (tee_local $4 + (i32.load offset=4 + (get_local $4) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $6) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $6) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (get_local $2) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 1) + ) + ) + (call $_abort) + ) + (if + (i32.and + (get_local $1) + (i32.const 2) + ) + (block + (i32.store + (get_local $0) + (i32.and + (get_local $1) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $3) + ) + (get_local $3) + ) + ) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 200) + ) + ) + (block + (i32.store + (i32.const 188) + (tee_local $0 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $2) + (i32.load + (i32.const 196) + ) + ) + (return) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store + (i32.const 184) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (tee_local $0 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 196) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $0) + ) + (get_local $0) + ) + (return) + ) + ) + (set_local $5 + (i32.add + (i32.and + (get_local $1) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $1) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.lt_u + (get_local $1) + (i32.const 256) + ) + (block + (set_local $4 + (i32.load offset=12 + (get_local $8) + ) + ) + (if + (i32.ne + (tee_local $1 + (i32.load offset=8 + (get_local $8) + ) + ) + (tee_local $0 + (i32.add + (i32.shl + (get_local $3) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $1) + ) + (get_local $8) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $1) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $0) + ) + (set_local $14 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (set_local $14 + (get_local $0) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $1) + (get_local $4) + ) + (i32.store + (get_local $14) + (get_local $1) + ) + ) + (block + (set_local $6 + (i32.load offset=24 + (get_local $8) + ) + ) + (block $do-once6 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $8) + ) + ) + (get_local $8) + ) + (block + (if + (i32.eqz + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (tee_local $1 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $3 + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (get_local $1) + ) + (block + (set_local $9 + (i32.const 0) + ) + (br $do-once6) + ) + ) + ) + (loop $while-in9 + (if + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $0 + (get_local $4) + ) + (br $while-in9) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $0 + (get_local $4) + ) + (br $while-in9) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $9 + (get_local $3) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $4 + (i32.load offset=8 + (get_local $8) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $1 + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + ) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (block + (i32.store + (get_local $1) + (get_local $0) + ) + (i32.store + (get_local $3) + (get_local $4) + ) + (set_local $9 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $6) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $3 + (i32.load offset=28 + (get_local $8) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $9) + ) + (if + (i32.eqz + (get_local $9) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $8) + ) + (i32.store + (get_local $0) + (get_local $9) + ) + (i32.store offset=20 + (get_local $6) + (get_local $9) + ) + ) + (br_if $do-once4 + (i32.eqz + (get_local $9) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $9) + (tee_local $3 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $9) + (get_local $6) + ) + (if + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $3) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $9) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $9) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=4 + (get_local $0) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $9) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $9) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $5) + ) + (get_local $5) + ) + (if + (i32.eq + (get_local $2) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (get_local $5) + ) + (return) + ) + (set_local $3 + (get_local $5) + ) + ) + ) + ) + (set_local $0 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $3) + (i32.const 256) + ) + (block + (set_local $1 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $15 + (get_local $3) + ) + (set_local $13 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $3) + (get_local $0) + ) + ) + (set_local $15 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $13 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $2) + ) + (i32.store offset=12 + (get_local $13) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $13) + ) + (i32.store offset=12 + (get_local $2) + (get_local $1) + ) + (return) + ) + ) + (set_local $4 + (i32.add + (i32.shl + (tee_local $5 + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $3) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $3) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $4 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $4) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $2) + (get_local $5) + ) + (i32.store offset=20 + (get_local $2) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $2) + (i32.const 0) + ) + (block $do-once12 + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 180) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $5) + ) + ) + ) + (block + (set_local $5 + (i32.shl + (get_local $3) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $5) + (i32.const 1) + ) + ) + (i32.eq + (get_local $5) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $4) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (loop $while-in15 + (br_if $__rjti$1 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $4 + (i32.shl + (get_local $5) + (i32.const 1) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $5 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $5) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $4) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in15) + ) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $5) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $0) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + (br $do-once12) + ) + ) + (br $__rjto$1) + ) + (if + (i32.and + (i32.ge_u + (tee_local $4 + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $3 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $3) + ) + ) + (block + (i32.store offset=12 + (get_local $4) + (get_local $2) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $4) + ) + (i32.store offset=12 + (get_local $2) + (get_local $0) + ) + (i32.store offset=24 + (get_local $2) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $4) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $4) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + ) + (i32.store + (i32.const 208) + (tee_local $0 + (i32.add + (i32.load + (i32.const 208) + ) + (i32.const -1) + ) + ) + ) + (if + (get_local $0) + (return) + (set_local $0 + (i32.const 632) + ) + ) + (loop $while-in17 + (set_local $0 + (i32.add + (tee_local $3 + (i32.load + (get_local $0) + ) + ) + (i32.const 8) + ) + ) + (br_if $while-in17 + (get_local $3) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + ) + (func $runPostSets (; 57 ;) + (nop) + ) + (func $_i64Subtract (; 58 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (set_global $tempRet0 + (i32.sub + (i32.sub + (get_local $1) + (get_local $3) + ) + (i32.gt_u + (get_local $2) + (get_local $0) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $_i64Add (; 59 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (set_global $tempRet0 + (i32.add + (i32.add + (get_local $1) + (get_local $3) + ) + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (get_local $0) + ) + ) + ) + (get_local $4) + ) + (func $_memset (; 60 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (if + (i32.ge_s + (get_local $2) + (i32.const 20) + ) + (block + (set_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (if + (tee_local $3 + (i32.and + (get_local $0) + (i32.const 3) + ) + ) + (block + (set_local $3 + (i32.sub + (i32.add + (get_local $0) + (i32.const 4) + ) + (get_local $3) + ) + ) + (loop $while-in + (if + (i32.lt_s + (get_local $0) + (get_local $3) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (set_local $3 + (i32.or + (i32.or + (i32.or + (get_local $1) + (i32.shl + (get_local $1) + (i32.const 8) + ) + ) + (i32.shl + (get_local $1) + (i32.const 16) + ) + ) + (i32.shl + (get_local $1) + (i32.const 24) + ) + ) + ) + (set_local $5 + (i32.and + (get_local $4) + (i32.const -4) + ) + ) + (loop $while-in1 + (if + (i32.lt_s + (get_local $0) + (get_local $5) + ) + (block + (i32.store + (get_local $0) + (get_local $3) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.lt_s + (get_local $0) + (get_local $4) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $_bitshift64Lshr (; 61 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if + (i32.lt_s + (get_local $2) + (i32.const 32) + ) + (block + (set_global $tempRet0 + (i32.shr_u + (get_local $1) + (get_local $2) + ) + ) + (return + (i32.or + (i32.shr_u + (get_local $0) + (get_local $2) + ) + (i32.shl + (i32.and + (get_local $1) + (i32.sub + (i32.shl + (i32.const 1) + (get_local $2) + ) + (i32.const 1) + ) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.const 0) + ) + (i32.shr_u + (get_local $1) + (i32.sub + (get_local $2) + (i32.const 32) + ) + ) + ) + (func $_bitshift64Shl (; 62 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if + (i32.lt_s + (get_local $2) + (i32.const 32) + ) + (block + (set_global $tempRet0 + (i32.or + (i32.shl + (get_local $1) + (get_local $2) + ) + (i32.shr_u + (i32.and + (get_local $0) + (i32.shl + (i32.sub + (i32.shl + (i32.const 1) + (get_local $2) + ) + (i32.const 1) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + ) + (return + (i32.shl + (get_local $0) + (get_local $2) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.shl + (get_local $0) + (i32.sub + (get_local $2) + (i32.const 32) + ) + ) + ) + (i32.const 0) + ) + (func $_memcpy (; 63 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.ge_s + (get_local $2) + (i32.const 4096) + ) + (return + (call $_emscripten_memcpy_big + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (set_local $3 + (get_local $0) + ) + (if + (i32.eq + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.and + (get_local $1) + (i32.const 3) + ) + ) + (block + (loop $while-in + (if + (i32.and + (get_local $0) + (i32.const 3) + ) + (block + (if + (i32.eqz + (get_local $2) + ) + (return + (get_local $3) + ) + ) + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (loop $while-in1 + (if + (i32.ge_s + (get_local $2) + (i32.const 4) + ) + (block + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (get_local $3) + ) + (func $___udivdi3 (; 64 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call $___udivmoddi4 + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.const 0) + ) + ) + (func $___uremdi3 (; 65 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (drop + (call $___udivmoddi4 + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $3) + (tee_local $0 + (get_local $4) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (set_global $tempRet0 + (i32.load offset=4 + (get_local $0) + ) + ) + (i32.load + (get_local $0) + ) + ) + (func $___udivmoddi4 (; 66 ;) (param $xl i32) (param $xh i32) (param $yl i32) (param $yh i32) (param $r i32) (result i32) + (local $x64 i64) + (local $y64 i64) + (set_local $x64 + (i64.or + (i64.extend_u/i32 + (get_local $xl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $xh) + ) + (i64.const 32) + ) + ) + ) + (set_local $y64 + (i64.or + (i64.extend_u/i32 + (get_local $yl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $yh) + ) + (i64.const 32) + ) + ) + ) + (if + (get_local $r) + (i64.store + (get_local $r) + (i64.rem_u + (get_local $x64) + (get_local $y64) + ) + ) + ) + (set_local $x64 + (i64.div_u + (get_local $x64) + (get_local $y64) + ) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $x64) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $x64) + ) + ) + (func $dynCall_ii (; 67 ;) (param $0 i32) (param $1 i32) (result i32) + (call_indirect (type $FUNCSIG$ii) + (get_local $1) + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + ) + (func $dynCall_iiii (; 68 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call_indirect (type $FUNCSIG$iiii) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (func $dynCall_vi (; 69 ;) (param $0 i32) (param $1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $1) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 10) + ) + ) + ) + (func $b0 (; 70 ;) (param $0 i32) (result i32) + (call $nullFunc_ii + (i32.const 0) + ) + (i32.const 0) + ) + (func $b1 (; 71 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $nullFunc_iiii + (i32.const 1) + ) + (i32.const 0) + ) + (func $b2 (; 72 ;) (param $0 i32) + (call $nullFunc_vi + (i32.const 2) + ) + ) +) diff --git a/src/binaryen/test/emcc_hello_world.fromasm.clamp.no-opts b/src/binaryen/test/emcc_hello_world.fromasm.clamp.no-opts new file mode 100644 index 0000000000..a90f8b5adf --- /dev/null +++ b/src/binaryen/test/emcc_hello_world.fromasm.clamp.no-opts @@ -0,0 +1,31679 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "ABORT" (global $ABORT$asm2wasm$import i32)) + (import "env" "cttz_i8" (global $cttz_i8$asm2wasm$import i32)) + (import "global" "NaN" (global $nan$asm2wasm$import f64)) + (import "global" "Infinity" (global $inf$asm2wasm$import f64)) + (import "env" "abort" (func $abort)) + (import "env" "nullFunc_ii" (func $nullFunc_ii (param i32))) + (import "env" "nullFunc_iiii" (func $nullFunc_iiii (param i32))) + (import "env" "nullFunc_vi" (func $nullFunc_vi (param i32))) + (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) + (import "env" "___lock" (func $___lock (param i32))) + (import "env" "_pthread_self" (func $_pthread_self (result i32))) + (import "env" "_abort" (func $_abort)) + (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) + (import "env" "_sbrk" (func $_sbrk (param i32) (result i32))) + (import "env" "_time" (func $_time (param i32) (result i32))) + (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $___unlock (param i32))) + (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) + (import "env" "_sysconf" (func $_sysconf (param i32) (result i32))) + (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 18 18 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $ABORT (mut i32) (get_global $ABORT$asm2wasm$import)) + (global $cttz_i8 (mut i32) (get_global $cttz_i8$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $setjmpId (mut i32) (i32.const 0)) + (global $undef (mut i32) (i32.const 0)) + (global $nan (mut f64) (get_global $nan$asm2wasm$import)) + (global $inf (mut f64) (get_global $inf$asm2wasm$import)) + (global $tempInt (mut i32) (i32.const 0)) + (global $tempBigInt (mut i32) (i32.const 0)) + (global $tempBigIntP (mut i32) (i32.const 0)) + (global $tempBigIntS (mut i32) (i32.const 0)) + (global $tempBigIntR (mut f64) (f64.const 0)) + (global $tempBigIntI (mut i32) (i32.const 0)) + (global $tempBigIntD (mut i32) (i32.const 0)) + (global $tempValue (mut i32) (i32.const 0)) + (global $tempDouble (mut f64) (f64.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (global $tempRet1 (mut i32) (i32.const 0)) + (global $tempRet2 (mut i32) (i32.const 0)) + (global $tempRet3 (mut i32) (i32.const 0)) + (global $tempRet4 (mut i32) (i32.const 0)) + (global $tempRet5 (mut i32) (i32.const 0)) + (global $tempRet6 (mut i32) (i32.const 0)) + (global $tempRet7 (mut i32) (i32.const 0)) + (global $tempRet8 (mut i32) (i32.const 0)) + (global $tempRet9 (mut i32) (i32.const 0)) + (global $tempFloat (mut f64) (f64.const 0)) + (elem (get_global $tableBase) $b0 $___stdio_close $b1 $b1 $___stdout_write $___stdio_seek $___stdio_write $b1 $b1 $b1 $b2 $b2 $b2 $b2 $b2 $_cleanup $b2 $b2) + (export "_i64Subtract" (func $_i64Subtract)) + (export "_free" (func $_free)) + (export "_main" (func $_main)) + (export "_i64Add" (func $_i64Add)) + (export "_memset" (func $_memset)) + (export "_malloc" (func $_malloc)) + (export "_memcpy" (func $_memcpy)) + (export "_bitshift64Lshr" (func $_bitshift64Lshr)) + (export "_fflush" (func $_fflush)) + (export "___errno_location" (func $___errno_location)) + (export "_bitshift64Shl" (func $_bitshift64Shl)) + (export "runPostSets" (func $runPostSets)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackSave" (func $stackSave)) + (export "stackRestore" (func $stackRestore)) + (export "establishStackSpace" (func $establishStackSpace)) + (export "setThrew" (func $setThrew)) + (export "setTempRet0" (func $setTempRet0)) + (export "getTempRet0" (func $getTempRet0)) + (export "dynCall_ii" (func $dynCall_ii)) + (export "dynCall_iiii" (func $dynCall_iiii)) + (export "dynCall_vi" (func $dynCall_vi)) + (export "___udivmoddi4" (func $___udivmoddi4)) + (func $stackAlloc (; 18 ;) (param $size i32) (result i32) + (local $ret i32) + (set_local $ret + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $size) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (return + (get_local $ret) + ) + ) + (func $stackSave (; 19 ;) (result i32) + (return + (get_global $STACKTOP) + ) + ) + (func $stackRestore (; 20 ;) (param $top i32) + (set_global $STACKTOP + (get_local $top) + ) + ) + (func $establishStackSpace (; 21 ;) (param $stackBase i32) (param $stackMax i32) + (set_global $STACKTOP + (get_local $stackBase) + ) + (set_global $STACK_MAX + (get_local $stackMax) + ) + ) + (func $setThrew (; 22 ;) (param $threw i32) (param $value i32) + (if + (i32.eq + (get_global $__THREW__) + (i32.const 0) + ) + (block + (set_global $__THREW__ + (get_local $threw) + ) + (set_global $threwValue + (get_local $value) + ) + ) + ) + ) + (func $copyTempFloat (; 23 ;) (param $ptr i32) + (i32.store8 + (get_global $tempDoublePtr) + (i32.load8_s + (get_local $ptr) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 1) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 1) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 2) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 2) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 3) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 3) + ) + ) + ) + ) + (func $copyTempDouble (; 24 ;) (param $ptr i32) + (i32.store8 + (get_global $tempDoublePtr) + (i32.load8_s + (get_local $ptr) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 1) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 1) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 2) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 2) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 3) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 3) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 4) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 4) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 5) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 5) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 6) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 6) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 7) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 7) + ) + ) + ) + ) + (func $setTempRet0 (; 25 ;) (param $value i32) + (set_global $tempRet0 + (get_local $value) + ) + ) + (func $getTempRet0 (; 26 ;) (result i32) + (return + (get_global $tempRet0) + ) + ) + (func $_main (; 27 ;) (result i32) + (local $$retval i32) + (local $$vararg_buffer i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$vararg_buffer + (get_local $sp) + ) + (set_local $$retval + (i32.const 0) + ) + (drop + (call $_printf + (i32.const 672) + (get_local $$vararg_buffer) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (i32.const 0) + ) + ) + (func $_frexp (; 28 ;) (param $$x f64) (param $$e i32) (result f64) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 f64) + (local $$call f64) + (local $$conv i32) + (local $$mul f64) + (local $$retval$0 f64) + (local $$storemerge i32) + (local $$sub i32) + (local $$sub8 i32) + (local $$tobool1 i32) + (local $$x$addr$0 f64) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $$x) + ) + (set_local $$0 + (i32.load + (get_global $tempDoublePtr) + ) + ) + (set_local $$1 + (i32.load + (i32.add + (get_global $tempDoublePtr) + (i32.const 4) + ) + ) + ) + (set_local $$2 + (call $_bitshift64Lshr + (get_local $$0) + (get_local $$1) + (i32.const 52) + ) + ) + (set_local $$3 + (get_global $tempRet0) + ) + (set_local $$conv + (i32.and + (get_local $$2) + (i32.const 2047) + ) + ) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default + (i32.sub + (get_local $$conv) + (i32.const 0) + ) + ) + ) + (block + (set_local $$tobool1 + (f64.ne + (get_local $$x) + (f64.const 0) + ) + ) + (if + (get_local $$tobool1) + (block + (set_local $$mul + (f64.mul + (get_local $$x) + (f64.const 18446744073709551615) + ) + ) + (set_local $$call + (call $_frexp + (get_local $$mul) + (get_local $$e) + ) + ) + (set_local $$4 + (i32.load + (get_local $$e) + ) + ) + (set_local $$sub + (i32.add + (get_local $$4) + (i32.const -64) + ) + ) + (set_local $$storemerge + (get_local $$sub) + ) + (set_local $$x$addr$0 + (get_local $$call) + ) + ) + (block + (set_local $$storemerge + (i32.const 0) + ) + (set_local $$x$addr$0 + (get_local $$x) + ) + ) + ) + (i32.store + (get_local $$e) + (get_local $$storemerge) + ) + (set_local $$retval$0 + (get_local $$x$addr$0) + ) + (br $switch) + ) + ) + (block + (set_local $$retval$0 + (get_local $$x) + ) + (br $switch) + ) + ) + (block + (set_local $$sub8 + (i32.add + (get_local $$conv) + (i32.const -1022) + ) + ) + (i32.store + (get_local $$e) + (get_local $$sub8) + ) + (set_local $$5 + (i32.and + (get_local $$1) + (i32.const -2146435073) + ) + ) + (set_local $$6 + (i32.or + (get_local $$5) + (i32.const 1071644672) + ) + ) + (i32.store + (get_global $tempDoublePtr) + (get_local $$0) + ) + (i32.store + (i32.add + (get_global $tempDoublePtr) + (i32.const 4) + ) + (get_local $$6) + ) + (set_local $$7 + (f64.load + (get_global $tempDoublePtr) + ) + ) + (set_local $$retval$0 + (get_local $$7) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_frexpl (; 29 ;) (param $$x f64) (param $$e i32) (result f64) + (local $$call f64) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$call + (call $_frexp + (get_local $$x) + (get_local $$e) + ) + ) + (return + (get_local $$call) + ) + ) + (func $_strerror (; 30 ;) (param $$e i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$arrayidx i32) + (local $$cmp i32) + (local $$conv i32) + (local $$dec i32) + (local $$i$012 i32) + (local $$i$012$lcssa i32) + (local $$i$111 i32) + (local $$inc i32) + (local $$incdec$ptr i32) + (local $$incdec$ptr$lcssa i32) + (local $$s$0$lcssa i32) + (local $$s$010 i32) + (local $$s$1 i32) + (local $$tobool i32) + (local $$tobool5 i32) + (local $$tobool5$9 i32) + (local $$tobool8 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$i$012 + (i32.const 0) + ) + (loop $while-in + (block $while-out + (set_local $$arrayidx + (i32.add + (i32.const 687) + (get_local $$i$012) + ) + ) + (set_local $$0 + (i32.load8_s + (get_local $$arrayidx) + ) + ) + (set_local $$conv + (i32.and + (get_local $$0) + (i32.const 255) + ) + ) + (set_local $$cmp + (i32.eq + (get_local $$conv) + (get_local $$e) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $$i$012$lcssa + (get_local $$i$012) + ) + (set_local $label + (i32.const 2) + ) + (br $while-out) + ) + ) + (set_local $$inc + (i32.add + (get_local $$i$012) + (i32.const 1) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$inc) + (i32.const 87) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$i$111 + (i32.const 87) + ) + (set_local $$s$010 + (i32.const 775) + ) + (set_local $label + (i32.const 5) + ) + (br $while-out) + ) + (set_local $$i$012 + (get_local $$inc) + ) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 2) + ) + (block + (set_local $$tobool5$9 + (i32.eq + (get_local $$i$012$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$tobool5$9) + (set_local $$s$0$lcssa + (i32.const 775) + ) + (block + (set_local $$i$111 + (get_local $$i$012$lcssa) + ) + (set_local $$s$010 + (i32.const 775) + ) + (set_local $label + (i32.const 5) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 5) + ) + (loop $while-in1 + (block $while-out0 + (set_local $label + (i32.const 0) + ) + (set_local $$s$1 + (get_local $$s$010) + ) + (loop $while-in3 + (block $while-out2 + (set_local $$1 + (i32.load8_s + (get_local $$s$1) + ) + ) + (set_local $$tobool8 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$1) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$s$1) + (i32.const 1) + ) + ) + (if + (get_local $$tobool8) + (block + (set_local $$incdec$ptr$lcssa + (get_local $$incdec$ptr) + ) + (br $while-out2) + ) + (set_local $$s$1 + (get_local $$incdec$ptr) + ) + ) + (br $while-in3) + ) + ) + (set_local $$dec + (i32.add + (get_local $$i$111) + (i32.const -1) + ) + ) + (set_local $$tobool5 + (i32.eq + (get_local $$dec) + (i32.const 0) + ) + ) + (if + (get_local $$tobool5) + (block + (set_local $$s$0$lcssa + (get_local $$incdec$ptr$lcssa) + ) + (br $while-out0) + ) + (block + (set_local $$i$111 + (get_local $$dec) + ) + (set_local $$s$010 + (get_local $$incdec$ptr$lcssa) + ) + (set_local $label + (i32.const 5) + ) + ) + ) + (br $while-in1) + ) + ) + ) + (return + (get_local $$s$0$lcssa) + ) + ) + (func $___errno_location (; 31 ;) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$call$i i32) + (local $$errno_ptr i32) + (local $$retval$0 i32) + (local $$tobool i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$0 + (i32.load + (i32.const 16) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$0) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (set_local $$retval$0 + (i32.const 60) + ) + (block + (set_local $$call$i + (call $_pthread_self) + ) + (set_local $$errno_ptr + (i32.add + (get_local $$call$i) + (i32.const 60) + ) + ) + (set_local $$1 + (i32.load + (get_local $$errno_ptr) + ) + ) + (set_local $$retval$0 + (get_local $$1) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $___stdio_close (; 32 ;) (param $$f i32) (result i32) + (local $$0 i32) + (local $$call i32) + (local $$call1 i32) + (local $$fd i32) + (local $$vararg_buffer i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$vararg_buffer + (get_local $sp) + ) + (set_local $$fd + (i32.add + (get_local $$f) + (i32.const 60) + ) + ) + (set_local $$0 + (i32.load + (get_local $$fd) + ) + ) + (i32.store + (get_local $$vararg_buffer) + (get_local $$0) + ) + (set_local $$call + (call $___syscall6 + (i32.const 6) + (get_local $$vararg_buffer) + ) + ) + (set_local $$call1 + (call $___syscall_ret + (get_local $$call) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$call1) + ) + ) + (func $___stdout_write (; 33 ;) (param $$f i32) (param $$buf i32) (param $$len i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$and i32) + (local $$call i32) + (local $$call3 i32) + (local $$fd i32) + (local $$lbf i32) + (local $$tio i32) + (local $$tobool i32) + (local $$tobool2 i32) + (local $$vararg_buffer i32) + (local $$vararg_ptr1 i32) + (local $$vararg_ptr2 i32) + (local $$write i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 80) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$vararg_buffer + (get_local $sp) + ) + (set_local $$tio + (i32.add + (get_local $sp) + (i32.const 12) + ) + ) + (set_local $$write + (i32.add + (get_local $$f) + (i32.const 36) + ) + ) + (i32.store + (get_local $$write) + (i32.const 4) + ) + (set_local $$0 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and + (i32.and + (get_local $$0) + (i32.const 64) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$and) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$fd + (i32.add + (get_local $$f) + (i32.const 60) + ) + ) + (set_local $$1 + (i32.load + (get_local $$fd) + ) + ) + (i32.store + (get_local $$vararg_buffer) + (get_local $$1) + ) + (set_local $$vararg_ptr1 + (i32.add + (get_local $$vararg_buffer) + (i32.const 4) + ) + ) + (i32.store + (get_local $$vararg_ptr1) + (i32.const 21505) + ) + (set_local $$vararg_ptr2 + (i32.add + (get_local $$vararg_buffer) + (i32.const 8) + ) + ) + (i32.store + (get_local $$vararg_ptr2) + (get_local $$tio) + ) + (set_local $$call + (call $___syscall54 + (i32.const 54) + (get_local $$vararg_buffer) + ) + ) + (set_local $$tobool2 + (i32.eq + (get_local $$call) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool2) + ) + (block + (set_local $$lbf + (i32.add + (get_local $$f) + (i32.const 75) + ) + ) + (i32.store8 + (get_local $$lbf) + (i32.const -1) + ) + ) + ) + ) + ) + (set_local $$call3 + (call $___stdio_write + (get_local $$f) + (get_local $$buf) + (get_local $$len) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$call3) + ) + ) + (func $___stdio_seek (; 34 ;) (param $$f i32) (param $$off i32) (param $$whence i32) (result i32) + (local $$$pre i32) + (local $$0 i32) + (local $$1 i32) + (local $$call i32) + (local $$call1 i32) + (local $$cmp i32) + (local $$fd i32) + (local $$ret i32) + (local $$vararg_buffer i32) + (local $$vararg_ptr1 i32) + (local $$vararg_ptr2 i32) + (local $$vararg_ptr3 i32) + (local $$vararg_ptr4 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$vararg_buffer + (get_local $sp) + ) + (set_local $$ret + (i32.add + (get_local $sp) + (i32.const 20) + ) + ) + (set_local $$fd + (i32.add + (get_local $$f) + (i32.const 60) + ) + ) + (set_local $$0 + (i32.load + (get_local $$fd) + ) + ) + (i32.store + (get_local $$vararg_buffer) + (get_local $$0) + ) + (set_local $$vararg_ptr1 + (i32.add + (get_local $$vararg_buffer) + (i32.const 4) + ) + ) + (i32.store + (get_local $$vararg_ptr1) + (i32.const 0) + ) + (set_local $$vararg_ptr2 + (i32.add + (get_local $$vararg_buffer) + (i32.const 8) + ) + ) + (i32.store + (get_local $$vararg_ptr2) + (get_local $$off) + ) + (set_local $$vararg_ptr3 + (i32.add + (get_local $$vararg_buffer) + (i32.const 12) + ) + ) + (i32.store + (get_local $$vararg_ptr3) + (get_local $$ret) + ) + (set_local $$vararg_ptr4 + (i32.add + (get_local $$vararg_buffer) + (i32.const 16) + ) + ) + (i32.store + (get_local $$vararg_ptr4) + (get_local $$whence) + ) + (set_local $$call + (call $___syscall140 + (i32.const 140) + (get_local $$vararg_buffer) + ) + ) + (set_local $$call1 + (call $___syscall_ret + (get_local $$call) + ) + ) + (set_local $$cmp + (i32.lt_s + (get_local $$call1) + (i32.const 0) + ) + ) + (if + (get_local $$cmp) + (block + (i32.store + (get_local $$ret) + (i32.const -1) + ) + (set_local $$1 + (i32.const -1) + ) + ) + (block + (set_local $$$pre + (i32.load + (get_local $$ret) + ) + ) + (set_local $$1 + (get_local $$$pre) + ) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$1) + ) + ) + (func $_fflush (; 35 ;) (param $$f i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$call i32) + (local $$call1 i32) + (local $$call1$18 i32) + (local $$call16 i32) + (local $$call22 i32) + (local $$call7 i32) + (local $$cmp i32) + (local $$cmp14 i32) + (local $$cmp20 i32) + (local $$cond10 i32) + (local $$cond19 i32) + (local $$f$addr$0 i32) + (local $$f$addr$0$19 i32) + (local $$f$addr$022 i32) + (local $$lock i32) + (local $$lock13 i32) + (local $$next i32) + (local $$or i32) + (local $$phitmp i32) + (local $$r$0$lcssa i32) + (local $$r$021 i32) + (local $$r$1 i32) + (local $$retval$0 i32) + (local $$tobool i32) + (local $$tobool11 i32) + (local $$tobool11$20 i32) + (local $$tobool24 i32) + (local $$tobool5 i32) + (local $$wbase i32) + (local $$wpos i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$tobool + (i32.eq + (get_local $$f) + (i32.const 0) + ) + ) + (block $do-once + (if + (get_local $$tobool) + (block + (set_local $$1 + (i32.load + (i32.const 12) + ) + ) + (set_local $$tobool5 + (i32.eq + (get_local $$1) + (i32.const 0) + ) + ) + (if + (get_local $$tobool5) + (set_local $$cond10 + (i32.const 0) + ) + (block + (set_local $$2 + (i32.load + (i32.const 12) + ) + ) + (set_local $$call7 + (call $_fflush + (get_local $$2) + ) + ) + (set_local $$cond10 + (get_local $$call7) + ) + ) + ) + (call $___lock + (i32.const 44) + ) + (set_local $$f$addr$0$19 + (i32.load + (i32.const 40) + ) + ) + (set_local $$tobool11$20 + (i32.eq + (get_local $$f$addr$0$19) + (i32.const 0) + ) + ) + (if + (get_local $$tobool11$20) + (set_local $$r$0$lcssa + (get_local $$cond10) + ) + (block + (set_local $$f$addr$022 + (get_local $$f$addr$0$19) + ) + (set_local $$r$021 + (get_local $$cond10) + ) + (loop $while-in + (block $while-out + (set_local $$lock13 + (i32.add + (get_local $$f$addr$022) + (i32.const 76) + ) + ) + (set_local $$3 + (i32.load + (get_local $$lock13) + ) + ) + (set_local $$cmp14 + (i32.gt_s + (get_local $$3) + (i32.const -1) + ) + ) + (if + (get_local $$cmp14) + (block + (set_local $$call16 + (call $___lockfile + (get_local $$f$addr$022) + ) + ) + (set_local $$cond19 + (get_local $$call16) + ) + ) + (set_local $$cond19 + (i32.const 0) + ) + ) + (set_local $$wpos + (i32.add + (get_local $$f$addr$022) + (i32.const 20) + ) + ) + (set_local $$4 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$wbase + (i32.add + (get_local $$f$addr$022) + (i32.const 28) + ) + ) + (set_local $$5 + (i32.load + (get_local $$wbase) + ) + ) + (set_local $$cmp20 + (i32.gt_u + (get_local $$4) + (get_local $$5) + ) + ) + (if + (get_local $$cmp20) + (block + (set_local $$call22 + (call $___fflush_unlocked + (get_local $$f$addr$022) + ) + ) + (set_local $$or + (i32.or + (get_local $$call22) + (get_local $$r$021) + ) + ) + (set_local $$r$1 + (get_local $$or) + ) + ) + (set_local $$r$1 + (get_local $$r$021) + ) + ) + (set_local $$tobool24 + (i32.eq + (get_local $$cond19) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool24) + ) + (call $___unlockfile + (get_local $$f$addr$022) + ) + ) + (set_local $$next + (i32.add + (get_local $$f$addr$022) + (i32.const 56) + ) + ) + (set_local $$f$addr$0 + (i32.load + (get_local $$next) + ) + ) + (set_local $$tobool11 + (i32.eq + (get_local $$f$addr$0) + (i32.const 0) + ) + ) + (if + (get_local $$tobool11) + (block + (set_local $$r$0$lcssa + (get_local $$r$1) + ) + (br $while-out) + ) + (block + (set_local $$f$addr$022 + (get_local $$f$addr$0) + ) + (set_local $$r$021 + (get_local $$r$1) + ) + ) + ) + (br $while-in) + ) + ) + ) + ) + (call $___unlock + (i32.const 44) + ) + (set_local $$retval$0 + (get_local $$r$0$lcssa) + ) + ) + (block + (set_local $$lock + (i32.add + (get_local $$f) + (i32.const 76) + ) + ) + (set_local $$0 + (i32.load + (get_local $$lock) + ) + ) + (set_local $$cmp + (i32.gt_s + (get_local $$0) + (i32.const -1) + ) + ) + (if + (i32.eqz + (get_local $$cmp) + ) + (block + (set_local $$call1$18 + (call $___fflush_unlocked + (get_local $$f) + ) + ) + (set_local $$retval$0 + (get_local $$call1$18) + ) + (br $do-once) + ) + ) + (set_local $$call + (call $___lockfile + (get_local $$f) + ) + ) + (set_local $$phitmp + (i32.eq + (get_local $$call) + (i32.const 0) + ) + ) + (set_local $$call1 + (call $___fflush_unlocked + (get_local $$f) + ) + ) + (if + (get_local $$phitmp) + (set_local $$retval$0 + (get_local $$call1) + ) + (block + (call $___unlockfile + (get_local $$f) + ) + (set_local $$retval$0 + (get_local $$call1) + ) + ) + ) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_printf (; 36 ;) (param $$fmt i32) (param $$varargs i32) (result i32) + (local $$0 i32) + (local $$ap i32) + (local $$call i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$ap + (get_local $sp) + ) + (i32.store + (get_local $$ap) + (get_local $$varargs) + ) + (set_local $$0 + (i32.load + (i32.const 8) + ) + ) + (set_local $$call + (call $_vfprintf + (get_local $$0) + (get_local $$fmt) + (get_local $$ap) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$call) + ) + ) + (func $___lockfile (; 37 ;) (param $$f i32) (result i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (return + (i32.const 0) + ) + ) + (func $___unlockfile (; 38 ;) (param $$f i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (return) + ) + (func $___stdio_write (; 39 ;) (param $$f i32) (param $$buf i32) (param $$len i32) (result i32) + (local $$$pre i32) + (local $$0 i32) + (local $$1 i32) + (local $$10 i32) + (local $$11 i32) + (local $$12 i32) + (local $$13 i32) + (local $$14 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 i32) + (local $$8 i32) + (local $$9 i32) + (local $$add i32) + (local $$add$ptr i32) + (local $$add$ptr41 i32) + (local $$add$ptr46 i32) + (local $$buf31 i32) + (local $$buf_size i32) + (local $$call i32) + (local $$call10 i32) + (local $$call7 i32) + (local $$call9 i32) + (local $$cmp i32) + (local $$cmp17 i32) + (local $$cmp22 i32) + (local $$cmp29 i32) + (local $$cmp38 i32) + (local $$cnt$0 i32) + (local $$cnt$1 i32) + (local $$dec i32) + (local $$fd8 i32) + (local $$incdec$ptr i32) + (local $$iov$0 i32) + (local $$iov$0$lcssa57 i32) + (local $$iov$1 i32) + (local $$iov_base2 i32) + (local $$iov_len i32) + (local $$iov_len24 i32) + (local $$iov_len28 i32) + (local $$iov_len3 i32) + (local $$iov_len50 i32) + (local $$iov_len50$phi$trans$insert i32) + (local $$iovcnt$0 i32) + (local $$iovcnt$0$lcssa58 i32) + (local $$iovcnt$1 i32) + (local $$iovs i32) + (local $$or i32) + (local $$rem$0 i32) + (local $$retval$0 i32) + (local $$sub i32) + (local $$sub$ptr$sub i32) + (local $$sub26 i32) + (local $$sub36 i32) + (local $$sub51 i32) + (local $$tobool i32) + (local $$vararg_buffer i32) + (local $$vararg_buffer3 i32) + (local $$vararg_ptr1 i32) + (local $$vararg_ptr2 i32) + (local $$vararg_ptr6 i32) + (local $$vararg_ptr7 i32) + (local $$wbase i32) + (local $$wend i32) + (local $$wend19 i32) + (local $$wpos i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$vararg_buffer3 + (i32.add + (get_local $sp) + (i32.const 16) + ) + ) + (set_local $$vararg_buffer + (get_local $sp) + ) + (set_local $$iovs + (i32.add + (get_local $sp) + (i32.const 32) + ) + ) + (set_local $$wbase + (i32.add + (get_local $$f) + (i32.const 28) + ) + ) + (set_local $$0 + (i32.load + (get_local $$wbase) + ) + ) + (i32.store + (get_local $$iovs) + (get_local $$0) + ) + (set_local $$iov_len + (i32.add + (get_local $$iovs) + (i32.const 4) + ) + ) + (set_local $$wpos + (i32.add + (get_local $$f) + (i32.const 20) + ) + ) + (set_local $$1 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$sub$ptr$sub + (i32.sub + (get_local $$1) + (get_local $$0) + ) + ) + (i32.store + (get_local $$iov_len) + (get_local $$sub$ptr$sub) + ) + (set_local $$iov_base2 + (i32.add + (get_local $$iovs) + (i32.const 8) + ) + ) + (i32.store + (get_local $$iov_base2) + (get_local $$buf) + ) + (set_local $$iov_len3 + (i32.add + (get_local $$iovs) + (i32.const 12) + ) + ) + (i32.store + (get_local $$iov_len3) + (get_local $$len) + ) + (set_local $$add + (i32.add + (get_local $$sub$ptr$sub) + (get_local $$len) + ) + ) + (set_local $$fd8 + (i32.add + (get_local $$f) + (i32.const 60) + ) + ) + (set_local $$buf31 + (i32.add + (get_local $$f) + (i32.const 44) + ) + ) + (set_local $$iov$0 + (get_local $$iovs) + ) + (set_local $$iovcnt$0 + (i32.const 2) + ) + (set_local $$rem$0 + (get_local $$add) + ) + (loop $while-in + (block $while-out + (set_local $$2 + (i32.load + (i32.const 16) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$2) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$4 + (i32.load + (get_local $$fd8) + ) + ) + (i32.store + (get_local $$vararg_buffer3) + (get_local $$4) + ) + (set_local $$vararg_ptr6 + (i32.add + (get_local $$vararg_buffer3) + (i32.const 4) + ) + ) + (i32.store + (get_local $$vararg_ptr6) + (get_local $$iov$0) + ) + (set_local $$vararg_ptr7 + (i32.add + (get_local $$vararg_buffer3) + (i32.const 8) + ) + ) + (i32.store + (get_local $$vararg_ptr7) + (get_local $$iovcnt$0) + ) + (set_local $$call9 + (call $___syscall146 + (i32.const 146) + (get_local $$vararg_buffer3) + ) + ) + (set_local $$call10 + (call $___syscall_ret + (get_local $$call9) + ) + ) + (set_local $$cnt$0 + (get_local $$call10) + ) + ) + (block + (call $_pthread_cleanup_push + (i32.const 5) + (get_local $$f) + ) + (set_local $$3 + (i32.load + (get_local $$fd8) + ) + ) + (i32.store + (get_local $$vararg_buffer) + (get_local $$3) + ) + (set_local $$vararg_ptr1 + (i32.add + (get_local $$vararg_buffer) + (i32.const 4) + ) + ) + (i32.store + (get_local $$vararg_ptr1) + (get_local $$iov$0) + ) + (set_local $$vararg_ptr2 + (i32.add + (get_local $$vararg_buffer) + (i32.const 8) + ) + ) + (i32.store + (get_local $$vararg_ptr2) + (get_local $$iovcnt$0) + ) + (set_local $$call + (call $___syscall146 + (i32.const 146) + (get_local $$vararg_buffer) + ) + ) + (set_local $$call7 + (call $___syscall_ret + (get_local $$call) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + (set_local $$cnt$0 + (get_local $$call7) + ) + ) + ) + (set_local $$cmp + (i32.eq + (get_local $$rem$0) + (get_local $$cnt$0) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $label + (i32.const 6) + ) + (br $while-out) + ) + ) + (set_local $$cmp17 + (i32.lt_s + (get_local $$cnt$0) + (i32.const 0) + ) + ) + (if + (get_local $$cmp17) + (block + (set_local $$iov$0$lcssa57 + (get_local $$iov$0) + ) + (set_local $$iovcnt$0$lcssa58 + (get_local $$iovcnt$0) + ) + (set_local $label + (i32.const 8) + ) + (br $while-out) + ) + ) + (set_local $$sub26 + (i32.sub + (get_local $$rem$0) + (get_local $$cnt$0) + ) + ) + (set_local $$iov_len28 + (i32.add + (get_local $$iov$0) + (i32.const 4) + ) + ) + (set_local $$10 + (i32.load + (get_local $$iov_len28) + ) + ) + (set_local $$cmp29 + (i32.gt_u + (get_local $$cnt$0) + (get_local $$10) + ) + ) + (if + (get_local $$cmp29) + (block + (set_local $$11 + (i32.load + (get_local $$buf31) + ) + ) + (i32.store + (get_local $$wbase) + (get_local $$11) + ) + (i32.store + (get_local $$wpos) + (get_local $$11) + ) + (set_local $$sub36 + (i32.sub + (get_local $$cnt$0) + (get_local $$10) + ) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$iov$0) + (i32.const 8) + ) + ) + (set_local $$dec + (i32.add + (get_local $$iovcnt$0) + (i32.const -1) + ) + ) + (set_local $$iov_len50$phi$trans$insert + (i32.add + (get_local $$iov$0) + (i32.const 12) + ) + ) + (set_local $$$pre + (i32.load + (get_local $$iov_len50$phi$trans$insert) + ) + ) + (set_local $$14 + (get_local $$$pre) + ) + (set_local $$cnt$1 + (get_local $$sub36) + ) + (set_local $$iov$1 + (get_local $$incdec$ptr) + ) + (set_local $$iovcnt$1 + (get_local $$dec) + ) + ) + (block + (set_local $$cmp38 + (i32.eq + (get_local $$iovcnt$0) + (i32.const 2) + ) + ) + (if + (get_local $$cmp38) + (block + (set_local $$12 + (i32.load + (get_local $$wbase) + ) + ) + (set_local $$add$ptr41 + (i32.add + (get_local $$12) + (get_local $$cnt$0) + ) + ) + (i32.store + (get_local $$wbase) + (get_local $$add$ptr41) + ) + (set_local $$14 + (get_local $$10) + ) + (set_local $$cnt$1 + (get_local $$cnt$0) + ) + (set_local $$iov$1 + (get_local $$iov$0) + ) + (set_local $$iovcnt$1 + (i32.const 2) + ) + ) + (block + (set_local $$14 + (get_local $$10) + ) + (set_local $$cnt$1 + (get_local $$cnt$0) + ) + (set_local $$iov$1 + (get_local $$iov$0) + ) + (set_local $$iovcnt$1 + (get_local $$iovcnt$0) + ) + ) + ) + ) + ) + (set_local $$13 + (i32.load + (get_local $$iov$1) + ) + ) + (set_local $$add$ptr46 + (i32.add + (get_local $$13) + (get_local $$cnt$1) + ) + ) + (i32.store + (get_local $$iov$1) + (get_local $$add$ptr46) + ) + (set_local $$iov_len50 + (i32.add + (get_local $$iov$1) + (i32.const 4) + ) + ) + (set_local $$sub51 + (i32.sub + (get_local $$14) + (get_local $$cnt$1) + ) + ) + (i32.store + (get_local $$iov_len50) + (get_local $$sub51) + ) + (set_local $$iov$0 + (get_local $$iov$1) + ) + (set_local $$iovcnt$0 + (get_local $$iovcnt$1) + ) + (set_local $$rem$0 + (get_local $$sub26) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 6) + ) + (block + (set_local $$5 + (i32.load + (get_local $$buf31) + ) + ) + (set_local $$buf_size + (i32.add + (get_local $$f) + (i32.const 48) + ) + ) + (set_local $$6 + (i32.load + (get_local $$buf_size) + ) + ) + (set_local $$add$ptr + (i32.add + (get_local $$5) + (get_local $$6) + ) + ) + (set_local $$wend + (i32.add + (get_local $$f) + (i32.const 16) + ) + ) + (i32.store + (get_local $$wend) + (get_local $$add$ptr) + ) + (set_local $$7 + (get_local $$5) + ) + (i32.store + (get_local $$wbase) + (get_local $$7) + ) + (i32.store + (get_local $$wpos) + (get_local $$7) + ) + (set_local $$retval$0 + (get_local $$len) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 8) + ) + (block + (set_local $$wend19 + (i32.add + (get_local $$f) + (i32.const 16) + ) + ) + (i32.store + (get_local $$wend19) + (i32.const 0) + ) + (i32.store + (get_local $$wbase) + (i32.const 0) + ) + (i32.store + (get_local $$wpos) + (i32.const 0) + ) + (set_local $$8 + (i32.load + (get_local $$f) + ) + ) + (set_local $$or + (i32.or + (get_local $$8) + (i32.const 32) + ) + ) + (i32.store + (get_local $$f) + (get_local $$or) + ) + (set_local $$cmp22 + (i32.eq + (get_local $$iovcnt$0$lcssa58) + (i32.const 2) + ) + ) + (if + (get_local $$cmp22) + (set_local $$retval$0 + (i32.const 0) + ) + (block + (set_local $$iov_len24 + (i32.add + (get_local $$iov$0$lcssa57) + (i32.const 4) + ) + ) + (set_local $$9 + (i32.load + (get_local $$iov_len24) + ) + ) + (set_local $$sub + (i32.sub + (get_local $$len) + (get_local $$9) + ) + ) + (set_local $$retval$0 + (get_local $$sub) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_vfprintf (; 40 ;) (param $$f i32) (param $$fmt i32) (param $$ap i32) (result i32) + (local $$$call21 i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 i32) + (local $$add$ptr i32) + (local $$and i32) + (local $$and11 i32) + (local $$and36 i32) + (local $$ap2 i32) + (local $$buf i32) + (local $$buf_size i32) + (local $$call i32) + (local $$call21 i32) + (local $$call21$30 i32) + (local $$call6 i32) + (local $$cmp i32) + (local $$cmp5 i32) + (local $$cmp7 i32) + (local $$cond i32) + (local $$internal_buf i32) + (local $$lock i32) + (local $$mode i32) + (local $$nl_arg i32) + (local $$nl_type i32) + (local $$or i32) + (local $$ret$1 i32) + (local $$ret$1$ i32) + (local $$retval$0 i32) + (local $$tobool i32) + (local $$tobool22 i32) + (local $$tobool26 i32) + (local $$tobool37 i32) + (local $$tobool41 i32) + (local $$vacopy_currentptr i32) + (local $$wbase i32) + (local $$wend i32) + (local $$wpos i32) + (local $$write i32) + (local $dest i32) + (local $label i32) + (local $sp i32) + (local $stop i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 224) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$ap2 + (i32.add + (get_local $sp) + (i32.const 120) + ) + ) + (set_local $$nl_type + (i32.add + (get_local $sp) + (i32.const 80) + ) + ) + (set_local $$nl_arg + (get_local $sp) + ) + (set_local $$internal_buf + (i32.add + (get_local $sp) + (i32.const 136) + ) + ) + (set_local $dest + (get_local $$nl_type) + ) + (set_local $stop + (i32.add + (get_local $dest) + (i32.const 40) + ) + ) + (loop $do-in + (block $do-out + (i32.store + (get_local $dest) + (i32.const 0) + ) + (set_local $dest + (i32.add + (get_local $dest) + (i32.const 4) + ) + ) + (br_if $do-in + (i32.lt_s + (get_local $dest) + (get_local $stop) + ) + ) + ) + ) + (set_local $$vacopy_currentptr + (i32.load + (get_local $$ap) + ) + ) + (i32.store + (get_local $$ap2) + (get_local $$vacopy_currentptr) + ) + (set_local $$call + (call $_printf_core + (i32.const 0) + (get_local $$fmt) + (get_local $$ap2) + (get_local $$nl_arg) + (get_local $$nl_type) + ) + ) + (set_local $$cmp + (i32.lt_s + (get_local $$call) + (i32.const 0) + ) + ) + (if + (get_local $$cmp) + (set_local $$retval$0 + (i32.const -1) + ) + (block + (set_local $$lock + (i32.add + (get_local $$f) + (i32.const 76) + ) + ) + (set_local $$0 + (i32.load + (get_local $$lock) + ) + ) + (set_local $$cmp5 + (i32.gt_s + (get_local $$0) + (i32.const -1) + ) + ) + (if + (get_local $$cmp5) + (block + (set_local $$call6 + (call $___lockfile + (get_local $$f) + ) + ) + (set_local $$cond + (get_local $$call6) + ) + ) + (set_local $$cond + (i32.const 0) + ) + ) + (set_local $$1 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and + (i32.and + (get_local $$1) + (i32.const 32) + ) + ) + (set_local $$mode + (i32.add + (get_local $$f) + (i32.const 74) + ) + ) + (set_local $$2 + (i32.load8_s + (get_local $$mode) + ) + ) + (set_local $$cmp7 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $$2) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 1) + ) + ) + (if + (get_local $$cmp7) + (block + (set_local $$and11 + (i32.and + (get_local $$1) + (i32.const -33) + ) + ) + (i32.store + (get_local $$f) + (get_local $$and11) + ) + ) + ) + (set_local $$buf_size + (i32.add + (get_local $$f) + (i32.const 48) + ) + ) + (set_local $$3 + (i32.load + (get_local $$buf_size) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$3) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$buf + (i32.add + (get_local $$f) + (i32.const 44) + ) + ) + (set_local $$4 + (i32.load + (get_local $$buf) + ) + ) + (i32.store + (get_local $$buf) + (get_local $$internal_buf) + ) + (set_local $$wbase + (i32.add + (get_local $$f) + (i32.const 28) + ) + ) + (i32.store + (get_local $$wbase) + (get_local $$internal_buf) + ) + (set_local $$wpos + (i32.add + (get_local $$f) + (i32.const 20) + ) + ) + (i32.store + (get_local $$wpos) + (get_local $$internal_buf) + ) + (i32.store + (get_local $$buf_size) + (i32.const 80) + ) + (set_local $$add$ptr + (i32.add + (get_local $$internal_buf) + (i32.const 80) + ) + ) + (set_local $$wend + (i32.add + (get_local $$f) + (i32.const 16) + ) + ) + (i32.store + (get_local $$wend) + (get_local $$add$ptr) + ) + (set_local $$call21 + (call $_printf_core + (get_local $$f) + (get_local $$fmt) + (get_local $$ap2) + (get_local $$nl_arg) + (get_local $$nl_type) + ) + ) + (set_local $$tobool22 + (i32.eq + (get_local $$4) + (i32.const 0) + ) + ) + (if + (get_local $$tobool22) + (set_local $$ret$1 + (get_local $$call21) + ) + (block + (set_local $$write + (i32.add + (get_local $$f) + (i32.const 36) + ) + ) + (set_local $$5 + (i32.load + (get_local $$write) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $$f) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (get_local $$5) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (set_local $$6 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$tobool26 + (i32.eq + (get_local $$6) + (i32.const 0) + ) + ) + (set_local $$$call21 + (if (result i32) + (get_local $$tobool26) + (i32.const -1) + (get_local $$call21) + ) + ) + (i32.store + (get_local $$buf) + (get_local $$4) + ) + (i32.store + (get_local $$buf_size) + (i32.const 0) + ) + (i32.store + (get_local $$wend) + (i32.const 0) + ) + (i32.store + (get_local $$wbase) + (i32.const 0) + ) + (i32.store + (get_local $$wpos) + (i32.const 0) + ) + (set_local $$ret$1 + (get_local $$$call21) + ) + ) + ) + ) + (block + (set_local $$call21$30 + (call $_printf_core + (get_local $$f) + (get_local $$fmt) + (get_local $$ap2) + (get_local $$nl_arg) + (get_local $$nl_type) + ) + ) + (set_local $$ret$1 + (get_local $$call21$30) + ) + ) + ) + (set_local $$7 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and36 + (i32.and + (get_local $$7) + (i32.const 32) + ) + ) + (set_local $$tobool37 + (i32.eq + (get_local $$and36) + (i32.const 0) + ) + ) + (set_local $$ret$1$ + (if (result i32) + (get_local $$tobool37) + (get_local $$ret$1) + (i32.const -1) + ) + ) + (set_local $$or + (i32.or + (get_local $$7) + (get_local $$and) + ) + ) + (i32.store + (get_local $$f) + (get_local $$or) + ) + (set_local $$tobool41 + (i32.eq + (get_local $$cond) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool41) + ) + (call $___unlockfile + (get_local $$f) + ) + ) + (set_local $$retval$0 + (get_local $$ret$1$) + ) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$retval$0) + ) + ) + (func $___fwritex (; 41 ;) (param $$s i32) (param $$l i32) (param $$f i32) (result i32) + (local $$$pre i32) + (local $$$pre31 i32) + (local $$0 i32) + (local $$1 i32) + (local $$10 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 i32) + (local $$8 i32) + (local $$9 i32) + (local $$add i32) + (local $$add$ptr i32) + (local $$add$ptr26 i32) + (local $$arrayidx i32) + (local $$call i32) + (local $$call16 i32) + (local $$call4 i32) + (local $$cmp i32) + (local $$cmp11 i32) + (local $$cmp17 i32) + (local $$cmp6 i32) + (local $$i$0 i32) + (local $$i$0$lcssa36 i32) + (local $$i$1 i32) + (local $$l$addr$0 i32) + (local $$lbf i32) + (local $$retval$0 i32) + (local $$s$addr$0 i32) + (local $$sub i32) + (local $$sub$ptr$sub i32) + (local $$sub21 i32) + (local $$tobool i32) + (local $$tobool1 i32) + (local $$tobool9 i32) + (local $$wend i32) + (local $$wpos i32) + (local $$write i32) + (local $$write15 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$wend + (i32.add + (get_local $$f) + (i32.const 16) + ) + ) + (set_local $$0 + (i32.load + (get_local $$wend) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$0) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$call + (call $___towrite + (get_local $$f) + ) + ) + (set_local $$tobool1 + (i32.eq + (get_local $$call) + (i32.const 0) + ) + ) + (if + (get_local $$tobool1) + (block + (set_local $$$pre + (i32.load + (get_local $$wend) + ) + ) + (set_local $$3 + (get_local $$$pre) + ) + (set_local $label + (i32.const 5) + ) + ) + (set_local $$retval$0 + (i32.const 0) + ) + ) + ) + (block + (set_local $$1 + (get_local $$0) + ) + (set_local $$3 + (get_local $$1) + ) + (set_local $label + (i32.const 5) + ) + ) + ) + (block $label$break$L5 + (if + (i32.eq + (get_local $label) + (i32.const 5) + ) + (block + (set_local $$wpos + (i32.add + (get_local $$f) + (i32.const 20) + ) + ) + (set_local $$2 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$sub$ptr$sub + (i32.sub + (get_local $$3) + (get_local $$2) + ) + ) + (set_local $$cmp + (i32.lt_u + (get_local $$sub$ptr$sub) + (get_local $$l) + ) + ) + (set_local $$4 + (get_local $$2) + ) + (if + (get_local $$cmp) + (block + (set_local $$write + (i32.add + (get_local $$f) + (i32.const 36) + ) + ) + (set_local $$5 + (i32.load + (get_local $$write) + ) + ) + (set_local $$call4 + (call_indirect (type $FUNCSIG$iiii) + (get_local $$f) + (get_local $$s) + (get_local $$l) + (i32.add + (i32.and + (get_local $$5) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (set_local $$retval$0 + (get_local $$call4) + ) + (br $label$break$L5) + ) + ) + (set_local $$lbf + (i32.add + (get_local $$f) + (i32.const 75) + ) + ) + (set_local $$6 + (i32.load8_s + (get_local $$lbf) + ) + ) + (set_local $$cmp6 + (i32.gt_s + (i32.shr_s + (i32.shl + (get_local $$6) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -1) + ) + ) + (block $label$break$L10 + (if + (get_local $$cmp6) + (block + (set_local $$i$0 + (get_local $$l) + ) + (loop $while-in + (block $while-out + (set_local $$tobool9 + (i32.eq + (get_local $$i$0) + (i32.const 0) + ) + ) + (if + (get_local $$tobool9) + (block + (set_local $$9 + (get_local $$4) + ) + (set_local $$i$1 + (i32.const 0) + ) + (set_local $$l$addr$0 + (get_local $$l) + ) + (set_local $$s$addr$0 + (get_local $$s) + ) + (br $label$break$L10) + ) + ) + (set_local $$sub + (i32.add + (get_local $$i$0) + (i32.const -1) + ) + ) + (set_local $$arrayidx + (i32.add + (get_local $$s) + (get_local $$sub) + ) + ) + (set_local $$7 + (i32.load8_s + (get_local $$arrayidx) + ) + ) + (set_local $$cmp11 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$7) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 10) + ) + ) + (if + (get_local $$cmp11) + (block + (set_local $$i$0$lcssa36 + (get_local $$i$0) + ) + (br $while-out) + ) + (set_local $$i$0 + (get_local $$sub) + ) + ) + (br $while-in) + ) + ) + (set_local $$write15 + (i32.add + (get_local $$f) + (i32.const 36) + ) + ) + (set_local $$8 + (i32.load + (get_local $$write15) + ) + ) + (set_local $$call16 + (call_indirect (type $FUNCSIG$iiii) + (get_local $$f) + (get_local $$s) + (get_local $$i$0$lcssa36) + (i32.add + (i32.and + (get_local $$8) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (set_local $$cmp17 + (i32.lt_u + (get_local $$call16) + (get_local $$i$0$lcssa36) + ) + ) + (if + (get_local $$cmp17) + (block + (set_local $$retval$0 + (get_local $$i$0$lcssa36) + ) + (br $label$break$L5) + ) + ) + (set_local $$add$ptr + (i32.add + (get_local $$s) + (get_local $$i$0$lcssa36) + ) + ) + (set_local $$sub21 + (i32.sub + (get_local $$l) + (get_local $$i$0$lcssa36) + ) + ) + (set_local $$$pre31 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$9 + (get_local $$$pre31) + ) + (set_local $$i$1 + (get_local $$i$0$lcssa36) + ) + (set_local $$l$addr$0 + (get_local $$sub21) + ) + (set_local $$s$addr$0 + (get_local $$add$ptr) + ) + ) + (block + (set_local $$9 + (get_local $$4) + ) + (set_local $$i$1 + (i32.const 0) + ) + (set_local $$l$addr$0 + (get_local $$l) + ) + (set_local $$s$addr$0 + (get_local $$s) + ) + ) + ) + ) + (drop + (call $_memcpy + (get_local $$9) + (get_local $$s$addr$0) + (get_local $$l$addr$0) + ) + ) + (set_local $$10 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$add$ptr26 + (i32.add + (get_local $$10) + (get_local $$l$addr$0) + ) + ) + (i32.store + (get_local $$wpos) + (get_local $$add$ptr26) + ) + (set_local $$add + (i32.add + (get_local $$i$1) + (get_local $$l$addr$0) + ) + ) + (set_local $$retval$0 + (get_local $$add) + ) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $___towrite (; 42 ;) (param $$f i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$add$ptr i32) + (local $$and i32) + (local $$buf i32) + (local $$buf_size i32) + (local $$conv i32) + (local $$conv3 i32) + (local $$mode i32) + (local $$or i32) + (local $$or5 i32) + (local $$rend i32) + (local $$retval$0 i32) + (local $$rpos i32) + (local $$sub i32) + (local $$tobool i32) + (local $$wbase i32) + (local $$wend i32) + (local $$wpos i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$mode + (i32.add + (get_local $$f) + (i32.const 74) + ) + ) + (set_local $$0 + (i32.load8_s + (get_local $$mode) + ) + ) + (set_local $$conv + (i32.shr_s + (i32.shl + (get_local $$0) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$sub + (i32.add + (get_local $$conv) + (i32.const 255) + ) + ) + (set_local $$or + (i32.or + (get_local $$sub) + (get_local $$conv) + ) + ) + (set_local $$conv3 + (i32.and + (get_local $$or) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $$mode) + (get_local $$conv3) + ) + (set_local $$1 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and + (i32.and + (get_local $$1) + (i32.const 8) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$and) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$rend + (i32.add + (get_local $$f) + (i32.const 8) + ) + ) + (i32.store + (get_local $$rend) + (i32.const 0) + ) + (set_local $$rpos + (i32.add + (get_local $$f) + (i32.const 4) + ) + ) + (i32.store + (get_local $$rpos) + (i32.const 0) + ) + (set_local $$buf + (i32.add + (get_local $$f) + (i32.const 44) + ) + ) + (set_local $$2 + (i32.load + (get_local $$buf) + ) + ) + (set_local $$wbase + (i32.add + (get_local $$f) + (i32.const 28) + ) + ) + (i32.store + (get_local $$wbase) + (get_local $$2) + ) + (set_local $$wpos + (i32.add + (get_local $$f) + (i32.const 20) + ) + ) + (i32.store + (get_local $$wpos) + (get_local $$2) + ) + (set_local $$3 + (get_local $$2) + ) + (set_local $$buf_size + (i32.add + (get_local $$f) + (i32.const 48) + ) + ) + (set_local $$4 + (i32.load + (get_local $$buf_size) + ) + ) + (set_local $$add$ptr + (i32.add + (get_local $$3) + (get_local $$4) + ) + ) + (set_local $$wend + (i32.add + (get_local $$f) + (i32.const 16) + ) + ) + (i32.store + (get_local $$wend) + (get_local $$add$ptr) + ) + (set_local $$retval$0 + (i32.const 0) + ) + ) + (block + (set_local $$or5 + (i32.or + (get_local $$1) + (i32.const 32) + ) + ) + (i32.store + (get_local $$f) + (get_local $$or5) + ) + (set_local $$retval$0 + (i32.const -1) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_wcrtomb (; 43 ;) (param $$s i32) (param $$wc i32) (param $$st i32) (result i32) + (local $$0 i32) + (local $$and i32) + (local $$and19 i32) + (local $$and23 i32) + (local $$and36 i32) + (local $$and41 i32) + (local $$and45 i32) + (local $$call i32) + (local $$cmp i32) + (local $$cmp11 i32) + (local $$cmp2 i32) + (local $$cmp28 i32) + (local $$cmp9 i32) + (local $$conv i32) + (local $$conv16 i32) + (local $$conv21 i32) + (local $$conv25 i32) + (local $$conv33 i32) + (local $$conv38 i32) + (local $$conv43 i32) + (local $$conv47 i32) + (local $$conv5 i32) + (local $$conv7 i32) + (local $$incdec$ptr i32) + (local $$incdec$ptr17 i32) + (local $$incdec$ptr22 i32) + (local $$incdec$ptr34 i32) + (local $$incdec$ptr39 i32) + (local $$incdec$ptr44 i32) + (local $$or i32) + (local $$or$cond i32) + (local $$or15 i32) + (local $$or20 i32) + (local $$or24 i32) + (local $$or32 i32) + (local $$or37 i32) + (local $$or42 i32) + (local $$or46 i32) + (local $$or6 i32) + (local $$retval$0 i32) + (local $$shr$28 i32) + (local $$shr14$26 i32) + (local $$shr18$27 i32) + (local $$shr31$23 i32) + (local $$shr35$24 i32) + (local $$shr40$25 i32) + (local $$sub27 i32) + (local $$tobool i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$tobool + (i32.eq + (get_local $$s) + (i32.const 0) + ) + ) + (block $do-once + (if + (get_local $$tobool) + (set_local $$retval$0 + (i32.const 1) + ) + (block + (set_local $$cmp + (i32.lt_u + (get_local $$wc) + (i32.const 128) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $$conv + (i32.and + (get_local $$wc) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $$s) + (get_local $$conv) + ) + (set_local $$retval$0 + (i32.const 1) + ) + (br $do-once) + ) + ) + (set_local $$cmp2 + (i32.lt_u + (get_local $$wc) + (i32.const 2048) + ) + ) + (if + (get_local $$cmp2) + (block + (set_local $$shr$28 + (i32.shr_u + (get_local $$wc) + (i32.const 6) + ) + ) + (set_local $$or + (i32.or + (get_local $$shr$28) + (i32.const 192) + ) + ) + (set_local $$conv5 + (i32.and + (get_local $$or) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$s) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $$s) + (get_local $$conv5) + ) + (set_local $$and + (i32.and + (get_local $$wc) + (i32.const 63) + ) + ) + (set_local $$or6 + (i32.or + (get_local $$and) + (i32.const 128) + ) + ) + (set_local $$conv7 + (i32.and + (get_local $$or6) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $$incdec$ptr) + (get_local $$conv7) + ) + (set_local $$retval$0 + (i32.const 2) + ) + (br $do-once) + ) + ) + (set_local $$cmp9 + (i32.lt_u + (get_local $$wc) + (i32.const 55296) + ) + ) + (set_local $$0 + (i32.and + (get_local $$wc) + (i32.const -8192) + ) + ) + (set_local $$cmp11 + (i32.eq + (get_local $$0) + (i32.const 57344) + ) + ) + (set_local $$or$cond + (i32.or + (get_local $$cmp9) + (get_local $$cmp11) + ) + ) + (if + (get_local $$or$cond) + (block + (set_local $$shr14$26 + (i32.shr_u + (get_local $$wc) + (i32.const 12) + ) + ) + (set_local $$or15 + (i32.or + (get_local $$shr14$26) + (i32.const 224) + ) + ) + (set_local $$conv16 + (i32.and + (get_local $$or15) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr17 + (i32.add + (get_local $$s) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $$s) + (get_local $$conv16) + ) + (set_local $$shr18$27 + (i32.shr_u + (get_local $$wc) + (i32.const 6) + ) + ) + (set_local $$and19 + (i32.and + (get_local $$shr18$27) + (i32.const 63) + ) + ) + (set_local $$or20 + (i32.or + (get_local $$and19) + (i32.const 128) + ) + ) + (set_local $$conv21 + (i32.and + (get_local $$or20) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr22 + (i32.add + (get_local $$s) + (i32.const 2) + ) + ) + (i32.store8 + (get_local $$incdec$ptr17) + (get_local $$conv21) + ) + (set_local $$and23 + (i32.and + (get_local $$wc) + (i32.const 63) + ) + ) + (set_local $$or24 + (i32.or + (get_local $$and23) + (i32.const 128) + ) + ) + (set_local $$conv25 + (i32.and + (get_local $$or24) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $$incdec$ptr22) + (get_local $$conv25) + ) + (set_local $$retval$0 + (i32.const 3) + ) + (br $do-once) + ) + ) + (set_local $$sub27 + (i32.add + (get_local $$wc) + (i32.const -65536) + ) + ) + (set_local $$cmp28 + (i32.lt_u + (get_local $$sub27) + (i32.const 1048576) + ) + ) + (if + (get_local $$cmp28) + (block + (set_local $$shr31$23 + (i32.shr_u + (get_local $$wc) + (i32.const 18) + ) + ) + (set_local $$or32 + (i32.or + (get_local $$shr31$23) + (i32.const 240) + ) + ) + (set_local $$conv33 + (i32.and + (get_local $$or32) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr34 + (i32.add + (get_local $$s) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $$s) + (get_local $$conv33) + ) + (set_local $$shr35$24 + (i32.shr_u + (get_local $$wc) + (i32.const 12) + ) + ) + (set_local $$and36 + (i32.and + (get_local $$shr35$24) + (i32.const 63) + ) + ) + (set_local $$or37 + (i32.or + (get_local $$and36) + (i32.const 128) + ) + ) + (set_local $$conv38 + (i32.and + (get_local $$or37) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr39 + (i32.add + (get_local $$s) + (i32.const 2) + ) + ) + (i32.store8 + (get_local $$incdec$ptr34) + (get_local $$conv38) + ) + (set_local $$shr40$25 + (i32.shr_u + (get_local $$wc) + (i32.const 6) + ) + ) + (set_local $$and41 + (i32.and + (get_local $$shr40$25) + (i32.const 63) + ) + ) + (set_local $$or42 + (i32.or + (get_local $$and41) + (i32.const 128) + ) + ) + (set_local $$conv43 + (i32.and + (get_local $$or42) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr44 + (i32.add + (get_local $$s) + (i32.const 3) + ) + ) + (i32.store8 + (get_local $$incdec$ptr39) + (get_local $$conv43) + ) + (set_local $$and45 + (i32.and + (get_local $$wc) + (i32.const 63) + ) + ) + (set_local $$or46 + (i32.or + (get_local $$and45) + (i32.const 128) + ) + ) + (set_local $$conv47 + (i32.and + (get_local $$or46) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $$incdec$ptr44) + (get_local $$conv47) + ) + (set_local $$retval$0 + (i32.const 4) + ) + (br $do-once) + ) + (block + (set_local $$call + (call $___errno_location) + ) + (i32.store + (get_local $$call) + (i32.const 84) + ) + (set_local $$retval$0 + (i32.const -1) + ) + (br $do-once) + ) + ) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_wctomb (; 44 ;) (param $$s i32) (param $$wc i32) (result i32) + (local $$call i32) + (local $$retval$0 i32) + (local $$tobool i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$tobool + (i32.eq + (get_local $$s) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (set_local $$retval$0 + (i32.const 0) + ) + (block + (set_local $$call + (call $_wcrtomb + (get_local $$s) + (get_local $$wc) + (i32.const 0) + ) + ) + (set_local $$retval$0 + (get_local $$call) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_memchr (; 45 ;) (param $$src i32) (param $$c i32) (param $$n i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 i32) + (local $$and i32) + (local $$and$39 i32) + (local $$and15 i32) + (local $$and16 i32) + (local $$cmp i32) + (local $$cmp11 i32) + (local $$cmp11$32 i32) + (local $$cmp28 i32) + (local $$cmp8 i32) + (local $$cond i32) + (local $$conv1 i32) + (local $$dec i32) + (local $$dec34 i32) + (local $$incdec$ptr i32) + (local $$incdec$ptr21 i32) + (local $$incdec$ptr33 i32) + (local $$lnot i32) + (local $$mul i32) + (local $$n$addr$0$lcssa i32) + (local $$n$addr$0$lcssa61 i32) + (local $$n$addr$043 i32) + (local $$n$addr$1$lcssa i32) + (local $$n$addr$133 i32) + (local $$n$addr$133$lcssa i32) + (local $$n$addr$227 i32) + (local $$n$addr$3 i32) + (local $$neg i32) + (local $$or$cond i32) + (local $$or$cond$42 i32) + (local $$s$0$lcssa i32) + (local $$s$0$lcssa60 i32) + (local $$s$044 i32) + (local $$s$128 i32) + (local $$s$2 i32) + (local $$sub i32) + (local $$sub22 i32) + (local $$tobool i32) + (local $$tobool$40 i32) + (local $$tobool2 i32) + (local $$tobool2$41 i32) + (local $$tobool2$lcssa i32) + (local $$tobool25 i32) + (local $$tobool25$26 i32) + (local $$tobool36 i32) + (local $$w$0$lcssa i32) + (local $$w$034 i32) + (local $$w$034$lcssa i32) + (local $$xor i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$conv1 + (i32.and + (get_local $$c) + (i32.const 255) + ) + ) + (set_local $$0 + (get_local $$src) + ) + (set_local $$and$39 + (i32.and + (get_local $$0) + (i32.const 3) + ) + ) + (set_local $$tobool$40 + (i32.ne + (get_local $$and$39) + (i32.const 0) + ) + ) + (set_local $$tobool2$41 + (i32.ne + (get_local $$n) + (i32.const 0) + ) + ) + (set_local $$or$cond$42 + (i32.and + (get_local $$tobool2$41) + (get_local $$tobool$40) + ) + ) + (block $label$break$L1 + (if + (get_local $$or$cond$42) + (block + (set_local $$1 + (i32.and + (get_local $$c) + (i32.const 255) + ) + ) + (set_local $$n$addr$043 + (get_local $$n) + ) + (set_local $$s$044 + (get_local $$src) + ) + (loop $while-in + (block $while-out + (set_local $$2 + (i32.load8_s + (get_local $$s$044) + ) + ) + (set_local $$cmp + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$2) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $$1) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $$n$addr$0$lcssa61 + (get_local $$n$addr$043) + ) + (set_local $$s$0$lcssa60 + (get_local $$s$044) + ) + (set_local $label + (i32.const 6) + ) + (br $label$break$L1) + ) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$s$044) + (i32.const 1) + ) + ) + (set_local $$dec + (i32.add + (get_local $$n$addr$043) + (i32.const -1) + ) + ) + (set_local $$3 + (get_local $$incdec$ptr) + ) + (set_local $$and + (i32.and + (get_local $$3) + (i32.const 3) + ) + ) + (set_local $$tobool + (i32.ne + (get_local $$and) + (i32.const 0) + ) + ) + (set_local $$tobool2 + (i32.ne + (get_local $$dec) + (i32.const 0) + ) + ) + (set_local $$or$cond + (i32.and + (get_local $$tobool2) + (get_local $$tobool) + ) + ) + (if + (get_local $$or$cond) + (block + (set_local $$n$addr$043 + (get_local $$dec) + ) + (set_local $$s$044 + (get_local $$incdec$ptr) + ) + ) + (block + (set_local $$n$addr$0$lcssa + (get_local $$dec) + ) + (set_local $$s$0$lcssa + (get_local $$incdec$ptr) + ) + (set_local $$tobool2$lcssa + (get_local $$tobool2) + ) + (set_local $label + (i32.const 5) + ) + (br $while-out) + ) + ) + (br $while-in) + ) + ) + ) + (block + (set_local $$n$addr$0$lcssa + (get_local $$n) + ) + (set_local $$s$0$lcssa + (get_local $$src) + ) + (set_local $$tobool2$lcssa + (get_local $$tobool2$41) + ) + (set_local $label + (i32.const 5) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 5) + ) + (if + (get_local $$tobool2$lcssa) + (block + (set_local $$n$addr$0$lcssa61 + (get_local $$n$addr$0$lcssa) + ) + (set_local $$s$0$lcssa60 + (get_local $$s$0$lcssa) + ) + (set_local $label + (i32.const 6) + ) + ) + (block + (set_local $$n$addr$3 + (i32.const 0) + ) + (set_local $$s$2 + (get_local $$s$0$lcssa) + ) + ) + ) + ) + (block $label$break$L8 + (if + (i32.eq + (get_local $label) + (i32.const 6) + ) + (block + (set_local $$4 + (i32.load8_s + (get_local $$s$0$lcssa60) + ) + ) + (set_local $$5 + (i32.and + (get_local $$c) + (i32.const 255) + ) + ) + (set_local $$cmp8 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$4) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $$5) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $$cmp8) + (block + (set_local $$n$addr$3 + (get_local $$n$addr$0$lcssa61) + ) + (set_local $$s$2 + (get_local $$s$0$lcssa60) + ) + ) + (block + (set_local $$mul + (i32.mul + (get_local $$conv1) + (i32.const 16843009) + ) + ) + (set_local $$cmp11$32 + (i32.gt_u + (get_local $$n$addr$0$lcssa61) + (i32.const 3) + ) + ) + (block $label$break$L11 + (if + (get_local $$cmp11$32) + (block + (set_local $$n$addr$133 + (get_local $$n$addr$0$lcssa61) + ) + (set_local $$w$034 + (get_local $$s$0$lcssa60) + ) + (loop $while-in3 + (block $while-out2 + (set_local $$6 + (i32.load + (get_local $$w$034) + ) + ) + (set_local $$xor + (i32.xor + (get_local $$6) + (get_local $$mul) + ) + ) + (set_local $$sub + (i32.add + (get_local $$xor) + (i32.const -16843009) + ) + ) + (set_local $$neg + (i32.and + (get_local $$xor) + (i32.const -2139062144) + ) + ) + (set_local $$and15 + (i32.xor + (get_local $$neg) + (i32.const -2139062144) + ) + ) + (set_local $$and16 + (i32.and + (get_local $$and15) + (get_local $$sub) + ) + ) + (set_local $$lnot + (i32.eq + (get_local $$and16) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$lnot) + ) + (block + (set_local $$n$addr$133$lcssa + (get_local $$n$addr$133) + ) + (set_local $$w$034$lcssa + (get_local $$w$034) + ) + (br $while-out2) + ) + ) + (set_local $$incdec$ptr21 + (i32.add + (get_local $$w$034) + (i32.const 4) + ) + ) + (set_local $$sub22 + (i32.add + (get_local $$n$addr$133) + (i32.const -4) + ) + ) + (set_local $$cmp11 + (i32.gt_u + (get_local $$sub22) + (i32.const 3) + ) + ) + (if + (get_local $$cmp11) + (block + (set_local $$n$addr$133 + (get_local $$sub22) + ) + (set_local $$w$034 + (get_local $$incdec$ptr21) + ) + ) + (block + (set_local $$n$addr$1$lcssa + (get_local $$sub22) + ) + (set_local $$w$0$lcssa + (get_local $$incdec$ptr21) + ) + (set_local $label + (i32.const 11) + ) + (br $label$break$L11) + ) + ) + (br $while-in3) + ) + ) + (set_local $$n$addr$227 + (get_local $$n$addr$133$lcssa) + ) + (set_local $$s$128 + (get_local $$w$034$lcssa) + ) + ) + (block + (set_local $$n$addr$1$lcssa + (get_local $$n$addr$0$lcssa61) + ) + (set_local $$w$0$lcssa + (get_local $$s$0$lcssa60) + ) + (set_local $label + (i32.const 11) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 11) + ) + (block + (set_local $$tobool25$26 + (i32.eq + (get_local $$n$addr$1$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$tobool25$26) + (block + (set_local $$n$addr$3 + (i32.const 0) + ) + (set_local $$s$2 + (get_local $$w$0$lcssa) + ) + (br $label$break$L8) + ) + (block + (set_local $$n$addr$227 + (get_local $$n$addr$1$lcssa) + ) + (set_local $$s$128 + (get_local $$w$0$lcssa) + ) + ) + ) + ) + ) + (loop $while-in5 + (block $while-out4 + (set_local $$7 + (i32.load8_s + (get_local $$s$128) + ) + ) + (set_local $$cmp28 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$7) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $$5) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $$cmp28) + (block + (set_local $$n$addr$3 + (get_local $$n$addr$227) + ) + (set_local $$s$2 + (get_local $$s$128) + ) + (br $label$break$L8) + ) + ) + (set_local $$incdec$ptr33 + (i32.add + (get_local $$s$128) + (i32.const 1) + ) + ) + (set_local $$dec34 + (i32.add + (get_local $$n$addr$227) + (i32.const -1) + ) + ) + (set_local $$tobool25 + (i32.eq + (get_local $$dec34) + (i32.const 0) + ) + ) + (if + (get_local $$tobool25) + (block + (set_local $$n$addr$3 + (i32.const 0) + ) + (set_local $$s$2 + (get_local $$incdec$ptr33) + ) + (br $while-out4) + ) + (block + (set_local $$n$addr$227 + (get_local $$dec34) + ) + (set_local $$s$128 + (get_local $$incdec$ptr33) + ) + ) + ) + (br $while-in5) + ) + ) + ) + ) + ) + ) + ) + (set_local $$tobool36 + (i32.ne + (get_local $$n$addr$3) + (i32.const 0) + ) + ) + (set_local $$cond + (if (result i32) + (get_local $$tobool36) + (get_local $$s$2) + (i32.const 0) + ) + ) + (return + (get_local $$cond) + ) + ) + (func $___syscall_ret (; 46 ;) (param $$r i32) (result i32) + (local $$call i32) + (local $$cmp i32) + (local $$retval$0 i32) + (local $$sub i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$cmp + (i32.gt_u + (get_local $$r) + (i32.const -4096) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $$sub + (i32.sub + (i32.const 0) + (get_local $$r) + ) + ) + (set_local $$call + (call $___errno_location) + ) + (i32.store + (get_local $$call) + (get_local $$sub) + ) + (set_local $$retval$0 + (i32.const -1) + ) + ) + (set_local $$retval$0 + (get_local $$r) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $___fflush_unlocked (; 47 ;) (param $$f i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$cmp i32) + (local $$cmp4 i32) + (local $$rend i32) + (local $$retval$0 i32) + (local $$rpos i32) + (local $$seek i32) + (local $$sub$ptr$lhs$cast i32) + (local $$sub$ptr$rhs$cast i32) + (local $$sub$ptr$sub i32) + (local $$tobool i32) + (local $$wbase i32) + (local $$wend i32) + (local $$wpos i32) + (local $$write i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$wpos + (i32.add + (get_local $$f) + (i32.const 20) + ) + ) + (set_local $$0 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$wbase + (i32.add + (get_local $$f) + (i32.const 28) + ) + ) + (set_local $$1 + (i32.load + (get_local $$wbase) + ) + ) + (set_local $$cmp + (i32.gt_u + (get_local $$0) + (get_local $$1) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $$write + (i32.add + (get_local $$f) + (i32.const 36) + ) + ) + (set_local $$2 + (i32.load + (get_local $$write) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $$f) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (get_local $$2) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (set_local $$3 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$3) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (set_local $$retval$0 + (i32.const -1) + ) + (set_local $label + (i32.const 3) + ) + ) + ) + (set_local $label + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 3) + ) + (block + (set_local $$rpos + (i32.add + (get_local $$f) + (i32.const 4) + ) + ) + (set_local $$4 + (i32.load + (get_local $$rpos) + ) + ) + (set_local $$rend + (i32.add + (get_local $$f) + (i32.const 8) + ) + ) + (set_local $$5 + (i32.load + (get_local $$rend) + ) + ) + (set_local $$cmp4 + (i32.lt_u + (get_local $$4) + (get_local $$5) + ) + ) + (if + (get_local $$cmp4) + (block + (set_local $$seek + (i32.add + (get_local $$f) + (i32.const 40) + ) + ) + (set_local $$6 + (i32.load + (get_local $$seek) + ) + ) + (set_local $$sub$ptr$lhs$cast + (get_local $$4) + ) + (set_local $$sub$ptr$rhs$cast + (get_local $$5) + ) + (set_local $$sub$ptr$sub + (i32.sub + (get_local $$sub$ptr$lhs$cast) + (get_local $$sub$ptr$rhs$cast) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $$f) + (get_local $$sub$ptr$sub) + (i32.const 1) + (i32.add + (i32.and + (get_local $$6) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (set_local $$wend + (i32.add + (get_local $$f) + (i32.const 16) + ) + ) + (i32.store + (get_local $$wend) + (i32.const 0) + ) + (i32.store + (get_local $$wbase) + (i32.const 0) + ) + (i32.store + (get_local $$wpos) + (i32.const 0) + ) + (i32.store + (get_local $$rend) + (i32.const 0) + ) + (i32.store + (get_local $$rpos) + (i32.const 0) + ) + (set_local $$retval$0 + (i32.const 0) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_cleanup (; 48 ;) (param $$p i32) + (local $$0 i32) + (local $$lockcount i32) + (local $$tobool i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$lockcount + (i32.add + (get_local $$p) + (i32.const 68) + ) + ) + (set_local $$0 + (i32.load + (get_local $$lockcount) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$0) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (call $___unlockfile + (get_local $$p) + ) + ) + (return) + ) + (func $f64-to-int (; 49 ;) (param $0 f64) (result i32) + (if (result i32) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i32.const -2147483648) + (if (result i32) + (f64.ge + (get_local $0) + (f64.const 2147483648) + ) + (i32.const -2147483648) + (if (result i32) + (f64.le + (get_local $0) + (f64.const -2147483649) + ) + (i32.const -2147483648) + (i32.trunc_s/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $f64-to-uint (; 50 ;) (param $0 f64) (result i32) + (if (result i32) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i32.const 0) + (if (result i32) + (f64.ge + (get_local $0) + (f64.const 4294967296) + ) + (i32.const 0) + (if (result i32) + (f64.le + (get_local $0) + (f64.const -1) + ) + (i32.const 0) + (i32.trunc_u/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $i32s-div (; 51 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (if (result i32) + (i32.and + (i32.eq + (get_local $0) + (i32.const -2147483648) + ) + (i32.eq + (get_local $1) + (i32.const -1) + ) + ) + (i32.const 0) + (i32.div_s + (get_local $0) + (get_local $1) + ) + ) + ) + ) + (func $i32s-rem (; 52 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (i32.rem_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $i32u-rem (; 53 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (i32.rem_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $i32u-div (; 54 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (i32.div_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $_printf_core (; 55 ;) (param $$f i32) (param $$fmt i32) (param $$ap i32) (param $$nl_arg i32) (param $$nl_type i32) (result i32) + (local $$$ i32) + (local $$$$i i32) + (local $$$396$i f64) + (local $$$404$i f64) + (local $$$l10n$0 i32) + (local $$$lcssa i32) + (local $$$p$i i32) + (local $$$p$inc468$i i32) + (local $$$pr$i i32) + (local $$$pr477$i i32) + (local $$$pre i32) + (local $$$pre$i i32) + (local $$$pre357 i32) + (local $$$pre564$i i32) + (local $$$pre566$i i32) + (local $$$pre567$i i32) + (local $$$sub514$i i32) + (local $$$sub562$i i32) + (local $$0 i32) + (local $$1 i32) + (local $$10 i32) + (local $$100 i32) + (local $$101 i32) + (local $$102 i32) + (local $$103 i32) + (local $$104 i32) + (local $$105 i32) + (local $$106 i32) + (local $$107 i32) + (local $$108 i32) + (local $$109 i32) + (local $$11 i32) + (local $$110 i32) + (local $$111 i32) + (local $$112 i32) + (local $$113 i32) + (local $$114 i32) + (local $$115 i32) + (local $$116 i32) + (local $$117 i32) + (local $$118 i32) + (local $$119 i32) + (local $$12 i32) + (local $$120 i32) + (local $$121 i32) + (local $$122 i32) + (local $$123 i32) + (local $$124 i32) + (local $$125 i32) + (local $$126 i32) + (local $$127 i32) + (local $$128 i32) + (local $$129 i32) + (local $$13 i32) + (local $$130 i32) + (local $$131 i32) + (local $$132 i32) + (local $$133 i32) + (local $$134 i32) + (local $$135 i32) + (local $$136 i32) + (local $$137 i32) + (local $$138 i32) + (local $$139 i32) + (local $$14 i32) + (local $$140 i32) + (local $$141 i32) + (local $$142 i32) + (local $$143 i32) + (local $$144 i32) + (local $$145 i32) + (local $$146 i32) + (local $$147 i32) + (local $$148 i32) + (local $$149 i32) + (local $$15 i32) + (local $$150 i32) + (local $$151 i32) + (local $$152 i32) + (local $$153 i32) + (local $$154 i32) + (local $$155 i32) + (local $$156 i32) + (local $$157 i32) + (local $$158 i32) + (local $$159 i32) + (local $$16 i32) + (local $$160 i32) + (local $$161 i32) + (local $$162 i32) + (local $$163 i32) + (local $$164 i32) + (local $$165 i32) + (local $$166 i32) + (local $$167 i32) + (local $$168 i32) + (local $$169 i32) + (local $$17 i32) + (local $$170 i32) + (local $$171 i32) + (local $$172 i32) + (local $$173 i32) + (local $$174 i32) + (local $$175 i32) + (local $$176 i32) + (local $$177 i32) + (local $$178 i32) + (local $$179 i32) + (local $$18 i32) + (local $$180 i32) + (local $$181 f64) + (local $$182 i32) + (local $$183 i32) + (local $$184 i32) + (local $$185 i32) + (local $$186 i32) + (local $$187 i32) + (local $$188 i32) + (local $$189 i32) + (local $$19 i32) + (local $$190 i32) + (local $$191 i32) + (local $$192 i32) + (local $$193 i32) + (local $$194 i32) + (local $$195 i32) + (local $$196 i32) + (local $$197 i32) + (local $$198 i32) + (local $$199 i32) + (local $$2 i32) + (local $$20 i32) + (local $$200 i32) + (local $$201 i32) + (local $$202 i32) + (local $$203 i32) + (local $$204 i32) + (local $$205 i32) + (local $$206 i32) + (local $$207 i32) + (local $$208 i32) + (local $$209 i32) + (local $$21 i32) + (local $$210 i32) + (local $$211 i32) + (local $$212 i32) + (local $$213 i32) + (local $$214 i32) + (local $$215 i32) + (local $$216 i32) + (local $$217 i32) + (local $$218 i32) + (local $$219 i32) + (local $$22 i32) + (local $$220 i32) + (local $$221 i32) + (local $$222 i32) + (local $$223 i32) + (local $$224 i32) + (local $$225 i32) + (local $$226 i32) + (local $$227 i32) + (local $$228 i32) + (local $$229 i32) + (local $$23 i32) + (local $$230 i32) + (local $$231 i32) + (local $$232 i32) + (local $$233 i32) + (local $$234 i32) + (local $$235 i32) + (local $$236 i32) + (local $$237 i32) + (local $$238 i32) + (local $$239 i32) + (local $$24 i32) + (local $$240 i32) + (local $$241 i32) + (local $$242 i32) + (local $$243 i32) + (local $$244 i32) + (local $$245 i32) + (local $$246 i32) + (local $$247 i32) + (local $$248 i32) + (local $$249 i32) + (local $$25 i32) + (local $$250 i32) + (local $$251 i32) + (local $$252 i32) + (local $$253 i32) + (local $$254 i32) + (local $$255 i32) + (local $$256 i32) + (local $$257 i32) + (local $$258 i32) + (local $$259 i32) + (local $$26 i32) + (local $$260 i32) + (local $$261 i32) + (local $$262 i32) + (local $$263 i32) + (local $$264 i32) + (local $$265 i32) + (local $$266 i32) + (local $$267 i32) + (local $$268 i32) + (local $$27 i32) + (local $$28 i32) + (local $$29 i32) + (local $$3 i32) + (local $$30 i32) + (local $$31 i32) + (local $$32 i32) + (local $$33 i32) + (local $$34 i32) + (local $$35 i32) + (local $$36 i32) + (local $$37 i32) + (local $$38 i32) + (local $$39 i32) + (local $$4 i32) + (local $$40 i32) + (local $$41 i32) + (local $$42 i32) + (local $$43 i32) + (local $$44 i32) + (local $$45 i32) + (local $$46 i32) + (local $$47 i32) + (local $$48 i32) + (local $$49 i32) + (local $$5 i32) + (local $$50 i32) + (local $$51 i32) + (local $$52 i32) + (local $$53 i32) + (local $$54 i32) + (local $$55 i32) + (local $$56 i32) + (local $$57 i32) + (local $$58 i32) + (local $$59 i32) + (local $$6 i32) + (local $$60 i32) + (local $$61 i32) + (local $$62 i32) + (local $$63 i32) + (local $$64 i32) + (local $$65 i32) + (local $$66 i32) + (local $$67 i32) + (local $$68 i32) + (local $$69 i32) + (local $$7 i32) + (local $$70 i32) + (local $$71 i32) + (local $$72 i32) + (local $$73 i32) + (local $$74 i32) + (local $$75 i32) + (local $$76 i32) + (local $$77 i32) + (local $$78 i32) + (local $$79 i32) + (local $$8 i32) + (local $$80 i32) + (local $$81 i32) + (local $$82 i32) + (local $$83 i32) + (local $$84 i32) + (local $$85 i32) + (local $$86 i32) + (local $$87 i32) + (local $$88 i32) + (local $$89 i32) + (local $$9 i32) + (local $$90 i32) + (local $$91 i32) + (local $$92 i32) + (local $$93 i32) + (local $$94 i32) + (local $$95 i32) + (local $$96 i32) + (local $$97 i32) + (local $$98 i32) + (local $$99 i32) + (local $$a$0 i32) + (local $$a$1 i32) + (local $$a$1$lcssa$i i32) + (local $$a$1549$i i32) + (local $$a$2 i32) + (local $$a$2$ph$i i32) + (local $$a$3$lcssa$i i32) + (local $$a$3539$i i32) + (local $$a$5$lcssa$i i32) + (local $$a$5521$i i32) + (local $$a$6$i i32) + (local $$a$8$i i32) + (local $$a$9$ph$i i32) + (local $$add i32) + (local $$add$i i32) + (local $$add$i$203 i32) + (local $$add$i$239 i32) + (local $$add$i$lcssa i32) + (local $$add$ptr i32) + (local $$add$ptr139 i32) + (local $$add$ptr205 i32) + (local $$add$ptr213$i i32) + (local $$add$ptr257 i32) + (local $$add$ptr311$i i32) + (local $$add$ptr311$z$4$i i32) + (local $$add$ptr340 i32) + (local $$add$ptr354$i i32) + (local $$add$ptr358$i i32) + (local $$add$ptr359 i32) + (local $$add$ptr373$i i32) + (local $$add$ptr43 i32) + (local $$add$ptr43$arrayidx31 i32) + (local $$add$ptr442$i i32) + (local $$add$ptr442$z$3$i i32) + (local $$add$ptr473 i32) + (local $$add$ptr65$i i32) + (local $$add$ptr671$i i32) + (local $$add$ptr742$i i32) + (local $$add$ptr88 i32) + (local $$add113$i i32) + (local $$add150$i i32) + (local $$add154$i i32) + (local $$add163$i i32) + (local $$add165$i i32) + (local $$add269 i32) + (local $$add269$p$0 i32) + (local $$add273$i i32) + (local $$add275$i i32) + (local $$add284$i i32) + (local $$add313$i i32) + (local $$add322 i32) + (local $$add355$i i32) + (local $$add395 i32) + (local $$add410$i f64) + (local $$add412 i32) + (local $$add414$i i32) + (local $$add441 i32) + (local $$add477$neg$i i32) + (local $$add561$i i32) + (local $$add608$i i32) + (local $$add612$i i32) + (local $$add620$i i32) + (local $$add653$i i32) + (local $$add67$i i32) + (local $$add737$i i32) + (local $$add810$i i32) + (local $$add87$i f64) + (local $$add90$i f64) + (local $$and i32) + (local $$and$i i32) + (local $$and$i$216 i32) + (local $$and$i$231 i32) + (local $$and$i$238 i32) + (local $$and$i$244 i32) + (local $$and$i$406$i i32) + (local $$and$i$412$i i32) + (local $$and$i$418$i i32) + (local $$and$i$424$i i32) + (local $$and$i$430$i i32) + (local $$and$i$436$i i32) + (local $$and$i$442$i i32) + (local $$and$i$448$i i32) + (local $$and$i$454$i i32) + (local $$and$i$460$i i32) + (local $$and$i$466$i i32) + (local $$and$i$472$i i32) + (local $$and$i$i i32) + (local $$and12$i i32) + (local $$and134$i i32) + (local $$and210 i32) + (local $$and214 i32) + (local $$and216 i32) + (local $$and219 i32) + (local $$and249 i32) + (local $$and254 i32) + (local $$and263 i32) + (local $$and282$i i32) + (local $$and289 i32) + (local $$and294 i32) + (local $$and309 i32) + (local $$and309$fl$4 i32) + (local $$and36$i i32) + (local $$and379$i i32) + (local $$and483$i i32) + (local $$and610$pre$phi$iZ2D i32) + (local $$and62$i i32) + (local $$arg i32) + (local $$arglist_current i32) + (local $$arglist_current2 i32) + (local $$arglist_next i32) + (local $$arglist_next3 i32) + (local $$argpos$0 i32) + (local $$arraydecay208$add$ptr213$i i32) + (local $$arrayidx$i i32) + (local $$arrayidx$i$236 i32) + (local $$arrayidx114 i32) + (local $$arrayidx117$i i32) + (local $$arrayidx119 i32) + (local $$arrayidx124 i32) + (local $$arrayidx132 i32) + (local $$arrayidx16 i32) + (local $$arrayidx173 i32) + (local $$arrayidx192 i32) + (local $$arrayidx251$i i32) + (local $$arrayidx31 i32) + (local $$arrayidx35 i32) + (local $$arrayidx370 i32) + (local $$arrayidx453$i i32) + (local $$arrayidx469 i32) + (local $$arrayidx481 i32) + (local $$arrayidx489$i i32) + (local $$arrayidx68 i32) + (local $$arrayidx73 i32) + (local $$arrayidx81 i32) + (local $$big$i i32) + (local $$buf i32) + (local $$buf$i i32) + (local $$call i32) + (local $$call344 i32) + (local $$call345 i32) + (local $$call356 i32) + (local $$call384 i32) + (local $$call411 i32) + (local $$call55$i f64) + (local $$carry$0544$i i32) + (local $$carry262$0535$i i32) + (local $$cmp i32) + (local $$cmp1 i32) + (local $$cmp103$i i32) + (local $$cmp105 i32) + (local $$cmp111 i32) + (local $$cmp116 i32) + (local $$cmp126 i32) + (local $$cmp127$i i32) + (local $$cmp13 i32) + (local $$cmp147$i i32) + (local $$cmp165 i32) + (local $$cmp176 i32) + (local $$cmp18 i32) + (local $$cmp181 i32) + (local $$cmp184 i32) + (local $$cmp188$i i32) + (local $$cmp196$i i32) + (local $$cmp205$i i32) + (local $$cmp211 i32) + (local $$cmp225$547$i i32) + (local $$cmp225$i i32) + (local $$cmp228$i i32) + (local $$cmp235$543$i i32) + (local $$cmp235$i i32) + (local $$cmp240 i32) + (local $$cmp249$i i32) + (local $$cmp259$537$i i32) + (local $$cmp259$i i32) + (local $$cmp265$i i32) + (local $$cmp270 i32) + (local $$cmp277$533$i i32) + (local $$cmp277$i i32) + (local $$cmp299$i i32) + (local $$cmp306 i32) + (local $$cmp308$i i32) + (local $$cmp315$i i32) + (local $$cmp323 i32) + (local $$cmp324$529$i i32) + (local $$cmp324$i i32) + (local $$cmp333$i i32) + (local $$cmp338$i i32) + (local $$cmp350$i i32) + (local $$cmp363$525$i i32) + (local $$cmp37 i32) + (local $$cmp374$i i32) + (local $$cmp377 i32) + (local $$cmp377$314 i32) + (local $$cmp38$i i32) + (local $$cmp385 i32) + (local $$cmp385$i i32) + (local $$cmp390 i32) + (local $$cmp390$i i32) + (local $$cmp397 i32) + (local $$cmp403$i i32) + (local $$cmp404 i32) + (local $$cmp404$324 i32) + (local $$cmp411$i i32) + (local $$cmp413 i32) + (local $$cmp416$519$i i32) + (local $$cmp416$i i32) + (local $$cmp420$i i32) + (local $$cmp421 i32) + (local $$cmp433$515$i i32) + (local $$cmp433$i i32) + (local $$cmp434 i32) + (local $$cmp442 i32) + (local $$cmp443$i i32) + (local $$cmp450$i i32) + (local $$cmp450$lcssa$i i32) + (local $$cmp466 i32) + (local $$cmp470$i i32) + (local $$cmp473$i i32) + (local $$cmp478 i32) + (local $$cmp478$295 i32) + (local $$cmp48$i i32) + (local $$cmp495$511$i i32) + (local $$cmp495$i i32) + (local $$cmp50 i32) + (local $$cmp50$308 i32) + (local $$cmp505$i i32) + (local $$cmp515$i i32) + (local $$cmp528$i i32) + (local $$cmp563$i i32) + (local $$cmp577$i i32) + (local $$cmp59$i i32) + (local $$cmp614$i i32) + (local $$cmp617$i i32) + (local $$cmp623$i i32) + (local $$cmp636$506$i i32) + (local $$cmp636$i i32) + (local $$cmp65 i32) + (local $$cmp660$i i32) + (local $$cmp665$i i32) + (local $$cmp673$i i32) + (local $$cmp678$491$i i32) + (local $$cmp678$i i32) + (local $$cmp686$i i32) + (local $$cmp707$486$i i32) + (local $$cmp707$i i32) + (local $$cmp710$487$i i32) + (local $$cmp710$i i32) + (local $$cmp722$483$i i32) + (local $$cmp722$i i32) + (local $$cmp727$i i32) + (local $$cmp745$i i32) + (local $$cmp748$499$i i32) + (local $$cmp748$i i32) + (local $$cmp75 i32) + (local $$cmp760$i i32) + (local $$cmp765$i i32) + (local $$cmp770$495$i i32) + (local $$cmp770$i i32) + (local $$cmp777$i i32) + (local $$cmp790$i i32) + (local $$cmp818$i i32) + (local $$cmp82$i i32) + (local $$cmp94$i i32) + (local $$cmp97 i32) + (local $$cnt$0 i32) + (local $$cnt$1 i32) + (local $$cnt$1$lcssa i32) + (local $$cond$i i32) + (local $$cond100$i i32) + (local $$cond233$i i32) + (local $$cond245 i32) + (local $$cond271$i i32) + (local $$cond304$i i32) + (local $$cond354 i32) + (local $$cond426 i32) + (local $$cond43$i i32) + (local $$cond53$i i32) + (local $$cond629$i i32) + (local $$cond732$i i32) + (local $$cond800$i i32) + (local $$conv$4$i i32) + (local $$conv$4$i$197 i32) + (local $$conv$4$i$211 i32) + (local $$conv$i i32) + (local $$conv$i$205 i32) + (local $$conv1$i i32) + (local $$conv111$i i32) + (local $$conv114$i i32) + (local $$conv116$i i32) + (local $$conv118$393$i i32) + (local $$conv120 i32) + (local $$conv121$i i32) + (local $$conv123$i f64) + (local $$conv134 i32) + (local $$conv163 i32) + (local $$conv174 i32) + (local $$conv174$lcssa i32) + (local $$conv207 i32) + (local $$conv216$i i32) + (local $$conv218$i f64) + (local $$conv229 i32) + (local $$conv232 i32) + (local $$conv242$i$lcssa i32) + (local $$conv32 i32) + (local $$conv48 i32) + (local $$conv48$307 i32) + (local $$conv48311 i32) + (local $$conv58 i32) + (local $$conv644$i i32) + (local $$conv646$i i32) + (local $$conv69 i32) + (local $$conv83 i32) + (local $$d$0$542$i i32) + (local $$d$0$i i32) + (local $$d$0545$i i32) + (local $$d$1534$i i32) + (local $$d$2$lcssa$i i32) + (local $$d$2520$i i32) + (local $$d$4$i i32) + (local $$d$5494$i i32) + (local $$d$6488$i i32) + (local $$d$7500$i i32) + (local $$dec$i i32) + (local $$dec476$i i32) + (local $$dec481$i i32) + (local $$dec78$i i32) + (local $$div274$i i32) + (local $$div356$i i32) + (local $$div378$i i32) + (local $$div384$i i32) + (local $$e$0531$i i32) + (local $$e$1$i i32) + (local $$e$2517$i i32) + (local $$e$4$i i32) + (local $$e$5$ph$i i32) + (local $$e2$i i32) + (local $$ebuf0$i i32) + (local $$estr$0$i i32) + (local $$estr$1$lcssa$i i32) + (local $$estr$1507$i i32) + (local $$estr$2$i i32) + (local $$exitcond$i i32) + (local $$expanded i32) + (local $$expanded10 i32) + (local $$expanded11 i32) + (local $$expanded13 i32) + (local $$expanded14 i32) + (local $$expanded15 i32) + (local $$expanded4 i32) + (local $$expanded6 i32) + (local $$expanded7 i32) + (local $$expanded8 i32) + (local $$fl$0284 i32) + (local $$fl$0310 i32) + (local $$fl$1 i32) + (local $$fl$1$and219 i32) + (local $$fl$3 i32) + (local $$fl$4 i32) + (local $$fl$6 i32) + (local $$i$0$lcssa i32) + (local $$i$0$lcssa368 i32) + (local $$i$0316 i32) + (local $$i$0530$i i32) + (local $$i$07$i i32) + (local $$i$07$i$201 i32) + (local $$i$1$lcssa$i i32) + (local $$i$1325 i32) + (local $$i$1526$i i32) + (local $$i$2299 i32) + (local $$i$2299$lcssa i32) + (local $$i$2516$i i32) + (local $$i$3296 i32) + (local $$i$3512$i i32) + (local $$i137 i32) + (local $$i86 i32) + (local $$idxprom$i i32) + (local $$inc i32) + (local $$inc$i i32) + (local $$inc425$i i32) + (local $$inc438$i i32) + (local $$inc468$i i32) + (local $$inc488 i32) + (local $$inc500$i i32) + (local $$incdec$ptr i32) + (local $$incdec$ptr$i i32) + (local $$incdec$ptr$i$204 i32) + (local $$incdec$ptr$i$212 i32) + (local $$incdec$ptr$i$212$lcssa i32) + (local $$incdec$ptr$i$225 i32) + (local $$incdec$ptr$i$lcssa i32) + (local $$incdec$ptr106$i i32) + (local $$incdec$ptr112$i i32) + (local $$incdec$ptr115$i i32) + (local $$incdec$ptr122$i i32) + (local $$incdec$ptr137$i i32) + (local $$incdec$ptr169 i32) + (local $$incdec$ptr169$lcssa i32) + (local $$incdec$ptr169269 i32) + (local $$incdec$ptr169271 i32) + (local $$incdec$ptr169271$lcssa414 i32) + (local $$incdec$ptr169272 i32) + (local $$incdec$ptr169274 i32) + (local $$incdec$ptr169275 i32) + (local $$incdec$ptr169276$lcssa i32) + (local $$incdec$ptr169276301 i32) + (local $$incdec$ptr217$i i32) + (local $$incdec$ptr217$i$lcssa i32) + (local $$incdec$ptr23 i32) + (local $$incdec$ptr246$i i32) + (local $$incdec$ptr288$i i32) + (local $$incdec$ptr292$570$i i32) + (local $$incdec$ptr292$a$3$571$i i32) + (local $$incdec$ptr292$a$3$i i32) + (local $$incdec$ptr292$a$3573$i i32) + (local $$incdec$ptr292$i i32) + (local $$incdec$ptr296$i i32) + (local $$incdec$ptr383 i32) + (local $$incdec$ptr410 i32) + (local $$incdec$ptr419$i i32) + (local $$incdec$ptr423$i i32) + (local $$incdec$ptr62 i32) + (local $$incdec$ptr639$i i32) + (local $$incdec$ptr645$i i32) + (local $$incdec$ptr647$i i32) + (local $$incdec$ptr681$i i32) + (local $$incdec$ptr689$i i32) + (local $$incdec$ptr698$i i32) + (local $$incdec$ptr698$i$lcssa i32) + (local $$incdec$ptr725$i i32) + (local $$incdec$ptr734$i i32) + (local $$incdec$ptr773$i i32) + (local $$incdec$ptr776$i i32) + (local $$incdec$ptr808$i i32) + (local $$isdigit i32) + (local $$isdigit$6$i i32) + (local $$isdigit$6$i$199 i32) + (local $$isdigit$i i32) + (local $$isdigit$i$207 i32) + (local $$isdigit188 i32) + (local $$isdigit190 i32) + (local $$isdigittmp i32) + (local $$isdigittmp$ i32) + (local $$isdigittmp$5$i i32) + (local $$isdigittmp$5$i$198 i32) + (local $$isdigittmp$i i32) + (local $$isdigittmp$i$206 i32) + (local $$isdigittmp187 i32) + (local $$isdigittmp189 i32) + (local $$isdigittmp8$i i32) + (local $$isdigittmp8$i$200 i32) + (local $$j$0$524$i i32) + (local $$j$0$i i32) + (local $$j$0527$i i32) + (local $$j$1513$i i32) + (local $$j$2$i i32) + (local $$l$0 i32) + (local $$l$0$i i32) + (local $$l$1$i i32) + (local $$l$1315 i32) + (local $$l$2 i32) + (local $$l10n$0 i32) + (local $$l10n$0$lcssa i32) + (local $$l10n$0$phi i32) + (local $$l10n$1 i32) + (local $$l10n$2 i32) + (local $$l10n$3 i32) + (local $$land$ext$neg$i i32) + (local $$lnot$ext i32) + (local $$lnot$i i32) + (local $$lnot455$i i32) + (local $$lnot483 i32) + (local $$lor$ext$i i32) + (local $$mb i32) + (local $$mul$i i32) + (local $$mul$i$202 i32) + (local $$mul$i$240 f64) + (local $$mul125$i f64) + (local $$mul202$i f64) + (local $$mul220$i f64) + (local $$mul286$i i32) + (local $$mul286$i$lcssa i32) + (local $$mul322$i i32) + (local $$mul328$i i32) + (local $$mul335$i i32) + (local $$mul349$i i32) + (local $$mul367$i i32) + (local $$mul406$i f64) + (local $$mul407$i f64) + (local $$mul431$i i32) + (local $$mul437$i i32) + (local $$mul499$i i32) + (local $$mul513$i i32) + (local $$mul80$i f64) + (local $$mul80$i$lcssa f64) + (local $$notlhs$i i32) + (local $$notrhs$i i32) + (local $$or i32) + (local $$or$cond i32) + (local $$or$cond$i i32) + (local $$or$cond1$not$i i32) + (local $$or$cond192 i32) + (local $$or$cond193 i32) + (local $$or$cond195 i32) + (local $$or$cond2$i i32) + (local $$or$cond384 i32) + (local $$or$cond395$i i32) + (local $$or$cond397$i i32) + (local $$or$cond401$i i32) + (local $$or$i i32) + (local $$or$i$241 i32) + (local $$or100 i32) + (local $$or120$i i32) + (local $$or246 i32) + (local $$or504$i i32) + (local $$or613$i i32) + (local $$p$0 i32) + (local $$p$1 i32) + (local $$p$2 i32) + (local $$p$2$add322 i32) + (local $$p$3 i32) + (local $$p$4365 i32) + (local $$p$5 i32) + (local $$p$addr$2$$sub514398$i i32) + (local $$p$addr$2$$sub562399$i i32) + (local $$p$addr$2$i i32) + (local $$p$addr$3$i i32) + (local $$p$addr$4$lcssa$i i32) + (local $$p$addr$4489$i i32) + (local $$p$addr$5$lcssa$i i32) + (local $$p$addr$5501$i i32) + (local $$pl$0 i32) + (local $$pl$0$i i32) + (local $$pl$1 i32) + (local $$pl$1$i i32) + (local $$pl$2 i32) + (local $$prefix$0 i32) + (local $$prefix$0$add$ptr65$i i32) + (local $$prefix$0$i i32) + (local $$prefix$1 i32) + (local $$prefix$2 i32) + (local $$r$0$a$9$i i32) + (local $$re$1482$i i32) + (local $$rem360$i i32) + (local $$rem370$i i32) + (local $$rem494$510$i i32) + (local $$rem494$i i32) + (local $$retval$0 i32) + (local $$retval$0$i i32) + (local $$round$0481$i f64) + (local $$round377$1$i f64) + (local $$s$0$i i32) + (local $$s$1$i i32) + (local $$s$1$i$lcssa i32) + (local $$s$addr$0$lcssa$i$229 i32) + (local $$s$addr$06$i i32) + (local $$s$addr$06$i$221 i32) + (local $$s35$0$i i32) + (local $$s668$0492$i i32) + (local $$s668$1$i i32) + (local $$s715$0$lcssa$i i32) + (local $$s715$0484$i i32) + (local $$s753$0$i i32) + (local $$s753$1496$i i32) + (local $$s753$2$i i32) + (local $$shl i32) + (local $$shl280$i i32) + (local $$shl60 i32) + (local $$shr i32) + (local $$shr283$i i32) + (local $$shr285$i i32) + (local $$small$0$i f64) + (local $$small$1$i f64) + (local $$st$0 i32) + (local $$st$0$lcssa415 i32) + (local $$storemerge i32) + (local $$storemerge$186282 i32) + (local $$storemerge$186309 i32) + (local $$storemerge$191 i32) + (local $$sub i32) + (local $$sub$i f64) + (local $$sub$ptr$div$i i32) + (local $$sub$ptr$div321$i i32) + (local $$sub$ptr$div347$i i32) + (local $$sub$ptr$div430$i i32) + (local $$sub$ptr$div511$i i32) + (local $$sub$ptr$lhs$cast i32) + (local $$sub$ptr$lhs$cast$i i32) + (local $$sub$ptr$lhs$cast160$i i32) + (local $$sub$ptr$lhs$cast305$i i32) + (local $$sub$ptr$lhs$cast317 i32) + (local $$sub$ptr$lhs$cast344$i i32) + (local $$sub$ptr$lhs$cast361 i32) + (local $$sub$ptr$lhs$cast431 i32) + (local $$sub$ptr$lhs$cast508$i i32) + (local $$sub$ptr$lhs$cast694$i i32) + (local $$sub$ptr$rhs$cast i32) + (local $$sub$ptr$rhs$cast$i i32) + (local $$sub$ptr$rhs$cast152$i i32) + (local $$sub$ptr$rhs$cast161$i i32) + (local $$sub$ptr$rhs$cast174$i i32) + (local $$sub$ptr$rhs$cast267 i32) + (local $$sub$ptr$rhs$cast306$i i32) + (local $$sub$ptr$rhs$cast318 i32) + (local $$sub$ptr$rhs$cast319$i i32) + (local $$sub$ptr$rhs$cast345$i i32) + (local $$sub$ptr$rhs$cast362 i32) + (local $$sub$ptr$rhs$cast428$i i32) + (local $$sub$ptr$rhs$cast432 i32) + (local $$sub$ptr$rhs$cast634$504$i i32) + (local $$sub$ptr$rhs$cast634$i i32) + (local $$sub$ptr$rhs$cast649$i i32) + (local $$sub$ptr$rhs$cast695$i i32) + (local $$sub$ptr$rhs$cast788$i i32) + (local $$sub$ptr$rhs$cast812$i i32) + (local $$sub$ptr$sub i32) + (local $$sub$ptr$sub$i i32) + (local $$sub$ptr$sub145$i i32) + (local $$sub$ptr$sub153$i i32) + (local $$sub$ptr$sub159$i i32) + (local $$sub$ptr$sub162$i i32) + (local $$sub$ptr$sub172$i i32) + (local $$sub$ptr$sub175$i i32) + (local $$sub$ptr$sub268 i32) + (local $$sub$ptr$sub307$i i32) + (local $$sub$ptr$sub319 i32) + (local $$sub$ptr$sub320$i i32) + (local $$sub$ptr$sub346$i i32) + (local $$sub$ptr$sub363 i32) + (local $$sub$ptr$sub429$i i32) + (local $$sub$ptr$sub433 i32) + (local $$sub$ptr$sub433$p$5 i32) + (local $$sub$ptr$sub510$i i32) + (local $$sub$ptr$sub635$505$i i32) + (local $$sub$ptr$sub635$i i32) + (local $$sub$ptr$sub650$i i32) + (local $$sub$ptr$sub650$pn$i i32) + (local $$sub$ptr$sub696$i i32) + (local $$sub$ptr$sub789$i i32) + (local $$sub$ptr$sub813$i i32) + (local $$sub101 i32) + (local $$sub124$i f64) + (local $$sub135 i32) + (local $$sub146$i i32) + (local $$sub164 i32) + (local $$sub175 i32) + (local $$sub181$i i32) + (local $$sub203$i i32) + (local $$sub219$i f64) + (local $$sub256$i i32) + (local $$sub264$i i32) + (local $$sub281$i i32) + (local $$sub336$i i32) + (local $$sub343$i i32) + (local $$sub357$i i32) + (local $$sub389 i32) + (local $$sub409$i i32) + (local $$sub478$i i32) + (local $$sub480$i i32) + (local $$sub514$i i32) + (local $$sub54 i32) + (local $$sub562$i i32) + (local $$sub59 i32) + (local $$sub626$le$i i32) + (local $$sub735$i i32) + (local $$sub74$i i32) + (local $$sub806$i i32) + (local $$sub84 i32) + (local $$sub85$i f64) + (local $$sub86$i f64) + (local $$sub88$i f64) + (local $$sub91$i f64) + (local $$sub97$i i32) + (local $$sum i32) + (local $$t$0 i32) + (local $$t$1 i32) + (local $$t$addr$0$i i32) + (local $$t$addr$1$i i32) + (local $$tobool i32) + (local $$tobool$i i32) + (local $$tobool$i$217 i32) + (local $$tobool$i$232 i32) + (local $$tobool$i$245 i32) + (local $$tobool$i$407$i i32) + (local $$tobool$i$413$i i32) + (local $$tobool$i$419$i i32) + (local $$tobool$i$425$i i32) + (local $$tobool$i$431$i i32) + (local $$tobool$i$437$i i32) + (local $$tobool$i$443$i i32) + (local $$tobool$i$449$i i32) + (local $$tobool$i$455$i i32) + (local $$tobool$i$461$i i32) + (local $$tobool$i$467$i i32) + (local $$tobool$i$473$i i32) + (local $$tobool$i$i i32) + (local $$tobool13$i i32) + (local $$tobool135$i i32) + (local $$tobool139$i i32) + (local $$tobool140$i i32) + (local $$tobool141 i32) + (local $$tobool178 i32) + (local $$tobool208 i32) + (local $$tobool217 i32) + (local $$tobool222$i i32) + (local $$tobool244$i i32) + (local $$tobool25 i32) + (local $$tobool255 i32) + (local $$tobool264 i32) + (local $$tobool28 i32) + (local $$tobool290 i32) + (local $$tobool290$569$i i32) + (local $$tobool290$i i32) + (local $$tobool294$i i32) + (local $$tobool295 i32) + (local $$tobool314 i32) + (local $$tobool341$i i32) + (local $$tobool349 i32) + (local $$tobool357 i32) + (local $$tobool37$i i32) + (local $$tobool371$i i32) + (local $$tobool380 i32) + (local $$tobool380$i i32) + (local $$tobool400$i i32) + (local $$tobool407 i32) + (local $$tobool459 i32) + (local $$tobool462 i32) + (local $$tobool470 i32) + (local $$tobool484$i i32) + (local $$tobool490$i i32) + (local $$tobool55 i32) + (local $$tobool56$i i32) + (local $$tobool63$i i32) + (local $$tobool76$i i32) + (local $$tobool76552$i i32) + (local $$tobool781$i i32) + (local $$tobool79$i i32) + (local $$tobool9$i i32) + (local $$tobool90 i32) + (local $$w$0 i32) + (local $$w$1 i32) + (local $$w$2 i32) + (local $$w$add165$i i32) + (local $$w$add653$i i32) + (local $$wc i32) + (local $$ws$0317 i32) + (local $$ws$1326 i32) + (local $$xor i32) + (local $$xor$i i32) + (local $$xor167$i i32) + (local $$xor186$i i32) + (local $$xor449 i32) + (local $$xor457 i32) + (local $$xor655$i i32) + (local $$xor816$i i32) + (local $$y$addr$0$i f64) + (local $$y$addr$1$i f64) + (local $$y$addr$2$i f64) + (local $$y$addr$3$i f64) + (local $$y$addr$4$i f64) + (local $$z$0$i i32) + (local $$z$0$lcssa i32) + (local $$z$0302 i32) + (local $$z$1 i32) + (local $$z$1$lcssa$i i32) + (local $$z$1548$i i32) + (local $$z$2 i32) + (local $$z$2$i i32) + (local $$z$2$i$lcssa i32) + (local $$z$3$lcssa$i i32) + (local $$z$3538$i i32) + (local $$z$4$i i32) + (local $$z$7$add$ptr742$i i32) + (local $$z$7$i i32) + (local $$z$7$i$lcssa i32) + (local $$z$7$ph$i i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 624) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$big$i + (i32.add + (get_local $sp) + (i32.const 24) + ) + ) + (set_local $$e2$i + (i32.add + (get_local $sp) + (i32.const 16) + ) + ) + (set_local $$buf$i + (i32.add + (get_local $sp) + (i32.const 588) + ) + ) + (set_local $$ebuf0$i + (i32.add + (get_local $sp) + (i32.const 576) + ) + ) + (set_local $$arg + (get_local $sp) + ) + (set_local $$buf + (i32.add + (get_local $sp) + (i32.const 536) + ) + ) + (set_local $$wc + (i32.add + (get_local $sp) + (i32.const 8) + ) + ) + (set_local $$mb + (i32.add + (get_local $sp) + (i32.const 528) + ) + ) + (set_local $$tobool25 + (i32.ne + (get_local $$f) + (i32.const 0) + ) + ) + (set_local $$add$ptr205 + (i32.add + (get_local $$buf) + (i32.const 40) + ) + ) + (set_local $$sub$ptr$lhs$cast317 + (get_local $$add$ptr205) + ) + (set_local $$add$ptr340 + (i32.add + (get_local $$buf) + (i32.const 39) + ) + ) + (set_local $$arrayidx370 + (i32.add + (get_local $$wc) + (i32.const 4) + ) + ) + (set_local $$arrayidx$i$236 + (i32.add + (get_local $$ebuf0$i) + (i32.const 12) + ) + ) + (set_local $$incdec$ptr106$i + (i32.add + (get_local $$ebuf0$i) + (i32.const 11) + ) + ) + (set_local $$sub$ptr$rhs$cast$i + (get_local $$buf$i) + ) + (set_local $$sub$ptr$lhs$cast160$i + (get_local $$arrayidx$i$236) + ) + (set_local $$sub$ptr$sub159$i + (i32.sub + (get_local $$sub$ptr$lhs$cast160$i) + (get_local $$sub$ptr$rhs$cast$i) + ) + ) + (set_local $$sub$ptr$sub145$i + (i32.sub + (i32.const -2) + (get_local $$sub$ptr$rhs$cast$i) + ) + ) + (set_local $$sub$ptr$sub153$i + (i32.add + (get_local $$sub$ptr$lhs$cast160$i) + (i32.const 2) + ) + ) + (set_local $$add$ptr213$i + (i32.add + (get_local $$big$i) + (i32.const 288) + ) + ) + (set_local $$add$ptr671$i + (i32.add + (get_local $$buf$i) + (i32.const 9) + ) + ) + (set_local $$sub$ptr$lhs$cast694$i + (get_local $$add$ptr671$i) + ) + (set_local $$incdec$ptr689$i + (i32.add + (get_local $$buf$i) + (i32.const 8) + ) + ) + (set_local $$cnt$0 + (i32.const 0) + ) + (set_local $$incdec$ptr169275 + (get_local $$fmt) + ) + (set_local $$l$0 + (i32.const 0) + ) + (set_local $$l10n$0 + (i32.const 0) + ) + (loop $label$continue$L1 + (block $label$break$L1 + (set_local $$cmp + (i32.gt_s + (get_local $$cnt$0) + (i32.const -1) + ) + ) + (block $do-once + (if + (get_local $$cmp) + (block + (set_local $$sub + (i32.sub + (i32.const 2147483647) + (get_local $$cnt$0) + ) + ) + (set_local $$cmp1 + (i32.gt_s + (get_local $$l$0) + (get_local $$sub) + ) + ) + (if + (get_local $$cmp1) + (block + (set_local $$call + (call $___errno_location) + ) + (i32.store + (get_local $$call) + (i32.const 75) + ) + (set_local $$cnt$1 + (i32.const -1) + ) + (br $do-once) + ) + (block + (set_local $$add + (i32.add + (get_local $$l$0) + (get_local $$cnt$0) + ) + ) + (set_local $$cnt$1 + (get_local $$add) + ) + (br $do-once) + ) + ) + ) + (set_local $$cnt$1 + (get_local $$cnt$0) + ) + ) + ) + (set_local $$0 + (i32.load8_s + (get_local $$incdec$ptr169275) + ) + ) + (set_local $$tobool + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$0) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$cnt$1$lcssa + (get_local $$cnt$1) + ) + (set_local $$l10n$0$lcssa + (get_local $$l10n$0) + ) + (set_local $label + (i32.const 242) + ) + (br $label$break$L1) + ) + (block + (set_local $$1 + (get_local $$0) + ) + (set_local $$incdec$ptr169274 + (get_local $$incdec$ptr169275) + ) + ) + ) + (loop $label$continue$L9 + (block $label$break$L9 + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.sub + (i32.shr_s + (i32.shl + (get_local $$1) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + ) + (block + (set_local $$incdec$ptr169276301 + (get_local $$incdec$ptr169274) + ) + (set_local $$z$0302 + (get_local $$incdec$ptr169274) + ) + (set_local $label + (i32.const 9) + ) + (br $label$break$L9) + (br $switch) + ) + ) + (block + (set_local $$incdec$ptr169276$lcssa + (get_local $$incdec$ptr169274) + ) + (set_local $$z$0$lcssa + (get_local $$incdec$ptr169274) + ) + (br $label$break$L9) + (br $switch) + ) + ) + (nop) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$incdec$ptr169274) + (i32.const 1) + ) + ) + (set_local $$$pre + (i32.load8_s + (get_local $$incdec$ptr) + ) + ) + (set_local $$1 + (get_local $$$pre) + ) + (set_local $$incdec$ptr169274 + (get_local $$incdec$ptr) + ) + (br $label$continue$L9) + ) + ) + (block $label$break$L12 + (if + (i32.eq + (get_local $label) + (i32.const 9) + ) + (loop $while-in + (block $while-out + (set_local $label + (i32.const 0) + ) + (set_local $$arrayidx16 + (i32.add + (get_local $$incdec$ptr169276301) + (i32.const 1) + ) + ) + (set_local $$2 + (i32.load8_s + (get_local $$arrayidx16) + ) + ) + (set_local $$cmp18 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$2) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 37) + ) + ) + (if + (i32.eqz + (get_local $$cmp18) + ) + (block + (set_local $$incdec$ptr169276$lcssa + (get_local $$incdec$ptr169276301) + ) + (set_local $$z$0$lcssa + (get_local $$z$0302) + ) + (br $label$break$L12) + ) + ) + (set_local $$incdec$ptr23 + (i32.add + (get_local $$z$0302) + (i32.const 1) + ) + ) + (set_local $$add$ptr + (i32.add + (get_local $$incdec$ptr169276301) + (i32.const 2) + ) + ) + (set_local $$3 + (i32.load8_s + (get_local $$add$ptr) + ) + ) + (set_local $$cmp13 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$3) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 37) + ) + ) + (if + (get_local $$cmp13) + (block + (set_local $$incdec$ptr169276301 + (get_local $$add$ptr) + ) + (set_local $$z$0302 + (get_local $$incdec$ptr23) + ) + (set_local $label + (i32.const 9) + ) + ) + (block + (set_local $$incdec$ptr169276$lcssa + (get_local $$add$ptr) + ) + (set_local $$z$0$lcssa + (get_local $$incdec$ptr23) + ) + (br $while-out) + ) + ) + (br $while-in) + ) + ) + ) + ) + (set_local $$sub$ptr$lhs$cast + (get_local $$z$0$lcssa) + ) + (set_local $$sub$ptr$rhs$cast + (get_local $$incdec$ptr169275) + ) + (set_local $$sub$ptr$sub + (i32.sub + (get_local $$sub$ptr$lhs$cast) + (get_local $$sub$ptr$rhs$cast) + ) + ) + (if + (get_local $$tobool25) + (block + (set_local $$4 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i + (i32.and + (get_local $$4) + (i32.const 32) + ) + ) + (set_local $$tobool$i + (i32.eq + (get_local $$and$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i) + (drop + (call $___fwritex + (get_local $$incdec$ptr169275) + (get_local $$sub$ptr$sub) + (get_local $$f) + ) + ) + ) + ) + ) + (set_local $$tobool28 + (i32.eq + (get_local $$z$0$lcssa) + (get_local $$incdec$ptr169275) + ) + ) + (if + (i32.eqz + (get_local $$tobool28) + ) + (block + (set_local $$l10n$0$phi + (get_local $$l10n$0) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169276$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$0$phi) + ) + (br $label$continue$L1) + ) + ) + (set_local $$arrayidx31 + (i32.add + (get_local $$incdec$ptr169276$lcssa) + (i32.const 1) + ) + ) + (set_local $$5 + (i32.load8_s + (get_local $$arrayidx31) + ) + ) + (set_local $$conv32 + (i32.shr_s + (i32.shl + (get_local $$5) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp + (i32.add + (get_local $$conv32) + (i32.const -48) + ) + ) + (set_local $$isdigit + (i32.lt_u + (get_local $$isdigittmp) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit) + (block + (set_local $$arrayidx35 + (i32.add + (get_local $$incdec$ptr169276$lcssa) + (i32.const 2) + ) + ) + (set_local $$6 + (i32.load8_s + (get_local $$arrayidx35) + ) + ) + (set_local $$cmp37 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$6) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 36) + ) + ) + (set_local $$add$ptr43 + (i32.add + (get_local $$incdec$ptr169276$lcssa) + (i32.const 3) + ) + ) + (set_local $$add$ptr43$arrayidx31 + (if (result i32) + (get_local $$cmp37) + (get_local $$add$ptr43) + (get_local $$arrayidx31) + ) + ) + (set_local $$$l10n$0 + (if (result i32) + (get_local $$cmp37) + (i32.const 1) + (get_local $$l10n$0) + ) + ) + (set_local $$isdigittmp$ + (if (result i32) + (get_local $$cmp37) + (get_local $$isdigittmp) + (i32.const -1) + ) + ) + (set_local $$$pre357 + (i32.load8_s + (get_local $$add$ptr43$arrayidx31) + ) + ) + (set_local $$7 + (get_local $$$pre357) + ) + (set_local $$argpos$0 + (get_local $$isdigittmp$) + ) + (set_local $$l10n$1 + (get_local $$$l10n$0) + ) + (set_local $$storemerge + (get_local $$add$ptr43$arrayidx31) + ) + ) + (block + (set_local $$7 + (get_local $$5) + ) + (set_local $$argpos$0 + (i32.const -1) + ) + (set_local $$l10n$1 + (get_local $$l10n$0) + ) + (set_local $$storemerge + (get_local $$arrayidx31) + ) + ) + ) + (set_local $$conv48$307 + (i32.shr_s + (i32.shl + (get_local $$7) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$8 + (i32.and + (get_local $$conv48$307) + (i32.const -32) + ) + ) + (set_local $$cmp50$308 + (i32.eq + (get_local $$8) + (i32.const 32) + ) + ) + (block $label$break$L25 + (if + (get_local $$cmp50$308) + (block + (set_local $$9 + (get_local $$7) + ) + (set_local $$conv48311 + (get_local $$conv48$307) + ) + (set_local $$fl$0310 + (i32.const 0) + ) + (set_local $$storemerge$186309 + (get_local $$storemerge) + ) + (loop $while-in4 + (block $while-out3 + (set_local $$sub54 + (i32.add + (get_local $$conv48311) + (i32.const -32) + ) + ) + (set_local $$shl + (i32.shl + (i32.const 1) + (get_local $$sub54) + ) + ) + (set_local $$and + (i32.and + (get_local $$shl) + (i32.const 75913) + ) + ) + (set_local $$tobool55 + (i32.eq + (get_local $$and) + (i32.const 0) + ) + ) + (if + (get_local $$tobool55) + (block + (set_local $$12 + (get_local $$9) + ) + (set_local $$fl$0284 + (get_local $$fl$0310) + ) + (set_local $$storemerge$186282 + (get_local $$storemerge$186309) + ) + (br $label$break$L25) + ) + ) + (set_local $$conv58 + (i32.shr_s + (i32.shl + (get_local $$9) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$sub59 + (i32.add + (get_local $$conv58) + (i32.const -32) + ) + ) + (set_local $$shl60 + (i32.shl + (i32.const 1) + (get_local $$sub59) + ) + ) + (set_local $$or + (i32.or + (get_local $$shl60) + (get_local $$fl$0310) + ) + ) + (set_local $$incdec$ptr62 + (i32.add + (get_local $$storemerge$186309) + (i32.const 1) + ) + ) + (set_local $$10 + (i32.load8_s + (get_local $$incdec$ptr62) + ) + ) + (set_local $$conv48 + (i32.shr_s + (i32.shl + (get_local $$10) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$11 + (i32.and + (get_local $$conv48) + (i32.const -32) + ) + ) + (set_local $$cmp50 + (i32.eq + (get_local $$11) + (i32.const 32) + ) + ) + (if + (get_local $$cmp50) + (block + (set_local $$9 + (get_local $$10) + ) + (set_local $$conv48311 + (get_local $$conv48) + ) + (set_local $$fl$0310 + (get_local $$or) + ) + (set_local $$storemerge$186309 + (get_local $$incdec$ptr62) + ) + ) + (block + (set_local $$12 + (get_local $$10) + ) + (set_local $$fl$0284 + (get_local $$or) + ) + (set_local $$storemerge$186282 + (get_local $$incdec$ptr62) + ) + (br $while-out3) + ) + ) + (br $while-in4) + ) + ) + ) + (block + (set_local $$12 + (get_local $$7) + ) + (set_local $$fl$0284 + (i32.const 0) + ) + (set_local $$storemerge$186282 + (get_local $$storemerge) + ) + ) + ) + ) + (set_local $$cmp65 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$12) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 42) + ) + ) + (block $do-once5 + (if + (get_local $$cmp65) + (block + (set_local $$arrayidx68 + (i32.add + (get_local $$storemerge$186282) + (i32.const 1) + ) + ) + (set_local $$13 + (i32.load8_s + (get_local $$arrayidx68) + ) + ) + (set_local $$conv69 + (i32.shr_s + (i32.shl + (get_local $$13) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp189 + (i32.add + (get_local $$conv69) + (i32.const -48) + ) + ) + (set_local $$isdigit190 + (i32.lt_u + (get_local $$isdigittmp189) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit190) + (block + (set_local $$arrayidx73 + (i32.add + (get_local $$storemerge$186282) + (i32.const 2) + ) + ) + (set_local $$14 + (i32.load8_s + (get_local $$arrayidx73) + ) + ) + (set_local $$cmp75 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$14) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 36) + ) + ) + (if + (get_local $$cmp75) + (block + (set_local $$arrayidx81 + (i32.add + (get_local $$nl_type) + (i32.shl + (get_local $$isdigittmp189) + (i32.const 2) + ) + ) + ) + (i32.store + (get_local $$arrayidx81) + (i32.const 10) + ) + (set_local $$15 + (i32.load8_s + (get_local $$arrayidx68) + ) + ) + (set_local $$conv83 + (i32.shr_s + (i32.shl + (get_local $$15) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$sub84 + (i32.add + (get_local $$conv83) + (i32.const -48) + ) + ) + (set_local $$i86 + (i32.add + (get_local $$nl_arg) + (i32.shl + (get_local $$sub84) + (i32.const 3) + ) + ) + ) + (set_local $$16 + (get_local $$i86) + ) + (set_local $$17 + (get_local $$16) + ) + (set_local $$18 + (i32.load + (get_local $$17) + ) + ) + (set_local $$19 + (i32.add + (get_local $$16) + (i32.const 4) + ) + ) + (set_local $$20 + (get_local $$19) + ) + (set_local $$21 + (i32.load + (get_local $$20) + ) + ) + (set_local $$add$ptr88 + (i32.add + (get_local $$storemerge$186282) + (i32.const 3) + ) + ) + (set_local $$l10n$2 + (i32.const 1) + ) + (set_local $$storemerge$191 + (get_local $$add$ptr88) + ) + (set_local $$w$0 + (get_local $$18) + ) + ) + (set_local $label + (i32.const 24) + ) + ) + ) + (set_local $label + (i32.const 24) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 24) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$tobool90 + (i32.eq + (get_local $$l10n$1) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool90) + ) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (if + (i32.eqz + (get_local $$tobool25) + ) + (block + (set_local $$fl$1 + (get_local $$fl$0284) + ) + (set_local $$incdec$ptr169269 + (get_local $$arrayidx68) + ) + (set_local $$l10n$3 + (i32.const 0) + ) + (set_local $$w$1 + (i32.const 0) + ) + (br $do-once5) + ) + ) + (set_local $$arglist_current + (i32.load + (get_local $$ap) + ) + ) + (set_local $$22 + (get_local $$arglist_current) + ) + (set_local $$23 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded4 + (get_local $$23) + ) + (set_local $$expanded + (i32.sub + (get_local $$expanded4) + (i32.const 1) + ) + ) + (set_local $$24 + (i32.add + (get_local $$22) + (get_local $$expanded) + ) + ) + (set_local $$25 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded8 + (get_local $$25) + ) + (set_local $$expanded7 + (i32.sub + (get_local $$expanded8) + (i32.const 1) + ) + ) + (set_local $$expanded6 + (i32.xor + (get_local $$expanded7) + (i32.const -1) + ) + ) + (set_local $$26 + (i32.and + (get_local $$24) + (get_local $$expanded6) + ) + ) + (set_local $$27 + (get_local $$26) + ) + (set_local $$28 + (i32.load + (get_local $$27) + ) + ) + (set_local $$arglist_next + (i32.add + (get_local $$27) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next) + ) + (set_local $$l10n$2 + (i32.const 0) + ) + (set_local $$storemerge$191 + (get_local $$arrayidx68) + ) + (set_local $$w$0 + (get_local $$28) + ) + ) + ) + (set_local $$cmp97 + (i32.lt_s + (get_local $$w$0) + (i32.const 0) + ) + ) + (if + (get_local $$cmp97) + (block + (set_local $$or100 + (i32.or + (get_local $$fl$0284) + (i32.const 8192) + ) + ) + (set_local $$sub101 + (i32.sub + (i32.const 0) + (get_local $$w$0) + ) + ) + (set_local $$fl$1 + (get_local $$or100) + ) + (set_local $$incdec$ptr169269 + (get_local $$storemerge$191) + ) + (set_local $$l10n$3 + (get_local $$l10n$2) + ) + (set_local $$w$1 + (get_local $$sub101) + ) + ) + (block + (set_local $$fl$1 + (get_local $$fl$0284) + ) + (set_local $$incdec$ptr169269 + (get_local $$storemerge$191) + ) + (set_local $$l10n$3 + (get_local $$l10n$2) + ) + (set_local $$w$1 + (get_local $$w$0) + ) + ) + ) + ) + (block + (set_local $$conv$4$i + (i32.shr_s + (i32.shl + (get_local $$12) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp$5$i + (i32.add + (get_local $$conv$4$i) + (i32.const -48) + ) + ) + (set_local $$isdigit$6$i + (i32.lt_u + (get_local $$isdigittmp$5$i) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit$6$i) + (block + (set_local $$29 + (get_local $$storemerge$186282) + ) + (set_local $$i$07$i + (i32.const 0) + ) + (set_local $$isdigittmp8$i + (get_local $$isdigittmp$5$i) + ) + (loop $while-in8 + (block $while-out7 + (set_local $$mul$i + (i32.mul + (get_local $$i$07$i) + (i32.const 10) + ) + ) + (set_local $$add$i + (i32.add + (get_local $$mul$i) + (get_local $$isdigittmp8$i) + ) + ) + (set_local $$incdec$ptr$i + (i32.add + (get_local $$29) + (i32.const 1) + ) + ) + (set_local $$30 + (i32.load8_s + (get_local $$incdec$ptr$i) + ) + ) + (set_local $$conv$i + (i32.shr_s + (i32.shl + (get_local $$30) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp$i + (i32.add + (get_local $$conv$i) + (i32.const -48) + ) + ) + (set_local $$isdigit$i + (i32.lt_u + (get_local $$isdigittmp$i) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit$i) + (block + (set_local $$29 + (get_local $$incdec$ptr$i) + ) + (set_local $$i$07$i + (get_local $$add$i) + ) + (set_local $$isdigittmp8$i + (get_local $$isdigittmp$i) + ) + ) + (block + (set_local $$add$i$lcssa + (get_local $$add$i) + ) + (set_local $$incdec$ptr$i$lcssa + (get_local $$incdec$ptr$i) + ) + (br $while-out7) + ) + ) + (br $while-in8) + ) + ) + (set_local $$cmp105 + (i32.lt_s + (get_local $$add$i$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$cmp105) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + (block + (set_local $$fl$1 + (get_local $$fl$0284) + ) + (set_local $$incdec$ptr169269 + (get_local $$incdec$ptr$i$lcssa) + ) + (set_local $$l10n$3 + (get_local $$l10n$1) + ) + (set_local $$w$1 + (get_local $$add$i$lcssa) + ) + ) + ) + ) + (block + (set_local $$fl$1 + (get_local $$fl$0284) + ) + (set_local $$incdec$ptr169269 + (get_local $$storemerge$186282) + ) + (set_local $$l10n$3 + (get_local $$l10n$1) + ) + (set_local $$w$1 + (i32.const 0) + ) + ) + ) + ) + ) + ) + (set_local $$31 + (i32.load8_s + (get_local $$incdec$ptr169269) + ) + ) + (set_local $$cmp111 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$31) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 46) + ) + ) + (block $label$break$L46 + (if + (get_local $$cmp111) + (block + (set_local $$arrayidx114 + (i32.add + (get_local $$incdec$ptr169269) + (i32.const 1) + ) + ) + (set_local $$32 + (i32.load8_s + (get_local $$arrayidx114) + ) + ) + (set_local $$cmp116 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$32) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 42) + ) + ) + (if + (i32.eqz + (get_local $$cmp116) + ) + (block + (set_local $$conv$4$i$197 + (i32.shr_s + (i32.shl + (get_local $$32) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp$5$i$198 + (i32.add + (get_local $$conv$4$i$197) + (i32.const -48) + ) + ) + (set_local $$isdigit$6$i$199 + (i32.lt_u + (get_local $$isdigittmp$5$i$198) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit$6$i$199) + (block + (set_local $$49 + (get_local $$arrayidx114) + ) + (set_local $$i$07$i$201 + (i32.const 0) + ) + (set_local $$isdigittmp8$i$200 + (get_local $$isdigittmp$5$i$198) + ) + ) + (block + (set_local $$incdec$ptr169272 + (get_local $$arrayidx114) + ) + (set_local $$p$0 + (i32.const 0) + ) + (br $label$break$L46) + ) + ) + (loop $while-in11 + (block $while-out10 + (set_local $$mul$i$202 + (i32.mul + (get_local $$i$07$i$201) + (i32.const 10) + ) + ) + (set_local $$add$i$203 + (i32.add + (get_local $$mul$i$202) + (get_local $$isdigittmp8$i$200) + ) + ) + (set_local $$incdec$ptr$i$204 + (i32.add + (get_local $$49) + (i32.const 1) + ) + ) + (set_local $$50 + (i32.load8_s + (get_local $$incdec$ptr$i$204) + ) + ) + (set_local $$conv$i$205 + (i32.shr_s + (i32.shl + (get_local $$50) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp$i$206 + (i32.add + (get_local $$conv$i$205) + (i32.const -48) + ) + ) + (set_local $$isdigit$i$207 + (i32.lt_u + (get_local $$isdigittmp$i$206) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit$i$207) + (block + (set_local $$49 + (get_local $$incdec$ptr$i$204) + ) + (set_local $$i$07$i$201 + (get_local $$add$i$203) + ) + (set_local $$isdigittmp8$i$200 + (get_local $$isdigittmp$i$206) + ) + ) + (block + (set_local $$incdec$ptr169272 + (get_local $$incdec$ptr$i$204) + ) + (set_local $$p$0 + (get_local $$add$i$203) + ) + (br $label$break$L46) + ) + ) + (br $while-in11) + ) + ) + ) + ) + (set_local $$arrayidx119 + (i32.add + (get_local $$incdec$ptr169269) + (i32.const 2) + ) + ) + (set_local $$33 + (i32.load8_s + (get_local $$arrayidx119) + ) + ) + (set_local $$conv120 + (i32.shr_s + (i32.shl + (get_local $$33) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp187 + (i32.add + (get_local $$conv120) + (i32.const -48) + ) + ) + (set_local $$isdigit188 + (i32.lt_u + (get_local $$isdigittmp187) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit188) + (block + (set_local $$arrayidx124 + (i32.add + (get_local $$incdec$ptr169269) + (i32.const 3) + ) + ) + (set_local $$34 + (i32.load8_s + (get_local $$arrayidx124) + ) + ) + (set_local $$cmp126 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$34) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 36) + ) + ) + (if + (get_local $$cmp126) + (block + (set_local $$arrayidx132 + (i32.add + (get_local $$nl_type) + (i32.shl + (get_local $$isdigittmp187) + (i32.const 2) + ) + ) + ) + (i32.store + (get_local $$arrayidx132) + (i32.const 10) + ) + (set_local $$35 + (i32.load8_s + (get_local $$arrayidx119) + ) + ) + (set_local $$conv134 + (i32.shr_s + (i32.shl + (get_local $$35) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$sub135 + (i32.add + (get_local $$conv134) + (i32.const -48) + ) + ) + (set_local $$i137 + (i32.add + (get_local $$nl_arg) + (i32.shl + (get_local $$sub135) + (i32.const 3) + ) + ) + ) + (set_local $$36 + (get_local $$i137) + ) + (set_local $$37 + (get_local $$36) + ) + (set_local $$38 + (i32.load + (get_local $$37) + ) + ) + (set_local $$39 + (i32.add + (get_local $$36) + (i32.const 4) + ) + ) + (set_local $$40 + (get_local $$39) + ) + (set_local $$41 + (i32.load + (get_local $$40) + ) + ) + (set_local $$add$ptr139 + (i32.add + (get_local $$incdec$ptr169269) + (i32.const 4) + ) + ) + (set_local $$incdec$ptr169272 + (get_local $$add$ptr139) + ) + (set_local $$p$0 + (get_local $$38) + ) + (br $label$break$L46) + ) + ) + ) + ) + (set_local $$tobool141 + (i32.eq + (get_local $$l10n$3) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool141) + ) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (if + (get_local $$tobool25) + (block + (set_local $$arglist_current2 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$42 + (get_local $$arglist_current2) + ) + (set_local $$43 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded11 + (get_local $$43) + ) + (set_local $$expanded10 + (i32.sub + (get_local $$expanded11) + (i32.const 1) + ) + ) + (set_local $$44 + (i32.add + (get_local $$42) + (get_local $$expanded10) + ) + ) + (set_local $$45 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded15 + (get_local $$45) + ) + (set_local $$expanded14 + (i32.sub + (get_local $$expanded15) + (i32.const 1) + ) + ) + (set_local $$expanded13 + (i32.xor + (get_local $$expanded14) + (i32.const -1) + ) + ) + (set_local $$46 + (i32.and + (get_local $$44) + (get_local $$expanded13) + ) + ) + (set_local $$47 + (get_local $$46) + ) + (set_local $$48 + (i32.load + (get_local $$47) + ) + ) + (set_local $$arglist_next3 + (i32.add + (get_local $$47) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next3) + ) + (set_local $$incdec$ptr169272 + (get_local $$arrayidx119) + ) + (set_local $$p$0 + (get_local $$48) + ) + ) + (block + (set_local $$incdec$ptr169272 + (get_local $$arrayidx119) + ) + (set_local $$p$0 + (i32.const 0) + ) + ) + ) + ) + (block + (set_local $$incdec$ptr169272 + (get_local $$incdec$ptr169269) + ) + (set_local $$p$0 + (i32.const -1) + ) + ) + ) + ) + (set_local $$incdec$ptr169271 + (get_local $$incdec$ptr169272) + ) + (set_local $$st$0 + (i32.const 0) + ) + (loop $while-in13 + (block $while-out12 + (set_local $$51 + (i32.load8_s + (get_local $$incdec$ptr169271) + ) + ) + (set_local $$conv163 + (i32.shr_s + (i32.shl + (get_local $$51) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$sub164 + (i32.add + (get_local $$conv163) + (i32.const -65) + ) + ) + (set_local $$cmp165 + (i32.gt_u + (get_local $$sub164) + (i32.const 57) + ) + ) + (if + (get_local $$cmp165) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $$incdec$ptr169 + (i32.add + (get_local $$incdec$ptr169271) + (i32.const 1) + ) + ) + (set_local $$arrayidx173 + (i32.add + (i32.add + (i32.const 3611) + (i32.mul + (get_local $$st$0) + (i32.const 58) + ) + ) + (get_local $$sub164) + ) + ) + (set_local $$52 + (i32.load8_s + (get_local $$arrayidx173) + ) + ) + (set_local $$conv174 + (i32.and + (get_local $$52) + (i32.const 255) + ) + ) + (set_local $$sub175 + (i32.add + (get_local $$conv174) + (i32.const -1) + ) + ) + (set_local $$cmp176 + (i32.lt_u + (get_local $$sub175) + (i32.const 8) + ) + ) + (if + (get_local $$cmp176) + (block + (set_local $$incdec$ptr169271 + (get_local $$incdec$ptr169) + ) + (set_local $$st$0 + (get_local $$conv174) + ) + ) + (block + (set_local $$$lcssa + (get_local $$52) + ) + (set_local $$conv174$lcssa + (get_local $$conv174) + ) + (set_local $$incdec$ptr169$lcssa + (get_local $$incdec$ptr169) + ) + (set_local $$incdec$ptr169271$lcssa414 + (get_local $$incdec$ptr169271) + ) + (set_local $$st$0$lcssa415 + (get_local $$st$0) + ) + (br $while-out12) + ) + ) + (br $while-in13) + ) + ) + (set_local $$tobool178 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$$lcssa) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (if + (get_local $$tobool178) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $$cmp181 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$$lcssa) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 19) + ) + ) + (set_local $$cmp184 + (i32.gt_s + (get_local $$argpos$0) + (i32.const -1) + ) + ) + (block $do-once14 + (if + (get_local $$cmp181) + (if + (get_local $$cmp184) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + (set_local $label + (i32.const 52) + ) + ) + (block + (if + (get_local $$cmp184) + (block + (set_local $$arrayidx192 + (i32.add + (get_local $$nl_type) + (i32.shl + (get_local $$argpos$0) + (i32.const 2) + ) + ) + ) + (i32.store + (get_local $$arrayidx192) + (get_local $$conv174$lcssa) + ) + (set_local $$53 + (i32.add + (get_local $$nl_arg) + (i32.shl + (get_local $$argpos$0) + (i32.const 3) + ) + ) + ) + (set_local $$54 + (get_local $$53) + ) + (set_local $$55 + (get_local $$54) + ) + (set_local $$56 + (i32.load + (get_local $$55) + ) + ) + (set_local $$57 + (i32.add + (get_local $$54) + (i32.const 4) + ) + ) + (set_local $$58 + (get_local $$57) + ) + (set_local $$59 + (i32.load + (get_local $$58) + ) + ) + (set_local $$60 + (get_local $$arg) + ) + (set_local $$61 + (get_local $$60) + ) + (i32.store + (get_local $$61) + (get_local $$56) + ) + (set_local $$62 + (i32.add + (get_local $$60) + (i32.const 4) + ) + ) + (set_local $$63 + (get_local $$62) + ) + (i32.store + (get_local $$63) + (get_local $$59) + ) + (set_local $label + (i32.const 52) + ) + (br $do-once14) + ) + ) + (if + (i32.eqz + (get_local $$tobool25) + ) + (block + (set_local $$retval$0 + (i32.const 0) + ) + (br $label$break$L1) + ) + ) + (call $_pop_arg_336 + (get_local $$arg) + (get_local $$conv174$lcssa) + (get_local $$ap) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 52) + ) + (block + (set_local $label + (i32.const 0) + ) + (if + (i32.eqz + (get_local $$tobool25) + ) + (block + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + ) + ) + ) + ) + (set_local $$64 + (i32.load8_s + (get_local $$incdec$ptr169271$lcssa414) + ) + ) + (set_local $$conv207 + (i32.shr_s + (i32.shl + (get_local $$64) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$tobool208 + (i32.ne + (get_local $$st$0$lcssa415) + (i32.const 0) + ) + ) + (set_local $$and210 + (i32.and + (get_local $$conv207) + (i32.const 15) + ) + ) + (set_local $$cmp211 + (i32.eq + (get_local $$and210) + (i32.const 3) + ) + ) + (set_local $$or$cond192 + (i32.and + (get_local $$tobool208) + (get_local $$cmp211) + ) + ) + (set_local $$and214 + (i32.and + (get_local $$conv207) + (i32.const -33) + ) + ) + (set_local $$t$0 + (if (result i32) + (get_local $$or$cond192) + (get_local $$and214) + (get_local $$conv207) + ) + ) + (set_local $$and216 + (i32.and + (get_local $$fl$1) + (i32.const 8192) + ) + ) + (set_local $$tobool217 + (i32.eq + (get_local $$and216) + (i32.const 0) + ) + ) + (set_local $$and219 + (i32.and + (get_local $$fl$1) + (i32.const -65537) + ) + ) + (set_local $$fl$1$and219 + (if (result i32) + (get_local $$tobool217) + (get_local $$fl$1) + (get_local $$and219) + ) + ) + (block $label$break$L75 + (block $switch17 + (block $switch-default120 + (block $switch-case119 + (block $switch-case48 + (block $switch-case47 + (block $switch-case46 + (block $switch-case45 + (block $switch-case44 + (block $switch-case43 + (block $switch-case42 + (block $switch-case41 + (block $switch-case40 + (block $switch-case39 + (block $switch-case38 + (block $switch-case37 + (block $switch-case36 + (block $switch-case35 + (block $switch-case34 + (block $switch-case33 + (block $switch-case30 + (block $switch-case29 + (block $switch-case28 + (block $switch-case27 + (br_table $switch-case42 $switch-default120 $switch-case40 $switch-default120 $switch-case45 $switch-case44 $switch-case43 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case41 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case29 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case46 $switch-default120 $switch-case37 $switch-case35 $switch-case119 $switch-case48 $switch-case47 $switch-default120 $switch-case34 $switch-default120 $switch-default120 $switch-default120 $switch-case38 $switch-case27 $switch-case33 $switch-case28 $switch-default120 $switch-default120 $switch-case39 $switch-default120 $switch-case36 $switch-default120 $switch-default120 $switch-case30 $switch-default120 + (i32.sub + (get_local $$t$0) + (i32.const 65) + ) + ) + ) + (block + (block $switch18 + (block $switch-default26 + (block $switch-case25 + (block $switch-case24 + (block $switch-case23 + (block $switch-case22 + (block $switch-case21 + (block $switch-case20 + (block $switch-case19 + (br_table $switch-case19 $switch-case20 $switch-case21 $switch-case22 $switch-case23 $switch-default26 $switch-case24 $switch-case25 $switch-default26 + (i32.sub + (get_local $$st$0$lcssa415) + (i32.const 0) + ) + ) + ) + (block + (set_local $$71 + (i32.load + (get_local $$arg) + ) + ) + (i32.store + (get_local $$71) + (get_local $$cnt$1) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$72 + (i32.load + (get_local $$arg) + ) + ) + (i32.store + (get_local $$72) + (get_local $$cnt$1) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$73 + (i32.lt_s + (get_local $$cnt$1) + (i32.const 0) + ) + ) + (set_local $$74 + (i32.shr_s + (i32.shl + (get_local $$73) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$75 + (i32.load + (get_local $$arg) + ) + ) + (set_local $$76 + (get_local $$75) + ) + (set_local $$77 + (get_local $$76) + ) + (i32.store + (get_local $$77) + (get_local $$cnt$1) + ) + (set_local $$78 + (i32.add + (get_local $$76) + (i32.const 4) + ) + ) + (set_local $$79 + (get_local $$78) + ) + (i32.store + (get_local $$79) + (get_local $$74) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$conv229 + (i32.and + (get_local $$cnt$1) + (i32.const 65535) + ) + ) + (set_local $$80 + (i32.load + (get_local $$arg) + ) + ) + (i32.store16 + (get_local $$80) + (get_local $$conv229) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$conv232 + (i32.and + (get_local $$cnt$1) + (i32.const 255) + ) + ) + (set_local $$81 + (i32.load + (get_local $$arg) + ) + ) + (i32.store8 + (get_local $$81) + (get_local $$conv232) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$82 + (i32.load + (get_local $$arg) + ) + ) + (i32.store + (get_local $$82) + (get_local $$cnt$1) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$83 + (i32.lt_s + (get_local $$cnt$1) + (i32.const 0) + ) + ) + (set_local $$84 + (i32.shr_s + (i32.shl + (get_local $$83) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$85 + (i32.load + (get_local $$arg) + ) + ) + (set_local $$86 + (get_local $$85) + ) + (set_local $$87 + (get_local $$86) + ) + (i32.store + (get_local $$87) + (get_local $$cnt$1) + ) + (set_local $$88 + (i32.add + (get_local $$86) + (i32.const 4) + ) + ) + (set_local $$89 + (get_local $$88) + ) + (i32.store + (get_local $$89) + (get_local $$84) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + ) + ) + (br $switch17) + ) + ) + (block + (set_local $$cmp240 + (i32.gt_u + (get_local $$p$0) + (i32.const 8) + ) + ) + (set_local $$cond245 + (if (result i32) + (get_local $$cmp240) + (get_local $$p$0) + (i32.const 8) + ) + ) + (set_local $$or246 + (i32.or + (get_local $$fl$1$and219) + (i32.const 8) + ) + ) + (set_local $$fl$3 + (get_local $$or246) + ) + (set_local $$p$1 + (get_local $$cond245) + ) + (set_local $$t$1 + (i32.const 120) + ) + (set_local $label + (i32.const 64) + ) + (br $switch17) + ) + ) + (nop) + ) + (block + (set_local $$fl$3 + (get_local $$fl$1$and219) + ) + (set_local $$p$1 + (get_local $$p$0) + ) + (set_local $$t$1 + (get_local $$t$0) + ) + (set_local $label + (i32.const 64) + ) + (br $switch17) + ) + ) + (block + (set_local $$116 + (get_local $$arg) + ) + (set_local $$117 + (get_local $$116) + ) + (set_local $$118 + (i32.load + (get_local $$117) + ) + ) + (set_local $$119 + (i32.add + (get_local $$116) + (i32.const 4) + ) + ) + (set_local $$120 + (get_local $$119) + ) + (set_local $$121 + (i32.load + (get_local $$120) + ) + ) + (set_local $$122 + (i32.eq + (get_local $$118) + (i32.const 0) + ) + ) + (set_local $$123 + (i32.eq + (get_local $$121) + (i32.const 0) + ) + ) + (set_local $$124 + (i32.and + (get_local $$122) + (get_local $$123) + ) + ) + (if + (get_local $$124) + (set_local $$s$addr$0$lcssa$i$229 + (get_local $$add$ptr205) + ) + (block + (set_local $$126 + (get_local $$118) + ) + (set_local $$129 + (get_local $$121) + ) + (set_local $$s$addr$06$i$221 + (get_local $$add$ptr205) + ) + (loop $while-in32 + (block $while-out31 + (set_local $$125 + (i32.and + (get_local $$126) + (i32.const 7) + ) + ) + (set_local $$127 + (i32.or + (get_local $$125) + (i32.const 48) + ) + ) + (set_local $$128 + (i32.and + (get_local $$127) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr$i$225 + (i32.add + (get_local $$s$addr$06$i$221) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr$i$225) + (get_local $$128) + ) + (set_local $$130 + (call $_bitshift64Lshr + (get_local $$126) + (get_local $$129) + (i32.const 3) + ) + ) + (set_local $$131 + (get_global $tempRet0) + ) + (set_local $$132 + (i32.eq + (get_local $$130) + (i32.const 0) + ) + ) + (set_local $$133 + (i32.eq + (get_local $$131) + (i32.const 0) + ) + ) + (set_local $$134 + (i32.and + (get_local $$132) + (get_local $$133) + ) + ) + (if + (get_local $$134) + (block + (set_local $$s$addr$0$lcssa$i$229 + (get_local $$incdec$ptr$i$225) + ) + (br $while-out31) + ) + (block + (set_local $$126 + (get_local $$130) + ) + (set_local $$129 + (get_local $$131) + ) + (set_local $$s$addr$06$i$221 + (get_local $$incdec$ptr$i$225) + ) + ) + ) + (br $while-in32) + ) + ) + ) + ) + (set_local $$and263 + (i32.and + (get_local $$fl$1$and219) + (i32.const 8) + ) + ) + (set_local $$tobool264 + (i32.eq + (get_local $$and263) + (i32.const 0) + ) + ) + (if + (get_local $$tobool264) + (block + (set_local $$a$0 + (get_local $$s$addr$0$lcssa$i$229) + ) + (set_local $$fl$4 + (get_local $$fl$1$and219) + ) + (set_local $$p$2 + (get_local $$p$0) + ) + (set_local $$pl$1 + (i32.const 0) + ) + (set_local $$prefix$1 + (i32.const 4091) + ) + (set_local $label + (i32.const 77) + ) + ) + (block + (set_local $$sub$ptr$rhs$cast267 + (get_local $$s$addr$0$lcssa$i$229) + ) + (set_local $$sub$ptr$sub268 + (i32.sub + (get_local $$sub$ptr$lhs$cast317) + (get_local $$sub$ptr$rhs$cast267) + ) + ) + (set_local $$add269 + (i32.add + (get_local $$sub$ptr$sub268) + (i32.const 1) + ) + ) + (set_local $$cmp270 + (i32.lt_s + (get_local $$p$0) + (get_local $$add269) + ) + ) + (set_local $$add269$p$0 + (if (result i32) + (get_local $$cmp270) + (get_local $$add269) + (get_local $$p$0) + ) + ) + (set_local $$a$0 + (get_local $$s$addr$0$lcssa$i$229) + ) + (set_local $$fl$4 + (get_local $$fl$1$and219) + ) + (set_local $$p$2 + (get_local $$add269$p$0) + ) + (set_local $$pl$1 + (i32.const 0) + ) + (set_local $$prefix$1 + (i32.const 4091) + ) + (set_local $label + (i32.const 77) + ) + ) + ) + (br $switch17) + ) + ) + (nop) + ) + (block + (set_local $$135 + (get_local $$arg) + ) + (set_local $$136 + (get_local $$135) + ) + (set_local $$137 + (i32.load + (get_local $$136) + ) + ) + (set_local $$138 + (i32.add + (get_local $$135) + (i32.const 4) + ) + ) + (set_local $$139 + (get_local $$138) + ) + (set_local $$140 + (i32.load + (get_local $$139) + ) + ) + (set_local $$141 + (i32.lt_s + (get_local $$140) + (i32.const 0) + ) + ) + (if + (get_local $$141) + (block + (set_local $$142 + (call $_i64Subtract + (i32.const 0) + (i32.const 0) + (get_local $$137) + (get_local $$140) + ) + ) + (set_local $$143 + (get_global $tempRet0) + ) + (set_local $$144 + (get_local $$arg) + ) + (set_local $$145 + (get_local $$144) + ) + (i32.store + (get_local $$145) + (get_local $$142) + ) + (set_local $$146 + (i32.add + (get_local $$144) + (i32.const 4) + ) + ) + (set_local $$147 + (get_local $$146) + ) + (i32.store + (get_local $$147) + (get_local $$143) + ) + (set_local $$148 + (get_local $$142) + ) + (set_local $$149 + (get_local $$143) + ) + (set_local $$pl$0 + (i32.const 1) + ) + (set_local $$prefix$0 + (i32.const 4091) + ) + (set_local $label + (i32.const 76) + ) + (br $label$break$L75) + ) + ) + (set_local $$and289 + (i32.and + (get_local $$fl$1$and219) + (i32.const 2048) + ) + ) + (set_local $$tobool290 + (i32.eq + (get_local $$and289) + (i32.const 0) + ) + ) + (if + (get_local $$tobool290) + (block + (set_local $$and294 + (i32.and + (get_local $$fl$1$and219) + (i32.const 1) + ) + ) + (set_local $$tobool295 + (i32.eq + (get_local $$and294) + (i32.const 0) + ) + ) + (set_local $$$ + (if (result i32) + (get_local $$tobool295) + (i32.const 4091) + (i32.const 4093) + ) + ) + (set_local $$148 + (get_local $$137) + ) + (set_local $$149 + (get_local $$140) + ) + (set_local $$pl$0 + (get_local $$and294) + ) + (set_local $$prefix$0 + (get_local $$$) + ) + (set_local $label + (i32.const 76) + ) + ) + (block + (set_local $$148 + (get_local $$137) + ) + (set_local $$149 + (get_local $$140) + ) + (set_local $$pl$0 + (i32.const 1) + ) + (set_local $$prefix$0 + (i32.const 4092) + ) + (set_local $label + (i32.const 76) + ) + ) + ) + (br $switch17) + ) + ) + (block + (set_local $$65 + (get_local $$arg) + ) + (set_local $$66 + (get_local $$65) + ) + (set_local $$67 + (i32.load + (get_local $$66) + ) + ) + (set_local $$68 + (i32.add + (get_local $$65) + (i32.const 4) + ) + ) + (set_local $$69 + (get_local $$68) + ) + (set_local $$70 + (i32.load + (get_local $$69) + ) + ) + (set_local $$148 + (get_local $$67) + ) + (set_local $$149 + (get_local $$70) + ) + (set_local $$pl$0 + (i32.const 0) + ) + (set_local $$prefix$0 + (i32.const 4091) + ) + (set_local $label + (i32.const 76) + ) + (br $switch17) + ) + ) + (block + (set_local $$161 + (get_local $$arg) + ) + (set_local $$162 + (get_local $$161) + ) + (set_local $$163 + (i32.load + (get_local $$162) + ) + ) + (set_local $$164 + (i32.add + (get_local $$161) + (i32.const 4) + ) + ) + (set_local $$165 + (get_local $$164) + ) + (set_local $$166 + (i32.load + (get_local $$165) + ) + ) + (set_local $$167 + (i32.and + (get_local $$163) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $$add$ptr340) + (get_local $$167) + ) + (set_local $$a$2 + (get_local $$add$ptr340) + ) + (set_local $$fl$6 + (get_local $$and219) + ) + (set_local $$p$5 + (i32.const 1) + ) + (set_local $$pl$2 + (i32.const 0) + ) + (set_local $$prefix$2 + (i32.const 4091) + ) + (set_local $$z$2 + (get_local $$add$ptr205) + ) + (br $switch17) + ) + ) + (block + (set_local $$call344 + (call $___errno_location) + ) + (set_local $$168 + (i32.load + (get_local $$call344) + ) + ) + (set_local $$call345 + (call $_strerror + (get_local $$168) + ) + ) + (set_local $$a$1 + (get_local $$call345) + ) + (set_local $label + (i32.const 82) + ) + (br $switch17) + ) + ) + (block + (set_local $$169 + (i32.load + (get_local $$arg) + ) + ) + (set_local $$tobool349 + (i32.ne + (get_local $$169) + (i32.const 0) + ) + ) + (set_local $$cond354 + (if (result i32) + (get_local $$tobool349) + (get_local $$169) + (i32.const 4101) + ) + ) + (set_local $$a$1 + (get_local $$cond354) + ) + (set_local $label + (i32.const 82) + ) + (br $switch17) + ) + ) + (block + (set_local $$170 + (get_local $$arg) + ) + (set_local $$171 + (get_local $$170) + ) + (set_local $$172 + (i32.load + (get_local $$171) + ) + ) + (set_local $$173 + (i32.add + (get_local $$170) + (i32.const 4) + ) + ) + (set_local $$174 + (get_local $$173) + ) + (set_local $$175 + (i32.load + (get_local $$174) + ) + ) + (i32.store + (get_local $$wc) + (get_local $$172) + ) + (i32.store + (get_local $$arrayidx370) + (i32.const 0) + ) + (i32.store + (get_local $$arg) + (get_local $$wc) + ) + (set_local $$p$4365 + (i32.const -1) + ) + (set_local $label + (i32.const 86) + ) + (br $switch17) + ) + ) + (block + (set_local $$cmp377$314 + (i32.eq + (get_local $$p$0) + (i32.const 0) + ) + ) + (if + (get_local $$cmp377$314) + (block + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (i32.const 0) + (get_local $$fl$1$and219) + ) + (set_local $$i$0$lcssa368 + (i32.const 0) + ) + (set_local $label + (i32.const 98) + ) + ) + (block + (set_local $$p$4365 + (get_local $$p$0) + ) + (set_local $label + (i32.const 86) + ) + ) + ) + (br $switch17) + ) + ) + (nop) + ) + (nop) + ) + (nop) + ) + (nop) + ) + (nop) + ) + (nop) + ) + (nop) + ) + (block + (set_local $$181 + (f64.load + (get_local $$arg) + ) + ) + (i32.store + (get_local $$e2$i) + (i32.const 0) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $$181) + ) + (set_local $$182 + (i32.load + (get_global $tempDoublePtr) + ) + ) + (set_local $$183 + (i32.load + (i32.add + (get_global $tempDoublePtr) + (i32.const 4) + ) + ) + ) + (set_local $$184 + (i32.lt_s + (get_local $$183) + (i32.const 0) + ) + ) + (if + (get_local $$184) + (block + (set_local $$sub$i + (f64.neg + (get_local $$181) + ) + ) + (set_local $$pl$0$i + (i32.const 1) + ) + (set_local $$prefix$0$i + (i32.const 4108) + ) + (set_local $$y$addr$0$i + (get_local $$sub$i) + ) + ) + (block + (set_local $$and$i$238 + (i32.and + (get_local $$fl$1$and219) + (i32.const 2048) + ) + ) + (set_local $$tobool9$i + (i32.eq + (get_local $$and$i$238) + (i32.const 0) + ) + ) + (if + (get_local $$tobool9$i) + (block + (set_local $$and12$i + (i32.and + (get_local $$fl$1$and219) + (i32.const 1) + ) + ) + (set_local $$tobool13$i + (i32.eq + (get_local $$and12$i) + (i32.const 0) + ) + ) + (set_local $$$$i + (if (result i32) + (get_local $$tobool13$i) + (i32.const 4109) + (i32.const 4114) + ) + ) + (set_local $$pl$0$i + (get_local $$and12$i) + ) + (set_local $$prefix$0$i + (get_local $$$$i) + ) + (set_local $$y$addr$0$i + (get_local $$181) + ) + ) + (block + (set_local $$pl$0$i + (i32.const 1) + ) + (set_local $$prefix$0$i + (i32.const 4111) + ) + (set_local $$y$addr$0$i + (get_local $$181) + ) + ) + ) + ) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $$y$addr$0$i) + ) + (set_local $$185 + (i32.load + (get_global $tempDoublePtr) + ) + ) + (set_local $$186 + (i32.load + (i32.add + (get_global $tempDoublePtr) + (i32.const 4) + ) + ) + ) + (set_local $$187 + (i32.and + (get_local $$186) + (i32.const 2146435072) + ) + ) + (set_local $$188 + (i32.lt_u + (get_local $$187) + (i32.const 2146435072) + ) + ) + (set_local $$189 + (i32.lt_s + (i32.const 0) + (i32.const 0) + ) + ) + (set_local $$190 + (i32.eq + (get_local $$187) + (i32.const 2146435072) + ) + ) + (set_local $$191 + (i32.and + (get_local $$190) + (get_local $$189) + ) + ) + (set_local $$192 + (i32.or + (get_local $$188) + (get_local $$191) + ) + ) + (block $do-once49 + (if + (get_local $$192) + (block + (set_local $$call55$i + (call $_frexpl + (get_local $$y$addr$0$i) + (get_local $$e2$i) + ) + ) + (set_local $$mul$i$240 + (f64.mul + (get_local $$call55$i) + (f64.const 2) + ) + ) + (set_local $$tobool56$i + (f64.ne + (get_local $$mul$i$240) + (f64.const 0) + ) + ) + (if + (get_local $$tobool56$i) + (block + (set_local $$195 + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$dec$i + (i32.add + (get_local $$195) + (i32.const -1) + ) + ) + (i32.store + (get_local $$e2$i) + (get_local $$dec$i) + ) + ) + ) + (set_local $$or$i$241 + (i32.or + (get_local $$t$0) + (i32.const 32) + ) + ) + (set_local $$cmp59$i + (i32.eq + (get_local $$or$i$241) + (i32.const 97) + ) + ) + (if + (get_local $$cmp59$i) + (block + (set_local $$and62$i + (i32.and + (get_local $$t$0) + (i32.const 32) + ) + ) + (set_local $$tobool63$i + (i32.eq + (get_local $$and62$i) + (i32.const 0) + ) + ) + (set_local $$add$ptr65$i + (i32.add + (get_local $$prefix$0$i) + (i32.const 9) + ) + ) + (set_local $$prefix$0$add$ptr65$i + (if (result i32) + (get_local $$tobool63$i) + (get_local $$prefix$0$i) + (get_local $$add$ptr65$i) + ) + ) + (set_local $$add67$i + (i32.or + (get_local $$pl$0$i) + (i32.const 2) + ) + ) + (set_local $$196 + (i32.gt_u + (get_local $$p$0) + (i32.const 11) + ) + ) + (set_local $$sub74$i + (i32.sub + (i32.const 12) + (get_local $$p$0) + ) + ) + (set_local $$tobool76552$i + (i32.eq + (get_local $$sub74$i) + (i32.const 0) + ) + ) + (set_local $$tobool76$i + (i32.or + (get_local $$196) + (get_local $$tobool76552$i) + ) + ) + (block $do-once51 + (if + (get_local $$tobool76$i) + (set_local $$y$addr$1$i + (get_local $$mul$i$240) + ) + (block + (set_local $$re$1482$i + (get_local $$sub74$i) + ) + (set_local $$round$0481$i + (f64.const 8) + ) + (loop $while-in54 + (block $while-out53 + (set_local $$dec78$i + (i32.add + (get_local $$re$1482$i) + (i32.const -1) + ) + ) + (set_local $$mul80$i + (f64.mul + (get_local $$round$0481$i) + (f64.const 16) + ) + ) + (set_local $$tobool79$i + (i32.eq + (get_local $$dec78$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool79$i) + (block + (set_local $$mul80$i$lcssa + (get_local $$mul80$i) + ) + (br $while-out53) + ) + (block + (set_local $$re$1482$i + (get_local $$dec78$i) + ) + (set_local $$round$0481$i + (get_local $$mul80$i) + ) + ) + ) + (br $while-in54) + ) + ) + (set_local $$197 + (i32.load8_s + (get_local $$prefix$0$add$ptr65$i) + ) + ) + (set_local $$cmp82$i + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$197) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 45) + ) + ) + (if + (get_local $$cmp82$i) + (block + (set_local $$sub85$i + (f64.neg + (get_local $$mul$i$240) + ) + ) + (set_local $$sub86$i + (f64.sub + (get_local $$sub85$i) + (get_local $$mul80$i$lcssa) + ) + ) + (set_local $$add87$i + (f64.add + (get_local $$mul80$i$lcssa) + (get_local $$sub86$i) + ) + ) + (set_local $$sub88$i + (f64.neg + (get_local $$add87$i) + ) + ) + (set_local $$y$addr$1$i + (get_local $$sub88$i) + ) + (br $do-once51) + ) + (block + (set_local $$add90$i + (f64.add + (get_local $$mul$i$240) + (get_local $$mul80$i$lcssa) + ) + ) + (set_local $$sub91$i + (f64.sub + (get_local $$add90$i) + (get_local $$mul80$i$lcssa) + ) + ) + (set_local $$y$addr$1$i + (get_local $$sub91$i) + ) + (br $do-once51) + ) + ) + ) + ) + ) + (set_local $$198 + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$cmp94$i + (i32.lt_s + (get_local $$198) + (i32.const 0) + ) + ) + (set_local $$sub97$i + (i32.sub + (i32.const 0) + (get_local $$198) + ) + ) + (set_local $$cond100$i + (if (result i32) + (get_local $$cmp94$i) + (get_local $$sub97$i) + (get_local $$198) + ) + ) + (set_local $$199 + (i32.lt_s + (get_local $$cond100$i) + (i32.const 0) + ) + ) + (set_local $$200 + (i32.shr_s + (i32.shl + (get_local $$199) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$201 + (call $_fmt_u + (get_local $$cond100$i) + (get_local $$200) + (get_local $$arrayidx$i$236) + ) + ) + (set_local $$cmp103$i + (i32.eq + (get_local $$201) + (get_local $$arrayidx$i$236) + ) + ) + (if + (get_local $$cmp103$i) + (block + (i32.store8 + (get_local $$incdec$ptr106$i) + (i32.const 48) + ) + (set_local $$estr$0$i + (get_local $$incdec$ptr106$i) + ) + ) + (set_local $$estr$0$i + (get_local $$201) + ) + ) + (set_local $$202 + (i32.shr_s + (get_local $$198) + (i32.const 31) + ) + ) + (set_local $$203 + (i32.and + (get_local $$202) + (i32.const 2) + ) + ) + (set_local $$204 + (i32.add + (get_local $$203) + (i32.const 43) + ) + ) + (set_local $$conv111$i + (i32.and + (get_local $$204) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr112$i + (i32.add + (get_local $$estr$0$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr112$i) + (get_local $$conv111$i) + ) + (set_local $$add113$i + (i32.add + (get_local $$t$0) + (i32.const 15) + ) + ) + (set_local $$conv114$i + (i32.and + (get_local $$add113$i) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr115$i + (i32.add + (get_local $$estr$0$i) + (i32.const -2) + ) + ) + (i32.store8 + (get_local $$incdec$ptr115$i) + (get_local $$conv114$i) + ) + (set_local $$notrhs$i + (i32.lt_s + (get_local $$p$0) + (i32.const 1) + ) + ) + (set_local $$and134$i + (i32.and + (get_local $$fl$1$and219) + (i32.const 8) + ) + ) + (set_local $$tobool135$i + (i32.eq + (get_local $$and134$i) + (i32.const 0) + ) + ) + (set_local $$s$0$i + (get_local $$buf$i) + ) + (set_local $$y$addr$2$i + (get_local $$y$addr$1$i) + ) + (loop $while-in56 + (block $while-out55 + (set_local $$conv116$i + (call $f64-to-int + (get_local $$y$addr$2$i) + ) + ) + (set_local $$arrayidx117$i + (i32.add + (i32.const 4075) + (get_local $$conv116$i) + ) + ) + (set_local $$205 + (i32.load8_s + (get_local $$arrayidx117$i) + ) + ) + (set_local $$conv118$393$i + (i32.and + (get_local $$205) + (i32.const 255) + ) + ) + (set_local $$or120$i + (i32.or + (get_local $$conv118$393$i) + (get_local $$and62$i) + ) + ) + (set_local $$conv121$i + (i32.and + (get_local $$or120$i) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr122$i + (i32.add + (get_local $$s$0$i) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $$s$0$i) + (get_local $$conv121$i) + ) + (set_local $$conv123$i + (f64.convert_s/i32 + (get_local $$conv116$i) + ) + ) + (set_local $$sub124$i + (f64.sub + (get_local $$y$addr$2$i) + (get_local $$conv123$i) + ) + ) + (set_local $$mul125$i + (f64.mul + (get_local $$sub124$i) + (f64.const 16) + ) + ) + (set_local $$sub$ptr$lhs$cast$i + (get_local $$incdec$ptr122$i) + ) + (set_local $$sub$ptr$sub$i + (i32.sub + (get_local $$sub$ptr$lhs$cast$i) + (get_local $$sub$ptr$rhs$cast$i) + ) + ) + (set_local $$cmp127$i + (i32.eq + (get_local $$sub$ptr$sub$i) + (i32.const 1) + ) + ) + (block $do-once57 + (if + (get_local $$cmp127$i) + (block + (set_local $$notlhs$i + (f64.eq + (get_local $$mul125$i) + (f64.const 0) + ) + ) + (set_local $$or$cond1$not$i + (i32.and + (get_local $$notrhs$i) + (get_local $$notlhs$i) + ) + ) + (set_local $$or$cond$i + (i32.and + (get_local $$tobool135$i) + (get_local $$or$cond1$not$i) + ) + ) + (if + (get_local $$or$cond$i) + (block + (set_local $$s$1$i + (get_local $$incdec$ptr122$i) + ) + (br $do-once57) + ) + ) + (set_local $$incdec$ptr137$i + (i32.add + (get_local $$s$0$i) + (i32.const 2) + ) + ) + (i32.store8 + (get_local $$incdec$ptr122$i) + (i32.const 46) + ) + (set_local $$s$1$i + (get_local $$incdec$ptr137$i) + ) + ) + (set_local $$s$1$i + (get_local $$incdec$ptr122$i) + ) + ) + ) + (set_local $$tobool139$i + (f64.ne + (get_local $$mul125$i) + (f64.const 0) + ) + ) + (if + (get_local $$tobool139$i) + (block + (set_local $$s$0$i + (get_local $$s$1$i) + ) + (set_local $$y$addr$2$i + (get_local $$mul125$i) + ) + ) + (block + (set_local $$s$1$i$lcssa + (get_local $$s$1$i) + ) + (br $while-out55) + ) + ) + (br $while-in56) + ) + ) + (set_local $$tobool140$i + (i32.ne + (get_local $$p$0) + (i32.const 0) + ) + ) + (set_local $$$pre566$i + (get_local $$s$1$i$lcssa) + ) + (set_local $$sub146$i + (i32.add + (get_local $$sub$ptr$sub145$i) + (get_local $$$pre566$i) + ) + ) + (set_local $$cmp147$i + (i32.lt_s + (get_local $$sub146$i) + (get_local $$p$0) + ) + ) + (set_local $$or$cond384 + (i32.and + (get_local $$tobool140$i) + (get_local $$cmp147$i) + ) + ) + (set_local $$sub$ptr$rhs$cast152$i + (get_local $$incdec$ptr115$i) + ) + (set_local $$add150$i + (i32.add + (get_local $$sub$ptr$sub153$i) + (get_local $$p$0) + ) + ) + (set_local $$add154$i + (i32.sub + (get_local $$add150$i) + (get_local $$sub$ptr$rhs$cast152$i) + ) + ) + (set_local $$sub$ptr$rhs$cast161$i + (get_local $$incdec$ptr115$i) + ) + (set_local $$sub$ptr$sub162$i + (i32.sub + (get_local $$sub$ptr$sub159$i) + (get_local $$sub$ptr$rhs$cast161$i) + ) + ) + (set_local $$add163$i + (i32.add + (get_local $$sub$ptr$sub162$i) + (get_local $$$pre566$i) + ) + ) + (set_local $$l$0$i + (if (result i32) + (get_local $$or$cond384) + (get_local $$add154$i) + (get_local $$add163$i) + ) + ) + (set_local $$add165$i + (i32.add + (get_local $$l$0$i) + (get_local $$add67$i) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$add165$i) + (get_local $$fl$1$and219) + ) + (set_local $$206 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$418$i + (i32.and + (get_local $$206) + (i32.const 32) + ) + ) + (set_local $$tobool$i$419$i + (i32.eq + (get_local $$and$i$418$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$419$i) + (drop + (call $___fwritex + (get_local $$prefix$0$add$ptr65$i) + (get_local $$add67$i) + (get_local $$f) + ) + ) + ) + (set_local $$xor167$i + (i32.xor + (get_local $$fl$1$and219) + (i32.const 65536) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$w$1) + (get_local $$add165$i) + (get_local $$xor167$i) + ) + (set_local $$sub$ptr$sub172$i + (i32.sub + (get_local $$$pre566$i) + (get_local $$sub$ptr$rhs$cast$i) + ) + ) + (set_local $$207 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$424$i + (i32.and + (get_local $$207) + (i32.const 32) + ) + ) + (set_local $$tobool$i$425$i + (i32.eq + (get_local $$and$i$424$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$425$i) + (drop + (call $___fwritex + (get_local $$buf$i) + (get_local $$sub$ptr$sub172$i) + (get_local $$f) + ) + ) + ) + (set_local $$sub$ptr$rhs$cast174$i + (get_local $$incdec$ptr115$i) + ) + (set_local $$sub$ptr$sub175$i + (i32.sub + (get_local $$sub$ptr$lhs$cast160$i) + (get_local $$sub$ptr$rhs$cast174$i) + ) + ) + (set_local $$sum + (i32.add + (get_local $$sub$ptr$sub172$i) + (get_local $$sub$ptr$sub175$i) + ) + ) + (set_local $$sub181$i + (i32.sub + (get_local $$l$0$i) + (get_local $$sum) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$sub181$i) + (i32.const 0) + (i32.const 0) + ) + (set_local $$208 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$430$i + (i32.and + (get_local $$208) + (i32.const 32) + ) + ) + (set_local $$tobool$i$431$i + (i32.eq + (get_local $$and$i$430$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$431$i) + (drop + (call $___fwritex + (get_local $$incdec$ptr115$i) + (get_local $$sub$ptr$sub175$i) + (get_local $$f) + ) + ) + ) + (set_local $$xor186$i + (i32.xor + (get_local $$fl$1$and219) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$add165$i) + (get_local $$xor186$i) + ) + (set_local $$cmp188$i + (i32.lt_s + (get_local $$add165$i) + (get_local $$w$1) + ) + ) + (set_local $$w$add165$i + (if (result i32) + (get_local $$cmp188$i) + (get_local $$w$1) + (get_local $$add165$i) + ) + ) + (set_local $$retval$0$i + (get_local $$w$add165$i) + ) + (br $do-once49) + ) + ) + (set_local $$cmp196$i + (i32.lt_s + (get_local $$p$0) + (i32.const 0) + ) + ) + (set_local $$$p$i + (if (result i32) + (get_local $$cmp196$i) + (i32.const 6) + (get_local $$p$0) + ) + ) + (if + (get_local $$tobool56$i) + (block + (set_local $$mul202$i + (f64.mul + (get_local $$mul$i$240) + (f64.const 268435456) + ) + ) + (set_local $$209 + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$sub203$i + (i32.add + (get_local $$209) + (i32.const -28) + ) + ) + (i32.store + (get_local $$e2$i) + (get_local $$sub203$i) + ) + (set_local $$210 + (get_local $$sub203$i) + ) + (set_local $$y$addr$3$i + (get_local $$mul202$i) + ) + ) + (block + (set_local $$$pre564$i + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$210 + (get_local $$$pre564$i) + ) + (set_local $$y$addr$3$i + (get_local $$mul$i$240) + ) + ) + ) + (set_local $$cmp205$i + (i32.lt_s + (get_local $$210) + (i32.const 0) + ) + ) + (set_local $$arraydecay208$add$ptr213$i + (if (result i32) + (get_local $$cmp205$i) + (get_local $$big$i) + (get_local $$add$ptr213$i) + ) + ) + (set_local $$sub$ptr$rhs$cast345$i + (get_local $$arraydecay208$add$ptr213$i) + ) + (set_local $$y$addr$4$i + (get_local $$y$addr$3$i) + ) + (set_local $$z$0$i + (get_local $$arraydecay208$add$ptr213$i) + ) + (loop $while-in60 + (block $while-out59 + (set_local $$conv216$i + (call $f64-to-uint + (get_local $$y$addr$4$i) + ) + ) + (i32.store + (get_local $$z$0$i) + (get_local $$conv216$i) + ) + (set_local $$incdec$ptr217$i + (i32.add + (get_local $$z$0$i) + (i32.const 4) + ) + ) + (set_local $$conv218$i + (f64.convert_u/i32 + (get_local $$conv216$i) + ) + ) + (set_local $$sub219$i + (f64.sub + (get_local $$y$addr$4$i) + (get_local $$conv218$i) + ) + ) + (set_local $$mul220$i + (f64.mul + (get_local $$sub219$i) + (f64.const 1e9) + ) + ) + (set_local $$tobool222$i + (f64.ne + (get_local $$mul220$i) + (f64.const 0) + ) + ) + (if + (get_local $$tobool222$i) + (block + (set_local $$y$addr$4$i + (get_local $$mul220$i) + ) + (set_local $$z$0$i + (get_local $$incdec$ptr217$i) + ) + ) + (block + (set_local $$incdec$ptr217$i$lcssa + (get_local $$incdec$ptr217$i) + ) + (br $while-out59) + ) + ) + (br $while-in60) + ) + ) + (set_local $$$pr$i + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$cmp225$547$i + (i32.gt_s + (get_local $$$pr$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp225$547$i) + (block + (set_local $$211 + (get_local $$$pr$i) + ) + (set_local $$a$1549$i + (get_local $$arraydecay208$add$ptr213$i) + ) + (set_local $$z$1548$i + (get_local $$incdec$ptr217$i$lcssa) + ) + (loop $while-in62 + (block $while-out61 + (set_local $$cmp228$i + (i32.gt_s + (get_local $$211) + (i32.const 29) + ) + ) + (set_local $$cond233$i + (if (result i32) + (get_local $$cmp228$i) + (i32.const 29) + (get_local $$211) + ) + ) + (set_local $$d$0$542$i + (i32.add + (get_local $$z$1548$i) + (i32.const -4) + ) + ) + (set_local $$cmp235$543$i + (i32.lt_u + (get_local $$d$0$542$i) + (get_local $$a$1549$i) + ) + ) + (block $do-once63 + (if + (get_local $$cmp235$543$i) + (set_local $$a$2$ph$i + (get_local $$a$1549$i) + ) + (block + (set_local $$carry$0544$i + (i32.const 0) + ) + (set_local $$d$0545$i + (get_local $$d$0$542$i) + ) + (loop $while-in66 + (block $while-out65 + (set_local $$212 + (i32.load + (get_local $$d$0545$i) + ) + ) + (set_local $$213 + (call $_bitshift64Shl + (get_local $$212) + (i32.const 0) + (get_local $$cond233$i) + ) + ) + (set_local $$214 + (get_global $tempRet0) + ) + (set_local $$215 + (call $_i64Add + (get_local $$213) + (get_local $$214) + (get_local $$carry$0544$i) + (i32.const 0) + ) + ) + (set_local $$216 + (get_global $tempRet0) + ) + (set_local $$217 + (call $___uremdi3 + (get_local $$215) + (get_local $$216) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (set_local $$218 + (get_global $tempRet0) + ) + (i32.store + (get_local $$d$0545$i) + (get_local $$217) + ) + (set_local $$219 + (call $___udivdi3 + (get_local $$215) + (get_local $$216) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (set_local $$220 + (get_global $tempRet0) + ) + (set_local $$d$0$i + (i32.add + (get_local $$d$0545$i) + (i32.const -4) + ) + ) + (set_local $$cmp235$i + (i32.lt_u + (get_local $$d$0$i) + (get_local $$a$1549$i) + ) + ) + (if + (get_local $$cmp235$i) + (block + (set_local $$conv242$i$lcssa + (get_local $$219) + ) + (br $while-out65) + ) + (block + (set_local $$carry$0544$i + (get_local $$219) + ) + (set_local $$d$0545$i + (get_local $$d$0$i) + ) + ) + ) + (br $while-in66) + ) + ) + (set_local $$tobool244$i + (i32.eq + (get_local $$conv242$i$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$tobool244$i) + (block + (set_local $$a$2$ph$i + (get_local $$a$1549$i) + ) + (br $do-once63) + ) + ) + (set_local $$incdec$ptr246$i + (i32.add + (get_local $$a$1549$i) + (i32.const -4) + ) + ) + (i32.store + (get_local $$incdec$ptr246$i) + (get_local $$conv242$i$lcssa) + ) + (set_local $$a$2$ph$i + (get_local $$incdec$ptr246$i) + ) + ) + ) + ) + (set_local $$z$2$i + (get_local $$z$1548$i) + ) + (loop $while-in68 + (block $while-out67 + (set_local $$cmp249$i + (i32.gt_u + (get_local $$z$2$i) + (get_local $$a$2$ph$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp249$i) + ) + (block + (set_local $$z$2$i$lcssa + (get_local $$z$2$i) + ) + (br $while-out67) + ) + ) + (set_local $$arrayidx251$i + (i32.add + (get_local $$z$2$i) + (i32.const -4) + ) + ) + (set_local $$221 + (i32.load + (get_local $$arrayidx251$i) + ) + ) + (set_local $$lnot$i + (i32.eq + (get_local $$221) + (i32.const 0) + ) + ) + (if + (get_local $$lnot$i) + (set_local $$z$2$i + (get_local $$arrayidx251$i) + ) + (block + (set_local $$z$2$i$lcssa + (get_local $$z$2$i) + ) + (br $while-out67) + ) + ) + (br $while-in68) + ) + ) + (set_local $$222 + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$sub256$i + (i32.sub + (get_local $$222) + (get_local $$cond233$i) + ) + ) + (i32.store + (get_local $$e2$i) + (get_local $$sub256$i) + ) + (set_local $$cmp225$i + (i32.gt_s + (get_local $$sub256$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp225$i) + (block + (set_local $$211 + (get_local $$sub256$i) + ) + (set_local $$a$1549$i + (get_local $$a$2$ph$i) + ) + (set_local $$z$1548$i + (get_local $$z$2$i$lcssa) + ) + ) + (block + (set_local $$$pr477$i + (get_local $$sub256$i) + ) + (set_local $$a$1$lcssa$i + (get_local $$a$2$ph$i) + ) + (set_local $$z$1$lcssa$i + (get_local $$z$2$i$lcssa) + ) + (br $while-out61) + ) + ) + (br $while-in62) + ) + ) + ) + (block + (set_local $$$pr477$i + (get_local $$$pr$i) + ) + (set_local $$a$1$lcssa$i + (get_local $$arraydecay208$add$ptr213$i) + ) + (set_local $$z$1$lcssa$i + (get_local $$incdec$ptr217$i$lcssa) + ) + ) + ) + (set_local $$cmp259$537$i + (i32.lt_s + (get_local $$$pr477$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp259$537$i) + (block + (set_local $$add273$i + (i32.add + (get_local $$$p$i) + (i32.const 25) + ) + ) + (set_local $$div274$i + (i32.and + (call $i32s-div + (get_local $$add273$i) + (i32.const 9) + ) + (i32.const -1) + ) + ) + (set_local $$add275$i + (i32.add + (get_local $$div274$i) + (i32.const 1) + ) + ) + (set_local $$cmp299$i + (i32.eq + (get_local $$or$i$241) + (i32.const 102) + ) + ) + (set_local $$223 + (get_local $$$pr477$i) + ) + (set_local $$a$3539$i + (get_local $$a$1$lcssa$i) + ) + (set_local $$z$3538$i + (get_local $$z$1$lcssa$i) + ) + (loop $while-in70 + (block $while-out69 + (set_local $$sub264$i + (i32.sub + (i32.const 0) + (get_local $$223) + ) + ) + (set_local $$cmp265$i + (i32.gt_s + (get_local $$sub264$i) + (i32.const 9) + ) + ) + (set_local $$cond271$i + (if (result i32) + (get_local $$cmp265$i) + (i32.const 9) + (get_local $$sub264$i) + ) + ) + (set_local $$cmp277$533$i + (i32.lt_u + (get_local $$a$3539$i) + (get_local $$z$3538$i) + ) + ) + (block $do-once71 + (if + (get_local $$cmp277$533$i) + (block + (set_local $$shl280$i + (i32.shl + (i32.const 1) + (get_local $$cond271$i) + ) + ) + (set_local $$sub281$i + (i32.add + (get_local $$shl280$i) + (i32.const -1) + ) + ) + (set_local $$shr285$i + (i32.shr_u + (i32.const 1000000000) + (get_local $$cond271$i) + ) + ) + (set_local $$carry262$0535$i + (i32.const 0) + ) + (set_local $$d$1534$i + (get_local $$a$3539$i) + ) + (loop $while-in74 + (block $while-out73 + (set_local $$225 + (i32.load + (get_local $$d$1534$i) + ) + ) + (set_local $$and282$i + (i32.and + (get_local $$225) + (get_local $$sub281$i) + ) + ) + (set_local $$shr283$i + (i32.shr_u + (get_local $$225) + (get_local $$cond271$i) + ) + ) + (set_local $$add284$i + (i32.add + (get_local $$shr283$i) + (get_local $$carry262$0535$i) + ) + ) + (i32.store + (get_local $$d$1534$i) + (get_local $$add284$i) + ) + (set_local $$mul286$i + (i32.mul + (get_local $$and282$i) + (get_local $$shr285$i) + ) + ) + (set_local $$incdec$ptr288$i + (i32.add + (get_local $$d$1534$i) + (i32.const 4) + ) + ) + (set_local $$cmp277$i + (i32.lt_u + (get_local $$incdec$ptr288$i) + (get_local $$z$3538$i) + ) + ) + (if + (get_local $$cmp277$i) + (block + (set_local $$carry262$0535$i + (get_local $$mul286$i) + ) + (set_local $$d$1534$i + (get_local $$incdec$ptr288$i) + ) + ) + (block + (set_local $$mul286$i$lcssa + (get_local $$mul286$i) + ) + (br $while-out73) + ) + ) + (br $while-in74) + ) + ) + (set_local $$226 + (i32.load + (get_local $$a$3539$i) + ) + ) + (set_local $$tobool290$i + (i32.eq + (get_local $$226) + (i32.const 0) + ) + ) + (set_local $$incdec$ptr292$i + (i32.add + (get_local $$a$3539$i) + (i32.const 4) + ) + ) + (set_local $$incdec$ptr292$a$3$i + (if (result i32) + (get_local $$tobool290$i) + (get_local $$incdec$ptr292$i) + (get_local $$a$3539$i) + ) + ) + (set_local $$tobool294$i + (i32.eq + (get_local $$mul286$i$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$tobool294$i) + (block + (set_local $$incdec$ptr292$a$3573$i + (get_local $$incdec$ptr292$a$3$i) + ) + (set_local $$z$4$i + (get_local $$z$3538$i) + ) + (br $do-once71) + ) + ) + (set_local $$incdec$ptr296$i + (i32.add + (get_local $$z$3538$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$z$3538$i) + (get_local $$mul286$i$lcssa) + ) + (set_local $$incdec$ptr292$a$3573$i + (get_local $$incdec$ptr292$a$3$i) + ) + (set_local $$z$4$i + (get_local $$incdec$ptr296$i) + ) + ) + (block + (set_local $$224 + (i32.load + (get_local $$a$3539$i) + ) + ) + (set_local $$tobool290$569$i + (i32.eq + (get_local $$224) + (i32.const 0) + ) + ) + (set_local $$incdec$ptr292$570$i + (i32.add + (get_local $$a$3539$i) + (i32.const 4) + ) + ) + (set_local $$incdec$ptr292$a$3$571$i + (if (result i32) + (get_local $$tobool290$569$i) + (get_local $$incdec$ptr292$570$i) + (get_local $$a$3539$i) + ) + ) + (set_local $$incdec$ptr292$a$3573$i + (get_local $$incdec$ptr292$a$3$571$i) + ) + (set_local $$z$4$i + (get_local $$z$3538$i) + ) + ) + ) + ) + (set_local $$cond304$i + (if (result i32) + (get_local $$cmp299$i) + (get_local $$arraydecay208$add$ptr213$i) + (get_local $$incdec$ptr292$a$3573$i) + ) + ) + (set_local $$sub$ptr$lhs$cast305$i + (get_local $$z$4$i) + ) + (set_local $$sub$ptr$rhs$cast306$i + (get_local $$cond304$i) + ) + (set_local $$sub$ptr$sub307$i + (i32.sub + (get_local $$sub$ptr$lhs$cast305$i) + (get_local $$sub$ptr$rhs$cast306$i) + ) + ) + (set_local $$sub$ptr$div$i + (i32.shr_s + (get_local $$sub$ptr$sub307$i) + (i32.const 2) + ) + ) + (set_local $$cmp308$i + (i32.gt_s + (get_local $$sub$ptr$div$i) + (get_local $$add275$i) + ) + ) + (set_local $$add$ptr311$i + (i32.add + (get_local $$cond304$i) + (i32.shl + (get_local $$add275$i) + (i32.const 2) + ) + ) + ) + (set_local $$add$ptr311$z$4$i + (if (result i32) + (get_local $$cmp308$i) + (get_local $$add$ptr311$i) + (get_local $$z$4$i) + ) + ) + (set_local $$227 + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$add313$i + (i32.add + (get_local $$227) + (get_local $$cond271$i) + ) + ) + (i32.store + (get_local $$e2$i) + (get_local $$add313$i) + ) + (set_local $$cmp259$i + (i32.lt_s + (get_local $$add313$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp259$i) + (block + (set_local $$223 + (get_local $$add313$i) + ) + (set_local $$a$3539$i + (get_local $$incdec$ptr292$a$3573$i) + ) + (set_local $$z$3538$i + (get_local $$add$ptr311$z$4$i) + ) + ) + (block + (set_local $$a$3$lcssa$i + (get_local $$incdec$ptr292$a$3573$i) + ) + (set_local $$z$3$lcssa$i + (get_local $$add$ptr311$z$4$i) + ) + (br $while-out69) + ) + ) + (br $while-in70) + ) + ) + ) + (block + (set_local $$a$3$lcssa$i + (get_local $$a$1$lcssa$i) + ) + (set_local $$z$3$lcssa$i + (get_local $$z$1$lcssa$i) + ) + ) + ) + (set_local $$cmp315$i + (i32.lt_u + (get_local $$a$3$lcssa$i) + (get_local $$z$3$lcssa$i) + ) + ) + (block $do-once75 + (if + (get_local $$cmp315$i) + (block + (set_local $$sub$ptr$rhs$cast319$i + (get_local $$a$3$lcssa$i) + ) + (set_local $$sub$ptr$sub320$i + (i32.sub + (get_local $$sub$ptr$rhs$cast345$i) + (get_local $$sub$ptr$rhs$cast319$i) + ) + ) + (set_local $$sub$ptr$div321$i + (i32.shr_s + (get_local $$sub$ptr$sub320$i) + (i32.const 2) + ) + ) + (set_local $$mul322$i + (i32.mul + (get_local $$sub$ptr$div321$i) + (i32.const 9) + ) + ) + (set_local $$228 + (i32.load + (get_local $$a$3$lcssa$i) + ) + ) + (set_local $$cmp324$529$i + (i32.lt_u + (get_local $$228) + (i32.const 10) + ) + ) + (if + (get_local $$cmp324$529$i) + (block + (set_local $$e$1$i + (get_local $$mul322$i) + ) + (br $do-once75) + ) + (block + (set_local $$e$0531$i + (get_local $$mul322$i) + ) + (set_local $$i$0530$i + (i32.const 10) + ) + ) + ) + (loop $while-in78 + (block $while-out77 + (set_local $$mul328$i + (i32.mul + (get_local $$i$0530$i) + (i32.const 10) + ) + ) + (set_local $$inc$i + (i32.add + (get_local $$e$0531$i) + (i32.const 1) + ) + ) + (set_local $$cmp324$i + (i32.lt_u + (get_local $$228) + (get_local $$mul328$i) + ) + ) + (if + (get_local $$cmp324$i) + (block + (set_local $$e$1$i + (get_local $$inc$i) + ) + (br $while-out77) + ) + (block + (set_local $$e$0531$i + (get_local $$inc$i) + ) + (set_local $$i$0530$i + (get_local $$mul328$i) + ) + ) + ) + (br $while-in78) + ) + ) + ) + (set_local $$e$1$i + (i32.const 0) + ) + ) + ) + (set_local $$cmp333$i + (i32.ne + (get_local $$or$i$241) + (i32.const 102) + ) + ) + (set_local $$mul335$i + (if (result i32) + (get_local $$cmp333$i) + (get_local $$e$1$i) + (i32.const 0) + ) + ) + (set_local $$sub336$i + (i32.sub + (get_local $$$p$i) + (get_local $$mul335$i) + ) + ) + (set_local $$cmp338$i + (i32.eq + (get_local $$or$i$241) + (i32.const 103) + ) + ) + (set_local $$tobool341$i + (i32.ne + (get_local $$$p$i) + (i32.const 0) + ) + ) + (set_local $$229 + (i32.and + (get_local $$tobool341$i) + (get_local $$cmp338$i) + ) + ) + (set_local $$land$ext$neg$i + (i32.shr_s + (i32.shl + (get_local $$229) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$sub343$i + (i32.add + (get_local $$sub336$i) + (get_local $$land$ext$neg$i) + ) + ) + (set_local $$sub$ptr$lhs$cast344$i + (get_local $$z$3$lcssa$i) + ) + (set_local $$sub$ptr$sub346$i + (i32.sub + (get_local $$sub$ptr$lhs$cast344$i) + (get_local $$sub$ptr$rhs$cast345$i) + ) + ) + (set_local $$sub$ptr$div347$i + (i32.shr_s + (get_local $$sub$ptr$sub346$i) + (i32.const 2) + ) + ) + (set_local $$230 + (i32.mul + (get_local $$sub$ptr$div347$i) + (i32.const 9) + ) + ) + (set_local $$mul349$i + (i32.add + (get_local $$230) + (i32.const -9) + ) + ) + (set_local $$cmp350$i + (i32.lt_s + (get_local $$sub343$i) + (get_local $$mul349$i) + ) + ) + (if + (get_local $$cmp350$i) + (block + (set_local $$add$ptr354$i + (i32.add + (get_local $$arraydecay208$add$ptr213$i) + (i32.const 4) + ) + ) + (set_local $$add355$i + (i32.add + (get_local $$sub343$i) + (i32.const 9216) + ) + ) + (set_local $$div356$i + (i32.and + (call $i32s-div + (get_local $$add355$i) + (i32.const 9) + ) + (i32.const -1) + ) + ) + (set_local $$sub357$i + (i32.add + (get_local $$div356$i) + (i32.const -1024) + ) + ) + (set_local $$add$ptr358$i + (i32.add + (get_local $$add$ptr354$i) + (i32.shl + (get_local $$sub357$i) + (i32.const 2) + ) + ) + ) + (set_local $$rem360$i + (i32.and + (call $i32s-rem + (get_local $$add355$i) + (i32.const 9) + ) + (i32.const -1) + ) + ) + (set_local $$j$0$524$i + (i32.add + (get_local $$rem360$i) + (i32.const 1) + ) + ) + (set_local $$cmp363$525$i + (i32.lt_s + (get_local $$j$0$524$i) + (i32.const 9) + ) + ) + (if + (get_local $$cmp363$525$i) + (block + (set_local $$i$1526$i + (i32.const 10) + ) + (set_local $$j$0527$i + (get_local $$j$0$524$i) + ) + (loop $while-in80 + (block $while-out79 + (set_local $$mul367$i + (i32.mul + (get_local $$i$1526$i) + (i32.const 10) + ) + ) + (set_local $$j$0$i + (i32.add + (get_local $$j$0527$i) + (i32.const 1) + ) + ) + (set_local $$exitcond$i + (i32.eq + (get_local $$j$0$i) + (i32.const 9) + ) + ) + (if + (get_local $$exitcond$i) + (block + (set_local $$i$1$lcssa$i + (get_local $$mul367$i) + ) + (br $while-out79) + ) + (block + (set_local $$i$1526$i + (get_local $$mul367$i) + ) + (set_local $$j$0527$i + (get_local $$j$0$i) + ) + ) + ) + (br $while-in80) + ) + ) + ) + (set_local $$i$1$lcssa$i + (i32.const 10) + ) + ) + (set_local $$231 + (i32.load + (get_local $$add$ptr358$i) + ) + ) + (set_local $$rem370$i + (i32.and + (call $i32u-rem + (get_local $$231) + (get_local $$i$1$lcssa$i) + ) + (i32.const -1) + ) + ) + (set_local $$tobool371$i + (i32.eq + (get_local $$rem370$i) + (i32.const 0) + ) + ) + (set_local $$add$ptr373$i + (i32.add + (get_local $$add$ptr358$i) + (i32.const 4) + ) + ) + (set_local $$cmp374$i + (i32.eq + (get_local $$add$ptr373$i) + (get_local $$z$3$lcssa$i) + ) + ) + (set_local $$or$cond395$i + (i32.and + (get_local $$cmp374$i) + (get_local $$tobool371$i) + ) + ) + (block $do-once81 + (if + (get_local $$or$cond395$i) + (block + (set_local $$a$8$i + (get_local $$a$3$lcssa$i) + ) + (set_local $$d$4$i + (get_local $$add$ptr358$i) + ) + (set_local $$e$4$i + (get_local $$e$1$i) + ) + ) + (block + (set_local $$div378$i + (i32.and + (call $i32u-div + (get_local $$231) + (get_local $$i$1$lcssa$i) + ) + (i32.const -1) + ) + ) + (set_local $$and379$i + (i32.and + (get_local $$div378$i) + (i32.const 1) + ) + ) + (set_local $$tobool380$i + (i32.eq + (get_local $$and379$i) + (i32.const 0) + ) + ) + (set_local $$$396$i + (if (result f64) + (get_local $$tobool380$i) + (f64.const 9007199254740992) + (f64.const 9007199254740994) + ) + ) + (set_local $$div384$i + (i32.and + (call $i32s-div + (get_local $$i$1$lcssa$i) + (i32.const 2) + ) + (i32.const -1) + ) + ) + (set_local $$cmp385$i + (i32.lt_u + (get_local $$rem370$i) + (get_local $$div384$i) + ) + ) + (if + (get_local $$cmp385$i) + (set_local $$small$0$i + (f64.const 0.5) + ) + (block + (set_local $$cmp390$i + (i32.eq + (get_local $$rem370$i) + (get_local $$div384$i) + ) + ) + (set_local $$or$cond397$i + (i32.and + (get_local $$cmp374$i) + (get_local $$cmp390$i) + ) + ) + (set_local $$$404$i + (if (result f64) + (get_local $$or$cond397$i) + (f64.const 1) + (f64.const 1.5) + ) + ) + (set_local $$small$0$i + (get_local $$$404$i) + ) + ) + ) + (set_local $$tobool400$i + (i32.eq + (get_local $$pl$0$i) + (i32.const 0) + ) + ) + (block $do-once83 + (if + (get_local $$tobool400$i) + (block + (set_local $$round377$1$i + (get_local $$$396$i) + ) + (set_local $$small$1$i + (get_local $$small$0$i) + ) + ) + (block + (set_local $$232 + (i32.load8_s + (get_local $$prefix$0$i) + ) + ) + (set_local $$cmp403$i + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$232) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 45) + ) + ) + (if + (i32.eqz + (get_local $$cmp403$i) + ) + (block + (set_local $$round377$1$i + (get_local $$$396$i) + ) + (set_local $$small$1$i + (get_local $$small$0$i) + ) + (br $do-once83) + ) + ) + (set_local $$mul406$i + (f64.neg + (get_local $$$396$i) + ) + ) + (set_local $$mul407$i + (f64.neg + (get_local $$small$0$i) + ) + ) + (set_local $$round377$1$i + (get_local $$mul406$i) + ) + (set_local $$small$1$i + (get_local $$mul407$i) + ) + ) + ) + ) + (set_local $$sub409$i + (i32.sub + (get_local $$231) + (get_local $$rem370$i) + ) + ) + (i32.store + (get_local $$add$ptr358$i) + (get_local $$sub409$i) + ) + (set_local $$add410$i + (f64.add + (get_local $$round377$1$i) + (get_local $$small$1$i) + ) + ) + (set_local $$cmp411$i + (f64.ne + (get_local $$add410$i) + (get_local $$round377$1$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp411$i) + ) + (block + (set_local $$a$8$i + (get_local $$a$3$lcssa$i) + ) + (set_local $$d$4$i + (get_local $$add$ptr358$i) + ) + (set_local $$e$4$i + (get_local $$e$1$i) + ) + (br $do-once81) + ) + ) + (set_local $$add414$i + (i32.add + (get_local $$sub409$i) + (get_local $$i$1$lcssa$i) + ) + ) + (i32.store + (get_local $$add$ptr358$i) + (get_local $$add414$i) + ) + (set_local $$cmp416$519$i + (i32.gt_u + (get_local $$add414$i) + (i32.const 999999999) + ) + ) + (if + (get_local $$cmp416$519$i) + (block + (set_local $$a$5521$i + (get_local $$a$3$lcssa$i) + ) + (set_local $$d$2520$i + (get_local $$add$ptr358$i) + ) + (loop $while-in86 + (block $while-out85 + (set_local $$incdec$ptr419$i + (i32.add + (get_local $$d$2520$i) + (i32.const -4) + ) + ) + (i32.store + (get_local $$d$2520$i) + (i32.const 0) + ) + (set_local $$cmp420$i + (i32.lt_u + (get_local $$incdec$ptr419$i) + (get_local $$a$5521$i) + ) + ) + (if + (get_local $$cmp420$i) + (block + (set_local $$incdec$ptr423$i + (i32.add + (get_local $$a$5521$i) + (i32.const -4) + ) + ) + (i32.store + (get_local $$incdec$ptr423$i) + (i32.const 0) + ) + (set_local $$a$6$i + (get_local $$incdec$ptr423$i) + ) + ) + (set_local $$a$6$i + (get_local $$a$5521$i) + ) + ) + (set_local $$233 + (i32.load + (get_local $$incdec$ptr419$i) + ) + ) + (set_local $$inc425$i + (i32.add + (get_local $$233) + (i32.const 1) + ) + ) + (i32.store + (get_local $$incdec$ptr419$i) + (get_local $$inc425$i) + ) + (set_local $$cmp416$i + (i32.gt_u + (get_local $$inc425$i) + (i32.const 999999999) + ) + ) + (if + (get_local $$cmp416$i) + (block + (set_local $$a$5521$i + (get_local $$a$6$i) + ) + (set_local $$d$2520$i + (get_local $$incdec$ptr419$i) + ) + ) + (block + (set_local $$a$5$lcssa$i + (get_local $$a$6$i) + ) + (set_local $$d$2$lcssa$i + (get_local $$incdec$ptr419$i) + ) + (br $while-out85) + ) + ) + (br $while-in86) + ) + ) + ) + (block + (set_local $$a$5$lcssa$i + (get_local $$a$3$lcssa$i) + ) + (set_local $$d$2$lcssa$i + (get_local $$add$ptr358$i) + ) + ) + ) + (set_local $$sub$ptr$rhs$cast428$i + (get_local $$a$5$lcssa$i) + ) + (set_local $$sub$ptr$sub429$i + (i32.sub + (get_local $$sub$ptr$rhs$cast345$i) + (get_local $$sub$ptr$rhs$cast428$i) + ) + ) + (set_local $$sub$ptr$div430$i + (i32.shr_s + (get_local $$sub$ptr$sub429$i) + (i32.const 2) + ) + ) + (set_local $$mul431$i + (i32.mul + (get_local $$sub$ptr$div430$i) + (i32.const 9) + ) + ) + (set_local $$234 + (i32.load + (get_local $$a$5$lcssa$i) + ) + ) + (set_local $$cmp433$515$i + (i32.lt_u + (get_local $$234) + (i32.const 10) + ) + ) + (if + (get_local $$cmp433$515$i) + (block + (set_local $$a$8$i + (get_local $$a$5$lcssa$i) + ) + (set_local $$d$4$i + (get_local $$d$2$lcssa$i) + ) + (set_local $$e$4$i + (get_local $$mul431$i) + ) + (br $do-once81) + ) + (block + (set_local $$e$2517$i + (get_local $$mul431$i) + ) + (set_local $$i$2516$i + (i32.const 10) + ) + ) + ) + (loop $while-in88 + (block $while-out87 + (set_local $$mul437$i + (i32.mul + (get_local $$i$2516$i) + (i32.const 10) + ) + ) + (set_local $$inc438$i + (i32.add + (get_local $$e$2517$i) + (i32.const 1) + ) + ) + (set_local $$cmp433$i + (i32.lt_u + (get_local $$234) + (get_local $$mul437$i) + ) + ) + (if + (get_local $$cmp433$i) + (block + (set_local $$a$8$i + (get_local $$a$5$lcssa$i) + ) + (set_local $$d$4$i + (get_local $$d$2$lcssa$i) + ) + (set_local $$e$4$i + (get_local $$inc438$i) + ) + (br $while-out87) + ) + (block + (set_local $$e$2517$i + (get_local $$inc438$i) + ) + (set_local $$i$2516$i + (get_local $$mul437$i) + ) + ) + ) + (br $while-in88) + ) + ) + ) + ) + ) + (set_local $$add$ptr442$i + (i32.add + (get_local $$d$4$i) + (i32.const 4) + ) + ) + (set_local $$cmp443$i + (i32.gt_u + (get_local $$z$3$lcssa$i) + (get_local $$add$ptr442$i) + ) + ) + (set_local $$add$ptr442$z$3$i + (if (result i32) + (get_local $$cmp443$i) + (get_local $$add$ptr442$i) + (get_local $$z$3$lcssa$i) + ) + ) + (set_local $$a$9$ph$i + (get_local $$a$8$i) + ) + (set_local $$e$5$ph$i + (get_local $$e$4$i) + ) + (set_local $$z$7$ph$i + (get_local $$add$ptr442$z$3$i) + ) + ) + (block + (set_local $$a$9$ph$i + (get_local $$a$3$lcssa$i) + ) + (set_local $$e$5$ph$i + (get_local $$e$1$i) + ) + (set_local $$z$7$ph$i + (get_local $$z$3$lcssa$i) + ) + ) + ) + (set_local $$sub626$le$i + (i32.sub + (i32.const 0) + (get_local $$e$5$ph$i) + ) + ) + (set_local $$z$7$i + (get_local $$z$7$ph$i) + ) + (loop $while-in90 + (block $while-out89 + (set_local $$cmp450$i + (i32.gt_u + (get_local $$z$7$i) + (get_local $$a$9$ph$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp450$i) + ) + (block + (set_local $$cmp450$lcssa$i + (i32.const 0) + ) + (set_local $$z$7$i$lcssa + (get_local $$z$7$i) + ) + (br $while-out89) + ) + ) + (set_local $$arrayidx453$i + (i32.add + (get_local $$z$7$i) + (i32.const -4) + ) + ) + (set_local $$235 + (i32.load + (get_local $$arrayidx453$i) + ) + ) + (set_local $$lnot455$i + (i32.eq + (get_local $$235) + (i32.const 0) + ) + ) + (if + (get_local $$lnot455$i) + (set_local $$z$7$i + (get_local $$arrayidx453$i) + ) + (block + (set_local $$cmp450$lcssa$i + (i32.const 1) + ) + (set_local $$z$7$i$lcssa + (get_local $$z$7$i) + ) + (br $while-out89) + ) + ) + (br $while-in90) + ) + ) + (block $do-once91 + (if + (get_local $$cmp338$i) + (block + (set_local $$236 + (i32.and + (get_local $$tobool341$i) + (i32.const 1) + ) + ) + (set_local $$inc468$i + (i32.xor + (get_local $$236) + (i32.const 1) + ) + ) + (set_local $$$p$inc468$i + (i32.add + (get_local $$inc468$i) + (get_local $$$p$i) + ) + ) + (set_local $$cmp470$i + (i32.gt_s + (get_local $$$p$inc468$i) + (get_local $$e$5$ph$i) + ) + ) + (set_local $$cmp473$i + (i32.gt_s + (get_local $$e$5$ph$i) + (i32.const -5) + ) + ) + (set_local $$or$cond2$i + (i32.and + (get_local $$cmp470$i) + (get_local $$cmp473$i) + ) + ) + (if + (get_local $$or$cond2$i) + (block + (set_local $$dec476$i + (i32.add + (get_local $$t$0) + (i32.const -1) + ) + ) + (set_local $$add477$neg$i + (i32.add + (get_local $$$p$inc468$i) + (i32.const -1) + ) + ) + (set_local $$sub478$i + (i32.sub + (get_local $$add477$neg$i) + (get_local $$e$5$ph$i) + ) + ) + (set_local $$p$addr$2$i + (get_local $$sub478$i) + ) + (set_local $$t$addr$0$i + (get_local $$dec476$i) + ) + ) + (block + (set_local $$sub480$i + (i32.add + (get_local $$t$0) + (i32.const -2) + ) + ) + (set_local $$dec481$i + (i32.add + (get_local $$$p$inc468$i) + (i32.const -1) + ) + ) + (set_local $$p$addr$2$i + (get_local $$dec481$i) + ) + (set_local $$t$addr$0$i + (get_local $$sub480$i) + ) + ) + ) + (set_local $$and483$i + (i32.and + (get_local $$fl$1$and219) + (i32.const 8) + ) + ) + (set_local $$tobool484$i + (i32.eq + (get_local $$and483$i) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool484$i) + ) + (block + (set_local $$and610$pre$phi$iZ2D + (get_local $$and483$i) + ) + (set_local $$p$addr$3$i + (get_local $$p$addr$2$i) + ) + (set_local $$t$addr$1$i + (get_local $$t$addr$0$i) + ) + (br $do-once91) + ) + ) + (block $do-once93 + (if + (get_local $$cmp450$lcssa$i) + (block + (set_local $$arrayidx489$i + (i32.add + (get_local $$z$7$i$lcssa) + (i32.const -4) + ) + ) + (set_local $$237 + (i32.load + (get_local $$arrayidx489$i) + ) + ) + (set_local $$tobool490$i + (i32.eq + (get_local $$237) + (i32.const 0) + ) + ) + (if + (get_local $$tobool490$i) + (block + (set_local $$j$2$i + (i32.const 9) + ) + (br $do-once93) + ) + ) + (set_local $$rem494$510$i + (i32.and + (call $i32u-rem + (get_local $$237) + (i32.const 10) + ) + (i32.const -1) + ) + ) + (set_local $$cmp495$511$i + (i32.eq + (get_local $$rem494$510$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp495$511$i) + (block + (set_local $$i$3512$i + (i32.const 10) + ) + (set_local $$j$1513$i + (i32.const 0) + ) + ) + (block + (set_local $$j$2$i + (i32.const 0) + ) + (br $do-once93) + ) + ) + (loop $while-in96 + (block $while-out95 + (set_local $$mul499$i + (i32.mul + (get_local $$i$3512$i) + (i32.const 10) + ) + ) + (set_local $$inc500$i + (i32.add + (get_local $$j$1513$i) + (i32.const 1) + ) + ) + (set_local $$rem494$i + (i32.and + (call $i32u-rem + (get_local $$237) + (get_local $$mul499$i) + ) + (i32.const -1) + ) + ) + (set_local $$cmp495$i + (i32.eq + (get_local $$rem494$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp495$i) + (block + (set_local $$i$3512$i + (get_local $$mul499$i) + ) + (set_local $$j$1513$i + (get_local $$inc500$i) + ) + ) + (block + (set_local $$j$2$i + (get_local $$inc500$i) + ) + (br $while-out95) + ) + ) + (br $while-in96) + ) + ) + ) + (set_local $$j$2$i + (i32.const 9) + ) + ) + ) + (set_local $$or504$i + (i32.or + (get_local $$t$addr$0$i) + (i32.const 32) + ) + ) + (set_local $$cmp505$i + (i32.eq + (get_local $$or504$i) + (i32.const 102) + ) + ) + (set_local $$sub$ptr$lhs$cast508$i + (get_local $$z$7$i$lcssa) + ) + (set_local $$sub$ptr$sub510$i + (i32.sub + (get_local $$sub$ptr$lhs$cast508$i) + (get_local $$sub$ptr$rhs$cast345$i) + ) + ) + (set_local $$sub$ptr$div511$i + (i32.shr_s + (get_local $$sub$ptr$sub510$i) + (i32.const 2) + ) + ) + (set_local $$238 + (i32.mul + (get_local $$sub$ptr$div511$i) + (i32.const 9) + ) + ) + (set_local $$mul513$i + (i32.add + (get_local $$238) + (i32.const -9) + ) + ) + (if + (get_local $$cmp505$i) + (block + (set_local $$sub514$i + (i32.sub + (get_local $$mul513$i) + (get_local $$j$2$i) + ) + ) + (set_local $$cmp515$i + (i32.lt_s + (get_local $$sub514$i) + (i32.const 0) + ) + ) + (set_local $$$sub514$i + (if (result i32) + (get_local $$cmp515$i) + (i32.const 0) + (get_local $$sub514$i) + ) + ) + (set_local $$cmp528$i + (i32.lt_s + (get_local $$p$addr$2$i) + (get_local $$$sub514$i) + ) + ) + (set_local $$p$addr$2$$sub514398$i + (if (result i32) + (get_local $$cmp528$i) + (get_local $$p$addr$2$i) + (get_local $$$sub514$i) + ) + ) + (set_local $$and610$pre$phi$iZ2D + (i32.const 0) + ) + (set_local $$p$addr$3$i + (get_local $$p$addr$2$$sub514398$i) + ) + (set_local $$t$addr$1$i + (get_local $$t$addr$0$i) + ) + (br $do-once91) + ) + (block + (set_local $$add561$i + (i32.add + (get_local $$mul513$i) + (get_local $$e$5$ph$i) + ) + ) + (set_local $$sub562$i + (i32.sub + (get_local $$add561$i) + (get_local $$j$2$i) + ) + ) + (set_local $$cmp563$i + (i32.lt_s + (get_local $$sub562$i) + (i32.const 0) + ) + ) + (set_local $$$sub562$i + (if (result i32) + (get_local $$cmp563$i) + (i32.const 0) + (get_local $$sub562$i) + ) + ) + (set_local $$cmp577$i + (i32.lt_s + (get_local $$p$addr$2$i) + (get_local $$$sub562$i) + ) + ) + (set_local $$p$addr$2$$sub562399$i + (if (result i32) + (get_local $$cmp577$i) + (get_local $$p$addr$2$i) + (get_local $$$sub562$i) + ) + ) + (set_local $$and610$pre$phi$iZ2D + (i32.const 0) + ) + (set_local $$p$addr$3$i + (get_local $$p$addr$2$$sub562399$i) + ) + (set_local $$t$addr$1$i + (get_local $$t$addr$0$i) + ) + (br $do-once91) + ) + ) + ) + (block + (set_local $$$pre567$i + (i32.and + (get_local $$fl$1$and219) + (i32.const 8) + ) + ) + (set_local $$and610$pre$phi$iZ2D + (get_local $$$pre567$i) + ) + (set_local $$p$addr$3$i + (get_local $$$p$i) + ) + (set_local $$t$addr$1$i + (get_local $$t$0) + ) + ) + ) + ) + (set_local $$239 + (i32.or + (get_local $$p$addr$3$i) + (get_local $$and610$pre$phi$iZ2D) + ) + ) + (set_local $$240 + (i32.ne + (get_local $$239) + (i32.const 0) + ) + ) + (set_local $$lor$ext$i + (i32.and + (get_local $$240) + (i32.const 1) + ) + ) + (set_local $$or613$i + (i32.or + (get_local $$t$addr$1$i) + (i32.const 32) + ) + ) + (set_local $$cmp614$i + (i32.eq + (get_local $$or613$i) + (i32.const 102) + ) + ) + (if + (get_local $$cmp614$i) + (block + (set_local $$cmp617$i + (i32.gt_s + (get_local $$e$5$ph$i) + (i32.const 0) + ) + ) + (set_local $$add620$i + (if (result i32) + (get_local $$cmp617$i) + (get_local $$e$5$ph$i) + (i32.const 0) + ) + ) + (set_local $$estr$2$i + (i32.const 0) + ) + (set_local $$sub$ptr$sub650$pn$i + (get_local $$add620$i) + ) + ) + (block + (set_local $$cmp623$i + (i32.lt_s + (get_local $$e$5$ph$i) + (i32.const 0) + ) + ) + (set_local $$cond629$i + (if (result i32) + (get_local $$cmp623$i) + (get_local $$sub626$le$i) + (get_local $$e$5$ph$i) + ) + ) + (set_local $$241 + (i32.lt_s + (get_local $$cond629$i) + (i32.const 0) + ) + ) + (set_local $$242 + (i32.shr_s + (i32.shl + (get_local $$241) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$243 + (call $_fmt_u + (get_local $$cond629$i) + (get_local $$242) + (get_local $$arrayidx$i$236) + ) + ) + (set_local $$sub$ptr$rhs$cast634$504$i + (get_local $$243) + ) + (set_local $$sub$ptr$sub635$505$i + (i32.sub + (get_local $$sub$ptr$lhs$cast160$i) + (get_local $$sub$ptr$rhs$cast634$504$i) + ) + ) + (set_local $$cmp636$506$i + (i32.lt_s + (get_local $$sub$ptr$sub635$505$i) + (i32.const 2) + ) + ) + (if + (get_local $$cmp636$506$i) + (block + (set_local $$estr$1507$i + (get_local $$243) + ) + (loop $while-in98 + (block $while-out97 + (set_local $$incdec$ptr639$i + (i32.add + (get_local $$estr$1507$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr639$i) + (i32.const 48) + ) + (set_local $$sub$ptr$rhs$cast634$i + (get_local $$incdec$ptr639$i) + ) + (set_local $$sub$ptr$sub635$i + (i32.sub + (get_local $$sub$ptr$lhs$cast160$i) + (get_local $$sub$ptr$rhs$cast634$i) + ) + ) + (set_local $$cmp636$i + (i32.lt_s + (get_local $$sub$ptr$sub635$i) + (i32.const 2) + ) + ) + (if + (get_local $$cmp636$i) + (set_local $$estr$1507$i + (get_local $$incdec$ptr639$i) + ) + (block + (set_local $$estr$1$lcssa$i + (get_local $$incdec$ptr639$i) + ) + (br $while-out97) + ) + ) + (br $while-in98) + ) + ) + ) + (set_local $$estr$1$lcssa$i + (get_local $$243) + ) + ) + (set_local $$244 + (i32.shr_s + (get_local $$e$5$ph$i) + (i32.const 31) + ) + ) + (set_local $$245 + (i32.and + (get_local $$244) + (i32.const 2) + ) + ) + (set_local $$246 + (i32.add + (get_local $$245) + (i32.const 43) + ) + ) + (set_local $$conv644$i + (i32.and + (get_local $$246) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr645$i + (i32.add + (get_local $$estr$1$lcssa$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr645$i) + (get_local $$conv644$i) + ) + (set_local $$conv646$i + (i32.and + (get_local $$t$addr$1$i) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr647$i + (i32.add + (get_local $$estr$1$lcssa$i) + (i32.const -2) + ) + ) + (i32.store8 + (get_local $$incdec$ptr647$i) + (get_local $$conv646$i) + ) + (set_local $$sub$ptr$rhs$cast649$i + (get_local $$incdec$ptr647$i) + ) + (set_local $$sub$ptr$sub650$i + (i32.sub + (get_local $$sub$ptr$lhs$cast160$i) + (get_local $$sub$ptr$rhs$cast649$i) + ) + ) + (set_local $$estr$2$i + (get_local $$incdec$ptr647$i) + ) + (set_local $$sub$ptr$sub650$pn$i + (get_local $$sub$ptr$sub650$i) + ) + ) + ) + (set_local $$add608$i + (i32.add + (get_local $$pl$0$i) + (i32.const 1) + ) + ) + (set_local $$add612$i + (i32.add + (get_local $$add608$i) + (get_local $$p$addr$3$i) + ) + ) + (set_local $$l$1$i + (i32.add + (get_local $$add612$i) + (get_local $$lor$ext$i) + ) + ) + (set_local $$add653$i + (i32.add + (get_local $$l$1$i) + (get_local $$sub$ptr$sub650$pn$i) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$add653$i) + (get_local $$fl$1$and219) + ) + (set_local $$247 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$436$i + (i32.and + (get_local $$247) + (i32.const 32) + ) + ) + (set_local $$tobool$i$437$i + (i32.eq + (get_local $$and$i$436$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$437$i) + (drop + (call $___fwritex + (get_local $$prefix$0$i) + (get_local $$pl$0$i) + (get_local $$f) + ) + ) + ) + (set_local $$xor655$i + (i32.xor + (get_local $$fl$1$and219) + (i32.const 65536) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$w$1) + (get_local $$add653$i) + (get_local $$xor655$i) + ) + (block $do-once99 + (if + (get_local $$cmp614$i) + (block + (set_local $$cmp660$i + (i32.gt_u + (get_local $$a$9$ph$i) + (get_local $$arraydecay208$add$ptr213$i) + ) + ) + (set_local $$r$0$a$9$i + (if (result i32) + (get_local $$cmp660$i) + (get_local $$arraydecay208$add$ptr213$i) + (get_local $$a$9$ph$i) + ) + ) + (set_local $$d$5494$i + (get_local $$r$0$a$9$i) + ) + (loop $while-in102 + (block $while-out101 + (set_local $$248 + (i32.load + (get_local $$d$5494$i) + ) + ) + (set_local $$249 + (call $_fmt_u + (get_local $$248) + (i32.const 0) + (get_local $$add$ptr671$i) + ) + ) + (set_local $$cmp673$i + (i32.eq + (get_local $$d$5494$i) + (get_local $$r$0$a$9$i) + ) + ) + (block $do-once103 + (if + (get_local $$cmp673$i) + (block + (set_local $$cmp686$i + (i32.eq + (get_local $$249) + (get_local $$add$ptr671$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp686$i) + ) + (block + (set_local $$s668$1$i + (get_local $$249) + ) + (br $do-once103) + ) + ) + (i32.store8 + (get_local $$incdec$ptr689$i) + (i32.const 48) + ) + (set_local $$s668$1$i + (get_local $$incdec$ptr689$i) + ) + ) + (block + (set_local $$cmp678$491$i + (i32.gt_u + (get_local $$249) + (get_local $$buf$i) + ) + ) + (if + (get_local $$cmp678$491$i) + (set_local $$s668$0492$i + (get_local $$249) + ) + (block + (set_local $$s668$1$i + (get_local $$249) + ) + (br $do-once103) + ) + ) + (loop $while-in106 + (block $while-out105 + (set_local $$incdec$ptr681$i + (i32.add + (get_local $$s668$0492$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr681$i) + (i32.const 48) + ) + (set_local $$cmp678$i + (i32.gt_u + (get_local $$incdec$ptr681$i) + (get_local $$buf$i) + ) + ) + (if + (get_local $$cmp678$i) + (set_local $$s668$0492$i + (get_local $$incdec$ptr681$i) + ) + (block + (set_local $$s668$1$i + (get_local $$incdec$ptr681$i) + ) + (br $while-out105) + ) + ) + (br $while-in106) + ) + ) + ) + ) + ) + (set_local $$250 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$442$i + (i32.and + (get_local $$250) + (i32.const 32) + ) + ) + (set_local $$tobool$i$443$i + (i32.eq + (get_local $$and$i$442$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$443$i) + (block + (set_local $$sub$ptr$rhs$cast695$i + (get_local $$s668$1$i) + ) + (set_local $$sub$ptr$sub696$i + (i32.sub + (get_local $$sub$ptr$lhs$cast694$i) + (get_local $$sub$ptr$rhs$cast695$i) + ) + ) + (drop + (call $___fwritex + (get_local $$s668$1$i) + (get_local $$sub$ptr$sub696$i) + (get_local $$f) + ) + ) + ) + ) + (set_local $$incdec$ptr698$i + (i32.add + (get_local $$d$5494$i) + (i32.const 4) + ) + ) + (set_local $$cmp665$i + (i32.gt_u + (get_local $$incdec$ptr698$i) + (get_local $$arraydecay208$add$ptr213$i) + ) + ) + (if + (get_local $$cmp665$i) + (block + (set_local $$incdec$ptr698$i$lcssa + (get_local $$incdec$ptr698$i) + ) + (br $while-out101) + ) + (set_local $$d$5494$i + (get_local $$incdec$ptr698$i) + ) + ) + (br $while-in102) + ) + ) + (set_local $$251 + (i32.eq + (get_local $$239) + (i32.const 0) + ) + ) + (block $do-once107 + (if + (i32.eqz + (get_local $$251) + ) + (block + (set_local $$252 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$448$i + (i32.and + (get_local $$252) + (i32.const 32) + ) + ) + (set_local $$tobool$i$449$i + (i32.eq + (get_local $$and$i$448$i) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool$i$449$i) + ) + (br $do-once107) + ) + (drop + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $$f) + ) + ) + ) + ) + ) + (set_local $$cmp707$486$i + (i32.lt_u + (get_local $$incdec$ptr698$i$lcssa) + (get_local $$z$7$i$lcssa) + ) + ) + (set_local $$cmp710$487$i + (i32.gt_s + (get_local $$p$addr$3$i) + (i32.const 0) + ) + ) + (set_local $$253 + (i32.and + (get_local $$cmp710$487$i) + (get_local $$cmp707$486$i) + ) + ) + (if + (get_local $$253) + (block + (set_local $$d$6488$i + (get_local $$incdec$ptr698$i$lcssa) + ) + (set_local $$p$addr$4489$i + (get_local $$p$addr$3$i) + ) + (loop $while-in110 + (block $while-out109 + (set_local $$254 + (i32.load + (get_local $$d$6488$i) + ) + ) + (set_local $$255 + (call $_fmt_u + (get_local $$254) + (i32.const 0) + (get_local $$add$ptr671$i) + ) + ) + (set_local $$cmp722$483$i + (i32.gt_u + (get_local $$255) + (get_local $$buf$i) + ) + ) + (if + (get_local $$cmp722$483$i) + (block + (set_local $$s715$0484$i + (get_local $$255) + ) + (loop $while-in112 + (block $while-out111 + (set_local $$incdec$ptr725$i + (i32.add + (get_local $$s715$0484$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr725$i) + (i32.const 48) + ) + (set_local $$cmp722$i + (i32.gt_u + (get_local $$incdec$ptr725$i) + (get_local $$buf$i) + ) + ) + (if + (get_local $$cmp722$i) + (set_local $$s715$0484$i + (get_local $$incdec$ptr725$i) + ) + (block + (set_local $$s715$0$lcssa$i + (get_local $$incdec$ptr725$i) + ) + (br $while-out111) + ) + ) + (br $while-in112) + ) + ) + ) + (set_local $$s715$0$lcssa$i + (get_local $$255) + ) + ) + (set_local $$256 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$454$i + (i32.and + (get_local $$256) + (i32.const 32) + ) + ) + (set_local $$tobool$i$455$i + (i32.eq + (get_local $$and$i$454$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$455$i) + (block + (set_local $$cmp727$i + (i32.gt_s + (get_local $$p$addr$4489$i) + (i32.const 9) + ) + ) + (set_local $$cond732$i + (if (result i32) + (get_local $$cmp727$i) + (i32.const 9) + (get_local $$p$addr$4489$i) + ) + ) + (drop + (call $___fwritex + (get_local $$s715$0$lcssa$i) + (get_local $$cond732$i) + (get_local $$f) + ) + ) + ) + ) + (set_local $$incdec$ptr734$i + (i32.add + (get_local $$d$6488$i) + (i32.const 4) + ) + ) + (set_local $$sub735$i + (i32.add + (get_local $$p$addr$4489$i) + (i32.const -9) + ) + ) + (set_local $$cmp707$i + (i32.lt_u + (get_local $$incdec$ptr734$i) + (get_local $$z$7$i$lcssa) + ) + ) + (set_local $$cmp710$i + (i32.gt_s + (get_local $$p$addr$4489$i) + (i32.const 9) + ) + ) + (set_local $$257 + (i32.and + (get_local $$cmp710$i) + (get_local $$cmp707$i) + ) + ) + (if + (get_local $$257) + (block + (set_local $$d$6488$i + (get_local $$incdec$ptr734$i) + ) + (set_local $$p$addr$4489$i + (get_local $$sub735$i) + ) + ) + (block + (set_local $$p$addr$4$lcssa$i + (get_local $$sub735$i) + ) + (br $while-out109) + ) + ) + (br $while-in110) + ) + ) + ) + (set_local $$p$addr$4$lcssa$i + (get_local $$p$addr$3$i) + ) + ) + (set_local $$add737$i + (i32.add + (get_local $$p$addr$4$lcssa$i) + (i32.const 9) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$add737$i) + (i32.const 9) + (i32.const 0) + ) + ) + (block + (set_local $$add$ptr742$i + (i32.add + (get_local $$a$9$ph$i) + (i32.const 4) + ) + ) + (set_local $$z$7$add$ptr742$i + (if (result i32) + (get_local $$cmp450$lcssa$i) + (get_local $$z$7$i$lcssa) + (get_local $$add$ptr742$i) + ) + ) + (set_local $$cmp748$499$i + (i32.gt_s + (get_local $$p$addr$3$i) + (i32.const -1) + ) + ) + (if + (get_local $$cmp748$499$i) + (block + (set_local $$tobool781$i + (i32.eq + (get_local $$and610$pre$phi$iZ2D) + (i32.const 0) + ) + ) + (set_local $$d$7500$i + (get_local $$a$9$ph$i) + ) + (set_local $$p$addr$5501$i + (get_local $$p$addr$3$i) + ) + (loop $while-in114 + (block $while-out113 + (set_local $$258 + (i32.load + (get_local $$d$7500$i) + ) + ) + (set_local $$259 + (call $_fmt_u + (get_local $$258) + (i32.const 0) + (get_local $$add$ptr671$i) + ) + ) + (set_local $$cmp760$i + (i32.eq + (get_local $$259) + (get_local $$add$ptr671$i) + ) + ) + (if + (get_local $$cmp760$i) + (block + (i32.store8 + (get_local $$incdec$ptr689$i) + (i32.const 48) + ) + (set_local $$s753$0$i + (get_local $$incdec$ptr689$i) + ) + ) + (set_local $$s753$0$i + (get_local $$259) + ) + ) + (set_local $$cmp765$i + (i32.eq + (get_local $$d$7500$i) + (get_local $$a$9$ph$i) + ) + ) + (block $do-once115 + (if + (get_local $$cmp765$i) + (block + (set_local $$incdec$ptr776$i + (i32.add + (get_local $$s753$0$i) + (i32.const 1) + ) + ) + (set_local $$260 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$460$i + (i32.and + (get_local $$260) + (i32.const 32) + ) + ) + (set_local $$tobool$i$461$i + (i32.eq + (get_local $$and$i$460$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$461$i) + (drop + (call $___fwritex + (get_local $$s753$0$i) + (i32.const 1) + (get_local $$f) + ) + ) + ) + (set_local $$cmp777$i + (i32.lt_s + (get_local $$p$addr$5501$i) + (i32.const 1) + ) + ) + (set_local $$or$cond401$i + (i32.and + (get_local $$tobool781$i) + (get_local $$cmp777$i) + ) + ) + (if + (get_local $$or$cond401$i) + (block + (set_local $$s753$2$i + (get_local $$incdec$ptr776$i) + ) + (br $do-once115) + ) + ) + (set_local $$261 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$466$i + (i32.and + (get_local $$261) + (i32.const 32) + ) + ) + (set_local $$tobool$i$467$i + (i32.eq + (get_local $$and$i$466$i) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool$i$467$i) + ) + (block + (set_local $$s753$2$i + (get_local $$incdec$ptr776$i) + ) + (br $do-once115) + ) + ) + (drop + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $$f) + ) + ) + (set_local $$s753$2$i + (get_local $$incdec$ptr776$i) + ) + ) + (block + (set_local $$cmp770$495$i + (i32.gt_u + (get_local $$s753$0$i) + (get_local $$buf$i) + ) + ) + (if + (get_local $$cmp770$495$i) + (set_local $$s753$1496$i + (get_local $$s753$0$i) + ) + (block + (set_local $$s753$2$i + (get_local $$s753$0$i) + ) + (br $do-once115) + ) + ) + (loop $while-in118 + (block $while-out117 + (set_local $$incdec$ptr773$i + (i32.add + (get_local $$s753$1496$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr773$i) + (i32.const 48) + ) + (set_local $$cmp770$i + (i32.gt_u + (get_local $$incdec$ptr773$i) + (get_local $$buf$i) + ) + ) + (if + (get_local $$cmp770$i) + (set_local $$s753$1496$i + (get_local $$incdec$ptr773$i) + ) + (block + (set_local $$s753$2$i + (get_local $$incdec$ptr773$i) + ) + (br $while-out117) + ) + ) + (br $while-in118) + ) + ) + ) + ) + ) + (set_local $$sub$ptr$rhs$cast788$i + (get_local $$s753$2$i) + ) + (set_local $$sub$ptr$sub789$i + (i32.sub + (get_local $$sub$ptr$lhs$cast694$i) + (get_local $$sub$ptr$rhs$cast788$i) + ) + ) + (set_local $$262 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$472$i + (i32.and + (get_local $$262) + (i32.const 32) + ) + ) + (set_local $$tobool$i$473$i + (i32.eq + (get_local $$and$i$472$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$473$i) + (block + (set_local $$cmp790$i + (i32.gt_s + (get_local $$p$addr$5501$i) + (get_local $$sub$ptr$sub789$i) + ) + ) + (set_local $$cond800$i + (if (result i32) + (get_local $$cmp790$i) + (get_local $$sub$ptr$sub789$i) + (get_local $$p$addr$5501$i) + ) + ) + (drop + (call $___fwritex + (get_local $$s753$2$i) + (get_local $$cond800$i) + (get_local $$f) + ) + ) + ) + ) + (set_local $$sub806$i + (i32.sub + (get_local $$p$addr$5501$i) + (get_local $$sub$ptr$sub789$i) + ) + ) + (set_local $$incdec$ptr808$i + (i32.add + (get_local $$d$7500$i) + (i32.const 4) + ) + ) + (set_local $$cmp745$i + (i32.lt_u + (get_local $$incdec$ptr808$i) + (get_local $$z$7$add$ptr742$i) + ) + ) + (set_local $$cmp748$i + (i32.gt_s + (get_local $$sub806$i) + (i32.const -1) + ) + ) + (set_local $$263 + (i32.and + (get_local $$cmp745$i) + (get_local $$cmp748$i) + ) + ) + (if + (get_local $$263) + (block + (set_local $$d$7500$i + (get_local $$incdec$ptr808$i) + ) + (set_local $$p$addr$5501$i + (get_local $$sub806$i) + ) + ) + (block + (set_local $$p$addr$5$lcssa$i + (get_local $$sub806$i) + ) + (br $while-out113) + ) + ) + (br $while-in114) + ) + ) + ) + (set_local $$p$addr$5$lcssa$i + (get_local $$p$addr$3$i) + ) + ) + (set_local $$add810$i + (i32.add + (get_local $$p$addr$5$lcssa$i) + (i32.const 18) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$add810$i) + (i32.const 18) + (i32.const 0) + ) + (set_local $$264 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$i + (i32.and + (get_local $$264) + (i32.const 32) + ) + ) + (set_local $$tobool$i$i + (i32.eq + (get_local $$and$i$i) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool$i$i) + ) + (br $do-once99) + ) + (set_local $$sub$ptr$rhs$cast812$i + (get_local $$estr$2$i) + ) + (set_local $$sub$ptr$sub813$i + (i32.sub + (get_local $$sub$ptr$lhs$cast160$i) + (get_local $$sub$ptr$rhs$cast812$i) + ) + ) + (drop + (call $___fwritex + (get_local $$estr$2$i) + (get_local $$sub$ptr$sub813$i) + (get_local $$f) + ) + ) + ) + ) + ) + (set_local $$xor816$i + (i32.xor + (get_local $$fl$1$and219) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$add653$i) + (get_local $$xor816$i) + ) + (set_local $$cmp818$i + (i32.lt_s + (get_local $$add653$i) + (get_local $$w$1) + ) + ) + (set_local $$w$add653$i + (if (result i32) + (get_local $$cmp818$i) + (get_local $$w$1) + (get_local $$add653$i) + ) + ) + (set_local $$retval$0$i + (get_local $$w$add653$i) + ) + ) + (block + (set_local $$and36$i + (i32.and + (get_local $$t$0) + (i32.const 32) + ) + ) + (set_local $$tobool37$i + (i32.ne + (get_local $$and36$i) + (i32.const 0) + ) + ) + (set_local $$cond$i + (if (result i32) + (get_local $$tobool37$i) + (i32.const 4127) + (i32.const 4131) + ) + ) + (set_local $$cmp38$i + (i32.or + (f64.ne + (get_local $$y$addr$0$i) + (get_local $$y$addr$0$i) + ) + (f64.ne + (f64.const 0) + (f64.const 0) + ) + ) + ) + (set_local $$cond43$i + (if (result i32) + (get_local $$tobool37$i) + (i32.const 4135) + (i32.const 4139) + ) + ) + (set_local $$pl$1$i + (if (result i32) + (get_local $$cmp38$i) + (i32.const 0) + (get_local $$pl$0$i) + ) + ) + (set_local $$s35$0$i + (if (result i32) + (get_local $$cmp38$i) + (get_local $$cond43$i) + (get_local $$cond$i) + ) + ) + (set_local $$add$i$239 + (i32.add + (get_local $$pl$1$i) + (i32.const 3) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$add$i$239) + (get_local $$and219) + ) + (set_local $$193 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$406$i + (i32.and + (get_local $$193) + (i32.const 32) + ) + ) + (set_local $$tobool$i$407$i + (i32.eq + (get_local $$and$i$406$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$407$i) + (block + (drop + (call $___fwritex + (get_local $$prefix$0$i) + (get_local $$pl$1$i) + (get_local $$f) + ) + ) + (set_local $$$pre$i + (i32.load + (get_local $$f) + ) + ) + (set_local $$194 + (get_local $$$pre$i) + ) + ) + (set_local $$194 + (get_local $$193) + ) + ) + (set_local $$and$i$412$i + (i32.and + (get_local $$194) + (i32.const 32) + ) + ) + (set_local $$tobool$i$413$i + (i32.eq + (get_local $$and$i$412$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$413$i) + (drop + (call $___fwritex + (get_local $$s35$0$i) + (i32.const 3) + (get_local $$f) + ) + ) + ) + (set_local $$xor$i + (i32.xor + (get_local $$fl$1$and219) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$add$i$239) + (get_local $$xor$i) + ) + (set_local $$cmp48$i + (i32.lt_s + (get_local $$add$i$239) + (get_local $$w$1) + ) + ) + (set_local $$cond53$i + (if (result i32) + (get_local $$cmp48$i) + (get_local $$w$1) + (get_local $$add$i$239) + ) + ) + (set_local $$retval$0$i + (get_local $$cond53$i) + ) + ) + ) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$retval$0$i) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch17) + ) + ) + (block + (set_local $$a$2 + (get_local $$incdec$ptr169275) + ) + (set_local $$fl$6 + (get_local $$fl$1$and219) + ) + (set_local $$p$5 + (get_local $$p$0) + ) + (set_local $$pl$2 + (i32.const 0) + ) + (set_local $$prefix$2 + (i32.const 4091) + ) + (set_local $$z$2 + (get_local $$add$ptr205) + ) + ) + ) + ) + (block $label$break$L308 + (if + (i32.eq + (get_local $label) + (i32.const 64) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$90 + (get_local $$arg) + ) + (set_local $$91 + (get_local $$90) + ) + (set_local $$92 + (i32.load + (get_local $$91) + ) + ) + (set_local $$93 + (i32.add + (get_local $$90) + (i32.const 4) + ) + ) + (set_local $$94 + (get_local $$93) + ) + (set_local $$95 + (i32.load + (get_local $$94) + ) + ) + (set_local $$and249 + (i32.and + (get_local $$t$1) + (i32.const 32) + ) + ) + (set_local $$96 + (i32.eq + (get_local $$92) + (i32.const 0) + ) + ) + (set_local $$97 + (i32.eq + (get_local $$95) + (i32.const 0) + ) + ) + (set_local $$98 + (i32.and + (get_local $$96) + (get_local $$97) + ) + ) + (if + (get_local $$98) + (block + (set_local $$a$0 + (get_local $$add$ptr205) + ) + (set_local $$fl$4 + (get_local $$fl$3) + ) + (set_local $$p$2 + (get_local $$p$1) + ) + (set_local $$pl$1 + (i32.const 0) + ) + (set_local $$prefix$1 + (i32.const 4091) + ) + (set_local $label + (i32.const 77) + ) + ) + (block + (set_local $$101 + (get_local $$95) + ) + (set_local $$99 + (get_local $$92) + ) + (set_local $$s$addr$06$i + (get_local $$add$ptr205) + ) + (loop $while-in123 + (block $while-out122 + (set_local $$idxprom$i + (i32.and + (get_local $$99) + (i32.const 15) + ) + ) + (set_local $$arrayidx$i + (i32.add + (i32.const 4075) + (get_local $$idxprom$i) + ) + ) + (set_local $$100 + (i32.load8_s + (get_local $$arrayidx$i) + ) + ) + (set_local $$conv$4$i$211 + (i32.and + (get_local $$100) + (i32.const 255) + ) + ) + (set_local $$or$i + (i32.or + (get_local $$conv$4$i$211) + (get_local $$and249) + ) + ) + (set_local $$conv1$i + (i32.and + (get_local $$or$i) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr$i$212 + (i32.add + (get_local $$s$addr$06$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr$i$212) + (get_local $$conv1$i) + ) + (set_local $$102 + (call $_bitshift64Lshr + (get_local $$99) + (get_local $$101) + (i32.const 4) + ) + ) + (set_local $$103 + (get_global $tempRet0) + ) + (set_local $$104 + (i32.eq + (get_local $$102) + (i32.const 0) + ) + ) + (set_local $$105 + (i32.eq + (get_local $$103) + (i32.const 0) + ) + ) + (set_local $$106 + (i32.and + (get_local $$104) + (get_local $$105) + ) + ) + (if + (get_local $$106) + (block + (set_local $$incdec$ptr$i$212$lcssa + (get_local $$incdec$ptr$i$212) + ) + (br $while-out122) + ) + (block + (set_local $$101 + (get_local $$103) + ) + (set_local $$99 + (get_local $$102) + ) + (set_local $$s$addr$06$i + (get_local $$incdec$ptr$i$212) + ) + ) + ) + (br $while-in123) + ) + ) + (set_local $$107 + (get_local $$arg) + ) + (set_local $$108 + (get_local $$107) + ) + (set_local $$109 + (i32.load + (get_local $$108) + ) + ) + (set_local $$110 + (i32.add + (get_local $$107) + (i32.const 4) + ) + ) + (set_local $$111 + (get_local $$110) + ) + (set_local $$112 + (i32.load + (get_local $$111) + ) + ) + (set_local $$113 + (i32.eq + (get_local $$109) + (i32.const 0) + ) + ) + (set_local $$114 + (i32.eq + (get_local $$112) + (i32.const 0) + ) + ) + (set_local $$115 + (i32.and + (get_local $$113) + (get_local $$114) + ) + ) + (set_local $$and254 + (i32.and + (get_local $$fl$3) + (i32.const 8) + ) + ) + (set_local $$tobool255 + (i32.eq + (get_local $$and254) + (i32.const 0) + ) + ) + (set_local $$or$cond193 + (i32.or + (get_local $$tobool255) + (get_local $$115) + ) + ) + (if + (get_local $$or$cond193) + (block + (set_local $$a$0 + (get_local $$incdec$ptr$i$212$lcssa) + ) + (set_local $$fl$4 + (get_local $$fl$3) + ) + (set_local $$p$2 + (get_local $$p$1) + ) + (set_local $$pl$1 + (i32.const 0) + ) + (set_local $$prefix$1 + (i32.const 4091) + ) + (set_local $label + (i32.const 77) + ) + ) + (block + (set_local $$shr + (i32.shr_s + (get_local $$t$1) + (i32.const 4) + ) + ) + (set_local $$add$ptr257 + (i32.add + (i32.const 4091) + (get_local $$shr) + ) + ) + (set_local $$a$0 + (get_local $$incdec$ptr$i$212$lcssa) + ) + (set_local $$fl$4 + (get_local $$fl$3) + ) + (set_local $$p$2 + (get_local $$p$1) + ) + (set_local $$pl$1 + (i32.const 2) + ) + (set_local $$prefix$1 + (get_local $$add$ptr257) + ) + (set_local $label + (i32.const 77) + ) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 76) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$150 + (call $_fmt_u + (get_local $$148) + (get_local $$149) + (get_local $$add$ptr205) + ) + ) + (set_local $$a$0 + (get_local $$150) + ) + (set_local $$fl$4 + (get_local $$fl$1$and219) + ) + (set_local $$p$2 + (get_local $$p$0) + ) + (set_local $$pl$1 + (get_local $$pl$0) + ) + (set_local $$prefix$1 + (get_local $$prefix$0) + ) + (set_local $label + (i32.const 77) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 82) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$call356 + (call $_memchr + (get_local $$a$1) + (i32.const 0) + (get_local $$p$0) + ) + ) + (set_local $$tobool357 + (i32.eq + (get_local $$call356) + (i32.const 0) + ) + ) + (set_local $$sub$ptr$lhs$cast361 + (get_local $$call356) + ) + (set_local $$sub$ptr$rhs$cast362 + (get_local $$a$1) + ) + (set_local $$sub$ptr$sub363 + (i32.sub + (get_local $$sub$ptr$lhs$cast361) + (get_local $$sub$ptr$rhs$cast362) + ) + ) + (set_local $$add$ptr359 + (i32.add + (get_local $$a$1) + (get_local $$p$0) + ) + ) + (set_local $$z$1 + (if (result i32) + (get_local $$tobool357) + (get_local $$add$ptr359) + (get_local $$call356) + ) + ) + (set_local $$p$3 + (if (result i32) + (get_local $$tobool357) + (get_local $$p$0) + (get_local $$sub$ptr$sub363) + ) + ) + (set_local $$a$2 + (get_local $$a$1) + ) + (set_local $$fl$6 + (get_local $$and219) + ) + (set_local $$p$5 + (get_local $$p$3) + ) + (set_local $$pl$2 + (i32.const 0) + ) + (set_local $$prefix$2 + (i32.const 4091) + ) + (set_local $$z$2 + (get_local $$z$1) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 86) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$176 + (i32.load + (get_local $$arg) + ) + ) + (set_local $$i$0316 + (i32.const 0) + ) + (set_local $$l$1315 + (i32.const 0) + ) + (set_local $$ws$0317 + (get_local $$176) + ) + (loop $while-in125 + (block $while-out124 + (set_local $$177 + (i32.load + (get_local $$ws$0317) + ) + ) + (set_local $$tobool380 + (i32.eq + (get_local $$177) + (i32.const 0) + ) + ) + (if + (get_local $$tobool380) + (block + (set_local $$i$0$lcssa + (get_local $$i$0316) + ) + (set_local $$l$2 + (get_local $$l$1315) + ) + (br $while-out124) + ) + ) + (set_local $$call384 + (call $_wctomb + (get_local $$mb) + (get_local $$177) + ) + ) + (set_local $$cmp385 + (i32.lt_s + (get_local $$call384) + (i32.const 0) + ) + ) + (set_local $$sub389 + (i32.sub + (get_local $$p$4365) + (get_local $$i$0316) + ) + ) + (set_local $$cmp390 + (i32.gt_u + (get_local $$call384) + (get_local $$sub389) + ) + ) + (set_local $$or$cond195 + (i32.or + (get_local $$cmp385) + (get_local $$cmp390) + ) + ) + (if + (get_local $$or$cond195) + (block + (set_local $$i$0$lcssa + (get_local $$i$0316) + ) + (set_local $$l$2 + (get_local $$call384) + ) + (br $while-out124) + ) + ) + (set_local $$incdec$ptr383 + (i32.add + (get_local $$ws$0317) + (i32.const 4) + ) + ) + (set_local $$add395 + (i32.add + (get_local $$call384) + (get_local $$i$0316) + ) + ) + (set_local $$cmp377 + (i32.gt_u + (get_local $$p$4365) + (get_local $$add395) + ) + ) + (if + (get_local $$cmp377) + (block + (set_local $$i$0316 + (get_local $$add395) + ) + (set_local $$l$1315 + (get_local $$call384) + ) + (set_local $$ws$0317 + (get_local $$incdec$ptr383) + ) + ) + (block + (set_local $$i$0$lcssa + (get_local $$add395) + ) + (set_local $$l$2 + (get_local $$call384) + ) + (br $while-out124) + ) + ) + (br $while-in125) + ) + ) + (set_local $$cmp397 + (i32.lt_s + (get_local $$l$2) + (i32.const 0) + ) + ) + (if + (get_local $$cmp397) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$i$0$lcssa) + (get_local $$fl$1$and219) + ) + (set_local $$cmp404$324 + (i32.eq + (get_local $$i$0$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$cmp404$324) + (block + (set_local $$i$0$lcssa368 + (i32.const 0) + ) + (set_local $label + (i32.const 98) + ) + ) + (block + (set_local $$178 + (i32.load + (get_local $$arg) + ) + ) + (set_local $$i$1325 + (i32.const 0) + ) + (set_local $$ws$1326 + (get_local $$178) + ) + (loop $while-in127 + (block $while-out126 + (set_local $$179 + (i32.load + (get_local $$ws$1326) + ) + ) + (set_local $$tobool407 + (i32.eq + (get_local $$179) + (i32.const 0) + ) + ) + (if + (get_local $$tobool407) + (block + (set_local $$i$0$lcssa368 + (get_local $$i$0$lcssa) + ) + (set_local $label + (i32.const 98) + ) + (br $label$break$L308) + ) + ) + (set_local $$incdec$ptr410 + (i32.add + (get_local $$ws$1326) + (i32.const 4) + ) + ) + (set_local $$call411 + (call $_wctomb + (get_local $$mb) + (get_local $$179) + ) + ) + (set_local $$add412 + (i32.add + (get_local $$call411) + (get_local $$i$1325) + ) + ) + (set_local $$cmp413 + (i32.gt_s + (get_local $$add412) + (get_local $$i$0$lcssa) + ) + ) + (if + (get_local $$cmp413) + (block + (set_local $$i$0$lcssa368 + (get_local $$i$0$lcssa) + ) + (set_local $label + (i32.const 98) + ) + (br $label$break$L308) + ) + ) + (set_local $$180 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$231 + (i32.and + (get_local $$180) + (i32.const 32) + ) + ) + (set_local $$tobool$i$232 + (i32.eq + (get_local $$and$i$231) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$232) + (drop + (call $___fwritex + (get_local $$mb) + (get_local $$call411) + (get_local $$f) + ) + ) + ) + (set_local $$cmp404 + (i32.lt_u + (get_local $$add412) + (get_local $$i$0$lcssa) + ) + ) + (if + (get_local $$cmp404) + (block + (set_local $$i$1325 + (get_local $$add412) + ) + (set_local $$ws$1326 + (get_local $$incdec$ptr410) + ) + ) + (block + (set_local $$i$0$lcssa368 + (get_local $$i$0$lcssa) + ) + (set_local $label + (i32.const 98) + ) + (br $while-out126) + ) + ) + (br $while-in127) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 98) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$xor + (i32.xor + (get_local $$fl$1$and219) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$i$0$lcssa368) + (get_local $$xor) + ) + (set_local $$cmp421 + (i32.gt_s + (get_local $$w$1) + (get_local $$i$0$lcssa368) + ) + ) + (set_local $$cond426 + (if (result i32) + (get_local $$cmp421) + (get_local $$w$1) + (get_local $$i$0$lcssa368) + ) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$cond426) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 77) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$cmp306 + (i32.gt_s + (get_local $$p$2) + (i32.const -1) + ) + ) + (set_local $$and309 + (i32.and + (get_local $$fl$4) + (i32.const -65537) + ) + ) + (set_local $$and309$fl$4 + (if (result i32) + (get_local $$cmp306) + (get_local $$and309) + (get_local $$fl$4) + ) + ) + (set_local $$151 + (get_local $$arg) + ) + (set_local $$152 + (get_local $$151) + ) + (set_local $$153 + (i32.load + (get_local $$152) + ) + ) + (set_local $$154 + (i32.add + (get_local $$151) + (i32.const 4) + ) + ) + (set_local $$155 + (get_local $$154) + ) + (set_local $$156 + (i32.load + (get_local $$155) + ) + ) + (set_local $$157 + (i32.ne + (get_local $$153) + (i32.const 0) + ) + ) + (set_local $$158 + (i32.ne + (get_local $$156) + (i32.const 0) + ) + ) + (set_local $$159 + (i32.or + (get_local $$157) + (get_local $$158) + ) + ) + (set_local $$tobool314 + (i32.ne + (get_local $$p$2) + (i32.const 0) + ) + ) + (set_local $$or$cond + (i32.or + (get_local $$tobool314) + (get_local $$159) + ) + ) + (if + (get_local $$or$cond) + (block + (set_local $$sub$ptr$rhs$cast318 + (get_local $$a$0) + ) + (set_local $$sub$ptr$sub319 + (i32.sub + (get_local $$sub$ptr$lhs$cast317) + (get_local $$sub$ptr$rhs$cast318) + ) + ) + (set_local $$160 + (i32.and + (get_local $$159) + (i32.const 1) + ) + ) + (set_local $$lnot$ext + (i32.xor + (get_local $$160) + (i32.const 1) + ) + ) + (set_local $$add322 + (i32.add + (get_local $$lnot$ext) + (get_local $$sub$ptr$sub319) + ) + ) + (set_local $$cmp323 + (i32.gt_s + (get_local $$p$2) + (get_local $$add322) + ) + ) + (set_local $$p$2$add322 + (if (result i32) + (get_local $$cmp323) + (get_local $$p$2) + (get_local $$add322) + ) + ) + (set_local $$a$2 + (get_local $$a$0) + ) + (set_local $$fl$6 + (get_local $$and309$fl$4) + ) + (set_local $$p$5 + (get_local $$p$2$add322) + ) + (set_local $$pl$2 + (get_local $$pl$1) + ) + (set_local $$prefix$2 + (get_local $$prefix$1) + ) + (set_local $$z$2 + (get_local $$add$ptr205) + ) + ) + (block + (set_local $$a$2 + (get_local $$add$ptr205) + ) + (set_local $$fl$6 + (get_local $$and309$fl$4) + ) + (set_local $$p$5 + (i32.const 0) + ) + (set_local $$pl$2 + (get_local $$pl$1) + ) + (set_local $$prefix$2 + (get_local $$prefix$1) + ) + (set_local $$z$2 + (get_local $$add$ptr205) + ) + ) + ) + ) + ) + (set_local $$sub$ptr$lhs$cast431 + (get_local $$z$2) + ) + (set_local $$sub$ptr$rhs$cast432 + (get_local $$a$2) + ) + (set_local $$sub$ptr$sub433 + (i32.sub + (get_local $$sub$ptr$lhs$cast431) + (get_local $$sub$ptr$rhs$cast432) + ) + ) + (set_local $$cmp434 + (i32.lt_s + (get_local $$p$5) + (get_local $$sub$ptr$sub433) + ) + ) + (set_local $$sub$ptr$sub433$p$5 + (if (result i32) + (get_local $$cmp434) + (get_local $$sub$ptr$sub433) + (get_local $$p$5) + ) + ) + (set_local $$add441 + (i32.add + (get_local $$pl$2) + (get_local $$sub$ptr$sub433$p$5) + ) + ) + (set_local $$cmp442 + (i32.lt_s + (get_local $$w$1) + (get_local $$add441) + ) + ) + (set_local $$w$2 + (if (result i32) + (get_local $$cmp442) + (get_local $$add441) + (get_local $$w$1) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$2) + (get_local $$add441) + (get_local $$fl$6) + ) + (set_local $$265 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$244 + (i32.and + (get_local $$265) + (i32.const 32) + ) + ) + (set_local $$tobool$i$245 + (i32.eq + (get_local $$and$i$244) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$245) + (drop + (call $___fwritex + (get_local $$prefix$2) + (get_local $$pl$2) + (get_local $$f) + ) + ) + ) + (set_local $$xor449 + (i32.xor + (get_local $$fl$6) + (i32.const 65536) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$w$2) + (get_local $$add441) + (get_local $$xor449) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$sub$ptr$sub433$p$5) + (get_local $$sub$ptr$sub433) + (i32.const 0) + ) + (set_local $$266 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$216 + (i32.and + (get_local $$266) + (i32.const 32) + ) + ) + (set_local $$tobool$i$217 + (i32.eq + (get_local $$and$i$216) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$217) + (drop + (call $___fwritex + (get_local $$a$2) + (get_local $$sub$ptr$sub433) + (get_local $$f) + ) + ) + ) + (set_local $$xor457 + (i32.xor + (get_local $$fl$6) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$2) + (get_local $$add441) + (get_local $$xor457) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$w$2) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + ) + ) + (block $label$break$L343 + (if + (i32.eq + (get_local $label) + (i32.const 242) + ) + (block + (set_local $$tobool459 + (i32.eq + (get_local $$f) + (i32.const 0) + ) + ) + (if + (get_local $$tobool459) + (block + (set_local $$tobool462 + (i32.eq + (get_local $$l10n$0$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$tobool462) + (set_local $$retval$0 + (i32.const 0) + ) + (block + (set_local $$i$2299 + (i32.const 1) + ) + (loop $while-in130 + (block $while-out129 + (set_local $$arrayidx469 + (i32.add + (get_local $$nl_type) + (i32.shl + (get_local $$i$2299) + (i32.const 2) + ) + ) + ) + (set_local $$267 + (i32.load + (get_local $$arrayidx469) + ) + ) + (set_local $$tobool470 + (i32.eq + (get_local $$267) + (i32.const 0) + ) + ) + (if + (get_local $$tobool470) + (block + (set_local $$i$2299$lcssa + (get_local $$i$2299) + ) + (br $while-out129) + ) + ) + (set_local $$add$ptr473 + (i32.add + (get_local $$nl_arg) + (i32.shl + (get_local $$i$2299) + (i32.const 3) + ) + ) + ) + (call $_pop_arg_336 + (get_local $$add$ptr473) + (get_local $$267) + (get_local $$ap) + ) + (set_local $$inc + (i32.add + (get_local $$i$2299) + (i32.const 1) + ) + ) + (set_local $$cmp466 + (i32.lt_s + (get_local $$inc) + (i32.const 10) + ) + ) + (if + (get_local $$cmp466) + (set_local $$i$2299 + (get_local $$inc) + ) + (block + (set_local $$retval$0 + (i32.const 1) + ) + (br $label$break$L343) + ) + ) + (br $while-in130) + ) + ) + (set_local $$cmp478$295 + (i32.lt_s + (get_local $$i$2299$lcssa) + (i32.const 10) + ) + ) + (if + (get_local $$cmp478$295) + (block + (set_local $$i$3296 + (get_local $$i$2299$lcssa) + ) + (loop $while-in132 + (block $while-out131 + (set_local $$arrayidx481 + (i32.add + (get_local $$nl_type) + (i32.shl + (get_local $$i$3296) + (i32.const 2) + ) + ) + ) + (set_local $$268 + (i32.load + (get_local $$arrayidx481) + ) + ) + (set_local $$lnot483 + (i32.eq + (get_local $$268) + (i32.const 0) + ) + ) + (set_local $$inc488 + (i32.add + (get_local $$i$3296) + (i32.const 1) + ) + ) + (if + (i32.eqz + (get_local $$lnot483) + ) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L343) + ) + ) + (set_local $$cmp478 + (i32.lt_s + (get_local $$inc488) + (i32.const 10) + ) + ) + (if + (get_local $$cmp478) + (set_local $$i$3296 + (get_local $$inc488) + ) + (block + (set_local $$retval$0 + (i32.const 1) + ) + (br $while-out131) + ) + ) + (br $while-in132) + ) + ) + ) + (set_local $$retval$0 + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $$retval$0 + (get_local $$cnt$1$lcssa) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_pop_arg_336 (; 56 ;) (param $$arg i32) (param $$type i32) (param $$ap i32) + (local $$0 i32) + (local $$1 i32) + (local $$10 i32) + (local $$100 i32) + (local $$101 i32) + (local $$102 i32) + (local $$103 f64) + (local $$104 i32) + (local $$105 i32) + (local $$106 i32) + (local $$107 i32) + (local $$108 i32) + (local $$109 i32) + (local $$11 i32) + (local $$110 f64) + (local $$12 i32) + (local $$13 i32) + (local $$14 i32) + (local $$15 i32) + (local $$16 i32) + (local $$17 i32) + (local $$18 i32) + (local $$19 i32) + (local $$2 i32) + (local $$20 i32) + (local $$21 i32) + (local $$22 i32) + (local $$23 i32) + (local $$24 i32) + (local $$25 i32) + (local $$26 i32) + (local $$27 i32) + (local $$28 i32) + (local $$29 i32) + (local $$3 i32) + (local $$30 i32) + (local $$31 i32) + (local $$32 i32) + (local $$33 i32) + (local $$34 i32) + (local $$35 i32) + (local $$36 i32) + (local $$37 i32) + (local $$38 i32) + (local $$39 i32) + (local $$4 i32) + (local $$40 i32) + (local $$41 i32) + (local $$42 i32) + (local $$43 i32) + (local $$44 i32) + (local $$45 i32) + (local $$46 i32) + (local $$47 i32) + (local $$48 i32) + (local $$49 i32) + (local $$5 i32) + (local $$50 i32) + (local $$51 i32) + (local $$52 i32) + (local $$53 i32) + (local $$54 i32) + (local $$55 i32) + (local $$56 i32) + (local $$57 i32) + (local $$58 i32) + (local $$59 i32) + (local $$6 i32) + (local $$60 i32) + (local $$61 i32) + (local $$62 i32) + (local $$63 i32) + (local $$64 i32) + (local $$65 i32) + (local $$66 i32) + (local $$67 i32) + (local $$68 i32) + (local $$69 i32) + (local $$7 i32) + (local $$70 i32) + (local $$71 i32) + (local $$72 i32) + (local $$73 i32) + (local $$74 i32) + (local $$75 i32) + (local $$76 i32) + (local $$77 i32) + (local $$78 i32) + (local $$79 i32) + (local $$8 i32) + (local $$80 i32) + (local $$81 i32) + (local $$82 i32) + (local $$83 i32) + (local $$84 i32) + (local $$85 i32) + (local $$86 i32) + (local $$87 i32) + (local $$88 i32) + (local $$89 i32) + (local $$9 i32) + (local $$90 i32) + (local $$91 i32) + (local $$92 i32) + (local $$93 i32) + (local $$94 i32) + (local $$95 i32) + (local $$96 i32) + (local $$97 i32) + (local $$98 i32) + (local $$99 i32) + (local $$arglist_current i32) + (local $$arglist_current11 i32) + (local $$arglist_current14 i32) + (local $$arglist_current17 i32) + (local $$arglist_current2 i32) + (local $$arglist_current20 i32) + (local $$arglist_current23 i32) + (local $$arglist_current26 i32) + (local $$arglist_current5 i32) + (local $$arglist_current8 i32) + (local $$arglist_next i32) + (local $$arglist_next12 i32) + (local $$arglist_next15 i32) + (local $$arglist_next18 i32) + (local $$arglist_next21 i32) + (local $$arglist_next24 i32) + (local $$arglist_next27 i32) + (local $$arglist_next3 i32) + (local $$arglist_next6 i32) + (local $$arglist_next9 i32) + (local $$cmp i32) + (local $$conv12 i32) + (local $$conv17$mask i32) + (local $$conv22 i32) + (local $$conv27$mask i32) + (local $$expanded i32) + (local $$expanded28 i32) + (local $$expanded30 i32) + (local $$expanded31 i32) + (local $$expanded32 i32) + (local $$expanded34 i32) + (local $$expanded35 i32) + (local $$expanded37 i32) + (local $$expanded38 i32) + (local $$expanded39 i32) + (local $$expanded41 i32) + (local $$expanded42 i32) + (local $$expanded44 i32) + (local $$expanded45 i32) + (local $$expanded46 i32) + (local $$expanded48 i32) + (local $$expanded49 i32) + (local $$expanded51 i32) + (local $$expanded52 i32) + (local $$expanded53 i32) + (local $$expanded55 i32) + (local $$expanded56 i32) + (local $$expanded58 i32) + (local $$expanded59 i32) + (local $$expanded60 i32) + (local $$expanded62 i32) + (local $$expanded63 i32) + (local $$expanded65 i32) + (local $$expanded66 i32) + (local $$expanded67 i32) + (local $$expanded69 i32) + (local $$expanded70 i32) + (local $$expanded72 i32) + (local $$expanded73 i32) + (local $$expanded74 i32) + (local $$expanded76 i32) + (local $$expanded77 i32) + (local $$expanded79 i32) + (local $$expanded80 i32) + (local $$expanded81 i32) + (local $$expanded83 i32) + (local $$expanded84 i32) + (local $$expanded86 i32) + (local $$expanded87 i32) + (local $$expanded88 i32) + (local $$expanded90 i32) + (local $$expanded91 i32) + (local $$expanded93 i32) + (local $$expanded94 i32) + (local $$expanded95 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$cmp + (i32.gt_u + (get_local $$type) + (i32.const 20) + ) + ) + (block $label$break$L1 + (if + (i32.eqz + (get_local $$cmp) + ) + (block $do-once + (block $switch + (block $switch-default + (block $switch-case9 + (block $switch-case8 + (block $switch-case7 + (block $switch-case6 + (block $switch-case5 + (block $switch-case4 + (block $switch-case3 + (block $switch-case2 + (block $switch-case1 + (block $switch-case + (br_table $switch-case $switch-case1 $switch-case2 $switch-case3 $switch-case4 $switch-case5 $switch-case6 $switch-case7 $switch-case8 $switch-case9 $switch-default + (i32.sub + (get_local $$type) + (i32.const 9) + ) + ) + ) + (block + (set_local $$arglist_current + (i32.load + (get_local $$ap) + ) + ) + (set_local $$0 + (get_local $$arglist_current) + ) + (set_local $$1 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded28 + (get_local $$1) + ) + (set_local $$expanded + (i32.sub + (get_local $$expanded28) + (i32.const 1) + ) + ) + (set_local $$2 + (i32.add + (get_local $$0) + (get_local $$expanded) + ) + ) + (set_local $$3 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded32 + (get_local $$3) + ) + (set_local $$expanded31 + (i32.sub + (get_local $$expanded32) + (i32.const 1) + ) + ) + (set_local $$expanded30 + (i32.xor + (get_local $$expanded31) + (i32.const -1) + ) + ) + (set_local $$4 + (i32.and + (get_local $$2) + (get_local $$expanded30) + ) + ) + (set_local $$5 + (get_local $$4) + ) + (set_local $$6 + (i32.load + (get_local $$5) + ) + ) + (set_local $$arglist_next + (i32.add + (get_local $$5) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next) + ) + (i32.store + (get_local $$arg) + (get_local $$6) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current2 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$7 + (get_local $$arglist_current2) + ) + (set_local $$8 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded35 + (get_local $$8) + ) + (set_local $$expanded34 + (i32.sub + (get_local $$expanded35) + (i32.const 1) + ) + ) + (set_local $$9 + (i32.add + (get_local $$7) + (get_local $$expanded34) + ) + ) + (set_local $$10 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded39 + (get_local $$10) + ) + (set_local $$expanded38 + (i32.sub + (get_local $$expanded39) + (i32.const 1) + ) + ) + (set_local $$expanded37 + (i32.xor + (get_local $$expanded38) + (i32.const -1) + ) + ) + (set_local $$11 + (i32.and + (get_local $$9) + (get_local $$expanded37) + ) + ) + (set_local $$12 + (get_local $$11) + ) + (set_local $$13 + (i32.load + (get_local $$12) + ) + ) + (set_local $$arglist_next3 + (i32.add + (get_local $$12) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next3) + ) + (set_local $$14 + (i32.lt_s + (get_local $$13) + (i32.const 0) + ) + ) + (set_local $$15 + (i32.shr_s + (i32.shl + (get_local $$14) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$16 + (get_local $$arg) + ) + (set_local $$17 + (get_local $$16) + ) + (i32.store + (get_local $$17) + (get_local $$13) + ) + (set_local $$18 + (i32.add + (get_local $$16) + (i32.const 4) + ) + ) + (set_local $$19 + (get_local $$18) + ) + (i32.store + (get_local $$19) + (get_local $$15) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current5 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$20 + (get_local $$arglist_current5) + ) + (set_local $$21 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded42 + (get_local $$21) + ) + (set_local $$expanded41 + (i32.sub + (get_local $$expanded42) + (i32.const 1) + ) + ) + (set_local $$22 + (i32.add + (get_local $$20) + (get_local $$expanded41) + ) + ) + (set_local $$23 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded46 + (get_local $$23) + ) + (set_local $$expanded45 + (i32.sub + (get_local $$expanded46) + (i32.const 1) + ) + ) + (set_local $$expanded44 + (i32.xor + (get_local $$expanded45) + (i32.const -1) + ) + ) + (set_local $$24 + (i32.and + (get_local $$22) + (get_local $$expanded44) + ) + ) + (set_local $$25 + (get_local $$24) + ) + (set_local $$26 + (i32.load + (get_local $$25) + ) + ) + (set_local $$arglist_next6 + (i32.add + (get_local $$25) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next6) + ) + (set_local $$27 + (get_local $$arg) + ) + (set_local $$28 + (get_local $$27) + ) + (i32.store + (get_local $$28) + (get_local $$26) + ) + (set_local $$29 + (i32.add + (get_local $$27) + (i32.const 4) + ) + ) + (set_local $$30 + (get_local $$29) + ) + (i32.store + (get_local $$30) + (i32.const 0) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current8 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$31 + (get_local $$arglist_current8) + ) + (set_local $$32 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $$expanded49 + (get_local $$32) + ) + (set_local $$expanded48 + (i32.sub + (get_local $$expanded49) + (i32.const 1) + ) + ) + (set_local $$33 + (i32.add + (get_local $$31) + (get_local $$expanded48) + ) + ) + (set_local $$34 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $$expanded53 + (get_local $$34) + ) + (set_local $$expanded52 + (i32.sub + (get_local $$expanded53) + (i32.const 1) + ) + ) + (set_local $$expanded51 + (i32.xor + (get_local $$expanded52) + (i32.const -1) + ) + ) + (set_local $$35 + (i32.and + (get_local $$33) + (get_local $$expanded51) + ) + ) + (set_local $$36 + (get_local $$35) + ) + (set_local $$37 + (get_local $$36) + ) + (set_local $$38 + (get_local $$37) + ) + (set_local $$39 + (i32.load + (get_local $$38) + ) + ) + (set_local $$40 + (i32.add + (get_local $$37) + (i32.const 4) + ) + ) + (set_local $$41 + (get_local $$40) + ) + (set_local $$42 + (i32.load + (get_local $$41) + ) + ) + (set_local $$arglist_next9 + (i32.add + (get_local $$36) + (i32.const 8) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next9) + ) + (set_local $$43 + (get_local $$arg) + ) + (set_local $$44 + (get_local $$43) + ) + (i32.store + (get_local $$44) + (get_local $$39) + ) + (set_local $$45 + (i32.add + (get_local $$43) + (i32.const 4) + ) + ) + (set_local $$46 + (get_local $$45) + ) + (i32.store + (get_local $$46) + (get_local $$42) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current11 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$47 + (get_local $$arglist_current11) + ) + (set_local $$48 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded56 + (get_local $$48) + ) + (set_local $$expanded55 + (i32.sub + (get_local $$expanded56) + (i32.const 1) + ) + ) + (set_local $$49 + (i32.add + (get_local $$47) + (get_local $$expanded55) + ) + ) + (set_local $$50 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded60 + (get_local $$50) + ) + (set_local $$expanded59 + (i32.sub + (get_local $$expanded60) + (i32.const 1) + ) + ) + (set_local $$expanded58 + (i32.xor + (get_local $$expanded59) + (i32.const -1) + ) + ) + (set_local $$51 + (i32.and + (get_local $$49) + (get_local $$expanded58) + ) + ) + (set_local $$52 + (get_local $$51) + ) + (set_local $$53 + (i32.load + (get_local $$52) + ) + ) + (set_local $$arglist_next12 + (i32.add + (get_local $$52) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next12) + ) + (set_local $$conv12 + (i32.and + (get_local $$53) + (i32.const 65535) + ) + ) + (set_local $$54 + (i32.shr_s + (i32.shl + (get_local $$conv12) + (i32.const 16) + ) + (i32.const 16) + ) + ) + (set_local $$55 + (i32.lt_s + (get_local $$54) + (i32.const 0) + ) + ) + (set_local $$56 + (i32.shr_s + (i32.shl + (get_local $$55) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$57 + (get_local $$arg) + ) + (set_local $$58 + (get_local $$57) + ) + (i32.store + (get_local $$58) + (get_local $$54) + ) + (set_local $$59 + (i32.add + (get_local $$57) + (i32.const 4) + ) + ) + (set_local $$60 + (get_local $$59) + ) + (i32.store + (get_local $$60) + (get_local $$56) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current14 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$61 + (get_local $$arglist_current14) + ) + (set_local $$62 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded63 + (get_local $$62) + ) + (set_local $$expanded62 + (i32.sub + (get_local $$expanded63) + (i32.const 1) + ) + ) + (set_local $$63 + (i32.add + (get_local $$61) + (get_local $$expanded62) + ) + ) + (set_local $$64 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded67 + (get_local $$64) + ) + (set_local $$expanded66 + (i32.sub + (get_local $$expanded67) + (i32.const 1) + ) + ) + (set_local $$expanded65 + (i32.xor + (get_local $$expanded66) + (i32.const -1) + ) + ) + (set_local $$65 + (i32.and + (get_local $$63) + (get_local $$expanded65) + ) + ) + (set_local $$66 + (get_local $$65) + ) + (set_local $$67 + (i32.load + (get_local $$66) + ) + ) + (set_local $$arglist_next15 + (i32.add + (get_local $$66) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next15) + ) + (set_local $$conv17$mask + (i32.and + (get_local $$67) + (i32.const 65535) + ) + ) + (set_local $$68 + (get_local $$arg) + ) + (set_local $$69 + (get_local $$68) + ) + (i32.store + (get_local $$69) + (get_local $$conv17$mask) + ) + (set_local $$70 + (i32.add + (get_local $$68) + (i32.const 4) + ) + ) + (set_local $$71 + (get_local $$70) + ) + (i32.store + (get_local $$71) + (i32.const 0) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current17 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$72 + (get_local $$arglist_current17) + ) + (set_local $$73 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded70 + (get_local $$73) + ) + (set_local $$expanded69 + (i32.sub + (get_local $$expanded70) + (i32.const 1) + ) + ) + (set_local $$74 + (i32.add + (get_local $$72) + (get_local $$expanded69) + ) + ) + (set_local $$75 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded74 + (get_local $$75) + ) + (set_local $$expanded73 + (i32.sub + (get_local $$expanded74) + (i32.const 1) + ) + ) + (set_local $$expanded72 + (i32.xor + (get_local $$expanded73) + (i32.const -1) + ) + ) + (set_local $$76 + (i32.and + (get_local $$74) + (get_local $$expanded72) + ) + ) + (set_local $$77 + (get_local $$76) + ) + (set_local $$78 + (i32.load + (get_local $$77) + ) + ) + (set_local $$arglist_next18 + (i32.add + (get_local $$77) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next18) + ) + (set_local $$conv22 + (i32.and + (get_local $$78) + (i32.const 255) + ) + ) + (set_local $$79 + (i32.shr_s + (i32.shl + (get_local $$conv22) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$80 + (i32.lt_s + (get_local $$79) + (i32.const 0) + ) + ) + (set_local $$81 + (i32.shr_s + (i32.shl + (get_local $$80) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$82 + (get_local $$arg) + ) + (set_local $$83 + (get_local $$82) + ) + (i32.store + (get_local $$83) + (get_local $$79) + ) + (set_local $$84 + (i32.add + (get_local $$82) + (i32.const 4) + ) + ) + (set_local $$85 + (get_local $$84) + ) + (i32.store + (get_local $$85) + (get_local $$81) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current20 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$86 + (get_local $$arglist_current20) + ) + (set_local $$87 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded77 + (get_local $$87) + ) + (set_local $$expanded76 + (i32.sub + (get_local $$expanded77) + (i32.const 1) + ) + ) + (set_local $$88 + (i32.add + (get_local $$86) + (get_local $$expanded76) + ) + ) + (set_local $$89 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded81 + (get_local $$89) + ) + (set_local $$expanded80 + (i32.sub + (get_local $$expanded81) + (i32.const 1) + ) + ) + (set_local $$expanded79 + (i32.xor + (get_local $$expanded80) + (i32.const -1) + ) + ) + (set_local $$90 + (i32.and + (get_local $$88) + (get_local $$expanded79) + ) + ) + (set_local $$91 + (get_local $$90) + ) + (set_local $$92 + (i32.load + (get_local $$91) + ) + ) + (set_local $$arglist_next21 + (i32.add + (get_local $$91) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next21) + ) + (set_local $$conv27$mask + (i32.and + (get_local $$92) + (i32.const 255) + ) + ) + (set_local $$93 + (get_local $$arg) + ) + (set_local $$94 + (get_local $$93) + ) + (i32.store + (get_local $$94) + (get_local $$conv27$mask) + ) + (set_local $$95 + (i32.add + (get_local $$93) + (i32.const 4) + ) + ) + (set_local $$96 + (get_local $$95) + ) + (i32.store + (get_local $$96) + (i32.const 0) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current23 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$97 + (get_local $$arglist_current23) + ) + (set_local $$98 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $$expanded84 + (get_local $$98) + ) + (set_local $$expanded83 + (i32.sub + (get_local $$expanded84) + (i32.const 1) + ) + ) + (set_local $$99 + (i32.add + (get_local $$97) + (get_local $$expanded83) + ) + ) + (set_local $$100 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $$expanded88 + (get_local $$100) + ) + (set_local $$expanded87 + (i32.sub + (get_local $$expanded88) + (i32.const 1) + ) + ) + (set_local $$expanded86 + (i32.xor + (get_local $$expanded87) + (i32.const -1) + ) + ) + (set_local $$101 + (i32.and + (get_local $$99) + (get_local $$expanded86) + ) + ) + (set_local $$102 + (get_local $$101) + ) + (set_local $$103 + (f64.load + (get_local $$102) + ) + ) + (set_local $$arglist_next24 + (i32.add + (get_local $$102) + (i32.const 8) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next24) + ) + (f64.store + (get_local $$arg) + (get_local $$103) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current26 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$104 + (get_local $$arglist_current26) + ) + (set_local $$105 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $$expanded91 + (get_local $$105) + ) + (set_local $$expanded90 + (i32.sub + (get_local $$expanded91) + (i32.const 1) + ) + ) + (set_local $$106 + (i32.add + (get_local $$104) + (get_local $$expanded90) + ) + ) + (set_local $$107 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $$expanded95 + (get_local $$107) + ) + (set_local $$expanded94 + (i32.sub + (get_local $$expanded95) + (i32.const 1) + ) + ) + (set_local $$expanded93 + (i32.xor + (get_local $$expanded94) + (i32.const -1) + ) + ) + (set_local $$108 + (i32.and + (get_local $$106) + (get_local $$expanded93) + ) + ) + (set_local $$109 + (get_local $$108) + ) + (set_local $$110 + (f64.load + (get_local $$109) + ) + ) + (set_local $$arglist_next27 + (i32.add + (get_local $$109) + (i32.const 8) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next27) + ) + (f64.store + (get_local $$arg) + (get_local $$110) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (br $label$break$L1) + ) + ) + ) + ) + (return) + ) + (func $_fmt_u (; 57 ;) (param $$0 i32) (param $$1 i32) (param $$s i32) (result i32) + (local $$10 i32) + (local $$11 i32) + (local $$12 i32) + (local $$13 i32) + (local $$14 i32) + (local $$15 i32) + (local $$16 i32) + (local $$17 i32) + (local $$18 i32) + (local $$19 i32) + (local $$2 i32) + (local $$20 i32) + (local $$21 i32) + (local $$22 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 i32) + (local $$8 i32) + (local $$9 i32) + (local $$add5 i32) + (local $$conv6 i32) + (local $$div9 i32) + (local $$incdec$ptr i32) + (local $$incdec$ptr$lcssa i32) + (local $$incdec$ptr7 i32) + (local $$rem4 i32) + (local $$s$addr$0$lcssa i32) + (local $$s$addr$013 i32) + (local $$s$addr$1$lcssa i32) + (local $$s$addr$19 i32) + (local $$tobool$8 i32) + (local $$x$addr$0$lcssa$off0 i32) + (local $$y$010 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$2 + (i32.gt_u + (get_local $$1) + (i32.const 0) + ) + ) + (set_local $$3 + (i32.gt_u + (get_local $$0) + (i32.const -1) + ) + ) + (set_local $$4 + (i32.eq + (get_local $$1) + (i32.const 0) + ) + ) + (set_local $$5 + (i32.and + (get_local $$4) + (get_local $$3) + ) + ) + (set_local $$6 + (i32.or + (get_local $$2) + (get_local $$5) + ) + ) + (if + (get_local $$6) + (block + (set_local $$7 + (get_local $$0) + ) + (set_local $$8 + (get_local $$1) + ) + (set_local $$s$addr$013 + (get_local $$s) + ) + (loop $while-in + (block $while-out + (set_local $$9 + (call $___uremdi3 + (get_local $$7) + (get_local $$8) + (i32.const 10) + (i32.const 0) + ) + ) + (set_local $$10 + (get_global $tempRet0) + ) + (set_local $$11 + (i32.or + (get_local $$9) + (i32.const 48) + ) + ) + (set_local $$12 + (i32.and + (get_local $$11) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$s$addr$013) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr) + (get_local $$12) + ) + (set_local $$13 + (call $___udivdi3 + (get_local $$7) + (get_local $$8) + (i32.const 10) + (i32.const 0) + ) + ) + (set_local $$14 + (get_global $tempRet0) + ) + (set_local $$15 + (i32.gt_u + (get_local $$8) + (i32.const 9) + ) + ) + (set_local $$16 + (i32.gt_u + (get_local $$7) + (i32.const -1) + ) + ) + (set_local $$17 + (i32.eq + (get_local $$8) + (i32.const 9) + ) + ) + (set_local $$18 + (i32.and + (get_local $$17) + (get_local $$16) + ) + ) + (set_local $$19 + (i32.or + (get_local $$15) + (get_local $$18) + ) + ) + (if + (get_local $$19) + (block + (set_local $$7 + (get_local $$13) + ) + (set_local $$8 + (get_local $$14) + ) + (set_local $$s$addr$013 + (get_local $$incdec$ptr) + ) + ) + (block + (set_local $$21 + (get_local $$13) + ) + (set_local $$22 + (get_local $$14) + ) + (set_local $$incdec$ptr$lcssa + (get_local $$incdec$ptr) + ) + (br $while-out) + ) + ) + (br $while-in) + ) + ) + (set_local $$s$addr$0$lcssa + (get_local $$incdec$ptr$lcssa) + ) + (set_local $$x$addr$0$lcssa$off0 + (get_local $$21) + ) + ) + (block + (set_local $$s$addr$0$lcssa + (get_local $$s) + ) + (set_local $$x$addr$0$lcssa$off0 + (get_local $$0) + ) + ) + ) + (set_local $$tobool$8 + (i32.eq + (get_local $$x$addr$0$lcssa$off0) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$8) + (set_local $$s$addr$1$lcssa + (get_local $$s$addr$0$lcssa) + ) + (block + (set_local $$s$addr$19 + (get_local $$s$addr$0$lcssa) + ) + (set_local $$y$010 + (get_local $$x$addr$0$lcssa$off0) + ) + (loop $while-in1 + (block $while-out0 + (set_local $$rem4 + (i32.and + (call $i32u-rem + (get_local $$y$010) + (i32.const 10) + ) + (i32.const -1) + ) + ) + (set_local $$add5 + (i32.or + (get_local $$rem4) + (i32.const 48) + ) + ) + (set_local $$conv6 + (i32.and + (get_local $$add5) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr7 + (i32.add + (get_local $$s$addr$19) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr7) + (get_local $$conv6) + ) + (set_local $$div9 + (i32.and + (call $i32u-div + (get_local $$y$010) + (i32.const 10) + ) + (i32.const -1) + ) + ) + (set_local $$20 + (i32.lt_u + (get_local $$y$010) + (i32.const 10) + ) + ) + (if + (get_local $$20) + (block + (set_local $$s$addr$1$lcssa + (get_local $$incdec$ptr7) + ) + (br $while-out0) + ) + (block + (set_local $$s$addr$19 + (get_local $$incdec$ptr7) + ) + (set_local $$y$010 + (get_local $$div9) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (return + (get_local $$s$addr$1$lcssa) + ) + ) + (func $_pad (; 58 ;) (param $$f i32) (param $$c i32) (param $$w i32) (param $$l i32) (param $$fl i32) + (local $$$pre i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$and i32) + (local $$and$i i32) + (local $$and$i$15 i32) + (local $$cmp i32) + (local $$cmp1 i32) + (local $$cmp3 i32) + (local $$cmp3$14 i32) + (local $$cond i32) + (local $$l$addr$0$lcssa21 i32) + (local $$l$addr$017 i32) + (local $$or$cond i32) + (local $$pad i32) + (local $$sub i32) + (local $$sub5 i32) + (local $$tobool i32) + (local $$tobool$i i32) + (local $$tobool$i$16 i32) + (local $$tobool$i18 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 256) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$pad + (get_local $sp) + ) + (set_local $$and + (i32.and + (get_local $$fl) + (i32.const 73728) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$and) + (i32.const 0) + ) + ) + (set_local $$cmp + (i32.gt_s + (get_local $$w) + (get_local $$l) + ) + ) + (set_local $$or$cond + (i32.and + (get_local $$cmp) + (get_local $$tobool) + ) + ) + (block $do-once + (if + (get_local $$or$cond) + (block + (set_local $$sub + (i32.sub + (get_local $$w) + (get_local $$l) + ) + ) + (set_local $$cmp1 + (i32.gt_u + (get_local $$sub) + (i32.const 256) + ) + ) + (set_local $$cond + (if (result i32) + (get_local $$cmp1) + (i32.const 256) + (get_local $$sub) + ) + ) + (drop + (call $_memset + (get_local $$pad) + (get_local $$c) + (get_local $$cond) + ) + ) + (set_local $$cmp3$14 + (i32.gt_u + (get_local $$sub) + (i32.const 255) + ) + ) + (set_local $$0 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$15 + (i32.and + (get_local $$0) + (i32.const 32) + ) + ) + (set_local $$tobool$i$16 + (i32.eq + (get_local $$and$i$15) + (i32.const 0) + ) + ) + (if + (get_local $$cmp3$14) + (block + (set_local $$1 + (i32.sub + (get_local $$w) + (get_local $$l) + ) + ) + (set_local $$4 + (get_local $$0) + ) + (set_local $$l$addr$017 + (get_local $$sub) + ) + (set_local $$tobool$i18 + (get_local $$tobool$i$16) + ) + (loop $while-in + (block $while-out + (if + (get_local $$tobool$i18) + (block + (drop + (call $___fwritex + (get_local $$pad) + (i32.const 256) + (get_local $$f) + ) + ) + (set_local $$$pre + (i32.load + (get_local $$f) + ) + ) + (set_local $$2 + (get_local $$$pre) + ) + ) + (set_local $$2 + (get_local $$4) + ) + ) + (set_local $$sub5 + (i32.add + (get_local $$l$addr$017) + (i32.const -256) + ) + ) + (set_local $$cmp3 + (i32.gt_u + (get_local $$sub5) + (i32.const 255) + ) + ) + (set_local $$and$i + (i32.and + (get_local $$2) + (i32.const 32) + ) + ) + (set_local $$tobool$i + (i32.eq + (get_local $$and$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp3) + (block + (set_local $$4 + (get_local $$2) + ) + (set_local $$l$addr$017 + (get_local $$sub5) + ) + (set_local $$tobool$i18 + (get_local $$tobool$i) + ) + ) + (br $while-out) + ) + (br $while-in) + ) + ) + (set_local $$3 + (i32.and + (get_local $$1) + (i32.const 255) + ) + ) + (if + (get_local $$tobool$i) + (set_local $$l$addr$0$lcssa21 + (get_local $$3) + ) + (br $do-once) + ) + ) + (if + (get_local $$tobool$i$16) + (set_local $$l$addr$0$lcssa21 + (get_local $$sub) + ) + (br $do-once) + ) + ) + (drop + (call $___fwritex + (get_local $$pad) + (get_local $$l$addr$0$lcssa21) + (get_local $$f) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return) + ) + (func $_malloc (; 59 ;) (param $$bytes i32) (result i32) + (local $$$lcssa i32) + (local $$$lcssa290 i32) + (local $$$pre i32) + (local $$$pre$i i32) + (local $$$pre$i$177 i32) + (local $$$pre$i$56$i i32) + (local $$$pre$i$i i32) + (local $$$pre$phi$i$178Z2D i32) + (local $$$pre$phi$i$57$iZ2D i32) + (local $$$pre$phi$i$iZ2D i32) + (local $$$pre$phi$iZ2D i32) + (local $$$pre$phiZ2D i32) + (local $$$pre241 i32) + (local $$$pre5$i$i i32) + (local $$0 i32) + (local $$1 i32) + (local $$10 i32) + (local $$100 i32) + (local $$101 i32) + (local $$102 i32) + (local $$103 i32) + (local $$104 i32) + (local $$105 i32) + (local $$106 i32) + (local $$107 i32) + (local $$108 i32) + (local $$109 i32) + (local $$11 i32) + (local $$110 i32) + (local $$111 i32) + (local $$112 i32) + (local $$113 i32) + (local $$114 i32) + (local $$115 i32) + (local $$116 i32) + (local $$117 i32) + (local $$118 i32) + (local $$119 i32) + (local $$12 i32) + (local $$120 i32) + (local $$121 i32) + (local $$122 i32) + (local $$123 i32) + (local $$124 i32) + (local $$125 i32) + (local $$126 i32) + (local $$127 i32) + (local $$128 i32) + (local $$129 i32) + (local $$13 i32) + (local $$130 i32) + (local $$131 i32) + (local $$132 i32) + (local $$133 i32) + (local $$134 i32) + (local $$135 i32) + (local $$136 i32) + (local $$137 i32) + (local $$138 i32) + (local $$139 i32) + (local $$14 i32) + (local $$140 i32) + (local $$141 i32) + (local $$142 i32) + (local $$143 i32) + (local $$144 i32) + (local $$145 i32) + (local $$146 i32) + (local $$147 i32) + (local $$148 i32) + (local $$149 i32) + (local $$15 i32) + (local $$150 i32) + (local $$151 i32) + (local $$152 i32) + (local $$153 i32) + (local $$154 i32) + (local $$155 i32) + (local $$156 i32) + (local $$157 i32) + (local $$158 i32) + (local $$159 i32) + (local $$16 i32) + (local $$160 i32) + (local $$161 i32) + (local $$162 i32) + (local $$163 i32) + (local $$164 i32) + (local $$165 i32) + (local $$166 i32) + (local $$167 i32) + (local $$168 i32) + (local $$169 i32) + (local $$17 i32) + (local $$170 i32) + (local $$171 i32) + (local $$172 i32) + (local $$173 i32) + (local $$174 i32) + (local $$175 i32) + (local $$176 i32) + (local $$177 i32) + (local $$178 i32) + (local $$179 i32) + (local $$18 i32) + (local $$180 i32) + (local $$181 i32) + (local $$182 i32) + (local $$183 i32) + (local $$184 i32) + (local $$185 i32) + (local $$186 i32) + (local $$187 i32) + (local $$188 i32) + (local $$189 i32) + (local $$19 i32) + (local $$190 i32) + (local $$191 i32) + (local $$192 i32) + (local $$193 i32) + (local $$194 i32) + (local $$195 i32) + (local $$196 i32) + (local $$197 i32) + (local $$198 i32) + (local $$199 i32) + (local $$2 i32) + (local $$20 i32) + (local $$200 i32) + (local $$201 i32) + (local $$202 i32) + (local $$203 i32) + (local $$204 i32) + (local $$205 i32) + (local $$206 i32) + (local $$207 i32) + (local $$208 i32) + (local $$21 i32) + (local $$22 i32) + (local $$23 i32) + (local $$24 i32) + (local $$25 i32) + (local $$26 i32) + (local $$27 i32) + (local $$28 i32) + (local $$29 i32) + (local $$3 i32) + (local $$30 i32) + (local $$31 i32) + (local $$32 i32) + (local $$33 i32) + (local $$34 i32) + (local $$35 i32) + (local $$36 i32) + (local $$37 i32) + (local $$38 i32) + (local $$39 i32) + (local $$4 i32) + (local $$40 i32) + (local $$41 i32) + (local $$42 i32) + (local $$43 i32) + (local $$44 i32) + (local $$45 i32) + (local $$46 i32) + (local $$47 i32) + (local $$48 i32) + (local $$49 i32) + (local $$5 i32) + (local $$50 i32) + (local $$51 i32) + (local $$52 i32) + (local $$53 i32) + (local $$54 i32) + (local $$55 i32) + (local $$56 i32) + (local $$57 i32) + (local $$58 i32) + (local $$59 i32) + (local $$6 i32) + (local $$60 i32) + (local $$61 i32) + (local $$62 i32) + (local $$63 i32) + (local $$64 i32) + (local $$65 i32) + (local $$66 i32) + (local $$67 i32) + (local $$68 i32) + (local $$69 i32) + (local $$7 i32) + (local $$70 i32) + (local $$71 i32) + (local $$72 i32) + (local $$73 i32) + (local $$74 i32) + (local $$75 i32) + (local $$76 i32) + (local $$77 i32) + (local $$78 i32) + (local $$79 i32) + (local $$8 i32) + (local $$80 i32) + (local $$81 i32) + (local $$82 i32) + (local $$83 i32) + (local $$84 i32) + (local $$85 i32) + (local $$86 i32) + (local $$87 i32) + (local $$88 i32) + (local $$89 i32) + (local $$9 i32) + (local $$90 i32) + (local $$91 i32) + (local $$92 i32) + (local $$93 i32) + (local $$94 i32) + (local $$95 i32) + (local $$96 i32) + (local $$97 i32) + (local $$98 i32) + (local $$99 i32) + (local $$F$0$i$i i32) + (local $$F104$0 i32) + (local $$F197$0$i i32) + (local $$F224$0$i$i i32) + (local $$F290$0$i i32) + (local $$I252$0$i$i i32) + (local $$I316$0$i i32) + (local $$I57$0$i$i i32) + (local $$K105$0$i$i i32) + (local $$K305$0$i$i i32) + (local $$K373$0$i i32) + (local $$R$1$i i32) + (local $$R$1$i$168 i32) + (local $$R$1$i$168$lcssa i32) + (local $$R$1$i$i i32) + (local $$R$1$i$i$lcssa i32) + (local $$R$1$i$lcssa i32) + (local $$R$3$i i32) + (local $$R$3$i$171 i32) + (local $$R$3$i$i i32) + (local $$RP$1$i i32) + (local $$RP$1$i$167 i32) + (local $$RP$1$i$167$lcssa i32) + (local $$RP$1$i$i i32) + (local $$RP$1$i$i$lcssa i32) + (local $$RP$1$i$lcssa i32) + (local $$T$0$i i32) + (local $$T$0$i$58$i i32) + (local $$T$0$i$58$i$lcssa i32) + (local $$T$0$i$58$i$lcssa283 i32) + (local $$T$0$i$i i32) + (local $$T$0$i$i$lcssa i32) + (local $$T$0$i$i$lcssa284 i32) + (local $$T$0$i$lcssa i32) + (local $$T$0$i$lcssa293 i32) + (local $$add$i i32) + (local $$add$i$146 i32) + (local $$add$i$180 i32) + (local $$add$i$i i32) + (local $$add$ptr i32) + (local $$add$ptr$i i32) + (local $$add$ptr$i$1$i$i i32) + (local $$add$ptr$i$11$i i32) + (local $$add$ptr$i$161 i32) + (local $$add$ptr$i$193 i32) + (local $$add$ptr$i$21$i i32) + (local $$add$ptr$i$32$i i32) + (local $$add$ptr$i$i i32) + (local $$add$ptr$i$i$i i32) + (local $$add$ptr$i$i$i$lcssa i32) + (local $$add$ptr14$i$i i32) + (local $$add$ptr15$i$i i32) + (local $$add$ptr16$i$i i32) + (local $$add$ptr166 i32) + (local $$add$ptr169 i32) + (local $$add$ptr17$i$i i32) + (local $$add$ptr178 i32) + (local $$add$ptr181$i i32) + (local $$add$ptr182 i32) + (local $$add$ptr189$i i32) + (local $$add$ptr190$i i32) + (local $$add$ptr193 i32) + (local $$add$ptr199 i32) + (local $$add$ptr2$i$i i32) + (local $$add$ptr205$i$i i32) + (local $$add$ptr212$i$i i32) + (local $$add$ptr225$i i32) + (local $$add$ptr227$i i32) + (local $$add$ptr24$i$i i32) + (local $$add$ptr262$i i32) + (local $$add$ptr269$i i32) + (local $$add$ptr273$i i32) + (local $$add$ptr282$i i32) + (local $$add$ptr3$i$i i32) + (local $$add$ptr30$i$i i32) + (local $$add$ptr369$i$i i32) + (local $$add$ptr4$i$26$i i32) + (local $$add$ptr4$i$37$i i32) + (local $$add$ptr4$i$i i32) + (local $$add$ptr4$i$i$i i32) + (local $$add$ptr441$i i32) + (local $$add$ptr5$i$i i32) + (local $$add$ptr6$i$30$i i32) + (local $$add$ptr6$i$i i32) + (local $$add$ptr6$i$i$i i32) + (local $$add$ptr7$i$i i32) + (local $$add$ptr8$i122$i i32) + (local $$add$ptr95 i32) + (local $$add$ptr98 i32) + (local $$add10$i i32) + (local $$add101$i i32) + (local $$add110$i i32) + (local $$add13$i i32) + (local $$add14$i i32) + (local $$add140$i i32) + (local $$add144 i32) + (local $$add150$i i32) + (local $$add17$i i32) + (local $$add17$i$183 i32) + (local $$add177$i i32) + (local $$add18$i i32) + (local $$add19$i i32) + (local $$add2 i32) + (local $$add20$i i32) + (local $$add206$i$i i32) + (local $$add212$i i32) + (local $$add215$i i32) + (local $$add22$i i32) + (local $$add246$i i32) + (local $$add26$i$i i32) + (local $$add268$i i32) + (local $$add269$i$i i32) + (local $$add274$i$i i32) + (local $$add278$i$i i32) + (local $$add280$i$i i32) + (local $$add283$i$i i32) + (local $$add337$i i32) + (local $$add342$i i32) + (local $$add346$i i32) + (local $$add348$i i32) + (local $$add351$i i32) + (local $$add46$i i32) + (local $$add50 i32) + (local $$add51$i i32) + (local $$add54 i32) + (local $$add54$i i32) + (local $$add58 i32) + (local $$add62 i32) + (local $$add64 i32) + (local $$add74$i$i i32) + (local $$add77$i i32) + (local $$add78$i i32) + (local $$add79$i$i i32) + (local $$add8 i32) + (local $$add82$i i32) + (local $$add83$i$i i32) + (local $$add85$i$i i32) + (local $$add86$i i32) + (local $$add88$i$i i32) + (local $$add9$i i32) + (local $$add90$i i32) + (local $$add92$i i32) + (local $$and i32) + (local $$and$i i32) + (local $$and$i$12$i i32) + (local $$and$i$14$i i32) + (local $$and$i$143 i32) + (local $$and$i$22$i i32) + (local $$and$i$33$i i32) + (local $$and$i$i i32) + (local $$and$i$i$i i32) + (local $$and100$i i32) + (local $$and103$i i32) + (local $$and104$i i32) + (local $$and106 i32) + (local $$and11$i i32) + (local $$and119$i$i i32) + (local $$and12$i i32) + (local $$and13$i i32) + (local $$and13$i$i i32) + (local $$and133$i$i i32) + (local $$and14 i32) + (local $$and145 i32) + (local $$and17$i i32) + (local $$and194$i i32) + (local $$and194$i$204 i32) + (local $$and199$i i32) + (local $$and209$i$i i32) + (local $$and21$i i32) + (local $$and21$i$149 i32) + (local $$and227$i$i i32) + (local $$and236$i i32) + (local $$and264$i$i i32) + (local $$and268$i$i i32) + (local $$and273$i$i i32) + (local $$and282$i$i i32) + (local $$and29$i i32) + (local $$and292$i i32) + (local $$and295$i$i i32) + (local $$and3$i i32) + (local $$and3$i$24$i i32) + (local $$and3$i$35$i i32) + (local $$and3$i$i i32) + (local $$and3$i$i$i i32) + (local $$and30$i i32) + (local $$and318$i$i i32) + (local $$and32$i i32) + (local $$and32$i$i i32) + (local $$and33$i$i i32) + (local $$and331$i i32) + (local $$and336$i i32) + (local $$and341$i i32) + (local $$and350$i i32) + (local $$and363$i i32) + (local $$and37$i$i i32) + (local $$and387$i i32) + (local $$and4 i32) + (local $$and40$i$i i32) + (local $$and41 i32) + (local $$and42$i i32) + (local $$and43 i32) + (local $$and46 i32) + (local $$and49 i32) + (local $$and49$i i32) + (local $$and49$i$i i32) + (local $$and53 i32) + (local $$and57 i32) + (local $$and6$i i32) + (local $$and6$i$38$i i32) + (local $$and6$i$i i32) + (local $$and61 i32) + (local $$and64$i i32) + (local $$and68$i i32) + (local $$and69$i$i i32) + (local $$and7 i32) + (local $$and7$i$i i32) + (local $$and73$i i32) + (local $$and73$i$i i32) + (local $$and74 i32) + (local $$and77$i i32) + (local $$and78$i$i i32) + (local $$and8$i i32) + (local $$and80$i i32) + (local $$and81$i i32) + (local $$and85$i i32) + (local $$and87$i$i i32) + (local $$and89$i i32) + (local $$and9$i i32) + (local $$and96$i$i i32) + (local $$arrayidx i32) + (local $$arrayidx$i i32) + (local $$arrayidx$i$150 i32) + (local $$arrayidx$i$20$i i32) + (local $$arrayidx$i$48$i i32) + (local $$arrayidx$i$i i32) + (local $$arrayidx103 i32) + (local $$arrayidx103$i$i i32) + (local $$arrayidx106$i i32) + (local $$arrayidx107$i$i i32) + (local $$arrayidx113$i i32) + (local $$arrayidx113$i$159 i32) + (local $$arrayidx121$i i32) + (local $$arrayidx123$i$i i32) + (local $$arrayidx126$i$i i32) + (local $$arrayidx126$i$i$lcssa i32) + (local $$arrayidx137$i i32) + (local $$arrayidx143$i$i i32) + (local $$arrayidx148$i i32) + (local $$arrayidx151$i i32) + (local $$arrayidx151$i$i i32) + (local $$arrayidx154$i i32) + (local $$arrayidx155$i i32) + (local $$arrayidx161$i i32) + (local $$arrayidx165$i i32) + (local $$arrayidx165$i$169 i32) + (local $$arrayidx178$i$i i32) + (local $$arrayidx184$i i32) + (local $$arrayidx184$i$i i32) + (local $$arrayidx195$i$i i32) + (local $$arrayidx196$i i32) + (local $$arrayidx204$i i32) + (local $$arrayidx212$i i32) + (local $$arrayidx223$i$i i32) + (local $$arrayidx228$i i32) + (local $$arrayidx23$i i32) + (local $$arrayidx239$i i32) + (local $$arrayidx245$i i32) + (local $$arrayidx256$i i32) + (local $$arrayidx27$i i32) + (local $$arrayidx287$i$i i32) + (local $$arrayidx289$i i32) + (local $$arrayidx290$i$i i32) + (local $$arrayidx325$i$i i32) + (local $$arrayidx325$i$i$lcssa i32) + (local $$arrayidx355$i i32) + (local $$arrayidx358$i i32) + (local $$arrayidx394$i i32) + (local $$arrayidx394$i$lcssa i32) + (local $$arrayidx40$i i32) + (local $$arrayidx44$i i32) + (local $$arrayidx61$i i32) + (local $$arrayidx65$i i32) + (local $$arrayidx66 i32) + (local $$arrayidx71$i i32) + (local $$arrayidx75$i i32) + (local $$arrayidx91$i$i i32) + (local $$arrayidx92$i$i i32) + (local $$arrayidx94$i i32) + (local $$arrayidx94$i$156 i32) + (local $$arrayidx96$i$i i32) + (local $$base$i$i$lcssa i32) + (local $$base226$i$lcssa i32) + (local $$bk i32) + (local $$bk$i i32) + (local $$bk$i$163 i32) + (local $$bk$i$46$i i32) + (local $$bk$i$i i32) + (local $$bk102$i$i i32) + (local $$bk122 i32) + (local $$bk124 i32) + (local $$bk136$i i32) + (local $$bk139$i$i i32) + (local $$bk158$i$i i32) + (local $$bk161$i$i i32) + (local $$bk218$i i32) + (local $$bk220$i i32) + (local $$bk246$i$i i32) + (local $$bk248$i$i i32) + (local $$bk302$i$i i32) + (local $$bk311$i i32) + (local $$bk313$i i32) + (local $$bk338$i$i i32) + (local $$bk357$i$i i32) + (local $$bk360$i$i i32) + (local $$bk370$i i32) + (local $$bk407$i i32) + (local $$bk429$i i32) + (local $$bk43$i$i i32) + (local $$bk432$i i32) + (local $$bk47$i i32) + (local $$bk55$i$i i32) + (local $$bk67$i$i i32) + (local $$bk74$i$i i32) + (local $$bk78 i32) + (local $$bk82$i$i i32) + (local $$br$2$ph$i i32) + (local $$call$i$i i32) + (local $$call107$i i32) + (local $$call131$i i32) + (local $$call132$i i32) + (local $$call275$i i32) + (local $$call37$i i32) + (local $$call6$i$i i32) + (local $$call68$i i32) + (local $$call83$i i32) + (local $$child$i$i i32) + (local $$child166$i$i i32) + (local $$child289$i$i i32) + (local $$child357$i i32) + (local $$cmp i32) + (local $$cmp$i i32) + (local $$cmp$i$13$i i32) + (local $$cmp$i$140 i32) + (local $$cmp$i$15$i i32) + (local $$cmp$i$179 i32) + (local $$cmp$i$2$i$i i32) + (local $$cmp$i$23$i i32) + (local $$cmp$i$34$i i32) + (local $$cmp$i$9$i i32) + (local $$cmp$i$i$i i32) + (local $$cmp1 i32) + (local $$cmp1$i i32) + (local $$cmp1$i$i i32) + (local $$cmp10 i32) + (local $$cmp100$i$i i32) + (local $$cmp102$i i32) + (local $$cmp104$i$i i32) + (local $$cmp105$i i32) + (local $$cmp106$i$i i32) + (local $$cmp107$i i32) + (local $$cmp107$i$157 i32) + (local $$cmp108$i i32) + (local $$cmp108$i$i i32) + (local $$cmp112$i$i i32) + (local $$cmp113 i32) + (local $$cmp114$i i32) + (local $$cmp116$i i32) + (local $$cmp118$i i32) + (local $$cmp119$i i32) + (local $$cmp12$i i32) + (local $$cmp120$i$53$i i32) + (local $$cmp120$i$i i32) + (local $$cmp121$i i32) + (local $$cmp123$i i32) + (local $$cmp124$i$i i32) + (local $$cmp126$i i32) + (local $$cmp127$i i32) + (local $$cmp128 i32) + (local $$cmp128$i i32) + (local $$cmp128$i$i i32) + (local $$cmp130$i i32) + (local $$cmp133$i i32) + (local $$cmp133$i$196 i32) + (local $$cmp133$i$i i32) + (local $$cmp135$i i32) + (local $$cmp137$i i32) + (local $$cmp137$i$197 i32) + (local $$cmp137$i$i i32) + (local $$cmp138$i i32) + (local $$cmp139 i32) + (local $$cmp140$i i32) + (local $$cmp141$not$i i32) + (local $$cmp142$i i32) + (local $$cmp144$i$i i32) + (local $$cmp146 i32) + (local $$cmp15 i32) + (local $$cmp15$i i32) + (local $$cmp151$i i32) + (local $$cmp152$i i32) + (local $$cmp153$i$i i32) + (local $$cmp155$i i32) + (local $$cmp156 i32) + (local $$cmp156$i i32) + (local $$cmp156$i$i i32) + (local $$cmp157$i i32) + (local $$cmp159$i i32) + (local $$cmp159$i$199 i32) + (local $$cmp16 i32) + (local $$cmp160$i$i i32) + (local $$cmp162 i32) + (local $$cmp162$i i32) + (local $$cmp162$i$200 i32) + (local $$cmp166$i i32) + (local $$cmp168$i$i i32) + (local $$cmp171$i i32) + (local $$cmp172$i$i i32) + (local $$cmp174$i i32) + (local $$cmp180$i i32) + (local $$cmp185$i i32) + (local $$cmp185$i$i i32) + (local $$cmp186 i32) + (local $$cmp186$i i32) + (local $$cmp189$i$i i32) + (local $$cmp19$i i32) + (local $$cmp190$i i32) + (local $$cmp191$i i32) + (local $$cmp198$i i32) + (local $$cmp2$i$i i32) + (local $$cmp2$i$i$i i32) + (local $$cmp20$i$i i32) + (local $$cmp203$i i32) + (local $$cmp205$i i32) + (local $$cmp208$i i32) + (local $$cmp209$i i32) + (local $$cmp21$i i32) + (local $$cmp215$i$i i32) + (local $$cmp217$i i32) + (local $$cmp218$i i32) + (local $$cmp221$i i32) + (local $$cmp224$i i32) + (local $$cmp228$i i32) + (local $$cmp229$i i32) + (local $$cmp233$i i32) + (local $$cmp236$i$i i32) + (local $$cmp24$i i32) + (local $$cmp24$i$i i32) + (local $$cmp246$i i32) + (local $$cmp250$i i32) + (local $$cmp254$i$i i32) + (local $$cmp257$i i32) + (local $$cmp258$i$i i32) + (local $$cmp26$i i32) + (local $$cmp265$i i32) + (local $$cmp27$i$i i32) + (local $$cmp28$i i32) + (local $$cmp28$i$i i32) + (local $$cmp284$i i32) + (local $$cmp29 i32) + (local $$cmp3$i$i i32) + (local $$cmp301$i i32) + (local $$cmp306$i$i i32) + (local $$cmp31 i32) + (local $$cmp319$i i32) + (local $$cmp319$i$i i32) + (local $$cmp32$i i32) + (local $$cmp32$i$185 i32) + (local $$cmp323$i i32) + (local $$cmp327$i$i i32) + (local $$cmp33$i i32) + (local $$cmp332$i$i i32) + (local $$cmp34$i i32) + (local $$cmp34$i$i i32) + (local $$cmp35$i i32) + (local $$cmp350$i$i i32) + (local $$cmp36$i i32) + (local $$cmp36$i$i i32) + (local $$cmp374$i i32) + (local $$cmp38$i i32) + (local $$cmp38$i$i i32) + (local $$cmp388$i i32) + (local $$cmp396$i i32) + (local $$cmp40$i i32) + (local $$cmp401$i i32) + (local $$cmp41$i$i i32) + (local $$cmp42$i$i i32) + (local $$cmp422$i i32) + (local $$cmp43$i i32) + (local $$cmp44$i$i i32) + (local $$cmp45$i i32) + (local $$cmp45$i$155 i32) + (local $$cmp46$i i32) + (local $$cmp46$i$49$i i32) + (local $$cmp46$i$i i32) + (local $$cmp48$i i32) + (local $$cmp49$i i32) + (local $$cmp5 i32) + (local $$cmp51$i i32) + (local $$cmp54$i$i i32) + (local $$cmp55$i i32) + (local $$cmp55$i$187 i32) + (local $$cmp57$i i32) + (local $$cmp57$i$188 i32) + (local $$cmp57$i$i i32) + (local $$cmp59$i$i i32) + (local $$cmp60$i i32) + (local $$cmp60$i$i i32) + (local $$cmp62$i i32) + (local $$cmp63$i i32) + (local $$cmp63$i$i i32) + (local $$cmp65$i i32) + (local $$cmp66$i i32) + (local $$cmp66$i$190 i32) + (local $$cmp69$i i32) + (local $$cmp7$i$i i32) + (local $$cmp70 i32) + (local $$cmp72$i i32) + (local $$cmp75$i$i i32) + (local $$cmp76 i32) + (local $$cmp76$i i32) + (local $$cmp79 i32) + (local $$cmp81$i i32) + (local $$cmp81$i$191 i32) + (local $$cmp81$i$i i32) + (local $$cmp83$i$i i32) + (local $$cmp85$i i32) + (local $$cmp86$i$i i32) + (local $$cmp89$i i32) + (local $$cmp9$i$i i32) + (local $$cmp90$i i32) + (local $$cmp91$i i32) + (local $$cmp93$i i32) + (local $$cmp95$i i32) + (local $$cmp96$i i32) + (local $$cmp97$7$i i32) + (local $$cmp97$i i32) + (local $$cmp97$i$i i32) + (local $$cmp99 i32) + (local $$cond i32) + (local $$cond$i i32) + (local $$cond$i$16$i i32) + (local $$cond$i$25$i i32) + (local $$cond$i$36$i i32) + (local $$cond$i$i i32) + (local $$cond$i$i$i i32) + (local $$cond$v$0$i i32) + (local $$cond115$i$i i32) + (local $$cond13$i$i i32) + (local $$cond15$i$i i32) + (local $$cond2$i i32) + (local $$cond2$i$i i32) + (local $$cond3$i i32) + (local $$cond315$i$i i32) + (local $$cond383$i i32) + (local $$cond4$i i32) + (local $$exitcond$i$i i32) + (local $$fd$i i32) + (local $$fd$i$164 i32) + (local $$fd$i$i i32) + (local $$fd103$i$i i32) + (local $$fd123 i32) + (local $$fd139$i i32) + (local $$fd140$i$i i32) + (local $$fd148$i$i i32) + (local $$fd160$i$i i32) + (local $$fd219$i i32) + (local $$fd247$i$i i32) + (local $$fd303$i$i i32) + (local $$fd312$i i32) + (local $$fd339$i$i i32) + (local $$fd344$i$i i32) + (local $$fd359$i$i i32) + (local $$fd371$i i32) + (local $$fd408$i i32) + (local $$fd416$i i32) + (local $$fd431$i i32) + (local $$fd50$i i32) + (local $$fd54$i$i i32) + (local $$fd59$i$i i32) + (local $$fd68$pre$phi$i$iZ2D i32) + (local $$fd69 i32) + (local $$fd78$i$i i32) + (local $$fd85$i$i i32) + (local $$fd9 i32) + (local $$head i32) + (local $$head$i i32) + (local $$head$i$154 i32) + (local $$head$i$17$i i32) + (local $$head$i$29$i i32) + (local $$head$i$42$i i32) + (local $$head$i$i i32) + (local $$head$i$i$i i32) + (local $$head118$i$i i32) + (local $$head168 i32) + (local $$head173 i32) + (local $$head177 i32) + (local $$head179 i32) + (local $$head179$i i32) + (local $$head182$i i32) + (local $$head187$i i32) + (local $$head189$i i32) + (local $$head195 i32) + (local $$head198 i32) + (local $$head208$i$i i32) + (local $$head211$i$i i32) + (local $$head23$i$i i32) + (local $$head25 i32) + (local $$head265$i i32) + (local $$head268$i i32) + (local $$head271$i i32) + (local $$head274$i i32) + (local $$head279$i i32) + (local $$head281$i i32) + (local $$head29$i i32) + (local $$head29$i$i i32) + (local $$head317$i$i i32) + (local $$head32$i$i i32) + (local $$head34$i$i i32) + (local $$head386$i i32) + (local $$head7$i$31$i i32) + (local $$head7$i$i i32) + (local $$head7$i$i$i i32) + (local $$head94 i32) + (local $$head97 i32) + (local $$head99$i i32) + (local $$i$01$i$i i32) + (local $$idx$0$i i32) + (local $$inc$i$i i32) + (local $$index$i i32) + (local $$index$i$172 i32) + (local $$index$i$54$i i32) + (local $$index$i$i i32) + (local $$index288$i$i i32) + (local $$index356$i i32) + (local $$nb$0 i32) + (local $$neg i32) + (local $$neg$i i32) + (local $$neg$i$173 i32) + (local $$neg$i$182 i32) + (local $$neg$i$i i32) + (local $$neg103$i i32) + (local $$neg13 i32) + (local $$neg132$i$i i32) + (local $$neg48$i i32) + (local $$neg73 i32) + (local $$next$i i32) + (local $$next$i$i i32) + (local $$next$i$i$i i32) + (local $$next231$i i32) + (local $$not$cmp150$i$i i32) + (local $$not$cmp346$i$i i32) + (local $$not$cmp418$i i32) + (local $$oldfirst$0$i$i i32) + (local $$or$cond$i i32) + (local $$or$cond$i$189 i32) + (local $$or$cond1$i i32) + (local $$or$cond1$i$184 i32) + (local $$or$cond2$i i32) + (local $$or$cond3$i i32) + (local $$or$cond4$i i32) + (local $$or$cond5$i i32) + (local $$or$cond7$i i32) + (local $$or$cond8$i i32) + (local $$or$cond98$i i32) + (local $$or$i i32) + (local $$or$i$195 i32) + (local $$or$i$28$i i32) + (local $$or$i$i i32) + (local $$or$i$i$i i32) + (local $$or101$i$i i32) + (local $$or110 i32) + (local $$or167 i32) + (local $$or172 i32) + (local $$or176 i32) + (local $$or178$i i32) + (local $$or180 i32) + (local $$or183$i i32) + (local $$or186$i i32) + (local $$or188$i i32) + (local $$or19$i$i i32) + (local $$or194 i32) + (local $$or197 i32) + (local $$or204$i i32) + (local $$or210$i$i i32) + (local $$or22$i$i i32) + (local $$or23 i32) + (local $$or232$i$i i32) + (local $$or26 i32) + (local $$or264$i i32) + (local $$or267$i i32) + (local $$or270$i i32) + (local $$or275$i i32) + (local $$or278$i i32) + (local $$or28$i$i i32) + (local $$or280$i i32) + (local $$or297$i i32) + (local $$or300$i$i i32) + (local $$or33$i$i i32) + (local $$or368$i i32) + (local $$or40 i32) + (local $$or44$i$i i32) + (local $$or93 i32) + (local $$or96 i32) + (local $$p$0$i$i i32) + (local $$parent$i i32) + (local $$parent$i$162 i32) + (local $$parent$i$51$i i32) + (local $$parent$i$i i32) + (local $$parent135$i i32) + (local $$parent138$i$i i32) + (local $$parent149$i i32) + (local $$parent162$i$i i32) + (local $$parent165$i$i i32) + (local $$parent166$i i32) + (local $$parent179$i$i i32) + (local $$parent196$i$i i32) + (local $$parent226$i i32) + (local $$parent240$i i32) + (local $$parent257$i i32) + (local $$parent301$i$i i32) + (local $$parent337$i$i i32) + (local $$parent361$i$i i32) + (local $$parent369$i i32) + (local $$parent406$i i32) + (local $$parent433$i i32) + (local $$qsize$0$i$i i32) + (local $$retval$0 i32) + (local $$rsize$0$i i32) + (local $$rsize$0$i$152 i32) + (local $$rsize$0$i$lcssa i32) + (local $$rsize$1$i i32) + (local $$rsize$3$i i32) + (local $$rsize$4$lcssa$i i32) + (local $$rsize$49$i i32) + (local $$rst$0$i i32) + (local $$rst$1$i i32) + (local $$sflags193$i i32) + (local $$sflags235$i i32) + (local $$shl i32) + (local $$shl$i i32) + (local $$shl$i$144 i32) + (local $$shl$i$19$i i32) + (local $$shl$i$47$i i32) + (local $$shl$i$i i32) + (local $$shl102 i32) + (local $$shl105 i32) + (local $$shl116$i$i i32) + (local $$shl12 i32) + (local $$shl127$i$i i32) + (local $$shl131$i$i i32) + (local $$shl15$i i32) + (local $$shl18$i i32) + (local $$shl192$i i32) + (local $$shl195$i i32) + (local $$shl198$i i32) + (local $$shl22 i32) + (local $$shl221$i$i i32) + (local $$shl226$i$i i32) + (local $$shl265$i$i i32) + (local $$shl270$i$i i32) + (local $$shl276$i$i i32) + (local $$shl279$i$i i32) + (local $$shl288$i i32) + (local $$shl291$i i32) + (local $$shl294$i$i i32) + (local $$shl31$i i32) + (local $$shl316$i$i i32) + (local $$shl326$i$i i32) + (local $$shl333$i i32) + (local $$shl338$i i32) + (local $$shl344$i i32) + (local $$shl347$i i32) + (local $$shl35 i32) + (local $$shl362$i i32) + (local $$shl37 i32) + (local $$shl384$i i32) + (local $$shl39$i$i i32) + (local $$shl395$i i32) + (local $$shl48$i$i i32) + (local $$shl52$i i32) + (local $$shl60$i i32) + (local $$shl65 i32) + (local $$shl70$i$i i32) + (local $$shl72 i32) + (local $$shl75$i$i i32) + (local $$shl81$i$i i32) + (local $$shl84$i$i i32) + (local $$shl9$i i32) + (local $$shl90 i32) + (local $$shl95$i$i i32) + (local $$shr i32) + (local $$shr$i i32) + (local $$shr$i$139 i32) + (local $$shr$i$45$i i32) + (local $$shr$i$i i32) + (local $$shr101 i32) + (local $$shr11$i i32) + (local $$shr11$i$147 i32) + (local $$shr110$i$i i32) + (local $$shr12$i i32) + (local $$shr123$i$i i32) + (local $$shr15$i i32) + (local $$shr16$i i32) + (local $$shr16$i$148 i32) + (local $$shr19$i i32) + (local $$shr194$i i32) + (local $$shr20$i i32) + (local $$shr214$i$i i32) + (local $$shr253$i$i i32) + (local $$shr263$i$i i32) + (local $$shr267$i$i i32) + (local $$shr27$i i32) + (local $$shr272$i$i i32) + (local $$shr277$i$i i32) + (local $$shr281$i$i i32) + (local $$shr283$i i32) + (local $$shr3 i32) + (local $$shr310$i$i i32) + (local $$shr318$i i32) + (local $$shr322$i$i i32) + (local $$shr330$i i32) + (local $$shr335$i i32) + (local $$shr340$i i32) + (local $$shr345$i i32) + (local $$shr349$i i32) + (local $$shr378$i i32) + (local $$shr391$i i32) + (local $$shr4$i i32) + (local $$shr41$i i32) + (local $$shr45 i32) + (local $$shr47 i32) + (local $$shr48 i32) + (local $$shr5$i i32) + (local $$shr5$i$142 i32) + (local $$shr51 i32) + (local $$shr52 i32) + (local $$shr55 i32) + (local $$shr56 i32) + (local $$shr58$i$i i32) + (local $$shr59 i32) + (local $$shr60 i32) + (local $$shr63 i32) + (local $$shr68$i$i i32) + (local $$shr7$i i32) + (local $$shr7$i$145 i32) + (local $$shr72$i i32) + (local $$shr72$i$i i32) + (local $$shr75$i i32) + (local $$shr76$i i32) + (local $$shr77$i$i i32) + (local $$shr79$i i32) + (local $$shr8$i i32) + (local $$shr80$i i32) + (local $$shr82$i$i i32) + (local $$shr83$i i32) + (local $$shr84$i i32) + (local $$shr86$i$i i32) + (local $$shr87$i i32) + (local $$shr88$i i32) + (local $$shr91$i i32) + (local $$size$i$i i32) + (local $$size$i$i$i i32) + (local $$size$i$i$lcssa i32) + (local $$size188$i i32) + (local $$size188$i$lcssa i32) + (local $$size245$i i32) + (local $$sizebits$0$i i32) + (local $$sizebits$0$shl52$i i32) + (local $$sp$0$i$i i32) + (local $$sp$0$i$i$i i32) + (local $$sp$0108$i i32) + (local $$sp$0108$i$lcssa i32) + (local $$sp$1107$i i32) + (local $$sp$1107$i$lcssa i32) + (local $$ssize$0$i i32) + (local $$ssize$2$ph$i i32) + (local $$ssize$5$i i32) + (local $$sub i32) + (local $$sub$i i32) + (local $$sub$i$138 i32) + (local $$sub$i$181 i32) + (local $$sub$i$i i32) + (local $$sub$ptr$lhs$cast$i i32) + (local $$sub$ptr$lhs$cast$i$39$i i32) + (local $$sub$ptr$lhs$cast$i$i i32) + (local $$sub$ptr$rhs$cast$i i32) + (local $$sub$ptr$rhs$cast$i$40$i i32) + (local $$sub$ptr$rhs$cast$i$i i32) + (local $$sub$ptr$sub$i i32) + (local $$sub$ptr$sub$i$41$i i32) + (local $$sub$ptr$sub$i$i i32) + (local $$sub10$i i32) + (local $$sub101$i i32) + (local $$sub101$rsize$4$i i32) + (local $$sub112$i i32) + (local $$sub113$i$i i32) + (local $$sub118$i i32) + (local $$sub14$i i32) + (local $$sub16$i$i i32) + (local $$sub160 i32) + (local $$sub172$i i32) + (local $$sub18$i$i i32) + (local $$sub190 i32) + (local $$sub2$i i32) + (local $$sub22$i i32) + (local $$sub260$i i32) + (local $$sub262$i$i i32) + (local $$sub266$i$i i32) + (local $$sub271$i$i i32) + (local $$sub275$i$i i32) + (local $$sub30$i i32) + (local $$sub31$i i32) + (local $$sub31$rsize$0$i i32) + (local $$sub313$i$i i32) + (local $$sub329$i i32) + (local $$sub33$i i32) + (local $$sub334$i i32) + (local $$sub339$i i32) + (local $$sub343$i i32) + (local $$sub381$i i32) + (local $$sub4$i i32) + (local $$sub41$i i32) + (local $$sub42 i32) + (local $$sub44 i32) + (local $$sub5$i$27$i i32) + (local $$sub5$i$i i32) + (local $$sub5$i$i$i i32) + (local $$sub50$i i32) + (local $$sub6$i i32) + (local $$sub63$i i32) + (local $$sub67$i i32) + (local $$sub67$i$i i32) + (local $$sub70$i i32) + (local $$sub71$i$i i32) + (local $$sub76$i$i i32) + (local $$sub80$i$i i32) + (local $$sub91 i32) + (local $$sub99$i i32) + (local $$t$0$i i32) + (local $$t$0$i$151 i32) + (local $$t$2$i i32) + (local $$t$4$ph$i i32) + (local $$t$4$v$4$i i32) + (local $$t$48$i i32) + (local $$tbase$796$i i32) + (local $$tobool$i$i i32) + (local $$tobool107 i32) + (local $$tobool195$i i32) + (local $$tobool200$i i32) + (local $$tobool228$i$i i32) + (local $$tobool237$i i32) + (local $$tobool293$i i32) + (local $$tobool296$i$i i32) + (local $$tobool30$i i32) + (local $$tobool364$i i32) + (local $$tobool97$i$i i32) + (local $$tsize$795$i i32) + (local $$v$0$i i32) + (local $$v$0$i$153 i32) + (local $$v$0$i$lcssa i32) + (local $$v$1$i i32) + (local $$v$3$i i32) + (local $$v$4$lcssa$i i32) + (local $$v$410$i i32) + (local $$xor$i$i i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$cmp + (i32.lt_u + (get_local $$bytes) + (i32.const 245) + ) + ) + (block $do-once + (if + (get_local $$cmp) + (block + (set_local $$cmp1 + (i32.lt_u + (get_local $$bytes) + (i32.const 11) + ) + ) + (set_local $$add2 + (i32.add + (get_local $$bytes) + (i32.const 11) + ) + ) + (set_local $$and + (i32.and + (get_local $$add2) + (i32.const -8) + ) + ) + (set_local $$cond + (if (result i32) + (get_local $$cmp1) + (i32.const 16) + (get_local $$and) + ) + ) + (set_local $$shr + (i32.shr_u + (get_local $$cond) + (i32.const 3) + ) + ) + (set_local $$0 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shr3 + (i32.shr_u + (get_local $$0) + (get_local $$shr) + ) + ) + (set_local $$and4 + (i32.and + (get_local $$shr3) + (i32.const 3) + ) + ) + (set_local $$cmp5 + (i32.eq + (get_local $$and4) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp5) + ) + (block + (set_local $$neg + (i32.and + (get_local $$shr3) + (i32.const 1) + ) + ) + (set_local $$and7 + (i32.xor + (get_local $$neg) + (i32.const 1) + ) + ) + (set_local $$add8 + (i32.add + (get_local $$and7) + (get_local $$shr) + ) + ) + (set_local $$shl + (i32.shl + (get_local $$add8) + (i32.const 1) + ) + ) + (set_local $$arrayidx + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl) + (i32.const 2) + ) + ) + ) + (set_local $$1 + (i32.add + (get_local $$arrayidx) + (i32.const 8) + ) + ) + (set_local $$2 + (i32.load + (get_local $$1) + ) + ) + (set_local $$fd9 + (i32.add + (get_local $$2) + (i32.const 8) + ) + ) + (set_local $$3 + (i32.load + (get_local $$fd9) + ) + ) + (set_local $$cmp10 + (i32.eq + (get_local $$arrayidx) + (get_local $$3) + ) + ) + (block $do-once0 + (if + (get_local $$cmp10) + (block + (set_local $$shl12 + (i32.shl + (i32.const 1) + (get_local $$add8) + ) + ) + (set_local $$neg13 + (i32.xor + (get_local $$shl12) + (i32.const -1) + ) + ) + (set_local $$and14 + (i32.and + (get_local $$0) + (get_local $$neg13) + ) + ) + (i32.store + (i32.const 176) + (get_local $$and14) + ) + ) + (block + (set_local $$4 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp15 + (i32.lt_u + (get_local $$3) + (get_local $$4) + ) + ) + (if + (get_local $$cmp15) + (call $_abort) + ) + (set_local $$bk + (i32.add + (get_local $$3) + (i32.const 12) + ) + ) + (set_local $$5 + (i32.load + (get_local $$bk) + ) + ) + (set_local $$cmp16 + (i32.eq + (get_local $$5) + (get_local $$2) + ) + ) + (if + (get_local $$cmp16) + (block + (i32.store + (get_local $$bk) + (get_local $$arrayidx) + ) + (i32.store + (get_local $$1) + (get_local $$3) + ) + (br $do-once0) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$shl22 + (i32.shl + (get_local $$add8) + (i32.const 3) + ) + ) + (set_local $$or23 + (i32.or + (get_local $$shl22) + (i32.const 3) + ) + ) + (set_local $$head + (i32.add + (get_local $$2) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head) + (get_local $$or23) + ) + (set_local $$add$ptr + (i32.add + (get_local $$2) + (get_local $$shl22) + ) + ) + (set_local $$head25 + (i32.add + (get_local $$add$ptr) + (i32.const 4) + ) + ) + (set_local $$6 + (i32.load + (get_local $$head25) + ) + ) + (set_local $$or26 + (i32.or + (get_local $$6) + (i32.const 1) + ) + ) + (i32.store + (get_local $$head25) + (get_local $$or26) + ) + (set_local $$retval$0 + (get_local $$fd9) + ) + (return + (get_local $$retval$0) + ) + ) + ) + (set_local $$7 + (i32.load + (i32.const 184) + ) + ) + (set_local $$cmp29 + (i32.gt_u + (get_local $$cond) + (get_local $$7) + ) + ) + (if + (get_local $$cmp29) + (block + (set_local $$cmp31 + (i32.eq + (get_local $$shr3) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp31) + ) + (block + (set_local $$shl35 + (i32.shl + (get_local $$shr3) + (get_local $$shr) + ) + ) + (set_local $$shl37 + (i32.shl + (i32.const 2) + (get_local $$shr) + ) + ) + (set_local $$sub + (i32.sub + (i32.const 0) + (get_local $$shl37) + ) + ) + (set_local $$or40 + (i32.or + (get_local $$shl37) + (get_local $$sub) + ) + ) + (set_local $$and41 + (i32.and + (get_local $$shl35) + (get_local $$or40) + ) + ) + (set_local $$sub42 + (i32.sub + (i32.const 0) + (get_local $$and41) + ) + ) + (set_local $$and43 + (i32.and + (get_local $$and41) + (get_local $$sub42) + ) + ) + (set_local $$sub44 + (i32.add + (get_local $$and43) + (i32.const -1) + ) + ) + (set_local $$shr45 + (i32.shr_u + (get_local $$sub44) + (i32.const 12) + ) + ) + (set_local $$and46 + (i32.and + (get_local $$shr45) + (i32.const 16) + ) + ) + (set_local $$shr47 + (i32.shr_u + (get_local $$sub44) + (get_local $$and46) + ) + ) + (set_local $$shr48 + (i32.shr_u + (get_local $$shr47) + (i32.const 5) + ) + ) + (set_local $$and49 + (i32.and + (get_local $$shr48) + (i32.const 8) + ) + ) + (set_local $$add50 + (i32.or + (get_local $$and49) + (get_local $$and46) + ) + ) + (set_local $$shr51 + (i32.shr_u + (get_local $$shr47) + (get_local $$and49) + ) + ) + (set_local $$shr52 + (i32.shr_u + (get_local $$shr51) + (i32.const 2) + ) + ) + (set_local $$and53 + (i32.and + (get_local $$shr52) + (i32.const 4) + ) + ) + (set_local $$add54 + (i32.or + (get_local $$add50) + (get_local $$and53) + ) + ) + (set_local $$shr55 + (i32.shr_u + (get_local $$shr51) + (get_local $$and53) + ) + ) + (set_local $$shr56 + (i32.shr_u + (get_local $$shr55) + (i32.const 1) + ) + ) + (set_local $$and57 + (i32.and + (get_local $$shr56) + (i32.const 2) + ) + ) + (set_local $$add58 + (i32.or + (get_local $$add54) + (get_local $$and57) + ) + ) + (set_local $$shr59 + (i32.shr_u + (get_local $$shr55) + (get_local $$and57) + ) + ) + (set_local $$shr60 + (i32.shr_u + (get_local $$shr59) + (i32.const 1) + ) + ) + (set_local $$and61 + (i32.and + (get_local $$shr60) + (i32.const 1) + ) + ) + (set_local $$add62 + (i32.or + (get_local $$add58) + (get_local $$and61) + ) + ) + (set_local $$shr63 + (i32.shr_u + (get_local $$shr59) + (get_local $$and61) + ) + ) + (set_local $$add64 + (i32.add + (get_local $$add62) + (get_local $$shr63) + ) + ) + (set_local $$shl65 + (i32.shl + (get_local $$add64) + (i32.const 1) + ) + ) + (set_local $$arrayidx66 + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl65) + (i32.const 2) + ) + ) + ) + (set_local $$8 + (i32.add + (get_local $$arrayidx66) + (i32.const 8) + ) + ) + (set_local $$9 + (i32.load + (get_local $$8) + ) + ) + (set_local $$fd69 + (i32.add + (get_local $$9) + (i32.const 8) + ) + ) + (set_local $$10 + (i32.load + (get_local $$fd69) + ) + ) + (set_local $$cmp70 + (i32.eq + (get_local $$arrayidx66) + (get_local $$10) + ) + ) + (block $do-once2 + (if + (get_local $$cmp70) + (block + (set_local $$shl72 + (i32.shl + (i32.const 1) + (get_local $$add64) + ) + ) + (set_local $$neg73 + (i32.xor + (get_local $$shl72) + (i32.const -1) + ) + ) + (set_local $$and74 + (i32.and + (get_local $$0) + (get_local $$neg73) + ) + ) + (i32.store + (i32.const 176) + (get_local $$and74) + ) + (set_local $$13 + (get_local $$7) + ) + ) + (block + (set_local $$11 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp76 + (i32.lt_u + (get_local $$10) + (get_local $$11) + ) + ) + (if + (get_local $$cmp76) + (call $_abort) + ) + (set_local $$bk78 + (i32.add + (get_local $$10) + (i32.const 12) + ) + ) + (set_local $$12 + (i32.load + (get_local $$bk78) + ) + ) + (set_local $$cmp79 + (i32.eq + (get_local $$12) + (get_local $$9) + ) + ) + (if + (get_local $$cmp79) + (block + (i32.store + (get_local $$bk78) + (get_local $$arrayidx66) + ) + (i32.store + (get_local $$8) + (get_local $$10) + ) + (set_local $$$pre + (i32.load + (i32.const 184) + ) + ) + (set_local $$13 + (get_local $$$pre) + ) + (br $do-once2) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$shl90 + (i32.shl + (get_local $$add64) + (i32.const 3) + ) + ) + (set_local $$sub91 + (i32.sub + (get_local $$shl90) + (get_local $$cond) + ) + ) + (set_local $$or93 + (i32.or + (get_local $$cond) + (i32.const 3) + ) + ) + (set_local $$head94 + (i32.add + (get_local $$9) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head94) + (get_local $$or93) + ) + (set_local $$add$ptr95 + (i32.add + (get_local $$9) + (get_local $$cond) + ) + ) + (set_local $$or96 + (i32.or + (get_local $$sub91) + (i32.const 1) + ) + ) + (set_local $$head97 + (i32.add + (get_local $$add$ptr95) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head97) + (get_local $$or96) + ) + (set_local $$add$ptr98 + (i32.add + (get_local $$add$ptr95) + (get_local $$sub91) + ) + ) + (i32.store + (get_local $$add$ptr98) + (get_local $$sub91) + ) + (set_local $$cmp99 + (i32.eq + (get_local $$13) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp99) + ) + (block + (set_local $$14 + (i32.load + (i32.const 196) + ) + ) + (set_local $$shr101 + (i32.shr_u + (get_local $$13) + (i32.const 3) + ) + ) + (set_local $$shl102 + (i32.shl + (get_local $$shr101) + (i32.const 1) + ) + ) + (set_local $$arrayidx103 + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl102) + (i32.const 2) + ) + ) + ) + (set_local $$15 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shl105 + (i32.shl + (i32.const 1) + (get_local $$shr101) + ) + ) + (set_local $$and106 + (i32.and + (get_local $$15) + (get_local $$shl105) + ) + ) + (set_local $$tobool107 + (i32.eq + (get_local $$and106) + (i32.const 0) + ) + ) + (if + (get_local $$tobool107) + (block + (set_local $$or110 + (i32.or + (get_local $$15) + (get_local $$shl105) + ) + ) + (i32.store + (i32.const 176) + (get_local $$or110) + ) + (set_local $$$pre241 + (i32.add + (get_local $$arrayidx103) + (i32.const 8) + ) + ) + (set_local $$$pre$phiZ2D + (get_local $$$pre241) + ) + (set_local $$F104$0 + (get_local $$arrayidx103) + ) + ) + (block + (set_local $$16 + (i32.add + (get_local $$arrayidx103) + (i32.const 8) + ) + ) + (set_local $$17 + (i32.load + (get_local $$16) + ) + ) + (set_local $$18 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp113 + (i32.lt_u + (get_local $$17) + (get_local $$18) + ) + ) + (if + (get_local $$cmp113) + (call $_abort) + (block + (set_local $$$pre$phiZ2D + (get_local $$16) + ) + (set_local $$F104$0 + (get_local $$17) + ) + ) + ) + ) + ) + (i32.store + (get_local $$$pre$phiZ2D) + (get_local $$14) + ) + (set_local $$bk122 + (i32.add + (get_local $$F104$0) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk122) + (get_local $$14) + ) + (set_local $$fd123 + (i32.add + (get_local $$14) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd123) + (get_local $$F104$0) + ) + (set_local $$bk124 + (i32.add + (get_local $$14) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk124) + (get_local $$arrayidx103) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $$sub91) + ) + (i32.store + (i32.const 196) + (get_local $$add$ptr95) + ) + (set_local $$retval$0 + (get_local $$fd69) + ) + (return + (get_local $$retval$0) + ) + ) + ) + (set_local $$19 + (i32.load + (i32.const 180) + ) + ) + (set_local $$cmp128 + (i32.eq + (get_local $$19) + (i32.const 0) + ) + ) + (if + (get_local $$cmp128) + (set_local $$nb$0 + (get_local $$cond) + ) + (block + (set_local $$sub$i + (i32.sub + (i32.const 0) + (get_local $$19) + ) + ) + (set_local $$and$i + (i32.and + (get_local $$19) + (get_local $$sub$i) + ) + ) + (set_local $$sub2$i + (i32.add + (get_local $$and$i) + (i32.const -1) + ) + ) + (set_local $$shr$i + (i32.shr_u + (get_local $$sub2$i) + (i32.const 12) + ) + ) + (set_local $$and3$i + (i32.and + (get_local $$shr$i) + (i32.const 16) + ) + ) + (set_local $$shr4$i + (i32.shr_u + (get_local $$sub2$i) + (get_local $$and3$i) + ) + ) + (set_local $$shr5$i + (i32.shr_u + (get_local $$shr4$i) + (i32.const 5) + ) + ) + (set_local $$and6$i + (i32.and + (get_local $$shr5$i) + (i32.const 8) + ) + ) + (set_local $$add$i + (i32.or + (get_local $$and6$i) + (get_local $$and3$i) + ) + ) + (set_local $$shr7$i + (i32.shr_u + (get_local $$shr4$i) + (get_local $$and6$i) + ) + ) + (set_local $$shr8$i + (i32.shr_u + (get_local $$shr7$i) + (i32.const 2) + ) + ) + (set_local $$and9$i + (i32.and + (get_local $$shr8$i) + (i32.const 4) + ) + ) + (set_local $$add10$i + (i32.or + (get_local $$add$i) + (get_local $$and9$i) + ) + ) + (set_local $$shr11$i + (i32.shr_u + (get_local $$shr7$i) + (get_local $$and9$i) + ) + ) + (set_local $$shr12$i + (i32.shr_u + (get_local $$shr11$i) + (i32.const 1) + ) + ) + (set_local $$and13$i + (i32.and + (get_local $$shr12$i) + (i32.const 2) + ) + ) + (set_local $$add14$i + (i32.or + (get_local $$add10$i) + (get_local $$and13$i) + ) + ) + (set_local $$shr15$i + (i32.shr_u + (get_local $$shr11$i) + (get_local $$and13$i) + ) + ) + (set_local $$shr16$i + (i32.shr_u + (get_local $$shr15$i) + (i32.const 1) + ) + ) + (set_local $$and17$i + (i32.and + (get_local $$shr16$i) + (i32.const 1) + ) + ) + (set_local $$add18$i + (i32.or + (get_local $$add14$i) + (get_local $$and17$i) + ) + ) + (set_local $$shr19$i + (i32.shr_u + (get_local $$shr15$i) + (get_local $$and17$i) + ) + ) + (set_local $$add20$i + (i32.add + (get_local $$add18$i) + (get_local $$shr19$i) + ) + ) + (set_local $$arrayidx$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$add20$i) + (i32.const 2) + ) + ) + ) + (set_local $$20 + (i32.load + (get_local $$arrayidx$i) + ) + ) + (set_local $$head$i + (i32.add + (get_local $$20) + (i32.const 4) + ) + ) + (set_local $$21 + (i32.load + (get_local $$head$i) + ) + ) + (set_local $$and21$i + (i32.and + (get_local $$21) + (i32.const -8) + ) + ) + (set_local $$sub22$i + (i32.sub + (get_local $$and21$i) + (get_local $$cond) + ) + ) + (set_local $$rsize$0$i + (get_local $$sub22$i) + ) + (set_local $$t$0$i + (get_local $$20) + ) + (set_local $$v$0$i + (get_local $$20) + ) + (loop $while-in + (block $while-out + (set_local $$arrayidx23$i + (i32.add + (get_local $$t$0$i) + (i32.const 16) + ) + ) + (set_local $$22 + (i32.load + (get_local $$arrayidx23$i) + ) + ) + (set_local $$cmp$i + (i32.eq + (get_local $$22) + (i32.const 0) + ) + ) + (if + (get_local $$cmp$i) + (block + (set_local $$arrayidx27$i + (i32.add + (get_local $$t$0$i) + (i32.const 20) + ) + ) + (set_local $$23 + (i32.load + (get_local $$arrayidx27$i) + ) + ) + (set_local $$cmp28$i + (i32.eq + (get_local $$23) + (i32.const 0) + ) + ) + (if + (get_local $$cmp28$i) + (block + (set_local $$rsize$0$i$lcssa + (get_local $$rsize$0$i) + ) + (set_local $$v$0$i$lcssa + (get_local $$v$0$i) + ) + (br $while-out) + ) + (set_local $$cond4$i + (get_local $$23) + ) + ) + ) + (set_local $$cond4$i + (get_local $$22) + ) + ) + (set_local $$head29$i + (i32.add + (get_local $$cond4$i) + (i32.const 4) + ) + ) + (set_local $$24 + (i32.load + (get_local $$head29$i) + ) + ) + (set_local $$and30$i + (i32.and + (get_local $$24) + (i32.const -8) + ) + ) + (set_local $$sub31$i + (i32.sub + (get_local $$and30$i) + (get_local $$cond) + ) + ) + (set_local $$cmp32$i + (i32.lt_u + (get_local $$sub31$i) + (get_local $$rsize$0$i) + ) + ) + (set_local $$sub31$rsize$0$i + (if (result i32) + (get_local $$cmp32$i) + (get_local $$sub31$i) + (get_local $$rsize$0$i) + ) + ) + (set_local $$cond$v$0$i + (if (result i32) + (get_local $$cmp32$i) + (get_local $$cond4$i) + (get_local $$v$0$i) + ) + ) + (set_local $$rsize$0$i + (get_local $$sub31$rsize$0$i) + ) + (set_local $$t$0$i + (get_local $$cond4$i) + ) + (set_local $$v$0$i + (get_local $$cond$v$0$i) + ) + (br $while-in) + ) + ) + (set_local $$25 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp33$i + (i32.lt_u + (get_local $$v$0$i$lcssa) + (get_local $$25) + ) + ) + (if + (get_local $$cmp33$i) + (call $_abort) + ) + (set_local $$add$ptr$i + (i32.add + (get_local $$v$0$i$lcssa) + (get_local $$cond) + ) + ) + (set_local $$cmp35$i + (i32.lt_u + (get_local $$v$0$i$lcssa) + (get_local $$add$ptr$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp35$i) + ) + (call $_abort) + ) + (set_local $$parent$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 24) + ) + ) + (set_local $$26 + (i32.load + (get_local $$parent$i) + ) + ) + (set_local $$bk$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 12) + ) + ) + (set_local $$27 + (i32.load + (get_local $$bk$i) + ) + ) + (set_local $$cmp40$i + (i32.eq + (get_local $$27) + (get_local $$v$0$i$lcssa) + ) + ) + (block $do-once4 + (if + (get_local $$cmp40$i) + (block + (set_local $$arrayidx61$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 20) + ) + ) + (set_local $$31 + (i32.load + (get_local $$arrayidx61$i) + ) + ) + (set_local $$cmp62$i + (i32.eq + (get_local $$31) + (i32.const 0) + ) + ) + (if + (get_local $$cmp62$i) + (block + (set_local $$arrayidx65$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 16) + ) + ) + (set_local $$32 + (i32.load + (get_local $$arrayidx65$i) + ) + ) + (set_local $$cmp66$i + (i32.eq + (get_local $$32) + (i32.const 0) + ) + ) + (if + (get_local $$cmp66$i) + (block + (set_local $$R$3$i + (i32.const 0) + ) + (br $do-once4) + ) + (block + (set_local $$R$1$i + (get_local $$32) + ) + (set_local $$RP$1$i + (get_local $$arrayidx65$i) + ) + ) + ) + ) + (block + (set_local $$R$1$i + (get_local $$31) + ) + (set_local $$RP$1$i + (get_local $$arrayidx61$i) + ) + ) + ) + (loop $while-in7 + (block $while-out6 + (set_local $$arrayidx71$i + (i32.add + (get_local $$R$1$i) + (i32.const 20) + ) + ) + (set_local $$33 + (i32.load + (get_local $$arrayidx71$i) + ) + ) + (set_local $$cmp72$i + (i32.eq + (get_local $$33) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp72$i) + ) + (block + (set_local $$R$1$i + (get_local $$33) + ) + (set_local $$RP$1$i + (get_local $$arrayidx71$i) + ) + (br $while-in7) + ) + ) + (set_local $$arrayidx75$i + (i32.add + (get_local $$R$1$i) + (i32.const 16) + ) + ) + (set_local $$34 + (i32.load + (get_local $$arrayidx75$i) + ) + ) + (set_local $$cmp76$i + (i32.eq + (get_local $$34) + (i32.const 0) + ) + ) + (if + (get_local $$cmp76$i) + (block + (set_local $$R$1$i$lcssa + (get_local $$R$1$i) + ) + (set_local $$RP$1$i$lcssa + (get_local $$RP$1$i) + ) + (br $while-out6) + ) + (block + (set_local $$R$1$i + (get_local $$34) + ) + (set_local $$RP$1$i + (get_local $$arrayidx75$i) + ) + ) + ) + (br $while-in7) + ) + ) + (set_local $$cmp81$i + (i32.lt_u + (get_local $$RP$1$i$lcssa) + (get_local $$25) + ) + ) + (if + (get_local $$cmp81$i) + (call $_abort) + (block + (i32.store + (get_local $$RP$1$i$lcssa) + (i32.const 0) + ) + (set_local $$R$3$i + (get_local $$R$1$i$lcssa) + ) + (br $do-once4) + ) + ) + ) + (block + (set_local $$fd$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 8) + ) + ) + (set_local $$28 + (i32.load + (get_local $$fd$i) + ) + ) + (set_local $$cmp45$i + (i32.lt_u + (get_local $$28) + (get_local $$25) + ) + ) + (if + (get_local $$cmp45$i) + (call $_abort) + ) + (set_local $$bk47$i + (i32.add + (get_local $$28) + (i32.const 12) + ) + ) + (set_local $$29 + (i32.load + (get_local $$bk47$i) + ) + ) + (set_local $$cmp48$i + (i32.eq + (get_local $$29) + (get_local $$v$0$i$lcssa) + ) + ) + (if + (i32.eqz + (get_local $$cmp48$i) + ) + (call $_abort) + ) + (set_local $$fd50$i + (i32.add + (get_local $$27) + (i32.const 8) + ) + ) + (set_local $$30 + (i32.load + (get_local $$fd50$i) + ) + ) + (set_local $$cmp51$i + (i32.eq + (get_local $$30) + (get_local $$v$0$i$lcssa) + ) + ) + (if + (get_local $$cmp51$i) + (block + (i32.store + (get_local $$bk47$i) + (get_local $$27) + ) + (i32.store + (get_local $$fd50$i) + (get_local $$28) + ) + (set_local $$R$3$i + (get_local $$27) + ) + (br $do-once4) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$cmp90$i + (i32.eq + (get_local $$26) + (i32.const 0) + ) + ) + (block $do-once8 + (if + (i32.eqz + (get_local $$cmp90$i) + ) + (block + (set_local $$index$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 28) + ) + ) + (set_local $$35 + (i32.load + (get_local $$index$i) + ) + ) + (set_local $$arrayidx94$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$35) + (i32.const 2) + ) + ) + ) + (set_local $$36 + (i32.load + (get_local $$arrayidx94$i) + ) + ) + (set_local $$cmp95$i + (i32.eq + (get_local $$v$0$i$lcssa) + (get_local $$36) + ) + ) + (if + (get_local $$cmp95$i) + (block + (i32.store + (get_local $$arrayidx94$i) + (get_local $$R$3$i) + ) + (set_local $$cond2$i + (i32.eq + (get_local $$R$3$i) + (i32.const 0) + ) + ) + (if + (get_local $$cond2$i) + (block + (set_local $$shl$i + (i32.shl + (i32.const 1) + (get_local $$35) + ) + ) + (set_local $$neg$i + (i32.xor + (get_local $$shl$i) + (i32.const -1) + ) + ) + (set_local $$37 + (i32.load + (i32.const 180) + ) + ) + (set_local $$and103$i + (i32.and + (get_local $$37) + (get_local $$neg$i) + ) + ) + (i32.store + (i32.const 180) + (get_local $$and103$i) + ) + (br $do-once8) + ) + ) + ) + (block + (set_local $$38 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp107$i + (i32.lt_u + (get_local $$26) + (get_local $$38) + ) + ) + (if + (get_local $$cmp107$i) + (call $_abort) + ) + (set_local $$arrayidx113$i + (i32.add + (get_local $$26) + (i32.const 16) + ) + ) + (set_local $$39 + (i32.load + (get_local $$arrayidx113$i) + ) + ) + (set_local $$cmp114$i + (i32.eq + (get_local $$39) + (get_local $$v$0$i$lcssa) + ) + ) + (if + (get_local $$cmp114$i) + (i32.store + (get_local $$arrayidx113$i) + (get_local $$R$3$i) + ) + (block + (set_local $$arrayidx121$i + (i32.add + (get_local $$26) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx121$i) + (get_local $$R$3$i) + ) + ) + ) + (set_local $$cmp126$i + (i32.eq + (get_local $$R$3$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp126$i) + (br $do-once8) + ) + ) + ) + (set_local $$40 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp130$i + (i32.lt_u + (get_local $$R$3$i) + (get_local $$40) + ) + ) + (if + (get_local $$cmp130$i) + (call $_abort) + ) + (set_local $$parent135$i + (i32.add + (get_local $$R$3$i) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent135$i) + (get_local $$26) + ) + (set_local $$arrayidx137$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 16) + ) + ) + (set_local $$41 + (i32.load + (get_local $$arrayidx137$i) + ) + ) + (set_local $$cmp138$i + (i32.eq + (get_local $$41) + (i32.const 0) + ) + ) + (block $do-once10 + (if + (i32.eqz + (get_local $$cmp138$i) + ) + (block + (set_local $$cmp142$i + (i32.lt_u + (get_local $$41) + (get_local $$40) + ) + ) + (if + (get_local $$cmp142$i) + (call $_abort) + (block + (set_local $$arrayidx148$i + (i32.add + (get_local $$R$3$i) + (i32.const 16) + ) + ) + (i32.store + (get_local $$arrayidx148$i) + (get_local $$41) + ) + (set_local $$parent149$i + (i32.add + (get_local $$41) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent149$i) + (get_local $$R$3$i) + ) + (br $do-once10) + ) + ) + ) + ) + ) + (set_local $$arrayidx154$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 20) + ) + ) + (set_local $$42 + (i32.load + (get_local $$arrayidx154$i) + ) + ) + (set_local $$cmp155$i + (i32.eq + (get_local $$42) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp155$i) + ) + (block + (set_local $$43 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp159$i + (i32.lt_u + (get_local $$42) + (get_local $$43) + ) + ) + (if + (get_local $$cmp159$i) + (call $_abort) + (block + (set_local $$arrayidx165$i + (i32.add + (get_local $$R$3$i) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx165$i) + (get_local $$42) + ) + (set_local $$parent166$i + (i32.add + (get_local $$42) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent166$i) + (get_local $$R$3$i) + ) + (br $do-once8) + ) + ) + ) + ) + ) + ) + ) + (set_local $$cmp174$i + (i32.lt_u + (get_local $$rsize$0$i$lcssa) + (i32.const 16) + ) + ) + (if + (get_local $$cmp174$i) + (block + (set_local $$add177$i + (i32.add + (get_local $$rsize$0$i$lcssa) + (get_local $$cond) + ) + ) + (set_local $$or178$i + (i32.or + (get_local $$add177$i) + (i32.const 3) + ) + ) + (set_local $$head179$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head179$i) + (get_local $$or178$i) + ) + (set_local $$add$ptr181$i + (i32.add + (get_local $$v$0$i$lcssa) + (get_local $$add177$i) + ) + ) + (set_local $$head182$i + (i32.add + (get_local $$add$ptr181$i) + (i32.const 4) + ) + ) + (set_local $$44 + (i32.load + (get_local $$head182$i) + ) + ) + (set_local $$or183$i + (i32.or + (get_local $$44) + (i32.const 1) + ) + ) + (i32.store + (get_local $$head182$i) + (get_local $$or183$i) + ) + ) + (block + (set_local $$or186$i + (i32.or + (get_local $$cond) + (i32.const 3) + ) + ) + (set_local $$head187$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head187$i) + (get_local $$or186$i) + ) + (set_local $$or188$i + (i32.or + (get_local $$rsize$0$i$lcssa) + (i32.const 1) + ) + ) + (set_local $$head189$i + (i32.add + (get_local $$add$ptr$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head189$i) + (get_local $$or188$i) + ) + (set_local $$add$ptr190$i + (i32.add + (get_local $$add$ptr$i) + (get_local $$rsize$0$i$lcssa) + ) + ) + (i32.store + (get_local $$add$ptr190$i) + (get_local $$rsize$0$i$lcssa) + ) + (set_local $$45 + (i32.load + (i32.const 184) + ) + ) + (set_local $$cmp191$i + (i32.eq + (get_local $$45) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp191$i) + ) + (block + (set_local $$46 + (i32.load + (i32.const 196) + ) + ) + (set_local $$shr194$i + (i32.shr_u + (get_local $$45) + (i32.const 3) + ) + ) + (set_local $$shl195$i + (i32.shl + (get_local $$shr194$i) + (i32.const 1) + ) + ) + (set_local $$arrayidx196$i + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl195$i) + (i32.const 2) + ) + ) + ) + (set_local $$47 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shl198$i + (i32.shl + (i32.const 1) + (get_local $$shr194$i) + ) + ) + (set_local $$and199$i + (i32.and + (get_local $$47) + (get_local $$shl198$i) + ) + ) + (set_local $$tobool200$i + (i32.eq + (get_local $$and199$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool200$i) + (block + (set_local $$or204$i + (i32.or + (get_local $$47) + (get_local $$shl198$i) + ) + ) + (i32.store + (i32.const 176) + (get_local $$or204$i) + ) + (set_local $$$pre$i + (i32.add + (get_local $$arrayidx196$i) + (i32.const 8) + ) + ) + (set_local $$$pre$phi$iZ2D + (get_local $$$pre$i) + ) + (set_local $$F197$0$i + (get_local $$arrayidx196$i) + ) + ) + (block + (set_local $$48 + (i32.add + (get_local $$arrayidx196$i) + (i32.const 8) + ) + ) + (set_local $$49 + (i32.load + (get_local $$48) + ) + ) + (set_local $$50 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp208$i + (i32.lt_u + (get_local $$49) + (get_local $$50) + ) + ) + (if + (get_local $$cmp208$i) + (call $_abort) + (block + (set_local $$$pre$phi$iZ2D + (get_local $$48) + ) + (set_local $$F197$0$i + (get_local $$49) + ) + ) + ) + ) + ) + (i32.store + (get_local $$$pre$phi$iZ2D) + (get_local $$46) + ) + (set_local $$bk218$i + (i32.add + (get_local $$F197$0$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk218$i) + (get_local $$46) + ) + (set_local $$fd219$i + (i32.add + (get_local $$46) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd219$i) + (get_local $$F197$0$i) + ) + (set_local $$bk220$i + (i32.add + (get_local $$46) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk220$i) + (get_local $$arrayidx196$i) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $$rsize$0$i$lcssa) + ) + (i32.store + (i32.const 196) + (get_local $$add$ptr$i) + ) + ) + ) + (set_local $$add$ptr225$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 8) + ) + ) + (set_local $$retval$0 + (get_local $$add$ptr225$i) + ) + (return + (get_local $$retval$0) + ) + ) + ) + ) + (set_local $$nb$0 + (get_local $$cond) + ) + ) + ) + (block + (set_local $$cmp139 + (i32.gt_u + (get_local $$bytes) + (i32.const -65) + ) + ) + (if + (get_local $$cmp139) + (set_local $$nb$0 + (i32.const -1) + ) + (block + (set_local $$add144 + (i32.add + (get_local $$bytes) + (i32.const 11) + ) + ) + (set_local $$and145 + (i32.and + (get_local $$add144) + (i32.const -8) + ) + ) + (set_local $$51 + (i32.load + (i32.const 180) + ) + ) + (set_local $$cmp146 + (i32.eq + (get_local $$51) + (i32.const 0) + ) + ) + (if + (get_local $$cmp146) + (set_local $$nb$0 + (get_local $$and145) + ) + (block + (set_local $$sub$i$138 + (i32.sub + (i32.const 0) + (get_local $$and145) + ) + ) + (set_local $$shr$i$139 + (i32.shr_u + (get_local $$add144) + (i32.const 8) + ) + ) + (set_local $$cmp$i$140 + (i32.eq + (get_local $$shr$i$139) + (i32.const 0) + ) + ) + (if + (get_local $$cmp$i$140) + (set_local $$idx$0$i + (i32.const 0) + ) + (block + (set_local $$cmp1$i + (i32.gt_u + (get_local $$and145) + (i32.const 16777215) + ) + ) + (if + (get_local $$cmp1$i) + (set_local $$idx$0$i + (i32.const 31) + ) + (block + (set_local $$sub4$i + (i32.add + (get_local $$shr$i$139) + (i32.const 1048320) + ) + ) + (set_local $$shr5$i$142 + (i32.shr_u + (get_local $$sub4$i) + (i32.const 16) + ) + ) + (set_local $$and$i$143 + (i32.and + (get_local $$shr5$i$142) + (i32.const 8) + ) + ) + (set_local $$shl$i$144 + (i32.shl + (get_local $$shr$i$139) + (get_local $$and$i$143) + ) + ) + (set_local $$sub6$i + (i32.add + (get_local $$shl$i$144) + (i32.const 520192) + ) + ) + (set_local $$shr7$i$145 + (i32.shr_u + (get_local $$sub6$i) + (i32.const 16) + ) + ) + (set_local $$and8$i + (i32.and + (get_local $$shr7$i$145) + (i32.const 4) + ) + ) + (set_local $$add$i$146 + (i32.or + (get_local $$and8$i) + (get_local $$and$i$143) + ) + ) + (set_local $$shl9$i + (i32.shl + (get_local $$shl$i$144) + (get_local $$and8$i) + ) + ) + (set_local $$sub10$i + (i32.add + (get_local $$shl9$i) + (i32.const 245760) + ) + ) + (set_local $$shr11$i$147 + (i32.shr_u + (get_local $$sub10$i) + (i32.const 16) + ) + ) + (set_local $$and12$i + (i32.and + (get_local $$shr11$i$147) + (i32.const 2) + ) + ) + (set_local $$add13$i + (i32.or + (get_local $$add$i$146) + (get_local $$and12$i) + ) + ) + (set_local $$sub14$i + (i32.sub + (i32.const 14) + (get_local $$add13$i) + ) + ) + (set_local $$shl15$i + (i32.shl + (get_local $$shl9$i) + (get_local $$and12$i) + ) + ) + (set_local $$shr16$i$148 + (i32.shr_u + (get_local $$shl15$i) + (i32.const 15) + ) + ) + (set_local $$add17$i + (i32.add + (get_local $$sub14$i) + (get_local $$shr16$i$148) + ) + ) + (set_local $$shl18$i + (i32.shl + (get_local $$add17$i) + (i32.const 1) + ) + ) + (set_local $$add19$i + (i32.add + (get_local $$add17$i) + (i32.const 7) + ) + ) + (set_local $$shr20$i + (i32.shr_u + (get_local $$and145) + (get_local $$add19$i) + ) + ) + (set_local $$and21$i$149 + (i32.and + (get_local $$shr20$i) + (i32.const 1) + ) + ) + (set_local $$add22$i + (i32.or + (get_local $$and21$i$149) + (get_local $$shl18$i) + ) + ) + (set_local $$idx$0$i + (get_local $$add22$i) + ) + ) + ) + ) + ) + (set_local $$arrayidx$i$150 + (i32.add + (i32.const 480) + (i32.shl + (get_local $$idx$0$i) + (i32.const 2) + ) + ) + ) + (set_local $$52 + (i32.load + (get_local $$arrayidx$i$150) + ) + ) + (set_local $$cmp24$i + (i32.eq + (get_local $$52) + (i32.const 0) + ) + ) + (block $label$break$L123 + (if + (get_local $$cmp24$i) + (block + (set_local $$rsize$3$i + (get_local $$sub$i$138) + ) + (set_local $$t$2$i + (i32.const 0) + ) + (set_local $$v$3$i + (i32.const 0) + ) + (set_local $label + (i32.const 86) + ) + ) + (block + (set_local $$cmp26$i + (i32.eq + (get_local $$idx$0$i) + (i32.const 31) + ) + ) + (set_local $$shr27$i + (i32.shr_u + (get_local $$idx$0$i) + (i32.const 1) + ) + ) + (set_local $$sub30$i + (i32.sub + (i32.const 25) + (get_local $$shr27$i) + ) + ) + (set_local $$cond$i + (if (result i32) + (get_local $$cmp26$i) + (i32.const 0) + (get_local $$sub30$i) + ) + ) + (set_local $$shl31$i + (i32.shl + (get_local $$and145) + (get_local $$cond$i) + ) + ) + (set_local $$rsize$0$i$152 + (get_local $$sub$i$138) + ) + (set_local $$rst$0$i + (i32.const 0) + ) + (set_local $$sizebits$0$i + (get_local $$shl31$i) + ) + (set_local $$t$0$i$151 + (get_local $$52) + ) + (set_local $$v$0$i$153 + (i32.const 0) + ) + (loop $while-in14 + (block $while-out13 + (set_local $$head$i$154 + (i32.add + (get_local $$t$0$i$151) + (i32.const 4) + ) + ) + (set_local $$53 + (i32.load + (get_local $$head$i$154) + ) + ) + (set_local $$and32$i + (i32.and + (get_local $$53) + (i32.const -8) + ) + ) + (set_local $$sub33$i + (i32.sub + (get_local $$and32$i) + (get_local $$and145) + ) + ) + (set_local $$cmp34$i + (i32.lt_u + (get_local $$sub33$i) + (get_local $$rsize$0$i$152) + ) + ) + (if + (get_local $$cmp34$i) + (block + (set_local $$cmp36$i + (i32.eq + (get_local $$and32$i) + (get_local $$and145) + ) + ) + (if + (get_local $$cmp36$i) + (block + (set_local $$rsize$49$i + (get_local $$sub33$i) + ) + (set_local $$t$48$i + (get_local $$t$0$i$151) + ) + (set_local $$v$410$i + (get_local $$t$0$i$151) + ) + (set_local $label + (i32.const 90) + ) + (br $label$break$L123) + ) + (block + (set_local $$rsize$1$i + (get_local $$sub33$i) + ) + (set_local $$v$1$i + (get_local $$t$0$i$151) + ) + ) + ) + ) + (block + (set_local $$rsize$1$i + (get_local $$rsize$0$i$152) + ) + (set_local $$v$1$i + (get_local $$v$0$i$153) + ) + ) + ) + (set_local $$arrayidx40$i + (i32.add + (get_local $$t$0$i$151) + (i32.const 20) + ) + ) + (set_local $$54 + (i32.load + (get_local $$arrayidx40$i) + ) + ) + (set_local $$shr41$i + (i32.shr_u + (get_local $$sizebits$0$i) + (i32.const 31) + ) + ) + (set_local $$arrayidx44$i + (i32.add + (i32.add + (get_local $$t$0$i$151) + (i32.const 16) + ) + (i32.shl + (get_local $$shr41$i) + (i32.const 2) + ) + ) + ) + (set_local $$55 + (i32.load + (get_local $$arrayidx44$i) + ) + ) + (set_local $$cmp45$i$155 + (i32.eq + (get_local $$54) + (i32.const 0) + ) + ) + (set_local $$cmp46$i + (i32.eq + (get_local $$54) + (get_local $$55) + ) + ) + (set_local $$or$cond1$i + (i32.or + (get_local $$cmp45$i$155) + (get_local $$cmp46$i) + ) + ) + (set_local $$rst$1$i + (if (result i32) + (get_local $$or$cond1$i) + (get_local $$rst$0$i) + (get_local $$54) + ) + ) + (set_local $$cmp49$i + (i32.eq + (get_local $$55) + (i32.const 0) + ) + ) + (set_local $$56 + (i32.and + (get_local $$cmp49$i) + (i32.const 1) + ) + ) + (set_local $$shl52$i + (i32.xor + (get_local $$56) + (i32.const 1) + ) + ) + (set_local $$sizebits$0$shl52$i + (i32.shl + (get_local $$sizebits$0$i) + (get_local $$shl52$i) + ) + ) + (if + (get_local $$cmp49$i) + (block + (set_local $$rsize$3$i + (get_local $$rsize$1$i) + ) + (set_local $$t$2$i + (get_local $$rst$1$i) + ) + (set_local $$v$3$i + (get_local $$v$1$i) + ) + (set_local $label + (i32.const 86) + ) + (br $while-out13) + ) + (block + (set_local $$rsize$0$i$152 + (get_local $$rsize$1$i) + ) + (set_local $$rst$0$i + (get_local $$rst$1$i) + ) + (set_local $$sizebits$0$i + (get_local $$sizebits$0$shl52$i) + ) + (set_local $$t$0$i$151 + (get_local $$55) + ) + (set_local $$v$0$i$153 + (get_local $$v$1$i) + ) + ) + ) + (br $while-in14) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 86) + ) + (block + (set_local $$cmp55$i + (i32.eq + (get_local $$t$2$i) + (i32.const 0) + ) + ) + (set_local $$cmp57$i + (i32.eq + (get_local $$v$3$i) + (i32.const 0) + ) + ) + (set_local $$or$cond$i + (i32.and + (get_local $$cmp55$i) + (get_local $$cmp57$i) + ) + ) + (if + (get_local $$or$cond$i) + (block + (set_local $$shl60$i + (i32.shl + (i32.const 2) + (get_local $$idx$0$i) + ) + ) + (set_local $$sub63$i + (i32.sub + (i32.const 0) + (get_local $$shl60$i) + ) + ) + (set_local $$or$i + (i32.or + (get_local $$shl60$i) + (get_local $$sub63$i) + ) + ) + (set_local $$and64$i + (i32.and + (get_local $$51) + (get_local $$or$i) + ) + ) + (set_local $$cmp65$i + (i32.eq + (get_local $$and64$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp65$i) + (block + (set_local $$nb$0 + (get_local $$and145) + ) + (br $do-once) + ) + ) + (set_local $$sub67$i + (i32.sub + (i32.const 0) + (get_local $$and64$i) + ) + ) + (set_local $$and68$i + (i32.and + (get_local $$and64$i) + (get_local $$sub67$i) + ) + ) + (set_local $$sub70$i + (i32.add + (get_local $$and68$i) + (i32.const -1) + ) + ) + (set_local $$shr72$i + (i32.shr_u + (get_local $$sub70$i) + (i32.const 12) + ) + ) + (set_local $$and73$i + (i32.and + (get_local $$shr72$i) + (i32.const 16) + ) + ) + (set_local $$shr75$i + (i32.shr_u + (get_local $$sub70$i) + (get_local $$and73$i) + ) + ) + (set_local $$shr76$i + (i32.shr_u + (get_local $$shr75$i) + (i32.const 5) + ) + ) + (set_local $$and77$i + (i32.and + (get_local $$shr76$i) + (i32.const 8) + ) + ) + (set_local $$add78$i + (i32.or + (get_local $$and77$i) + (get_local $$and73$i) + ) + ) + (set_local $$shr79$i + (i32.shr_u + (get_local $$shr75$i) + (get_local $$and77$i) + ) + ) + (set_local $$shr80$i + (i32.shr_u + (get_local $$shr79$i) + (i32.const 2) + ) + ) + (set_local $$and81$i + (i32.and + (get_local $$shr80$i) + (i32.const 4) + ) + ) + (set_local $$add82$i + (i32.or + (get_local $$add78$i) + (get_local $$and81$i) + ) + ) + (set_local $$shr83$i + (i32.shr_u + (get_local $$shr79$i) + (get_local $$and81$i) + ) + ) + (set_local $$shr84$i + (i32.shr_u + (get_local $$shr83$i) + (i32.const 1) + ) + ) + (set_local $$and85$i + (i32.and + (get_local $$shr84$i) + (i32.const 2) + ) + ) + (set_local $$add86$i + (i32.or + (get_local $$add82$i) + (get_local $$and85$i) + ) + ) + (set_local $$shr87$i + (i32.shr_u + (get_local $$shr83$i) + (get_local $$and85$i) + ) + ) + (set_local $$shr88$i + (i32.shr_u + (get_local $$shr87$i) + (i32.const 1) + ) + ) + (set_local $$and89$i + (i32.and + (get_local $$shr88$i) + (i32.const 1) + ) + ) + (set_local $$add90$i + (i32.or + (get_local $$add86$i) + (get_local $$and89$i) + ) + ) + (set_local $$shr91$i + (i32.shr_u + (get_local $$shr87$i) + (get_local $$and89$i) + ) + ) + (set_local $$add92$i + (i32.add + (get_local $$add90$i) + (get_local $$shr91$i) + ) + ) + (set_local $$arrayidx94$i$156 + (i32.add + (i32.const 480) + (i32.shl + (get_local $$add92$i) + (i32.const 2) + ) + ) + ) + (set_local $$57 + (i32.load + (get_local $$arrayidx94$i$156) + ) + ) + (set_local $$t$4$ph$i + (get_local $$57) + ) + ) + (set_local $$t$4$ph$i + (get_local $$t$2$i) + ) + ) + (set_local $$cmp97$7$i + (i32.eq + (get_local $$t$4$ph$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp97$7$i) + (block + (set_local $$rsize$4$lcssa$i + (get_local $$rsize$3$i) + ) + (set_local $$v$4$lcssa$i + (get_local $$v$3$i) + ) + ) + (block + (set_local $$rsize$49$i + (get_local $$rsize$3$i) + ) + (set_local $$t$48$i + (get_local $$t$4$ph$i) + ) + (set_local $$v$410$i + (get_local $$v$3$i) + ) + (set_local $label + (i32.const 90) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 90) + ) + (loop $while-in16 + (block $while-out15 + (set_local $label + (i32.const 0) + ) + (set_local $$head99$i + (i32.add + (get_local $$t$48$i) + (i32.const 4) + ) + ) + (set_local $$58 + (i32.load + (get_local $$head99$i) + ) + ) + (set_local $$and100$i + (i32.and + (get_local $$58) + (i32.const -8) + ) + ) + (set_local $$sub101$i + (i32.sub + (get_local $$and100$i) + (get_local $$and145) + ) + ) + (set_local $$cmp102$i + (i32.lt_u + (get_local $$sub101$i) + (get_local $$rsize$49$i) + ) + ) + (set_local $$sub101$rsize$4$i + (if (result i32) + (get_local $$cmp102$i) + (get_local $$sub101$i) + (get_local $$rsize$49$i) + ) + ) + (set_local $$t$4$v$4$i + (if (result i32) + (get_local $$cmp102$i) + (get_local $$t$48$i) + (get_local $$v$410$i) + ) + ) + (set_local $$arrayidx106$i + (i32.add + (get_local $$t$48$i) + (i32.const 16) + ) + ) + (set_local $$59 + (i32.load + (get_local $$arrayidx106$i) + ) + ) + (set_local $$cmp107$i$157 + (i32.eq + (get_local $$59) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp107$i$157) + ) + (block + (set_local $$rsize$49$i + (get_local $$sub101$rsize$4$i) + ) + (set_local $$t$48$i + (get_local $$59) + ) + (set_local $$v$410$i + (get_local $$t$4$v$4$i) + ) + (set_local $label + (i32.const 90) + ) + (br $while-in16) + ) + ) + (set_local $$arrayidx113$i$159 + (i32.add + (get_local $$t$48$i) + (i32.const 20) + ) + ) + (set_local $$60 + (i32.load + (get_local $$arrayidx113$i$159) + ) + ) + (set_local $$cmp97$i + (i32.eq + (get_local $$60) + (i32.const 0) + ) + ) + (if + (get_local $$cmp97$i) + (block + (set_local $$rsize$4$lcssa$i + (get_local $$sub101$rsize$4$i) + ) + (set_local $$v$4$lcssa$i + (get_local $$t$4$v$4$i) + ) + (br $while-out15) + ) + (block + (set_local $$rsize$49$i + (get_local $$sub101$rsize$4$i) + ) + (set_local $$t$48$i + (get_local $$60) + ) + (set_local $$v$410$i + (get_local $$t$4$v$4$i) + ) + (set_local $label + (i32.const 90) + ) + ) + ) + (br $while-in16) + ) + ) + ) + (set_local $$cmp116$i + (i32.eq + (get_local $$v$4$lcssa$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp116$i) + (set_local $$nb$0 + (get_local $$and145) + ) + (block + (set_local $$61 + (i32.load + (i32.const 184) + ) + ) + (set_local $$sub118$i + (i32.sub + (get_local $$61) + (get_local $$and145) + ) + ) + (set_local $$cmp119$i + (i32.lt_u + (get_local $$rsize$4$lcssa$i) + (get_local $$sub118$i) + ) + ) + (if + (get_local $$cmp119$i) + (block + (set_local $$62 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp121$i + (i32.lt_u + (get_local $$v$4$lcssa$i) + (get_local $$62) + ) + ) + (if + (get_local $$cmp121$i) + (call $_abort) + ) + (set_local $$add$ptr$i$161 + (i32.add + (get_local $$v$4$lcssa$i) + (get_local $$and145) + ) + ) + (set_local $$cmp123$i + (i32.lt_u + (get_local $$v$4$lcssa$i) + (get_local $$add$ptr$i$161) + ) + ) + (if + (i32.eqz + (get_local $$cmp123$i) + ) + (call $_abort) + ) + (set_local $$parent$i$162 + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 24) + ) + ) + (set_local $$63 + (i32.load + (get_local $$parent$i$162) + ) + ) + (set_local $$bk$i$163 + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 12) + ) + ) + (set_local $$64 + (i32.load + (get_local $$bk$i$163) + ) + ) + (set_local $$cmp128$i + (i32.eq + (get_local $$64) + (get_local $$v$4$lcssa$i) + ) + ) + (block $do-once17 + (if + (get_local $$cmp128$i) + (block + (set_local $$arrayidx151$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 20) + ) + ) + (set_local $$68 + (i32.load + (get_local $$arrayidx151$i) + ) + ) + (set_local $$cmp152$i + (i32.eq + (get_local $$68) + (i32.const 0) + ) + ) + (if + (get_local $$cmp152$i) + (block + (set_local $$arrayidx155$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 16) + ) + ) + (set_local $$69 + (i32.load + (get_local $$arrayidx155$i) + ) + ) + (set_local $$cmp156$i + (i32.eq + (get_local $$69) + (i32.const 0) + ) + ) + (if + (get_local $$cmp156$i) + (block + (set_local $$R$3$i$171 + (i32.const 0) + ) + (br $do-once17) + ) + (block + (set_local $$R$1$i$168 + (get_local $$69) + ) + (set_local $$RP$1$i$167 + (get_local $$arrayidx155$i) + ) + ) + ) + ) + (block + (set_local $$R$1$i$168 + (get_local $$68) + ) + (set_local $$RP$1$i$167 + (get_local $$arrayidx151$i) + ) + ) + ) + (loop $while-in20 + (block $while-out19 + (set_local $$arrayidx161$i + (i32.add + (get_local $$R$1$i$168) + (i32.const 20) + ) + ) + (set_local $$70 + (i32.load + (get_local $$arrayidx161$i) + ) + ) + (set_local $$cmp162$i + (i32.eq + (get_local $$70) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp162$i) + ) + (block + (set_local $$R$1$i$168 + (get_local $$70) + ) + (set_local $$RP$1$i$167 + (get_local $$arrayidx161$i) + ) + (br $while-in20) + ) + ) + (set_local $$arrayidx165$i$169 + (i32.add + (get_local $$R$1$i$168) + (i32.const 16) + ) + ) + (set_local $$71 + (i32.load + (get_local $$arrayidx165$i$169) + ) + ) + (set_local $$cmp166$i + (i32.eq + (get_local $$71) + (i32.const 0) + ) + ) + (if + (get_local $$cmp166$i) + (block + (set_local $$R$1$i$168$lcssa + (get_local $$R$1$i$168) + ) + (set_local $$RP$1$i$167$lcssa + (get_local $$RP$1$i$167) + ) + (br $while-out19) + ) + (block + (set_local $$R$1$i$168 + (get_local $$71) + ) + (set_local $$RP$1$i$167 + (get_local $$arrayidx165$i$169) + ) + ) + ) + (br $while-in20) + ) + ) + (set_local $$cmp171$i + (i32.lt_u + (get_local $$RP$1$i$167$lcssa) + (get_local $$62) + ) + ) + (if + (get_local $$cmp171$i) + (call $_abort) + (block + (i32.store + (get_local $$RP$1$i$167$lcssa) + (i32.const 0) + ) + (set_local $$R$3$i$171 + (get_local $$R$1$i$168$lcssa) + ) + (br $do-once17) + ) + ) + ) + (block + (set_local $$fd$i$164 + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 8) + ) + ) + (set_local $$65 + (i32.load + (get_local $$fd$i$164) + ) + ) + (set_local $$cmp133$i + (i32.lt_u + (get_local $$65) + (get_local $$62) + ) + ) + (if + (get_local $$cmp133$i) + (call $_abort) + ) + (set_local $$bk136$i + (i32.add + (get_local $$65) + (i32.const 12) + ) + ) + (set_local $$66 + (i32.load + (get_local $$bk136$i) + ) + ) + (set_local $$cmp137$i + (i32.eq + (get_local $$66) + (get_local $$v$4$lcssa$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp137$i) + ) + (call $_abort) + ) + (set_local $$fd139$i + (i32.add + (get_local $$64) + (i32.const 8) + ) + ) + (set_local $$67 + (i32.load + (get_local $$fd139$i) + ) + ) + (set_local $$cmp140$i + (i32.eq + (get_local $$67) + (get_local $$v$4$lcssa$i) + ) + ) + (if + (get_local $$cmp140$i) + (block + (i32.store + (get_local $$bk136$i) + (get_local $$64) + ) + (i32.store + (get_local $$fd139$i) + (get_local $$65) + ) + (set_local $$R$3$i$171 + (get_local $$64) + ) + (br $do-once17) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$cmp180$i + (i32.eq + (get_local $$63) + (i32.const 0) + ) + ) + (block $do-once21 + (if + (i32.eqz + (get_local $$cmp180$i) + ) + (block + (set_local $$index$i$172 + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 28) + ) + ) + (set_local $$72 + (i32.load + (get_local $$index$i$172) + ) + ) + (set_local $$arrayidx184$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$72) + (i32.const 2) + ) + ) + ) + (set_local $$73 + (i32.load + (get_local $$arrayidx184$i) + ) + ) + (set_local $$cmp185$i + (i32.eq + (get_local $$v$4$lcssa$i) + (get_local $$73) + ) + ) + (if + (get_local $$cmp185$i) + (block + (i32.store + (get_local $$arrayidx184$i) + (get_local $$R$3$i$171) + ) + (set_local $$cond3$i + (i32.eq + (get_local $$R$3$i$171) + (i32.const 0) + ) + ) + (if + (get_local $$cond3$i) + (block + (set_local $$shl192$i + (i32.shl + (i32.const 1) + (get_local $$72) + ) + ) + (set_local $$neg$i$173 + (i32.xor + (get_local $$shl192$i) + (i32.const -1) + ) + ) + (set_local $$74 + (i32.load + (i32.const 180) + ) + ) + (set_local $$and194$i + (i32.and + (get_local $$74) + (get_local $$neg$i$173) + ) + ) + (i32.store + (i32.const 180) + (get_local $$and194$i) + ) + (br $do-once21) + ) + ) + ) + (block + (set_local $$75 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp198$i + (i32.lt_u + (get_local $$63) + (get_local $$75) + ) + ) + (if + (get_local $$cmp198$i) + (call $_abort) + ) + (set_local $$arrayidx204$i + (i32.add + (get_local $$63) + (i32.const 16) + ) + ) + (set_local $$76 + (i32.load + (get_local $$arrayidx204$i) + ) + ) + (set_local $$cmp205$i + (i32.eq + (get_local $$76) + (get_local $$v$4$lcssa$i) + ) + ) + (if + (get_local $$cmp205$i) + (i32.store + (get_local $$arrayidx204$i) + (get_local $$R$3$i$171) + ) + (block + (set_local $$arrayidx212$i + (i32.add + (get_local $$63) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx212$i) + (get_local $$R$3$i$171) + ) + ) + ) + (set_local $$cmp217$i + (i32.eq + (get_local $$R$3$i$171) + (i32.const 0) + ) + ) + (if + (get_local $$cmp217$i) + (br $do-once21) + ) + ) + ) + (set_local $$77 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp221$i + (i32.lt_u + (get_local $$R$3$i$171) + (get_local $$77) + ) + ) + (if + (get_local $$cmp221$i) + (call $_abort) + ) + (set_local $$parent226$i + (i32.add + (get_local $$R$3$i$171) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent226$i) + (get_local $$63) + ) + (set_local $$arrayidx228$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 16) + ) + ) + (set_local $$78 + (i32.load + (get_local $$arrayidx228$i) + ) + ) + (set_local $$cmp229$i + (i32.eq + (get_local $$78) + (i32.const 0) + ) + ) + (block $do-once23 + (if + (i32.eqz + (get_local $$cmp229$i) + ) + (block + (set_local $$cmp233$i + (i32.lt_u + (get_local $$78) + (get_local $$77) + ) + ) + (if + (get_local $$cmp233$i) + (call $_abort) + (block + (set_local $$arrayidx239$i + (i32.add + (get_local $$R$3$i$171) + (i32.const 16) + ) + ) + (i32.store + (get_local $$arrayidx239$i) + (get_local $$78) + ) + (set_local $$parent240$i + (i32.add + (get_local $$78) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent240$i) + (get_local $$R$3$i$171) + ) + (br $do-once23) + ) + ) + ) + ) + ) + (set_local $$arrayidx245$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 20) + ) + ) + (set_local $$79 + (i32.load + (get_local $$arrayidx245$i) + ) + ) + (set_local $$cmp246$i + (i32.eq + (get_local $$79) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp246$i) + ) + (block + (set_local $$80 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp250$i + (i32.lt_u + (get_local $$79) + (get_local $$80) + ) + ) + (if + (get_local $$cmp250$i) + (call $_abort) + (block + (set_local $$arrayidx256$i + (i32.add + (get_local $$R$3$i$171) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx256$i) + (get_local $$79) + ) + (set_local $$parent257$i + (i32.add + (get_local $$79) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent257$i) + (get_local $$R$3$i$171) + ) + (br $do-once21) + ) + ) + ) + ) + ) + ) + ) + (set_local $$cmp265$i + (i32.lt_u + (get_local $$rsize$4$lcssa$i) + (i32.const 16) + ) + ) + (block $do-once25 + (if + (get_local $$cmp265$i) + (block + (set_local $$add268$i + (i32.add + (get_local $$rsize$4$lcssa$i) + (get_local $$and145) + ) + ) + (set_local $$or270$i + (i32.or + (get_local $$add268$i) + (i32.const 3) + ) + ) + (set_local $$head271$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head271$i) + (get_local $$or270$i) + ) + (set_local $$add$ptr273$i + (i32.add + (get_local $$v$4$lcssa$i) + (get_local $$add268$i) + ) + ) + (set_local $$head274$i + (i32.add + (get_local $$add$ptr273$i) + (i32.const 4) + ) + ) + (set_local $$81 + (i32.load + (get_local $$head274$i) + ) + ) + (set_local $$or275$i + (i32.or + (get_local $$81) + (i32.const 1) + ) + ) + (i32.store + (get_local $$head274$i) + (get_local $$or275$i) + ) + ) + (block + (set_local $$or278$i + (i32.or + (get_local $$and145) + (i32.const 3) + ) + ) + (set_local $$head279$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head279$i) + (get_local $$or278$i) + ) + (set_local $$or280$i + (i32.or + (get_local $$rsize$4$lcssa$i) + (i32.const 1) + ) + ) + (set_local $$head281$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head281$i) + (get_local $$or280$i) + ) + (set_local $$add$ptr282$i + (i32.add + (get_local $$add$ptr$i$161) + (get_local $$rsize$4$lcssa$i) + ) + ) + (i32.store + (get_local $$add$ptr282$i) + (get_local $$rsize$4$lcssa$i) + ) + (set_local $$shr283$i + (i32.shr_u + (get_local $$rsize$4$lcssa$i) + (i32.const 3) + ) + ) + (set_local $$cmp284$i + (i32.lt_u + (get_local $$rsize$4$lcssa$i) + (i32.const 256) + ) + ) + (if + (get_local $$cmp284$i) + (block + (set_local $$shl288$i + (i32.shl + (get_local $$shr283$i) + (i32.const 1) + ) + ) + (set_local $$arrayidx289$i + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl288$i) + (i32.const 2) + ) + ) + ) + (set_local $$82 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shl291$i + (i32.shl + (i32.const 1) + (get_local $$shr283$i) + ) + ) + (set_local $$and292$i + (i32.and + (get_local $$82) + (get_local $$shl291$i) + ) + ) + (set_local $$tobool293$i + (i32.eq + (get_local $$and292$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool293$i) + (block + (set_local $$or297$i + (i32.or + (get_local $$82) + (get_local $$shl291$i) + ) + ) + (i32.store + (i32.const 176) + (get_local $$or297$i) + ) + (set_local $$$pre$i$177 + (i32.add + (get_local $$arrayidx289$i) + (i32.const 8) + ) + ) + (set_local $$$pre$phi$i$178Z2D + (get_local $$$pre$i$177) + ) + (set_local $$F290$0$i + (get_local $$arrayidx289$i) + ) + ) + (block + (set_local $$83 + (i32.add + (get_local $$arrayidx289$i) + (i32.const 8) + ) + ) + (set_local $$84 + (i32.load + (get_local $$83) + ) + ) + (set_local $$85 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp301$i + (i32.lt_u + (get_local $$84) + (get_local $$85) + ) + ) + (if + (get_local $$cmp301$i) + (call $_abort) + (block + (set_local $$$pre$phi$i$178Z2D + (get_local $$83) + ) + (set_local $$F290$0$i + (get_local $$84) + ) + ) + ) + ) + ) + (i32.store + (get_local $$$pre$phi$i$178Z2D) + (get_local $$add$ptr$i$161) + ) + (set_local $$bk311$i + (i32.add + (get_local $$F290$0$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk311$i) + (get_local $$add$ptr$i$161) + ) + (set_local $$fd312$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd312$i) + (get_local $$F290$0$i) + ) + (set_local $$bk313$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk313$i) + (get_local $$arrayidx289$i) + ) + (br $do-once25) + ) + ) + (set_local $$shr318$i + (i32.shr_u + (get_local $$rsize$4$lcssa$i) + (i32.const 8) + ) + ) + (set_local $$cmp319$i + (i32.eq + (get_local $$shr318$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp319$i) + (set_local $$I316$0$i + (i32.const 0) + ) + (block + (set_local $$cmp323$i + (i32.gt_u + (get_local $$rsize$4$lcssa$i) + (i32.const 16777215) + ) + ) + (if + (get_local $$cmp323$i) + (set_local $$I316$0$i + (i32.const 31) + ) + (block + (set_local $$sub329$i + (i32.add + (get_local $$shr318$i) + (i32.const 1048320) + ) + ) + (set_local $$shr330$i + (i32.shr_u + (get_local $$sub329$i) + (i32.const 16) + ) + ) + (set_local $$and331$i + (i32.and + (get_local $$shr330$i) + (i32.const 8) + ) + ) + (set_local $$shl333$i + (i32.shl + (get_local $$shr318$i) + (get_local $$and331$i) + ) + ) + (set_local $$sub334$i + (i32.add + (get_local $$shl333$i) + (i32.const 520192) + ) + ) + (set_local $$shr335$i + (i32.shr_u + (get_local $$sub334$i) + (i32.const 16) + ) + ) + (set_local $$and336$i + (i32.and + (get_local $$shr335$i) + (i32.const 4) + ) + ) + (set_local $$add337$i + (i32.or + (get_local $$and336$i) + (get_local $$and331$i) + ) + ) + (set_local $$shl338$i + (i32.shl + (get_local $$shl333$i) + (get_local $$and336$i) + ) + ) + (set_local $$sub339$i + (i32.add + (get_local $$shl338$i) + (i32.const 245760) + ) + ) + (set_local $$shr340$i + (i32.shr_u + (get_local $$sub339$i) + (i32.const 16) + ) + ) + (set_local $$and341$i + (i32.and + (get_local $$shr340$i) + (i32.const 2) + ) + ) + (set_local $$add342$i + (i32.or + (get_local $$add337$i) + (get_local $$and341$i) + ) + ) + (set_local $$sub343$i + (i32.sub + (i32.const 14) + (get_local $$add342$i) + ) + ) + (set_local $$shl344$i + (i32.shl + (get_local $$shl338$i) + (get_local $$and341$i) + ) + ) + (set_local $$shr345$i + (i32.shr_u + (get_local $$shl344$i) + (i32.const 15) + ) + ) + (set_local $$add346$i + (i32.add + (get_local $$sub343$i) + (get_local $$shr345$i) + ) + ) + (set_local $$shl347$i + (i32.shl + (get_local $$add346$i) + (i32.const 1) + ) + ) + (set_local $$add348$i + (i32.add + (get_local $$add346$i) + (i32.const 7) + ) + ) + (set_local $$shr349$i + (i32.shr_u + (get_local $$rsize$4$lcssa$i) + (get_local $$add348$i) + ) + ) + (set_local $$and350$i + (i32.and + (get_local $$shr349$i) + (i32.const 1) + ) + ) + (set_local $$add351$i + (i32.or + (get_local $$and350$i) + (get_local $$shl347$i) + ) + ) + (set_local $$I316$0$i + (get_local $$add351$i) + ) + ) + ) + ) + ) + (set_local $$arrayidx355$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$I316$0$i) + (i32.const 2) + ) + ) + ) + (set_local $$index356$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 28) + ) + ) + (i32.store + (get_local $$index356$i) + (get_local $$I316$0$i) + ) + (set_local $$child357$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 16) + ) + ) + (set_local $$arrayidx358$i + (i32.add + (get_local $$child357$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$arrayidx358$i) + (i32.const 0) + ) + (i32.store + (get_local $$child357$i) + (i32.const 0) + ) + (set_local $$86 + (i32.load + (i32.const 180) + ) + ) + (set_local $$shl362$i + (i32.shl + (i32.const 1) + (get_local $$I316$0$i) + ) + ) + (set_local $$and363$i + (i32.and + (get_local $$86) + (get_local $$shl362$i) + ) + ) + (set_local $$tobool364$i + (i32.eq + (get_local $$and363$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool364$i) + (block + (set_local $$or368$i + (i32.or + (get_local $$86) + (get_local $$shl362$i) + ) + ) + (i32.store + (i32.const 180) + (get_local $$or368$i) + ) + (i32.store + (get_local $$arrayidx355$i) + (get_local $$add$ptr$i$161) + ) + (set_local $$parent369$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent369$i) + (get_local $$arrayidx355$i) + ) + (set_local $$bk370$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk370$i) + (get_local $$add$ptr$i$161) + ) + (set_local $$fd371$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd371$i) + (get_local $$add$ptr$i$161) + ) + (br $do-once25) + ) + ) + (set_local $$87 + (i32.load + (get_local $$arrayidx355$i) + ) + ) + (set_local $$cmp374$i + (i32.eq + (get_local $$I316$0$i) + (i32.const 31) + ) + ) + (set_local $$shr378$i + (i32.shr_u + (get_local $$I316$0$i) + (i32.const 1) + ) + ) + (set_local $$sub381$i + (i32.sub + (i32.const 25) + (get_local $$shr378$i) + ) + ) + (set_local $$cond383$i + (if (result i32) + (get_local $$cmp374$i) + (i32.const 0) + (get_local $$sub381$i) + ) + ) + (set_local $$shl384$i + (i32.shl + (get_local $$rsize$4$lcssa$i) + (get_local $$cond383$i) + ) + ) + (set_local $$K373$0$i + (get_local $$shl384$i) + ) + (set_local $$T$0$i + (get_local $$87) + ) + (loop $while-in28 + (block $while-out27 + (set_local $$head386$i + (i32.add + (get_local $$T$0$i) + (i32.const 4) + ) + ) + (set_local $$88 + (i32.load + (get_local $$head386$i) + ) + ) + (set_local $$and387$i + (i32.and + (get_local $$88) + (i32.const -8) + ) + ) + (set_local $$cmp388$i + (i32.eq + (get_local $$and387$i) + (get_local $$rsize$4$lcssa$i) + ) + ) + (if + (get_local $$cmp388$i) + (block + (set_local $$T$0$i$lcssa + (get_local $$T$0$i) + ) + (set_local $label + (i32.const 148) + ) + (br $while-out27) + ) + ) + (set_local $$shr391$i + (i32.shr_u + (get_local $$K373$0$i) + (i32.const 31) + ) + ) + (set_local $$arrayidx394$i + (i32.add + (i32.add + (get_local $$T$0$i) + (i32.const 16) + ) + (i32.shl + (get_local $$shr391$i) + (i32.const 2) + ) + ) + ) + (set_local $$shl395$i + (i32.shl + (get_local $$K373$0$i) + (i32.const 1) + ) + ) + (set_local $$89 + (i32.load + (get_local $$arrayidx394$i) + ) + ) + (set_local $$cmp396$i + (i32.eq + (get_local $$89) + (i32.const 0) + ) + ) + (if + (get_local $$cmp396$i) + (block + (set_local $$T$0$i$lcssa293 + (get_local $$T$0$i) + ) + (set_local $$arrayidx394$i$lcssa + (get_local $$arrayidx394$i) + ) + (set_local $label + (i32.const 145) + ) + (br $while-out27) + ) + (block + (set_local $$K373$0$i + (get_local $$shl395$i) + ) + (set_local $$T$0$i + (get_local $$89) + ) + ) + ) + (br $while-in28) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 145) + ) + (block + (set_local $$90 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp401$i + (i32.lt_u + (get_local $$arrayidx394$i$lcssa) + (get_local $$90) + ) + ) + (if + (get_local $$cmp401$i) + (call $_abort) + (block + (i32.store + (get_local $$arrayidx394$i$lcssa) + (get_local $$add$ptr$i$161) + ) + (set_local $$parent406$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent406$i) + (get_local $$T$0$i$lcssa293) + ) + (set_local $$bk407$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk407$i) + (get_local $$add$ptr$i$161) + ) + (set_local $$fd408$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd408$i) + (get_local $$add$ptr$i$161) + ) + (br $do-once25) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 148) + ) + (block + (set_local $$fd416$i + (i32.add + (get_local $$T$0$i$lcssa) + (i32.const 8) + ) + ) + (set_local $$91 + (i32.load + (get_local $$fd416$i) + ) + ) + (set_local $$92 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp422$i + (i32.ge_u + (get_local $$91) + (get_local $$92) + ) + ) + (set_local $$not$cmp418$i + (i32.ge_u + (get_local $$T$0$i$lcssa) + (get_local $$92) + ) + ) + (set_local $$93 + (i32.and + (get_local $$cmp422$i) + (get_local $$not$cmp418$i) + ) + ) + (if + (get_local $$93) + (block + (set_local $$bk429$i + (i32.add + (get_local $$91) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk429$i) + (get_local $$add$ptr$i$161) + ) + (i32.store + (get_local $$fd416$i) + (get_local $$add$ptr$i$161) + ) + (set_local $$fd431$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd431$i) + (get_local $$91) + ) + (set_local $$bk432$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk432$i) + (get_local $$T$0$i$lcssa) + ) + (set_local $$parent433$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent433$i) + (i32.const 0) + ) + (br $do-once25) + ) + (call $_abort) + ) + ) + ) + ) + ) + ) + ) + (set_local $$add$ptr441$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 8) + ) + ) + (set_local $$retval$0 + (get_local $$add$ptr441$i) + ) + (return + (get_local $$retval$0) + ) + ) + (set_local $$nb$0 + (get_local $$and145) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $$94 + (i32.load + (i32.const 184) + ) + ) + (set_local $$cmp156 + (i32.lt_u + (get_local $$94) + (get_local $$nb$0) + ) + ) + (if + (i32.eqz + (get_local $$cmp156) + ) + (block + (set_local $$sub160 + (i32.sub + (get_local $$94) + (get_local $$nb$0) + ) + ) + (set_local $$95 + (i32.load + (i32.const 196) + ) + ) + (set_local $$cmp162 + (i32.gt_u + (get_local $$sub160) + (i32.const 15) + ) + ) + (if + (get_local $$cmp162) + (block + (set_local $$add$ptr166 + (i32.add + (get_local $$95) + (get_local $$nb$0) + ) + ) + (i32.store + (i32.const 196) + (get_local $$add$ptr166) + ) + (i32.store + (i32.const 184) + (get_local $$sub160) + ) + (set_local $$or167 + (i32.or + (get_local $$sub160) + (i32.const 1) + ) + ) + (set_local $$head168 + (i32.add + (get_local $$add$ptr166) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head168) + (get_local $$or167) + ) + (set_local $$add$ptr169 + (i32.add + (get_local $$add$ptr166) + (get_local $$sub160) + ) + ) + (i32.store + (get_local $$add$ptr169) + (get_local $$sub160) + ) + (set_local $$or172 + (i32.or + (get_local $$nb$0) + (i32.const 3) + ) + ) + (set_local $$head173 + (i32.add + (get_local $$95) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head173) + (get_local $$or172) + ) + ) + (block + (i32.store + (i32.const 184) + (i32.const 0) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (set_local $$or176 + (i32.or + (get_local $$94) + (i32.const 3) + ) + ) + (set_local $$head177 + (i32.add + (get_local $$95) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head177) + (get_local $$or176) + ) + (set_local $$add$ptr178 + (i32.add + (get_local $$95) + (get_local $$94) + ) + ) + (set_local $$head179 + (i32.add + (get_local $$add$ptr178) + (i32.const 4) + ) + ) + (set_local $$96 + (i32.load + (get_local $$head179) + ) + ) + (set_local $$or180 + (i32.or + (get_local $$96) + (i32.const 1) + ) + ) + (i32.store + (get_local $$head179) + (get_local $$or180) + ) + ) + ) + (set_local $$add$ptr182 + (i32.add + (get_local $$95) + (i32.const 8) + ) + ) + (set_local $$retval$0 + (get_local $$add$ptr182) + ) + (return + (get_local $$retval$0) + ) + ) + ) + (set_local $$97 + (i32.load + (i32.const 188) + ) + ) + (set_local $$cmp186 + (i32.gt_u + (get_local $$97) + (get_local $$nb$0) + ) + ) + (if + (get_local $$cmp186) + (block + (set_local $$sub190 + (i32.sub + (get_local $$97) + (get_local $$nb$0) + ) + ) + (i32.store + (i32.const 188) + (get_local $$sub190) + ) + (set_local $$98 + (i32.load + (i32.const 200) + ) + ) + (set_local $$add$ptr193 + (i32.add + (get_local $$98) + (get_local $$nb$0) + ) + ) + (i32.store + (i32.const 200) + (get_local $$add$ptr193) + ) + (set_local $$or194 + (i32.or + (get_local $$sub190) + (i32.const 1) + ) + ) + (set_local $$head195 + (i32.add + (get_local $$add$ptr193) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head195) + (get_local $$or194) + ) + (set_local $$or197 + (i32.or + (get_local $$nb$0) + (i32.const 3) + ) + ) + (set_local $$head198 + (i32.add + (get_local $$98) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head198) + (get_local $$or197) + ) + (set_local $$add$ptr199 + (i32.add + (get_local $$98) + (i32.const 8) + ) + ) + (set_local $$retval$0 + (get_local $$add$ptr199) + ) + (return + (get_local $$retval$0) + ) + ) + ) + (set_local $$99 + (i32.load + (i32.const 648) + ) + ) + (set_local $$cmp$i$179 + (i32.eq + (get_local $$99) + (i32.const 0) + ) + ) + (block $do-once29 + (if + (get_local $$cmp$i$179) + (block + (set_local $$call$i$i + (call $_sysconf + (i32.const 30) + ) + ) + (set_local $$sub$i$i + (i32.add + (get_local $$call$i$i) + (i32.const -1) + ) + ) + (set_local $$and$i$i + (i32.and + (get_local $$sub$i$i) + (get_local $$call$i$i) + ) + ) + (set_local $$cmp1$i$i + (i32.eq + (get_local $$and$i$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp1$i$i) + (block + (i32.store + (i32.const 656) + (get_local $$call$i$i) + ) + (i32.store + (i32.const 652) + (get_local $$call$i$i) + ) + (i32.store + (i32.const 660) + (i32.const -1) + ) + (i32.store + (i32.const 664) + (i32.const -1) + ) + (i32.store + (i32.const 668) + (i32.const 0) + ) + (i32.store + (i32.const 620) + (i32.const 0) + ) + (set_local $$call6$i$i + (call $_time + (i32.const 0) + ) + ) + (set_local $$xor$i$i + (i32.and + (get_local $$call6$i$i) + (i32.const -16) + ) + ) + (set_local $$and7$i$i + (i32.xor + (get_local $$xor$i$i) + (i32.const 1431655768) + ) + ) + (i32.store + (i32.const 648) + (get_local $$and7$i$i) + ) + (br $do-once29) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$add$i$180 + (i32.add + (get_local $$nb$0) + (i32.const 48) + ) + ) + (set_local $$100 + (i32.load + (i32.const 656) + ) + ) + (set_local $$sub$i$181 + (i32.add + (get_local $$nb$0) + (i32.const 47) + ) + ) + (set_local $$add9$i + (i32.add + (get_local $$100) + (get_local $$sub$i$181) + ) + ) + (set_local $$neg$i$182 + (i32.sub + (i32.const 0) + (get_local $$100) + ) + ) + (set_local $$and11$i + (i32.and + (get_local $$add9$i) + (get_local $$neg$i$182) + ) + ) + (set_local $$cmp12$i + (i32.gt_u + (get_local $$and11$i) + (get_local $$nb$0) + ) + ) + (if + (i32.eqz + (get_local $$cmp12$i) + ) + (block + (set_local $$retval$0 + (i32.const 0) + ) + (return + (get_local $$retval$0) + ) + ) + ) + (set_local $$101 + (i32.load + (i32.const 616) + ) + ) + (set_local $$cmp15$i + (i32.eq + (get_local $$101) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp15$i) + ) + (block + (set_local $$102 + (i32.load + (i32.const 608) + ) + ) + (set_local $$add17$i$183 + (i32.add + (get_local $$102) + (get_local $$and11$i) + ) + ) + (set_local $$cmp19$i + (i32.le_u + (get_local $$add17$i$183) + (get_local $$102) + ) + ) + (set_local $$cmp21$i + (i32.gt_u + (get_local $$add17$i$183) + (get_local $$101) + ) + ) + (set_local $$or$cond1$i$184 + (i32.or + (get_local $$cmp19$i) + (get_local $$cmp21$i) + ) + ) + (if + (get_local $$or$cond1$i$184) + (block + (set_local $$retval$0 + (i32.const 0) + ) + (return + (get_local $$retval$0) + ) + ) + ) + ) + ) + (set_local $$103 + (i32.load + (i32.const 620) + ) + ) + (set_local $$and29$i + (i32.and + (get_local $$103) + (i32.const 4) + ) + ) + (set_local $$tobool30$i + (i32.eq + (get_local $$and29$i) + (i32.const 0) + ) + ) + (block $label$break$L257 + (if + (get_local $$tobool30$i) + (block + (set_local $$104 + (i32.load + (i32.const 200) + ) + ) + (set_local $$cmp32$i$185 + (i32.eq + (get_local $$104) + (i32.const 0) + ) + ) + (block $label$break$L259 + (if + (get_local $$cmp32$i$185) + (set_local $label + (i32.const 173) + ) + (block + (set_local $$sp$0$i$i + (i32.const 624) + ) + (loop $while-in34 + (block $while-out33 + (set_local $$105 + (i32.load + (get_local $$sp$0$i$i) + ) + ) + (set_local $$cmp$i$9$i + (i32.gt_u + (get_local $$105) + (get_local $$104) + ) + ) + (if + (i32.eqz + (get_local $$cmp$i$9$i) + ) + (block + (set_local $$size$i$i + (i32.add + (get_local $$sp$0$i$i) + (i32.const 4) + ) + ) + (set_local $$106 + (i32.load + (get_local $$size$i$i) + ) + ) + (set_local $$add$ptr$i$i + (i32.add + (get_local $$105) + (get_local $$106) + ) + ) + (set_local $$cmp2$i$i + (i32.gt_u + (get_local $$add$ptr$i$i) + (get_local $$104) + ) + ) + (if + (get_local $$cmp2$i$i) + (block + (set_local $$base$i$i$lcssa + (get_local $$sp$0$i$i) + ) + (set_local $$size$i$i$lcssa + (get_local $$size$i$i) + ) + (br $while-out33) + ) + ) + ) + ) + (set_local $$next$i$i + (i32.add + (get_local $$sp$0$i$i) + (i32.const 8) + ) + ) + (set_local $$107 + (i32.load + (get_local $$next$i$i) + ) + ) + (set_local $$cmp3$i$i + (i32.eq + (get_local $$107) + (i32.const 0) + ) + ) + (if + (get_local $$cmp3$i$i) + (block + (set_local $label + (i32.const 173) + ) + (br $label$break$L259) + ) + (set_local $$sp$0$i$i + (get_local $$107) + ) + ) + (br $while-in34) + ) + ) + (set_local $$112 + (i32.load + (i32.const 188) + ) + ) + (set_local $$add77$i + (i32.sub + (get_local $$add9$i) + (get_local $$112) + ) + ) + (set_local $$and80$i + (i32.and + (get_local $$add77$i) + (get_local $$neg$i$182) + ) + ) + (set_local $$cmp81$i$191 + (i32.lt_u + (get_local $$and80$i) + (i32.const 2147483647) + ) + ) + (if + (get_local $$cmp81$i$191) + (block + (set_local $$call83$i + (call $_sbrk + (get_local $$and80$i) + ) + ) + (set_local $$113 + (i32.load + (get_local $$base$i$i$lcssa) + ) + ) + (set_local $$114 + (i32.load + (get_local $$size$i$i$lcssa) + ) + ) + (set_local $$add$ptr$i$193 + (i32.add + (get_local $$113) + (get_local $$114) + ) + ) + (set_local $$cmp85$i + (i32.eq + (get_local $$call83$i) + (get_local $$add$ptr$i$193) + ) + ) + (if + (get_local $$cmp85$i) + (block + (set_local $$cmp89$i + (i32.eq + (get_local $$call83$i) + (i32.const -1) + ) + ) + (if + (i32.eqz + (get_local $$cmp89$i) + ) + (block + (set_local $$tbase$796$i + (get_local $$call83$i) + ) + (set_local $$tsize$795$i + (get_local $$and80$i) + ) + (set_local $label + (i32.const 193) + ) + (br $label$break$L257) + ) + ) + ) + (block + (set_local $$br$2$ph$i + (get_local $$call83$i) + ) + (set_local $$ssize$2$ph$i + (get_local $$and80$i) + ) + (set_local $label + (i32.const 183) + ) + ) + ) + ) + ) + ) + ) + ) + (block $do-once35 + (if + (i32.eq + (get_local $label) + (i32.const 173) + ) + (block + (set_local $$call37$i + (call $_sbrk + (i32.const 0) + ) + ) + (set_local $$cmp38$i + (i32.eq + (get_local $$call37$i) + (i32.const -1) + ) + ) + (if + (i32.eqz + (get_local $$cmp38$i) + ) + (block + (set_local $$108 + (get_local $$call37$i) + ) + (set_local $$109 + (i32.load + (i32.const 652) + ) + ) + (set_local $$sub41$i + (i32.add + (get_local $$109) + (i32.const -1) + ) + ) + (set_local $$and42$i + (i32.and + (get_local $$sub41$i) + (get_local $$108) + ) + ) + (set_local $$cmp43$i + (i32.eq + (get_local $$and42$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp43$i) + (set_local $$ssize$0$i + (get_local $$and11$i) + ) + (block + (set_local $$add46$i + (i32.add + (get_local $$sub41$i) + (get_local $$108) + ) + ) + (set_local $$neg48$i + (i32.sub + (i32.const 0) + (get_local $$109) + ) + ) + (set_local $$and49$i + (i32.and + (get_local $$add46$i) + (get_local $$neg48$i) + ) + ) + (set_local $$sub50$i + (i32.sub + (get_local $$and11$i) + (get_local $$108) + ) + ) + (set_local $$add51$i + (i32.add + (get_local $$sub50$i) + (get_local $$and49$i) + ) + ) + (set_local $$ssize$0$i + (get_local $$add51$i) + ) + ) + ) + (set_local $$110 + (i32.load + (i32.const 608) + ) + ) + (set_local $$add54$i + (i32.add + (get_local $$110) + (get_local $$ssize$0$i) + ) + ) + (set_local $$cmp55$i$187 + (i32.gt_u + (get_local $$ssize$0$i) + (get_local $$nb$0) + ) + ) + (set_local $$cmp57$i$188 + (i32.lt_u + (get_local $$ssize$0$i) + (i32.const 2147483647) + ) + ) + (set_local $$or$cond$i$189 + (i32.and + (get_local $$cmp55$i$187) + (get_local $$cmp57$i$188) + ) + ) + (if + (get_local $$or$cond$i$189) + (block + (set_local $$111 + (i32.load + (i32.const 616) + ) + ) + (set_local $$cmp60$i + (i32.eq + (get_local $$111) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp60$i) + ) + (block + (set_local $$cmp63$i + (i32.le_u + (get_local $$add54$i) + (get_local $$110) + ) + ) + (set_local $$cmp66$i$190 + (i32.gt_u + (get_local $$add54$i) + (get_local $$111) + ) + ) + (set_local $$or$cond2$i + (i32.or + (get_local $$cmp63$i) + (get_local $$cmp66$i$190) + ) + ) + (if + (get_local $$or$cond2$i) + (br $do-once35) + ) + ) + ) + (set_local $$call68$i + (call $_sbrk + (get_local $$ssize$0$i) + ) + ) + (set_local $$cmp69$i + (i32.eq + (get_local $$call68$i) + (get_local $$call37$i) + ) + ) + (if + (get_local $$cmp69$i) + (block + (set_local $$tbase$796$i + (get_local $$call37$i) + ) + (set_local $$tsize$795$i + (get_local $$ssize$0$i) + ) + (set_local $label + (i32.const 193) + ) + (br $label$break$L257) + ) + (block + (set_local $$br$2$ph$i + (get_local $$call68$i) + ) + (set_local $$ssize$2$ph$i + (get_local $$ssize$0$i) + ) + (set_local $label + (i32.const 183) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (block $label$break$L279 + (if + (i32.eq + (get_local $label) + (i32.const 183) + ) + (block + (set_local $$sub112$i + (i32.sub + (i32.const 0) + (get_local $$ssize$2$ph$i) + ) + ) + (set_local $$cmp91$i + (i32.ne + (get_local $$br$2$ph$i) + (i32.const -1) + ) + ) + (set_local $$cmp93$i + (i32.lt_u + (get_local $$ssize$2$ph$i) + (i32.const 2147483647) + ) + ) + (set_local $$or$cond5$i + (i32.and + (get_local $$cmp93$i) + (get_local $$cmp91$i) + ) + ) + (set_local $$cmp96$i + (i32.gt_u + (get_local $$add$i$180) + (get_local $$ssize$2$ph$i) + ) + ) + (set_local $$or$cond3$i + (i32.and + (get_local $$cmp96$i) + (get_local $$or$cond5$i) + ) + ) + (block $do-once38 + (if + (get_local $$or$cond3$i) + (block + (set_local $$115 + (i32.load + (i32.const 656) + ) + ) + (set_local $$sub99$i + (i32.sub + (get_local $$sub$i$181) + (get_local $$ssize$2$ph$i) + ) + ) + (set_local $$add101$i + (i32.add + (get_local $$sub99$i) + (get_local $$115) + ) + ) + (set_local $$neg103$i + (i32.sub + (i32.const 0) + (get_local $$115) + ) + ) + (set_local $$and104$i + (i32.and + (get_local $$add101$i) + (get_local $$neg103$i) + ) + ) + (set_local $$cmp105$i + (i32.lt_u + (get_local $$and104$i) + (i32.const 2147483647) + ) + ) + (if + (get_local $$cmp105$i) + (block + (set_local $$call107$i + (call $_sbrk + (get_local $$and104$i) + ) + ) + (set_local $$cmp108$i + (i32.eq + (get_local $$call107$i) + (i32.const -1) + ) + ) + (if + (get_local $$cmp108$i) + (block + (drop + (call $_sbrk + (get_local $$sub112$i) + ) + ) + (br $label$break$L279) + ) + (block + (set_local $$add110$i + (i32.add + (get_local $$and104$i) + (get_local $$ssize$2$ph$i) + ) + ) + (set_local $$ssize$5$i + (get_local $$add110$i) + ) + (br $do-once38) + ) + ) + ) + (set_local $$ssize$5$i + (get_local $$ssize$2$ph$i) + ) + ) + ) + (set_local $$ssize$5$i + (get_local $$ssize$2$ph$i) + ) + ) + ) + (set_local $$cmp118$i + (i32.eq + (get_local $$br$2$ph$i) + (i32.const -1) + ) + ) + (if + (i32.eqz + (get_local $$cmp118$i) + ) + (block + (set_local $$tbase$796$i + (get_local $$br$2$ph$i) + ) + (set_local $$tsize$795$i + (get_local $$ssize$5$i) + ) + (set_local $label + (i32.const 193) + ) + (br $label$break$L257) + ) + ) + ) + ) + ) + (set_local $$116 + (i32.load + (i32.const 620) + ) + ) + (set_local $$or$i$195 + (i32.or + (get_local $$116) + (i32.const 4) + ) + ) + (i32.store + (i32.const 620) + (get_local $$or$i$195) + ) + (set_local $label + (i32.const 190) + ) + ) + (set_local $label + (i32.const 190) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 190) + ) + (block + (set_local $$cmp127$i + (i32.lt_u + (get_local $$and11$i) + (i32.const 2147483647) + ) + ) + (if + (get_local $$cmp127$i) + (block + (set_local $$call131$i + (call $_sbrk + (get_local $$and11$i) + ) + ) + (set_local $$call132$i + (call $_sbrk + (i32.const 0) + ) + ) + (set_local $$cmp133$i$196 + (i32.ne + (get_local $$call131$i) + (i32.const -1) + ) + ) + (set_local $$cmp135$i + (i32.ne + (get_local $$call132$i) + (i32.const -1) + ) + ) + (set_local $$or$cond4$i + (i32.and + (get_local $$cmp133$i$196) + (get_local $$cmp135$i) + ) + ) + (set_local $$cmp137$i$197 + (i32.lt_u + (get_local $$call131$i) + (get_local $$call132$i) + ) + ) + (set_local $$or$cond7$i + (i32.and + (get_local $$cmp137$i$197) + (get_local $$or$cond4$i) + ) + ) + (if + (get_local $$or$cond7$i) + (block + (set_local $$sub$ptr$lhs$cast$i + (get_local $$call132$i) + ) + (set_local $$sub$ptr$rhs$cast$i + (get_local $$call131$i) + ) + (set_local $$sub$ptr$sub$i + (i32.sub + (get_local $$sub$ptr$lhs$cast$i) + (get_local $$sub$ptr$rhs$cast$i) + ) + ) + (set_local $$add140$i + (i32.add + (get_local $$nb$0) + (i32.const 40) + ) + ) + (set_local $$cmp141$not$i + (i32.gt_u + (get_local $$sub$ptr$sub$i) + (get_local $$add140$i) + ) + ) + (if + (get_local $$cmp141$not$i) + (block + (set_local $$tbase$796$i + (get_local $$call131$i) + ) + (set_local $$tsize$795$i + (get_local $$sub$ptr$sub$i) + ) + (set_local $label + (i32.const 193) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 193) + ) + (block + (set_local $$117 + (i32.load + (i32.const 608) + ) + ) + (set_local $$add150$i + (i32.add + (get_local $$117) + (get_local $$tsize$795$i) + ) + ) + (i32.store + (i32.const 608) + (get_local $$add150$i) + ) + (set_local $$118 + (i32.load + (i32.const 612) + ) + ) + (set_local $$cmp151$i + (i32.gt_u + (get_local $$add150$i) + (get_local $$118) + ) + ) + (if + (get_local $$cmp151$i) + (i32.store + (i32.const 612) + (get_local $$add150$i) + ) + ) + (set_local $$119 + (i32.load + (i32.const 200) + ) + ) + (set_local $$cmp157$i + (i32.eq + (get_local $$119) + (i32.const 0) + ) + ) + (block $do-once40 + (if + (get_local $$cmp157$i) + (block + (set_local $$120 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp159$i$199 + (i32.eq + (get_local $$120) + (i32.const 0) + ) + ) + (set_local $$cmp162$i$200 + (i32.lt_u + (get_local $$tbase$796$i) + (get_local $$120) + ) + ) + (set_local $$or$cond8$i + (i32.or + (get_local $$cmp159$i$199) + (get_local $$cmp162$i$200) + ) + ) + (if + (get_local $$or$cond8$i) + (i32.store + (i32.const 192) + (get_local $$tbase$796$i) + ) + ) + (i32.store + (i32.const 624) + (get_local $$tbase$796$i) + ) + (i32.store + (i32.const 628) + (get_local $$tsize$795$i) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (set_local $$121 + (i32.load + (i32.const 648) + ) + ) + (i32.store + (i32.const 212) + (get_local $$121) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (set_local $$i$01$i$i + (i32.const 0) + ) + (loop $while-in43 + (block $while-out42 + (set_local $$shl$i$i + (i32.shl + (get_local $$i$01$i$i) + (i32.const 1) + ) + ) + (set_local $$arrayidx$i$i + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl$i$i) + (i32.const 2) + ) + ) + ) + (set_local $$122 + (i32.add + (get_local $$arrayidx$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$122) + (get_local $$arrayidx$i$i) + ) + (set_local $$123 + (i32.add + (get_local $$arrayidx$i$i) + (i32.const 8) + ) + ) + (i32.store + (get_local $$123) + (get_local $$arrayidx$i$i) + ) + (set_local $$inc$i$i + (i32.add + (get_local $$i$01$i$i) + (i32.const 1) + ) + ) + (set_local $$exitcond$i$i + (i32.eq + (get_local $$inc$i$i) + (i32.const 32) + ) + ) + (if + (get_local $$exitcond$i$i) + (br $while-out42) + (set_local $$i$01$i$i + (get_local $$inc$i$i) + ) + ) + (br $while-in43) + ) + ) + (set_local $$sub172$i + (i32.add + (get_local $$tsize$795$i) + (i32.const -40) + ) + ) + (set_local $$add$ptr$i$11$i + (i32.add + (get_local $$tbase$796$i) + (i32.const 8) + ) + ) + (set_local $$124 + (get_local $$add$ptr$i$11$i) + ) + (set_local $$and$i$12$i + (i32.and + (get_local $$124) + (i32.const 7) + ) + ) + (set_local $$cmp$i$13$i + (i32.eq + (get_local $$and$i$12$i) + (i32.const 0) + ) + ) + (set_local $$125 + (i32.sub + (i32.const 0) + (get_local $$124) + ) + ) + (set_local $$and3$i$i + (i32.and + (get_local $$125) + (i32.const 7) + ) + ) + (set_local $$cond$i$i + (if (result i32) + (get_local $$cmp$i$13$i) + (i32.const 0) + (get_local $$and3$i$i) + ) + ) + (set_local $$add$ptr4$i$i + (i32.add + (get_local $$tbase$796$i) + (get_local $$cond$i$i) + ) + ) + (set_local $$sub5$i$i + (i32.sub + (get_local $$sub172$i) + (get_local $$cond$i$i) + ) + ) + (i32.store + (i32.const 200) + (get_local $$add$ptr4$i$i) + ) + (i32.store + (i32.const 188) + (get_local $$sub5$i$i) + ) + (set_local $$or$i$i + (i32.or + (get_local $$sub5$i$i) + (i32.const 1) + ) + ) + (set_local $$head$i$i + (i32.add + (get_local $$add$ptr4$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head$i$i) + (get_local $$or$i$i) + ) + (set_local $$add$ptr6$i$i + (i32.add + (get_local $$add$ptr4$i$i) + (get_local $$sub5$i$i) + ) + ) + (set_local $$head7$i$i + (i32.add + (get_local $$add$ptr6$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head7$i$i) + (i32.const 40) + ) + (set_local $$126 + (i32.load + (i32.const 664) + ) + ) + (i32.store + (i32.const 204) + (get_local $$126) + ) + ) + (block + (set_local $$sp$0108$i + (i32.const 624) + ) + (loop $while-in45 + (block $while-out44 + (set_local $$127 + (i32.load + (get_local $$sp$0108$i) + ) + ) + (set_local $$size188$i + (i32.add + (get_local $$sp$0108$i) + (i32.const 4) + ) + ) + (set_local $$128 + (i32.load + (get_local $$size188$i) + ) + ) + (set_local $$add$ptr189$i + (i32.add + (get_local $$127) + (get_local $$128) + ) + ) + (set_local $$cmp190$i + (i32.eq + (get_local $$tbase$796$i) + (get_local $$add$ptr189$i) + ) + ) + (if + (get_local $$cmp190$i) + (block + (set_local $$$lcssa + (get_local $$127) + ) + (set_local $$$lcssa290 + (get_local $$128) + ) + (set_local $$size188$i$lcssa + (get_local $$size188$i) + ) + (set_local $$sp$0108$i$lcssa + (get_local $$sp$0108$i) + ) + (set_local $label + (i32.const 203) + ) + (br $while-out44) + ) + ) + (set_local $$next$i + (i32.add + (get_local $$sp$0108$i) + (i32.const 8) + ) + ) + (set_local $$129 + (i32.load + (get_local $$next$i) + ) + ) + (set_local $$cmp186$i + (i32.eq + (get_local $$129) + (i32.const 0) + ) + ) + (if + (get_local $$cmp186$i) + (br $while-out44) + (set_local $$sp$0108$i + (get_local $$129) + ) + ) + (br $while-in45) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 203) + ) + (block + (set_local $$sflags193$i + (i32.add + (get_local $$sp$0108$i$lcssa) + (i32.const 12) + ) + ) + (set_local $$130 + (i32.load + (get_local $$sflags193$i) + ) + ) + (set_local $$and194$i$204 + (i32.and + (get_local $$130) + (i32.const 8) + ) + ) + (set_local $$tobool195$i + (i32.eq + (get_local $$and194$i$204) + (i32.const 0) + ) + ) + (if + (get_local $$tobool195$i) + (block + (set_local $$cmp203$i + (i32.ge_u + (get_local $$119) + (get_local $$$lcssa) + ) + ) + (set_local $$cmp209$i + (i32.lt_u + (get_local $$119) + (get_local $$tbase$796$i) + ) + ) + (set_local $$or$cond98$i + (i32.and + (get_local $$cmp209$i) + (get_local $$cmp203$i) + ) + ) + (if + (get_local $$or$cond98$i) + (block + (set_local $$add212$i + (i32.add + (get_local $$$lcssa290) + (get_local $$tsize$795$i) + ) + ) + (i32.store + (get_local $$size188$i$lcssa) + (get_local $$add212$i) + ) + (set_local $$131 + (i32.load + (i32.const 188) + ) + ) + (set_local $$add$ptr$i$21$i + (i32.add + (get_local $$119) + (i32.const 8) + ) + ) + (set_local $$132 + (get_local $$add$ptr$i$21$i) + ) + (set_local $$and$i$22$i + (i32.and + (get_local $$132) + (i32.const 7) + ) + ) + (set_local $$cmp$i$23$i + (i32.eq + (get_local $$and$i$22$i) + (i32.const 0) + ) + ) + (set_local $$133 + (i32.sub + (i32.const 0) + (get_local $$132) + ) + ) + (set_local $$and3$i$24$i + (i32.and + (get_local $$133) + (i32.const 7) + ) + ) + (set_local $$cond$i$25$i + (if (result i32) + (get_local $$cmp$i$23$i) + (i32.const 0) + (get_local $$and3$i$24$i) + ) + ) + (set_local $$add$ptr4$i$26$i + (i32.add + (get_local $$119) + (get_local $$cond$i$25$i) + ) + ) + (set_local $$add215$i + (i32.sub + (get_local $$tsize$795$i) + (get_local $$cond$i$25$i) + ) + ) + (set_local $$sub5$i$27$i + (i32.add + (get_local $$add215$i) + (get_local $$131) + ) + ) + (i32.store + (i32.const 200) + (get_local $$add$ptr4$i$26$i) + ) + (i32.store + (i32.const 188) + (get_local $$sub5$i$27$i) + ) + (set_local $$or$i$28$i + (i32.or + (get_local $$sub5$i$27$i) + (i32.const 1) + ) + ) + (set_local $$head$i$29$i + (i32.add + (get_local $$add$ptr4$i$26$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head$i$29$i) + (get_local $$or$i$28$i) + ) + (set_local $$add$ptr6$i$30$i + (i32.add + (get_local $$add$ptr4$i$26$i) + (get_local $$sub5$i$27$i) + ) + ) + (set_local $$head7$i$31$i + (i32.add + (get_local $$add$ptr6$i$30$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head7$i$31$i) + (i32.const 40) + ) + (set_local $$134 + (i32.load + (i32.const 664) + ) + ) + (i32.store + (i32.const 204) + (get_local $$134) + ) + (br $do-once40) + ) + ) + ) + ) + ) + ) + (set_local $$135 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp218$i + (i32.lt_u + (get_local $$tbase$796$i) + (get_local $$135) + ) + ) + (if + (get_local $$cmp218$i) + (block + (i32.store + (i32.const 192) + (get_local $$tbase$796$i) + ) + (set_local $$150 + (get_local $$tbase$796$i) + ) + ) + (set_local $$150 + (get_local $$135) + ) + ) + (set_local $$add$ptr227$i + (i32.add + (get_local $$tbase$796$i) + (get_local $$tsize$795$i) + ) + ) + (set_local $$sp$1107$i + (i32.const 624) + ) + (loop $while-in47 + (block $while-out46 + (set_local $$136 + (i32.load + (get_local $$sp$1107$i) + ) + ) + (set_local $$cmp228$i + (i32.eq + (get_local $$136) + (get_local $$add$ptr227$i) + ) + ) + (if + (get_local $$cmp228$i) + (block + (set_local $$base226$i$lcssa + (get_local $$sp$1107$i) + ) + (set_local $$sp$1107$i$lcssa + (get_local $$sp$1107$i) + ) + (set_local $label + (i32.const 211) + ) + (br $while-out46) + ) + ) + (set_local $$next231$i + (i32.add + (get_local $$sp$1107$i) + (i32.const 8) + ) + ) + (set_local $$137 + (i32.load + (get_local $$next231$i) + ) + ) + (set_local $$cmp224$i + (i32.eq + (get_local $$137) + (i32.const 0) + ) + ) + (if + (get_local $$cmp224$i) + (block + (set_local $$sp$0$i$i$i + (i32.const 624) + ) + (br $while-out46) + ) + (set_local $$sp$1107$i + (get_local $$137) + ) + ) + (br $while-in47) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 211) + ) + (block + (set_local $$sflags235$i + (i32.add + (get_local $$sp$1107$i$lcssa) + (i32.const 12) + ) + ) + (set_local $$138 + (i32.load + (get_local $$sflags235$i) + ) + ) + (set_local $$and236$i + (i32.and + (get_local $$138) + (i32.const 8) + ) + ) + (set_local $$tobool237$i + (i32.eq + (get_local $$and236$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool237$i) + (block + (i32.store + (get_local $$base226$i$lcssa) + (get_local $$tbase$796$i) + ) + (set_local $$size245$i + (i32.add + (get_local $$sp$1107$i$lcssa) + (i32.const 4) + ) + ) + (set_local $$139 + (i32.load + (get_local $$size245$i) + ) + ) + (set_local $$add246$i + (i32.add + (get_local $$139) + (get_local $$tsize$795$i) + ) + ) + (i32.store + (get_local $$size245$i) + (get_local $$add246$i) + ) + (set_local $$add$ptr$i$32$i + (i32.add + (get_local $$tbase$796$i) + (i32.const 8) + ) + ) + (set_local $$140 + (get_local $$add$ptr$i$32$i) + ) + (set_local $$and$i$33$i + (i32.and + (get_local $$140) + (i32.const 7) + ) + ) + (set_local $$cmp$i$34$i + (i32.eq + (get_local $$and$i$33$i) + (i32.const 0) + ) + ) + (set_local $$141 + (i32.sub + (i32.const 0) + (get_local $$140) + ) + ) + (set_local $$and3$i$35$i + (i32.and + (get_local $$141) + (i32.const 7) + ) + ) + (set_local $$cond$i$36$i + (if (result i32) + (get_local $$cmp$i$34$i) + (i32.const 0) + (get_local $$and3$i$35$i) + ) + ) + (set_local $$add$ptr4$i$37$i + (i32.add + (get_local $$tbase$796$i) + (get_local $$cond$i$36$i) + ) + ) + (set_local $$add$ptr5$i$i + (i32.add + (get_local $$add$ptr227$i) + (i32.const 8) + ) + ) + (set_local $$142 + (get_local $$add$ptr5$i$i) + ) + (set_local $$and6$i$38$i + (i32.and + (get_local $$142) + (i32.const 7) + ) + ) + (set_local $$cmp7$i$i + (i32.eq + (get_local $$and6$i$38$i) + (i32.const 0) + ) + ) + (set_local $$143 + (i32.sub + (i32.const 0) + (get_local $$142) + ) + ) + (set_local $$and13$i$i + (i32.and + (get_local $$143) + (i32.const 7) + ) + ) + (set_local $$cond15$i$i + (if (result i32) + (get_local $$cmp7$i$i) + (i32.const 0) + (get_local $$and13$i$i) + ) + ) + (set_local $$add$ptr16$i$i + (i32.add + (get_local $$add$ptr227$i) + (get_local $$cond15$i$i) + ) + ) + (set_local $$sub$ptr$lhs$cast$i$39$i + (get_local $$add$ptr16$i$i) + ) + (set_local $$sub$ptr$rhs$cast$i$40$i + (get_local $$add$ptr4$i$37$i) + ) + (set_local $$sub$ptr$sub$i$41$i + (i32.sub + (get_local $$sub$ptr$lhs$cast$i$39$i) + (get_local $$sub$ptr$rhs$cast$i$40$i) + ) + ) + (set_local $$add$ptr17$i$i + (i32.add + (get_local $$add$ptr4$i$37$i) + (get_local $$nb$0) + ) + ) + (set_local $$sub18$i$i + (i32.sub + (get_local $$sub$ptr$sub$i$41$i) + (get_local $$nb$0) + ) + ) + (set_local $$or19$i$i + (i32.or + (get_local $$nb$0) + (i32.const 3) + ) + ) + (set_local $$head$i$42$i + (i32.add + (get_local $$add$ptr4$i$37$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head$i$42$i) + (get_local $$or19$i$i) + ) + (set_local $$cmp20$i$i + (i32.eq + (get_local $$add$ptr16$i$i) + (get_local $$119) + ) + ) + (block $do-once48 + (if + (get_local $$cmp20$i$i) + (block + (set_local $$144 + (i32.load + (i32.const 188) + ) + ) + (set_local $$add$i$i + (i32.add + (get_local $$144) + (get_local $$sub18$i$i) + ) + ) + (i32.store + (i32.const 188) + (get_local $$add$i$i) + ) + (i32.store + (i32.const 200) + (get_local $$add$ptr17$i$i) + ) + (set_local $$or22$i$i + (i32.or + (get_local $$add$i$i) + (i32.const 1) + ) + ) + (set_local $$head23$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head23$i$i) + (get_local $$or22$i$i) + ) + ) + (block + (set_local $$145 + (i32.load + (i32.const 196) + ) + ) + (set_local $$cmp24$i$i + (i32.eq + (get_local $$add$ptr16$i$i) + (get_local $$145) + ) + ) + (if + (get_local $$cmp24$i$i) + (block + (set_local $$146 + (i32.load + (i32.const 184) + ) + ) + (set_local $$add26$i$i + (i32.add + (get_local $$146) + (get_local $$sub18$i$i) + ) + ) + (i32.store + (i32.const 184) + (get_local $$add26$i$i) + ) + (i32.store + (i32.const 196) + (get_local $$add$ptr17$i$i) + ) + (set_local $$or28$i$i + (i32.or + (get_local $$add26$i$i) + (i32.const 1) + ) + ) + (set_local $$head29$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head29$i$i) + (get_local $$or28$i$i) + ) + (set_local $$add$ptr30$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (get_local $$add26$i$i) + ) + ) + (i32.store + (get_local $$add$ptr30$i$i) + (get_local $$add26$i$i) + ) + (br $do-once48) + ) + ) + (set_local $$head32$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 4) + ) + ) + (set_local $$147 + (i32.load + (get_local $$head32$i$i) + ) + ) + (set_local $$and33$i$i + (i32.and + (get_local $$147) + (i32.const 3) + ) + ) + (set_local $$cmp34$i$i + (i32.eq + (get_local $$and33$i$i) + (i32.const 1) + ) + ) + (if + (get_local $$cmp34$i$i) + (block + (set_local $$and37$i$i + (i32.and + (get_local $$147) + (i32.const -8) + ) + ) + (set_local $$shr$i$45$i + (i32.shr_u + (get_local $$147) + (i32.const 3) + ) + ) + (set_local $$cmp38$i$i + (i32.lt_u + (get_local $$147) + (i32.const 256) + ) + ) + (block $label$break$L331 + (if + (get_local $$cmp38$i$i) + (block + (set_local $$fd$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 8) + ) + ) + (set_local $$148 + (i32.load + (get_local $$fd$i$i) + ) + ) + (set_local $$bk$i$46$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 12) + ) + ) + (set_local $$149 + (i32.load + (get_local $$bk$i$46$i) + ) + ) + (set_local $$shl$i$47$i + (i32.shl + (get_local $$shr$i$45$i) + (i32.const 1) + ) + ) + (set_local $$arrayidx$i$48$i + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl$i$47$i) + (i32.const 2) + ) + ) + ) + (set_local $$cmp41$i$i + (i32.eq + (get_local $$148) + (get_local $$arrayidx$i$48$i) + ) + ) + (block $do-once51 + (if + (i32.eqz + (get_local $$cmp41$i$i) + ) + (block + (set_local $$cmp42$i$i + (i32.lt_u + (get_local $$148) + (get_local $$150) + ) + ) + (if + (get_local $$cmp42$i$i) + (call $_abort) + ) + (set_local $$bk43$i$i + (i32.add + (get_local $$148) + (i32.const 12) + ) + ) + (set_local $$151 + (i32.load + (get_local $$bk43$i$i) + ) + ) + (set_local $$cmp44$i$i + (i32.eq + (get_local $$151) + (get_local $$add$ptr16$i$i) + ) + ) + (if + (get_local $$cmp44$i$i) + (br $do-once51) + ) + (call $_abort) + ) + ) + ) + (set_local $$cmp46$i$49$i + (i32.eq + (get_local $$149) + (get_local $$148) + ) + ) + (if + (get_local $$cmp46$i$49$i) + (block + (set_local $$shl48$i$i + (i32.shl + (i32.const 1) + (get_local $$shr$i$45$i) + ) + ) + (set_local $$neg$i$i + (i32.xor + (get_local $$shl48$i$i) + (i32.const -1) + ) + ) + (set_local $$152 + (i32.load + (i32.const 176) + ) + ) + (set_local $$and49$i$i + (i32.and + (get_local $$152) + (get_local $$neg$i$i) + ) + ) + (i32.store + (i32.const 176) + (get_local $$and49$i$i) + ) + (br $label$break$L331) + ) + ) + (set_local $$cmp54$i$i + (i32.eq + (get_local $$149) + (get_local $$arrayidx$i$48$i) + ) + ) + (block $do-once53 + (if + (get_local $$cmp54$i$i) + (block + (set_local $$$pre5$i$i + (i32.add + (get_local $$149) + (i32.const 8) + ) + ) + (set_local $$fd68$pre$phi$i$iZ2D + (get_local $$$pre5$i$i) + ) + ) + (block + (set_local $$cmp57$i$i + (i32.lt_u + (get_local $$149) + (get_local $$150) + ) + ) + (if + (get_local $$cmp57$i$i) + (call $_abort) + ) + (set_local $$fd59$i$i + (i32.add + (get_local $$149) + (i32.const 8) + ) + ) + (set_local $$153 + (i32.load + (get_local $$fd59$i$i) + ) + ) + (set_local $$cmp60$i$i + (i32.eq + (get_local $$153) + (get_local $$add$ptr16$i$i) + ) + ) + (if + (get_local $$cmp60$i$i) + (block + (set_local $$fd68$pre$phi$i$iZ2D + (get_local $$fd59$i$i) + ) + (br $do-once53) + ) + ) + (call $_abort) + ) + ) + ) + (set_local $$bk67$i$i + (i32.add + (get_local $$148) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk67$i$i) + (get_local $$149) + ) + (i32.store + (get_local $$fd68$pre$phi$i$iZ2D) + (get_local $$148) + ) + ) + (block + (set_local $$parent$i$51$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 24) + ) + ) + (set_local $$154 + (i32.load + (get_local $$parent$i$51$i) + ) + ) + (set_local $$bk74$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 12) + ) + ) + (set_local $$155 + (i32.load + (get_local $$bk74$i$i) + ) + ) + (set_local $$cmp75$i$i + (i32.eq + (get_local $$155) + (get_local $$add$ptr16$i$i) + ) + ) + (block $do-once55 + (if + (get_local $$cmp75$i$i) + (block + (set_local $$child$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 16) + ) + ) + (set_local $$arrayidx96$i$i + (i32.add + (get_local $$child$i$i) + (i32.const 4) + ) + ) + (set_local $$159 + (i32.load + (get_local $$arrayidx96$i$i) + ) + ) + (set_local $$cmp97$i$i + (i32.eq + (get_local $$159) + (i32.const 0) + ) + ) + (if + (get_local $$cmp97$i$i) + (block + (set_local $$160 + (i32.load + (get_local $$child$i$i) + ) + ) + (set_local $$cmp100$i$i + (i32.eq + (get_local $$160) + (i32.const 0) + ) + ) + (if + (get_local $$cmp100$i$i) + (block + (set_local $$R$3$i$i + (i32.const 0) + ) + (br $do-once55) + ) + (block + (set_local $$R$1$i$i + (get_local $$160) + ) + (set_local $$RP$1$i$i + (get_local $$child$i$i) + ) + ) + ) + ) + (block + (set_local $$R$1$i$i + (get_local $$159) + ) + (set_local $$RP$1$i$i + (get_local $$arrayidx96$i$i) + ) + ) + ) + (loop $while-in58 + (block $while-out57 + (set_local $$arrayidx103$i$i + (i32.add + (get_local $$R$1$i$i) + (i32.const 20) + ) + ) + (set_local $$161 + (i32.load + (get_local $$arrayidx103$i$i) + ) + ) + (set_local $$cmp104$i$i + (i32.eq + (get_local $$161) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp104$i$i) + ) + (block + (set_local $$R$1$i$i + (get_local $$161) + ) + (set_local $$RP$1$i$i + (get_local $$arrayidx103$i$i) + ) + (br $while-in58) + ) + ) + (set_local $$arrayidx107$i$i + (i32.add + (get_local $$R$1$i$i) + (i32.const 16) + ) + ) + (set_local $$162 + (i32.load + (get_local $$arrayidx107$i$i) + ) + ) + (set_local $$cmp108$i$i + (i32.eq + (get_local $$162) + (i32.const 0) + ) + ) + (if + (get_local $$cmp108$i$i) + (block + (set_local $$R$1$i$i$lcssa + (get_local $$R$1$i$i) + ) + (set_local $$RP$1$i$i$lcssa + (get_local $$RP$1$i$i) + ) + (br $while-out57) + ) + (block + (set_local $$R$1$i$i + (get_local $$162) + ) + (set_local $$RP$1$i$i + (get_local $$arrayidx107$i$i) + ) + ) + ) + (br $while-in58) + ) + ) + (set_local $$cmp112$i$i + (i32.lt_u + (get_local $$RP$1$i$i$lcssa) + (get_local $$150) + ) + ) + (if + (get_local $$cmp112$i$i) + (call $_abort) + (block + (i32.store + (get_local $$RP$1$i$i$lcssa) + (i32.const 0) + ) + (set_local $$R$3$i$i + (get_local $$R$1$i$i$lcssa) + ) + (br $do-once55) + ) + ) + ) + (block + (set_local $$fd78$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 8) + ) + ) + (set_local $$156 + (i32.load + (get_local $$fd78$i$i) + ) + ) + (set_local $$cmp81$i$i + (i32.lt_u + (get_local $$156) + (get_local $$150) + ) + ) + (if + (get_local $$cmp81$i$i) + (call $_abort) + ) + (set_local $$bk82$i$i + (i32.add + (get_local $$156) + (i32.const 12) + ) + ) + (set_local $$157 + (i32.load + (get_local $$bk82$i$i) + ) + ) + (set_local $$cmp83$i$i + (i32.eq + (get_local $$157) + (get_local $$add$ptr16$i$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp83$i$i) + ) + (call $_abort) + ) + (set_local $$fd85$i$i + (i32.add + (get_local $$155) + (i32.const 8) + ) + ) + (set_local $$158 + (i32.load + (get_local $$fd85$i$i) + ) + ) + (set_local $$cmp86$i$i + (i32.eq + (get_local $$158) + (get_local $$add$ptr16$i$i) + ) + ) + (if + (get_local $$cmp86$i$i) + (block + (i32.store + (get_local $$bk82$i$i) + (get_local $$155) + ) + (i32.store + (get_local $$fd85$i$i) + (get_local $$156) + ) + (set_local $$R$3$i$i + (get_local $$155) + ) + (br $do-once55) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$cmp120$i$53$i + (i32.eq + (get_local $$154) + (i32.const 0) + ) + ) + (if + (get_local $$cmp120$i$53$i) + (br $label$break$L331) + ) + (set_local $$index$i$54$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 28) + ) + ) + (set_local $$163 + (i32.load + (get_local $$index$i$54$i) + ) + ) + (set_local $$arrayidx123$i$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$163) + (i32.const 2) + ) + ) + ) + (set_local $$164 + (i32.load + (get_local $$arrayidx123$i$i) + ) + ) + (set_local $$cmp124$i$i + (i32.eq + (get_local $$add$ptr16$i$i) + (get_local $$164) + ) + ) + (block $do-once59 + (if + (get_local $$cmp124$i$i) + (block + (i32.store + (get_local $$arrayidx123$i$i) + (get_local $$R$3$i$i) + ) + (set_local $$cond2$i$i + (i32.eq + (get_local $$R$3$i$i) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cond2$i$i) + ) + (br $do-once59) + ) + (set_local $$shl131$i$i + (i32.shl + (i32.const 1) + (get_local $$163) + ) + ) + (set_local $$neg132$i$i + (i32.xor + (get_local $$shl131$i$i) + (i32.const -1) + ) + ) + (set_local $$165 + (i32.load + (i32.const 180) + ) + ) + (set_local $$and133$i$i + (i32.and + (get_local $$165) + (get_local $$neg132$i$i) + ) + ) + (i32.store + (i32.const 180) + (get_local $$and133$i$i) + ) + (br $label$break$L331) + ) + (block + (set_local $$166 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp137$i$i + (i32.lt_u + (get_local $$154) + (get_local $$166) + ) + ) + (if + (get_local $$cmp137$i$i) + (call $_abort) + ) + (set_local $$arrayidx143$i$i + (i32.add + (get_local $$154) + (i32.const 16) + ) + ) + (set_local $$167 + (i32.load + (get_local $$arrayidx143$i$i) + ) + ) + (set_local $$cmp144$i$i + (i32.eq + (get_local $$167) + (get_local $$add$ptr16$i$i) + ) + ) + (if + (get_local $$cmp144$i$i) + (i32.store + (get_local $$arrayidx143$i$i) + (get_local $$R$3$i$i) + ) + (block + (set_local $$arrayidx151$i$i + (i32.add + (get_local $$154) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx151$i$i) + (get_local $$R$3$i$i) + ) + ) + ) + (set_local $$cmp156$i$i + (i32.eq + (get_local $$R$3$i$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp156$i$i) + (br $label$break$L331) + ) + ) + ) + ) + (set_local $$168 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp160$i$i + (i32.lt_u + (get_local $$R$3$i$i) + (get_local $$168) + ) + ) + (if + (get_local $$cmp160$i$i) + (call $_abort) + ) + (set_local $$parent165$i$i + (i32.add + (get_local $$R$3$i$i) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent165$i$i) + (get_local $$154) + ) + (set_local $$child166$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 16) + ) + ) + (set_local $$169 + (i32.load + (get_local $$child166$i$i) + ) + ) + (set_local $$cmp168$i$i + (i32.eq + (get_local $$169) + (i32.const 0) + ) + ) + (block $do-once61 + (if + (i32.eqz + (get_local $$cmp168$i$i) + ) + (block + (set_local $$cmp172$i$i + (i32.lt_u + (get_local $$169) + (get_local $$168) + ) + ) + (if + (get_local $$cmp172$i$i) + (call $_abort) + (block + (set_local $$arrayidx178$i$i + (i32.add + (get_local $$R$3$i$i) + (i32.const 16) + ) + ) + (i32.store + (get_local $$arrayidx178$i$i) + (get_local $$169) + ) + (set_local $$parent179$i$i + (i32.add + (get_local $$169) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent179$i$i) + (get_local $$R$3$i$i) + ) + (br $do-once61) + ) + ) + ) + ) + ) + (set_local $$arrayidx184$i$i + (i32.add + (get_local $$child166$i$i) + (i32.const 4) + ) + ) + (set_local $$170 + (i32.load + (get_local $$arrayidx184$i$i) + ) + ) + (set_local $$cmp185$i$i + (i32.eq + (get_local $$170) + (i32.const 0) + ) + ) + (if + (get_local $$cmp185$i$i) + (br $label$break$L331) + ) + (set_local $$171 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp189$i$i + (i32.lt_u + (get_local $$170) + (get_local $$171) + ) + ) + (if + (get_local $$cmp189$i$i) + (call $_abort) + (block + (set_local $$arrayidx195$i$i + (i32.add + (get_local $$R$3$i$i) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx195$i$i) + (get_local $$170) + ) + (set_local $$parent196$i$i + (i32.add + (get_local $$170) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent196$i$i) + (get_local $$R$3$i$i) + ) + (br $label$break$L331) + ) + ) + ) + ) + ) + (set_local $$add$ptr205$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (get_local $$and37$i$i) + ) + ) + (set_local $$add206$i$i + (i32.add + (get_local $$and37$i$i) + (get_local $$sub18$i$i) + ) + ) + (set_local $$oldfirst$0$i$i + (get_local $$add$ptr205$i$i) + ) + (set_local $$qsize$0$i$i + (get_local $$add206$i$i) + ) + ) + (block + (set_local $$oldfirst$0$i$i + (get_local $$add$ptr16$i$i) + ) + (set_local $$qsize$0$i$i + (get_local $$sub18$i$i) + ) + ) + ) + (set_local $$head208$i$i + (i32.add + (get_local $$oldfirst$0$i$i) + (i32.const 4) + ) + ) + (set_local $$172 + (i32.load + (get_local $$head208$i$i) + ) + ) + (set_local $$and209$i$i + (i32.and + (get_local $$172) + (i32.const -2) + ) + ) + (i32.store + (get_local $$head208$i$i) + (get_local $$and209$i$i) + ) + (set_local $$or210$i$i + (i32.or + (get_local $$qsize$0$i$i) + (i32.const 1) + ) + ) + (set_local $$head211$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head211$i$i) + (get_local $$or210$i$i) + ) + (set_local $$add$ptr212$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (get_local $$qsize$0$i$i) + ) + ) + (i32.store + (get_local $$add$ptr212$i$i) + (get_local $$qsize$0$i$i) + ) + (set_local $$shr214$i$i + (i32.shr_u + (get_local $$qsize$0$i$i) + (i32.const 3) + ) + ) + (set_local $$cmp215$i$i + (i32.lt_u + (get_local $$qsize$0$i$i) + (i32.const 256) + ) + ) + (if + (get_local $$cmp215$i$i) + (block + (set_local $$shl221$i$i + (i32.shl + (get_local $$shr214$i$i) + (i32.const 1) + ) + ) + (set_local $$arrayidx223$i$i + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl221$i$i) + (i32.const 2) + ) + ) + ) + (set_local $$173 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shl226$i$i + (i32.shl + (i32.const 1) + (get_local $$shr214$i$i) + ) + ) + (set_local $$and227$i$i + (i32.and + (get_local $$173) + (get_local $$shl226$i$i) + ) + ) + (set_local $$tobool228$i$i + (i32.eq + (get_local $$and227$i$i) + (i32.const 0) + ) + ) + (block $do-once63 + (if + (get_local $$tobool228$i$i) + (block + (set_local $$or232$i$i + (i32.or + (get_local $$173) + (get_local $$shl226$i$i) + ) + ) + (i32.store + (i32.const 176) + (get_local $$or232$i$i) + ) + (set_local $$$pre$i$56$i + (i32.add + (get_local $$arrayidx223$i$i) + (i32.const 8) + ) + ) + (set_local $$$pre$phi$i$57$iZ2D + (get_local $$$pre$i$56$i) + ) + (set_local $$F224$0$i$i + (get_local $$arrayidx223$i$i) + ) + ) + (block + (set_local $$174 + (i32.add + (get_local $$arrayidx223$i$i) + (i32.const 8) + ) + ) + (set_local $$175 + (i32.load + (get_local $$174) + ) + ) + (set_local $$176 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp236$i$i + (i32.lt_u + (get_local $$175) + (get_local $$176) + ) + ) + (if + (i32.eqz + (get_local $$cmp236$i$i) + ) + (block + (set_local $$$pre$phi$i$57$iZ2D + (get_local $$174) + ) + (set_local $$F224$0$i$i + (get_local $$175) + ) + (br $do-once63) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store + (get_local $$$pre$phi$i$57$iZ2D) + (get_local $$add$ptr17$i$i) + ) + (set_local $$bk246$i$i + (i32.add + (get_local $$F224$0$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk246$i$i) + (get_local $$add$ptr17$i$i) + ) + (set_local $$fd247$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd247$i$i) + (get_local $$F224$0$i$i) + ) + (set_local $$bk248$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk248$i$i) + (get_local $$arrayidx223$i$i) + ) + (br $do-once48) + ) + ) + (set_local $$shr253$i$i + (i32.shr_u + (get_local $$qsize$0$i$i) + (i32.const 8) + ) + ) + (set_local $$cmp254$i$i + (i32.eq + (get_local $$shr253$i$i) + (i32.const 0) + ) + ) + (block $do-once65 + (if + (get_local $$cmp254$i$i) + (set_local $$I252$0$i$i + (i32.const 0) + ) + (block + (set_local $$cmp258$i$i + (i32.gt_u + (get_local $$qsize$0$i$i) + (i32.const 16777215) + ) + ) + (if + (get_local $$cmp258$i$i) + (block + (set_local $$I252$0$i$i + (i32.const 31) + ) + (br $do-once65) + ) + ) + (set_local $$sub262$i$i + (i32.add + (get_local $$shr253$i$i) + (i32.const 1048320) + ) + ) + (set_local $$shr263$i$i + (i32.shr_u + (get_local $$sub262$i$i) + (i32.const 16) + ) + ) + (set_local $$and264$i$i + (i32.and + (get_local $$shr263$i$i) + (i32.const 8) + ) + ) + (set_local $$shl265$i$i + (i32.shl + (get_local $$shr253$i$i) + (get_local $$and264$i$i) + ) + ) + (set_local $$sub266$i$i + (i32.add + (get_local $$shl265$i$i) + (i32.const 520192) + ) + ) + (set_local $$shr267$i$i + (i32.shr_u + (get_local $$sub266$i$i) + (i32.const 16) + ) + ) + (set_local $$and268$i$i + (i32.and + (get_local $$shr267$i$i) + (i32.const 4) + ) + ) + (set_local $$add269$i$i + (i32.or + (get_local $$and268$i$i) + (get_local $$and264$i$i) + ) + ) + (set_local $$shl270$i$i + (i32.shl + (get_local $$shl265$i$i) + (get_local $$and268$i$i) + ) + ) + (set_local $$sub271$i$i + (i32.add + (get_local $$shl270$i$i) + (i32.const 245760) + ) + ) + (set_local $$shr272$i$i + (i32.shr_u + (get_local $$sub271$i$i) + (i32.const 16) + ) + ) + (set_local $$and273$i$i + (i32.and + (get_local $$shr272$i$i) + (i32.const 2) + ) + ) + (set_local $$add274$i$i + (i32.or + (get_local $$add269$i$i) + (get_local $$and273$i$i) + ) + ) + (set_local $$sub275$i$i + (i32.sub + (i32.const 14) + (get_local $$add274$i$i) + ) + ) + (set_local $$shl276$i$i + (i32.shl + (get_local $$shl270$i$i) + (get_local $$and273$i$i) + ) + ) + (set_local $$shr277$i$i + (i32.shr_u + (get_local $$shl276$i$i) + (i32.const 15) + ) + ) + (set_local $$add278$i$i + (i32.add + (get_local $$sub275$i$i) + (get_local $$shr277$i$i) + ) + ) + (set_local $$shl279$i$i + (i32.shl + (get_local $$add278$i$i) + (i32.const 1) + ) + ) + (set_local $$add280$i$i + (i32.add + (get_local $$add278$i$i) + (i32.const 7) + ) + ) + (set_local $$shr281$i$i + (i32.shr_u + (get_local $$qsize$0$i$i) + (get_local $$add280$i$i) + ) + ) + (set_local $$and282$i$i + (i32.and + (get_local $$shr281$i$i) + (i32.const 1) + ) + ) + (set_local $$add283$i$i + (i32.or + (get_local $$and282$i$i) + (get_local $$shl279$i$i) + ) + ) + (set_local $$I252$0$i$i + (get_local $$add283$i$i) + ) + ) + ) + ) + (set_local $$arrayidx287$i$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$I252$0$i$i) + (i32.const 2) + ) + ) + ) + (set_local $$index288$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 28) + ) + ) + (i32.store + (get_local $$index288$i$i) + (get_local $$I252$0$i$i) + ) + (set_local $$child289$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 16) + ) + ) + (set_local $$arrayidx290$i$i + (i32.add + (get_local $$child289$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$arrayidx290$i$i) + (i32.const 0) + ) + (i32.store + (get_local $$child289$i$i) + (i32.const 0) + ) + (set_local $$177 + (i32.load + (i32.const 180) + ) + ) + (set_local $$shl294$i$i + (i32.shl + (i32.const 1) + (get_local $$I252$0$i$i) + ) + ) + (set_local $$and295$i$i + (i32.and + (get_local $$177) + (get_local $$shl294$i$i) + ) + ) + (set_local $$tobool296$i$i + (i32.eq + (get_local $$and295$i$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool296$i$i) + (block + (set_local $$or300$i$i + (i32.or + (get_local $$177) + (get_local $$shl294$i$i) + ) + ) + (i32.store + (i32.const 180) + (get_local $$or300$i$i) + ) + (i32.store + (get_local $$arrayidx287$i$i) + (get_local $$add$ptr17$i$i) + ) + (set_local $$parent301$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent301$i$i) + (get_local $$arrayidx287$i$i) + ) + (set_local $$bk302$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk302$i$i) + (get_local $$add$ptr17$i$i) + ) + (set_local $$fd303$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd303$i$i) + (get_local $$add$ptr17$i$i) + ) + (br $do-once48) + ) + ) + (set_local $$178 + (i32.load + (get_local $$arrayidx287$i$i) + ) + ) + (set_local $$cmp306$i$i + (i32.eq + (get_local $$I252$0$i$i) + (i32.const 31) + ) + ) + (set_local $$shr310$i$i + (i32.shr_u + (get_local $$I252$0$i$i) + (i32.const 1) + ) + ) + (set_local $$sub313$i$i + (i32.sub + (i32.const 25) + (get_local $$shr310$i$i) + ) + ) + (set_local $$cond315$i$i + (if (result i32) + (get_local $$cmp306$i$i) + (i32.const 0) + (get_local $$sub313$i$i) + ) + ) + (set_local $$shl316$i$i + (i32.shl + (get_local $$qsize$0$i$i) + (get_local $$cond315$i$i) + ) + ) + (set_local $$K305$0$i$i + (get_local $$shl316$i$i) + ) + (set_local $$T$0$i$58$i + (get_local $$178) + ) + (loop $while-in68 + (block $while-out67 + (set_local $$head317$i$i + (i32.add + (get_local $$T$0$i$58$i) + (i32.const 4) + ) + ) + (set_local $$179 + (i32.load + (get_local $$head317$i$i) + ) + ) + (set_local $$and318$i$i + (i32.and + (get_local $$179) + (i32.const -8) + ) + ) + (set_local $$cmp319$i$i + (i32.eq + (get_local $$and318$i$i) + (get_local $$qsize$0$i$i) + ) + ) + (if + (get_local $$cmp319$i$i) + (block + (set_local $$T$0$i$58$i$lcssa + (get_local $$T$0$i$58$i) + ) + (set_local $label + (i32.const 281) + ) + (br $while-out67) + ) + ) + (set_local $$shr322$i$i + (i32.shr_u + (get_local $$K305$0$i$i) + (i32.const 31) + ) + ) + (set_local $$arrayidx325$i$i + (i32.add + (i32.add + (get_local $$T$0$i$58$i) + (i32.const 16) + ) + (i32.shl + (get_local $$shr322$i$i) + (i32.const 2) + ) + ) + ) + (set_local $$shl326$i$i + (i32.shl + (get_local $$K305$0$i$i) + (i32.const 1) + ) + ) + (set_local $$180 + (i32.load + (get_local $$arrayidx325$i$i) + ) + ) + (set_local $$cmp327$i$i + (i32.eq + (get_local $$180) + (i32.const 0) + ) + ) + (if + (get_local $$cmp327$i$i) + (block + (set_local $$T$0$i$58$i$lcssa283 + (get_local $$T$0$i$58$i) + ) + (set_local $$arrayidx325$i$i$lcssa + (get_local $$arrayidx325$i$i) + ) + (set_local $label + (i32.const 278) + ) + (br $while-out67) + ) + (block + (set_local $$K305$0$i$i + (get_local $$shl326$i$i) + ) + (set_local $$T$0$i$58$i + (get_local $$180) + ) + ) + ) + (br $while-in68) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 278) + ) + (block + (set_local $$181 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp332$i$i + (i32.lt_u + (get_local $$arrayidx325$i$i$lcssa) + (get_local $$181) + ) + ) + (if + (get_local $$cmp332$i$i) + (call $_abort) + (block + (i32.store + (get_local $$arrayidx325$i$i$lcssa) + (get_local $$add$ptr17$i$i) + ) + (set_local $$parent337$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent337$i$i) + (get_local $$T$0$i$58$i$lcssa283) + ) + (set_local $$bk338$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk338$i$i) + (get_local $$add$ptr17$i$i) + ) + (set_local $$fd339$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd339$i$i) + (get_local $$add$ptr17$i$i) + ) + (br $do-once48) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 281) + ) + (block + (set_local $$fd344$i$i + (i32.add + (get_local $$T$0$i$58$i$lcssa) + (i32.const 8) + ) + ) + (set_local $$182 + (i32.load + (get_local $$fd344$i$i) + ) + ) + (set_local $$183 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp350$i$i + (i32.ge_u + (get_local $$182) + (get_local $$183) + ) + ) + (set_local $$not$cmp346$i$i + (i32.ge_u + (get_local $$T$0$i$58$i$lcssa) + (get_local $$183) + ) + ) + (set_local $$184 + (i32.and + (get_local $$cmp350$i$i) + (get_local $$not$cmp346$i$i) + ) + ) + (if + (get_local $$184) + (block + (set_local $$bk357$i$i + (i32.add + (get_local $$182) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk357$i$i) + (get_local $$add$ptr17$i$i) + ) + (i32.store + (get_local $$fd344$i$i) + (get_local $$add$ptr17$i$i) + ) + (set_local $$fd359$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd359$i$i) + (get_local $$182) + ) + (set_local $$bk360$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk360$i$i) + (get_local $$T$0$i$58$i$lcssa) + ) + (set_local $$parent361$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent361$i$i) + (i32.const 0) + ) + (br $do-once48) + ) + (call $_abort) + ) + ) + ) + ) + ) + ) + ) + (set_local $$add$ptr369$i$i + (i32.add + (get_local $$add$ptr4$i$37$i) + (i32.const 8) + ) + ) + (set_local $$retval$0 + (get_local $$add$ptr369$i$i) + ) + (return + (get_local $$retval$0) + ) + ) + (set_local $$sp$0$i$i$i + (i32.const 624) + ) + ) + ) + ) + (loop $while-in70 + (block $while-out69 + (set_local $$185 + (i32.load + (get_local $$sp$0$i$i$i) + ) + ) + (set_local $$cmp$i$i$i + (i32.gt_u + (get_local $$185) + (get_local $$119) + ) + ) + (if + (i32.eqz + (get_local $$cmp$i$i$i) + ) + (block + (set_local $$size$i$i$i + (i32.add + (get_local $$sp$0$i$i$i) + (i32.const 4) + ) + ) + (set_local $$186 + (i32.load + (get_local $$size$i$i$i) + ) + ) + (set_local $$add$ptr$i$i$i + (i32.add + (get_local $$185) + (get_local $$186) + ) + ) + (set_local $$cmp2$i$i$i + (i32.gt_u + (get_local $$add$ptr$i$i$i) + (get_local $$119) + ) + ) + (if + (get_local $$cmp2$i$i$i) + (block + (set_local $$add$ptr$i$i$i$lcssa + (get_local $$add$ptr$i$i$i) + ) + (br $while-out69) + ) + ) + ) + ) + (set_local $$next$i$i$i + (i32.add + (get_local $$sp$0$i$i$i) + (i32.const 8) + ) + ) + (set_local $$187 + (i32.load + (get_local $$next$i$i$i) + ) + ) + (set_local $$sp$0$i$i$i + (get_local $$187) + ) + (br $while-in70) + ) + ) + (set_local $$add$ptr2$i$i + (i32.add + (get_local $$add$ptr$i$i$i$lcssa) + (i32.const -47) + ) + ) + (set_local $$add$ptr3$i$i + (i32.add + (get_local $$add$ptr2$i$i) + (i32.const 8) + ) + ) + (set_local $$188 + (get_local $$add$ptr3$i$i) + ) + (set_local $$and$i$14$i + (i32.and + (get_local $$188) + (i32.const 7) + ) + ) + (set_local $$cmp$i$15$i + (i32.eq + (get_local $$and$i$14$i) + (i32.const 0) + ) + ) + (set_local $$189 + (i32.sub + (i32.const 0) + (get_local $$188) + ) + ) + (set_local $$and6$i$i + (i32.and + (get_local $$189) + (i32.const 7) + ) + ) + (set_local $$cond$i$16$i + (if (result i32) + (get_local $$cmp$i$15$i) + (i32.const 0) + (get_local $$and6$i$i) + ) + ) + (set_local $$add$ptr7$i$i + (i32.add + (get_local $$add$ptr2$i$i) + (get_local $$cond$i$16$i) + ) + ) + (set_local $$add$ptr8$i122$i + (i32.add + (get_local $$119) + (i32.const 16) + ) + ) + (set_local $$cmp9$i$i + (i32.lt_u + (get_local $$add$ptr7$i$i) + (get_local $$add$ptr8$i122$i) + ) + ) + (set_local $$cond13$i$i + (if (result i32) + (get_local $$cmp9$i$i) + (get_local $$119) + (get_local $$add$ptr7$i$i) + ) + ) + (set_local $$add$ptr14$i$i + (i32.add + (get_local $$cond13$i$i) + (i32.const 8) + ) + ) + (set_local $$add$ptr15$i$i + (i32.add + (get_local $$cond13$i$i) + (i32.const 24) + ) + ) + (set_local $$sub16$i$i + (i32.add + (get_local $$tsize$795$i) + (i32.const -40) + ) + ) + (set_local $$add$ptr$i$1$i$i + (i32.add + (get_local $$tbase$796$i) + (i32.const 8) + ) + ) + (set_local $$190 + (get_local $$add$ptr$i$1$i$i) + ) + (set_local $$and$i$i$i + (i32.and + (get_local $$190) + (i32.const 7) + ) + ) + (set_local $$cmp$i$2$i$i + (i32.eq + (get_local $$and$i$i$i) + (i32.const 0) + ) + ) + (set_local $$191 + (i32.sub + (i32.const 0) + (get_local $$190) + ) + ) + (set_local $$and3$i$i$i + (i32.and + (get_local $$191) + (i32.const 7) + ) + ) + (set_local $$cond$i$i$i + (if (result i32) + (get_local $$cmp$i$2$i$i) + (i32.const 0) + (get_local $$and3$i$i$i) + ) + ) + (set_local $$add$ptr4$i$i$i + (i32.add + (get_local $$tbase$796$i) + (get_local $$cond$i$i$i) + ) + ) + (set_local $$sub5$i$i$i + (i32.sub + (get_local $$sub16$i$i) + (get_local $$cond$i$i$i) + ) + ) + (i32.store + (i32.const 200) + (get_local $$add$ptr4$i$i$i) + ) + (i32.store + (i32.const 188) + (get_local $$sub5$i$i$i) + ) + (set_local $$or$i$i$i + (i32.or + (get_local $$sub5$i$i$i) + (i32.const 1) + ) + ) + (set_local $$head$i$i$i + (i32.add + (get_local $$add$ptr4$i$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head$i$i$i) + (get_local $$or$i$i$i) + ) + (set_local $$add$ptr6$i$i$i + (i32.add + (get_local $$add$ptr4$i$i$i) + (get_local $$sub5$i$i$i) + ) + ) + (set_local $$head7$i$i$i + (i32.add + (get_local $$add$ptr6$i$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head7$i$i$i) + (i32.const 40) + ) + (set_local $$192 + (i32.load + (i32.const 664) + ) + ) + (i32.store + (i32.const 204) + (get_local $$192) + ) + (set_local $$head$i$17$i + (i32.add + (get_local $$cond13$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head$i$17$i) + (i32.const 27) + ) + (i32.store + (get_local $$add$ptr14$i$i) + (i32.load + (i32.const 624) + ) + ) + (i32.store + (i32.add + (get_local $$add$ptr14$i$i) + (i32.const 4) + ) + (i32.load + (i32.add + (i32.const 624) + (i32.const 4) + ) + ) + ) + (i32.store + (i32.add + (get_local $$add$ptr14$i$i) + (i32.const 8) + ) + (i32.load + (i32.add + (i32.const 624) + (i32.const 8) + ) + ) + ) + (i32.store + (i32.add + (get_local $$add$ptr14$i$i) + (i32.const 12) + ) + (i32.load + (i32.add + (i32.const 624) + (i32.const 12) + ) + ) + ) + (i32.store + (i32.const 624) + (get_local $$tbase$796$i) + ) + (i32.store + (i32.const 628) + (get_local $$tsize$795$i) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 632) + (get_local $$add$ptr14$i$i) + ) + (set_local $$p$0$i$i + (get_local $$add$ptr15$i$i) + ) + (loop $while-in72 + (block $while-out71 + (set_local $$add$ptr24$i$i + (i32.add + (get_local $$p$0$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$add$ptr24$i$i) + (i32.const 7) + ) + (set_local $$193 + (i32.add + (get_local $$add$ptr24$i$i) + (i32.const 4) + ) + ) + (set_local $$cmp27$i$i + (i32.lt_u + (get_local $$193) + (get_local $$add$ptr$i$i$i$lcssa) + ) + ) + (if + (get_local $$cmp27$i$i) + (set_local $$p$0$i$i + (get_local $$add$ptr24$i$i) + ) + (br $while-out71) + ) + (br $while-in72) + ) + ) + (set_local $$cmp28$i$i + (i32.eq + (get_local $$cond13$i$i) + (get_local $$119) + ) + ) + (if + (i32.eqz + (get_local $$cmp28$i$i) + ) + (block + (set_local $$sub$ptr$lhs$cast$i$i + (get_local $$cond13$i$i) + ) + (set_local $$sub$ptr$rhs$cast$i$i + (get_local $$119) + ) + (set_local $$sub$ptr$sub$i$i + (i32.sub + (get_local $$sub$ptr$lhs$cast$i$i) + (get_local $$sub$ptr$rhs$cast$i$i) + ) + ) + (set_local $$194 + (i32.load + (get_local $$head$i$17$i) + ) + ) + (set_local $$and32$i$i + (i32.and + (get_local $$194) + (i32.const -2) + ) + ) + (i32.store + (get_local $$head$i$17$i) + (get_local $$and32$i$i) + ) + (set_local $$or33$i$i + (i32.or + (get_local $$sub$ptr$sub$i$i) + (i32.const 1) + ) + ) + (set_local $$head34$i$i + (i32.add + (get_local $$119) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head34$i$i) + (get_local $$or33$i$i) + ) + (i32.store + (get_local $$cond13$i$i) + (get_local $$sub$ptr$sub$i$i) + ) + (set_local $$shr$i$i + (i32.shr_u + (get_local $$sub$ptr$sub$i$i) + (i32.const 3) + ) + ) + (set_local $$cmp36$i$i + (i32.lt_u + (get_local $$sub$ptr$sub$i$i) + (i32.const 256) + ) + ) + (if + (get_local $$cmp36$i$i) + (block + (set_local $$shl$i$19$i + (i32.shl + (get_local $$shr$i$i) + (i32.const 1) + ) + ) + (set_local $$arrayidx$i$20$i + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl$i$19$i) + (i32.const 2) + ) + ) + ) + (set_local $$195 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shl39$i$i + (i32.shl + (i32.const 1) + (get_local $$shr$i$i) + ) + ) + (set_local $$and40$i$i + (i32.and + (get_local $$195) + (get_local $$shl39$i$i) + ) + ) + (set_local $$tobool$i$i + (i32.eq + (get_local $$and40$i$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$i) + (block + (set_local $$or44$i$i + (i32.or + (get_local $$195) + (get_local $$shl39$i$i) + ) + ) + (i32.store + (i32.const 176) + (get_local $$or44$i$i) + ) + (set_local $$$pre$i$i + (i32.add + (get_local $$arrayidx$i$20$i) + (i32.const 8) + ) + ) + (set_local $$$pre$phi$i$iZ2D + (get_local $$$pre$i$i) + ) + (set_local $$F$0$i$i + (get_local $$arrayidx$i$20$i) + ) + ) + (block + (set_local $$196 + (i32.add + (get_local $$arrayidx$i$20$i) + (i32.const 8) + ) + ) + (set_local $$197 + (i32.load + (get_local $$196) + ) + ) + (set_local $$198 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp46$i$i + (i32.lt_u + (get_local $$197) + (get_local $$198) + ) + ) + (if + (get_local $$cmp46$i$i) + (call $_abort) + (block + (set_local $$$pre$phi$i$iZ2D + (get_local $$196) + ) + (set_local $$F$0$i$i + (get_local $$197) + ) + ) + ) + ) + ) + (i32.store + (get_local $$$pre$phi$i$iZ2D) + (get_local $$119) + ) + (set_local $$bk$i$i + (i32.add + (get_local $$F$0$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk$i$i) + (get_local $$119) + ) + (set_local $$fd54$i$i + (i32.add + (get_local $$119) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd54$i$i) + (get_local $$F$0$i$i) + ) + (set_local $$bk55$i$i + (i32.add + (get_local $$119) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk55$i$i) + (get_local $$arrayidx$i$20$i) + ) + (br $do-once40) + ) + ) + (set_local $$shr58$i$i + (i32.shr_u + (get_local $$sub$ptr$sub$i$i) + (i32.const 8) + ) + ) + (set_local $$cmp59$i$i + (i32.eq + (get_local $$shr58$i$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp59$i$i) + (set_local $$I57$0$i$i + (i32.const 0) + ) + (block + (set_local $$cmp63$i$i + (i32.gt_u + (get_local $$sub$ptr$sub$i$i) + (i32.const 16777215) + ) + ) + (if + (get_local $$cmp63$i$i) + (set_local $$I57$0$i$i + (i32.const 31) + ) + (block + (set_local $$sub67$i$i + (i32.add + (get_local $$shr58$i$i) + (i32.const 1048320) + ) + ) + (set_local $$shr68$i$i + (i32.shr_u + (get_local $$sub67$i$i) + (i32.const 16) + ) + ) + (set_local $$and69$i$i + (i32.and + (get_local $$shr68$i$i) + (i32.const 8) + ) + ) + (set_local $$shl70$i$i + (i32.shl + (get_local $$shr58$i$i) + (get_local $$and69$i$i) + ) + ) + (set_local $$sub71$i$i + (i32.add + (get_local $$shl70$i$i) + (i32.const 520192) + ) + ) + (set_local $$shr72$i$i + (i32.shr_u + (get_local $$sub71$i$i) + (i32.const 16) + ) + ) + (set_local $$and73$i$i + (i32.and + (get_local $$shr72$i$i) + (i32.const 4) + ) + ) + (set_local $$add74$i$i + (i32.or + (get_local $$and73$i$i) + (get_local $$and69$i$i) + ) + ) + (set_local $$shl75$i$i + (i32.shl + (get_local $$shl70$i$i) + (get_local $$and73$i$i) + ) + ) + (set_local $$sub76$i$i + (i32.add + (get_local $$shl75$i$i) + (i32.const 245760) + ) + ) + (set_local $$shr77$i$i + (i32.shr_u + (get_local $$sub76$i$i) + (i32.const 16) + ) + ) + (set_local $$and78$i$i + (i32.and + (get_local $$shr77$i$i) + (i32.const 2) + ) + ) + (set_local $$add79$i$i + (i32.or + (get_local $$add74$i$i) + (get_local $$and78$i$i) + ) + ) + (set_local $$sub80$i$i + (i32.sub + (i32.const 14) + (get_local $$add79$i$i) + ) + ) + (set_local $$shl81$i$i + (i32.shl + (get_local $$shl75$i$i) + (get_local $$and78$i$i) + ) + ) + (set_local $$shr82$i$i + (i32.shr_u + (get_local $$shl81$i$i) + (i32.const 15) + ) + ) + (set_local $$add83$i$i + (i32.add + (get_local $$sub80$i$i) + (get_local $$shr82$i$i) + ) + ) + (set_local $$shl84$i$i + (i32.shl + (get_local $$add83$i$i) + (i32.const 1) + ) + ) + (set_local $$add85$i$i + (i32.add + (get_local $$add83$i$i) + (i32.const 7) + ) + ) + (set_local $$shr86$i$i + (i32.shr_u + (get_local $$sub$ptr$sub$i$i) + (get_local $$add85$i$i) + ) + ) + (set_local $$and87$i$i + (i32.and + (get_local $$shr86$i$i) + (i32.const 1) + ) + ) + (set_local $$add88$i$i + (i32.or + (get_local $$and87$i$i) + (get_local $$shl84$i$i) + ) + ) + (set_local $$I57$0$i$i + (get_local $$add88$i$i) + ) + ) + ) + ) + ) + (set_local $$arrayidx91$i$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$I57$0$i$i) + (i32.const 2) + ) + ) + ) + (set_local $$index$i$i + (i32.add + (get_local $$119) + (i32.const 28) + ) + ) + (i32.store + (get_local $$index$i$i) + (get_local $$I57$0$i$i) + ) + (set_local $$arrayidx92$i$i + (i32.add + (get_local $$119) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx92$i$i) + (i32.const 0) + ) + (i32.store + (get_local $$add$ptr8$i122$i) + (i32.const 0) + ) + (set_local $$199 + (i32.load + (i32.const 180) + ) + ) + (set_local $$shl95$i$i + (i32.shl + (i32.const 1) + (get_local $$I57$0$i$i) + ) + ) + (set_local $$and96$i$i + (i32.and + (get_local $$199) + (get_local $$shl95$i$i) + ) + ) + (set_local $$tobool97$i$i + (i32.eq + (get_local $$and96$i$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool97$i$i) + (block + (set_local $$or101$i$i + (i32.or + (get_local $$199) + (get_local $$shl95$i$i) + ) + ) + (i32.store + (i32.const 180) + (get_local $$or101$i$i) + ) + (i32.store + (get_local $$arrayidx91$i$i) + (get_local $$119) + ) + (set_local $$parent$i$i + (i32.add + (get_local $$119) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent$i$i) + (get_local $$arrayidx91$i$i) + ) + (set_local $$bk102$i$i + (i32.add + (get_local $$119) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk102$i$i) + (get_local $$119) + ) + (set_local $$fd103$i$i + (i32.add + (get_local $$119) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd103$i$i) + (get_local $$119) + ) + (br $do-once40) + ) + ) + (set_local $$200 + (i32.load + (get_local $$arrayidx91$i$i) + ) + ) + (set_local $$cmp106$i$i + (i32.eq + (get_local $$I57$0$i$i) + (i32.const 31) + ) + ) + (set_local $$shr110$i$i + (i32.shr_u + (get_local $$I57$0$i$i) + (i32.const 1) + ) + ) + (set_local $$sub113$i$i + (i32.sub + (i32.const 25) + (get_local $$shr110$i$i) + ) + ) + (set_local $$cond115$i$i + (if (result i32) + (get_local $$cmp106$i$i) + (i32.const 0) + (get_local $$sub113$i$i) + ) + ) + (set_local $$shl116$i$i + (i32.shl + (get_local $$sub$ptr$sub$i$i) + (get_local $$cond115$i$i) + ) + ) + (set_local $$K105$0$i$i + (get_local $$shl116$i$i) + ) + (set_local $$T$0$i$i + (get_local $$200) + ) + (loop $while-in74 + (block $while-out73 + (set_local $$head118$i$i + (i32.add + (get_local $$T$0$i$i) + (i32.const 4) + ) + ) + (set_local $$201 + (i32.load + (get_local $$head118$i$i) + ) + ) + (set_local $$and119$i$i + (i32.and + (get_local $$201) + (i32.const -8) + ) + ) + (set_local $$cmp120$i$i + (i32.eq + (get_local $$and119$i$i) + (get_local $$sub$ptr$sub$i$i) + ) + ) + (if + (get_local $$cmp120$i$i) + (block + (set_local $$T$0$i$i$lcssa + (get_local $$T$0$i$i) + ) + (set_local $label + (i32.const 307) + ) + (br $while-out73) + ) + ) + (set_local $$shr123$i$i + (i32.shr_u + (get_local $$K105$0$i$i) + (i32.const 31) + ) + ) + (set_local $$arrayidx126$i$i + (i32.add + (i32.add + (get_local $$T$0$i$i) + (i32.const 16) + ) + (i32.shl + (get_local $$shr123$i$i) + (i32.const 2) + ) + ) + ) + (set_local $$shl127$i$i + (i32.shl + (get_local $$K105$0$i$i) + (i32.const 1) + ) + ) + (set_local $$202 + (i32.load + (get_local $$arrayidx126$i$i) + ) + ) + (set_local $$cmp128$i$i + (i32.eq + (get_local $$202) + (i32.const 0) + ) + ) + (if + (get_local $$cmp128$i$i) + (block + (set_local $$T$0$i$i$lcssa284 + (get_local $$T$0$i$i) + ) + (set_local $$arrayidx126$i$i$lcssa + (get_local $$arrayidx126$i$i) + ) + (set_local $label + (i32.const 304) + ) + (br $while-out73) + ) + (block + (set_local $$K105$0$i$i + (get_local $$shl127$i$i) + ) + (set_local $$T$0$i$i + (get_local $$202) + ) + ) + ) + (br $while-in74) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 304) + ) + (block + (set_local $$203 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp133$i$i + (i32.lt_u + (get_local $$arrayidx126$i$i$lcssa) + (get_local $$203) + ) + ) + (if + (get_local $$cmp133$i$i) + (call $_abort) + (block + (i32.store + (get_local $$arrayidx126$i$i$lcssa) + (get_local $$119) + ) + (set_local $$parent138$i$i + (i32.add + (get_local $$119) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent138$i$i) + (get_local $$T$0$i$i$lcssa284) + ) + (set_local $$bk139$i$i + (i32.add + (get_local $$119) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk139$i$i) + (get_local $$119) + ) + (set_local $$fd140$i$i + (i32.add + (get_local $$119) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd140$i$i) + (get_local $$119) + ) + (br $do-once40) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 307) + ) + (block + (set_local $$fd148$i$i + (i32.add + (get_local $$T$0$i$i$lcssa) + (i32.const 8) + ) + ) + (set_local $$204 + (i32.load + (get_local $$fd148$i$i) + ) + ) + (set_local $$205 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp153$i$i + (i32.ge_u + (get_local $$204) + (get_local $$205) + ) + ) + (set_local $$not$cmp150$i$i + (i32.ge_u + (get_local $$T$0$i$i$lcssa) + (get_local $$205) + ) + ) + (set_local $$206 + (i32.and + (get_local $$cmp153$i$i) + (get_local $$not$cmp150$i$i) + ) + ) + (if + (get_local $$206) + (block + (set_local $$bk158$i$i + (i32.add + (get_local $$204) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk158$i$i) + (get_local $$119) + ) + (i32.store + (get_local $$fd148$i$i) + (get_local $$119) + ) + (set_local $$fd160$i$i + (i32.add + (get_local $$119) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd160$i$i) + (get_local $$204) + ) + (set_local $$bk161$i$i + (i32.add + (get_local $$119) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk161$i$i) + (get_local $$T$0$i$i$lcssa) + ) + (set_local $$parent162$i$i + (i32.add + (get_local $$119) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent162$i$i) + (i32.const 0) + ) + (br $do-once40) + ) + (call $_abort) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $$207 + (i32.load + (i32.const 188) + ) + ) + (set_local $$cmp257$i + (i32.gt_u + (get_local $$207) + (get_local $$nb$0) + ) + ) + (if + (get_local $$cmp257$i) + (block + (set_local $$sub260$i + (i32.sub + (get_local $$207) + (get_local $$nb$0) + ) + ) + (i32.store + (i32.const 188) + (get_local $$sub260$i) + ) + (set_local $$208 + (i32.load + (i32.const 200) + ) + ) + (set_local $$add$ptr262$i + (i32.add + (get_local $$208) + (get_local $$nb$0) + ) + ) + (i32.store + (i32.const 200) + (get_local $$add$ptr262$i) + ) + (set_local $$or264$i + (i32.or + (get_local $$sub260$i) + (i32.const 1) + ) + ) + (set_local $$head265$i + (i32.add + (get_local $$add$ptr262$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head265$i) + (get_local $$or264$i) + ) + (set_local $$or267$i + (i32.or + (get_local $$nb$0) + (i32.const 3) + ) + ) + (set_local $$head268$i + (i32.add + (get_local $$208) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head268$i) + (get_local $$or267$i) + ) + (set_local $$add$ptr269$i + (i32.add + (get_local $$208) + (i32.const 8) + ) + ) + (set_local $$retval$0 + (get_local $$add$ptr269$i) + ) + (return + (get_local $$retval$0) + ) + ) + ) + ) + ) + (set_local $$call275$i + (call $___errno_location) + ) + (i32.store + (get_local $$call275$i) + (i32.const 12) + ) + (set_local $$retval$0 + (i32.const 0) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_free (; 60 ;) (param $$mem i32) + (local $$$pre i32) + (local $$$pre$phiZ2D i32) + (local $$$pre312 i32) + (local $$$pre313 i32) + (local $$0 i32) + (local $$1 i32) + (local $$10 i32) + (local $$11 i32) + (local $$12 i32) + (local $$13 i32) + (local $$14 i32) + (local $$15 i32) + (local $$16 i32) + (local $$17 i32) + (local $$18 i32) + (local $$19 i32) + (local $$2 i32) + (local $$20 i32) + (local $$21 i32) + (local $$22 i32) + (local $$23 i32) + (local $$24 i32) + (local $$25 i32) + (local $$26 i32) + (local $$27 i32) + (local $$28 i32) + (local $$29 i32) + (local $$3 i32) + (local $$30 i32) + (local $$31 i32) + (local $$32 i32) + (local $$33 i32) + (local $$34 i32) + (local $$35 i32) + (local $$36 i32) + (local $$37 i32) + (local $$38 i32) + (local $$39 i32) + (local $$4 i32) + (local $$40 i32) + (local $$41 i32) + (local $$42 i32) + (local $$43 i32) + (local $$44 i32) + (local $$45 i32) + (local $$46 i32) + (local $$47 i32) + (local $$48 i32) + (local $$49 i32) + (local $$5 i32) + (local $$50 i32) + (local $$51 i32) + (local $$52 i32) + (local $$53 i32) + (local $$54 i32) + (local $$55 i32) + (local $$56 i32) + (local $$57 i32) + (local $$58 i32) + (local $$59 i32) + (local $$6 i32) + (local $$60 i32) + (local $$61 i32) + (local $$62 i32) + (local $$63 i32) + (local $$64 i32) + (local $$65 i32) + (local $$66 i32) + (local $$67 i32) + (local $$68 i32) + (local $$69 i32) + (local $$7 i32) + (local $$70 i32) + (local $$71 i32) + (local $$72 i32) + (local $$73 i32) + (local $$74 i32) + (local $$8 i32) + (local $$9 i32) + (local $$F510$0 i32) + (local $$I534$0 i32) + (local $$K583$0 i32) + (local $$R$1 i32) + (local $$R$1$lcssa i32) + (local $$R$3 i32) + (local $$R332$1 i32) + (local $$R332$1$lcssa i32) + (local $$R332$3 i32) + (local $$RP$1 i32) + (local $$RP$1$lcssa i32) + (local $$RP360$1 i32) + (local $$RP360$1$lcssa i32) + (local $$T$0 i32) + (local $$T$0$lcssa i32) + (local $$T$0$lcssa319 i32) + (local $$add$ptr i32) + (local $$add$ptr16 i32) + (local $$add$ptr217 i32) + (local $$add$ptr261 i32) + (local $$add$ptr482 i32) + (local $$add$ptr498 i32) + (local $$add$ptr6 i32) + (local $$add17 i32) + (local $$add246 i32) + (local $$add258 i32) + (local $$add267 i32) + (local $$add550 i32) + (local $$add555 i32) + (local $$add559 i32) + (local $$add561 i32) + (local $$add564 i32) + (local $$and i32) + (local $$and140 i32) + (local $$and210 i32) + (local $$and215 i32) + (local $$and232 i32) + (local $$and240 i32) + (local $$and266 i32) + (local $$and301 i32) + (local $$and410 i32) + (local $$and46 i32) + (local $$and495 i32) + (local $$and5 i32) + (local $$and512 i32) + (local $$and545 i32) + (local $$and549 i32) + (local $$and554 i32) + (local $$and563 i32) + (local $$and574 i32) + (local $$and592 i32) + (local $$and8 i32) + (local $$arrayidx i32) + (local $$arrayidx108 i32) + (local $$arrayidx113 i32) + (local $$arrayidx130 i32) + (local $$arrayidx149 i32) + (local $$arrayidx157 i32) + (local $$arrayidx182 i32) + (local $$arrayidx188 i32) + (local $$arrayidx198 i32) + (local $$arrayidx279 i32) + (local $$arrayidx362 i32) + (local $$arrayidx374 i32) + (local $$arrayidx379 i32) + (local $$arrayidx400 i32) + (local $$arrayidx419 i32) + (local $$arrayidx427 i32) + (local $$arrayidx454 i32) + (local $$arrayidx460 i32) + (local $$arrayidx470 i32) + (local $$arrayidx509 i32) + (local $$arrayidx567 i32) + (local $$arrayidx570 i32) + (local $$arrayidx599 i32) + (local $$arrayidx599$lcssa i32) + (local $$arrayidx99 i32) + (local $$bk i32) + (local $$bk275 i32) + (local $$bk286 i32) + (local $$bk321 i32) + (local $$bk333 i32) + (local $$bk34 i32) + (local $$bk343 i32) + (local $$bk529 i32) + (local $$bk531 i32) + (local $$bk580 i32) + (local $$bk611 i32) + (local $$bk631 i32) + (local $$bk634 i32) + (local $$bk66 i32) + (local $$bk73 i32) + (local $$bk82 i32) + (local $$child i32) + (local $$child171 i32) + (local $$child361 i32) + (local $$child443 i32) + (local $$child569 i32) + (local $$cmp i32) + (local $$cmp$i i32) + (local $$cmp1 i32) + (local $$cmp100 i32) + (local $$cmp104 i32) + (local $$cmp109 i32) + (local $$cmp114 i32) + (local $$cmp118 i32) + (local $$cmp127 i32) + (local $$cmp13 i32) + (local $$cmp131 i32) + (local $$cmp143 i32) + (local $$cmp150 i32) + (local $$cmp162 i32) + (local $$cmp165 i32) + (local $$cmp173 i32) + (local $$cmp176 i32) + (local $$cmp18 i32) + (local $$cmp189 i32) + (local $$cmp192 i32) + (local $$cmp2 i32) + (local $$cmp211 i32) + (local $$cmp22 i32) + (local $$cmp228 i32) + (local $$cmp243 i32) + (local $$cmp249 i32) + (local $$cmp25 i32) + (local $$cmp255 i32) + (local $$cmp269 i32) + (local $$cmp280 i32) + (local $$cmp283 i32) + (local $$cmp287 i32) + (local $$cmp29 i32) + (local $$cmp296 i32) + (local $$cmp305 i32) + (local $$cmp308 i32) + (local $$cmp31 i32) + (local $$cmp312 i32) + (local $$cmp334 i32) + (local $$cmp340 i32) + (local $$cmp344 i32) + (local $$cmp348 i32) + (local $$cmp35 i32) + (local $$cmp363 i32) + (local $$cmp368 i32) + (local $$cmp375 i32) + (local $$cmp380 i32) + (local $$cmp386 i32) + (local $$cmp395 i32) + (local $$cmp401 i32) + (local $$cmp413 i32) + (local $$cmp42 i32) + (local $$cmp420 i32) + (local $$cmp432 i32) + (local $$cmp435 i32) + (local $$cmp445 i32) + (local $$cmp448 i32) + (local $$cmp461 i32) + (local $$cmp464 i32) + (local $$cmp484 i32) + (local $$cmp50 i32) + (local $$cmp502 i32) + (local $$cmp519 i32) + (local $$cmp53 i32) + (local $$cmp536 i32) + (local $$cmp540 i32) + (local $$cmp57 i32) + (local $$cmp584 i32) + (local $$cmp593 i32) + (local $$cmp601 i32) + (local $$cmp605 i32) + (local $$cmp624 i32) + (local $$cmp640 i32) + (local $$cmp74 i32) + (local $$cmp80 i32) + (local $$cmp83 i32) + (local $$cmp87 i32) + (local $$cond i32) + (local $$cond291 i32) + (local $$cond292 i32) + (local $$dec i32) + (local $$fd i32) + (local $$fd273 i32) + (local $$fd311 i32) + (local $$fd322$pre$phiZ2D i32) + (local $$fd338 i32) + (local $$fd347 i32) + (local $$fd530 i32) + (local $$fd56 i32) + (local $$fd581 i32) + (local $$fd612 i32) + (local $$fd620 i32) + (local $$fd633 i32) + (local $$fd67$pre$phiZ2D i32) + (local $$fd78 i32) + (local $$fd86 i32) + (local $$head i32) + (local $$head209 i32) + (local $$head216 i32) + (local $$head231 i32) + (local $$head248 i32) + (local $$head260 i32) + (local $$head481 i32) + (local $$head497 i32) + (local $$head591 i32) + (local $$idx$neg i32) + (local $$index i32) + (local $$index399 i32) + (local $$index568 i32) + (local $$neg i32) + (local $$neg139 i32) + (local $$neg300 i32) + (local $$neg409 i32) + (local $$next4$i i32) + (local $$not$cmp621 i32) + (local $$or i32) + (local $$or247 i32) + (local $$or259 i32) + (local $$or480 i32) + (local $$or496 i32) + (local $$or516 i32) + (local $$or578 i32) + (local $$p$1 i32) + (local $$parent i32) + (local $$parent170 i32) + (local $$parent183 i32) + (local $$parent199 i32) + (local $$parent331 i32) + (local $$parent442 i32) + (local $$parent455 i32) + (local $$parent471 i32) + (local $$parent579 i32) + (local $$parent610 i32) + (local $$parent635 i32) + (local $$psize$1 i32) + (local $$psize$2 i32) + (local $$shl i32) + (local $$shl138 i32) + (local $$shl278 i32) + (local $$shl299 i32) + (local $$shl408 i32) + (local $$shl45 i32) + (local $$shl508 i32) + (local $$shl511 i32) + (local $$shl546 i32) + (local $$shl551 i32) + (local $$shl557 i32) + (local $$shl560 i32) + (local $$shl573 i32) + (local $$shl590 i32) + (local $$shl600 i32) + (local $$shr i32) + (local $$shr268 i32) + (local $$shr501 i32) + (local $$shr535 i32) + (local $$shr544 i32) + (local $$shr548 i32) + (local $$shr553 i32) + (local $$shr558 i32) + (local $$shr562 i32) + (local $$shr586 i32) + (local $$shr596 i32) + (local $$sp$0$i i32) + (local $$sp$0$in$i i32) + (local $$sub i32) + (local $$sub547 i32) + (local $$sub552 i32) + (local $$sub556 i32) + (local $$sub589 i32) + (local $$tobool233 i32) + (local $$tobool241 i32) + (local $$tobool513 i32) + (local $$tobool575 i32) + (local $$tobool9 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$cmp + (i32.eq + (get_local $$mem) + (i32.const 0) + ) + ) + (if + (get_local $$cmp) + (return) + ) + (set_local $$add$ptr + (i32.add + (get_local $$mem) + (i32.const -8) + ) + ) + (set_local $$0 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp1 + (i32.lt_u + (get_local $$add$ptr) + (get_local $$0) + ) + ) + (if + (get_local $$cmp1) + (call $_abort) + ) + (set_local $$head + (i32.add + (get_local $$mem) + (i32.const -4) + ) + ) + (set_local $$1 + (i32.load + (get_local $$head) + ) + ) + (set_local $$and + (i32.and + (get_local $$1) + (i32.const 3) + ) + ) + (set_local $$cmp2 + (i32.eq + (get_local $$and) + (i32.const 1) + ) + ) + (if + (get_local $$cmp2) + (call $_abort) + ) + (set_local $$and5 + (i32.and + (get_local $$1) + (i32.const -8) + ) + ) + (set_local $$add$ptr6 + (i32.add + (get_local $$add$ptr) + (get_local $$and5) + ) + ) + (set_local $$and8 + (i32.and + (get_local $$1) + (i32.const 1) + ) + ) + (set_local $$tobool9 + (i32.eq + (get_local $$and8) + (i32.const 0) + ) + ) + (block $do-once + (if + (get_local $$tobool9) + (block + (set_local $$2 + (i32.load + (get_local $$add$ptr) + ) + ) + (set_local $$cmp13 + (i32.eq + (get_local $$and) + (i32.const 0) + ) + ) + (if + (get_local $$cmp13) + (return) + ) + (set_local $$idx$neg + (i32.sub + (i32.const 0) + (get_local $$2) + ) + ) + (set_local $$add$ptr16 + (i32.add + (get_local $$add$ptr) + (get_local $$idx$neg) + ) + ) + (set_local $$add17 + (i32.add + (get_local $$2) + (get_local $$and5) + ) + ) + (set_local $$cmp18 + (i32.lt_u + (get_local $$add$ptr16) + (get_local $$0) + ) + ) + (if + (get_local $$cmp18) + (call $_abort) + ) + (set_local $$3 + (i32.load + (i32.const 196) + ) + ) + (set_local $$cmp22 + (i32.eq + (get_local $$add$ptr16) + (get_local $$3) + ) + ) + (if + (get_local $$cmp22) + (block + (set_local $$head209 + (i32.add + (get_local $$add$ptr6) + (i32.const 4) + ) + ) + (set_local $$27 + (i32.load + (get_local $$head209) + ) + ) + (set_local $$and210 + (i32.and + (get_local $$27) + (i32.const 3) + ) + ) + (set_local $$cmp211 + (i32.eq + (get_local $$and210) + (i32.const 3) + ) + ) + (if + (i32.eqz + (get_local $$cmp211) + ) + (block + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 184) + (get_local $$add17) + ) + (set_local $$and215 + (i32.and + (get_local $$27) + (i32.const -2) + ) + ) + (i32.store + (get_local $$head209) + (get_local $$and215) + ) + (set_local $$or + (i32.or + (get_local $$add17) + (i32.const 1) + ) + ) + (set_local $$head216 + (i32.add + (get_local $$add$ptr16) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head216) + (get_local $$or) + ) + (set_local $$add$ptr217 + (i32.add + (get_local $$add$ptr16) + (get_local $$add17) + ) + ) + (i32.store + (get_local $$add$ptr217) + (get_local $$add17) + ) + (return) + ) + ) + (set_local $$shr + (i32.shr_u + (get_local $$2) + (i32.const 3) + ) + ) + (set_local $$cmp25 + (i32.lt_u + (get_local $$2) + (i32.const 256) + ) + ) + (if + (get_local $$cmp25) + (block + (set_local $$fd + (i32.add + (get_local $$add$ptr16) + (i32.const 8) + ) + ) + (set_local $$4 + (i32.load + (get_local $$fd) + ) + ) + (set_local $$bk + (i32.add + (get_local $$add$ptr16) + (i32.const 12) + ) + ) + (set_local $$5 + (i32.load + (get_local $$bk) + ) + ) + (set_local $$shl + (i32.shl + (get_local $$shr) + (i32.const 1) + ) + ) + (set_local $$arrayidx + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl) + (i32.const 2) + ) + ) + ) + (set_local $$cmp29 + (i32.eq + (get_local $$4) + (get_local $$arrayidx) + ) + ) + (if + (i32.eqz + (get_local $$cmp29) + ) + (block + (set_local $$cmp31 + (i32.lt_u + (get_local $$4) + (get_local $$0) + ) + ) + (if + (get_local $$cmp31) + (call $_abort) + ) + (set_local $$bk34 + (i32.add + (get_local $$4) + (i32.const 12) + ) + ) + (set_local $$6 + (i32.load + (get_local $$bk34) + ) + ) + (set_local $$cmp35 + (i32.eq + (get_local $$6) + (get_local $$add$ptr16) + ) + ) + (if + (i32.eqz + (get_local $$cmp35) + ) + (call $_abort) + ) + ) + ) + (set_local $$cmp42 + (i32.eq + (get_local $$5) + (get_local $$4) + ) + ) + (if + (get_local $$cmp42) + (block + (set_local $$shl45 + (i32.shl + (i32.const 1) + (get_local $$shr) + ) + ) + (set_local $$neg + (i32.xor + (get_local $$shl45) + (i32.const -1) + ) + ) + (set_local $$7 + (i32.load + (i32.const 176) + ) + ) + (set_local $$and46 + (i32.and + (get_local $$7) + (get_local $$neg) + ) + ) + (i32.store + (i32.const 176) + (get_local $$and46) + ) + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + (br $do-once) + ) + ) + (set_local $$cmp50 + (i32.eq + (get_local $$5) + (get_local $$arrayidx) + ) + ) + (if + (get_local $$cmp50) + (block + (set_local $$$pre313 + (i32.add + (get_local $$5) + (i32.const 8) + ) + ) + (set_local $$fd67$pre$phiZ2D + (get_local $$$pre313) + ) + ) + (block + (set_local $$cmp53 + (i32.lt_u + (get_local $$5) + (get_local $$0) + ) + ) + (if + (get_local $$cmp53) + (call $_abort) + ) + (set_local $$fd56 + (i32.add + (get_local $$5) + (i32.const 8) + ) + ) + (set_local $$8 + (i32.load + (get_local $$fd56) + ) + ) + (set_local $$cmp57 + (i32.eq + (get_local $$8) + (get_local $$add$ptr16) + ) + ) + (if + (get_local $$cmp57) + (set_local $$fd67$pre$phiZ2D + (get_local $$fd56) + ) + (call $_abort) + ) + ) + ) + (set_local $$bk66 + (i32.add + (get_local $$4) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk66) + (get_local $$5) + ) + (i32.store + (get_local $$fd67$pre$phiZ2D) + (get_local $$4) + ) + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + (br $do-once) + ) + ) + (set_local $$parent + (i32.add + (get_local $$add$ptr16) + (i32.const 24) + ) + ) + (set_local $$9 + (i32.load + (get_local $$parent) + ) + ) + (set_local $$bk73 + (i32.add + (get_local $$add$ptr16) + (i32.const 12) + ) + ) + (set_local $$10 + (i32.load + (get_local $$bk73) + ) + ) + (set_local $$cmp74 + (i32.eq + (get_local $$10) + (get_local $$add$ptr16) + ) + ) + (block $do-once0 + (if + (get_local $$cmp74) + (block + (set_local $$child + (i32.add + (get_local $$add$ptr16) + (i32.const 16) + ) + ) + (set_local $$arrayidx99 + (i32.add + (get_local $$child) + (i32.const 4) + ) + ) + (set_local $$14 + (i32.load + (get_local $$arrayidx99) + ) + ) + (set_local $$cmp100 + (i32.eq + (get_local $$14) + (i32.const 0) + ) + ) + (if + (get_local $$cmp100) + (block + (set_local $$15 + (i32.load + (get_local $$child) + ) + ) + (set_local $$cmp104 + (i32.eq + (get_local $$15) + (i32.const 0) + ) + ) + (if + (get_local $$cmp104) + (block + (set_local $$R$3 + (i32.const 0) + ) + (br $do-once0) + ) + (block + (set_local $$R$1 + (get_local $$15) + ) + (set_local $$RP$1 + (get_local $$child) + ) + ) + ) + ) + (block + (set_local $$R$1 + (get_local $$14) + ) + (set_local $$RP$1 + (get_local $$arrayidx99) + ) + ) + ) + (loop $while-in + (block $while-out + (set_local $$arrayidx108 + (i32.add + (get_local $$R$1) + (i32.const 20) + ) + ) + (set_local $$16 + (i32.load + (get_local $$arrayidx108) + ) + ) + (set_local $$cmp109 + (i32.eq + (get_local $$16) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp109) + ) + (block + (set_local $$R$1 + (get_local $$16) + ) + (set_local $$RP$1 + (get_local $$arrayidx108) + ) + (br $while-in) + ) + ) + (set_local $$arrayidx113 + (i32.add + (get_local $$R$1) + (i32.const 16) + ) + ) + (set_local $$17 + (i32.load + (get_local $$arrayidx113) + ) + ) + (set_local $$cmp114 + (i32.eq + (get_local $$17) + (i32.const 0) + ) + ) + (if + (get_local $$cmp114) + (block + (set_local $$R$1$lcssa + (get_local $$R$1) + ) + (set_local $$RP$1$lcssa + (get_local $$RP$1) + ) + (br $while-out) + ) + (block + (set_local $$R$1 + (get_local $$17) + ) + (set_local $$RP$1 + (get_local $$arrayidx113) + ) + ) + ) + (br $while-in) + ) + ) + (set_local $$cmp118 + (i32.lt_u + (get_local $$RP$1$lcssa) + (get_local $$0) + ) + ) + (if + (get_local $$cmp118) + (call $_abort) + (block + (i32.store + (get_local $$RP$1$lcssa) + (i32.const 0) + ) + (set_local $$R$3 + (get_local $$R$1$lcssa) + ) + (br $do-once0) + ) + ) + ) + (block + (set_local $$fd78 + (i32.add + (get_local $$add$ptr16) + (i32.const 8) + ) + ) + (set_local $$11 + (i32.load + (get_local $$fd78) + ) + ) + (set_local $$cmp80 + (i32.lt_u + (get_local $$11) + (get_local $$0) + ) + ) + (if + (get_local $$cmp80) + (call $_abort) + ) + (set_local $$bk82 + (i32.add + (get_local $$11) + (i32.const 12) + ) + ) + (set_local $$12 + (i32.load + (get_local $$bk82) + ) + ) + (set_local $$cmp83 + (i32.eq + (get_local $$12) + (get_local $$add$ptr16) + ) + ) + (if + (i32.eqz + (get_local $$cmp83) + ) + (call $_abort) + ) + (set_local $$fd86 + (i32.add + (get_local $$10) + (i32.const 8) + ) + ) + (set_local $$13 + (i32.load + (get_local $$fd86) + ) + ) + (set_local $$cmp87 + (i32.eq + (get_local $$13) + (get_local $$add$ptr16) + ) + ) + (if + (get_local $$cmp87) + (block + (i32.store + (get_local $$bk82) + (get_local $$10) + ) + (i32.store + (get_local $$fd86) + (get_local $$11) + ) + (set_local $$R$3 + (get_local $$10) + ) + (br $do-once0) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$cmp127 + (i32.eq + (get_local $$9) + (i32.const 0) + ) + ) + (if + (get_local $$cmp127) + (block + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + ) + (block + (set_local $$index + (i32.add + (get_local $$add$ptr16) + (i32.const 28) + ) + ) + (set_local $$18 + (i32.load + (get_local $$index) + ) + ) + (set_local $$arrayidx130 + (i32.add + (i32.const 480) + (i32.shl + (get_local $$18) + (i32.const 2) + ) + ) + ) + (set_local $$19 + (i32.load + (get_local $$arrayidx130) + ) + ) + (set_local $$cmp131 + (i32.eq + (get_local $$add$ptr16) + (get_local $$19) + ) + ) + (if + (get_local $$cmp131) + (block + (i32.store + (get_local $$arrayidx130) + (get_local $$R$3) + ) + (set_local $$cond291 + (i32.eq + (get_local $$R$3) + (i32.const 0) + ) + ) + (if + (get_local $$cond291) + (block + (set_local $$shl138 + (i32.shl + (i32.const 1) + (get_local $$18) + ) + ) + (set_local $$neg139 + (i32.xor + (get_local $$shl138) + (i32.const -1) + ) + ) + (set_local $$20 + (i32.load + (i32.const 180) + ) + ) + (set_local $$and140 + (i32.and + (get_local $$20) + (get_local $$neg139) + ) + ) + (i32.store + (i32.const 180) + (get_local $$and140) + ) + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + (br $do-once) + ) + ) + ) + (block + (set_local $$21 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp143 + (i32.lt_u + (get_local $$9) + (get_local $$21) + ) + ) + (if + (get_local $$cmp143) + (call $_abort) + ) + (set_local $$arrayidx149 + (i32.add + (get_local $$9) + (i32.const 16) + ) + ) + (set_local $$22 + (i32.load + (get_local $$arrayidx149) + ) + ) + (set_local $$cmp150 + (i32.eq + (get_local $$22) + (get_local $$add$ptr16) + ) + ) + (if + (get_local $$cmp150) + (i32.store + (get_local $$arrayidx149) + (get_local $$R$3) + ) + (block + (set_local $$arrayidx157 + (i32.add + (get_local $$9) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx157) + (get_local $$R$3) + ) + ) + ) + (set_local $$cmp162 + (i32.eq + (get_local $$R$3) + (i32.const 0) + ) + ) + (if + (get_local $$cmp162) + (block + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + (br $do-once) + ) + ) + ) + ) + (set_local $$23 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp165 + (i32.lt_u + (get_local $$R$3) + (get_local $$23) + ) + ) + (if + (get_local $$cmp165) + (call $_abort) + ) + (set_local $$parent170 + (i32.add + (get_local $$R$3) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent170) + (get_local $$9) + ) + (set_local $$child171 + (i32.add + (get_local $$add$ptr16) + (i32.const 16) + ) + ) + (set_local $$24 + (i32.load + (get_local $$child171) + ) + ) + (set_local $$cmp173 + (i32.eq + (get_local $$24) + (i32.const 0) + ) + ) + (block $do-once2 + (if + (i32.eqz + (get_local $$cmp173) + ) + (block + (set_local $$cmp176 + (i32.lt_u + (get_local $$24) + (get_local $$23) + ) + ) + (if + (get_local $$cmp176) + (call $_abort) + (block + (set_local $$arrayidx182 + (i32.add + (get_local $$R$3) + (i32.const 16) + ) + ) + (i32.store + (get_local $$arrayidx182) + (get_local $$24) + ) + (set_local $$parent183 + (i32.add + (get_local $$24) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent183) + (get_local $$R$3) + ) + (br $do-once2) + ) + ) + ) + ) + ) + (set_local $$arrayidx188 + (i32.add + (get_local $$child171) + (i32.const 4) + ) + ) + (set_local $$25 + (i32.load + (get_local $$arrayidx188) + ) + ) + (set_local $$cmp189 + (i32.eq + (get_local $$25) + (i32.const 0) + ) + ) + (if + (get_local $$cmp189) + (block + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + ) + (block + (set_local $$26 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp192 + (i32.lt_u + (get_local $$25) + (get_local $$26) + ) + ) + (if + (get_local $$cmp192) + (call $_abort) + (block + (set_local $$arrayidx198 + (i32.add + (get_local $$R$3) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx198) + (get_local $$25) + ) + (set_local $$parent199 + (i32.add + (get_local $$25) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent199) + (get_local $$R$3) + ) + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + (br $do-once) + ) + ) + ) + ) + ) + ) + ) + (block + (set_local $$p$1 + (get_local $$add$ptr) + ) + (set_local $$psize$1 + (get_local $$and5) + ) + ) + ) + ) + (set_local $$cmp228 + (i32.lt_u + (get_local $$p$1) + (get_local $$add$ptr6) + ) + ) + (if + (i32.eqz + (get_local $$cmp228) + ) + (call $_abort) + ) + (set_local $$head231 + (i32.add + (get_local $$add$ptr6) + (i32.const 4) + ) + ) + (set_local $$28 + (i32.load + (get_local $$head231) + ) + ) + (set_local $$and232 + (i32.and + (get_local $$28) + (i32.const 1) + ) + ) + (set_local $$tobool233 + (i32.eq + (get_local $$and232) + (i32.const 0) + ) + ) + (if + (get_local $$tobool233) + (call $_abort) + ) + (set_local $$and240 + (i32.and + (get_local $$28) + (i32.const 2) + ) + ) + (set_local $$tobool241 + (i32.eq + (get_local $$and240) + (i32.const 0) + ) + ) + (if + (get_local $$tobool241) + (block + (set_local $$29 + (i32.load + (i32.const 200) + ) + ) + (set_local $$cmp243 + (i32.eq + (get_local $$add$ptr6) + (get_local $$29) + ) + ) + (if + (get_local $$cmp243) + (block + (set_local $$30 + (i32.load + (i32.const 188) + ) + ) + (set_local $$add246 + (i32.add + (get_local $$30) + (get_local $$psize$1) + ) + ) + (i32.store + (i32.const 188) + (get_local $$add246) + ) + (i32.store + (i32.const 200) + (get_local $$p$1) + ) + (set_local $$or247 + (i32.or + (get_local $$add246) + (i32.const 1) + ) + ) + (set_local $$head248 + (i32.add + (get_local $$p$1) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head248) + (get_local $$or247) + ) + (set_local $$31 + (i32.load + (i32.const 196) + ) + ) + (set_local $$cmp249 + (i32.eq + (get_local $$p$1) + (get_local $$31) + ) + ) + (if + (i32.eqz + (get_local $$cmp249) + ) + (return) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store + (i32.const 184) + (i32.const 0) + ) + (return) + ) + ) + (set_local $$32 + (i32.load + (i32.const 196) + ) + ) + (set_local $$cmp255 + (i32.eq + (get_local $$add$ptr6) + (get_local $$32) + ) + ) + (if + (get_local $$cmp255) + (block + (set_local $$33 + (i32.load + (i32.const 184) + ) + ) + (set_local $$add258 + (i32.add + (get_local $$33) + (get_local $$psize$1) + ) + ) + (i32.store + (i32.const 184) + (get_local $$add258) + ) + (i32.store + (i32.const 196) + (get_local $$p$1) + ) + (set_local $$or259 + (i32.or + (get_local $$add258) + (i32.const 1) + ) + ) + (set_local $$head260 + (i32.add + (get_local $$p$1) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head260) + (get_local $$or259) + ) + (set_local $$add$ptr261 + (i32.add + (get_local $$p$1) + (get_local $$add258) + ) + ) + (i32.store + (get_local $$add$ptr261) + (get_local $$add258) + ) + (return) + ) + ) + (set_local $$and266 + (i32.and + (get_local $$28) + (i32.const -8) + ) + ) + (set_local $$add267 + (i32.add + (get_local $$and266) + (get_local $$psize$1) + ) + ) + (set_local $$shr268 + (i32.shr_u + (get_local $$28) + (i32.const 3) + ) + ) + (set_local $$cmp269 + (i32.lt_u + (get_local $$28) + (i32.const 256) + ) + ) + (block $do-once4 + (if + (get_local $$cmp269) + (block + (set_local $$fd273 + (i32.add + (get_local $$add$ptr6) + (i32.const 8) + ) + ) + (set_local $$34 + (i32.load + (get_local $$fd273) + ) + ) + (set_local $$bk275 + (i32.add + (get_local $$add$ptr6) + (i32.const 12) + ) + ) + (set_local $$35 + (i32.load + (get_local $$bk275) + ) + ) + (set_local $$shl278 + (i32.shl + (get_local $$shr268) + (i32.const 1) + ) + ) + (set_local $$arrayidx279 + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl278) + (i32.const 2) + ) + ) + ) + (set_local $$cmp280 + (i32.eq + (get_local $$34) + (get_local $$arrayidx279) + ) + ) + (if + (i32.eqz + (get_local $$cmp280) + ) + (block + (set_local $$36 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp283 + (i32.lt_u + (get_local $$34) + (get_local $$36) + ) + ) + (if + (get_local $$cmp283) + (call $_abort) + ) + (set_local $$bk286 + (i32.add + (get_local $$34) + (i32.const 12) + ) + ) + (set_local $$37 + (i32.load + (get_local $$bk286) + ) + ) + (set_local $$cmp287 + (i32.eq + (get_local $$37) + (get_local $$add$ptr6) + ) + ) + (if + (i32.eqz + (get_local $$cmp287) + ) + (call $_abort) + ) + ) + ) + (set_local $$cmp296 + (i32.eq + (get_local $$35) + (get_local $$34) + ) + ) + (if + (get_local $$cmp296) + (block + (set_local $$shl299 + (i32.shl + (i32.const 1) + (get_local $$shr268) + ) + ) + (set_local $$neg300 + (i32.xor + (get_local $$shl299) + (i32.const -1) + ) + ) + (set_local $$38 + (i32.load + (i32.const 176) + ) + ) + (set_local $$and301 + (i32.and + (get_local $$38) + (get_local $$neg300) + ) + ) + (i32.store + (i32.const 176) + (get_local $$and301) + ) + (br $do-once4) + ) + ) + (set_local $$cmp305 + (i32.eq + (get_local $$35) + (get_local $$arrayidx279) + ) + ) + (if + (get_local $$cmp305) + (block + (set_local $$$pre312 + (i32.add + (get_local $$35) + (i32.const 8) + ) + ) + (set_local $$fd322$pre$phiZ2D + (get_local $$$pre312) + ) + ) + (block + (set_local $$39 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp308 + (i32.lt_u + (get_local $$35) + (get_local $$39) + ) + ) + (if + (get_local $$cmp308) + (call $_abort) + ) + (set_local $$fd311 + (i32.add + (get_local $$35) + (i32.const 8) + ) + ) + (set_local $$40 + (i32.load + (get_local $$fd311) + ) + ) + (set_local $$cmp312 + (i32.eq + (get_local $$40) + (get_local $$add$ptr6) + ) + ) + (if + (get_local $$cmp312) + (set_local $$fd322$pre$phiZ2D + (get_local $$fd311) + ) + (call $_abort) + ) + ) + ) + (set_local $$bk321 + (i32.add + (get_local $$34) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk321) + (get_local $$35) + ) + (i32.store + (get_local $$fd322$pre$phiZ2D) + (get_local $$34) + ) + ) + (block + (set_local $$parent331 + (i32.add + (get_local $$add$ptr6) + (i32.const 24) + ) + ) + (set_local $$41 + (i32.load + (get_local $$parent331) + ) + ) + (set_local $$bk333 + (i32.add + (get_local $$add$ptr6) + (i32.const 12) + ) + ) + (set_local $$42 + (i32.load + (get_local $$bk333) + ) + ) + (set_local $$cmp334 + (i32.eq + (get_local $$42) + (get_local $$add$ptr6) + ) + ) + (block $do-once6 + (if + (get_local $$cmp334) + (block + (set_local $$child361 + (i32.add + (get_local $$add$ptr6) + (i32.const 16) + ) + ) + (set_local $$arrayidx362 + (i32.add + (get_local $$child361) + (i32.const 4) + ) + ) + (set_local $$47 + (i32.load + (get_local $$arrayidx362) + ) + ) + (set_local $$cmp363 + (i32.eq + (get_local $$47) + (i32.const 0) + ) + ) + (if + (get_local $$cmp363) + (block + (set_local $$48 + (i32.load + (get_local $$child361) + ) + ) + (set_local $$cmp368 + (i32.eq + (get_local $$48) + (i32.const 0) + ) + ) + (if + (get_local $$cmp368) + (block + (set_local $$R332$3 + (i32.const 0) + ) + (br $do-once6) + ) + (block + (set_local $$R332$1 + (get_local $$48) + ) + (set_local $$RP360$1 + (get_local $$child361) + ) + ) + ) + ) + (block + (set_local $$R332$1 + (get_local $$47) + ) + (set_local $$RP360$1 + (get_local $$arrayidx362) + ) + ) + ) + (loop $while-in9 + (block $while-out8 + (set_local $$arrayidx374 + (i32.add + (get_local $$R332$1) + (i32.const 20) + ) + ) + (set_local $$49 + (i32.load + (get_local $$arrayidx374) + ) + ) + (set_local $$cmp375 + (i32.eq + (get_local $$49) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp375) + ) + (block + (set_local $$R332$1 + (get_local $$49) + ) + (set_local $$RP360$1 + (get_local $$arrayidx374) + ) + (br $while-in9) + ) + ) + (set_local $$arrayidx379 + (i32.add + (get_local $$R332$1) + (i32.const 16) + ) + ) + (set_local $$50 + (i32.load + (get_local $$arrayidx379) + ) + ) + (set_local $$cmp380 + (i32.eq + (get_local $$50) + (i32.const 0) + ) + ) + (if + (get_local $$cmp380) + (block + (set_local $$R332$1$lcssa + (get_local $$R332$1) + ) + (set_local $$RP360$1$lcssa + (get_local $$RP360$1) + ) + (br $while-out8) + ) + (block + (set_local $$R332$1 + (get_local $$50) + ) + (set_local $$RP360$1 + (get_local $$arrayidx379) + ) + ) + ) + (br $while-in9) + ) + ) + (set_local $$51 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp386 + (i32.lt_u + (get_local $$RP360$1$lcssa) + (get_local $$51) + ) + ) + (if + (get_local $$cmp386) + (call $_abort) + (block + (i32.store + (get_local $$RP360$1$lcssa) + (i32.const 0) + ) + (set_local $$R332$3 + (get_local $$R332$1$lcssa) + ) + (br $do-once6) + ) + ) + ) + (block + (set_local $$fd338 + (i32.add + (get_local $$add$ptr6) + (i32.const 8) + ) + ) + (set_local $$43 + (i32.load + (get_local $$fd338) + ) + ) + (set_local $$44 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp340 + (i32.lt_u + (get_local $$43) + (get_local $$44) + ) + ) + (if + (get_local $$cmp340) + (call $_abort) + ) + (set_local $$bk343 + (i32.add + (get_local $$43) + (i32.const 12) + ) + ) + (set_local $$45 + (i32.load + (get_local $$bk343) + ) + ) + (set_local $$cmp344 + (i32.eq + (get_local $$45) + (get_local $$add$ptr6) + ) + ) + (if + (i32.eqz + (get_local $$cmp344) + ) + (call $_abort) + ) + (set_local $$fd347 + (i32.add + (get_local $$42) + (i32.const 8) + ) + ) + (set_local $$46 + (i32.load + (get_local $$fd347) + ) + ) + (set_local $$cmp348 + (i32.eq + (get_local $$46) + (get_local $$add$ptr6) + ) + ) + (if + (get_local $$cmp348) + (block + (i32.store + (get_local $$bk343) + (get_local $$42) + ) + (i32.store + (get_local $$fd347) + (get_local $$43) + ) + (set_local $$R332$3 + (get_local $$42) + ) + (br $do-once6) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$cmp395 + (i32.eq + (get_local $$41) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp395) + ) + (block + (set_local $$index399 + (i32.add + (get_local $$add$ptr6) + (i32.const 28) + ) + ) + (set_local $$52 + (i32.load + (get_local $$index399) + ) + ) + (set_local $$arrayidx400 + (i32.add + (i32.const 480) + (i32.shl + (get_local $$52) + (i32.const 2) + ) + ) + ) + (set_local $$53 + (i32.load + (get_local $$arrayidx400) + ) + ) + (set_local $$cmp401 + (i32.eq + (get_local $$add$ptr6) + (get_local $$53) + ) + ) + (if + (get_local $$cmp401) + (block + (i32.store + (get_local $$arrayidx400) + (get_local $$R332$3) + ) + (set_local $$cond292 + (i32.eq + (get_local $$R332$3) + (i32.const 0) + ) + ) + (if + (get_local $$cond292) + (block + (set_local $$shl408 + (i32.shl + (i32.const 1) + (get_local $$52) + ) + ) + (set_local $$neg409 + (i32.xor + (get_local $$shl408) + (i32.const -1) + ) + ) + (set_local $$54 + (i32.load + (i32.const 180) + ) + ) + (set_local $$and410 + (i32.and + (get_local $$54) + (get_local $$neg409) + ) + ) + (i32.store + (i32.const 180) + (get_local $$and410) + ) + (br $do-once4) + ) + ) + ) + (block + (set_local $$55 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp413 + (i32.lt_u + (get_local $$41) + (get_local $$55) + ) + ) + (if + (get_local $$cmp413) + (call $_abort) + ) + (set_local $$arrayidx419 + (i32.add + (get_local $$41) + (i32.const 16) + ) + ) + (set_local $$56 + (i32.load + (get_local $$arrayidx419) + ) + ) + (set_local $$cmp420 + (i32.eq + (get_local $$56) + (get_local $$add$ptr6) + ) + ) + (if + (get_local $$cmp420) + (i32.store + (get_local $$arrayidx419) + (get_local $$R332$3) + ) + (block + (set_local $$arrayidx427 + (i32.add + (get_local $$41) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx427) + (get_local $$R332$3) + ) + ) + ) + (set_local $$cmp432 + (i32.eq + (get_local $$R332$3) + (i32.const 0) + ) + ) + (if + (get_local $$cmp432) + (br $do-once4) + ) + ) + ) + (set_local $$57 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp435 + (i32.lt_u + (get_local $$R332$3) + (get_local $$57) + ) + ) + (if + (get_local $$cmp435) + (call $_abort) + ) + (set_local $$parent442 + (i32.add + (get_local $$R332$3) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent442) + (get_local $$41) + ) + (set_local $$child443 + (i32.add + (get_local $$add$ptr6) + (i32.const 16) + ) + ) + (set_local $$58 + (i32.load + (get_local $$child443) + ) + ) + (set_local $$cmp445 + (i32.eq + (get_local $$58) + (i32.const 0) + ) + ) + (block $do-once10 + (if + (i32.eqz + (get_local $$cmp445) + ) + (block + (set_local $$cmp448 + (i32.lt_u + (get_local $$58) + (get_local $$57) + ) + ) + (if + (get_local $$cmp448) + (call $_abort) + (block + (set_local $$arrayidx454 + (i32.add + (get_local $$R332$3) + (i32.const 16) + ) + ) + (i32.store + (get_local $$arrayidx454) + (get_local $$58) + ) + (set_local $$parent455 + (i32.add + (get_local $$58) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent455) + (get_local $$R332$3) + ) + (br $do-once10) + ) + ) + ) + ) + ) + (set_local $$arrayidx460 + (i32.add + (get_local $$child443) + (i32.const 4) + ) + ) + (set_local $$59 + (i32.load + (get_local $$arrayidx460) + ) + ) + (set_local $$cmp461 + (i32.eq + (get_local $$59) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp461) + ) + (block + (set_local $$60 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp464 + (i32.lt_u + (get_local $$59) + (get_local $$60) + ) + ) + (if + (get_local $$cmp464) + (call $_abort) + (block + (set_local $$arrayidx470 + (i32.add + (get_local $$R332$3) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx470) + (get_local $$59) + ) + (set_local $$parent471 + (i32.add + (get_local $$59) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent471) + (get_local $$R332$3) + ) + (br $do-once4) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $$or480 + (i32.or + (get_local $$add267) + (i32.const 1) + ) + ) + (set_local $$head481 + (i32.add + (get_local $$p$1) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head481) + (get_local $$or480) + ) + (set_local $$add$ptr482 + (i32.add + (get_local $$p$1) + (get_local $$add267) + ) + ) + (i32.store + (get_local $$add$ptr482) + (get_local $$add267) + ) + (set_local $$61 + (i32.load + (i32.const 196) + ) + ) + (set_local $$cmp484 + (i32.eq + (get_local $$p$1) + (get_local $$61) + ) + ) + (if + (get_local $$cmp484) + (block + (i32.store + (i32.const 184) + (get_local $$add267) + ) + (return) + ) + (set_local $$psize$2 + (get_local $$add267) + ) + ) + ) + (block + (set_local $$and495 + (i32.and + (get_local $$28) + (i32.const -2) + ) + ) + (i32.store + (get_local $$head231) + (get_local $$and495) + ) + (set_local $$or496 + (i32.or + (get_local $$psize$1) + (i32.const 1) + ) + ) + (set_local $$head497 + (i32.add + (get_local $$p$1) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head497) + (get_local $$or496) + ) + (set_local $$add$ptr498 + (i32.add + (get_local $$p$1) + (get_local $$psize$1) + ) + ) + (i32.store + (get_local $$add$ptr498) + (get_local $$psize$1) + ) + (set_local $$psize$2 + (get_local $$psize$1) + ) + ) + ) + (set_local $$shr501 + (i32.shr_u + (get_local $$psize$2) + (i32.const 3) + ) + ) + (set_local $$cmp502 + (i32.lt_u + (get_local $$psize$2) + (i32.const 256) + ) + ) + (if + (get_local $$cmp502) + (block + (set_local $$shl508 + (i32.shl + (get_local $$shr501) + (i32.const 1) + ) + ) + (set_local $$arrayidx509 + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl508) + (i32.const 2) + ) + ) + ) + (set_local $$62 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shl511 + (i32.shl + (i32.const 1) + (get_local $$shr501) + ) + ) + (set_local $$and512 + (i32.and + (get_local $$62) + (get_local $$shl511) + ) + ) + (set_local $$tobool513 + (i32.eq + (get_local $$and512) + (i32.const 0) + ) + ) + (if + (get_local $$tobool513) + (block + (set_local $$or516 + (i32.or + (get_local $$62) + (get_local $$shl511) + ) + ) + (i32.store + (i32.const 176) + (get_local $$or516) + ) + (set_local $$$pre + (i32.add + (get_local $$arrayidx509) + (i32.const 8) + ) + ) + (set_local $$$pre$phiZ2D + (get_local $$$pre) + ) + (set_local $$F510$0 + (get_local $$arrayidx509) + ) + ) + (block + (set_local $$63 + (i32.add + (get_local $$arrayidx509) + (i32.const 8) + ) + ) + (set_local $$64 + (i32.load + (get_local $$63) + ) + ) + (set_local $$65 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp519 + (i32.lt_u + (get_local $$64) + (get_local $$65) + ) + ) + (if + (get_local $$cmp519) + (call $_abort) + (block + (set_local $$$pre$phiZ2D + (get_local $$63) + ) + (set_local $$F510$0 + (get_local $$64) + ) + ) + ) + ) + ) + (i32.store + (get_local $$$pre$phiZ2D) + (get_local $$p$1) + ) + (set_local $$bk529 + (i32.add + (get_local $$F510$0) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk529) + (get_local $$p$1) + ) + (set_local $$fd530 + (i32.add + (get_local $$p$1) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd530) + (get_local $$F510$0) + ) + (set_local $$bk531 + (i32.add + (get_local $$p$1) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk531) + (get_local $$arrayidx509) + ) + (return) + ) + ) + (set_local $$shr535 + (i32.shr_u + (get_local $$psize$2) + (i32.const 8) + ) + ) + (set_local $$cmp536 + (i32.eq + (get_local $$shr535) + (i32.const 0) + ) + ) + (if + (get_local $$cmp536) + (set_local $$I534$0 + (i32.const 0) + ) + (block + (set_local $$cmp540 + (i32.gt_u + (get_local $$psize$2) + (i32.const 16777215) + ) + ) + (if + (get_local $$cmp540) + (set_local $$I534$0 + (i32.const 31) + ) + (block + (set_local $$sub + (i32.add + (get_local $$shr535) + (i32.const 1048320) + ) + ) + (set_local $$shr544 + (i32.shr_u + (get_local $$sub) + (i32.const 16) + ) + ) + (set_local $$and545 + (i32.and + (get_local $$shr544) + (i32.const 8) + ) + ) + (set_local $$shl546 + (i32.shl + (get_local $$shr535) + (get_local $$and545) + ) + ) + (set_local $$sub547 + (i32.add + (get_local $$shl546) + (i32.const 520192) + ) + ) + (set_local $$shr548 + (i32.shr_u + (get_local $$sub547) + (i32.const 16) + ) + ) + (set_local $$and549 + (i32.and + (get_local $$shr548) + (i32.const 4) + ) + ) + (set_local $$add550 + (i32.or + (get_local $$and549) + (get_local $$and545) + ) + ) + (set_local $$shl551 + (i32.shl + (get_local $$shl546) + (get_local $$and549) + ) + ) + (set_local $$sub552 + (i32.add + (get_local $$shl551) + (i32.const 245760) + ) + ) + (set_local $$shr553 + (i32.shr_u + (get_local $$sub552) + (i32.const 16) + ) + ) + (set_local $$and554 + (i32.and + (get_local $$shr553) + (i32.const 2) + ) + ) + (set_local $$add555 + (i32.or + (get_local $$add550) + (get_local $$and554) + ) + ) + (set_local $$sub556 + (i32.sub + (i32.const 14) + (get_local $$add555) + ) + ) + (set_local $$shl557 + (i32.shl + (get_local $$shl551) + (get_local $$and554) + ) + ) + (set_local $$shr558 + (i32.shr_u + (get_local $$shl557) + (i32.const 15) + ) + ) + (set_local $$add559 + (i32.add + (get_local $$sub556) + (get_local $$shr558) + ) + ) + (set_local $$shl560 + (i32.shl + (get_local $$add559) + (i32.const 1) + ) + ) + (set_local $$add561 + (i32.add + (get_local $$add559) + (i32.const 7) + ) + ) + (set_local $$shr562 + (i32.shr_u + (get_local $$psize$2) + (get_local $$add561) + ) + ) + (set_local $$and563 + (i32.and + (get_local $$shr562) + (i32.const 1) + ) + ) + (set_local $$add564 + (i32.or + (get_local $$and563) + (get_local $$shl560) + ) + ) + (set_local $$I534$0 + (get_local $$add564) + ) + ) + ) + ) + ) + (set_local $$arrayidx567 + (i32.add + (i32.const 480) + (i32.shl + (get_local $$I534$0) + (i32.const 2) + ) + ) + ) + (set_local $$index568 + (i32.add + (get_local $$p$1) + (i32.const 28) + ) + ) + (i32.store + (get_local $$index568) + (get_local $$I534$0) + ) + (set_local $$child569 + (i32.add + (get_local $$p$1) + (i32.const 16) + ) + ) + (set_local $$arrayidx570 + (i32.add + (get_local $$p$1) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx570) + (i32.const 0) + ) + (i32.store + (get_local $$child569) + (i32.const 0) + ) + (set_local $$66 + (i32.load + (i32.const 180) + ) + ) + (set_local $$shl573 + (i32.shl + (i32.const 1) + (get_local $$I534$0) + ) + ) + (set_local $$and574 + (i32.and + (get_local $$66) + (get_local $$shl573) + ) + ) + (set_local $$tobool575 + (i32.eq + (get_local $$and574) + (i32.const 0) + ) + ) + (block $do-once12 + (if + (get_local $$tobool575) + (block + (set_local $$or578 + (i32.or + (get_local $$66) + (get_local $$shl573) + ) + ) + (i32.store + (i32.const 180) + (get_local $$or578) + ) + (i32.store + (get_local $$arrayidx567) + (get_local $$p$1) + ) + (set_local $$parent579 + (i32.add + (get_local $$p$1) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent579) + (get_local $$arrayidx567) + ) + (set_local $$bk580 + (i32.add + (get_local $$p$1) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk580) + (get_local $$p$1) + ) + (set_local $$fd581 + (i32.add + (get_local $$p$1) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd581) + (get_local $$p$1) + ) + ) + (block + (set_local $$67 + (i32.load + (get_local $$arrayidx567) + ) + ) + (set_local $$cmp584 + (i32.eq + (get_local $$I534$0) + (i32.const 31) + ) + ) + (set_local $$shr586 + (i32.shr_u + (get_local $$I534$0) + (i32.const 1) + ) + ) + (set_local $$sub589 + (i32.sub + (i32.const 25) + (get_local $$shr586) + ) + ) + (set_local $$cond + (if (result i32) + (get_local $$cmp584) + (i32.const 0) + (get_local $$sub589) + ) + ) + (set_local $$shl590 + (i32.shl + (get_local $$psize$2) + (get_local $$cond) + ) + ) + (set_local $$K583$0 + (get_local $$shl590) + ) + (set_local $$T$0 + (get_local $$67) + ) + (loop $while-in15 + (block $while-out14 + (set_local $$head591 + (i32.add + (get_local $$T$0) + (i32.const 4) + ) + ) + (set_local $$68 + (i32.load + (get_local $$head591) + ) + ) + (set_local $$and592 + (i32.and + (get_local $$68) + (i32.const -8) + ) + ) + (set_local $$cmp593 + (i32.eq + (get_local $$and592) + (get_local $$psize$2) + ) + ) + (if + (get_local $$cmp593) + (block + (set_local $$T$0$lcssa + (get_local $$T$0) + ) + (set_local $label + (i32.const 130) + ) + (br $while-out14) + ) + ) + (set_local $$shr596 + (i32.shr_u + (get_local $$K583$0) + (i32.const 31) + ) + ) + (set_local $$arrayidx599 + (i32.add + (i32.add + (get_local $$T$0) + (i32.const 16) + ) + (i32.shl + (get_local $$shr596) + (i32.const 2) + ) + ) + ) + (set_local $$shl600 + (i32.shl + (get_local $$K583$0) + (i32.const 1) + ) + ) + (set_local $$69 + (i32.load + (get_local $$arrayidx599) + ) + ) + (set_local $$cmp601 + (i32.eq + (get_local $$69) + (i32.const 0) + ) + ) + (if + (get_local $$cmp601) + (block + (set_local $$T$0$lcssa319 + (get_local $$T$0) + ) + (set_local $$arrayidx599$lcssa + (get_local $$arrayidx599) + ) + (set_local $label + (i32.const 127) + ) + (br $while-out14) + ) + (block + (set_local $$K583$0 + (get_local $$shl600) + ) + (set_local $$T$0 + (get_local $$69) + ) + ) + ) + (br $while-in15) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 127) + ) + (block + (set_local $$70 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp605 + (i32.lt_u + (get_local $$arrayidx599$lcssa) + (get_local $$70) + ) + ) + (if + (get_local $$cmp605) + (call $_abort) + (block + (i32.store + (get_local $$arrayidx599$lcssa) + (get_local $$p$1) + ) + (set_local $$parent610 + (i32.add + (get_local $$p$1) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent610) + (get_local $$T$0$lcssa319) + ) + (set_local $$bk611 + (i32.add + (get_local $$p$1) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk611) + (get_local $$p$1) + ) + (set_local $$fd612 + (i32.add + (get_local $$p$1) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd612) + (get_local $$p$1) + ) + (br $do-once12) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 130) + ) + (block + (set_local $$fd620 + (i32.add + (get_local $$T$0$lcssa) + (i32.const 8) + ) + ) + (set_local $$71 + (i32.load + (get_local $$fd620) + ) + ) + (set_local $$72 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp624 + (i32.ge_u + (get_local $$71) + (get_local $$72) + ) + ) + (set_local $$not$cmp621 + (i32.ge_u + (get_local $$T$0$lcssa) + (get_local $$72) + ) + ) + (set_local $$73 + (i32.and + (get_local $$cmp624) + (get_local $$not$cmp621) + ) + ) + (if + (get_local $$73) + (block + (set_local $$bk631 + (i32.add + (get_local $$71) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk631) + (get_local $$p$1) + ) + (i32.store + (get_local $$fd620) + (get_local $$p$1) + ) + (set_local $$fd633 + (i32.add + (get_local $$p$1) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd633) + (get_local $$71) + ) + (set_local $$bk634 + (i32.add + (get_local $$p$1) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk634) + (get_local $$T$0$lcssa) + ) + (set_local $$parent635 + (i32.add + (get_local $$p$1) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent635) + (i32.const 0) + ) + (br $do-once12) + ) + (call $_abort) + ) + ) + ) + ) + ) + ) + ) + (set_local $$74 + (i32.load + (i32.const 208) + ) + ) + (set_local $$dec + (i32.add + (get_local $$74) + (i32.const -1) + ) + ) + (i32.store + (i32.const 208) + (get_local $$dec) + ) + (set_local $$cmp640 + (i32.eq + (get_local $$dec) + (i32.const 0) + ) + ) + (if + (get_local $$cmp640) + (set_local $$sp$0$in$i + (i32.const 632) + ) + (return) + ) + (loop $while-in17 + (block $while-out16 + (set_local $$sp$0$i + (i32.load + (get_local $$sp$0$in$i) + ) + ) + (set_local $$cmp$i + (i32.eq + (get_local $$sp$0$i) + (i32.const 0) + ) + ) + (set_local $$next4$i + (i32.add + (get_local $$sp$0$i) + (i32.const 8) + ) + ) + (if + (get_local $$cmp$i) + (br $while-out16) + (set_local $$sp$0$in$i + (get_local $$next4$i) + ) + ) + (br $while-in17) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (return) + ) + (func $runPostSets (; 61 ;) + (nop) + ) + (func $_i64Subtract (; 62 ;) (param $a i32) (param $b i32) (param $c i32) (param $d i32) (result i32) + (local $l i32) + (local $h i32) + (set_local $l + (i32.sub + (get_local $a) + (get_local $c) + ) + ) + (set_local $h + (i32.sub + (get_local $b) + (get_local $d) + ) + ) + (set_local $h + (i32.sub + (i32.sub + (get_local $b) + (get_local $d) + ) + (i32.gt_u + (get_local $c) + (get_local $a) + ) + ) + ) + (return + (block (result i32) + (block + (set_global $tempRet0 + (get_local $h) + ) + (drop + (get_global $tempRet0) + ) + ) + (get_local $l) + ) + ) + ) + (func $_i64Add (; 63 ;) (param $a i32) (param $b i32) (param $c i32) (param $d i32) (result i32) + (local $l i32) + (local $h i32) + (set_local $l + (i32.add + (get_local $a) + (get_local $c) + ) + ) + (set_local $h + (i32.add + (i32.add + (get_local $b) + (get_local $d) + ) + (i32.lt_u + (get_local $l) + (get_local $a) + ) + ) + ) + (return + (block (result i32) + (block + (set_global $tempRet0 + (get_local $h) + ) + (drop + (get_global $tempRet0) + ) + ) + (get_local $l) + ) + ) + ) + (func $_memset (; 64 ;) (param $ptr i32) (param $value i32) (param $num i32) (result i32) + (local $stop i32) + (local $value4 i32) + (local $stop4 i32) + (local $unaligned i32) + (set_local $stop + (i32.add + (get_local $ptr) + (get_local $num) + ) + ) + (if + (i32.ge_s + (get_local $num) + (i32.const 20) + ) + (block + (set_local $value + (i32.and + (get_local $value) + (i32.const 255) + ) + ) + (set_local $unaligned + (i32.and + (get_local $ptr) + (i32.const 3) + ) + ) + (set_local $value4 + (i32.or + (i32.or + (i32.or + (get_local $value) + (i32.shl + (get_local $value) + (i32.const 8) + ) + ) + (i32.shl + (get_local $value) + (i32.const 16) + ) + ) + (i32.shl + (get_local $value) + (i32.const 24) + ) + ) + ) + (set_local $stop4 + (i32.and + (get_local $stop) + (i32.xor + (i32.const 3) + (i32.const -1) + ) + ) + ) + (if + (get_local $unaligned) + (block + (set_local $unaligned + (i32.sub + (i32.add + (get_local $ptr) + (i32.const 4) + ) + (get_local $unaligned) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.lt_s + (get_local $ptr) + (get_local $unaligned) + ) + ) + (br $while-out) + ) + (block + (i32.store8 + (get_local $ptr) + (get_local $value) + ) + (set_local $ptr + (i32.add + (get_local $ptr) + (i32.const 1) + ) + ) + ) + (br $while-in) + ) + ) + ) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eqz + (i32.lt_s + (get_local $ptr) + (get_local $stop4) + ) + ) + (br $while-out0) + ) + (block + (i32.store + (get_local $ptr) + (get_local $value4) + ) + (set_local $ptr + (i32.add + (get_local $ptr) + (i32.const 4) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eqz + (i32.lt_s + (get_local $ptr) + (get_local $stop) + ) + ) + (br $while-out2) + ) + (block + (i32.store8 + (get_local $ptr) + (get_local $value) + ) + (set_local $ptr + (i32.add + (get_local $ptr) + (i32.const 1) + ) + ) + ) + (br $while-in3) + ) + ) + (return + (i32.sub + (get_local $ptr) + (get_local $num) + ) + ) + ) + (func $_bitshift64Lshr (; 65 ;) (param $low i32) (param $high i32) (param $bits i32) (result i32) + (local $ander i32) + (if + (i32.lt_s + (get_local $bits) + (i32.const 32) + ) + (block + (set_local $ander + (i32.sub + (i32.shl + (i32.const 1) + (get_local $bits) + ) + (i32.const 1) + ) + ) + (set_global $tempRet0 + (i32.shr_u + (get_local $high) + (get_local $bits) + ) + ) + (return + (i32.or + (i32.shr_u + (get_local $low) + (get_local $bits) + ) + (i32.shl + (i32.and + (get_local $high) + (get_local $ander) + ) + (i32.sub + (i32.const 32) + (get_local $bits) + ) + ) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.const 0) + ) + (return + (i32.shr_u + (get_local $high) + (i32.sub + (get_local $bits) + (i32.const 32) + ) + ) + ) + ) + (func $_bitshift64Shl (; 66 ;) (param $low i32) (param $high i32) (param $bits i32) (result i32) + (local $ander i32) + (if + (i32.lt_s + (get_local $bits) + (i32.const 32) + ) + (block + (set_local $ander + (i32.sub + (i32.shl + (i32.const 1) + (get_local $bits) + ) + (i32.const 1) + ) + ) + (set_global $tempRet0 + (i32.or + (i32.shl + (get_local $high) + (get_local $bits) + ) + (i32.shr_u + (i32.and + (get_local $low) + (i32.shl + (get_local $ander) + (i32.sub + (i32.const 32) + (get_local $bits) + ) + ) + ) + (i32.sub + (i32.const 32) + (get_local $bits) + ) + ) + ) + ) + (return + (i32.shl + (get_local $low) + (get_local $bits) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.shl + (get_local $low) + (i32.sub + (get_local $bits) + (i32.const 32) + ) + ) + ) + (return + (i32.const 0) + ) + ) + (func $_memcpy (; 67 ;) (param $dest i32) (param $src i32) (param $num i32) (result i32) + (local $ret i32) + (if + (i32.ge_s + (get_local $num) + (i32.const 4096) + ) + (return + (call $_emscripten_memcpy_big + (get_local $dest) + (get_local $src) + (get_local $num) + ) + ) + ) + (set_local $ret + (get_local $dest) + ) + (if + (i32.eq + (i32.and + (get_local $dest) + (i32.const 3) + ) + (i32.and + (get_local $src) + (i32.const 3) + ) + ) + (block + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.and + (get_local $dest) + (i32.const 3) + ) + ) + (br $while-out) + ) + (block + (if + (i32.eq + (get_local $num) + (i32.const 0) + ) + (return + (get_local $ret) + ) + ) + (i32.store8 + (get_local $dest) + (i32.load8_s + (get_local $src) + ) + ) + (set_local $dest + (i32.add + (get_local $dest) + (i32.const 1) + ) + ) + (set_local $src + (i32.add + (get_local $src) + (i32.const 1) + ) + ) + (set_local $num + (i32.sub + (get_local $num) + (i32.const 1) + ) + ) + ) + (br $while-in) + ) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eqz + (i32.ge_s + (get_local $num) + (i32.const 4) + ) + ) + (br $while-out0) + ) + (block + (i32.store + (get_local $dest) + (i32.load + (get_local $src) + ) + ) + (set_local $dest + (i32.add + (get_local $dest) + (i32.const 4) + ) + ) + (set_local $src + (i32.add + (get_local $src) + (i32.const 4) + ) + ) + (set_local $num + (i32.sub + (get_local $num) + (i32.const 4) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eqz + (i32.gt_s + (get_local $num) + (i32.const 0) + ) + ) + (br $while-out2) + ) + (block + (i32.store8 + (get_local $dest) + (i32.load8_s + (get_local $src) + ) + ) + (set_local $dest + (i32.add + (get_local $dest) + (i32.const 1) + ) + ) + (set_local $src + (i32.add + (get_local $src) + (i32.const 1) + ) + ) + (set_local $num + (i32.sub + (get_local $num) + (i32.const 1) + ) + ) + ) + (br $while-in3) + ) + ) + (return + (get_local $ret) + ) + ) + (func $_bitshift64Ashr (; 68 ;) (param $low i32) (param $high i32) (param $bits i32) (result i32) + (local $ander i32) + (if + (i32.lt_s + (get_local $bits) + (i32.const 32) + ) + (block + (set_local $ander + (i32.sub + (i32.shl + (i32.const 1) + (get_local $bits) + ) + (i32.const 1) + ) + ) + (set_global $tempRet0 + (i32.shr_s + (get_local $high) + (get_local $bits) + ) + ) + (return + (i32.or + (i32.shr_u + (get_local $low) + (get_local $bits) + ) + (i32.shl + (i32.and + (get_local $high) + (get_local $ander) + ) + (i32.sub + (i32.const 32) + (get_local $bits) + ) + ) + ) + ) + ) + ) + (set_global $tempRet0 + (if (result i32) + (i32.lt_s + (get_local $high) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + ) + (return + (i32.shr_s + (get_local $high) + (i32.sub + (get_local $bits) + (i32.const 32) + ) + ) + ) + ) + (func $___muldsi3 (; 69 ;) (param $$a i32) (param $$b i32) (result i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$6 i32) + (local $$8 i32) + (local $$11 i32) + (local $$12 i32) + (set_local $$1 + (i32.and + (get_local $$a) + (i32.const 65535) + ) + ) + (set_local $$2 + (i32.and + (get_local $$b) + (i32.const 65535) + ) + ) + (set_local $$3 + (i32.mul + (get_local $$2) + (get_local $$1) + ) + ) + (set_local $$6 + (i32.shr_u + (get_local $$a) + (i32.const 16) + ) + ) + (set_local $$8 + (i32.add + (i32.shr_u + (get_local $$3) + (i32.const 16) + ) + (i32.mul + (get_local $$2) + (get_local $$6) + ) + ) + ) + (set_local $$11 + (i32.shr_u + (get_local $$b) + (i32.const 16) + ) + ) + (set_local $$12 + (i32.mul + (get_local $$11) + (get_local $$1) + ) + ) + (return + (block (result i32) + (block + (set_global $tempRet0 + (i32.add + (i32.add + (i32.shr_u + (get_local $$8) + (i32.const 16) + ) + (i32.mul + (get_local $$11) + (get_local $$6) + ) + ) + (i32.shr_u + (i32.add + (i32.and + (get_local $$8) + (i32.const 65535) + ) + (get_local $$12) + ) + (i32.const 16) + ) + ) + ) + (drop + (get_global $tempRet0) + ) + ) + (i32.or + (i32.const 0) + (i32.or + (i32.shl + (i32.add + (get_local $$8) + (get_local $$12) + ) + (i32.const 16) + ) + (i32.and + (get_local $$3) + (i32.const 65535) + ) + ) + ) + ) + ) + ) + (func $___divdi3 (; 70 ;) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) + (local $$1$0 i32) + (local $$1$1 i32) + (local $$2$0 i32) + (local $$2$1 i32) + (local $$4$0 i32) + (local $$4$1 i32) + (local $$6$0 i32) + (local $$7$0 i32) + (local $$7$1 i32) + (local $$8$0 i32) + (local $$10$0 i32) + (set_local $$1$0 + (i32.or + (i32.shr_s + (get_local $$a$1) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$1$1 + (i32.or + (i32.shr_s + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$2$0 + (i32.or + (i32.shr_s + (get_local $$b$1) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$2$1 + (i32.or + (i32.shr_s + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$4$0 + (call $_i64Subtract + (i32.xor + (get_local $$1$0) + (get_local $$a$0) + ) + (i32.xor + (get_local $$1$1) + (get_local $$a$1) + ) + (get_local $$1$0) + (get_local $$1$1) + ) + ) + (set_local $$4$1 + (get_global $tempRet0) + ) + (set_local $$6$0 + (call $_i64Subtract + (i32.xor + (get_local $$2$0) + (get_local $$b$0) + ) + (i32.xor + (get_local $$2$1) + (get_local $$b$1) + ) + (get_local $$2$0) + (get_local $$2$1) + ) + ) + (set_local $$7$0 + (i32.xor + (get_local $$2$0) + (get_local $$1$0) + ) + ) + (set_local $$7$1 + (i32.xor + (get_local $$2$1) + (get_local $$1$1) + ) + ) + (set_local $$8$0 + (call $___udivmoddi4 + (get_local $$4$0) + (get_local $$4$1) + (get_local $$6$0) + (get_global $tempRet0) + (i32.const 0) + ) + ) + (set_local $$10$0 + (call $_i64Subtract + (i32.xor + (get_local $$8$0) + (get_local $$7$0) + ) + (i32.xor + (get_global $tempRet0) + (get_local $$7$1) + ) + (get_local $$7$0) + (get_local $$7$1) + ) + ) + (return + (get_local $$10$0) + ) + ) + (func $___remdi3 (; 71 ;) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) + (local $$rem i32) + (local $$1$0 i32) + (local $$1$1 i32) + (local $$2$0 i32) + (local $$2$1 i32) + (local $$4$0 i32) + (local $$4$1 i32) + (local $$6$0 i32) + (local $$10$0 i32) + (local $$10$1 i32) + (local $__stackBase__ i32) + (set_local $__stackBase__ + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $$rem + (get_local $__stackBase__) + ) + (set_local $$1$0 + (i32.or + (i32.shr_s + (get_local $$a$1) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$1$1 + (i32.or + (i32.shr_s + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$2$0 + (i32.or + (i32.shr_s + (get_local $$b$1) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$2$1 + (i32.or + (i32.shr_s + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$4$0 + (call $_i64Subtract + (i32.xor + (get_local $$1$0) + (get_local $$a$0) + ) + (i32.xor + (get_local $$1$1) + (get_local $$a$1) + ) + (get_local $$1$0) + (get_local $$1$1) + ) + ) + (set_local $$4$1 + (get_global $tempRet0) + ) + (set_local $$6$0 + (call $_i64Subtract + (i32.xor + (get_local $$2$0) + (get_local $$b$0) + ) + (i32.xor + (get_local $$2$1) + (get_local $$b$1) + ) + (get_local $$2$0) + (get_local $$2$1) + ) + ) + (drop + (call $___udivmoddi4 + (get_local $$4$0) + (get_local $$4$1) + (get_local $$6$0) + (get_global $tempRet0) + (get_local $$rem) + ) + ) + (set_local $$10$0 + (call $_i64Subtract + (i32.xor + (i32.load + (get_local $$rem) + ) + (get_local $$1$0) + ) + (i32.xor + (i32.load + (i32.add + (get_local $$rem) + (i32.const 4) + ) + ) + (get_local $$1$1) + ) + (get_local $$1$0) + (get_local $$1$1) + ) + ) + (set_local $$10$1 + (get_global $tempRet0) + ) + (set_global $STACKTOP + (get_local $__stackBase__) + ) + (return + (block (result i32) + (block + (set_global $tempRet0 + (get_local $$10$1) + ) + (drop + (get_global $tempRet0) + ) + ) + (get_local $$10$0) + ) + ) + ) + (func $___muldi3 (; 72 ;) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) + (local $$x_sroa_0_0_extract_trunc i32) + (local $$y_sroa_0_0_extract_trunc i32) + (local $$1$0 i32) + (local $$1$1 i32) + (local $$2 i32) + (set_local $$x_sroa_0_0_extract_trunc + (get_local $$a$0) + ) + (set_local $$y_sroa_0_0_extract_trunc + (get_local $$b$0) + ) + (set_local $$1$0 + (call $___muldsi3 + (get_local $$x_sroa_0_0_extract_trunc) + (get_local $$y_sroa_0_0_extract_trunc) + ) + ) + (set_local $$1$1 + (get_global $tempRet0) + ) + (set_local $$2 + (i32.mul + (get_local $$a$1) + (get_local $$y_sroa_0_0_extract_trunc) + ) + ) + (return + (block (result i32) + (block + (set_global $tempRet0 + (i32.or + (i32.add + (i32.add + (i32.mul + (get_local $$b$1) + (get_local $$x_sroa_0_0_extract_trunc) + ) + (get_local $$2) + ) + (get_local $$1$1) + ) + (i32.and + (get_local $$1$1) + (i32.const 0) + ) + ) + ) + (drop + (get_global $tempRet0) + ) + ) + (i32.or + (i32.const 0) + (i32.and + (get_local $$1$0) + (i32.const -1) + ) + ) + ) + ) + ) + (func $___udivdi3 (; 73 ;) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) + (local $$1$0 i32) + (set_local $$1$0 + (call $___udivmoddi4 + (get_local $$a$0) + (get_local $$a$1) + (get_local $$b$0) + (get_local $$b$1) + (i32.const 0) + ) + ) + (return + (get_local $$1$0) + ) + ) + (func $___uremdi3 (; 74 ;) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) + (local $$rem i32) + (local $__stackBase__ i32) + (set_local $__stackBase__ + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $$rem + (get_local $__stackBase__) + ) + (drop + (call $___udivmoddi4 + (get_local $$a$0) + (get_local $$a$1) + (get_local $$b$0) + (get_local $$b$1) + (get_local $$rem) + ) + ) + (set_global $STACKTOP + (get_local $__stackBase__) + ) + (return + (block (result i32) + (block + (set_global $tempRet0 + (i32.load + (i32.add + (get_local $$rem) + (i32.const 4) + ) + ) + ) + (drop + (get_global $tempRet0) + ) + ) + (i32.load + (get_local $$rem) + ) + ) + ) + ) + (func $___udivmoddi4 (; 75 ;) (param $xl i32) (param $xh i32) (param $yl i32) (param $yh i32) (param $r i32) (result i32) + (local $x64 i64) + (local $y64 i64) + (set_local $x64 + (i64.or + (i64.extend_u/i32 + (get_local $xl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $xh) + ) + (i64.const 32) + ) + ) + ) + (set_local $y64 + (i64.or + (i64.extend_u/i32 + (get_local $yl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $yh) + ) + (i64.const 32) + ) + ) + ) + (if + (get_local $r) + (i64.store + (get_local $r) + (i64.rem_u + (get_local $x64) + (get_local $y64) + ) + ) + ) + (set_local $x64 + (i64.div_u + (get_local $x64) + (get_local $y64) + ) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $x64) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $x64) + ) + ) + (func $dynCall_ii (; 76 ;) (param $index i32) (param $a1 i32) (result i32) + (return + (call_indirect (type $FUNCSIG$ii) + (get_local $a1) + (i32.add + (i32.and + (get_local $index) + (i32.const 1) + ) + (i32.const 0) + ) + ) + ) + ) + (func $dynCall_iiii (; 77 ;) (param $index i32) (param $a1 i32) (param $a2 i32) (param $a3 i32) (result i32) + (return + (call_indirect (type $FUNCSIG$iiii) + (get_local $a1) + (get_local $a2) + (get_local $a3) + (i32.add + (i32.and + (get_local $index) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (func $dynCall_vi (; 78 ;) (param $index i32) (param $a1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $a1) + (i32.add + (i32.and + (get_local $index) + (i32.const 7) + ) + (i32.const 10) + ) + ) + ) + (func $b0 (; 79 ;) (param $p0 i32) (result i32) + (call $nullFunc_ii + (i32.const 0) + ) + (return + (i32.const 0) + ) + ) + (func $b1 (; 80 ;) (param $p0 i32) (param $p1 i32) (param $p2 i32) (result i32) + (call $nullFunc_iiii + (i32.const 1) + ) + (return + (i32.const 0) + ) + ) + (func $b2 (; 81 ;) (param $p0 i32) + (call $nullFunc_vi + (i32.const 2) + ) + ) +) diff --git a/src/binaryen/test/emcc_hello_world.fromasm.imprecise b/src/binaryen/test/emcc_hello_world.fromasm.imprecise new file mode 100644 index 0000000000..bcc64a6623 --- /dev/null +++ b/src/binaryen/test/emcc_hello_world.fromasm.imprecise @@ -0,0 +1,15610 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "abort" (func $abort)) + (import "env" "nullFunc_ii" (func $nullFunc_ii (param i32))) + (import "env" "nullFunc_iiii" (func $nullFunc_iiii (param i32))) + (import "env" "nullFunc_vi" (func $nullFunc_vi (param i32))) + (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) + (import "env" "___lock" (func $___lock (param i32))) + (import "env" "_pthread_self" (func $_pthread_self (result i32))) + (import "env" "_abort" (func $_abort)) + (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) + (import "env" "_sbrk" (func $_sbrk (param i32) (result i32))) + (import "env" "_time" (func $_time (param i32) (result i32))) + (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $___unlock (param i32))) + (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) + (import "env" "_sysconf" (func $_sysconf (param i32) (result i32))) + (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 18 18 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (elem (get_global $tableBase) $b0 $___stdio_close $b1 $b1 $___stdout_write $___stdio_seek $___stdio_write $b1 $b1 $b1 $b2 $b2 $b2 $b2 $b2 $_cleanup $b2 $b2) + (export "_i64Subtract" (func $_i64Subtract)) + (export "_free" (func $_free)) + (export "_main" (func $_main)) + (export "_i64Add" (func $_i64Add)) + (export "_memset" (func $_memset)) + (export "_malloc" (func $_malloc)) + (export "_memcpy" (func $_memcpy)) + (export "_bitshift64Lshr" (func $_bitshift64Lshr)) + (export "_fflush" (func $_fflush)) + (export "___errno_location" (func $___errno_location)) + (export "_bitshift64Shl" (func $_bitshift64Shl)) + (export "runPostSets" (func $runPostSets)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackSave" (func $stackSave)) + (export "stackRestore" (func $stackRestore)) + (export "establishStackSpace" (func $establishStackSpace)) + (export "setThrew" (func $setThrew)) + (export "setTempRet0" (func $setTempRet0)) + (export "getTempRet0" (func $getTempRet0)) + (export "dynCall_ii" (func $dynCall_ii)) + (export "dynCall_iiii" (func $dynCall_iiii)) + (export "dynCall_vi" (func $dynCall_vi)) + (export "___udivmoddi4" (func $___udivmoddi4)) + (func $stackAlloc (; 18 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $0) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (get_local $1) + ) + (func $stackSave (; 19 ;) (result i32) + (get_global $STACKTOP) + ) + (func $stackRestore (; 20 ;) (param $0 i32) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $establishStackSpace (; 21 ;) (param $0 i32) (param $1 i32) + (set_global $STACKTOP + (get_local $0) + ) + (set_global $STACK_MAX + (get_local $1) + ) + ) + (func $setThrew (; 22 ;) (param $0 i32) (param $1 i32) + (if + (i32.eqz + (get_global $__THREW__) + ) + (block + (set_global $__THREW__ + (get_local $0) + ) + (set_global $threwValue + (get_local $1) + ) + ) + ) + ) + (func $setTempRet0 (; 23 ;) (param $0 i32) + (set_global $tempRet0 + (get_local $0) + ) + ) + (func $getTempRet0 (; 24 ;) (result i32) + (get_global $tempRet0) + ) + (func $_main (; 25 ;) (result i32) + (local $0 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (drop + (call $_printf + (i32.const 672) + (get_local $0) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (i32.const 0) + ) + (func $_frexp (; 26 ;) (param $0 f64) (param $1 i32) (result f64) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (f64.store + (get_global $tempDoublePtr) + (get_local $0) + ) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default + (tee_local $3 + (i32.and + (tee_local $3 + (call $_bitshift64Lshr + (tee_local $2 + (i32.load + (get_global $tempDoublePtr) + ) + ) + (tee_local $4 + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + ) + (i32.const 52) + ) + ) + (i32.const 2047) + ) + ) + ) + ) + (i32.store + (get_local $1) + (tee_local $2 + (if (result i32) + (f64.ne + (get_local $0) + (f64.const 0) + ) + (block (result i32) + (set_local $0 + (call $_frexp + (f64.mul + (get_local $0) + (f64.const 18446744073709551615) + ) + (get_local $1) + ) + ) + (i32.add + (i32.load + (get_local $1) + ) + (i32.const -64) + ) + ) + (i32.const 0) + ) + ) + ) + (br $switch) + ) + (br $switch) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $3) + (i32.const -1022) + ) + ) + (i32.store + (get_global $tempDoublePtr) + (get_local $2) + ) + (i32.store offset=4 + (get_global $tempDoublePtr) + (i32.or + (i32.and + (get_local $4) + (i32.const -2146435073) + ) + (i32.const 1071644672) + ) + ) + (set_local $0 + (f64.load + (get_global $tempDoublePtr) + ) + ) + ) + (get_local $0) + ) + (func $_strerror (; 27 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (i32.const 0) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in + (br_if $__rjti$0 + (i32.eq + (i32.load8_u offset=687 + (get_local $1) + ) + (get_local $0) + ) + ) + (br_if $while-in + (i32.ne + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 87) + ) + ) + (set_local $1 + (i32.const 87) + ) + (br $__rjti$1) + ) + ) + (br_if $__rjti$1 + (get_local $1) + ) + (set_local $0 + (i32.const 775) + ) + (br $__rjto$1) + ) + (set_local $0 + (i32.const 775) + ) + (loop $while-in1 + (loop $while-in3 + (set_local $2 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (if + (i32.load8_s + (get_local $0) + ) + (block + (set_local $0 + (get_local $2) + ) + (br $while-in3) + ) + (set_local $0 + (get_local $2) + ) + ) + ) + (br_if $while-in1 + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + ) + ) + ) + (get_local $0) + ) + (func $___errno_location (; 28 ;) (result i32) + (if (result i32) + (i32.load + (i32.const 16) + ) + (i32.load offset=60 + (call $_pthread_self) + ) + (i32.const 60) + ) + ) + (func $___stdio_close (; 29 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (i32.store + (tee_local $2 + (get_local $1) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (set_local $0 + (call $___syscall_ret + (call $___syscall6 + (i32.const 6) + (get_local $2) + ) + ) + ) + (set_global $STACKTOP + (get_local $1) + ) + (get_local $0) + ) + (func $___stdout_write (; 30 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 80) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $3 + (get_local $4) + ) + (set_local $5 + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + (i32.store offset=36 + (get_local $0) + (i32.const 4) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 64) + ) + ) + (block + (i32.store + (get_local $3) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 21505) + ) + (i32.store offset=8 + (get_local $3) + (get_local $5) + ) + (if + (call $___syscall54 + (i32.const 54) + (get_local $3) + ) + (i32.store8 offset=75 + (get_local $0) + (i32.const -1) + ) + ) + ) + ) + (set_local $0 + (call $___stdio_write + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $___stdio_seek (; 31 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (i32.store + (tee_local $3 + (get_local $4) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + (i32.store offset=16 + (get_local $3) + (get_local $2) + ) + (set_local $0 + (if (result i32) + (i32.lt_s + (call $___syscall_ret + (call $___syscall140 + (i32.const 140) + (get_local $3) + ) + ) + (i32.const 0) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.const -1) + ) + (i32.const -1) + ) + (i32.load + (get_local $0) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $_fflush (; 32 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (block $do-once + (if + (get_local $0) + (block + (if + (i32.le_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (block + (set_local $0 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (br $do-once) + ) + ) + (set_local $2 + (i32.eqz + (call $___lockfile + (get_local $0) + ) + ) + ) + (set_local $1 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (set_local $0 + (if (result i32) + (get_local $2) + (get_local $1) + (block (result i32) + (call $___unlockfile + (get_local $0) + ) + (get_local $1) + ) + ) + ) + ) + (block + (set_local $0 + (if (result i32) + (i32.load + (i32.const 12) + ) + (call $_fflush + (i32.load + (i32.const 12) + ) + ) + (i32.const 0) + ) + ) + (call $___lock + (i32.const 44) + ) + (if + (tee_local $1 + (i32.load + (i32.const 40) + ) + ) + (loop $while-in + (set_local $2 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (get_local $1) + ) + (i32.const -1) + ) + (call $___lockfile + (get_local $1) + ) + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.load offset=20 + (get_local $1) + ) + (i32.load offset=28 + (get_local $1) + ) + ) + (set_local $0 + (i32.or + (call $___fflush_unlocked + (get_local $1) + ) + (get_local $0) + ) + ) + ) + (if + (get_local $2) + (call $___unlockfile + (get_local $1) + ) + ) + (br_if $while-in + (tee_local $1 + (i32.load offset=56 + (get_local $1) + ) + ) + ) + ) + ) + (call $___unlock + (i32.const 44) + ) + ) + ) + ) + (get_local $0) + ) + (func $_printf (; 33 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (set_local $2 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (i32.store + (tee_local $3 + (get_local $2) + ) + (get_local $1) + ) + (set_local $0 + (call $_vfprintf + (i32.load + (i32.const 8) + ) + (get_local $0) + (get_local $3) + ) + ) + (set_global $STACKTOP + (get_local $2) + ) + (get_local $0) + ) + (func $___lockfile (; 34 ;) (param $0 i32) (result i32) + (i32.const 0) + ) + (func $___unlockfile (; 35 ;) (param $0 i32) + (nop) + ) + (func $___stdio_write (; 36 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $8 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $9 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (set_local $10 + (get_local $8) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $8) + (i32.const 32) + ) + ) + (tee_local $3 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $4) + (tee_local $3 + (i32.sub + (i32.load + (tee_local $11 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (get_local $3) + ) + ) + ) + (i32.store offset=8 + (get_local $4) + (get_local $1) + ) + (i32.store offset=12 + (get_local $4) + (get_local $2) + ) + (set_local $13 + (i32.add + (get_local $0) + (i32.const 60) + ) + ) + (set_local $14 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (set_local $1 + (get_local $4) + ) + (set_local $4 + (i32.const 2) + ) + (set_local $12 + (i32.add + (get_local $3) + (get_local $2) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in + (if + (i32.load + (i32.const 16) + ) + (block + (call $_pthread_cleanup_push + (i32.const 5) + (get_local $0) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $10) + (get_local $1) + ) + (i32.store offset=8 + (get_local $10) + (get_local $4) + ) + (set_local $3 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $10) + ) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $9) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $9) + (get_local $1) + ) + (i32.store offset=8 + (get_local $9) + (get_local $4) + ) + (set_local $3 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $9) + ) + ) + ) + ) + ) + (br_if $__rjti$0 + (i32.eq + (get_local $12) + (get_local $3) + ) + ) + (br_if $__rjti$1 + (i32.lt_s + (get_local $3) + (i32.const 0) + ) + ) + (set_local $5 + (if (result i32) + (i32.gt_u + (get_local $3) + (tee_local $5 + (i32.load offset=4 + (get_local $1) + ) + ) + ) + (block (result i32) + (i32.store + (get_local $6) + (tee_local $7 + (i32.load + (get_local $14) + ) + ) + ) + (i32.store + (get_local $11) + (get_local $7) + ) + (set_local $7 + (i32.load offset=12 + (get_local $1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const -1) + ) + ) + (i32.sub + (get_local $3) + (get_local $5) + ) + ) + (block (result i32) + (if + (i32.eq + (get_local $4) + (i32.const 2) + ) + (block + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (get_local $3) + ) + ) + (set_local $7 + (get_local $5) + ) + (set_local $4 + (i32.const 2) + ) + ) + (set_local $7 + (get_local $5) + ) + ) + (get_local $3) + ) + ) + ) + (i32.store + (get_local $1) + (i32.add + (i32.load + (get_local $1) + ) + (get_local $5) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.sub + (get_local $7) + (get_local $5) + ) + ) + (set_local $12 + (i32.sub + (get_local $12) + (get_local $3) + ) + ) + (br $while-in) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (tee_local $1 + (i32.load + (get_local $14) + ) + ) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.store + (get_local $6) + (get_local $1) + ) + (i32.store + (get_local $11) + (get_local $1) + ) + (br $__rjto$1) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (set_local $2 + (select + (i32.const 0) + (i32.sub + (get_local $2) + (i32.load offset=4 + (get_local $1) + ) + ) + (i32.eq + (get_local $4) + (i32.const 2) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $8) + ) + (get_local $2) + ) + (func $_vfprintf (; 37 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 224) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $5 + (i32.add + (get_local $4) + (i32.const 120) + ) + ) + (set_local $7 + (get_local $4) + ) + (set_local $6 + (i32.add + (get_local $4) + (i32.const 136) + ) + ) + (set_local $9 + (i32.add + (tee_local $3 + (tee_local $8 + (i32.add + (get_local $4) + (i32.const 80) + ) + ) + ) + (i32.const 40) + ) + ) + (loop $do-in + (i32.store + (get_local $3) + (i32.const 0) + ) + (br_if $do-in + (i32.lt_s + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (get_local $9) + ) + ) + ) + (i32.store + (get_local $5) + (i32.load + (get_local $2) + ) + ) + (set_local $0 + (if (result i32) + (i32.lt_s + (call $_printf_core + (i32.const 0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + (i32.const 0) + ) + (i32.const -1) + (block (result i32) + (set_local $14 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (call $___lockfile + (get_local $0) + ) + (i32.const 0) + ) + ) + (set_local $10 + (i32.load + (get_local $0) + ) + ) + (if + (i32.lt_s + (i32.load8_s offset=74 + (get_local $0) + ) + (i32.const 1) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $10) + (i32.const -33) + ) + ) + ) + (if + (i32.load + (tee_local $11 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + ) + (set_local $1 + (call $_printf_core + (get_local $0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + ) + (block + (set_local $13 + (i32.load + (tee_local $12 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + ) + ) + (i32.store + (get_local $12) + (get_local $6) + ) + (i32.store + (tee_local $9 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + (get_local $6) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (get_local $6) + ) + (i32.store + (get_local $11) + (i32.const 80) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (i32.add + (get_local $6) + (i32.const 80) + ) + ) + (set_local $1 + (call $_printf_core + (get_local $0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + ) + (if + (get_local $13) + (block + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (set_local $1 + (select + (get_local $1) + (i32.const -1) + (i32.load + (get_local $3) + ) + ) + ) + (i32.store + (get_local $12) + (get_local $13) + ) + (i32.store + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $9) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + ) + ) + ) + ) + (i32.store + (get_local $0) + (i32.or + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.and + (get_local $10) + (i32.const 32) + ) + ) + ) + (if + (get_local $14) + (call $___unlockfile + (get_local $0) + ) + ) + (select + (i32.const -1) + (get_local $1) + (i32.and + (get_local $2) + (i32.const 32) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $___fwritex (; 38 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (block $label$break$L5 + (block $__rjti$0 + (br_if $__rjti$0 + (tee_local $3 + (i32.load + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + ) + (if + (call $___towrite + (get_local $2) + ) + (set_local $3 + (i32.const 0) + ) + (block + (set_local $3 + (i32.load + (get_local $4) + ) + ) + (br $__rjti$0) + ) + ) + (br $label$break$L5) + ) + (if + (i32.lt_u + (i32.sub + (get_local $3) + (tee_local $4 + (i32.load + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 20) + ) + ) + ) + ) + ) + (get_local $1) + ) + (block + (set_local $3 + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (br $label$break$L5) + ) + ) + (set_local $2 + (block $label$break$L10 (result i32) + (if (result i32) + (i32.gt_s + (i32.load8_s offset=75 + (get_local $2) + ) + (i32.const -1) + ) + (block (result i32) + (set_local $3 + (get_local $1) + ) + (loop $while-in + (drop + (br_if $label$break$L10 + (i32.const 0) + (i32.eqz + (get_local $3) + ) + ) + ) + (if + (i32.ne + (i32.load8_s + (i32.add + (get_local $0) + (tee_local $6 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + (i32.const 10) + ) + (block + (set_local $3 + (get_local $6) + ) + (br $while-in) + ) + ) + ) + (br_if $label$break$L5 + (i32.lt_u + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + (get_local $3) + ) + ) + (set_local $4 + (i32.load + (get_local $5) + ) + ) + (set_local $1 + (i32.sub + (get_local $1) + (get_local $3) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (get_local $3) + ) + ) + (get_local $3) + ) + (i32.const 0) + ) + ) + ) + (drop + (call $_memcpy + (get_local $4) + (get_local $0) + (get_local $1) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $1) + ) + ) + (set_local $3 + (i32.add + (get_local $2) + (get_local $1) + ) + ) + ) + (get_local $3) + ) + (func $___towrite (; 39 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (i32.load8_s + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 74) + ) + ) + ) + ) + (i32.store8 + (get_local $2) + (i32.or + (i32.add + (get_local $1) + (i32.const 255) + ) + (get_local $1) + ) + ) + (tee_local $0 + (if (result i32) + (i32.and + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.const 8) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.or + (get_local $1) + (i32.const 32) + ) + ) + (i32.const -1) + ) + (block (result i32) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=28 + (get_local $0) + (tee_local $1 + (i32.load offset=44 + (get_local $0) + ) + ) + ) + (i32.store offset=20 + (get_local $0) + (get_local $1) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (get_local $1) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (func $_wcrtomb (; 40 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $do-once (result i32) + (if (result i32) + (get_local $0) + (block (result i32) + (if + (i32.lt_u + (get_local $1) + (i32.const 128) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (br $do-once + (i32.const 1) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.const 2048) + ) + (block + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 192) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (br $do-once + (i32.const 2) + ) + ) + ) + (if + (i32.or + (i32.lt_u + (get_local $1) + (i32.const 55296) + ) + (i32.eq + (i32.and + (get_local $1) + (i32.const -8192) + ) + (i32.const 57344) + ) + ) + (block + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 12) + ) + (i32.const 224) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=2 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (br $do-once + (i32.const 3) + ) + ) + ) + (if (result i32) + (i32.lt_u + (i32.add + (get_local $1) + (i32.const -65536) + ) + (i32.const 1048576) + ) + (block (result i32) + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 18) + ) + (i32.const 240) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 12) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=2 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=3 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.const 4) + ) + (block (result i32) + (i32.store + (call $___errno_location) + (i32.const 84) + ) + (i32.const -1) + ) + ) + ) + (i32.const 1) + ) + ) + ) + (func $_wctomb (; 41 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (get_local $0) + (call $_wcrtomb + (get_local $0) + (get_local $1) + (i32.const 0) + ) + (i32.const 0) + ) + ) + (func $_memchr (; 42 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $5 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (block $label$break$L8 + (block $__rjti$2 + (if + (i32.and + (tee_local $4 + (i32.ne + (get_local $2) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.const 0) + ) + ) + (block + (set_local $4 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (br_if $__rjti$2 + (i32.eq + (i32.load8_u + (get_local $2) + ) + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + ) + (br_if $while-in + (i32.and + (tee_local $0 + (i32.ne + (tee_local $3 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 3) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (set_local $0 + (i32.const 0) + ) + (br $label$break$L8) + ) + (set_local $0 + (get_local $3) + ) + (if + (i32.ne + (i32.load8_u + (get_local $2) + ) + (tee_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (block + (set_local $3 + (i32.mul + (get_local $5) + (i32.const 16843009) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.le_u + (get_local $0) + (i32.const 3) + ) + ) + (loop $while-in3 + (if + (i32.eqz + (i32.and + (i32.xor + (i32.and + (tee_local $4 + (i32.xor + (i32.load + (get_local $2) + ) + (get_local $3) + ) + ) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $4) + (i32.const -16843009) + ) + ) + ) + (block + (set_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (br_if $while-in3 + (i32.gt_u + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + (i32.const 3) + ) + ) + (br $__rjti$0) + ) + ) + ) + (br $__rjto$0) + ) + (if + (i32.eqz + (get_local $0) + ) + (block + (set_local $0 + (i32.const 0) + ) + (br $label$break$L8) + ) + ) + ) + (loop $while-in5 + (br_if $label$break$L8 + (i32.eq + (i32.load8_u + (get_local $2) + ) + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br_if $while-in5 + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -1) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + ) + (select + (get_local $2) + (i32.const 0) + (get_local $0) + ) + ) + (func $___syscall_ret (; 43 ;) (param $0 i32) (result i32) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const -4096) + ) + (block (result i32) + (i32.store + (call $___errno_location) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + (get_local $0) + ) + ) + (func $___fflush_unlocked (; 44 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (tee_local $0 + (block $__rjto$0 (result i32) + (block $__rjti$0 + (br_if $__rjti$0 + (i32.le_u + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (br_if $__rjti$0 + (i32.load + (get_local $1) + ) + ) + (br $__rjto$0 + (i32.const -1) + ) + ) + (if + (i32.lt_u + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (tee_local $6 + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.sub + (get_local $4) + (get_local $6) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=40 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + (func $_cleanup (; 45 ;) (param $0 i32) + (if + (i32.eqz + (i32.load offset=68 + (get_local $0) + ) + ) + (call $___unlockfile + (get_local $0) + ) + ) + ) + (func $_printf_core (; 46 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 f64) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 f64) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (local $47 i32) + (local $48 i32) + (local $49 i32) + (local $50 i32) + (set_local $25 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 624) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $20 + (i32.add + (get_local $25) + (i32.const 16) + ) + ) + (set_local $19 + (get_local $25) + ) + (set_local $36 + (i32.add + (get_local $25) + (i32.const 528) + ) + ) + (set_local $29 + (i32.ne + (get_local $0) + (i32.const 0) + ) + ) + (set_local $39 + (tee_local $26 + (i32.add + (tee_local $5 + (i32.add + (get_local $25) + (i32.const 536) + ) + ) + (i32.const 40) + ) + ) + ) + (set_local $40 + (i32.add + (get_local $5) + (i32.const 39) + ) + ) + (set_local $44 + (i32.add + (tee_local $41 + (i32.add + (get_local $25) + (i32.const 8) + ) + ) + (i32.const 4) + ) + ) + (set_local $34 + (i32.add + (tee_local $5 + (i32.add + (get_local $25) + (i32.const 576) + ) + ) + (i32.const 12) + ) + ) + (set_local $42 + (i32.add + (get_local $5) + (i32.const 11) + ) + ) + (set_local $45 + (i32.sub + (tee_local $28 + (get_local $34) + ) + (tee_local $37 + (tee_local $22 + (i32.add + (get_local $25) + (i32.const 588) + ) + ) + ) + ) + ) + (set_local $46 + (i32.sub + (i32.const -2) + (get_local $37) + ) + ) + (set_local $47 + (i32.add + (get_local $28) + (i32.const 2) + ) + ) + (set_local $49 + (i32.add + (tee_local $48 + (i32.add + (get_local $25) + (i32.const 24) + ) + ) + (i32.const 288) + ) + ) + (set_local $43 + (tee_local $30 + (i32.add + (get_local $22) + (i32.const 9) + ) + ) + ) + (set_local $35 + (i32.add + (get_local $22) + (i32.const 8) + ) + ) + (set_local $16 + (i32.const 0) + ) + (set_local $5 + (get_local $1) + ) + (set_local $10 + (i32.const 0) + ) + (set_local $1 + (i32.const 0) + ) + (block $label$break$L343 + (block $__rjti$9 + (loop $label$continue$L1 + (block $label$break$L1 + (if + (i32.gt_s + (get_local $16) + (i32.const -1) + ) + (set_local $16 + (if (result i32) + (i32.gt_s + (get_local $10) + (i32.sub + (i32.const 2147483647) + (get_local $16) + ) + ) + (block (result i32) + (i32.store + (call $___errno_location) + (i32.const 75) + ) + (i32.const -1) + ) + (i32.add + (get_local $10) + (get_local $16) + ) + ) + ) + ) + (br_if $__rjti$9 + (i32.eqz + (tee_local $7 + (i32.load8_s + (get_local $5) + ) + ) + ) + ) + (set_local $10 + (get_local $5) + ) + (block $label$break$L12 + (block $__rjti$1 + (loop $label$continue$L9 + (block $label$break$L9 + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.shr_s + (i32.shl + (get_local $7) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (set_local $6 + (get_local $10) + ) + (br $__rjti$1) + ) + (set_local $6 + (get_local $10) + ) + (br $label$break$L9) + ) + (set_local $7 + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + ) + (br $label$continue$L9) + ) + ) + (br $label$break$L12) + ) + (loop $while-in + (br_if $label$break$L12 + (i32.ne + (i32.load8_s offset=1 + (get_local $6) + ) + (i32.const 37) + ) + ) + (set_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (br_if $while-in + (i32.eq + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 2) + ) + ) + ) + (i32.const 37) + ) + ) + ) + ) + (set_local $7 + (i32.sub + (get_local $10) + (get_local $5) + ) + ) + (if + (get_local $29) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $5) + (get_local $7) + (get_local $0) + ) + ) + ) + ) + (if + (i32.ne + (get_local $10) + (get_local $5) + ) + (block + (set_local $5 + (get_local $6) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + ) + (set_local $8 + (if (result i32) + (i32.lt_u + (tee_local $8 + (i32.add + (tee_local $11 + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block (result i32) + (set_local $6 + (i32.load8_s + (tee_local $10 + (select + (i32.add + (get_local $6) + (i32.const 3) + ) + (get_local $10) + (tee_local $11 + (i32.eq + (i32.load8_s offset=2 + (get_local $6) + ) + (i32.const 36) + ) + ) + ) + ) + ) + ) + (set_local $17 + (select + (get_local $8) + (i32.const -1) + (get_local $11) + ) + ) + (select + (i32.const 1) + (get_local $1) + (get_local $11) + ) + ) + (block (result i32) + (set_local $6 + (get_local $11) + ) + (set_local $17 + (i32.const -1) + ) + (get_local $1) + ) + ) + ) + (block $label$break$L25 + (if + (i32.eq + (i32.and + (tee_local $11 + (i32.shr_s + (i32.shl + (get_local $6) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (i32.const -32) + ) + (i32.const 32) + ) + (block + (set_local $1 + (get_local $6) + ) + (set_local $6 + (get_local $11) + ) + (set_local $11 + (i32.const 0) + ) + (loop $while-in4 + (if + (i32.eqz + (i32.and + (i32.shl + (i32.const 1) + (i32.add + (get_local $6) + (i32.const -32) + ) + ) + (i32.const 75913) + ) + ) + (block + (set_local $6 + (get_local $1) + ) + (set_local $1 + (get_local $11) + ) + (br $label$break$L25) + ) + ) + (set_local $11 + (i32.or + (i32.shl + (i32.const 1) + (i32.add + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -32) + ) + ) + (get_local $11) + ) + ) + (br_if $while-in4 + (i32.eq + (i32.and + (tee_local $6 + (tee_local $1 + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + ) + ) + (i32.const -32) + ) + (i32.const 32) + ) + ) + (set_local $6 + (get_local $1) + ) + (set_local $1 + (get_local $11) + ) + ) + ) + (set_local $1 + (i32.const 0) + ) + ) + ) + (block $do-once5 + (if + (i32.eq + (i32.and + (get_local $6) + (i32.const 255) + ) + (i32.const 42) + ) + (block + (set_local $10 + (block $__rjto$0 (result i32) + (if + (i32.eqz + (i32.or + (i32.ge_u + (tee_local $11 + (i32.add + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (i32.ne + (i32.load8_s offset=2 + (get_local $10) + ) + (i32.const 36) + ) + ) + ) + (block + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + (i32.const 10) + ) + (drop + (i32.load offset=4 + (tee_local $6 + (i32.add + (get_local $3) + (i32.shl + (i32.add + (i32.load8_s + (get_local $6) + ) + (i32.const -48) + ) + (i32.const 3) + ) + ) + ) + ) + ) + (set_local $8 + (i32.const 1) + ) + (set_local $14 + (i32.load + (get_local $6) + ) + ) + (br $__rjto$0 + (i32.add + (get_local $10) + (i32.const 3) + ) + ) + ) + ) + (if + (get_local $8) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (if + (i32.eqz + (get_local $29) + ) + (block + (set_local $11 + (get_local $1) + ) + (set_local $10 + (get_local $6) + ) + (set_local $1 + (i32.const 0) + ) + (set_local $14 + (i32.const 0) + ) + (br $do-once5) + ) + ) + (set_local $14 + (i32.load + (tee_local $10 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $8 + (i32.const 0) + ) + (get_local $6) + ) + ) + (set_local $11 + (if (result i32) + (i32.lt_s + (get_local $14) + (i32.const 0) + ) + (block (result i32) + (set_local $14 + (i32.sub + (i32.const 0) + (get_local $14) + ) + ) + (i32.or + (get_local $1) + (i32.const 8192) + ) + ) + (get_local $1) + ) + ) + (set_local $1 + (get_local $8) + ) + ) + (if + (i32.lt_u + (tee_local $6 + (i32.add + (i32.shr_s + (i32.shl + (get_local $6) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $11 + (i32.const 0) + ) + (loop $while-in8 + (set_local $6 + (i32.add + (i32.mul + (get_local $11) + (i32.const 10) + ) + (get_local $6) + ) + ) + (if + (i32.lt_u + (tee_local $9 + (i32.add + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $11 + (get_local $6) + ) + (set_local $6 + (get_local $9) + ) + (br $while-in8) + ) + ) + ) + (if + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + (block + (set_local $11 + (get_local $1) + ) + (set_local $1 + (get_local $8) + ) + (set_local $14 + (get_local $6) + ) + ) + ) + ) + (block + (set_local $11 + (get_local $1) + ) + (set_local $1 + (get_local $8) + ) + (set_local $14 + (i32.const 0) + ) + ) + ) + ) + ) + (set_local $6 + (block $label$break$L46 (result i32) + (if (result i32) + (i32.eq + (i32.load8_s + (get_local $10) + ) + (i32.const 46) + ) + (block (result i32) + (if + (i32.ne + (tee_local $8 + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + ) + (i32.const 42) + ) + (block + (if + (i32.lt_u + (tee_local $9 + (i32.add + (get_local $8) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $10 + (get_local $6) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $6 + (get_local $9) + ) + ) + (block + (set_local $10 + (get_local $6) + ) + (br $label$break$L46 + (i32.const 0) + ) + ) + ) + (loop $while-in11 + (drop + (br_if $label$break$L46 + (tee_local $6 + (i32.add + (i32.mul + (get_local $8) + (i32.const 10) + ) + (get_local $6) + ) + ) + (i32.ge_u + (tee_local $9 + (i32.add + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + ) + ) + (set_local $8 + (get_local $6) + ) + (set_local $6 + (get_local $9) + ) + (br $while-in11) + ) + ) + ) + (if + (i32.lt_u + (tee_local $8 + (i32.add + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $10) + (i32.const 2) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (if + (i32.eq + (i32.load8_s offset=3 + (get_local $10) + ) + (i32.const 36) + ) + (block + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $8) + (i32.const 2) + ) + ) + (i32.const 10) + ) + (drop + (i32.load offset=4 + (tee_local $6 + (i32.add + (get_local $3) + (i32.shl + (i32.add + (i32.load8_s + (get_local $6) + ) + (i32.const -48) + ) + (i32.const 3) + ) + ) + ) + ) + ) + (set_local $10 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (br $label$break$L46 + (i32.load + (get_local $6) + ) + ) + ) + ) + ) + (if + (get_local $1) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (if (result i32) + (get_local $29) + (block (result i32) + (set_local $8 + (i32.load + (tee_local $10 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $10 + (get_local $6) + ) + (get_local $8) + ) + (block (result i32) + (set_local $10 + (get_local $6) + ) + (i32.const 0) + ) + ) + ) + (i32.const -1) + ) + ) + ) + (set_local $8 + (get_local $10) + ) + (set_local $9 + (i32.const 0) + ) + (loop $while-in13 + (if + (i32.gt_u + (tee_local $12 + (i32.add + (i32.load8_s + (get_local $8) + ) + (i32.const -65) + ) + ) + (i32.const 57) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $10 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + (if + (i32.lt_u + (i32.add + (tee_local $12 + (i32.and + (tee_local $13 + (i32.load8_s + (i32.add + (i32.add + (i32.mul + (get_local $9) + (i32.const 58) + ) + (i32.const 3611) + ) + (get_local $12) + ) + ) + ) + (i32.const 255) + ) + ) + (i32.const -1) + ) + (i32.const 8) + ) + (block + (set_local $8 + (get_local $10) + ) + (set_local $9 + (get_local $12) + ) + (br $while-in13) + ) + (set_local $18 + (get_local $8) + ) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $13) + (i32.const 255) + ) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $8 + (i32.gt_s + (get_local $17) + (i32.const -1) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (if + (i32.eq + (i32.and + (get_local $13) + (i32.const 255) + ) + (i32.const 19) + ) + (if + (get_local $8) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + (br $__rjti$2) + ) + (block + (if + (get_local $8) + (block + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $17) + (i32.const 2) + ) + ) + (get_local $12) + ) + (set_local $13 + (i32.load offset=4 + (tee_local $12 + (i32.add + (get_local $3) + (i32.shl + (get_local $17) + (i32.const 3) + ) + ) + ) + ) + ) + (i32.store + (tee_local $8 + (get_local $19) + ) + (i32.load + (get_local $12) + ) + ) + (i32.store offset=4 + (get_local $8) + (get_local $13) + ) + (br $__rjti$2) + ) + ) + (if + (i32.eqz + (get_local $29) + ) + (block + (set_local $16 + (i32.const 0) + ) + (br $label$break$L1) + ) + ) + (call $_pop_arg_336 + (get_local $19) + (get_local $12) + (get_local $2) + ) + ) + ) + (br $__rjto$2) + ) + (if + (i32.eqz + (get_local $29) + ) + (block + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + ) + ) + (set_local $11 + (select + (tee_local $8 + (i32.and + (get_local $11) + (i32.const -65537) + ) + ) + (get_local $11) + (i32.and + (get_local $11) + (i32.const 8192) + ) + ) + ) + (set_local $5 + (block $__rjto$8 (result i32) + (block $__rjti$8 + (block $__rjti$7 + (block $__rjti$6 + (block $__rjti$5 + (block $__rjti$4 + (block $__rjti$3 + (block $switch-default120 + (block $switch-case42 + (block $switch-case41 + (block $switch-case40 + (block $switch-case39 + (block $switch-case38 + (block $switch-case37 + (block $switch-case36 + (block $switch-case34 + (block $switch-case33 + (block $switch-case29 + (block $switch-case28 + (block $switch-case27 + (br_table $switch-case42 $switch-default120 $switch-case40 $switch-default120 $switch-case42 $switch-case42 $switch-case42 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case41 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case29 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case42 $switch-default120 $switch-case37 $switch-case34 $switch-case42 $switch-case42 $switch-case42 $switch-default120 $switch-case34 $switch-default120 $switch-default120 $switch-default120 $switch-case38 $switch-case27 $switch-case33 $switch-case28 $switch-default120 $switch-default120 $switch-case39 $switch-default120 $switch-case36 $switch-default120 $switch-default120 $switch-case29 $switch-default120 + (i32.sub + (tee_local $18 + (select + (i32.and + (tee_local $12 + (i32.load8_s + (get_local $18) + ) + ) + (i32.const -33) + ) + (get_local $12) + (i32.and + (i32.ne + (get_local $9) + (i32.const 0) + ) + (i32.eq + (i32.and + (get_local $12) + (i32.const 15) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 65) + ) + ) + ) + (block $switch-default26 + (block $switch-case25 + (block $switch-case24 + (block $switch-case23 + (block $switch-case22 + (block $switch-case21 + (block $switch-case20 + (block $switch-case19 + (br_table $switch-case19 $switch-case20 $switch-case21 $switch-case22 $switch-case23 $switch-default26 $switch-case24 $switch-case25 $switch-default26 + (get_local $9) + ) + ) + (i32.store + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (tee_local $5 + (i32.load + (get_local $19) + ) + ) + (get_local $16) + ) + (i32.store offset=4 + (get_local $5) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $16) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store16 + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store8 + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (tee_local $5 + (i32.load + (get_local $19) + ) + ) + (get_local $16) + ) + (i32.store offset=4 + (get_local $5) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $16) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (set_local $7 + (i32.or + (get_local $11) + (i32.const 8) + ) + ) + (set_local $6 + (select + (get_local $6) + (i32.const 8) + (i32.gt_u + (get_local $6) + (i32.const 8) + ) + ) + ) + (set_local $18 + (i32.const 120) + ) + (br $__rjti$3) + ) + (set_local $7 + (get_local $11) + ) + (br $__rjti$3) + ) + (if + (i32.and + (i32.eqz + (tee_local $7 + (i32.load + (tee_local $5 + (get_local $19) + ) + ) + ) + ) + (i32.eqz + (tee_local $8 + (i32.load offset=4 + (get_local $5) + ) + ) + ) + ) + (set_local $8 + (get_local $26) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $7 + (get_local $8) + ) + (set_local $8 + (get_local $26) + ) + (loop $while-in32 + (i32.store8 + (tee_local $8 + (i32.add + (get_local $8) + (i32.const -1) + ) + ) + (i32.or + (i32.and + (get_local $5) + (i32.const 7) + ) + (i32.const 48) + ) + ) + (br_if $while-in32 + (i32.eqz + (i32.and + (i32.eqz + (tee_local $5 + (call $_bitshift64Lshr + (get_local $5) + (get_local $7) + (i32.const 3) + ) + ) + ) + (i32.eqz + (tee_local $7 + (get_global $tempRet0) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $5 + (if (result i32) + (i32.and + (get_local $11) + (i32.const 8) + ) + (block (result i32) + (set_local $7 + (get_local $11) + ) + (set_local $6 + (select + (tee_local $11 + (i32.add + (i32.sub + (get_local $39) + (get_local $8) + ) + (i32.const 1) + ) + ) + (get_local $6) + (i32.lt_s + (get_local $6) + (get_local $11) + ) + ) + ) + (get_local $8) + ) + (block (result i32) + (set_local $7 + (get_local $11) + ) + (get_local $8) + ) + ) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$8) + ) + (set_local $5 + (i32.load + (tee_local $7 + (get_local $19) + ) + ) + ) + (if + (i32.lt_s + (tee_local $7 + (i32.load offset=4 + (get_local $7) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (tee_local $8 + (get_local $19) + ) + (tee_local $5 + (call $_i64Subtract + (i32.const 0) + (i32.const 0) + (get_local $5) + (get_local $7) + ) + ) + ) + (i32.store offset=4 + (get_local $8) + (tee_local $7 + (get_global $tempRet0) + ) + ) + (set_local $8 + (i32.const 1) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$4) + ) + ) + (set_local $9 + (if (result i32) + (i32.and + (get_local $11) + (i32.const 2048) + ) + (block (result i32) + (set_local $8 + (i32.const 1) + ) + (i32.const 4092) + ) + (block (result i32) + (set_local $8 + (tee_local $9 + (i32.and + (get_local $11) + (i32.const 1) + ) + ) + ) + (select + (i32.const 4093) + (i32.const 4091) + (get_local $9) + ) + ) + ) + ) + (br $__rjti$4) + ) + (set_local $5 + (i32.load + (tee_local $7 + (get_local $19) + ) + ) + ) + (set_local $7 + (i32.load offset=4 + (get_local $7) + ) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$4) + ) + (drop + (i32.load offset=4 + (tee_local $5 + (get_local $19) + ) + ) + ) + (i32.store8 + (get_local $40) + (i32.load + (get_local $5) + ) + ) + (set_local $7 + (get_local $40) + ) + (set_local $11 + (get_local $8) + ) + (set_local $12 + (i32.const 1) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjto$8 + (get_local $26) + ) + ) + (set_local $5 + (call $_strerror + (i32.load + (call $___errno_location) + ) + ) + ) + (br $__rjti$5) + ) + (set_local $5 + (select + (tee_local $5 + (i32.load + (get_local $19) + ) + ) + (i32.const 4101) + (get_local $5) + ) + ) + (br $__rjti$5) + ) + (drop + (i32.load offset=4 + (tee_local $5 + (get_local $19) + ) + ) + ) + (i32.store + (get_local $41) + (i32.load + (get_local $5) + ) + ) + (i32.store + (get_local $44) + (i32.const 0) + ) + (i32.store + (get_local $19) + (get_local $41) + ) + (set_local $8 + (i32.const -1) + ) + (br $__rjti$6) + ) + (if + (get_local $6) + (block + (set_local $8 + (get_local $6) + ) + (br $__rjti$6) + ) + (block + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (i32.const 0) + (get_local $11) + ) + (set_local $7 + (i32.const 0) + ) + (br $__rjti$7) + ) + ) + ) + (set_local $15 + (f64.load + (get_local $19) + ) + ) + (i32.store + (get_local $20) + (i32.const 0) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $15) + ) + (set_local $31 + (if (result i32) + (i32.lt_s + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + (i32.const 0) + ) + (block (result i32) + (set_local $27 + (i32.const 1) + ) + (set_local $15 + (f64.neg + (get_local $15) + ) + ) + (i32.const 4108) + ) + (if (result i32) + (i32.and + (get_local $11) + (i32.const 2048) + ) + (block (result i32) + (set_local $27 + (i32.const 1) + ) + (i32.const 4111) + ) + (block (result i32) + (set_local $27 + (tee_local $5 + (i32.and + (get_local $11) + (i32.const 1) + ) + ) + ) + (select + (i32.const 4114) + (i32.const 4109) + (get_local $5) + ) + ) + ) + ) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $15) + ) + (set_local $7 + (block $do-once49 (result i32) + (if (result i32) + (i32.or + (i32.lt_u + (tee_local $5 + (i32.and + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + (i32.const 2146435072) + ) + ) + (i32.const 2146435072) + ) + (i32.and + (i32.eq + (get_local $5) + (i32.const 2146435072) + ) + (i32.const 0) + ) + ) + (block (result i32) + (if + (tee_local $5 + (f64.ne + (tee_local $23 + (f64.mul + (call $_frexp + (get_local $15) + (tee_local $5 + (get_local $20) + ) + ) + (f64.const 2) + ) + ) + (f64.const 0) + ) + ) + (i32.store + (get_local $20) + (i32.add + (i32.load + (get_local $20) + ) + (i32.const -1) + ) + ) + ) + (if + (i32.eq + (tee_local $24 + (i32.or + (get_local $18) + (i32.const 32) + ) + ) + (i32.const 97) + ) + (block + (set_local $9 + (select + (i32.add + (get_local $31) + (i32.const 9) + ) + (get_local $31) + (tee_local $13 + (i32.and + (get_local $18) + (i32.const 32) + ) + ) + ) + ) + (set_local $15 + (if (result f64) + (i32.or + (i32.gt_u + (get_local $6) + (i32.const 11) + ) + (i32.eqz + (tee_local $5 + (i32.sub + (i32.const 12) + (get_local $6) + ) + ) + ) + ) + (get_local $23) + (block (result f64) + (set_local $15 + (f64.const 8) + ) + (loop $while-in54 + (set_local $15 + (f64.mul + (get_local $15) + (f64.const 16) + ) + ) + (br_if $while-in54 + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + ) + ) + (select + (f64.neg + (f64.add + (get_local $15) + (f64.sub + (f64.neg + (get_local $23) + ) + (get_local $15) + ) + ) + ) + (f64.sub + (f64.add + (get_local $23) + (get_local $15) + ) + (get_local $15) + ) + (i32.eq + (i32.load8_s + (get_local $9) + ) + (i32.const 45) + ) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $5 + (call $_fmt_u + (tee_local $5 + (select + (i32.sub + (i32.const 0) + (tee_local $7 + (i32.load + (get_local $20) + ) + ) + ) + (get_local $7) + (i32.lt_s + (get_local $7) + (i32.const 0) + ) + ) + ) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + (get_local $34) + ) + ) + (get_local $34) + ) + (block + (i32.store8 + (get_local $42) + (i32.const 48) + ) + (set_local $5 + (get_local $42) + ) + ) + ) + (set_local $12 + (i32.or + (get_local $27) + (i32.const 2) + ) + ) + (i32.store8 + (i32.add + (get_local $5) + (i32.const -1) + ) + (i32.add + (i32.and + (i32.shr_s + (get_local $7) + (i32.const 31) + ) + (i32.const 2) + ) + (i32.const 43) + ) + ) + (i32.store8 + (tee_local $8 + (i32.add + (get_local $5) + (i32.const -2) + ) + ) + (i32.add + (get_local $18) + (i32.const 15) + ) + ) + (set_local $18 + (i32.lt_s + (get_local $6) + (i32.const 1) + ) + ) + (set_local $17 + (i32.eqz + (i32.and + (get_local $11) + (i32.const 8) + ) + ) + ) + (set_local $5 + (get_local $22) + ) + (loop $while-in56 + (i32.store8 + (get_local $5) + (i32.or + (i32.load8_u + (i32.add + (tee_local $7 + (i32.trunc_s/f64 + (get_local $15) + ) + ) + (i32.const 4075) + ) + ) + (get_local $13) + ) + ) + (set_local $15 + (f64.mul + (f64.sub + (get_local $15) + (f64.convert_s/i32 + (get_local $7) + ) + ) + (f64.const 16) + ) + ) + (set_local $5 + (block $do-once57 (result i32) + (if (result i32) + (i32.eq + (i32.sub + (tee_local $7 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (get_local $37) + ) + (i32.const 1) + ) + (block (result i32) + (drop + (br_if $do-once57 + (get_local $7) + (i32.and + (get_local $17) + (i32.and + (get_local $18) + (f64.eq + (get_local $15) + (f64.const 0) + ) + ) + ) + ) + ) + (i32.store8 + (get_local $7) + (i32.const 46) + ) + (i32.add + (get_local $5) + (i32.const 2) + ) + ) + (get_local $7) + ) + ) + ) + (br_if $while-in56 + (f64.ne + (get_local $15) + (f64.const 0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (tee_local $7 + (i32.add + (tee_local $6 + (select + (i32.sub + (i32.add + (get_local $47) + (get_local $6) + ) + (get_local $8) + ) + (i32.add + (i32.sub + (get_local $45) + (get_local $8) + ) + (get_local $5) + ) + (i32.and + (i32.ne + (get_local $6) + (i32.const 0) + ) + (i32.lt_s + (i32.add + (get_local $46) + (get_local $5) + ) + (get_local $6) + ) + ) + ) + ) + (get_local $12) + ) + ) + (get_local $11) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $9) + (get_local $12) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $11) + (i32.const 65536) + ) + ) + (set_local $5 + (i32.sub + (get_local $5) + (get_local $37) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $22) + (get_local $5) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.sub + (get_local $6) + (i32.add + (get_local $5) + (tee_local $5 + (i32.sub + (get_local $28) + (get_local $8) + ) + ) + ) + ) + (i32.const 0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $8) + (get_local $5) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (br $do-once49 + (select + (get_local $14) + (get_local $7) + (i32.lt_s + (get_local $7) + (get_local $14) + ) + ) + ) + ) + ) + (set_local $15 + (if (result f64) + (get_local $5) + (block (result f64) + (i32.store + (get_local $20) + (tee_local $5 + (i32.add + (i32.load + (get_local $20) + ) + (i32.const -28) + ) + ) + ) + (f64.mul + (get_local $23) + (f64.const 268435456) + ) + ) + (block (result f64) + (set_local $5 + (i32.load + (get_local $20) + ) + ) + (get_local $23) + ) + ) + ) + (set_local $7 + (tee_local $8 + (select + (get_local $48) + (get_local $49) + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + ) + ) + ) + (loop $while-in60 + (i32.store + (get_local $7) + (tee_local $5 + (i32.trunc_u/f64 + (get_local $15) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (br_if $while-in60 + (f64.ne + (tee_local $15 + (f64.mul + (f64.sub + (get_local $15) + (f64.convert_u/i32 + (get_local $5) + ) + ) + (f64.const 1e9) + ) + ) + (f64.const 0) + ) + ) + ) + (if + (i32.gt_s + (tee_local $9 + (i32.load + (get_local $20) + ) + ) + (i32.const 0) + ) + (block + (set_local $5 + (get_local $8) + ) + (loop $while-in62 + (set_local $13 + (select + (i32.const 29) + (get_local $9) + (i32.gt_s + (get_local $9) + (i32.const 29) + ) + ) + ) + (block $do-once63 + (if + (i32.ge_u + (tee_local $9 + (i32.add + (get_local $7) + (i32.const -4) + ) + ) + (get_local $5) + ) + (block + (set_local $12 + (i32.const 0) + ) + (loop $while-in66 + (i32.store + (get_local $9) + (call $___uremdi3 + (tee_local $12 + (call $_i64Add + (call $_bitshift64Shl + (i32.load + (get_local $9) + ) + (i32.const 0) + (get_local $13) + ) + (get_global $tempRet0) + (get_local $12) + (i32.const 0) + ) + ) + (tee_local $17 + (get_global $tempRet0) + ) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (set_local $12 + (call $___udivdi3 + (get_local $12) + (get_local $17) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (br_if $while-in66 + (i32.ge_u + (tee_local $9 + (i32.add + (get_local $9) + (i32.const -4) + ) + ) + (get_local $5) + ) + ) + ) + (br_if $do-once63 + (i32.eqz + (get_local $12) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -4) + ) + ) + (get_local $12) + ) + ) + ) + ) + (loop $while-in68 + (if + (i32.gt_u + (get_local $7) + (get_local $5) + ) + (if + (i32.eqz + (i32.load + (tee_local $9 + (i32.add + (get_local $7) + (i32.const -4) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $9) + ) + (br $while-in68) + ) + ) + ) + ) + (i32.store + (get_local $20) + (tee_local $9 + (i32.sub + (i32.load + (get_local $20) + ) + (get_local $13) + ) + ) + ) + (br_if $while-in62 + (i32.gt_s + (get_local $9) + (i32.const 0) + ) + ) + ) + ) + (set_local $5 + (get_local $8) + ) + ) + (set_local $17 + (select + (i32.const 6) + (get_local $6) + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + ) + ) + (if + (i32.lt_s + (get_local $9) + (i32.const 0) + ) + (block + (set_local $21 + (i32.add + (i32.div_s + (i32.add + (get_local $17) + (i32.const 25) + ) + (i32.const 9) + ) + (i32.const 1) + ) + ) + (set_local $32 + (i32.eq + (get_local $24) + (i32.const 102) + ) + ) + (set_local $6 + (get_local $5) + ) + (set_local $5 + (get_local $7) + ) + (loop $while-in70 + (set_local $13 + (select + (i32.const 9) + (tee_local $7 + (i32.sub + (i32.const 0) + (get_local $9) + ) + ) + (i32.gt_s + (get_local $7) + (i32.const 9) + ) + ) + ) + (block $do-once71 + (if + (i32.lt_u + (get_local $6) + (get_local $5) + ) + (block + (set_local $12 + (i32.add + (i32.shl + (i32.const 1) + (get_local $13) + ) + (i32.const -1) + ) + ) + (set_local $38 + (i32.shr_u + (i32.const 1000000000) + (get_local $13) + ) + ) + (set_local $9 + (i32.const 0) + ) + (set_local $7 + (get_local $6) + ) + (loop $while-in74 + (i32.store + (get_local $7) + (i32.add + (i32.shr_u + (tee_local $33 + (i32.load + (get_local $7) + ) + ) + (get_local $13) + ) + (get_local $9) + ) + ) + (set_local $9 + (i32.mul + (i32.and + (get_local $33) + (get_local $12) + ) + (get_local $38) + ) + ) + (br_if $while-in74 + (i32.lt_u + (tee_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (get_local $5) + ) + ) + ) + (set_local $7 + (select + (get_local $6) + (i32.add + (get_local $6) + (i32.const 4) + ) + (i32.load + (get_local $6) + ) + ) + ) + (br_if $do-once71 + (i32.eqz + (get_local $9) + ) + ) + (i32.store + (get_local $5) + (get_local $9) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + ) + (set_local $7 + (select + (get_local $6) + (i32.add + (get_local $6) + (i32.const 4) + ) + (i32.load + (get_local $6) + ) + ) + ) + ) + ) + (set_local $12 + (select + (i32.add + (tee_local $6 + (select + (get_local $8) + (get_local $7) + (get_local $32) + ) + ) + (i32.shl + (get_local $21) + (i32.const 2) + ) + ) + (get_local $5) + (i32.gt_s + (i32.shr_s + (i32.sub + (get_local $5) + (get_local $6) + ) + (i32.const 2) + ) + (get_local $21) + ) + ) + ) + (i32.store + (get_local $20) + (tee_local $9 + (i32.add + (i32.load + (get_local $20) + ) + (get_local $13) + ) + ) + ) + (if + (i32.lt_s + (get_local $9) + (i32.const 0) + ) + (block + (set_local $6 + (get_local $7) + ) + (set_local $5 + (get_local $12) + ) + (br $while-in70) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $9 + (get_local $12) + ) + ) + ) + ) + ) + (set_local $9 + (get_local $7) + ) + ) + (set_local $21 + (get_local $8) + ) + (block $do-once75 + (if + (i32.lt_u + (get_local $5) + (get_local $9) + ) + (block + (set_local $7 + (i32.mul + (i32.shr_s + (i32.sub + (get_local $21) + (get_local $5) + ) + (i32.const 2) + ) + (i32.const 9) + ) + ) + (br_if $do-once75 + (i32.lt_u + (tee_local $12 + (i32.load + (get_local $5) + ) + ) + (i32.const 10) + ) + ) + (set_local $6 + (i32.const 10) + ) + (loop $while-in78 + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br_if $while-in78 + (i32.ge_u + (get_local $12) + (tee_local $6 + (i32.mul + (get_local $6) + (i32.const 10) + ) + ) + ) + ) + ) + ) + (set_local $7 + (i32.const 0) + ) + ) + ) + (set_local $5 + (if (result i32) + (i32.lt_s + (tee_local $6 + (i32.add + (i32.sub + (get_local $17) + (select + (get_local $7) + (i32.const 0) + (i32.ne + (get_local $24) + (i32.const 102) + ) + ) + ) + (i32.shr_s + (i32.shl + (i32.and + (tee_local $32 + (i32.ne + (get_local $17) + (i32.const 0) + ) + ) + (tee_local $38 + (i32.eq + (get_local $24) + (i32.const 103) + ) + ) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + ) + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (get_local $9) + (get_local $21) + ) + (i32.const 2) + ) + (i32.const 9) + ) + (i32.const -9) + ) + ) + (block (result i32) + (if + (i32.lt_s + (tee_local $6 + (i32.add + (i32.rem_s + (tee_local $13 + (i32.add + (get_local $6) + (i32.const 9216) + ) + ) + (i32.const 9) + ) + (i32.const 1) + ) + ) + (i32.const 9) + ) + (block + (set_local $12 + (i32.const 10) + ) + (loop $while-in80 + (set_local $12 + (i32.mul + (get_local $12) + (i32.const 10) + ) + ) + (br_if $while-in80 + (i32.ne + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (i32.const 9) + ) + ) + ) + ) + (set_local $12 + (i32.const 10) + ) + ) + (set_local $13 + (i32.rem_u + (tee_local $24 + (i32.load + (tee_local $6 + (i32.add + (i32.add + (get_local $8) + (i32.shl + (i32.div_s + (get_local $13) + (i32.const 9) + ) + (i32.const 2) + ) + ) + (i32.const -4092) + ) + ) + ) + ) + (get_local $12) + ) + ) + (block $do-once81 + (if + (i32.eqz + (i32.and + (tee_local $33 + (i32.eq + (i32.add + (get_local $6) + (i32.const 4) + ) + (get_local $9) + ) + ) + (i32.eqz + (get_local $13) + ) + ) + ) + (block + (set_local $15 + (if (result f64) + (i32.lt_u + (get_local $13) + (tee_local $50 + (i32.div_s + (get_local $12) + (i32.const 2) + ) + ) + ) + (f64.const 0.5) + (select + (f64.const 1) + (f64.const 1.5) + (i32.and + (get_local $33) + (i32.eq + (get_local $13) + (get_local $50) + ) + ) + ) + ) + ) + (set_local $23 + (select + (f64.const 9007199254740994) + (f64.const 9007199254740992) + (i32.and + (i32.div_u + (get_local $24) + (get_local $12) + ) + (i32.const 1) + ) + ) + ) + (block $do-once83 + (if + (get_local $27) + (block + (br_if $do-once83 + (i32.ne + (i32.load8_s + (get_local $31) + ) + (i32.const 45) + ) + ) + (set_local $23 + (f64.neg + (get_local $23) + ) + ) + (set_local $15 + (f64.neg + (get_local $15) + ) + ) + ) + ) + ) + (i32.store + (get_local $6) + (tee_local $13 + (i32.sub + (get_local $24) + (get_local $13) + ) + ) + ) + (br_if $do-once81 + (f64.eq + (f64.add + (get_local $23) + (get_local $15) + ) + (get_local $23) + ) + ) + (i32.store + (get_local $6) + (tee_local $7 + (i32.add + (get_local $13) + (get_local $12) + ) + ) + ) + (if + (i32.gt_u + (get_local $7) + (i32.const 999999999) + ) + (loop $while-in86 + (i32.store + (get_local $6) + (i32.const 0) + ) + (if + (i32.lt_u + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -4) + ) + ) + (get_local $5) + ) + (i32.store + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -4) + ) + ) + (i32.const 0) + ) + ) + (i32.store + (get_local $6) + (tee_local $7 + (i32.add + (i32.load + (get_local $6) + ) + (i32.const 1) + ) + ) + ) + (br_if $while-in86 + (i32.gt_u + (get_local $7) + (i32.const 999999999) + ) + ) + ) + ) + (set_local $7 + (i32.mul + (i32.shr_s + (i32.sub + (get_local $21) + (get_local $5) + ) + (i32.const 2) + ) + (i32.const 9) + ) + ) + (br_if $do-once81 + (i32.lt_u + (tee_local $13 + (i32.load + (get_local $5) + ) + ) + (i32.const 10) + ) + ) + (set_local $12 + (i32.const 10) + ) + (loop $while-in88 + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br_if $while-in88 + (i32.ge_u + (get_local $13) + (tee_local $12 + (i32.mul + (get_local $12) + (i32.const 10) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $12 + (get_local $5) + ) + (set_local $13 + (get_local $7) + ) + (select + (tee_local $5 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (get_local $9) + (i32.gt_u + (get_local $9) + (get_local $5) + ) + ) + ) + (block (result i32) + (set_local $12 + (get_local $5) + ) + (set_local $13 + (get_local $7) + ) + (get_local $9) + ) + ) + ) + (set_local $33 + (i32.sub + (i32.const 0) + (get_local $13) + ) + ) + (loop $while-in90 + (block $while-out89 + (if + (i32.le_u + (get_local $5) + (get_local $12) + ) + (block + (set_local $24 + (i32.const 0) + ) + (set_local $9 + (get_local $5) + ) + (br $while-out89) + ) + ) + (if + (i32.load + (tee_local $7 + (i32.add + (get_local $5) + (i32.const -4) + ) + ) + ) + (block + (set_local $24 + (i32.const 1) + ) + (set_local $9 + (get_local $5) + ) + ) + (block + (set_local $5 + (get_local $7) + ) + (br $while-in90) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (tee_local $13 + (i32.add + (i32.add + (i32.add + (i32.add + (get_local $27) + (i32.const 1) + ) + (tee_local $5 + (block $do-once91 (result i32) + (if (result i32) + (get_local $38) + (block (result i32) + (set_local $7 + (if (result i32) + (i32.and + (i32.gt_s + (tee_local $5 + (i32.add + (i32.xor + (get_local $32) + (i32.const 1) + ) + (get_local $17) + ) + ) + (get_local $13) + ) + (i32.gt_s + (get_local $13) + (i32.const -5) + ) + ) + (block (result i32) + (set_local $17 + (i32.sub + (i32.add + (get_local $5) + (i32.const -1) + ) + (get_local $13) + ) + ) + (i32.add + (get_local $18) + (i32.const -1) + ) + ) + (block (result i32) + (set_local $17 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + (i32.add + (get_local $18) + (i32.const -2) + ) + ) + ) + ) + (if + (tee_local $5 + (i32.and + (get_local $11) + (i32.const 8) + ) + ) + (block + (set_local $21 + (get_local $5) + ) + (br $do-once91 + (get_local $17) + ) + ) + ) + (block $do-once93 + (if + (get_local $24) + (block + (if + (i32.eqz + (tee_local $18 + (i32.load + (i32.add + (get_local $9) + (i32.const -4) + ) + ) + ) + ) + (block + (set_local $5 + (i32.const 9) + ) + (br $do-once93) + ) + ) + (if + (i32.rem_u + (get_local $18) + (i32.const 10) + ) + (block + (set_local $5 + (i32.const 0) + ) + (br $do-once93) + ) + (block + (set_local $6 + (i32.const 10) + ) + (set_local $5 + (i32.const 0) + ) + ) + ) + (loop $while-in96 + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (br_if $while-in96 + (i32.eqz + (i32.rem_u + (get_local $18) + (tee_local $6 + (i32.mul + (get_local $6) + (i32.const 10) + ) + ) + ) + ) + ) + ) + ) + (set_local $5 + (i32.const 9) + ) + ) + ) + (set_local $6 + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (get_local $9) + (get_local $21) + ) + (i32.const 2) + ) + (i32.const 9) + ) + (i32.const -9) + ) + ) + (if (result i32) + (i32.eq + (i32.or + (get_local $7) + (i32.const 32) + ) + (i32.const 102) + ) + (block (result i32) + (set_local $21 + (i32.const 0) + ) + (select + (get_local $17) + (tee_local $5 + (select + (i32.const 0) + (tee_local $5 + (i32.sub + (get_local $6) + (get_local $5) + ) + ) + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + ) + ) + (i32.lt_s + (get_local $17) + (get_local $5) + ) + ) + ) + (block (result i32) + (set_local $21 + (i32.const 0) + ) + (select + (get_local $17) + (tee_local $5 + (select + (i32.const 0) + (tee_local $5 + (i32.sub + (i32.add + (get_local $6) + (get_local $13) + ) + (get_local $5) + ) + ) + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + ) + ) + (i32.lt_s + (get_local $17) + (get_local $5) + ) + ) + ) + ) + ) + (block (result i32) + (set_local $21 + (i32.and + (get_local $11) + (i32.const 8) + ) + ) + (set_local $7 + (get_local $18) + ) + (get_local $17) + ) + ) + ) + ) + ) + (i32.ne + (tee_local $32 + (i32.or + (get_local $5) + (get_local $21) + ) + ) + (i32.const 0) + ) + ) + (if (result i32) + (tee_local $17 + (i32.eq + (i32.or + (get_local $7) + (i32.const 32) + ) + (i32.const 102) + ) + ) + (block (result i32) + (set_local $18 + (i32.const 0) + ) + (select + (get_local $13) + (i32.const 0) + (i32.gt_s + (get_local $13) + (i32.const 0) + ) + ) + ) + (block (result i32) + (if + (i32.lt_s + (i32.sub + (get_local $28) + (tee_local $6 + (call $_fmt_u + (tee_local $6 + (select + (get_local $33) + (get_local $13) + (i32.lt_s + (get_local $13) + (i32.const 0) + ) + ) + ) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + (get_local $34) + ) + ) + ) + (i32.const 2) + ) + (loop $while-in98 + (i32.store8 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in98 + (i32.lt_s + (i32.sub + (get_local $28) + (get_local $6) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store8 + (i32.add + (get_local $6) + (i32.const -1) + ) + (i32.add + (i32.and + (i32.shr_s + (get_local $13) + (i32.const 31) + ) + (i32.const 2) + ) + (i32.const 43) + ) + ) + (i32.store8 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -2) + ) + ) + (get_local $7) + ) + (set_local $18 + (get_local $6) + ) + (i32.sub + (get_local $28) + (get_local $6) + ) + ) + ) + ) + ) + (get_local $11) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $31) + (get_local $27) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $14) + (get_local $13) + (i32.xor + (get_local $11) + (i32.const 65536) + ) + ) + (block $do-once99 + (if + (get_local $17) + (block + (set_local $6 + (tee_local $12 + (select + (get_local $8) + (get_local $12) + (i32.gt_u + (get_local $12) + (get_local $8) + ) + ) + ) + ) + (loop $while-in102 + (set_local $7 + (call $_fmt_u + (i32.load + (get_local $6) + ) + (i32.const 0) + (get_local $30) + ) + ) + (block $do-once103 + (if + (i32.eq + (get_local $6) + (get_local $12) + ) + (block + (br_if $do-once103 + (i32.ne + (get_local $7) + (get_local $30) + ) + ) + (i32.store8 + (get_local $35) + (i32.const 48) + ) + (set_local $7 + (get_local $35) + ) + ) + (block + (br_if $do-once103 + (i32.le_u + (get_local $7) + (get_local $22) + ) + ) + (loop $while-in106 + (i32.store8 + (tee_local $7 + (i32.add + (get_local $7) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in106 + (i32.gt_u + (get_local $7) + (get_local $22) + ) + ) + ) + ) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $7) + (i32.sub + (get_local $43) + (get_local $7) + ) + (get_local $0) + ) + ) + ) + (if + (i32.le_u + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (get_local $8) + ) + (block + (set_local $6 + (get_local $7) + ) + (br $while-in102) + ) + ) + ) + (block $do-once107 + (if + (get_local $32) + (block + (br_if $do-once107 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $0) + ) + ) + ) + ) + ) + (if + (i32.and + (i32.gt_s + (get_local $5) + (i32.const 0) + ) + (i32.lt_u + (get_local $7) + (get_local $9) + ) + ) + (loop $while-in110 + (if + (i32.gt_u + (tee_local $6 + (call $_fmt_u + (i32.load + (get_local $7) + ) + (i32.const 0) + (get_local $30) + ) + ) + (get_local $22) + ) + (loop $while-in112 + (i32.store8 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in112 + (i32.gt_u + (get_local $6) + (get_local $22) + ) + ) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $6) + (select + (i32.const 9) + (get_local $5) + (i32.gt_s + (get_local $5) + (i32.const 9) + ) + ) + (get_local $0) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $5) + (i32.const -9) + ) + ) + (if + (i32.and + (i32.gt_s + (get_local $5) + (i32.const 9) + ) + (i32.lt_u + (tee_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (get_local $9) + ) + ) + (block + (set_local $5 + (get_local $6) + ) + (br $while-in110) + ) + (set_local $5 + (get_local $6) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.add + (get_local $5) + (i32.const 9) + ) + (i32.const 9) + (i32.const 0) + ) + ) + (block + (set_local $9 + (select + (get_local $9) + (i32.add + (get_local $12) + (i32.const 4) + ) + (get_local $24) + ) + ) + (if + (i32.gt_s + (get_local $5) + (i32.const -1) + ) + (block + (set_local $17 + (i32.eqz + (get_local $21) + ) + ) + (set_local $6 + (get_local $12) + ) + (set_local $7 + (get_local $5) + ) + (loop $while-in114 + (if + (i32.eq + (tee_local $5 + (call $_fmt_u + (i32.load + (get_local $6) + ) + (i32.const 0) + (get_local $30) + ) + ) + (get_local $30) + ) + (block + (i32.store8 + (get_local $35) + (i32.const 48) + ) + (set_local $5 + (get_local $35) + ) + ) + ) + (block $do-once115 + (if + (i32.eq + (get_local $6) + (get_local $12) + ) + (block + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $5) + (i32.const 1) + (get_local $0) + ) + ) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (br_if $do-once115 + (i32.or + (i32.and + (get_local $17) + (i32.lt_s + (get_local $7) + (i32.const 1) + ) + ) + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + ) + (drop + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $0) + ) + ) + ) + (block + (br_if $do-once115 + (i32.le_u + (get_local $5) + (get_local $22) + ) + ) + (loop $while-in118 + (i32.store8 + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in118 + (i32.gt_u + (get_local $5) + (get_local $22) + ) + ) + ) + ) + ) + ) + (set_local $8 + (i32.sub + (get_local $43) + (get_local $5) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $5) + (select + (get_local $8) + (get_local $7) + (i32.gt_s + (get_local $7) + (get_local $8) + ) + ) + (get_local $0) + ) + ) + ) + (br_if $while-in114 + (i32.and + (i32.lt_u + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (get_local $9) + ) + (i32.gt_s + (tee_local $7 + (i32.sub + (get_local $7) + (get_local $8) + ) + ) + (i32.const -1) + ) + ) + ) + (set_local $5 + (get_local $7) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.add + (get_local $5) + (i32.const 18) + ) + (i32.const 18) + (i32.const 0) + ) + (br_if $do-once99 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $18) + (i32.sub + (get_local $28) + (get_local $18) + ) + (get_local $0) + ) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $13) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (select + (get_local $14) + (get_local $13) + (i32.lt_s + (get_local $13) + (get_local $14) + ) + ) + ) + (block (result i32) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (tee_local $7 + (i32.add + (tee_local $9 + (select + (i32.const 0) + (get_local $27) + (tee_local $6 + (i32.or + (f64.ne + (get_local $15) + (get_local $15) + ) + (i32.const 0) + ) + ) + ) + ) + (i32.const 3) + ) + ) + (get_local $8) + ) + (if + (i32.eqz + (i32.and + (tee_local $5 + (i32.load + (get_local $0) + ) + ) + (i32.const 32) + ) + ) + (block + (drop + (call $___fwritex + (get_local $31) + (get_local $9) + (get_local $0) + ) + ) + (set_local $5 + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $6 + (select + (select + (i32.const 4135) + (i32.const 4139) + (tee_local $8 + (i32.ne + (i32.and + (get_local $18) + (i32.const 32) + ) + (i32.const 0) + ) + ) + ) + (select + (i32.const 4127) + (i32.const 4131) + (get_local $8) + ) + (get_local $6) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $5) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $6) + (i32.const 3) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (select + (get_local $14) + (get_local $7) + (i32.lt_s + (get_local $7) + (get_local $14) + ) + ) + ) + ) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (set_local $7 + (get_local $5) + ) + (set_local $12 + (get_local $6) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjto$8 + (get_local $26) + ) + ) + (set_local $9 + (i32.and + (get_local $18) + (i32.const 32) + ) + ) + (if + (i32.and + (i32.eqz + (tee_local $8 + (i32.load + (tee_local $5 + (get_local $19) + ) + ) + ) + ) + (i32.eqz + (tee_local $11 + (i32.load offset=4 + (get_local $5) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $26) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$8) + ) + (block + (set_local $5 + (get_local $8) + ) + (set_local $8 + (get_local $26) + ) + (loop $while-in123 + (i32.store8 + (tee_local $8 + (i32.add + (get_local $8) + (i32.const -1) + ) + ) + (i32.or + (i32.load8_u + (i32.add + (i32.and + (get_local $5) + (i32.const 15) + ) + (i32.const 4075) + ) + ) + (get_local $9) + ) + ) + (br_if $while-in123 + (i32.eqz + (i32.and + (i32.eqz + (tee_local $5 + (call $_bitshift64Lshr + (get_local $5) + (get_local $11) + (i32.const 4) + ) + ) + ) + (i32.eqz + (tee_local $11 + (get_global $tempRet0) + ) + ) + ) + ) + ) + (set_local $5 + (get_local $8) + ) + ) + (set_local $8 + (if (result i32) + (i32.or + (i32.eqz + (i32.and + (get_local $7) + (i32.const 8) + ) + ) + (i32.and + (i32.eqz + (i32.load + (tee_local $11 + (get_local $19) + ) + ) + ) + (i32.eqz + (i32.load offset=4 + (get_local $11) + ) + ) + ) + ) + (block (result i32) + (set_local $9 + (i32.const 4091) + ) + (i32.const 0) + ) + (block (result i32) + (set_local $9 + (i32.add + (i32.shr_s + (get_local $18) + (i32.const 4) + ) + (i32.const 4091) + ) + ) + (i32.const 2) + ) + ) + ) + (br $__rjti$8) + ) + ) + ) + (set_local $5 + (call $_fmt_u + (get_local $5) + (get_local $7) + (get_local $26) + ) + ) + (set_local $7 + (get_local $11) + ) + (br $__rjti$8) + ) + (set_local $18 + (i32.eqz + (tee_local $13 + (call $_memchr + (get_local $5) + (i32.const 0) + (get_local $6) + ) + ) + ) + ) + (set_local $7 + (get_local $5) + ) + (set_local $11 + (get_local $8) + ) + (set_local $12 + (select + (get_local $6) + (i32.sub + (get_local $13) + (get_local $5) + ) + (get_local $18) + ) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjto$8 + (select + (i32.add + (get_local $5) + (get_local $6) + ) + (get_local $13) + (get_local $18) + ) + ) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $6 + (i32.load + (get_local $19) + ) + ) + (loop $while-in125 + (block $while-out124 + (br_if $while-out124 + (i32.eqz + (tee_local $9 + (i32.load + (get_local $6) + ) + ) + ) + ) + (br_if $while-out124 + (i32.or + (i32.lt_s + (tee_local $7 + (call $_wctomb + (get_local $36) + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.gt_u + (get_local $7) + (i32.sub + (get_local $8) + (get_local $5) + ) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (br_if $while-in125 + (i32.gt_u + (get_local $8) + (tee_local $5 + (i32.add + (get_local $7) + (get_local $5) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_s + (get_local $7) + (i32.const 0) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $5) + (get_local $11) + ) + (if + (get_local $5) + (block + (set_local $6 + (i32.const 0) + ) + (set_local $7 + (i32.load + (get_local $19) + ) + ) + (loop $while-in127 + (if + (i32.eqz + (tee_local $8 + (i32.load + (get_local $7) + ) + ) + ) + (block + (set_local $7 + (get_local $5) + ) + (br $__rjti$7) + ) + ) + (if + (i32.gt_s + (tee_local $6 + (i32.add + (tee_local $8 + (call $_wctomb + (get_local $36) + (get_local $8) + ) + ) + (get_local $6) + ) + ) + (get_local $5) + ) + (block + (set_local $7 + (get_local $5) + ) + (br $__rjti$7) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $36) + (get_local $8) + (get_local $0) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (br_if $while-in127 + (i32.lt_u + (get_local $6) + (get_local $5) + ) + ) + (set_local $7 + (get_local $5) + ) + ) + ) + (set_local $7 + (i32.const 0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (select + (get_local $14) + (get_local $7) + (i32.gt_s + (get_local $14) + (get_local $7) + ) + ) + ) + (br $label$continue$L1) + ) + (set_local $11 + (select + (i32.and + (get_local $7) + (i32.const -65537) + ) + (get_local $7) + (i32.gt_s + (get_local $6) + (i32.const -1) + ) + ) + ) + (set_local $12 + (if (result i32) + (i32.or + (get_local $6) + (tee_local $12 + (i32.or + (i32.ne + (i32.load + (tee_local $7 + (get_local $19) + ) + ) + (i32.const 0) + ) + (i32.ne + (i32.load offset=4 + (get_local $7) + ) + (i32.const 0) + ) + ) + ) + ) + (block (result i32) + (set_local $7 + (get_local $5) + ) + (select + (get_local $6) + (tee_local $5 + (i32.add + (i32.xor + (i32.and + (get_local $12) + (i32.const 1) + ) + (i32.const 1) + ) + (i32.sub + (get_local $39) + (get_local $5) + ) + ) + ) + (i32.gt_s + (get_local $6) + (get_local $5) + ) + ) + ) + (block (result i32) + (set_local $7 + (get_local $26) + ) + (i32.const 0) + ) + ) + ) + (get_local $26) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (tee_local $6 + (select + (tee_local $5 + (i32.add + (get_local $8) + (tee_local $12 + (select + (tee_local $13 + (i32.sub + (get_local $5) + (get_local $7) + ) + ) + (get_local $12) + (i32.lt_s + (get_local $12) + (get_local $13) + ) + ) + ) + ) + ) + (get_local $14) + (i32.lt_s + (get_local $14) + (get_local $5) + ) + ) + ) + (get_local $5) + (get_local $11) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $9) + (get_local $8) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $6) + (get_local $5) + (i32.xor + (get_local $11) + (i32.const 65536) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $12) + (get_local $13) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $7) + (get_local $13) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $6) + (get_local $5) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $6) + ) + (br $label$continue$L1) + ) + ) + (br $label$break$L343) + ) + (if + (i32.eqz + (get_local $0) + ) + (if + (get_local $1) + (block + (set_local $0 + (i32.const 1) + ) + (loop $while-in130 + (if + (tee_local $1 + (i32.load + (i32.add + (get_local $4) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + ) + ) + (block + (call $_pop_arg_336 + (i32.add + (get_local $3) + (i32.shl + (get_local $0) + (i32.const 3) + ) + ) + (get_local $1) + (get_local $2) + ) + (br_if $while-in130 + (i32.lt_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.const 10) + ) + ) + (set_local $16 + (i32.const 1) + ) + (br $label$break$L343) + ) + ) + ) + (if + (i32.lt_s + (get_local $0) + (i32.const 10) + ) + (loop $while-in132 + (if + (i32.load + (i32.add + (get_local $4) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L343) + ) + ) + (br_if $while-in132 + (i32.lt_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.const 10) + ) + ) + (set_local $16 + (i32.const 1) + ) + ) + (set_local $16 + (i32.const 1) + ) + ) + ) + (set_local $16 + (i32.const 0) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $25) + ) + (get_local $16) + ) + (func $_pop_arg_336 (; 47 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 f64) + (local $5 i32) + (block $label$break$L1 + (if + (i32.le_u + (get_local $1) + (i32.const 20) + ) + (block $switch-default + (block $switch-case9 + (block $switch-case8 + (block $switch-case7 + (block $switch-case6 + (block $switch-case5 + (block $switch-case4 + (block $switch-case3 + (block $switch-case2 + (block $switch-case1 + (block $switch-case + (br_table $switch-case $switch-case1 $switch-case2 $switch-case3 $switch-case4 $switch-case5 $switch-case6 $switch-case7 $switch-case8 $switch-case9 $switch-default + (i32.sub + (get_local $1) + (i32.const 9) + ) + ) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + (br $label$break$L1) + ) + (set_local $1 + (i32.load + (tee_local $3 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $1) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $5 + (i32.load + (tee_local $3 + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + ) + (set_local $3 + (i32.load offset=4 + (get_local $3) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (i32.store + (get_local $0) + (get_local $5) + ) + (i32.store offset=4 + (get_local $0) + (get_local $3) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (tee_local $1 + (i32.shr_s + (i32.shl + (i32.and + (get_local $3) + (i32.const 65535) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $3) + (i32.const 65535) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (tee_local $1 + (i32.shr_s + (i32.shl + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $4 + (f64.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (f64.store + (get_local $0) + (get_local $4) + ) + (br $label$break$L1) + ) + (set_local $4 + (f64.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (f64.store + (get_local $0) + (get_local $4) + ) + ) + ) + ) + ) + (func $_fmt_u (; 48 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (if + (i32.or + (i32.gt_u + (get_local $1) + (i32.const 0) + ) + (i32.and + (i32.eqz + (get_local $1) + ) + (i32.gt_u + (get_local $0) + (i32.const -1) + ) + ) + ) + (loop $while-in + (i32.store8 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.or + (tee_local $3 + (call $___uremdi3 + (get_local $0) + (get_local $1) + (i32.const 10) + (i32.const 0) + ) + ) + (i32.const 48) + ) + ) + (set_local $3 + (call $___udivdi3 + (get_local $0) + (get_local $1) + (i32.const 10) + (i32.const 0) + ) + ) + (set_local $4 + (get_global $tempRet0) + ) + (if + (i32.or + (i32.gt_u + (get_local $1) + (i32.const 9) + ) + (i32.and + (i32.eq + (get_local $1) + (i32.const 9) + ) + (i32.gt_u + (get_local $0) + (i32.const -1) + ) + ) + ) + (block + (set_local $0 + (get_local $3) + ) + (set_local $1 + (get_local $4) + ) + (br $while-in) + ) + (set_local $0 + (get_local $3) + ) + ) + ) + ) + (if + (get_local $0) + (loop $while-in1 + (i32.store8 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.or + (i32.rem_u + (get_local $0) + (i32.const 10) + ) + (i32.const 48) + ) + ) + (set_local $1 + (i32.div_u + (get_local $0) + (i32.const 10) + ) + ) + (if + (i32.ge_u + (get_local $0) + (i32.const 10) + ) + (block + (set_local $0 + (get_local $1) + ) + (br $while-in1) + ) + ) + ) + ) + (get_local $2) + ) + (func $_pad (; 49 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 256) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $6 + (get_local $7) + ) + (block $do-once + (if + (i32.and + (i32.gt_s + (get_local $2) + (get_local $3) + ) + (i32.eqz + (i32.and + (get_local $4) + (i32.const 73728) + ) + ) + ) + (block + (drop + (call $_memset + (get_local $6) + (get_local $1) + (select + (i32.const 256) + (tee_local $5 + (i32.sub + (get_local $2) + (get_local $3) + ) + ) + (i32.gt_u + (get_local $5) + (i32.const 256) + ) + ) + ) + ) + (set_local $4 + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.const 32) + ) + ) + ) + (if + (i32.gt_u + (get_local $5) + (i32.const 255) + ) + (block + (loop $while-in + (if + (get_local $4) + (block + (drop + (call $___fwritex + (get_local $6) + (i32.const 256) + (get_local $0) + ) + ) + (set_local $1 + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $4 + (i32.eqz + (i32.and + (get_local $1) + (i32.const 32) + ) + ) + ) + (br_if $while-in + (i32.gt_u + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -256) + ) + ) + (i32.const 255) + ) + ) + ) + (br_if $do-once + (i32.eqz + (get_local $4) + ) + ) + (set_local $5 + (i32.and + (i32.sub + (get_local $2) + (get_local $3) + ) + (i32.const 255) + ) + ) + ) + (br_if $do-once + (i32.eqz + (get_local $4) + ) + ) + ) + (drop + (call $___fwritex + (get_local $6) + (get_local $5) + (get_local $0) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + ) + (func $_malloc (; 50 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (block $folding-inner0 + (block $do-once + (if + (i32.lt_u + (get_local $0) + (i32.const 245) + ) + (block + (if + (i32.and + (tee_local $5 + (i32.shr_u + (tee_local $11 + (i32.load + (i32.const 176) + ) + ) + (tee_local $13 + (i32.shr_u + (tee_local $4 + (select + (i32.const 16) + (i32.and + (i32.add + (get_local $0) + (i32.const 11) + ) + (i32.const -8) + ) + (i32.lt_u + (get_local $0) + (i32.const 11) + ) + ) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 3) + ) + (block + (set_local $10 + (i32.load + (tee_local $1 + (i32.add + (tee_local $7 + (i32.load + (tee_local $3 + (i32.add + (tee_local $2 + (i32.add + (i32.shl + (tee_local $4 + (i32.add + (i32.xor + (i32.and + (get_local $5) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $13) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $2) + (get_local $10) + ) + (i32.store + (i32.const 176) + (i32.and + (get_local $11) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $4) + ) + (i32.const -1) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + ) + (get_local $7) + ) + (block + (i32.store + (get_local $0) + (get_local $2) + ) + (i32.store + (get_local $3) + (get_local $10) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=4 + (get_local $7) + (i32.or + (tee_local $0 + (i32.shl + (get_local $4) + (i32.const 3) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $7) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + (return + (get_local $1) + ) + ) + ) + (if + (i32.gt_u + (get_local $4) + (tee_local $0 + (i32.load + (i32.const 184) + ) + ) + ) + (block + (if + (get_local $5) + (block + (set_local $10 + (i32.and + (i32.shr_u + (tee_local $3 + (i32.add + (i32.and + (tee_local $3 + (i32.and + (i32.shl + (get_local $5) + (get_local $13) + ) + (i32.or + (tee_local $3 + (i32.shl + (i32.const 2) + (get_local $13) + ) + ) + (i32.sub + (i32.const 0) + (get_local $3) + ) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $3) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $9 + (i32.load + (tee_local $7 + (i32.add + (tee_local $12 + (i32.load + (tee_local $3 + (i32.add + (tee_local $10 + (i32.add + (i32.shl + (tee_local $5 + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $3) + (get_local $10) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $10) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $10) + (get_local $9) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (get_local $11) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $8 + (get_local $0) + ) + ) + (block + (if + (i32.lt_u + (get_local $9) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $9) + (i32.const 12) + ) + ) + ) + (get_local $12) + ) + (block + (i32.store + (get_local $0) + (get_local $10) + ) + (i32.store + (get_local $3) + (get_local $9) + ) + (set_local $8 + (i32.load + (i32.const 184) + ) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.or + (get_local $4) + (i32.const 3) + ) + ) + (i32.store offset=4 + (tee_local $10 + (i32.add + (get_local $12) + (get_local $4) + ) + ) + (i32.or + (tee_local $5 + (i32.sub + (i32.shl + (get_local $5) + (i32.const 3) + ) + (get_local $4) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $10) + (get_local $5) + ) + (get_local $5) + ) + (if + (get_local $8) + (block + (set_local $12 + (i32.load + (i32.const 196) + ) + ) + (set_local $4 + (i32.add + (i32.shl + (tee_local $0 + (i32.shr_u + (get_local $8) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $3 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $2 + (get_local $3) + ) + (set_local $1 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $3) + (get_local $0) + ) + ) + (set_local $2 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (set_local $1 + (get_local $4) + ) + ) + ) + (i32.store + (get_local $2) + (get_local $12) + ) + (i32.store offset=12 + (get_local $1) + (get_local $12) + ) + (i32.store offset=8 + (get_local $12) + (get_local $1) + ) + (i32.store offset=12 + (get_local $12) + (get_local $4) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $5) + ) + (i32.store + (i32.const 196) + (get_local $10) + ) + (return + (get_local $7) + ) + ) + ) + (if + (tee_local $0 + (i32.load + (i32.const 180) + ) + ) + (block + (set_local $2 + (i32.and + (i32.shr_u + (tee_local $0 + (i32.add + (i32.and + (get_local $0) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $7 + (i32.sub + (i32.and + (i32.load offset=4 + (tee_local $0 + (i32.load offset=480 + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $0) + (get_local $2) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $2) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const -8) + ) + (get_local $4) + ) + ) + (set_local $1 + (get_local $0) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (tee_local $0 + (i32.load offset=16 + (get_local $1) + ) + ) + ) + (if + (i32.eqz + (tee_local $0 + (i32.load offset=20 + (get_local $1) + ) + ) + ) + (block + (set_local $10 + (get_local $7) + ) + (set_local $5 + (get_local $2) + ) + (br $while-out) + ) + ) + ) + (set_local $10 + (i32.lt_u + (tee_local $1 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $4) + ) + ) + (get_local $7) + ) + ) + (set_local $7 + (select + (get_local $1) + (get_local $7) + (get_local $10) + ) + ) + (set_local $1 + (get_local $0) + ) + (set_local $2 + (select + (get_local $0) + (get_local $2) + (get_local $10) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (get_local $5) + (tee_local $12 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $5) + (tee_local $11 + (i32.add + (get_local $5) + (get_local $4) + ) + ) + ) + (call $_abort) + ) + (set_local $8 + (i32.load offset=24 + (get_local $5) + ) + ) + (block $do-once4 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $5) + ) + ) + (get_local $5) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $5) + (i32.const 20) + ) + ) + ) + ) + ) + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + ) + ) + (block + (set_local $9 + (i32.const 0) + ) + (br $do-once4) + ) + ) + ) + (loop $while-in7 + (if + (tee_local $2 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $0 + (get_local $7) + ) + (br $while-in7) + ) + ) + (if + (tee_local $2 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $0 + (get_local $7) + ) + (br $while-in7) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $12) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $9 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $7 + (i32.load offset=8 + (get_local $5) + ) + ) + (get_local $12) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $2 + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + ) + (get_local $5) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $5) + ) + (block + (i32.store + (get_local $2) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $7) + ) + (set_local $9 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once8 + (if + (get_local $8) + (block + (if + (i32.eq + (get_local $5) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $5) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $9) + ) + (if + (i32.eqz + (get_local $9) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $8) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + ) + (get_local $5) + ) + (i32.store + (get_local $0) + (get_local $9) + ) + (i32.store offset=20 + (get_local $8) + (get_local $9) + ) + ) + (br_if $do-once8 + (i32.eqz + (get_local $9) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $9) + (tee_local $0 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $9) + (get_local $8) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $5) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $0) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $9) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $9) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=20 + (get_local $5) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $9) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $9) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $10) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $5) + (i32.or + (tee_local $0 + (i32.add + (get_local $10) + (get_local $4) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $5) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $5) + (i32.or + (get_local $4) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $11) + (i32.or + (get_local $10) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $11) + (get_local $10) + ) + (get_local $10) + ) + (if + (tee_local $0 + (i32.load + (i32.const 184) + ) + ) + (block + (set_local $4 + (i32.load + (i32.const 196) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $0 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $6 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $6 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (set_local $3 + (get_local $2) + ) + ) + ) + (i32.store + (get_local $6) + (get_local $4) + ) + (i32.store offset=12 + (get_local $3) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $3) + ) + (i32.store offset=12 + (get_local $4) + (get_local $2) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $10) + ) + (i32.store + (i32.const 196) + (get_local $11) + ) + ) + ) + (return + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (if + (i32.gt_u + (get_local $0) + (i32.const -65) + ) + (set_local $0 + (i32.const -1) + ) + (block + (set_local $2 + (i32.and + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 11) + ) + ) + (i32.const -8) + ) + ) + (if + (tee_local $18 + (i32.load + (i32.const 180) + ) + ) + (block + (set_local $14 + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $0) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $2) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $2) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $3 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $3) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (set_local $3 + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + (block $__rjto$3 + (block $__rjti$3 + (if + (tee_local $0 + (i32.load offset=480 + (i32.shl + (get_local $14) + (i32.const 2) + ) + ) + ) + (block + (set_local $6 + (i32.const 0) + ) + (set_local $8 + (i32.shl + (get_local $2) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $14) + (i32.const 1) + ) + ) + (i32.eq + (get_local $14) + (i32.const 31) + ) + ) + ) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in14 + (if + (i32.lt_u + (tee_local $4 + (i32.sub + (tee_local $9 + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + ) + (get_local $2) + ) + ) + (get_local $3) + ) + (if + (i32.eq + (get_local $9) + (get_local $2) + ) + (block + (set_local $1 + (get_local $4) + ) + (set_local $3 + (get_local $0) + ) + (br $__rjti$3) + ) + (block + (set_local $3 + (get_local $4) + ) + (set_local $1 + (get_local $0) + ) + ) + ) + ) + (set_local $0 + (select + (get_local $6) + (tee_local $4 + (i32.load offset=20 + (get_local $0) + ) + ) + (i32.or + (i32.eqz + (get_local $4) + ) + (i32.eq + (get_local $4) + (tee_local $9 + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $8) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $4 + (i32.shl + (get_local $8) + (i32.xor + (tee_local $6 + (i32.eqz + (get_local $9) + ) + ) + (i32.const 1) + ) + ) + ) + (if + (get_local $6) + (block + (set_local $4 + (get_local $0) + ) + (set_local $0 + (get_local $1) + ) + ) + (block + (set_local $6 + (get_local $0) + ) + (set_local $8 + (get_local $4) + ) + (set_local $0 + (get_local $9) + ) + (br $while-in14) + ) + ) + ) + ) + (block + (set_local $4 + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + (if + (i32.and + (i32.eqz + (get_local $4) + ) + (i32.eqz + (get_local $0) + ) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.and + (get_local $18) + (i32.or + (tee_local $1 + (i32.shl + (i32.const 2) + (get_local $14) + ) + ) + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $2) + ) + (br $do-once) + ) + ) + (set_local $9 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.add + (i32.and + (get_local $1) + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $4 + (i32.load offset=480 + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $1) + (get_local $9) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $9) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (if + (get_local $4) + (block + (set_local $1 + (get_local $3) + ) + (set_local $3 + (get_local $4) + ) + (br $__rjti$3) + ) + (set_local $4 + (get_local $0) + ) + ) + (br $__rjto$3) + ) + (loop $while-in16 + (set_local $9 + (i32.lt_u + (tee_local $4 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const -8) + ) + (get_local $2) + ) + ) + (get_local $1) + ) + ) + (set_local $1 + (select + (get_local $4) + (get_local $1) + (get_local $9) + ) + ) + (set_local $0 + (select + (get_local $3) + (get_local $0) + (get_local $9) + ) + ) + (if + (tee_local $4 + (i32.load offset=16 + (get_local $3) + ) + ) + (block + (set_local $3 + (get_local $4) + ) + (br $while-in16) + ) + ) + (br_if $while-in16 + (tee_local $3 + (i32.load offset=20 + (get_local $3) + ) + ) + ) + (set_local $3 + (get_local $1) + ) + (set_local $4 + (get_local $0) + ) + ) + ) + (if + (get_local $4) + (if + (i32.lt_u + (get_local $3) + (i32.sub + (i32.load + (i32.const 184) + ) + (get_local $2) + ) + ) + (block + (if + (i32.lt_u + (get_local $4) + (tee_local $12 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $4) + (tee_local $6 + (i32.add + (get_local $4) + (get_local $2) + ) + ) + ) + (call $_abort) + ) + (set_local $9 + (i32.load offset=24 + (get_local $4) + ) + ) + (block $do-once17 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $4) + ) + ) + (get_local $4) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + ) + ) + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 16) + ) + ) + ) + ) + ) + (block + (set_local $11 + (i32.const 0) + ) + (br $do-once17) + ) + ) + ) + (loop $while-in20 + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $7) + ) + (set_local $0 + (get_local $10) + ) + (br $while-in20) + ) + ) + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $7) + ) + (set_local $0 + (get_local $10) + ) + (br $while-in20) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $12) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $11 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $10 + (i32.load offset=8 + (get_local $4) + ) + ) + (get_local $12) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $7 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + ) + (get_local $4) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $4) + ) + (block + (i32.store + (get_local $7) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $10) + ) + (set_local $11 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once21 + (if + (get_local $9) + (block + (if + (i32.eq + (get_local $4) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $4) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $11) + ) + (if + (i32.eqz + (get_local $11) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $9) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $9) + (i32.const 16) + ) + ) + ) + (get_local $4) + ) + (i32.store + (get_local $0) + (get_local $11) + ) + (i32.store offset=20 + (get_local $9) + (get_local $11) + ) + ) + (br_if $do-once21 + (i32.eqz + (get_local $11) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $11) + (tee_local $0 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $11) + (get_local $9) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $4) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $0) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $11) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $11) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=20 + (get_local $4) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $11) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $11) + ) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.lt_u + (get_local $3) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $4) + (i32.or + (tee_local $0 + (i32.add + (get_local $3) + (get_local $2) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $4) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $2) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $6) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $6) + (get_local $3) + ) + (get_local $3) + ) + (set_local $0 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $3) + (i32.const 256) + ) + (block + (set_local $3 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $13 + (get_local $1) + ) + (set_local $5 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $13 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $5 + (get_local $3) + ) + ) + ) + (i32.store + (get_local $13) + (get_local $6) + ) + (i32.store offset=12 + (get_local $5) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $5) + ) + (i32.store offset=12 + (get_local $6) + (get_local $3) + ) + (br $do-once25) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $7 + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $3) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $3) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $2 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $2) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $6) + (get_local $7) + ) + (i32.store offset=4 + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (i32.const 180) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $7) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $2) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $2) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once25) + ) + ) + (set_local $7 + (i32.shl + (get_local $3) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $7) + (i32.const 1) + ) + ) + (i32.eq + (get_local $7) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $2) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (loop $while-in28 + (br_if $__rjti$1 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $2 + (i32.shl + (get_local $7) + (i32.const 1) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $7 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $7) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $2) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in28) + ) + ) + ) + (if + (i32.lt_u + (get_local $7) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $7) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $0) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once25) + ) + ) + (br $__rjto$1) + ) + (if + (i32.and + (i32.ge_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $2) + (get_local $6) + ) + (i32.store + (get_local $3) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $2) + ) + (i32.store offset=12 + (get_local $6) + (get_local $0) + ) + (i32.store offset=24 + (get_local $6) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (return + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (set_local $0 + (get_local $2) + ) + ) + (set_local $0 + (get_local $2) + ) + ) + ) + (set_local $0 + (get_local $2) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (tee_local $1 + (i32.load + (i32.const 184) + ) + ) + (get_local $0) + ) + (block + (set_local $2 + (i32.load + (i32.const 196) + ) + ) + (if + (i32.gt_u + (tee_local $3 + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + (i32.const 15) + ) + (block + (i32.store + (i32.const 196) + (tee_local $1 + (i32.add + (get_local $2) + (get_local $0) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $3) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $3) + ) + (get_local $3) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + ) + (block + (i32.store + (i32.const 184) + (i32.const 0) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $1) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $2) + (get_local $1) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + ) + (return + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (br_if $folding-inner0 + (i32.gt_u + (tee_local $1 + (i32.load + (i32.const 188) + ) + ) + (get_local $0) + ) + ) + (if + (i32.eqz + (i32.load + (i32.const 648) + ) + ) + (if + (i32.and + (i32.add + (tee_local $1 + (call $_sysconf + (i32.const 30) + ) + ) + (i32.const -1) + ) + (get_local $1) + ) + (call $_abort) + (block + (i32.store + (i32.const 656) + (get_local $1) + ) + (i32.store + (i32.const 652) + (get_local $1) + ) + (i32.store + (i32.const 660) + (i32.const -1) + ) + (i32.store + (i32.const 664) + (i32.const -1) + ) + (i32.store + (i32.const 668) + (i32.const 0) + ) + (i32.store + (i32.const 620) + (i32.const 0) + ) + (i32.store + (i32.const 648) + (i32.xor + (i32.and + (call $_time + (i32.const 0) + ) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + ) + ) + ) + (if + (i32.le_u + (tee_local $5 + (i32.and + (tee_local $6 + (i32.add + (tee_local $1 + (i32.load + (i32.const 656) + ) + ) + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 47) + ) + ) + ) + ) + (tee_local $9 + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + ) + ) + (get_local $0) + ) + (return + (i32.const 0) + ) + ) + (if + (tee_local $2 + (i32.load + (i32.const 616) + ) + ) + (if + (i32.or + (i32.le_u + (tee_local $1 + (i32.add + (tee_local $3 + (i32.load + (i32.const 608) + ) + ) + (get_local $5) + ) + ) + (get_local $3) + ) + (i32.gt_u + (get_local $1) + (get_local $2) + ) + ) + (return + (i32.const 0) + ) + ) + ) + (set_local $11 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + (block $__rjto$13 + (block $__rjti$13 + (if + (i32.eqz + (i32.and + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + ) + (block + (block $label$break$L279 + (block $__rjti$5 + (block $__rjti$4 + (br_if $__rjti$4 + (i32.eqz + (tee_local $4 + (i32.load + (i32.const 200) + ) + ) + ) + ) + (set_local $1 + (i32.const 624) + ) + (loop $while-in34 + (block $while-out33 + (if + (i32.le_u + (tee_local $3 + (i32.load + (get_local $1) + ) + ) + (get_local $4) + ) + (if + (i32.gt_u + (i32.add + (get_local $3) + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + ) + ) + (get_local $4) + ) + (block + (set_local $4 + (get_local $1) + ) + (br $while-out33) + ) + ) + ) + (br_if $while-in34 + (tee_local $1 + (i32.load offset=8 + (get_local $1) + ) + ) + ) + (br $__rjti$4) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.and + (i32.sub + (get_local $6) + (i32.load + (i32.const 188) + ) + ) + (get_local $9) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (tee_local $1 + (call $_sbrk + (get_local $3) + ) + ) + (i32.add + (i32.load + (get_local $4) + ) + (i32.load + (get_local $2) + ) + ) + ) + (br_if $__rjti$13 + (i32.ne + (get_local $1) + (i32.const -1) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (br $__rjti$5) + ) + ) + ) + (br $label$break$L279) + ) + (if + (i32.ne + (tee_local $1 + (call $_sbrk + (i32.const 0) + ) + ) + (i32.const -1) + ) + (block + (set_local $3 + (if (result i32) + (i32.and + (tee_local $2 + (i32.add + (tee_local $4 + (i32.load + (i32.const 652) + ) + ) + (i32.const -1) + ) + ) + (tee_local $3 + (get_local $1) + ) + ) + (i32.add + (i32.sub + (get_local $5) + (get_local $3) + ) + (i32.and + (i32.add + (get_local $2) + (get_local $3) + ) + (i32.sub + (i32.const 0) + (get_local $4) + ) + ) + ) + (get_local $5) + ) + ) + (set_local $9 + (i32.add + (tee_local $4 + (i32.load + (i32.const 608) + ) + ) + (get_local $3) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $3) + (get_local $0) + ) + (i32.lt_u + (get_local $3) + (i32.const 2147483647) + ) + ) + (block + (if + (tee_local $2 + (i32.load + (i32.const 616) + ) + ) + (br_if $label$break$L279 + (i32.or + (i32.le_u + (get_local $9) + (get_local $4) + ) + (i32.gt_u + (get_local $9) + (get_local $2) + ) + ) + ) + ) + (br_if $__rjti$13 + (i32.eq + (tee_local $2 + (call $_sbrk + (get_local $3) + ) + ) + (get_local $1) + ) + ) + (br $__rjti$5) + ) + ) + ) + ) + (br $label$break$L279) + ) + (set_local $1 + (get_local $3) + ) + (set_local $4 + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $11) + (get_local $1) + ) + (i32.and + (i32.lt_u + (get_local $1) + (i32.const 2147483647) + ) + (i32.ne + (get_local $2) + (i32.const -1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.and + (i32.add + (i32.sub + (get_local $8) + (get_local $1) + ) + (tee_local $3 + (i32.load + (i32.const 656) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $3) + ) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (call $_sbrk + (get_local $3) + ) + (i32.const -1) + ) + (block + (drop + (call $_sbrk + (get_local $4) + ) + ) + (br $label$break$L279) + ) + (set_local $3 + (i32.add + (get_local $3) + (get_local $1) + ) + ) + ) + (set_local $3 + (get_local $1) + ) + ) + (set_local $3 + (get_local $1) + ) + ) + (if + (i32.ne + (get_local $2) + (i32.const -1) + ) + (block + (set_local $1 + (get_local $2) + ) + (br $__rjti$13) + ) + ) + ) + (i32.store + (i32.const 620) + (i32.or + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.const 2147483647) + ) + (if + (i32.and + (i32.lt_u + (tee_local $1 + (call $_sbrk + (get_local $5) + ) + ) + (tee_local $3 + (call $_sbrk + (i32.const 0) + ) + ) + ) + (i32.and + (i32.ne + (get_local $1) + (i32.const -1) + ) + (i32.ne + (get_local $3) + (i32.const -1) + ) + ) + ) + (br_if $__rjti$13 + (i32.gt_u + (tee_local $3 + (i32.sub + (get_local $3) + (get_local $1) + ) + ) + (i32.add + (get_local $0) + (i32.const 40) + ) + ) + ) + ) + ) + (br $__rjto$13) + ) + (i32.store + (i32.const 608) + (tee_local $2 + (i32.add + (i32.load + (i32.const 608) + ) + (get_local $3) + ) + ) + ) + (if + (i32.gt_u + (get_local $2) + (i32.load + (i32.const 612) + ) + ) + (i32.store + (i32.const 612) + (get_local $2) + ) + ) + (block $do-once40 + (if + (tee_local $6 + (i32.load + (i32.const 200) + ) + ) + (block + (set_local $2 + (i32.const 624) + ) + (block $__rjto$10 + (block $__rjti$10 + (loop $while-in45 + (br_if $__rjti$10 + (i32.eq + (get_local $1) + (i32.add + (tee_local $11 + (i32.load + (get_local $2) + ) + ) + (tee_local $5 + (i32.load + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + ) + ) + ) + ) + ) + (br_if $while-in45 + (tee_local $2 + (i32.load offset=8 + (get_local $2) + ) + ) + ) + ) + (br $__rjto$10) + ) + (if + (i32.eqz + (i32.and + (i32.load offset=12 + (get_local $2) + ) + (i32.const 8) + ) + ) + (if + (i32.and + (i32.lt_u + (get_local $6) + (get_local $1) + ) + (i32.ge_u + (get_local $6) + (get_local $11) + ) + ) + (block + (i32.store + (get_local $4) + (i32.add + (get_local $5) + (get_local $3) + ) + ) + (set_local $2 + (i32.add + (get_local $6) + (tee_local $1 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + ) + (set_local $1 + (i32.add + (i32.sub + (get_local $3) + (get_local $1) + ) + (i32.load + (i32.const 188) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $2) + ) + (i32.store + (i32.const 188) + (get_local $1) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $1) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $2) + (get_local $1) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (br $do-once40) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (tee_local $4 + (i32.load + (i32.const 192) + ) + ) + ) + (block + (i32.store + (i32.const 192) + (get_local $1) + ) + (set_local $4 + (get_local $1) + ) + ) + ) + (set_local $11 + (i32.add + (get_local $1) + (get_local $3) + ) + ) + (set_local $2 + (i32.const 624) + ) + (block $__rjto$11 + (block $__rjti$11 + (loop $while-in47 + (if + (i32.eq + (i32.load + (get_local $2) + ) + (get_local $11) + ) + (block + (set_local $5 + (get_local $2) + ) + (br $__rjti$11) + ) + ) + (br_if $while-in47 + (tee_local $2 + (i32.load offset=8 + (get_local $2) + ) + ) + ) + (set_local $4 + (i32.const 624) + ) + ) + (br $__rjto$11) + ) + (if + (i32.and + (i32.load offset=12 + (get_local $2) + ) + (i32.const 8) + ) + (set_local $4 + (i32.const 624) + ) + (block + (i32.store + (get_local $5) + (get_local $1) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (i32.add + (i32.load + (get_local $2) + ) + (get_local $3) + ) + ) + (set_local $8 + (i32.add + (tee_local $9 + (i32.add + (get_local $1) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + (get_local $0) + ) + ) + (set_local $7 + (i32.sub + (i32.sub + (tee_local $5 + (i32.add + (get_local $11) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + (get_local $9) + ) + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $9) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + (block $do-once48 + (if + (i32.eq + (get_local $5) + (get_local $6) + ) + (block + (i32.store + (i32.const 188) + (tee_local $0 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $7) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $8) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + ) + (block + (if + (i32.eq + (get_local $5) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (tee_local $0 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $7) + ) + ) + ) + (i32.store + (i32.const 196) + (get_local $8) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $8) + (get_local $0) + ) + (get_local $0) + ) + (br $do-once48) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (tee_local $0 + (if (result i32) + (i32.eq + (i32.and + (tee_local $0 + (i32.load offset=4 + (get_local $5) + ) + ) + (i32.const 3) + ) + (i32.const 1) + ) + (block (result i32) + (set_local $11 + (i32.and + (get_local $0) + (i32.const -8) + ) + ) + (set_local $1 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (block $label$break$L331 + (if + (i32.lt_u + (get_local $0) + (i32.const 256) + ) + (block + (set_local $2 + (i32.load offset=12 + (get_local $5) + ) + ) + (block $do-once51 + (if + (i32.ne + (tee_local $3 + (i32.load offset=8 + (get_local $5) + ) + ) + (tee_local $0 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $3) + (get_local $4) + ) + (call $_abort) + ) + (br_if $do-once51 + (i32.eq + (i32.load offset=12 + (get_local $3) + ) + (get_local $5) + ) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $2) + (get_local $3) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + ) + (block $do-once53 + (if + (i32.eq + (get_local $2) + (get_local $0) + ) + (set_local $15 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $2) + (get_local $4) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + (get_local $5) + ) + (block + (set_local $15 + (get_local $0) + ) + (br $do-once53) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $3) + (get_local $2) + ) + (i32.store + (get_local $15) + (get_local $3) + ) + ) + (block + (set_local $6 + (i32.load offset=24 + (get_local $5) + ) + ) + (block $do-once55 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $5) + ) + ) + (get_local $5) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (tee_local $3 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load + (get_local $3) + ) + ) + (set_local $0 + (get_local $3) + ) + (block + (set_local $12 + (i32.const 0) + ) + (br $do-once55) + ) + ) + ) + (loop $while-in58 + (if + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $3) + ) + (set_local $0 + (get_local $2) + ) + (br $while-in58) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $3) + ) + (set_local $0 + (get_local $2) + ) + (br $while-in58) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $4) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $12 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $2 + (i32.load offset=8 + (get_local $5) + ) + ) + (get_local $4) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 12) + ) + ) + ) + (get_local $5) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $5) + ) + (block + (i32.store + (get_local $3) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (set_local $12 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (get_local $6) + ) + ) + (block $do-once59 + (if + (i32.eq + (get_local $5) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $5) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $12) + ) + (br_if $do-once59 + (get_local $12) + ) + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $5) + ) + (i32.store + (get_local $0) + (get_local $12) + ) + (i32.store offset=20 + (get_local $6) + (get_local $12) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (get_local $12) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $12) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $12) + (get_local $6) + ) + (if + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $3) + (get_local $1) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $12) + (get_local $3) + ) + (i32.store offset=24 + (get_local $3) + (get_local $12) + ) + ) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (tee_local $0 + (i32.load offset=4 + (get_local $0) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $12) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $12) + ) + ) + ) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $11) + (get_local $7) + ) + ) + (i32.add + (get_local $5) + (get_local $11) + ) + ) + (get_local $5) + ) + ) + (i32.const 4) + ) + ) + (i32.and + (i32.load + (get_local $0) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $7) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $8) + (get_local $7) + ) + (get_local $7) + ) + (set_local $0 + (i32.shr_u + (get_local $7) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $7) + (i32.const 256) + ) + (block + (set_local $3 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (block $do-once63 + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (block + (if + (i32.ge_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (block + (set_local $16 + (get_local $1) + ) + (set_local $10 + (get_local $0) + ) + (br $do-once63) + ) + ) + (call $_abort) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $16 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $10 + (get_local $3) + ) + ) + ) + ) + (i32.store + (get_local $16) + (get_local $8) + ) + (i32.store offset=12 + (get_local $10) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $10) + ) + (i32.store offset=12 + (get_local $8) + (get_local $3) + ) + (br $do-once48) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (tee_local $2 + (block $do-once65 (result i32) + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $7) + (i32.const 8) + ) + ) + (block (result i32) + (drop + (br_if $do-once65 + (i32.const 31) + (i32.gt_u + (get_local $7) + (i32.const 16777215) + ) + ) + ) + (i32.or + (i32.and + (i32.shr_u + (get_local $7) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $3 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $3) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $8) + (get_local $2) + ) + (i32.store offset=4 + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (i32.const 180) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $2) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $3) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $3) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + (br $do-once48) + ) + ) + (set_local $2 + (i32.shl + (get_local $7) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $2) + (i32.const 1) + ) + ) + (i32.eq + (get_local $2) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $3) + ) + ) + (block $__rjto$7 + (block $__rjti$7 + (loop $while-in68 + (br_if $__rjti$7 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $7) + ) + ) + (set_local $3 + (i32.shl + (get_local $2) + (i32.const 1) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $2) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $3) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in68) + ) + ) + ) + (if + (i32.lt_u + (get_local $2) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $2) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $0) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + (br $do-once48) + ) + ) + (br $__rjto$7) + ) + (if + (i32.and + (i32.ge_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $2) + (get_local $8) + ) + (i32.store + (get_local $3) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $2) + ) + (i32.store offset=12 + (get_local $8) + (get_local $0) + ) + (i32.store offset=24 + (get_local $8) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (return + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + ) + ) + ) + (loop $while-in70 + (block $while-out69 + (if + (i32.le_u + (tee_local $2 + (i32.load + (get_local $4) + ) + ) + (get_local $6) + ) + (br_if $while-out69 + (i32.gt_u + (tee_local $2 + (i32.add + (get_local $2) + (i32.load offset=4 + (get_local $4) + ) + ) + ) + (get_local $6) + ) + ) + ) + (set_local $4 + (i32.load offset=8 + (get_local $4) + ) + ) + (br $while-in70) + ) + ) + (set_local $10 + (i32.add + (tee_local $4 + (i32.add + (get_local $2) + (i32.const -47) + ) + ) + (i32.const 8) + ) + ) + (set_local $12 + (i32.add + (tee_local $11 + (select + (get_local $6) + (tee_local $4 + (i32.add + (get_local $4) + (select + (i32.and + (i32.sub + (i32.const 0) + (get_local $10) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $10) + (i32.const 7) + ) + ) + ) + ) + (i32.lt_u + (get_local $4) + (tee_local $10 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + ) + ) + (i32.const 8) + ) + ) + (i32.store + (i32.const 200) + (tee_local $5 + (i32.add + (get_local $1) + (tee_local $4 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $4) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 188) + (tee_local $4 + (i32.sub + (i32.add + (get_local $3) + (i32.const -40) + ) + (get_local $4) + ) + ) + ) + (i32.store offset=4 + (get_local $5) + (i32.or + (get_local $4) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $5) + (get_local $4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (i32.const 27) + ) + (i32.store + (get_local $12) + (i32.load + (i32.const 624) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.load + (i32.const 628) + ) + ) + (i32.store offset=8 + (get_local $12) + (i32.load + (i32.const 632) + ) + ) + (i32.store offset=12 + (get_local $12) + (i32.load + (i32.const 636) + ) + ) + (i32.store + (i32.const 624) + (get_local $1) + ) + (i32.store + (i32.const 628) + (get_local $3) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 632) + (get_local $12) + ) + (set_local $1 + (i32.add + (get_local $11) + (i32.const 24) + ) + ) + (loop $while-in72 + (i32.store + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.const 7) + ) + (br_if $while-in72 + (i32.lt_u + (i32.add + (get_local $1) + (i32.const 4) + ) + (get_local $2) + ) + ) + ) + (if + (i32.ne + (get_local $11) + (get_local $6) + ) + (block + (i32.store + (get_local $4) + (i32.and + (i32.load + (get_local $4) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $6) + (i32.or + (tee_local $5 + (i32.sub + (get_local $11) + (get_local $6) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (get_local $11) + (get_local $5) + ) + (set_local $1 + (i32.shr_u + (get_local $5) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.const 256) + ) + (block + (set_local $2 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 176) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.load + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $17 + (get_local $3) + ) + (set_local $7 + (get_local $1) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $3) + (get_local $1) + ) + ) + (set_local $17 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (set_local $7 + (get_local $2) + ) + ) + ) + (i32.store + (get_local $17) + (get_local $6) + ) + (i32.store offset=12 + (get_local $7) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $7) + ) + (i32.store offset=12 + (get_local $6) + (get_local $2) + ) + (br $do-once40) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $4 + (if (result i32) + (tee_local $1 + (i32.shr_u + (get_local $5) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $5) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $5) + (i32.add + (tee_local $1 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $3 + (i32.shl + (get_local $1) + (tee_local $2 + (i32.and + (i32.shr_u + (i32.add + (get_local $1) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $2) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $3 + (i32.shl + (get_local $3) + (get_local $1) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $3) + (get_local $1) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $6) + (get_local $4) + ) + (i32.store offset=20 + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $10) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (i32.const 180) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $4) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $3) + (get_local $1) + ) + ) + (i32.store + (get_local $2) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $2) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once40) + ) + ) + (set_local $4 + (i32.shl + (get_local $5) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $4) + (i32.const 1) + ) + ) + (i32.eq + (get_local $4) + (i32.const 31) + ) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $2) + ) + ) + (block $__rjto$9 + (block $__rjti$9 + (loop $while-in74 + (br_if $__rjti$9 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $1) + ) + (i32.const -8) + ) + (get_local $5) + ) + ) + (set_local $2 + (i32.shl + (get_local $4) + (i32.const 1) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $4 + (i32.add + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $4) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $4 + (get_local $2) + ) + (set_local $1 + (get_local $3) + ) + (br $while-in74) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $4) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $1) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once40) + ) + ) + (br $__rjto$9) + ) + (if + (i32.and + (i32.ge_u + (tee_local $4 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (tee_local $3 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $1) + (get_local $3) + ) + ) + (block + (i32.store offset=12 + (get_local $4) + (get_local $6) + ) + (i32.store + (get_local $2) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $4) + ) + (i32.store offset=12 + (get_local $6) + (get_local $1) + ) + (i32.store offset=24 + (get_local $6) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (block + (if + (i32.or + (i32.eqz + (tee_local $2 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.lt_u + (get_local $1) + (get_local $2) + ) + ) + (i32.store + (i32.const 192) + (get_local $1) + ) + ) + (i32.store + (i32.const 624) + (get_local $1) + ) + (i32.store + (i32.const 628) + (get_local $3) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 212) + (i32.load + (i32.const 648) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (set_local $2 + (i32.const 0) + ) + (loop $while-in43 + (i32.store offset=12 + (tee_local $4 + (i32.add + (i32.shl + (get_local $2) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $4) + ) + (br_if $while-in43 + (i32.ne + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 32) + ) + ) + ) + (i32.store + (i32.const 200) + (tee_local $2 + (i32.add + (get_local $1) + (tee_local $1 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 188) + (tee_local $1 + (i32.sub + (i32.add + (get_local $3) + (i32.const -40) + ) + (get_local $1) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $1) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $2) + (get_local $1) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + ) + ) + ) + (br_if $folding-inner0 + (i32.gt_u + (tee_local $1 + (i32.load + (i32.const 188) + ) + ) + (get_local $0) + ) + ) + ) + (i32.store + (call $___errno_location) + (i32.const 12) + ) + (return + (i32.const 0) + ) + ) + (i32.store + (i32.const 188) + (tee_local $3 + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + ) + (i32.store + (i32.const 200) + (tee_local $1 + (i32.add + (tee_local $2 + (i32.load + (i32.const 200) + ) + ) + (get_local $0) + ) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (func $_free (; 51 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (if + (i32.eqz + (get_local $0) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $0) + (i32.const -8) + ) + ) + (tee_local $11 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (tee_local $5 + (i32.and + (tee_local $8 + (i32.load + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + ) + (i32.const 3) + ) + ) + (i32.const 1) + ) + (call $_abort) + ) + (set_local $7 + (i32.add + (get_local $1) + (tee_local $0 + (i32.and + (get_local $8) + (i32.const -8) + ) + ) + ) + ) + (block $do-once + (if + (i32.and + (get_local $8) + (i32.const 1) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + (block + (if + (i32.eqz + (get_local $5) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.sub + (i32.const 0) + (tee_local $8 + (i32.load + (get_local $1) + ) + ) + ) + ) + ) + (get_local $11) + ) + (call $_abort) + ) + (set_local $0 + (i32.add + (get_local $8) + (get_local $0) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.load + (i32.const 196) + ) + ) + (block + (if + (i32.ne + (i32.and + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + ) + ) + (i32.const 3) + ) + (i32.const 3) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 184) + (get_local $0) + ) + (i32.store + (get_local $2) + (i32.and + (get_local $3) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $0) + ) + (get_local $0) + ) + (return) + ) + ) + (set_local $5 + (i32.shr_u + (get_local $8) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $8) + (i32.const 256) + ) + (block + (set_local $6 + (i32.load offset=12 + (get_local $1) + ) + ) + (if + (i32.ne + (tee_local $2 + (i32.load offset=8 + (get_local $1) + ) + ) + (tee_local $3 + (i32.add + (i32.shl + (get_local $5) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $2) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $2) + ) + (get_local $1) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $6) + (get_local $2) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (get_local $6) + (get_local $3) + ) + (set_local $4 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $3 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (set_local $4 + (get_local $3) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $2) + (get_local $6) + ) + (i32.store + (get_local $4) + (get_local $2) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (set_local $12 + (i32.load offset=24 + (get_local $1) + ) + ) + (block $do-once0 + (if + (i32.eq + (tee_local $4 + (i32.load offset=12 + (get_local $1) + ) + ) + (get_local $1) + ) + (block + (if + (i32.eqz + (tee_local $5 + (i32.load + (tee_local $4 + (i32.add + (tee_local $8 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $5 + (i32.load + (get_local $8) + ) + ) + (set_local $4 + (get_local $8) + ) + (block + (set_local $6 + (i32.const 0) + ) + (br $do-once0) + ) + ) + ) + (loop $while-in + (if + (tee_local $8 + (i32.load + (tee_local $10 + (i32.add + (get_local $5) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $8) + ) + (set_local $4 + (get_local $10) + ) + (br $while-in) + ) + ) + (if + (tee_local $8 + (i32.load + (tee_local $10 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $8) + ) + (set_local $4 + (get_local $10) + ) + (br $while-in) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (get_local $11) + ) + (call $_abort) + (block + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $6 + (get_local $5) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $10 + (i32.load offset=8 + (get_local $1) + ) + ) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $8 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + ) + (get_local $1) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $5 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (block + (i32.store + (get_local $8) + (get_local $4) + ) + (i32.store + (get_local $5) + (get_local $10) + ) + (set_local $6 + (get_local $4) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $12) + (block + (if + (i32.eq + (get_local $1) + (i32.load + (tee_local $4 + (i32.add + (i32.shl + (tee_local $5 + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $4) + (get_local $6) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $12) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $12) + (i32.const 16) + ) + ) + ) + (get_local $1) + ) + (i32.store + (get_local $4) + (get_local $6) + ) + (i32.store offset=20 + (get_local $12) + (get_local $6) + ) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $6) + (tee_local $5 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $6) + (get_local $12) + ) + (if + (tee_local $8 + (i32.load + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $8) + (get_local $5) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $6) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $6) + ) + ) + ) + ) + (if + (tee_local $4 + (i32.load offset=4 + (get_local $4) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $6) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $6) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (get_local $2) + (get_local $7) + ) + (call $_abort) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + ) + ) + (i32.const 1) + ) + ) + (call $_abort) + ) + (if + (i32.and + (get_local $1) + (i32.const 2) + ) + (block + (i32.store + (get_local $0) + (i32.and + (get_local $1) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $3) + ) + (get_local $3) + ) + ) + (block + (if + (i32.eq + (get_local $7) + (i32.load + (i32.const 200) + ) + ) + (block + (i32.store + (i32.const 188) + (tee_local $0 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $2) + (i32.load + (i32.const 196) + ) + ) + (return) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store + (i32.const 184) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (tee_local $0 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 196) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $0) + ) + (get_local $0) + ) + (return) + ) + ) + (set_local $5 + (i32.add + (i32.and + (get_local $1) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $1) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.lt_u + (get_local $1) + (i32.const 256) + ) + (block + (set_local $4 + (i32.load offset=12 + (get_local $7) + ) + ) + (if + (i32.ne + (tee_local $1 + (i32.load offset=8 + (get_local $7) + ) + ) + (tee_local $0 + (i32.add + (i32.shl + (get_local $3) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $1) + ) + (get_local $7) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $1) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $0) + ) + (set_local $14 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (get_local $7) + ) + (set_local $14 + (get_local $0) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $1) + (get_local $4) + ) + (i32.store + (get_local $14) + (get_local $1) + ) + ) + (block + (set_local $6 + (i32.load offset=24 + (get_local $7) + ) + ) + (block $do-once6 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $7) + ) + ) + (get_local $7) + ) + (block + (if + (i32.eqz + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (tee_local $1 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $3 + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (get_local $1) + ) + (block + (set_local $9 + (i32.const 0) + ) + (br $do-once6) + ) + ) + ) + (loop $while-in9 + (if + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $0 + (get_local $4) + ) + (br $while-in9) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $0 + (get_local $4) + ) + (br $while-in9) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $9 + (get_local $3) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $4 + (i32.load offset=8 + (get_local $7) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $1 + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + ) + (get_local $7) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $7) + ) + (block + (i32.store + (get_local $1) + (get_local $0) + ) + (i32.store + (get_local $3) + (get_local $4) + ) + (set_local $9 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $6) + (block + (if + (i32.eq + (get_local $7) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $3 + (i32.load offset=28 + (get_local $7) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $9) + ) + (if + (i32.eqz + (get_local $9) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $7) + ) + (i32.store + (get_local $0) + (get_local $9) + ) + (i32.store offset=20 + (get_local $6) + (get_local $9) + ) + ) + (br_if $do-once4 + (i32.eqz + (get_local $9) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $9) + (tee_local $3 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $9) + (get_local $6) + ) + (if + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $3) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $9) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $9) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=4 + (get_local $0) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $9) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $9) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $5) + ) + (get_local $5) + ) + (if + (i32.eq + (get_local $2) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (get_local $5) + ) + (return) + ) + (set_local $3 + (get_local $5) + ) + ) + ) + ) + (set_local $0 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $3) + (i32.const 256) + ) + (block + (set_local $1 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $15 + (get_local $3) + ) + (set_local $13 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $3) + (get_local $0) + ) + ) + (set_local $15 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $13 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $2) + ) + (i32.store offset=12 + (get_local $13) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $13) + ) + (i32.store offset=12 + (get_local $2) + (get_local $1) + ) + (return) + ) + ) + (set_local $4 + (i32.add + (i32.shl + (tee_local $5 + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $3) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $3) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $4 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $4) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $2) + (get_local $5) + ) + (i32.store offset=20 + (get_local $2) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $2) + (i32.const 0) + ) + (block $do-once12 + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 180) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $5) + ) + ) + ) + (block + (set_local $5 + (i32.shl + (get_local $3) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $5) + (i32.const 1) + ) + ) + (i32.eq + (get_local $5) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $4) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (loop $while-in15 + (br_if $__rjti$1 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $4 + (i32.shl + (get_local $5) + (i32.const 1) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $5 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $5) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $4) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in15) + ) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $5) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $0) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + (br $do-once12) + ) + ) + (br $__rjto$1) + ) + (if + (i32.and + (i32.ge_u + (tee_local $4 + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $3 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $3) + ) + ) + (block + (i32.store offset=12 + (get_local $4) + (get_local $2) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $4) + ) + (i32.store offset=12 + (get_local $2) + (get_local $0) + ) + (i32.store offset=24 + (get_local $2) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $4) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $4) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + ) + (i32.store + (i32.const 208) + (tee_local $0 + (i32.add + (i32.load + (i32.const 208) + ) + (i32.const -1) + ) + ) + ) + (if + (get_local $0) + (return) + (set_local $0 + (i32.const 632) + ) + ) + (loop $while-in17 + (set_local $0 + (i32.add + (tee_local $3 + (i32.load + (get_local $0) + ) + ) + (i32.const 8) + ) + ) + (br_if $while-in17 + (get_local $3) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + ) + (func $runPostSets (; 52 ;) + (nop) + ) + (func $_i64Subtract (; 53 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (set_global $tempRet0 + (i32.sub + (i32.sub + (get_local $1) + (get_local $3) + ) + (i32.gt_u + (get_local $2) + (get_local $0) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $_i64Add (; 54 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (set_global $tempRet0 + (i32.add + (i32.add + (get_local $1) + (get_local $3) + ) + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (get_local $0) + ) + ) + ) + (get_local $4) + ) + (func $_memset (; 55 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (if + (i32.ge_s + (get_local $2) + (i32.const 20) + ) + (block + (set_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (if + (tee_local $3 + (i32.and + (get_local $0) + (i32.const 3) + ) + ) + (block + (set_local $3 + (i32.sub + (i32.add + (get_local $0) + (i32.const 4) + ) + (get_local $3) + ) + ) + (loop $while-in + (if + (i32.lt_s + (get_local $0) + (get_local $3) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (set_local $3 + (i32.or + (i32.or + (i32.or + (get_local $1) + (i32.shl + (get_local $1) + (i32.const 8) + ) + ) + (i32.shl + (get_local $1) + (i32.const 16) + ) + ) + (i32.shl + (get_local $1) + (i32.const 24) + ) + ) + ) + (set_local $5 + (i32.and + (get_local $4) + (i32.const -4) + ) + ) + (loop $while-in1 + (if + (i32.lt_s + (get_local $0) + (get_local $5) + ) + (block + (i32.store + (get_local $0) + (get_local $3) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.lt_s + (get_local $0) + (get_local $4) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $_bitshift64Lshr (; 56 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if + (i32.lt_s + (get_local $2) + (i32.const 32) + ) + (block + (set_global $tempRet0 + (i32.shr_u + (get_local $1) + (get_local $2) + ) + ) + (return + (i32.or + (i32.shr_u + (get_local $0) + (get_local $2) + ) + (i32.shl + (i32.and + (get_local $1) + (i32.sub + (i32.shl + (i32.const 1) + (get_local $2) + ) + (i32.const 1) + ) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.const 0) + ) + (i32.shr_u + (get_local $1) + (i32.sub + (get_local $2) + (i32.const 32) + ) + ) + ) + (func $_bitshift64Shl (; 57 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if + (i32.lt_s + (get_local $2) + (i32.const 32) + ) + (block + (set_global $tempRet0 + (i32.or + (i32.shl + (get_local $1) + (get_local $2) + ) + (i32.shr_u + (i32.and + (get_local $0) + (i32.shl + (i32.sub + (i32.shl + (i32.const 1) + (get_local $2) + ) + (i32.const 1) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + ) + (return + (i32.shl + (get_local $0) + (get_local $2) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.shl + (get_local $0) + (i32.sub + (get_local $2) + (i32.const 32) + ) + ) + ) + (i32.const 0) + ) + (func $_memcpy (; 58 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.ge_s + (get_local $2) + (i32.const 4096) + ) + (return + (call $_emscripten_memcpy_big + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (set_local $3 + (get_local $0) + ) + (if + (i32.eq + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.and + (get_local $1) + (i32.const 3) + ) + ) + (block + (loop $while-in + (if + (i32.and + (get_local $0) + (i32.const 3) + ) + (block + (if + (i32.eqz + (get_local $2) + ) + (return + (get_local $3) + ) + ) + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (loop $while-in1 + (if + (i32.ge_s + (get_local $2) + (i32.const 4) + ) + (block + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (get_local $3) + ) + (func $___udivdi3 (; 59 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call $___udivmoddi4 + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.const 0) + ) + ) + (func $___uremdi3 (; 60 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (drop + (call $___udivmoddi4 + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $3) + (tee_local $0 + (get_local $4) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (set_global $tempRet0 + (i32.load offset=4 + (get_local $0) + ) + ) + (i32.load + (get_local $0) + ) + ) + (func $___udivmoddi4 (; 61 ;) (param $xl i32) (param $xh i32) (param $yl i32) (param $yh i32) (param $r i32) (result i32) + (local $x64 i64) + (local $y64 i64) + (set_local $x64 + (i64.or + (i64.extend_u/i32 + (get_local $xl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $xh) + ) + (i64.const 32) + ) + ) + ) + (set_local $y64 + (i64.or + (i64.extend_u/i32 + (get_local $yl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $yh) + ) + (i64.const 32) + ) + ) + ) + (if + (get_local $r) + (i64.store + (get_local $r) + (i64.rem_u + (get_local $x64) + (get_local $y64) + ) + ) + ) + (set_local $x64 + (i64.div_u + (get_local $x64) + (get_local $y64) + ) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $x64) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $x64) + ) + ) + (func $dynCall_ii (; 62 ;) (param $0 i32) (param $1 i32) (result i32) + (call_indirect (type $FUNCSIG$ii) + (get_local $1) + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + ) + (func $dynCall_iiii (; 63 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call_indirect (type $FUNCSIG$iiii) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (func $dynCall_vi (; 64 ;) (param $0 i32) (param $1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $1) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 10) + ) + ) + ) + (func $b0 (; 65 ;) (param $0 i32) (result i32) + (call $nullFunc_ii + (i32.const 0) + ) + (i32.const 0) + ) + (func $b1 (; 66 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $nullFunc_iiii + (i32.const 1) + ) + (i32.const 0) + ) + (func $b2 (; 67 ;) (param $0 i32) + (call $nullFunc_vi + (i32.const 2) + ) + ) +) diff --git a/src/binaryen/test/emcc_hello_world.fromasm.imprecise.no-opts b/src/binaryen/test/emcc_hello_world.fromasm.imprecise.no-opts new file mode 100644 index 0000000000..8f91b3adb2 --- /dev/null +++ b/src/binaryen/test/emcc_hello_world.fromasm.imprecise.no-opts @@ -0,0 +1,31566 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "ABORT" (global $ABORT$asm2wasm$import i32)) + (import "env" "cttz_i8" (global $cttz_i8$asm2wasm$import i32)) + (import "global" "NaN" (global $nan$asm2wasm$import f64)) + (import "global" "Infinity" (global $inf$asm2wasm$import f64)) + (import "env" "abort" (func $abort)) + (import "env" "nullFunc_ii" (func $nullFunc_ii (param i32))) + (import "env" "nullFunc_iiii" (func $nullFunc_iiii (param i32))) + (import "env" "nullFunc_vi" (func $nullFunc_vi (param i32))) + (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) + (import "env" "___lock" (func $___lock (param i32))) + (import "env" "_pthread_self" (func $_pthread_self (result i32))) + (import "env" "_abort" (func $_abort)) + (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) + (import "env" "_sbrk" (func $_sbrk (param i32) (result i32))) + (import "env" "_time" (func $_time (param i32) (result i32))) + (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $___unlock (param i32))) + (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) + (import "env" "_sysconf" (func $_sysconf (param i32) (result i32))) + (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 18 18 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $ABORT (mut i32) (get_global $ABORT$asm2wasm$import)) + (global $cttz_i8 (mut i32) (get_global $cttz_i8$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $setjmpId (mut i32) (i32.const 0)) + (global $undef (mut i32) (i32.const 0)) + (global $nan (mut f64) (get_global $nan$asm2wasm$import)) + (global $inf (mut f64) (get_global $inf$asm2wasm$import)) + (global $tempInt (mut i32) (i32.const 0)) + (global $tempBigInt (mut i32) (i32.const 0)) + (global $tempBigIntP (mut i32) (i32.const 0)) + (global $tempBigIntS (mut i32) (i32.const 0)) + (global $tempBigIntR (mut f64) (f64.const 0)) + (global $tempBigIntI (mut i32) (i32.const 0)) + (global $tempBigIntD (mut i32) (i32.const 0)) + (global $tempValue (mut i32) (i32.const 0)) + (global $tempDouble (mut f64) (f64.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (global $tempRet1 (mut i32) (i32.const 0)) + (global $tempRet2 (mut i32) (i32.const 0)) + (global $tempRet3 (mut i32) (i32.const 0)) + (global $tempRet4 (mut i32) (i32.const 0)) + (global $tempRet5 (mut i32) (i32.const 0)) + (global $tempRet6 (mut i32) (i32.const 0)) + (global $tempRet7 (mut i32) (i32.const 0)) + (global $tempRet8 (mut i32) (i32.const 0)) + (global $tempRet9 (mut i32) (i32.const 0)) + (global $tempFloat (mut f64) (f64.const 0)) + (elem (get_global $tableBase) $b0 $___stdio_close $b1 $b1 $___stdout_write $___stdio_seek $___stdio_write $b1 $b1 $b1 $b2 $b2 $b2 $b2 $b2 $_cleanup $b2 $b2) + (export "_i64Subtract" (func $_i64Subtract)) + (export "_free" (func $_free)) + (export "_main" (func $_main)) + (export "_i64Add" (func $_i64Add)) + (export "_memset" (func $_memset)) + (export "_malloc" (func $_malloc)) + (export "_memcpy" (func $_memcpy)) + (export "_bitshift64Lshr" (func $_bitshift64Lshr)) + (export "_fflush" (func $_fflush)) + (export "___errno_location" (func $___errno_location)) + (export "_bitshift64Shl" (func $_bitshift64Shl)) + (export "runPostSets" (func $runPostSets)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackSave" (func $stackSave)) + (export "stackRestore" (func $stackRestore)) + (export "establishStackSpace" (func $establishStackSpace)) + (export "setThrew" (func $setThrew)) + (export "setTempRet0" (func $setTempRet0)) + (export "getTempRet0" (func $getTempRet0)) + (export "dynCall_ii" (func $dynCall_ii)) + (export "dynCall_iiii" (func $dynCall_iiii)) + (export "dynCall_vi" (func $dynCall_vi)) + (export "___udivmoddi4" (func $___udivmoddi4)) + (func $stackAlloc (; 18 ;) (param $size i32) (result i32) + (local $ret i32) + (set_local $ret + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $size) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (return + (get_local $ret) + ) + ) + (func $stackSave (; 19 ;) (result i32) + (return + (get_global $STACKTOP) + ) + ) + (func $stackRestore (; 20 ;) (param $top i32) + (set_global $STACKTOP + (get_local $top) + ) + ) + (func $establishStackSpace (; 21 ;) (param $stackBase i32) (param $stackMax i32) + (set_global $STACKTOP + (get_local $stackBase) + ) + (set_global $STACK_MAX + (get_local $stackMax) + ) + ) + (func $setThrew (; 22 ;) (param $threw i32) (param $value i32) + (if + (i32.eq + (get_global $__THREW__) + (i32.const 0) + ) + (block + (set_global $__THREW__ + (get_local $threw) + ) + (set_global $threwValue + (get_local $value) + ) + ) + ) + ) + (func $copyTempFloat (; 23 ;) (param $ptr i32) + (i32.store8 + (get_global $tempDoublePtr) + (i32.load8_s + (get_local $ptr) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 1) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 1) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 2) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 2) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 3) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 3) + ) + ) + ) + ) + (func $copyTempDouble (; 24 ;) (param $ptr i32) + (i32.store8 + (get_global $tempDoublePtr) + (i32.load8_s + (get_local $ptr) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 1) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 1) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 2) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 2) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 3) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 3) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 4) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 4) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 5) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 5) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 6) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 6) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 7) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 7) + ) + ) + ) + ) + (func $setTempRet0 (; 25 ;) (param $value i32) + (set_global $tempRet0 + (get_local $value) + ) + ) + (func $getTempRet0 (; 26 ;) (result i32) + (return + (get_global $tempRet0) + ) + ) + (func $_main (; 27 ;) (result i32) + (local $$retval i32) + (local $$vararg_buffer i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$vararg_buffer + (get_local $sp) + ) + (set_local $$retval + (i32.const 0) + ) + (drop + (call $_printf + (i32.const 672) + (get_local $$vararg_buffer) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (i32.const 0) + ) + ) + (func $_frexp (; 28 ;) (param $$x f64) (param $$e i32) (result f64) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 f64) + (local $$call f64) + (local $$conv i32) + (local $$mul f64) + (local $$retval$0 f64) + (local $$storemerge i32) + (local $$sub i32) + (local $$sub8 i32) + (local $$tobool1 i32) + (local $$x$addr$0 f64) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $$x) + ) + (set_local $$0 + (i32.load + (get_global $tempDoublePtr) + ) + ) + (set_local $$1 + (i32.load + (i32.add + (get_global $tempDoublePtr) + (i32.const 4) + ) + ) + ) + (set_local $$2 + (call $_bitshift64Lshr + (get_local $$0) + (get_local $$1) + (i32.const 52) + ) + ) + (set_local $$3 + (get_global $tempRet0) + ) + (set_local $$conv + (i32.and + (get_local $$2) + (i32.const 2047) + ) + ) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default + (i32.sub + (get_local $$conv) + (i32.const 0) + ) + ) + ) + (block + (set_local $$tobool1 + (f64.ne + (get_local $$x) + (f64.const 0) + ) + ) + (if + (get_local $$tobool1) + (block + (set_local $$mul + (f64.mul + (get_local $$x) + (f64.const 18446744073709551615) + ) + ) + (set_local $$call + (call $_frexp + (get_local $$mul) + (get_local $$e) + ) + ) + (set_local $$4 + (i32.load + (get_local $$e) + ) + ) + (set_local $$sub + (i32.add + (get_local $$4) + (i32.const -64) + ) + ) + (set_local $$storemerge + (get_local $$sub) + ) + (set_local $$x$addr$0 + (get_local $$call) + ) + ) + (block + (set_local $$storemerge + (i32.const 0) + ) + (set_local $$x$addr$0 + (get_local $$x) + ) + ) + ) + (i32.store + (get_local $$e) + (get_local $$storemerge) + ) + (set_local $$retval$0 + (get_local $$x$addr$0) + ) + (br $switch) + ) + ) + (block + (set_local $$retval$0 + (get_local $$x) + ) + (br $switch) + ) + ) + (block + (set_local $$sub8 + (i32.add + (get_local $$conv) + (i32.const -1022) + ) + ) + (i32.store + (get_local $$e) + (get_local $$sub8) + ) + (set_local $$5 + (i32.and + (get_local $$1) + (i32.const -2146435073) + ) + ) + (set_local $$6 + (i32.or + (get_local $$5) + (i32.const 1071644672) + ) + ) + (i32.store + (get_global $tempDoublePtr) + (get_local $$0) + ) + (i32.store + (i32.add + (get_global $tempDoublePtr) + (i32.const 4) + ) + (get_local $$6) + ) + (set_local $$7 + (f64.load + (get_global $tempDoublePtr) + ) + ) + (set_local $$retval$0 + (get_local $$7) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_frexpl (; 29 ;) (param $$x f64) (param $$e i32) (result f64) + (local $$call f64) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$call + (call $_frexp + (get_local $$x) + (get_local $$e) + ) + ) + (return + (get_local $$call) + ) + ) + (func $_strerror (; 30 ;) (param $$e i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$arrayidx i32) + (local $$cmp i32) + (local $$conv i32) + (local $$dec i32) + (local $$i$012 i32) + (local $$i$012$lcssa i32) + (local $$i$111 i32) + (local $$inc i32) + (local $$incdec$ptr i32) + (local $$incdec$ptr$lcssa i32) + (local $$s$0$lcssa i32) + (local $$s$010 i32) + (local $$s$1 i32) + (local $$tobool i32) + (local $$tobool5 i32) + (local $$tobool5$9 i32) + (local $$tobool8 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$i$012 + (i32.const 0) + ) + (loop $while-in + (block $while-out + (set_local $$arrayidx + (i32.add + (i32.const 687) + (get_local $$i$012) + ) + ) + (set_local $$0 + (i32.load8_s + (get_local $$arrayidx) + ) + ) + (set_local $$conv + (i32.and + (get_local $$0) + (i32.const 255) + ) + ) + (set_local $$cmp + (i32.eq + (get_local $$conv) + (get_local $$e) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $$i$012$lcssa + (get_local $$i$012) + ) + (set_local $label + (i32.const 2) + ) + (br $while-out) + ) + ) + (set_local $$inc + (i32.add + (get_local $$i$012) + (i32.const 1) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$inc) + (i32.const 87) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$i$111 + (i32.const 87) + ) + (set_local $$s$010 + (i32.const 775) + ) + (set_local $label + (i32.const 5) + ) + (br $while-out) + ) + (set_local $$i$012 + (get_local $$inc) + ) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 2) + ) + (block + (set_local $$tobool5$9 + (i32.eq + (get_local $$i$012$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$tobool5$9) + (set_local $$s$0$lcssa + (i32.const 775) + ) + (block + (set_local $$i$111 + (get_local $$i$012$lcssa) + ) + (set_local $$s$010 + (i32.const 775) + ) + (set_local $label + (i32.const 5) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 5) + ) + (loop $while-in1 + (block $while-out0 + (set_local $label + (i32.const 0) + ) + (set_local $$s$1 + (get_local $$s$010) + ) + (loop $while-in3 + (block $while-out2 + (set_local $$1 + (i32.load8_s + (get_local $$s$1) + ) + ) + (set_local $$tobool8 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$1) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$s$1) + (i32.const 1) + ) + ) + (if + (get_local $$tobool8) + (block + (set_local $$incdec$ptr$lcssa + (get_local $$incdec$ptr) + ) + (br $while-out2) + ) + (set_local $$s$1 + (get_local $$incdec$ptr) + ) + ) + (br $while-in3) + ) + ) + (set_local $$dec + (i32.add + (get_local $$i$111) + (i32.const -1) + ) + ) + (set_local $$tobool5 + (i32.eq + (get_local $$dec) + (i32.const 0) + ) + ) + (if + (get_local $$tobool5) + (block + (set_local $$s$0$lcssa + (get_local $$incdec$ptr$lcssa) + ) + (br $while-out0) + ) + (block + (set_local $$i$111 + (get_local $$dec) + ) + (set_local $$s$010 + (get_local $$incdec$ptr$lcssa) + ) + (set_local $label + (i32.const 5) + ) + ) + ) + (br $while-in1) + ) + ) + ) + (return + (get_local $$s$0$lcssa) + ) + ) + (func $___errno_location (; 31 ;) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$call$i i32) + (local $$errno_ptr i32) + (local $$retval$0 i32) + (local $$tobool i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$0 + (i32.load + (i32.const 16) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$0) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (set_local $$retval$0 + (i32.const 60) + ) + (block + (set_local $$call$i + (call $_pthread_self) + ) + (set_local $$errno_ptr + (i32.add + (get_local $$call$i) + (i32.const 60) + ) + ) + (set_local $$1 + (i32.load + (get_local $$errno_ptr) + ) + ) + (set_local $$retval$0 + (get_local $$1) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $___stdio_close (; 32 ;) (param $$f i32) (result i32) + (local $$0 i32) + (local $$call i32) + (local $$call1 i32) + (local $$fd i32) + (local $$vararg_buffer i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$vararg_buffer + (get_local $sp) + ) + (set_local $$fd + (i32.add + (get_local $$f) + (i32.const 60) + ) + ) + (set_local $$0 + (i32.load + (get_local $$fd) + ) + ) + (i32.store + (get_local $$vararg_buffer) + (get_local $$0) + ) + (set_local $$call + (call $___syscall6 + (i32.const 6) + (get_local $$vararg_buffer) + ) + ) + (set_local $$call1 + (call $___syscall_ret + (get_local $$call) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$call1) + ) + ) + (func $___stdout_write (; 33 ;) (param $$f i32) (param $$buf i32) (param $$len i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$and i32) + (local $$call i32) + (local $$call3 i32) + (local $$fd i32) + (local $$lbf i32) + (local $$tio i32) + (local $$tobool i32) + (local $$tobool2 i32) + (local $$vararg_buffer i32) + (local $$vararg_ptr1 i32) + (local $$vararg_ptr2 i32) + (local $$write i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 80) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$vararg_buffer + (get_local $sp) + ) + (set_local $$tio + (i32.add + (get_local $sp) + (i32.const 12) + ) + ) + (set_local $$write + (i32.add + (get_local $$f) + (i32.const 36) + ) + ) + (i32.store + (get_local $$write) + (i32.const 4) + ) + (set_local $$0 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and + (i32.and + (get_local $$0) + (i32.const 64) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$and) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$fd + (i32.add + (get_local $$f) + (i32.const 60) + ) + ) + (set_local $$1 + (i32.load + (get_local $$fd) + ) + ) + (i32.store + (get_local $$vararg_buffer) + (get_local $$1) + ) + (set_local $$vararg_ptr1 + (i32.add + (get_local $$vararg_buffer) + (i32.const 4) + ) + ) + (i32.store + (get_local $$vararg_ptr1) + (i32.const 21505) + ) + (set_local $$vararg_ptr2 + (i32.add + (get_local $$vararg_buffer) + (i32.const 8) + ) + ) + (i32.store + (get_local $$vararg_ptr2) + (get_local $$tio) + ) + (set_local $$call + (call $___syscall54 + (i32.const 54) + (get_local $$vararg_buffer) + ) + ) + (set_local $$tobool2 + (i32.eq + (get_local $$call) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool2) + ) + (block + (set_local $$lbf + (i32.add + (get_local $$f) + (i32.const 75) + ) + ) + (i32.store8 + (get_local $$lbf) + (i32.const -1) + ) + ) + ) + ) + ) + (set_local $$call3 + (call $___stdio_write + (get_local $$f) + (get_local $$buf) + (get_local $$len) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$call3) + ) + ) + (func $___stdio_seek (; 34 ;) (param $$f i32) (param $$off i32) (param $$whence i32) (result i32) + (local $$$pre i32) + (local $$0 i32) + (local $$1 i32) + (local $$call i32) + (local $$call1 i32) + (local $$cmp i32) + (local $$fd i32) + (local $$ret i32) + (local $$vararg_buffer i32) + (local $$vararg_ptr1 i32) + (local $$vararg_ptr2 i32) + (local $$vararg_ptr3 i32) + (local $$vararg_ptr4 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$vararg_buffer + (get_local $sp) + ) + (set_local $$ret + (i32.add + (get_local $sp) + (i32.const 20) + ) + ) + (set_local $$fd + (i32.add + (get_local $$f) + (i32.const 60) + ) + ) + (set_local $$0 + (i32.load + (get_local $$fd) + ) + ) + (i32.store + (get_local $$vararg_buffer) + (get_local $$0) + ) + (set_local $$vararg_ptr1 + (i32.add + (get_local $$vararg_buffer) + (i32.const 4) + ) + ) + (i32.store + (get_local $$vararg_ptr1) + (i32.const 0) + ) + (set_local $$vararg_ptr2 + (i32.add + (get_local $$vararg_buffer) + (i32.const 8) + ) + ) + (i32.store + (get_local $$vararg_ptr2) + (get_local $$off) + ) + (set_local $$vararg_ptr3 + (i32.add + (get_local $$vararg_buffer) + (i32.const 12) + ) + ) + (i32.store + (get_local $$vararg_ptr3) + (get_local $$ret) + ) + (set_local $$vararg_ptr4 + (i32.add + (get_local $$vararg_buffer) + (i32.const 16) + ) + ) + (i32.store + (get_local $$vararg_ptr4) + (get_local $$whence) + ) + (set_local $$call + (call $___syscall140 + (i32.const 140) + (get_local $$vararg_buffer) + ) + ) + (set_local $$call1 + (call $___syscall_ret + (get_local $$call) + ) + ) + (set_local $$cmp + (i32.lt_s + (get_local $$call1) + (i32.const 0) + ) + ) + (if + (get_local $$cmp) + (block + (i32.store + (get_local $$ret) + (i32.const -1) + ) + (set_local $$1 + (i32.const -1) + ) + ) + (block + (set_local $$$pre + (i32.load + (get_local $$ret) + ) + ) + (set_local $$1 + (get_local $$$pre) + ) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$1) + ) + ) + (func $_fflush (; 35 ;) (param $$f i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$call i32) + (local $$call1 i32) + (local $$call1$18 i32) + (local $$call16 i32) + (local $$call22 i32) + (local $$call7 i32) + (local $$cmp i32) + (local $$cmp14 i32) + (local $$cmp20 i32) + (local $$cond10 i32) + (local $$cond19 i32) + (local $$f$addr$0 i32) + (local $$f$addr$0$19 i32) + (local $$f$addr$022 i32) + (local $$lock i32) + (local $$lock13 i32) + (local $$next i32) + (local $$or i32) + (local $$phitmp i32) + (local $$r$0$lcssa i32) + (local $$r$021 i32) + (local $$r$1 i32) + (local $$retval$0 i32) + (local $$tobool i32) + (local $$tobool11 i32) + (local $$tobool11$20 i32) + (local $$tobool24 i32) + (local $$tobool5 i32) + (local $$wbase i32) + (local $$wpos i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$tobool + (i32.eq + (get_local $$f) + (i32.const 0) + ) + ) + (block $do-once + (if + (get_local $$tobool) + (block + (set_local $$1 + (i32.load + (i32.const 12) + ) + ) + (set_local $$tobool5 + (i32.eq + (get_local $$1) + (i32.const 0) + ) + ) + (if + (get_local $$tobool5) + (set_local $$cond10 + (i32.const 0) + ) + (block + (set_local $$2 + (i32.load + (i32.const 12) + ) + ) + (set_local $$call7 + (call $_fflush + (get_local $$2) + ) + ) + (set_local $$cond10 + (get_local $$call7) + ) + ) + ) + (call $___lock + (i32.const 44) + ) + (set_local $$f$addr$0$19 + (i32.load + (i32.const 40) + ) + ) + (set_local $$tobool11$20 + (i32.eq + (get_local $$f$addr$0$19) + (i32.const 0) + ) + ) + (if + (get_local $$tobool11$20) + (set_local $$r$0$lcssa + (get_local $$cond10) + ) + (block + (set_local $$f$addr$022 + (get_local $$f$addr$0$19) + ) + (set_local $$r$021 + (get_local $$cond10) + ) + (loop $while-in + (block $while-out + (set_local $$lock13 + (i32.add + (get_local $$f$addr$022) + (i32.const 76) + ) + ) + (set_local $$3 + (i32.load + (get_local $$lock13) + ) + ) + (set_local $$cmp14 + (i32.gt_s + (get_local $$3) + (i32.const -1) + ) + ) + (if + (get_local $$cmp14) + (block + (set_local $$call16 + (call $___lockfile + (get_local $$f$addr$022) + ) + ) + (set_local $$cond19 + (get_local $$call16) + ) + ) + (set_local $$cond19 + (i32.const 0) + ) + ) + (set_local $$wpos + (i32.add + (get_local $$f$addr$022) + (i32.const 20) + ) + ) + (set_local $$4 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$wbase + (i32.add + (get_local $$f$addr$022) + (i32.const 28) + ) + ) + (set_local $$5 + (i32.load + (get_local $$wbase) + ) + ) + (set_local $$cmp20 + (i32.gt_u + (get_local $$4) + (get_local $$5) + ) + ) + (if + (get_local $$cmp20) + (block + (set_local $$call22 + (call $___fflush_unlocked + (get_local $$f$addr$022) + ) + ) + (set_local $$or + (i32.or + (get_local $$call22) + (get_local $$r$021) + ) + ) + (set_local $$r$1 + (get_local $$or) + ) + ) + (set_local $$r$1 + (get_local $$r$021) + ) + ) + (set_local $$tobool24 + (i32.eq + (get_local $$cond19) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool24) + ) + (call $___unlockfile + (get_local $$f$addr$022) + ) + ) + (set_local $$next + (i32.add + (get_local $$f$addr$022) + (i32.const 56) + ) + ) + (set_local $$f$addr$0 + (i32.load + (get_local $$next) + ) + ) + (set_local $$tobool11 + (i32.eq + (get_local $$f$addr$0) + (i32.const 0) + ) + ) + (if + (get_local $$tobool11) + (block + (set_local $$r$0$lcssa + (get_local $$r$1) + ) + (br $while-out) + ) + (block + (set_local $$f$addr$022 + (get_local $$f$addr$0) + ) + (set_local $$r$021 + (get_local $$r$1) + ) + ) + ) + (br $while-in) + ) + ) + ) + ) + (call $___unlock + (i32.const 44) + ) + (set_local $$retval$0 + (get_local $$r$0$lcssa) + ) + ) + (block + (set_local $$lock + (i32.add + (get_local $$f) + (i32.const 76) + ) + ) + (set_local $$0 + (i32.load + (get_local $$lock) + ) + ) + (set_local $$cmp + (i32.gt_s + (get_local $$0) + (i32.const -1) + ) + ) + (if + (i32.eqz + (get_local $$cmp) + ) + (block + (set_local $$call1$18 + (call $___fflush_unlocked + (get_local $$f) + ) + ) + (set_local $$retval$0 + (get_local $$call1$18) + ) + (br $do-once) + ) + ) + (set_local $$call + (call $___lockfile + (get_local $$f) + ) + ) + (set_local $$phitmp + (i32.eq + (get_local $$call) + (i32.const 0) + ) + ) + (set_local $$call1 + (call $___fflush_unlocked + (get_local $$f) + ) + ) + (if + (get_local $$phitmp) + (set_local $$retval$0 + (get_local $$call1) + ) + (block + (call $___unlockfile + (get_local $$f) + ) + (set_local $$retval$0 + (get_local $$call1) + ) + ) + ) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_printf (; 36 ;) (param $$fmt i32) (param $$varargs i32) (result i32) + (local $$0 i32) + (local $$ap i32) + (local $$call i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$ap + (get_local $sp) + ) + (i32.store + (get_local $$ap) + (get_local $$varargs) + ) + (set_local $$0 + (i32.load + (i32.const 8) + ) + ) + (set_local $$call + (call $_vfprintf + (get_local $$0) + (get_local $$fmt) + (get_local $$ap) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$call) + ) + ) + (func $___lockfile (; 37 ;) (param $$f i32) (result i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (return + (i32.const 0) + ) + ) + (func $___unlockfile (; 38 ;) (param $$f i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (return) + ) + (func $___stdio_write (; 39 ;) (param $$f i32) (param $$buf i32) (param $$len i32) (result i32) + (local $$$pre i32) + (local $$0 i32) + (local $$1 i32) + (local $$10 i32) + (local $$11 i32) + (local $$12 i32) + (local $$13 i32) + (local $$14 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 i32) + (local $$8 i32) + (local $$9 i32) + (local $$add i32) + (local $$add$ptr i32) + (local $$add$ptr41 i32) + (local $$add$ptr46 i32) + (local $$buf31 i32) + (local $$buf_size i32) + (local $$call i32) + (local $$call10 i32) + (local $$call7 i32) + (local $$call9 i32) + (local $$cmp i32) + (local $$cmp17 i32) + (local $$cmp22 i32) + (local $$cmp29 i32) + (local $$cmp38 i32) + (local $$cnt$0 i32) + (local $$cnt$1 i32) + (local $$dec i32) + (local $$fd8 i32) + (local $$incdec$ptr i32) + (local $$iov$0 i32) + (local $$iov$0$lcssa57 i32) + (local $$iov$1 i32) + (local $$iov_base2 i32) + (local $$iov_len i32) + (local $$iov_len24 i32) + (local $$iov_len28 i32) + (local $$iov_len3 i32) + (local $$iov_len50 i32) + (local $$iov_len50$phi$trans$insert i32) + (local $$iovcnt$0 i32) + (local $$iovcnt$0$lcssa58 i32) + (local $$iovcnt$1 i32) + (local $$iovs i32) + (local $$or i32) + (local $$rem$0 i32) + (local $$retval$0 i32) + (local $$sub i32) + (local $$sub$ptr$sub i32) + (local $$sub26 i32) + (local $$sub36 i32) + (local $$sub51 i32) + (local $$tobool i32) + (local $$vararg_buffer i32) + (local $$vararg_buffer3 i32) + (local $$vararg_ptr1 i32) + (local $$vararg_ptr2 i32) + (local $$vararg_ptr6 i32) + (local $$vararg_ptr7 i32) + (local $$wbase i32) + (local $$wend i32) + (local $$wend19 i32) + (local $$wpos i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$vararg_buffer3 + (i32.add + (get_local $sp) + (i32.const 16) + ) + ) + (set_local $$vararg_buffer + (get_local $sp) + ) + (set_local $$iovs + (i32.add + (get_local $sp) + (i32.const 32) + ) + ) + (set_local $$wbase + (i32.add + (get_local $$f) + (i32.const 28) + ) + ) + (set_local $$0 + (i32.load + (get_local $$wbase) + ) + ) + (i32.store + (get_local $$iovs) + (get_local $$0) + ) + (set_local $$iov_len + (i32.add + (get_local $$iovs) + (i32.const 4) + ) + ) + (set_local $$wpos + (i32.add + (get_local $$f) + (i32.const 20) + ) + ) + (set_local $$1 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$sub$ptr$sub + (i32.sub + (get_local $$1) + (get_local $$0) + ) + ) + (i32.store + (get_local $$iov_len) + (get_local $$sub$ptr$sub) + ) + (set_local $$iov_base2 + (i32.add + (get_local $$iovs) + (i32.const 8) + ) + ) + (i32.store + (get_local $$iov_base2) + (get_local $$buf) + ) + (set_local $$iov_len3 + (i32.add + (get_local $$iovs) + (i32.const 12) + ) + ) + (i32.store + (get_local $$iov_len3) + (get_local $$len) + ) + (set_local $$add + (i32.add + (get_local $$sub$ptr$sub) + (get_local $$len) + ) + ) + (set_local $$fd8 + (i32.add + (get_local $$f) + (i32.const 60) + ) + ) + (set_local $$buf31 + (i32.add + (get_local $$f) + (i32.const 44) + ) + ) + (set_local $$iov$0 + (get_local $$iovs) + ) + (set_local $$iovcnt$0 + (i32.const 2) + ) + (set_local $$rem$0 + (get_local $$add) + ) + (loop $while-in + (block $while-out + (set_local $$2 + (i32.load + (i32.const 16) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$2) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$4 + (i32.load + (get_local $$fd8) + ) + ) + (i32.store + (get_local $$vararg_buffer3) + (get_local $$4) + ) + (set_local $$vararg_ptr6 + (i32.add + (get_local $$vararg_buffer3) + (i32.const 4) + ) + ) + (i32.store + (get_local $$vararg_ptr6) + (get_local $$iov$0) + ) + (set_local $$vararg_ptr7 + (i32.add + (get_local $$vararg_buffer3) + (i32.const 8) + ) + ) + (i32.store + (get_local $$vararg_ptr7) + (get_local $$iovcnt$0) + ) + (set_local $$call9 + (call $___syscall146 + (i32.const 146) + (get_local $$vararg_buffer3) + ) + ) + (set_local $$call10 + (call $___syscall_ret + (get_local $$call9) + ) + ) + (set_local $$cnt$0 + (get_local $$call10) + ) + ) + (block + (call $_pthread_cleanup_push + (i32.const 5) + (get_local $$f) + ) + (set_local $$3 + (i32.load + (get_local $$fd8) + ) + ) + (i32.store + (get_local $$vararg_buffer) + (get_local $$3) + ) + (set_local $$vararg_ptr1 + (i32.add + (get_local $$vararg_buffer) + (i32.const 4) + ) + ) + (i32.store + (get_local $$vararg_ptr1) + (get_local $$iov$0) + ) + (set_local $$vararg_ptr2 + (i32.add + (get_local $$vararg_buffer) + (i32.const 8) + ) + ) + (i32.store + (get_local $$vararg_ptr2) + (get_local $$iovcnt$0) + ) + (set_local $$call + (call $___syscall146 + (i32.const 146) + (get_local $$vararg_buffer) + ) + ) + (set_local $$call7 + (call $___syscall_ret + (get_local $$call) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + (set_local $$cnt$0 + (get_local $$call7) + ) + ) + ) + (set_local $$cmp + (i32.eq + (get_local $$rem$0) + (get_local $$cnt$0) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $label + (i32.const 6) + ) + (br $while-out) + ) + ) + (set_local $$cmp17 + (i32.lt_s + (get_local $$cnt$0) + (i32.const 0) + ) + ) + (if + (get_local $$cmp17) + (block + (set_local $$iov$0$lcssa57 + (get_local $$iov$0) + ) + (set_local $$iovcnt$0$lcssa58 + (get_local $$iovcnt$0) + ) + (set_local $label + (i32.const 8) + ) + (br $while-out) + ) + ) + (set_local $$sub26 + (i32.sub + (get_local $$rem$0) + (get_local $$cnt$0) + ) + ) + (set_local $$iov_len28 + (i32.add + (get_local $$iov$0) + (i32.const 4) + ) + ) + (set_local $$10 + (i32.load + (get_local $$iov_len28) + ) + ) + (set_local $$cmp29 + (i32.gt_u + (get_local $$cnt$0) + (get_local $$10) + ) + ) + (if + (get_local $$cmp29) + (block + (set_local $$11 + (i32.load + (get_local $$buf31) + ) + ) + (i32.store + (get_local $$wbase) + (get_local $$11) + ) + (i32.store + (get_local $$wpos) + (get_local $$11) + ) + (set_local $$sub36 + (i32.sub + (get_local $$cnt$0) + (get_local $$10) + ) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$iov$0) + (i32.const 8) + ) + ) + (set_local $$dec + (i32.add + (get_local $$iovcnt$0) + (i32.const -1) + ) + ) + (set_local $$iov_len50$phi$trans$insert + (i32.add + (get_local $$iov$0) + (i32.const 12) + ) + ) + (set_local $$$pre + (i32.load + (get_local $$iov_len50$phi$trans$insert) + ) + ) + (set_local $$14 + (get_local $$$pre) + ) + (set_local $$cnt$1 + (get_local $$sub36) + ) + (set_local $$iov$1 + (get_local $$incdec$ptr) + ) + (set_local $$iovcnt$1 + (get_local $$dec) + ) + ) + (block + (set_local $$cmp38 + (i32.eq + (get_local $$iovcnt$0) + (i32.const 2) + ) + ) + (if + (get_local $$cmp38) + (block + (set_local $$12 + (i32.load + (get_local $$wbase) + ) + ) + (set_local $$add$ptr41 + (i32.add + (get_local $$12) + (get_local $$cnt$0) + ) + ) + (i32.store + (get_local $$wbase) + (get_local $$add$ptr41) + ) + (set_local $$14 + (get_local $$10) + ) + (set_local $$cnt$1 + (get_local $$cnt$0) + ) + (set_local $$iov$1 + (get_local $$iov$0) + ) + (set_local $$iovcnt$1 + (i32.const 2) + ) + ) + (block + (set_local $$14 + (get_local $$10) + ) + (set_local $$cnt$1 + (get_local $$cnt$0) + ) + (set_local $$iov$1 + (get_local $$iov$0) + ) + (set_local $$iovcnt$1 + (get_local $$iovcnt$0) + ) + ) + ) + ) + ) + (set_local $$13 + (i32.load + (get_local $$iov$1) + ) + ) + (set_local $$add$ptr46 + (i32.add + (get_local $$13) + (get_local $$cnt$1) + ) + ) + (i32.store + (get_local $$iov$1) + (get_local $$add$ptr46) + ) + (set_local $$iov_len50 + (i32.add + (get_local $$iov$1) + (i32.const 4) + ) + ) + (set_local $$sub51 + (i32.sub + (get_local $$14) + (get_local $$cnt$1) + ) + ) + (i32.store + (get_local $$iov_len50) + (get_local $$sub51) + ) + (set_local $$iov$0 + (get_local $$iov$1) + ) + (set_local $$iovcnt$0 + (get_local $$iovcnt$1) + ) + (set_local $$rem$0 + (get_local $$sub26) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 6) + ) + (block + (set_local $$5 + (i32.load + (get_local $$buf31) + ) + ) + (set_local $$buf_size + (i32.add + (get_local $$f) + (i32.const 48) + ) + ) + (set_local $$6 + (i32.load + (get_local $$buf_size) + ) + ) + (set_local $$add$ptr + (i32.add + (get_local $$5) + (get_local $$6) + ) + ) + (set_local $$wend + (i32.add + (get_local $$f) + (i32.const 16) + ) + ) + (i32.store + (get_local $$wend) + (get_local $$add$ptr) + ) + (set_local $$7 + (get_local $$5) + ) + (i32.store + (get_local $$wbase) + (get_local $$7) + ) + (i32.store + (get_local $$wpos) + (get_local $$7) + ) + (set_local $$retval$0 + (get_local $$len) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 8) + ) + (block + (set_local $$wend19 + (i32.add + (get_local $$f) + (i32.const 16) + ) + ) + (i32.store + (get_local $$wend19) + (i32.const 0) + ) + (i32.store + (get_local $$wbase) + (i32.const 0) + ) + (i32.store + (get_local $$wpos) + (i32.const 0) + ) + (set_local $$8 + (i32.load + (get_local $$f) + ) + ) + (set_local $$or + (i32.or + (get_local $$8) + (i32.const 32) + ) + ) + (i32.store + (get_local $$f) + (get_local $$or) + ) + (set_local $$cmp22 + (i32.eq + (get_local $$iovcnt$0$lcssa58) + (i32.const 2) + ) + ) + (if + (get_local $$cmp22) + (set_local $$retval$0 + (i32.const 0) + ) + (block + (set_local $$iov_len24 + (i32.add + (get_local $$iov$0$lcssa57) + (i32.const 4) + ) + ) + (set_local $$9 + (i32.load + (get_local $$iov_len24) + ) + ) + (set_local $$sub + (i32.sub + (get_local $$len) + (get_local $$9) + ) + ) + (set_local $$retval$0 + (get_local $$sub) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_vfprintf (; 40 ;) (param $$f i32) (param $$fmt i32) (param $$ap i32) (result i32) + (local $$$call21 i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 i32) + (local $$add$ptr i32) + (local $$and i32) + (local $$and11 i32) + (local $$and36 i32) + (local $$ap2 i32) + (local $$buf i32) + (local $$buf_size i32) + (local $$call i32) + (local $$call21 i32) + (local $$call21$30 i32) + (local $$call6 i32) + (local $$cmp i32) + (local $$cmp5 i32) + (local $$cmp7 i32) + (local $$cond i32) + (local $$internal_buf i32) + (local $$lock i32) + (local $$mode i32) + (local $$nl_arg i32) + (local $$nl_type i32) + (local $$or i32) + (local $$ret$1 i32) + (local $$ret$1$ i32) + (local $$retval$0 i32) + (local $$tobool i32) + (local $$tobool22 i32) + (local $$tobool26 i32) + (local $$tobool37 i32) + (local $$tobool41 i32) + (local $$vacopy_currentptr i32) + (local $$wbase i32) + (local $$wend i32) + (local $$wpos i32) + (local $$write i32) + (local $dest i32) + (local $label i32) + (local $sp i32) + (local $stop i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 224) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$ap2 + (i32.add + (get_local $sp) + (i32.const 120) + ) + ) + (set_local $$nl_type + (i32.add + (get_local $sp) + (i32.const 80) + ) + ) + (set_local $$nl_arg + (get_local $sp) + ) + (set_local $$internal_buf + (i32.add + (get_local $sp) + (i32.const 136) + ) + ) + (set_local $dest + (get_local $$nl_type) + ) + (set_local $stop + (i32.add + (get_local $dest) + (i32.const 40) + ) + ) + (loop $do-in + (block $do-out + (i32.store + (get_local $dest) + (i32.const 0) + ) + (set_local $dest + (i32.add + (get_local $dest) + (i32.const 4) + ) + ) + (br_if $do-in + (i32.lt_s + (get_local $dest) + (get_local $stop) + ) + ) + ) + ) + (set_local $$vacopy_currentptr + (i32.load + (get_local $$ap) + ) + ) + (i32.store + (get_local $$ap2) + (get_local $$vacopy_currentptr) + ) + (set_local $$call + (call $_printf_core + (i32.const 0) + (get_local $$fmt) + (get_local $$ap2) + (get_local $$nl_arg) + (get_local $$nl_type) + ) + ) + (set_local $$cmp + (i32.lt_s + (get_local $$call) + (i32.const 0) + ) + ) + (if + (get_local $$cmp) + (set_local $$retval$0 + (i32.const -1) + ) + (block + (set_local $$lock + (i32.add + (get_local $$f) + (i32.const 76) + ) + ) + (set_local $$0 + (i32.load + (get_local $$lock) + ) + ) + (set_local $$cmp5 + (i32.gt_s + (get_local $$0) + (i32.const -1) + ) + ) + (if + (get_local $$cmp5) + (block + (set_local $$call6 + (call $___lockfile + (get_local $$f) + ) + ) + (set_local $$cond + (get_local $$call6) + ) + ) + (set_local $$cond + (i32.const 0) + ) + ) + (set_local $$1 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and + (i32.and + (get_local $$1) + (i32.const 32) + ) + ) + (set_local $$mode + (i32.add + (get_local $$f) + (i32.const 74) + ) + ) + (set_local $$2 + (i32.load8_s + (get_local $$mode) + ) + ) + (set_local $$cmp7 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $$2) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 1) + ) + ) + (if + (get_local $$cmp7) + (block + (set_local $$and11 + (i32.and + (get_local $$1) + (i32.const -33) + ) + ) + (i32.store + (get_local $$f) + (get_local $$and11) + ) + ) + ) + (set_local $$buf_size + (i32.add + (get_local $$f) + (i32.const 48) + ) + ) + (set_local $$3 + (i32.load + (get_local $$buf_size) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$3) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$buf + (i32.add + (get_local $$f) + (i32.const 44) + ) + ) + (set_local $$4 + (i32.load + (get_local $$buf) + ) + ) + (i32.store + (get_local $$buf) + (get_local $$internal_buf) + ) + (set_local $$wbase + (i32.add + (get_local $$f) + (i32.const 28) + ) + ) + (i32.store + (get_local $$wbase) + (get_local $$internal_buf) + ) + (set_local $$wpos + (i32.add + (get_local $$f) + (i32.const 20) + ) + ) + (i32.store + (get_local $$wpos) + (get_local $$internal_buf) + ) + (i32.store + (get_local $$buf_size) + (i32.const 80) + ) + (set_local $$add$ptr + (i32.add + (get_local $$internal_buf) + (i32.const 80) + ) + ) + (set_local $$wend + (i32.add + (get_local $$f) + (i32.const 16) + ) + ) + (i32.store + (get_local $$wend) + (get_local $$add$ptr) + ) + (set_local $$call21 + (call $_printf_core + (get_local $$f) + (get_local $$fmt) + (get_local $$ap2) + (get_local $$nl_arg) + (get_local $$nl_type) + ) + ) + (set_local $$tobool22 + (i32.eq + (get_local $$4) + (i32.const 0) + ) + ) + (if + (get_local $$tobool22) + (set_local $$ret$1 + (get_local $$call21) + ) + (block + (set_local $$write + (i32.add + (get_local $$f) + (i32.const 36) + ) + ) + (set_local $$5 + (i32.load + (get_local $$write) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $$f) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (get_local $$5) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (set_local $$6 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$tobool26 + (i32.eq + (get_local $$6) + (i32.const 0) + ) + ) + (set_local $$$call21 + (if (result i32) + (get_local $$tobool26) + (i32.const -1) + (get_local $$call21) + ) + ) + (i32.store + (get_local $$buf) + (get_local $$4) + ) + (i32.store + (get_local $$buf_size) + (i32.const 0) + ) + (i32.store + (get_local $$wend) + (i32.const 0) + ) + (i32.store + (get_local $$wbase) + (i32.const 0) + ) + (i32.store + (get_local $$wpos) + (i32.const 0) + ) + (set_local $$ret$1 + (get_local $$$call21) + ) + ) + ) + ) + (block + (set_local $$call21$30 + (call $_printf_core + (get_local $$f) + (get_local $$fmt) + (get_local $$ap2) + (get_local $$nl_arg) + (get_local $$nl_type) + ) + ) + (set_local $$ret$1 + (get_local $$call21$30) + ) + ) + ) + (set_local $$7 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and36 + (i32.and + (get_local $$7) + (i32.const 32) + ) + ) + (set_local $$tobool37 + (i32.eq + (get_local $$and36) + (i32.const 0) + ) + ) + (set_local $$ret$1$ + (if (result i32) + (get_local $$tobool37) + (get_local $$ret$1) + (i32.const -1) + ) + ) + (set_local $$or + (i32.or + (get_local $$7) + (get_local $$and) + ) + ) + (i32.store + (get_local $$f) + (get_local $$or) + ) + (set_local $$tobool41 + (i32.eq + (get_local $$cond) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool41) + ) + (call $___unlockfile + (get_local $$f) + ) + ) + (set_local $$retval$0 + (get_local $$ret$1$) + ) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$retval$0) + ) + ) + (func $___fwritex (; 41 ;) (param $$s i32) (param $$l i32) (param $$f i32) (result i32) + (local $$$pre i32) + (local $$$pre31 i32) + (local $$0 i32) + (local $$1 i32) + (local $$10 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 i32) + (local $$8 i32) + (local $$9 i32) + (local $$add i32) + (local $$add$ptr i32) + (local $$add$ptr26 i32) + (local $$arrayidx i32) + (local $$call i32) + (local $$call16 i32) + (local $$call4 i32) + (local $$cmp i32) + (local $$cmp11 i32) + (local $$cmp17 i32) + (local $$cmp6 i32) + (local $$i$0 i32) + (local $$i$0$lcssa36 i32) + (local $$i$1 i32) + (local $$l$addr$0 i32) + (local $$lbf i32) + (local $$retval$0 i32) + (local $$s$addr$0 i32) + (local $$sub i32) + (local $$sub$ptr$sub i32) + (local $$sub21 i32) + (local $$tobool i32) + (local $$tobool1 i32) + (local $$tobool9 i32) + (local $$wend i32) + (local $$wpos i32) + (local $$write i32) + (local $$write15 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$wend + (i32.add + (get_local $$f) + (i32.const 16) + ) + ) + (set_local $$0 + (i32.load + (get_local $$wend) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$0) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$call + (call $___towrite + (get_local $$f) + ) + ) + (set_local $$tobool1 + (i32.eq + (get_local $$call) + (i32.const 0) + ) + ) + (if + (get_local $$tobool1) + (block + (set_local $$$pre + (i32.load + (get_local $$wend) + ) + ) + (set_local $$3 + (get_local $$$pre) + ) + (set_local $label + (i32.const 5) + ) + ) + (set_local $$retval$0 + (i32.const 0) + ) + ) + ) + (block + (set_local $$1 + (get_local $$0) + ) + (set_local $$3 + (get_local $$1) + ) + (set_local $label + (i32.const 5) + ) + ) + ) + (block $label$break$L5 + (if + (i32.eq + (get_local $label) + (i32.const 5) + ) + (block + (set_local $$wpos + (i32.add + (get_local $$f) + (i32.const 20) + ) + ) + (set_local $$2 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$sub$ptr$sub + (i32.sub + (get_local $$3) + (get_local $$2) + ) + ) + (set_local $$cmp + (i32.lt_u + (get_local $$sub$ptr$sub) + (get_local $$l) + ) + ) + (set_local $$4 + (get_local $$2) + ) + (if + (get_local $$cmp) + (block + (set_local $$write + (i32.add + (get_local $$f) + (i32.const 36) + ) + ) + (set_local $$5 + (i32.load + (get_local $$write) + ) + ) + (set_local $$call4 + (call_indirect (type $FUNCSIG$iiii) + (get_local $$f) + (get_local $$s) + (get_local $$l) + (i32.add + (i32.and + (get_local $$5) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (set_local $$retval$0 + (get_local $$call4) + ) + (br $label$break$L5) + ) + ) + (set_local $$lbf + (i32.add + (get_local $$f) + (i32.const 75) + ) + ) + (set_local $$6 + (i32.load8_s + (get_local $$lbf) + ) + ) + (set_local $$cmp6 + (i32.gt_s + (i32.shr_s + (i32.shl + (get_local $$6) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -1) + ) + ) + (block $label$break$L10 + (if + (get_local $$cmp6) + (block + (set_local $$i$0 + (get_local $$l) + ) + (loop $while-in + (block $while-out + (set_local $$tobool9 + (i32.eq + (get_local $$i$0) + (i32.const 0) + ) + ) + (if + (get_local $$tobool9) + (block + (set_local $$9 + (get_local $$4) + ) + (set_local $$i$1 + (i32.const 0) + ) + (set_local $$l$addr$0 + (get_local $$l) + ) + (set_local $$s$addr$0 + (get_local $$s) + ) + (br $label$break$L10) + ) + ) + (set_local $$sub + (i32.add + (get_local $$i$0) + (i32.const -1) + ) + ) + (set_local $$arrayidx + (i32.add + (get_local $$s) + (get_local $$sub) + ) + ) + (set_local $$7 + (i32.load8_s + (get_local $$arrayidx) + ) + ) + (set_local $$cmp11 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$7) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 10) + ) + ) + (if + (get_local $$cmp11) + (block + (set_local $$i$0$lcssa36 + (get_local $$i$0) + ) + (br $while-out) + ) + (set_local $$i$0 + (get_local $$sub) + ) + ) + (br $while-in) + ) + ) + (set_local $$write15 + (i32.add + (get_local $$f) + (i32.const 36) + ) + ) + (set_local $$8 + (i32.load + (get_local $$write15) + ) + ) + (set_local $$call16 + (call_indirect (type $FUNCSIG$iiii) + (get_local $$f) + (get_local $$s) + (get_local $$i$0$lcssa36) + (i32.add + (i32.and + (get_local $$8) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (set_local $$cmp17 + (i32.lt_u + (get_local $$call16) + (get_local $$i$0$lcssa36) + ) + ) + (if + (get_local $$cmp17) + (block + (set_local $$retval$0 + (get_local $$i$0$lcssa36) + ) + (br $label$break$L5) + ) + ) + (set_local $$add$ptr + (i32.add + (get_local $$s) + (get_local $$i$0$lcssa36) + ) + ) + (set_local $$sub21 + (i32.sub + (get_local $$l) + (get_local $$i$0$lcssa36) + ) + ) + (set_local $$$pre31 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$9 + (get_local $$$pre31) + ) + (set_local $$i$1 + (get_local $$i$0$lcssa36) + ) + (set_local $$l$addr$0 + (get_local $$sub21) + ) + (set_local $$s$addr$0 + (get_local $$add$ptr) + ) + ) + (block + (set_local $$9 + (get_local $$4) + ) + (set_local $$i$1 + (i32.const 0) + ) + (set_local $$l$addr$0 + (get_local $$l) + ) + (set_local $$s$addr$0 + (get_local $$s) + ) + ) + ) + ) + (drop + (call $_memcpy + (get_local $$9) + (get_local $$s$addr$0) + (get_local $$l$addr$0) + ) + ) + (set_local $$10 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$add$ptr26 + (i32.add + (get_local $$10) + (get_local $$l$addr$0) + ) + ) + (i32.store + (get_local $$wpos) + (get_local $$add$ptr26) + ) + (set_local $$add + (i32.add + (get_local $$i$1) + (get_local $$l$addr$0) + ) + ) + (set_local $$retval$0 + (get_local $$add) + ) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $___towrite (; 42 ;) (param $$f i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$add$ptr i32) + (local $$and i32) + (local $$buf i32) + (local $$buf_size i32) + (local $$conv i32) + (local $$conv3 i32) + (local $$mode i32) + (local $$or i32) + (local $$or5 i32) + (local $$rend i32) + (local $$retval$0 i32) + (local $$rpos i32) + (local $$sub i32) + (local $$tobool i32) + (local $$wbase i32) + (local $$wend i32) + (local $$wpos i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$mode + (i32.add + (get_local $$f) + (i32.const 74) + ) + ) + (set_local $$0 + (i32.load8_s + (get_local $$mode) + ) + ) + (set_local $$conv + (i32.shr_s + (i32.shl + (get_local $$0) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$sub + (i32.add + (get_local $$conv) + (i32.const 255) + ) + ) + (set_local $$or + (i32.or + (get_local $$sub) + (get_local $$conv) + ) + ) + (set_local $$conv3 + (i32.and + (get_local $$or) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $$mode) + (get_local $$conv3) + ) + (set_local $$1 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and + (i32.and + (get_local $$1) + (i32.const 8) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$and) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$rend + (i32.add + (get_local $$f) + (i32.const 8) + ) + ) + (i32.store + (get_local $$rend) + (i32.const 0) + ) + (set_local $$rpos + (i32.add + (get_local $$f) + (i32.const 4) + ) + ) + (i32.store + (get_local $$rpos) + (i32.const 0) + ) + (set_local $$buf + (i32.add + (get_local $$f) + (i32.const 44) + ) + ) + (set_local $$2 + (i32.load + (get_local $$buf) + ) + ) + (set_local $$wbase + (i32.add + (get_local $$f) + (i32.const 28) + ) + ) + (i32.store + (get_local $$wbase) + (get_local $$2) + ) + (set_local $$wpos + (i32.add + (get_local $$f) + (i32.const 20) + ) + ) + (i32.store + (get_local $$wpos) + (get_local $$2) + ) + (set_local $$3 + (get_local $$2) + ) + (set_local $$buf_size + (i32.add + (get_local $$f) + (i32.const 48) + ) + ) + (set_local $$4 + (i32.load + (get_local $$buf_size) + ) + ) + (set_local $$add$ptr + (i32.add + (get_local $$3) + (get_local $$4) + ) + ) + (set_local $$wend + (i32.add + (get_local $$f) + (i32.const 16) + ) + ) + (i32.store + (get_local $$wend) + (get_local $$add$ptr) + ) + (set_local $$retval$0 + (i32.const 0) + ) + ) + (block + (set_local $$or5 + (i32.or + (get_local $$1) + (i32.const 32) + ) + ) + (i32.store + (get_local $$f) + (get_local $$or5) + ) + (set_local $$retval$0 + (i32.const -1) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_wcrtomb (; 43 ;) (param $$s i32) (param $$wc i32) (param $$st i32) (result i32) + (local $$0 i32) + (local $$and i32) + (local $$and19 i32) + (local $$and23 i32) + (local $$and36 i32) + (local $$and41 i32) + (local $$and45 i32) + (local $$call i32) + (local $$cmp i32) + (local $$cmp11 i32) + (local $$cmp2 i32) + (local $$cmp28 i32) + (local $$cmp9 i32) + (local $$conv i32) + (local $$conv16 i32) + (local $$conv21 i32) + (local $$conv25 i32) + (local $$conv33 i32) + (local $$conv38 i32) + (local $$conv43 i32) + (local $$conv47 i32) + (local $$conv5 i32) + (local $$conv7 i32) + (local $$incdec$ptr i32) + (local $$incdec$ptr17 i32) + (local $$incdec$ptr22 i32) + (local $$incdec$ptr34 i32) + (local $$incdec$ptr39 i32) + (local $$incdec$ptr44 i32) + (local $$or i32) + (local $$or$cond i32) + (local $$or15 i32) + (local $$or20 i32) + (local $$or24 i32) + (local $$or32 i32) + (local $$or37 i32) + (local $$or42 i32) + (local $$or46 i32) + (local $$or6 i32) + (local $$retval$0 i32) + (local $$shr$28 i32) + (local $$shr14$26 i32) + (local $$shr18$27 i32) + (local $$shr31$23 i32) + (local $$shr35$24 i32) + (local $$shr40$25 i32) + (local $$sub27 i32) + (local $$tobool i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$tobool + (i32.eq + (get_local $$s) + (i32.const 0) + ) + ) + (block $do-once + (if + (get_local $$tobool) + (set_local $$retval$0 + (i32.const 1) + ) + (block + (set_local $$cmp + (i32.lt_u + (get_local $$wc) + (i32.const 128) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $$conv + (i32.and + (get_local $$wc) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $$s) + (get_local $$conv) + ) + (set_local $$retval$0 + (i32.const 1) + ) + (br $do-once) + ) + ) + (set_local $$cmp2 + (i32.lt_u + (get_local $$wc) + (i32.const 2048) + ) + ) + (if + (get_local $$cmp2) + (block + (set_local $$shr$28 + (i32.shr_u + (get_local $$wc) + (i32.const 6) + ) + ) + (set_local $$or + (i32.or + (get_local $$shr$28) + (i32.const 192) + ) + ) + (set_local $$conv5 + (i32.and + (get_local $$or) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$s) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $$s) + (get_local $$conv5) + ) + (set_local $$and + (i32.and + (get_local $$wc) + (i32.const 63) + ) + ) + (set_local $$or6 + (i32.or + (get_local $$and) + (i32.const 128) + ) + ) + (set_local $$conv7 + (i32.and + (get_local $$or6) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $$incdec$ptr) + (get_local $$conv7) + ) + (set_local $$retval$0 + (i32.const 2) + ) + (br $do-once) + ) + ) + (set_local $$cmp9 + (i32.lt_u + (get_local $$wc) + (i32.const 55296) + ) + ) + (set_local $$0 + (i32.and + (get_local $$wc) + (i32.const -8192) + ) + ) + (set_local $$cmp11 + (i32.eq + (get_local $$0) + (i32.const 57344) + ) + ) + (set_local $$or$cond + (i32.or + (get_local $$cmp9) + (get_local $$cmp11) + ) + ) + (if + (get_local $$or$cond) + (block + (set_local $$shr14$26 + (i32.shr_u + (get_local $$wc) + (i32.const 12) + ) + ) + (set_local $$or15 + (i32.or + (get_local $$shr14$26) + (i32.const 224) + ) + ) + (set_local $$conv16 + (i32.and + (get_local $$or15) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr17 + (i32.add + (get_local $$s) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $$s) + (get_local $$conv16) + ) + (set_local $$shr18$27 + (i32.shr_u + (get_local $$wc) + (i32.const 6) + ) + ) + (set_local $$and19 + (i32.and + (get_local $$shr18$27) + (i32.const 63) + ) + ) + (set_local $$or20 + (i32.or + (get_local $$and19) + (i32.const 128) + ) + ) + (set_local $$conv21 + (i32.and + (get_local $$or20) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr22 + (i32.add + (get_local $$s) + (i32.const 2) + ) + ) + (i32.store8 + (get_local $$incdec$ptr17) + (get_local $$conv21) + ) + (set_local $$and23 + (i32.and + (get_local $$wc) + (i32.const 63) + ) + ) + (set_local $$or24 + (i32.or + (get_local $$and23) + (i32.const 128) + ) + ) + (set_local $$conv25 + (i32.and + (get_local $$or24) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $$incdec$ptr22) + (get_local $$conv25) + ) + (set_local $$retval$0 + (i32.const 3) + ) + (br $do-once) + ) + ) + (set_local $$sub27 + (i32.add + (get_local $$wc) + (i32.const -65536) + ) + ) + (set_local $$cmp28 + (i32.lt_u + (get_local $$sub27) + (i32.const 1048576) + ) + ) + (if + (get_local $$cmp28) + (block + (set_local $$shr31$23 + (i32.shr_u + (get_local $$wc) + (i32.const 18) + ) + ) + (set_local $$or32 + (i32.or + (get_local $$shr31$23) + (i32.const 240) + ) + ) + (set_local $$conv33 + (i32.and + (get_local $$or32) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr34 + (i32.add + (get_local $$s) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $$s) + (get_local $$conv33) + ) + (set_local $$shr35$24 + (i32.shr_u + (get_local $$wc) + (i32.const 12) + ) + ) + (set_local $$and36 + (i32.and + (get_local $$shr35$24) + (i32.const 63) + ) + ) + (set_local $$or37 + (i32.or + (get_local $$and36) + (i32.const 128) + ) + ) + (set_local $$conv38 + (i32.and + (get_local $$or37) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr39 + (i32.add + (get_local $$s) + (i32.const 2) + ) + ) + (i32.store8 + (get_local $$incdec$ptr34) + (get_local $$conv38) + ) + (set_local $$shr40$25 + (i32.shr_u + (get_local $$wc) + (i32.const 6) + ) + ) + (set_local $$and41 + (i32.and + (get_local $$shr40$25) + (i32.const 63) + ) + ) + (set_local $$or42 + (i32.or + (get_local $$and41) + (i32.const 128) + ) + ) + (set_local $$conv43 + (i32.and + (get_local $$or42) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr44 + (i32.add + (get_local $$s) + (i32.const 3) + ) + ) + (i32.store8 + (get_local $$incdec$ptr39) + (get_local $$conv43) + ) + (set_local $$and45 + (i32.and + (get_local $$wc) + (i32.const 63) + ) + ) + (set_local $$or46 + (i32.or + (get_local $$and45) + (i32.const 128) + ) + ) + (set_local $$conv47 + (i32.and + (get_local $$or46) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $$incdec$ptr44) + (get_local $$conv47) + ) + (set_local $$retval$0 + (i32.const 4) + ) + (br $do-once) + ) + (block + (set_local $$call + (call $___errno_location) + ) + (i32.store + (get_local $$call) + (i32.const 84) + ) + (set_local $$retval$0 + (i32.const -1) + ) + (br $do-once) + ) + ) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_wctomb (; 44 ;) (param $$s i32) (param $$wc i32) (result i32) + (local $$call i32) + (local $$retval$0 i32) + (local $$tobool i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$tobool + (i32.eq + (get_local $$s) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (set_local $$retval$0 + (i32.const 0) + ) + (block + (set_local $$call + (call $_wcrtomb + (get_local $$s) + (get_local $$wc) + (i32.const 0) + ) + ) + (set_local $$retval$0 + (get_local $$call) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_memchr (; 45 ;) (param $$src i32) (param $$c i32) (param $$n i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 i32) + (local $$and i32) + (local $$and$39 i32) + (local $$and15 i32) + (local $$and16 i32) + (local $$cmp i32) + (local $$cmp11 i32) + (local $$cmp11$32 i32) + (local $$cmp28 i32) + (local $$cmp8 i32) + (local $$cond i32) + (local $$conv1 i32) + (local $$dec i32) + (local $$dec34 i32) + (local $$incdec$ptr i32) + (local $$incdec$ptr21 i32) + (local $$incdec$ptr33 i32) + (local $$lnot i32) + (local $$mul i32) + (local $$n$addr$0$lcssa i32) + (local $$n$addr$0$lcssa61 i32) + (local $$n$addr$043 i32) + (local $$n$addr$1$lcssa i32) + (local $$n$addr$133 i32) + (local $$n$addr$133$lcssa i32) + (local $$n$addr$227 i32) + (local $$n$addr$3 i32) + (local $$neg i32) + (local $$or$cond i32) + (local $$or$cond$42 i32) + (local $$s$0$lcssa i32) + (local $$s$0$lcssa60 i32) + (local $$s$044 i32) + (local $$s$128 i32) + (local $$s$2 i32) + (local $$sub i32) + (local $$sub22 i32) + (local $$tobool i32) + (local $$tobool$40 i32) + (local $$tobool2 i32) + (local $$tobool2$41 i32) + (local $$tobool2$lcssa i32) + (local $$tobool25 i32) + (local $$tobool25$26 i32) + (local $$tobool36 i32) + (local $$w$0$lcssa i32) + (local $$w$034 i32) + (local $$w$034$lcssa i32) + (local $$xor i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$conv1 + (i32.and + (get_local $$c) + (i32.const 255) + ) + ) + (set_local $$0 + (get_local $$src) + ) + (set_local $$and$39 + (i32.and + (get_local $$0) + (i32.const 3) + ) + ) + (set_local $$tobool$40 + (i32.ne + (get_local $$and$39) + (i32.const 0) + ) + ) + (set_local $$tobool2$41 + (i32.ne + (get_local $$n) + (i32.const 0) + ) + ) + (set_local $$or$cond$42 + (i32.and + (get_local $$tobool2$41) + (get_local $$tobool$40) + ) + ) + (block $label$break$L1 + (if + (get_local $$or$cond$42) + (block + (set_local $$1 + (i32.and + (get_local $$c) + (i32.const 255) + ) + ) + (set_local $$n$addr$043 + (get_local $$n) + ) + (set_local $$s$044 + (get_local $$src) + ) + (loop $while-in + (block $while-out + (set_local $$2 + (i32.load8_s + (get_local $$s$044) + ) + ) + (set_local $$cmp + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$2) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $$1) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $$n$addr$0$lcssa61 + (get_local $$n$addr$043) + ) + (set_local $$s$0$lcssa60 + (get_local $$s$044) + ) + (set_local $label + (i32.const 6) + ) + (br $label$break$L1) + ) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$s$044) + (i32.const 1) + ) + ) + (set_local $$dec + (i32.add + (get_local $$n$addr$043) + (i32.const -1) + ) + ) + (set_local $$3 + (get_local $$incdec$ptr) + ) + (set_local $$and + (i32.and + (get_local $$3) + (i32.const 3) + ) + ) + (set_local $$tobool + (i32.ne + (get_local $$and) + (i32.const 0) + ) + ) + (set_local $$tobool2 + (i32.ne + (get_local $$dec) + (i32.const 0) + ) + ) + (set_local $$or$cond + (i32.and + (get_local $$tobool2) + (get_local $$tobool) + ) + ) + (if + (get_local $$or$cond) + (block + (set_local $$n$addr$043 + (get_local $$dec) + ) + (set_local $$s$044 + (get_local $$incdec$ptr) + ) + ) + (block + (set_local $$n$addr$0$lcssa + (get_local $$dec) + ) + (set_local $$s$0$lcssa + (get_local $$incdec$ptr) + ) + (set_local $$tobool2$lcssa + (get_local $$tobool2) + ) + (set_local $label + (i32.const 5) + ) + (br $while-out) + ) + ) + (br $while-in) + ) + ) + ) + (block + (set_local $$n$addr$0$lcssa + (get_local $$n) + ) + (set_local $$s$0$lcssa + (get_local $$src) + ) + (set_local $$tobool2$lcssa + (get_local $$tobool2$41) + ) + (set_local $label + (i32.const 5) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 5) + ) + (if + (get_local $$tobool2$lcssa) + (block + (set_local $$n$addr$0$lcssa61 + (get_local $$n$addr$0$lcssa) + ) + (set_local $$s$0$lcssa60 + (get_local $$s$0$lcssa) + ) + (set_local $label + (i32.const 6) + ) + ) + (block + (set_local $$n$addr$3 + (i32.const 0) + ) + (set_local $$s$2 + (get_local $$s$0$lcssa) + ) + ) + ) + ) + (block $label$break$L8 + (if + (i32.eq + (get_local $label) + (i32.const 6) + ) + (block + (set_local $$4 + (i32.load8_s + (get_local $$s$0$lcssa60) + ) + ) + (set_local $$5 + (i32.and + (get_local $$c) + (i32.const 255) + ) + ) + (set_local $$cmp8 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$4) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $$5) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $$cmp8) + (block + (set_local $$n$addr$3 + (get_local $$n$addr$0$lcssa61) + ) + (set_local $$s$2 + (get_local $$s$0$lcssa60) + ) + ) + (block + (set_local $$mul + (i32.mul + (get_local $$conv1) + (i32.const 16843009) + ) + ) + (set_local $$cmp11$32 + (i32.gt_u + (get_local $$n$addr$0$lcssa61) + (i32.const 3) + ) + ) + (block $label$break$L11 + (if + (get_local $$cmp11$32) + (block + (set_local $$n$addr$133 + (get_local $$n$addr$0$lcssa61) + ) + (set_local $$w$034 + (get_local $$s$0$lcssa60) + ) + (loop $while-in3 + (block $while-out2 + (set_local $$6 + (i32.load + (get_local $$w$034) + ) + ) + (set_local $$xor + (i32.xor + (get_local $$6) + (get_local $$mul) + ) + ) + (set_local $$sub + (i32.add + (get_local $$xor) + (i32.const -16843009) + ) + ) + (set_local $$neg + (i32.and + (get_local $$xor) + (i32.const -2139062144) + ) + ) + (set_local $$and15 + (i32.xor + (get_local $$neg) + (i32.const -2139062144) + ) + ) + (set_local $$and16 + (i32.and + (get_local $$and15) + (get_local $$sub) + ) + ) + (set_local $$lnot + (i32.eq + (get_local $$and16) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$lnot) + ) + (block + (set_local $$n$addr$133$lcssa + (get_local $$n$addr$133) + ) + (set_local $$w$034$lcssa + (get_local $$w$034) + ) + (br $while-out2) + ) + ) + (set_local $$incdec$ptr21 + (i32.add + (get_local $$w$034) + (i32.const 4) + ) + ) + (set_local $$sub22 + (i32.add + (get_local $$n$addr$133) + (i32.const -4) + ) + ) + (set_local $$cmp11 + (i32.gt_u + (get_local $$sub22) + (i32.const 3) + ) + ) + (if + (get_local $$cmp11) + (block + (set_local $$n$addr$133 + (get_local $$sub22) + ) + (set_local $$w$034 + (get_local $$incdec$ptr21) + ) + ) + (block + (set_local $$n$addr$1$lcssa + (get_local $$sub22) + ) + (set_local $$w$0$lcssa + (get_local $$incdec$ptr21) + ) + (set_local $label + (i32.const 11) + ) + (br $label$break$L11) + ) + ) + (br $while-in3) + ) + ) + (set_local $$n$addr$227 + (get_local $$n$addr$133$lcssa) + ) + (set_local $$s$128 + (get_local $$w$034$lcssa) + ) + ) + (block + (set_local $$n$addr$1$lcssa + (get_local $$n$addr$0$lcssa61) + ) + (set_local $$w$0$lcssa + (get_local $$s$0$lcssa60) + ) + (set_local $label + (i32.const 11) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 11) + ) + (block + (set_local $$tobool25$26 + (i32.eq + (get_local $$n$addr$1$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$tobool25$26) + (block + (set_local $$n$addr$3 + (i32.const 0) + ) + (set_local $$s$2 + (get_local $$w$0$lcssa) + ) + (br $label$break$L8) + ) + (block + (set_local $$n$addr$227 + (get_local $$n$addr$1$lcssa) + ) + (set_local $$s$128 + (get_local $$w$0$lcssa) + ) + ) + ) + ) + ) + (loop $while-in5 + (block $while-out4 + (set_local $$7 + (i32.load8_s + (get_local $$s$128) + ) + ) + (set_local $$cmp28 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$7) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $$5) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $$cmp28) + (block + (set_local $$n$addr$3 + (get_local $$n$addr$227) + ) + (set_local $$s$2 + (get_local $$s$128) + ) + (br $label$break$L8) + ) + ) + (set_local $$incdec$ptr33 + (i32.add + (get_local $$s$128) + (i32.const 1) + ) + ) + (set_local $$dec34 + (i32.add + (get_local $$n$addr$227) + (i32.const -1) + ) + ) + (set_local $$tobool25 + (i32.eq + (get_local $$dec34) + (i32.const 0) + ) + ) + (if + (get_local $$tobool25) + (block + (set_local $$n$addr$3 + (i32.const 0) + ) + (set_local $$s$2 + (get_local $$incdec$ptr33) + ) + (br $while-out4) + ) + (block + (set_local $$n$addr$227 + (get_local $$dec34) + ) + (set_local $$s$128 + (get_local $$incdec$ptr33) + ) + ) + ) + (br $while-in5) + ) + ) + ) + ) + ) + ) + ) + (set_local $$tobool36 + (i32.ne + (get_local $$n$addr$3) + (i32.const 0) + ) + ) + (set_local $$cond + (if (result i32) + (get_local $$tobool36) + (get_local $$s$2) + (i32.const 0) + ) + ) + (return + (get_local $$cond) + ) + ) + (func $___syscall_ret (; 46 ;) (param $$r i32) (result i32) + (local $$call i32) + (local $$cmp i32) + (local $$retval$0 i32) + (local $$sub i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$cmp + (i32.gt_u + (get_local $$r) + (i32.const -4096) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $$sub + (i32.sub + (i32.const 0) + (get_local $$r) + ) + ) + (set_local $$call + (call $___errno_location) + ) + (i32.store + (get_local $$call) + (get_local $$sub) + ) + (set_local $$retval$0 + (i32.const -1) + ) + ) + (set_local $$retval$0 + (get_local $$r) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $___fflush_unlocked (; 47 ;) (param $$f i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$cmp i32) + (local $$cmp4 i32) + (local $$rend i32) + (local $$retval$0 i32) + (local $$rpos i32) + (local $$seek i32) + (local $$sub$ptr$lhs$cast i32) + (local $$sub$ptr$rhs$cast i32) + (local $$sub$ptr$sub i32) + (local $$tobool i32) + (local $$wbase i32) + (local $$wend i32) + (local $$wpos i32) + (local $$write i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$wpos + (i32.add + (get_local $$f) + (i32.const 20) + ) + ) + (set_local $$0 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$wbase + (i32.add + (get_local $$f) + (i32.const 28) + ) + ) + (set_local $$1 + (i32.load + (get_local $$wbase) + ) + ) + (set_local $$cmp + (i32.gt_u + (get_local $$0) + (get_local $$1) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $$write + (i32.add + (get_local $$f) + (i32.const 36) + ) + ) + (set_local $$2 + (i32.load + (get_local $$write) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $$f) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (get_local $$2) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (set_local $$3 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$3) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (set_local $$retval$0 + (i32.const -1) + ) + (set_local $label + (i32.const 3) + ) + ) + ) + (set_local $label + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 3) + ) + (block + (set_local $$rpos + (i32.add + (get_local $$f) + (i32.const 4) + ) + ) + (set_local $$4 + (i32.load + (get_local $$rpos) + ) + ) + (set_local $$rend + (i32.add + (get_local $$f) + (i32.const 8) + ) + ) + (set_local $$5 + (i32.load + (get_local $$rend) + ) + ) + (set_local $$cmp4 + (i32.lt_u + (get_local $$4) + (get_local $$5) + ) + ) + (if + (get_local $$cmp4) + (block + (set_local $$seek + (i32.add + (get_local $$f) + (i32.const 40) + ) + ) + (set_local $$6 + (i32.load + (get_local $$seek) + ) + ) + (set_local $$sub$ptr$lhs$cast + (get_local $$4) + ) + (set_local $$sub$ptr$rhs$cast + (get_local $$5) + ) + (set_local $$sub$ptr$sub + (i32.sub + (get_local $$sub$ptr$lhs$cast) + (get_local $$sub$ptr$rhs$cast) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $$f) + (get_local $$sub$ptr$sub) + (i32.const 1) + (i32.add + (i32.and + (get_local $$6) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (set_local $$wend + (i32.add + (get_local $$f) + (i32.const 16) + ) + ) + (i32.store + (get_local $$wend) + (i32.const 0) + ) + (i32.store + (get_local $$wbase) + (i32.const 0) + ) + (i32.store + (get_local $$wpos) + (i32.const 0) + ) + (i32.store + (get_local $$rend) + (i32.const 0) + ) + (i32.store + (get_local $$rpos) + (i32.const 0) + ) + (set_local $$retval$0 + (i32.const 0) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_cleanup (; 48 ;) (param $$p i32) + (local $$0 i32) + (local $$lockcount i32) + (local $$tobool i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$lockcount + (i32.add + (get_local $$p) + (i32.const 68) + ) + ) + (set_local $$0 + (i32.load + (get_local $$lockcount) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$0) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (call $___unlockfile + (get_local $$p) + ) + ) + (return) + ) + (func $_printf_core (; 49 ;) (param $$f i32) (param $$fmt i32) (param $$ap i32) (param $$nl_arg i32) (param $$nl_type i32) (result i32) + (local $$$ i32) + (local $$$$i i32) + (local $$$396$i f64) + (local $$$404$i f64) + (local $$$l10n$0 i32) + (local $$$lcssa i32) + (local $$$p$i i32) + (local $$$p$inc468$i i32) + (local $$$pr$i i32) + (local $$$pr477$i i32) + (local $$$pre i32) + (local $$$pre$i i32) + (local $$$pre357 i32) + (local $$$pre564$i i32) + (local $$$pre566$i i32) + (local $$$pre567$i i32) + (local $$$sub514$i i32) + (local $$$sub562$i i32) + (local $$0 i32) + (local $$1 i32) + (local $$10 i32) + (local $$100 i32) + (local $$101 i32) + (local $$102 i32) + (local $$103 i32) + (local $$104 i32) + (local $$105 i32) + (local $$106 i32) + (local $$107 i32) + (local $$108 i32) + (local $$109 i32) + (local $$11 i32) + (local $$110 i32) + (local $$111 i32) + (local $$112 i32) + (local $$113 i32) + (local $$114 i32) + (local $$115 i32) + (local $$116 i32) + (local $$117 i32) + (local $$118 i32) + (local $$119 i32) + (local $$12 i32) + (local $$120 i32) + (local $$121 i32) + (local $$122 i32) + (local $$123 i32) + (local $$124 i32) + (local $$125 i32) + (local $$126 i32) + (local $$127 i32) + (local $$128 i32) + (local $$129 i32) + (local $$13 i32) + (local $$130 i32) + (local $$131 i32) + (local $$132 i32) + (local $$133 i32) + (local $$134 i32) + (local $$135 i32) + (local $$136 i32) + (local $$137 i32) + (local $$138 i32) + (local $$139 i32) + (local $$14 i32) + (local $$140 i32) + (local $$141 i32) + (local $$142 i32) + (local $$143 i32) + (local $$144 i32) + (local $$145 i32) + (local $$146 i32) + (local $$147 i32) + (local $$148 i32) + (local $$149 i32) + (local $$15 i32) + (local $$150 i32) + (local $$151 i32) + (local $$152 i32) + (local $$153 i32) + (local $$154 i32) + (local $$155 i32) + (local $$156 i32) + (local $$157 i32) + (local $$158 i32) + (local $$159 i32) + (local $$16 i32) + (local $$160 i32) + (local $$161 i32) + (local $$162 i32) + (local $$163 i32) + (local $$164 i32) + (local $$165 i32) + (local $$166 i32) + (local $$167 i32) + (local $$168 i32) + (local $$169 i32) + (local $$17 i32) + (local $$170 i32) + (local $$171 i32) + (local $$172 i32) + (local $$173 i32) + (local $$174 i32) + (local $$175 i32) + (local $$176 i32) + (local $$177 i32) + (local $$178 i32) + (local $$179 i32) + (local $$18 i32) + (local $$180 i32) + (local $$181 f64) + (local $$182 i32) + (local $$183 i32) + (local $$184 i32) + (local $$185 i32) + (local $$186 i32) + (local $$187 i32) + (local $$188 i32) + (local $$189 i32) + (local $$19 i32) + (local $$190 i32) + (local $$191 i32) + (local $$192 i32) + (local $$193 i32) + (local $$194 i32) + (local $$195 i32) + (local $$196 i32) + (local $$197 i32) + (local $$198 i32) + (local $$199 i32) + (local $$2 i32) + (local $$20 i32) + (local $$200 i32) + (local $$201 i32) + (local $$202 i32) + (local $$203 i32) + (local $$204 i32) + (local $$205 i32) + (local $$206 i32) + (local $$207 i32) + (local $$208 i32) + (local $$209 i32) + (local $$21 i32) + (local $$210 i32) + (local $$211 i32) + (local $$212 i32) + (local $$213 i32) + (local $$214 i32) + (local $$215 i32) + (local $$216 i32) + (local $$217 i32) + (local $$218 i32) + (local $$219 i32) + (local $$22 i32) + (local $$220 i32) + (local $$221 i32) + (local $$222 i32) + (local $$223 i32) + (local $$224 i32) + (local $$225 i32) + (local $$226 i32) + (local $$227 i32) + (local $$228 i32) + (local $$229 i32) + (local $$23 i32) + (local $$230 i32) + (local $$231 i32) + (local $$232 i32) + (local $$233 i32) + (local $$234 i32) + (local $$235 i32) + (local $$236 i32) + (local $$237 i32) + (local $$238 i32) + (local $$239 i32) + (local $$24 i32) + (local $$240 i32) + (local $$241 i32) + (local $$242 i32) + (local $$243 i32) + (local $$244 i32) + (local $$245 i32) + (local $$246 i32) + (local $$247 i32) + (local $$248 i32) + (local $$249 i32) + (local $$25 i32) + (local $$250 i32) + (local $$251 i32) + (local $$252 i32) + (local $$253 i32) + (local $$254 i32) + (local $$255 i32) + (local $$256 i32) + (local $$257 i32) + (local $$258 i32) + (local $$259 i32) + (local $$26 i32) + (local $$260 i32) + (local $$261 i32) + (local $$262 i32) + (local $$263 i32) + (local $$264 i32) + (local $$265 i32) + (local $$266 i32) + (local $$267 i32) + (local $$268 i32) + (local $$27 i32) + (local $$28 i32) + (local $$29 i32) + (local $$3 i32) + (local $$30 i32) + (local $$31 i32) + (local $$32 i32) + (local $$33 i32) + (local $$34 i32) + (local $$35 i32) + (local $$36 i32) + (local $$37 i32) + (local $$38 i32) + (local $$39 i32) + (local $$4 i32) + (local $$40 i32) + (local $$41 i32) + (local $$42 i32) + (local $$43 i32) + (local $$44 i32) + (local $$45 i32) + (local $$46 i32) + (local $$47 i32) + (local $$48 i32) + (local $$49 i32) + (local $$5 i32) + (local $$50 i32) + (local $$51 i32) + (local $$52 i32) + (local $$53 i32) + (local $$54 i32) + (local $$55 i32) + (local $$56 i32) + (local $$57 i32) + (local $$58 i32) + (local $$59 i32) + (local $$6 i32) + (local $$60 i32) + (local $$61 i32) + (local $$62 i32) + (local $$63 i32) + (local $$64 i32) + (local $$65 i32) + (local $$66 i32) + (local $$67 i32) + (local $$68 i32) + (local $$69 i32) + (local $$7 i32) + (local $$70 i32) + (local $$71 i32) + (local $$72 i32) + (local $$73 i32) + (local $$74 i32) + (local $$75 i32) + (local $$76 i32) + (local $$77 i32) + (local $$78 i32) + (local $$79 i32) + (local $$8 i32) + (local $$80 i32) + (local $$81 i32) + (local $$82 i32) + (local $$83 i32) + (local $$84 i32) + (local $$85 i32) + (local $$86 i32) + (local $$87 i32) + (local $$88 i32) + (local $$89 i32) + (local $$9 i32) + (local $$90 i32) + (local $$91 i32) + (local $$92 i32) + (local $$93 i32) + (local $$94 i32) + (local $$95 i32) + (local $$96 i32) + (local $$97 i32) + (local $$98 i32) + (local $$99 i32) + (local $$a$0 i32) + (local $$a$1 i32) + (local $$a$1$lcssa$i i32) + (local $$a$1549$i i32) + (local $$a$2 i32) + (local $$a$2$ph$i i32) + (local $$a$3$lcssa$i i32) + (local $$a$3539$i i32) + (local $$a$5$lcssa$i i32) + (local $$a$5521$i i32) + (local $$a$6$i i32) + (local $$a$8$i i32) + (local $$a$9$ph$i i32) + (local $$add i32) + (local $$add$i i32) + (local $$add$i$203 i32) + (local $$add$i$239 i32) + (local $$add$i$lcssa i32) + (local $$add$ptr i32) + (local $$add$ptr139 i32) + (local $$add$ptr205 i32) + (local $$add$ptr213$i i32) + (local $$add$ptr257 i32) + (local $$add$ptr311$i i32) + (local $$add$ptr311$z$4$i i32) + (local $$add$ptr340 i32) + (local $$add$ptr354$i i32) + (local $$add$ptr358$i i32) + (local $$add$ptr359 i32) + (local $$add$ptr373$i i32) + (local $$add$ptr43 i32) + (local $$add$ptr43$arrayidx31 i32) + (local $$add$ptr442$i i32) + (local $$add$ptr442$z$3$i i32) + (local $$add$ptr473 i32) + (local $$add$ptr65$i i32) + (local $$add$ptr671$i i32) + (local $$add$ptr742$i i32) + (local $$add$ptr88 i32) + (local $$add113$i i32) + (local $$add150$i i32) + (local $$add154$i i32) + (local $$add163$i i32) + (local $$add165$i i32) + (local $$add269 i32) + (local $$add269$p$0 i32) + (local $$add273$i i32) + (local $$add275$i i32) + (local $$add284$i i32) + (local $$add313$i i32) + (local $$add322 i32) + (local $$add355$i i32) + (local $$add395 i32) + (local $$add410$i f64) + (local $$add412 i32) + (local $$add414$i i32) + (local $$add441 i32) + (local $$add477$neg$i i32) + (local $$add561$i i32) + (local $$add608$i i32) + (local $$add612$i i32) + (local $$add620$i i32) + (local $$add653$i i32) + (local $$add67$i i32) + (local $$add737$i i32) + (local $$add810$i i32) + (local $$add87$i f64) + (local $$add90$i f64) + (local $$and i32) + (local $$and$i i32) + (local $$and$i$216 i32) + (local $$and$i$231 i32) + (local $$and$i$238 i32) + (local $$and$i$244 i32) + (local $$and$i$406$i i32) + (local $$and$i$412$i i32) + (local $$and$i$418$i i32) + (local $$and$i$424$i i32) + (local $$and$i$430$i i32) + (local $$and$i$436$i i32) + (local $$and$i$442$i i32) + (local $$and$i$448$i i32) + (local $$and$i$454$i i32) + (local $$and$i$460$i i32) + (local $$and$i$466$i i32) + (local $$and$i$472$i i32) + (local $$and$i$i i32) + (local $$and12$i i32) + (local $$and134$i i32) + (local $$and210 i32) + (local $$and214 i32) + (local $$and216 i32) + (local $$and219 i32) + (local $$and249 i32) + (local $$and254 i32) + (local $$and263 i32) + (local $$and282$i i32) + (local $$and289 i32) + (local $$and294 i32) + (local $$and309 i32) + (local $$and309$fl$4 i32) + (local $$and36$i i32) + (local $$and379$i i32) + (local $$and483$i i32) + (local $$and610$pre$phi$iZ2D i32) + (local $$and62$i i32) + (local $$arg i32) + (local $$arglist_current i32) + (local $$arglist_current2 i32) + (local $$arglist_next i32) + (local $$arglist_next3 i32) + (local $$argpos$0 i32) + (local $$arraydecay208$add$ptr213$i i32) + (local $$arrayidx$i i32) + (local $$arrayidx$i$236 i32) + (local $$arrayidx114 i32) + (local $$arrayidx117$i i32) + (local $$arrayidx119 i32) + (local $$arrayidx124 i32) + (local $$arrayidx132 i32) + (local $$arrayidx16 i32) + (local $$arrayidx173 i32) + (local $$arrayidx192 i32) + (local $$arrayidx251$i i32) + (local $$arrayidx31 i32) + (local $$arrayidx35 i32) + (local $$arrayidx370 i32) + (local $$arrayidx453$i i32) + (local $$arrayidx469 i32) + (local $$arrayidx481 i32) + (local $$arrayidx489$i i32) + (local $$arrayidx68 i32) + (local $$arrayidx73 i32) + (local $$arrayidx81 i32) + (local $$big$i i32) + (local $$buf i32) + (local $$buf$i i32) + (local $$call i32) + (local $$call344 i32) + (local $$call345 i32) + (local $$call356 i32) + (local $$call384 i32) + (local $$call411 i32) + (local $$call55$i f64) + (local $$carry$0544$i i32) + (local $$carry262$0535$i i32) + (local $$cmp i32) + (local $$cmp1 i32) + (local $$cmp103$i i32) + (local $$cmp105 i32) + (local $$cmp111 i32) + (local $$cmp116 i32) + (local $$cmp126 i32) + (local $$cmp127$i i32) + (local $$cmp13 i32) + (local $$cmp147$i i32) + (local $$cmp165 i32) + (local $$cmp176 i32) + (local $$cmp18 i32) + (local $$cmp181 i32) + (local $$cmp184 i32) + (local $$cmp188$i i32) + (local $$cmp196$i i32) + (local $$cmp205$i i32) + (local $$cmp211 i32) + (local $$cmp225$547$i i32) + (local $$cmp225$i i32) + (local $$cmp228$i i32) + (local $$cmp235$543$i i32) + (local $$cmp235$i i32) + (local $$cmp240 i32) + (local $$cmp249$i i32) + (local $$cmp259$537$i i32) + (local $$cmp259$i i32) + (local $$cmp265$i i32) + (local $$cmp270 i32) + (local $$cmp277$533$i i32) + (local $$cmp277$i i32) + (local $$cmp299$i i32) + (local $$cmp306 i32) + (local $$cmp308$i i32) + (local $$cmp315$i i32) + (local $$cmp323 i32) + (local $$cmp324$529$i i32) + (local $$cmp324$i i32) + (local $$cmp333$i i32) + (local $$cmp338$i i32) + (local $$cmp350$i i32) + (local $$cmp363$525$i i32) + (local $$cmp37 i32) + (local $$cmp374$i i32) + (local $$cmp377 i32) + (local $$cmp377$314 i32) + (local $$cmp38$i i32) + (local $$cmp385 i32) + (local $$cmp385$i i32) + (local $$cmp390 i32) + (local $$cmp390$i i32) + (local $$cmp397 i32) + (local $$cmp403$i i32) + (local $$cmp404 i32) + (local $$cmp404$324 i32) + (local $$cmp411$i i32) + (local $$cmp413 i32) + (local $$cmp416$519$i i32) + (local $$cmp416$i i32) + (local $$cmp420$i i32) + (local $$cmp421 i32) + (local $$cmp433$515$i i32) + (local $$cmp433$i i32) + (local $$cmp434 i32) + (local $$cmp442 i32) + (local $$cmp443$i i32) + (local $$cmp450$i i32) + (local $$cmp450$lcssa$i i32) + (local $$cmp466 i32) + (local $$cmp470$i i32) + (local $$cmp473$i i32) + (local $$cmp478 i32) + (local $$cmp478$295 i32) + (local $$cmp48$i i32) + (local $$cmp495$511$i i32) + (local $$cmp495$i i32) + (local $$cmp50 i32) + (local $$cmp50$308 i32) + (local $$cmp505$i i32) + (local $$cmp515$i i32) + (local $$cmp528$i i32) + (local $$cmp563$i i32) + (local $$cmp577$i i32) + (local $$cmp59$i i32) + (local $$cmp614$i i32) + (local $$cmp617$i i32) + (local $$cmp623$i i32) + (local $$cmp636$506$i i32) + (local $$cmp636$i i32) + (local $$cmp65 i32) + (local $$cmp660$i i32) + (local $$cmp665$i i32) + (local $$cmp673$i i32) + (local $$cmp678$491$i i32) + (local $$cmp678$i i32) + (local $$cmp686$i i32) + (local $$cmp707$486$i i32) + (local $$cmp707$i i32) + (local $$cmp710$487$i i32) + (local $$cmp710$i i32) + (local $$cmp722$483$i i32) + (local $$cmp722$i i32) + (local $$cmp727$i i32) + (local $$cmp745$i i32) + (local $$cmp748$499$i i32) + (local $$cmp748$i i32) + (local $$cmp75 i32) + (local $$cmp760$i i32) + (local $$cmp765$i i32) + (local $$cmp770$495$i i32) + (local $$cmp770$i i32) + (local $$cmp777$i i32) + (local $$cmp790$i i32) + (local $$cmp818$i i32) + (local $$cmp82$i i32) + (local $$cmp94$i i32) + (local $$cmp97 i32) + (local $$cnt$0 i32) + (local $$cnt$1 i32) + (local $$cnt$1$lcssa i32) + (local $$cond$i i32) + (local $$cond100$i i32) + (local $$cond233$i i32) + (local $$cond245 i32) + (local $$cond271$i i32) + (local $$cond304$i i32) + (local $$cond354 i32) + (local $$cond426 i32) + (local $$cond43$i i32) + (local $$cond53$i i32) + (local $$cond629$i i32) + (local $$cond732$i i32) + (local $$cond800$i i32) + (local $$conv$4$i i32) + (local $$conv$4$i$197 i32) + (local $$conv$4$i$211 i32) + (local $$conv$i i32) + (local $$conv$i$205 i32) + (local $$conv1$i i32) + (local $$conv111$i i32) + (local $$conv114$i i32) + (local $$conv116$i i32) + (local $$conv118$393$i i32) + (local $$conv120 i32) + (local $$conv121$i i32) + (local $$conv123$i f64) + (local $$conv134 i32) + (local $$conv163 i32) + (local $$conv174 i32) + (local $$conv174$lcssa i32) + (local $$conv207 i32) + (local $$conv216$i i32) + (local $$conv218$i f64) + (local $$conv229 i32) + (local $$conv232 i32) + (local $$conv242$i$lcssa i32) + (local $$conv32 i32) + (local $$conv48 i32) + (local $$conv48$307 i32) + (local $$conv48311 i32) + (local $$conv58 i32) + (local $$conv644$i i32) + (local $$conv646$i i32) + (local $$conv69 i32) + (local $$conv83 i32) + (local $$d$0$542$i i32) + (local $$d$0$i i32) + (local $$d$0545$i i32) + (local $$d$1534$i i32) + (local $$d$2$lcssa$i i32) + (local $$d$2520$i i32) + (local $$d$4$i i32) + (local $$d$5494$i i32) + (local $$d$6488$i i32) + (local $$d$7500$i i32) + (local $$dec$i i32) + (local $$dec476$i i32) + (local $$dec481$i i32) + (local $$dec78$i i32) + (local $$div274$i i32) + (local $$div356$i i32) + (local $$div378$i i32) + (local $$div384$i i32) + (local $$e$0531$i i32) + (local $$e$1$i i32) + (local $$e$2517$i i32) + (local $$e$4$i i32) + (local $$e$5$ph$i i32) + (local $$e2$i i32) + (local $$ebuf0$i i32) + (local $$estr$0$i i32) + (local $$estr$1$lcssa$i i32) + (local $$estr$1507$i i32) + (local $$estr$2$i i32) + (local $$exitcond$i i32) + (local $$expanded i32) + (local $$expanded10 i32) + (local $$expanded11 i32) + (local $$expanded13 i32) + (local $$expanded14 i32) + (local $$expanded15 i32) + (local $$expanded4 i32) + (local $$expanded6 i32) + (local $$expanded7 i32) + (local $$expanded8 i32) + (local $$fl$0284 i32) + (local $$fl$0310 i32) + (local $$fl$1 i32) + (local $$fl$1$and219 i32) + (local $$fl$3 i32) + (local $$fl$4 i32) + (local $$fl$6 i32) + (local $$i$0$lcssa i32) + (local $$i$0$lcssa368 i32) + (local $$i$0316 i32) + (local $$i$0530$i i32) + (local $$i$07$i i32) + (local $$i$07$i$201 i32) + (local $$i$1$lcssa$i i32) + (local $$i$1325 i32) + (local $$i$1526$i i32) + (local $$i$2299 i32) + (local $$i$2299$lcssa i32) + (local $$i$2516$i i32) + (local $$i$3296 i32) + (local $$i$3512$i i32) + (local $$i137 i32) + (local $$i86 i32) + (local $$idxprom$i i32) + (local $$inc i32) + (local $$inc$i i32) + (local $$inc425$i i32) + (local $$inc438$i i32) + (local $$inc468$i i32) + (local $$inc488 i32) + (local $$inc500$i i32) + (local $$incdec$ptr i32) + (local $$incdec$ptr$i i32) + (local $$incdec$ptr$i$204 i32) + (local $$incdec$ptr$i$212 i32) + (local $$incdec$ptr$i$212$lcssa i32) + (local $$incdec$ptr$i$225 i32) + (local $$incdec$ptr$i$lcssa i32) + (local $$incdec$ptr106$i i32) + (local $$incdec$ptr112$i i32) + (local $$incdec$ptr115$i i32) + (local $$incdec$ptr122$i i32) + (local $$incdec$ptr137$i i32) + (local $$incdec$ptr169 i32) + (local $$incdec$ptr169$lcssa i32) + (local $$incdec$ptr169269 i32) + (local $$incdec$ptr169271 i32) + (local $$incdec$ptr169271$lcssa414 i32) + (local $$incdec$ptr169272 i32) + (local $$incdec$ptr169274 i32) + (local $$incdec$ptr169275 i32) + (local $$incdec$ptr169276$lcssa i32) + (local $$incdec$ptr169276301 i32) + (local $$incdec$ptr217$i i32) + (local $$incdec$ptr217$i$lcssa i32) + (local $$incdec$ptr23 i32) + (local $$incdec$ptr246$i i32) + (local $$incdec$ptr288$i i32) + (local $$incdec$ptr292$570$i i32) + (local $$incdec$ptr292$a$3$571$i i32) + (local $$incdec$ptr292$a$3$i i32) + (local $$incdec$ptr292$a$3573$i i32) + (local $$incdec$ptr292$i i32) + (local $$incdec$ptr296$i i32) + (local $$incdec$ptr383 i32) + (local $$incdec$ptr410 i32) + (local $$incdec$ptr419$i i32) + (local $$incdec$ptr423$i i32) + (local $$incdec$ptr62 i32) + (local $$incdec$ptr639$i i32) + (local $$incdec$ptr645$i i32) + (local $$incdec$ptr647$i i32) + (local $$incdec$ptr681$i i32) + (local $$incdec$ptr689$i i32) + (local $$incdec$ptr698$i i32) + (local $$incdec$ptr698$i$lcssa i32) + (local $$incdec$ptr725$i i32) + (local $$incdec$ptr734$i i32) + (local $$incdec$ptr773$i i32) + (local $$incdec$ptr776$i i32) + (local $$incdec$ptr808$i i32) + (local $$isdigit i32) + (local $$isdigit$6$i i32) + (local $$isdigit$6$i$199 i32) + (local $$isdigit$i i32) + (local $$isdigit$i$207 i32) + (local $$isdigit188 i32) + (local $$isdigit190 i32) + (local $$isdigittmp i32) + (local $$isdigittmp$ i32) + (local $$isdigittmp$5$i i32) + (local $$isdigittmp$5$i$198 i32) + (local $$isdigittmp$i i32) + (local $$isdigittmp$i$206 i32) + (local $$isdigittmp187 i32) + (local $$isdigittmp189 i32) + (local $$isdigittmp8$i i32) + (local $$isdigittmp8$i$200 i32) + (local $$j$0$524$i i32) + (local $$j$0$i i32) + (local $$j$0527$i i32) + (local $$j$1513$i i32) + (local $$j$2$i i32) + (local $$l$0 i32) + (local $$l$0$i i32) + (local $$l$1$i i32) + (local $$l$1315 i32) + (local $$l$2 i32) + (local $$l10n$0 i32) + (local $$l10n$0$lcssa i32) + (local $$l10n$0$phi i32) + (local $$l10n$1 i32) + (local $$l10n$2 i32) + (local $$l10n$3 i32) + (local $$land$ext$neg$i i32) + (local $$lnot$ext i32) + (local $$lnot$i i32) + (local $$lnot455$i i32) + (local $$lnot483 i32) + (local $$lor$ext$i i32) + (local $$mb i32) + (local $$mul$i i32) + (local $$mul$i$202 i32) + (local $$mul$i$240 f64) + (local $$mul125$i f64) + (local $$mul202$i f64) + (local $$mul220$i f64) + (local $$mul286$i i32) + (local $$mul286$i$lcssa i32) + (local $$mul322$i i32) + (local $$mul328$i i32) + (local $$mul335$i i32) + (local $$mul349$i i32) + (local $$mul367$i i32) + (local $$mul406$i f64) + (local $$mul407$i f64) + (local $$mul431$i i32) + (local $$mul437$i i32) + (local $$mul499$i i32) + (local $$mul513$i i32) + (local $$mul80$i f64) + (local $$mul80$i$lcssa f64) + (local $$notlhs$i i32) + (local $$notrhs$i i32) + (local $$or i32) + (local $$or$cond i32) + (local $$or$cond$i i32) + (local $$or$cond1$not$i i32) + (local $$or$cond192 i32) + (local $$or$cond193 i32) + (local $$or$cond195 i32) + (local $$or$cond2$i i32) + (local $$or$cond384 i32) + (local $$or$cond395$i i32) + (local $$or$cond397$i i32) + (local $$or$cond401$i i32) + (local $$or$i i32) + (local $$or$i$241 i32) + (local $$or100 i32) + (local $$or120$i i32) + (local $$or246 i32) + (local $$or504$i i32) + (local $$or613$i i32) + (local $$p$0 i32) + (local $$p$1 i32) + (local $$p$2 i32) + (local $$p$2$add322 i32) + (local $$p$3 i32) + (local $$p$4365 i32) + (local $$p$5 i32) + (local $$p$addr$2$$sub514398$i i32) + (local $$p$addr$2$$sub562399$i i32) + (local $$p$addr$2$i i32) + (local $$p$addr$3$i i32) + (local $$p$addr$4$lcssa$i i32) + (local $$p$addr$4489$i i32) + (local $$p$addr$5$lcssa$i i32) + (local $$p$addr$5501$i i32) + (local $$pl$0 i32) + (local $$pl$0$i i32) + (local $$pl$1 i32) + (local $$pl$1$i i32) + (local $$pl$2 i32) + (local $$prefix$0 i32) + (local $$prefix$0$add$ptr65$i i32) + (local $$prefix$0$i i32) + (local $$prefix$1 i32) + (local $$prefix$2 i32) + (local $$r$0$a$9$i i32) + (local $$re$1482$i i32) + (local $$rem360$i i32) + (local $$rem370$i i32) + (local $$rem494$510$i i32) + (local $$rem494$i i32) + (local $$retval$0 i32) + (local $$retval$0$i i32) + (local $$round$0481$i f64) + (local $$round377$1$i f64) + (local $$s$0$i i32) + (local $$s$1$i i32) + (local $$s$1$i$lcssa i32) + (local $$s$addr$0$lcssa$i$229 i32) + (local $$s$addr$06$i i32) + (local $$s$addr$06$i$221 i32) + (local $$s35$0$i i32) + (local $$s668$0492$i i32) + (local $$s668$1$i i32) + (local $$s715$0$lcssa$i i32) + (local $$s715$0484$i i32) + (local $$s753$0$i i32) + (local $$s753$1496$i i32) + (local $$s753$2$i i32) + (local $$shl i32) + (local $$shl280$i i32) + (local $$shl60 i32) + (local $$shr i32) + (local $$shr283$i i32) + (local $$shr285$i i32) + (local $$small$0$i f64) + (local $$small$1$i f64) + (local $$st$0 i32) + (local $$st$0$lcssa415 i32) + (local $$storemerge i32) + (local $$storemerge$186282 i32) + (local $$storemerge$186309 i32) + (local $$storemerge$191 i32) + (local $$sub i32) + (local $$sub$i f64) + (local $$sub$ptr$div$i i32) + (local $$sub$ptr$div321$i i32) + (local $$sub$ptr$div347$i i32) + (local $$sub$ptr$div430$i i32) + (local $$sub$ptr$div511$i i32) + (local $$sub$ptr$lhs$cast i32) + (local $$sub$ptr$lhs$cast$i i32) + (local $$sub$ptr$lhs$cast160$i i32) + (local $$sub$ptr$lhs$cast305$i i32) + (local $$sub$ptr$lhs$cast317 i32) + (local $$sub$ptr$lhs$cast344$i i32) + (local $$sub$ptr$lhs$cast361 i32) + (local $$sub$ptr$lhs$cast431 i32) + (local $$sub$ptr$lhs$cast508$i i32) + (local $$sub$ptr$lhs$cast694$i i32) + (local $$sub$ptr$rhs$cast i32) + (local $$sub$ptr$rhs$cast$i i32) + (local $$sub$ptr$rhs$cast152$i i32) + (local $$sub$ptr$rhs$cast161$i i32) + (local $$sub$ptr$rhs$cast174$i i32) + (local $$sub$ptr$rhs$cast267 i32) + (local $$sub$ptr$rhs$cast306$i i32) + (local $$sub$ptr$rhs$cast318 i32) + (local $$sub$ptr$rhs$cast319$i i32) + (local $$sub$ptr$rhs$cast345$i i32) + (local $$sub$ptr$rhs$cast362 i32) + (local $$sub$ptr$rhs$cast428$i i32) + (local $$sub$ptr$rhs$cast432 i32) + (local $$sub$ptr$rhs$cast634$504$i i32) + (local $$sub$ptr$rhs$cast634$i i32) + (local $$sub$ptr$rhs$cast649$i i32) + (local $$sub$ptr$rhs$cast695$i i32) + (local $$sub$ptr$rhs$cast788$i i32) + (local $$sub$ptr$rhs$cast812$i i32) + (local $$sub$ptr$sub i32) + (local $$sub$ptr$sub$i i32) + (local $$sub$ptr$sub145$i i32) + (local $$sub$ptr$sub153$i i32) + (local $$sub$ptr$sub159$i i32) + (local $$sub$ptr$sub162$i i32) + (local $$sub$ptr$sub172$i i32) + (local $$sub$ptr$sub175$i i32) + (local $$sub$ptr$sub268 i32) + (local $$sub$ptr$sub307$i i32) + (local $$sub$ptr$sub319 i32) + (local $$sub$ptr$sub320$i i32) + (local $$sub$ptr$sub346$i i32) + (local $$sub$ptr$sub363 i32) + (local $$sub$ptr$sub429$i i32) + (local $$sub$ptr$sub433 i32) + (local $$sub$ptr$sub433$p$5 i32) + (local $$sub$ptr$sub510$i i32) + (local $$sub$ptr$sub635$505$i i32) + (local $$sub$ptr$sub635$i i32) + (local $$sub$ptr$sub650$i i32) + (local $$sub$ptr$sub650$pn$i i32) + (local $$sub$ptr$sub696$i i32) + (local $$sub$ptr$sub789$i i32) + (local $$sub$ptr$sub813$i i32) + (local $$sub101 i32) + (local $$sub124$i f64) + (local $$sub135 i32) + (local $$sub146$i i32) + (local $$sub164 i32) + (local $$sub175 i32) + (local $$sub181$i i32) + (local $$sub203$i i32) + (local $$sub219$i f64) + (local $$sub256$i i32) + (local $$sub264$i i32) + (local $$sub281$i i32) + (local $$sub336$i i32) + (local $$sub343$i i32) + (local $$sub357$i i32) + (local $$sub389 i32) + (local $$sub409$i i32) + (local $$sub478$i i32) + (local $$sub480$i i32) + (local $$sub514$i i32) + (local $$sub54 i32) + (local $$sub562$i i32) + (local $$sub59 i32) + (local $$sub626$le$i i32) + (local $$sub735$i i32) + (local $$sub74$i i32) + (local $$sub806$i i32) + (local $$sub84 i32) + (local $$sub85$i f64) + (local $$sub86$i f64) + (local $$sub88$i f64) + (local $$sub91$i f64) + (local $$sub97$i i32) + (local $$sum i32) + (local $$t$0 i32) + (local $$t$1 i32) + (local $$t$addr$0$i i32) + (local $$t$addr$1$i i32) + (local $$tobool i32) + (local $$tobool$i i32) + (local $$tobool$i$217 i32) + (local $$tobool$i$232 i32) + (local $$tobool$i$245 i32) + (local $$tobool$i$407$i i32) + (local $$tobool$i$413$i i32) + (local $$tobool$i$419$i i32) + (local $$tobool$i$425$i i32) + (local $$tobool$i$431$i i32) + (local $$tobool$i$437$i i32) + (local $$tobool$i$443$i i32) + (local $$tobool$i$449$i i32) + (local $$tobool$i$455$i i32) + (local $$tobool$i$461$i i32) + (local $$tobool$i$467$i i32) + (local $$tobool$i$473$i i32) + (local $$tobool$i$i i32) + (local $$tobool13$i i32) + (local $$tobool135$i i32) + (local $$tobool139$i i32) + (local $$tobool140$i i32) + (local $$tobool141 i32) + (local $$tobool178 i32) + (local $$tobool208 i32) + (local $$tobool217 i32) + (local $$tobool222$i i32) + (local $$tobool244$i i32) + (local $$tobool25 i32) + (local $$tobool255 i32) + (local $$tobool264 i32) + (local $$tobool28 i32) + (local $$tobool290 i32) + (local $$tobool290$569$i i32) + (local $$tobool290$i i32) + (local $$tobool294$i i32) + (local $$tobool295 i32) + (local $$tobool314 i32) + (local $$tobool341$i i32) + (local $$tobool349 i32) + (local $$tobool357 i32) + (local $$tobool37$i i32) + (local $$tobool371$i i32) + (local $$tobool380 i32) + (local $$tobool380$i i32) + (local $$tobool400$i i32) + (local $$tobool407 i32) + (local $$tobool459 i32) + (local $$tobool462 i32) + (local $$tobool470 i32) + (local $$tobool484$i i32) + (local $$tobool490$i i32) + (local $$tobool55 i32) + (local $$tobool56$i i32) + (local $$tobool63$i i32) + (local $$tobool76$i i32) + (local $$tobool76552$i i32) + (local $$tobool781$i i32) + (local $$tobool79$i i32) + (local $$tobool9$i i32) + (local $$tobool90 i32) + (local $$w$0 i32) + (local $$w$1 i32) + (local $$w$2 i32) + (local $$w$add165$i i32) + (local $$w$add653$i i32) + (local $$wc i32) + (local $$ws$0317 i32) + (local $$ws$1326 i32) + (local $$xor i32) + (local $$xor$i i32) + (local $$xor167$i i32) + (local $$xor186$i i32) + (local $$xor449 i32) + (local $$xor457 i32) + (local $$xor655$i i32) + (local $$xor816$i i32) + (local $$y$addr$0$i f64) + (local $$y$addr$1$i f64) + (local $$y$addr$2$i f64) + (local $$y$addr$3$i f64) + (local $$y$addr$4$i f64) + (local $$z$0$i i32) + (local $$z$0$lcssa i32) + (local $$z$0302 i32) + (local $$z$1 i32) + (local $$z$1$lcssa$i i32) + (local $$z$1548$i i32) + (local $$z$2 i32) + (local $$z$2$i i32) + (local $$z$2$i$lcssa i32) + (local $$z$3$lcssa$i i32) + (local $$z$3538$i i32) + (local $$z$4$i i32) + (local $$z$7$add$ptr742$i i32) + (local $$z$7$i i32) + (local $$z$7$i$lcssa i32) + (local $$z$7$ph$i i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 624) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$big$i + (i32.add + (get_local $sp) + (i32.const 24) + ) + ) + (set_local $$e2$i + (i32.add + (get_local $sp) + (i32.const 16) + ) + ) + (set_local $$buf$i + (i32.add + (get_local $sp) + (i32.const 588) + ) + ) + (set_local $$ebuf0$i + (i32.add + (get_local $sp) + (i32.const 576) + ) + ) + (set_local $$arg + (get_local $sp) + ) + (set_local $$buf + (i32.add + (get_local $sp) + (i32.const 536) + ) + ) + (set_local $$wc + (i32.add + (get_local $sp) + (i32.const 8) + ) + ) + (set_local $$mb + (i32.add + (get_local $sp) + (i32.const 528) + ) + ) + (set_local $$tobool25 + (i32.ne + (get_local $$f) + (i32.const 0) + ) + ) + (set_local $$add$ptr205 + (i32.add + (get_local $$buf) + (i32.const 40) + ) + ) + (set_local $$sub$ptr$lhs$cast317 + (get_local $$add$ptr205) + ) + (set_local $$add$ptr340 + (i32.add + (get_local $$buf) + (i32.const 39) + ) + ) + (set_local $$arrayidx370 + (i32.add + (get_local $$wc) + (i32.const 4) + ) + ) + (set_local $$arrayidx$i$236 + (i32.add + (get_local $$ebuf0$i) + (i32.const 12) + ) + ) + (set_local $$incdec$ptr106$i + (i32.add + (get_local $$ebuf0$i) + (i32.const 11) + ) + ) + (set_local $$sub$ptr$rhs$cast$i + (get_local $$buf$i) + ) + (set_local $$sub$ptr$lhs$cast160$i + (get_local $$arrayidx$i$236) + ) + (set_local $$sub$ptr$sub159$i + (i32.sub + (get_local $$sub$ptr$lhs$cast160$i) + (get_local $$sub$ptr$rhs$cast$i) + ) + ) + (set_local $$sub$ptr$sub145$i + (i32.sub + (i32.const -2) + (get_local $$sub$ptr$rhs$cast$i) + ) + ) + (set_local $$sub$ptr$sub153$i + (i32.add + (get_local $$sub$ptr$lhs$cast160$i) + (i32.const 2) + ) + ) + (set_local $$add$ptr213$i + (i32.add + (get_local $$big$i) + (i32.const 288) + ) + ) + (set_local $$add$ptr671$i + (i32.add + (get_local $$buf$i) + (i32.const 9) + ) + ) + (set_local $$sub$ptr$lhs$cast694$i + (get_local $$add$ptr671$i) + ) + (set_local $$incdec$ptr689$i + (i32.add + (get_local $$buf$i) + (i32.const 8) + ) + ) + (set_local $$cnt$0 + (i32.const 0) + ) + (set_local $$incdec$ptr169275 + (get_local $$fmt) + ) + (set_local $$l$0 + (i32.const 0) + ) + (set_local $$l10n$0 + (i32.const 0) + ) + (loop $label$continue$L1 + (block $label$break$L1 + (set_local $$cmp + (i32.gt_s + (get_local $$cnt$0) + (i32.const -1) + ) + ) + (block $do-once + (if + (get_local $$cmp) + (block + (set_local $$sub + (i32.sub + (i32.const 2147483647) + (get_local $$cnt$0) + ) + ) + (set_local $$cmp1 + (i32.gt_s + (get_local $$l$0) + (get_local $$sub) + ) + ) + (if + (get_local $$cmp1) + (block + (set_local $$call + (call $___errno_location) + ) + (i32.store + (get_local $$call) + (i32.const 75) + ) + (set_local $$cnt$1 + (i32.const -1) + ) + (br $do-once) + ) + (block + (set_local $$add + (i32.add + (get_local $$l$0) + (get_local $$cnt$0) + ) + ) + (set_local $$cnt$1 + (get_local $$add) + ) + (br $do-once) + ) + ) + ) + (set_local $$cnt$1 + (get_local $$cnt$0) + ) + ) + ) + (set_local $$0 + (i32.load8_s + (get_local $$incdec$ptr169275) + ) + ) + (set_local $$tobool + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$0) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$cnt$1$lcssa + (get_local $$cnt$1) + ) + (set_local $$l10n$0$lcssa + (get_local $$l10n$0) + ) + (set_local $label + (i32.const 242) + ) + (br $label$break$L1) + ) + (block + (set_local $$1 + (get_local $$0) + ) + (set_local $$incdec$ptr169274 + (get_local $$incdec$ptr169275) + ) + ) + ) + (loop $label$continue$L9 + (block $label$break$L9 + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.sub + (i32.shr_s + (i32.shl + (get_local $$1) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + ) + (block + (set_local $$incdec$ptr169276301 + (get_local $$incdec$ptr169274) + ) + (set_local $$z$0302 + (get_local $$incdec$ptr169274) + ) + (set_local $label + (i32.const 9) + ) + (br $label$break$L9) + (br $switch) + ) + ) + (block + (set_local $$incdec$ptr169276$lcssa + (get_local $$incdec$ptr169274) + ) + (set_local $$z$0$lcssa + (get_local $$incdec$ptr169274) + ) + (br $label$break$L9) + (br $switch) + ) + ) + (nop) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$incdec$ptr169274) + (i32.const 1) + ) + ) + (set_local $$$pre + (i32.load8_s + (get_local $$incdec$ptr) + ) + ) + (set_local $$1 + (get_local $$$pre) + ) + (set_local $$incdec$ptr169274 + (get_local $$incdec$ptr) + ) + (br $label$continue$L9) + ) + ) + (block $label$break$L12 + (if + (i32.eq + (get_local $label) + (i32.const 9) + ) + (loop $while-in + (block $while-out + (set_local $label + (i32.const 0) + ) + (set_local $$arrayidx16 + (i32.add + (get_local $$incdec$ptr169276301) + (i32.const 1) + ) + ) + (set_local $$2 + (i32.load8_s + (get_local $$arrayidx16) + ) + ) + (set_local $$cmp18 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$2) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 37) + ) + ) + (if + (i32.eqz + (get_local $$cmp18) + ) + (block + (set_local $$incdec$ptr169276$lcssa + (get_local $$incdec$ptr169276301) + ) + (set_local $$z$0$lcssa + (get_local $$z$0302) + ) + (br $label$break$L12) + ) + ) + (set_local $$incdec$ptr23 + (i32.add + (get_local $$z$0302) + (i32.const 1) + ) + ) + (set_local $$add$ptr + (i32.add + (get_local $$incdec$ptr169276301) + (i32.const 2) + ) + ) + (set_local $$3 + (i32.load8_s + (get_local $$add$ptr) + ) + ) + (set_local $$cmp13 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$3) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 37) + ) + ) + (if + (get_local $$cmp13) + (block + (set_local $$incdec$ptr169276301 + (get_local $$add$ptr) + ) + (set_local $$z$0302 + (get_local $$incdec$ptr23) + ) + (set_local $label + (i32.const 9) + ) + ) + (block + (set_local $$incdec$ptr169276$lcssa + (get_local $$add$ptr) + ) + (set_local $$z$0$lcssa + (get_local $$incdec$ptr23) + ) + (br $while-out) + ) + ) + (br $while-in) + ) + ) + ) + ) + (set_local $$sub$ptr$lhs$cast + (get_local $$z$0$lcssa) + ) + (set_local $$sub$ptr$rhs$cast + (get_local $$incdec$ptr169275) + ) + (set_local $$sub$ptr$sub + (i32.sub + (get_local $$sub$ptr$lhs$cast) + (get_local $$sub$ptr$rhs$cast) + ) + ) + (if + (get_local $$tobool25) + (block + (set_local $$4 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i + (i32.and + (get_local $$4) + (i32.const 32) + ) + ) + (set_local $$tobool$i + (i32.eq + (get_local $$and$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i) + (drop + (call $___fwritex + (get_local $$incdec$ptr169275) + (get_local $$sub$ptr$sub) + (get_local $$f) + ) + ) + ) + ) + ) + (set_local $$tobool28 + (i32.eq + (get_local $$z$0$lcssa) + (get_local $$incdec$ptr169275) + ) + ) + (if + (i32.eqz + (get_local $$tobool28) + ) + (block + (set_local $$l10n$0$phi + (get_local $$l10n$0) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169276$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$0$phi) + ) + (br $label$continue$L1) + ) + ) + (set_local $$arrayidx31 + (i32.add + (get_local $$incdec$ptr169276$lcssa) + (i32.const 1) + ) + ) + (set_local $$5 + (i32.load8_s + (get_local $$arrayidx31) + ) + ) + (set_local $$conv32 + (i32.shr_s + (i32.shl + (get_local $$5) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp + (i32.add + (get_local $$conv32) + (i32.const -48) + ) + ) + (set_local $$isdigit + (i32.lt_u + (get_local $$isdigittmp) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit) + (block + (set_local $$arrayidx35 + (i32.add + (get_local $$incdec$ptr169276$lcssa) + (i32.const 2) + ) + ) + (set_local $$6 + (i32.load8_s + (get_local $$arrayidx35) + ) + ) + (set_local $$cmp37 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$6) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 36) + ) + ) + (set_local $$add$ptr43 + (i32.add + (get_local $$incdec$ptr169276$lcssa) + (i32.const 3) + ) + ) + (set_local $$add$ptr43$arrayidx31 + (if (result i32) + (get_local $$cmp37) + (get_local $$add$ptr43) + (get_local $$arrayidx31) + ) + ) + (set_local $$$l10n$0 + (if (result i32) + (get_local $$cmp37) + (i32.const 1) + (get_local $$l10n$0) + ) + ) + (set_local $$isdigittmp$ + (if (result i32) + (get_local $$cmp37) + (get_local $$isdigittmp) + (i32.const -1) + ) + ) + (set_local $$$pre357 + (i32.load8_s + (get_local $$add$ptr43$arrayidx31) + ) + ) + (set_local $$7 + (get_local $$$pre357) + ) + (set_local $$argpos$0 + (get_local $$isdigittmp$) + ) + (set_local $$l10n$1 + (get_local $$$l10n$0) + ) + (set_local $$storemerge + (get_local $$add$ptr43$arrayidx31) + ) + ) + (block + (set_local $$7 + (get_local $$5) + ) + (set_local $$argpos$0 + (i32.const -1) + ) + (set_local $$l10n$1 + (get_local $$l10n$0) + ) + (set_local $$storemerge + (get_local $$arrayidx31) + ) + ) + ) + (set_local $$conv48$307 + (i32.shr_s + (i32.shl + (get_local $$7) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$8 + (i32.and + (get_local $$conv48$307) + (i32.const -32) + ) + ) + (set_local $$cmp50$308 + (i32.eq + (get_local $$8) + (i32.const 32) + ) + ) + (block $label$break$L25 + (if + (get_local $$cmp50$308) + (block + (set_local $$9 + (get_local $$7) + ) + (set_local $$conv48311 + (get_local $$conv48$307) + ) + (set_local $$fl$0310 + (i32.const 0) + ) + (set_local $$storemerge$186309 + (get_local $$storemerge) + ) + (loop $while-in4 + (block $while-out3 + (set_local $$sub54 + (i32.add + (get_local $$conv48311) + (i32.const -32) + ) + ) + (set_local $$shl + (i32.shl + (i32.const 1) + (get_local $$sub54) + ) + ) + (set_local $$and + (i32.and + (get_local $$shl) + (i32.const 75913) + ) + ) + (set_local $$tobool55 + (i32.eq + (get_local $$and) + (i32.const 0) + ) + ) + (if + (get_local $$tobool55) + (block + (set_local $$12 + (get_local $$9) + ) + (set_local $$fl$0284 + (get_local $$fl$0310) + ) + (set_local $$storemerge$186282 + (get_local $$storemerge$186309) + ) + (br $label$break$L25) + ) + ) + (set_local $$conv58 + (i32.shr_s + (i32.shl + (get_local $$9) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$sub59 + (i32.add + (get_local $$conv58) + (i32.const -32) + ) + ) + (set_local $$shl60 + (i32.shl + (i32.const 1) + (get_local $$sub59) + ) + ) + (set_local $$or + (i32.or + (get_local $$shl60) + (get_local $$fl$0310) + ) + ) + (set_local $$incdec$ptr62 + (i32.add + (get_local $$storemerge$186309) + (i32.const 1) + ) + ) + (set_local $$10 + (i32.load8_s + (get_local $$incdec$ptr62) + ) + ) + (set_local $$conv48 + (i32.shr_s + (i32.shl + (get_local $$10) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$11 + (i32.and + (get_local $$conv48) + (i32.const -32) + ) + ) + (set_local $$cmp50 + (i32.eq + (get_local $$11) + (i32.const 32) + ) + ) + (if + (get_local $$cmp50) + (block + (set_local $$9 + (get_local $$10) + ) + (set_local $$conv48311 + (get_local $$conv48) + ) + (set_local $$fl$0310 + (get_local $$or) + ) + (set_local $$storemerge$186309 + (get_local $$incdec$ptr62) + ) + ) + (block + (set_local $$12 + (get_local $$10) + ) + (set_local $$fl$0284 + (get_local $$or) + ) + (set_local $$storemerge$186282 + (get_local $$incdec$ptr62) + ) + (br $while-out3) + ) + ) + (br $while-in4) + ) + ) + ) + (block + (set_local $$12 + (get_local $$7) + ) + (set_local $$fl$0284 + (i32.const 0) + ) + (set_local $$storemerge$186282 + (get_local $$storemerge) + ) + ) + ) + ) + (set_local $$cmp65 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$12) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 42) + ) + ) + (block $do-once5 + (if + (get_local $$cmp65) + (block + (set_local $$arrayidx68 + (i32.add + (get_local $$storemerge$186282) + (i32.const 1) + ) + ) + (set_local $$13 + (i32.load8_s + (get_local $$arrayidx68) + ) + ) + (set_local $$conv69 + (i32.shr_s + (i32.shl + (get_local $$13) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp189 + (i32.add + (get_local $$conv69) + (i32.const -48) + ) + ) + (set_local $$isdigit190 + (i32.lt_u + (get_local $$isdigittmp189) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit190) + (block + (set_local $$arrayidx73 + (i32.add + (get_local $$storemerge$186282) + (i32.const 2) + ) + ) + (set_local $$14 + (i32.load8_s + (get_local $$arrayidx73) + ) + ) + (set_local $$cmp75 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$14) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 36) + ) + ) + (if + (get_local $$cmp75) + (block + (set_local $$arrayidx81 + (i32.add + (get_local $$nl_type) + (i32.shl + (get_local $$isdigittmp189) + (i32.const 2) + ) + ) + ) + (i32.store + (get_local $$arrayidx81) + (i32.const 10) + ) + (set_local $$15 + (i32.load8_s + (get_local $$arrayidx68) + ) + ) + (set_local $$conv83 + (i32.shr_s + (i32.shl + (get_local $$15) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$sub84 + (i32.add + (get_local $$conv83) + (i32.const -48) + ) + ) + (set_local $$i86 + (i32.add + (get_local $$nl_arg) + (i32.shl + (get_local $$sub84) + (i32.const 3) + ) + ) + ) + (set_local $$16 + (get_local $$i86) + ) + (set_local $$17 + (get_local $$16) + ) + (set_local $$18 + (i32.load + (get_local $$17) + ) + ) + (set_local $$19 + (i32.add + (get_local $$16) + (i32.const 4) + ) + ) + (set_local $$20 + (get_local $$19) + ) + (set_local $$21 + (i32.load + (get_local $$20) + ) + ) + (set_local $$add$ptr88 + (i32.add + (get_local $$storemerge$186282) + (i32.const 3) + ) + ) + (set_local $$l10n$2 + (i32.const 1) + ) + (set_local $$storemerge$191 + (get_local $$add$ptr88) + ) + (set_local $$w$0 + (get_local $$18) + ) + ) + (set_local $label + (i32.const 24) + ) + ) + ) + (set_local $label + (i32.const 24) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 24) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$tobool90 + (i32.eq + (get_local $$l10n$1) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool90) + ) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (if + (i32.eqz + (get_local $$tobool25) + ) + (block + (set_local $$fl$1 + (get_local $$fl$0284) + ) + (set_local $$incdec$ptr169269 + (get_local $$arrayidx68) + ) + (set_local $$l10n$3 + (i32.const 0) + ) + (set_local $$w$1 + (i32.const 0) + ) + (br $do-once5) + ) + ) + (set_local $$arglist_current + (i32.load + (get_local $$ap) + ) + ) + (set_local $$22 + (get_local $$arglist_current) + ) + (set_local $$23 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded4 + (get_local $$23) + ) + (set_local $$expanded + (i32.sub + (get_local $$expanded4) + (i32.const 1) + ) + ) + (set_local $$24 + (i32.add + (get_local $$22) + (get_local $$expanded) + ) + ) + (set_local $$25 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded8 + (get_local $$25) + ) + (set_local $$expanded7 + (i32.sub + (get_local $$expanded8) + (i32.const 1) + ) + ) + (set_local $$expanded6 + (i32.xor + (get_local $$expanded7) + (i32.const -1) + ) + ) + (set_local $$26 + (i32.and + (get_local $$24) + (get_local $$expanded6) + ) + ) + (set_local $$27 + (get_local $$26) + ) + (set_local $$28 + (i32.load + (get_local $$27) + ) + ) + (set_local $$arglist_next + (i32.add + (get_local $$27) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next) + ) + (set_local $$l10n$2 + (i32.const 0) + ) + (set_local $$storemerge$191 + (get_local $$arrayidx68) + ) + (set_local $$w$0 + (get_local $$28) + ) + ) + ) + (set_local $$cmp97 + (i32.lt_s + (get_local $$w$0) + (i32.const 0) + ) + ) + (if + (get_local $$cmp97) + (block + (set_local $$or100 + (i32.or + (get_local $$fl$0284) + (i32.const 8192) + ) + ) + (set_local $$sub101 + (i32.sub + (i32.const 0) + (get_local $$w$0) + ) + ) + (set_local $$fl$1 + (get_local $$or100) + ) + (set_local $$incdec$ptr169269 + (get_local $$storemerge$191) + ) + (set_local $$l10n$3 + (get_local $$l10n$2) + ) + (set_local $$w$1 + (get_local $$sub101) + ) + ) + (block + (set_local $$fl$1 + (get_local $$fl$0284) + ) + (set_local $$incdec$ptr169269 + (get_local $$storemerge$191) + ) + (set_local $$l10n$3 + (get_local $$l10n$2) + ) + (set_local $$w$1 + (get_local $$w$0) + ) + ) + ) + ) + (block + (set_local $$conv$4$i + (i32.shr_s + (i32.shl + (get_local $$12) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp$5$i + (i32.add + (get_local $$conv$4$i) + (i32.const -48) + ) + ) + (set_local $$isdigit$6$i + (i32.lt_u + (get_local $$isdigittmp$5$i) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit$6$i) + (block + (set_local $$29 + (get_local $$storemerge$186282) + ) + (set_local $$i$07$i + (i32.const 0) + ) + (set_local $$isdigittmp8$i + (get_local $$isdigittmp$5$i) + ) + (loop $while-in8 + (block $while-out7 + (set_local $$mul$i + (i32.mul + (get_local $$i$07$i) + (i32.const 10) + ) + ) + (set_local $$add$i + (i32.add + (get_local $$mul$i) + (get_local $$isdigittmp8$i) + ) + ) + (set_local $$incdec$ptr$i + (i32.add + (get_local $$29) + (i32.const 1) + ) + ) + (set_local $$30 + (i32.load8_s + (get_local $$incdec$ptr$i) + ) + ) + (set_local $$conv$i + (i32.shr_s + (i32.shl + (get_local $$30) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp$i + (i32.add + (get_local $$conv$i) + (i32.const -48) + ) + ) + (set_local $$isdigit$i + (i32.lt_u + (get_local $$isdigittmp$i) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit$i) + (block + (set_local $$29 + (get_local $$incdec$ptr$i) + ) + (set_local $$i$07$i + (get_local $$add$i) + ) + (set_local $$isdigittmp8$i + (get_local $$isdigittmp$i) + ) + ) + (block + (set_local $$add$i$lcssa + (get_local $$add$i) + ) + (set_local $$incdec$ptr$i$lcssa + (get_local $$incdec$ptr$i) + ) + (br $while-out7) + ) + ) + (br $while-in8) + ) + ) + (set_local $$cmp105 + (i32.lt_s + (get_local $$add$i$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$cmp105) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + (block + (set_local $$fl$1 + (get_local $$fl$0284) + ) + (set_local $$incdec$ptr169269 + (get_local $$incdec$ptr$i$lcssa) + ) + (set_local $$l10n$3 + (get_local $$l10n$1) + ) + (set_local $$w$1 + (get_local $$add$i$lcssa) + ) + ) + ) + ) + (block + (set_local $$fl$1 + (get_local $$fl$0284) + ) + (set_local $$incdec$ptr169269 + (get_local $$storemerge$186282) + ) + (set_local $$l10n$3 + (get_local $$l10n$1) + ) + (set_local $$w$1 + (i32.const 0) + ) + ) + ) + ) + ) + ) + (set_local $$31 + (i32.load8_s + (get_local $$incdec$ptr169269) + ) + ) + (set_local $$cmp111 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$31) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 46) + ) + ) + (block $label$break$L46 + (if + (get_local $$cmp111) + (block + (set_local $$arrayidx114 + (i32.add + (get_local $$incdec$ptr169269) + (i32.const 1) + ) + ) + (set_local $$32 + (i32.load8_s + (get_local $$arrayidx114) + ) + ) + (set_local $$cmp116 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$32) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 42) + ) + ) + (if + (i32.eqz + (get_local $$cmp116) + ) + (block + (set_local $$conv$4$i$197 + (i32.shr_s + (i32.shl + (get_local $$32) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp$5$i$198 + (i32.add + (get_local $$conv$4$i$197) + (i32.const -48) + ) + ) + (set_local $$isdigit$6$i$199 + (i32.lt_u + (get_local $$isdigittmp$5$i$198) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit$6$i$199) + (block + (set_local $$49 + (get_local $$arrayidx114) + ) + (set_local $$i$07$i$201 + (i32.const 0) + ) + (set_local $$isdigittmp8$i$200 + (get_local $$isdigittmp$5$i$198) + ) + ) + (block + (set_local $$incdec$ptr169272 + (get_local $$arrayidx114) + ) + (set_local $$p$0 + (i32.const 0) + ) + (br $label$break$L46) + ) + ) + (loop $while-in11 + (block $while-out10 + (set_local $$mul$i$202 + (i32.mul + (get_local $$i$07$i$201) + (i32.const 10) + ) + ) + (set_local $$add$i$203 + (i32.add + (get_local $$mul$i$202) + (get_local $$isdigittmp8$i$200) + ) + ) + (set_local $$incdec$ptr$i$204 + (i32.add + (get_local $$49) + (i32.const 1) + ) + ) + (set_local $$50 + (i32.load8_s + (get_local $$incdec$ptr$i$204) + ) + ) + (set_local $$conv$i$205 + (i32.shr_s + (i32.shl + (get_local $$50) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp$i$206 + (i32.add + (get_local $$conv$i$205) + (i32.const -48) + ) + ) + (set_local $$isdigit$i$207 + (i32.lt_u + (get_local $$isdigittmp$i$206) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit$i$207) + (block + (set_local $$49 + (get_local $$incdec$ptr$i$204) + ) + (set_local $$i$07$i$201 + (get_local $$add$i$203) + ) + (set_local $$isdigittmp8$i$200 + (get_local $$isdigittmp$i$206) + ) + ) + (block + (set_local $$incdec$ptr169272 + (get_local $$incdec$ptr$i$204) + ) + (set_local $$p$0 + (get_local $$add$i$203) + ) + (br $label$break$L46) + ) + ) + (br $while-in11) + ) + ) + ) + ) + (set_local $$arrayidx119 + (i32.add + (get_local $$incdec$ptr169269) + (i32.const 2) + ) + ) + (set_local $$33 + (i32.load8_s + (get_local $$arrayidx119) + ) + ) + (set_local $$conv120 + (i32.shr_s + (i32.shl + (get_local $$33) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp187 + (i32.add + (get_local $$conv120) + (i32.const -48) + ) + ) + (set_local $$isdigit188 + (i32.lt_u + (get_local $$isdigittmp187) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit188) + (block + (set_local $$arrayidx124 + (i32.add + (get_local $$incdec$ptr169269) + (i32.const 3) + ) + ) + (set_local $$34 + (i32.load8_s + (get_local $$arrayidx124) + ) + ) + (set_local $$cmp126 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$34) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 36) + ) + ) + (if + (get_local $$cmp126) + (block + (set_local $$arrayidx132 + (i32.add + (get_local $$nl_type) + (i32.shl + (get_local $$isdigittmp187) + (i32.const 2) + ) + ) + ) + (i32.store + (get_local $$arrayidx132) + (i32.const 10) + ) + (set_local $$35 + (i32.load8_s + (get_local $$arrayidx119) + ) + ) + (set_local $$conv134 + (i32.shr_s + (i32.shl + (get_local $$35) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$sub135 + (i32.add + (get_local $$conv134) + (i32.const -48) + ) + ) + (set_local $$i137 + (i32.add + (get_local $$nl_arg) + (i32.shl + (get_local $$sub135) + (i32.const 3) + ) + ) + ) + (set_local $$36 + (get_local $$i137) + ) + (set_local $$37 + (get_local $$36) + ) + (set_local $$38 + (i32.load + (get_local $$37) + ) + ) + (set_local $$39 + (i32.add + (get_local $$36) + (i32.const 4) + ) + ) + (set_local $$40 + (get_local $$39) + ) + (set_local $$41 + (i32.load + (get_local $$40) + ) + ) + (set_local $$add$ptr139 + (i32.add + (get_local $$incdec$ptr169269) + (i32.const 4) + ) + ) + (set_local $$incdec$ptr169272 + (get_local $$add$ptr139) + ) + (set_local $$p$0 + (get_local $$38) + ) + (br $label$break$L46) + ) + ) + ) + ) + (set_local $$tobool141 + (i32.eq + (get_local $$l10n$3) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool141) + ) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (if + (get_local $$tobool25) + (block + (set_local $$arglist_current2 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$42 + (get_local $$arglist_current2) + ) + (set_local $$43 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded11 + (get_local $$43) + ) + (set_local $$expanded10 + (i32.sub + (get_local $$expanded11) + (i32.const 1) + ) + ) + (set_local $$44 + (i32.add + (get_local $$42) + (get_local $$expanded10) + ) + ) + (set_local $$45 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded15 + (get_local $$45) + ) + (set_local $$expanded14 + (i32.sub + (get_local $$expanded15) + (i32.const 1) + ) + ) + (set_local $$expanded13 + (i32.xor + (get_local $$expanded14) + (i32.const -1) + ) + ) + (set_local $$46 + (i32.and + (get_local $$44) + (get_local $$expanded13) + ) + ) + (set_local $$47 + (get_local $$46) + ) + (set_local $$48 + (i32.load + (get_local $$47) + ) + ) + (set_local $$arglist_next3 + (i32.add + (get_local $$47) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next3) + ) + (set_local $$incdec$ptr169272 + (get_local $$arrayidx119) + ) + (set_local $$p$0 + (get_local $$48) + ) + ) + (block + (set_local $$incdec$ptr169272 + (get_local $$arrayidx119) + ) + (set_local $$p$0 + (i32.const 0) + ) + ) + ) + ) + (block + (set_local $$incdec$ptr169272 + (get_local $$incdec$ptr169269) + ) + (set_local $$p$0 + (i32.const -1) + ) + ) + ) + ) + (set_local $$incdec$ptr169271 + (get_local $$incdec$ptr169272) + ) + (set_local $$st$0 + (i32.const 0) + ) + (loop $while-in13 + (block $while-out12 + (set_local $$51 + (i32.load8_s + (get_local $$incdec$ptr169271) + ) + ) + (set_local $$conv163 + (i32.shr_s + (i32.shl + (get_local $$51) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$sub164 + (i32.add + (get_local $$conv163) + (i32.const -65) + ) + ) + (set_local $$cmp165 + (i32.gt_u + (get_local $$sub164) + (i32.const 57) + ) + ) + (if + (get_local $$cmp165) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $$incdec$ptr169 + (i32.add + (get_local $$incdec$ptr169271) + (i32.const 1) + ) + ) + (set_local $$arrayidx173 + (i32.add + (i32.add + (i32.const 3611) + (i32.mul + (get_local $$st$0) + (i32.const 58) + ) + ) + (get_local $$sub164) + ) + ) + (set_local $$52 + (i32.load8_s + (get_local $$arrayidx173) + ) + ) + (set_local $$conv174 + (i32.and + (get_local $$52) + (i32.const 255) + ) + ) + (set_local $$sub175 + (i32.add + (get_local $$conv174) + (i32.const -1) + ) + ) + (set_local $$cmp176 + (i32.lt_u + (get_local $$sub175) + (i32.const 8) + ) + ) + (if + (get_local $$cmp176) + (block + (set_local $$incdec$ptr169271 + (get_local $$incdec$ptr169) + ) + (set_local $$st$0 + (get_local $$conv174) + ) + ) + (block + (set_local $$$lcssa + (get_local $$52) + ) + (set_local $$conv174$lcssa + (get_local $$conv174) + ) + (set_local $$incdec$ptr169$lcssa + (get_local $$incdec$ptr169) + ) + (set_local $$incdec$ptr169271$lcssa414 + (get_local $$incdec$ptr169271) + ) + (set_local $$st$0$lcssa415 + (get_local $$st$0) + ) + (br $while-out12) + ) + ) + (br $while-in13) + ) + ) + (set_local $$tobool178 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$$lcssa) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (if + (get_local $$tobool178) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $$cmp181 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$$lcssa) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 19) + ) + ) + (set_local $$cmp184 + (i32.gt_s + (get_local $$argpos$0) + (i32.const -1) + ) + ) + (block $do-once14 + (if + (get_local $$cmp181) + (if + (get_local $$cmp184) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + (set_local $label + (i32.const 52) + ) + ) + (block + (if + (get_local $$cmp184) + (block + (set_local $$arrayidx192 + (i32.add + (get_local $$nl_type) + (i32.shl + (get_local $$argpos$0) + (i32.const 2) + ) + ) + ) + (i32.store + (get_local $$arrayidx192) + (get_local $$conv174$lcssa) + ) + (set_local $$53 + (i32.add + (get_local $$nl_arg) + (i32.shl + (get_local $$argpos$0) + (i32.const 3) + ) + ) + ) + (set_local $$54 + (get_local $$53) + ) + (set_local $$55 + (get_local $$54) + ) + (set_local $$56 + (i32.load + (get_local $$55) + ) + ) + (set_local $$57 + (i32.add + (get_local $$54) + (i32.const 4) + ) + ) + (set_local $$58 + (get_local $$57) + ) + (set_local $$59 + (i32.load + (get_local $$58) + ) + ) + (set_local $$60 + (get_local $$arg) + ) + (set_local $$61 + (get_local $$60) + ) + (i32.store + (get_local $$61) + (get_local $$56) + ) + (set_local $$62 + (i32.add + (get_local $$60) + (i32.const 4) + ) + ) + (set_local $$63 + (get_local $$62) + ) + (i32.store + (get_local $$63) + (get_local $$59) + ) + (set_local $label + (i32.const 52) + ) + (br $do-once14) + ) + ) + (if + (i32.eqz + (get_local $$tobool25) + ) + (block + (set_local $$retval$0 + (i32.const 0) + ) + (br $label$break$L1) + ) + ) + (call $_pop_arg_336 + (get_local $$arg) + (get_local $$conv174$lcssa) + (get_local $$ap) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 52) + ) + (block + (set_local $label + (i32.const 0) + ) + (if + (i32.eqz + (get_local $$tobool25) + ) + (block + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + ) + ) + ) + ) + (set_local $$64 + (i32.load8_s + (get_local $$incdec$ptr169271$lcssa414) + ) + ) + (set_local $$conv207 + (i32.shr_s + (i32.shl + (get_local $$64) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$tobool208 + (i32.ne + (get_local $$st$0$lcssa415) + (i32.const 0) + ) + ) + (set_local $$and210 + (i32.and + (get_local $$conv207) + (i32.const 15) + ) + ) + (set_local $$cmp211 + (i32.eq + (get_local $$and210) + (i32.const 3) + ) + ) + (set_local $$or$cond192 + (i32.and + (get_local $$tobool208) + (get_local $$cmp211) + ) + ) + (set_local $$and214 + (i32.and + (get_local $$conv207) + (i32.const -33) + ) + ) + (set_local $$t$0 + (if (result i32) + (get_local $$or$cond192) + (get_local $$and214) + (get_local $$conv207) + ) + ) + (set_local $$and216 + (i32.and + (get_local $$fl$1) + (i32.const 8192) + ) + ) + (set_local $$tobool217 + (i32.eq + (get_local $$and216) + (i32.const 0) + ) + ) + (set_local $$and219 + (i32.and + (get_local $$fl$1) + (i32.const -65537) + ) + ) + (set_local $$fl$1$and219 + (if (result i32) + (get_local $$tobool217) + (get_local $$fl$1) + (get_local $$and219) + ) + ) + (block $label$break$L75 + (block $switch17 + (block $switch-default120 + (block $switch-case119 + (block $switch-case48 + (block $switch-case47 + (block $switch-case46 + (block $switch-case45 + (block $switch-case44 + (block $switch-case43 + (block $switch-case42 + (block $switch-case41 + (block $switch-case40 + (block $switch-case39 + (block $switch-case38 + (block $switch-case37 + (block $switch-case36 + (block $switch-case35 + (block $switch-case34 + (block $switch-case33 + (block $switch-case30 + (block $switch-case29 + (block $switch-case28 + (block $switch-case27 + (br_table $switch-case42 $switch-default120 $switch-case40 $switch-default120 $switch-case45 $switch-case44 $switch-case43 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case41 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case29 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case46 $switch-default120 $switch-case37 $switch-case35 $switch-case119 $switch-case48 $switch-case47 $switch-default120 $switch-case34 $switch-default120 $switch-default120 $switch-default120 $switch-case38 $switch-case27 $switch-case33 $switch-case28 $switch-default120 $switch-default120 $switch-case39 $switch-default120 $switch-case36 $switch-default120 $switch-default120 $switch-case30 $switch-default120 + (i32.sub + (get_local $$t$0) + (i32.const 65) + ) + ) + ) + (block + (block $switch18 + (block $switch-default26 + (block $switch-case25 + (block $switch-case24 + (block $switch-case23 + (block $switch-case22 + (block $switch-case21 + (block $switch-case20 + (block $switch-case19 + (br_table $switch-case19 $switch-case20 $switch-case21 $switch-case22 $switch-case23 $switch-default26 $switch-case24 $switch-case25 $switch-default26 + (i32.sub + (get_local $$st$0$lcssa415) + (i32.const 0) + ) + ) + ) + (block + (set_local $$71 + (i32.load + (get_local $$arg) + ) + ) + (i32.store + (get_local $$71) + (get_local $$cnt$1) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$72 + (i32.load + (get_local $$arg) + ) + ) + (i32.store + (get_local $$72) + (get_local $$cnt$1) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$73 + (i32.lt_s + (get_local $$cnt$1) + (i32.const 0) + ) + ) + (set_local $$74 + (i32.shr_s + (i32.shl + (get_local $$73) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$75 + (i32.load + (get_local $$arg) + ) + ) + (set_local $$76 + (get_local $$75) + ) + (set_local $$77 + (get_local $$76) + ) + (i32.store + (get_local $$77) + (get_local $$cnt$1) + ) + (set_local $$78 + (i32.add + (get_local $$76) + (i32.const 4) + ) + ) + (set_local $$79 + (get_local $$78) + ) + (i32.store + (get_local $$79) + (get_local $$74) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$conv229 + (i32.and + (get_local $$cnt$1) + (i32.const 65535) + ) + ) + (set_local $$80 + (i32.load + (get_local $$arg) + ) + ) + (i32.store16 + (get_local $$80) + (get_local $$conv229) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$conv232 + (i32.and + (get_local $$cnt$1) + (i32.const 255) + ) + ) + (set_local $$81 + (i32.load + (get_local $$arg) + ) + ) + (i32.store8 + (get_local $$81) + (get_local $$conv232) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$82 + (i32.load + (get_local $$arg) + ) + ) + (i32.store + (get_local $$82) + (get_local $$cnt$1) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$83 + (i32.lt_s + (get_local $$cnt$1) + (i32.const 0) + ) + ) + (set_local $$84 + (i32.shr_s + (i32.shl + (get_local $$83) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$85 + (i32.load + (get_local $$arg) + ) + ) + (set_local $$86 + (get_local $$85) + ) + (set_local $$87 + (get_local $$86) + ) + (i32.store + (get_local $$87) + (get_local $$cnt$1) + ) + (set_local $$88 + (i32.add + (get_local $$86) + (i32.const 4) + ) + ) + (set_local $$89 + (get_local $$88) + ) + (i32.store + (get_local $$89) + (get_local $$84) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + ) + ) + (br $switch17) + ) + ) + (block + (set_local $$cmp240 + (i32.gt_u + (get_local $$p$0) + (i32.const 8) + ) + ) + (set_local $$cond245 + (if (result i32) + (get_local $$cmp240) + (get_local $$p$0) + (i32.const 8) + ) + ) + (set_local $$or246 + (i32.or + (get_local $$fl$1$and219) + (i32.const 8) + ) + ) + (set_local $$fl$3 + (get_local $$or246) + ) + (set_local $$p$1 + (get_local $$cond245) + ) + (set_local $$t$1 + (i32.const 120) + ) + (set_local $label + (i32.const 64) + ) + (br $switch17) + ) + ) + (nop) + ) + (block + (set_local $$fl$3 + (get_local $$fl$1$and219) + ) + (set_local $$p$1 + (get_local $$p$0) + ) + (set_local $$t$1 + (get_local $$t$0) + ) + (set_local $label + (i32.const 64) + ) + (br $switch17) + ) + ) + (block + (set_local $$116 + (get_local $$arg) + ) + (set_local $$117 + (get_local $$116) + ) + (set_local $$118 + (i32.load + (get_local $$117) + ) + ) + (set_local $$119 + (i32.add + (get_local $$116) + (i32.const 4) + ) + ) + (set_local $$120 + (get_local $$119) + ) + (set_local $$121 + (i32.load + (get_local $$120) + ) + ) + (set_local $$122 + (i32.eq + (get_local $$118) + (i32.const 0) + ) + ) + (set_local $$123 + (i32.eq + (get_local $$121) + (i32.const 0) + ) + ) + (set_local $$124 + (i32.and + (get_local $$122) + (get_local $$123) + ) + ) + (if + (get_local $$124) + (set_local $$s$addr$0$lcssa$i$229 + (get_local $$add$ptr205) + ) + (block + (set_local $$126 + (get_local $$118) + ) + (set_local $$129 + (get_local $$121) + ) + (set_local $$s$addr$06$i$221 + (get_local $$add$ptr205) + ) + (loop $while-in32 + (block $while-out31 + (set_local $$125 + (i32.and + (get_local $$126) + (i32.const 7) + ) + ) + (set_local $$127 + (i32.or + (get_local $$125) + (i32.const 48) + ) + ) + (set_local $$128 + (i32.and + (get_local $$127) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr$i$225 + (i32.add + (get_local $$s$addr$06$i$221) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr$i$225) + (get_local $$128) + ) + (set_local $$130 + (call $_bitshift64Lshr + (get_local $$126) + (get_local $$129) + (i32.const 3) + ) + ) + (set_local $$131 + (get_global $tempRet0) + ) + (set_local $$132 + (i32.eq + (get_local $$130) + (i32.const 0) + ) + ) + (set_local $$133 + (i32.eq + (get_local $$131) + (i32.const 0) + ) + ) + (set_local $$134 + (i32.and + (get_local $$132) + (get_local $$133) + ) + ) + (if + (get_local $$134) + (block + (set_local $$s$addr$0$lcssa$i$229 + (get_local $$incdec$ptr$i$225) + ) + (br $while-out31) + ) + (block + (set_local $$126 + (get_local $$130) + ) + (set_local $$129 + (get_local $$131) + ) + (set_local $$s$addr$06$i$221 + (get_local $$incdec$ptr$i$225) + ) + ) + ) + (br $while-in32) + ) + ) + ) + ) + (set_local $$and263 + (i32.and + (get_local $$fl$1$and219) + (i32.const 8) + ) + ) + (set_local $$tobool264 + (i32.eq + (get_local $$and263) + (i32.const 0) + ) + ) + (if + (get_local $$tobool264) + (block + (set_local $$a$0 + (get_local $$s$addr$0$lcssa$i$229) + ) + (set_local $$fl$4 + (get_local $$fl$1$and219) + ) + (set_local $$p$2 + (get_local $$p$0) + ) + (set_local $$pl$1 + (i32.const 0) + ) + (set_local $$prefix$1 + (i32.const 4091) + ) + (set_local $label + (i32.const 77) + ) + ) + (block + (set_local $$sub$ptr$rhs$cast267 + (get_local $$s$addr$0$lcssa$i$229) + ) + (set_local $$sub$ptr$sub268 + (i32.sub + (get_local $$sub$ptr$lhs$cast317) + (get_local $$sub$ptr$rhs$cast267) + ) + ) + (set_local $$add269 + (i32.add + (get_local $$sub$ptr$sub268) + (i32.const 1) + ) + ) + (set_local $$cmp270 + (i32.lt_s + (get_local $$p$0) + (get_local $$add269) + ) + ) + (set_local $$add269$p$0 + (if (result i32) + (get_local $$cmp270) + (get_local $$add269) + (get_local $$p$0) + ) + ) + (set_local $$a$0 + (get_local $$s$addr$0$lcssa$i$229) + ) + (set_local $$fl$4 + (get_local $$fl$1$and219) + ) + (set_local $$p$2 + (get_local $$add269$p$0) + ) + (set_local $$pl$1 + (i32.const 0) + ) + (set_local $$prefix$1 + (i32.const 4091) + ) + (set_local $label + (i32.const 77) + ) + ) + ) + (br $switch17) + ) + ) + (nop) + ) + (block + (set_local $$135 + (get_local $$arg) + ) + (set_local $$136 + (get_local $$135) + ) + (set_local $$137 + (i32.load + (get_local $$136) + ) + ) + (set_local $$138 + (i32.add + (get_local $$135) + (i32.const 4) + ) + ) + (set_local $$139 + (get_local $$138) + ) + (set_local $$140 + (i32.load + (get_local $$139) + ) + ) + (set_local $$141 + (i32.lt_s + (get_local $$140) + (i32.const 0) + ) + ) + (if + (get_local $$141) + (block + (set_local $$142 + (call $_i64Subtract + (i32.const 0) + (i32.const 0) + (get_local $$137) + (get_local $$140) + ) + ) + (set_local $$143 + (get_global $tempRet0) + ) + (set_local $$144 + (get_local $$arg) + ) + (set_local $$145 + (get_local $$144) + ) + (i32.store + (get_local $$145) + (get_local $$142) + ) + (set_local $$146 + (i32.add + (get_local $$144) + (i32.const 4) + ) + ) + (set_local $$147 + (get_local $$146) + ) + (i32.store + (get_local $$147) + (get_local $$143) + ) + (set_local $$148 + (get_local $$142) + ) + (set_local $$149 + (get_local $$143) + ) + (set_local $$pl$0 + (i32.const 1) + ) + (set_local $$prefix$0 + (i32.const 4091) + ) + (set_local $label + (i32.const 76) + ) + (br $label$break$L75) + ) + ) + (set_local $$and289 + (i32.and + (get_local $$fl$1$and219) + (i32.const 2048) + ) + ) + (set_local $$tobool290 + (i32.eq + (get_local $$and289) + (i32.const 0) + ) + ) + (if + (get_local $$tobool290) + (block + (set_local $$and294 + (i32.and + (get_local $$fl$1$and219) + (i32.const 1) + ) + ) + (set_local $$tobool295 + (i32.eq + (get_local $$and294) + (i32.const 0) + ) + ) + (set_local $$$ + (if (result i32) + (get_local $$tobool295) + (i32.const 4091) + (i32.const 4093) + ) + ) + (set_local $$148 + (get_local $$137) + ) + (set_local $$149 + (get_local $$140) + ) + (set_local $$pl$0 + (get_local $$and294) + ) + (set_local $$prefix$0 + (get_local $$$) + ) + (set_local $label + (i32.const 76) + ) + ) + (block + (set_local $$148 + (get_local $$137) + ) + (set_local $$149 + (get_local $$140) + ) + (set_local $$pl$0 + (i32.const 1) + ) + (set_local $$prefix$0 + (i32.const 4092) + ) + (set_local $label + (i32.const 76) + ) + ) + ) + (br $switch17) + ) + ) + (block + (set_local $$65 + (get_local $$arg) + ) + (set_local $$66 + (get_local $$65) + ) + (set_local $$67 + (i32.load + (get_local $$66) + ) + ) + (set_local $$68 + (i32.add + (get_local $$65) + (i32.const 4) + ) + ) + (set_local $$69 + (get_local $$68) + ) + (set_local $$70 + (i32.load + (get_local $$69) + ) + ) + (set_local $$148 + (get_local $$67) + ) + (set_local $$149 + (get_local $$70) + ) + (set_local $$pl$0 + (i32.const 0) + ) + (set_local $$prefix$0 + (i32.const 4091) + ) + (set_local $label + (i32.const 76) + ) + (br $switch17) + ) + ) + (block + (set_local $$161 + (get_local $$arg) + ) + (set_local $$162 + (get_local $$161) + ) + (set_local $$163 + (i32.load + (get_local $$162) + ) + ) + (set_local $$164 + (i32.add + (get_local $$161) + (i32.const 4) + ) + ) + (set_local $$165 + (get_local $$164) + ) + (set_local $$166 + (i32.load + (get_local $$165) + ) + ) + (set_local $$167 + (i32.and + (get_local $$163) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $$add$ptr340) + (get_local $$167) + ) + (set_local $$a$2 + (get_local $$add$ptr340) + ) + (set_local $$fl$6 + (get_local $$and219) + ) + (set_local $$p$5 + (i32.const 1) + ) + (set_local $$pl$2 + (i32.const 0) + ) + (set_local $$prefix$2 + (i32.const 4091) + ) + (set_local $$z$2 + (get_local $$add$ptr205) + ) + (br $switch17) + ) + ) + (block + (set_local $$call344 + (call $___errno_location) + ) + (set_local $$168 + (i32.load + (get_local $$call344) + ) + ) + (set_local $$call345 + (call $_strerror + (get_local $$168) + ) + ) + (set_local $$a$1 + (get_local $$call345) + ) + (set_local $label + (i32.const 82) + ) + (br $switch17) + ) + ) + (block + (set_local $$169 + (i32.load + (get_local $$arg) + ) + ) + (set_local $$tobool349 + (i32.ne + (get_local $$169) + (i32.const 0) + ) + ) + (set_local $$cond354 + (if (result i32) + (get_local $$tobool349) + (get_local $$169) + (i32.const 4101) + ) + ) + (set_local $$a$1 + (get_local $$cond354) + ) + (set_local $label + (i32.const 82) + ) + (br $switch17) + ) + ) + (block + (set_local $$170 + (get_local $$arg) + ) + (set_local $$171 + (get_local $$170) + ) + (set_local $$172 + (i32.load + (get_local $$171) + ) + ) + (set_local $$173 + (i32.add + (get_local $$170) + (i32.const 4) + ) + ) + (set_local $$174 + (get_local $$173) + ) + (set_local $$175 + (i32.load + (get_local $$174) + ) + ) + (i32.store + (get_local $$wc) + (get_local $$172) + ) + (i32.store + (get_local $$arrayidx370) + (i32.const 0) + ) + (i32.store + (get_local $$arg) + (get_local $$wc) + ) + (set_local $$p$4365 + (i32.const -1) + ) + (set_local $label + (i32.const 86) + ) + (br $switch17) + ) + ) + (block + (set_local $$cmp377$314 + (i32.eq + (get_local $$p$0) + (i32.const 0) + ) + ) + (if + (get_local $$cmp377$314) + (block + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (i32.const 0) + (get_local $$fl$1$and219) + ) + (set_local $$i$0$lcssa368 + (i32.const 0) + ) + (set_local $label + (i32.const 98) + ) + ) + (block + (set_local $$p$4365 + (get_local $$p$0) + ) + (set_local $label + (i32.const 86) + ) + ) + ) + (br $switch17) + ) + ) + (nop) + ) + (nop) + ) + (nop) + ) + (nop) + ) + (nop) + ) + (nop) + ) + (nop) + ) + (block + (set_local $$181 + (f64.load + (get_local $$arg) + ) + ) + (i32.store + (get_local $$e2$i) + (i32.const 0) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $$181) + ) + (set_local $$182 + (i32.load + (get_global $tempDoublePtr) + ) + ) + (set_local $$183 + (i32.load + (i32.add + (get_global $tempDoublePtr) + (i32.const 4) + ) + ) + ) + (set_local $$184 + (i32.lt_s + (get_local $$183) + (i32.const 0) + ) + ) + (if + (get_local $$184) + (block + (set_local $$sub$i + (f64.neg + (get_local $$181) + ) + ) + (set_local $$pl$0$i + (i32.const 1) + ) + (set_local $$prefix$0$i + (i32.const 4108) + ) + (set_local $$y$addr$0$i + (get_local $$sub$i) + ) + ) + (block + (set_local $$and$i$238 + (i32.and + (get_local $$fl$1$and219) + (i32.const 2048) + ) + ) + (set_local $$tobool9$i + (i32.eq + (get_local $$and$i$238) + (i32.const 0) + ) + ) + (if + (get_local $$tobool9$i) + (block + (set_local $$and12$i + (i32.and + (get_local $$fl$1$and219) + (i32.const 1) + ) + ) + (set_local $$tobool13$i + (i32.eq + (get_local $$and12$i) + (i32.const 0) + ) + ) + (set_local $$$$i + (if (result i32) + (get_local $$tobool13$i) + (i32.const 4109) + (i32.const 4114) + ) + ) + (set_local $$pl$0$i + (get_local $$and12$i) + ) + (set_local $$prefix$0$i + (get_local $$$$i) + ) + (set_local $$y$addr$0$i + (get_local $$181) + ) + ) + (block + (set_local $$pl$0$i + (i32.const 1) + ) + (set_local $$prefix$0$i + (i32.const 4111) + ) + (set_local $$y$addr$0$i + (get_local $$181) + ) + ) + ) + ) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $$y$addr$0$i) + ) + (set_local $$185 + (i32.load + (get_global $tempDoublePtr) + ) + ) + (set_local $$186 + (i32.load + (i32.add + (get_global $tempDoublePtr) + (i32.const 4) + ) + ) + ) + (set_local $$187 + (i32.and + (get_local $$186) + (i32.const 2146435072) + ) + ) + (set_local $$188 + (i32.lt_u + (get_local $$187) + (i32.const 2146435072) + ) + ) + (set_local $$189 + (i32.lt_s + (i32.const 0) + (i32.const 0) + ) + ) + (set_local $$190 + (i32.eq + (get_local $$187) + (i32.const 2146435072) + ) + ) + (set_local $$191 + (i32.and + (get_local $$190) + (get_local $$189) + ) + ) + (set_local $$192 + (i32.or + (get_local $$188) + (get_local $$191) + ) + ) + (block $do-once49 + (if + (get_local $$192) + (block + (set_local $$call55$i + (call $_frexpl + (get_local $$y$addr$0$i) + (get_local $$e2$i) + ) + ) + (set_local $$mul$i$240 + (f64.mul + (get_local $$call55$i) + (f64.const 2) + ) + ) + (set_local $$tobool56$i + (f64.ne + (get_local $$mul$i$240) + (f64.const 0) + ) + ) + (if + (get_local $$tobool56$i) + (block + (set_local $$195 + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$dec$i + (i32.add + (get_local $$195) + (i32.const -1) + ) + ) + (i32.store + (get_local $$e2$i) + (get_local $$dec$i) + ) + ) + ) + (set_local $$or$i$241 + (i32.or + (get_local $$t$0) + (i32.const 32) + ) + ) + (set_local $$cmp59$i + (i32.eq + (get_local $$or$i$241) + (i32.const 97) + ) + ) + (if + (get_local $$cmp59$i) + (block + (set_local $$and62$i + (i32.and + (get_local $$t$0) + (i32.const 32) + ) + ) + (set_local $$tobool63$i + (i32.eq + (get_local $$and62$i) + (i32.const 0) + ) + ) + (set_local $$add$ptr65$i + (i32.add + (get_local $$prefix$0$i) + (i32.const 9) + ) + ) + (set_local $$prefix$0$add$ptr65$i + (if (result i32) + (get_local $$tobool63$i) + (get_local $$prefix$0$i) + (get_local $$add$ptr65$i) + ) + ) + (set_local $$add67$i + (i32.or + (get_local $$pl$0$i) + (i32.const 2) + ) + ) + (set_local $$196 + (i32.gt_u + (get_local $$p$0) + (i32.const 11) + ) + ) + (set_local $$sub74$i + (i32.sub + (i32.const 12) + (get_local $$p$0) + ) + ) + (set_local $$tobool76552$i + (i32.eq + (get_local $$sub74$i) + (i32.const 0) + ) + ) + (set_local $$tobool76$i + (i32.or + (get_local $$196) + (get_local $$tobool76552$i) + ) + ) + (block $do-once51 + (if + (get_local $$tobool76$i) + (set_local $$y$addr$1$i + (get_local $$mul$i$240) + ) + (block + (set_local $$re$1482$i + (get_local $$sub74$i) + ) + (set_local $$round$0481$i + (f64.const 8) + ) + (loop $while-in54 + (block $while-out53 + (set_local $$dec78$i + (i32.add + (get_local $$re$1482$i) + (i32.const -1) + ) + ) + (set_local $$mul80$i + (f64.mul + (get_local $$round$0481$i) + (f64.const 16) + ) + ) + (set_local $$tobool79$i + (i32.eq + (get_local $$dec78$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool79$i) + (block + (set_local $$mul80$i$lcssa + (get_local $$mul80$i) + ) + (br $while-out53) + ) + (block + (set_local $$re$1482$i + (get_local $$dec78$i) + ) + (set_local $$round$0481$i + (get_local $$mul80$i) + ) + ) + ) + (br $while-in54) + ) + ) + (set_local $$197 + (i32.load8_s + (get_local $$prefix$0$add$ptr65$i) + ) + ) + (set_local $$cmp82$i + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$197) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 45) + ) + ) + (if + (get_local $$cmp82$i) + (block + (set_local $$sub85$i + (f64.neg + (get_local $$mul$i$240) + ) + ) + (set_local $$sub86$i + (f64.sub + (get_local $$sub85$i) + (get_local $$mul80$i$lcssa) + ) + ) + (set_local $$add87$i + (f64.add + (get_local $$mul80$i$lcssa) + (get_local $$sub86$i) + ) + ) + (set_local $$sub88$i + (f64.neg + (get_local $$add87$i) + ) + ) + (set_local $$y$addr$1$i + (get_local $$sub88$i) + ) + (br $do-once51) + ) + (block + (set_local $$add90$i + (f64.add + (get_local $$mul$i$240) + (get_local $$mul80$i$lcssa) + ) + ) + (set_local $$sub91$i + (f64.sub + (get_local $$add90$i) + (get_local $$mul80$i$lcssa) + ) + ) + (set_local $$y$addr$1$i + (get_local $$sub91$i) + ) + (br $do-once51) + ) + ) + ) + ) + ) + (set_local $$198 + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$cmp94$i + (i32.lt_s + (get_local $$198) + (i32.const 0) + ) + ) + (set_local $$sub97$i + (i32.sub + (i32.const 0) + (get_local $$198) + ) + ) + (set_local $$cond100$i + (if (result i32) + (get_local $$cmp94$i) + (get_local $$sub97$i) + (get_local $$198) + ) + ) + (set_local $$199 + (i32.lt_s + (get_local $$cond100$i) + (i32.const 0) + ) + ) + (set_local $$200 + (i32.shr_s + (i32.shl + (get_local $$199) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$201 + (call $_fmt_u + (get_local $$cond100$i) + (get_local $$200) + (get_local $$arrayidx$i$236) + ) + ) + (set_local $$cmp103$i + (i32.eq + (get_local $$201) + (get_local $$arrayidx$i$236) + ) + ) + (if + (get_local $$cmp103$i) + (block + (i32.store8 + (get_local $$incdec$ptr106$i) + (i32.const 48) + ) + (set_local $$estr$0$i + (get_local $$incdec$ptr106$i) + ) + ) + (set_local $$estr$0$i + (get_local $$201) + ) + ) + (set_local $$202 + (i32.shr_s + (get_local $$198) + (i32.const 31) + ) + ) + (set_local $$203 + (i32.and + (get_local $$202) + (i32.const 2) + ) + ) + (set_local $$204 + (i32.add + (get_local $$203) + (i32.const 43) + ) + ) + (set_local $$conv111$i + (i32.and + (get_local $$204) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr112$i + (i32.add + (get_local $$estr$0$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr112$i) + (get_local $$conv111$i) + ) + (set_local $$add113$i + (i32.add + (get_local $$t$0) + (i32.const 15) + ) + ) + (set_local $$conv114$i + (i32.and + (get_local $$add113$i) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr115$i + (i32.add + (get_local $$estr$0$i) + (i32.const -2) + ) + ) + (i32.store8 + (get_local $$incdec$ptr115$i) + (get_local $$conv114$i) + ) + (set_local $$notrhs$i + (i32.lt_s + (get_local $$p$0) + (i32.const 1) + ) + ) + (set_local $$and134$i + (i32.and + (get_local $$fl$1$and219) + (i32.const 8) + ) + ) + (set_local $$tobool135$i + (i32.eq + (get_local $$and134$i) + (i32.const 0) + ) + ) + (set_local $$s$0$i + (get_local $$buf$i) + ) + (set_local $$y$addr$2$i + (get_local $$y$addr$1$i) + ) + (loop $while-in56 + (block $while-out55 + (set_local $$conv116$i + (i32.trunc_s/f64 + (get_local $$y$addr$2$i) + ) + ) + (set_local $$arrayidx117$i + (i32.add + (i32.const 4075) + (get_local $$conv116$i) + ) + ) + (set_local $$205 + (i32.load8_s + (get_local $$arrayidx117$i) + ) + ) + (set_local $$conv118$393$i + (i32.and + (get_local $$205) + (i32.const 255) + ) + ) + (set_local $$or120$i + (i32.or + (get_local $$conv118$393$i) + (get_local $$and62$i) + ) + ) + (set_local $$conv121$i + (i32.and + (get_local $$or120$i) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr122$i + (i32.add + (get_local $$s$0$i) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $$s$0$i) + (get_local $$conv121$i) + ) + (set_local $$conv123$i + (f64.convert_s/i32 + (get_local $$conv116$i) + ) + ) + (set_local $$sub124$i + (f64.sub + (get_local $$y$addr$2$i) + (get_local $$conv123$i) + ) + ) + (set_local $$mul125$i + (f64.mul + (get_local $$sub124$i) + (f64.const 16) + ) + ) + (set_local $$sub$ptr$lhs$cast$i + (get_local $$incdec$ptr122$i) + ) + (set_local $$sub$ptr$sub$i + (i32.sub + (get_local $$sub$ptr$lhs$cast$i) + (get_local $$sub$ptr$rhs$cast$i) + ) + ) + (set_local $$cmp127$i + (i32.eq + (get_local $$sub$ptr$sub$i) + (i32.const 1) + ) + ) + (block $do-once57 + (if + (get_local $$cmp127$i) + (block + (set_local $$notlhs$i + (f64.eq + (get_local $$mul125$i) + (f64.const 0) + ) + ) + (set_local $$or$cond1$not$i + (i32.and + (get_local $$notrhs$i) + (get_local $$notlhs$i) + ) + ) + (set_local $$or$cond$i + (i32.and + (get_local $$tobool135$i) + (get_local $$or$cond1$not$i) + ) + ) + (if + (get_local $$or$cond$i) + (block + (set_local $$s$1$i + (get_local $$incdec$ptr122$i) + ) + (br $do-once57) + ) + ) + (set_local $$incdec$ptr137$i + (i32.add + (get_local $$s$0$i) + (i32.const 2) + ) + ) + (i32.store8 + (get_local $$incdec$ptr122$i) + (i32.const 46) + ) + (set_local $$s$1$i + (get_local $$incdec$ptr137$i) + ) + ) + (set_local $$s$1$i + (get_local $$incdec$ptr122$i) + ) + ) + ) + (set_local $$tobool139$i + (f64.ne + (get_local $$mul125$i) + (f64.const 0) + ) + ) + (if + (get_local $$tobool139$i) + (block + (set_local $$s$0$i + (get_local $$s$1$i) + ) + (set_local $$y$addr$2$i + (get_local $$mul125$i) + ) + ) + (block + (set_local $$s$1$i$lcssa + (get_local $$s$1$i) + ) + (br $while-out55) + ) + ) + (br $while-in56) + ) + ) + (set_local $$tobool140$i + (i32.ne + (get_local $$p$0) + (i32.const 0) + ) + ) + (set_local $$$pre566$i + (get_local $$s$1$i$lcssa) + ) + (set_local $$sub146$i + (i32.add + (get_local $$sub$ptr$sub145$i) + (get_local $$$pre566$i) + ) + ) + (set_local $$cmp147$i + (i32.lt_s + (get_local $$sub146$i) + (get_local $$p$0) + ) + ) + (set_local $$or$cond384 + (i32.and + (get_local $$tobool140$i) + (get_local $$cmp147$i) + ) + ) + (set_local $$sub$ptr$rhs$cast152$i + (get_local $$incdec$ptr115$i) + ) + (set_local $$add150$i + (i32.add + (get_local $$sub$ptr$sub153$i) + (get_local $$p$0) + ) + ) + (set_local $$add154$i + (i32.sub + (get_local $$add150$i) + (get_local $$sub$ptr$rhs$cast152$i) + ) + ) + (set_local $$sub$ptr$rhs$cast161$i + (get_local $$incdec$ptr115$i) + ) + (set_local $$sub$ptr$sub162$i + (i32.sub + (get_local $$sub$ptr$sub159$i) + (get_local $$sub$ptr$rhs$cast161$i) + ) + ) + (set_local $$add163$i + (i32.add + (get_local $$sub$ptr$sub162$i) + (get_local $$$pre566$i) + ) + ) + (set_local $$l$0$i + (if (result i32) + (get_local $$or$cond384) + (get_local $$add154$i) + (get_local $$add163$i) + ) + ) + (set_local $$add165$i + (i32.add + (get_local $$l$0$i) + (get_local $$add67$i) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$add165$i) + (get_local $$fl$1$and219) + ) + (set_local $$206 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$418$i + (i32.and + (get_local $$206) + (i32.const 32) + ) + ) + (set_local $$tobool$i$419$i + (i32.eq + (get_local $$and$i$418$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$419$i) + (drop + (call $___fwritex + (get_local $$prefix$0$add$ptr65$i) + (get_local $$add67$i) + (get_local $$f) + ) + ) + ) + (set_local $$xor167$i + (i32.xor + (get_local $$fl$1$and219) + (i32.const 65536) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$w$1) + (get_local $$add165$i) + (get_local $$xor167$i) + ) + (set_local $$sub$ptr$sub172$i + (i32.sub + (get_local $$$pre566$i) + (get_local $$sub$ptr$rhs$cast$i) + ) + ) + (set_local $$207 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$424$i + (i32.and + (get_local $$207) + (i32.const 32) + ) + ) + (set_local $$tobool$i$425$i + (i32.eq + (get_local $$and$i$424$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$425$i) + (drop + (call $___fwritex + (get_local $$buf$i) + (get_local $$sub$ptr$sub172$i) + (get_local $$f) + ) + ) + ) + (set_local $$sub$ptr$rhs$cast174$i + (get_local $$incdec$ptr115$i) + ) + (set_local $$sub$ptr$sub175$i + (i32.sub + (get_local $$sub$ptr$lhs$cast160$i) + (get_local $$sub$ptr$rhs$cast174$i) + ) + ) + (set_local $$sum + (i32.add + (get_local $$sub$ptr$sub172$i) + (get_local $$sub$ptr$sub175$i) + ) + ) + (set_local $$sub181$i + (i32.sub + (get_local $$l$0$i) + (get_local $$sum) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$sub181$i) + (i32.const 0) + (i32.const 0) + ) + (set_local $$208 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$430$i + (i32.and + (get_local $$208) + (i32.const 32) + ) + ) + (set_local $$tobool$i$431$i + (i32.eq + (get_local $$and$i$430$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$431$i) + (drop + (call $___fwritex + (get_local $$incdec$ptr115$i) + (get_local $$sub$ptr$sub175$i) + (get_local $$f) + ) + ) + ) + (set_local $$xor186$i + (i32.xor + (get_local $$fl$1$and219) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$add165$i) + (get_local $$xor186$i) + ) + (set_local $$cmp188$i + (i32.lt_s + (get_local $$add165$i) + (get_local $$w$1) + ) + ) + (set_local $$w$add165$i + (if (result i32) + (get_local $$cmp188$i) + (get_local $$w$1) + (get_local $$add165$i) + ) + ) + (set_local $$retval$0$i + (get_local $$w$add165$i) + ) + (br $do-once49) + ) + ) + (set_local $$cmp196$i + (i32.lt_s + (get_local $$p$0) + (i32.const 0) + ) + ) + (set_local $$$p$i + (if (result i32) + (get_local $$cmp196$i) + (i32.const 6) + (get_local $$p$0) + ) + ) + (if + (get_local $$tobool56$i) + (block + (set_local $$mul202$i + (f64.mul + (get_local $$mul$i$240) + (f64.const 268435456) + ) + ) + (set_local $$209 + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$sub203$i + (i32.add + (get_local $$209) + (i32.const -28) + ) + ) + (i32.store + (get_local $$e2$i) + (get_local $$sub203$i) + ) + (set_local $$210 + (get_local $$sub203$i) + ) + (set_local $$y$addr$3$i + (get_local $$mul202$i) + ) + ) + (block + (set_local $$$pre564$i + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$210 + (get_local $$$pre564$i) + ) + (set_local $$y$addr$3$i + (get_local $$mul$i$240) + ) + ) + ) + (set_local $$cmp205$i + (i32.lt_s + (get_local $$210) + (i32.const 0) + ) + ) + (set_local $$arraydecay208$add$ptr213$i + (if (result i32) + (get_local $$cmp205$i) + (get_local $$big$i) + (get_local $$add$ptr213$i) + ) + ) + (set_local $$sub$ptr$rhs$cast345$i + (get_local $$arraydecay208$add$ptr213$i) + ) + (set_local $$y$addr$4$i + (get_local $$y$addr$3$i) + ) + (set_local $$z$0$i + (get_local $$arraydecay208$add$ptr213$i) + ) + (loop $while-in60 + (block $while-out59 + (set_local $$conv216$i + (i32.trunc_u/f64 + (get_local $$y$addr$4$i) + ) + ) + (i32.store + (get_local $$z$0$i) + (get_local $$conv216$i) + ) + (set_local $$incdec$ptr217$i + (i32.add + (get_local $$z$0$i) + (i32.const 4) + ) + ) + (set_local $$conv218$i + (f64.convert_u/i32 + (get_local $$conv216$i) + ) + ) + (set_local $$sub219$i + (f64.sub + (get_local $$y$addr$4$i) + (get_local $$conv218$i) + ) + ) + (set_local $$mul220$i + (f64.mul + (get_local $$sub219$i) + (f64.const 1e9) + ) + ) + (set_local $$tobool222$i + (f64.ne + (get_local $$mul220$i) + (f64.const 0) + ) + ) + (if + (get_local $$tobool222$i) + (block + (set_local $$y$addr$4$i + (get_local $$mul220$i) + ) + (set_local $$z$0$i + (get_local $$incdec$ptr217$i) + ) + ) + (block + (set_local $$incdec$ptr217$i$lcssa + (get_local $$incdec$ptr217$i) + ) + (br $while-out59) + ) + ) + (br $while-in60) + ) + ) + (set_local $$$pr$i + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$cmp225$547$i + (i32.gt_s + (get_local $$$pr$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp225$547$i) + (block + (set_local $$211 + (get_local $$$pr$i) + ) + (set_local $$a$1549$i + (get_local $$arraydecay208$add$ptr213$i) + ) + (set_local $$z$1548$i + (get_local $$incdec$ptr217$i$lcssa) + ) + (loop $while-in62 + (block $while-out61 + (set_local $$cmp228$i + (i32.gt_s + (get_local $$211) + (i32.const 29) + ) + ) + (set_local $$cond233$i + (if (result i32) + (get_local $$cmp228$i) + (i32.const 29) + (get_local $$211) + ) + ) + (set_local $$d$0$542$i + (i32.add + (get_local $$z$1548$i) + (i32.const -4) + ) + ) + (set_local $$cmp235$543$i + (i32.lt_u + (get_local $$d$0$542$i) + (get_local $$a$1549$i) + ) + ) + (block $do-once63 + (if + (get_local $$cmp235$543$i) + (set_local $$a$2$ph$i + (get_local $$a$1549$i) + ) + (block + (set_local $$carry$0544$i + (i32.const 0) + ) + (set_local $$d$0545$i + (get_local $$d$0$542$i) + ) + (loop $while-in66 + (block $while-out65 + (set_local $$212 + (i32.load + (get_local $$d$0545$i) + ) + ) + (set_local $$213 + (call $_bitshift64Shl + (get_local $$212) + (i32.const 0) + (get_local $$cond233$i) + ) + ) + (set_local $$214 + (get_global $tempRet0) + ) + (set_local $$215 + (call $_i64Add + (get_local $$213) + (get_local $$214) + (get_local $$carry$0544$i) + (i32.const 0) + ) + ) + (set_local $$216 + (get_global $tempRet0) + ) + (set_local $$217 + (call $___uremdi3 + (get_local $$215) + (get_local $$216) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (set_local $$218 + (get_global $tempRet0) + ) + (i32.store + (get_local $$d$0545$i) + (get_local $$217) + ) + (set_local $$219 + (call $___udivdi3 + (get_local $$215) + (get_local $$216) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (set_local $$220 + (get_global $tempRet0) + ) + (set_local $$d$0$i + (i32.add + (get_local $$d$0545$i) + (i32.const -4) + ) + ) + (set_local $$cmp235$i + (i32.lt_u + (get_local $$d$0$i) + (get_local $$a$1549$i) + ) + ) + (if + (get_local $$cmp235$i) + (block + (set_local $$conv242$i$lcssa + (get_local $$219) + ) + (br $while-out65) + ) + (block + (set_local $$carry$0544$i + (get_local $$219) + ) + (set_local $$d$0545$i + (get_local $$d$0$i) + ) + ) + ) + (br $while-in66) + ) + ) + (set_local $$tobool244$i + (i32.eq + (get_local $$conv242$i$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$tobool244$i) + (block + (set_local $$a$2$ph$i + (get_local $$a$1549$i) + ) + (br $do-once63) + ) + ) + (set_local $$incdec$ptr246$i + (i32.add + (get_local $$a$1549$i) + (i32.const -4) + ) + ) + (i32.store + (get_local $$incdec$ptr246$i) + (get_local $$conv242$i$lcssa) + ) + (set_local $$a$2$ph$i + (get_local $$incdec$ptr246$i) + ) + ) + ) + ) + (set_local $$z$2$i + (get_local $$z$1548$i) + ) + (loop $while-in68 + (block $while-out67 + (set_local $$cmp249$i + (i32.gt_u + (get_local $$z$2$i) + (get_local $$a$2$ph$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp249$i) + ) + (block + (set_local $$z$2$i$lcssa + (get_local $$z$2$i) + ) + (br $while-out67) + ) + ) + (set_local $$arrayidx251$i + (i32.add + (get_local $$z$2$i) + (i32.const -4) + ) + ) + (set_local $$221 + (i32.load + (get_local $$arrayidx251$i) + ) + ) + (set_local $$lnot$i + (i32.eq + (get_local $$221) + (i32.const 0) + ) + ) + (if + (get_local $$lnot$i) + (set_local $$z$2$i + (get_local $$arrayidx251$i) + ) + (block + (set_local $$z$2$i$lcssa + (get_local $$z$2$i) + ) + (br $while-out67) + ) + ) + (br $while-in68) + ) + ) + (set_local $$222 + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$sub256$i + (i32.sub + (get_local $$222) + (get_local $$cond233$i) + ) + ) + (i32.store + (get_local $$e2$i) + (get_local $$sub256$i) + ) + (set_local $$cmp225$i + (i32.gt_s + (get_local $$sub256$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp225$i) + (block + (set_local $$211 + (get_local $$sub256$i) + ) + (set_local $$a$1549$i + (get_local $$a$2$ph$i) + ) + (set_local $$z$1548$i + (get_local $$z$2$i$lcssa) + ) + ) + (block + (set_local $$$pr477$i + (get_local $$sub256$i) + ) + (set_local $$a$1$lcssa$i + (get_local $$a$2$ph$i) + ) + (set_local $$z$1$lcssa$i + (get_local $$z$2$i$lcssa) + ) + (br $while-out61) + ) + ) + (br $while-in62) + ) + ) + ) + (block + (set_local $$$pr477$i + (get_local $$$pr$i) + ) + (set_local $$a$1$lcssa$i + (get_local $$arraydecay208$add$ptr213$i) + ) + (set_local $$z$1$lcssa$i + (get_local $$incdec$ptr217$i$lcssa) + ) + ) + ) + (set_local $$cmp259$537$i + (i32.lt_s + (get_local $$$pr477$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp259$537$i) + (block + (set_local $$add273$i + (i32.add + (get_local $$$p$i) + (i32.const 25) + ) + ) + (set_local $$div274$i + (i32.and + (i32.div_s + (get_local $$add273$i) + (i32.const 9) + ) + (i32.const -1) + ) + ) + (set_local $$add275$i + (i32.add + (get_local $$div274$i) + (i32.const 1) + ) + ) + (set_local $$cmp299$i + (i32.eq + (get_local $$or$i$241) + (i32.const 102) + ) + ) + (set_local $$223 + (get_local $$$pr477$i) + ) + (set_local $$a$3539$i + (get_local $$a$1$lcssa$i) + ) + (set_local $$z$3538$i + (get_local $$z$1$lcssa$i) + ) + (loop $while-in70 + (block $while-out69 + (set_local $$sub264$i + (i32.sub + (i32.const 0) + (get_local $$223) + ) + ) + (set_local $$cmp265$i + (i32.gt_s + (get_local $$sub264$i) + (i32.const 9) + ) + ) + (set_local $$cond271$i + (if (result i32) + (get_local $$cmp265$i) + (i32.const 9) + (get_local $$sub264$i) + ) + ) + (set_local $$cmp277$533$i + (i32.lt_u + (get_local $$a$3539$i) + (get_local $$z$3538$i) + ) + ) + (block $do-once71 + (if + (get_local $$cmp277$533$i) + (block + (set_local $$shl280$i + (i32.shl + (i32.const 1) + (get_local $$cond271$i) + ) + ) + (set_local $$sub281$i + (i32.add + (get_local $$shl280$i) + (i32.const -1) + ) + ) + (set_local $$shr285$i + (i32.shr_u + (i32.const 1000000000) + (get_local $$cond271$i) + ) + ) + (set_local $$carry262$0535$i + (i32.const 0) + ) + (set_local $$d$1534$i + (get_local $$a$3539$i) + ) + (loop $while-in74 + (block $while-out73 + (set_local $$225 + (i32.load + (get_local $$d$1534$i) + ) + ) + (set_local $$and282$i + (i32.and + (get_local $$225) + (get_local $$sub281$i) + ) + ) + (set_local $$shr283$i + (i32.shr_u + (get_local $$225) + (get_local $$cond271$i) + ) + ) + (set_local $$add284$i + (i32.add + (get_local $$shr283$i) + (get_local $$carry262$0535$i) + ) + ) + (i32.store + (get_local $$d$1534$i) + (get_local $$add284$i) + ) + (set_local $$mul286$i + (i32.mul + (get_local $$and282$i) + (get_local $$shr285$i) + ) + ) + (set_local $$incdec$ptr288$i + (i32.add + (get_local $$d$1534$i) + (i32.const 4) + ) + ) + (set_local $$cmp277$i + (i32.lt_u + (get_local $$incdec$ptr288$i) + (get_local $$z$3538$i) + ) + ) + (if + (get_local $$cmp277$i) + (block + (set_local $$carry262$0535$i + (get_local $$mul286$i) + ) + (set_local $$d$1534$i + (get_local $$incdec$ptr288$i) + ) + ) + (block + (set_local $$mul286$i$lcssa + (get_local $$mul286$i) + ) + (br $while-out73) + ) + ) + (br $while-in74) + ) + ) + (set_local $$226 + (i32.load + (get_local $$a$3539$i) + ) + ) + (set_local $$tobool290$i + (i32.eq + (get_local $$226) + (i32.const 0) + ) + ) + (set_local $$incdec$ptr292$i + (i32.add + (get_local $$a$3539$i) + (i32.const 4) + ) + ) + (set_local $$incdec$ptr292$a$3$i + (if (result i32) + (get_local $$tobool290$i) + (get_local $$incdec$ptr292$i) + (get_local $$a$3539$i) + ) + ) + (set_local $$tobool294$i + (i32.eq + (get_local $$mul286$i$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$tobool294$i) + (block + (set_local $$incdec$ptr292$a$3573$i + (get_local $$incdec$ptr292$a$3$i) + ) + (set_local $$z$4$i + (get_local $$z$3538$i) + ) + (br $do-once71) + ) + ) + (set_local $$incdec$ptr296$i + (i32.add + (get_local $$z$3538$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$z$3538$i) + (get_local $$mul286$i$lcssa) + ) + (set_local $$incdec$ptr292$a$3573$i + (get_local $$incdec$ptr292$a$3$i) + ) + (set_local $$z$4$i + (get_local $$incdec$ptr296$i) + ) + ) + (block + (set_local $$224 + (i32.load + (get_local $$a$3539$i) + ) + ) + (set_local $$tobool290$569$i + (i32.eq + (get_local $$224) + (i32.const 0) + ) + ) + (set_local $$incdec$ptr292$570$i + (i32.add + (get_local $$a$3539$i) + (i32.const 4) + ) + ) + (set_local $$incdec$ptr292$a$3$571$i + (if (result i32) + (get_local $$tobool290$569$i) + (get_local $$incdec$ptr292$570$i) + (get_local $$a$3539$i) + ) + ) + (set_local $$incdec$ptr292$a$3573$i + (get_local $$incdec$ptr292$a$3$571$i) + ) + (set_local $$z$4$i + (get_local $$z$3538$i) + ) + ) + ) + ) + (set_local $$cond304$i + (if (result i32) + (get_local $$cmp299$i) + (get_local $$arraydecay208$add$ptr213$i) + (get_local $$incdec$ptr292$a$3573$i) + ) + ) + (set_local $$sub$ptr$lhs$cast305$i + (get_local $$z$4$i) + ) + (set_local $$sub$ptr$rhs$cast306$i + (get_local $$cond304$i) + ) + (set_local $$sub$ptr$sub307$i + (i32.sub + (get_local $$sub$ptr$lhs$cast305$i) + (get_local $$sub$ptr$rhs$cast306$i) + ) + ) + (set_local $$sub$ptr$div$i + (i32.shr_s + (get_local $$sub$ptr$sub307$i) + (i32.const 2) + ) + ) + (set_local $$cmp308$i + (i32.gt_s + (get_local $$sub$ptr$div$i) + (get_local $$add275$i) + ) + ) + (set_local $$add$ptr311$i + (i32.add + (get_local $$cond304$i) + (i32.shl + (get_local $$add275$i) + (i32.const 2) + ) + ) + ) + (set_local $$add$ptr311$z$4$i + (if (result i32) + (get_local $$cmp308$i) + (get_local $$add$ptr311$i) + (get_local $$z$4$i) + ) + ) + (set_local $$227 + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$add313$i + (i32.add + (get_local $$227) + (get_local $$cond271$i) + ) + ) + (i32.store + (get_local $$e2$i) + (get_local $$add313$i) + ) + (set_local $$cmp259$i + (i32.lt_s + (get_local $$add313$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp259$i) + (block + (set_local $$223 + (get_local $$add313$i) + ) + (set_local $$a$3539$i + (get_local $$incdec$ptr292$a$3573$i) + ) + (set_local $$z$3538$i + (get_local $$add$ptr311$z$4$i) + ) + ) + (block + (set_local $$a$3$lcssa$i + (get_local $$incdec$ptr292$a$3573$i) + ) + (set_local $$z$3$lcssa$i + (get_local $$add$ptr311$z$4$i) + ) + (br $while-out69) + ) + ) + (br $while-in70) + ) + ) + ) + (block + (set_local $$a$3$lcssa$i + (get_local $$a$1$lcssa$i) + ) + (set_local $$z$3$lcssa$i + (get_local $$z$1$lcssa$i) + ) + ) + ) + (set_local $$cmp315$i + (i32.lt_u + (get_local $$a$3$lcssa$i) + (get_local $$z$3$lcssa$i) + ) + ) + (block $do-once75 + (if + (get_local $$cmp315$i) + (block + (set_local $$sub$ptr$rhs$cast319$i + (get_local $$a$3$lcssa$i) + ) + (set_local $$sub$ptr$sub320$i + (i32.sub + (get_local $$sub$ptr$rhs$cast345$i) + (get_local $$sub$ptr$rhs$cast319$i) + ) + ) + (set_local $$sub$ptr$div321$i + (i32.shr_s + (get_local $$sub$ptr$sub320$i) + (i32.const 2) + ) + ) + (set_local $$mul322$i + (i32.mul + (get_local $$sub$ptr$div321$i) + (i32.const 9) + ) + ) + (set_local $$228 + (i32.load + (get_local $$a$3$lcssa$i) + ) + ) + (set_local $$cmp324$529$i + (i32.lt_u + (get_local $$228) + (i32.const 10) + ) + ) + (if + (get_local $$cmp324$529$i) + (block + (set_local $$e$1$i + (get_local $$mul322$i) + ) + (br $do-once75) + ) + (block + (set_local $$e$0531$i + (get_local $$mul322$i) + ) + (set_local $$i$0530$i + (i32.const 10) + ) + ) + ) + (loop $while-in78 + (block $while-out77 + (set_local $$mul328$i + (i32.mul + (get_local $$i$0530$i) + (i32.const 10) + ) + ) + (set_local $$inc$i + (i32.add + (get_local $$e$0531$i) + (i32.const 1) + ) + ) + (set_local $$cmp324$i + (i32.lt_u + (get_local $$228) + (get_local $$mul328$i) + ) + ) + (if + (get_local $$cmp324$i) + (block + (set_local $$e$1$i + (get_local $$inc$i) + ) + (br $while-out77) + ) + (block + (set_local $$e$0531$i + (get_local $$inc$i) + ) + (set_local $$i$0530$i + (get_local $$mul328$i) + ) + ) + ) + (br $while-in78) + ) + ) + ) + (set_local $$e$1$i + (i32.const 0) + ) + ) + ) + (set_local $$cmp333$i + (i32.ne + (get_local $$or$i$241) + (i32.const 102) + ) + ) + (set_local $$mul335$i + (if (result i32) + (get_local $$cmp333$i) + (get_local $$e$1$i) + (i32.const 0) + ) + ) + (set_local $$sub336$i + (i32.sub + (get_local $$$p$i) + (get_local $$mul335$i) + ) + ) + (set_local $$cmp338$i + (i32.eq + (get_local $$or$i$241) + (i32.const 103) + ) + ) + (set_local $$tobool341$i + (i32.ne + (get_local $$$p$i) + (i32.const 0) + ) + ) + (set_local $$229 + (i32.and + (get_local $$tobool341$i) + (get_local $$cmp338$i) + ) + ) + (set_local $$land$ext$neg$i + (i32.shr_s + (i32.shl + (get_local $$229) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$sub343$i + (i32.add + (get_local $$sub336$i) + (get_local $$land$ext$neg$i) + ) + ) + (set_local $$sub$ptr$lhs$cast344$i + (get_local $$z$3$lcssa$i) + ) + (set_local $$sub$ptr$sub346$i + (i32.sub + (get_local $$sub$ptr$lhs$cast344$i) + (get_local $$sub$ptr$rhs$cast345$i) + ) + ) + (set_local $$sub$ptr$div347$i + (i32.shr_s + (get_local $$sub$ptr$sub346$i) + (i32.const 2) + ) + ) + (set_local $$230 + (i32.mul + (get_local $$sub$ptr$div347$i) + (i32.const 9) + ) + ) + (set_local $$mul349$i + (i32.add + (get_local $$230) + (i32.const -9) + ) + ) + (set_local $$cmp350$i + (i32.lt_s + (get_local $$sub343$i) + (get_local $$mul349$i) + ) + ) + (if + (get_local $$cmp350$i) + (block + (set_local $$add$ptr354$i + (i32.add + (get_local $$arraydecay208$add$ptr213$i) + (i32.const 4) + ) + ) + (set_local $$add355$i + (i32.add + (get_local $$sub343$i) + (i32.const 9216) + ) + ) + (set_local $$div356$i + (i32.and + (i32.div_s + (get_local $$add355$i) + (i32.const 9) + ) + (i32.const -1) + ) + ) + (set_local $$sub357$i + (i32.add + (get_local $$div356$i) + (i32.const -1024) + ) + ) + (set_local $$add$ptr358$i + (i32.add + (get_local $$add$ptr354$i) + (i32.shl + (get_local $$sub357$i) + (i32.const 2) + ) + ) + ) + (set_local $$rem360$i + (i32.and + (i32.rem_s + (get_local $$add355$i) + (i32.const 9) + ) + (i32.const -1) + ) + ) + (set_local $$j$0$524$i + (i32.add + (get_local $$rem360$i) + (i32.const 1) + ) + ) + (set_local $$cmp363$525$i + (i32.lt_s + (get_local $$j$0$524$i) + (i32.const 9) + ) + ) + (if + (get_local $$cmp363$525$i) + (block + (set_local $$i$1526$i + (i32.const 10) + ) + (set_local $$j$0527$i + (get_local $$j$0$524$i) + ) + (loop $while-in80 + (block $while-out79 + (set_local $$mul367$i + (i32.mul + (get_local $$i$1526$i) + (i32.const 10) + ) + ) + (set_local $$j$0$i + (i32.add + (get_local $$j$0527$i) + (i32.const 1) + ) + ) + (set_local $$exitcond$i + (i32.eq + (get_local $$j$0$i) + (i32.const 9) + ) + ) + (if + (get_local $$exitcond$i) + (block + (set_local $$i$1$lcssa$i + (get_local $$mul367$i) + ) + (br $while-out79) + ) + (block + (set_local $$i$1526$i + (get_local $$mul367$i) + ) + (set_local $$j$0527$i + (get_local $$j$0$i) + ) + ) + ) + (br $while-in80) + ) + ) + ) + (set_local $$i$1$lcssa$i + (i32.const 10) + ) + ) + (set_local $$231 + (i32.load + (get_local $$add$ptr358$i) + ) + ) + (set_local $$rem370$i + (i32.and + (i32.rem_u + (get_local $$231) + (get_local $$i$1$lcssa$i) + ) + (i32.const -1) + ) + ) + (set_local $$tobool371$i + (i32.eq + (get_local $$rem370$i) + (i32.const 0) + ) + ) + (set_local $$add$ptr373$i + (i32.add + (get_local $$add$ptr358$i) + (i32.const 4) + ) + ) + (set_local $$cmp374$i + (i32.eq + (get_local $$add$ptr373$i) + (get_local $$z$3$lcssa$i) + ) + ) + (set_local $$or$cond395$i + (i32.and + (get_local $$cmp374$i) + (get_local $$tobool371$i) + ) + ) + (block $do-once81 + (if + (get_local $$or$cond395$i) + (block + (set_local $$a$8$i + (get_local $$a$3$lcssa$i) + ) + (set_local $$d$4$i + (get_local $$add$ptr358$i) + ) + (set_local $$e$4$i + (get_local $$e$1$i) + ) + ) + (block + (set_local $$div378$i + (i32.and + (i32.div_u + (get_local $$231) + (get_local $$i$1$lcssa$i) + ) + (i32.const -1) + ) + ) + (set_local $$and379$i + (i32.and + (get_local $$div378$i) + (i32.const 1) + ) + ) + (set_local $$tobool380$i + (i32.eq + (get_local $$and379$i) + (i32.const 0) + ) + ) + (set_local $$$396$i + (if (result f64) + (get_local $$tobool380$i) + (f64.const 9007199254740992) + (f64.const 9007199254740994) + ) + ) + (set_local $$div384$i + (i32.and + (i32.div_s + (get_local $$i$1$lcssa$i) + (i32.const 2) + ) + (i32.const -1) + ) + ) + (set_local $$cmp385$i + (i32.lt_u + (get_local $$rem370$i) + (get_local $$div384$i) + ) + ) + (if + (get_local $$cmp385$i) + (set_local $$small$0$i + (f64.const 0.5) + ) + (block + (set_local $$cmp390$i + (i32.eq + (get_local $$rem370$i) + (get_local $$div384$i) + ) + ) + (set_local $$or$cond397$i + (i32.and + (get_local $$cmp374$i) + (get_local $$cmp390$i) + ) + ) + (set_local $$$404$i + (if (result f64) + (get_local $$or$cond397$i) + (f64.const 1) + (f64.const 1.5) + ) + ) + (set_local $$small$0$i + (get_local $$$404$i) + ) + ) + ) + (set_local $$tobool400$i + (i32.eq + (get_local $$pl$0$i) + (i32.const 0) + ) + ) + (block $do-once83 + (if + (get_local $$tobool400$i) + (block + (set_local $$round377$1$i + (get_local $$$396$i) + ) + (set_local $$small$1$i + (get_local $$small$0$i) + ) + ) + (block + (set_local $$232 + (i32.load8_s + (get_local $$prefix$0$i) + ) + ) + (set_local $$cmp403$i + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$232) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 45) + ) + ) + (if + (i32.eqz + (get_local $$cmp403$i) + ) + (block + (set_local $$round377$1$i + (get_local $$$396$i) + ) + (set_local $$small$1$i + (get_local $$small$0$i) + ) + (br $do-once83) + ) + ) + (set_local $$mul406$i + (f64.neg + (get_local $$$396$i) + ) + ) + (set_local $$mul407$i + (f64.neg + (get_local $$small$0$i) + ) + ) + (set_local $$round377$1$i + (get_local $$mul406$i) + ) + (set_local $$small$1$i + (get_local $$mul407$i) + ) + ) + ) + ) + (set_local $$sub409$i + (i32.sub + (get_local $$231) + (get_local $$rem370$i) + ) + ) + (i32.store + (get_local $$add$ptr358$i) + (get_local $$sub409$i) + ) + (set_local $$add410$i + (f64.add + (get_local $$round377$1$i) + (get_local $$small$1$i) + ) + ) + (set_local $$cmp411$i + (f64.ne + (get_local $$add410$i) + (get_local $$round377$1$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp411$i) + ) + (block + (set_local $$a$8$i + (get_local $$a$3$lcssa$i) + ) + (set_local $$d$4$i + (get_local $$add$ptr358$i) + ) + (set_local $$e$4$i + (get_local $$e$1$i) + ) + (br $do-once81) + ) + ) + (set_local $$add414$i + (i32.add + (get_local $$sub409$i) + (get_local $$i$1$lcssa$i) + ) + ) + (i32.store + (get_local $$add$ptr358$i) + (get_local $$add414$i) + ) + (set_local $$cmp416$519$i + (i32.gt_u + (get_local $$add414$i) + (i32.const 999999999) + ) + ) + (if + (get_local $$cmp416$519$i) + (block + (set_local $$a$5521$i + (get_local $$a$3$lcssa$i) + ) + (set_local $$d$2520$i + (get_local $$add$ptr358$i) + ) + (loop $while-in86 + (block $while-out85 + (set_local $$incdec$ptr419$i + (i32.add + (get_local $$d$2520$i) + (i32.const -4) + ) + ) + (i32.store + (get_local $$d$2520$i) + (i32.const 0) + ) + (set_local $$cmp420$i + (i32.lt_u + (get_local $$incdec$ptr419$i) + (get_local $$a$5521$i) + ) + ) + (if + (get_local $$cmp420$i) + (block + (set_local $$incdec$ptr423$i + (i32.add + (get_local $$a$5521$i) + (i32.const -4) + ) + ) + (i32.store + (get_local $$incdec$ptr423$i) + (i32.const 0) + ) + (set_local $$a$6$i + (get_local $$incdec$ptr423$i) + ) + ) + (set_local $$a$6$i + (get_local $$a$5521$i) + ) + ) + (set_local $$233 + (i32.load + (get_local $$incdec$ptr419$i) + ) + ) + (set_local $$inc425$i + (i32.add + (get_local $$233) + (i32.const 1) + ) + ) + (i32.store + (get_local $$incdec$ptr419$i) + (get_local $$inc425$i) + ) + (set_local $$cmp416$i + (i32.gt_u + (get_local $$inc425$i) + (i32.const 999999999) + ) + ) + (if + (get_local $$cmp416$i) + (block + (set_local $$a$5521$i + (get_local $$a$6$i) + ) + (set_local $$d$2520$i + (get_local $$incdec$ptr419$i) + ) + ) + (block + (set_local $$a$5$lcssa$i + (get_local $$a$6$i) + ) + (set_local $$d$2$lcssa$i + (get_local $$incdec$ptr419$i) + ) + (br $while-out85) + ) + ) + (br $while-in86) + ) + ) + ) + (block + (set_local $$a$5$lcssa$i + (get_local $$a$3$lcssa$i) + ) + (set_local $$d$2$lcssa$i + (get_local $$add$ptr358$i) + ) + ) + ) + (set_local $$sub$ptr$rhs$cast428$i + (get_local $$a$5$lcssa$i) + ) + (set_local $$sub$ptr$sub429$i + (i32.sub + (get_local $$sub$ptr$rhs$cast345$i) + (get_local $$sub$ptr$rhs$cast428$i) + ) + ) + (set_local $$sub$ptr$div430$i + (i32.shr_s + (get_local $$sub$ptr$sub429$i) + (i32.const 2) + ) + ) + (set_local $$mul431$i + (i32.mul + (get_local $$sub$ptr$div430$i) + (i32.const 9) + ) + ) + (set_local $$234 + (i32.load + (get_local $$a$5$lcssa$i) + ) + ) + (set_local $$cmp433$515$i + (i32.lt_u + (get_local $$234) + (i32.const 10) + ) + ) + (if + (get_local $$cmp433$515$i) + (block + (set_local $$a$8$i + (get_local $$a$5$lcssa$i) + ) + (set_local $$d$4$i + (get_local $$d$2$lcssa$i) + ) + (set_local $$e$4$i + (get_local $$mul431$i) + ) + (br $do-once81) + ) + (block + (set_local $$e$2517$i + (get_local $$mul431$i) + ) + (set_local $$i$2516$i + (i32.const 10) + ) + ) + ) + (loop $while-in88 + (block $while-out87 + (set_local $$mul437$i + (i32.mul + (get_local $$i$2516$i) + (i32.const 10) + ) + ) + (set_local $$inc438$i + (i32.add + (get_local $$e$2517$i) + (i32.const 1) + ) + ) + (set_local $$cmp433$i + (i32.lt_u + (get_local $$234) + (get_local $$mul437$i) + ) + ) + (if + (get_local $$cmp433$i) + (block + (set_local $$a$8$i + (get_local $$a$5$lcssa$i) + ) + (set_local $$d$4$i + (get_local $$d$2$lcssa$i) + ) + (set_local $$e$4$i + (get_local $$inc438$i) + ) + (br $while-out87) + ) + (block + (set_local $$e$2517$i + (get_local $$inc438$i) + ) + (set_local $$i$2516$i + (get_local $$mul437$i) + ) + ) + ) + (br $while-in88) + ) + ) + ) + ) + ) + (set_local $$add$ptr442$i + (i32.add + (get_local $$d$4$i) + (i32.const 4) + ) + ) + (set_local $$cmp443$i + (i32.gt_u + (get_local $$z$3$lcssa$i) + (get_local $$add$ptr442$i) + ) + ) + (set_local $$add$ptr442$z$3$i + (if (result i32) + (get_local $$cmp443$i) + (get_local $$add$ptr442$i) + (get_local $$z$3$lcssa$i) + ) + ) + (set_local $$a$9$ph$i + (get_local $$a$8$i) + ) + (set_local $$e$5$ph$i + (get_local $$e$4$i) + ) + (set_local $$z$7$ph$i + (get_local $$add$ptr442$z$3$i) + ) + ) + (block + (set_local $$a$9$ph$i + (get_local $$a$3$lcssa$i) + ) + (set_local $$e$5$ph$i + (get_local $$e$1$i) + ) + (set_local $$z$7$ph$i + (get_local $$z$3$lcssa$i) + ) + ) + ) + (set_local $$sub626$le$i + (i32.sub + (i32.const 0) + (get_local $$e$5$ph$i) + ) + ) + (set_local $$z$7$i + (get_local $$z$7$ph$i) + ) + (loop $while-in90 + (block $while-out89 + (set_local $$cmp450$i + (i32.gt_u + (get_local $$z$7$i) + (get_local $$a$9$ph$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp450$i) + ) + (block + (set_local $$cmp450$lcssa$i + (i32.const 0) + ) + (set_local $$z$7$i$lcssa + (get_local $$z$7$i) + ) + (br $while-out89) + ) + ) + (set_local $$arrayidx453$i + (i32.add + (get_local $$z$7$i) + (i32.const -4) + ) + ) + (set_local $$235 + (i32.load + (get_local $$arrayidx453$i) + ) + ) + (set_local $$lnot455$i + (i32.eq + (get_local $$235) + (i32.const 0) + ) + ) + (if + (get_local $$lnot455$i) + (set_local $$z$7$i + (get_local $$arrayidx453$i) + ) + (block + (set_local $$cmp450$lcssa$i + (i32.const 1) + ) + (set_local $$z$7$i$lcssa + (get_local $$z$7$i) + ) + (br $while-out89) + ) + ) + (br $while-in90) + ) + ) + (block $do-once91 + (if + (get_local $$cmp338$i) + (block + (set_local $$236 + (i32.and + (get_local $$tobool341$i) + (i32.const 1) + ) + ) + (set_local $$inc468$i + (i32.xor + (get_local $$236) + (i32.const 1) + ) + ) + (set_local $$$p$inc468$i + (i32.add + (get_local $$inc468$i) + (get_local $$$p$i) + ) + ) + (set_local $$cmp470$i + (i32.gt_s + (get_local $$$p$inc468$i) + (get_local $$e$5$ph$i) + ) + ) + (set_local $$cmp473$i + (i32.gt_s + (get_local $$e$5$ph$i) + (i32.const -5) + ) + ) + (set_local $$or$cond2$i + (i32.and + (get_local $$cmp470$i) + (get_local $$cmp473$i) + ) + ) + (if + (get_local $$or$cond2$i) + (block + (set_local $$dec476$i + (i32.add + (get_local $$t$0) + (i32.const -1) + ) + ) + (set_local $$add477$neg$i + (i32.add + (get_local $$$p$inc468$i) + (i32.const -1) + ) + ) + (set_local $$sub478$i + (i32.sub + (get_local $$add477$neg$i) + (get_local $$e$5$ph$i) + ) + ) + (set_local $$p$addr$2$i + (get_local $$sub478$i) + ) + (set_local $$t$addr$0$i + (get_local $$dec476$i) + ) + ) + (block + (set_local $$sub480$i + (i32.add + (get_local $$t$0) + (i32.const -2) + ) + ) + (set_local $$dec481$i + (i32.add + (get_local $$$p$inc468$i) + (i32.const -1) + ) + ) + (set_local $$p$addr$2$i + (get_local $$dec481$i) + ) + (set_local $$t$addr$0$i + (get_local $$sub480$i) + ) + ) + ) + (set_local $$and483$i + (i32.and + (get_local $$fl$1$and219) + (i32.const 8) + ) + ) + (set_local $$tobool484$i + (i32.eq + (get_local $$and483$i) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool484$i) + ) + (block + (set_local $$and610$pre$phi$iZ2D + (get_local $$and483$i) + ) + (set_local $$p$addr$3$i + (get_local $$p$addr$2$i) + ) + (set_local $$t$addr$1$i + (get_local $$t$addr$0$i) + ) + (br $do-once91) + ) + ) + (block $do-once93 + (if + (get_local $$cmp450$lcssa$i) + (block + (set_local $$arrayidx489$i + (i32.add + (get_local $$z$7$i$lcssa) + (i32.const -4) + ) + ) + (set_local $$237 + (i32.load + (get_local $$arrayidx489$i) + ) + ) + (set_local $$tobool490$i + (i32.eq + (get_local $$237) + (i32.const 0) + ) + ) + (if + (get_local $$tobool490$i) + (block + (set_local $$j$2$i + (i32.const 9) + ) + (br $do-once93) + ) + ) + (set_local $$rem494$510$i + (i32.and + (i32.rem_u + (get_local $$237) + (i32.const 10) + ) + (i32.const -1) + ) + ) + (set_local $$cmp495$511$i + (i32.eq + (get_local $$rem494$510$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp495$511$i) + (block + (set_local $$i$3512$i + (i32.const 10) + ) + (set_local $$j$1513$i + (i32.const 0) + ) + ) + (block + (set_local $$j$2$i + (i32.const 0) + ) + (br $do-once93) + ) + ) + (loop $while-in96 + (block $while-out95 + (set_local $$mul499$i + (i32.mul + (get_local $$i$3512$i) + (i32.const 10) + ) + ) + (set_local $$inc500$i + (i32.add + (get_local $$j$1513$i) + (i32.const 1) + ) + ) + (set_local $$rem494$i + (i32.and + (i32.rem_u + (get_local $$237) + (get_local $$mul499$i) + ) + (i32.const -1) + ) + ) + (set_local $$cmp495$i + (i32.eq + (get_local $$rem494$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp495$i) + (block + (set_local $$i$3512$i + (get_local $$mul499$i) + ) + (set_local $$j$1513$i + (get_local $$inc500$i) + ) + ) + (block + (set_local $$j$2$i + (get_local $$inc500$i) + ) + (br $while-out95) + ) + ) + (br $while-in96) + ) + ) + ) + (set_local $$j$2$i + (i32.const 9) + ) + ) + ) + (set_local $$or504$i + (i32.or + (get_local $$t$addr$0$i) + (i32.const 32) + ) + ) + (set_local $$cmp505$i + (i32.eq + (get_local $$or504$i) + (i32.const 102) + ) + ) + (set_local $$sub$ptr$lhs$cast508$i + (get_local $$z$7$i$lcssa) + ) + (set_local $$sub$ptr$sub510$i + (i32.sub + (get_local $$sub$ptr$lhs$cast508$i) + (get_local $$sub$ptr$rhs$cast345$i) + ) + ) + (set_local $$sub$ptr$div511$i + (i32.shr_s + (get_local $$sub$ptr$sub510$i) + (i32.const 2) + ) + ) + (set_local $$238 + (i32.mul + (get_local $$sub$ptr$div511$i) + (i32.const 9) + ) + ) + (set_local $$mul513$i + (i32.add + (get_local $$238) + (i32.const -9) + ) + ) + (if + (get_local $$cmp505$i) + (block + (set_local $$sub514$i + (i32.sub + (get_local $$mul513$i) + (get_local $$j$2$i) + ) + ) + (set_local $$cmp515$i + (i32.lt_s + (get_local $$sub514$i) + (i32.const 0) + ) + ) + (set_local $$$sub514$i + (if (result i32) + (get_local $$cmp515$i) + (i32.const 0) + (get_local $$sub514$i) + ) + ) + (set_local $$cmp528$i + (i32.lt_s + (get_local $$p$addr$2$i) + (get_local $$$sub514$i) + ) + ) + (set_local $$p$addr$2$$sub514398$i + (if (result i32) + (get_local $$cmp528$i) + (get_local $$p$addr$2$i) + (get_local $$$sub514$i) + ) + ) + (set_local $$and610$pre$phi$iZ2D + (i32.const 0) + ) + (set_local $$p$addr$3$i + (get_local $$p$addr$2$$sub514398$i) + ) + (set_local $$t$addr$1$i + (get_local $$t$addr$0$i) + ) + (br $do-once91) + ) + (block + (set_local $$add561$i + (i32.add + (get_local $$mul513$i) + (get_local $$e$5$ph$i) + ) + ) + (set_local $$sub562$i + (i32.sub + (get_local $$add561$i) + (get_local $$j$2$i) + ) + ) + (set_local $$cmp563$i + (i32.lt_s + (get_local $$sub562$i) + (i32.const 0) + ) + ) + (set_local $$$sub562$i + (if (result i32) + (get_local $$cmp563$i) + (i32.const 0) + (get_local $$sub562$i) + ) + ) + (set_local $$cmp577$i + (i32.lt_s + (get_local $$p$addr$2$i) + (get_local $$$sub562$i) + ) + ) + (set_local $$p$addr$2$$sub562399$i + (if (result i32) + (get_local $$cmp577$i) + (get_local $$p$addr$2$i) + (get_local $$$sub562$i) + ) + ) + (set_local $$and610$pre$phi$iZ2D + (i32.const 0) + ) + (set_local $$p$addr$3$i + (get_local $$p$addr$2$$sub562399$i) + ) + (set_local $$t$addr$1$i + (get_local $$t$addr$0$i) + ) + (br $do-once91) + ) + ) + ) + (block + (set_local $$$pre567$i + (i32.and + (get_local $$fl$1$and219) + (i32.const 8) + ) + ) + (set_local $$and610$pre$phi$iZ2D + (get_local $$$pre567$i) + ) + (set_local $$p$addr$3$i + (get_local $$$p$i) + ) + (set_local $$t$addr$1$i + (get_local $$t$0) + ) + ) + ) + ) + (set_local $$239 + (i32.or + (get_local $$p$addr$3$i) + (get_local $$and610$pre$phi$iZ2D) + ) + ) + (set_local $$240 + (i32.ne + (get_local $$239) + (i32.const 0) + ) + ) + (set_local $$lor$ext$i + (i32.and + (get_local $$240) + (i32.const 1) + ) + ) + (set_local $$or613$i + (i32.or + (get_local $$t$addr$1$i) + (i32.const 32) + ) + ) + (set_local $$cmp614$i + (i32.eq + (get_local $$or613$i) + (i32.const 102) + ) + ) + (if + (get_local $$cmp614$i) + (block + (set_local $$cmp617$i + (i32.gt_s + (get_local $$e$5$ph$i) + (i32.const 0) + ) + ) + (set_local $$add620$i + (if (result i32) + (get_local $$cmp617$i) + (get_local $$e$5$ph$i) + (i32.const 0) + ) + ) + (set_local $$estr$2$i + (i32.const 0) + ) + (set_local $$sub$ptr$sub650$pn$i + (get_local $$add620$i) + ) + ) + (block + (set_local $$cmp623$i + (i32.lt_s + (get_local $$e$5$ph$i) + (i32.const 0) + ) + ) + (set_local $$cond629$i + (if (result i32) + (get_local $$cmp623$i) + (get_local $$sub626$le$i) + (get_local $$e$5$ph$i) + ) + ) + (set_local $$241 + (i32.lt_s + (get_local $$cond629$i) + (i32.const 0) + ) + ) + (set_local $$242 + (i32.shr_s + (i32.shl + (get_local $$241) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$243 + (call $_fmt_u + (get_local $$cond629$i) + (get_local $$242) + (get_local $$arrayidx$i$236) + ) + ) + (set_local $$sub$ptr$rhs$cast634$504$i + (get_local $$243) + ) + (set_local $$sub$ptr$sub635$505$i + (i32.sub + (get_local $$sub$ptr$lhs$cast160$i) + (get_local $$sub$ptr$rhs$cast634$504$i) + ) + ) + (set_local $$cmp636$506$i + (i32.lt_s + (get_local $$sub$ptr$sub635$505$i) + (i32.const 2) + ) + ) + (if + (get_local $$cmp636$506$i) + (block + (set_local $$estr$1507$i + (get_local $$243) + ) + (loop $while-in98 + (block $while-out97 + (set_local $$incdec$ptr639$i + (i32.add + (get_local $$estr$1507$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr639$i) + (i32.const 48) + ) + (set_local $$sub$ptr$rhs$cast634$i + (get_local $$incdec$ptr639$i) + ) + (set_local $$sub$ptr$sub635$i + (i32.sub + (get_local $$sub$ptr$lhs$cast160$i) + (get_local $$sub$ptr$rhs$cast634$i) + ) + ) + (set_local $$cmp636$i + (i32.lt_s + (get_local $$sub$ptr$sub635$i) + (i32.const 2) + ) + ) + (if + (get_local $$cmp636$i) + (set_local $$estr$1507$i + (get_local $$incdec$ptr639$i) + ) + (block + (set_local $$estr$1$lcssa$i + (get_local $$incdec$ptr639$i) + ) + (br $while-out97) + ) + ) + (br $while-in98) + ) + ) + ) + (set_local $$estr$1$lcssa$i + (get_local $$243) + ) + ) + (set_local $$244 + (i32.shr_s + (get_local $$e$5$ph$i) + (i32.const 31) + ) + ) + (set_local $$245 + (i32.and + (get_local $$244) + (i32.const 2) + ) + ) + (set_local $$246 + (i32.add + (get_local $$245) + (i32.const 43) + ) + ) + (set_local $$conv644$i + (i32.and + (get_local $$246) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr645$i + (i32.add + (get_local $$estr$1$lcssa$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr645$i) + (get_local $$conv644$i) + ) + (set_local $$conv646$i + (i32.and + (get_local $$t$addr$1$i) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr647$i + (i32.add + (get_local $$estr$1$lcssa$i) + (i32.const -2) + ) + ) + (i32.store8 + (get_local $$incdec$ptr647$i) + (get_local $$conv646$i) + ) + (set_local $$sub$ptr$rhs$cast649$i + (get_local $$incdec$ptr647$i) + ) + (set_local $$sub$ptr$sub650$i + (i32.sub + (get_local $$sub$ptr$lhs$cast160$i) + (get_local $$sub$ptr$rhs$cast649$i) + ) + ) + (set_local $$estr$2$i + (get_local $$incdec$ptr647$i) + ) + (set_local $$sub$ptr$sub650$pn$i + (get_local $$sub$ptr$sub650$i) + ) + ) + ) + (set_local $$add608$i + (i32.add + (get_local $$pl$0$i) + (i32.const 1) + ) + ) + (set_local $$add612$i + (i32.add + (get_local $$add608$i) + (get_local $$p$addr$3$i) + ) + ) + (set_local $$l$1$i + (i32.add + (get_local $$add612$i) + (get_local $$lor$ext$i) + ) + ) + (set_local $$add653$i + (i32.add + (get_local $$l$1$i) + (get_local $$sub$ptr$sub650$pn$i) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$add653$i) + (get_local $$fl$1$and219) + ) + (set_local $$247 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$436$i + (i32.and + (get_local $$247) + (i32.const 32) + ) + ) + (set_local $$tobool$i$437$i + (i32.eq + (get_local $$and$i$436$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$437$i) + (drop + (call $___fwritex + (get_local $$prefix$0$i) + (get_local $$pl$0$i) + (get_local $$f) + ) + ) + ) + (set_local $$xor655$i + (i32.xor + (get_local $$fl$1$and219) + (i32.const 65536) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$w$1) + (get_local $$add653$i) + (get_local $$xor655$i) + ) + (block $do-once99 + (if + (get_local $$cmp614$i) + (block + (set_local $$cmp660$i + (i32.gt_u + (get_local $$a$9$ph$i) + (get_local $$arraydecay208$add$ptr213$i) + ) + ) + (set_local $$r$0$a$9$i + (if (result i32) + (get_local $$cmp660$i) + (get_local $$arraydecay208$add$ptr213$i) + (get_local $$a$9$ph$i) + ) + ) + (set_local $$d$5494$i + (get_local $$r$0$a$9$i) + ) + (loop $while-in102 + (block $while-out101 + (set_local $$248 + (i32.load + (get_local $$d$5494$i) + ) + ) + (set_local $$249 + (call $_fmt_u + (get_local $$248) + (i32.const 0) + (get_local $$add$ptr671$i) + ) + ) + (set_local $$cmp673$i + (i32.eq + (get_local $$d$5494$i) + (get_local $$r$0$a$9$i) + ) + ) + (block $do-once103 + (if + (get_local $$cmp673$i) + (block + (set_local $$cmp686$i + (i32.eq + (get_local $$249) + (get_local $$add$ptr671$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp686$i) + ) + (block + (set_local $$s668$1$i + (get_local $$249) + ) + (br $do-once103) + ) + ) + (i32.store8 + (get_local $$incdec$ptr689$i) + (i32.const 48) + ) + (set_local $$s668$1$i + (get_local $$incdec$ptr689$i) + ) + ) + (block + (set_local $$cmp678$491$i + (i32.gt_u + (get_local $$249) + (get_local $$buf$i) + ) + ) + (if + (get_local $$cmp678$491$i) + (set_local $$s668$0492$i + (get_local $$249) + ) + (block + (set_local $$s668$1$i + (get_local $$249) + ) + (br $do-once103) + ) + ) + (loop $while-in106 + (block $while-out105 + (set_local $$incdec$ptr681$i + (i32.add + (get_local $$s668$0492$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr681$i) + (i32.const 48) + ) + (set_local $$cmp678$i + (i32.gt_u + (get_local $$incdec$ptr681$i) + (get_local $$buf$i) + ) + ) + (if + (get_local $$cmp678$i) + (set_local $$s668$0492$i + (get_local $$incdec$ptr681$i) + ) + (block + (set_local $$s668$1$i + (get_local $$incdec$ptr681$i) + ) + (br $while-out105) + ) + ) + (br $while-in106) + ) + ) + ) + ) + ) + (set_local $$250 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$442$i + (i32.and + (get_local $$250) + (i32.const 32) + ) + ) + (set_local $$tobool$i$443$i + (i32.eq + (get_local $$and$i$442$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$443$i) + (block + (set_local $$sub$ptr$rhs$cast695$i + (get_local $$s668$1$i) + ) + (set_local $$sub$ptr$sub696$i + (i32.sub + (get_local $$sub$ptr$lhs$cast694$i) + (get_local $$sub$ptr$rhs$cast695$i) + ) + ) + (drop + (call $___fwritex + (get_local $$s668$1$i) + (get_local $$sub$ptr$sub696$i) + (get_local $$f) + ) + ) + ) + ) + (set_local $$incdec$ptr698$i + (i32.add + (get_local $$d$5494$i) + (i32.const 4) + ) + ) + (set_local $$cmp665$i + (i32.gt_u + (get_local $$incdec$ptr698$i) + (get_local $$arraydecay208$add$ptr213$i) + ) + ) + (if + (get_local $$cmp665$i) + (block + (set_local $$incdec$ptr698$i$lcssa + (get_local $$incdec$ptr698$i) + ) + (br $while-out101) + ) + (set_local $$d$5494$i + (get_local $$incdec$ptr698$i) + ) + ) + (br $while-in102) + ) + ) + (set_local $$251 + (i32.eq + (get_local $$239) + (i32.const 0) + ) + ) + (block $do-once107 + (if + (i32.eqz + (get_local $$251) + ) + (block + (set_local $$252 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$448$i + (i32.and + (get_local $$252) + (i32.const 32) + ) + ) + (set_local $$tobool$i$449$i + (i32.eq + (get_local $$and$i$448$i) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool$i$449$i) + ) + (br $do-once107) + ) + (drop + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $$f) + ) + ) + ) + ) + ) + (set_local $$cmp707$486$i + (i32.lt_u + (get_local $$incdec$ptr698$i$lcssa) + (get_local $$z$7$i$lcssa) + ) + ) + (set_local $$cmp710$487$i + (i32.gt_s + (get_local $$p$addr$3$i) + (i32.const 0) + ) + ) + (set_local $$253 + (i32.and + (get_local $$cmp710$487$i) + (get_local $$cmp707$486$i) + ) + ) + (if + (get_local $$253) + (block + (set_local $$d$6488$i + (get_local $$incdec$ptr698$i$lcssa) + ) + (set_local $$p$addr$4489$i + (get_local $$p$addr$3$i) + ) + (loop $while-in110 + (block $while-out109 + (set_local $$254 + (i32.load + (get_local $$d$6488$i) + ) + ) + (set_local $$255 + (call $_fmt_u + (get_local $$254) + (i32.const 0) + (get_local $$add$ptr671$i) + ) + ) + (set_local $$cmp722$483$i + (i32.gt_u + (get_local $$255) + (get_local $$buf$i) + ) + ) + (if + (get_local $$cmp722$483$i) + (block + (set_local $$s715$0484$i + (get_local $$255) + ) + (loop $while-in112 + (block $while-out111 + (set_local $$incdec$ptr725$i + (i32.add + (get_local $$s715$0484$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr725$i) + (i32.const 48) + ) + (set_local $$cmp722$i + (i32.gt_u + (get_local $$incdec$ptr725$i) + (get_local $$buf$i) + ) + ) + (if + (get_local $$cmp722$i) + (set_local $$s715$0484$i + (get_local $$incdec$ptr725$i) + ) + (block + (set_local $$s715$0$lcssa$i + (get_local $$incdec$ptr725$i) + ) + (br $while-out111) + ) + ) + (br $while-in112) + ) + ) + ) + (set_local $$s715$0$lcssa$i + (get_local $$255) + ) + ) + (set_local $$256 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$454$i + (i32.and + (get_local $$256) + (i32.const 32) + ) + ) + (set_local $$tobool$i$455$i + (i32.eq + (get_local $$and$i$454$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$455$i) + (block + (set_local $$cmp727$i + (i32.gt_s + (get_local $$p$addr$4489$i) + (i32.const 9) + ) + ) + (set_local $$cond732$i + (if (result i32) + (get_local $$cmp727$i) + (i32.const 9) + (get_local $$p$addr$4489$i) + ) + ) + (drop + (call $___fwritex + (get_local $$s715$0$lcssa$i) + (get_local $$cond732$i) + (get_local $$f) + ) + ) + ) + ) + (set_local $$incdec$ptr734$i + (i32.add + (get_local $$d$6488$i) + (i32.const 4) + ) + ) + (set_local $$sub735$i + (i32.add + (get_local $$p$addr$4489$i) + (i32.const -9) + ) + ) + (set_local $$cmp707$i + (i32.lt_u + (get_local $$incdec$ptr734$i) + (get_local $$z$7$i$lcssa) + ) + ) + (set_local $$cmp710$i + (i32.gt_s + (get_local $$p$addr$4489$i) + (i32.const 9) + ) + ) + (set_local $$257 + (i32.and + (get_local $$cmp710$i) + (get_local $$cmp707$i) + ) + ) + (if + (get_local $$257) + (block + (set_local $$d$6488$i + (get_local $$incdec$ptr734$i) + ) + (set_local $$p$addr$4489$i + (get_local $$sub735$i) + ) + ) + (block + (set_local $$p$addr$4$lcssa$i + (get_local $$sub735$i) + ) + (br $while-out109) + ) + ) + (br $while-in110) + ) + ) + ) + (set_local $$p$addr$4$lcssa$i + (get_local $$p$addr$3$i) + ) + ) + (set_local $$add737$i + (i32.add + (get_local $$p$addr$4$lcssa$i) + (i32.const 9) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$add737$i) + (i32.const 9) + (i32.const 0) + ) + ) + (block + (set_local $$add$ptr742$i + (i32.add + (get_local $$a$9$ph$i) + (i32.const 4) + ) + ) + (set_local $$z$7$add$ptr742$i + (if (result i32) + (get_local $$cmp450$lcssa$i) + (get_local $$z$7$i$lcssa) + (get_local $$add$ptr742$i) + ) + ) + (set_local $$cmp748$499$i + (i32.gt_s + (get_local $$p$addr$3$i) + (i32.const -1) + ) + ) + (if + (get_local $$cmp748$499$i) + (block + (set_local $$tobool781$i + (i32.eq + (get_local $$and610$pre$phi$iZ2D) + (i32.const 0) + ) + ) + (set_local $$d$7500$i + (get_local $$a$9$ph$i) + ) + (set_local $$p$addr$5501$i + (get_local $$p$addr$3$i) + ) + (loop $while-in114 + (block $while-out113 + (set_local $$258 + (i32.load + (get_local $$d$7500$i) + ) + ) + (set_local $$259 + (call $_fmt_u + (get_local $$258) + (i32.const 0) + (get_local $$add$ptr671$i) + ) + ) + (set_local $$cmp760$i + (i32.eq + (get_local $$259) + (get_local $$add$ptr671$i) + ) + ) + (if + (get_local $$cmp760$i) + (block + (i32.store8 + (get_local $$incdec$ptr689$i) + (i32.const 48) + ) + (set_local $$s753$0$i + (get_local $$incdec$ptr689$i) + ) + ) + (set_local $$s753$0$i + (get_local $$259) + ) + ) + (set_local $$cmp765$i + (i32.eq + (get_local $$d$7500$i) + (get_local $$a$9$ph$i) + ) + ) + (block $do-once115 + (if + (get_local $$cmp765$i) + (block + (set_local $$incdec$ptr776$i + (i32.add + (get_local $$s753$0$i) + (i32.const 1) + ) + ) + (set_local $$260 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$460$i + (i32.and + (get_local $$260) + (i32.const 32) + ) + ) + (set_local $$tobool$i$461$i + (i32.eq + (get_local $$and$i$460$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$461$i) + (drop + (call $___fwritex + (get_local $$s753$0$i) + (i32.const 1) + (get_local $$f) + ) + ) + ) + (set_local $$cmp777$i + (i32.lt_s + (get_local $$p$addr$5501$i) + (i32.const 1) + ) + ) + (set_local $$or$cond401$i + (i32.and + (get_local $$tobool781$i) + (get_local $$cmp777$i) + ) + ) + (if + (get_local $$or$cond401$i) + (block + (set_local $$s753$2$i + (get_local $$incdec$ptr776$i) + ) + (br $do-once115) + ) + ) + (set_local $$261 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$466$i + (i32.and + (get_local $$261) + (i32.const 32) + ) + ) + (set_local $$tobool$i$467$i + (i32.eq + (get_local $$and$i$466$i) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool$i$467$i) + ) + (block + (set_local $$s753$2$i + (get_local $$incdec$ptr776$i) + ) + (br $do-once115) + ) + ) + (drop + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $$f) + ) + ) + (set_local $$s753$2$i + (get_local $$incdec$ptr776$i) + ) + ) + (block + (set_local $$cmp770$495$i + (i32.gt_u + (get_local $$s753$0$i) + (get_local $$buf$i) + ) + ) + (if + (get_local $$cmp770$495$i) + (set_local $$s753$1496$i + (get_local $$s753$0$i) + ) + (block + (set_local $$s753$2$i + (get_local $$s753$0$i) + ) + (br $do-once115) + ) + ) + (loop $while-in118 + (block $while-out117 + (set_local $$incdec$ptr773$i + (i32.add + (get_local $$s753$1496$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr773$i) + (i32.const 48) + ) + (set_local $$cmp770$i + (i32.gt_u + (get_local $$incdec$ptr773$i) + (get_local $$buf$i) + ) + ) + (if + (get_local $$cmp770$i) + (set_local $$s753$1496$i + (get_local $$incdec$ptr773$i) + ) + (block + (set_local $$s753$2$i + (get_local $$incdec$ptr773$i) + ) + (br $while-out117) + ) + ) + (br $while-in118) + ) + ) + ) + ) + ) + (set_local $$sub$ptr$rhs$cast788$i + (get_local $$s753$2$i) + ) + (set_local $$sub$ptr$sub789$i + (i32.sub + (get_local $$sub$ptr$lhs$cast694$i) + (get_local $$sub$ptr$rhs$cast788$i) + ) + ) + (set_local $$262 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$472$i + (i32.and + (get_local $$262) + (i32.const 32) + ) + ) + (set_local $$tobool$i$473$i + (i32.eq + (get_local $$and$i$472$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$473$i) + (block + (set_local $$cmp790$i + (i32.gt_s + (get_local $$p$addr$5501$i) + (get_local $$sub$ptr$sub789$i) + ) + ) + (set_local $$cond800$i + (if (result i32) + (get_local $$cmp790$i) + (get_local $$sub$ptr$sub789$i) + (get_local $$p$addr$5501$i) + ) + ) + (drop + (call $___fwritex + (get_local $$s753$2$i) + (get_local $$cond800$i) + (get_local $$f) + ) + ) + ) + ) + (set_local $$sub806$i + (i32.sub + (get_local $$p$addr$5501$i) + (get_local $$sub$ptr$sub789$i) + ) + ) + (set_local $$incdec$ptr808$i + (i32.add + (get_local $$d$7500$i) + (i32.const 4) + ) + ) + (set_local $$cmp745$i + (i32.lt_u + (get_local $$incdec$ptr808$i) + (get_local $$z$7$add$ptr742$i) + ) + ) + (set_local $$cmp748$i + (i32.gt_s + (get_local $$sub806$i) + (i32.const -1) + ) + ) + (set_local $$263 + (i32.and + (get_local $$cmp745$i) + (get_local $$cmp748$i) + ) + ) + (if + (get_local $$263) + (block + (set_local $$d$7500$i + (get_local $$incdec$ptr808$i) + ) + (set_local $$p$addr$5501$i + (get_local $$sub806$i) + ) + ) + (block + (set_local $$p$addr$5$lcssa$i + (get_local $$sub806$i) + ) + (br $while-out113) + ) + ) + (br $while-in114) + ) + ) + ) + (set_local $$p$addr$5$lcssa$i + (get_local $$p$addr$3$i) + ) + ) + (set_local $$add810$i + (i32.add + (get_local $$p$addr$5$lcssa$i) + (i32.const 18) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$add810$i) + (i32.const 18) + (i32.const 0) + ) + (set_local $$264 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$i + (i32.and + (get_local $$264) + (i32.const 32) + ) + ) + (set_local $$tobool$i$i + (i32.eq + (get_local $$and$i$i) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool$i$i) + ) + (br $do-once99) + ) + (set_local $$sub$ptr$rhs$cast812$i + (get_local $$estr$2$i) + ) + (set_local $$sub$ptr$sub813$i + (i32.sub + (get_local $$sub$ptr$lhs$cast160$i) + (get_local $$sub$ptr$rhs$cast812$i) + ) + ) + (drop + (call $___fwritex + (get_local $$estr$2$i) + (get_local $$sub$ptr$sub813$i) + (get_local $$f) + ) + ) + ) + ) + ) + (set_local $$xor816$i + (i32.xor + (get_local $$fl$1$and219) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$add653$i) + (get_local $$xor816$i) + ) + (set_local $$cmp818$i + (i32.lt_s + (get_local $$add653$i) + (get_local $$w$1) + ) + ) + (set_local $$w$add653$i + (if (result i32) + (get_local $$cmp818$i) + (get_local $$w$1) + (get_local $$add653$i) + ) + ) + (set_local $$retval$0$i + (get_local $$w$add653$i) + ) + ) + (block + (set_local $$and36$i + (i32.and + (get_local $$t$0) + (i32.const 32) + ) + ) + (set_local $$tobool37$i + (i32.ne + (get_local $$and36$i) + (i32.const 0) + ) + ) + (set_local $$cond$i + (if (result i32) + (get_local $$tobool37$i) + (i32.const 4127) + (i32.const 4131) + ) + ) + (set_local $$cmp38$i + (i32.or + (f64.ne + (get_local $$y$addr$0$i) + (get_local $$y$addr$0$i) + ) + (f64.ne + (f64.const 0) + (f64.const 0) + ) + ) + ) + (set_local $$cond43$i + (if (result i32) + (get_local $$tobool37$i) + (i32.const 4135) + (i32.const 4139) + ) + ) + (set_local $$pl$1$i + (if (result i32) + (get_local $$cmp38$i) + (i32.const 0) + (get_local $$pl$0$i) + ) + ) + (set_local $$s35$0$i + (if (result i32) + (get_local $$cmp38$i) + (get_local $$cond43$i) + (get_local $$cond$i) + ) + ) + (set_local $$add$i$239 + (i32.add + (get_local $$pl$1$i) + (i32.const 3) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$add$i$239) + (get_local $$and219) + ) + (set_local $$193 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$406$i + (i32.and + (get_local $$193) + (i32.const 32) + ) + ) + (set_local $$tobool$i$407$i + (i32.eq + (get_local $$and$i$406$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$407$i) + (block + (drop + (call $___fwritex + (get_local $$prefix$0$i) + (get_local $$pl$1$i) + (get_local $$f) + ) + ) + (set_local $$$pre$i + (i32.load + (get_local $$f) + ) + ) + (set_local $$194 + (get_local $$$pre$i) + ) + ) + (set_local $$194 + (get_local $$193) + ) + ) + (set_local $$and$i$412$i + (i32.and + (get_local $$194) + (i32.const 32) + ) + ) + (set_local $$tobool$i$413$i + (i32.eq + (get_local $$and$i$412$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$413$i) + (drop + (call $___fwritex + (get_local $$s35$0$i) + (i32.const 3) + (get_local $$f) + ) + ) + ) + (set_local $$xor$i + (i32.xor + (get_local $$fl$1$and219) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$add$i$239) + (get_local $$xor$i) + ) + (set_local $$cmp48$i + (i32.lt_s + (get_local $$add$i$239) + (get_local $$w$1) + ) + ) + (set_local $$cond53$i + (if (result i32) + (get_local $$cmp48$i) + (get_local $$w$1) + (get_local $$add$i$239) + ) + ) + (set_local $$retval$0$i + (get_local $$cond53$i) + ) + ) + ) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$retval$0$i) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch17) + ) + ) + (block + (set_local $$a$2 + (get_local $$incdec$ptr169275) + ) + (set_local $$fl$6 + (get_local $$fl$1$and219) + ) + (set_local $$p$5 + (get_local $$p$0) + ) + (set_local $$pl$2 + (i32.const 0) + ) + (set_local $$prefix$2 + (i32.const 4091) + ) + (set_local $$z$2 + (get_local $$add$ptr205) + ) + ) + ) + ) + (block $label$break$L308 + (if + (i32.eq + (get_local $label) + (i32.const 64) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$90 + (get_local $$arg) + ) + (set_local $$91 + (get_local $$90) + ) + (set_local $$92 + (i32.load + (get_local $$91) + ) + ) + (set_local $$93 + (i32.add + (get_local $$90) + (i32.const 4) + ) + ) + (set_local $$94 + (get_local $$93) + ) + (set_local $$95 + (i32.load + (get_local $$94) + ) + ) + (set_local $$and249 + (i32.and + (get_local $$t$1) + (i32.const 32) + ) + ) + (set_local $$96 + (i32.eq + (get_local $$92) + (i32.const 0) + ) + ) + (set_local $$97 + (i32.eq + (get_local $$95) + (i32.const 0) + ) + ) + (set_local $$98 + (i32.and + (get_local $$96) + (get_local $$97) + ) + ) + (if + (get_local $$98) + (block + (set_local $$a$0 + (get_local $$add$ptr205) + ) + (set_local $$fl$4 + (get_local $$fl$3) + ) + (set_local $$p$2 + (get_local $$p$1) + ) + (set_local $$pl$1 + (i32.const 0) + ) + (set_local $$prefix$1 + (i32.const 4091) + ) + (set_local $label + (i32.const 77) + ) + ) + (block + (set_local $$101 + (get_local $$95) + ) + (set_local $$99 + (get_local $$92) + ) + (set_local $$s$addr$06$i + (get_local $$add$ptr205) + ) + (loop $while-in123 + (block $while-out122 + (set_local $$idxprom$i + (i32.and + (get_local $$99) + (i32.const 15) + ) + ) + (set_local $$arrayidx$i + (i32.add + (i32.const 4075) + (get_local $$idxprom$i) + ) + ) + (set_local $$100 + (i32.load8_s + (get_local $$arrayidx$i) + ) + ) + (set_local $$conv$4$i$211 + (i32.and + (get_local $$100) + (i32.const 255) + ) + ) + (set_local $$or$i + (i32.or + (get_local $$conv$4$i$211) + (get_local $$and249) + ) + ) + (set_local $$conv1$i + (i32.and + (get_local $$or$i) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr$i$212 + (i32.add + (get_local $$s$addr$06$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr$i$212) + (get_local $$conv1$i) + ) + (set_local $$102 + (call $_bitshift64Lshr + (get_local $$99) + (get_local $$101) + (i32.const 4) + ) + ) + (set_local $$103 + (get_global $tempRet0) + ) + (set_local $$104 + (i32.eq + (get_local $$102) + (i32.const 0) + ) + ) + (set_local $$105 + (i32.eq + (get_local $$103) + (i32.const 0) + ) + ) + (set_local $$106 + (i32.and + (get_local $$104) + (get_local $$105) + ) + ) + (if + (get_local $$106) + (block + (set_local $$incdec$ptr$i$212$lcssa + (get_local $$incdec$ptr$i$212) + ) + (br $while-out122) + ) + (block + (set_local $$101 + (get_local $$103) + ) + (set_local $$99 + (get_local $$102) + ) + (set_local $$s$addr$06$i + (get_local $$incdec$ptr$i$212) + ) + ) + ) + (br $while-in123) + ) + ) + (set_local $$107 + (get_local $$arg) + ) + (set_local $$108 + (get_local $$107) + ) + (set_local $$109 + (i32.load + (get_local $$108) + ) + ) + (set_local $$110 + (i32.add + (get_local $$107) + (i32.const 4) + ) + ) + (set_local $$111 + (get_local $$110) + ) + (set_local $$112 + (i32.load + (get_local $$111) + ) + ) + (set_local $$113 + (i32.eq + (get_local $$109) + (i32.const 0) + ) + ) + (set_local $$114 + (i32.eq + (get_local $$112) + (i32.const 0) + ) + ) + (set_local $$115 + (i32.and + (get_local $$113) + (get_local $$114) + ) + ) + (set_local $$and254 + (i32.and + (get_local $$fl$3) + (i32.const 8) + ) + ) + (set_local $$tobool255 + (i32.eq + (get_local $$and254) + (i32.const 0) + ) + ) + (set_local $$or$cond193 + (i32.or + (get_local $$tobool255) + (get_local $$115) + ) + ) + (if + (get_local $$or$cond193) + (block + (set_local $$a$0 + (get_local $$incdec$ptr$i$212$lcssa) + ) + (set_local $$fl$4 + (get_local $$fl$3) + ) + (set_local $$p$2 + (get_local $$p$1) + ) + (set_local $$pl$1 + (i32.const 0) + ) + (set_local $$prefix$1 + (i32.const 4091) + ) + (set_local $label + (i32.const 77) + ) + ) + (block + (set_local $$shr + (i32.shr_s + (get_local $$t$1) + (i32.const 4) + ) + ) + (set_local $$add$ptr257 + (i32.add + (i32.const 4091) + (get_local $$shr) + ) + ) + (set_local $$a$0 + (get_local $$incdec$ptr$i$212$lcssa) + ) + (set_local $$fl$4 + (get_local $$fl$3) + ) + (set_local $$p$2 + (get_local $$p$1) + ) + (set_local $$pl$1 + (i32.const 2) + ) + (set_local $$prefix$1 + (get_local $$add$ptr257) + ) + (set_local $label + (i32.const 77) + ) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 76) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$150 + (call $_fmt_u + (get_local $$148) + (get_local $$149) + (get_local $$add$ptr205) + ) + ) + (set_local $$a$0 + (get_local $$150) + ) + (set_local $$fl$4 + (get_local $$fl$1$and219) + ) + (set_local $$p$2 + (get_local $$p$0) + ) + (set_local $$pl$1 + (get_local $$pl$0) + ) + (set_local $$prefix$1 + (get_local $$prefix$0) + ) + (set_local $label + (i32.const 77) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 82) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$call356 + (call $_memchr + (get_local $$a$1) + (i32.const 0) + (get_local $$p$0) + ) + ) + (set_local $$tobool357 + (i32.eq + (get_local $$call356) + (i32.const 0) + ) + ) + (set_local $$sub$ptr$lhs$cast361 + (get_local $$call356) + ) + (set_local $$sub$ptr$rhs$cast362 + (get_local $$a$1) + ) + (set_local $$sub$ptr$sub363 + (i32.sub + (get_local $$sub$ptr$lhs$cast361) + (get_local $$sub$ptr$rhs$cast362) + ) + ) + (set_local $$add$ptr359 + (i32.add + (get_local $$a$1) + (get_local $$p$0) + ) + ) + (set_local $$z$1 + (if (result i32) + (get_local $$tobool357) + (get_local $$add$ptr359) + (get_local $$call356) + ) + ) + (set_local $$p$3 + (if (result i32) + (get_local $$tobool357) + (get_local $$p$0) + (get_local $$sub$ptr$sub363) + ) + ) + (set_local $$a$2 + (get_local $$a$1) + ) + (set_local $$fl$6 + (get_local $$and219) + ) + (set_local $$p$5 + (get_local $$p$3) + ) + (set_local $$pl$2 + (i32.const 0) + ) + (set_local $$prefix$2 + (i32.const 4091) + ) + (set_local $$z$2 + (get_local $$z$1) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 86) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$176 + (i32.load + (get_local $$arg) + ) + ) + (set_local $$i$0316 + (i32.const 0) + ) + (set_local $$l$1315 + (i32.const 0) + ) + (set_local $$ws$0317 + (get_local $$176) + ) + (loop $while-in125 + (block $while-out124 + (set_local $$177 + (i32.load + (get_local $$ws$0317) + ) + ) + (set_local $$tobool380 + (i32.eq + (get_local $$177) + (i32.const 0) + ) + ) + (if + (get_local $$tobool380) + (block + (set_local $$i$0$lcssa + (get_local $$i$0316) + ) + (set_local $$l$2 + (get_local $$l$1315) + ) + (br $while-out124) + ) + ) + (set_local $$call384 + (call $_wctomb + (get_local $$mb) + (get_local $$177) + ) + ) + (set_local $$cmp385 + (i32.lt_s + (get_local $$call384) + (i32.const 0) + ) + ) + (set_local $$sub389 + (i32.sub + (get_local $$p$4365) + (get_local $$i$0316) + ) + ) + (set_local $$cmp390 + (i32.gt_u + (get_local $$call384) + (get_local $$sub389) + ) + ) + (set_local $$or$cond195 + (i32.or + (get_local $$cmp385) + (get_local $$cmp390) + ) + ) + (if + (get_local $$or$cond195) + (block + (set_local $$i$0$lcssa + (get_local $$i$0316) + ) + (set_local $$l$2 + (get_local $$call384) + ) + (br $while-out124) + ) + ) + (set_local $$incdec$ptr383 + (i32.add + (get_local $$ws$0317) + (i32.const 4) + ) + ) + (set_local $$add395 + (i32.add + (get_local $$call384) + (get_local $$i$0316) + ) + ) + (set_local $$cmp377 + (i32.gt_u + (get_local $$p$4365) + (get_local $$add395) + ) + ) + (if + (get_local $$cmp377) + (block + (set_local $$i$0316 + (get_local $$add395) + ) + (set_local $$l$1315 + (get_local $$call384) + ) + (set_local $$ws$0317 + (get_local $$incdec$ptr383) + ) + ) + (block + (set_local $$i$0$lcssa + (get_local $$add395) + ) + (set_local $$l$2 + (get_local $$call384) + ) + (br $while-out124) + ) + ) + (br $while-in125) + ) + ) + (set_local $$cmp397 + (i32.lt_s + (get_local $$l$2) + (i32.const 0) + ) + ) + (if + (get_local $$cmp397) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$i$0$lcssa) + (get_local $$fl$1$and219) + ) + (set_local $$cmp404$324 + (i32.eq + (get_local $$i$0$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$cmp404$324) + (block + (set_local $$i$0$lcssa368 + (i32.const 0) + ) + (set_local $label + (i32.const 98) + ) + ) + (block + (set_local $$178 + (i32.load + (get_local $$arg) + ) + ) + (set_local $$i$1325 + (i32.const 0) + ) + (set_local $$ws$1326 + (get_local $$178) + ) + (loop $while-in127 + (block $while-out126 + (set_local $$179 + (i32.load + (get_local $$ws$1326) + ) + ) + (set_local $$tobool407 + (i32.eq + (get_local $$179) + (i32.const 0) + ) + ) + (if + (get_local $$tobool407) + (block + (set_local $$i$0$lcssa368 + (get_local $$i$0$lcssa) + ) + (set_local $label + (i32.const 98) + ) + (br $label$break$L308) + ) + ) + (set_local $$incdec$ptr410 + (i32.add + (get_local $$ws$1326) + (i32.const 4) + ) + ) + (set_local $$call411 + (call $_wctomb + (get_local $$mb) + (get_local $$179) + ) + ) + (set_local $$add412 + (i32.add + (get_local $$call411) + (get_local $$i$1325) + ) + ) + (set_local $$cmp413 + (i32.gt_s + (get_local $$add412) + (get_local $$i$0$lcssa) + ) + ) + (if + (get_local $$cmp413) + (block + (set_local $$i$0$lcssa368 + (get_local $$i$0$lcssa) + ) + (set_local $label + (i32.const 98) + ) + (br $label$break$L308) + ) + ) + (set_local $$180 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$231 + (i32.and + (get_local $$180) + (i32.const 32) + ) + ) + (set_local $$tobool$i$232 + (i32.eq + (get_local $$and$i$231) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$232) + (drop + (call $___fwritex + (get_local $$mb) + (get_local $$call411) + (get_local $$f) + ) + ) + ) + (set_local $$cmp404 + (i32.lt_u + (get_local $$add412) + (get_local $$i$0$lcssa) + ) + ) + (if + (get_local $$cmp404) + (block + (set_local $$i$1325 + (get_local $$add412) + ) + (set_local $$ws$1326 + (get_local $$incdec$ptr410) + ) + ) + (block + (set_local $$i$0$lcssa368 + (get_local $$i$0$lcssa) + ) + (set_local $label + (i32.const 98) + ) + (br $while-out126) + ) + ) + (br $while-in127) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 98) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$xor + (i32.xor + (get_local $$fl$1$and219) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$i$0$lcssa368) + (get_local $$xor) + ) + (set_local $$cmp421 + (i32.gt_s + (get_local $$w$1) + (get_local $$i$0$lcssa368) + ) + ) + (set_local $$cond426 + (if (result i32) + (get_local $$cmp421) + (get_local $$w$1) + (get_local $$i$0$lcssa368) + ) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$cond426) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 77) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$cmp306 + (i32.gt_s + (get_local $$p$2) + (i32.const -1) + ) + ) + (set_local $$and309 + (i32.and + (get_local $$fl$4) + (i32.const -65537) + ) + ) + (set_local $$and309$fl$4 + (if (result i32) + (get_local $$cmp306) + (get_local $$and309) + (get_local $$fl$4) + ) + ) + (set_local $$151 + (get_local $$arg) + ) + (set_local $$152 + (get_local $$151) + ) + (set_local $$153 + (i32.load + (get_local $$152) + ) + ) + (set_local $$154 + (i32.add + (get_local $$151) + (i32.const 4) + ) + ) + (set_local $$155 + (get_local $$154) + ) + (set_local $$156 + (i32.load + (get_local $$155) + ) + ) + (set_local $$157 + (i32.ne + (get_local $$153) + (i32.const 0) + ) + ) + (set_local $$158 + (i32.ne + (get_local $$156) + (i32.const 0) + ) + ) + (set_local $$159 + (i32.or + (get_local $$157) + (get_local $$158) + ) + ) + (set_local $$tobool314 + (i32.ne + (get_local $$p$2) + (i32.const 0) + ) + ) + (set_local $$or$cond + (i32.or + (get_local $$tobool314) + (get_local $$159) + ) + ) + (if + (get_local $$or$cond) + (block + (set_local $$sub$ptr$rhs$cast318 + (get_local $$a$0) + ) + (set_local $$sub$ptr$sub319 + (i32.sub + (get_local $$sub$ptr$lhs$cast317) + (get_local $$sub$ptr$rhs$cast318) + ) + ) + (set_local $$160 + (i32.and + (get_local $$159) + (i32.const 1) + ) + ) + (set_local $$lnot$ext + (i32.xor + (get_local $$160) + (i32.const 1) + ) + ) + (set_local $$add322 + (i32.add + (get_local $$lnot$ext) + (get_local $$sub$ptr$sub319) + ) + ) + (set_local $$cmp323 + (i32.gt_s + (get_local $$p$2) + (get_local $$add322) + ) + ) + (set_local $$p$2$add322 + (if (result i32) + (get_local $$cmp323) + (get_local $$p$2) + (get_local $$add322) + ) + ) + (set_local $$a$2 + (get_local $$a$0) + ) + (set_local $$fl$6 + (get_local $$and309$fl$4) + ) + (set_local $$p$5 + (get_local $$p$2$add322) + ) + (set_local $$pl$2 + (get_local $$pl$1) + ) + (set_local $$prefix$2 + (get_local $$prefix$1) + ) + (set_local $$z$2 + (get_local $$add$ptr205) + ) + ) + (block + (set_local $$a$2 + (get_local $$add$ptr205) + ) + (set_local $$fl$6 + (get_local $$and309$fl$4) + ) + (set_local $$p$5 + (i32.const 0) + ) + (set_local $$pl$2 + (get_local $$pl$1) + ) + (set_local $$prefix$2 + (get_local $$prefix$1) + ) + (set_local $$z$2 + (get_local $$add$ptr205) + ) + ) + ) + ) + ) + (set_local $$sub$ptr$lhs$cast431 + (get_local $$z$2) + ) + (set_local $$sub$ptr$rhs$cast432 + (get_local $$a$2) + ) + (set_local $$sub$ptr$sub433 + (i32.sub + (get_local $$sub$ptr$lhs$cast431) + (get_local $$sub$ptr$rhs$cast432) + ) + ) + (set_local $$cmp434 + (i32.lt_s + (get_local $$p$5) + (get_local $$sub$ptr$sub433) + ) + ) + (set_local $$sub$ptr$sub433$p$5 + (if (result i32) + (get_local $$cmp434) + (get_local $$sub$ptr$sub433) + (get_local $$p$5) + ) + ) + (set_local $$add441 + (i32.add + (get_local $$pl$2) + (get_local $$sub$ptr$sub433$p$5) + ) + ) + (set_local $$cmp442 + (i32.lt_s + (get_local $$w$1) + (get_local $$add441) + ) + ) + (set_local $$w$2 + (if (result i32) + (get_local $$cmp442) + (get_local $$add441) + (get_local $$w$1) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$2) + (get_local $$add441) + (get_local $$fl$6) + ) + (set_local $$265 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$244 + (i32.and + (get_local $$265) + (i32.const 32) + ) + ) + (set_local $$tobool$i$245 + (i32.eq + (get_local $$and$i$244) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$245) + (drop + (call $___fwritex + (get_local $$prefix$2) + (get_local $$pl$2) + (get_local $$f) + ) + ) + ) + (set_local $$xor449 + (i32.xor + (get_local $$fl$6) + (i32.const 65536) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$w$2) + (get_local $$add441) + (get_local $$xor449) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$sub$ptr$sub433$p$5) + (get_local $$sub$ptr$sub433) + (i32.const 0) + ) + (set_local $$266 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$216 + (i32.and + (get_local $$266) + (i32.const 32) + ) + ) + (set_local $$tobool$i$217 + (i32.eq + (get_local $$and$i$216) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$217) + (drop + (call $___fwritex + (get_local $$a$2) + (get_local $$sub$ptr$sub433) + (get_local $$f) + ) + ) + ) + (set_local $$xor457 + (i32.xor + (get_local $$fl$6) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$2) + (get_local $$add441) + (get_local $$xor457) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$w$2) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + ) + ) + (block $label$break$L343 + (if + (i32.eq + (get_local $label) + (i32.const 242) + ) + (block + (set_local $$tobool459 + (i32.eq + (get_local $$f) + (i32.const 0) + ) + ) + (if + (get_local $$tobool459) + (block + (set_local $$tobool462 + (i32.eq + (get_local $$l10n$0$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$tobool462) + (set_local $$retval$0 + (i32.const 0) + ) + (block + (set_local $$i$2299 + (i32.const 1) + ) + (loop $while-in130 + (block $while-out129 + (set_local $$arrayidx469 + (i32.add + (get_local $$nl_type) + (i32.shl + (get_local $$i$2299) + (i32.const 2) + ) + ) + ) + (set_local $$267 + (i32.load + (get_local $$arrayidx469) + ) + ) + (set_local $$tobool470 + (i32.eq + (get_local $$267) + (i32.const 0) + ) + ) + (if + (get_local $$tobool470) + (block + (set_local $$i$2299$lcssa + (get_local $$i$2299) + ) + (br $while-out129) + ) + ) + (set_local $$add$ptr473 + (i32.add + (get_local $$nl_arg) + (i32.shl + (get_local $$i$2299) + (i32.const 3) + ) + ) + ) + (call $_pop_arg_336 + (get_local $$add$ptr473) + (get_local $$267) + (get_local $$ap) + ) + (set_local $$inc + (i32.add + (get_local $$i$2299) + (i32.const 1) + ) + ) + (set_local $$cmp466 + (i32.lt_s + (get_local $$inc) + (i32.const 10) + ) + ) + (if + (get_local $$cmp466) + (set_local $$i$2299 + (get_local $$inc) + ) + (block + (set_local $$retval$0 + (i32.const 1) + ) + (br $label$break$L343) + ) + ) + (br $while-in130) + ) + ) + (set_local $$cmp478$295 + (i32.lt_s + (get_local $$i$2299$lcssa) + (i32.const 10) + ) + ) + (if + (get_local $$cmp478$295) + (block + (set_local $$i$3296 + (get_local $$i$2299$lcssa) + ) + (loop $while-in132 + (block $while-out131 + (set_local $$arrayidx481 + (i32.add + (get_local $$nl_type) + (i32.shl + (get_local $$i$3296) + (i32.const 2) + ) + ) + ) + (set_local $$268 + (i32.load + (get_local $$arrayidx481) + ) + ) + (set_local $$lnot483 + (i32.eq + (get_local $$268) + (i32.const 0) + ) + ) + (set_local $$inc488 + (i32.add + (get_local $$i$3296) + (i32.const 1) + ) + ) + (if + (i32.eqz + (get_local $$lnot483) + ) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L343) + ) + ) + (set_local $$cmp478 + (i32.lt_s + (get_local $$inc488) + (i32.const 10) + ) + ) + (if + (get_local $$cmp478) + (set_local $$i$3296 + (get_local $$inc488) + ) + (block + (set_local $$retval$0 + (i32.const 1) + ) + (br $while-out131) + ) + ) + (br $while-in132) + ) + ) + ) + (set_local $$retval$0 + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $$retval$0 + (get_local $$cnt$1$lcssa) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_pop_arg_336 (; 50 ;) (param $$arg i32) (param $$type i32) (param $$ap i32) + (local $$0 i32) + (local $$1 i32) + (local $$10 i32) + (local $$100 i32) + (local $$101 i32) + (local $$102 i32) + (local $$103 f64) + (local $$104 i32) + (local $$105 i32) + (local $$106 i32) + (local $$107 i32) + (local $$108 i32) + (local $$109 i32) + (local $$11 i32) + (local $$110 f64) + (local $$12 i32) + (local $$13 i32) + (local $$14 i32) + (local $$15 i32) + (local $$16 i32) + (local $$17 i32) + (local $$18 i32) + (local $$19 i32) + (local $$2 i32) + (local $$20 i32) + (local $$21 i32) + (local $$22 i32) + (local $$23 i32) + (local $$24 i32) + (local $$25 i32) + (local $$26 i32) + (local $$27 i32) + (local $$28 i32) + (local $$29 i32) + (local $$3 i32) + (local $$30 i32) + (local $$31 i32) + (local $$32 i32) + (local $$33 i32) + (local $$34 i32) + (local $$35 i32) + (local $$36 i32) + (local $$37 i32) + (local $$38 i32) + (local $$39 i32) + (local $$4 i32) + (local $$40 i32) + (local $$41 i32) + (local $$42 i32) + (local $$43 i32) + (local $$44 i32) + (local $$45 i32) + (local $$46 i32) + (local $$47 i32) + (local $$48 i32) + (local $$49 i32) + (local $$5 i32) + (local $$50 i32) + (local $$51 i32) + (local $$52 i32) + (local $$53 i32) + (local $$54 i32) + (local $$55 i32) + (local $$56 i32) + (local $$57 i32) + (local $$58 i32) + (local $$59 i32) + (local $$6 i32) + (local $$60 i32) + (local $$61 i32) + (local $$62 i32) + (local $$63 i32) + (local $$64 i32) + (local $$65 i32) + (local $$66 i32) + (local $$67 i32) + (local $$68 i32) + (local $$69 i32) + (local $$7 i32) + (local $$70 i32) + (local $$71 i32) + (local $$72 i32) + (local $$73 i32) + (local $$74 i32) + (local $$75 i32) + (local $$76 i32) + (local $$77 i32) + (local $$78 i32) + (local $$79 i32) + (local $$8 i32) + (local $$80 i32) + (local $$81 i32) + (local $$82 i32) + (local $$83 i32) + (local $$84 i32) + (local $$85 i32) + (local $$86 i32) + (local $$87 i32) + (local $$88 i32) + (local $$89 i32) + (local $$9 i32) + (local $$90 i32) + (local $$91 i32) + (local $$92 i32) + (local $$93 i32) + (local $$94 i32) + (local $$95 i32) + (local $$96 i32) + (local $$97 i32) + (local $$98 i32) + (local $$99 i32) + (local $$arglist_current i32) + (local $$arglist_current11 i32) + (local $$arglist_current14 i32) + (local $$arglist_current17 i32) + (local $$arglist_current2 i32) + (local $$arglist_current20 i32) + (local $$arglist_current23 i32) + (local $$arglist_current26 i32) + (local $$arglist_current5 i32) + (local $$arglist_current8 i32) + (local $$arglist_next i32) + (local $$arglist_next12 i32) + (local $$arglist_next15 i32) + (local $$arglist_next18 i32) + (local $$arglist_next21 i32) + (local $$arglist_next24 i32) + (local $$arglist_next27 i32) + (local $$arglist_next3 i32) + (local $$arglist_next6 i32) + (local $$arglist_next9 i32) + (local $$cmp i32) + (local $$conv12 i32) + (local $$conv17$mask i32) + (local $$conv22 i32) + (local $$conv27$mask i32) + (local $$expanded i32) + (local $$expanded28 i32) + (local $$expanded30 i32) + (local $$expanded31 i32) + (local $$expanded32 i32) + (local $$expanded34 i32) + (local $$expanded35 i32) + (local $$expanded37 i32) + (local $$expanded38 i32) + (local $$expanded39 i32) + (local $$expanded41 i32) + (local $$expanded42 i32) + (local $$expanded44 i32) + (local $$expanded45 i32) + (local $$expanded46 i32) + (local $$expanded48 i32) + (local $$expanded49 i32) + (local $$expanded51 i32) + (local $$expanded52 i32) + (local $$expanded53 i32) + (local $$expanded55 i32) + (local $$expanded56 i32) + (local $$expanded58 i32) + (local $$expanded59 i32) + (local $$expanded60 i32) + (local $$expanded62 i32) + (local $$expanded63 i32) + (local $$expanded65 i32) + (local $$expanded66 i32) + (local $$expanded67 i32) + (local $$expanded69 i32) + (local $$expanded70 i32) + (local $$expanded72 i32) + (local $$expanded73 i32) + (local $$expanded74 i32) + (local $$expanded76 i32) + (local $$expanded77 i32) + (local $$expanded79 i32) + (local $$expanded80 i32) + (local $$expanded81 i32) + (local $$expanded83 i32) + (local $$expanded84 i32) + (local $$expanded86 i32) + (local $$expanded87 i32) + (local $$expanded88 i32) + (local $$expanded90 i32) + (local $$expanded91 i32) + (local $$expanded93 i32) + (local $$expanded94 i32) + (local $$expanded95 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$cmp + (i32.gt_u + (get_local $$type) + (i32.const 20) + ) + ) + (block $label$break$L1 + (if + (i32.eqz + (get_local $$cmp) + ) + (block $do-once + (block $switch + (block $switch-default + (block $switch-case9 + (block $switch-case8 + (block $switch-case7 + (block $switch-case6 + (block $switch-case5 + (block $switch-case4 + (block $switch-case3 + (block $switch-case2 + (block $switch-case1 + (block $switch-case + (br_table $switch-case $switch-case1 $switch-case2 $switch-case3 $switch-case4 $switch-case5 $switch-case6 $switch-case7 $switch-case8 $switch-case9 $switch-default + (i32.sub + (get_local $$type) + (i32.const 9) + ) + ) + ) + (block + (set_local $$arglist_current + (i32.load + (get_local $$ap) + ) + ) + (set_local $$0 + (get_local $$arglist_current) + ) + (set_local $$1 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded28 + (get_local $$1) + ) + (set_local $$expanded + (i32.sub + (get_local $$expanded28) + (i32.const 1) + ) + ) + (set_local $$2 + (i32.add + (get_local $$0) + (get_local $$expanded) + ) + ) + (set_local $$3 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded32 + (get_local $$3) + ) + (set_local $$expanded31 + (i32.sub + (get_local $$expanded32) + (i32.const 1) + ) + ) + (set_local $$expanded30 + (i32.xor + (get_local $$expanded31) + (i32.const -1) + ) + ) + (set_local $$4 + (i32.and + (get_local $$2) + (get_local $$expanded30) + ) + ) + (set_local $$5 + (get_local $$4) + ) + (set_local $$6 + (i32.load + (get_local $$5) + ) + ) + (set_local $$arglist_next + (i32.add + (get_local $$5) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next) + ) + (i32.store + (get_local $$arg) + (get_local $$6) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current2 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$7 + (get_local $$arglist_current2) + ) + (set_local $$8 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded35 + (get_local $$8) + ) + (set_local $$expanded34 + (i32.sub + (get_local $$expanded35) + (i32.const 1) + ) + ) + (set_local $$9 + (i32.add + (get_local $$7) + (get_local $$expanded34) + ) + ) + (set_local $$10 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded39 + (get_local $$10) + ) + (set_local $$expanded38 + (i32.sub + (get_local $$expanded39) + (i32.const 1) + ) + ) + (set_local $$expanded37 + (i32.xor + (get_local $$expanded38) + (i32.const -1) + ) + ) + (set_local $$11 + (i32.and + (get_local $$9) + (get_local $$expanded37) + ) + ) + (set_local $$12 + (get_local $$11) + ) + (set_local $$13 + (i32.load + (get_local $$12) + ) + ) + (set_local $$arglist_next3 + (i32.add + (get_local $$12) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next3) + ) + (set_local $$14 + (i32.lt_s + (get_local $$13) + (i32.const 0) + ) + ) + (set_local $$15 + (i32.shr_s + (i32.shl + (get_local $$14) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$16 + (get_local $$arg) + ) + (set_local $$17 + (get_local $$16) + ) + (i32.store + (get_local $$17) + (get_local $$13) + ) + (set_local $$18 + (i32.add + (get_local $$16) + (i32.const 4) + ) + ) + (set_local $$19 + (get_local $$18) + ) + (i32.store + (get_local $$19) + (get_local $$15) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current5 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$20 + (get_local $$arglist_current5) + ) + (set_local $$21 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded42 + (get_local $$21) + ) + (set_local $$expanded41 + (i32.sub + (get_local $$expanded42) + (i32.const 1) + ) + ) + (set_local $$22 + (i32.add + (get_local $$20) + (get_local $$expanded41) + ) + ) + (set_local $$23 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded46 + (get_local $$23) + ) + (set_local $$expanded45 + (i32.sub + (get_local $$expanded46) + (i32.const 1) + ) + ) + (set_local $$expanded44 + (i32.xor + (get_local $$expanded45) + (i32.const -1) + ) + ) + (set_local $$24 + (i32.and + (get_local $$22) + (get_local $$expanded44) + ) + ) + (set_local $$25 + (get_local $$24) + ) + (set_local $$26 + (i32.load + (get_local $$25) + ) + ) + (set_local $$arglist_next6 + (i32.add + (get_local $$25) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next6) + ) + (set_local $$27 + (get_local $$arg) + ) + (set_local $$28 + (get_local $$27) + ) + (i32.store + (get_local $$28) + (get_local $$26) + ) + (set_local $$29 + (i32.add + (get_local $$27) + (i32.const 4) + ) + ) + (set_local $$30 + (get_local $$29) + ) + (i32.store + (get_local $$30) + (i32.const 0) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current8 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$31 + (get_local $$arglist_current8) + ) + (set_local $$32 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $$expanded49 + (get_local $$32) + ) + (set_local $$expanded48 + (i32.sub + (get_local $$expanded49) + (i32.const 1) + ) + ) + (set_local $$33 + (i32.add + (get_local $$31) + (get_local $$expanded48) + ) + ) + (set_local $$34 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $$expanded53 + (get_local $$34) + ) + (set_local $$expanded52 + (i32.sub + (get_local $$expanded53) + (i32.const 1) + ) + ) + (set_local $$expanded51 + (i32.xor + (get_local $$expanded52) + (i32.const -1) + ) + ) + (set_local $$35 + (i32.and + (get_local $$33) + (get_local $$expanded51) + ) + ) + (set_local $$36 + (get_local $$35) + ) + (set_local $$37 + (get_local $$36) + ) + (set_local $$38 + (get_local $$37) + ) + (set_local $$39 + (i32.load + (get_local $$38) + ) + ) + (set_local $$40 + (i32.add + (get_local $$37) + (i32.const 4) + ) + ) + (set_local $$41 + (get_local $$40) + ) + (set_local $$42 + (i32.load + (get_local $$41) + ) + ) + (set_local $$arglist_next9 + (i32.add + (get_local $$36) + (i32.const 8) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next9) + ) + (set_local $$43 + (get_local $$arg) + ) + (set_local $$44 + (get_local $$43) + ) + (i32.store + (get_local $$44) + (get_local $$39) + ) + (set_local $$45 + (i32.add + (get_local $$43) + (i32.const 4) + ) + ) + (set_local $$46 + (get_local $$45) + ) + (i32.store + (get_local $$46) + (get_local $$42) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current11 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$47 + (get_local $$arglist_current11) + ) + (set_local $$48 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded56 + (get_local $$48) + ) + (set_local $$expanded55 + (i32.sub + (get_local $$expanded56) + (i32.const 1) + ) + ) + (set_local $$49 + (i32.add + (get_local $$47) + (get_local $$expanded55) + ) + ) + (set_local $$50 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded60 + (get_local $$50) + ) + (set_local $$expanded59 + (i32.sub + (get_local $$expanded60) + (i32.const 1) + ) + ) + (set_local $$expanded58 + (i32.xor + (get_local $$expanded59) + (i32.const -1) + ) + ) + (set_local $$51 + (i32.and + (get_local $$49) + (get_local $$expanded58) + ) + ) + (set_local $$52 + (get_local $$51) + ) + (set_local $$53 + (i32.load + (get_local $$52) + ) + ) + (set_local $$arglist_next12 + (i32.add + (get_local $$52) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next12) + ) + (set_local $$conv12 + (i32.and + (get_local $$53) + (i32.const 65535) + ) + ) + (set_local $$54 + (i32.shr_s + (i32.shl + (get_local $$conv12) + (i32.const 16) + ) + (i32.const 16) + ) + ) + (set_local $$55 + (i32.lt_s + (get_local $$54) + (i32.const 0) + ) + ) + (set_local $$56 + (i32.shr_s + (i32.shl + (get_local $$55) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$57 + (get_local $$arg) + ) + (set_local $$58 + (get_local $$57) + ) + (i32.store + (get_local $$58) + (get_local $$54) + ) + (set_local $$59 + (i32.add + (get_local $$57) + (i32.const 4) + ) + ) + (set_local $$60 + (get_local $$59) + ) + (i32.store + (get_local $$60) + (get_local $$56) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current14 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$61 + (get_local $$arglist_current14) + ) + (set_local $$62 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded63 + (get_local $$62) + ) + (set_local $$expanded62 + (i32.sub + (get_local $$expanded63) + (i32.const 1) + ) + ) + (set_local $$63 + (i32.add + (get_local $$61) + (get_local $$expanded62) + ) + ) + (set_local $$64 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded67 + (get_local $$64) + ) + (set_local $$expanded66 + (i32.sub + (get_local $$expanded67) + (i32.const 1) + ) + ) + (set_local $$expanded65 + (i32.xor + (get_local $$expanded66) + (i32.const -1) + ) + ) + (set_local $$65 + (i32.and + (get_local $$63) + (get_local $$expanded65) + ) + ) + (set_local $$66 + (get_local $$65) + ) + (set_local $$67 + (i32.load + (get_local $$66) + ) + ) + (set_local $$arglist_next15 + (i32.add + (get_local $$66) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next15) + ) + (set_local $$conv17$mask + (i32.and + (get_local $$67) + (i32.const 65535) + ) + ) + (set_local $$68 + (get_local $$arg) + ) + (set_local $$69 + (get_local $$68) + ) + (i32.store + (get_local $$69) + (get_local $$conv17$mask) + ) + (set_local $$70 + (i32.add + (get_local $$68) + (i32.const 4) + ) + ) + (set_local $$71 + (get_local $$70) + ) + (i32.store + (get_local $$71) + (i32.const 0) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current17 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$72 + (get_local $$arglist_current17) + ) + (set_local $$73 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded70 + (get_local $$73) + ) + (set_local $$expanded69 + (i32.sub + (get_local $$expanded70) + (i32.const 1) + ) + ) + (set_local $$74 + (i32.add + (get_local $$72) + (get_local $$expanded69) + ) + ) + (set_local $$75 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded74 + (get_local $$75) + ) + (set_local $$expanded73 + (i32.sub + (get_local $$expanded74) + (i32.const 1) + ) + ) + (set_local $$expanded72 + (i32.xor + (get_local $$expanded73) + (i32.const -1) + ) + ) + (set_local $$76 + (i32.and + (get_local $$74) + (get_local $$expanded72) + ) + ) + (set_local $$77 + (get_local $$76) + ) + (set_local $$78 + (i32.load + (get_local $$77) + ) + ) + (set_local $$arglist_next18 + (i32.add + (get_local $$77) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next18) + ) + (set_local $$conv22 + (i32.and + (get_local $$78) + (i32.const 255) + ) + ) + (set_local $$79 + (i32.shr_s + (i32.shl + (get_local $$conv22) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$80 + (i32.lt_s + (get_local $$79) + (i32.const 0) + ) + ) + (set_local $$81 + (i32.shr_s + (i32.shl + (get_local $$80) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$82 + (get_local $$arg) + ) + (set_local $$83 + (get_local $$82) + ) + (i32.store + (get_local $$83) + (get_local $$79) + ) + (set_local $$84 + (i32.add + (get_local $$82) + (i32.const 4) + ) + ) + (set_local $$85 + (get_local $$84) + ) + (i32.store + (get_local $$85) + (get_local $$81) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current20 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$86 + (get_local $$arglist_current20) + ) + (set_local $$87 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded77 + (get_local $$87) + ) + (set_local $$expanded76 + (i32.sub + (get_local $$expanded77) + (i32.const 1) + ) + ) + (set_local $$88 + (i32.add + (get_local $$86) + (get_local $$expanded76) + ) + ) + (set_local $$89 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded81 + (get_local $$89) + ) + (set_local $$expanded80 + (i32.sub + (get_local $$expanded81) + (i32.const 1) + ) + ) + (set_local $$expanded79 + (i32.xor + (get_local $$expanded80) + (i32.const -1) + ) + ) + (set_local $$90 + (i32.and + (get_local $$88) + (get_local $$expanded79) + ) + ) + (set_local $$91 + (get_local $$90) + ) + (set_local $$92 + (i32.load + (get_local $$91) + ) + ) + (set_local $$arglist_next21 + (i32.add + (get_local $$91) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next21) + ) + (set_local $$conv27$mask + (i32.and + (get_local $$92) + (i32.const 255) + ) + ) + (set_local $$93 + (get_local $$arg) + ) + (set_local $$94 + (get_local $$93) + ) + (i32.store + (get_local $$94) + (get_local $$conv27$mask) + ) + (set_local $$95 + (i32.add + (get_local $$93) + (i32.const 4) + ) + ) + (set_local $$96 + (get_local $$95) + ) + (i32.store + (get_local $$96) + (i32.const 0) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current23 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$97 + (get_local $$arglist_current23) + ) + (set_local $$98 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $$expanded84 + (get_local $$98) + ) + (set_local $$expanded83 + (i32.sub + (get_local $$expanded84) + (i32.const 1) + ) + ) + (set_local $$99 + (i32.add + (get_local $$97) + (get_local $$expanded83) + ) + ) + (set_local $$100 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $$expanded88 + (get_local $$100) + ) + (set_local $$expanded87 + (i32.sub + (get_local $$expanded88) + (i32.const 1) + ) + ) + (set_local $$expanded86 + (i32.xor + (get_local $$expanded87) + (i32.const -1) + ) + ) + (set_local $$101 + (i32.and + (get_local $$99) + (get_local $$expanded86) + ) + ) + (set_local $$102 + (get_local $$101) + ) + (set_local $$103 + (f64.load + (get_local $$102) + ) + ) + (set_local $$arglist_next24 + (i32.add + (get_local $$102) + (i32.const 8) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next24) + ) + (f64.store + (get_local $$arg) + (get_local $$103) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current26 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$104 + (get_local $$arglist_current26) + ) + (set_local $$105 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $$expanded91 + (get_local $$105) + ) + (set_local $$expanded90 + (i32.sub + (get_local $$expanded91) + (i32.const 1) + ) + ) + (set_local $$106 + (i32.add + (get_local $$104) + (get_local $$expanded90) + ) + ) + (set_local $$107 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $$expanded95 + (get_local $$107) + ) + (set_local $$expanded94 + (i32.sub + (get_local $$expanded95) + (i32.const 1) + ) + ) + (set_local $$expanded93 + (i32.xor + (get_local $$expanded94) + (i32.const -1) + ) + ) + (set_local $$108 + (i32.and + (get_local $$106) + (get_local $$expanded93) + ) + ) + (set_local $$109 + (get_local $$108) + ) + (set_local $$110 + (f64.load + (get_local $$109) + ) + ) + (set_local $$arglist_next27 + (i32.add + (get_local $$109) + (i32.const 8) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next27) + ) + (f64.store + (get_local $$arg) + (get_local $$110) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (br $label$break$L1) + ) + ) + ) + ) + (return) + ) + (func $_fmt_u (; 51 ;) (param $$0 i32) (param $$1 i32) (param $$s i32) (result i32) + (local $$10 i32) + (local $$11 i32) + (local $$12 i32) + (local $$13 i32) + (local $$14 i32) + (local $$15 i32) + (local $$16 i32) + (local $$17 i32) + (local $$18 i32) + (local $$19 i32) + (local $$2 i32) + (local $$20 i32) + (local $$21 i32) + (local $$22 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 i32) + (local $$8 i32) + (local $$9 i32) + (local $$add5 i32) + (local $$conv6 i32) + (local $$div9 i32) + (local $$incdec$ptr i32) + (local $$incdec$ptr$lcssa i32) + (local $$incdec$ptr7 i32) + (local $$rem4 i32) + (local $$s$addr$0$lcssa i32) + (local $$s$addr$013 i32) + (local $$s$addr$1$lcssa i32) + (local $$s$addr$19 i32) + (local $$tobool$8 i32) + (local $$x$addr$0$lcssa$off0 i32) + (local $$y$010 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$2 + (i32.gt_u + (get_local $$1) + (i32.const 0) + ) + ) + (set_local $$3 + (i32.gt_u + (get_local $$0) + (i32.const -1) + ) + ) + (set_local $$4 + (i32.eq + (get_local $$1) + (i32.const 0) + ) + ) + (set_local $$5 + (i32.and + (get_local $$4) + (get_local $$3) + ) + ) + (set_local $$6 + (i32.or + (get_local $$2) + (get_local $$5) + ) + ) + (if + (get_local $$6) + (block + (set_local $$7 + (get_local $$0) + ) + (set_local $$8 + (get_local $$1) + ) + (set_local $$s$addr$013 + (get_local $$s) + ) + (loop $while-in + (block $while-out + (set_local $$9 + (call $___uremdi3 + (get_local $$7) + (get_local $$8) + (i32.const 10) + (i32.const 0) + ) + ) + (set_local $$10 + (get_global $tempRet0) + ) + (set_local $$11 + (i32.or + (get_local $$9) + (i32.const 48) + ) + ) + (set_local $$12 + (i32.and + (get_local $$11) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$s$addr$013) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr) + (get_local $$12) + ) + (set_local $$13 + (call $___udivdi3 + (get_local $$7) + (get_local $$8) + (i32.const 10) + (i32.const 0) + ) + ) + (set_local $$14 + (get_global $tempRet0) + ) + (set_local $$15 + (i32.gt_u + (get_local $$8) + (i32.const 9) + ) + ) + (set_local $$16 + (i32.gt_u + (get_local $$7) + (i32.const -1) + ) + ) + (set_local $$17 + (i32.eq + (get_local $$8) + (i32.const 9) + ) + ) + (set_local $$18 + (i32.and + (get_local $$17) + (get_local $$16) + ) + ) + (set_local $$19 + (i32.or + (get_local $$15) + (get_local $$18) + ) + ) + (if + (get_local $$19) + (block + (set_local $$7 + (get_local $$13) + ) + (set_local $$8 + (get_local $$14) + ) + (set_local $$s$addr$013 + (get_local $$incdec$ptr) + ) + ) + (block + (set_local $$21 + (get_local $$13) + ) + (set_local $$22 + (get_local $$14) + ) + (set_local $$incdec$ptr$lcssa + (get_local $$incdec$ptr) + ) + (br $while-out) + ) + ) + (br $while-in) + ) + ) + (set_local $$s$addr$0$lcssa + (get_local $$incdec$ptr$lcssa) + ) + (set_local $$x$addr$0$lcssa$off0 + (get_local $$21) + ) + ) + (block + (set_local $$s$addr$0$lcssa + (get_local $$s) + ) + (set_local $$x$addr$0$lcssa$off0 + (get_local $$0) + ) + ) + ) + (set_local $$tobool$8 + (i32.eq + (get_local $$x$addr$0$lcssa$off0) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$8) + (set_local $$s$addr$1$lcssa + (get_local $$s$addr$0$lcssa) + ) + (block + (set_local $$s$addr$19 + (get_local $$s$addr$0$lcssa) + ) + (set_local $$y$010 + (get_local $$x$addr$0$lcssa$off0) + ) + (loop $while-in1 + (block $while-out0 + (set_local $$rem4 + (i32.and + (i32.rem_u + (get_local $$y$010) + (i32.const 10) + ) + (i32.const -1) + ) + ) + (set_local $$add5 + (i32.or + (get_local $$rem4) + (i32.const 48) + ) + ) + (set_local $$conv6 + (i32.and + (get_local $$add5) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr7 + (i32.add + (get_local $$s$addr$19) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr7) + (get_local $$conv6) + ) + (set_local $$div9 + (i32.and + (i32.div_u + (get_local $$y$010) + (i32.const 10) + ) + (i32.const -1) + ) + ) + (set_local $$20 + (i32.lt_u + (get_local $$y$010) + (i32.const 10) + ) + ) + (if + (get_local $$20) + (block + (set_local $$s$addr$1$lcssa + (get_local $$incdec$ptr7) + ) + (br $while-out0) + ) + (block + (set_local $$s$addr$19 + (get_local $$incdec$ptr7) + ) + (set_local $$y$010 + (get_local $$div9) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (return + (get_local $$s$addr$1$lcssa) + ) + ) + (func $_pad (; 52 ;) (param $$f i32) (param $$c i32) (param $$w i32) (param $$l i32) (param $$fl i32) + (local $$$pre i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$and i32) + (local $$and$i i32) + (local $$and$i$15 i32) + (local $$cmp i32) + (local $$cmp1 i32) + (local $$cmp3 i32) + (local $$cmp3$14 i32) + (local $$cond i32) + (local $$l$addr$0$lcssa21 i32) + (local $$l$addr$017 i32) + (local $$or$cond i32) + (local $$pad i32) + (local $$sub i32) + (local $$sub5 i32) + (local $$tobool i32) + (local $$tobool$i i32) + (local $$tobool$i$16 i32) + (local $$tobool$i18 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 256) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$pad + (get_local $sp) + ) + (set_local $$and + (i32.and + (get_local $$fl) + (i32.const 73728) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$and) + (i32.const 0) + ) + ) + (set_local $$cmp + (i32.gt_s + (get_local $$w) + (get_local $$l) + ) + ) + (set_local $$or$cond + (i32.and + (get_local $$cmp) + (get_local $$tobool) + ) + ) + (block $do-once + (if + (get_local $$or$cond) + (block + (set_local $$sub + (i32.sub + (get_local $$w) + (get_local $$l) + ) + ) + (set_local $$cmp1 + (i32.gt_u + (get_local $$sub) + (i32.const 256) + ) + ) + (set_local $$cond + (if (result i32) + (get_local $$cmp1) + (i32.const 256) + (get_local $$sub) + ) + ) + (drop + (call $_memset + (get_local $$pad) + (get_local $$c) + (get_local $$cond) + ) + ) + (set_local $$cmp3$14 + (i32.gt_u + (get_local $$sub) + (i32.const 255) + ) + ) + (set_local $$0 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$15 + (i32.and + (get_local $$0) + (i32.const 32) + ) + ) + (set_local $$tobool$i$16 + (i32.eq + (get_local $$and$i$15) + (i32.const 0) + ) + ) + (if + (get_local $$cmp3$14) + (block + (set_local $$1 + (i32.sub + (get_local $$w) + (get_local $$l) + ) + ) + (set_local $$4 + (get_local $$0) + ) + (set_local $$l$addr$017 + (get_local $$sub) + ) + (set_local $$tobool$i18 + (get_local $$tobool$i$16) + ) + (loop $while-in + (block $while-out + (if + (get_local $$tobool$i18) + (block + (drop + (call $___fwritex + (get_local $$pad) + (i32.const 256) + (get_local $$f) + ) + ) + (set_local $$$pre + (i32.load + (get_local $$f) + ) + ) + (set_local $$2 + (get_local $$$pre) + ) + ) + (set_local $$2 + (get_local $$4) + ) + ) + (set_local $$sub5 + (i32.add + (get_local $$l$addr$017) + (i32.const -256) + ) + ) + (set_local $$cmp3 + (i32.gt_u + (get_local $$sub5) + (i32.const 255) + ) + ) + (set_local $$and$i + (i32.and + (get_local $$2) + (i32.const 32) + ) + ) + (set_local $$tobool$i + (i32.eq + (get_local $$and$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp3) + (block + (set_local $$4 + (get_local $$2) + ) + (set_local $$l$addr$017 + (get_local $$sub5) + ) + (set_local $$tobool$i18 + (get_local $$tobool$i) + ) + ) + (br $while-out) + ) + (br $while-in) + ) + ) + (set_local $$3 + (i32.and + (get_local $$1) + (i32.const 255) + ) + ) + (if + (get_local $$tobool$i) + (set_local $$l$addr$0$lcssa21 + (get_local $$3) + ) + (br $do-once) + ) + ) + (if + (get_local $$tobool$i$16) + (set_local $$l$addr$0$lcssa21 + (get_local $$sub) + ) + (br $do-once) + ) + ) + (drop + (call $___fwritex + (get_local $$pad) + (get_local $$l$addr$0$lcssa21) + (get_local $$f) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return) + ) + (func $_malloc (; 53 ;) (param $$bytes i32) (result i32) + (local $$$lcssa i32) + (local $$$lcssa290 i32) + (local $$$pre i32) + (local $$$pre$i i32) + (local $$$pre$i$177 i32) + (local $$$pre$i$56$i i32) + (local $$$pre$i$i i32) + (local $$$pre$phi$i$178Z2D i32) + (local $$$pre$phi$i$57$iZ2D i32) + (local $$$pre$phi$i$iZ2D i32) + (local $$$pre$phi$iZ2D i32) + (local $$$pre$phiZ2D i32) + (local $$$pre241 i32) + (local $$$pre5$i$i i32) + (local $$0 i32) + (local $$1 i32) + (local $$10 i32) + (local $$100 i32) + (local $$101 i32) + (local $$102 i32) + (local $$103 i32) + (local $$104 i32) + (local $$105 i32) + (local $$106 i32) + (local $$107 i32) + (local $$108 i32) + (local $$109 i32) + (local $$11 i32) + (local $$110 i32) + (local $$111 i32) + (local $$112 i32) + (local $$113 i32) + (local $$114 i32) + (local $$115 i32) + (local $$116 i32) + (local $$117 i32) + (local $$118 i32) + (local $$119 i32) + (local $$12 i32) + (local $$120 i32) + (local $$121 i32) + (local $$122 i32) + (local $$123 i32) + (local $$124 i32) + (local $$125 i32) + (local $$126 i32) + (local $$127 i32) + (local $$128 i32) + (local $$129 i32) + (local $$13 i32) + (local $$130 i32) + (local $$131 i32) + (local $$132 i32) + (local $$133 i32) + (local $$134 i32) + (local $$135 i32) + (local $$136 i32) + (local $$137 i32) + (local $$138 i32) + (local $$139 i32) + (local $$14 i32) + (local $$140 i32) + (local $$141 i32) + (local $$142 i32) + (local $$143 i32) + (local $$144 i32) + (local $$145 i32) + (local $$146 i32) + (local $$147 i32) + (local $$148 i32) + (local $$149 i32) + (local $$15 i32) + (local $$150 i32) + (local $$151 i32) + (local $$152 i32) + (local $$153 i32) + (local $$154 i32) + (local $$155 i32) + (local $$156 i32) + (local $$157 i32) + (local $$158 i32) + (local $$159 i32) + (local $$16 i32) + (local $$160 i32) + (local $$161 i32) + (local $$162 i32) + (local $$163 i32) + (local $$164 i32) + (local $$165 i32) + (local $$166 i32) + (local $$167 i32) + (local $$168 i32) + (local $$169 i32) + (local $$17 i32) + (local $$170 i32) + (local $$171 i32) + (local $$172 i32) + (local $$173 i32) + (local $$174 i32) + (local $$175 i32) + (local $$176 i32) + (local $$177 i32) + (local $$178 i32) + (local $$179 i32) + (local $$18 i32) + (local $$180 i32) + (local $$181 i32) + (local $$182 i32) + (local $$183 i32) + (local $$184 i32) + (local $$185 i32) + (local $$186 i32) + (local $$187 i32) + (local $$188 i32) + (local $$189 i32) + (local $$19 i32) + (local $$190 i32) + (local $$191 i32) + (local $$192 i32) + (local $$193 i32) + (local $$194 i32) + (local $$195 i32) + (local $$196 i32) + (local $$197 i32) + (local $$198 i32) + (local $$199 i32) + (local $$2 i32) + (local $$20 i32) + (local $$200 i32) + (local $$201 i32) + (local $$202 i32) + (local $$203 i32) + (local $$204 i32) + (local $$205 i32) + (local $$206 i32) + (local $$207 i32) + (local $$208 i32) + (local $$21 i32) + (local $$22 i32) + (local $$23 i32) + (local $$24 i32) + (local $$25 i32) + (local $$26 i32) + (local $$27 i32) + (local $$28 i32) + (local $$29 i32) + (local $$3 i32) + (local $$30 i32) + (local $$31 i32) + (local $$32 i32) + (local $$33 i32) + (local $$34 i32) + (local $$35 i32) + (local $$36 i32) + (local $$37 i32) + (local $$38 i32) + (local $$39 i32) + (local $$4 i32) + (local $$40 i32) + (local $$41 i32) + (local $$42 i32) + (local $$43 i32) + (local $$44 i32) + (local $$45 i32) + (local $$46 i32) + (local $$47 i32) + (local $$48 i32) + (local $$49 i32) + (local $$5 i32) + (local $$50 i32) + (local $$51 i32) + (local $$52 i32) + (local $$53 i32) + (local $$54 i32) + (local $$55 i32) + (local $$56 i32) + (local $$57 i32) + (local $$58 i32) + (local $$59 i32) + (local $$6 i32) + (local $$60 i32) + (local $$61 i32) + (local $$62 i32) + (local $$63 i32) + (local $$64 i32) + (local $$65 i32) + (local $$66 i32) + (local $$67 i32) + (local $$68 i32) + (local $$69 i32) + (local $$7 i32) + (local $$70 i32) + (local $$71 i32) + (local $$72 i32) + (local $$73 i32) + (local $$74 i32) + (local $$75 i32) + (local $$76 i32) + (local $$77 i32) + (local $$78 i32) + (local $$79 i32) + (local $$8 i32) + (local $$80 i32) + (local $$81 i32) + (local $$82 i32) + (local $$83 i32) + (local $$84 i32) + (local $$85 i32) + (local $$86 i32) + (local $$87 i32) + (local $$88 i32) + (local $$89 i32) + (local $$9 i32) + (local $$90 i32) + (local $$91 i32) + (local $$92 i32) + (local $$93 i32) + (local $$94 i32) + (local $$95 i32) + (local $$96 i32) + (local $$97 i32) + (local $$98 i32) + (local $$99 i32) + (local $$F$0$i$i i32) + (local $$F104$0 i32) + (local $$F197$0$i i32) + (local $$F224$0$i$i i32) + (local $$F290$0$i i32) + (local $$I252$0$i$i i32) + (local $$I316$0$i i32) + (local $$I57$0$i$i i32) + (local $$K105$0$i$i i32) + (local $$K305$0$i$i i32) + (local $$K373$0$i i32) + (local $$R$1$i i32) + (local $$R$1$i$168 i32) + (local $$R$1$i$168$lcssa i32) + (local $$R$1$i$i i32) + (local $$R$1$i$i$lcssa i32) + (local $$R$1$i$lcssa i32) + (local $$R$3$i i32) + (local $$R$3$i$171 i32) + (local $$R$3$i$i i32) + (local $$RP$1$i i32) + (local $$RP$1$i$167 i32) + (local $$RP$1$i$167$lcssa i32) + (local $$RP$1$i$i i32) + (local $$RP$1$i$i$lcssa i32) + (local $$RP$1$i$lcssa i32) + (local $$T$0$i i32) + (local $$T$0$i$58$i i32) + (local $$T$0$i$58$i$lcssa i32) + (local $$T$0$i$58$i$lcssa283 i32) + (local $$T$0$i$i i32) + (local $$T$0$i$i$lcssa i32) + (local $$T$0$i$i$lcssa284 i32) + (local $$T$0$i$lcssa i32) + (local $$T$0$i$lcssa293 i32) + (local $$add$i i32) + (local $$add$i$146 i32) + (local $$add$i$180 i32) + (local $$add$i$i i32) + (local $$add$ptr i32) + (local $$add$ptr$i i32) + (local $$add$ptr$i$1$i$i i32) + (local $$add$ptr$i$11$i i32) + (local $$add$ptr$i$161 i32) + (local $$add$ptr$i$193 i32) + (local $$add$ptr$i$21$i i32) + (local $$add$ptr$i$32$i i32) + (local $$add$ptr$i$i i32) + (local $$add$ptr$i$i$i i32) + (local $$add$ptr$i$i$i$lcssa i32) + (local $$add$ptr14$i$i i32) + (local $$add$ptr15$i$i i32) + (local $$add$ptr16$i$i i32) + (local $$add$ptr166 i32) + (local $$add$ptr169 i32) + (local $$add$ptr17$i$i i32) + (local $$add$ptr178 i32) + (local $$add$ptr181$i i32) + (local $$add$ptr182 i32) + (local $$add$ptr189$i i32) + (local $$add$ptr190$i i32) + (local $$add$ptr193 i32) + (local $$add$ptr199 i32) + (local $$add$ptr2$i$i i32) + (local $$add$ptr205$i$i i32) + (local $$add$ptr212$i$i i32) + (local $$add$ptr225$i i32) + (local $$add$ptr227$i i32) + (local $$add$ptr24$i$i i32) + (local $$add$ptr262$i i32) + (local $$add$ptr269$i i32) + (local $$add$ptr273$i i32) + (local $$add$ptr282$i i32) + (local $$add$ptr3$i$i i32) + (local $$add$ptr30$i$i i32) + (local $$add$ptr369$i$i i32) + (local $$add$ptr4$i$26$i i32) + (local $$add$ptr4$i$37$i i32) + (local $$add$ptr4$i$i i32) + (local $$add$ptr4$i$i$i i32) + (local $$add$ptr441$i i32) + (local $$add$ptr5$i$i i32) + (local $$add$ptr6$i$30$i i32) + (local $$add$ptr6$i$i i32) + (local $$add$ptr6$i$i$i i32) + (local $$add$ptr7$i$i i32) + (local $$add$ptr8$i122$i i32) + (local $$add$ptr95 i32) + (local $$add$ptr98 i32) + (local $$add10$i i32) + (local $$add101$i i32) + (local $$add110$i i32) + (local $$add13$i i32) + (local $$add14$i i32) + (local $$add140$i i32) + (local $$add144 i32) + (local $$add150$i i32) + (local $$add17$i i32) + (local $$add17$i$183 i32) + (local $$add177$i i32) + (local $$add18$i i32) + (local $$add19$i i32) + (local $$add2 i32) + (local $$add20$i i32) + (local $$add206$i$i i32) + (local $$add212$i i32) + (local $$add215$i i32) + (local $$add22$i i32) + (local $$add246$i i32) + (local $$add26$i$i i32) + (local $$add268$i i32) + (local $$add269$i$i i32) + (local $$add274$i$i i32) + (local $$add278$i$i i32) + (local $$add280$i$i i32) + (local $$add283$i$i i32) + (local $$add337$i i32) + (local $$add342$i i32) + (local $$add346$i i32) + (local $$add348$i i32) + (local $$add351$i i32) + (local $$add46$i i32) + (local $$add50 i32) + (local $$add51$i i32) + (local $$add54 i32) + (local $$add54$i i32) + (local $$add58 i32) + (local $$add62 i32) + (local $$add64 i32) + (local $$add74$i$i i32) + (local $$add77$i i32) + (local $$add78$i i32) + (local $$add79$i$i i32) + (local $$add8 i32) + (local $$add82$i i32) + (local $$add83$i$i i32) + (local $$add85$i$i i32) + (local $$add86$i i32) + (local $$add88$i$i i32) + (local $$add9$i i32) + (local $$add90$i i32) + (local $$add92$i i32) + (local $$and i32) + (local $$and$i i32) + (local $$and$i$12$i i32) + (local $$and$i$14$i i32) + (local $$and$i$143 i32) + (local $$and$i$22$i i32) + (local $$and$i$33$i i32) + (local $$and$i$i i32) + (local $$and$i$i$i i32) + (local $$and100$i i32) + (local $$and103$i i32) + (local $$and104$i i32) + (local $$and106 i32) + (local $$and11$i i32) + (local $$and119$i$i i32) + (local $$and12$i i32) + (local $$and13$i i32) + (local $$and13$i$i i32) + (local $$and133$i$i i32) + (local $$and14 i32) + (local $$and145 i32) + (local $$and17$i i32) + (local $$and194$i i32) + (local $$and194$i$204 i32) + (local $$and199$i i32) + (local $$and209$i$i i32) + (local $$and21$i i32) + (local $$and21$i$149 i32) + (local $$and227$i$i i32) + (local $$and236$i i32) + (local $$and264$i$i i32) + (local $$and268$i$i i32) + (local $$and273$i$i i32) + (local $$and282$i$i i32) + (local $$and29$i i32) + (local $$and292$i i32) + (local $$and295$i$i i32) + (local $$and3$i i32) + (local $$and3$i$24$i i32) + (local $$and3$i$35$i i32) + (local $$and3$i$i i32) + (local $$and3$i$i$i i32) + (local $$and30$i i32) + (local $$and318$i$i i32) + (local $$and32$i i32) + (local $$and32$i$i i32) + (local $$and33$i$i i32) + (local $$and331$i i32) + (local $$and336$i i32) + (local $$and341$i i32) + (local $$and350$i i32) + (local $$and363$i i32) + (local $$and37$i$i i32) + (local $$and387$i i32) + (local $$and4 i32) + (local $$and40$i$i i32) + (local $$and41 i32) + (local $$and42$i i32) + (local $$and43 i32) + (local $$and46 i32) + (local $$and49 i32) + (local $$and49$i i32) + (local $$and49$i$i i32) + (local $$and53 i32) + (local $$and57 i32) + (local $$and6$i i32) + (local $$and6$i$38$i i32) + (local $$and6$i$i i32) + (local $$and61 i32) + (local $$and64$i i32) + (local $$and68$i i32) + (local $$and69$i$i i32) + (local $$and7 i32) + (local $$and7$i$i i32) + (local $$and73$i i32) + (local $$and73$i$i i32) + (local $$and74 i32) + (local $$and77$i i32) + (local $$and78$i$i i32) + (local $$and8$i i32) + (local $$and80$i i32) + (local $$and81$i i32) + (local $$and85$i i32) + (local $$and87$i$i i32) + (local $$and89$i i32) + (local $$and9$i i32) + (local $$and96$i$i i32) + (local $$arrayidx i32) + (local $$arrayidx$i i32) + (local $$arrayidx$i$150 i32) + (local $$arrayidx$i$20$i i32) + (local $$arrayidx$i$48$i i32) + (local $$arrayidx$i$i i32) + (local $$arrayidx103 i32) + (local $$arrayidx103$i$i i32) + (local $$arrayidx106$i i32) + (local $$arrayidx107$i$i i32) + (local $$arrayidx113$i i32) + (local $$arrayidx113$i$159 i32) + (local $$arrayidx121$i i32) + (local $$arrayidx123$i$i i32) + (local $$arrayidx126$i$i i32) + (local $$arrayidx126$i$i$lcssa i32) + (local $$arrayidx137$i i32) + (local $$arrayidx143$i$i i32) + (local $$arrayidx148$i i32) + (local $$arrayidx151$i i32) + (local $$arrayidx151$i$i i32) + (local $$arrayidx154$i i32) + (local $$arrayidx155$i i32) + (local $$arrayidx161$i i32) + (local $$arrayidx165$i i32) + (local $$arrayidx165$i$169 i32) + (local $$arrayidx178$i$i i32) + (local $$arrayidx184$i i32) + (local $$arrayidx184$i$i i32) + (local $$arrayidx195$i$i i32) + (local $$arrayidx196$i i32) + (local $$arrayidx204$i i32) + (local $$arrayidx212$i i32) + (local $$arrayidx223$i$i i32) + (local $$arrayidx228$i i32) + (local $$arrayidx23$i i32) + (local $$arrayidx239$i i32) + (local $$arrayidx245$i i32) + (local $$arrayidx256$i i32) + (local $$arrayidx27$i i32) + (local $$arrayidx287$i$i i32) + (local $$arrayidx289$i i32) + (local $$arrayidx290$i$i i32) + (local $$arrayidx325$i$i i32) + (local $$arrayidx325$i$i$lcssa i32) + (local $$arrayidx355$i i32) + (local $$arrayidx358$i i32) + (local $$arrayidx394$i i32) + (local $$arrayidx394$i$lcssa i32) + (local $$arrayidx40$i i32) + (local $$arrayidx44$i i32) + (local $$arrayidx61$i i32) + (local $$arrayidx65$i i32) + (local $$arrayidx66 i32) + (local $$arrayidx71$i i32) + (local $$arrayidx75$i i32) + (local $$arrayidx91$i$i i32) + (local $$arrayidx92$i$i i32) + (local $$arrayidx94$i i32) + (local $$arrayidx94$i$156 i32) + (local $$arrayidx96$i$i i32) + (local $$base$i$i$lcssa i32) + (local $$base226$i$lcssa i32) + (local $$bk i32) + (local $$bk$i i32) + (local $$bk$i$163 i32) + (local $$bk$i$46$i i32) + (local $$bk$i$i i32) + (local $$bk102$i$i i32) + (local $$bk122 i32) + (local $$bk124 i32) + (local $$bk136$i i32) + (local $$bk139$i$i i32) + (local $$bk158$i$i i32) + (local $$bk161$i$i i32) + (local $$bk218$i i32) + (local $$bk220$i i32) + (local $$bk246$i$i i32) + (local $$bk248$i$i i32) + (local $$bk302$i$i i32) + (local $$bk311$i i32) + (local $$bk313$i i32) + (local $$bk338$i$i i32) + (local $$bk357$i$i i32) + (local $$bk360$i$i i32) + (local $$bk370$i i32) + (local $$bk407$i i32) + (local $$bk429$i i32) + (local $$bk43$i$i i32) + (local $$bk432$i i32) + (local $$bk47$i i32) + (local $$bk55$i$i i32) + (local $$bk67$i$i i32) + (local $$bk74$i$i i32) + (local $$bk78 i32) + (local $$bk82$i$i i32) + (local $$br$2$ph$i i32) + (local $$call$i$i i32) + (local $$call107$i i32) + (local $$call131$i i32) + (local $$call132$i i32) + (local $$call275$i i32) + (local $$call37$i i32) + (local $$call6$i$i i32) + (local $$call68$i i32) + (local $$call83$i i32) + (local $$child$i$i i32) + (local $$child166$i$i i32) + (local $$child289$i$i i32) + (local $$child357$i i32) + (local $$cmp i32) + (local $$cmp$i i32) + (local $$cmp$i$13$i i32) + (local $$cmp$i$140 i32) + (local $$cmp$i$15$i i32) + (local $$cmp$i$179 i32) + (local $$cmp$i$2$i$i i32) + (local $$cmp$i$23$i i32) + (local $$cmp$i$34$i i32) + (local $$cmp$i$9$i i32) + (local $$cmp$i$i$i i32) + (local $$cmp1 i32) + (local $$cmp1$i i32) + (local $$cmp1$i$i i32) + (local $$cmp10 i32) + (local $$cmp100$i$i i32) + (local $$cmp102$i i32) + (local $$cmp104$i$i i32) + (local $$cmp105$i i32) + (local $$cmp106$i$i i32) + (local $$cmp107$i i32) + (local $$cmp107$i$157 i32) + (local $$cmp108$i i32) + (local $$cmp108$i$i i32) + (local $$cmp112$i$i i32) + (local $$cmp113 i32) + (local $$cmp114$i i32) + (local $$cmp116$i i32) + (local $$cmp118$i i32) + (local $$cmp119$i i32) + (local $$cmp12$i i32) + (local $$cmp120$i$53$i i32) + (local $$cmp120$i$i i32) + (local $$cmp121$i i32) + (local $$cmp123$i i32) + (local $$cmp124$i$i i32) + (local $$cmp126$i i32) + (local $$cmp127$i i32) + (local $$cmp128 i32) + (local $$cmp128$i i32) + (local $$cmp128$i$i i32) + (local $$cmp130$i i32) + (local $$cmp133$i i32) + (local $$cmp133$i$196 i32) + (local $$cmp133$i$i i32) + (local $$cmp135$i i32) + (local $$cmp137$i i32) + (local $$cmp137$i$197 i32) + (local $$cmp137$i$i i32) + (local $$cmp138$i i32) + (local $$cmp139 i32) + (local $$cmp140$i i32) + (local $$cmp141$not$i i32) + (local $$cmp142$i i32) + (local $$cmp144$i$i i32) + (local $$cmp146 i32) + (local $$cmp15 i32) + (local $$cmp15$i i32) + (local $$cmp151$i i32) + (local $$cmp152$i i32) + (local $$cmp153$i$i i32) + (local $$cmp155$i i32) + (local $$cmp156 i32) + (local $$cmp156$i i32) + (local $$cmp156$i$i i32) + (local $$cmp157$i i32) + (local $$cmp159$i i32) + (local $$cmp159$i$199 i32) + (local $$cmp16 i32) + (local $$cmp160$i$i i32) + (local $$cmp162 i32) + (local $$cmp162$i i32) + (local $$cmp162$i$200 i32) + (local $$cmp166$i i32) + (local $$cmp168$i$i i32) + (local $$cmp171$i i32) + (local $$cmp172$i$i i32) + (local $$cmp174$i i32) + (local $$cmp180$i i32) + (local $$cmp185$i i32) + (local $$cmp185$i$i i32) + (local $$cmp186 i32) + (local $$cmp186$i i32) + (local $$cmp189$i$i i32) + (local $$cmp19$i i32) + (local $$cmp190$i i32) + (local $$cmp191$i i32) + (local $$cmp198$i i32) + (local $$cmp2$i$i i32) + (local $$cmp2$i$i$i i32) + (local $$cmp20$i$i i32) + (local $$cmp203$i i32) + (local $$cmp205$i i32) + (local $$cmp208$i i32) + (local $$cmp209$i i32) + (local $$cmp21$i i32) + (local $$cmp215$i$i i32) + (local $$cmp217$i i32) + (local $$cmp218$i i32) + (local $$cmp221$i i32) + (local $$cmp224$i i32) + (local $$cmp228$i i32) + (local $$cmp229$i i32) + (local $$cmp233$i i32) + (local $$cmp236$i$i i32) + (local $$cmp24$i i32) + (local $$cmp24$i$i i32) + (local $$cmp246$i i32) + (local $$cmp250$i i32) + (local $$cmp254$i$i i32) + (local $$cmp257$i i32) + (local $$cmp258$i$i i32) + (local $$cmp26$i i32) + (local $$cmp265$i i32) + (local $$cmp27$i$i i32) + (local $$cmp28$i i32) + (local $$cmp28$i$i i32) + (local $$cmp284$i i32) + (local $$cmp29 i32) + (local $$cmp3$i$i i32) + (local $$cmp301$i i32) + (local $$cmp306$i$i i32) + (local $$cmp31 i32) + (local $$cmp319$i i32) + (local $$cmp319$i$i i32) + (local $$cmp32$i i32) + (local $$cmp32$i$185 i32) + (local $$cmp323$i i32) + (local $$cmp327$i$i i32) + (local $$cmp33$i i32) + (local $$cmp332$i$i i32) + (local $$cmp34$i i32) + (local $$cmp34$i$i i32) + (local $$cmp35$i i32) + (local $$cmp350$i$i i32) + (local $$cmp36$i i32) + (local $$cmp36$i$i i32) + (local $$cmp374$i i32) + (local $$cmp38$i i32) + (local $$cmp38$i$i i32) + (local $$cmp388$i i32) + (local $$cmp396$i i32) + (local $$cmp40$i i32) + (local $$cmp401$i i32) + (local $$cmp41$i$i i32) + (local $$cmp42$i$i i32) + (local $$cmp422$i i32) + (local $$cmp43$i i32) + (local $$cmp44$i$i i32) + (local $$cmp45$i i32) + (local $$cmp45$i$155 i32) + (local $$cmp46$i i32) + (local $$cmp46$i$49$i i32) + (local $$cmp46$i$i i32) + (local $$cmp48$i i32) + (local $$cmp49$i i32) + (local $$cmp5 i32) + (local $$cmp51$i i32) + (local $$cmp54$i$i i32) + (local $$cmp55$i i32) + (local $$cmp55$i$187 i32) + (local $$cmp57$i i32) + (local $$cmp57$i$188 i32) + (local $$cmp57$i$i i32) + (local $$cmp59$i$i i32) + (local $$cmp60$i i32) + (local $$cmp60$i$i i32) + (local $$cmp62$i i32) + (local $$cmp63$i i32) + (local $$cmp63$i$i i32) + (local $$cmp65$i i32) + (local $$cmp66$i i32) + (local $$cmp66$i$190 i32) + (local $$cmp69$i i32) + (local $$cmp7$i$i i32) + (local $$cmp70 i32) + (local $$cmp72$i i32) + (local $$cmp75$i$i i32) + (local $$cmp76 i32) + (local $$cmp76$i i32) + (local $$cmp79 i32) + (local $$cmp81$i i32) + (local $$cmp81$i$191 i32) + (local $$cmp81$i$i i32) + (local $$cmp83$i$i i32) + (local $$cmp85$i i32) + (local $$cmp86$i$i i32) + (local $$cmp89$i i32) + (local $$cmp9$i$i i32) + (local $$cmp90$i i32) + (local $$cmp91$i i32) + (local $$cmp93$i i32) + (local $$cmp95$i i32) + (local $$cmp96$i i32) + (local $$cmp97$7$i i32) + (local $$cmp97$i i32) + (local $$cmp97$i$i i32) + (local $$cmp99 i32) + (local $$cond i32) + (local $$cond$i i32) + (local $$cond$i$16$i i32) + (local $$cond$i$25$i i32) + (local $$cond$i$36$i i32) + (local $$cond$i$i i32) + (local $$cond$i$i$i i32) + (local $$cond$v$0$i i32) + (local $$cond115$i$i i32) + (local $$cond13$i$i i32) + (local $$cond15$i$i i32) + (local $$cond2$i i32) + (local $$cond2$i$i i32) + (local $$cond3$i i32) + (local $$cond315$i$i i32) + (local $$cond383$i i32) + (local $$cond4$i i32) + (local $$exitcond$i$i i32) + (local $$fd$i i32) + (local $$fd$i$164 i32) + (local $$fd$i$i i32) + (local $$fd103$i$i i32) + (local $$fd123 i32) + (local $$fd139$i i32) + (local $$fd140$i$i i32) + (local $$fd148$i$i i32) + (local $$fd160$i$i i32) + (local $$fd219$i i32) + (local $$fd247$i$i i32) + (local $$fd303$i$i i32) + (local $$fd312$i i32) + (local $$fd339$i$i i32) + (local $$fd344$i$i i32) + (local $$fd359$i$i i32) + (local $$fd371$i i32) + (local $$fd408$i i32) + (local $$fd416$i i32) + (local $$fd431$i i32) + (local $$fd50$i i32) + (local $$fd54$i$i i32) + (local $$fd59$i$i i32) + (local $$fd68$pre$phi$i$iZ2D i32) + (local $$fd69 i32) + (local $$fd78$i$i i32) + (local $$fd85$i$i i32) + (local $$fd9 i32) + (local $$head i32) + (local $$head$i i32) + (local $$head$i$154 i32) + (local $$head$i$17$i i32) + (local $$head$i$29$i i32) + (local $$head$i$42$i i32) + (local $$head$i$i i32) + (local $$head$i$i$i i32) + (local $$head118$i$i i32) + (local $$head168 i32) + (local $$head173 i32) + (local $$head177 i32) + (local $$head179 i32) + (local $$head179$i i32) + (local $$head182$i i32) + (local $$head187$i i32) + (local $$head189$i i32) + (local $$head195 i32) + (local $$head198 i32) + (local $$head208$i$i i32) + (local $$head211$i$i i32) + (local $$head23$i$i i32) + (local $$head25 i32) + (local $$head265$i i32) + (local $$head268$i i32) + (local $$head271$i i32) + (local $$head274$i i32) + (local $$head279$i i32) + (local $$head281$i i32) + (local $$head29$i i32) + (local $$head29$i$i i32) + (local $$head317$i$i i32) + (local $$head32$i$i i32) + (local $$head34$i$i i32) + (local $$head386$i i32) + (local $$head7$i$31$i i32) + (local $$head7$i$i i32) + (local $$head7$i$i$i i32) + (local $$head94 i32) + (local $$head97 i32) + (local $$head99$i i32) + (local $$i$01$i$i i32) + (local $$idx$0$i i32) + (local $$inc$i$i i32) + (local $$index$i i32) + (local $$index$i$172 i32) + (local $$index$i$54$i i32) + (local $$index$i$i i32) + (local $$index288$i$i i32) + (local $$index356$i i32) + (local $$nb$0 i32) + (local $$neg i32) + (local $$neg$i i32) + (local $$neg$i$173 i32) + (local $$neg$i$182 i32) + (local $$neg$i$i i32) + (local $$neg103$i i32) + (local $$neg13 i32) + (local $$neg132$i$i i32) + (local $$neg48$i i32) + (local $$neg73 i32) + (local $$next$i i32) + (local $$next$i$i i32) + (local $$next$i$i$i i32) + (local $$next231$i i32) + (local $$not$cmp150$i$i i32) + (local $$not$cmp346$i$i i32) + (local $$not$cmp418$i i32) + (local $$oldfirst$0$i$i i32) + (local $$or$cond$i i32) + (local $$or$cond$i$189 i32) + (local $$or$cond1$i i32) + (local $$or$cond1$i$184 i32) + (local $$or$cond2$i i32) + (local $$or$cond3$i i32) + (local $$or$cond4$i i32) + (local $$or$cond5$i i32) + (local $$or$cond7$i i32) + (local $$or$cond8$i i32) + (local $$or$cond98$i i32) + (local $$or$i i32) + (local $$or$i$195 i32) + (local $$or$i$28$i i32) + (local $$or$i$i i32) + (local $$or$i$i$i i32) + (local $$or101$i$i i32) + (local $$or110 i32) + (local $$or167 i32) + (local $$or172 i32) + (local $$or176 i32) + (local $$or178$i i32) + (local $$or180 i32) + (local $$or183$i i32) + (local $$or186$i i32) + (local $$or188$i i32) + (local $$or19$i$i i32) + (local $$or194 i32) + (local $$or197 i32) + (local $$or204$i i32) + (local $$or210$i$i i32) + (local $$or22$i$i i32) + (local $$or23 i32) + (local $$or232$i$i i32) + (local $$or26 i32) + (local $$or264$i i32) + (local $$or267$i i32) + (local $$or270$i i32) + (local $$or275$i i32) + (local $$or278$i i32) + (local $$or28$i$i i32) + (local $$or280$i i32) + (local $$or297$i i32) + (local $$or300$i$i i32) + (local $$or33$i$i i32) + (local $$or368$i i32) + (local $$or40 i32) + (local $$or44$i$i i32) + (local $$or93 i32) + (local $$or96 i32) + (local $$p$0$i$i i32) + (local $$parent$i i32) + (local $$parent$i$162 i32) + (local $$parent$i$51$i i32) + (local $$parent$i$i i32) + (local $$parent135$i i32) + (local $$parent138$i$i i32) + (local $$parent149$i i32) + (local $$parent162$i$i i32) + (local $$parent165$i$i i32) + (local $$parent166$i i32) + (local $$parent179$i$i i32) + (local $$parent196$i$i i32) + (local $$parent226$i i32) + (local $$parent240$i i32) + (local $$parent257$i i32) + (local $$parent301$i$i i32) + (local $$parent337$i$i i32) + (local $$parent361$i$i i32) + (local $$parent369$i i32) + (local $$parent406$i i32) + (local $$parent433$i i32) + (local $$qsize$0$i$i i32) + (local $$retval$0 i32) + (local $$rsize$0$i i32) + (local $$rsize$0$i$152 i32) + (local $$rsize$0$i$lcssa i32) + (local $$rsize$1$i i32) + (local $$rsize$3$i i32) + (local $$rsize$4$lcssa$i i32) + (local $$rsize$49$i i32) + (local $$rst$0$i i32) + (local $$rst$1$i i32) + (local $$sflags193$i i32) + (local $$sflags235$i i32) + (local $$shl i32) + (local $$shl$i i32) + (local $$shl$i$144 i32) + (local $$shl$i$19$i i32) + (local $$shl$i$47$i i32) + (local $$shl$i$i i32) + (local $$shl102 i32) + (local $$shl105 i32) + (local $$shl116$i$i i32) + (local $$shl12 i32) + (local $$shl127$i$i i32) + (local $$shl131$i$i i32) + (local $$shl15$i i32) + (local $$shl18$i i32) + (local $$shl192$i i32) + (local $$shl195$i i32) + (local $$shl198$i i32) + (local $$shl22 i32) + (local $$shl221$i$i i32) + (local $$shl226$i$i i32) + (local $$shl265$i$i i32) + (local $$shl270$i$i i32) + (local $$shl276$i$i i32) + (local $$shl279$i$i i32) + (local $$shl288$i i32) + (local $$shl291$i i32) + (local $$shl294$i$i i32) + (local $$shl31$i i32) + (local $$shl316$i$i i32) + (local $$shl326$i$i i32) + (local $$shl333$i i32) + (local $$shl338$i i32) + (local $$shl344$i i32) + (local $$shl347$i i32) + (local $$shl35 i32) + (local $$shl362$i i32) + (local $$shl37 i32) + (local $$shl384$i i32) + (local $$shl39$i$i i32) + (local $$shl395$i i32) + (local $$shl48$i$i i32) + (local $$shl52$i i32) + (local $$shl60$i i32) + (local $$shl65 i32) + (local $$shl70$i$i i32) + (local $$shl72 i32) + (local $$shl75$i$i i32) + (local $$shl81$i$i i32) + (local $$shl84$i$i i32) + (local $$shl9$i i32) + (local $$shl90 i32) + (local $$shl95$i$i i32) + (local $$shr i32) + (local $$shr$i i32) + (local $$shr$i$139 i32) + (local $$shr$i$45$i i32) + (local $$shr$i$i i32) + (local $$shr101 i32) + (local $$shr11$i i32) + (local $$shr11$i$147 i32) + (local $$shr110$i$i i32) + (local $$shr12$i i32) + (local $$shr123$i$i i32) + (local $$shr15$i i32) + (local $$shr16$i i32) + (local $$shr16$i$148 i32) + (local $$shr19$i i32) + (local $$shr194$i i32) + (local $$shr20$i i32) + (local $$shr214$i$i i32) + (local $$shr253$i$i i32) + (local $$shr263$i$i i32) + (local $$shr267$i$i i32) + (local $$shr27$i i32) + (local $$shr272$i$i i32) + (local $$shr277$i$i i32) + (local $$shr281$i$i i32) + (local $$shr283$i i32) + (local $$shr3 i32) + (local $$shr310$i$i i32) + (local $$shr318$i i32) + (local $$shr322$i$i i32) + (local $$shr330$i i32) + (local $$shr335$i i32) + (local $$shr340$i i32) + (local $$shr345$i i32) + (local $$shr349$i i32) + (local $$shr378$i i32) + (local $$shr391$i i32) + (local $$shr4$i i32) + (local $$shr41$i i32) + (local $$shr45 i32) + (local $$shr47 i32) + (local $$shr48 i32) + (local $$shr5$i i32) + (local $$shr5$i$142 i32) + (local $$shr51 i32) + (local $$shr52 i32) + (local $$shr55 i32) + (local $$shr56 i32) + (local $$shr58$i$i i32) + (local $$shr59 i32) + (local $$shr60 i32) + (local $$shr63 i32) + (local $$shr68$i$i i32) + (local $$shr7$i i32) + (local $$shr7$i$145 i32) + (local $$shr72$i i32) + (local $$shr72$i$i i32) + (local $$shr75$i i32) + (local $$shr76$i i32) + (local $$shr77$i$i i32) + (local $$shr79$i i32) + (local $$shr8$i i32) + (local $$shr80$i i32) + (local $$shr82$i$i i32) + (local $$shr83$i i32) + (local $$shr84$i i32) + (local $$shr86$i$i i32) + (local $$shr87$i i32) + (local $$shr88$i i32) + (local $$shr91$i i32) + (local $$size$i$i i32) + (local $$size$i$i$i i32) + (local $$size$i$i$lcssa i32) + (local $$size188$i i32) + (local $$size188$i$lcssa i32) + (local $$size245$i i32) + (local $$sizebits$0$i i32) + (local $$sizebits$0$shl52$i i32) + (local $$sp$0$i$i i32) + (local $$sp$0$i$i$i i32) + (local $$sp$0108$i i32) + (local $$sp$0108$i$lcssa i32) + (local $$sp$1107$i i32) + (local $$sp$1107$i$lcssa i32) + (local $$ssize$0$i i32) + (local $$ssize$2$ph$i i32) + (local $$ssize$5$i i32) + (local $$sub i32) + (local $$sub$i i32) + (local $$sub$i$138 i32) + (local $$sub$i$181 i32) + (local $$sub$i$i i32) + (local $$sub$ptr$lhs$cast$i i32) + (local $$sub$ptr$lhs$cast$i$39$i i32) + (local $$sub$ptr$lhs$cast$i$i i32) + (local $$sub$ptr$rhs$cast$i i32) + (local $$sub$ptr$rhs$cast$i$40$i i32) + (local $$sub$ptr$rhs$cast$i$i i32) + (local $$sub$ptr$sub$i i32) + (local $$sub$ptr$sub$i$41$i i32) + (local $$sub$ptr$sub$i$i i32) + (local $$sub10$i i32) + (local $$sub101$i i32) + (local $$sub101$rsize$4$i i32) + (local $$sub112$i i32) + (local $$sub113$i$i i32) + (local $$sub118$i i32) + (local $$sub14$i i32) + (local $$sub16$i$i i32) + (local $$sub160 i32) + (local $$sub172$i i32) + (local $$sub18$i$i i32) + (local $$sub190 i32) + (local $$sub2$i i32) + (local $$sub22$i i32) + (local $$sub260$i i32) + (local $$sub262$i$i i32) + (local $$sub266$i$i i32) + (local $$sub271$i$i i32) + (local $$sub275$i$i i32) + (local $$sub30$i i32) + (local $$sub31$i i32) + (local $$sub31$rsize$0$i i32) + (local $$sub313$i$i i32) + (local $$sub329$i i32) + (local $$sub33$i i32) + (local $$sub334$i i32) + (local $$sub339$i i32) + (local $$sub343$i i32) + (local $$sub381$i i32) + (local $$sub4$i i32) + (local $$sub41$i i32) + (local $$sub42 i32) + (local $$sub44 i32) + (local $$sub5$i$27$i i32) + (local $$sub5$i$i i32) + (local $$sub5$i$i$i i32) + (local $$sub50$i i32) + (local $$sub6$i i32) + (local $$sub63$i i32) + (local $$sub67$i i32) + (local $$sub67$i$i i32) + (local $$sub70$i i32) + (local $$sub71$i$i i32) + (local $$sub76$i$i i32) + (local $$sub80$i$i i32) + (local $$sub91 i32) + (local $$sub99$i i32) + (local $$t$0$i i32) + (local $$t$0$i$151 i32) + (local $$t$2$i i32) + (local $$t$4$ph$i i32) + (local $$t$4$v$4$i i32) + (local $$t$48$i i32) + (local $$tbase$796$i i32) + (local $$tobool$i$i i32) + (local $$tobool107 i32) + (local $$tobool195$i i32) + (local $$tobool200$i i32) + (local $$tobool228$i$i i32) + (local $$tobool237$i i32) + (local $$tobool293$i i32) + (local $$tobool296$i$i i32) + (local $$tobool30$i i32) + (local $$tobool364$i i32) + (local $$tobool97$i$i i32) + (local $$tsize$795$i i32) + (local $$v$0$i i32) + (local $$v$0$i$153 i32) + (local $$v$0$i$lcssa i32) + (local $$v$1$i i32) + (local $$v$3$i i32) + (local $$v$4$lcssa$i i32) + (local $$v$410$i i32) + (local $$xor$i$i i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$cmp + (i32.lt_u + (get_local $$bytes) + (i32.const 245) + ) + ) + (block $do-once + (if + (get_local $$cmp) + (block + (set_local $$cmp1 + (i32.lt_u + (get_local $$bytes) + (i32.const 11) + ) + ) + (set_local $$add2 + (i32.add + (get_local $$bytes) + (i32.const 11) + ) + ) + (set_local $$and + (i32.and + (get_local $$add2) + (i32.const -8) + ) + ) + (set_local $$cond + (if (result i32) + (get_local $$cmp1) + (i32.const 16) + (get_local $$and) + ) + ) + (set_local $$shr + (i32.shr_u + (get_local $$cond) + (i32.const 3) + ) + ) + (set_local $$0 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shr3 + (i32.shr_u + (get_local $$0) + (get_local $$shr) + ) + ) + (set_local $$and4 + (i32.and + (get_local $$shr3) + (i32.const 3) + ) + ) + (set_local $$cmp5 + (i32.eq + (get_local $$and4) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp5) + ) + (block + (set_local $$neg + (i32.and + (get_local $$shr3) + (i32.const 1) + ) + ) + (set_local $$and7 + (i32.xor + (get_local $$neg) + (i32.const 1) + ) + ) + (set_local $$add8 + (i32.add + (get_local $$and7) + (get_local $$shr) + ) + ) + (set_local $$shl + (i32.shl + (get_local $$add8) + (i32.const 1) + ) + ) + (set_local $$arrayidx + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl) + (i32.const 2) + ) + ) + ) + (set_local $$1 + (i32.add + (get_local $$arrayidx) + (i32.const 8) + ) + ) + (set_local $$2 + (i32.load + (get_local $$1) + ) + ) + (set_local $$fd9 + (i32.add + (get_local $$2) + (i32.const 8) + ) + ) + (set_local $$3 + (i32.load + (get_local $$fd9) + ) + ) + (set_local $$cmp10 + (i32.eq + (get_local $$arrayidx) + (get_local $$3) + ) + ) + (block $do-once0 + (if + (get_local $$cmp10) + (block + (set_local $$shl12 + (i32.shl + (i32.const 1) + (get_local $$add8) + ) + ) + (set_local $$neg13 + (i32.xor + (get_local $$shl12) + (i32.const -1) + ) + ) + (set_local $$and14 + (i32.and + (get_local $$0) + (get_local $$neg13) + ) + ) + (i32.store + (i32.const 176) + (get_local $$and14) + ) + ) + (block + (set_local $$4 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp15 + (i32.lt_u + (get_local $$3) + (get_local $$4) + ) + ) + (if + (get_local $$cmp15) + (call $_abort) + ) + (set_local $$bk + (i32.add + (get_local $$3) + (i32.const 12) + ) + ) + (set_local $$5 + (i32.load + (get_local $$bk) + ) + ) + (set_local $$cmp16 + (i32.eq + (get_local $$5) + (get_local $$2) + ) + ) + (if + (get_local $$cmp16) + (block + (i32.store + (get_local $$bk) + (get_local $$arrayidx) + ) + (i32.store + (get_local $$1) + (get_local $$3) + ) + (br $do-once0) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$shl22 + (i32.shl + (get_local $$add8) + (i32.const 3) + ) + ) + (set_local $$or23 + (i32.or + (get_local $$shl22) + (i32.const 3) + ) + ) + (set_local $$head + (i32.add + (get_local $$2) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head) + (get_local $$or23) + ) + (set_local $$add$ptr + (i32.add + (get_local $$2) + (get_local $$shl22) + ) + ) + (set_local $$head25 + (i32.add + (get_local $$add$ptr) + (i32.const 4) + ) + ) + (set_local $$6 + (i32.load + (get_local $$head25) + ) + ) + (set_local $$or26 + (i32.or + (get_local $$6) + (i32.const 1) + ) + ) + (i32.store + (get_local $$head25) + (get_local $$or26) + ) + (set_local $$retval$0 + (get_local $$fd9) + ) + (return + (get_local $$retval$0) + ) + ) + ) + (set_local $$7 + (i32.load + (i32.const 184) + ) + ) + (set_local $$cmp29 + (i32.gt_u + (get_local $$cond) + (get_local $$7) + ) + ) + (if + (get_local $$cmp29) + (block + (set_local $$cmp31 + (i32.eq + (get_local $$shr3) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp31) + ) + (block + (set_local $$shl35 + (i32.shl + (get_local $$shr3) + (get_local $$shr) + ) + ) + (set_local $$shl37 + (i32.shl + (i32.const 2) + (get_local $$shr) + ) + ) + (set_local $$sub + (i32.sub + (i32.const 0) + (get_local $$shl37) + ) + ) + (set_local $$or40 + (i32.or + (get_local $$shl37) + (get_local $$sub) + ) + ) + (set_local $$and41 + (i32.and + (get_local $$shl35) + (get_local $$or40) + ) + ) + (set_local $$sub42 + (i32.sub + (i32.const 0) + (get_local $$and41) + ) + ) + (set_local $$and43 + (i32.and + (get_local $$and41) + (get_local $$sub42) + ) + ) + (set_local $$sub44 + (i32.add + (get_local $$and43) + (i32.const -1) + ) + ) + (set_local $$shr45 + (i32.shr_u + (get_local $$sub44) + (i32.const 12) + ) + ) + (set_local $$and46 + (i32.and + (get_local $$shr45) + (i32.const 16) + ) + ) + (set_local $$shr47 + (i32.shr_u + (get_local $$sub44) + (get_local $$and46) + ) + ) + (set_local $$shr48 + (i32.shr_u + (get_local $$shr47) + (i32.const 5) + ) + ) + (set_local $$and49 + (i32.and + (get_local $$shr48) + (i32.const 8) + ) + ) + (set_local $$add50 + (i32.or + (get_local $$and49) + (get_local $$and46) + ) + ) + (set_local $$shr51 + (i32.shr_u + (get_local $$shr47) + (get_local $$and49) + ) + ) + (set_local $$shr52 + (i32.shr_u + (get_local $$shr51) + (i32.const 2) + ) + ) + (set_local $$and53 + (i32.and + (get_local $$shr52) + (i32.const 4) + ) + ) + (set_local $$add54 + (i32.or + (get_local $$add50) + (get_local $$and53) + ) + ) + (set_local $$shr55 + (i32.shr_u + (get_local $$shr51) + (get_local $$and53) + ) + ) + (set_local $$shr56 + (i32.shr_u + (get_local $$shr55) + (i32.const 1) + ) + ) + (set_local $$and57 + (i32.and + (get_local $$shr56) + (i32.const 2) + ) + ) + (set_local $$add58 + (i32.or + (get_local $$add54) + (get_local $$and57) + ) + ) + (set_local $$shr59 + (i32.shr_u + (get_local $$shr55) + (get_local $$and57) + ) + ) + (set_local $$shr60 + (i32.shr_u + (get_local $$shr59) + (i32.const 1) + ) + ) + (set_local $$and61 + (i32.and + (get_local $$shr60) + (i32.const 1) + ) + ) + (set_local $$add62 + (i32.or + (get_local $$add58) + (get_local $$and61) + ) + ) + (set_local $$shr63 + (i32.shr_u + (get_local $$shr59) + (get_local $$and61) + ) + ) + (set_local $$add64 + (i32.add + (get_local $$add62) + (get_local $$shr63) + ) + ) + (set_local $$shl65 + (i32.shl + (get_local $$add64) + (i32.const 1) + ) + ) + (set_local $$arrayidx66 + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl65) + (i32.const 2) + ) + ) + ) + (set_local $$8 + (i32.add + (get_local $$arrayidx66) + (i32.const 8) + ) + ) + (set_local $$9 + (i32.load + (get_local $$8) + ) + ) + (set_local $$fd69 + (i32.add + (get_local $$9) + (i32.const 8) + ) + ) + (set_local $$10 + (i32.load + (get_local $$fd69) + ) + ) + (set_local $$cmp70 + (i32.eq + (get_local $$arrayidx66) + (get_local $$10) + ) + ) + (block $do-once2 + (if + (get_local $$cmp70) + (block + (set_local $$shl72 + (i32.shl + (i32.const 1) + (get_local $$add64) + ) + ) + (set_local $$neg73 + (i32.xor + (get_local $$shl72) + (i32.const -1) + ) + ) + (set_local $$and74 + (i32.and + (get_local $$0) + (get_local $$neg73) + ) + ) + (i32.store + (i32.const 176) + (get_local $$and74) + ) + (set_local $$13 + (get_local $$7) + ) + ) + (block + (set_local $$11 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp76 + (i32.lt_u + (get_local $$10) + (get_local $$11) + ) + ) + (if + (get_local $$cmp76) + (call $_abort) + ) + (set_local $$bk78 + (i32.add + (get_local $$10) + (i32.const 12) + ) + ) + (set_local $$12 + (i32.load + (get_local $$bk78) + ) + ) + (set_local $$cmp79 + (i32.eq + (get_local $$12) + (get_local $$9) + ) + ) + (if + (get_local $$cmp79) + (block + (i32.store + (get_local $$bk78) + (get_local $$arrayidx66) + ) + (i32.store + (get_local $$8) + (get_local $$10) + ) + (set_local $$$pre + (i32.load + (i32.const 184) + ) + ) + (set_local $$13 + (get_local $$$pre) + ) + (br $do-once2) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$shl90 + (i32.shl + (get_local $$add64) + (i32.const 3) + ) + ) + (set_local $$sub91 + (i32.sub + (get_local $$shl90) + (get_local $$cond) + ) + ) + (set_local $$or93 + (i32.or + (get_local $$cond) + (i32.const 3) + ) + ) + (set_local $$head94 + (i32.add + (get_local $$9) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head94) + (get_local $$or93) + ) + (set_local $$add$ptr95 + (i32.add + (get_local $$9) + (get_local $$cond) + ) + ) + (set_local $$or96 + (i32.or + (get_local $$sub91) + (i32.const 1) + ) + ) + (set_local $$head97 + (i32.add + (get_local $$add$ptr95) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head97) + (get_local $$or96) + ) + (set_local $$add$ptr98 + (i32.add + (get_local $$add$ptr95) + (get_local $$sub91) + ) + ) + (i32.store + (get_local $$add$ptr98) + (get_local $$sub91) + ) + (set_local $$cmp99 + (i32.eq + (get_local $$13) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp99) + ) + (block + (set_local $$14 + (i32.load + (i32.const 196) + ) + ) + (set_local $$shr101 + (i32.shr_u + (get_local $$13) + (i32.const 3) + ) + ) + (set_local $$shl102 + (i32.shl + (get_local $$shr101) + (i32.const 1) + ) + ) + (set_local $$arrayidx103 + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl102) + (i32.const 2) + ) + ) + ) + (set_local $$15 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shl105 + (i32.shl + (i32.const 1) + (get_local $$shr101) + ) + ) + (set_local $$and106 + (i32.and + (get_local $$15) + (get_local $$shl105) + ) + ) + (set_local $$tobool107 + (i32.eq + (get_local $$and106) + (i32.const 0) + ) + ) + (if + (get_local $$tobool107) + (block + (set_local $$or110 + (i32.or + (get_local $$15) + (get_local $$shl105) + ) + ) + (i32.store + (i32.const 176) + (get_local $$or110) + ) + (set_local $$$pre241 + (i32.add + (get_local $$arrayidx103) + (i32.const 8) + ) + ) + (set_local $$$pre$phiZ2D + (get_local $$$pre241) + ) + (set_local $$F104$0 + (get_local $$arrayidx103) + ) + ) + (block + (set_local $$16 + (i32.add + (get_local $$arrayidx103) + (i32.const 8) + ) + ) + (set_local $$17 + (i32.load + (get_local $$16) + ) + ) + (set_local $$18 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp113 + (i32.lt_u + (get_local $$17) + (get_local $$18) + ) + ) + (if + (get_local $$cmp113) + (call $_abort) + (block + (set_local $$$pre$phiZ2D + (get_local $$16) + ) + (set_local $$F104$0 + (get_local $$17) + ) + ) + ) + ) + ) + (i32.store + (get_local $$$pre$phiZ2D) + (get_local $$14) + ) + (set_local $$bk122 + (i32.add + (get_local $$F104$0) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk122) + (get_local $$14) + ) + (set_local $$fd123 + (i32.add + (get_local $$14) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd123) + (get_local $$F104$0) + ) + (set_local $$bk124 + (i32.add + (get_local $$14) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk124) + (get_local $$arrayidx103) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $$sub91) + ) + (i32.store + (i32.const 196) + (get_local $$add$ptr95) + ) + (set_local $$retval$0 + (get_local $$fd69) + ) + (return + (get_local $$retval$0) + ) + ) + ) + (set_local $$19 + (i32.load + (i32.const 180) + ) + ) + (set_local $$cmp128 + (i32.eq + (get_local $$19) + (i32.const 0) + ) + ) + (if + (get_local $$cmp128) + (set_local $$nb$0 + (get_local $$cond) + ) + (block + (set_local $$sub$i + (i32.sub + (i32.const 0) + (get_local $$19) + ) + ) + (set_local $$and$i + (i32.and + (get_local $$19) + (get_local $$sub$i) + ) + ) + (set_local $$sub2$i + (i32.add + (get_local $$and$i) + (i32.const -1) + ) + ) + (set_local $$shr$i + (i32.shr_u + (get_local $$sub2$i) + (i32.const 12) + ) + ) + (set_local $$and3$i + (i32.and + (get_local $$shr$i) + (i32.const 16) + ) + ) + (set_local $$shr4$i + (i32.shr_u + (get_local $$sub2$i) + (get_local $$and3$i) + ) + ) + (set_local $$shr5$i + (i32.shr_u + (get_local $$shr4$i) + (i32.const 5) + ) + ) + (set_local $$and6$i + (i32.and + (get_local $$shr5$i) + (i32.const 8) + ) + ) + (set_local $$add$i + (i32.or + (get_local $$and6$i) + (get_local $$and3$i) + ) + ) + (set_local $$shr7$i + (i32.shr_u + (get_local $$shr4$i) + (get_local $$and6$i) + ) + ) + (set_local $$shr8$i + (i32.shr_u + (get_local $$shr7$i) + (i32.const 2) + ) + ) + (set_local $$and9$i + (i32.and + (get_local $$shr8$i) + (i32.const 4) + ) + ) + (set_local $$add10$i + (i32.or + (get_local $$add$i) + (get_local $$and9$i) + ) + ) + (set_local $$shr11$i + (i32.shr_u + (get_local $$shr7$i) + (get_local $$and9$i) + ) + ) + (set_local $$shr12$i + (i32.shr_u + (get_local $$shr11$i) + (i32.const 1) + ) + ) + (set_local $$and13$i + (i32.and + (get_local $$shr12$i) + (i32.const 2) + ) + ) + (set_local $$add14$i + (i32.or + (get_local $$add10$i) + (get_local $$and13$i) + ) + ) + (set_local $$shr15$i + (i32.shr_u + (get_local $$shr11$i) + (get_local $$and13$i) + ) + ) + (set_local $$shr16$i + (i32.shr_u + (get_local $$shr15$i) + (i32.const 1) + ) + ) + (set_local $$and17$i + (i32.and + (get_local $$shr16$i) + (i32.const 1) + ) + ) + (set_local $$add18$i + (i32.or + (get_local $$add14$i) + (get_local $$and17$i) + ) + ) + (set_local $$shr19$i + (i32.shr_u + (get_local $$shr15$i) + (get_local $$and17$i) + ) + ) + (set_local $$add20$i + (i32.add + (get_local $$add18$i) + (get_local $$shr19$i) + ) + ) + (set_local $$arrayidx$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$add20$i) + (i32.const 2) + ) + ) + ) + (set_local $$20 + (i32.load + (get_local $$arrayidx$i) + ) + ) + (set_local $$head$i + (i32.add + (get_local $$20) + (i32.const 4) + ) + ) + (set_local $$21 + (i32.load + (get_local $$head$i) + ) + ) + (set_local $$and21$i + (i32.and + (get_local $$21) + (i32.const -8) + ) + ) + (set_local $$sub22$i + (i32.sub + (get_local $$and21$i) + (get_local $$cond) + ) + ) + (set_local $$rsize$0$i + (get_local $$sub22$i) + ) + (set_local $$t$0$i + (get_local $$20) + ) + (set_local $$v$0$i + (get_local $$20) + ) + (loop $while-in + (block $while-out + (set_local $$arrayidx23$i + (i32.add + (get_local $$t$0$i) + (i32.const 16) + ) + ) + (set_local $$22 + (i32.load + (get_local $$arrayidx23$i) + ) + ) + (set_local $$cmp$i + (i32.eq + (get_local $$22) + (i32.const 0) + ) + ) + (if + (get_local $$cmp$i) + (block + (set_local $$arrayidx27$i + (i32.add + (get_local $$t$0$i) + (i32.const 20) + ) + ) + (set_local $$23 + (i32.load + (get_local $$arrayidx27$i) + ) + ) + (set_local $$cmp28$i + (i32.eq + (get_local $$23) + (i32.const 0) + ) + ) + (if + (get_local $$cmp28$i) + (block + (set_local $$rsize$0$i$lcssa + (get_local $$rsize$0$i) + ) + (set_local $$v$0$i$lcssa + (get_local $$v$0$i) + ) + (br $while-out) + ) + (set_local $$cond4$i + (get_local $$23) + ) + ) + ) + (set_local $$cond4$i + (get_local $$22) + ) + ) + (set_local $$head29$i + (i32.add + (get_local $$cond4$i) + (i32.const 4) + ) + ) + (set_local $$24 + (i32.load + (get_local $$head29$i) + ) + ) + (set_local $$and30$i + (i32.and + (get_local $$24) + (i32.const -8) + ) + ) + (set_local $$sub31$i + (i32.sub + (get_local $$and30$i) + (get_local $$cond) + ) + ) + (set_local $$cmp32$i + (i32.lt_u + (get_local $$sub31$i) + (get_local $$rsize$0$i) + ) + ) + (set_local $$sub31$rsize$0$i + (if (result i32) + (get_local $$cmp32$i) + (get_local $$sub31$i) + (get_local $$rsize$0$i) + ) + ) + (set_local $$cond$v$0$i + (if (result i32) + (get_local $$cmp32$i) + (get_local $$cond4$i) + (get_local $$v$0$i) + ) + ) + (set_local $$rsize$0$i + (get_local $$sub31$rsize$0$i) + ) + (set_local $$t$0$i + (get_local $$cond4$i) + ) + (set_local $$v$0$i + (get_local $$cond$v$0$i) + ) + (br $while-in) + ) + ) + (set_local $$25 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp33$i + (i32.lt_u + (get_local $$v$0$i$lcssa) + (get_local $$25) + ) + ) + (if + (get_local $$cmp33$i) + (call $_abort) + ) + (set_local $$add$ptr$i + (i32.add + (get_local $$v$0$i$lcssa) + (get_local $$cond) + ) + ) + (set_local $$cmp35$i + (i32.lt_u + (get_local $$v$0$i$lcssa) + (get_local $$add$ptr$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp35$i) + ) + (call $_abort) + ) + (set_local $$parent$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 24) + ) + ) + (set_local $$26 + (i32.load + (get_local $$parent$i) + ) + ) + (set_local $$bk$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 12) + ) + ) + (set_local $$27 + (i32.load + (get_local $$bk$i) + ) + ) + (set_local $$cmp40$i + (i32.eq + (get_local $$27) + (get_local $$v$0$i$lcssa) + ) + ) + (block $do-once4 + (if + (get_local $$cmp40$i) + (block + (set_local $$arrayidx61$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 20) + ) + ) + (set_local $$31 + (i32.load + (get_local $$arrayidx61$i) + ) + ) + (set_local $$cmp62$i + (i32.eq + (get_local $$31) + (i32.const 0) + ) + ) + (if + (get_local $$cmp62$i) + (block + (set_local $$arrayidx65$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 16) + ) + ) + (set_local $$32 + (i32.load + (get_local $$arrayidx65$i) + ) + ) + (set_local $$cmp66$i + (i32.eq + (get_local $$32) + (i32.const 0) + ) + ) + (if + (get_local $$cmp66$i) + (block + (set_local $$R$3$i + (i32.const 0) + ) + (br $do-once4) + ) + (block + (set_local $$R$1$i + (get_local $$32) + ) + (set_local $$RP$1$i + (get_local $$arrayidx65$i) + ) + ) + ) + ) + (block + (set_local $$R$1$i + (get_local $$31) + ) + (set_local $$RP$1$i + (get_local $$arrayidx61$i) + ) + ) + ) + (loop $while-in7 + (block $while-out6 + (set_local $$arrayidx71$i + (i32.add + (get_local $$R$1$i) + (i32.const 20) + ) + ) + (set_local $$33 + (i32.load + (get_local $$arrayidx71$i) + ) + ) + (set_local $$cmp72$i + (i32.eq + (get_local $$33) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp72$i) + ) + (block + (set_local $$R$1$i + (get_local $$33) + ) + (set_local $$RP$1$i + (get_local $$arrayidx71$i) + ) + (br $while-in7) + ) + ) + (set_local $$arrayidx75$i + (i32.add + (get_local $$R$1$i) + (i32.const 16) + ) + ) + (set_local $$34 + (i32.load + (get_local $$arrayidx75$i) + ) + ) + (set_local $$cmp76$i + (i32.eq + (get_local $$34) + (i32.const 0) + ) + ) + (if + (get_local $$cmp76$i) + (block + (set_local $$R$1$i$lcssa + (get_local $$R$1$i) + ) + (set_local $$RP$1$i$lcssa + (get_local $$RP$1$i) + ) + (br $while-out6) + ) + (block + (set_local $$R$1$i + (get_local $$34) + ) + (set_local $$RP$1$i + (get_local $$arrayidx75$i) + ) + ) + ) + (br $while-in7) + ) + ) + (set_local $$cmp81$i + (i32.lt_u + (get_local $$RP$1$i$lcssa) + (get_local $$25) + ) + ) + (if + (get_local $$cmp81$i) + (call $_abort) + (block + (i32.store + (get_local $$RP$1$i$lcssa) + (i32.const 0) + ) + (set_local $$R$3$i + (get_local $$R$1$i$lcssa) + ) + (br $do-once4) + ) + ) + ) + (block + (set_local $$fd$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 8) + ) + ) + (set_local $$28 + (i32.load + (get_local $$fd$i) + ) + ) + (set_local $$cmp45$i + (i32.lt_u + (get_local $$28) + (get_local $$25) + ) + ) + (if + (get_local $$cmp45$i) + (call $_abort) + ) + (set_local $$bk47$i + (i32.add + (get_local $$28) + (i32.const 12) + ) + ) + (set_local $$29 + (i32.load + (get_local $$bk47$i) + ) + ) + (set_local $$cmp48$i + (i32.eq + (get_local $$29) + (get_local $$v$0$i$lcssa) + ) + ) + (if + (i32.eqz + (get_local $$cmp48$i) + ) + (call $_abort) + ) + (set_local $$fd50$i + (i32.add + (get_local $$27) + (i32.const 8) + ) + ) + (set_local $$30 + (i32.load + (get_local $$fd50$i) + ) + ) + (set_local $$cmp51$i + (i32.eq + (get_local $$30) + (get_local $$v$0$i$lcssa) + ) + ) + (if + (get_local $$cmp51$i) + (block + (i32.store + (get_local $$bk47$i) + (get_local $$27) + ) + (i32.store + (get_local $$fd50$i) + (get_local $$28) + ) + (set_local $$R$3$i + (get_local $$27) + ) + (br $do-once4) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$cmp90$i + (i32.eq + (get_local $$26) + (i32.const 0) + ) + ) + (block $do-once8 + (if + (i32.eqz + (get_local $$cmp90$i) + ) + (block + (set_local $$index$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 28) + ) + ) + (set_local $$35 + (i32.load + (get_local $$index$i) + ) + ) + (set_local $$arrayidx94$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$35) + (i32.const 2) + ) + ) + ) + (set_local $$36 + (i32.load + (get_local $$arrayidx94$i) + ) + ) + (set_local $$cmp95$i + (i32.eq + (get_local $$v$0$i$lcssa) + (get_local $$36) + ) + ) + (if + (get_local $$cmp95$i) + (block + (i32.store + (get_local $$arrayidx94$i) + (get_local $$R$3$i) + ) + (set_local $$cond2$i + (i32.eq + (get_local $$R$3$i) + (i32.const 0) + ) + ) + (if + (get_local $$cond2$i) + (block + (set_local $$shl$i + (i32.shl + (i32.const 1) + (get_local $$35) + ) + ) + (set_local $$neg$i + (i32.xor + (get_local $$shl$i) + (i32.const -1) + ) + ) + (set_local $$37 + (i32.load + (i32.const 180) + ) + ) + (set_local $$and103$i + (i32.and + (get_local $$37) + (get_local $$neg$i) + ) + ) + (i32.store + (i32.const 180) + (get_local $$and103$i) + ) + (br $do-once8) + ) + ) + ) + (block + (set_local $$38 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp107$i + (i32.lt_u + (get_local $$26) + (get_local $$38) + ) + ) + (if + (get_local $$cmp107$i) + (call $_abort) + ) + (set_local $$arrayidx113$i + (i32.add + (get_local $$26) + (i32.const 16) + ) + ) + (set_local $$39 + (i32.load + (get_local $$arrayidx113$i) + ) + ) + (set_local $$cmp114$i + (i32.eq + (get_local $$39) + (get_local $$v$0$i$lcssa) + ) + ) + (if + (get_local $$cmp114$i) + (i32.store + (get_local $$arrayidx113$i) + (get_local $$R$3$i) + ) + (block + (set_local $$arrayidx121$i + (i32.add + (get_local $$26) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx121$i) + (get_local $$R$3$i) + ) + ) + ) + (set_local $$cmp126$i + (i32.eq + (get_local $$R$3$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp126$i) + (br $do-once8) + ) + ) + ) + (set_local $$40 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp130$i + (i32.lt_u + (get_local $$R$3$i) + (get_local $$40) + ) + ) + (if + (get_local $$cmp130$i) + (call $_abort) + ) + (set_local $$parent135$i + (i32.add + (get_local $$R$3$i) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent135$i) + (get_local $$26) + ) + (set_local $$arrayidx137$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 16) + ) + ) + (set_local $$41 + (i32.load + (get_local $$arrayidx137$i) + ) + ) + (set_local $$cmp138$i + (i32.eq + (get_local $$41) + (i32.const 0) + ) + ) + (block $do-once10 + (if + (i32.eqz + (get_local $$cmp138$i) + ) + (block + (set_local $$cmp142$i + (i32.lt_u + (get_local $$41) + (get_local $$40) + ) + ) + (if + (get_local $$cmp142$i) + (call $_abort) + (block + (set_local $$arrayidx148$i + (i32.add + (get_local $$R$3$i) + (i32.const 16) + ) + ) + (i32.store + (get_local $$arrayidx148$i) + (get_local $$41) + ) + (set_local $$parent149$i + (i32.add + (get_local $$41) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent149$i) + (get_local $$R$3$i) + ) + (br $do-once10) + ) + ) + ) + ) + ) + (set_local $$arrayidx154$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 20) + ) + ) + (set_local $$42 + (i32.load + (get_local $$arrayidx154$i) + ) + ) + (set_local $$cmp155$i + (i32.eq + (get_local $$42) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp155$i) + ) + (block + (set_local $$43 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp159$i + (i32.lt_u + (get_local $$42) + (get_local $$43) + ) + ) + (if + (get_local $$cmp159$i) + (call $_abort) + (block + (set_local $$arrayidx165$i + (i32.add + (get_local $$R$3$i) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx165$i) + (get_local $$42) + ) + (set_local $$parent166$i + (i32.add + (get_local $$42) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent166$i) + (get_local $$R$3$i) + ) + (br $do-once8) + ) + ) + ) + ) + ) + ) + ) + (set_local $$cmp174$i + (i32.lt_u + (get_local $$rsize$0$i$lcssa) + (i32.const 16) + ) + ) + (if + (get_local $$cmp174$i) + (block + (set_local $$add177$i + (i32.add + (get_local $$rsize$0$i$lcssa) + (get_local $$cond) + ) + ) + (set_local $$or178$i + (i32.or + (get_local $$add177$i) + (i32.const 3) + ) + ) + (set_local $$head179$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head179$i) + (get_local $$or178$i) + ) + (set_local $$add$ptr181$i + (i32.add + (get_local $$v$0$i$lcssa) + (get_local $$add177$i) + ) + ) + (set_local $$head182$i + (i32.add + (get_local $$add$ptr181$i) + (i32.const 4) + ) + ) + (set_local $$44 + (i32.load + (get_local $$head182$i) + ) + ) + (set_local $$or183$i + (i32.or + (get_local $$44) + (i32.const 1) + ) + ) + (i32.store + (get_local $$head182$i) + (get_local $$or183$i) + ) + ) + (block + (set_local $$or186$i + (i32.or + (get_local $$cond) + (i32.const 3) + ) + ) + (set_local $$head187$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head187$i) + (get_local $$or186$i) + ) + (set_local $$or188$i + (i32.or + (get_local $$rsize$0$i$lcssa) + (i32.const 1) + ) + ) + (set_local $$head189$i + (i32.add + (get_local $$add$ptr$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head189$i) + (get_local $$or188$i) + ) + (set_local $$add$ptr190$i + (i32.add + (get_local $$add$ptr$i) + (get_local $$rsize$0$i$lcssa) + ) + ) + (i32.store + (get_local $$add$ptr190$i) + (get_local $$rsize$0$i$lcssa) + ) + (set_local $$45 + (i32.load + (i32.const 184) + ) + ) + (set_local $$cmp191$i + (i32.eq + (get_local $$45) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp191$i) + ) + (block + (set_local $$46 + (i32.load + (i32.const 196) + ) + ) + (set_local $$shr194$i + (i32.shr_u + (get_local $$45) + (i32.const 3) + ) + ) + (set_local $$shl195$i + (i32.shl + (get_local $$shr194$i) + (i32.const 1) + ) + ) + (set_local $$arrayidx196$i + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl195$i) + (i32.const 2) + ) + ) + ) + (set_local $$47 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shl198$i + (i32.shl + (i32.const 1) + (get_local $$shr194$i) + ) + ) + (set_local $$and199$i + (i32.and + (get_local $$47) + (get_local $$shl198$i) + ) + ) + (set_local $$tobool200$i + (i32.eq + (get_local $$and199$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool200$i) + (block + (set_local $$or204$i + (i32.or + (get_local $$47) + (get_local $$shl198$i) + ) + ) + (i32.store + (i32.const 176) + (get_local $$or204$i) + ) + (set_local $$$pre$i + (i32.add + (get_local $$arrayidx196$i) + (i32.const 8) + ) + ) + (set_local $$$pre$phi$iZ2D + (get_local $$$pre$i) + ) + (set_local $$F197$0$i + (get_local $$arrayidx196$i) + ) + ) + (block + (set_local $$48 + (i32.add + (get_local $$arrayidx196$i) + (i32.const 8) + ) + ) + (set_local $$49 + (i32.load + (get_local $$48) + ) + ) + (set_local $$50 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp208$i + (i32.lt_u + (get_local $$49) + (get_local $$50) + ) + ) + (if + (get_local $$cmp208$i) + (call $_abort) + (block + (set_local $$$pre$phi$iZ2D + (get_local $$48) + ) + (set_local $$F197$0$i + (get_local $$49) + ) + ) + ) + ) + ) + (i32.store + (get_local $$$pre$phi$iZ2D) + (get_local $$46) + ) + (set_local $$bk218$i + (i32.add + (get_local $$F197$0$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk218$i) + (get_local $$46) + ) + (set_local $$fd219$i + (i32.add + (get_local $$46) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd219$i) + (get_local $$F197$0$i) + ) + (set_local $$bk220$i + (i32.add + (get_local $$46) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk220$i) + (get_local $$arrayidx196$i) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $$rsize$0$i$lcssa) + ) + (i32.store + (i32.const 196) + (get_local $$add$ptr$i) + ) + ) + ) + (set_local $$add$ptr225$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 8) + ) + ) + (set_local $$retval$0 + (get_local $$add$ptr225$i) + ) + (return + (get_local $$retval$0) + ) + ) + ) + ) + (set_local $$nb$0 + (get_local $$cond) + ) + ) + ) + (block + (set_local $$cmp139 + (i32.gt_u + (get_local $$bytes) + (i32.const -65) + ) + ) + (if + (get_local $$cmp139) + (set_local $$nb$0 + (i32.const -1) + ) + (block + (set_local $$add144 + (i32.add + (get_local $$bytes) + (i32.const 11) + ) + ) + (set_local $$and145 + (i32.and + (get_local $$add144) + (i32.const -8) + ) + ) + (set_local $$51 + (i32.load + (i32.const 180) + ) + ) + (set_local $$cmp146 + (i32.eq + (get_local $$51) + (i32.const 0) + ) + ) + (if + (get_local $$cmp146) + (set_local $$nb$0 + (get_local $$and145) + ) + (block + (set_local $$sub$i$138 + (i32.sub + (i32.const 0) + (get_local $$and145) + ) + ) + (set_local $$shr$i$139 + (i32.shr_u + (get_local $$add144) + (i32.const 8) + ) + ) + (set_local $$cmp$i$140 + (i32.eq + (get_local $$shr$i$139) + (i32.const 0) + ) + ) + (if + (get_local $$cmp$i$140) + (set_local $$idx$0$i + (i32.const 0) + ) + (block + (set_local $$cmp1$i + (i32.gt_u + (get_local $$and145) + (i32.const 16777215) + ) + ) + (if + (get_local $$cmp1$i) + (set_local $$idx$0$i + (i32.const 31) + ) + (block + (set_local $$sub4$i + (i32.add + (get_local $$shr$i$139) + (i32.const 1048320) + ) + ) + (set_local $$shr5$i$142 + (i32.shr_u + (get_local $$sub4$i) + (i32.const 16) + ) + ) + (set_local $$and$i$143 + (i32.and + (get_local $$shr5$i$142) + (i32.const 8) + ) + ) + (set_local $$shl$i$144 + (i32.shl + (get_local $$shr$i$139) + (get_local $$and$i$143) + ) + ) + (set_local $$sub6$i + (i32.add + (get_local $$shl$i$144) + (i32.const 520192) + ) + ) + (set_local $$shr7$i$145 + (i32.shr_u + (get_local $$sub6$i) + (i32.const 16) + ) + ) + (set_local $$and8$i + (i32.and + (get_local $$shr7$i$145) + (i32.const 4) + ) + ) + (set_local $$add$i$146 + (i32.or + (get_local $$and8$i) + (get_local $$and$i$143) + ) + ) + (set_local $$shl9$i + (i32.shl + (get_local $$shl$i$144) + (get_local $$and8$i) + ) + ) + (set_local $$sub10$i + (i32.add + (get_local $$shl9$i) + (i32.const 245760) + ) + ) + (set_local $$shr11$i$147 + (i32.shr_u + (get_local $$sub10$i) + (i32.const 16) + ) + ) + (set_local $$and12$i + (i32.and + (get_local $$shr11$i$147) + (i32.const 2) + ) + ) + (set_local $$add13$i + (i32.or + (get_local $$add$i$146) + (get_local $$and12$i) + ) + ) + (set_local $$sub14$i + (i32.sub + (i32.const 14) + (get_local $$add13$i) + ) + ) + (set_local $$shl15$i + (i32.shl + (get_local $$shl9$i) + (get_local $$and12$i) + ) + ) + (set_local $$shr16$i$148 + (i32.shr_u + (get_local $$shl15$i) + (i32.const 15) + ) + ) + (set_local $$add17$i + (i32.add + (get_local $$sub14$i) + (get_local $$shr16$i$148) + ) + ) + (set_local $$shl18$i + (i32.shl + (get_local $$add17$i) + (i32.const 1) + ) + ) + (set_local $$add19$i + (i32.add + (get_local $$add17$i) + (i32.const 7) + ) + ) + (set_local $$shr20$i + (i32.shr_u + (get_local $$and145) + (get_local $$add19$i) + ) + ) + (set_local $$and21$i$149 + (i32.and + (get_local $$shr20$i) + (i32.const 1) + ) + ) + (set_local $$add22$i + (i32.or + (get_local $$and21$i$149) + (get_local $$shl18$i) + ) + ) + (set_local $$idx$0$i + (get_local $$add22$i) + ) + ) + ) + ) + ) + (set_local $$arrayidx$i$150 + (i32.add + (i32.const 480) + (i32.shl + (get_local $$idx$0$i) + (i32.const 2) + ) + ) + ) + (set_local $$52 + (i32.load + (get_local $$arrayidx$i$150) + ) + ) + (set_local $$cmp24$i + (i32.eq + (get_local $$52) + (i32.const 0) + ) + ) + (block $label$break$L123 + (if + (get_local $$cmp24$i) + (block + (set_local $$rsize$3$i + (get_local $$sub$i$138) + ) + (set_local $$t$2$i + (i32.const 0) + ) + (set_local $$v$3$i + (i32.const 0) + ) + (set_local $label + (i32.const 86) + ) + ) + (block + (set_local $$cmp26$i + (i32.eq + (get_local $$idx$0$i) + (i32.const 31) + ) + ) + (set_local $$shr27$i + (i32.shr_u + (get_local $$idx$0$i) + (i32.const 1) + ) + ) + (set_local $$sub30$i + (i32.sub + (i32.const 25) + (get_local $$shr27$i) + ) + ) + (set_local $$cond$i + (if (result i32) + (get_local $$cmp26$i) + (i32.const 0) + (get_local $$sub30$i) + ) + ) + (set_local $$shl31$i + (i32.shl + (get_local $$and145) + (get_local $$cond$i) + ) + ) + (set_local $$rsize$0$i$152 + (get_local $$sub$i$138) + ) + (set_local $$rst$0$i + (i32.const 0) + ) + (set_local $$sizebits$0$i + (get_local $$shl31$i) + ) + (set_local $$t$0$i$151 + (get_local $$52) + ) + (set_local $$v$0$i$153 + (i32.const 0) + ) + (loop $while-in14 + (block $while-out13 + (set_local $$head$i$154 + (i32.add + (get_local $$t$0$i$151) + (i32.const 4) + ) + ) + (set_local $$53 + (i32.load + (get_local $$head$i$154) + ) + ) + (set_local $$and32$i + (i32.and + (get_local $$53) + (i32.const -8) + ) + ) + (set_local $$sub33$i + (i32.sub + (get_local $$and32$i) + (get_local $$and145) + ) + ) + (set_local $$cmp34$i + (i32.lt_u + (get_local $$sub33$i) + (get_local $$rsize$0$i$152) + ) + ) + (if + (get_local $$cmp34$i) + (block + (set_local $$cmp36$i + (i32.eq + (get_local $$and32$i) + (get_local $$and145) + ) + ) + (if + (get_local $$cmp36$i) + (block + (set_local $$rsize$49$i + (get_local $$sub33$i) + ) + (set_local $$t$48$i + (get_local $$t$0$i$151) + ) + (set_local $$v$410$i + (get_local $$t$0$i$151) + ) + (set_local $label + (i32.const 90) + ) + (br $label$break$L123) + ) + (block + (set_local $$rsize$1$i + (get_local $$sub33$i) + ) + (set_local $$v$1$i + (get_local $$t$0$i$151) + ) + ) + ) + ) + (block + (set_local $$rsize$1$i + (get_local $$rsize$0$i$152) + ) + (set_local $$v$1$i + (get_local $$v$0$i$153) + ) + ) + ) + (set_local $$arrayidx40$i + (i32.add + (get_local $$t$0$i$151) + (i32.const 20) + ) + ) + (set_local $$54 + (i32.load + (get_local $$arrayidx40$i) + ) + ) + (set_local $$shr41$i + (i32.shr_u + (get_local $$sizebits$0$i) + (i32.const 31) + ) + ) + (set_local $$arrayidx44$i + (i32.add + (i32.add + (get_local $$t$0$i$151) + (i32.const 16) + ) + (i32.shl + (get_local $$shr41$i) + (i32.const 2) + ) + ) + ) + (set_local $$55 + (i32.load + (get_local $$arrayidx44$i) + ) + ) + (set_local $$cmp45$i$155 + (i32.eq + (get_local $$54) + (i32.const 0) + ) + ) + (set_local $$cmp46$i + (i32.eq + (get_local $$54) + (get_local $$55) + ) + ) + (set_local $$or$cond1$i + (i32.or + (get_local $$cmp45$i$155) + (get_local $$cmp46$i) + ) + ) + (set_local $$rst$1$i + (if (result i32) + (get_local $$or$cond1$i) + (get_local $$rst$0$i) + (get_local $$54) + ) + ) + (set_local $$cmp49$i + (i32.eq + (get_local $$55) + (i32.const 0) + ) + ) + (set_local $$56 + (i32.and + (get_local $$cmp49$i) + (i32.const 1) + ) + ) + (set_local $$shl52$i + (i32.xor + (get_local $$56) + (i32.const 1) + ) + ) + (set_local $$sizebits$0$shl52$i + (i32.shl + (get_local $$sizebits$0$i) + (get_local $$shl52$i) + ) + ) + (if + (get_local $$cmp49$i) + (block + (set_local $$rsize$3$i + (get_local $$rsize$1$i) + ) + (set_local $$t$2$i + (get_local $$rst$1$i) + ) + (set_local $$v$3$i + (get_local $$v$1$i) + ) + (set_local $label + (i32.const 86) + ) + (br $while-out13) + ) + (block + (set_local $$rsize$0$i$152 + (get_local $$rsize$1$i) + ) + (set_local $$rst$0$i + (get_local $$rst$1$i) + ) + (set_local $$sizebits$0$i + (get_local $$sizebits$0$shl52$i) + ) + (set_local $$t$0$i$151 + (get_local $$55) + ) + (set_local $$v$0$i$153 + (get_local $$v$1$i) + ) + ) + ) + (br $while-in14) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 86) + ) + (block + (set_local $$cmp55$i + (i32.eq + (get_local $$t$2$i) + (i32.const 0) + ) + ) + (set_local $$cmp57$i + (i32.eq + (get_local $$v$3$i) + (i32.const 0) + ) + ) + (set_local $$or$cond$i + (i32.and + (get_local $$cmp55$i) + (get_local $$cmp57$i) + ) + ) + (if + (get_local $$or$cond$i) + (block + (set_local $$shl60$i + (i32.shl + (i32.const 2) + (get_local $$idx$0$i) + ) + ) + (set_local $$sub63$i + (i32.sub + (i32.const 0) + (get_local $$shl60$i) + ) + ) + (set_local $$or$i + (i32.or + (get_local $$shl60$i) + (get_local $$sub63$i) + ) + ) + (set_local $$and64$i + (i32.and + (get_local $$51) + (get_local $$or$i) + ) + ) + (set_local $$cmp65$i + (i32.eq + (get_local $$and64$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp65$i) + (block + (set_local $$nb$0 + (get_local $$and145) + ) + (br $do-once) + ) + ) + (set_local $$sub67$i + (i32.sub + (i32.const 0) + (get_local $$and64$i) + ) + ) + (set_local $$and68$i + (i32.and + (get_local $$and64$i) + (get_local $$sub67$i) + ) + ) + (set_local $$sub70$i + (i32.add + (get_local $$and68$i) + (i32.const -1) + ) + ) + (set_local $$shr72$i + (i32.shr_u + (get_local $$sub70$i) + (i32.const 12) + ) + ) + (set_local $$and73$i + (i32.and + (get_local $$shr72$i) + (i32.const 16) + ) + ) + (set_local $$shr75$i + (i32.shr_u + (get_local $$sub70$i) + (get_local $$and73$i) + ) + ) + (set_local $$shr76$i + (i32.shr_u + (get_local $$shr75$i) + (i32.const 5) + ) + ) + (set_local $$and77$i + (i32.and + (get_local $$shr76$i) + (i32.const 8) + ) + ) + (set_local $$add78$i + (i32.or + (get_local $$and77$i) + (get_local $$and73$i) + ) + ) + (set_local $$shr79$i + (i32.shr_u + (get_local $$shr75$i) + (get_local $$and77$i) + ) + ) + (set_local $$shr80$i + (i32.shr_u + (get_local $$shr79$i) + (i32.const 2) + ) + ) + (set_local $$and81$i + (i32.and + (get_local $$shr80$i) + (i32.const 4) + ) + ) + (set_local $$add82$i + (i32.or + (get_local $$add78$i) + (get_local $$and81$i) + ) + ) + (set_local $$shr83$i + (i32.shr_u + (get_local $$shr79$i) + (get_local $$and81$i) + ) + ) + (set_local $$shr84$i + (i32.shr_u + (get_local $$shr83$i) + (i32.const 1) + ) + ) + (set_local $$and85$i + (i32.and + (get_local $$shr84$i) + (i32.const 2) + ) + ) + (set_local $$add86$i + (i32.or + (get_local $$add82$i) + (get_local $$and85$i) + ) + ) + (set_local $$shr87$i + (i32.shr_u + (get_local $$shr83$i) + (get_local $$and85$i) + ) + ) + (set_local $$shr88$i + (i32.shr_u + (get_local $$shr87$i) + (i32.const 1) + ) + ) + (set_local $$and89$i + (i32.and + (get_local $$shr88$i) + (i32.const 1) + ) + ) + (set_local $$add90$i + (i32.or + (get_local $$add86$i) + (get_local $$and89$i) + ) + ) + (set_local $$shr91$i + (i32.shr_u + (get_local $$shr87$i) + (get_local $$and89$i) + ) + ) + (set_local $$add92$i + (i32.add + (get_local $$add90$i) + (get_local $$shr91$i) + ) + ) + (set_local $$arrayidx94$i$156 + (i32.add + (i32.const 480) + (i32.shl + (get_local $$add92$i) + (i32.const 2) + ) + ) + ) + (set_local $$57 + (i32.load + (get_local $$arrayidx94$i$156) + ) + ) + (set_local $$t$4$ph$i + (get_local $$57) + ) + ) + (set_local $$t$4$ph$i + (get_local $$t$2$i) + ) + ) + (set_local $$cmp97$7$i + (i32.eq + (get_local $$t$4$ph$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp97$7$i) + (block + (set_local $$rsize$4$lcssa$i + (get_local $$rsize$3$i) + ) + (set_local $$v$4$lcssa$i + (get_local $$v$3$i) + ) + ) + (block + (set_local $$rsize$49$i + (get_local $$rsize$3$i) + ) + (set_local $$t$48$i + (get_local $$t$4$ph$i) + ) + (set_local $$v$410$i + (get_local $$v$3$i) + ) + (set_local $label + (i32.const 90) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 90) + ) + (loop $while-in16 + (block $while-out15 + (set_local $label + (i32.const 0) + ) + (set_local $$head99$i + (i32.add + (get_local $$t$48$i) + (i32.const 4) + ) + ) + (set_local $$58 + (i32.load + (get_local $$head99$i) + ) + ) + (set_local $$and100$i + (i32.and + (get_local $$58) + (i32.const -8) + ) + ) + (set_local $$sub101$i + (i32.sub + (get_local $$and100$i) + (get_local $$and145) + ) + ) + (set_local $$cmp102$i + (i32.lt_u + (get_local $$sub101$i) + (get_local $$rsize$49$i) + ) + ) + (set_local $$sub101$rsize$4$i + (if (result i32) + (get_local $$cmp102$i) + (get_local $$sub101$i) + (get_local $$rsize$49$i) + ) + ) + (set_local $$t$4$v$4$i + (if (result i32) + (get_local $$cmp102$i) + (get_local $$t$48$i) + (get_local $$v$410$i) + ) + ) + (set_local $$arrayidx106$i + (i32.add + (get_local $$t$48$i) + (i32.const 16) + ) + ) + (set_local $$59 + (i32.load + (get_local $$arrayidx106$i) + ) + ) + (set_local $$cmp107$i$157 + (i32.eq + (get_local $$59) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp107$i$157) + ) + (block + (set_local $$rsize$49$i + (get_local $$sub101$rsize$4$i) + ) + (set_local $$t$48$i + (get_local $$59) + ) + (set_local $$v$410$i + (get_local $$t$4$v$4$i) + ) + (set_local $label + (i32.const 90) + ) + (br $while-in16) + ) + ) + (set_local $$arrayidx113$i$159 + (i32.add + (get_local $$t$48$i) + (i32.const 20) + ) + ) + (set_local $$60 + (i32.load + (get_local $$arrayidx113$i$159) + ) + ) + (set_local $$cmp97$i + (i32.eq + (get_local $$60) + (i32.const 0) + ) + ) + (if + (get_local $$cmp97$i) + (block + (set_local $$rsize$4$lcssa$i + (get_local $$sub101$rsize$4$i) + ) + (set_local $$v$4$lcssa$i + (get_local $$t$4$v$4$i) + ) + (br $while-out15) + ) + (block + (set_local $$rsize$49$i + (get_local $$sub101$rsize$4$i) + ) + (set_local $$t$48$i + (get_local $$60) + ) + (set_local $$v$410$i + (get_local $$t$4$v$4$i) + ) + (set_local $label + (i32.const 90) + ) + ) + ) + (br $while-in16) + ) + ) + ) + (set_local $$cmp116$i + (i32.eq + (get_local $$v$4$lcssa$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp116$i) + (set_local $$nb$0 + (get_local $$and145) + ) + (block + (set_local $$61 + (i32.load + (i32.const 184) + ) + ) + (set_local $$sub118$i + (i32.sub + (get_local $$61) + (get_local $$and145) + ) + ) + (set_local $$cmp119$i + (i32.lt_u + (get_local $$rsize$4$lcssa$i) + (get_local $$sub118$i) + ) + ) + (if + (get_local $$cmp119$i) + (block + (set_local $$62 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp121$i + (i32.lt_u + (get_local $$v$4$lcssa$i) + (get_local $$62) + ) + ) + (if + (get_local $$cmp121$i) + (call $_abort) + ) + (set_local $$add$ptr$i$161 + (i32.add + (get_local $$v$4$lcssa$i) + (get_local $$and145) + ) + ) + (set_local $$cmp123$i + (i32.lt_u + (get_local $$v$4$lcssa$i) + (get_local $$add$ptr$i$161) + ) + ) + (if + (i32.eqz + (get_local $$cmp123$i) + ) + (call $_abort) + ) + (set_local $$parent$i$162 + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 24) + ) + ) + (set_local $$63 + (i32.load + (get_local $$parent$i$162) + ) + ) + (set_local $$bk$i$163 + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 12) + ) + ) + (set_local $$64 + (i32.load + (get_local $$bk$i$163) + ) + ) + (set_local $$cmp128$i + (i32.eq + (get_local $$64) + (get_local $$v$4$lcssa$i) + ) + ) + (block $do-once17 + (if + (get_local $$cmp128$i) + (block + (set_local $$arrayidx151$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 20) + ) + ) + (set_local $$68 + (i32.load + (get_local $$arrayidx151$i) + ) + ) + (set_local $$cmp152$i + (i32.eq + (get_local $$68) + (i32.const 0) + ) + ) + (if + (get_local $$cmp152$i) + (block + (set_local $$arrayidx155$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 16) + ) + ) + (set_local $$69 + (i32.load + (get_local $$arrayidx155$i) + ) + ) + (set_local $$cmp156$i + (i32.eq + (get_local $$69) + (i32.const 0) + ) + ) + (if + (get_local $$cmp156$i) + (block + (set_local $$R$3$i$171 + (i32.const 0) + ) + (br $do-once17) + ) + (block + (set_local $$R$1$i$168 + (get_local $$69) + ) + (set_local $$RP$1$i$167 + (get_local $$arrayidx155$i) + ) + ) + ) + ) + (block + (set_local $$R$1$i$168 + (get_local $$68) + ) + (set_local $$RP$1$i$167 + (get_local $$arrayidx151$i) + ) + ) + ) + (loop $while-in20 + (block $while-out19 + (set_local $$arrayidx161$i + (i32.add + (get_local $$R$1$i$168) + (i32.const 20) + ) + ) + (set_local $$70 + (i32.load + (get_local $$arrayidx161$i) + ) + ) + (set_local $$cmp162$i + (i32.eq + (get_local $$70) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp162$i) + ) + (block + (set_local $$R$1$i$168 + (get_local $$70) + ) + (set_local $$RP$1$i$167 + (get_local $$arrayidx161$i) + ) + (br $while-in20) + ) + ) + (set_local $$arrayidx165$i$169 + (i32.add + (get_local $$R$1$i$168) + (i32.const 16) + ) + ) + (set_local $$71 + (i32.load + (get_local $$arrayidx165$i$169) + ) + ) + (set_local $$cmp166$i + (i32.eq + (get_local $$71) + (i32.const 0) + ) + ) + (if + (get_local $$cmp166$i) + (block + (set_local $$R$1$i$168$lcssa + (get_local $$R$1$i$168) + ) + (set_local $$RP$1$i$167$lcssa + (get_local $$RP$1$i$167) + ) + (br $while-out19) + ) + (block + (set_local $$R$1$i$168 + (get_local $$71) + ) + (set_local $$RP$1$i$167 + (get_local $$arrayidx165$i$169) + ) + ) + ) + (br $while-in20) + ) + ) + (set_local $$cmp171$i + (i32.lt_u + (get_local $$RP$1$i$167$lcssa) + (get_local $$62) + ) + ) + (if + (get_local $$cmp171$i) + (call $_abort) + (block + (i32.store + (get_local $$RP$1$i$167$lcssa) + (i32.const 0) + ) + (set_local $$R$3$i$171 + (get_local $$R$1$i$168$lcssa) + ) + (br $do-once17) + ) + ) + ) + (block + (set_local $$fd$i$164 + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 8) + ) + ) + (set_local $$65 + (i32.load + (get_local $$fd$i$164) + ) + ) + (set_local $$cmp133$i + (i32.lt_u + (get_local $$65) + (get_local $$62) + ) + ) + (if + (get_local $$cmp133$i) + (call $_abort) + ) + (set_local $$bk136$i + (i32.add + (get_local $$65) + (i32.const 12) + ) + ) + (set_local $$66 + (i32.load + (get_local $$bk136$i) + ) + ) + (set_local $$cmp137$i + (i32.eq + (get_local $$66) + (get_local $$v$4$lcssa$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp137$i) + ) + (call $_abort) + ) + (set_local $$fd139$i + (i32.add + (get_local $$64) + (i32.const 8) + ) + ) + (set_local $$67 + (i32.load + (get_local $$fd139$i) + ) + ) + (set_local $$cmp140$i + (i32.eq + (get_local $$67) + (get_local $$v$4$lcssa$i) + ) + ) + (if + (get_local $$cmp140$i) + (block + (i32.store + (get_local $$bk136$i) + (get_local $$64) + ) + (i32.store + (get_local $$fd139$i) + (get_local $$65) + ) + (set_local $$R$3$i$171 + (get_local $$64) + ) + (br $do-once17) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$cmp180$i + (i32.eq + (get_local $$63) + (i32.const 0) + ) + ) + (block $do-once21 + (if + (i32.eqz + (get_local $$cmp180$i) + ) + (block + (set_local $$index$i$172 + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 28) + ) + ) + (set_local $$72 + (i32.load + (get_local $$index$i$172) + ) + ) + (set_local $$arrayidx184$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$72) + (i32.const 2) + ) + ) + ) + (set_local $$73 + (i32.load + (get_local $$arrayidx184$i) + ) + ) + (set_local $$cmp185$i + (i32.eq + (get_local $$v$4$lcssa$i) + (get_local $$73) + ) + ) + (if + (get_local $$cmp185$i) + (block + (i32.store + (get_local $$arrayidx184$i) + (get_local $$R$3$i$171) + ) + (set_local $$cond3$i + (i32.eq + (get_local $$R$3$i$171) + (i32.const 0) + ) + ) + (if + (get_local $$cond3$i) + (block + (set_local $$shl192$i + (i32.shl + (i32.const 1) + (get_local $$72) + ) + ) + (set_local $$neg$i$173 + (i32.xor + (get_local $$shl192$i) + (i32.const -1) + ) + ) + (set_local $$74 + (i32.load + (i32.const 180) + ) + ) + (set_local $$and194$i + (i32.and + (get_local $$74) + (get_local $$neg$i$173) + ) + ) + (i32.store + (i32.const 180) + (get_local $$and194$i) + ) + (br $do-once21) + ) + ) + ) + (block + (set_local $$75 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp198$i + (i32.lt_u + (get_local $$63) + (get_local $$75) + ) + ) + (if + (get_local $$cmp198$i) + (call $_abort) + ) + (set_local $$arrayidx204$i + (i32.add + (get_local $$63) + (i32.const 16) + ) + ) + (set_local $$76 + (i32.load + (get_local $$arrayidx204$i) + ) + ) + (set_local $$cmp205$i + (i32.eq + (get_local $$76) + (get_local $$v$4$lcssa$i) + ) + ) + (if + (get_local $$cmp205$i) + (i32.store + (get_local $$arrayidx204$i) + (get_local $$R$3$i$171) + ) + (block + (set_local $$arrayidx212$i + (i32.add + (get_local $$63) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx212$i) + (get_local $$R$3$i$171) + ) + ) + ) + (set_local $$cmp217$i + (i32.eq + (get_local $$R$3$i$171) + (i32.const 0) + ) + ) + (if + (get_local $$cmp217$i) + (br $do-once21) + ) + ) + ) + (set_local $$77 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp221$i + (i32.lt_u + (get_local $$R$3$i$171) + (get_local $$77) + ) + ) + (if + (get_local $$cmp221$i) + (call $_abort) + ) + (set_local $$parent226$i + (i32.add + (get_local $$R$3$i$171) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent226$i) + (get_local $$63) + ) + (set_local $$arrayidx228$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 16) + ) + ) + (set_local $$78 + (i32.load + (get_local $$arrayidx228$i) + ) + ) + (set_local $$cmp229$i + (i32.eq + (get_local $$78) + (i32.const 0) + ) + ) + (block $do-once23 + (if + (i32.eqz + (get_local $$cmp229$i) + ) + (block + (set_local $$cmp233$i + (i32.lt_u + (get_local $$78) + (get_local $$77) + ) + ) + (if + (get_local $$cmp233$i) + (call $_abort) + (block + (set_local $$arrayidx239$i + (i32.add + (get_local $$R$3$i$171) + (i32.const 16) + ) + ) + (i32.store + (get_local $$arrayidx239$i) + (get_local $$78) + ) + (set_local $$parent240$i + (i32.add + (get_local $$78) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent240$i) + (get_local $$R$3$i$171) + ) + (br $do-once23) + ) + ) + ) + ) + ) + (set_local $$arrayidx245$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 20) + ) + ) + (set_local $$79 + (i32.load + (get_local $$arrayidx245$i) + ) + ) + (set_local $$cmp246$i + (i32.eq + (get_local $$79) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp246$i) + ) + (block + (set_local $$80 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp250$i + (i32.lt_u + (get_local $$79) + (get_local $$80) + ) + ) + (if + (get_local $$cmp250$i) + (call $_abort) + (block + (set_local $$arrayidx256$i + (i32.add + (get_local $$R$3$i$171) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx256$i) + (get_local $$79) + ) + (set_local $$parent257$i + (i32.add + (get_local $$79) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent257$i) + (get_local $$R$3$i$171) + ) + (br $do-once21) + ) + ) + ) + ) + ) + ) + ) + (set_local $$cmp265$i + (i32.lt_u + (get_local $$rsize$4$lcssa$i) + (i32.const 16) + ) + ) + (block $do-once25 + (if + (get_local $$cmp265$i) + (block + (set_local $$add268$i + (i32.add + (get_local $$rsize$4$lcssa$i) + (get_local $$and145) + ) + ) + (set_local $$or270$i + (i32.or + (get_local $$add268$i) + (i32.const 3) + ) + ) + (set_local $$head271$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head271$i) + (get_local $$or270$i) + ) + (set_local $$add$ptr273$i + (i32.add + (get_local $$v$4$lcssa$i) + (get_local $$add268$i) + ) + ) + (set_local $$head274$i + (i32.add + (get_local $$add$ptr273$i) + (i32.const 4) + ) + ) + (set_local $$81 + (i32.load + (get_local $$head274$i) + ) + ) + (set_local $$or275$i + (i32.or + (get_local $$81) + (i32.const 1) + ) + ) + (i32.store + (get_local $$head274$i) + (get_local $$or275$i) + ) + ) + (block + (set_local $$or278$i + (i32.or + (get_local $$and145) + (i32.const 3) + ) + ) + (set_local $$head279$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head279$i) + (get_local $$or278$i) + ) + (set_local $$or280$i + (i32.or + (get_local $$rsize$4$lcssa$i) + (i32.const 1) + ) + ) + (set_local $$head281$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head281$i) + (get_local $$or280$i) + ) + (set_local $$add$ptr282$i + (i32.add + (get_local $$add$ptr$i$161) + (get_local $$rsize$4$lcssa$i) + ) + ) + (i32.store + (get_local $$add$ptr282$i) + (get_local $$rsize$4$lcssa$i) + ) + (set_local $$shr283$i + (i32.shr_u + (get_local $$rsize$4$lcssa$i) + (i32.const 3) + ) + ) + (set_local $$cmp284$i + (i32.lt_u + (get_local $$rsize$4$lcssa$i) + (i32.const 256) + ) + ) + (if + (get_local $$cmp284$i) + (block + (set_local $$shl288$i + (i32.shl + (get_local $$shr283$i) + (i32.const 1) + ) + ) + (set_local $$arrayidx289$i + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl288$i) + (i32.const 2) + ) + ) + ) + (set_local $$82 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shl291$i + (i32.shl + (i32.const 1) + (get_local $$shr283$i) + ) + ) + (set_local $$and292$i + (i32.and + (get_local $$82) + (get_local $$shl291$i) + ) + ) + (set_local $$tobool293$i + (i32.eq + (get_local $$and292$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool293$i) + (block + (set_local $$or297$i + (i32.or + (get_local $$82) + (get_local $$shl291$i) + ) + ) + (i32.store + (i32.const 176) + (get_local $$or297$i) + ) + (set_local $$$pre$i$177 + (i32.add + (get_local $$arrayidx289$i) + (i32.const 8) + ) + ) + (set_local $$$pre$phi$i$178Z2D + (get_local $$$pre$i$177) + ) + (set_local $$F290$0$i + (get_local $$arrayidx289$i) + ) + ) + (block + (set_local $$83 + (i32.add + (get_local $$arrayidx289$i) + (i32.const 8) + ) + ) + (set_local $$84 + (i32.load + (get_local $$83) + ) + ) + (set_local $$85 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp301$i + (i32.lt_u + (get_local $$84) + (get_local $$85) + ) + ) + (if + (get_local $$cmp301$i) + (call $_abort) + (block + (set_local $$$pre$phi$i$178Z2D + (get_local $$83) + ) + (set_local $$F290$0$i + (get_local $$84) + ) + ) + ) + ) + ) + (i32.store + (get_local $$$pre$phi$i$178Z2D) + (get_local $$add$ptr$i$161) + ) + (set_local $$bk311$i + (i32.add + (get_local $$F290$0$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk311$i) + (get_local $$add$ptr$i$161) + ) + (set_local $$fd312$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd312$i) + (get_local $$F290$0$i) + ) + (set_local $$bk313$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk313$i) + (get_local $$arrayidx289$i) + ) + (br $do-once25) + ) + ) + (set_local $$shr318$i + (i32.shr_u + (get_local $$rsize$4$lcssa$i) + (i32.const 8) + ) + ) + (set_local $$cmp319$i + (i32.eq + (get_local $$shr318$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp319$i) + (set_local $$I316$0$i + (i32.const 0) + ) + (block + (set_local $$cmp323$i + (i32.gt_u + (get_local $$rsize$4$lcssa$i) + (i32.const 16777215) + ) + ) + (if + (get_local $$cmp323$i) + (set_local $$I316$0$i + (i32.const 31) + ) + (block + (set_local $$sub329$i + (i32.add + (get_local $$shr318$i) + (i32.const 1048320) + ) + ) + (set_local $$shr330$i + (i32.shr_u + (get_local $$sub329$i) + (i32.const 16) + ) + ) + (set_local $$and331$i + (i32.and + (get_local $$shr330$i) + (i32.const 8) + ) + ) + (set_local $$shl333$i + (i32.shl + (get_local $$shr318$i) + (get_local $$and331$i) + ) + ) + (set_local $$sub334$i + (i32.add + (get_local $$shl333$i) + (i32.const 520192) + ) + ) + (set_local $$shr335$i + (i32.shr_u + (get_local $$sub334$i) + (i32.const 16) + ) + ) + (set_local $$and336$i + (i32.and + (get_local $$shr335$i) + (i32.const 4) + ) + ) + (set_local $$add337$i + (i32.or + (get_local $$and336$i) + (get_local $$and331$i) + ) + ) + (set_local $$shl338$i + (i32.shl + (get_local $$shl333$i) + (get_local $$and336$i) + ) + ) + (set_local $$sub339$i + (i32.add + (get_local $$shl338$i) + (i32.const 245760) + ) + ) + (set_local $$shr340$i + (i32.shr_u + (get_local $$sub339$i) + (i32.const 16) + ) + ) + (set_local $$and341$i + (i32.and + (get_local $$shr340$i) + (i32.const 2) + ) + ) + (set_local $$add342$i + (i32.or + (get_local $$add337$i) + (get_local $$and341$i) + ) + ) + (set_local $$sub343$i + (i32.sub + (i32.const 14) + (get_local $$add342$i) + ) + ) + (set_local $$shl344$i + (i32.shl + (get_local $$shl338$i) + (get_local $$and341$i) + ) + ) + (set_local $$shr345$i + (i32.shr_u + (get_local $$shl344$i) + (i32.const 15) + ) + ) + (set_local $$add346$i + (i32.add + (get_local $$sub343$i) + (get_local $$shr345$i) + ) + ) + (set_local $$shl347$i + (i32.shl + (get_local $$add346$i) + (i32.const 1) + ) + ) + (set_local $$add348$i + (i32.add + (get_local $$add346$i) + (i32.const 7) + ) + ) + (set_local $$shr349$i + (i32.shr_u + (get_local $$rsize$4$lcssa$i) + (get_local $$add348$i) + ) + ) + (set_local $$and350$i + (i32.and + (get_local $$shr349$i) + (i32.const 1) + ) + ) + (set_local $$add351$i + (i32.or + (get_local $$and350$i) + (get_local $$shl347$i) + ) + ) + (set_local $$I316$0$i + (get_local $$add351$i) + ) + ) + ) + ) + ) + (set_local $$arrayidx355$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$I316$0$i) + (i32.const 2) + ) + ) + ) + (set_local $$index356$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 28) + ) + ) + (i32.store + (get_local $$index356$i) + (get_local $$I316$0$i) + ) + (set_local $$child357$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 16) + ) + ) + (set_local $$arrayidx358$i + (i32.add + (get_local $$child357$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$arrayidx358$i) + (i32.const 0) + ) + (i32.store + (get_local $$child357$i) + (i32.const 0) + ) + (set_local $$86 + (i32.load + (i32.const 180) + ) + ) + (set_local $$shl362$i + (i32.shl + (i32.const 1) + (get_local $$I316$0$i) + ) + ) + (set_local $$and363$i + (i32.and + (get_local $$86) + (get_local $$shl362$i) + ) + ) + (set_local $$tobool364$i + (i32.eq + (get_local $$and363$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool364$i) + (block + (set_local $$or368$i + (i32.or + (get_local $$86) + (get_local $$shl362$i) + ) + ) + (i32.store + (i32.const 180) + (get_local $$or368$i) + ) + (i32.store + (get_local $$arrayidx355$i) + (get_local $$add$ptr$i$161) + ) + (set_local $$parent369$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent369$i) + (get_local $$arrayidx355$i) + ) + (set_local $$bk370$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk370$i) + (get_local $$add$ptr$i$161) + ) + (set_local $$fd371$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd371$i) + (get_local $$add$ptr$i$161) + ) + (br $do-once25) + ) + ) + (set_local $$87 + (i32.load + (get_local $$arrayidx355$i) + ) + ) + (set_local $$cmp374$i + (i32.eq + (get_local $$I316$0$i) + (i32.const 31) + ) + ) + (set_local $$shr378$i + (i32.shr_u + (get_local $$I316$0$i) + (i32.const 1) + ) + ) + (set_local $$sub381$i + (i32.sub + (i32.const 25) + (get_local $$shr378$i) + ) + ) + (set_local $$cond383$i + (if (result i32) + (get_local $$cmp374$i) + (i32.const 0) + (get_local $$sub381$i) + ) + ) + (set_local $$shl384$i + (i32.shl + (get_local $$rsize$4$lcssa$i) + (get_local $$cond383$i) + ) + ) + (set_local $$K373$0$i + (get_local $$shl384$i) + ) + (set_local $$T$0$i + (get_local $$87) + ) + (loop $while-in28 + (block $while-out27 + (set_local $$head386$i + (i32.add + (get_local $$T$0$i) + (i32.const 4) + ) + ) + (set_local $$88 + (i32.load + (get_local $$head386$i) + ) + ) + (set_local $$and387$i + (i32.and + (get_local $$88) + (i32.const -8) + ) + ) + (set_local $$cmp388$i + (i32.eq + (get_local $$and387$i) + (get_local $$rsize$4$lcssa$i) + ) + ) + (if + (get_local $$cmp388$i) + (block + (set_local $$T$0$i$lcssa + (get_local $$T$0$i) + ) + (set_local $label + (i32.const 148) + ) + (br $while-out27) + ) + ) + (set_local $$shr391$i + (i32.shr_u + (get_local $$K373$0$i) + (i32.const 31) + ) + ) + (set_local $$arrayidx394$i + (i32.add + (i32.add + (get_local $$T$0$i) + (i32.const 16) + ) + (i32.shl + (get_local $$shr391$i) + (i32.const 2) + ) + ) + ) + (set_local $$shl395$i + (i32.shl + (get_local $$K373$0$i) + (i32.const 1) + ) + ) + (set_local $$89 + (i32.load + (get_local $$arrayidx394$i) + ) + ) + (set_local $$cmp396$i + (i32.eq + (get_local $$89) + (i32.const 0) + ) + ) + (if + (get_local $$cmp396$i) + (block + (set_local $$T$0$i$lcssa293 + (get_local $$T$0$i) + ) + (set_local $$arrayidx394$i$lcssa + (get_local $$arrayidx394$i) + ) + (set_local $label + (i32.const 145) + ) + (br $while-out27) + ) + (block + (set_local $$K373$0$i + (get_local $$shl395$i) + ) + (set_local $$T$0$i + (get_local $$89) + ) + ) + ) + (br $while-in28) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 145) + ) + (block + (set_local $$90 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp401$i + (i32.lt_u + (get_local $$arrayidx394$i$lcssa) + (get_local $$90) + ) + ) + (if + (get_local $$cmp401$i) + (call $_abort) + (block + (i32.store + (get_local $$arrayidx394$i$lcssa) + (get_local $$add$ptr$i$161) + ) + (set_local $$parent406$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent406$i) + (get_local $$T$0$i$lcssa293) + ) + (set_local $$bk407$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk407$i) + (get_local $$add$ptr$i$161) + ) + (set_local $$fd408$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd408$i) + (get_local $$add$ptr$i$161) + ) + (br $do-once25) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 148) + ) + (block + (set_local $$fd416$i + (i32.add + (get_local $$T$0$i$lcssa) + (i32.const 8) + ) + ) + (set_local $$91 + (i32.load + (get_local $$fd416$i) + ) + ) + (set_local $$92 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp422$i + (i32.ge_u + (get_local $$91) + (get_local $$92) + ) + ) + (set_local $$not$cmp418$i + (i32.ge_u + (get_local $$T$0$i$lcssa) + (get_local $$92) + ) + ) + (set_local $$93 + (i32.and + (get_local $$cmp422$i) + (get_local $$not$cmp418$i) + ) + ) + (if + (get_local $$93) + (block + (set_local $$bk429$i + (i32.add + (get_local $$91) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk429$i) + (get_local $$add$ptr$i$161) + ) + (i32.store + (get_local $$fd416$i) + (get_local $$add$ptr$i$161) + ) + (set_local $$fd431$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd431$i) + (get_local $$91) + ) + (set_local $$bk432$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk432$i) + (get_local $$T$0$i$lcssa) + ) + (set_local $$parent433$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent433$i) + (i32.const 0) + ) + (br $do-once25) + ) + (call $_abort) + ) + ) + ) + ) + ) + ) + ) + (set_local $$add$ptr441$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 8) + ) + ) + (set_local $$retval$0 + (get_local $$add$ptr441$i) + ) + (return + (get_local $$retval$0) + ) + ) + (set_local $$nb$0 + (get_local $$and145) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $$94 + (i32.load + (i32.const 184) + ) + ) + (set_local $$cmp156 + (i32.lt_u + (get_local $$94) + (get_local $$nb$0) + ) + ) + (if + (i32.eqz + (get_local $$cmp156) + ) + (block + (set_local $$sub160 + (i32.sub + (get_local $$94) + (get_local $$nb$0) + ) + ) + (set_local $$95 + (i32.load + (i32.const 196) + ) + ) + (set_local $$cmp162 + (i32.gt_u + (get_local $$sub160) + (i32.const 15) + ) + ) + (if + (get_local $$cmp162) + (block + (set_local $$add$ptr166 + (i32.add + (get_local $$95) + (get_local $$nb$0) + ) + ) + (i32.store + (i32.const 196) + (get_local $$add$ptr166) + ) + (i32.store + (i32.const 184) + (get_local $$sub160) + ) + (set_local $$or167 + (i32.or + (get_local $$sub160) + (i32.const 1) + ) + ) + (set_local $$head168 + (i32.add + (get_local $$add$ptr166) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head168) + (get_local $$or167) + ) + (set_local $$add$ptr169 + (i32.add + (get_local $$add$ptr166) + (get_local $$sub160) + ) + ) + (i32.store + (get_local $$add$ptr169) + (get_local $$sub160) + ) + (set_local $$or172 + (i32.or + (get_local $$nb$0) + (i32.const 3) + ) + ) + (set_local $$head173 + (i32.add + (get_local $$95) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head173) + (get_local $$or172) + ) + ) + (block + (i32.store + (i32.const 184) + (i32.const 0) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (set_local $$or176 + (i32.or + (get_local $$94) + (i32.const 3) + ) + ) + (set_local $$head177 + (i32.add + (get_local $$95) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head177) + (get_local $$or176) + ) + (set_local $$add$ptr178 + (i32.add + (get_local $$95) + (get_local $$94) + ) + ) + (set_local $$head179 + (i32.add + (get_local $$add$ptr178) + (i32.const 4) + ) + ) + (set_local $$96 + (i32.load + (get_local $$head179) + ) + ) + (set_local $$or180 + (i32.or + (get_local $$96) + (i32.const 1) + ) + ) + (i32.store + (get_local $$head179) + (get_local $$or180) + ) + ) + ) + (set_local $$add$ptr182 + (i32.add + (get_local $$95) + (i32.const 8) + ) + ) + (set_local $$retval$0 + (get_local $$add$ptr182) + ) + (return + (get_local $$retval$0) + ) + ) + ) + (set_local $$97 + (i32.load + (i32.const 188) + ) + ) + (set_local $$cmp186 + (i32.gt_u + (get_local $$97) + (get_local $$nb$0) + ) + ) + (if + (get_local $$cmp186) + (block + (set_local $$sub190 + (i32.sub + (get_local $$97) + (get_local $$nb$0) + ) + ) + (i32.store + (i32.const 188) + (get_local $$sub190) + ) + (set_local $$98 + (i32.load + (i32.const 200) + ) + ) + (set_local $$add$ptr193 + (i32.add + (get_local $$98) + (get_local $$nb$0) + ) + ) + (i32.store + (i32.const 200) + (get_local $$add$ptr193) + ) + (set_local $$or194 + (i32.or + (get_local $$sub190) + (i32.const 1) + ) + ) + (set_local $$head195 + (i32.add + (get_local $$add$ptr193) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head195) + (get_local $$or194) + ) + (set_local $$or197 + (i32.or + (get_local $$nb$0) + (i32.const 3) + ) + ) + (set_local $$head198 + (i32.add + (get_local $$98) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head198) + (get_local $$or197) + ) + (set_local $$add$ptr199 + (i32.add + (get_local $$98) + (i32.const 8) + ) + ) + (set_local $$retval$0 + (get_local $$add$ptr199) + ) + (return + (get_local $$retval$0) + ) + ) + ) + (set_local $$99 + (i32.load + (i32.const 648) + ) + ) + (set_local $$cmp$i$179 + (i32.eq + (get_local $$99) + (i32.const 0) + ) + ) + (block $do-once29 + (if + (get_local $$cmp$i$179) + (block + (set_local $$call$i$i + (call $_sysconf + (i32.const 30) + ) + ) + (set_local $$sub$i$i + (i32.add + (get_local $$call$i$i) + (i32.const -1) + ) + ) + (set_local $$and$i$i + (i32.and + (get_local $$sub$i$i) + (get_local $$call$i$i) + ) + ) + (set_local $$cmp1$i$i + (i32.eq + (get_local $$and$i$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp1$i$i) + (block + (i32.store + (i32.const 656) + (get_local $$call$i$i) + ) + (i32.store + (i32.const 652) + (get_local $$call$i$i) + ) + (i32.store + (i32.const 660) + (i32.const -1) + ) + (i32.store + (i32.const 664) + (i32.const -1) + ) + (i32.store + (i32.const 668) + (i32.const 0) + ) + (i32.store + (i32.const 620) + (i32.const 0) + ) + (set_local $$call6$i$i + (call $_time + (i32.const 0) + ) + ) + (set_local $$xor$i$i + (i32.and + (get_local $$call6$i$i) + (i32.const -16) + ) + ) + (set_local $$and7$i$i + (i32.xor + (get_local $$xor$i$i) + (i32.const 1431655768) + ) + ) + (i32.store + (i32.const 648) + (get_local $$and7$i$i) + ) + (br $do-once29) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$add$i$180 + (i32.add + (get_local $$nb$0) + (i32.const 48) + ) + ) + (set_local $$100 + (i32.load + (i32.const 656) + ) + ) + (set_local $$sub$i$181 + (i32.add + (get_local $$nb$0) + (i32.const 47) + ) + ) + (set_local $$add9$i + (i32.add + (get_local $$100) + (get_local $$sub$i$181) + ) + ) + (set_local $$neg$i$182 + (i32.sub + (i32.const 0) + (get_local $$100) + ) + ) + (set_local $$and11$i + (i32.and + (get_local $$add9$i) + (get_local $$neg$i$182) + ) + ) + (set_local $$cmp12$i + (i32.gt_u + (get_local $$and11$i) + (get_local $$nb$0) + ) + ) + (if + (i32.eqz + (get_local $$cmp12$i) + ) + (block + (set_local $$retval$0 + (i32.const 0) + ) + (return + (get_local $$retval$0) + ) + ) + ) + (set_local $$101 + (i32.load + (i32.const 616) + ) + ) + (set_local $$cmp15$i + (i32.eq + (get_local $$101) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp15$i) + ) + (block + (set_local $$102 + (i32.load + (i32.const 608) + ) + ) + (set_local $$add17$i$183 + (i32.add + (get_local $$102) + (get_local $$and11$i) + ) + ) + (set_local $$cmp19$i + (i32.le_u + (get_local $$add17$i$183) + (get_local $$102) + ) + ) + (set_local $$cmp21$i + (i32.gt_u + (get_local $$add17$i$183) + (get_local $$101) + ) + ) + (set_local $$or$cond1$i$184 + (i32.or + (get_local $$cmp19$i) + (get_local $$cmp21$i) + ) + ) + (if + (get_local $$or$cond1$i$184) + (block + (set_local $$retval$0 + (i32.const 0) + ) + (return + (get_local $$retval$0) + ) + ) + ) + ) + ) + (set_local $$103 + (i32.load + (i32.const 620) + ) + ) + (set_local $$and29$i + (i32.and + (get_local $$103) + (i32.const 4) + ) + ) + (set_local $$tobool30$i + (i32.eq + (get_local $$and29$i) + (i32.const 0) + ) + ) + (block $label$break$L257 + (if + (get_local $$tobool30$i) + (block + (set_local $$104 + (i32.load + (i32.const 200) + ) + ) + (set_local $$cmp32$i$185 + (i32.eq + (get_local $$104) + (i32.const 0) + ) + ) + (block $label$break$L259 + (if + (get_local $$cmp32$i$185) + (set_local $label + (i32.const 173) + ) + (block + (set_local $$sp$0$i$i + (i32.const 624) + ) + (loop $while-in34 + (block $while-out33 + (set_local $$105 + (i32.load + (get_local $$sp$0$i$i) + ) + ) + (set_local $$cmp$i$9$i + (i32.gt_u + (get_local $$105) + (get_local $$104) + ) + ) + (if + (i32.eqz + (get_local $$cmp$i$9$i) + ) + (block + (set_local $$size$i$i + (i32.add + (get_local $$sp$0$i$i) + (i32.const 4) + ) + ) + (set_local $$106 + (i32.load + (get_local $$size$i$i) + ) + ) + (set_local $$add$ptr$i$i + (i32.add + (get_local $$105) + (get_local $$106) + ) + ) + (set_local $$cmp2$i$i + (i32.gt_u + (get_local $$add$ptr$i$i) + (get_local $$104) + ) + ) + (if + (get_local $$cmp2$i$i) + (block + (set_local $$base$i$i$lcssa + (get_local $$sp$0$i$i) + ) + (set_local $$size$i$i$lcssa + (get_local $$size$i$i) + ) + (br $while-out33) + ) + ) + ) + ) + (set_local $$next$i$i + (i32.add + (get_local $$sp$0$i$i) + (i32.const 8) + ) + ) + (set_local $$107 + (i32.load + (get_local $$next$i$i) + ) + ) + (set_local $$cmp3$i$i + (i32.eq + (get_local $$107) + (i32.const 0) + ) + ) + (if + (get_local $$cmp3$i$i) + (block + (set_local $label + (i32.const 173) + ) + (br $label$break$L259) + ) + (set_local $$sp$0$i$i + (get_local $$107) + ) + ) + (br $while-in34) + ) + ) + (set_local $$112 + (i32.load + (i32.const 188) + ) + ) + (set_local $$add77$i + (i32.sub + (get_local $$add9$i) + (get_local $$112) + ) + ) + (set_local $$and80$i + (i32.and + (get_local $$add77$i) + (get_local $$neg$i$182) + ) + ) + (set_local $$cmp81$i$191 + (i32.lt_u + (get_local $$and80$i) + (i32.const 2147483647) + ) + ) + (if + (get_local $$cmp81$i$191) + (block + (set_local $$call83$i + (call $_sbrk + (get_local $$and80$i) + ) + ) + (set_local $$113 + (i32.load + (get_local $$base$i$i$lcssa) + ) + ) + (set_local $$114 + (i32.load + (get_local $$size$i$i$lcssa) + ) + ) + (set_local $$add$ptr$i$193 + (i32.add + (get_local $$113) + (get_local $$114) + ) + ) + (set_local $$cmp85$i + (i32.eq + (get_local $$call83$i) + (get_local $$add$ptr$i$193) + ) + ) + (if + (get_local $$cmp85$i) + (block + (set_local $$cmp89$i + (i32.eq + (get_local $$call83$i) + (i32.const -1) + ) + ) + (if + (i32.eqz + (get_local $$cmp89$i) + ) + (block + (set_local $$tbase$796$i + (get_local $$call83$i) + ) + (set_local $$tsize$795$i + (get_local $$and80$i) + ) + (set_local $label + (i32.const 193) + ) + (br $label$break$L257) + ) + ) + ) + (block + (set_local $$br$2$ph$i + (get_local $$call83$i) + ) + (set_local $$ssize$2$ph$i + (get_local $$and80$i) + ) + (set_local $label + (i32.const 183) + ) + ) + ) + ) + ) + ) + ) + ) + (block $do-once35 + (if + (i32.eq + (get_local $label) + (i32.const 173) + ) + (block + (set_local $$call37$i + (call $_sbrk + (i32.const 0) + ) + ) + (set_local $$cmp38$i + (i32.eq + (get_local $$call37$i) + (i32.const -1) + ) + ) + (if + (i32.eqz + (get_local $$cmp38$i) + ) + (block + (set_local $$108 + (get_local $$call37$i) + ) + (set_local $$109 + (i32.load + (i32.const 652) + ) + ) + (set_local $$sub41$i + (i32.add + (get_local $$109) + (i32.const -1) + ) + ) + (set_local $$and42$i + (i32.and + (get_local $$sub41$i) + (get_local $$108) + ) + ) + (set_local $$cmp43$i + (i32.eq + (get_local $$and42$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp43$i) + (set_local $$ssize$0$i + (get_local $$and11$i) + ) + (block + (set_local $$add46$i + (i32.add + (get_local $$sub41$i) + (get_local $$108) + ) + ) + (set_local $$neg48$i + (i32.sub + (i32.const 0) + (get_local $$109) + ) + ) + (set_local $$and49$i + (i32.and + (get_local $$add46$i) + (get_local $$neg48$i) + ) + ) + (set_local $$sub50$i + (i32.sub + (get_local $$and11$i) + (get_local $$108) + ) + ) + (set_local $$add51$i + (i32.add + (get_local $$sub50$i) + (get_local $$and49$i) + ) + ) + (set_local $$ssize$0$i + (get_local $$add51$i) + ) + ) + ) + (set_local $$110 + (i32.load + (i32.const 608) + ) + ) + (set_local $$add54$i + (i32.add + (get_local $$110) + (get_local $$ssize$0$i) + ) + ) + (set_local $$cmp55$i$187 + (i32.gt_u + (get_local $$ssize$0$i) + (get_local $$nb$0) + ) + ) + (set_local $$cmp57$i$188 + (i32.lt_u + (get_local $$ssize$0$i) + (i32.const 2147483647) + ) + ) + (set_local $$or$cond$i$189 + (i32.and + (get_local $$cmp55$i$187) + (get_local $$cmp57$i$188) + ) + ) + (if + (get_local $$or$cond$i$189) + (block + (set_local $$111 + (i32.load + (i32.const 616) + ) + ) + (set_local $$cmp60$i + (i32.eq + (get_local $$111) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp60$i) + ) + (block + (set_local $$cmp63$i + (i32.le_u + (get_local $$add54$i) + (get_local $$110) + ) + ) + (set_local $$cmp66$i$190 + (i32.gt_u + (get_local $$add54$i) + (get_local $$111) + ) + ) + (set_local $$or$cond2$i + (i32.or + (get_local $$cmp63$i) + (get_local $$cmp66$i$190) + ) + ) + (if + (get_local $$or$cond2$i) + (br $do-once35) + ) + ) + ) + (set_local $$call68$i + (call $_sbrk + (get_local $$ssize$0$i) + ) + ) + (set_local $$cmp69$i + (i32.eq + (get_local $$call68$i) + (get_local $$call37$i) + ) + ) + (if + (get_local $$cmp69$i) + (block + (set_local $$tbase$796$i + (get_local $$call37$i) + ) + (set_local $$tsize$795$i + (get_local $$ssize$0$i) + ) + (set_local $label + (i32.const 193) + ) + (br $label$break$L257) + ) + (block + (set_local $$br$2$ph$i + (get_local $$call68$i) + ) + (set_local $$ssize$2$ph$i + (get_local $$ssize$0$i) + ) + (set_local $label + (i32.const 183) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (block $label$break$L279 + (if + (i32.eq + (get_local $label) + (i32.const 183) + ) + (block + (set_local $$sub112$i + (i32.sub + (i32.const 0) + (get_local $$ssize$2$ph$i) + ) + ) + (set_local $$cmp91$i + (i32.ne + (get_local $$br$2$ph$i) + (i32.const -1) + ) + ) + (set_local $$cmp93$i + (i32.lt_u + (get_local $$ssize$2$ph$i) + (i32.const 2147483647) + ) + ) + (set_local $$or$cond5$i + (i32.and + (get_local $$cmp93$i) + (get_local $$cmp91$i) + ) + ) + (set_local $$cmp96$i + (i32.gt_u + (get_local $$add$i$180) + (get_local $$ssize$2$ph$i) + ) + ) + (set_local $$or$cond3$i + (i32.and + (get_local $$cmp96$i) + (get_local $$or$cond5$i) + ) + ) + (block $do-once38 + (if + (get_local $$or$cond3$i) + (block + (set_local $$115 + (i32.load + (i32.const 656) + ) + ) + (set_local $$sub99$i + (i32.sub + (get_local $$sub$i$181) + (get_local $$ssize$2$ph$i) + ) + ) + (set_local $$add101$i + (i32.add + (get_local $$sub99$i) + (get_local $$115) + ) + ) + (set_local $$neg103$i + (i32.sub + (i32.const 0) + (get_local $$115) + ) + ) + (set_local $$and104$i + (i32.and + (get_local $$add101$i) + (get_local $$neg103$i) + ) + ) + (set_local $$cmp105$i + (i32.lt_u + (get_local $$and104$i) + (i32.const 2147483647) + ) + ) + (if + (get_local $$cmp105$i) + (block + (set_local $$call107$i + (call $_sbrk + (get_local $$and104$i) + ) + ) + (set_local $$cmp108$i + (i32.eq + (get_local $$call107$i) + (i32.const -1) + ) + ) + (if + (get_local $$cmp108$i) + (block + (drop + (call $_sbrk + (get_local $$sub112$i) + ) + ) + (br $label$break$L279) + ) + (block + (set_local $$add110$i + (i32.add + (get_local $$and104$i) + (get_local $$ssize$2$ph$i) + ) + ) + (set_local $$ssize$5$i + (get_local $$add110$i) + ) + (br $do-once38) + ) + ) + ) + (set_local $$ssize$5$i + (get_local $$ssize$2$ph$i) + ) + ) + ) + (set_local $$ssize$5$i + (get_local $$ssize$2$ph$i) + ) + ) + ) + (set_local $$cmp118$i + (i32.eq + (get_local $$br$2$ph$i) + (i32.const -1) + ) + ) + (if + (i32.eqz + (get_local $$cmp118$i) + ) + (block + (set_local $$tbase$796$i + (get_local $$br$2$ph$i) + ) + (set_local $$tsize$795$i + (get_local $$ssize$5$i) + ) + (set_local $label + (i32.const 193) + ) + (br $label$break$L257) + ) + ) + ) + ) + ) + (set_local $$116 + (i32.load + (i32.const 620) + ) + ) + (set_local $$or$i$195 + (i32.or + (get_local $$116) + (i32.const 4) + ) + ) + (i32.store + (i32.const 620) + (get_local $$or$i$195) + ) + (set_local $label + (i32.const 190) + ) + ) + (set_local $label + (i32.const 190) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 190) + ) + (block + (set_local $$cmp127$i + (i32.lt_u + (get_local $$and11$i) + (i32.const 2147483647) + ) + ) + (if + (get_local $$cmp127$i) + (block + (set_local $$call131$i + (call $_sbrk + (get_local $$and11$i) + ) + ) + (set_local $$call132$i + (call $_sbrk + (i32.const 0) + ) + ) + (set_local $$cmp133$i$196 + (i32.ne + (get_local $$call131$i) + (i32.const -1) + ) + ) + (set_local $$cmp135$i + (i32.ne + (get_local $$call132$i) + (i32.const -1) + ) + ) + (set_local $$or$cond4$i + (i32.and + (get_local $$cmp133$i$196) + (get_local $$cmp135$i) + ) + ) + (set_local $$cmp137$i$197 + (i32.lt_u + (get_local $$call131$i) + (get_local $$call132$i) + ) + ) + (set_local $$or$cond7$i + (i32.and + (get_local $$cmp137$i$197) + (get_local $$or$cond4$i) + ) + ) + (if + (get_local $$or$cond7$i) + (block + (set_local $$sub$ptr$lhs$cast$i + (get_local $$call132$i) + ) + (set_local $$sub$ptr$rhs$cast$i + (get_local $$call131$i) + ) + (set_local $$sub$ptr$sub$i + (i32.sub + (get_local $$sub$ptr$lhs$cast$i) + (get_local $$sub$ptr$rhs$cast$i) + ) + ) + (set_local $$add140$i + (i32.add + (get_local $$nb$0) + (i32.const 40) + ) + ) + (set_local $$cmp141$not$i + (i32.gt_u + (get_local $$sub$ptr$sub$i) + (get_local $$add140$i) + ) + ) + (if + (get_local $$cmp141$not$i) + (block + (set_local $$tbase$796$i + (get_local $$call131$i) + ) + (set_local $$tsize$795$i + (get_local $$sub$ptr$sub$i) + ) + (set_local $label + (i32.const 193) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 193) + ) + (block + (set_local $$117 + (i32.load + (i32.const 608) + ) + ) + (set_local $$add150$i + (i32.add + (get_local $$117) + (get_local $$tsize$795$i) + ) + ) + (i32.store + (i32.const 608) + (get_local $$add150$i) + ) + (set_local $$118 + (i32.load + (i32.const 612) + ) + ) + (set_local $$cmp151$i + (i32.gt_u + (get_local $$add150$i) + (get_local $$118) + ) + ) + (if + (get_local $$cmp151$i) + (i32.store + (i32.const 612) + (get_local $$add150$i) + ) + ) + (set_local $$119 + (i32.load + (i32.const 200) + ) + ) + (set_local $$cmp157$i + (i32.eq + (get_local $$119) + (i32.const 0) + ) + ) + (block $do-once40 + (if + (get_local $$cmp157$i) + (block + (set_local $$120 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp159$i$199 + (i32.eq + (get_local $$120) + (i32.const 0) + ) + ) + (set_local $$cmp162$i$200 + (i32.lt_u + (get_local $$tbase$796$i) + (get_local $$120) + ) + ) + (set_local $$or$cond8$i + (i32.or + (get_local $$cmp159$i$199) + (get_local $$cmp162$i$200) + ) + ) + (if + (get_local $$or$cond8$i) + (i32.store + (i32.const 192) + (get_local $$tbase$796$i) + ) + ) + (i32.store + (i32.const 624) + (get_local $$tbase$796$i) + ) + (i32.store + (i32.const 628) + (get_local $$tsize$795$i) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (set_local $$121 + (i32.load + (i32.const 648) + ) + ) + (i32.store + (i32.const 212) + (get_local $$121) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (set_local $$i$01$i$i + (i32.const 0) + ) + (loop $while-in43 + (block $while-out42 + (set_local $$shl$i$i + (i32.shl + (get_local $$i$01$i$i) + (i32.const 1) + ) + ) + (set_local $$arrayidx$i$i + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl$i$i) + (i32.const 2) + ) + ) + ) + (set_local $$122 + (i32.add + (get_local $$arrayidx$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$122) + (get_local $$arrayidx$i$i) + ) + (set_local $$123 + (i32.add + (get_local $$arrayidx$i$i) + (i32.const 8) + ) + ) + (i32.store + (get_local $$123) + (get_local $$arrayidx$i$i) + ) + (set_local $$inc$i$i + (i32.add + (get_local $$i$01$i$i) + (i32.const 1) + ) + ) + (set_local $$exitcond$i$i + (i32.eq + (get_local $$inc$i$i) + (i32.const 32) + ) + ) + (if + (get_local $$exitcond$i$i) + (br $while-out42) + (set_local $$i$01$i$i + (get_local $$inc$i$i) + ) + ) + (br $while-in43) + ) + ) + (set_local $$sub172$i + (i32.add + (get_local $$tsize$795$i) + (i32.const -40) + ) + ) + (set_local $$add$ptr$i$11$i + (i32.add + (get_local $$tbase$796$i) + (i32.const 8) + ) + ) + (set_local $$124 + (get_local $$add$ptr$i$11$i) + ) + (set_local $$and$i$12$i + (i32.and + (get_local $$124) + (i32.const 7) + ) + ) + (set_local $$cmp$i$13$i + (i32.eq + (get_local $$and$i$12$i) + (i32.const 0) + ) + ) + (set_local $$125 + (i32.sub + (i32.const 0) + (get_local $$124) + ) + ) + (set_local $$and3$i$i + (i32.and + (get_local $$125) + (i32.const 7) + ) + ) + (set_local $$cond$i$i + (if (result i32) + (get_local $$cmp$i$13$i) + (i32.const 0) + (get_local $$and3$i$i) + ) + ) + (set_local $$add$ptr4$i$i + (i32.add + (get_local $$tbase$796$i) + (get_local $$cond$i$i) + ) + ) + (set_local $$sub5$i$i + (i32.sub + (get_local $$sub172$i) + (get_local $$cond$i$i) + ) + ) + (i32.store + (i32.const 200) + (get_local $$add$ptr4$i$i) + ) + (i32.store + (i32.const 188) + (get_local $$sub5$i$i) + ) + (set_local $$or$i$i + (i32.or + (get_local $$sub5$i$i) + (i32.const 1) + ) + ) + (set_local $$head$i$i + (i32.add + (get_local $$add$ptr4$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head$i$i) + (get_local $$or$i$i) + ) + (set_local $$add$ptr6$i$i + (i32.add + (get_local $$add$ptr4$i$i) + (get_local $$sub5$i$i) + ) + ) + (set_local $$head7$i$i + (i32.add + (get_local $$add$ptr6$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head7$i$i) + (i32.const 40) + ) + (set_local $$126 + (i32.load + (i32.const 664) + ) + ) + (i32.store + (i32.const 204) + (get_local $$126) + ) + ) + (block + (set_local $$sp$0108$i + (i32.const 624) + ) + (loop $while-in45 + (block $while-out44 + (set_local $$127 + (i32.load + (get_local $$sp$0108$i) + ) + ) + (set_local $$size188$i + (i32.add + (get_local $$sp$0108$i) + (i32.const 4) + ) + ) + (set_local $$128 + (i32.load + (get_local $$size188$i) + ) + ) + (set_local $$add$ptr189$i + (i32.add + (get_local $$127) + (get_local $$128) + ) + ) + (set_local $$cmp190$i + (i32.eq + (get_local $$tbase$796$i) + (get_local $$add$ptr189$i) + ) + ) + (if + (get_local $$cmp190$i) + (block + (set_local $$$lcssa + (get_local $$127) + ) + (set_local $$$lcssa290 + (get_local $$128) + ) + (set_local $$size188$i$lcssa + (get_local $$size188$i) + ) + (set_local $$sp$0108$i$lcssa + (get_local $$sp$0108$i) + ) + (set_local $label + (i32.const 203) + ) + (br $while-out44) + ) + ) + (set_local $$next$i + (i32.add + (get_local $$sp$0108$i) + (i32.const 8) + ) + ) + (set_local $$129 + (i32.load + (get_local $$next$i) + ) + ) + (set_local $$cmp186$i + (i32.eq + (get_local $$129) + (i32.const 0) + ) + ) + (if + (get_local $$cmp186$i) + (br $while-out44) + (set_local $$sp$0108$i + (get_local $$129) + ) + ) + (br $while-in45) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 203) + ) + (block + (set_local $$sflags193$i + (i32.add + (get_local $$sp$0108$i$lcssa) + (i32.const 12) + ) + ) + (set_local $$130 + (i32.load + (get_local $$sflags193$i) + ) + ) + (set_local $$and194$i$204 + (i32.and + (get_local $$130) + (i32.const 8) + ) + ) + (set_local $$tobool195$i + (i32.eq + (get_local $$and194$i$204) + (i32.const 0) + ) + ) + (if + (get_local $$tobool195$i) + (block + (set_local $$cmp203$i + (i32.ge_u + (get_local $$119) + (get_local $$$lcssa) + ) + ) + (set_local $$cmp209$i + (i32.lt_u + (get_local $$119) + (get_local $$tbase$796$i) + ) + ) + (set_local $$or$cond98$i + (i32.and + (get_local $$cmp209$i) + (get_local $$cmp203$i) + ) + ) + (if + (get_local $$or$cond98$i) + (block + (set_local $$add212$i + (i32.add + (get_local $$$lcssa290) + (get_local $$tsize$795$i) + ) + ) + (i32.store + (get_local $$size188$i$lcssa) + (get_local $$add212$i) + ) + (set_local $$131 + (i32.load + (i32.const 188) + ) + ) + (set_local $$add$ptr$i$21$i + (i32.add + (get_local $$119) + (i32.const 8) + ) + ) + (set_local $$132 + (get_local $$add$ptr$i$21$i) + ) + (set_local $$and$i$22$i + (i32.and + (get_local $$132) + (i32.const 7) + ) + ) + (set_local $$cmp$i$23$i + (i32.eq + (get_local $$and$i$22$i) + (i32.const 0) + ) + ) + (set_local $$133 + (i32.sub + (i32.const 0) + (get_local $$132) + ) + ) + (set_local $$and3$i$24$i + (i32.and + (get_local $$133) + (i32.const 7) + ) + ) + (set_local $$cond$i$25$i + (if (result i32) + (get_local $$cmp$i$23$i) + (i32.const 0) + (get_local $$and3$i$24$i) + ) + ) + (set_local $$add$ptr4$i$26$i + (i32.add + (get_local $$119) + (get_local $$cond$i$25$i) + ) + ) + (set_local $$add215$i + (i32.sub + (get_local $$tsize$795$i) + (get_local $$cond$i$25$i) + ) + ) + (set_local $$sub5$i$27$i + (i32.add + (get_local $$add215$i) + (get_local $$131) + ) + ) + (i32.store + (i32.const 200) + (get_local $$add$ptr4$i$26$i) + ) + (i32.store + (i32.const 188) + (get_local $$sub5$i$27$i) + ) + (set_local $$or$i$28$i + (i32.or + (get_local $$sub5$i$27$i) + (i32.const 1) + ) + ) + (set_local $$head$i$29$i + (i32.add + (get_local $$add$ptr4$i$26$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head$i$29$i) + (get_local $$or$i$28$i) + ) + (set_local $$add$ptr6$i$30$i + (i32.add + (get_local $$add$ptr4$i$26$i) + (get_local $$sub5$i$27$i) + ) + ) + (set_local $$head7$i$31$i + (i32.add + (get_local $$add$ptr6$i$30$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head7$i$31$i) + (i32.const 40) + ) + (set_local $$134 + (i32.load + (i32.const 664) + ) + ) + (i32.store + (i32.const 204) + (get_local $$134) + ) + (br $do-once40) + ) + ) + ) + ) + ) + ) + (set_local $$135 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp218$i + (i32.lt_u + (get_local $$tbase$796$i) + (get_local $$135) + ) + ) + (if + (get_local $$cmp218$i) + (block + (i32.store + (i32.const 192) + (get_local $$tbase$796$i) + ) + (set_local $$150 + (get_local $$tbase$796$i) + ) + ) + (set_local $$150 + (get_local $$135) + ) + ) + (set_local $$add$ptr227$i + (i32.add + (get_local $$tbase$796$i) + (get_local $$tsize$795$i) + ) + ) + (set_local $$sp$1107$i + (i32.const 624) + ) + (loop $while-in47 + (block $while-out46 + (set_local $$136 + (i32.load + (get_local $$sp$1107$i) + ) + ) + (set_local $$cmp228$i + (i32.eq + (get_local $$136) + (get_local $$add$ptr227$i) + ) + ) + (if + (get_local $$cmp228$i) + (block + (set_local $$base226$i$lcssa + (get_local $$sp$1107$i) + ) + (set_local $$sp$1107$i$lcssa + (get_local $$sp$1107$i) + ) + (set_local $label + (i32.const 211) + ) + (br $while-out46) + ) + ) + (set_local $$next231$i + (i32.add + (get_local $$sp$1107$i) + (i32.const 8) + ) + ) + (set_local $$137 + (i32.load + (get_local $$next231$i) + ) + ) + (set_local $$cmp224$i + (i32.eq + (get_local $$137) + (i32.const 0) + ) + ) + (if + (get_local $$cmp224$i) + (block + (set_local $$sp$0$i$i$i + (i32.const 624) + ) + (br $while-out46) + ) + (set_local $$sp$1107$i + (get_local $$137) + ) + ) + (br $while-in47) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 211) + ) + (block + (set_local $$sflags235$i + (i32.add + (get_local $$sp$1107$i$lcssa) + (i32.const 12) + ) + ) + (set_local $$138 + (i32.load + (get_local $$sflags235$i) + ) + ) + (set_local $$and236$i + (i32.and + (get_local $$138) + (i32.const 8) + ) + ) + (set_local $$tobool237$i + (i32.eq + (get_local $$and236$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool237$i) + (block + (i32.store + (get_local $$base226$i$lcssa) + (get_local $$tbase$796$i) + ) + (set_local $$size245$i + (i32.add + (get_local $$sp$1107$i$lcssa) + (i32.const 4) + ) + ) + (set_local $$139 + (i32.load + (get_local $$size245$i) + ) + ) + (set_local $$add246$i + (i32.add + (get_local $$139) + (get_local $$tsize$795$i) + ) + ) + (i32.store + (get_local $$size245$i) + (get_local $$add246$i) + ) + (set_local $$add$ptr$i$32$i + (i32.add + (get_local $$tbase$796$i) + (i32.const 8) + ) + ) + (set_local $$140 + (get_local $$add$ptr$i$32$i) + ) + (set_local $$and$i$33$i + (i32.and + (get_local $$140) + (i32.const 7) + ) + ) + (set_local $$cmp$i$34$i + (i32.eq + (get_local $$and$i$33$i) + (i32.const 0) + ) + ) + (set_local $$141 + (i32.sub + (i32.const 0) + (get_local $$140) + ) + ) + (set_local $$and3$i$35$i + (i32.and + (get_local $$141) + (i32.const 7) + ) + ) + (set_local $$cond$i$36$i + (if (result i32) + (get_local $$cmp$i$34$i) + (i32.const 0) + (get_local $$and3$i$35$i) + ) + ) + (set_local $$add$ptr4$i$37$i + (i32.add + (get_local $$tbase$796$i) + (get_local $$cond$i$36$i) + ) + ) + (set_local $$add$ptr5$i$i + (i32.add + (get_local $$add$ptr227$i) + (i32.const 8) + ) + ) + (set_local $$142 + (get_local $$add$ptr5$i$i) + ) + (set_local $$and6$i$38$i + (i32.and + (get_local $$142) + (i32.const 7) + ) + ) + (set_local $$cmp7$i$i + (i32.eq + (get_local $$and6$i$38$i) + (i32.const 0) + ) + ) + (set_local $$143 + (i32.sub + (i32.const 0) + (get_local $$142) + ) + ) + (set_local $$and13$i$i + (i32.and + (get_local $$143) + (i32.const 7) + ) + ) + (set_local $$cond15$i$i + (if (result i32) + (get_local $$cmp7$i$i) + (i32.const 0) + (get_local $$and13$i$i) + ) + ) + (set_local $$add$ptr16$i$i + (i32.add + (get_local $$add$ptr227$i) + (get_local $$cond15$i$i) + ) + ) + (set_local $$sub$ptr$lhs$cast$i$39$i + (get_local $$add$ptr16$i$i) + ) + (set_local $$sub$ptr$rhs$cast$i$40$i + (get_local $$add$ptr4$i$37$i) + ) + (set_local $$sub$ptr$sub$i$41$i + (i32.sub + (get_local $$sub$ptr$lhs$cast$i$39$i) + (get_local $$sub$ptr$rhs$cast$i$40$i) + ) + ) + (set_local $$add$ptr17$i$i + (i32.add + (get_local $$add$ptr4$i$37$i) + (get_local $$nb$0) + ) + ) + (set_local $$sub18$i$i + (i32.sub + (get_local $$sub$ptr$sub$i$41$i) + (get_local $$nb$0) + ) + ) + (set_local $$or19$i$i + (i32.or + (get_local $$nb$0) + (i32.const 3) + ) + ) + (set_local $$head$i$42$i + (i32.add + (get_local $$add$ptr4$i$37$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head$i$42$i) + (get_local $$or19$i$i) + ) + (set_local $$cmp20$i$i + (i32.eq + (get_local $$add$ptr16$i$i) + (get_local $$119) + ) + ) + (block $do-once48 + (if + (get_local $$cmp20$i$i) + (block + (set_local $$144 + (i32.load + (i32.const 188) + ) + ) + (set_local $$add$i$i + (i32.add + (get_local $$144) + (get_local $$sub18$i$i) + ) + ) + (i32.store + (i32.const 188) + (get_local $$add$i$i) + ) + (i32.store + (i32.const 200) + (get_local $$add$ptr17$i$i) + ) + (set_local $$or22$i$i + (i32.or + (get_local $$add$i$i) + (i32.const 1) + ) + ) + (set_local $$head23$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head23$i$i) + (get_local $$or22$i$i) + ) + ) + (block + (set_local $$145 + (i32.load + (i32.const 196) + ) + ) + (set_local $$cmp24$i$i + (i32.eq + (get_local $$add$ptr16$i$i) + (get_local $$145) + ) + ) + (if + (get_local $$cmp24$i$i) + (block + (set_local $$146 + (i32.load + (i32.const 184) + ) + ) + (set_local $$add26$i$i + (i32.add + (get_local $$146) + (get_local $$sub18$i$i) + ) + ) + (i32.store + (i32.const 184) + (get_local $$add26$i$i) + ) + (i32.store + (i32.const 196) + (get_local $$add$ptr17$i$i) + ) + (set_local $$or28$i$i + (i32.or + (get_local $$add26$i$i) + (i32.const 1) + ) + ) + (set_local $$head29$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head29$i$i) + (get_local $$or28$i$i) + ) + (set_local $$add$ptr30$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (get_local $$add26$i$i) + ) + ) + (i32.store + (get_local $$add$ptr30$i$i) + (get_local $$add26$i$i) + ) + (br $do-once48) + ) + ) + (set_local $$head32$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 4) + ) + ) + (set_local $$147 + (i32.load + (get_local $$head32$i$i) + ) + ) + (set_local $$and33$i$i + (i32.and + (get_local $$147) + (i32.const 3) + ) + ) + (set_local $$cmp34$i$i + (i32.eq + (get_local $$and33$i$i) + (i32.const 1) + ) + ) + (if + (get_local $$cmp34$i$i) + (block + (set_local $$and37$i$i + (i32.and + (get_local $$147) + (i32.const -8) + ) + ) + (set_local $$shr$i$45$i + (i32.shr_u + (get_local $$147) + (i32.const 3) + ) + ) + (set_local $$cmp38$i$i + (i32.lt_u + (get_local $$147) + (i32.const 256) + ) + ) + (block $label$break$L331 + (if + (get_local $$cmp38$i$i) + (block + (set_local $$fd$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 8) + ) + ) + (set_local $$148 + (i32.load + (get_local $$fd$i$i) + ) + ) + (set_local $$bk$i$46$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 12) + ) + ) + (set_local $$149 + (i32.load + (get_local $$bk$i$46$i) + ) + ) + (set_local $$shl$i$47$i + (i32.shl + (get_local $$shr$i$45$i) + (i32.const 1) + ) + ) + (set_local $$arrayidx$i$48$i + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl$i$47$i) + (i32.const 2) + ) + ) + ) + (set_local $$cmp41$i$i + (i32.eq + (get_local $$148) + (get_local $$arrayidx$i$48$i) + ) + ) + (block $do-once51 + (if + (i32.eqz + (get_local $$cmp41$i$i) + ) + (block + (set_local $$cmp42$i$i + (i32.lt_u + (get_local $$148) + (get_local $$150) + ) + ) + (if + (get_local $$cmp42$i$i) + (call $_abort) + ) + (set_local $$bk43$i$i + (i32.add + (get_local $$148) + (i32.const 12) + ) + ) + (set_local $$151 + (i32.load + (get_local $$bk43$i$i) + ) + ) + (set_local $$cmp44$i$i + (i32.eq + (get_local $$151) + (get_local $$add$ptr16$i$i) + ) + ) + (if + (get_local $$cmp44$i$i) + (br $do-once51) + ) + (call $_abort) + ) + ) + ) + (set_local $$cmp46$i$49$i + (i32.eq + (get_local $$149) + (get_local $$148) + ) + ) + (if + (get_local $$cmp46$i$49$i) + (block + (set_local $$shl48$i$i + (i32.shl + (i32.const 1) + (get_local $$shr$i$45$i) + ) + ) + (set_local $$neg$i$i + (i32.xor + (get_local $$shl48$i$i) + (i32.const -1) + ) + ) + (set_local $$152 + (i32.load + (i32.const 176) + ) + ) + (set_local $$and49$i$i + (i32.and + (get_local $$152) + (get_local $$neg$i$i) + ) + ) + (i32.store + (i32.const 176) + (get_local $$and49$i$i) + ) + (br $label$break$L331) + ) + ) + (set_local $$cmp54$i$i + (i32.eq + (get_local $$149) + (get_local $$arrayidx$i$48$i) + ) + ) + (block $do-once53 + (if + (get_local $$cmp54$i$i) + (block + (set_local $$$pre5$i$i + (i32.add + (get_local $$149) + (i32.const 8) + ) + ) + (set_local $$fd68$pre$phi$i$iZ2D + (get_local $$$pre5$i$i) + ) + ) + (block + (set_local $$cmp57$i$i + (i32.lt_u + (get_local $$149) + (get_local $$150) + ) + ) + (if + (get_local $$cmp57$i$i) + (call $_abort) + ) + (set_local $$fd59$i$i + (i32.add + (get_local $$149) + (i32.const 8) + ) + ) + (set_local $$153 + (i32.load + (get_local $$fd59$i$i) + ) + ) + (set_local $$cmp60$i$i + (i32.eq + (get_local $$153) + (get_local $$add$ptr16$i$i) + ) + ) + (if + (get_local $$cmp60$i$i) + (block + (set_local $$fd68$pre$phi$i$iZ2D + (get_local $$fd59$i$i) + ) + (br $do-once53) + ) + ) + (call $_abort) + ) + ) + ) + (set_local $$bk67$i$i + (i32.add + (get_local $$148) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk67$i$i) + (get_local $$149) + ) + (i32.store + (get_local $$fd68$pre$phi$i$iZ2D) + (get_local $$148) + ) + ) + (block + (set_local $$parent$i$51$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 24) + ) + ) + (set_local $$154 + (i32.load + (get_local $$parent$i$51$i) + ) + ) + (set_local $$bk74$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 12) + ) + ) + (set_local $$155 + (i32.load + (get_local $$bk74$i$i) + ) + ) + (set_local $$cmp75$i$i + (i32.eq + (get_local $$155) + (get_local $$add$ptr16$i$i) + ) + ) + (block $do-once55 + (if + (get_local $$cmp75$i$i) + (block + (set_local $$child$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 16) + ) + ) + (set_local $$arrayidx96$i$i + (i32.add + (get_local $$child$i$i) + (i32.const 4) + ) + ) + (set_local $$159 + (i32.load + (get_local $$arrayidx96$i$i) + ) + ) + (set_local $$cmp97$i$i + (i32.eq + (get_local $$159) + (i32.const 0) + ) + ) + (if + (get_local $$cmp97$i$i) + (block + (set_local $$160 + (i32.load + (get_local $$child$i$i) + ) + ) + (set_local $$cmp100$i$i + (i32.eq + (get_local $$160) + (i32.const 0) + ) + ) + (if + (get_local $$cmp100$i$i) + (block + (set_local $$R$3$i$i + (i32.const 0) + ) + (br $do-once55) + ) + (block + (set_local $$R$1$i$i + (get_local $$160) + ) + (set_local $$RP$1$i$i + (get_local $$child$i$i) + ) + ) + ) + ) + (block + (set_local $$R$1$i$i + (get_local $$159) + ) + (set_local $$RP$1$i$i + (get_local $$arrayidx96$i$i) + ) + ) + ) + (loop $while-in58 + (block $while-out57 + (set_local $$arrayidx103$i$i + (i32.add + (get_local $$R$1$i$i) + (i32.const 20) + ) + ) + (set_local $$161 + (i32.load + (get_local $$arrayidx103$i$i) + ) + ) + (set_local $$cmp104$i$i + (i32.eq + (get_local $$161) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp104$i$i) + ) + (block + (set_local $$R$1$i$i + (get_local $$161) + ) + (set_local $$RP$1$i$i + (get_local $$arrayidx103$i$i) + ) + (br $while-in58) + ) + ) + (set_local $$arrayidx107$i$i + (i32.add + (get_local $$R$1$i$i) + (i32.const 16) + ) + ) + (set_local $$162 + (i32.load + (get_local $$arrayidx107$i$i) + ) + ) + (set_local $$cmp108$i$i + (i32.eq + (get_local $$162) + (i32.const 0) + ) + ) + (if + (get_local $$cmp108$i$i) + (block + (set_local $$R$1$i$i$lcssa + (get_local $$R$1$i$i) + ) + (set_local $$RP$1$i$i$lcssa + (get_local $$RP$1$i$i) + ) + (br $while-out57) + ) + (block + (set_local $$R$1$i$i + (get_local $$162) + ) + (set_local $$RP$1$i$i + (get_local $$arrayidx107$i$i) + ) + ) + ) + (br $while-in58) + ) + ) + (set_local $$cmp112$i$i + (i32.lt_u + (get_local $$RP$1$i$i$lcssa) + (get_local $$150) + ) + ) + (if + (get_local $$cmp112$i$i) + (call $_abort) + (block + (i32.store + (get_local $$RP$1$i$i$lcssa) + (i32.const 0) + ) + (set_local $$R$3$i$i + (get_local $$R$1$i$i$lcssa) + ) + (br $do-once55) + ) + ) + ) + (block + (set_local $$fd78$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 8) + ) + ) + (set_local $$156 + (i32.load + (get_local $$fd78$i$i) + ) + ) + (set_local $$cmp81$i$i + (i32.lt_u + (get_local $$156) + (get_local $$150) + ) + ) + (if + (get_local $$cmp81$i$i) + (call $_abort) + ) + (set_local $$bk82$i$i + (i32.add + (get_local $$156) + (i32.const 12) + ) + ) + (set_local $$157 + (i32.load + (get_local $$bk82$i$i) + ) + ) + (set_local $$cmp83$i$i + (i32.eq + (get_local $$157) + (get_local $$add$ptr16$i$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp83$i$i) + ) + (call $_abort) + ) + (set_local $$fd85$i$i + (i32.add + (get_local $$155) + (i32.const 8) + ) + ) + (set_local $$158 + (i32.load + (get_local $$fd85$i$i) + ) + ) + (set_local $$cmp86$i$i + (i32.eq + (get_local $$158) + (get_local $$add$ptr16$i$i) + ) + ) + (if + (get_local $$cmp86$i$i) + (block + (i32.store + (get_local $$bk82$i$i) + (get_local $$155) + ) + (i32.store + (get_local $$fd85$i$i) + (get_local $$156) + ) + (set_local $$R$3$i$i + (get_local $$155) + ) + (br $do-once55) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$cmp120$i$53$i + (i32.eq + (get_local $$154) + (i32.const 0) + ) + ) + (if + (get_local $$cmp120$i$53$i) + (br $label$break$L331) + ) + (set_local $$index$i$54$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 28) + ) + ) + (set_local $$163 + (i32.load + (get_local $$index$i$54$i) + ) + ) + (set_local $$arrayidx123$i$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$163) + (i32.const 2) + ) + ) + ) + (set_local $$164 + (i32.load + (get_local $$arrayidx123$i$i) + ) + ) + (set_local $$cmp124$i$i + (i32.eq + (get_local $$add$ptr16$i$i) + (get_local $$164) + ) + ) + (block $do-once59 + (if + (get_local $$cmp124$i$i) + (block + (i32.store + (get_local $$arrayidx123$i$i) + (get_local $$R$3$i$i) + ) + (set_local $$cond2$i$i + (i32.eq + (get_local $$R$3$i$i) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cond2$i$i) + ) + (br $do-once59) + ) + (set_local $$shl131$i$i + (i32.shl + (i32.const 1) + (get_local $$163) + ) + ) + (set_local $$neg132$i$i + (i32.xor + (get_local $$shl131$i$i) + (i32.const -1) + ) + ) + (set_local $$165 + (i32.load + (i32.const 180) + ) + ) + (set_local $$and133$i$i + (i32.and + (get_local $$165) + (get_local $$neg132$i$i) + ) + ) + (i32.store + (i32.const 180) + (get_local $$and133$i$i) + ) + (br $label$break$L331) + ) + (block + (set_local $$166 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp137$i$i + (i32.lt_u + (get_local $$154) + (get_local $$166) + ) + ) + (if + (get_local $$cmp137$i$i) + (call $_abort) + ) + (set_local $$arrayidx143$i$i + (i32.add + (get_local $$154) + (i32.const 16) + ) + ) + (set_local $$167 + (i32.load + (get_local $$arrayidx143$i$i) + ) + ) + (set_local $$cmp144$i$i + (i32.eq + (get_local $$167) + (get_local $$add$ptr16$i$i) + ) + ) + (if + (get_local $$cmp144$i$i) + (i32.store + (get_local $$arrayidx143$i$i) + (get_local $$R$3$i$i) + ) + (block + (set_local $$arrayidx151$i$i + (i32.add + (get_local $$154) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx151$i$i) + (get_local $$R$3$i$i) + ) + ) + ) + (set_local $$cmp156$i$i + (i32.eq + (get_local $$R$3$i$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp156$i$i) + (br $label$break$L331) + ) + ) + ) + ) + (set_local $$168 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp160$i$i + (i32.lt_u + (get_local $$R$3$i$i) + (get_local $$168) + ) + ) + (if + (get_local $$cmp160$i$i) + (call $_abort) + ) + (set_local $$parent165$i$i + (i32.add + (get_local $$R$3$i$i) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent165$i$i) + (get_local $$154) + ) + (set_local $$child166$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 16) + ) + ) + (set_local $$169 + (i32.load + (get_local $$child166$i$i) + ) + ) + (set_local $$cmp168$i$i + (i32.eq + (get_local $$169) + (i32.const 0) + ) + ) + (block $do-once61 + (if + (i32.eqz + (get_local $$cmp168$i$i) + ) + (block + (set_local $$cmp172$i$i + (i32.lt_u + (get_local $$169) + (get_local $$168) + ) + ) + (if + (get_local $$cmp172$i$i) + (call $_abort) + (block + (set_local $$arrayidx178$i$i + (i32.add + (get_local $$R$3$i$i) + (i32.const 16) + ) + ) + (i32.store + (get_local $$arrayidx178$i$i) + (get_local $$169) + ) + (set_local $$parent179$i$i + (i32.add + (get_local $$169) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent179$i$i) + (get_local $$R$3$i$i) + ) + (br $do-once61) + ) + ) + ) + ) + ) + (set_local $$arrayidx184$i$i + (i32.add + (get_local $$child166$i$i) + (i32.const 4) + ) + ) + (set_local $$170 + (i32.load + (get_local $$arrayidx184$i$i) + ) + ) + (set_local $$cmp185$i$i + (i32.eq + (get_local $$170) + (i32.const 0) + ) + ) + (if + (get_local $$cmp185$i$i) + (br $label$break$L331) + ) + (set_local $$171 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp189$i$i + (i32.lt_u + (get_local $$170) + (get_local $$171) + ) + ) + (if + (get_local $$cmp189$i$i) + (call $_abort) + (block + (set_local $$arrayidx195$i$i + (i32.add + (get_local $$R$3$i$i) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx195$i$i) + (get_local $$170) + ) + (set_local $$parent196$i$i + (i32.add + (get_local $$170) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent196$i$i) + (get_local $$R$3$i$i) + ) + (br $label$break$L331) + ) + ) + ) + ) + ) + (set_local $$add$ptr205$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (get_local $$and37$i$i) + ) + ) + (set_local $$add206$i$i + (i32.add + (get_local $$and37$i$i) + (get_local $$sub18$i$i) + ) + ) + (set_local $$oldfirst$0$i$i + (get_local $$add$ptr205$i$i) + ) + (set_local $$qsize$0$i$i + (get_local $$add206$i$i) + ) + ) + (block + (set_local $$oldfirst$0$i$i + (get_local $$add$ptr16$i$i) + ) + (set_local $$qsize$0$i$i + (get_local $$sub18$i$i) + ) + ) + ) + (set_local $$head208$i$i + (i32.add + (get_local $$oldfirst$0$i$i) + (i32.const 4) + ) + ) + (set_local $$172 + (i32.load + (get_local $$head208$i$i) + ) + ) + (set_local $$and209$i$i + (i32.and + (get_local $$172) + (i32.const -2) + ) + ) + (i32.store + (get_local $$head208$i$i) + (get_local $$and209$i$i) + ) + (set_local $$or210$i$i + (i32.or + (get_local $$qsize$0$i$i) + (i32.const 1) + ) + ) + (set_local $$head211$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head211$i$i) + (get_local $$or210$i$i) + ) + (set_local $$add$ptr212$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (get_local $$qsize$0$i$i) + ) + ) + (i32.store + (get_local $$add$ptr212$i$i) + (get_local $$qsize$0$i$i) + ) + (set_local $$shr214$i$i + (i32.shr_u + (get_local $$qsize$0$i$i) + (i32.const 3) + ) + ) + (set_local $$cmp215$i$i + (i32.lt_u + (get_local $$qsize$0$i$i) + (i32.const 256) + ) + ) + (if + (get_local $$cmp215$i$i) + (block + (set_local $$shl221$i$i + (i32.shl + (get_local $$shr214$i$i) + (i32.const 1) + ) + ) + (set_local $$arrayidx223$i$i + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl221$i$i) + (i32.const 2) + ) + ) + ) + (set_local $$173 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shl226$i$i + (i32.shl + (i32.const 1) + (get_local $$shr214$i$i) + ) + ) + (set_local $$and227$i$i + (i32.and + (get_local $$173) + (get_local $$shl226$i$i) + ) + ) + (set_local $$tobool228$i$i + (i32.eq + (get_local $$and227$i$i) + (i32.const 0) + ) + ) + (block $do-once63 + (if + (get_local $$tobool228$i$i) + (block + (set_local $$or232$i$i + (i32.or + (get_local $$173) + (get_local $$shl226$i$i) + ) + ) + (i32.store + (i32.const 176) + (get_local $$or232$i$i) + ) + (set_local $$$pre$i$56$i + (i32.add + (get_local $$arrayidx223$i$i) + (i32.const 8) + ) + ) + (set_local $$$pre$phi$i$57$iZ2D + (get_local $$$pre$i$56$i) + ) + (set_local $$F224$0$i$i + (get_local $$arrayidx223$i$i) + ) + ) + (block + (set_local $$174 + (i32.add + (get_local $$arrayidx223$i$i) + (i32.const 8) + ) + ) + (set_local $$175 + (i32.load + (get_local $$174) + ) + ) + (set_local $$176 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp236$i$i + (i32.lt_u + (get_local $$175) + (get_local $$176) + ) + ) + (if + (i32.eqz + (get_local $$cmp236$i$i) + ) + (block + (set_local $$$pre$phi$i$57$iZ2D + (get_local $$174) + ) + (set_local $$F224$0$i$i + (get_local $$175) + ) + (br $do-once63) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store + (get_local $$$pre$phi$i$57$iZ2D) + (get_local $$add$ptr17$i$i) + ) + (set_local $$bk246$i$i + (i32.add + (get_local $$F224$0$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk246$i$i) + (get_local $$add$ptr17$i$i) + ) + (set_local $$fd247$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd247$i$i) + (get_local $$F224$0$i$i) + ) + (set_local $$bk248$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk248$i$i) + (get_local $$arrayidx223$i$i) + ) + (br $do-once48) + ) + ) + (set_local $$shr253$i$i + (i32.shr_u + (get_local $$qsize$0$i$i) + (i32.const 8) + ) + ) + (set_local $$cmp254$i$i + (i32.eq + (get_local $$shr253$i$i) + (i32.const 0) + ) + ) + (block $do-once65 + (if + (get_local $$cmp254$i$i) + (set_local $$I252$0$i$i + (i32.const 0) + ) + (block + (set_local $$cmp258$i$i + (i32.gt_u + (get_local $$qsize$0$i$i) + (i32.const 16777215) + ) + ) + (if + (get_local $$cmp258$i$i) + (block + (set_local $$I252$0$i$i + (i32.const 31) + ) + (br $do-once65) + ) + ) + (set_local $$sub262$i$i + (i32.add + (get_local $$shr253$i$i) + (i32.const 1048320) + ) + ) + (set_local $$shr263$i$i + (i32.shr_u + (get_local $$sub262$i$i) + (i32.const 16) + ) + ) + (set_local $$and264$i$i + (i32.and + (get_local $$shr263$i$i) + (i32.const 8) + ) + ) + (set_local $$shl265$i$i + (i32.shl + (get_local $$shr253$i$i) + (get_local $$and264$i$i) + ) + ) + (set_local $$sub266$i$i + (i32.add + (get_local $$shl265$i$i) + (i32.const 520192) + ) + ) + (set_local $$shr267$i$i + (i32.shr_u + (get_local $$sub266$i$i) + (i32.const 16) + ) + ) + (set_local $$and268$i$i + (i32.and + (get_local $$shr267$i$i) + (i32.const 4) + ) + ) + (set_local $$add269$i$i + (i32.or + (get_local $$and268$i$i) + (get_local $$and264$i$i) + ) + ) + (set_local $$shl270$i$i + (i32.shl + (get_local $$shl265$i$i) + (get_local $$and268$i$i) + ) + ) + (set_local $$sub271$i$i + (i32.add + (get_local $$shl270$i$i) + (i32.const 245760) + ) + ) + (set_local $$shr272$i$i + (i32.shr_u + (get_local $$sub271$i$i) + (i32.const 16) + ) + ) + (set_local $$and273$i$i + (i32.and + (get_local $$shr272$i$i) + (i32.const 2) + ) + ) + (set_local $$add274$i$i + (i32.or + (get_local $$add269$i$i) + (get_local $$and273$i$i) + ) + ) + (set_local $$sub275$i$i + (i32.sub + (i32.const 14) + (get_local $$add274$i$i) + ) + ) + (set_local $$shl276$i$i + (i32.shl + (get_local $$shl270$i$i) + (get_local $$and273$i$i) + ) + ) + (set_local $$shr277$i$i + (i32.shr_u + (get_local $$shl276$i$i) + (i32.const 15) + ) + ) + (set_local $$add278$i$i + (i32.add + (get_local $$sub275$i$i) + (get_local $$shr277$i$i) + ) + ) + (set_local $$shl279$i$i + (i32.shl + (get_local $$add278$i$i) + (i32.const 1) + ) + ) + (set_local $$add280$i$i + (i32.add + (get_local $$add278$i$i) + (i32.const 7) + ) + ) + (set_local $$shr281$i$i + (i32.shr_u + (get_local $$qsize$0$i$i) + (get_local $$add280$i$i) + ) + ) + (set_local $$and282$i$i + (i32.and + (get_local $$shr281$i$i) + (i32.const 1) + ) + ) + (set_local $$add283$i$i + (i32.or + (get_local $$and282$i$i) + (get_local $$shl279$i$i) + ) + ) + (set_local $$I252$0$i$i + (get_local $$add283$i$i) + ) + ) + ) + ) + (set_local $$arrayidx287$i$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$I252$0$i$i) + (i32.const 2) + ) + ) + ) + (set_local $$index288$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 28) + ) + ) + (i32.store + (get_local $$index288$i$i) + (get_local $$I252$0$i$i) + ) + (set_local $$child289$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 16) + ) + ) + (set_local $$arrayidx290$i$i + (i32.add + (get_local $$child289$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$arrayidx290$i$i) + (i32.const 0) + ) + (i32.store + (get_local $$child289$i$i) + (i32.const 0) + ) + (set_local $$177 + (i32.load + (i32.const 180) + ) + ) + (set_local $$shl294$i$i + (i32.shl + (i32.const 1) + (get_local $$I252$0$i$i) + ) + ) + (set_local $$and295$i$i + (i32.and + (get_local $$177) + (get_local $$shl294$i$i) + ) + ) + (set_local $$tobool296$i$i + (i32.eq + (get_local $$and295$i$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool296$i$i) + (block + (set_local $$or300$i$i + (i32.or + (get_local $$177) + (get_local $$shl294$i$i) + ) + ) + (i32.store + (i32.const 180) + (get_local $$or300$i$i) + ) + (i32.store + (get_local $$arrayidx287$i$i) + (get_local $$add$ptr17$i$i) + ) + (set_local $$parent301$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent301$i$i) + (get_local $$arrayidx287$i$i) + ) + (set_local $$bk302$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk302$i$i) + (get_local $$add$ptr17$i$i) + ) + (set_local $$fd303$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd303$i$i) + (get_local $$add$ptr17$i$i) + ) + (br $do-once48) + ) + ) + (set_local $$178 + (i32.load + (get_local $$arrayidx287$i$i) + ) + ) + (set_local $$cmp306$i$i + (i32.eq + (get_local $$I252$0$i$i) + (i32.const 31) + ) + ) + (set_local $$shr310$i$i + (i32.shr_u + (get_local $$I252$0$i$i) + (i32.const 1) + ) + ) + (set_local $$sub313$i$i + (i32.sub + (i32.const 25) + (get_local $$shr310$i$i) + ) + ) + (set_local $$cond315$i$i + (if (result i32) + (get_local $$cmp306$i$i) + (i32.const 0) + (get_local $$sub313$i$i) + ) + ) + (set_local $$shl316$i$i + (i32.shl + (get_local $$qsize$0$i$i) + (get_local $$cond315$i$i) + ) + ) + (set_local $$K305$0$i$i + (get_local $$shl316$i$i) + ) + (set_local $$T$0$i$58$i + (get_local $$178) + ) + (loop $while-in68 + (block $while-out67 + (set_local $$head317$i$i + (i32.add + (get_local $$T$0$i$58$i) + (i32.const 4) + ) + ) + (set_local $$179 + (i32.load + (get_local $$head317$i$i) + ) + ) + (set_local $$and318$i$i + (i32.and + (get_local $$179) + (i32.const -8) + ) + ) + (set_local $$cmp319$i$i + (i32.eq + (get_local $$and318$i$i) + (get_local $$qsize$0$i$i) + ) + ) + (if + (get_local $$cmp319$i$i) + (block + (set_local $$T$0$i$58$i$lcssa + (get_local $$T$0$i$58$i) + ) + (set_local $label + (i32.const 281) + ) + (br $while-out67) + ) + ) + (set_local $$shr322$i$i + (i32.shr_u + (get_local $$K305$0$i$i) + (i32.const 31) + ) + ) + (set_local $$arrayidx325$i$i + (i32.add + (i32.add + (get_local $$T$0$i$58$i) + (i32.const 16) + ) + (i32.shl + (get_local $$shr322$i$i) + (i32.const 2) + ) + ) + ) + (set_local $$shl326$i$i + (i32.shl + (get_local $$K305$0$i$i) + (i32.const 1) + ) + ) + (set_local $$180 + (i32.load + (get_local $$arrayidx325$i$i) + ) + ) + (set_local $$cmp327$i$i + (i32.eq + (get_local $$180) + (i32.const 0) + ) + ) + (if + (get_local $$cmp327$i$i) + (block + (set_local $$T$0$i$58$i$lcssa283 + (get_local $$T$0$i$58$i) + ) + (set_local $$arrayidx325$i$i$lcssa + (get_local $$arrayidx325$i$i) + ) + (set_local $label + (i32.const 278) + ) + (br $while-out67) + ) + (block + (set_local $$K305$0$i$i + (get_local $$shl326$i$i) + ) + (set_local $$T$0$i$58$i + (get_local $$180) + ) + ) + ) + (br $while-in68) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 278) + ) + (block + (set_local $$181 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp332$i$i + (i32.lt_u + (get_local $$arrayidx325$i$i$lcssa) + (get_local $$181) + ) + ) + (if + (get_local $$cmp332$i$i) + (call $_abort) + (block + (i32.store + (get_local $$arrayidx325$i$i$lcssa) + (get_local $$add$ptr17$i$i) + ) + (set_local $$parent337$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent337$i$i) + (get_local $$T$0$i$58$i$lcssa283) + ) + (set_local $$bk338$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk338$i$i) + (get_local $$add$ptr17$i$i) + ) + (set_local $$fd339$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd339$i$i) + (get_local $$add$ptr17$i$i) + ) + (br $do-once48) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 281) + ) + (block + (set_local $$fd344$i$i + (i32.add + (get_local $$T$0$i$58$i$lcssa) + (i32.const 8) + ) + ) + (set_local $$182 + (i32.load + (get_local $$fd344$i$i) + ) + ) + (set_local $$183 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp350$i$i + (i32.ge_u + (get_local $$182) + (get_local $$183) + ) + ) + (set_local $$not$cmp346$i$i + (i32.ge_u + (get_local $$T$0$i$58$i$lcssa) + (get_local $$183) + ) + ) + (set_local $$184 + (i32.and + (get_local $$cmp350$i$i) + (get_local $$not$cmp346$i$i) + ) + ) + (if + (get_local $$184) + (block + (set_local $$bk357$i$i + (i32.add + (get_local $$182) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk357$i$i) + (get_local $$add$ptr17$i$i) + ) + (i32.store + (get_local $$fd344$i$i) + (get_local $$add$ptr17$i$i) + ) + (set_local $$fd359$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd359$i$i) + (get_local $$182) + ) + (set_local $$bk360$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk360$i$i) + (get_local $$T$0$i$58$i$lcssa) + ) + (set_local $$parent361$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent361$i$i) + (i32.const 0) + ) + (br $do-once48) + ) + (call $_abort) + ) + ) + ) + ) + ) + ) + ) + (set_local $$add$ptr369$i$i + (i32.add + (get_local $$add$ptr4$i$37$i) + (i32.const 8) + ) + ) + (set_local $$retval$0 + (get_local $$add$ptr369$i$i) + ) + (return + (get_local $$retval$0) + ) + ) + (set_local $$sp$0$i$i$i + (i32.const 624) + ) + ) + ) + ) + (loop $while-in70 + (block $while-out69 + (set_local $$185 + (i32.load + (get_local $$sp$0$i$i$i) + ) + ) + (set_local $$cmp$i$i$i + (i32.gt_u + (get_local $$185) + (get_local $$119) + ) + ) + (if + (i32.eqz + (get_local $$cmp$i$i$i) + ) + (block + (set_local $$size$i$i$i + (i32.add + (get_local $$sp$0$i$i$i) + (i32.const 4) + ) + ) + (set_local $$186 + (i32.load + (get_local $$size$i$i$i) + ) + ) + (set_local $$add$ptr$i$i$i + (i32.add + (get_local $$185) + (get_local $$186) + ) + ) + (set_local $$cmp2$i$i$i + (i32.gt_u + (get_local $$add$ptr$i$i$i) + (get_local $$119) + ) + ) + (if + (get_local $$cmp2$i$i$i) + (block + (set_local $$add$ptr$i$i$i$lcssa + (get_local $$add$ptr$i$i$i) + ) + (br $while-out69) + ) + ) + ) + ) + (set_local $$next$i$i$i + (i32.add + (get_local $$sp$0$i$i$i) + (i32.const 8) + ) + ) + (set_local $$187 + (i32.load + (get_local $$next$i$i$i) + ) + ) + (set_local $$sp$0$i$i$i + (get_local $$187) + ) + (br $while-in70) + ) + ) + (set_local $$add$ptr2$i$i + (i32.add + (get_local $$add$ptr$i$i$i$lcssa) + (i32.const -47) + ) + ) + (set_local $$add$ptr3$i$i + (i32.add + (get_local $$add$ptr2$i$i) + (i32.const 8) + ) + ) + (set_local $$188 + (get_local $$add$ptr3$i$i) + ) + (set_local $$and$i$14$i + (i32.and + (get_local $$188) + (i32.const 7) + ) + ) + (set_local $$cmp$i$15$i + (i32.eq + (get_local $$and$i$14$i) + (i32.const 0) + ) + ) + (set_local $$189 + (i32.sub + (i32.const 0) + (get_local $$188) + ) + ) + (set_local $$and6$i$i + (i32.and + (get_local $$189) + (i32.const 7) + ) + ) + (set_local $$cond$i$16$i + (if (result i32) + (get_local $$cmp$i$15$i) + (i32.const 0) + (get_local $$and6$i$i) + ) + ) + (set_local $$add$ptr7$i$i + (i32.add + (get_local $$add$ptr2$i$i) + (get_local $$cond$i$16$i) + ) + ) + (set_local $$add$ptr8$i122$i + (i32.add + (get_local $$119) + (i32.const 16) + ) + ) + (set_local $$cmp9$i$i + (i32.lt_u + (get_local $$add$ptr7$i$i) + (get_local $$add$ptr8$i122$i) + ) + ) + (set_local $$cond13$i$i + (if (result i32) + (get_local $$cmp9$i$i) + (get_local $$119) + (get_local $$add$ptr7$i$i) + ) + ) + (set_local $$add$ptr14$i$i + (i32.add + (get_local $$cond13$i$i) + (i32.const 8) + ) + ) + (set_local $$add$ptr15$i$i + (i32.add + (get_local $$cond13$i$i) + (i32.const 24) + ) + ) + (set_local $$sub16$i$i + (i32.add + (get_local $$tsize$795$i) + (i32.const -40) + ) + ) + (set_local $$add$ptr$i$1$i$i + (i32.add + (get_local $$tbase$796$i) + (i32.const 8) + ) + ) + (set_local $$190 + (get_local $$add$ptr$i$1$i$i) + ) + (set_local $$and$i$i$i + (i32.and + (get_local $$190) + (i32.const 7) + ) + ) + (set_local $$cmp$i$2$i$i + (i32.eq + (get_local $$and$i$i$i) + (i32.const 0) + ) + ) + (set_local $$191 + (i32.sub + (i32.const 0) + (get_local $$190) + ) + ) + (set_local $$and3$i$i$i + (i32.and + (get_local $$191) + (i32.const 7) + ) + ) + (set_local $$cond$i$i$i + (if (result i32) + (get_local $$cmp$i$2$i$i) + (i32.const 0) + (get_local $$and3$i$i$i) + ) + ) + (set_local $$add$ptr4$i$i$i + (i32.add + (get_local $$tbase$796$i) + (get_local $$cond$i$i$i) + ) + ) + (set_local $$sub5$i$i$i + (i32.sub + (get_local $$sub16$i$i) + (get_local $$cond$i$i$i) + ) + ) + (i32.store + (i32.const 200) + (get_local $$add$ptr4$i$i$i) + ) + (i32.store + (i32.const 188) + (get_local $$sub5$i$i$i) + ) + (set_local $$or$i$i$i + (i32.or + (get_local $$sub5$i$i$i) + (i32.const 1) + ) + ) + (set_local $$head$i$i$i + (i32.add + (get_local $$add$ptr4$i$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head$i$i$i) + (get_local $$or$i$i$i) + ) + (set_local $$add$ptr6$i$i$i + (i32.add + (get_local $$add$ptr4$i$i$i) + (get_local $$sub5$i$i$i) + ) + ) + (set_local $$head7$i$i$i + (i32.add + (get_local $$add$ptr6$i$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head7$i$i$i) + (i32.const 40) + ) + (set_local $$192 + (i32.load + (i32.const 664) + ) + ) + (i32.store + (i32.const 204) + (get_local $$192) + ) + (set_local $$head$i$17$i + (i32.add + (get_local $$cond13$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head$i$17$i) + (i32.const 27) + ) + (i32.store + (get_local $$add$ptr14$i$i) + (i32.load + (i32.const 624) + ) + ) + (i32.store + (i32.add + (get_local $$add$ptr14$i$i) + (i32.const 4) + ) + (i32.load + (i32.add + (i32.const 624) + (i32.const 4) + ) + ) + ) + (i32.store + (i32.add + (get_local $$add$ptr14$i$i) + (i32.const 8) + ) + (i32.load + (i32.add + (i32.const 624) + (i32.const 8) + ) + ) + ) + (i32.store + (i32.add + (get_local $$add$ptr14$i$i) + (i32.const 12) + ) + (i32.load + (i32.add + (i32.const 624) + (i32.const 12) + ) + ) + ) + (i32.store + (i32.const 624) + (get_local $$tbase$796$i) + ) + (i32.store + (i32.const 628) + (get_local $$tsize$795$i) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 632) + (get_local $$add$ptr14$i$i) + ) + (set_local $$p$0$i$i + (get_local $$add$ptr15$i$i) + ) + (loop $while-in72 + (block $while-out71 + (set_local $$add$ptr24$i$i + (i32.add + (get_local $$p$0$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$add$ptr24$i$i) + (i32.const 7) + ) + (set_local $$193 + (i32.add + (get_local $$add$ptr24$i$i) + (i32.const 4) + ) + ) + (set_local $$cmp27$i$i + (i32.lt_u + (get_local $$193) + (get_local $$add$ptr$i$i$i$lcssa) + ) + ) + (if + (get_local $$cmp27$i$i) + (set_local $$p$0$i$i + (get_local $$add$ptr24$i$i) + ) + (br $while-out71) + ) + (br $while-in72) + ) + ) + (set_local $$cmp28$i$i + (i32.eq + (get_local $$cond13$i$i) + (get_local $$119) + ) + ) + (if + (i32.eqz + (get_local $$cmp28$i$i) + ) + (block + (set_local $$sub$ptr$lhs$cast$i$i + (get_local $$cond13$i$i) + ) + (set_local $$sub$ptr$rhs$cast$i$i + (get_local $$119) + ) + (set_local $$sub$ptr$sub$i$i + (i32.sub + (get_local $$sub$ptr$lhs$cast$i$i) + (get_local $$sub$ptr$rhs$cast$i$i) + ) + ) + (set_local $$194 + (i32.load + (get_local $$head$i$17$i) + ) + ) + (set_local $$and32$i$i + (i32.and + (get_local $$194) + (i32.const -2) + ) + ) + (i32.store + (get_local $$head$i$17$i) + (get_local $$and32$i$i) + ) + (set_local $$or33$i$i + (i32.or + (get_local $$sub$ptr$sub$i$i) + (i32.const 1) + ) + ) + (set_local $$head34$i$i + (i32.add + (get_local $$119) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head34$i$i) + (get_local $$or33$i$i) + ) + (i32.store + (get_local $$cond13$i$i) + (get_local $$sub$ptr$sub$i$i) + ) + (set_local $$shr$i$i + (i32.shr_u + (get_local $$sub$ptr$sub$i$i) + (i32.const 3) + ) + ) + (set_local $$cmp36$i$i + (i32.lt_u + (get_local $$sub$ptr$sub$i$i) + (i32.const 256) + ) + ) + (if + (get_local $$cmp36$i$i) + (block + (set_local $$shl$i$19$i + (i32.shl + (get_local $$shr$i$i) + (i32.const 1) + ) + ) + (set_local $$arrayidx$i$20$i + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl$i$19$i) + (i32.const 2) + ) + ) + ) + (set_local $$195 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shl39$i$i + (i32.shl + (i32.const 1) + (get_local $$shr$i$i) + ) + ) + (set_local $$and40$i$i + (i32.and + (get_local $$195) + (get_local $$shl39$i$i) + ) + ) + (set_local $$tobool$i$i + (i32.eq + (get_local $$and40$i$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$i) + (block + (set_local $$or44$i$i + (i32.or + (get_local $$195) + (get_local $$shl39$i$i) + ) + ) + (i32.store + (i32.const 176) + (get_local $$or44$i$i) + ) + (set_local $$$pre$i$i + (i32.add + (get_local $$arrayidx$i$20$i) + (i32.const 8) + ) + ) + (set_local $$$pre$phi$i$iZ2D + (get_local $$$pre$i$i) + ) + (set_local $$F$0$i$i + (get_local $$arrayidx$i$20$i) + ) + ) + (block + (set_local $$196 + (i32.add + (get_local $$arrayidx$i$20$i) + (i32.const 8) + ) + ) + (set_local $$197 + (i32.load + (get_local $$196) + ) + ) + (set_local $$198 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp46$i$i + (i32.lt_u + (get_local $$197) + (get_local $$198) + ) + ) + (if + (get_local $$cmp46$i$i) + (call $_abort) + (block + (set_local $$$pre$phi$i$iZ2D + (get_local $$196) + ) + (set_local $$F$0$i$i + (get_local $$197) + ) + ) + ) + ) + ) + (i32.store + (get_local $$$pre$phi$i$iZ2D) + (get_local $$119) + ) + (set_local $$bk$i$i + (i32.add + (get_local $$F$0$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk$i$i) + (get_local $$119) + ) + (set_local $$fd54$i$i + (i32.add + (get_local $$119) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd54$i$i) + (get_local $$F$0$i$i) + ) + (set_local $$bk55$i$i + (i32.add + (get_local $$119) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk55$i$i) + (get_local $$arrayidx$i$20$i) + ) + (br $do-once40) + ) + ) + (set_local $$shr58$i$i + (i32.shr_u + (get_local $$sub$ptr$sub$i$i) + (i32.const 8) + ) + ) + (set_local $$cmp59$i$i + (i32.eq + (get_local $$shr58$i$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp59$i$i) + (set_local $$I57$0$i$i + (i32.const 0) + ) + (block + (set_local $$cmp63$i$i + (i32.gt_u + (get_local $$sub$ptr$sub$i$i) + (i32.const 16777215) + ) + ) + (if + (get_local $$cmp63$i$i) + (set_local $$I57$0$i$i + (i32.const 31) + ) + (block + (set_local $$sub67$i$i + (i32.add + (get_local $$shr58$i$i) + (i32.const 1048320) + ) + ) + (set_local $$shr68$i$i + (i32.shr_u + (get_local $$sub67$i$i) + (i32.const 16) + ) + ) + (set_local $$and69$i$i + (i32.and + (get_local $$shr68$i$i) + (i32.const 8) + ) + ) + (set_local $$shl70$i$i + (i32.shl + (get_local $$shr58$i$i) + (get_local $$and69$i$i) + ) + ) + (set_local $$sub71$i$i + (i32.add + (get_local $$shl70$i$i) + (i32.const 520192) + ) + ) + (set_local $$shr72$i$i + (i32.shr_u + (get_local $$sub71$i$i) + (i32.const 16) + ) + ) + (set_local $$and73$i$i + (i32.and + (get_local $$shr72$i$i) + (i32.const 4) + ) + ) + (set_local $$add74$i$i + (i32.or + (get_local $$and73$i$i) + (get_local $$and69$i$i) + ) + ) + (set_local $$shl75$i$i + (i32.shl + (get_local $$shl70$i$i) + (get_local $$and73$i$i) + ) + ) + (set_local $$sub76$i$i + (i32.add + (get_local $$shl75$i$i) + (i32.const 245760) + ) + ) + (set_local $$shr77$i$i + (i32.shr_u + (get_local $$sub76$i$i) + (i32.const 16) + ) + ) + (set_local $$and78$i$i + (i32.and + (get_local $$shr77$i$i) + (i32.const 2) + ) + ) + (set_local $$add79$i$i + (i32.or + (get_local $$add74$i$i) + (get_local $$and78$i$i) + ) + ) + (set_local $$sub80$i$i + (i32.sub + (i32.const 14) + (get_local $$add79$i$i) + ) + ) + (set_local $$shl81$i$i + (i32.shl + (get_local $$shl75$i$i) + (get_local $$and78$i$i) + ) + ) + (set_local $$shr82$i$i + (i32.shr_u + (get_local $$shl81$i$i) + (i32.const 15) + ) + ) + (set_local $$add83$i$i + (i32.add + (get_local $$sub80$i$i) + (get_local $$shr82$i$i) + ) + ) + (set_local $$shl84$i$i + (i32.shl + (get_local $$add83$i$i) + (i32.const 1) + ) + ) + (set_local $$add85$i$i + (i32.add + (get_local $$add83$i$i) + (i32.const 7) + ) + ) + (set_local $$shr86$i$i + (i32.shr_u + (get_local $$sub$ptr$sub$i$i) + (get_local $$add85$i$i) + ) + ) + (set_local $$and87$i$i + (i32.and + (get_local $$shr86$i$i) + (i32.const 1) + ) + ) + (set_local $$add88$i$i + (i32.or + (get_local $$and87$i$i) + (get_local $$shl84$i$i) + ) + ) + (set_local $$I57$0$i$i + (get_local $$add88$i$i) + ) + ) + ) + ) + ) + (set_local $$arrayidx91$i$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$I57$0$i$i) + (i32.const 2) + ) + ) + ) + (set_local $$index$i$i + (i32.add + (get_local $$119) + (i32.const 28) + ) + ) + (i32.store + (get_local $$index$i$i) + (get_local $$I57$0$i$i) + ) + (set_local $$arrayidx92$i$i + (i32.add + (get_local $$119) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx92$i$i) + (i32.const 0) + ) + (i32.store + (get_local $$add$ptr8$i122$i) + (i32.const 0) + ) + (set_local $$199 + (i32.load + (i32.const 180) + ) + ) + (set_local $$shl95$i$i + (i32.shl + (i32.const 1) + (get_local $$I57$0$i$i) + ) + ) + (set_local $$and96$i$i + (i32.and + (get_local $$199) + (get_local $$shl95$i$i) + ) + ) + (set_local $$tobool97$i$i + (i32.eq + (get_local $$and96$i$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool97$i$i) + (block + (set_local $$or101$i$i + (i32.or + (get_local $$199) + (get_local $$shl95$i$i) + ) + ) + (i32.store + (i32.const 180) + (get_local $$or101$i$i) + ) + (i32.store + (get_local $$arrayidx91$i$i) + (get_local $$119) + ) + (set_local $$parent$i$i + (i32.add + (get_local $$119) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent$i$i) + (get_local $$arrayidx91$i$i) + ) + (set_local $$bk102$i$i + (i32.add + (get_local $$119) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk102$i$i) + (get_local $$119) + ) + (set_local $$fd103$i$i + (i32.add + (get_local $$119) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd103$i$i) + (get_local $$119) + ) + (br $do-once40) + ) + ) + (set_local $$200 + (i32.load + (get_local $$arrayidx91$i$i) + ) + ) + (set_local $$cmp106$i$i + (i32.eq + (get_local $$I57$0$i$i) + (i32.const 31) + ) + ) + (set_local $$shr110$i$i + (i32.shr_u + (get_local $$I57$0$i$i) + (i32.const 1) + ) + ) + (set_local $$sub113$i$i + (i32.sub + (i32.const 25) + (get_local $$shr110$i$i) + ) + ) + (set_local $$cond115$i$i + (if (result i32) + (get_local $$cmp106$i$i) + (i32.const 0) + (get_local $$sub113$i$i) + ) + ) + (set_local $$shl116$i$i + (i32.shl + (get_local $$sub$ptr$sub$i$i) + (get_local $$cond115$i$i) + ) + ) + (set_local $$K105$0$i$i + (get_local $$shl116$i$i) + ) + (set_local $$T$0$i$i + (get_local $$200) + ) + (loop $while-in74 + (block $while-out73 + (set_local $$head118$i$i + (i32.add + (get_local $$T$0$i$i) + (i32.const 4) + ) + ) + (set_local $$201 + (i32.load + (get_local $$head118$i$i) + ) + ) + (set_local $$and119$i$i + (i32.and + (get_local $$201) + (i32.const -8) + ) + ) + (set_local $$cmp120$i$i + (i32.eq + (get_local $$and119$i$i) + (get_local $$sub$ptr$sub$i$i) + ) + ) + (if + (get_local $$cmp120$i$i) + (block + (set_local $$T$0$i$i$lcssa + (get_local $$T$0$i$i) + ) + (set_local $label + (i32.const 307) + ) + (br $while-out73) + ) + ) + (set_local $$shr123$i$i + (i32.shr_u + (get_local $$K105$0$i$i) + (i32.const 31) + ) + ) + (set_local $$arrayidx126$i$i + (i32.add + (i32.add + (get_local $$T$0$i$i) + (i32.const 16) + ) + (i32.shl + (get_local $$shr123$i$i) + (i32.const 2) + ) + ) + ) + (set_local $$shl127$i$i + (i32.shl + (get_local $$K105$0$i$i) + (i32.const 1) + ) + ) + (set_local $$202 + (i32.load + (get_local $$arrayidx126$i$i) + ) + ) + (set_local $$cmp128$i$i + (i32.eq + (get_local $$202) + (i32.const 0) + ) + ) + (if + (get_local $$cmp128$i$i) + (block + (set_local $$T$0$i$i$lcssa284 + (get_local $$T$0$i$i) + ) + (set_local $$arrayidx126$i$i$lcssa + (get_local $$arrayidx126$i$i) + ) + (set_local $label + (i32.const 304) + ) + (br $while-out73) + ) + (block + (set_local $$K105$0$i$i + (get_local $$shl127$i$i) + ) + (set_local $$T$0$i$i + (get_local $$202) + ) + ) + ) + (br $while-in74) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 304) + ) + (block + (set_local $$203 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp133$i$i + (i32.lt_u + (get_local $$arrayidx126$i$i$lcssa) + (get_local $$203) + ) + ) + (if + (get_local $$cmp133$i$i) + (call $_abort) + (block + (i32.store + (get_local $$arrayidx126$i$i$lcssa) + (get_local $$119) + ) + (set_local $$parent138$i$i + (i32.add + (get_local $$119) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent138$i$i) + (get_local $$T$0$i$i$lcssa284) + ) + (set_local $$bk139$i$i + (i32.add + (get_local $$119) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk139$i$i) + (get_local $$119) + ) + (set_local $$fd140$i$i + (i32.add + (get_local $$119) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd140$i$i) + (get_local $$119) + ) + (br $do-once40) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 307) + ) + (block + (set_local $$fd148$i$i + (i32.add + (get_local $$T$0$i$i$lcssa) + (i32.const 8) + ) + ) + (set_local $$204 + (i32.load + (get_local $$fd148$i$i) + ) + ) + (set_local $$205 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp153$i$i + (i32.ge_u + (get_local $$204) + (get_local $$205) + ) + ) + (set_local $$not$cmp150$i$i + (i32.ge_u + (get_local $$T$0$i$i$lcssa) + (get_local $$205) + ) + ) + (set_local $$206 + (i32.and + (get_local $$cmp153$i$i) + (get_local $$not$cmp150$i$i) + ) + ) + (if + (get_local $$206) + (block + (set_local $$bk158$i$i + (i32.add + (get_local $$204) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk158$i$i) + (get_local $$119) + ) + (i32.store + (get_local $$fd148$i$i) + (get_local $$119) + ) + (set_local $$fd160$i$i + (i32.add + (get_local $$119) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd160$i$i) + (get_local $$204) + ) + (set_local $$bk161$i$i + (i32.add + (get_local $$119) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk161$i$i) + (get_local $$T$0$i$i$lcssa) + ) + (set_local $$parent162$i$i + (i32.add + (get_local $$119) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent162$i$i) + (i32.const 0) + ) + (br $do-once40) + ) + (call $_abort) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $$207 + (i32.load + (i32.const 188) + ) + ) + (set_local $$cmp257$i + (i32.gt_u + (get_local $$207) + (get_local $$nb$0) + ) + ) + (if + (get_local $$cmp257$i) + (block + (set_local $$sub260$i + (i32.sub + (get_local $$207) + (get_local $$nb$0) + ) + ) + (i32.store + (i32.const 188) + (get_local $$sub260$i) + ) + (set_local $$208 + (i32.load + (i32.const 200) + ) + ) + (set_local $$add$ptr262$i + (i32.add + (get_local $$208) + (get_local $$nb$0) + ) + ) + (i32.store + (i32.const 200) + (get_local $$add$ptr262$i) + ) + (set_local $$or264$i + (i32.or + (get_local $$sub260$i) + (i32.const 1) + ) + ) + (set_local $$head265$i + (i32.add + (get_local $$add$ptr262$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head265$i) + (get_local $$or264$i) + ) + (set_local $$or267$i + (i32.or + (get_local $$nb$0) + (i32.const 3) + ) + ) + (set_local $$head268$i + (i32.add + (get_local $$208) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head268$i) + (get_local $$or267$i) + ) + (set_local $$add$ptr269$i + (i32.add + (get_local $$208) + (i32.const 8) + ) + ) + (set_local $$retval$0 + (get_local $$add$ptr269$i) + ) + (return + (get_local $$retval$0) + ) + ) + ) + ) + ) + (set_local $$call275$i + (call $___errno_location) + ) + (i32.store + (get_local $$call275$i) + (i32.const 12) + ) + (set_local $$retval$0 + (i32.const 0) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_free (; 54 ;) (param $$mem i32) + (local $$$pre i32) + (local $$$pre$phiZ2D i32) + (local $$$pre312 i32) + (local $$$pre313 i32) + (local $$0 i32) + (local $$1 i32) + (local $$10 i32) + (local $$11 i32) + (local $$12 i32) + (local $$13 i32) + (local $$14 i32) + (local $$15 i32) + (local $$16 i32) + (local $$17 i32) + (local $$18 i32) + (local $$19 i32) + (local $$2 i32) + (local $$20 i32) + (local $$21 i32) + (local $$22 i32) + (local $$23 i32) + (local $$24 i32) + (local $$25 i32) + (local $$26 i32) + (local $$27 i32) + (local $$28 i32) + (local $$29 i32) + (local $$3 i32) + (local $$30 i32) + (local $$31 i32) + (local $$32 i32) + (local $$33 i32) + (local $$34 i32) + (local $$35 i32) + (local $$36 i32) + (local $$37 i32) + (local $$38 i32) + (local $$39 i32) + (local $$4 i32) + (local $$40 i32) + (local $$41 i32) + (local $$42 i32) + (local $$43 i32) + (local $$44 i32) + (local $$45 i32) + (local $$46 i32) + (local $$47 i32) + (local $$48 i32) + (local $$49 i32) + (local $$5 i32) + (local $$50 i32) + (local $$51 i32) + (local $$52 i32) + (local $$53 i32) + (local $$54 i32) + (local $$55 i32) + (local $$56 i32) + (local $$57 i32) + (local $$58 i32) + (local $$59 i32) + (local $$6 i32) + (local $$60 i32) + (local $$61 i32) + (local $$62 i32) + (local $$63 i32) + (local $$64 i32) + (local $$65 i32) + (local $$66 i32) + (local $$67 i32) + (local $$68 i32) + (local $$69 i32) + (local $$7 i32) + (local $$70 i32) + (local $$71 i32) + (local $$72 i32) + (local $$73 i32) + (local $$74 i32) + (local $$8 i32) + (local $$9 i32) + (local $$F510$0 i32) + (local $$I534$0 i32) + (local $$K583$0 i32) + (local $$R$1 i32) + (local $$R$1$lcssa i32) + (local $$R$3 i32) + (local $$R332$1 i32) + (local $$R332$1$lcssa i32) + (local $$R332$3 i32) + (local $$RP$1 i32) + (local $$RP$1$lcssa i32) + (local $$RP360$1 i32) + (local $$RP360$1$lcssa i32) + (local $$T$0 i32) + (local $$T$0$lcssa i32) + (local $$T$0$lcssa319 i32) + (local $$add$ptr i32) + (local $$add$ptr16 i32) + (local $$add$ptr217 i32) + (local $$add$ptr261 i32) + (local $$add$ptr482 i32) + (local $$add$ptr498 i32) + (local $$add$ptr6 i32) + (local $$add17 i32) + (local $$add246 i32) + (local $$add258 i32) + (local $$add267 i32) + (local $$add550 i32) + (local $$add555 i32) + (local $$add559 i32) + (local $$add561 i32) + (local $$add564 i32) + (local $$and i32) + (local $$and140 i32) + (local $$and210 i32) + (local $$and215 i32) + (local $$and232 i32) + (local $$and240 i32) + (local $$and266 i32) + (local $$and301 i32) + (local $$and410 i32) + (local $$and46 i32) + (local $$and495 i32) + (local $$and5 i32) + (local $$and512 i32) + (local $$and545 i32) + (local $$and549 i32) + (local $$and554 i32) + (local $$and563 i32) + (local $$and574 i32) + (local $$and592 i32) + (local $$and8 i32) + (local $$arrayidx i32) + (local $$arrayidx108 i32) + (local $$arrayidx113 i32) + (local $$arrayidx130 i32) + (local $$arrayidx149 i32) + (local $$arrayidx157 i32) + (local $$arrayidx182 i32) + (local $$arrayidx188 i32) + (local $$arrayidx198 i32) + (local $$arrayidx279 i32) + (local $$arrayidx362 i32) + (local $$arrayidx374 i32) + (local $$arrayidx379 i32) + (local $$arrayidx400 i32) + (local $$arrayidx419 i32) + (local $$arrayidx427 i32) + (local $$arrayidx454 i32) + (local $$arrayidx460 i32) + (local $$arrayidx470 i32) + (local $$arrayidx509 i32) + (local $$arrayidx567 i32) + (local $$arrayidx570 i32) + (local $$arrayidx599 i32) + (local $$arrayidx599$lcssa i32) + (local $$arrayidx99 i32) + (local $$bk i32) + (local $$bk275 i32) + (local $$bk286 i32) + (local $$bk321 i32) + (local $$bk333 i32) + (local $$bk34 i32) + (local $$bk343 i32) + (local $$bk529 i32) + (local $$bk531 i32) + (local $$bk580 i32) + (local $$bk611 i32) + (local $$bk631 i32) + (local $$bk634 i32) + (local $$bk66 i32) + (local $$bk73 i32) + (local $$bk82 i32) + (local $$child i32) + (local $$child171 i32) + (local $$child361 i32) + (local $$child443 i32) + (local $$child569 i32) + (local $$cmp i32) + (local $$cmp$i i32) + (local $$cmp1 i32) + (local $$cmp100 i32) + (local $$cmp104 i32) + (local $$cmp109 i32) + (local $$cmp114 i32) + (local $$cmp118 i32) + (local $$cmp127 i32) + (local $$cmp13 i32) + (local $$cmp131 i32) + (local $$cmp143 i32) + (local $$cmp150 i32) + (local $$cmp162 i32) + (local $$cmp165 i32) + (local $$cmp173 i32) + (local $$cmp176 i32) + (local $$cmp18 i32) + (local $$cmp189 i32) + (local $$cmp192 i32) + (local $$cmp2 i32) + (local $$cmp211 i32) + (local $$cmp22 i32) + (local $$cmp228 i32) + (local $$cmp243 i32) + (local $$cmp249 i32) + (local $$cmp25 i32) + (local $$cmp255 i32) + (local $$cmp269 i32) + (local $$cmp280 i32) + (local $$cmp283 i32) + (local $$cmp287 i32) + (local $$cmp29 i32) + (local $$cmp296 i32) + (local $$cmp305 i32) + (local $$cmp308 i32) + (local $$cmp31 i32) + (local $$cmp312 i32) + (local $$cmp334 i32) + (local $$cmp340 i32) + (local $$cmp344 i32) + (local $$cmp348 i32) + (local $$cmp35 i32) + (local $$cmp363 i32) + (local $$cmp368 i32) + (local $$cmp375 i32) + (local $$cmp380 i32) + (local $$cmp386 i32) + (local $$cmp395 i32) + (local $$cmp401 i32) + (local $$cmp413 i32) + (local $$cmp42 i32) + (local $$cmp420 i32) + (local $$cmp432 i32) + (local $$cmp435 i32) + (local $$cmp445 i32) + (local $$cmp448 i32) + (local $$cmp461 i32) + (local $$cmp464 i32) + (local $$cmp484 i32) + (local $$cmp50 i32) + (local $$cmp502 i32) + (local $$cmp519 i32) + (local $$cmp53 i32) + (local $$cmp536 i32) + (local $$cmp540 i32) + (local $$cmp57 i32) + (local $$cmp584 i32) + (local $$cmp593 i32) + (local $$cmp601 i32) + (local $$cmp605 i32) + (local $$cmp624 i32) + (local $$cmp640 i32) + (local $$cmp74 i32) + (local $$cmp80 i32) + (local $$cmp83 i32) + (local $$cmp87 i32) + (local $$cond i32) + (local $$cond291 i32) + (local $$cond292 i32) + (local $$dec i32) + (local $$fd i32) + (local $$fd273 i32) + (local $$fd311 i32) + (local $$fd322$pre$phiZ2D i32) + (local $$fd338 i32) + (local $$fd347 i32) + (local $$fd530 i32) + (local $$fd56 i32) + (local $$fd581 i32) + (local $$fd612 i32) + (local $$fd620 i32) + (local $$fd633 i32) + (local $$fd67$pre$phiZ2D i32) + (local $$fd78 i32) + (local $$fd86 i32) + (local $$head i32) + (local $$head209 i32) + (local $$head216 i32) + (local $$head231 i32) + (local $$head248 i32) + (local $$head260 i32) + (local $$head481 i32) + (local $$head497 i32) + (local $$head591 i32) + (local $$idx$neg i32) + (local $$index i32) + (local $$index399 i32) + (local $$index568 i32) + (local $$neg i32) + (local $$neg139 i32) + (local $$neg300 i32) + (local $$neg409 i32) + (local $$next4$i i32) + (local $$not$cmp621 i32) + (local $$or i32) + (local $$or247 i32) + (local $$or259 i32) + (local $$or480 i32) + (local $$or496 i32) + (local $$or516 i32) + (local $$or578 i32) + (local $$p$1 i32) + (local $$parent i32) + (local $$parent170 i32) + (local $$parent183 i32) + (local $$parent199 i32) + (local $$parent331 i32) + (local $$parent442 i32) + (local $$parent455 i32) + (local $$parent471 i32) + (local $$parent579 i32) + (local $$parent610 i32) + (local $$parent635 i32) + (local $$psize$1 i32) + (local $$psize$2 i32) + (local $$shl i32) + (local $$shl138 i32) + (local $$shl278 i32) + (local $$shl299 i32) + (local $$shl408 i32) + (local $$shl45 i32) + (local $$shl508 i32) + (local $$shl511 i32) + (local $$shl546 i32) + (local $$shl551 i32) + (local $$shl557 i32) + (local $$shl560 i32) + (local $$shl573 i32) + (local $$shl590 i32) + (local $$shl600 i32) + (local $$shr i32) + (local $$shr268 i32) + (local $$shr501 i32) + (local $$shr535 i32) + (local $$shr544 i32) + (local $$shr548 i32) + (local $$shr553 i32) + (local $$shr558 i32) + (local $$shr562 i32) + (local $$shr586 i32) + (local $$shr596 i32) + (local $$sp$0$i i32) + (local $$sp$0$in$i i32) + (local $$sub i32) + (local $$sub547 i32) + (local $$sub552 i32) + (local $$sub556 i32) + (local $$sub589 i32) + (local $$tobool233 i32) + (local $$tobool241 i32) + (local $$tobool513 i32) + (local $$tobool575 i32) + (local $$tobool9 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$cmp + (i32.eq + (get_local $$mem) + (i32.const 0) + ) + ) + (if + (get_local $$cmp) + (return) + ) + (set_local $$add$ptr + (i32.add + (get_local $$mem) + (i32.const -8) + ) + ) + (set_local $$0 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp1 + (i32.lt_u + (get_local $$add$ptr) + (get_local $$0) + ) + ) + (if + (get_local $$cmp1) + (call $_abort) + ) + (set_local $$head + (i32.add + (get_local $$mem) + (i32.const -4) + ) + ) + (set_local $$1 + (i32.load + (get_local $$head) + ) + ) + (set_local $$and + (i32.and + (get_local $$1) + (i32.const 3) + ) + ) + (set_local $$cmp2 + (i32.eq + (get_local $$and) + (i32.const 1) + ) + ) + (if + (get_local $$cmp2) + (call $_abort) + ) + (set_local $$and5 + (i32.and + (get_local $$1) + (i32.const -8) + ) + ) + (set_local $$add$ptr6 + (i32.add + (get_local $$add$ptr) + (get_local $$and5) + ) + ) + (set_local $$and8 + (i32.and + (get_local $$1) + (i32.const 1) + ) + ) + (set_local $$tobool9 + (i32.eq + (get_local $$and8) + (i32.const 0) + ) + ) + (block $do-once + (if + (get_local $$tobool9) + (block + (set_local $$2 + (i32.load + (get_local $$add$ptr) + ) + ) + (set_local $$cmp13 + (i32.eq + (get_local $$and) + (i32.const 0) + ) + ) + (if + (get_local $$cmp13) + (return) + ) + (set_local $$idx$neg + (i32.sub + (i32.const 0) + (get_local $$2) + ) + ) + (set_local $$add$ptr16 + (i32.add + (get_local $$add$ptr) + (get_local $$idx$neg) + ) + ) + (set_local $$add17 + (i32.add + (get_local $$2) + (get_local $$and5) + ) + ) + (set_local $$cmp18 + (i32.lt_u + (get_local $$add$ptr16) + (get_local $$0) + ) + ) + (if + (get_local $$cmp18) + (call $_abort) + ) + (set_local $$3 + (i32.load + (i32.const 196) + ) + ) + (set_local $$cmp22 + (i32.eq + (get_local $$add$ptr16) + (get_local $$3) + ) + ) + (if + (get_local $$cmp22) + (block + (set_local $$head209 + (i32.add + (get_local $$add$ptr6) + (i32.const 4) + ) + ) + (set_local $$27 + (i32.load + (get_local $$head209) + ) + ) + (set_local $$and210 + (i32.and + (get_local $$27) + (i32.const 3) + ) + ) + (set_local $$cmp211 + (i32.eq + (get_local $$and210) + (i32.const 3) + ) + ) + (if + (i32.eqz + (get_local $$cmp211) + ) + (block + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 184) + (get_local $$add17) + ) + (set_local $$and215 + (i32.and + (get_local $$27) + (i32.const -2) + ) + ) + (i32.store + (get_local $$head209) + (get_local $$and215) + ) + (set_local $$or + (i32.or + (get_local $$add17) + (i32.const 1) + ) + ) + (set_local $$head216 + (i32.add + (get_local $$add$ptr16) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head216) + (get_local $$or) + ) + (set_local $$add$ptr217 + (i32.add + (get_local $$add$ptr16) + (get_local $$add17) + ) + ) + (i32.store + (get_local $$add$ptr217) + (get_local $$add17) + ) + (return) + ) + ) + (set_local $$shr + (i32.shr_u + (get_local $$2) + (i32.const 3) + ) + ) + (set_local $$cmp25 + (i32.lt_u + (get_local $$2) + (i32.const 256) + ) + ) + (if + (get_local $$cmp25) + (block + (set_local $$fd + (i32.add + (get_local $$add$ptr16) + (i32.const 8) + ) + ) + (set_local $$4 + (i32.load + (get_local $$fd) + ) + ) + (set_local $$bk + (i32.add + (get_local $$add$ptr16) + (i32.const 12) + ) + ) + (set_local $$5 + (i32.load + (get_local $$bk) + ) + ) + (set_local $$shl + (i32.shl + (get_local $$shr) + (i32.const 1) + ) + ) + (set_local $$arrayidx + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl) + (i32.const 2) + ) + ) + ) + (set_local $$cmp29 + (i32.eq + (get_local $$4) + (get_local $$arrayidx) + ) + ) + (if + (i32.eqz + (get_local $$cmp29) + ) + (block + (set_local $$cmp31 + (i32.lt_u + (get_local $$4) + (get_local $$0) + ) + ) + (if + (get_local $$cmp31) + (call $_abort) + ) + (set_local $$bk34 + (i32.add + (get_local $$4) + (i32.const 12) + ) + ) + (set_local $$6 + (i32.load + (get_local $$bk34) + ) + ) + (set_local $$cmp35 + (i32.eq + (get_local $$6) + (get_local $$add$ptr16) + ) + ) + (if + (i32.eqz + (get_local $$cmp35) + ) + (call $_abort) + ) + ) + ) + (set_local $$cmp42 + (i32.eq + (get_local $$5) + (get_local $$4) + ) + ) + (if + (get_local $$cmp42) + (block + (set_local $$shl45 + (i32.shl + (i32.const 1) + (get_local $$shr) + ) + ) + (set_local $$neg + (i32.xor + (get_local $$shl45) + (i32.const -1) + ) + ) + (set_local $$7 + (i32.load + (i32.const 176) + ) + ) + (set_local $$and46 + (i32.and + (get_local $$7) + (get_local $$neg) + ) + ) + (i32.store + (i32.const 176) + (get_local $$and46) + ) + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + (br $do-once) + ) + ) + (set_local $$cmp50 + (i32.eq + (get_local $$5) + (get_local $$arrayidx) + ) + ) + (if + (get_local $$cmp50) + (block + (set_local $$$pre313 + (i32.add + (get_local $$5) + (i32.const 8) + ) + ) + (set_local $$fd67$pre$phiZ2D + (get_local $$$pre313) + ) + ) + (block + (set_local $$cmp53 + (i32.lt_u + (get_local $$5) + (get_local $$0) + ) + ) + (if + (get_local $$cmp53) + (call $_abort) + ) + (set_local $$fd56 + (i32.add + (get_local $$5) + (i32.const 8) + ) + ) + (set_local $$8 + (i32.load + (get_local $$fd56) + ) + ) + (set_local $$cmp57 + (i32.eq + (get_local $$8) + (get_local $$add$ptr16) + ) + ) + (if + (get_local $$cmp57) + (set_local $$fd67$pre$phiZ2D + (get_local $$fd56) + ) + (call $_abort) + ) + ) + ) + (set_local $$bk66 + (i32.add + (get_local $$4) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk66) + (get_local $$5) + ) + (i32.store + (get_local $$fd67$pre$phiZ2D) + (get_local $$4) + ) + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + (br $do-once) + ) + ) + (set_local $$parent + (i32.add + (get_local $$add$ptr16) + (i32.const 24) + ) + ) + (set_local $$9 + (i32.load + (get_local $$parent) + ) + ) + (set_local $$bk73 + (i32.add + (get_local $$add$ptr16) + (i32.const 12) + ) + ) + (set_local $$10 + (i32.load + (get_local $$bk73) + ) + ) + (set_local $$cmp74 + (i32.eq + (get_local $$10) + (get_local $$add$ptr16) + ) + ) + (block $do-once0 + (if + (get_local $$cmp74) + (block + (set_local $$child + (i32.add + (get_local $$add$ptr16) + (i32.const 16) + ) + ) + (set_local $$arrayidx99 + (i32.add + (get_local $$child) + (i32.const 4) + ) + ) + (set_local $$14 + (i32.load + (get_local $$arrayidx99) + ) + ) + (set_local $$cmp100 + (i32.eq + (get_local $$14) + (i32.const 0) + ) + ) + (if + (get_local $$cmp100) + (block + (set_local $$15 + (i32.load + (get_local $$child) + ) + ) + (set_local $$cmp104 + (i32.eq + (get_local $$15) + (i32.const 0) + ) + ) + (if + (get_local $$cmp104) + (block + (set_local $$R$3 + (i32.const 0) + ) + (br $do-once0) + ) + (block + (set_local $$R$1 + (get_local $$15) + ) + (set_local $$RP$1 + (get_local $$child) + ) + ) + ) + ) + (block + (set_local $$R$1 + (get_local $$14) + ) + (set_local $$RP$1 + (get_local $$arrayidx99) + ) + ) + ) + (loop $while-in + (block $while-out + (set_local $$arrayidx108 + (i32.add + (get_local $$R$1) + (i32.const 20) + ) + ) + (set_local $$16 + (i32.load + (get_local $$arrayidx108) + ) + ) + (set_local $$cmp109 + (i32.eq + (get_local $$16) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp109) + ) + (block + (set_local $$R$1 + (get_local $$16) + ) + (set_local $$RP$1 + (get_local $$arrayidx108) + ) + (br $while-in) + ) + ) + (set_local $$arrayidx113 + (i32.add + (get_local $$R$1) + (i32.const 16) + ) + ) + (set_local $$17 + (i32.load + (get_local $$arrayidx113) + ) + ) + (set_local $$cmp114 + (i32.eq + (get_local $$17) + (i32.const 0) + ) + ) + (if + (get_local $$cmp114) + (block + (set_local $$R$1$lcssa + (get_local $$R$1) + ) + (set_local $$RP$1$lcssa + (get_local $$RP$1) + ) + (br $while-out) + ) + (block + (set_local $$R$1 + (get_local $$17) + ) + (set_local $$RP$1 + (get_local $$arrayidx113) + ) + ) + ) + (br $while-in) + ) + ) + (set_local $$cmp118 + (i32.lt_u + (get_local $$RP$1$lcssa) + (get_local $$0) + ) + ) + (if + (get_local $$cmp118) + (call $_abort) + (block + (i32.store + (get_local $$RP$1$lcssa) + (i32.const 0) + ) + (set_local $$R$3 + (get_local $$R$1$lcssa) + ) + (br $do-once0) + ) + ) + ) + (block + (set_local $$fd78 + (i32.add + (get_local $$add$ptr16) + (i32.const 8) + ) + ) + (set_local $$11 + (i32.load + (get_local $$fd78) + ) + ) + (set_local $$cmp80 + (i32.lt_u + (get_local $$11) + (get_local $$0) + ) + ) + (if + (get_local $$cmp80) + (call $_abort) + ) + (set_local $$bk82 + (i32.add + (get_local $$11) + (i32.const 12) + ) + ) + (set_local $$12 + (i32.load + (get_local $$bk82) + ) + ) + (set_local $$cmp83 + (i32.eq + (get_local $$12) + (get_local $$add$ptr16) + ) + ) + (if + (i32.eqz + (get_local $$cmp83) + ) + (call $_abort) + ) + (set_local $$fd86 + (i32.add + (get_local $$10) + (i32.const 8) + ) + ) + (set_local $$13 + (i32.load + (get_local $$fd86) + ) + ) + (set_local $$cmp87 + (i32.eq + (get_local $$13) + (get_local $$add$ptr16) + ) + ) + (if + (get_local $$cmp87) + (block + (i32.store + (get_local $$bk82) + (get_local $$10) + ) + (i32.store + (get_local $$fd86) + (get_local $$11) + ) + (set_local $$R$3 + (get_local $$10) + ) + (br $do-once0) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$cmp127 + (i32.eq + (get_local $$9) + (i32.const 0) + ) + ) + (if + (get_local $$cmp127) + (block + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + ) + (block + (set_local $$index + (i32.add + (get_local $$add$ptr16) + (i32.const 28) + ) + ) + (set_local $$18 + (i32.load + (get_local $$index) + ) + ) + (set_local $$arrayidx130 + (i32.add + (i32.const 480) + (i32.shl + (get_local $$18) + (i32.const 2) + ) + ) + ) + (set_local $$19 + (i32.load + (get_local $$arrayidx130) + ) + ) + (set_local $$cmp131 + (i32.eq + (get_local $$add$ptr16) + (get_local $$19) + ) + ) + (if + (get_local $$cmp131) + (block + (i32.store + (get_local $$arrayidx130) + (get_local $$R$3) + ) + (set_local $$cond291 + (i32.eq + (get_local $$R$3) + (i32.const 0) + ) + ) + (if + (get_local $$cond291) + (block + (set_local $$shl138 + (i32.shl + (i32.const 1) + (get_local $$18) + ) + ) + (set_local $$neg139 + (i32.xor + (get_local $$shl138) + (i32.const -1) + ) + ) + (set_local $$20 + (i32.load + (i32.const 180) + ) + ) + (set_local $$and140 + (i32.and + (get_local $$20) + (get_local $$neg139) + ) + ) + (i32.store + (i32.const 180) + (get_local $$and140) + ) + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + (br $do-once) + ) + ) + ) + (block + (set_local $$21 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp143 + (i32.lt_u + (get_local $$9) + (get_local $$21) + ) + ) + (if + (get_local $$cmp143) + (call $_abort) + ) + (set_local $$arrayidx149 + (i32.add + (get_local $$9) + (i32.const 16) + ) + ) + (set_local $$22 + (i32.load + (get_local $$arrayidx149) + ) + ) + (set_local $$cmp150 + (i32.eq + (get_local $$22) + (get_local $$add$ptr16) + ) + ) + (if + (get_local $$cmp150) + (i32.store + (get_local $$arrayidx149) + (get_local $$R$3) + ) + (block + (set_local $$arrayidx157 + (i32.add + (get_local $$9) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx157) + (get_local $$R$3) + ) + ) + ) + (set_local $$cmp162 + (i32.eq + (get_local $$R$3) + (i32.const 0) + ) + ) + (if + (get_local $$cmp162) + (block + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + (br $do-once) + ) + ) + ) + ) + (set_local $$23 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp165 + (i32.lt_u + (get_local $$R$3) + (get_local $$23) + ) + ) + (if + (get_local $$cmp165) + (call $_abort) + ) + (set_local $$parent170 + (i32.add + (get_local $$R$3) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent170) + (get_local $$9) + ) + (set_local $$child171 + (i32.add + (get_local $$add$ptr16) + (i32.const 16) + ) + ) + (set_local $$24 + (i32.load + (get_local $$child171) + ) + ) + (set_local $$cmp173 + (i32.eq + (get_local $$24) + (i32.const 0) + ) + ) + (block $do-once2 + (if + (i32.eqz + (get_local $$cmp173) + ) + (block + (set_local $$cmp176 + (i32.lt_u + (get_local $$24) + (get_local $$23) + ) + ) + (if + (get_local $$cmp176) + (call $_abort) + (block + (set_local $$arrayidx182 + (i32.add + (get_local $$R$3) + (i32.const 16) + ) + ) + (i32.store + (get_local $$arrayidx182) + (get_local $$24) + ) + (set_local $$parent183 + (i32.add + (get_local $$24) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent183) + (get_local $$R$3) + ) + (br $do-once2) + ) + ) + ) + ) + ) + (set_local $$arrayidx188 + (i32.add + (get_local $$child171) + (i32.const 4) + ) + ) + (set_local $$25 + (i32.load + (get_local $$arrayidx188) + ) + ) + (set_local $$cmp189 + (i32.eq + (get_local $$25) + (i32.const 0) + ) + ) + (if + (get_local $$cmp189) + (block + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + ) + (block + (set_local $$26 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp192 + (i32.lt_u + (get_local $$25) + (get_local $$26) + ) + ) + (if + (get_local $$cmp192) + (call $_abort) + (block + (set_local $$arrayidx198 + (i32.add + (get_local $$R$3) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx198) + (get_local $$25) + ) + (set_local $$parent199 + (i32.add + (get_local $$25) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent199) + (get_local $$R$3) + ) + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + (br $do-once) + ) + ) + ) + ) + ) + ) + ) + (block + (set_local $$p$1 + (get_local $$add$ptr) + ) + (set_local $$psize$1 + (get_local $$and5) + ) + ) + ) + ) + (set_local $$cmp228 + (i32.lt_u + (get_local $$p$1) + (get_local $$add$ptr6) + ) + ) + (if + (i32.eqz + (get_local $$cmp228) + ) + (call $_abort) + ) + (set_local $$head231 + (i32.add + (get_local $$add$ptr6) + (i32.const 4) + ) + ) + (set_local $$28 + (i32.load + (get_local $$head231) + ) + ) + (set_local $$and232 + (i32.and + (get_local $$28) + (i32.const 1) + ) + ) + (set_local $$tobool233 + (i32.eq + (get_local $$and232) + (i32.const 0) + ) + ) + (if + (get_local $$tobool233) + (call $_abort) + ) + (set_local $$and240 + (i32.and + (get_local $$28) + (i32.const 2) + ) + ) + (set_local $$tobool241 + (i32.eq + (get_local $$and240) + (i32.const 0) + ) + ) + (if + (get_local $$tobool241) + (block + (set_local $$29 + (i32.load + (i32.const 200) + ) + ) + (set_local $$cmp243 + (i32.eq + (get_local $$add$ptr6) + (get_local $$29) + ) + ) + (if + (get_local $$cmp243) + (block + (set_local $$30 + (i32.load + (i32.const 188) + ) + ) + (set_local $$add246 + (i32.add + (get_local $$30) + (get_local $$psize$1) + ) + ) + (i32.store + (i32.const 188) + (get_local $$add246) + ) + (i32.store + (i32.const 200) + (get_local $$p$1) + ) + (set_local $$or247 + (i32.or + (get_local $$add246) + (i32.const 1) + ) + ) + (set_local $$head248 + (i32.add + (get_local $$p$1) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head248) + (get_local $$or247) + ) + (set_local $$31 + (i32.load + (i32.const 196) + ) + ) + (set_local $$cmp249 + (i32.eq + (get_local $$p$1) + (get_local $$31) + ) + ) + (if + (i32.eqz + (get_local $$cmp249) + ) + (return) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store + (i32.const 184) + (i32.const 0) + ) + (return) + ) + ) + (set_local $$32 + (i32.load + (i32.const 196) + ) + ) + (set_local $$cmp255 + (i32.eq + (get_local $$add$ptr6) + (get_local $$32) + ) + ) + (if + (get_local $$cmp255) + (block + (set_local $$33 + (i32.load + (i32.const 184) + ) + ) + (set_local $$add258 + (i32.add + (get_local $$33) + (get_local $$psize$1) + ) + ) + (i32.store + (i32.const 184) + (get_local $$add258) + ) + (i32.store + (i32.const 196) + (get_local $$p$1) + ) + (set_local $$or259 + (i32.or + (get_local $$add258) + (i32.const 1) + ) + ) + (set_local $$head260 + (i32.add + (get_local $$p$1) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head260) + (get_local $$or259) + ) + (set_local $$add$ptr261 + (i32.add + (get_local $$p$1) + (get_local $$add258) + ) + ) + (i32.store + (get_local $$add$ptr261) + (get_local $$add258) + ) + (return) + ) + ) + (set_local $$and266 + (i32.and + (get_local $$28) + (i32.const -8) + ) + ) + (set_local $$add267 + (i32.add + (get_local $$and266) + (get_local $$psize$1) + ) + ) + (set_local $$shr268 + (i32.shr_u + (get_local $$28) + (i32.const 3) + ) + ) + (set_local $$cmp269 + (i32.lt_u + (get_local $$28) + (i32.const 256) + ) + ) + (block $do-once4 + (if + (get_local $$cmp269) + (block + (set_local $$fd273 + (i32.add + (get_local $$add$ptr6) + (i32.const 8) + ) + ) + (set_local $$34 + (i32.load + (get_local $$fd273) + ) + ) + (set_local $$bk275 + (i32.add + (get_local $$add$ptr6) + (i32.const 12) + ) + ) + (set_local $$35 + (i32.load + (get_local $$bk275) + ) + ) + (set_local $$shl278 + (i32.shl + (get_local $$shr268) + (i32.const 1) + ) + ) + (set_local $$arrayidx279 + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl278) + (i32.const 2) + ) + ) + ) + (set_local $$cmp280 + (i32.eq + (get_local $$34) + (get_local $$arrayidx279) + ) + ) + (if + (i32.eqz + (get_local $$cmp280) + ) + (block + (set_local $$36 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp283 + (i32.lt_u + (get_local $$34) + (get_local $$36) + ) + ) + (if + (get_local $$cmp283) + (call $_abort) + ) + (set_local $$bk286 + (i32.add + (get_local $$34) + (i32.const 12) + ) + ) + (set_local $$37 + (i32.load + (get_local $$bk286) + ) + ) + (set_local $$cmp287 + (i32.eq + (get_local $$37) + (get_local $$add$ptr6) + ) + ) + (if + (i32.eqz + (get_local $$cmp287) + ) + (call $_abort) + ) + ) + ) + (set_local $$cmp296 + (i32.eq + (get_local $$35) + (get_local $$34) + ) + ) + (if + (get_local $$cmp296) + (block + (set_local $$shl299 + (i32.shl + (i32.const 1) + (get_local $$shr268) + ) + ) + (set_local $$neg300 + (i32.xor + (get_local $$shl299) + (i32.const -1) + ) + ) + (set_local $$38 + (i32.load + (i32.const 176) + ) + ) + (set_local $$and301 + (i32.and + (get_local $$38) + (get_local $$neg300) + ) + ) + (i32.store + (i32.const 176) + (get_local $$and301) + ) + (br $do-once4) + ) + ) + (set_local $$cmp305 + (i32.eq + (get_local $$35) + (get_local $$arrayidx279) + ) + ) + (if + (get_local $$cmp305) + (block + (set_local $$$pre312 + (i32.add + (get_local $$35) + (i32.const 8) + ) + ) + (set_local $$fd322$pre$phiZ2D + (get_local $$$pre312) + ) + ) + (block + (set_local $$39 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp308 + (i32.lt_u + (get_local $$35) + (get_local $$39) + ) + ) + (if + (get_local $$cmp308) + (call $_abort) + ) + (set_local $$fd311 + (i32.add + (get_local $$35) + (i32.const 8) + ) + ) + (set_local $$40 + (i32.load + (get_local $$fd311) + ) + ) + (set_local $$cmp312 + (i32.eq + (get_local $$40) + (get_local $$add$ptr6) + ) + ) + (if + (get_local $$cmp312) + (set_local $$fd322$pre$phiZ2D + (get_local $$fd311) + ) + (call $_abort) + ) + ) + ) + (set_local $$bk321 + (i32.add + (get_local $$34) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk321) + (get_local $$35) + ) + (i32.store + (get_local $$fd322$pre$phiZ2D) + (get_local $$34) + ) + ) + (block + (set_local $$parent331 + (i32.add + (get_local $$add$ptr6) + (i32.const 24) + ) + ) + (set_local $$41 + (i32.load + (get_local $$parent331) + ) + ) + (set_local $$bk333 + (i32.add + (get_local $$add$ptr6) + (i32.const 12) + ) + ) + (set_local $$42 + (i32.load + (get_local $$bk333) + ) + ) + (set_local $$cmp334 + (i32.eq + (get_local $$42) + (get_local $$add$ptr6) + ) + ) + (block $do-once6 + (if + (get_local $$cmp334) + (block + (set_local $$child361 + (i32.add + (get_local $$add$ptr6) + (i32.const 16) + ) + ) + (set_local $$arrayidx362 + (i32.add + (get_local $$child361) + (i32.const 4) + ) + ) + (set_local $$47 + (i32.load + (get_local $$arrayidx362) + ) + ) + (set_local $$cmp363 + (i32.eq + (get_local $$47) + (i32.const 0) + ) + ) + (if + (get_local $$cmp363) + (block + (set_local $$48 + (i32.load + (get_local $$child361) + ) + ) + (set_local $$cmp368 + (i32.eq + (get_local $$48) + (i32.const 0) + ) + ) + (if + (get_local $$cmp368) + (block + (set_local $$R332$3 + (i32.const 0) + ) + (br $do-once6) + ) + (block + (set_local $$R332$1 + (get_local $$48) + ) + (set_local $$RP360$1 + (get_local $$child361) + ) + ) + ) + ) + (block + (set_local $$R332$1 + (get_local $$47) + ) + (set_local $$RP360$1 + (get_local $$arrayidx362) + ) + ) + ) + (loop $while-in9 + (block $while-out8 + (set_local $$arrayidx374 + (i32.add + (get_local $$R332$1) + (i32.const 20) + ) + ) + (set_local $$49 + (i32.load + (get_local $$arrayidx374) + ) + ) + (set_local $$cmp375 + (i32.eq + (get_local $$49) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp375) + ) + (block + (set_local $$R332$1 + (get_local $$49) + ) + (set_local $$RP360$1 + (get_local $$arrayidx374) + ) + (br $while-in9) + ) + ) + (set_local $$arrayidx379 + (i32.add + (get_local $$R332$1) + (i32.const 16) + ) + ) + (set_local $$50 + (i32.load + (get_local $$arrayidx379) + ) + ) + (set_local $$cmp380 + (i32.eq + (get_local $$50) + (i32.const 0) + ) + ) + (if + (get_local $$cmp380) + (block + (set_local $$R332$1$lcssa + (get_local $$R332$1) + ) + (set_local $$RP360$1$lcssa + (get_local $$RP360$1) + ) + (br $while-out8) + ) + (block + (set_local $$R332$1 + (get_local $$50) + ) + (set_local $$RP360$1 + (get_local $$arrayidx379) + ) + ) + ) + (br $while-in9) + ) + ) + (set_local $$51 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp386 + (i32.lt_u + (get_local $$RP360$1$lcssa) + (get_local $$51) + ) + ) + (if + (get_local $$cmp386) + (call $_abort) + (block + (i32.store + (get_local $$RP360$1$lcssa) + (i32.const 0) + ) + (set_local $$R332$3 + (get_local $$R332$1$lcssa) + ) + (br $do-once6) + ) + ) + ) + (block + (set_local $$fd338 + (i32.add + (get_local $$add$ptr6) + (i32.const 8) + ) + ) + (set_local $$43 + (i32.load + (get_local $$fd338) + ) + ) + (set_local $$44 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp340 + (i32.lt_u + (get_local $$43) + (get_local $$44) + ) + ) + (if + (get_local $$cmp340) + (call $_abort) + ) + (set_local $$bk343 + (i32.add + (get_local $$43) + (i32.const 12) + ) + ) + (set_local $$45 + (i32.load + (get_local $$bk343) + ) + ) + (set_local $$cmp344 + (i32.eq + (get_local $$45) + (get_local $$add$ptr6) + ) + ) + (if + (i32.eqz + (get_local $$cmp344) + ) + (call $_abort) + ) + (set_local $$fd347 + (i32.add + (get_local $$42) + (i32.const 8) + ) + ) + (set_local $$46 + (i32.load + (get_local $$fd347) + ) + ) + (set_local $$cmp348 + (i32.eq + (get_local $$46) + (get_local $$add$ptr6) + ) + ) + (if + (get_local $$cmp348) + (block + (i32.store + (get_local $$bk343) + (get_local $$42) + ) + (i32.store + (get_local $$fd347) + (get_local $$43) + ) + (set_local $$R332$3 + (get_local $$42) + ) + (br $do-once6) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$cmp395 + (i32.eq + (get_local $$41) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp395) + ) + (block + (set_local $$index399 + (i32.add + (get_local $$add$ptr6) + (i32.const 28) + ) + ) + (set_local $$52 + (i32.load + (get_local $$index399) + ) + ) + (set_local $$arrayidx400 + (i32.add + (i32.const 480) + (i32.shl + (get_local $$52) + (i32.const 2) + ) + ) + ) + (set_local $$53 + (i32.load + (get_local $$arrayidx400) + ) + ) + (set_local $$cmp401 + (i32.eq + (get_local $$add$ptr6) + (get_local $$53) + ) + ) + (if + (get_local $$cmp401) + (block + (i32.store + (get_local $$arrayidx400) + (get_local $$R332$3) + ) + (set_local $$cond292 + (i32.eq + (get_local $$R332$3) + (i32.const 0) + ) + ) + (if + (get_local $$cond292) + (block + (set_local $$shl408 + (i32.shl + (i32.const 1) + (get_local $$52) + ) + ) + (set_local $$neg409 + (i32.xor + (get_local $$shl408) + (i32.const -1) + ) + ) + (set_local $$54 + (i32.load + (i32.const 180) + ) + ) + (set_local $$and410 + (i32.and + (get_local $$54) + (get_local $$neg409) + ) + ) + (i32.store + (i32.const 180) + (get_local $$and410) + ) + (br $do-once4) + ) + ) + ) + (block + (set_local $$55 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp413 + (i32.lt_u + (get_local $$41) + (get_local $$55) + ) + ) + (if + (get_local $$cmp413) + (call $_abort) + ) + (set_local $$arrayidx419 + (i32.add + (get_local $$41) + (i32.const 16) + ) + ) + (set_local $$56 + (i32.load + (get_local $$arrayidx419) + ) + ) + (set_local $$cmp420 + (i32.eq + (get_local $$56) + (get_local $$add$ptr6) + ) + ) + (if + (get_local $$cmp420) + (i32.store + (get_local $$arrayidx419) + (get_local $$R332$3) + ) + (block + (set_local $$arrayidx427 + (i32.add + (get_local $$41) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx427) + (get_local $$R332$3) + ) + ) + ) + (set_local $$cmp432 + (i32.eq + (get_local $$R332$3) + (i32.const 0) + ) + ) + (if + (get_local $$cmp432) + (br $do-once4) + ) + ) + ) + (set_local $$57 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp435 + (i32.lt_u + (get_local $$R332$3) + (get_local $$57) + ) + ) + (if + (get_local $$cmp435) + (call $_abort) + ) + (set_local $$parent442 + (i32.add + (get_local $$R332$3) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent442) + (get_local $$41) + ) + (set_local $$child443 + (i32.add + (get_local $$add$ptr6) + (i32.const 16) + ) + ) + (set_local $$58 + (i32.load + (get_local $$child443) + ) + ) + (set_local $$cmp445 + (i32.eq + (get_local $$58) + (i32.const 0) + ) + ) + (block $do-once10 + (if + (i32.eqz + (get_local $$cmp445) + ) + (block + (set_local $$cmp448 + (i32.lt_u + (get_local $$58) + (get_local $$57) + ) + ) + (if + (get_local $$cmp448) + (call $_abort) + (block + (set_local $$arrayidx454 + (i32.add + (get_local $$R332$3) + (i32.const 16) + ) + ) + (i32.store + (get_local $$arrayidx454) + (get_local $$58) + ) + (set_local $$parent455 + (i32.add + (get_local $$58) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent455) + (get_local $$R332$3) + ) + (br $do-once10) + ) + ) + ) + ) + ) + (set_local $$arrayidx460 + (i32.add + (get_local $$child443) + (i32.const 4) + ) + ) + (set_local $$59 + (i32.load + (get_local $$arrayidx460) + ) + ) + (set_local $$cmp461 + (i32.eq + (get_local $$59) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp461) + ) + (block + (set_local $$60 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp464 + (i32.lt_u + (get_local $$59) + (get_local $$60) + ) + ) + (if + (get_local $$cmp464) + (call $_abort) + (block + (set_local $$arrayidx470 + (i32.add + (get_local $$R332$3) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx470) + (get_local $$59) + ) + (set_local $$parent471 + (i32.add + (get_local $$59) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent471) + (get_local $$R332$3) + ) + (br $do-once4) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $$or480 + (i32.or + (get_local $$add267) + (i32.const 1) + ) + ) + (set_local $$head481 + (i32.add + (get_local $$p$1) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head481) + (get_local $$or480) + ) + (set_local $$add$ptr482 + (i32.add + (get_local $$p$1) + (get_local $$add267) + ) + ) + (i32.store + (get_local $$add$ptr482) + (get_local $$add267) + ) + (set_local $$61 + (i32.load + (i32.const 196) + ) + ) + (set_local $$cmp484 + (i32.eq + (get_local $$p$1) + (get_local $$61) + ) + ) + (if + (get_local $$cmp484) + (block + (i32.store + (i32.const 184) + (get_local $$add267) + ) + (return) + ) + (set_local $$psize$2 + (get_local $$add267) + ) + ) + ) + (block + (set_local $$and495 + (i32.and + (get_local $$28) + (i32.const -2) + ) + ) + (i32.store + (get_local $$head231) + (get_local $$and495) + ) + (set_local $$or496 + (i32.or + (get_local $$psize$1) + (i32.const 1) + ) + ) + (set_local $$head497 + (i32.add + (get_local $$p$1) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head497) + (get_local $$or496) + ) + (set_local $$add$ptr498 + (i32.add + (get_local $$p$1) + (get_local $$psize$1) + ) + ) + (i32.store + (get_local $$add$ptr498) + (get_local $$psize$1) + ) + (set_local $$psize$2 + (get_local $$psize$1) + ) + ) + ) + (set_local $$shr501 + (i32.shr_u + (get_local $$psize$2) + (i32.const 3) + ) + ) + (set_local $$cmp502 + (i32.lt_u + (get_local $$psize$2) + (i32.const 256) + ) + ) + (if + (get_local $$cmp502) + (block + (set_local $$shl508 + (i32.shl + (get_local $$shr501) + (i32.const 1) + ) + ) + (set_local $$arrayidx509 + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl508) + (i32.const 2) + ) + ) + ) + (set_local $$62 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shl511 + (i32.shl + (i32.const 1) + (get_local $$shr501) + ) + ) + (set_local $$and512 + (i32.and + (get_local $$62) + (get_local $$shl511) + ) + ) + (set_local $$tobool513 + (i32.eq + (get_local $$and512) + (i32.const 0) + ) + ) + (if + (get_local $$tobool513) + (block + (set_local $$or516 + (i32.or + (get_local $$62) + (get_local $$shl511) + ) + ) + (i32.store + (i32.const 176) + (get_local $$or516) + ) + (set_local $$$pre + (i32.add + (get_local $$arrayidx509) + (i32.const 8) + ) + ) + (set_local $$$pre$phiZ2D + (get_local $$$pre) + ) + (set_local $$F510$0 + (get_local $$arrayidx509) + ) + ) + (block + (set_local $$63 + (i32.add + (get_local $$arrayidx509) + (i32.const 8) + ) + ) + (set_local $$64 + (i32.load + (get_local $$63) + ) + ) + (set_local $$65 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp519 + (i32.lt_u + (get_local $$64) + (get_local $$65) + ) + ) + (if + (get_local $$cmp519) + (call $_abort) + (block + (set_local $$$pre$phiZ2D + (get_local $$63) + ) + (set_local $$F510$0 + (get_local $$64) + ) + ) + ) + ) + ) + (i32.store + (get_local $$$pre$phiZ2D) + (get_local $$p$1) + ) + (set_local $$bk529 + (i32.add + (get_local $$F510$0) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk529) + (get_local $$p$1) + ) + (set_local $$fd530 + (i32.add + (get_local $$p$1) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd530) + (get_local $$F510$0) + ) + (set_local $$bk531 + (i32.add + (get_local $$p$1) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk531) + (get_local $$arrayidx509) + ) + (return) + ) + ) + (set_local $$shr535 + (i32.shr_u + (get_local $$psize$2) + (i32.const 8) + ) + ) + (set_local $$cmp536 + (i32.eq + (get_local $$shr535) + (i32.const 0) + ) + ) + (if + (get_local $$cmp536) + (set_local $$I534$0 + (i32.const 0) + ) + (block + (set_local $$cmp540 + (i32.gt_u + (get_local $$psize$2) + (i32.const 16777215) + ) + ) + (if + (get_local $$cmp540) + (set_local $$I534$0 + (i32.const 31) + ) + (block + (set_local $$sub + (i32.add + (get_local $$shr535) + (i32.const 1048320) + ) + ) + (set_local $$shr544 + (i32.shr_u + (get_local $$sub) + (i32.const 16) + ) + ) + (set_local $$and545 + (i32.and + (get_local $$shr544) + (i32.const 8) + ) + ) + (set_local $$shl546 + (i32.shl + (get_local $$shr535) + (get_local $$and545) + ) + ) + (set_local $$sub547 + (i32.add + (get_local $$shl546) + (i32.const 520192) + ) + ) + (set_local $$shr548 + (i32.shr_u + (get_local $$sub547) + (i32.const 16) + ) + ) + (set_local $$and549 + (i32.and + (get_local $$shr548) + (i32.const 4) + ) + ) + (set_local $$add550 + (i32.or + (get_local $$and549) + (get_local $$and545) + ) + ) + (set_local $$shl551 + (i32.shl + (get_local $$shl546) + (get_local $$and549) + ) + ) + (set_local $$sub552 + (i32.add + (get_local $$shl551) + (i32.const 245760) + ) + ) + (set_local $$shr553 + (i32.shr_u + (get_local $$sub552) + (i32.const 16) + ) + ) + (set_local $$and554 + (i32.and + (get_local $$shr553) + (i32.const 2) + ) + ) + (set_local $$add555 + (i32.or + (get_local $$add550) + (get_local $$and554) + ) + ) + (set_local $$sub556 + (i32.sub + (i32.const 14) + (get_local $$add555) + ) + ) + (set_local $$shl557 + (i32.shl + (get_local $$shl551) + (get_local $$and554) + ) + ) + (set_local $$shr558 + (i32.shr_u + (get_local $$shl557) + (i32.const 15) + ) + ) + (set_local $$add559 + (i32.add + (get_local $$sub556) + (get_local $$shr558) + ) + ) + (set_local $$shl560 + (i32.shl + (get_local $$add559) + (i32.const 1) + ) + ) + (set_local $$add561 + (i32.add + (get_local $$add559) + (i32.const 7) + ) + ) + (set_local $$shr562 + (i32.shr_u + (get_local $$psize$2) + (get_local $$add561) + ) + ) + (set_local $$and563 + (i32.and + (get_local $$shr562) + (i32.const 1) + ) + ) + (set_local $$add564 + (i32.or + (get_local $$and563) + (get_local $$shl560) + ) + ) + (set_local $$I534$0 + (get_local $$add564) + ) + ) + ) + ) + ) + (set_local $$arrayidx567 + (i32.add + (i32.const 480) + (i32.shl + (get_local $$I534$0) + (i32.const 2) + ) + ) + ) + (set_local $$index568 + (i32.add + (get_local $$p$1) + (i32.const 28) + ) + ) + (i32.store + (get_local $$index568) + (get_local $$I534$0) + ) + (set_local $$child569 + (i32.add + (get_local $$p$1) + (i32.const 16) + ) + ) + (set_local $$arrayidx570 + (i32.add + (get_local $$p$1) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx570) + (i32.const 0) + ) + (i32.store + (get_local $$child569) + (i32.const 0) + ) + (set_local $$66 + (i32.load + (i32.const 180) + ) + ) + (set_local $$shl573 + (i32.shl + (i32.const 1) + (get_local $$I534$0) + ) + ) + (set_local $$and574 + (i32.and + (get_local $$66) + (get_local $$shl573) + ) + ) + (set_local $$tobool575 + (i32.eq + (get_local $$and574) + (i32.const 0) + ) + ) + (block $do-once12 + (if + (get_local $$tobool575) + (block + (set_local $$or578 + (i32.or + (get_local $$66) + (get_local $$shl573) + ) + ) + (i32.store + (i32.const 180) + (get_local $$or578) + ) + (i32.store + (get_local $$arrayidx567) + (get_local $$p$1) + ) + (set_local $$parent579 + (i32.add + (get_local $$p$1) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent579) + (get_local $$arrayidx567) + ) + (set_local $$bk580 + (i32.add + (get_local $$p$1) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk580) + (get_local $$p$1) + ) + (set_local $$fd581 + (i32.add + (get_local $$p$1) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd581) + (get_local $$p$1) + ) + ) + (block + (set_local $$67 + (i32.load + (get_local $$arrayidx567) + ) + ) + (set_local $$cmp584 + (i32.eq + (get_local $$I534$0) + (i32.const 31) + ) + ) + (set_local $$shr586 + (i32.shr_u + (get_local $$I534$0) + (i32.const 1) + ) + ) + (set_local $$sub589 + (i32.sub + (i32.const 25) + (get_local $$shr586) + ) + ) + (set_local $$cond + (if (result i32) + (get_local $$cmp584) + (i32.const 0) + (get_local $$sub589) + ) + ) + (set_local $$shl590 + (i32.shl + (get_local $$psize$2) + (get_local $$cond) + ) + ) + (set_local $$K583$0 + (get_local $$shl590) + ) + (set_local $$T$0 + (get_local $$67) + ) + (loop $while-in15 + (block $while-out14 + (set_local $$head591 + (i32.add + (get_local $$T$0) + (i32.const 4) + ) + ) + (set_local $$68 + (i32.load + (get_local $$head591) + ) + ) + (set_local $$and592 + (i32.and + (get_local $$68) + (i32.const -8) + ) + ) + (set_local $$cmp593 + (i32.eq + (get_local $$and592) + (get_local $$psize$2) + ) + ) + (if + (get_local $$cmp593) + (block + (set_local $$T$0$lcssa + (get_local $$T$0) + ) + (set_local $label + (i32.const 130) + ) + (br $while-out14) + ) + ) + (set_local $$shr596 + (i32.shr_u + (get_local $$K583$0) + (i32.const 31) + ) + ) + (set_local $$arrayidx599 + (i32.add + (i32.add + (get_local $$T$0) + (i32.const 16) + ) + (i32.shl + (get_local $$shr596) + (i32.const 2) + ) + ) + ) + (set_local $$shl600 + (i32.shl + (get_local $$K583$0) + (i32.const 1) + ) + ) + (set_local $$69 + (i32.load + (get_local $$arrayidx599) + ) + ) + (set_local $$cmp601 + (i32.eq + (get_local $$69) + (i32.const 0) + ) + ) + (if + (get_local $$cmp601) + (block + (set_local $$T$0$lcssa319 + (get_local $$T$0) + ) + (set_local $$arrayidx599$lcssa + (get_local $$arrayidx599) + ) + (set_local $label + (i32.const 127) + ) + (br $while-out14) + ) + (block + (set_local $$K583$0 + (get_local $$shl600) + ) + (set_local $$T$0 + (get_local $$69) + ) + ) + ) + (br $while-in15) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 127) + ) + (block + (set_local $$70 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp605 + (i32.lt_u + (get_local $$arrayidx599$lcssa) + (get_local $$70) + ) + ) + (if + (get_local $$cmp605) + (call $_abort) + (block + (i32.store + (get_local $$arrayidx599$lcssa) + (get_local $$p$1) + ) + (set_local $$parent610 + (i32.add + (get_local $$p$1) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent610) + (get_local $$T$0$lcssa319) + ) + (set_local $$bk611 + (i32.add + (get_local $$p$1) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk611) + (get_local $$p$1) + ) + (set_local $$fd612 + (i32.add + (get_local $$p$1) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd612) + (get_local $$p$1) + ) + (br $do-once12) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 130) + ) + (block + (set_local $$fd620 + (i32.add + (get_local $$T$0$lcssa) + (i32.const 8) + ) + ) + (set_local $$71 + (i32.load + (get_local $$fd620) + ) + ) + (set_local $$72 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp624 + (i32.ge_u + (get_local $$71) + (get_local $$72) + ) + ) + (set_local $$not$cmp621 + (i32.ge_u + (get_local $$T$0$lcssa) + (get_local $$72) + ) + ) + (set_local $$73 + (i32.and + (get_local $$cmp624) + (get_local $$not$cmp621) + ) + ) + (if + (get_local $$73) + (block + (set_local $$bk631 + (i32.add + (get_local $$71) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk631) + (get_local $$p$1) + ) + (i32.store + (get_local $$fd620) + (get_local $$p$1) + ) + (set_local $$fd633 + (i32.add + (get_local $$p$1) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd633) + (get_local $$71) + ) + (set_local $$bk634 + (i32.add + (get_local $$p$1) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk634) + (get_local $$T$0$lcssa) + ) + (set_local $$parent635 + (i32.add + (get_local $$p$1) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent635) + (i32.const 0) + ) + (br $do-once12) + ) + (call $_abort) + ) + ) + ) + ) + ) + ) + ) + (set_local $$74 + (i32.load + (i32.const 208) + ) + ) + (set_local $$dec + (i32.add + (get_local $$74) + (i32.const -1) + ) + ) + (i32.store + (i32.const 208) + (get_local $$dec) + ) + (set_local $$cmp640 + (i32.eq + (get_local $$dec) + (i32.const 0) + ) + ) + (if + (get_local $$cmp640) + (set_local $$sp$0$in$i + (i32.const 632) + ) + (return) + ) + (loop $while-in17 + (block $while-out16 + (set_local $$sp$0$i + (i32.load + (get_local $$sp$0$in$i) + ) + ) + (set_local $$cmp$i + (i32.eq + (get_local $$sp$0$i) + (i32.const 0) + ) + ) + (set_local $$next4$i + (i32.add + (get_local $$sp$0$i) + (i32.const 8) + ) + ) + (if + (get_local $$cmp$i) + (br $while-out16) + (set_local $$sp$0$in$i + (get_local $$next4$i) + ) + ) + (br $while-in17) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (return) + ) + (func $runPostSets (; 55 ;) + (nop) + ) + (func $_i64Subtract (; 56 ;) (param $a i32) (param $b i32) (param $c i32) (param $d i32) (result i32) + (local $l i32) + (local $h i32) + (set_local $l + (i32.sub + (get_local $a) + (get_local $c) + ) + ) + (set_local $h + (i32.sub + (get_local $b) + (get_local $d) + ) + ) + (set_local $h + (i32.sub + (i32.sub + (get_local $b) + (get_local $d) + ) + (i32.gt_u + (get_local $c) + (get_local $a) + ) + ) + ) + (return + (block (result i32) + (block + (set_global $tempRet0 + (get_local $h) + ) + (drop + (get_global $tempRet0) + ) + ) + (get_local $l) + ) + ) + ) + (func $_i64Add (; 57 ;) (param $a i32) (param $b i32) (param $c i32) (param $d i32) (result i32) + (local $l i32) + (local $h i32) + (set_local $l + (i32.add + (get_local $a) + (get_local $c) + ) + ) + (set_local $h + (i32.add + (i32.add + (get_local $b) + (get_local $d) + ) + (i32.lt_u + (get_local $l) + (get_local $a) + ) + ) + ) + (return + (block (result i32) + (block + (set_global $tempRet0 + (get_local $h) + ) + (drop + (get_global $tempRet0) + ) + ) + (get_local $l) + ) + ) + ) + (func $_memset (; 58 ;) (param $ptr i32) (param $value i32) (param $num i32) (result i32) + (local $stop i32) + (local $value4 i32) + (local $stop4 i32) + (local $unaligned i32) + (set_local $stop + (i32.add + (get_local $ptr) + (get_local $num) + ) + ) + (if + (i32.ge_s + (get_local $num) + (i32.const 20) + ) + (block + (set_local $value + (i32.and + (get_local $value) + (i32.const 255) + ) + ) + (set_local $unaligned + (i32.and + (get_local $ptr) + (i32.const 3) + ) + ) + (set_local $value4 + (i32.or + (i32.or + (i32.or + (get_local $value) + (i32.shl + (get_local $value) + (i32.const 8) + ) + ) + (i32.shl + (get_local $value) + (i32.const 16) + ) + ) + (i32.shl + (get_local $value) + (i32.const 24) + ) + ) + ) + (set_local $stop4 + (i32.and + (get_local $stop) + (i32.xor + (i32.const 3) + (i32.const -1) + ) + ) + ) + (if + (get_local $unaligned) + (block + (set_local $unaligned + (i32.sub + (i32.add + (get_local $ptr) + (i32.const 4) + ) + (get_local $unaligned) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.lt_s + (get_local $ptr) + (get_local $unaligned) + ) + ) + (br $while-out) + ) + (block + (i32.store8 + (get_local $ptr) + (get_local $value) + ) + (set_local $ptr + (i32.add + (get_local $ptr) + (i32.const 1) + ) + ) + ) + (br $while-in) + ) + ) + ) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eqz + (i32.lt_s + (get_local $ptr) + (get_local $stop4) + ) + ) + (br $while-out0) + ) + (block + (i32.store + (get_local $ptr) + (get_local $value4) + ) + (set_local $ptr + (i32.add + (get_local $ptr) + (i32.const 4) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eqz + (i32.lt_s + (get_local $ptr) + (get_local $stop) + ) + ) + (br $while-out2) + ) + (block + (i32.store8 + (get_local $ptr) + (get_local $value) + ) + (set_local $ptr + (i32.add + (get_local $ptr) + (i32.const 1) + ) + ) + ) + (br $while-in3) + ) + ) + (return + (i32.sub + (get_local $ptr) + (get_local $num) + ) + ) + ) + (func $_bitshift64Lshr (; 59 ;) (param $low i32) (param $high i32) (param $bits i32) (result i32) + (local $ander i32) + (if + (i32.lt_s + (get_local $bits) + (i32.const 32) + ) + (block + (set_local $ander + (i32.sub + (i32.shl + (i32.const 1) + (get_local $bits) + ) + (i32.const 1) + ) + ) + (set_global $tempRet0 + (i32.shr_u + (get_local $high) + (get_local $bits) + ) + ) + (return + (i32.or + (i32.shr_u + (get_local $low) + (get_local $bits) + ) + (i32.shl + (i32.and + (get_local $high) + (get_local $ander) + ) + (i32.sub + (i32.const 32) + (get_local $bits) + ) + ) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.const 0) + ) + (return + (i32.shr_u + (get_local $high) + (i32.sub + (get_local $bits) + (i32.const 32) + ) + ) + ) + ) + (func $_bitshift64Shl (; 60 ;) (param $low i32) (param $high i32) (param $bits i32) (result i32) + (local $ander i32) + (if + (i32.lt_s + (get_local $bits) + (i32.const 32) + ) + (block + (set_local $ander + (i32.sub + (i32.shl + (i32.const 1) + (get_local $bits) + ) + (i32.const 1) + ) + ) + (set_global $tempRet0 + (i32.or + (i32.shl + (get_local $high) + (get_local $bits) + ) + (i32.shr_u + (i32.and + (get_local $low) + (i32.shl + (get_local $ander) + (i32.sub + (i32.const 32) + (get_local $bits) + ) + ) + ) + (i32.sub + (i32.const 32) + (get_local $bits) + ) + ) + ) + ) + (return + (i32.shl + (get_local $low) + (get_local $bits) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.shl + (get_local $low) + (i32.sub + (get_local $bits) + (i32.const 32) + ) + ) + ) + (return + (i32.const 0) + ) + ) + (func $_memcpy (; 61 ;) (param $dest i32) (param $src i32) (param $num i32) (result i32) + (local $ret i32) + (if + (i32.ge_s + (get_local $num) + (i32.const 4096) + ) + (return + (call $_emscripten_memcpy_big + (get_local $dest) + (get_local $src) + (get_local $num) + ) + ) + ) + (set_local $ret + (get_local $dest) + ) + (if + (i32.eq + (i32.and + (get_local $dest) + (i32.const 3) + ) + (i32.and + (get_local $src) + (i32.const 3) + ) + ) + (block + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.and + (get_local $dest) + (i32.const 3) + ) + ) + (br $while-out) + ) + (block + (if + (i32.eq + (get_local $num) + (i32.const 0) + ) + (return + (get_local $ret) + ) + ) + (i32.store8 + (get_local $dest) + (i32.load8_s + (get_local $src) + ) + ) + (set_local $dest + (i32.add + (get_local $dest) + (i32.const 1) + ) + ) + (set_local $src + (i32.add + (get_local $src) + (i32.const 1) + ) + ) + (set_local $num + (i32.sub + (get_local $num) + (i32.const 1) + ) + ) + ) + (br $while-in) + ) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eqz + (i32.ge_s + (get_local $num) + (i32.const 4) + ) + ) + (br $while-out0) + ) + (block + (i32.store + (get_local $dest) + (i32.load + (get_local $src) + ) + ) + (set_local $dest + (i32.add + (get_local $dest) + (i32.const 4) + ) + ) + (set_local $src + (i32.add + (get_local $src) + (i32.const 4) + ) + ) + (set_local $num + (i32.sub + (get_local $num) + (i32.const 4) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eqz + (i32.gt_s + (get_local $num) + (i32.const 0) + ) + ) + (br $while-out2) + ) + (block + (i32.store8 + (get_local $dest) + (i32.load8_s + (get_local $src) + ) + ) + (set_local $dest + (i32.add + (get_local $dest) + (i32.const 1) + ) + ) + (set_local $src + (i32.add + (get_local $src) + (i32.const 1) + ) + ) + (set_local $num + (i32.sub + (get_local $num) + (i32.const 1) + ) + ) + ) + (br $while-in3) + ) + ) + (return + (get_local $ret) + ) + ) + (func $_bitshift64Ashr (; 62 ;) (param $low i32) (param $high i32) (param $bits i32) (result i32) + (local $ander i32) + (if + (i32.lt_s + (get_local $bits) + (i32.const 32) + ) + (block + (set_local $ander + (i32.sub + (i32.shl + (i32.const 1) + (get_local $bits) + ) + (i32.const 1) + ) + ) + (set_global $tempRet0 + (i32.shr_s + (get_local $high) + (get_local $bits) + ) + ) + (return + (i32.or + (i32.shr_u + (get_local $low) + (get_local $bits) + ) + (i32.shl + (i32.and + (get_local $high) + (get_local $ander) + ) + (i32.sub + (i32.const 32) + (get_local $bits) + ) + ) + ) + ) + ) + ) + (set_global $tempRet0 + (if (result i32) + (i32.lt_s + (get_local $high) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + ) + (return + (i32.shr_s + (get_local $high) + (i32.sub + (get_local $bits) + (i32.const 32) + ) + ) + ) + ) + (func $___muldsi3 (; 63 ;) (param $$a i32) (param $$b i32) (result i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$6 i32) + (local $$8 i32) + (local $$11 i32) + (local $$12 i32) + (set_local $$1 + (i32.and + (get_local $$a) + (i32.const 65535) + ) + ) + (set_local $$2 + (i32.and + (get_local $$b) + (i32.const 65535) + ) + ) + (set_local $$3 + (i32.mul + (get_local $$2) + (get_local $$1) + ) + ) + (set_local $$6 + (i32.shr_u + (get_local $$a) + (i32.const 16) + ) + ) + (set_local $$8 + (i32.add + (i32.shr_u + (get_local $$3) + (i32.const 16) + ) + (i32.mul + (get_local $$2) + (get_local $$6) + ) + ) + ) + (set_local $$11 + (i32.shr_u + (get_local $$b) + (i32.const 16) + ) + ) + (set_local $$12 + (i32.mul + (get_local $$11) + (get_local $$1) + ) + ) + (return + (block (result i32) + (block + (set_global $tempRet0 + (i32.add + (i32.add + (i32.shr_u + (get_local $$8) + (i32.const 16) + ) + (i32.mul + (get_local $$11) + (get_local $$6) + ) + ) + (i32.shr_u + (i32.add + (i32.and + (get_local $$8) + (i32.const 65535) + ) + (get_local $$12) + ) + (i32.const 16) + ) + ) + ) + (drop + (get_global $tempRet0) + ) + ) + (i32.or + (i32.const 0) + (i32.or + (i32.shl + (i32.add + (get_local $$8) + (get_local $$12) + ) + (i32.const 16) + ) + (i32.and + (get_local $$3) + (i32.const 65535) + ) + ) + ) + ) + ) + ) + (func $___divdi3 (; 64 ;) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) + (local $$1$0 i32) + (local $$1$1 i32) + (local $$2$0 i32) + (local $$2$1 i32) + (local $$4$0 i32) + (local $$4$1 i32) + (local $$6$0 i32) + (local $$7$0 i32) + (local $$7$1 i32) + (local $$8$0 i32) + (local $$10$0 i32) + (set_local $$1$0 + (i32.or + (i32.shr_s + (get_local $$a$1) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$1$1 + (i32.or + (i32.shr_s + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$2$0 + (i32.or + (i32.shr_s + (get_local $$b$1) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$2$1 + (i32.or + (i32.shr_s + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$4$0 + (call $_i64Subtract + (i32.xor + (get_local $$1$0) + (get_local $$a$0) + ) + (i32.xor + (get_local $$1$1) + (get_local $$a$1) + ) + (get_local $$1$0) + (get_local $$1$1) + ) + ) + (set_local $$4$1 + (get_global $tempRet0) + ) + (set_local $$6$0 + (call $_i64Subtract + (i32.xor + (get_local $$2$0) + (get_local $$b$0) + ) + (i32.xor + (get_local $$2$1) + (get_local $$b$1) + ) + (get_local $$2$0) + (get_local $$2$1) + ) + ) + (set_local $$7$0 + (i32.xor + (get_local $$2$0) + (get_local $$1$0) + ) + ) + (set_local $$7$1 + (i32.xor + (get_local $$2$1) + (get_local $$1$1) + ) + ) + (set_local $$8$0 + (call $___udivmoddi4 + (get_local $$4$0) + (get_local $$4$1) + (get_local $$6$0) + (get_global $tempRet0) + (i32.const 0) + ) + ) + (set_local $$10$0 + (call $_i64Subtract + (i32.xor + (get_local $$8$0) + (get_local $$7$0) + ) + (i32.xor + (get_global $tempRet0) + (get_local $$7$1) + ) + (get_local $$7$0) + (get_local $$7$1) + ) + ) + (return + (get_local $$10$0) + ) + ) + (func $___remdi3 (; 65 ;) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) + (local $$rem i32) + (local $$1$0 i32) + (local $$1$1 i32) + (local $$2$0 i32) + (local $$2$1 i32) + (local $$4$0 i32) + (local $$4$1 i32) + (local $$6$0 i32) + (local $$10$0 i32) + (local $$10$1 i32) + (local $__stackBase__ i32) + (set_local $__stackBase__ + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $$rem + (get_local $__stackBase__) + ) + (set_local $$1$0 + (i32.or + (i32.shr_s + (get_local $$a$1) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$1$1 + (i32.or + (i32.shr_s + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$2$0 + (i32.or + (i32.shr_s + (get_local $$b$1) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$2$1 + (i32.or + (i32.shr_s + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$4$0 + (call $_i64Subtract + (i32.xor + (get_local $$1$0) + (get_local $$a$0) + ) + (i32.xor + (get_local $$1$1) + (get_local $$a$1) + ) + (get_local $$1$0) + (get_local $$1$1) + ) + ) + (set_local $$4$1 + (get_global $tempRet0) + ) + (set_local $$6$0 + (call $_i64Subtract + (i32.xor + (get_local $$2$0) + (get_local $$b$0) + ) + (i32.xor + (get_local $$2$1) + (get_local $$b$1) + ) + (get_local $$2$0) + (get_local $$2$1) + ) + ) + (drop + (call $___udivmoddi4 + (get_local $$4$0) + (get_local $$4$1) + (get_local $$6$0) + (get_global $tempRet0) + (get_local $$rem) + ) + ) + (set_local $$10$0 + (call $_i64Subtract + (i32.xor + (i32.load + (get_local $$rem) + ) + (get_local $$1$0) + ) + (i32.xor + (i32.load + (i32.add + (get_local $$rem) + (i32.const 4) + ) + ) + (get_local $$1$1) + ) + (get_local $$1$0) + (get_local $$1$1) + ) + ) + (set_local $$10$1 + (get_global $tempRet0) + ) + (set_global $STACKTOP + (get_local $__stackBase__) + ) + (return + (block (result i32) + (block + (set_global $tempRet0 + (get_local $$10$1) + ) + (drop + (get_global $tempRet0) + ) + ) + (get_local $$10$0) + ) + ) + ) + (func $___muldi3 (; 66 ;) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) + (local $$x_sroa_0_0_extract_trunc i32) + (local $$y_sroa_0_0_extract_trunc i32) + (local $$1$0 i32) + (local $$1$1 i32) + (local $$2 i32) + (set_local $$x_sroa_0_0_extract_trunc + (get_local $$a$0) + ) + (set_local $$y_sroa_0_0_extract_trunc + (get_local $$b$0) + ) + (set_local $$1$0 + (call $___muldsi3 + (get_local $$x_sroa_0_0_extract_trunc) + (get_local $$y_sroa_0_0_extract_trunc) + ) + ) + (set_local $$1$1 + (get_global $tempRet0) + ) + (set_local $$2 + (i32.mul + (get_local $$a$1) + (get_local $$y_sroa_0_0_extract_trunc) + ) + ) + (return + (block (result i32) + (block + (set_global $tempRet0 + (i32.or + (i32.add + (i32.add + (i32.mul + (get_local $$b$1) + (get_local $$x_sroa_0_0_extract_trunc) + ) + (get_local $$2) + ) + (get_local $$1$1) + ) + (i32.and + (get_local $$1$1) + (i32.const 0) + ) + ) + ) + (drop + (get_global $tempRet0) + ) + ) + (i32.or + (i32.const 0) + (i32.and + (get_local $$1$0) + (i32.const -1) + ) + ) + ) + ) + ) + (func $___udivdi3 (; 67 ;) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) + (local $$1$0 i32) + (set_local $$1$0 + (call $___udivmoddi4 + (get_local $$a$0) + (get_local $$a$1) + (get_local $$b$0) + (get_local $$b$1) + (i32.const 0) + ) + ) + (return + (get_local $$1$0) + ) + ) + (func $___uremdi3 (; 68 ;) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) + (local $$rem i32) + (local $__stackBase__ i32) + (set_local $__stackBase__ + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $$rem + (get_local $__stackBase__) + ) + (drop + (call $___udivmoddi4 + (get_local $$a$0) + (get_local $$a$1) + (get_local $$b$0) + (get_local $$b$1) + (get_local $$rem) + ) + ) + (set_global $STACKTOP + (get_local $__stackBase__) + ) + (return + (block (result i32) + (block + (set_global $tempRet0 + (i32.load + (i32.add + (get_local $$rem) + (i32.const 4) + ) + ) + ) + (drop + (get_global $tempRet0) + ) + ) + (i32.load + (get_local $$rem) + ) + ) + ) + ) + (func $___udivmoddi4 (; 69 ;) (param $xl i32) (param $xh i32) (param $yl i32) (param $yh i32) (param $r i32) (result i32) + (local $x64 i64) + (local $y64 i64) + (set_local $x64 + (i64.or + (i64.extend_u/i32 + (get_local $xl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $xh) + ) + (i64.const 32) + ) + ) + ) + (set_local $y64 + (i64.or + (i64.extend_u/i32 + (get_local $yl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $yh) + ) + (i64.const 32) + ) + ) + ) + (if + (get_local $r) + (i64.store + (get_local $r) + (i64.rem_u + (get_local $x64) + (get_local $y64) + ) + ) + ) + (set_local $x64 + (i64.div_u + (get_local $x64) + (get_local $y64) + ) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $x64) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $x64) + ) + ) + (func $dynCall_ii (; 70 ;) (param $index i32) (param $a1 i32) (result i32) + (return + (call_indirect (type $FUNCSIG$ii) + (get_local $a1) + (i32.add + (i32.and + (get_local $index) + (i32.const 1) + ) + (i32.const 0) + ) + ) + ) + ) + (func $dynCall_iiii (; 71 ;) (param $index i32) (param $a1 i32) (param $a2 i32) (param $a3 i32) (result i32) + (return + (call_indirect (type $FUNCSIG$iiii) + (get_local $a1) + (get_local $a2) + (get_local $a3) + (i32.add + (i32.and + (get_local $index) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (func $dynCall_vi (; 72 ;) (param $index i32) (param $a1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $a1) + (i32.add + (i32.and + (get_local $index) + (i32.const 7) + ) + (i32.const 10) + ) + ) + ) + (func $b0 (; 73 ;) (param $p0 i32) (result i32) + (call $nullFunc_ii + (i32.const 0) + ) + (return + (i32.const 0) + ) + ) + (func $b1 (; 74 ;) (param $p0 i32) (param $p1 i32) (param $p2 i32) (result i32) + (call $nullFunc_iiii + (i32.const 1) + ) + (return + (i32.const 0) + ) + ) + (func $b2 (; 75 ;) (param $p0 i32) + (call $nullFunc_vi + (i32.const 2) + ) + ) +) diff --git a/src/binaryen/test/emcc_hello_world.fromasm.no-opts b/src/binaryen/test/emcc_hello_world.fromasm.no-opts new file mode 100644 index 0000000000..dd84b963a3 --- /dev/null +++ b/src/binaryen/test/emcc_hello_world.fromasm.no-opts @@ -0,0 +1,31629 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$id (func (param f64) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "ABORT" (global $ABORT$asm2wasm$import i32)) + (import "env" "cttz_i8" (global $cttz_i8$asm2wasm$import i32)) + (import "global" "NaN" (global $nan$asm2wasm$import f64)) + (import "global" "Infinity" (global $inf$asm2wasm$import f64)) + (import "env" "abort" (func $abort)) + (import "env" "nullFunc_ii" (func $nullFunc_ii (param i32))) + (import "env" "nullFunc_iiii" (func $nullFunc_iiii (param i32))) + (import "env" "nullFunc_vi" (func $nullFunc_vi (param i32))) + (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) + (import "env" "___lock" (func $___lock (param i32))) + (import "env" "_pthread_self" (func $_pthread_self (result i32))) + (import "env" "_abort" (func $_abort)) + (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) + (import "env" "_sbrk" (func $_sbrk (param i32) (result i32))) + (import "env" "_time" (func $_time (param i32) (result i32))) + (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $___unlock (param i32))) + (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) + (import "env" "_sysconf" (func $_sysconf (param i32) (result i32))) + (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) + (import "asm2wasm" "f64-to-int" (func $f64-to-int (param f64) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 18 18 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $ABORT (mut i32) (get_global $ABORT$asm2wasm$import)) + (global $cttz_i8 (mut i32) (get_global $cttz_i8$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $setjmpId (mut i32) (i32.const 0)) + (global $undef (mut i32) (i32.const 0)) + (global $nan (mut f64) (get_global $nan$asm2wasm$import)) + (global $inf (mut f64) (get_global $inf$asm2wasm$import)) + (global $tempInt (mut i32) (i32.const 0)) + (global $tempBigInt (mut i32) (i32.const 0)) + (global $tempBigIntP (mut i32) (i32.const 0)) + (global $tempBigIntS (mut i32) (i32.const 0)) + (global $tempBigIntR (mut f64) (f64.const 0)) + (global $tempBigIntI (mut i32) (i32.const 0)) + (global $tempBigIntD (mut i32) (i32.const 0)) + (global $tempValue (mut i32) (i32.const 0)) + (global $tempDouble (mut f64) (f64.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (global $tempRet1 (mut i32) (i32.const 0)) + (global $tempRet2 (mut i32) (i32.const 0)) + (global $tempRet3 (mut i32) (i32.const 0)) + (global $tempRet4 (mut i32) (i32.const 0)) + (global $tempRet5 (mut i32) (i32.const 0)) + (global $tempRet6 (mut i32) (i32.const 0)) + (global $tempRet7 (mut i32) (i32.const 0)) + (global $tempRet8 (mut i32) (i32.const 0)) + (global $tempRet9 (mut i32) (i32.const 0)) + (global $tempFloat (mut f64) (f64.const 0)) + (elem (get_global $tableBase) $b0 $___stdio_close $b1 $b1 $___stdout_write $___stdio_seek $___stdio_write $b1 $b1 $b1 $b2 $b2 $b2 $b2 $b2 $_cleanup $b2 $b2) + (export "_i64Subtract" (func $_i64Subtract)) + (export "_free" (func $_free)) + (export "_main" (func $_main)) + (export "_i64Add" (func $_i64Add)) + (export "_memset" (func $_memset)) + (export "_malloc" (func $_malloc)) + (export "_memcpy" (func $_memcpy)) + (export "_bitshift64Lshr" (func $_bitshift64Lshr)) + (export "_fflush" (func $_fflush)) + (export "___errno_location" (func $___errno_location)) + (export "_bitshift64Shl" (func $_bitshift64Shl)) + (export "runPostSets" (func $runPostSets)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackSave" (func $stackSave)) + (export "stackRestore" (func $stackRestore)) + (export "establishStackSpace" (func $establishStackSpace)) + (export "setThrew" (func $setThrew)) + (export "setTempRet0" (func $setTempRet0)) + (export "getTempRet0" (func $getTempRet0)) + (export "dynCall_ii" (func $dynCall_ii)) + (export "dynCall_iiii" (func $dynCall_iiii)) + (export "dynCall_vi" (func $dynCall_vi)) + (export "___udivmoddi4" (func $___udivmoddi4)) + (func $stackAlloc (; 19 ;) (param $size i32) (result i32) + (local $ret i32) + (set_local $ret + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $size) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (return + (get_local $ret) + ) + ) + (func $stackSave (; 20 ;) (result i32) + (return + (get_global $STACKTOP) + ) + ) + (func $stackRestore (; 21 ;) (param $top i32) + (set_global $STACKTOP + (get_local $top) + ) + ) + (func $establishStackSpace (; 22 ;) (param $stackBase i32) (param $stackMax i32) + (set_global $STACKTOP + (get_local $stackBase) + ) + (set_global $STACK_MAX + (get_local $stackMax) + ) + ) + (func $setThrew (; 23 ;) (param $threw i32) (param $value i32) + (if + (i32.eq + (get_global $__THREW__) + (i32.const 0) + ) + (block + (set_global $__THREW__ + (get_local $threw) + ) + (set_global $threwValue + (get_local $value) + ) + ) + ) + ) + (func $copyTempFloat (; 24 ;) (param $ptr i32) + (i32.store8 + (get_global $tempDoublePtr) + (i32.load8_s + (get_local $ptr) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 1) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 1) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 2) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 2) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 3) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 3) + ) + ) + ) + ) + (func $copyTempDouble (; 25 ;) (param $ptr i32) + (i32.store8 + (get_global $tempDoublePtr) + (i32.load8_s + (get_local $ptr) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 1) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 1) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 2) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 2) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 3) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 3) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 4) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 4) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 5) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 5) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 6) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 6) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $tempDoublePtr) + (i32.const 7) + ) + (i32.load8_s + (i32.add + (get_local $ptr) + (i32.const 7) + ) + ) + ) + ) + (func $setTempRet0 (; 26 ;) (param $value i32) + (set_global $tempRet0 + (get_local $value) + ) + ) + (func $getTempRet0 (; 27 ;) (result i32) + (return + (get_global $tempRet0) + ) + ) + (func $_main (; 28 ;) (result i32) + (local $$retval i32) + (local $$vararg_buffer i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$vararg_buffer + (get_local $sp) + ) + (set_local $$retval + (i32.const 0) + ) + (drop + (call $_printf + (i32.const 672) + (get_local $$vararg_buffer) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (i32.const 0) + ) + ) + (func $_frexp (; 29 ;) (param $$x f64) (param $$e i32) (result f64) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 f64) + (local $$call f64) + (local $$conv i32) + (local $$mul f64) + (local $$retval$0 f64) + (local $$storemerge i32) + (local $$sub i32) + (local $$sub8 i32) + (local $$tobool1 i32) + (local $$x$addr$0 f64) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $$x) + ) + (set_local $$0 + (i32.load + (get_global $tempDoublePtr) + ) + ) + (set_local $$1 + (i32.load + (i32.add + (get_global $tempDoublePtr) + (i32.const 4) + ) + ) + ) + (set_local $$2 + (call $_bitshift64Lshr + (get_local $$0) + (get_local $$1) + (i32.const 52) + ) + ) + (set_local $$3 + (get_global $tempRet0) + ) + (set_local $$conv + (i32.and + (get_local $$2) + (i32.const 2047) + ) + ) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default + (i32.sub + (get_local $$conv) + (i32.const 0) + ) + ) + ) + (block + (set_local $$tobool1 + (f64.ne + (get_local $$x) + (f64.const 0) + ) + ) + (if + (get_local $$tobool1) + (block + (set_local $$mul + (f64.mul + (get_local $$x) + (f64.const 18446744073709551615) + ) + ) + (set_local $$call + (call $_frexp + (get_local $$mul) + (get_local $$e) + ) + ) + (set_local $$4 + (i32.load + (get_local $$e) + ) + ) + (set_local $$sub + (i32.add + (get_local $$4) + (i32.const -64) + ) + ) + (set_local $$storemerge + (get_local $$sub) + ) + (set_local $$x$addr$0 + (get_local $$call) + ) + ) + (block + (set_local $$storemerge + (i32.const 0) + ) + (set_local $$x$addr$0 + (get_local $$x) + ) + ) + ) + (i32.store + (get_local $$e) + (get_local $$storemerge) + ) + (set_local $$retval$0 + (get_local $$x$addr$0) + ) + (br $switch) + ) + ) + (block + (set_local $$retval$0 + (get_local $$x) + ) + (br $switch) + ) + ) + (block + (set_local $$sub8 + (i32.add + (get_local $$conv) + (i32.const -1022) + ) + ) + (i32.store + (get_local $$e) + (get_local $$sub8) + ) + (set_local $$5 + (i32.and + (get_local $$1) + (i32.const -2146435073) + ) + ) + (set_local $$6 + (i32.or + (get_local $$5) + (i32.const 1071644672) + ) + ) + (i32.store + (get_global $tempDoublePtr) + (get_local $$0) + ) + (i32.store + (i32.add + (get_global $tempDoublePtr) + (i32.const 4) + ) + (get_local $$6) + ) + (set_local $$7 + (f64.load + (get_global $tempDoublePtr) + ) + ) + (set_local $$retval$0 + (get_local $$7) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_frexpl (; 30 ;) (param $$x f64) (param $$e i32) (result f64) + (local $$call f64) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$call + (call $_frexp + (get_local $$x) + (get_local $$e) + ) + ) + (return + (get_local $$call) + ) + ) + (func $_strerror (; 31 ;) (param $$e i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$arrayidx i32) + (local $$cmp i32) + (local $$conv i32) + (local $$dec i32) + (local $$i$012 i32) + (local $$i$012$lcssa i32) + (local $$i$111 i32) + (local $$inc i32) + (local $$incdec$ptr i32) + (local $$incdec$ptr$lcssa i32) + (local $$s$0$lcssa i32) + (local $$s$010 i32) + (local $$s$1 i32) + (local $$tobool i32) + (local $$tobool5 i32) + (local $$tobool5$9 i32) + (local $$tobool8 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$i$012 + (i32.const 0) + ) + (loop $while-in + (block $while-out + (set_local $$arrayidx + (i32.add + (i32.const 687) + (get_local $$i$012) + ) + ) + (set_local $$0 + (i32.load8_s + (get_local $$arrayidx) + ) + ) + (set_local $$conv + (i32.and + (get_local $$0) + (i32.const 255) + ) + ) + (set_local $$cmp + (i32.eq + (get_local $$conv) + (get_local $$e) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $$i$012$lcssa + (get_local $$i$012) + ) + (set_local $label + (i32.const 2) + ) + (br $while-out) + ) + ) + (set_local $$inc + (i32.add + (get_local $$i$012) + (i32.const 1) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$inc) + (i32.const 87) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$i$111 + (i32.const 87) + ) + (set_local $$s$010 + (i32.const 775) + ) + (set_local $label + (i32.const 5) + ) + (br $while-out) + ) + (set_local $$i$012 + (get_local $$inc) + ) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 2) + ) + (block + (set_local $$tobool5$9 + (i32.eq + (get_local $$i$012$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$tobool5$9) + (set_local $$s$0$lcssa + (i32.const 775) + ) + (block + (set_local $$i$111 + (get_local $$i$012$lcssa) + ) + (set_local $$s$010 + (i32.const 775) + ) + (set_local $label + (i32.const 5) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 5) + ) + (loop $while-in1 + (block $while-out0 + (set_local $label + (i32.const 0) + ) + (set_local $$s$1 + (get_local $$s$010) + ) + (loop $while-in3 + (block $while-out2 + (set_local $$1 + (i32.load8_s + (get_local $$s$1) + ) + ) + (set_local $$tobool8 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$1) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$s$1) + (i32.const 1) + ) + ) + (if + (get_local $$tobool8) + (block + (set_local $$incdec$ptr$lcssa + (get_local $$incdec$ptr) + ) + (br $while-out2) + ) + (set_local $$s$1 + (get_local $$incdec$ptr) + ) + ) + (br $while-in3) + ) + ) + (set_local $$dec + (i32.add + (get_local $$i$111) + (i32.const -1) + ) + ) + (set_local $$tobool5 + (i32.eq + (get_local $$dec) + (i32.const 0) + ) + ) + (if + (get_local $$tobool5) + (block + (set_local $$s$0$lcssa + (get_local $$incdec$ptr$lcssa) + ) + (br $while-out0) + ) + (block + (set_local $$i$111 + (get_local $$dec) + ) + (set_local $$s$010 + (get_local $$incdec$ptr$lcssa) + ) + (set_local $label + (i32.const 5) + ) + ) + ) + (br $while-in1) + ) + ) + ) + (return + (get_local $$s$0$lcssa) + ) + ) + (func $___errno_location (; 32 ;) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$call$i i32) + (local $$errno_ptr i32) + (local $$retval$0 i32) + (local $$tobool i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$0 + (i32.load + (i32.const 16) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$0) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (set_local $$retval$0 + (i32.const 60) + ) + (block + (set_local $$call$i + (call $_pthread_self) + ) + (set_local $$errno_ptr + (i32.add + (get_local $$call$i) + (i32.const 60) + ) + ) + (set_local $$1 + (i32.load + (get_local $$errno_ptr) + ) + ) + (set_local $$retval$0 + (get_local $$1) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $___stdio_close (; 33 ;) (param $$f i32) (result i32) + (local $$0 i32) + (local $$call i32) + (local $$call1 i32) + (local $$fd i32) + (local $$vararg_buffer i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$vararg_buffer + (get_local $sp) + ) + (set_local $$fd + (i32.add + (get_local $$f) + (i32.const 60) + ) + ) + (set_local $$0 + (i32.load + (get_local $$fd) + ) + ) + (i32.store + (get_local $$vararg_buffer) + (get_local $$0) + ) + (set_local $$call + (call $___syscall6 + (i32.const 6) + (get_local $$vararg_buffer) + ) + ) + (set_local $$call1 + (call $___syscall_ret + (get_local $$call) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$call1) + ) + ) + (func $___stdout_write (; 34 ;) (param $$f i32) (param $$buf i32) (param $$len i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$and i32) + (local $$call i32) + (local $$call3 i32) + (local $$fd i32) + (local $$lbf i32) + (local $$tio i32) + (local $$tobool i32) + (local $$tobool2 i32) + (local $$vararg_buffer i32) + (local $$vararg_ptr1 i32) + (local $$vararg_ptr2 i32) + (local $$write i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 80) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$vararg_buffer + (get_local $sp) + ) + (set_local $$tio + (i32.add + (get_local $sp) + (i32.const 12) + ) + ) + (set_local $$write + (i32.add + (get_local $$f) + (i32.const 36) + ) + ) + (i32.store + (get_local $$write) + (i32.const 4) + ) + (set_local $$0 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and + (i32.and + (get_local $$0) + (i32.const 64) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$and) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$fd + (i32.add + (get_local $$f) + (i32.const 60) + ) + ) + (set_local $$1 + (i32.load + (get_local $$fd) + ) + ) + (i32.store + (get_local $$vararg_buffer) + (get_local $$1) + ) + (set_local $$vararg_ptr1 + (i32.add + (get_local $$vararg_buffer) + (i32.const 4) + ) + ) + (i32.store + (get_local $$vararg_ptr1) + (i32.const 21505) + ) + (set_local $$vararg_ptr2 + (i32.add + (get_local $$vararg_buffer) + (i32.const 8) + ) + ) + (i32.store + (get_local $$vararg_ptr2) + (get_local $$tio) + ) + (set_local $$call + (call $___syscall54 + (i32.const 54) + (get_local $$vararg_buffer) + ) + ) + (set_local $$tobool2 + (i32.eq + (get_local $$call) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool2) + ) + (block + (set_local $$lbf + (i32.add + (get_local $$f) + (i32.const 75) + ) + ) + (i32.store8 + (get_local $$lbf) + (i32.const -1) + ) + ) + ) + ) + ) + (set_local $$call3 + (call $___stdio_write + (get_local $$f) + (get_local $$buf) + (get_local $$len) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$call3) + ) + ) + (func $___stdio_seek (; 35 ;) (param $$f i32) (param $$off i32) (param $$whence i32) (result i32) + (local $$$pre i32) + (local $$0 i32) + (local $$1 i32) + (local $$call i32) + (local $$call1 i32) + (local $$cmp i32) + (local $$fd i32) + (local $$ret i32) + (local $$vararg_buffer i32) + (local $$vararg_ptr1 i32) + (local $$vararg_ptr2 i32) + (local $$vararg_ptr3 i32) + (local $$vararg_ptr4 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$vararg_buffer + (get_local $sp) + ) + (set_local $$ret + (i32.add + (get_local $sp) + (i32.const 20) + ) + ) + (set_local $$fd + (i32.add + (get_local $$f) + (i32.const 60) + ) + ) + (set_local $$0 + (i32.load + (get_local $$fd) + ) + ) + (i32.store + (get_local $$vararg_buffer) + (get_local $$0) + ) + (set_local $$vararg_ptr1 + (i32.add + (get_local $$vararg_buffer) + (i32.const 4) + ) + ) + (i32.store + (get_local $$vararg_ptr1) + (i32.const 0) + ) + (set_local $$vararg_ptr2 + (i32.add + (get_local $$vararg_buffer) + (i32.const 8) + ) + ) + (i32.store + (get_local $$vararg_ptr2) + (get_local $$off) + ) + (set_local $$vararg_ptr3 + (i32.add + (get_local $$vararg_buffer) + (i32.const 12) + ) + ) + (i32.store + (get_local $$vararg_ptr3) + (get_local $$ret) + ) + (set_local $$vararg_ptr4 + (i32.add + (get_local $$vararg_buffer) + (i32.const 16) + ) + ) + (i32.store + (get_local $$vararg_ptr4) + (get_local $$whence) + ) + (set_local $$call + (call $___syscall140 + (i32.const 140) + (get_local $$vararg_buffer) + ) + ) + (set_local $$call1 + (call $___syscall_ret + (get_local $$call) + ) + ) + (set_local $$cmp + (i32.lt_s + (get_local $$call1) + (i32.const 0) + ) + ) + (if + (get_local $$cmp) + (block + (i32.store + (get_local $$ret) + (i32.const -1) + ) + (set_local $$1 + (i32.const -1) + ) + ) + (block + (set_local $$$pre + (i32.load + (get_local $$ret) + ) + ) + (set_local $$1 + (get_local $$$pre) + ) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$1) + ) + ) + (func $_fflush (; 36 ;) (param $$f i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$call i32) + (local $$call1 i32) + (local $$call1$18 i32) + (local $$call16 i32) + (local $$call22 i32) + (local $$call7 i32) + (local $$cmp i32) + (local $$cmp14 i32) + (local $$cmp20 i32) + (local $$cond10 i32) + (local $$cond19 i32) + (local $$f$addr$0 i32) + (local $$f$addr$0$19 i32) + (local $$f$addr$022 i32) + (local $$lock i32) + (local $$lock13 i32) + (local $$next i32) + (local $$or i32) + (local $$phitmp i32) + (local $$r$0$lcssa i32) + (local $$r$021 i32) + (local $$r$1 i32) + (local $$retval$0 i32) + (local $$tobool i32) + (local $$tobool11 i32) + (local $$tobool11$20 i32) + (local $$tobool24 i32) + (local $$tobool5 i32) + (local $$wbase i32) + (local $$wpos i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$tobool + (i32.eq + (get_local $$f) + (i32.const 0) + ) + ) + (block $do-once + (if + (get_local $$tobool) + (block + (set_local $$1 + (i32.load + (i32.const 12) + ) + ) + (set_local $$tobool5 + (i32.eq + (get_local $$1) + (i32.const 0) + ) + ) + (if + (get_local $$tobool5) + (set_local $$cond10 + (i32.const 0) + ) + (block + (set_local $$2 + (i32.load + (i32.const 12) + ) + ) + (set_local $$call7 + (call $_fflush + (get_local $$2) + ) + ) + (set_local $$cond10 + (get_local $$call7) + ) + ) + ) + (call $___lock + (i32.const 44) + ) + (set_local $$f$addr$0$19 + (i32.load + (i32.const 40) + ) + ) + (set_local $$tobool11$20 + (i32.eq + (get_local $$f$addr$0$19) + (i32.const 0) + ) + ) + (if + (get_local $$tobool11$20) + (set_local $$r$0$lcssa + (get_local $$cond10) + ) + (block + (set_local $$f$addr$022 + (get_local $$f$addr$0$19) + ) + (set_local $$r$021 + (get_local $$cond10) + ) + (loop $while-in + (block $while-out + (set_local $$lock13 + (i32.add + (get_local $$f$addr$022) + (i32.const 76) + ) + ) + (set_local $$3 + (i32.load + (get_local $$lock13) + ) + ) + (set_local $$cmp14 + (i32.gt_s + (get_local $$3) + (i32.const -1) + ) + ) + (if + (get_local $$cmp14) + (block + (set_local $$call16 + (call $___lockfile + (get_local $$f$addr$022) + ) + ) + (set_local $$cond19 + (get_local $$call16) + ) + ) + (set_local $$cond19 + (i32.const 0) + ) + ) + (set_local $$wpos + (i32.add + (get_local $$f$addr$022) + (i32.const 20) + ) + ) + (set_local $$4 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$wbase + (i32.add + (get_local $$f$addr$022) + (i32.const 28) + ) + ) + (set_local $$5 + (i32.load + (get_local $$wbase) + ) + ) + (set_local $$cmp20 + (i32.gt_u + (get_local $$4) + (get_local $$5) + ) + ) + (if + (get_local $$cmp20) + (block + (set_local $$call22 + (call $___fflush_unlocked + (get_local $$f$addr$022) + ) + ) + (set_local $$or + (i32.or + (get_local $$call22) + (get_local $$r$021) + ) + ) + (set_local $$r$1 + (get_local $$or) + ) + ) + (set_local $$r$1 + (get_local $$r$021) + ) + ) + (set_local $$tobool24 + (i32.eq + (get_local $$cond19) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool24) + ) + (call $___unlockfile + (get_local $$f$addr$022) + ) + ) + (set_local $$next + (i32.add + (get_local $$f$addr$022) + (i32.const 56) + ) + ) + (set_local $$f$addr$0 + (i32.load + (get_local $$next) + ) + ) + (set_local $$tobool11 + (i32.eq + (get_local $$f$addr$0) + (i32.const 0) + ) + ) + (if + (get_local $$tobool11) + (block + (set_local $$r$0$lcssa + (get_local $$r$1) + ) + (br $while-out) + ) + (block + (set_local $$f$addr$022 + (get_local $$f$addr$0) + ) + (set_local $$r$021 + (get_local $$r$1) + ) + ) + ) + (br $while-in) + ) + ) + ) + ) + (call $___unlock + (i32.const 44) + ) + (set_local $$retval$0 + (get_local $$r$0$lcssa) + ) + ) + (block + (set_local $$lock + (i32.add + (get_local $$f) + (i32.const 76) + ) + ) + (set_local $$0 + (i32.load + (get_local $$lock) + ) + ) + (set_local $$cmp + (i32.gt_s + (get_local $$0) + (i32.const -1) + ) + ) + (if + (i32.eqz + (get_local $$cmp) + ) + (block + (set_local $$call1$18 + (call $___fflush_unlocked + (get_local $$f) + ) + ) + (set_local $$retval$0 + (get_local $$call1$18) + ) + (br $do-once) + ) + ) + (set_local $$call + (call $___lockfile + (get_local $$f) + ) + ) + (set_local $$phitmp + (i32.eq + (get_local $$call) + (i32.const 0) + ) + ) + (set_local $$call1 + (call $___fflush_unlocked + (get_local $$f) + ) + ) + (if + (get_local $$phitmp) + (set_local $$retval$0 + (get_local $$call1) + ) + (block + (call $___unlockfile + (get_local $$f) + ) + (set_local $$retval$0 + (get_local $$call1) + ) + ) + ) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_printf (; 37 ;) (param $$fmt i32) (param $$varargs i32) (result i32) + (local $$0 i32) + (local $$ap i32) + (local $$call i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$ap + (get_local $sp) + ) + (i32.store + (get_local $$ap) + (get_local $$varargs) + ) + (set_local $$0 + (i32.load + (i32.const 8) + ) + ) + (set_local $$call + (call $_vfprintf + (get_local $$0) + (get_local $$fmt) + (get_local $$ap) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$call) + ) + ) + (func $___lockfile (; 38 ;) (param $$f i32) (result i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (return + (i32.const 0) + ) + ) + (func $___unlockfile (; 39 ;) (param $$f i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (return) + ) + (func $___stdio_write (; 40 ;) (param $$f i32) (param $$buf i32) (param $$len i32) (result i32) + (local $$$pre i32) + (local $$0 i32) + (local $$1 i32) + (local $$10 i32) + (local $$11 i32) + (local $$12 i32) + (local $$13 i32) + (local $$14 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 i32) + (local $$8 i32) + (local $$9 i32) + (local $$add i32) + (local $$add$ptr i32) + (local $$add$ptr41 i32) + (local $$add$ptr46 i32) + (local $$buf31 i32) + (local $$buf_size i32) + (local $$call i32) + (local $$call10 i32) + (local $$call7 i32) + (local $$call9 i32) + (local $$cmp i32) + (local $$cmp17 i32) + (local $$cmp22 i32) + (local $$cmp29 i32) + (local $$cmp38 i32) + (local $$cnt$0 i32) + (local $$cnt$1 i32) + (local $$dec i32) + (local $$fd8 i32) + (local $$incdec$ptr i32) + (local $$iov$0 i32) + (local $$iov$0$lcssa57 i32) + (local $$iov$1 i32) + (local $$iov_base2 i32) + (local $$iov_len i32) + (local $$iov_len24 i32) + (local $$iov_len28 i32) + (local $$iov_len3 i32) + (local $$iov_len50 i32) + (local $$iov_len50$phi$trans$insert i32) + (local $$iovcnt$0 i32) + (local $$iovcnt$0$lcssa58 i32) + (local $$iovcnt$1 i32) + (local $$iovs i32) + (local $$or i32) + (local $$rem$0 i32) + (local $$retval$0 i32) + (local $$sub i32) + (local $$sub$ptr$sub i32) + (local $$sub26 i32) + (local $$sub36 i32) + (local $$sub51 i32) + (local $$tobool i32) + (local $$vararg_buffer i32) + (local $$vararg_buffer3 i32) + (local $$vararg_ptr1 i32) + (local $$vararg_ptr2 i32) + (local $$vararg_ptr6 i32) + (local $$vararg_ptr7 i32) + (local $$wbase i32) + (local $$wend i32) + (local $$wend19 i32) + (local $$wpos i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$vararg_buffer3 + (i32.add + (get_local $sp) + (i32.const 16) + ) + ) + (set_local $$vararg_buffer + (get_local $sp) + ) + (set_local $$iovs + (i32.add + (get_local $sp) + (i32.const 32) + ) + ) + (set_local $$wbase + (i32.add + (get_local $$f) + (i32.const 28) + ) + ) + (set_local $$0 + (i32.load + (get_local $$wbase) + ) + ) + (i32.store + (get_local $$iovs) + (get_local $$0) + ) + (set_local $$iov_len + (i32.add + (get_local $$iovs) + (i32.const 4) + ) + ) + (set_local $$wpos + (i32.add + (get_local $$f) + (i32.const 20) + ) + ) + (set_local $$1 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$sub$ptr$sub + (i32.sub + (get_local $$1) + (get_local $$0) + ) + ) + (i32.store + (get_local $$iov_len) + (get_local $$sub$ptr$sub) + ) + (set_local $$iov_base2 + (i32.add + (get_local $$iovs) + (i32.const 8) + ) + ) + (i32.store + (get_local $$iov_base2) + (get_local $$buf) + ) + (set_local $$iov_len3 + (i32.add + (get_local $$iovs) + (i32.const 12) + ) + ) + (i32.store + (get_local $$iov_len3) + (get_local $$len) + ) + (set_local $$add + (i32.add + (get_local $$sub$ptr$sub) + (get_local $$len) + ) + ) + (set_local $$fd8 + (i32.add + (get_local $$f) + (i32.const 60) + ) + ) + (set_local $$buf31 + (i32.add + (get_local $$f) + (i32.const 44) + ) + ) + (set_local $$iov$0 + (get_local $$iovs) + ) + (set_local $$iovcnt$0 + (i32.const 2) + ) + (set_local $$rem$0 + (get_local $$add) + ) + (loop $while-in + (block $while-out + (set_local $$2 + (i32.load + (i32.const 16) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$2) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$4 + (i32.load + (get_local $$fd8) + ) + ) + (i32.store + (get_local $$vararg_buffer3) + (get_local $$4) + ) + (set_local $$vararg_ptr6 + (i32.add + (get_local $$vararg_buffer3) + (i32.const 4) + ) + ) + (i32.store + (get_local $$vararg_ptr6) + (get_local $$iov$0) + ) + (set_local $$vararg_ptr7 + (i32.add + (get_local $$vararg_buffer3) + (i32.const 8) + ) + ) + (i32.store + (get_local $$vararg_ptr7) + (get_local $$iovcnt$0) + ) + (set_local $$call9 + (call $___syscall146 + (i32.const 146) + (get_local $$vararg_buffer3) + ) + ) + (set_local $$call10 + (call $___syscall_ret + (get_local $$call9) + ) + ) + (set_local $$cnt$0 + (get_local $$call10) + ) + ) + (block + (call $_pthread_cleanup_push + (i32.const 5) + (get_local $$f) + ) + (set_local $$3 + (i32.load + (get_local $$fd8) + ) + ) + (i32.store + (get_local $$vararg_buffer) + (get_local $$3) + ) + (set_local $$vararg_ptr1 + (i32.add + (get_local $$vararg_buffer) + (i32.const 4) + ) + ) + (i32.store + (get_local $$vararg_ptr1) + (get_local $$iov$0) + ) + (set_local $$vararg_ptr2 + (i32.add + (get_local $$vararg_buffer) + (i32.const 8) + ) + ) + (i32.store + (get_local $$vararg_ptr2) + (get_local $$iovcnt$0) + ) + (set_local $$call + (call $___syscall146 + (i32.const 146) + (get_local $$vararg_buffer) + ) + ) + (set_local $$call7 + (call $___syscall_ret + (get_local $$call) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + (set_local $$cnt$0 + (get_local $$call7) + ) + ) + ) + (set_local $$cmp + (i32.eq + (get_local $$rem$0) + (get_local $$cnt$0) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $label + (i32.const 6) + ) + (br $while-out) + ) + ) + (set_local $$cmp17 + (i32.lt_s + (get_local $$cnt$0) + (i32.const 0) + ) + ) + (if + (get_local $$cmp17) + (block + (set_local $$iov$0$lcssa57 + (get_local $$iov$0) + ) + (set_local $$iovcnt$0$lcssa58 + (get_local $$iovcnt$0) + ) + (set_local $label + (i32.const 8) + ) + (br $while-out) + ) + ) + (set_local $$sub26 + (i32.sub + (get_local $$rem$0) + (get_local $$cnt$0) + ) + ) + (set_local $$iov_len28 + (i32.add + (get_local $$iov$0) + (i32.const 4) + ) + ) + (set_local $$10 + (i32.load + (get_local $$iov_len28) + ) + ) + (set_local $$cmp29 + (i32.gt_u + (get_local $$cnt$0) + (get_local $$10) + ) + ) + (if + (get_local $$cmp29) + (block + (set_local $$11 + (i32.load + (get_local $$buf31) + ) + ) + (i32.store + (get_local $$wbase) + (get_local $$11) + ) + (i32.store + (get_local $$wpos) + (get_local $$11) + ) + (set_local $$sub36 + (i32.sub + (get_local $$cnt$0) + (get_local $$10) + ) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$iov$0) + (i32.const 8) + ) + ) + (set_local $$dec + (i32.add + (get_local $$iovcnt$0) + (i32.const -1) + ) + ) + (set_local $$iov_len50$phi$trans$insert + (i32.add + (get_local $$iov$0) + (i32.const 12) + ) + ) + (set_local $$$pre + (i32.load + (get_local $$iov_len50$phi$trans$insert) + ) + ) + (set_local $$14 + (get_local $$$pre) + ) + (set_local $$cnt$1 + (get_local $$sub36) + ) + (set_local $$iov$1 + (get_local $$incdec$ptr) + ) + (set_local $$iovcnt$1 + (get_local $$dec) + ) + ) + (block + (set_local $$cmp38 + (i32.eq + (get_local $$iovcnt$0) + (i32.const 2) + ) + ) + (if + (get_local $$cmp38) + (block + (set_local $$12 + (i32.load + (get_local $$wbase) + ) + ) + (set_local $$add$ptr41 + (i32.add + (get_local $$12) + (get_local $$cnt$0) + ) + ) + (i32.store + (get_local $$wbase) + (get_local $$add$ptr41) + ) + (set_local $$14 + (get_local $$10) + ) + (set_local $$cnt$1 + (get_local $$cnt$0) + ) + (set_local $$iov$1 + (get_local $$iov$0) + ) + (set_local $$iovcnt$1 + (i32.const 2) + ) + ) + (block + (set_local $$14 + (get_local $$10) + ) + (set_local $$cnt$1 + (get_local $$cnt$0) + ) + (set_local $$iov$1 + (get_local $$iov$0) + ) + (set_local $$iovcnt$1 + (get_local $$iovcnt$0) + ) + ) + ) + ) + ) + (set_local $$13 + (i32.load + (get_local $$iov$1) + ) + ) + (set_local $$add$ptr46 + (i32.add + (get_local $$13) + (get_local $$cnt$1) + ) + ) + (i32.store + (get_local $$iov$1) + (get_local $$add$ptr46) + ) + (set_local $$iov_len50 + (i32.add + (get_local $$iov$1) + (i32.const 4) + ) + ) + (set_local $$sub51 + (i32.sub + (get_local $$14) + (get_local $$cnt$1) + ) + ) + (i32.store + (get_local $$iov_len50) + (get_local $$sub51) + ) + (set_local $$iov$0 + (get_local $$iov$1) + ) + (set_local $$iovcnt$0 + (get_local $$iovcnt$1) + ) + (set_local $$rem$0 + (get_local $$sub26) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 6) + ) + (block + (set_local $$5 + (i32.load + (get_local $$buf31) + ) + ) + (set_local $$buf_size + (i32.add + (get_local $$f) + (i32.const 48) + ) + ) + (set_local $$6 + (i32.load + (get_local $$buf_size) + ) + ) + (set_local $$add$ptr + (i32.add + (get_local $$5) + (get_local $$6) + ) + ) + (set_local $$wend + (i32.add + (get_local $$f) + (i32.const 16) + ) + ) + (i32.store + (get_local $$wend) + (get_local $$add$ptr) + ) + (set_local $$7 + (get_local $$5) + ) + (i32.store + (get_local $$wbase) + (get_local $$7) + ) + (i32.store + (get_local $$wpos) + (get_local $$7) + ) + (set_local $$retval$0 + (get_local $$len) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 8) + ) + (block + (set_local $$wend19 + (i32.add + (get_local $$f) + (i32.const 16) + ) + ) + (i32.store + (get_local $$wend19) + (i32.const 0) + ) + (i32.store + (get_local $$wbase) + (i32.const 0) + ) + (i32.store + (get_local $$wpos) + (i32.const 0) + ) + (set_local $$8 + (i32.load + (get_local $$f) + ) + ) + (set_local $$or + (i32.or + (get_local $$8) + (i32.const 32) + ) + ) + (i32.store + (get_local $$f) + (get_local $$or) + ) + (set_local $$cmp22 + (i32.eq + (get_local $$iovcnt$0$lcssa58) + (i32.const 2) + ) + ) + (if + (get_local $$cmp22) + (set_local $$retval$0 + (i32.const 0) + ) + (block + (set_local $$iov_len24 + (i32.add + (get_local $$iov$0$lcssa57) + (i32.const 4) + ) + ) + (set_local $$9 + (i32.load + (get_local $$iov_len24) + ) + ) + (set_local $$sub + (i32.sub + (get_local $$len) + (get_local $$9) + ) + ) + (set_local $$retval$0 + (get_local $$sub) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_vfprintf (; 41 ;) (param $$f i32) (param $$fmt i32) (param $$ap i32) (result i32) + (local $$$call21 i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 i32) + (local $$add$ptr i32) + (local $$and i32) + (local $$and11 i32) + (local $$and36 i32) + (local $$ap2 i32) + (local $$buf i32) + (local $$buf_size i32) + (local $$call i32) + (local $$call21 i32) + (local $$call21$30 i32) + (local $$call6 i32) + (local $$cmp i32) + (local $$cmp5 i32) + (local $$cmp7 i32) + (local $$cond i32) + (local $$internal_buf i32) + (local $$lock i32) + (local $$mode i32) + (local $$nl_arg i32) + (local $$nl_type i32) + (local $$or i32) + (local $$ret$1 i32) + (local $$ret$1$ i32) + (local $$retval$0 i32) + (local $$tobool i32) + (local $$tobool22 i32) + (local $$tobool26 i32) + (local $$tobool37 i32) + (local $$tobool41 i32) + (local $$vacopy_currentptr i32) + (local $$wbase i32) + (local $$wend i32) + (local $$wpos i32) + (local $$write i32) + (local $dest i32) + (local $label i32) + (local $sp i32) + (local $stop i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 224) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$ap2 + (i32.add + (get_local $sp) + (i32.const 120) + ) + ) + (set_local $$nl_type + (i32.add + (get_local $sp) + (i32.const 80) + ) + ) + (set_local $$nl_arg + (get_local $sp) + ) + (set_local $$internal_buf + (i32.add + (get_local $sp) + (i32.const 136) + ) + ) + (set_local $dest + (get_local $$nl_type) + ) + (set_local $stop + (i32.add + (get_local $dest) + (i32.const 40) + ) + ) + (loop $do-in + (block $do-out + (i32.store + (get_local $dest) + (i32.const 0) + ) + (set_local $dest + (i32.add + (get_local $dest) + (i32.const 4) + ) + ) + (br_if $do-in + (i32.lt_s + (get_local $dest) + (get_local $stop) + ) + ) + ) + ) + (set_local $$vacopy_currentptr + (i32.load + (get_local $$ap) + ) + ) + (i32.store + (get_local $$ap2) + (get_local $$vacopy_currentptr) + ) + (set_local $$call + (call $_printf_core + (i32.const 0) + (get_local $$fmt) + (get_local $$ap2) + (get_local $$nl_arg) + (get_local $$nl_type) + ) + ) + (set_local $$cmp + (i32.lt_s + (get_local $$call) + (i32.const 0) + ) + ) + (if + (get_local $$cmp) + (set_local $$retval$0 + (i32.const -1) + ) + (block + (set_local $$lock + (i32.add + (get_local $$f) + (i32.const 76) + ) + ) + (set_local $$0 + (i32.load + (get_local $$lock) + ) + ) + (set_local $$cmp5 + (i32.gt_s + (get_local $$0) + (i32.const -1) + ) + ) + (if + (get_local $$cmp5) + (block + (set_local $$call6 + (call $___lockfile + (get_local $$f) + ) + ) + (set_local $$cond + (get_local $$call6) + ) + ) + (set_local $$cond + (i32.const 0) + ) + ) + (set_local $$1 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and + (i32.and + (get_local $$1) + (i32.const 32) + ) + ) + (set_local $$mode + (i32.add + (get_local $$f) + (i32.const 74) + ) + ) + (set_local $$2 + (i32.load8_s + (get_local $$mode) + ) + ) + (set_local $$cmp7 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $$2) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 1) + ) + ) + (if + (get_local $$cmp7) + (block + (set_local $$and11 + (i32.and + (get_local $$1) + (i32.const -33) + ) + ) + (i32.store + (get_local $$f) + (get_local $$and11) + ) + ) + ) + (set_local $$buf_size + (i32.add + (get_local $$f) + (i32.const 48) + ) + ) + (set_local $$3 + (i32.load + (get_local $$buf_size) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$3) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$buf + (i32.add + (get_local $$f) + (i32.const 44) + ) + ) + (set_local $$4 + (i32.load + (get_local $$buf) + ) + ) + (i32.store + (get_local $$buf) + (get_local $$internal_buf) + ) + (set_local $$wbase + (i32.add + (get_local $$f) + (i32.const 28) + ) + ) + (i32.store + (get_local $$wbase) + (get_local $$internal_buf) + ) + (set_local $$wpos + (i32.add + (get_local $$f) + (i32.const 20) + ) + ) + (i32.store + (get_local $$wpos) + (get_local $$internal_buf) + ) + (i32.store + (get_local $$buf_size) + (i32.const 80) + ) + (set_local $$add$ptr + (i32.add + (get_local $$internal_buf) + (i32.const 80) + ) + ) + (set_local $$wend + (i32.add + (get_local $$f) + (i32.const 16) + ) + ) + (i32.store + (get_local $$wend) + (get_local $$add$ptr) + ) + (set_local $$call21 + (call $_printf_core + (get_local $$f) + (get_local $$fmt) + (get_local $$ap2) + (get_local $$nl_arg) + (get_local $$nl_type) + ) + ) + (set_local $$tobool22 + (i32.eq + (get_local $$4) + (i32.const 0) + ) + ) + (if + (get_local $$tobool22) + (set_local $$ret$1 + (get_local $$call21) + ) + (block + (set_local $$write + (i32.add + (get_local $$f) + (i32.const 36) + ) + ) + (set_local $$5 + (i32.load + (get_local $$write) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $$f) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (get_local $$5) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (set_local $$6 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$tobool26 + (i32.eq + (get_local $$6) + (i32.const 0) + ) + ) + (set_local $$$call21 + (if (result i32) + (get_local $$tobool26) + (i32.const -1) + (get_local $$call21) + ) + ) + (i32.store + (get_local $$buf) + (get_local $$4) + ) + (i32.store + (get_local $$buf_size) + (i32.const 0) + ) + (i32.store + (get_local $$wend) + (i32.const 0) + ) + (i32.store + (get_local $$wbase) + (i32.const 0) + ) + (i32.store + (get_local $$wpos) + (i32.const 0) + ) + (set_local $$ret$1 + (get_local $$$call21) + ) + ) + ) + ) + (block + (set_local $$call21$30 + (call $_printf_core + (get_local $$f) + (get_local $$fmt) + (get_local $$ap2) + (get_local $$nl_arg) + (get_local $$nl_type) + ) + ) + (set_local $$ret$1 + (get_local $$call21$30) + ) + ) + ) + (set_local $$7 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and36 + (i32.and + (get_local $$7) + (i32.const 32) + ) + ) + (set_local $$tobool37 + (i32.eq + (get_local $$and36) + (i32.const 0) + ) + ) + (set_local $$ret$1$ + (if (result i32) + (get_local $$tobool37) + (get_local $$ret$1) + (i32.const -1) + ) + ) + (set_local $$or + (i32.or + (get_local $$7) + (get_local $$and) + ) + ) + (i32.store + (get_local $$f) + (get_local $$or) + ) + (set_local $$tobool41 + (i32.eq + (get_local $$cond) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool41) + ) + (call $___unlockfile + (get_local $$f) + ) + ) + (set_local $$retval$0 + (get_local $$ret$1$) + ) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$retval$0) + ) + ) + (func $___fwritex (; 42 ;) (param $$s i32) (param $$l i32) (param $$f i32) (result i32) + (local $$$pre i32) + (local $$$pre31 i32) + (local $$0 i32) + (local $$1 i32) + (local $$10 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 i32) + (local $$8 i32) + (local $$9 i32) + (local $$add i32) + (local $$add$ptr i32) + (local $$add$ptr26 i32) + (local $$arrayidx i32) + (local $$call i32) + (local $$call16 i32) + (local $$call4 i32) + (local $$cmp i32) + (local $$cmp11 i32) + (local $$cmp17 i32) + (local $$cmp6 i32) + (local $$i$0 i32) + (local $$i$0$lcssa36 i32) + (local $$i$1 i32) + (local $$l$addr$0 i32) + (local $$lbf i32) + (local $$retval$0 i32) + (local $$s$addr$0 i32) + (local $$sub i32) + (local $$sub$ptr$sub i32) + (local $$sub21 i32) + (local $$tobool i32) + (local $$tobool1 i32) + (local $$tobool9 i32) + (local $$wend i32) + (local $$wpos i32) + (local $$write i32) + (local $$write15 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$wend + (i32.add + (get_local $$f) + (i32.const 16) + ) + ) + (set_local $$0 + (i32.load + (get_local $$wend) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$0) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$call + (call $___towrite + (get_local $$f) + ) + ) + (set_local $$tobool1 + (i32.eq + (get_local $$call) + (i32.const 0) + ) + ) + (if + (get_local $$tobool1) + (block + (set_local $$$pre + (i32.load + (get_local $$wend) + ) + ) + (set_local $$3 + (get_local $$$pre) + ) + (set_local $label + (i32.const 5) + ) + ) + (set_local $$retval$0 + (i32.const 0) + ) + ) + ) + (block + (set_local $$1 + (get_local $$0) + ) + (set_local $$3 + (get_local $$1) + ) + (set_local $label + (i32.const 5) + ) + ) + ) + (block $label$break$L5 + (if + (i32.eq + (get_local $label) + (i32.const 5) + ) + (block + (set_local $$wpos + (i32.add + (get_local $$f) + (i32.const 20) + ) + ) + (set_local $$2 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$sub$ptr$sub + (i32.sub + (get_local $$3) + (get_local $$2) + ) + ) + (set_local $$cmp + (i32.lt_u + (get_local $$sub$ptr$sub) + (get_local $$l) + ) + ) + (set_local $$4 + (get_local $$2) + ) + (if + (get_local $$cmp) + (block + (set_local $$write + (i32.add + (get_local $$f) + (i32.const 36) + ) + ) + (set_local $$5 + (i32.load + (get_local $$write) + ) + ) + (set_local $$call4 + (call_indirect (type $FUNCSIG$iiii) + (get_local $$f) + (get_local $$s) + (get_local $$l) + (i32.add + (i32.and + (get_local $$5) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (set_local $$retval$0 + (get_local $$call4) + ) + (br $label$break$L5) + ) + ) + (set_local $$lbf + (i32.add + (get_local $$f) + (i32.const 75) + ) + ) + (set_local $$6 + (i32.load8_s + (get_local $$lbf) + ) + ) + (set_local $$cmp6 + (i32.gt_s + (i32.shr_s + (i32.shl + (get_local $$6) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -1) + ) + ) + (block $label$break$L10 + (if + (get_local $$cmp6) + (block + (set_local $$i$0 + (get_local $$l) + ) + (loop $while-in + (block $while-out + (set_local $$tobool9 + (i32.eq + (get_local $$i$0) + (i32.const 0) + ) + ) + (if + (get_local $$tobool9) + (block + (set_local $$9 + (get_local $$4) + ) + (set_local $$i$1 + (i32.const 0) + ) + (set_local $$l$addr$0 + (get_local $$l) + ) + (set_local $$s$addr$0 + (get_local $$s) + ) + (br $label$break$L10) + ) + ) + (set_local $$sub + (i32.add + (get_local $$i$0) + (i32.const -1) + ) + ) + (set_local $$arrayidx + (i32.add + (get_local $$s) + (get_local $$sub) + ) + ) + (set_local $$7 + (i32.load8_s + (get_local $$arrayidx) + ) + ) + (set_local $$cmp11 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$7) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 10) + ) + ) + (if + (get_local $$cmp11) + (block + (set_local $$i$0$lcssa36 + (get_local $$i$0) + ) + (br $while-out) + ) + (set_local $$i$0 + (get_local $$sub) + ) + ) + (br $while-in) + ) + ) + (set_local $$write15 + (i32.add + (get_local $$f) + (i32.const 36) + ) + ) + (set_local $$8 + (i32.load + (get_local $$write15) + ) + ) + (set_local $$call16 + (call_indirect (type $FUNCSIG$iiii) + (get_local $$f) + (get_local $$s) + (get_local $$i$0$lcssa36) + (i32.add + (i32.and + (get_local $$8) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (set_local $$cmp17 + (i32.lt_u + (get_local $$call16) + (get_local $$i$0$lcssa36) + ) + ) + (if + (get_local $$cmp17) + (block + (set_local $$retval$0 + (get_local $$i$0$lcssa36) + ) + (br $label$break$L5) + ) + ) + (set_local $$add$ptr + (i32.add + (get_local $$s) + (get_local $$i$0$lcssa36) + ) + ) + (set_local $$sub21 + (i32.sub + (get_local $$l) + (get_local $$i$0$lcssa36) + ) + ) + (set_local $$$pre31 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$9 + (get_local $$$pre31) + ) + (set_local $$i$1 + (get_local $$i$0$lcssa36) + ) + (set_local $$l$addr$0 + (get_local $$sub21) + ) + (set_local $$s$addr$0 + (get_local $$add$ptr) + ) + ) + (block + (set_local $$9 + (get_local $$4) + ) + (set_local $$i$1 + (i32.const 0) + ) + (set_local $$l$addr$0 + (get_local $$l) + ) + (set_local $$s$addr$0 + (get_local $$s) + ) + ) + ) + ) + (drop + (call $_memcpy + (get_local $$9) + (get_local $$s$addr$0) + (get_local $$l$addr$0) + ) + ) + (set_local $$10 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$add$ptr26 + (i32.add + (get_local $$10) + (get_local $$l$addr$0) + ) + ) + (i32.store + (get_local $$wpos) + (get_local $$add$ptr26) + ) + (set_local $$add + (i32.add + (get_local $$i$1) + (get_local $$l$addr$0) + ) + ) + (set_local $$retval$0 + (get_local $$add) + ) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $___towrite (; 43 ;) (param $$f i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$add$ptr i32) + (local $$and i32) + (local $$buf i32) + (local $$buf_size i32) + (local $$conv i32) + (local $$conv3 i32) + (local $$mode i32) + (local $$or i32) + (local $$or5 i32) + (local $$rend i32) + (local $$retval$0 i32) + (local $$rpos i32) + (local $$sub i32) + (local $$tobool i32) + (local $$wbase i32) + (local $$wend i32) + (local $$wpos i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$mode + (i32.add + (get_local $$f) + (i32.const 74) + ) + ) + (set_local $$0 + (i32.load8_s + (get_local $$mode) + ) + ) + (set_local $$conv + (i32.shr_s + (i32.shl + (get_local $$0) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$sub + (i32.add + (get_local $$conv) + (i32.const 255) + ) + ) + (set_local $$or + (i32.or + (get_local $$sub) + (get_local $$conv) + ) + ) + (set_local $$conv3 + (i32.and + (get_local $$or) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $$mode) + (get_local $$conv3) + ) + (set_local $$1 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and + (i32.and + (get_local $$1) + (i32.const 8) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$and) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$rend + (i32.add + (get_local $$f) + (i32.const 8) + ) + ) + (i32.store + (get_local $$rend) + (i32.const 0) + ) + (set_local $$rpos + (i32.add + (get_local $$f) + (i32.const 4) + ) + ) + (i32.store + (get_local $$rpos) + (i32.const 0) + ) + (set_local $$buf + (i32.add + (get_local $$f) + (i32.const 44) + ) + ) + (set_local $$2 + (i32.load + (get_local $$buf) + ) + ) + (set_local $$wbase + (i32.add + (get_local $$f) + (i32.const 28) + ) + ) + (i32.store + (get_local $$wbase) + (get_local $$2) + ) + (set_local $$wpos + (i32.add + (get_local $$f) + (i32.const 20) + ) + ) + (i32.store + (get_local $$wpos) + (get_local $$2) + ) + (set_local $$3 + (get_local $$2) + ) + (set_local $$buf_size + (i32.add + (get_local $$f) + (i32.const 48) + ) + ) + (set_local $$4 + (i32.load + (get_local $$buf_size) + ) + ) + (set_local $$add$ptr + (i32.add + (get_local $$3) + (get_local $$4) + ) + ) + (set_local $$wend + (i32.add + (get_local $$f) + (i32.const 16) + ) + ) + (i32.store + (get_local $$wend) + (get_local $$add$ptr) + ) + (set_local $$retval$0 + (i32.const 0) + ) + ) + (block + (set_local $$or5 + (i32.or + (get_local $$1) + (i32.const 32) + ) + ) + (i32.store + (get_local $$f) + (get_local $$or5) + ) + (set_local $$retval$0 + (i32.const -1) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_wcrtomb (; 44 ;) (param $$s i32) (param $$wc i32) (param $$st i32) (result i32) + (local $$0 i32) + (local $$and i32) + (local $$and19 i32) + (local $$and23 i32) + (local $$and36 i32) + (local $$and41 i32) + (local $$and45 i32) + (local $$call i32) + (local $$cmp i32) + (local $$cmp11 i32) + (local $$cmp2 i32) + (local $$cmp28 i32) + (local $$cmp9 i32) + (local $$conv i32) + (local $$conv16 i32) + (local $$conv21 i32) + (local $$conv25 i32) + (local $$conv33 i32) + (local $$conv38 i32) + (local $$conv43 i32) + (local $$conv47 i32) + (local $$conv5 i32) + (local $$conv7 i32) + (local $$incdec$ptr i32) + (local $$incdec$ptr17 i32) + (local $$incdec$ptr22 i32) + (local $$incdec$ptr34 i32) + (local $$incdec$ptr39 i32) + (local $$incdec$ptr44 i32) + (local $$or i32) + (local $$or$cond i32) + (local $$or15 i32) + (local $$or20 i32) + (local $$or24 i32) + (local $$or32 i32) + (local $$or37 i32) + (local $$or42 i32) + (local $$or46 i32) + (local $$or6 i32) + (local $$retval$0 i32) + (local $$shr$28 i32) + (local $$shr14$26 i32) + (local $$shr18$27 i32) + (local $$shr31$23 i32) + (local $$shr35$24 i32) + (local $$shr40$25 i32) + (local $$sub27 i32) + (local $$tobool i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$tobool + (i32.eq + (get_local $$s) + (i32.const 0) + ) + ) + (block $do-once + (if + (get_local $$tobool) + (set_local $$retval$0 + (i32.const 1) + ) + (block + (set_local $$cmp + (i32.lt_u + (get_local $$wc) + (i32.const 128) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $$conv + (i32.and + (get_local $$wc) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $$s) + (get_local $$conv) + ) + (set_local $$retval$0 + (i32.const 1) + ) + (br $do-once) + ) + ) + (set_local $$cmp2 + (i32.lt_u + (get_local $$wc) + (i32.const 2048) + ) + ) + (if + (get_local $$cmp2) + (block + (set_local $$shr$28 + (i32.shr_u + (get_local $$wc) + (i32.const 6) + ) + ) + (set_local $$or + (i32.or + (get_local $$shr$28) + (i32.const 192) + ) + ) + (set_local $$conv5 + (i32.and + (get_local $$or) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$s) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $$s) + (get_local $$conv5) + ) + (set_local $$and + (i32.and + (get_local $$wc) + (i32.const 63) + ) + ) + (set_local $$or6 + (i32.or + (get_local $$and) + (i32.const 128) + ) + ) + (set_local $$conv7 + (i32.and + (get_local $$or6) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $$incdec$ptr) + (get_local $$conv7) + ) + (set_local $$retval$0 + (i32.const 2) + ) + (br $do-once) + ) + ) + (set_local $$cmp9 + (i32.lt_u + (get_local $$wc) + (i32.const 55296) + ) + ) + (set_local $$0 + (i32.and + (get_local $$wc) + (i32.const -8192) + ) + ) + (set_local $$cmp11 + (i32.eq + (get_local $$0) + (i32.const 57344) + ) + ) + (set_local $$or$cond + (i32.or + (get_local $$cmp9) + (get_local $$cmp11) + ) + ) + (if + (get_local $$or$cond) + (block + (set_local $$shr14$26 + (i32.shr_u + (get_local $$wc) + (i32.const 12) + ) + ) + (set_local $$or15 + (i32.or + (get_local $$shr14$26) + (i32.const 224) + ) + ) + (set_local $$conv16 + (i32.and + (get_local $$or15) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr17 + (i32.add + (get_local $$s) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $$s) + (get_local $$conv16) + ) + (set_local $$shr18$27 + (i32.shr_u + (get_local $$wc) + (i32.const 6) + ) + ) + (set_local $$and19 + (i32.and + (get_local $$shr18$27) + (i32.const 63) + ) + ) + (set_local $$or20 + (i32.or + (get_local $$and19) + (i32.const 128) + ) + ) + (set_local $$conv21 + (i32.and + (get_local $$or20) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr22 + (i32.add + (get_local $$s) + (i32.const 2) + ) + ) + (i32.store8 + (get_local $$incdec$ptr17) + (get_local $$conv21) + ) + (set_local $$and23 + (i32.and + (get_local $$wc) + (i32.const 63) + ) + ) + (set_local $$or24 + (i32.or + (get_local $$and23) + (i32.const 128) + ) + ) + (set_local $$conv25 + (i32.and + (get_local $$or24) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $$incdec$ptr22) + (get_local $$conv25) + ) + (set_local $$retval$0 + (i32.const 3) + ) + (br $do-once) + ) + ) + (set_local $$sub27 + (i32.add + (get_local $$wc) + (i32.const -65536) + ) + ) + (set_local $$cmp28 + (i32.lt_u + (get_local $$sub27) + (i32.const 1048576) + ) + ) + (if + (get_local $$cmp28) + (block + (set_local $$shr31$23 + (i32.shr_u + (get_local $$wc) + (i32.const 18) + ) + ) + (set_local $$or32 + (i32.or + (get_local $$shr31$23) + (i32.const 240) + ) + ) + (set_local $$conv33 + (i32.and + (get_local $$or32) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr34 + (i32.add + (get_local $$s) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $$s) + (get_local $$conv33) + ) + (set_local $$shr35$24 + (i32.shr_u + (get_local $$wc) + (i32.const 12) + ) + ) + (set_local $$and36 + (i32.and + (get_local $$shr35$24) + (i32.const 63) + ) + ) + (set_local $$or37 + (i32.or + (get_local $$and36) + (i32.const 128) + ) + ) + (set_local $$conv38 + (i32.and + (get_local $$or37) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr39 + (i32.add + (get_local $$s) + (i32.const 2) + ) + ) + (i32.store8 + (get_local $$incdec$ptr34) + (get_local $$conv38) + ) + (set_local $$shr40$25 + (i32.shr_u + (get_local $$wc) + (i32.const 6) + ) + ) + (set_local $$and41 + (i32.and + (get_local $$shr40$25) + (i32.const 63) + ) + ) + (set_local $$or42 + (i32.or + (get_local $$and41) + (i32.const 128) + ) + ) + (set_local $$conv43 + (i32.and + (get_local $$or42) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr44 + (i32.add + (get_local $$s) + (i32.const 3) + ) + ) + (i32.store8 + (get_local $$incdec$ptr39) + (get_local $$conv43) + ) + (set_local $$and45 + (i32.and + (get_local $$wc) + (i32.const 63) + ) + ) + (set_local $$or46 + (i32.or + (get_local $$and45) + (i32.const 128) + ) + ) + (set_local $$conv47 + (i32.and + (get_local $$or46) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $$incdec$ptr44) + (get_local $$conv47) + ) + (set_local $$retval$0 + (i32.const 4) + ) + (br $do-once) + ) + (block + (set_local $$call + (call $___errno_location) + ) + (i32.store + (get_local $$call) + (i32.const 84) + ) + (set_local $$retval$0 + (i32.const -1) + ) + (br $do-once) + ) + ) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_wctomb (; 45 ;) (param $$s i32) (param $$wc i32) (result i32) + (local $$call i32) + (local $$retval$0 i32) + (local $$tobool i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$tobool + (i32.eq + (get_local $$s) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (set_local $$retval$0 + (i32.const 0) + ) + (block + (set_local $$call + (call $_wcrtomb + (get_local $$s) + (get_local $$wc) + (i32.const 0) + ) + ) + (set_local $$retval$0 + (get_local $$call) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_memchr (; 46 ;) (param $$src i32) (param $$c i32) (param $$n i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 i32) + (local $$and i32) + (local $$and$39 i32) + (local $$and15 i32) + (local $$and16 i32) + (local $$cmp i32) + (local $$cmp11 i32) + (local $$cmp11$32 i32) + (local $$cmp28 i32) + (local $$cmp8 i32) + (local $$cond i32) + (local $$conv1 i32) + (local $$dec i32) + (local $$dec34 i32) + (local $$incdec$ptr i32) + (local $$incdec$ptr21 i32) + (local $$incdec$ptr33 i32) + (local $$lnot i32) + (local $$mul i32) + (local $$n$addr$0$lcssa i32) + (local $$n$addr$0$lcssa61 i32) + (local $$n$addr$043 i32) + (local $$n$addr$1$lcssa i32) + (local $$n$addr$133 i32) + (local $$n$addr$133$lcssa i32) + (local $$n$addr$227 i32) + (local $$n$addr$3 i32) + (local $$neg i32) + (local $$or$cond i32) + (local $$or$cond$42 i32) + (local $$s$0$lcssa i32) + (local $$s$0$lcssa60 i32) + (local $$s$044 i32) + (local $$s$128 i32) + (local $$s$2 i32) + (local $$sub i32) + (local $$sub22 i32) + (local $$tobool i32) + (local $$tobool$40 i32) + (local $$tobool2 i32) + (local $$tobool2$41 i32) + (local $$tobool2$lcssa i32) + (local $$tobool25 i32) + (local $$tobool25$26 i32) + (local $$tobool36 i32) + (local $$w$0$lcssa i32) + (local $$w$034 i32) + (local $$w$034$lcssa i32) + (local $$xor i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$conv1 + (i32.and + (get_local $$c) + (i32.const 255) + ) + ) + (set_local $$0 + (get_local $$src) + ) + (set_local $$and$39 + (i32.and + (get_local $$0) + (i32.const 3) + ) + ) + (set_local $$tobool$40 + (i32.ne + (get_local $$and$39) + (i32.const 0) + ) + ) + (set_local $$tobool2$41 + (i32.ne + (get_local $$n) + (i32.const 0) + ) + ) + (set_local $$or$cond$42 + (i32.and + (get_local $$tobool2$41) + (get_local $$tobool$40) + ) + ) + (block $label$break$L1 + (if + (get_local $$or$cond$42) + (block + (set_local $$1 + (i32.and + (get_local $$c) + (i32.const 255) + ) + ) + (set_local $$n$addr$043 + (get_local $$n) + ) + (set_local $$s$044 + (get_local $$src) + ) + (loop $while-in + (block $while-out + (set_local $$2 + (i32.load8_s + (get_local $$s$044) + ) + ) + (set_local $$cmp + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$2) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $$1) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $$n$addr$0$lcssa61 + (get_local $$n$addr$043) + ) + (set_local $$s$0$lcssa60 + (get_local $$s$044) + ) + (set_local $label + (i32.const 6) + ) + (br $label$break$L1) + ) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$s$044) + (i32.const 1) + ) + ) + (set_local $$dec + (i32.add + (get_local $$n$addr$043) + (i32.const -1) + ) + ) + (set_local $$3 + (get_local $$incdec$ptr) + ) + (set_local $$and + (i32.and + (get_local $$3) + (i32.const 3) + ) + ) + (set_local $$tobool + (i32.ne + (get_local $$and) + (i32.const 0) + ) + ) + (set_local $$tobool2 + (i32.ne + (get_local $$dec) + (i32.const 0) + ) + ) + (set_local $$or$cond + (i32.and + (get_local $$tobool2) + (get_local $$tobool) + ) + ) + (if + (get_local $$or$cond) + (block + (set_local $$n$addr$043 + (get_local $$dec) + ) + (set_local $$s$044 + (get_local $$incdec$ptr) + ) + ) + (block + (set_local $$n$addr$0$lcssa + (get_local $$dec) + ) + (set_local $$s$0$lcssa + (get_local $$incdec$ptr) + ) + (set_local $$tobool2$lcssa + (get_local $$tobool2) + ) + (set_local $label + (i32.const 5) + ) + (br $while-out) + ) + ) + (br $while-in) + ) + ) + ) + (block + (set_local $$n$addr$0$lcssa + (get_local $$n) + ) + (set_local $$s$0$lcssa + (get_local $$src) + ) + (set_local $$tobool2$lcssa + (get_local $$tobool2$41) + ) + (set_local $label + (i32.const 5) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 5) + ) + (if + (get_local $$tobool2$lcssa) + (block + (set_local $$n$addr$0$lcssa61 + (get_local $$n$addr$0$lcssa) + ) + (set_local $$s$0$lcssa60 + (get_local $$s$0$lcssa) + ) + (set_local $label + (i32.const 6) + ) + ) + (block + (set_local $$n$addr$3 + (i32.const 0) + ) + (set_local $$s$2 + (get_local $$s$0$lcssa) + ) + ) + ) + ) + (block $label$break$L8 + (if + (i32.eq + (get_local $label) + (i32.const 6) + ) + (block + (set_local $$4 + (i32.load8_s + (get_local $$s$0$lcssa60) + ) + ) + (set_local $$5 + (i32.and + (get_local $$c) + (i32.const 255) + ) + ) + (set_local $$cmp8 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$4) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $$5) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $$cmp8) + (block + (set_local $$n$addr$3 + (get_local $$n$addr$0$lcssa61) + ) + (set_local $$s$2 + (get_local $$s$0$lcssa60) + ) + ) + (block + (set_local $$mul + (i32.mul + (get_local $$conv1) + (i32.const 16843009) + ) + ) + (set_local $$cmp11$32 + (i32.gt_u + (get_local $$n$addr$0$lcssa61) + (i32.const 3) + ) + ) + (block $label$break$L11 + (if + (get_local $$cmp11$32) + (block + (set_local $$n$addr$133 + (get_local $$n$addr$0$lcssa61) + ) + (set_local $$w$034 + (get_local $$s$0$lcssa60) + ) + (loop $while-in3 + (block $while-out2 + (set_local $$6 + (i32.load + (get_local $$w$034) + ) + ) + (set_local $$xor + (i32.xor + (get_local $$6) + (get_local $$mul) + ) + ) + (set_local $$sub + (i32.add + (get_local $$xor) + (i32.const -16843009) + ) + ) + (set_local $$neg + (i32.and + (get_local $$xor) + (i32.const -2139062144) + ) + ) + (set_local $$and15 + (i32.xor + (get_local $$neg) + (i32.const -2139062144) + ) + ) + (set_local $$and16 + (i32.and + (get_local $$and15) + (get_local $$sub) + ) + ) + (set_local $$lnot + (i32.eq + (get_local $$and16) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$lnot) + ) + (block + (set_local $$n$addr$133$lcssa + (get_local $$n$addr$133) + ) + (set_local $$w$034$lcssa + (get_local $$w$034) + ) + (br $while-out2) + ) + ) + (set_local $$incdec$ptr21 + (i32.add + (get_local $$w$034) + (i32.const 4) + ) + ) + (set_local $$sub22 + (i32.add + (get_local $$n$addr$133) + (i32.const -4) + ) + ) + (set_local $$cmp11 + (i32.gt_u + (get_local $$sub22) + (i32.const 3) + ) + ) + (if + (get_local $$cmp11) + (block + (set_local $$n$addr$133 + (get_local $$sub22) + ) + (set_local $$w$034 + (get_local $$incdec$ptr21) + ) + ) + (block + (set_local $$n$addr$1$lcssa + (get_local $$sub22) + ) + (set_local $$w$0$lcssa + (get_local $$incdec$ptr21) + ) + (set_local $label + (i32.const 11) + ) + (br $label$break$L11) + ) + ) + (br $while-in3) + ) + ) + (set_local $$n$addr$227 + (get_local $$n$addr$133$lcssa) + ) + (set_local $$s$128 + (get_local $$w$034$lcssa) + ) + ) + (block + (set_local $$n$addr$1$lcssa + (get_local $$n$addr$0$lcssa61) + ) + (set_local $$w$0$lcssa + (get_local $$s$0$lcssa60) + ) + (set_local $label + (i32.const 11) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 11) + ) + (block + (set_local $$tobool25$26 + (i32.eq + (get_local $$n$addr$1$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$tobool25$26) + (block + (set_local $$n$addr$3 + (i32.const 0) + ) + (set_local $$s$2 + (get_local $$w$0$lcssa) + ) + (br $label$break$L8) + ) + (block + (set_local $$n$addr$227 + (get_local $$n$addr$1$lcssa) + ) + (set_local $$s$128 + (get_local $$w$0$lcssa) + ) + ) + ) + ) + ) + (loop $while-in5 + (block $while-out4 + (set_local $$7 + (i32.load8_s + (get_local $$s$128) + ) + ) + (set_local $$cmp28 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$7) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $$5) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $$cmp28) + (block + (set_local $$n$addr$3 + (get_local $$n$addr$227) + ) + (set_local $$s$2 + (get_local $$s$128) + ) + (br $label$break$L8) + ) + ) + (set_local $$incdec$ptr33 + (i32.add + (get_local $$s$128) + (i32.const 1) + ) + ) + (set_local $$dec34 + (i32.add + (get_local $$n$addr$227) + (i32.const -1) + ) + ) + (set_local $$tobool25 + (i32.eq + (get_local $$dec34) + (i32.const 0) + ) + ) + (if + (get_local $$tobool25) + (block + (set_local $$n$addr$3 + (i32.const 0) + ) + (set_local $$s$2 + (get_local $$incdec$ptr33) + ) + (br $while-out4) + ) + (block + (set_local $$n$addr$227 + (get_local $$dec34) + ) + (set_local $$s$128 + (get_local $$incdec$ptr33) + ) + ) + ) + (br $while-in5) + ) + ) + ) + ) + ) + ) + ) + (set_local $$tobool36 + (i32.ne + (get_local $$n$addr$3) + (i32.const 0) + ) + ) + (set_local $$cond + (if (result i32) + (get_local $$tobool36) + (get_local $$s$2) + (i32.const 0) + ) + ) + (return + (get_local $$cond) + ) + ) + (func $___syscall_ret (; 47 ;) (param $$r i32) (result i32) + (local $$call i32) + (local $$cmp i32) + (local $$retval$0 i32) + (local $$sub i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$cmp + (i32.gt_u + (get_local $$r) + (i32.const -4096) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $$sub + (i32.sub + (i32.const 0) + (get_local $$r) + ) + ) + (set_local $$call + (call $___errno_location) + ) + (i32.store + (get_local $$call) + (get_local $$sub) + ) + (set_local $$retval$0 + (i32.const -1) + ) + ) + (set_local $$retval$0 + (get_local $$r) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $___fflush_unlocked (; 48 ;) (param $$f i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$cmp i32) + (local $$cmp4 i32) + (local $$rend i32) + (local $$retval$0 i32) + (local $$rpos i32) + (local $$seek i32) + (local $$sub$ptr$lhs$cast i32) + (local $$sub$ptr$rhs$cast i32) + (local $$sub$ptr$sub i32) + (local $$tobool i32) + (local $$wbase i32) + (local $$wend i32) + (local $$wpos i32) + (local $$write i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$wpos + (i32.add + (get_local $$f) + (i32.const 20) + ) + ) + (set_local $$0 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$wbase + (i32.add + (get_local $$f) + (i32.const 28) + ) + ) + (set_local $$1 + (i32.load + (get_local $$wbase) + ) + ) + (set_local $$cmp + (i32.gt_u + (get_local $$0) + (get_local $$1) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $$write + (i32.add + (get_local $$f) + (i32.const 36) + ) + ) + (set_local $$2 + (i32.load + (get_local $$write) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $$f) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (get_local $$2) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (set_local $$3 + (i32.load + (get_local $$wpos) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$3) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (set_local $$retval$0 + (i32.const -1) + ) + (set_local $label + (i32.const 3) + ) + ) + ) + (set_local $label + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 3) + ) + (block + (set_local $$rpos + (i32.add + (get_local $$f) + (i32.const 4) + ) + ) + (set_local $$4 + (i32.load + (get_local $$rpos) + ) + ) + (set_local $$rend + (i32.add + (get_local $$f) + (i32.const 8) + ) + ) + (set_local $$5 + (i32.load + (get_local $$rend) + ) + ) + (set_local $$cmp4 + (i32.lt_u + (get_local $$4) + (get_local $$5) + ) + ) + (if + (get_local $$cmp4) + (block + (set_local $$seek + (i32.add + (get_local $$f) + (i32.const 40) + ) + ) + (set_local $$6 + (i32.load + (get_local $$seek) + ) + ) + (set_local $$sub$ptr$lhs$cast + (get_local $$4) + ) + (set_local $$sub$ptr$rhs$cast + (get_local $$5) + ) + (set_local $$sub$ptr$sub + (i32.sub + (get_local $$sub$ptr$lhs$cast) + (get_local $$sub$ptr$rhs$cast) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $$f) + (get_local $$sub$ptr$sub) + (i32.const 1) + (i32.add + (i32.and + (get_local $$6) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (set_local $$wend + (i32.add + (get_local $$f) + (i32.const 16) + ) + ) + (i32.store + (get_local $$wend) + (i32.const 0) + ) + (i32.store + (get_local $$wbase) + (i32.const 0) + ) + (i32.store + (get_local $$wpos) + (i32.const 0) + ) + (i32.store + (get_local $$rend) + (i32.const 0) + ) + (i32.store + (get_local $$rpos) + (i32.const 0) + ) + (set_local $$retval$0 + (i32.const 0) + ) + ) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_cleanup (; 49 ;) (param $$p i32) + (local $$0 i32) + (local $$lockcount i32) + (local $$tobool i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$lockcount + (i32.add + (get_local $$p) + (i32.const 68) + ) + ) + (set_local $$0 + (i32.load + (get_local $$lockcount) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$0) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (call $___unlockfile + (get_local $$p) + ) + ) + (return) + ) + (func $i32s-div (; 50 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (if (result i32) + (i32.and + (i32.eq + (get_local $0) + (i32.const -2147483648) + ) + (i32.eq + (get_local $1) + (i32.const -1) + ) + ) + (i32.const 0) + (i32.div_s + (get_local $0) + (get_local $1) + ) + ) + ) + ) + (func $i32s-rem (; 51 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (i32.rem_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $i32u-rem (; 52 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (i32.rem_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $i32u-div (; 53 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (i32.div_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $_printf_core (; 54 ;) (param $$f i32) (param $$fmt i32) (param $$ap i32) (param $$nl_arg i32) (param $$nl_type i32) (result i32) + (local $$$ i32) + (local $$$$i i32) + (local $$$396$i f64) + (local $$$404$i f64) + (local $$$l10n$0 i32) + (local $$$lcssa i32) + (local $$$p$i i32) + (local $$$p$inc468$i i32) + (local $$$pr$i i32) + (local $$$pr477$i i32) + (local $$$pre i32) + (local $$$pre$i i32) + (local $$$pre357 i32) + (local $$$pre564$i i32) + (local $$$pre566$i i32) + (local $$$pre567$i i32) + (local $$$sub514$i i32) + (local $$$sub562$i i32) + (local $$0 i32) + (local $$1 i32) + (local $$10 i32) + (local $$100 i32) + (local $$101 i32) + (local $$102 i32) + (local $$103 i32) + (local $$104 i32) + (local $$105 i32) + (local $$106 i32) + (local $$107 i32) + (local $$108 i32) + (local $$109 i32) + (local $$11 i32) + (local $$110 i32) + (local $$111 i32) + (local $$112 i32) + (local $$113 i32) + (local $$114 i32) + (local $$115 i32) + (local $$116 i32) + (local $$117 i32) + (local $$118 i32) + (local $$119 i32) + (local $$12 i32) + (local $$120 i32) + (local $$121 i32) + (local $$122 i32) + (local $$123 i32) + (local $$124 i32) + (local $$125 i32) + (local $$126 i32) + (local $$127 i32) + (local $$128 i32) + (local $$129 i32) + (local $$13 i32) + (local $$130 i32) + (local $$131 i32) + (local $$132 i32) + (local $$133 i32) + (local $$134 i32) + (local $$135 i32) + (local $$136 i32) + (local $$137 i32) + (local $$138 i32) + (local $$139 i32) + (local $$14 i32) + (local $$140 i32) + (local $$141 i32) + (local $$142 i32) + (local $$143 i32) + (local $$144 i32) + (local $$145 i32) + (local $$146 i32) + (local $$147 i32) + (local $$148 i32) + (local $$149 i32) + (local $$15 i32) + (local $$150 i32) + (local $$151 i32) + (local $$152 i32) + (local $$153 i32) + (local $$154 i32) + (local $$155 i32) + (local $$156 i32) + (local $$157 i32) + (local $$158 i32) + (local $$159 i32) + (local $$16 i32) + (local $$160 i32) + (local $$161 i32) + (local $$162 i32) + (local $$163 i32) + (local $$164 i32) + (local $$165 i32) + (local $$166 i32) + (local $$167 i32) + (local $$168 i32) + (local $$169 i32) + (local $$17 i32) + (local $$170 i32) + (local $$171 i32) + (local $$172 i32) + (local $$173 i32) + (local $$174 i32) + (local $$175 i32) + (local $$176 i32) + (local $$177 i32) + (local $$178 i32) + (local $$179 i32) + (local $$18 i32) + (local $$180 i32) + (local $$181 f64) + (local $$182 i32) + (local $$183 i32) + (local $$184 i32) + (local $$185 i32) + (local $$186 i32) + (local $$187 i32) + (local $$188 i32) + (local $$189 i32) + (local $$19 i32) + (local $$190 i32) + (local $$191 i32) + (local $$192 i32) + (local $$193 i32) + (local $$194 i32) + (local $$195 i32) + (local $$196 i32) + (local $$197 i32) + (local $$198 i32) + (local $$199 i32) + (local $$2 i32) + (local $$20 i32) + (local $$200 i32) + (local $$201 i32) + (local $$202 i32) + (local $$203 i32) + (local $$204 i32) + (local $$205 i32) + (local $$206 i32) + (local $$207 i32) + (local $$208 i32) + (local $$209 i32) + (local $$21 i32) + (local $$210 i32) + (local $$211 i32) + (local $$212 i32) + (local $$213 i32) + (local $$214 i32) + (local $$215 i32) + (local $$216 i32) + (local $$217 i32) + (local $$218 i32) + (local $$219 i32) + (local $$22 i32) + (local $$220 i32) + (local $$221 i32) + (local $$222 i32) + (local $$223 i32) + (local $$224 i32) + (local $$225 i32) + (local $$226 i32) + (local $$227 i32) + (local $$228 i32) + (local $$229 i32) + (local $$23 i32) + (local $$230 i32) + (local $$231 i32) + (local $$232 i32) + (local $$233 i32) + (local $$234 i32) + (local $$235 i32) + (local $$236 i32) + (local $$237 i32) + (local $$238 i32) + (local $$239 i32) + (local $$24 i32) + (local $$240 i32) + (local $$241 i32) + (local $$242 i32) + (local $$243 i32) + (local $$244 i32) + (local $$245 i32) + (local $$246 i32) + (local $$247 i32) + (local $$248 i32) + (local $$249 i32) + (local $$25 i32) + (local $$250 i32) + (local $$251 i32) + (local $$252 i32) + (local $$253 i32) + (local $$254 i32) + (local $$255 i32) + (local $$256 i32) + (local $$257 i32) + (local $$258 i32) + (local $$259 i32) + (local $$26 i32) + (local $$260 i32) + (local $$261 i32) + (local $$262 i32) + (local $$263 i32) + (local $$264 i32) + (local $$265 i32) + (local $$266 i32) + (local $$267 i32) + (local $$268 i32) + (local $$27 i32) + (local $$28 i32) + (local $$29 i32) + (local $$3 i32) + (local $$30 i32) + (local $$31 i32) + (local $$32 i32) + (local $$33 i32) + (local $$34 i32) + (local $$35 i32) + (local $$36 i32) + (local $$37 i32) + (local $$38 i32) + (local $$39 i32) + (local $$4 i32) + (local $$40 i32) + (local $$41 i32) + (local $$42 i32) + (local $$43 i32) + (local $$44 i32) + (local $$45 i32) + (local $$46 i32) + (local $$47 i32) + (local $$48 i32) + (local $$49 i32) + (local $$5 i32) + (local $$50 i32) + (local $$51 i32) + (local $$52 i32) + (local $$53 i32) + (local $$54 i32) + (local $$55 i32) + (local $$56 i32) + (local $$57 i32) + (local $$58 i32) + (local $$59 i32) + (local $$6 i32) + (local $$60 i32) + (local $$61 i32) + (local $$62 i32) + (local $$63 i32) + (local $$64 i32) + (local $$65 i32) + (local $$66 i32) + (local $$67 i32) + (local $$68 i32) + (local $$69 i32) + (local $$7 i32) + (local $$70 i32) + (local $$71 i32) + (local $$72 i32) + (local $$73 i32) + (local $$74 i32) + (local $$75 i32) + (local $$76 i32) + (local $$77 i32) + (local $$78 i32) + (local $$79 i32) + (local $$8 i32) + (local $$80 i32) + (local $$81 i32) + (local $$82 i32) + (local $$83 i32) + (local $$84 i32) + (local $$85 i32) + (local $$86 i32) + (local $$87 i32) + (local $$88 i32) + (local $$89 i32) + (local $$9 i32) + (local $$90 i32) + (local $$91 i32) + (local $$92 i32) + (local $$93 i32) + (local $$94 i32) + (local $$95 i32) + (local $$96 i32) + (local $$97 i32) + (local $$98 i32) + (local $$99 i32) + (local $$a$0 i32) + (local $$a$1 i32) + (local $$a$1$lcssa$i i32) + (local $$a$1549$i i32) + (local $$a$2 i32) + (local $$a$2$ph$i i32) + (local $$a$3$lcssa$i i32) + (local $$a$3539$i i32) + (local $$a$5$lcssa$i i32) + (local $$a$5521$i i32) + (local $$a$6$i i32) + (local $$a$8$i i32) + (local $$a$9$ph$i i32) + (local $$add i32) + (local $$add$i i32) + (local $$add$i$203 i32) + (local $$add$i$239 i32) + (local $$add$i$lcssa i32) + (local $$add$ptr i32) + (local $$add$ptr139 i32) + (local $$add$ptr205 i32) + (local $$add$ptr213$i i32) + (local $$add$ptr257 i32) + (local $$add$ptr311$i i32) + (local $$add$ptr311$z$4$i i32) + (local $$add$ptr340 i32) + (local $$add$ptr354$i i32) + (local $$add$ptr358$i i32) + (local $$add$ptr359 i32) + (local $$add$ptr373$i i32) + (local $$add$ptr43 i32) + (local $$add$ptr43$arrayidx31 i32) + (local $$add$ptr442$i i32) + (local $$add$ptr442$z$3$i i32) + (local $$add$ptr473 i32) + (local $$add$ptr65$i i32) + (local $$add$ptr671$i i32) + (local $$add$ptr742$i i32) + (local $$add$ptr88 i32) + (local $$add113$i i32) + (local $$add150$i i32) + (local $$add154$i i32) + (local $$add163$i i32) + (local $$add165$i i32) + (local $$add269 i32) + (local $$add269$p$0 i32) + (local $$add273$i i32) + (local $$add275$i i32) + (local $$add284$i i32) + (local $$add313$i i32) + (local $$add322 i32) + (local $$add355$i i32) + (local $$add395 i32) + (local $$add410$i f64) + (local $$add412 i32) + (local $$add414$i i32) + (local $$add441 i32) + (local $$add477$neg$i i32) + (local $$add561$i i32) + (local $$add608$i i32) + (local $$add612$i i32) + (local $$add620$i i32) + (local $$add653$i i32) + (local $$add67$i i32) + (local $$add737$i i32) + (local $$add810$i i32) + (local $$add87$i f64) + (local $$add90$i f64) + (local $$and i32) + (local $$and$i i32) + (local $$and$i$216 i32) + (local $$and$i$231 i32) + (local $$and$i$238 i32) + (local $$and$i$244 i32) + (local $$and$i$406$i i32) + (local $$and$i$412$i i32) + (local $$and$i$418$i i32) + (local $$and$i$424$i i32) + (local $$and$i$430$i i32) + (local $$and$i$436$i i32) + (local $$and$i$442$i i32) + (local $$and$i$448$i i32) + (local $$and$i$454$i i32) + (local $$and$i$460$i i32) + (local $$and$i$466$i i32) + (local $$and$i$472$i i32) + (local $$and$i$i i32) + (local $$and12$i i32) + (local $$and134$i i32) + (local $$and210 i32) + (local $$and214 i32) + (local $$and216 i32) + (local $$and219 i32) + (local $$and249 i32) + (local $$and254 i32) + (local $$and263 i32) + (local $$and282$i i32) + (local $$and289 i32) + (local $$and294 i32) + (local $$and309 i32) + (local $$and309$fl$4 i32) + (local $$and36$i i32) + (local $$and379$i i32) + (local $$and483$i i32) + (local $$and610$pre$phi$iZ2D i32) + (local $$and62$i i32) + (local $$arg i32) + (local $$arglist_current i32) + (local $$arglist_current2 i32) + (local $$arglist_next i32) + (local $$arglist_next3 i32) + (local $$argpos$0 i32) + (local $$arraydecay208$add$ptr213$i i32) + (local $$arrayidx$i i32) + (local $$arrayidx$i$236 i32) + (local $$arrayidx114 i32) + (local $$arrayidx117$i i32) + (local $$arrayidx119 i32) + (local $$arrayidx124 i32) + (local $$arrayidx132 i32) + (local $$arrayidx16 i32) + (local $$arrayidx173 i32) + (local $$arrayidx192 i32) + (local $$arrayidx251$i i32) + (local $$arrayidx31 i32) + (local $$arrayidx35 i32) + (local $$arrayidx370 i32) + (local $$arrayidx453$i i32) + (local $$arrayidx469 i32) + (local $$arrayidx481 i32) + (local $$arrayidx489$i i32) + (local $$arrayidx68 i32) + (local $$arrayidx73 i32) + (local $$arrayidx81 i32) + (local $$big$i i32) + (local $$buf i32) + (local $$buf$i i32) + (local $$call i32) + (local $$call344 i32) + (local $$call345 i32) + (local $$call356 i32) + (local $$call384 i32) + (local $$call411 i32) + (local $$call55$i f64) + (local $$carry$0544$i i32) + (local $$carry262$0535$i i32) + (local $$cmp i32) + (local $$cmp1 i32) + (local $$cmp103$i i32) + (local $$cmp105 i32) + (local $$cmp111 i32) + (local $$cmp116 i32) + (local $$cmp126 i32) + (local $$cmp127$i i32) + (local $$cmp13 i32) + (local $$cmp147$i i32) + (local $$cmp165 i32) + (local $$cmp176 i32) + (local $$cmp18 i32) + (local $$cmp181 i32) + (local $$cmp184 i32) + (local $$cmp188$i i32) + (local $$cmp196$i i32) + (local $$cmp205$i i32) + (local $$cmp211 i32) + (local $$cmp225$547$i i32) + (local $$cmp225$i i32) + (local $$cmp228$i i32) + (local $$cmp235$543$i i32) + (local $$cmp235$i i32) + (local $$cmp240 i32) + (local $$cmp249$i i32) + (local $$cmp259$537$i i32) + (local $$cmp259$i i32) + (local $$cmp265$i i32) + (local $$cmp270 i32) + (local $$cmp277$533$i i32) + (local $$cmp277$i i32) + (local $$cmp299$i i32) + (local $$cmp306 i32) + (local $$cmp308$i i32) + (local $$cmp315$i i32) + (local $$cmp323 i32) + (local $$cmp324$529$i i32) + (local $$cmp324$i i32) + (local $$cmp333$i i32) + (local $$cmp338$i i32) + (local $$cmp350$i i32) + (local $$cmp363$525$i i32) + (local $$cmp37 i32) + (local $$cmp374$i i32) + (local $$cmp377 i32) + (local $$cmp377$314 i32) + (local $$cmp38$i i32) + (local $$cmp385 i32) + (local $$cmp385$i i32) + (local $$cmp390 i32) + (local $$cmp390$i i32) + (local $$cmp397 i32) + (local $$cmp403$i i32) + (local $$cmp404 i32) + (local $$cmp404$324 i32) + (local $$cmp411$i i32) + (local $$cmp413 i32) + (local $$cmp416$519$i i32) + (local $$cmp416$i i32) + (local $$cmp420$i i32) + (local $$cmp421 i32) + (local $$cmp433$515$i i32) + (local $$cmp433$i i32) + (local $$cmp434 i32) + (local $$cmp442 i32) + (local $$cmp443$i i32) + (local $$cmp450$i i32) + (local $$cmp450$lcssa$i i32) + (local $$cmp466 i32) + (local $$cmp470$i i32) + (local $$cmp473$i i32) + (local $$cmp478 i32) + (local $$cmp478$295 i32) + (local $$cmp48$i i32) + (local $$cmp495$511$i i32) + (local $$cmp495$i i32) + (local $$cmp50 i32) + (local $$cmp50$308 i32) + (local $$cmp505$i i32) + (local $$cmp515$i i32) + (local $$cmp528$i i32) + (local $$cmp563$i i32) + (local $$cmp577$i i32) + (local $$cmp59$i i32) + (local $$cmp614$i i32) + (local $$cmp617$i i32) + (local $$cmp623$i i32) + (local $$cmp636$506$i i32) + (local $$cmp636$i i32) + (local $$cmp65 i32) + (local $$cmp660$i i32) + (local $$cmp665$i i32) + (local $$cmp673$i i32) + (local $$cmp678$491$i i32) + (local $$cmp678$i i32) + (local $$cmp686$i i32) + (local $$cmp707$486$i i32) + (local $$cmp707$i i32) + (local $$cmp710$487$i i32) + (local $$cmp710$i i32) + (local $$cmp722$483$i i32) + (local $$cmp722$i i32) + (local $$cmp727$i i32) + (local $$cmp745$i i32) + (local $$cmp748$499$i i32) + (local $$cmp748$i i32) + (local $$cmp75 i32) + (local $$cmp760$i i32) + (local $$cmp765$i i32) + (local $$cmp770$495$i i32) + (local $$cmp770$i i32) + (local $$cmp777$i i32) + (local $$cmp790$i i32) + (local $$cmp818$i i32) + (local $$cmp82$i i32) + (local $$cmp94$i i32) + (local $$cmp97 i32) + (local $$cnt$0 i32) + (local $$cnt$1 i32) + (local $$cnt$1$lcssa i32) + (local $$cond$i i32) + (local $$cond100$i i32) + (local $$cond233$i i32) + (local $$cond245 i32) + (local $$cond271$i i32) + (local $$cond304$i i32) + (local $$cond354 i32) + (local $$cond426 i32) + (local $$cond43$i i32) + (local $$cond53$i i32) + (local $$cond629$i i32) + (local $$cond732$i i32) + (local $$cond800$i i32) + (local $$conv$4$i i32) + (local $$conv$4$i$197 i32) + (local $$conv$4$i$211 i32) + (local $$conv$i i32) + (local $$conv$i$205 i32) + (local $$conv1$i i32) + (local $$conv111$i i32) + (local $$conv114$i i32) + (local $$conv116$i i32) + (local $$conv118$393$i i32) + (local $$conv120 i32) + (local $$conv121$i i32) + (local $$conv123$i f64) + (local $$conv134 i32) + (local $$conv163 i32) + (local $$conv174 i32) + (local $$conv174$lcssa i32) + (local $$conv207 i32) + (local $$conv216$i i32) + (local $$conv218$i f64) + (local $$conv229 i32) + (local $$conv232 i32) + (local $$conv242$i$lcssa i32) + (local $$conv32 i32) + (local $$conv48 i32) + (local $$conv48$307 i32) + (local $$conv48311 i32) + (local $$conv58 i32) + (local $$conv644$i i32) + (local $$conv646$i i32) + (local $$conv69 i32) + (local $$conv83 i32) + (local $$d$0$542$i i32) + (local $$d$0$i i32) + (local $$d$0545$i i32) + (local $$d$1534$i i32) + (local $$d$2$lcssa$i i32) + (local $$d$2520$i i32) + (local $$d$4$i i32) + (local $$d$5494$i i32) + (local $$d$6488$i i32) + (local $$d$7500$i i32) + (local $$dec$i i32) + (local $$dec476$i i32) + (local $$dec481$i i32) + (local $$dec78$i i32) + (local $$div274$i i32) + (local $$div356$i i32) + (local $$div378$i i32) + (local $$div384$i i32) + (local $$e$0531$i i32) + (local $$e$1$i i32) + (local $$e$2517$i i32) + (local $$e$4$i i32) + (local $$e$5$ph$i i32) + (local $$e2$i i32) + (local $$ebuf0$i i32) + (local $$estr$0$i i32) + (local $$estr$1$lcssa$i i32) + (local $$estr$1507$i i32) + (local $$estr$2$i i32) + (local $$exitcond$i i32) + (local $$expanded i32) + (local $$expanded10 i32) + (local $$expanded11 i32) + (local $$expanded13 i32) + (local $$expanded14 i32) + (local $$expanded15 i32) + (local $$expanded4 i32) + (local $$expanded6 i32) + (local $$expanded7 i32) + (local $$expanded8 i32) + (local $$fl$0284 i32) + (local $$fl$0310 i32) + (local $$fl$1 i32) + (local $$fl$1$and219 i32) + (local $$fl$3 i32) + (local $$fl$4 i32) + (local $$fl$6 i32) + (local $$i$0$lcssa i32) + (local $$i$0$lcssa368 i32) + (local $$i$0316 i32) + (local $$i$0530$i i32) + (local $$i$07$i i32) + (local $$i$07$i$201 i32) + (local $$i$1$lcssa$i i32) + (local $$i$1325 i32) + (local $$i$1526$i i32) + (local $$i$2299 i32) + (local $$i$2299$lcssa i32) + (local $$i$2516$i i32) + (local $$i$3296 i32) + (local $$i$3512$i i32) + (local $$i137 i32) + (local $$i86 i32) + (local $$idxprom$i i32) + (local $$inc i32) + (local $$inc$i i32) + (local $$inc425$i i32) + (local $$inc438$i i32) + (local $$inc468$i i32) + (local $$inc488 i32) + (local $$inc500$i i32) + (local $$incdec$ptr i32) + (local $$incdec$ptr$i i32) + (local $$incdec$ptr$i$204 i32) + (local $$incdec$ptr$i$212 i32) + (local $$incdec$ptr$i$212$lcssa i32) + (local $$incdec$ptr$i$225 i32) + (local $$incdec$ptr$i$lcssa i32) + (local $$incdec$ptr106$i i32) + (local $$incdec$ptr112$i i32) + (local $$incdec$ptr115$i i32) + (local $$incdec$ptr122$i i32) + (local $$incdec$ptr137$i i32) + (local $$incdec$ptr169 i32) + (local $$incdec$ptr169$lcssa i32) + (local $$incdec$ptr169269 i32) + (local $$incdec$ptr169271 i32) + (local $$incdec$ptr169271$lcssa414 i32) + (local $$incdec$ptr169272 i32) + (local $$incdec$ptr169274 i32) + (local $$incdec$ptr169275 i32) + (local $$incdec$ptr169276$lcssa i32) + (local $$incdec$ptr169276301 i32) + (local $$incdec$ptr217$i i32) + (local $$incdec$ptr217$i$lcssa i32) + (local $$incdec$ptr23 i32) + (local $$incdec$ptr246$i i32) + (local $$incdec$ptr288$i i32) + (local $$incdec$ptr292$570$i i32) + (local $$incdec$ptr292$a$3$571$i i32) + (local $$incdec$ptr292$a$3$i i32) + (local $$incdec$ptr292$a$3573$i i32) + (local $$incdec$ptr292$i i32) + (local $$incdec$ptr296$i i32) + (local $$incdec$ptr383 i32) + (local $$incdec$ptr410 i32) + (local $$incdec$ptr419$i i32) + (local $$incdec$ptr423$i i32) + (local $$incdec$ptr62 i32) + (local $$incdec$ptr639$i i32) + (local $$incdec$ptr645$i i32) + (local $$incdec$ptr647$i i32) + (local $$incdec$ptr681$i i32) + (local $$incdec$ptr689$i i32) + (local $$incdec$ptr698$i i32) + (local $$incdec$ptr698$i$lcssa i32) + (local $$incdec$ptr725$i i32) + (local $$incdec$ptr734$i i32) + (local $$incdec$ptr773$i i32) + (local $$incdec$ptr776$i i32) + (local $$incdec$ptr808$i i32) + (local $$isdigit i32) + (local $$isdigit$6$i i32) + (local $$isdigit$6$i$199 i32) + (local $$isdigit$i i32) + (local $$isdigit$i$207 i32) + (local $$isdigit188 i32) + (local $$isdigit190 i32) + (local $$isdigittmp i32) + (local $$isdigittmp$ i32) + (local $$isdigittmp$5$i i32) + (local $$isdigittmp$5$i$198 i32) + (local $$isdigittmp$i i32) + (local $$isdigittmp$i$206 i32) + (local $$isdigittmp187 i32) + (local $$isdigittmp189 i32) + (local $$isdigittmp8$i i32) + (local $$isdigittmp8$i$200 i32) + (local $$j$0$524$i i32) + (local $$j$0$i i32) + (local $$j$0527$i i32) + (local $$j$1513$i i32) + (local $$j$2$i i32) + (local $$l$0 i32) + (local $$l$0$i i32) + (local $$l$1$i i32) + (local $$l$1315 i32) + (local $$l$2 i32) + (local $$l10n$0 i32) + (local $$l10n$0$lcssa i32) + (local $$l10n$0$phi i32) + (local $$l10n$1 i32) + (local $$l10n$2 i32) + (local $$l10n$3 i32) + (local $$land$ext$neg$i i32) + (local $$lnot$ext i32) + (local $$lnot$i i32) + (local $$lnot455$i i32) + (local $$lnot483 i32) + (local $$lor$ext$i i32) + (local $$mb i32) + (local $$mul$i i32) + (local $$mul$i$202 i32) + (local $$mul$i$240 f64) + (local $$mul125$i f64) + (local $$mul202$i f64) + (local $$mul220$i f64) + (local $$mul286$i i32) + (local $$mul286$i$lcssa i32) + (local $$mul322$i i32) + (local $$mul328$i i32) + (local $$mul335$i i32) + (local $$mul349$i i32) + (local $$mul367$i i32) + (local $$mul406$i f64) + (local $$mul407$i f64) + (local $$mul431$i i32) + (local $$mul437$i i32) + (local $$mul499$i i32) + (local $$mul513$i i32) + (local $$mul80$i f64) + (local $$mul80$i$lcssa f64) + (local $$notlhs$i i32) + (local $$notrhs$i i32) + (local $$or i32) + (local $$or$cond i32) + (local $$or$cond$i i32) + (local $$or$cond1$not$i i32) + (local $$or$cond192 i32) + (local $$or$cond193 i32) + (local $$or$cond195 i32) + (local $$or$cond2$i i32) + (local $$or$cond384 i32) + (local $$or$cond395$i i32) + (local $$or$cond397$i i32) + (local $$or$cond401$i i32) + (local $$or$i i32) + (local $$or$i$241 i32) + (local $$or100 i32) + (local $$or120$i i32) + (local $$or246 i32) + (local $$or504$i i32) + (local $$or613$i i32) + (local $$p$0 i32) + (local $$p$1 i32) + (local $$p$2 i32) + (local $$p$2$add322 i32) + (local $$p$3 i32) + (local $$p$4365 i32) + (local $$p$5 i32) + (local $$p$addr$2$$sub514398$i i32) + (local $$p$addr$2$$sub562399$i i32) + (local $$p$addr$2$i i32) + (local $$p$addr$3$i i32) + (local $$p$addr$4$lcssa$i i32) + (local $$p$addr$4489$i i32) + (local $$p$addr$5$lcssa$i i32) + (local $$p$addr$5501$i i32) + (local $$pl$0 i32) + (local $$pl$0$i i32) + (local $$pl$1 i32) + (local $$pl$1$i i32) + (local $$pl$2 i32) + (local $$prefix$0 i32) + (local $$prefix$0$add$ptr65$i i32) + (local $$prefix$0$i i32) + (local $$prefix$1 i32) + (local $$prefix$2 i32) + (local $$r$0$a$9$i i32) + (local $$re$1482$i i32) + (local $$rem360$i i32) + (local $$rem370$i i32) + (local $$rem494$510$i i32) + (local $$rem494$i i32) + (local $$retval$0 i32) + (local $$retval$0$i i32) + (local $$round$0481$i f64) + (local $$round377$1$i f64) + (local $$s$0$i i32) + (local $$s$1$i i32) + (local $$s$1$i$lcssa i32) + (local $$s$addr$0$lcssa$i$229 i32) + (local $$s$addr$06$i i32) + (local $$s$addr$06$i$221 i32) + (local $$s35$0$i i32) + (local $$s668$0492$i i32) + (local $$s668$1$i i32) + (local $$s715$0$lcssa$i i32) + (local $$s715$0484$i i32) + (local $$s753$0$i i32) + (local $$s753$1496$i i32) + (local $$s753$2$i i32) + (local $$shl i32) + (local $$shl280$i i32) + (local $$shl60 i32) + (local $$shr i32) + (local $$shr283$i i32) + (local $$shr285$i i32) + (local $$small$0$i f64) + (local $$small$1$i f64) + (local $$st$0 i32) + (local $$st$0$lcssa415 i32) + (local $$storemerge i32) + (local $$storemerge$186282 i32) + (local $$storemerge$186309 i32) + (local $$storemerge$191 i32) + (local $$sub i32) + (local $$sub$i f64) + (local $$sub$ptr$div$i i32) + (local $$sub$ptr$div321$i i32) + (local $$sub$ptr$div347$i i32) + (local $$sub$ptr$div430$i i32) + (local $$sub$ptr$div511$i i32) + (local $$sub$ptr$lhs$cast i32) + (local $$sub$ptr$lhs$cast$i i32) + (local $$sub$ptr$lhs$cast160$i i32) + (local $$sub$ptr$lhs$cast305$i i32) + (local $$sub$ptr$lhs$cast317 i32) + (local $$sub$ptr$lhs$cast344$i i32) + (local $$sub$ptr$lhs$cast361 i32) + (local $$sub$ptr$lhs$cast431 i32) + (local $$sub$ptr$lhs$cast508$i i32) + (local $$sub$ptr$lhs$cast694$i i32) + (local $$sub$ptr$rhs$cast i32) + (local $$sub$ptr$rhs$cast$i i32) + (local $$sub$ptr$rhs$cast152$i i32) + (local $$sub$ptr$rhs$cast161$i i32) + (local $$sub$ptr$rhs$cast174$i i32) + (local $$sub$ptr$rhs$cast267 i32) + (local $$sub$ptr$rhs$cast306$i i32) + (local $$sub$ptr$rhs$cast318 i32) + (local $$sub$ptr$rhs$cast319$i i32) + (local $$sub$ptr$rhs$cast345$i i32) + (local $$sub$ptr$rhs$cast362 i32) + (local $$sub$ptr$rhs$cast428$i i32) + (local $$sub$ptr$rhs$cast432 i32) + (local $$sub$ptr$rhs$cast634$504$i i32) + (local $$sub$ptr$rhs$cast634$i i32) + (local $$sub$ptr$rhs$cast649$i i32) + (local $$sub$ptr$rhs$cast695$i i32) + (local $$sub$ptr$rhs$cast788$i i32) + (local $$sub$ptr$rhs$cast812$i i32) + (local $$sub$ptr$sub i32) + (local $$sub$ptr$sub$i i32) + (local $$sub$ptr$sub145$i i32) + (local $$sub$ptr$sub153$i i32) + (local $$sub$ptr$sub159$i i32) + (local $$sub$ptr$sub162$i i32) + (local $$sub$ptr$sub172$i i32) + (local $$sub$ptr$sub175$i i32) + (local $$sub$ptr$sub268 i32) + (local $$sub$ptr$sub307$i i32) + (local $$sub$ptr$sub319 i32) + (local $$sub$ptr$sub320$i i32) + (local $$sub$ptr$sub346$i i32) + (local $$sub$ptr$sub363 i32) + (local $$sub$ptr$sub429$i i32) + (local $$sub$ptr$sub433 i32) + (local $$sub$ptr$sub433$p$5 i32) + (local $$sub$ptr$sub510$i i32) + (local $$sub$ptr$sub635$505$i i32) + (local $$sub$ptr$sub635$i i32) + (local $$sub$ptr$sub650$i i32) + (local $$sub$ptr$sub650$pn$i i32) + (local $$sub$ptr$sub696$i i32) + (local $$sub$ptr$sub789$i i32) + (local $$sub$ptr$sub813$i i32) + (local $$sub101 i32) + (local $$sub124$i f64) + (local $$sub135 i32) + (local $$sub146$i i32) + (local $$sub164 i32) + (local $$sub175 i32) + (local $$sub181$i i32) + (local $$sub203$i i32) + (local $$sub219$i f64) + (local $$sub256$i i32) + (local $$sub264$i i32) + (local $$sub281$i i32) + (local $$sub336$i i32) + (local $$sub343$i i32) + (local $$sub357$i i32) + (local $$sub389 i32) + (local $$sub409$i i32) + (local $$sub478$i i32) + (local $$sub480$i i32) + (local $$sub514$i i32) + (local $$sub54 i32) + (local $$sub562$i i32) + (local $$sub59 i32) + (local $$sub626$le$i i32) + (local $$sub735$i i32) + (local $$sub74$i i32) + (local $$sub806$i i32) + (local $$sub84 i32) + (local $$sub85$i f64) + (local $$sub86$i f64) + (local $$sub88$i f64) + (local $$sub91$i f64) + (local $$sub97$i i32) + (local $$sum i32) + (local $$t$0 i32) + (local $$t$1 i32) + (local $$t$addr$0$i i32) + (local $$t$addr$1$i i32) + (local $$tobool i32) + (local $$tobool$i i32) + (local $$tobool$i$217 i32) + (local $$tobool$i$232 i32) + (local $$tobool$i$245 i32) + (local $$tobool$i$407$i i32) + (local $$tobool$i$413$i i32) + (local $$tobool$i$419$i i32) + (local $$tobool$i$425$i i32) + (local $$tobool$i$431$i i32) + (local $$tobool$i$437$i i32) + (local $$tobool$i$443$i i32) + (local $$tobool$i$449$i i32) + (local $$tobool$i$455$i i32) + (local $$tobool$i$461$i i32) + (local $$tobool$i$467$i i32) + (local $$tobool$i$473$i i32) + (local $$tobool$i$i i32) + (local $$tobool13$i i32) + (local $$tobool135$i i32) + (local $$tobool139$i i32) + (local $$tobool140$i i32) + (local $$tobool141 i32) + (local $$tobool178 i32) + (local $$tobool208 i32) + (local $$tobool217 i32) + (local $$tobool222$i i32) + (local $$tobool244$i i32) + (local $$tobool25 i32) + (local $$tobool255 i32) + (local $$tobool264 i32) + (local $$tobool28 i32) + (local $$tobool290 i32) + (local $$tobool290$569$i i32) + (local $$tobool290$i i32) + (local $$tobool294$i i32) + (local $$tobool295 i32) + (local $$tobool314 i32) + (local $$tobool341$i i32) + (local $$tobool349 i32) + (local $$tobool357 i32) + (local $$tobool37$i i32) + (local $$tobool371$i i32) + (local $$tobool380 i32) + (local $$tobool380$i i32) + (local $$tobool400$i i32) + (local $$tobool407 i32) + (local $$tobool459 i32) + (local $$tobool462 i32) + (local $$tobool470 i32) + (local $$tobool484$i i32) + (local $$tobool490$i i32) + (local $$tobool55 i32) + (local $$tobool56$i i32) + (local $$tobool63$i i32) + (local $$tobool76$i i32) + (local $$tobool76552$i i32) + (local $$tobool781$i i32) + (local $$tobool79$i i32) + (local $$tobool9$i i32) + (local $$tobool90 i32) + (local $$w$0 i32) + (local $$w$1 i32) + (local $$w$2 i32) + (local $$w$add165$i i32) + (local $$w$add653$i i32) + (local $$wc i32) + (local $$ws$0317 i32) + (local $$ws$1326 i32) + (local $$xor i32) + (local $$xor$i i32) + (local $$xor167$i i32) + (local $$xor186$i i32) + (local $$xor449 i32) + (local $$xor457 i32) + (local $$xor655$i i32) + (local $$xor816$i i32) + (local $$y$addr$0$i f64) + (local $$y$addr$1$i f64) + (local $$y$addr$2$i f64) + (local $$y$addr$3$i f64) + (local $$y$addr$4$i f64) + (local $$z$0$i i32) + (local $$z$0$lcssa i32) + (local $$z$0302 i32) + (local $$z$1 i32) + (local $$z$1$lcssa$i i32) + (local $$z$1548$i i32) + (local $$z$2 i32) + (local $$z$2$i i32) + (local $$z$2$i$lcssa i32) + (local $$z$3$lcssa$i i32) + (local $$z$3538$i i32) + (local $$z$4$i i32) + (local $$z$7$add$ptr742$i i32) + (local $$z$7$i i32) + (local $$z$7$i$lcssa i32) + (local $$z$7$ph$i i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 624) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$big$i + (i32.add + (get_local $sp) + (i32.const 24) + ) + ) + (set_local $$e2$i + (i32.add + (get_local $sp) + (i32.const 16) + ) + ) + (set_local $$buf$i + (i32.add + (get_local $sp) + (i32.const 588) + ) + ) + (set_local $$ebuf0$i + (i32.add + (get_local $sp) + (i32.const 576) + ) + ) + (set_local $$arg + (get_local $sp) + ) + (set_local $$buf + (i32.add + (get_local $sp) + (i32.const 536) + ) + ) + (set_local $$wc + (i32.add + (get_local $sp) + (i32.const 8) + ) + ) + (set_local $$mb + (i32.add + (get_local $sp) + (i32.const 528) + ) + ) + (set_local $$tobool25 + (i32.ne + (get_local $$f) + (i32.const 0) + ) + ) + (set_local $$add$ptr205 + (i32.add + (get_local $$buf) + (i32.const 40) + ) + ) + (set_local $$sub$ptr$lhs$cast317 + (get_local $$add$ptr205) + ) + (set_local $$add$ptr340 + (i32.add + (get_local $$buf) + (i32.const 39) + ) + ) + (set_local $$arrayidx370 + (i32.add + (get_local $$wc) + (i32.const 4) + ) + ) + (set_local $$arrayidx$i$236 + (i32.add + (get_local $$ebuf0$i) + (i32.const 12) + ) + ) + (set_local $$incdec$ptr106$i + (i32.add + (get_local $$ebuf0$i) + (i32.const 11) + ) + ) + (set_local $$sub$ptr$rhs$cast$i + (get_local $$buf$i) + ) + (set_local $$sub$ptr$lhs$cast160$i + (get_local $$arrayidx$i$236) + ) + (set_local $$sub$ptr$sub159$i + (i32.sub + (get_local $$sub$ptr$lhs$cast160$i) + (get_local $$sub$ptr$rhs$cast$i) + ) + ) + (set_local $$sub$ptr$sub145$i + (i32.sub + (i32.const -2) + (get_local $$sub$ptr$rhs$cast$i) + ) + ) + (set_local $$sub$ptr$sub153$i + (i32.add + (get_local $$sub$ptr$lhs$cast160$i) + (i32.const 2) + ) + ) + (set_local $$add$ptr213$i + (i32.add + (get_local $$big$i) + (i32.const 288) + ) + ) + (set_local $$add$ptr671$i + (i32.add + (get_local $$buf$i) + (i32.const 9) + ) + ) + (set_local $$sub$ptr$lhs$cast694$i + (get_local $$add$ptr671$i) + ) + (set_local $$incdec$ptr689$i + (i32.add + (get_local $$buf$i) + (i32.const 8) + ) + ) + (set_local $$cnt$0 + (i32.const 0) + ) + (set_local $$incdec$ptr169275 + (get_local $$fmt) + ) + (set_local $$l$0 + (i32.const 0) + ) + (set_local $$l10n$0 + (i32.const 0) + ) + (loop $label$continue$L1 + (block $label$break$L1 + (set_local $$cmp + (i32.gt_s + (get_local $$cnt$0) + (i32.const -1) + ) + ) + (block $do-once + (if + (get_local $$cmp) + (block + (set_local $$sub + (i32.sub + (i32.const 2147483647) + (get_local $$cnt$0) + ) + ) + (set_local $$cmp1 + (i32.gt_s + (get_local $$l$0) + (get_local $$sub) + ) + ) + (if + (get_local $$cmp1) + (block + (set_local $$call + (call $___errno_location) + ) + (i32.store + (get_local $$call) + (i32.const 75) + ) + (set_local $$cnt$1 + (i32.const -1) + ) + (br $do-once) + ) + (block + (set_local $$add + (i32.add + (get_local $$l$0) + (get_local $$cnt$0) + ) + ) + (set_local $$cnt$1 + (get_local $$add) + ) + (br $do-once) + ) + ) + ) + (set_local $$cnt$1 + (get_local $$cnt$0) + ) + ) + ) + (set_local $$0 + (i32.load8_s + (get_local $$incdec$ptr169275) + ) + ) + (set_local $$tobool + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$0) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (if + (get_local $$tobool) + (block + (set_local $$cnt$1$lcssa + (get_local $$cnt$1) + ) + (set_local $$l10n$0$lcssa + (get_local $$l10n$0) + ) + (set_local $label + (i32.const 242) + ) + (br $label$break$L1) + ) + (block + (set_local $$1 + (get_local $$0) + ) + (set_local $$incdec$ptr169274 + (get_local $$incdec$ptr169275) + ) + ) + ) + (loop $label$continue$L9 + (block $label$break$L9 + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.sub + (i32.shr_s + (i32.shl + (get_local $$1) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + ) + (block + (set_local $$incdec$ptr169276301 + (get_local $$incdec$ptr169274) + ) + (set_local $$z$0302 + (get_local $$incdec$ptr169274) + ) + (set_local $label + (i32.const 9) + ) + (br $label$break$L9) + (br $switch) + ) + ) + (block + (set_local $$incdec$ptr169276$lcssa + (get_local $$incdec$ptr169274) + ) + (set_local $$z$0$lcssa + (get_local $$incdec$ptr169274) + ) + (br $label$break$L9) + (br $switch) + ) + ) + (nop) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$incdec$ptr169274) + (i32.const 1) + ) + ) + (set_local $$$pre + (i32.load8_s + (get_local $$incdec$ptr) + ) + ) + (set_local $$1 + (get_local $$$pre) + ) + (set_local $$incdec$ptr169274 + (get_local $$incdec$ptr) + ) + (br $label$continue$L9) + ) + ) + (block $label$break$L12 + (if + (i32.eq + (get_local $label) + (i32.const 9) + ) + (loop $while-in + (block $while-out + (set_local $label + (i32.const 0) + ) + (set_local $$arrayidx16 + (i32.add + (get_local $$incdec$ptr169276301) + (i32.const 1) + ) + ) + (set_local $$2 + (i32.load8_s + (get_local $$arrayidx16) + ) + ) + (set_local $$cmp18 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$2) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 37) + ) + ) + (if + (i32.eqz + (get_local $$cmp18) + ) + (block + (set_local $$incdec$ptr169276$lcssa + (get_local $$incdec$ptr169276301) + ) + (set_local $$z$0$lcssa + (get_local $$z$0302) + ) + (br $label$break$L12) + ) + ) + (set_local $$incdec$ptr23 + (i32.add + (get_local $$z$0302) + (i32.const 1) + ) + ) + (set_local $$add$ptr + (i32.add + (get_local $$incdec$ptr169276301) + (i32.const 2) + ) + ) + (set_local $$3 + (i32.load8_s + (get_local $$add$ptr) + ) + ) + (set_local $$cmp13 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$3) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 37) + ) + ) + (if + (get_local $$cmp13) + (block + (set_local $$incdec$ptr169276301 + (get_local $$add$ptr) + ) + (set_local $$z$0302 + (get_local $$incdec$ptr23) + ) + (set_local $label + (i32.const 9) + ) + ) + (block + (set_local $$incdec$ptr169276$lcssa + (get_local $$add$ptr) + ) + (set_local $$z$0$lcssa + (get_local $$incdec$ptr23) + ) + (br $while-out) + ) + ) + (br $while-in) + ) + ) + ) + ) + (set_local $$sub$ptr$lhs$cast + (get_local $$z$0$lcssa) + ) + (set_local $$sub$ptr$rhs$cast + (get_local $$incdec$ptr169275) + ) + (set_local $$sub$ptr$sub + (i32.sub + (get_local $$sub$ptr$lhs$cast) + (get_local $$sub$ptr$rhs$cast) + ) + ) + (if + (get_local $$tobool25) + (block + (set_local $$4 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i + (i32.and + (get_local $$4) + (i32.const 32) + ) + ) + (set_local $$tobool$i + (i32.eq + (get_local $$and$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i) + (drop + (call $___fwritex + (get_local $$incdec$ptr169275) + (get_local $$sub$ptr$sub) + (get_local $$f) + ) + ) + ) + ) + ) + (set_local $$tobool28 + (i32.eq + (get_local $$z$0$lcssa) + (get_local $$incdec$ptr169275) + ) + ) + (if + (i32.eqz + (get_local $$tobool28) + ) + (block + (set_local $$l10n$0$phi + (get_local $$l10n$0) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169276$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$0$phi) + ) + (br $label$continue$L1) + ) + ) + (set_local $$arrayidx31 + (i32.add + (get_local $$incdec$ptr169276$lcssa) + (i32.const 1) + ) + ) + (set_local $$5 + (i32.load8_s + (get_local $$arrayidx31) + ) + ) + (set_local $$conv32 + (i32.shr_s + (i32.shl + (get_local $$5) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp + (i32.add + (get_local $$conv32) + (i32.const -48) + ) + ) + (set_local $$isdigit + (i32.lt_u + (get_local $$isdigittmp) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit) + (block + (set_local $$arrayidx35 + (i32.add + (get_local $$incdec$ptr169276$lcssa) + (i32.const 2) + ) + ) + (set_local $$6 + (i32.load8_s + (get_local $$arrayidx35) + ) + ) + (set_local $$cmp37 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$6) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 36) + ) + ) + (set_local $$add$ptr43 + (i32.add + (get_local $$incdec$ptr169276$lcssa) + (i32.const 3) + ) + ) + (set_local $$add$ptr43$arrayidx31 + (if (result i32) + (get_local $$cmp37) + (get_local $$add$ptr43) + (get_local $$arrayidx31) + ) + ) + (set_local $$$l10n$0 + (if (result i32) + (get_local $$cmp37) + (i32.const 1) + (get_local $$l10n$0) + ) + ) + (set_local $$isdigittmp$ + (if (result i32) + (get_local $$cmp37) + (get_local $$isdigittmp) + (i32.const -1) + ) + ) + (set_local $$$pre357 + (i32.load8_s + (get_local $$add$ptr43$arrayidx31) + ) + ) + (set_local $$7 + (get_local $$$pre357) + ) + (set_local $$argpos$0 + (get_local $$isdigittmp$) + ) + (set_local $$l10n$1 + (get_local $$$l10n$0) + ) + (set_local $$storemerge + (get_local $$add$ptr43$arrayidx31) + ) + ) + (block + (set_local $$7 + (get_local $$5) + ) + (set_local $$argpos$0 + (i32.const -1) + ) + (set_local $$l10n$1 + (get_local $$l10n$0) + ) + (set_local $$storemerge + (get_local $$arrayidx31) + ) + ) + ) + (set_local $$conv48$307 + (i32.shr_s + (i32.shl + (get_local $$7) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$8 + (i32.and + (get_local $$conv48$307) + (i32.const -32) + ) + ) + (set_local $$cmp50$308 + (i32.eq + (get_local $$8) + (i32.const 32) + ) + ) + (block $label$break$L25 + (if + (get_local $$cmp50$308) + (block + (set_local $$9 + (get_local $$7) + ) + (set_local $$conv48311 + (get_local $$conv48$307) + ) + (set_local $$fl$0310 + (i32.const 0) + ) + (set_local $$storemerge$186309 + (get_local $$storemerge) + ) + (loop $while-in4 + (block $while-out3 + (set_local $$sub54 + (i32.add + (get_local $$conv48311) + (i32.const -32) + ) + ) + (set_local $$shl + (i32.shl + (i32.const 1) + (get_local $$sub54) + ) + ) + (set_local $$and + (i32.and + (get_local $$shl) + (i32.const 75913) + ) + ) + (set_local $$tobool55 + (i32.eq + (get_local $$and) + (i32.const 0) + ) + ) + (if + (get_local $$tobool55) + (block + (set_local $$12 + (get_local $$9) + ) + (set_local $$fl$0284 + (get_local $$fl$0310) + ) + (set_local $$storemerge$186282 + (get_local $$storemerge$186309) + ) + (br $label$break$L25) + ) + ) + (set_local $$conv58 + (i32.shr_s + (i32.shl + (get_local $$9) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$sub59 + (i32.add + (get_local $$conv58) + (i32.const -32) + ) + ) + (set_local $$shl60 + (i32.shl + (i32.const 1) + (get_local $$sub59) + ) + ) + (set_local $$or + (i32.or + (get_local $$shl60) + (get_local $$fl$0310) + ) + ) + (set_local $$incdec$ptr62 + (i32.add + (get_local $$storemerge$186309) + (i32.const 1) + ) + ) + (set_local $$10 + (i32.load8_s + (get_local $$incdec$ptr62) + ) + ) + (set_local $$conv48 + (i32.shr_s + (i32.shl + (get_local $$10) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$11 + (i32.and + (get_local $$conv48) + (i32.const -32) + ) + ) + (set_local $$cmp50 + (i32.eq + (get_local $$11) + (i32.const 32) + ) + ) + (if + (get_local $$cmp50) + (block + (set_local $$9 + (get_local $$10) + ) + (set_local $$conv48311 + (get_local $$conv48) + ) + (set_local $$fl$0310 + (get_local $$or) + ) + (set_local $$storemerge$186309 + (get_local $$incdec$ptr62) + ) + ) + (block + (set_local $$12 + (get_local $$10) + ) + (set_local $$fl$0284 + (get_local $$or) + ) + (set_local $$storemerge$186282 + (get_local $$incdec$ptr62) + ) + (br $while-out3) + ) + ) + (br $while-in4) + ) + ) + ) + (block + (set_local $$12 + (get_local $$7) + ) + (set_local $$fl$0284 + (i32.const 0) + ) + (set_local $$storemerge$186282 + (get_local $$storemerge) + ) + ) + ) + ) + (set_local $$cmp65 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$12) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 42) + ) + ) + (block $do-once5 + (if + (get_local $$cmp65) + (block + (set_local $$arrayidx68 + (i32.add + (get_local $$storemerge$186282) + (i32.const 1) + ) + ) + (set_local $$13 + (i32.load8_s + (get_local $$arrayidx68) + ) + ) + (set_local $$conv69 + (i32.shr_s + (i32.shl + (get_local $$13) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp189 + (i32.add + (get_local $$conv69) + (i32.const -48) + ) + ) + (set_local $$isdigit190 + (i32.lt_u + (get_local $$isdigittmp189) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit190) + (block + (set_local $$arrayidx73 + (i32.add + (get_local $$storemerge$186282) + (i32.const 2) + ) + ) + (set_local $$14 + (i32.load8_s + (get_local $$arrayidx73) + ) + ) + (set_local $$cmp75 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$14) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 36) + ) + ) + (if + (get_local $$cmp75) + (block + (set_local $$arrayidx81 + (i32.add + (get_local $$nl_type) + (i32.shl + (get_local $$isdigittmp189) + (i32.const 2) + ) + ) + ) + (i32.store + (get_local $$arrayidx81) + (i32.const 10) + ) + (set_local $$15 + (i32.load8_s + (get_local $$arrayidx68) + ) + ) + (set_local $$conv83 + (i32.shr_s + (i32.shl + (get_local $$15) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$sub84 + (i32.add + (get_local $$conv83) + (i32.const -48) + ) + ) + (set_local $$i86 + (i32.add + (get_local $$nl_arg) + (i32.shl + (get_local $$sub84) + (i32.const 3) + ) + ) + ) + (set_local $$16 + (get_local $$i86) + ) + (set_local $$17 + (get_local $$16) + ) + (set_local $$18 + (i32.load + (get_local $$17) + ) + ) + (set_local $$19 + (i32.add + (get_local $$16) + (i32.const 4) + ) + ) + (set_local $$20 + (get_local $$19) + ) + (set_local $$21 + (i32.load + (get_local $$20) + ) + ) + (set_local $$add$ptr88 + (i32.add + (get_local $$storemerge$186282) + (i32.const 3) + ) + ) + (set_local $$l10n$2 + (i32.const 1) + ) + (set_local $$storemerge$191 + (get_local $$add$ptr88) + ) + (set_local $$w$0 + (get_local $$18) + ) + ) + (set_local $label + (i32.const 24) + ) + ) + ) + (set_local $label + (i32.const 24) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 24) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$tobool90 + (i32.eq + (get_local $$l10n$1) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool90) + ) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (if + (i32.eqz + (get_local $$tobool25) + ) + (block + (set_local $$fl$1 + (get_local $$fl$0284) + ) + (set_local $$incdec$ptr169269 + (get_local $$arrayidx68) + ) + (set_local $$l10n$3 + (i32.const 0) + ) + (set_local $$w$1 + (i32.const 0) + ) + (br $do-once5) + ) + ) + (set_local $$arglist_current + (i32.load + (get_local $$ap) + ) + ) + (set_local $$22 + (get_local $$arglist_current) + ) + (set_local $$23 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded4 + (get_local $$23) + ) + (set_local $$expanded + (i32.sub + (get_local $$expanded4) + (i32.const 1) + ) + ) + (set_local $$24 + (i32.add + (get_local $$22) + (get_local $$expanded) + ) + ) + (set_local $$25 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded8 + (get_local $$25) + ) + (set_local $$expanded7 + (i32.sub + (get_local $$expanded8) + (i32.const 1) + ) + ) + (set_local $$expanded6 + (i32.xor + (get_local $$expanded7) + (i32.const -1) + ) + ) + (set_local $$26 + (i32.and + (get_local $$24) + (get_local $$expanded6) + ) + ) + (set_local $$27 + (get_local $$26) + ) + (set_local $$28 + (i32.load + (get_local $$27) + ) + ) + (set_local $$arglist_next + (i32.add + (get_local $$27) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next) + ) + (set_local $$l10n$2 + (i32.const 0) + ) + (set_local $$storemerge$191 + (get_local $$arrayidx68) + ) + (set_local $$w$0 + (get_local $$28) + ) + ) + ) + (set_local $$cmp97 + (i32.lt_s + (get_local $$w$0) + (i32.const 0) + ) + ) + (if + (get_local $$cmp97) + (block + (set_local $$or100 + (i32.or + (get_local $$fl$0284) + (i32.const 8192) + ) + ) + (set_local $$sub101 + (i32.sub + (i32.const 0) + (get_local $$w$0) + ) + ) + (set_local $$fl$1 + (get_local $$or100) + ) + (set_local $$incdec$ptr169269 + (get_local $$storemerge$191) + ) + (set_local $$l10n$3 + (get_local $$l10n$2) + ) + (set_local $$w$1 + (get_local $$sub101) + ) + ) + (block + (set_local $$fl$1 + (get_local $$fl$0284) + ) + (set_local $$incdec$ptr169269 + (get_local $$storemerge$191) + ) + (set_local $$l10n$3 + (get_local $$l10n$2) + ) + (set_local $$w$1 + (get_local $$w$0) + ) + ) + ) + ) + (block + (set_local $$conv$4$i + (i32.shr_s + (i32.shl + (get_local $$12) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp$5$i + (i32.add + (get_local $$conv$4$i) + (i32.const -48) + ) + ) + (set_local $$isdigit$6$i + (i32.lt_u + (get_local $$isdigittmp$5$i) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit$6$i) + (block + (set_local $$29 + (get_local $$storemerge$186282) + ) + (set_local $$i$07$i + (i32.const 0) + ) + (set_local $$isdigittmp8$i + (get_local $$isdigittmp$5$i) + ) + (loop $while-in8 + (block $while-out7 + (set_local $$mul$i + (i32.mul + (get_local $$i$07$i) + (i32.const 10) + ) + ) + (set_local $$add$i + (i32.add + (get_local $$mul$i) + (get_local $$isdigittmp8$i) + ) + ) + (set_local $$incdec$ptr$i + (i32.add + (get_local $$29) + (i32.const 1) + ) + ) + (set_local $$30 + (i32.load8_s + (get_local $$incdec$ptr$i) + ) + ) + (set_local $$conv$i + (i32.shr_s + (i32.shl + (get_local $$30) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp$i + (i32.add + (get_local $$conv$i) + (i32.const -48) + ) + ) + (set_local $$isdigit$i + (i32.lt_u + (get_local $$isdigittmp$i) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit$i) + (block + (set_local $$29 + (get_local $$incdec$ptr$i) + ) + (set_local $$i$07$i + (get_local $$add$i) + ) + (set_local $$isdigittmp8$i + (get_local $$isdigittmp$i) + ) + ) + (block + (set_local $$add$i$lcssa + (get_local $$add$i) + ) + (set_local $$incdec$ptr$i$lcssa + (get_local $$incdec$ptr$i) + ) + (br $while-out7) + ) + ) + (br $while-in8) + ) + ) + (set_local $$cmp105 + (i32.lt_s + (get_local $$add$i$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$cmp105) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + (block + (set_local $$fl$1 + (get_local $$fl$0284) + ) + (set_local $$incdec$ptr169269 + (get_local $$incdec$ptr$i$lcssa) + ) + (set_local $$l10n$3 + (get_local $$l10n$1) + ) + (set_local $$w$1 + (get_local $$add$i$lcssa) + ) + ) + ) + ) + (block + (set_local $$fl$1 + (get_local $$fl$0284) + ) + (set_local $$incdec$ptr169269 + (get_local $$storemerge$186282) + ) + (set_local $$l10n$3 + (get_local $$l10n$1) + ) + (set_local $$w$1 + (i32.const 0) + ) + ) + ) + ) + ) + ) + (set_local $$31 + (i32.load8_s + (get_local $$incdec$ptr169269) + ) + ) + (set_local $$cmp111 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$31) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 46) + ) + ) + (block $label$break$L46 + (if + (get_local $$cmp111) + (block + (set_local $$arrayidx114 + (i32.add + (get_local $$incdec$ptr169269) + (i32.const 1) + ) + ) + (set_local $$32 + (i32.load8_s + (get_local $$arrayidx114) + ) + ) + (set_local $$cmp116 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$32) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 42) + ) + ) + (if + (i32.eqz + (get_local $$cmp116) + ) + (block + (set_local $$conv$4$i$197 + (i32.shr_s + (i32.shl + (get_local $$32) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp$5$i$198 + (i32.add + (get_local $$conv$4$i$197) + (i32.const -48) + ) + ) + (set_local $$isdigit$6$i$199 + (i32.lt_u + (get_local $$isdigittmp$5$i$198) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit$6$i$199) + (block + (set_local $$49 + (get_local $$arrayidx114) + ) + (set_local $$i$07$i$201 + (i32.const 0) + ) + (set_local $$isdigittmp8$i$200 + (get_local $$isdigittmp$5$i$198) + ) + ) + (block + (set_local $$incdec$ptr169272 + (get_local $$arrayidx114) + ) + (set_local $$p$0 + (i32.const 0) + ) + (br $label$break$L46) + ) + ) + (loop $while-in11 + (block $while-out10 + (set_local $$mul$i$202 + (i32.mul + (get_local $$i$07$i$201) + (i32.const 10) + ) + ) + (set_local $$add$i$203 + (i32.add + (get_local $$mul$i$202) + (get_local $$isdigittmp8$i$200) + ) + ) + (set_local $$incdec$ptr$i$204 + (i32.add + (get_local $$49) + (i32.const 1) + ) + ) + (set_local $$50 + (i32.load8_s + (get_local $$incdec$ptr$i$204) + ) + ) + (set_local $$conv$i$205 + (i32.shr_s + (i32.shl + (get_local $$50) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp$i$206 + (i32.add + (get_local $$conv$i$205) + (i32.const -48) + ) + ) + (set_local $$isdigit$i$207 + (i32.lt_u + (get_local $$isdigittmp$i$206) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit$i$207) + (block + (set_local $$49 + (get_local $$incdec$ptr$i$204) + ) + (set_local $$i$07$i$201 + (get_local $$add$i$203) + ) + (set_local $$isdigittmp8$i$200 + (get_local $$isdigittmp$i$206) + ) + ) + (block + (set_local $$incdec$ptr169272 + (get_local $$incdec$ptr$i$204) + ) + (set_local $$p$0 + (get_local $$add$i$203) + ) + (br $label$break$L46) + ) + ) + (br $while-in11) + ) + ) + ) + ) + (set_local $$arrayidx119 + (i32.add + (get_local $$incdec$ptr169269) + (i32.const 2) + ) + ) + (set_local $$33 + (i32.load8_s + (get_local $$arrayidx119) + ) + ) + (set_local $$conv120 + (i32.shr_s + (i32.shl + (get_local $$33) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$isdigittmp187 + (i32.add + (get_local $$conv120) + (i32.const -48) + ) + ) + (set_local $$isdigit188 + (i32.lt_u + (get_local $$isdigittmp187) + (i32.const 10) + ) + ) + (if + (get_local $$isdigit188) + (block + (set_local $$arrayidx124 + (i32.add + (get_local $$incdec$ptr169269) + (i32.const 3) + ) + ) + (set_local $$34 + (i32.load8_s + (get_local $$arrayidx124) + ) + ) + (set_local $$cmp126 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$34) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 36) + ) + ) + (if + (get_local $$cmp126) + (block + (set_local $$arrayidx132 + (i32.add + (get_local $$nl_type) + (i32.shl + (get_local $$isdigittmp187) + (i32.const 2) + ) + ) + ) + (i32.store + (get_local $$arrayidx132) + (i32.const 10) + ) + (set_local $$35 + (i32.load8_s + (get_local $$arrayidx119) + ) + ) + (set_local $$conv134 + (i32.shr_s + (i32.shl + (get_local $$35) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$sub135 + (i32.add + (get_local $$conv134) + (i32.const -48) + ) + ) + (set_local $$i137 + (i32.add + (get_local $$nl_arg) + (i32.shl + (get_local $$sub135) + (i32.const 3) + ) + ) + ) + (set_local $$36 + (get_local $$i137) + ) + (set_local $$37 + (get_local $$36) + ) + (set_local $$38 + (i32.load + (get_local $$37) + ) + ) + (set_local $$39 + (i32.add + (get_local $$36) + (i32.const 4) + ) + ) + (set_local $$40 + (get_local $$39) + ) + (set_local $$41 + (i32.load + (get_local $$40) + ) + ) + (set_local $$add$ptr139 + (i32.add + (get_local $$incdec$ptr169269) + (i32.const 4) + ) + ) + (set_local $$incdec$ptr169272 + (get_local $$add$ptr139) + ) + (set_local $$p$0 + (get_local $$38) + ) + (br $label$break$L46) + ) + ) + ) + ) + (set_local $$tobool141 + (i32.eq + (get_local $$l10n$3) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool141) + ) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (if + (get_local $$tobool25) + (block + (set_local $$arglist_current2 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$42 + (get_local $$arglist_current2) + ) + (set_local $$43 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded11 + (get_local $$43) + ) + (set_local $$expanded10 + (i32.sub + (get_local $$expanded11) + (i32.const 1) + ) + ) + (set_local $$44 + (i32.add + (get_local $$42) + (get_local $$expanded10) + ) + ) + (set_local $$45 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded15 + (get_local $$45) + ) + (set_local $$expanded14 + (i32.sub + (get_local $$expanded15) + (i32.const 1) + ) + ) + (set_local $$expanded13 + (i32.xor + (get_local $$expanded14) + (i32.const -1) + ) + ) + (set_local $$46 + (i32.and + (get_local $$44) + (get_local $$expanded13) + ) + ) + (set_local $$47 + (get_local $$46) + ) + (set_local $$48 + (i32.load + (get_local $$47) + ) + ) + (set_local $$arglist_next3 + (i32.add + (get_local $$47) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next3) + ) + (set_local $$incdec$ptr169272 + (get_local $$arrayidx119) + ) + (set_local $$p$0 + (get_local $$48) + ) + ) + (block + (set_local $$incdec$ptr169272 + (get_local $$arrayidx119) + ) + (set_local $$p$0 + (i32.const 0) + ) + ) + ) + ) + (block + (set_local $$incdec$ptr169272 + (get_local $$incdec$ptr169269) + ) + (set_local $$p$0 + (i32.const -1) + ) + ) + ) + ) + (set_local $$incdec$ptr169271 + (get_local $$incdec$ptr169272) + ) + (set_local $$st$0 + (i32.const 0) + ) + (loop $while-in13 + (block $while-out12 + (set_local $$51 + (i32.load8_s + (get_local $$incdec$ptr169271) + ) + ) + (set_local $$conv163 + (i32.shr_s + (i32.shl + (get_local $$51) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$sub164 + (i32.add + (get_local $$conv163) + (i32.const -65) + ) + ) + (set_local $$cmp165 + (i32.gt_u + (get_local $$sub164) + (i32.const 57) + ) + ) + (if + (get_local $$cmp165) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $$incdec$ptr169 + (i32.add + (get_local $$incdec$ptr169271) + (i32.const 1) + ) + ) + (set_local $$arrayidx173 + (i32.add + (i32.add + (i32.const 3611) + (i32.mul + (get_local $$st$0) + (i32.const 58) + ) + ) + (get_local $$sub164) + ) + ) + (set_local $$52 + (i32.load8_s + (get_local $$arrayidx173) + ) + ) + (set_local $$conv174 + (i32.and + (get_local $$52) + (i32.const 255) + ) + ) + (set_local $$sub175 + (i32.add + (get_local $$conv174) + (i32.const -1) + ) + ) + (set_local $$cmp176 + (i32.lt_u + (get_local $$sub175) + (i32.const 8) + ) + ) + (if + (get_local $$cmp176) + (block + (set_local $$incdec$ptr169271 + (get_local $$incdec$ptr169) + ) + (set_local $$st$0 + (get_local $$conv174) + ) + ) + (block + (set_local $$$lcssa + (get_local $$52) + ) + (set_local $$conv174$lcssa + (get_local $$conv174) + ) + (set_local $$incdec$ptr169$lcssa + (get_local $$incdec$ptr169) + ) + (set_local $$incdec$ptr169271$lcssa414 + (get_local $$incdec$ptr169271) + ) + (set_local $$st$0$lcssa415 + (get_local $$st$0) + ) + (br $while-out12) + ) + ) + (br $while-in13) + ) + ) + (set_local $$tobool178 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$$lcssa) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (if + (get_local $$tobool178) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $$cmp181 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$$lcssa) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 19) + ) + ) + (set_local $$cmp184 + (i32.gt_s + (get_local $$argpos$0) + (i32.const -1) + ) + ) + (block $do-once14 + (if + (get_local $$cmp181) + (if + (get_local $$cmp184) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + (set_local $label + (i32.const 52) + ) + ) + (block + (if + (get_local $$cmp184) + (block + (set_local $$arrayidx192 + (i32.add + (get_local $$nl_type) + (i32.shl + (get_local $$argpos$0) + (i32.const 2) + ) + ) + ) + (i32.store + (get_local $$arrayidx192) + (get_local $$conv174$lcssa) + ) + (set_local $$53 + (i32.add + (get_local $$nl_arg) + (i32.shl + (get_local $$argpos$0) + (i32.const 3) + ) + ) + ) + (set_local $$54 + (get_local $$53) + ) + (set_local $$55 + (get_local $$54) + ) + (set_local $$56 + (i32.load + (get_local $$55) + ) + ) + (set_local $$57 + (i32.add + (get_local $$54) + (i32.const 4) + ) + ) + (set_local $$58 + (get_local $$57) + ) + (set_local $$59 + (i32.load + (get_local $$58) + ) + ) + (set_local $$60 + (get_local $$arg) + ) + (set_local $$61 + (get_local $$60) + ) + (i32.store + (get_local $$61) + (get_local $$56) + ) + (set_local $$62 + (i32.add + (get_local $$60) + (i32.const 4) + ) + ) + (set_local $$63 + (get_local $$62) + ) + (i32.store + (get_local $$63) + (get_local $$59) + ) + (set_local $label + (i32.const 52) + ) + (br $do-once14) + ) + ) + (if + (i32.eqz + (get_local $$tobool25) + ) + (block + (set_local $$retval$0 + (i32.const 0) + ) + (br $label$break$L1) + ) + ) + (call $_pop_arg_336 + (get_local $$arg) + (get_local $$conv174$lcssa) + (get_local $$ap) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 52) + ) + (block + (set_local $label + (i32.const 0) + ) + (if + (i32.eqz + (get_local $$tobool25) + ) + (block + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + ) + ) + ) + ) + (set_local $$64 + (i32.load8_s + (get_local $$incdec$ptr169271$lcssa414) + ) + ) + (set_local $$conv207 + (i32.shr_s + (i32.shl + (get_local $$64) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$tobool208 + (i32.ne + (get_local $$st$0$lcssa415) + (i32.const 0) + ) + ) + (set_local $$and210 + (i32.and + (get_local $$conv207) + (i32.const 15) + ) + ) + (set_local $$cmp211 + (i32.eq + (get_local $$and210) + (i32.const 3) + ) + ) + (set_local $$or$cond192 + (i32.and + (get_local $$tobool208) + (get_local $$cmp211) + ) + ) + (set_local $$and214 + (i32.and + (get_local $$conv207) + (i32.const -33) + ) + ) + (set_local $$t$0 + (if (result i32) + (get_local $$or$cond192) + (get_local $$and214) + (get_local $$conv207) + ) + ) + (set_local $$and216 + (i32.and + (get_local $$fl$1) + (i32.const 8192) + ) + ) + (set_local $$tobool217 + (i32.eq + (get_local $$and216) + (i32.const 0) + ) + ) + (set_local $$and219 + (i32.and + (get_local $$fl$1) + (i32.const -65537) + ) + ) + (set_local $$fl$1$and219 + (if (result i32) + (get_local $$tobool217) + (get_local $$fl$1) + (get_local $$and219) + ) + ) + (block $label$break$L75 + (block $switch17 + (block $switch-default120 + (block $switch-case119 + (block $switch-case48 + (block $switch-case47 + (block $switch-case46 + (block $switch-case45 + (block $switch-case44 + (block $switch-case43 + (block $switch-case42 + (block $switch-case41 + (block $switch-case40 + (block $switch-case39 + (block $switch-case38 + (block $switch-case37 + (block $switch-case36 + (block $switch-case35 + (block $switch-case34 + (block $switch-case33 + (block $switch-case30 + (block $switch-case29 + (block $switch-case28 + (block $switch-case27 + (br_table $switch-case42 $switch-default120 $switch-case40 $switch-default120 $switch-case45 $switch-case44 $switch-case43 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case41 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case29 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case46 $switch-default120 $switch-case37 $switch-case35 $switch-case119 $switch-case48 $switch-case47 $switch-default120 $switch-case34 $switch-default120 $switch-default120 $switch-default120 $switch-case38 $switch-case27 $switch-case33 $switch-case28 $switch-default120 $switch-default120 $switch-case39 $switch-default120 $switch-case36 $switch-default120 $switch-default120 $switch-case30 $switch-default120 + (i32.sub + (get_local $$t$0) + (i32.const 65) + ) + ) + ) + (block + (block $switch18 + (block $switch-default26 + (block $switch-case25 + (block $switch-case24 + (block $switch-case23 + (block $switch-case22 + (block $switch-case21 + (block $switch-case20 + (block $switch-case19 + (br_table $switch-case19 $switch-case20 $switch-case21 $switch-case22 $switch-case23 $switch-default26 $switch-case24 $switch-case25 $switch-default26 + (i32.sub + (get_local $$st$0$lcssa415) + (i32.const 0) + ) + ) + ) + (block + (set_local $$71 + (i32.load + (get_local $$arg) + ) + ) + (i32.store + (get_local $$71) + (get_local $$cnt$1) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$72 + (i32.load + (get_local $$arg) + ) + ) + (i32.store + (get_local $$72) + (get_local $$cnt$1) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$73 + (i32.lt_s + (get_local $$cnt$1) + (i32.const 0) + ) + ) + (set_local $$74 + (i32.shr_s + (i32.shl + (get_local $$73) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$75 + (i32.load + (get_local $$arg) + ) + ) + (set_local $$76 + (get_local $$75) + ) + (set_local $$77 + (get_local $$76) + ) + (i32.store + (get_local $$77) + (get_local $$cnt$1) + ) + (set_local $$78 + (i32.add + (get_local $$76) + (i32.const 4) + ) + ) + (set_local $$79 + (get_local $$78) + ) + (i32.store + (get_local $$79) + (get_local $$74) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$conv229 + (i32.and + (get_local $$cnt$1) + (i32.const 65535) + ) + ) + (set_local $$80 + (i32.load + (get_local $$arg) + ) + ) + (i32.store16 + (get_local $$80) + (get_local $$conv229) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$conv232 + (i32.and + (get_local $$cnt$1) + (i32.const 255) + ) + ) + (set_local $$81 + (i32.load + (get_local $$arg) + ) + ) + (i32.store8 + (get_local $$81) + (get_local $$conv232) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$82 + (i32.load + (get_local $$arg) + ) + ) + (i32.store + (get_local $$82) + (get_local $$cnt$1) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$83 + (i32.lt_s + (get_local $$cnt$1) + (i32.const 0) + ) + ) + (set_local $$84 + (i32.shr_s + (i32.shl + (get_local $$83) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$85 + (i32.load + (get_local $$arg) + ) + ) + (set_local $$86 + (get_local $$85) + ) + (set_local $$87 + (get_local $$86) + ) + (i32.store + (get_local $$87) + (get_local $$cnt$1) + ) + (set_local $$88 + (i32.add + (get_local $$86) + (i32.const 4) + ) + ) + (set_local $$89 + (get_local $$88) + ) + (i32.store + (get_local $$89) + (get_local $$84) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch18) + ) + ) + (block + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$sub$ptr$sub) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + ) + ) + (br $switch17) + ) + ) + (block + (set_local $$cmp240 + (i32.gt_u + (get_local $$p$0) + (i32.const 8) + ) + ) + (set_local $$cond245 + (if (result i32) + (get_local $$cmp240) + (get_local $$p$0) + (i32.const 8) + ) + ) + (set_local $$or246 + (i32.or + (get_local $$fl$1$and219) + (i32.const 8) + ) + ) + (set_local $$fl$3 + (get_local $$or246) + ) + (set_local $$p$1 + (get_local $$cond245) + ) + (set_local $$t$1 + (i32.const 120) + ) + (set_local $label + (i32.const 64) + ) + (br $switch17) + ) + ) + (nop) + ) + (block + (set_local $$fl$3 + (get_local $$fl$1$and219) + ) + (set_local $$p$1 + (get_local $$p$0) + ) + (set_local $$t$1 + (get_local $$t$0) + ) + (set_local $label + (i32.const 64) + ) + (br $switch17) + ) + ) + (block + (set_local $$116 + (get_local $$arg) + ) + (set_local $$117 + (get_local $$116) + ) + (set_local $$118 + (i32.load + (get_local $$117) + ) + ) + (set_local $$119 + (i32.add + (get_local $$116) + (i32.const 4) + ) + ) + (set_local $$120 + (get_local $$119) + ) + (set_local $$121 + (i32.load + (get_local $$120) + ) + ) + (set_local $$122 + (i32.eq + (get_local $$118) + (i32.const 0) + ) + ) + (set_local $$123 + (i32.eq + (get_local $$121) + (i32.const 0) + ) + ) + (set_local $$124 + (i32.and + (get_local $$122) + (get_local $$123) + ) + ) + (if + (get_local $$124) + (set_local $$s$addr$0$lcssa$i$229 + (get_local $$add$ptr205) + ) + (block + (set_local $$126 + (get_local $$118) + ) + (set_local $$129 + (get_local $$121) + ) + (set_local $$s$addr$06$i$221 + (get_local $$add$ptr205) + ) + (loop $while-in32 + (block $while-out31 + (set_local $$125 + (i32.and + (get_local $$126) + (i32.const 7) + ) + ) + (set_local $$127 + (i32.or + (get_local $$125) + (i32.const 48) + ) + ) + (set_local $$128 + (i32.and + (get_local $$127) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr$i$225 + (i32.add + (get_local $$s$addr$06$i$221) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr$i$225) + (get_local $$128) + ) + (set_local $$130 + (call $_bitshift64Lshr + (get_local $$126) + (get_local $$129) + (i32.const 3) + ) + ) + (set_local $$131 + (get_global $tempRet0) + ) + (set_local $$132 + (i32.eq + (get_local $$130) + (i32.const 0) + ) + ) + (set_local $$133 + (i32.eq + (get_local $$131) + (i32.const 0) + ) + ) + (set_local $$134 + (i32.and + (get_local $$132) + (get_local $$133) + ) + ) + (if + (get_local $$134) + (block + (set_local $$s$addr$0$lcssa$i$229 + (get_local $$incdec$ptr$i$225) + ) + (br $while-out31) + ) + (block + (set_local $$126 + (get_local $$130) + ) + (set_local $$129 + (get_local $$131) + ) + (set_local $$s$addr$06$i$221 + (get_local $$incdec$ptr$i$225) + ) + ) + ) + (br $while-in32) + ) + ) + ) + ) + (set_local $$and263 + (i32.and + (get_local $$fl$1$and219) + (i32.const 8) + ) + ) + (set_local $$tobool264 + (i32.eq + (get_local $$and263) + (i32.const 0) + ) + ) + (if + (get_local $$tobool264) + (block + (set_local $$a$0 + (get_local $$s$addr$0$lcssa$i$229) + ) + (set_local $$fl$4 + (get_local $$fl$1$and219) + ) + (set_local $$p$2 + (get_local $$p$0) + ) + (set_local $$pl$1 + (i32.const 0) + ) + (set_local $$prefix$1 + (i32.const 4091) + ) + (set_local $label + (i32.const 77) + ) + ) + (block + (set_local $$sub$ptr$rhs$cast267 + (get_local $$s$addr$0$lcssa$i$229) + ) + (set_local $$sub$ptr$sub268 + (i32.sub + (get_local $$sub$ptr$lhs$cast317) + (get_local $$sub$ptr$rhs$cast267) + ) + ) + (set_local $$add269 + (i32.add + (get_local $$sub$ptr$sub268) + (i32.const 1) + ) + ) + (set_local $$cmp270 + (i32.lt_s + (get_local $$p$0) + (get_local $$add269) + ) + ) + (set_local $$add269$p$0 + (if (result i32) + (get_local $$cmp270) + (get_local $$add269) + (get_local $$p$0) + ) + ) + (set_local $$a$0 + (get_local $$s$addr$0$lcssa$i$229) + ) + (set_local $$fl$4 + (get_local $$fl$1$and219) + ) + (set_local $$p$2 + (get_local $$add269$p$0) + ) + (set_local $$pl$1 + (i32.const 0) + ) + (set_local $$prefix$1 + (i32.const 4091) + ) + (set_local $label + (i32.const 77) + ) + ) + ) + (br $switch17) + ) + ) + (nop) + ) + (block + (set_local $$135 + (get_local $$arg) + ) + (set_local $$136 + (get_local $$135) + ) + (set_local $$137 + (i32.load + (get_local $$136) + ) + ) + (set_local $$138 + (i32.add + (get_local $$135) + (i32.const 4) + ) + ) + (set_local $$139 + (get_local $$138) + ) + (set_local $$140 + (i32.load + (get_local $$139) + ) + ) + (set_local $$141 + (i32.lt_s + (get_local $$140) + (i32.const 0) + ) + ) + (if + (get_local $$141) + (block + (set_local $$142 + (call $_i64Subtract + (i32.const 0) + (i32.const 0) + (get_local $$137) + (get_local $$140) + ) + ) + (set_local $$143 + (get_global $tempRet0) + ) + (set_local $$144 + (get_local $$arg) + ) + (set_local $$145 + (get_local $$144) + ) + (i32.store + (get_local $$145) + (get_local $$142) + ) + (set_local $$146 + (i32.add + (get_local $$144) + (i32.const 4) + ) + ) + (set_local $$147 + (get_local $$146) + ) + (i32.store + (get_local $$147) + (get_local $$143) + ) + (set_local $$148 + (get_local $$142) + ) + (set_local $$149 + (get_local $$143) + ) + (set_local $$pl$0 + (i32.const 1) + ) + (set_local $$prefix$0 + (i32.const 4091) + ) + (set_local $label + (i32.const 76) + ) + (br $label$break$L75) + ) + ) + (set_local $$and289 + (i32.and + (get_local $$fl$1$and219) + (i32.const 2048) + ) + ) + (set_local $$tobool290 + (i32.eq + (get_local $$and289) + (i32.const 0) + ) + ) + (if + (get_local $$tobool290) + (block + (set_local $$and294 + (i32.and + (get_local $$fl$1$and219) + (i32.const 1) + ) + ) + (set_local $$tobool295 + (i32.eq + (get_local $$and294) + (i32.const 0) + ) + ) + (set_local $$$ + (if (result i32) + (get_local $$tobool295) + (i32.const 4091) + (i32.const 4093) + ) + ) + (set_local $$148 + (get_local $$137) + ) + (set_local $$149 + (get_local $$140) + ) + (set_local $$pl$0 + (get_local $$and294) + ) + (set_local $$prefix$0 + (get_local $$$) + ) + (set_local $label + (i32.const 76) + ) + ) + (block + (set_local $$148 + (get_local $$137) + ) + (set_local $$149 + (get_local $$140) + ) + (set_local $$pl$0 + (i32.const 1) + ) + (set_local $$prefix$0 + (i32.const 4092) + ) + (set_local $label + (i32.const 76) + ) + ) + ) + (br $switch17) + ) + ) + (block + (set_local $$65 + (get_local $$arg) + ) + (set_local $$66 + (get_local $$65) + ) + (set_local $$67 + (i32.load + (get_local $$66) + ) + ) + (set_local $$68 + (i32.add + (get_local $$65) + (i32.const 4) + ) + ) + (set_local $$69 + (get_local $$68) + ) + (set_local $$70 + (i32.load + (get_local $$69) + ) + ) + (set_local $$148 + (get_local $$67) + ) + (set_local $$149 + (get_local $$70) + ) + (set_local $$pl$0 + (i32.const 0) + ) + (set_local $$prefix$0 + (i32.const 4091) + ) + (set_local $label + (i32.const 76) + ) + (br $switch17) + ) + ) + (block + (set_local $$161 + (get_local $$arg) + ) + (set_local $$162 + (get_local $$161) + ) + (set_local $$163 + (i32.load + (get_local $$162) + ) + ) + (set_local $$164 + (i32.add + (get_local $$161) + (i32.const 4) + ) + ) + (set_local $$165 + (get_local $$164) + ) + (set_local $$166 + (i32.load + (get_local $$165) + ) + ) + (set_local $$167 + (i32.and + (get_local $$163) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $$add$ptr340) + (get_local $$167) + ) + (set_local $$a$2 + (get_local $$add$ptr340) + ) + (set_local $$fl$6 + (get_local $$and219) + ) + (set_local $$p$5 + (i32.const 1) + ) + (set_local $$pl$2 + (i32.const 0) + ) + (set_local $$prefix$2 + (i32.const 4091) + ) + (set_local $$z$2 + (get_local $$add$ptr205) + ) + (br $switch17) + ) + ) + (block + (set_local $$call344 + (call $___errno_location) + ) + (set_local $$168 + (i32.load + (get_local $$call344) + ) + ) + (set_local $$call345 + (call $_strerror + (get_local $$168) + ) + ) + (set_local $$a$1 + (get_local $$call345) + ) + (set_local $label + (i32.const 82) + ) + (br $switch17) + ) + ) + (block + (set_local $$169 + (i32.load + (get_local $$arg) + ) + ) + (set_local $$tobool349 + (i32.ne + (get_local $$169) + (i32.const 0) + ) + ) + (set_local $$cond354 + (if (result i32) + (get_local $$tobool349) + (get_local $$169) + (i32.const 4101) + ) + ) + (set_local $$a$1 + (get_local $$cond354) + ) + (set_local $label + (i32.const 82) + ) + (br $switch17) + ) + ) + (block + (set_local $$170 + (get_local $$arg) + ) + (set_local $$171 + (get_local $$170) + ) + (set_local $$172 + (i32.load + (get_local $$171) + ) + ) + (set_local $$173 + (i32.add + (get_local $$170) + (i32.const 4) + ) + ) + (set_local $$174 + (get_local $$173) + ) + (set_local $$175 + (i32.load + (get_local $$174) + ) + ) + (i32.store + (get_local $$wc) + (get_local $$172) + ) + (i32.store + (get_local $$arrayidx370) + (i32.const 0) + ) + (i32.store + (get_local $$arg) + (get_local $$wc) + ) + (set_local $$p$4365 + (i32.const -1) + ) + (set_local $label + (i32.const 86) + ) + (br $switch17) + ) + ) + (block + (set_local $$cmp377$314 + (i32.eq + (get_local $$p$0) + (i32.const 0) + ) + ) + (if + (get_local $$cmp377$314) + (block + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (i32.const 0) + (get_local $$fl$1$and219) + ) + (set_local $$i$0$lcssa368 + (i32.const 0) + ) + (set_local $label + (i32.const 98) + ) + ) + (block + (set_local $$p$4365 + (get_local $$p$0) + ) + (set_local $label + (i32.const 86) + ) + ) + ) + (br $switch17) + ) + ) + (nop) + ) + (nop) + ) + (nop) + ) + (nop) + ) + (nop) + ) + (nop) + ) + (nop) + ) + (block + (set_local $$181 + (f64.load + (get_local $$arg) + ) + ) + (i32.store + (get_local $$e2$i) + (i32.const 0) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $$181) + ) + (set_local $$182 + (i32.load + (get_global $tempDoublePtr) + ) + ) + (set_local $$183 + (i32.load + (i32.add + (get_global $tempDoublePtr) + (i32.const 4) + ) + ) + ) + (set_local $$184 + (i32.lt_s + (get_local $$183) + (i32.const 0) + ) + ) + (if + (get_local $$184) + (block + (set_local $$sub$i + (f64.neg + (get_local $$181) + ) + ) + (set_local $$pl$0$i + (i32.const 1) + ) + (set_local $$prefix$0$i + (i32.const 4108) + ) + (set_local $$y$addr$0$i + (get_local $$sub$i) + ) + ) + (block + (set_local $$and$i$238 + (i32.and + (get_local $$fl$1$and219) + (i32.const 2048) + ) + ) + (set_local $$tobool9$i + (i32.eq + (get_local $$and$i$238) + (i32.const 0) + ) + ) + (if + (get_local $$tobool9$i) + (block + (set_local $$and12$i + (i32.and + (get_local $$fl$1$and219) + (i32.const 1) + ) + ) + (set_local $$tobool13$i + (i32.eq + (get_local $$and12$i) + (i32.const 0) + ) + ) + (set_local $$$$i + (if (result i32) + (get_local $$tobool13$i) + (i32.const 4109) + (i32.const 4114) + ) + ) + (set_local $$pl$0$i + (get_local $$and12$i) + ) + (set_local $$prefix$0$i + (get_local $$$$i) + ) + (set_local $$y$addr$0$i + (get_local $$181) + ) + ) + (block + (set_local $$pl$0$i + (i32.const 1) + ) + (set_local $$prefix$0$i + (i32.const 4111) + ) + (set_local $$y$addr$0$i + (get_local $$181) + ) + ) + ) + ) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $$y$addr$0$i) + ) + (set_local $$185 + (i32.load + (get_global $tempDoublePtr) + ) + ) + (set_local $$186 + (i32.load + (i32.add + (get_global $tempDoublePtr) + (i32.const 4) + ) + ) + ) + (set_local $$187 + (i32.and + (get_local $$186) + (i32.const 2146435072) + ) + ) + (set_local $$188 + (i32.lt_u + (get_local $$187) + (i32.const 2146435072) + ) + ) + (set_local $$189 + (i32.lt_s + (i32.const 0) + (i32.const 0) + ) + ) + (set_local $$190 + (i32.eq + (get_local $$187) + (i32.const 2146435072) + ) + ) + (set_local $$191 + (i32.and + (get_local $$190) + (get_local $$189) + ) + ) + (set_local $$192 + (i32.or + (get_local $$188) + (get_local $$191) + ) + ) + (block $do-once49 + (if + (get_local $$192) + (block + (set_local $$call55$i + (call $_frexpl + (get_local $$y$addr$0$i) + (get_local $$e2$i) + ) + ) + (set_local $$mul$i$240 + (f64.mul + (get_local $$call55$i) + (f64.const 2) + ) + ) + (set_local $$tobool56$i + (f64.ne + (get_local $$mul$i$240) + (f64.const 0) + ) + ) + (if + (get_local $$tobool56$i) + (block + (set_local $$195 + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$dec$i + (i32.add + (get_local $$195) + (i32.const -1) + ) + ) + (i32.store + (get_local $$e2$i) + (get_local $$dec$i) + ) + ) + ) + (set_local $$or$i$241 + (i32.or + (get_local $$t$0) + (i32.const 32) + ) + ) + (set_local $$cmp59$i + (i32.eq + (get_local $$or$i$241) + (i32.const 97) + ) + ) + (if + (get_local $$cmp59$i) + (block + (set_local $$and62$i + (i32.and + (get_local $$t$0) + (i32.const 32) + ) + ) + (set_local $$tobool63$i + (i32.eq + (get_local $$and62$i) + (i32.const 0) + ) + ) + (set_local $$add$ptr65$i + (i32.add + (get_local $$prefix$0$i) + (i32.const 9) + ) + ) + (set_local $$prefix$0$add$ptr65$i + (if (result i32) + (get_local $$tobool63$i) + (get_local $$prefix$0$i) + (get_local $$add$ptr65$i) + ) + ) + (set_local $$add67$i + (i32.or + (get_local $$pl$0$i) + (i32.const 2) + ) + ) + (set_local $$196 + (i32.gt_u + (get_local $$p$0) + (i32.const 11) + ) + ) + (set_local $$sub74$i + (i32.sub + (i32.const 12) + (get_local $$p$0) + ) + ) + (set_local $$tobool76552$i + (i32.eq + (get_local $$sub74$i) + (i32.const 0) + ) + ) + (set_local $$tobool76$i + (i32.or + (get_local $$196) + (get_local $$tobool76552$i) + ) + ) + (block $do-once51 + (if + (get_local $$tobool76$i) + (set_local $$y$addr$1$i + (get_local $$mul$i$240) + ) + (block + (set_local $$re$1482$i + (get_local $$sub74$i) + ) + (set_local $$round$0481$i + (f64.const 8) + ) + (loop $while-in54 + (block $while-out53 + (set_local $$dec78$i + (i32.add + (get_local $$re$1482$i) + (i32.const -1) + ) + ) + (set_local $$mul80$i + (f64.mul + (get_local $$round$0481$i) + (f64.const 16) + ) + ) + (set_local $$tobool79$i + (i32.eq + (get_local $$dec78$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool79$i) + (block + (set_local $$mul80$i$lcssa + (get_local $$mul80$i) + ) + (br $while-out53) + ) + (block + (set_local $$re$1482$i + (get_local $$dec78$i) + ) + (set_local $$round$0481$i + (get_local $$mul80$i) + ) + ) + ) + (br $while-in54) + ) + ) + (set_local $$197 + (i32.load8_s + (get_local $$prefix$0$add$ptr65$i) + ) + ) + (set_local $$cmp82$i + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$197) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 45) + ) + ) + (if + (get_local $$cmp82$i) + (block + (set_local $$sub85$i + (f64.neg + (get_local $$mul$i$240) + ) + ) + (set_local $$sub86$i + (f64.sub + (get_local $$sub85$i) + (get_local $$mul80$i$lcssa) + ) + ) + (set_local $$add87$i + (f64.add + (get_local $$mul80$i$lcssa) + (get_local $$sub86$i) + ) + ) + (set_local $$sub88$i + (f64.neg + (get_local $$add87$i) + ) + ) + (set_local $$y$addr$1$i + (get_local $$sub88$i) + ) + (br $do-once51) + ) + (block + (set_local $$add90$i + (f64.add + (get_local $$mul$i$240) + (get_local $$mul80$i$lcssa) + ) + ) + (set_local $$sub91$i + (f64.sub + (get_local $$add90$i) + (get_local $$mul80$i$lcssa) + ) + ) + (set_local $$y$addr$1$i + (get_local $$sub91$i) + ) + (br $do-once51) + ) + ) + ) + ) + ) + (set_local $$198 + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$cmp94$i + (i32.lt_s + (get_local $$198) + (i32.const 0) + ) + ) + (set_local $$sub97$i + (i32.sub + (i32.const 0) + (get_local $$198) + ) + ) + (set_local $$cond100$i + (if (result i32) + (get_local $$cmp94$i) + (get_local $$sub97$i) + (get_local $$198) + ) + ) + (set_local $$199 + (i32.lt_s + (get_local $$cond100$i) + (i32.const 0) + ) + ) + (set_local $$200 + (i32.shr_s + (i32.shl + (get_local $$199) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$201 + (call $_fmt_u + (get_local $$cond100$i) + (get_local $$200) + (get_local $$arrayidx$i$236) + ) + ) + (set_local $$cmp103$i + (i32.eq + (get_local $$201) + (get_local $$arrayidx$i$236) + ) + ) + (if + (get_local $$cmp103$i) + (block + (i32.store8 + (get_local $$incdec$ptr106$i) + (i32.const 48) + ) + (set_local $$estr$0$i + (get_local $$incdec$ptr106$i) + ) + ) + (set_local $$estr$0$i + (get_local $$201) + ) + ) + (set_local $$202 + (i32.shr_s + (get_local $$198) + (i32.const 31) + ) + ) + (set_local $$203 + (i32.and + (get_local $$202) + (i32.const 2) + ) + ) + (set_local $$204 + (i32.add + (get_local $$203) + (i32.const 43) + ) + ) + (set_local $$conv111$i + (i32.and + (get_local $$204) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr112$i + (i32.add + (get_local $$estr$0$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr112$i) + (get_local $$conv111$i) + ) + (set_local $$add113$i + (i32.add + (get_local $$t$0) + (i32.const 15) + ) + ) + (set_local $$conv114$i + (i32.and + (get_local $$add113$i) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr115$i + (i32.add + (get_local $$estr$0$i) + (i32.const -2) + ) + ) + (i32.store8 + (get_local $$incdec$ptr115$i) + (get_local $$conv114$i) + ) + (set_local $$notrhs$i + (i32.lt_s + (get_local $$p$0) + (i32.const 1) + ) + ) + (set_local $$and134$i + (i32.and + (get_local $$fl$1$and219) + (i32.const 8) + ) + ) + (set_local $$tobool135$i + (i32.eq + (get_local $$and134$i) + (i32.const 0) + ) + ) + (set_local $$s$0$i + (get_local $$buf$i) + ) + (set_local $$y$addr$2$i + (get_local $$y$addr$1$i) + ) + (loop $while-in56 + (block $while-out55 + (set_local $$conv116$i + (call $f64-to-int + (get_local $$y$addr$2$i) + ) + ) + (set_local $$arrayidx117$i + (i32.add + (i32.const 4075) + (get_local $$conv116$i) + ) + ) + (set_local $$205 + (i32.load8_s + (get_local $$arrayidx117$i) + ) + ) + (set_local $$conv118$393$i + (i32.and + (get_local $$205) + (i32.const 255) + ) + ) + (set_local $$or120$i + (i32.or + (get_local $$conv118$393$i) + (get_local $$and62$i) + ) + ) + (set_local $$conv121$i + (i32.and + (get_local $$or120$i) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr122$i + (i32.add + (get_local $$s$0$i) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $$s$0$i) + (get_local $$conv121$i) + ) + (set_local $$conv123$i + (f64.convert_s/i32 + (get_local $$conv116$i) + ) + ) + (set_local $$sub124$i + (f64.sub + (get_local $$y$addr$2$i) + (get_local $$conv123$i) + ) + ) + (set_local $$mul125$i + (f64.mul + (get_local $$sub124$i) + (f64.const 16) + ) + ) + (set_local $$sub$ptr$lhs$cast$i + (get_local $$incdec$ptr122$i) + ) + (set_local $$sub$ptr$sub$i + (i32.sub + (get_local $$sub$ptr$lhs$cast$i) + (get_local $$sub$ptr$rhs$cast$i) + ) + ) + (set_local $$cmp127$i + (i32.eq + (get_local $$sub$ptr$sub$i) + (i32.const 1) + ) + ) + (block $do-once57 + (if + (get_local $$cmp127$i) + (block + (set_local $$notlhs$i + (f64.eq + (get_local $$mul125$i) + (f64.const 0) + ) + ) + (set_local $$or$cond1$not$i + (i32.and + (get_local $$notrhs$i) + (get_local $$notlhs$i) + ) + ) + (set_local $$or$cond$i + (i32.and + (get_local $$tobool135$i) + (get_local $$or$cond1$not$i) + ) + ) + (if + (get_local $$or$cond$i) + (block + (set_local $$s$1$i + (get_local $$incdec$ptr122$i) + ) + (br $do-once57) + ) + ) + (set_local $$incdec$ptr137$i + (i32.add + (get_local $$s$0$i) + (i32.const 2) + ) + ) + (i32.store8 + (get_local $$incdec$ptr122$i) + (i32.const 46) + ) + (set_local $$s$1$i + (get_local $$incdec$ptr137$i) + ) + ) + (set_local $$s$1$i + (get_local $$incdec$ptr122$i) + ) + ) + ) + (set_local $$tobool139$i + (f64.ne + (get_local $$mul125$i) + (f64.const 0) + ) + ) + (if + (get_local $$tobool139$i) + (block + (set_local $$s$0$i + (get_local $$s$1$i) + ) + (set_local $$y$addr$2$i + (get_local $$mul125$i) + ) + ) + (block + (set_local $$s$1$i$lcssa + (get_local $$s$1$i) + ) + (br $while-out55) + ) + ) + (br $while-in56) + ) + ) + (set_local $$tobool140$i + (i32.ne + (get_local $$p$0) + (i32.const 0) + ) + ) + (set_local $$$pre566$i + (get_local $$s$1$i$lcssa) + ) + (set_local $$sub146$i + (i32.add + (get_local $$sub$ptr$sub145$i) + (get_local $$$pre566$i) + ) + ) + (set_local $$cmp147$i + (i32.lt_s + (get_local $$sub146$i) + (get_local $$p$0) + ) + ) + (set_local $$or$cond384 + (i32.and + (get_local $$tobool140$i) + (get_local $$cmp147$i) + ) + ) + (set_local $$sub$ptr$rhs$cast152$i + (get_local $$incdec$ptr115$i) + ) + (set_local $$add150$i + (i32.add + (get_local $$sub$ptr$sub153$i) + (get_local $$p$0) + ) + ) + (set_local $$add154$i + (i32.sub + (get_local $$add150$i) + (get_local $$sub$ptr$rhs$cast152$i) + ) + ) + (set_local $$sub$ptr$rhs$cast161$i + (get_local $$incdec$ptr115$i) + ) + (set_local $$sub$ptr$sub162$i + (i32.sub + (get_local $$sub$ptr$sub159$i) + (get_local $$sub$ptr$rhs$cast161$i) + ) + ) + (set_local $$add163$i + (i32.add + (get_local $$sub$ptr$sub162$i) + (get_local $$$pre566$i) + ) + ) + (set_local $$l$0$i + (if (result i32) + (get_local $$or$cond384) + (get_local $$add154$i) + (get_local $$add163$i) + ) + ) + (set_local $$add165$i + (i32.add + (get_local $$l$0$i) + (get_local $$add67$i) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$add165$i) + (get_local $$fl$1$and219) + ) + (set_local $$206 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$418$i + (i32.and + (get_local $$206) + (i32.const 32) + ) + ) + (set_local $$tobool$i$419$i + (i32.eq + (get_local $$and$i$418$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$419$i) + (drop + (call $___fwritex + (get_local $$prefix$0$add$ptr65$i) + (get_local $$add67$i) + (get_local $$f) + ) + ) + ) + (set_local $$xor167$i + (i32.xor + (get_local $$fl$1$and219) + (i32.const 65536) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$w$1) + (get_local $$add165$i) + (get_local $$xor167$i) + ) + (set_local $$sub$ptr$sub172$i + (i32.sub + (get_local $$$pre566$i) + (get_local $$sub$ptr$rhs$cast$i) + ) + ) + (set_local $$207 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$424$i + (i32.and + (get_local $$207) + (i32.const 32) + ) + ) + (set_local $$tobool$i$425$i + (i32.eq + (get_local $$and$i$424$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$425$i) + (drop + (call $___fwritex + (get_local $$buf$i) + (get_local $$sub$ptr$sub172$i) + (get_local $$f) + ) + ) + ) + (set_local $$sub$ptr$rhs$cast174$i + (get_local $$incdec$ptr115$i) + ) + (set_local $$sub$ptr$sub175$i + (i32.sub + (get_local $$sub$ptr$lhs$cast160$i) + (get_local $$sub$ptr$rhs$cast174$i) + ) + ) + (set_local $$sum + (i32.add + (get_local $$sub$ptr$sub172$i) + (get_local $$sub$ptr$sub175$i) + ) + ) + (set_local $$sub181$i + (i32.sub + (get_local $$l$0$i) + (get_local $$sum) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$sub181$i) + (i32.const 0) + (i32.const 0) + ) + (set_local $$208 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$430$i + (i32.and + (get_local $$208) + (i32.const 32) + ) + ) + (set_local $$tobool$i$431$i + (i32.eq + (get_local $$and$i$430$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$431$i) + (drop + (call $___fwritex + (get_local $$incdec$ptr115$i) + (get_local $$sub$ptr$sub175$i) + (get_local $$f) + ) + ) + ) + (set_local $$xor186$i + (i32.xor + (get_local $$fl$1$and219) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$add165$i) + (get_local $$xor186$i) + ) + (set_local $$cmp188$i + (i32.lt_s + (get_local $$add165$i) + (get_local $$w$1) + ) + ) + (set_local $$w$add165$i + (if (result i32) + (get_local $$cmp188$i) + (get_local $$w$1) + (get_local $$add165$i) + ) + ) + (set_local $$retval$0$i + (get_local $$w$add165$i) + ) + (br $do-once49) + ) + ) + (set_local $$cmp196$i + (i32.lt_s + (get_local $$p$0) + (i32.const 0) + ) + ) + (set_local $$$p$i + (if (result i32) + (get_local $$cmp196$i) + (i32.const 6) + (get_local $$p$0) + ) + ) + (if + (get_local $$tobool56$i) + (block + (set_local $$mul202$i + (f64.mul + (get_local $$mul$i$240) + (f64.const 268435456) + ) + ) + (set_local $$209 + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$sub203$i + (i32.add + (get_local $$209) + (i32.const -28) + ) + ) + (i32.store + (get_local $$e2$i) + (get_local $$sub203$i) + ) + (set_local $$210 + (get_local $$sub203$i) + ) + (set_local $$y$addr$3$i + (get_local $$mul202$i) + ) + ) + (block + (set_local $$$pre564$i + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$210 + (get_local $$$pre564$i) + ) + (set_local $$y$addr$3$i + (get_local $$mul$i$240) + ) + ) + ) + (set_local $$cmp205$i + (i32.lt_s + (get_local $$210) + (i32.const 0) + ) + ) + (set_local $$arraydecay208$add$ptr213$i + (if (result i32) + (get_local $$cmp205$i) + (get_local $$big$i) + (get_local $$add$ptr213$i) + ) + ) + (set_local $$sub$ptr$rhs$cast345$i + (get_local $$arraydecay208$add$ptr213$i) + ) + (set_local $$y$addr$4$i + (get_local $$y$addr$3$i) + ) + (set_local $$z$0$i + (get_local $$arraydecay208$add$ptr213$i) + ) + (loop $while-in60 + (block $while-out59 + (set_local $$conv216$i + (call $f64-to-int + (get_local $$y$addr$4$i) + ) + ) + (i32.store + (get_local $$z$0$i) + (get_local $$conv216$i) + ) + (set_local $$incdec$ptr217$i + (i32.add + (get_local $$z$0$i) + (i32.const 4) + ) + ) + (set_local $$conv218$i + (f64.convert_u/i32 + (get_local $$conv216$i) + ) + ) + (set_local $$sub219$i + (f64.sub + (get_local $$y$addr$4$i) + (get_local $$conv218$i) + ) + ) + (set_local $$mul220$i + (f64.mul + (get_local $$sub219$i) + (f64.const 1e9) + ) + ) + (set_local $$tobool222$i + (f64.ne + (get_local $$mul220$i) + (f64.const 0) + ) + ) + (if + (get_local $$tobool222$i) + (block + (set_local $$y$addr$4$i + (get_local $$mul220$i) + ) + (set_local $$z$0$i + (get_local $$incdec$ptr217$i) + ) + ) + (block + (set_local $$incdec$ptr217$i$lcssa + (get_local $$incdec$ptr217$i) + ) + (br $while-out59) + ) + ) + (br $while-in60) + ) + ) + (set_local $$$pr$i + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$cmp225$547$i + (i32.gt_s + (get_local $$$pr$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp225$547$i) + (block + (set_local $$211 + (get_local $$$pr$i) + ) + (set_local $$a$1549$i + (get_local $$arraydecay208$add$ptr213$i) + ) + (set_local $$z$1548$i + (get_local $$incdec$ptr217$i$lcssa) + ) + (loop $while-in62 + (block $while-out61 + (set_local $$cmp228$i + (i32.gt_s + (get_local $$211) + (i32.const 29) + ) + ) + (set_local $$cond233$i + (if (result i32) + (get_local $$cmp228$i) + (i32.const 29) + (get_local $$211) + ) + ) + (set_local $$d$0$542$i + (i32.add + (get_local $$z$1548$i) + (i32.const -4) + ) + ) + (set_local $$cmp235$543$i + (i32.lt_u + (get_local $$d$0$542$i) + (get_local $$a$1549$i) + ) + ) + (block $do-once63 + (if + (get_local $$cmp235$543$i) + (set_local $$a$2$ph$i + (get_local $$a$1549$i) + ) + (block + (set_local $$carry$0544$i + (i32.const 0) + ) + (set_local $$d$0545$i + (get_local $$d$0$542$i) + ) + (loop $while-in66 + (block $while-out65 + (set_local $$212 + (i32.load + (get_local $$d$0545$i) + ) + ) + (set_local $$213 + (call $_bitshift64Shl + (get_local $$212) + (i32.const 0) + (get_local $$cond233$i) + ) + ) + (set_local $$214 + (get_global $tempRet0) + ) + (set_local $$215 + (call $_i64Add + (get_local $$213) + (get_local $$214) + (get_local $$carry$0544$i) + (i32.const 0) + ) + ) + (set_local $$216 + (get_global $tempRet0) + ) + (set_local $$217 + (call $___uremdi3 + (get_local $$215) + (get_local $$216) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (set_local $$218 + (get_global $tempRet0) + ) + (i32.store + (get_local $$d$0545$i) + (get_local $$217) + ) + (set_local $$219 + (call $___udivdi3 + (get_local $$215) + (get_local $$216) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (set_local $$220 + (get_global $tempRet0) + ) + (set_local $$d$0$i + (i32.add + (get_local $$d$0545$i) + (i32.const -4) + ) + ) + (set_local $$cmp235$i + (i32.lt_u + (get_local $$d$0$i) + (get_local $$a$1549$i) + ) + ) + (if + (get_local $$cmp235$i) + (block + (set_local $$conv242$i$lcssa + (get_local $$219) + ) + (br $while-out65) + ) + (block + (set_local $$carry$0544$i + (get_local $$219) + ) + (set_local $$d$0545$i + (get_local $$d$0$i) + ) + ) + ) + (br $while-in66) + ) + ) + (set_local $$tobool244$i + (i32.eq + (get_local $$conv242$i$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$tobool244$i) + (block + (set_local $$a$2$ph$i + (get_local $$a$1549$i) + ) + (br $do-once63) + ) + ) + (set_local $$incdec$ptr246$i + (i32.add + (get_local $$a$1549$i) + (i32.const -4) + ) + ) + (i32.store + (get_local $$incdec$ptr246$i) + (get_local $$conv242$i$lcssa) + ) + (set_local $$a$2$ph$i + (get_local $$incdec$ptr246$i) + ) + ) + ) + ) + (set_local $$z$2$i + (get_local $$z$1548$i) + ) + (loop $while-in68 + (block $while-out67 + (set_local $$cmp249$i + (i32.gt_u + (get_local $$z$2$i) + (get_local $$a$2$ph$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp249$i) + ) + (block + (set_local $$z$2$i$lcssa + (get_local $$z$2$i) + ) + (br $while-out67) + ) + ) + (set_local $$arrayidx251$i + (i32.add + (get_local $$z$2$i) + (i32.const -4) + ) + ) + (set_local $$221 + (i32.load + (get_local $$arrayidx251$i) + ) + ) + (set_local $$lnot$i + (i32.eq + (get_local $$221) + (i32.const 0) + ) + ) + (if + (get_local $$lnot$i) + (set_local $$z$2$i + (get_local $$arrayidx251$i) + ) + (block + (set_local $$z$2$i$lcssa + (get_local $$z$2$i) + ) + (br $while-out67) + ) + ) + (br $while-in68) + ) + ) + (set_local $$222 + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$sub256$i + (i32.sub + (get_local $$222) + (get_local $$cond233$i) + ) + ) + (i32.store + (get_local $$e2$i) + (get_local $$sub256$i) + ) + (set_local $$cmp225$i + (i32.gt_s + (get_local $$sub256$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp225$i) + (block + (set_local $$211 + (get_local $$sub256$i) + ) + (set_local $$a$1549$i + (get_local $$a$2$ph$i) + ) + (set_local $$z$1548$i + (get_local $$z$2$i$lcssa) + ) + ) + (block + (set_local $$$pr477$i + (get_local $$sub256$i) + ) + (set_local $$a$1$lcssa$i + (get_local $$a$2$ph$i) + ) + (set_local $$z$1$lcssa$i + (get_local $$z$2$i$lcssa) + ) + (br $while-out61) + ) + ) + (br $while-in62) + ) + ) + ) + (block + (set_local $$$pr477$i + (get_local $$$pr$i) + ) + (set_local $$a$1$lcssa$i + (get_local $$arraydecay208$add$ptr213$i) + ) + (set_local $$z$1$lcssa$i + (get_local $$incdec$ptr217$i$lcssa) + ) + ) + ) + (set_local $$cmp259$537$i + (i32.lt_s + (get_local $$$pr477$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp259$537$i) + (block + (set_local $$add273$i + (i32.add + (get_local $$$p$i) + (i32.const 25) + ) + ) + (set_local $$div274$i + (i32.and + (call $i32s-div + (get_local $$add273$i) + (i32.const 9) + ) + (i32.const -1) + ) + ) + (set_local $$add275$i + (i32.add + (get_local $$div274$i) + (i32.const 1) + ) + ) + (set_local $$cmp299$i + (i32.eq + (get_local $$or$i$241) + (i32.const 102) + ) + ) + (set_local $$223 + (get_local $$$pr477$i) + ) + (set_local $$a$3539$i + (get_local $$a$1$lcssa$i) + ) + (set_local $$z$3538$i + (get_local $$z$1$lcssa$i) + ) + (loop $while-in70 + (block $while-out69 + (set_local $$sub264$i + (i32.sub + (i32.const 0) + (get_local $$223) + ) + ) + (set_local $$cmp265$i + (i32.gt_s + (get_local $$sub264$i) + (i32.const 9) + ) + ) + (set_local $$cond271$i + (if (result i32) + (get_local $$cmp265$i) + (i32.const 9) + (get_local $$sub264$i) + ) + ) + (set_local $$cmp277$533$i + (i32.lt_u + (get_local $$a$3539$i) + (get_local $$z$3538$i) + ) + ) + (block $do-once71 + (if + (get_local $$cmp277$533$i) + (block + (set_local $$shl280$i + (i32.shl + (i32.const 1) + (get_local $$cond271$i) + ) + ) + (set_local $$sub281$i + (i32.add + (get_local $$shl280$i) + (i32.const -1) + ) + ) + (set_local $$shr285$i + (i32.shr_u + (i32.const 1000000000) + (get_local $$cond271$i) + ) + ) + (set_local $$carry262$0535$i + (i32.const 0) + ) + (set_local $$d$1534$i + (get_local $$a$3539$i) + ) + (loop $while-in74 + (block $while-out73 + (set_local $$225 + (i32.load + (get_local $$d$1534$i) + ) + ) + (set_local $$and282$i + (i32.and + (get_local $$225) + (get_local $$sub281$i) + ) + ) + (set_local $$shr283$i + (i32.shr_u + (get_local $$225) + (get_local $$cond271$i) + ) + ) + (set_local $$add284$i + (i32.add + (get_local $$shr283$i) + (get_local $$carry262$0535$i) + ) + ) + (i32.store + (get_local $$d$1534$i) + (get_local $$add284$i) + ) + (set_local $$mul286$i + (i32.mul + (get_local $$and282$i) + (get_local $$shr285$i) + ) + ) + (set_local $$incdec$ptr288$i + (i32.add + (get_local $$d$1534$i) + (i32.const 4) + ) + ) + (set_local $$cmp277$i + (i32.lt_u + (get_local $$incdec$ptr288$i) + (get_local $$z$3538$i) + ) + ) + (if + (get_local $$cmp277$i) + (block + (set_local $$carry262$0535$i + (get_local $$mul286$i) + ) + (set_local $$d$1534$i + (get_local $$incdec$ptr288$i) + ) + ) + (block + (set_local $$mul286$i$lcssa + (get_local $$mul286$i) + ) + (br $while-out73) + ) + ) + (br $while-in74) + ) + ) + (set_local $$226 + (i32.load + (get_local $$a$3539$i) + ) + ) + (set_local $$tobool290$i + (i32.eq + (get_local $$226) + (i32.const 0) + ) + ) + (set_local $$incdec$ptr292$i + (i32.add + (get_local $$a$3539$i) + (i32.const 4) + ) + ) + (set_local $$incdec$ptr292$a$3$i + (if (result i32) + (get_local $$tobool290$i) + (get_local $$incdec$ptr292$i) + (get_local $$a$3539$i) + ) + ) + (set_local $$tobool294$i + (i32.eq + (get_local $$mul286$i$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$tobool294$i) + (block + (set_local $$incdec$ptr292$a$3573$i + (get_local $$incdec$ptr292$a$3$i) + ) + (set_local $$z$4$i + (get_local $$z$3538$i) + ) + (br $do-once71) + ) + ) + (set_local $$incdec$ptr296$i + (i32.add + (get_local $$z$3538$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$z$3538$i) + (get_local $$mul286$i$lcssa) + ) + (set_local $$incdec$ptr292$a$3573$i + (get_local $$incdec$ptr292$a$3$i) + ) + (set_local $$z$4$i + (get_local $$incdec$ptr296$i) + ) + ) + (block + (set_local $$224 + (i32.load + (get_local $$a$3539$i) + ) + ) + (set_local $$tobool290$569$i + (i32.eq + (get_local $$224) + (i32.const 0) + ) + ) + (set_local $$incdec$ptr292$570$i + (i32.add + (get_local $$a$3539$i) + (i32.const 4) + ) + ) + (set_local $$incdec$ptr292$a$3$571$i + (if (result i32) + (get_local $$tobool290$569$i) + (get_local $$incdec$ptr292$570$i) + (get_local $$a$3539$i) + ) + ) + (set_local $$incdec$ptr292$a$3573$i + (get_local $$incdec$ptr292$a$3$571$i) + ) + (set_local $$z$4$i + (get_local $$z$3538$i) + ) + ) + ) + ) + (set_local $$cond304$i + (if (result i32) + (get_local $$cmp299$i) + (get_local $$arraydecay208$add$ptr213$i) + (get_local $$incdec$ptr292$a$3573$i) + ) + ) + (set_local $$sub$ptr$lhs$cast305$i + (get_local $$z$4$i) + ) + (set_local $$sub$ptr$rhs$cast306$i + (get_local $$cond304$i) + ) + (set_local $$sub$ptr$sub307$i + (i32.sub + (get_local $$sub$ptr$lhs$cast305$i) + (get_local $$sub$ptr$rhs$cast306$i) + ) + ) + (set_local $$sub$ptr$div$i + (i32.shr_s + (get_local $$sub$ptr$sub307$i) + (i32.const 2) + ) + ) + (set_local $$cmp308$i + (i32.gt_s + (get_local $$sub$ptr$div$i) + (get_local $$add275$i) + ) + ) + (set_local $$add$ptr311$i + (i32.add + (get_local $$cond304$i) + (i32.shl + (get_local $$add275$i) + (i32.const 2) + ) + ) + ) + (set_local $$add$ptr311$z$4$i + (if (result i32) + (get_local $$cmp308$i) + (get_local $$add$ptr311$i) + (get_local $$z$4$i) + ) + ) + (set_local $$227 + (i32.load + (get_local $$e2$i) + ) + ) + (set_local $$add313$i + (i32.add + (get_local $$227) + (get_local $$cond271$i) + ) + ) + (i32.store + (get_local $$e2$i) + (get_local $$add313$i) + ) + (set_local $$cmp259$i + (i32.lt_s + (get_local $$add313$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp259$i) + (block + (set_local $$223 + (get_local $$add313$i) + ) + (set_local $$a$3539$i + (get_local $$incdec$ptr292$a$3573$i) + ) + (set_local $$z$3538$i + (get_local $$add$ptr311$z$4$i) + ) + ) + (block + (set_local $$a$3$lcssa$i + (get_local $$incdec$ptr292$a$3573$i) + ) + (set_local $$z$3$lcssa$i + (get_local $$add$ptr311$z$4$i) + ) + (br $while-out69) + ) + ) + (br $while-in70) + ) + ) + ) + (block + (set_local $$a$3$lcssa$i + (get_local $$a$1$lcssa$i) + ) + (set_local $$z$3$lcssa$i + (get_local $$z$1$lcssa$i) + ) + ) + ) + (set_local $$cmp315$i + (i32.lt_u + (get_local $$a$3$lcssa$i) + (get_local $$z$3$lcssa$i) + ) + ) + (block $do-once75 + (if + (get_local $$cmp315$i) + (block + (set_local $$sub$ptr$rhs$cast319$i + (get_local $$a$3$lcssa$i) + ) + (set_local $$sub$ptr$sub320$i + (i32.sub + (get_local $$sub$ptr$rhs$cast345$i) + (get_local $$sub$ptr$rhs$cast319$i) + ) + ) + (set_local $$sub$ptr$div321$i + (i32.shr_s + (get_local $$sub$ptr$sub320$i) + (i32.const 2) + ) + ) + (set_local $$mul322$i + (i32.mul + (get_local $$sub$ptr$div321$i) + (i32.const 9) + ) + ) + (set_local $$228 + (i32.load + (get_local $$a$3$lcssa$i) + ) + ) + (set_local $$cmp324$529$i + (i32.lt_u + (get_local $$228) + (i32.const 10) + ) + ) + (if + (get_local $$cmp324$529$i) + (block + (set_local $$e$1$i + (get_local $$mul322$i) + ) + (br $do-once75) + ) + (block + (set_local $$e$0531$i + (get_local $$mul322$i) + ) + (set_local $$i$0530$i + (i32.const 10) + ) + ) + ) + (loop $while-in78 + (block $while-out77 + (set_local $$mul328$i + (i32.mul + (get_local $$i$0530$i) + (i32.const 10) + ) + ) + (set_local $$inc$i + (i32.add + (get_local $$e$0531$i) + (i32.const 1) + ) + ) + (set_local $$cmp324$i + (i32.lt_u + (get_local $$228) + (get_local $$mul328$i) + ) + ) + (if + (get_local $$cmp324$i) + (block + (set_local $$e$1$i + (get_local $$inc$i) + ) + (br $while-out77) + ) + (block + (set_local $$e$0531$i + (get_local $$inc$i) + ) + (set_local $$i$0530$i + (get_local $$mul328$i) + ) + ) + ) + (br $while-in78) + ) + ) + ) + (set_local $$e$1$i + (i32.const 0) + ) + ) + ) + (set_local $$cmp333$i + (i32.ne + (get_local $$or$i$241) + (i32.const 102) + ) + ) + (set_local $$mul335$i + (if (result i32) + (get_local $$cmp333$i) + (get_local $$e$1$i) + (i32.const 0) + ) + ) + (set_local $$sub336$i + (i32.sub + (get_local $$$p$i) + (get_local $$mul335$i) + ) + ) + (set_local $$cmp338$i + (i32.eq + (get_local $$or$i$241) + (i32.const 103) + ) + ) + (set_local $$tobool341$i + (i32.ne + (get_local $$$p$i) + (i32.const 0) + ) + ) + (set_local $$229 + (i32.and + (get_local $$tobool341$i) + (get_local $$cmp338$i) + ) + ) + (set_local $$land$ext$neg$i + (i32.shr_s + (i32.shl + (get_local $$229) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$sub343$i + (i32.add + (get_local $$sub336$i) + (get_local $$land$ext$neg$i) + ) + ) + (set_local $$sub$ptr$lhs$cast344$i + (get_local $$z$3$lcssa$i) + ) + (set_local $$sub$ptr$sub346$i + (i32.sub + (get_local $$sub$ptr$lhs$cast344$i) + (get_local $$sub$ptr$rhs$cast345$i) + ) + ) + (set_local $$sub$ptr$div347$i + (i32.shr_s + (get_local $$sub$ptr$sub346$i) + (i32.const 2) + ) + ) + (set_local $$230 + (i32.mul + (get_local $$sub$ptr$div347$i) + (i32.const 9) + ) + ) + (set_local $$mul349$i + (i32.add + (get_local $$230) + (i32.const -9) + ) + ) + (set_local $$cmp350$i + (i32.lt_s + (get_local $$sub343$i) + (get_local $$mul349$i) + ) + ) + (if + (get_local $$cmp350$i) + (block + (set_local $$add$ptr354$i + (i32.add + (get_local $$arraydecay208$add$ptr213$i) + (i32.const 4) + ) + ) + (set_local $$add355$i + (i32.add + (get_local $$sub343$i) + (i32.const 9216) + ) + ) + (set_local $$div356$i + (i32.and + (call $i32s-div + (get_local $$add355$i) + (i32.const 9) + ) + (i32.const -1) + ) + ) + (set_local $$sub357$i + (i32.add + (get_local $$div356$i) + (i32.const -1024) + ) + ) + (set_local $$add$ptr358$i + (i32.add + (get_local $$add$ptr354$i) + (i32.shl + (get_local $$sub357$i) + (i32.const 2) + ) + ) + ) + (set_local $$rem360$i + (i32.and + (call $i32s-rem + (get_local $$add355$i) + (i32.const 9) + ) + (i32.const -1) + ) + ) + (set_local $$j$0$524$i + (i32.add + (get_local $$rem360$i) + (i32.const 1) + ) + ) + (set_local $$cmp363$525$i + (i32.lt_s + (get_local $$j$0$524$i) + (i32.const 9) + ) + ) + (if + (get_local $$cmp363$525$i) + (block + (set_local $$i$1526$i + (i32.const 10) + ) + (set_local $$j$0527$i + (get_local $$j$0$524$i) + ) + (loop $while-in80 + (block $while-out79 + (set_local $$mul367$i + (i32.mul + (get_local $$i$1526$i) + (i32.const 10) + ) + ) + (set_local $$j$0$i + (i32.add + (get_local $$j$0527$i) + (i32.const 1) + ) + ) + (set_local $$exitcond$i + (i32.eq + (get_local $$j$0$i) + (i32.const 9) + ) + ) + (if + (get_local $$exitcond$i) + (block + (set_local $$i$1$lcssa$i + (get_local $$mul367$i) + ) + (br $while-out79) + ) + (block + (set_local $$i$1526$i + (get_local $$mul367$i) + ) + (set_local $$j$0527$i + (get_local $$j$0$i) + ) + ) + ) + (br $while-in80) + ) + ) + ) + (set_local $$i$1$lcssa$i + (i32.const 10) + ) + ) + (set_local $$231 + (i32.load + (get_local $$add$ptr358$i) + ) + ) + (set_local $$rem370$i + (i32.and + (call $i32u-rem + (get_local $$231) + (get_local $$i$1$lcssa$i) + ) + (i32.const -1) + ) + ) + (set_local $$tobool371$i + (i32.eq + (get_local $$rem370$i) + (i32.const 0) + ) + ) + (set_local $$add$ptr373$i + (i32.add + (get_local $$add$ptr358$i) + (i32.const 4) + ) + ) + (set_local $$cmp374$i + (i32.eq + (get_local $$add$ptr373$i) + (get_local $$z$3$lcssa$i) + ) + ) + (set_local $$or$cond395$i + (i32.and + (get_local $$cmp374$i) + (get_local $$tobool371$i) + ) + ) + (block $do-once81 + (if + (get_local $$or$cond395$i) + (block + (set_local $$a$8$i + (get_local $$a$3$lcssa$i) + ) + (set_local $$d$4$i + (get_local $$add$ptr358$i) + ) + (set_local $$e$4$i + (get_local $$e$1$i) + ) + ) + (block + (set_local $$div378$i + (i32.and + (call $i32u-div + (get_local $$231) + (get_local $$i$1$lcssa$i) + ) + (i32.const -1) + ) + ) + (set_local $$and379$i + (i32.and + (get_local $$div378$i) + (i32.const 1) + ) + ) + (set_local $$tobool380$i + (i32.eq + (get_local $$and379$i) + (i32.const 0) + ) + ) + (set_local $$$396$i + (if (result f64) + (get_local $$tobool380$i) + (f64.const 9007199254740992) + (f64.const 9007199254740994) + ) + ) + (set_local $$div384$i + (i32.and + (call $i32s-div + (get_local $$i$1$lcssa$i) + (i32.const 2) + ) + (i32.const -1) + ) + ) + (set_local $$cmp385$i + (i32.lt_u + (get_local $$rem370$i) + (get_local $$div384$i) + ) + ) + (if + (get_local $$cmp385$i) + (set_local $$small$0$i + (f64.const 0.5) + ) + (block + (set_local $$cmp390$i + (i32.eq + (get_local $$rem370$i) + (get_local $$div384$i) + ) + ) + (set_local $$or$cond397$i + (i32.and + (get_local $$cmp374$i) + (get_local $$cmp390$i) + ) + ) + (set_local $$$404$i + (if (result f64) + (get_local $$or$cond397$i) + (f64.const 1) + (f64.const 1.5) + ) + ) + (set_local $$small$0$i + (get_local $$$404$i) + ) + ) + ) + (set_local $$tobool400$i + (i32.eq + (get_local $$pl$0$i) + (i32.const 0) + ) + ) + (block $do-once83 + (if + (get_local $$tobool400$i) + (block + (set_local $$round377$1$i + (get_local $$$396$i) + ) + (set_local $$small$1$i + (get_local $$small$0$i) + ) + ) + (block + (set_local $$232 + (i32.load8_s + (get_local $$prefix$0$i) + ) + ) + (set_local $$cmp403$i + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$232) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 45) + ) + ) + (if + (i32.eqz + (get_local $$cmp403$i) + ) + (block + (set_local $$round377$1$i + (get_local $$$396$i) + ) + (set_local $$small$1$i + (get_local $$small$0$i) + ) + (br $do-once83) + ) + ) + (set_local $$mul406$i + (f64.neg + (get_local $$$396$i) + ) + ) + (set_local $$mul407$i + (f64.neg + (get_local $$small$0$i) + ) + ) + (set_local $$round377$1$i + (get_local $$mul406$i) + ) + (set_local $$small$1$i + (get_local $$mul407$i) + ) + ) + ) + ) + (set_local $$sub409$i + (i32.sub + (get_local $$231) + (get_local $$rem370$i) + ) + ) + (i32.store + (get_local $$add$ptr358$i) + (get_local $$sub409$i) + ) + (set_local $$add410$i + (f64.add + (get_local $$round377$1$i) + (get_local $$small$1$i) + ) + ) + (set_local $$cmp411$i + (f64.ne + (get_local $$add410$i) + (get_local $$round377$1$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp411$i) + ) + (block + (set_local $$a$8$i + (get_local $$a$3$lcssa$i) + ) + (set_local $$d$4$i + (get_local $$add$ptr358$i) + ) + (set_local $$e$4$i + (get_local $$e$1$i) + ) + (br $do-once81) + ) + ) + (set_local $$add414$i + (i32.add + (get_local $$sub409$i) + (get_local $$i$1$lcssa$i) + ) + ) + (i32.store + (get_local $$add$ptr358$i) + (get_local $$add414$i) + ) + (set_local $$cmp416$519$i + (i32.gt_u + (get_local $$add414$i) + (i32.const 999999999) + ) + ) + (if + (get_local $$cmp416$519$i) + (block + (set_local $$a$5521$i + (get_local $$a$3$lcssa$i) + ) + (set_local $$d$2520$i + (get_local $$add$ptr358$i) + ) + (loop $while-in86 + (block $while-out85 + (set_local $$incdec$ptr419$i + (i32.add + (get_local $$d$2520$i) + (i32.const -4) + ) + ) + (i32.store + (get_local $$d$2520$i) + (i32.const 0) + ) + (set_local $$cmp420$i + (i32.lt_u + (get_local $$incdec$ptr419$i) + (get_local $$a$5521$i) + ) + ) + (if + (get_local $$cmp420$i) + (block + (set_local $$incdec$ptr423$i + (i32.add + (get_local $$a$5521$i) + (i32.const -4) + ) + ) + (i32.store + (get_local $$incdec$ptr423$i) + (i32.const 0) + ) + (set_local $$a$6$i + (get_local $$incdec$ptr423$i) + ) + ) + (set_local $$a$6$i + (get_local $$a$5521$i) + ) + ) + (set_local $$233 + (i32.load + (get_local $$incdec$ptr419$i) + ) + ) + (set_local $$inc425$i + (i32.add + (get_local $$233) + (i32.const 1) + ) + ) + (i32.store + (get_local $$incdec$ptr419$i) + (get_local $$inc425$i) + ) + (set_local $$cmp416$i + (i32.gt_u + (get_local $$inc425$i) + (i32.const 999999999) + ) + ) + (if + (get_local $$cmp416$i) + (block + (set_local $$a$5521$i + (get_local $$a$6$i) + ) + (set_local $$d$2520$i + (get_local $$incdec$ptr419$i) + ) + ) + (block + (set_local $$a$5$lcssa$i + (get_local $$a$6$i) + ) + (set_local $$d$2$lcssa$i + (get_local $$incdec$ptr419$i) + ) + (br $while-out85) + ) + ) + (br $while-in86) + ) + ) + ) + (block + (set_local $$a$5$lcssa$i + (get_local $$a$3$lcssa$i) + ) + (set_local $$d$2$lcssa$i + (get_local $$add$ptr358$i) + ) + ) + ) + (set_local $$sub$ptr$rhs$cast428$i + (get_local $$a$5$lcssa$i) + ) + (set_local $$sub$ptr$sub429$i + (i32.sub + (get_local $$sub$ptr$rhs$cast345$i) + (get_local $$sub$ptr$rhs$cast428$i) + ) + ) + (set_local $$sub$ptr$div430$i + (i32.shr_s + (get_local $$sub$ptr$sub429$i) + (i32.const 2) + ) + ) + (set_local $$mul431$i + (i32.mul + (get_local $$sub$ptr$div430$i) + (i32.const 9) + ) + ) + (set_local $$234 + (i32.load + (get_local $$a$5$lcssa$i) + ) + ) + (set_local $$cmp433$515$i + (i32.lt_u + (get_local $$234) + (i32.const 10) + ) + ) + (if + (get_local $$cmp433$515$i) + (block + (set_local $$a$8$i + (get_local $$a$5$lcssa$i) + ) + (set_local $$d$4$i + (get_local $$d$2$lcssa$i) + ) + (set_local $$e$4$i + (get_local $$mul431$i) + ) + (br $do-once81) + ) + (block + (set_local $$e$2517$i + (get_local $$mul431$i) + ) + (set_local $$i$2516$i + (i32.const 10) + ) + ) + ) + (loop $while-in88 + (block $while-out87 + (set_local $$mul437$i + (i32.mul + (get_local $$i$2516$i) + (i32.const 10) + ) + ) + (set_local $$inc438$i + (i32.add + (get_local $$e$2517$i) + (i32.const 1) + ) + ) + (set_local $$cmp433$i + (i32.lt_u + (get_local $$234) + (get_local $$mul437$i) + ) + ) + (if + (get_local $$cmp433$i) + (block + (set_local $$a$8$i + (get_local $$a$5$lcssa$i) + ) + (set_local $$d$4$i + (get_local $$d$2$lcssa$i) + ) + (set_local $$e$4$i + (get_local $$inc438$i) + ) + (br $while-out87) + ) + (block + (set_local $$e$2517$i + (get_local $$inc438$i) + ) + (set_local $$i$2516$i + (get_local $$mul437$i) + ) + ) + ) + (br $while-in88) + ) + ) + ) + ) + ) + (set_local $$add$ptr442$i + (i32.add + (get_local $$d$4$i) + (i32.const 4) + ) + ) + (set_local $$cmp443$i + (i32.gt_u + (get_local $$z$3$lcssa$i) + (get_local $$add$ptr442$i) + ) + ) + (set_local $$add$ptr442$z$3$i + (if (result i32) + (get_local $$cmp443$i) + (get_local $$add$ptr442$i) + (get_local $$z$3$lcssa$i) + ) + ) + (set_local $$a$9$ph$i + (get_local $$a$8$i) + ) + (set_local $$e$5$ph$i + (get_local $$e$4$i) + ) + (set_local $$z$7$ph$i + (get_local $$add$ptr442$z$3$i) + ) + ) + (block + (set_local $$a$9$ph$i + (get_local $$a$3$lcssa$i) + ) + (set_local $$e$5$ph$i + (get_local $$e$1$i) + ) + (set_local $$z$7$ph$i + (get_local $$z$3$lcssa$i) + ) + ) + ) + (set_local $$sub626$le$i + (i32.sub + (i32.const 0) + (get_local $$e$5$ph$i) + ) + ) + (set_local $$z$7$i + (get_local $$z$7$ph$i) + ) + (loop $while-in90 + (block $while-out89 + (set_local $$cmp450$i + (i32.gt_u + (get_local $$z$7$i) + (get_local $$a$9$ph$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp450$i) + ) + (block + (set_local $$cmp450$lcssa$i + (i32.const 0) + ) + (set_local $$z$7$i$lcssa + (get_local $$z$7$i) + ) + (br $while-out89) + ) + ) + (set_local $$arrayidx453$i + (i32.add + (get_local $$z$7$i) + (i32.const -4) + ) + ) + (set_local $$235 + (i32.load + (get_local $$arrayidx453$i) + ) + ) + (set_local $$lnot455$i + (i32.eq + (get_local $$235) + (i32.const 0) + ) + ) + (if + (get_local $$lnot455$i) + (set_local $$z$7$i + (get_local $$arrayidx453$i) + ) + (block + (set_local $$cmp450$lcssa$i + (i32.const 1) + ) + (set_local $$z$7$i$lcssa + (get_local $$z$7$i) + ) + (br $while-out89) + ) + ) + (br $while-in90) + ) + ) + (block $do-once91 + (if + (get_local $$cmp338$i) + (block + (set_local $$236 + (i32.and + (get_local $$tobool341$i) + (i32.const 1) + ) + ) + (set_local $$inc468$i + (i32.xor + (get_local $$236) + (i32.const 1) + ) + ) + (set_local $$$p$inc468$i + (i32.add + (get_local $$inc468$i) + (get_local $$$p$i) + ) + ) + (set_local $$cmp470$i + (i32.gt_s + (get_local $$$p$inc468$i) + (get_local $$e$5$ph$i) + ) + ) + (set_local $$cmp473$i + (i32.gt_s + (get_local $$e$5$ph$i) + (i32.const -5) + ) + ) + (set_local $$or$cond2$i + (i32.and + (get_local $$cmp470$i) + (get_local $$cmp473$i) + ) + ) + (if + (get_local $$or$cond2$i) + (block + (set_local $$dec476$i + (i32.add + (get_local $$t$0) + (i32.const -1) + ) + ) + (set_local $$add477$neg$i + (i32.add + (get_local $$$p$inc468$i) + (i32.const -1) + ) + ) + (set_local $$sub478$i + (i32.sub + (get_local $$add477$neg$i) + (get_local $$e$5$ph$i) + ) + ) + (set_local $$p$addr$2$i + (get_local $$sub478$i) + ) + (set_local $$t$addr$0$i + (get_local $$dec476$i) + ) + ) + (block + (set_local $$sub480$i + (i32.add + (get_local $$t$0) + (i32.const -2) + ) + ) + (set_local $$dec481$i + (i32.add + (get_local $$$p$inc468$i) + (i32.const -1) + ) + ) + (set_local $$p$addr$2$i + (get_local $$dec481$i) + ) + (set_local $$t$addr$0$i + (get_local $$sub480$i) + ) + ) + ) + (set_local $$and483$i + (i32.and + (get_local $$fl$1$and219) + (i32.const 8) + ) + ) + (set_local $$tobool484$i + (i32.eq + (get_local $$and483$i) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool484$i) + ) + (block + (set_local $$and610$pre$phi$iZ2D + (get_local $$and483$i) + ) + (set_local $$p$addr$3$i + (get_local $$p$addr$2$i) + ) + (set_local $$t$addr$1$i + (get_local $$t$addr$0$i) + ) + (br $do-once91) + ) + ) + (block $do-once93 + (if + (get_local $$cmp450$lcssa$i) + (block + (set_local $$arrayidx489$i + (i32.add + (get_local $$z$7$i$lcssa) + (i32.const -4) + ) + ) + (set_local $$237 + (i32.load + (get_local $$arrayidx489$i) + ) + ) + (set_local $$tobool490$i + (i32.eq + (get_local $$237) + (i32.const 0) + ) + ) + (if + (get_local $$tobool490$i) + (block + (set_local $$j$2$i + (i32.const 9) + ) + (br $do-once93) + ) + ) + (set_local $$rem494$510$i + (i32.and + (call $i32u-rem + (get_local $$237) + (i32.const 10) + ) + (i32.const -1) + ) + ) + (set_local $$cmp495$511$i + (i32.eq + (get_local $$rem494$510$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp495$511$i) + (block + (set_local $$i$3512$i + (i32.const 10) + ) + (set_local $$j$1513$i + (i32.const 0) + ) + ) + (block + (set_local $$j$2$i + (i32.const 0) + ) + (br $do-once93) + ) + ) + (loop $while-in96 + (block $while-out95 + (set_local $$mul499$i + (i32.mul + (get_local $$i$3512$i) + (i32.const 10) + ) + ) + (set_local $$inc500$i + (i32.add + (get_local $$j$1513$i) + (i32.const 1) + ) + ) + (set_local $$rem494$i + (i32.and + (call $i32u-rem + (get_local $$237) + (get_local $$mul499$i) + ) + (i32.const -1) + ) + ) + (set_local $$cmp495$i + (i32.eq + (get_local $$rem494$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp495$i) + (block + (set_local $$i$3512$i + (get_local $$mul499$i) + ) + (set_local $$j$1513$i + (get_local $$inc500$i) + ) + ) + (block + (set_local $$j$2$i + (get_local $$inc500$i) + ) + (br $while-out95) + ) + ) + (br $while-in96) + ) + ) + ) + (set_local $$j$2$i + (i32.const 9) + ) + ) + ) + (set_local $$or504$i + (i32.or + (get_local $$t$addr$0$i) + (i32.const 32) + ) + ) + (set_local $$cmp505$i + (i32.eq + (get_local $$or504$i) + (i32.const 102) + ) + ) + (set_local $$sub$ptr$lhs$cast508$i + (get_local $$z$7$i$lcssa) + ) + (set_local $$sub$ptr$sub510$i + (i32.sub + (get_local $$sub$ptr$lhs$cast508$i) + (get_local $$sub$ptr$rhs$cast345$i) + ) + ) + (set_local $$sub$ptr$div511$i + (i32.shr_s + (get_local $$sub$ptr$sub510$i) + (i32.const 2) + ) + ) + (set_local $$238 + (i32.mul + (get_local $$sub$ptr$div511$i) + (i32.const 9) + ) + ) + (set_local $$mul513$i + (i32.add + (get_local $$238) + (i32.const -9) + ) + ) + (if + (get_local $$cmp505$i) + (block + (set_local $$sub514$i + (i32.sub + (get_local $$mul513$i) + (get_local $$j$2$i) + ) + ) + (set_local $$cmp515$i + (i32.lt_s + (get_local $$sub514$i) + (i32.const 0) + ) + ) + (set_local $$$sub514$i + (if (result i32) + (get_local $$cmp515$i) + (i32.const 0) + (get_local $$sub514$i) + ) + ) + (set_local $$cmp528$i + (i32.lt_s + (get_local $$p$addr$2$i) + (get_local $$$sub514$i) + ) + ) + (set_local $$p$addr$2$$sub514398$i + (if (result i32) + (get_local $$cmp528$i) + (get_local $$p$addr$2$i) + (get_local $$$sub514$i) + ) + ) + (set_local $$and610$pre$phi$iZ2D + (i32.const 0) + ) + (set_local $$p$addr$3$i + (get_local $$p$addr$2$$sub514398$i) + ) + (set_local $$t$addr$1$i + (get_local $$t$addr$0$i) + ) + (br $do-once91) + ) + (block + (set_local $$add561$i + (i32.add + (get_local $$mul513$i) + (get_local $$e$5$ph$i) + ) + ) + (set_local $$sub562$i + (i32.sub + (get_local $$add561$i) + (get_local $$j$2$i) + ) + ) + (set_local $$cmp563$i + (i32.lt_s + (get_local $$sub562$i) + (i32.const 0) + ) + ) + (set_local $$$sub562$i + (if (result i32) + (get_local $$cmp563$i) + (i32.const 0) + (get_local $$sub562$i) + ) + ) + (set_local $$cmp577$i + (i32.lt_s + (get_local $$p$addr$2$i) + (get_local $$$sub562$i) + ) + ) + (set_local $$p$addr$2$$sub562399$i + (if (result i32) + (get_local $$cmp577$i) + (get_local $$p$addr$2$i) + (get_local $$$sub562$i) + ) + ) + (set_local $$and610$pre$phi$iZ2D + (i32.const 0) + ) + (set_local $$p$addr$3$i + (get_local $$p$addr$2$$sub562399$i) + ) + (set_local $$t$addr$1$i + (get_local $$t$addr$0$i) + ) + (br $do-once91) + ) + ) + ) + (block + (set_local $$$pre567$i + (i32.and + (get_local $$fl$1$and219) + (i32.const 8) + ) + ) + (set_local $$and610$pre$phi$iZ2D + (get_local $$$pre567$i) + ) + (set_local $$p$addr$3$i + (get_local $$$p$i) + ) + (set_local $$t$addr$1$i + (get_local $$t$0) + ) + ) + ) + ) + (set_local $$239 + (i32.or + (get_local $$p$addr$3$i) + (get_local $$and610$pre$phi$iZ2D) + ) + ) + (set_local $$240 + (i32.ne + (get_local $$239) + (i32.const 0) + ) + ) + (set_local $$lor$ext$i + (i32.and + (get_local $$240) + (i32.const 1) + ) + ) + (set_local $$or613$i + (i32.or + (get_local $$t$addr$1$i) + (i32.const 32) + ) + ) + (set_local $$cmp614$i + (i32.eq + (get_local $$or613$i) + (i32.const 102) + ) + ) + (if + (get_local $$cmp614$i) + (block + (set_local $$cmp617$i + (i32.gt_s + (get_local $$e$5$ph$i) + (i32.const 0) + ) + ) + (set_local $$add620$i + (if (result i32) + (get_local $$cmp617$i) + (get_local $$e$5$ph$i) + (i32.const 0) + ) + ) + (set_local $$estr$2$i + (i32.const 0) + ) + (set_local $$sub$ptr$sub650$pn$i + (get_local $$add620$i) + ) + ) + (block + (set_local $$cmp623$i + (i32.lt_s + (get_local $$e$5$ph$i) + (i32.const 0) + ) + ) + (set_local $$cond629$i + (if (result i32) + (get_local $$cmp623$i) + (get_local $$sub626$le$i) + (get_local $$e$5$ph$i) + ) + ) + (set_local $$241 + (i32.lt_s + (get_local $$cond629$i) + (i32.const 0) + ) + ) + (set_local $$242 + (i32.shr_s + (i32.shl + (get_local $$241) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$243 + (call $_fmt_u + (get_local $$cond629$i) + (get_local $$242) + (get_local $$arrayidx$i$236) + ) + ) + (set_local $$sub$ptr$rhs$cast634$504$i + (get_local $$243) + ) + (set_local $$sub$ptr$sub635$505$i + (i32.sub + (get_local $$sub$ptr$lhs$cast160$i) + (get_local $$sub$ptr$rhs$cast634$504$i) + ) + ) + (set_local $$cmp636$506$i + (i32.lt_s + (get_local $$sub$ptr$sub635$505$i) + (i32.const 2) + ) + ) + (if + (get_local $$cmp636$506$i) + (block + (set_local $$estr$1507$i + (get_local $$243) + ) + (loop $while-in98 + (block $while-out97 + (set_local $$incdec$ptr639$i + (i32.add + (get_local $$estr$1507$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr639$i) + (i32.const 48) + ) + (set_local $$sub$ptr$rhs$cast634$i + (get_local $$incdec$ptr639$i) + ) + (set_local $$sub$ptr$sub635$i + (i32.sub + (get_local $$sub$ptr$lhs$cast160$i) + (get_local $$sub$ptr$rhs$cast634$i) + ) + ) + (set_local $$cmp636$i + (i32.lt_s + (get_local $$sub$ptr$sub635$i) + (i32.const 2) + ) + ) + (if + (get_local $$cmp636$i) + (set_local $$estr$1507$i + (get_local $$incdec$ptr639$i) + ) + (block + (set_local $$estr$1$lcssa$i + (get_local $$incdec$ptr639$i) + ) + (br $while-out97) + ) + ) + (br $while-in98) + ) + ) + ) + (set_local $$estr$1$lcssa$i + (get_local $$243) + ) + ) + (set_local $$244 + (i32.shr_s + (get_local $$e$5$ph$i) + (i32.const 31) + ) + ) + (set_local $$245 + (i32.and + (get_local $$244) + (i32.const 2) + ) + ) + (set_local $$246 + (i32.add + (get_local $$245) + (i32.const 43) + ) + ) + (set_local $$conv644$i + (i32.and + (get_local $$246) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr645$i + (i32.add + (get_local $$estr$1$lcssa$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr645$i) + (get_local $$conv644$i) + ) + (set_local $$conv646$i + (i32.and + (get_local $$t$addr$1$i) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr647$i + (i32.add + (get_local $$estr$1$lcssa$i) + (i32.const -2) + ) + ) + (i32.store8 + (get_local $$incdec$ptr647$i) + (get_local $$conv646$i) + ) + (set_local $$sub$ptr$rhs$cast649$i + (get_local $$incdec$ptr647$i) + ) + (set_local $$sub$ptr$sub650$i + (i32.sub + (get_local $$sub$ptr$lhs$cast160$i) + (get_local $$sub$ptr$rhs$cast649$i) + ) + ) + (set_local $$estr$2$i + (get_local $$incdec$ptr647$i) + ) + (set_local $$sub$ptr$sub650$pn$i + (get_local $$sub$ptr$sub650$i) + ) + ) + ) + (set_local $$add608$i + (i32.add + (get_local $$pl$0$i) + (i32.const 1) + ) + ) + (set_local $$add612$i + (i32.add + (get_local $$add608$i) + (get_local $$p$addr$3$i) + ) + ) + (set_local $$l$1$i + (i32.add + (get_local $$add612$i) + (get_local $$lor$ext$i) + ) + ) + (set_local $$add653$i + (i32.add + (get_local $$l$1$i) + (get_local $$sub$ptr$sub650$pn$i) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$add653$i) + (get_local $$fl$1$and219) + ) + (set_local $$247 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$436$i + (i32.and + (get_local $$247) + (i32.const 32) + ) + ) + (set_local $$tobool$i$437$i + (i32.eq + (get_local $$and$i$436$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$437$i) + (drop + (call $___fwritex + (get_local $$prefix$0$i) + (get_local $$pl$0$i) + (get_local $$f) + ) + ) + ) + (set_local $$xor655$i + (i32.xor + (get_local $$fl$1$and219) + (i32.const 65536) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$w$1) + (get_local $$add653$i) + (get_local $$xor655$i) + ) + (block $do-once99 + (if + (get_local $$cmp614$i) + (block + (set_local $$cmp660$i + (i32.gt_u + (get_local $$a$9$ph$i) + (get_local $$arraydecay208$add$ptr213$i) + ) + ) + (set_local $$r$0$a$9$i + (if (result i32) + (get_local $$cmp660$i) + (get_local $$arraydecay208$add$ptr213$i) + (get_local $$a$9$ph$i) + ) + ) + (set_local $$d$5494$i + (get_local $$r$0$a$9$i) + ) + (loop $while-in102 + (block $while-out101 + (set_local $$248 + (i32.load + (get_local $$d$5494$i) + ) + ) + (set_local $$249 + (call $_fmt_u + (get_local $$248) + (i32.const 0) + (get_local $$add$ptr671$i) + ) + ) + (set_local $$cmp673$i + (i32.eq + (get_local $$d$5494$i) + (get_local $$r$0$a$9$i) + ) + ) + (block $do-once103 + (if + (get_local $$cmp673$i) + (block + (set_local $$cmp686$i + (i32.eq + (get_local $$249) + (get_local $$add$ptr671$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp686$i) + ) + (block + (set_local $$s668$1$i + (get_local $$249) + ) + (br $do-once103) + ) + ) + (i32.store8 + (get_local $$incdec$ptr689$i) + (i32.const 48) + ) + (set_local $$s668$1$i + (get_local $$incdec$ptr689$i) + ) + ) + (block + (set_local $$cmp678$491$i + (i32.gt_u + (get_local $$249) + (get_local $$buf$i) + ) + ) + (if + (get_local $$cmp678$491$i) + (set_local $$s668$0492$i + (get_local $$249) + ) + (block + (set_local $$s668$1$i + (get_local $$249) + ) + (br $do-once103) + ) + ) + (loop $while-in106 + (block $while-out105 + (set_local $$incdec$ptr681$i + (i32.add + (get_local $$s668$0492$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr681$i) + (i32.const 48) + ) + (set_local $$cmp678$i + (i32.gt_u + (get_local $$incdec$ptr681$i) + (get_local $$buf$i) + ) + ) + (if + (get_local $$cmp678$i) + (set_local $$s668$0492$i + (get_local $$incdec$ptr681$i) + ) + (block + (set_local $$s668$1$i + (get_local $$incdec$ptr681$i) + ) + (br $while-out105) + ) + ) + (br $while-in106) + ) + ) + ) + ) + ) + (set_local $$250 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$442$i + (i32.and + (get_local $$250) + (i32.const 32) + ) + ) + (set_local $$tobool$i$443$i + (i32.eq + (get_local $$and$i$442$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$443$i) + (block + (set_local $$sub$ptr$rhs$cast695$i + (get_local $$s668$1$i) + ) + (set_local $$sub$ptr$sub696$i + (i32.sub + (get_local $$sub$ptr$lhs$cast694$i) + (get_local $$sub$ptr$rhs$cast695$i) + ) + ) + (drop + (call $___fwritex + (get_local $$s668$1$i) + (get_local $$sub$ptr$sub696$i) + (get_local $$f) + ) + ) + ) + ) + (set_local $$incdec$ptr698$i + (i32.add + (get_local $$d$5494$i) + (i32.const 4) + ) + ) + (set_local $$cmp665$i + (i32.gt_u + (get_local $$incdec$ptr698$i) + (get_local $$arraydecay208$add$ptr213$i) + ) + ) + (if + (get_local $$cmp665$i) + (block + (set_local $$incdec$ptr698$i$lcssa + (get_local $$incdec$ptr698$i) + ) + (br $while-out101) + ) + (set_local $$d$5494$i + (get_local $$incdec$ptr698$i) + ) + ) + (br $while-in102) + ) + ) + (set_local $$251 + (i32.eq + (get_local $$239) + (i32.const 0) + ) + ) + (block $do-once107 + (if + (i32.eqz + (get_local $$251) + ) + (block + (set_local $$252 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$448$i + (i32.and + (get_local $$252) + (i32.const 32) + ) + ) + (set_local $$tobool$i$449$i + (i32.eq + (get_local $$and$i$448$i) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool$i$449$i) + ) + (br $do-once107) + ) + (drop + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $$f) + ) + ) + ) + ) + ) + (set_local $$cmp707$486$i + (i32.lt_u + (get_local $$incdec$ptr698$i$lcssa) + (get_local $$z$7$i$lcssa) + ) + ) + (set_local $$cmp710$487$i + (i32.gt_s + (get_local $$p$addr$3$i) + (i32.const 0) + ) + ) + (set_local $$253 + (i32.and + (get_local $$cmp710$487$i) + (get_local $$cmp707$486$i) + ) + ) + (if + (get_local $$253) + (block + (set_local $$d$6488$i + (get_local $$incdec$ptr698$i$lcssa) + ) + (set_local $$p$addr$4489$i + (get_local $$p$addr$3$i) + ) + (loop $while-in110 + (block $while-out109 + (set_local $$254 + (i32.load + (get_local $$d$6488$i) + ) + ) + (set_local $$255 + (call $_fmt_u + (get_local $$254) + (i32.const 0) + (get_local $$add$ptr671$i) + ) + ) + (set_local $$cmp722$483$i + (i32.gt_u + (get_local $$255) + (get_local $$buf$i) + ) + ) + (if + (get_local $$cmp722$483$i) + (block + (set_local $$s715$0484$i + (get_local $$255) + ) + (loop $while-in112 + (block $while-out111 + (set_local $$incdec$ptr725$i + (i32.add + (get_local $$s715$0484$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr725$i) + (i32.const 48) + ) + (set_local $$cmp722$i + (i32.gt_u + (get_local $$incdec$ptr725$i) + (get_local $$buf$i) + ) + ) + (if + (get_local $$cmp722$i) + (set_local $$s715$0484$i + (get_local $$incdec$ptr725$i) + ) + (block + (set_local $$s715$0$lcssa$i + (get_local $$incdec$ptr725$i) + ) + (br $while-out111) + ) + ) + (br $while-in112) + ) + ) + ) + (set_local $$s715$0$lcssa$i + (get_local $$255) + ) + ) + (set_local $$256 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$454$i + (i32.and + (get_local $$256) + (i32.const 32) + ) + ) + (set_local $$tobool$i$455$i + (i32.eq + (get_local $$and$i$454$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$455$i) + (block + (set_local $$cmp727$i + (i32.gt_s + (get_local $$p$addr$4489$i) + (i32.const 9) + ) + ) + (set_local $$cond732$i + (if (result i32) + (get_local $$cmp727$i) + (i32.const 9) + (get_local $$p$addr$4489$i) + ) + ) + (drop + (call $___fwritex + (get_local $$s715$0$lcssa$i) + (get_local $$cond732$i) + (get_local $$f) + ) + ) + ) + ) + (set_local $$incdec$ptr734$i + (i32.add + (get_local $$d$6488$i) + (i32.const 4) + ) + ) + (set_local $$sub735$i + (i32.add + (get_local $$p$addr$4489$i) + (i32.const -9) + ) + ) + (set_local $$cmp707$i + (i32.lt_u + (get_local $$incdec$ptr734$i) + (get_local $$z$7$i$lcssa) + ) + ) + (set_local $$cmp710$i + (i32.gt_s + (get_local $$p$addr$4489$i) + (i32.const 9) + ) + ) + (set_local $$257 + (i32.and + (get_local $$cmp710$i) + (get_local $$cmp707$i) + ) + ) + (if + (get_local $$257) + (block + (set_local $$d$6488$i + (get_local $$incdec$ptr734$i) + ) + (set_local $$p$addr$4489$i + (get_local $$sub735$i) + ) + ) + (block + (set_local $$p$addr$4$lcssa$i + (get_local $$sub735$i) + ) + (br $while-out109) + ) + ) + (br $while-in110) + ) + ) + ) + (set_local $$p$addr$4$lcssa$i + (get_local $$p$addr$3$i) + ) + ) + (set_local $$add737$i + (i32.add + (get_local $$p$addr$4$lcssa$i) + (i32.const 9) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$add737$i) + (i32.const 9) + (i32.const 0) + ) + ) + (block + (set_local $$add$ptr742$i + (i32.add + (get_local $$a$9$ph$i) + (i32.const 4) + ) + ) + (set_local $$z$7$add$ptr742$i + (if (result i32) + (get_local $$cmp450$lcssa$i) + (get_local $$z$7$i$lcssa) + (get_local $$add$ptr742$i) + ) + ) + (set_local $$cmp748$499$i + (i32.gt_s + (get_local $$p$addr$3$i) + (i32.const -1) + ) + ) + (if + (get_local $$cmp748$499$i) + (block + (set_local $$tobool781$i + (i32.eq + (get_local $$and610$pre$phi$iZ2D) + (i32.const 0) + ) + ) + (set_local $$d$7500$i + (get_local $$a$9$ph$i) + ) + (set_local $$p$addr$5501$i + (get_local $$p$addr$3$i) + ) + (loop $while-in114 + (block $while-out113 + (set_local $$258 + (i32.load + (get_local $$d$7500$i) + ) + ) + (set_local $$259 + (call $_fmt_u + (get_local $$258) + (i32.const 0) + (get_local $$add$ptr671$i) + ) + ) + (set_local $$cmp760$i + (i32.eq + (get_local $$259) + (get_local $$add$ptr671$i) + ) + ) + (if + (get_local $$cmp760$i) + (block + (i32.store8 + (get_local $$incdec$ptr689$i) + (i32.const 48) + ) + (set_local $$s753$0$i + (get_local $$incdec$ptr689$i) + ) + ) + (set_local $$s753$0$i + (get_local $$259) + ) + ) + (set_local $$cmp765$i + (i32.eq + (get_local $$d$7500$i) + (get_local $$a$9$ph$i) + ) + ) + (block $do-once115 + (if + (get_local $$cmp765$i) + (block + (set_local $$incdec$ptr776$i + (i32.add + (get_local $$s753$0$i) + (i32.const 1) + ) + ) + (set_local $$260 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$460$i + (i32.and + (get_local $$260) + (i32.const 32) + ) + ) + (set_local $$tobool$i$461$i + (i32.eq + (get_local $$and$i$460$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$461$i) + (drop + (call $___fwritex + (get_local $$s753$0$i) + (i32.const 1) + (get_local $$f) + ) + ) + ) + (set_local $$cmp777$i + (i32.lt_s + (get_local $$p$addr$5501$i) + (i32.const 1) + ) + ) + (set_local $$or$cond401$i + (i32.and + (get_local $$tobool781$i) + (get_local $$cmp777$i) + ) + ) + (if + (get_local $$or$cond401$i) + (block + (set_local $$s753$2$i + (get_local $$incdec$ptr776$i) + ) + (br $do-once115) + ) + ) + (set_local $$261 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$466$i + (i32.and + (get_local $$261) + (i32.const 32) + ) + ) + (set_local $$tobool$i$467$i + (i32.eq + (get_local $$and$i$466$i) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool$i$467$i) + ) + (block + (set_local $$s753$2$i + (get_local $$incdec$ptr776$i) + ) + (br $do-once115) + ) + ) + (drop + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $$f) + ) + ) + (set_local $$s753$2$i + (get_local $$incdec$ptr776$i) + ) + ) + (block + (set_local $$cmp770$495$i + (i32.gt_u + (get_local $$s753$0$i) + (get_local $$buf$i) + ) + ) + (if + (get_local $$cmp770$495$i) + (set_local $$s753$1496$i + (get_local $$s753$0$i) + ) + (block + (set_local $$s753$2$i + (get_local $$s753$0$i) + ) + (br $do-once115) + ) + ) + (loop $while-in118 + (block $while-out117 + (set_local $$incdec$ptr773$i + (i32.add + (get_local $$s753$1496$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr773$i) + (i32.const 48) + ) + (set_local $$cmp770$i + (i32.gt_u + (get_local $$incdec$ptr773$i) + (get_local $$buf$i) + ) + ) + (if + (get_local $$cmp770$i) + (set_local $$s753$1496$i + (get_local $$incdec$ptr773$i) + ) + (block + (set_local $$s753$2$i + (get_local $$incdec$ptr773$i) + ) + (br $while-out117) + ) + ) + (br $while-in118) + ) + ) + ) + ) + ) + (set_local $$sub$ptr$rhs$cast788$i + (get_local $$s753$2$i) + ) + (set_local $$sub$ptr$sub789$i + (i32.sub + (get_local $$sub$ptr$lhs$cast694$i) + (get_local $$sub$ptr$rhs$cast788$i) + ) + ) + (set_local $$262 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$472$i + (i32.and + (get_local $$262) + (i32.const 32) + ) + ) + (set_local $$tobool$i$473$i + (i32.eq + (get_local $$and$i$472$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$473$i) + (block + (set_local $$cmp790$i + (i32.gt_s + (get_local $$p$addr$5501$i) + (get_local $$sub$ptr$sub789$i) + ) + ) + (set_local $$cond800$i + (if (result i32) + (get_local $$cmp790$i) + (get_local $$sub$ptr$sub789$i) + (get_local $$p$addr$5501$i) + ) + ) + (drop + (call $___fwritex + (get_local $$s753$2$i) + (get_local $$cond800$i) + (get_local $$f) + ) + ) + ) + ) + (set_local $$sub806$i + (i32.sub + (get_local $$p$addr$5501$i) + (get_local $$sub$ptr$sub789$i) + ) + ) + (set_local $$incdec$ptr808$i + (i32.add + (get_local $$d$7500$i) + (i32.const 4) + ) + ) + (set_local $$cmp745$i + (i32.lt_u + (get_local $$incdec$ptr808$i) + (get_local $$z$7$add$ptr742$i) + ) + ) + (set_local $$cmp748$i + (i32.gt_s + (get_local $$sub806$i) + (i32.const -1) + ) + ) + (set_local $$263 + (i32.and + (get_local $$cmp745$i) + (get_local $$cmp748$i) + ) + ) + (if + (get_local $$263) + (block + (set_local $$d$7500$i + (get_local $$incdec$ptr808$i) + ) + (set_local $$p$addr$5501$i + (get_local $$sub806$i) + ) + ) + (block + (set_local $$p$addr$5$lcssa$i + (get_local $$sub806$i) + ) + (br $while-out113) + ) + ) + (br $while-in114) + ) + ) + ) + (set_local $$p$addr$5$lcssa$i + (get_local $$p$addr$3$i) + ) + ) + (set_local $$add810$i + (i32.add + (get_local $$p$addr$5$lcssa$i) + (i32.const 18) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$add810$i) + (i32.const 18) + (i32.const 0) + ) + (set_local $$264 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$i + (i32.and + (get_local $$264) + (i32.const 32) + ) + ) + (set_local $$tobool$i$i + (i32.eq + (get_local $$and$i$i) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$tobool$i$i) + ) + (br $do-once99) + ) + (set_local $$sub$ptr$rhs$cast812$i + (get_local $$estr$2$i) + ) + (set_local $$sub$ptr$sub813$i + (i32.sub + (get_local $$sub$ptr$lhs$cast160$i) + (get_local $$sub$ptr$rhs$cast812$i) + ) + ) + (drop + (call $___fwritex + (get_local $$estr$2$i) + (get_local $$sub$ptr$sub813$i) + (get_local $$f) + ) + ) + ) + ) + ) + (set_local $$xor816$i + (i32.xor + (get_local $$fl$1$and219) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$add653$i) + (get_local $$xor816$i) + ) + (set_local $$cmp818$i + (i32.lt_s + (get_local $$add653$i) + (get_local $$w$1) + ) + ) + (set_local $$w$add653$i + (if (result i32) + (get_local $$cmp818$i) + (get_local $$w$1) + (get_local $$add653$i) + ) + ) + (set_local $$retval$0$i + (get_local $$w$add653$i) + ) + ) + (block + (set_local $$and36$i + (i32.and + (get_local $$t$0) + (i32.const 32) + ) + ) + (set_local $$tobool37$i + (i32.ne + (get_local $$and36$i) + (i32.const 0) + ) + ) + (set_local $$cond$i + (if (result i32) + (get_local $$tobool37$i) + (i32.const 4127) + (i32.const 4131) + ) + ) + (set_local $$cmp38$i + (i32.or + (f64.ne + (get_local $$y$addr$0$i) + (get_local $$y$addr$0$i) + ) + (f64.ne + (f64.const 0) + (f64.const 0) + ) + ) + ) + (set_local $$cond43$i + (if (result i32) + (get_local $$tobool37$i) + (i32.const 4135) + (i32.const 4139) + ) + ) + (set_local $$pl$1$i + (if (result i32) + (get_local $$cmp38$i) + (i32.const 0) + (get_local $$pl$0$i) + ) + ) + (set_local $$s35$0$i + (if (result i32) + (get_local $$cmp38$i) + (get_local $$cond43$i) + (get_local $$cond$i) + ) + ) + (set_local $$add$i$239 + (i32.add + (get_local $$pl$1$i) + (i32.const 3) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$add$i$239) + (get_local $$and219) + ) + (set_local $$193 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$406$i + (i32.and + (get_local $$193) + (i32.const 32) + ) + ) + (set_local $$tobool$i$407$i + (i32.eq + (get_local $$and$i$406$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$407$i) + (block + (drop + (call $___fwritex + (get_local $$prefix$0$i) + (get_local $$pl$1$i) + (get_local $$f) + ) + ) + (set_local $$$pre$i + (i32.load + (get_local $$f) + ) + ) + (set_local $$194 + (get_local $$$pre$i) + ) + ) + (set_local $$194 + (get_local $$193) + ) + ) + (set_local $$and$i$412$i + (i32.and + (get_local $$194) + (i32.const 32) + ) + ) + (set_local $$tobool$i$413$i + (i32.eq + (get_local $$and$i$412$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$413$i) + (drop + (call $___fwritex + (get_local $$s35$0$i) + (i32.const 3) + (get_local $$f) + ) + ) + ) + (set_local $$xor$i + (i32.xor + (get_local $$fl$1$and219) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$add$i$239) + (get_local $$xor$i) + ) + (set_local $$cmp48$i + (i32.lt_s + (get_local $$add$i$239) + (get_local $$w$1) + ) + ) + (set_local $$cond53$i + (if (result i32) + (get_local $$cmp48$i) + (get_local $$w$1) + (get_local $$add$i$239) + ) + ) + (set_local $$retval$0$i + (get_local $$cond53$i) + ) + ) + ) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$retval$0$i) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + (br $switch17) + ) + ) + (block + (set_local $$a$2 + (get_local $$incdec$ptr169275) + ) + (set_local $$fl$6 + (get_local $$fl$1$and219) + ) + (set_local $$p$5 + (get_local $$p$0) + ) + (set_local $$pl$2 + (i32.const 0) + ) + (set_local $$prefix$2 + (i32.const 4091) + ) + (set_local $$z$2 + (get_local $$add$ptr205) + ) + ) + ) + ) + (block $label$break$L308 + (if + (i32.eq + (get_local $label) + (i32.const 64) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$90 + (get_local $$arg) + ) + (set_local $$91 + (get_local $$90) + ) + (set_local $$92 + (i32.load + (get_local $$91) + ) + ) + (set_local $$93 + (i32.add + (get_local $$90) + (i32.const 4) + ) + ) + (set_local $$94 + (get_local $$93) + ) + (set_local $$95 + (i32.load + (get_local $$94) + ) + ) + (set_local $$and249 + (i32.and + (get_local $$t$1) + (i32.const 32) + ) + ) + (set_local $$96 + (i32.eq + (get_local $$92) + (i32.const 0) + ) + ) + (set_local $$97 + (i32.eq + (get_local $$95) + (i32.const 0) + ) + ) + (set_local $$98 + (i32.and + (get_local $$96) + (get_local $$97) + ) + ) + (if + (get_local $$98) + (block + (set_local $$a$0 + (get_local $$add$ptr205) + ) + (set_local $$fl$4 + (get_local $$fl$3) + ) + (set_local $$p$2 + (get_local $$p$1) + ) + (set_local $$pl$1 + (i32.const 0) + ) + (set_local $$prefix$1 + (i32.const 4091) + ) + (set_local $label + (i32.const 77) + ) + ) + (block + (set_local $$101 + (get_local $$95) + ) + (set_local $$99 + (get_local $$92) + ) + (set_local $$s$addr$06$i + (get_local $$add$ptr205) + ) + (loop $while-in123 + (block $while-out122 + (set_local $$idxprom$i + (i32.and + (get_local $$99) + (i32.const 15) + ) + ) + (set_local $$arrayidx$i + (i32.add + (i32.const 4075) + (get_local $$idxprom$i) + ) + ) + (set_local $$100 + (i32.load8_s + (get_local $$arrayidx$i) + ) + ) + (set_local $$conv$4$i$211 + (i32.and + (get_local $$100) + (i32.const 255) + ) + ) + (set_local $$or$i + (i32.or + (get_local $$conv$4$i$211) + (get_local $$and249) + ) + ) + (set_local $$conv1$i + (i32.and + (get_local $$or$i) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr$i$212 + (i32.add + (get_local $$s$addr$06$i) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr$i$212) + (get_local $$conv1$i) + ) + (set_local $$102 + (call $_bitshift64Lshr + (get_local $$99) + (get_local $$101) + (i32.const 4) + ) + ) + (set_local $$103 + (get_global $tempRet0) + ) + (set_local $$104 + (i32.eq + (get_local $$102) + (i32.const 0) + ) + ) + (set_local $$105 + (i32.eq + (get_local $$103) + (i32.const 0) + ) + ) + (set_local $$106 + (i32.and + (get_local $$104) + (get_local $$105) + ) + ) + (if + (get_local $$106) + (block + (set_local $$incdec$ptr$i$212$lcssa + (get_local $$incdec$ptr$i$212) + ) + (br $while-out122) + ) + (block + (set_local $$101 + (get_local $$103) + ) + (set_local $$99 + (get_local $$102) + ) + (set_local $$s$addr$06$i + (get_local $$incdec$ptr$i$212) + ) + ) + ) + (br $while-in123) + ) + ) + (set_local $$107 + (get_local $$arg) + ) + (set_local $$108 + (get_local $$107) + ) + (set_local $$109 + (i32.load + (get_local $$108) + ) + ) + (set_local $$110 + (i32.add + (get_local $$107) + (i32.const 4) + ) + ) + (set_local $$111 + (get_local $$110) + ) + (set_local $$112 + (i32.load + (get_local $$111) + ) + ) + (set_local $$113 + (i32.eq + (get_local $$109) + (i32.const 0) + ) + ) + (set_local $$114 + (i32.eq + (get_local $$112) + (i32.const 0) + ) + ) + (set_local $$115 + (i32.and + (get_local $$113) + (get_local $$114) + ) + ) + (set_local $$and254 + (i32.and + (get_local $$fl$3) + (i32.const 8) + ) + ) + (set_local $$tobool255 + (i32.eq + (get_local $$and254) + (i32.const 0) + ) + ) + (set_local $$or$cond193 + (i32.or + (get_local $$tobool255) + (get_local $$115) + ) + ) + (if + (get_local $$or$cond193) + (block + (set_local $$a$0 + (get_local $$incdec$ptr$i$212$lcssa) + ) + (set_local $$fl$4 + (get_local $$fl$3) + ) + (set_local $$p$2 + (get_local $$p$1) + ) + (set_local $$pl$1 + (i32.const 0) + ) + (set_local $$prefix$1 + (i32.const 4091) + ) + (set_local $label + (i32.const 77) + ) + ) + (block + (set_local $$shr + (i32.shr_s + (get_local $$t$1) + (i32.const 4) + ) + ) + (set_local $$add$ptr257 + (i32.add + (i32.const 4091) + (get_local $$shr) + ) + ) + (set_local $$a$0 + (get_local $$incdec$ptr$i$212$lcssa) + ) + (set_local $$fl$4 + (get_local $$fl$3) + ) + (set_local $$p$2 + (get_local $$p$1) + ) + (set_local $$pl$1 + (i32.const 2) + ) + (set_local $$prefix$1 + (get_local $$add$ptr257) + ) + (set_local $label + (i32.const 77) + ) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 76) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$150 + (call $_fmt_u + (get_local $$148) + (get_local $$149) + (get_local $$add$ptr205) + ) + ) + (set_local $$a$0 + (get_local $$150) + ) + (set_local $$fl$4 + (get_local $$fl$1$and219) + ) + (set_local $$p$2 + (get_local $$p$0) + ) + (set_local $$pl$1 + (get_local $$pl$0) + ) + (set_local $$prefix$1 + (get_local $$prefix$0) + ) + (set_local $label + (i32.const 77) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 82) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$call356 + (call $_memchr + (get_local $$a$1) + (i32.const 0) + (get_local $$p$0) + ) + ) + (set_local $$tobool357 + (i32.eq + (get_local $$call356) + (i32.const 0) + ) + ) + (set_local $$sub$ptr$lhs$cast361 + (get_local $$call356) + ) + (set_local $$sub$ptr$rhs$cast362 + (get_local $$a$1) + ) + (set_local $$sub$ptr$sub363 + (i32.sub + (get_local $$sub$ptr$lhs$cast361) + (get_local $$sub$ptr$rhs$cast362) + ) + ) + (set_local $$add$ptr359 + (i32.add + (get_local $$a$1) + (get_local $$p$0) + ) + ) + (set_local $$z$1 + (if (result i32) + (get_local $$tobool357) + (get_local $$add$ptr359) + (get_local $$call356) + ) + ) + (set_local $$p$3 + (if (result i32) + (get_local $$tobool357) + (get_local $$p$0) + (get_local $$sub$ptr$sub363) + ) + ) + (set_local $$a$2 + (get_local $$a$1) + ) + (set_local $$fl$6 + (get_local $$and219) + ) + (set_local $$p$5 + (get_local $$p$3) + ) + (set_local $$pl$2 + (i32.const 0) + ) + (set_local $$prefix$2 + (i32.const 4091) + ) + (set_local $$z$2 + (get_local $$z$1) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 86) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$176 + (i32.load + (get_local $$arg) + ) + ) + (set_local $$i$0316 + (i32.const 0) + ) + (set_local $$l$1315 + (i32.const 0) + ) + (set_local $$ws$0317 + (get_local $$176) + ) + (loop $while-in125 + (block $while-out124 + (set_local $$177 + (i32.load + (get_local $$ws$0317) + ) + ) + (set_local $$tobool380 + (i32.eq + (get_local $$177) + (i32.const 0) + ) + ) + (if + (get_local $$tobool380) + (block + (set_local $$i$0$lcssa + (get_local $$i$0316) + ) + (set_local $$l$2 + (get_local $$l$1315) + ) + (br $while-out124) + ) + ) + (set_local $$call384 + (call $_wctomb + (get_local $$mb) + (get_local $$177) + ) + ) + (set_local $$cmp385 + (i32.lt_s + (get_local $$call384) + (i32.const 0) + ) + ) + (set_local $$sub389 + (i32.sub + (get_local $$p$4365) + (get_local $$i$0316) + ) + ) + (set_local $$cmp390 + (i32.gt_u + (get_local $$call384) + (get_local $$sub389) + ) + ) + (set_local $$or$cond195 + (i32.or + (get_local $$cmp385) + (get_local $$cmp390) + ) + ) + (if + (get_local $$or$cond195) + (block + (set_local $$i$0$lcssa + (get_local $$i$0316) + ) + (set_local $$l$2 + (get_local $$call384) + ) + (br $while-out124) + ) + ) + (set_local $$incdec$ptr383 + (i32.add + (get_local $$ws$0317) + (i32.const 4) + ) + ) + (set_local $$add395 + (i32.add + (get_local $$call384) + (get_local $$i$0316) + ) + ) + (set_local $$cmp377 + (i32.gt_u + (get_local $$p$4365) + (get_local $$add395) + ) + ) + (if + (get_local $$cmp377) + (block + (set_local $$i$0316 + (get_local $$add395) + ) + (set_local $$l$1315 + (get_local $$call384) + ) + (set_local $$ws$0317 + (get_local $$incdec$ptr383) + ) + ) + (block + (set_local $$i$0$lcssa + (get_local $$add395) + ) + (set_local $$l$2 + (get_local $$call384) + ) + (br $while-out124) + ) + ) + (br $while-in125) + ) + ) + (set_local $$cmp397 + (i32.lt_s + (get_local $$l$2) + (i32.const 0) + ) + ) + (if + (get_local $$cmp397) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$i$0$lcssa) + (get_local $$fl$1$and219) + ) + (set_local $$cmp404$324 + (i32.eq + (get_local $$i$0$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$cmp404$324) + (block + (set_local $$i$0$lcssa368 + (i32.const 0) + ) + (set_local $label + (i32.const 98) + ) + ) + (block + (set_local $$178 + (i32.load + (get_local $$arg) + ) + ) + (set_local $$i$1325 + (i32.const 0) + ) + (set_local $$ws$1326 + (get_local $$178) + ) + (loop $while-in127 + (block $while-out126 + (set_local $$179 + (i32.load + (get_local $$ws$1326) + ) + ) + (set_local $$tobool407 + (i32.eq + (get_local $$179) + (i32.const 0) + ) + ) + (if + (get_local $$tobool407) + (block + (set_local $$i$0$lcssa368 + (get_local $$i$0$lcssa) + ) + (set_local $label + (i32.const 98) + ) + (br $label$break$L308) + ) + ) + (set_local $$incdec$ptr410 + (i32.add + (get_local $$ws$1326) + (i32.const 4) + ) + ) + (set_local $$call411 + (call $_wctomb + (get_local $$mb) + (get_local $$179) + ) + ) + (set_local $$add412 + (i32.add + (get_local $$call411) + (get_local $$i$1325) + ) + ) + (set_local $$cmp413 + (i32.gt_s + (get_local $$add412) + (get_local $$i$0$lcssa) + ) + ) + (if + (get_local $$cmp413) + (block + (set_local $$i$0$lcssa368 + (get_local $$i$0$lcssa) + ) + (set_local $label + (i32.const 98) + ) + (br $label$break$L308) + ) + ) + (set_local $$180 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$231 + (i32.and + (get_local $$180) + (i32.const 32) + ) + ) + (set_local $$tobool$i$232 + (i32.eq + (get_local $$and$i$231) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$232) + (drop + (call $___fwritex + (get_local $$mb) + (get_local $$call411) + (get_local $$f) + ) + ) + ) + (set_local $$cmp404 + (i32.lt_u + (get_local $$add412) + (get_local $$i$0$lcssa) + ) + ) + (if + (get_local $$cmp404) + (block + (set_local $$i$1325 + (get_local $$add412) + ) + (set_local $$ws$1326 + (get_local $$incdec$ptr410) + ) + ) + (block + (set_local $$i$0$lcssa368 + (get_local $$i$0$lcssa) + ) + (set_local $label + (i32.const 98) + ) + (br $while-out126) + ) + ) + (br $while-in127) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 98) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$xor + (i32.xor + (get_local $$fl$1$and219) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$1) + (get_local $$i$0$lcssa368) + (get_local $$xor) + ) + (set_local $$cmp421 + (i32.gt_s + (get_local $$w$1) + (get_local $$i$0$lcssa368) + ) + ) + (set_local $$cond426 + (if (result i32) + (get_local $$cmp421) + (get_local $$w$1) + (get_local $$i$0$lcssa368) + ) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$cond426) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 77) + ) + (block + (set_local $label + (i32.const 0) + ) + (set_local $$cmp306 + (i32.gt_s + (get_local $$p$2) + (i32.const -1) + ) + ) + (set_local $$and309 + (i32.and + (get_local $$fl$4) + (i32.const -65537) + ) + ) + (set_local $$and309$fl$4 + (if (result i32) + (get_local $$cmp306) + (get_local $$and309) + (get_local $$fl$4) + ) + ) + (set_local $$151 + (get_local $$arg) + ) + (set_local $$152 + (get_local $$151) + ) + (set_local $$153 + (i32.load + (get_local $$152) + ) + ) + (set_local $$154 + (i32.add + (get_local $$151) + (i32.const 4) + ) + ) + (set_local $$155 + (get_local $$154) + ) + (set_local $$156 + (i32.load + (get_local $$155) + ) + ) + (set_local $$157 + (i32.ne + (get_local $$153) + (i32.const 0) + ) + ) + (set_local $$158 + (i32.ne + (get_local $$156) + (i32.const 0) + ) + ) + (set_local $$159 + (i32.or + (get_local $$157) + (get_local $$158) + ) + ) + (set_local $$tobool314 + (i32.ne + (get_local $$p$2) + (i32.const 0) + ) + ) + (set_local $$or$cond + (i32.or + (get_local $$tobool314) + (get_local $$159) + ) + ) + (if + (get_local $$or$cond) + (block + (set_local $$sub$ptr$rhs$cast318 + (get_local $$a$0) + ) + (set_local $$sub$ptr$sub319 + (i32.sub + (get_local $$sub$ptr$lhs$cast317) + (get_local $$sub$ptr$rhs$cast318) + ) + ) + (set_local $$160 + (i32.and + (get_local $$159) + (i32.const 1) + ) + ) + (set_local $$lnot$ext + (i32.xor + (get_local $$160) + (i32.const 1) + ) + ) + (set_local $$add322 + (i32.add + (get_local $$lnot$ext) + (get_local $$sub$ptr$sub319) + ) + ) + (set_local $$cmp323 + (i32.gt_s + (get_local $$p$2) + (get_local $$add322) + ) + ) + (set_local $$p$2$add322 + (if (result i32) + (get_local $$cmp323) + (get_local $$p$2) + (get_local $$add322) + ) + ) + (set_local $$a$2 + (get_local $$a$0) + ) + (set_local $$fl$6 + (get_local $$and309$fl$4) + ) + (set_local $$p$5 + (get_local $$p$2$add322) + ) + (set_local $$pl$2 + (get_local $$pl$1) + ) + (set_local $$prefix$2 + (get_local $$prefix$1) + ) + (set_local $$z$2 + (get_local $$add$ptr205) + ) + ) + (block + (set_local $$a$2 + (get_local $$add$ptr205) + ) + (set_local $$fl$6 + (get_local $$and309$fl$4) + ) + (set_local $$p$5 + (i32.const 0) + ) + (set_local $$pl$2 + (get_local $$pl$1) + ) + (set_local $$prefix$2 + (get_local $$prefix$1) + ) + (set_local $$z$2 + (get_local $$add$ptr205) + ) + ) + ) + ) + ) + (set_local $$sub$ptr$lhs$cast431 + (get_local $$z$2) + ) + (set_local $$sub$ptr$rhs$cast432 + (get_local $$a$2) + ) + (set_local $$sub$ptr$sub433 + (i32.sub + (get_local $$sub$ptr$lhs$cast431) + (get_local $$sub$ptr$rhs$cast432) + ) + ) + (set_local $$cmp434 + (i32.lt_s + (get_local $$p$5) + (get_local $$sub$ptr$sub433) + ) + ) + (set_local $$sub$ptr$sub433$p$5 + (if (result i32) + (get_local $$cmp434) + (get_local $$sub$ptr$sub433) + (get_local $$p$5) + ) + ) + (set_local $$add441 + (i32.add + (get_local $$pl$2) + (get_local $$sub$ptr$sub433$p$5) + ) + ) + (set_local $$cmp442 + (i32.lt_s + (get_local $$w$1) + (get_local $$add441) + ) + ) + (set_local $$w$2 + (if (result i32) + (get_local $$cmp442) + (get_local $$add441) + (get_local $$w$1) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$2) + (get_local $$add441) + (get_local $$fl$6) + ) + (set_local $$265 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$244 + (i32.and + (get_local $$265) + (i32.const 32) + ) + ) + (set_local $$tobool$i$245 + (i32.eq + (get_local $$and$i$244) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$245) + (drop + (call $___fwritex + (get_local $$prefix$2) + (get_local $$pl$2) + (get_local $$f) + ) + ) + ) + (set_local $$xor449 + (i32.xor + (get_local $$fl$6) + (i32.const 65536) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$w$2) + (get_local $$add441) + (get_local $$xor449) + ) + (call $_pad + (get_local $$f) + (i32.const 48) + (get_local $$sub$ptr$sub433$p$5) + (get_local $$sub$ptr$sub433) + (i32.const 0) + ) + (set_local $$266 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$216 + (i32.and + (get_local $$266) + (i32.const 32) + ) + ) + (set_local $$tobool$i$217 + (i32.eq + (get_local $$and$i$216) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$217) + (drop + (call $___fwritex + (get_local $$a$2) + (get_local $$sub$ptr$sub433) + (get_local $$f) + ) + ) + ) + (set_local $$xor457 + (i32.xor + (get_local $$fl$6) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $$f) + (i32.const 32) + (get_local $$w$2) + (get_local $$add441) + (get_local $$xor457) + ) + (set_local $$cnt$0 + (get_local $$cnt$1) + ) + (set_local $$incdec$ptr169275 + (get_local $$incdec$ptr169$lcssa) + ) + (set_local $$l$0 + (get_local $$w$2) + ) + (set_local $$l10n$0 + (get_local $$l10n$3) + ) + (br $label$continue$L1) + ) + ) + (block $label$break$L343 + (if + (i32.eq + (get_local $label) + (i32.const 242) + ) + (block + (set_local $$tobool459 + (i32.eq + (get_local $$f) + (i32.const 0) + ) + ) + (if + (get_local $$tobool459) + (block + (set_local $$tobool462 + (i32.eq + (get_local $$l10n$0$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$tobool462) + (set_local $$retval$0 + (i32.const 0) + ) + (block + (set_local $$i$2299 + (i32.const 1) + ) + (loop $while-in130 + (block $while-out129 + (set_local $$arrayidx469 + (i32.add + (get_local $$nl_type) + (i32.shl + (get_local $$i$2299) + (i32.const 2) + ) + ) + ) + (set_local $$267 + (i32.load + (get_local $$arrayidx469) + ) + ) + (set_local $$tobool470 + (i32.eq + (get_local $$267) + (i32.const 0) + ) + ) + (if + (get_local $$tobool470) + (block + (set_local $$i$2299$lcssa + (get_local $$i$2299) + ) + (br $while-out129) + ) + ) + (set_local $$add$ptr473 + (i32.add + (get_local $$nl_arg) + (i32.shl + (get_local $$i$2299) + (i32.const 3) + ) + ) + ) + (call $_pop_arg_336 + (get_local $$add$ptr473) + (get_local $$267) + (get_local $$ap) + ) + (set_local $$inc + (i32.add + (get_local $$i$2299) + (i32.const 1) + ) + ) + (set_local $$cmp466 + (i32.lt_s + (get_local $$inc) + (i32.const 10) + ) + ) + (if + (get_local $$cmp466) + (set_local $$i$2299 + (get_local $$inc) + ) + (block + (set_local $$retval$0 + (i32.const 1) + ) + (br $label$break$L343) + ) + ) + (br $while-in130) + ) + ) + (set_local $$cmp478$295 + (i32.lt_s + (get_local $$i$2299$lcssa) + (i32.const 10) + ) + ) + (if + (get_local $$cmp478$295) + (block + (set_local $$i$3296 + (get_local $$i$2299$lcssa) + ) + (loop $while-in132 + (block $while-out131 + (set_local $$arrayidx481 + (i32.add + (get_local $$nl_type) + (i32.shl + (get_local $$i$3296) + (i32.const 2) + ) + ) + ) + (set_local $$268 + (i32.load + (get_local $$arrayidx481) + ) + ) + (set_local $$lnot483 + (i32.eq + (get_local $$268) + (i32.const 0) + ) + ) + (set_local $$inc488 + (i32.add + (get_local $$i$3296) + (i32.const 1) + ) + ) + (if + (i32.eqz + (get_local $$lnot483) + ) + (block + (set_local $$retval$0 + (i32.const -1) + ) + (br $label$break$L343) + ) + ) + (set_local $$cmp478 + (i32.lt_s + (get_local $$inc488) + (i32.const 10) + ) + ) + (if + (get_local $$cmp478) + (set_local $$i$3296 + (get_local $$inc488) + ) + (block + (set_local $$retval$0 + (i32.const 1) + ) + (br $while-out131) + ) + ) + (br $while-in132) + ) + ) + ) + (set_local $$retval$0 + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $$retval$0 + (get_local $$cnt$1$lcssa) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_pop_arg_336 (; 55 ;) (param $$arg i32) (param $$type i32) (param $$ap i32) + (local $$0 i32) + (local $$1 i32) + (local $$10 i32) + (local $$100 i32) + (local $$101 i32) + (local $$102 i32) + (local $$103 f64) + (local $$104 i32) + (local $$105 i32) + (local $$106 i32) + (local $$107 i32) + (local $$108 i32) + (local $$109 i32) + (local $$11 i32) + (local $$110 f64) + (local $$12 i32) + (local $$13 i32) + (local $$14 i32) + (local $$15 i32) + (local $$16 i32) + (local $$17 i32) + (local $$18 i32) + (local $$19 i32) + (local $$2 i32) + (local $$20 i32) + (local $$21 i32) + (local $$22 i32) + (local $$23 i32) + (local $$24 i32) + (local $$25 i32) + (local $$26 i32) + (local $$27 i32) + (local $$28 i32) + (local $$29 i32) + (local $$3 i32) + (local $$30 i32) + (local $$31 i32) + (local $$32 i32) + (local $$33 i32) + (local $$34 i32) + (local $$35 i32) + (local $$36 i32) + (local $$37 i32) + (local $$38 i32) + (local $$39 i32) + (local $$4 i32) + (local $$40 i32) + (local $$41 i32) + (local $$42 i32) + (local $$43 i32) + (local $$44 i32) + (local $$45 i32) + (local $$46 i32) + (local $$47 i32) + (local $$48 i32) + (local $$49 i32) + (local $$5 i32) + (local $$50 i32) + (local $$51 i32) + (local $$52 i32) + (local $$53 i32) + (local $$54 i32) + (local $$55 i32) + (local $$56 i32) + (local $$57 i32) + (local $$58 i32) + (local $$59 i32) + (local $$6 i32) + (local $$60 i32) + (local $$61 i32) + (local $$62 i32) + (local $$63 i32) + (local $$64 i32) + (local $$65 i32) + (local $$66 i32) + (local $$67 i32) + (local $$68 i32) + (local $$69 i32) + (local $$7 i32) + (local $$70 i32) + (local $$71 i32) + (local $$72 i32) + (local $$73 i32) + (local $$74 i32) + (local $$75 i32) + (local $$76 i32) + (local $$77 i32) + (local $$78 i32) + (local $$79 i32) + (local $$8 i32) + (local $$80 i32) + (local $$81 i32) + (local $$82 i32) + (local $$83 i32) + (local $$84 i32) + (local $$85 i32) + (local $$86 i32) + (local $$87 i32) + (local $$88 i32) + (local $$89 i32) + (local $$9 i32) + (local $$90 i32) + (local $$91 i32) + (local $$92 i32) + (local $$93 i32) + (local $$94 i32) + (local $$95 i32) + (local $$96 i32) + (local $$97 i32) + (local $$98 i32) + (local $$99 i32) + (local $$arglist_current i32) + (local $$arglist_current11 i32) + (local $$arglist_current14 i32) + (local $$arglist_current17 i32) + (local $$arglist_current2 i32) + (local $$arglist_current20 i32) + (local $$arglist_current23 i32) + (local $$arglist_current26 i32) + (local $$arglist_current5 i32) + (local $$arglist_current8 i32) + (local $$arglist_next i32) + (local $$arglist_next12 i32) + (local $$arglist_next15 i32) + (local $$arglist_next18 i32) + (local $$arglist_next21 i32) + (local $$arglist_next24 i32) + (local $$arglist_next27 i32) + (local $$arglist_next3 i32) + (local $$arglist_next6 i32) + (local $$arglist_next9 i32) + (local $$cmp i32) + (local $$conv12 i32) + (local $$conv17$mask i32) + (local $$conv22 i32) + (local $$conv27$mask i32) + (local $$expanded i32) + (local $$expanded28 i32) + (local $$expanded30 i32) + (local $$expanded31 i32) + (local $$expanded32 i32) + (local $$expanded34 i32) + (local $$expanded35 i32) + (local $$expanded37 i32) + (local $$expanded38 i32) + (local $$expanded39 i32) + (local $$expanded41 i32) + (local $$expanded42 i32) + (local $$expanded44 i32) + (local $$expanded45 i32) + (local $$expanded46 i32) + (local $$expanded48 i32) + (local $$expanded49 i32) + (local $$expanded51 i32) + (local $$expanded52 i32) + (local $$expanded53 i32) + (local $$expanded55 i32) + (local $$expanded56 i32) + (local $$expanded58 i32) + (local $$expanded59 i32) + (local $$expanded60 i32) + (local $$expanded62 i32) + (local $$expanded63 i32) + (local $$expanded65 i32) + (local $$expanded66 i32) + (local $$expanded67 i32) + (local $$expanded69 i32) + (local $$expanded70 i32) + (local $$expanded72 i32) + (local $$expanded73 i32) + (local $$expanded74 i32) + (local $$expanded76 i32) + (local $$expanded77 i32) + (local $$expanded79 i32) + (local $$expanded80 i32) + (local $$expanded81 i32) + (local $$expanded83 i32) + (local $$expanded84 i32) + (local $$expanded86 i32) + (local $$expanded87 i32) + (local $$expanded88 i32) + (local $$expanded90 i32) + (local $$expanded91 i32) + (local $$expanded93 i32) + (local $$expanded94 i32) + (local $$expanded95 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$cmp + (i32.gt_u + (get_local $$type) + (i32.const 20) + ) + ) + (block $label$break$L1 + (if + (i32.eqz + (get_local $$cmp) + ) + (block $do-once + (block $switch + (block $switch-default + (block $switch-case9 + (block $switch-case8 + (block $switch-case7 + (block $switch-case6 + (block $switch-case5 + (block $switch-case4 + (block $switch-case3 + (block $switch-case2 + (block $switch-case1 + (block $switch-case + (br_table $switch-case $switch-case1 $switch-case2 $switch-case3 $switch-case4 $switch-case5 $switch-case6 $switch-case7 $switch-case8 $switch-case9 $switch-default + (i32.sub + (get_local $$type) + (i32.const 9) + ) + ) + ) + (block + (set_local $$arglist_current + (i32.load + (get_local $$ap) + ) + ) + (set_local $$0 + (get_local $$arglist_current) + ) + (set_local $$1 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded28 + (get_local $$1) + ) + (set_local $$expanded + (i32.sub + (get_local $$expanded28) + (i32.const 1) + ) + ) + (set_local $$2 + (i32.add + (get_local $$0) + (get_local $$expanded) + ) + ) + (set_local $$3 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded32 + (get_local $$3) + ) + (set_local $$expanded31 + (i32.sub + (get_local $$expanded32) + (i32.const 1) + ) + ) + (set_local $$expanded30 + (i32.xor + (get_local $$expanded31) + (i32.const -1) + ) + ) + (set_local $$4 + (i32.and + (get_local $$2) + (get_local $$expanded30) + ) + ) + (set_local $$5 + (get_local $$4) + ) + (set_local $$6 + (i32.load + (get_local $$5) + ) + ) + (set_local $$arglist_next + (i32.add + (get_local $$5) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next) + ) + (i32.store + (get_local $$arg) + (get_local $$6) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current2 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$7 + (get_local $$arglist_current2) + ) + (set_local $$8 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded35 + (get_local $$8) + ) + (set_local $$expanded34 + (i32.sub + (get_local $$expanded35) + (i32.const 1) + ) + ) + (set_local $$9 + (i32.add + (get_local $$7) + (get_local $$expanded34) + ) + ) + (set_local $$10 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded39 + (get_local $$10) + ) + (set_local $$expanded38 + (i32.sub + (get_local $$expanded39) + (i32.const 1) + ) + ) + (set_local $$expanded37 + (i32.xor + (get_local $$expanded38) + (i32.const -1) + ) + ) + (set_local $$11 + (i32.and + (get_local $$9) + (get_local $$expanded37) + ) + ) + (set_local $$12 + (get_local $$11) + ) + (set_local $$13 + (i32.load + (get_local $$12) + ) + ) + (set_local $$arglist_next3 + (i32.add + (get_local $$12) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next3) + ) + (set_local $$14 + (i32.lt_s + (get_local $$13) + (i32.const 0) + ) + ) + (set_local $$15 + (i32.shr_s + (i32.shl + (get_local $$14) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$16 + (get_local $$arg) + ) + (set_local $$17 + (get_local $$16) + ) + (i32.store + (get_local $$17) + (get_local $$13) + ) + (set_local $$18 + (i32.add + (get_local $$16) + (i32.const 4) + ) + ) + (set_local $$19 + (get_local $$18) + ) + (i32.store + (get_local $$19) + (get_local $$15) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current5 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$20 + (get_local $$arglist_current5) + ) + (set_local $$21 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded42 + (get_local $$21) + ) + (set_local $$expanded41 + (i32.sub + (get_local $$expanded42) + (i32.const 1) + ) + ) + (set_local $$22 + (i32.add + (get_local $$20) + (get_local $$expanded41) + ) + ) + (set_local $$23 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded46 + (get_local $$23) + ) + (set_local $$expanded45 + (i32.sub + (get_local $$expanded46) + (i32.const 1) + ) + ) + (set_local $$expanded44 + (i32.xor + (get_local $$expanded45) + (i32.const -1) + ) + ) + (set_local $$24 + (i32.and + (get_local $$22) + (get_local $$expanded44) + ) + ) + (set_local $$25 + (get_local $$24) + ) + (set_local $$26 + (i32.load + (get_local $$25) + ) + ) + (set_local $$arglist_next6 + (i32.add + (get_local $$25) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next6) + ) + (set_local $$27 + (get_local $$arg) + ) + (set_local $$28 + (get_local $$27) + ) + (i32.store + (get_local $$28) + (get_local $$26) + ) + (set_local $$29 + (i32.add + (get_local $$27) + (i32.const 4) + ) + ) + (set_local $$30 + (get_local $$29) + ) + (i32.store + (get_local $$30) + (i32.const 0) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current8 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$31 + (get_local $$arglist_current8) + ) + (set_local $$32 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $$expanded49 + (get_local $$32) + ) + (set_local $$expanded48 + (i32.sub + (get_local $$expanded49) + (i32.const 1) + ) + ) + (set_local $$33 + (i32.add + (get_local $$31) + (get_local $$expanded48) + ) + ) + (set_local $$34 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $$expanded53 + (get_local $$34) + ) + (set_local $$expanded52 + (i32.sub + (get_local $$expanded53) + (i32.const 1) + ) + ) + (set_local $$expanded51 + (i32.xor + (get_local $$expanded52) + (i32.const -1) + ) + ) + (set_local $$35 + (i32.and + (get_local $$33) + (get_local $$expanded51) + ) + ) + (set_local $$36 + (get_local $$35) + ) + (set_local $$37 + (get_local $$36) + ) + (set_local $$38 + (get_local $$37) + ) + (set_local $$39 + (i32.load + (get_local $$38) + ) + ) + (set_local $$40 + (i32.add + (get_local $$37) + (i32.const 4) + ) + ) + (set_local $$41 + (get_local $$40) + ) + (set_local $$42 + (i32.load + (get_local $$41) + ) + ) + (set_local $$arglist_next9 + (i32.add + (get_local $$36) + (i32.const 8) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next9) + ) + (set_local $$43 + (get_local $$arg) + ) + (set_local $$44 + (get_local $$43) + ) + (i32.store + (get_local $$44) + (get_local $$39) + ) + (set_local $$45 + (i32.add + (get_local $$43) + (i32.const 4) + ) + ) + (set_local $$46 + (get_local $$45) + ) + (i32.store + (get_local $$46) + (get_local $$42) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current11 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$47 + (get_local $$arglist_current11) + ) + (set_local $$48 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded56 + (get_local $$48) + ) + (set_local $$expanded55 + (i32.sub + (get_local $$expanded56) + (i32.const 1) + ) + ) + (set_local $$49 + (i32.add + (get_local $$47) + (get_local $$expanded55) + ) + ) + (set_local $$50 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded60 + (get_local $$50) + ) + (set_local $$expanded59 + (i32.sub + (get_local $$expanded60) + (i32.const 1) + ) + ) + (set_local $$expanded58 + (i32.xor + (get_local $$expanded59) + (i32.const -1) + ) + ) + (set_local $$51 + (i32.and + (get_local $$49) + (get_local $$expanded58) + ) + ) + (set_local $$52 + (get_local $$51) + ) + (set_local $$53 + (i32.load + (get_local $$52) + ) + ) + (set_local $$arglist_next12 + (i32.add + (get_local $$52) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next12) + ) + (set_local $$conv12 + (i32.and + (get_local $$53) + (i32.const 65535) + ) + ) + (set_local $$54 + (i32.shr_s + (i32.shl + (get_local $$conv12) + (i32.const 16) + ) + (i32.const 16) + ) + ) + (set_local $$55 + (i32.lt_s + (get_local $$54) + (i32.const 0) + ) + ) + (set_local $$56 + (i32.shr_s + (i32.shl + (get_local $$55) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$57 + (get_local $$arg) + ) + (set_local $$58 + (get_local $$57) + ) + (i32.store + (get_local $$58) + (get_local $$54) + ) + (set_local $$59 + (i32.add + (get_local $$57) + (i32.const 4) + ) + ) + (set_local $$60 + (get_local $$59) + ) + (i32.store + (get_local $$60) + (get_local $$56) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current14 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$61 + (get_local $$arglist_current14) + ) + (set_local $$62 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded63 + (get_local $$62) + ) + (set_local $$expanded62 + (i32.sub + (get_local $$expanded63) + (i32.const 1) + ) + ) + (set_local $$63 + (i32.add + (get_local $$61) + (get_local $$expanded62) + ) + ) + (set_local $$64 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded67 + (get_local $$64) + ) + (set_local $$expanded66 + (i32.sub + (get_local $$expanded67) + (i32.const 1) + ) + ) + (set_local $$expanded65 + (i32.xor + (get_local $$expanded66) + (i32.const -1) + ) + ) + (set_local $$65 + (i32.and + (get_local $$63) + (get_local $$expanded65) + ) + ) + (set_local $$66 + (get_local $$65) + ) + (set_local $$67 + (i32.load + (get_local $$66) + ) + ) + (set_local $$arglist_next15 + (i32.add + (get_local $$66) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next15) + ) + (set_local $$conv17$mask + (i32.and + (get_local $$67) + (i32.const 65535) + ) + ) + (set_local $$68 + (get_local $$arg) + ) + (set_local $$69 + (get_local $$68) + ) + (i32.store + (get_local $$69) + (get_local $$conv17$mask) + ) + (set_local $$70 + (i32.add + (get_local $$68) + (i32.const 4) + ) + ) + (set_local $$71 + (get_local $$70) + ) + (i32.store + (get_local $$71) + (i32.const 0) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current17 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$72 + (get_local $$arglist_current17) + ) + (set_local $$73 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded70 + (get_local $$73) + ) + (set_local $$expanded69 + (i32.sub + (get_local $$expanded70) + (i32.const 1) + ) + ) + (set_local $$74 + (i32.add + (get_local $$72) + (get_local $$expanded69) + ) + ) + (set_local $$75 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded74 + (get_local $$75) + ) + (set_local $$expanded73 + (i32.sub + (get_local $$expanded74) + (i32.const 1) + ) + ) + (set_local $$expanded72 + (i32.xor + (get_local $$expanded73) + (i32.const -1) + ) + ) + (set_local $$76 + (i32.and + (get_local $$74) + (get_local $$expanded72) + ) + ) + (set_local $$77 + (get_local $$76) + ) + (set_local $$78 + (i32.load + (get_local $$77) + ) + ) + (set_local $$arglist_next18 + (i32.add + (get_local $$77) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next18) + ) + (set_local $$conv22 + (i32.and + (get_local $$78) + (i32.const 255) + ) + ) + (set_local $$79 + (i32.shr_s + (i32.shl + (get_local $$conv22) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $$80 + (i32.lt_s + (get_local $$79) + (i32.const 0) + ) + ) + (set_local $$81 + (i32.shr_s + (i32.shl + (get_local $$80) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $$82 + (get_local $$arg) + ) + (set_local $$83 + (get_local $$82) + ) + (i32.store + (get_local $$83) + (get_local $$79) + ) + (set_local $$84 + (i32.add + (get_local $$82) + (i32.const 4) + ) + ) + (set_local $$85 + (get_local $$84) + ) + (i32.store + (get_local $$85) + (get_local $$81) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current20 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$86 + (get_local $$arglist_current20) + ) + (set_local $$87 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded77 + (get_local $$87) + ) + (set_local $$expanded76 + (i32.sub + (get_local $$expanded77) + (i32.const 1) + ) + ) + (set_local $$88 + (i32.add + (get_local $$86) + (get_local $$expanded76) + ) + ) + (set_local $$89 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $$expanded81 + (get_local $$89) + ) + (set_local $$expanded80 + (i32.sub + (get_local $$expanded81) + (i32.const 1) + ) + ) + (set_local $$expanded79 + (i32.xor + (get_local $$expanded80) + (i32.const -1) + ) + ) + (set_local $$90 + (i32.and + (get_local $$88) + (get_local $$expanded79) + ) + ) + (set_local $$91 + (get_local $$90) + ) + (set_local $$92 + (i32.load + (get_local $$91) + ) + ) + (set_local $$arglist_next21 + (i32.add + (get_local $$91) + (i32.const 4) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next21) + ) + (set_local $$conv27$mask + (i32.and + (get_local $$92) + (i32.const 255) + ) + ) + (set_local $$93 + (get_local $$arg) + ) + (set_local $$94 + (get_local $$93) + ) + (i32.store + (get_local $$94) + (get_local $$conv27$mask) + ) + (set_local $$95 + (i32.add + (get_local $$93) + (i32.const 4) + ) + ) + (set_local $$96 + (get_local $$95) + ) + (i32.store + (get_local $$96) + (i32.const 0) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current23 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$97 + (get_local $$arglist_current23) + ) + (set_local $$98 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $$expanded84 + (get_local $$98) + ) + (set_local $$expanded83 + (i32.sub + (get_local $$expanded84) + (i32.const 1) + ) + ) + (set_local $$99 + (i32.add + (get_local $$97) + (get_local $$expanded83) + ) + ) + (set_local $$100 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $$expanded88 + (get_local $$100) + ) + (set_local $$expanded87 + (i32.sub + (get_local $$expanded88) + (i32.const 1) + ) + ) + (set_local $$expanded86 + (i32.xor + (get_local $$expanded87) + (i32.const -1) + ) + ) + (set_local $$101 + (i32.and + (get_local $$99) + (get_local $$expanded86) + ) + ) + (set_local $$102 + (get_local $$101) + ) + (set_local $$103 + (f64.load + (get_local $$102) + ) + ) + (set_local $$arglist_next24 + (i32.add + (get_local $$102) + (i32.const 8) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next24) + ) + (f64.store + (get_local $$arg) + (get_local $$103) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (block + (set_local $$arglist_current26 + (i32.load + (get_local $$ap) + ) + ) + (set_local $$104 + (get_local $$arglist_current26) + ) + (set_local $$105 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $$expanded91 + (get_local $$105) + ) + (set_local $$expanded90 + (i32.sub + (get_local $$expanded91) + (i32.const 1) + ) + ) + (set_local $$106 + (i32.add + (get_local $$104) + (get_local $$expanded90) + ) + ) + (set_local $$107 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $$expanded95 + (get_local $$107) + ) + (set_local $$expanded94 + (i32.sub + (get_local $$expanded95) + (i32.const 1) + ) + ) + (set_local $$expanded93 + (i32.xor + (get_local $$expanded94) + (i32.const -1) + ) + ) + (set_local $$108 + (i32.and + (get_local $$106) + (get_local $$expanded93) + ) + ) + (set_local $$109 + (get_local $$108) + ) + (set_local $$110 + (f64.load + (get_local $$109) + ) + ) + (set_local $$arglist_next27 + (i32.add + (get_local $$109) + (i32.const 8) + ) + ) + (i32.store + (get_local $$ap) + (get_local $$arglist_next27) + ) + (f64.store + (get_local $$arg) + (get_local $$110) + ) + (br $label$break$L1) + (br $switch) + ) + ) + (br $label$break$L1) + ) + ) + ) + ) + (return) + ) + (func $_fmt_u (; 56 ;) (param $$0 i32) (param $$1 i32) (param $$s i32) (result i32) + (local $$10 i32) + (local $$11 i32) + (local $$12 i32) + (local $$13 i32) + (local $$14 i32) + (local $$15 i32) + (local $$16 i32) + (local $$17 i32) + (local $$18 i32) + (local $$19 i32) + (local $$2 i32) + (local $$20 i32) + (local $$21 i32) + (local $$22 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 i32) + (local $$8 i32) + (local $$9 i32) + (local $$add5 i32) + (local $$conv6 i32) + (local $$div9 i32) + (local $$incdec$ptr i32) + (local $$incdec$ptr$lcssa i32) + (local $$incdec$ptr7 i32) + (local $$rem4 i32) + (local $$s$addr$0$lcssa i32) + (local $$s$addr$013 i32) + (local $$s$addr$1$lcssa i32) + (local $$s$addr$19 i32) + (local $$tobool$8 i32) + (local $$x$addr$0$lcssa$off0 i32) + (local $$y$010 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$2 + (i32.gt_u + (get_local $$1) + (i32.const 0) + ) + ) + (set_local $$3 + (i32.gt_u + (get_local $$0) + (i32.const -1) + ) + ) + (set_local $$4 + (i32.eq + (get_local $$1) + (i32.const 0) + ) + ) + (set_local $$5 + (i32.and + (get_local $$4) + (get_local $$3) + ) + ) + (set_local $$6 + (i32.or + (get_local $$2) + (get_local $$5) + ) + ) + (if + (get_local $$6) + (block + (set_local $$7 + (get_local $$0) + ) + (set_local $$8 + (get_local $$1) + ) + (set_local $$s$addr$013 + (get_local $$s) + ) + (loop $while-in + (block $while-out + (set_local $$9 + (call $___uremdi3 + (get_local $$7) + (get_local $$8) + (i32.const 10) + (i32.const 0) + ) + ) + (set_local $$10 + (get_global $tempRet0) + ) + (set_local $$11 + (i32.or + (get_local $$9) + (i32.const 48) + ) + ) + (set_local $$12 + (i32.and + (get_local $$11) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$s$addr$013) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr) + (get_local $$12) + ) + (set_local $$13 + (call $___udivdi3 + (get_local $$7) + (get_local $$8) + (i32.const 10) + (i32.const 0) + ) + ) + (set_local $$14 + (get_global $tempRet0) + ) + (set_local $$15 + (i32.gt_u + (get_local $$8) + (i32.const 9) + ) + ) + (set_local $$16 + (i32.gt_u + (get_local $$7) + (i32.const -1) + ) + ) + (set_local $$17 + (i32.eq + (get_local $$8) + (i32.const 9) + ) + ) + (set_local $$18 + (i32.and + (get_local $$17) + (get_local $$16) + ) + ) + (set_local $$19 + (i32.or + (get_local $$15) + (get_local $$18) + ) + ) + (if + (get_local $$19) + (block + (set_local $$7 + (get_local $$13) + ) + (set_local $$8 + (get_local $$14) + ) + (set_local $$s$addr$013 + (get_local $$incdec$ptr) + ) + ) + (block + (set_local $$21 + (get_local $$13) + ) + (set_local $$22 + (get_local $$14) + ) + (set_local $$incdec$ptr$lcssa + (get_local $$incdec$ptr) + ) + (br $while-out) + ) + ) + (br $while-in) + ) + ) + (set_local $$s$addr$0$lcssa + (get_local $$incdec$ptr$lcssa) + ) + (set_local $$x$addr$0$lcssa$off0 + (get_local $$21) + ) + ) + (block + (set_local $$s$addr$0$lcssa + (get_local $$s) + ) + (set_local $$x$addr$0$lcssa$off0 + (get_local $$0) + ) + ) + ) + (set_local $$tobool$8 + (i32.eq + (get_local $$x$addr$0$lcssa$off0) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$8) + (set_local $$s$addr$1$lcssa + (get_local $$s$addr$0$lcssa) + ) + (block + (set_local $$s$addr$19 + (get_local $$s$addr$0$lcssa) + ) + (set_local $$y$010 + (get_local $$x$addr$0$lcssa$off0) + ) + (loop $while-in1 + (block $while-out0 + (set_local $$rem4 + (i32.and + (call $i32u-rem + (get_local $$y$010) + (i32.const 10) + ) + (i32.const -1) + ) + ) + (set_local $$add5 + (i32.or + (get_local $$rem4) + (i32.const 48) + ) + ) + (set_local $$conv6 + (i32.and + (get_local $$add5) + (i32.const 255) + ) + ) + (set_local $$incdec$ptr7 + (i32.add + (get_local $$s$addr$19) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $$incdec$ptr7) + (get_local $$conv6) + ) + (set_local $$div9 + (i32.and + (call $i32u-div + (get_local $$y$010) + (i32.const 10) + ) + (i32.const -1) + ) + ) + (set_local $$20 + (i32.lt_u + (get_local $$y$010) + (i32.const 10) + ) + ) + (if + (get_local $$20) + (block + (set_local $$s$addr$1$lcssa + (get_local $$incdec$ptr7) + ) + (br $while-out0) + ) + (block + (set_local $$s$addr$19 + (get_local $$incdec$ptr7) + ) + (set_local $$y$010 + (get_local $$div9) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (return + (get_local $$s$addr$1$lcssa) + ) + ) + (func $_pad (; 57 ;) (param $$f i32) (param $$c i32) (param $$w i32) (param $$l i32) (param $$fl i32) + (local $$$pre i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$and i32) + (local $$and$i i32) + (local $$and$i$15 i32) + (local $$cmp i32) + (local $$cmp1 i32) + (local $$cmp3 i32) + (local $$cmp3$14 i32) + (local $$cond i32) + (local $$l$addr$0$lcssa21 i32) + (local $$l$addr$017 i32) + (local $$or$cond i32) + (local $$pad i32) + (local $$sub i32) + (local $$sub5 i32) + (local $$tobool i32) + (local $$tobool$i i32) + (local $$tobool$i$16 i32) + (local $$tobool$i18 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 256) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $$pad + (get_local $sp) + ) + (set_local $$and + (i32.and + (get_local $$fl) + (i32.const 73728) + ) + ) + (set_local $$tobool + (i32.eq + (get_local $$and) + (i32.const 0) + ) + ) + (set_local $$cmp + (i32.gt_s + (get_local $$w) + (get_local $$l) + ) + ) + (set_local $$or$cond + (i32.and + (get_local $$cmp) + (get_local $$tobool) + ) + ) + (block $do-once + (if + (get_local $$or$cond) + (block + (set_local $$sub + (i32.sub + (get_local $$w) + (get_local $$l) + ) + ) + (set_local $$cmp1 + (i32.gt_u + (get_local $$sub) + (i32.const 256) + ) + ) + (set_local $$cond + (if (result i32) + (get_local $$cmp1) + (i32.const 256) + (get_local $$sub) + ) + ) + (drop + (call $_memset + (get_local $$pad) + (get_local $$c) + (get_local $$cond) + ) + ) + (set_local $$cmp3$14 + (i32.gt_u + (get_local $$sub) + (i32.const 255) + ) + ) + (set_local $$0 + (i32.load + (get_local $$f) + ) + ) + (set_local $$and$i$15 + (i32.and + (get_local $$0) + (i32.const 32) + ) + ) + (set_local $$tobool$i$16 + (i32.eq + (get_local $$and$i$15) + (i32.const 0) + ) + ) + (if + (get_local $$cmp3$14) + (block + (set_local $$1 + (i32.sub + (get_local $$w) + (get_local $$l) + ) + ) + (set_local $$4 + (get_local $$0) + ) + (set_local $$l$addr$017 + (get_local $$sub) + ) + (set_local $$tobool$i18 + (get_local $$tobool$i$16) + ) + (loop $while-in + (block $while-out + (if + (get_local $$tobool$i18) + (block + (drop + (call $___fwritex + (get_local $$pad) + (i32.const 256) + (get_local $$f) + ) + ) + (set_local $$$pre + (i32.load + (get_local $$f) + ) + ) + (set_local $$2 + (get_local $$$pre) + ) + ) + (set_local $$2 + (get_local $$4) + ) + ) + (set_local $$sub5 + (i32.add + (get_local $$l$addr$017) + (i32.const -256) + ) + ) + (set_local $$cmp3 + (i32.gt_u + (get_local $$sub5) + (i32.const 255) + ) + ) + (set_local $$and$i + (i32.and + (get_local $$2) + (i32.const 32) + ) + ) + (set_local $$tobool$i + (i32.eq + (get_local $$and$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp3) + (block + (set_local $$4 + (get_local $$2) + ) + (set_local $$l$addr$017 + (get_local $$sub5) + ) + (set_local $$tobool$i18 + (get_local $$tobool$i) + ) + ) + (br $while-out) + ) + (br $while-in) + ) + ) + (set_local $$3 + (i32.and + (get_local $$1) + (i32.const 255) + ) + ) + (if + (get_local $$tobool$i) + (set_local $$l$addr$0$lcssa21 + (get_local $$3) + ) + (br $do-once) + ) + ) + (if + (get_local $$tobool$i$16) + (set_local $$l$addr$0$lcssa21 + (get_local $$sub) + ) + (br $do-once) + ) + ) + (drop + (call $___fwritex + (get_local $$pad) + (get_local $$l$addr$0$lcssa21) + (get_local $$f) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $sp) + ) + (return) + ) + (func $_malloc (; 58 ;) (param $$bytes i32) (result i32) + (local $$$lcssa i32) + (local $$$lcssa290 i32) + (local $$$pre i32) + (local $$$pre$i i32) + (local $$$pre$i$177 i32) + (local $$$pre$i$56$i i32) + (local $$$pre$i$i i32) + (local $$$pre$phi$i$178Z2D i32) + (local $$$pre$phi$i$57$iZ2D i32) + (local $$$pre$phi$i$iZ2D i32) + (local $$$pre$phi$iZ2D i32) + (local $$$pre$phiZ2D i32) + (local $$$pre241 i32) + (local $$$pre5$i$i i32) + (local $$0 i32) + (local $$1 i32) + (local $$10 i32) + (local $$100 i32) + (local $$101 i32) + (local $$102 i32) + (local $$103 i32) + (local $$104 i32) + (local $$105 i32) + (local $$106 i32) + (local $$107 i32) + (local $$108 i32) + (local $$109 i32) + (local $$11 i32) + (local $$110 i32) + (local $$111 i32) + (local $$112 i32) + (local $$113 i32) + (local $$114 i32) + (local $$115 i32) + (local $$116 i32) + (local $$117 i32) + (local $$118 i32) + (local $$119 i32) + (local $$12 i32) + (local $$120 i32) + (local $$121 i32) + (local $$122 i32) + (local $$123 i32) + (local $$124 i32) + (local $$125 i32) + (local $$126 i32) + (local $$127 i32) + (local $$128 i32) + (local $$129 i32) + (local $$13 i32) + (local $$130 i32) + (local $$131 i32) + (local $$132 i32) + (local $$133 i32) + (local $$134 i32) + (local $$135 i32) + (local $$136 i32) + (local $$137 i32) + (local $$138 i32) + (local $$139 i32) + (local $$14 i32) + (local $$140 i32) + (local $$141 i32) + (local $$142 i32) + (local $$143 i32) + (local $$144 i32) + (local $$145 i32) + (local $$146 i32) + (local $$147 i32) + (local $$148 i32) + (local $$149 i32) + (local $$15 i32) + (local $$150 i32) + (local $$151 i32) + (local $$152 i32) + (local $$153 i32) + (local $$154 i32) + (local $$155 i32) + (local $$156 i32) + (local $$157 i32) + (local $$158 i32) + (local $$159 i32) + (local $$16 i32) + (local $$160 i32) + (local $$161 i32) + (local $$162 i32) + (local $$163 i32) + (local $$164 i32) + (local $$165 i32) + (local $$166 i32) + (local $$167 i32) + (local $$168 i32) + (local $$169 i32) + (local $$17 i32) + (local $$170 i32) + (local $$171 i32) + (local $$172 i32) + (local $$173 i32) + (local $$174 i32) + (local $$175 i32) + (local $$176 i32) + (local $$177 i32) + (local $$178 i32) + (local $$179 i32) + (local $$18 i32) + (local $$180 i32) + (local $$181 i32) + (local $$182 i32) + (local $$183 i32) + (local $$184 i32) + (local $$185 i32) + (local $$186 i32) + (local $$187 i32) + (local $$188 i32) + (local $$189 i32) + (local $$19 i32) + (local $$190 i32) + (local $$191 i32) + (local $$192 i32) + (local $$193 i32) + (local $$194 i32) + (local $$195 i32) + (local $$196 i32) + (local $$197 i32) + (local $$198 i32) + (local $$199 i32) + (local $$2 i32) + (local $$20 i32) + (local $$200 i32) + (local $$201 i32) + (local $$202 i32) + (local $$203 i32) + (local $$204 i32) + (local $$205 i32) + (local $$206 i32) + (local $$207 i32) + (local $$208 i32) + (local $$21 i32) + (local $$22 i32) + (local $$23 i32) + (local $$24 i32) + (local $$25 i32) + (local $$26 i32) + (local $$27 i32) + (local $$28 i32) + (local $$29 i32) + (local $$3 i32) + (local $$30 i32) + (local $$31 i32) + (local $$32 i32) + (local $$33 i32) + (local $$34 i32) + (local $$35 i32) + (local $$36 i32) + (local $$37 i32) + (local $$38 i32) + (local $$39 i32) + (local $$4 i32) + (local $$40 i32) + (local $$41 i32) + (local $$42 i32) + (local $$43 i32) + (local $$44 i32) + (local $$45 i32) + (local $$46 i32) + (local $$47 i32) + (local $$48 i32) + (local $$49 i32) + (local $$5 i32) + (local $$50 i32) + (local $$51 i32) + (local $$52 i32) + (local $$53 i32) + (local $$54 i32) + (local $$55 i32) + (local $$56 i32) + (local $$57 i32) + (local $$58 i32) + (local $$59 i32) + (local $$6 i32) + (local $$60 i32) + (local $$61 i32) + (local $$62 i32) + (local $$63 i32) + (local $$64 i32) + (local $$65 i32) + (local $$66 i32) + (local $$67 i32) + (local $$68 i32) + (local $$69 i32) + (local $$7 i32) + (local $$70 i32) + (local $$71 i32) + (local $$72 i32) + (local $$73 i32) + (local $$74 i32) + (local $$75 i32) + (local $$76 i32) + (local $$77 i32) + (local $$78 i32) + (local $$79 i32) + (local $$8 i32) + (local $$80 i32) + (local $$81 i32) + (local $$82 i32) + (local $$83 i32) + (local $$84 i32) + (local $$85 i32) + (local $$86 i32) + (local $$87 i32) + (local $$88 i32) + (local $$89 i32) + (local $$9 i32) + (local $$90 i32) + (local $$91 i32) + (local $$92 i32) + (local $$93 i32) + (local $$94 i32) + (local $$95 i32) + (local $$96 i32) + (local $$97 i32) + (local $$98 i32) + (local $$99 i32) + (local $$F$0$i$i i32) + (local $$F104$0 i32) + (local $$F197$0$i i32) + (local $$F224$0$i$i i32) + (local $$F290$0$i i32) + (local $$I252$0$i$i i32) + (local $$I316$0$i i32) + (local $$I57$0$i$i i32) + (local $$K105$0$i$i i32) + (local $$K305$0$i$i i32) + (local $$K373$0$i i32) + (local $$R$1$i i32) + (local $$R$1$i$168 i32) + (local $$R$1$i$168$lcssa i32) + (local $$R$1$i$i i32) + (local $$R$1$i$i$lcssa i32) + (local $$R$1$i$lcssa i32) + (local $$R$3$i i32) + (local $$R$3$i$171 i32) + (local $$R$3$i$i i32) + (local $$RP$1$i i32) + (local $$RP$1$i$167 i32) + (local $$RP$1$i$167$lcssa i32) + (local $$RP$1$i$i i32) + (local $$RP$1$i$i$lcssa i32) + (local $$RP$1$i$lcssa i32) + (local $$T$0$i i32) + (local $$T$0$i$58$i i32) + (local $$T$0$i$58$i$lcssa i32) + (local $$T$0$i$58$i$lcssa283 i32) + (local $$T$0$i$i i32) + (local $$T$0$i$i$lcssa i32) + (local $$T$0$i$i$lcssa284 i32) + (local $$T$0$i$lcssa i32) + (local $$T$0$i$lcssa293 i32) + (local $$add$i i32) + (local $$add$i$146 i32) + (local $$add$i$180 i32) + (local $$add$i$i i32) + (local $$add$ptr i32) + (local $$add$ptr$i i32) + (local $$add$ptr$i$1$i$i i32) + (local $$add$ptr$i$11$i i32) + (local $$add$ptr$i$161 i32) + (local $$add$ptr$i$193 i32) + (local $$add$ptr$i$21$i i32) + (local $$add$ptr$i$32$i i32) + (local $$add$ptr$i$i i32) + (local $$add$ptr$i$i$i i32) + (local $$add$ptr$i$i$i$lcssa i32) + (local $$add$ptr14$i$i i32) + (local $$add$ptr15$i$i i32) + (local $$add$ptr16$i$i i32) + (local $$add$ptr166 i32) + (local $$add$ptr169 i32) + (local $$add$ptr17$i$i i32) + (local $$add$ptr178 i32) + (local $$add$ptr181$i i32) + (local $$add$ptr182 i32) + (local $$add$ptr189$i i32) + (local $$add$ptr190$i i32) + (local $$add$ptr193 i32) + (local $$add$ptr199 i32) + (local $$add$ptr2$i$i i32) + (local $$add$ptr205$i$i i32) + (local $$add$ptr212$i$i i32) + (local $$add$ptr225$i i32) + (local $$add$ptr227$i i32) + (local $$add$ptr24$i$i i32) + (local $$add$ptr262$i i32) + (local $$add$ptr269$i i32) + (local $$add$ptr273$i i32) + (local $$add$ptr282$i i32) + (local $$add$ptr3$i$i i32) + (local $$add$ptr30$i$i i32) + (local $$add$ptr369$i$i i32) + (local $$add$ptr4$i$26$i i32) + (local $$add$ptr4$i$37$i i32) + (local $$add$ptr4$i$i i32) + (local $$add$ptr4$i$i$i i32) + (local $$add$ptr441$i i32) + (local $$add$ptr5$i$i i32) + (local $$add$ptr6$i$30$i i32) + (local $$add$ptr6$i$i i32) + (local $$add$ptr6$i$i$i i32) + (local $$add$ptr7$i$i i32) + (local $$add$ptr8$i122$i i32) + (local $$add$ptr95 i32) + (local $$add$ptr98 i32) + (local $$add10$i i32) + (local $$add101$i i32) + (local $$add110$i i32) + (local $$add13$i i32) + (local $$add14$i i32) + (local $$add140$i i32) + (local $$add144 i32) + (local $$add150$i i32) + (local $$add17$i i32) + (local $$add17$i$183 i32) + (local $$add177$i i32) + (local $$add18$i i32) + (local $$add19$i i32) + (local $$add2 i32) + (local $$add20$i i32) + (local $$add206$i$i i32) + (local $$add212$i i32) + (local $$add215$i i32) + (local $$add22$i i32) + (local $$add246$i i32) + (local $$add26$i$i i32) + (local $$add268$i i32) + (local $$add269$i$i i32) + (local $$add274$i$i i32) + (local $$add278$i$i i32) + (local $$add280$i$i i32) + (local $$add283$i$i i32) + (local $$add337$i i32) + (local $$add342$i i32) + (local $$add346$i i32) + (local $$add348$i i32) + (local $$add351$i i32) + (local $$add46$i i32) + (local $$add50 i32) + (local $$add51$i i32) + (local $$add54 i32) + (local $$add54$i i32) + (local $$add58 i32) + (local $$add62 i32) + (local $$add64 i32) + (local $$add74$i$i i32) + (local $$add77$i i32) + (local $$add78$i i32) + (local $$add79$i$i i32) + (local $$add8 i32) + (local $$add82$i i32) + (local $$add83$i$i i32) + (local $$add85$i$i i32) + (local $$add86$i i32) + (local $$add88$i$i i32) + (local $$add9$i i32) + (local $$add90$i i32) + (local $$add92$i i32) + (local $$and i32) + (local $$and$i i32) + (local $$and$i$12$i i32) + (local $$and$i$14$i i32) + (local $$and$i$143 i32) + (local $$and$i$22$i i32) + (local $$and$i$33$i i32) + (local $$and$i$i i32) + (local $$and$i$i$i i32) + (local $$and100$i i32) + (local $$and103$i i32) + (local $$and104$i i32) + (local $$and106 i32) + (local $$and11$i i32) + (local $$and119$i$i i32) + (local $$and12$i i32) + (local $$and13$i i32) + (local $$and13$i$i i32) + (local $$and133$i$i i32) + (local $$and14 i32) + (local $$and145 i32) + (local $$and17$i i32) + (local $$and194$i i32) + (local $$and194$i$204 i32) + (local $$and199$i i32) + (local $$and209$i$i i32) + (local $$and21$i i32) + (local $$and21$i$149 i32) + (local $$and227$i$i i32) + (local $$and236$i i32) + (local $$and264$i$i i32) + (local $$and268$i$i i32) + (local $$and273$i$i i32) + (local $$and282$i$i i32) + (local $$and29$i i32) + (local $$and292$i i32) + (local $$and295$i$i i32) + (local $$and3$i i32) + (local $$and3$i$24$i i32) + (local $$and3$i$35$i i32) + (local $$and3$i$i i32) + (local $$and3$i$i$i i32) + (local $$and30$i i32) + (local $$and318$i$i i32) + (local $$and32$i i32) + (local $$and32$i$i i32) + (local $$and33$i$i i32) + (local $$and331$i i32) + (local $$and336$i i32) + (local $$and341$i i32) + (local $$and350$i i32) + (local $$and363$i i32) + (local $$and37$i$i i32) + (local $$and387$i i32) + (local $$and4 i32) + (local $$and40$i$i i32) + (local $$and41 i32) + (local $$and42$i i32) + (local $$and43 i32) + (local $$and46 i32) + (local $$and49 i32) + (local $$and49$i i32) + (local $$and49$i$i i32) + (local $$and53 i32) + (local $$and57 i32) + (local $$and6$i i32) + (local $$and6$i$38$i i32) + (local $$and6$i$i i32) + (local $$and61 i32) + (local $$and64$i i32) + (local $$and68$i i32) + (local $$and69$i$i i32) + (local $$and7 i32) + (local $$and7$i$i i32) + (local $$and73$i i32) + (local $$and73$i$i i32) + (local $$and74 i32) + (local $$and77$i i32) + (local $$and78$i$i i32) + (local $$and8$i i32) + (local $$and80$i i32) + (local $$and81$i i32) + (local $$and85$i i32) + (local $$and87$i$i i32) + (local $$and89$i i32) + (local $$and9$i i32) + (local $$and96$i$i i32) + (local $$arrayidx i32) + (local $$arrayidx$i i32) + (local $$arrayidx$i$150 i32) + (local $$arrayidx$i$20$i i32) + (local $$arrayidx$i$48$i i32) + (local $$arrayidx$i$i i32) + (local $$arrayidx103 i32) + (local $$arrayidx103$i$i i32) + (local $$arrayidx106$i i32) + (local $$arrayidx107$i$i i32) + (local $$arrayidx113$i i32) + (local $$arrayidx113$i$159 i32) + (local $$arrayidx121$i i32) + (local $$arrayidx123$i$i i32) + (local $$arrayidx126$i$i i32) + (local $$arrayidx126$i$i$lcssa i32) + (local $$arrayidx137$i i32) + (local $$arrayidx143$i$i i32) + (local $$arrayidx148$i i32) + (local $$arrayidx151$i i32) + (local $$arrayidx151$i$i i32) + (local $$arrayidx154$i i32) + (local $$arrayidx155$i i32) + (local $$arrayidx161$i i32) + (local $$arrayidx165$i i32) + (local $$arrayidx165$i$169 i32) + (local $$arrayidx178$i$i i32) + (local $$arrayidx184$i i32) + (local $$arrayidx184$i$i i32) + (local $$arrayidx195$i$i i32) + (local $$arrayidx196$i i32) + (local $$arrayidx204$i i32) + (local $$arrayidx212$i i32) + (local $$arrayidx223$i$i i32) + (local $$arrayidx228$i i32) + (local $$arrayidx23$i i32) + (local $$arrayidx239$i i32) + (local $$arrayidx245$i i32) + (local $$arrayidx256$i i32) + (local $$arrayidx27$i i32) + (local $$arrayidx287$i$i i32) + (local $$arrayidx289$i i32) + (local $$arrayidx290$i$i i32) + (local $$arrayidx325$i$i i32) + (local $$arrayidx325$i$i$lcssa i32) + (local $$arrayidx355$i i32) + (local $$arrayidx358$i i32) + (local $$arrayidx394$i i32) + (local $$arrayidx394$i$lcssa i32) + (local $$arrayidx40$i i32) + (local $$arrayidx44$i i32) + (local $$arrayidx61$i i32) + (local $$arrayidx65$i i32) + (local $$arrayidx66 i32) + (local $$arrayidx71$i i32) + (local $$arrayidx75$i i32) + (local $$arrayidx91$i$i i32) + (local $$arrayidx92$i$i i32) + (local $$arrayidx94$i i32) + (local $$arrayidx94$i$156 i32) + (local $$arrayidx96$i$i i32) + (local $$base$i$i$lcssa i32) + (local $$base226$i$lcssa i32) + (local $$bk i32) + (local $$bk$i i32) + (local $$bk$i$163 i32) + (local $$bk$i$46$i i32) + (local $$bk$i$i i32) + (local $$bk102$i$i i32) + (local $$bk122 i32) + (local $$bk124 i32) + (local $$bk136$i i32) + (local $$bk139$i$i i32) + (local $$bk158$i$i i32) + (local $$bk161$i$i i32) + (local $$bk218$i i32) + (local $$bk220$i i32) + (local $$bk246$i$i i32) + (local $$bk248$i$i i32) + (local $$bk302$i$i i32) + (local $$bk311$i i32) + (local $$bk313$i i32) + (local $$bk338$i$i i32) + (local $$bk357$i$i i32) + (local $$bk360$i$i i32) + (local $$bk370$i i32) + (local $$bk407$i i32) + (local $$bk429$i i32) + (local $$bk43$i$i i32) + (local $$bk432$i i32) + (local $$bk47$i i32) + (local $$bk55$i$i i32) + (local $$bk67$i$i i32) + (local $$bk74$i$i i32) + (local $$bk78 i32) + (local $$bk82$i$i i32) + (local $$br$2$ph$i i32) + (local $$call$i$i i32) + (local $$call107$i i32) + (local $$call131$i i32) + (local $$call132$i i32) + (local $$call275$i i32) + (local $$call37$i i32) + (local $$call6$i$i i32) + (local $$call68$i i32) + (local $$call83$i i32) + (local $$child$i$i i32) + (local $$child166$i$i i32) + (local $$child289$i$i i32) + (local $$child357$i i32) + (local $$cmp i32) + (local $$cmp$i i32) + (local $$cmp$i$13$i i32) + (local $$cmp$i$140 i32) + (local $$cmp$i$15$i i32) + (local $$cmp$i$179 i32) + (local $$cmp$i$2$i$i i32) + (local $$cmp$i$23$i i32) + (local $$cmp$i$34$i i32) + (local $$cmp$i$9$i i32) + (local $$cmp$i$i$i i32) + (local $$cmp1 i32) + (local $$cmp1$i i32) + (local $$cmp1$i$i i32) + (local $$cmp10 i32) + (local $$cmp100$i$i i32) + (local $$cmp102$i i32) + (local $$cmp104$i$i i32) + (local $$cmp105$i i32) + (local $$cmp106$i$i i32) + (local $$cmp107$i i32) + (local $$cmp107$i$157 i32) + (local $$cmp108$i i32) + (local $$cmp108$i$i i32) + (local $$cmp112$i$i i32) + (local $$cmp113 i32) + (local $$cmp114$i i32) + (local $$cmp116$i i32) + (local $$cmp118$i i32) + (local $$cmp119$i i32) + (local $$cmp12$i i32) + (local $$cmp120$i$53$i i32) + (local $$cmp120$i$i i32) + (local $$cmp121$i i32) + (local $$cmp123$i i32) + (local $$cmp124$i$i i32) + (local $$cmp126$i i32) + (local $$cmp127$i i32) + (local $$cmp128 i32) + (local $$cmp128$i i32) + (local $$cmp128$i$i i32) + (local $$cmp130$i i32) + (local $$cmp133$i i32) + (local $$cmp133$i$196 i32) + (local $$cmp133$i$i i32) + (local $$cmp135$i i32) + (local $$cmp137$i i32) + (local $$cmp137$i$197 i32) + (local $$cmp137$i$i i32) + (local $$cmp138$i i32) + (local $$cmp139 i32) + (local $$cmp140$i i32) + (local $$cmp141$not$i i32) + (local $$cmp142$i i32) + (local $$cmp144$i$i i32) + (local $$cmp146 i32) + (local $$cmp15 i32) + (local $$cmp15$i i32) + (local $$cmp151$i i32) + (local $$cmp152$i i32) + (local $$cmp153$i$i i32) + (local $$cmp155$i i32) + (local $$cmp156 i32) + (local $$cmp156$i i32) + (local $$cmp156$i$i i32) + (local $$cmp157$i i32) + (local $$cmp159$i i32) + (local $$cmp159$i$199 i32) + (local $$cmp16 i32) + (local $$cmp160$i$i i32) + (local $$cmp162 i32) + (local $$cmp162$i i32) + (local $$cmp162$i$200 i32) + (local $$cmp166$i i32) + (local $$cmp168$i$i i32) + (local $$cmp171$i i32) + (local $$cmp172$i$i i32) + (local $$cmp174$i i32) + (local $$cmp180$i i32) + (local $$cmp185$i i32) + (local $$cmp185$i$i i32) + (local $$cmp186 i32) + (local $$cmp186$i i32) + (local $$cmp189$i$i i32) + (local $$cmp19$i i32) + (local $$cmp190$i i32) + (local $$cmp191$i i32) + (local $$cmp198$i i32) + (local $$cmp2$i$i i32) + (local $$cmp2$i$i$i i32) + (local $$cmp20$i$i i32) + (local $$cmp203$i i32) + (local $$cmp205$i i32) + (local $$cmp208$i i32) + (local $$cmp209$i i32) + (local $$cmp21$i i32) + (local $$cmp215$i$i i32) + (local $$cmp217$i i32) + (local $$cmp218$i i32) + (local $$cmp221$i i32) + (local $$cmp224$i i32) + (local $$cmp228$i i32) + (local $$cmp229$i i32) + (local $$cmp233$i i32) + (local $$cmp236$i$i i32) + (local $$cmp24$i i32) + (local $$cmp24$i$i i32) + (local $$cmp246$i i32) + (local $$cmp250$i i32) + (local $$cmp254$i$i i32) + (local $$cmp257$i i32) + (local $$cmp258$i$i i32) + (local $$cmp26$i i32) + (local $$cmp265$i i32) + (local $$cmp27$i$i i32) + (local $$cmp28$i i32) + (local $$cmp28$i$i i32) + (local $$cmp284$i i32) + (local $$cmp29 i32) + (local $$cmp3$i$i i32) + (local $$cmp301$i i32) + (local $$cmp306$i$i i32) + (local $$cmp31 i32) + (local $$cmp319$i i32) + (local $$cmp319$i$i i32) + (local $$cmp32$i i32) + (local $$cmp32$i$185 i32) + (local $$cmp323$i i32) + (local $$cmp327$i$i i32) + (local $$cmp33$i i32) + (local $$cmp332$i$i i32) + (local $$cmp34$i i32) + (local $$cmp34$i$i i32) + (local $$cmp35$i i32) + (local $$cmp350$i$i i32) + (local $$cmp36$i i32) + (local $$cmp36$i$i i32) + (local $$cmp374$i i32) + (local $$cmp38$i i32) + (local $$cmp38$i$i i32) + (local $$cmp388$i i32) + (local $$cmp396$i i32) + (local $$cmp40$i i32) + (local $$cmp401$i i32) + (local $$cmp41$i$i i32) + (local $$cmp42$i$i i32) + (local $$cmp422$i i32) + (local $$cmp43$i i32) + (local $$cmp44$i$i i32) + (local $$cmp45$i i32) + (local $$cmp45$i$155 i32) + (local $$cmp46$i i32) + (local $$cmp46$i$49$i i32) + (local $$cmp46$i$i i32) + (local $$cmp48$i i32) + (local $$cmp49$i i32) + (local $$cmp5 i32) + (local $$cmp51$i i32) + (local $$cmp54$i$i i32) + (local $$cmp55$i i32) + (local $$cmp55$i$187 i32) + (local $$cmp57$i i32) + (local $$cmp57$i$188 i32) + (local $$cmp57$i$i i32) + (local $$cmp59$i$i i32) + (local $$cmp60$i i32) + (local $$cmp60$i$i i32) + (local $$cmp62$i i32) + (local $$cmp63$i i32) + (local $$cmp63$i$i i32) + (local $$cmp65$i i32) + (local $$cmp66$i i32) + (local $$cmp66$i$190 i32) + (local $$cmp69$i i32) + (local $$cmp7$i$i i32) + (local $$cmp70 i32) + (local $$cmp72$i i32) + (local $$cmp75$i$i i32) + (local $$cmp76 i32) + (local $$cmp76$i i32) + (local $$cmp79 i32) + (local $$cmp81$i i32) + (local $$cmp81$i$191 i32) + (local $$cmp81$i$i i32) + (local $$cmp83$i$i i32) + (local $$cmp85$i i32) + (local $$cmp86$i$i i32) + (local $$cmp89$i i32) + (local $$cmp9$i$i i32) + (local $$cmp90$i i32) + (local $$cmp91$i i32) + (local $$cmp93$i i32) + (local $$cmp95$i i32) + (local $$cmp96$i i32) + (local $$cmp97$7$i i32) + (local $$cmp97$i i32) + (local $$cmp97$i$i i32) + (local $$cmp99 i32) + (local $$cond i32) + (local $$cond$i i32) + (local $$cond$i$16$i i32) + (local $$cond$i$25$i i32) + (local $$cond$i$36$i i32) + (local $$cond$i$i i32) + (local $$cond$i$i$i i32) + (local $$cond$v$0$i i32) + (local $$cond115$i$i i32) + (local $$cond13$i$i i32) + (local $$cond15$i$i i32) + (local $$cond2$i i32) + (local $$cond2$i$i i32) + (local $$cond3$i i32) + (local $$cond315$i$i i32) + (local $$cond383$i i32) + (local $$cond4$i i32) + (local $$exitcond$i$i i32) + (local $$fd$i i32) + (local $$fd$i$164 i32) + (local $$fd$i$i i32) + (local $$fd103$i$i i32) + (local $$fd123 i32) + (local $$fd139$i i32) + (local $$fd140$i$i i32) + (local $$fd148$i$i i32) + (local $$fd160$i$i i32) + (local $$fd219$i i32) + (local $$fd247$i$i i32) + (local $$fd303$i$i i32) + (local $$fd312$i i32) + (local $$fd339$i$i i32) + (local $$fd344$i$i i32) + (local $$fd359$i$i i32) + (local $$fd371$i i32) + (local $$fd408$i i32) + (local $$fd416$i i32) + (local $$fd431$i i32) + (local $$fd50$i i32) + (local $$fd54$i$i i32) + (local $$fd59$i$i i32) + (local $$fd68$pre$phi$i$iZ2D i32) + (local $$fd69 i32) + (local $$fd78$i$i i32) + (local $$fd85$i$i i32) + (local $$fd9 i32) + (local $$head i32) + (local $$head$i i32) + (local $$head$i$154 i32) + (local $$head$i$17$i i32) + (local $$head$i$29$i i32) + (local $$head$i$42$i i32) + (local $$head$i$i i32) + (local $$head$i$i$i i32) + (local $$head118$i$i i32) + (local $$head168 i32) + (local $$head173 i32) + (local $$head177 i32) + (local $$head179 i32) + (local $$head179$i i32) + (local $$head182$i i32) + (local $$head187$i i32) + (local $$head189$i i32) + (local $$head195 i32) + (local $$head198 i32) + (local $$head208$i$i i32) + (local $$head211$i$i i32) + (local $$head23$i$i i32) + (local $$head25 i32) + (local $$head265$i i32) + (local $$head268$i i32) + (local $$head271$i i32) + (local $$head274$i i32) + (local $$head279$i i32) + (local $$head281$i i32) + (local $$head29$i i32) + (local $$head29$i$i i32) + (local $$head317$i$i i32) + (local $$head32$i$i i32) + (local $$head34$i$i i32) + (local $$head386$i i32) + (local $$head7$i$31$i i32) + (local $$head7$i$i i32) + (local $$head7$i$i$i i32) + (local $$head94 i32) + (local $$head97 i32) + (local $$head99$i i32) + (local $$i$01$i$i i32) + (local $$idx$0$i i32) + (local $$inc$i$i i32) + (local $$index$i i32) + (local $$index$i$172 i32) + (local $$index$i$54$i i32) + (local $$index$i$i i32) + (local $$index288$i$i i32) + (local $$index356$i i32) + (local $$nb$0 i32) + (local $$neg i32) + (local $$neg$i i32) + (local $$neg$i$173 i32) + (local $$neg$i$182 i32) + (local $$neg$i$i i32) + (local $$neg103$i i32) + (local $$neg13 i32) + (local $$neg132$i$i i32) + (local $$neg48$i i32) + (local $$neg73 i32) + (local $$next$i i32) + (local $$next$i$i i32) + (local $$next$i$i$i i32) + (local $$next231$i i32) + (local $$not$cmp150$i$i i32) + (local $$not$cmp346$i$i i32) + (local $$not$cmp418$i i32) + (local $$oldfirst$0$i$i i32) + (local $$or$cond$i i32) + (local $$or$cond$i$189 i32) + (local $$or$cond1$i i32) + (local $$or$cond1$i$184 i32) + (local $$or$cond2$i i32) + (local $$or$cond3$i i32) + (local $$or$cond4$i i32) + (local $$or$cond5$i i32) + (local $$or$cond7$i i32) + (local $$or$cond8$i i32) + (local $$or$cond98$i i32) + (local $$or$i i32) + (local $$or$i$195 i32) + (local $$or$i$28$i i32) + (local $$or$i$i i32) + (local $$or$i$i$i i32) + (local $$or101$i$i i32) + (local $$or110 i32) + (local $$or167 i32) + (local $$or172 i32) + (local $$or176 i32) + (local $$or178$i i32) + (local $$or180 i32) + (local $$or183$i i32) + (local $$or186$i i32) + (local $$or188$i i32) + (local $$or19$i$i i32) + (local $$or194 i32) + (local $$or197 i32) + (local $$or204$i i32) + (local $$or210$i$i i32) + (local $$or22$i$i i32) + (local $$or23 i32) + (local $$or232$i$i i32) + (local $$or26 i32) + (local $$or264$i i32) + (local $$or267$i i32) + (local $$or270$i i32) + (local $$or275$i i32) + (local $$or278$i i32) + (local $$or28$i$i i32) + (local $$or280$i i32) + (local $$or297$i i32) + (local $$or300$i$i i32) + (local $$or33$i$i i32) + (local $$or368$i i32) + (local $$or40 i32) + (local $$or44$i$i i32) + (local $$or93 i32) + (local $$or96 i32) + (local $$p$0$i$i i32) + (local $$parent$i i32) + (local $$parent$i$162 i32) + (local $$parent$i$51$i i32) + (local $$parent$i$i i32) + (local $$parent135$i i32) + (local $$parent138$i$i i32) + (local $$parent149$i i32) + (local $$parent162$i$i i32) + (local $$parent165$i$i i32) + (local $$parent166$i i32) + (local $$parent179$i$i i32) + (local $$parent196$i$i i32) + (local $$parent226$i i32) + (local $$parent240$i i32) + (local $$parent257$i i32) + (local $$parent301$i$i i32) + (local $$parent337$i$i i32) + (local $$parent361$i$i i32) + (local $$parent369$i i32) + (local $$parent406$i i32) + (local $$parent433$i i32) + (local $$qsize$0$i$i i32) + (local $$retval$0 i32) + (local $$rsize$0$i i32) + (local $$rsize$0$i$152 i32) + (local $$rsize$0$i$lcssa i32) + (local $$rsize$1$i i32) + (local $$rsize$3$i i32) + (local $$rsize$4$lcssa$i i32) + (local $$rsize$49$i i32) + (local $$rst$0$i i32) + (local $$rst$1$i i32) + (local $$sflags193$i i32) + (local $$sflags235$i i32) + (local $$shl i32) + (local $$shl$i i32) + (local $$shl$i$144 i32) + (local $$shl$i$19$i i32) + (local $$shl$i$47$i i32) + (local $$shl$i$i i32) + (local $$shl102 i32) + (local $$shl105 i32) + (local $$shl116$i$i i32) + (local $$shl12 i32) + (local $$shl127$i$i i32) + (local $$shl131$i$i i32) + (local $$shl15$i i32) + (local $$shl18$i i32) + (local $$shl192$i i32) + (local $$shl195$i i32) + (local $$shl198$i i32) + (local $$shl22 i32) + (local $$shl221$i$i i32) + (local $$shl226$i$i i32) + (local $$shl265$i$i i32) + (local $$shl270$i$i i32) + (local $$shl276$i$i i32) + (local $$shl279$i$i i32) + (local $$shl288$i i32) + (local $$shl291$i i32) + (local $$shl294$i$i i32) + (local $$shl31$i i32) + (local $$shl316$i$i i32) + (local $$shl326$i$i i32) + (local $$shl333$i i32) + (local $$shl338$i i32) + (local $$shl344$i i32) + (local $$shl347$i i32) + (local $$shl35 i32) + (local $$shl362$i i32) + (local $$shl37 i32) + (local $$shl384$i i32) + (local $$shl39$i$i i32) + (local $$shl395$i i32) + (local $$shl48$i$i i32) + (local $$shl52$i i32) + (local $$shl60$i i32) + (local $$shl65 i32) + (local $$shl70$i$i i32) + (local $$shl72 i32) + (local $$shl75$i$i i32) + (local $$shl81$i$i i32) + (local $$shl84$i$i i32) + (local $$shl9$i i32) + (local $$shl90 i32) + (local $$shl95$i$i i32) + (local $$shr i32) + (local $$shr$i i32) + (local $$shr$i$139 i32) + (local $$shr$i$45$i i32) + (local $$shr$i$i i32) + (local $$shr101 i32) + (local $$shr11$i i32) + (local $$shr11$i$147 i32) + (local $$shr110$i$i i32) + (local $$shr12$i i32) + (local $$shr123$i$i i32) + (local $$shr15$i i32) + (local $$shr16$i i32) + (local $$shr16$i$148 i32) + (local $$shr19$i i32) + (local $$shr194$i i32) + (local $$shr20$i i32) + (local $$shr214$i$i i32) + (local $$shr253$i$i i32) + (local $$shr263$i$i i32) + (local $$shr267$i$i i32) + (local $$shr27$i i32) + (local $$shr272$i$i i32) + (local $$shr277$i$i i32) + (local $$shr281$i$i i32) + (local $$shr283$i i32) + (local $$shr3 i32) + (local $$shr310$i$i i32) + (local $$shr318$i i32) + (local $$shr322$i$i i32) + (local $$shr330$i i32) + (local $$shr335$i i32) + (local $$shr340$i i32) + (local $$shr345$i i32) + (local $$shr349$i i32) + (local $$shr378$i i32) + (local $$shr391$i i32) + (local $$shr4$i i32) + (local $$shr41$i i32) + (local $$shr45 i32) + (local $$shr47 i32) + (local $$shr48 i32) + (local $$shr5$i i32) + (local $$shr5$i$142 i32) + (local $$shr51 i32) + (local $$shr52 i32) + (local $$shr55 i32) + (local $$shr56 i32) + (local $$shr58$i$i i32) + (local $$shr59 i32) + (local $$shr60 i32) + (local $$shr63 i32) + (local $$shr68$i$i i32) + (local $$shr7$i i32) + (local $$shr7$i$145 i32) + (local $$shr72$i i32) + (local $$shr72$i$i i32) + (local $$shr75$i i32) + (local $$shr76$i i32) + (local $$shr77$i$i i32) + (local $$shr79$i i32) + (local $$shr8$i i32) + (local $$shr80$i i32) + (local $$shr82$i$i i32) + (local $$shr83$i i32) + (local $$shr84$i i32) + (local $$shr86$i$i i32) + (local $$shr87$i i32) + (local $$shr88$i i32) + (local $$shr91$i i32) + (local $$size$i$i i32) + (local $$size$i$i$i i32) + (local $$size$i$i$lcssa i32) + (local $$size188$i i32) + (local $$size188$i$lcssa i32) + (local $$size245$i i32) + (local $$sizebits$0$i i32) + (local $$sizebits$0$shl52$i i32) + (local $$sp$0$i$i i32) + (local $$sp$0$i$i$i i32) + (local $$sp$0108$i i32) + (local $$sp$0108$i$lcssa i32) + (local $$sp$1107$i i32) + (local $$sp$1107$i$lcssa i32) + (local $$ssize$0$i i32) + (local $$ssize$2$ph$i i32) + (local $$ssize$5$i i32) + (local $$sub i32) + (local $$sub$i i32) + (local $$sub$i$138 i32) + (local $$sub$i$181 i32) + (local $$sub$i$i i32) + (local $$sub$ptr$lhs$cast$i i32) + (local $$sub$ptr$lhs$cast$i$39$i i32) + (local $$sub$ptr$lhs$cast$i$i i32) + (local $$sub$ptr$rhs$cast$i i32) + (local $$sub$ptr$rhs$cast$i$40$i i32) + (local $$sub$ptr$rhs$cast$i$i i32) + (local $$sub$ptr$sub$i i32) + (local $$sub$ptr$sub$i$41$i i32) + (local $$sub$ptr$sub$i$i i32) + (local $$sub10$i i32) + (local $$sub101$i i32) + (local $$sub101$rsize$4$i i32) + (local $$sub112$i i32) + (local $$sub113$i$i i32) + (local $$sub118$i i32) + (local $$sub14$i i32) + (local $$sub16$i$i i32) + (local $$sub160 i32) + (local $$sub172$i i32) + (local $$sub18$i$i i32) + (local $$sub190 i32) + (local $$sub2$i i32) + (local $$sub22$i i32) + (local $$sub260$i i32) + (local $$sub262$i$i i32) + (local $$sub266$i$i i32) + (local $$sub271$i$i i32) + (local $$sub275$i$i i32) + (local $$sub30$i i32) + (local $$sub31$i i32) + (local $$sub31$rsize$0$i i32) + (local $$sub313$i$i i32) + (local $$sub329$i i32) + (local $$sub33$i i32) + (local $$sub334$i i32) + (local $$sub339$i i32) + (local $$sub343$i i32) + (local $$sub381$i i32) + (local $$sub4$i i32) + (local $$sub41$i i32) + (local $$sub42 i32) + (local $$sub44 i32) + (local $$sub5$i$27$i i32) + (local $$sub5$i$i i32) + (local $$sub5$i$i$i i32) + (local $$sub50$i i32) + (local $$sub6$i i32) + (local $$sub63$i i32) + (local $$sub67$i i32) + (local $$sub67$i$i i32) + (local $$sub70$i i32) + (local $$sub71$i$i i32) + (local $$sub76$i$i i32) + (local $$sub80$i$i i32) + (local $$sub91 i32) + (local $$sub99$i i32) + (local $$t$0$i i32) + (local $$t$0$i$151 i32) + (local $$t$2$i i32) + (local $$t$4$ph$i i32) + (local $$t$4$v$4$i i32) + (local $$t$48$i i32) + (local $$tbase$796$i i32) + (local $$tobool$i$i i32) + (local $$tobool107 i32) + (local $$tobool195$i i32) + (local $$tobool200$i i32) + (local $$tobool228$i$i i32) + (local $$tobool237$i i32) + (local $$tobool293$i i32) + (local $$tobool296$i$i i32) + (local $$tobool30$i i32) + (local $$tobool364$i i32) + (local $$tobool97$i$i i32) + (local $$tsize$795$i i32) + (local $$v$0$i i32) + (local $$v$0$i$153 i32) + (local $$v$0$i$lcssa i32) + (local $$v$1$i i32) + (local $$v$3$i i32) + (local $$v$4$lcssa$i i32) + (local $$v$410$i i32) + (local $$xor$i$i i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$cmp + (i32.lt_u + (get_local $$bytes) + (i32.const 245) + ) + ) + (block $do-once + (if + (get_local $$cmp) + (block + (set_local $$cmp1 + (i32.lt_u + (get_local $$bytes) + (i32.const 11) + ) + ) + (set_local $$add2 + (i32.add + (get_local $$bytes) + (i32.const 11) + ) + ) + (set_local $$and + (i32.and + (get_local $$add2) + (i32.const -8) + ) + ) + (set_local $$cond + (if (result i32) + (get_local $$cmp1) + (i32.const 16) + (get_local $$and) + ) + ) + (set_local $$shr + (i32.shr_u + (get_local $$cond) + (i32.const 3) + ) + ) + (set_local $$0 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shr3 + (i32.shr_u + (get_local $$0) + (get_local $$shr) + ) + ) + (set_local $$and4 + (i32.and + (get_local $$shr3) + (i32.const 3) + ) + ) + (set_local $$cmp5 + (i32.eq + (get_local $$and4) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp5) + ) + (block + (set_local $$neg + (i32.and + (get_local $$shr3) + (i32.const 1) + ) + ) + (set_local $$and7 + (i32.xor + (get_local $$neg) + (i32.const 1) + ) + ) + (set_local $$add8 + (i32.add + (get_local $$and7) + (get_local $$shr) + ) + ) + (set_local $$shl + (i32.shl + (get_local $$add8) + (i32.const 1) + ) + ) + (set_local $$arrayidx + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl) + (i32.const 2) + ) + ) + ) + (set_local $$1 + (i32.add + (get_local $$arrayidx) + (i32.const 8) + ) + ) + (set_local $$2 + (i32.load + (get_local $$1) + ) + ) + (set_local $$fd9 + (i32.add + (get_local $$2) + (i32.const 8) + ) + ) + (set_local $$3 + (i32.load + (get_local $$fd9) + ) + ) + (set_local $$cmp10 + (i32.eq + (get_local $$arrayidx) + (get_local $$3) + ) + ) + (block $do-once0 + (if + (get_local $$cmp10) + (block + (set_local $$shl12 + (i32.shl + (i32.const 1) + (get_local $$add8) + ) + ) + (set_local $$neg13 + (i32.xor + (get_local $$shl12) + (i32.const -1) + ) + ) + (set_local $$and14 + (i32.and + (get_local $$0) + (get_local $$neg13) + ) + ) + (i32.store + (i32.const 176) + (get_local $$and14) + ) + ) + (block + (set_local $$4 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp15 + (i32.lt_u + (get_local $$3) + (get_local $$4) + ) + ) + (if + (get_local $$cmp15) + (call $_abort) + ) + (set_local $$bk + (i32.add + (get_local $$3) + (i32.const 12) + ) + ) + (set_local $$5 + (i32.load + (get_local $$bk) + ) + ) + (set_local $$cmp16 + (i32.eq + (get_local $$5) + (get_local $$2) + ) + ) + (if + (get_local $$cmp16) + (block + (i32.store + (get_local $$bk) + (get_local $$arrayidx) + ) + (i32.store + (get_local $$1) + (get_local $$3) + ) + (br $do-once0) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$shl22 + (i32.shl + (get_local $$add8) + (i32.const 3) + ) + ) + (set_local $$or23 + (i32.or + (get_local $$shl22) + (i32.const 3) + ) + ) + (set_local $$head + (i32.add + (get_local $$2) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head) + (get_local $$or23) + ) + (set_local $$add$ptr + (i32.add + (get_local $$2) + (get_local $$shl22) + ) + ) + (set_local $$head25 + (i32.add + (get_local $$add$ptr) + (i32.const 4) + ) + ) + (set_local $$6 + (i32.load + (get_local $$head25) + ) + ) + (set_local $$or26 + (i32.or + (get_local $$6) + (i32.const 1) + ) + ) + (i32.store + (get_local $$head25) + (get_local $$or26) + ) + (set_local $$retval$0 + (get_local $$fd9) + ) + (return + (get_local $$retval$0) + ) + ) + ) + (set_local $$7 + (i32.load + (i32.const 184) + ) + ) + (set_local $$cmp29 + (i32.gt_u + (get_local $$cond) + (get_local $$7) + ) + ) + (if + (get_local $$cmp29) + (block + (set_local $$cmp31 + (i32.eq + (get_local $$shr3) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp31) + ) + (block + (set_local $$shl35 + (i32.shl + (get_local $$shr3) + (get_local $$shr) + ) + ) + (set_local $$shl37 + (i32.shl + (i32.const 2) + (get_local $$shr) + ) + ) + (set_local $$sub + (i32.sub + (i32.const 0) + (get_local $$shl37) + ) + ) + (set_local $$or40 + (i32.or + (get_local $$shl37) + (get_local $$sub) + ) + ) + (set_local $$and41 + (i32.and + (get_local $$shl35) + (get_local $$or40) + ) + ) + (set_local $$sub42 + (i32.sub + (i32.const 0) + (get_local $$and41) + ) + ) + (set_local $$and43 + (i32.and + (get_local $$and41) + (get_local $$sub42) + ) + ) + (set_local $$sub44 + (i32.add + (get_local $$and43) + (i32.const -1) + ) + ) + (set_local $$shr45 + (i32.shr_u + (get_local $$sub44) + (i32.const 12) + ) + ) + (set_local $$and46 + (i32.and + (get_local $$shr45) + (i32.const 16) + ) + ) + (set_local $$shr47 + (i32.shr_u + (get_local $$sub44) + (get_local $$and46) + ) + ) + (set_local $$shr48 + (i32.shr_u + (get_local $$shr47) + (i32.const 5) + ) + ) + (set_local $$and49 + (i32.and + (get_local $$shr48) + (i32.const 8) + ) + ) + (set_local $$add50 + (i32.or + (get_local $$and49) + (get_local $$and46) + ) + ) + (set_local $$shr51 + (i32.shr_u + (get_local $$shr47) + (get_local $$and49) + ) + ) + (set_local $$shr52 + (i32.shr_u + (get_local $$shr51) + (i32.const 2) + ) + ) + (set_local $$and53 + (i32.and + (get_local $$shr52) + (i32.const 4) + ) + ) + (set_local $$add54 + (i32.or + (get_local $$add50) + (get_local $$and53) + ) + ) + (set_local $$shr55 + (i32.shr_u + (get_local $$shr51) + (get_local $$and53) + ) + ) + (set_local $$shr56 + (i32.shr_u + (get_local $$shr55) + (i32.const 1) + ) + ) + (set_local $$and57 + (i32.and + (get_local $$shr56) + (i32.const 2) + ) + ) + (set_local $$add58 + (i32.or + (get_local $$add54) + (get_local $$and57) + ) + ) + (set_local $$shr59 + (i32.shr_u + (get_local $$shr55) + (get_local $$and57) + ) + ) + (set_local $$shr60 + (i32.shr_u + (get_local $$shr59) + (i32.const 1) + ) + ) + (set_local $$and61 + (i32.and + (get_local $$shr60) + (i32.const 1) + ) + ) + (set_local $$add62 + (i32.or + (get_local $$add58) + (get_local $$and61) + ) + ) + (set_local $$shr63 + (i32.shr_u + (get_local $$shr59) + (get_local $$and61) + ) + ) + (set_local $$add64 + (i32.add + (get_local $$add62) + (get_local $$shr63) + ) + ) + (set_local $$shl65 + (i32.shl + (get_local $$add64) + (i32.const 1) + ) + ) + (set_local $$arrayidx66 + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl65) + (i32.const 2) + ) + ) + ) + (set_local $$8 + (i32.add + (get_local $$arrayidx66) + (i32.const 8) + ) + ) + (set_local $$9 + (i32.load + (get_local $$8) + ) + ) + (set_local $$fd69 + (i32.add + (get_local $$9) + (i32.const 8) + ) + ) + (set_local $$10 + (i32.load + (get_local $$fd69) + ) + ) + (set_local $$cmp70 + (i32.eq + (get_local $$arrayidx66) + (get_local $$10) + ) + ) + (block $do-once2 + (if + (get_local $$cmp70) + (block + (set_local $$shl72 + (i32.shl + (i32.const 1) + (get_local $$add64) + ) + ) + (set_local $$neg73 + (i32.xor + (get_local $$shl72) + (i32.const -1) + ) + ) + (set_local $$and74 + (i32.and + (get_local $$0) + (get_local $$neg73) + ) + ) + (i32.store + (i32.const 176) + (get_local $$and74) + ) + (set_local $$13 + (get_local $$7) + ) + ) + (block + (set_local $$11 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp76 + (i32.lt_u + (get_local $$10) + (get_local $$11) + ) + ) + (if + (get_local $$cmp76) + (call $_abort) + ) + (set_local $$bk78 + (i32.add + (get_local $$10) + (i32.const 12) + ) + ) + (set_local $$12 + (i32.load + (get_local $$bk78) + ) + ) + (set_local $$cmp79 + (i32.eq + (get_local $$12) + (get_local $$9) + ) + ) + (if + (get_local $$cmp79) + (block + (i32.store + (get_local $$bk78) + (get_local $$arrayidx66) + ) + (i32.store + (get_local $$8) + (get_local $$10) + ) + (set_local $$$pre + (i32.load + (i32.const 184) + ) + ) + (set_local $$13 + (get_local $$$pre) + ) + (br $do-once2) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$shl90 + (i32.shl + (get_local $$add64) + (i32.const 3) + ) + ) + (set_local $$sub91 + (i32.sub + (get_local $$shl90) + (get_local $$cond) + ) + ) + (set_local $$or93 + (i32.or + (get_local $$cond) + (i32.const 3) + ) + ) + (set_local $$head94 + (i32.add + (get_local $$9) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head94) + (get_local $$or93) + ) + (set_local $$add$ptr95 + (i32.add + (get_local $$9) + (get_local $$cond) + ) + ) + (set_local $$or96 + (i32.or + (get_local $$sub91) + (i32.const 1) + ) + ) + (set_local $$head97 + (i32.add + (get_local $$add$ptr95) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head97) + (get_local $$or96) + ) + (set_local $$add$ptr98 + (i32.add + (get_local $$add$ptr95) + (get_local $$sub91) + ) + ) + (i32.store + (get_local $$add$ptr98) + (get_local $$sub91) + ) + (set_local $$cmp99 + (i32.eq + (get_local $$13) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp99) + ) + (block + (set_local $$14 + (i32.load + (i32.const 196) + ) + ) + (set_local $$shr101 + (i32.shr_u + (get_local $$13) + (i32.const 3) + ) + ) + (set_local $$shl102 + (i32.shl + (get_local $$shr101) + (i32.const 1) + ) + ) + (set_local $$arrayidx103 + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl102) + (i32.const 2) + ) + ) + ) + (set_local $$15 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shl105 + (i32.shl + (i32.const 1) + (get_local $$shr101) + ) + ) + (set_local $$and106 + (i32.and + (get_local $$15) + (get_local $$shl105) + ) + ) + (set_local $$tobool107 + (i32.eq + (get_local $$and106) + (i32.const 0) + ) + ) + (if + (get_local $$tobool107) + (block + (set_local $$or110 + (i32.or + (get_local $$15) + (get_local $$shl105) + ) + ) + (i32.store + (i32.const 176) + (get_local $$or110) + ) + (set_local $$$pre241 + (i32.add + (get_local $$arrayidx103) + (i32.const 8) + ) + ) + (set_local $$$pre$phiZ2D + (get_local $$$pre241) + ) + (set_local $$F104$0 + (get_local $$arrayidx103) + ) + ) + (block + (set_local $$16 + (i32.add + (get_local $$arrayidx103) + (i32.const 8) + ) + ) + (set_local $$17 + (i32.load + (get_local $$16) + ) + ) + (set_local $$18 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp113 + (i32.lt_u + (get_local $$17) + (get_local $$18) + ) + ) + (if + (get_local $$cmp113) + (call $_abort) + (block + (set_local $$$pre$phiZ2D + (get_local $$16) + ) + (set_local $$F104$0 + (get_local $$17) + ) + ) + ) + ) + ) + (i32.store + (get_local $$$pre$phiZ2D) + (get_local $$14) + ) + (set_local $$bk122 + (i32.add + (get_local $$F104$0) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk122) + (get_local $$14) + ) + (set_local $$fd123 + (i32.add + (get_local $$14) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd123) + (get_local $$F104$0) + ) + (set_local $$bk124 + (i32.add + (get_local $$14) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk124) + (get_local $$arrayidx103) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $$sub91) + ) + (i32.store + (i32.const 196) + (get_local $$add$ptr95) + ) + (set_local $$retval$0 + (get_local $$fd69) + ) + (return + (get_local $$retval$0) + ) + ) + ) + (set_local $$19 + (i32.load + (i32.const 180) + ) + ) + (set_local $$cmp128 + (i32.eq + (get_local $$19) + (i32.const 0) + ) + ) + (if + (get_local $$cmp128) + (set_local $$nb$0 + (get_local $$cond) + ) + (block + (set_local $$sub$i + (i32.sub + (i32.const 0) + (get_local $$19) + ) + ) + (set_local $$and$i + (i32.and + (get_local $$19) + (get_local $$sub$i) + ) + ) + (set_local $$sub2$i + (i32.add + (get_local $$and$i) + (i32.const -1) + ) + ) + (set_local $$shr$i + (i32.shr_u + (get_local $$sub2$i) + (i32.const 12) + ) + ) + (set_local $$and3$i + (i32.and + (get_local $$shr$i) + (i32.const 16) + ) + ) + (set_local $$shr4$i + (i32.shr_u + (get_local $$sub2$i) + (get_local $$and3$i) + ) + ) + (set_local $$shr5$i + (i32.shr_u + (get_local $$shr4$i) + (i32.const 5) + ) + ) + (set_local $$and6$i + (i32.and + (get_local $$shr5$i) + (i32.const 8) + ) + ) + (set_local $$add$i + (i32.or + (get_local $$and6$i) + (get_local $$and3$i) + ) + ) + (set_local $$shr7$i + (i32.shr_u + (get_local $$shr4$i) + (get_local $$and6$i) + ) + ) + (set_local $$shr8$i + (i32.shr_u + (get_local $$shr7$i) + (i32.const 2) + ) + ) + (set_local $$and9$i + (i32.and + (get_local $$shr8$i) + (i32.const 4) + ) + ) + (set_local $$add10$i + (i32.or + (get_local $$add$i) + (get_local $$and9$i) + ) + ) + (set_local $$shr11$i + (i32.shr_u + (get_local $$shr7$i) + (get_local $$and9$i) + ) + ) + (set_local $$shr12$i + (i32.shr_u + (get_local $$shr11$i) + (i32.const 1) + ) + ) + (set_local $$and13$i + (i32.and + (get_local $$shr12$i) + (i32.const 2) + ) + ) + (set_local $$add14$i + (i32.or + (get_local $$add10$i) + (get_local $$and13$i) + ) + ) + (set_local $$shr15$i + (i32.shr_u + (get_local $$shr11$i) + (get_local $$and13$i) + ) + ) + (set_local $$shr16$i + (i32.shr_u + (get_local $$shr15$i) + (i32.const 1) + ) + ) + (set_local $$and17$i + (i32.and + (get_local $$shr16$i) + (i32.const 1) + ) + ) + (set_local $$add18$i + (i32.or + (get_local $$add14$i) + (get_local $$and17$i) + ) + ) + (set_local $$shr19$i + (i32.shr_u + (get_local $$shr15$i) + (get_local $$and17$i) + ) + ) + (set_local $$add20$i + (i32.add + (get_local $$add18$i) + (get_local $$shr19$i) + ) + ) + (set_local $$arrayidx$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$add20$i) + (i32.const 2) + ) + ) + ) + (set_local $$20 + (i32.load + (get_local $$arrayidx$i) + ) + ) + (set_local $$head$i + (i32.add + (get_local $$20) + (i32.const 4) + ) + ) + (set_local $$21 + (i32.load + (get_local $$head$i) + ) + ) + (set_local $$and21$i + (i32.and + (get_local $$21) + (i32.const -8) + ) + ) + (set_local $$sub22$i + (i32.sub + (get_local $$and21$i) + (get_local $$cond) + ) + ) + (set_local $$rsize$0$i + (get_local $$sub22$i) + ) + (set_local $$t$0$i + (get_local $$20) + ) + (set_local $$v$0$i + (get_local $$20) + ) + (loop $while-in + (block $while-out + (set_local $$arrayidx23$i + (i32.add + (get_local $$t$0$i) + (i32.const 16) + ) + ) + (set_local $$22 + (i32.load + (get_local $$arrayidx23$i) + ) + ) + (set_local $$cmp$i + (i32.eq + (get_local $$22) + (i32.const 0) + ) + ) + (if + (get_local $$cmp$i) + (block + (set_local $$arrayidx27$i + (i32.add + (get_local $$t$0$i) + (i32.const 20) + ) + ) + (set_local $$23 + (i32.load + (get_local $$arrayidx27$i) + ) + ) + (set_local $$cmp28$i + (i32.eq + (get_local $$23) + (i32.const 0) + ) + ) + (if + (get_local $$cmp28$i) + (block + (set_local $$rsize$0$i$lcssa + (get_local $$rsize$0$i) + ) + (set_local $$v$0$i$lcssa + (get_local $$v$0$i) + ) + (br $while-out) + ) + (set_local $$cond4$i + (get_local $$23) + ) + ) + ) + (set_local $$cond4$i + (get_local $$22) + ) + ) + (set_local $$head29$i + (i32.add + (get_local $$cond4$i) + (i32.const 4) + ) + ) + (set_local $$24 + (i32.load + (get_local $$head29$i) + ) + ) + (set_local $$and30$i + (i32.and + (get_local $$24) + (i32.const -8) + ) + ) + (set_local $$sub31$i + (i32.sub + (get_local $$and30$i) + (get_local $$cond) + ) + ) + (set_local $$cmp32$i + (i32.lt_u + (get_local $$sub31$i) + (get_local $$rsize$0$i) + ) + ) + (set_local $$sub31$rsize$0$i + (if (result i32) + (get_local $$cmp32$i) + (get_local $$sub31$i) + (get_local $$rsize$0$i) + ) + ) + (set_local $$cond$v$0$i + (if (result i32) + (get_local $$cmp32$i) + (get_local $$cond4$i) + (get_local $$v$0$i) + ) + ) + (set_local $$rsize$0$i + (get_local $$sub31$rsize$0$i) + ) + (set_local $$t$0$i + (get_local $$cond4$i) + ) + (set_local $$v$0$i + (get_local $$cond$v$0$i) + ) + (br $while-in) + ) + ) + (set_local $$25 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp33$i + (i32.lt_u + (get_local $$v$0$i$lcssa) + (get_local $$25) + ) + ) + (if + (get_local $$cmp33$i) + (call $_abort) + ) + (set_local $$add$ptr$i + (i32.add + (get_local $$v$0$i$lcssa) + (get_local $$cond) + ) + ) + (set_local $$cmp35$i + (i32.lt_u + (get_local $$v$0$i$lcssa) + (get_local $$add$ptr$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp35$i) + ) + (call $_abort) + ) + (set_local $$parent$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 24) + ) + ) + (set_local $$26 + (i32.load + (get_local $$parent$i) + ) + ) + (set_local $$bk$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 12) + ) + ) + (set_local $$27 + (i32.load + (get_local $$bk$i) + ) + ) + (set_local $$cmp40$i + (i32.eq + (get_local $$27) + (get_local $$v$0$i$lcssa) + ) + ) + (block $do-once4 + (if + (get_local $$cmp40$i) + (block + (set_local $$arrayidx61$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 20) + ) + ) + (set_local $$31 + (i32.load + (get_local $$arrayidx61$i) + ) + ) + (set_local $$cmp62$i + (i32.eq + (get_local $$31) + (i32.const 0) + ) + ) + (if + (get_local $$cmp62$i) + (block + (set_local $$arrayidx65$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 16) + ) + ) + (set_local $$32 + (i32.load + (get_local $$arrayidx65$i) + ) + ) + (set_local $$cmp66$i + (i32.eq + (get_local $$32) + (i32.const 0) + ) + ) + (if + (get_local $$cmp66$i) + (block + (set_local $$R$3$i + (i32.const 0) + ) + (br $do-once4) + ) + (block + (set_local $$R$1$i + (get_local $$32) + ) + (set_local $$RP$1$i + (get_local $$arrayidx65$i) + ) + ) + ) + ) + (block + (set_local $$R$1$i + (get_local $$31) + ) + (set_local $$RP$1$i + (get_local $$arrayidx61$i) + ) + ) + ) + (loop $while-in7 + (block $while-out6 + (set_local $$arrayidx71$i + (i32.add + (get_local $$R$1$i) + (i32.const 20) + ) + ) + (set_local $$33 + (i32.load + (get_local $$arrayidx71$i) + ) + ) + (set_local $$cmp72$i + (i32.eq + (get_local $$33) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp72$i) + ) + (block + (set_local $$R$1$i + (get_local $$33) + ) + (set_local $$RP$1$i + (get_local $$arrayidx71$i) + ) + (br $while-in7) + ) + ) + (set_local $$arrayidx75$i + (i32.add + (get_local $$R$1$i) + (i32.const 16) + ) + ) + (set_local $$34 + (i32.load + (get_local $$arrayidx75$i) + ) + ) + (set_local $$cmp76$i + (i32.eq + (get_local $$34) + (i32.const 0) + ) + ) + (if + (get_local $$cmp76$i) + (block + (set_local $$R$1$i$lcssa + (get_local $$R$1$i) + ) + (set_local $$RP$1$i$lcssa + (get_local $$RP$1$i) + ) + (br $while-out6) + ) + (block + (set_local $$R$1$i + (get_local $$34) + ) + (set_local $$RP$1$i + (get_local $$arrayidx75$i) + ) + ) + ) + (br $while-in7) + ) + ) + (set_local $$cmp81$i + (i32.lt_u + (get_local $$RP$1$i$lcssa) + (get_local $$25) + ) + ) + (if + (get_local $$cmp81$i) + (call $_abort) + (block + (i32.store + (get_local $$RP$1$i$lcssa) + (i32.const 0) + ) + (set_local $$R$3$i + (get_local $$R$1$i$lcssa) + ) + (br $do-once4) + ) + ) + ) + (block + (set_local $$fd$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 8) + ) + ) + (set_local $$28 + (i32.load + (get_local $$fd$i) + ) + ) + (set_local $$cmp45$i + (i32.lt_u + (get_local $$28) + (get_local $$25) + ) + ) + (if + (get_local $$cmp45$i) + (call $_abort) + ) + (set_local $$bk47$i + (i32.add + (get_local $$28) + (i32.const 12) + ) + ) + (set_local $$29 + (i32.load + (get_local $$bk47$i) + ) + ) + (set_local $$cmp48$i + (i32.eq + (get_local $$29) + (get_local $$v$0$i$lcssa) + ) + ) + (if + (i32.eqz + (get_local $$cmp48$i) + ) + (call $_abort) + ) + (set_local $$fd50$i + (i32.add + (get_local $$27) + (i32.const 8) + ) + ) + (set_local $$30 + (i32.load + (get_local $$fd50$i) + ) + ) + (set_local $$cmp51$i + (i32.eq + (get_local $$30) + (get_local $$v$0$i$lcssa) + ) + ) + (if + (get_local $$cmp51$i) + (block + (i32.store + (get_local $$bk47$i) + (get_local $$27) + ) + (i32.store + (get_local $$fd50$i) + (get_local $$28) + ) + (set_local $$R$3$i + (get_local $$27) + ) + (br $do-once4) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$cmp90$i + (i32.eq + (get_local $$26) + (i32.const 0) + ) + ) + (block $do-once8 + (if + (i32.eqz + (get_local $$cmp90$i) + ) + (block + (set_local $$index$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 28) + ) + ) + (set_local $$35 + (i32.load + (get_local $$index$i) + ) + ) + (set_local $$arrayidx94$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$35) + (i32.const 2) + ) + ) + ) + (set_local $$36 + (i32.load + (get_local $$arrayidx94$i) + ) + ) + (set_local $$cmp95$i + (i32.eq + (get_local $$v$0$i$lcssa) + (get_local $$36) + ) + ) + (if + (get_local $$cmp95$i) + (block + (i32.store + (get_local $$arrayidx94$i) + (get_local $$R$3$i) + ) + (set_local $$cond2$i + (i32.eq + (get_local $$R$3$i) + (i32.const 0) + ) + ) + (if + (get_local $$cond2$i) + (block + (set_local $$shl$i + (i32.shl + (i32.const 1) + (get_local $$35) + ) + ) + (set_local $$neg$i + (i32.xor + (get_local $$shl$i) + (i32.const -1) + ) + ) + (set_local $$37 + (i32.load + (i32.const 180) + ) + ) + (set_local $$and103$i + (i32.and + (get_local $$37) + (get_local $$neg$i) + ) + ) + (i32.store + (i32.const 180) + (get_local $$and103$i) + ) + (br $do-once8) + ) + ) + ) + (block + (set_local $$38 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp107$i + (i32.lt_u + (get_local $$26) + (get_local $$38) + ) + ) + (if + (get_local $$cmp107$i) + (call $_abort) + ) + (set_local $$arrayidx113$i + (i32.add + (get_local $$26) + (i32.const 16) + ) + ) + (set_local $$39 + (i32.load + (get_local $$arrayidx113$i) + ) + ) + (set_local $$cmp114$i + (i32.eq + (get_local $$39) + (get_local $$v$0$i$lcssa) + ) + ) + (if + (get_local $$cmp114$i) + (i32.store + (get_local $$arrayidx113$i) + (get_local $$R$3$i) + ) + (block + (set_local $$arrayidx121$i + (i32.add + (get_local $$26) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx121$i) + (get_local $$R$3$i) + ) + ) + ) + (set_local $$cmp126$i + (i32.eq + (get_local $$R$3$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp126$i) + (br $do-once8) + ) + ) + ) + (set_local $$40 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp130$i + (i32.lt_u + (get_local $$R$3$i) + (get_local $$40) + ) + ) + (if + (get_local $$cmp130$i) + (call $_abort) + ) + (set_local $$parent135$i + (i32.add + (get_local $$R$3$i) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent135$i) + (get_local $$26) + ) + (set_local $$arrayidx137$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 16) + ) + ) + (set_local $$41 + (i32.load + (get_local $$arrayidx137$i) + ) + ) + (set_local $$cmp138$i + (i32.eq + (get_local $$41) + (i32.const 0) + ) + ) + (block $do-once10 + (if + (i32.eqz + (get_local $$cmp138$i) + ) + (block + (set_local $$cmp142$i + (i32.lt_u + (get_local $$41) + (get_local $$40) + ) + ) + (if + (get_local $$cmp142$i) + (call $_abort) + (block + (set_local $$arrayidx148$i + (i32.add + (get_local $$R$3$i) + (i32.const 16) + ) + ) + (i32.store + (get_local $$arrayidx148$i) + (get_local $$41) + ) + (set_local $$parent149$i + (i32.add + (get_local $$41) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent149$i) + (get_local $$R$3$i) + ) + (br $do-once10) + ) + ) + ) + ) + ) + (set_local $$arrayidx154$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 20) + ) + ) + (set_local $$42 + (i32.load + (get_local $$arrayidx154$i) + ) + ) + (set_local $$cmp155$i + (i32.eq + (get_local $$42) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp155$i) + ) + (block + (set_local $$43 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp159$i + (i32.lt_u + (get_local $$42) + (get_local $$43) + ) + ) + (if + (get_local $$cmp159$i) + (call $_abort) + (block + (set_local $$arrayidx165$i + (i32.add + (get_local $$R$3$i) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx165$i) + (get_local $$42) + ) + (set_local $$parent166$i + (i32.add + (get_local $$42) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent166$i) + (get_local $$R$3$i) + ) + (br $do-once8) + ) + ) + ) + ) + ) + ) + ) + (set_local $$cmp174$i + (i32.lt_u + (get_local $$rsize$0$i$lcssa) + (i32.const 16) + ) + ) + (if + (get_local $$cmp174$i) + (block + (set_local $$add177$i + (i32.add + (get_local $$rsize$0$i$lcssa) + (get_local $$cond) + ) + ) + (set_local $$or178$i + (i32.or + (get_local $$add177$i) + (i32.const 3) + ) + ) + (set_local $$head179$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head179$i) + (get_local $$or178$i) + ) + (set_local $$add$ptr181$i + (i32.add + (get_local $$v$0$i$lcssa) + (get_local $$add177$i) + ) + ) + (set_local $$head182$i + (i32.add + (get_local $$add$ptr181$i) + (i32.const 4) + ) + ) + (set_local $$44 + (i32.load + (get_local $$head182$i) + ) + ) + (set_local $$or183$i + (i32.or + (get_local $$44) + (i32.const 1) + ) + ) + (i32.store + (get_local $$head182$i) + (get_local $$or183$i) + ) + ) + (block + (set_local $$or186$i + (i32.or + (get_local $$cond) + (i32.const 3) + ) + ) + (set_local $$head187$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head187$i) + (get_local $$or186$i) + ) + (set_local $$or188$i + (i32.or + (get_local $$rsize$0$i$lcssa) + (i32.const 1) + ) + ) + (set_local $$head189$i + (i32.add + (get_local $$add$ptr$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head189$i) + (get_local $$or188$i) + ) + (set_local $$add$ptr190$i + (i32.add + (get_local $$add$ptr$i) + (get_local $$rsize$0$i$lcssa) + ) + ) + (i32.store + (get_local $$add$ptr190$i) + (get_local $$rsize$0$i$lcssa) + ) + (set_local $$45 + (i32.load + (i32.const 184) + ) + ) + (set_local $$cmp191$i + (i32.eq + (get_local $$45) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp191$i) + ) + (block + (set_local $$46 + (i32.load + (i32.const 196) + ) + ) + (set_local $$shr194$i + (i32.shr_u + (get_local $$45) + (i32.const 3) + ) + ) + (set_local $$shl195$i + (i32.shl + (get_local $$shr194$i) + (i32.const 1) + ) + ) + (set_local $$arrayidx196$i + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl195$i) + (i32.const 2) + ) + ) + ) + (set_local $$47 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shl198$i + (i32.shl + (i32.const 1) + (get_local $$shr194$i) + ) + ) + (set_local $$and199$i + (i32.and + (get_local $$47) + (get_local $$shl198$i) + ) + ) + (set_local $$tobool200$i + (i32.eq + (get_local $$and199$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool200$i) + (block + (set_local $$or204$i + (i32.or + (get_local $$47) + (get_local $$shl198$i) + ) + ) + (i32.store + (i32.const 176) + (get_local $$or204$i) + ) + (set_local $$$pre$i + (i32.add + (get_local $$arrayidx196$i) + (i32.const 8) + ) + ) + (set_local $$$pre$phi$iZ2D + (get_local $$$pre$i) + ) + (set_local $$F197$0$i + (get_local $$arrayidx196$i) + ) + ) + (block + (set_local $$48 + (i32.add + (get_local $$arrayidx196$i) + (i32.const 8) + ) + ) + (set_local $$49 + (i32.load + (get_local $$48) + ) + ) + (set_local $$50 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp208$i + (i32.lt_u + (get_local $$49) + (get_local $$50) + ) + ) + (if + (get_local $$cmp208$i) + (call $_abort) + (block + (set_local $$$pre$phi$iZ2D + (get_local $$48) + ) + (set_local $$F197$0$i + (get_local $$49) + ) + ) + ) + ) + ) + (i32.store + (get_local $$$pre$phi$iZ2D) + (get_local $$46) + ) + (set_local $$bk218$i + (i32.add + (get_local $$F197$0$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk218$i) + (get_local $$46) + ) + (set_local $$fd219$i + (i32.add + (get_local $$46) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd219$i) + (get_local $$F197$0$i) + ) + (set_local $$bk220$i + (i32.add + (get_local $$46) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk220$i) + (get_local $$arrayidx196$i) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $$rsize$0$i$lcssa) + ) + (i32.store + (i32.const 196) + (get_local $$add$ptr$i) + ) + ) + ) + (set_local $$add$ptr225$i + (i32.add + (get_local $$v$0$i$lcssa) + (i32.const 8) + ) + ) + (set_local $$retval$0 + (get_local $$add$ptr225$i) + ) + (return + (get_local $$retval$0) + ) + ) + ) + ) + (set_local $$nb$0 + (get_local $$cond) + ) + ) + ) + (block + (set_local $$cmp139 + (i32.gt_u + (get_local $$bytes) + (i32.const -65) + ) + ) + (if + (get_local $$cmp139) + (set_local $$nb$0 + (i32.const -1) + ) + (block + (set_local $$add144 + (i32.add + (get_local $$bytes) + (i32.const 11) + ) + ) + (set_local $$and145 + (i32.and + (get_local $$add144) + (i32.const -8) + ) + ) + (set_local $$51 + (i32.load + (i32.const 180) + ) + ) + (set_local $$cmp146 + (i32.eq + (get_local $$51) + (i32.const 0) + ) + ) + (if + (get_local $$cmp146) + (set_local $$nb$0 + (get_local $$and145) + ) + (block + (set_local $$sub$i$138 + (i32.sub + (i32.const 0) + (get_local $$and145) + ) + ) + (set_local $$shr$i$139 + (i32.shr_u + (get_local $$add144) + (i32.const 8) + ) + ) + (set_local $$cmp$i$140 + (i32.eq + (get_local $$shr$i$139) + (i32.const 0) + ) + ) + (if + (get_local $$cmp$i$140) + (set_local $$idx$0$i + (i32.const 0) + ) + (block + (set_local $$cmp1$i + (i32.gt_u + (get_local $$and145) + (i32.const 16777215) + ) + ) + (if + (get_local $$cmp1$i) + (set_local $$idx$0$i + (i32.const 31) + ) + (block + (set_local $$sub4$i + (i32.add + (get_local $$shr$i$139) + (i32.const 1048320) + ) + ) + (set_local $$shr5$i$142 + (i32.shr_u + (get_local $$sub4$i) + (i32.const 16) + ) + ) + (set_local $$and$i$143 + (i32.and + (get_local $$shr5$i$142) + (i32.const 8) + ) + ) + (set_local $$shl$i$144 + (i32.shl + (get_local $$shr$i$139) + (get_local $$and$i$143) + ) + ) + (set_local $$sub6$i + (i32.add + (get_local $$shl$i$144) + (i32.const 520192) + ) + ) + (set_local $$shr7$i$145 + (i32.shr_u + (get_local $$sub6$i) + (i32.const 16) + ) + ) + (set_local $$and8$i + (i32.and + (get_local $$shr7$i$145) + (i32.const 4) + ) + ) + (set_local $$add$i$146 + (i32.or + (get_local $$and8$i) + (get_local $$and$i$143) + ) + ) + (set_local $$shl9$i + (i32.shl + (get_local $$shl$i$144) + (get_local $$and8$i) + ) + ) + (set_local $$sub10$i + (i32.add + (get_local $$shl9$i) + (i32.const 245760) + ) + ) + (set_local $$shr11$i$147 + (i32.shr_u + (get_local $$sub10$i) + (i32.const 16) + ) + ) + (set_local $$and12$i + (i32.and + (get_local $$shr11$i$147) + (i32.const 2) + ) + ) + (set_local $$add13$i + (i32.or + (get_local $$add$i$146) + (get_local $$and12$i) + ) + ) + (set_local $$sub14$i + (i32.sub + (i32.const 14) + (get_local $$add13$i) + ) + ) + (set_local $$shl15$i + (i32.shl + (get_local $$shl9$i) + (get_local $$and12$i) + ) + ) + (set_local $$shr16$i$148 + (i32.shr_u + (get_local $$shl15$i) + (i32.const 15) + ) + ) + (set_local $$add17$i + (i32.add + (get_local $$sub14$i) + (get_local $$shr16$i$148) + ) + ) + (set_local $$shl18$i + (i32.shl + (get_local $$add17$i) + (i32.const 1) + ) + ) + (set_local $$add19$i + (i32.add + (get_local $$add17$i) + (i32.const 7) + ) + ) + (set_local $$shr20$i + (i32.shr_u + (get_local $$and145) + (get_local $$add19$i) + ) + ) + (set_local $$and21$i$149 + (i32.and + (get_local $$shr20$i) + (i32.const 1) + ) + ) + (set_local $$add22$i + (i32.or + (get_local $$and21$i$149) + (get_local $$shl18$i) + ) + ) + (set_local $$idx$0$i + (get_local $$add22$i) + ) + ) + ) + ) + ) + (set_local $$arrayidx$i$150 + (i32.add + (i32.const 480) + (i32.shl + (get_local $$idx$0$i) + (i32.const 2) + ) + ) + ) + (set_local $$52 + (i32.load + (get_local $$arrayidx$i$150) + ) + ) + (set_local $$cmp24$i + (i32.eq + (get_local $$52) + (i32.const 0) + ) + ) + (block $label$break$L123 + (if + (get_local $$cmp24$i) + (block + (set_local $$rsize$3$i + (get_local $$sub$i$138) + ) + (set_local $$t$2$i + (i32.const 0) + ) + (set_local $$v$3$i + (i32.const 0) + ) + (set_local $label + (i32.const 86) + ) + ) + (block + (set_local $$cmp26$i + (i32.eq + (get_local $$idx$0$i) + (i32.const 31) + ) + ) + (set_local $$shr27$i + (i32.shr_u + (get_local $$idx$0$i) + (i32.const 1) + ) + ) + (set_local $$sub30$i + (i32.sub + (i32.const 25) + (get_local $$shr27$i) + ) + ) + (set_local $$cond$i + (if (result i32) + (get_local $$cmp26$i) + (i32.const 0) + (get_local $$sub30$i) + ) + ) + (set_local $$shl31$i + (i32.shl + (get_local $$and145) + (get_local $$cond$i) + ) + ) + (set_local $$rsize$0$i$152 + (get_local $$sub$i$138) + ) + (set_local $$rst$0$i + (i32.const 0) + ) + (set_local $$sizebits$0$i + (get_local $$shl31$i) + ) + (set_local $$t$0$i$151 + (get_local $$52) + ) + (set_local $$v$0$i$153 + (i32.const 0) + ) + (loop $while-in14 + (block $while-out13 + (set_local $$head$i$154 + (i32.add + (get_local $$t$0$i$151) + (i32.const 4) + ) + ) + (set_local $$53 + (i32.load + (get_local $$head$i$154) + ) + ) + (set_local $$and32$i + (i32.and + (get_local $$53) + (i32.const -8) + ) + ) + (set_local $$sub33$i + (i32.sub + (get_local $$and32$i) + (get_local $$and145) + ) + ) + (set_local $$cmp34$i + (i32.lt_u + (get_local $$sub33$i) + (get_local $$rsize$0$i$152) + ) + ) + (if + (get_local $$cmp34$i) + (block + (set_local $$cmp36$i + (i32.eq + (get_local $$and32$i) + (get_local $$and145) + ) + ) + (if + (get_local $$cmp36$i) + (block + (set_local $$rsize$49$i + (get_local $$sub33$i) + ) + (set_local $$t$48$i + (get_local $$t$0$i$151) + ) + (set_local $$v$410$i + (get_local $$t$0$i$151) + ) + (set_local $label + (i32.const 90) + ) + (br $label$break$L123) + ) + (block + (set_local $$rsize$1$i + (get_local $$sub33$i) + ) + (set_local $$v$1$i + (get_local $$t$0$i$151) + ) + ) + ) + ) + (block + (set_local $$rsize$1$i + (get_local $$rsize$0$i$152) + ) + (set_local $$v$1$i + (get_local $$v$0$i$153) + ) + ) + ) + (set_local $$arrayidx40$i + (i32.add + (get_local $$t$0$i$151) + (i32.const 20) + ) + ) + (set_local $$54 + (i32.load + (get_local $$arrayidx40$i) + ) + ) + (set_local $$shr41$i + (i32.shr_u + (get_local $$sizebits$0$i) + (i32.const 31) + ) + ) + (set_local $$arrayidx44$i + (i32.add + (i32.add + (get_local $$t$0$i$151) + (i32.const 16) + ) + (i32.shl + (get_local $$shr41$i) + (i32.const 2) + ) + ) + ) + (set_local $$55 + (i32.load + (get_local $$arrayidx44$i) + ) + ) + (set_local $$cmp45$i$155 + (i32.eq + (get_local $$54) + (i32.const 0) + ) + ) + (set_local $$cmp46$i + (i32.eq + (get_local $$54) + (get_local $$55) + ) + ) + (set_local $$or$cond1$i + (i32.or + (get_local $$cmp45$i$155) + (get_local $$cmp46$i) + ) + ) + (set_local $$rst$1$i + (if (result i32) + (get_local $$or$cond1$i) + (get_local $$rst$0$i) + (get_local $$54) + ) + ) + (set_local $$cmp49$i + (i32.eq + (get_local $$55) + (i32.const 0) + ) + ) + (set_local $$56 + (i32.and + (get_local $$cmp49$i) + (i32.const 1) + ) + ) + (set_local $$shl52$i + (i32.xor + (get_local $$56) + (i32.const 1) + ) + ) + (set_local $$sizebits$0$shl52$i + (i32.shl + (get_local $$sizebits$0$i) + (get_local $$shl52$i) + ) + ) + (if + (get_local $$cmp49$i) + (block + (set_local $$rsize$3$i + (get_local $$rsize$1$i) + ) + (set_local $$t$2$i + (get_local $$rst$1$i) + ) + (set_local $$v$3$i + (get_local $$v$1$i) + ) + (set_local $label + (i32.const 86) + ) + (br $while-out13) + ) + (block + (set_local $$rsize$0$i$152 + (get_local $$rsize$1$i) + ) + (set_local $$rst$0$i + (get_local $$rst$1$i) + ) + (set_local $$sizebits$0$i + (get_local $$sizebits$0$shl52$i) + ) + (set_local $$t$0$i$151 + (get_local $$55) + ) + (set_local $$v$0$i$153 + (get_local $$v$1$i) + ) + ) + ) + (br $while-in14) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 86) + ) + (block + (set_local $$cmp55$i + (i32.eq + (get_local $$t$2$i) + (i32.const 0) + ) + ) + (set_local $$cmp57$i + (i32.eq + (get_local $$v$3$i) + (i32.const 0) + ) + ) + (set_local $$or$cond$i + (i32.and + (get_local $$cmp55$i) + (get_local $$cmp57$i) + ) + ) + (if + (get_local $$or$cond$i) + (block + (set_local $$shl60$i + (i32.shl + (i32.const 2) + (get_local $$idx$0$i) + ) + ) + (set_local $$sub63$i + (i32.sub + (i32.const 0) + (get_local $$shl60$i) + ) + ) + (set_local $$or$i + (i32.or + (get_local $$shl60$i) + (get_local $$sub63$i) + ) + ) + (set_local $$and64$i + (i32.and + (get_local $$51) + (get_local $$or$i) + ) + ) + (set_local $$cmp65$i + (i32.eq + (get_local $$and64$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp65$i) + (block + (set_local $$nb$0 + (get_local $$and145) + ) + (br $do-once) + ) + ) + (set_local $$sub67$i + (i32.sub + (i32.const 0) + (get_local $$and64$i) + ) + ) + (set_local $$and68$i + (i32.and + (get_local $$and64$i) + (get_local $$sub67$i) + ) + ) + (set_local $$sub70$i + (i32.add + (get_local $$and68$i) + (i32.const -1) + ) + ) + (set_local $$shr72$i + (i32.shr_u + (get_local $$sub70$i) + (i32.const 12) + ) + ) + (set_local $$and73$i + (i32.and + (get_local $$shr72$i) + (i32.const 16) + ) + ) + (set_local $$shr75$i + (i32.shr_u + (get_local $$sub70$i) + (get_local $$and73$i) + ) + ) + (set_local $$shr76$i + (i32.shr_u + (get_local $$shr75$i) + (i32.const 5) + ) + ) + (set_local $$and77$i + (i32.and + (get_local $$shr76$i) + (i32.const 8) + ) + ) + (set_local $$add78$i + (i32.or + (get_local $$and77$i) + (get_local $$and73$i) + ) + ) + (set_local $$shr79$i + (i32.shr_u + (get_local $$shr75$i) + (get_local $$and77$i) + ) + ) + (set_local $$shr80$i + (i32.shr_u + (get_local $$shr79$i) + (i32.const 2) + ) + ) + (set_local $$and81$i + (i32.and + (get_local $$shr80$i) + (i32.const 4) + ) + ) + (set_local $$add82$i + (i32.or + (get_local $$add78$i) + (get_local $$and81$i) + ) + ) + (set_local $$shr83$i + (i32.shr_u + (get_local $$shr79$i) + (get_local $$and81$i) + ) + ) + (set_local $$shr84$i + (i32.shr_u + (get_local $$shr83$i) + (i32.const 1) + ) + ) + (set_local $$and85$i + (i32.and + (get_local $$shr84$i) + (i32.const 2) + ) + ) + (set_local $$add86$i + (i32.or + (get_local $$add82$i) + (get_local $$and85$i) + ) + ) + (set_local $$shr87$i + (i32.shr_u + (get_local $$shr83$i) + (get_local $$and85$i) + ) + ) + (set_local $$shr88$i + (i32.shr_u + (get_local $$shr87$i) + (i32.const 1) + ) + ) + (set_local $$and89$i + (i32.and + (get_local $$shr88$i) + (i32.const 1) + ) + ) + (set_local $$add90$i + (i32.or + (get_local $$add86$i) + (get_local $$and89$i) + ) + ) + (set_local $$shr91$i + (i32.shr_u + (get_local $$shr87$i) + (get_local $$and89$i) + ) + ) + (set_local $$add92$i + (i32.add + (get_local $$add90$i) + (get_local $$shr91$i) + ) + ) + (set_local $$arrayidx94$i$156 + (i32.add + (i32.const 480) + (i32.shl + (get_local $$add92$i) + (i32.const 2) + ) + ) + ) + (set_local $$57 + (i32.load + (get_local $$arrayidx94$i$156) + ) + ) + (set_local $$t$4$ph$i + (get_local $$57) + ) + ) + (set_local $$t$4$ph$i + (get_local $$t$2$i) + ) + ) + (set_local $$cmp97$7$i + (i32.eq + (get_local $$t$4$ph$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp97$7$i) + (block + (set_local $$rsize$4$lcssa$i + (get_local $$rsize$3$i) + ) + (set_local $$v$4$lcssa$i + (get_local $$v$3$i) + ) + ) + (block + (set_local $$rsize$49$i + (get_local $$rsize$3$i) + ) + (set_local $$t$48$i + (get_local $$t$4$ph$i) + ) + (set_local $$v$410$i + (get_local $$v$3$i) + ) + (set_local $label + (i32.const 90) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 90) + ) + (loop $while-in16 + (block $while-out15 + (set_local $label + (i32.const 0) + ) + (set_local $$head99$i + (i32.add + (get_local $$t$48$i) + (i32.const 4) + ) + ) + (set_local $$58 + (i32.load + (get_local $$head99$i) + ) + ) + (set_local $$and100$i + (i32.and + (get_local $$58) + (i32.const -8) + ) + ) + (set_local $$sub101$i + (i32.sub + (get_local $$and100$i) + (get_local $$and145) + ) + ) + (set_local $$cmp102$i + (i32.lt_u + (get_local $$sub101$i) + (get_local $$rsize$49$i) + ) + ) + (set_local $$sub101$rsize$4$i + (if (result i32) + (get_local $$cmp102$i) + (get_local $$sub101$i) + (get_local $$rsize$49$i) + ) + ) + (set_local $$t$4$v$4$i + (if (result i32) + (get_local $$cmp102$i) + (get_local $$t$48$i) + (get_local $$v$410$i) + ) + ) + (set_local $$arrayidx106$i + (i32.add + (get_local $$t$48$i) + (i32.const 16) + ) + ) + (set_local $$59 + (i32.load + (get_local $$arrayidx106$i) + ) + ) + (set_local $$cmp107$i$157 + (i32.eq + (get_local $$59) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp107$i$157) + ) + (block + (set_local $$rsize$49$i + (get_local $$sub101$rsize$4$i) + ) + (set_local $$t$48$i + (get_local $$59) + ) + (set_local $$v$410$i + (get_local $$t$4$v$4$i) + ) + (set_local $label + (i32.const 90) + ) + (br $while-in16) + ) + ) + (set_local $$arrayidx113$i$159 + (i32.add + (get_local $$t$48$i) + (i32.const 20) + ) + ) + (set_local $$60 + (i32.load + (get_local $$arrayidx113$i$159) + ) + ) + (set_local $$cmp97$i + (i32.eq + (get_local $$60) + (i32.const 0) + ) + ) + (if + (get_local $$cmp97$i) + (block + (set_local $$rsize$4$lcssa$i + (get_local $$sub101$rsize$4$i) + ) + (set_local $$v$4$lcssa$i + (get_local $$t$4$v$4$i) + ) + (br $while-out15) + ) + (block + (set_local $$rsize$49$i + (get_local $$sub101$rsize$4$i) + ) + (set_local $$t$48$i + (get_local $$60) + ) + (set_local $$v$410$i + (get_local $$t$4$v$4$i) + ) + (set_local $label + (i32.const 90) + ) + ) + ) + (br $while-in16) + ) + ) + ) + (set_local $$cmp116$i + (i32.eq + (get_local $$v$4$lcssa$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp116$i) + (set_local $$nb$0 + (get_local $$and145) + ) + (block + (set_local $$61 + (i32.load + (i32.const 184) + ) + ) + (set_local $$sub118$i + (i32.sub + (get_local $$61) + (get_local $$and145) + ) + ) + (set_local $$cmp119$i + (i32.lt_u + (get_local $$rsize$4$lcssa$i) + (get_local $$sub118$i) + ) + ) + (if + (get_local $$cmp119$i) + (block + (set_local $$62 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp121$i + (i32.lt_u + (get_local $$v$4$lcssa$i) + (get_local $$62) + ) + ) + (if + (get_local $$cmp121$i) + (call $_abort) + ) + (set_local $$add$ptr$i$161 + (i32.add + (get_local $$v$4$lcssa$i) + (get_local $$and145) + ) + ) + (set_local $$cmp123$i + (i32.lt_u + (get_local $$v$4$lcssa$i) + (get_local $$add$ptr$i$161) + ) + ) + (if + (i32.eqz + (get_local $$cmp123$i) + ) + (call $_abort) + ) + (set_local $$parent$i$162 + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 24) + ) + ) + (set_local $$63 + (i32.load + (get_local $$parent$i$162) + ) + ) + (set_local $$bk$i$163 + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 12) + ) + ) + (set_local $$64 + (i32.load + (get_local $$bk$i$163) + ) + ) + (set_local $$cmp128$i + (i32.eq + (get_local $$64) + (get_local $$v$4$lcssa$i) + ) + ) + (block $do-once17 + (if + (get_local $$cmp128$i) + (block + (set_local $$arrayidx151$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 20) + ) + ) + (set_local $$68 + (i32.load + (get_local $$arrayidx151$i) + ) + ) + (set_local $$cmp152$i + (i32.eq + (get_local $$68) + (i32.const 0) + ) + ) + (if + (get_local $$cmp152$i) + (block + (set_local $$arrayidx155$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 16) + ) + ) + (set_local $$69 + (i32.load + (get_local $$arrayidx155$i) + ) + ) + (set_local $$cmp156$i + (i32.eq + (get_local $$69) + (i32.const 0) + ) + ) + (if + (get_local $$cmp156$i) + (block + (set_local $$R$3$i$171 + (i32.const 0) + ) + (br $do-once17) + ) + (block + (set_local $$R$1$i$168 + (get_local $$69) + ) + (set_local $$RP$1$i$167 + (get_local $$arrayidx155$i) + ) + ) + ) + ) + (block + (set_local $$R$1$i$168 + (get_local $$68) + ) + (set_local $$RP$1$i$167 + (get_local $$arrayidx151$i) + ) + ) + ) + (loop $while-in20 + (block $while-out19 + (set_local $$arrayidx161$i + (i32.add + (get_local $$R$1$i$168) + (i32.const 20) + ) + ) + (set_local $$70 + (i32.load + (get_local $$arrayidx161$i) + ) + ) + (set_local $$cmp162$i + (i32.eq + (get_local $$70) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp162$i) + ) + (block + (set_local $$R$1$i$168 + (get_local $$70) + ) + (set_local $$RP$1$i$167 + (get_local $$arrayidx161$i) + ) + (br $while-in20) + ) + ) + (set_local $$arrayidx165$i$169 + (i32.add + (get_local $$R$1$i$168) + (i32.const 16) + ) + ) + (set_local $$71 + (i32.load + (get_local $$arrayidx165$i$169) + ) + ) + (set_local $$cmp166$i + (i32.eq + (get_local $$71) + (i32.const 0) + ) + ) + (if + (get_local $$cmp166$i) + (block + (set_local $$R$1$i$168$lcssa + (get_local $$R$1$i$168) + ) + (set_local $$RP$1$i$167$lcssa + (get_local $$RP$1$i$167) + ) + (br $while-out19) + ) + (block + (set_local $$R$1$i$168 + (get_local $$71) + ) + (set_local $$RP$1$i$167 + (get_local $$arrayidx165$i$169) + ) + ) + ) + (br $while-in20) + ) + ) + (set_local $$cmp171$i + (i32.lt_u + (get_local $$RP$1$i$167$lcssa) + (get_local $$62) + ) + ) + (if + (get_local $$cmp171$i) + (call $_abort) + (block + (i32.store + (get_local $$RP$1$i$167$lcssa) + (i32.const 0) + ) + (set_local $$R$3$i$171 + (get_local $$R$1$i$168$lcssa) + ) + (br $do-once17) + ) + ) + ) + (block + (set_local $$fd$i$164 + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 8) + ) + ) + (set_local $$65 + (i32.load + (get_local $$fd$i$164) + ) + ) + (set_local $$cmp133$i + (i32.lt_u + (get_local $$65) + (get_local $$62) + ) + ) + (if + (get_local $$cmp133$i) + (call $_abort) + ) + (set_local $$bk136$i + (i32.add + (get_local $$65) + (i32.const 12) + ) + ) + (set_local $$66 + (i32.load + (get_local $$bk136$i) + ) + ) + (set_local $$cmp137$i + (i32.eq + (get_local $$66) + (get_local $$v$4$lcssa$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp137$i) + ) + (call $_abort) + ) + (set_local $$fd139$i + (i32.add + (get_local $$64) + (i32.const 8) + ) + ) + (set_local $$67 + (i32.load + (get_local $$fd139$i) + ) + ) + (set_local $$cmp140$i + (i32.eq + (get_local $$67) + (get_local $$v$4$lcssa$i) + ) + ) + (if + (get_local $$cmp140$i) + (block + (i32.store + (get_local $$bk136$i) + (get_local $$64) + ) + (i32.store + (get_local $$fd139$i) + (get_local $$65) + ) + (set_local $$R$3$i$171 + (get_local $$64) + ) + (br $do-once17) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$cmp180$i + (i32.eq + (get_local $$63) + (i32.const 0) + ) + ) + (block $do-once21 + (if + (i32.eqz + (get_local $$cmp180$i) + ) + (block + (set_local $$index$i$172 + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 28) + ) + ) + (set_local $$72 + (i32.load + (get_local $$index$i$172) + ) + ) + (set_local $$arrayidx184$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$72) + (i32.const 2) + ) + ) + ) + (set_local $$73 + (i32.load + (get_local $$arrayidx184$i) + ) + ) + (set_local $$cmp185$i + (i32.eq + (get_local $$v$4$lcssa$i) + (get_local $$73) + ) + ) + (if + (get_local $$cmp185$i) + (block + (i32.store + (get_local $$arrayidx184$i) + (get_local $$R$3$i$171) + ) + (set_local $$cond3$i + (i32.eq + (get_local $$R$3$i$171) + (i32.const 0) + ) + ) + (if + (get_local $$cond3$i) + (block + (set_local $$shl192$i + (i32.shl + (i32.const 1) + (get_local $$72) + ) + ) + (set_local $$neg$i$173 + (i32.xor + (get_local $$shl192$i) + (i32.const -1) + ) + ) + (set_local $$74 + (i32.load + (i32.const 180) + ) + ) + (set_local $$and194$i + (i32.and + (get_local $$74) + (get_local $$neg$i$173) + ) + ) + (i32.store + (i32.const 180) + (get_local $$and194$i) + ) + (br $do-once21) + ) + ) + ) + (block + (set_local $$75 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp198$i + (i32.lt_u + (get_local $$63) + (get_local $$75) + ) + ) + (if + (get_local $$cmp198$i) + (call $_abort) + ) + (set_local $$arrayidx204$i + (i32.add + (get_local $$63) + (i32.const 16) + ) + ) + (set_local $$76 + (i32.load + (get_local $$arrayidx204$i) + ) + ) + (set_local $$cmp205$i + (i32.eq + (get_local $$76) + (get_local $$v$4$lcssa$i) + ) + ) + (if + (get_local $$cmp205$i) + (i32.store + (get_local $$arrayidx204$i) + (get_local $$R$3$i$171) + ) + (block + (set_local $$arrayidx212$i + (i32.add + (get_local $$63) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx212$i) + (get_local $$R$3$i$171) + ) + ) + ) + (set_local $$cmp217$i + (i32.eq + (get_local $$R$3$i$171) + (i32.const 0) + ) + ) + (if + (get_local $$cmp217$i) + (br $do-once21) + ) + ) + ) + (set_local $$77 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp221$i + (i32.lt_u + (get_local $$R$3$i$171) + (get_local $$77) + ) + ) + (if + (get_local $$cmp221$i) + (call $_abort) + ) + (set_local $$parent226$i + (i32.add + (get_local $$R$3$i$171) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent226$i) + (get_local $$63) + ) + (set_local $$arrayidx228$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 16) + ) + ) + (set_local $$78 + (i32.load + (get_local $$arrayidx228$i) + ) + ) + (set_local $$cmp229$i + (i32.eq + (get_local $$78) + (i32.const 0) + ) + ) + (block $do-once23 + (if + (i32.eqz + (get_local $$cmp229$i) + ) + (block + (set_local $$cmp233$i + (i32.lt_u + (get_local $$78) + (get_local $$77) + ) + ) + (if + (get_local $$cmp233$i) + (call $_abort) + (block + (set_local $$arrayidx239$i + (i32.add + (get_local $$R$3$i$171) + (i32.const 16) + ) + ) + (i32.store + (get_local $$arrayidx239$i) + (get_local $$78) + ) + (set_local $$parent240$i + (i32.add + (get_local $$78) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent240$i) + (get_local $$R$3$i$171) + ) + (br $do-once23) + ) + ) + ) + ) + ) + (set_local $$arrayidx245$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 20) + ) + ) + (set_local $$79 + (i32.load + (get_local $$arrayidx245$i) + ) + ) + (set_local $$cmp246$i + (i32.eq + (get_local $$79) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp246$i) + ) + (block + (set_local $$80 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp250$i + (i32.lt_u + (get_local $$79) + (get_local $$80) + ) + ) + (if + (get_local $$cmp250$i) + (call $_abort) + (block + (set_local $$arrayidx256$i + (i32.add + (get_local $$R$3$i$171) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx256$i) + (get_local $$79) + ) + (set_local $$parent257$i + (i32.add + (get_local $$79) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent257$i) + (get_local $$R$3$i$171) + ) + (br $do-once21) + ) + ) + ) + ) + ) + ) + ) + (set_local $$cmp265$i + (i32.lt_u + (get_local $$rsize$4$lcssa$i) + (i32.const 16) + ) + ) + (block $do-once25 + (if + (get_local $$cmp265$i) + (block + (set_local $$add268$i + (i32.add + (get_local $$rsize$4$lcssa$i) + (get_local $$and145) + ) + ) + (set_local $$or270$i + (i32.or + (get_local $$add268$i) + (i32.const 3) + ) + ) + (set_local $$head271$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head271$i) + (get_local $$or270$i) + ) + (set_local $$add$ptr273$i + (i32.add + (get_local $$v$4$lcssa$i) + (get_local $$add268$i) + ) + ) + (set_local $$head274$i + (i32.add + (get_local $$add$ptr273$i) + (i32.const 4) + ) + ) + (set_local $$81 + (i32.load + (get_local $$head274$i) + ) + ) + (set_local $$or275$i + (i32.or + (get_local $$81) + (i32.const 1) + ) + ) + (i32.store + (get_local $$head274$i) + (get_local $$or275$i) + ) + ) + (block + (set_local $$or278$i + (i32.or + (get_local $$and145) + (i32.const 3) + ) + ) + (set_local $$head279$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head279$i) + (get_local $$or278$i) + ) + (set_local $$or280$i + (i32.or + (get_local $$rsize$4$lcssa$i) + (i32.const 1) + ) + ) + (set_local $$head281$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head281$i) + (get_local $$or280$i) + ) + (set_local $$add$ptr282$i + (i32.add + (get_local $$add$ptr$i$161) + (get_local $$rsize$4$lcssa$i) + ) + ) + (i32.store + (get_local $$add$ptr282$i) + (get_local $$rsize$4$lcssa$i) + ) + (set_local $$shr283$i + (i32.shr_u + (get_local $$rsize$4$lcssa$i) + (i32.const 3) + ) + ) + (set_local $$cmp284$i + (i32.lt_u + (get_local $$rsize$4$lcssa$i) + (i32.const 256) + ) + ) + (if + (get_local $$cmp284$i) + (block + (set_local $$shl288$i + (i32.shl + (get_local $$shr283$i) + (i32.const 1) + ) + ) + (set_local $$arrayidx289$i + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl288$i) + (i32.const 2) + ) + ) + ) + (set_local $$82 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shl291$i + (i32.shl + (i32.const 1) + (get_local $$shr283$i) + ) + ) + (set_local $$and292$i + (i32.and + (get_local $$82) + (get_local $$shl291$i) + ) + ) + (set_local $$tobool293$i + (i32.eq + (get_local $$and292$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool293$i) + (block + (set_local $$or297$i + (i32.or + (get_local $$82) + (get_local $$shl291$i) + ) + ) + (i32.store + (i32.const 176) + (get_local $$or297$i) + ) + (set_local $$$pre$i$177 + (i32.add + (get_local $$arrayidx289$i) + (i32.const 8) + ) + ) + (set_local $$$pre$phi$i$178Z2D + (get_local $$$pre$i$177) + ) + (set_local $$F290$0$i + (get_local $$arrayidx289$i) + ) + ) + (block + (set_local $$83 + (i32.add + (get_local $$arrayidx289$i) + (i32.const 8) + ) + ) + (set_local $$84 + (i32.load + (get_local $$83) + ) + ) + (set_local $$85 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp301$i + (i32.lt_u + (get_local $$84) + (get_local $$85) + ) + ) + (if + (get_local $$cmp301$i) + (call $_abort) + (block + (set_local $$$pre$phi$i$178Z2D + (get_local $$83) + ) + (set_local $$F290$0$i + (get_local $$84) + ) + ) + ) + ) + ) + (i32.store + (get_local $$$pre$phi$i$178Z2D) + (get_local $$add$ptr$i$161) + ) + (set_local $$bk311$i + (i32.add + (get_local $$F290$0$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk311$i) + (get_local $$add$ptr$i$161) + ) + (set_local $$fd312$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd312$i) + (get_local $$F290$0$i) + ) + (set_local $$bk313$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk313$i) + (get_local $$arrayidx289$i) + ) + (br $do-once25) + ) + ) + (set_local $$shr318$i + (i32.shr_u + (get_local $$rsize$4$lcssa$i) + (i32.const 8) + ) + ) + (set_local $$cmp319$i + (i32.eq + (get_local $$shr318$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp319$i) + (set_local $$I316$0$i + (i32.const 0) + ) + (block + (set_local $$cmp323$i + (i32.gt_u + (get_local $$rsize$4$lcssa$i) + (i32.const 16777215) + ) + ) + (if + (get_local $$cmp323$i) + (set_local $$I316$0$i + (i32.const 31) + ) + (block + (set_local $$sub329$i + (i32.add + (get_local $$shr318$i) + (i32.const 1048320) + ) + ) + (set_local $$shr330$i + (i32.shr_u + (get_local $$sub329$i) + (i32.const 16) + ) + ) + (set_local $$and331$i + (i32.and + (get_local $$shr330$i) + (i32.const 8) + ) + ) + (set_local $$shl333$i + (i32.shl + (get_local $$shr318$i) + (get_local $$and331$i) + ) + ) + (set_local $$sub334$i + (i32.add + (get_local $$shl333$i) + (i32.const 520192) + ) + ) + (set_local $$shr335$i + (i32.shr_u + (get_local $$sub334$i) + (i32.const 16) + ) + ) + (set_local $$and336$i + (i32.and + (get_local $$shr335$i) + (i32.const 4) + ) + ) + (set_local $$add337$i + (i32.or + (get_local $$and336$i) + (get_local $$and331$i) + ) + ) + (set_local $$shl338$i + (i32.shl + (get_local $$shl333$i) + (get_local $$and336$i) + ) + ) + (set_local $$sub339$i + (i32.add + (get_local $$shl338$i) + (i32.const 245760) + ) + ) + (set_local $$shr340$i + (i32.shr_u + (get_local $$sub339$i) + (i32.const 16) + ) + ) + (set_local $$and341$i + (i32.and + (get_local $$shr340$i) + (i32.const 2) + ) + ) + (set_local $$add342$i + (i32.or + (get_local $$add337$i) + (get_local $$and341$i) + ) + ) + (set_local $$sub343$i + (i32.sub + (i32.const 14) + (get_local $$add342$i) + ) + ) + (set_local $$shl344$i + (i32.shl + (get_local $$shl338$i) + (get_local $$and341$i) + ) + ) + (set_local $$shr345$i + (i32.shr_u + (get_local $$shl344$i) + (i32.const 15) + ) + ) + (set_local $$add346$i + (i32.add + (get_local $$sub343$i) + (get_local $$shr345$i) + ) + ) + (set_local $$shl347$i + (i32.shl + (get_local $$add346$i) + (i32.const 1) + ) + ) + (set_local $$add348$i + (i32.add + (get_local $$add346$i) + (i32.const 7) + ) + ) + (set_local $$shr349$i + (i32.shr_u + (get_local $$rsize$4$lcssa$i) + (get_local $$add348$i) + ) + ) + (set_local $$and350$i + (i32.and + (get_local $$shr349$i) + (i32.const 1) + ) + ) + (set_local $$add351$i + (i32.or + (get_local $$and350$i) + (get_local $$shl347$i) + ) + ) + (set_local $$I316$0$i + (get_local $$add351$i) + ) + ) + ) + ) + ) + (set_local $$arrayidx355$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$I316$0$i) + (i32.const 2) + ) + ) + ) + (set_local $$index356$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 28) + ) + ) + (i32.store + (get_local $$index356$i) + (get_local $$I316$0$i) + ) + (set_local $$child357$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 16) + ) + ) + (set_local $$arrayidx358$i + (i32.add + (get_local $$child357$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$arrayidx358$i) + (i32.const 0) + ) + (i32.store + (get_local $$child357$i) + (i32.const 0) + ) + (set_local $$86 + (i32.load + (i32.const 180) + ) + ) + (set_local $$shl362$i + (i32.shl + (i32.const 1) + (get_local $$I316$0$i) + ) + ) + (set_local $$and363$i + (i32.and + (get_local $$86) + (get_local $$shl362$i) + ) + ) + (set_local $$tobool364$i + (i32.eq + (get_local $$and363$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool364$i) + (block + (set_local $$or368$i + (i32.or + (get_local $$86) + (get_local $$shl362$i) + ) + ) + (i32.store + (i32.const 180) + (get_local $$or368$i) + ) + (i32.store + (get_local $$arrayidx355$i) + (get_local $$add$ptr$i$161) + ) + (set_local $$parent369$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent369$i) + (get_local $$arrayidx355$i) + ) + (set_local $$bk370$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk370$i) + (get_local $$add$ptr$i$161) + ) + (set_local $$fd371$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd371$i) + (get_local $$add$ptr$i$161) + ) + (br $do-once25) + ) + ) + (set_local $$87 + (i32.load + (get_local $$arrayidx355$i) + ) + ) + (set_local $$cmp374$i + (i32.eq + (get_local $$I316$0$i) + (i32.const 31) + ) + ) + (set_local $$shr378$i + (i32.shr_u + (get_local $$I316$0$i) + (i32.const 1) + ) + ) + (set_local $$sub381$i + (i32.sub + (i32.const 25) + (get_local $$shr378$i) + ) + ) + (set_local $$cond383$i + (if (result i32) + (get_local $$cmp374$i) + (i32.const 0) + (get_local $$sub381$i) + ) + ) + (set_local $$shl384$i + (i32.shl + (get_local $$rsize$4$lcssa$i) + (get_local $$cond383$i) + ) + ) + (set_local $$K373$0$i + (get_local $$shl384$i) + ) + (set_local $$T$0$i + (get_local $$87) + ) + (loop $while-in28 + (block $while-out27 + (set_local $$head386$i + (i32.add + (get_local $$T$0$i) + (i32.const 4) + ) + ) + (set_local $$88 + (i32.load + (get_local $$head386$i) + ) + ) + (set_local $$and387$i + (i32.and + (get_local $$88) + (i32.const -8) + ) + ) + (set_local $$cmp388$i + (i32.eq + (get_local $$and387$i) + (get_local $$rsize$4$lcssa$i) + ) + ) + (if + (get_local $$cmp388$i) + (block + (set_local $$T$0$i$lcssa + (get_local $$T$0$i) + ) + (set_local $label + (i32.const 148) + ) + (br $while-out27) + ) + ) + (set_local $$shr391$i + (i32.shr_u + (get_local $$K373$0$i) + (i32.const 31) + ) + ) + (set_local $$arrayidx394$i + (i32.add + (i32.add + (get_local $$T$0$i) + (i32.const 16) + ) + (i32.shl + (get_local $$shr391$i) + (i32.const 2) + ) + ) + ) + (set_local $$shl395$i + (i32.shl + (get_local $$K373$0$i) + (i32.const 1) + ) + ) + (set_local $$89 + (i32.load + (get_local $$arrayidx394$i) + ) + ) + (set_local $$cmp396$i + (i32.eq + (get_local $$89) + (i32.const 0) + ) + ) + (if + (get_local $$cmp396$i) + (block + (set_local $$T$0$i$lcssa293 + (get_local $$T$0$i) + ) + (set_local $$arrayidx394$i$lcssa + (get_local $$arrayidx394$i) + ) + (set_local $label + (i32.const 145) + ) + (br $while-out27) + ) + (block + (set_local $$K373$0$i + (get_local $$shl395$i) + ) + (set_local $$T$0$i + (get_local $$89) + ) + ) + ) + (br $while-in28) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 145) + ) + (block + (set_local $$90 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp401$i + (i32.lt_u + (get_local $$arrayidx394$i$lcssa) + (get_local $$90) + ) + ) + (if + (get_local $$cmp401$i) + (call $_abort) + (block + (i32.store + (get_local $$arrayidx394$i$lcssa) + (get_local $$add$ptr$i$161) + ) + (set_local $$parent406$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent406$i) + (get_local $$T$0$i$lcssa293) + ) + (set_local $$bk407$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk407$i) + (get_local $$add$ptr$i$161) + ) + (set_local $$fd408$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd408$i) + (get_local $$add$ptr$i$161) + ) + (br $do-once25) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 148) + ) + (block + (set_local $$fd416$i + (i32.add + (get_local $$T$0$i$lcssa) + (i32.const 8) + ) + ) + (set_local $$91 + (i32.load + (get_local $$fd416$i) + ) + ) + (set_local $$92 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp422$i + (i32.ge_u + (get_local $$91) + (get_local $$92) + ) + ) + (set_local $$not$cmp418$i + (i32.ge_u + (get_local $$T$0$i$lcssa) + (get_local $$92) + ) + ) + (set_local $$93 + (i32.and + (get_local $$cmp422$i) + (get_local $$not$cmp418$i) + ) + ) + (if + (get_local $$93) + (block + (set_local $$bk429$i + (i32.add + (get_local $$91) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk429$i) + (get_local $$add$ptr$i$161) + ) + (i32.store + (get_local $$fd416$i) + (get_local $$add$ptr$i$161) + ) + (set_local $$fd431$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd431$i) + (get_local $$91) + ) + (set_local $$bk432$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk432$i) + (get_local $$T$0$i$lcssa) + ) + (set_local $$parent433$i + (i32.add + (get_local $$add$ptr$i$161) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent433$i) + (i32.const 0) + ) + (br $do-once25) + ) + (call $_abort) + ) + ) + ) + ) + ) + ) + ) + (set_local $$add$ptr441$i + (i32.add + (get_local $$v$4$lcssa$i) + (i32.const 8) + ) + ) + (set_local $$retval$0 + (get_local $$add$ptr441$i) + ) + (return + (get_local $$retval$0) + ) + ) + (set_local $$nb$0 + (get_local $$and145) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $$94 + (i32.load + (i32.const 184) + ) + ) + (set_local $$cmp156 + (i32.lt_u + (get_local $$94) + (get_local $$nb$0) + ) + ) + (if + (i32.eqz + (get_local $$cmp156) + ) + (block + (set_local $$sub160 + (i32.sub + (get_local $$94) + (get_local $$nb$0) + ) + ) + (set_local $$95 + (i32.load + (i32.const 196) + ) + ) + (set_local $$cmp162 + (i32.gt_u + (get_local $$sub160) + (i32.const 15) + ) + ) + (if + (get_local $$cmp162) + (block + (set_local $$add$ptr166 + (i32.add + (get_local $$95) + (get_local $$nb$0) + ) + ) + (i32.store + (i32.const 196) + (get_local $$add$ptr166) + ) + (i32.store + (i32.const 184) + (get_local $$sub160) + ) + (set_local $$or167 + (i32.or + (get_local $$sub160) + (i32.const 1) + ) + ) + (set_local $$head168 + (i32.add + (get_local $$add$ptr166) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head168) + (get_local $$or167) + ) + (set_local $$add$ptr169 + (i32.add + (get_local $$add$ptr166) + (get_local $$sub160) + ) + ) + (i32.store + (get_local $$add$ptr169) + (get_local $$sub160) + ) + (set_local $$or172 + (i32.or + (get_local $$nb$0) + (i32.const 3) + ) + ) + (set_local $$head173 + (i32.add + (get_local $$95) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head173) + (get_local $$or172) + ) + ) + (block + (i32.store + (i32.const 184) + (i32.const 0) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (set_local $$or176 + (i32.or + (get_local $$94) + (i32.const 3) + ) + ) + (set_local $$head177 + (i32.add + (get_local $$95) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head177) + (get_local $$or176) + ) + (set_local $$add$ptr178 + (i32.add + (get_local $$95) + (get_local $$94) + ) + ) + (set_local $$head179 + (i32.add + (get_local $$add$ptr178) + (i32.const 4) + ) + ) + (set_local $$96 + (i32.load + (get_local $$head179) + ) + ) + (set_local $$or180 + (i32.or + (get_local $$96) + (i32.const 1) + ) + ) + (i32.store + (get_local $$head179) + (get_local $$or180) + ) + ) + ) + (set_local $$add$ptr182 + (i32.add + (get_local $$95) + (i32.const 8) + ) + ) + (set_local $$retval$0 + (get_local $$add$ptr182) + ) + (return + (get_local $$retval$0) + ) + ) + ) + (set_local $$97 + (i32.load + (i32.const 188) + ) + ) + (set_local $$cmp186 + (i32.gt_u + (get_local $$97) + (get_local $$nb$0) + ) + ) + (if + (get_local $$cmp186) + (block + (set_local $$sub190 + (i32.sub + (get_local $$97) + (get_local $$nb$0) + ) + ) + (i32.store + (i32.const 188) + (get_local $$sub190) + ) + (set_local $$98 + (i32.load + (i32.const 200) + ) + ) + (set_local $$add$ptr193 + (i32.add + (get_local $$98) + (get_local $$nb$0) + ) + ) + (i32.store + (i32.const 200) + (get_local $$add$ptr193) + ) + (set_local $$or194 + (i32.or + (get_local $$sub190) + (i32.const 1) + ) + ) + (set_local $$head195 + (i32.add + (get_local $$add$ptr193) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head195) + (get_local $$or194) + ) + (set_local $$or197 + (i32.or + (get_local $$nb$0) + (i32.const 3) + ) + ) + (set_local $$head198 + (i32.add + (get_local $$98) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head198) + (get_local $$or197) + ) + (set_local $$add$ptr199 + (i32.add + (get_local $$98) + (i32.const 8) + ) + ) + (set_local $$retval$0 + (get_local $$add$ptr199) + ) + (return + (get_local $$retval$0) + ) + ) + ) + (set_local $$99 + (i32.load + (i32.const 648) + ) + ) + (set_local $$cmp$i$179 + (i32.eq + (get_local $$99) + (i32.const 0) + ) + ) + (block $do-once29 + (if + (get_local $$cmp$i$179) + (block + (set_local $$call$i$i + (call $_sysconf + (i32.const 30) + ) + ) + (set_local $$sub$i$i + (i32.add + (get_local $$call$i$i) + (i32.const -1) + ) + ) + (set_local $$and$i$i + (i32.and + (get_local $$sub$i$i) + (get_local $$call$i$i) + ) + ) + (set_local $$cmp1$i$i + (i32.eq + (get_local $$and$i$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp1$i$i) + (block + (i32.store + (i32.const 656) + (get_local $$call$i$i) + ) + (i32.store + (i32.const 652) + (get_local $$call$i$i) + ) + (i32.store + (i32.const 660) + (i32.const -1) + ) + (i32.store + (i32.const 664) + (i32.const -1) + ) + (i32.store + (i32.const 668) + (i32.const 0) + ) + (i32.store + (i32.const 620) + (i32.const 0) + ) + (set_local $$call6$i$i + (call $_time + (i32.const 0) + ) + ) + (set_local $$xor$i$i + (i32.and + (get_local $$call6$i$i) + (i32.const -16) + ) + ) + (set_local $$and7$i$i + (i32.xor + (get_local $$xor$i$i) + (i32.const 1431655768) + ) + ) + (i32.store + (i32.const 648) + (get_local $$and7$i$i) + ) + (br $do-once29) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$add$i$180 + (i32.add + (get_local $$nb$0) + (i32.const 48) + ) + ) + (set_local $$100 + (i32.load + (i32.const 656) + ) + ) + (set_local $$sub$i$181 + (i32.add + (get_local $$nb$0) + (i32.const 47) + ) + ) + (set_local $$add9$i + (i32.add + (get_local $$100) + (get_local $$sub$i$181) + ) + ) + (set_local $$neg$i$182 + (i32.sub + (i32.const 0) + (get_local $$100) + ) + ) + (set_local $$and11$i + (i32.and + (get_local $$add9$i) + (get_local $$neg$i$182) + ) + ) + (set_local $$cmp12$i + (i32.gt_u + (get_local $$and11$i) + (get_local $$nb$0) + ) + ) + (if + (i32.eqz + (get_local $$cmp12$i) + ) + (block + (set_local $$retval$0 + (i32.const 0) + ) + (return + (get_local $$retval$0) + ) + ) + ) + (set_local $$101 + (i32.load + (i32.const 616) + ) + ) + (set_local $$cmp15$i + (i32.eq + (get_local $$101) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp15$i) + ) + (block + (set_local $$102 + (i32.load + (i32.const 608) + ) + ) + (set_local $$add17$i$183 + (i32.add + (get_local $$102) + (get_local $$and11$i) + ) + ) + (set_local $$cmp19$i + (i32.le_u + (get_local $$add17$i$183) + (get_local $$102) + ) + ) + (set_local $$cmp21$i + (i32.gt_u + (get_local $$add17$i$183) + (get_local $$101) + ) + ) + (set_local $$or$cond1$i$184 + (i32.or + (get_local $$cmp19$i) + (get_local $$cmp21$i) + ) + ) + (if + (get_local $$or$cond1$i$184) + (block + (set_local $$retval$0 + (i32.const 0) + ) + (return + (get_local $$retval$0) + ) + ) + ) + ) + ) + (set_local $$103 + (i32.load + (i32.const 620) + ) + ) + (set_local $$and29$i + (i32.and + (get_local $$103) + (i32.const 4) + ) + ) + (set_local $$tobool30$i + (i32.eq + (get_local $$and29$i) + (i32.const 0) + ) + ) + (block $label$break$L257 + (if + (get_local $$tobool30$i) + (block + (set_local $$104 + (i32.load + (i32.const 200) + ) + ) + (set_local $$cmp32$i$185 + (i32.eq + (get_local $$104) + (i32.const 0) + ) + ) + (block $label$break$L259 + (if + (get_local $$cmp32$i$185) + (set_local $label + (i32.const 173) + ) + (block + (set_local $$sp$0$i$i + (i32.const 624) + ) + (loop $while-in34 + (block $while-out33 + (set_local $$105 + (i32.load + (get_local $$sp$0$i$i) + ) + ) + (set_local $$cmp$i$9$i + (i32.gt_u + (get_local $$105) + (get_local $$104) + ) + ) + (if + (i32.eqz + (get_local $$cmp$i$9$i) + ) + (block + (set_local $$size$i$i + (i32.add + (get_local $$sp$0$i$i) + (i32.const 4) + ) + ) + (set_local $$106 + (i32.load + (get_local $$size$i$i) + ) + ) + (set_local $$add$ptr$i$i + (i32.add + (get_local $$105) + (get_local $$106) + ) + ) + (set_local $$cmp2$i$i + (i32.gt_u + (get_local $$add$ptr$i$i) + (get_local $$104) + ) + ) + (if + (get_local $$cmp2$i$i) + (block + (set_local $$base$i$i$lcssa + (get_local $$sp$0$i$i) + ) + (set_local $$size$i$i$lcssa + (get_local $$size$i$i) + ) + (br $while-out33) + ) + ) + ) + ) + (set_local $$next$i$i + (i32.add + (get_local $$sp$0$i$i) + (i32.const 8) + ) + ) + (set_local $$107 + (i32.load + (get_local $$next$i$i) + ) + ) + (set_local $$cmp3$i$i + (i32.eq + (get_local $$107) + (i32.const 0) + ) + ) + (if + (get_local $$cmp3$i$i) + (block + (set_local $label + (i32.const 173) + ) + (br $label$break$L259) + ) + (set_local $$sp$0$i$i + (get_local $$107) + ) + ) + (br $while-in34) + ) + ) + (set_local $$112 + (i32.load + (i32.const 188) + ) + ) + (set_local $$add77$i + (i32.sub + (get_local $$add9$i) + (get_local $$112) + ) + ) + (set_local $$and80$i + (i32.and + (get_local $$add77$i) + (get_local $$neg$i$182) + ) + ) + (set_local $$cmp81$i$191 + (i32.lt_u + (get_local $$and80$i) + (i32.const 2147483647) + ) + ) + (if + (get_local $$cmp81$i$191) + (block + (set_local $$call83$i + (call $_sbrk + (get_local $$and80$i) + ) + ) + (set_local $$113 + (i32.load + (get_local $$base$i$i$lcssa) + ) + ) + (set_local $$114 + (i32.load + (get_local $$size$i$i$lcssa) + ) + ) + (set_local $$add$ptr$i$193 + (i32.add + (get_local $$113) + (get_local $$114) + ) + ) + (set_local $$cmp85$i + (i32.eq + (get_local $$call83$i) + (get_local $$add$ptr$i$193) + ) + ) + (if + (get_local $$cmp85$i) + (block + (set_local $$cmp89$i + (i32.eq + (get_local $$call83$i) + (i32.const -1) + ) + ) + (if + (i32.eqz + (get_local $$cmp89$i) + ) + (block + (set_local $$tbase$796$i + (get_local $$call83$i) + ) + (set_local $$tsize$795$i + (get_local $$and80$i) + ) + (set_local $label + (i32.const 193) + ) + (br $label$break$L257) + ) + ) + ) + (block + (set_local $$br$2$ph$i + (get_local $$call83$i) + ) + (set_local $$ssize$2$ph$i + (get_local $$and80$i) + ) + (set_local $label + (i32.const 183) + ) + ) + ) + ) + ) + ) + ) + ) + (block $do-once35 + (if + (i32.eq + (get_local $label) + (i32.const 173) + ) + (block + (set_local $$call37$i + (call $_sbrk + (i32.const 0) + ) + ) + (set_local $$cmp38$i + (i32.eq + (get_local $$call37$i) + (i32.const -1) + ) + ) + (if + (i32.eqz + (get_local $$cmp38$i) + ) + (block + (set_local $$108 + (get_local $$call37$i) + ) + (set_local $$109 + (i32.load + (i32.const 652) + ) + ) + (set_local $$sub41$i + (i32.add + (get_local $$109) + (i32.const -1) + ) + ) + (set_local $$and42$i + (i32.and + (get_local $$sub41$i) + (get_local $$108) + ) + ) + (set_local $$cmp43$i + (i32.eq + (get_local $$and42$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp43$i) + (set_local $$ssize$0$i + (get_local $$and11$i) + ) + (block + (set_local $$add46$i + (i32.add + (get_local $$sub41$i) + (get_local $$108) + ) + ) + (set_local $$neg48$i + (i32.sub + (i32.const 0) + (get_local $$109) + ) + ) + (set_local $$and49$i + (i32.and + (get_local $$add46$i) + (get_local $$neg48$i) + ) + ) + (set_local $$sub50$i + (i32.sub + (get_local $$and11$i) + (get_local $$108) + ) + ) + (set_local $$add51$i + (i32.add + (get_local $$sub50$i) + (get_local $$and49$i) + ) + ) + (set_local $$ssize$0$i + (get_local $$add51$i) + ) + ) + ) + (set_local $$110 + (i32.load + (i32.const 608) + ) + ) + (set_local $$add54$i + (i32.add + (get_local $$110) + (get_local $$ssize$0$i) + ) + ) + (set_local $$cmp55$i$187 + (i32.gt_u + (get_local $$ssize$0$i) + (get_local $$nb$0) + ) + ) + (set_local $$cmp57$i$188 + (i32.lt_u + (get_local $$ssize$0$i) + (i32.const 2147483647) + ) + ) + (set_local $$or$cond$i$189 + (i32.and + (get_local $$cmp55$i$187) + (get_local $$cmp57$i$188) + ) + ) + (if + (get_local $$or$cond$i$189) + (block + (set_local $$111 + (i32.load + (i32.const 616) + ) + ) + (set_local $$cmp60$i + (i32.eq + (get_local $$111) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp60$i) + ) + (block + (set_local $$cmp63$i + (i32.le_u + (get_local $$add54$i) + (get_local $$110) + ) + ) + (set_local $$cmp66$i$190 + (i32.gt_u + (get_local $$add54$i) + (get_local $$111) + ) + ) + (set_local $$or$cond2$i + (i32.or + (get_local $$cmp63$i) + (get_local $$cmp66$i$190) + ) + ) + (if + (get_local $$or$cond2$i) + (br $do-once35) + ) + ) + ) + (set_local $$call68$i + (call $_sbrk + (get_local $$ssize$0$i) + ) + ) + (set_local $$cmp69$i + (i32.eq + (get_local $$call68$i) + (get_local $$call37$i) + ) + ) + (if + (get_local $$cmp69$i) + (block + (set_local $$tbase$796$i + (get_local $$call37$i) + ) + (set_local $$tsize$795$i + (get_local $$ssize$0$i) + ) + (set_local $label + (i32.const 193) + ) + (br $label$break$L257) + ) + (block + (set_local $$br$2$ph$i + (get_local $$call68$i) + ) + (set_local $$ssize$2$ph$i + (get_local $$ssize$0$i) + ) + (set_local $label + (i32.const 183) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (block $label$break$L279 + (if + (i32.eq + (get_local $label) + (i32.const 183) + ) + (block + (set_local $$sub112$i + (i32.sub + (i32.const 0) + (get_local $$ssize$2$ph$i) + ) + ) + (set_local $$cmp91$i + (i32.ne + (get_local $$br$2$ph$i) + (i32.const -1) + ) + ) + (set_local $$cmp93$i + (i32.lt_u + (get_local $$ssize$2$ph$i) + (i32.const 2147483647) + ) + ) + (set_local $$or$cond5$i + (i32.and + (get_local $$cmp93$i) + (get_local $$cmp91$i) + ) + ) + (set_local $$cmp96$i + (i32.gt_u + (get_local $$add$i$180) + (get_local $$ssize$2$ph$i) + ) + ) + (set_local $$or$cond3$i + (i32.and + (get_local $$cmp96$i) + (get_local $$or$cond5$i) + ) + ) + (block $do-once38 + (if + (get_local $$or$cond3$i) + (block + (set_local $$115 + (i32.load + (i32.const 656) + ) + ) + (set_local $$sub99$i + (i32.sub + (get_local $$sub$i$181) + (get_local $$ssize$2$ph$i) + ) + ) + (set_local $$add101$i + (i32.add + (get_local $$sub99$i) + (get_local $$115) + ) + ) + (set_local $$neg103$i + (i32.sub + (i32.const 0) + (get_local $$115) + ) + ) + (set_local $$and104$i + (i32.and + (get_local $$add101$i) + (get_local $$neg103$i) + ) + ) + (set_local $$cmp105$i + (i32.lt_u + (get_local $$and104$i) + (i32.const 2147483647) + ) + ) + (if + (get_local $$cmp105$i) + (block + (set_local $$call107$i + (call $_sbrk + (get_local $$and104$i) + ) + ) + (set_local $$cmp108$i + (i32.eq + (get_local $$call107$i) + (i32.const -1) + ) + ) + (if + (get_local $$cmp108$i) + (block + (drop + (call $_sbrk + (get_local $$sub112$i) + ) + ) + (br $label$break$L279) + ) + (block + (set_local $$add110$i + (i32.add + (get_local $$and104$i) + (get_local $$ssize$2$ph$i) + ) + ) + (set_local $$ssize$5$i + (get_local $$add110$i) + ) + (br $do-once38) + ) + ) + ) + (set_local $$ssize$5$i + (get_local $$ssize$2$ph$i) + ) + ) + ) + (set_local $$ssize$5$i + (get_local $$ssize$2$ph$i) + ) + ) + ) + (set_local $$cmp118$i + (i32.eq + (get_local $$br$2$ph$i) + (i32.const -1) + ) + ) + (if + (i32.eqz + (get_local $$cmp118$i) + ) + (block + (set_local $$tbase$796$i + (get_local $$br$2$ph$i) + ) + (set_local $$tsize$795$i + (get_local $$ssize$5$i) + ) + (set_local $label + (i32.const 193) + ) + (br $label$break$L257) + ) + ) + ) + ) + ) + (set_local $$116 + (i32.load + (i32.const 620) + ) + ) + (set_local $$or$i$195 + (i32.or + (get_local $$116) + (i32.const 4) + ) + ) + (i32.store + (i32.const 620) + (get_local $$or$i$195) + ) + (set_local $label + (i32.const 190) + ) + ) + (set_local $label + (i32.const 190) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 190) + ) + (block + (set_local $$cmp127$i + (i32.lt_u + (get_local $$and11$i) + (i32.const 2147483647) + ) + ) + (if + (get_local $$cmp127$i) + (block + (set_local $$call131$i + (call $_sbrk + (get_local $$and11$i) + ) + ) + (set_local $$call132$i + (call $_sbrk + (i32.const 0) + ) + ) + (set_local $$cmp133$i$196 + (i32.ne + (get_local $$call131$i) + (i32.const -1) + ) + ) + (set_local $$cmp135$i + (i32.ne + (get_local $$call132$i) + (i32.const -1) + ) + ) + (set_local $$or$cond4$i + (i32.and + (get_local $$cmp133$i$196) + (get_local $$cmp135$i) + ) + ) + (set_local $$cmp137$i$197 + (i32.lt_u + (get_local $$call131$i) + (get_local $$call132$i) + ) + ) + (set_local $$or$cond7$i + (i32.and + (get_local $$cmp137$i$197) + (get_local $$or$cond4$i) + ) + ) + (if + (get_local $$or$cond7$i) + (block + (set_local $$sub$ptr$lhs$cast$i + (get_local $$call132$i) + ) + (set_local $$sub$ptr$rhs$cast$i + (get_local $$call131$i) + ) + (set_local $$sub$ptr$sub$i + (i32.sub + (get_local $$sub$ptr$lhs$cast$i) + (get_local $$sub$ptr$rhs$cast$i) + ) + ) + (set_local $$add140$i + (i32.add + (get_local $$nb$0) + (i32.const 40) + ) + ) + (set_local $$cmp141$not$i + (i32.gt_u + (get_local $$sub$ptr$sub$i) + (get_local $$add140$i) + ) + ) + (if + (get_local $$cmp141$not$i) + (block + (set_local $$tbase$796$i + (get_local $$call131$i) + ) + (set_local $$tsize$795$i + (get_local $$sub$ptr$sub$i) + ) + (set_local $label + (i32.const 193) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 193) + ) + (block + (set_local $$117 + (i32.load + (i32.const 608) + ) + ) + (set_local $$add150$i + (i32.add + (get_local $$117) + (get_local $$tsize$795$i) + ) + ) + (i32.store + (i32.const 608) + (get_local $$add150$i) + ) + (set_local $$118 + (i32.load + (i32.const 612) + ) + ) + (set_local $$cmp151$i + (i32.gt_u + (get_local $$add150$i) + (get_local $$118) + ) + ) + (if + (get_local $$cmp151$i) + (i32.store + (i32.const 612) + (get_local $$add150$i) + ) + ) + (set_local $$119 + (i32.load + (i32.const 200) + ) + ) + (set_local $$cmp157$i + (i32.eq + (get_local $$119) + (i32.const 0) + ) + ) + (block $do-once40 + (if + (get_local $$cmp157$i) + (block + (set_local $$120 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp159$i$199 + (i32.eq + (get_local $$120) + (i32.const 0) + ) + ) + (set_local $$cmp162$i$200 + (i32.lt_u + (get_local $$tbase$796$i) + (get_local $$120) + ) + ) + (set_local $$or$cond8$i + (i32.or + (get_local $$cmp159$i$199) + (get_local $$cmp162$i$200) + ) + ) + (if + (get_local $$or$cond8$i) + (i32.store + (i32.const 192) + (get_local $$tbase$796$i) + ) + ) + (i32.store + (i32.const 624) + (get_local $$tbase$796$i) + ) + (i32.store + (i32.const 628) + (get_local $$tsize$795$i) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (set_local $$121 + (i32.load + (i32.const 648) + ) + ) + (i32.store + (i32.const 212) + (get_local $$121) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (set_local $$i$01$i$i + (i32.const 0) + ) + (loop $while-in43 + (block $while-out42 + (set_local $$shl$i$i + (i32.shl + (get_local $$i$01$i$i) + (i32.const 1) + ) + ) + (set_local $$arrayidx$i$i + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl$i$i) + (i32.const 2) + ) + ) + ) + (set_local $$122 + (i32.add + (get_local $$arrayidx$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$122) + (get_local $$arrayidx$i$i) + ) + (set_local $$123 + (i32.add + (get_local $$arrayidx$i$i) + (i32.const 8) + ) + ) + (i32.store + (get_local $$123) + (get_local $$arrayidx$i$i) + ) + (set_local $$inc$i$i + (i32.add + (get_local $$i$01$i$i) + (i32.const 1) + ) + ) + (set_local $$exitcond$i$i + (i32.eq + (get_local $$inc$i$i) + (i32.const 32) + ) + ) + (if + (get_local $$exitcond$i$i) + (br $while-out42) + (set_local $$i$01$i$i + (get_local $$inc$i$i) + ) + ) + (br $while-in43) + ) + ) + (set_local $$sub172$i + (i32.add + (get_local $$tsize$795$i) + (i32.const -40) + ) + ) + (set_local $$add$ptr$i$11$i + (i32.add + (get_local $$tbase$796$i) + (i32.const 8) + ) + ) + (set_local $$124 + (get_local $$add$ptr$i$11$i) + ) + (set_local $$and$i$12$i + (i32.and + (get_local $$124) + (i32.const 7) + ) + ) + (set_local $$cmp$i$13$i + (i32.eq + (get_local $$and$i$12$i) + (i32.const 0) + ) + ) + (set_local $$125 + (i32.sub + (i32.const 0) + (get_local $$124) + ) + ) + (set_local $$and3$i$i + (i32.and + (get_local $$125) + (i32.const 7) + ) + ) + (set_local $$cond$i$i + (if (result i32) + (get_local $$cmp$i$13$i) + (i32.const 0) + (get_local $$and3$i$i) + ) + ) + (set_local $$add$ptr4$i$i + (i32.add + (get_local $$tbase$796$i) + (get_local $$cond$i$i) + ) + ) + (set_local $$sub5$i$i + (i32.sub + (get_local $$sub172$i) + (get_local $$cond$i$i) + ) + ) + (i32.store + (i32.const 200) + (get_local $$add$ptr4$i$i) + ) + (i32.store + (i32.const 188) + (get_local $$sub5$i$i) + ) + (set_local $$or$i$i + (i32.or + (get_local $$sub5$i$i) + (i32.const 1) + ) + ) + (set_local $$head$i$i + (i32.add + (get_local $$add$ptr4$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head$i$i) + (get_local $$or$i$i) + ) + (set_local $$add$ptr6$i$i + (i32.add + (get_local $$add$ptr4$i$i) + (get_local $$sub5$i$i) + ) + ) + (set_local $$head7$i$i + (i32.add + (get_local $$add$ptr6$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head7$i$i) + (i32.const 40) + ) + (set_local $$126 + (i32.load + (i32.const 664) + ) + ) + (i32.store + (i32.const 204) + (get_local $$126) + ) + ) + (block + (set_local $$sp$0108$i + (i32.const 624) + ) + (loop $while-in45 + (block $while-out44 + (set_local $$127 + (i32.load + (get_local $$sp$0108$i) + ) + ) + (set_local $$size188$i + (i32.add + (get_local $$sp$0108$i) + (i32.const 4) + ) + ) + (set_local $$128 + (i32.load + (get_local $$size188$i) + ) + ) + (set_local $$add$ptr189$i + (i32.add + (get_local $$127) + (get_local $$128) + ) + ) + (set_local $$cmp190$i + (i32.eq + (get_local $$tbase$796$i) + (get_local $$add$ptr189$i) + ) + ) + (if + (get_local $$cmp190$i) + (block + (set_local $$$lcssa + (get_local $$127) + ) + (set_local $$$lcssa290 + (get_local $$128) + ) + (set_local $$size188$i$lcssa + (get_local $$size188$i) + ) + (set_local $$sp$0108$i$lcssa + (get_local $$sp$0108$i) + ) + (set_local $label + (i32.const 203) + ) + (br $while-out44) + ) + ) + (set_local $$next$i + (i32.add + (get_local $$sp$0108$i) + (i32.const 8) + ) + ) + (set_local $$129 + (i32.load + (get_local $$next$i) + ) + ) + (set_local $$cmp186$i + (i32.eq + (get_local $$129) + (i32.const 0) + ) + ) + (if + (get_local $$cmp186$i) + (br $while-out44) + (set_local $$sp$0108$i + (get_local $$129) + ) + ) + (br $while-in45) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 203) + ) + (block + (set_local $$sflags193$i + (i32.add + (get_local $$sp$0108$i$lcssa) + (i32.const 12) + ) + ) + (set_local $$130 + (i32.load + (get_local $$sflags193$i) + ) + ) + (set_local $$and194$i$204 + (i32.and + (get_local $$130) + (i32.const 8) + ) + ) + (set_local $$tobool195$i + (i32.eq + (get_local $$and194$i$204) + (i32.const 0) + ) + ) + (if + (get_local $$tobool195$i) + (block + (set_local $$cmp203$i + (i32.ge_u + (get_local $$119) + (get_local $$$lcssa) + ) + ) + (set_local $$cmp209$i + (i32.lt_u + (get_local $$119) + (get_local $$tbase$796$i) + ) + ) + (set_local $$or$cond98$i + (i32.and + (get_local $$cmp209$i) + (get_local $$cmp203$i) + ) + ) + (if + (get_local $$or$cond98$i) + (block + (set_local $$add212$i + (i32.add + (get_local $$$lcssa290) + (get_local $$tsize$795$i) + ) + ) + (i32.store + (get_local $$size188$i$lcssa) + (get_local $$add212$i) + ) + (set_local $$131 + (i32.load + (i32.const 188) + ) + ) + (set_local $$add$ptr$i$21$i + (i32.add + (get_local $$119) + (i32.const 8) + ) + ) + (set_local $$132 + (get_local $$add$ptr$i$21$i) + ) + (set_local $$and$i$22$i + (i32.and + (get_local $$132) + (i32.const 7) + ) + ) + (set_local $$cmp$i$23$i + (i32.eq + (get_local $$and$i$22$i) + (i32.const 0) + ) + ) + (set_local $$133 + (i32.sub + (i32.const 0) + (get_local $$132) + ) + ) + (set_local $$and3$i$24$i + (i32.and + (get_local $$133) + (i32.const 7) + ) + ) + (set_local $$cond$i$25$i + (if (result i32) + (get_local $$cmp$i$23$i) + (i32.const 0) + (get_local $$and3$i$24$i) + ) + ) + (set_local $$add$ptr4$i$26$i + (i32.add + (get_local $$119) + (get_local $$cond$i$25$i) + ) + ) + (set_local $$add215$i + (i32.sub + (get_local $$tsize$795$i) + (get_local $$cond$i$25$i) + ) + ) + (set_local $$sub5$i$27$i + (i32.add + (get_local $$add215$i) + (get_local $$131) + ) + ) + (i32.store + (i32.const 200) + (get_local $$add$ptr4$i$26$i) + ) + (i32.store + (i32.const 188) + (get_local $$sub5$i$27$i) + ) + (set_local $$or$i$28$i + (i32.or + (get_local $$sub5$i$27$i) + (i32.const 1) + ) + ) + (set_local $$head$i$29$i + (i32.add + (get_local $$add$ptr4$i$26$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head$i$29$i) + (get_local $$or$i$28$i) + ) + (set_local $$add$ptr6$i$30$i + (i32.add + (get_local $$add$ptr4$i$26$i) + (get_local $$sub5$i$27$i) + ) + ) + (set_local $$head7$i$31$i + (i32.add + (get_local $$add$ptr6$i$30$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head7$i$31$i) + (i32.const 40) + ) + (set_local $$134 + (i32.load + (i32.const 664) + ) + ) + (i32.store + (i32.const 204) + (get_local $$134) + ) + (br $do-once40) + ) + ) + ) + ) + ) + ) + (set_local $$135 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp218$i + (i32.lt_u + (get_local $$tbase$796$i) + (get_local $$135) + ) + ) + (if + (get_local $$cmp218$i) + (block + (i32.store + (i32.const 192) + (get_local $$tbase$796$i) + ) + (set_local $$150 + (get_local $$tbase$796$i) + ) + ) + (set_local $$150 + (get_local $$135) + ) + ) + (set_local $$add$ptr227$i + (i32.add + (get_local $$tbase$796$i) + (get_local $$tsize$795$i) + ) + ) + (set_local $$sp$1107$i + (i32.const 624) + ) + (loop $while-in47 + (block $while-out46 + (set_local $$136 + (i32.load + (get_local $$sp$1107$i) + ) + ) + (set_local $$cmp228$i + (i32.eq + (get_local $$136) + (get_local $$add$ptr227$i) + ) + ) + (if + (get_local $$cmp228$i) + (block + (set_local $$base226$i$lcssa + (get_local $$sp$1107$i) + ) + (set_local $$sp$1107$i$lcssa + (get_local $$sp$1107$i) + ) + (set_local $label + (i32.const 211) + ) + (br $while-out46) + ) + ) + (set_local $$next231$i + (i32.add + (get_local $$sp$1107$i) + (i32.const 8) + ) + ) + (set_local $$137 + (i32.load + (get_local $$next231$i) + ) + ) + (set_local $$cmp224$i + (i32.eq + (get_local $$137) + (i32.const 0) + ) + ) + (if + (get_local $$cmp224$i) + (block + (set_local $$sp$0$i$i$i + (i32.const 624) + ) + (br $while-out46) + ) + (set_local $$sp$1107$i + (get_local $$137) + ) + ) + (br $while-in47) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 211) + ) + (block + (set_local $$sflags235$i + (i32.add + (get_local $$sp$1107$i$lcssa) + (i32.const 12) + ) + ) + (set_local $$138 + (i32.load + (get_local $$sflags235$i) + ) + ) + (set_local $$and236$i + (i32.and + (get_local $$138) + (i32.const 8) + ) + ) + (set_local $$tobool237$i + (i32.eq + (get_local $$and236$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool237$i) + (block + (i32.store + (get_local $$base226$i$lcssa) + (get_local $$tbase$796$i) + ) + (set_local $$size245$i + (i32.add + (get_local $$sp$1107$i$lcssa) + (i32.const 4) + ) + ) + (set_local $$139 + (i32.load + (get_local $$size245$i) + ) + ) + (set_local $$add246$i + (i32.add + (get_local $$139) + (get_local $$tsize$795$i) + ) + ) + (i32.store + (get_local $$size245$i) + (get_local $$add246$i) + ) + (set_local $$add$ptr$i$32$i + (i32.add + (get_local $$tbase$796$i) + (i32.const 8) + ) + ) + (set_local $$140 + (get_local $$add$ptr$i$32$i) + ) + (set_local $$and$i$33$i + (i32.and + (get_local $$140) + (i32.const 7) + ) + ) + (set_local $$cmp$i$34$i + (i32.eq + (get_local $$and$i$33$i) + (i32.const 0) + ) + ) + (set_local $$141 + (i32.sub + (i32.const 0) + (get_local $$140) + ) + ) + (set_local $$and3$i$35$i + (i32.and + (get_local $$141) + (i32.const 7) + ) + ) + (set_local $$cond$i$36$i + (if (result i32) + (get_local $$cmp$i$34$i) + (i32.const 0) + (get_local $$and3$i$35$i) + ) + ) + (set_local $$add$ptr4$i$37$i + (i32.add + (get_local $$tbase$796$i) + (get_local $$cond$i$36$i) + ) + ) + (set_local $$add$ptr5$i$i + (i32.add + (get_local $$add$ptr227$i) + (i32.const 8) + ) + ) + (set_local $$142 + (get_local $$add$ptr5$i$i) + ) + (set_local $$and6$i$38$i + (i32.and + (get_local $$142) + (i32.const 7) + ) + ) + (set_local $$cmp7$i$i + (i32.eq + (get_local $$and6$i$38$i) + (i32.const 0) + ) + ) + (set_local $$143 + (i32.sub + (i32.const 0) + (get_local $$142) + ) + ) + (set_local $$and13$i$i + (i32.and + (get_local $$143) + (i32.const 7) + ) + ) + (set_local $$cond15$i$i + (if (result i32) + (get_local $$cmp7$i$i) + (i32.const 0) + (get_local $$and13$i$i) + ) + ) + (set_local $$add$ptr16$i$i + (i32.add + (get_local $$add$ptr227$i) + (get_local $$cond15$i$i) + ) + ) + (set_local $$sub$ptr$lhs$cast$i$39$i + (get_local $$add$ptr16$i$i) + ) + (set_local $$sub$ptr$rhs$cast$i$40$i + (get_local $$add$ptr4$i$37$i) + ) + (set_local $$sub$ptr$sub$i$41$i + (i32.sub + (get_local $$sub$ptr$lhs$cast$i$39$i) + (get_local $$sub$ptr$rhs$cast$i$40$i) + ) + ) + (set_local $$add$ptr17$i$i + (i32.add + (get_local $$add$ptr4$i$37$i) + (get_local $$nb$0) + ) + ) + (set_local $$sub18$i$i + (i32.sub + (get_local $$sub$ptr$sub$i$41$i) + (get_local $$nb$0) + ) + ) + (set_local $$or19$i$i + (i32.or + (get_local $$nb$0) + (i32.const 3) + ) + ) + (set_local $$head$i$42$i + (i32.add + (get_local $$add$ptr4$i$37$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head$i$42$i) + (get_local $$or19$i$i) + ) + (set_local $$cmp20$i$i + (i32.eq + (get_local $$add$ptr16$i$i) + (get_local $$119) + ) + ) + (block $do-once48 + (if + (get_local $$cmp20$i$i) + (block + (set_local $$144 + (i32.load + (i32.const 188) + ) + ) + (set_local $$add$i$i + (i32.add + (get_local $$144) + (get_local $$sub18$i$i) + ) + ) + (i32.store + (i32.const 188) + (get_local $$add$i$i) + ) + (i32.store + (i32.const 200) + (get_local $$add$ptr17$i$i) + ) + (set_local $$or22$i$i + (i32.or + (get_local $$add$i$i) + (i32.const 1) + ) + ) + (set_local $$head23$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head23$i$i) + (get_local $$or22$i$i) + ) + ) + (block + (set_local $$145 + (i32.load + (i32.const 196) + ) + ) + (set_local $$cmp24$i$i + (i32.eq + (get_local $$add$ptr16$i$i) + (get_local $$145) + ) + ) + (if + (get_local $$cmp24$i$i) + (block + (set_local $$146 + (i32.load + (i32.const 184) + ) + ) + (set_local $$add26$i$i + (i32.add + (get_local $$146) + (get_local $$sub18$i$i) + ) + ) + (i32.store + (i32.const 184) + (get_local $$add26$i$i) + ) + (i32.store + (i32.const 196) + (get_local $$add$ptr17$i$i) + ) + (set_local $$or28$i$i + (i32.or + (get_local $$add26$i$i) + (i32.const 1) + ) + ) + (set_local $$head29$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head29$i$i) + (get_local $$or28$i$i) + ) + (set_local $$add$ptr30$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (get_local $$add26$i$i) + ) + ) + (i32.store + (get_local $$add$ptr30$i$i) + (get_local $$add26$i$i) + ) + (br $do-once48) + ) + ) + (set_local $$head32$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 4) + ) + ) + (set_local $$147 + (i32.load + (get_local $$head32$i$i) + ) + ) + (set_local $$and33$i$i + (i32.and + (get_local $$147) + (i32.const 3) + ) + ) + (set_local $$cmp34$i$i + (i32.eq + (get_local $$and33$i$i) + (i32.const 1) + ) + ) + (if + (get_local $$cmp34$i$i) + (block + (set_local $$and37$i$i + (i32.and + (get_local $$147) + (i32.const -8) + ) + ) + (set_local $$shr$i$45$i + (i32.shr_u + (get_local $$147) + (i32.const 3) + ) + ) + (set_local $$cmp38$i$i + (i32.lt_u + (get_local $$147) + (i32.const 256) + ) + ) + (block $label$break$L331 + (if + (get_local $$cmp38$i$i) + (block + (set_local $$fd$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 8) + ) + ) + (set_local $$148 + (i32.load + (get_local $$fd$i$i) + ) + ) + (set_local $$bk$i$46$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 12) + ) + ) + (set_local $$149 + (i32.load + (get_local $$bk$i$46$i) + ) + ) + (set_local $$shl$i$47$i + (i32.shl + (get_local $$shr$i$45$i) + (i32.const 1) + ) + ) + (set_local $$arrayidx$i$48$i + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl$i$47$i) + (i32.const 2) + ) + ) + ) + (set_local $$cmp41$i$i + (i32.eq + (get_local $$148) + (get_local $$arrayidx$i$48$i) + ) + ) + (block $do-once51 + (if + (i32.eqz + (get_local $$cmp41$i$i) + ) + (block + (set_local $$cmp42$i$i + (i32.lt_u + (get_local $$148) + (get_local $$150) + ) + ) + (if + (get_local $$cmp42$i$i) + (call $_abort) + ) + (set_local $$bk43$i$i + (i32.add + (get_local $$148) + (i32.const 12) + ) + ) + (set_local $$151 + (i32.load + (get_local $$bk43$i$i) + ) + ) + (set_local $$cmp44$i$i + (i32.eq + (get_local $$151) + (get_local $$add$ptr16$i$i) + ) + ) + (if + (get_local $$cmp44$i$i) + (br $do-once51) + ) + (call $_abort) + ) + ) + ) + (set_local $$cmp46$i$49$i + (i32.eq + (get_local $$149) + (get_local $$148) + ) + ) + (if + (get_local $$cmp46$i$49$i) + (block + (set_local $$shl48$i$i + (i32.shl + (i32.const 1) + (get_local $$shr$i$45$i) + ) + ) + (set_local $$neg$i$i + (i32.xor + (get_local $$shl48$i$i) + (i32.const -1) + ) + ) + (set_local $$152 + (i32.load + (i32.const 176) + ) + ) + (set_local $$and49$i$i + (i32.and + (get_local $$152) + (get_local $$neg$i$i) + ) + ) + (i32.store + (i32.const 176) + (get_local $$and49$i$i) + ) + (br $label$break$L331) + ) + ) + (set_local $$cmp54$i$i + (i32.eq + (get_local $$149) + (get_local $$arrayidx$i$48$i) + ) + ) + (block $do-once53 + (if + (get_local $$cmp54$i$i) + (block + (set_local $$$pre5$i$i + (i32.add + (get_local $$149) + (i32.const 8) + ) + ) + (set_local $$fd68$pre$phi$i$iZ2D + (get_local $$$pre5$i$i) + ) + ) + (block + (set_local $$cmp57$i$i + (i32.lt_u + (get_local $$149) + (get_local $$150) + ) + ) + (if + (get_local $$cmp57$i$i) + (call $_abort) + ) + (set_local $$fd59$i$i + (i32.add + (get_local $$149) + (i32.const 8) + ) + ) + (set_local $$153 + (i32.load + (get_local $$fd59$i$i) + ) + ) + (set_local $$cmp60$i$i + (i32.eq + (get_local $$153) + (get_local $$add$ptr16$i$i) + ) + ) + (if + (get_local $$cmp60$i$i) + (block + (set_local $$fd68$pre$phi$i$iZ2D + (get_local $$fd59$i$i) + ) + (br $do-once53) + ) + ) + (call $_abort) + ) + ) + ) + (set_local $$bk67$i$i + (i32.add + (get_local $$148) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk67$i$i) + (get_local $$149) + ) + (i32.store + (get_local $$fd68$pre$phi$i$iZ2D) + (get_local $$148) + ) + ) + (block + (set_local $$parent$i$51$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 24) + ) + ) + (set_local $$154 + (i32.load + (get_local $$parent$i$51$i) + ) + ) + (set_local $$bk74$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 12) + ) + ) + (set_local $$155 + (i32.load + (get_local $$bk74$i$i) + ) + ) + (set_local $$cmp75$i$i + (i32.eq + (get_local $$155) + (get_local $$add$ptr16$i$i) + ) + ) + (block $do-once55 + (if + (get_local $$cmp75$i$i) + (block + (set_local $$child$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 16) + ) + ) + (set_local $$arrayidx96$i$i + (i32.add + (get_local $$child$i$i) + (i32.const 4) + ) + ) + (set_local $$159 + (i32.load + (get_local $$arrayidx96$i$i) + ) + ) + (set_local $$cmp97$i$i + (i32.eq + (get_local $$159) + (i32.const 0) + ) + ) + (if + (get_local $$cmp97$i$i) + (block + (set_local $$160 + (i32.load + (get_local $$child$i$i) + ) + ) + (set_local $$cmp100$i$i + (i32.eq + (get_local $$160) + (i32.const 0) + ) + ) + (if + (get_local $$cmp100$i$i) + (block + (set_local $$R$3$i$i + (i32.const 0) + ) + (br $do-once55) + ) + (block + (set_local $$R$1$i$i + (get_local $$160) + ) + (set_local $$RP$1$i$i + (get_local $$child$i$i) + ) + ) + ) + ) + (block + (set_local $$R$1$i$i + (get_local $$159) + ) + (set_local $$RP$1$i$i + (get_local $$arrayidx96$i$i) + ) + ) + ) + (loop $while-in58 + (block $while-out57 + (set_local $$arrayidx103$i$i + (i32.add + (get_local $$R$1$i$i) + (i32.const 20) + ) + ) + (set_local $$161 + (i32.load + (get_local $$arrayidx103$i$i) + ) + ) + (set_local $$cmp104$i$i + (i32.eq + (get_local $$161) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp104$i$i) + ) + (block + (set_local $$R$1$i$i + (get_local $$161) + ) + (set_local $$RP$1$i$i + (get_local $$arrayidx103$i$i) + ) + (br $while-in58) + ) + ) + (set_local $$arrayidx107$i$i + (i32.add + (get_local $$R$1$i$i) + (i32.const 16) + ) + ) + (set_local $$162 + (i32.load + (get_local $$arrayidx107$i$i) + ) + ) + (set_local $$cmp108$i$i + (i32.eq + (get_local $$162) + (i32.const 0) + ) + ) + (if + (get_local $$cmp108$i$i) + (block + (set_local $$R$1$i$i$lcssa + (get_local $$R$1$i$i) + ) + (set_local $$RP$1$i$i$lcssa + (get_local $$RP$1$i$i) + ) + (br $while-out57) + ) + (block + (set_local $$R$1$i$i + (get_local $$162) + ) + (set_local $$RP$1$i$i + (get_local $$arrayidx107$i$i) + ) + ) + ) + (br $while-in58) + ) + ) + (set_local $$cmp112$i$i + (i32.lt_u + (get_local $$RP$1$i$i$lcssa) + (get_local $$150) + ) + ) + (if + (get_local $$cmp112$i$i) + (call $_abort) + (block + (i32.store + (get_local $$RP$1$i$i$lcssa) + (i32.const 0) + ) + (set_local $$R$3$i$i + (get_local $$R$1$i$i$lcssa) + ) + (br $do-once55) + ) + ) + ) + (block + (set_local $$fd78$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 8) + ) + ) + (set_local $$156 + (i32.load + (get_local $$fd78$i$i) + ) + ) + (set_local $$cmp81$i$i + (i32.lt_u + (get_local $$156) + (get_local $$150) + ) + ) + (if + (get_local $$cmp81$i$i) + (call $_abort) + ) + (set_local $$bk82$i$i + (i32.add + (get_local $$156) + (i32.const 12) + ) + ) + (set_local $$157 + (i32.load + (get_local $$bk82$i$i) + ) + ) + (set_local $$cmp83$i$i + (i32.eq + (get_local $$157) + (get_local $$add$ptr16$i$i) + ) + ) + (if + (i32.eqz + (get_local $$cmp83$i$i) + ) + (call $_abort) + ) + (set_local $$fd85$i$i + (i32.add + (get_local $$155) + (i32.const 8) + ) + ) + (set_local $$158 + (i32.load + (get_local $$fd85$i$i) + ) + ) + (set_local $$cmp86$i$i + (i32.eq + (get_local $$158) + (get_local $$add$ptr16$i$i) + ) + ) + (if + (get_local $$cmp86$i$i) + (block + (i32.store + (get_local $$bk82$i$i) + (get_local $$155) + ) + (i32.store + (get_local $$fd85$i$i) + (get_local $$156) + ) + (set_local $$R$3$i$i + (get_local $$155) + ) + (br $do-once55) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$cmp120$i$53$i + (i32.eq + (get_local $$154) + (i32.const 0) + ) + ) + (if + (get_local $$cmp120$i$53$i) + (br $label$break$L331) + ) + (set_local $$index$i$54$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 28) + ) + ) + (set_local $$163 + (i32.load + (get_local $$index$i$54$i) + ) + ) + (set_local $$arrayidx123$i$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$163) + (i32.const 2) + ) + ) + ) + (set_local $$164 + (i32.load + (get_local $$arrayidx123$i$i) + ) + ) + (set_local $$cmp124$i$i + (i32.eq + (get_local $$add$ptr16$i$i) + (get_local $$164) + ) + ) + (block $do-once59 + (if + (get_local $$cmp124$i$i) + (block + (i32.store + (get_local $$arrayidx123$i$i) + (get_local $$R$3$i$i) + ) + (set_local $$cond2$i$i + (i32.eq + (get_local $$R$3$i$i) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cond2$i$i) + ) + (br $do-once59) + ) + (set_local $$shl131$i$i + (i32.shl + (i32.const 1) + (get_local $$163) + ) + ) + (set_local $$neg132$i$i + (i32.xor + (get_local $$shl131$i$i) + (i32.const -1) + ) + ) + (set_local $$165 + (i32.load + (i32.const 180) + ) + ) + (set_local $$and133$i$i + (i32.and + (get_local $$165) + (get_local $$neg132$i$i) + ) + ) + (i32.store + (i32.const 180) + (get_local $$and133$i$i) + ) + (br $label$break$L331) + ) + (block + (set_local $$166 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp137$i$i + (i32.lt_u + (get_local $$154) + (get_local $$166) + ) + ) + (if + (get_local $$cmp137$i$i) + (call $_abort) + ) + (set_local $$arrayidx143$i$i + (i32.add + (get_local $$154) + (i32.const 16) + ) + ) + (set_local $$167 + (i32.load + (get_local $$arrayidx143$i$i) + ) + ) + (set_local $$cmp144$i$i + (i32.eq + (get_local $$167) + (get_local $$add$ptr16$i$i) + ) + ) + (if + (get_local $$cmp144$i$i) + (i32.store + (get_local $$arrayidx143$i$i) + (get_local $$R$3$i$i) + ) + (block + (set_local $$arrayidx151$i$i + (i32.add + (get_local $$154) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx151$i$i) + (get_local $$R$3$i$i) + ) + ) + ) + (set_local $$cmp156$i$i + (i32.eq + (get_local $$R$3$i$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp156$i$i) + (br $label$break$L331) + ) + ) + ) + ) + (set_local $$168 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp160$i$i + (i32.lt_u + (get_local $$R$3$i$i) + (get_local $$168) + ) + ) + (if + (get_local $$cmp160$i$i) + (call $_abort) + ) + (set_local $$parent165$i$i + (i32.add + (get_local $$R$3$i$i) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent165$i$i) + (get_local $$154) + ) + (set_local $$child166$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (i32.const 16) + ) + ) + (set_local $$169 + (i32.load + (get_local $$child166$i$i) + ) + ) + (set_local $$cmp168$i$i + (i32.eq + (get_local $$169) + (i32.const 0) + ) + ) + (block $do-once61 + (if + (i32.eqz + (get_local $$cmp168$i$i) + ) + (block + (set_local $$cmp172$i$i + (i32.lt_u + (get_local $$169) + (get_local $$168) + ) + ) + (if + (get_local $$cmp172$i$i) + (call $_abort) + (block + (set_local $$arrayidx178$i$i + (i32.add + (get_local $$R$3$i$i) + (i32.const 16) + ) + ) + (i32.store + (get_local $$arrayidx178$i$i) + (get_local $$169) + ) + (set_local $$parent179$i$i + (i32.add + (get_local $$169) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent179$i$i) + (get_local $$R$3$i$i) + ) + (br $do-once61) + ) + ) + ) + ) + ) + (set_local $$arrayidx184$i$i + (i32.add + (get_local $$child166$i$i) + (i32.const 4) + ) + ) + (set_local $$170 + (i32.load + (get_local $$arrayidx184$i$i) + ) + ) + (set_local $$cmp185$i$i + (i32.eq + (get_local $$170) + (i32.const 0) + ) + ) + (if + (get_local $$cmp185$i$i) + (br $label$break$L331) + ) + (set_local $$171 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp189$i$i + (i32.lt_u + (get_local $$170) + (get_local $$171) + ) + ) + (if + (get_local $$cmp189$i$i) + (call $_abort) + (block + (set_local $$arrayidx195$i$i + (i32.add + (get_local $$R$3$i$i) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx195$i$i) + (get_local $$170) + ) + (set_local $$parent196$i$i + (i32.add + (get_local $$170) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent196$i$i) + (get_local $$R$3$i$i) + ) + (br $label$break$L331) + ) + ) + ) + ) + ) + (set_local $$add$ptr205$i$i + (i32.add + (get_local $$add$ptr16$i$i) + (get_local $$and37$i$i) + ) + ) + (set_local $$add206$i$i + (i32.add + (get_local $$and37$i$i) + (get_local $$sub18$i$i) + ) + ) + (set_local $$oldfirst$0$i$i + (get_local $$add$ptr205$i$i) + ) + (set_local $$qsize$0$i$i + (get_local $$add206$i$i) + ) + ) + (block + (set_local $$oldfirst$0$i$i + (get_local $$add$ptr16$i$i) + ) + (set_local $$qsize$0$i$i + (get_local $$sub18$i$i) + ) + ) + ) + (set_local $$head208$i$i + (i32.add + (get_local $$oldfirst$0$i$i) + (i32.const 4) + ) + ) + (set_local $$172 + (i32.load + (get_local $$head208$i$i) + ) + ) + (set_local $$and209$i$i + (i32.and + (get_local $$172) + (i32.const -2) + ) + ) + (i32.store + (get_local $$head208$i$i) + (get_local $$and209$i$i) + ) + (set_local $$or210$i$i + (i32.or + (get_local $$qsize$0$i$i) + (i32.const 1) + ) + ) + (set_local $$head211$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head211$i$i) + (get_local $$or210$i$i) + ) + (set_local $$add$ptr212$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (get_local $$qsize$0$i$i) + ) + ) + (i32.store + (get_local $$add$ptr212$i$i) + (get_local $$qsize$0$i$i) + ) + (set_local $$shr214$i$i + (i32.shr_u + (get_local $$qsize$0$i$i) + (i32.const 3) + ) + ) + (set_local $$cmp215$i$i + (i32.lt_u + (get_local $$qsize$0$i$i) + (i32.const 256) + ) + ) + (if + (get_local $$cmp215$i$i) + (block + (set_local $$shl221$i$i + (i32.shl + (get_local $$shr214$i$i) + (i32.const 1) + ) + ) + (set_local $$arrayidx223$i$i + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl221$i$i) + (i32.const 2) + ) + ) + ) + (set_local $$173 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shl226$i$i + (i32.shl + (i32.const 1) + (get_local $$shr214$i$i) + ) + ) + (set_local $$and227$i$i + (i32.and + (get_local $$173) + (get_local $$shl226$i$i) + ) + ) + (set_local $$tobool228$i$i + (i32.eq + (get_local $$and227$i$i) + (i32.const 0) + ) + ) + (block $do-once63 + (if + (get_local $$tobool228$i$i) + (block + (set_local $$or232$i$i + (i32.or + (get_local $$173) + (get_local $$shl226$i$i) + ) + ) + (i32.store + (i32.const 176) + (get_local $$or232$i$i) + ) + (set_local $$$pre$i$56$i + (i32.add + (get_local $$arrayidx223$i$i) + (i32.const 8) + ) + ) + (set_local $$$pre$phi$i$57$iZ2D + (get_local $$$pre$i$56$i) + ) + (set_local $$F224$0$i$i + (get_local $$arrayidx223$i$i) + ) + ) + (block + (set_local $$174 + (i32.add + (get_local $$arrayidx223$i$i) + (i32.const 8) + ) + ) + (set_local $$175 + (i32.load + (get_local $$174) + ) + ) + (set_local $$176 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp236$i$i + (i32.lt_u + (get_local $$175) + (get_local $$176) + ) + ) + (if + (i32.eqz + (get_local $$cmp236$i$i) + ) + (block + (set_local $$$pre$phi$i$57$iZ2D + (get_local $$174) + ) + (set_local $$F224$0$i$i + (get_local $$175) + ) + (br $do-once63) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store + (get_local $$$pre$phi$i$57$iZ2D) + (get_local $$add$ptr17$i$i) + ) + (set_local $$bk246$i$i + (i32.add + (get_local $$F224$0$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk246$i$i) + (get_local $$add$ptr17$i$i) + ) + (set_local $$fd247$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd247$i$i) + (get_local $$F224$0$i$i) + ) + (set_local $$bk248$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk248$i$i) + (get_local $$arrayidx223$i$i) + ) + (br $do-once48) + ) + ) + (set_local $$shr253$i$i + (i32.shr_u + (get_local $$qsize$0$i$i) + (i32.const 8) + ) + ) + (set_local $$cmp254$i$i + (i32.eq + (get_local $$shr253$i$i) + (i32.const 0) + ) + ) + (block $do-once65 + (if + (get_local $$cmp254$i$i) + (set_local $$I252$0$i$i + (i32.const 0) + ) + (block + (set_local $$cmp258$i$i + (i32.gt_u + (get_local $$qsize$0$i$i) + (i32.const 16777215) + ) + ) + (if + (get_local $$cmp258$i$i) + (block + (set_local $$I252$0$i$i + (i32.const 31) + ) + (br $do-once65) + ) + ) + (set_local $$sub262$i$i + (i32.add + (get_local $$shr253$i$i) + (i32.const 1048320) + ) + ) + (set_local $$shr263$i$i + (i32.shr_u + (get_local $$sub262$i$i) + (i32.const 16) + ) + ) + (set_local $$and264$i$i + (i32.and + (get_local $$shr263$i$i) + (i32.const 8) + ) + ) + (set_local $$shl265$i$i + (i32.shl + (get_local $$shr253$i$i) + (get_local $$and264$i$i) + ) + ) + (set_local $$sub266$i$i + (i32.add + (get_local $$shl265$i$i) + (i32.const 520192) + ) + ) + (set_local $$shr267$i$i + (i32.shr_u + (get_local $$sub266$i$i) + (i32.const 16) + ) + ) + (set_local $$and268$i$i + (i32.and + (get_local $$shr267$i$i) + (i32.const 4) + ) + ) + (set_local $$add269$i$i + (i32.or + (get_local $$and268$i$i) + (get_local $$and264$i$i) + ) + ) + (set_local $$shl270$i$i + (i32.shl + (get_local $$shl265$i$i) + (get_local $$and268$i$i) + ) + ) + (set_local $$sub271$i$i + (i32.add + (get_local $$shl270$i$i) + (i32.const 245760) + ) + ) + (set_local $$shr272$i$i + (i32.shr_u + (get_local $$sub271$i$i) + (i32.const 16) + ) + ) + (set_local $$and273$i$i + (i32.and + (get_local $$shr272$i$i) + (i32.const 2) + ) + ) + (set_local $$add274$i$i + (i32.or + (get_local $$add269$i$i) + (get_local $$and273$i$i) + ) + ) + (set_local $$sub275$i$i + (i32.sub + (i32.const 14) + (get_local $$add274$i$i) + ) + ) + (set_local $$shl276$i$i + (i32.shl + (get_local $$shl270$i$i) + (get_local $$and273$i$i) + ) + ) + (set_local $$shr277$i$i + (i32.shr_u + (get_local $$shl276$i$i) + (i32.const 15) + ) + ) + (set_local $$add278$i$i + (i32.add + (get_local $$sub275$i$i) + (get_local $$shr277$i$i) + ) + ) + (set_local $$shl279$i$i + (i32.shl + (get_local $$add278$i$i) + (i32.const 1) + ) + ) + (set_local $$add280$i$i + (i32.add + (get_local $$add278$i$i) + (i32.const 7) + ) + ) + (set_local $$shr281$i$i + (i32.shr_u + (get_local $$qsize$0$i$i) + (get_local $$add280$i$i) + ) + ) + (set_local $$and282$i$i + (i32.and + (get_local $$shr281$i$i) + (i32.const 1) + ) + ) + (set_local $$add283$i$i + (i32.or + (get_local $$and282$i$i) + (get_local $$shl279$i$i) + ) + ) + (set_local $$I252$0$i$i + (get_local $$add283$i$i) + ) + ) + ) + ) + (set_local $$arrayidx287$i$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$I252$0$i$i) + (i32.const 2) + ) + ) + ) + (set_local $$index288$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 28) + ) + ) + (i32.store + (get_local $$index288$i$i) + (get_local $$I252$0$i$i) + ) + (set_local $$child289$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 16) + ) + ) + (set_local $$arrayidx290$i$i + (i32.add + (get_local $$child289$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$arrayidx290$i$i) + (i32.const 0) + ) + (i32.store + (get_local $$child289$i$i) + (i32.const 0) + ) + (set_local $$177 + (i32.load + (i32.const 180) + ) + ) + (set_local $$shl294$i$i + (i32.shl + (i32.const 1) + (get_local $$I252$0$i$i) + ) + ) + (set_local $$and295$i$i + (i32.and + (get_local $$177) + (get_local $$shl294$i$i) + ) + ) + (set_local $$tobool296$i$i + (i32.eq + (get_local $$and295$i$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool296$i$i) + (block + (set_local $$or300$i$i + (i32.or + (get_local $$177) + (get_local $$shl294$i$i) + ) + ) + (i32.store + (i32.const 180) + (get_local $$or300$i$i) + ) + (i32.store + (get_local $$arrayidx287$i$i) + (get_local $$add$ptr17$i$i) + ) + (set_local $$parent301$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent301$i$i) + (get_local $$arrayidx287$i$i) + ) + (set_local $$bk302$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk302$i$i) + (get_local $$add$ptr17$i$i) + ) + (set_local $$fd303$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd303$i$i) + (get_local $$add$ptr17$i$i) + ) + (br $do-once48) + ) + ) + (set_local $$178 + (i32.load + (get_local $$arrayidx287$i$i) + ) + ) + (set_local $$cmp306$i$i + (i32.eq + (get_local $$I252$0$i$i) + (i32.const 31) + ) + ) + (set_local $$shr310$i$i + (i32.shr_u + (get_local $$I252$0$i$i) + (i32.const 1) + ) + ) + (set_local $$sub313$i$i + (i32.sub + (i32.const 25) + (get_local $$shr310$i$i) + ) + ) + (set_local $$cond315$i$i + (if (result i32) + (get_local $$cmp306$i$i) + (i32.const 0) + (get_local $$sub313$i$i) + ) + ) + (set_local $$shl316$i$i + (i32.shl + (get_local $$qsize$0$i$i) + (get_local $$cond315$i$i) + ) + ) + (set_local $$K305$0$i$i + (get_local $$shl316$i$i) + ) + (set_local $$T$0$i$58$i + (get_local $$178) + ) + (loop $while-in68 + (block $while-out67 + (set_local $$head317$i$i + (i32.add + (get_local $$T$0$i$58$i) + (i32.const 4) + ) + ) + (set_local $$179 + (i32.load + (get_local $$head317$i$i) + ) + ) + (set_local $$and318$i$i + (i32.and + (get_local $$179) + (i32.const -8) + ) + ) + (set_local $$cmp319$i$i + (i32.eq + (get_local $$and318$i$i) + (get_local $$qsize$0$i$i) + ) + ) + (if + (get_local $$cmp319$i$i) + (block + (set_local $$T$0$i$58$i$lcssa + (get_local $$T$0$i$58$i) + ) + (set_local $label + (i32.const 281) + ) + (br $while-out67) + ) + ) + (set_local $$shr322$i$i + (i32.shr_u + (get_local $$K305$0$i$i) + (i32.const 31) + ) + ) + (set_local $$arrayidx325$i$i + (i32.add + (i32.add + (get_local $$T$0$i$58$i) + (i32.const 16) + ) + (i32.shl + (get_local $$shr322$i$i) + (i32.const 2) + ) + ) + ) + (set_local $$shl326$i$i + (i32.shl + (get_local $$K305$0$i$i) + (i32.const 1) + ) + ) + (set_local $$180 + (i32.load + (get_local $$arrayidx325$i$i) + ) + ) + (set_local $$cmp327$i$i + (i32.eq + (get_local $$180) + (i32.const 0) + ) + ) + (if + (get_local $$cmp327$i$i) + (block + (set_local $$T$0$i$58$i$lcssa283 + (get_local $$T$0$i$58$i) + ) + (set_local $$arrayidx325$i$i$lcssa + (get_local $$arrayidx325$i$i) + ) + (set_local $label + (i32.const 278) + ) + (br $while-out67) + ) + (block + (set_local $$K305$0$i$i + (get_local $$shl326$i$i) + ) + (set_local $$T$0$i$58$i + (get_local $$180) + ) + ) + ) + (br $while-in68) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 278) + ) + (block + (set_local $$181 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp332$i$i + (i32.lt_u + (get_local $$arrayidx325$i$i$lcssa) + (get_local $$181) + ) + ) + (if + (get_local $$cmp332$i$i) + (call $_abort) + (block + (i32.store + (get_local $$arrayidx325$i$i$lcssa) + (get_local $$add$ptr17$i$i) + ) + (set_local $$parent337$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent337$i$i) + (get_local $$T$0$i$58$i$lcssa283) + ) + (set_local $$bk338$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk338$i$i) + (get_local $$add$ptr17$i$i) + ) + (set_local $$fd339$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd339$i$i) + (get_local $$add$ptr17$i$i) + ) + (br $do-once48) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 281) + ) + (block + (set_local $$fd344$i$i + (i32.add + (get_local $$T$0$i$58$i$lcssa) + (i32.const 8) + ) + ) + (set_local $$182 + (i32.load + (get_local $$fd344$i$i) + ) + ) + (set_local $$183 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp350$i$i + (i32.ge_u + (get_local $$182) + (get_local $$183) + ) + ) + (set_local $$not$cmp346$i$i + (i32.ge_u + (get_local $$T$0$i$58$i$lcssa) + (get_local $$183) + ) + ) + (set_local $$184 + (i32.and + (get_local $$cmp350$i$i) + (get_local $$not$cmp346$i$i) + ) + ) + (if + (get_local $$184) + (block + (set_local $$bk357$i$i + (i32.add + (get_local $$182) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk357$i$i) + (get_local $$add$ptr17$i$i) + ) + (i32.store + (get_local $$fd344$i$i) + (get_local $$add$ptr17$i$i) + ) + (set_local $$fd359$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd359$i$i) + (get_local $$182) + ) + (set_local $$bk360$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk360$i$i) + (get_local $$T$0$i$58$i$lcssa) + ) + (set_local $$parent361$i$i + (i32.add + (get_local $$add$ptr17$i$i) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent361$i$i) + (i32.const 0) + ) + (br $do-once48) + ) + (call $_abort) + ) + ) + ) + ) + ) + ) + ) + (set_local $$add$ptr369$i$i + (i32.add + (get_local $$add$ptr4$i$37$i) + (i32.const 8) + ) + ) + (set_local $$retval$0 + (get_local $$add$ptr369$i$i) + ) + (return + (get_local $$retval$0) + ) + ) + (set_local $$sp$0$i$i$i + (i32.const 624) + ) + ) + ) + ) + (loop $while-in70 + (block $while-out69 + (set_local $$185 + (i32.load + (get_local $$sp$0$i$i$i) + ) + ) + (set_local $$cmp$i$i$i + (i32.gt_u + (get_local $$185) + (get_local $$119) + ) + ) + (if + (i32.eqz + (get_local $$cmp$i$i$i) + ) + (block + (set_local $$size$i$i$i + (i32.add + (get_local $$sp$0$i$i$i) + (i32.const 4) + ) + ) + (set_local $$186 + (i32.load + (get_local $$size$i$i$i) + ) + ) + (set_local $$add$ptr$i$i$i + (i32.add + (get_local $$185) + (get_local $$186) + ) + ) + (set_local $$cmp2$i$i$i + (i32.gt_u + (get_local $$add$ptr$i$i$i) + (get_local $$119) + ) + ) + (if + (get_local $$cmp2$i$i$i) + (block + (set_local $$add$ptr$i$i$i$lcssa + (get_local $$add$ptr$i$i$i) + ) + (br $while-out69) + ) + ) + ) + ) + (set_local $$next$i$i$i + (i32.add + (get_local $$sp$0$i$i$i) + (i32.const 8) + ) + ) + (set_local $$187 + (i32.load + (get_local $$next$i$i$i) + ) + ) + (set_local $$sp$0$i$i$i + (get_local $$187) + ) + (br $while-in70) + ) + ) + (set_local $$add$ptr2$i$i + (i32.add + (get_local $$add$ptr$i$i$i$lcssa) + (i32.const -47) + ) + ) + (set_local $$add$ptr3$i$i + (i32.add + (get_local $$add$ptr2$i$i) + (i32.const 8) + ) + ) + (set_local $$188 + (get_local $$add$ptr3$i$i) + ) + (set_local $$and$i$14$i + (i32.and + (get_local $$188) + (i32.const 7) + ) + ) + (set_local $$cmp$i$15$i + (i32.eq + (get_local $$and$i$14$i) + (i32.const 0) + ) + ) + (set_local $$189 + (i32.sub + (i32.const 0) + (get_local $$188) + ) + ) + (set_local $$and6$i$i + (i32.and + (get_local $$189) + (i32.const 7) + ) + ) + (set_local $$cond$i$16$i + (if (result i32) + (get_local $$cmp$i$15$i) + (i32.const 0) + (get_local $$and6$i$i) + ) + ) + (set_local $$add$ptr7$i$i + (i32.add + (get_local $$add$ptr2$i$i) + (get_local $$cond$i$16$i) + ) + ) + (set_local $$add$ptr8$i122$i + (i32.add + (get_local $$119) + (i32.const 16) + ) + ) + (set_local $$cmp9$i$i + (i32.lt_u + (get_local $$add$ptr7$i$i) + (get_local $$add$ptr8$i122$i) + ) + ) + (set_local $$cond13$i$i + (if (result i32) + (get_local $$cmp9$i$i) + (get_local $$119) + (get_local $$add$ptr7$i$i) + ) + ) + (set_local $$add$ptr14$i$i + (i32.add + (get_local $$cond13$i$i) + (i32.const 8) + ) + ) + (set_local $$add$ptr15$i$i + (i32.add + (get_local $$cond13$i$i) + (i32.const 24) + ) + ) + (set_local $$sub16$i$i + (i32.add + (get_local $$tsize$795$i) + (i32.const -40) + ) + ) + (set_local $$add$ptr$i$1$i$i + (i32.add + (get_local $$tbase$796$i) + (i32.const 8) + ) + ) + (set_local $$190 + (get_local $$add$ptr$i$1$i$i) + ) + (set_local $$and$i$i$i + (i32.and + (get_local $$190) + (i32.const 7) + ) + ) + (set_local $$cmp$i$2$i$i + (i32.eq + (get_local $$and$i$i$i) + (i32.const 0) + ) + ) + (set_local $$191 + (i32.sub + (i32.const 0) + (get_local $$190) + ) + ) + (set_local $$and3$i$i$i + (i32.and + (get_local $$191) + (i32.const 7) + ) + ) + (set_local $$cond$i$i$i + (if (result i32) + (get_local $$cmp$i$2$i$i) + (i32.const 0) + (get_local $$and3$i$i$i) + ) + ) + (set_local $$add$ptr4$i$i$i + (i32.add + (get_local $$tbase$796$i) + (get_local $$cond$i$i$i) + ) + ) + (set_local $$sub5$i$i$i + (i32.sub + (get_local $$sub16$i$i) + (get_local $$cond$i$i$i) + ) + ) + (i32.store + (i32.const 200) + (get_local $$add$ptr4$i$i$i) + ) + (i32.store + (i32.const 188) + (get_local $$sub5$i$i$i) + ) + (set_local $$or$i$i$i + (i32.or + (get_local $$sub5$i$i$i) + (i32.const 1) + ) + ) + (set_local $$head$i$i$i + (i32.add + (get_local $$add$ptr4$i$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head$i$i$i) + (get_local $$or$i$i$i) + ) + (set_local $$add$ptr6$i$i$i + (i32.add + (get_local $$add$ptr4$i$i$i) + (get_local $$sub5$i$i$i) + ) + ) + (set_local $$head7$i$i$i + (i32.add + (get_local $$add$ptr6$i$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head7$i$i$i) + (i32.const 40) + ) + (set_local $$192 + (i32.load + (i32.const 664) + ) + ) + (i32.store + (i32.const 204) + (get_local $$192) + ) + (set_local $$head$i$17$i + (i32.add + (get_local $$cond13$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head$i$17$i) + (i32.const 27) + ) + (i32.store + (get_local $$add$ptr14$i$i) + (i32.load + (i32.const 624) + ) + ) + (i32.store + (i32.add + (get_local $$add$ptr14$i$i) + (i32.const 4) + ) + (i32.load + (i32.add + (i32.const 624) + (i32.const 4) + ) + ) + ) + (i32.store + (i32.add + (get_local $$add$ptr14$i$i) + (i32.const 8) + ) + (i32.load + (i32.add + (i32.const 624) + (i32.const 8) + ) + ) + ) + (i32.store + (i32.add + (get_local $$add$ptr14$i$i) + (i32.const 12) + ) + (i32.load + (i32.add + (i32.const 624) + (i32.const 12) + ) + ) + ) + (i32.store + (i32.const 624) + (get_local $$tbase$796$i) + ) + (i32.store + (i32.const 628) + (get_local $$tsize$795$i) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 632) + (get_local $$add$ptr14$i$i) + ) + (set_local $$p$0$i$i + (get_local $$add$ptr15$i$i) + ) + (loop $while-in72 + (block $while-out71 + (set_local $$add$ptr24$i$i + (i32.add + (get_local $$p$0$i$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$add$ptr24$i$i) + (i32.const 7) + ) + (set_local $$193 + (i32.add + (get_local $$add$ptr24$i$i) + (i32.const 4) + ) + ) + (set_local $$cmp27$i$i + (i32.lt_u + (get_local $$193) + (get_local $$add$ptr$i$i$i$lcssa) + ) + ) + (if + (get_local $$cmp27$i$i) + (set_local $$p$0$i$i + (get_local $$add$ptr24$i$i) + ) + (br $while-out71) + ) + (br $while-in72) + ) + ) + (set_local $$cmp28$i$i + (i32.eq + (get_local $$cond13$i$i) + (get_local $$119) + ) + ) + (if + (i32.eqz + (get_local $$cmp28$i$i) + ) + (block + (set_local $$sub$ptr$lhs$cast$i$i + (get_local $$cond13$i$i) + ) + (set_local $$sub$ptr$rhs$cast$i$i + (get_local $$119) + ) + (set_local $$sub$ptr$sub$i$i + (i32.sub + (get_local $$sub$ptr$lhs$cast$i$i) + (get_local $$sub$ptr$rhs$cast$i$i) + ) + ) + (set_local $$194 + (i32.load + (get_local $$head$i$17$i) + ) + ) + (set_local $$and32$i$i + (i32.and + (get_local $$194) + (i32.const -2) + ) + ) + (i32.store + (get_local $$head$i$17$i) + (get_local $$and32$i$i) + ) + (set_local $$or33$i$i + (i32.or + (get_local $$sub$ptr$sub$i$i) + (i32.const 1) + ) + ) + (set_local $$head34$i$i + (i32.add + (get_local $$119) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head34$i$i) + (get_local $$or33$i$i) + ) + (i32.store + (get_local $$cond13$i$i) + (get_local $$sub$ptr$sub$i$i) + ) + (set_local $$shr$i$i + (i32.shr_u + (get_local $$sub$ptr$sub$i$i) + (i32.const 3) + ) + ) + (set_local $$cmp36$i$i + (i32.lt_u + (get_local $$sub$ptr$sub$i$i) + (i32.const 256) + ) + ) + (if + (get_local $$cmp36$i$i) + (block + (set_local $$shl$i$19$i + (i32.shl + (get_local $$shr$i$i) + (i32.const 1) + ) + ) + (set_local $$arrayidx$i$20$i + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl$i$19$i) + (i32.const 2) + ) + ) + ) + (set_local $$195 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shl39$i$i + (i32.shl + (i32.const 1) + (get_local $$shr$i$i) + ) + ) + (set_local $$and40$i$i + (i32.and + (get_local $$195) + (get_local $$shl39$i$i) + ) + ) + (set_local $$tobool$i$i + (i32.eq + (get_local $$and40$i$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool$i$i) + (block + (set_local $$or44$i$i + (i32.or + (get_local $$195) + (get_local $$shl39$i$i) + ) + ) + (i32.store + (i32.const 176) + (get_local $$or44$i$i) + ) + (set_local $$$pre$i$i + (i32.add + (get_local $$arrayidx$i$20$i) + (i32.const 8) + ) + ) + (set_local $$$pre$phi$i$iZ2D + (get_local $$$pre$i$i) + ) + (set_local $$F$0$i$i + (get_local $$arrayidx$i$20$i) + ) + ) + (block + (set_local $$196 + (i32.add + (get_local $$arrayidx$i$20$i) + (i32.const 8) + ) + ) + (set_local $$197 + (i32.load + (get_local $$196) + ) + ) + (set_local $$198 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp46$i$i + (i32.lt_u + (get_local $$197) + (get_local $$198) + ) + ) + (if + (get_local $$cmp46$i$i) + (call $_abort) + (block + (set_local $$$pre$phi$i$iZ2D + (get_local $$196) + ) + (set_local $$F$0$i$i + (get_local $$197) + ) + ) + ) + ) + ) + (i32.store + (get_local $$$pre$phi$i$iZ2D) + (get_local $$119) + ) + (set_local $$bk$i$i + (i32.add + (get_local $$F$0$i$i) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk$i$i) + (get_local $$119) + ) + (set_local $$fd54$i$i + (i32.add + (get_local $$119) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd54$i$i) + (get_local $$F$0$i$i) + ) + (set_local $$bk55$i$i + (i32.add + (get_local $$119) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk55$i$i) + (get_local $$arrayidx$i$20$i) + ) + (br $do-once40) + ) + ) + (set_local $$shr58$i$i + (i32.shr_u + (get_local $$sub$ptr$sub$i$i) + (i32.const 8) + ) + ) + (set_local $$cmp59$i$i + (i32.eq + (get_local $$shr58$i$i) + (i32.const 0) + ) + ) + (if + (get_local $$cmp59$i$i) + (set_local $$I57$0$i$i + (i32.const 0) + ) + (block + (set_local $$cmp63$i$i + (i32.gt_u + (get_local $$sub$ptr$sub$i$i) + (i32.const 16777215) + ) + ) + (if + (get_local $$cmp63$i$i) + (set_local $$I57$0$i$i + (i32.const 31) + ) + (block + (set_local $$sub67$i$i + (i32.add + (get_local $$shr58$i$i) + (i32.const 1048320) + ) + ) + (set_local $$shr68$i$i + (i32.shr_u + (get_local $$sub67$i$i) + (i32.const 16) + ) + ) + (set_local $$and69$i$i + (i32.and + (get_local $$shr68$i$i) + (i32.const 8) + ) + ) + (set_local $$shl70$i$i + (i32.shl + (get_local $$shr58$i$i) + (get_local $$and69$i$i) + ) + ) + (set_local $$sub71$i$i + (i32.add + (get_local $$shl70$i$i) + (i32.const 520192) + ) + ) + (set_local $$shr72$i$i + (i32.shr_u + (get_local $$sub71$i$i) + (i32.const 16) + ) + ) + (set_local $$and73$i$i + (i32.and + (get_local $$shr72$i$i) + (i32.const 4) + ) + ) + (set_local $$add74$i$i + (i32.or + (get_local $$and73$i$i) + (get_local $$and69$i$i) + ) + ) + (set_local $$shl75$i$i + (i32.shl + (get_local $$shl70$i$i) + (get_local $$and73$i$i) + ) + ) + (set_local $$sub76$i$i + (i32.add + (get_local $$shl75$i$i) + (i32.const 245760) + ) + ) + (set_local $$shr77$i$i + (i32.shr_u + (get_local $$sub76$i$i) + (i32.const 16) + ) + ) + (set_local $$and78$i$i + (i32.and + (get_local $$shr77$i$i) + (i32.const 2) + ) + ) + (set_local $$add79$i$i + (i32.or + (get_local $$add74$i$i) + (get_local $$and78$i$i) + ) + ) + (set_local $$sub80$i$i + (i32.sub + (i32.const 14) + (get_local $$add79$i$i) + ) + ) + (set_local $$shl81$i$i + (i32.shl + (get_local $$shl75$i$i) + (get_local $$and78$i$i) + ) + ) + (set_local $$shr82$i$i + (i32.shr_u + (get_local $$shl81$i$i) + (i32.const 15) + ) + ) + (set_local $$add83$i$i + (i32.add + (get_local $$sub80$i$i) + (get_local $$shr82$i$i) + ) + ) + (set_local $$shl84$i$i + (i32.shl + (get_local $$add83$i$i) + (i32.const 1) + ) + ) + (set_local $$add85$i$i + (i32.add + (get_local $$add83$i$i) + (i32.const 7) + ) + ) + (set_local $$shr86$i$i + (i32.shr_u + (get_local $$sub$ptr$sub$i$i) + (get_local $$add85$i$i) + ) + ) + (set_local $$and87$i$i + (i32.and + (get_local $$shr86$i$i) + (i32.const 1) + ) + ) + (set_local $$add88$i$i + (i32.or + (get_local $$and87$i$i) + (get_local $$shl84$i$i) + ) + ) + (set_local $$I57$0$i$i + (get_local $$add88$i$i) + ) + ) + ) + ) + ) + (set_local $$arrayidx91$i$i + (i32.add + (i32.const 480) + (i32.shl + (get_local $$I57$0$i$i) + (i32.const 2) + ) + ) + ) + (set_local $$index$i$i + (i32.add + (get_local $$119) + (i32.const 28) + ) + ) + (i32.store + (get_local $$index$i$i) + (get_local $$I57$0$i$i) + ) + (set_local $$arrayidx92$i$i + (i32.add + (get_local $$119) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx92$i$i) + (i32.const 0) + ) + (i32.store + (get_local $$add$ptr8$i122$i) + (i32.const 0) + ) + (set_local $$199 + (i32.load + (i32.const 180) + ) + ) + (set_local $$shl95$i$i + (i32.shl + (i32.const 1) + (get_local $$I57$0$i$i) + ) + ) + (set_local $$and96$i$i + (i32.and + (get_local $$199) + (get_local $$shl95$i$i) + ) + ) + (set_local $$tobool97$i$i + (i32.eq + (get_local $$and96$i$i) + (i32.const 0) + ) + ) + (if + (get_local $$tobool97$i$i) + (block + (set_local $$or101$i$i + (i32.or + (get_local $$199) + (get_local $$shl95$i$i) + ) + ) + (i32.store + (i32.const 180) + (get_local $$or101$i$i) + ) + (i32.store + (get_local $$arrayidx91$i$i) + (get_local $$119) + ) + (set_local $$parent$i$i + (i32.add + (get_local $$119) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent$i$i) + (get_local $$arrayidx91$i$i) + ) + (set_local $$bk102$i$i + (i32.add + (get_local $$119) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk102$i$i) + (get_local $$119) + ) + (set_local $$fd103$i$i + (i32.add + (get_local $$119) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd103$i$i) + (get_local $$119) + ) + (br $do-once40) + ) + ) + (set_local $$200 + (i32.load + (get_local $$arrayidx91$i$i) + ) + ) + (set_local $$cmp106$i$i + (i32.eq + (get_local $$I57$0$i$i) + (i32.const 31) + ) + ) + (set_local $$shr110$i$i + (i32.shr_u + (get_local $$I57$0$i$i) + (i32.const 1) + ) + ) + (set_local $$sub113$i$i + (i32.sub + (i32.const 25) + (get_local $$shr110$i$i) + ) + ) + (set_local $$cond115$i$i + (if (result i32) + (get_local $$cmp106$i$i) + (i32.const 0) + (get_local $$sub113$i$i) + ) + ) + (set_local $$shl116$i$i + (i32.shl + (get_local $$sub$ptr$sub$i$i) + (get_local $$cond115$i$i) + ) + ) + (set_local $$K105$0$i$i + (get_local $$shl116$i$i) + ) + (set_local $$T$0$i$i + (get_local $$200) + ) + (loop $while-in74 + (block $while-out73 + (set_local $$head118$i$i + (i32.add + (get_local $$T$0$i$i) + (i32.const 4) + ) + ) + (set_local $$201 + (i32.load + (get_local $$head118$i$i) + ) + ) + (set_local $$and119$i$i + (i32.and + (get_local $$201) + (i32.const -8) + ) + ) + (set_local $$cmp120$i$i + (i32.eq + (get_local $$and119$i$i) + (get_local $$sub$ptr$sub$i$i) + ) + ) + (if + (get_local $$cmp120$i$i) + (block + (set_local $$T$0$i$i$lcssa + (get_local $$T$0$i$i) + ) + (set_local $label + (i32.const 307) + ) + (br $while-out73) + ) + ) + (set_local $$shr123$i$i + (i32.shr_u + (get_local $$K105$0$i$i) + (i32.const 31) + ) + ) + (set_local $$arrayidx126$i$i + (i32.add + (i32.add + (get_local $$T$0$i$i) + (i32.const 16) + ) + (i32.shl + (get_local $$shr123$i$i) + (i32.const 2) + ) + ) + ) + (set_local $$shl127$i$i + (i32.shl + (get_local $$K105$0$i$i) + (i32.const 1) + ) + ) + (set_local $$202 + (i32.load + (get_local $$arrayidx126$i$i) + ) + ) + (set_local $$cmp128$i$i + (i32.eq + (get_local $$202) + (i32.const 0) + ) + ) + (if + (get_local $$cmp128$i$i) + (block + (set_local $$T$0$i$i$lcssa284 + (get_local $$T$0$i$i) + ) + (set_local $$arrayidx126$i$i$lcssa + (get_local $$arrayidx126$i$i) + ) + (set_local $label + (i32.const 304) + ) + (br $while-out73) + ) + (block + (set_local $$K105$0$i$i + (get_local $$shl127$i$i) + ) + (set_local $$T$0$i$i + (get_local $$202) + ) + ) + ) + (br $while-in74) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 304) + ) + (block + (set_local $$203 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp133$i$i + (i32.lt_u + (get_local $$arrayidx126$i$i$lcssa) + (get_local $$203) + ) + ) + (if + (get_local $$cmp133$i$i) + (call $_abort) + (block + (i32.store + (get_local $$arrayidx126$i$i$lcssa) + (get_local $$119) + ) + (set_local $$parent138$i$i + (i32.add + (get_local $$119) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent138$i$i) + (get_local $$T$0$i$i$lcssa284) + ) + (set_local $$bk139$i$i + (i32.add + (get_local $$119) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk139$i$i) + (get_local $$119) + ) + (set_local $$fd140$i$i + (i32.add + (get_local $$119) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd140$i$i) + (get_local $$119) + ) + (br $do-once40) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 307) + ) + (block + (set_local $$fd148$i$i + (i32.add + (get_local $$T$0$i$i$lcssa) + (i32.const 8) + ) + ) + (set_local $$204 + (i32.load + (get_local $$fd148$i$i) + ) + ) + (set_local $$205 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp153$i$i + (i32.ge_u + (get_local $$204) + (get_local $$205) + ) + ) + (set_local $$not$cmp150$i$i + (i32.ge_u + (get_local $$T$0$i$i$lcssa) + (get_local $$205) + ) + ) + (set_local $$206 + (i32.and + (get_local $$cmp153$i$i) + (get_local $$not$cmp150$i$i) + ) + ) + (if + (get_local $$206) + (block + (set_local $$bk158$i$i + (i32.add + (get_local $$204) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk158$i$i) + (get_local $$119) + ) + (i32.store + (get_local $$fd148$i$i) + (get_local $$119) + ) + (set_local $$fd160$i$i + (i32.add + (get_local $$119) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd160$i$i) + (get_local $$204) + ) + (set_local $$bk161$i$i + (i32.add + (get_local $$119) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk161$i$i) + (get_local $$T$0$i$i$lcssa) + ) + (set_local $$parent162$i$i + (i32.add + (get_local $$119) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent162$i$i) + (i32.const 0) + ) + (br $do-once40) + ) + (call $_abort) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $$207 + (i32.load + (i32.const 188) + ) + ) + (set_local $$cmp257$i + (i32.gt_u + (get_local $$207) + (get_local $$nb$0) + ) + ) + (if + (get_local $$cmp257$i) + (block + (set_local $$sub260$i + (i32.sub + (get_local $$207) + (get_local $$nb$0) + ) + ) + (i32.store + (i32.const 188) + (get_local $$sub260$i) + ) + (set_local $$208 + (i32.load + (i32.const 200) + ) + ) + (set_local $$add$ptr262$i + (i32.add + (get_local $$208) + (get_local $$nb$0) + ) + ) + (i32.store + (i32.const 200) + (get_local $$add$ptr262$i) + ) + (set_local $$or264$i + (i32.or + (get_local $$sub260$i) + (i32.const 1) + ) + ) + (set_local $$head265$i + (i32.add + (get_local $$add$ptr262$i) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head265$i) + (get_local $$or264$i) + ) + (set_local $$or267$i + (i32.or + (get_local $$nb$0) + (i32.const 3) + ) + ) + (set_local $$head268$i + (i32.add + (get_local $$208) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head268$i) + (get_local $$or267$i) + ) + (set_local $$add$ptr269$i + (i32.add + (get_local $$208) + (i32.const 8) + ) + ) + (set_local $$retval$0 + (get_local $$add$ptr269$i) + ) + (return + (get_local $$retval$0) + ) + ) + ) + ) + ) + (set_local $$call275$i + (call $___errno_location) + ) + (i32.store + (get_local $$call275$i) + (i32.const 12) + ) + (set_local $$retval$0 + (i32.const 0) + ) + (return + (get_local $$retval$0) + ) + ) + (func $_free (; 59 ;) (param $$mem i32) + (local $$$pre i32) + (local $$$pre$phiZ2D i32) + (local $$$pre312 i32) + (local $$$pre313 i32) + (local $$0 i32) + (local $$1 i32) + (local $$10 i32) + (local $$11 i32) + (local $$12 i32) + (local $$13 i32) + (local $$14 i32) + (local $$15 i32) + (local $$16 i32) + (local $$17 i32) + (local $$18 i32) + (local $$19 i32) + (local $$2 i32) + (local $$20 i32) + (local $$21 i32) + (local $$22 i32) + (local $$23 i32) + (local $$24 i32) + (local $$25 i32) + (local $$26 i32) + (local $$27 i32) + (local $$28 i32) + (local $$29 i32) + (local $$3 i32) + (local $$30 i32) + (local $$31 i32) + (local $$32 i32) + (local $$33 i32) + (local $$34 i32) + (local $$35 i32) + (local $$36 i32) + (local $$37 i32) + (local $$38 i32) + (local $$39 i32) + (local $$4 i32) + (local $$40 i32) + (local $$41 i32) + (local $$42 i32) + (local $$43 i32) + (local $$44 i32) + (local $$45 i32) + (local $$46 i32) + (local $$47 i32) + (local $$48 i32) + (local $$49 i32) + (local $$5 i32) + (local $$50 i32) + (local $$51 i32) + (local $$52 i32) + (local $$53 i32) + (local $$54 i32) + (local $$55 i32) + (local $$56 i32) + (local $$57 i32) + (local $$58 i32) + (local $$59 i32) + (local $$6 i32) + (local $$60 i32) + (local $$61 i32) + (local $$62 i32) + (local $$63 i32) + (local $$64 i32) + (local $$65 i32) + (local $$66 i32) + (local $$67 i32) + (local $$68 i32) + (local $$69 i32) + (local $$7 i32) + (local $$70 i32) + (local $$71 i32) + (local $$72 i32) + (local $$73 i32) + (local $$74 i32) + (local $$8 i32) + (local $$9 i32) + (local $$F510$0 i32) + (local $$I534$0 i32) + (local $$K583$0 i32) + (local $$R$1 i32) + (local $$R$1$lcssa i32) + (local $$R$3 i32) + (local $$R332$1 i32) + (local $$R332$1$lcssa i32) + (local $$R332$3 i32) + (local $$RP$1 i32) + (local $$RP$1$lcssa i32) + (local $$RP360$1 i32) + (local $$RP360$1$lcssa i32) + (local $$T$0 i32) + (local $$T$0$lcssa i32) + (local $$T$0$lcssa319 i32) + (local $$add$ptr i32) + (local $$add$ptr16 i32) + (local $$add$ptr217 i32) + (local $$add$ptr261 i32) + (local $$add$ptr482 i32) + (local $$add$ptr498 i32) + (local $$add$ptr6 i32) + (local $$add17 i32) + (local $$add246 i32) + (local $$add258 i32) + (local $$add267 i32) + (local $$add550 i32) + (local $$add555 i32) + (local $$add559 i32) + (local $$add561 i32) + (local $$add564 i32) + (local $$and i32) + (local $$and140 i32) + (local $$and210 i32) + (local $$and215 i32) + (local $$and232 i32) + (local $$and240 i32) + (local $$and266 i32) + (local $$and301 i32) + (local $$and410 i32) + (local $$and46 i32) + (local $$and495 i32) + (local $$and5 i32) + (local $$and512 i32) + (local $$and545 i32) + (local $$and549 i32) + (local $$and554 i32) + (local $$and563 i32) + (local $$and574 i32) + (local $$and592 i32) + (local $$and8 i32) + (local $$arrayidx i32) + (local $$arrayidx108 i32) + (local $$arrayidx113 i32) + (local $$arrayidx130 i32) + (local $$arrayidx149 i32) + (local $$arrayidx157 i32) + (local $$arrayidx182 i32) + (local $$arrayidx188 i32) + (local $$arrayidx198 i32) + (local $$arrayidx279 i32) + (local $$arrayidx362 i32) + (local $$arrayidx374 i32) + (local $$arrayidx379 i32) + (local $$arrayidx400 i32) + (local $$arrayidx419 i32) + (local $$arrayidx427 i32) + (local $$arrayidx454 i32) + (local $$arrayidx460 i32) + (local $$arrayidx470 i32) + (local $$arrayidx509 i32) + (local $$arrayidx567 i32) + (local $$arrayidx570 i32) + (local $$arrayidx599 i32) + (local $$arrayidx599$lcssa i32) + (local $$arrayidx99 i32) + (local $$bk i32) + (local $$bk275 i32) + (local $$bk286 i32) + (local $$bk321 i32) + (local $$bk333 i32) + (local $$bk34 i32) + (local $$bk343 i32) + (local $$bk529 i32) + (local $$bk531 i32) + (local $$bk580 i32) + (local $$bk611 i32) + (local $$bk631 i32) + (local $$bk634 i32) + (local $$bk66 i32) + (local $$bk73 i32) + (local $$bk82 i32) + (local $$child i32) + (local $$child171 i32) + (local $$child361 i32) + (local $$child443 i32) + (local $$child569 i32) + (local $$cmp i32) + (local $$cmp$i i32) + (local $$cmp1 i32) + (local $$cmp100 i32) + (local $$cmp104 i32) + (local $$cmp109 i32) + (local $$cmp114 i32) + (local $$cmp118 i32) + (local $$cmp127 i32) + (local $$cmp13 i32) + (local $$cmp131 i32) + (local $$cmp143 i32) + (local $$cmp150 i32) + (local $$cmp162 i32) + (local $$cmp165 i32) + (local $$cmp173 i32) + (local $$cmp176 i32) + (local $$cmp18 i32) + (local $$cmp189 i32) + (local $$cmp192 i32) + (local $$cmp2 i32) + (local $$cmp211 i32) + (local $$cmp22 i32) + (local $$cmp228 i32) + (local $$cmp243 i32) + (local $$cmp249 i32) + (local $$cmp25 i32) + (local $$cmp255 i32) + (local $$cmp269 i32) + (local $$cmp280 i32) + (local $$cmp283 i32) + (local $$cmp287 i32) + (local $$cmp29 i32) + (local $$cmp296 i32) + (local $$cmp305 i32) + (local $$cmp308 i32) + (local $$cmp31 i32) + (local $$cmp312 i32) + (local $$cmp334 i32) + (local $$cmp340 i32) + (local $$cmp344 i32) + (local $$cmp348 i32) + (local $$cmp35 i32) + (local $$cmp363 i32) + (local $$cmp368 i32) + (local $$cmp375 i32) + (local $$cmp380 i32) + (local $$cmp386 i32) + (local $$cmp395 i32) + (local $$cmp401 i32) + (local $$cmp413 i32) + (local $$cmp42 i32) + (local $$cmp420 i32) + (local $$cmp432 i32) + (local $$cmp435 i32) + (local $$cmp445 i32) + (local $$cmp448 i32) + (local $$cmp461 i32) + (local $$cmp464 i32) + (local $$cmp484 i32) + (local $$cmp50 i32) + (local $$cmp502 i32) + (local $$cmp519 i32) + (local $$cmp53 i32) + (local $$cmp536 i32) + (local $$cmp540 i32) + (local $$cmp57 i32) + (local $$cmp584 i32) + (local $$cmp593 i32) + (local $$cmp601 i32) + (local $$cmp605 i32) + (local $$cmp624 i32) + (local $$cmp640 i32) + (local $$cmp74 i32) + (local $$cmp80 i32) + (local $$cmp83 i32) + (local $$cmp87 i32) + (local $$cond i32) + (local $$cond291 i32) + (local $$cond292 i32) + (local $$dec i32) + (local $$fd i32) + (local $$fd273 i32) + (local $$fd311 i32) + (local $$fd322$pre$phiZ2D i32) + (local $$fd338 i32) + (local $$fd347 i32) + (local $$fd530 i32) + (local $$fd56 i32) + (local $$fd581 i32) + (local $$fd612 i32) + (local $$fd620 i32) + (local $$fd633 i32) + (local $$fd67$pre$phiZ2D i32) + (local $$fd78 i32) + (local $$fd86 i32) + (local $$head i32) + (local $$head209 i32) + (local $$head216 i32) + (local $$head231 i32) + (local $$head248 i32) + (local $$head260 i32) + (local $$head481 i32) + (local $$head497 i32) + (local $$head591 i32) + (local $$idx$neg i32) + (local $$index i32) + (local $$index399 i32) + (local $$index568 i32) + (local $$neg i32) + (local $$neg139 i32) + (local $$neg300 i32) + (local $$neg409 i32) + (local $$next4$i i32) + (local $$not$cmp621 i32) + (local $$or i32) + (local $$or247 i32) + (local $$or259 i32) + (local $$or480 i32) + (local $$or496 i32) + (local $$or516 i32) + (local $$or578 i32) + (local $$p$1 i32) + (local $$parent i32) + (local $$parent170 i32) + (local $$parent183 i32) + (local $$parent199 i32) + (local $$parent331 i32) + (local $$parent442 i32) + (local $$parent455 i32) + (local $$parent471 i32) + (local $$parent579 i32) + (local $$parent610 i32) + (local $$parent635 i32) + (local $$psize$1 i32) + (local $$psize$2 i32) + (local $$shl i32) + (local $$shl138 i32) + (local $$shl278 i32) + (local $$shl299 i32) + (local $$shl408 i32) + (local $$shl45 i32) + (local $$shl508 i32) + (local $$shl511 i32) + (local $$shl546 i32) + (local $$shl551 i32) + (local $$shl557 i32) + (local $$shl560 i32) + (local $$shl573 i32) + (local $$shl590 i32) + (local $$shl600 i32) + (local $$shr i32) + (local $$shr268 i32) + (local $$shr501 i32) + (local $$shr535 i32) + (local $$shr544 i32) + (local $$shr548 i32) + (local $$shr553 i32) + (local $$shr558 i32) + (local $$shr562 i32) + (local $$shr586 i32) + (local $$shr596 i32) + (local $$sp$0$i i32) + (local $$sp$0$in$i i32) + (local $$sub i32) + (local $$sub547 i32) + (local $$sub552 i32) + (local $$sub556 i32) + (local $$sub589 i32) + (local $$tobool233 i32) + (local $$tobool241 i32) + (local $$tobool513 i32) + (local $$tobool575 i32) + (local $$tobool9 i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$cmp + (i32.eq + (get_local $$mem) + (i32.const 0) + ) + ) + (if + (get_local $$cmp) + (return) + ) + (set_local $$add$ptr + (i32.add + (get_local $$mem) + (i32.const -8) + ) + ) + (set_local $$0 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp1 + (i32.lt_u + (get_local $$add$ptr) + (get_local $$0) + ) + ) + (if + (get_local $$cmp1) + (call $_abort) + ) + (set_local $$head + (i32.add + (get_local $$mem) + (i32.const -4) + ) + ) + (set_local $$1 + (i32.load + (get_local $$head) + ) + ) + (set_local $$and + (i32.and + (get_local $$1) + (i32.const 3) + ) + ) + (set_local $$cmp2 + (i32.eq + (get_local $$and) + (i32.const 1) + ) + ) + (if + (get_local $$cmp2) + (call $_abort) + ) + (set_local $$and5 + (i32.and + (get_local $$1) + (i32.const -8) + ) + ) + (set_local $$add$ptr6 + (i32.add + (get_local $$add$ptr) + (get_local $$and5) + ) + ) + (set_local $$and8 + (i32.and + (get_local $$1) + (i32.const 1) + ) + ) + (set_local $$tobool9 + (i32.eq + (get_local $$and8) + (i32.const 0) + ) + ) + (block $do-once + (if + (get_local $$tobool9) + (block + (set_local $$2 + (i32.load + (get_local $$add$ptr) + ) + ) + (set_local $$cmp13 + (i32.eq + (get_local $$and) + (i32.const 0) + ) + ) + (if + (get_local $$cmp13) + (return) + ) + (set_local $$idx$neg + (i32.sub + (i32.const 0) + (get_local $$2) + ) + ) + (set_local $$add$ptr16 + (i32.add + (get_local $$add$ptr) + (get_local $$idx$neg) + ) + ) + (set_local $$add17 + (i32.add + (get_local $$2) + (get_local $$and5) + ) + ) + (set_local $$cmp18 + (i32.lt_u + (get_local $$add$ptr16) + (get_local $$0) + ) + ) + (if + (get_local $$cmp18) + (call $_abort) + ) + (set_local $$3 + (i32.load + (i32.const 196) + ) + ) + (set_local $$cmp22 + (i32.eq + (get_local $$add$ptr16) + (get_local $$3) + ) + ) + (if + (get_local $$cmp22) + (block + (set_local $$head209 + (i32.add + (get_local $$add$ptr6) + (i32.const 4) + ) + ) + (set_local $$27 + (i32.load + (get_local $$head209) + ) + ) + (set_local $$and210 + (i32.and + (get_local $$27) + (i32.const 3) + ) + ) + (set_local $$cmp211 + (i32.eq + (get_local $$and210) + (i32.const 3) + ) + ) + (if + (i32.eqz + (get_local $$cmp211) + ) + (block + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 184) + (get_local $$add17) + ) + (set_local $$and215 + (i32.and + (get_local $$27) + (i32.const -2) + ) + ) + (i32.store + (get_local $$head209) + (get_local $$and215) + ) + (set_local $$or + (i32.or + (get_local $$add17) + (i32.const 1) + ) + ) + (set_local $$head216 + (i32.add + (get_local $$add$ptr16) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head216) + (get_local $$or) + ) + (set_local $$add$ptr217 + (i32.add + (get_local $$add$ptr16) + (get_local $$add17) + ) + ) + (i32.store + (get_local $$add$ptr217) + (get_local $$add17) + ) + (return) + ) + ) + (set_local $$shr + (i32.shr_u + (get_local $$2) + (i32.const 3) + ) + ) + (set_local $$cmp25 + (i32.lt_u + (get_local $$2) + (i32.const 256) + ) + ) + (if + (get_local $$cmp25) + (block + (set_local $$fd + (i32.add + (get_local $$add$ptr16) + (i32.const 8) + ) + ) + (set_local $$4 + (i32.load + (get_local $$fd) + ) + ) + (set_local $$bk + (i32.add + (get_local $$add$ptr16) + (i32.const 12) + ) + ) + (set_local $$5 + (i32.load + (get_local $$bk) + ) + ) + (set_local $$shl + (i32.shl + (get_local $$shr) + (i32.const 1) + ) + ) + (set_local $$arrayidx + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl) + (i32.const 2) + ) + ) + ) + (set_local $$cmp29 + (i32.eq + (get_local $$4) + (get_local $$arrayidx) + ) + ) + (if + (i32.eqz + (get_local $$cmp29) + ) + (block + (set_local $$cmp31 + (i32.lt_u + (get_local $$4) + (get_local $$0) + ) + ) + (if + (get_local $$cmp31) + (call $_abort) + ) + (set_local $$bk34 + (i32.add + (get_local $$4) + (i32.const 12) + ) + ) + (set_local $$6 + (i32.load + (get_local $$bk34) + ) + ) + (set_local $$cmp35 + (i32.eq + (get_local $$6) + (get_local $$add$ptr16) + ) + ) + (if + (i32.eqz + (get_local $$cmp35) + ) + (call $_abort) + ) + ) + ) + (set_local $$cmp42 + (i32.eq + (get_local $$5) + (get_local $$4) + ) + ) + (if + (get_local $$cmp42) + (block + (set_local $$shl45 + (i32.shl + (i32.const 1) + (get_local $$shr) + ) + ) + (set_local $$neg + (i32.xor + (get_local $$shl45) + (i32.const -1) + ) + ) + (set_local $$7 + (i32.load + (i32.const 176) + ) + ) + (set_local $$and46 + (i32.and + (get_local $$7) + (get_local $$neg) + ) + ) + (i32.store + (i32.const 176) + (get_local $$and46) + ) + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + (br $do-once) + ) + ) + (set_local $$cmp50 + (i32.eq + (get_local $$5) + (get_local $$arrayidx) + ) + ) + (if + (get_local $$cmp50) + (block + (set_local $$$pre313 + (i32.add + (get_local $$5) + (i32.const 8) + ) + ) + (set_local $$fd67$pre$phiZ2D + (get_local $$$pre313) + ) + ) + (block + (set_local $$cmp53 + (i32.lt_u + (get_local $$5) + (get_local $$0) + ) + ) + (if + (get_local $$cmp53) + (call $_abort) + ) + (set_local $$fd56 + (i32.add + (get_local $$5) + (i32.const 8) + ) + ) + (set_local $$8 + (i32.load + (get_local $$fd56) + ) + ) + (set_local $$cmp57 + (i32.eq + (get_local $$8) + (get_local $$add$ptr16) + ) + ) + (if + (get_local $$cmp57) + (set_local $$fd67$pre$phiZ2D + (get_local $$fd56) + ) + (call $_abort) + ) + ) + ) + (set_local $$bk66 + (i32.add + (get_local $$4) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk66) + (get_local $$5) + ) + (i32.store + (get_local $$fd67$pre$phiZ2D) + (get_local $$4) + ) + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + (br $do-once) + ) + ) + (set_local $$parent + (i32.add + (get_local $$add$ptr16) + (i32.const 24) + ) + ) + (set_local $$9 + (i32.load + (get_local $$parent) + ) + ) + (set_local $$bk73 + (i32.add + (get_local $$add$ptr16) + (i32.const 12) + ) + ) + (set_local $$10 + (i32.load + (get_local $$bk73) + ) + ) + (set_local $$cmp74 + (i32.eq + (get_local $$10) + (get_local $$add$ptr16) + ) + ) + (block $do-once0 + (if + (get_local $$cmp74) + (block + (set_local $$child + (i32.add + (get_local $$add$ptr16) + (i32.const 16) + ) + ) + (set_local $$arrayidx99 + (i32.add + (get_local $$child) + (i32.const 4) + ) + ) + (set_local $$14 + (i32.load + (get_local $$arrayidx99) + ) + ) + (set_local $$cmp100 + (i32.eq + (get_local $$14) + (i32.const 0) + ) + ) + (if + (get_local $$cmp100) + (block + (set_local $$15 + (i32.load + (get_local $$child) + ) + ) + (set_local $$cmp104 + (i32.eq + (get_local $$15) + (i32.const 0) + ) + ) + (if + (get_local $$cmp104) + (block + (set_local $$R$3 + (i32.const 0) + ) + (br $do-once0) + ) + (block + (set_local $$R$1 + (get_local $$15) + ) + (set_local $$RP$1 + (get_local $$child) + ) + ) + ) + ) + (block + (set_local $$R$1 + (get_local $$14) + ) + (set_local $$RP$1 + (get_local $$arrayidx99) + ) + ) + ) + (loop $while-in + (block $while-out + (set_local $$arrayidx108 + (i32.add + (get_local $$R$1) + (i32.const 20) + ) + ) + (set_local $$16 + (i32.load + (get_local $$arrayidx108) + ) + ) + (set_local $$cmp109 + (i32.eq + (get_local $$16) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp109) + ) + (block + (set_local $$R$1 + (get_local $$16) + ) + (set_local $$RP$1 + (get_local $$arrayidx108) + ) + (br $while-in) + ) + ) + (set_local $$arrayidx113 + (i32.add + (get_local $$R$1) + (i32.const 16) + ) + ) + (set_local $$17 + (i32.load + (get_local $$arrayidx113) + ) + ) + (set_local $$cmp114 + (i32.eq + (get_local $$17) + (i32.const 0) + ) + ) + (if + (get_local $$cmp114) + (block + (set_local $$R$1$lcssa + (get_local $$R$1) + ) + (set_local $$RP$1$lcssa + (get_local $$RP$1) + ) + (br $while-out) + ) + (block + (set_local $$R$1 + (get_local $$17) + ) + (set_local $$RP$1 + (get_local $$arrayidx113) + ) + ) + ) + (br $while-in) + ) + ) + (set_local $$cmp118 + (i32.lt_u + (get_local $$RP$1$lcssa) + (get_local $$0) + ) + ) + (if + (get_local $$cmp118) + (call $_abort) + (block + (i32.store + (get_local $$RP$1$lcssa) + (i32.const 0) + ) + (set_local $$R$3 + (get_local $$R$1$lcssa) + ) + (br $do-once0) + ) + ) + ) + (block + (set_local $$fd78 + (i32.add + (get_local $$add$ptr16) + (i32.const 8) + ) + ) + (set_local $$11 + (i32.load + (get_local $$fd78) + ) + ) + (set_local $$cmp80 + (i32.lt_u + (get_local $$11) + (get_local $$0) + ) + ) + (if + (get_local $$cmp80) + (call $_abort) + ) + (set_local $$bk82 + (i32.add + (get_local $$11) + (i32.const 12) + ) + ) + (set_local $$12 + (i32.load + (get_local $$bk82) + ) + ) + (set_local $$cmp83 + (i32.eq + (get_local $$12) + (get_local $$add$ptr16) + ) + ) + (if + (i32.eqz + (get_local $$cmp83) + ) + (call $_abort) + ) + (set_local $$fd86 + (i32.add + (get_local $$10) + (i32.const 8) + ) + ) + (set_local $$13 + (i32.load + (get_local $$fd86) + ) + ) + (set_local $$cmp87 + (i32.eq + (get_local $$13) + (get_local $$add$ptr16) + ) + ) + (if + (get_local $$cmp87) + (block + (i32.store + (get_local $$bk82) + (get_local $$10) + ) + (i32.store + (get_local $$fd86) + (get_local $$11) + ) + (set_local $$R$3 + (get_local $$10) + ) + (br $do-once0) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$cmp127 + (i32.eq + (get_local $$9) + (i32.const 0) + ) + ) + (if + (get_local $$cmp127) + (block + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + ) + (block + (set_local $$index + (i32.add + (get_local $$add$ptr16) + (i32.const 28) + ) + ) + (set_local $$18 + (i32.load + (get_local $$index) + ) + ) + (set_local $$arrayidx130 + (i32.add + (i32.const 480) + (i32.shl + (get_local $$18) + (i32.const 2) + ) + ) + ) + (set_local $$19 + (i32.load + (get_local $$arrayidx130) + ) + ) + (set_local $$cmp131 + (i32.eq + (get_local $$add$ptr16) + (get_local $$19) + ) + ) + (if + (get_local $$cmp131) + (block + (i32.store + (get_local $$arrayidx130) + (get_local $$R$3) + ) + (set_local $$cond291 + (i32.eq + (get_local $$R$3) + (i32.const 0) + ) + ) + (if + (get_local $$cond291) + (block + (set_local $$shl138 + (i32.shl + (i32.const 1) + (get_local $$18) + ) + ) + (set_local $$neg139 + (i32.xor + (get_local $$shl138) + (i32.const -1) + ) + ) + (set_local $$20 + (i32.load + (i32.const 180) + ) + ) + (set_local $$and140 + (i32.and + (get_local $$20) + (get_local $$neg139) + ) + ) + (i32.store + (i32.const 180) + (get_local $$and140) + ) + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + (br $do-once) + ) + ) + ) + (block + (set_local $$21 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp143 + (i32.lt_u + (get_local $$9) + (get_local $$21) + ) + ) + (if + (get_local $$cmp143) + (call $_abort) + ) + (set_local $$arrayidx149 + (i32.add + (get_local $$9) + (i32.const 16) + ) + ) + (set_local $$22 + (i32.load + (get_local $$arrayidx149) + ) + ) + (set_local $$cmp150 + (i32.eq + (get_local $$22) + (get_local $$add$ptr16) + ) + ) + (if + (get_local $$cmp150) + (i32.store + (get_local $$arrayidx149) + (get_local $$R$3) + ) + (block + (set_local $$arrayidx157 + (i32.add + (get_local $$9) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx157) + (get_local $$R$3) + ) + ) + ) + (set_local $$cmp162 + (i32.eq + (get_local $$R$3) + (i32.const 0) + ) + ) + (if + (get_local $$cmp162) + (block + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + (br $do-once) + ) + ) + ) + ) + (set_local $$23 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp165 + (i32.lt_u + (get_local $$R$3) + (get_local $$23) + ) + ) + (if + (get_local $$cmp165) + (call $_abort) + ) + (set_local $$parent170 + (i32.add + (get_local $$R$3) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent170) + (get_local $$9) + ) + (set_local $$child171 + (i32.add + (get_local $$add$ptr16) + (i32.const 16) + ) + ) + (set_local $$24 + (i32.load + (get_local $$child171) + ) + ) + (set_local $$cmp173 + (i32.eq + (get_local $$24) + (i32.const 0) + ) + ) + (block $do-once2 + (if + (i32.eqz + (get_local $$cmp173) + ) + (block + (set_local $$cmp176 + (i32.lt_u + (get_local $$24) + (get_local $$23) + ) + ) + (if + (get_local $$cmp176) + (call $_abort) + (block + (set_local $$arrayidx182 + (i32.add + (get_local $$R$3) + (i32.const 16) + ) + ) + (i32.store + (get_local $$arrayidx182) + (get_local $$24) + ) + (set_local $$parent183 + (i32.add + (get_local $$24) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent183) + (get_local $$R$3) + ) + (br $do-once2) + ) + ) + ) + ) + ) + (set_local $$arrayidx188 + (i32.add + (get_local $$child171) + (i32.const 4) + ) + ) + (set_local $$25 + (i32.load + (get_local $$arrayidx188) + ) + ) + (set_local $$cmp189 + (i32.eq + (get_local $$25) + (i32.const 0) + ) + ) + (if + (get_local $$cmp189) + (block + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + ) + (block + (set_local $$26 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp192 + (i32.lt_u + (get_local $$25) + (get_local $$26) + ) + ) + (if + (get_local $$cmp192) + (call $_abort) + (block + (set_local $$arrayidx198 + (i32.add + (get_local $$R$3) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx198) + (get_local $$25) + ) + (set_local $$parent199 + (i32.add + (get_local $$25) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent199) + (get_local $$R$3) + ) + (set_local $$p$1 + (get_local $$add$ptr16) + ) + (set_local $$psize$1 + (get_local $$add17) + ) + (br $do-once) + ) + ) + ) + ) + ) + ) + ) + (block + (set_local $$p$1 + (get_local $$add$ptr) + ) + (set_local $$psize$1 + (get_local $$and5) + ) + ) + ) + ) + (set_local $$cmp228 + (i32.lt_u + (get_local $$p$1) + (get_local $$add$ptr6) + ) + ) + (if + (i32.eqz + (get_local $$cmp228) + ) + (call $_abort) + ) + (set_local $$head231 + (i32.add + (get_local $$add$ptr6) + (i32.const 4) + ) + ) + (set_local $$28 + (i32.load + (get_local $$head231) + ) + ) + (set_local $$and232 + (i32.and + (get_local $$28) + (i32.const 1) + ) + ) + (set_local $$tobool233 + (i32.eq + (get_local $$and232) + (i32.const 0) + ) + ) + (if + (get_local $$tobool233) + (call $_abort) + ) + (set_local $$and240 + (i32.and + (get_local $$28) + (i32.const 2) + ) + ) + (set_local $$tobool241 + (i32.eq + (get_local $$and240) + (i32.const 0) + ) + ) + (if + (get_local $$tobool241) + (block + (set_local $$29 + (i32.load + (i32.const 200) + ) + ) + (set_local $$cmp243 + (i32.eq + (get_local $$add$ptr6) + (get_local $$29) + ) + ) + (if + (get_local $$cmp243) + (block + (set_local $$30 + (i32.load + (i32.const 188) + ) + ) + (set_local $$add246 + (i32.add + (get_local $$30) + (get_local $$psize$1) + ) + ) + (i32.store + (i32.const 188) + (get_local $$add246) + ) + (i32.store + (i32.const 200) + (get_local $$p$1) + ) + (set_local $$or247 + (i32.or + (get_local $$add246) + (i32.const 1) + ) + ) + (set_local $$head248 + (i32.add + (get_local $$p$1) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head248) + (get_local $$or247) + ) + (set_local $$31 + (i32.load + (i32.const 196) + ) + ) + (set_local $$cmp249 + (i32.eq + (get_local $$p$1) + (get_local $$31) + ) + ) + (if + (i32.eqz + (get_local $$cmp249) + ) + (return) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store + (i32.const 184) + (i32.const 0) + ) + (return) + ) + ) + (set_local $$32 + (i32.load + (i32.const 196) + ) + ) + (set_local $$cmp255 + (i32.eq + (get_local $$add$ptr6) + (get_local $$32) + ) + ) + (if + (get_local $$cmp255) + (block + (set_local $$33 + (i32.load + (i32.const 184) + ) + ) + (set_local $$add258 + (i32.add + (get_local $$33) + (get_local $$psize$1) + ) + ) + (i32.store + (i32.const 184) + (get_local $$add258) + ) + (i32.store + (i32.const 196) + (get_local $$p$1) + ) + (set_local $$or259 + (i32.or + (get_local $$add258) + (i32.const 1) + ) + ) + (set_local $$head260 + (i32.add + (get_local $$p$1) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head260) + (get_local $$or259) + ) + (set_local $$add$ptr261 + (i32.add + (get_local $$p$1) + (get_local $$add258) + ) + ) + (i32.store + (get_local $$add$ptr261) + (get_local $$add258) + ) + (return) + ) + ) + (set_local $$and266 + (i32.and + (get_local $$28) + (i32.const -8) + ) + ) + (set_local $$add267 + (i32.add + (get_local $$and266) + (get_local $$psize$1) + ) + ) + (set_local $$shr268 + (i32.shr_u + (get_local $$28) + (i32.const 3) + ) + ) + (set_local $$cmp269 + (i32.lt_u + (get_local $$28) + (i32.const 256) + ) + ) + (block $do-once4 + (if + (get_local $$cmp269) + (block + (set_local $$fd273 + (i32.add + (get_local $$add$ptr6) + (i32.const 8) + ) + ) + (set_local $$34 + (i32.load + (get_local $$fd273) + ) + ) + (set_local $$bk275 + (i32.add + (get_local $$add$ptr6) + (i32.const 12) + ) + ) + (set_local $$35 + (i32.load + (get_local $$bk275) + ) + ) + (set_local $$shl278 + (i32.shl + (get_local $$shr268) + (i32.const 1) + ) + ) + (set_local $$arrayidx279 + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl278) + (i32.const 2) + ) + ) + ) + (set_local $$cmp280 + (i32.eq + (get_local $$34) + (get_local $$arrayidx279) + ) + ) + (if + (i32.eqz + (get_local $$cmp280) + ) + (block + (set_local $$36 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp283 + (i32.lt_u + (get_local $$34) + (get_local $$36) + ) + ) + (if + (get_local $$cmp283) + (call $_abort) + ) + (set_local $$bk286 + (i32.add + (get_local $$34) + (i32.const 12) + ) + ) + (set_local $$37 + (i32.load + (get_local $$bk286) + ) + ) + (set_local $$cmp287 + (i32.eq + (get_local $$37) + (get_local $$add$ptr6) + ) + ) + (if + (i32.eqz + (get_local $$cmp287) + ) + (call $_abort) + ) + ) + ) + (set_local $$cmp296 + (i32.eq + (get_local $$35) + (get_local $$34) + ) + ) + (if + (get_local $$cmp296) + (block + (set_local $$shl299 + (i32.shl + (i32.const 1) + (get_local $$shr268) + ) + ) + (set_local $$neg300 + (i32.xor + (get_local $$shl299) + (i32.const -1) + ) + ) + (set_local $$38 + (i32.load + (i32.const 176) + ) + ) + (set_local $$and301 + (i32.and + (get_local $$38) + (get_local $$neg300) + ) + ) + (i32.store + (i32.const 176) + (get_local $$and301) + ) + (br $do-once4) + ) + ) + (set_local $$cmp305 + (i32.eq + (get_local $$35) + (get_local $$arrayidx279) + ) + ) + (if + (get_local $$cmp305) + (block + (set_local $$$pre312 + (i32.add + (get_local $$35) + (i32.const 8) + ) + ) + (set_local $$fd322$pre$phiZ2D + (get_local $$$pre312) + ) + ) + (block + (set_local $$39 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp308 + (i32.lt_u + (get_local $$35) + (get_local $$39) + ) + ) + (if + (get_local $$cmp308) + (call $_abort) + ) + (set_local $$fd311 + (i32.add + (get_local $$35) + (i32.const 8) + ) + ) + (set_local $$40 + (i32.load + (get_local $$fd311) + ) + ) + (set_local $$cmp312 + (i32.eq + (get_local $$40) + (get_local $$add$ptr6) + ) + ) + (if + (get_local $$cmp312) + (set_local $$fd322$pre$phiZ2D + (get_local $$fd311) + ) + (call $_abort) + ) + ) + ) + (set_local $$bk321 + (i32.add + (get_local $$34) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk321) + (get_local $$35) + ) + (i32.store + (get_local $$fd322$pre$phiZ2D) + (get_local $$34) + ) + ) + (block + (set_local $$parent331 + (i32.add + (get_local $$add$ptr6) + (i32.const 24) + ) + ) + (set_local $$41 + (i32.load + (get_local $$parent331) + ) + ) + (set_local $$bk333 + (i32.add + (get_local $$add$ptr6) + (i32.const 12) + ) + ) + (set_local $$42 + (i32.load + (get_local $$bk333) + ) + ) + (set_local $$cmp334 + (i32.eq + (get_local $$42) + (get_local $$add$ptr6) + ) + ) + (block $do-once6 + (if + (get_local $$cmp334) + (block + (set_local $$child361 + (i32.add + (get_local $$add$ptr6) + (i32.const 16) + ) + ) + (set_local $$arrayidx362 + (i32.add + (get_local $$child361) + (i32.const 4) + ) + ) + (set_local $$47 + (i32.load + (get_local $$arrayidx362) + ) + ) + (set_local $$cmp363 + (i32.eq + (get_local $$47) + (i32.const 0) + ) + ) + (if + (get_local $$cmp363) + (block + (set_local $$48 + (i32.load + (get_local $$child361) + ) + ) + (set_local $$cmp368 + (i32.eq + (get_local $$48) + (i32.const 0) + ) + ) + (if + (get_local $$cmp368) + (block + (set_local $$R332$3 + (i32.const 0) + ) + (br $do-once6) + ) + (block + (set_local $$R332$1 + (get_local $$48) + ) + (set_local $$RP360$1 + (get_local $$child361) + ) + ) + ) + ) + (block + (set_local $$R332$1 + (get_local $$47) + ) + (set_local $$RP360$1 + (get_local $$arrayidx362) + ) + ) + ) + (loop $while-in9 + (block $while-out8 + (set_local $$arrayidx374 + (i32.add + (get_local $$R332$1) + (i32.const 20) + ) + ) + (set_local $$49 + (i32.load + (get_local $$arrayidx374) + ) + ) + (set_local $$cmp375 + (i32.eq + (get_local $$49) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp375) + ) + (block + (set_local $$R332$1 + (get_local $$49) + ) + (set_local $$RP360$1 + (get_local $$arrayidx374) + ) + (br $while-in9) + ) + ) + (set_local $$arrayidx379 + (i32.add + (get_local $$R332$1) + (i32.const 16) + ) + ) + (set_local $$50 + (i32.load + (get_local $$arrayidx379) + ) + ) + (set_local $$cmp380 + (i32.eq + (get_local $$50) + (i32.const 0) + ) + ) + (if + (get_local $$cmp380) + (block + (set_local $$R332$1$lcssa + (get_local $$R332$1) + ) + (set_local $$RP360$1$lcssa + (get_local $$RP360$1) + ) + (br $while-out8) + ) + (block + (set_local $$R332$1 + (get_local $$50) + ) + (set_local $$RP360$1 + (get_local $$arrayidx379) + ) + ) + ) + (br $while-in9) + ) + ) + (set_local $$51 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp386 + (i32.lt_u + (get_local $$RP360$1$lcssa) + (get_local $$51) + ) + ) + (if + (get_local $$cmp386) + (call $_abort) + (block + (i32.store + (get_local $$RP360$1$lcssa) + (i32.const 0) + ) + (set_local $$R332$3 + (get_local $$R332$1$lcssa) + ) + (br $do-once6) + ) + ) + ) + (block + (set_local $$fd338 + (i32.add + (get_local $$add$ptr6) + (i32.const 8) + ) + ) + (set_local $$43 + (i32.load + (get_local $$fd338) + ) + ) + (set_local $$44 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp340 + (i32.lt_u + (get_local $$43) + (get_local $$44) + ) + ) + (if + (get_local $$cmp340) + (call $_abort) + ) + (set_local $$bk343 + (i32.add + (get_local $$43) + (i32.const 12) + ) + ) + (set_local $$45 + (i32.load + (get_local $$bk343) + ) + ) + (set_local $$cmp344 + (i32.eq + (get_local $$45) + (get_local $$add$ptr6) + ) + ) + (if + (i32.eqz + (get_local $$cmp344) + ) + (call $_abort) + ) + (set_local $$fd347 + (i32.add + (get_local $$42) + (i32.const 8) + ) + ) + (set_local $$46 + (i32.load + (get_local $$fd347) + ) + ) + (set_local $$cmp348 + (i32.eq + (get_local $$46) + (get_local $$add$ptr6) + ) + ) + (if + (get_local $$cmp348) + (block + (i32.store + (get_local $$bk343) + (get_local $$42) + ) + (i32.store + (get_local $$fd347) + (get_local $$43) + ) + (set_local $$R332$3 + (get_local $$42) + ) + (br $do-once6) + ) + (call $_abort) + ) + ) + ) + ) + (set_local $$cmp395 + (i32.eq + (get_local $$41) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp395) + ) + (block + (set_local $$index399 + (i32.add + (get_local $$add$ptr6) + (i32.const 28) + ) + ) + (set_local $$52 + (i32.load + (get_local $$index399) + ) + ) + (set_local $$arrayidx400 + (i32.add + (i32.const 480) + (i32.shl + (get_local $$52) + (i32.const 2) + ) + ) + ) + (set_local $$53 + (i32.load + (get_local $$arrayidx400) + ) + ) + (set_local $$cmp401 + (i32.eq + (get_local $$add$ptr6) + (get_local $$53) + ) + ) + (if + (get_local $$cmp401) + (block + (i32.store + (get_local $$arrayidx400) + (get_local $$R332$3) + ) + (set_local $$cond292 + (i32.eq + (get_local $$R332$3) + (i32.const 0) + ) + ) + (if + (get_local $$cond292) + (block + (set_local $$shl408 + (i32.shl + (i32.const 1) + (get_local $$52) + ) + ) + (set_local $$neg409 + (i32.xor + (get_local $$shl408) + (i32.const -1) + ) + ) + (set_local $$54 + (i32.load + (i32.const 180) + ) + ) + (set_local $$and410 + (i32.and + (get_local $$54) + (get_local $$neg409) + ) + ) + (i32.store + (i32.const 180) + (get_local $$and410) + ) + (br $do-once4) + ) + ) + ) + (block + (set_local $$55 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp413 + (i32.lt_u + (get_local $$41) + (get_local $$55) + ) + ) + (if + (get_local $$cmp413) + (call $_abort) + ) + (set_local $$arrayidx419 + (i32.add + (get_local $$41) + (i32.const 16) + ) + ) + (set_local $$56 + (i32.load + (get_local $$arrayidx419) + ) + ) + (set_local $$cmp420 + (i32.eq + (get_local $$56) + (get_local $$add$ptr6) + ) + ) + (if + (get_local $$cmp420) + (i32.store + (get_local $$arrayidx419) + (get_local $$R332$3) + ) + (block + (set_local $$arrayidx427 + (i32.add + (get_local $$41) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx427) + (get_local $$R332$3) + ) + ) + ) + (set_local $$cmp432 + (i32.eq + (get_local $$R332$3) + (i32.const 0) + ) + ) + (if + (get_local $$cmp432) + (br $do-once4) + ) + ) + ) + (set_local $$57 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp435 + (i32.lt_u + (get_local $$R332$3) + (get_local $$57) + ) + ) + (if + (get_local $$cmp435) + (call $_abort) + ) + (set_local $$parent442 + (i32.add + (get_local $$R332$3) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent442) + (get_local $$41) + ) + (set_local $$child443 + (i32.add + (get_local $$add$ptr6) + (i32.const 16) + ) + ) + (set_local $$58 + (i32.load + (get_local $$child443) + ) + ) + (set_local $$cmp445 + (i32.eq + (get_local $$58) + (i32.const 0) + ) + ) + (block $do-once10 + (if + (i32.eqz + (get_local $$cmp445) + ) + (block + (set_local $$cmp448 + (i32.lt_u + (get_local $$58) + (get_local $$57) + ) + ) + (if + (get_local $$cmp448) + (call $_abort) + (block + (set_local $$arrayidx454 + (i32.add + (get_local $$R332$3) + (i32.const 16) + ) + ) + (i32.store + (get_local $$arrayidx454) + (get_local $$58) + ) + (set_local $$parent455 + (i32.add + (get_local $$58) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent455) + (get_local $$R332$3) + ) + (br $do-once10) + ) + ) + ) + ) + ) + (set_local $$arrayidx460 + (i32.add + (get_local $$child443) + (i32.const 4) + ) + ) + (set_local $$59 + (i32.load + (get_local $$arrayidx460) + ) + ) + (set_local $$cmp461 + (i32.eq + (get_local $$59) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$cmp461) + ) + (block + (set_local $$60 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp464 + (i32.lt_u + (get_local $$59) + (get_local $$60) + ) + ) + (if + (get_local $$cmp464) + (call $_abort) + (block + (set_local $$arrayidx470 + (i32.add + (get_local $$R332$3) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx470) + (get_local $$59) + ) + (set_local $$parent471 + (i32.add + (get_local $$59) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent471) + (get_local $$R332$3) + ) + (br $do-once4) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $$or480 + (i32.or + (get_local $$add267) + (i32.const 1) + ) + ) + (set_local $$head481 + (i32.add + (get_local $$p$1) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head481) + (get_local $$or480) + ) + (set_local $$add$ptr482 + (i32.add + (get_local $$p$1) + (get_local $$add267) + ) + ) + (i32.store + (get_local $$add$ptr482) + (get_local $$add267) + ) + (set_local $$61 + (i32.load + (i32.const 196) + ) + ) + (set_local $$cmp484 + (i32.eq + (get_local $$p$1) + (get_local $$61) + ) + ) + (if + (get_local $$cmp484) + (block + (i32.store + (i32.const 184) + (get_local $$add267) + ) + (return) + ) + (set_local $$psize$2 + (get_local $$add267) + ) + ) + ) + (block + (set_local $$and495 + (i32.and + (get_local $$28) + (i32.const -2) + ) + ) + (i32.store + (get_local $$head231) + (get_local $$and495) + ) + (set_local $$or496 + (i32.or + (get_local $$psize$1) + (i32.const 1) + ) + ) + (set_local $$head497 + (i32.add + (get_local $$p$1) + (i32.const 4) + ) + ) + (i32.store + (get_local $$head497) + (get_local $$or496) + ) + (set_local $$add$ptr498 + (i32.add + (get_local $$p$1) + (get_local $$psize$1) + ) + ) + (i32.store + (get_local $$add$ptr498) + (get_local $$psize$1) + ) + (set_local $$psize$2 + (get_local $$psize$1) + ) + ) + ) + (set_local $$shr501 + (i32.shr_u + (get_local $$psize$2) + (i32.const 3) + ) + ) + (set_local $$cmp502 + (i32.lt_u + (get_local $$psize$2) + (i32.const 256) + ) + ) + (if + (get_local $$cmp502) + (block + (set_local $$shl508 + (i32.shl + (get_local $$shr501) + (i32.const 1) + ) + ) + (set_local $$arrayidx509 + (i32.add + (i32.const 216) + (i32.shl + (get_local $$shl508) + (i32.const 2) + ) + ) + ) + (set_local $$62 + (i32.load + (i32.const 176) + ) + ) + (set_local $$shl511 + (i32.shl + (i32.const 1) + (get_local $$shr501) + ) + ) + (set_local $$and512 + (i32.and + (get_local $$62) + (get_local $$shl511) + ) + ) + (set_local $$tobool513 + (i32.eq + (get_local $$and512) + (i32.const 0) + ) + ) + (if + (get_local $$tobool513) + (block + (set_local $$or516 + (i32.or + (get_local $$62) + (get_local $$shl511) + ) + ) + (i32.store + (i32.const 176) + (get_local $$or516) + ) + (set_local $$$pre + (i32.add + (get_local $$arrayidx509) + (i32.const 8) + ) + ) + (set_local $$$pre$phiZ2D + (get_local $$$pre) + ) + (set_local $$F510$0 + (get_local $$arrayidx509) + ) + ) + (block + (set_local $$63 + (i32.add + (get_local $$arrayidx509) + (i32.const 8) + ) + ) + (set_local $$64 + (i32.load + (get_local $$63) + ) + ) + (set_local $$65 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp519 + (i32.lt_u + (get_local $$64) + (get_local $$65) + ) + ) + (if + (get_local $$cmp519) + (call $_abort) + (block + (set_local $$$pre$phiZ2D + (get_local $$63) + ) + (set_local $$F510$0 + (get_local $$64) + ) + ) + ) + ) + ) + (i32.store + (get_local $$$pre$phiZ2D) + (get_local $$p$1) + ) + (set_local $$bk529 + (i32.add + (get_local $$F510$0) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk529) + (get_local $$p$1) + ) + (set_local $$fd530 + (i32.add + (get_local $$p$1) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd530) + (get_local $$F510$0) + ) + (set_local $$bk531 + (i32.add + (get_local $$p$1) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk531) + (get_local $$arrayidx509) + ) + (return) + ) + ) + (set_local $$shr535 + (i32.shr_u + (get_local $$psize$2) + (i32.const 8) + ) + ) + (set_local $$cmp536 + (i32.eq + (get_local $$shr535) + (i32.const 0) + ) + ) + (if + (get_local $$cmp536) + (set_local $$I534$0 + (i32.const 0) + ) + (block + (set_local $$cmp540 + (i32.gt_u + (get_local $$psize$2) + (i32.const 16777215) + ) + ) + (if + (get_local $$cmp540) + (set_local $$I534$0 + (i32.const 31) + ) + (block + (set_local $$sub + (i32.add + (get_local $$shr535) + (i32.const 1048320) + ) + ) + (set_local $$shr544 + (i32.shr_u + (get_local $$sub) + (i32.const 16) + ) + ) + (set_local $$and545 + (i32.and + (get_local $$shr544) + (i32.const 8) + ) + ) + (set_local $$shl546 + (i32.shl + (get_local $$shr535) + (get_local $$and545) + ) + ) + (set_local $$sub547 + (i32.add + (get_local $$shl546) + (i32.const 520192) + ) + ) + (set_local $$shr548 + (i32.shr_u + (get_local $$sub547) + (i32.const 16) + ) + ) + (set_local $$and549 + (i32.and + (get_local $$shr548) + (i32.const 4) + ) + ) + (set_local $$add550 + (i32.or + (get_local $$and549) + (get_local $$and545) + ) + ) + (set_local $$shl551 + (i32.shl + (get_local $$shl546) + (get_local $$and549) + ) + ) + (set_local $$sub552 + (i32.add + (get_local $$shl551) + (i32.const 245760) + ) + ) + (set_local $$shr553 + (i32.shr_u + (get_local $$sub552) + (i32.const 16) + ) + ) + (set_local $$and554 + (i32.and + (get_local $$shr553) + (i32.const 2) + ) + ) + (set_local $$add555 + (i32.or + (get_local $$add550) + (get_local $$and554) + ) + ) + (set_local $$sub556 + (i32.sub + (i32.const 14) + (get_local $$add555) + ) + ) + (set_local $$shl557 + (i32.shl + (get_local $$shl551) + (get_local $$and554) + ) + ) + (set_local $$shr558 + (i32.shr_u + (get_local $$shl557) + (i32.const 15) + ) + ) + (set_local $$add559 + (i32.add + (get_local $$sub556) + (get_local $$shr558) + ) + ) + (set_local $$shl560 + (i32.shl + (get_local $$add559) + (i32.const 1) + ) + ) + (set_local $$add561 + (i32.add + (get_local $$add559) + (i32.const 7) + ) + ) + (set_local $$shr562 + (i32.shr_u + (get_local $$psize$2) + (get_local $$add561) + ) + ) + (set_local $$and563 + (i32.and + (get_local $$shr562) + (i32.const 1) + ) + ) + (set_local $$add564 + (i32.or + (get_local $$and563) + (get_local $$shl560) + ) + ) + (set_local $$I534$0 + (get_local $$add564) + ) + ) + ) + ) + ) + (set_local $$arrayidx567 + (i32.add + (i32.const 480) + (i32.shl + (get_local $$I534$0) + (i32.const 2) + ) + ) + ) + (set_local $$index568 + (i32.add + (get_local $$p$1) + (i32.const 28) + ) + ) + (i32.store + (get_local $$index568) + (get_local $$I534$0) + ) + (set_local $$child569 + (i32.add + (get_local $$p$1) + (i32.const 16) + ) + ) + (set_local $$arrayidx570 + (i32.add + (get_local $$p$1) + (i32.const 20) + ) + ) + (i32.store + (get_local $$arrayidx570) + (i32.const 0) + ) + (i32.store + (get_local $$child569) + (i32.const 0) + ) + (set_local $$66 + (i32.load + (i32.const 180) + ) + ) + (set_local $$shl573 + (i32.shl + (i32.const 1) + (get_local $$I534$0) + ) + ) + (set_local $$and574 + (i32.and + (get_local $$66) + (get_local $$shl573) + ) + ) + (set_local $$tobool575 + (i32.eq + (get_local $$and574) + (i32.const 0) + ) + ) + (block $do-once12 + (if + (get_local $$tobool575) + (block + (set_local $$or578 + (i32.or + (get_local $$66) + (get_local $$shl573) + ) + ) + (i32.store + (i32.const 180) + (get_local $$or578) + ) + (i32.store + (get_local $$arrayidx567) + (get_local $$p$1) + ) + (set_local $$parent579 + (i32.add + (get_local $$p$1) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent579) + (get_local $$arrayidx567) + ) + (set_local $$bk580 + (i32.add + (get_local $$p$1) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk580) + (get_local $$p$1) + ) + (set_local $$fd581 + (i32.add + (get_local $$p$1) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd581) + (get_local $$p$1) + ) + ) + (block + (set_local $$67 + (i32.load + (get_local $$arrayidx567) + ) + ) + (set_local $$cmp584 + (i32.eq + (get_local $$I534$0) + (i32.const 31) + ) + ) + (set_local $$shr586 + (i32.shr_u + (get_local $$I534$0) + (i32.const 1) + ) + ) + (set_local $$sub589 + (i32.sub + (i32.const 25) + (get_local $$shr586) + ) + ) + (set_local $$cond + (if (result i32) + (get_local $$cmp584) + (i32.const 0) + (get_local $$sub589) + ) + ) + (set_local $$shl590 + (i32.shl + (get_local $$psize$2) + (get_local $$cond) + ) + ) + (set_local $$K583$0 + (get_local $$shl590) + ) + (set_local $$T$0 + (get_local $$67) + ) + (loop $while-in15 + (block $while-out14 + (set_local $$head591 + (i32.add + (get_local $$T$0) + (i32.const 4) + ) + ) + (set_local $$68 + (i32.load + (get_local $$head591) + ) + ) + (set_local $$and592 + (i32.and + (get_local $$68) + (i32.const -8) + ) + ) + (set_local $$cmp593 + (i32.eq + (get_local $$and592) + (get_local $$psize$2) + ) + ) + (if + (get_local $$cmp593) + (block + (set_local $$T$0$lcssa + (get_local $$T$0) + ) + (set_local $label + (i32.const 130) + ) + (br $while-out14) + ) + ) + (set_local $$shr596 + (i32.shr_u + (get_local $$K583$0) + (i32.const 31) + ) + ) + (set_local $$arrayidx599 + (i32.add + (i32.add + (get_local $$T$0) + (i32.const 16) + ) + (i32.shl + (get_local $$shr596) + (i32.const 2) + ) + ) + ) + (set_local $$shl600 + (i32.shl + (get_local $$K583$0) + (i32.const 1) + ) + ) + (set_local $$69 + (i32.load + (get_local $$arrayidx599) + ) + ) + (set_local $$cmp601 + (i32.eq + (get_local $$69) + (i32.const 0) + ) + ) + (if + (get_local $$cmp601) + (block + (set_local $$T$0$lcssa319 + (get_local $$T$0) + ) + (set_local $$arrayidx599$lcssa + (get_local $$arrayidx599) + ) + (set_local $label + (i32.const 127) + ) + (br $while-out14) + ) + (block + (set_local $$K583$0 + (get_local $$shl600) + ) + (set_local $$T$0 + (get_local $$69) + ) + ) + ) + (br $while-in15) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 127) + ) + (block + (set_local $$70 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp605 + (i32.lt_u + (get_local $$arrayidx599$lcssa) + (get_local $$70) + ) + ) + (if + (get_local $$cmp605) + (call $_abort) + (block + (i32.store + (get_local $$arrayidx599$lcssa) + (get_local $$p$1) + ) + (set_local $$parent610 + (i32.add + (get_local $$p$1) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent610) + (get_local $$T$0$lcssa319) + ) + (set_local $$bk611 + (i32.add + (get_local $$p$1) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk611) + (get_local $$p$1) + ) + (set_local $$fd612 + (i32.add + (get_local $$p$1) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd612) + (get_local $$p$1) + ) + (br $do-once12) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 130) + ) + (block + (set_local $$fd620 + (i32.add + (get_local $$T$0$lcssa) + (i32.const 8) + ) + ) + (set_local $$71 + (i32.load + (get_local $$fd620) + ) + ) + (set_local $$72 + (i32.load + (i32.const 192) + ) + ) + (set_local $$cmp624 + (i32.ge_u + (get_local $$71) + (get_local $$72) + ) + ) + (set_local $$not$cmp621 + (i32.ge_u + (get_local $$T$0$lcssa) + (get_local $$72) + ) + ) + (set_local $$73 + (i32.and + (get_local $$cmp624) + (get_local $$not$cmp621) + ) + ) + (if + (get_local $$73) + (block + (set_local $$bk631 + (i32.add + (get_local $$71) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk631) + (get_local $$p$1) + ) + (i32.store + (get_local $$fd620) + (get_local $$p$1) + ) + (set_local $$fd633 + (i32.add + (get_local $$p$1) + (i32.const 8) + ) + ) + (i32.store + (get_local $$fd633) + (get_local $$71) + ) + (set_local $$bk634 + (i32.add + (get_local $$p$1) + (i32.const 12) + ) + ) + (i32.store + (get_local $$bk634) + (get_local $$T$0$lcssa) + ) + (set_local $$parent635 + (i32.add + (get_local $$p$1) + (i32.const 24) + ) + ) + (i32.store + (get_local $$parent635) + (i32.const 0) + ) + (br $do-once12) + ) + (call $_abort) + ) + ) + ) + ) + ) + ) + ) + (set_local $$74 + (i32.load + (i32.const 208) + ) + ) + (set_local $$dec + (i32.add + (get_local $$74) + (i32.const -1) + ) + ) + (i32.store + (i32.const 208) + (get_local $$dec) + ) + (set_local $$cmp640 + (i32.eq + (get_local $$dec) + (i32.const 0) + ) + ) + (if + (get_local $$cmp640) + (set_local $$sp$0$in$i + (i32.const 632) + ) + (return) + ) + (loop $while-in17 + (block $while-out16 + (set_local $$sp$0$i + (i32.load + (get_local $$sp$0$in$i) + ) + ) + (set_local $$cmp$i + (i32.eq + (get_local $$sp$0$i) + (i32.const 0) + ) + ) + (set_local $$next4$i + (i32.add + (get_local $$sp$0$i) + (i32.const 8) + ) + ) + (if + (get_local $$cmp$i) + (br $while-out16) + (set_local $$sp$0$in$i + (get_local $$next4$i) + ) + ) + (br $while-in17) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (return) + ) + (func $runPostSets (; 60 ;) + (nop) + ) + (func $_i64Subtract (; 61 ;) (param $a i32) (param $b i32) (param $c i32) (param $d i32) (result i32) + (local $l i32) + (local $h i32) + (set_local $l + (i32.sub + (get_local $a) + (get_local $c) + ) + ) + (set_local $h + (i32.sub + (get_local $b) + (get_local $d) + ) + ) + (set_local $h + (i32.sub + (i32.sub + (get_local $b) + (get_local $d) + ) + (i32.gt_u + (get_local $c) + (get_local $a) + ) + ) + ) + (return + (block (result i32) + (block + (set_global $tempRet0 + (get_local $h) + ) + (drop + (get_global $tempRet0) + ) + ) + (get_local $l) + ) + ) + ) + (func $_i64Add (; 62 ;) (param $a i32) (param $b i32) (param $c i32) (param $d i32) (result i32) + (local $l i32) + (local $h i32) + (set_local $l + (i32.add + (get_local $a) + (get_local $c) + ) + ) + (set_local $h + (i32.add + (i32.add + (get_local $b) + (get_local $d) + ) + (i32.lt_u + (get_local $l) + (get_local $a) + ) + ) + ) + (return + (block (result i32) + (block + (set_global $tempRet0 + (get_local $h) + ) + (drop + (get_global $tempRet0) + ) + ) + (get_local $l) + ) + ) + ) + (func $_memset (; 63 ;) (param $ptr i32) (param $value i32) (param $num i32) (result i32) + (local $stop i32) + (local $value4 i32) + (local $stop4 i32) + (local $unaligned i32) + (set_local $stop + (i32.add + (get_local $ptr) + (get_local $num) + ) + ) + (if + (i32.ge_s + (get_local $num) + (i32.const 20) + ) + (block + (set_local $value + (i32.and + (get_local $value) + (i32.const 255) + ) + ) + (set_local $unaligned + (i32.and + (get_local $ptr) + (i32.const 3) + ) + ) + (set_local $value4 + (i32.or + (i32.or + (i32.or + (get_local $value) + (i32.shl + (get_local $value) + (i32.const 8) + ) + ) + (i32.shl + (get_local $value) + (i32.const 16) + ) + ) + (i32.shl + (get_local $value) + (i32.const 24) + ) + ) + ) + (set_local $stop4 + (i32.and + (get_local $stop) + (i32.xor + (i32.const 3) + (i32.const -1) + ) + ) + ) + (if + (get_local $unaligned) + (block + (set_local $unaligned + (i32.sub + (i32.add + (get_local $ptr) + (i32.const 4) + ) + (get_local $unaligned) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.lt_s + (get_local $ptr) + (get_local $unaligned) + ) + ) + (br $while-out) + ) + (block + (i32.store8 + (get_local $ptr) + (get_local $value) + ) + (set_local $ptr + (i32.add + (get_local $ptr) + (i32.const 1) + ) + ) + ) + (br $while-in) + ) + ) + ) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eqz + (i32.lt_s + (get_local $ptr) + (get_local $stop4) + ) + ) + (br $while-out0) + ) + (block + (i32.store + (get_local $ptr) + (get_local $value4) + ) + (set_local $ptr + (i32.add + (get_local $ptr) + (i32.const 4) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eqz + (i32.lt_s + (get_local $ptr) + (get_local $stop) + ) + ) + (br $while-out2) + ) + (block + (i32.store8 + (get_local $ptr) + (get_local $value) + ) + (set_local $ptr + (i32.add + (get_local $ptr) + (i32.const 1) + ) + ) + ) + (br $while-in3) + ) + ) + (return + (i32.sub + (get_local $ptr) + (get_local $num) + ) + ) + ) + (func $_bitshift64Lshr (; 64 ;) (param $low i32) (param $high i32) (param $bits i32) (result i32) + (local $ander i32) + (if + (i32.lt_s + (get_local $bits) + (i32.const 32) + ) + (block + (set_local $ander + (i32.sub + (i32.shl + (i32.const 1) + (get_local $bits) + ) + (i32.const 1) + ) + ) + (set_global $tempRet0 + (i32.shr_u + (get_local $high) + (get_local $bits) + ) + ) + (return + (i32.or + (i32.shr_u + (get_local $low) + (get_local $bits) + ) + (i32.shl + (i32.and + (get_local $high) + (get_local $ander) + ) + (i32.sub + (i32.const 32) + (get_local $bits) + ) + ) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.const 0) + ) + (return + (i32.shr_u + (get_local $high) + (i32.sub + (get_local $bits) + (i32.const 32) + ) + ) + ) + ) + (func $_bitshift64Shl (; 65 ;) (param $low i32) (param $high i32) (param $bits i32) (result i32) + (local $ander i32) + (if + (i32.lt_s + (get_local $bits) + (i32.const 32) + ) + (block + (set_local $ander + (i32.sub + (i32.shl + (i32.const 1) + (get_local $bits) + ) + (i32.const 1) + ) + ) + (set_global $tempRet0 + (i32.or + (i32.shl + (get_local $high) + (get_local $bits) + ) + (i32.shr_u + (i32.and + (get_local $low) + (i32.shl + (get_local $ander) + (i32.sub + (i32.const 32) + (get_local $bits) + ) + ) + ) + (i32.sub + (i32.const 32) + (get_local $bits) + ) + ) + ) + ) + (return + (i32.shl + (get_local $low) + (get_local $bits) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.shl + (get_local $low) + (i32.sub + (get_local $bits) + (i32.const 32) + ) + ) + ) + (return + (i32.const 0) + ) + ) + (func $_memcpy (; 66 ;) (param $dest i32) (param $src i32) (param $num i32) (result i32) + (local $ret i32) + (if + (i32.ge_s + (get_local $num) + (i32.const 4096) + ) + (return + (call $_emscripten_memcpy_big + (get_local $dest) + (get_local $src) + (get_local $num) + ) + ) + ) + (set_local $ret + (get_local $dest) + ) + (if + (i32.eq + (i32.and + (get_local $dest) + (i32.const 3) + ) + (i32.and + (get_local $src) + (i32.const 3) + ) + ) + (block + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.and + (get_local $dest) + (i32.const 3) + ) + ) + (br $while-out) + ) + (block + (if + (i32.eq + (get_local $num) + (i32.const 0) + ) + (return + (get_local $ret) + ) + ) + (i32.store8 + (get_local $dest) + (i32.load8_s + (get_local $src) + ) + ) + (set_local $dest + (i32.add + (get_local $dest) + (i32.const 1) + ) + ) + (set_local $src + (i32.add + (get_local $src) + (i32.const 1) + ) + ) + (set_local $num + (i32.sub + (get_local $num) + (i32.const 1) + ) + ) + ) + (br $while-in) + ) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eqz + (i32.ge_s + (get_local $num) + (i32.const 4) + ) + ) + (br $while-out0) + ) + (block + (i32.store + (get_local $dest) + (i32.load + (get_local $src) + ) + ) + (set_local $dest + (i32.add + (get_local $dest) + (i32.const 4) + ) + ) + (set_local $src + (i32.add + (get_local $src) + (i32.const 4) + ) + ) + (set_local $num + (i32.sub + (get_local $num) + (i32.const 4) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eqz + (i32.gt_s + (get_local $num) + (i32.const 0) + ) + ) + (br $while-out2) + ) + (block + (i32.store8 + (get_local $dest) + (i32.load8_s + (get_local $src) + ) + ) + (set_local $dest + (i32.add + (get_local $dest) + (i32.const 1) + ) + ) + (set_local $src + (i32.add + (get_local $src) + (i32.const 1) + ) + ) + (set_local $num + (i32.sub + (get_local $num) + (i32.const 1) + ) + ) + ) + (br $while-in3) + ) + ) + (return + (get_local $ret) + ) + ) + (func $_bitshift64Ashr (; 67 ;) (param $low i32) (param $high i32) (param $bits i32) (result i32) + (local $ander i32) + (if + (i32.lt_s + (get_local $bits) + (i32.const 32) + ) + (block + (set_local $ander + (i32.sub + (i32.shl + (i32.const 1) + (get_local $bits) + ) + (i32.const 1) + ) + ) + (set_global $tempRet0 + (i32.shr_s + (get_local $high) + (get_local $bits) + ) + ) + (return + (i32.or + (i32.shr_u + (get_local $low) + (get_local $bits) + ) + (i32.shl + (i32.and + (get_local $high) + (get_local $ander) + ) + (i32.sub + (i32.const 32) + (get_local $bits) + ) + ) + ) + ) + ) + ) + (set_global $tempRet0 + (if (result i32) + (i32.lt_s + (get_local $high) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + ) + (return + (i32.shr_s + (get_local $high) + (i32.sub + (get_local $bits) + (i32.const 32) + ) + ) + ) + ) + (func $___muldsi3 (; 68 ;) (param $$a i32) (param $$b i32) (result i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$6 i32) + (local $$8 i32) + (local $$11 i32) + (local $$12 i32) + (set_local $$1 + (i32.and + (get_local $$a) + (i32.const 65535) + ) + ) + (set_local $$2 + (i32.and + (get_local $$b) + (i32.const 65535) + ) + ) + (set_local $$3 + (i32.mul + (get_local $$2) + (get_local $$1) + ) + ) + (set_local $$6 + (i32.shr_u + (get_local $$a) + (i32.const 16) + ) + ) + (set_local $$8 + (i32.add + (i32.shr_u + (get_local $$3) + (i32.const 16) + ) + (i32.mul + (get_local $$2) + (get_local $$6) + ) + ) + ) + (set_local $$11 + (i32.shr_u + (get_local $$b) + (i32.const 16) + ) + ) + (set_local $$12 + (i32.mul + (get_local $$11) + (get_local $$1) + ) + ) + (return + (block (result i32) + (block + (set_global $tempRet0 + (i32.add + (i32.add + (i32.shr_u + (get_local $$8) + (i32.const 16) + ) + (i32.mul + (get_local $$11) + (get_local $$6) + ) + ) + (i32.shr_u + (i32.add + (i32.and + (get_local $$8) + (i32.const 65535) + ) + (get_local $$12) + ) + (i32.const 16) + ) + ) + ) + (drop + (get_global $tempRet0) + ) + ) + (i32.or + (i32.const 0) + (i32.or + (i32.shl + (i32.add + (get_local $$8) + (get_local $$12) + ) + (i32.const 16) + ) + (i32.and + (get_local $$3) + (i32.const 65535) + ) + ) + ) + ) + ) + ) + (func $___divdi3 (; 69 ;) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) + (local $$1$0 i32) + (local $$1$1 i32) + (local $$2$0 i32) + (local $$2$1 i32) + (local $$4$0 i32) + (local $$4$1 i32) + (local $$6$0 i32) + (local $$7$0 i32) + (local $$7$1 i32) + (local $$8$0 i32) + (local $$10$0 i32) + (set_local $$1$0 + (i32.or + (i32.shr_s + (get_local $$a$1) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$1$1 + (i32.or + (i32.shr_s + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$2$0 + (i32.or + (i32.shr_s + (get_local $$b$1) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$2$1 + (i32.or + (i32.shr_s + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$4$0 + (call $_i64Subtract + (i32.xor + (get_local $$1$0) + (get_local $$a$0) + ) + (i32.xor + (get_local $$1$1) + (get_local $$a$1) + ) + (get_local $$1$0) + (get_local $$1$1) + ) + ) + (set_local $$4$1 + (get_global $tempRet0) + ) + (set_local $$6$0 + (call $_i64Subtract + (i32.xor + (get_local $$2$0) + (get_local $$b$0) + ) + (i32.xor + (get_local $$2$1) + (get_local $$b$1) + ) + (get_local $$2$0) + (get_local $$2$1) + ) + ) + (set_local $$7$0 + (i32.xor + (get_local $$2$0) + (get_local $$1$0) + ) + ) + (set_local $$7$1 + (i32.xor + (get_local $$2$1) + (get_local $$1$1) + ) + ) + (set_local $$8$0 + (call $___udivmoddi4 + (get_local $$4$0) + (get_local $$4$1) + (get_local $$6$0) + (get_global $tempRet0) + (i32.const 0) + ) + ) + (set_local $$10$0 + (call $_i64Subtract + (i32.xor + (get_local $$8$0) + (get_local $$7$0) + ) + (i32.xor + (get_global $tempRet0) + (get_local $$7$1) + ) + (get_local $$7$0) + (get_local $$7$1) + ) + ) + (return + (get_local $$10$0) + ) + ) + (func $___remdi3 (; 70 ;) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) + (local $$rem i32) + (local $$1$0 i32) + (local $$1$1 i32) + (local $$2$0 i32) + (local $$2$1 i32) + (local $$4$0 i32) + (local $$4$1 i32) + (local $$6$0 i32) + (local $$10$0 i32) + (local $$10$1 i32) + (local $__stackBase__ i32) + (set_local $__stackBase__ + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $$rem + (get_local $__stackBase__) + ) + (set_local $$1$0 + (i32.or + (i32.shr_s + (get_local $$a$1) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$1$1 + (i32.or + (i32.shr_s + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$2$0 + (i32.or + (i32.shr_s + (get_local $$b$1) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$2$1 + (i32.or + (i32.shr_s + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$4$0 + (call $_i64Subtract + (i32.xor + (get_local $$1$0) + (get_local $$a$0) + ) + (i32.xor + (get_local $$1$1) + (get_local $$a$1) + ) + (get_local $$1$0) + (get_local $$1$1) + ) + ) + (set_local $$4$1 + (get_global $tempRet0) + ) + (set_local $$6$0 + (call $_i64Subtract + (i32.xor + (get_local $$2$0) + (get_local $$b$0) + ) + (i32.xor + (get_local $$2$1) + (get_local $$b$1) + ) + (get_local $$2$0) + (get_local $$2$1) + ) + ) + (drop + (call $___udivmoddi4 + (get_local $$4$0) + (get_local $$4$1) + (get_local $$6$0) + (get_global $tempRet0) + (get_local $$rem) + ) + ) + (set_local $$10$0 + (call $_i64Subtract + (i32.xor + (i32.load + (get_local $$rem) + ) + (get_local $$1$0) + ) + (i32.xor + (i32.load + (i32.add + (get_local $$rem) + (i32.const 4) + ) + ) + (get_local $$1$1) + ) + (get_local $$1$0) + (get_local $$1$1) + ) + ) + (set_local $$10$1 + (get_global $tempRet0) + ) + (set_global $STACKTOP + (get_local $__stackBase__) + ) + (return + (block (result i32) + (block + (set_global $tempRet0 + (get_local $$10$1) + ) + (drop + (get_global $tempRet0) + ) + ) + (get_local $$10$0) + ) + ) + ) + (func $___muldi3 (; 71 ;) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) + (local $$x_sroa_0_0_extract_trunc i32) + (local $$y_sroa_0_0_extract_trunc i32) + (local $$1$0 i32) + (local $$1$1 i32) + (local $$2 i32) + (set_local $$x_sroa_0_0_extract_trunc + (get_local $$a$0) + ) + (set_local $$y_sroa_0_0_extract_trunc + (get_local $$b$0) + ) + (set_local $$1$0 + (call $___muldsi3 + (get_local $$x_sroa_0_0_extract_trunc) + (get_local $$y_sroa_0_0_extract_trunc) + ) + ) + (set_local $$1$1 + (get_global $tempRet0) + ) + (set_local $$2 + (i32.mul + (get_local $$a$1) + (get_local $$y_sroa_0_0_extract_trunc) + ) + ) + (return + (block (result i32) + (block + (set_global $tempRet0 + (i32.or + (i32.add + (i32.add + (i32.mul + (get_local $$b$1) + (get_local $$x_sroa_0_0_extract_trunc) + ) + (get_local $$2) + ) + (get_local $$1$1) + ) + (i32.and + (get_local $$1$1) + (i32.const 0) + ) + ) + ) + (drop + (get_global $tempRet0) + ) + ) + (i32.or + (i32.const 0) + (i32.and + (get_local $$1$0) + (i32.const -1) + ) + ) + ) + ) + ) + (func $___udivdi3 (; 72 ;) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) + (local $$1$0 i32) + (set_local $$1$0 + (call $___udivmoddi4 + (get_local $$a$0) + (get_local $$a$1) + (get_local $$b$0) + (get_local $$b$1) + (i32.const 0) + ) + ) + (return + (get_local $$1$0) + ) + ) + (func $___uremdi3 (; 73 ;) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) + (local $$rem i32) + (local $__stackBase__ i32) + (set_local $__stackBase__ + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $$rem + (get_local $__stackBase__) + ) + (drop + (call $___udivmoddi4 + (get_local $$a$0) + (get_local $$a$1) + (get_local $$b$0) + (get_local $$b$1) + (get_local $$rem) + ) + ) + (set_global $STACKTOP + (get_local $__stackBase__) + ) + (return + (block (result i32) + (block + (set_global $tempRet0 + (i32.load + (i32.add + (get_local $$rem) + (i32.const 4) + ) + ) + ) + (drop + (get_global $tempRet0) + ) + ) + (i32.load + (get_local $$rem) + ) + ) + ) + ) + (func $___udivmoddi4 (; 74 ;) (param $xl i32) (param $xh i32) (param $yl i32) (param $yh i32) (param $r i32) (result i32) + (local $x64 i64) + (local $y64 i64) + (set_local $x64 + (i64.or + (i64.extend_u/i32 + (get_local $xl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $xh) + ) + (i64.const 32) + ) + ) + ) + (set_local $y64 + (i64.or + (i64.extend_u/i32 + (get_local $yl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $yh) + ) + (i64.const 32) + ) + ) + ) + (if + (get_local $r) + (i64.store + (get_local $r) + (i64.rem_u + (get_local $x64) + (get_local $y64) + ) + ) + ) + (set_local $x64 + (i64.div_u + (get_local $x64) + (get_local $y64) + ) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $x64) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $x64) + ) + ) + (func $dynCall_ii (; 75 ;) (param $index i32) (param $a1 i32) (result i32) + (return + (call_indirect (type $FUNCSIG$ii) + (get_local $a1) + (i32.add + (i32.and + (get_local $index) + (i32.const 1) + ) + (i32.const 0) + ) + ) + ) + ) + (func $dynCall_iiii (; 76 ;) (param $index i32) (param $a1 i32) (param $a2 i32) (param $a3 i32) (result i32) + (return + (call_indirect (type $FUNCSIG$iiii) + (get_local $a1) + (get_local $a2) + (get_local $a3) + (i32.add + (i32.and + (get_local $index) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (func $dynCall_vi (; 77 ;) (param $index i32) (param $a1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $a1) + (i32.add + (i32.and + (get_local $index) + (i32.const 7) + ) + (i32.const 10) + ) + ) + ) + (func $b0 (; 78 ;) (param $p0 i32) (result i32) + (call $nullFunc_ii + (i32.const 0) + ) + (return + (i32.const 0) + ) + ) + (func $b1 (; 79 ;) (param $p0 i32) (param $p1 i32) (param $p2 i32) (result i32) + (call $nullFunc_iiii + (i32.const 1) + ) + (return + (i32.const 0) + ) + ) + (func $b2 (; 80 ;) (param $p0 i32) + (call $nullFunc_vi + (i32.const 2) + ) + ) +) diff --git a/src/binaryen/test/emcc_hello_world.wast.fromBinary b/src/binaryen/test/emcc_hello_world.wast.fromBinary new file mode 100644 index 0000000000..5e1351813f --- /dev/null +++ b/src/binaryen/test/emcc_hello_world.wast.fromBinary @@ -0,0 +1,34112 @@ +(module + (memory 256 256) + (type $0 (func (param i32 i32 i32) (result i32))) + (type $1 (func (param i32) (result i32))) + (type $2 (func (param i32))) + (type $3 (func)) + (type $4 (func (result i32))) + (type $5 (func (param i32 i32) (result i32))) + (type $6 (func (param i32 i32))) + (type $7 (func (param f64) (result i32))) + (type $8 (func (param f64 i32) (result f64))) + (type $9 (func (param i32 i32 i32 i32 i32) (result i32))) + (type $10 (func (param i32 i32 i32))) + (type $11 (func (param i32 i32 i32 i32 i32))) + (type $12 (func (param i32 i32 i32 i32) (result i32))) + (import $abort "env" "abort") + (import $nullFunc_ii "env" "nullFunc_ii" (param i32)) + (import $nullFunc_iiii "env" "nullFunc_iiii" (param i32)) + (import $nullFunc_vi "env" "nullFunc_vi" (param i32)) + (import $_pthread_cleanup_pop "env" "_pthread_cleanup_pop" (param i32)) + (import $___lock "env" "___lock" (param i32)) + (import $_pthread_self "env" "_pthread_self" (result i32)) + (import $_abort "env" "_abort") + (import $___syscall6 "env" "___syscall6" (param i32 i32) (result i32)) + (import $_sbrk "env" "_sbrk" (param i32) (result i32)) + (import $_time "env" "_time" (param i32) (result i32)) + (import $_emscripten_memcpy_big "env" "_emscripten_memcpy_big" (param i32 i32 i32) (result i32)) + (import $___syscall54 "env" "___syscall54" (param i32 i32) (result i32)) + (import $___unlock "env" "___unlock" (param i32)) + (import $___syscall140 "env" "___syscall140" (param i32 i32) (result i32)) + (import $_pthread_cleanup_push "env" "_pthread_cleanup_push" (param i32 i32)) + (import $_sysconf "env" "_sysconf" (param i32) (result i32)) + (import $___syscall146 "env" "___syscall146" (param i32 i32) (result i32)) + (import $f64-to-int "asm2wasm" "f64-to-int" (param f64) (result i32)) + (export "stackAlloc" $stackAlloc) + (export "stackSave" $stackSave) + (export "stackRestore" $stackRestore) + (export "establishStackSpace" $establishStackSpace) + (export "setThrew" $setThrew) + (export "setTempRet0" $setTempRet0) + (export "getTempRet0" $getTempRet0) + (export "_main" $_main) + (export "___errno_location" $___errno_location) + (export "_fflush" $_fflush) + (export "_malloc" $_malloc) + (export "_free" $_free) + (export "runPostSets" $runPostSets) + (export "_i64Subtract" $_i64Subtract) + (export "_i64Add" $_i64Add) + (export "_memset" $_memset) + (export "_bitshift64Lshr" $_bitshift64Lshr) + (export "_bitshift64Shl" $_bitshift64Shl) + (export "_memcpy" $_memcpy) + (export "dynCall_ii" $dynCall_ii) + (export "dynCall_iiii" $dynCall_iiii) + (export "dynCall_vi" $dynCall_vi) + (table $b0 $___stdio_close $b1 $b1 $___stdout_write $___stdio_seek $___stdio_write $b1 $b1 $b1 $b2 $b2 $b2 $b2 $b2 $_cleanup $b2 $b2) + (func $stackAlloc (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (block $label$0 + (set_local $var$1 + (i32.load align=4 + (i32.const 8) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (get_local $var$0) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.and + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (if + (i32.ge_s + (i32.load align=4 + (i32.const 8) + ) + (i32.load align=4 + (i32.const 16) + ) + ) + (call_import $abort) + ) + (get_local $var$1) + ) + ) + (func $stackSave (type $4) (result i32) + (i32.load align=4 + (i32.const 8) + ) + ) + (func $stackRestore (type $2) (param $var$0 i32) + (i32.store align=4 + (i32.const 8) + (get_local $var$0) + ) + ) + (func $establishStackSpace (type $6) (param $var$0 i32) (param $var$1 i32) + (block $label$0 + (i32.store align=4 + (i32.const 8) + (get_local $var$0) + ) + (i32.store align=4 + (i32.const 16) + (get_local $var$1) + ) + ) + ) + (func $setThrew (type $6) (param $var$0 i32) (param $var$1 i32) + (if + (i32.eq + (i32.load align=4 + (i32.const 48) + ) + (i32.const 0) + ) + (block $label$0 + (i32.store align=4 + (i32.const 48) + (get_local $var$0) + ) + (i32.store align=4 + (i32.const 56) + (get_local $var$1) + ) + ) + ) + ) + (func $copyTempFloat (type $2) (param $var$0 i32) + (block $label$0 + (i32.store8 align=1 + (i32.load align=4 + (i32.const 24) + ) + (i32.load8_s align=1 + (get_local $var$0) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 1) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 1) + ) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 2) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 2) + ) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 3) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 3) + ) + ) + ) + ) + ) + (func $copyTempDouble (type $2) (param $var$0 i32) + (block $label$0 + (i32.store8 align=1 + (i32.load align=4 + (i32.const 24) + ) + (i32.load8_s align=1 + (get_local $var$0) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 1) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 1) + ) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 2) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 2) + ) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 3) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 3) + ) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 4) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 4) + ) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 5) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 5) + ) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 6) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 6) + ) + ) + ) + (i32.store8 align=1 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 7) + ) + (i32.load8_s align=1 + (i32.add + (get_local $var$0) + (i32.const 7) + ) + ) + ) + ) + ) + (func $setTempRet0 (type $2) (param $var$0 i32) + (i32.store align=4 + (i32.const 168) + (get_local $var$0) + ) + ) + (func $getTempRet0 (type $4) (result i32) + (i32.load align=4 + (i32.const 168) + ) + ) + (func $_main (type $4) (result i32) + (local $var$0 i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (block $label$0 + (set_local $var$3 + (i32.load align=4 + (i32.const 8) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (i32.load align=4 + (i32.const 8) + ) + (i32.load align=4 + (i32.const 16) + ) + ) + (call_import $abort) + ) + (set_local $var$1 + (get_local $var$3) + ) + (set_local $var$0 + (i32.const 0) + ) + (call $_printf + (i32.const 672) + (get_local $var$1) + ) + (i32.store align=4 + (i32.const 8) + (get_local $var$3) + ) + (i32.const 0) + ) + ) + (func $_frexp (type $8) (param $var$0 f64) (param $var$1 i32) (result f64) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 f64) + (local $var$17 f64) + (local $var$18 f64) + (local $var$19 f64) + (local $var$20 f64) + (block $label$0 + (set_local $var$15 + (i32.load align=4 + (i32.const 8) + ) + ) + (f64.store align=8 + (i32.load align=4 + (i32.const 24) + ) + (get_local $var$0) + ) + (set_local $var$2 + (i32.load align=4 + (i32.load align=4 + (i32.const 24) + ) + ) + ) + (set_local $var$3 + (i32.load align=4 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 4) + ) + ) + ) + (set_local $var$4 + (call $_bitshift64Lshr + (get_local $var$2) + (get_local $var$3) + (i32.const 52) + ) + ) + (set_local $var$5 + (i32.load align=4 + (i32.const 168) + ) + ) + (set_local $var$9 + (i32.and + (get_local $var$4) + (i32.const 2047) + ) + ) + (tableswitch $label$4 + (i32.sub + (get_local $var$9) + (i32.const 0) + ) + (table (case $label$1) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$3) (case $label$2)) (case $label$3) + (case $label$1 + (block $label$5 + (set_local $var$13 + (f64.ne + (get_local $var$0) + (f64.const 0) + ) + ) + (if_else + (get_local $var$13) + (block $label$6 + (set_local $var$18 + (f64.mul + (get_local $var$0) + (f64.const 18446744073709551615) + ) + ) + (set_local $var$17 + (call $_frexp + (get_local $var$18) + (get_local $var$1) + ) + ) + (set_local $var$6 + (i32.load align=4 + (get_local $var$1) + ) + ) + (set_local $var$11 + (i32.add + (get_local $var$6) + (i32.const -64) + ) + ) + (set_local $var$10 + (get_local $var$11) + ) + (set_local $var$20 + (get_local $var$17) + ) + ) + (block $label$7 + (set_local $var$10 + (i32.const 0) + ) + (set_local $var$20 + (get_local $var$0) + ) + ) + ) + (i32.store align=4 + (get_local $var$1) + (get_local $var$10) + ) + (set_local $var$19 + (get_local $var$20) + ) + (br $label$4) + ) + ) + (case $label$2 + (block $label$8 + (set_local $var$19 + (get_local $var$0) + ) + (br $label$4) + ) + ) + (case $label$3 + (block $label$9 + (set_local $var$12 + (i32.add + (get_local $var$9) + (i32.const -1022) + ) + ) + (i32.store align=4 + (get_local $var$1) + (get_local $var$12) + ) + (set_local $var$7 + (i32.and + (get_local $var$3) + (i32.const -2146435073) + ) + ) + (set_local $var$8 + (i32.or + (get_local $var$7) + (i32.const 1071644672) + ) + ) + (i32.store align=4 + (i32.load align=4 + (i32.const 24) + ) + (get_local $var$2) + ) + (i32.store align=4 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 4) + ) + (get_local $var$8) + ) + (set_local $var$16 + (f64.load align=8 + (i32.load align=4 + (i32.const 24) + ) + ) + ) + (set_local $var$19 + (get_local $var$16) + ) + ) + ) + ) + (get_local $var$19) + ) + ) + (func $_frexpl (type $8) (param $var$0 f64) (param $var$1 i32) (result f64) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 f64) + (block $label$0 + (set_local $var$3 + (i32.load align=4 + (i32.const 8) + ) + ) + (set_local $var$4 + (call $_frexp + (get_local $var$0) + (get_local $var$1) + ) + ) + (get_local $var$4) + ) + ) + (func $_strerror (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (local $var$19 i32) + (local $var$20 i32) + (local $var$21 i32) + (block $label$0 + (set_local $var$21 + (i32.load align=4 + (i32.const 8) + ) + ) + (set_local $var$7 + (i32.const 0) + ) + (loop $label$1 $label$2 + (block $label$3 + (set_local $var$3 + (i32.add + (i32.const 687) + (get_local $var$7) + ) + ) + (set_local $var$1 + (i32.load8_s align=1 + (get_local $var$3) + ) + ) + (set_local $var$5 + (i32.and + (get_local $var$1) + (i32.const 255) + ) + ) + (set_local $var$4 + (i32.eq + (get_local $var$5) + (get_local $var$0) + ) + ) + (if + (get_local $var$4) + (block $label$4 + (set_local $var$8 + (get_local $var$7) + ) + (set_local $var$20 + (i32.const 2) + ) + (br $label$1) + ) + ) + (set_local $var$10 + (i32.add + (get_local $var$7) + (i32.const 1) + ) + ) + (set_local $var$16 + (i32.eq + (get_local $var$10) + (i32.const 87) + ) + ) + (if_else + (get_local $var$16) + (block $label$5 + (set_local $var$9 + (i32.const 87) + ) + (set_local $var$14 + (i32.const 775) + ) + (set_local $var$20 + (i32.const 5) + ) + (br $label$1) + ) + (set_local $var$7 + (get_local $var$10) + ) + ) + (br $label$2) + ) + ) + (if + (i32.eq + (get_local $var$20) + (i32.const 2) + ) + (block $label$6 + (set_local $var$18 + (i32.eq + (get_local $var$8) + (i32.const 0) + ) + ) + (if_else + (get_local $var$18) + (set_local $var$13 + (i32.const 775) + ) + (block $label$7 + (set_local $var$9 + (get_local $var$8) + ) + (set_local $var$14 + (i32.const 775) + ) + (set_local $var$20 + (i32.const 5) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $var$20) + (i32.const 5) + ) + (loop $label$8 $label$9 + (block $label$10 + (set_local $var$20 + (i32.const 0) + ) + (set_local $var$15 + (get_local $var$14) + ) + (loop $label$11 $label$12 + (block $label$13 + (set_local $var$2 + (i32.load8_s align=1 + (get_local $var$15) + ) + ) + (set_local $var$19 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $var$2) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (set_local $var$11 + (i32.add + (get_local $var$15) + (i32.const 1) + ) + ) + (if_else + (get_local $var$19) + (block $label$14 + (set_local $var$12 + (get_local $var$11) + ) + (br $label$11) + ) + (set_local $var$15 + (get_local $var$11) + ) + ) + (br $label$12) + ) + ) + (set_local $var$6 + (i32.add + (get_local $var$9) + (i32.const -1) + ) + ) + (set_local $var$17 + (i32.eq + (get_local $var$6) + (i32.const 0) + ) + ) + (if_else + (get_local $var$17) + (block $label$15 + (set_local $var$13 + (get_local $var$12) + ) + (br $label$8) + ) + (block $label$16 + (set_local $var$9 + (get_local $var$6) + ) + (set_local $var$14 + (get_local $var$12) + ) + (set_local $var$20 + (i32.const 5) + ) + ) + ) + (br $label$9) + ) + ) + ) + (get_local $var$13) + ) + ) + (func $___errno_location (type $4) (result i32) + (local $var$0 i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (block $label$0 + (set_local $var$7 + (i32.load align=4 + (i32.const 8) + ) + ) + (set_local $var$0 + (i32.load align=4 + (i32.const 16) + ) + ) + (set_local $var$5 + (i32.eq + (get_local $var$0) + (i32.const 0) + ) + ) + (if_else + (get_local $var$5) + (set_local $var$4 + (i32.const 60) + ) + (block $label$1 + (set_local $var$2 + (call_import $_pthread_self) + ) + (set_local $var$3 + (i32.add + (get_local $var$2) + (i32.const 60) + ) + ) + (set_local $var$1 + (i32.load align=4 + (get_local $var$3) + ) + ) + (set_local $var$4 + (get_local $var$1) + ) + ) + ) + (get_local $var$4) + ) + ) + (func $___stdio_close (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (block $label$0 + (set_local $var$7 + (i32.load align=4 + (i32.const 8) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (i32.load align=4 + (i32.const 8) + ) + (i32.load align=4 + (i32.const 16) + ) + ) + (call_import $abort) + ) + (set_local $var$5 + (get_local $var$7) + ) + (set_local $var$4 + (i32.add + (get_local $var$0) + (i32.const 60) + ) + ) + (set_local $var$1 + (i32.load align=4 + (get_local $var$4) + ) + ) + (i32.store align=4 + (get_local $var$5) + (get_local $var$1) + ) + (set_local $var$2 + (call_import $___syscall6 + (i32.const 6) + (get_local $var$5) + ) + ) + (set_local $var$3 + (call $___syscall_ret + (get_local $var$2) + ) + ) + (i32.store align=4 + (i32.const 8) + (get_local $var$7) + ) + (get_local $var$3) + ) + ) + (func $___stdout_write (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (block $label$0 + (set_local $var$18 + (i32.load align=4 + (i32.const 8) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (i32.const 80) + ) + ) + (if + (i32.ge_s + (i32.load align=4 + (i32.const 8) + ) + (i32.load align=4 + (i32.const 16) + ) + ) + (call_import $abort) + ) + (set_local $var$13 + (get_local $var$18) + ) + (set_local $var$10 + (i32.add + (get_local $var$18) + (i32.const 12) + ) + ) + (set_local $var$16 + (i32.add + (get_local $var$0) + (i32.const 36) + ) + ) + (i32.store align=4 + (get_local $var$16) + (i32.const 4) + ) + (set_local $var$3 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$5 + (i32.and + (get_local $var$3) + (i32.const 64) + ) + ) + (set_local $var$11 + (i32.eq + (get_local $var$5) + (i32.const 0) + ) + ) + (if + (get_local $var$11) + (block $label$1 + (set_local $var$8 + (i32.add + (get_local $var$0) + (i32.const 60) + ) + ) + (set_local $var$4 + (i32.load align=4 + (get_local $var$8) + ) + ) + (i32.store align=4 + (get_local $var$13) + (get_local $var$4) + ) + (set_local $var$14 + (i32.add + (get_local $var$13) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$14) + (i32.const 21505) + ) + (set_local $var$15 + (i32.add + (get_local $var$13) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$15) + (get_local $var$10) + ) + (set_local $var$6 + (call_import $___syscall54 + (i32.const 54) + (get_local $var$13) + ) + ) + (set_local $var$12 + (i32.eq + (get_local $var$6) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$12) + (i32.const 0) + ) + (block $label$2 + (set_local $var$9 + (i32.add + (get_local $var$0) + (i32.const 75) + ) + ) + (i32.store8 align=1 + (get_local $var$9) + (i32.const -1) + ) + ) + ) + ) + ) + (set_local $var$7 + (call $___stdio_write + (get_local $var$0) + (get_local $var$1) + (get_local $var$2) + ) + ) + (i32.store align=4 + (i32.const 8) + (get_local $var$18) + ) + (get_local $var$7) + ) + ) + (func $___stdio_seek (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (block $label$0 + (set_local $var$17 + (i32.load align=4 + (i32.const 8) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (i32.const 32) + ) + ) + (if + (i32.ge_s + (i32.load align=4 + (i32.const 8) + ) + (i32.load align=4 + (i32.const 16) + ) + ) + (call_import $abort) + ) + (set_local $var$11 + (get_local $var$17) + ) + (set_local $var$10 + (i32.add + (get_local $var$17) + (i32.const 20) + ) + ) + (set_local $var$9 + (i32.add + (get_local $var$0) + (i32.const 60) + ) + ) + (set_local $var$4 + (i32.load align=4 + (get_local $var$9) + ) + ) + (i32.store align=4 + (get_local $var$11) + (get_local $var$4) + ) + (set_local $var$12 + (i32.add + (get_local $var$11) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$12) + (i32.const 0) + ) + (set_local $var$13 + (i32.add + (get_local $var$11) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$13) + (get_local $var$1) + ) + (set_local $var$14 + (i32.add + (get_local $var$11) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$14) + (get_local $var$10) + ) + (set_local $var$15 + (i32.add + (get_local $var$11) + (i32.const 16) + ) + ) + (i32.store align=4 + (get_local $var$15) + (get_local $var$2) + ) + (set_local $var$6 + (call_import $___syscall140 + (i32.const 140) + (get_local $var$11) + ) + ) + (set_local $var$7 + (call $___syscall_ret + (get_local $var$6) + ) + ) + (set_local $var$8 + (i32.lt_s + (get_local $var$7) + (i32.const 0) + ) + ) + (if_else + (get_local $var$8) + (block $label$1 + (i32.store align=4 + (get_local $var$10) + (i32.const -1) + ) + (set_local $var$5 + (i32.const -1) + ) + ) + (block $label$2 + (set_local $var$3 + (i32.load align=4 + (get_local $var$10) + ) + ) + (set_local $var$5 + (get_local $var$3) + ) + ) + ) + (i32.store align=4 + (i32.const 8) + (get_local $var$17) + ) + (get_local $var$5) + ) + ) + (func $_fflush (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (local $var$19 i32) + (local $var$20 i32) + (local $var$21 i32) + (local $var$22 i32) + (local $var$23 i32) + (local $var$24 i32) + (local $var$25 i32) + (local $var$26 i32) + (local $var$27 i32) + (local $var$28 i32) + (local $var$29 i32) + (local $var$30 i32) + (local $var$31 i32) + (local $var$32 i32) + (local $var$33 i32) + (local $var$34 i32) + (local $var$35 i32) + (local $var$36 i32) + (local $var$37 i32) + (local $var$38 i32) + (block $label$0 + (set_local $var$38 + (i32.load align=4 + (i32.const 8) + ) + ) + (set_local $var$30 + (i32.eq + (get_local $var$0) + (i32.const 0) + ) + ) + (block $label$1 + (if_else + (get_local $var$30) + (block $label$2 + (set_local $var$2 + (i32.load align=4 + (i32.const 12) + ) + ) + (set_local $var$34 + (i32.eq + (get_local $var$2) + (i32.const 0) + ) + ) + (if_else + (get_local $var$34) + (set_local $var$16 + (i32.const 0) + ) + (block $label$3 + (set_local $var$3 + (i32.load align=4 + (i32.const 12) + ) + ) + (set_local $var$12 + (call $_fflush + (get_local $var$3) + ) + ) + (set_local $var$16 + (get_local $var$12) + ) + ) + ) + (call_import $___lock + (i32.const 44) + ) + (set_local $var$19 + (i32.load align=4 + (i32.const 40) + ) + ) + (set_local $var$32 + (i32.eq + (get_local $var$19) + (i32.const 0) + ) + ) + (if_else + (get_local $var$32) + (set_local $var$26 + (get_local $var$16) + ) + (block $label$4 + (set_local $var$20 + (get_local $var$19) + ) + (set_local $var$27 + (get_local $var$16) + ) + (loop $label$5 $label$6 + (block $label$7 + (set_local $var$22 + (i32.add + (get_local $var$20) + (i32.const 76) + ) + ) + (set_local $var$4 + (i32.load align=4 + (get_local $var$22) + ) + ) + (set_local $var$14 + (i32.gt_s + (get_local $var$4) + (i32.const -1) + ) + ) + (if_else + (get_local $var$14) + (block $label$8 + (set_local $var$10 + (call $___lockfile + (get_local $var$20) + ) + ) + (set_local $var$17 + (get_local $var$10) + ) + ) + (set_local $var$17 + (i32.const 0) + ) + ) + (set_local $var$36 + (i32.add + (get_local $var$20) + (i32.const 20) + ) + ) + (set_local $var$5 + (i32.load align=4 + (get_local $var$36) + ) + ) + (set_local $var$35 + (i32.add + (get_local $var$20) + (i32.const 28) + ) + ) + (set_local $var$6 + (i32.load align=4 + (get_local $var$35) + ) + ) + (set_local $var$15 + (i32.gt_u + (i32.shr_u + (get_local $var$5) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$6) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$15) + (block $label$9 + (set_local $var$11 + (call $___fflush_unlocked + (get_local $var$20) + ) + ) + (set_local $var$24 + (i32.or + (get_local $var$11) + (get_local $var$27) + ) + ) + (set_local $var$28 + (get_local $var$24) + ) + ) + (set_local $var$28 + (get_local $var$27) + ) + ) + (set_local $var$33 + (i32.eq + (get_local $var$17) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$33) + (i32.const 0) + ) + (call $___unlockfile + (get_local $var$20) + ) + ) + (set_local $var$23 + (i32.add + (get_local $var$20) + (i32.const 56) + ) + ) + (set_local $var$18 + (i32.load align=4 + (get_local $var$23) + ) + ) + (set_local $var$31 + (i32.eq + (get_local $var$18) + (i32.const 0) + ) + ) + (if_else + (get_local $var$31) + (block $label$10 + (set_local $var$26 + (get_local $var$28) + ) + (br $label$5) + ) + (block $label$11 + (set_local $var$20 + (get_local $var$18) + ) + (set_local $var$27 + (get_local $var$28) + ) + ) + ) + (br $label$6) + ) + ) + ) + ) + (call_import $___unlock + (i32.const 44) + ) + (set_local $var$29 + (get_local $var$26) + ) + ) + (block $label$12 + (set_local $var$21 + (i32.add + (get_local $var$0) + (i32.const 76) + ) + ) + (set_local $var$1 + (i32.load align=4 + (get_local $var$21) + ) + ) + (set_local $var$13 + (i32.gt_s + (get_local $var$1) + (i32.const -1) + ) + ) + (if + (i32.eq + (get_local $var$13) + (i32.const 0) + ) + (block $label$13 + (set_local $var$9 + (call $___fflush_unlocked + (get_local $var$0) + ) + ) + (set_local $var$29 + (get_local $var$9) + ) + (br $label$1) + ) + ) + (set_local $var$7 + (call $___lockfile + (get_local $var$0) + ) + ) + (set_local $var$25 + (i32.eq + (get_local $var$7) + (i32.const 0) + ) + ) + (set_local $var$8 + (call $___fflush_unlocked + (get_local $var$0) + ) + ) + (if_else + (get_local $var$25) + (set_local $var$29 + (get_local $var$8) + ) + (block $label$14 + (call $___unlockfile + (get_local $var$0) + ) + (set_local $var$29 + (get_local $var$8) + ) + ) + ) + ) + ) + ) + (get_local $var$29) + ) + ) + (func $_printf (type $5) (param $var$0 i32) (param $var$1 i32) (result i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (block $label$0 + (set_local $var$6 + (i32.load align=4 + (i32.const 8) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (i32.load align=4 + (i32.const 8) + ) + (i32.load align=4 + (i32.const 16) + ) + ) + (call_import $abort) + ) + (set_local $var$3 + (get_local $var$6) + ) + (i32.store align=4 + (get_local $var$3) + (get_local $var$1) + ) + (set_local $var$2 + (i32.load align=4 + (i32.const 8) + ) + ) + (set_local $var$4 + (call $_vfprintf + (get_local $var$2) + (get_local $var$0) + (get_local $var$3) + ) + ) + (i32.store align=4 + (i32.const 8) + (get_local $var$6) + ) + (get_local $var$4) + ) + ) + (func $___lockfile (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (local $var$2 i32) + (block $label$0 + (set_local $var$2 + (i32.load align=4 + (i32.const 8) + ) + ) + (i32.const 0) + ) + ) + (func $___unlockfile (type $2) (param $var$0 i32) + (local $var$1 i32) + (local $var$2 i32) + (block $label$0 + (set_local $var$2 + (i32.load align=4 + (i32.const 8) + ) + ) + (br $label$0) + ) + ) + (func $___stdio_write (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (local $var$19 i32) + (local $var$20 i32) + (local $var$21 i32) + (local $var$22 i32) + (local $var$23 i32) + (local $var$24 i32) + (local $var$25 i32) + (local $var$26 i32) + (local $var$27 i32) + (local $var$28 i32) + (local $var$29 i32) + (local $var$30 i32) + (local $var$31 i32) + (local $var$32 i32) + (local $var$33 i32) + (local $var$34 i32) + (local $var$35 i32) + (local $var$36 i32) + (local $var$37 i32) + (local $var$38 i32) + (local $var$39 i32) + (local $var$40 i32) + (local $var$41 i32) + (local $var$42 i32) + (local $var$43 i32) + (local $var$44 i32) + (local $var$45 i32) + (local $var$46 i32) + (local $var$47 i32) + (local $var$48 i32) + (local $var$49 i32) + (local $var$50 i32) + (local $var$51 i32) + (local $var$52 i32) + (local $var$53 i32) + (local $var$54 i32) + (local $var$55 i32) + (local $var$56 i32) + (local $var$57 i32) + (local $var$58 i32) + (local $var$59 i32) + (local $var$60 i32) + (local $var$61 i32) + (local $var$62 i32) + (local $var$63 i32) + (local $var$64 i32) + (local $var$65 i32) + (local $var$66 i32) + (local $var$67 i32) + (local $var$68 i32) + (local $var$69 i32) + (local $var$70 i32) + (local $var$71 i32) + (local $var$72 i32) + (local $var$73 i32) + (block $label$0 + (set_local $var$73 + (i32.load align=4 + (i32.const 8) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (i32.const 48) + ) + ) + (if + (i32.ge_s + (i32.load align=4 + (i32.const 8) + ) + (i32.load align=4 + (i32.const 16) + ) + ) + (call_import $abort) + ) + (set_local $var$63 + (i32.add + (get_local $var$73) + (i32.const 16) + ) + ) + (set_local $var$62 + (get_local $var$73) + ) + (set_local $var$52 + (i32.add + (get_local $var$73) + (i32.const 32) + ) + ) + (set_local $var$68 + (i32.add + (get_local $var$0) + (i32.const 28) + ) + ) + (set_local $var$4 + (i32.load align=4 + (get_local $var$68) + ) + ) + (i32.store align=4 + (get_local $var$52) + (get_local $var$4) + ) + (set_local $var$43 + (i32.add + (get_local $var$52) + (i32.const 4) + ) + ) + (set_local $var$71 + (i32.add + (get_local $var$0) + (i32.const 20) + ) + ) + (set_local $var$5 + (i32.load align=4 + (get_local $var$71) + ) + ) + (set_local $var$57 + (i32.sub + (get_local $var$5) + (get_local $var$4) + ) + ) + (i32.store align=4 + (get_local $var$43) + (get_local $var$57) + ) + (set_local $var$42 + (i32.add + (get_local $var$52) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$42) + (get_local $var$1) + ) + (set_local $var$46 + (i32.add + (get_local $var$52) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$46) + (get_local $var$2) + ) + (set_local $var$19 + (i32.add + (get_local $var$57) + (get_local $var$2) + ) + ) + (set_local $var$37 + (i32.add + (get_local $var$0) + (i32.const 60) + ) + ) + (set_local $var$23 + (i32.add + (get_local $var$0) + (i32.const 44) + ) + ) + (set_local $var$39 + (get_local $var$52) + ) + (set_local $var$49 + (i32.const 2) + ) + (set_local $var$54 + (get_local $var$19) + ) + (loop $label$1 $label$2 + (block $label$3 + (set_local $var$11 + (i32.load align=4 + (i32.const 16) + ) + ) + (set_local $var$61 + (i32.eq + (get_local $var$11) + (i32.const 0) + ) + ) + (if_else + (get_local $var$61) + (block $label$4 + (set_local $var$13 + (i32.load align=4 + (get_local $var$37) + ) + ) + (i32.store align=4 + (get_local $var$63) + (get_local $var$13) + ) + (set_local $var$66 + (i32.add + (get_local $var$63) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$66) + (get_local $var$39) + ) + (set_local $var$67 + (i32.add + (get_local $var$63) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$67) + (get_local $var$49) + ) + (set_local $var$28 + (call_import $___syscall146 + (i32.const 146) + (get_local $var$63) + ) + ) + (set_local $var$26 + (call $___syscall_ret + (get_local $var$28) + ) + ) + (set_local $var$34 + (get_local $var$26) + ) + ) + (block $label$5 + (call_import $_pthread_cleanup_push + (i32.const 5) + (get_local $var$0) + ) + (set_local $var$12 + (i32.load align=4 + (get_local $var$37) + ) + ) + (i32.store align=4 + (get_local $var$62) + (get_local $var$12) + ) + (set_local $var$64 + (i32.add + (get_local $var$62) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$64) + (get_local $var$39) + ) + (set_local $var$65 + (i32.add + (get_local $var$62) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$65) + (get_local $var$49) + ) + (set_local $var$25 + (call_import $___syscall146 + (i32.const 146) + (get_local $var$62) + ) + ) + (set_local $var$27 + (call $___syscall_ret + (get_local $var$25) + ) + ) + (call_import $_pthread_cleanup_pop + (i32.const 0) + ) + (set_local $var$34 + (get_local $var$27) + ) + ) + ) + (set_local $var$29 + (i32.eq + (get_local $var$54) + (get_local $var$34) + ) + ) + (if + (get_local $var$29) + (block $label$6 + (set_local $var$72 + (i32.const 6) + ) + (br $label$1) + ) + ) + (set_local $var$30 + (i32.lt_s + (get_local $var$34) + (i32.const 0) + ) + ) + (if + (get_local $var$30) + (block $label$7 + (set_local $var$40 + (get_local $var$39) + ) + (set_local $var$50 + (get_local $var$49) + ) + (set_local $var$72 + (i32.const 8) + ) + (br $label$1) + ) + ) + (set_local $var$58 + (i32.sub + (get_local $var$54) + (get_local $var$34) + ) + ) + (set_local $var$45 + (i32.add + (get_local $var$39) + (i32.const 4) + ) + ) + (set_local $var$6 + (i32.load align=4 + (get_local $var$45) + ) + ) + (set_local $var$32 + (i32.gt_u + (i32.shr_u + (get_local $var$34) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$6) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$32) + (block $label$8 + (set_local $var$7 + (i32.load align=4 + (get_local $var$23) + ) + ) + (i32.store align=4 + (get_local $var$68) + (get_local $var$7) + ) + (i32.store align=4 + (get_local $var$71) + (get_local $var$7) + ) + (set_local $var$59 + (i32.sub + (get_local $var$34) + (get_local $var$6) + ) + ) + (set_local $var$38 + (i32.add + (get_local $var$39) + (i32.const 8) + ) + ) + (set_local $var$36 + (i32.add + (get_local $var$49) + (i32.const -1) + ) + ) + (set_local $var$48 + (i32.add + (get_local $var$39) + (i32.const 12) + ) + ) + (set_local $var$3 + (i32.load align=4 + (get_local $var$48) + ) + ) + (set_local $var$10 + (get_local $var$3) + ) + (set_local $var$35 + (get_local $var$59) + ) + (set_local $var$41 + (get_local $var$38) + ) + (set_local $var$51 + (get_local $var$36) + ) + ) + (block $label$9 + (set_local $var$33 + (i32.eq + (get_local $var$49) + (i32.const 2) + ) + ) + (if_else + (get_local $var$33) + (block $label$10 + (set_local $var$8 + (i32.load align=4 + (get_local $var$68) + ) + ) + (set_local $var$21 + (i32.add + (get_local $var$8) + (get_local $var$34) + ) + ) + (i32.store align=4 + (get_local $var$68) + (get_local $var$21) + ) + (set_local $var$10 + (get_local $var$6) + ) + (set_local $var$35 + (get_local $var$34) + ) + (set_local $var$41 + (get_local $var$39) + ) + (set_local $var$51 + (i32.const 2) + ) + ) + (block $label$11 + (set_local $var$10 + (get_local $var$6) + ) + (set_local $var$35 + (get_local $var$34) + ) + (set_local $var$41 + (get_local $var$39) + ) + (set_local $var$51 + (get_local $var$49) + ) + ) + ) + ) + ) + (set_local $var$9 + (i32.load align=4 + (get_local $var$41) + ) + ) + (set_local $var$22 + (i32.add + (get_local $var$9) + (get_local $var$35) + ) + ) + (i32.store align=4 + (get_local $var$41) + (get_local $var$22) + ) + (set_local $var$47 + (i32.add + (get_local $var$41) + (i32.const 4) + ) + ) + (set_local $var$60 + (i32.sub + (get_local $var$10) + (get_local $var$35) + ) + ) + (i32.store align=4 + (get_local $var$47) + (get_local $var$60) + ) + (set_local $var$39 + (get_local $var$41) + ) + (set_local $var$49 + (get_local $var$51) + ) + (set_local $var$54 + (get_local $var$58) + ) + (br $label$2) + ) + ) + (if_else + (i32.eq + (get_local $var$72) + (i32.const 6) + ) + (block $label$12 + (set_local $var$14 + (i32.load align=4 + (get_local $var$23) + ) + ) + (set_local $var$24 + (i32.add + (get_local $var$0) + (i32.const 48) + ) + ) + (set_local $var$15 + (i32.load align=4 + (get_local $var$24) + ) + ) + (set_local $var$20 + (i32.add + (get_local $var$14) + (get_local $var$15) + ) + ) + (set_local $var$69 + (i32.add + (get_local $var$0) + (i32.const 16) + ) + ) + (i32.store align=4 + (get_local $var$69) + (get_local $var$20) + ) + (set_local $var$16 + (get_local $var$14) + ) + (i32.store align=4 + (get_local $var$68) + (get_local $var$16) + ) + (i32.store align=4 + (get_local $var$71) + (get_local $var$16) + ) + (set_local $var$55 + (get_local $var$2) + ) + ) + (if + (i32.eq + (get_local $var$72) + (i32.const 8) + ) + (block $label$13 + (set_local $var$70 + (i32.add + (get_local $var$0) + (i32.const 16) + ) + ) + (i32.store align=4 + (get_local $var$70) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$68) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$71) + (i32.const 0) + ) + (set_local $var$17 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$53 + (i32.or + (get_local $var$17) + (i32.const 32) + ) + ) + (i32.store align=4 + (get_local $var$0) + (get_local $var$53) + ) + (set_local $var$31 + (i32.eq + (get_local $var$50) + (i32.const 2) + ) + ) + (if_else + (get_local $var$31) + (set_local $var$55 + (i32.const 0) + ) + (block $label$14 + (set_local $var$44 + (i32.add + (get_local $var$40) + (i32.const 4) + ) + ) + (set_local $var$18 + (i32.load align=4 + (get_local $var$44) + ) + ) + (set_local $var$56 + (i32.sub + (get_local $var$2) + (get_local $var$18) + ) + ) + (set_local $var$55 + (get_local $var$56) + ) + ) + ) + ) + ) + ) + (i32.store align=4 + (i32.const 8) + (get_local $var$73) + ) + (get_local $var$55) + ) + ) + (func $_vfprintf (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (local $var$19 i32) + (local $var$20 i32) + (local $var$21 i32) + (local $var$22 i32) + (local $var$23 i32) + (local $var$24 i32) + (local $var$25 i32) + (local $var$26 i32) + (local $var$27 i32) + (local $var$28 i32) + (local $var$29 i32) + (local $var$30 i32) + (local $var$31 i32) + (local $var$32 i32) + (local $var$33 i32) + (local $var$34 i32) + (local $var$35 i32) + (local $var$36 i32) + (local $var$37 i32) + (local $var$38 i32) + (local $var$39 i32) + (local $var$40 i32) + (local $var$41 i32) + (local $var$42 i32) + (local $var$43 i32) + (local $var$44 i32) + (local $var$45 i32) + (local $var$46 i32) + (local $var$47 i32) + (local $var$48 i32) + (local $var$49 i32) + (block $label$0 + (set_local $var$48 + (i32.load align=4 + (i32.const 8) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (i32.const 224) + ) + ) + (if + (i32.ge_s + (i32.load align=4 + (i32.const 8) + ) + (i32.load align=4 + (i32.const 16) + ) + ) + (call_import $abort) + ) + (set_local $var$16 + (i32.add + (get_local $var$48) + (i32.const 120) + ) + ) + (set_local $var$31 + (i32.add + (get_local $var$48) + (i32.const 80) + ) + ) + (set_local $var$30 + (get_local $var$48) + ) + (set_local $var$27 + (i32.add + (get_local $var$48) + (i32.const 136) + ) + ) + (set_local $var$46 + (get_local $var$31) + ) + (set_local $var$49 + (i32.add + (get_local $var$46) + (i32.const 40) + ) + ) + (loop $label$1 $label$2 + (block $label$3 + (i32.store align=4 + (get_local $var$46) + (i32.const 0) + ) + (set_local $var$46 + (i32.add + (get_local $var$46) + (i32.const 4) + ) + ) + (br_if $label$2 + (i32.lt_s + (get_local $var$46) + (get_local $var$49) + ) + ) + ) + ) + (set_local $var$41 + (i32.load align=4 + (get_local $var$2) + ) + ) + (i32.store align=4 + (get_local $var$16) + (get_local $var$41) + ) + (set_local $var$19 + (call $_printf_core + (i32.const 0) + (get_local $var$1) + (get_local $var$16) + (get_local $var$30) + (get_local $var$31) + ) + ) + (set_local $var$23 + (i32.lt_s + (get_local $var$19) + (i32.const 0) + ) + ) + (if_else + (get_local $var$23) + (set_local $var$35 + (i32.const -1) + ) + (block $label$4 + (set_local $var$28 + (i32.add + (get_local $var$0) + (i32.const 76) + ) + ) + (set_local $var$4 + (i32.load align=4 + (get_local $var$28) + ) + ) + (set_local $var$24 + (i32.gt_s + (get_local $var$4) + (i32.const -1) + ) + ) + (if_else + (get_local $var$24) + (block $label$5 + (set_local $var$22 + (call $___lockfile + (get_local $var$0) + ) + ) + (set_local $var$26 + (get_local $var$22) + ) + ) + (set_local $var$26 + (i32.const 0) + ) + ) + (set_local $var$5 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$13 + (i32.and + (get_local $var$5) + (i32.const 32) + ) + ) + (set_local $var$29 + (i32.add + (get_local $var$0) + (i32.const 74) + ) + ) + (set_local $var$6 + (i32.load8_s align=1 + (get_local $var$29) + ) + ) + (set_local $var$25 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $var$6) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 1) + ) + ) + (if + (get_local $var$25) + (block $label$6 + (set_local $var$14 + (i32.and + (get_local $var$5) + (i32.const -33) + ) + ) + (i32.store align=4 + (get_local $var$0) + (get_local $var$14) + ) + ) + ) + (set_local $var$18 + (i32.add + (get_local $var$0) + (i32.const 48) + ) + ) + (set_local $var$7 + (i32.load align=4 + (get_local $var$18) + ) + ) + (set_local $var$36 + (i32.eq + (get_local $var$7) + (i32.const 0) + ) + ) + (if_else + (get_local $var$36) + (block $label$7 + (set_local $var$17 + (i32.add + (get_local $var$0) + (i32.const 44) + ) + ) + (set_local $var$8 + (i32.load align=4 + (get_local $var$17) + ) + ) + (i32.store align=4 + (get_local $var$17) + (get_local $var$27) + ) + (set_local $var$42 + (i32.add + (get_local $var$0) + (i32.const 28) + ) + ) + (i32.store align=4 + (get_local $var$42) + (get_local $var$27) + ) + (set_local $var$44 + (i32.add + (get_local $var$0) + (i32.const 20) + ) + ) + (i32.store align=4 + (get_local $var$44) + (get_local $var$27) + ) + (i32.store align=4 + (get_local $var$18) + (i32.const 80) + ) + (set_local $var$12 + (i32.add + (get_local $var$27) + (i32.const 80) + ) + ) + (set_local $var$43 + (i32.add + (get_local $var$0) + (i32.const 16) + ) + ) + (i32.store align=4 + (get_local $var$43) + (get_local $var$12) + ) + (set_local $var$20 + (call $_printf_core + (get_local $var$0) + (get_local $var$1) + (get_local $var$16) + (get_local $var$30) + (get_local $var$31) + ) + ) + (set_local $var$37 + (i32.eq + (get_local $var$8) + (i32.const 0) + ) + ) + (if_else + (get_local $var$37) + (set_local $var$33 + (get_local $var$20) + ) + (block $label$8 + (set_local $var$45 + (i32.add + (get_local $var$0) + (i32.const 36) + ) + ) + (set_local $var$9 + (i32.load align=4 + (get_local $var$45) + ) + ) + (call_indirect $0 + (i32.add + (i32.and + (get_local $var$9) + (i32.const 7) + ) + (i32.const 2) + ) + (get_local $var$0) + (i32.const 0) + (i32.const 0) + ) + (set_local $var$10 + (i32.load align=4 + (get_local $var$44) + ) + ) + (set_local $var$38 + (i32.eq + (get_local $var$10) + (i32.const 0) + ) + ) + (set_local $var$3 + (if_else + (get_local $var$38) + (i32.const -1) + (get_local $var$20) + ) + ) + (i32.store align=4 + (get_local $var$17) + (get_local $var$8) + ) + (i32.store align=4 + (get_local $var$18) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$43) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$42) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$44) + (i32.const 0) + ) + (set_local $var$33 + (get_local $var$3) + ) + ) + ) + ) + (block $label$9 + (set_local $var$21 + (call $_printf_core + (get_local $var$0) + (get_local $var$1) + (get_local $var$16) + (get_local $var$30) + (get_local $var$31) + ) + ) + (set_local $var$33 + (get_local $var$21) + ) + ) + ) + (set_local $var$11 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$15 + (i32.and + (get_local $var$11) + (i32.const 32) + ) + ) + (set_local $var$39 + (i32.eq + (get_local $var$15) + (i32.const 0) + ) + ) + (set_local $var$34 + (if_else + (get_local $var$39) + (get_local $var$33) + (i32.const -1) + ) + ) + (set_local $var$32 + (i32.or + (get_local $var$11) + (get_local $var$13) + ) + ) + (i32.store align=4 + (get_local $var$0) + (get_local $var$32) + ) + (set_local $var$40 + (i32.eq + (get_local $var$26) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$40) + (i32.const 0) + ) + (call $___unlockfile + (get_local $var$0) + ) + ) + (set_local $var$35 + (get_local $var$34) + ) + ) + ) + (i32.store align=4 + (i32.const 8) + (get_local $var$48) + ) + (get_local $var$35) + ) + ) + (func $___fwritex (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (local $var$19 i32) + (local $var$20 i32) + (local $var$21 i32) + (local $var$22 i32) + (local $var$23 i32) + (local $var$24 i32) + (local $var$25 i32) + (local $var$26 i32) + (local $var$27 i32) + (local $var$28 i32) + (local $var$29 i32) + (local $var$30 i32) + (local $var$31 i32) + (local $var$32 i32) + (local $var$33 i32) + (local $var$34 i32) + (local $var$35 i32) + (local $var$36 i32) + (local $var$37 i32) + (local $var$38 i32) + (local $var$39 i32) + (local $var$40 i32) + (local $var$41 i32) + (local $var$42 i32) + (local $var$43 i32) + (local $var$44 i32) + (local $var$45 i32) + (block $label$0 + (set_local $var$45 + (i32.load align=4 + (i32.const 8) + ) + ) + (set_local $var$40 + (i32.add + (get_local $var$2) + (i32.const 16) + ) + ) + (set_local $var$5 + (i32.load align=4 + (get_local $var$40) + ) + ) + (set_local $var$37 + (i32.eq + (get_local $var$5) + (i32.const 0) + ) + ) + (if_else + (get_local $var$37) + (block $label$1 + (set_local $var$20 + (call $___towrite + (get_local $var$2) + ) + ) + (set_local $var$38 + (i32.eq + (get_local $var$20) + (i32.const 0) + ) + ) + (if_else + (get_local $var$38) + (block $label$2 + (set_local $var$3 + (i32.load align=4 + (get_local $var$40) + ) + ) + (set_local $var$9 + (get_local $var$3) + ) + (set_local $var$44 + (i32.const 5) + ) + ) + (set_local $var$32 + (i32.const 0) + ) + ) + ) + (block $label$3 + (set_local $var$6 + (get_local $var$5) + ) + (set_local $var$9 + (get_local $var$6) + ) + (set_local $var$44 + (i32.const 5) + ) + ) + ) + (block $label$4 + (if + (i32.eq + (get_local $var$44) + (i32.const 5) + ) + (block $label$5 + (set_local $var$41 + (i32.add + (get_local $var$2) + (i32.const 20) + ) + ) + (set_local $var$8 + (i32.load align=4 + (get_local $var$41) + ) + ) + (set_local $var$35 + (i32.sub + (get_local $var$9) + (get_local $var$8) + ) + ) + (set_local $var$23 + (i32.lt_u + (i32.shr_u + (get_local $var$35) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$1) + (i32.const 0) + ) + ) + ) + (set_local $var$10 + (get_local $var$8) + ) + (if + (get_local $var$23) + (block $label$6 + (set_local $var$42 + (i32.add + (get_local $var$2) + (i32.const 36) + ) + ) + (set_local $var$11 + (i32.load align=4 + (get_local $var$42) + ) + ) + (set_local $var$22 + (call_indirect $0 + (i32.add + (i32.and + (get_local $var$11) + (i32.const 7) + ) + (i32.const 2) + ) + (get_local $var$2) + (get_local $var$0) + (get_local $var$1) + ) + ) + (set_local $var$32 + (get_local $var$22) + ) + (br $label$4) + ) + ) + (set_local $var$31 + (i32.add + (get_local $var$2) + (i32.const 75) + ) + ) + (set_local $var$12 + (i32.load8_s align=1 + (get_local $var$31) + ) + ) + (set_local $var$26 + (i32.gt_s + (i32.shr_s + (i32.shl + (get_local $var$12) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -1) + ) + ) + (block $label$7 + (if_else + (get_local $var$26) + (block $label$8 + (set_local $var$27 + (get_local $var$1) + ) + (loop $label$9 $label$10 + (block $label$11 + (set_local $var$39 + (i32.eq + (get_local $var$27) + (i32.const 0) + ) + ) + (if + (get_local $var$39) + (block $label$12 + (set_local $var$15 + (get_local $var$10) + ) + (set_local $var$29 + (i32.const 0) + ) + (set_local $var$30 + (get_local $var$1) + ) + (set_local $var$33 + (get_local $var$0) + ) + (br $label$7) + ) + ) + (set_local $var$34 + (i32.add + (get_local $var$27) + (i32.const -1) + ) + ) + (set_local $var$19 + (i32.add + (get_local $var$0) + (get_local $var$34) + ) + ) + (set_local $var$13 + (i32.load8_s align=1 + (get_local $var$19) + ) + ) + (set_local $var$24 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $var$13) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 10) + ) + ) + (if_else + (get_local $var$24) + (block $label$13 + (set_local $var$28 + (get_local $var$27) + ) + (br $label$9) + ) + (set_local $var$27 + (get_local $var$34) + ) + ) + (br $label$10) + ) + ) + (set_local $var$43 + (i32.add + (get_local $var$2) + (i32.const 36) + ) + ) + (set_local $var$14 + (i32.load align=4 + (get_local $var$43) + ) + ) + (set_local $var$21 + (call_indirect $0 + (i32.add + (i32.and + (get_local $var$14) + (i32.const 7) + ) + (i32.const 2) + ) + (get_local $var$2) + (get_local $var$0) + (get_local $var$28) + ) + ) + (set_local $var$25 + (i32.lt_u + (i32.shr_u + (get_local $var$21) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$28) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$25) + (block $label$14 + (set_local $var$32 + (get_local $var$28) + ) + (br $label$4) + ) + ) + (set_local $var$17 + (i32.add + (get_local $var$0) + (get_local $var$28) + ) + ) + (set_local $var$36 + (i32.sub + (get_local $var$1) + (get_local $var$28) + ) + ) + (set_local $var$4 + (i32.load align=4 + (get_local $var$41) + ) + ) + (set_local $var$15 + (get_local $var$4) + ) + (set_local $var$29 + (get_local $var$28) + ) + (set_local $var$30 + (get_local $var$36) + ) + (set_local $var$33 + (get_local $var$17) + ) + ) + (block $label$15 + (set_local $var$15 + (get_local $var$10) + ) + (set_local $var$29 + (i32.const 0) + ) + (set_local $var$30 + (get_local $var$1) + ) + (set_local $var$33 + (get_local $var$0) + ) + ) + ) + ) + (call $_memcpy + (get_local $var$15) + (get_local $var$33) + (get_local $var$30) + ) + (set_local $var$7 + (i32.load align=4 + (get_local $var$41) + ) + ) + (set_local $var$18 + (i32.add + (get_local $var$7) + (get_local $var$30) + ) + ) + (i32.store align=4 + (get_local $var$41) + (get_local $var$18) + ) + (set_local $var$16 + (i32.add + (get_local $var$29) + (get_local $var$30) + ) + ) + (set_local $var$32 + (get_local $var$16) + ) + ) + ) + ) + (get_local $var$32) + ) + ) + (func $___towrite (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (local $var$19 i32) + (local $var$20 i32) + (local $var$21 i32) + (local $var$22 i32) + (local $var$23 i32) + (local $var$24 i32) + (block $label$0 + (set_local $var$24 + (i32.load align=4 + (i32.const 8) + ) + ) + (set_local $var$12 + (i32.add + (get_local $var$0) + (i32.const 74) + ) + ) + (set_local $var$1 + (i32.load8_s align=1 + (get_local $var$12) + ) + ) + (set_local $var$10 + (i32.shr_s + (i32.shl + (get_local $var$1) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $var$18 + (i32.add + (get_local $var$10) + (i32.const 255) + ) + ) + (set_local $var$13 + (i32.or + (get_local $var$18) + (get_local $var$10) + ) + ) + (set_local $var$11 + (i32.and + (get_local $var$13) + (i32.const 255) + ) + ) + (i32.store8 align=1 + (get_local $var$12) + (get_local $var$11) + ) + (set_local $var$2 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$7 + (i32.and + (get_local $var$2) + (i32.const 8) + ) + ) + (set_local $var$19 + (i32.eq + (get_local $var$7) + (i32.const 0) + ) + ) + (if_else + (get_local $var$19) + (block $label$1 + (set_local $var$15 + (i32.add + (get_local $var$0) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$15) + (i32.const 0) + ) + (set_local $var$17 + (i32.add + (get_local $var$0) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$17) + (i32.const 0) + ) + (set_local $var$8 + (i32.add + (get_local $var$0) + (i32.const 44) + ) + ) + (set_local $var$3 + (i32.load align=4 + (get_local $var$8) + ) + ) + (set_local $var$20 + (i32.add + (get_local $var$0) + (i32.const 28) + ) + ) + (i32.store align=4 + (get_local $var$20) + (get_local $var$3) + ) + (set_local $var$22 + (i32.add + (get_local $var$0) + (i32.const 20) + ) + ) + (i32.store align=4 + (get_local $var$22) + (get_local $var$3) + ) + (set_local $var$4 + (get_local $var$3) + ) + (set_local $var$9 + (i32.add + (get_local $var$0) + (i32.const 48) + ) + ) + (set_local $var$5 + (i32.load align=4 + (get_local $var$9) + ) + ) + (set_local $var$6 + (i32.add + (get_local $var$4) + (get_local $var$5) + ) + ) + (set_local $var$21 + (i32.add + (get_local $var$0) + (i32.const 16) + ) + ) + (i32.store align=4 + (get_local $var$21) + (get_local $var$6) + ) + (set_local $var$16 + (i32.const 0) + ) + ) + (block $label$2 + (set_local $var$14 + (i32.or + (get_local $var$2) + (i32.const 32) + ) + ) + (i32.store align=4 + (get_local $var$0) + (get_local $var$14) + ) + (set_local $var$16 + (i32.const -1) + ) + ) + ) + (get_local $var$16) + ) + ) + (func $_wcrtomb (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (local $var$19 i32) + (local $var$20 i32) + (local $var$21 i32) + (local $var$22 i32) + (local $var$23 i32) + (local $var$24 i32) + (local $var$25 i32) + (local $var$26 i32) + (local $var$27 i32) + (local $var$28 i32) + (local $var$29 i32) + (local $var$30 i32) + (local $var$31 i32) + (local $var$32 i32) + (local $var$33 i32) + (local $var$34 i32) + (local $var$35 i32) + (local $var$36 i32) + (local $var$37 i32) + (local $var$38 i32) + (local $var$39 i32) + (local $var$40 i32) + (local $var$41 i32) + (local $var$42 i32) + (local $var$43 i32) + (local $var$44 i32) + (local $var$45 i32) + (local $var$46 i32) + (local $var$47 i32) + (local $var$48 i32) + (local $var$49 i32) + (local $var$50 i32) + (local $var$51 i32) + (local $var$52 i32) + (block $label$0 + (set_local $var$52 + (i32.load align=4 + (i32.const 8) + ) + ) + (set_local $var$50 + (i32.eq + (get_local $var$0) + (i32.const 0) + ) + ) + (block $label$1 + (if_else + (get_local $var$50) + (set_local $var$42 + (i32.const 1) + ) + (block $label$2 + (set_local $var$11 + (i32.lt_u + (i32.shr_u + (get_local $var$1) + (i32.const 0) + ) + (i32.const 128) + ) + ) + (if + (get_local $var$11) + (block $label$3 + (set_local $var$16 + (i32.and + (get_local $var$1) + (i32.const 255) + ) + ) + (i32.store8 align=1 + (get_local $var$0) + (get_local $var$16) + ) + (set_local $var$42 + (i32.const 1) + ) + (br $label$1) + ) + ) + (set_local $var$13 + (i32.lt_u + (i32.shr_u + (get_local $var$1) + (i32.const 0) + ) + (i32.const 2048) + ) + ) + (if + (get_local $var$13) + (block $label$4 + (set_local $var$43 + (i32.shr_u + (get_local $var$1) + (i32.const 6) + ) + ) + (set_local $var$32 + (i32.or + (get_local $var$43) + (i32.const 192) + ) + ) + (set_local $var$24 + (i32.and + (get_local $var$32) + (i32.const 255) + ) + ) + (set_local $var$26 + (i32.add + (get_local $var$0) + (i32.const 1) + ) + ) + (i32.store8 align=1 + (get_local $var$0) + (get_local $var$24) + ) + (set_local $var$4 + (i32.and + (get_local $var$1) + (i32.const 63) + ) + ) + (set_local $var$41 + (i32.or + (get_local $var$4) + (i32.const 128) + ) + ) + (set_local $var$25 + (i32.and + (get_local $var$41) + (i32.const 255) + ) + ) + (i32.store8 align=1 + (get_local $var$26) + (get_local $var$25) + ) + (set_local $var$42 + (i32.const 2) + ) + (br $label$1) + ) + ) + (set_local $var$15 + (i32.lt_u + (i32.shr_u + (get_local $var$1) + (i32.const 0) + ) + (i32.const 55296) + ) + ) + (set_local $var$3 + (i32.and + (get_local $var$1) + (i32.const -8192) + ) + ) + (set_local $var$12 + (i32.eq + (get_local $var$3) + (i32.const 57344) + ) + ) + (set_local $var$33 + (i32.or + (get_local $var$15) + (get_local $var$12) + ) + ) + (if + (get_local $var$33) + (block $label$5 + (set_local $var$44 + (i32.shr_u + (get_local $var$1) + (i32.const 12) + ) + ) + (set_local $var$34 + (i32.or + (get_local $var$44) + (i32.const 224) + ) + ) + (set_local $var$17 + (i32.and + (get_local $var$34) + (i32.const 255) + ) + ) + (set_local $var$27 + (i32.add + (get_local $var$0) + (i32.const 1) + ) + ) + (i32.store8 align=1 + (get_local $var$0) + (get_local $var$17) + ) + (set_local $var$45 + (i32.shr_u + (get_local $var$1) + (i32.const 6) + ) + ) + (set_local $var$5 + (i32.and + (get_local $var$45) + (i32.const 63) + ) + ) + (set_local $var$35 + (i32.or + (get_local $var$5) + (i32.const 128) + ) + ) + (set_local $var$18 + (i32.and + (get_local $var$35) + (i32.const 255) + ) + ) + (set_local $var$28 + (i32.add + (get_local $var$0) + (i32.const 2) + ) + ) + (i32.store8 align=1 + (get_local $var$27) + (get_local $var$18) + ) + (set_local $var$6 + (i32.and + (get_local $var$1) + (i32.const 63) + ) + ) + (set_local $var$36 + (i32.or + (get_local $var$6) + (i32.const 128) + ) + ) + (set_local $var$19 + (i32.and + (get_local $var$36) + (i32.const 255) + ) + ) + (i32.store8 align=1 + (get_local $var$28) + (get_local $var$19) + ) + (set_local $var$42 + (i32.const 3) + ) + (br $label$1) + ) + ) + (set_local $var$49 + (i32.add + (get_local $var$1) + (i32.const -65536) + ) + ) + (set_local $var$14 + (i32.lt_u + (i32.shr_u + (get_local $var$49) + (i32.const 0) + ) + (i32.const 1048576) + ) + ) + (if_else + (get_local $var$14) + (block $label$6 + (set_local $var$46 + (i32.shr_u + (get_local $var$1) + (i32.const 18) + ) + ) + (set_local $var$37 + (i32.or + (get_local $var$46) + (i32.const 240) + ) + ) + (set_local $var$20 + (i32.and + (get_local $var$37) + (i32.const 255) + ) + ) + (set_local $var$29 + (i32.add + (get_local $var$0) + (i32.const 1) + ) + ) + (i32.store8 align=1 + (get_local $var$0) + (get_local $var$20) + ) + (set_local $var$47 + (i32.shr_u + (get_local $var$1) + (i32.const 12) + ) + ) + (set_local $var$7 + (i32.and + (get_local $var$47) + (i32.const 63) + ) + ) + (set_local $var$38 + (i32.or + (get_local $var$7) + (i32.const 128) + ) + ) + (set_local $var$21 + (i32.and + (get_local $var$38) + (i32.const 255) + ) + ) + (set_local $var$30 + (i32.add + (get_local $var$0) + (i32.const 2) + ) + ) + (i32.store8 align=1 + (get_local $var$29) + (get_local $var$21) + ) + (set_local $var$48 + (i32.shr_u + (get_local $var$1) + (i32.const 6) + ) + ) + (set_local $var$8 + (i32.and + (get_local $var$48) + (i32.const 63) + ) + ) + (set_local $var$39 + (i32.or + (get_local $var$8) + (i32.const 128) + ) + ) + (set_local $var$22 + (i32.and + (get_local $var$39) + (i32.const 255) + ) + ) + (set_local $var$31 + (i32.add + (get_local $var$0) + (i32.const 3) + ) + ) + (i32.store8 align=1 + (get_local $var$30) + (get_local $var$22) + ) + (set_local $var$9 + (i32.and + (get_local $var$1) + (i32.const 63) + ) + ) + (set_local $var$40 + (i32.or + (get_local $var$9) + (i32.const 128) + ) + ) + (set_local $var$23 + (i32.and + (get_local $var$40) + (i32.const 255) + ) + ) + (i32.store8 align=1 + (get_local $var$31) + (get_local $var$23) + ) + (set_local $var$42 + (i32.const 4) + ) + (br $label$1) + ) + (block $label$7 + (set_local $var$10 + (call $___errno_location) + ) + (i32.store align=4 + (get_local $var$10) + (i32.const 84) + ) + (set_local $var$42 + (i32.const -1) + ) + (br $label$1) + ) + ) + ) + ) + ) + (get_local $var$42) + ) + ) + (func $_wctomb (type $5) (param $var$0 i32) (param $var$1 i32) (result i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (block $label$0 + (set_local $var$6 + (i32.load align=4 + (i32.const 8) + ) + ) + (set_local $var$4 + (i32.eq + (get_local $var$0) + (i32.const 0) + ) + ) + (if_else + (get_local $var$4) + (set_local $var$3 + (i32.const 0) + ) + (block $label$1 + (set_local $var$2 + (call $_wcrtomb + (get_local $var$0) + (get_local $var$1) + (i32.const 0) + ) + ) + (set_local $var$3 + (get_local $var$2) + ) + ) + ) + (get_local $var$3) + ) + ) + (func $_memchr (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (local $var$19 i32) + (local $var$20 i32) + (local $var$21 i32) + (local $var$22 i32) + (local $var$23 i32) + (local $var$24 i32) + (local $var$25 i32) + (local $var$26 i32) + (local $var$27 i32) + (local $var$28 i32) + (local $var$29 i32) + (local $var$30 i32) + (local $var$31 i32) + (local $var$32 i32) + (local $var$33 i32) + (local $var$34 i32) + (local $var$35 i32) + (local $var$36 i32) + (local $var$37 i32) + (local $var$38 i32) + (local $var$39 i32) + (local $var$40 i32) + (local $var$41 i32) + (local $var$42 i32) + (local $var$43 i32) + (local $var$44 i32) + (local $var$45 i32) + (local $var$46 i32) + (local $var$47 i32) + (local $var$48 i32) + (local $var$49 i32) + (local $var$50 i32) + (local $var$51 i32) + (local $var$52 i32) + (local $var$53 i32) + (local $var$54 i32) + (local $var$55 i32) + (local $var$56 i32) + (local $var$57 i32) + (local $var$58 i32) + (local $var$59 i32) + (local $var$60 i32) + (block $label$0 + (set_local $var$60 + (i32.load align=4 + (i32.const 8) + ) + ) + (set_local $var$21 + (i32.and + (get_local $var$1) + (i32.const 255) + ) + ) + (set_local $var$3 + (get_local $var$0) + ) + (set_local $var$12 + (i32.and + (get_local $var$3) + (i32.const 3) + ) + ) + (set_local $var$48 + (i32.ne + (get_local $var$12) + (i32.const 0) + ) + ) + (set_local $var$50 + (i32.ne + (get_local $var$2) + (i32.const 0) + ) + ) + (set_local $var$39 + (i32.and + (get_local $var$50) + (get_local $var$48) + ) + ) + (block $label$1 + (if_else + (get_local $var$39) + (block $label$2 + (set_local $var$4 + (i32.and + (get_local $var$1) + (i32.const 255) + ) + ) + (set_local $var$31 + (get_local $var$2) + ) + (set_local $var$42 + (get_local $var$0) + ) + (loop $label$3 $label$4 + (block $label$5 + (set_local $var$5 + (i32.load8_s align=1 + (get_local $var$42) + ) + ) + (set_local $var$15 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $var$5) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $var$4) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $var$15) + (block $label$6 + (set_local $var$30 + (get_local $var$31) + ) + (set_local $var$41 + (get_local $var$42) + ) + (set_local $var$59 + (i32.const 6) + ) + (br $label$1) + ) + ) + (set_local $var$24 + (i32.add + (get_local $var$42) + (i32.const 1) + ) + ) + (set_local $var$22 + (i32.add + (get_local $var$31) + (i32.const -1) + ) + ) + (set_local $var$6 + (get_local $var$24) + ) + (set_local $var$11 + (i32.and + (get_local $var$6) + (i32.const 3) + ) + ) + (set_local $var$47 + (i32.ne + (get_local $var$11) + (i32.const 0) + ) + ) + (set_local $var$49 + (i32.ne + (get_local $var$22) + (i32.const 0) + ) + ) + (set_local $var$38 + (i32.and + (get_local $var$49) + (get_local $var$47) + ) + ) + (if_else + (get_local $var$38) + (block $label$7 + (set_local $var$31 + (get_local $var$22) + ) + (set_local $var$42 + (get_local $var$24) + ) + ) + (block $label$8 + (set_local $var$29 + (get_local $var$22) + ) + (set_local $var$40 + (get_local $var$24) + ) + (set_local $var$51 + (get_local $var$49) + ) + (set_local $var$59 + (i32.const 5) + ) + (br $label$3) + ) + ) + (br $label$4) + ) + ) + ) + (block $label$9 + (set_local $var$29 + (get_local $var$2) + ) + (set_local $var$40 + (get_local $var$0) + ) + (set_local $var$51 + (get_local $var$50) + ) + (set_local $var$59 + (i32.const 5) + ) + ) + ) + ) + (if + (i32.eq + (get_local $var$59) + (i32.const 5) + ) + (if_else + (get_local $var$51) + (block $label$10 + (set_local $var$30 + (get_local $var$29) + ) + (set_local $var$41 + (get_local $var$40) + ) + (set_local $var$59 + (i32.const 6) + ) + ) + (block $label$11 + (set_local $var$36 + (i32.const 0) + ) + (set_local $var$44 + (get_local $var$40) + ) + ) + ) + ) + (block $label$12 + (if + (i32.eq + (get_local $var$59) + (i32.const 6) + ) + (block $label$13 + (set_local $var$7 + (i32.load8_s align=1 + (get_local $var$41) + ) + ) + (set_local $var$8 + (i32.and + (get_local $var$1) + (i32.const 255) + ) + ) + (set_local $var$19 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $var$7) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $var$8) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if_else + (get_local $var$19) + (block $label$14 + (set_local $var$36 + (get_local $var$30) + ) + (set_local $var$44 + (get_local $var$41) + ) + ) + (block $label$15 + (set_local $var$28 + (i32.mul + (get_local $var$21) + (i32.const 16843009) + ) + ) + (set_local $var$17 + (i32.gt_u + (i32.shr_u + (get_local $var$30) + (i32.const 0) + ) + (i32.const 3) + ) + ) + (block $label$16 + (if_else + (get_local $var$17) + (block $label$17 + (set_local $var$33 + (get_local $var$30) + ) + (set_local $var$56 + (get_local $var$41) + ) + (loop $label$18 $label$19 + (block $label$20 + (set_local $var$9 + (i32.load align=4 + (get_local $var$56) + ) + ) + (set_local $var$58 + (i32.xor + (get_local $var$9) + (get_local $var$28) + ) + ) + (set_local $var$45 + (i32.add + (get_local $var$58) + (i32.const -16843009) + ) + ) + (set_local $var$37 + (i32.and + (get_local $var$58) + (i32.const -2139062144) + ) + ) + (set_local $var$13 + (i32.xor + (get_local $var$37) + (i32.const -2139062144) + ) + ) + (set_local $var$14 + (i32.and + (get_local $var$13) + (get_local $var$45) + ) + ) + (set_local $var$27 + (i32.eq + (get_local $var$14) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$27) + (i32.const 0) + ) + (block $label$21 + (set_local $var$34 + (get_local $var$33) + ) + (set_local $var$57 + (get_local $var$56) + ) + (br $label$18) + ) + ) + (set_local $var$25 + (i32.add + (get_local $var$56) + (i32.const 4) + ) + ) + (set_local $var$46 + (i32.add + (get_local $var$33) + (i32.const -4) + ) + ) + (set_local $var$16 + (i32.gt_u + (i32.shr_u + (get_local $var$46) + (i32.const 0) + ) + (i32.const 3) + ) + ) + (if_else + (get_local $var$16) + (block $label$22 + (set_local $var$33 + (get_local $var$46) + ) + (set_local $var$56 + (get_local $var$25) + ) + ) + (block $label$23 + (set_local $var$32 + (get_local $var$46) + ) + (set_local $var$55 + (get_local $var$25) + ) + (set_local $var$59 + (i32.const 11) + ) + (br $label$16) + ) + ) + (br $label$19) + ) + ) + (set_local $var$35 + (get_local $var$34) + ) + (set_local $var$43 + (get_local $var$57) + ) + ) + (block $label$24 + (set_local $var$32 + (get_local $var$30) + ) + (set_local $var$55 + (get_local $var$41) + ) + (set_local $var$59 + (i32.const 11) + ) + ) + ) + ) + (if + (i32.eq + (get_local $var$59) + (i32.const 11) + ) + (block $label$25 + (set_local $var$53 + (i32.eq + (get_local $var$32) + (i32.const 0) + ) + ) + (if_else + (get_local $var$53) + (block $label$26 + (set_local $var$36 + (i32.const 0) + ) + (set_local $var$44 + (get_local $var$55) + ) + (br $label$12) + ) + (block $label$27 + (set_local $var$35 + (get_local $var$32) + ) + (set_local $var$43 + (get_local $var$55) + ) + ) + ) + ) + ) + (loop $label$28 $label$29 + (block $label$30 + (set_local $var$10 + (i32.load8_s align=1 + (get_local $var$43) + ) + ) + (set_local $var$18 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $var$10) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $var$8) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $var$18) + (block $label$31 + (set_local $var$36 + (get_local $var$35) + ) + (set_local $var$44 + (get_local $var$43) + ) + (br $label$12) + ) + ) + (set_local $var$26 + (i32.add + (get_local $var$43) + (i32.const 1) + ) + ) + (set_local $var$23 + (i32.add + (get_local $var$35) + (i32.const -1) + ) + ) + (set_local $var$52 + (i32.eq + (get_local $var$23) + (i32.const 0) + ) + ) + (if_else + (get_local $var$52) + (block $label$32 + (set_local $var$36 + (i32.const 0) + ) + (set_local $var$44 + (get_local $var$26) + ) + (br $label$28) + ) + (block $label$33 + (set_local $var$35 + (get_local $var$23) + ) + (set_local $var$43 + (get_local $var$26) + ) + ) + ) + (br $label$29) + ) + ) + ) + ) + ) + ) + ) + (set_local $var$54 + (i32.ne + (get_local $var$36) + (i32.const 0) + ) + ) + (set_local $var$20 + (if_else + (get_local $var$54) + (get_local $var$44) + (i32.const 0) + ) + ) + (get_local $var$20) + ) + ) + (func $___syscall_ret (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (block $label$0 + (set_local $var$6 + (i32.load align=4 + (i32.const 8) + ) + ) + (set_local $var$2 + (i32.gt_u + (i32.shr_u + (get_local $var$0) + (i32.const 0) + ) + (i32.const -4096) + ) + ) + (if_else + (get_local $var$2) + (block $label$1 + (set_local $var$4 + (i32.sub + (i32.const 0) + (get_local $var$0) + ) + ) + (set_local $var$1 + (call $___errno_location) + ) + (i32.store align=4 + (get_local $var$1) + (get_local $var$4) + ) + (set_local $var$3 + (i32.const -1) + ) + ) + (set_local $var$3 + (get_local $var$0) + ) + ) + (get_local $var$3) + ) + ) + (func $___fflush_unlocked (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (local $var$19 i32) + (local $var$20 i32) + (local $var$21 i32) + (local $var$22 i32) + (local $var$23 i32) + (block $label$0 + (set_local $var$23 + (i32.load align=4 + (i32.const 8) + ) + ) + (set_local $var$20 + (i32.add + (get_local $var$0) + (i32.const 20) + ) + ) + (set_local $var$1 + (i32.load align=4 + (get_local $var$20) + ) + ) + (set_local $var$18 + (i32.add + (get_local $var$0) + (i32.const 28) + ) + ) + (set_local $var$2 + (i32.load align=4 + (get_local $var$18) + ) + ) + (set_local $var$8 + (i32.gt_u + (i32.shr_u + (get_local $var$1) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$2) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$8) + (block $label$1 + (set_local $var$21 + (i32.add + (get_local $var$0) + (i32.const 36) + ) + ) + (set_local $var$3 + (i32.load align=4 + (get_local $var$21) + ) + ) + (call_indirect $0 + (i32.add + (i32.and + (get_local $var$3) + (i32.const 7) + ) + (i32.const 2) + ) + (get_local $var$0) + (i32.const 0) + (i32.const 0) + ) + (set_local $var$4 + (i32.load align=4 + (get_local $var$20) + ) + ) + (set_local $var$17 + (i32.eq + (get_local $var$4) + (i32.const 0) + ) + ) + (if_else + (get_local $var$17) + (set_local $var$11 + (i32.const -1) + ) + (set_local $var$22 + (i32.const 3) + ) + ) + ) + (set_local $var$22 + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $var$22) + (i32.const 3) + ) + (block $label$2 + (set_local $var$12 + (i32.add + (get_local $var$0) + (i32.const 4) + ) + ) + (set_local $var$5 + (i32.load align=4 + (get_local $var$12) + ) + ) + (set_local $var$10 + (i32.add + (get_local $var$0) + (i32.const 8) + ) + ) + (set_local $var$6 + (i32.load align=4 + (get_local $var$10) + ) + ) + (set_local $var$9 + (i32.lt_u + (i32.shr_u + (get_local $var$5) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$6) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$9) + (block $label$3 + (set_local $var$13 + (i32.add + (get_local $var$0) + (i32.const 40) + ) + ) + (set_local $var$7 + (i32.load align=4 + (get_local $var$13) + ) + ) + (set_local $var$14 + (get_local $var$5) + ) + (set_local $var$15 + (get_local $var$6) + ) + (set_local $var$16 + (i32.sub + (get_local $var$14) + (get_local $var$15) + ) + ) + (call_indirect $0 + (i32.add + (i32.and + (get_local $var$7) + (i32.const 7) + ) + (i32.const 2) + ) + (get_local $var$0) + (get_local $var$16) + (i32.const 1) + ) + ) + ) + (set_local $var$19 + (i32.add + (get_local $var$0) + (i32.const 16) + ) + ) + (i32.store align=4 + (get_local $var$19) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$18) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$20) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$10) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$12) + (i32.const 0) + ) + (set_local $var$11 + (i32.const 0) + ) + ) + ) + (get_local $var$11) + ) + ) + (func $_cleanup (type $2) (param $var$0 i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (block $label$0 + (set_local $var$5 + (i32.load align=4 + (i32.const 8) + ) + ) + (set_local $var$2 + (i32.add + (get_local $var$0) + (i32.const 68) + ) + ) + (set_local $var$1 + (i32.load align=4 + (get_local $var$2) + ) + ) + (set_local $var$3 + (i32.eq + (get_local $var$1) + (i32.const 0) + ) + ) + (if + (get_local $var$3) + (call $___unlockfile + (get_local $var$0) + ) + ) + (br $label$0) + ) + ) + (func $_printf_core (type $9) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) (result i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (local $var$19 i32) + (local $var$20 i32) + (local $var$21 i32) + (local $var$22 i32) + (local $var$23 i32) + (local $var$24 i32) + (local $var$25 i32) + (local $var$26 i32) + (local $var$27 i32) + (local $var$28 i32) + (local $var$29 i32) + (local $var$30 i32) + (local $var$31 i32) + (local $var$32 i32) + (local $var$33 i32) + (local $var$34 i32) + (local $var$35 i32) + (local $var$36 i32) + (local $var$37 i32) + (local $var$38 i32) + (local $var$39 i32) + (local $var$40 i32) + (local $var$41 i32) + (local $var$42 i32) + (local $var$43 i32) + (local $var$44 i32) + (local $var$45 i32) + (local $var$46 i32) + (local $var$47 i32) + (local $var$48 i32) + (local $var$49 i32) + (local $var$50 i32) + (local $var$51 i32) + (local $var$52 i32) + (local $var$53 i32) + (local $var$54 i32) + (local $var$55 i32) + (local $var$56 i32) + (local $var$57 i32) + (local $var$58 i32) + (local $var$59 i32) + (local $var$60 i32) + (local $var$61 i32) + (local $var$62 i32) + (local $var$63 i32) + (local $var$64 i32) + (local $var$65 i32) + (local $var$66 i32) + (local $var$67 i32) + (local $var$68 i32) + (local $var$69 i32) + (local $var$70 i32) + (local $var$71 i32) + (local $var$72 i32) + (local $var$73 i32) + (local $var$74 i32) + (local $var$75 i32) + (local $var$76 i32) + (local $var$77 i32) + (local $var$78 i32) + (local $var$79 i32) + (local $var$80 i32) + (local $var$81 i32) + (local $var$82 i32) + (local $var$83 i32) + (local $var$84 i32) + (local $var$85 i32) + (local $var$86 i32) + (local $var$87 i32) + (local $var$88 i32) + (local $var$89 i32) + (local $var$90 i32) + (local $var$91 i32) + (local $var$92 i32) + (local $var$93 i32) + (local $var$94 i32) + (local $var$95 i32) + (local $var$96 i32) + (local $var$97 i32) + (local $var$98 i32) + (local $var$99 i32) + (local $var$100 i32) + (local $var$101 i32) + (local $var$102 i32) + (local $var$103 i32) + (local $var$104 i32) + (local $var$105 i32) + (local $var$106 i32) + (local $var$107 i32) + (local $var$108 i32) + (local $var$109 i32) + (local $var$110 i32) + (local $var$111 i32) + (local $var$112 i32) + (local $var$113 i32) + (local $var$114 i32) + (local $var$115 i32) + (local $var$116 i32) + (local $var$117 i32) + (local $var$118 i32) + (local $var$119 i32) + (local $var$120 i32) + (local $var$121 i32) + (local $var$122 i32) + (local $var$123 i32) + (local $var$124 i32) + (local $var$125 i32) + (local $var$126 i32) + (local $var$127 i32) + (local $var$128 i32) + (local $var$129 i32) + (local $var$130 i32) + (local $var$131 i32) + (local $var$132 i32) + (local $var$133 i32) + (local $var$134 i32) + (local $var$135 i32) + (local $var$136 i32) + (local $var$137 i32) + (local $var$138 i32) + (local $var$139 i32) + (local $var$140 i32) + (local $var$141 i32) + (local $var$142 i32) + (local $var$143 i32) + (local $var$144 i32) + (local $var$145 i32) + (local $var$146 i32) + (local $var$147 i32) + (local $var$148 i32) + (local $var$149 i32) + (local $var$150 i32) + (local $var$151 i32) + (local $var$152 i32) + (local $var$153 i32) + (local $var$154 i32) + (local $var$155 i32) + (local $var$156 i32) + (local $var$157 i32) + (local $var$158 i32) + (local $var$159 i32) + (local $var$160 i32) + (local $var$161 i32) + (local $var$162 i32) + (local $var$163 i32) + (local $var$164 i32) + (local $var$165 i32) + (local $var$166 i32) + (local $var$167 i32) + (local $var$168 i32) + (local $var$169 i32) + (local $var$170 i32) + (local $var$171 i32) + (local $var$172 i32) + (local $var$173 i32) + (local $var$174 i32) + (local $var$175 i32) + (local $var$176 i32) + (local $var$177 i32) + (local $var$178 i32) + (local $var$179 i32) + (local $var$180 i32) + (local $var$181 i32) + (local $var$182 i32) + (local $var$183 i32) + (local $var$184 i32) + (local $var$185 i32) + (local $var$186 i32) + (local $var$187 i32) + (local $var$188 i32) + (local $var$189 i32) + (local $var$190 i32) + (local $var$191 i32) + (local $var$192 i32) + (local $var$193 i32) + (local $var$194 i32) + (local $var$195 i32) + (local $var$196 i32) + (local $var$197 i32) + (local $var$198 i32) + (local $var$199 i32) + (local $var$200 i32) + (local $var$201 i32) + (local $var$202 i32) + (local $var$203 i32) + (local $var$204 i32) + (local $var$205 i32) + (local $var$206 i32) + (local $var$207 i32) + (local $var$208 i32) + (local $var$209 i32) + (local $var$210 i32) + (local $var$211 i32) + (local $var$212 i32) + (local $var$213 i32) + (local $var$214 i32) + (local $var$215 i32) + (local $var$216 i32) + (local $var$217 i32) + (local $var$218 i32) + (local $var$219 i32) + (local $var$220 i32) + (local $var$221 i32) + (local $var$222 i32) + (local $var$223 i32) + (local $var$224 i32) + (local $var$225 i32) + (local $var$226 i32) + (local $var$227 i32) + (local $var$228 i32) + (local $var$229 i32) + (local $var$230 i32) + (local $var$231 i32) + (local $var$232 i32) + (local $var$233 i32) + (local $var$234 i32) + (local $var$235 i32) + (local $var$236 i32) + (local $var$237 i32) + (local $var$238 i32) + (local $var$239 i32) + (local $var$240 i32) + (local $var$241 i32) + (local $var$242 i32) + (local $var$243 i32) + (local $var$244 i32) + (local $var$245 i32) + (local $var$246 i32) + (local $var$247 i32) + (local $var$248 i32) + (local $var$249 i32) + (local $var$250 i32) + (local $var$251 i32) + (local $var$252 i32) + (local $var$253 i32) + (local $var$254 i32) + (local $var$255 i32) + (local $var$256 i32) + (local $var$257 i32) + (local $var$258 i32) + (local $var$259 i32) + (local $var$260 i32) + (local $var$261 i32) + (local $var$262 i32) + (local $var$263 i32) + (local $var$264 i32) + (local $var$265 i32) + (local $var$266 i32) + (local $var$267 i32) + (local $var$268 i32) + (local $var$269 i32) + (local $var$270 i32) + (local $var$271 i32) + (local $var$272 i32) + (local $var$273 i32) + (local $var$274 i32) + (local $var$275 i32) + (local $var$276 i32) + (local $var$277 i32) + (local $var$278 i32) + (local $var$279 i32) + (local $var$280 i32) + (local $var$281 i32) + (local $var$282 i32) + (local $var$283 i32) + (local $var$284 i32) + (local $var$285 i32) + (local $var$286 i32) + (local $var$287 i32) + (local $var$288 i32) + (local $var$289 i32) + (local $var$290 i32) + (local $var$291 i32) + (local $var$292 i32) + (local $var$293 i32) + (local $var$294 i32) + (local $var$295 i32) + (local $var$296 i32) + (local $var$297 i32) + (local $var$298 i32) + (local $var$299 i32) + (local $var$300 i32) + (local $var$301 i32) + (local $var$302 i32) + (local $var$303 i32) + (local $var$304 i32) + (local $var$305 i32) + (local $var$306 i32) + (local $var$307 i32) + (local $var$308 i32) + (local $var$309 i32) + (local $var$310 i32) + (local $var$311 i32) + (local $var$312 i32) + (local $var$313 i32) + (local $var$314 i32) + (local $var$315 i32) + (local $var$316 i32) + (local $var$317 i32) + (local $var$318 i32) + (local $var$319 i32) + (local $var$320 i32) + (local $var$321 i32) + (local $var$322 i32) + (local $var$323 i32) + (local $var$324 i32) + (local $var$325 i32) + (local $var$326 i32) + (local $var$327 i32) + (local $var$328 i32) + (local $var$329 i32) + (local $var$330 i32) + (local $var$331 i32) + (local $var$332 i32) + (local $var$333 i32) + (local $var$334 i32) + (local $var$335 i32) + (local $var$336 i32) + (local $var$337 i32) + (local $var$338 i32) + (local $var$339 i32) + (local $var$340 i32) + (local $var$341 i32) + (local $var$342 i32) + (local $var$343 i32) + (local $var$344 i32) + (local $var$345 i32) + (local $var$346 i32) + (local $var$347 i32) + (local $var$348 i32) + (local $var$349 i32) + (local $var$350 i32) + (local $var$351 i32) + (local $var$352 i32) + (local $var$353 i32) + (local $var$354 i32) + (local $var$355 i32) + (local $var$356 i32) + (local $var$357 i32) + (local $var$358 i32) + (local $var$359 i32) + (local $var$360 i32) + (local $var$361 i32) + (local $var$362 i32) + (local $var$363 i32) + (local $var$364 i32) + (local $var$365 i32) + (local $var$366 i32) + (local $var$367 i32) + (local $var$368 i32) + (local $var$369 i32) + (local $var$370 i32) + (local $var$371 i32) + (local $var$372 i32) + (local $var$373 i32) + (local $var$374 i32) + (local $var$375 i32) + (local $var$376 i32) + (local $var$377 i32) + (local $var$378 i32) + (local $var$379 i32) + (local $var$380 i32) + (local $var$381 i32) + (local $var$382 i32) + (local $var$383 i32) + (local $var$384 i32) + (local $var$385 i32) + (local $var$386 i32) + (local $var$387 i32) + (local $var$388 i32) + (local $var$389 i32) + (local $var$390 i32) + (local $var$391 i32) + (local $var$392 i32) + (local $var$393 i32) + (local $var$394 i32) + (local $var$395 i32) + (local $var$396 i32) + (local $var$397 i32) + (local $var$398 i32) + (local $var$399 i32) + (local $var$400 i32) + (local $var$401 i32) + (local $var$402 i32) + (local $var$403 i32) + (local $var$404 i32) + (local $var$405 i32) + (local $var$406 i32) + (local $var$407 i32) + (local $var$408 i32) + (local $var$409 i32) + (local $var$410 i32) + (local $var$411 i32) + (local $var$412 i32) + (local $var$413 i32) + (local $var$414 i32) + (local $var$415 i32) + (local $var$416 i32) + (local $var$417 i32) + (local $var$418 i32) + (local $var$419 i32) + (local $var$420 i32) + (local $var$421 i32) + (local $var$422 i32) + (local $var$423 i32) + (local $var$424 i32) + (local $var$425 i32) + (local $var$426 i32) + (local $var$427 i32) + (local $var$428 i32) + (local $var$429 i32) + (local $var$430 i32) + (local $var$431 i32) + (local $var$432 i32) + (local $var$433 i32) + (local $var$434 i32) + (local $var$435 i32) + (local $var$436 i32) + (local $var$437 i32) + (local $var$438 i32) + (local $var$439 i32) + (local $var$440 i32) + (local $var$441 i32) + (local $var$442 i32) + (local $var$443 i32) + (local $var$444 i32) + (local $var$445 i32) + (local $var$446 i32) + (local $var$447 i32) + (local $var$448 i32) + (local $var$449 i32) + (local $var$450 i32) + (local $var$451 i32) + (local $var$452 i32) + (local $var$453 i32) + (local $var$454 i32) + (local $var$455 i32) + (local $var$456 i32) + (local $var$457 i32) + (local $var$458 i32) + (local $var$459 i32) + (local $var$460 i32) + (local $var$461 i32) + (local $var$462 i32) + (local $var$463 i32) + (local $var$464 i32) + (local $var$465 i32) + (local $var$466 i32) + (local $var$467 i32) + (local $var$468 i32) + (local $var$469 i32) + (local $var$470 i32) + (local $var$471 i32) + (local $var$472 i32) + (local $var$473 i32) + (local $var$474 i32) + (local $var$475 i32) + (local $var$476 i32) + (local $var$477 i32) + (local $var$478 i32) + (local $var$479 i32) + (local $var$480 i32) + (local $var$481 i32) + (local $var$482 i32) + (local $var$483 i32) + (local $var$484 i32) + (local $var$485 i32) + (local $var$486 i32) + (local $var$487 i32) + (local $var$488 i32) + (local $var$489 i32) + (local $var$490 i32) + (local $var$491 i32) + (local $var$492 i32) + (local $var$493 i32) + (local $var$494 i32) + (local $var$495 i32) + (local $var$496 i32) + (local $var$497 i32) + (local $var$498 i32) + (local $var$499 i32) + (local $var$500 i32) + (local $var$501 i32) + (local $var$502 i32) + (local $var$503 i32) + (local $var$504 i32) + (local $var$505 i32) + (local $var$506 i32) + (local $var$507 i32) + (local $var$508 i32) + (local $var$509 i32) + (local $var$510 i32) + (local $var$511 i32) + (local $var$512 i32) + (local $var$513 i32) + (local $var$514 i32) + (local $var$515 i32) + (local $var$516 i32) + (local $var$517 i32) + (local $var$518 i32) + (local $var$519 i32) + (local $var$520 i32) + (local $var$521 i32) + (local $var$522 i32) + (local $var$523 i32) + (local $var$524 i32) + (local $var$525 i32) + (local $var$526 i32) + (local $var$527 i32) + (local $var$528 i32) + (local $var$529 i32) + (local $var$530 i32) + (local $var$531 i32) + (local $var$532 i32) + (local $var$533 i32) + (local $var$534 i32) + (local $var$535 i32) + (local $var$536 i32) + (local $var$537 i32) + (local $var$538 i32) + (local $var$539 i32) + (local $var$540 i32) + (local $var$541 i32) + (local $var$542 i32) + (local $var$543 i32) + (local $var$544 i32) + (local $var$545 i32) + (local $var$546 i32) + (local $var$547 i32) + (local $var$548 i32) + (local $var$549 i32) + (local $var$550 i32) + (local $var$551 i32) + (local $var$552 i32) + (local $var$553 i32) + (local $var$554 i32) + (local $var$555 i32) + (local $var$556 i32) + (local $var$557 i32) + (local $var$558 i32) + (local $var$559 i32) + (local $var$560 i32) + (local $var$561 i32) + (local $var$562 i32) + (local $var$563 i32) + (local $var$564 i32) + (local $var$565 i32) + (local $var$566 i32) + (local $var$567 i32) + (local $var$568 i32) + (local $var$569 i32) + (local $var$570 i32) + (local $var$571 i32) + (local $var$572 i32) + (local $var$573 i32) + (local $var$574 i32) + (local $var$575 i32) + (local $var$576 i32) + (local $var$577 i32) + (local $var$578 i32) + (local $var$579 i32) + (local $var$580 i32) + (local $var$581 i32) + (local $var$582 i32) + (local $var$583 i32) + (local $var$584 i32) + (local $var$585 i32) + (local $var$586 i32) + (local $var$587 i32) + (local $var$588 i32) + (local $var$589 i32) + (local $var$590 i32) + (local $var$591 i32) + (local $var$592 i32) + (local $var$593 i32) + (local $var$594 i32) + (local $var$595 i32) + (local $var$596 i32) + (local $var$597 i32) + (local $var$598 i32) + (local $var$599 i32) + (local $var$600 i32) + (local $var$601 i32) + (local $var$602 i32) + (local $var$603 i32) + (local $var$604 i32) + (local $var$605 i32) + (local $var$606 i32) + (local $var$607 i32) + (local $var$608 i32) + (local $var$609 i32) + (local $var$610 i32) + (local $var$611 i32) + (local $var$612 i32) + (local $var$613 i32) + (local $var$614 i32) + (local $var$615 i32) + (local $var$616 i32) + (local $var$617 i32) + (local $var$618 i32) + (local $var$619 i32) + (local $var$620 i32) + (local $var$621 i32) + (local $var$622 i32) + (local $var$623 i32) + (local $var$624 i32) + (local $var$625 i32) + (local $var$626 i32) + (local $var$627 i32) + (local $var$628 i32) + (local $var$629 i32) + (local $var$630 i32) + (local $var$631 i32) + (local $var$632 i32) + (local $var$633 i32) + (local $var$634 i32) + (local $var$635 i32) + (local $var$636 i32) + (local $var$637 i32) + (local $var$638 i32) + (local $var$639 i32) + (local $var$640 i32) + (local $var$641 i32) + (local $var$642 i32) + (local $var$643 i32) + (local $var$644 i32) + (local $var$645 i32) + (local $var$646 i32) + (local $var$647 i32) + (local $var$648 i32) + (local $var$649 i32) + (local $var$650 i32) + (local $var$651 i32) + (local $var$652 i32) + (local $var$653 i32) + (local $var$654 i32) + (local $var$655 i32) + (local $var$656 i32) + (local $var$657 i32) + (local $var$658 i32) + (local $var$659 i32) + (local $var$660 i32) + (local $var$661 i32) + (local $var$662 i32) + (local $var$663 i32) + (local $var$664 i32) + (local $var$665 i32) + (local $var$666 i32) + (local $var$667 i32) + (local $var$668 i32) + (local $var$669 i32) + (local $var$670 i32) + (local $var$671 i32) + (local $var$672 i32) + (local $var$673 i32) + (local $var$674 i32) + (local $var$675 i32) + (local $var$676 i32) + (local $var$677 i32) + (local $var$678 i32) + (local $var$679 i32) + (local $var$680 i32) + (local $var$681 i32) + (local $var$682 i32) + (local $var$683 i32) + (local $var$684 i32) + (local $var$685 i32) + (local $var$686 i32) + (local $var$687 i32) + (local $var$688 i32) + (local $var$689 i32) + (local $var$690 i32) + (local $var$691 i32) + (local $var$692 i32) + (local $var$693 i32) + (local $var$694 i32) + (local $var$695 i32) + (local $var$696 i32) + (local $var$697 i32) + (local $var$698 i32) + (local $var$699 i32) + (local $var$700 i32) + (local $var$701 i32) + (local $var$702 i32) + (local $var$703 i32) + (local $var$704 i32) + (local $var$705 i32) + (local $var$706 i32) + (local $var$707 i32) + (local $var$708 i32) + (local $var$709 i32) + (local $var$710 i32) + (local $var$711 i32) + (local $var$712 i32) + (local $var$713 i32) + (local $var$714 i32) + (local $var$715 i32) + (local $var$716 i32) + (local $var$717 i32) + (local $var$718 i32) + (local $var$719 i32) + (local $var$720 i32) + (local $var$721 i32) + (local $var$722 i32) + (local $var$723 i32) + (local $var$724 i32) + (local $var$725 i32) + (local $var$726 i32) + (local $var$727 i32) + (local $var$728 i32) + (local $var$729 i32) + (local $var$730 i32) + (local $var$731 i32) + (local $var$732 i32) + (local $var$733 i32) + (local $var$734 i32) + (local $var$735 i32) + (local $var$736 i32) + (local $var$737 i32) + (local $var$738 i32) + (local $var$739 i32) + (local $var$740 i32) + (local $var$741 i32) + (local $var$742 i32) + (local $var$743 i32) + (local $var$744 i32) + (local $var$745 i32) + (local $var$746 i32) + (local $var$747 i32) + (local $var$748 i32) + (local $var$749 i32) + (local $var$750 i32) + (local $var$751 i32) + (local $var$752 i32) + (local $var$753 i32) + (local $var$754 i32) + (local $var$755 i32) + (local $var$756 i32) + (local $var$757 i32) + (local $var$758 i32) + (local $var$759 i32) + (local $var$760 i32) + (local $var$761 i32) + (local $var$762 i32) + (local $var$763 i32) + (local $var$764 i32) + (local $var$765 i32) + (local $var$766 i32) + (local $var$767 i32) + (local $var$768 i32) + (local $var$769 i32) + (local $var$770 i32) + (local $var$771 i32) + (local $var$772 i32) + (local $var$773 i32) + (local $var$774 i32) + (local $var$775 i32) + (local $var$776 i32) + (local $var$777 i32) + (local $var$778 i32) + (local $var$779 i32) + (local $var$780 i32) + (local $var$781 i32) + (local $var$782 i32) + (local $var$783 i32) + (local $var$784 i32) + (local $var$785 i32) + (local $var$786 i32) + (local $var$787 i32) + (local $var$788 i32) + (local $var$789 i32) + (local $var$790 i32) + (local $var$791 i32) + (local $var$792 i32) + (local $var$793 i32) + (local $var$794 i32) + (local $var$795 i32) + (local $var$796 i32) + (local $var$797 i32) + (local $var$798 i32) + (local $var$799 i32) + (local $var$800 i32) + (local $var$801 i32) + (local $var$802 i32) + (local $var$803 i32) + (local $var$804 i32) + (local $var$805 i32) + (local $var$806 i32) + (local $var$807 i32) + (local $var$808 i32) + (local $var$809 i32) + (local $var$810 i32) + (local $var$811 i32) + (local $var$812 i32) + (local $var$813 i32) + (local $var$814 i32) + (local $var$815 i32) + (local $var$816 i32) + (local $var$817 i32) + (local $var$818 i32) + (local $var$819 i32) + (local $var$820 i32) + (local $var$821 i32) + (local $var$822 i32) + (local $var$823 i32) + (local $var$824 i32) + (local $var$825 i32) + (local $var$826 i32) + (local $var$827 i32) + (local $var$828 i32) + (local $var$829 i32) + (local $var$830 i32) + (local $var$831 i32) + (local $var$832 i32) + (local $var$833 i32) + (local $var$834 i32) + (local $var$835 i32) + (local $var$836 i32) + (local $var$837 i32) + (local $var$838 i32) + (local $var$839 i32) + (local $var$840 i32) + (local $var$841 i32) + (local $var$842 i32) + (local $var$843 i32) + (local $var$844 i32) + (local $var$845 i32) + (local $var$846 i32) + (local $var$847 i32) + (local $var$848 i32) + (local $var$849 i32) + (local $var$850 i32) + (local $var$851 i32) + (local $var$852 i32) + (local $var$853 i32) + (local $var$854 i32) + (local $var$855 i32) + (local $var$856 i32) + (local $var$857 i32) + (local $var$858 i32) + (local $var$859 i32) + (local $var$860 i32) + (local $var$861 i32) + (local $var$862 i32) + (local $var$863 i32) + (local $var$864 i32) + (local $var$865 i32) + (local $var$866 i32) + (local $var$867 i32) + (local $var$868 i32) + (local $var$869 i32) + (local $var$870 i32) + (local $var$871 i32) + (local $var$872 i32) + (local $var$873 i32) + (local $var$874 i32) + (local $var$875 i32) + (local $var$876 i32) + (local $var$877 i32) + (local $var$878 i32) + (local $var$879 i32) + (local $var$880 i32) + (local $var$881 i32) + (local $var$882 i32) + (local $var$883 i32) + (local $var$884 i32) + (local $var$885 i32) + (local $var$886 i32) + (local $var$887 i32) + (local $var$888 i32) + (local $var$889 i32) + (local $var$890 i32) + (local $var$891 i32) + (local $var$892 i32) + (local $var$893 i32) + (local $var$894 i32) + (local $var$895 i32) + (local $var$896 i32) + (local $var$897 i32) + (local $var$898 i32) + (local $var$899 i32) + (local $var$900 i32) + (local $var$901 i32) + (local $var$902 i32) + (local $var$903 i32) + (local $var$904 i32) + (local $var$905 i32) + (local $var$906 i32) + (local $var$907 i32) + (local $var$908 i32) + (local $var$909 i32) + (local $var$910 i32) + (local $var$911 i32) + (local $var$912 i32) + (local $var$913 i32) + (local $var$914 i32) + (local $var$915 i32) + (local $var$916 i32) + (local $var$917 i32) + (local $var$918 i32) + (local $var$919 i32) + (local $var$920 i32) + (local $var$921 i32) + (local $var$922 i32) + (local $var$923 i32) + (local $var$924 i32) + (local $var$925 i32) + (local $var$926 i32) + (local $var$927 i32) + (local $var$928 i32) + (local $var$929 i32) + (local $var$930 i32) + (local $var$931 i32) + (local $var$932 i32) + (local $var$933 i32) + (local $var$934 i32) + (local $var$935 i32) + (local $var$936 i32) + (local $var$937 i32) + (local $var$938 i32) + (local $var$939 i32) + (local $var$940 i32) + (local $var$941 i32) + (local $var$942 i32) + (local $var$943 i32) + (local $var$944 i32) + (local $var$945 i32) + (local $var$946 i32) + (local $var$947 i32) + (local $var$948 i32) + (local $var$949 i32) + (local $var$950 i32) + (local $var$951 i32) + (local $var$952 i32) + (local $var$953 i32) + (local $var$954 i32) + (local $var$955 i32) + (local $var$956 i32) + (local $var$957 i32) + (local $var$958 i32) + (local $var$959 i32) + (local $var$960 i32) + (local $var$961 i32) + (local $var$962 i32) + (local $var$963 i32) + (local $var$964 i32) + (local $var$965 i32) + (local $var$966 i32) + (local $var$967 i32) + (local $var$968 i32) + (local $var$969 i32) + (local $var$970 i32) + (local $var$971 i32) + (local $var$972 i32) + (local $var$973 i32) + (local $var$974 i32) + (local $var$975 i32) + (local $var$976 i32) + (local $var$977 i32) + (local $var$978 i32) + (local $var$979 i32) + (local $var$980 i32) + (local $var$981 i32) + (local $var$982 i32) + (local $var$983 i32) + (local $var$984 i32) + (local $var$985 i32) + (local $var$986 i32) + (local $var$987 i32) + (local $var$988 i32) + (local $var$989 i32) + (local $var$990 i32) + (local $var$991 i32) + (local $var$992 i32) + (local $var$993 i32) + (local $var$994 i32) + (local $var$995 i32) + (local $var$996 i32) + (local $var$997 i32) + (local $var$998 i32) + (local $var$999 i32) + (local $var$1000 i32) + (local $var$1001 i32) + (local $var$1002 i32) + (local $var$1003 i32) + (local $var$1004 i32) + (local $var$1005 i32) + (local $var$1006 i32) + (local $var$1007 i32) + (local $var$1008 i32) + (local $var$1009 i32) + (local $var$1010 i32) + (local $var$1011 i32) + (local $var$1012 i32) + (local $var$1013 i32) + (local $var$1014 i32) + (local $var$1015 i32) + (local $var$1016 i32) + (local $var$1017 i32) + (local $var$1018 i32) + (local $var$1019 i32) + (local $var$1020 i32) + (local $var$1021 i32) + (local $var$1022 i32) + (local $var$1023 i32) + (local $var$1024 i32) + (local $var$1025 i32) + (local $var$1026 i32) + (local $var$1027 i32) + (local $var$1028 i32) + (local $var$1029 i32) + (local $var$1030 i32) + (local $var$1031 i32) + (local $var$1032 i32) + (local $var$1033 i32) + (local $var$1034 i32) + (local $var$1035 i32) + (local $var$1036 f64) + (local $var$1037 f64) + (local $var$1038 f64) + (local $var$1039 f64) + (local $var$1040 f64) + (local $var$1041 f64) + (local $var$1042 f64) + (local $var$1043 f64) + (local $var$1044 f64) + (local $var$1045 f64) + (local $var$1046 f64) + (local $var$1047 f64) + (local $var$1048 f64) + (local $var$1049 f64) + (local $var$1050 f64) + (local $var$1051 f64) + (local $var$1052 f64) + (local $var$1053 f64) + (local $var$1054 f64) + (local $var$1055 f64) + (local $var$1056 f64) + (local $var$1057 f64) + (local $var$1058 f64) + (local $var$1059 f64) + (local $var$1060 f64) + (local $var$1061 f64) + (local $var$1062 f64) + (local $var$1063 f64) + (local $var$1064 f64) + (local $var$1065 f64) + (local $var$1066 f64) + (local $var$1067 f64) + (local $var$1068 f64) + (block $label$0 + (set_local $var$1035 + (i32.load align=4 + (i32.const 8) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (i32.const 624) + ) + ) + (if + (i32.ge_s + (i32.load align=4 + (i32.const 8) + ) + (i32.load align=4 + (i32.const 16) + ) + ) + (call_import $abort) + ) + (set_local $var$420 + (i32.add + (get_local $var$1035) + (i32.const 24) + ) + ) + (set_local $var$618 + (i32.add + (get_local $var$1035) + (i32.const 16) + ) + ) + (set_local $var$422 + (i32.add + (get_local $var$1035) + (i32.const 588) + ) + ) + (set_local $var$619 + (i32.add + (get_local $var$1035) + (i32.const 576) + ) + ) + (set_local $var$392 + (get_local $var$1035) + ) + (set_local $var$421 + (i32.add + (get_local $var$1035) + (i32.const 536) + ) + ) + (set_local $var$1007 + (i32.add + (get_local $var$1035) + (i32.const 8) + ) + ) + (set_local $var$755 + (i32.add + (get_local $var$1035) + (i32.const 528) + ) + ) + (set_local $var$969 + (i32.ne + (get_local $var$0) + (i32.const 0) + ) + ) + (set_local $var$309 + (i32.add + (get_local $var$421) + (i32.const 40) + ) + ) + (set_local $var$859 + (get_local $var$309) + ) + (set_local $var$314 + (i32.add + (get_local $var$421) + (i32.const 39) + ) + ) + (set_local $var$412 + (i32.add + (get_local $var$1007) + (i32.const 4) + ) + ) + (set_local $var$400 + (i32.add + (get_local $var$619) + (i32.const 12) + ) + ) + (set_local $var$673 + (i32.add + (get_local $var$619) + (i32.const 11) + ) + ) + (set_local $var$866 + (get_local $var$422) + ) + (set_local $var$857 + (get_local $var$400) + ) + (set_local $var$888 + (i32.sub + (get_local $var$857) + (get_local $var$866) + ) + ) + (set_local $var$886 + (i32.sub + (i32.const -2) + (get_local $var$866) + ) + ) + (set_local $var$887 + (i32.add + (get_local $var$857) + (i32.const 2) + ) + ) + (set_local $var$310 + (i32.add + (get_local $var$420) + (i32.const 288) + ) + ) + (set_local $var$325 + (i32.add + (get_local $var$422) + (i32.const 9) + ) + ) + (set_local $var$864 + (get_local $var$325) + ) + (set_local $var$708 + (i32.add + (get_local $var$422) + (i32.const 8) + ) + ) + (set_local $var$549 + (i32.const 0) + ) + (set_local $var$685 + (get_local $var$1) + ) + (set_local $var$738 + (i32.const 0) + ) + (set_local $var$743 + (i32.const 0) + ) + (loop $label$1 $label$2 + (block $label$3 + (set_local $var$431 + (i32.gt_s + (get_local $var$549) + (i32.const -1) + ) + ) + (block $label$4 + (if_else + (get_local $var$431) + (block $label$5 + (set_local $var$849 + (i32.sub + (i32.const 2147483647) + (get_local $var$549) + ) + ) + (set_local $var$432 + (i32.gt_s + (get_local $var$738) + (get_local $var$849) + ) + ) + (if_else + (get_local $var$432) + (block $label$6 + (set_local $var$423 + (call $___errno_location) + ) + (i32.store align=4 + (get_local $var$423) + (i32.const 75) + ) + (set_local $var$550 + (i32.const -1) + ) + (br $label$4) + ) + (block $label$7 + (set_local $var$302 + (i32.add + (get_local $var$738) + (get_local $var$549) + ) + ) + (set_local $var$550 + (get_local $var$302) + ) + (br $label$4) + ) + ) + ) + (set_local $var$550 + (get_local $var$549) + ) + ) + ) + (set_local $var$21 + (i32.load8_s align=1 + (get_local $var$685) + ) + ) + (set_local $var$941 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $var$21) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (if_else + (get_local $var$941) + (block $label$8 + (set_local $var$551 + (get_local $var$550) + ) + (set_local $var$744 + (get_local $var$743) + ) + (set_local $var$1034 + (i32.const 242) + ) + (br $label$1) + ) + (block $label$9 + (set_local $var$22 + (get_local $var$21) + ) + (set_local $var$684 + (get_local $var$685) + ) + ) + ) + (loop $label$10 $label$11 + (block $label$12 + (tableswitch $label$16 + (i32.sub + (i32.shr_s + (i32.shl + (get_local $var$22) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + (table (case $label$14) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$15) (case $label$13)) (case $label$15) + (case $label$13 + (block $label$17 + (set_local $var$687 + (get_local $var$684) + ) + (set_local $var$1020 + (get_local $var$684) + ) + (set_local $var$1034 + (i32.const 9) + ) + (br $label$10) + (br $label$16) + ) + ) + (case $label$14 + (block $label$18 + (set_local $var$686 + (get_local $var$684) + ) + (set_local $var$1019 + (get_local $var$684) + ) + (br $label$10) + (br $label$16) + ) + ) + (case $label$15 + (nop) + ) + ) + (set_local $var$666 + (i32.add + (get_local $var$684) + (i32.const 1) + ) + ) + (set_local $var$13 + (i32.load8_s align=1 + (get_local $var$666) + ) + ) + (set_local $var$22 + (get_local $var$13) + ) + (set_local $var$684 + (get_local $var$666) + ) + (br $label$11) + ) + ) + (block $label$19 + (if + (i32.eq + (get_local $var$1034) + (i32.const 9) + ) + (loop $label$20 $label$21 + (block $label$22 + (set_local $var$1034 + (i32.const 0) + ) + (set_local $var$406 + (i32.add + (get_local $var$687) + (i32.const 1) + ) + ) + (set_local $var$132 + (i32.load8_s align=1 + (get_local $var$406) + ) + ) + (set_local $var$443 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $var$132) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 37) + ) + ) + (if + (i32.eq + (get_local $var$443) + (i32.const 0) + ) + (block $label$23 + (set_local $var$686 + (get_local $var$687) + ) + (set_local $var$1019 + (get_local $var$1020) + ) + (br $label$19) + ) + ) + (set_local $var$690 + (i32.add + (get_local $var$1020) + (i32.const 1) + ) + ) + (set_local $var$307 + (i32.add + (get_local $var$687) + (i32.const 2) + ) + ) + (set_local $var$212 + (i32.load8_s align=1 + (get_local $var$307) + ) + ) + (set_local $var$439 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $var$212) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 37) + ) + ) + (if_else + (get_local $var$439) + (block $label$24 + (set_local $var$687 + (get_local $var$307) + ) + (set_local $var$1020 + (get_local $var$690) + ) + (set_local $var$1034 + (i32.const 9) + ) + ) + (block $label$25 + (set_local $var$686 + (get_local $var$307) + ) + (set_local $var$1019 + (get_local $var$690) + ) + (br $label$20) + ) + ) + (br $label$21) + ) + ) + ) + ) + (set_local $var$855 + (get_local $var$1019) + ) + (set_local $var$865 + (get_local $var$685) + ) + (set_local $var$884 + (i32.sub + (get_local $var$855) + (get_local $var$865) + ) + ) + (if + (get_local $var$969) + (block $label$26 + (set_local $var$223 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$355 + (i32.and + (get_local $var$223) + (i32.const 32) + ) + ) + (set_local $var$942 + (i32.eq + (get_local $var$355) + (i32.const 0) + ) + ) + (if + (get_local $var$942) + (call $___fwritex + (get_local $var$685) + (get_local $var$884) + (get_local $var$0) + ) + ) + ) + ) + (set_local $var$972 + (i32.eq + (get_local $var$1019) + (get_local $var$685) + ) + ) + (if + (i32.eq + (get_local $var$972) + (i32.const 0) + ) + (block $label$27 + (set_local $var$745 + (get_local $var$743) + ) + (set_local $var$549 + (get_local $var$550) + ) + (set_local $var$685 + (get_local $var$686) + ) + (set_local $var$738 + (get_local $var$884) + ) + (set_local $var$743 + (get_local $var$745) + ) + (br $label$2) + ) + ) + (set_local $var$410 + (i32.add + (get_local $var$686) + (i32.const 1) + ) + ) + (set_local $var$234 + (i32.load8_s align=1 + (get_local $var$410) + ) + ) + (set_local $var$586 + (i32.shr_s + (i32.shl + (get_local $var$234) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $var$723 + (i32.add + (get_local $var$586) + (i32.const -48) + ) + ) + (set_local $var$716 + (i32.lt_u + (i32.shr_u + (get_local $var$723) + (i32.const 0) + ) + (i32.const 10) + ) + ) + (if_else + (get_local $var$716) + (block $label$28 + (set_local $var$411 + (i32.add + (get_local $var$686) + (i32.const 2) + ) + ) + (set_local $var$245 + (i32.load8_s align=1 + (get_local $var$411) + ) + ) + (set_local $var$474 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $var$245) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 36) + ) + ) + (set_local $var$319 + (i32.add + (get_local $var$686) + (i32.const 3) + ) + ) + (set_local $var$320 + (if_else + (get_local $var$474) + (get_local $var$319) + (get_local $var$410) + ) + ) + (set_local $var$7 + (if_else + (get_local $var$474) + (i32.const 1) + (get_local $var$743) + ) + ) + (set_local $var$724 + (if_else + (get_local $var$474) + (get_local $var$723) + (i32.const -1) + ) + ) + (set_local $var$15 + (i32.load8_s align=1 + (get_local $var$320) + ) + ) + (set_local $var$256 + (get_local $var$15) + ) + (set_local $var$397 + (get_local $var$724) + ) + (set_local $var$746 + (get_local $var$7) + ) + (set_local $var$845 + (get_local $var$320) + ) + ) + (block $label$29 + (set_local $var$256 + (get_local $var$234) + ) + (set_local $var$397 + (i32.const -1) + ) + (set_local $var$746 + (get_local $var$743) + ) + (set_local $var$845 + (get_local $var$410) + ) + ) + ) + (set_local $var$588 + (i32.shr_s + (i32.shl + (get_local $var$256) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $var$267 + (i32.and + (get_local $var$588) + (i32.const -32) + ) + ) + (set_local $var$509 + (i32.eq + (get_local $var$267) + (i32.const 32) + ) + ) + (block $label$30 + (if_else + (get_local $var$509) + (block $label$31 + (set_local $var$278 + (get_local $var$256) + ) + (set_local $var$589 + (get_local $var$588) + ) + (set_local $var$636 + (i32.const 0) + ) + (set_local $var$847 + (get_local $var$845) + ) + (loop $label$32 $label$33 + (block $label$34 + (set_local $var$927 + (i32.add + (get_local $var$589) + (i32.const -32) + ) + ) + (set_local $var$837 + (i32.shl + (i32.const 1) + (get_local $var$927) + ) + ) + (set_local $var$354 + (i32.and + (get_local $var$837) + (i32.const 75913) + ) + ) + (set_local $var$993 + (i32.eq + (get_local $var$354) + (i32.const 0) + ) + ) + (if + (get_local $var$993) + (block $label$35 + (set_local $var$45 + (get_local $var$278) + ) + (set_local $var$635 + (get_local $var$636) + ) + (set_local $var$846 + (get_local $var$847) + ) + (br $label$30) + ) + ) + (set_local $var$590 + (i32.shr_s + (i32.shl + (get_local $var$278) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $var$929 + (i32.add + (get_local $var$590) + (i32.const -32) + ) + ) + (set_local $var$839 + (i32.shl + (i32.const 1) + (get_local $var$929) + ) + ) + (set_local $var$771 + (i32.or + (get_local $var$839) + (get_local $var$636) + ) + ) + (set_local $var$703 + (i32.add + (get_local $var$847) + (i32.const 1) + ) + ) + (set_local $var$23 + (i32.load8_s align=1 + (get_local $var$703) + ) + ) + (set_local $var$587 + (i32.shr_s + (i32.shl + (get_local $var$23) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $var$34 + (i32.and + (get_local $var$587) + (i32.const -32) + ) + ) + (set_local $var$508 + (i32.eq + (get_local $var$34) + (i32.const 32) + ) + ) + (if_else + (get_local $var$508) + (block $label$36 + (set_local $var$278 + (get_local $var$23) + ) + (set_local $var$589 + (get_local $var$587) + ) + (set_local $var$636 + (get_local $var$771) + ) + (set_local $var$847 + (get_local $var$703) + ) + ) + (block $label$37 + (set_local $var$45 + (get_local $var$23) + ) + (set_local $var$635 + (get_local $var$771) + ) + (set_local $var$846 + (get_local $var$703) + ) + (br $label$32) + ) + ) + (br $label$33) + ) + ) + ) + (block $label$38 + (set_local $var$45 + (get_local $var$256) + ) + (set_local $var$635 + (i32.const 0) + ) + (set_local $var$846 + (get_local $var$845) + ) + ) + ) + ) + (set_local $var$521 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $var$45) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 42) + ) + ) + (block $label$39 + (if_else + (get_local $var$521) + (block $label$40 + (set_local $var$417 + (i32.add + (get_local $var$846) + (i32.const 1) + ) + ) + (set_local $var$56 + (i32.load8_s align=1 + (get_local $var$417) + ) + ) + (set_local $var$593 + (i32.shr_s + (i32.shl + (get_local $var$56) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $var$730 + (i32.add + (get_local $var$593) + (i32.const -48) + ) + ) + (set_local $var$722 + (i32.lt_u + (i32.shr_u + (get_local $var$730) + (i32.const 0) + ) + (i32.const 10) + ) + ) + (if_else + (get_local $var$722) + (block $label$41 + (set_local $var$418 + (i32.add + (get_local $var$846) + (i32.const 2) + ) + ) + (set_local $var$67 + (i32.load8_s align=1 + (get_local $var$418) + ) + ) + (set_local $var$538 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $var$67) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 36) + ) + ) + (if_else + (get_local $var$538) + (block $label$42 + (set_local $var$419 + (i32.add + (get_local $var$4) + (i32.shl + (get_local $var$730) + (i32.const 2) + ) + ) + ) + (i32.store align=4 + (get_local $var$419) + (i32.const 10) + ) + (set_local $var$78 + (i32.load8_s align=1 + (get_local $var$417) + ) + ) + (set_local $var$594 + (i32.shr_s + (i32.shl + (get_local $var$78) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $var$934 + (i32.add + (get_local $var$594) + (i32.const -48) + ) + ) + (set_local $var$657 + (i32.add + (get_local $var$3) + (i32.shl + (get_local $var$934) + (i32.const 3) + ) + ) + ) + (set_local $var$89 + (get_local $var$657) + ) + (set_local $var$100 + (get_local $var$89) + ) + (set_local $var$111 + (i32.load align=4 + (get_local $var$100) + ) + ) + (set_local $var$121 + (i32.add + (get_local $var$89) + (i32.const 4) + ) + ) + (set_local $var$133 + (get_local $var$121) + ) + (set_local $var$144 + (i32.load align=4 + (get_local $var$133) + ) + ) + (set_local $var$327 + (i32.add + (get_local $var$846) + (i32.const 3) + ) + ) + (set_local $var$747 + (i32.const 1) + ) + (set_local $var$848 + (get_local $var$327) + ) + (set_local $var$1002 + (get_local $var$111) + ) + ) + (set_local $var$1034 + (i32.const 24) + ) + ) + ) + (set_local $var$1034 + (i32.const 24) + ) + ) + (if + (i32.eq + (get_local $var$1034) + (i32.const 24) + ) + (block $label$43 + (set_local $var$1034 + (i32.const 0) + ) + (set_local $var$1001 + (i32.eq + (get_local $var$746) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$1001) + (i32.const 0) + ) + (block $label$44 + (set_local $var$821 + (i32.const -1) + ) + (br $label$1) + ) + ) + (if + (i32.eq + (get_local $var$969) + (i32.const 0) + ) + (block $label$45 + (set_local $var$637 + (get_local $var$635) + ) + (set_local $var$680 + (get_local $var$417) + ) + (set_local $var$748 + (i32.const 0) + ) + (set_local $var$1003 + (i32.const 0) + ) + (br $label$39) + ) + ) + (set_local $var$393 + (i32.load align=4 + (get_local $var$2) + ) + ) + (set_local $var$155 + (get_local $var$393) + ) + (set_local $var$166 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $var$631 + (get_local $var$166) + ) + (set_local $var$625 + (i32.sub + (get_local $var$631) + (i32.const 1) + ) + ) + (set_local $var$177 + (i32.add + (get_local $var$155) + (get_local $var$625) + ) + ) + (set_local $var$188 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $var$634 + (get_local $var$188) + ) + (set_local $var$633 + (i32.sub + (get_local $var$634) + (i32.const 1) + ) + ) + (set_local $var$632 + (i32.xor + (get_local $var$633) + (i32.const -1) + ) + ) + (set_local $var$199 + (i32.and + (get_local $var$177) + (get_local $var$632) + ) + ) + (set_local $var$209 + (get_local $var$199) + ) + (set_local $var$210 + (i32.load align=4 + (get_local $var$209) + ) + ) + (set_local $var$395 + (i32.add + (get_local $var$209) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$2) + (get_local $var$395) + ) + (set_local $var$747 + (i32.const 0) + ) + (set_local $var$848 + (get_local $var$417) + ) + (set_local $var$1002 + (get_local $var$210) + ) + ) + ) + (set_local $var$548 + (i32.lt_s + (get_local $var$1002) + (i32.const 0) + ) + ) + (if_else + (get_local $var$548) + (block $label$46 + (set_local $var$785 + (i32.or + (get_local $var$635) + (i32.const 8192) + ) + ) + (set_local $var$909 + (i32.sub + (i32.const 0) + (get_local $var$1002) + ) + ) + (set_local $var$637 + (get_local $var$785) + ) + (set_local $var$680 + (get_local $var$848) + ) + (set_local $var$748 + (get_local $var$747) + ) + (set_local $var$1003 + (get_local $var$909) + ) + ) + (block $label$47 + (set_local $var$637 + (get_local $var$635) + ) + (set_local $var$680 + (get_local $var$848) + ) + (set_local $var$748 + (get_local $var$747) + ) + (set_local $var$1003 + (get_local $var$1002) + ) + ) + ) + ) + (block $label$48 + (set_local $var$565 + (i32.shr_s + (i32.shl + (get_local $var$45) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $var$725 + (i32.add + (get_local $var$565) + (i32.const -48) + ) + ) + (set_local $var$717 + (i32.lt_u + (i32.shr_u + (get_local $var$725) + (i32.const 0) + ) + (i32.const 10) + ) + ) + (if_else + (get_local $var$717) + (block $label$49 + (set_local $var$211 + (get_local $var$846) + ) + (set_local $var$646 + (i32.const 0) + ) + (set_local $var$731 + (get_local $var$725) + ) + (loop $label$50 $label$51 + (block $label$52 + (set_local $var$756 + (i32.mul + (get_local $var$646) + (i32.const 10) + ) + ) + (set_local $var$303 + (i32.add + (get_local $var$756) + (get_local $var$731) + ) + ) + (set_local $var$667 + (i32.add + (get_local $var$211) + (i32.const 1) + ) + ) + (set_local $var$213 + (i32.load8_s align=1 + (get_local $var$667) + ) + ) + (set_local $var$568 + (i32.shr_s + (i32.shl + (get_local $var$213) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $var$727 + (i32.add + (get_local $var$568) + (i32.const -48) + ) + ) + (set_local $var$719 + (i32.lt_u + (i32.shr_u + (get_local $var$727) + (i32.const 0) + ) + (i32.const 10) + ) + ) + (if_else + (get_local $var$719) + (block $label$53 + (set_local $var$211 + (get_local $var$667) + ) + (set_local $var$646 + (get_local $var$303) + ) + (set_local $var$731 + (get_local $var$727) + ) + ) + (block $label$54 + (set_local $var$306 + (get_local $var$303) + ) + (set_local $var$672 + (get_local $var$667) + ) + (br $label$50) + ) + ) + (br $label$51) + ) + ) + (set_local $var$434 + (i32.lt_s + (get_local $var$306) + (i32.const 0) + ) + ) + (if_else + (get_local $var$434) + (block $label$55 + (set_local $var$821 + (i32.const -1) + ) + (br $label$1) + ) + (block $label$56 + (set_local $var$637 + (get_local $var$635) + ) + (set_local $var$680 + (get_local $var$672) + ) + (set_local $var$748 + (get_local $var$746) + ) + (set_local $var$1003 + (get_local $var$306) + ) + ) + ) + ) + (block $label$57 + (set_local $var$637 + (get_local $var$635) + ) + (set_local $var$680 + (get_local $var$846) + ) + (set_local $var$748 + (get_local $var$746) + ) + (set_local $var$1003 + (i32.const 0) + ) + ) + ) + ) + ) + ) + (set_local $var$214 + (i32.load8_s align=1 + (get_local $var$680) + ) + ) + (set_local $var$435 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $var$214) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 46) + ) + ) + (block $label$58 + (if_else + (get_local $var$435) + (block $label$59 + (set_local $var$401 + (i32.add + (get_local $var$680) + (i32.const 1) + ) + ) + (set_local $var$215 + (i32.load8_s align=1 + (get_local $var$401) + ) + ) + (set_local $var$436 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $var$215) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 42) + ) + ) + (if + (i32.eq + (get_local $var$436) + (i32.const 0) + ) + (block $label$60 + (set_local $var$566 + (i32.shr_s + (i32.shl + (get_local $var$215) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $var$726 + (i32.add + (get_local $var$566) + (i32.const -48) + ) + ) + (set_local $var$718 + (i32.lt_u + (i32.shr_u + (get_local $var$726) + (i32.const 0) + ) + (i32.const 10) + ) + ) + (if_else + (get_local $var$718) + (block $label$61 + (set_local $var$233 + (get_local $var$401) + ) + (set_local $var$647 + (i32.const 0) + ) + (set_local $var$732 + (get_local $var$726) + ) + ) + (block $label$62 + (set_local $var$683 + (get_local $var$401) + ) + (set_local $var$790 + (i32.const 0) + ) + (br $label$58) + ) + ) + (loop $label$63 $label$64 + (block $label$65 + (set_local $var$757 + (i32.mul + (get_local $var$647) + (i32.const 10) + ) + ) + (set_local $var$304 + (i32.add + (get_local $var$757) + (get_local $var$732) + ) + ) + (set_local $var$668 + (i32.add + (get_local $var$233) + (i32.const 1) + ) + ) + (set_local $var$235 + (i32.load8_s align=1 + (get_local $var$668) + ) + ) + (set_local $var$569 + (i32.shr_s + (i32.shl + (get_local $var$235) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $var$728 + (i32.add + (get_local $var$569) + (i32.const -48) + ) + ) + (set_local $var$720 + (i32.lt_u + (i32.shr_u + (get_local $var$728) + (i32.const 0) + ) + (i32.const 10) + ) + ) + (if_else + (get_local $var$720) + (block $label$66 + (set_local $var$233 + (get_local $var$668) + ) + (set_local $var$647 + (get_local $var$304) + ) + (set_local $var$732 + (get_local $var$728) + ) + ) + (block $label$67 + (set_local $var$683 + (get_local $var$668) + ) + (set_local $var$790 + (get_local $var$304) + ) + (br $label$58) + ) + ) + (br $label$64) + ) + ) + ) + ) + (set_local $var$403 + (i32.add + (get_local $var$680) + (i32.const 2) + ) + ) + (set_local $var$216 + (i32.load8_s align=1 + (get_local $var$403) + ) + ) + (set_local $var$575 + (i32.shr_s + (i32.shl + (get_local $var$216) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $var$729 + (i32.add + (get_local $var$575) + (i32.const -48) + ) + ) + (set_local $var$721 + (i32.lt_u + (i32.shr_u + (get_local $var$729) + (i32.const 0) + ) + (i32.const 10) + ) + ) + (if + (get_local $var$721) + (block $label$68 + (set_local $var$404 + (i32.add + (get_local $var$680) + (i32.const 3) + ) + ) + (set_local $var$217 + (i32.load8_s align=1 + (get_local $var$404) + ) + ) + (set_local $var$437 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $var$217) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 36) + ) + ) + (if + (get_local $var$437) + (block $label$69 + (set_local $var$405 + (i32.add + (get_local $var$4) + (i32.shl + (get_local $var$729) + (i32.const 2) + ) + ) + ) + (i32.store align=4 + (get_local $var$405) + (i32.const 10) + ) + (set_local $var$218 + (i32.load8_s align=1 + (get_local $var$403) + ) + ) + (set_local $var$577 + (i32.shr_s + (i32.shl + (get_local $var$218) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $var$910 + (i32.add + (get_local $var$577) + (i32.const -48) + ) + ) + (set_local $var$656 + (i32.add + (get_local $var$3) + (i32.shl + (get_local $var$910) + (i32.const 3) + ) + ) + ) + (set_local $var$219 + (get_local $var$656) + ) + (set_local $var$220 + (get_local $var$219) + ) + (set_local $var$221 + (i32.load align=4 + (get_local $var$220) + ) + ) + (set_local $var$222 + (i32.add + (get_local $var$219) + (i32.const 4) + ) + ) + (set_local $var$224 + (get_local $var$222) + ) + (set_local $var$225 + (i32.load align=4 + (get_local $var$224) + ) + ) + (set_local $var$308 + (i32.add + (get_local $var$680) + (i32.const 4) + ) + ) + (set_local $var$683 + (get_local $var$308) + ) + (set_local $var$790 + (get_local $var$221) + ) + (br $label$58) + ) + ) + ) + ) + (set_local $var$963 + (i32.eq + (get_local $var$748) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$963) + (i32.const 0) + ) + (block $label$70 + (set_local $var$821 + (i32.const -1) + ) + (br $label$1) + ) + ) + (if_else + (get_local $var$969) + (block $label$71 + (set_local $var$394 + (i32.load align=4 + (get_local $var$2) + ) + ) + (set_local $var$226 + (get_local $var$394) + ) + (set_local $var$227 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $var$627 + (get_local $var$227) + ) + (set_local $var$626 + (i32.sub + (get_local $var$627) + (i32.const 1) + ) + ) + (set_local $var$228 + (i32.add + (get_local $var$226) + (get_local $var$626) + ) + ) + (set_local $var$229 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $var$630 + (get_local $var$229) + ) + (set_local $var$629 + (i32.sub + (get_local $var$630) + (i32.const 1) + ) + ) + (set_local $var$628 + (i32.xor + (get_local $var$629) + (i32.const -1) + ) + ) + (set_local $var$230 + (i32.and + (get_local $var$228) + (get_local $var$628) + ) + ) + (set_local $var$231 + (get_local $var$230) + ) + (set_local $var$232 + (i32.load align=4 + (get_local $var$231) + ) + ) + (set_local $var$396 + (i32.add + (get_local $var$231) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$2) + (get_local $var$396) + ) + (set_local $var$683 + (get_local $var$403) + ) + (set_local $var$790 + (get_local $var$232) + ) + ) + (block $label$72 + (set_local $var$683 + (get_local $var$403) + ) + (set_local $var$790 + (i32.const 0) + ) + ) + ) + ) + (block $label$73 + (set_local $var$683 + (get_local $var$680) + ) + (set_local $var$790 + (i32.const -1) + ) + ) + ) + ) + (set_local $var$681 + (get_local $var$683) + ) + (set_local $var$843 + (i32.const 0) + ) + (loop $label$74 $label$75 + (block $label$76 + (set_local $var$236 + (i32.load8_s align=1 + (get_local $var$681) + ) + ) + (set_local $var$578 + (i32.shr_s + (i32.shl + (get_local $var$236) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $var$912 + (i32.add + (get_local $var$578) + (i32.const -65) + ) + ) + (set_local $var$441 + (i32.gt_u + (i32.shr_u + (get_local $var$912) + (i32.const 0) + ) + (i32.const 57) + ) + ) + (if + (get_local $var$441) + (block $label$77 + (set_local $var$821 + (i32.const -1) + ) + (br $label$1) + ) + ) + (set_local $var$678 + (i32.add + (get_local $var$681) + (i32.const 1) + ) + ) + (set_local $var$407 + (i32.add + (i32.add + (i32.const 3611) + (i32.mul + (get_local $var$843) + (i32.const 58) + ) + ) + (get_local $var$912) + ) + ) + (set_local $var$237 + (i32.load8_s align=1 + (get_local $var$407) + ) + ) + (set_local $var$579 + (i32.and + (get_local $var$237) + (i32.const 255) + ) + ) + (set_local $var$913 + (i32.add + (get_local $var$579) + (i32.const -1) + ) + ) + (set_local $var$442 + (i32.lt_u + (i32.shr_u + (get_local $var$913) + (i32.const 0) + ) + (i32.const 8) + ) + ) + (if_else + (get_local $var$442) + (block $label$78 + (set_local $var$681 + (get_local $var$678) + ) + (set_local $var$843 + (get_local $var$579) + ) + ) + (block $label$79 + (set_local $var$8 + (get_local $var$237) + ) + (set_local $var$580 + (get_local $var$579) + ) + (set_local $var$679 + (get_local $var$678) + ) + (set_local $var$682 + (get_local $var$681) + ) + (set_local $var$844 + (get_local $var$843) + ) + (br $label$74) + ) + ) + (br $label$75) + ) + ) + (set_local $var$964 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $var$8) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (if + (get_local $var$964) + (block $label$80 + (set_local $var$821 + (i32.const -1) + ) + (br $label$1) + ) + ) + (set_local $var$444 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $var$8) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 19) + ) + ) + (set_local $var$445 + (i32.gt_s + (get_local $var$397) + (i32.const -1) + ) + ) + (block $label$81 + (if_else + (get_local $var$444) + (if_else + (get_local $var$445) + (block $label$82 + (set_local $var$821 + (i32.const -1) + ) + (br $label$1) + ) + (set_local $var$1034 + (i32.const 52) + ) + ) + (block $label$83 + (if + (get_local $var$445) + (block $label$84 + (set_local $var$408 + (i32.add + (get_local $var$4) + (i32.shl + (get_local $var$397) + (i32.const 2) + ) + ) + ) + (i32.store align=4 + (get_local $var$408) + (get_local $var$580) + ) + (set_local $var$238 + (i32.add + (get_local $var$3) + (i32.shl + (get_local $var$397) + (i32.const 3) + ) + ) + ) + (set_local $var$239 + (get_local $var$238) + ) + (set_local $var$240 + (get_local $var$239) + ) + (set_local $var$241 + (i32.load align=4 + (get_local $var$240) + ) + ) + (set_local $var$242 + (i32.add + (get_local $var$239) + (i32.const 4) + ) + ) + (set_local $var$243 + (get_local $var$242) + ) + (set_local $var$244 + (i32.load align=4 + (get_local $var$243) + ) + ) + (set_local $var$246 + (get_local $var$392) + ) + (set_local $var$247 + (get_local $var$246) + ) + (i32.store align=4 + (get_local $var$247) + (get_local $var$241) + ) + (set_local $var$248 + (i32.add + (get_local $var$246) + (i32.const 4) + ) + ) + (set_local $var$249 + (get_local $var$248) + ) + (i32.store align=4 + (get_local $var$249) + (get_local $var$244) + ) + (set_local $var$1034 + (i32.const 52) + ) + (br $label$81) + ) + ) + (if + (i32.eq + (get_local $var$969) + (i32.const 0) + ) + (block $label$85 + (set_local $var$821 + (i32.const 0) + ) + (br $label$1) + ) + ) + (call $_pop_arg_336 + (get_local $var$392) + (get_local $var$580) + (get_local $var$2) + ) + ) + ) + ) + (if + (i32.eq + (get_local $var$1034) + (i32.const 52) + ) + (block $label$86 + (set_local $var$1034 + (i32.const 0) + ) + (if + (i32.eq + (get_local $var$969) + (i32.const 0) + ) + (block $label$87 + (set_local $var$549 + (get_local $var$550) + ) + (set_local $var$685 + (get_local $var$679) + ) + (set_local $var$738 + (get_local $var$884) + ) + (set_local $var$743 + (get_local $var$748) + ) + (br $label$2) + ) + ) + ) + ) + (set_local $var$250 + (i32.load8_s align=1 + (get_local $var$682) + ) + ) + (set_local $var$581 + (i32.shr_s + (i32.shl + (get_local $var$250) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $var$965 + (i32.ne + (get_local $var$844) + (i32.const 0) + ) + ) + (set_local $var$375 + (i32.and + (get_local $var$581) + (i32.const 15) + ) + ) + (set_local $var$449 + (i32.eq + (get_local $var$375) + (i32.const 3) + ) + ) + (set_local $var$775 + (i32.and + (get_local $var$965) + (get_local $var$449) + ) + ) + (set_local $var$376 + (i32.and + (get_local $var$581) + (i32.const -33) + ) + ) + (set_local $var$937 + (if_else + (get_local $var$775) + (get_local $var$376) + (get_local $var$581) + ) + ) + (set_local $var$377 + (i32.and + (get_local $var$637) + (i32.const 8192) + ) + ) + (set_local $var$966 + (i32.eq + (get_local $var$377) + (i32.const 0) + ) + ) + (set_local $var$378 + (i32.and + (get_local $var$637) + (i32.const -65537) + ) + ) + (set_local $var$638 + (if_else + (get_local $var$966) + (get_local $var$637) + (get_local $var$378) + ) + ) + (block $label$88 + (tableswitch $label$111 + (i32.sub + (get_local $var$937) + (i32.const 65) + ) + (table (case $label$102) (case $label$110) (case $label$100) (case $label$110) (case $label$105) (case $label$104) (case $label$103) (case $label$110) (case $label$110) (case $label$110) (case $label$110) (case $label$110) (case $label$110) (case $label$110) (case $label$110) (case $label$110) (case $label$110) (case $label$110) (case $label$101) (case $label$110) (case $label$110) (case $label$110) (case $label$110) (case $label$91) (case $label$110) (case $label$110) (case $label$110) (case $label$110) (case $label$110) (case $label$110) (case $label$110) (case $label$110) (case $label$106) (case $label$110) (case $label$97) (case $label$95) (case $label$109) (case $label$108) (case $label$107) (case $label$110) (case $label$94) (case $label$110) (case $label$110) (case $label$110) (case $label$98) (case $label$89) (case $label$93) (case $label$90) (case $label$110) (case $label$110) (case $label$99) (case $label$110) (case $label$96) (case $label$110) (case $label$110) (case $label$92)) (case $label$110) + (case $label$89 + (block $label$112 + (tableswitch $label$121 + (i32.sub + (get_local $var$844) + (i32.const 0) + ) + (table (case $label$113) (case $label$114) (case $label$115) (case $label$116) (case $label$117) (case $label$120) (case $label$118) (case $label$119)) (case $label$120) + (case $label$113 + (block $label$122 + (set_local $var$258 + (i32.load align=4 + (get_local $var$392) + ) + ) + (i32.store align=4 + (get_local $var$258) + (get_local $var$550) + ) + (set_local $var$549 + (get_local $var$550) + ) + (set_local $var$685 + (get_local $var$679) + ) + (set_local $var$738 + (get_local $var$884) + ) + (set_local $var$743 + (get_local $var$748) + ) + (br $label$2) + (br $label$121) + ) + ) + (case $label$114 + (block $label$123 + (set_local $var$259 + (i32.load align=4 + (get_local $var$392) + ) + ) + (i32.store align=4 + (get_local $var$259) + (get_local $var$550) + ) + (set_local $var$549 + (get_local $var$550) + ) + (set_local $var$685 + (get_local $var$679) + ) + (set_local $var$738 + (get_local $var$884) + ) + (set_local $var$743 + (get_local $var$748) + ) + (br $label$2) + (br $label$121) + ) + ) + (case $label$115 + (block $label$124 + (set_local $var$260 + (i32.lt_s + (get_local $var$550) + (i32.const 0) + ) + ) + (set_local $var$261 + (i32.shr_s + (i32.shl + (get_local $var$260) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $var$262 + (i32.load align=4 + (get_local $var$392) + ) + ) + (set_local $var$263 + (get_local $var$262) + ) + (set_local $var$264 + (get_local $var$263) + ) + (i32.store align=4 + (get_local $var$264) + (get_local $var$550) + ) + (set_local $var$265 + (i32.add + (get_local $var$263) + (i32.const 4) + ) + ) + (set_local $var$266 + (get_local $var$265) + ) + (i32.store align=4 + (get_local $var$266) + (get_local $var$261) + ) + (set_local $var$549 + (get_local $var$550) + ) + (set_local $var$685 + (get_local $var$679) + ) + (set_local $var$738 + (get_local $var$884) + ) + (set_local $var$743 + (get_local $var$748) + ) + (br $label$2) + (br $label$121) + ) + ) + (case $label$116 + (block $label$125 + (set_local $var$583 + (i32.and + (get_local $var$550) + (i32.const 65535) + ) + ) + (set_local $var$268 + (i32.load align=4 + (get_local $var$392) + ) + ) + (i32.store16 align=2 + (get_local $var$268) + (get_local $var$583) + ) + (set_local $var$549 + (get_local $var$550) + ) + (set_local $var$685 + (get_local $var$679) + ) + (set_local $var$738 + (get_local $var$884) + ) + (set_local $var$743 + (get_local $var$748) + ) + (br $label$2) + (br $label$121) + ) + ) + (case $label$117 + (block $label$126 + (set_local $var$584 + (i32.and + (get_local $var$550) + (i32.const 255) + ) + ) + (set_local $var$269 + (i32.load align=4 + (get_local $var$392) + ) + ) + (i32.store8 align=1 + (get_local $var$269) + (get_local $var$584) + ) + (set_local $var$549 + (get_local $var$550) + ) + (set_local $var$685 + (get_local $var$679) + ) + (set_local $var$738 + (get_local $var$884) + ) + (set_local $var$743 + (get_local $var$748) + ) + (br $label$2) + (br $label$121) + ) + ) + (case $label$118 + (block $label$127 + (set_local $var$270 + (i32.load align=4 + (get_local $var$392) + ) + ) + (i32.store align=4 + (get_local $var$270) + (get_local $var$550) + ) + (set_local $var$549 + (get_local $var$550) + ) + (set_local $var$685 + (get_local $var$679) + ) + (set_local $var$738 + (get_local $var$884) + ) + (set_local $var$743 + (get_local $var$748) + ) + (br $label$2) + (br $label$121) + ) + ) + (case $label$119 + (block $label$128 + (set_local $var$271 + (i32.lt_s + (get_local $var$550) + (i32.const 0) + ) + ) + (set_local $var$272 + (i32.shr_s + (i32.shl + (get_local $var$271) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $var$273 + (i32.load align=4 + (get_local $var$392) + ) + ) + (set_local $var$274 + (get_local $var$273) + ) + (set_local $var$275 + (get_local $var$274) + ) + (i32.store align=4 + (get_local $var$275) + (get_local $var$550) + ) + (set_local $var$276 + (i32.add + (get_local $var$274) + (i32.const 4) + ) + ) + (set_local $var$277 + (get_local $var$276) + ) + (i32.store align=4 + (get_local $var$277) + (get_local $var$272) + ) + (set_local $var$549 + (get_local $var$550) + ) + (set_local $var$685 + (get_local $var$679) + ) + (set_local $var$738 + (get_local $var$884) + ) + (set_local $var$743 + (get_local $var$748) + ) + (br $label$2) + (br $label$121) + ) + ) + (case $label$120 + (block $label$129 + (set_local $var$549 + (get_local $var$550) + ) + (set_local $var$685 + (get_local $var$679) + ) + (set_local $var$738 + (get_local $var$884) + ) + (set_local $var$743 + (get_local $var$748) + ) + (br $label$2) + ) + ) + ) + (br $label$111) + ) + ) + (case $label$90 + (block $label$130 + (set_local $var$455 + (i32.gt_u + (i32.shr_u + (get_local $var$790) + (i32.const 0) + ) + (i32.const 8) + ) + ) + (set_local $var$555 + (if_else + (get_local $var$455) + (get_local $var$790) + (i32.const 8) + ) + ) + (set_local $var$787 + (i32.or + (get_local $var$638) + (i32.const 8) + ) + ) + (set_local $var$639 + (get_local $var$787) + ) + (set_local $var$791 + (get_local $var$555) + ) + (set_local $var$938 + (i32.const 120) + ) + (set_local $var$1034 + (i32.const 64) + ) + (br $label$111) + ) + ) + (case $label$91 + (nop) + ) + (case $label$92 + (block $label$131 + (set_local $var$639 + (get_local $var$638) + ) + (set_local $var$791 + (get_local $var$790) + ) + (set_local $var$938 + (get_local $var$937) + ) + (set_local $var$1034 + (i32.const 64) + ) + (br $label$111) + ) + ) + (case $label$93 + (block $label$132 + (set_local $var$41 + (get_local $var$392) + ) + (set_local $var$42 + (get_local $var$41) + ) + (set_local $var$43 + (i32.load align=4 + (get_local $var$42) + ) + ) + (set_local $var$44 + (i32.add + (get_local $var$41) + (i32.const 4) + ) + ) + (set_local $var$46 + (get_local $var$44) + ) + (set_local $var$47 + (i32.load align=4 + (get_local $var$46) + ) + ) + (set_local $var$48 + (i32.eq + (get_local $var$43) + (i32.const 0) + ) + ) + (set_local $var$49 + (i32.eq + (get_local $var$47) + (i32.const 0) + ) + ) + (set_local $var$50 + (i32.and + (get_local $var$48) + (get_local $var$49) + ) + ) + (if_else + (get_local $var$50) + (set_local $var$826 + (get_local $var$309) + ) + (block $label$133 + (set_local $var$52 + (get_local $var$43) + ) + (set_local $var$55 + (get_local $var$47) + ) + (set_local $var$828 + (get_local $var$309) + ) + (loop $label$134 $label$135 + (block $label$136 + (set_local $var$51 + (i32.and + (get_local $var$52) + (i32.const 7) + ) + ) + (set_local $var$53 + (i32.or + (get_local $var$51) + (i32.const 48) + ) + ) + (set_local $var$54 + (i32.and + (get_local $var$53) + (i32.const 255) + ) + ) + (set_local $var$671 + (i32.add + (get_local $var$828) + (i32.const -1) + ) + ) + (i32.store8 align=1 + (get_local $var$671) + (get_local $var$54) + ) + (set_local $var$57 + (call $_bitshift64Lshr + (get_local $var$52) + (get_local $var$55) + (i32.const 3) + ) + ) + (set_local $var$58 + (i32.load align=4 + (i32.const 168) + ) + ) + (set_local $var$59 + (i32.eq + (get_local $var$57) + (i32.const 0) + ) + ) + (set_local $var$60 + (i32.eq + (get_local $var$58) + (i32.const 0) + ) + ) + (set_local $var$61 + (i32.and + (get_local $var$59) + (get_local $var$60) + ) + ) + (if_else + (get_local $var$61) + (block $label$137 + (set_local $var$826 + (get_local $var$671) + ) + (br $label$134) + ) + (block $label$138 + (set_local $var$52 + (get_local $var$57) + ) + (set_local $var$55 + (get_local $var$58) + ) + (set_local $var$828 + (get_local $var$671) + ) + ) + ) + (br $label$135) + ) + ) + ) + ) + (set_local $var$381 + (i32.and + (get_local $var$638) + (i32.const 8) + ) + ) + (set_local $var$971 + (i32.eq + (get_local $var$381) + (i32.const 0) + ) + ) + (if_else + (get_local $var$971) + (block $label$139 + (set_local $var$289 + (get_local $var$826) + ) + (set_local $var$640 + (get_local $var$638) + ) + (set_local $var$792 + (get_local $var$790) + ) + (set_local $var$807 + (i32.const 0) + ) + (set_local $var$813 + (i32.const 4091) + ) + (set_local $var$1034 + (i32.const 77) + ) + ) + (block $label$140 + (set_local $var$870 + (get_local $var$826) + ) + (set_local $var$892 + (i32.sub + (get_local $var$859) + (get_local $var$870) + ) + ) + (set_local $var$333 + (i32.add + (get_local $var$892) + (i32.const 1) + ) + ) + (set_local $var$460 + (i32.lt_s + (get_local $var$790) + (get_local $var$333) + ) + ) + (set_local $var$334 + (if_else + (get_local $var$460) + (get_local $var$333) + (get_local $var$790) + ) + ) + (set_local $var$289 + (get_local $var$826) + ) + (set_local $var$640 + (get_local $var$638) + ) + (set_local $var$792 + (get_local $var$334) + ) + (set_local $var$807 + (i32.const 0) + ) + (set_local $var$813 + (i32.const 4091) + ) + (set_local $var$1034 + (i32.const 77) + ) + ) + ) + (br $label$111) + ) + ) + (case $label$94 + (nop) + ) + (case $label$95 + (block $label$141 + (set_local $var$62 + (get_local $var$392) + ) + (set_local $var$63 + (get_local $var$62) + ) + (set_local $var$64 + (i32.load align=4 + (get_local $var$63) + ) + ) + (set_local $var$65 + (i32.add + (get_local $var$62) + (i32.const 4) + ) + ) + (set_local $var$66 + (get_local $var$65) + ) + (set_local $var$68 + (i32.load align=4 + (get_local $var$66) + ) + ) + (set_local $var$69 + (i32.lt_s + (get_local $var$68) + (i32.const 0) + ) + ) + (if + (get_local $var$69) + (block $label$142 + (set_local $var$70 + (call $_i64Subtract + (i32.const 0) + (i32.const 0) + (get_local $var$64) + (get_local $var$68) + ) + ) + (set_local $var$71 + (i32.load align=4 + (i32.const 168) + ) + ) + (set_local $var$72 + (get_local $var$392) + ) + (set_local $var$73 + (get_local $var$72) + ) + (i32.store align=4 + (get_local $var$73) + (get_local $var$70) + ) + (set_local $var$74 + (i32.add + (get_local $var$72) + (i32.const 4) + ) + ) + (set_local $var$75 + (get_local $var$74) + ) + (i32.store align=4 + (get_local $var$75) + (get_local $var$71) + ) + (set_local $var$76 + (get_local $var$70) + ) + (set_local $var$77 + (get_local $var$71) + ) + (set_local $var$805 + (i32.const 1) + ) + (set_local $var$810 + (i32.const 4091) + ) + (set_local $var$1034 + (i32.const 76) + ) + (br $label$88) + ) + ) + (set_local $var$383 + (i32.and + (get_local $var$638) + (i32.const 2048) + ) + ) + (set_local $var$973 + (i32.eq + (get_local $var$383) + (i32.const 0) + ) + ) + (if_else + (get_local $var$973) + (block $label$143 + (set_local $var$384 + (i32.and + (get_local $var$638) + (i32.const 1) + ) + ) + (set_local $var$977 + (i32.eq + (get_local $var$384) + (i32.const 0) + ) + ) + (set_local $var$5 + (if_else + (get_local $var$977) + (i32.const 4091) + (i32.const 4093) + ) + ) + (set_local $var$76 + (get_local $var$64) + ) + (set_local $var$77 + (get_local $var$68) + ) + (set_local $var$805 + (get_local $var$384) + ) + (set_local $var$810 + (get_local $var$5) + ) + (set_local $var$1034 + (i32.const 76) + ) + ) + (block $label$144 + (set_local $var$76 + (get_local $var$64) + ) + (set_local $var$77 + (get_local $var$68) + ) + (set_local $var$805 + (i32.const 1) + ) + (set_local $var$810 + (i32.const 4092) + ) + (set_local $var$1034 + (i32.const 76) + ) + ) + ) + (br $label$111) + ) + ) + (case $label$96 + (block $label$145 + (set_local $var$251 + (get_local $var$392) + ) + (set_local $var$252 + (get_local $var$251) + ) + (set_local $var$253 + (i32.load align=4 + (get_local $var$252) + ) + ) + (set_local $var$254 + (i32.add + (get_local $var$251) + (i32.const 4) + ) + ) + (set_local $var$255 + (get_local $var$254) + ) + (set_local $var$257 + (i32.load align=4 + (get_local $var$255) + ) + ) + (set_local $var$76 + (get_local $var$253) + ) + (set_local $var$77 + (get_local $var$257) + ) + (set_local $var$805 + (i32.const 0) + ) + (set_local $var$810 + (i32.const 4091) + ) + (set_local $var$1034 + (i32.const 76) + ) + (br $label$111) + ) + ) + (case $label$97 + (block $label$146 + (set_local $var$91 + (get_local $var$392) + ) + (set_local $var$92 + (get_local $var$91) + ) + (set_local $var$93 + (i32.load align=4 + (get_local $var$92) + ) + ) + (set_local $var$94 + (i32.add + (get_local $var$91) + (i32.const 4) + ) + ) + (set_local $var$95 + (get_local $var$94) + ) + (set_local $var$96 + (i32.load align=4 + (get_local $var$95) + ) + ) + (set_local $var$97 + (i32.and + (get_local $var$93) + (i32.const 255) + ) + ) + (i32.store8 align=1 + (get_local $var$314) + (get_local $var$97) + ) + (set_local $var$293 + (get_local $var$314) + ) + (set_local $var$641 + (get_local $var$378) + ) + (set_local $var$796 + (i32.const 1) + ) + (set_local $var$809 + (i32.const 0) + ) + (set_local $var$814 + (i32.const 4091) + ) + (set_local $var$1024 + (get_local $var$309) + ) + (br $label$111) + ) + ) + (case $label$98 + (block $label$147 + (set_local $var$424 + (call $___errno_location) + ) + (set_local $var$98 + (i32.load align=4 + (get_local $var$424) + ) + ) + (set_local $var$425 + (call $_strerror + (get_local $var$98) + ) + ) + (set_local $var$290 + (get_local $var$425) + ) + (set_local $var$1034 + (i32.const 82) + ) + (br $label$111) + ) + ) + (case $label$99 + (block $label$148 + (set_local $var$99 + (i32.load align=4 + (get_local $var$392) + ) + ) + (set_local $var$980 + (i32.ne + (get_local $var$99) + (i32.const 0) + ) + ) + (set_local $var$558 + (if_else + (get_local $var$980) + (get_local $var$99) + (i32.const 4101) + ) + ) + (set_local $var$290 + (get_local $var$558) + ) + (set_local $var$1034 + (i32.const 82) + ) + (br $label$111) + ) + ) + (case $label$100 + (block $label$149 + (set_local $var$101 + (get_local $var$392) + ) + (set_local $var$102 + (get_local $var$101) + ) + (set_local $var$103 + (i32.load align=4 + (get_local $var$102) + ) + ) + (set_local $var$104 + (i32.add + (get_local $var$101) + (i32.const 4) + ) + ) + (set_local $var$105 + (get_local $var$104) + ) + (set_local $var$106 + (i32.load align=4 + (get_local $var$105) + ) + ) + (i32.store align=4 + (get_local $var$1007) + (get_local $var$103) + ) + (i32.store align=4 + (get_local $var$412) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$392) + (get_local $var$1007) + ) + (set_local $var$795 + (i32.const -1) + ) + (set_local $var$1034 + (i32.const 86) + ) + (br $label$111) + ) + ) + (case $label$101 + (block $label$150 + (set_local $var$477 + (i32.eq + (get_local $var$790) + (i32.const 0) + ) + ) + (if_else + (get_local $var$477) + (block $label$151 + (call $_pad + (get_local $var$0) + (i32.const 32) + (get_local $var$1003) + (i32.const 0) + (get_local $var$638) + ) + (set_local $var$643 + (i32.const 0) + ) + (set_local $var$1034 + (i32.const 98) + ) + ) + (block $label$152 + (set_local $var$795 + (get_local $var$790) + ) + (set_local $var$1034 + (i32.const 86) + ) + ) + ) + (br $label$111) + ) + ) + (case $label$102 + (nop) + ) + (case $label$103 + (nop) + ) + (case $label$104 + (nop) + ) + (case $label$105 + (nop) + ) + (case $label$106 + (nop) + ) + (case $label$107 + (nop) + ) + (case $label$108 + (nop) + ) + (case $label$109 + (block $label$153 + (set_local $var$1038 + (f64.load align=8 + (get_local $var$392) + ) + ) + (i32.store align=4 + (get_local $var$618) + (i32.const 0) + ) + (f64.store align=8 + (i32.load align=4 + (i32.const 24) + ) + (get_local $var$1038) + ) + (set_local $var$113 + (i32.load align=4 + (i32.load align=4 + (i32.const 24) + ) + ) + ) + (set_local $var$114 + (i32.load align=4 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 4) + ) + ) + ) + (set_local $var$115 + (i32.lt_s + (get_local $var$114) + (i32.const 0) + ) + ) + (if_else + (get_local $var$115) + (block $label$154 + (set_local $var$1057 + (f64.neg + (get_local $var$1038) + ) + ) + (set_local $var$806 + (i32.const 1) + ) + (set_local $var$812 + (i32.const 4108) + ) + (set_local $var$1064 + (get_local $var$1057) + ) + ) + (block $label$155 + (set_local $var$358 + (i32.and + (get_local $var$638) + (i32.const 2048) + ) + ) + (set_local $var$1000 + (i32.eq + (get_local $var$358) + (i32.const 0) + ) + ) + (if_else + (get_local $var$1000) + (block $label$156 + (set_local $var$373 + (i32.and + (get_local $var$638) + (i32.const 1) + ) + ) + (set_local $var$959 + (i32.eq + (get_local $var$373) + (i32.const 0) + ) + ) + (set_local $var$6 + (if_else + (get_local $var$959) + (i32.const 4109) + (i32.const 4114) + ) + ) + (set_local $var$806 + (get_local $var$373) + ) + (set_local $var$812 + (get_local $var$6) + ) + (set_local $var$1064 + (get_local $var$1038) + ) + ) + (block $label$157 + (set_local $var$806 + (i32.const 1) + ) + (set_local $var$812 + (i32.const 4111) + ) + (set_local $var$1064 + (get_local $var$1038) + ) + ) + ) + ) + ) + (f64.store align=8 + (i32.load align=4 + (i32.const 24) + ) + (get_local $var$1064) + ) + (set_local $var$116 + (i32.load align=4 + (i32.load align=4 + (i32.const 24) + ) + ) + ) + (set_local $var$117 + (i32.load align=4 + (i32.add + (i32.load align=4 + (i32.const 24) + ) + (i32.const 4) + ) + ) + ) + (set_local $var$118 + (i32.and + (get_local $var$117) + (i32.const 2146435072) + ) + ) + (set_local $var$119 + (i32.lt_u + (i32.shr_u + (get_local $var$118) + (i32.const 0) + ) + (i32.const 2146435072) + ) + ) + (set_local $var$120 + (i32.lt_s + (i32.const 0) + (i32.const 0) + ) + ) + (set_local $var$122 + (i32.eq + (get_local $var$118) + (i32.const 2146435072) + ) + ) + (set_local $var$123 + (i32.and + (get_local $var$122) + (get_local $var$120) + ) + ) + (set_local $var$124 + (i32.or + (get_local $var$119) + (get_local $var$123) + ) + ) + (block $label$158 + (if_else + (get_local $var$124) + (block $label$159 + (set_local $var$1042 + (call $_frexpl + (get_local $var$1064) + (get_local $var$618) + ) + ) + (set_local $var$1045 + (f64.mul + (get_local $var$1042) + (f64.const 2) + ) + ) + (set_local $var$994 + (f64.ne + (get_local $var$1045) + (f64.const 0) + ) + ) + (if + (get_local $var$994) + (block $label$160 + (set_local $var$127 + (i32.load align=4 + (get_local $var$618) + ) + ) + (set_local $var$605 + (i32.add + (get_local $var$127) + (i32.const -1) + ) + ) + (i32.store align=4 + (get_local $var$618) + (get_local $var$605) + ) + ) + ) + (set_local $var$784 + (i32.or + (get_local $var$937) + (i32.const 32) + ) + ) + (set_local $var$515 + (i32.eq + (get_local $var$784) + (i32.const 97) + ) + ) + (if + (get_local $var$515) + (block $label$161 + (set_local $var$391 + (i32.and + (get_local $var$937) + (i32.const 32) + ) + ) + (set_local $var$995 + (i32.eq + (get_local $var$391) + (i32.const 0) + ) + ) + (set_local $var$324 + (i32.add + (get_local $var$812) + (i32.const 9) + ) + ) + (set_local $var$811 + (if_else + (get_local $var$995) + (get_local $var$812) + (get_local $var$324) + ) + ) + (set_local $var$351 + (i32.or + (get_local $var$806) + (i32.const 2) + ) + ) + (set_local $var$128 + (i32.gt_u + (i32.shr_u + (get_local $var$790) + (i32.const 0) + ) + (i32.const 11) + ) + ) + (set_local $var$932 + (i32.sub + (i32.const 12) + (get_local $var$790) + ) + ) + (set_local $var$997 + (i32.eq + (get_local $var$932) + (i32.const 0) + ) + ) + (set_local $var$996 + (i32.or + (get_local $var$128) + (get_local $var$997) + ) + ) + (block $label$162 + (if_else + (get_local $var$996) + (set_local $var$1065 + (get_local $var$1045) + ) + (block $label$163 + (set_local $var$816 + (get_local $var$932) + ) + (set_local $var$1053 + (f64.const 8) + ) + (loop $label$164 $label$165 + (block $label$166 + (set_local $var$608 + (i32.add + (get_local $var$816) + (i32.const -1) + ) + ) + (set_local $var$1051 + (f64.mul + (get_local $var$1053) + (f64.const 16) + ) + ) + (set_local $var$999 + (i32.eq + (get_local $var$608) + (i32.const 0) + ) + ) + (if_else + (get_local $var$999) + (block $label$167 + (set_local $var$1052 + (get_local $var$1051) + ) + (br $label$164) + ) + (block $label$168 + (set_local $var$816 + (get_local $var$608) + ) + (set_local $var$1053 + (get_local $var$1051) + ) + ) + ) + (br $label$165) + ) + ) + (set_local $var$129 + (i32.load8_s align=1 + (get_local $var$811) + ) + ) + (set_local $var$546 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $var$129) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 45) + ) + ) + (if_else + (get_local $var$546) + (block $label$169 + (set_local $var$1060 + (f64.neg + (get_local $var$1045) + ) + ) + (set_local $var$1061 + (f64.sub + (get_local $var$1060) + (get_local $var$1052) + ) + ) + (set_local $var$1040 + (f64.add + (get_local $var$1052) + (get_local $var$1061) + ) + ) + (set_local $var$1062 + (f64.neg + (get_local $var$1040) + ) + ) + (set_local $var$1065 + (get_local $var$1062) + ) + (br $label$162) + ) + (block $label$170 + (set_local $var$1041 + (f64.add + (get_local $var$1045) + (get_local $var$1052) + ) + ) + (set_local $var$1063 + (f64.sub + (get_local $var$1041) + (get_local $var$1052) + ) + ) + (set_local $var$1065 + (get_local $var$1063) + ) + (br $label$162) + ) + ) + ) + ) + ) + (set_local $var$130 + (i32.load align=4 + (get_local $var$618) + ) + ) + (set_local $var$547 + (i32.lt_s + (get_local $var$130) + (i32.const 0) + ) + ) + (set_local $var$935 + (i32.sub + (i32.const 0) + (get_local $var$130) + ) + ) + (set_local $var$553 + (if_else + (get_local $var$547) + (get_local $var$935) + (get_local $var$130) + ) + ) + (set_local $var$131 + (i32.lt_s + (get_local $var$553) + (i32.const 0) + ) + ) + (set_local $var$134 + (i32.shr_s + (i32.shl + (get_local $var$131) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $var$135 + (call $_fmt_u + (get_local $var$553) + (get_local $var$134) + (get_local $var$400) + ) + ) + (set_local $var$433 + (i32.eq + (get_local $var$135) + (get_local $var$400) + ) + ) + (if_else + (get_local $var$433) + (block $label$171 + (i32.store8 align=1 + (get_local $var$673) + (i32.const 48) + ) + (set_local $var$620 + (get_local $var$673) + ) + ) + (set_local $var$620 + (get_local $var$135) + ) + ) + (set_local $var$136 + (i32.shr_s + (get_local $var$130) + (i32.const 31) + ) + ) + (set_local $var$137 + (i32.and + (get_local $var$136) + (i32.const 2) + ) + ) + (set_local $var$138 + (i32.add + (get_local $var$137) + (i32.const 43) + ) + ) + (set_local $var$571 + (i32.and + (get_local $var$138) + (i32.const 255) + ) + ) + (set_local $var$674 + (i32.add + (get_local $var$620) + (i32.const -1) + ) + ) + (i32.store8 align=1 + (get_local $var$674) + (get_local $var$571) + ) + (set_local $var$328 + (i32.add + (get_local $var$937) + (i32.const 15) + ) + ) + (set_local $var$572 + (i32.and + (get_local $var$328) + (i32.const 255) + ) + ) + (set_local $var$675 + (i32.add + (get_local $var$620) + (i32.const -2) + ) + ) + (i32.store8 align=1 + (get_local $var$675) + (get_local $var$572) + ) + (set_local $var$770 + (i32.lt_s + (get_local $var$790) + (i32.const 1) + ) + ) + (set_local $var$374 + (i32.and + (get_local $var$638) + (i32.const 8) + ) + ) + (set_local $var$960 + (i32.eq + (get_local $var$374) + (i32.const 0) + ) + ) + (set_local $var$823 + (get_local $var$422) + ) + (set_local $var$1066 + (get_local $var$1065) + ) + (loop $label$172 $label$173 + (block $label$174 + (set_local $var$573 + (call_import $f64-to-int + (get_local $var$1066) + ) + ) + (set_local $var$402 + (i32.add + (i32.const 4075) + (get_local $var$573) + ) + ) + (set_local $var$139 + (i32.load8_s align=1 + (get_local $var$402) + ) + ) + (set_local $var$574 + (i32.and + (get_local $var$139) + (i32.const 255) + ) + ) + (set_local $var$786 + (i32.or + (get_local $var$574) + (get_local $var$391) + ) + ) + (set_local $var$576 + (i32.and + (get_local $var$786) + (i32.const 255) + ) + ) + (set_local $var$676 + (i32.add + (get_local $var$823) + (i32.const 1) + ) + ) + (i32.store8 align=1 + (get_local $var$823) + (get_local $var$576) + ) + (set_local $var$1043 + (f64.convert_s/i32 + (get_local $var$573) + ) + ) + (set_local $var$1058 + (f64.sub + (get_local $var$1066) + (get_local $var$1043) + ) + ) + (set_local $var$1046 + (f64.mul + (get_local $var$1058) + (f64.const 16) + ) + ) + (set_local $var$856 + (get_local $var$676) + ) + (set_local $var$885 + (i32.sub + (get_local $var$856) + (get_local $var$866) + ) + ) + (set_local $var$438 + (i32.eq + (get_local $var$885) + (i32.const 1) + ) + ) + (block $label$175 + (if_else + (get_local $var$438) + (block $label$176 + (set_local $var$769 + (f64.eq + (get_local $var$1046) + (f64.const 0) + ) + ) + (set_local $var$774 + (i32.and + (get_local $var$770) + (get_local $var$769) + ) + ) + (set_local $var$773 + (i32.and + (get_local $var$960) + (get_local $var$774) + ) + ) + (if + (get_local $var$773) + (block $label$177 + (set_local $var$824 + (get_local $var$676) + ) + (br $label$175) + ) + ) + (set_local $var$677 + (i32.add + (get_local $var$823) + (i32.const 2) + ) + ) + (i32.store8 align=1 + (get_local $var$676) + (i32.const 46) + ) + (set_local $var$824 + (get_local $var$677) + ) + ) + (set_local $var$824 + (get_local $var$676) + ) + ) + ) + (set_local $var$961 + (f64.ne + (get_local $var$1046) + (f64.const 0) + ) + ) + (if_else + (get_local $var$961) + (block $label$178 + (set_local $var$823 + (get_local $var$824) + ) + (set_local $var$1066 + (get_local $var$1046) + ) + ) + (block $label$179 + (set_local $var$825 + (get_local $var$824) + ) + (br $label$172) + ) + ) + (br $label$173) + ) + ) + (set_local $var$962 + (i32.ne + (get_local $var$790) + (i32.const 0) + ) + ) + (set_local $var$17 + (get_local $var$825) + ) + (set_local $var$911 + (i32.add + (get_local $var$886) + (get_local $var$17) + ) + ) + (set_local $var$440 + (i32.lt_s + (get_local $var$911) + (get_local $var$790) + ) + ) + (set_local $var$779 + (i32.and + (get_local $var$962) + (get_local $var$440) + ) + ) + (set_local $var$867 + (get_local $var$675) + ) + (set_local $var$329 + (i32.add + (get_local $var$887) + (get_local $var$790) + ) + ) + (set_local $var$330 + (i32.sub + (get_local $var$329) + (get_local $var$867) + ) + ) + (set_local $var$868 + (get_local $var$675) + ) + (set_local $var$889 + (i32.sub + (get_local $var$888) + (get_local $var$868) + ) + ) + (set_local $var$331 + (i32.add + (get_local $var$889) + (get_local $var$17) + ) + ) + (set_local $var$739 + (if_else + (get_local $var$779) + (get_local $var$330) + (get_local $var$331) + ) + ) + (set_local $var$332 + (i32.add + (get_local $var$739) + (get_local $var$351) + ) + ) + (call $_pad + (get_local $var$0) + (i32.const 32) + (get_local $var$1003) + (get_local $var$332) + (get_local $var$638) + ) + (set_local $var$140 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$362 + (i32.and + (get_local $var$140) + (i32.const 32) + ) + ) + (set_local $var$948 + (i32.eq + (get_local $var$362) + (i32.const 0) + ) + ) + (if + (get_local $var$948) + (call $___fwritex + (get_local $var$811) + (get_local $var$351) + (get_local $var$0) + ) + ) + (set_local $var$1012 + (i32.xor + (get_local $var$638) + (i32.const 65536) + ) + ) + (call $_pad + (get_local $var$0) + (i32.const 48) + (get_local $var$1003) + (get_local $var$332) + (get_local $var$1012) + ) + (set_local $var$890 + (i32.sub + (get_local $var$17) + (get_local $var$866) + ) + ) + (set_local $var$141 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$363 + (i32.and + (get_local $var$141) + (i32.const 32) + ) + ) + (set_local $var$949 + (i32.eq + (get_local $var$363) + (i32.const 0) + ) + ) + (if + (get_local $var$949) + (call $___fwritex + (get_local $var$422) + (get_local $var$890) + (get_local $var$0) + ) + ) + (set_local $var$869 + (get_local $var$675) + ) + (set_local $var$891 + (i32.sub + (get_local $var$857) + (get_local $var$869) + ) + ) + (set_local $var$936 + (i32.add + (get_local $var$890) + (get_local $var$891) + ) + ) + (set_local $var$914 + (i32.sub + (get_local $var$739) + (get_local $var$936) + ) + ) + (call $_pad + (get_local $var$0) + (i32.const 48) + (get_local $var$914) + (i32.const 0) + (i32.const 0) + ) + (set_local $var$142 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$364 + (i32.and + (get_local $var$142) + (i32.const 32) + ) + ) + (set_local $var$950 + (i32.eq + (get_local $var$364) + (i32.const 0) + ) + ) + (if + (get_local $var$950) + (call $___fwritex + (get_local $var$675) + (get_local $var$891) + (get_local $var$0) + ) + ) + (set_local $var$1013 + (i32.xor + (get_local $var$638) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $var$0) + (i32.const 32) + (get_local $var$1003) + (get_local $var$332) + (get_local $var$1013) + ) + (set_local $var$446 + (i32.lt_s + (get_local $var$332) + (get_local $var$1003) + ) + ) + (set_local $var$1005 + (if_else + (get_local $var$446) + (get_local $var$1003) + (get_local $var$332) + ) + ) + (set_local $var$822 + (get_local $var$1005) + ) + (br $label$158) + ) + ) + (set_local $var$447 + (i32.lt_s + (get_local $var$790) + (i32.const 0) + ) + ) + (set_local $var$9 + (if_else + (get_local $var$447) + (i32.const 6) + (get_local $var$790) + ) + ) + (if_else + (get_local $var$994) + (block $label$180 + (set_local $var$1047 + (f64.mul + (get_local $var$1045) + (f64.const 268435456) + ) + ) + (set_local $var$143 + (i32.load align=4 + (get_local $var$618) + ) + ) + (set_local $var$915 + (i32.add + (get_local $var$143) + (i32.const -28) + ) + ) + (i32.store align=4 + (get_local $var$618) + (get_local $var$915) + ) + (set_local $var$145 + (get_local $var$915) + ) + (set_local $var$1067 + (get_local $var$1047) + ) + ) + (block $label$181 + (set_local $var$16 + (i32.load align=4 + (get_local $var$618) + ) + ) + (set_local $var$145 + (get_local $var$16) + ) + (set_local $var$1067 + (get_local $var$1045) + ) + ) + ) + (set_local $var$448 + (i32.lt_s + (get_local $var$145) + (i32.const 0) + ) + ) + (set_local $var$398 + (if_else + (get_local $var$448) + (get_local $var$420) + (get_local $var$310) + ) + ) + (set_local $var$874 + (get_local $var$398) + ) + (set_local $var$1068 + (get_local $var$1067) + ) + (set_local $var$1018 + (get_local $var$398) + ) + (loop $label$182 $label$183 + (block $label$184 + (set_local $var$582 + (i32.shr_u + (call_import $f64-to-int + (get_local $var$1068) + ) + (i32.const 0) + ) + ) + (i32.store align=4 + (get_local $var$1018) + (get_local $var$582) + ) + (set_local $var$688 + (i32.add + (get_local $var$1018) + (i32.const 4) + ) + ) + (set_local $var$1044 + (f64.convert_u/i32 + (i32.shr_u + (get_local $var$582) + (i32.const 0) + ) + ) + ) + (set_local $var$1059 + (f64.sub + (get_local $var$1068) + (get_local $var$1044) + ) + ) + (set_local $var$1048 + (f64.mul + (get_local $var$1059) + (f64.const 1e9) + ) + ) + (set_local $var$967 + (f64.ne + (get_local $var$1048) + (f64.const 0) + ) + ) + (if_else + (get_local $var$967) + (block $label$185 + (set_local $var$1068 + (get_local $var$1048) + ) + (set_local $var$1018 + (get_local $var$688) + ) + ) + (block $label$186 + (set_local $var$689 + (get_local $var$688) + ) + (br $label$182) + ) + ) + (br $label$183) + ) + ) + (set_local $var$11 + (i32.load align=4 + (get_local $var$618) + ) + ) + (set_local $var$450 + (i32.gt_s + (get_local $var$11) + (i32.const 0) + ) + ) + (if_else + (get_local $var$450) + (block $label$187 + (set_local $var$146 + (get_local $var$11) + ) + (set_local $var$292 + (get_local $var$398) + ) + (set_local $var$1023 + (get_local $var$689) + ) + (loop $label$188 $label$189 + (block $label$190 + (set_local $var$452 + (i32.gt_s + (get_local $var$146) + (i32.const 29) + ) + ) + (set_local $var$554 + (if_else + (get_local $var$452) + (i32.const 29) + (get_local $var$146) + ) + ) + (set_local $var$595 + (i32.add + (get_local $var$1023) + (i32.const -4) + ) + ) + (set_local $var$453 + (i32.lt_u + (i32.shr_u + (get_local $var$595) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$292) + (i32.const 0) + ) + ) + ) + (block $label$191 + (if_else + (get_local $var$453) + (set_local $var$294 + (get_local $var$292) + ) + (block $label$192 + (set_local $var$429 + (i32.const 0) + ) + (set_local $var$597 + (get_local $var$595) + ) + (loop $label$193 $label$194 + (block $label$195 + (set_local $var$147 + (i32.load align=4 + (get_local $var$597) + ) + ) + (set_local $var$148 + (call $_bitshift64Shl + (get_local $var$147) + (i32.const 0) + (get_local $var$554) + ) + ) + (set_local $var$149 + (i32.load align=4 + (i32.const 168) + ) + ) + (set_local $var$150 + (call $_i64Add + (get_local $var$148) + (get_local $var$149) + (get_local $var$429) + (i32.const 0) + ) + ) + (set_local $var$151 + (i32.load align=4 + (i32.const 168) + ) + ) + (set_local $var$152 + (call $___uremdi3 + (get_local $var$150) + (get_local $var$151) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (set_local $var$153 + (i32.load align=4 + (i32.const 168) + ) + ) + (i32.store align=4 + (get_local $var$597) + (get_local $var$152) + ) + (set_local $var$154 + (call $___udivdi3 + (get_local $var$150) + (get_local $var$151) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (set_local $var$156 + (i32.load align=4 + (i32.const 168) + ) + ) + (set_local $var$596 + (i32.add + (get_local $var$597) + (i32.const -4) + ) + ) + (set_local $var$454 + (i32.lt_u + (i32.shr_u + (get_local $var$596) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$292) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$454) + (block $label$196 + (set_local $var$585 + (get_local $var$154) + ) + (br $label$193) + ) + (block $label$197 + (set_local $var$429 + (get_local $var$154) + ) + (set_local $var$597 + (get_local $var$596) + ) + ) + ) + (br $label$194) + ) + ) + (set_local $var$968 + (i32.eq + (get_local $var$585) + (i32.const 0) + ) + ) + (if + (get_local $var$968) + (block $label$198 + (set_local $var$294 + (get_local $var$292) + ) + (br $label$191) + ) + ) + (set_local $var$691 + (i32.add + (get_local $var$292) + (i32.const -4) + ) + ) + (i32.store align=4 + (get_local $var$691) + (get_local $var$585) + ) + (set_local $var$294 + (get_local $var$691) + ) + ) + ) + ) + (set_local $var$1025 + (get_local $var$1023) + ) + (loop $label$199 $label$200 + (block $label$201 + (set_local $var$456 + (i32.gt_u + (i32.shr_u + (get_local $var$1025) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$294) + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (get_local $var$456) + (i32.const 0) + ) + (block $label$202 + (set_local $var$1026 + (get_local $var$1025) + ) + (br $label$199) + ) + ) + (set_local $var$409 + (i32.add + (get_local $var$1025) + (i32.const -4) + ) + ) + (set_local $var$157 + (i32.load align=4 + (get_local $var$409) + ) + ) + (set_local $var$751 + (i32.eq + (get_local $var$157) + (i32.const 0) + ) + ) + (if_else + (get_local $var$751) + (set_local $var$1025 + (get_local $var$409) + ) + (block $label$203 + (set_local $var$1026 + (get_local $var$1025) + ) + (br $label$199) + ) + ) + (br $label$200) + ) + ) + (set_local $var$158 + (i32.load align=4 + (get_local $var$618) + ) + ) + (set_local $var$916 + (i32.sub + (get_local $var$158) + (get_local $var$554) + ) + ) + (i32.store align=4 + (get_local $var$618) + (get_local $var$916) + ) + (set_local $var$451 + (i32.gt_s + (get_local $var$916) + (i32.const 0) + ) + ) + (if_else + (get_local $var$451) + (block $label$204 + (set_local $var$146 + (get_local $var$916) + ) + (set_local $var$292 + (get_local $var$294) + ) + (set_local $var$1023 + (get_local $var$1026) + ) + ) + (block $label$205 + (set_local $var$12 + (get_local $var$916) + ) + (set_local $var$291 + (get_local $var$294) + ) + (set_local $var$1022 + (get_local $var$1026) + ) + (br $label$188) + ) + ) + (br $label$189) + ) + ) + ) + (block $label$206 + (set_local $var$12 + (get_local $var$11) + ) + (set_local $var$291 + (get_local $var$398) + ) + (set_local $var$1022 + (get_local $var$689) + ) + ) + ) + (set_local $var$457 + (i32.lt_s + (get_local $var$12) + (i32.const 0) + ) + ) + (if_else + (get_local $var$457) + (block $label$207 + (set_local $var$335 + (i32.add + (get_local $var$9) + (i32.const 25) + ) + ) + (set_local $var$609 + (i32.and + (i32.div_s + (get_local $var$335) + (i32.const 9) + ) + (i32.const -1) + ) + ) + (set_local $var$336 + (i32.add + (get_local $var$609) + (i32.const 1) + ) + ) + (set_local $var$463 + (i32.eq + (get_local $var$784) + (i32.const 102) + ) + ) + (set_local $var$159 + (get_local $var$12) + ) + (set_local $var$296 + (get_local $var$291) + ) + (set_local $var$1028 + (get_local $var$1022) + ) + (loop $label$208 $label$209 + (block $label$210 + (set_local $var$917 + (i32.sub + (i32.const 0) + (get_local $var$159) + ) + ) + (set_local $var$459 + (i32.gt_s + (get_local $var$917) + (i32.const 9) + ) + ) + (set_local $var$556 + (if_else + (get_local $var$459) + (i32.const 9) + (get_local $var$917) + ) + ) + (set_local $var$461 + (i32.lt_u + (i32.shr_u + (get_local $var$296) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$1028) + (i32.const 0) + ) + ) + ) + (block $label$211 + (if_else + (get_local $var$461) + (block $label$212 + (set_local $var$838 + (i32.shl + (i32.const 1) + (get_local $var$556) + ) + ) + (set_local $var$918 + (i32.add + (get_local $var$838) + (i32.const -1) + ) + ) + (set_local $var$842 + (i32.shr_u + (i32.const 1000000000) + (get_local $var$556) + ) + ) + (set_local $var$430 + (i32.const 0) + ) + (set_local $var$598 + (get_local $var$296) + ) + (loop $label$213 $label$214 + (block $label$215 + (set_local $var$161 + (i32.load align=4 + (get_local $var$598) + ) + ) + (set_local $var$382 + (i32.and + (get_local $var$161) + (get_local $var$918) + ) + ) + (set_local $var$841 + (i32.shr_u + (get_local $var$161) + (get_local $var$556) + ) + ) + (set_local $var$337 + (i32.add + (get_local $var$841) + (get_local $var$430) + ) + ) + (i32.store align=4 + (get_local $var$598) + (get_local $var$337) + ) + (set_local $var$758 + (i32.mul + (get_local $var$382) + (get_local $var$842) + ) + ) + (set_local $var$692 + (i32.add + (get_local $var$598) + (i32.const 4) + ) + ) + (set_local $var$462 + (i32.lt_u + (i32.shr_u + (get_local $var$692) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$1028) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$462) + (block $label$216 + (set_local $var$430 + (get_local $var$758) + ) + (set_local $var$598 + (get_local $var$692) + ) + ) + (block $label$217 + (set_local $var$759 + (get_local $var$758) + ) + (br $label$213) + ) + ) + (br $label$214) + ) + ) + (set_local $var$162 + (i32.load align=4 + (get_local $var$296) + ) + ) + (set_local $var$975 + (i32.eq + (get_local $var$162) + (i32.const 0) + ) + ) + (set_local $var$697 + (i32.add + (get_local $var$296) + (i32.const 4) + ) + ) + (set_local $var$695 + (if_else + (get_local $var$975) + (get_local $var$697) + (get_local $var$296) + ) + ) + (set_local $var$976 + (i32.eq + (get_local $var$759) + (i32.const 0) + ) + ) + (if + (get_local $var$976) + (block $label$218 + (set_local $var$696 + (get_local $var$695) + ) + (set_local $var$1029 + (get_local $var$1028) + ) + (br $label$211) + ) + ) + (set_local $var$698 + (i32.add + (get_local $var$1028) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$1028) + (get_local $var$759) + ) + (set_local $var$696 + (get_local $var$695) + ) + (set_local $var$1029 + (get_local $var$698) + ) + ) + (block $label$219 + (set_local $var$160 + (i32.load align=4 + (get_local $var$296) + ) + ) + (set_local $var$974 + (i32.eq + (get_local $var$160) + (i32.const 0) + ) + ) + (set_local $var$693 + (i32.add + (get_local $var$296) + (i32.const 4) + ) + ) + (set_local $var$694 + (if_else + (get_local $var$974) + (get_local $var$693) + (get_local $var$296) + ) + ) + (set_local $var$696 + (get_local $var$694) + ) + (set_local $var$1029 + (get_local $var$1028) + ) + ) + ) + ) + (set_local $var$557 + (if_else + (get_local $var$463) + (get_local $var$398) + (get_local $var$696) + ) + ) + (set_local $var$858 + (get_local $var$1029) + ) + (set_local $var$871 + (get_local $var$557) + ) + (set_local $var$893 + (i32.sub + (get_local $var$858) + (get_local $var$871) + ) + ) + (set_local $var$850 + (i32.shr_s + (get_local $var$893) + (i32.const 2) + ) + ) + (set_local $var$465 + (i32.gt_s + (get_local $var$850) + (get_local $var$336) + ) + ) + (set_local $var$312 + (i32.add + (get_local $var$557) + (i32.shl + (get_local $var$336) + (i32.const 2) + ) + ) + ) + (set_local $var$313 + (if_else + (get_local $var$465) + (get_local $var$312) + (get_local $var$1029) + ) + ) + (set_local $var$163 + (i32.load align=4 + (get_local $var$618) + ) + ) + (set_local $var$338 + (i32.add + (get_local $var$163) + (get_local $var$556) + ) + ) + (i32.store align=4 + (get_local $var$618) + (get_local $var$338) + ) + (set_local $var$458 + (i32.lt_s + (get_local $var$338) + (i32.const 0) + ) + ) + (if_else + (get_local $var$458) + (block $label$220 + (set_local $var$159 + (get_local $var$338) + ) + (set_local $var$296 + (get_local $var$696) + ) + (set_local $var$1028 + (get_local $var$313) + ) + ) + (block $label$221 + (set_local $var$295 + (get_local $var$696) + ) + (set_local $var$1027 + (get_local $var$313) + ) + (br $label$208) + ) + ) + (br $label$209) + ) + ) + ) + (block $label$222 + (set_local $var$295 + (get_local $var$291) + ) + (set_local $var$1027 + (get_local $var$1022) + ) + ) + ) + (set_local $var$466 + (i32.lt_u + (i32.shr_u + (get_local $var$295) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$1027) + (i32.const 0) + ) + ) + ) + (block $label$223 + (if_else + (get_local $var$466) + (block $label$224 + (set_local $var$873 + (get_local $var$295) + ) + (set_local $var$895 + (i32.sub + (get_local $var$874) + (get_local $var$873) + ) + ) + (set_local $var$851 + (i32.shr_s + (get_local $var$895) + (i32.const 2) + ) + ) + (set_local $var$760 + (i32.mul + (get_local $var$851) + (i32.const 9) + ) + ) + (set_local $var$164 + (i32.load align=4 + (get_local $var$295) + ) + ) + (set_local $var$468 + (i32.lt_u + (i32.shr_u + (get_local $var$164) + (i32.const 0) + ) + (i32.const 10) + ) + ) + (if_else + (get_local $var$468) + (block $label$225 + (set_local $var$614 + (get_local $var$760) + ) + (br $label$223) + ) + (block $label$226 + (set_local $var$613 + (get_local $var$760) + ) + (set_local $var$645 + (i32.const 10) + ) + ) + ) + (loop $label$227 $label$228 + (block $label$229 + (set_local $var$761 + (i32.mul + (get_local $var$645) + (i32.const 10) + ) + ) + (set_local $var$660 + (i32.add + (get_local $var$613) + (i32.const 1) + ) + ) + (set_local $var$469 + (i32.lt_u + (i32.shr_u + (get_local $var$164) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$761) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$469) + (block $label$230 + (set_local $var$614 + (get_local $var$660) + ) + (br $label$227) + ) + (block $label$231 + (set_local $var$613 + (get_local $var$660) + ) + (set_local $var$645 + (get_local $var$761) + ) + ) + ) + (br $label$228) + ) + ) + ) + (set_local $var$614 + (i32.const 0) + ) + ) + ) + (set_local $var$470 + (i32.ne + (get_local $var$784) + (i32.const 102) + ) + ) + (set_local $var$762 + (if_else + (get_local $var$470) + (get_local $var$614) + (i32.const 0) + ) + ) + (set_local $var$919 + (i32.sub + (get_local $var$9) + (get_local $var$762) + ) + ) + (set_local $var$471 + (i32.eq + (get_local $var$784) + (i32.const 103) + ) + ) + (set_local $var$979 + (i32.ne + (get_local $var$9) + (i32.const 0) + ) + ) + (set_local $var$165 + (i32.and + (get_local $var$979) + (get_local $var$471) + ) + ) + (set_local $var$749 + (i32.shr_s + (i32.shl + (get_local $var$165) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $var$920 + (i32.add + (get_local $var$919) + (get_local $var$749) + ) + ) + (set_local $var$860 + (get_local $var$1027) + ) + (set_local $var$896 + (i32.sub + (get_local $var$860) + (get_local $var$874) + ) + ) + (set_local $var$852 + (i32.shr_s + (get_local $var$896) + (i32.const 2) + ) + ) + (set_local $var$167 + (i32.mul + (get_local $var$852) + (i32.const 9) + ) + ) + (set_local $var$763 + (i32.add + (get_local $var$167) + (i32.const -9) + ) + ) + (set_local $var$472 + (i32.lt_s + (get_local $var$920) + (get_local $var$763) + ) + ) + (if_else + (get_local $var$472) + (block $label$232 + (set_local $var$315 + (i32.add + (get_local $var$398) + (i32.const 4) + ) + ) + (set_local $var$340 + (i32.add + (get_local $var$920) + (i32.const 9216) + ) + ) + (set_local $var$610 + (i32.and + (i32.div_s + (get_local $var$340) + (i32.const 9) + ) + (i32.const -1) + ) + ) + (set_local $var$921 + (i32.add + (get_local $var$610) + (i32.const -1024) + ) + ) + (set_local $var$316 + (i32.add + (get_local $var$315) + (i32.shl + (get_local $var$921) + (i32.const 2) + ) + ) + ) + (set_local $var$817 + (i32.and + (i32.rem_s + (get_local $var$340) + (i32.const 9) + ) + (i32.const -1) + ) + ) + (set_local $var$733 + (i32.add + (get_local $var$817) + (i32.const 1) + ) + ) + (set_local $var$473 + (i32.lt_s + (get_local $var$733) + (i32.const 9) + ) + ) + (if_else + (get_local $var$473) + (block $label$233 + (set_local $var$650 + (i32.const 10) + ) + (set_local $var$735 + (get_local $var$733) + ) + (loop $label$234 $label$235 + (block $label$236 + (set_local $var$764 + (i32.mul + (get_local $var$650) + (i32.const 10) + ) + ) + (set_local $var$734 + (i32.add + (get_local $var$735) + (i32.const 1) + ) + ) + (set_local $var$624 + (i32.eq + (get_local $var$734) + (i32.const 9) + ) + ) + (if_else + (get_local $var$624) + (block $label$237 + (set_local $var$648 + (get_local $var$764) + ) + (br $label$234) + ) + (block $label$238 + (set_local $var$650 + (get_local $var$764) + ) + (set_local $var$735 + (get_local $var$734) + ) + ) + ) + (br $label$235) + ) + ) + ) + (set_local $var$648 + (i32.const 10) + ) + ) + (set_local $var$168 + (i32.load align=4 + (get_local $var$316) + ) + ) + (set_local $var$818 + (i32.and + (i32.rem_u + (i32.shr_u + (get_local $var$168) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$648) + (i32.const 0) + ) + ) + (i32.const -1) + ) + ) + (set_local $var$983 + (i32.eq + (get_local $var$818) + (i32.const 0) + ) + ) + (set_local $var$318 + (i32.add + (get_local $var$316) + (i32.const 4) + ) + ) + (set_local $var$475 + (i32.eq + (get_local $var$318) + (get_local $var$1027) + ) + ) + (set_local $var$780 + (i32.and + (get_local $var$475) + (get_local $var$983) + ) + ) + (block $label$239 + (if_else + (get_local $var$780) + (block $label$240 + (set_local $var$300 + (get_local $var$295) + ) + (set_local $var$601 + (get_local $var$316) + ) + (set_local $var$616 + (get_local $var$614) + ) + ) + (block $label$241 + (set_local $var$611 + (i32.and + (i32.div_u + (i32.shr_u + (get_local $var$168) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$648) + (i32.const 0) + ) + ) + (i32.const -1) + ) + ) + (set_local $var$388 + (i32.and + (get_local $var$611) + (i32.const 1) + ) + ) + (set_local $var$985 + (i32.eq + (get_local $var$388) + (i32.const 0) + ) + ) + (set_local $var$1036 + (if_else + (get_local $var$985) + (f64.const 9007199254740992) + (f64.const 9007199254740994) + ) + ) + (set_local $var$612 + (i32.and + (i32.div_s + (get_local $var$648) + (i32.const 2) + ) + (i32.const -1) + ) + ) + (set_local $var$480 + (i32.lt_u + (i32.shr_u + (get_local $var$818) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$612) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$480) + (set_local $var$1055 + (f64.const 0.5) + ) + (block $label$242 + (set_local $var$482 + (i32.eq + (get_local $var$818) + (get_local $var$612) + ) + ) + (set_local $var$781 + (i32.and + (get_local $var$475) + (get_local $var$482) + ) + ) + (set_local $var$1037 + (if_else + (get_local $var$781) + (f64.const 1) + (f64.const 1.5) + ) + ) + (set_local $var$1055 + (get_local $var$1037) + ) + ) + ) + (set_local $var$986 + (i32.eq + (get_local $var$806) + (i32.const 0) + ) + ) + (block $label$243 + (if_else + (get_local $var$986) + (block $label$244 + (set_local $var$1054 + (get_local $var$1036) + ) + (set_local $var$1056 + (get_local $var$1055) + ) + ) + (block $label$245 + (set_local $var$169 + (i32.load8_s align=1 + (get_local $var$812) + ) + ) + (set_local $var$484 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $var$169) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 45) + ) + ) + (if + (i32.eq + (get_local $var$484) + (i32.const 0) + ) + (block $label$246 + (set_local $var$1054 + (get_local $var$1036) + ) + (set_local $var$1056 + (get_local $var$1055) + ) + (br $label$243) + ) + ) + (set_local $var$1049 + (f64.neg + (get_local $var$1036) + ) + ) + (set_local $var$1050 + (f64.neg + (get_local $var$1055) + ) + ) + (set_local $var$1054 + (get_local $var$1049) + ) + (set_local $var$1056 + (get_local $var$1050) + ) + ) + ) + ) + (set_local $var$923 + (i32.sub + (get_local $var$168) + (get_local $var$818) + ) + ) + (i32.store align=4 + (get_local $var$316) + (get_local $var$923) + ) + (set_local $var$1039 + (f64.add + (get_local $var$1054) + (get_local $var$1056) + ) + ) + (set_local $var$487 + (f64.ne + (get_local $var$1039) + (get_local $var$1054) + ) + ) + (if + (i32.eq + (get_local $var$487) + (i32.const 0) + ) + (block $label$247 + (set_local $var$300 + (get_local $var$295) + ) + (set_local $var$601 + (get_local $var$316) + ) + (set_local $var$616 + (get_local $var$614) + ) + (br $label$239) + ) + ) + (set_local $var$343 + (i32.add + (get_local $var$923) + (get_local $var$648) + ) + ) + (i32.store align=4 + (get_local $var$316) + (get_local $var$343) + ) + (set_local $var$489 + (i32.gt_u + (i32.shr_u + (get_local $var$343) + (i32.const 0) + ) + (i32.const 999999999) + ) + ) + (if_else + (get_local $var$489) + (block $label$248 + (set_local $var$298 + (get_local $var$295) + ) + (set_local $var$600 + (get_local $var$316) + ) + (loop $label$249 $label$250 + (block $label$251 + (set_local $var$701 + (i32.add + (get_local $var$600) + (i32.const -4) + ) + ) + (i32.store align=4 + (get_local $var$600) + (i32.const 0) + ) + (set_local $var$491 + (i32.lt_u + (i32.shr_u + (get_local $var$701) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$298) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$491) + (block $label$252 + (set_local $var$702 + (i32.add + (get_local $var$298) + (i32.const -4) + ) + ) + (i32.store align=4 + (get_local $var$702) + (i32.const 0) + ) + (set_local $var$299 + (get_local $var$702) + ) + ) + (set_local $var$299 + (get_local $var$298) + ) + ) + (set_local $var$170 + (i32.load align=4 + (get_local $var$701) + ) + ) + (set_local $var$661 + (i32.add + (get_local $var$170) + (i32.const 1) + ) + ) + (i32.store align=4 + (get_local $var$701) + (get_local $var$661) + ) + (set_local $var$490 + (i32.gt_u + (i32.shr_u + (get_local $var$661) + (i32.const 0) + ) + (i32.const 999999999) + ) + ) + (if_else + (get_local $var$490) + (block $label$253 + (set_local $var$298 + (get_local $var$299) + ) + (set_local $var$600 + (get_local $var$701) + ) + ) + (block $label$254 + (set_local $var$297 + (get_local $var$299) + ) + (set_local $var$599 + (get_local $var$701) + ) + (br $label$249) + ) + ) + (br $label$250) + ) + ) + ) + (block $label$255 + (set_local $var$297 + (get_local $var$295) + ) + (set_local $var$599 + (get_local $var$316) + ) + ) + ) + (set_local $var$876 + (get_local $var$297) + ) + (set_local $var$898 + (i32.sub + (get_local $var$874) + (get_local $var$876) + ) + ) + (set_local $var$853 + (i32.shr_s + (get_local $var$898) + (i32.const 2) + ) + ) + (set_local $var$765 + (i32.mul + (get_local $var$853) + (i32.const 9) + ) + ) + (set_local $var$171 + (i32.load align=4 + (get_local $var$297) + ) + ) + (set_local $var$493 + (i32.lt_u + (i32.shr_u + (get_local $var$171) + (i32.const 0) + ) + (i32.const 10) + ) + ) + (if_else + (get_local $var$493) + (block $label$256 + (set_local $var$300 + (get_local $var$297) + ) + (set_local $var$601 + (get_local $var$599) + ) + (set_local $var$616 + (get_local $var$765) + ) + (br $label$239) + ) + (block $label$257 + (set_local $var$615 + (get_local $var$765) + ) + (set_local $var$653 + (i32.const 10) + ) + ) + ) + (loop $label$258 $label$259 + (block $label$260 + (set_local $var$766 + (i32.mul + (get_local $var$653) + (i32.const 10) + ) + ) + (set_local $var$662 + (i32.add + (get_local $var$615) + (i32.const 1) + ) + ) + (set_local $var$494 + (i32.lt_u + (i32.shr_u + (get_local $var$171) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$766) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$494) + (block $label$261 + (set_local $var$300 + (get_local $var$297) + ) + (set_local $var$601 + (get_local $var$599) + ) + (set_local $var$616 + (get_local $var$662) + ) + (br $label$258) + ) + (block $label$262 + (set_local $var$615 + (get_local $var$662) + ) + (set_local $var$653 + (get_local $var$766) + ) + ) + ) + (br $label$259) + ) + ) + ) + ) + ) + (set_local $var$321 + (i32.add + (get_local $var$601) + (i32.const 4) + ) + ) + (set_local $var$497 + (i32.gt_u + (i32.shr_u + (get_local $var$1027) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$321) + (i32.const 0) + ) + ) + ) + (set_local $var$322 + (if_else + (get_local $var$497) + (get_local $var$321) + (get_local $var$1027) + ) + ) + (set_local $var$301 + (get_local $var$300) + ) + (set_local $var$617 + (get_local $var$616) + ) + (set_local $var$1033 + (get_local $var$322) + ) + ) + (block $label$263 + (set_local $var$301 + (get_local $var$295) + ) + (set_local $var$617 + (get_local $var$614) + ) + (set_local $var$1033 + (get_local $var$1027) + ) + ) + ) + (set_local $var$930 + (i32.sub + (i32.const 0) + (get_local $var$617) + ) + ) + (set_local $var$1031 + (get_local $var$1033) + ) + (loop $label$264 $label$265 + (block $label$266 + (set_local $var$498 + (i32.gt_u + (i32.shr_u + (get_local $var$1031) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$301) + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (get_local $var$498) + (i32.const 0) + ) + (block $label$267 + (set_local $var$499 + (i32.const 0) + ) + (set_local $var$1032 + (get_local $var$1031) + ) + (br $label$264) + ) + ) + (set_local $var$413 + (i32.add + (get_local $var$1031) + (i32.const -4) + ) + ) + (set_local $var$172 + (i32.load align=4 + (get_local $var$413) + ) + ) + (set_local $var$752 + (i32.eq + (get_local $var$172) + (i32.const 0) + ) + ) + (if_else + (get_local $var$752) + (set_local $var$1031 + (get_local $var$413) + ) + (block $label$268 + (set_local $var$499 + (i32.const 1) + ) + (set_local $var$1032 + (get_local $var$1031) + ) + (br $label$264) + ) + ) + (br $label$265) + ) + ) + (block $label$269 + (if_else + (get_local $var$471) + (block $label$270 + (set_local $var$173 + (i32.and + (get_local $var$979) + (i32.const 1) + ) + ) + (set_local $var$663 + (i32.xor + (get_local $var$173) + (i32.const 1) + ) + ) + (set_local $var$10 + (i32.add + (get_local $var$663) + (get_local $var$9) + ) + ) + (set_local $var$501 + (i32.gt_s + (get_local $var$10) + (get_local $var$617) + ) + ) + (set_local $var$502 + (i32.gt_s + (get_local $var$617) + (i32.const -5) + ) + ) + (set_local $var$778 + (i32.and + (get_local $var$501) + (get_local $var$502) + ) + ) + (if_else + (get_local $var$778) + (block $label$271 + (set_local $var$606 + (i32.add + (get_local $var$937) + (i32.const -1) + ) + ) + (set_local $var$345 + (i32.add + (get_local $var$10) + (i32.const -1) + ) + ) + (set_local $var$924 + (i32.sub + (get_local $var$345) + (get_local $var$617) + ) + ) + (set_local $var$799 + (get_local $var$924) + ) + (set_local $var$939 + (get_local $var$606) + ) + ) + (block $label$272 + (set_local $var$925 + (i32.add + (get_local $var$937) + (i32.const -2) + ) + ) + (set_local $var$607 + (i32.add + (get_local $var$10) + (i32.const -1) + ) + ) + (set_local $var$799 + (get_local $var$607) + ) + (set_local $var$939 + (get_local $var$925) + ) + ) + ) + (set_local $var$389 + (i32.and + (get_local $var$638) + (i32.const 8) + ) + ) + (set_local $var$991 + (i32.eq + (get_local $var$389) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$991) + (i32.const 0) + ) + (block $label$273 + (set_local $var$390 + (get_local $var$389) + ) + (set_local $var$800 + (get_local $var$799) + ) + (set_local $var$940 + (get_local $var$939) + ) + (br $label$269) + ) + ) + (block $label$274 + (if_else + (get_local $var$499) + (block $label$275 + (set_local $var$416 + (i32.add + (get_local $var$1032) + (i32.const -4) + ) + ) + (set_local $var$174 + (i32.load align=4 + (get_local $var$416) + ) + ) + (set_local $var$992 + (i32.eq + (get_local $var$174) + (i32.const 0) + ) + ) + (if + (get_local $var$992) + (block $label$276 + (set_local $var$737 + (i32.const 9) + ) + (br $label$274) + ) + ) + (set_local $var$819 + (i32.and + (i32.rem_u + (i32.shr_u + (get_local $var$174) + (i32.const 0) + ) + (i32.const 10) + ) + (i32.const -1) + ) + ) + (set_local $var$506 + (i32.eq + (get_local $var$819) + (i32.const 0) + ) + ) + (if_else + (get_local $var$506) + (block $label$277 + (set_local $var$655 + (i32.const 10) + ) + (set_local $var$736 + (i32.const 0) + ) + ) + (block $label$278 + (set_local $var$737 + (i32.const 0) + ) + (br $label$274) + ) + ) + (loop $label$279 $label$280 + (block $label$281 + (set_local $var$767 + (i32.mul + (get_local $var$655) + (i32.const 10) + ) + ) + (set_local $var$665 + (i32.add + (get_local $var$736) + (i32.const 1) + ) + ) + (set_local $var$820 + (i32.and + (i32.rem_u + (i32.shr_u + (get_local $var$174) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$767) + (i32.const 0) + ) + ) + (i32.const -1) + ) + ) + (set_local $var$507 + (i32.eq + (get_local $var$820) + (i32.const 0) + ) + ) + (if_else + (get_local $var$507) + (block $label$282 + (set_local $var$655 + (get_local $var$767) + ) + (set_local $var$736 + (get_local $var$665) + ) + ) + (block $label$283 + (set_local $var$737 + (get_local $var$665) + ) + (br $label$279) + ) + ) + (br $label$280) + ) + ) + ) + (set_local $var$737 + (i32.const 9) + ) + ) + ) + (set_local $var$788 + (i32.or + (get_local $var$939) + (i32.const 32) + ) + ) + (set_local $var$510 + (i32.eq + (get_local $var$788) + (i32.const 102) + ) + ) + (set_local $var$863 + (get_local $var$1032) + ) + (set_local $var$901 + (i32.sub + (get_local $var$863) + (get_local $var$874) + ) + ) + (set_local $var$854 + (i32.shr_s + (get_local $var$901) + (i32.const 2) + ) + ) + (set_local $var$175 + (i32.mul + (get_local $var$854) + (i32.const 9) + ) + ) + (set_local $var$768 + (i32.add + (get_local $var$175) + (i32.const -9) + ) + ) + (if_else + (get_local $var$510) + (block $label$284 + (set_local $var$926 + (i32.sub + (get_local $var$768) + (get_local $var$737) + ) + ) + (set_local $var$511 + (i32.lt_s + (get_local $var$926) + (i32.const 0) + ) + ) + (set_local $var$19 + (if_else + (get_local $var$511) + (i32.const 0) + (get_local $var$926) + ) + ) + (set_local $var$512 + (i32.lt_s + (get_local $var$799) + (get_local $var$19) + ) + ) + (set_local $var$797 + (if_else + (get_local $var$512) + (get_local $var$799) + (get_local $var$19) + ) + ) + (set_local $var$390 + (i32.const 0) + ) + (set_local $var$800 + (get_local $var$797) + ) + (set_local $var$940 + (get_local $var$939) + ) + (br $label$269) + ) + (block $label$285 + (set_local $var$346 + (i32.add + (get_local $var$768) + (get_local $var$617) + ) + ) + (set_local $var$928 + (i32.sub + (get_local $var$346) + (get_local $var$737) + ) + ) + (set_local $var$513 + (i32.lt_s + (get_local $var$928) + (i32.const 0) + ) + ) + (set_local $var$20 + (if_else + (get_local $var$513) + (i32.const 0) + (get_local $var$928) + ) + ) + (set_local $var$514 + (i32.lt_s + (get_local $var$799) + (get_local $var$20) + ) + ) + (set_local $var$798 + (if_else + (get_local $var$514) + (get_local $var$799) + (get_local $var$20) + ) + ) + (set_local $var$390 + (i32.const 0) + ) + (set_local $var$800 + (get_local $var$798) + ) + (set_local $var$940 + (get_local $var$939) + ) + (br $label$269) + ) + ) + ) + (block $label$286 + (set_local $var$18 + (i32.and + (get_local $var$638) + (i32.const 8) + ) + ) + (set_local $var$390 + (get_local $var$18) + ) + (set_local $var$800 + (get_local $var$9) + ) + (set_local $var$940 + (get_local $var$937) + ) + ) + ) + ) + (set_local $var$176 + (i32.or + (get_local $var$800) + (get_local $var$390) + ) + ) + (set_local $var$178 + (i32.ne + (get_local $var$176) + (i32.const 0) + ) + ) + (set_local $var$754 + (i32.and + (get_local $var$178) + (i32.const 1) + ) + ) + (set_local $var$789 + (i32.or + (get_local $var$940) + (i32.const 32) + ) + ) + (set_local $var$516 + (i32.eq + (get_local $var$789) + (i32.const 102) + ) + ) + (if_else + (get_local $var$516) + (block $label$287 + (set_local $var$517 + (i32.gt_s + (get_local $var$617) + (i32.const 0) + ) + ) + (set_local $var$349 + (if_else + (get_local $var$517) + (get_local $var$617) + (i32.const 0) + ) + ) + (set_local $var$623 + (i32.const 0) + ) + (set_local $var$905 + (get_local $var$349) + ) + ) + (block $label$288 + (set_local $var$518 + (i32.lt_s + (get_local $var$617) + (i32.const 0) + ) + ) + (set_local $var$562 + (if_else + (get_local $var$518) + (get_local $var$930) + (get_local $var$617) + ) + ) + (set_local $var$179 + (i32.lt_s + (get_local $var$562) + (i32.const 0) + ) + ) + (set_local $var$180 + (i32.shr_s + (i32.shl + (get_local $var$179) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $var$181 + (call $_fmt_u + (get_local $var$562) + (get_local $var$180) + (get_local $var$400) + ) + ) + (set_local $var$878 + (get_local $var$181) + ) + (set_local $var$902 + (i32.sub + (get_local $var$857) + (get_local $var$878) + ) + ) + (set_local $var$519 + (i32.lt_s + (get_local $var$902) + (i32.const 2) + ) + ) + (if_else + (get_local $var$519) + (block $label$289 + (set_local $var$622 + (get_local $var$181) + ) + (loop $label$290 $label$291 + (block $label$292 + (set_local $var$704 + (i32.add + (get_local $var$622) + (i32.const -1) + ) + ) + (i32.store8 align=1 + (get_local $var$704) + (i32.const 48) + ) + (set_local $var$879 + (get_local $var$704) + ) + (set_local $var$903 + (i32.sub + (get_local $var$857) + (get_local $var$879) + ) + ) + (set_local $var$520 + (i32.lt_s + (get_local $var$903) + (i32.const 2) + ) + ) + (if_else + (get_local $var$520) + (set_local $var$622 + (get_local $var$704) + ) + (block $label$293 + (set_local $var$621 + (get_local $var$704) + ) + (br $label$290) + ) + ) + (br $label$291) + ) + ) + ) + (set_local $var$621 + (get_local $var$181) + ) + ) + (set_local $var$182 + (i32.shr_s + (get_local $var$617) + (i32.const 31) + ) + ) + (set_local $var$183 + (i32.and + (get_local $var$182) + (i32.const 2) + ) + ) + (set_local $var$184 + (i32.add + (get_local $var$183) + (i32.const 43) + ) + ) + (set_local $var$591 + (i32.and + (get_local $var$184) + (i32.const 255) + ) + ) + (set_local $var$705 + (i32.add + (get_local $var$621) + (i32.const -1) + ) + ) + (i32.store8 align=1 + (get_local $var$705) + (get_local $var$591) + ) + (set_local $var$592 + (i32.and + (get_local $var$940) + (i32.const 255) + ) + ) + (set_local $var$706 + (i32.add + (get_local $var$621) + (i32.const -2) + ) + ) + (i32.store8 align=1 + (get_local $var$706) + (get_local $var$592) + ) + (set_local $var$880 + (get_local $var$706) + ) + (set_local $var$904 + (i32.sub + (get_local $var$857) + (get_local $var$880) + ) + ) + (set_local $var$623 + (get_local $var$706) + ) + (set_local $var$905 + (get_local $var$904) + ) + ) + ) + (set_local $var$347 + (i32.add + (get_local $var$806) + (i32.const 1) + ) + ) + (set_local $var$348 + (i32.add + (get_local $var$347) + (get_local $var$800) + ) + ) + (set_local $var$740 + (i32.add + (get_local $var$348) + (get_local $var$754) + ) + ) + (set_local $var$350 + (i32.add + (get_local $var$740) + (get_local $var$905) + ) + ) + (call $_pad + (get_local $var$0) + (i32.const 32) + (get_local $var$1003) + (get_local $var$350) + (get_local $var$638) + ) + (set_local $var$185 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$365 + (i32.and + (get_local $var$185) + (i32.const 32) + ) + ) + (set_local $var$951 + (i32.eq + (get_local $var$365) + (i32.const 0) + ) + ) + (if + (get_local $var$951) + (call $___fwritex + (get_local $var$812) + (get_local $var$806) + (get_local $var$0) + ) + ) + (set_local $var$1016 + (i32.xor + (get_local $var$638) + (i32.const 65536) + ) + ) + (call $_pad + (get_local $var$0) + (i32.const 48) + (get_local $var$1003) + (get_local $var$350) + (get_local $var$1016) + ) + (block $label$294 + (if_else + (get_local $var$516) + (block $label$295 + (set_local $var$522 + (i32.gt_u + (i32.shr_u + (get_local $var$301) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$398) + (i32.const 0) + ) + ) + ) + (set_local $var$815 + (if_else + (get_local $var$522) + (get_local $var$398) + (get_local $var$301) + ) + ) + (set_local $var$602 + (get_local $var$815) + ) + (loop $label$296 $label$297 + (block $label$298 + (set_local $var$186 + (i32.load align=4 + (get_local $var$602) + ) + ) + (set_local $var$187 + (call $_fmt_u + (get_local $var$186) + (i32.const 0) + (get_local $var$325) + ) + ) + (set_local $var$524 + (i32.eq + (get_local $var$602) + (get_local $var$815) + ) + ) + (block $label$299 + (if_else + (get_local $var$524) + (block $label$300 + (set_local $var$527 + (i32.eq + (get_local $var$187) + (get_local $var$325) + ) + ) + (if + (i32.eq + (get_local $var$527) + (i32.const 0) + ) + (block $label$301 + (set_local $var$831 + (get_local $var$187) + ) + (br $label$299) + ) + ) + (i32.store8 align=1 + (get_local $var$708) + (i32.const 48) + ) + (set_local $var$831 + (get_local $var$708) + ) + ) + (block $label$302 + (set_local $var$525 + (i32.gt_u + (i32.shr_u + (get_local $var$187) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$422) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$525) + (set_local $var$830 + (get_local $var$187) + ) + (block $label$303 + (set_local $var$831 + (get_local $var$187) + ) + (br $label$299) + ) + ) + (loop $label$304 $label$305 + (block $label$306 + (set_local $var$707 + (i32.add + (get_local $var$830) + (i32.const -1) + ) + ) + (i32.store8 align=1 + (get_local $var$707) + (i32.const 48) + ) + (set_local $var$526 + (i32.gt_u + (i32.shr_u + (get_local $var$707) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$422) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$526) + (set_local $var$830 + (get_local $var$707) + ) + (block $label$307 + (set_local $var$831 + (get_local $var$707) + ) + (br $label$304) + ) + ) + (br $label$305) + ) + ) + ) + ) + ) + (set_local $var$189 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$366 + (i32.and + (get_local $var$189) + (i32.const 32) + ) + ) + (set_local $var$952 + (i32.eq + (get_local $var$366) + (i32.const 0) + ) + ) + (if + (get_local $var$952) + (block $label$308 + (set_local $var$881 + (get_local $var$831) + ) + (set_local $var$906 + (i32.sub + (get_local $var$864) + (get_local $var$881) + ) + ) + (call $___fwritex + (get_local $var$831) + (get_local $var$906) + (get_local $var$0) + ) + ) + ) + (set_local $var$709 + (i32.add + (get_local $var$602) + (i32.const 4) + ) + ) + (set_local $var$523 + (i32.gt_u + (i32.shr_u + (get_local $var$709) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$398) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$523) + (block $label$309 + (set_local $var$710 + (get_local $var$709) + ) + (br $label$296) + ) + (set_local $var$602 + (get_local $var$709) + ) + ) + (br $label$297) + ) + ) + (set_local $var$190 + (i32.eq + (get_local $var$176) + (i32.const 0) + ) + ) + (block $label$310 + (if + (i32.eq + (get_local $var$190) + (i32.const 0) + ) + (block $label$311 + (set_local $var$191 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$367 + (i32.and + (get_local $var$191) + (i32.const 32) + ) + ) + (set_local $var$953 + (i32.eq + (get_local $var$367) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$953) + (i32.const 0) + ) + (br $label$310) + ) + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $var$0) + ) + ) + ) + ) + (set_local $var$528 + (i32.lt_u + (i32.shr_u + (get_local $var$710) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$1032) + (i32.const 0) + ) + ) + ) + (set_local $var$530 + (i32.gt_s + (get_local $var$800) + (i32.const 0) + ) + ) + (set_local $var$192 + (i32.and + (get_local $var$530) + (get_local $var$528) + ) + ) + (if_else + (get_local $var$192) + (block $label$312 + (set_local $var$603 + (get_local $var$710) + ) + (set_local $var$802 + (get_local $var$800) + ) + (loop $label$313 $label$314 + (block $label$315 + (set_local $var$193 + (i32.load align=4 + (get_local $var$603) + ) + ) + (set_local $var$194 + (call $_fmt_u + (get_local $var$193) + (i32.const 0) + (get_local $var$325) + ) + ) + (set_local $var$532 + (i32.gt_u + (i32.shr_u + (get_local $var$194) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$422) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$532) + (block $label$316 + (set_local $var$833 + (get_local $var$194) + ) + (loop $label$317 $label$318 + (block $label$319 + (set_local $var$711 + (i32.add + (get_local $var$833) + (i32.const -1) + ) + ) + (i32.store8 align=1 + (get_local $var$711) + (i32.const 48) + ) + (set_local $var$533 + (i32.gt_u + (i32.shr_u + (get_local $var$711) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$422) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$533) + (set_local $var$833 + (get_local $var$711) + ) + (block $label$320 + (set_local $var$832 + (get_local $var$711) + ) + (br $label$317) + ) + ) + (br $label$318) + ) + ) + ) + (set_local $var$832 + (get_local $var$194) + ) + ) + (set_local $var$195 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$368 + (i32.and + (get_local $var$195) + (i32.const 32) + ) + ) + (set_local $var$954 + (i32.eq + (get_local $var$368) + (i32.const 0) + ) + ) + (if + (get_local $var$954) + (block $label$321 + (set_local $var$534 + (i32.gt_s + (get_local $var$802) + (i32.const 9) + ) + ) + (set_local $var$563 + (if_else + (get_local $var$534) + (i32.const 9) + (get_local $var$802) + ) + ) + (call $___fwritex + (get_local $var$832) + (get_local $var$563) + (get_local $var$0) + ) + ) + ) + (set_local $var$712 + (i32.add + (get_local $var$603) + (i32.const 4) + ) + ) + (set_local $var$931 + (i32.add + (get_local $var$802) + (i32.const -9) + ) + ) + (set_local $var$529 + (i32.lt_u + (i32.shr_u + (get_local $var$712) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$1032) + (i32.const 0) + ) + ) + ) + (set_local $var$531 + (i32.gt_s + (get_local $var$802) + (i32.const 9) + ) + ) + (set_local $var$196 + (i32.and + (get_local $var$531) + (get_local $var$529) + ) + ) + (if_else + (get_local $var$196) + (block $label$322 + (set_local $var$603 + (get_local $var$712) + ) + (set_local $var$802 + (get_local $var$931) + ) + ) + (block $label$323 + (set_local $var$801 + (get_local $var$931) + ) + (br $label$313) + ) + ) + (br $label$314) + ) + ) + ) + (set_local $var$801 + (get_local $var$800) + ) + ) + (set_local $var$352 + (i32.add + (get_local $var$801) + (i32.const 9) + ) + ) + (call $_pad + (get_local $var$0) + (i32.const 48) + (get_local $var$352) + (i32.const 9) + (i32.const 0) + ) + ) + (block $label$324 + (set_local $var$326 + (i32.add + (get_local $var$301) + (i32.const 4) + ) + ) + (set_local $var$1030 + (if_else + (get_local $var$499) + (get_local $var$1032) + (get_local $var$326) + ) + ) + (set_local $var$536 + (i32.gt_s + (get_local $var$800) + (i32.const -1) + ) + ) + (if_else + (get_local $var$536) + (block $label$325 + (set_local $var$998 + (i32.eq + (get_local $var$390) + (i32.const 0) + ) + ) + (set_local $var$604 + (get_local $var$301) + ) + (set_local $var$804 + (get_local $var$800) + ) + (loop $label$326 $label$327 + (block $label$328 + (set_local $var$197 + (i32.load align=4 + (get_local $var$604) + ) + ) + (set_local $var$198 + (call $_fmt_u + (get_local $var$197) + (i32.const 0) + (get_local $var$325) + ) + ) + (set_local $var$539 + (i32.eq + (get_local $var$198) + (get_local $var$325) + ) + ) + (if_else + (get_local $var$539) + (block $label$329 + (i32.store8 align=1 + (get_local $var$708) + (i32.const 48) + ) + (set_local $var$834 + (get_local $var$708) + ) + ) + (set_local $var$834 + (get_local $var$198) + ) + ) + (set_local $var$540 + (i32.eq + (get_local $var$604) + (get_local $var$301) + ) + ) + (block $label$330 + (if_else + (get_local $var$540) + (block $label$331 + (set_local $var$714 + (i32.add + (get_local $var$834) + (i32.const 1) + ) + ) + (set_local $var$200 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$369 + (i32.and + (get_local $var$200) + (i32.const 32) + ) + ) + (set_local $var$955 + (i32.eq + (get_local $var$369) + (i32.const 0) + ) + ) + (if + (get_local $var$955) + (call $___fwritex + (get_local $var$834) + (i32.const 1) + (get_local $var$0) + ) + ) + (set_local $var$543 + (i32.lt_s + (get_local $var$804) + (i32.const 1) + ) + ) + (set_local $var$782 + (i32.and + (get_local $var$998) + (get_local $var$543) + ) + ) + (if + (get_local $var$782) + (block $label$332 + (set_local $var$836 + (get_local $var$714) + ) + (br $label$330) + ) + ) + (set_local $var$201 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$370 + (i32.and + (get_local $var$201) + (i32.const 32) + ) + ) + (set_local $var$956 + (i32.eq + (get_local $var$370) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$956) + (i32.const 0) + ) + (block $label$333 + (set_local $var$836 + (get_local $var$714) + ) + (br $label$330) + ) + ) + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $var$0) + ) + (set_local $var$836 + (get_local $var$714) + ) + ) + (block $label$334 + (set_local $var$541 + (i32.gt_u + (i32.shr_u + (get_local $var$834) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$422) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$541) + (set_local $var$835 + (get_local $var$834) + ) + (block $label$335 + (set_local $var$836 + (get_local $var$834) + ) + (br $label$330) + ) + ) + (loop $label$336 $label$337 + (block $label$338 + (set_local $var$713 + (i32.add + (get_local $var$835) + (i32.const -1) + ) + ) + (i32.store8 align=1 + (get_local $var$713) + (i32.const 48) + ) + (set_local $var$542 + (i32.gt_u + (i32.shr_u + (get_local $var$713) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$422) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$542) + (set_local $var$835 + (get_local $var$713) + ) + (block $label$339 + (set_local $var$836 + (get_local $var$713) + ) + (br $label$336) + ) + ) + (br $label$337) + ) + ) + ) + ) + ) + (set_local $var$882 + (get_local $var$836) + ) + (set_local $var$907 + (i32.sub + (get_local $var$864) + (get_local $var$882) + ) + ) + (set_local $var$202 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$371 + (i32.and + (get_local $var$202) + (i32.const 32) + ) + ) + (set_local $var$957 + (i32.eq + (get_local $var$371) + (i32.const 0) + ) + ) + (if + (get_local $var$957) + (block $label$340 + (set_local $var$544 + (i32.gt_s + (get_local $var$804) + (get_local $var$907) + ) + ) + (set_local $var$564 + (if_else + (get_local $var$544) + (get_local $var$907) + (get_local $var$804) + ) + ) + (call $___fwritex + (get_local $var$836) + (get_local $var$564) + (get_local $var$0) + ) + ) + ) + (set_local $var$933 + (i32.sub + (get_local $var$804) + (get_local $var$907) + ) + ) + (set_local $var$715 + (i32.add + (get_local $var$604) + (i32.const 4) + ) + ) + (set_local $var$535 + (i32.lt_u + (i32.shr_u + (get_local $var$715) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$1030) + (i32.const 0) + ) + ) + ) + (set_local $var$537 + (i32.gt_s + (get_local $var$933) + (i32.const -1) + ) + ) + (set_local $var$203 + (i32.and + (get_local $var$535) + (get_local $var$537) + ) + ) + (if_else + (get_local $var$203) + (block $label$341 + (set_local $var$604 + (get_local $var$715) + ) + (set_local $var$804 + (get_local $var$933) + ) + ) + (block $label$342 + (set_local $var$803 + (get_local $var$933) + ) + (br $label$326) + ) + ) + (br $label$327) + ) + ) + ) + (set_local $var$803 + (get_local $var$800) + ) + ) + (set_local $var$353 + (i32.add + (get_local $var$803) + (i32.const 18) + ) + ) + (call $_pad + (get_local $var$0) + (i32.const 48) + (get_local $var$353) + (i32.const 18) + (i32.const 0) + ) + (set_local $var$204 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$372 + (i32.and + (get_local $var$204) + (i32.const 32) + ) + ) + (set_local $var$958 + (i32.eq + (get_local $var$372) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$958) + (i32.const 0) + ) + (br $label$294) + ) + (set_local $var$883 + (get_local $var$623) + ) + (set_local $var$908 + (i32.sub + (get_local $var$857) + (get_local $var$883) + ) + ) + (call $___fwritex + (get_local $var$623) + (get_local $var$908) + (get_local $var$0) + ) + ) + ) + ) + (set_local $var$1017 + (i32.xor + (get_local $var$638) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $var$0) + (i32.const 32) + (get_local $var$1003) + (get_local $var$350) + (get_local $var$1017) + ) + (set_local $var$545 + (i32.lt_s + (get_local $var$350) + (get_local $var$1003) + ) + ) + (set_local $var$1006 + (if_else + (get_local $var$545) + (get_local $var$1003) + (get_local $var$350) + ) + ) + (set_local $var$822 + (get_local $var$1006) + ) + ) + (block $label$343 + (set_local $var$387 + (i32.and + (get_local $var$937) + (i32.const 32) + ) + ) + (set_local $var$982 + (i32.ne + (get_local $var$387) + (i32.const 0) + ) + ) + (set_local $var$552 + (if_else + (get_local $var$982) + (i32.const 4127) + (i32.const 4131) + ) + ) + (set_local $var$478 + (i32.or + (f64.ne + (get_local $var$1064) + (get_local $var$1064) + ) + (f64.ne + (f64.const 0) + (f64.const 0) + ) + ) + ) + (set_local $var$560 + (if_else + (get_local $var$982) + (i32.const 4135) + (i32.const 4139) + ) + ) + (set_local $var$808 + (if_else + (get_local $var$478) + (i32.const 0) + (get_local $var$806) + ) + ) + (set_local $var$829 + (if_else + (get_local $var$478) + (get_local $var$560) + (get_local $var$552) + ) + ) + (set_local $var$305 + (i32.add + (get_local $var$808) + (i32.const 3) + ) + ) + (call $_pad + (get_local $var$0) + (i32.const 32) + (get_local $var$1003) + (get_local $var$305) + (get_local $var$378) + ) + (set_local $var$125 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$360 + (i32.and + (get_local $var$125) + (i32.const 32) + ) + ) + (set_local $var$946 + (i32.eq + (get_local $var$360) + (i32.const 0) + ) + ) + (if_else + (get_local $var$946) + (block $label$344 + (call $___fwritex + (get_local $var$812) + (get_local $var$808) + (get_local $var$0) + ) + (set_local $var$14 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$126 + (get_local $var$14) + ) + ) + (set_local $var$126 + (get_local $var$125) + ) + ) + (set_local $var$361 + (i32.and + (get_local $var$126) + (i32.const 32) + ) + ) + (set_local $var$947 + (i32.eq + (get_local $var$361) + (i32.const 0) + ) + ) + (if + (get_local $var$947) + (call $___fwritex + (get_local $var$829) + (i32.const 3) + (get_local $var$0) + ) + ) + (set_local $var$1011 + (i32.xor + (get_local $var$638) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $var$0) + (i32.const 32) + (get_local $var$1003) + (get_local $var$305) + (get_local $var$1011) + ) + (set_local $var$505 + (i32.lt_s + (get_local $var$305) + (get_local $var$1003) + ) + ) + (set_local $var$561 + (if_else + (get_local $var$505) + (get_local $var$1003) + (get_local $var$305) + ) + ) + (set_local $var$822 + (get_local $var$561) + ) + ) + ) + ) + (set_local $var$549 + (get_local $var$550) + ) + (set_local $var$685 + (get_local $var$679) + ) + (set_local $var$738 + (get_local $var$822) + ) + (set_local $var$743 + (get_local $var$748) + ) + (br $label$2) + (br $label$111) + ) + ) + (case $label$110 + (block $label$345 + (set_local $var$293 + (get_local $var$685) + ) + (set_local $var$641 + (get_local $var$638) + ) + (set_local $var$796 + (get_local $var$790) + ) + (set_local $var$809 + (i32.const 0) + ) + (set_local $var$814 + (i32.const 4091) + ) + (set_local $var$1024 + (get_local $var$309) + ) + ) + ) + ) + ) + (block $label$346 + (if_else + (i32.eq + (get_local $var$1034) + (i32.const 64) + ) + (block $label$347 + (set_local $var$1034 + (i32.const 0) + ) + (set_local $var$279 + (get_local $var$392) + ) + (set_local $var$280 + (get_local $var$279) + ) + (set_local $var$281 + (i32.load align=4 + (get_local $var$280) + ) + ) + (set_local $var$282 + (i32.add + (get_local $var$279) + (i32.const 4) + ) + ) + (set_local $var$283 + (get_local $var$282) + ) + (set_local $var$284 + (i32.load align=4 + (get_local $var$283) + ) + ) + (set_local $var$379 + (i32.and + (get_local $var$938) + (i32.const 32) + ) + ) + (set_local $var$285 + (i32.eq + (get_local $var$281) + (i32.const 0) + ) + ) + (set_local $var$286 + (i32.eq + (get_local $var$284) + (i32.const 0) + ) + ) + (set_local $var$287 + (i32.and + (get_local $var$285) + (get_local $var$286) + ) + ) + (if_else + (get_local $var$287) + (block $label$348 + (set_local $var$289 + (get_local $var$309) + ) + (set_local $var$640 + (get_local $var$639) + ) + (set_local $var$792 + (get_local $var$791) + ) + (set_local $var$807 + (i32.const 0) + ) + (set_local $var$813 + (i32.const 4091) + ) + (set_local $var$1034 + (i32.const 77) + ) + ) + (block $label$349 + (set_local $var$25 + (get_local $var$284) + ) + (set_local $var$288 + (get_local $var$281) + ) + (set_local $var$827 + (get_local $var$309) + ) + (loop $label$350 $label$351 + (block $label$352 + (set_local $var$658 + (i32.and + (get_local $var$288) + (i32.const 15) + ) + ) + (set_local $var$399 + (i32.add + (i32.const 4075) + (get_local $var$658) + ) + ) + (set_local $var$24 + (i32.load8_s align=1 + (get_local $var$399) + ) + ) + (set_local $var$567 + (i32.and + (get_local $var$24) + (i32.const 255) + ) + ) + (set_local $var$783 + (i32.or + (get_local $var$567) + (get_local $var$379) + ) + ) + (set_local $var$570 + (i32.and + (get_local $var$783) + (i32.const 255) + ) + ) + (set_local $var$669 + (i32.add + (get_local $var$827) + (i32.const -1) + ) + ) + (i32.store8 align=1 + (get_local $var$669) + (get_local $var$570) + ) + (set_local $var$26 + (call $_bitshift64Lshr + (get_local $var$288) + (get_local $var$25) + (i32.const 4) + ) + ) + (set_local $var$27 + (i32.load align=4 + (i32.const 168) + ) + ) + (set_local $var$28 + (i32.eq + (get_local $var$26) + (i32.const 0) + ) + ) + (set_local $var$29 + (i32.eq + (get_local $var$27) + (i32.const 0) + ) + ) + (set_local $var$30 + (i32.and + (get_local $var$28) + (get_local $var$29) + ) + ) + (if_else + (get_local $var$30) + (block $label$353 + (set_local $var$670 + (get_local $var$669) + ) + (br $label$350) + ) + (block $label$354 + (set_local $var$25 + (get_local $var$27) + ) + (set_local $var$288 + (get_local $var$26) + ) + (set_local $var$827 + (get_local $var$669) + ) + ) + ) + (br $label$351) + ) + ) + (set_local $var$31 + (get_local $var$392) + ) + (set_local $var$32 + (get_local $var$31) + ) + (set_local $var$33 + (i32.load align=4 + (get_local $var$32) + ) + ) + (set_local $var$35 + (i32.add + (get_local $var$31) + (i32.const 4) + ) + ) + (set_local $var$36 + (get_local $var$35) + ) + (set_local $var$37 + (i32.load align=4 + (get_local $var$36) + ) + ) + (set_local $var$38 + (i32.eq + (get_local $var$33) + (i32.const 0) + ) + ) + (set_local $var$39 + (i32.eq + (get_local $var$37) + (i32.const 0) + ) + ) + (set_local $var$40 + (i32.and + (get_local $var$38) + (get_local $var$39) + ) + ) + (set_local $var$380 + (i32.and + (get_local $var$639) + (i32.const 8) + ) + ) + (set_local $var$970 + (i32.eq + (get_local $var$380) + (i32.const 0) + ) + ) + (set_local $var$776 + (i32.or + (get_local $var$970) + (get_local $var$40) + ) + ) + (if_else + (get_local $var$776) + (block $label$355 + (set_local $var$289 + (get_local $var$670) + ) + (set_local $var$640 + (get_local $var$639) + ) + (set_local $var$792 + (get_local $var$791) + ) + (set_local $var$807 + (i32.const 0) + ) + (set_local $var$813 + (i32.const 4091) + ) + (set_local $var$1034 + (i32.const 77) + ) + ) + (block $label$356 + (set_local $var$840 + (i32.shr_s + (get_local $var$938) + (i32.const 4) + ) + ) + (set_local $var$311 + (i32.add + (i32.const 4091) + (get_local $var$840) + ) + ) + (set_local $var$289 + (get_local $var$670) + ) + (set_local $var$640 + (get_local $var$639) + ) + (set_local $var$792 + (get_local $var$791) + ) + (set_local $var$807 + (i32.const 2) + ) + (set_local $var$813 + (get_local $var$311) + ) + (set_local $var$1034 + (i32.const 77) + ) + ) + ) + ) + ) + ) + (if_else + (i32.eq + (get_local $var$1034) + (i32.const 76) + ) + (block $label$357 + (set_local $var$1034 + (i32.const 0) + ) + (set_local $var$79 + (call $_fmt_u + (get_local $var$76) + (get_local $var$77) + (get_local $var$309) + ) + ) + (set_local $var$289 + (get_local $var$79) + ) + (set_local $var$640 + (get_local $var$638) + ) + (set_local $var$792 + (get_local $var$790) + ) + (set_local $var$807 + (get_local $var$805) + ) + (set_local $var$813 + (get_local $var$810) + ) + (set_local $var$1034 + (i32.const 77) + ) + ) + (if_else + (i32.eq + (get_local $var$1034) + (i32.const 82) + ) + (block $label$358 + (set_local $var$1034 + (i32.const 0) + ) + (set_local $var$426 + (call $_memchr + (get_local $var$290) + (i32.const 0) + (get_local $var$790) + ) + ) + (set_local $var$981 + (i32.eq + (get_local $var$426) + (i32.const 0) + ) + ) + (set_local $var$861 + (get_local $var$426) + ) + (set_local $var$875 + (get_local $var$290) + ) + (set_local $var$897 + (i32.sub + (get_local $var$861) + (get_local $var$875) + ) + ) + (set_local $var$317 + (i32.add + (get_local $var$290) + (get_local $var$790) + ) + ) + (set_local $var$1021 + (if_else + (get_local $var$981) + (get_local $var$317) + (get_local $var$426) + ) + ) + (set_local $var$794 + (if_else + (get_local $var$981) + (get_local $var$790) + (get_local $var$897) + ) + ) + (set_local $var$293 + (get_local $var$290) + ) + (set_local $var$641 + (get_local $var$378) + ) + (set_local $var$796 + (get_local $var$794) + ) + (set_local $var$809 + (i32.const 0) + ) + (set_local $var$814 + (i32.const 4091) + ) + (set_local $var$1024 + (get_local $var$1021) + ) + ) + (if + (i32.eq + (get_local $var$1034) + (i32.const 86) + ) + (block $label$359 + (set_local $var$1034 + (i32.const 0) + ) + (set_local $var$107 + (i32.load align=4 + (get_local $var$392) + ) + ) + (set_local $var$644 + (i32.const 0) + ) + (set_local $var$741 + (i32.const 0) + ) + (set_local $var$1008 + (get_local $var$107) + ) + (loop $label$360 $label$361 + (block $label$362 + (set_local $var$108 + (i32.load align=4 + (get_local $var$1008) + ) + ) + (set_local $var$984 + (i32.eq + (get_local $var$108) + (i32.const 0) + ) + ) + (if + (get_local $var$984) + (block $label$363 + (set_local $var$642 + (get_local $var$644) + ) + (set_local $var$742 + (get_local $var$741) + ) + (br $label$360) + ) + ) + (set_local $var$427 + (call $_wctomb + (get_local $var$755) + (get_local $var$108) + ) + ) + (set_local $var$479 + (i32.lt_s + (get_local $var$427) + (i32.const 0) + ) + ) + (set_local $var$922 + (i32.sub + (get_local $var$795) + (get_local $var$644) + ) + ) + (set_local $var$481 + (i32.gt_u + (i32.shr_u + (get_local $var$427) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$922) + (i32.const 0) + ) + ) + ) + (set_local $var$777 + (i32.or + (get_local $var$479) + (get_local $var$481) + ) + ) + (if + (get_local $var$777) + (block $label$364 + (set_local $var$642 + (get_local $var$644) + ) + (set_local $var$742 + (get_local $var$427) + ) + (br $label$360) + ) + ) + (set_local $var$699 + (i32.add + (get_local $var$1008) + (i32.const 4) + ) + ) + (set_local $var$341 + (i32.add + (get_local $var$427) + (get_local $var$644) + ) + ) + (set_local $var$476 + (i32.gt_u + (i32.shr_u + (get_local $var$795) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$341) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$476) + (block $label$365 + (set_local $var$644 + (get_local $var$341) + ) + (set_local $var$741 + (get_local $var$427) + ) + (set_local $var$1008 + (get_local $var$699) + ) + ) + (block $label$366 + (set_local $var$642 + (get_local $var$341) + ) + (set_local $var$742 + (get_local $var$427) + ) + (br $label$360) + ) + ) + (br $label$361) + ) + ) + (set_local $var$483 + (i32.lt_s + (get_local $var$742) + (i32.const 0) + ) + ) + (if + (get_local $var$483) + (block $label$367 + (set_local $var$821 + (i32.const -1) + ) + (br $label$1) + ) + ) + (call $_pad + (get_local $var$0) + (i32.const 32) + (get_local $var$1003) + (get_local $var$642) + (get_local $var$638) + ) + (set_local $var$486 + (i32.eq + (get_local $var$642) + (i32.const 0) + ) + ) + (if_else + (get_local $var$486) + (block $label$368 + (set_local $var$643 + (i32.const 0) + ) + (set_local $var$1034 + (i32.const 98) + ) + ) + (block $label$369 + (set_local $var$109 + (i32.load align=4 + (get_local $var$392) + ) + ) + (set_local $var$649 + (i32.const 0) + ) + (set_local $var$1009 + (get_local $var$109) + ) + (loop $label$370 $label$371 + (block $label$372 + (set_local $var$110 + (i32.load align=4 + (get_local $var$1009) + ) + ) + (set_local $var$987 + (i32.eq + (get_local $var$110) + (i32.const 0) + ) + ) + (if + (get_local $var$987) + (block $label$373 + (set_local $var$643 + (get_local $var$642) + ) + (set_local $var$1034 + (i32.const 98) + ) + (br $label$346) + ) + ) + (set_local $var$700 + (i32.add + (get_local $var$1009) + (i32.const 4) + ) + ) + (set_local $var$428 + (call $_wctomb + (get_local $var$755) + (get_local $var$110) + ) + ) + (set_local $var$342 + (i32.add + (get_local $var$428) + (get_local $var$649) + ) + ) + (set_local $var$488 + (i32.gt_s + (get_local $var$342) + (get_local $var$642) + ) + ) + (if + (get_local $var$488) + (block $label$374 + (set_local $var$643 + (get_local $var$642) + ) + (set_local $var$1034 + (i32.const 98) + ) + (br $label$346) + ) + ) + (set_local $var$112 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$357 + (i32.and + (get_local $var$112) + (i32.const 32) + ) + ) + (set_local $var$944 + (i32.eq + (get_local $var$357) + (i32.const 0) + ) + ) + (if + (get_local $var$944) + (call $___fwritex + (get_local $var$755) + (get_local $var$428) + (get_local $var$0) + ) + ) + (set_local $var$485 + (i32.lt_u + (i32.shr_u + (get_local $var$342) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$642) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$485) + (block $label$375 + (set_local $var$649 + (get_local $var$342) + ) + (set_local $var$1009 + (get_local $var$700) + ) + ) + (block $label$376 + (set_local $var$643 + (get_local $var$642) + ) + (set_local $var$1034 + (i32.const 98) + ) + (br $label$370) + ) + ) + (br $label$371) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $var$1034) + (i32.const 98) + ) + (block $label$377 + (set_local $var$1034 + (i32.const 0) + ) + (set_local $var$1010 + (i32.xor + (get_local $var$638) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $var$0) + (i32.const 32) + (get_local $var$1003) + (get_local $var$643) + (get_local $var$1010) + ) + (set_local $var$492 + (i32.gt_s + (get_local $var$1003) + (get_local $var$643) + ) + ) + (set_local $var$559 + (if_else + (get_local $var$492) + (get_local $var$1003) + (get_local $var$643) + ) + ) + (set_local $var$549 + (get_local $var$550) + ) + (set_local $var$685 + (get_local $var$679) + ) + (set_local $var$738 + (get_local $var$559) + ) + (set_local $var$743 + (get_local $var$748) + ) + (br $label$2) + ) + ) + (if + (i32.eq + (get_local $var$1034) + (i32.const 77) + ) + (block $label$378 + (set_local $var$1034 + (i32.const 0) + ) + (set_local $var$464 + (i32.gt_s + (get_local $var$792) + (i32.const -1) + ) + ) + (set_local $var$385 + (i32.and + (get_local $var$640) + (i32.const -65537) + ) + ) + (set_local $var$386 + (if_else + (get_local $var$464) + (get_local $var$385) + (get_local $var$640) + ) + ) + (set_local $var$80 + (get_local $var$392) + ) + (set_local $var$81 + (get_local $var$80) + ) + (set_local $var$82 + (i32.load align=4 + (get_local $var$81) + ) + ) + (set_local $var$83 + (i32.add + (get_local $var$80) + (i32.const 4) + ) + ) + (set_local $var$84 + (get_local $var$83) + ) + (set_local $var$85 + (i32.load align=4 + (get_local $var$84) + ) + ) + (set_local $var$86 + (i32.ne + (get_local $var$82) + (i32.const 0) + ) + ) + (set_local $var$87 + (i32.ne + (get_local $var$85) + (i32.const 0) + ) + ) + (set_local $var$88 + (i32.or + (get_local $var$86) + (get_local $var$87) + ) + ) + (set_local $var$978 + (i32.ne + (get_local $var$792) + (i32.const 0) + ) + ) + (set_local $var$772 + (i32.or + (get_local $var$978) + (get_local $var$88) + ) + ) + (if_else + (get_local $var$772) + (block $label$379 + (set_local $var$872 + (get_local $var$289) + ) + (set_local $var$894 + (i32.sub + (get_local $var$859) + (get_local $var$872) + ) + ) + (set_local $var$90 + (i32.and + (get_local $var$88) + (i32.const 1) + ) + ) + (set_local $var$750 + (i32.xor + (get_local $var$90) + (i32.const 1) + ) + ) + (set_local $var$339 + (i32.add + (get_local $var$750) + (get_local $var$894) + ) + ) + (set_local $var$467 + (i32.gt_s + (get_local $var$792) + (get_local $var$339) + ) + ) + (set_local $var$793 + (if_else + (get_local $var$467) + (get_local $var$792) + (get_local $var$339) + ) + ) + (set_local $var$293 + (get_local $var$289) + ) + (set_local $var$641 + (get_local $var$386) + ) + (set_local $var$796 + (get_local $var$793) + ) + (set_local $var$809 + (get_local $var$807) + ) + (set_local $var$814 + (get_local $var$813) + ) + (set_local $var$1024 + (get_local $var$309) + ) + ) + (block $label$380 + (set_local $var$293 + (get_local $var$309) + ) + (set_local $var$641 + (get_local $var$386) + ) + (set_local $var$796 + (i32.const 0) + ) + (set_local $var$809 + (get_local $var$807) + ) + (set_local $var$814 + (get_local $var$813) + ) + (set_local $var$1024 + (get_local $var$309) + ) + ) + ) + ) + ) + (set_local $var$862 + (get_local $var$1024) + ) + (set_local $var$877 + (get_local $var$293) + ) + (set_local $var$899 + (i32.sub + (get_local $var$862) + (get_local $var$877) + ) + ) + (set_local $var$495 + (i32.lt_s + (get_local $var$796) + (get_local $var$899) + ) + ) + (set_local $var$900 + (if_else + (get_local $var$495) + (get_local $var$899) + (get_local $var$796) + ) + ) + (set_local $var$344 + (i32.add + (get_local $var$809) + (get_local $var$900) + ) + ) + (set_local $var$496 + (i32.lt_s + (get_local $var$1003) + (get_local $var$344) + ) + ) + (set_local $var$1004 + (if_else + (get_local $var$496) + (get_local $var$344) + (get_local $var$1003) + ) + ) + (call $_pad + (get_local $var$0) + (i32.const 32) + (get_local $var$1004) + (get_local $var$344) + (get_local $var$641) + ) + (set_local $var$205 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$359 + (i32.and + (get_local $var$205) + (i32.const 32) + ) + ) + (set_local $var$945 + (i32.eq + (get_local $var$359) + (i32.const 0) + ) + ) + (if + (get_local $var$945) + (call $___fwritex + (get_local $var$814) + (get_local $var$809) + (get_local $var$0) + ) + ) + (set_local $var$1014 + (i32.xor + (get_local $var$641) + (i32.const 65536) + ) + ) + (call $_pad + (get_local $var$0) + (i32.const 48) + (get_local $var$1004) + (get_local $var$344) + (get_local $var$1014) + ) + (call $_pad + (get_local $var$0) + (i32.const 48) + (get_local $var$900) + (get_local $var$899) + (i32.const 0) + ) + (set_local $var$206 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$356 + (i32.and + (get_local $var$206) + (i32.const 32) + ) + ) + (set_local $var$943 + (i32.eq + (get_local $var$356) + (i32.const 0) + ) + ) + (if + (get_local $var$943) + (call $___fwritex + (get_local $var$293) + (get_local $var$899) + (get_local $var$0) + ) + ) + (set_local $var$1015 + (i32.xor + (get_local $var$641) + (i32.const 8192) + ) + ) + (call $_pad + (get_local $var$0) + (i32.const 32) + (get_local $var$1004) + (get_local $var$344) + (get_local $var$1015) + ) + (set_local $var$549 + (get_local $var$550) + ) + (set_local $var$685 + (get_local $var$679) + ) + (set_local $var$738 + (get_local $var$1004) + ) + (set_local $var$743 + (get_local $var$748) + ) + (br $label$2) + ) + ) + (block $label$381 + (if + (i32.eq + (get_local $var$1034) + (i32.const 242) + ) + (block $label$382 + (set_local $var$988 + (i32.eq + (get_local $var$0) + (i32.const 0) + ) + ) + (if_else + (get_local $var$988) + (block $label$383 + (set_local $var$989 + (i32.eq + (get_local $var$744) + (i32.const 0) + ) + ) + (if_else + (get_local $var$989) + (set_local $var$821 + (i32.const 0) + ) + (block $label$384 + (set_local $var$651 + (i32.const 1) + ) + (loop $label$385 $label$386 + (block $label$387 + (set_local $var$414 + (i32.add + (get_local $var$4) + (i32.shl + (get_local $var$651) + (i32.const 2) + ) + ) + ) + (set_local $var$207 + (i32.load align=4 + (get_local $var$414) + ) + ) + (set_local $var$990 + (i32.eq + (get_local $var$207) + (i32.const 0) + ) + ) + (if + (get_local $var$990) + (block $label$388 + (set_local $var$652 + (get_local $var$651) + ) + (br $label$385) + ) + ) + (set_local $var$323 + (i32.add + (get_local $var$3) + (i32.shl + (get_local $var$651) + (i32.const 3) + ) + ) + ) + (call $_pop_arg_336 + (get_local $var$323) + (get_local $var$207) + (get_local $var$2) + ) + (set_local $var$659 + (i32.add + (get_local $var$651) + (i32.const 1) + ) + ) + (set_local $var$500 + (i32.lt_s + (get_local $var$659) + (i32.const 10) + ) + ) + (if_else + (get_local $var$500) + (set_local $var$651 + (get_local $var$659) + ) + (block $label$389 + (set_local $var$821 + (i32.const 1) + ) + (br $label$381) + ) + ) + (br $label$386) + ) + ) + (set_local $var$504 + (i32.lt_s + (get_local $var$652) + (i32.const 10) + ) + ) + (if_else + (get_local $var$504) + (block $label$390 + (set_local $var$654 + (get_local $var$652) + ) + (loop $label$391 $label$392 + (block $label$393 + (set_local $var$415 + (i32.add + (get_local $var$4) + (i32.shl + (get_local $var$654) + (i32.const 2) + ) + ) + ) + (set_local $var$208 + (i32.load align=4 + (get_local $var$415) + ) + ) + (set_local $var$753 + (i32.eq + (get_local $var$208) + (i32.const 0) + ) + ) + (set_local $var$664 + (i32.add + (get_local $var$654) + (i32.const 1) + ) + ) + (if + (i32.eq + (get_local $var$753) + (i32.const 0) + ) + (block $label$394 + (set_local $var$821 + (i32.const -1) + ) + (br $label$381) + ) + ) + (set_local $var$503 + (i32.lt_s + (get_local $var$664) + (i32.const 10) + ) + ) + (if_else + (get_local $var$503) + (set_local $var$654 + (get_local $var$664) + ) + (block $label$395 + (set_local $var$821 + (i32.const 1) + ) + (br $label$391) + ) + ) + (br $label$392) + ) + ) + ) + (set_local $var$821 + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $var$821 + (get_local $var$551) + ) + ) + ) + ) + ) + (i32.store align=4 + (i32.const 8) + (get_local $var$1035) + ) + (get_local $var$821) + ) + ) + (func $_pop_arg_336 (type $10) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (local $var$19 i32) + (local $var$20 i32) + (local $var$21 i32) + (local $var$22 i32) + (local $var$23 i32) + (local $var$24 i32) + (local $var$25 i32) + (local $var$26 i32) + (local $var$27 i32) + (local $var$28 i32) + (local $var$29 i32) + (local $var$30 i32) + (local $var$31 i32) + (local $var$32 i32) + (local $var$33 i32) + (local $var$34 i32) + (local $var$35 i32) + (local $var$36 i32) + (local $var$37 i32) + (local $var$38 i32) + (local $var$39 i32) + (local $var$40 i32) + (local $var$41 i32) + (local $var$42 i32) + (local $var$43 i32) + (local $var$44 i32) + (local $var$45 i32) + (local $var$46 i32) + (local $var$47 i32) + (local $var$48 i32) + (local $var$49 i32) + (local $var$50 i32) + (local $var$51 i32) + (local $var$52 i32) + (local $var$53 i32) + (local $var$54 i32) + (local $var$55 i32) + (local $var$56 i32) + (local $var$57 i32) + (local $var$58 i32) + (local $var$59 i32) + (local $var$60 i32) + (local $var$61 i32) + (local $var$62 i32) + (local $var$63 i32) + (local $var$64 i32) + (local $var$65 i32) + (local $var$66 i32) + (local $var$67 i32) + (local $var$68 i32) + (local $var$69 i32) + (local $var$70 i32) + (local $var$71 i32) + (local $var$72 i32) + (local $var$73 i32) + (local $var$74 i32) + (local $var$75 i32) + (local $var$76 i32) + (local $var$77 i32) + (local $var$78 i32) + (local $var$79 i32) + (local $var$80 i32) + (local $var$81 i32) + (local $var$82 i32) + (local $var$83 i32) + (local $var$84 i32) + (local $var$85 i32) + (local $var$86 i32) + (local $var$87 i32) + (local $var$88 i32) + (local $var$89 i32) + (local $var$90 i32) + (local $var$91 i32) + (local $var$92 i32) + (local $var$93 i32) + (local $var$94 i32) + (local $var$95 i32) + (local $var$96 i32) + (local $var$97 i32) + (local $var$98 i32) + (local $var$99 i32) + (local $var$100 i32) + (local $var$101 i32) + (local $var$102 i32) + (local $var$103 i32) + (local $var$104 i32) + (local $var$105 i32) + (local $var$106 i32) + (local $var$107 i32) + (local $var$108 i32) + (local $var$109 i32) + (local $var$110 i32) + (local $var$111 i32) + (local $var$112 i32) + (local $var$113 i32) + (local $var$114 i32) + (local $var$115 i32) + (local $var$116 i32) + (local $var$117 i32) + (local $var$118 i32) + (local $var$119 i32) + (local $var$120 i32) + (local $var$121 i32) + (local $var$122 i32) + (local $var$123 i32) + (local $var$124 i32) + (local $var$125 i32) + (local $var$126 i32) + (local $var$127 i32) + (local $var$128 i32) + (local $var$129 i32) + (local $var$130 i32) + (local $var$131 i32) + (local $var$132 i32) + (local $var$133 i32) + (local $var$134 i32) + (local $var$135 i32) + (local $var$136 i32) + (local $var$137 i32) + (local $var$138 i32) + (local $var$139 i32) + (local $var$140 i32) + (local $var$141 i32) + (local $var$142 i32) + (local $var$143 i32) + (local $var$144 i32) + (local $var$145 i32) + (local $var$146 i32) + (local $var$147 i32) + (local $var$148 i32) + (local $var$149 i32) + (local $var$150 i32) + (local $var$151 i32) + (local $var$152 i32) + (local $var$153 i32) + (local $var$154 i32) + (local $var$155 i32) + (local $var$156 i32) + (local $var$157 i32) + (local $var$158 i32) + (local $var$159 i32) + (local $var$160 i32) + (local $var$161 i32) + (local $var$162 i32) + (local $var$163 i32) + (local $var$164 i32) + (local $var$165 i32) + (local $var$166 i32) + (local $var$167 i32) + (local $var$168 i32) + (local $var$169 i32) + (local $var$170 i32) + (local $var$171 i32) + (local $var$172 i32) + (local $var$173 i32) + (local $var$174 i32) + (local $var$175 i32) + (local $var$176 i32) + (local $var$177 i32) + (local $var$178 i32) + (local $var$179 i32) + (local $var$180 i32) + (local $var$181 i32) + (local $var$182 i32) + (local $var$183 i32) + (local $var$184 i32) + (local $var$185 i32) + (local $var$186 i32) + (local $var$187 i32) + (local $var$188 i32) + (local $var$189 f64) + (local $var$190 f64) + (block $label$0 + (set_local $var$188 + (i32.load align=4 + (i32.const 8) + ) + ) + (set_local $var$132 + (i32.gt_u + (i32.shr_u + (get_local $var$1) + (i32.const 0) + ) + (i32.const 20) + ) + ) + (block $label$1 + (if + (i32.eq + (get_local $var$132) + (i32.const 0) + ) + (tableswitch $label$13 + (i32.sub + (get_local $var$1) + (i32.const 9) + ) + (table (case $label$2) (case $label$3) (case $label$4) (case $label$5) (case $label$6) (case $label$7) (case $label$8) (case $label$9) (case $label$10) (case $label$11)) (case $label$12) + (case $label$2 + (block $label$14 + (set_local $var$112 + (i32.load align=4 + (get_local $var$2) + ) + ) + (set_local $var$3 + (get_local $var$112) + ) + (set_local $var$4 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $var$138 + (get_local $var$4) + ) + (set_local $var$137 + (i32.sub + (get_local $var$138) + (i32.const 1) + ) + ) + (set_local $var$24 + (i32.add + (get_local $var$3) + (get_local $var$137) + ) + ) + (set_local $var$35 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $var$141 + (get_local $var$35) + ) + (set_local $var$140 + (i32.sub + (get_local $var$141) + (i32.const 1) + ) + ) + (set_local $var$139 + (i32.xor + (get_local $var$140) + (i32.const -1) + ) + ) + (set_local $var$46 + (i32.and + (get_local $var$24) + (get_local $var$139) + ) + ) + (set_local $var$57 + (get_local $var$46) + ) + (set_local $var$68 + (i32.load align=4 + (get_local $var$57) + ) + ) + (set_local $var$122 + (i32.add + (get_local $var$57) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$2) + (get_local $var$122) + ) + (i32.store align=4 + (get_local $var$0) + (get_local $var$68) + ) + (br $label$1) + (br $label$13) + ) + ) + (case $label$3 + (block $label$15 + (set_local $var$116 + (i32.load align=4 + (get_local $var$2) + ) + ) + (set_local $var$79 + (get_local $var$116) + ) + (set_local $var$90 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $var$143 + (get_local $var$90) + ) + (set_local $var$142 + (i32.sub + (get_local $var$143) + (i32.const 1) + ) + ) + (set_local $var$101 + (i32.add + (get_local $var$79) + (get_local $var$142) + ) + ) + (set_local $var$5 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $var$146 + (get_local $var$5) + ) + (set_local $var$145 + (i32.sub + (get_local $var$146) + (i32.const 1) + ) + ) + (set_local $var$144 + (i32.xor + (get_local $var$145) + (i32.const -1) + ) + ) + (set_local $var$15 + (i32.and + (get_local $var$101) + (get_local $var$144) + ) + ) + (set_local $var$16 + (get_local $var$15) + ) + (set_local $var$17 + (i32.load align=4 + (get_local $var$16) + ) + ) + (set_local $var$129 + (i32.add + (get_local $var$16) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$2) + (get_local $var$129) + ) + (set_local $var$18 + (i32.lt_s + (get_local $var$17) + (i32.const 0) + ) + ) + (set_local $var$19 + (i32.shr_s + (i32.shl + (get_local $var$18) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $var$20 + (get_local $var$0) + ) + (set_local $var$21 + (get_local $var$20) + ) + (i32.store align=4 + (get_local $var$21) + (get_local $var$17) + ) + (set_local $var$22 + (i32.add + (get_local $var$20) + (i32.const 4) + ) + ) + (set_local $var$23 + (get_local $var$22) + ) + (i32.store align=4 + (get_local $var$23) + (get_local $var$19) + ) + (br $label$1) + (br $label$13) + ) + ) + (case $label$4 + (block $label$16 + (set_local $var$120 + (i32.load align=4 + (get_local $var$2) + ) + ) + (set_local $var$25 + (get_local $var$120) + ) + (set_local $var$26 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $var$148 + (get_local $var$26) + ) + (set_local $var$147 + (i32.sub + (get_local $var$148) + (i32.const 1) + ) + ) + (set_local $var$27 + (i32.add + (get_local $var$25) + (get_local $var$147) + ) + ) + (set_local $var$28 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $var$151 + (get_local $var$28) + ) + (set_local $var$150 + (i32.sub + (get_local $var$151) + (i32.const 1) + ) + ) + (set_local $var$149 + (i32.xor + (get_local $var$150) + (i32.const -1) + ) + ) + (set_local $var$29 + (i32.and + (get_local $var$27) + (get_local $var$149) + ) + ) + (set_local $var$30 + (get_local $var$29) + ) + (set_local $var$31 + (i32.load align=4 + (get_local $var$30) + ) + ) + (set_local $var$130 + (i32.add + (get_local $var$30) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$2) + (get_local $var$130) + ) + (set_local $var$32 + (get_local $var$0) + ) + (set_local $var$33 + (get_local $var$32) + ) + (i32.store align=4 + (get_local $var$33) + (get_local $var$31) + ) + (set_local $var$34 + (i32.add + (get_local $var$32) + (i32.const 4) + ) + ) + (set_local $var$36 + (get_local $var$34) + ) + (i32.store align=4 + (get_local $var$36) + (i32.const 0) + ) + (br $label$1) + (br $label$13) + ) + ) + (case $label$5 + (block $label$17 + (set_local $var$121 + (i32.load align=4 + (get_local $var$2) + ) + ) + (set_local $var$37 + (get_local $var$121) + ) + (set_local $var$38 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $var$153 + (get_local $var$38) + ) + (set_local $var$152 + (i32.sub + (get_local $var$153) + (i32.const 1) + ) + ) + (set_local $var$39 + (i32.add + (get_local $var$37) + (get_local $var$152) + ) + ) + (set_local $var$40 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $var$156 + (get_local $var$40) + ) + (set_local $var$155 + (i32.sub + (get_local $var$156) + (i32.const 1) + ) + ) + (set_local $var$154 + (i32.xor + (get_local $var$155) + (i32.const -1) + ) + ) + (set_local $var$41 + (i32.and + (get_local $var$39) + (get_local $var$154) + ) + ) + (set_local $var$42 + (get_local $var$41) + ) + (set_local $var$43 + (get_local $var$42) + ) + (set_local $var$44 + (get_local $var$43) + ) + (set_local $var$45 + (i32.load align=4 + (get_local $var$44) + ) + ) + (set_local $var$47 + (i32.add + (get_local $var$43) + (i32.const 4) + ) + ) + (set_local $var$48 + (get_local $var$47) + ) + (set_local $var$49 + (i32.load align=4 + (get_local $var$48) + ) + ) + (set_local $var$131 + (i32.add + (get_local $var$42) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$2) + (get_local $var$131) + ) + (set_local $var$50 + (get_local $var$0) + ) + (set_local $var$51 + (get_local $var$50) + ) + (i32.store align=4 + (get_local $var$51) + (get_local $var$45) + ) + (set_local $var$52 + (i32.add + (get_local $var$50) + (i32.const 4) + ) + ) + (set_local $var$53 + (get_local $var$52) + ) + (i32.store align=4 + (get_local $var$53) + (get_local $var$49) + ) + (br $label$1) + (br $label$13) + ) + ) + (case $label$6 + (block $label$18 + (set_local $var$113 + (i32.load align=4 + (get_local $var$2) + ) + ) + (set_local $var$54 + (get_local $var$113) + ) + (set_local $var$55 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $var$158 + (get_local $var$55) + ) + (set_local $var$157 + (i32.sub + (get_local $var$158) + (i32.const 1) + ) + ) + (set_local $var$56 + (i32.add + (get_local $var$54) + (get_local $var$157) + ) + ) + (set_local $var$58 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $var$161 + (get_local $var$58) + ) + (set_local $var$160 + (i32.sub + (get_local $var$161) + (i32.const 1) + ) + ) + (set_local $var$159 + (i32.xor + (get_local $var$160) + (i32.const -1) + ) + ) + (set_local $var$59 + (i32.and + (get_local $var$56) + (get_local $var$159) + ) + ) + (set_local $var$60 + (get_local $var$59) + ) + (set_local $var$61 + (i32.load align=4 + (get_local $var$60) + ) + ) + (set_local $var$123 + (i32.add + (get_local $var$60) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$2) + (get_local $var$123) + ) + (set_local $var$133 + (i32.and + (get_local $var$61) + (i32.const 65535) + ) + ) + (set_local $var$62 + (i32.shr_s + (i32.shl + (get_local $var$133) + (i32.const 16) + ) + (i32.const 16) + ) + ) + (set_local $var$63 + (i32.lt_s + (get_local $var$62) + (i32.const 0) + ) + ) + (set_local $var$64 + (i32.shr_s + (i32.shl + (get_local $var$63) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $var$65 + (get_local $var$0) + ) + (set_local $var$66 + (get_local $var$65) + ) + (i32.store align=4 + (get_local $var$66) + (get_local $var$62) + ) + (set_local $var$67 + (i32.add + (get_local $var$65) + (i32.const 4) + ) + ) + (set_local $var$69 + (get_local $var$67) + ) + (i32.store align=4 + (get_local $var$69) + (get_local $var$64) + ) + (br $label$1) + (br $label$13) + ) + ) + (case $label$7 + (block $label$19 + (set_local $var$114 + (i32.load align=4 + (get_local $var$2) + ) + ) + (set_local $var$70 + (get_local $var$114) + ) + (set_local $var$71 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $var$163 + (get_local $var$71) + ) + (set_local $var$162 + (i32.sub + (get_local $var$163) + (i32.const 1) + ) + ) + (set_local $var$72 + (i32.add + (get_local $var$70) + (get_local $var$162) + ) + ) + (set_local $var$73 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $var$166 + (get_local $var$73) + ) + (set_local $var$165 + (i32.sub + (get_local $var$166) + (i32.const 1) + ) + ) + (set_local $var$164 + (i32.xor + (get_local $var$165) + (i32.const -1) + ) + ) + (set_local $var$74 + (i32.and + (get_local $var$72) + (get_local $var$164) + ) + ) + (set_local $var$75 + (get_local $var$74) + ) + (set_local $var$76 + (i32.load align=4 + (get_local $var$75) + ) + ) + (set_local $var$124 + (i32.add + (get_local $var$75) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$2) + (get_local $var$124) + ) + (set_local $var$134 + (i32.and + (get_local $var$76) + (i32.const 65535) + ) + ) + (set_local $var$77 + (get_local $var$0) + ) + (set_local $var$78 + (get_local $var$77) + ) + (i32.store align=4 + (get_local $var$78) + (get_local $var$134) + ) + (set_local $var$80 + (i32.add + (get_local $var$77) + (i32.const 4) + ) + ) + (set_local $var$81 + (get_local $var$80) + ) + (i32.store align=4 + (get_local $var$81) + (i32.const 0) + ) + (br $label$1) + (br $label$13) + ) + ) + (case $label$8 + (block $label$20 + (set_local $var$115 + (i32.load align=4 + (get_local $var$2) + ) + ) + (set_local $var$82 + (get_local $var$115) + ) + (set_local $var$83 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $var$168 + (get_local $var$83) + ) + (set_local $var$167 + (i32.sub + (get_local $var$168) + (i32.const 1) + ) + ) + (set_local $var$84 + (i32.add + (get_local $var$82) + (get_local $var$167) + ) + ) + (set_local $var$85 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $var$171 + (get_local $var$85) + ) + (set_local $var$170 + (i32.sub + (get_local $var$171) + (i32.const 1) + ) + ) + (set_local $var$169 + (i32.xor + (get_local $var$170) + (i32.const -1) + ) + ) + (set_local $var$86 + (i32.and + (get_local $var$84) + (get_local $var$169) + ) + ) + (set_local $var$87 + (get_local $var$86) + ) + (set_local $var$88 + (i32.load align=4 + (get_local $var$87) + ) + ) + (set_local $var$125 + (i32.add + (get_local $var$87) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$2) + (get_local $var$125) + ) + (set_local $var$135 + (i32.and + (get_local $var$88) + (i32.const 255) + ) + ) + (set_local $var$89 + (i32.shr_s + (i32.shl + (get_local $var$135) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $var$91 + (i32.lt_s + (get_local $var$89) + (i32.const 0) + ) + ) + (set_local $var$92 + (i32.shr_s + (i32.shl + (get_local $var$91) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $var$93 + (get_local $var$0) + ) + (set_local $var$94 + (get_local $var$93) + ) + (i32.store align=4 + (get_local $var$94) + (get_local $var$89) + ) + (set_local $var$95 + (i32.add + (get_local $var$93) + (i32.const 4) + ) + ) + (set_local $var$96 + (get_local $var$95) + ) + (i32.store align=4 + (get_local $var$96) + (get_local $var$92) + ) + (br $label$1) + (br $label$13) + ) + ) + (case $label$9 + (block $label$21 + (set_local $var$117 + (i32.load align=4 + (get_local $var$2) + ) + ) + (set_local $var$97 + (get_local $var$117) + ) + (set_local $var$98 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $var$173 + (get_local $var$98) + ) + (set_local $var$172 + (i32.sub + (get_local $var$173) + (i32.const 1) + ) + ) + (set_local $var$99 + (i32.add + (get_local $var$97) + (get_local $var$172) + ) + ) + (set_local $var$100 + (i32.add + (i32.const 0) + (i32.const 4) + ) + ) + (set_local $var$176 + (get_local $var$100) + ) + (set_local $var$175 + (i32.sub + (get_local $var$176) + (i32.const 1) + ) + ) + (set_local $var$174 + (i32.xor + (get_local $var$175) + (i32.const -1) + ) + ) + (set_local $var$102 + (i32.and + (get_local $var$99) + (get_local $var$174) + ) + ) + (set_local $var$103 + (get_local $var$102) + ) + (set_local $var$104 + (i32.load align=4 + (get_local $var$103) + ) + ) + (set_local $var$126 + (i32.add + (get_local $var$103) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$2) + (get_local $var$126) + ) + (set_local $var$136 + (i32.and + (get_local $var$104) + (i32.const 255) + ) + ) + (set_local $var$105 + (get_local $var$0) + ) + (set_local $var$106 + (get_local $var$105) + ) + (i32.store align=4 + (get_local $var$106) + (get_local $var$136) + ) + (set_local $var$107 + (i32.add + (get_local $var$105) + (i32.const 4) + ) + ) + (set_local $var$108 + (get_local $var$107) + ) + (i32.store align=4 + (get_local $var$108) + (i32.const 0) + ) + (br $label$1) + (br $label$13) + ) + ) + (case $label$10 + (block $label$22 + (set_local $var$118 + (i32.load align=4 + (get_local $var$2) + ) + ) + (set_local $var$109 + (get_local $var$118) + ) + (set_local $var$110 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $var$178 + (get_local $var$110) + ) + (set_local $var$177 + (i32.sub + (get_local $var$178) + (i32.const 1) + ) + ) + (set_local $var$111 + (i32.add + (get_local $var$109) + (get_local $var$177) + ) + ) + (set_local $var$6 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $var$181 + (get_local $var$6) + ) + (set_local $var$180 + (i32.sub + (get_local $var$181) + (i32.const 1) + ) + ) + (set_local $var$179 + (i32.xor + (get_local $var$180) + (i32.const -1) + ) + ) + (set_local $var$7 + (i32.and + (get_local $var$111) + (get_local $var$179) + ) + ) + (set_local $var$8 + (get_local $var$7) + ) + (set_local $var$189 + (f64.load align=8 + (get_local $var$8) + ) + ) + (set_local $var$127 + (i32.add + (get_local $var$8) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$2) + (get_local $var$127) + ) + (f64.store align=8 + (get_local $var$0) + (get_local $var$189) + ) + (br $label$1) + (br $label$13) + ) + ) + (case $label$11 + (block $label$23 + (set_local $var$119 + (i32.load align=4 + (get_local $var$2) + ) + ) + (set_local $var$9 + (get_local $var$119) + ) + (set_local $var$10 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $var$183 + (get_local $var$10) + ) + (set_local $var$182 + (i32.sub + (get_local $var$183) + (i32.const 1) + ) + ) + (set_local $var$11 + (i32.add + (get_local $var$9) + (get_local $var$182) + ) + ) + (set_local $var$12 + (i32.add + (i32.const 0) + (i32.const 8) + ) + ) + (set_local $var$186 + (get_local $var$12) + ) + (set_local $var$185 + (i32.sub + (get_local $var$186) + (i32.const 1) + ) + ) + (set_local $var$184 + (i32.xor + (get_local $var$185) + (i32.const -1) + ) + ) + (set_local $var$13 + (i32.and + (get_local $var$11) + (get_local $var$184) + ) + ) + (set_local $var$14 + (get_local $var$13) + ) + (set_local $var$190 + (f64.load align=8 + (get_local $var$14) + ) + ) + (set_local $var$128 + (i32.add + (get_local $var$14) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$2) + (get_local $var$128) + ) + (f64.store align=8 + (get_local $var$0) + (get_local $var$190) + ) + (br $label$1) + (br $label$13) + ) + ) + (case $label$12 + (br $label$1) + ) + ) + ) + ) + (br $label$0) + ) + ) + (func $_fmt_u (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (local $var$19 i32) + (local $var$20 i32) + (local $var$21 i32) + (local $var$22 i32) + (local $var$23 i32) + (local $var$24 i32) + (local $var$25 i32) + (local $var$26 i32) + (local $var$27 i32) + (local $var$28 i32) + (local $var$29 i32) + (local $var$30 i32) + (local $var$31 i32) + (local $var$32 i32) + (local $var$33 i32) + (local $var$34 i32) + (local $var$35 i32) + (local $var$36 i32) + (local $var$37 i32) + (local $var$38 i32) + (local $var$39 i32) + (block $label$0 + (set_local $var$39 + (i32.load align=4 + (i32.const 8) + ) + ) + (set_local $var$13 + (i32.gt_u + (i32.shr_u + (get_local $var$1) + (i32.const 0) + ) + (i32.const 0) + ) + ) + (set_local $var$17 + (i32.gt_u + (i32.shr_u + (get_local $var$0) + (i32.const 0) + ) + (i32.const -1) + ) + ) + (set_local $var$18 + (i32.eq + (get_local $var$1) + (i32.const 0) + ) + ) + (set_local $var$19 + (i32.and + (get_local $var$18) + (get_local $var$17) + ) + ) + (set_local $var$20 + (i32.or + (get_local $var$13) + (get_local $var$19) + ) + ) + (if_else + (get_local $var$20) + (block $label$1 + (set_local $var$21 + (get_local $var$0) + ) + (set_local $var$22 + (get_local $var$1) + ) + (set_local $var$32 + (get_local $var$2) + ) + (loop $label$2 $label$3 + (block $label$4 + (set_local $var$23 + (call $___uremdi3 + (get_local $var$21) + (get_local $var$22) + (i32.const 10) + (i32.const 0) + ) + ) + (set_local $var$3 + (i32.load align=4 + (i32.const 168) + ) + ) + (set_local $var$4 + (i32.or + (get_local $var$23) + (i32.const 48) + ) + ) + (set_local $var$5 + (i32.and + (get_local $var$4) + (i32.const 255) + ) + ) + (set_local $var$27 + (i32.add + (get_local $var$32) + (i32.const -1) + ) + ) + (i32.store8 align=1 + (get_local $var$27) + (get_local $var$5) + ) + (set_local $var$6 + (call $___udivdi3 + (get_local $var$21) + (get_local $var$22) + (i32.const 10) + (i32.const 0) + ) + ) + (set_local $var$7 + (i32.load align=4 + (i32.const 168) + ) + ) + (set_local $var$8 + (i32.gt_u + (i32.shr_u + (get_local $var$22) + (i32.const 0) + ) + (i32.const 9) + ) + ) + (set_local $var$9 + (i32.gt_u + (i32.shr_u + (get_local $var$21) + (i32.const 0) + ) + (i32.const -1) + ) + ) + (set_local $var$10 + (i32.eq + (get_local $var$22) + (i32.const 9) + ) + ) + (set_local $var$11 + (i32.and + (get_local $var$10) + (get_local $var$9) + ) + ) + (set_local $var$12 + (i32.or + (get_local $var$8) + (get_local $var$11) + ) + ) + (if_else + (get_local $var$12) + (block $label$5 + (set_local $var$21 + (get_local $var$6) + ) + (set_local $var$22 + (get_local $var$7) + ) + (set_local $var$32 + (get_local $var$27) + ) + ) + (block $label$6 + (set_local $var$15 + (get_local $var$6) + ) + (set_local $var$16 + (get_local $var$7) + ) + (set_local $var$28 + (get_local $var$27) + ) + (br $label$2) + ) + ) + (br $label$3) + ) + ) + (set_local $var$31 + (get_local $var$28) + ) + (set_local $var$36 + (get_local $var$15) + ) + ) + (block $label$7 + (set_local $var$31 + (get_local $var$2) + ) + (set_local $var$36 + (get_local $var$0) + ) + ) + ) + (set_local $var$35 + (i32.eq + (get_local $var$36) + (i32.const 0) + ) + ) + (if_else + (get_local $var$35) + (set_local $var$33 + (get_local $var$31) + ) + (block $label$8 + (set_local $var$34 + (get_local $var$31) + ) + (set_local $var$37 + (get_local $var$36) + ) + (loop $label$9 $label$10 + (block $label$11 + (set_local $var$30 + (i32.and + (i32.rem_u + (i32.shr_u + (get_local $var$37) + (i32.const 0) + ) + (i32.const 10) + ) + (i32.const -1) + ) + ) + (set_local $var$24 + (i32.or + (get_local $var$30) + (i32.const 48) + ) + ) + (set_local $var$25 + (i32.and + (get_local $var$24) + (i32.const 255) + ) + ) + (set_local $var$29 + (i32.add + (get_local $var$34) + (i32.const -1) + ) + ) + (i32.store8 align=1 + (get_local $var$29) + (get_local $var$25) + ) + (set_local $var$26 + (i32.and + (i32.div_u + (i32.shr_u + (get_local $var$37) + (i32.const 0) + ) + (i32.const 10) + ) + (i32.const -1) + ) + ) + (set_local $var$14 + (i32.lt_u + (i32.shr_u + (get_local $var$37) + (i32.const 0) + ) + (i32.const 10) + ) + ) + (if_else + (get_local $var$14) + (block $label$12 + (set_local $var$33 + (get_local $var$29) + ) + (br $label$9) + ) + (block $label$13 + (set_local $var$34 + (get_local $var$29) + ) + (set_local $var$37 + (get_local $var$26) + ) + ) + ) + (br $label$10) + ) + ) + ) + ) + (get_local $var$33) + ) + ) + (func $_pad (type $11) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (local $var$19 i32) + (local $var$20 i32) + (local $var$21 i32) + (local $var$22 i32) + (local $var$23 i32) + (local $var$24 i32) + (local $var$25 i32) + (local $var$26 i32) + (local $var$27 i32) + (local $var$28 i32) + (local $var$29 i32) + (local $var$30 i32) + (block $label$0 + (set_local $var$30 + (i32.load align=4 + (i32.const 8) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (i32.const 256) + ) + ) + (if + (i32.ge_s + (i32.load align=4 + (i32.const 8) + ) + (i32.load align=4 + (i32.const 16) + ) + ) + (call_import $abort) + ) + (set_local $var$22 + (get_local $var$30) + ) + (set_local $var$11 + (i32.and + (get_local $var$4) + (i32.const 73728) + ) + ) + (set_local $var$25 + (i32.eq + (get_local $var$11) + (i32.const 0) + ) + ) + (set_local $var$14 + (i32.gt_s + (get_local $var$2) + (get_local $var$3) + ) + ) + (set_local $var$21 + (i32.and + (get_local $var$14) + (get_local $var$25) + ) + ) + (block $label$1 + (if + (get_local $var$21) + (block $label$2 + (set_local $var$23 + (i32.sub + (get_local $var$2) + (get_local $var$3) + ) + ) + (set_local $var$15 + (i32.gt_u + (i32.shr_u + (get_local $var$23) + (i32.const 0) + ) + (i32.const 256) + ) + ) + (set_local $var$18 + (if_else + (get_local $var$15) + (i32.const 256) + (get_local $var$23) + ) + ) + (call $_memset + (get_local $var$22) + (get_local $var$1) + (get_local $var$18) + ) + (set_local $var$17 + (i32.gt_u + (i32.shr_u + (get_local $var$23) + (i32.const 0) + ) + (i32.const 255) + ) + ) + (set_local $var$6 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$13 + (i32.and + (get_local $var$6) + (i32.const 32) + ) + ) + (set_local $var$27 + (i32.eq + (get_local $var$13) + (i32.const 0) + ) + ) + (if_else + (get_local $var$17) + (block $label$3 + (set_local $var$7 + (i32.sub + (get_local $var$2) + (get_local $var$3) + ) + ) + (set_local $var$10 + (get_local $var$6) + ) + (set_local $var$20 + (get_local $var$23) + ) + (set_local $var$28 + (get_local $var$27) + ) + (loop $label$4 $label$5 + (block $label$6 + (if_else + (get_local $var$28) + (block $label$7 + (call $___fwritex + (get_local $var$22) + (i32.const 256) + (get_local $var$0) + ) + (set_local $var$5 + (i32.load align=4 + (get_local $var$0) + ) + ) + (set_local $var$8 + (get_local $var$5) + ) + ) + (set_local $var$8 + (get_local $var$10) + ) + ) + (set_local $var$24 + (i32.add + (get_local $var$20) + (i32.const -256) + ) + ) + (set_local $var$16 + (i32.gt_u + (i32.shr_u + (get_local $var$24) + (i32.const 0) + ) + (i32.const 255) + ) + ) + (set_local $var$12 + (i32.and + (get_local $var$8) + (i32.const 32) + ) + ) + (set_local $var$26 + (i32.eq + (get_local $var$12) + (i32.const 0) + ) + ) + (if_else + (get_local $var$16) + (block $label$8 + (set_local $var$10 + (get_local $var$8) + ) + (set_local $var$20 + (get_local $var$24) + ) + (set_local $var$28 + (get_local $var$26) + ) + ) + (br $label$4) + ) + (br $label$5) + ) + ) + (set_local $var$9 + (i32.and + (get_local $var$7) + (i32.const 255) + ) + ) + (if_else + (get_local $var$26) + (set_local $var$19 + (get_local $var$9) + ) + (br $label$1) + ) + ) + (if_else + (get_local $var$27) + (set_local $var$19 + (get_local $var$23) + ) + (br $label$1) + ) + ) + (call $___fwritex + (get_local $var$22) + (get_local $var$19) + (get_local $var$0) + ) + ) + ) + ) + (i32.store align=4 + (i32.const 8) + (get_local $var$30) + ) + (br $label$0) + ) + ) + (func $_malloc (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (local $var$19 i32) + (local $var$20 i32) + (local $var$21 i32) + (local $var$22 i32) + (local $var$23 i32) + (local $var$24 i32) + (local $var$25 i32) + (local $var$26 i32) + (local $var$27 i32) + (local $var$28 i32) + (local $var$29 i32) + (local $var$30 i32) + (local $var$31 i32) + (local $var$32 i32) + (local $var$33 i32) + (local $var$34 i32) + (local $var$35 i32) + (local $var$36 i32) + (local $var$37 i32) + (local $var$38 i32) + (local $var$39 i32) + (local $var$40 i32) + (local $var$41 i32) + (local $var$42 i32) + (local $var$43 i32) + (local $var$44 i32) + (local $var$45 i32) + (local $var$46 i32) + (local $var$47 i32) + (local $var$48 i32) + (local $var$49 i32) + (local $var$50 i32) + (local $var$51 i32) + (local $var$52 i32) + (local $var$53 i32) + (local $var$54 i32) + (local $var$55 i32) + (local $var$56 i32) + (local $var$57 i32) + (local $var$58 i32) + (local $var$59 i32) + (local $var$60 i32) + (local $var$61 i32) + (local $var$62 i32) + (local $var$63 i32) + (local $var$64 i32) + (local $var$65 i32) + (local $var$66 i32) + (local $var$67 i32) + (local $var$68 i32) + (local $var$69 i32) + (local $var$70 i32) + (local $var$71 i32) + (local $var$72 i32) + (local $var$73 i32) + (local $var$74 i32) + (local $var$75 i32) + (local $var$76 i32) + (local $var$77 i32) + (local $var$78 i32) + (local $var$79 i32) + (local $var$80 i32) + (local $var$81 i32) + (local $var$82 i32) + (local $var$83 i32) + (local $var$84 i32) + (local $var$85 i32) + (local $var$86 i32) + (local $var$87 i32) + (local $var$88 i32) + (local $var$89 i32) + (local $var$90 i32) + (local $var$91 i32) + (local $var$92 i32) + (local $var$93 i32) + (local $var$94 i32) + (local $var$95 i32) + (local $var$96 i32) + (local $var$97 i32) + (local $var$98 i32) + (local $var$99 i32) + (local $var$100 i32) + (local $var$101 i32) + (local $var$102 i32) + (local $var$103 i32) + (local $var$104 i32) + (local $var$105 i32) + (local $var$106 i32) + (local $var$107 i32) + (local $var$108 i32) + (local $var$109 i32) + (local $var$110 i32) + (local $var$111 i32) + (local $var$112 i32) + (local $var$113 i32) + (local $var$114 i32) + (local $var$115 i32) + (local $var$116 i32) + (local $var$117 i32) + (local $var$118 i32) + (local $var$119 i32) + (local $var$120 i32) + (local $var$121 i32) + (local $var$122 i32) + (local $var$123 i32) + (local $var$124 i32) + (local $var$125 i32) + (local $var$126 i32) + (local $var$127 i32) + (local $var$128 i32) + (local $var$129 i32) + (local $var$130 i32) + (local $var$131 i32) + (local $var$132 i32) + (local $var$133 i32) + (local $var$134 i32) + (local $var$135 i32) + (local $var$136 i32) + (local $var$137 i32) + (local $var$138 i32) + (local $var$139 i32) + (local $var$140 i32) + (local $var$141 i32) + (local $var$142 i32) + (local $var$143 i32) + (local $var$144 i32) + (local $var$145 i32) + (local $var$146 i32) + (local $var$147 i32) + (local $var$148 i32) + (local $var$149 i32) + (local $var$150 i32) + (local $var$151 i32) + (local $var$152 i32) + (local $var$153 i32) + (local $var$154 i32) + (local $var$155 i32) + (local $var$156 i32) + (local $var$157 i32) + (local $var$158 i32) + (local $var$159 i32) + (local $var$160 i32) + (local $var$161 i32) + (local $var$162 i32) + (local $var$163 i32) + (local $var$164 i32) + (local $var$165 i32) + (local $var$166 i32) + (local $var$167 i32) + (local $var$168 i32) + (local $var$169 i32) + (local $var$170 i32) + (local $var$171 i32) + (local $var$172 i32) + (local $var$173 i32) + (local $var$174 i32) + (local $var$175 i32) + (local $var$176 i32) + (local $var$177 i32) + (local $var$178 i32) + (local $var$179 i32) + (local $var$180 i32) + (local $var$181 i32) + (local $var$182 i32) + (local $var$183 i32) + (local $var$184 i32) + (local $var$185 i32) + (local $var$186 i32) + (local $var$187 i32) + (local $var$188 i32) + (local $var$189 i32) + (local $var$190 i32) + (local $var$191 i32) + (local $var$192 i32) + (local $var$193 i32) + (local $var$194 i32) + (local $var$195 i32) + (local $var$196 i32) + (local $var$197 i32) + (local $var$198 i32) + (local $var$199 i32) + (local $var$200 i32) + (local $var$201 i32) + (local $var$202 i32) + (local $var$203 i32) + (local $var$204 i32) + (local $var$205 i32) + (local $var$206 i32) + (local $var$207 i32) + (local $var$208 i32) + (local $var$209 i32) + (local $var$210 i32) + (local $var$211 i32) + (local $var$212 i32) + (local $var$213 i32) + (local $var$214 i32) + (local $var$215 i32) + (local $var$216 i32) + (local $var$217 i32) + (local $var$218 i32) + (local $var$219 i32) + (local $var$220 i32) + (local $var$221 i32) + (local $var$222 i32) + (local $var$223 i32) + (local $var$224 i32) + (local $var$225 i32) + (local $var$226 i32) + (local $var$227 i32) + (local $var$228 i32) + (local $var$229 i32) + (local $var$230 i32) + (local $var$231 i32) + (local $var$232 i32) + (local $var$233 i32) + (local $var$234 i32) + (local $var$235 i32) + (local $var$236 i32) + (local $var$237 i32) + (local $var$238 i32) + (local $var$239 i32) + (local $var$240 i32) + (local $var$241 i32) + (local $var$242 i32) + (local $var$243 i32) + (local $var$244 i32) + (local $var$245 i32) + (local $var$246 i32) + (local $var$247 i32) + (local $var$248 i32) + (local $var$249 i32) + (local $var$250 i32) + (local $var$251 i32) + (local $var$252 i32) + (local $var$253 i32) + (local $var$254 i32) + (local $var$255 i32) + (local $var$256 i32) + (local $var$257 i32) + (local $var$258 i32) + (local $var$259 i32) + (local $var$260 i32) + (local $var$261 i32) + (local $var$262 i32) + (local $var$263 i32) + (local $var$264 i32) + (local $var$265 i32) + (local $var$266 i32) + (local $var$267 i32) + (local $var$268 i32) + (local $var$269 i32) + (local $var$270 i32) + (local $var$271 i32) + (local $var$272 i32) + (local $var$273 i32) + (local $var$274 i32) + (local $var$275 i32) + (local $var$276 i32) + (local $var$277 i32) + (local $var$278 i32) + (local $var$279 i32) + (local $var$280 i32) + (local $var$281 i32) + (local $var$282 i32) + (local $var$283 i32) + (local $var$284 i32) + (local $var$285 i32) + (local $var$286 i32) + (local $var$287 i32) + (local $var$288 i32) + (local $var$289 i32) + (local $var$290 i32) + (local $var$291 i32) + (local $var$292 i32) + (local $var$293 i32) + (local $var$294 i32) + (local $var$295 i32) + (local $var$296 i32) + (local $var$297 i32) + (local $var$298 i32) + (local $var$299 i32) + (local $var$300 i32) + (local $var$301 i32) + (local $var$302 i32) + (local $var$303 i32) + (local $var$304 i32) + (local $var$305 i32) + (local $var$306 i32) + (local $var$307 i32) + (local $var$308 i32) + (local $var$309 i32) + (local $var$310 i32) + (local $var$311 i32) + (local $var$312 i32) + (local $var$313 i32) + (local $var$314 i32) + (local $var$315 i32) + (local $var$316 i32) + (local $var$317 i32) + (local $var$318 i32) + (local $var$319 i32) + (local $var$320 i32) + (local $var$321 i32) + (local $var$322 i32) + (local $var$323 i32) + (local $var$324 i32) + (local $var$325 i32) + (local $var$326 i32) + (local $var$327 i32) + (local $var$328 i32) + (local $var$329 i32) + (local $var$330 i32) + (local $var$331 i32) + (local $var$332 i32) + (local $var$333 i32) + (local $var$334 i32) + (local $var$335 i32) + (local $var$336 i32) + (local $var$337 i32) + (local $var$338 i32) + (local $var$339 i32) + (local $var$340 i32) + (local $var$341 i32) + (local $var$342 i32) + (local $var$343 i32) + (local $var$344 i32) + (local $var$345 i32) + (local $var$346 i32) + (local $var$347 i32) + (local $var$348 i32) + (local $var$349 i32) + (local $var$350 i32) + (local $var$351 i32) + (local $var$352 i32) + (local $var$353 i32) + (local $var$354 i32) + (local $var$355 i32) + (local $var$356 i32) + (local $var$357 i32) + (local $var$358 i32) + (local $var$359 i32) + (local $var$360 i32) + (local $var$361 i32) + (local $var$362 i32) + (local $var$363 i32) + (local $var$364 i32) + (local $var$365 i32) + (local $var$366 i32) + (local $var$367 i32) + (local $var$368 i32) + (local $var$369 i32) + (local $var$370 i32) + (local $var$371 i32) + (local $var$372 i32) + (local $var$373 i32) + (local $var$374 i32) + (local $var$375 i32) + (local $var$376 i32) + (local $var$377 i32) + (local $var$378 i32) + (local $var$379 i32) + (local $var$380 i32) + (local $var$381 i32) + (local $var$382 i32) + (local $var$383 i32) + (local $var$384 i32) + (local $var$385 i32) + (local $var$386 i32) + (local $var$387 i32) + (local $var$388 i32) + (local $var$389 i32) + (local $var$390 i32) + (local $var$391 i32) + (local $var$392 i32) + (local $var$393 i32) + (local $var$394 i32) + (local $var$395 i32) + (local $var$396 i32) + (local $var$397 i32) + (local $var$398 i32) + (local $var$399 i32) + (local $var$400 i32) + (local $var$401 i32) + (local $var$402 i32) + (local $var$403 i32) + (local $var$404 i32) + (local $var$405 i32) + (local $var$406 i32) + (local $var$407 i32) + (local $var$408 i32) + (local $var$409 i32) + (local $var$410 i32) + (local $var$411 i32) + (local $var$412 i32) + (local $var$413 i32) + (local $var$414 i32) + (local $var$415 i32) + (local $var$416 i32) + (local $var$417 i32) + (local $var$418 i32) + (local $var$419 i32) + (local $var$420 i32) + (local $var$421 i32) + (local $var$422 i32) + (local $var$423 i32) + (local $var$424 i32) + (local $var$425 i32) + (local $var$426 i32) + (local $var$427 i32) + (local $var$428 i32) + (local $var$429 i32) + (local $var$430 i32) + (local $var$431 i32) + (local $var$432 i32) + (local $var$433 i32) + (local $var$434 i32) + (local $var$435 i32) + (local $var$436 i32) + (local $var$437 i32) + (local $var$438 i32) + (local $var$439 i32) + (local $var$440 i32) + (local $var$441 i32) + (local $var$442 i32) + (local $var$443 i32) + (local $var$444 i32) + (local $var$445 i32) + (local $var$446 i32) + (local $var$447 i32) + (local $var$448 i32) + (local $var$449 i32) + (local $var$450 i32) + (local $var$451 i32) + (local $var$452 i32) + (local $var$453 i32) + (local $var$454 i32) + (local $var$455 i32) + (local $var$456 i32) + (local $var$457 i32) + (local $var$458 i32) + (local $var$459 i32) + (local $var$460 i32) + (local $var$461 i32) + (local $var$462 i32) + (local $var$463 i32) + (local $var$464 i32) + (local $var$465 i32) + (local $var$466 i32) + (local $var$467 i32) + (local $var$468 i32) + (local $var$469 i32) + (local $var$470 i32) + (local $var$471 i32) + (local $var$472 i32) + (local $var$473 i32) + (local $var$474 i32) + (local $var$475 i32) + (local $var$476 i32) + (local $var$477 i32) + (local $var$478 i32) + (local $var$479 i32) + (local $var$480 i32) + (local $var$481 i32) + (local $var$482 i32) + (local $var$483 i32) + (local $var$484 i32) + (local $var$485 i32) + (local $var$486 i32) + (local $var$487 i32) + (local $var$488 i32) + (local $var$489 i32) + (local $var$490 i32) + (local $var$491 i32) + (local $var$492 i32) + (local $var$493 i32) + (local $var$494 i32) + (local $var$495 i32) + (local $var$496 i32) + (local $var$497 i32) + (local $var$498 i32) + (local $var$499 i32) + (local $var$500 i32) + (local $var$501 i32) + (local $var$502 i32) + (local $var$503 i32) + (local $var$504 i32) + (local $var$505 i32) + (local $var$506 i32) + (local $var$507 i32) + (local $var$508 i32) + (local $var$509 i32) + (local $var$510 i32) + (local $var$511 i32) + (local $var$512 i32) + (local $var$513 i32) + (local $var$514 i32) + (local $var$515 i32) + (local $var$516 i32) + (local $var$517 i32) + (local $var$518 i32) + (local $var$519 i32) + (local $var$520 i32) + (local $var$521 i32) + (local $var$522 i32) + (local $var$523 i32) + (local $var$524 i32) + (local $var$525 i32) + (local $var$526 i32) + (local $var$527 i32) + (local $var$528 i32) + (local $var$529 i32) + (local $var$530 i32) + (local $var$531 i32) + (local $var$532 i32) + (local $var$533 i32) + (local $var$534 i32) + (local $var$535 i32) + (local $var$536 i32) + (local $var$537 i32) + (local $var$538 i32) + (local $var$539 i32) + (local $var$540 i32) + (local $var$541 i32) + (local $var$542 i32) + (local $var$543 i32) + (local $var$544 i32) + (local $var$545 i32) + (local $var$546 i32) + (local $var$547 i32) + (local $var$548 i32) + (local $var$549 i32) + (local $var$550 i32) + (local $var$551 i32) + (local $var$552 i32) + (local $var$553 i32) + (local $var$554 i32) + (local $var$555 i32) + (local $var$556 i32) + (local $var$557 i32) + (local $var$558 i32) + (local $var$559 i32) + (local $var$560 i32) + (local $var$561 i32) + (local $var$562 i32) + (local $var$563 i32) + (local $var$564 i32) + (local $var$565 i32) + (local $var$566 i32) + (local $var$567 i32) + (local $var$568 i32) + (local $var$569 i32) + (local $var$570 i32) + (local $var$571 i32) + (local $var$572 i32) + (local $var$573 i32) + (local $var$574 i32) + (local $var$575 i32) + (local $var$576 i32) + (local $var$577 i32) + (local $var$578 i32) + (local $var$579 i32) + (local $var$580 i32) + (local $var$581 i32) + (local $var$582 i32) + (local $var$583 i32) + (local $var$584 i32) + (local $var$585 i32) + (local $var$586 i32) + (local $var$587 i32) + (local $var$588 i32) + (local $var$589 i32) + (local $var$590 i32) + (local $var$591 i32) + (local $var$592 i32) + (local $var$593 i32) + (local $var$594 i32) + (local $var$595 i32) + (local $var$596 i32) + (local $var$597 i32) + (local $var$598 i32) + (local $var$599 i32) + (local $var$600 i32) + (local $var$601 i32) + (local $var$602 i32) + (local $var$603 i32) + (local $var$604 i32) + (local $var$605 i32) + (local $var$606 i32) + (local $var$607 i32) + (local $var$608 i32) + (local $var$609 i32) + (local $var$610 i32) + (local $var$611 i32) + (local $var$612 i32) + (local $var$613 i32) + (local $var$614 i32) + (local $var$615 i32) + (local $var$616 i32) + (local $var$617 i32) + (local $var$618 i32) + (local $var$619 i32) + (local $var$620 i32) + (local $var$621 i32) + (local $var$622 i32) + (local $var$623 i32) + (local $var$624 i32) + (local $var$625 i32) + (local $var$626 i32) + (local $var$627 i32) + (local $var$628 i32) + (local $var$629 i32) + (local $var$630 i32) + (local $var$631 i32) + (local $var$632 i32) + (local $var$633 i32) + (local $var$634 i32) + (local $var$635 i32) + (local $var$636 i32) + (local $var$637 i32) + (local $var$638 i32) + (local $var$639 i32) + (local $var$640 i32) + (local $var$641 i32) + (local $var$642 i32) + (local $var$643 i32) + (local $var$644 i32) + (local $var$645 i32) + (local $var$646 i32) + (local $var$647 i32) + (local $var$648 i32) + (local $var$649 i32) + (local $var$650 i32) + (local $var$651 i32) + (local $var$652 i32) + (local $var$653 i32) + (local $var$654 i32) + (local $var$655 i32) + (local $var$656 i32) + (local $var$657 i32) + (local $var$658 i32) + (local $var$659 i32) + (local $var$660 i32) + (local $var$661 i32) + (local $var$662 i32) + (local $var$663 i32) + (local $var$664 i32) + (local $var$665 i32) + (local $var$666 i32) + (local $var$667 i32) + (local $var$668 i32) + (local $var$669 i32) + (local $var$670 i32) + (local $var$671 i32) + (local $var$672 i32) + (local $var$673 i32) + (local $var$674 i32) + (local $var$675 i32) + (local $var$676 i32) + (local $var$677 i32) + (local $var$678 i32) + (local $var$679 i32) + (local $var$680 i32) + (local $var$681 i32) + (local $var$682 i32) + (local $var$683 i32) + (local $var$684 i32) + (local $var$685 i32) + (local $var$686 i32) + (local $var$687 i32) + (local $var$688 i32) + (local $var$689 i32) + (local $var$690 i32) + (local $var$691 i32) + (local $var$692 i32) + (local $var$693 i32) + (local $var$694 i32) + (local $var$695 i32) + (local $var$696 i32) + (local $var$697 i32) + (local $var$698 i32) + (local $var$699 i32) + (local $var$700 i32) + (local $var$701 i32) + (local $var$702 i32) + (local $var$703 i32) + (local $var$704 i32) + (local $var$705 i32) + (local $var$706 i32) + (local $var$707 i32) + (local $var$708 i32) + (local $var$709 i32) + (local $var$710 i32) + (local $var$711 i32) + (local $var$712 i32) + (local $var$713 i32) + (local $var$714 i32) + (local $var$715 i32) + (local $var$716 i32) + (local $var$717 i32) + (local $var$718 i32) + (local $var$719 i32) + (local $var$720 i32) + (local $var$721 i32) + (local $var$722 i32) + (local $var$723 i32) + (local $var$724 i32) + (local $var$725 i32) + (local $var$726 i32) + (local $var$727 i32) + (local $var$728 i32) + (local $var$729 i32) + (local $var$730 i32) + (local $var$731 i32) + (local $var$732 i32) + (local $var$733 i32) + (local $var$734 i32) + (local $var$735 i32) + (local $var$736 i32) + (local $var$737 i32) + (local $var$738 i32) + (local $var$739 i32) + (local $var$740 i32) + (local $var$741 i32) + (local $var$742 i32) + (local $var$743 i32) + (local $var$744 i32) + (local $var$745 i32) + (local $var$746 i32) + (local $var$747 i32) + (local $var$748 i32) + (local $var$749 i32) + (local $var$750 i32) + (local $var$751 i32) + (local $var$752 i32) + (local $var$753 i32) + (local $var$754 i32) + (local $var$755 i32) + (local $var$756 i32) + (local $var$757 i32) + (local $var$758 i32) + (local $var$759 i32) + (local $var$760 i32) + (local $var$761 i32) + (local $var$762 i32) + (local $var$763 i32) + (local $var$764 i32) + (local $var$765 i32) + (local $var$766 i32) + (local $var$767 i32) + (local $var$768 i32) + (local $var$769 i32) + (local $var$770 i32) + (local $var$771 i32) + (local $var$772 i32) + (local $var$773 i32) + (local $var$774 i32) + (local $var$775 i32) + (local $var$776 i32) + (local $var$777 i32) + (local $var$778 i32) + (local $var$779 i32) + (local $var$780 i32) + (local $var$781 i32) + (local $var$782 i32) + (local $var$783 i32) + (local $var$784 i32) + (local $var$785 i32) + (local $var$786 i32) + (local $var$787 i32) + (local $var$788 i32) + (local $var$789 i32) + (local $var$790 i32) + (local $var$791 i32) + (local $var$792 i32) + (local $var$793 i32) + (local $var$794 i32) + (local $var$795 i32) + (local $var$796 i32) + (local $var$797 i32) + (local $var$798 i32) + (local $var$799 i32) + (local $var$800 i32) + (local $var$801 i32) + (local $var$802 i32) + (local $var$803 i32) + (local $var$804 i32) + (local $var$805 i32) + (local $var$806 i32) + (local $var$807 i32) + (local $var$808 i32) + (local $var$809 i32) + (local $var$810 i32) + (local $var$811 i32) + (local $var$812 i32) + (local $var$813 i32) + (local $var$814 i32) + (local $var$815 i32) + (local $var$816 i32) + (local $var$817 i32) + (local $var$818 i32) + (local $var$819 i32) + (local $var$820 i32) + (local $var$821 i32) + (local $var$822 i32) + (local $var$823 i32) + (local $var$824 i32) + (local $var$825 i32) + (local $var$826 i32) + (local $var$827 i32) + (local $var$828 i32) + (local $var$829 i32) + (local $var$830 i32) + (local $var$831 i32) + (local $var$832 i32) + (local $var$833 i32) + (local $var$834 i32) + (local $var$835 i32) + (local $var$836 i32) + (local $var$837 i32) + (local $var$838 i32) + (local $var$839 i32) + (local $var$840 i32) + (local $var$841 i32) + (local $var$842 i32) + (local $var$843 i32) + (local $var$844 i32) + (local $var$845 i32) + (local $var$846 i32) + (local $var$847 i32) + (local $var$848 i32) + (local $var$849 i32) + (local $var$850 i32) + (local $var$851 i32) + (local $var$852 i32) + (local $var$853 i32) + (local $var$854 i32) + (local $var$855 i32) + (local $var$856 i32) + (local $var$857 i32) + (local $var$858 i32) + (local $var$859 i32) + (local $var$860 i32) + (local $var$861 i32) + (local $var$862 i32) + (local $var$863 i32) + (local $var$864 i32) + (local $var$865 i32) + (local $var$866 i32) + (local $var$867 i32) + (local $var$868 i32) + (local $var$869 i32) + (local $var$870 i32) + (local $var$871 i32) + (local $var$872 i32) + (local $var$873 i32) + (local $var$874 i32) + (local $var$875 i32) + (local $var$876 i32) + (local $var$877 i32) + (local $var$878 i32) + (local $var$879 i32) + (local $var$880 i32) + (local $var$881 i32) + (local $var$882 i32) + (local $var$883 i32) + (local $var$884 i32) + (local $var$885 i32) + (local $var$886 i32) + (local $var$887 i32) + (local $var$888 i32) + (local $var$889 i32) + (local $var$890 i32) + (local $var$891 i32) + (local $var$892 i32) + (local $var$893 i32) + (local $var$894 i32) + (local $var$895 i32) + (local $var$896 i32) + (local $var$897 i32) + (local $var$898 i32) + (local $var$899 i32) + (local $var$900 i32) + (local $var$901 i32) + (local $var$902 i32) + (local $var$903 i32) + (local $var$904 i32) + (local $var$905 i32) + (local $var$906 i32) + (local $var$907 i32) + (local $var$908 i32) + (local $var$909 i32) + (local $var$910 i32) + (local $var$911 i32) + (local $var$912 i32) + (local $var$913 i32) + (local $var$914 i32) + (local $var$915 i32) + (local $var$916 i32) + (local $var$917 i32) + (local $var$918 i32) + (local $var$919 i32) + (local $var$920 i32) + (local $var$921 i32) + (local $var$922 i32) + (local $var$923 i32) + (local $var$924 i32) + (local $var$925 i32) + (local $var$926 i32) + (local $var$927 i32) + (local $var$928 i32) + (local $var$929 i32) + (local $var$930 i32) + (local $var$931 i32) + (local $var$932 i32) + (local $var$933 i32) + (local $var$934 i32) + (local $var$935 i32) + (local $var$936 i32) + (local $var$937 i32) + (local $var$938 i32) + (local $var$939 i32) + (local $var$940 i32) + (local $var$941 i32) + (local $var$942 i32) + (local $var$943 i32) + (local $var$944 i32) + (local $var$945 i32) + (local $var$946 i32) + (local $var$947 i32) + (local $var$948 i32) + (local $var$949 i32) + (local $var$950 i32) + (local $var$951 i32) + (local $var$952 i32) + (local $var$953 i32) + (local $var$954 i32) + (local $var$955 i32) + (local $var$956 i32) + (local $var$957 i32) + (local $var$958 i32) + (local $var$959 i32) + (local $var$960 i32) + (local $var$961 i32) + (local $var$962 i32) + (local $var$963 i32) + (local $var$964 i32) + (local $var$965 i32) + (local $var$966 i32) + (local $var$967 i32) + (local $var$968 i32) + (local $var$969 i32) + (local $var$970 i32) + (local $var$971 i32) + (local $var$972 i32) + (local $var$973 i32) + (local $var$974 i32) + (local $var$975 i32) + (local $var$976 i32) + (local $var$977 i32) + (local $var$978 i32) + (local $var$979 i32) + (local $var$980 i32) + (local $var$981 i32) + (local $var$982 i32) + (local $var$983 i32) + (local $var$984 i32) + (local $var$985 i32) + (local $var$986 i32) + (local $var$987 i32) + (local $var$988 i32) + (local $var$989 i32) + (local $var$990 i32) + (local $var$991 i32) + (local $var$992 i32) + (local $var$993 i32) + (local $var$994 i32) + (local $var$995 i32) + (local $var$996 i32) + (local $var$997 i32) + (local $var$998 i32) + (local $var$999 i32) + (local $var$1000 i32) + (local $var$1001 i32) + (local $var$1002 i32) + (local $var$1003 i32) + (local $var$1004 i32) + (local $var$1005 i32) + (local $var$1006 i32) + (local $var$1007 i32) + (local $var$1008 i32) + (local $var$1009 i32) + (local $var$1010 i32) + (local $var$1011 i32) + (local $var$1012 i32) + (local $var$1013 i32) + (local $var$1014 i32) + (local $var$1015 i32) + (local $var$1016 i32) + (local $var$1017 i32) + (local $var$1018 i32) + (local $var$1019 i32) + (local $var$1020 i32) + (local $var$1021 i32) + (local $var$1022 i32) + (local $var$1023 i32) + (local $var$1024 i32) + (local $var$1025 i32) + (local $var$1026 i32) + (local $var$1027 i32) + (local $var$1028 i32) + (local $var$1029 i32) + (local $var$1030 i32) + (local $var$1031 i32) + (local $var$1032 i32) + (local $var$1033 i32) + (local $var$1034 i32) + (local $var$1035 i32) + (local $var$1036 i32) + (local $var$1037 i32) + (local $var$1038 i32) + (local $var$1039 i32) + (local $var$1040 i32) + (local $var$1041 i32) + (local $var$1042 i32) + (local $var$1043 i32) + (local $var$1044 i32) + (local $var$1045 i32) + (local $var$1046 i32) + (local $var$1047 i32) + (local $var$1048 i32) + (local $var$1049 i32) + (local $var$1050 i32) + (local $var$1051 i32) + (local $var$1052 i32) + (local $var$1053 i32) + (local $var$1054 i32) + (local $var$1055 i32) + (local $var$1056 i32) + (local $var$1057 i32) + (local $var$1058 i32) + (local $var$1059 i32) + (local $var$1060 i32) + (local $var$1061 i32) + (local $var$1062 i32) + (local $var$1063 i32) + (local $var$1064 i32) + (local $var$1065 i32) + (local $var$1066 i32) + (local $var$1067 i32) + (local $var$1068 i32) + (local $var$1069 i32) + (local $var$1070 i32) + (local $var$1071 i32) + (local $var$1072 i32) + (local $var$1073 i32) + (local $var$1074 i32) + (local $var$1075 i32) + (local $var$1076 i32) + (local $var$1077 i32) + (local $var$1078 i32) + (local $var$1079 i32) + (local $var$1080 i32) + (local $var$1081 i32) + (local $var$1082 i32) + (local $var$1083 i32) + (local $var$1084 i32) + (local $var$1085 i32) + (local $var$1086 i32) + (local $var$1087 i32) + (local $var$1088 i32) + (local $var$1089 i32) + (local $var$1090 i32) + (local $var$1091 i32) + (local $var$1092 i32) + (local $var$1093 i32) + (local $var$1094 i32) + (local $var$1095 i32) + (local $var$1096 i32) + (local $var$1097 i32) + (local $var$1098 i32) + (local $var$1099 i32) + (local $var$1100 i32) + (local $var$1101 i32) + (local $var$1102 i32) + (local $var$1103 i32) + (local $var$1104 i32) + (local $var$1105 i32) + (local $var$1106 i32) + (local $var$1107 i32) + (local $var$1108 i32) + (local $var$1109 i32) + (local $var$1110 i32) + (local $var$1111 i32) + (local $var$1112 i32) + (local $var$1113 i32) + (local $var$1114 i32) + (local $var$1115 i32) + (local $var$1116 i32) + (local $var$1117 i32) + (local $var$1118 i32) + (local $var$1119 i32) + (local $var$1120 i32) + (local $var$1121 i32) + (local $var$1122 i32) + (local $var$1123 i32) + (local $var$1124 i32) + (local $var$1125 i32) + (local $var$1126 i32) + (local $var$1127 i32) + (local $var$1128 i32) + (local $var$1129 i32) + (local $var$1130 i32) + (local $var$1131 i32) + (local $var$1132 i32) + (local $var$1133 i32) + (local $var$1134 i32) + (local $var$1135 i32) + (local $var$1136 i32) + (local $var$1137 i32) + (local $var$1138 i32) + (local $var$1139 i32) + (local $var$1140 i32) + (local $var$1141 i32) + (local $var$1142 i32) + (local $var$1143 i32) + (local $var$1144 i32) + (local $var$1145 i32) + (local $var$1146 i32) + (local $var$1147 i32) + (local $var$1148 i32) + (local $var$1149 i32) + (local $var$1150 i32) + (local $var$1151 i32) + (local $var$1152 i32) + (local $var$1153 i32) + (local $var$1154 i32) + (local $var$1155 i32) + (local $var$1156 i32) + (local $var$1157 i32) + (local $var$1158 i32) + (local $var$1159 i32) + (local $var$1160 i32) + (local $var$1161 i32) + (local $var$1162 i32) + (local $var$1163 i32) + (local $var$1164 i32) + (local $var$1165 i32) + (local $var$1166 i32) + (local $var$1167 i32) + (local $var$1168 i32) + (local $var$1169 i32) + (local $var$1170 i32) + (local $var$1171 i32) + (local $var$1172 i32) + (local $var$1173 i32) + (local $var$1174 i32) + (local $var$1175 i32) + (local $var$1176 i32) + (local $var$1177 i32) + (local $var$1178 i32) + (local $var$1179 i32) + (local $var$1180 i32) + (local $var$1181 i32) + (local $var$1182 i32) + (local $var$1183 i32) + (local $var$1184 i32) + (local $var$1185 i32) + (local $var$1186 i32) + (local $var$1187 i32) + (local $var$1188 i32) + (local $var$1189 i32) + (block $label$0 + (set_local $var$1189 + (i32.load align=4 + (i32.const 8) + ) + ) + (set_local $var$563 + (i32.lt_u + (i32.shr_u + (get_local $var$0) + (i32.const 0) + ) + (i32.const 245) + ) + ) + (block $label$1 + (if_else + (get_local $var$563) + (block $label$2 + (set_local $var$574 + (i32.lt_u + (i32.shr_u + (get_local $var$0) + (i32.const 0) + ) + (i32.const 11) + ) + ) + (set_local $var$326 + (i32.add + (get_local $var$0) + (i32.const 11) + ) + ) + (set_local $var$366 + (i32.and + (get_local $var$326) + (i32.const -8) + ) + ) + (set_local $var$761 + (if_else + (get_local $var$574) + (i32.const 16) + (get_local $var$366) + ) + ) + (set_local $var$1013 + (i32.shr_u + (get_local $var$761) + (i32.const 3) + ) + ) + (set_local $var$15 + (i32.load align=4 + (i32.const 176) + ) + ) + (set_local $var$1039 + (i32.shr_u + (get_local $var$15) + (get_local $var$1013) + ) + ) + (set_local $var$420 + (i32.and + (get_local $var$1039) + (i32.const 3) + ) + ) + (set_local $var$719 + (i32.eq + (get_local $var$420) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$719) + (i32.const 0) + ) + (block $label$3 + (set_local $var$858 + (i32.and + (get_local $var$1039) + (i32.const 1) + ) + ) + (set_local $var$438 + (i32.xor + (get_local $var$858) + (i32.const 1) + ) + ) + (set_local $var$357 + (i32.add + (get_local $var$438) + (get_local $var$1013) + ) + ) + (set_local $var$961 + (i32.shl + (get_local $var$357) + (i32.const 1) + ) + ) + (set_local $var$453 + (i32.add + (i32.const 216) + (i32.shl + (get_local $var$961) + (i32.const 2) + ) + ) + ) + (set_local $var$16 + (i32.add + (get_local $var$453) + (i32.const 8) + ) + ) + (set_local $var$127 + (i32.load align=4 + (get_local $var$16) + ) + ) + (set_local $var$806 + (i32.add + (get_local $var$127) + (i32.const 8) + ) + ) + (set_local $var$147 + (i32.load align=4 + (get_local $var$806) + ) + ) + (set_local $var$577 + (i32.eq + (get_local $var$453) + (get_local $var$147) + ) + ) + (block $label$4 + (if_else + (get_local $var$577) + (block $label$5 + (set_local $var$970 + (i32.shl + (i32.const 1) + (get_local $var$357) + ) + ) + (set_local $var$864 + (i32.xor + (get_local $var$970) + (i32.const -1) + ) + ) + (set_local $var$385 + (i32.and + (get_local $var$15) + (get_local $var$864) + ) + ) + (i32.store align=4 + (i32.const 176) + (get_local $var$385) + ) + ) + (block $label$6 + (set_local $var$158 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$619 + (i32.lt_u + (i32.shr_u + (get_local $var$147) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$158) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$619) + (call_import $_abort) + ) + (set_local $var$516 + (i32.add + (get_local $var$147) + (i32.const 12) + ) + ) + (set_local $var$169 + (i32.load align=4 + (get_local $var$516) + ) + ) + (set_local $var$631 + (i32.eq + (get_local $var$169) + (get_local $var$127) + ) + ) + (if_else + (get_local $var$631) + (block $label$7 + (i32.store align=4 + (get_local $var$516) + (get_local $var$453) + ) + (i32.store align=4 + (get_local $var$16) + (get_local $var$147) + ) + (br $label$4) + ) + (call_import $_abort) + ) + ) + ) + ) + (set_local $var$978 + (i32.shl + (get_local $var$357) + (i32.const 3) + ) + ) + (set_local $var$908 + (i32.or + (get_local $var$978) + (i32.const 3) + ) + ) + (set_local $var$807 + (i32.add + (get_local $var$127) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$807) + (get_local $var$908) + ) + (set_local $var$263 + (i32.add + (get_local $var$127) + (get_local $var$978) + ) + ) + (set_local $var$829 + (i32.add + (get_local $var$263) + (i32.const 4) + ) + ) + (set_local $var$180 + (i32.load align=4 + (get_local $var$829) + ) + ) + (set_local $var$910 + (i32.or + (get_local $var$180) + (i32.const 1) + ) + ) + (i32.store align=4 + (get_local $var$829) + (get_local $var$910) + ) + (set_local $var$949 + (get_local $var$806) + ) + (br $label$0 + (get_local $var$949) + ) + ) + ) + (set_local $var$191 + (i32.load align=4 + (i32.const 184) + ) + ) + (set_local $var$681 + (i32.gt_u + (i32.shr_u + (get_local $var$761) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$191) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$681) + (block $label$8 + (set_local $var$685 + (i32.eq + (get_local $var$1039) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$685) + (i32.const 0) + ) + (block $label$9 + (set_local $var$995 + (i32.shl + (get_local $var$1039) + (get_local $var$1013) + ) + ) + (set_local $var$997 + (i32.shl + (i32.const 2) + (get_local $var$1013) + ) + ) + (set_local $var$1100 + (i32.sub + (i32.const 0) + (get_local $var$997) + ) + ) + (set_local $var$922 + (i32.or + (get_local $var$997) + (get_local $var$1100) + ) + ) + (set_local $var$422 + (i32.and + (get_local $var$995) + (get_local $var$922) + ) + ) + (set_local $var$1145 + (i32.sub + (i32.const 0) + (get_local $var$422) + ) + ) + (set_local $var$424 + (i32.and + (get_local $var$422) + (get_local $var$1145) + ) + ) + (set_local $var$1146 + (i32.add + (get_local $var$424) + (i32.const -1) + ) + ) + (set_local $var$1052 + (i32.shr_u + (get_local $var$1146) + (i32.const 12) + ) + ) + (set_local $var$425 + (i32.and + (get_local $var$1052) + (i32.const 16) + ) + ) + (set_local $var$1053 + (i32.shr_u + (get_local $var$1146) + (get_local $var$425) + ) + ) + (set_local $var$1054 + (i32.shr_u + (get_local $var$1053) + (i32.const 5) + ) + ) + (set_local $var$426 + (i32.and + (get_local $var$1054) + (i32.const 8) + ) + ) + (set_local $var$346 + (i32.or + (get_local $var$426) + (get_local $var$425) + ) + ) + (set_local $var$1057 + (i32.shr_u + (get_local $var$1053) + (get_local $var$426) + ) + ) + (set_local $var$1058 + (i32.shr_u + (get_local $var$1057) + (i32.const 2) + ) + ) + (set_local $var$429 + (i32.and + (get_local $var$1058) + (i32.const 4) + ) + ) + (set_local $var$348 + (i32.or + (get_local $var$346) + (get_local $var$429) + ) + ) + (set_local $var$1059 + (i32.shr_u + (get_local $var$1057) + (get_local $var$429) + ) + ) + (set_local $var$1060 + (i32.shr_u + (get_local $var$1059) + (i32.const 1) + ) + ) + (set_local $var$430 + (i32.and + (get_local $var$1060) + (i32.const 2) + ) + ) + (set_local $var$350 + (i32.or + (get_local $var$348) + (get_local $var$430) + ) + ) + (set_local $var$1062 + (i32.shr_u + (get_local $var$1059) + (get_local $var$430) + ) + ) + (set_local $var$1063 + (i32.shr_u + (get_local $var$1062) + (i32.const 1) + ) + ) + (set_local $var$434 + (i32.and + (get_local $var$1063) + (i32.const 1) + ) + ) + (set_local $var$351 + (i32.or + (get_local $var$350) + (get_local $var$434) + ) + ) + (set_local $var$1064 + (i32.shr_u + (get_local $var$1062) + (get_local $var$434) + ) + ) + (set_local $var$352 + (i32.add + (get_local $var$351) + (get_local $var$1064) + ) + ) + (set_local $var$1004 + (i32.shl + (get_local $var$352) + (i32.const 1) + ) + ) + (set_local $var$506 + (i32.add + (i32.const 216) + (i32.shl + (get_local $var$1004) + (i32.const 2) + ) + ) + ) + (set_local $var$202 + (i32.add + (get_local $var$506) + (i32.const 8) + ) + ) + (set_local $var$213 + (i32.load align=4 + (get_local $var$202) + ) + ) + (set_local $var$803 + (i32.add + (get_local $var$213) + (i32.const 8) + ) + ) + (set_local $var$17 + (i32.load align=4 + (get_local $var$803) + ) + ) + (set_local $var$738 + (i32.eq + (get_local $var$506) + (get_local $var$17) + ) + ) + (block $label$10 + (if_else + (get_local $var$738) + (block $label$11 + (set_local $var$1006 + (i32.shl + (i32.const 1) + (get_local $var$352) + ) + ) + (set_local $var$867 + (i32.xor + (get_local $var$1006) + (i32.const -1) + ) + ) + (set_local $var$442 + (i32.and + (get_local $var$15) + (get_local $var$867) + ) + ) + (i32.store align=4 + (i32.const 176) + (get_local $var$442) + ) + (set_local $var$50 + (get_local $var$191) + ) + ) + (block $label$12 + (set_local $var$28 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$741 + (i32.lt_u + (i32.shr_u + (get_local $var$17) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$28) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$741) + (call_import $_abort) + ) + (set_local $var$547 + (i32.add + (get_local $var$17) + (i32.const 12) + ) + ) + (set_local $var$39 + (i32.load align=4 + (get_local $var$547) + ) + ) + (set_local $var$743 + (i32.eq + (get_local $var$39) + (get_local $var$213) + ) + ) + (if_else + (get_local $var$743) + (block $label$13 + (i32.store align=4 + (get_local $var$547) + (get_local $var$506) + ) + (i32.store align=4 + (get_local $var$202) + (get_local $var$17) + ) + (set_local $var$3 + (i32.load align=4 + (i32.const 184) + ) + ) + (set_local $var$50 + (get_local $var$3) + ) + (br $label$10) + ) + (call_import $_abort) + ) + ) + ) + ) + (set_local $var$1011 + (i32.shl + (get_local $var$352) + (i32.const 3) + ) + ) + (set_local $var$1159 + (i32.sub + (get_local $var$1011) + (get_local $var$761) + ) + ) + (set_local $var$924 + (i32.or + (get_local $var$761) + (i32.const 3) + ) + ) + (set_local $var$845 + (i32.add + (get_local $var$213) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$845) + (get_local $var$924) + ) + (set_local $var$311 + (i32.add + (get_local $var$213) + (get_local $var$761) + ) + ) + (set_local $var$925 + (i32.or + (get_local $var$1159) + (i32.const 1) + ) + ) + (set_local $var$846 + (i32.add + (get_local $var$311) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$846) + (get_local $var$925) + ) + (set_local $var$312 + (i32.add + (get_local $var$311) + (get_local $var$1159) + ) + ) + (i32.store align=4 + (get_local $var$312) + (get_local $var$1159) + ) + (set_local $var$760 + (i32.eq + (get_local $var$50) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$760) + (i32.const 0) + ) + (block $label$14 + (set_local $var$61 + (i32.load align=4 + (i32.const 196) + ) + ) + (set_local $var$1018 + (i32.shr_u + (get_local $var$50) + (i32.const 3) + ) + ) + (set_local $var$967 + (i32.shl + (get_local $var$1018) + (i32.const 1) + ) + ) + (set_local $var$459 + (i32.add + (i32.const 216) + (i32.shl + (get_local $var$967) + (i32.const 2) + ) + ) + ) + (set_local $var$72 + (i32.load align=4 + (i32.const 176) + ) + ) + (set_local $var$968 + (i32.shl + (i32.const 1) + (get_local $var$1018) + ) + ) + (set_local $var$378 + (i32.and + (get_local $var$72) + (get_local $var$968) + ) + ) + (set_local $var$1169 + (i32.eq + (get_local $var$378) + (i32.const 0) + ) + ) + (if_else + (get_local $var$1169) + (block $label$15 + (set_local $var$893 + (i32.or + (get_local $var$72) + (get_local $var$968) + ) + ) + (i32.store align=4 + (i32.const 176) + (get_local $var$893) + ) + (set_local $var$13 + (i32.add + (get_local $var$459) + (i32.const 8) + ) + ) + (set_local $var$12 + (get_local $var$13) + ) + (set_local $var$225 + (get_local $var$459) + ) + ) + (block $label$16 + (set_local $var$83 + (i32.add + (get_local $var$459) + (i32.const 8) + ) + ) + (set_local $var$94 + (i32.load align=4 + (get_local $var$83) + ) + ) + (set_local $var$105 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$588 + (i32.lt_u + (i32.shr_u + (get_local $var$94) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$105) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$588) + (call_import $_abort) + (block $label$17 + (set_local $var$12 + (get_local $var$83) + ) + (set_local $var$225 + (get_local $var$94) + ) + ) + ) + ) + ) + (i32.store align=4 + (get_local $var$12) + (get_local $var$61) + ) + (set_local $var$522 + (i32.add + (get_local $var$225) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$522) + (get_local $var$61) + ) + (set_local $var$783 + (i32.add + (get_local $var$61) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$783) + (get_local $var$225) + ) + (set_local $var$523 + (i32.add + (get_local $var$61) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$523) + (get_local $var$459) + ) + ) + ) + (i32.store align=4 + (i32.const 184) + (get_local $var$1159) + ) + (i32.store align=4 + (i32.const 196) + (get_local $var$311) + ) + (set_local $var$949 + (get_local $var$803) + ) + (br $label$0 + (get_local $var$949) + ) + ) + ) + (set_local $var$116 + (i32.load align=4 + (i32.const 180) + ) + ) + (set_local $var$601 + (i32.eq + (get_local $var$116) + (i32.const 0) + ) + ) + (if_else + (get_local $var$601) + (set_local $var$857 + (get_local $var$761) + ) + (block $label$18 + (set_local $var$1101 + (i32.sub + (i32.const 0) + (get_local $var$116) + ) + ) + (set_local $var$367 + (i32.and + (get_local $var$116) + (get_local $var$1101) + ) + ) + (set_local $var$1126 + (i32.add + (get_local $var$367) + (i32.const -1) + ) + ) + (set_local $var$1014 + (i32.shr_u + (get_local $var$1126) + (i32.const 12) + ) + ) + (set_local $var$403 + (i32.and + (get_local $var$1014) + (i32.const 16) + ) + ) + (set_local $var$1050 + (i32.shr_u + (get_local $var$1126) + (get_local $var$403) + ) + ) + (set_local $var$1055 + (i32.shr_u + (get_local $var$1050) + (i32.const 5) + ) + ) + (set_local $var$431 + (i32.and + (get_local $var$1055) + (i32.const 8) + ) + ) + (set_local $var$259 + (i32.or + (get_local $var$431) + (get_local $var$403) + ) + ) + (set_local $var$1066 + (i32.shr_u + (get_local $var$1050) + (get_local $var$431) + ) + ) + (set_local $var$1074 + (i32.shr_u + (get_local $var$1066) + (i32.const 2) + ) + ) + (set_local $var$451 + (i32.and + (get_local $var$1074) + (i32.const 4) + ) + ) + (set_local $var$313 + (i32.or + (get_local $var$259) + (get_local $var$451) + ) + ) + (set_local $var$1019 + (i32.shr_u + (get_local $var$1066) + (get_local $var$451) + ) + ) + (set_local $var$1022 + (i32.shr_u + (get_local $var$1019) + (i32.const 1) + ) + ) + (set_local $var$382 + (i32.and + (get_local $var$1022) + (i32.const 2) + ) + ) + (set_local $var$317 + (i32.or + (get_local $var$313) + (get_local $var$382) + ) + ) + (set_local $var$1024 + (i32.shr_u + (get_local $var$1019) + (get_local $var$382) + ) + ) + (set_local $var$1025 + (i32.shr_u + (get_local $var$1024) + (i32.const 1) + ) + ) + (set_local $var$387 + (i32.and + (get_local $var$1025) + (i32.const 1) + ) + ) + (set_local $var$324 + (i32.or + (get_local $var$317) + (get_local $var$387) + ) + ) + (set_local $var$1027 + (i32.shr_u + (get_local $var$1024) + (get_local $var$387) + ) + ) + (set_local $var$327 + (i32.add + (get_local $var$324) + (get_local $var$1027) + ) + ) + (set_local $var$454 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$327) + (i32.const 2) + ) + ) + ) + (set_local $var$128 + (i32.load align=4 + (get_local $var$454) + ) + ) + (set_local $var$808 + (i32.add + (get_local $var$128) + (i32.const 4) + ) + ) + (set_local $var$138 + (i32.load align=4 + (get_local $var$808) + ) + ) + (set_local $var$392 + (i32.and + (get_local $var$138) + (i32.const -8) + ) + ) + (set_local $var$1127 + (i32.sub + (get_local $var$392) + (get_local $var$761) + ) + ) + (set_local $var$950 + (get_local $var$1127) + ) + (set_local $var$1161 + (get_local $var$128) + ) + (set_local $var$1180 + (get_local $var$128) + ) + (loop $label$19 $label$20 + (block $label$21 + (set_local $var$488 + (i32.add + (get_local $var$1161) + (i32.const 16) + ) + ) + (set_local $var$139 + (i32.load align=4 + (get_local $var$488) + ) + ) + (set_local $var$564 + (i32.eq + (get_local $var$139) + (i32.const 0) + ) + ) + (if_else + (get_local $var$564) + (block $label$22 + (set_local $var$492 + (i32.add + (get_local $var$1161) + (i32.const 20) + ) + ) + (set_local $var$140 + (i32.load align=4 + (get_local $var$492) + ) + ) + (set_local $var$678 + (i32.eq + (get_local $var$140) + (i32.const 0) + ) + ) + (if_else + (get_local $var$678) + (block $label$23 + (set_local $var$952 + (get_local $var$950) + ) + (set_local $var$1182 + (get_local $var$1180) + ) + (br $label$19) + ) + (set_local $var$777 + (get_local $var$140) + ) + ) + ) + (set_local $var$777 + (get_local $var$139) + ) + ) + (set_local $var$836 + (i32.add + (get_local $var$777) + (i32.const 4) + ) + ) + (set_local $var$141 + (i32.load align=4 + (get_local $var$836) + ) + ) + (set_local $var$408 + (i32.and + (get_local $var$141) + (i32.const -8) + ) + ) + (set_local $var$1134 + (i32.sub + (get_local $var$408) + (get_local $var$761) + ) + ) + (set_local $var$688 + (i32.lt_u + (i32.shr_u + (get_local $var$1134) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$950) + (i32.const 0) + ) + ) + ) + (set_local $var$1135 + (if_else + (get_local $var$688) + (get_local $var$1134) + (get_local $var$950) + ) + ) + (set_local $var$768 + (if_else + (get_local $var$688) + (get_local $var$777) + (get_local $var$1180) + ) + ) + (set_local $var$950 + (get_local $var$1135) + ) + (set_local $var$1161 + (get_local $var$777) + ) + (set_local $var$1180 + (get_local $var$768) + ) + (br $label$20) + ) + ) + (set_local $var$142 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$692 + (i32.lt_u + (i32.shr_u + (get_local $var$1182) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$142) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$692) + (call_import $_abort) + ) + (set_local $var$264 + (i32.add + (get_local $var$1182) + (get_local $var$761) + ) + ) + (set_local $var$696 + (i32.lt_u + (i32.shr_u + (get_local $var$1182) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$264) + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (get_local $var$696) + (i32.const 0) + ) + (call_import $_abort) + ) + (set_local $var$927 + (i32.add + (get_local $var$1182) + (i32.const 24) + ) + ) + (set_local $var$143 + (i32.load align=4 + (get_local $var$927) + ) + ) + (set_local $var$517 + (i32.add + (get_local $var$1182) + (i32.const 12) + ) + ) + (set_local $var$144 + (i32.load align=4 + (get_local $var$517) + ) + ) + (set_local $var$705 + (i32.eq + (get_local $var$144) + (get_local $var$1182) + ) + ) + (block $label$24 + (if_else + (get_local $var$705) + (block $label$25 + (set_local $var$504 + (i32.add + (get_local $var$1182) + (i32.const 20) + ) + ) + (set_local $var$149 + (i32.load align=4 + (get_local $var$504) + ) + ) + (set_local $var$730 + (i32.eq + (get_local $var$149) + (i32.const 0) + ) + ) + (if_else + (get_local $var$730) + (block $label$26 + (set_local $var$505 + (i32.add + (get_local $var$1182) + (i32.const 16) + ) + ) + (set_local $var$150 + (i32.load align=4 + (get_local $var$505) + ) + ) + (set_local $var$734 + (i32.eq + (get_local $var$150) + (i32.const 0) + ) + ) + (if_else + (get_local $var$734) + (block $label$27 + (set_local $var$241 + (i32.const 0) + ) + (br $label$24) + ) + (block $label$28 + (set_local $var$235 + (get_local $var$150) + ) + (set_local $var$244 + (get_local $var$505) + ) + ) + ) + ) + (block $label$29 + (set_local $var$235 + (get_local $var$149) + ) + (set_local $var$244 + (get_local $var$504) + ) + ) + ) + (loop $label$30 $label$31 + (block $label$32 + (set_local $var$507 + (i32.add + (get_local $var$235) + (i32.const 20) + ) + ) + (set_local $var$151 + (i32.load align=4 + (get_local $var$507) + ) + ) + (set_local $var$739 + (i32.eq + (get_local $var$151) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$739) + (i32.const 0) + ) + (block $label$33 + (set_local $var$235 + (get_local $var$151) + ) + (set_local $var$244 + (get_local $var$507) + ) + (br $label$31) + ) + ) + (set_local $var$508 + (i32.add + (get_local $var$235) + (i32.const 16) + ) + ) + (set_local $var$152 + (i32.load align=4 + (get_local $var$508) + ) + ) + (set_local $var$742 + (i32.eq + (get_local $var$152) + (i32.const 0) + ) + ) + (if_else + (get_local $var$742) + (block $label$34 + (set_local $var$240 + (get_local $var$235) + ) + (set_local $var$249 + (get_local $var$244) + ) + (br $label$30) + ) + (block $label$35 + (set_local $var$235 + (get_local $var$152) + ) + (set_local $var$244 + (get_local $var$508) + ) + ) + ) + (br $label$31) + ) + ) + (set_local $var$744 + (i32.lt_u + (i32.shr_u + (get_local $var$249) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$142) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$744) + (call_import $_abort) + (block $label$36 + (i32.store align=4 + (get_local $var$249) + (i32.const 0) + ) + (set_local $var$241 + (get_local $var$240) + ) + (br $label$24) + ) + ) + ) + (block $label$37 + (set_local $var$779 + (i32.add + (get_local $var$1182) + (i32.const 8) + ) + ) + (set_local $var$145 + (i32.load align=4 + (get_local $var$779) + ) + ) + (set_local $var$712 + (i32.lt_u + (i32.shr_u + (get_local $var$145) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$142) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$712) + (call_import $_abort) + ) + (set_local $var$543 + (i32.add + (get_local $var$145) + (i32.const 12) + ) + ) + (set_local $var$146 + (i32.load align=4 + (get_local $var$543) + ) + ) + (set_local $var$717 + (i32.eq + (get_local $var$146) + (get_local $var$1182) + ) + ) + (if + (i32.eq + (get_local $var$717) + (i32.const 0) + ) + (call_import $_abort) + ) + (set_local $var$799 + (i32.add + (get_local $var$144) + (i32.const 8) + ) + ) + (set_local $var$148 + (i32.load align=4 + (get_local $var$799) + ) + ) + (set_local $var$720 + (i32.eq + (get_local $var$148) + (get_local $var$1182) + ) + ) + (if_else + (get_local $var$720) + (block $label$38 + (i32.store align=4 + (get_local $var$543) + (get_local $var$144) + ) + (i32.store align=4 + (get_local $var$799) + (get_local $var$145) + ) + (set_local $var$241 + (get_local $var$144) + ) + (br $label$24) + ) + (call_import $_abort) + ) + ) + ) + ) + (set_local $var$752 + (i32.eq + (get_local $var$143) + (i32.const 0) + ) + ) + (block $label$39 + (if + (i32.eq + (get_local $var$752) + (i32.const 0) + ) + (block $label$40 + (set_local $var$851 + (i32.add + (get_local $var$1182) + (i32.const 28) + ) + ) + (set_local $var$153 + (i32.load align=4 + (get_local $var$851) + ) + ) + (set_local $var$511 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$153) + (i32.const 2) + ) + ) + ) + (set_local $var$154 + (i32.load align=4 + (get_local $var$511) + ) + ) + (set_local $var$755 + (i32.eq + (get_local $var$1182) + (get_local $var$154) + ) + ) + (if_else + (get_local $var$755) + (block $label$41 + (i32.store align=4 + (get_local $var$511) + (get_local $var$241) + ) + (set_local $var$772 + (i32.eq + (get_local $var$241) + (i32.const 0) + ) + ) + (if + (get_local $var$772) + (block $label$42 + (set_local $var$962 + (i32.shl + (i32.const 1) + (get_local $var$153) + ) + ) + (set_local $var$859 + (i32.xor + (get_local $var$962) + (i32.const -1) + ) + ) + (set_local $var$155 + (i32.load align=4 + (i32.const 180) + ) + ) + (set_local $var$376 + (i32.and + (get_local $var$155) + (get_local $var$859) + ) + ) + (i32.store align=4 + (i32.const 180) + (get_local $var$376) + ) + (br $label$39) + ) + ) + ) + (block $label$43 + (set_local $var$156 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$583 + (i32.lt_u + (i32.shr_u + (get_local $var$143) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$156) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$583) + (call_import $_abort) + ) + (set_local $var$463 + (i32.add + (get_local $var$143) + (i32.const 16) + ) + ) + (set_local $var$157 + (i32.load align=4 + (get_local $var$463) + ) + ) + (set_local $var$589 + (i32.eq + (get_local $var$157) + (get_local $var$1182) + ) + ) + (if_else + (get_local $var$589) + (i32.store align=4 + (get_local $var$463) + (get_local $var$241) + ) + (block $label$44 + (set_local $var$465 + (i32.add + (get_local $var$143) + (i32.const 20) + ) + ) + (i32.store align=4 + (get_local $var$465) + (get_local $var$241) + ) + ) + ) + (set_local $var$599 + (i32.eq + (get_local $var$241) + (i32.const 0) + ) + ) + (if + (get_local $var$599) + (br $label$39) + ) + ) + ) + (set_local $var$159 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$604 + (i32.lt_u + (i32.shr_u + (get_local $var$241) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$159) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$604) + (call_import $_abort) + ) + (set_local $var$931 + (i32.add + (get_local $var$241) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$931) + (get_local $var$143) + ) + (set_local $var$469 + (i32.add + (get_local $var$1182) + (i32.const 16) + ) + ) + (set_local $var$160 + (i32.load align=4 + (get_local $var$469) + ) + ) + (set_local $var$612 + (i32.eq + (get_local $var$160) + (i32.const 0) + ) + ) + (block $label$45 + (if + (i32.eq + (get_local $var$612) + (i32.const 0) + ) + (block $label$46 + (set_local $var$616 + (i32.lt_u + (i32.shr_u + (get_local $var$160) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$159) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$616) + (call_import $_abort) + (block $label$47 + (set_local $var$471 + (i32.add + (get_local $var$241) + (i32.const 16) + ) + ) + (i32.store align=4 + (get_local $var$471) + (get_local $var$160) + ) + (set_local $var$933 + (i32.add + (get_local $var$160) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$933) + (get_local $var$241) + ) + (br $label$45) + ) + ) + ) + ) + ) + (set_local $var$474 + (i32.add + (get_local $var$1182) + (i32.const 20) + ) + ) + (set_local $var$161 + (i32.load align=4 + (get_local $var$474) + ) + ) + (set_local $var$624 + (i32.eq + (get_local $var$161) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$624) + (i32.const 0) + ) + (block $label$48 + (set_local $var$162 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$629 + (i32.lt_u + (i32.shr_u + (get_local $var$161) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$162) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$629) + (call_import $_abort) + (block $label$49 + (set_local $var$477 + (i32.add + (get_local $var$241) + (i32.const 20) + ) + ) + (i32.store align=4 + (get_local $var$477) + (get_local $var$161) + ) + (set_local $var$936 + (i32.add + (get_local $var$161) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$936) + (get_local $var$241) + ) + (br $label$39) + ) + ) + ) + ) + ) + ) + ) + (set_local $var$640 + (i32.lt_u + (i32.shr_u + (get_local $var$952) + (i32.const 0) + ) + (i32.const 16) + ) + ) + (if_else + (get_local $var$640) + (block $label$50 + (set_local $var$323 + (i32.add + (get_local $var$952) + (get_local $var$761) + ) + ) + (set_local $var$897 + (i32.or + (get_local $var$323) + (i32.const 3) + ) + ) + (set_local $var$820 + (i32.add + (get_local $var$1182) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$820) + (get_local $var$897) + ) + (set_local $var$281 + (i32.add + (get_local $var$1182) + (get_local $var$323) + ) + ) + (set_local $var$821 + (i32.add + (get_local $var$281) + (i32.const 4) + ) + ) + (set_local $var$163 + (i32.load align=4 + (get_local $var$821) + ) + ) + (set_local $var$899 + (i32.or + (get_local $var$163) + (i32.const 1) + ) + ) + (i32.store align=4 + (get_local $var$821) + (get_local $var$899) + ) + ) + (block $label$51 + (set_local $var$900 + (i32.or + (get_local $var$761) + (i32.const 3) + ) + ) + (set_local $var$822 + (i32.add + (get_local $var$1182) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$822) + (get_local $var$900) + ) + (set_local $var$901 + (i32.or + (get_local $var$952) + (i32.const 1) + ) + ) + (set_local $var$823 + (i32.add + (get_local $var$264) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$823) + (get_local $var$901) + ) + (set_local $var$284 + (i32.add + (get_local $var$264) + (get_local $var$952) + ) + ) + (i32.store align=4 + (get_local $var$284) + (get_local $var$952) + ) + (set_local $var$164 + (i32.load align=4 + (i32.const 184) + ) + ) + (set_local $var$649 + (i32.eq + (get_local $var$164) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$649) + (i32.const 0) + ) + (block $label$52 + (set_local $var$165 + (i32.load align=4 + (i32.const 196) + ) + ) + (set_local $var$1028 + (i32.shr_u + (get_local $var$164) + (i32.const 3) + ) + ) + (set_local $var$976 + (i32.shl + (get_local $var$1028) + (i32.const 1) + ) + ) + (set_local $var$483 + (i32.add + (i32.const 216) + (i32.shl + (get_local $var$976) + (i32.const 2) + ) + ) + ) + (set_local $var$166 + (i32.load align=4 + (i32.const 176) + ) + ) + (set_local $var$977 + (i32.shl + (i32.const 1) + (get_local $var$1028) + ) + ) + (set_local $var$390 + (i32.and + (get_local $var$166) + (get_local $var$977) + ) + ) + (set_local $var$1171 + (i32.eq + (get_local $var$390) + (i32.const 0) + ) + ) + (if_else + (get_local $var$1171) + (block $label$53 + (set_local $var$905 + (i32.or + (get_local $var$166) + (get_local $var$977) + ) + ) + (i32.store align=4 + (i32.const 176) + (get_local $var$905) + ) + (set_local $var$4 + (i32.add + (get_local $var$483) + (i32.const 8) + ) + ) + (set_local $var$11 + (get_local $var$4) + ) + (set_local $var$226 + (get_local $var$483) + ) + ) + (block $label$54 + (set_local $var$167 + (i32.add + (get_local $var$483) + (i32.const 8) + ) + ) + (set_local $var$168 + (i32.load align=4 + (get_local $var$167) + ) + ) + (set_local $var$170 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$656 + (i32.lt_u + (i32.shr_u + (get_local $var$168) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$170) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$656) + (call_import $_abort) + (block $label$55 + (set_local $var$11 + (get_local $var$167) + ) + (set_local $var$226 + (get_local $var$168) + ) + ) + ) + ) + ) + (i32.store align=4 + (get_local $var$11) + (get_local $var$165) + ) + (set_local $var$528 + (i32.add + (get_local $var$226) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$528) + (get_local $var$165) + ) + (set_local $var$788 + (i32.add + (get_local $var$165) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$788) + (get_local $var$226) + ) + (set_local $var$529 + (i32.add + (get_local $var$165) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$529) + (get_local $var$483) + ) + ) + ) + (i32.store align=4 + (i32.const 184) + (get_local $var$952) + ) + (i32.store align=4 + (i32.const 196) + (get_local $var$264) + ) + ) + ) + (set_local $var$290 + (i32.add + (get_local $var$1182) + (i32.const 8) + ) + ) + (set_local $var$949 + (get_local $var$290) + ) + (br $label$0 + (get_local $var$949) + ) + ) + ) + ) + (set_local $var$857 + (get_local $var$761) + ) + ) + ) + (block $label$56 + (set_local $var$613 + (i32.gt_u + (i32.shr_u + (get_local $var$0) + (i32.const 0) + ) + (i32.const -65) + ) + ) + (if_else + (get_local $var$613) + (set_local $var$857 + (i32.const -1) + ) + (block $label$57 + (set_local $var$319 + (i32.add + (get_local $var$0) + (i32.const 11) + ) + ) + (set_local $var$386 + (i32.and + (get_local $var$319) + (i32.const -8) + ) + ) + (set_local $var$171 + (i32.load align=4 + (i32.const 180) + ) + ) + (set_local $var$618 + (i32.eq + (get_local $var$171) + (i32.const 0) + ) + ) + (if_else + (get_local $var$618) + (set_local $var$857 + (get_local $var$386) + ) + (block $label$58 + (set_local $var$1102 + (i32.sub + (i32.const 0) + (get_local $var$386) + ) + ) + (set_local $var$1015 + (i32.shr_u + (get_local $var$319) + (i32.const 8) + ) + ) + (set_local $var$566 + (i32.eq + (get_local $var$1015) + (i32.const 0) + ) + ) + (if_else + (get_local $var$566) + (set_local $var$849 + (i32.const 0) + ) + (block $label$59 + (set_local $var$575 + (i32.gt_u + (i32.shr_u + (get_local $var$386) + (i32.const 0) + ) + (i32.const 16777215) + ) + ) + (if_else + (get_local $var$575) + (set_local $var$849 + (i32.const 31) + ) + (block $label$60 + (set_local $var$1143 + (i32.add + (get_local $var$1015) + (i32.const 1048320) + ) + ) + (set_local $var$1056 + (i32.shr_u + (get_local $var$1143) + (i32.const 16) + ) + ) + (set_local $var$370 + (i32.and + (get_local $var$1056) + (i32.const 8) + ) + ) + (set_local $var$963 + (i32.shl + (get_local $var$1015) + (get_local $var$370) + ) + ) + (set_local $var$1151 + (i32.add + (get_local $var$963) + (i32.const 520192) + ) + ) + (set_local $var$1067 + (i32.shr_u + (get_local $var$1151) + (i32.const 16) + ) + ) + (set_local $var$445 + (i32.and + (get_local $var$1067) + (i32.const 4) + ) + ) + (set_local $var$260 + (i32.or + (get_local $var$445) + (get_local $var$370) + ) + ) + (set_local $var$1010 + (i32.shl + (get_local $var$963) + (get_local $var$445) + ) + ) + (set_local $var$1114 + (i32.add + (get_local $var$1010) + (i32.const 245760) + ) + ) + (set_local $var$1020 + (i32.shr_u + (get_local $var$1114) + (i32.const 16) + ) + ) + (set_local $var$381 + (i32.and + (get_local $var$1020) + (i32.const 2) + ) + ) + (set_local $var$316 + (i32.or + (get_local $var$260) + (get_local $var$381) + ) + ) + (set_local $var$1120 + (i32.sub + (i32.const 14) + (get_local $var$316) + ) + ) + (set_local $var$973 + (i32.shl + (get_local $var$1010) + (get_local $var$381) + ) + ) + (set_local $var$1026 + (i32.shr_u + (get_local $var$973) + (i32.const 15) + ) + ) + (set_local $var$321 + (i32.add + (get_local $var$1120) + (get_local $var$1026) + ) + ) + (set_local $var$974 + (i32.shl + (get_local $var$321) + (i32.const 1) + ) + ) + (set_local $var$325 + (i32.add + (get_local $var$321) + (i32.const 7) + ) + ) + (set_local $var$1029 + (i32.shr_u + (get_local $var$386) + (get_local $var$325) + ) + ) + (set_local $var$393 + (i32.and + (get_local $var$1029) + (i32.const 1) + ) + ) + (set_local $var$331 + (i32.or + (get_local $var$393) + (get_local $var$974) + ) + ) + (set_local $var$849 + (get_local $var$331) + ) + ) + ) + ) + ) + (set_local $var$455 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$849) + (i32.const 2) + ) + ) + ) + (set_local $var$172 + (i32.load align=4 + (get_local $var$455) + ) + ) + (set_local $var$668 + (i32.eq + (get_local $var$172) + (i32.const 0) + ) + ) + (block $label$61 + (if_else + (get_local $var$668) + (block $label$62 + (set_local $var$954 + (get_local $var$1102) + ) + (set_local $var$1163 + (i32.const 0) + ) + (set_local $var$1184 + (i32.const 0) + ) + (set_local $var$1188 + (i32.const 86) + ) + ) + (block $label$63 + (set_local $var$675 + (i32.eq + (get_local $var$849) + (i32.const 31) + ) + ) + (set_local $var$1034 + (i32.shr_u + (get_local $var$849) + (i32.const 1) + ) + ) + (set_local $var$1133 + (i32.sub + (i32.const 25) + (get_local $var$1034) + ) + ) + (set_local $var$762 + (if_else + (get_local $var$675) + (i32.const 0) + (get_local $var$1133) + ) + ) + (set_local $var$988 + (i32.shl + (get_local $var$386) + (get_local $var$762) + ) + ) + (set_local $var$951 + (get_local $var$1102) + ) + (set_local $var$957 + (i32.const 0) + ) + (set_local $var$1089 + (get_local $var$988) + ) + (set_local $var$1162 + (get_local $var$172) + ) + (set_local $var$1181 + (i32.const 0) + ) + (loop $label$64 $label$65 + (block $label$66 + (set_local $var$809 + (i32.add + (get_local $var$1162) + (i32.const 4) + ) + ) + (set_local $var$173 + (i32.load align=4 + (get_local $var$809) + ) + ) + (set_local $var$410 + (i32.and + (get_local $var$173) + (i32.const -8) + ) + ) + (set_local $var$1138 + (i32.sub + (get_local $var$410) + (get_local $var$386) + ) + ) + (set_local $var$694 + (i32.lt_u + (i32.shr_u + (get_local $var$1138) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$951) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$694) + (block $label$67 + (set_local $var$698 + (i32.eq + (get_local $var$410) + (get_local $var$386) + ) + ) + (if_else + (get_local $var$698) + (block $label$68 + (set_local $var$956 + (get_local $var$1138) + ) + (set_local $var$1166 + (get_local $var$1162) + ) + (set_local $var$1186 + (get_local $var$1162) + ) + (set_local $var$1188 + (i32.const 90) + ) + (br $label$61) + ) + (block $label$69 + (set_local $var$953 + (get_local $var$1138) + ) + (set_local $var$1183 + (get_local $var$1162) + ) + ) + ) + ) + (block $label$70 + (set_local $var$953 + (get_local $var$951) + ) + (set_local $var$1183 + (get_local $var$1181) + ) + ) + ) + (set_local $var$502 + (i32.add + (get_local $var$1162) + (i32.const 20) + ) + ) + (set_local $var$174 + (i32.load align=4 + (get_local $var$502) + ) + ) + (set_local $var$1051 + (i32.shr_u + (get_local $var$1089) + (i32.const 31) + ) + ) + (set_local $var$503 + (i32.add + (i32.add + (get_local $var$1162) + (i32.const 16) + ) + (i32.shl + (get_local $var$1051) + (i32.const 2) + ) + ) + ) + (set_local $var$175 + (i32.load align=4 + (get_local $var$503) + ) + ) + (set_local $var$713 + (i32.eq + (get_local $var$174) + (i32.const 0) + ) + ) + (set_local $var$714 + (i32.eq + (get_local $var$174) + (get_local $var$175) + ) + ) + (set_local $var$878 + (i32.or + (get_local $var$713) + (get_local $var$714) + ) + ) + (set_local $var$958 + (if_else + (get_local $var$878) + (get_local $var$957) + (get_local $var$174) + ) + ) + (set_local $var$718 + (i32.eq + (get_local $var$175) + (i32.const 0) + ) + ) + (set_local $var$176 + (i32.and + (get_local $var$718) + (i32.const 1) + ) + ) + (set_local $var$1002 + (i32.xor + (get_local $var$176) + (i32.const 1) + ) + ) + (set_local $var$1090 + (i32.shl + (get_local $var$1089) + (get_local $var$1002) + ) + ) + (if_else + (get_local $var$718) + (block $label$71 + (set_local $var$954 + (get_local $var$953) + ) + (set_local $var$1163 + (get_local $var$958) + ) + (set_local $var$1184 + (get_local $var$1183) + ) + (set_local $var$1188 + (i32.const 86) + ) + (br $label$64) + ) + (block $label$72 + (set_local $var$951 + (get_local $var$953) + ) + (set_local $var$957 + (get_local $var$958) + ) + (set_local $var$1089 + (get_local $var$1090) + ) + (set_local $var$1162 + (get_local $var$175) + ) + (set_local $var$1181 + (get_local $var$1183) + ) + ) + ) + (br $label$65) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $var$1188) + (i32.const 86) + ) + (block $label$73 + (set_local $var$722 + (i32.eq + (get_local $var$1163) + (i32.const 0) + ) + ) + (set_local $var$724 + (i32.eq + (get_local $var$1184) + (i32.const 0) + ) + ) + (set_local $var$876 + (i32.and + (get_local $var$722) + (get_local $var$724) + ) + ) + (if_else + (get_local $var$876) + (block $label$74 + (set_local $var$1003 + (i32.shl + (i32.const 2) + (get_local $var$849) + ) + ) + (set_local $var$1152 + (i32.sub + (i32.const 0) + (get_local $var$1003) + ) + ) + (set_local $var$887 + (i32.or + (get_local $var$1003) + (get_local $var$1152) + ) + ) + (set_local $var$435 + (i32.and + (get_local $var$171) + (get_local $var$887) + ) + ) + (set_local $var$733 + (i32.eq + (get_local $var$435) + (i32.const 0) + ) + ) + (if + (get_local $var$733) + (block $label$75 + (set_local $var$857 + (get_local $var$386) + ) + (br $label$1) + ) + ) + (set_local $var$1153 + (i32.sub + (i32.const 0) + (get_local $var$435) + ) + ) + (set_local $var$436 + (i32.and + (get_local $var$435) + (get_local $var$1153) + ) + ) + (set_local $var$1155 + (i32.add + (get_local $var$436) + (i32.const -1) + ) + ) + (set_local $var$1068 + (i32.shr_u + (get_local $var$1155) + (i32.const 12) + ) + ) + (set_local $var$440 + (i32.and + (get_local $var$1068) + (i32.const 16) + ) + ) + (set_local $var$1070 + (i32.shr_u + (get_local $var$1155) + (get_local $var$440) + ) + ) + (set_local $var$1071 + (i32.shr_u + (get_local $var$1070) + (i32.const 5) + ) + ) + (set_local $var$443 + (i32.and + (get_local $var$1071) + (i32.const 8) + ) + ) + (set_local $var$355 + (i32.or + (get_local $var$443) + (get_local $var$440) + ) + ) + (set_local $var$1073 + (i32.shr_u + (get_local $var$1070) + (get_local $var$443) + ) + ) + (set_local $var$1075 + (i32.shr_u + (get_local $var$1073) + (i32.const 2) + ) + ) + (set_local $var$447 + (i32.and + (get_local $var$1075) + (i32.const 4) + ) + ) + (set_local $var$358 + (i32.or + (get_local $var$355) + (get_local $var$447) + ) + ) + (set_local $var$1077 + (i32.shr_u + (get_local $var$1073) + (get_local $var$447) + ) + ) + (set_local $var$1078 + (i32.shr_u + (get_local $var$1077) + (i32.const 1) + ) + ) + (set_local $var$448 + (i32.and + (get_local $var$1078) + (i32.const 2) + ) + ) + (set_local $var$361 + (i32.or + (get_local $var$358) + (get_local $var$448) + ) + ) + (set_local $var$1080 + (i32.shr_u + (get_local $var$1077) + (get_local $var$448) + ) + ) + (set_local $var$1081 + (i32.shr_u + (get_local $var$1080) + (i32.const 1) + ) + ) + (set_local $var$450 + (i32.and + (get_local $var$1081) + (i32.const 1) + ) + ) + (set_local $var$364 + (i32.or + (get_local $var$361) + (get_local $var$450) + ) + ) + (set_local $var$1082 + (i32.shr_u + (get_local $var$1080) + (get_local $var$450) + ) + ) + (set_local $var$365 + (i32.add + (get_local $var$364) + (get_local $var$1082) + ) + ) + (set_local $var$512 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$365) + (i32.const 2) + ) + ) + ) + (set_local $var$177 + (i32.load align=4 + (get_local $var$512) + ) + ) + (set_local $var$1164 + (get_local $var$177) + ) + ) + (set_local $var$1164 + (get_local $var$1163) + ) + ) + (set_local $var$757 + (i32.eq + (get_local $var$1164) + (i32.const 0) + ) + ) + (if_else + (get_local $var$757) + (block $label$76 + (set_local $var$955 + (get_local $var$954) + ) + (set_local $var$1185 + (get_local $var$1184) + ) + ) + (block $label$77 + (set_local $var$956 + (get_local $var$954) + ) + (set_local $var$1166 + (get_local $var$1164) + ) + (set_local $var$1186 + (get_local $var$1184) + ) + (set_local $var$1188 + (i32.const 90) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $var$1188) + (i32.const 90) + ) + (loop $label$78 $label$79 + (block $label$80 + (set_local $var$1188 + (i32.const 0) + ) + (set_local $var$847 + (i32.add + (get_local $var$1166) + (i32.const 4) + ) + ) + (set_local $var$178 + (i32.load align=4 + (get_local $var$847) + ) + ) + (set_local $var$375 + (i32.and + (get_local $var$178) + (i32.const -8) + ) + ) + (set_local $var$1115 + (i32.sub + (get_local $var$375) + (get_local $var$386) + ) + ) + (set_local $var$579 + (i32.lt_u + (i32.shr_u + (get_local $var$1115) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$956) + (i32.const 0) + ) + ) + ) + (set_local $var$1116 + (if_else + (get_local $var$579) + (get_local $var$1115) + (get_local $var$956) + ) + ) + (set_local $var$1165 + (if_else + (get_local $var$579) + (get_local $var$1166) + (get_local $var$1186) + ) + ) + (set_local $var$461 + (i32.add + (get_local $var$1166) + (i32.const 16) + ) + ) + (set_local $var$179 + (i32.load align=4 + (get_local $var$461) + ) + ) + (set_local $var$584 + (i32.eq + (get_local $var$179) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$584) + (i32.const 0) + ) + (block $label$81 + (set_local $var$956 + (get_local $var$1116) + ) + (set_local $var$1166 + (get_local $var$179) + ) + (set_local $var$1186 + (get_local $var$1165) + ) + (set_local $var$1188 + (i32.const 90) + ) + (br $label$79) + ) + ) + (set_local $var$464 + (i32.add + (get_local $var$1166) + (i32.const 20) + ) + ) + (set_local $var$181 + (i32.load align=4 + (get_local $var$464) + ) + ) + (set_local $var$758 + (i32.eq + (get_local $var$181) + (i32.const 0) + ) + ) + (if_else + (get_local $var$758) + (block $label$82 + (set_local $var$955 + (get_local $var$1116) + ) + (set_local $var$1185 + (get_local $var$1165) + ) + (br $label$78) + ) + (block $label$83 + (set_local $var$956 + (get_local $var$1116) + ) + (set_local $var$1166 + (get_local $var$181) + ) + (set_local $var$1186 + (get_local $var$1165) + ) + (set_local $var$1188 + (i32.const 90) + ) + ) + ) + (br $label$79) + ) + ) + ) + (set_local $var$590 + (i32.eq + (get_local $var$1185) + (i32.const 0) + ) + ) + (if_else + (get_local $var$590) + (set_local $var$857 + (get_local $var$386) + ) + (block $label$84 + (set_local $var$182 + (i32.load align=4 + (i32.const 184) + ) + ) + (set_local $var$1119 + (i32.sub + (get_local $var$182) + (get_local $var$386) + ) + ) + (set_local $var$592 + (i32.lt_u + (i32.shr_u + (get_local $var$955) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$1119) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$592) + (block $label$85 + (set_local $var$183 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$596 + (i32.lt_u + (i32.shr_u + (get_local $var$1185) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$183) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$596) + (call_import $_abort) + ) + (set_local $var$267 + (i32.add + (get_local $var$1185) + (get_local $var$386) + ) + ) + (set_local $var$597 + (i32.lt_u + (i32.shr_u + (get_local $var$1185) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$267) + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (get_local $var$597) + (i32.const 0) + ) + (call_import $_abort) + ) + (set_local $var$928 + (i32.add + (get_local $var$1185) + (i32.const 24) + ) + ) + (set_local $var$184 + (i32.load align=4 + (get_local $var$928) + ) + ) + (set_local $var$518 + (i32.add + (get_local $var$1185) + (i32.const 12) + ) + ) + (set_local $var$185 + (i32.load align=4 + (get_local $var$518) + ) + ) + (set_local $var$602 + (i32.eq + (get_local $var$185) + (get_local $var$1185) + ) + ) + (block $label$86 + (if_else + (get_local $var$602) + (block $label$87 + (set_local $var$472 + (i32.add + (get_local $var$1185) + (i32.const 20) + ) + ) + (set_local $var$189 + (i32.load align=4 + (get_local $var$472) + ) + ) + (set_local $var$622 + (i32.eq + (get_local $var$189) + (i32.const 0) + ) + ) + (if_else + (get_local $var$622) + (block $label$88 + (set_local $var$475 + (i32.add + (get_local $var$1185) + (i32.const 16) + ) + ) + (set_local $var$190 + (i32.load align=4 + (get_local $var$475) + ) + ) + (set_local $var$626 + (i32.eq + (get_local $var$190) + (i32.const 0) + ) + ) + (if_else + (get_local $var$626) + (block $label$89 + (set_local $var$242 + (i32.const 0) + ) + (br $label$86) + ) + (block $label$90 + (set_local $var$236 + (get_local $var$190) + ) + (set_local $var$245 + (get_local $var$475) + ) + ) + ) + ) + (block $label$91 + (set_local $var$236 + (get_local $var$189) + ) + (set_local $var$245 + (get_local $var$472) + ) + ) + ) + (loop $label$92 $label$93 + (block $label$94 + (set_local $var$476 + (i32.add + (get_local $var$236) + (i32.const 20) + ) + ) + (set_local $var$192 + (i32.load align=4 + (get_local $var$476) + ) + ) + (set_local $var$634 + (i32.eq + (get_local $var$192) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$634) + (i32.const 0) + ) + (block $label$95 + (set_local $var$236 + (get_local $var$192) + ) + (set_local $var$245 + (get_local $var$476) + ) + (br $label$93) + ) + ) + (set_local $var$478 + (i32.add + (get_local $var$236) + (i32.const 16) + ) + ) + (set_local $var$193 + (i32.load align=4 + (get_local $var$478) + ) + ) + (set_local $var$636 + (i32.eq + (get_local $var$193) + (i32.const 0) + ) + ) + (if_else + (get_local $var$636) + (block $label$96 + (set_local $var$237 + (get_local $var$236) + ) + (set_local $var$246 + (get_local $var$245) + ) + (br $label$92) + ) + (block $label$97 + (set_local $var$236 + (get_local $var$193) + ) + (set_local $var$245 + (get_local $var$478) + ) + ) + ) + (br $label$93) + ) + ) + (set_local $var$638 + (i32.lt_u + (i32.shr_u + (get_local $var$246) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$183) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$638) + (call_import $_abort) + (block $label$98 + (i32.store align=4 + (get_local $var$246) + (i32.const 0) + ) + (set_local $var$242 + (get_local $var$237) + ) + (br $label$86) + ) + ) + ) + (block $label$99 + (set_local $var$780 + (i32.add + (get_local $var$1185) + (i32.const 8) + ) + ) + (set_local $var$186 + (i32.load align=4 + (get_local $var$780) + ) + ) + (set_local $var$605 + (i32.lt_u + (i32.shr_u + (get_local $var$186) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$183) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$605) + (call_import $_abort) + ) + (set_local $var$524 + (i32.add + (get_local $var$186) + (i32.const 12) + ) + ) + (set_local $var$187 + (i32.load align=4 + (get_local $var$524) + ) + ) + (set_local $var$609 + (i32.eq + (get_local $var$187) + (get_local $var$1185) + ) + ) + (if + (i32.eq + (get_local $var$609) + (i32.const 0) + ) + (call_import $_abort) + ) + (set_local $var$784 + (i32.add + (get_local $var$185) + (i32.const 8) + ) + ) + (set_local $var$188 + (i32.load align=4 + (get_local $var$784) + ) + ) + (set_local $var$614 + (i32.eq + (get_local $var$188) + (get_local $var$1185) + ) + ) + (if_else + (get_local $var$614) + (block $label$100 + (i32.store align=4 + (get_local $var$524) + (get_local $var$185) + ) + (i32.store align=4 + (get_local $var$784) + (get_local $var$186) + ) + (set_local $var$242 + (get_local $var$185) + ) + (br $label$86) + ) + (call_import $_abort) + ) + ) + ) + ) + (set_local $var$641 + (i32.eq + (get_local $var$184) + (i32.const 0) + ) + ) + (block $label$101 + (if + (i32.eq + (get_local $var$641) + (i32.const 0) + ) + (block $label$102 + (set_local $var$852 + (i32.add + (get_local $var$1185) + (i32.const 28) + ) + ) + (set_local $var$194 + (i32.load align=4 + (get_local $var$852) + ) + ) + (set_local $var$480 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$194) + (i32.const 2) + ) + ) + ) + (set_local $var$195 + (i32.load align=4 + (get_local $var$480) + ) + ) + (set_local $var$642 + (i32.eq + (get_local $var$1185) + (get_local $var$195) + ) + ) + (if_else + (get_local $var$642) + (block $label$103 + (i32.store align=4 + (get_local $var$480) + (get_local $var$242) + ) + (set_local $var$774 + (i32.eq + (get_local $var$242) + (i32.const 0) + ) + ) + (if + (get_local $var$774) + (block $label$104 + (set_local $var$975 + (i32.shl + (i32.const 1) + (get_local $var$194) + ) + ) + (set_local $var$860 + (i32.xor + (get_local $var$975) + (i32.const -1) + ) + ) + (set_local $var$196 + (i32.load align=4 + (i32.const 180) + ) + ) + (set_local $var$388 + (i32.and + (get_local $var$196) + (get_local $var$860) + ) + ) + (i32.store align=4 + (i32.const 180) + (get_local $var$388) + ) + (br $label$101) + ) + ) + ) + (block $label$105 + (set_local $var$197 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$650 + (i32.lt_u + (i32.shr_u + (get_local $var$184) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$197) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$650) + (call_import $_abort) + ) + (set_local $var$484 + (i32.add + (get_local $var$184) + (i32.const 16) + ) + ) + (set_local $var$198 + (i32.load align=4 + (get_local $var$484) + ) + ) + (set_local $var$655 + (i32.eq + (get_local $var$198) + (get_local $var$1185) + ) + ) + (if_else + (get_local $var$655) + (i32.store align=4 + (get_local $var$484) + (get_local $var$242) + ) + (block $label$106 + (set_local $var$485 + (i32.add + (get_local $var$184) + (i32.const 20) + ) + ) + (i32.store align=4 + (get_local $var$485) + (get_local $var$242) + ) + ) + ) + (set_local $var$660 + (i32.eq + (get_local $var$242) + (i32.const 0) + ) + ) + (if + (get_local $var$660) + (br $label$101) + ) + ) + ) + (set_local $var$199 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$662 + (i32.lt_u + (i32.shr_u + (get_local $var$242) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$199) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$662) + (call_import $_abort) + ) + (set_local $var$939 + (i32.add + (get_local $var$242) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$939) + (get_local $var$184) + ) + (set_local $var$487 + (i32.add + (get_local $var$1185) + (i32.const 16) + ) + ) + (set_local $var$200 + (i32.load align=4 + (get_local $var$487) + ) + ) + (set_local $var$665 + (i32.eq + (get_local $var$200) + (i32.const 0) + ) + ) + (block $label$107 + (if + (i32.eq + (get_local $var$665) + (i32.const 0) + ) + (block $label$108 + (set_local $var$666 + (i32.lt_u + (i32.shr_u + (get_local $var$200) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$199) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$666) + (call_import $_abort) + (block $label$109 + (set_local $var$489 + (i32.add + (get_local $var$242) + (i32.const 16) + ) + ) + (i32.store align=4 + (get_local $var$489) + (get_local $var$200) + ) + (set_local $var$940 + (i32.add + (get_local $var$200) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$940) + (get_local $var$242) + ) + (br $label$107) + ) + ) + ) + ) + ) + (set_local $var$490 + (i32.add + (get_local $var$1185) + (i32.const 20) + ) + ) + (set_local $var$201 + (i32.load align=4 + (get_local $var$490) + ) + ) + (set_local $var$670 + (i32.eq + (get_local $var$201) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$670) + (i32.const 0) + ) + (block $label$110 + (set_local $var$203 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$671 + (i32.lt_u + (i32.shr_u + (get_local $var$201) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$203) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$671) + (call_import $_abort) + (block $label$111 + (set_local $var$491 + (i32.add + (get_local $var$242) + (i32.const 20) + ) + ) + (i32.store align=4 + (get_local $var$491) + (get_local $var$201) + ) + (set_local $var$941 + (i32.add + (get_local $var$201) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$941) + (get_local $var$242) + ) + (br $label$101) + ) + ) + ) + ) + ) + ) + ) + (set_local $var$676 + (i32.lt_u + (i32.shr_u + (get_local $var$955) + (i32.const 0) + ) + (i32.const 16) + ) + ) + (block $label$112 + (if_else + (get_local $var$676) + (block $label$113 + (set_local $var$334 + (i32.add + (get_local $var$955) + (get_local $var$386) + ) + ) + (set_local $var$913 + (i32.or + (get_local $var$334) + (i32.const 3) + ) + ) + (set_local $var$832 + (i32.add + (get_local $var$1185) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$832) + (get_local $var$913) + ) + (set_local $var$295 + (i32.add + (get_local $var$1185) + (get_local $var$334) + ) + ) + (set_local $var$833 + (i32.add + (get_local $var$295) + (i32.const 4) + ) + ) + (set_local $var$204 + (i32.load align=4 + (get_local $var$833) + ) + ) + (set_local $var$914 + (i32.or + (get_local $var$204) + (i32.const 1) + ) + ) + (i32.store align=4 + (get_local $var$833) + (get_local $var$914) + ) + ) + (block $label$114 + (set_local $var$915 + (i32.or + (get_local $var$386) + (i32.const 3) + ) + ) + (set_local $var$834 + (i32.add + (get_local $var$1185) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$834) + (get_local $var$915) + ) + (set_local $var$917 + (i32.or + (get_local $var$955) + (i32.const 1) + ) + ) + (set_local $var$835 + (i32.add + (get_local $var$267) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$835) + (get_local $var$917) + ) + (set_local $var$296 + (i32.add + (get_local $var$267) + (get_local $var$955) + ) + ) + (i32.store align=4 + (get_local $var$296) + (get_local $var$955) + ) + (set_local $var$1038 + (i32.shr_u + (get_local $var$955) + (i32.const 3) + ) + ) + (set_local $var$680 + (i32.lt_u + (i32.shr_u + (get_local $var$955) + (i32.const 0) + ) + (i32.const 256) + ) + ) + (if + (get_local $var$680) + (block $label$115 + (set_local $var$985 + (i32.shl + (get_local $var$1038) + (i32.const 1) + ) + ) + (set_local $var$494 + (i32.add + (i32.const 216) + (i32.shl + (get_local $var$985) + (i32.const 2) + ) + ) + ) + (set_local $var$205 + (i32.load align=4 + (i32.const 176) + ) + ) + (set_local $var$986 + (i32.shl + (i32.const 1) + (get_local $var$1038) + ) + ) + (set_local $var$401 + (i32.and + (get_local $var$205) + (get_local $var$986) + ) + ) + (set_local $var$1174 + (i32.eq + (get_local $var$401) + (i32.const 0) + ) + ) + (if_else + (get_local $var$1174) + (block $label$116 + (set_local $var$918 + (i32.or + (get_local $var$205) + (get_local $var$986) + ) + ) + (i32.store align=4 + (i32.const 176) + (get_local $var$918) + ) + (set_local $var$5 + (i32.add + (get_local $var$494) + (i32.const 8) + ) + ) + (set_local $var$8 + (get_local $var$5) + ) + (set_local $var$228 + (get_local $var$494) + ) + ) + (block $label$117 + (set_local $var$206 + (i32.add + (get_local $var$494) + (i32.const 8) + ) + ) + (set_local $var$207 + (i32.load align=4 + (get_local $var$206) + ) + ) + (set_local $var$208 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$683 + (i32.lt_u + (i32.shr_u + (get_local $var$207) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$208) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$683) + (call_import $_abort) + (block $label$118 + (set_local $var$8 + (get_local $var$206) + ) + (set_local $var$228 + (get_local $var$207) + ) + ) + ) + ) + ) + (i32.store align=4 + (get_local $var$8) + (get_local $var$267) + ) + (set_local $var$533 + (i32.add + (get_local $var$228) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$533) + (get_local $var$267) + ) + (set_local $var$791 + (i32.add + (get_local $var$267) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$791) + (get_local $var$228) + ) + (set_local $var$534 + (i32.add + (get_local $var$267) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$534) + (get_local $var$494) + ) + (br $label$112) + ) + ) + (set_local $var$1041 + (i32.shr_u + (get_local $var$955) + (i32.const 8) + ) + ) + (set_local $var$686 + (i32.eq + (get_local $var$1041) + (i32.const 0) + ) + ) + (if_else + (get_local $var$686) + (set_local $var$230 + (i32.const 0) + ) + (block $label$119 + (set_local $var$690 + (i32.gt_u + (i32.shr_u + (get_local $var$955) + (i32.const 0) + ) + (i32.const 16777215) + ) + ) + (if_else + (get_local $var$690) + (set_local $var$230 + (i32.const 31) + ) + (block $label$120 + (set_local $var$1137 + (i32.add + (get_local $var$1041) + (i32.const 1048320) + ) + ) + (set_local $var$1043 + (i32.shr_u + (get_local $var$1137) + (i32.const 16) + ) + ) + (set_local $var$413 + (i32.and + (get_local $var$1043) + (i32.const 8) + ) + ) + (set_local $var$991 + (i32.shl + (get_local $var$1041) + (get_local $var$413) + ) + ) + (set_local $var$1139 + (i32.add + (get_local $var$991) + (i32.const 520192) + ) + ) + (set_local $var$1044 + (i32.shr_u + (get_local $var$1139) + (i32.const 16) + ) + ) + (set_local $var$414 + (i32.and + (get_local $var$1044) + (i32.const 4) + ) + ) + (set_local $var$340 + (i32.or + (get_local $var$414) + (get_local $var$413) + ) + ) + (set_local $var$992 + (i32.shl + (get_local $var$991) + (get_local $var$414) + ) + ) + (set_local $var$1140 + (i32.add + (get_local $var$992) + (i32.const 245760) + ) + ) + (set_local $var$1045 + (i32.shr_u + (get_local $var$1140) + (i32.const 16) + ) + ) + (set_local $var$415 + (i32.and + (get_local $var$1045) + (i32.const 2) + ) + ) + (set_local $var$341 + (i32.or + (get_local $var$340) + (get_local $var$415) + ) + ) + (set_local $var$1141 + (i32.sub + (i32.const 14) + (get_local $var$341) + ) + ) + (set_local $var$993 + (i32.shl + (get_local $var$992) + (get_local $var$415) + ) + ) + (set_local $var$1046 + (i32.shr_u + (get_local $var$993) + (i32.const 15) + ) + ) + (set_local $var$342 + (i32.add + (get_local $var$1141) + (get_local $var$1046) + ) + ) + (set_local $var$994 + (i32.shl + (get_local $var$342) + (i32.const 1) + ) + ) + (set_local $var$343 + (i32.add + (get_local $var$342) + (i32.const 7) + ) + ) + (set_local $var$1047 + (i32.shr_u + (get_local $var$955) + (get_local $var$343) + ) + ) + (set_local $var$416 + (i32.and + (get_local $var$1047) + (i32.const 1) + ) + ) + (set_local $var$344 + (i32.or + (get_local $var$416) + (get_local $var$994) + ) + ) + (set_local $var$230 + (get_local $var$344) + ) + ) + ) + ) + ) + (set_local $var$498 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$230) + (i32.const 2) + ) + ) + ) + (set_local $var$856 + (i32.add + (get_local $var$267) + (i32.const 28) + ) + ) + (i32.store align=4 + (get_local $var$856) + (get_local $var$230) + ) + (set_local $var$562 + (i32.add + (get_local $var$267) + (i32.const 16) + ) + ) + (set_local $var$499 + (i32.add + (get_local $var$562) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$499) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$562) + (i32.const 0) + ) + (set_local $var$209 + (i32.load align=4 + (i32.const 180) + ) + ) + (set_local $var$996 + (i32.shl + (i32.const 1) + (get_local $var$230) + ) + ) + (set_local $var$417 + (i32.and + (get_local $var$209) + (get_local $var$996) + ) + ) + (set_local $var$1177 + (i32.eq + (get_local $var$417) + (i32.const 0) + ) + ) + (if + (get_local $var$1177) + (block $label$121 + (set_local $var$921 + (i32.or + (get_local $var$209) + (get_local $var$996) + ) + ) + (i32.store align=4 + (i32.const 180) + (get_local $var$921) + ) + (i32.store align=4 + (get_local $var$498) + (get_local $var$267) + ) + (set_local $var$945 + (i32.add + (get_local $var$267) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$945) + (get_local $var$498) + ) + (set_local $var$538 + (i32.add + (get_local $var$267) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$538) + (get_local $var$267) + ) + (set_local $var$795 + (i32.add + (get_local $var$267) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$795) + (get_local $var$267) + ) + (br $label$112) + ) + ) + (set_local $var$210 + (i32.load align=4 + (get_local $var$498) + ) + ) + (set_local $var$700 + (i32.eq + (get_local $var$230) + (i32.const 31) + ) + ) + (set_local $var$1048 + (i32.shr_u + (get_local $var$230) + (i32.const 1) + ) + ) + (set_local $var$1142 + (i32.sub + (i32.const 25) + (get_local $var$1048) + ) + ) + (set_local $var$776 + (if_else + (get_local $var$700) + (i32.const 0) + (get_local $var$1142) + ) + ) + (set_local $var$998 + (i32.shl + (get_local $var$955) + (get_local $var$776) + ) + ) + (set_local $var$234 + (get_local $var$998) + ) + (set_local $var$250 + (get_local $var$210) + ) + (loop $label$122 $label$123 + (block $label$124 + (set_local $var$841 + (i32.add + (get_local $var$250) + (i32.const 4) + ) + ) + (set_local $var$211 + (i32.load align=4 + (get_local $var$841) + ) + ) + (set_local $var$419 + (i32.and + (get_local $var$211) + (i32.const -8) + ) + ) + (set_local $var$703 + (i32.eq + (get_local $var$419) + (get_local $var$955) + ) + ) + (if + (get_local $var$703) + (block $label$125 + (set_local $var$257 + (get_local $var$250) + ) + (set_local $var$1188 + (i32.const 148) + ) + (br $label$122) + ) + ) + (set_local $var$1049 + (i32.shr_u + (get_local $var$234) + (i32.const 31) + ) + ) + (set_local $var$500 + (i32.add + (i32.add + (get_local $var$250) + (i32.const 16) + ) + (i32.shl + (get_local $var$1049) + (i32.const 2) + ) + ) + ) + (set_local $var$1000 + (i32.shl + (get_local $var$234) + (i32.const 1) + ) + ) + (set_local $var$212 + (i32.load align=4 + (get_local $var$500) + ) + ) + (set_local $var$704 + (i32.eq + (get_local $var$212) + (i32.const 0) + ) + ) + (if_else + (get_local $var$704) + (block $label$126 + (set_local $var$258 + (get_local $var$250) + ) + (set_local $var$501 + (get_local $var$500) + ) + (set_local $var$1188 + (i32.const 145) + ) + (br $label$122) + ) + (block $label$127 + (set_local $var$234 + (get_local $var$1000) + ) + (set_local $var$250 + (get_local $var$212) + ) + ) + ) + (br $label$123) + ) + ) + (if_else + (i32.eq + (get_local $var$1188) + (i32.const 145) + ) + (block $label$128 + (set_local $var$214 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$706 + (i32.lt_u + (i32.shr_u + (get_local $var$501) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$214) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$706) + (call_import $_abort) + (block $label$129 + (i32.store align=4 + (get_local $var$501) + (get_local $var$267) + ) + (set_local $var$946 + (i32.add + (get_local $var$267) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$946) + (get_local $var$258) + ) + (set_local $var$539 + (i32.add + (get_local $var$267) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$539) + (get_local $var$267) + ) + (set_local $var$796 + (i32.add + (get_local $var$267) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$796) + (get_local $var$267) + ) + (br $label$112) + ) + ) + ) + (if + (i32.eq + (get_local $var$1188) + (i32.const 148) + ) + (block $label$130 + (set_local $var$797 + (i32.add + (get_local $var$257) + (i32.const 8) + ) + ) + (set_local $var$215 + (i32.load align=4 + (get_local $var$797) + ) + ) + (set_local $var$216 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$709 + (i32.ge_u + (i32.shr_u + (get_local $var$215) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$216) + (i32.const 0) + ) + ) + ) + (set_local $var$874 + (i32.ge_u + (i32.shr_u + (get_local $var$257) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$216) + (i32.const 0) + ) + ) + ) + (set_local $var$217 + (i32.and + (get_local $var$709) + (get_local $var$874) + ) + ) + (if_else + (get_local $var$217) + (block $label$131 + (set_local $var$540 + (i32.add + (get_local $var$215) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$540) + (get_local $var$267) + ) + (i32.store align=4 + (get_local $var$797) + (get_local $var$267) + ) + (set_local $var$798 + (i32.add + (get_local $var$267) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$798) + (get_local $var$215) + ) + (set_local $var$542 + (i32.add + (get_local $var$267) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$542) + (get_local $var$257) + ) + (set_local $var$947 + (i32.add + (get_local $var$267) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$947) + (i32.const 0) + ) + (br $label$112) + ) + (call_import $_abort) + ) + ) + ) + ) + ) + ) + ) + (set_local $var$304 + (i32.add + (get_local $var$1185) + (i32.const 8) + ) + ) + (set_local $var$949 + (get_local $var$304) + ) + (br $label$0 + (get_local $var$949) + ) + ) + (set_local $var$857 + (get_local $var$386) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $var$218 + (i32.load align=4 + (i32.const 184) + ) + ) + (set_local $var$625 + (i32.lt_u + (i32.shr_u + (get_local $var$218) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$857) + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (get_local $var$625) + (i32.const 0) + ) + (block $label$132 + (set_local $var$1122 + (i32.sub + (get_local $var$218) + (get_local $var$857) + ) + ) + (set_local $var$219 + (i32.load align=4 + (i32.const 196) + ) + ) + (set_local $var$633 + (i32.gt_u + (i32.shr_u + (get_local $var$1122) + (i32.const 0) + ) + (i32.const 15) + ) + ) + (if_else + (get_local $var$633) + (block $label$133 + (set_local $var$277 + (i32.add + (get_local $var$219) + (get_local $var$857) + ) + ) + (i32.store align=4 + (i32.const 196) + (get_local $var$277) + ) + (i32.store align=4 + (i32.const 184) + (get_local $var$1122) + ) + (set_local $var$894 + (i32.or + (get_local $var$1122) + (i32.const 1) + ) + ) + (set_local $var$816 + (i32.add + (get_local $var$277) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$816) + (get_local $var$894) + ) + (set_local $var$278 + (i32.add + (get_local $var$277) + (get_local $var$1122) + ) + ) + (i32.store align=4 + (get_local $var$278) + (get_local $var$1122) + ) + (set_local $var$895 + (i32.or + (get_local $var$857) + (i32.const 3) + ) + ) + (set_local $var$817 + (i32.add + (get_local $var$219) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$817) + (get_local $var$895) + ) + ) + (block $label$134 + (i32.store align=4 + (i32.const 184) + (i32.const 0) + ) + (i32.store align=4 + (i32.const 196) + (i32.const 0) + ) + (set_local $var$896 + (i32.or + (get_local $var$218) + (i32.const 3) + ) + ) + (set_local $var$818 + (i32.add + (get_local $var$219) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$818) + (get_local $var$896) + ) + (set_local $var$280 + (i32.add + (get_local $var$219) + (get_local $var$218) + ) + ) + (set_local $var$819 + (i32.add + (get_local $var$280) + (i32.const 4) + ) + ) + (set_local $var$220 + (i32.load align=4 + (get_local $var$819) + ) + ) + (set_local $var$898 + (i32.or + (get_local $var$220) + (i32.const 1) + ) + ) + (i32.store align=4 + (get_local $var$819) + (get_local $var$898) + ) + ) + ) + (set_local $var$282 + (i32.add + (get_local $var$219) + (i32.const 8) + ) + ) + (set_local $var$949 + (get_local $var$282) + ) + (br $label$0 + (get_local $var$949) + ) + ) + ) + (set_local $var$221 + (i32.load align=4 + (i32.const 188) + ) + ) + (set_local $var$644 + (i32.gt_u + (i32.shr_u + (get_local $var$221) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$857) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$644) + (block $label$135 + (set_local $var$1125 + (i32.sub + (get_local $var$221) + (get_local $var$857) + ) + ) + (i32.store align=4 + (i32.const 188) + (get_local $var$1125) + ) + (set_local $var$222 + (i32.load align=4 + (i32.const 200) + ) + ) + (set_local $var$285 + (i32.add + (get_local $var$222) + (get_local $var$857) + ) + ) + (i32.store align=4 + (i32.const 200) + (get_local $var$285) + ) + (set_local $var$903 + (i32.or + (get_local $var$1125) + (i32.const 1) + ) + ) + (set_local $var$824 + (i32.add + (get_local $var$285) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$824) + (get_local $var$903) + ) + (set_local $var$904 + (i32.or + (get_local $var$857) + (i32.const 3) + ) + ) + (set_local $var$825 + (i32.add + (get_local $var$222) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$825) + (get_local $var$904) + ) + (set_local $var$286 + (i32.add + (get_local $var$222) + (i32.const 8) + ) + ) + (set_local $var$949 + (get_local $var$286) + ) + (br $label$0 + (get_local $var$949) + ) + ) + ) + (set_local $var$223 + (i32.load align=4 + (i32.const 648) + ) + ) + (set_local $var$568 + (i32.eq + (get_local $var$223) + (i32.const 0) + ) + ) + (block $label$136 + (if + (get_local $var$568) + (block $label$137 + (set_local $var$550 + (call_import $_sysconf + (i32.const 30) + ) + ) + (set_local $var$1104 + (i32.add + (get_local $var$550) + (i32.const -1) + ) + ) + (set_local $var$373 + (i32.and + (get_local $var$1104) + (get_local $var$550) + ) + ) + (set_local $var$576 + (i32.eq + (get_local $var$373) + (i32.const 0) + ) + ) + (if_else + (get_local $var$576) + (block $label$138 + (i32.store align=4 + (i32.const 656) + (get_local $var$550) + ) + (i32.store align=4 + (i32.const 652) + (get_local $var$550) + ) + (i32.store align=4 + (i32.const 660) + (i32.const -1) + ) + (i32.store align=4 + (i32.const 664) + (i32.const -1) + ) + (i32.store align=4 + (i32.const 668) + (i32.const 0) + ) + (i32.store align=4 + (i32.const 620) + (i32.const 0) + ) + (set_local $var$556 + (call_import $_time + (i32.const 0) + ) + ) + (set_local $var$1187 + (i32.and + (get_local $var$556) + (i32.const -16) + ) + ) + (set_local $var$439 + (i32.xor + (get_local $var$1187) + (i32.const 1431655768) + ) + ) + (i32.store align=4 + (i32.const 648) + (get_local $var$439) + ) + (br $label$136) + ) + (call_import $_abort) + ) + ) + ) + ) + (set_local $var$261 + (i32.add + (get_local $var$857) + (i32.const 48) + ) + ) + (set_local $var$18 + (i32.load align=4 + (i32.const 656) + ) + ) + (set_local $var$1103 + (i32.add + (get_local $var$857) + (i32.const 47) + ) + ) + (set_local $var$363 + (i32.add + (get_local $var$18) + (get_local $var$1103) + ) + ) + (set_local $var$861 + (i32.sub + (i32.const 0) + (get_local $var$18) + ) + ) + (set_local $var$379 + (i32.and + (get_local $var$363) + (get_local $var$861) + ) + ) + (set_local $var$593 + (i32.gt_u + (i32.shr_u + (get_local $var$379) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$857) + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (get_local $var$593) + (i32.const 0) + ) + (block $label$139 + (set_local $var$949 + (i32.const 0) + ) + (br $label$0 + (get_local $var$949) + ) + ) + ) + (set_local $var$19 + (i32.load align=4 + (i32.const 616) + ) + ) + (set_local $var$620 + (i32.eq + (get_local $var$19) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$620) + (i32.const 0) + ) + (block $label$140 + (set_local $var$20 + (i32.load align=4 + (i32.const 608) + ) + ) + (set_local $var$322 + (i32.add + (get_local $var$20) + (get_local $var$379) + ) + ) + (set_local $var$647 + (i32.le_u + (i32.shr_u + (get_local $var$322) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$20) + (i32.const 0) + ) + ) + ) + (set_local $var$658 + (i32.gt_u + (i32.shr_u + (get_local $var$322) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$19) + (i32.const 0) + ) + ) + ) + (set_local $var$879 + (i32.or + (get_local $var$647) + (get_local $var$658) + ) + ) + (if + (get_local $var$879) + (block $label$141 + (set_local $var$949 + (i32.const 0) + ) + (br $label$0 + (get_local $var$949) + ) + ) + ) + ) + ) + (set_local $var$21 + (i32.load align=4 + (i32.const 620) + ) + ) + (set_local $var$400 + (i32.and + (get_local $var$21) + (i32.const 4) + ) + ) + (set_local $var$1176 + (i32.eq + (get_local $var$400) + (i32.const 0) + ) + ) + (block $label$142 + (if_else + (get_local $var$1176) + (block $label$143 + (set_local $var$22 + (i32.load align=4 + (i32.const 200) + ) + ) + (set_local $var$689 + (i32.eq + (get_local $var$22) + (i32.const 0) + ) + ) + (block $label$144 + (if_else + (get_local $var$689) + (set_local $var$1188 + (i32.const 173) + ) + (block $label$145 + (set_local $var$1091 + (i32.const 624) + ) + (loop $label$146 $label$147 + (block $label$148 + (set_local $var$23 + (i32.load align=4 + (get_local $var$1091) + ) + ) + (set_local $var$572 + (i32.gt_u + (i32.shr_u + (get_local $var$23) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$22) + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (get_local $var$572) + (i32.const 0) + ) + (block $label$149 + (set_local $var$1083 + (i32.add + (get_local $var$1091) + (i32.const 4) + ) + ) + (set_local $var$24 + (i32.load align=4 + (get_local $var$1083) + ) + ) + (set_local $var$271 + (i32.add + (get_local $var$23) + (get_local $var$24) + ) + ) + (set_local $var$651 + (i32.gt_u + (i32.shr_u + (get_local $var$271) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$22) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$651) + (block $label$150 + (set_local $var$514 + (get_local $var$1091) + ) + (set_local $var$1085 + (get_local $var$1083) + ) + (br $label$146) + ) + ) + ) + ) + (set_local $var$869 + (i32.add + (get_local $var$1091) + (i32.const 8) + ) + ) + (set_local $var$25 + (i32.load align=4 + (get_local $var$869) + ) + ) + (set_local $var$682 + (i32.eq + (get_local $var$25) + (i32.const 0) + ) + ) + (if_else + (get_local $var$682) + (block $label$151 + (set_local $var$1188 + (i32.const 173) + ) + (br $label$144) + ) + (set_local $var$1091 + (get_local $var$25) + ) + ) + (br $label$147) + ) + ) + (set_local $var$31 + (i32.load align=4 + (i32.const 188) + ) + ) + (set_local $var$354 + (i32.sub + (get_local $var$363) + (get_local $var$31) + ) + ) + (set_local $var$446 + (i32.and + (get_local $var$354) + (get_local $var$861) + ) + ) + (set_local $var$745 + (i32.lt_u + (i32.shr_u + (get_local $var$446) + (i32.const 0) + ) + (i32.const 2147483647) + ) + ) + (if + (get_local $var$745) + (block $label$152 + (set_local $var$558 + (call_import $_sbrk + (get_local $var$446) + ) + ) + (set_local $var$32 + (i32.load align=4 + (get_local $var$514) + ) + ) + (set_local $var$33 + (i32.load align=4 + (get_local $var$1085) + ) + ) + (set_local $var$268 + (i32.add + (get_local $var$32) + (get_local $var$33) + ) + ) + (set_local $var$748 + (i32.eq + (get_local $var$558) + (get_local $var$268) + ) + ) + (if_else + (get_local $var$748) + (block $label$153 + (set_local $var$750 + (i32.eq + (get_local $var$558) + (i32.const -1) + ) + ) + (if + (i32.eq + (get_local $var$750) + (i32.const 0) + ) + (block $label$154 + (set_local $var$1167 + (get_local $var$558) + ) + (set_local $var$1179 + (get_local $var$446) + ) + (set_local $var$1188 + (i32.const 193) + ) + (br $label$142) + ) + ) + ) + (block $label$155 + (set_local $var$549 + (get_local $var$558) + ) + (set_local $var$1098 + (get_local $var$446) + ) + (set_local $var$1188 + (i32.const 183) + ) + ) + ) + ) + ) + ) + ) + ) + (block $label$156 + (if + (i32.eq + (get_local $var$1188) + (i32.const 173) + ) + (block $label$157 + (set_local $var$555 + (call_import $_sbrk + (i32.const 0) + ) + ) + (set_local $var$701 + (i32.eq + (get_local $var$555) + (i32.const -1) + ) + ) + (if + (i32.eq + (get_local $var$701) + (i32.const 0) + ) + (block $label$158 + (set_local $var$26 + (get_local $var$555) + ) + (set_local $var$27 + (i32.load align=4 + (i32.const 652) + ) + ) + (set_local $var$1144 + (i32.add + (get_local $var$27) + (i32.const -1) + ) + ) + (set_local $var$423 + (i32.and + (get_local $var$1144) + (get_local $var$26) + ) + ) + (set_local $var$710 + (i32.eq + (get_local $var$423) + (i32.const 0) + ) + ) + (if_else + (get_local $var$710) + (set_local $var$1097 + (get_local $var$379) + ) + (block $label$159 + (set_local $var$345 + (i32.add + (get_local $var$1144) + (get_local $var$26) + ) + ) + (set_local $var$866 + (i32.sub + (i32.const 0) + (get_local $var$27) + ) + ) + (set_local $var$427 + (i32.and + (get_local $var$345) + (get_local $var$866) + ) + ) + (set_local $var$1150 + (i32.sub + (get_local $var$379) + (get_local $var$26) + ) + ) + (set_local $var$347 + (i32.add + (get_local $var$1150) + (get_local $var$427) + ) + ) + (set_local $var$1097 + (get_local $var$347) + ) + ) + ) + (set_local $var$29 + (i32.load align=4 + (i32.const 608) + ) + ) + (set_local $var$349 + (i32.add + (get_local $var$29) + (get_local $var$1097) + ) + ) + (set_local $var$723 + (i32.gt_u + (i32.shr_u + (get_local $var$1097) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$857) + (i32.const 0) + ) + ) + ) + (set_local $var$725 + (i32.lt_u + (i32.shr_u + (get_local $var$1097) + (i32.const 0) + ) + (i32.const 2147483647) + ) + ) + (set_local $var$877 + (i32.and + (get_local $var$723) + (get_local $var$725) + ) + ) + (if + (get_local $var$877) + (block $label$160 + (set_local $var$30 + (i32.load align=4 + (i32.const 616) + ) + ) + (set_local $var$728 + (i32.eq + (get_local $var$30) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$728) + (i32.const 0) + ) + (block $label$161 + (set_local $var$731 + (i32.le_u + (i32.shr_u + (get_local $var$349) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$29) + (i32.const 0) + ) + ) + ) + (set_local $var$735 + (i32.gt_u + (i32.shr_u + (get_local $var$349) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$30) + (i32.const 0) + ) + ) + ) + (set_local $var$880 + (i32.or + (get_local $var$731) + (get_local $var$735) + ) + ) + (if + (get_local $var$880) + (br $label$156) + ) + ) + ) + (set_local $var$557 + (call_import $_sbrk + (get_local $var$1097) + ) + ) + (set_local $var$736 + (i32.eq + (get_local $var$557) + (get_local $var$555) + ) + ) + (if_else + (get_local $var$736) + (block $label$162 + (set_local $var$1167 + (get_local $var$555) + ) + (set_local $var$1179 + (get_local $var$1097) + ) + (set_local $var$1188 + (i32.const 193) + ) + (br $label$142) + ) + (block $label$163 + (set_local $var$549 + (get_local $var$557) + ) + (set_local $var$1098 + (get_local $var$1097) + ) + (set_local $var$1188 + (i32.const 183) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (block $label$164 + (if + (i32.eq + (get_local $var$1188) + (i32.const 183) + ) + (block $label$165 + (set_local $var$1117 + (i32.sub + (i32.const 0) + (get_local $var$1098) + ) + ) + (set_local $var$753 + (i32.ne + (get_local $var$549) + (i32.const -1) + ) + ) + (set_local $var$754 + (i32.lt_u + (i32.shr_u + (get_local $var$1098) + (i32.const 0) + ) + (i32.const 2147483647) + ) + ) + (set_local $var$883 + (i32.and + (get_local $var$754) + (get_local $var$753) + ) + ) + (set_local $var$756 + (i32.gt_u + (i32.shr_u + (get_local $var$261) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$1098) + (i32.const 0) + ) + ) + ) + (set_local $var$881 + (i32.and + (get_local $var$756) + (get_local $var$883) + ) + ) + (block $label$166 + (if_else + (get_local $var$881) + (block $label$167 + (set_local $var$34 + (i32.load align=4 + (i32.const 656) + ) + ) + (set_local $var$1160 + (i32.sub + (get_local $var$1103) + (get_local $var$1098) + ) + ) + (set_local $var$314 + (i32.add + (get_local $var$1160) + (get_local $var$34) + ) + ) + (set_local $var$863 + (i32.sub + (i32.const 0) + (get_local $var$34) + ) + ) + (set_local $var$377 + (i32.and + (get_local $var$314) + (get_local $var$863) + ) + ) + (set_local $var$581 + (i32.lt_u + (i32.shr_u + (get_local $var$377) + (i32.const 0) + ) + (i32.const 2147483647) + ) + ) + (if_else + (get_local $var$581) + (block $label$168 + (set_local $var$551 + (call_import $_sbrk + (get_local $var$377) + ) + ) + (set_local $var$585 + (i32.eq + (get_local $var$551) + (i32.const -1) + ) + ) + (if_else + (get_local $var$585) + (block $label$169 + (call_import $_sbrk + (get_local $var$1117) + ) + (br $label$164) + ) + (block $label$170 + (set_local $var$315 + (i32.add + (get_local $var$377) + (get_local $var$1098) + ) + ) + (set_local $var$1099 + (get_local $var$315) + ) + (br $label$166) + ) + ) + ) + (set_local $var$1099 + (get_local $var$1098) + ) + ) + ) + (set_local $var$1099 + (get_local $var$1098) + ) + ) + ) + (set_local $var$591 + (i32.eq + (get_local $var$549) + (i32.const -1) + ) + ) + (if + (i32.eq + (get_local $var$591) + (i32.const 0) + ) + (block $label$171 + (set_local $var$1167 + (get_local $var$549) + ) + (set_local $var$1179 + (get_local $var$1099) + ) + (set_local $var$1188 + (i32.const 193) + ) + (br $label$142) + ) + ) + ) + ) + ) + (set_local $var$35 + (i32.load align=4 + (i32.const 620) + ) + ) + (set_local $var$888 + (i32.or + (get_local $var$35) + (i32.const 4) + ) + ) + (i32.store align=4 + (i32.const 620) + (get_local $var$888) + ) + (set_local $var$1188 + (i32.const 190) + ) + ) + (set_local $var$1188 + (i32.const 190) + ) + ) + ) + (if + (i32.eq + (get_local $var$1188) + (i32.const 190) + ) + (block $label$172 + (set_local $var$600 + (i32.lt_u + (i32.shr_u + (get_local $var$379) + (i32.const 0) + ) + (i32.const 2147483647) + ) + ) + (if + (get_local $var$600) + (block $label$173 + (set_local $var$552 + (call_import $_sbrk + (get_local $var$379) + ) + ) + (set_local $var$553 + (call_import $_sbrk + (i32.const 0) + ) + ) + (set_local $var$606 + (i32.ne + (get_local $var$552) + (i32.const -1) + ) + ) + (set_local $var$608 + (i32.ne + (get_local $var$553) + (i32.const -1) + ) + ) + (set_local $var$882 + (i32.and + (get_local $var$606) + (get_local $var$608) + ) + ) + (set_local $var$610 + (i32.lt_u + (i32.shr_u + (get_local $var$552) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$553) + (i32.const 0) + ) + ) + ) + (set_local $var$884 + (i32.and + (get_local $var$610) + (get_local $var$882) + ) + ) + (if + (get_local $var$884) + (block $label$174 + (set_local $var$1105 + (get_local $var$553) + ) + (set_local $var$1108 + (get_local $var$552) + ) + (set_local $var$1111 + (i32.sub + (get_local $var$1105) + (get_local $var$1108) + ) + ) + (set_local $var$318 + (i32.add + (get_local $var$857) + (i32.const 40) + ) + ) + (set_local $var$615 + (i32.gt_u + (i32.shr_u + (get_local $var$1111) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$318) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$615) + (block $label$175 + (set_local $var$1167 + (get_local $var$552) + ) + (set_local $var$1179 + (get_local $var$1111) + ) + (set_local $var$1188 + (i32.const 193) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $var$1188) + (i32.const 193) + ) + (block $label$176 + (set_local $var$36 + (i32.load align=4 + (i32.const 608) + ) + ) + (set_local $var$320 + (i32.add + (get_local $var$36) + (get_local $var$1179) + ) + ) + (i32.store align=4 + (i32.const 608) + (get_local $var$320) + ) + (set_local $var$37 + (i32.load align=4 + (i32.const 612) + ) + ) + (set_local $var$621 + (i32.gt_u + (i32.shr_u + (get_local $var$320) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$37) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$621) + (i32.store align=4 + (i32.const 612) + (get_local $var$320) + ) + ) + (set_local $var$38 + (i32.load align=4 + (i32.const 200) + ) + ) + (set_local $var$628 + (i32.eq + (get_local $var$38) + (i32.const 0) + ) + ) + (block $label$177 + (if_else + (get_local $var$628) + (block $label$178 + (set_local $var$40 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$630 + (i32.eq + (get_local $var$40) + (i32.const 0) + ) + ) + (set_local $var$635 + (i32.lt_u + (i32.shr_u + (get_local $var$1167) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$40) + (i32.const 0) + ) + ) + ) + (set_local $var$885 + (i32.or + (get_local $var$630) + (get_local $var$635) + ) + ) + (if + (get_local $var$885) + (i32.store align=4 + (i32.const 192) + (get_local $var$1167) + ) + ) + (i32.store align=4 + (i32.const 624) + (get_local $var$1167) + ) + (i32.store align=4 + (i32.const 628) + (get_local $var$1179) + ) + (i32.store align=4 + (i32.const 636) + (i32.const 0) + ) + (set_local $var$41 + (i32.load align=4 + (i32.const 648) + ) + ) + (i32.store align=4 + (i32.const 212) + (get_local $var$41) + ) + (i32.store align=4 + (i32.const 208) + (i32.const -1) + ) + (set_local $var$848 + (i32.const 0) + ) + (loop $label$179 $label$180 + (block $label$181 + (set_local $var$966 + (i32.shl + (get_local $var$848) + (i32.const 1) + ) + ) + (set_local $var$458 + (i32.add + (i32.const 216) + (i32.shl + (get_local $var$966) + (i32.const 2) + ) + ) + ) + (set_local $var$42 + (i32.add + (get_local $var$458) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$42) + (get_local $var$458) + ) + (set_local $var$43 + (i32.add + (get_local $var$458) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$43) + (get_local $var$458) + ) + (set_local $var$850 + (i32.add + (get_local $var$848) + (i32.const 1) + ) + ) + (set_local $var$778 + (i32.eq + (get_local $var$850) + (i32.const 32) + ) + ) + (if_else + (get_local $var$778) + (br $label$179) + (set_local $var$848 + (get_local $var$850) + ) + ) + (br $label$180) + ) + ) + (set_local $var$1123 + (i32.add + (get_local $var$1179) + (i32.const -40) + ) + ) + (set_local $var$266 + (i32.add + (get_local $var$1167) + (i32.const 8) + ) + ) + (set_local $var$44 + (get_local $var$266) + ) + (set_local $var$368 + (i32.and + (get_local $var$44) + (i32.const 7) + ) + ) + (set_local $var$565 + (i32.eq + (get_local $var$368) + (i32.const 0) + ) + ) + (set_local $var$45 + (i32.sub + (i32.const 0) + (get_local $var$44) + ) + ) + (set_local $var$406 + (i32.and + (get_local $var$45) + (i32.const 7) + ) + ) + (set_local $var$766 + (if_else + (get_local $var$565) + (i32.const 0) + (get_local $var$406) + ) + ) + (set_local $var$302 + (i32.add + (get_local $var$1167) + (get_local $var$766) + ) + ) + (set_local $var$1148 + (i32.sub + (get_local $var$1123) + (get_local $var$766) + ) + ) + (i32.store align=4 + (i32.const 200) + (get_local $var$302) + ) + (i32.store align=4 + (i32.const 188) + (get_local $var$1148) + ) + (set_local $var$890 + (i32.or + (get_local $var$1148) + (i32.const 1) + ) + ) + (set_local $var$813 + (i32.add + (get_local $var$302) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$813) + (get_local $var$890) + ) + (set_local $var$307 + (i32.add + (get_local $var$302) + (get_local $var$1148) + ) + ) + (set_local $var$843 + (i32.add + (get_local $var$307) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$843) + (i32.const 40) + ) + (set_local $var$46 + (i32.load align=4 + (i32.const 664) + ) + ) + (i32.store align=4 + (i32.const 204) + (get_local $var$46) + ) + ) + (block $label$182 + (set_local $var$1093 + (i32.const 624) + ) + (loop $label$183 $label$184 + (block $label$185 + (set_local $var$47 + (i32.load align=4 + (get_local $var$1093) + ) + ) + (set_local $var$1086 + (i32.add + (get_local $var$1093) + (i32.const 4) + ) + ) + (set_local $var$48 + (i32.load align=4 + (get_local $var$1086) + ) + ) + (set_local $var$283 + (i32.add + (get_local $var$47) + (get_local $var$48) + ) + ) + (set_local $var$648 + (i32.eq + (get_local $var$1167) + (get_local $var$283) + ) + ) + (if + (get_local $var$648) + (block $label$186 + (set_local $var$1 + (get_local $var$47) + ) + (set_local $var$2 + (get_local $var$48) + ) + (set_local $var$1087 + (get_local $var$1086) + ) + (set_local $var$1094 + (get_local $var$1093) + ) + (set_local $var$1188 + (i32.const 203) + ) + (br $label$183) + ) + ) + (set_local $var$868 + (i32.add + (get_local $var$1093) + (i32.const 8) + ) + ) + (set_local $var$49 + (i32.load align=4 + (get_local $var$868) + ) + ) + (set_local $var$645 + (i32.eq + (get_local $var$49) + (i32.const 0) + ) + ) + (if_else + (get_local $var$645) + (br $label$183) + (set_local $var$1093 + (get_local $var$49) + ) + ) + (br $label$184) + ) + ) + (if + (i32.eq + (get_local $var$1188) + (i32.const 203) + ) + (block $label$187 + (set_local $var$959 + (i32.add + (get_local $var$1094) + (i32.const 12) + ) + ) + (set_local $var$51 + (i32.load align=4 + (get_local $var$959) + ) + ) + (set_local $var$389 + (i32.and + (get_local $var$51) + (i32.const 8) + ) + ) + (set_local $var$1170 + (i32.eq + (get_local $var$389) + (i32.const 0) + ) + ) + (if + (get_local $var$1170) + (block $label$188 + (set_local $var$654 + (i32.ge_u + (i32.shr_u + (get_local $var$38) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$1) + (i32.const 0) + ) + ) + ) + (set_local $var$657 + (i32.lt_u + (i32.shr_u + (get_local $var$38) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$1167) + (i32.const 0) + ) + ) + ) + (set_local $var$886 + (i32.and + (get_local $var$657) + (get_local $var$654) + ) + ) + (if + (get_local $var$886) + (block $label$189 + (set_local $var$329 + (i32.add + (get_local $var$2) + (get_local $var$1179) + ) + ) + (i32.store align=4 + (get_local $var$1087) + (get_local $var$329) + ) + (set_local $var$52 + (i32.load align=4 + (i32.const 188) + ) + ) + (set_local $var$269 + (i32.add + (get_local $var$38) + (i32.const 8) + ) + ) + (set_local $var$53 + (get_local $var$269) + ) + (set_local $var$371 + (i32.and + (get_local $var$53) + (i32.const 7) + ) + ) + (set_local $var$570 + (i32.eq + (get_local $var$371) + (i32.const 0) + ) + ) + (set_local $var$54 + (i32.sub + (i32.const 0) + (get_local $var$53) + ) + ) + (set_local $var$404 + (i32.and + (get_local $var$54) + (i32.const 7) + ) + ) + (set_local $var$764 + (if_else + (get_local $var$570) + (i32.const 0) + (get_local $var$404) + ) + ) + (set_local $var$300 + (i32.add + (get_local $var$38) + (get_local $var$764) + ) + ) + (set_local $var$330 + (i32.sub + (get_local $var$1179) + (get_local $var$764) + ) + ) + (set_local $var$1147 + (i32.add + (get_local $var$330) + (get_local $var$52) + ) + ) + (i32.store align=4 + (i32.const 200) + (get_local $var$300) + ) + (i32.store align=4 + (i32.const 188) + (get_local $var$1147) + ) + (set_local $var$889 + (i32.or + (get_local $var$1147) + (i32.const 1) + ) + ) + (set_local $var$811 + (i32.add + (get_local $var$300) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$811) + (get_local $var$889) + ) + (set_local $var$306 + (i32.add + (get_local $var$300) + (get_local $var$1147) + ) + ) + (set_local $var$842 + (i32.add + (get_local $var$306) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$842) + (i32.const 40) + ) + (set_local $var$55 + (i32.load align=4 + (i32.const 664) + ) + ) + (i32.store align=4 + (i32.const 204) + (get_local $var$55) + ) + (br $label$177) + ) + ) + ) + ) + ) + ) + (set_local $var$56 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$661 + (i32.lt_u + (i32.shr_u + (get_local $var$1167) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$56) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$661) + (block $label$190 + (i32.store align=4 + (i32.const 192) + (get_local $var$1167) + ) + (set_local $var$73 + (get_local $var$1167) + ) + ) + (set_local $var$73 + (get_local $var$56) + ) + ) + (set_local $var$291 + (i32.add + (get_local $var$1167) + (get_local $var$1179) + ) + ) + (set_local $var$1095 + (i32.const 624) + ) + (loop $label$191 $label$192 + (block $label$193 + (set_local $var$57 + (i32.load align=4 + (get_local $var$1095) + ) + ) + (set_local $var$664 + (i32.eq + (get_local $var$57) + (get_local $var$291) + ) + ) + (if + (get_local $var$664) + (block $label$194 + (set_local $var$515 + (get_local $var$1095) + ) + (set_local $var$1096 + (get_local $var$1095) + ) + (set_local $var$1188 + (i32.const 211) + ) + (br $label$191) + ) + ) + (set_local $var$871 + (i32.add + (get_local $var$1095) + (i32.const 8) + ) + ) + (set_local $var$58 + (i32.load align=4 + (get_local $var$871) + ) + ) + (set_local $var$663 + (i32.eq + (get_local $var$58) + (i32.const 0) + ) + ) + (if_else + (get_local $var$663) + (block $label$195 + (set_local $var$1092 + (i32.const 624) + ) + (br $label$191) + ) + (set_local $var$1095 + (get_local $var$58) + ) + ) + (br $label$192) + ) + ) + (if + (i32.eq + (get_local $var$1188) + (i32.const 211) + ) + (block $label$196 + (set_local $var$960 + (i32.add + (get_local $var$1096) + (i32.const 12) + ) + ) + (set_local $var$59 + (i32.load align=4 + (get_local $var$960) + ) + ) + (set_local $var$395 + (i32.and + (get_local $var$59) + (i32.const 8) + ) + ) + (set_local $var$1173 + (i32.eq + (get_local $var$395) + (i32.const 0) + ) + ) + (if_else + (get_local $var$1173) + (block $label$197 + (i32.store align=4 + (get_local $var$515) + (get_local $var$1167) + ) + (set_local $var$1088 + (i32.add + (get_local $var$1096) + (i32.const 4) + ) + ) + (set_local $var$60 + (i32.load align=4 + (get_local $var$1088) + ) + ) + (set_local $var$332 + (i32.add + (get_local $var$60) + (get_local $var$1179) + ) + ) + (i32.store align=4 + (get_local $var$1088) + (get_local $var$332) + ) + (set_local $var$270 + (i32.add + (get_local $var$1167) + (i32.const 8) + ) + ) + (set_local $var$62 + (get_local $var$270) + ) + (set_local $var$372 + (i32.and + (get_local $var$62) + (i32.const 7) + ) + ) + (set_local $var$571 + (i32.eq + (get_local $var$372) + (i32.const 0) + ) + ) + (set_local $var$63 + (i32.sub + (i32.const 0) + (get_local $var$62) + ) + ) + (set_local $var$405 + (i32.and + (get_local $var$63) + (i32.const 7) + ) + ) + (set_local $var$765 + (if_else + (get_local $var$571) + (i32.const 0) + (get_local $var$405) + ) + ) + (set_local $var$301 + (i32.add + (get_local $var$1167) + (get_local $var$765) + ) + ) + (set_local $var$305 + (i32.add + (get_local $var$291) + (i32.const 8) + ) + ) + (set_local $var$64 + (get_local $var$305) + ) + (set_local $var$432 + (i32.and + (get_local $var$64) + (i32.const 7) + ) + ) + (set_local $var$737 + (i32.eq + (get_local $var$432) + (i32.const 0) + ) + ) + (set_local $var$65 + (i32.sub + (i32.const 0) + (get_local $var$64) + ) + ) + (set_local $var$383 + (i32.and + (get_local $var$65) + (i32.const 7) + ) + ) + (set_local $var$771 + (if_else + (get_local $var$737) + (i32.const 0) + (get_local $var$383) + ) + ) + (set_local $var$276 + (i32.add + (get_local $var$291) + (get_local $var$771) + ) + ) + (set_local $var$1106 + (get_local $var$276) + ) + (set_local $var$1109 + (get_local $var$301) + ) + (set_local $var$1112 + (i32.sub + (get_local $var$1106) + (get_local $var$1109) + ) + ) + (set_local $var$279 + (i32.add + (get_local $var$301) + (get_local $var$857) + ) + ) + (set_local $var$1124 + (i32.sub + (get_local $var$1112) + (get_local $var$857) + ) + ) + (set_local $var$902 + (i32.or + (get_local $var$857) + (i32.const 3) + ) + ) + (set_local $var$812 + (i32.add + (get_local $var$301) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$812) + (get_local $var$902) + ) + (set_local $var$653 + (i32.eq + (get_local $var$276) + (get_local $var$38) + ) + ) + (block $label$198 + (if_else + (get_local $var$653) + (block $label$199 + (set_local $var$66 + (i32.load align=4 + (i32.const 188) + ) + ) + (set_local $var$262 + (i32.add + (get_local $var$66) + (get_local $var$1124) + ) + ) + (i32.store align=4 + (i32.const 188) + (get_local $var$262) + ) + (i32.store align=4 + (i32.const 200) + (get_local $var$279) + ) + (set_local $var$907 + (i32.or + (get_local $var$262) + (i32.const 1) + ) + ) + (set_local $var$828 + (i32.add + (get_local $var$279) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$828) + (get_local $var$907) + ) + ) + (block $label$200 + (set_local $var$67 + (i32.load align=4 + (i32.const 196) + ) + ) + (set_local $var$669 + (i32.eq + (get_local $var$276) + (get_local $var$67) + ) + ) + (if + (get_local $var$669) + (block $label$201 + (set_local $var$68 + (i32.load align=4 + (i32.const 184) + ) + ) + (set_local $var$333 + (i32.add + (get_local $var$68) + (get_local $var$1124) + ) + ) + (i32.store align=4 + (i32.const 184) + (get_local $var$333) + ) + (i32.store align=4 + (i32.const 196) + (get_local $var$279) + ) + (set_local $var$916 + (i32.or + (get_local $var$333) + (i32.const 1) + ) + ) + (set_local $var$837 + (i32.add + (get_local $var$279) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$837) + (get_local $var$916) + ) + (set_local $var$298 + (i32.add + (get_local $var$279) + (get_local $var$333) + ) + ) + (i32.store align=4 + (get_local $var$298) + (get_local $var$333) + ) + (br $label$198) + ) + ) + (set_local $var$839 + (i32.add + (get_local $var$276) + (i32.const 4) + ) + ) + (set_local $var$69 + (i32.load align=4 + (get_local $var$839) + ) + ) + (set_local $var$412 + (i32.and + (get_local $var$69) + (i32.const 3) + ) + ) + (set_local $var$695 + (i32.eq + (get_local $var$412) + (i32.const 1) + ) + ) + (if_else + (get_local $var$695) + (block $label$202 + (set_local $var$418 + (i32.and + (get_local $var$69) + (i32.const -8) + ) + ) + (set_local $var$1016 + (i32.shr_u + (get_local $var$69) + (i32.const 3) + ) + ) + (set_local $var$702 + (i32.lt_u + (i32.shr_u + (get_local $var$69) + (i32.const 0) + ) + (i32.const 256) + ) + ) + (block $label$203 + (if_else + (get_local $var$702) + (block $label$204 + (set_local $var$781 + (i32.add + (get_local $var$276) + (i32.const 8) + ) + ) + (set_local $var$70 + (i32.load align=4 + (get_local $var$781) + ) + ) + (set_local $var$519 + (i32.add + (get_local $var$276) + (i32.const 12) + ) + ) + (set_local $var$71 + (i32.load align=4 + (get_local $var$519) + ) + ) + (set_local $var$965 + (i32.shl + (get_local $var$1016) + (i32.const 1) + ) + ) + (set_local $var$457 + (i32.add + (i32.const 216) + (i32.shl + (get_local $var$965) + (i32.const 2) + ) + ) + ) + (set_local $var$707 + (i32.eq + (get_local $var$70) + (get_local $var$457) + ) + ) + (block $label$205 + (if + (i32.eq + (get_local $var$707) + (i32.const 0) + ) + (block $label$206 + (set_local $var$708 + (i32.lt_u + (i32.shr_u + (get_local $var$70) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$73) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$708) + (call_import $_abort) + ) + (set_local $var$541 + (i32.add + (get_local $var$70) + (i32.const 12) + ) + ) + (set_local $var$74 + (i32.load align=4 + (get_local $var$541) + ) + ) + (set_local $var$711 + (i32.eq + (get_local $var$74) + (get_local $var$276) + ) + ) + (if + (get_local $var$711) + (br $label$205) + ) + (call_import $_abort) + ) + ) + ) + (set_local $var$715 + (i32.eq + (get_local $var$71) + (get_local $var$70) + ) + ) + (if + (get_local $var$715) + (block $label$207 + (set_local $var$1001 + (i32.shl + (i32.const 1) + (get_local $var$1016) + ) + ) + (set_local $var$862 + (i32.xor + (get_local $var$1001) + (i32.const -1) + ) + ) + (set_local $var$75 + (i32.load align=4 + (i32.const 176) + ) + ) + (set_local $var$428 + (i32.and + (get_local $var$75) + (get_local $var$862) + ) + ) + (i32.store align=4 + (i32.const 176) + (get_local $var$428) + ) + (br $label$203) + ) + ) + (set_local $var$721 + (i32.eq + (get_local $var$71) + (get_local $var$457) + ) + ) + (block $label$208 + (if_else + (get_local $var$721) + (block $label$209 + (set_local $var$14 + (i32.add + (get_local $var$71) + (i32.const 8) + ) + ) + (set_local $var$802 + (get_local $var$14) + ) + ) + (block $label$210 + (set_local $var$726 + (i32.lt_u + (i32.shr_u + (get_local $var$71) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$73) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$726) + (call_import $_abort) + ) + (set_local $var$801 + (i32.add + (get_local $var$71) + (i32.const 8) + ) + ) + (set_local $var$76 + (i32.load align=4 + (get_local $var$801) + ) + ) + (set_local $var$729 + (i32.eq + (get_local $var$76) + (get_local $var$276) + ) + ) + (if + (get_local $var$729) + (block $label$211 + (set_local $var$802 + (get_local $var$801) + ) + (br $label$208) + ) + ) + (call_import $_abort) + ) + ) + ) + (set_local $var$545 + (i32.add + (get_local $var$70) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$545) + (get_local $var$71) + ) + (i32.store align=4 + (get_local $var$802) + (get_local $var$70) + ) + ) + (block $label$212 + (set_local $var$929 + (i32.add + (get_local $var$276) + (i32.const 24) + ) + ) + (set_local $var$77 + (i32.load align=4 + (get_local $var$929) + ) + ) + (set_local $var$546 + (i32.add + (get_local $var$276) + (i32.const 12) + ) + ) + (set_local $var$78 + (i32.load align=4 + (get_local $var$546) + ) + ) + (set_local $var$740 + (i32.eq + (get_local $var$78) + (get_local $var$276) + ) + ) + (block $label$213 + (if_else + (get_local $var$740) + (block $label$214 + (set_local $var$559 + (i32.add + (get_local $var$276) + (i32.const 16) + ) + ) + (set_local $var$513 + (i32.add + (get_local $var$559) + (i32.const 4) + ) + ) + (set_local $var$82 + (i32.load align=4 + (get_local $var$513) + ) + ) + (set_local $var$759 + (i32.eq + (get_local $var$82) + (i32.const 0) + ) + ) + (if_else + (get_local $var$759) + (block $label$215 + (set_local $var$84 + (i32.load align=4 + (get_local $var$559) + ) + ) + (set_local $var$578 + (i32.eq + (get_local $var$84) + (i32.const 0) + ) + ) + (if_else + (get_local $var$578) + (block $label$216 + (set_local $var$243 + (i32.const 0) + ) + (br $label$213) + ) + (block $label$217 + (set_local $var$238 + (get_local $var$84) + ) + (set_local $var$247 + (get_local $var$559) + ) + ) + ) + ) + (block $label$218 + (set_local $var$238 + (get_local $var$82) + ) + (set_local $var$247 + (get_local $var$513) + ) + ) + ) + (loop $label$219 $label$220 + (block $label$221 + (set_local $var$460 + (i32.add + (get_local $var$238) + (i32.const 20) + ) + ) + (set_local $var$85 + (i32.load align=4 + (get_local $var$460) + ) + ) + (set_local $var$580 + (i32.eq + (get_local $var$85) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$580) + (i32.const 0) + ) + (block $label$222 + (set_local $var$238 + (get_local $var$85) + ) + (set_local $var$247 + (get_local $var$460) + ) + (br $label$220) + ) + ) + (set_local $var$462 + (i32.add + (get_local $var$238) + (i32.const 16) + ) + ) + (set_local $var$86 + (i32.load align=4 + (get_local $var$462) + ) + ) + (set_local $var$586 + (i32.eq + (get_local $var$86) + (i32.const 0) + ) + ) + (if_else + (get_local $var$586) + (block $label$223 + (set_local $var$239 + (get_local $var$238) + ) + (set_local $var$248 + (get_local $var$247) + ) + (br $label$219) + ) + (block $label$224 + (set_local $var$238 + (get_local $var$86) + ) + (set_local $var$247 + (get_local $var$462) + ) + ) + ) + (br $label$220) + ) + ) + (set_local $var$587 + (i32.lt_u + (i32.shr_u + (get_local $var$248) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$73) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$587) + (call_import $_abort) + (block $label$225 + (i32.store align=4 + (get_local $var$248) + (i32.const 0) + ) + (set_local $var$243 + (get_local $var$239) + ) + (br $label$213) + ) + ) + ) + (block $label$226 + (set_local $var$804 + (i32.add + (get_local $var$276) + (i32.const 8) + ) + ) + (set_local $var$79 + (i32.load align=4 + (get_local $var$804) + ) + ) + (set_local $var$746 + (i32.lt_u + (i32.shr_u + (get_local $var$79) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$73) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$746) + (call_import $_abort) + ) + (set_local $var$548 + (i32.add + (get_local $var$79) + (i32.const 12) + ) + ) + (set_local $var$80 + (i32.load align=4 + (get_local $var$548) + ) + ) + (set_local $var$747 + (i32.eq + (get_local $var$80) + (get_local $var$276) + ) + ) + (if + (i32.eq + (get_local $var$747) + (i32.const 0) + ) + (call_import $_abort) + ) + (set_local $var$805 + (i32.add + (get_local $var$78) + (i32.const 8) + ) + ) + (set_local $var$81 + (i32.load align=4 + (get_local $var$805) + ) + ) + (set_local $var$749 + (i32.eq + (get_local $var$81) + (get_local $var$276) + ) + ) + (if_else + (get_local $var$749) + (block $label$227 + (i32.store align=4 + (get_local $var$548) + (get_local $var$78) + ) + (i32.store align=4 + (get_local $var$805) + (get_local $var$79) + ) + (set_local $var$243 + (get_local $var$78) + ) + (br $label$213) + ) + (call_import $_abort) + ) + ) + ) + ) + (set_local $var$594 + (i32.eq + (get_local $var$77) + (i32.const 0) + ) + ) + (if + (get_local $var$594) + (br $label$203) + ) + (set_local $var$853 + (i32.add + (get_local $var$276) + (i32.const 28) + ) + ) + (set_local $var$87 + (i32.load align=4 + (get_local $var$853) + ) + ) + (set_local $var$466 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$87) + (i32.const 2) + ) + ) + ) + (set_local $var$88 + (i32.load align=4 + (get_local $var$466) + ) + ) + (set_local $var$598 + (i32.eq + (get_local $var$276) + (get_local $var$88) + ) + ) + (block $label$228 + (if_else + (get_local $var$598) + (block $label$229 + (i32.store align=4 + (get_local $var$466) + (get_local $var$243) + ) + (set_local $var$773 + (i32.eq + (get_local $var$243) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$773) + (i32.const 0) + ) + (br $label$228) + ) + (set_local $var$972 + (i32.shl + (i32.const 1) + (get_local $var$87) + ) + ) + (set_local $var$865 + (i32.xor + (get_local $var$972) + (i32.const -1) + ) + ) + (set_local $var$89 + (i32.load align=4 + (i32.const 180) + ) + ) + (set_local $var$384 + (i32.and + (get_local $var$89) + (get_local $var$865) + ) + ) + (i32.store align=4 + (i32.const 180) + (get_local $var$384) + ) + (br $label$203) + ) + (block $label$230 + (set_local $var$90 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$611 + (i32.lt_u + (i32.shr_u + (get_local $var$77) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$90) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$611) + (call_import $_abort) + ) + (set_local $var$470 + (i32.add + (get_local $var$77) + (i32.const 16) + ) + ) + (set_local $var$91 + (i32.load align=4 + (get_local $var$470) + ) + ) + (set_local $var$617 + (i32.eq + (get_local $var$91) + (get_local $var$276) + ) + ) + (if_else + (get_local $var$617) + (i32.store align=4 + (get_local $var$470) + (get_local $var$243) + ) + (block $label$231 + (set_local $var$473 + (i32.add + (get_local $var$77) + (i32.const 20) + ) + ) + (i32.store align=4 + (get_local $var$473) + (get_local $var$243) + ) + ) + ) + (set_local $var$627 + (i32.eq + (get_local $var$243) + (i32.const 0) + ) + ) + (if + (get_local $var$627) + (br $label$203) + ) + ) + ) + ) + (set_local $var$92 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$632 + (i32.lt_u + (i32.shr_u + (get_local $var$243) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$92) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$632) + (call_import $_abort) + ) + (set_local $var$935 + (i32.add + (get_local $var$243) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$935) + (get_local $var$77) + ) + (set_local $var$560 + (i32.add + (get_local $var$276) + (i32.const 16) + ) + ) + (set_local $var$93 + (i32.load align=4 + (get_local $var$560) + ) + ) + (set_local $var$637 + (i32.eq + (get_local $var$93) + (i32.const 0) + ) + ) + (block $label$232 + (if + (i32.eq + (get_local $var$637) + (i32.const 0) + ) + (block $label$233 + (set_local $var$639 + (i32.lt_u + (i32.shr_u + (get_local $var$93) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$92) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$639) + (call_import $_abort) + (block $label$234 + (set_local $var$479 + (i32.add + (get_local $var$243) + (i32.const 16) + ) + ) + (i32.store align=4 + (get_local $var$479) + (get_local $var$93) + ) + (set_local $var$937 + (i32.add + (get_local $var$93) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$937) + (get_local $var$243) + ) + (br $label$232) + ) + ) + ) + ) + ) + (set_local $var$481 + (i32.add + (get_local $var$560) + (i32.const 4) + ) + ) + (set_local $var$95 + (i32.load align=4 + (get_local $var$481) + ) + ) + (set_local $var$643 + (i32.eq + (get_local $var$95) + (i32.const 0) + ) + ) + (if + (get_local $var$643) + (br $label$203) + ) + (set_local $var$96 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$646 + (i32.lt_u + (i32.shr_u + (get_local $var$95) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$96) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$646) + (call_import $_abort) + (block $label$235 + (set_local $var$482 + (i32.add + (get_local $var$243) + (i32.const 20) + ) + ) + (i32.store align=4 + (get_local $var$482) + (get_local $var$95) + ) + (set_local $var$938 + (i32.add + (get_local $var$95) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$938) + (get_local $var$243) + ) + (br $label$203) + ) + ) + ) + ) + ) + (set_local $var$288 + (i32.add + (get_local $var$276) + (get_local $var$418) + ) + ) + (set_local $var$328 + (i32.add + (get_local $var$418) + (get_local $var$1124) + ) + ) + (set_local $var$875 + (get_local $var$288) + ) + (set_local $var$948 + (get_local $var$328) + ) + ) + (block $label$236 + (set_local $var$875 + (get_local $var$276) + ) + (set_local $var$948 + (get_local $var$1124) + ) + ) + ) + (set_local $var$826 + (i32.add + (get_local $var$875) + (i32.const 4) + ) + ) + (set_local $var$97 + (i32.load align=4 + (get_local $var$826) + ) + ) + (set_local $var$391 + (i32.and + (get_local $var$97) + (i32.const -2) + ) + ) + (i32.store align=4 + (get_local $var$826) + (get_local $var$391) + ) + (set_local $var$906 + (i32.or + (get_local $var$948) + (i32.const 1) + ) + ) + (set_local $var$827 + (i32.add + (get_local $var$279) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$827) + (get_local $var$906) + ) + (set_local $var$289 + (i32.add + (get_local $var$279) + (get_local $var$948) + ) + ) + (i32.store align=4 + (get_local $var$289) + (get_local $var$948) + ) + (set_local $var$1030 + (i32.shr_u + (get_local $var$948) + (i32.const 3) + ) + ) + (set_local $var$659 + (i32.lt_u + (i32.shr_u + (get_local $var$948) + (i32.const 0) + ) + (i32.const 256) + ) + ) + (if + (get_local $var$659) + (block $label$237 + (set_local $var$979 + (i32.shl + (get_local $var$1030) + (i32.const 1) + ) + ) + (set_local $var$486 + (i32.add + (i32.const 216) + (i32.shl + (get_local $var$979) + (i32.const 2) + ) + ) + ) + (set_local $var$98 + (i32.load align=4 + (i32.const 176) + ) + ) + (set_local $var$980 + (i32.shl + (i32.const 1) + (get_local $var$1030) + ) + ) + (set_local $var$394 + (i32.and + (get_local $var$98) + (get_local $var$980) + ) + ) + (set_local $var$1172 + (i32.eq + (get_local $var$394) + (i32.const 0) + ) + ) + (block $label$238 + (if_else + (get_local $var$1172) + (block $label$239 + (set_local $var$909 + (i32.or + (get_local $var$98) + (get_local $var$980) + ) + ) + (i32.store align=4 + (i32.const 176) + (get_local $var$909) + ) + (set_local $var$6 + (i32.add + (get_local $var$486) + (i32.const 8) + ) + ) + (set_local $var$9 + (get_local $var$6) + ) + (set_local $var$227 + (get_local $var$486) + ) + ) + (block $label$240 + (set_local $var$99 + (i32.add + (get_local $var$486) + (i32.const 8) + ) + ) + (set_local $var$100 + (i32.load align=4 + (get_local $var$99) + ) + ) + (set_local $var$101 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$667 + (i32.lt_u + (i32.shr_u + (get_local $var$100) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$101) + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (get_local $var$667) + (i32.const 0) + ) + (block $label$241 + (set_local $var$9 + (get_local $var$99) + ) + (set_local $var$227 + (get_local $var$100) + ) + (br $label$238) + ) + ) + (call_import $_abort) + ) + ) + ) + (i32.store align=4 + (get_local $var$9) + (get_local $var$279) + ) + (set_local $var$530 + (i32.add + (get_local $var$227) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$530) + (get_local $var$279) + ) + (set_local $var$789 + (i32.add + (get_local $var$279) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$789) + (get_local $var$227) + ) + (set_local $var$531 + (i32.add + (get_local $var$279) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$531) + (get_local $var$486) + ) + (br $label$198) + ) + ) + (set_local $var$1031 + (i32.shr_u + (get_local $var$948) + (i32.const 8) + ) + ) + (set_local $var$672 + (i32.eq + (get_local $var$1031) + (i32.const 0) + ) + ) + (block $label$242 + (if_else + (get_local $var$672) + (set_local $var$229 + (i32.const 0) + ) + (block $label$243 + (set_local $var$674 + (i32.gt_u + (i32.shr_u + (get_local $var$948) + (i32.const 0) + ) + (i32.const 16777215) + ) + ) + (if + (get_local $var$674) + (block $label$244 + (set_local $var$229 + (i32.const 31) + ) + (br $label$242) + ) + ) + (set_local $var$1129 + (i32.add + (get_local $var$1031) + (i32.const 1048320) + ) + ) + (set_local $var$1032 + (i32.shr_u + (get_local $var$1129) + (i32.const 16) + ) + ) + (set_local $var$396 + (i32.and + (get_local $var$1032) + (i32.const 8) + ) + ) + (set_local $var$981 + (i32.shl + (get_local $var$1031) + (get_local $var$396) + ) + ) + (set_local $var$1130 + (i32.add + (get_local $var$981) + (i32.const 520192) + ) + ) + (set_local $var$1033 + (i32.shr_u + (get_local $var$1130) + (i32.const 16) + ) + ) + (set_local $var$397 + (i32.and + (get_local $var$1033) + (i32.const 4) + ) + ) + (set_local $var$335 + (i32.or + (get_local $var$397) + (get_local $var$396) + ) + ) + (set_local $var$982 + (i32.shl + (get_local $var$981) + (get_local $var$397) + ) + ) + (set_local $var$1131 + (i32.add + (get_local $var$982) + (i32.const 245760) + ) + ) + (set_local $var$1035 + (i32.shr_u + (get_local $var$1131) + (i32.const 16) + ) + ) + (set_local $var$398 + (i32.and + (get_local $var$1035) + (i32.const 2) + ) + ) + (set_local $var$336 + (i32.or + (get_local $var$335) + (get_local $var$398) + ) + ) + (set_local $var$1132 + (i32.sub + (i32.const 14) + (get_local $var$336) + ) + ) + (set_local $var$983 + (i32.shl + (get_local $var$982) + (get_local $var$398) + ) + ) + (set_local $var$1036 + (i32.shr_u + (get_local $var$983) + (i32.const 15) + ) + ) + (set_local $var$337 + (i32.add + (get_local $var$1132) + (get_local $var$1036) + ) + ) + (set_local $var$984 + (i32.shl + (get_local $var$337) + (i32.const 1) + ) + ) + (set_local $var$338 + (i32.add + (get_local $var$337) + (i32.const 7) + ) + ) + (set_local $var$1037 + (i32.shr_u + (get_local $var$948) + (get_local $var$338) + ) + ) + (set_local $var$399 + (i32.and + (get_local $var$1037) + (i32.const 1) + ) + ) + (set_local $var$339 + (i32.or + (get_local $var$399) + (get_local $var$984) + ) + ) + (set_local $var$229 + (get_local $var$339) + ) + ) + ) + ) + (set_local $var$493 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$229) + (i32.const 2) + ) + ) + ) + (set_local $var$855 + (i32.add + (get_local $var$279) + (i32.const 28) + ) + ) + (i32.store align=4 + (get_local $var$855) + (get_local $var$229) + ) + (set_local $var$561 + (i32.add + (get_local $var$279) + (i32.const 16) + ) + ) + (set_local $var$495 + (i32.add + (get_local $var$561) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$495) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$561) + (i32.const 0) + ) + (set_local $var$102 + (i32.load align=4 + (i32.const 180) + ) + ) + (set_local $var$987 + (i32.shl + (i32.const 1) + (get_local $var$229) + ) + ) + (set_local $var$402 + (i32.and + (get_local $var$102) + (get_local $var$987) + ) + ) + (set_local $var$1175 + (i32.eq + (get_local $var$402) + (i32.const 0) + ) + ) + (if + (get_local $var$1175) + (block $label$245 + (set_local $var$919 + (i32.or + (get_local $var$102) + (get_local $var$987) + ) + ) + (i32.store align=4 + (i32.const 180) + (get_local $var$919) + ) + (i32.store align=4 + (get_local $var$493) + (get_local $var$279) + ) + (set_local $var$942 + (i32.add + (get_local $var$279) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$942) + (get_local $var$493) + ) + (set_local $var$532 + (i32.add + (get_local $var$279) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$532) + (get_local $var$279) + ) + (set_local $var$790 + (i32.add + (get_local $var$279) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$790) + (get_local $var$279) + ) + (br $label$198) + ) + ) + (set_local $var$103 + (i32.load align=4 + (get_local $var$493) + ) + ) + (set_local $var$684 + (i32.eq + (get_local $var$229) + (i32.const 31) + ) + ) + (set_local $var$1040 + (i32.shr_u + (get_local $var$229) + (i32.const 1) + ) + ) + (set_local $var$1136 + (i32.sub + (i32.const 25) + (get_local $var$1040) + ) + ) + (set_local $var$775 + (if_else + (get_local $var$684) + (i32.const 0) + (get_local $var$1136) + ) + ) + (set_local $var$989 + (i32.shl + (get_local $var$948) + (get_local $var$775) + ) + ) + (set_local $var$233 + (get_local $var$989) + ) + (set_local $var$251 + (get_local $var$103) + ) + (loop $label$246 $label$247 + (block $label$248 + (set_local $var$838 + (i32.add + (get_local $var$251) + (i32.const 4) + ) + ) + (set_local $var$104 + (i32.load align=4 + (get_local $var$838) + ) + ) + (set_local $var$409 + (i32.and + (get_local $var$104) + (i32.const -8) + ) + ) + (set_local $var$687 + (i32.eq + (get_local $var$409) + (get_local $var$948) + ) + ) + (if + (get_local $var$687) + (block $label$249 + (set_local $var$252 + (get_local $var$251) + ) + (set_local $var$1188 + (i32.const 281) + ) + (br $label$246) + ) + ) + (set_local $var$1042 + (i32.shr_u + (get_local $var$233) + (i32.const 31) + ) + ) + (set_local $var$496 + (i32.add + (i32.add + (get_local $var$251) + (i32.const 16) + ) + (i32.shl + (get_local $var$1042) + (i32.const 2) + ) + ) + ) + (set_local $var$990 + (i32.shl + (get_local $var$233) + (i32.const 1) + ) + ) + (set_local $var$106 + (i32.load align=4 + (get_local $var$496) + ) + ) + (set_local $var$691 + (i32.eq + (get_local $var$106) + (i32.const 0) + ) + ) + (if_else + (get_local $var$691) + (block $label$250 + (set_local $var$253 + (get_local $var$251) + ) + (set_local $var$497 + (get_local $var$496) + ) + (set_local $var$1188 + (i32.const 278) + ) + (br $label$246) + ) + (block $label$251 + (set_local $var$233 + (get_local $var$990) + ) + (set_local $var$251 + (get_local $var$106) + ) + ) + ) + (br $label$247) + ) + ) + (if_else + (i32.eq + (get_local $var$1188) + (i32.const 278) + ) + (block $label$252 + (set_local $var$107 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$693 + (i32.lt_u + (i32.shr_u + (get_local $var$497) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$107) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$693) + (call_import $_abort) + (block $label$253 + (i32.store align=4 + (get_local $var$497) + (get_local $var$279) + ) + (set_local $var$943 + (i32.add + (get_local $var$279) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$943) + (get_local $var$253) + ) + (set_local $var$535 + (i32.add + (get_local $var$279) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$535) + (get_local $var$279) + ) + (set_local $var$792 + (i32.add + (get_local $var$279) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$792) + (get_local $var$279) + ) + (br $label$198) + ) + ) + ) + (if + (i32.eq + (get_local $var$1188) + (i32.const 281) + ) + (block $label$254 + (set_local $var$793 + (i32.add + (get_local $var$252) + (i32.const 8) + ) + ) + (set_local $var$108 + (i32.load align=4 + (get_local $var$793) + ) + ) + (set_local $var$109 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$697 + (i32.ge_u + (i32.shr_u + (get_local $var$108) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$109) + (i32.const 0) + ) + ) + ) + (set_local $var$873 + (i32.ge_u + (i32.shr_u + (get_local $var$252) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$109) + (i32.const 0) + ) + ) + ) + (set_local $var$110 + (i32.and + (get_local $var$697) + (get_local $var$873) + ) + ) + (if_else + (get_local $var$110) + (block $label$255 + (set_local $var$536 + (i32.add + (get_local $var$108) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$536) + (get_local $var$279) + ) + (i32.store align=4 + (get_local $var$793) + (get_local $var$279) + ) + (set_local $var$794 + (i32.add + (get_local $var$279) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$794) + (get_local $var$108) + ) + (set_local $var$537 + (i32.add + (get_local $var$279) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$537) + (get_local $var$252) + ) + (set_local $var$944 + (i32.add + (get_local $var$279) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$944) + (i32.const 0) + ) + (br $label$198) + ) + (call_import $_abort) + ) + ) + ) + ) + ) + ) + ) + (set_local $var$299 + (i32.add + (get_local $var$301) + (i32.const 8) + ) + ) + (set_local $var$949 + (get_local $var$299) + ) + (br $label$0 + (get_local $var$949) + ) + ) + (set_local $var$1092 + (i32.const 624) + ) + ) + ) + ) + (loop $label$256 $label$257 + (block $label$258 + (set_local $var$111 + (i32.load align=4 + (get_local $var$1092) + ) + ) + (set_local $var$573 + (i32.gt_u + (i32.shr_u + (get_local $var$111) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$38) + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (get_local $var$573) + (i32.const 0) + ) + (block $label$259 + (set_local $var$1084 + (i32.add + (get_local $var$1092) + (i32.const 4) + ) + ) + (set_local $var$112 + (i32.load align=4 + (get_local $var$1084) + ) + ) + (set_local $var$272 + (i32.add + (get_local $var$111) + (get_local $var$112) + ) + ) + (set_local $var$652 + (i32.gt_u + (i32.shr_u + (get_local $var$272) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$38) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$652) + (block $label$260 + (set_local $var$273 + (get_local $var$272) + ) + (br $label$256) + ) + ) + ) + ) + (set_local $var$870 + (i32.add + (get_local $var$1092) + (i32.const 8) + ) + ) + (set_local $var$113 + (i32.load align=4 + (get_local $var$870) + ) + ) + (set_local $var$1092 + (get_local $var$113) + ) + (br $label$257) + ) + ) + (set_local $var$287 + (i32.add + (get_local $var$273) + (i32.const -47) + ) + ) + (set_local $var$297 + (i32.add + (get_local $var$287) + (i32.const 8) + ) + ) + (set_local $var$114 + (get_local $var$297) + ) + (set_local $var$369 + (i32.and + (get_local $var$114) + (i32.const 7) + ) + ) + (set_local $var$567 + (i32.eq + (get_local $var$369) + (i32.const 0) + ) + ) + (set_local $var$115 + (i32.sub + (i32.const 0) + (get_local $var$114) + ) + ) + (set_local $var$433 + (i32.and + (get_local $var$115) + (i32.const 7) + ) + ) + (set_local $var$763 + (if_else + (get_local $var$567) + (i32.const 0) + (get_local $var$433) + ) + ) + (set_local $var$309 + (i32.add + (get_local $var$287) + (get_local $var$763) + ) + ) + (set_local $var$310 + (i32.add + (get_local $var$38) + (i32.const 16) + ) + ) + (set_local $var$751 + (i32.lt_u + (i32.shr_u + (get_local $var$309) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$310) + (i32.const 0) + ) + ) + ) + (set_local $var$770 + (if_else + (get_local $var$751) + (get_local $var$38) + (get_local $var$309) + ) + ) + (set_local $var$274 + (i32.add + (get_local $var$770) + (i32.const 8) + ) + ) + (set_local $var$275 + (i32.add + (get_local $var$770) + (i32.const 24) + ) + ) + (set_local $var$1121 + (i32.add + (get_local $var$1179) + (i32.const -40) + ) + ) + (set_local $var$265 + (i32.add + (get_local $var$1167) + (i32.const 8) + ) + ) + (set_local $var$117 + (get_local $var$265) + ) + (set_local $var$374 + (i32.and + (get_local $var$117) + (i32.const 7) + ) + ) + (set_local $var$569 + (i32.eq + (get_local $var$374) + (i32.const 0) + ) + ) + (set_local $var$118 + (i32.sub + (i32.const 0) + (get_local $var$117) + ) + ) + (set_local $var$407 + (i32.and + (get_local $var$118) + (i32.const 7) + ) + ) + (set_local $var$767 + (if_else + (get_local $var$569) + (i32.const 0) + (get_local $var$407) + ) + ) + (set_local $var$303 + (i32.add + (get_local $var$1167) + (get_local $var$767) + ) + ) + (set_local $var$1149 + (i32.sub + (get_local $var$1121) + (get_local $var$767) + ) + ) + (i32.store align=4 + (i32.const 200) + (get_local $var$303) + ) + (i32.store align=4 + (i32.const 188) + (get_local $var$1149) + ) + (set_local $var$891 + (i32.or + (get_local $var$1149) + (i32.const 1) + ) + ) + (set_local $var$814 + (i32.add + (get_local $var$303) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$814) + (get_local $var$891) + ) + (set_local $var$308 + (i32.add + (get_local $var$303) + (get_local $var$1149) + ) + ) + (set_local $var$844 + (i32.add + (get_local $var$308) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$844) + (i32.const 40) + ) + (set_local $var$119 + (i32.load align=4 + (i32.const 664) + ) + ) + (i32.store align=4 + (i32.const 204) + (get_local $var$119) + ) + (set_local $var$810 + (i32.add + (get_local $var$770) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$810) + (i32.const 27) + ) + (i32.store align=4 + (get_local $var$274) + (i32.load align=4 + (i32.const 624) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$274) + (i32.const 4) + ) + (i32.load align=4 + (i32.add + (i32.const 624) + (i32.const 4) + ) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$274) + (i32.const 8) + ) + (i32.load align=4 + (i32.add + (i32.const 624) + (i32.const 8) + ) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$274) + (i32.const 12) + ) + (i32.load align=4 + (i32.add + (i32.const 624) + (i32.const 12) + ) + ) + ) + (i32.store align=4 + (i32.const 624) + (get_local $var$1167) + ) + (i32.store align=4 + (i32.const 628) + (get_local $var$1179) + ) + (i32.store align=4 + (i32.const 636) + (i32.const 0) + ) + (i32.store align=4 + (i32.const 632) + (get_local $var$274) + ) + (set_local $var$926 + (get_local $var$275) + ) + (loop $label$261 $label$262 + (block $label$263 + (set_local $var$292 + (i32.add + (get_local $var$926) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$292) + (i32.const 7) + ) + (set_local $var$120 + (i32.add + (get_local $var$292) + (i32.const 4) + ) + ) + (set_local $var$677 + (i32.lt_u + (i32.shr_u + (get_local $var$120) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$273) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$677) + (set_local $var$926 + (get_local $var$292) + ) + (br $label$261) + ) + (br $label$262) + ) + ) + (set_local $var$679 + (i32.eq + (get_local $var$770) + (get_local $var$38) + ) + ) + (if + (i32.eq + (get_local $var$679) + (i32.const 0) + ) + (block $label$264 + (set_local $var$1107 + (get_local $var$770) + ) + (set_local $var$1110 + (get_local $var$38) + ) + (set_local $var$1113 + (i32.sub + (get_local $var$1107) + (get_local $var$1110) + ) + ) + (set_local $var$121 + (i32.load align=4 + (get_local $var$810) + ) + ) + (set_local $var$411 + (i32.and + (get_local $var$121) + (i32.const -2) + ) + ) + (i32.store align=4 + (get_local $var$810) + (get_local $var$411) + ) + (set_local $var$920 + (i32.or + (get_local $var$1113) + (i32.const 1) + ) + ) + (set_local $var$840 + (i32.add + (get_local $var$38) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$840) + (get_local $var$920) + ) + (i32.store align=4 + (get_local $var$770) + (get_local $var$1113) + ) + (set_local $var$1017 + (i32.shr_u + (get_local $var$1113) + (i32.const 3) + ) + ) + (set_local $var$699 + (i32.lt_u + (i32.shr_u + (get_local $var$1113) + (i32.const 0) + ) + (i32.const 256) + ) + ) + (if + (get_local $var$699) + (block $label$265 + (set_local $var$964 + (i32.shl + (get_local $var$1017) + (i32.const 1) + ) + ) + (set_local $var$456 + (i32.add + (i32.const 216) + (i32.shl + (get_local $var$964) + (i32.const 2) + ) + ) + ) + (set_local $var$122 + (i32.load align=4 + (i32.const 176) + ) + ) + (set_local $var$999 + (i32.shl + (i32.const 1) + (get_local $var$1017) + ) + ) + (set_local $var$421 + (i32.and + (get_local $var$122) + (get_local $var$999) + ) + ) + (set_local $var$1168 + (i32.eq + (get_local $var$421) + (i32.const 0) + ) + ) + (if_else + (get_local $var$1168) + (block $label$266 + (set_local $var$923 + (i32.or + (get_local $var$122) + (get_local $var$999) + ) + ) + (i32.store align=4 + (i32.const 176) + (get_local $var$923) + ) + (set_local $var$7 + (i32.add + (get_local $var$456) + (i32.const 8) + ) + ) + (set_local $var$10 + (get_local $var$7) + ) + (set_local $var$224 + (get_local $var$456) + ) + ) + (block $label$267 + (set_local $var$123 + (i32.add + (get_local $var$456) + (i32.const 8) + ) + ) + (set_local $var$124 + (i32.load align=4 + (get_local $var$123) + ) + ) + (set_local $var$125 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$716 + (i32.lt_u + (i32.shr_u + (get_local $var$124) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$125) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$716) + (call_import $_abort) + (block $label$268 + (set_local $var$10 + (get_local $var$123) + ) + (set_local $var$224 + (get_local $var$124) + ) + ) + ) + ) + ) + (i32.store align=4 + (get_local $var$10) + (get_local $var$38) + ) + (set_local $var$520 + (i32.add + (get_local $var$224) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$520) + (get_local $var$38) + ) + (set_local $var$800 + (i32.add + (get_local $var$38) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$800) + (get_local $var$224) + ) + (set_local $var$544 + (i32.add + (get_local $var$38) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$544) + (get_local $var$456) + ) + (br $label$177) + ) + ) + (set_local $var$1061 + (i32.shr_u + (get_local $var$1113) + (i32.const 8) + ) + ) + (set_local $var$727 + (i32.eq + (get_local $var$1061) + (i32.const 0) + ) + ) + (if_else + (get_local $var$727) + (set_local $var$231 + (i32.const 0) + ) + (block $label$269 + (set_local $var$732 + (i32.gt_u + (i32.shr_u + (get_local $var$1113) + (i32.const 0) + ) + (i32.const 16777215) + ) + ) + (if_else + (get_local $var$732) + (set_local $var$231 + (i32.const 31) + ) + (block $label$270 + (set_local $var$1154 + (i32.add + (get_local $var$1061) + (i32.const 1048320) + ) + ) + (set_local $var$1065 + (i32.shr_u + (get_local $var$1154) + (i32.const 16) + ) + ) + (set_local $var$437 + (i32.and + (get_local $var$1065) + (i32.const 8) + ) + ) + (set_local $var$1005 + (i32.shl + (get_local $var$1061) + (get_local $var$437) + ) + ) + (set_local $var$1156 + (i32.add + (get_local $var$1005) + (i32.const 520192) + ) + ) + (set_local $var$1069 + (i32.shr_u + (get_local $var$1156) + (i32.const 16) + ) + ) + (set_local $var$441 + (i32.and + (get_local $var$1069) + (i32.const 4) + ) + ) + (set_local $var$353 + (i32.or + (get_local $var$441) + (get_local $var$437) + ) + ) + (set_local $var$1007 + (i32.shl + (get_local $var$1005) + (get_local $var$441) + ) + ) + (set_local $var$1157 + (i32.add + (get_local $var$1007) + (i32.const 245760) + ) + ) + (set_local $var$1072 + (i32.shr_u + (get_local $var$1157) + (i32.const 16) + ) + ) + (set_local $var$444 + (i32.and + (get_local $var$1072) + (i32.const 2) + ) + ) + (set_local $var$356 + (i32.or + (get_local $var$353) + (get_local $var$444) + ) + ) + (set_local $var$1158 + (i32.sub + (i32.const 14) + (get_local $var$356) + ) + ) + (set_local $var$1008 + (i32.shl + (get_local $var$1007) + (get_local $var$444) + ) + ) + (set_local $var$1076 + (i32.shr_u + (get_local $var$1008) + (i32.const 15) + ) + ) + (set_local $var$359 + (i32.add + (get_local $var$1158) + (get_local $var$1076) + ) + ) + (set_local $var$1009 + (i32.shl + (get_local $var$359) + (i32.const 1) + ) + ) + (set_local $var$360 + (i32.add + (get_local $var$359) + (i32.const 7) + ) + ) + (set_local $var$1079 + (i32.shr_u + (get_local $var$1113) + (get_local $var$360) + ) + ) + (set_local $var$449 + (i32.and + (get_local $var$1079) + (i32.const 1) + ) + ) + (set_local $var$362 + (i32.or + (get_local $var$449) + (get_local $var$1009) + ) + ) + (set_local $var$231 + (get_local $var$362) + ) + ) + ) + ) + ) + (set_local $var$509 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$231) + (i32.const 2) + ) + ) + ) + (set_local $var$854 + (i32.add + (get_local $var$38) + (i32.const 28) + ) + ) + (i32.store align=4 + (get_local $var$854) + (get_local $var$231) + ) + (set_local $var$510 + (i32.add + (get_local $var$38) + (i32.const 20) + ) + ) + (i32.store align=4 + (get_local $var$510) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$310) + (i32.const 0) + ) + (set_local $var$126 + (i32.load align=4 + (i32.const 180) + ) + ) + (set_local $var$1012 + (i32.shl + (i32.const 1) + (get_local $var$231) + ) + ) + (set_local $var$452 + (i32.and + (get_local $var$126) + (get_local $var$1012) + ) + ) + (set_local $var$1178 + (i32.eq + (get_local $var$452) + (i32.const 0) + ) + ) + (if + (get_local $var$1178) + (block $label$271 + (set_local $var$892 + (i32.or + (get_local $var$126) + (get_local $var$1012) + ) + ) + (i32.store align=4 + (i32.const 180) + (get_local $var$892) + ) + (i32.store align=4 + (get_local $var$509) + (get_local $var$38) + ) + (set_local $var$930 + (i32.add + (get_local $var$38) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$930) + (get_local $var$509) + ) + (set_local $var$521 + (i32.add + (get_local $var$38) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$521) + (get_local $var$38) + ) + (set_local $var$782 + (i32.add + (get_local $var$38) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$782) + (get_local $var$38) + ) + (br $label$177) + ) + ) + (set_local $var$129 + (i32.load align=4 + (get_local $var$509) + ) + ) + (set_local $var$582 + (i32.eq + (get_local $var$231) + (i32.const 31) + ) + ) + (set_local $var$1021 + (i32.shr_u + (get_local $var$231) + (i32.const 1) + ) + ) + (set_local $var$1118 + (i32.sub + (i32.const 25) + (get_local $var$1021) + ) + ) + (set_local $var$769 + (if_else + (get_local $var$582) + (i32.const 0) + (get_local $var$1118) + ) + ) + (set_local $var$969 + (i32.shl + (get_local $var$1113) + (get_local $var$769) + ) + ) + (set_local $var$232 + (get_local $var$969) + ) + (set_local $var$254 + (get_local $var$129) + ) + (loop $label$272 $label$273 + (block $label$274 + (set_local $var$815 + (i32.add + (get_local $var$254) + (i32.const 4) + ) + ) + (set_local $var$130 + (i32.load align=4 + (get_local $var$815) + ) + ) + (set_local $var$380 + (i32.and + (get_local $var$130) + (i32.const -8) + ) + ) + (set_local $var$595 + (i32.eq + (get_local $var$380) + (get_local $var$1113) + ) + ) + (if + (get_local $var$595) + (block $label$275 + (set_local $var$255 + (get_local $var$254) + ) + (set_local $var$1188 + (i32.const 307) + ) + (br $label$272) + ) + ) + (set_local $var$1023 + (i32.shr_u + (get_local $var$232) + (i32.const 31) + ) + ) + (set_local $var$467 + (i32.add + (i32.add + (get_local $var$254) + (i32.const 16) + ) + (i32.shl + (get_local $var$1023) + (i32.const 2) + ) + ) + ) + (set_local $var$971 + (i32.shl + (get_local $var$232) + (i32.const 1) + ) + ) + (set_local $var$131 + (i32.load align=4 + (get_local $var$467) + ) + ) + (set_local $var$603 + (i32.eq + (get_local $var$131) + (i32.const 0) + ) + ) + (if_else + (get_local $var$603) + (block $label$276 + (set_local $var$256 + (get_local $var$254) + ) + (set_local $var$468 + (get_local $var$467) + ) + (set_local $var$1188 + (i32.const 304) + ) + (br $label$272) + ) + (block $label$277 + (set_local $var$232 + (get_local $var$971) + ) + (set_local $var$254 + (get_local $var$131) + ) + ) + ) + (br $label$273) + ) + ) + (if_else + (i32.eq + (get_local $var$1188) + (i32.const 304) + ) + (block $label$278 + (set_local $var$132 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$607 + (i32.lt_u + (i32.shr_u + (get_local $var$468) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$132) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$607) + (call_import $_abort) + (block $label$279 + (i32.store align=4 + (get_local $var$468) + (get_local $var$38) + ) + (set_local $var$932 + (i32.add + (get_local $var$38) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$932) + (get_local $var$256) + ) + (set_local $var$525 + (i32.add + (get_local $var$38) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$525) + (get_local $var$38) + ) + (set_local $var$785 + (i32.add + (get_local $var$38) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$785) + (get_local $var$38) + ) + (br $label$177) + ) + ) + ) + (if + (i32.eq + (get_local $var$1188) + (i32.const 307) + ) + (block $label$280 + (set_local $var$786 + (i32.add + (get_local $var$255) + (i32.const 8) + ) + ) + (set_local $var$133 + (i32.load align=4 + (get_local $var$786) + ) + ) + (set_local $var$134 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$623 + (i32.ge_u + (i32.shr_u + (get_local $var$133) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$134) + (i32.const 0) + ) + ) + ) + (set_local $var$872 + (i32.ge_u + (i32.shr_u + (get_local $var$255) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$134) + (i32.const 0) + ) + ) + ) + (set_local $var$135 + (i32.and + (get_local $var$623) + (get_local $var$872) + ) + ) + (if_else + (get_local $var$135) + (block $label$281 + (set_local $var$526 + (i32.add + (get_local $var$133) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$526) + (get_local $var$38) + ) + (i32.store align=4 + (get_local $var$786) + (get_local $var$38) + ) + (set_local $var$787 + (i32.add + (get_local $var$38) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$787) + (get_local $var$133) + ) + (set_local $var$527 + (i32.add + (get_local $var$38) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$527) + (get_local $var$255) + ) + (set_local $var$934 + (i32.add + (get_local $var$38) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$934) + (i32.const 0) + ) + (br $label$177) + ) + (call_import $_abort) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $var$136 + (i32.load align=4 + (i32.const 188) + ) + ) + (set_local $var$673 + (i32.gt_u + (i32.shr_u + (get_local $var$136) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$857) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$673) + (block $label$282 + (set_local $var$1128 + (i32.sub + (get_local $var$136) + (get_local $var$857) + ) + ) + (i32.store align=4 + (i32.const 188) + (get_local $var$1128) + ) + (set_local $var$137 + (i32.load align=4 + (i32.const 200) + ) + ) + (set_local $var$293 + (i32.add + (get_local $var$137) + (get_local $var$857) + ) + ) + (i32.store align=4 + (i32.const 200) + (get_local $var$293) + ) + (set_local $var$911 + (i32.or + (get_local $var$1128) + (i32.const 1) + ) + ) + (set_local $var$830 + (i32.add + (get_local $var$293) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$830) + (get_local $var$911) + ) + (set_local $var$912 + (i32.or + (get_local $var$857) + (i32.const 3) + ) + ) + (set_local $var$831 + (i32.add + (get_local $var$137) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$831) + (get_local $var$912) + ) + (set_local $var$294 + (i32.add + (get_local $var$137) + (i32.const 8) + ) + ) + (set_local $var$949 + (get_local $var$294) + ) + (br $label$0 + (get_local $var$949) + ) + ) + ) + ) + ) + (set_local $var$554 + (call $___errno_location) + ) + (i32.store align=4 + (get_local $var$554) + (i32.const 12) + ) + (set_local $var$949 + (i32.const 0) + ) + (get_local $var$949) + ) + ) + (func $_free (type $2) (param $var$0 i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (local $var$19 i32) + (local $var$20 i32) + (local $var$21 i32) + (local $var$22 i32) + (local $var$23 i32) + (local $var$24 i32) + (local $var$25 i32) + (local $var$26 i32) + (local $var$27 i32) + (local $var$28 i32) + (local $var$29 i32) + (local $var$30 i32) + (local $var$31 i32) + (local $var$32 i32) + (local $var$33 i32) + (local $var$34 i32) + (local $var$35 i32) + (local $var$36 i32) + (local $var$37 i32) + (local $var$38 i32) + (local $var$39 i32) + (local $var$40 i32) + (local $var$41 i32) + (local $var$42 i32) + (local $var$43 i32) + (local $var$44 i32) + (local $var$45 i32) + (local $var$46 i32) + (local $var$47 i32) + (local $var$48 i32) + (local $var$49 i32) + (local $var$50 i32) + (local $var$51 i32) + (local $var$52 i32) + (local $var$53 i32) + (local $var$54 i32) + (local $var$55 i32) + (local $var$56 i32) + (local $var$57 i32) + (local $var$58 i32) + (local $var$59 i32) + (local $var$60 i32) + (local $var$61 i32) + (local $var$62 i32) + (local $var$63 i32) + (local $var$64 i32) + (local $var$65 i32) + (local $var$66 i32) + (local $var$67 i32) + (local $var$68 i32) + (local $var$69 i32) + (local $var$70 i32) + (local $var$71 i32) + (local $var$72 i32) + (local $var$73 i32) + (local $var$74 i32) + (local $var$75 i32) + (local $var$76 i32) + (local $var$77 i32) + (local $var$78 i32) + (local $var$79 i32) + (local $var$80 i32) + (local $var$81 i32) + (local $var$82 i32) + (local $var$83 i32) + (local $var$84 i32) + (local $var$85 i32) + (local $var$86 i32) + (local $var$87 i32) + (local $var$88 i32) + (local $var$89 i32) + (local $var$90 i32) + (local $var$91 i32) + (local $var$92 i32) + (local $var$93 i32) + (local $var$94 i32) + (local $var$95 i32) + (local $var$96 i32) + (local $var$97 i32) + (local $var$98 i32) + (local $var$99 i32) + (local $var$100 i32) + (local $var$101 i32) + (local $var$102 i32) + (local $var$103 i32) + (local $var$104 i32) + (local $var$105 i32) + (local $var$106 i32) + (local $var$107 i32) + (local $var$108 i32) + (local $var$109 i32) + (local $var$110 i32) + (local $var$111 i32) + (local $var$112 i32) + (local $var$113 i32) + (local $var$114 i32) + (local $var$115 i32) + (local $var$116 i32) + (local $var$117 i32) + (local $var$118 i32) + (local $var$119 i32) + (local $var$120 i32) + (local $var$121 i32) + (local $var$122 i32) + (local $var$123 i32) + (local $var$124 i32) + (local $var$125 i32) + (local $var$126 i32) + (local $var$127 i32) + (local $var$128 i32) + (local $var$129 i32) + (local $var$130 i32) + (local $var$131 i32) + (local $var$132 i32) + (local $var$133 i32) + (local $var$134 i32) + (local $var$135 i32) + (local $var$136 i32) + (local $var$137 i32) + (local $var$138 i32) + (local $var$139 i32) + (local $var$140 i32) + (local $var$141 i32) + (local $var$142 i32) + (local $var$143 i32) + (local $var$144 i32) + (local $var$145 i32) + (local $var$146 i32) + (local $var$147 i32) + (local $var$148 i32) + (local $var$149 i32) + (local $var$150 i32) + (local $var$151 i32) + (local $var$152 i32) + (local $var$153 i32) + (local $var$154 i32) + (local $var$155 i32) + (local $var$156 i32) + (local $var$157 i32) + (local $var$158 i32) + (local $var$159 i32) + (local $var$160 i32) + (local $var$161 i32) + (local $var$162 i32) + (local $var$163 i32) + (local $var$164 i32) + (local $var$165 i32) + (local $var$166 i32) + (local $var$167 i32) + (local $var$168 i32) + (local $var$169 i32) + (local $var$170 i32) + (local $var$171 i32) + (local $var$172 i32) + (local $var$173 i32) + (local $var$174 i32) + (local $var$175 i32) + (local $var$176 i32) + (local $var$177 i32) + (local $var$178 i32) + (local $var$179 i32) + (local $var$180 i32) + (local $var$181 i32) + (local $var$182 i32) + (local $var$183 i32) + (local $var$184 i32) + (local $var$185 i32) + (local $var$186 i32) + (local $var$187 i32) + (local $var$188 i32) + (local $var$189 i32) + (local $var$190 i32) + (local $var$191 i32) + (local $var$192 i32) + (local $var$193 i32) + (local $var$194 i32) + (local $var$195 i32) + (local $var$196 i32) + (local $var$197 i32) + (local $var$198 i32) + (local $var$199 i32) + (local $var$200 i32) + (local $var$201 i32) + (local $var$202 i32) + (local $var$203 i32) + (local $var$204 i32) + (local $var$205 i32) + (local $var$206 i32) + (local $var$207 i32) + (local $var$208 i32) + (local $var$209 i32) + (local $var$210 i32) + (local $var$211 i32) + (local $var$212 i32) + (local $var$213 i32) + (local $var$214 i32) + (local $var$215 i32) + (local $var$216 i32) + (local $var$217 i32) + (local $var$218 i32) + (local $var$219 i32) + (local $var$220 i32) + (local $var$221 i32) + (local $var$222 i32) + (local $var$223 i32) + (local $var$224 i32) + (local $var$225 i32) + (local $var$226 i32) + (local $var$227 i32) + (local $var$228 i32) + (local $var$229 i32) + (local $var$230 i32) + (local $var$231 i32) + (local $var$232 i32) + (local $var$233 i32) + (local $var$234 i32) + (local $var$235 i32) + (local $var$236 i32) + (local $var$237 i32) + (local $var$238 i32) + (local $var$239 i32) + (local $var$240 i32) + (local $var$241 i32) + (local $var$242 i32) + (local $var$243 i32) + (local $var$244 i32) + (local $var$245 i32) + (local $var$246 i32) + (local $var$247 i32) + (local $var$248 i32) + (local $var$249 i32) + (local $var$250 i32) + (local $var$251 i32) + (local $var$252 i32) + (local $var$253 i32) + (local $var$254 i32) + (local $var$255 i32) + (local $var$256 i32) + (local $var$257 i32) + (local $var$258 i32) + (local $var$259 i32) + (local $var$260 i32) + (local $var$261 i32) + (local $var$262 i32) + (local $var$263 i32) + (local $var$264 i32) + (local $var$265 i32) + (local $var$266 i32) + (local $var$267 i32) + (local $var$268 i32) + (local $var$269 i32) + (local $var$270 i32) + (local $var$271 i32) + (local $var$272 i32) + (local $var$273 i32) + (local $var$274 i32) + (local $var$275 i32) + (local $var$276 i32) + (local $var$277 i32) + (local $var$278 i32) + (local $var$279 i32) + (local $var$280 i32) + (local $var$281 i32) + (local $var$282 i32) + (local $var$283 i32) + (local $var$284 i32) + (local $var$285 i32) + (local $var$286 i32) + (local $var$287 i32) + (local $var$288 i32) + (local $var$289 i32) + (local $var$290 i32) + (local $var$291 i32) + (local $var$292 i32) + (local $var$293 i32) + (local $var$294 i32) + (local $var$295 i32) + (local $var$296 i32) + (local $var$297 i32) + (local $var$298 i32) + (local $var$299 i32) + (local $var$300 i32) + (local $var$301 i32) + (local $var$302 i32) + (local $var$303 i32) + (local $var$304 i32) + (local $var$305 i32) + (local $var$306 i32) + (local $var$307 i32) + (local $var$308 i32) + (local $var$309 i32) + (local $var$310 i32) + (local $var$311 i32) + (local $var$312 i32) + (local $var$313 i32) + (local $var$314 i32) + (local $var$315 i32) + (local $var$316 i32) + (local $var$317 i32) + (local $var$318 i32) + (local $var$319 i32) + (local $var$320 i32) + (local $var$321 i32) + (local $var$322 i32) + (local $var$323 i32) + (local $var$324 i32) + (local $var$325 i32) + (local $var$326 i32) + (local $var$327 i32) + (local $var$328 i32) + (local $var$329 i32) + (local $var$330 i32) + (local $var$331 i32) + (local $var$332 i32) + (local $var$333 i32) + (local $var$334 i32) + (local $var$335 i32) + (local $var$336 i32) + (local $var$337 i32) + (local $var$338 i32) + (local $var$339 i32) + (local $var$340 i32) + (local $var$341 i32) + (local $var$342 i32) + (local $var$343 i32) + (local $var$344 i32) + (local $var$345 i32) + (local $var$346 i32) + (local $var$347 i32) + (local $var$348 i32) + (local $var$349 i32) + (local $var$350 i32) + (local $var$351 i32) + (local $var$352 i32) + (local $var$353 i32) + (block $label$0 + (set_local $var$353 + (i32.load align=4 + (i32.const 8) + ) + ) + (set_local $var$178 + (i32.eq + (get_local $var$0) + (i32.const 0) + ) + ) + (if + (get_local $var$178) + (br $label$0) + ) + (set_local $var$96 + (i32.add + (get_local $var$0) + (i32.const -8) + ) + ) + (set_local $var$5 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$180 + (i32.lt_u + (i32.shr_u + (get_local $var$96) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$5) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$180) + (call_import $_abort) + ) + (set_local $var$274 + (i32.add + (get_local $var$0) + (i32.const -4) + ) + ) + (set_local $var$6 + (i32.load align=4 + (get_local $var$274) + ) + ) + (set_local $var$112 + (i32.and + (get_local $var$6) + (i32.const 3) + ) + ) + (set_local $var$198 + (i32.eq + (get_local $var$112) + (i32.const 1) + ) + ) + (if + (get_local $var$198) + (call_import $_abort) + ) + (set_local $var$123 + (i32.and + (get_local $var$6) + (i32.const -8) + ) + ) + (set_local $var$102 + (i32.add + (get_local $var$96) + (get_local $var$123) + ) + ) + (set_local $var$131 + (i32.and + (get_local $var$6) + (i32.const 1) + ) + ) + (set_local $var$351 + (i32.eq + (get_local $var$131) + (i32.const 0) + ) + ) + (block $label$1 + (if_else + (get_local $var$351) + (block $label$2 + (set_local $var$17 + (i32.load align=4 + (get_local $var$96) + ) + ) + (set_local $var$187 + (i32.eq + (get_local $var$112) + (i32.const 0) + ) + ) + (if + (get_local $var$187) + (br $label$0) + ) + (set_local $var$283 + (i32.sub + (i32.const 0) + (get_local $var$17) + ) + ) + (set_local $var$97 + (i32.add + (get_local $var$96) + (get_local $var$283) + ) + ) + (set_local $var$103 + (i32.add + (get_local $var$17) + (get_local $var$123) + ) + ) + (set_local $var$195 + (i32.lt_u + (i32.shr_u + (get_local $var$97) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$5) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$195) + (call_import $_abort) + ) + (set_local $var$28 + (i32.load align=4 + (i32.const 196) + ) + ) + (set_local $var$200 + (i32.eq + (get_local $var$97) + (get_local $var$28) + ) + ) + (if + (get_local $var$200) + (block $label$3 + (set_local $var$275 + (i32.add + (get_local $var$102) + (i32.const 4) + ) + ) + (set_local $var$25 + (i32.load align=4 + (get_local $var$275) + ) + ) + (set_local $var$114 + (i32.and + (get_local $var$25) + (i32.const 3) + ) + ) + (set_local $var$199 + (i32.eq + (get_local $var$114) + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $var$199) + (i32.const 0) + ) + (block $label$4 + (set_local $var$300 + (get_local $var$97) + ) + (set_local $var$312 + (get_local $var$103) + ) + (br $label$1) + ) + ) + (i32.store align=4 + (i32.const 184) + (get_local $var$103) + ) + (set_local $var$115 + (i32.and + (get_local $var$25) + (i32.const -2) + ) + ) + (i32.store align=4 + (get_local $var$275) + (get_local $var$115) + ) + (set_local $var$293 + (i32.or + (get_local $var$103) + (i32.const 1) + ) + ) + (set_local $var$276 + (i32.add + (get_local $var$97) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$276) + (get_local $var$293) + ) + (set_local $var$98 + (i32.add + (get_local $var$97) + (get_local $var$103) + ) + ) + (i32.store align=4 + (get_local $var$98) + (get_local $var$103) + ) + (br $label$0) + ) + ) + (set_local $var$329 + (i32.shr_u + (get_local $var$17) + (i32.const 3) + ) + ) + (set_local $var$204 + (i32.lt_u + (i32.shr_u + (get_local $var$17) + (i32.const 0) + ) + (i32.const 256) + ) + ) + (if + (get_local $var$204) + (block $label$5 + (set_local $var$259 + (i32.add + (get_local $var$97) + (i32.const 8) + ) + ) + (set_local $var$39 + (i32.load align=4 + (get_local $var$259) + ) + ) + (set_local $var$157 + (i32.add + (get_local $var$97) + (i32.const 12) + ) + ) + (set_local $var$50 + (i32.load align=4 + (get_local $var$157) + ) + ) + (set_local $var$314 + (i32.shl + (get_local $var$329) + (i32.const 1) + ) + ) + (set_local $var$132 + (i32.add + (i32.const 216) + (i32.shl + (get_local $var$314) + (i32.const 2) + ) + ) + ) + (set_local $var$210 + (i32.eq + (get_local $var$39) + (get_local $var$132) + ) + ) + (if + (i32.eq + (get_local $var$210) + (i32.const 0) + ) + (block $label$6 + (set_local $var$214 + (i32.lt_u + (i32.shr_u + (get_local $var$39) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$5) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$214) + (call_import $_abort) + ) + (set_local $var$162 + (i32.add + (get_local $var$39) + (i32.const 12) + ) + ) + (set_local $var$61 + (i32.load align=4 + (get_local $var$162) + ) + ) + (set_local $var$220 + (i32.eq + (get_local $var$61) + (get_local $var$97) + ) + ) + (if + (i32.eq + (get_local $var$220) + (i32.const 0) + ) + (call_import $_abort) + ) + ) + ) + (set_local $var$229 + (i32.eq + (get_local $var$50) + (get_local $var$39) + ) + ) + (if + (get_local $var$229) + (block $label$7 + (set_local $var$319 + (i32.shl + (i32.const 1) + (get_local $var$329) + ) + ) + (set_local $var$287 + (i32.xor + (get_local $var$319) + (i32.const -1) + ) + ) + (set_local $var$72 + (i32.load align=4 + (i32.const 176) + ) + ) + (set_local $var$121 + (i32.and + (get_local $var$72) + (get_local $var$287) + ) + ) + (i32.store align=4 + (i32.const 176) + (get_local $var$121) + ) + (set_local $var$300 + (get_local $var$97) + ) + (set_local $var$312 + (get_local $var$103) + ) + (br $label$1) + ) + ) + (set_local $var$238 + (i32.eq + (get_local $var$50) + (get_local $var$132) + ) + ) + (if_else + (get_local $var$238) + (block $label$8 + (set_local $var$4 + (i32.add + (get_local $var$50) + (i32.const 8) + ) + ) + (set_local $var$271 + (get_local $var$4) + ) + ) + (block $label$9 + (set_local $var$241 + (i32.lt_u + (i32.shr_u + (get_local $var$50) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$5) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$241) + (call_import $_abort) + ) + (set_local $var$266 + (i32.add + (get_local $var$50) + (i32.const 8) + ) + ) + (set_local $var$78 + (i32.load align=4 + (get_local $var$266) + ) + ) + (set_local $var$244 + (i32.eq + (get_local $var$78) + (get_local $var$97) + ) + ) + (if_else + (get_local $var$244) + (set_local $var$271 + (get_local $var$266) + ) + (call_import $_abort) + ) + ) + ) + (set_local $var$170 + (i32.add + (get_local $var$39) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$170) + (get_local $var$50) + ) + (i32.store align=4 + (get_local $var$271) + (get_local $var$39) + ) + (set_local $var$300 + (get_local $var$97) + ) + (set_local $var$312 + (get_local $var$103) + ) + (br $label$1) + ) + ) + (set_local $var$301 + (i32.add + (get_local $var$97) + (i32.const 24) + ) + ) + (set_local $var$79 + (i32.load align=4 + (get_local $var$301) + ) + ) + (set_local $var$171 + (i32.add + (get_local $var$97) + (i32.const 12) + ) + ) + (set_local $var$7 + (i32.load align=4 + (get_local $var$171) + ) + ) + (set_local $var$251 + (i32.eq + (get_local $var$7) + (get_local $var$97) + ) + ) + (block $label$10 + (if_else + (get_local $var$251) + (block $label$11 + (set_local $var$173 + (i32.add + (get_local $var$97) + (i32.const 16) + ) + ) + (set_local $var$156 + (i32.add + (get_local $var$173) + (i32.const 4) + ) + ) + (set_local $var$11 + (i32.load align=4 + (get_local $var$156) + ) + ) + (set_local $var$181 + (i32.eq + (get_local $var$11) + (i32.const 0) + ) + ) + (if_else + (get_local $var$181) + (block $label$12 + (set_local $var$12 + (i32.load align=4 + (get_local $var$173) + ) + ) + (set_local $var$182 + (i32.eq + (get_local $var$12) + (i32.const 0) + ) + ) + (if_else + (get_local $var$182) + (block $label$13 + (set_local $var$85 + (i32.const 0) + ) + (br $label$10) + ) + (block $label$14 + (set_local $var$83 + (get_local $var$12) + ) + (set_local $var$89 + (get_local $var$173) + ) + ) + ) + ) + (block $label$15 + (set_local $var$83 + (get_local $var$11) + ) + (set_local $var$89 + (get_local $var$156) + ) + ) + ) + (loop $label$16 $label$17 + (block $label$18 + (set_local $var$133 + (i32.add + (get_local $var$83) + (i32.const 20) + ) + ) + (set_local $var$13 + (i32.load align=4 + (get_local $var$133) + ) + ) + (set_local $var$183 + (i32.eq + (get_local $var$13) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$183) + (i32.const 0) + ) + (block $label$19 + (set_local $var$83 + (get_local $var$13) + ) + (set_local $var$89 + (get_local $var$133) + ) + (br $label$17) + ) + ) + (set_local $var$134 + (i32.add + (get_local $var$83) + (i32.const 16) + ) + ) + (set_local $var$14 + (i32.load align=4 + (get_local $var$134) + ) + ) + (set_local $var$184 + (i32.eq + (get_local $var$14) + (i32.const 0) + ) + ) + (if_else + (get_local $var$184) + (block $label$20 + (set_local $var$84 + (get_local $var$83) + ) + (set_local $var$90 + (get_local $var$89) + ) + (br $label$16) + ) + (block $label$21 + (set_local $var$83 + (get_local $var$14) + ) + (set_local $var$89 + (get_local $var$134) + ) + ) + ) + (br $label$17) + ) + ) + (set_local $var$185 + (i32.lt_u + (i32.shr_u + (get_local $var$90) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$5) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$185) + (call_import $_abort) + (block $label$22 + (i32.store align=4 + (get_local $var$90) + (i32.const 0) + ) + (set_local $var$85 + (get_local $var$84) + ) + (br $label$10) + ) + ) + ) + (block $label$23 + (set_local $var$272 + (i32.add + (get_local $var$97) + (i32.const 8) + ) + ) + (set_local $var$8 + (i32.load align=4 + (get_local $var$272) + ) + ) + (set_local $var$252 + (i32.lt_u + (i32.shr_u + (get_local $var$8) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$5) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$252) + (call_import $_abort) + ) + (set_local $var$172 + (i32.add + (get_local $var$8) + (i32.const 12) + ) + ) + (set_local $var$9 + (i32.load align=4 + (get_local $var$172) + ) + ) + (set_local $var$253 + (i32.eq + (get_local $var$9) + (get_local $var$97) + ) + ) + (if + (i32.eq + (get_local $var$253) + (i32.const 0) + ) + (call_import $_abort) + ) + (set_local $var$273 + (i32.add + (get_local $var$7) + (i32.const 8) + ) + ) + (set_local $var$10 + (i32.load align=4 + (get_local $var$273) + ) + ) + (set_local $var$254 + (i32.eq + (get_local $var$10) + (get_local $var$97) + ) + ) + (if_else + (get_local $var$254) + (block $label$24 + (i32.store align=4 + (get_local $var$172) + (get_local $var$7) + ) + (i32.store align=4 + (get_local $var$273) + (get_local $var$8) + ) + (set_local $var$85 + (get_local $var$7) + ) + (br $label$10) + ) + (call_import $_abort) + ) + ) + ) + ) + (set_local $var$186 + (i32.eq + (get_local $var$79) + (i32.const 0) + ) + ) + (if_else + (get_local $var$186) + (block $label$25 + (set_local $var$300 + (get_local $var$97) + ) + (set_local $var$312 + (get_local $var$103) + ) + ) + (block $label$26 + (set_local $var$284 + (i32.add + (get_local $var$97) + (i32.const 28) + ) + ) + (set_local $var$15 + (i32.load align=4 + (get_local $var$284) + ) + ) + (set_local $var$135 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$15) + (i32.const 2) + ) + ) + ) + (set_local $var$16 + (i32.load align=4 + (get_local $var$135) + ) + ) + (set_local $var$188 + (i32.eq + (get_local $var$97) + (get_local $var$16) + ) + ) + (if_else + (get_local $var$188) + (block $label$27 + (i32.store align=4 + (get_local $var$135) + (get_local $var$85) + ) + (set_local $var$256 + (i32.eq + (get_local $var$85) + (i32.const 0) + ) + ) + (if + (get_local $var$256) + (block $label$28 + (set_local $var$315 + (i32.shl + (i32.const 1) + (get_local $var$15) + ) + ) + (set_local $var$288 + (i32.xor + (get_local $var$315) + (i32.const -1) + ) + ) + (set_local $var$18 + (i32.load align=4 + (i32.const 180) + ) + ) + (set_local $var$113 + (i32.and + (get_local $var$18) + (get_local $var$288) + ) + ) + (i32.store align=4 + (i32.const 180) + (get_local $var$113) + ) + (set_local $var$300 + (get_local $var$97) + ) + (set_local $var$312 + (get_local $var$103) + ) + (br $label$1) + ) + ) + ) + (block $label$29 + (set_local $var$19 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$189 + (i32.lt_u + (i32.shr_u + (get_local $var$79) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$19) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$189) + (call_import $_abort) + ) + (set_local $var$136 + (i32.add + (get_local $var$79) + (i32.const 16) + ) + ) + (set_local $var$20 + (i32.load align=4 + (get_local $var$136) + ) + ) + (set_local $var$190 + (i32.eq + (get_local $var$20) + (get_local $var$97) + ) + ) + (if_else + (get_local $var$190) + (i32.store align=4 + (get_local $var$136) + (get_local $var$85) + ) + (block $label$30 + (set_local $var$137 + (i32.add + (get_local $var$79) + (i32.const 20) + ) + ) + (i32.store align=4 + (get_local $var$137) + (get_local $var$85) + ) + ) + ) + (set_local $var$191 + (i32.eq + (get_local $var$85) + (i32.const 0) + ) + ) + (if + (get_local $var$191) + (block $label$31 + (set_local $var$300 + (get_local $var$97) + ) + (set_local $var$312 + (get_local $var$103) + ) + (br $label$1) + ) + ) + ) + ) + (set_local $var$21 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$192 + (i32.lt_u + (i32.shr_u + (get_local $var$85) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$21) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$192) + (call_import $_abort) + ) + (set_local $var$302 + (i32.add + (get_local $var$85) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$302) + (get_local $var$79) + ) + (set_local $var$174 + (i32.add + (get_local $var$97) + (i32.const 16) + ) + ) + (set_local $var$22 + (i32.load align=4 + (get_local $var$174) + ) + ) + (set_local $var$193 + (i32.eq + (get_local $var$22) + (i32.const 0) + ) + ) + (block $label$32 + (if + (i32.eq + (get_local $var$193) + (i32.const 0) + ) + (block $label$33 + (set_local $var$194 + (i32.lt_u + (i32.shr_u + (get_local $var$22) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$21) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$194) + (call_import $_abort) + (block $label$34 + (set_local $var$138 + (i32.add + (get_local $var$85) + (i32.const 16) + ) + ) + (i32.store align=4 + (get_local $var$138) + (get_local $var$22) + ) + (set_local $var$303 + (i32.add + (get_local $var$22) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$303) + (get_local $var$85) + ) + (br $label$32) + ) + ) + ) + ) + ) + (set_local $var$139 + (i32.add + (get_local $var$174) + (i32.const 4) + ) + ) + (set_local $var$23 + (i32.load align=4 + (get_local $var$139) + ) + ) + (set_local $var$196 + (i32.eq + (get_local $var$23) + (i32.const 0) + ) + ) + (if_else + (get_local $var$196) + (block $label$35 + (set_local $var$300 + (get_local $var$97) + ) + (set_local $var$312 + (get_local $var$103) + ) + ) + (block $label$36 + (set_local $var$24 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$197 + (i32.lt_u + (i32.shr_u + (get_local $var$23) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$24) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$197) + (call_import $_abort) + (block $label$37 + (set_local $var$140 + (i32.add + (get_local $var$85) + (i32.const 20) + ) + ) + (i32.store align=4 + (get_local $var$140) + (get_local $var$23) + ) + (set_local $var$304 + (i32.add + (get_local $var$23) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$304) + (get_local $var$85) + ) + (set_local $var$300 + (get_local $var$97) + ) + (set_local $var$312 + (get_local $var$103) + ) + (br $label$1) + ) + ) + ) + ) + ) + ) + ) + (block $label$38 + (set_local $var$300 + (get_local $var$96) + ) + (set_local $var$312 + (get_local $var$123) + ) + ) + ) + ) + (set_local $var$201 + (i32.lt_u + (i32.shr_u + (get_local $var$300) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$102) + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (get_local $var$201) + (i32.const 0) + ) + (call_import $_abort) + ) + (set_local $var$277 + (i32.add + (get_local $var$102) + (i32.const 4) + ) + ) + (set_local $var$26 + (i32.load align=4 + (get_local $var$277) + ) + ) + (set_local $var$116 + (i32.and + (get_local $var$26) + (i32.const 1) + ) + ) + (set_local $var$347 + (i32.eq + (get_local $var$116) + (i32.const 0) + ) + ) + (if + (get_local $var$347) + (call_import $_abort) + ) + (set_local $var$117 + (i32.and + (get_local $var$26) + (i32.const 2) + ) + ) + (set_local $var$348 + (i32.eq + (get_local $var$117) + (i32.const 0) + ) + ) + (if_else + (get_local $var$348) + (block $label$39 + (set_local $var$27 + (i32.load align=4 + (i32.const 200) + ) + ) + (set_local $var$202 + (i32.eq + (get_local $var$102) + (get_local $var$27) + ) + ) + (if + (get_local $var$202) + (block $label$40 + (set_local $var$29 + (i32.load align=4 + (i32.const 188) + ) + ) + (set_local $var$104 + (i32.add + (get_local $var$29) + (get_local $var$312) + ) + ) + (i32.store align=4 + (i32.const 188) + (get_local $var$104) + ) + (i32.store align=4 + (i32.const 200) + (get_local $var$300) + ) + (set_local $var$294 + (i32.or + (get_local $var$104) + (i32.const 1) + ) + ) + (set_local $var$278 + (i32.add + (get_local $var$300) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$278) + (get_local $var$294) + ) + (set_local $var$30 + (i32.load align=4 + (i32.const 196) + ) + ) + (set_local $var$203 + (i32.eq + (get_local $var$300) + (get_local $var$30) + ) + ) + (if + (i32.eq + (get_local $var$203) + (i32.const 0) + ) + (br $label$0) + ) + (i32.store align=4 + (i32.const 196) + (i32.const 0) + ) + (i32.store align=4 + (i32.const 184) + (i32.const 0) + ) + (br $label$0) + ) + ) + (set_local $var$31 + (i32.load align=4 + (i32.const 196) + ) + ) + (set_local $var$205 + (i32.eq + (get_local $var$102) + (get_local $var$31) + ) + ) + (if + (get_local $var$205) + (block $label$41 + (set_local $var$32 + (i32.load align=4 + (i32.const 184) + ) + ) + (set_local $var$105 + (i32.add + (get_local $var$32) + (get_local $var$312) + ) + ) + (i32.store align=4 + (i32.const 184) + (get_local $var$105) + ) + (i32.store align=4 + (i32.const 196) + (get_local $var$300) + ) + (set_local $var$295 + (i32.or + (get_local $var$105) + (i32.const 1) + ) + ) + (set_local $var$279 + (i32.add + (get_local $var$300) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$279) + (get_local $var$295) + ) + (set_local $var$99 + (i32.add + (get_local $var$300) + (get_local $var$105) + ) + ) + (i32.store align=4 + (get_local $var$99) + (get_local $var$105) + ) + (br $label$0) + ) + ) + (set_local $var$118 + (i32.and + (get_local $var$26) + (i32.const -8) + ) + ) + (set_local $var$106 + (i32.add + (get_local $var$118) + (get_local $var$312) + ) + ) + (set_local $var$330 + (i32.shr_u + (get_local $var$26) + (i32.const 3) + ) + ) + (set_local $var$206 + (i32.lt_u + (i32.shr_u + (get_local $var$26) + (i32.const 0) + ) + (i32.const 256) + ) + ) + (block $label$42 + (if_else + (get_local $var$206) + (block $label$43 + (set_local $var$260 + (i32.add + (get_local $var$102) + (i32.const 8) + ) + ) + (set_local $var$33 + (i32.load align=4 + (get_local $var$260) + ) + ) + (set_local $var$158 + (i32.add + (get_local $var$102) + (i32.const 12) + ) + ) + (set_local $var$34 + (i32.load align=4 + (get_local $var$158) + ) + ) + (set_local $var$316 + (i32.shl + (get_local $var$330) + (i32.const 1) + ) + ) + (set_local $var$141 + (i32.add + (i32.const 216) + (i32.shl + (get_local $var$316) + (i32.const 2) + ) + ) + ) + (set_local $var$207 + (i32.eq + (get_local $var$33) + (get_local $var$141) + ) + ) + (if + (i32.eq + (get_local $var$207) + (i32.const 0) + ) + (block $label$44 + (set_local $var$35 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$208 + (i32.lt_u + (i32.shr_u + (get_local $var$33) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$35) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$208) + (call_import $_abort) + ) + (set_local $var$159 + (i32.add + (get_local $var$33) + (i32.const 12) + ) + ) + (set_local $var$36 + (i32.load align=4 + (get_local $var$159) + ) + ) + (set_local $var$209 + (i32.eq + (get_local $var$36) + (get_local $var$102) + ) + ) + (if + (i32.eq + (get_local $var$209) + (i32.const 0) + ) + (call_import $_abort) + ) + ) + ) + (set_local $var$211 + (i32.eq + (get_local $var$34) + (get_local $var$33) + ) + ) + (if + (get_local $var$211) + (block $label$45 + (set_local $var$317 + (i32.shl + (i32.const 1) + (get_local $var$330) + ) + ) + (set_local $var$289 + (i32.xor + (get_local $var$317) + (i32.const -1) + ) + ) + (set_local $var$37 + (i32.load align=4 + (i32.const 176) + ) + ) + (set_local $var$119 + (i32.and + (get_local $var$37) + (get_local $var$289) + ) + ) + (i32.store align=4 + (i32.const 176) + (get_local $var$119) + ) + (br $label$42) + ) + ) + (set_local $var$212 + (i32.eq + (get_local $var$34) + (get_local $var$141) + ) + ) + (if_else + (get_local $var$212) + (block $label$46 + (set_local $var$3 + (i32.add + (get_local $var$34) + (i32.const 8) + ) + ) + (set_local $var$262 + (get_local $var$3) + ) + ) + (block $label$47 + (set_local $var$38 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$213 + (i32.lt_u + (i32.shr_u + (get_local $var$34) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$38) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$213) + (call_import $_abort) + ) + (set_local $var$261 + (i32.add + (get_local $var$34) + (i32.const 8) + ) + ) + (set_local $var$40 + (i32.load align=4 + (get_local $var$261) + ) + ) + (set_local $var$215 + (i32.eq + (get_local $var$40) + (get_local $var$102) + ) + ) + (if_else + (get_local $var$215) + (set_local $var$262 + (get_local $var$261) + ) + (call_import $_abort) + ) + ) + ) + (set_local $var$160 + (i32.add + (get_local $var$33) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$160) + (get_local $var$34) + ) + (i32.store align=4 + (get_local $var$262) + (get_local $var$33) + ) + ) + (block $label$48 + (set_local $var$305 + (i32.add + (get_local $var$102) + (i32.const 24) + ) + ) + (set_local $var$41 + (i32.load align=4 + (get_local $var$305) + ) + ) + (set_local $var$161 + (i32.add + (get_local $var$102) + (i32.const 12) + ) + ) + (set_local $var$42 + (i32.load align=4 + (get_local $var$161) + ) + ) + (set_local $var$216 + (i32.eq + (get_local $var$42) + (get_local $var$102) + ) + ) + (block $label$49 + (if_else + (get_local $var$216) + (block $label$50 + (set_local $var$175 + (i32.add + (get_local $var$102) + (i32.const 16) + ) + ) + (set_local $var$142 + (i32.add + (get_local $var$175) + (i32.const 4) + ) + ) + (set_local $var$47 + (i32.load align=4 + (get_local $var$142) + ) + ) + (set_local $var$221 + (i32.eq + (get_local $var$47) + (i32.const 0) + ) + ) + (if_else + (get_local $var$221) + (block $label$51 + (set_local $var$48 + (i32.load align=4 + (get_local $var$175) + ) + ) + (set_local $var$222 + (i32.eq + (get_local $var$48) + (i32.const 0) + ) + ) + (if_else + (get_local $var$222) + (block $label$52 + (set_local $var$88 + (i32.const 0) + ) + (br $label$49) + ) + (block $label$53 + (set_local $var$86 + (get_local $var$48) + ) + (set_local $var$91 + (get_local $var$175) + ) + ) + ) + ) + (block $label$54 + (set_local $var$86 + (get_local $var$47) + ) + (set_local $var$91 + (get_local $var$142) + ) + ) + ) + (loop $label$55 $label$56 + (block $label$57 + (set_local $var$143 + (i32.add + (get_local $var$86) + (i32.const 20) + ) + ) + (set_local $var$49 + (i32.load align=4 + (get_local $var$143) + ) + ) + (set_local $var$223 + (i32.eq + (get_local $var$49) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$223) + (i32.const 0) + ) + (block $label$58 + (set_local $var$86 + (get_local $var$49) + ) + (set_local $var$91 + (get_local $var$143) + ) + (br $label$56) + ) + ) + (set_local $var$144 + (i32.add + (get_local $var$86) + (i32.const 16) + ) + ) + (set_local $var$51 + (i32.load align=4 + (get_local $var$144) + ) + ) + (set_local $var$224 + (i32.eq + (get_local $var$51) + (i32.const 0) + ) + ) + (if_else + (get_local $var$224) + (block $label$59 + (set_local $var$87 + (get_local $var$86) + ) + (set_local $var$92 + (get_local $var$91) + ) + (br $label$55) + ) + (block $label$60 + (set_local $var$86 + (get_local $var$51) + ) + (set_local $var$91 + (get_local $var$144) + ) + ) + ) + (br $label$56) + ) + ) + (set_local $var$52 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$225 + (i32.lt_u + (i32.shr_u + (get_local $var$92) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$52) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$225) + (call_import $_abort) + (block $label$61 + (i32.store align=4 + (get_local $var$92) + (i32.const 0) + ) + (set_local $var$88 + (get_local $var$87) + ) + (br $label$49) + ) + ) + ) + (block $label$62 + (set_local $var$263 + (i32.add + (get_local $var$102) + (i32.const 8) + ) + ) + (set_local $var$43 + (i32.load align=4 + (get_local $var$263) + ) + ) + (set_local $var$44 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$217 + (i32.lt_u + (i32.shr_u + (get_local $var$43) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$44) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$217) + (call_import $_abort) + ) + (set_local $var$163 + (i32.add + (get_local $var$43) + (i32.const 12) + ) + ) + (set_local $var$45 + (i32.load align=4 + (get_local $var$163) + ) + ) + (set_local $var$218 + (i32.eq + (get_local $var$45) + (get_local $var$102) + ) + ) + (if + (i32.eq + (get_local $var$218) + (i32.const 0) + ) + (call_import $_abort) + ) + (set_local $var$264 + (i32.add + (get_local $var$42) + (i32.const 8) + ) + ) + (set_local $var$46 + (i32.load align=4 + (get_local $var$264) + ) + ) + (set_local $var$219 + (i32.eq + (get_local $var$46) + (get_local $var$102) + ) + ) + (if_else + (get_local $var$219) + (block $label$63 + (i32.store align=4 + (get_local $var$163) + (get_local $var$42) + ) + (i32.store align=4 + (get_local $var$264) + (get_local $var$43) + ) + (set_local $var$88 + (get_local $var$42) + ) + (br $label$49) + ) + (call_import $_abort) + ) + ) + ) + ) + (set_local $var$226 + (i32.eq + (get_local $var$41) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$226) + (i32.const 0) + ) + (block $label$64 + (set_local $var$285 + (i32.add + (get_local $var$102) + (i32.const 28) + ) + ) + (set_local $var$53 + (i32.load align=4 + (get_local $var$285) + ) + ) + (set_local $var$145 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$53) + (i32.const 2) + ) + ) + ) + (set_local $var$54 + (i32.load align=4 + (get_local $var$145) + ) + ) + (set_local $var$227 + (i32.eq + (get_local $var$102) + (get_local $var$54) + ) + ) + (if_else + (get_local $var$227) + (block $label$65 + (i32.store align=4 + (get_local $var$145) + (get_local $var$88) + ) + (set_local $var$257 + (i32.eq + (get_local $var$88) + (i32.const 0) + ) + ) + (if + (get_local $var$257) + (block $label$66 + (set_local $var$318 + (i32.shl + (i32.const 1) + (get_local $var$53) + ) + ) + (set_local $var$290 + (i32.xor + (get_local $var$318) + (i32.const -1) + ) + ) + (set_local $var$55 + (i32.load align=4 + (i32.const 180) + ) + ) + (set_local $var$120 + (i32.and + (get_local $var$55) + (get_local $var$290) + ) + ) + (i32.store align=4 + (i32.const 180) + (get_local $var$120) + ) + (br $label$42) + ) + ) + ) + (block $label$67 + (set_local $var$56 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$228 + (i32.lt_u + (i32.shr_u + (get_local $var$41) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$56) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$228) + (call_import $_abort) + ) + (set_local $var$146 + (i32.add + (get_local $var$41) + (i32.const 16) + ) + ) + (set_local $var$57 + (i32.load align=4 + (get_local $var$146) + ) + ) + (set_local $var$230 + (i32.eq + (get_local $var$57) + (get_local $var$102) + ) + ) + (if_else + (get_local $var$230) + (i32.store align=4 + (get_local $var$146) + (get_local $var$88) + ) + (block $label$68 + (set_local $var$147 + (i32.add + (get_local $var$41) + (i32.const 20) + ) + ) + (i32.store align=4 + (get_local $var$147) + (get_local $var$88) + ) + ) + ) + (set_local $var$231 + (i32.eq + (get_local $var$88) + (i32.const 0) + ) + ) + (if + (get_local $var$231) + (br $label$42) + ) + ) + ) + (set_local $var$58 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$232 + (i32.lt_u + (i32.shr_u + (get_local $var$88) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$58) + (i32.const 0) + ) + ) + ) + (if + (get_local $var$232) + (call_import $_abort) + ) + (set_local $var$306 + (i32.add + (get_local $var$88) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$306) + (get_local $var$41) + ) + (set_local $var$176 + (i32.add + (get_local $var$102) + (i32.const 16) + ) + ) + (set_local $var$59 + (i32.load align=4 + (get_local $var$176) + ) + ) + (set_local $var$233 + (i32.eq + (get_local $var$59) + (i32.const 0) + ) + ) + (block $label$69 + (if + (i32.eq + (get_local $var$233) + (i32.const 0) + ) + (block $label$70 + (set_local $var$234 + (i32.lt_u + (i32.shr_u + (get_local $var$59) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$58) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$234) + (call_import $_abort) + (block $label$71 + (set_local $var$148 + (i32.add + (get_local $var$88) + (i32.const 16) + ) + ) + (i32.store align=4 + (get_local $var$148) + (get_local $var$59) + ) + (set_local $var$307 + (i32.add + (get_local $var$59) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$307) + (get_local $var$88) + ) + (br $label$69) + ) + ) + ) + ) + ) + (set_local $var$149 + (i32.add + (get_local $var$176) + (i32.const 4) + ) + ) + (set_local $var$60 + (i32.load align=4 + (get_local $var$149) + ) + ) + (set_local $var$235 + (i32.eq + (get_local $var$60) + (i32.const 0) + ) + ) + (if + (i32.eq + (get_local $var$235) + (i32.const 0) + ) + (block $label$72 + (set_local $var$62 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$236 + (i32.lt_u + (i32.shr_u + (get_local $var$60) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$62) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$236) + (call_import $_abort) + (block $label$73 + (set_local $var$150 + (i32.add + (get_local $var$88) + (i32.const 20) + ) + ) + (i32.store align=4 + (get_local $var$150) + (get_local $var$60) + ) + (set_local $var$308 + (i32.add + (get_local $var$60) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$308) + (get_local $var$88) + ) + (br $label$42) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $var$296 + (i32.or + (get_local $var$106) + (i32.const 1) + ) + ) + (set_local $var$280 + (i32.add + (get_local $var$300) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$280) + (get_local $var$296) + ) + (set_local $var$100 + (i32.add + (get_local $var$300) + (get_local $var$106) + ) + ) + (i32.store align=4 + (get_local $var$100) + (get_local $var$106) + ) + (set_local $var$63 + (i32.load align=4 + (i32.const 196) + ) + ) + (set_local $var$237 + (i32.eq + (get_local $var$300) + (get_local $var$63) + ) + ) + (if_else + (get_local $var$237) + (block $label$74 + (i32.store align=4 + (i32.const 184) + (get_local $var$106) + ) + (br $label$0) + ) + (set_local $var$313 + (get_local $var$106) + ) + ) + ) + (block $label$75 + (set_local $var$122 + (i32.and + (get_local $var$26) + (i32.const -2) + ) + ) + (i32.store align=4 + (get_local $var$277) + (get_local $var$122) + ) + (set_local $var$297 + (i32.or + (get_local $var$312) + (i32.const 1) + ) + ) + (set_local $var$281 + (i32.add + (get_local $var$300) + (i32.const 4) + ) + ) + (i32.store align=4 + (get_local $var$281) + (get_local $var$297) + ) + (set_local $var$101 + (i32.add + (get_local $var$300) + (get_local $var$312) + ) + ) + (i32.store align=4 + (get_local $var$101) + (get_local $var$312) + ) + (set_local $var$313 + (get_local $var$312) + ) + ) + ) + (set_local $var$331 + (i32.shr_u + (get_local $var$313) + (i32.const 3) + ) + ) + (set_local $var$239 + (i32.lt_u + (i32.shr_u + (get_local $var$313) + (i32.const 0) + ) + (i32.const 256) + ) + ) + (if + (get_local $var$239) + (block $label$76 + (set_local $var$320 + (i32.shl + (get_local $var$331) + (i32.const 1) + ) + ) + (set_local $var$151 + (i32.add + (i32.const 216) + (i32.shl + (get_local $var$320) + (i32.const 2) + ) + ) + ) + (set_local $var$64 + (i32.load align=4 + (i32.const 176) + ) + ) + (set_local $var$321 + (i32.shl + (i32.const 1) + (get_local $var$331) + ) + ) + (set_local $var$124 + (i32.and + (get_local $var$64) + (get_local $var$321) + ) + ) + (set_local $var$349 + (i32.eq + (get_local $var$124) + (i32.const 0) + ) + ) + (if_else + (get_local $var$349) + (block $label$77 + (set_local $var$298 + (i32.or + (get_local $var$64) + (get_local $var$321) + ) + ) + (i32.store align=4 + (i32.const 176) + (get_local $var$298) + ) + (set_local $var$1 + (i32.add + (get_local $var$151) + (i32.const 8) + ) + ) + (set_local $var$2 + (get_local $var$1) + ) + (set_local $var$80 + (get_local $var$151) + ) + ) + (block $label$78 + (set_local $var$65 + (i32.add + (get_local $var$151) + (i32.const 8) + ) + ) + (set_local $var$66 + (i32.load align=4 + (get_local $var$65) + ) + ) + (set_local $var$67 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$240 + (i32.lt_u + (i32.shr_u + (get_local $var$66) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$67) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$240) + (call_import $_abort) + (block $label$79 + (set_local $var$2 + (get_local $var$65) + ) + (set_local $var$80 + (get_local $var$66) + ) + ) + ) + ) + ) + (i32.store align=4 + (get_local $var$2) + (get_local $var$300) + ) + (set_local $var$164 + (i32.add + (get_local $var$80) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$164) + (get_local $var$300) + ) + (set_local $var$265 + (i32.add + (get_local $var$300) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$265) + (get_local $var$80) + ) + (set_local $var$165 + (i32.add + (get_local $var$300) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$165) + (get_local $var$151) + ) + (br $label$0) + ) + ) + (set_local $var$332 + (i32.shr_u + (get_local $var$313) + (i32.const 8) + ) + ) + (set_local $var$242 + (i32.eq + (get_local $var$332) + (i32.const 0) + ) + ) + (if_else + (get_local $var$242) + (set_local $var$81 + (i32.const 0) + ) + (block $label$80 + (set_local $var$243 + (i32.gt_u + (i32.shr_u + (get_local $var$313) + (i32.const 0) + ) + (i32.const 16777215) + ) + ) + (if_else + (get_local $var$243) + (set_local $var$81 + (i32.const 31) + ) + (block $label$81 + (set_local $var$342 + (i32.add + (get_local $var$332) + (i32.const 1048320) + ) + ) + (set_local $var$333 + (i32.shr_u + (get_local $var$342) + (i32.const 16) + ) + ) + (set_local $var$125 + (i32.and + (get_local $var$333) + (i32.const 8) + ) + ) + (set_local $var$322 + (i32.shl + (get_local $var$332) + (get_local $var$125) + ) + ) + (set_local $var$343 + (i32.add + (get_local $var$322) + (i32.const 520192) + ) + ) + (set_local $var$334 + (i32.shr_u + (get_local $var$343) + (i32.const 16) + ) + ) + (set_local $var$126 + (i32.and + (get_local $var$334) + (i32.const 4) + ) + ) + (set_local $var$107 + (i32.or + (get_local $var$126) + (get_local $var$125) + ) + ) + (set_local $var$323 + (i32.shl + (get_local $var$322) + (get_local $var$126) + ) + ) + (set_local $var$344 + (i32.add + (get_local $var$323) + (i32.const 245760) + ) + ) + (set_local $var$335 + (i32.shr_u + (get_local $var$344) + (i32.const 16) + ) + ) + (set_local $var$127 + (i32.and + (get_local $var$335) + (i32.const 2) + ) + ) + (set_local $var$108 + (i32.or + (get_local $var$107) + (get_local $var$127) + ) + ) + (set_local $var$345 + (i32.sub + (i32.const 14) + (get_local $var$108) + ) + ) + (set_local $var$324 + (i32.shl + (get_local $var$323) + (get_local $var$127) + ) + ) + (set_local $var$336 + (i32.shr_u + (get_local $var$324) + (i32.const 15) + ) + ) + (set_local $var$109 + (i32.add + (get_local $var$345) + (get_local $var$336) + ) + ) + (set_local $var$325 + (i32.shl + (get_local $var$109) + (i32.const 1) + ) + ) + (set_local $var$110 + (i32.add + (get_local $var$109) + (i32.const 7) + ) + ) + (set_local $var$337 + (i32.shr_u + (get_local $var$313) + (get_local $var$110) + ) + ) + (set_local $var$128 + (i32.and + (get_local $var$337) + (i32.const 1) + ) + ) + (set_local $var$111 + (i32.or + (get_local $var$128) + (get_local $var$325) + ) + ) + (set_local $var$81 + (get_local $var$111) + ) + ) + ) + ) + ) + (set_local $var$152 + (i32.add + (i32.const 480) + (i32.shl + (get_local $var$81) + (i32.const 2) + ) + ) + ) + (set_local $var$286 + (i32.add + (get_local $var$300) + (i32.const 28) + ) + ) + (i32.store align=4 + (get_local $var$286) + (get_local $var$81) + ) + (set_local $var$177 + (i32.add + (get_local $var$300) + (i32.const 16) + ) + ) + (set_local $var$153 + (i32.add + (get_local $var$300) + (i32.const 20) + ) + ) + (i32.store align=4 + (get_local $var$153) + (i32.const 0) + ) + (i32.store align=4 + (get_local $var$177) + (i32.const 0) + ) + (set_local $var$68 + (i32.load align=4 + (i32.const 180) + ) + ) + (set_local $var$326 + (i32.shl + (i32.const 1) + (get_local $var$81) + ) + ) + (set_local $var$129 + (i32.and + (get_local $var$68) + (get_local $var$326) + ) + ) + (set_local $var$350 + (i32.eq + (get_local $var$129) + (i32.const 0) + ) + ) + (block $label$82 + (if_else + (get_local $var$350) + (block $label$83 + (set_local $var$299 + (i32.or + (get_local $var$68) + (get_local $var$326) + ) + ) + (i32.store align=4 + (i32.const 180) + (get_local $var$299) + ) + (i32.store align=4 + (get_local $var$152) + (get_local $var$300) + ) + (set_local $var$309 + (i32.add + (get_local $var$300) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$309) + (get_local $var$152) + ) + (set_local $var$166 + (i32.add + (get_local $var$300) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$166) + (get_local $var$300) + ) + (set_local $var$267 + (i32.add + (get_local $var$300) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$267) + (get_local $var$300) + ) + ) + (block $label$84 + (set_local $var$69 + (i32.load align=4 + (get_local $var$152) + ) + ) + (set_local $var$245 + (i32.eq + (get_local $var$81) + (i32.const 31) + ) + ) + (set_local $var$338 + (i32.shr_u + (get_local $var$81) + (i32.const 1) + ) + ) + (set_local $var$346 + (i32.sub + (i32.const 25) + (get_local $var$338) + ) + ) + (set_local $var$255 + (if_else + (get_local $var$245) + (i32.const 0) + (get_local $var$346) + ) + ) + (set_local $var$327 + (i32.shl + (get_local $var$313) + (get_local $var$255) + ) + ) + (set_local $var$82 + (get_local $var$327) + ) + (set_local $var$93 + (get_local $var$69) + ) + (loop $label$85 $label$86 + (block $label$87 + (set_local $var$282 + (i32.add + (get_local $var$93) + (i32.const 4) + ) + ) + (set_local $var$70 + (i32.load align=4 + (get_local $var$282) + ) + ) + (set_local $var$130 + (i32.and + (get_local $var$70) + (i32.const -8) + ) + ) + (set_local $var$246 + (i32.eq + (get_local $var$130) + (get_local $var$313) + ) + ) + (if + (get_local $var$246) + (block $label$88 + (set_local $var$94 + (get_local $var$93) + ) + (set_local $var$352 + (i32.const 130) + ) + (br $label$85) + ) + ) + (set_local $var$339 + (i32.shr_u + (get_local $var$82) + (i32.const 31) + ) + ) + (set_local $var$154 + (i32.add + (i32.add + (get_local $var$93) + (i32.const 16) + ) + (i32.shl + (get_local $var$339) + (i32.const 2) + ) + ) + ) + (set_local $var$328 + (i32.shl + (get_local $var$82) + (i32.const 1) + ) + ) + (set_local $var$71 + (i32.load align=4 + (get_local $var$154) + ) + ) + (set_local $var$247 + (i32.eq + (get_local $var$71) + (i32.const 0) + ) + ) + (if_else + (get_local $var$247) + (block $label$89 + (set_local $var$95 + (get_local $var$93) + ) + (set_local $var$155 + (get_local $var$154) + ) + (set_local $var$352 + (i32.const 127) + ) + (br $label$85) + ) + (block $label$90 + (set_local $var$82 + (get_local $var$328) + ) + (set_local $var$93 + (get_local $var$71) + ) + ) + ) + (br $label$86) + ) + ) + (if_else + (i32.eq + (get_local $var$352) + (i32.const 127) + ) + (block $label$91 + (set_local $var$73 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$248 + (i32.lt_u + (i32.shr_u + (get_local $var$155) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$73) + (i32.const 0) + ) + ) + ) + (if_else + (get_local $var$248) + (call_import $_abort) + (block $label$92 + (i32.store align=4 + (get_local $var$155) + (get_local $var$300) + ) + (set_local $var$310 + (i32.add + (get_local $var$300) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$310) + (get_local $var$95) + ) + (set_local $var$167 + (i32.add + (get_local $var$300) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$167) + (get_local $var$300) + ) + (set_local $var$268 + (i32.add + (get_local $var$300) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$268) + (get_local $var$300) + ) + (br $label$82) + ) + ) + ) + (if + (i32.eq + (get_local $var$352) + (i32.const 130) + ) + (block $label$93 + (set_local $var$269 + (i32.add + (get_local $var$94) + (i32.const 8) + ) + ) + (set_local $var$74 + (i32.load align=4 + (get_local $var$269) + ) + ) + (set_local $var$75 + (i32.load align=4 + (i32.const 192) + ) + ) + (set_local $var$249 + (i32.ge_u + (i32.shr_u + (get_local $var$74) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$75) + (i32.const 0) + ) + ) + ) + (set_local $var$292 + (i32.ge_u + (i32.shr_u + (get_local $var$94) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$75) + (i32.const 0) + ) + ) + ) + (set_local $var$76 + (i32.and + (get_local $var$249) + (get_local $var$292) + ) + ) + (if_else + (get_local $var$76) + (block $label$94 + (set_local $var$168 + (i32.add + (get_local $var$74) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$168) + (get_local $var$300) + ) + (i32.store align=4 + (get_local $var$269) + (get_local $var$300) + ) + (set_local $var$270 + (i32.add + (get_local $var$300) + (i32.const 8) + ) + ) + (i32.store align=4 + (get_local $var$270) + (get_local $var$74) + ) + (set_local $var$169 + (i32.add + (get_local $var$300) + (i32.const 12) + ) + ) + (i32.store align=4 + (get_local $var$169) + (get_local $var$94) + ) + (set_local $var$311 + (i32.add + (get_local $var$300) + (i32.const 24) + ) + ) + (i32.store align=4 + (get_local $var$311) + (i32.const 0) + ) + (br $label$82) + ) + (call_import $_abort) + ) + ) + ) + ) + ) + ) + ) + (set_local $var$77 + (i32.load align=4 + (i32.const 208) + ) + ) + (set_local $var$258 + (i32.add + (get_local $var$77) + (i32.const -1) + ) + ) + (i32.store align=4 + (i32.const 208) + (get_local $var$258) + ) + (set_local $var$250 + (i32.eq + (get_local $var$258) + (i32.const 0) + ) + ) + (if_else + (get_local $var$250) + (set_local $var$341 + (i32.const 632) + ) + (br $label$0) + ) + (loop $label$95 $label$96 + (block $label$97 + (set_local $var$340 + (i32.load align=4 + (get_local $var$341) + ) + ) + (set_local $var$179 + (i32.eq + (get_local $var$340) + (i32.const 0) + ) + ) + (set_local $var$291 + (i32.add + (get_local $var$340) + (i32.const 8) + ) + ) + (if_else + (get_local $var$179) + (br $label$95) + (set_local $var$341 + (get_local $var$291) + ) + ) + (br $label$96) + ) + ) + (i32.store align=4 + (i32.const 208) + (i32.const -1) + ) + (br $label$0) + ) + ) + (func $runPostSets (type $3) + (nop) + ) + (func $_i64Subtract (type $12) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (result i32) + (local $var$4 i32) + (local $var$5 i32) + (block $label$0 + (set_local $var$4 + (i32.shr_u + (i32.sub + (get_local $var$0) + (get_local $var$2) + ) + (i32.const 0) + ) + ) + (set_local $var$5 + (i32.shr_u + (i32.sub + (get_local $var$1) + (get_local $var$3) + ) + (i32.const 0) + ) + ) + (set_local $var$5 + (i32.shr_u + (i32.sub + (i32.sub + (get_local $var$1) + (get_local $var$3) + ) + (i32.gt_u + (i32.shr_u + (get_local $var$2) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$0) + (i32.const 0) + ) + ) + ) + (i32.const 0) + ) + ) + (block $label$1 + (i32.store align=4 + (i32.const 168) + (get_local $var$5) + ) + (get_local $var$4) + ) + ) + ) + (func $_i64Add (type $12) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (result i32) + (local $var$4 i32) + (local $var$5 i32) + (block $label$0 + (set_local $var$4 + (i32.shr_u + (i32.add + (get_local $var$0) + (get_local $var$2) + ) + (i32.const 0) + ) + ) + (set_local $var$5 + (i32.shr_u + (i32.add + (i32.add + (get_local $var$1) + (get_local $var$3) + ) + (i32.lt_u + (i32.shr_u + (get_local $var$4) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$0) + (i32.const 0) + ) + ) + ) + (i32.const 0) + ) + ) + (block $label$1 + (i32.store align=4 + (i32.const 168) + (get_local $var$5) + ) + (get_local $var$4) + ) + ) + ) + (func $_memset (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (block $label$0 + (set_local $var$3 + (i32.add + (get_local $var$0) + (get_local $var$2) + ) + ) + (if + (i32.ge_s + (get_local $var$2) + (i32.const 20) + ) + (block $label$1 + (set_local $var$1 + (i32.and + (get_local $var$1) + (i32.const 255) + ) + ) + (set_local $var$6 + (i32.and + (get_local $var$0) + (i32.const 3) + ) + ) + (set_local $var$4 + (i32.or + (i32.or + (i32.or + (get_local $var$1) + (i32.shl + (get_local $var$1) + (i32.const 8) + ) + ) + (i32.shl + (get_local $var$1) + (i32.const 16) + ) + ) + (i32.shl + (get_local $var$1) + (i32.const 24) + ) + ) + ) + (set_local $var$5 + (i32.and + (get_local $var$3) + (i32.xor + (i32.const 3) + (i32.const -1) + ) + ) + ) + (if + (get_local $var$6) + (block $label$2 + (set_local $var$6 + (i32.sub + (i32.add + (get_local $var$0) + (i32.const 4) + ) + (get_local $var$6) + ) + ) + (loop $label$3 $label$4 + (block $label$5 + (if_else + (i32.lt_s + (get_local $var$0) + (get_local $var$6) + ) + (nop) + (br $label$3) + ) + (block $label$6 + (i32.store8 align=1 + (get_local $var$0) + (get_local $var$1) + ) + (set_local $var$0 + (i32.add + (get_local $var$0) + (i32.const 1) + ) + ) + ) + (br $label$4) + ) + ) + ) + ) + (loop $label$7 $label$8 + (block $label$9 + (if_else + (i32.lt_s + (get_local $var$0) + (get_local $var$5) + ) + (nop) + (br $label$7) + ) + (block $label$10 + (i32.store align=4 + (get_local $var$0) + (get_local $var$4) + ) + (set_local $var$0 + (i32.add + (get_local $var$0) + (i32.const 4) + ) + ) + ) + (br $label$8) + ) + ) + ) + ) + (loop $label$11 $label$12 + (block $label$13 + (if_else + (i32.lt_s + (get_local $var$0) + (get_local $var$3) + ) + (nop) + (br $label$11) + ) + (block $label$14 + (i32.store8 align=1 + (get_local $var$0) + (get_local $var$1) + ) + (set_local $var$0 + (i32.add + (get_local $var$0) + (i32.const 1) + ) + ) + ) + (br $label$12) + ) + ) + (i32.sub + (get_local $var$0) + (get_local $var$2) + ) + ) + ) + (func $_bitshift64Lshr (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (local $var$3 i32) + (block $label$0 + (if + (i32.lt_s + (get_local $var$2) + (i32.const 32) + ) + (block $label$1 + (set_local $var$3 + (i32.sub + (i32.shl + (i32.const 1) + (get_local $var$2) + ) + (i32.const 1) + ) + ) + (i32.store align=4 + (i32.const 168) + (i32.shr_u + (get_local $var$1) + (get_local $var$2) + ) + ) + (br $label$0 + (i32.or + (i32.shr_u + (get_local $var$0) + (get_local $var$2) + ) + (i32.shl + (i32.and + (get_local $var$1) + (get_local $var$3) + ) + (i32.sub + (i32.const 32) + (get_local $var$2) + ) + ) + ) + ) + ) + ) + (i32.store align=4 + (i32.const 168) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$1) + (i32.sub + (get_local $var$2) + (i32.const 32) + ) + ) + ) + ) + (func $_bitshift64Shl (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (local $var$3 i32) + (block $label$0 + (if + (i32.lt_s + (get_local $var$2) + (i32.const 32) + ) + (block $label$1 + (set_local $var$3 + (i32.sub + (i32.shl + (i32.const 1) + (get_local $var$2) + ) + (i32.const 1) + ) + ) + (i32.store align=4 + (i32.const 168) + (i32.or + (i32.shl + (get_local $var$1) + (get_local $var$2) + ) + (i32.shr_u + (i32.and + (get_local $var$0) + (i32.shl + (get_local $var$3) + (i32.sub + (i32.const 32) + (get_local $var$2) + ) + ) + ) + (i32.sub + (i32.const 32) + (get_local $var$2) + ) + ) + ) + ) + (br $label$0 + (i32.shl + (get_local $var$0) + (get_local $var$2) + ) + ) + ) + ) + (i32.store align=4 + (i32.const 168) + (i32.shl + (get_local $var$0) + (i32.sub + (get_local $var$2) + (i32.const 32) + ) + ) + ) + (i32.const 0) + ) + ) + (func $_memcpy (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (local $var$3 i32) + (block $label$0 + (if + (i32.ge_s + (get_local $var$2) + (i32.const 4096) + ) + (br $label$0 + (call_import $_emscripten_memcpy_big + (get_local $var$0) + (get_local $var$1) + (get_local $var$2) + ) + ) + ) + (set_local $var$3 + (get_local $var$0) + ) + (if + (i32.eq + (i32.and + (get_local $var$0) + (i32.const 3) + ) + (i32.and + (get_local $var$1) + (i32.const 3) + ) + ) + (block $label$1 + (loop $label$2 $label$3 + (block $label$4 + (if_else + (i32.and + (get_local $var$0) + (i32.const 3) + ) + (nop) + (br $label$2) + ) + (block $label$5 + (if + (i32.eq + (get_local $var$2) + (i32.const 0) + ) + (br $label$0 + (get_local $var$3) + ) + ) + (i32.store8 align=1 + (get_local $var$0) + (i32.load8_s align=1 + (get_local $var$1) + ) + ) + (set_local $var$0 + (i32.add + (get_local $var$0) + (i32.const 1) + ) + ) + (set_local $var$1 + (i32.add + (get_local $var$1) + (i32.const 1) + ) + ) + (set_local $var$2 + (i32.sub + (get_local $var$2) + (i32.const 1) + ) + ) + ) + (br $label$3) + ) + ) + (loop $label$6 $label$7 + (block $label$8 + (if_else + (i32.ge_s + (get_local $var$2) + (i32.const 4) + ) + (nop) + (br $label$6) + ) + (block $label$9 + (i32.store align=4 + (get_local $var$0) + (i32.load align=4 + (get_local $var$1) + ) + ) + (set_local $var$0 + (i32.add + (get_local $var$0) + (i32.const 4) + ) + ) + (set_local $var$1 + (i32.add + (get_local $var$1) + (i32.const 4) + ) + ) + (set_local $var$2 + (i32.sub + (get_local $var$2) + (i32.const 4) + ) + ) + ) + (br $label$7) + ) + ) + ) + ) + (loop $label$10 $label$11 + (block $label$12 + (if_else + (i32.gt_s + (get_local $var$2) + (i32.const 0) + ) + (nop) + (br $label$10) + ) + (block $label$13 + (i32.store8 align=1 + (get_local $var$0) + (i32.load8_s align=1 + (get_local $var$1) + ) + ) + (set_local $var$0 + (i32.add + (get_local $var$0) + (i32.const 1) + ) + ) + (set_local $var$1 + (i32.add + (get_local $var$1) + (i32.const 1) + ) + ) + (set_local $var$2 + (i32.sub + (get_local $var$2) + (i32.const 1) + ) + ) + ) + (br $label$11) + ) + ) + (get_local $var$3) + ) + ) + (func $_bitshift64Ashr (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (local $var$3 i32) + (block $label$0 + (if + (i32.lt_s + (get_local $var$2) + (i32.const 32) + ) + (block $label$1 + (set_local $var$3 + (i32.sub + (i32.shl + (i32.const 1) + (get_local $var$2) + ) + (i32.const 1) + ) + ) + (i32.store align=4 + (i32.const 168) + (i32.shr_s + (get_local $var$1) + (get_local $var$2) + ) + ) + (br $label$0 + (i32.or + (i32.shr_u + (get_local $var$0) + (get_local $var$2) + ) + (i32.shl + (i32.and + (get_local $var$1) + (get_local $var$3) + ) + (i32.sub + (i32.const 32) + (get_local $var$2) + ) + ) + ) + ) + ) + ) + (i32.store align=4 + (i32.const 168) + (if_else + (i32.lt_s + (get_local $var$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + ) + (i32.shr_s + (get_local $var$1) + (i32.sub + (get_local $var$2) + (i32.const 32) + ) + ) + ) + ) + (func $_llvm_cttz_i32 (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (block $label$0 + (set_local $var$1 + (i32.load8_s align=1 + (i32.add + (i32.load align=4 + (i32.const 40) + ) + (i32.and + (get_local $var$0) + (i32.const 255) + ) + ) + ) + ) + (if + (i32.lt_s + (get_local $var$1) + (i32.const 8) + ) + (br $label$0 + (get_local $var$1) + ) + ) + (set_local $var$1 + (i32.load8_s align=1 + (i32.add + (i32.load align=4 + (i32.const 40) + ) + (i32.and + (i32.shr_s + (get_local $var$0) + (i32.const 8) + ) + (i32.const 255) + ) + ) + ) + ) + (if + (i32.lt_s + (get_local $var$1) + (i32.const 8) + ) + (br $label$0 + (i32.add + (get_local $var$1) + (i32.const 8) + ) + ) + ) + (set_local $var$1 + (i32.load8_s align=1 + (i32.add + (i32.load align=4 + (i32.const 40) + ) + (i32.and + (i32.shr_s + (get_local $var$0) + (i32.const 16) + ) + (i32.const 255) + ) + ) + ) + ) + (if + (i32.lt_s + (get_local $var$1) + (i32.const 8) + ) + (br $label$0 + (i32.add + (get_local $var$1) + (i32.const 16) + ) + ) + ) + (i32.add + (i32.load8_s align=1 + (i32.add + (i32.load align=4 + (i32.const 40) + ) + (i32.shr_u + (get_local $var$0) + (i32.const 24) + ) + ) + ) + (i32.const 24) + ) + ) + ) + (func $___muldsi3 (type $5) (param $var$0 i32) (param $var$1 i32) (result i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (block $label$0 + (set_local $var$2 + (i32.and + (get_local $var$0) + (i32.const 65535) + ) + ) + (set_local $var$3 + (i32.and + (get_local $var$1) + (i32.const 65535) + ) + ) + (set_local $var$4 + (i32.mul + (get_local $var$3) + (get_local $var$2) + ) + ) + (set_local $var$5 + (i32.shr_u + (get_local $var$0) + (i32.const 16) + ) + ) + (set_local $var$6 + (i32.add + (i32.shr_u + (get_local $var$4) + (i32.const 16) + ) + (i32.mul + (get_local $var$3) + (get_local $var$5) + ) + ) + ) + (set_local $var$7 + (i32.shr_u + (get_local $var$1) + (i32.const 16) + ) + ) + (set_local $var$8 + (i32.mul + (get_local $var$7) + (get_local $var$2) + ) + ) + (block $label$1 + (i32.store align=4 + (i32.const 168) + (i32.add + (i32.add + (i32.shr_u + (get_local $var$6) + (i32.const 16) + ) + (i32.mul + (get_local $var$7) + (get_local $var$5) + ) + ) + (i32.shr_u + (i32.add + (i32.and + (get_local $var$6) + (i32.const 65535) + ) + (get_local $var$8) + ) + (i32.const 16) + ) + ) + ) + (i32.or + (i32.const 0) + (i32.or + (i32.shl + (i32.add + (get_local $var$6) + (get_local $var$8) + ) + (i32.const 16) + ) + (i32.and + (get_local $var$4) + (i32.const 65535) + ) + ) + ) + ) + ) + ) + (func $___divdi3 (type $12) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (result i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (block $label$0 + (set_local $var$4 + (i32.or + (i32.shr_s + (get_local $var$1) + (i32.const 31) + ) + (i32.shl + (if_else + (i32.lt_s + (get_local $var$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $var$5 + (i32.or + (i32.shr_s + (if_else + (i32.lt_s + (get_local $var$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if_else + (i32.lt_s + (get_local $var$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $var$6 + (i32.or + (i32.shr_s + (get_local $var$3) + (i32.const 31) + ) + (i32.shl + (if_else + (i32.lt_s + (get_local $var$3) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $var$7 + (i32.or + (i32.shr_s + (if_else + (i32.lt_s + (get_local $var$3) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if_else + (i32.lt_s + (get_local $var$3) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $var$8 + (call $_i64Subtract + (i32.xor + (get_local $var$4) + (get_local $var$0) + ) + (i32.xor + (get_local $var$5) + (get_local $var$1) + ) + (get_local $var$4) + (get_local $var$5) + ) + ) + (set_local $var$9 + (i32.load align=4 + (i32.const 168) + ) + ) + (set_local $var$10 + (call $_i64Subtract + (i32.xor + (get_local $var$6) + (get_local $var$2) + ) + (i32.xor + (get_local $var$7) + (get_local $var$3) + ) + (get_local $var$6) + (get_local $var$7) + ) + ) + (set_local $var$11 + (i32.xor + (get_local $var$6) + (get_local $var$4) + ) + ) + (set_local $var$12 + (i32.xor + (get_local $var$7) + (get_local $var$5) + ) + ) + (set_local $var$13 + (call $___udivmoddi4 + (get_local $var$8) + (get_local $var$9) + (get_local $var$10) + (i32.load align=4 + (i32.const 168) + ) + (i32.const 0) + ) + ) + (set_local $var$14 + (call $_i64Subtract + (i32.xor + (get_local $var$13) + (get_local $var$11) + ) + (i32.xor + (i32.load align=4 + (i32.const 168) + ) + (get_local $var$12) + ) + (get_local $var$11) + (get_local $var$12) + ) + ) + (get_local $var$14) + ) + ) + (func $___remdi3 (type $12) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (result i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (block $label$0 + (set_local $var$14 + (i32.load align=4 + (i32.const 8) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (i32.const 16) + ) + ) + (set_local $var$4 + (get_local $var$14) + ) + (set_local $var$5 + (i32.or + (i32.shr_s + (get_local $var$1) + (i32.const 31) + ) + (i32.shl + (if_else + (i32.lt_s + (get_local $var$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $var$6 + (i32.or + (i32.shr_s + (if_else + (i32.lt_s + (get_local $var$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if_else + (i32.lt_s + (get_local $var$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $var$7 + (i32.or + (i32.shr_s + (get_local $var$3) + (i32.const 31) + ) + (i32.shl + (if_else + (i32.lt_s + (get_local $var$3) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $var$8 + (i32.or + (i32.shr_s + (if_else + (i32.lt_s + (get_local $var$3) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if_else + (i32.lt_s + (get_local $var$3) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $var$9 + (call $_i64Subtract + (i32.xor + (get_local $var$5) + (get_local $var$0) + ) + (i32.xor + (get_local $var$6) + (get_local $var$1) + ) + (get_local $var$5) + (get_local $var$6) + ) + ) + (set_local $var$10 + (i32.load align=4 + (i32.const 168) + ) + ) + (set_local $var$11 + (call $_i64Subtract + (i32.xor + (get_local $var$7) + (get_local $var$2) + ) + (i32.xor + (get_local $var$8) + (get_local $var$3) + ) + (get_local $var$7) + (get_local $var$8) + ) + ) + (call $___udivmoddi4 + (get_local $var$9) + (get_local $var$10) + (get_local $var$11) + (i32.load align=4 + (i32.const 168) + ) + (get_local $var$4) + ) + (set_local $var$12 + (call $_i64Subtract + (i32.xor + (i32.load align=4 + (get_local $var$4) + ) + (get_local $var$5) + ) + (i32.xor + (i32.load align=4 + (i32.add + (get_local $var$4) + (i32.const 4) + ) + ) + (get_local $var$6) + ) + (get_local $var$5) + (get_local $var$6) + ) + ) + (set_local $var$13 + (i32.load align=4 + (i32.const 168) + ) + ) + (i32.store align=4 + (i32.const 8) + (get_local $var$14) + ) + (block $label$1 + (i32.store align=4 + (i32.const 168) + (get_local $var$13) + ) + (get_local $var$12) + ) + ) + ) + (func $___muldi3 (type $12) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (result i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (block $label$0 + (set_local $var$4 + (get_local $var$0) + ) + (set_local $var$5 + (get_local $var$2) + ) + (set_local $var$6 + (call $___muldsi3 + (get_local $var$4) + (get_local $var$5) + ) + ) + (set_local $var$7 + (i32.load align=4 + (i32.const 168) + ) + ) + (set_local $var$8 + (i32.mul + (get_local $var$1) + (get_local $var$5) + ) + ) + (block $label$1 + (i32.store align=4 + (i32.const 168) + (i32.or + (i32.add + (i32.add + (i32.mul + (get_local $var$3) + (get_local $var$4) + ) + (get_local $var$8) + ) + (get_local $var$7) + ) + (i32.and + (get_local $var$7) + (i32.const 0) + ) + ) + ) + (i32.or + (i32.const 0) + (i32.and + (get_local $var$6) + (i32.const -1) + ) + ) + ) + ) + ) + (func $___udivdi3 (type $12) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (result i32) + (local $var$4 i32) + (block $label$0 + (set_local $var$4 + (call $___udivmoddi4 + (get_local $var$0) + (get_local $var$1) + (get_local $var$2) + (get_local $var$3) + (i32.const 0) + ) + ) + (get_local $var$4) + ) + ) + (func $___uremdi3 (type $12) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (result i32) + (local $var$4 i32) + (local $var$5 i32) + (block $label$0 + (set_local $var$5 + (i32.load align=4 + (i32.const 8) + ) + ) + (i32.store align=4 + (i32.const 8) + (i32.add + (i32.load align=4 + (i32.const 8) + ) + (i32.const 16) + ) + ) + (set_local $var$4 + (get_local $var$5) + ) + (call $___udivmoddi4 + (get_local $var$0) + (get_local $var$1) + (get_local $var$2) + (get_local $var$3) + (get_local $var$4) + ) + (i32.store align=4 + (i32.const 8) + (get_local $var$5) + ) + (block $label$1 + (i32.store align=4 + (i32.const 168) + (i32.load align=4 + (i32.add + (get_local $var$4) + (i32.const 4) + ) + ) + ) + (i32.load align=4 + (get_local $var$4) + ) + ) + ) + ) + (func $___udivmoddi4 (type $9) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) (result i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + (local $var$12 i32) + (local $var$13 i32) + (local $var$14 i32) + (local $var$15 i32) + (local $var$16 i32) + (local $var$17 i32) + (local $var$18 i32) + (local $var$19 i32) + (local $var$20 i32) + (local $var$21 i32) + (local $var$22 i32) + (local $var$23 i32) + (local $var$24 i32) + (local $var$25 i32) + (local $var$26 i32) + (local $var$27 i32) + (local $var$28 i32) + (local $var$29 i32) + (local $var$30 i32) + (local $var$31 i32) + (local $var$32 i32) + (local $var$33 i32) + (local $var$34 i32) + (local $var$35 i32) + (local $var$36 i32) + (local $var$37 i32) + (local $var$38 i32) + (local $var$39 i32) + (local $var$40 i32) + (local $var$41 i32) + (local $var$42 i32) + (local $var$43 i32) + (local $var$44 i32) + (local $var$45 i32) + (local $var$46 i32) + (local $var$47 i32) + (local $var$48 i32) + (local $var$49 i32) + (local $var$50 i32) + (local $var$51 i32) + (local $var$52 i32) + (local $var$53 i32) + (local $var$54 i32) + (local $var$55 i32) + (local $var$56 i32) + (local $var$57 i32) + (local $var$58 i32) + (local $var$59 i32) + (local $var$60 i32) + (local $var$61 i32) + (local $var$62 i32) + (local $var$63 i32) + (local $var$64 i32) + (local $var$65 i32) + (local $var$66 i32) + (local $var$67 i32) + (local $var$68 i32) + (block $label$0 + (set_local $var$5 + (get_local $var$0) + ) + (set_local $var$6 + (get_local $var$1) + ) + (set_local $var$7 + (get_local $var$6) + ) + (set_local $var$8 + (get_local $var$2) + ) + (set_local $var$9 + (get_local $var$3) + ) + (set_local $var$10 + (get_local $var$9) + ) + (if + (i32.eq + (get_local $var$7) + (i32.const 0) + ) + (block $label$1 + (set_local $var$11 + (i32.ne + (get_local $var$4) + (i32.const 0) + ) + ) + (if_else + (i32.eq + (get_local $var$10) + (i32.const 0) + ) + (block $label$2 + (if + (get_local $var$11) + (block $label$3 + (i32.store align=4 + (get_local $var$4) + (i32.rem_u + (i32.shr_u + (get_local $var$5) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$8) + (i32.const 0) + ) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 4) + ) + (i32.const 0) + ) + ) + ) + (set_local $var$68 + (i32.const 0) + ) + (set_local $var$67 + (i32.shr_u + (i32.div_u + (i32.shr_u + (get_local $var$5) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$8) + (i32.const 0) + ) + ) + (i32.const 0) + ) + ) + (br $label$0 + (block $label$4 + (i32.store align=4 + (i32.const 168) + (get_local $var$68) + ) + (get_local $var$67) + ) + ) + ) + (block $label$5 + (if + (i32.eq + (get_local $var$11) + (i32.const 0) + ) + (block $label$6 + (set_local $var$68 + (i32.const 0) + ) + (set_local $var$67 + (i32.const 0) + ) + (br $label$0 + (block $label$7 + (i32.store align=4 + (i32.const 168) + (get_local $var$68) + ) + (get_local $var$67) + ) + ) + ) + ) + (i32.store align=4 + (get_local $var$4) + (i32.and + (get_local $var$0) + (i32.const -1) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 4) + ) + (i32.and + (get_local $var$1) + (i32.const 0) + ) + ) + (set_local $var$68 + (i32.const 0) + ) + (set_local $var$67 + (i32.const 0) + ) + (br $label$0 + (block $label$8 + (i32.store align=4 + (i32.const 168) + (get_local $var$68) + ) + (get_local $var$67) + ) + ) + ) + ) + ) + ) + (set_local $var$12 + (i32.eq + (get_local $var$10) + (i32.const 0) + ) + ) + (block $label$9 + (if_else + (i32.eq + (get_local $var$8) + (i32.const 0) + ) + (block $label$10 + (if + (get_local $var$12) + (block $label$11 + (if + (i32.ne + (get_local $var$4) + (i32.const 0) + ) + (block $label$12 + (i32.store align=4 + (get_local $var$4) + (i32.rem_u + (i32.shr_u + (get_local $var$7) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$8) + (i32.const 0) + ) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 4) + ) + (i32.const 0) + ) + ) + ) + (set_local $var$68 + (i32.const 0) + ) + (set_local $var$67 + (i32.shr_u + (i32.div_u + (i32.shr_u + (get_local $var$7) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$8) + (i32.const 0) + ) + ) + (i32.const 0) + ) + ) + (br $label$0 + (block $label$13 + (i32.store align=4 + (i32.const 168) + (get_local $var$68) + ) + (get_local $var$67) + ) + ) + ) + ) + (if + (i32.eq + (get_local $var$5) + (i32.const 0) + ) + (block $label$14 + (if + (i32.ne + (get_local $var$4) + (i32.const 0) + ) + (block $label$15 + (i32.store align=4 + (get_local $var$4) + (i32.const 0) + ) + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 4) + ) + (i32.rem_u + (i32.shr_u + (get_local $var$7) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$10) + (i32.const 0) + ) + ) + ) + ) + ) + (set_local $var$68 + (i32.const 0) + ) + (set_local $var$67 + (i32.shr_u + (i32.div_u + (i32.shr_u + (get_local $var$7) + (i32.const 0) + ) + (i32.shr_u + (get_local $var$10) + (i32.const 0) + ) + ) + (i32.const 0) + ) + ) + (br $label$0 + (block $label$16 + (i32.store align=4 + (i32.const 168) + (get_local $var$68) + ) + (get_local $var$67) + ) + ) + ) + ) + (set_local $var$13 + (i32.sub + (get_local $var$10) + (i32.const 1) + ) + ) + (if + (i32.eq + (i32.and + (get_local $var$13) + (get_local $var$10) + ) + (i32.const 0) + ) + (block $label$17 + (if + (i32.ne + (get_local $var$4) + (i32.const 0) + ) + (block $label$18 + (i32.store align=4 + (get_local $var$4) + (i32.or + (i32.const 0) + (i32.and + (get_local $var$0) + (i32.const -1) + ) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 4) + ) + (i32.or + (i32.and + (get_local $var$13) + (get_local $var$7) + ) + (i32.and + (get_local $var$1) + (i32.const 0) + ) + ) + ) + ) + ) + (set_local $var$68 + (i32.const 0) + ) + (set_local $var$67 + (i32.shr_u + (get_local $var$7) + (i32.shr_u + (call $_llvm_cttz_i32 + (get_local $var$10) + ) + (i32.const 0) + ) + ) + ) + (br $label$0 + (block $label$19 + (i32.store align=4 + (i32.const 168) + (get_local $var$68) + ) + (get_local $var$67) + ) + ) + ) + ) + (set_local $var$14 + (i32.clz + (get_local $var$10) + ) + ) + (set_local $var$15 + (i32.sub + (get_local $var$14) + (i32.clz + (get_local $var$7) + ) + ) + ) + (if + (i32.le_u + (i32.shr_u + (get_local $var$15) + (i32.const 0) + ) + (i32.const 30) + ) + (block $label$20 + (set_local $var$16 + (i32.add + (get_local $var$15) + (i32.const 1) + ) + ) + (set_local $var$17 + (i32.sub + (i32.const 31) + (get_local $var$15) + ) + ) + (set_local $var$36 + (get_local $var$16) + ) + (set_local $var$35 + (i32.or + (i32.shl + (get_local $var$7) + (get_local $var$17) + ) + (i32.shr_u + (get_local $var$5) + (i32.shr_u + (get_local $var$16) + (i32.const 0) + ) + ) + ) + ) + (set_local $var$34 + (i32.shr_u + (get_local $var$7) + (i32.shr_u + (get_local $var$16) + (i32.const 0) + ) + ) + ) + (set_local $var$33 + (i32.const 0) + ) + (set_local $var$32 + (i32.shl + (get_local $var$5) + (get_local $var$17) + ) + ) + (br $label$9) + ) + ) + (if + (i32.eq + (get_local $var$4) + (i32.const 0) + ) + (block $label$21 + (set_local $var$68 + (i32.const 0) + ) + (set_local $var$67 + (i32.const 0) + ) + (br $label$0 + (block $label$22 + (i32.store align=4 + (i32.const 168) + (get_local $var$68) + ) + (get_local $var$67) + ) + ) + ) + ) + (i32.store align=4 + (get_local $var$4) + (i32.or + (i32.const 0) + (i32.and + (get_local $var$0) + (i32.const -1) + ) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 4) + ) + (i32.or + (get_local $var$6) + (i32.and + (get_local $var$1) + (i32.const 0) + ) + ) + ) + (set_local $var$68 + (i32.const 0) + ) + (set_local $var$67 + (i32.const 0) + ) + (br $label$0 + (block $label$23 + (i32.store align=4 + (i32.const 168) + (get_local $var$68) + ) + (get_local $var$67) + ) + ) + ) + (block $label$24 + (if + (i32.eq + (get_local $var$12) + (i32.const 0) + ) + (block $label$25 + (set_local $var$27 + (i32.clz + (get_local $var$10) + ) + ) + (set_local $var$28 + (i32.sub + (get_local $var$27) + (i32.clz + (get_local $var$7) + ) + ) + ) + (if + (i32.le_u + (i32.shr_u + (get_local $var$28) + (i32.const 0) + ) + (i32.const 31) + ) + (block $label$26 + (set_local $var$29 + (i32.add + (get_local $var$28) + (i32.const 1) + ) + ) + (set_local $var$30 + (i32.sub + (i32.const 31) + (get_local $var$28) + ) + ) + (set_local $var$31 + (i32.shr_s + (i32.sub + (get_local $var$28) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $var$36 + (get_local $var$29) + ) + (set_local $var$35 + (i32.or + (i32.and + (i32.shr_u + (get_local $var$5) + (i32.shr_u + (get_local $var$29) + (i32.const 0) + ) + ) + (get_local $var$31) + ) + (i32.shl + (get_local $var$7) + (get_local $var$30) + ) + ) + ) + (set_local $var$34 + (i32.and + (i32.shr_u + (get_local $var$7) + (i32.shr_u + (get_local $var$29) + (i32.const 0) + ) + ) + (get_local $var$31) + ) + ) + (set_local $var$33 + (i32.const 0) + ) + (set_local $var$32 + (i32.shl + (get_local $var$5) + (get_local $var$30) + ) + ) + (br $label$9) + ) + ) + (if + (i32.eq + (get_local $var$4) + (i32.const 0) + ) + (block $label$27 + (set_local $var$68 + (i32.const 0) + ) + (set_local $var$67 + (i32.const 0) + ) + (br $label$0 + (block $label$28 + (i32.store align=4 + (i32.const 168) + (get_local $var$68) + ) + (get_local $var$67) + ) + ) + ) + ) + (i32.store align=4 + (get_local $var$4) + (i32.or + (i32.const 0) + (i32.and + (get_local $var$0) + (i32.const -1) + ) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 4) + ) + (i32.or + (get_local $var$6) + (i32.and + (get_local $var$1) + (i32.const 0) + ) + ) + ) + (set_local $var$68 + (i32.const 0) + ) + (set_local $var$67 + (i32.const 0) + ) + (br $label$0 + (block $label$29 + (i32.store align=4 + (i32.const 168) + (get_local $var$68) + ) + (get_local $var$67) + ) + ) + ) + ) + (set_local $var$18 + (i32.sub + (get_local $var$8) + (i32.const 1) + ) + ) + (if + (i32.ne + (i32.and + (get_local $var$18) + (get_local $var$8) + ) + (i32.const 0) + ) + (block $label$30 + (set_local $var$20 + (i32.add + (i32.clz + (get_local $var$8) + ) + (i32.const 33) + ) + ) + (set_local $var$21 + (i32.sub + (get_local $var$20) + (i32.clz + (get_local $var$7) + ) + ) + ) + (set_local $var$22 + (i32.sub + (i32.const 64) + (get_local $var$21) + ) + ) + (set_local $var$23 + (i32.sub + (i32.const 32) + (get_local $var$21) + ) + ) + (set_local $var$24 + (i32.shr_s + (get_local $var$23) + (i32.const 31) + ) + ) + (set_local $var$25 + (i32.sub + (get_local $var$21) + (i32.const 32) + ) + ) + (set_local $var$26 + (i32.shr_s + (get_local $var$25) + (i32.const 31) + ) + ) + (set_local $var$36 + (get_local $var$21) + ) + (set_local $var$35 + (i32.or + (i32.and + (i32.shr_s + (i32.sub + (get_local $var$23) + (i32.const 1) + ) + (i32.const 31) + ) + (i32.shr_u + (get_local $var$7) + (i32.shr_u + (get_local $var$25) + (i32.const 0) + ) + ) + ) + (i32.and + (i32.or + (i32.shl + (get_local $var$7) + (get_local $var$23) + ) + (i32.shr_u + (get_local $var$5) + (i32.shr_u + (get_local $var$21) + (i32.const 0) + ) + ) + ) + (get_local $var$26) + ) + ) + ) + (set_local $var$34 + (i32.and + (get_local $var$26) + (i32.shr_u + (get_local $var$7) + (i32.shr_u + (get_local $var$21) + (i32.const 0) + ) + ) + ) + ) + (set_local $var$33 + (i32.and + (i32.shl + (get_local $var$5) + (get_local $var$22) + ) + (get_local $var$24) + ) + ) + (set_local $var$32 + (i32.or + (i32.and + (i32.or + (i32.shl + (get_local $var$7) + (get_local $var$22) + ) + (i32.shr_u + (get_local $var$5) + (i32.shr_u + (get_local $var$25) + (i32.const 0) + ) + ) + ) + (get_local $var$24) + ) + (i32.and + (i32.shl + (get_local $var$5) + (get_local $var$23) + ) + (i32.shr_s + (i32.sub + (get_local $var$21) + (i32.const 33) + ) + (i32.const 31) + ) + ) + ) + ) + (br $label$9) + ) + ) + (if + (i32.ne + (get_local $var$4) + (i32.const 0) + ) + (block $label$31 + (i32.store align=4 + (get_local $var$4) + (i32.and + (get_local $var$18) + (get_local $var$5) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 4) + ) + (i32.const 0) + ) + ) + ) + (if_else + (i32.eq + (get_local $var$8) + (i32.const 1) + ) + (block $label$32 + (set_local $var$68 + (i32.or + (get_local $var$6) + (i32.and + (get_local $var$1) + (i32.const 0) + ) + ) + ) + (set_local $var$67 + (i32.or + (i32.const 0) + (i32.and + (get_local $var$0) + (i32.const -1) + ) + ) + ) + (br $label$0 + (block $label$33 + (i32.store align=4 + (i32.const 168) + (get_local $var$68) + ) + (get_local $var$67) + ) + ) + ) + (block $label$34 + (set_local $var$19 + (call $_llvm_cttz_i32 + (get_local $var$8) + ) + ) + (set_local $var$68 + (i32.or + (i32.const 0) + (i32.shr_u + (get_local $var$7) + (i32.shr_u + (get_local $var$19) + (i32.const 0) + ) + ) + ) + ) + (set_local $var$67 + (i32.or + (i32.shl + (get_local $var$7) + (i32.sub + (i32.const 32) + (get_local $var$19) + ) + ) + (i32.shr_u + (get_local $var$5) + (i32.shr_u + (get_local $var$19) + (i32.const 0) + ) + ) + ) + ) + (br $label$0 + (block $label$35 + (i32.store align=4 + (i32.const 168) + (get_local $var$68) + ) + (get_local $var$67) + ) + ) + ) + ) + ) + ) + ) + (if_else + (i32.eq + (get_local $var$36) + (i32.const 0) + ) + (block $label$36 + (set_local $var$63 + (get_local $var$32) + ) + (set_local $var$62 + (get_local $var$33) + ) + (set_local $var$61 + (get_local $var$34) + ) + (set_local $var$60 + (get_local $var$35) + ) + (set_local $var$59 + (i32.const 0) + ) + (set_local $var$58 + (i32.const 0) + ) + ) + (block $label$37 + (set_local $var$37 + (i32.or + (i32.const 0) + (i32.and + (get_local $var$2) + (i32.const -1) + ) + ) + ) + (set_local $var$38 + (i32.or + (get_local $var$9) + (i32.and + (get_local $var$3) + (i32.const 0) + ) + ) + ) + (set_local $var$39 + (call $_i64Add + (get_local $var$37) + (get_local $var$38) + (i32.const -1) + (i32.const -1) + ) + ) + (set_local $var$40 + (i32.load align=4 + (i32.const 168) + ) + ) + (set_local $var$46 + (get_local $var$32) + ) + (set_local $var$45 + (get_local $var$33) + ) + (set_local $var$44 + (get_local $var$34) + ) + (set_local $var$43 + (get_local $var$35) + ) + (set_local $var$42 + (get_local $var$36) + ) + (set_local $var$41 + (i32.const 0) + ) + (loop $label$38 $label$39 + (block $label$40 + (set_local $var$47 + (i32.or + (i32.shr_u + (get_local $var$45) + (i32.const 31) + ) + (i32.shl + (get_local $var$46) + (i32.const 1) + ) + ) + ) + (set_local $var$48 + (i32.or + (get_local $var$41) + (i32.shl + (get_local $var$45) + (i32.const 1) + ) + ) + ) + (set_local $var$49 + (i32.or + (i32.const 0) + (i32.or + (i32.shl + (get_local $var$43) + (i32.const 1) + ) + (i32.shr_u + (get_local $var$46) + (i32.const 31) + ) + ) + ) + ) + (set_local $var$50 + (i32.or + (i32.shr_u + (get_local $var$43) + (i32.const 31) + ) + (i32.shl + (get_local $var$44) + (i32.const 1) + ) + ) + ) + (call $_i64Subtract + (get_local $var$39) + (get_local $var$40) + (get_local $var$49) + (get_local $var$50) + ) + (set_local $var$51 + (i32.load align=4 + (i32.const 168) + ) + ) + (set_local $var$52 + (i32.or + (i32.shr_s + (get_local $var$51) + (i32.const 31) + ) + (i32.shl + (if_else + (i32.lt_s + (get_local $var$51) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $var$53 + (i32.and + (get_local $var$52) + (i32.const 1) + ) + ) + (set_local $var$54 + (call $_i64Subtract + (get_local $var$49) + (get_local $var$50) + (i32.and + (get_local $var$52) + (get_local $var$37) + ) + (i32.and + (i32.or + (i32.shr_s + (if_else + (i32.lt_s + (get_local $var$51) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if_else + (i32.lt_s + (get_local $var$51) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + (get_local $var$38) + ) + ) + ) + (set_local $var$55 + (get_local $var$54) + ) + (set_local $var$56 + (i32.load align=4 + (i32.const 168) + ) + ) + (set_local $var$57 + (i32.sub + (get_local $var$42) + (i32.const 1) + ) + ) + (if_else + (i32.eq + (get_local $var$57) + (i32.const 0) + ) + (br $label$38) + (block $label$41 + (set_local $var$46 + (get_local $var$47) + ) + (set_local $var$45 + (get_local $var$48) + ) + (set_local $var$44 + (get_local $var$56) + ) + (set_local $var$43 + (get_local $var$55) + ) + (set_local $var$42 + (get_local $var$57) + ) + (set_local $var$41 + (get_local $var$53) + ) + ) + ) + (br $label$39) + ) + ) + (set_local $var$63 + (get_local $var$47) + ) + (set_local $var$62 + (get_local $var$48) + ) + (set_local $var$61 + (get_local $var$56) + ) + (set_local $var$60 + (get_local $var$55) + ) + (set_local $var$59 + (i32.const 0) + ) + (set_local $var$58 + (get_local $var$53) + ) + ) + ) + (set_local $var$64 + (get_local $var$62) + ) + (set_local $var$65 + (i32.const 0) + ) + (set_local $var$66 + (i32.or + (get_local $var$63) + (get_local $var$65) + ) + ) + (if + (i32.ne + (get_local $var$4) + (i32.const 0) + ) + (block $label$42 + (i32.store align=4 + (get_local $var$4) + (i32.or + (i32.const 0) + (get_local $var$60) + ) + ) + (i32.store align=4 + (i32.add + (get_local $var$4) + (i32.const 4) + ) + (get_local $var$61) + ) + ) + ) + (set_local $var$68 + (i32.or + (i32.or + (i32.or + (i32.shr_u + (i32.or + (i32.const 0) + (get_local $var$64) + ) + (i32.const 31) + ) + (i32.shl + (get_local $var$66) + (i32.const 1) + ) + ) + (i32.and + (i32.or + (i32.shl + (get_local $var$65) + (i32.const 1) + ) + (i32.shr_u + (get_local $var$64) + (i32.const 31) + ) + ) + (i32.const 0) + ) + ) + (get_local $var$59) + ) + ) + (set_local $var$67 + (i32.or + (i32.and + (i32.or + (i32.shl + (get_local $var$64) + (i32.const 1) + ) + (i32.shr_u + (i32.const 0) + (i32.const 31) + ) + ) + (i32.const -2) + ) + (get_local $var$58) + ) + ) + (block $label$43 + (i32.store align=4 + (i32.const 168) + (get_local $var$68) + ) + (get_local $var$67) + ) + ) + ) + (func $dynCall_ii (type $5) (param $var$0 i32) (param $var$1 i32) (result i32) + (call_indirect $1 + (i32.add + (i32.and + (get_local $var$0) + (i32.const 1) + ) + (i32.const 0) + ) + (get_local $var$1) + ) + ) + (func $dynCall_iiii (type $12) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (result i32) + (call_indirect $0 + (i32.add + (i32.and + (get_local $var$0) + (i32.const 7) + ) + (i32.const 2) + ) + (get_local $var$1) + (get_local $var$2) + (get_local $var$3) + ) + ) + (func $dynCall_vi (type $6) (param $var$0 i32) (param $var$1 i32) + (call_indirect $2 + (i32.add + (i32.and + (get_local $var$0) + (i32.const 7) + ) + (i32.const 10) + ) + (get_local $var$1) + ) + ) + (func $b0 (type $1) (param $var$0 i32) (result i32) + (block $label$0 + (call_import $nullFunc_ii + (i32.const 0) + ) + (i32.const 0) + ) + ) + (func $b1 (type $0) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (block $label$0 + (call_import $nullFunc_iiii + (i32.const 1) + ) + (i32.const 0) + ) + ) + (func $b2 (type $2) (param $var$0 i32) + (call_import $nullFunc_vi + (i32.const 2) + ) + ) +) + diff --git a/src/binaryen/test/empty.asm.js b/src/binaryen/test/empty.asm.js new file mode 100644 index 0000000000..94fa6bb38b --- /dev/null +++ b/src/binaryen/test/empty.asm.js @@ -0,0 +1,4 @@ +function EmptyModule() { + 'use asm'; + return {}; +} diff --git a/src/binaryen/test/empty.fromasm b/src/binaryen/test/empty.fromasm new file mode 100644 index 0000000000..0e8d5c63bd --- /dev/null +++ b/src/binaryen/test/empty.fromasm @@ -0,0 +1,7 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (data (i32.const 1024) "empty.asm.js") +) diff --git a/src/binaryen/test/empty.fromasm.clamp b/src/binaryen/test/empty.fromasm.clamp new file mode 100644 index 0000000000..0e8d5c63bd --- /dev/null +++ b/src/binaryen/test/empty.fromasm.clamp @@ -0,0 +1,7 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (data (i32.const 1024) "empty.asm.js") +) diff --git a/src/binaryen/test/empty.fromasm.clamp.no-opts b/src/binaryen/test/empty.fromasm.clamp.no-opts new file mode 100644 index 0000000000..ddb433043e --- /dev/null +++ b/src/binaryen/test/empty.fromasm.clamp.no-opts @@ -0,0 +1,6 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) +) diff --git a/src/binaryen/test/empty.fromasm.imprecise b/src/binaryen/test/empty.fromasm.imprecise new file mode 100644 index 0000000000..ddb433043e --- /dev/null +++ b/src/binaryen/test/empty.fromasm.imprecise @@ -0,0 +1,6 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) +) diff --git a/src/binaryen/test/empty.fromasm.imprecise.no-opts b/src/binaryen/test/empty.fromasm.imprecise.no-opts new file mode 100644 index 0000000000..ddb433043e --- /dev/null +++ b/src/binaryen/test/empty.fromasm.imprecise.no-opts @@ -0,0 +1,6 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) +) diff --git a/src/binaryen/test/empty.fromasm.no-opts b/src/binaryen/test/empty.fromasm.no-opts new file mode 100644 index 0000000000..ddb433043e --- /dev/null +++ b/src/binaryen/test/empty.fromasm.no-opts @@ -0,0 +1,6 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) +) diff --git a/src/binaryen/test/empty_imported_table.2asm.js b/src/binaryen/test/empty_imported_table.2asm.js new file mode 100644 index 0000000000..240aa7e866 --- /dev/null +++ b/src/binaryen/test/empty_imported_table.2asm.js @@ -0,0 +1,60 @@ +function asmFunc(global, env, buffer) { + "use asm"; + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + var Math_imul = global.Math.imul; + var Math_fround = global.Math.fround; + var Math_abs = global.Math.abs; + var Math_clz32 = global.Math.clz32; + var import$table$0 = env.table; + function __wasm_ctz_i32(x) { + x = x | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0; + if ((x | 0) == (0 | 0)) $$9 = 32; else $$9 = 31 - Math_clz32(x ^ (x - 1 | 0) | 0) | 0; + return $$9 | 0; + } + + function __wasm_popcnt_i32(x) { + x = x | 0; + var count = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0; + count = 0; + b : { + l : do { + $$5 = count; + if ((x | 0) == (0 | 0)) break b; + x = x & (x - 1 | 0) | 0; + count = count + 1 | 0; + continue l; + break l; + } while (1); + }; + return $$5 | 0; + } + + function __wasm_rotl_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 >>> (k & 31 | 0) | 0) & x | 0) << (k & 31 | 0) | 0 | (((4294967295 << (32 - (k & 31 | 0) | 0) | 0) & x | 0) >>> (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function __wasm_rotr_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 << (k & 31 | 0) | 0) & x | 0) >>> (k & 31 | 0) | 0 | (((4294967295 >>> (32 - (k & 31 | 0) | 0) | 0) & x | 0) << (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + return { + + }; +} + diff --git a/src/binaryen/test/empty_imported_table.wast b/src/binaryen/test/empty_imported_table.wast new file mode 100644 index 0000000000..7662c068ee --- /dev/null +++ b/src/binaryen/test/empty_imported_table.wast @@ -0,0 +1,4 @@ +(module + (import "env" "table" (table 0 0 anyfunc)) + (memory $0 0) +) diff --git a/src/binaryen/test/empty_imported_table.wast.from-wast b/src/binaryen/test/empty_imported_table.wast.from-wast new file mode 100644 index 0000000000..1ad108fded --- /dev/null +++ b/src/binaryen/test/empty_imported_table.wast.from-wast @@ -0,0 +1,4 @@ +(module + (import "env" "table" (table 0 0 anyfunc)) + (memory $0 0) +) diff --git a/src/binaryen/test/empty_imported_table.wast.fromBinary b/src/binaryen/test/empty_imported_table.wast.fromBinary new file mode 100644 index 0000000000..9e0c240cd7 --- /dev/null +++ b/src/binaryen/test/empty_imported_table.wast.fromBinary @@ -0,0 +1,5 @@ +(module + (import "env" "table" (table 0 0 anyfunc)) + (memory $0 0) +) + diff --git a/src/binaryen/test/empty_imported_table.wast.fromBinary.noDebugInfo b/src/binaryen/test/empty_imported_table.wast.fromBinary.noDebugInfo new file mode 100644 index 0000000000..9e0c240cd7 --- /dev/null +++ b/src/binaryen/test/empty_imported_table.wast.fromBinary.noDebugInfo @@ -0,0 +1,5 @@ +(module + (import "env" "table" (table 0 0 anyfunc)) + (memory $0 0) +) + diff --git a/src/binaryen/test/empty_table.2asm.js b/src/binaryen/test/empty_table.2asm.js new file mode 100644 index 0000000000..db1d0677d9 --- /dev/null +++ b/src/binaryen/test/empty_table.2asm.js @@ -0,0 +1,59 @@ +function asmFunc(global, env, buffer) { + "use asm"; + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + var Math_imul = global.Math.imul; + var Math_fround = global.Math.fround; + var Math_abs = global.Math.abs; + var Math_clz32 = global.Math.clz32; + function __wasm_ctz_i32(x) { + x = x | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0; + if ((x | 0) == (0 | 0)) $$9 = 32; else $$9 = 31 - Math_clz32(x ^ (x - 1 | 0) | 0) | 0; + return $$9 | 0; + } + + function __wasm_popcnt_i32(x) { + x = x | 0; + var count = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0; + count = 0; + b : { + l : do { + $$5 = count; + if ((x | 0) == (0 | 0)) break b; + x = x & (x - 1 | 0) | 0; + count = count + 1 | 0; + continue l; + break l; + } while (1); + }; + return $$5 | 0; + } + + function __wasm_rotl_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 >>> (k & 31 | 0) | 0) & x | 0) << (k & 31 | 0) | 0 | (((4294967295 << (32 - (k & 31 | 0) | 0) | 0) & x | 0) >>> (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function __wasm_rotr_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 << (k & 31 | 0) | 0) & x | 0) >>> (k & 31 | 0) | 0 | (((4294967295 >>> (32 - (k & 31 | 0) | 0) | 0) & x | 0) << (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + return { + + }; +} + diff --git a/src/binaryen/test/empty_table.wast b/src/binaryen/test/empty_table.wast new file mode 100644 index 0000000000..17ce9d6b21 --- /dev/null +++ b/src/binaryen/test/empty_table.wast @@ -0,0 +1,4 @@ +(module + (table 0 0 anyfunc) + (memory $0 0) +) diff --git a/src/binaryen/test/empty_table.wast.from-wast b/src/binaryen/test/empty_table.wast.from-wast new file mode 100644 index 0000000000..7254336c54 --- /dev/null +++ b/src/binaryen/test/empty_table.wast.from-wast @@ -0,0 +1,4 @@ +(module + (table 0 0 anyfunc) + (memory $0 0) +) diff --git a/src/binaryen/test/empty_table.wast.fromBinary b/src/binaryen/test/empty_table.wast.fromBinary new file mode 100644 index 0000000000..07bab7efa3 --- /dev/null +++ b/src/binaryen/test/empty_table.wast.fromBinary @@ -0,0 +1,5 @@ +(module + (table 0 0 anyfunc) + (memory $0 0) +) + diff --git a/src/binaryen/test/empty_table.wast.fromBinary.noDebugInfo b/src/binaryen/test/empty_table.wast.fromBinary.noDebugInfo new file mode 100644 index 0000000000..07bab7efa3 --- /dev/null +++ b/src/binaryen/test/empty_table.wast.fromBinary.noDebugInfo @@ -0,0 +1,5 @@ +(module + (table 0 0 anyfunc) + (memory $0 0) +) + diff --git a/src/binaryen/test/example/c-api-hello-world.c b/src/binaryen/test/example/c-api-hello-world.c new file mode 100644 index 0000000000..59b0b1e32b --- /dev/null +++ b/src/binaryen/test/example/c-api-hello-world.c @@ -0,0 +1,31 @@ + +#include + +// "hello world" type example: create a function that adds two i32s and returns the result + +int main() { + BinaryenModuleRef module = BinaryenModuleCreate(); + + // Create a function type for i32 (i32, i32) + BinaryenType params[2] = { BinaryenInt32(), BinaryenInt32() }; + BinaryenFunctionTypeRef iii = BinaryenAddFunctionType(module, "iii", BinaryenInt32(), params, 2); + + // Get the 0 and 1 arguments, and add them + BinaryenExpressionRef x = BinaryenGetLocal(module, 0, BinaryenInt32()), + y = BinaryenGetLocal(module, 1, BinaryenInt32()); + BinaryenExpressionRef add = BinaryenBinary(module, BinaryenAddInt32(), x, y); + + // Create the add function + // Note: no additional local variables + // Note: no basic blocks here, we are an AST. The function body is just an expression node. + BinaryenFunctionRef adder = BinaryenAddFunction(module, "adder", iii, NULL, 0, add); + + // Print it out + BinaryenModulePrint(module); + + // Clean up the module, which owns all the objects we created above + BinaryenModuleDispose(module); + + return 0; +} + diff --git a/src/binaryen/test/example/c-api-hello-world.txt b/src/binaryen/test/example/c-api-hello-world.txt new file mode 100644 index 0000000000..e61cf37613 --- /dev/null +++ b/src/binaryen/test/example/c-api-hello-world.txt @@ -0,0 +1,10 @@ +(module + (type $iii (func (param i32 i32) (result i32))) + (memory $0 0) + (func $adder (; 0 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (i32.add + (get_local $0) + (get_local $1) + ) + ) +) diff --git a/src/binaryen/test/example/c-api-kitchen-sink.c b/src/binaryen/test/example/c-api-kitchen-sink.c new file mode 100644 index 0000000000..3b711d28ab --- /dev/null +++ b/src/binaryen/test/example/c-api-kitchen-sink.c @@ -0,0 +1,604 @@ + +// We always need asserts here +#ifdef NDEBUG +#undef NDEBUG +#endif + +#include +#include +#include + +#include + +// kitchen sink, tests the full API + + +// helpers + +BinaryenExpressionRef makeUnary(BinaryenModuleRef module, BinaryenOp op, BinaryenType inputType) { + if (inputType == BinaryenInt32()) return BinaryenUnary(module, op, BinaryenConst(module, BinaryenLiteralInt32(-10))); + if (inputType == BinaryenInt64()) return BinaryenUnary(module, op, BinaryenConst(module, BinaryenLiteralInt64(-22))); + if (inputType == BinaryenFloat32()) return BinaryenUnary(module, op, BinaryenConst(module, BinaryenLiteralFloat32(-33.612f))); + if (inputType == BinaryenFloat64()) return BinaryenUnary(module, op, BinaryenConst(module, BinaryenLiteralFloat64(-9005.841))); + abort(); +} + +BinaryenExpressionRef makeBinary(BinaryenModuleRef module, BinaryenOp op, BinaryenType type) { + if (type == BinaryenInt32()) { + // use temp vars to ensure optimization doesn't change the order of operation in our trace recording + BinaryenExpressionRef temp = BinaryenConst(module, BinaryenLiteralInt32(-11)); + return BinaryenBinary(module, op, BinaryenConst(module, BinaryenLiteralInt32(-10)), temp); + } + if (type == BinaryenInt64()) { + BinaryenExpressionRef temp = BinaryenConst(module, BinaryenLiteralInt64(-23)); + return BinaryenBinary(module, op, BinaryenConst(module, BinaryenLiteralInt64(-22)), temp); + } + if (type == BinaryenFloat32()) { + BinaryenExpressionRef temp = BinaryenConst(module, BinaryenLiteralFloat32(-62.5f)); + return BinaryenBinary(module, op, BinaryenConst(module, BinaryenLiteralFloat32(-33.612f)), temp); + } + if (type == BinaryenFloat64()) { + BinaryenExpressionRef temp = BinaryenConst(module, BinaryenLiteralFloat64(-9007.333)); + return BinaryenBinary(module, op, BinaryenConst(module, BinaryenLiteralFloat64(-9005.841)), temp); + } + abort(); +} + +BinaryenExpressionRef makeInt32(BinaryenModuleRef module, int x) { + return BinaryenConst(module, BinaryenLiteralInt32(x)); +} + +BinaryenExpressionRef makeFloat32(BinaryenModuleRef module, float x) { + return BinaryenConst(module, BinaryenLiteralFloat32(x)); +} + +BinaryenExpressionRef makeInt64(BinaryenModuleRef module, int64_t x) { + return BinaryenConst(module, BinaryenLiteralInt64(x)); +} + +BinaryenExpressionRef makeFloat64(BinaryenModuleRef module, double x) { + return BinaryenConst(module, BinaryenLiteralFloat64(x)); +} + +BinaryenExpressionRef makeSomething(BinaryenModuleRef module) { + return makeInt32(module, 1337); +} + +BinaryenExpressionRef makeDroppedInt32(BinaryenModuleRef module, int x) { + return BinaryenDrop(module, BinaryenConst(module, BinaryenLiteralInt32(x))); +} + +// tests + +void test_types() { + printf("BinaryenNone: %d\n", BinaryenNone()); + printf("BinaryenInt32: %d\n", BinaryenInt32()); + printf("BinaryenInt64: %d\n", BinaryenInt64()); + printf("BinaryenFloat32: %d\n", BinaryenFloat32()); + printf("BinaryenFloat64: %d\n", BinaryenFloat64()); +} + +void test_core() { + + // Module creation + + BinaryenModuleRef module = BinaryenModuleCreate(); + + // Literals and consts + + BinaryenExpressionRef constI32 = BinaryenConst(module, BinaryenLiteralInt32(1)), + constI64 = BinaryenConst(module, BinaryenLiteralInt64(2)), + constF32 = BinaryenConst(module, BinaryenLiteralFloat32(3.14f)), + constF64 = BinaryenConst(module, BinaryenLiteralFloat64(2.1828)), + constF32Bits = BinaryenConst(module, BinaryenLiteralFloat32Bits(0xffff1234)), + constF64Bits = BinaryenConst(module, BinaryenLiteralFloat64Bits(0xffff12345678abcdLL)); + + const char* switchValueNames[] = { "the-value" }; + const char* switchBodyNames[] = { "the-nothing" }; + + BinaryenExpressionRef callOperands2[] = { makeInt32(module, 13), makeFloat64(module, 3.7) }; + BinaryenExpressionRef callOperands4[] = { makeInt32(module, 13), makeInt64(module, 37), makeFloat32(module, 1.3f), makeFloat64(module, 3.7) }; + BinaryenExpressionRef callOperands4b[] = { makeInt32(module, 13), makeInt64(module, 37), makeFloat32(module, 1.3f), makeFloat64(module, 3.7) }; + + BinaryenType params[4] = { BinaryenInt32(), BinaryenInt64(), BinaryenFloat32(), BinaryenFloat64() }; + BinaryenFunctionTypeRef iiIfF = BinaryenAddFunctionType(module, "iiIfF", BinaryenInt32(), params, 4); + + BinaryenExpressionRef temp1 = makeInt32(module, 1), temp2 = makeInt32(module, 2), temp3 = makeInt32(module, 3), + temp4 = makeInt32(module, 4), temp5 = makeInt32(module, 5), + temp6 = makeInt32(module, 0), temp7 = makeInt32(module, 1), + temp8 = makeInt32(module, 0), temp9 = makeInt32(module, 1), + temp10 = makeInt32(module, 1), temp11 = makeInt32(module, 3), temp12 = makeInt32(module, 5), + temp13 = makeInt32(module, 10), temp14 = makeInt32(module, 11), + temp15 = makeInt32(module, 110), temp16 = makeInt64(module, 111); + + BinaryenExpressionRef valueList[] = { + // Unary + makeUnary(module, BinaryenClzInt32(), 1), + makeUnary(module, BinaryenCtzInt64(), 2), + makeUnary(module, BinaryenPopcntInt32(), 1), + makeUnary(module, BinaryenNegFloat32(), 3), + makeUnary(module, BinaryenAbsFloat64(), 4), + makeUnary(module, BinaryenCeilFloat32(), 3), + makeUnary(module, BinaryenFloorFloat64(), 4), + makeUnary(module, BinaryenTruncFloat32(), 3), + makeUnary(module, BinaryenNearestFloat32(), 3), + makeUnary(module, BinaryenSqrtFloat64(), 4), + makeUnary(module, BinaryenEqZInt32(), 1), + makeUnary(module, BinaryenExtendSInt32(), 1), + makeUnary(module, BinaryenExtendUInt32(), 1), + makeUnary(module, BinaryenWrapInt64(), 2), + makeUnary(module, BinaryenTruncSFloat32ToInt32(), 3), + makeUnary(module, BinaryenTruncSFloat32ToInt64(), 3), + makeUnary(module, BinaryenTruncUFloat32ToInt32(), 3), + makeUnary(module, BinaryenTruncUFloat32ToInt64(), 3), + makeUnary(module, BinaryenTruncSFloat64ToInt32(), 4), + makeUnary(module, BinaryenTruncSFloat64ToInt64(), 4), + makeUnary(module, BinaryenTruncUFloat64ToInt32(), 4), + makeUnary(module, BinaryenTruncUFloat64ToInt64(), 4), + makeUnary(module, BinaryenReinterpretFloat32(), 3), + makeUnary(module, BinaryenReinterpretFloat64(), 4), + makeUnary(module, BinaryenConvertSInt32ToFloat32(), 1), + makeUnary(module, BinaryenConvertSInt32ToFloat64(), 1), + makeUnary(module, BinaryenConvertUInt32ToFloat32(), 1), + makeUnary(module, BinaryenConvertUInt32ToFloat64(), 1), + makeUnary(module, BinaryenConvertSInt64ToFloat32(), 2), + makeUnary(module, BinaryenConvertSInt64ToFloat64(), 2), + makeUnary(module, BinaryenConvertUInt64ToFloat32(), 2), + makeUnary(module, BinaryenConvertUInt64ToFloat64(), 2), + makeUnary(module, BinaryenPromoteFloat32(), 3), + makeUnary(module, BinaryenDemoteFloat64(), 4), + makeUnary(module, BinaryenReinterpretInt32(), 1), + makeUnary(module, BinaryenReinterpretInt64(), 2), + // Binary + makeBinary(module, BinaryenAddInt32(), 1), + makeBinary(module, BinaryenSubFloat64(), 4), + makeBinary(module, BinaryenDivSInt32(), 1), + makeBinary(module, BinaryenDivUInt64(), 2), + makeBinary(module, BinaryenRemSInt64(), 2), + makeBinary(module, BinaryenRemUInt32(), 1), + makeBinary(module, BinaryenAndInt32(), 1), + makeBinary(module, BinaryenOrInt64(), 2), + makeBinary(module, BinaryenXorInt32(), 1), + makeBinary(module, BinaryenShlInt64(), 2), + makeBinary(module, BinaryenShrUInt64(), 2), + makeBinary(module, BinaryenShrSInt32(), 1), + makeBinary(module, BinaryenRotLInt32(), 1), + makeBinary(module, BinaryenRotRInt64(), 2), + makeBinary(module, BinaryenDivFloat32(), 3), + makeBinary(module, BinaryenCopySignFloat64(), 4), + makeBinary(module, BinaryenMinFloat32(), 3), + makeBinary(module, BinaryenMaxFloat64(), 4), + makeBinary(module, BinaryenEqInt32(), 1), + makeBinary(module, BinaryenNeFloat32(), 3), + makeBinary(module, BinaryenLtSInt32(), 1), + makeBinary(module, BinaryenLtUInt64(), 2), + makeBinary(module, BinaryenLeSInt64(), 2), + makeBinary(module, BinaryenLeUInt32(), 1), + makeBinary(module, BinaryenGtSInt64(), 2), + makeBinary(module, BinaryenGtUInt32(), 1), + makeBinary(module, BinaryenGeSInt32(), 1), + makeBinary(module, BinaryenGeUInt64(), 2), + makeBinary(module, BinaryenLtFloat32(), 3), + makeBinary(module, BinaryenLeFloat64(), 4), + makeBinary(module, BinaryenGtFloat64(), 4), + makeBinary(module, BinaryenGeFloat32(), 3), + // All the rest + BinaryenBlock(module, NULL, NULL, 0, -1), // block with no name and no type + BinaryenIf(module, temp1, temp2, temp3), + BinaryenIf(module, temp4, temp5, NULL), + BinaryenLoop(module, "in", makeInt32(module, 0)), + BinaryenLoop(module, NULL, makeInt32(module, 0)), + BinaryenBreak(module, "the-value", temp6, temp7), + BinaryenBreak(module, "the-nothing", makeInt32(module, 2), NULL), + BinaryenBreak(module, "the-value", NULL, makeInt32(module, 3)), + BinaryenBreak(module, "the-nothing", NULL, NULL), + BinaryenSwitch(module, switchValueNames, 1, "the-value", temp8, temp9), + BinaryenSwitch(module, switchBodyNames, 1, "the-nothing", makeInt32(module, 2), NULL), + BinaryenUnary(module, BinaryenEqZInt32(), // check the output type of the call node + BinaryenCall(module, "kitchen()sinker", callOperands4, 4, BinaryenInt32()) + ), + BinaryenUnary(module, BinaryenEqZInt32(), // check the output type of the call node + BinaryenUnary(module, + BinaryenTruncSFloat32ToInt32(), + BinaryenCallImport(module, "an-imported", callOperands2, 2, BinaryenFloat32()) + ) + ), + BinaryenUnary(module, BinaryenEqZInt32(), // check the output type of the call node + BinaryenCallIndirect(module, makeInt32(module, 2449), callOperands4b, 4, "iiIfF") + ), + BinaryenDrop(module, BinaryenGetLocal(module, 0, BinaryenInt32())), + BinaryenSetLocal(module, 0, makeInt32(module, 101)), + BinaryenDrop(module, BinaryenTeeLocal(module, 0, makeInt32(module, 102))), + BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), makeInt32(module, 1)), + BinaryenLoad(module, 2, 1, 2, 1, BinaryenInt64(), makeInt32(module, 8)), + BinaryenLoad(module, 4, 0, 0, 0, BinaryenFloat32(), makeInt32(module, 2)), + BinaryenLoad(module, 8, 0, 2, 8, BinaryenFloat64(), makeInt32(module, 9)), + BinaryenStore(module, 4, 0, 0, temp13, temp14, BinaryenInt32()), + BinaryenStore(module, 8, 2, 4, temp15, temp16, BinaryenInt64()), + BinaryenSelect(module, temp10, temp11, temp12), + BinaryenReturn(module, makeInt32(module, 1337)), + // TODO: Host + BinaryenNop(module), + BinaryenUnreachable(module), + }; + + BinaryenExpressionPrint(valueList[3]); // test printing a standalone expression + + // Make the main body of the function. and one block with a return value, one without + BinaryenExpressionRef value = BinaryenBlock(module, "the-value", valueList, sizeof(valueList) / sizeof(BinaryenExpressionRef), -1); + BinaryenExpressionRef droppedValue = BinaryenDrop(module, value); + BinaryenExpressionRef nothing = BinaryenBlock(module, "the-nothing", &droppedValue, 1, -1); + BinaryenExpressionRef bodyList[] = { nothing, makeInt32(module, 42) }; + BinaryenExpressionRef body = BinaryenBlock(module, "the-body", bodyList, 2, -1); + + // Create the function + BinaryenType localTypes[] = { BinaryenInt32() }; + BinaryenFunctionRef sinker = BinaryenAddFunction(module, "kitchen()sinker", iiIfF, localTypes, 1, body); + + // Globals + + BinaryenAddGlobal(module, "a-global", BinaryenInt32(), 0, makeInt32(module, 7)); + BinaryenAddGlobal(module, "a-mutable-global", BinaryenFloat32(), 1, makeFloat32(module, 7.5)); + + // Imports + + BinaryenType iparams[2] = { BinaryenInt32(), BinaryenFloat64() }; + BinaryenFunctionTypeRef fiF = BinaryenAddFunctionType(module, "fiF", BinaryenFloat32(), iparams, 2); + BinaryenAddImport(module, "an-imported", "module", "base", fiF); + + // Exports + + BinaryenAddExport(module, "kitchen()sinker", "kitchen_sinker"); + + // Function table. One per module + BinaryenFunctionRef functions[] = { sinker }; + BinaryenSetFunctionTable(module, functions, 1); + + // Memory. One per module + + const char *segments[] = { "hello, world" }; + BinaryenExpressionRef segmentOffsets[] = { BinaryenConst(module, BinaryenLiteralInt32(10)) }; + BinaryenIndex segmentSizes[] = { 12 }; + BinaryenSetMemory(module, 1, 256, "mem", segments, segmentOffsets, segmentSizes, 1); + + // Start function. One per module + + BinaryenFunctionTypeRef v = BinaryenAddFunctionType(module, "v", BinaryenNone(), NULL, 0); + BinaryenFunctionRef starter = BinaryenAddFunction(module, "starter", v, NULL, 0, BinaryenNop(module)); + BinaryenSetStart(module, starter); + + // Unnamed function type + + BinaryenFunctionTypeRef noname = BinaryenAddFunctionType(module, NULL, BinaryenNone(), NULL, 0); + + // A bunch of our code needs drop(), auto-add it + BinaryenModuleAutoDrop(module); + + // Verify it validates + assert(BinaryenModuleValidate(module)); + + // Print it out + BinaryenModulePrint(module); + + // Clean up the module, which owns all the objects we created above + BinaryenModuleDispose(module); +} + +void test_unreachable() { + BinaryenModuleRef module = BinaryenModuleCreate(); + BinaryenFunctionTypeRef i = BinaryenAddFunctionType(module, "i", BinaryenInt32(), NULL, 0); + BinaryenFunctionTypeRef I = BinaryenAddFunctionType(module, "I", BinaryenInt64(), NULL, 0); + + BinaryenExpressionRef body = BinaryenCallIndirect(module, BinaryenUnreachable(module), NULL, 0, "I"); + BinaryenFunctionRef fn = BinaryenAddFunction(module, "unreachable-fn", i, NULL, 0, body); + + assert(BinaryenModuleValidate(module)); + BinaryenModulePrint(module); + BinaryenModuleDispose(module); +} + +BinaryenExpressionRef makeCallCheck(BinaryenModuleRef module, int x) { + BinaryenExpressionRef callOperands[] = { makeInt32(module, x) }; + return BinaryenCallImport(module, "check", callOperands, 1, BinaryenNone()); +} + +void test_relooper() { + BinaryenModuleRef module = BinaryenModuleCreate(); + BinaryenFunctionTypeRef v = BinaryenAddFunctionType(module, "v", BinaryenNone(), NULL, 0); + BinaryenType localTypes[] = { BinaryenInt32() }; + + { + BinaryenType iparams[1] = { BinaryenInt32() }; + BinaryenFunctionTypeRef vi = BinaryenAddFunctionType(module, "vi", BinaryenNone(), iparams, 1); + BinaryenAddImport(module, "check", "module", "check", vi); + } + + { // trivial: just one block + RelooperRef relooper = RelooperCreate(); + RelooperBlockRef block = RelooperAddBlock(relooper, makeCallCheck(module, 1337)); + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block, 0, module); + BinaryenFunctionRef sinker = BinaryenAddFunction(module, "just-one-block", v, localTypes, 1, body); + } + { // two blocks + RelooperRef relooper = RelooperCreate(); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperAddBranch(block0, block1, NULL, NULL); // no condition, no code on branch + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); + BinaryenFunctionRef sinker = BinaryenAddFunction(module, "two-blocks", v, localTypes, 1, body); + } + { // two blocks with code between them + RelooperRef relooper = RelooperCreate(); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperAddBranch(block0, block1, NULL, makeDroppedInt32(module, 77)); // code on branch + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); + BinaryenFunctionRef sinker = BinaryenAddFunction(module, "two-blocks-plus-code", v, localTypes, 1, body); + } + { // two blocks in a loop + RelooperRef relooper = RelooperCreate(); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperAddBranch(block0, block1, NULL, NULL); + RelooperAddBranch(block1, block0, NULL, NULL); + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); + BinaryenFunctionRef sinker = BinaryenAddFunction(module, "loop", v, localTypes, 1, body); + } + { // two blocks in a loop with codes + RelooperRef relooper = RelooperCreate(); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperAddBranch(block0, block1, NULL, makeDroppedInt32(module, 33)); + RelooperAddBranch(block1, block0, NULL, makeDroppedInt32(module, -66)); + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); + BinaryenFunctionRef sinker = BinaryenAddFunction(module, "loop-plus-code", v, localTypes, 1, body); + } + { // split + RelooperRef relooper = RelooperCreate(); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); + RelooperAddBranch(block0, block1, makeInt32(module, 55), NULL); + RelooperAddBranch(block0, block2, NULL, NULL); + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); + BinaryenFunctionRef sinker = BinaryenAddFunction(module, "split", v, localTypes, 1, body); + } + { // split + code + RelooperRef relooper = RelooperCreate(); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); + BinaryenExpressionRef temp = makeDroppedInt32(module, 10); + RelooperAddBranch(block0, block1, makeInt32(module, 55), temp); + RelooperAddBranch(block0, block2, NULL, makeDroppedInt32(module, 20)); + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); + BinaryenFunctionRef sinker = BinaryenAddFunction(module, "split-plus-code", v, localTypes, 1, body); + } + { // if + RelooperRef relooper = RelooperCreate(); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); + RelooperAddBranch(block0, block1, makeInt32(module, 55), NULL); + RelooperAddBranch(block0, block2, NULL, NULL); + RelooperAddBranch(block1, block2, NULL, NULL); + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); + BinaryenFunctionRef sinker = BinaryenAddFunction(module, "if", v, localTypes, 1, body); + } + { // if + code + RelooperRef relooper = RelooperCreate(); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); + BinaryenExpressionRef temp = makeDroppedInt32(module, -1); + RelooperAddBranch(block0, block1, makeInt32(module, 55), temp); + RelooperAddBranch(block0, block2, NULL, makeDroppedInt32(module, -2)); + RelooperAddBranch(block1, block2, NULL, makeDroppedInt32(module, -3)); + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); + BinaryenFunctionRef sinker = BinaryenAddFunction(module, "if-plus-code", v, localTypes, 1, body); + } + { // if-else + RelooperRef relooper = RelooperCreate(); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); + RelooperBlockRef block3 = RelooperAddBlock(relooper, makeCallCheck(module, 3)); + RelooperAddBranch(block0, block1, makeInt32(module, 55), NULL); + RelooperAddBranch(block0, block2, NULL, NULL); + RelooperAddBranch(block1, block3, NULL, NULL); + RelooperAddBranch(block2, block3, NULL, NULL); + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); + BinaryenFunctionRef sinker = BinaryenAddFunction(module, "if-else", v, localTypes, 1, body); + } + { // loop+tail + RelooperRef relooper = RelooperCreate(); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); + RelooperAddBranch(block0, block1, NULL, NULL); + RelooperAddBranch(block1, block0, makeInt32(module, 10), NULL); + RelooperAddBranch(block1, block2, NULL, NULL); + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); + BinaryenFunctionRef sinker = BinaryenAddFunction(module, "loop-tail", v, localTypes, 1, body); + } + { // nontrivial loop + phi to head + RelooperRef relooper = RelooperCreate(); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); + RelooperBlockRef block3 = RelooperAddBlock(relooper, makeCallCheck(module, 3)); + RelooperBlockRef block4 = RelooperAddBlock(relooper, makeCallCheck(module, 4)); + RelooperBlockRef block5 = RelooperAddBlock(relooper, makeCallCheck(module, 5)); + RelooperBlockRef block6 = RelooperAddBlock(relooper, makeCallCheck(module, 6)); + RelooperAddBranch(block0, block1, NULL, makeDroppedInt32(module, 10)); + RelooperAddBranch(block1, block2, makeInt32(module, -2), NULL); + RelooperAddBranch(block1, block6, NULL, makeDroppedInt32(module, 20)); + RelooperAddBranch(block2, block3, makeInt32(module, -6), NULL); + RelooperAddBranch(block2, block1, NULL, makeDroppedInt32(module, 30)); + RelooperAddBranch(block3, block4, makeInt32(module, -10), NULL); + RelooperAddBranch(block3, block5, NULL, NULL); + RelooperAddBranch(block4, block5, NULL, NULL); + RelooperAddBranch(block5, block6, NULL, makeDroppedInt32(module, 40)); + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); + BinaryenFunctionRef sinker = BinaryenAddFunction(module, "nontrivial-loop-plus-phi-to-head", v, localTypes, 1, body); + } + { // switch + RelooperRef relooper = RelooperCreate(); + BinaryenExpressionRef temp = makeInt32(module, -99); + RelooperBlockRef block0 = RelooperAddBlockWithSwitch(relooper, makeCallCheck(module, 0), temp); + // TODO: this example is not very good, the blocks should end in a |return| as otherwise they + // fall through to each other. A relooper block should end in something that stops control + // flow, if it doesn't have branches going out + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); + RelooperBlockRef block3 = RelooperAddBlock(relooper, makeCallCheck(module, 3)); + BinaryenIndex to_block1[] = { 2, 5 }; + RelooperAddBranchForSwitch(block0, block1, to_block1, 2, NULL); + BinaryenIndex to_block2[] = { 4 }; + RelooperAddBranchForSwitch(block0, block2, to_block2, 1, makeDroppedInt32(module, 55)); + RelooperAddBranchForSwitch(block0, block3, NULL, 0, NULL); + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); + BinaryenFunctionRef sinker = BinaryenAddFunction(module, "switch", v, localTypes, 1, body); + } + { // duff's device + RelooperRef relooper = RelooperCreate(); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); + RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); + RelooperAddBranch(block0, block1, makeInt32(module, 10), NULL); + RelooperAddBranch(block0, block2, NULL, NULL); + RelooperAddBranch(block1, block2, NULL, NULL); + RelooperAddBranch(block2, block1, NULL, NULL); + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 3, module); // use $3 as the helper var + BinaryenType localTypes[] = { BinaryenInt32(), BinaryenInt32(), BinaryenInt64(), BinaryenInt32(), BinaryenFloat32(), BinaryenFloat64(), BinaryenInt32() }; + BinaryenFunctionRef sinker = BinaryenAddFunction(module, "duffs-device", v, localTypes, sizeof(localTypes)/sizeof(BinaryenType), body); + } + + BinaryenFunctionTypeRef i = BinaryenAddFunctionType(module, "i", BinaryenInt32(), NULL, 0); + + { // return in a block + RelooperRef relooper = RelooperCreate(); + BinaryenExpressionRef listList[] = { makeCallCheck(module, 42), BinaryenReturn(module, makeInt32(module, 1337)) }; + BinaryenExpressionRef list = BinaryenBlock(module, "the-list", listList, 2, -1); + RelooperBlockRef block = RelooperAddBlock(relooper, list); + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block, 0, module); + BinaryenFunctionRef sinker = BinaryenAddFunction(module, "return", i, localTypes, 1, body); + } + + printf("raw:\n"); + BinaryenModulePrint(module); + + assert(BinaryenModuleValidate(module)); + + BinaryenModuleOptimize(module); + + assert(BinaryenModuleValidate(module)); + + printf("optimized:\n"); + BinaryenModulePrint(module); + + BinaryenModuleDispose(module); +} + +void test_binaries() { + char buffer[1024]; + size_t size; + + { // create a module and write it to binary + BinaryenModuleRef module = BinaryenModuleCreate(); + BinaryenType params[2] = { BinaryenInt32(), BinaryenInt32() }; + BinaryenFunctionTypeRef iii = BinaryenAddFunctionType(module, "iii", BinaryenInt32(), params, 2); + BinaryenExpressionRef x = BinaryenGetLocal(module, 0, BinaryenInt32()), + y = BinaryenGetLocal(module, 1, BinaryenInt32()); + BinaryenExpressionRef add = BinaryenBinary(module, BinaryenAddInt32(), x, y); + BinaryenFunctionRef adder = BinaryenAddFunction(module, "adder", iii, NULL, 0, add); + size = BinaryenModuleWrite(module, buffer, 1024); // write out the module + BinaryenModuleDispose(module); + } + + assert(size > 0); + assert(size < 512); // this is a tiny module + + // read the module from the binary + BinaryenModuleRef module = BinaryenModuleRead(buffer, size); + + // validate, print, and free + assert(BinaryenModuleValidate(module)); + printf("module loaded from binary form:\n"); + BinaryenModulePrint(module); + BinaryenModuleDispose(module); +} + +void test_interpret() { + // create a simple module with a start method that prints a number, and interpret it, printing that number. + BinaryenModuleRef module = BinaryenModuleCreate(); + + BinaryenType iparams[2] = { BinaryenInt32() }; + BinaryenFunctionTypeRef vi = BinaryenAddFunctionType(module, "vi", BinaryenNone(), iparams, 1); + BinaryenAddImport(module, "print-i32", "spectest", "print", vi); + + BinaryenFunctionTypeRef v = BinaryenAddFunctionType(module, "v", BinaryenNone(), NULL, 0); + BinaryenExpressionRef callOperands[] = { makeInt32(module, 1234) }; + BinaryenExpressionRef call = BinaryenCallImport(module, "print-i32", callOperands, 1, BinaryenNone()); + BinaryenFunctionRef starter = BinaryenAddFunction(module, "starter", v, NULL, 0, call); + BinaryenSetStart(module, starter); + + BinaryenModulePrint(module); + assert(BinaryenModuleValidate(module)); + BinaryenModuleInterpret(module); + BinaryenModuleDispose(module); +} + +void test_nonvalid() { + // create a module that fails to validate + { + BinaryenModuleRef module = BinaryenModuleCreate(); + + BinaryenFunctionTypeRef v = BinaryenAddFunctionType(module, "v", BinaryenNone(), NULL, 0); + BinaryenType localTypes[] = { BinaryenInt32() }; + BinaryenFunctionRef func = BinaryenAddFunction(module, "func", v, localTypes, 1, + BinaryenSetLocal(module, 0, makeInt64(module, 1234)) // wrong type! + ); + + BinaryenModulePrint(module); + printf("validation: %d\n", BinaryenModuleValidate(module)); + + BinaryenModuleDispose(module); + } + // validation failure due to duplicate nodes + { + BinaryenModuleRef module = BinaryenModuleCreate(); + + BinaryenFunctionTypeRef v = BinaryenAddFunctionType(module, "i", BinaryenInt32(), NULL, 0); + BinaryenType localTypes[] = { }; + BinaryenExpressionRef num = makeInt32(module, 1234); + BinaryenFunctionRef func = BinaryenAddFunction(module, "func", v, NULL, 0, + BinaryenBinary(module, BinaryenInt32(), num, num) // incorrectly use num twice + ); + + BinaryenModulePrint(module); + printf("validation: %d\n", BinaryenModuleValidate(module)); + + BinaryenModuleDispose(module); + } +} + +void test_tracing() { + BinaryenSetAPITracing(1); + test_core(); + test_relooper(); + BinaryenSetAPITracing(0); +} + +int main() { + test_types(); + test_core(); + test_unreachable(); + test_relooper(); + test_binaries(); + test_interpret(); + test_nonvalid(); + test_tracing(); + + return 0; +} diff --git a/src/binaryen/test/example/c-api-kitchen-sink.txt b/src/binaryen/test/example/c-api-kitchen-sink.txt new file mode 100644 index 0000000000..f33be1abd2 --- /dev/null +++ b/src/binaryen/test/example/c-api-kitchen-sink.txt @@ -0,0 +1,2923 @@ +BinaryenNone: 0 +BinaryenInt32: 1 +BinaryenInt64: 2 +BinaryenFloat32: 3 +BinaryenFloat64: 4 +(f32.neg + (f32.const -33.61199951171875) +) +(module + (type $iiIfF (func (param i32 i64 f32 f64) (result i32))) + (type $fiF (func (param i32 f64) (result f32))) + (type $v (func)) + (type $3 (func)) + (import "module" "base" (func $an-imported (param i32 f64) (result f32))) + (global $a-global i32 (i32.const 7)) + (global $a-mutable-global (mut f32) (f32.const 7.5)) + (table 1 1 anyfunc) + (elem (i32.const 0) "$kitchen()sinker") + (memory $0 1 256) + (data (i32.const 10) "hello, world") + (export "kitchen_sinker" (func "$kitchen()sinker")) + (export "mem" (memory $0)) + (start $starter) + (func "$kitchen()sinker" (; 1 ;) (type $iiIfF) (param $0 i32) (param $1 i64) (param $2 f32) (param $3 f64) (result i32) + (local $4 i32) + (block $the-body (result i32) + (block $the-nothing + (drop + (block $the-value (result i32) + (drop + (i32.clz + (i32.const -10) + ) + ) + (drop + (i64.ctz + (i64.const -22) + ) + ) + (drop + (i32.popcnt + (i32.const -10) + ) + ) + (drop + (f32.neg + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.abs + (f64.const -9005.841) + ) + ) + (drop + (f32.ceil + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.floor + (f64.const -9005.841) + ) + ) + (drop + (f32.trunc + (f32.const -33.61199951171875) + ) + ) + (drop + (f32.nearest + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.sqrt + (f64.const -9005.841) + ) + ) + (drop + (i32.eqz + (i32.const -10) + ) + ) + (drop + (i64.extend_s/i32 + (i32.const -10) + ) + ) + (drop + (i64.extend_u/i32 + (i32.const -10) + ) + ) + (drop + (i32.wrap/i64 + (i64.const -22) + ) + ) + (drop + (i32.trunc_s/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.trunc_s/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i32.trunc_u/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.trunc_u/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i32.trunc_s/f64 + (f64.const -9005.841) + ) + ) + (drop + (i64.trunc_s/f64 + (f64.const -9005.841) + ) + ) + (drop + (i32.trunc_u/f64 + (f64.const -9005.841) + ) + ) + (drop + (i64.trunc_u/f64 + (f64.const -9005.841) + ) + ) + (drop + (i32.reinterpret/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.reinterpret/f64 + (f64.const -9005.841) + ) + ) + (drop + (f32.convert_s/i32 + (i32.const -10) + ) + ) + (drop + (f64.convert_s/i32 + (i32.const -10) + ) + ) + (drop + (f32.convert_u/i32 + (i32.const -10) + ) + ) + (drop + (f64.convert_u/i32 + (i32.const -10) + ) + ) + (drop + (f32.convert_s/i64 + (i64.const -22) + ) + ) + (drop + (f64.convert_s/i64 + (i64.const -22) + ) + ) + (drop + (f32.convert_u/i64 + (i64.const -22) + ) + ) + (drop + (f64.convert_u/i64 + (i64.const -22) + ) + ) + (drop + (f64.promote/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (f32.demote/f64 + (f64.const -9005.841) + ) + ) + (drop + (f32.reinterpret/i32 + (i32.const -10) + ) + ) + (drop + (f64.reinterpret/i64 + (i64.const -22) + ) + ) + (drop + (i32.add + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (f64.sub + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (i32.div_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.div_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i64.rem_s + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.rem_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.and + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.or + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.xor + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.shl + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i64.shr_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.shr_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.rotl + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.rotr + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (f32.div + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.copysign + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (f32.min + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.max + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (i32.eq + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (f32.ne + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (i32.lt_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.lt_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i64.le_s + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.le_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.gt_s + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.gt_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.ge_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.ge_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (f32.lt + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.le + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (f64.gt + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (f32.ge + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (block + ) + (if + (i32.const 1) + (drop + (i32.const 2) + ) + (drop + (i32.const 3) + ) + ) + (if + (i32.const 4) + (drop + (i32.const 5) + ) + ) + (drop + (loop $in (result i32) + (i32.const 0) + ) + ) + (drop + (loop (result i32) + (i32.const 0) + ) + ) + (drop + (br_if $the-value + (i32.const 1) + (i32.const 0) + ) + ) + (br_if $the-nothing + (i32.const 2) + ) + (br $the-value + (i32.const 3) + ) + (br $the-nothing) + (br_table $the-value $the-value + (i32.const 1) + (i32.const 0) + ) + (br_table $the-nothing $the-nothing + (i32.const 2) + ) + (drop + (i32.eqz + (call "$kitchen()sinker" + (i32.const 13) + (i64.const 37) + (f32.const 1.2999999523162842) + (f64.const 3.7) + ) + ) + ) + (drop + (i32.eqz + (i32.trunc_s/f32 + (call $an-imported + (i32.const 13) + (f64.const 3.7) + ) + ) + ) + ) + (drop + (i32.eqz + (call_indirect (type $iiIfF) + (i32.const 13) + (i64.const 37) + (f32.const 1.2999999523162842) + (f64.const 3.7) + (i32.const 2449) + ) + ) + ) + (drop + (get_local $0) + ) + (set_local $0 + (i32.const 101) + ) + (drop + (tee_local $0 + (i32.const 102) + ) + ) + (drop + (i32.load + (i32.const 1) + ) + ) + (drop + (i64.load16_s offset=2 align=1 + (i32.const 8) + ) + ) + (drop + (f32.load + (i32.const 2) + ) + ) + (drop + (f64.load offset=2 + (i32.const 9) + ) + ) + (i32.store + (i32.const 10) + (i32.const 11) + ) + (i64.store offset=2 align=4 + (i32.const 110) + (i64.const 111) + ) + (drop + (select + (i32.const 3) + (i32.const 5) + (i32.const 1) + ) + ) + (return + (i32.const 1337) + ) + (nop) + (unreachable) + ) + ) + ) + (i32.const 42) + ) + ) + (func $starter (; 2 ;) (type $v) + (nop) + ) +) +(module + (type $i (func (result i32))) + (type $I (func (result i64))) + (memory $0 0) + (func $unreachable-fn (; 0 ;) (type $i) (result i32) + (call_indirect (type $I) + (unreachable) + ) + ) +) +raw: +(module + (type $v (func)) + (type $vi (func (param i32))) + (type $i (func (result i32))) + (import "module" "check" (func $check (param i32))) + (memory $0 0) + (func $just-one-block (; 1 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 1337) + ) + ) + (func $two-blocks (; 2 ;) (type $v) + (local $0 i32) + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + ) + ) + (func $two-blocks-plus-code (; 3 ;) (type $v) + (local $0 i32) + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (drop + (i32.const 77) + ) + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + ) + ) + (func $loop (; 4 ;) (type $v) + (local $0 i32) + (loop $shape$0$continue + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + (block + (br $shape$0$continue) + ) + ) + ) + ) + (func $loop-plus-code (; 5 ;) (type $v) + (local $0 i32) + (loop $shape$0$continue + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (drop + (i32.const 33) + ) + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + (block + (drop + (i32.const -66) + ) + (br $shape$0$continue) + ) + ) + ) + ) + (func $split (; 6 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call $check + (i32.const 1) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + ) + (func $split-plus-code (; 7 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (drop + (i32.const 10) + ) + (block + (call $check + (i32.const 1) + ) + ) + ) + (block + (drop + (i32.const 20) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + ) + ) + (func $if (; 8 ;) (type $v) + (local $0 i32) + (block $block$3$break + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call $check + (i32.const 1) + ) + (block + (br $block$3$break) + ) + ) + (br $block$3$break) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (func $if-plus-code (; 9 ;) (type $v) + (local $0 i32) + (block $block$3$break + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (drop + (i32.const -1) + ) + (block + (call $check + (i32.const 1) + ) + (block + (drop + (i32.const -3) + ) + (br $block$3$break) + ) + ) + ) + (block + (drop + (i32.const -2) + ) + (br $block$3$break) + ) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (func $if-else (; 10 ;) (type $v) + (local $0 i32) + (block $block$4$break + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call $check + (i32.const 1) + ) + (block + (br $block$4$break) + ) + ) + (block + (call $check + (i32.const 2) + ) + (block + (br $block$4$break) + ) + ) + ) + ) + (block + (call $check + (i32.const 3) + ) + ) + ) + (func $loop-tail (; 11 ;) (type $v) + (local $0 i32) + (block $block$3$break + (loop $shape$0$continue + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + (if + (i32.const 10) + (br $shape$0$continue) + (br $block$3$break) + ) + ) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (func $nontrivial-loop-plus-phi-to-head (; 12 ;) (type $v) + (local $0 i32) + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (drop + (i32.const 10) + ) + (br $block$2$break) + ) + ) + (block + (block $block$7$break + (block $block$4$break + (loop $shape$1$continue + (block $block$3$break + (call $check + (i32.const 1) + ) + (if + (i32.const -2) + (br $block$3$break) + (block + (drop + (i32.const 20) + ) + (br $block$7$break) + ) + ) + ) + (block + (call $check + (i32.const 2) + ) + (if + (i32.const -6) + (br $block$4$break) + (block + (drop + (i32.const 30) + ) + (br $shape$1$continue) + ) + ) + ) + ) + ) + (block + (block $block$6$break + (call $check + (i32.const 3) + ) + (if + (i32.const -10) + (block + (call $check + (i32.const 4) + ) + (block + (br $block$6$break) + ) + ) + (br $block$6$break) + ) + ) + (block + (call $check + (i32.const 5) + ) + (block + (drop + (i32.const 40) + ) + (br $block$7$break) + ) + ) + ) + ) + (block + (call $check + (i32.const 6) + ) + ) + ) + ) + (func $switch (; 13 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 0) + ) + (block $switch$1$leave + (block $switch$1$default + (block $switch$1$case$3 + (block $switch$1$case$2 + (br_table $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$3 $switch$1$case$2 $switch$1$default + (i32.const -99) + ) + ) + (block + (block + (call $check + (i32.const 1) + ) + ) + ) + (br $switch$1$leave) + ) + (block + (drop + (i32.const 55) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (br $switch$1$leave) + ) + (block + (block + (call $check + (i32.const 3) + ) + ) + ) + (br $switch$1$leave) + ) + ) + (func $duffs-device (; 14 ;) (type $v) + (local $0 i32) + (local $1 i32) + (local $2 i64) + (local $3 i32) + (local $4 f32) + (local $5 f64) + (local $6 i32) + (block + (block $block$3$break + (block $block$2$break + (call $check + (i32.const 0) + ) + (if + (i32.const 10) + (block + (set_local $3 + (i32.const 2) + ) + (br $block$2$break) + ) + (block + (set_local $3 + (i32.const 3) + ) + (br $block$3$break) + ) + ) + ) + ) + ) + (loop $shape$1$continue + (if + (i32.eq + (get_local $3) + (i32.const 2) + ) + (block + (set_local $3 + (i32.const 0) + ) + (call $check + (i32.const 1) + ) + (block + (set_local $3 + (i32.const 3) + ) + (br $shape$1$continue) + ) + ) + (if + (i32.eq + (get_local $3) + (i32.const 3) + ) + (block + (set_local $3 + (i32.const 0) + ) + (call $check + (i32.const 2) + ) + (block + (set_local $3 + (i32.const 2) + ) + (br $shape$1$continue) + ) + ) + ) + ) + ) + ) + (func $return (; 15 ;) (type $i) (result i32) + (local $0 i32) + (block $the-list + (call $check + (i32.const 42) + ) + (return + (i32.const 1337) + ) + ) + ) +) +optimized: +(module + (memory $0 0) +) +module loaded from binary form: +(module + (type $0 (func (param i32 i32) (result i32))) + (memory $0 0) + (func $adder (; 0 ;) (type $0) (param $var$0 i32) (param $var$1 i32) (result i32) + (i32.add + (get_local $var$0) + (get_local $var$1) + ) + ) +) +(module + (type $vi (func (param i32))) + (type $v (func)) + (import "spectest" "print" (func $print-i32 (param i32))) + (memory $0 0) + (start $starter) + (func $starter (; 1 ;) (type $v) + (call $print-i32 + (i32.const 1234) + ) + ) +) +(i32.const 1234) +(module + (type $v (func)) + (memory $0 0) + (func $func (; 0 ;) (type $v) + (local $0 i32) + (set_local $0 + (i64.const 1234) + ) + ) +) +validation: 0 +(module + (type $i (func (result i32))) + (memory $0 0) + (func $func (; 0 ;) (type $i) (result i32) + (i32.sub + (i32.const 1234) + (i32.const 1234) + ) + ) +) +validation: 0 +// beginning a Binaryen API trace +#include +#include +#include "src/binaryen-c.h" +int main() { + std::map functionTypes; + std::map expressions; + std::map functions; + std::map relooperBlocks; + BinaryenModuleRef the_module = NULL; + RelooperRef the_relooper = NULL; + the_module = BinaryenModuleCreate(); + expressions[size_t(NULL)] = BinaryenExpressionRef(NULL); + expressions[1] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + expressions[2] = BinaryenConst(the_module, BinaryenLiteralInt64(2)); + expressions[3] = BinaryenConst(the_module, BinaryenLiteralFloat32(3.14)); + expressions[4] = BinaryenConst(the_module, BinaryenLiteralFloat64(2.1828)); + expressions[5] = BinaryenConst(the_module, BinaryenLiteralFloat32(NAN)); + expressions[6] = BinaryenConst(the_module, BinaryenLiteralFloat64(NAN)); + expressions[7] = BinaryenConst(the_module, BinaryenLiteralInt32(13)); + expressions[8] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7)); + expressions[9] = BinaryenConst(the_module, BinaryenLiteralInt32(13)); + expressions[10] = BinaryenConst(the_module, BinaryenLiteralInt64(37)); + expressions[11] = BinaryenConst(the_module, BinaryenLiteralFloat32(1.3)); + expressions[12] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7)); + expressions[13] = BinaryenConst(the_module, BinaryenLiteralInt32(13)); + expressions[14] = BinaryenConst(the_module, BinaryenLiteralInt64(37)); + expressions[15] = BinaryenConst(the_module, BinaryenLiteralFloat32(1.3)); + expressions[16] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7)); + { + BinaryenType paramTypes[] = { 1, 2, 3, 4 }; + functionTypes[0] = BinaryenAddFunctionType(the_module, "iiIfF", 1, paramTypes, 4); + } + expressions[17] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + expressions[18] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + expressions[19] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + expressions[20] = BinaryenConst(the_module, BinaryenLiteralInt32(4)); + expressions[21] = BinaryenConst(the_module, BinaryenLiteralInt32(5)); + expressions[22] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[23] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + expressions[24] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[25] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + expressions[26] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + expressions[27] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + expressions[28] = BinaryenConst(the_module, BinaryenLiteralInt32(5)); + expressions[29] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + expressions[30] = BinaryenConst(the_module, BinaryenLiteralInt32(11)); + expressions[31] = BinaryenConst(the_module, BinaryenLiteralInt32(110)); + expressions[32] = BinaryenConst(the_module, BinaryenLiteralInt64(111)); + expressions[33] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[34] = BinaryenUnary(the_module, 0, expressions[33]); + expressions[35] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[36] = BinaryenUnary(the_module, 3, expressions[35]); + expressions[37] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[38] = BinaryenUnary(the_module, 4, expressions[37]); + expressions[39] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[40] = BinaryenUnary(the_module, 6, expressions[39]); + expressions[41] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[42] = BinaryenUnary(the_module, 9, expressions[41]); + expressions[43] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[44] = BinaryenUnary(the_module, 10, expressions[43]); + expressions[45] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[46] = BinaryenUnary(the_module, 13, expressions[45]); + expressions[47] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[48] = BinaryenUnary(the_module, 14, expressions[47]); + expressions[49] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[50] = BinaryenUnary(the_module, 16, expressions[49]); + expressions[51] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[52] = BinaryenUnary(the_module, 19, expressions[51]); + expressions[53] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[54] = BinaryenUnary(the_module, 20, expressions[53]); + expressions[55] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[56] = BinaryenUnary(the_module, 22, expressions[55]); + expressions[57] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[58] = BinaryenUnary(the_module, 23, expressions[57]); + expressions[59] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[60] = BinaryenUnary(the_module, 24, expressions[59]); + expressions[61] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[62] = BinaryenUnary(the_module, 25, expressions[61]); + expressions[63] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[64] = BinaryenUnary(the_module, 26, expressions[63]); + expressions[65] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[66] = BinaryenUnary(the_module, 27, expressions[65]); + expressions[67] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[68] = BinaryenUnary(the_module, 28, expressions[67]); + expressions[69] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[70] = BinaryenUnary(the_module, 29, expressions[69]); + expressions[71] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[72] = BinaryenUnary(the_module, 30, expressions[71]); + expressions[73] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[74] = BinaryenUnary(the_module, 31, expressions[73]); + expressions[75] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[76] = BinaryenUnary(the_module, 32, expressions[75]); + expressions[77] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[78] = BinaryenUnary(the_module, 33, expressions[77]); + expressions[79] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[80] = BinaryenUnary(the_module, 34, expressions[79]); + expressions[81] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[82] = BinaryenUnary(the_module, 35, expressions[81]); + expressions[83] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[84] = BinaryenUnary(the_module, 36, expressions[83]); + expressions[85] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[86] = BinaryenUnary(the_module, 37, expressions[85]); + expressions[87] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[88] = BinaryenUnary(the_module, 38, expressions[87]); + expressions[89] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[90] = BinaryenUnary(the_module, 39, expressions[89]); + expressions[91] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[92] = BinaryenUnary(the_module, 40, expressions[91]); + expressions[93] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[94] = BinaryenUnary(the_module, 41, expressions[93]); + expressions[95] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[96] = BinaryenUnary(the_module, 42, expressions[95]); + expressions[97] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[98] = BinaryenUnary(the_module, 43, expressions[97]); + expressions[99] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[100] = BinaryenUnary(the_module, 44, expressions[99]); + expressions[101] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[102] = BinaryenUnary(the_module, 45, expressions[101]); + expressions[103] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[104] = BinaryenUnary(the_module, 46, expressions[103]); + expressions[105] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[106] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[107] = BinaryenBinary(the_module, 0, expressions[106], expressions[105]); + expressions[108] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33)); + expressions[109] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[110] = BinaryenBinary(the_module, 64, expressions[109], expressions[108]); + expressions[111] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[112] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[113] = BinaryenBinary(the_module, 3, expressions[112], expressions[111]); + expressions[114] = BinaryenConst(the_module, BinaryenLiteralInt64(-23)); + expressions[115] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[116] = BinaryenBinary(the_module, 29, expressions[115], expressions[114]); + expressions[117] = BinaryenConst(the_module, BinaryenLiteralInt64(-23)); + expressions[118] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[119] = BinaryenBinary(the_module, 30, expressions[118], expressions[117]); + expressions[120] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[121] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[122] = BinaryenBinary(the_module, 6, expressions[121], expressions[120]); + expressions[123] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[124] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[125] = BinaryenBinary(the_module, 7, expressions[124], expressions[123]); + expressions[126] = BinaryenConst(the_module, BinaryenLiteralInt64(-23)); + expressions[127] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[128] = BinaryenBinary(the_module, 33, expressions[127], expressions[126]); + expressions[129] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[130] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[131] = BinaryenBinary(the_module, 9, expressions[130], expressions[129]); + expressions[132] = BinaryenConst(the_module, BinaryenLiteralInt64(-23)); + expressions[133] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[134] = BinaryenBinary(the_module, 35, expressions[133], expressions[132]); + expressions[135] = BinaryenConst(the_module, BinaryenLiteralInt64(-23)); + expressions[136] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[137] = BinaryenBinary(the_module, 36, expressions[136], expressions[135]); + expressions[138] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[139] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[140] = BinaryenBinary(the_module, 12, expressions[139], expressions[138]); + expressions[141] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[142] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[143] = BinaryenBinary(the_module, 13, expressions[142], expressions[141]); + expressions[144] = BinaryenConst(the_module, BinaryenLiteralInt64(-23)); + expressions[145] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[146] = BinaryenBinary(the_module, 39, expressions[145], expressions[144]); + expressions[147] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5)); + expressions[148] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[149] = BinaryenBinary(the_module, 53, expressions[148], expressions[147]); + expressions[150] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33)); + expressions[151] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[152] = BinaryenBinary(the_module, 67, expressions[151], expressions[150]); + expressions[153] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5)); + expressions[154] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[155] = BinaryenBinary(the_module, 55, expressions[154], expressions[153]); + expressions[156] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33)); + expressions[157] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[158] = BinaryenBinary(the_module, 69, expressions[157], expressions[156]); + expressions[159] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[160] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[161] = BinaryenBinary(the_module, 15, expressions[160], expressions[159]); + expressions[162] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5)); + expressions[163] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[164] = BinaryenBinary(the_module, 58, expressions[163], expressions[162]); + expressions[165] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[166] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[167] = BinaryenBinary(the_module, 17, expressions[166], expressions[165]); + expressions[168] = BinaryenConst(the_module, BinaryenLiteralInt64(-23)); + expressions[169] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[170] = BinaryenBinary(the_module, 43, expressions[169], expressions[168]); + expressions[171] = BinaryenConst(the_module, BinaryenLiteralInt64(-23)); + expressions[172] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[173] = BinaryenBinary(the_module, 44, expressions[172], expressions[171]); + expressions[174] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[175] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[176] = BinaryenBinary(the_module, 20, expressions[175], expressions[174]); + expressions[177] = BinaryenConst(the_module, BinaryenLiteralInt64(-23)); + expressions[178] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[179] = BinaryenBinary(the_module, 46, expressions[178], expressions[177]); + expressions[180] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[181] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[182] = BinaryenBinary(the_module, 22, expressions[181], expressions[180]); + expressions[183] = BinaryenConst(the_module, BinaryenLiteralInt32(-11)); + expressions[184] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + expressions[185] = BinaryenBinary(the_module, 23, expressions[184], expressions[183]); + expressions[186] = BinaryenConst(the_module, BinaryenLiteralInt64(-23)); + expressions[187] = BinaryenConst(the_module, BinaryenLiteralInt64(-22)); + expressions[188] = BinaryenBinary(the_module, 49, expressions[187], expressions[186]); + expressions[189] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5)); + expressions[190] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[191] = BinaryenBinary(the_module, 59, expressions[190], expressions[189]); + expressions[192] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33)); + expressions[193] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[194] = BinaryenBinary(the_module, 73, expressions[193], expressions[192]); + expressions[195] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33)); + expressions[196] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84)); + expressions[197] = BinaryenBinary(the_module, 74, expressions[196], expressions[195]); + expressions[198] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5)); + expressions[199] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612)); + expressions[200] = BinaryenBinary(the_module, 62, expressions[199], expressions[198]); + { + BinaryenExpressionRef children[] = { 0 }; + expressions[201] = BinaryenBlock(the_module, NULL, children, 0, BinaryenUndefined()); + } + expressions[202] = BinaryenIf(the_module, expressions[17], expressions[18], expressions[19]); + expressions[203] = BinaryenIf(the_module, expressions[20], expressions[21], expressions[0]); + expressions[204] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[205] = BinaryenLoop(the_module, "in", expressions[204]); + expressions[206] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[207] = BinaryenLoop(the_module, NULL, expressions[206]); + expressions[208] = BinaryenBreak(the_module, "the-value", expressions[22], expressions[23]); + expressions[209] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + expressions[210] = BinaryenBreak(the_module, "the-nothing", expressions[209], expressions[0]); + expressions[211] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + expressions[212] = BinaryenBreak(the_module, "the-value", expressions[0], expressions[211]); + expressions[213] = BinaryenBreak(the_module, "the-nothing", expressions[0], expressions[0]); + { + const char* names[] = { "the-value" }; + expressions[214] = BinaryenSwitch(the_module, names, 1, "the-value", expressions[24], expressions[25]); + } + expressions[215] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + const char* names[] = { "the-nothing" }; + expressions[216] = BinaryenSwitch(the_module, names, 1, "the-nothing", expressions[215], expressions[0]); + } + { + BinaryenExpressionRef operands[] = { expressions[9], expressions[10], expressions[11], expressions[12] }; + expressions[217] = BinaryenCall(the_module, "kitchen()sinker", operands, 4, 1); + } + expressions[218] = BinaryenUnary(the_module, 20, expressions[217]); + { + BinaryenExpressionRef operands[] = { expressions[7], expressions[8] }; + expressions[219] = BinaryenCallImport(the_module, "an-imported", operands, 2, 3); + } + expressions[220] = BinaryenUnary(the_module, 25, expressions[219]); + expressions[221] = BinaryenUnary(the_module, 20, expressions[220]); + expressions[222] = BinaryenConst(the_module, BinaryenLiteralInt32(2449)); + { + BinaryenExpressionRef operands[] = { expressions[13], expressions[14], expressions[15], expressions[16] }; + expressions[223] = BinaryenCallIndirect(the_module, expressions[222], operands, 4, "iiIfF"); + } + expressions[224] = BinaryenUnary(the_module, 20, expressions[223]); + expressions[225] = BinaryenGetLocal(the_module, 0, 1); + expressions[226] = BinaryenDrop(the_module, expressions[225]); + expressions[227] = BinaryenConst(the_module, BinaryenLiteralInt32(101)); + expressions[228] = BinaryenSetLocal(the_module, 0, expressions[227]); + expressions[229] = BinaryenConst(the_module, BinaryenLiteralInt32(102)); + expressions[230] = BinaryenTeeLocal(the_module, 0, expressions[229]); + expressions[231] = BinaryenDrop(the_module, expressions[230]); + expressions[232] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + expressions[233] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[232]); + expressions[234] = BinaryenConst(the_module, BinaryenLiteralInt32(8)); + expressions[235] = BinaryenLoad(the_module, 2, 1, 2, 1, 2, expressions[234]); + expressions[236] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + expressions[237] = BinaryenLoad(the_module, 4, 0, 0, 0, 3, expressions[236]); + expressions[238] = BinaryenConst(the_module, BinaryenLiteralInt32(9)); + expressions[239] = BinaryenLoad(the_module, 8, 0, 2, 8, 4, expressions[238]); + expressions[240] = BinaryenStore(the_module, 4, 0, 0, expressions[29], expressions[30], 1); + expressions[241] = BinaryenStore(the_module, 8, 2, 4, expressions[31], expressions[32], 2); + expressions[242] = BinaryenSelect(the_module, expressions[26], expressions[27], expressions[28]); + expressions[243] = BinaryenConst(the_module, BinaryenLiteralInt32(1337)); + expressions[244] = BinaryenReturn(the_module, expressions[243]); + expressions[245] = BinaryenNop(the_module); + expressions[246] = BinaryenUnreachable(the_module); + BinaryenExpressionPrint(expressions[40]); +(f32.neg + (f32.const -33.61199951171875) +) + { + BinaryenExpressionRef children[] = { expressions[34], expressions[36], expressions[38], expressions[40], expressions[42], expressions[44], expressions[46], expressions[48], expressions[50], expressions[52], expressions[54], expressions[56], expressions[58], expressions[60], expressions[62], expressions[64], expressions[66], expressions[68], expressions[70], expressions[72], expressions[74], expressions[76], expressions[78], expressions[80], expressions[82], expressions[84], expressions[86], expressions[88], expressions[90], expressions[92], expressions[94], expressions[96], expressions[98], expressions[100], expressions[102], expressions[104], expressions[107], expressions[110], expressions[113], expressions[116], expressions[119], expressions[122], expressions[125], expressions[128], expressions[131], expressions[134], expressions[137], expressions[140], expressions[143], expressions[146], expressions[149], expressions[152], expressions[155], expressions[158], expressions[161], expressions[164], expressions[167], expressions[170], expressions[173], expressions[176], expressions[179], expressions[182], expressions[185], expressions[188], expressions[191], expressions[194], expressions[197], expressions[200], expressions[201], expressions[202], expressions[203], expressions[205], expressions[207], expressions[208], expressions[210], expressions[212], expressions[213], expressions[214], expressions[216], expressions[218], expressions[221], expressions[224], expressions[226], expressions[228], expressions[231], expressions[233], expressions[235], expressions[237], expressions[239], expressions[240], expressions[241], expressions[242], expressions[244], expressions[245], expressions[246] }; + expressions[247] = BinaryenBlock(the_module, "the-value", children, 95, BinaryenUndefined()); + } + expressions[248] = BinaryenDrop(the_module, expressions[247]); + { + BinaryenExpressionRef children[] = { expressions[248] }; + expressions[249] = BinaryenBlock(the_module, "the-nothing", children, 1, BinaryenUndefined()); + } + expressions[250] = BinaryenConst(the_module, BinaryenLiteralInt32(42)); + { + BinaryenExpressionRef children[] = { expressions[249], expressions[250] }; + expressions[251] = BinaryenBlock(the_module, "the-body", children, 2, BinaryenUndefined()); + } + { + BinaryenType varTypes[] = { 1 }; + functions[0] = BinaryenAddFunction(the_module, "kitchen()sinker", functionTypes[0], varTypes, 1, expressions[251]); + } + expressions[252] = BinaryenConst(the_module, BinaryenLiteralInt32(7)); + BinaryenAddGlobal(the_module, "a-global", 1, 0, expressions[252]); + expressions[253] = BinaryenConst(the_module, BinaryenLiteralFloat32(7.5)); + BinaryenAddGlobal(the_module, "a-mutable-global", 3, 1, expressions[253]); + { + BinaryenType paramTypes[] = { 1, 4 }; + functionTypes[1] = BinaryenAddFunctionType(the_module, "fiF", 3, paramTypes, 2); + } + BinaryenAddImport(the_module, "an-imported", "module", "base", functionTypes[1]); + BinaryenAddExport(the_module, "kitchen()sinker", "kitchen_sinker"); + { + BinaryenFunctionRef funcs[] = { functions[0] }; + BinaryenSetFunctionTable(the_module, funcs, 1); + } + expressions[254] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + { + const char segment0[] = { 104, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100 }; + const char* segments[] = { segment0 }; + BinaryenExpressionRef segmentOffsets[] = { expressions[254] }; + BinaryenIndex segmentSizes[] = { 12 }; + BinaryenSetMemory(the_module, 1, 256, "mem", segments, segmentOffsets, segmentSizes, 1); + } + { + BinaryenType paramTypes[] = { 0 }; + functionTypes[2] = BinaryenAddFunctionType(the_module, "v", 0, paramTypes, 0); + } + expressions[255] = BinaryenNop(the_module); + { + BinaryenType varTypes[] = { 0 }; + functions[1] = BinaryenAddFunction(the_module, "starter", functionTypes[2], varTypes, 0, expressions[255]); + } + BinaryenSetStart(the_module, functions[1]); + { + BinaryenType paramTypes[] = { 0 }; + functionTypes[3] = BinaryenAddFunctionType(the_module, NULL, 0, paramTypes, 0); + } + BinaryenModuleAutoDrop(the_module); + BinaryenModuleValidate(the_module); + BinaryenModulePrint(the_module); +(module + (type $iiIfF (func (param i32 i64 f32 f64) (result i32))) + (type $fiF (func (param i32 f64) (result f32))) + (type $v (func)) + (type $3 (func)) + (import "module" "base" (func $an-imported (param i32 f64) (result f32))) + (global $a-global i32 (i32.const 7)) + (global $a-mutable-global (mut f32) (f32.const 7.5)) + (table 1 1 anyfunc) + (elem (i32.const 0) "$kitchen()sinker") + (memory $0 1 256) + (data (i32.const 10) "hello, world") + (export "kitchen_sinker" (func "$kitchen()sinker")) + (export "mem" (memory $0)) + (start $starter) + (func "$kitchen()sinker" (; 1 ;) (type $iiIfF) (param $0 i32) (param $1 i64) (param $2 f32) (param $3 f64) (result i32) + (local $4 i32) + (block $the-body (result i32) + (block $the-nothing + (drop + (block $the-value (result i32) + (drop + (i32.clz + (i32.const -10) + ) + ) + (drop + (i64.ctz + (i64.const -22) + ) + ) + (drop + (i32.popcnt + (i32.const -10) + ) + ) + (drop + (f32.neg + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.abs + (f64.const -9005.841) + ) + ) + (drop + (f32.ceil + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.floor + (f64.const -9005.841) + ) + ) + (drop + (f32.trunc + (f32.const -33.61199951171875) + ) + ) + (drop + (f32.nearest + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.sqrt + (f64.const -9005.841) + ) + ) + (drop + (i32.eqz + (i32.const -10) + ) + ) + (drop + (i64.extend_s/i32 + (i32.const -10) + ) + ) + (drop + (i64.extend_u/i32 + (i32.const -10) + ) + ) + (drop + (i32.wrap/i64 + (i64.const -22) + ) + ) + (drop + (i32.trunc_s/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.trunc_s/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i32.trunc_u/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.trunc_u/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i32.trunc_s/f64 + (f64.const -9005.841) + ) + ) + (drop + (i64.trunc_s/f64 + (f64.const -9005.841) + ) + ) + (drop + (i32.trunc_u/f64 + (f64.const -9005.841) + ) + ) + (drop + (i64.trunc_u/f64 + (f64.const -9005.841) + ) + ) + (drop + (i32.reinterpret/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.reinterpret/f64 + (f64.const -9005.841) + ) + ) + (drop + (f32.convert_s/i32 + (i32.const -10) + ) + ) + (drop + (f64.convert_s/i32 + (i32.const -10) + ) + ) + (drop + (f32.convert_u/i32 + (i32.const -10) + ) + ) + (drop + (f64.convert_u/i32 + (i32.const -10) + ) + ) + (drop + (f32.convert_s/i64 + (i64.const -22) + ) + ) + (drop + (f64.convert_s/i64 + (i64.const -22) + ) + ) + (drop + (f32.convert_u/i64 + (i64.const -22) + ) + ) + (drop + (f64.convert_u/i64 + (i64.const -22) + ) + ) + (drop + (f64.promote/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (f32.demote/f64 + (f64.const -9005.841) + ) + ) + (drop + (f32.reinterpret/i32 + (i32.const -10) + ) + ) + (drop + (f64.reinterpret/i64 + (i64.const -22) + ) + ) + (drop + (i32.add + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (f64.sub + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (i32.div_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.div_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i64.rem_s + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.rem_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.and + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.or + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.xor + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.shl + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i64.shr_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.shr_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.rotl + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.rotr + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (f32.div + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.copysign + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (f32.min + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.max + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (i32.eq + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (f32.ne + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (i32.lt_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.lt_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i64.le_s + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.le_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.gt_s + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.gt_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.ge_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.ge_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (f32.lt + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.le + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (f64.gt + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (f32.ge + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (block + ) + (if + (i32.const 1) + (drop + (i32.const 2) + ) + (drop + (i32.const 3) + ) + ) + (if + (i32.const 4) + (drop + (i32.const 5) + ) + ) + (drop + (loop $in (result i32) + (i32.const 0) + ) + ) + (drop + (loop (result i32) + (i32.const 0) + ) + ) + (drop + (br_if $the-value + (i32.const 1) + (i32.const 0) + ) + ) + (br_if $the-nothing + (i32.const 2) + ) + (br $the-value + (i32.const 3) + ) + (br $the-nothing) + (br_table $the-value $the-value + (i32.const 1) + (i32.const 0) + ) + (br_table $the-nothing $the-nothing + (i32.const 2) + ) + (drop + (i32.eqz + (call "$kitchen()sinker" + (i32.const 13) + (i64.const 37) + (f32.const 1.2999999523162842) + (f64.const 3.7) + ) + ) + ) + (drop + (i32.eqz + (i32.trunc_s/f32 + (call $an-imported + (i32.const 13) + (f64.const 3.7) + ) + ) + ) + ) + (drop + (i32.eqz + (call_indirect (type $iiIfF) + (i32.const 13) + (i64.const 37) + (f32.const 1.2999999523162842) + (f64.const 3.7) + (i32.const 2449) + ) + ) + ) + (drop + (get_local $0) + ) + (set_local $0 + (i32.const 101) + ) + (drop + (tee_local $0 + (i32.const 102) + ) + ) + (drop + (i32.load + (i32.const 1) + ) + ) + (drop + (i64.load16_s offset=2 align=1 + (i32.const 8) + ) + ) + (drop + (f32.load + (i32.const 2) + ) + ) + (drop + (f64.load offset=2 + (i32.const 9) + ) + ) + (i32.store + (i32.const 10) + (i32.const 11) + ) + (i64.store offset=2 align=4 + (i32.const 110) + (i64.const 111) + ) + (drop + (select + (i32.const 3) + (i32.const 5) + (i32.const 1) + ) + ) + (return + (i32.const 1337) + ) + (nop) + (unreachable) + ) + ) + ) + (i32.const 42) + ) + ) + (func $starter (; 2 ;) (type $v) + (nop) + ) +) + BinaryenModuleDispose(the_module); + functionTypes.clear(); + expressions.clear(); + functions.clear(); + relooperBlocks.clear(); + the_module = BinaryenModuleCreate(); + expressions[size_t(NULL)] = BinaryenExpressionRef(NULL); + { + BinaryenType paramTypes[] = { 0 }; + functionTypes[0] = BinaryenAddFunctionType(the_module, "v", 0, paramTypes, 0); + } + { + BinaryenType paramTypes[] = { 1 }; + functionTypes[1] = BinaryenAddFunctionType(the_module, "vi", 0, paramTypes, 1); + } + BinaryenAddImport(the_module, "check", "module", "check", functionTypes[1]); + the_relooper = RelooperCreate(); + expressions[1] = BinaryenConst(the_module, BinaryenLiteralInt32(1337)); + { + BinaryenExpressionRef operands[] = { expressions[1] }; + expressions[2] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[2]); + expressions[3] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[0] = BinaryenAddFunction(the_module, "just-one-block", functionTypes[0], varTypes, 1, expressions[3]); + } + the_relooper = RelooperCreate(); + expressions[4] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[4] }; + expressions[5] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[5]); + expressions[6] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[6] }; + expressions[7] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[7]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); + expressions[8] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[1] = BinaryenAddFunction(the_module, "two-blocks", functionTypes[0], varTypes, 1, expressions[8]); + } + the_relooper = RelooperCreate(); + expressions[9] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[9] }; + expressions[10] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[10]); + expressions[11] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[11] }; + expressions[12] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[12]); + expressions[13] = BinaryenConst(the_module, BinaryenLiteralInt32(77)); + expressions[14] = BinaryenDrop(the_module, expressions[13]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[14]); + expressions[15] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[2] = BinaryenAddFunction(the_module, "two-blocks-plus-code", functionTypes[0], varTypes, 1, expressions[15]); + } + the_relooper = RelooperCreate(); + expressions[16] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[16] }; + expressions[17] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[17]); + expressions[18] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[18] }; + expressions[19] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[19]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[0]); + expressions[20] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[3] = BinaryenAddFunction(the_module, "loop", functionTypes[0], varTypes, 1, expressions[20]); + } + the_relooper = RelooperCreate(); + expressions[21] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[21] }; + expressions[22] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[22]); + expressions[23] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[23] }; + expressions[24] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[24]); + expressions[25] = BinaryenConst(the_module, BinaryenLiteralInt32(33)); + expressions[26] = BinaryenDrop(the_module, expressions[25]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[26]); + expressions[27] = BinaryenConst(the_module, BinaryenLiteralInt32(-66)); + expressions[28] = BinaryenDrop(the_module, expressions[27]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[28]); + expressions[29] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[4] = BinaryenAddFunction(the_module, "loop-plus-code", functionTypes[0], varTypes, 1, expressions[29]); + } + the_relooper = RelooperCreate(); + expressions[30] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[30] }; + expressions[31] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[31]); + expressions[32] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[32] }; + expressions[33] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[33]); + expressions[34] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[34] }; + expressions[35] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[35]); + expressions[36] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[36], expressions[0]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); + expressions[37] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[5] = BinaryenAddFunction(the_module, "split", functionTypes[0], varTypes, 1, expressions[37]); + } + the_relooper = RelooperCreate(); + expressions[38] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[38] }; + expressions[39] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[39]); + expressions[40] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[40] }; + expressions[41] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[41]); + expressions[42] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[42] }; + expressions[43] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[43]); + expressions[44] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + expressions[45] = BinaryenDrop(the_module, expressions[44]); + expressions[46] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[46], expressions[45]); + expressions[47] = BinaryenConst(the_module, BinaryenLiteralInt32(20)); + expressions[48] = BinaryenDrop(the_module, expressions[47]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[48]); + expressions[49] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[6] = BinaryenAddFunction(the_module, "split-plus-code", functionTypes[0], varTypes, 1, expressions[49]); + } + the_relooper = RelooperCreate(); + expressions[50] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[50] }; + expressions[51] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[51]); + expressions[52] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[52] }; + expressions[53] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[53]); + expressions[54] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[54] }; + expressions[55] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[55]); + expressions[56] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[56], expressions[0]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[0], expressions[0]); + expressions[57] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[7] = BinaryenAddFunction(the_module, "if", functionTypes[0], varTypes, 1, expressions[57]); + } + the_relooper = RelooperCreate(); + expressions[58] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[58] }; + expressions[59] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[59]); + expressions[60] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[60] }; + expressions[61] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[61]); + expressions[62] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[62] }; + expressions[63] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[63]); + expressions[64] = BinaryenConst(the_module, BinaryenLiteralInt32(-1)); + expressions[65] = BinaryenDrop(the_module, expressions[64]); + expressions[66] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[66], expressions[65]); + expressions[67] = BinaryenConst(the_module, BinaryenLiteralInt32(-2)); + expressions[68] = BinaryenDrop(the_module, expressions[67]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[68]); + expressions[69] = BinaryenConst(the_module, BinaryenLiteralInt32(-3)); + expressions[70] = BinaryenDrop(the_module, expressions[69]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[0], expressions[70]); + expressions[71] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[8] = BinaryenAddFunction(the_module, "if-plus-code", functionTypes[0], varTypes, 1, expressions[71]); + } + the_relooper = RelooperCreate(); + expressions[72] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[72] }; + expressions[73] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[73]); + expressions[74] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[74] }; + expressions[75] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[75]); + expressions[76] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[76] }; + expressions[77] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[77]); + expressions[78] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + { + BinaryenExpressionRef operands[] = { expressions[78] }; + expressions[79] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[79]); + expressions[80] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[80], expressions[0]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[3], expressions[0], expressions[0]); + RelooperAddBranch(relooperBlocks[2], relooperBlocks[3], expressions[0], expressions[0]); + expressions[81] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[9] = BinaryenAddFunction(the_module, "if-else", functionTypes[0], varTypes, 1, expressions[81]); + } + the_relooper = RelooperCreate(); + expressions[82] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[82] }; + expressions[83] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[83]); + expressions[84] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[84] }; + expressions[85] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[85]); + expressions[86] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[86] }; + expressions[87] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[87]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); + expressions[88] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[88], expressions[0]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[0], expressions[0]); + expressions[89] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[10] = BinaryenAddFunction(the_module, "loop-tail", functionTypes[0], varTypes, 1, expressions[89]); + } + the_relooper = RelooperCreate(); + expressions[90] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[90] }; + expressions[91] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[91]); + expressions[92] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[92] }; + expressions[93] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[93]); + expressions[94] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[94] }; + expressions[95] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[95]); + expressions[96] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + { + BinaryenExpressionRef operands[] = { expressions[96] }; + expressions[97] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[97]); + expressions[98] = BinaryenConst(the_module, BinaryenLiteralInt32(4)); + { + BinaryenExpressionRef operands[] = { expressions[98] }; + expressions[99] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[4] = RelooperAddBlock(the_relooper, expressions[99]); + expressions[100] = BinaryenConst(the_module, BinaryenLiteralInt32(5)); + { + BinaryenExpressionRef operands[] = { expressions[100] }; + expressions[101] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[5] = RelooperAddBlock(the_relooper, expressions[101]); + expressions[102] = BinaryenConst(the_module, BinaryenLiteralInt32(6)); + { + BinaryenExpressionRef operands[] = { expressions[102] }; + expressions[103] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[6] = RelooperAddBlock(the_relooper, expressions[103]); + expressions[104] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + expressions[105] = BinaryenDrop(the_module, expressions[104]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[105]); + expressions[106] = BinaryenConst(the_module, BinaryenLiteralInt32(-2)); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[106], expressions[0]); + expressions[107] = BinaryenConst(the_module, BinaryenLiteralInt32(20)); + expressions[108] = BinaryenDrop(the_module, expressions[107]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[6], expressions[0], expressions[108]); + expressions[109] = BinaryenConst(the_module, BinaryenLiteralInt32(-6)); + RelooperAddBranch(relooperBlocks[2], relooperBlocks[3], expressions[109], expressions[0]); + expressions[110] = BinaryenConst(the_module, BinaryenLiteralInt32(30)); + expressions[111] = BinaryenDrop(the_module, expressions[110]); + RelooperAddBranch(relooperBlocks[2], relooperBlocks[1], expressions[0], expressions[111]); + expressions[112] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + RelooperAddBranch(relooperBlocks[3], relooperBlocks[4], expressions[112], expressions[0]); + RelooperAddBranch(relooperBlocks[3], relooperBlocks[5], expressions[0], expressions[0]); + RelooperAddBranch(relooperBlocks[4], relooperBlocks[5], expressions[0], expressions[0]); + expressions[113] = BinaryenConst(the_module, BinaryenLiteralInt32(40)); + expressions[114] = BinaryenDrop(the_module, expressions[113]); + RelooperAddBranch(relooperBlocks[5], relooperBlocks[6], expressions[0], expressions[114]); + expressions[115] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[11] = BinaryenAddFunction(the_module, "nontrivial-loop-plus-phi-to-head", functionTypes[0], varTypes, 1, expressions[115]); + } + the_relooper = RelooperCreate(); + expressions[116] = BinaryenConst(the_module, BinaryenLiteralInt32(-99)); + expressions[117] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[117] }; + expressions[118] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlockWithSwitch(the_relooper, expressions[118], expressions[116]); + expressions[119] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[119] }; + expressions[120] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[120]); + expressions[121] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[121] }; + expressions[122] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[122]); + expressions[123] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + { + BinaryenExpressionRef operands[] = { expressions[123] }; + expressions[124] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[124]); + { + BinaryenIndex indexes[] = { 2, 5 }; + RelooperAddBranchForSwitch(relooperBlocks[0], relooperBlocks[1], indexes, 2, expressions[0]); + } + expressions[125] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + expressions[126] = BinaryenDrop(the_module, expressions[125]); + { + BinaryenIndex indexes[] = { 4 }; + RelooperAddBranchForSwitch(relooperBlocks[0], relooperBlocks[2], indexes, 1, expressions[126]); + } + { + BinaryenIndex indexes[] = { 0 }; + RelooperAddBranchForSwitch(relooperBlocks[0], relooperBlocks[3], indexes, 0, expressions[0]); + } + expressions[127] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[12] = BinaryenAddFunction(the_module, "switch", functionTypes[0], varTypes, 1, expressions[127]); + } + the_relooper = RelooperCreate(); + expressions[128] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[128] }; + expressions[129] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[129]); + expressions[130] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + { + BinaryenExpressionRef operands[] = { expressions[130] }; + expressions[131] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[131]); + expressions[132] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + { + BinaryenExpressionRef operands[] = { expressions[132] }; + expressions[133] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[133]); + expressions[134] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[134], expressions[0]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[0], expressions[0]); + RelooperAddBranch(relooperBlocks[2], relooperBlocks[1], expressions[0], expressions[0]); + expressions[135] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 3, the_module); + { + BinaryenType varTypes[] = { 1, 1, 2, 1, 3, 4, 1 }; + functions[13] = BinaryenAddFunction(the_module, "duffs-device", functionTypes[0], varTypes, 7, expressions[135]); + } + { + BinaryenType paramTypes[] = { 0 }; + functionTypes[2] = BinaryenAddFunctionType(the_module, "i", 1, paramTypes, 0); + } + the_relooper = RelooperCreate(); + expressions[136] = BinaryenConst(the_module, BinaryenLiteralInt32(42)); + { + BinaryenExpressionRef operands[] = { expressions[136] }; + expressions[137] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + expressions[138] = BinaryenConst(the_module, BinaryenLiteralInt32(1337)); + expressions[139] = BinaryenReturn(the_module, expressions[138]); + { + BinaryenExpressionRef children[] = { expressions[137], expressions[139] }; + expressions[140] = BinaryenBlock(the_module, "the-list", children, 2, BinaryenUndefined()); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[140]); + expressions[141] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + { + BinaryenType varTypes[] = { 1 }; + functions[14] = BinaryenAddFunction(the_module, "return", functionTypes[2], varTypes, 1, expressions[141]); + } +raw: + BinaryenModulePrint(the_module); +(module + (type $v (func)) + (type $vi (func (param i32))) + (type $i (func (result i32))) + (import "module" "check" (func $check (param i32))) + (memory $0 0) + (func $just-one-block (; 1 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 1337) + ) + ) + (func $two-blocks (; 2 ;) (type $v) + (local $0 i32) + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + ) + ) + (func $two-blocks-plus-code (; 3 ;) (type $v) + (local $0 i32) + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (drop + (i32.const 77) + ) + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + ) + ) + (func $loop (; 4 ;) (type $v) + (local $0 i32) + (loop $shape$0$continue + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + (block + (br $shape$0$continue) + ) + ) + ) + ) + (func $loop-plus-code (; 5 ;) (type $v) + (local $0 i32) + (loop $shape$0$continue + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (drop + (i32.const 33) + ) + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + (block + (drop + (i32.const -66) + ) + (br $shape$0$continue) + ) + ) + ) + ) + (func $split (; 6 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call $check + (i32.const 1) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + ) + (func $split-plus-code (; 7 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (drop + (i32.const 10) + ) + (block + (call $check + (i32.const 1) + ) + ) + ) + (block + (drop + (i32.const 20) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + ) + ) + (func $if (; 8 ;) (type $v) + (local $0 i32) + (block $block$3$break + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call $check + (i32.const 1) + ) + (block + (br $block$3$break) + ) + ) + (br $block$3$break) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (func $if-plus-code (; 9 ;) (type $v) + (local $0 i32) + (block $block$3$break + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (drop + (i32.const -1) + ) + (block + (call $check + (i32.const 1) + ) + (block + (drop + (i32.const -3) + ) + (br $block$3$break) + ) + ) + ) + (block + (drop + (i32.const -2) + ) + (br $block$3$break) + ) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (func $if-else (; 10 ;) (type $v) + (local $0 i32) + (block $block$4$break + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call $check + (i32.const 1) + ) + (block + (br $block$4$break) + ) + ) + (block + (call $check + (i32.const 2) + ) + (block + (br $block$4$break) + ) + ) + ) + ) + (block + (call $check + (i32.const 3) + ) + ) + ) + (func $loop-tail (; 11 ;) (type $v) + (local $0 i32) + (block $block$3$break + (loop $shape$0$continue + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + (if + (i32.const 10) + (br $shape$0$continue) + (br $block$3$break) + ) + ) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (func $nontrivial-loop-plus-phi-to-head (; 12 ;) (type $v) + (local $0 i32) + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (drop + (i32.const 10) + ) + (br $block$2$break) + ) + ) + (block + (block $block$7$break + (block $block$4$break + (loop $shape$1$continue + (block $block$3$break + (call $check + (i32.const 1) + ) + (if + (i32.const -2) + (br $block$3$break) + (block + (drop + (i32.const 20) + ) + (br $block$7$break) + ) + ) + ) + (block + (call $check + (i32.const 2) + ) + (if + (i32.const -6) + (br $block$4$break) + (block + (drop + (i32.const 30) + ) + (br $shape$1$continue) + ) + ) + ) + ) + ) + (block + (block $block$6$break + (call $check + (i32.const 3) + ) + (if + (i32.const -10) + (block + (call $check + (i32.const 4) + ) + (block + (br $block$6$break) + ) + ) + (br $block$6$break) + ) + ) + (block + (call $check + (i32.const 5) + ) + (block + (drop + (i32.const 40) + ) + (br $block$7$break) + ) + ) + ) + ) + (block + (call $check + (i32.const 6) + ) + ) + ) + ) + (func $switch (; 13 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 0) + ) + (block $switch$1$leave + (block $switch$1$default + (block $switch$1$case$3 + (block $switch$1$case$2 + (br_table $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$3 $switch$1$case$2 $switch$1$default + (i32.const -99) + ) + ) + (block + (block + (call $check + (i32.const 1) + ) + ) + ) + (br $switch$1$leave) + ) + (block + (drop + (i32.const 55) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (br $switch$1$leave) + ) + (block + (block + (call $check + (i32.const 3) + ) + ) + ) + (br $switch$1$leave) + ) + ) + (func $duffs-device (; 14 ;) (type $v) + (local $0 i32) + (local $1 i32) + (local $2 i64) + (local $3 i32) + (local $4 f32) + (local $5 f64) + (local $6 i32) + (block + (block $block$3$break + (block $block$2$break + (call $check + (i32.const 0) + ) + (if + (i32.const 10) + (block + (set_local $3 + (i32.const 2) + ) + (br $block$2$break) + ) + (block + (set_local $3 + (i32.const 3) + ) + (br $block$3$break) + ) + ) + ) + ) + ) + (loop $shape$1$continue + (if + (i32.eq + (get_local $3) + (i32.const 2) + ) + (block + (set_local $3 + (i32.const 0) + ) + (call $check + (i32.const 1) + ) + (block + (set_local $3 + (i32.const 3) + ) + (br $shape$1$continue) + ) + ) + (if + (i32.eq + (get_local $3) + (i32.const 3) + ) + (block + (set_local $3 + (i32.const 0) + ) + (call $check + (i32.const 2) + ) + (block + (set_local $3 + (i32.const 2) + ) + (br $shape$1$continue) + ) + ) + ) + ) + ) + ) + (func $return (; 15 ;) (type $i) (result i32) + (local $0 i32) + (block $the-list + (call $check + (i32.const 42) + ) + (return + (i32.const 1337) + ) + ) + ) +) + BinaryenModuleValidate(the_module); + BinaryenModuleOptimize(the_module); + BinaryenModuleValidate(the_module); +optimized: + BinaryenModulePrint(the_module); +(module + (memory $0 0) +) + BinaryenModuleDispose(the_module); + functionTypes.clear(); + expressions.clear(); + functions.clear(); + relooperBlocks.clear(); + return 0; +} diff --git a/src/binaryen/test/example/c-api-kitchen-sink.txt.txt b/src/binaryen/test/example/c-api-kitchen-sink.txt.txt new file mode 100644 index 0000000000..f7a4545073 --- /dev/null +++ b/src/binaryen/test/example/c-api-kitchen-sink.txt.txt @@ -0,0 +1,1024 @@ +(f32.neg + (f32.const -33.61199951171875) +) +(module + (type $iiIfF (func (param i32 i64 f32 f64) (result i32))) + (type $fiF (func (param i32 f64) (result f32))) + (type $v (func)) + (type $3 (func)) + (import "module" "base" (func $an-imported (param i32 f64) (result f32))) + (global $a-global i32 (i32.const 7)) + (global $a-mutable-global (mut f32) (f32.const 7.5)) + (table 1 1 anyfunc) + (elem (i32.const 0) "$kitchen()sinker") + (memory $0 1 256) + (data (i32.const 10) "hello, world") + (export "kitchen_sinker" (func "$kitchen()sinker")) + (export "mem" (memory $0)) + (start $starter) + (func "$kitchen()sinker" (; 1 ;) (type $iiIfF) (param $0 i32) (param $1 i64) (param $2 f32) (param $3 f64) (result i32) + (local $4 i32) + (block $the-body (result i32) + (block $the-nothing + (drop + (block $the-value (result i32) + (drop + (i32.clz + (i32.const -10) + ) + ) + (drop + (i64.ctz + (i64.const -22) + ) + ) + (drop + (i32.popcnt + (i32.const -10) + ) + ) + (drop + (f32.neg + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.abs + (f64.const -9005.84) + ) + ) + (drop + (f32.ceil + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.floor + (f64.const -9005.84) + ) + ) + (drop + (f32.trunc + (f32.const -33.61199951171875) + ) + ) + (drop + (f32.nearest + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.sqrt + (f64.const -9005.84) + ) + ) + (drop + (i32.eqz + (i32.const -10) + ) + ) + (drop + (i64.extend_s/i32 + (i32.const -10) + ) + ) + (drop + (i64.extend_u/i32 + (i32.const -10) + ) + ) + (drop + (i32.wrap/i64 + (i64.const -22) + ) + ) + (drop + (i32.trunc_s/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.trunc_s/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i32.trunc_u/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.trunc_u/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i32.trunc_s/f64 + (f64.const -9005.84) + ) + ) + (drop + (i64.trunc_s/f64 + (f64.const -9005.84) + ) + ) + (drop + (i32.trunc_u/f64 + (f64.const -9005.84) + ) + ) + (drop + (i64.trunc_u/f64 + (f64.const -9005.84) + ) + ) + (drop + (i32.reinterpret/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.reinterpret/f64 + (f64.const -9005.84) + ) + ) + (drop + (f32.convert_s/i32 + (i32.const -10) + ) + ) + (drop + (f64.convert_s/i32 + (i32.const -10) + ) + ) + (drop + (f32.convert_u/i32 + (i32.const -10) + ) + ) + (drop + (f64.convert_u/i32 + (i32.const -10) + ) + ) + (drop + (f32.convert_s/i64 + (i64.const -22) + ) + ) + (drop + (f64.convert_s/i64 + (i64.const -22) + ) + ) + (drop + (f32.convert_u/i64 + (i64.const -22) + ) + ) + (drop + (f64.convert_u/i64 + (i64.const -22) + ) + ) + (drop + (f64.promote/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (f32.demote/f64 + (f64.const -9005.84) + ) + ) + (drop + (f32.reinterpret/i32 + (i32.const -10) + ) + ) + (drop + (f64.reinterpret/i64 + (i64.const -22) + ) + ) + (drop + (i32.add + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (f64.sub + (f64.const -9005.84) + (f64.const -9007.33) + ) + ) + (drop + (i32.div_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.div_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i64.rem_s + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.rem_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.and + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.or + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.xor + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.shl + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i64.shr_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.shr_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.rotl + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.rotr + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (f32.div + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.copysign + (f64.const -9005.84) + (f64.const -9007.33) + ) + ) + (drop + (f32.min + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.max + (f64.const -9005.84) + (f64.const -9007.33) + ) + ) + (drop + (i32.eq + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (f32.ne + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (i32.lt_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.lt_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i64.le_s + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.le_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.gt_s + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.gt_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.ge_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.ge_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (f32.lt + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.le + (f64.const -9005.84) + (f64.const -9007.33) + ) + ) + (drop + (f64.gt + (f64.const -9005.84) + (f64.const -9007.33) + ) + ) + (drop + (f32.ge + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (block + ) + (if + (i32.const 1) + (drop + (i32.const 2) + ) + (drop + (i32.const 3) + ) + ) + (if + (i32.const 4) + (drop + (i32.const 5) + ) + ) + (drop + (loop $in (result i32) + (i32.const 0) + ) + ) + (drop + (loop (result i32) + (i32.const 0) + ) + ) + (drop + (br_if $the-value + (i32.const 1) + (i32.const 0) + ) + ) + (br_if $the-nothing + (i32.const 2) + ) + (br $the-value + (i32.const 3) + ) + (br $the-nothing) + (br_table $the-value $the-value + (i32.const 1) + (i32.const 0) + ) + (br_table $the-nothing $the-nothing + (i32.const 2) + ) + (drop + (i32.eqz + (call "$kitchen()sinker" + (i32.const 13) + (i64.const 37) + (f32.const 1.2999999523162842) + (f64.const 3.7) + ) + ) + ) + (drop + (i32.eqz + (i32.trunc_s/f32 + (call $an-imported + (i32.const 13) + (f64.const 3.7) + ) + ) + ) + ) + (drop + (i32.eqz + (call_indirect (type $iiIfF) + (i32.const 13) + (i64.const 37) + (f32.const 1.2999999523162842) + (f64.const 3.7) + (i32.const 2449) + ) + ) + ) + (drop + (get_local $0) + ) + (set_local $0 + (i32.const 101) + ) + (drop + (tee_local $0 + (i32.const 102) + ) + ) + (drop + (i32.load + (i32.const 1) + ) + ) + (drop + (i64.load16_s offset=2 align=1 + (i32.const 8) + ) + ) + (drop + (f32.load + (i32.const 2) + ) + ) + (drop + (f64.load offset=2 + (i32.const 9) + ) + ) + (i32.store + (i32.const 10) + (i32.const 11) + ) + (i64.store offset=2 align=4 + (i32.const 110) + (i64.const 111) + ) + (drop + (select + (i32.const 3) + (i32.const 5) + (i32.const 1) + ) + ) + (return + (i32.const 1337) + ) + (nop) + (unreachable) + ) + ) + ) + (i32.const 42) + ) + ) + (func $starter (; 2 ;) (type $v) + (nop) + ) +) +(module + (type $v (func)) + (type $vi (func (param i32))) + (type $i (func (result i32))) + (import "module" "check" (func $check (param i32))) + (memory $0 0) + (func $just-one-block (; 1 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 1337) + ) + ) + (func $two-blocks (; 2 ;) (type $v) + (local $0 i32) + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + ) + ) + (func $two-blocks-plus-code (; 3 ;) (type $v) + (local $0 i32) + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (drop + (i32.const 77) + ) + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + ) + ) + (func $loop (; 4 ;) (type $v) + (local $0 i32) + (loop $shape$0$continue + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + (block + (br $shape$0$continue) + ) + ) + ) + ) + (func $loop-plus-code (; 5 ;) (type $v) + (local $0 i32) + (loop $shape$0$continue + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (drop + (i32.const 33) + ) + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + (block + (drop + (i32.const -66) + ) + (br $shape$0$continue) + ) + ) + ) + ) + (func $split (; 6 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call $check + (i32.const 1) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + ) + (func $split-plus-code (; 7 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (drop + (i32.const 10) + ) + (block + (call $check + (i32.const 1) + ) + ) + ) + (block + (drop + (i32.const 20) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + ) + ) + (func $if (; 8 ;) (type $v) + (local $0 i32) + (block $block$3$break + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call $check + (i32.const 1) + ) + (block + (br $block$3$break) + ) + ) + (br $block$3$break) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (func $if-plus-code (; 9 ;) (type $v) + (local $0 i32) + (block $block$3$break + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (drop + (i32.const -1) + ) + (block + (call $check + (i32.const 1) + ) + (block + (drop + (i32.const -3) + ) + (br $block$3$break) + ) + ) + ) + (block + (drop + (i32.const -2) + ) + (br $block$3$break) + ) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (func $if-else (; 10 ;) (type $v) + (local $0 i32) + (block $block$4$break + (call $check + (i32.const 0) + ) + (if + (i32.const 55) + (block + (call $check + (i32.const 1) + ) + (block + (br $block$4$break) + ) + ) + (block + (call $check + (i32.const 2) + ) + (block + (br $block$4$break) + ) + ) + ) + ) + (block + (call $check + (i32.const 3) + ) + ) + ) + (func $loop-tail (; 11 ;) (type $v) + (local $0 i32) + (block $block$3$break + (loop $shape$0$continue + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (br $block$2$break) + ) + ) + (block + (call $check + (i32.const 1) + ) + (if + (i32.const 10) + (br $shape$0$continue) + (br $block$3$break) + ) + ) + ) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (func $nontrivial-loop-plus-phi-to-head (; 12 ;) (type $v) + (local $0 i32) + (block $block$2$break + (call $check + (i32.const 0) + ) + (block + (drop + (i32.const 10) + ) + (br $block$2$break) + ) + ) + (block + (block $block$7$break + (block $block$4$break + (loop $shape$1$continue + (block $block$3$break + (call $check + (i32.const 1) + ) + (if + (i32.const -2) + (br $block$3$break) + (block + (drop + (i32.const 20) + ) + (br $block$7$break) + ) + ) + ) + (block + (call $check + (i32.const 2) + ) + (if + (i32.const -6) + (br $block$4$break) + (block + (drop + (i32.const 30) + ) + (br $shape$1$continue) + ) + ) + ) + ) + ) + (block + (block $block$6$break + (call $check + (i32.const 3) + ) + (if + (i32.const -10) + (block + (call $check + (i32.const 4) + ) + (block + (br $block$6$break) + ) + ) + (br $block$6$break) + ) + ) + (block + (call $check + (i32.const 5) + ) + (block + (drop + (i32.const 40) + ) + (br $block$7$break) + ) + ) + ) + ) + (block + (call $check + (i32.const 6) + ) + ) + ) + ) + (func $switch (; 13 ;) (type $v) + (local $0 i32) + (call $check + (i32.const 0) + ) + (block $switch$1$leave + (block $switch$1$default + (block $switch$1$case$3 + (block $switch$1$case$2 + (br_table $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$3 $switch$1$case$2 $switch$1$default + (i32.const -99) + ) + ) + (block + (block + (call $check + (i32.const 1) + ) + ) + ) + (br $switch$1$leave) + ) + (block + (drop + (i32.const 55) + ) + (block + (call $check + (i32.const 2) + ) + ) + ) + (br $switch$1$leave) + ) + (block + (block + (call $check + (i32.const 3) + ) + ) + ) + (br $switch$1$leave) + ) + ) + (func $duffs-device (; 14 ;) (type $v) + (local $0 i32) + (local $1 i32) + (local $2 i64) + (local $3 i32) + (local $4 f32) + (local $5 f64) + (local $6 i32) + (block + (block $block$3$break + (block $block$2$break + (call $check + (i32.const 0) + ) + (if + (i32.const 10) + (block + (set_local $3 + (i32.const 2) + ) + (br $block$2$break) + ) + (block + (set_local $3 + (i32.const 3) + ) + (br $block$3$break) + ) + ) + ) + ) + ) + (loop $shape$1$continue + (if + (i32.eq + (get_local $3) + (i32.const 2) + ) + (block + (set_local $3 + (i32.const 0) + ) + (call $check + (i32.const 1) + ) + (block + (set_local $3 + (i32.const 3) + ) + (br $shape$1$continue) + ) + ) + (if + (i32.eq + (get_local $3) + (i32.const 3) + ) + (block + (set_local $3 + (i32.const 0) + ) + (call $check + (i32.const 2) + ) + (block + (set_local $3 + (i32.const 2) + ) + (br $shape$1$continue) + ) + ) + ) + ) + ) + ) + (func $return (; 15 ;) (type $i) (result i32) + (local $0 i32) + (block $the-list + (call $check + (i32.const 42) + ) + (return + (i32.const 1337) + ) + ) + ) +) +(module + (memory $0 0) +) diff --git a/src/binaryen/test/example/c-api-relooper-unreachable-if.cpp b/src/binaryen/test/example/c-api-relooper-unreachable-if.cpp new file mode 100644 index 0000000000..b6f7f8b046 --- /dev/null +++ b/src/binaryen/test/example/c-api-relooper-unreachable-if.cpp @@ -0,0 +1,557 @@ +// beginning a Binaryen API trace +#include +#include +#include "binaryen-c.h" +int main() { + std::map functionTypes; + std::map expressions; + std::map functions; + std::map relooperBlocks; + BinaryenModuleRef the_module = NULL; + RelooperRef the_relooper = NULL; + the_module = BinaryenModuleCreate(); + expressions[size_t(NULL)] = BinaryenExpressionRef(NULL); + BinaryenModuleAutoDrop(the_module); + { + const char* segments[] = { 0 }; + BinaryenExpressionRef segmentOffsets[] = { 0 }; + BinaryenIndex segmentSizes[] = { 0 }; + BinaryenSetMemory(the_module, 256, 256, "memory", segments, segmentOffsets, segmentSizes, 0); + } + the_relooper = RelooperCreate(); + expressions[1] = BinaryenGetLocal(the_module, 0, 1); + expressions[2] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[3] = BinaryenStore(the_module, 4, 0, 0, expressions[2], expressions[1], 1); + expressions[4] = BinaryenReturn(the_module, expressions[0]); + { + BinaryenExpressionRef children[] = { expressions[3], expressions[4] }; + expressions[5] = BinaryenBlock(the_module, "bb0", children, 2, BinaryenUndefined()); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[5]); + { + BinaryenType paramTypes[] = { 0 }; + functionTypes[0] = BinaryenAddFunctionType(the_module, "rustfn-0-40", 0, paramTypes, 0); + } + expressions[6] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[7] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[6]); + expressions[8] = BinaryenSetLocal(the_module, 0, expressions[7]); + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[8]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[0]); + expressions[9] = RelooperRenderAndDispose(the_relooper, relooperBlocks[1], 1, the_module); + { + BinaryenType varTypes[] = { 1, 1, 2 }; + functions[0] = BinaryenAddFunction(the_module, "tinycore::eh_personality", functionTypes[0], varTypes, 3, expressions[9]); + } + BinaryenAddExport(the_module, "tinycore::eh_personality", "tinycore::eh_personality"); + the_relooper = RelooperCreate(); + expressions[10] = BinaryenGetLocal(the_module, 0, 1); + expressions[11] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[12] = BinaryenStore(the_module, 4, 0, 0, expressions[11], expressions[10], 1); + expressions[13] = BinaryenReturn(the_module, expressions[0]); + { + BinaryenExpressionRef children[] = { expressions[12], expressions[13] }; + expressions[14] = BinaryenBlock(the_module, "bb0", children, 2, BinaryenUndefined()); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[14]); + expressions[15] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[16] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[15]); + expressions[17] = BinaryenSetLocal(the_module, 0, expressions[16]); + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[17]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[0]); + expressions[18] = RelooperRenderAndDispose(the_relooper, relooperBlocks[1], 1, the_module); + { + BinaryenType varTypes[] = { 1, 1, 2 }; + functions[1] = BinaryenAddFunction(the_module, "tinycore::eh_unwind_resume", functionTypes[0], varTypes, 3, expressions[18]); + } + BinaryenAddExport(the_module, "tinycore::eh_unwind_resume", "tinycore::eh_unwind_resume"); + the_relooper = RelooperCreate(); + { + BinaryenExpressionRef children[] = { 0 }; + expressions[19] = BinaryenBlock(the_module, "bb0", children, 0, BinaryenUndefined()); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[19]); + { + BinaryenExpressionRef children[] = { 0 }; + expressions[20] = BinaryenBlock(the_module, "bb1", children, 0, BinaryenUndefined()); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[20]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[1], expressions[0], expressions[0]); + { + BinaryenType paramTypes[] = { 0 }; + functionTypes[1] = BinaryenAddFunctionType(the_module, "rustfn-0-42", 0, paramTypes, 0); + } + expressions[21] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[22] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[21]); + expressions[23] = BinaryenSetLocal(the_module, 0, expressions[22]); + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[23]); + RelooperAddBranch(relooperBlocks[2], relooperBlocks[0], expressions[0], expressions[0]); + expressions[24] = RelooperRenderAndDispose(the_relooper, relooperBlocks[2], 1, the_module); + { + BinaryenType varTypes[] = { 1, 1, 2 }; + functions[2] = BinaryenAddFunction(the_module, "tinycore::panic_fmt", functionTypes[1], varTypes, 3, expressions[24]); + } + BinaryenAddExport(the_module, "tinycore::panic_fmt", "tinycore::panic_fmt"); + the_relooper = RelooperCreate(); + expressions[25] = BinaryenGetLocal(the_module, 0, 1); + expressions[26] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[27] = BinaryenStore(the_module, 4, 0, 0, expressions[26], expressions[25], 1); + expressions[28] = BinaryenReturn(the_module, expressions[0]); + { + BinaryenExpressionRef children[] = { expressions[27], expressions[28] }; + expressions[29] = BinaryenBlock(the_module, "bb0", children, 2, BinaryenUndefined()); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[29]); + expressions[30] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[31] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[30]); + expressions[32] = BinaryenSetLocal(the_module, 0, expressions[31]); + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[32]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[0]); + expressions[33] = RelooperRenderAndDispose(the_relooper, relooperBlocks[1], 1, the_module); + { + BinaryenType varTypes[] = { 1, 1, 2 }; + functions[3] = BinaryenAddFunction(the_module, "tinycore::rust_eh_register_frames", functionTypes[0], varTypes, 3, expressions[33]); + } + BinaryenAddExport(the_module, "tinycore::rust_eh_register_frames", "tinycore::rust_eh_register_frames"); + the_relooper = RelooperCreate(); + expressions[34] = BinaryenGetLocal(the_module, 0, 1); + expressions[35] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[36] = BinaryenStore(the_module, 4, 0, 0, expressions[35], expressions[34], 1); + expressions[37] = BinaryenReturn(the_module, expressions[0]); + { + BinaryenExpressionRef children[] = { expressions[36], expressions[37] }; + expressions[38] = BinaryenBlock(the_module, "bb0", children, 2, BinaryenUndefined()); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[38]); + expressions[39] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[40] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[39]); + expressions[41] = BinaryenSetLocal(the_module, 0, expressions[40]); + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[41]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[0]); + expressions[42] = RelooperRenderAndDispose(the_relooper, relooperBlocks[1], 1, the_module); + { + BinaryenType varTypes[] = { 1, 1, 2 }; + functions[4] = BinaryenAddFunction(the_module, "tinycore::rust_eh_unregister_frames", functionTypes[0], varTypes, 3, expressions[42]); + } + BinaryenAddExport(the_module, "tinycore::rust_eh_unregister_frames", "tinycore::rust_eh_unregister_frames"); + the_relooper = RelooperCreate(); + expressions[43] = BinaryenGetLocal(the_module, 0, 1); + expressions[44] = BinaryenSetLocal(the_module, 1, expressions[43]); + expressions[45] = BinaryenGetLocal(the_module, 1, 1); + expressions[46] = BinaryenSetLocal(the_module, 2, expressions[45]); + { + BinaryenType paramTypes[] = { 1 }; + functionTypes[2] = BinaryenAddFunctionType(the_module, "print_i32", 0, paramTypes, 1); + } + BinaryenAddImport(the_module, "print_i32", "spectest", "print", functionTypes[2]); + expressions[47] = BinaryenGetLocal(the_module, 2, 1); + { + BinaryenExpressionRef operands[] = { expressions[47] }; + expressions[48] = BinaryenCallImport(the_module, "print_i32", operands, 1, 0); + } + { + BinaryenExpressionRef children[] = { expressions[44], expressions[46], expressions[48] }; + expressions[49] = BinaryenBlock(the_module, "bb0", children, 3, BinaryenUndefined()); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[49]); + expressions[50] = BinaryenGetLocal(the_module, 3, 1); + expressions[51] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[52] = BinaryenStore(the_module, 4, 0, 0, expressions[51], expressions[50], 1); + expressions[53] = BinaryenReturn(the_module, expressions[0]); + { + BinaryenExpressionRef children[] = { expressions[52], expressions[53] }; + expressions[54] = BinaryenBlock(the_module, "bb1", children, 2, BinaryenUndefined()); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[54]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); + { + BinaryenType paramTypes[] = { 1 }; + functionTypes[3] = BinaryenAddFunctionType(the_module, "rustfn-0-49", 0, paramTypes, 1); + } + expressions[55] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[56] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[55]); + expressions[57] = BinaryenSetLocal(the_module, 3, expressions[56]); + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[57]); + RelooperAddBranch(relooperBlocks[2], relooperBlocks[0], expressions[0], expressions[0]); + expressions[58] = RelooperRenderAndDispose(the_relooper, relooperBlocks[2], 4, the_module); + { + BinaryenType varTypes[] = { 1, 1, 1, 1, 2 }; + functions[5] = BinaryenAddFunction(the_module, "wasm::print_i32", functionTypes[3], varTypes, 5, expressions[58]); + } + BinaryenAddExport(the_module, "wasm::print_i32", "wasm::print_i32"); + the_relooper = RelooperCreate(); + expressions[59] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + expressions[60] = BinaryenSetLocal(the_module, 0, expressions[59]); + expressions[61] = BinaryenGetLocal(the_module, 0, 1); + expressions[62] = BinaryenSetLocal(the_module, 2, expressions[61]); + expressions[63] = BinaryenGetLocal(the_module, 2, 1); + expressions[64] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + expressions[65] = BinaryenUnary(the_module, 22, expressions[63]); + expressions[66] = BinaryenUnary(the_module, 22, expressions[64]); + expressions[67] = BinaryenBinary(the_module, 25, expressions[65], expressions[66]); + expressions[68] = BinaryenSetLocal(the_module, 8, expressions[67]); + expressions[69] = BinaryenGetLocal(the_module, 8, 2); + expressions[70] = BinaryenUnary(the_module, 24, expressions[69]); + expressions[71] = BinaryenConst(the_module, BinaryenLiteralInt64(32)); + expressions[72] = BinaryenGetLocal(the_module, 8, 2); + expressions[73] = BinaryenBinary(the_module, 36, expressions[72], expressions[71]); + expressions[74] = BinaryenUnary(the_module, 24, expressions[73]); + expressions[75] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[76] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[75]); + expressions[77] = BinaryenConst(the_module, BinaryenLiteralInt32(128)); + expressions[78] = BinaryenBinary(the_module, 1, expressions[76], expressions[77]); + expressions[79] = BinaryenTeeLocal(the_module, 3, expressions[78]); + expressions[80] = BinaryenStore(the_module, 4, 0, 0, expressions[75], expressions[79], 1); + expressions[81] = BinaryenGetLocal(the_module, 3, 1); + expressions[82] = BinaryenStore(the_module, 4, 0, 0, expressions[81], expressions[70], 1); + expressions[83] = BinaryenStore(the_module, 4, 4, 0, expressions[81], expressions[74], 1); + { + BinaryenExpressionRef children[] = { expressions[60], expressions[62], expressions[68], expressions[80], expressions[82], expressions[83] }; + expressions[84] = BinaryenBlock(the_module, "bb0", children, 6, BinaryenUndefined()); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[84]); + expressions[85] = BinaryenGetLocal(the_module, 3, 1); + expressions[86] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[85]); + expressions[87] = BinaryenSetLocal(the_module, 1, expressions[86]); + expressions[88] = BinaryenGetLocal(the_module, 1, 1); + expressions[89] = BinaryenSetLocal(the_module, 4, expressions[88]); + expressions[90] = BinaryenGetLocal(the_module, 4, 1); + expressions[91] = BinaryenSetLocal(the_module, 5, expressions[90]); + expressions[92] = BinaryenGetLocal(the_module, 6, 1); + expressions[93] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[94] = BinaryenStore(the_module, 4, 0, 0, expressions[93], expressions[92], 1); + expressions[95] = BinaryenGetLocal(the_module, 5, 1); + expressions[96] = BinaryenReturn(the_module, expressions[95]); + { + BinaryenExpressionRef children[] = { expressions[87], expressions[89], expressions[91], expressions[94], expressions[96] }; + expressions[97] = BinaryenBlock(the_module, "bb1", children, 5, BinaryenUndefined()); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[97]); + expressions[98] = BinaryenGetLocal(the_module, 3, 1); + expressions[99] = BinaryenLoad(the_module, 4, 0, 8, 0, 1, expressions[98]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[99], expressions[0]); + expressions[100] = BinaryenUnreachable(the_module); + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[100]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); + { + BinaryenType paramTypes[] = { 0 }; + functionTypes[4] = BinaryenAddFunctionType(the_module, "rustfn-0-54", 1, paramTypes, 0); + } + expressions[101] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[102] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[101]); + expressions[103] = BinaryenSetLocal(the_module, 6, expressions[102]); + relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[103]); + RelooperAddBranch(relooperBlocks[3], relooperBlocks[0], expressions[0], expressions[0]); + expressions[104] = RelooperRenderAndDispose(the_relooper, relooperBlocks[3], 7, the_module); + { + BinaryenType varTypes[] = { 1, 1, 1, 1, 1, 1, 1, 1, 2 }; + functions[6] = BinaryenAddFunction(the_module, "real_main", functionTypes[4], varTypes, 9, expressions[104]); + } + BinaryenAddExport(the_module, "real_main", "real_main"); + the_relooper = RelooperCreate(); + expressions[105] = BinaryenGetLocal(the_module, 0, 1); + expressions[106] = BinaryenSetLocal(the_module, 2, expressions[105]); + { + BinaryenExpressionRef operands[] = { 0 }; + expressions[107] = BinaryenCall(the_module, "real_main", operands, 0, 1); + } + expressions[108] = BinaryenSetLocal(the_module, 4, expressions[107]); + { + BinaryenExpressionRef children[] = { expressions[106], expressions[108] }; + expressions[109] = BinaryenBlock(the_module, "bb0", children, 2, BinaryenUndefined()); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[109]); + expressions[110] = BinaryenGetLocal(the_module, 4, 1); + expressions[111] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + expressions[112] = BinaryenUnary(the_module, 22, expressions[110]); + expressions[113] = BinaryenUnary(the_module, 22, expressions[111]); + expressions[114] = BinaryenBinary(the_module, 25, expressions[112], expressions[113]); + expressions[115] = BinaryenSetLocal(the_module, 11, expressions[114]); + expressions[116] = BinaryenGetLocal(the_module, 11, 2); + expressions[117] = BinaryenUnary(the_module, 24, expressions[116]); + expressions[118] = BinaryenConst(the_module, BinaryenLiteralInt64(32)); + expressions[119] = BinaryenGetLocal(the_module, 11, 2); + expressions[120] = BinaryenBinary(the_module, 36, expressions[119], expressions[118]); + expressions[121] = BinaryenUnary(the_module, 24, expressions[120]); + expressions[122] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[123] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[122]); + expressions[124] = BinaryenConst(the_module, BinaryenLiteralInt32(128)); + expressions[125] = BinaryenBinary(the_module, 1, expressions[123], expressions[124]); + expressions[126] = BinaryenTeeLocal(the_module, 5, expressions[125]); + expressions[127] = BinaryenStore(the_module, 4, 0, 0, expressions[122], expressions[126], 1); + expressions[128] = BinaryenGetLocal(the_module, 5, 1); + expressions[129] = BinaryenStore(the_module, 4, 0, 0, expressions[128], expressions[117], 1); + expressions[130] = BinaryenStore(the_module, 4, 4, 0, expressions[128], expressions[121], 1); + { + BinaryenExpressionRef children[] = { expressions[115], expressions[127], expressions[129], expressions[130] }; + expressions[131] = BinaryenBlock(the_module, "bb1", children, 4, BinaryenUndefined()); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[131]); + expressions[132] = BinaryenGetLocal(the_module, 5, 1); + expressions[133] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[132]); + expressions[134] = BinaryenSetLocal(the_module, 3, expressions[133]); + expressions[135] = BinaryenGetLocal(the_module, 3, 1); + expressions[136] = BinaryenSetLocal(the_module, 6, expressions[135]); + expressions[137] = BinaryenGetLocal(the_module, 6, 1); + { + BinaryenExpressionRef operands[] = { expressions[137] }; + expressions[138] = BinaryenCall(the_module, "wasm::print_i32", operands, 1, 0); + } + { + BinaryenExpressionRef children[] = { expressions[134], expressions[136], expressions[138] }; + expressions[139] = BinaryenBlock(the_module, "bb2", children, 3, BinaryenUndefined()); + } + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[139]); + expressions[140] = BinaryenGetLocal(the_module, 3, 1); + expressions[141] = BinaryenSetLocal(the_module, 7, expressions[140]); + expressions[142] = BinaryenGetLocal(the_module, 7, 1); + expressions[143] = BinaryenSetLocal(the_module, 8, expressions[142]); + expressions[144] = BinaryenGetLocal(the_module, 9, 1); + expressions[145] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[146] = BinaryenStore(the_module, 4, 0, 0, expressions[145], expressions[144], 1); + expressions[147] = BinaryenGetLocal(the_module, 8, 1); + expressions[148] = BinaryenReturn(the_module, expressions[147]); + { + BinaryenExpressionRef children[] = { expressions[141], expressions[143], expressions[146], expressions[148] }; + expressions[149] = BinaryenBlock(the_module, "bb3", children, 4, BinaryenUndefined()); + } + relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[149]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); + expressions[150] = BinaryenGetLocal(the_module, 5, 1); + expressions[151] = BinaryenLoad(the_module, 4, 0, 8, 0, 1, expressions[150]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[151], expressions[0]); + expressions[152] = BinaryenUnreachable(the_module); + relooperBlocks[4] = RelooperAddBlock(the_relooper, expressions[152]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[4], expressions[0], expressions[0]); + RelooperAddBranch(relooperBlocks[2], relooperBlocks[3], expressions[0], expressions[0]); + { + BinaryenType paramTypes[] = { 1, 1 }; + functionTypes[5] = BinaryenAddFunctionType(the_module, "rustfn-0-57", 1, paramTypes, 2); + } + expressions[153] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[154] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[153]); + expressions[155] = BinaryenSetLocal(the_module, 9, expressions[154]); + relooperBlocks[5] = RelooperAddBlock(the_relooper, expressions[155]); + RelooperAddBranch(relooperBlocks[5], relooperBlocks[0], expressions[0], expressions[0]); + expressions[156] = RelooperRenderAndDispose(the_relooper, relooperBlocks[5], 10, the_module); + { + BinaryenType varTypes[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 2 }; + functions[7] = BinaryenAddFunction(the_module, "main", functionTypes[5], varTypes, 10, expressions[156]); + } + BinaryenAddExport(the_module, "main", "main"); + { + BinaryenType paramTypes[] = { 0 }; + functionTypes[6] = BinaryenAddFunctionType(the_module, "__wasm_start", 0, paramTypes, 0); + } + { + const char* segments[] = { 0 }; + BinaryenExpressionRef segmentOffsets[] = { 0 }; + BinaryenIndex segmentSizes[] = { 0 }; + BinaryenSetMemory(the_module, 1, 1, NULL, segments, segmentOffsets, segmentSizes, 0); + } + expressions[157] = BinaryenConst(the_module, BinaryenLiteralInt32(65535)); + expressions[158] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[159] = BinaryenStore(the_module, 4, 0, 0, expressions[158], expressions[157], 1); + expressions[160] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[161] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + { + BinaryenExpressionRef operands[] = { expressions[160], expressions[161] }; + expressions[162] = BinaryenCall(the_module, "main", operands, 2, 1); + } + expressions[163] = BinaryenDrop(the_module, expressions[162]); + { + BinaryenExpressionRef children[] = { expressions[159], expressions[163] }; + expressions[164] = BinaryenBlock(the_module, NULL, children, 2, BinaryenUndefined()); + } + BinaryenAddExport(the_module, "__wasm_start", "rust_entry"); + { + BinaryenType varTypes[] = { 0 }; + functions[8] = BinaryenAddFunction(the_module, "__wasm_start", functionTypes[6], varTypes, 0, expressions[164]); + } + BinaryenSetStart(the_module, functions[8]); + the_relooper = RelooperCreate(); + expressions[165] = BinaryenGetLocal(the_module, 0, 1); + expressions[166] = BinaryenSetLocal(the_module, 2, expressions[165]); + expressions[167] = BinaryenGetLocal(the_module, 1, 1); + expressions[168] = BinaryenSetLocal(the_module, 3, expressions[167]); + expressions[169] = BinaryenGetLocal(the_module, 2, 1); + expressions[170] = BinaryenSetLocal(the_module, 4, expressions[169]); + expressions[171] = BinaryenGetLocal(the_module, 3, 1); + expressions[172] = BinaryenSetLocal(the_module, 5, expressions[171]); + expressions[173] = BinaryenGetLocal(the_module, 4, 1); + expressions[174] = BinaryenGetLocal(the_module, 5, 1); + expressions[175] = BinaryenUnary(the_module, 22, expressions[173]); + expressions[176] = BinaryenUnary(the_module, 22, expressions[174]); + expressions[177] = BinaryenBinary(the_module, 25, expressions[175], expressions[176]); + expressions[178] = BinaryenSetLocal(the_module, 10, expressions[177]); + expressions[179] = BinaryenGetLocal(the_module, 10, 2); + expressions[180] = BinaryenUnary(the_module, 24, expressions[179]); + expressions[181] = BinaryenConst(the_module, BinaryenLiteralInt64(32)); + expressions[182] = BinaryenGetLocal(the_module, 10, 2); + expressions[183] = BinaryenBinary(the_module, 36, expressions[182], expressions[181]); + expressions[184] = BinaryenUnary(the_module, 24, expressions[183]); + expressions[185] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[186] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[185]); + expressions[187] = BinaryenConst(the_module, BinaryenLiteralInt32(128)); + expressions[188] = BinaryenBinary(the_module, 1, expressions[186], expressions[187]); + expressions[189] = BinaryenTeeLocal(the_module, 6, expressions[188]); + expressions[190] = BinaryenStore(the_module, 4, 0, 0, expressions[185], expressions[189], 1); + expressions[191] = BinaryenGetLocal(the_module, 6, 1); + expressions[192] = BinaryenStore(the_module, 4, 0, 0, expressions[191], expressions[180], 1); + expressions[193] = BinaryenStore(the_module, 4, 4, 0, expressions[191], expressions[184], 1); + { + BinaryenExpressionRef children[] = { expressions[166], expressions[168], expressions[170], expressions[172], expressions[178], expressions[190], expressions[192], expressions[193] }; + expressions[194] = BinaryenBlock(the_module, "bb0", children, 8, BinaryenUndefined()); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[194]); + expressions[195] = BinaryenGetLocal(the_module, 6, 1); + expressions[196] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[195]); + expressions[197] = BinaryenSetLocal(the_module, 7, expressions[196]); + expressions[198] = BinaryenGetLocal(the_module, 8, 1); + expressions[199] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[200] = BinaryenStore(the_module, 4, 0, 0, expressions[199], expressions[198], 1); + expressions[201] = BinaryenGetLocal(the_module, 7, 1); + expressions[202] = BinaryenReturn(the_module, expressions[201]); + { + BinaryenExpressionRef children[] = { expressions[197], expressions[200], expressions[202] }; + expressions[203] = BinaryenBlock(the_module, "bb1", children, 3, BinaryenUndefined()); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[203]); + expressions[204] = BinaryenGetLocal(the_module, 6, 1); + expressions[205] = BinaryenLoad(the_module, 4, 0, 8, 0, 1, expressions[204]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[205], expressions[0]); + expressions[206] = BinaryenUnreachable(the_module); + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[206]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); + { + BinaryenType paramTypes[] = { 1, 1 }; + functionTypes[7] = BinaryenAddFunctionType(the_module, "rustfn-0-13", 1, paramTypes, 2); + } + expressions[207] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[208] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[207]); + expressions[209] = BinaryenSetLocal(the_module, 8, expressions[208]); + relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[209]); + RelooperAddBranch(relooperBlocks[3], relooperBlocks[0], expressions[0], expressions[0]); + expressions[210] = RelooperRenderAndDispose(the_relooper, relooperBlocks[3], 9, the_module); + { + BinaryenType varTypes[] = { 1, 1, 1, 1, 1, 1, 1, 1, 2 }; + functions[9] = BinaryenAddFunction(the_module, "_isize_as_tinycore::Add_::add", functionTypes[7], varTypes, 9, expressions[210]); + } + BinaryenAddExport(the_module, "_isize_as_tinycore::Add_::add", "_isize_as_tinycore::Add_::add"); + the_relooper = RelooperCreate(); + expressions[211] = BinaryenGetLocal(the_module, 0, 1); + expressions[212] = BinaryenSetLocal(the_module, 1, expressions[211]); + expressions[213] = BinaryenGetLocal(the_module, 1, 1); + expressions[214] = BinaryenSetLocal(the_module, 2, expressions[213]); + expressions[215] = BinaryenGetLocal(the_module, 2, 1); + expressions[216] = BinaryenUnary(the_module, 20, expressions[215]); + expressions[217] = BinaryenSetLocal(the_module, 3, expressions[216]); + expressions[218] = BinaryenGetLocal(the_module, 4, 1); + expressions[219] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[220] = BinaryenStore(the_module, 4, 0, 0, expressions[219], expressions[218], 1); + expressions[221] = BinaryenGetLocal(the_module, 3, 1); + expressions[222] = BinaryenReturn(the_module, expressions[221]); + { + BinaryenExpressionRef children[] = { expressions[212], expressions[214], expressions[217], expressions[220], expressions[222] }; + expressions[223] = BinaryenBlock(the_module, "bb0", children, 5, BinaryenUndefined()); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[223]); + { + BinaryenType paramTypes[] = { 1 }; + functionTypes[8] = BinaryenAddFunctionType(the_module, "rustfn-0-22", 1, paramTypes, 1); + } + expressions[224] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[225] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[224]); + expressions[226] = BinaryenSetLocal(the_module, 4, expressions[225]); + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[226]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[0]); + expressions[227] = RelooperRenderAndDispose(the_relooper, relooperBlocks[1], 5, the_module); + { + BinaryenType varTypes[] = { 1, 1, 1, 1, 1, 2 }; + functions[10] = BinaryenAddFunction(the_module, "_bool_as_tinycore::Not_::not", functionTypes[8], varTypes, 6, expressions[227]); + } + BinaryenAddExport(the_module, "_bool_as_tinycore::Not_::not", "_bool_as_tinycore::Not_::not"); + the_relooper = RelooperCreate(); + expressions[228] = BinaryenGetLocal(the_module, 0, 1); + expressions[229] = BinaryenSetLocal(the_module, 2, expressions[228]); + expressions[230] = BinaryenGetLocal(the_module, 1, 1); + expressions[231] = BinaryenSetLocal(the_module, 3, expressions[230]); + expressions[232] = BinaryenGetLocal(the_module, 2, 1); + expressions[233] = BinaryenSetLocal(the_module, 4, expressions[232]); + expressions[234] = BinaryenGetLocal(the_module, 3, 1); + expressions[235] = BinaryenSetLocal(the_module, 5, expressions[234]); + expressions[236] = BinaryenGetLocal(the_module, 4, 1); + expressions[237] = BinaryenGetLocal(the_module, 5, 1); + expressions[238] = BinaryenBinary(the_module, 15, expressions[236], expressions[237]); + expressions[239] = BinaryenSetLocal(the_module, 6, expressions[238]); + expressions[240] = BinaryenGetLocal(the_module, 7, 1); + expressions[241] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[242] = BinaryenStore(the_module, 4, 0, 0, expressions[241], expressions[240], 1); + expressions[243] = BinaryenGetLocal(the_module, 6, 1); + expressions[244] = BinaryenReturn(the_module, expressions[243]); + { + BinaryenExpressionRef children[] = { expressions[229], expressions[231], expressions[233], expressions[235], expressions[239], expressions[242], expressions[244] }; + expressions[245] = BinaryenBlock(the_module, "bb0", children, 7, BinaryenUndefined()); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[245]); + { + BinaryenType paramTypes[] = { 1, 1 }; + functionTypes[9] = BinaryenAddFunctionType(the_module, "rustfn-0-33", 1, paramTypes, 2); + } + expressions[246] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[247] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[246]); + expressions[248] = BinaryenSetLocal(the_module, 7, expressions[247]); + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[248]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[0]); + expressions[249] = RelooperRenderAndDispose(the_relooper, relooperBlocks[1], 8, the_module); + { + BinaryenType varTypes[] = { 1, 1, 1, 1, 1, 1, 1, 2 }; + functions[11] = BinaryenAddFunction(the_module, "_i16_as_tinycore::PartialEq_::eq", functionTypes[9], varTypes, 8, expressions[249]); + } + BinaryenAddExport(the_module, "_i16_as_tinycore::PartialEq_::eq", "_i16_as_tinycore::PartialEq_::eq"); + the_relooper = RelooperCreate(); + expressions[250] = BinaryenGetLocal(the_module, 0, 1); + expressions[251] = BinaryenSetLocal(the_module, 2, expressions[250]); + expressions[252] = BinaryenGetLocal(the_module, 1, 1); + expressions[253] = BinaryenSetLocal(the_module, 3, expressions[252]); + expressions[254] = BinaryenGetLocal(the_module, 2, 2); + expressions[255] = BinaryenSetLocal(the_module, 4, expressions[254]); + expressions[256] = BinaryenGetLocal(the_module, 3, 2); + expressions[257] = BinaryenSetLocal(the_module, 5, expressions[256]); + expressions[258] = BinaryenGetLocal(the_module, 4, 2); + expressions[259] = BinaryenGetLocal(the_module, 5, 2); + expressions[260] = BinaryenBinary(the_module, 40, expressions[258], expressions[259]); + expressions[261] = BinaryenSetLocal(the_module, 6, expressions[260]); + expressions[262] = BinaryenGetLocal(the_module, 7, 1); + expressions[263] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[264] = BinaryenStore(the_module, 4, 0, 0, expressions[263], expressions[262], 1); + expressions[265] = BinaryenGetLocal(the_module, 6, 1); + expressions[266] = BinaryenReturn(the_module, expressions[265]); + { + BinaryenExpressionRef children[] = { expressions[251], expressions[253], expressions[255], expressions[257], expressions[261], expressions[264], expressions[266] }; + expressions[267] = BinaryenBlock(the_module, "bb0", children, 7, BinaryenUndefined()); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[267]); + { + BinaryenType paramTypes[] = { 1, 1 }; + functionTypes[10] = BinaryenAddFunctionType(the_module, "rustfn-0-37", 1, paramTypes, 2); + } + expressions[268] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[269] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[268]); + expressions[270] = BinaryenSetLocal(the_module, 7, expressions[269]); + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[270]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[0]); + expressions[271] = RelooperRenderAndDispose(the_relooper, relooperBlocks[1], 8, the_module); + { + BinaryenType varTypes[] = { 1, 1, 2, 2, 1, 1, 1, 2 }; + functions[12] = BinaryenAddFunction(the_module, "_i64_as_tinycore::PartialEq_::eq", functionTypes[10], varTypes, 8, expressions[271]); + } + BinaryenAddExport(the_module, "_i64_as_tinycore::PartialEq_::eq", "_i64_as_tinycore::PartialEq_::eq"); + BinaryenModuleValidate(the_module); + BinaryenModuleDispose(the_module); + functionTypes.clear(); + expressions.clear(); + functions.clear(); + relooperBlocks.clear(); +} + diff --git a/src/vendor/bitflags-0.8.2/.cargo-ok b/src/binaryen/test/example/c-api-relooper-unreachable-if.txt similarity index 100% rename from src/vendor/bitflags-0.8.2/.cargo-ok rename to src/binaryen/test/example/c-api-relooper-unreachable-if.txt diff --git a/src/binaryen/test/example/c-api-unused-mem.cpp b/src/binaryen/test/example/c-api-unused-mem.cpp new file mode 100644 index 0000000000..a0de5637b8 --- /dev/null +++ b/src/binaryen/test/example/c-api-unused-mem.cpp @@ -0,0 +1,93 @@ +// beginning a Binaryen API trace +#include +#include +#include +#include "binaryen-c.h" +int main() { + std::map functionTypes; + std::map expressions; + std::map functions; + std::map relooperBlocks; + BinaryenModuleRef the_module = NULL; + RelooperRef the_relooper = NULL; + the_module = BinaryenModuleCreate(); + expressions[size_t(NULL)] = BinaryenExpressionRef(NULL); + BinaryenModuleAutoDrop(the_module); + { + const char* segments[] = { 0 }; + BinaryenExpressionRef segmentOffsets[] = { 0 }; + BinaryenIndex segmentSizes[] = { 0 }; + BinaryenSetMemory(the_module, 256, 256, "memory", segments, segmentOffsets, segmentSizes, 0); + } + the_relooper = RelooperCreate(); + { + BinaryenExpressionRef children[] = { 0 }; + expressions[1] = BinaryenBlock(the_module, "bb0", children, 0, BinaryenUndefined()); + } + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[1]); + expressions[2] = BinaryenGetLocal(the_module, 0, 1); + expressions[3] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[4] = BinaryenStore(the_module, 4, 0, 0, expressions[3], expressions[2], 1); + expressions[5] = BinaryenReturn(the_module, expressions[0]); + { + BinaryenExpressionRef children[] = { expressions[4], expressions[5] }; + expressions[6] = BinaryenBlock(the_module, "bb1", children, 2, BinaryenUndefined()); + } + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[6]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); + { + BinaryenType paramTypes[] = { 0 }; + functionTypes[0] = BinaryenAddFunctionType(the_module, "rustfn-0-3", 0, paramTypes, 0); + } + expressions[7] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[8] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[7]); + expressions[9] = BinaryenSetLocal(the_module, 0, expressions[8]); + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[9]); + RelooperAddBranch(relooperBlocks[2], relooperBlocks[0], expressions[0], expressions[0]); + expressions[10] = RelooperRenderAndDispose(the_relooper, relooperBlocks[2], 1, the_module); + { + BinaryenType varTypes[] = { 1, 1, 2 }; + functions[0] = BinaryenAddFunction(the_module, "main", functionTypes[0], varTypes, 3, expressions[10]); + } + BinaryenAddExport(the_module, "main", "main"); + { + BinaryenType paramTypes[] = { 0 }; + functionTypes[1] = BinaryenAddFunctionType(the_module, "__wasm_start", 0, paramTypes, 0); + } + { + const char* segments[] = { 0 }; + BinaryenExpressionRef segmentOffsets[] = { 0 }; + BinaryenIndex segmentSizes[] = { 0 }; + BinaryenSetMemory(the_module, 1024, 1024, NULL, segments, segmentOffsets, segmentSizes, 0); + } + expressions[11] = BinaryenConst(the_module, BinaryenLiteralInt32(65535)); + expressions[12] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[13] = BinaryenStore(the_module, 4, 0, 0, expressions[12], expressions[11], 1); + { + BinaryenExpressionRef operands[] = { 0 }; + expressions[14] = BinaryenCall(the_module, "main", operands, 0, 0); + } + { + BinaryenExpressionRef children[] = { expressions[13], expressions[14] }; + expressions[15] = BinaryenBlock(the_module, NULL, children, 2, BinaryenUndefined()); + } + BinaryenAddExport(the_module, "__wasm_start", "rust_entry"); + { + BinaryenType varTypes[] = { 0 }; + functions[1] = BinaryenAddFunction(the_module, "__wasm_start", functionTypes[1], varTypes, 0, expressions[15]); + } + BinaryenModuleValidate(the_module); + BinaryenModulePrint(the_module); + // check that binary read-write works + { + char buffer[1024]; + size_t size = BinaryenModuleWrite(the_module, buffer, 1024); + printf("%d\n", size); + BinaryenModuleRef copy = BinaryenModuleRead(buffer, size); + BinaryenModulePrint(copy); + BinaryenModuleDispose(copy); + } + BinaryenModuleDispose(the_module); + return 0; +} + diff --git a/src/binaryen/test/example/c-api-unused-mem.txt b/src/binaryen/test/example/c-api-unused-mem.txt new file mode 100644 index 0000000000..715a5e6552 --- /dev/null +++ b/src/binaryen/test/example/c-api-unused-mem.txt @@ -0,0 +1,98 @@ +(module + (type $rustfn-0-3 (func)) + (type $__wasm_start (func)) + (memory $0 1024 1024) + (export "memory" (memory $0)) + (export "main" (func $main)) + (export "rust_entry" (func $__wasm_start)) + (func $main (; 0 ;) (type $rustfn-0-3) + (local $0 i32) + (local $1 i32) + (local $2 i64) + (block $block$1$break + (set_local $0 + (i32.load + (i32.const 0) + ) + ) + (block + (br $block$1$break) + ) + ) + (block + (block $block$2$break + (block $bb0 + ) + (block + (br $block$2$break) + ) + ) + (block + (block $bb1 + (i32.store + (i32.const 0) + (get_local $0) + ) + (return) + ) + ) + ) + ) + (func $__wasm_start (; 1 ;) (type $__wasm_start) + (i32.store + (i32.const 0) + (i32.const 65535) + ) + (call $main) + ) +) +169 +(module + (type $0 (func)) + (type $1 (func)) + (memory $0 1024 1024) + (export "memory" (memory $0)) + (export "main" (func $main)) + (export "rust_entry" (func $__wasm_start)) + (func $main (; 0 ;) (type $0) + (local $var$0 i32) + (local $var$1 i32) + (local $var$2 i64) + (block $label$1 + (set_local $var$0 + (i32.load + (i32.const 0) + ) + ) + (block $label$2 + (br $label$1) + ) + ) + (block $label$3 + (block $label$4 + (block $label$5 + ) + (block $label$6 + (br $label$4) + ) + ) + (block $label$7 + (block $label$8 + (i32.store + (i32.const 0) + (get_local $var$0) + ) + (return) + ) + (unreachable) + ) + ) + ) + (func $__wasm_start (; 1 ;) (type $1) + (i32.store + (i32.const 0) + (i32.const 65535) + ) + (call $main) + ) +) diff --git a/src/binaryen/test/example/relooper-fuzz.c b/src/binaryen/test/example/relooper-fuzz.c new file mode 100644 index 0000000000..d813c76a9f --- /dev/null +++ b/src/binaryen/test/example/relooper-fuzz.c @@ -0,0 +1,274 @@ + + +#include +#include + +#include "binaryen-c.h" + +// globals: address 4 is index +// decisions are at address 8+ + +int main() { + BinaryenModuleRef module = BinaryenModuleCreate(); + + // check() + + // if the end, halt + BinaryenExpressionRef halter = BinaryenIf(module, + BinaryenBinary(module, + BinaryenEqInt32(), + BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), + BinaryenConst(module, BinaryenLiteralInt32(4 * 27)) // jumps of 4 bytes + ), + BinaryenUnreachable(module), + NULL + ); + // increment index + BinaryenExpressionRef incer = BinaryenStore(module, + 4, 0, 0, + BinaryenConst(module, BinaryenLiteralInt32(4)), + BinaryenBinary(module, + BinaryenAddInt32(), + BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), + BinaryenConst(module, BinaryenLiteralInt32(4)) + ), + BinaryenInt32() + ); + + // optionally, print the return value + BinaryenExpressionRef args[] = { + BinaryenBinary(module, + BinaryenSubInt32(), + BinaryenConst(module, BinaryenLiteralInt32(0)), + BinaryenLoad(module, + 4, 0, 4, 0, BinaryenInt32(), + BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))) + ) + ) + }; + BinaryenExpressionRef debugger; + if (1) debugger = BinaryenCallImport(module, "print", args, 1, BinaryenNone()); + else debugger = BinaryenNop(module); + + // return the decision. need to subtract 4 that we just added, and add 8 since that's where we start, so overall offset 4 + BinaryenExpressionRef returner = BinaryenLoad(module, + 4, 0, 4, 0, BinaryenInt32(), + BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))) + ); + BinaryenExpressionRef checkBodyList[] = { halter, incer, debugger, returner }; + BinaryenExpressionRef checkBody = BinaryenBlock(module, NULL, checkBodyList, sizeof(checkBodyList) / sizeof(BinaryenExpressionRef), BinaryenUndefined()); + BinaryenFunctionTypeRef i = BinaryenAddFunctionType(module, "i", BinaryenInt32(), NULL, 0); + BinaryenAddFunction(module, "check", i, NULL, 0, checkBody); + + // contents of main() begin here + + RelooperRef relooper = RelooperCreate(); + + + RelooperBlockRef b0; + { + BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(0)) }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenInt32())) + }; + b0 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, BinaryenUndefined())); + } + + RelooperBlockRef b1; + { + BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1)) }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenInt32())) + }; + b1 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, BinaryenUndefined())); + } + + RelooperBlockRef b2; + { + BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(2)) }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenInt32())) + }; + b2 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, BinaryenUndefined())); + } + + RelooperBlockRef b3; + { + BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(3)) }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenInt32())) + }; + b3 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, BinaryenUndefined())); + } + + RelooperBlockRef b4; + { + BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(4)) }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenInt32())) + }; + b4 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, BinaryenUndefined())); + } + + RelooperBlockRef b5; + { + BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(5)) }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenInt32())) + }; + b5 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, BinaryenUndefined())); + } + + RelooperBlockRef b6; + { + BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(6)) }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenInt32())) + }; + b6 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, BinaryenUndefined())); + } + + RelooperBlockRef b7; + { + BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(7)) }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenInt32())) + }; + b7 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, BinaryenUndefined())); + } + + RelooperBlockRef b8; + { + BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(8)) }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenInt32())) + }; + b8 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, BinaryenUndefined())); + } + + RelooperAddBranch(b0, b5, BinaryenBinary(module, + BinaryenEqInt32(), + BinaryenBinary(module, + BinaryenRemUInt32(), + BinaryenGetLocal(module, 0, BinaryenInt32()), + BinaryenConst(module, BinaryenLiteralInt32(2)) + ), + BinaryenConst(module, BinaryenLiteralInt32(0)) + ), NULL); + + RelooperAddBranch(b0, b8, NULL, NULL); + + RelooperAddBranch(b1, b5, NULL, NULL); + + RelooperAddBranch(b2, b5, NULL, NULL); + + RelooperAddBranch(b3, b5, BinaryenBinary(module, + BinaryenEqInt32(), + BinaryenBinary(module, + BinaryenRemUInt32(), + BinaryenGetLocal(module, 0, BinaryenInt32()), + BinaryenConst(module, BinaryenLiteralInt32(2)) + ), + BinaryenConst(module, BinaryenLiteralInt32(0)) + ), NULL); + + RelooperAddBranch(b3, b8, NULL, NULL); + + RelooperAddBranch(b4, b4, BinaryenBinary(module, + BinaryenEqInt32(), + BinaryenBinary(module, + BinaryenRemUInt32(), + BinaryenGetLocal(module, 0, BinaryenInt32()), + BinaryenConst(module, BinaryenLiteralInt32(3)) + ), + BinaryenConst(module, BinaryenLiteralInt32(0)) + ), NULL); + + RelooperAddBranch(b4, b5, BinaryenBinary(module, + BinaryenEqInt32(), + BinaryenBinary(module, + BinaryenRemUInt32(), + BinaryenGetLocal(module, 0, BinaryenInt32()), + BinaryenConst(module, BinaryenLiteralInt32(3)) + ), + BinaryenConst(module, BinaryenLiteralInt32(1)) + ), NULL); + + RelooperAddBranch(b4, b2, NULL, NULL); + + RelooperAddBranch(b5, b4, BinaryenBinary(module, + BinaryenEqInt32(), + BinaryenBinary(module, + BinaryenRemUInt32(), + BinaryenGetLocal(module, 0, BinaryenInt32()), + BinaryenConst(module, BinaryenLiteralInt32(2)) + ), + BinaryenConst(module, BinaryenLiteralInt32(0)) + ), NULL); + + RelooperAddBranch(b5, b5, NULL, NULL); + + RelooperAddBranch(b6, b6, NULL, NULL); + + RelooperAddBranch(b7, b8, NULL, NULL); + + RelooperAddBranch(b8, b4, NULL, NULL); + + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, b0, 1, module); + + int decisions[] = { 89, 12, 78, 149, 118, 179, 127, 80, 21, 34, 119, 98, 38, 29, 36, 147, 13, 55, 166, 16, 143, 52, 130, 150, 176, 91, 34 }; + int numDecisions = sizeof(decisions)/sizeof(int); + + BinaryenExpressionRef full[numDecisions + 1]; // write out all the decisions, then the body of the function + + { + int i; + for (i = 0; i < numDecisions; i++) { + full[i] = BinaryenStore(module, + 4, 0, 0, + BinaryenConst(module, BinaryenLiteralInt32(8 + 4 * i)), + BinaryenConst(module, BinaryenLiteralInt32(decisions[i])), + BinaryenInt32() + ); + } + } + full[numDecisions] = body; + BinaryenExpressionRef all = BinaryenBlock(module, NULL, full, numDecisions + 1, BinaryenUndefined()); + + BinaryenFunctionTypeRef v = BinaryenAddFunctionType(module, "v", BinaryenNone(), NULL, 0); + BinaryenType localTypes[] = { BinaryenInt32(), BinaryenInt32() }; // state, free-for-label + BinaryenFunctionRef theMain = BinaryenAddFunction(module, "main", v, localTypes, 2, all); + BinaryenSetStart(module, theMain); + + // import + + BinaryenType iparams[] = { BinaryenInt32() }; + BinaryenFunctionTypeRef vi = BinaryenAddFunctionType(module, "vi", BinaryenNone(), iparams, 1); + BinaryenAddImport(module, "print", "spectest", "print", vi); + + // memory + BinaryenSetMemory(module, 1, 1, "mem", NULL, NULL, NULL, 0); + + assert(BinaryenModuleValidate(module)); + + BinaryenModulePrint(module); + + BinaryenModuleOptimize(module); + + assert(BinaryenModuleValidate(module)); + + BinaryenModulePrint(module); + + BinaryenModuleDispose(module); + + return 0; +} diff --git a/src/binaryen/test/example/relooper-fuzz.txt b/src/binaryen/test/example/relooper-fuzz.txt new file mode 100644 index 0000000000..e53ca13ce8 --- /dev/null +++ b/src/binaryen/test/example/relooper-fuzz.txt @@ -0,0 +1,537 @@ +(module + (type $i (func (result i32))) + (type $v (func)) + (type $vi (func (param i32))) + (import "spectest" "print" (func $print (param i32))) + (memory $0 1 1) + (export "mem" (memory $0)) + (start $main) + (func $check (; 1 ;) (type $i) (result i32) + (if + (i32.eq + (i32.load + (i32.const 4) + ) + (i32.const 108) + ) + (unreachable) + ) + (i32.store + (i32.const 4) + (i32.add + (i32.load + (i32.const 4) + ) + (i32.const 4) + ) + ) + (call $print + (i32.sub + (i32.const 0) + (i32.load offset=4 + (i32.load + (i32.const 4) + ) + ) + ) + ) + (i32.load offset=4 + (i32.load + (i32.const 4) + ) + ) + ) + (func $main (; 2 ;) (type $v) + (local $0 i32) + (local $1 i32) + (i32.store + (i32.const 8) + (i32.const 89) + ) + (i32.store + (i32.const 12) + (i32.const 12) + ) + (i32.store + (i32.const 16) + (i32.const 78) + ) + (i32.store + (i32.const 20) + (i32.const 149) + ) + (i32.store + (i32.const 24) + (i32.const 118) + ) + (i32.store + (i32.const 28) + (i32.const 179) + ) + (i32.store + (i32.const 32) + (i32.const 127) + ) + (i32.store + (i32.const 36) + (i32.const 80) + ) + (i32.store + (i32.const 40) + (i32.const 21) + ) + (i32.store + (i32.const 44) + (i32.const 34) + ) + (i32.store + (i32.const 48) + (i32.const 119) + ) + (i32.store + (i32.const 52) + (i32.const 98) + ) + (i32.store + (i32.const 56) + (i32.const 38) + ) + (i32.store + (i32.const 60) + (i32.const 29) + ) + (i32.store + (i32.const 64) + (i32.const 36) + ) + (i32.store + (i32.const 68) + (i32.const 147) + ) + (i32.store + (i32.const 72) + (i32.const 13) + ) + (i32.store + (i32.const 76) + (i32.const 55) + ) + (i32.store + (i32.const 80) + (i32.const 166) + ) + (i32.store + (i32.const 84) + (i32.const 16) + ) + (i32.store + (i32.const 88) + (i32.const 143) + ) + (i32.store + (i32.const 92) + (i32.const 52) + ) + (i32.store + (i32.const 96) + (i32.const 130) + ) + (i32.store + (i32.const 100) + (i32.const 150) + ) + (i32.store + (i32.const 104) + (i32.const 176) + ) + (i32.store + (i32.const 108) + (i32.const 91) + ) + (i32.store + (i32.const 112) + (i32.const 34) + ) + (block + (block + (block $block$6$break + (block $block$5$break + (block + (call $print + (i32.const 0) + ) + (set_local $0 + (call $check) + ) + ) + (if + (i32.eq + (i32.rem_u + (get_local $0) + (i32.const 2) + ) + (i32.const 0) + ) + (block + (set_local $1 + (i32.const 6) + ) + (br $block$6$break) + ) + (block + (block + (call $print + (i32.const 8) + ) + (set_local $0 + (call $check) + ) + ) + (block + (br $block$5$break) + ) + ) + ) + ) + ) + ) + (loop $shape$3$continue + (block $block$5$break0 + (if + (i32.eq + (get_local $1) + (i32.const 6) + ) + (block + (set_local $1 + (i32.const 0) + ) + (block + (call $print + (i32.const 5) + ) + (set_local $0 + (call $check) + ) + ) + (if + (i32.eq + (i32.rem_u + (get_local $0) + (i32.const 2) + ) + (i32.const 0) + ) + (br $shape$3$continue) + (block + (set_local $1 + (i32.const 6) + ) + (br $shape$3$continue) + ) + ) + ) + ) + ) + (block + (block $block$3$break + (block + (call $print + (i32.const 4) + ) + (set_local $0 + (call $check) + ) + ) + (if + (i32.eq + (i32.rem_u + (get_local $0) + (i32.const 3) + ) + (i32.const 0) + ) + (br $shape$3$continue) + (if + (i32.eq + (i32.rem_u + (get_local $0) + (i32.const 3) + ) + (i32.const 1) + ) + (block + (set_local $1 + (i32.const 6) + ) + (br $shape$3$continue) + ) + (br $block$3$break) + ) + ) + ) + (block + (block + (call $print + (i32.const 2) + ) + (set_local $0 + (call $check) + ) + ) + (block + (set_local $1 + (i32.const 6) + ) + (br $shape$3$continue) + ) + ) + ) + ) + ) + ) +) +(module + (type $i (func (result i32))) + (type $v (func)) + (type $vi (func (param i32))) + (import "spectest" "print" (func $print (param i32))) + (memory $0 1 1) + (export "mem" (memory $0)) + (start $main) + (func $check (; 1 ;) (type $i) (result i32) + (if + (i32.eq + (i32.load + (i32.const 4) + ) + (i32.const 108) + ) + (unreachable) + ) + (i32.store + (i32.const 4) + (i32.add + (i32.load + (i32.const 4) + ) + (i32.const 4) + ) + ) + (call $print + (i32.sub + (i32.const 0) + (i32.load offset=4 + (i32.load + (i32.const 4) + ) + ) + ) + ) + (i32.load offset=4 + (i32.load + (i32.const 4) + ) + ) + ) + (func $main (; 2 ;) (type $v) + (local $0 i32) + (local $1 i32) + (i32.store + (i32.const 8) + (i32.const 89) + ) + (i32.store + (i32.const 12) + (i32.const 12) + ) + (i32.store + (i32.const 16) + (i32.const 78) + ) + (i32.store + (i32.const 20) + (i32.const 149) + ) + (i32.store + (i32.const 24) + (i32.const 118) + ) + (i32.store + (i32.const 28) + (i32.const 179) + ) + (i32.store + (i32.const 32) + (i32.const 127) + ) + (i32.store + (i32.const 36) + (i32.const 80) + ) + (i32.store + (i32.const 40) + (i32.const 21) + ) + (i32.store + (i32.const 44) + (i32.const 34) + ) + (i32.store + (i32.const 48) + (i32.const 119) + ) + (i32.store + (i32.const 52) + (i32.const 98) + ) + (i32.store + (i32.const 56) + (i32.const 38) + ) + (i32.store + (i32.const 60) + (i32.const 29) + ) + (i32.store + (i32.const 64) + (i32.const 36) + ) + (i32.store + (i32.const 68) + (i32.const 147) + ) + (i32.store + (i32.const 72) + (i32.const 13) + ) + (i32.store + (i32.const 76) + (i32.const 55) + ) + (i32.store + (i32.const 80) + (i32.const 166) + ) + (i32.store + (i32.const 84) + (i32.const 16) + ) + (i32.store + (i32.const 88) + (i32.const 143) + ) + (i32.store + (i32.const 92) + (i32.const 52) + ) + (i32.store + (i32.const 96) + (i32.const 130) + ) + (i32.store + (i32.const 100) + (i32.const 150) + ) + (i32.store + (i32.const 104) + (i32.const 176) + ) + (i32.store + (i32.const 108) + (i32.const 91) + ) + (i32.store + (i32.const 112) + (i32.const 34) + ) + (call $print + (i32.const 0) + ) + (if + (i32.rem_u + (call $check) + (i32.const 2) + ) + (block + (call $print + (i32.const 8) + ) + (drop + (call $check) + ) + ) + (set_local $0 + (i32.const 6) + ) + ) + (loop $shape$3$continue + (if + (i32.eq + (get_local $0) + (i32.const 6) + ) + (block + (set_local $0 + (i32.const 0) + ) + (call $print + (i32.const 5) + ) + (br_if $shape$3$continue + (i32.eqz + (i32.rem_u + (call $check) + (i32.const 2) + ) + ) + ) + (set_local $0 + (i32.const 6) + ) + (br $shape$3$continue) + ) + ) + (call $print + (i32.const 4) + ) + (br_if $shape$3$continue + (i32.eqz + (i32.rem_u + (tee_local $1 + (call $check) + ) + (i32.const 3) + ) + ) + ) + (if + (i32.eq + (i32.rem_u + (get_local $1) + (i32.const 3) + ) + (i32.const 1) + ) + (block + (set_local $0 + (i32.const 6) + ) + (br $shape$3$continue) + ) + (block + (call $print + (i32.const 2) + ) + (drop + (call $check) + ) + (set_local $0 + (i32.const 6) + ) + (br $shape$3$continue) + ) + ) + ) + ) +) diff --git a/src/binaryen/test/example/relooper-fuzz1.c b/src/binaryen/test/example/relooper-fuzz1.c new file mode 100644 index 0000000000..4293044f25 --- /dev/null +++ b/src/binaryen/test/example/relooper-fuzz1.c @@ -0,0 +1,346 @@ + + +#include +#include + +#include "binaryen-c.h" + +// globals: address 4 is index +// decisions are at address 8+ + +int main() { + BinaryenModuleRef module = BinaryenModuleCreate(); + + // check() + + // if the end, halt + BinaryenExpressionRef halter = BinaryenIf(module, + BinaryenBinary(module, + BinaryenEqInt32(), + BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), + BinaryenConst(module, BinaryenLiteralInt32(4))), + BinaryenConst(module, BinaryenLiteralInt32(4 * 30)) // jumps of 4 bytes + ), + BinaryenUnreachable(module), + NULL + ); + // increment index + BinaryenExpressionRef incer = BinaryenStore(module, + 4, 0, 0, + BinaryenConst(module, BinaryenLiteralInt32(4)), + BinaryenBinary(module, + BinaryenAddInt32(), + BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), + BinaryenConst(module, BinaryenLiteralInt32(4))), + BinaryenConst(module, BinaryenLiteralInt32(4)) + ), + BinaryenInt32() + ); + + // optionally, print the return value + BinaryenExpressionRef args[] = { + BinaryenBinary(module, + BinaryenSubInt32(), + BinaryenConst(module, BinaryenLiteralInt32(0)), + BinaryenLoad(module, + 4, 0, 4, 0, BinaryenInt32(), + BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), + BinaryenConst(module, BinaryenLiteralInt32(4))) + ) + ) + }; + BinaryenExpressionRef debugger; + if (1) debugger = BinaryenCallImport(module, "print", args, 1, + BinaryenNone()); + else debugger = BinaryenNop(module); + + // return the decision. need to subtract 4 that we just added, + // and add 8 since that's where we start, so overall offset 4 + BinaryenExpressionRef returner = BinaryenLoad(module, + 4, 0, 4, 0, BinaryenInt32(), + BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), + BinaryenConst(module, BinaryenLiteralInt32(4))) + ); + BinaryenExpressionRef checkBodyList[] = { halter, incer, debugger, + returner }; + BinaryenExpressionRef checkBody = BinaryenBlock(module, + NULL, checkBodyList, sizeof(checkBodyList) / sizeof(BinaryenExpressionRef), + BinaryenUndefined() + ); + BinaryenFunctionTypeRef i = BinaryenAddFunctionType(module, "i", + BinaryenInt32(), + NULL, 0); + BinaryenAddFunction(module, "check", i, NULL, 0, checkBody); + + // contents of main() begin here + + RelooperRef relooper = RelooperCreate(); + + + RelooperBlockRef b0; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(0)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b0 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, + BinaryenUndefined())); + + } + + RelooperBlockRef b1; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(1)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b1 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, + BinaryenUndefined())); + + } + + RelooperBlockRef b2; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(2)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b2 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, + BinaryenUndefined())); + + } + + RelooperBlockRef b3; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(3)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b3 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, + BinaryenUndefined())); + + } + + RelooperBlockRef b4; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(4)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b4 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, + BinaryenUndefined())); + + } + + RelooperBlockRef b5; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(5)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b5 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, + BinaryenUndefined())); + + } + + RelooperBlockRef b6; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(6)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b6 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, + BinaryenUndefined())); + + } + + RelooperBlockRef b7; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(7)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b7 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, + BinaryenUndefined())); + + } + + RelooperBlockRef b8; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(8)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b8 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, + BinaryenUndefined())); + + } + + RelooperBlockRef b9; + { + BinaryenExpressionRef args[] = { + BinaryenConst(module, BinaryenLiteralInt32(9)) + }; + BinaryenExpressionRef list[] = { + BinaryenCallImport(module, "print", args, 1, BinaryenNone()), + BinaryenSetLocal(module, 0, BinaryenCall(module, "check", NULL, 0, + BinaryenInt32())) + }; + + b9 = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, + BinaryenUndefined())); + + } + + RelooperAddBranch(b0, b2, BinaryenBinary(module, + BinaryenEqInt32(), + BinaryenBinary(module, + BinaryenRemUInt32(), + BinaryenGetLocal(module, 0, BinaryenInt32()), + BinaryenConst(module, BinaryenLiteralInt32(4)) + ), + BinaryenConst(module, BinaryenLiteralInt32(0)) + ), NULL); + + RelooperAddBranch(b0, b7, BinaryenBinary(module, + BinaryenEqInt32(), + BinaryenBinary(module, + BinaryenRemUInt32(), + BinaryenGetLocal(module, 0, BinaryenInt32()), + BinaryenConst(module, BinaryenLiteralInt32(4)) + ), + BinaryenConst(module, BinaryenLiteralInt32(2)) + ), NULL); + + RelooperAddBranch(b0, b3, NULL, NULL); + + RelooperAddBranch(b2, b3, BinaryenBinary(module, + BinaryenEqInt32(), + BinaryenBinary(module, + BinaryenRemUInt32(), + BinaryenGetLocal(module, 0, BinaryenInt32()), + BinaryenConst(module, BinaryenLiteralInt32(2)) + ), + BinaryenConst(module, BinaryenLiteralInt32(0)) + ), NULL); + + RelooperAddBranch(b2, b9, NULL, NULL); + + RelooperAddBranch(b3, b3, NULL, NULL); + + RelooperAddBranch(b7, b2, BinaryenBinary(module, + BinaryenEqInt32(), + BinaryenBinary(module, + BinaryenRemUInt32(), + BinaryenGetLocal(module, 0, BinaryenInt32()), + BinaryenConst(module, BinaryenLiteralInt32(3)) + ), + BinaryenConst(module, BinaryenLiteralInt32(0)) + ), NULL); + + RelooperAddBranch(b7, b9, NULL, NULL); + + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, b0, 1, + module); + + int decisions[] = { 67, 131, 49, 36, 112, 161, 62, 166, 16, 88, 176, 152, 161, 194, 117, 180, 60, 166, 55, 183, 150, 73, 196, 143, 76, 182, 97, 140, 126, 3 }; + int numDecisions = sizeof(decisions)/sizeof(int); + + // write out all the decisions, then the body of the function + BinaryenExpressionRef full[numDecisions + 1]; + + { + int i; + for (i = 0; i < numDecisions; i++) { + full[i] = BinaryenStore(module, + 4, 0, 0, + BinaryenConst(module, BinaryenLiteralInt32(8 + 4 * i)), + BinaryenConst(module, BinaryenLiteralInt32(decisions[i])), + BinaryenInt32() + ); + } + } + full[numDecisions] = body; + BinaryenExpressionRef all = BinaryenBlock(module, NULL, full, + numDecisions + 1, + BinaryenUndefined()); + + BinaryenFunctionTypeRef v = BinaryenAddFunctionType(module, "v", + BinaryenNone(), + NULL, 0); + // locals: state, free-for-label + BinaryenType localTypes[] = { BinaryenInt32(), BinaryenInt32() }; + BinaryenFunctionRef theMain = BinaryenAddFunction(module, "main", v, + localTypes, 2, all); + BinaryenSetStart(module, theMain); + + // import + + BinaryenType iparams[] = { BinaryenInt32() }; + BinaryenFunctionTypeRef vi = BinaryenAddFunctionType(module, "vi", + BinaryenNone(), + iparams, 1); + BinaryenAddImport(module, "print", "spectest", "print", vi); + + // memory + BinaryenSetMemory(module, 1, 1, "mem", NULL, NULL, NULL, 0); + + assert(BinaryenModuleValidate(module)); + + BinaryenModulePrint(module); + + BinaryenModuleOptimize(module); + + assert(BinaryenModuleValidate(module)); + + BinaryenModulePrint(module); + + BinaryenModuleDispose(module); + + return 0; +} diff --git a/src/binaryen/test/example/relooper-fuzz1.txt b/src/binaryen/test/example/relooper-fuzz1.txt new file mode 100644 index 0000000000..6d0bba603a --- /dev/null +++ b/src/binaryen/test/example/relooper-fuzz1.txt @@ -0,0 +1,496 @@ +(module + (type $i (func (result i32))) + (type $v (func)) + (type $vi (func (param i32))) + (import "spectest" "print" (func $print (param i32))) + (memory $0 1 1) + (export "mem" (memory $0)) + (start $main) + (func $check (; 1 ;) (type $i) (result i32) + (if + (i32.eq + (i32.load + (i32.const 4) + ) + (i32.const 120) + ) + (unreachable) + ) + (i32.store + (i32.const 4) + (i32.add + (i32.load + (i32.const 4) + ) + (i32.const 4) + ) + ) + (call $print + (i32.sub + (i32.const 0) + (i32.load offset=4 + (i32.load + (i32.const 4) + ) + ) + ) + ) + (i32.load offset=4 + (i32.load + (i32.const 4) + ) + ) + ) + (func $main (; 2 ;) (type $v) + (local $0 i32) + (local $1 i32) + (i32.store + (i32.const 8) + (i32.const 67) + ) + (i32.store + (i32.const 12) + (i32.const 131) + ) + (i32.store + (i32.const 16) + (i32.const 49) + ) + (i32.store + (i32.const 20) + (i32.const 36) + ) + (i32.store + (i32.const 24) + (i32.const 112) + ) + (i32.store + (i32.const 28) + (i32.const 161) + ) + (i32.store + (i32.const 32) + (i32.const 62) + ) + (i32.store + (i32.const 36) + (i32.const 166) + ) + (i32.store + (i32.const 40) + (i32.const 16) + ) + (i32.store + (i32.const 44) + (i32.const 88) + ) + (i32.store + (i32.const 48) + (i32.const 176) + ) + (i32.store + (i32.const 52) + (i32.const 152) + ) + (i32.store + (i32.const 56) + (i32.const 161) + ) + (i32.store + (i32.const 60) + (i32.const 194) + ) + (i32.store + (i32.const 64) + (i32.const 117) + ) + (i32.store + (i32.const 68) + (i32.const 180) + ) + (i32.store + (i32.const 72) + (i32.const 60) + ) + (i32.store + (i32.const 76) + (i32.const 166) + ) + (i32.store + (i32.const 80) + (i32.const 55) + ) + (i32.store + (i32.const 84) + (i32.const 183) + ) + (i32.store + (i32.const 88) + (i32.const 150) + ) + (i32.store + (i32.const 92) + (i32.const 73) + ) + (i32.store + (i32.const 96) + (i32.const 196) + ) + (i32.store + (i32.const 100) + (i32.const 143) + ) + (i32.store + (i32.const 104) + (i32.const 76) + ) + (i32.store + (i32.const 108) + (i32.const 182) + ) + (i32.store + (i32.const 112) + (i32.const 97) + ) + (i32.store + (i32.const 116) + (i32.const 140) + ) + (i32.store + (i32.const 120) + (i32.const 126) + ) + (i32.store + (i32.const 124) + (i32.const 3) + ) + (block + (block $block$10$break + (block $block$4$break + (block $block$3$break + (block + (call $print + (i32.const 0) + ) + (set_local $0 + (call $check) + ) + ) + (if + (i32.eq + (i32.rem_u + (get_local $0) + (i32.const 4) + ) + (i32.const 0) + ) + (br $block$3$break) + (if + (i32.eq + (i32.rem_u + (get_local $0) + (i32.const 4) + ) + (i32.const 2) + ) + (block + (block + (call $print + (i32.const 7) + ) + (set_local $0 + (call $check) + ) + ) + (if + (i32.eq + (i32.rem_u + (get_local $0) + (i32.const 3) + ) + (i32.const 0) + ) + (br $block$3$break) + (br $block$10$break) + ) + ) + (br $block$4$break) + ) + ) + ) + (block + (block + (call $print + (i32.const 2) + ) + (set_local $0 + (call $check) + ) + ) + (if + (i32.eq + (i32.rem_u + (get_local $0) + (i32.const 2) + ) + (i32.const 0) + ) + (br $block$4$break) + (br $block$10$break) + ) + ) + ) + (loop $shape$6$continue + (block + (call $print + (i32.const 3) + ) + (set_local $0 + (call $check) + ) + ) + (block + (br $shape$6$continue) + ) + ) + ) + (block + (block + (call $print + (i32.const 9) + ) + (set_local $0 + (call $check) + ) + ) + ) + ) + ) +) +(module + (type $i (func (result i32))) + (type $v (func)) + (type $vi (func (param i32))) + (import "spectest" "print" (func $print (param i32))) + (memory $0 1 1) + (export "mem" (memory $0)) + (start $main) + (func $check (; 1 ;) (type $i) (result i32) + (if + (i32.eq + (i32.load + (i32.const 4) + ) + (i32.const 120) + ) + (unreachable) + ) + (i32.store + (i32.const 4) + (i32.add + (i32.load + (i32.const 4) + ) + (i32.const 4) + ) + ) + (call $print + (i32.sub + (i32.const 0) + (i32.load offset=4 + (i32.load + (i32.const 4) + ) + ) + ) + ) + (i32.load offset=4 + (i32.load + (i32.const 4) + ) + ) + ) + (func $main (; 2 ;) (type $v) + (local $0 i32) + (i32.store + (i32.const 8) + (i32.const 67) + ) + (i32.store + (i32.const 12) + (i32.const 131) + ) + (i32.store + (i32.const 16) + (i32.const 49) + ) + (i32.store + (i32.const 20) + (i32.const 36) + ) + (i32.store + (i32.const 24) + (i32.const 112) + ) + (i32.store + (i32.const 28) + (i32.const 161) + ) + (i32.store + (i32.const 32) + (i32.const 62) + ) + (i32.store + (i32.const 36) + (i32.const 166) + ) + (i32.store + (i32.const 40) + (i32.const 16) + ) + (i32.store + (i32.const 44) + (i32.const 88) + ) + (i32.store + (i32.const 48) + (i32.const 176) + ) + (i32.store + (i32.const 52) + (i32.const 152) + ) + (i32.store + (i32.const 56) + (i32.const 161) + ) + (i32.store + (i32.const 60) + (i32.const 194) + ) + (i32.store + (i32.const 64) + (i32.const 117) + ) + (i32.store + (i32.const 68) + (i32.const 180) + ) + (i32.store + (i32.const 72) + (i32.const 60) + ) + (i32.store + (i32.const 76) + (i32.const 166) + ) + (i32.store + (i32.const 80) + (i32.const 55) + ) + (i32.store + (i32.const 84) + (i32.const 183) + ) + (i32.store + (i32.const 88) + (i32.const 150) + ) + (i32.store + (i32.const 92) + (i32.const 73) + ) + (i32.store + (i32.const 96) + (i32.const 196) + ) + (i32.store + (i32.const 100) + (i32.const 143) + ) + (i32.store + (i32.const 104) + (i32.const 76) + ) + (i32.store + (i32.const 108) + (i32.const 182) + ) + (i32.store + (i32.const 112) + (i32.const 97) + ) + (i32.store + (i32.const 116) + (i32.const 140) + ) + (i32.store + (i32.const 120) + (i32.const 126) + ) + (i32.store + (i32.const 124) + (i32.const 3) + ) + (block $block$10$break + (block $block$4$break + (call $print + (i32.const 0) + ) + (if + (i32.rem_u + (tee_local $0 + (call $check) + ) + (i32.const 4) + ) + (if + (i32.eq + (i32.rem_u + (get_local $0) + (i32.const 4) + ) + (i32.const 2) + ) + (block + (call $print + (i32.const 7) + ) + (br_if $block$10$break + (i32.rem_u + (call $check) + (i32.const 3) + ) + ) + ) + (br $block$4$break) + ) + ) + (call $print + (i32.const 2) + ) + (br_if $block$10$break + (i32.rem_u + (call $check) + (i32.const 2) + ) + ) + ) + (loop $shape$6$continue + (call $print + (i32.const 3) + ) + (drop + (call $check) + ) + (br $shape$6$continue) + ) + ) + (call $print + (i32.const 9) + ) + (drop + (call $check) + ) + ) +) diff --git a/src/binaryen/test/fannkuch.args b/src/binaryen/test/fannkuch.args new file mode 100644 index 0000000000..74d068d66f --- /dev/null +++ b/src/binaryen/test/fannkuch.args @@ -0,0 +1 @@ +["5"] diff --git a/src/binaryen/test/fannkuch.cpp b/src/binaryen/test/fannkuch.cpp new file mode 100644 index 0000000000..f615ba2f86 --- /dev/null +++ b/src/binaryen/test/fannkuch.cpp @@ -0,0 +1,159 @@ +/* + * The Computer Language Benchmarks Game + * http://shootout.alioth.debian.org/ + * + * Contributed by Eckehard Berns + * Based on code by Heiner Marxen + * and the ATS version by Hongwei Xi + * + * Modified for emscripten by azakai + */ + +#include +#include + +struct worker_args { + int i, n; + struct worker_args *next; +}; + +int +fannkuch_worker(void *_arg) +{ + struct worker_args *args = (worker_args*)_arg; + int *perm1, *count, *perm; + int maxflips, flips, i, n, r, j, k, tmp; + + maxflips = 0; + n = args->n; + perm1 = (int*)malloc(n * sizeof(int)); + perm = (int*)malloc(n * sizeof(int)); + count = (int*)malloc(n * sizeof(int)); + for (i = 0; i < n; i++) + perm1[i] = i; + perm1[args->i] = n - 1; + perm1[n - 1] = args->i; + r = n; + + for (;;) { + for (; r > 1; r--) + count[r - 1] = r; + if (perm1[0] != 0 && perm1[n - 1] != n - 1) { + for (i = 0; i < n; i++) + perm[i] = perm1[i]; + flips = 0; + k = perm[0]; + do { + for (i = 1, j = k - 1; i < j; i++, j--) { + tmp = perm[i]; + perm[i] = perm[j]; + perm[j] = tmp; + } + flips++; + tmp = perm[k]; + perm[k] = k; + k = tmp; + } while (k); + if (maxflips < flips) + maxflips = flips; + } + for (;;) { + if (r >= n - 1) { + free(perm1); + free(perm); + free(count); + return maxflips; + } + + { + int p0 = perm1[0]; + for (i = 0; i < r; i++) + perm1[i] = perm1[i + 1]; + perm1[i] = p0; + } + if (--count[r] > 0) + break; + r++; + } + } +} + +static int +fannkuch(int n) +{ + struct worker_args *args, *targs; + int showmax = 30; + int *perm1, *count, i, r, maxflips, flips; + + args = NULL; + for (i = 0; i < n - 1; i++) { + targs = (worker_args*)malloc(sizeof(struct worker_args)); + targs->i = i; + targs->n = n; + targs->next = args; + args = targs; + } + + perm1 = (int*)malloc(n * sizeof(int)); + count = (int*)malloc(n * sizeof(int)); + + for (i = 0; i < n; i++) + perm1[i] = i; + + r = n; + for (;;) { + if (showmax) { + for (i = 0; i < n; i++) + printf("%d", perm1[i] + 1); + printf("\n"); + showmax--; + } else + goto cleanup; + + for (; r > 1; r--) + count[r - 1] = r; + + for (;;) { + if (r == n) + goto cleanup; + { + int p0 = perm1[0]; + for (i = 0; i < r; i++) + perm1[i] = perm1[i + 1]; + perm1[i] = p0; + } + if (--count[r] > 0) + break; + + r++; + } + } + + cleanup: + free(perm1); + free(count); + maxflips = 0; + while (args != NULL) { + flips = (int)fannkuch_worker(args); + if (maxflips < flips) + maxflips = flips; + targs = args; + args = args->next; + free(targs); + } + return maxflips; +} + +int +main(int argc, char **argv) +{ + int n = argc > 1 ? atoi(argv[1]) : 0; + + if (n < 1) { + printf("Wrong argument.\n"); + return 1; + } + printf("Pfannkuchen(%d) = %d.\n", n, fannkuch(n)); + return 0; +} + diff --git a/src/binaryen/test/fannkuch.txt b/src/binaryen/test/fannkuch.txt new file mode 100644 index 0000000000..fadec08d84 --- /dev/null +++ b/src/binaryen/test/fannkuch.txt @@ -0,0 +1,31 @@ +12345 +21345 +23145 +32145 +31245 +13245 +23415 +32415 +34215 +43215 +42315 +24315 +34125 +43125 +41325 +14325 +13425 +31425 +41235 +14235 +12435 +21435 +24135 +42135 +23451 +32451 +34251 +43251 +42351 +24351 +Pfannkuchen(5) = 7. diff --git a/src/binaryen/test/fasta.args b/src/binaryen/test/fasta.args new file mode 100644 index 0000000000..3d606956b1 --- /dev/null +++ b/src/binaryen/test/fasta.args @@ -0,0 +1 @@ +["10"] diff --git a/src/binaryen/test/fasta.cpp b/src/binaryen/test/fasta.cpp new file mode 100644 index 0000000000..1b52e1b278 --- /dev/null +++ b/src/binaryen/test/fasta.cpp @@ -0,0 +1,198 @@ +/* The Computer Language Benchmarks Game + http://shootout.alioth.debian.org/ + contributed by Andrew Moon +*/ + +#include +#include +#include + +// limit output, so we do not benchmark speed of printing +void puts_limited(char *x) +{ + static int left = 550; + int len = strlen(x); + if (len <= left) { + puts(x); + left -= len; + return; + } + if (left > 0) { + x[left] = '\0'; + puts(x); + x[left] = 'z'; + left = 0; + } +} + +struct Random { + enum { IM = 139968, IA = 3877, IC = 29573 }; + Random() : last(42) {} + float get( float max = 1.0f ) { + last = ( last * IA + IC ) % IM; + return max * last / IM; + } +protected: + unsigned int last; +} rng; + +struct IUB { + int c; + double p; + unsigned int pi; +}; + +struct Cumulative { + enum { slots = 512, }; + + Cumulative( IUB *start ) { + double p = 0; + for ( IUB *iter = start; iter->c; ++iter ) { + p += iter->p; + iter->p = p < 1.0 ? p : 1.0; + iter->pi = (unsigned int )( iter->p * slots ); + } + + for ( unsigned int i = 0; i <= slots; i++ ) { + while ( i > start->pi && start->pi != 0) { + ++start; + } + + table[i] = start; + } + } + + const char operator[] ( float pct ) const { + IUB *iter = table[(unsigned int )( pct * slots )]; + while ( iter->p < pct ) + ++iter; + return iter->c; + } + +protected: + IUB *table[slots + 1]; +}; + +static const size_t lineLength = 60; + +struct LineBuffer { + LineBuffer() : lastN(0) {} + LineBuffer &genrand( Cumulative &table, size_t N ) { + //assert(N <= lineLength); + for ( size_t i = 0; i < N; i++ ) + buffer[i] = table[rng.get()]; + buffer[N] = '\n'; + buffer[N+1] = '\0'; + lastN = N + 1; + return *this; + } + void writeline() { puts_limited(buffer); } +protected: + char buffer[lineLength + 2]; + size_t lastN; +}; + +struct RotatingString { + RotatingString( const char *in ) : pos(0) { + size = strlen( in ); + buffer = new char[size + lineLength]; + memcpy( buffer, in, size ); + memcpy( buffer + size, in, lineLength ); + } + ~RotatingString() { delete[] buffer; } + void write( size_t bytes ) { + char* temp = new char[bytes+2]; + memcpy(temp, buffer + pos, bytes); + temp[bytes] = '\n'; + temp[bytes] = '\0'; + puts_limited(temp); + delete temp; + pos += bytes; + if ( pos > size ) + pos -= size; + } +protected: + char *buffer; + size_t size, pos; +}; + +template< class Output > +void makeFasta( const char *id, const char *desc, size_t N, Output &output ) { + while ( N ) { + const size_t bytes = N < lineLength ? N : lineLength; + output.writeline( bytes ); + N -= bytes; + } +} + +struct Repeater { + Repeater( const char *alu ) : rot(alu) {} + void writeline( size_t bytes ) { rot.write( bytes ); } + void run( const char *id, const char *desc, size_t N ) { + makeFasta( id, desc, N, *this ); + } +protected: + RotatingString rot; +}; + +struct Randomized { + Randomized( IUB *start ) : table(start) {} + void writeline( size_t bytes ) { line.genrand(table, bytes).writeline(); } + void run( const char *id, const char *desc, size_t N ) { + makeFasta( id, desc, N, *this ); + } +protected: + Cumulative table; + LineBuffer line; +}; + +IUB iub[] = { + { 'a', 0.27, 0 }, + { 'c', 0.12, 0 }, + { 'g', 0.12, 0 }, + { 't', 0.27, 0 }, + + { 'B', 0.02, 0 }, + { 'D', 0.02, 0 }, + { 'H', 0.02, 0 }, + { 'K', 0.02, 0 }, + { 'M', 0.02, 0 }, + { 'N', 0.02, 0 }, + { 'R', 0.02, 0 }, + { 'S', 0.02, 0 }, + { 'V', 0.02, 0 }, + { 'W', 0.02, 0 }, + { 'Y', 0.02, 0 }, + { 0, 0, 0 }, +}; + +IUB homosapiens[] = { + { 'a', 0.3029549426680, 0 }, + { 'c', 0.1979883004921, 0 }, + { 'g', 0.1975473066391, 0 }, + { 't', 0.3015094502008, 0 }, + { 0, 0, 0 }, +}; + +static const char alu[] = + "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG" + "GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA" + "GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA" + "AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT" + "CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC" + "CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG" + "CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"; + +int main( int argc, const char *argv[] ) { + const size_t n = ( argc > 1 ) ? atoi( argv[1] ) : 512; + + Repeater(alu) + .run( "ONE", "Homo sapiens alu", n*2 ); + Randomized(iub) + .run( "TWO", "IUB ambiguity codes", n*3 ); + Randomized(homosapiens) + .run( "THREE", "Homo sapiens frequency", n*5 ); + + return 0; +} + diff --git a/src/binaryen/test/fasta.txt b/src/binaryen/test/fasta.txt new file mode 100644 index 0000000000..c4f2c06479 --- /dev/null +++ b/src/binaryen/test/fasta.txt @@ -0,0 +1,5 @@ +GGCCGGGCGCGGTGGCTCAC +cttBtatcatatgctaKggNcataaaSatg + +taaatcttgtgcttcgttagaagtctcgactacgtgtagcctagtgtttg + diff --git a/src/binaryen/test/fib-dbg.wasm b/src/binaryen/test/fib-dbg.wasm new file mode 100644 index 0000000000000000000000000000000000000000..8e56773f2c28bd12f16ef059a499611f4811a824 GIT binary patch literal 913 zcmZuwJ#Q015S`ikv^P1Uq@moyt`nCil{c{>1+Zh;MuN&dTkF`tzB_#9M3F3=DL^z( zP|))q_$5?SP|)!!n7!B`37mBA-g`6qF*7;{k{JR3eqOCsVD(v+K_4^B`amy|0ASzV zP;A>!;e}U!*_4fwqwZ;|*Xp*7479tQs##o*7K5p3rSr9E$-~ojcP-pbR~|j3Rcl?y zb*~{`tPOTH*szgi_SrNV1XH6KG>zp(xhLUh5>C=9vh=z3OwFSC6~h%P3BKzG2H zD$=re9X|{bwK+FW*ck71%?>hy>No9=y2^(cmVpzX2ByK#U}~^5*aT9i+<_&Q9Zulh z59E1EtW%Hk=YIU3&~3x{ncvV&RN5WS)g_pGz6e`Ul6F*@fW4~{UC<;MchX?^suKr8 z1xA5P62XN6+{$^I@}ju{X7)yt0a(S{mD6c71SnA5D}dq;UBB~13&f1o%ASv9Pr!M_ zD|@nZF5}k~Phbf+@VEJrvRC5oaweeS@ees=H7x{IN}PYXPTP@iY-)Rl>|M@(YnvLJ zpTPx4c;ef_Hfs`ml;~UZbuA*MFiYI1(Uz9LbKelIq)$N<1RVR0aA;G*H@DCdmd}V< zqTsuN`N+4Bb6N~Hm!*=B!!LcZ83r?j-!*mMRx9vtl`}@@QU^=ET9z3pAtNS#Qy-WHL_hv!-2c3r8`v3p{ literal 0 HcmV?d00001 diff --git a/src/binaryen/test/fib-dbg.wasm.fromBinary b/src/binaryen/test/fib-dbg.wasm.fromBinary new file mode 100644 index 0000000000..cd431a054c --- /dev/null +++ b/src/binaryen/test/fib-dbg.wasm.fromBinary @@ -0,0 +1,223 @@ +(module + (type $0 (func (param i32 i32))) + (type $1 (func (param i32) (result i32))) + (type $2 (func (result i32))) + (type $3 (func (param i32))) + (type $4 (func)) + (import "env" "DYNAMICTOP_PTR" (global $import$0 i32)) + (import "env" "tempDoublePtr" (global $import$1 i32)) + (import "env" "ABORT" (global $import$2 i32)) + (import "env" "STACKTOP" (global $import$3 i32)) + (import "env" "STACK_MAX" (global $import$4 i32)) + (import "env" "gb" (global $import$5 i32)) + (import "env" "fb" (global $import$6 i32)) + (import "global" "NaN" (global $import$7 f64)) + (import "global" "Infinity" (global $import$8 f64)) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $import$11 i32)) + (import "env" "tableBase" (global $import$12 i32)) + (global $global$0 (mut i32) (get_global $import$0)) + (global $global$1 (mut i32) (get_global $import$1)) + (global $global$2 (mut i32) (get_global $import$2)) + (global $global$3 (mut i32) (get_global $import$3)) + (global $global$4 (mut i32) (get_global $import$4)) + (global $global$5 (mut i32) (get_global $import$5)) + (global $global$6 (mut i32) (get_global $import$6)) + (global $global$7 (mut i32) (i32.const 0)) + (global $global$8 (mut i32) (i32.const 0)) + (global $global$9 (mut i32) (i32.const 0)) + (global $global$10 (mut i32) (i32.const 0)) + (global $global$11 (mut f64) (get_global $import$7)) + (global $global$12 (mut f64) (get_global $import$8)) + (global $global$13 (mut i32) (i32.const 0)) + (global $global$14 (mut i32) (i32.const 0)) + (global $global$15 (mut i32) (i32.const 0)) + (global $global$16 (mut i32) (i32.const 0)) + (global $global$17 (mut f64) (f64.const 0)) + (global $global$18 (mut i32) (i32.const 0)) + (global $global$19 (mut i32) (i32.const 0)) + (global $global$20 (mut i32) (i32.const 0)) + (global $global$21 (mut f64) (f64.const 0)) + (global $global$22 (mut i32) (i32.const 0)) + (global $global$23 (mut f64) (f64.const 0)) + (export "setThrew" (func $setThrew)) + (export "runPostSets" (func $runPostSets)) + (export "establishStackSpace" (func $establishStackSpace)) + (export "stackSave" (func $stackSave)) + (export "stackRestore" (func $stackRestore)) + (export "_fib" (func $_fib)) + (export "stackAlloc" (func $stackAlloc)) + (func $stackAlloc (; 0 ;) (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (block $label$1 + (set_local $var$1 + (get_global $global$3) + ) + (set_global $global$3 + (i32.add + (get_global $global$3) + (get_local $var$0) + ) + ) + (set_global $global$3 + (i32.and + (i32.add + (get_global $global$3) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (return + (get_local $var$1) + ) + ) + ) + (func $stackSave (; 1 ;) (type $2) (result i32) + (return + (get_global $global$3) + ) + ) + (func $stackRestore (; 2 ;) (type $3) (param $var$0 i32) + (set_global $global$3 + (get_local $var$0) + ) + ) + (func $establishStackSpace (; 3 ;) (type $0) (param $var$0 i32) (param $var$1 i32) + (block $label$1 + (set_global $global$3 + (get_local $var$0) + ) + (set_global $global$4 + (get_local $var$1) + ) + ) + ) + (func $setThrew (; 4 ;) (type $0) (param $var$0 i32) (param $var$1 i32) + (if + (i32.eq + (get_global $global$7) + (i32.const 0) + ) + (block + (set_global $global$7 + (get_local $var$0) + ) + (set_global $global$8 + (get_local $var$1) + ) + ) + ) + ) + (func $_fib (; 5 ;) (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (local $var$9 i32) + (local $var$10 i32) + (local $var$11 i32) + ;;@ fib.c:8:0 + (block $label$1 + (set_local $var$11 + (get_global $global$3) + ) + ;;@ fib.c:3:0 + (set_local $var$6 + (i32.gt_s + (get_local $var$0) + (i32.const 0) + ) + ) + ;;@ fib.c:8:0 + (if + ;;@ fib.c:3:0 + (get_local $var$6) + (block + (set_local $var$1 + (i32.const 0) + ) + (set_local $var$5 + (i32.const 1) + ) + (set_local $var$8 + (i32.const 0) + ) + ) + (block + (set_local $var$4 + (i32.const 1) + ) + ;;@ fib.c:8:0 + (return + (get_local $var$4) + ) + ) + ) + ;;@ fib.c:3:0 + (loop $label$4 + (block $label$5 + ;;@ fib.c:4:0 + (set_local $var$3 + (i32.add + (get_local $var$5) + (get_local $var$1) + ) + ) + ;;@ fib.c:3:0 + (set_local $var$9 + (i32.add + (get_local $var$8) + (i32.const 1) + ) + ) + (set_local $var$7 + (i32.eq + (get_local $var$9) + (get_local $var$0) + ) + ) + (if + (get_local $var$7) + (block + (set_local $var$4 + (get_local $var$3) + ) + (br $label$5) + ) + (block + (set_local $var$2 + (get_local $var$5) + ) + (set_local $var$5 + (get_local $var$3) + ) + (set_local $var$8 + (get_local $var$9) + ) + (set_local $var$1 + (get_local $var$2) + ) + ) + ) + (br $label$4) + ) + ) + ;;@ fib.c:8:0 + (return + (get_local $var$4) + ) + ) + ) + (func $runPostSets (; 6 ;) (type $4) + (local $var$0 i32) + (nop) + ) + ;; custom section "sourceMappingURL", size 35 +) + diff --git a/src/binaryen/test/fib-dbg.wasm.map b/src/binaryen/test/fib-dbg.wasm.map new file mode 100644 index 0000000000..831f55fbd2 --- /dev/null +++ b/src/binaryen/test/fib-dbg.wasm.map @@ -0,0 +1 @@ +{"version":3,"sources":["fib.c"],"names":[],"mappings":"moBAEA,4BAKA,QAJA,OADA,OAAA,uCAKA"} diff --git a/src/binaryen/test/float_ops.cpp b/src/binaryen/test/float_ops.cpp new file mode 100644 index 0000000000..9e4d68baed --- /dev/null +++ b/src/binaryen/test/float_ops.cpp @@ -0,0 +1,73 @@ +#include +#include +#include + +extern "C" { + +// unary +double EMSCRIPTEN_KEEPALIVE dneg(double x) { return -x; } +double EMSCRIPTEN_KEEPALIVE dfloor(double x) { return floor(x); } + +// binary +double EMSCRIPTEN_KEEPALIVE dadd(double x, double y) { return x + y; } +double EMSCRIPTEN_KEEPALIVE dsub(double x, double y) { return x - y; } +double EMSCRIPTEN_KEEPALIVE dmul(double x, double y) { return x * y; } +double EMSCRIPTEN_KEEPALIVE ddiv(double x, double y) { return x / y; } +double EMSCRIPTEN_KEEPALIVE dcopysign(double x, double y) { return std::copysign(x, y); } +double EMSCRIPTEN_KEEPALIVE dmin(double x, double y) { return std::min(x, y); } +double EMSCRIPTEN_KEEPALIVE dmax(double x, double y) { return std::max(x, y); } + +// comparisons +int EMSCRIPTEN_KEEPALIVE deq(double x, double y) { return x == y; } +int EMSCRIPTEN_KEEPALIVE dne(double x, double y) { return x != y; } +int EMSCRIPTEN_KEEPALIVE dlt(double x, double y) { return x < y; } +int EMSCRIPTEN_KEEPALIVE dle(double x, double y) { return x <= y; } +int EMSCRIPTEN_KEEPALIVE dgt(double x, double y) { return x > y; } +int EMSCRIPTEN_KEEPALIVE dge(double x, double y) { return x >= y; } + +double EMSCRIPTEN_KEEPALIVE int_to_double(int x) { + double d = x; + return d + 1.23; +} + +double EMSCRIPTEN_KEEPALIVE uint_to_double(unsigned x) { + double d = x; + return d + 1.23; +} + +int EMSCRIPTEN_KEEPALIVE double_to_int(double d) { + d += 1.23; + int x = d; + return x; +} + +int EMSCRIPTEN_KEEPALIVE double_to_uint(double d) { + d += 1.23; + unsigned x = d; + return x; +} + +float EMSCRIPTEN_KEEPALIVE int_to_float(int x) { + float d = x; + return d + 1.23; +} + +float EMSCRIPTEN_KEEPALIVE uint_to_float(unsigned x) { + float d = x; + return d + 1.23; +} + +int EMSCRIPTEN_KEEPALIVE float_to_int(float d) { + d += 1.23; + int x = d; + return x; +} + +int EMSCRIPTEN_KEEPALIVE float_to_uint(float d) { + d += 1.23; + unsigned x = d; + return x; +} + +} + diff --git a/src/binaryen/test/float_ops.emcc b/src/binaryen/test/float_ops.emcc new file mode 100644 index 0000000000..40c421eee9 --- /dev/null +++ b/src/binaryen/test/float_ops.emcc @@ -0,0 +1 @@ +["-s", "ASSERTIONS=0"] diff --git a/src/binaryen/test/float_ops.post.js b/src/binaryen/test/float_ops.post.js new file mode 100644 index 0000000000..c08ba19e5a --- /dev/null +++ b/src/binaryen/test/float_ops.post.js @@ -0,0 +1,89 @@ + +// unary +function testUnary(name) { + Module.print(name); + function doTest(x) { + Module.print(' ' + [x] + ' ==> ' + Module['_' + name](x)); + } + doTest(0); + doTest(1); + doTest(-1); + doTest(0.5); + doTest(-0.5); + doTest(1.4); + doTest(-1.4); + doTest(1.6); + doTest(-1.6); + doTest(5.1); + doTest(5.3); + doTest(5.7); + doTest(5.9); + doTest(-1 | 0); + doTest((-1 | 0) + 1); + doTest((-1 | 0) - 1); + doTest((-1 >>> 0) + 1); + doTest((-1 >>> 0) - 1); + doTest((-1 | 0) + 2); + doTest((-1 | 0) - 2); + doTest((-1 >>> 0) + 2); + doTest((-1 >>> 0) - 2); +} +testUnary('dfloor'); + +// binary +function testBinary(name) { + Module.print(name); + function doTest(x, y) { + Module.print(' ' + [x, y] + ' ==> ' + Module['_' + name](x, y)); + } + doTest(0, 0); + doTest(0, 1); + doTest(1, 0); + doTest(1, 1); + doTest(5, 6); + doTest(6, 5); + doTest(101, -12); + doTest(-12, 101); + doTest(-1, 5); + doTest(5, -1); + doTest(-1, -1); + doTest(0.12, 0.12); + doTest(0.812, 1); + doTest(1.821, 0); + doTest(1, 1.212); + doTest(5.543, 6); + doTest(6, 5.121); + doTest(101.001, -12); + doTest(-12.001, 101); + doTest(-1, 5.123); + doTest(5, -1.123); + doTest(-1, -1.123); +} +testBinary('dadd'); +testBinary('dsub'); +testBinary('dmul'); +testBinary('ddiv'); +//testBinary('dcopysign'); // TODO this uses tempDoublePtr, a global, which is not yet functional +testBinary('dmin'); +testBinary('dmax'); + +// comparisons +testBinary('deq'); +testBinary('dne'); +testBinary('dlt'); +testBinary('dle'); +testBinary('dgt'); +testBinary('dge'); + +// conversions +testUnary('int_to_double'); +testUnary('uint_to_double'); +testUnary('double_to_int'); +testUnary('double_to_uint'); +testUnary('int_to_float'); +testUnary('uint_to_float'); +testUnary('float_to_int'); +testUnary('float_to_uint'); + +Module.print('done.'); + diff --git a/src/binaryen/test/float_ops.txt b/src/binaryen/test/float_ops.txt new file mode 100644 index 0000000000..3cd01846b6 --- /dev/null +++ b/src/binaryen/test/float_ops.txt @@ -0,0 +1,484 @@ +dfloor + 0 ==> 0 + 1 ==> 1 + -1 ==> -1 + 0.5 ==> 0 + -0.5 ==> -1 + 1.4 ==> 1 + -1.4 ==> -2 + 1.6 ==> 1 + -1.6 ==> -2 + 5.1 ==> 5 + 5.3 ==> 5 + 5.7 ==> 5 + 5.9 ==> 5 + -1 ==> -1 + 0 ==> 0 + -2 ==> -2 + 4294967296 ==> 4294967296 + 4294967294 ==> 4294967294 + 1 ==> 1 + -3 ==> -3 + 4294967297 ==> 4294967297 + 4294967293 ==> 4294967293 +dadd + 0,0 ==> 0 + 0,1 ==> 1 + 1,0 ==> 1 + 1,1 ==> 2 + 5,6 ==> 11 + 6,5 ==> 11 + 101,-12 ==> 89 + -12,101 ==> 89 + -1,5 ==> 4 + 5,-1 ==> 4 + -1,-1 ==> -2 + 0.12,0.12 ==> 0.24 + 0.812,1 ==> 1.812 + 1.821,0 ==> 1.821 + 1,1.212 ==> 2.2119999999999997 + 5.543,6 ==> 11.543 + 6,5.121 ==> 11.121 + 101.001,-12 ==> 89.001 + -12.001,101 ==> 88.999 + -1,5.123 ==> 4.123 + 5,-1.123 ==> 3.877 + -1,-1.123 ==> -2.123 +dsub + 0,0 ==> 0 + 0,1 ==> -1 + 1,0 ==> 1 + 1,1 ==> 0 + 5,6 ==> -1 + 6,5 ==> 1 + 101,-12 ==> 113 + -12,101 ==> -113 + -1,5 ==> -6 + 5,-1 ==> 6 + -1,-1 ==> 0 + 0.12,0.12 ==> 0 + 0.812,1 ==> -0.18799999999999994 + 1.821,0 ==> 1.821 + 1,1.212 ==> -0.21199999999999997 + 5.543,6 ==> -0.45699999999999985 + 6,5.121 ==> 0.8789999999999996 + 101.001,-12 ==> 113.001 + -12.001,101 ==> -113.001 + -1,5.123 ==> -6.123 + 5,-1.123 ==> 6.123 + -1,-1.123 ==> 0.123 +dmul + 0,0 ==> 0 + 0,1 ==> 0 + 1,0 ==> 0 + 1,1 ==> 1 + 5,6 ==> 30 + 6,5 ==> 30 + 101,-12 ==> -1212 + -12,101 ==> -1212 + -1,5 ==> -5 + 5,-1 ==> -5 + -1,-1 ==> 1 + 0.12,0.12 ==> 0.0144 + 0.812,1 ==> 0.812 + 1.821,0 ==> 0 + 1,1.212 ==> 1.212 + 5.543,6 ==> 33.258 + 6,5.121 ==> 30.726000000000003 + 101.001,-12 ==> -1212.0120000000002 + -12.001,101 ==> -1212.1009999999999 + -1,5.123 ==> -5.123 + 5,-1.123 ==> -5.615 + -1,-1.123 ==> 1.123 +ddiv + 0,0 ==> NaN + 0,1 ==> 0 + 1,0 ==> Infinity + 1,1 ==> 1 + 5,6 ==> 0.8333333333333334 + 6,5 ==> 1.2 + 101,-12 ==> -8.416666666666666 + -12,101 ==> -0.1188118811881188 + -1,5 ==> -0.2 + 5,-1 ==> -5 + -1,-1 ==> 1 + 0.12,0.12 ==> 1 + 0.812,1 ==> 0.812 + 1.821,0 ==> Infinity + 1,1.212 ==> 0.8250825082508251 + 5.543,6 ==> 0.9238333333333334 + 6,5.121 ==> 1.1716461628588166 + 101.001,-12 ==> -8.41675 + -12.001,101 ==> -0.11882178217821782 + -1,5.123 ==> -0.19519812609798945 + 5,-1.123 ==> -4.452359750667854 + -1,-1.123 ==> 0.8904719501335708 +dmin + 0,0 ==> 0 + 0,1 ==> 0 + 1,0 ==> 0 + 1,1 ==> 1 + 5,6 ==> 5 + 6,5 ==> 5 + 101,-12 ==> -12 + -12,101 ==> -12 + -1,5 ==> -1 + 5,-1 ==> -1 + -1,-1 ==> -1 + 0.12,0.12 ==> 0.12 + 0.812,1 ==> 0.812 + 1.821,0 ==> 0 + 1,1.212 ==> 1 + 5.543,6 ==> 5.543 + 6,5.121 ==> 5.121 + 101.001,-12 ==> -12 + -12.001,101 ==> -12.001 + -1,5.123 ==> -1 + 5,-1.123 ==> -1.123 + -1,-1.123 ==> -1.123 +dmax + 0,0 ==> 0 + 0,1 ==> 1 + 1,0 ==> 1 + 1,1 ==> 1 + 5,6 ==> 6 + 6,5 ==> 6 + 101,-12 ==> 101 + -12,101 ==> 101 + -1,5 ==> 5 + 5,-1 ==> 5 + -1,-1 ==> -1 + 0.12,0.12 ==> 0.12 + 0.812,1 ==> 1 + 1.821,0 ==> 1.821 + 1,1.212 ==> 1.212 + 5.543,6 ==> 6 + 6,5.121 ==> 6 + 101.001,-12 ==> 101.001 + -12.001,101 ==> 101 + -1,5.123 ==> 5.123 + 5,-1.123 ==> 5 + -1,-1.123 ==> -1 +deq + 0,0 ==> 1 + 0,1 ==> 0 + 1,0 ==> 0 + 1,1 ==> 1 + 5,6 ==> 0 + 6,5 ==> 0 + 101,-12 ==> 0 + -12,101 ==> 0 + -1,5 ==> 0 + 5,-1 ==> 0 + -1,-1 ==> 1 + 0.12,0.12 ==> 1 + 0.812,1 ==> 0 + 1.821,0 ==> 0 + 1,1.212 ==> 0 + 5.543,6 ==> 0 + 6,5.121 ==> 0 + 101.001,-12 ==> 0 + -12.001,101 ==> 0 + -1,5.123 ==> 0 + 5,-1.123 ==> 0 + -1,-1.123 ==> 0 +dne + 0,0 ==> 0 + 0,1 ==> 1 + 1,0 ==> 1 + 1,1 ==> 0 + 5,6 ==> 1 + 6,5 ==> 1 + 101,-12 ==> 1 + -12,101 ==> 1 + -1,5 ==> 1 + 5,-1 ==> 1 + -1,-1 ==> 0 + 0.12,0.12 ==> 0 + 0.812,1 ==> 1 + 1.821,0 ==> 1 + 1,1.212 ==> 1 + 5.543,6 ==> 1 + 6,5.121 ==> 1 + 101.001,-12 ==> 1 + -12.001,101 ==> 1 + -1,5.123 ==> 1 + 5,-1.123 ==> 1 + -1,-1.123 ==> 1 +dlt + 0,0 ==> 0 + 0,1 ==> 1 + 1,0 ==> 0 + 1,1 ==> 0 + 5,6 ==> 1 + 6,5 ==> 0 + 101,-12 ==> 0 + -12,101 ==> 1 + -1,5 ==> 1 + 5,-1 ==> 0 + -1,-1 ==> 0 + 0.12,0.12 ==> 0 + 0.812,1 ==> 1 + 1.821,0 ==> 0 + 1,1.212 ==> 1 + 5.543,6 ==> 1 + 6,5.121 ==> 0 + 101.001,-12 ==> 0 + -12.001,101 ==> 1 + -1,5.123 ==> 1 + 5,-1.123 ==> 0 + -1,-1.123 ==> 0 +dle + 0,0 ==> 1 + 0,1 ==> 1 + 1,0 ==> 0 + 1,1 ==> 1 + 5,6 ==> 1 + 6,5 ==> 0 + 101,-12 ==> 0 + -12,101 ==> 1 + -1,5 ==> 1 + 5,-1 ==> 0 + -1,-1 ==> 1 + 0.12,0.12 ==> 1 + 0.812,1 ==> 1 + 1.821,0 ==> 0 + 1,1.212 ==> 1 + 5.543,6 ==> 1 + 6,5.121 ==> 0 + 101.001,-12 ==> 0 + -12.001,101 ==> 1 + -1,5.123 ==> 1 + 5,-1.123 ==> 0 + -1,-1.123 ==> 0 +dgt + 0,0 ==> 0 + 0,1 ==> 0 + 1,0 ==> 1 + 1,1 ==> 0 + 5,6 ==> 0 + 6,5 ==> 1 + 101,-12 ==> 1 + -12,101 ==> 0 + -1,5 ==> 0 + 5,-1 ==> 1 + -1,-1 ==> 0 + 0.12,0.12 ==> 0 + 0.812,1 ==> 0 + 1.821,0 ==> 1 + 1,1.212 ==> 0 + 5.543,6 ==> 0 + 6,5.121 ==> 1 + 101.001,-12 ==> 1 + -12.001,101 ==> 0 + -1,5.123 ==> 0 + 5,-1.123 ==> 1 + -1,-1.123 ==> 1 +dge + 0,0 ==> 1 + 0,1 ==> 0 + 1,0 ==> 1 + 1,1 ==> 1 + 5,6 ==> 0 + 6,5 ==> 1 + 101,-12 ==> 1 + -12,101 ==> 0 + -1,5 ==> 0 + 5,-1 ==> 1 + -1,-1 ==> 1 + 0.12,0.12 ==> 1 + 0.812,1 ==> 0 + 1.821,0 ==> 1 + 1,1.212 ==> 0 + 5.543,6 ==> 0 + 6,5.121 ==> 1 + 101.001,-12 ==> 1 + -12.001,101 ==> 0 + -1,5.123 ==> 0 + 5,-1.123 ==> 1 + -1,-1.123 ==> 1 +int_to_double + 0 ==> 1.23 + 1 ==> 2.23 + -1 ==> 0.22999999999999998 + 0.5 ==> 1.23 + -0.5 ==> 1.23 + 1.4 ==> 2.23 + -1.4 ==> 0.22999999999999998 + 1.6 ==> 2.23 + -1.6 ==> 0.22999999999999998 + 5.1 ==> 6.23 + 5.3 ==> 6.23 + 5.7 ==> 6.23 + 5.9 ==> 6.23 + -1 ==> 0.22999999999999998 + 0 ==> 1.23 + -2 ==> -0.77 + 4294967296 ==> 1.23 + 4294967294 ==> -0.77 + 1 ==> 2.23 + -3 ==> -1.77 + 4294967297 ==> 2.23 + 4294967293 ==> -1.77 +uint_to_double + 0 ==> 1.23 + 1 ==> 2.23 + -1 ==> 4294967296.23 + 0.5 ==> 1.23 + -0.5 ==> 1.23 + 1.4 ==> 2.23 + -1.4 ==> 4294967296.23 + 1.6 ==> 2.23 + -1.6 ==> 4294967296.23 + 5.1 ==> 6.23 + 5.3 ==> 6.23 + 5.7 ==> 6.23 + 5.9 ==> 6.23 + -1 ==> 4294967296.23 + 0 ==> 1.23 + -2 ==> 4294967295.23 + 4294967296 ==> 1.23 + 4294967294 ==> 4294967295.23 + 1 ==> 2.23 + -3 ==> 4294967294.23 + 4294967297 ==> 2.23 + 4294967293 ==> 4294967294.23 +double_to_int + 0 ==> 1 + 1 ==> 2 + -1 ==> 0 + 0.5 ==> 1 + -0.5 ==> 0 + 1.4 ==> 2 + -1.4 ==> 0 + 1.6 ==> 2 + -1.6 ==> 0 + 5.1 ==> 6 + 5.3 ==> 6 + 5.7 ==> 6 + 5.9 ==> 7 + -1 ==> 0 + 0 ==> 1 + -2 ==> 0 + 4294967296 ==> 1 + 4294967294 ==> -1 + 1 ==> 2 + -3 ==> -1 + 4294967297 ==> 2 + 4294967293 ==> -2 +double_to_uint + 0 ==> 1 + 1 ==> 2 + -1 ==> 0 + 0.5 ==> 1 + -0.5 ==> 0 + 1.4 ==> 2 + -1.4 ==> 0 + 1.6 ==> 2 + -1.6 ==> 0 + 5.1 ==> 6 + 5.3 ==> 6 + 5.7 ==> 6 + 5.9 ==> 7 + -1 ==> 0 + 0 ==> 1 + -2 ==> 0 + 4294967296 ==> 1 + 4294967294 ==> -1 + 1 ==> 2 + -3 ==> -1 + 4294967297 ==> 2 + 4294967293 ==> -2 +int_to_float + 0 ==> 1.2300000190734863 + 1 ==> 2.2300000190734863 + -1 ==> 0.23000000417232513 + 0.5 ==> 1.2300000190734863 + -0.5 ==> 1.2300000190734863 + 1.4 ==> 2.2300000190734863 + -1.4 ==> 0.23000000417232513 + 1.6 ==> 2.2300000190734863 + -1.6 ==> 0.23000000417232513 + 5.1 ==> 6.230000019073486 + 5.3 ==> 6.230000019073486 + 5.7 ==> 6.230000019073486 + 5.9 ==> 6.230000019073486 + -1 ==> 0.23000000417232513 + 0 ==> 1.2300000190734863 + -2 ==> -0.7699999809265137 + 4294967296 ==> 1.2300000190734863 + 4294967294 ==> -0.7699999809265137 + 1 ==> 2.2300000190734863 + -3 ==> -1.7699999809265137 + 4294967297 ==> 2.2300000190734863 + 4294967293 ==> -1.7699999809265137 +uint_to_float + 0 ==> 1.2300000190734863 + 1 ==> 2.2300000190734863 + -1 ==> 4294967296 + 0.5 ==> 1.2300000190734863 + -0.5 ==> 1.2300000190734863 + 1.4 ==> 2.2300000190734863 + -1.4 ==> 4294967296 + 1.6 ==> 2.2300000190734863 + -1.6 ==> 4294967296 + 5.1 ==> 6.230000019073486 + 5.3 ==> 6.230000019073486 + 5.7 ==> 6.230000019073486 + 5.9 ==> 6.230000019073486 + -1 ==> 4294967296 + 0 ==> 1.2300000190734863 + -2 ==> 4294967296 + 4294967296 ==> 1.2300000190734863 + 4294967294 ==> 4294967296 + 1 ==> 2.2300000190734863 + -3 ==> 4294967296 + 4294967297 ==> 2.2300000190734863 + 4294967293 ==> 4294967296 +float_to_int + 0 ==> 1 + 1 ==> 2 + -1 ==> 0 + 0.5 ==> 1 + -0.5 ==> 0 + 1.4 ==> 2 + -1.4 ==> 0 + 1.6 ==> 2 + -1.6 ==> 0 + 5.1 ==> 6 + 5.3 ==> 6 + 5.7 ==> 6 + 5.9 ==> 7 + -1 ==> 0 + 0 ==> 1 + -2 ==> 0 + 4294967296 ==> 0 + 4294967294 ==> 0 + 1 ==> 2 + -3 ==> -1 + 4294967297 ==> 0 + 4294967293 ==> 0 +float_to_uint + 0 ==> 1 + 1 ==> 2 + -1 ==> 0 + 0.5 ==> 1 + -0.5 ==> 0 + 1.4 ==> 2 + -1.4 ==> 0 + 1.6 ==> 2 + -1.6 ==> 0 + 5.1 ==> 6 + 5.3 ==> 6 + 5.7 ==> 6 + 5.9 ==> 7 + -1 ==> 0 + 0 ==> 1 + -2 ==> 0 + 4294967296 ==> 0 + 4294967294 ==> 0 + 1 ==> 2 + -3 ==> -1 + 4294967297 ==> 0 + 4294967293 ==> 0 +done. diff --git a/src/binaryen/test/forward.2asm.js b/src/binaryen/test/forward.2asm.js new file mode 100644 index 0000000000..00a15d0356 --- /dev/null +++ b/src/binaryen/test/forward.2asm.js @@ -0,0 +1,74 @@ +function asmFunc(global, env, buffer) { + "use asm"; + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + var Math_imul = global.Math.imul; + var Math_fround = global.Math.fround; + var Math_abs = global.Math.abs; + var Math_clz32 = global.Math.clz32; + function even(n) { + n = n | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0; + if ((n | 0) == (0 | 0)) $$6 = 1; else $$6 = odd(n - 1 | 0 | 0) | 0; + return $$6 | 0; + } + + function odd(n) { + n = n | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0; + if ((n | 0) == (0 | 0)) $$6 = 0; else $$6 = even(n - 1 | 0 | 0) | 0; + return $$6 | 0; + } + + function __wasm_ctz_i32(x) { + x = x | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0; + if ((x | 0) == (0 | 0)) $$9 = 32; else $$9 = 31 - Math_clz32(x ^ (x - 1 | 0) | 0) | 0; + return $$9 | 0; + } + + function __wasm_popcnt_i32(x) { + x = x | 0; + var count = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0; + count = 0; + b : { + l : do { + $$5 = count; + if ((x | 0) == (0 | 0)) break b; + x = x & (x - 1 | 0) | 0; + count = count + 1 | 0; + continue l; + break l; + } while (1); + }; + return $$5 | 0; + } + + function __wasm_rotl_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 >>> (k & 31 | 0) | 0) & x | 0) << (k & 31 | 0) | 0 | (((4294967295 << (32 - (k & 31 | 0) | 0) | 0) & x | 0) >>> (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function __wasm_rotr_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 << (k & 31 | 0) | 0) & x | 0) >>> (k & 31 | 0) | 0 | (((4294967295 >>> (32 - (k & 31 | 0) | 0) | 0) & x | 0) << (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + return { + even: even, + odd: odd + }; +} + diff --git a/src/binaryen/test/grow_memory.cpp b/src/binaryen/test/grow_memory.cpp new file mode 100644 index 0000000000..b8f732f7af --- /dev/null +++ b/src/binaryen/test/grow_memory.cpp @@ -0,0 +1,20 @@ +#include +#include +#include + +volatile int writeOnly; + +int main() { + EM_ASM({ + assert(HEAPU8.length === 16*1024*1024); + }); + for (int i = 0; i < 20; i++) { + printf("alloc 1MB: %d\n", i); + writeOnly = (int)malloc(1024*1024); + } + EM_ASM({ + assert(HEAPU8.length > 16*1024*1024); + }); + printf("ok.\n"); +} + diff --git a/src/binaryen/test/grow_memory.emcc b/src/binaryen/test/grow_memory.emcc new file mode 100644 index 0000000000..5a0c6fea0f --- /dev/null +++ b/src/binaryen/test/grow_memory.emcc @@ -0,0 +1 @@ +["-s", "ALLOW_MEMORY_GROWTH=1"] diff --git a/src/binaryen/test/grow_memory.txt b/src/binaryen/test/grow_memory.txt new file mode 100644 index 0000000000..2adc5a8c25 --- /dev/null +++ b/src/binaryen/test/grow_memory.txt @@ -0,0 +1,22 @@ +alloc 1MB: 0 +alloc 1MB: 1 +alloc 1MB: 2 +alloc 1MB: 3 +alloc 1MB: 4 +alloc 1MB: 5 +alloc 1MB: 6 +alloc 1MB: 7 +alloc 1MB: 8 +alloc 1MB: 9 +alloc 1MB: 10 +alloc 1MB: 11 +alloc 1MB: 12 +alloc 1MB: 13 +alloc 1MB: 14 +alloc 1MB: 15 +alloc 1MB: 16 +alloc 1MB: 17 +alloc 1MB: 18 +alloc 1MB: 19 +ok. + diff --git a/src/binaryen/test/hello_libcxx.cpp b/src/binaryen/test/hello_libcxx.cpp new file mode 100644 index 0000000000..445c5513b0 --- /dev/null +++ b/src/binaryen/test/hello_libcxx.cpp @@ -0,0 +1,8 @@ +#include + +int main() +{ + std::cout << "hello, world!" << std::endl; + return 0; +} + diff --git a/src/binaryen/test/hello_libcxx.txt b/src/binaryen/test/hello_libcxx.txt new file mode 100644 index 0000000000..30527bf5b3 --- /dev/null +++ b/src/binaryen/test/hello_libcxx.txt @@ -0,0 +1,2 @@ +hello, world! + diff --git a/src/binaryen/test/hello_world.2asm.js b/src/binaryen/test/hello_world.2asm.js new file mode 100644 index 0000000000..3302af0967 --- /dev/null +++ b/src/binaryen/test/hello_world.2asm.js @@ -0,0 +1,67 @@ +function asmFunc(global, env, buffer) { + "use asm"; + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + var Math_imul = global.Math.imul; + var Math_fround = global.Math.fround; + var Math_abs = global.Math.abs; + var Math_clz32 = global.Math.clz32; + function add(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return x + y | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function __wasm_ctz_i32(x) { + x = x | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0; + if ((x | 0) == (0 | 0)) $$9 = 32; else $$9 = 31 - Math_clz32(x ^ (x - 1 | 0) | 0) | 0; + return $$9 | 0; + } + + function __wasm_popcnt_i32(x) { + x = x | 0; + var count = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0; + count = 0; + b : { + l : do { + $$5 = count; + if ((x | 0) == (0 | 0)) break b; + x = x & (x - 1 | 0) | 0; + count = count + 1 | 0; + continue l; + break l; + } while (1); + }; + return $$5 | 0; + } + + function __wasm_rotl_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 >>> (k & 31 | 0) | 0) & x | 0) << (k & 31 | 0) | 0 | (((4294967295 << (32 - (k & 31 | 0) | 0) | 0) & x | 0) >>> (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function __wasm_rotr_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 << (k & 31 | 0) | 0) & x | 0) >>> (k & 31 | 0) | 0 | (((4294967295 >>> (32 - (k & 31 | 0) | 0) | 0) & x | 0) << (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + return { + add: add + }; +} + diff --git a/src/binaryen/test/hello_world.asm.js b/src/binaryen/test/hello_world.asm.js new file mode 100644 index 0000000000..a41fe1a659 --- /dev/null +++ b/src/binaryen/test/hello_world.asm.js @@ -0,0 +1,10 @@ +function () { + "use asm"; + function add(x, y) { + x = x | 0; + y = y | 0; + return x + y | 0; + } + return { add: add }; +} + diff --git a/src/binaryen/test/hello_world.c b/src/binaryen/test/hello_world.c new file mode 100644 index 0000000000..eb47ea813e --- /dev/null +++ b/src/binaryen/test/hello_world.c @@ -0,0 +1,7 @@ +#include + +int main() { + printf("hello, world!\n"); + return 0; +} + diff --git a/src/binaryen/test/hello_world.fromasm b/src/binaryen/test/hello_world.fromasm new file mode 100644 index 0000000000..0e0b870c5e --- /dev/null +++ b/src/binaryen/test/hello_world.fromasm @@ -0,0 +1,14 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (data (get_global $memoryBase) "hello_world.asm.js") + (export "add" (func $add)) + (func $add (; 0 ;) (param $0 i32) (param $1 i32) (result i32) + (i32.add + (get_local $0) + (get_local $1) + ) + ) +) diff --git a/src/binaryen/test/hello_world.fromasm.clamp b/src/binaryen/test/hello_world.fromasm.clamp new file mode 100644 index 0000000000..0e0b870c5e --- /dev/null +++ b/src/binaryen/test/hello_world.fromasm.clamp @@ -0,0 +1,14 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (data (get_global $memoryBase) "hello_world.asm.js") + (export "add" (func $add)) + (func $add (; 0 ;) (param $0 i32) (param $1 i32) (result i32) + (i32.add + (get_local $0) + (get_local $1) + ) + ) +) diff --git a/src/binaryen/test/hello_world.fromasm.clamp.no-opts b/src/binaryen/test/hello_world.fromasm.clamp.no-opts new file mode 100644 index 0000000000..90861e2898 --- /dev/null +++ b/src/binaryen/test/hello_world.fromasm.clamp.no-opts @@ -0,0 +1,15 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "add" (func $add)) + (func $add (; 0 ;) (param $x i32) (param $y i32) (result i32) + (return + (i32.add + (get_local $x) + (get_local $y) + ) + ) + ) +) diff --git a/src/binaryen/test/hello_world.fromasm.imprecise b/src/binaryen/test/hello_world.fromasm.imprecise new file mode 100644 index 0000000000..ab998a5bd4 --- /dev/null +++ b/src/binaryen/test/hello_world.fromasm.imprecise @@ -0,0 +1,13 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "add" (func $add)) + (func $add (; 0 ;) (param $0 i32) (param $1 i32) (result i32) + (i32.add + (get_local $0) + (get_local $1) + ) + ) +) diff --git a/src/binaryen/test/hello_world.fromasm.imprecise.no-opts b/src/binaryen/test/hello_world.fromasm.imprecise.no-opts new file mode 100644 index 0000000000..90861e2898 --- /dev/null +++ b/src/binaryen/test/hello_world.fromasm.imprecise.no-opts @@ -0,0 +1,15 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "add" (func $add)) + (func $add (; 0 ;) (param $x i32) (param $y i32) (result i32) + (return + (i32.add + (get_local $x) + (get_local $y) + ) + ) + ) +) diff --git a/src/binaryen/test/hello_world.fromasm.no-opts b/src/binaryen/test/hello_world.fromasm.no-opts new file mode 100644 index 0000000000..90861e2898 --- /dev/null +++ b/src/binaryen/test/hello_world.fromasm.no-opts @@ -0,0 +1,15 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "add" (func $add)) + (func $add (; 0 ;) (param $x i32) (param $y i32) (result i32) + (return + (i32.add + (get_local $x) + (get_local $y) + ) + ) + ) +) diff --git a/src/binaryen/test/hello_world.txt b/src/binaryen/test/hello_world.txt new file mode 100644 index 0000000000..30527bf5b3 --- /dev/null +++ b/src/binaryen/test/hello_world.txt @@ -0,0 +1,2 @@ +hello, world! + diff --git a/src/binaryen/test/hello_world.wast b/src/binaryen/test/hello_world.wast new file mode 100644 index 0000000000..4a0f620822 --- /dev/null +++ b/src/binaryen/test/hello_world.wast @@ -0,0 +1,11 @@ +(module + (type $0 (func (param i32 i32) (result i32))) + (memory $0 256 256) + (export "add" (func $add)) + (func $add (; 0 ;) (type $0) (param $x i32) (param $y i32) (result i32) + (i32.add + (get_local $x) + (get_local $y) + ) + ) +) diff --git a/src/binaryen/test/hello_world.wast.from-wast b/src/binaryen/test/hello_world.wast.from-wast new file mode 100644 index 0000000000..4a0f620822 --- /dev/null +++ b/src/binaryen/test/hello_world.wast.from-wast @@ -0,0 +1,11 @@ +(module + (type $0 (func (param i32 i32) (result i32))) + (memory $0 256 256) + (export "add" (func $add)) + (func $add (; 0 ;) (type $0) (param $x i32) (param $y i32) (result i32) + (i32.add + (get_local $x) + (get_local $y) + ) + ) +) diff --git a/src/binaryen/test/hello_world.wast.fromBinary b/src/binaryen/test/hello_world.wast.fromBinary new file mode 100644 index 0000000000..af64598392 --- /dev/null +++ b/src/binaryen/test/hello_world.wast.fromBinary @@ -0,0 +1,12 @@ +(module + (type $0 (func (param i32 i32) (result i32))) + (memory $0 256 256) + (export "add" (func $add)) + (func $add (; 0 ;) (type $0) (param $var$0 i32) (param $var$1 i32) (result i32) + (i32.add + (get_local $var$0) + (get_local $var$1) + ) + ) +) + diff --git a/src/binaryen/test/hello_world.wast.fromBinary.noDebugInfo b/src/binaryen/test/hello_world.wast.fromBinary.noDebugInfo new file mode 100644 index 0000000000..bf7fff1e1b --- /dev/null +++ b/src/binaryen/test/hello_world.wast.fromBinary.noDebugInfo @@ -0,0 +1,12 @@ +(module + (type $0 (func (param i32 i32) (result i32))) + (memory $0 256 256) + (export "add" (func $0)) + (func $0 (; 0 ;) (type $0) (param $var$0 i32) (param $var$1 i32) (result i32) + (i32.add + (get_local $var$0) + (get_local $var$1) + ) + ) +) + diff --git a/src/binaryen/test/i32.2asm.js b/src/binaryen/test/i32.2asm.js new file mode 100644 index 0000000000..83bbb5a566 --- /dev/null +++ b/src/binaryen/test/i32.2asm.js @@ -0,0 +1,315 @@ +function asmFunc(global, env, buffer) { + "use asm"; + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + var Math_imul = global.Math.imul; + var Math_fround = global.Math.fround; + var Math_abs = global.Math.abs; + var Math_clz32 = global.Math.clz32; + function $$0(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return x + y | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$1(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return x - y | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$2(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return Math_imul(x, y) | 0; + return wasm2asm_i32$0 | 0; + } + + function $$3(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return (x | 0) / (y | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$4(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return (x >>> 0) / (y >>> 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$5(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return (x | 0) % (y | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$6(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return (x >>> 0) % (y >>> 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$7(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return x & y | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$8(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return x | y | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$9(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return x ^ y | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$10(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return x << y | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$11(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return x >> y | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$12(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return x >>> y | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$13(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return __wasm_rotl_i32(x, y) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$14(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return __wasm_rotr_i32(x, y) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$15(x) { + x = x | 0; + var $$1 = 0, $$2 = 0, wasm2asm_i32$0 = 0; + return Math_clz32(x) | 0; + return wasm2asm_i32$0 | 0; + } + + function $$16(x) { + x = x | 0; + var $$1 = 0, $$2 = 0, wasm2asm_i32$0 = 0; + return __wasm_ctz_i32(x) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$17(x) { + x = x | 0; + var $$1 = 0, $$2 = 0, wasm2asm_i32$0 = 0; + return __wasm_popcnt_i32(x) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$18(x) { + x = x | 0; + var $$1 = 0, $$2 = 0, wasm2asm_i32$0 = 0; + return (x | 0) == (0 | 0) | 0; + return wasm2asm_i32$0 | 0; + } + + function $$19(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return (x | 0) == (y | 0) | 0; + return wasm2asm_i32$0 | 0; + } + + function $$20(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return (x | 0) != (y | 0) | 0; + return wasm2asm_i32$0 | 0; + } + + function $$21(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return (x | 0) < (y | 0) | 0; + return wasm2asm_i32$0 | 0; + } + + function $$22(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return x >>> 0 < y >>> 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$23(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return (x | 0) <= (y | 0) | 0; + return wasm2asm_i32$0 | 0; + } + + function $$24(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return x >>> 0 <= y >>> 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$25(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return (x | 0) > (y | 0) | 0; + return wasm2asm_i32$0 | 0; + } + + function $$26(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return x >>> 0 > y >>> 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$27(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return (x | 0) >= (y | 0) | 0; + return wasm2asm_i32$0 | 0; + } + + function $$28(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return x >>> 0 >= y >>> 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function __wasm_ctz_i32(x) { + x = x | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0; + if ((x | 0) == (0 | 0)) $$9 = 32; else $$9 = 31 - Math_clz32(x ^ (x - 1 | 0) | 0) | 0; + return $$9 | 0; + } + + function __wasm_popcnt_i32(x) { + x = x | 0; + var count = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0; + count = 0; + b : { + l : do { + $$5 = count; + if ((x | 0) == (0 | 0)) break b; + x = x & (x - 1 | 0) | 0; + count = count + 1 | 0; + continue l; + break l; + } while (1); + }; + return $$5 | 0; + } + + function __wasm_rotl_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 >>> (k & 31 | 0) | 0) & x | 0) << (k & 31 | 0) | 0 | (((4294967295 << (32 - (k & 31 | 0) | 0) | 0) & x | 0) >>> (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function __wasm_rotr_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 << (k & 31 | 0) | 0) & x | 0) >>> (k & 31 | 0) | 0 | (((4294967295 >>> (32 - (k & 31 | 0) | 0) | 0) & x | 0) << (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + return { + add: $$0, + sub: $$1, + mul: $$2, + div_s: $$3, + div_u: $$4, + rem_s: $$5, + rem_u: $$6, + and: $$7, + or: $$8, + xor: $$9, + shl: $$10, + shr_s: $$11, + shr_u: $$12, + rotl: $$13, + rotr: $$14, + clz: $$15, + ctz: $$16, + popcnt: $$17, + eqz: $$18, + eq: $$19, + ne: $$20, + lt_s: $$21, + lt_u: $$22, + le_s: $$23, + le_u: $$24, + gt_s: $$25, + gt_u: $$26, + ge_s: $$27, + ge_u: $$28 + }; +} + diff --git a/src/binaryen/test/i64-setTempRet0.asm.js b/src/binaryen/test/i64-setTempRet0.asm.js new file mode 100644 index 0000000000..496414148b --- /dev/null +++ b/src/binaryen/test/i64-setTempRet0.asm.js @@ -0,0 +1,24 @@ +// +// Test i64 support in wasm-only builds. In this case, fastcomp emits code that is +// not asm.js, it will only ever run as wasm, and contains special intrinsics for +// asm2wasm that map LLVM IR into i64s. +// + +function asm(global, env, buffer) { + "use asm"; + + var illegalImportResult = env.illegalImportResult; + + var tempRet0 = 0; // this should be used to legalize the illegal result + + function illegalResult() { // illegal result, exported + return i64_const(1, 2); + } + + function imports() { + return i64_trunc(i64(illegalImportResult())) | 0; + } + + return { illegalResult: illegalResult, imports: imports }; +} + diff --git a/src/binaryen/test/i64-setTempRet0.fromasm b/src/binaryen/test/i64-setTempRet0.fromasm new file mode 100644 index 0000000000..10a29ea790 --- /dev/null +++ b/src/binaryen/test/i64-setTempRet0.fromasm @@ -0,0 +1,52 @@ +(module + (type $FUNCSIG$j (func (result i64))) + (type $legaltype$illegalImportResult (func (result i32))) + (import "env" "illegalImportResult" (func $illegalImportResult (result i64))) + (import "env" "illegalImportResult" (func $legalimport$illegalImportResult (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $tempRet0 (mut i32) (i32.const 0)) + (data (get_global $memoryBase) "i64-setTempRet0.asm.js") + (export "illegalResult" (func $legalstub$illegalResult)) + (export "imports" (func $imports)) + (func $illegalResult (; 2 ;) (result i64) + (i64.const 8589934593) + ) + (func $imports (; 3 ;) (result i32) + (i32.wrap/i64 + (call $legalfunc$illegalImportResult) + ) + ) + (func $legalstub$illegalResult (; 4 ;) (result i32) + (local $0 i64) + (set_local $0 + (call $illegalResult) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $0) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $0) + ) + ) + (func $legalfunc$illegalImportResult (; 5 ;) (result i64) + (i64.or + (i64.extend_u/i32 + (call $legalimport$illegalImportResult) + ) + (i64.shl + (i64.extend_u/i32 + (get_global $tempRet0) + ) + (i64.const 32) + ) + ) + ) +) diff --git a/src/binaryen/test/i64-setTempRet0.fromasm.clamp b/src/binaryen/test/i64-setTempRet0.fromasm.clamp new file mode 100644 index 0000000000..10a29ea790 --- /dev/null +++ b/src/binaryen/test/i64-setTempRet0.fromasm.clamp @@ -0,0 +1,52 @@ +(module + (type $FUNCSIG$j (func (result i64))) + (type $legaltype$illegalImportResult (func (result i32))) + (import "env" "illegalImportResult" (func $illegalImportResult (result i64))) + (import "env" "illegalImportResult" (func $legalimport$illegalImportResult (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $tempRet0 (mut i32) (i32.const 0)) + (data (get_global $memoryBase) "i64-setTempRet0.asm.js") + (export "illegalResult" (func $legalstub$illegalResult)) + (export "imports" (func $imports)) + (func $illegalResult (; 2 ;) (result i64) + (i64.const 8589934593) + ) + (func $imports (; 3 ;) (result i32) + (i32.wrap/i64 + (call $legalfunc$illegalImportResult) + ) + ) + (func $legalstub$illegalResult (; 4 ;) (result i32) + (local $0 i64) + (set_local $0 + (call $illegalResult) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $0) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $0) + ) + ) + (func $legalfunc$illegalImportResult (; 5 ;) (result i64) + (i64.or + (i64.extend_u/i32 + (call $legalimport$illegalImportResult) + ) + (i64.shl + (i64.extend_u/i32 + (get_global $tempRet0) + ) + (i64.const 32) + ) + ) + ) +) diff --git a/src/binaryen/test/i64-setTempRet0.fromasm.clamp.no-opts b/src/binaryen/test/i64-setTempRet0.fromasm.clamp.no-opts new file mode 100644 index 0000000000..71fecb26ba --- /dev/null +++ b/src/binaryen/test/i64-setTempRet0.fromasm.clamp.no-opts @@ -0,0 +1,55 @@ +(module + (type $FUNCSIG$j (func (result i64))) + (type $legaltype$illegalImportResult (func (result i32))) + (import "env" "illegalImportResult" (func $illegalImportResult (result i64))) + (import "env" "illegalImportResult" (func $legalimport$illegalImportResult (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $tempRet0 (mut i32) (i32.const 0)) + (export "illegalResult" (func $legalstub$illegalResult)) + (export "imports" (func $imports)) + (func $illegalResult (; 2 ;) (result i64) + (return + (i64.const 8589934593) + ) + ) + (func $imports (; 3 ;) (result i32) + (return + (i32.wrap/i64 + (call $legalfunc$illegalImportResult) + ) + ) + ) + (func $legalstub$illegalResult (; 4 ;) (result i32) + (local $0 i64) + (set_local $0 + (call $illegalResult) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $0) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $0) + ) + ) + (func $legalfunc$illegalImportResult (; 5 ;) (result i64) + (i64.or + (i64.extend_u/i32 + (call $legalimport$illegalImportResult) + ) + (i64.shl + (i64.extend_u/i32 + (get_global $tempRet0) + ) + (i64.const 32) + ) + ) + ) +) diff --git a/src/binaryen/test/i64-setTempRet0.fromasm.imprecise b/src/binaryen/test/i64-setTempRet0.fromasm.imprecise new file mode 100644 index 0000000000..0d010664f5 --- /dev/null +++ b/src/binaryen/test/i64-setTempRet0.fromasm.imprecise @@ -0,0 +1,51 @@ +(module + (type $FUNCSIG$j (func (result i64))) + (type $legaltype$illegalImportResult (func (result i32))) + (import "env" "illegalImportResult" (func $illegalImportResult (result i64))) + (import "env" "illegalImportResult" (func $legalimport$illegalImportResult (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $tempRet0 (mut i32) (i32.const 0)) + (export "illegalResult" (func $legalstub$illegalResult)) + (export "imports" (func $imports)) + (func $illegalResult (; 2 ;) (result i64) + (i64.const 8589934593) + ) + (func $imports (; 3 ;) (result i32) + (i32.wrap/i64 + (call $legalfunc$illegalImportResult) + ) + ) + (func $legalstub$illegalResult (; 4 ;) (result i32) + (local $0 i64) + (set_local $0 + (call $illegalResult) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $0) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $0) + ) + ) + (func $legalfunc$illegalImportResult (; 5 ;) (result i64) + (i64.or + (i64.extend_u/i32 + (call $legalimport$illegalImportResult) + ) + (i64.shl + (i64.extend_u/i32 + (get_global $tempRet0) + ) + (i64.const 32) + ) + ) + ) +) diff --git a/src/binaryen/test/i64-setTempRet0.fromasm.imprecise.no-opts b/src/binaryen/test/i64-setTempRet0.fromasm.imprecise.no-opts new file mode 100644 index 0000000000..71fecb26ba --- /dev/null +++ b/src/binaryen/test/i64-setTempRet0.fromasm.imprecise.no-opts @@ -0,0 +1,55 @@ +(module + (type $FUNCSIG$j (func (result i64))) + (type $legaltype$illegalImportResult (func (result i32))) + (import "env" "illegalImportResult" (func $illegalImportResult (result i64))) + (import "env" "illegalImportResult" (func $legalimport$illegalImportResult (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $tempRet0 (mut i32) (i32.const 0)) + (export "illegalResult" (func $legalstub$illegalResult)) + (export "imports" (func $imports)) + (func $illegalResult (; 2 ;) (result i64) + (return + (i64.const 8589934593) + ) + ) + (func $imports (; 3 ;) (result i32) + (return + (i32.wrap/i64 + (call $legalfunc$illegalImportResult) + ) + ) + ) + (func $legalstub$illegalResult (; 4 ;) (result i32) + (local $0 i64) + (set_local $0 + (call $illegalResult) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $0) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $0) + ) + ) + (func $legalfunc$illegalImportResult (; 5 ;) (result i64) + (i64.or + (i64.extend_u/i32 + (call $legalimport$illegalImportResult) + ) + (i64.shl + (i64.extend_u/i32 + (get_global $tempRet0) + ) + (i64.const 32) + ) + ) + ) +) diff --git a/src/binaryen/test/i64-setTempRet0.fromasm.no-opts b/src/binaryen/test/i64-setTempRet0.fromasm.no-opts new file mode 100644 index 0000000000..71fecb26ba --- /dev/null +++ b/src/binaryen/test/i64-setTempRet0.fromasm.no-opts @@ -0,0 +1,55 @@ +(module + (type $FUNCSIG$j (func (result i64))) + (type $legaltype$illegalImportResult (func (result i32))) + (import "env" "illegalImportResult" (func $illegalImportResult (result i64))) + (import "env" "illegalImportResult" (func $legalimport$illegalImportResult (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $tempRet0 (mut i32) (i32.const 0)) + (export "illegalResult" (func $legalstub$illegalResult)) + (export "imports" (func $imports)) + (func $illegalResult (; 2 ;) (result i64) + (return + (i64.const 8589934593) + ) + ) + (func $imports (; 3 ;) (result i32) + (return + (i32.wrap/i64 + (call $legalfunc$illegalImportResult) + ) + ) + ) + (func $legalstub$illegalResult (; 4 ;) (result i32) + (local $0 i64) + (set_local $0 + (call $illegalResult) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $0) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $0) + ) + ) + (func $legalfunc$illegalImportResult (; 5 ;) (result i64) + (i64.or + (i64.extend_u/i32 + (call $legalimport$illegalImportResult) + ) + (i64.shl + (i64.extend_u/i32 + (get_global $tempRet0) + ) + (i64.const 32) + ) + ) + ) +) diff --git a/src/binaryen/test/importedSignCast.asm.js b/src/binaryen/test/importedSignCast.asm.js new file mode 100644 index 0000000000..60cc99d393 --- /dev/null +++ b/src/binaryen/test/importedSignCast.asm.js @@ -0,0 +1,14 @@ +function asm(global, env, buffer) { + "use asm"; + + var gm = env._emscripten_glIsTexture; + + function func() { + gm(0) << 24 >> 24; + } + + var FUNCTION_TABLE_a = [ gm ]; + + return { func: func }; +} + diff --git a/src/binaryen/test/importedSignCast.fromasm b/src/binaryen/test/importedSignCast.fromasm new file mode 100644 index 0000000000..8b1fa1e7ea --- /dev/null +++ b/src/binaryen/test/importedSignCast.fromasm @@ -0,0 +1,18 @@ +(module + (type $FUNCSIG$ii (func (param i32) (result i32))) + (import "env" "_emscripten_glIsTexture" (func $gm (param i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 1 1 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (elem (get_global $tableBase) $gm) + (data (get_global $memoryBase) "importedSignCast.asm.js") + (export "func" (func $func)) + (func $func (; 1 ;) + (drop + (call $gm + (i32.const 0) + ) + ) + ) +) diff --git a/src/binaryen/test/importedSignCast.fromasm.clamp b/src/binaryen/test/importedSignCast.fromasm.clamp new file mode 100644 index 0000000000..8b1fa1e7ea --- /dev/null +++ b/src/binaryen/test/importedSignCast.fromasm.clamp @@ -0,0 +1,18 @@ +(module + (type $FUNCSIG$ii (func (param i32) (result i32))) + (import "env" "_emscripten_glIsTexture" (func $gm (param i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 1 1 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (elem (get_global $tableBase) $gm) + (data (get_global $memoryBase) "importedSignCast.asm.js") + (export "func" (func $func)) + (func $func (; 1 ;) + (drop + (call $gm + (i32.const 0) + ) + ) + ) +) diff --git a/src/binaryen/test/importedSignCast.fromasm.clamp.no-opts b/src/binaryen/test/importedSignCast.fromasm.clamp.no-opts new file mode 100644 index 0000000000..c7cb282e86 --- /dev/null +++ b/src/binaryen/test/importedSignCast.fromasm.clamp.no-opts @@ -0,0 +1,23 @@ +(module + (type $FUNCSIG$ii (func (param i32) (result i32))) + (import "env" "_emscripten_glIsTexture" (func $gm (param i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 1 1 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (elem (get_global $tableBase) $gm) + (export "func" (func $func)) + (func $func (; 1 ;) + (drop + (i32.shr_s + (i32.shl + (call $gm + (i32.const 0) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) +) diff --git a/src/binaryen/test/importedSignCast.fromasm.imprecise b/src/binaryen/test/importedSignCast.fromasm.imprecise new file mode 100644 index 0000000000..3c6fc14058 --- /dev/null +++ b/src/binaryen/test/importedSignCast.fromasm.imprecise @@ -0,0 +1,17 @@ +(module + (type $FUNCSIG$ii (func (param i32) (result i32))) + (import "env" "_emscripten_glIsTexture" (func $gm (param i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 1 1 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (elem (get_global $tableBase) $gm) + (export "func" (func $func)) + (func $func (; 1 ;) + (drop + (call $gm + (i32.const 0) + ) + ) + ) +) diff --git a/src/binaryen/test/importedSignCast.fromasm.imprecise.no-opts b/src/binaryen/test/importedSignCast.fromasm.imprecise.no-opts new file mode 100644 index 0000000000..c7cb282e86 --- /dev/null +++ b/src/binaryen/test/importedSignCast.fromasm.imprecise.no-opts @@ -0,0 +1,23 @@ +(module + (type $FUNCSIG$ii (func (param i32) (result i32))) + (import "env" "_emscripten_glIsTexture" (func $gm (param i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 1 1 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (elem (get_global $tableBase) $gm) + (export "func" (func $func)) + (func $func (; 1 ;) + (drop + (i32.shr_s + (i32.shl + (call $gm + (i32.const 0) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) +) diff --git a/src/binaryen/test/importedSignCast.fromasm.no-opts b/src/binaryen/test/importedSignCast.fromasm.no-opts new file mode 100644 index 0000000000..c7cb282e86 --- /dev/null +++ b/src/binaryen/test/importedSignCast.fromasm.no-opts @@ -0,0 +1,23 @@ +(module + (type $FUNCSIG$ii (func (param i32) (result i32))) + (import "env" "_emscripten_glIsTexture" (func $gm (param i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 1 1 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (elem (get_global $tableBase) $gm) + (export "func" (func $func)) + (func $func (; 1 ;) + (drop + (i32.shr_s + (i32.shl + (call $gm + (i32.const 0) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) +) diff --git a/src/binaryen/test/imported_memory.wast b/src/binaryen/test/imported_memory.wast new file mode 100644 index 0000000000..790ffbbfa6 --- /dev/null +++ b/src/binaryen/test/imported_memory.wast @@ -0,0 +1,4 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 256 256 anyfunc)) +) diff --git a/src/binaryen/test/imported_memory.wast.from-wast b/src/binaryen/test/imported_memory.wast.from-wast new file mode 100644 index 0000000000..ca28ac7515 --- /dev/null +++ b/src/binaryen/test/imported_memory.wast.from-wast @@ -0,0 +1,4 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 256 256 anyfunc)) +) diff --git a/src/binaryen/test/imported_memory.wast.fromBinary b/src/binaryen/test/imported_memory.wast.fromBinary new file mode 100644 index 0000000000..3e280b9cb9 --- /dev/null +++ b/src/binaryen/test/imported_memory.wast.fromBinary @@ -0,0 +1,5 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 256 256 anyfunc)) +) + diff --git a/src/binaryen/test/imported_memory.wast.fromBinary.noDebugInfo b/src/binaryen/test/imported_memory.wast.fromBinary.noDebugInfo new file mode 100644 index 0000000000..3e280b9cb9 --- /dev/null +++ b/src/binaryen/test/imported_memory.wast.fromBinary.noDebugInfo @@ -0,0 +1,5 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 256 256 anyfunc)) +) + diff --git a/src/binaryen/test/imported_memory_growth.wast b/src/binaryen/test/imported_memory_growth.wast new file mode 100644 index 0000000000..a6e99fe85a --- /dev/null +++ b/src/binaryen/test/imported_memory_growth.wast @@ -0,0 +1,4 @@ +(module + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 256 anyfunc)) +) diff --git a/src/binaryen/test/imported_memory_growth.wast.from-wast b/src/binaryen/test/imported_memory_growth.wast.from-wast new file mode 100644 index 0000000000..44c5b1644a --- /dev/null +++ b/src/binaryen/test/imported_memory_growth.wast.from-wast @@ -0,0 +1,4 @@ +(module + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 256 anyfunc)) +) diff --git a/src/binaryen/test/imported_memory_growth.wast.fromBinary b/src/binaryen/test/imported_memory_growth.wast.fromBinary new file mode 100644 index 0000000000..d175ff2b27 --- /dev/null +++ b/src/binaryen/test/imported_memory_growth.wast.fromBinary @@ -0,0 +1,5 @@ +(module + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 256 anyfunc)) +) + diff --git a/src/binaryen/test/imported_memory_growth.wast.fromBinary.noDebugInfo b/src/binaryen/test/imported_memory_growth.wast.fromBinary.noDebugInfo new file mode 100644 index 0000000000..d175ff2b27 --- /dev/null +++ b/src/binaryen/test/imported_memory_growth.wast.fromBinary.noDebugInfo @@ -0,0 +1,5 @@ +(module + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 256 anyfunc)) +) + diff --git a/src/binaryen/test/int_ops.c b/src/binaryen/test/int_ops.c new file mode 100644 index 0000000000..2e4a9b17da --- /dev/null +++ b/src/binaryen/test/int_ops.c @@ -0,0 +1,32 @@ +#include + +// unary +int EMSCRIPTEN_KEEPALIVE clz(int x) { return __builtin_clz(x); } + +// binary +int EMSCRIPTEN_KEEPALIVE add(int x, int y) { return x + y; } +int EMSCRIPTEN_KEEPALIVE sub(int x, int y) { return x - y; } +int EMSCRIPTEN_KEEPALIVE mul(int x, int y) { return x * y; } +int EMSCRIPTEN_KEEPALIVE sdiv(int x, int y) { return x / y; } +unsigned EMSCRIPTEN_KEEPALIVE udiv(unsigned x, unsigned y) { return x / y; } +int EMSCRIPTEN_KEEPALIVE srem(int x, int y) { return x % y; } +unsigned EMSCRIPTEN_KEEPALIVE urem(unsigned x, unsigned y) { return x % y; } +int EMSCRIPTEN_KEEPALIVE and(int x, int y) { return x & y; } +int EMSCRIPTEN_KEEPALIVE or(int x, int y) { return x | y; } +int EMSCRIPTEN_KEEPALIVE xor(int x, int y) { return x ^ y; } +int EMSCRIPTEN_KEEPALIVE shl(int x, int y) { return x << y; } +int EMSCRIPTEN_KEEPALIVE sshr(int x, int y) { return x >> y; } +unsigned EMSCRIPTEN_KEEPALIVE ushr(unsigned x, unsigned y) { return x >> y; } + +// comparisons +int EMSCRIPTEN_KEEPALIVE eq(int x, int y) { return x == y; } +int EMSCRIPTEN_KEEPALIVE ne(int x, int y) { return x != y; } +int EMSCRIPTEN_KEEPALIVE lts(int x, int y) { return x < y; } +int EMSCRIPTEN_KEEPALIVE ltu(unsigned x, unsigned y) { return x < y; } +int EMSCRIPTEN_KEEPALIVE les(int x, int y) { return x <= y; } +int EMSCRIPTEN_KEEPALIVE leu(unsigned x, unsigned y) { return x <= y; } +int EMSCRIPTEN_KEEPALIVE gts(int x, int y) { return x > y; } +int EMSCRIPTEN_KEEPALIVE gtu(unsigned x, unsigned y) { return x > y; } +int EMSCRIPTEN_KEEPALIVE ges(int x, int y) { return x >= y; } +int EMSCRIPTEN_KEEPALIVE geu(unsigned x, unsigned y) { return x >= y; } + diff --git a/src/binaryen/test/int_ops.emcc b/src/binaryen/test/int_ops.emcc new file mode 100644 index 0000000000..40c421eee9 --- /dev/null +++ b/src/binaryen/test/int_ops.emcc @@ -0,0 +1 @@ +["-s", "ASSERTIONS=0"] diff --git a/src/binaryen/test/int_ops.post.js b/src/binaryen/test/int_ops.post.js new file mode 100644 index 0000000000..f1f84c31b4 --- /dev/null +++ b/src/binaryen/test/int_ops.post.js @@ -0,0 +1,53 @@ + +// unary +Module.print('clz'); +Module.print(Module._clz(1)); +Module.print(Module._clz(-1)); +Module.print(Module._clz(8)); + +// binary +function testBinary(name, noSecondZero, noSecondBig) { + Module.print(name); + function doTest(x, y) { + Module.print(' ' + [x, y] + ' ==> ' + Module['_' + name](x, y)); + } + if (!noSecondZero) doTest(0, 0); + doTest(0, 1); + if (!noSecondZero) doTest(1, 0); + doTest(1, 1); + doTest(5, 6); + doTest(6, 5); + if (!noSecondBig) doTest(101, -12); + if (!noSecondBig) doTest(-12, 101); + doTest(-1, 5); + if (!noSecondBig) doTest(5, -1); + if (!noSecondBig) doTest(-1, -1); +} +testBinary('add'); +testBinary('sub'); +testBinary('mul'); +testBinary('sdiv', true); +testBinary('udiv', true); +testBinary('srem', true); +testBinary('urem', true); +testBinary('and'); +testBinary('or'); +testBinary('xor'); +testBinary('shl', false, true); +testBinary('sshr', false, true); +testBinary('ushr', false, true); + +// comparisons +testBinary('eq'); +testBinary('ne'); +testBinary('lts'); +testBinary('ltu'); +testBinary('les'); +testBinary('leu'); +testBinary('gts'); +testBinary('gtu'); +testBinary('ges'); +testBinary('geu'); + +Module.print('done.'); + diff --git a/src/binaryen/test/int_ops.txt b/src/binaryen/test/int_ops.txt new file mode 100644 index 0000000000..d159a4123b --- /dev/null +++ b/src/binaryen/test/int_ops.txt @@ -0,0 +1,261 @@ +clz +31 +0 +28 +add + 0,0 ==> 0 + 0,1 ==> 1 + 1,0 ==> 1 + 1,1 ==> 2 + 5,6 ==> 11 + 6,5 ==> 11 + 101,-12 ==> 89 + -12,101 ==> 89 + -1,5 ==> 4 + 5,-1 ==> 4 + -1,-1 ==> -2 +sub + 0,0 ==> 0 + 0,1 ==> -1 + 1,0 ==> 1 + 1,1 ==> 0 + 5,6 ==> -1 + 6,5 ==> 1 + 101,-12 ==> 113 + -12,101 ==> -113 + -1,5 ==> -6 + 5,-1 ==> 6 + -1,-1 ==> 0 +mul + 0,0 ==> 0 + 0,1 ==> 0 + 1,0 ==> 0 + 1,1 ==> 1 + 5,6 ==> 30 + 6,5 ==> 30 + 101,-12 ==> -1212 + -12,101 ==> -1212 + -1,5 ==> -5 + 5,-1 ==> -5 + -1,-1 ==> 1 +sdiv + 0,1 ==> 0 + 1,1 ==> 1 + 5,6 ==> 0 + 6,5 ==> 1 + 101,-12 ==> -8 + -12,101 ==> 0 + -1,5 ==> 0 + 5,-1 ==> -5 + -1,-1 ==> 1 +udiv + 0,1 ==> 0 + 1,1 ==> 1 + 5,6 ==> 0 + 6,5 ==> 1 + 101,-12 ==> 0 + -12,101 ==> 42524428 + -1,5 ==> 858993459 + 5,-1 ==> 0 + -1,-1 ==> 1 +srem + 0,1 ==> 0 + 1,1 ==> 0 + 5,6 ==> 5 + 6,5 ==> 1 + 101,-12 ==> 5 + -12,101 ==> -12 + -1,5 ==> -1 + 5,-1 ==> 0 + -1,-1 ==> 0 +urem + 0,1 ==> 0 + 1,1 ==> 0 + 5,6 ==> 5 + 6,5 ==> 1 + 101,-12 ==> 101 + -12,101 ==> 56 + -1,5 ==> 0 + 5,-1 ==> 5 + -1,-1 ==> 0 +and + 0,0 ==> 0 + 0,1 ==> 0 + 1,0 ==> 0 + 1,1 ==> 1 + 5,6 ==> 4 + 6,5 ==> 4 + 101,-12 ==> 100 + -12,101 ==> 100 + -1,5 ==> 5 + 5,-1 ==> 5 + -1,-1 ==> -1 +or + 0,0 ==> 0 + 0,1 ==> 1 + 1,0 ==> 1 + 1,1 ==> 1 + 5,6 ==> 7 + 6,5 ==> 7 + 101,-12 ==> -11 + -12,101 ==> -11 + -1,5 ==> -1 + 5,-1 ==> -1 + -1,-1 ==> -1 +xor + 0,0 ==> 0 + 0,1 ==> 1 + 1,0 ==> 1 + 1,1 ==> 0 + 5,6 ==> 3 + 6,5 ==> 3 + 101,-12 ==> -111 + -12,101 ==> -111 + -1,5 ==> -6 + 5,-1 ==> -6 + -1,-1 ==> 0 +shl + 0,0 ==> 0 + 0,1 ==> 0 + 1,0 ==> 1 + 1,1 ==> 2 + 5,6 ==> 320 + 6,5 ==> 192 + -1,5 ==> -32 +sshr + 0,0 ==> 0 + 0,1 ==> 0 + 1,0 ==> 1 + 1,1 ==> 0 + 5,6 ==> 0 + 6,5 ==> 0 + -1,5 ==> -1 +ushr + 0,0 ==> 0 + 0,1 ==> 0 + 1,0 ==> 1 + 1,1 ==> 0 + 5,6 ==> 0 + 6,5 ==> 0 + -1,5 ==> 134217727 +eq + 0,0 ==> 1 + 0,1 ==> 0 + 1,0 ==> 0 + 1,1 ==> 1 + 5,6 ==> 0 + 6,5 ==> 0 + 101,-12 ==> 0 + -12,101 ==> 0 + -1,5 ==> 0 + 5,-1 ==> 0 + -1,-1 ==> 1 +ne + 0,0 ==> 0 + 0,1 ==> 1 + 1,0 ==> 1 + 1,1 ==> 0 + 5,6 ==> 1 + 6,5 ==> 1 + 101,-12 ==> 1 + -12,101 ==> 1 + -1,5 ==> 1 + 5,-1 ==> 1 + -1,-1 ==> 0 +lts + 0,0 ==> 0 + 0,1 ==> 1 + 1,0 ==> 0 + 1,1 ==> 0 + 5,6 ==> 1 + 6,5 ==> 0 + 101,-12 ==> 0 + -12,101 ==> 1 + -1,5 ==> 1 + 5,-1 ==> 0 + -1,-1 ==> 0 +ltu + 0,0 ==> 0 + 0,1 ==> 1 + 1,0 ==> 0 + 1,1 ==> 0 + 5,6 ==> 1 + 6,5 ==> 0 + 101,-12 ==> 1 + -12,101 ==> 0 + -1,5 ==> 0 + 5,-1 ==> 1 + -1,-1 ==> 0 +les + 0,0 ==> 1 + 0,1 ==> 1 + 1,0 ==> 0 + 1,1 ==> 1 + 5,6 ==> 1 + 6,5 ==> 0 + 101,-12 ==> 0 + -12,101 ==> 1 + -1,5 ==> 1 + 5,-1 ==> 0 + -1,-1 ==> 1 +leu + 0,0 ==> 1 + 0,1 ==> 1 + 1,0 ==> 0 + 1,1 ==> 1 + 5,6 ==> 1 + 6,5 ==> 0 + 101,-12 ==> 1 + -12,101 ==> 0 + -1,5 ==> 0 + 5,-1 ==> 1 + -1,-1 ==> 1 +gts + 0,0 ==> 0 + 0,1 ==> 0 + 1,0 ==> 1 + 1,1 ==> 0 + 5,6 ==> 0 + 6,5 ==> 1 + 101,-12 ==> 1 + -12,101 ==> 0 + -1,5 ==> 0 + 5,-1 ==> 1 + -1,-1 ==> 0 +gtu + 0,0 ==> 0 + 0,1 ==> 0 + 1,0 ==> 1 + 1,1 ==> 0 + 5,6 ==> 0 + 6,5 ==> 1 + 101,-12 ==> 0 + -12,101 ==> 1 + -1,5 ==> 1 + 5,-1 ==> 0 + -1,-1 ==> 0 +ges + 0,0 ==> 1 + 0,1 ==> 0 + 1,0 ==> 1 + 1,1 ==> 1 + 5,6 ==> 0 + 6,5 ==> 1 + 101,-12 ==> 1 + -12,101 ==> 0 + -1,5 ==> 0 + 5,-1 ==> 1 + -1,-1 ==> 1 +geu + 0,0 ==> 1 + 0,1 ==> 0 + 1,0 ==> 1 + 1,1 ==> 1 + 5,6 ==> 0 + 6,5 ==> 1 + 101,-12 ==> 0 + -12,101 ==> 1 + -1,5 ==> 1 + 5,-1 ==> 0 + -1,-1 ==> 1 +done. diff --git a/src/binaryen/test/kitchen_sink.wast b/src/binaryen/test/kitchen_sink.wast new file mode 100644 index 0000000000..dc15838116 --- /dev/null +++ b/src/binaryen/test/kitchen_sink.wast @@ -0,0 +1,667 @@ +(module + (type $0 (func (result i32))) + (memory $0 4096 4096) + (data (i32.const 1026) "\14\00") + (func $kitchensink (type $0) (result i32) + (block $block0 (result i32) + (drop + (i32.add + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.sub + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.mul + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.div_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.div_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.rem_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.rem_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.and + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.or + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.xor + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.shl + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.shr_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.shr_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.eq + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.ne + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.lt_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.le_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.lt_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.le_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.gt_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.ge_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.gt_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.ge_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.clz + (i32.const 10) + ) + ) + (drop + (i32.ctz + (i32.const 10) + ) + ) + (drop + (i32.popcnt + (i32.const 10) + ) + ) + (drop + (i64.add + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.sub + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.mul + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.div_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.div_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.rem_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.rem_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.and + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.or + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.xor + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.shl + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.shr_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.shr_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.eq + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.ne + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.lt_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.le_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.lt_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.le_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.gt_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.ge_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.gt_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.ge_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.clz + (i64.const 100) + ) + ) + (drop + (i64.ctz + (i64.const 100) + ) + ) + (drop + (i64.popcnt + (i64.const 100) + ) + ) + (drop + (f32.add + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.sub + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.mul + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.div + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.min + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.max + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.abs + (f32.const 10) + ) + ) + (drop + (f32.neg + (f32.const 10) + ) + ) + (drop + (f32.copysign + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.ceil + (f32.const 10) + ) + ) + (drop + (f32.floor + (f32.const 10) + ) + ) + (drop + (f32.trunc + (f32.const 10) + ) + ) + (drop + (f32.nearest + (f32.const 10) + ) + ) + (drop + (f32.sqrt + (f32.const 10) + ) + ) + (drop + (f32.eq + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.ne + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.lt + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.le + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.gt + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.ge + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f64.add + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.sub + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.mul + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.div + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.min + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.max + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.abs + (f64.const 10) + ) + ) + (drop + (f64.neg + (f64.const 10) + ) + ) + (drop + (f64.copysign + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.ceil + (f64.const 10) + ) + ) + (drop + (f64.floor + (f64.const 10) + ) + ) + (drop + (f64.trunc + (f64.const 10) + ) + ) + (drop + (f64.nearest + (f64.const 10) + ) + ) + (drop + (f64.sqrt + (f64.const 10) + ) + ) + (drop + (f64.eq + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.ne + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.lt + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.le + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.gt + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.ge + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (i32.trunc_s/f32 + (f32.const 10) + ) + ) + (drop + (i32.trunc_s/f64 + (f64.const 10) + ) + ) + (drop + (i32.trunc_u/f32 + (f32.const 10) + ) + ) + (drop + (i32.trunc_u/f64 + (f64.const 10) + ) + ) + (drop + (i32.wrap/i64 + (i64.const 100) + ) + ) + (drop + (i64.trunc_s/f32 + (f32.const 10) + ) + ) + (drop + (i64.trunc_s/f64 + (f64.const 10) + ) + ) + (drop + (i64.trunc_u/f32 + (f32.const 10) + ) + ) + (drop + (i64.trunc_u/f64 + (f64.const 10) + ) + ) + (drop + (i64.extend_s/i32 + (i32.const 10) + ) + ) + (drop + (i64.extend_u/i32 + (i32.const 10) + ) + ) + (drop + (f32.convert_s/i32 + (i32.const 10) + ) + ) + (drop + (f32.convert_u/i32 + (i32.const 10) + ) + ) + (drop + (f32.convert_s/i64 + (i64.const 100) + ) + ) + (drop + (f32.convert_u/i64 + (i64.const 100) + ) + ) + (drop + (f32.demote/f64 + (f64.const 10) + ) + ) + (drop + (f32.reinterpret/i32 + (i32.const 10) + ) + ) + (drop + (f64.convert_s/i32 + (i32.const 10) + ) + ) + (drop + (f64.convert_u/i32 + (i32.const 10) + ) + ) + (drop + (f64.convert_s/i64 + (i64.const 100) + ) + ) + (drop + (f64.convert_u/i64 + (i64.const 100) + ) + ) + (drop + (f64.promote/f32 + (f32.const 10) + ) + ) + (drop + (f64.reinterpret/i64 + (i64.const 100) + ) + ) + (drop + (i32.reinterpret/f32 + (f32.const 10) + ) + ) + (drop + (i64.reinterpret/f64 + (f64.const 10) + ) + ) + (i32.const 0) + ) + ) +) diff --git a/src/binaryen/test/kitchen_sink.wast.from-wast b/src/binaryen/test/kitchen_sink.wast.from-wast new file mode 100644 index 0000000000..621b02a562 --- /dev/null +++ b/src/binaryen/test/kitchen_sink.wast.from-wast @@ -0,0 +1,667 @@ +(module + (type $0 (func (result i32))) + (memory $0 4096 4096) + (data (i32.const 1026) "\14\00") + (func $kitchensink (; 0 ;) (type $0) (result i32) + (block $block0 (result i32) + (drop + (i32.add + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.sub + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.mul + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.div_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.div_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.rem_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.rem_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.and + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.or + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.xor + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.shl + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.shr_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.shr_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.eq + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.ne + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.lt_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.le_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.lt_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.le_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.gt_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.ge_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.gt_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.ge_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.clz + (i32.const 10) + ) + ) + (drop + (i32.ctz + (i32.const 10) + ) + ) + (drop + (i32.popcnt + (i32.const 10) + ) + ) + (drop + (i64.add + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.sub + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.mul + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.div_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.div_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.rem_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.rem_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.and + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.or + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.xor + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.shl + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.shr_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.shr_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.eq + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.ne + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.lt_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.le_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.lt_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.le_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.gt_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.ge_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.gt_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.ge_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.clz + (i64.const 100) + ) + ) + (drop + (i64.ctz + (i64.const 100) + ) + ) + (drop + (i64.popcnt + (i64.const 100) + ) + ) + (drop + (f32.add + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.sub + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.mul + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.div + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.min + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.max + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.abs + (f32.const 10) + ) + ) + (drop + (f32.neg + (f32.const 10) + ) + ) + (drop + (f32.copysign + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.ceil + (f32.const 10) + ) + ) + (drop + (f32.floor + (f32.const 10) + ) + ) + (drop + (f32.trunc + (f32.const 10) + ) + ) + (drop + (f32.nearest + (f32.const 10) + ) + ) + (drop + (f32.sqrt + (f32.const 10) + ) + ) + (drop + (f32.eq + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.ne + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.lt + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.le + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.gt + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.ge + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f64.add + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.sub + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.mul + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.div + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.min + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.max + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.abs + (f64.const 10) + ) + ) + (drop + (f64.neg + (f64.const 10) + ) + ) + (drop + (f64.copysign + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.ceil + (f64.const 10) + ) + ) + (drop + (f64.floor + (f64.const 10) + ) + ) + (drop + (f64.trunc + (f64.const 10) + ) + ) + (drop + (f64.nearest + (f64.const 10) + ) + ) + (drop + (f64.sqrt + (f64.const 10) + ) + ) + (drop + (f64.eq + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.ne + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.lt + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.le + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.gt + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.ge + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (i32.trunc_s/f32 + (f32.const 10) + ) + ) + (drop + (i32.trunc_s/f64 + (f64.const 10) + ) + ) + (drop + (i32.trunc_u/f32 + (f32.const 10) + ) + ) + (drop + (i32.trunc_u/f64 + (f64.const 10) + ) + ) + (drop + (i32.wrap/i64 + (i64.const 100) + ) + ) + (drop + (i64.trunc_s/f32 + (f32.const 10) + ) + ) + (drop + (i64.trunc_s/f64 + (f64.const 10) + ) + ) + (drop + (i64.trunc_u/f32 + (f32.const 10) + ) + ) + (drop + (i64.trunc_u/f64 + (f64.const 10) + ) + ) + (drop + (i64.extend_s/i32 + (i32.const 10) + ) + ) + (drop + (i64.extend_u/i32 + (i32.const 10) + ) + ) + (drop + (f32.convert_s/i32 + (i32.const 10) + ) + ) + (drop + (f32.convert_u/i32 + (i32.const 10) + ) + ) + (drop + (f32.convert_s/i64 + (i64.const 100) + ) + ) + (drop + (f32.convert_u/i64 + (i64.const 100) + ) + ) + (drop + (f32.demote/f64 + (f64.const 10) + ) + ) + (drop + (f32.reinterpret/i32 + (i32.const 10) + ) + ) + (drop + (f64.convert_s/i32 + (i32.const 10) + ) + ) + (drop + (f64.convert_u/i32 + (i32.const 10) + ) + ) + (drop + (f64.convert_s/i64 + (i64.const 100) + ) + ) + (drop + (f64.convert_u/i64 + (i64.const 100) + ) + ) + (drop + (f64.promote/f32 + (f32.const 10) + ) + ) + (drop + (f64.reinterpret/i64 + (i64.const 100) + ) + ) + (drop + (i32.reinterpret/f32 + (f32.const 10) + ) + ) + (drop + (i64.reinterpret/f64 + (f64.const 10) + ) + ) + (i32.const 0) + ) + ) +) diff --git a/src/binaryen/test/kitchen_sink.wast.fromBinary b/src/binaryen/test/kitchen_sink.wast.fromBinary new file mode 100644 index 0000000000..dee6984f88 --- /dev/null +++ b/src/binaryen/test/kitchen_sink.wast.fromBinary @@ -0,0 +1,666 @@ +(module + (type $0 (func (result i32))) + (memory $0 4096 4096) + (data (i32.const 1026) "\14\00") + (func $kitchensink (; 0 ;) (type $0) (result i32) + (drop + (i32.add + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.sub + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.mul + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.div_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.div_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.rem_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.rem_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.and + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.or + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.xor + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.shl + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.shr_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.shr_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.eq + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.ne + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.lt_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.le_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.lt_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.le_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.gt_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.ge_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.gt_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.ge_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.clz + (i32.const 10) + ) + ) + (drop + (i32.ctz + (i32.const 10) + ) + ) + (drop + (i32.popcnt + (i32.const 10) + ) + ) + (drop + (i64.add + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.sub + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.mul + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.div_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.div_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.rem_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.rem_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.and + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.or + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.xor + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.shl + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.shr_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.shr_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.eq + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.ne + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.lt_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.le_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.lt_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.le_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.gt_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.ge_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.gt_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.ge_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.clz + (i64.const 100) + ) + ) + (drop + (i64.ctz + (i64.const 100) + ) + ) + (drop + (i64.popcnt + (i64.const 100) + ) + ) + (drop + (f32.add + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.sub + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.mul + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.div + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.min + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.max + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.abs + (f32.const 10) + ) + ) + (drop + (f32.neg + (f32.const 10) + ) + ) + (drop + (f32.copysign + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.ceil + (f32.const 10) + ) + ) + (drop + (f32.floor + (f32.const 10) + ) + ) + (drop + (f32.trunc + (f32.const 10) + ) + ) + (drop + (f32.nearest + (f32.const 10) + ) + ) + (drop + (f32.sqrt + (f32.const 10) + ) + ) + (drop + (f32.eq + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.ne + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.lt + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.le + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.gt + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.ge + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f64.add + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.sub + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.mul + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.div + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.min + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.max + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.abs + (f64.const 10) + ) + ) + (drop + (f64.neg + (f64.const 10) + ) + ) + (drop + (f64.copysign + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.ceil + (f64.const 10) + ) + ) + (drop + (f64.floor + (f64.const 10) + ) + ) + (drop + (f64.trunc + (f64.const 10) + ) + ) + (drop + (f64.nearest + (f64.const 10) + ) + ) + (drop + (f64.sqrt + (f64.const 10) + ) + ) + (drop + (f64.eq + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.ne + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.lt + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.le + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.gt + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.ge + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (i32.trunc_s/f32 + (f32.const 10) + ) + ) + (drop + (i32.trunc_s/f64 + (f64.const 10) + ) + ) + (drop + (i32.trunc_u/f32 + (f32.const 10) + ) + ) + (drop + (i32.trunc_u/f64 + (f64.const 10) + ) + ) + (drop + (i32.wrap/i64 + (i64.const 100) + ) + ) + (drop + (i64.trunc_s/f32 + (f32.const 10) + ) + ) + (drop + (i64.trunc_s/f64 + (f64.const 10) + ) + ) + (drop + (i64.trunc_u/f32 + (f32.const 10) + ) + ) + (drop + (i64.trunc_u/f64 + (f64.const 10) + ) + ) + (drop + (i64.extend_s/i32 + (i32.const 10) + ) + ) + (drop + (i64.extend_u/i32 + (i32.const 10) + ) + ) + (drop + (f32.convert_s/i32 + (i32.const 10) + ) + ) + (drop + (f32.convert_u/i32 + (i32.const 10) + ) + ) + (drop + (f32.convert_s/i64 + (i64.const 100) + ) + ) + (drop + (f32.convert_u/i64 + (i64.const 100) + ) + ) + (drop + (f32.demote/f64 + (f64.const 10) + ) + ) + (drop + (f32.reinterpret/i32 + (i32.const 10) + ) + ) + (drop + (f64.convert_s/i32 + (i32.const 10) + ) + ) + (drop + (f64.convert_u/i32 + (i32.const 10) + ) + ) + (drop + (f64.convert_s/i64 + (i64.const 100) + ) + ) + (drop + (f64.convert_u/i64 + (i64.const 100) + ) + ) + (drop + (f64.promote/f32 + (f32.const 10) + ) + ) + (drop + (f64.reinterpret/i64 + (i64.const 100) + ) + ) + (drop + (i32.reinterpret/f32 + (f32.const 10) + ) + ) + (drop + (i64.reinterpret/f64 + (f64.const 10) + ) + ) + (i32.const 0) + ) +) + diff --git a/src/binaryen/test/kitchen_sink.wast.fromBinary.noDebugInfo b/src/binaryen/test/kitchen_sink.wast.fromBinary.noDebugInfo new file mode 100644 index 0000000000..162c1fa960 --- /dev/null +++ b/src/binaryen/test/kitchen_sink.wast.fromBinary.noDebugInfo @@ -0,0 +1,666 @@ +(module + (type $0 (func (result i32))) + (memory $0 4096 4096) + (data (i32.const 1026) "\14\00") + (func $0 (; 0 ;) (type $0) (result i32) + (drop + (i32.add + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.sub + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.mul + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.div_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.div_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.rem_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.rem_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.and + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.or + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.xor + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.shl + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.shr_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.shr_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.eq + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.ne + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.lt_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.le_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.lt_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.le_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.gt_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.ge_s + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.gt_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.ge_u + (i32.const 10) + (i32.const 10) + ) + ) + (drop + (i32.clz + (i32.const 10) + ) + ) + (drop + (i32.ctz + (i32.const 10) + ) + ) + (drop + (i32.popcnt + (i32.const 10) + ) + ) + (drop + (i64.add + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.sub + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.mul + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.div_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.div_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.rem_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.rem_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.and + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.or + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.xor + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.shl + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.shr_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.shr_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.eq + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.ne + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.lt_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.le_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.lt_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.le_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.gt_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.ge_s + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.gt_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.ge_u + (i64.const 100) + (i64.const 100) + ) + ) + (drop + (i64.clz + (i64.const 100) + ) + ) + (drop + (i64.ctz + (i64.const 100) + ) + ) + (drop + (i64.popcnt + (i64.const 100) + ) + ) + (drop + (f32.add + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.sub + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.mul + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.div + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.min + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.max + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.abs + (f32.const 10) + ) + ) + (drop + (f32.neg + (f32.const 10) + ) + ) + (drop + (f32.copysign + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.ceil + (f32.const 10) + ) + ) + (drop + (f32.floor + (f32.const 10) + ) + ) + (drop + (f32.trunc + (f32.const 10) + ) + ) + (drop + (f32.nearest + (f32.const 10) + ) + ) + (drop + (f32.sqrt + (f32.const 10) + ) + ) + (drop + (f32.eq + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.ne + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.lt + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.le + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.gt + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f32.ge + (f32.const 10) + (f32.const 10) + ) + ) + (drop + (f64.add + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.sub + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.mul + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.div + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.min + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.max + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.abs + (f64.const 10) + ) + ) + (drop + (f64.neg + (f64.const 10) + ) + ) + (drop + (f64.copysign + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.ceil + (f64.const 10) + ) + ) + (drop + (f64.floor + (f64.const 10) + ) + ) + (drop + (f64.trunc + (f64.const 10) + ) + ) + (drop + (f64.nearest + (f64.const 10) + ) + ) + (drop + (f64.sqrt + (f64.const 10) + ) + ) + (drop + (f64.eq + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.ne + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.lt + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.le + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.gt + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (f64.ge + (f64.const 10) + (f64.const 10) + ) + ) + (drop + (i32.trunc_s/f32 + (f32.const 10) + ) + ) + (drop + (i32.trunc_s/f64 + (f64.const 10) + ) + ) + (drop + (i32.trunc_u/f32 + (f32.const 10) + ) + ) + (drop + (i32.trunc_u/f64 + (f64.const 10) + ) + ) + (drop + (i32.wrap/i64 + (i64.const 100) + ) + ) + (drop + (i64.trunc_s/f32 + (f32.const 10) + ) + ) + (drop + (i64.trunc_s/f64 + (f64.const 10) + ) + ) + (drop + (i64.trunc_u/f32 + (f32.const 10) + ) + ) + (drop + (i64.trunc_u/f64 + (f64.const 10) + ) + ) + (drop + (i64.extend_s/i32 + (i32.const 10) + ) + ) + (drop + (i64.extend_u/i32 + (i32.const 10) + ) + ) + (drop + (f32.convert_s/i32 + (i32.const 10) + ) + ) + (drop + (f32.convert_u/i32 + (i32.const 10) + ) + ) + (drop + (f32.convert_s/i64 + (i64.const 100) + ) + ) + (drop + (f32.convert_u/i64 + (i64.const 100) + ) + ) + (drop + (f32.demote/f64 + (f64.const 10) + ) + ) + (drop + (f32.reinterpret/i32 + (i32.const 10) + ) + ) + (drop + (f64.convert_s/i32 + (i32.const 10) + ) + ) + (drop + (f64.convert_u/i32 + (i32.const 10) + ) + ) + (drop + (f64.convert_s/i64 + (i64.const 100) + ) + ) + (drop + (f64.convert_u/i64 + (i64.const 100) + ) + ) + (drop + (f64.promote/f32 + (f32.const 10) + ) + ) + (drop + (f64.reinterpret/i64 + (i64.const 100) + ) + ) + (drop + (i32.reinterpret/f32 + (f32.const 10) + ) + ) + (drop + (i64.reinterpret/f64 + (f64.const 10) + ) + ) + (i32.const 0) + ) +) + diff --git a/src/binaryen/test/linker/archive/bar.s b/src/binaryen/test/linker/archive/bar.s new file mode 100644 index 0000000000..5012d4f14b --- /dev/null +++ b/src/binaryen/test/linker/archive/bar.s @@ -0,0 +1,16 @@ + .text + .file "test/linker/bar.c" + .section .text.bar,"ax",@progbits + .hidden bar + .globl bar + .type bar,@function +bar: # @bar +# BB#0: # %entry + call quux@FUNCTION + return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + + + .ident "clang version 3.9.0 (trunk 268553) (llvm/trunk 268561)" diff --git a/src/binaryen/test/linker/archive/bar_with_very_long_filename.s b/src/binaryen/test/linker/archive/bar_with_very_long_filename.s new file mode 100644 index 0000000000..7c39347e01 --- /dev/null +++ b/src/binaryen/test/linker/archive/bar_with_very_long_filename.s @@ -0,0 +1,15 @@ + .text + .file "src/work/binaryen/test/linker/archive/bar.c" + .section .text.bar,"ax",@progbits + .hidden bar + .globl bar + .type bar,@function +bar: # @bar +# BB#0: # %entry + return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + + + .ident "clang version 3.9.0 (trunk 267883) (llvm/trunk 267901)" diff --git a/src/binaryen/test/linker/archive/barlong.a b/src/binaryen/test/linker/archive/barlong.a new file mode 100644 index 0000000000..67b33e2234 --- /dev/null +++ b/src/binaryen/test/linker/archive/barlong.a @@ -0,0 +1,21 @@ +! +// 32 ` +bar_with_very_long_filename.s/ + +/0 0 0 0 644 363 ` + .text + .file "src/work/binaryen/test/linker/archive/bar.c" + .section .text.bar,"ax",@progbits + .hidden bar + .globl bar + .type bar,@function +bar: # @bar +# BB#0: # %entry + return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + + + .ident "clang version 3.9.0 (trunk 267883) (llvm/trunk 267901)" + diff --git a/src/binaryen/test/linker/archive/baz.s b/src/binaryen/test/linker/archive/baz.s new file mode 100644 index 0000000000..340a5dc078 --- /dev/null +++ b/src/binaryen/test/linker/archive/baz.s @@ -0,0 +1,15 @@ + .text + .file "src/work/binaryen/test/linker/baz.c" + .section .text.baz,"ax",@progbits + .hidden baz + .globl baz + .type baz,@function +baz: # @baz +# BB#0: # %entry + return + .endfunc +.Lfunc_end0: + .size baz, .Lfunc_end0-baz + + + .ident "clang version 3.9.0 (trunk 267883) (llvm/trunk 267901)" diff --git a/src/binaryen/test/linker/archive/foo.s b/src/binaryen/test/linker/archive/foo.s new file mode 100644 index 0000000000..28a2ca13b1 --- /dev/null +++ b/src/binaryen/test/linker/archive/foo.s @@ -0,0 +1,18 @@ + .text + .file "src/work/binaryen/test/linker/foo.c" + .section .text.foo,"ax",@progbits + .hidden foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 + .local i32 +# BB#0: # %entry + i32.const $0=, 43 + return $0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + + + .ident "clang version 3.9.0 (trunk 267883) (llvm/trunk 267901)" diff --git a/src/binaryen/test/linker/archive/foobar.a b/src/binaryen/test/linker/archive/foobar.a new file mode 100644 index 0000000000..0da3807087 --- /dev/null +++ b/src/binaryen/test/linker/archive/foobar.a @@ -0,0 +1,73 @@ +! +quux.s/ 0 0 0 644 345 ` + .text + .file "test/linker/quux.c" + .section .text.quux,"ax",@progbits + .hidden quux + .globl quux + .type quux,@function +quux: # @quux +# BB#0: # %entry + return + .endfunc +.Lfunc_end0: + .size quux, .Lfunc_end0-quux + + + .ident "clang version 3.9.0 (trunk 268553) (llvm/trunk 268561)" + +foo.s/ 0 0 0 644 407 ` + .text + .file "src/work/binaryen/test/linker/foo.c" + .section .text.foo,"ax",@progbits + .hidden foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 + .local i32 +# BB#0: # %entry + i32.const $0=, 43 + return $0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + + + .ident "clang version 3.9.0 (trunk 267883) (llvm/trunk 267901)" + +bar.s/ 0 0 0 644 361 ` + .text + .file "test/linker/bar.c" + .section .text.bar,"ax",@progbits + .hidden bar + .globl bar + .type bar,@function +bar: # @bar +# BB#0: # %entry + call quux@FUNCTION + return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + + + .ident "clang version 3.9.0 (trunk 268553) (llvm/trunk 268561)" + +baz.s/ 0 0 0 644 355 ` + .text + .file "src/work/binaryen/test/linker/baz.c" + .section .text.baz,"ax",@progbits + .hidden baz + .globl baz + .type baz,@function +baz: # @baz +# BB#0: # %entry + return + .endfunc +.Lfunc_end0: + .size baz, .Lfunc_end0-baz + + + .ident "clang version 3.9.0 (trunk 267883) (llvm/trunk 267901)" + diff --git a/src/binaryen/test/linker/bar.c b/src/binaryen/test/linker/bar.c new file mode 100644 index 0000000000..8f32349da1 --- /dev/null +++ b/src/binaryen/test/linker/bar.c @@ -0,0 +1,2 @@ +void quux(); +void bar() { quux(); } diff --git a/src/binaryen/test/linker/baz.c b/src/binaryen/test/linker/baz.c new file mode 100644 index 0000000000..02759782de --- /dev/null +++ b/src/binaryen/test/linker/baz.c @@ -0,0 +1,2 @@ +void baz() { +} diff --git a/src/binaryen/test/linker/foo.c b/src/binaryen/test/linker/foo.c new file mode 100644 index 0000000000..187032ae2e --- /dev/null +++ b/src/binaryen/test/linker/foo.c @@ -0,0 +1,3 @@ +int foo() { + return 43; +} diff --git a/src/binaryen/test/linker/main.c b/src/binaryen/test/linker/main.c new file mode 100644 index 0000000000..d70bc70335 --- /dev/null +++ b/src/binaryen/test/linker/main.c @@ -0,0 +1,10 @@ +int foo() { + return 42; +} + +void bar(); + +int main() { + foo(); + bar(); +} diff --git a/src/binaryen/test/linker/main.s b/src/binaryen/test/linker/main.s new file mode 100644 index 0000000000..09a88e0b14 --- /dev/null +++ b/src/binaryen/test/linker/main.s @@ -0,0 +1,34 @@ + .text + .file "src/work/binaryen/test/linker/main.c" + .section .text.foo,"ax",@progbits + .hidden foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 + .local i32 +# BB#0: # %entry + i32.const $0=, 42 + return $0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + + .section .text.main,"ax",@progbits + .hidden main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.call $drop=, foo@FUNCTION + call bar@FUNCTION + i32.const $0=, 0 + return $0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + + + .ident "clang version 3.9.0 (trunk 267883) (llvm/trunk 267901)" diff --git a/src/binaryen/test/linker/quux.c b/src/binaryen/test/linker/quux.c new file mode 100644 index 0000000000..d9baa902ae --- /dev/null +++ b/src/binaryen/test/linker/quux.c @@ -0,0 +1 @@ +void quux() {} diff --git a/src/binaryen/test/llvm_autogenerated/byval.s b/src/binaryen/test/llvm_autogenerated/byval.s new file mode 100644 index 0000000000..8ac4f82280 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/byval.s @@ -0,0 +1,148 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/byval.ll" + .globl byval_arg + .type byval_arg,@function +byval_arg: + .param i32 + .local i32 + i32.const $push4=, 0 + i32.const $push1=, 0 + i32.load $push2=, __stack_pointer($pop1) + i32.const $push3=, 16 + i32.sub $push11=, $pop2, $pop3 + tee_local $push10=, $1=, $pop11 + i32.store __stack_pointer($pop4), $pop10 + i32.load $push0=, 0($0) + i32.store 12($1), $pop0 + i32.const $push8=, 12 + i32.add $push9=, $1, $pop8 + call ext_byval_func@FUNCTION, $pop9 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $1, $pop5 + i32.store __stack_pointer($pop7), $pop6 + return + .endfunc +.Lfunc_end0: + .size byval_arg, .Lfunc_end0-byval_arg + + .globl byval_arg_align8 + .type byval_arg_align8,@function +byval_arg_align8: + .param i32 + .local i32 + i32.const $push4=, 0 + i32.const $push1=, 0 + i32.load $push2=, __stack_pointer($pop1) + i32.const $push3=, 16 + i32.sub $push11=, $pop2, $pop3 + tee_local $push10=, $1=, $pop11 + i32.store __stack_pointer($pop4), $pop10 + i32.load $push0=, 0($0) + i32.store 8($1), $pop0 + i32.const $push8=, 8 + i32.add $push9=, $1, $pop8 + call ext_byval_func_align8@FUNCTION, $pop9 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $1, $pop5 + i32.store __stack_pointer($pop7), $pop6 + return + .endfunc +.Lfunc_end1: + .size byval_arg_align8, .Lfunc_end1-byval_arg_align8 + + .globl byval_arg_double + .type byval_arg_double,@function +byval_arg_double: + .param i32 + .local i32 + i32.const $push8=, 0 + i32.const $push5=, 0 + i32.load $push6=, __stack_pointer($pop5) + i32.const $push7=, 16 + i32.sub $push14=, $pop6, $pop7 + tee_local $push13=, $1=, $pop14 + i32.store __stack_pointer($pop8), $pop13 + i32.const $push0=, 8 + i32.add $push3=, $1, $pop0 + i32.const $push12=, 8 + i32.add $push1=, $0, $pop12 + i64.load $push2=, 0($pop1) + i64.store 0($pop3), $pop2 + i64.load $push4=, 0($0) + i64.store 0($1), $pop4 + call ext_byval_func_alignedstruct@FUNCTION, $1 + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $1, $pop9 + i32.store __stack_pointer($pop11), $pop10 + return + .endfunc +.Lfunc_end2: + .size byval_arg_double, .Lfunc_end2-byval_arg_double + + .globl byval_param + .type byval_param,@function +byval_param: + .param i32 + call ext_func@FUNCTION, $0 + return + .endfunc +.Lfunc_end3: + .size byval_param, .Lfunc_end3-byval_param + + .globl byval_empty_caller + .type byval_empty_caller,@function +byval_empty_caller: + .param i32 + call ext_byval_func_empty@FUNCTION, $0 + return + .endfunc +.Lfunc_end4: + .size byval_empty_caller, .Lfunc_end4-byval_empty_caller + + .globl byval_empty_callee + .type byval_empty_callee,@function +byval_empty_callee: + .param i32 + call ext_func_empty@FUNCTION, $0 + return + .endfunc +.Lfunc_end5: + .size byval_empty_callee, .Lfunc_end5-byval_empty_callee + + .globl big_byval + .type big_byval,@function +big_byval: + .param i32 + .local i32 + i32.const $push4=, 0 + i32.const $push1=, 0 + i32.load $push2=, __stack_pointer($pop1) + i32.const $push3=, 131072 + i32.sub $push11=, $pop2, $pop3 + tee_local $push10=, $1=, $pop11 + i32.store __stack_pointer($pop4), $pop10 + i32.const $push0=, 131072 + i32.call $push9=, memcpy@FUNCTION, $1, $0, $pop0 + tee_local $push8=, $0=, $pop9 + call big_byval_callee@FUNCTION, $pop8 + i32.const $push7=, 0 + i32.const $push5=, 131072 + i32.add $push6=, $0, $pop5 + i32.store __stack_pointer($pop7), $pop6 + return + .endfunc +.Lfunc_end6: + .size big_byval, .Lfunc_end6-big_byval + + + .functype ext_func, void, i32 + .functype ext_func_empty, void, i32 + .functype ext_byval_func, void, i32 + .functype ext_byval_func_align8, void, i32 + .functype ext_byval_func_alignedstruct, void, i32 + .functype ext_byval_func_bigarray, void, i32 + .functype ext_byval_func_empty, void, i32 + .functype big_byval_callee, void, i32 diff --git a/src/binaryen/test/llvm_autogenerated/byval.wast b/src/binaryen/test/llvm_autogenerated/byval.wast new file mode 100644 index 0000000000..d3eeceb1fd --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/byval.wast @@ -0,0 +1,216 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (import "env" "big_byval_callee" (func $big_byval_callee (param i32))) + (import "env" "ext_byval_func" (func $ext_byval_func (param i32))) + (import "env" "ext_byval_func_align8" (func $ext_byval_func_align8 (param i32))) + (import "env" "ext_byval_func_alignedstruct" (func $ext_byval_func_alignedstruct (param i32))) + (import "env" "ext_byval_func_empty" (func $ext_byval_func_empty (param i32))) + (import "env" "ext_func" (func $ext_func (param i32))) + (import "env" "ext_func_empty" (func $ext_func_empty (param i32))) + (import "env" "memcpy" (func $memcpy (param i32 i32 i32) (result i32))) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "byval_arg" (func $byval_arg)) + (export "byval_arg_align8" (func $byval_arg_align8)) + (export "byval_arg_double" (func $byval_arg_double)) + (export "byval_param" (func $byval_param)) + (export "byval_empty_caller" (func $byval_empty_caller)) + (export "byval_empty_callee" (func $byval_empty_callee)) + (export "big_byval" (func $big_byval)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $byval_arg (; 8 ;) (param $0 i32) + (local $1 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $1 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 16) + ) + ) + ) + (i32.store offset=12 + (get_local $1) + (i32.load + (get_local $0) + ) + ) + (call $ext_byval_func + (i32.add + (get_local $1) + (i32.const 12) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (return) + ) + (func $byval_arg_align8 (; 9 ;) (param $0 i32) + (local $1 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $1 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 16) + ) + ) + ) + (i32.store offset=8 + (get_local $1) + (i32.load + (get_local $0) + ) + ) + (call $ext_byval_func_align8 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (return) + ) + (func $byval_arg_double (; 10 ;) (param $0 i32) + (local $1 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $1 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 16) + ) + ) + ) + (i64.store + (i32.add + (get_local $1) + (i32.const 8) + ) + (i64.load + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (i64.store + (get_local $1) + (i64.load + (get_local $0) + ) + ) + (call $ext_byval_func_alignedstruct + (get_local $1) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (return) + ) + (func $byval_param (; 11 ;) (param $0 i32) + (call $ext_func + (get_local $0) + ) + (return) + ) + (func $byval_empty_caller (; 12 ;) (param $0 i32) + (call $ext_byval_func_empty + (get_local $0) + ) + (return) + ) + (func $byval_empty_callee (; 13 ;) (param $0 i32) + (call $ext_func_empty + (get_local $0) + ) + (return) + ) + (func $big_byval (; 14 ;) (param $0 i32) + (local $1 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $1 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 131072) + ) + ) + ) + (call $big_byval_callee + (tee_local $0 + (call $memcpy + (get_local $1) + (get_local $0) + (i32.const 131072) + ) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $0) + (i32.const 131072) + ) + ) + (return) + ) + (func $stackSave (; 15 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 16 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 17 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/call.s b/src/binaryen/test/llvm_autogenerated/call.s new file mode 100644 index 0000000000..0d3944836b --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/call.s @@ -0,0 +1,149 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/call.ll" + .globl call_i32_nullary + .type call_i32_nullary,@function +call_i32_nullary: + .result i32 + i32.call $push0=, i32_nullary@FUNCTION + return $pop0 + .endfunc +.Lfunc_end0: + .size call_i32_nullary, .Lfunc_end0-call_i32_nullary + + .globl call_i64_nullary + .type call_i64_nullary,@function +call_i64_nullary: + .result i64 + i64.call $push0=, i64_nullary@FUNCTION + return $pop0 + .endfunc +.Lfunc_end1: + .size call_i64_nullary, .Lfunc_end1-call_i64_nullary + + .globl call_float_nullary + .type call_float_nullary,@function +call_float_nullary: + .result f32 + f32.call $push0=, float_nullary@FUNCTION + return $pop0 + .endfunc +.Lfunc_end2: + .size call_float_nullary, .Lfunc_end2-call_float_nullary + + .globl call_double_nullary + .type call_double_nullary,@function +call_double_nullary: + .result f64 + f64.call $push0=, double_nullary@FUNCTION + return $pop0 + .endfunc +.Lfunc_end3: + .size call_double_nullary, .Lfunc_end3-call_double_nullary + + .globl call_void_nullary + .type call_void_nullary,@function +call_void_nullary: + call void_nullary@FUNCTION + return + .endfunc +.Lfunc_end4: + .size call_void_nullary, .Lfunc_end4-call_void_nullary + + .globl call_i32_unary + .type call_i32_unary,@function +call_i32_unary: + .param i32 + .result i32 + i32.call $push0=, i32_unary@FUNCTION, $0 + return $pop0 + .endfunc +.Lfunc_end5: + .size call_i32_unary, .Lfunc_end5-call_i32_unary + + .globl call_i32_binary + .type call_i32_binary,@function +call_i32_binary: + .param i32, i32 + .result i32 + i32.call $push0=, i32_binary@FUNCTION, $0, $1 + return $pop0 + .endfunc +.Lfunc_end6: + .size call_i32_binary, .Lfunc_end6-call_i32_binary + + .globl call_indirect_void + .type call_indirect_void,@function +call_indirect_void: + .param i32 + call_indirect $0 + return + .endfunc +.Lfunc_end7: + .size call_indirect_void, .Lfunc_end7-call_indirect_void + + .globl call_indirect_i32 + .type call_indirect_i32,@function +call_indirect_i32: + .param i32 + .result i32 + i32.call_indirect $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end8: + .size call_indirect_i32, .Lfunc_end8-call_indirect_i32 + + .globl call_indirect_arg + .type call_indirect_arg,@function +call_indirect_arg: + .param i32, i32 + call_indirect $1, $0 + return + .endfunc +.Lfunc_end9: + .size call_indirect_arg, .Lfunc_end9-call_indirect_arg + + .globl call_indirect_arg_2 + .type call_indirect_arg_2,@function +call_indirect_arg_2: + .param i32, i32, i32 + i32.call_indirect $drop=, $1, $2, $0 + return + .endfunc +.Lfunc_end10: + .size call_indirect_arg_2, .Lfunc_end10-call_indirect_arg_2 + + .globl tail_call_void_nullary + .type tail_call_void_nullary,@function +tail_call_void_nullary: + call void_nullary@FUNCTION + return + .endfunc +.Lfunc_end11: + .size tail_call_void_nullary, .Lfunc_end11-tail_call_void_nullary + + .globl fastcc_tail_call_void_nullary + .type fastcc_tail_call_void_nullary,@function +fastcc_tail_call_void_nullary: + call void_nullary@FUNCTION + return + .endfunc +.Lfunc_end12: + .size fastcc_tail_call_void_nullary, .Lfunc_end12-fastcc_tail_call_void_nullary + + .globl coldcc_tail_call_void_nullary + .type coldcc_tail_call_void_nullary,@function +coldcc_tail_call_void_nullary: + call void_nullary@FUNCTION + return + .endfunc +.Lfunc_end13: + .size coldcc_tail_call_void_nullary, .Lfunc_end13-coldcc_tail_call_void_nullary + + + .functype i32_nullary, i32 + .functype i32_unary, i32, i32 + .functype i32_binary, i32, i32, i32 + .functype i64_nullary, i64 + .functype float_nullary, f32 + .functype double_nullary, f64 + .functype void_nullary, void diff --git a/src/binaryen/test/llvm_autogenerated/call.wast b/src/binaryen/test/llvm_autogenerated/call.wast new file mode 100644 index 0000000000..dc1d2a443e --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/call.wast @@ -0,0 +1,149 @@ +(module + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$j (func (result i64))) + (type $FUNCSIG$f (func (result f32))) + (type $FUNCSIG$d (func (result f64))) + (import "env" "double_nullary" (func $double_nullary (result f64))) + (import "env" "float_nullary" (func $float_nullary (result f32))) + (import "env" "i32_binary" (func $i32_binary (param i32 i32) (result i32))) + (import "env" "i32_nullary" (func $i32_nullary (result i32))) + (import "env" "i32_unary" (func $i32_unary (param i32) (result i32))) + (import "env" "i64_nullary" (func $i64_nullary (result i64))) + (import "env" "void_nullary" (func $void_nullary)) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "call_i32_nullary" (func $call_i32_nullary)) + (export "call_i64_nullary" (func $call_i64_nullary)) + (export "call_float_nullary" (func $call_float_nullary)) + (export "call_double_nullary" (func $call_double_nullary)) + (export "call_void_nullary" (func $call_void_nullary)) + (export "call_i32_unary" (func $call_i32_unary)) + (export "call_i32_binary" (func $call_i32_binary)) + (export "call_indirect_void" (func $call_indirect_void)) + (export "call_indirect_i32" (func $call_indirect_i32)) + (export "call_indirect_arg" (func $call_indirect_arg)) + (export "call_indirect_arg_2" (func $call_indirect_arg_2)) + (export "tail_call_void_nullary" (func $tail_call_void_nullary)) + (export "fastcc_tail_call_void_nullary" (func $fastcc_tail_call_void_nullary)) + (export "coldcc_tail_call_void_nullary" (func $coldcc_tail_call_void_nullary)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $call_i32_nullary (; 7 ;) (result i32) + (return + (call $i32_nullary) + ) + ) + (func $call_i64_nullary (; 8 ;) (result i64) + (return + (call $i64_nullary) + ) + ) + (func $call_float_nullary (; 9 ;) (result f32) + (return + (call $float_nullary) + ) + ) + (func $call_double_nullary (; 10 ;) (result f64) + (return + (call $double_nullary) + ) + ) + (func $call_void_nullary (; 11 ;) + (call $void_nullary) + (return) + ) + (func $call_i32_unary (; 12 ;) (param $0 i32) (result i32) + (return + (call $i32_unary + (get_local $0) + ) + ) + ) + (func $call_i32_binary (; 13 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (call $i32_binary + (get_local $0) + (get_local $1) + ) + ) + ) + (func $call_indirect_void (; 14 ;) (param $0 i32) + (call_indirect (type $FUNCSIG$v) + (get_local $0) + ) + (return) + ) + (func $call_indirect_i32 (; 15 ;) (param $0 i32) (result i32) + (return + (call_indirect (type $FUNCSIG$i) + (get_local $0) + ) + ) + ) + (func $call_indirect_arg (; 16 ;) (param $0 i32) (param $1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $1) + (get_local $0) + ) + (return) + ) + (func $call_indirect_arg_2 (; 17 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (drop + (call_indirect (type $FUNCSIG$iii) + (get_local $1) + (get_local $2) + (get_local $0) + ) + ) + (return) + ) + (func $tail_call_void_nullary (; 18 ;) + (call $void_nullary) + (return) + ) + (func $fastcc_tail_call_void_nullary (; 19 ;) + (call $void_nullary) + (return) + ) + (func $coldcc_tail_call_void_nullary (; 20 ;) + (call $void_nullary) + (return) + ) + (func $stackSave (; 21 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 22 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 23 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/cfg-stackify.s b/src/binaryen/test/llvm_autogenerated/cfg-stackify.s new file mode 100644 index 0000000000..2a6727f31f --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/cfg-stackify.s @@ -0,0 +1,822 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/cfg-stackify.ll" + .globl test0 + .type test0,@function +test0: + .param i32 + .local i32 + i32.const $1=, 1 +.LBB0_1: + loop + block + i32.lt_s $push0=, $1, $0 + br_if 0, $pop0 + return +.LBB0_3: + end_block + i32.const $push1=, 1 + i32.add $1=, $1, $pop1 + call something@FUNCTION + br 0 +.LBB0_4: + end_loop + .endfunc +.Lfunc_end0: + .size test0, .Lfunc_end0-test0 + + .globl test1 + .type test1,@function +test1: + .param i32 + .local i32 + i32.const $1=, 1 +.LBB1_1: + loop + block + i32.lt_s $push0=, $1, $0 + br_if 0, $pop0 + return +.LBB1_3: + end_block + i32.const $push1=, 1 + i32.add $1=, $1, $pop1 + call something@FUNCTION + br 0 +.LBB1_4: + end_loop + .endfunc +.Lfunc_end1: + .size test1, .Lfunc_end1-test1 + + .globl test2 + .type test2,@function +test2: + .param i32, i32 + block + i32.const $push0=, 1 + i32.lt_s $push1=, $1, $pop0 + br_if 0, $pop1 +.LBB2_2: + loop + f64.load $push2=, 0($0) + f64.const $push8=, 0x1.999999999999ap1 + f64.mul $push3=, $pop2, $pop8 + f64.store 0($0), $pop3 + i32.const $push7=, 8 + i32.add $0=, $0, $pop7 + i32.const $push6=, -1 + i32.add $push5=, $1, $pop6 + tee_local $push4=, $1=, $pop5 + br_if 0, $pop4 +.LBB2_3: + end_loop + end_block + return + .endfunc +.Lfunc_end2: + .size test2, .Lfunc_end2-test2 + + .globl doublediamond + .type doublediamond,@function +doublediamond: + .param i32, i32, i32 + .result i32 + i32.const $push0=, 0 + i32.store 0($2), $pop0 + block + block + br_if 0, $0 + i32.const $push4=, 1 + i32.store 0($2), $pop4 + br 1 +.LBB3_2: + end_block + i32.const $push1=, 2 + i32.store 0($2), $pop1 + block + br_if 0, $1 + i32.const $push3=, 3 + i32.store 0($2), $pop3 + br 1 +.LBB3_4: + end_block + i32.const $push2=, 4 + i32.store 0($2), $pop2 +.LBB3_5: + end_block + i32.const $push5=, 5 + i32.store 0($2), $pop5 + i32.const $push6=, 0 + return $pop6 + .endfunc +.Lfunc_end3: + .size doublediamond, .Lfunc_end3-doublediamond + + .globl triangle + .type triangle,@function +triangle: + .param i32, i32 + .result i32 + i32.const $push2=, 0 + i32.store 0($0), $pop2 + block + br_if 0, $1 + i32.const $push0=, 1 + i32.store 0($0), $pop0 +.LBB4_2: + end_block + i32.const $push1=, 2 + i32.store 0($0), $pop1 + i32.const $push3=, 0 + return $pop3 + .endfunc +.Lfunc_end4: + .size triangle, .Lfunc_end4-triangle + + .globl diamond + .type diamond,@function +diamond: + .param i32, i32 + .result i32 + i32.const $push0=, 0 + i32.store 0($0), $pop0 + block + block + br_if 0, $1 + i32.const $push2=, 1 + i32.store 0($0), $pop2 + br 1 +.LBB5_2: + end_block + i32.const $push1=, 2 + i32.store 0($0), $pop1 +.LBB5_3: + end_block + i32.const $push3=, 3 + i32.store 0($0), $pop3 + i32.const $push4=, 0 + return $pop4 + .endfunc +.Lfunc_end5: + .size diamond, .Lfunc_end5-diamond + + .globl single_block + .type single_block,@function +single_block: + .param i32 + .result i32 + i32.const $push0=, 0 + i32.store 0($0), $pop0 + i32.const $push1=, 0 + return $pop1 + .endfunc +.Lfunc_end6: + .size single_block, .Lfunc_end6-single_block + + .globl minimal_loop + .type minimal_loop,@function +minimal_loop: + .param i32 + .result i32 + i32.const $push0=, 0 + i32.store 0($0), $pop0 +.LBB7_1: + loop i32 + i32.const $push1=, 1 + i32.store 0($0), $pop1 + br 0 +.LBB7_2: + end_loop + .endfunc +.Lfunc_end7: + .size minimal_loop, .Lfunc_end7-minimal_loop + + .globl simple_loop + .type simple_loop,@function +simple_loop: + .param i32, i32 + .result i32 + i32.const $push0=, 0 + i32.store 0($0), $pop0 +.LBB8_1: + loop + i32.const $push3=, 1 + i32.store 0($0), $pop3 + i32.eqz $push4=, $1 + br_if 0, $pop4 + end_loop + i32.const $push1=, 2 + i32.store 0($0), $pop1 + i32.const $push2=, 0 + return $pop2 + .endfunc +.Lfunc_end8: + .size simple_loop, .Lfunc_end8-simple_loop + + .globl doubletriangle + .type doubletriangle,@function +doubletriangle: + .param i32, i32, i32 + .result i32 + i32.const $push4=, 0 + i32.store 0($2), $pop4 + block + br_if 0, $0 + i32.const $push0=, 2 + i32.store 0($2), $pop0 + block + br_if 0, $1 + i32.const $push1=, 3 + i32.store 0($2), $pop1 +.LBB9_3: + end_block + i32.const $push2=, 4 + i32.store 0($2), $pop2 +.LBB9_4: + end_block + i32.const $push3=, 5 + i32.store 0($2), $pop3 + i32.const $push5=, 0 + return $pop5 + .endfunc +.Lfunc_end9: + .size doubletriangle, .Lfunc_end9-doubletriangle + + .globl ifelse_earlyexits + .type ifelse_earlyexits,@function +ifelse_earlyexits: + .param i32, i32, i32 + .result i32 + i32.const $push0=, 0 + i32.store 0($2), $pop0 + block + block + br_if 0, $0 + i32.const $push3=, 1 + i32.store 0($2), $pop3 + br 1 +.LBB10_2: + end_block + i32.const $push1=, 2 + i32.store 0($2), $pop1 + br_if 0, $1 + i32.const $push2=, 3 + i32.store 0($2), $pop2 +.LBB10_4: + end_block + i32.const $push4=, 4 + i32.store 0($2), $pop4 + i32.const $push5=, 0 + return $pop5 + .endfunc +.Lfunc_end10: + .size ifelse_earlyexits, .Lfunc_end10-ifelse_earlyexits + + .globl doublediamond_in_a_loop + .type doublediamond_in_a_loop,@function +doublediamond_in_a_loop: + .param i32, i32, i32 + .result i32 +.LBB11_1: + loop i32 + i32.const $push0=, 0 + i32.store 0($2), $pop0 + block + br_if 0, $0 + i32.const $push2=, 1 + i32.store 0($2), $pop2 + i32.const $push1=, 5 + i32.store 0($2), $pop1 + br 1 +.LBB11_3: + end_block + i32.const $push3=, 2 + i32.store 0($2), $pop3 + block + br_if 0, $1 + i32.const $push5=, 3 + i32.store 0($2), $pop5 + i32.const $push4=, 5 + i32.store 0($2), $pop4 + br 1 +.LBB11_5: + end_block + i32.const $push7=, 4 + i32.store 0($2), $pop7 + i32.const $push6=, 5 + i32.store 0($2), $pop6 + br 0 +.LBB11_6: + end_loop + .endfunc +.Lfunc_end11: + .size doublediamond_in_a_loop, .Lfunc_end11-doublediamond_in_a_loop + + .globl test3 + .type test3,@function +test3: + .param i32 + block + i32.const $push0=, 0 + br_if 0, $pop0 + i32.eq $0=, $0, $0 +.LBB12_2: + block + loop + br_if 1, $0 +.LBB12_3: + loop + i32.eqz $push1=, $0 + br_if 0, $pop1 + end_loop + call bar@FUNCTION + br 0 +.LBB12_5: + end_loop + end_block + unreachable +.LBB12_6: + end_block + return + .endfunc +.Lfunc_end12: + .size test3, .Lfunc_end12-test3 + + .globl test4 + .type test4,@function +test4: + .param i32 + block + block + i32.const $push0=, 3 + i32.gt_s $push1=, $0, $pop0 + br_if 0, $pop1 + i32.eqz $push7=, $0 + br_if 1, $pop7 + i32.const $push6=, 2 + i32.eq $drop=, $0, $pop6 + br 1 +.LBB13_3: + end_block + block + i32.const $push2=, 4 + i32.eq $push3=, $0, $pop2 + br_if 0, $pop3 + i32.const $push4=, 622 + i32.ne $push5=, $0, $pop4 + br_if 1, $pop5 +.LBB13_5: + end_block + return +.LBB13_6: + end_block + return + .endfunc +.Lfunc_end13: + .size test4, .Lfunc_end13-test4 + + .globl test5 + .type test5,@function +test5: + .param i32, i32 + i32.const $push5=, 1 + i32.and $0=, $0, $pop5 + i32.const $push4=, 1 + i32.and $1=, $1, $pop4 +.LBB14_1: + block + loop + i32.const $push7=, 0 + i32.const $push6=, 0 + i32.store 0($pop7), $pop6 + i32.eqz $push10=, $0 + br_if 1, $pop10 + i32.const $push9=, 0 + i32.const $push8=, 1 + i32.store 0($pop9), $pop8 + br_if 0, $1 + end_loop + i32.const $push3=, 0 + i32.const $push2=, 3 + i32.store 0($pop3), $pop2 + return +.LBB14_4: + end_block + i32.const $push1=, 0 + i32.const $push0=, 2 + i32.store 0($pop1), $pop0 + return + .endfunc +.Lfunc_end14: + .size test5, .Lfunc_end14-test5 + + .globl test6 + .type test6,@function +test6: + .param i32, i32 + .local i32 + i32.const $push6=, 1 + i32.and $2=, $0, $pop6 +.LBB15_1: + block + block + loop + i32.const $push8=, 0 + i32.const $push7=, 0 + i32.store 0($pop8), $pop7 + i32.eqz $push16=, $2 + br_if 2, $pop16 + i32.const $push13=, 0 + i32.const $push12=, 1 + i32.store 0($pop13), $pop12 + i32.const $push11=, 1 + i32.and $push10=, $1, $pop11 + tee_local $push9=, $0=, $pop10 + i32.eqz $push17=, $pop9 + br_if 1, $pop17 + i32.const $push15=, 0 + i32.const $push14=, 1 + i32.store 0($pop15), $pop14 + br_if 0, $0 + end_loop + i32.const $push5=, 0 + i32.const $push4=, 2 + i32.store 0($pop5), $pop4 + return +.LBB15_5: + end_block + i32.const $push1=, 0 + i32.const $push0=, 3 + i32.store 0($pop1), $pop0 +.LBB15_6: + end_block + i32.const $push3=, 0 + i32.const $push2=, 4 + i32.store 0($pop3), $pop2 + return + .endfunc +.Lfunc_end15: + .size test6, .Lfunc_end15-test6 + + .globl test7 + .type test7,@function +test7: + .param i32, i32 + i32.const $push8=, 0 + i32.const $push7=, 0 + i32.store 0($pop8), $pop7 + i32.const $push6=, 1 + i32.and $0=, $0, $pop6 +.LBB16_1: + loop + i32.const $push10=, 0 + i32.const $push9=, 1 + i32.store 0($pop10), $pop9 + block + br_if 0, $0 + i32.const $push13=, 0 + i32.const $push12=, 2 + i32.store 0($pop13), $pop12 + i32.const $push11=, 1 + i32.and $push0=, $1, $pop11 + br_if 1, $pop0 + i32.const $push2=, 0 + i32.const $push1=, 4 + i32.store 0($pop2), $pop1 + unreachable +.LBB16_4: + end_block + i32.const $push16=, 0 + i32.const $push15=, 3 + i32.store 0($pop16), $pop15 + i32.const $push14=, 1 + i32.and $push3=, $1, $pop14 + br_if 0, $pop3 + end_loop + i32.const $push5=, 0 + i32.const $push4=, 5 + i32.store 0($pop5), $pop4 + unreachable + .endfunc +.Lfunc_end16: + .size test7, .Lfunc_end16-test7 + + .globl test8 + .type test8,@function +test8: + .result i32 +.LBB17_1: + loop i32 + i32.const $push0=, 0 + br_if 0, $pop0 + br 0 +.LBB17_2: + end_loop + .endfunc +.Lfunc_end17: + .size test8, .Lfunc_end17-test8 + + .globl test9 + .type test9,@function +test9: + i32.const $push11=, 0 + i32.const $push10=, 0 + i32.store 0($pop11), $pop10 +.LBB18_1: + block + loop + i32.const $push14=, 0 + i32.const $push13=, 1 + i32.store 0($pop14), $pop13 + i32.call $push0=, a@FUNCTION + i32.const $push12=, 1 + i32.and $push1=, $pop0, $pop12 + i32.eqz $push24=, $pop1 + br_if 1, $pop24 +.LBB18_2: + loop + i32.const $push17=, 0 + i32.const $push16=, 2 + i32.store 0($pop17), $pop16 + block + i32.call $push4=, a@FUNCTION + i32.const $push15=, 1 + i32.and $push5=, $pop4, $pop15 + i32.eqz $push25=, $pop5 + br_if 0, $pop25 + i32.const $push20=, 0 + i32.const $push19=, 3 + i32.store 0($pop20), $pop19 + i32.call $push8=, a@FUNCTION + i32.const $push18=, 1 + i32.and $push9=, $pop8, $pop18 + i32.eqz $push26=, $pop9 + br_if 2, $pop26 + br 1 +.LBB18_4: + end_block + i32.const $push23=, 0 + i32.const $push22=, 4 + i32.store 0($pop23), $pop22 + i32.call $push6=, a@FUNCTION + i32.const $push21=, 1 + i32.and $push7=, $pop6, $pop21 + i32.eqz $push27=, $pop7 + br_if 1, $pop27 + br 0 +.LBB18_5: + end_loop + end_loop + end_block + i32.const $push3=, 0 + i32.const $push2=, 5 + i32.store 0($pop3), $pop2 + return + .endfunc +.Lfunc_end18: + .size test9, .Lfunc_end18-test9 + + .globl test10 + .type test10,@function +test10: + .local i32, i32, i32, i32, i32 + i32.const $0=, 2 +.LBB19_1: + loop + copy_local $2=, $1 + copy_local $3=, $0 + i32.const $1=, 0 + i32.const $0=, 3 + br_if 0, $2 + i32.const $2=, 4 +.LBB19_3: + block + loop + copy_local $4=, $3 + copy_local $3=, $2 +.LBB19_4: + loop + copy_local $push3=, $4 + tee_local $push2=, $2=, $pop3 + i32.const $push1=, 4 + i32.gt_u $push0=, $pop2, $pop1 + br_if 3, $pop0 + block + copy_local $4=, $3 + br_table $2, 1, 0, 4, 2, 3, 1 +.LBB19_6: + end_block + end_loop + end_loop + return +.LBB19_7: + end_block + i32.const $1=, 1 + br 0 +.LBB19_8: + end_loop + .endfunc +.Lfunc_end19: + .size test10, .Lfunc_end19-test10 + + .globl test11 + .type test11,@function +test11: + i32.const $push14=, 0 + i32.const $push13=, 0 + i32.store 0($pop14), $pop13 + block + block + block + block + i32.const $push12=, 0 + br_if 0, $pop12 + i32.const $push16=, 0 + i32.const $push5=, 1 + i32.store 0($pop16), $pop5 + block + i32.const $push15=, 0 + br_if 0, $pop15 + i32.const $push7=, 0 + i32.const $push6=, 2 + i32.store 0($pop7), $pop6 + i32.const $push17=, 0 + br_if 2, $pop17 +.LBB20_3: + end_block + i32.const $push11=, 0 + i32.const $push10=, 3 + i32.store 0($pop11), $pop10 + return +.LBB20_4: + end_block + i32.const $push19=, 0 + i32.const $push0=, 4 + i32.store 0($pop19), $pop0 + i32.const $push18=, 0 + br_if 1, $pop18 + i32.const $push21=, 0 + i32.const $push1=, 5 + i32.store 0($pop21), $pop1 + i32.const $push20=, 0 + i32.eqz $push23=, $pop20 + br_if 2, $pop23 +.LBB20_6: + end_block + i32.const $push9=, 0 + i32.const $push8=, 7 + i32.store 0($pop9), $pop8 + return +.LBB20_7: + end_block + i32.const $push4=, 0 + i32.const $push3=, 8 + i32.store 0($pop4), $pop3 + return +.LBB20_8: + end_block + i32.const $push22=, 0 + i32.const $push2=, 6 + i32.store 0($pop22), $pop2 + return + .endfunc +.Lfunc_end20: + .size test11, .Lfunc_end20-test11 + + .globl test12 + .type test12,@function +test12: + .param i32 + .local i32 +.LBB21_1: + block + loop + block + block + i32.load8_u $push7=, 0($0) + tee_local $push6=, $1=, $pop7 + i32.const $push5=, 103 + i32.gt_s $push0=, $pop6, $pop5 + br_if 0, $pop0 + i32.const $push8=, 42 + i32.eq $push3=, $1, $pop8 + br_if 1, $pop3 + i32.const $push9=, 76 + i32.eq $push4=, $1, $pop9 + br_if 1, $pop4 + br 3 +.LBB21_4: + end_block + i32.const $push10=, 108 + i32.eq $push1=, $1, $pop10 + br_if 0, $pop1 + i32.const $push11=, 104 + i32.ne $push2=, $1, $pop11 + br_if 2, $pop2 +.LBB21_6: + end_block + i32.const $push12=, 1 + i32.add $0=, $0, $pop12 + br 0 +.LBB21_7: + end_loop + end_block + return + .endfunc +.Lfunc_end21: + .size test12, .Lfunc_end21-test12 + + .globl test13 + .type test13,@function +test13: + .local i32 + block + block + i32.const $push0=, 0 + br_if 0, $pop0 + i32.const $0=, 0 + block + i32.const $push3=, 0 + br_if 0, $pop3 + i32.const $0=, 0 +.LBB22_3: + end_block + i32.const $push1=, 1 + i32.and $push2=, $0, $pop1 + br_if 1, $pop2 + br 1 +.LBB22_4: + end_block + return +.LBB22_5: + end_block + unreachable + .endfunc +.Lfunc_end22: + .size test13, .Lfunc_end22-test13 + + .globl test14 + .type test14,@function +test14: +.LBB23_1: + loop + i32.const $push0=, 0 + br_if 0, $pop0 + end_loop +.LBB23_3: + loop + i32.const $push1=, 0 + br_if 0, $pop1 + end_loop + return + .endfunc +.Lfunc_end23: + .size test14, .Lfunc_end23-test14 + + .globl test15 + .type test15,@function +test15: + .local i32, i32 + block + block + i32.const $push0=, 1 + br_if 0, $pop0 + i32.const $0=, 0 +.LBB24_2: + block + block + loop + i32.const $push1=, 1 + br_if 1, $pop1 + i32.const $1=, 0 + i32.const $push4=, -4 + i32.add $push3=, $0, $pop4 + tee_local $push2=, $0=, $pop3 + br_if 0, $pop2 + br 2 +.LBB24_4: + end_loop + end_block + i32.const $1=, 0 +.LBB24_5: + end_block + i32.eqz $push5=, $1 + br_if 1, $pop5 + call test15_callee0@FUNCTION + return +.LBB24_7: + end_block + call test15_callee1@FUNCTION +.LBB24_8: + end_block + return + .endfunc +.Lfunc_end24: + .size test15, .Lfunc_end24-test15 + + + .functype something, void + .functype bar, void + .functype a, i32 + .functype test15_callee0, void + .functype test15_callee1, void diff --git a/src/binaryen/test/llvm_autogenerated/cfg-stackify.wast b/src/binaryen/test/llvm_autogenerated/cfg-stackify.wast new file mode 100644 index 0000000000..b6b29e8ab6 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/cfg-stackify.wast @@ -0,0 +1,997 @@ +(module + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (import "env" "a" (func $a (result i32))) + (import "env" "bar" (func $bar)) + (import "env" "something" (func $something)) + (import "env" "test15_callee0" (func $test15_callee0)) + (import "env" "test15_callee1" (func $test15_callee1)) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "test0" (func $test0)) + (export "test1" (func $test1)) + (export "test2" (func $test2)) + (export "doublediamond" (func $doublediamond)) + (export "triangle" (func $triangle)) + (export "diamond" (func $diamond)) + (export "single_block" (func $single_block)) + (export "minimal_loop" (func $minimal_loop)) + (export "simple_loop" (func $simple_loop)) + (export "doubletriangle" (func $doubletriangle)) + (export "ifelse_earlyexits" (func $ifelse_earlyexits)) + (export "doublediamond_in_a_loop" (func $doublediamond_in_a_loop)) + (export "test3" (func $test3)) + (export "test4" (func $test4)) + (export "test5" (func $test5)) + (export "test6" (func $test6)) + (export "test7" (func $test7)) + (export "test8" (func $test8)) + (export "test9" (func $test9)) + (export "test10" (func $test10)) + (export "test11" (func $test11)) + (export "test12" (func $test12)) + (export "test13" (func $test13)) + (export "test14" (func $test14)) + (export "test15" (func $test15)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $test0 (; 5 ;) (param $0 i32) + (local $1 i32) + (set_local $1 + (i32.const 1) + ) + (loop $label$0 + (block $label$1 + (br_if $label$1 + (i32.lt_s + (get_local $1) + (get_local $0) + ) + ) + (return) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (call $something) + (br $label$0) + ) + ) + (func $test1 (; 6 ;) (param $0 i32) + (local $1 i32) + (set_local $1 + (i32.const 1) + ) + (loop $label$0 + (block $label$1 + (br_if $label$1 + (i32.lt_s + (get_local $1) + (get_local $0) + ) + ) + (return) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (call $something) + (br $label$0) + ) + ) + (func $test2 (; 7 ;) (param $0 i32) (param $1 i32) + (block $label$0 + (br_if $label$0 + (i32.lt_s + (get_local $1) + (i32.const 1) + ) + ) + (loop $label$1 + (f64.store + (get_local $0) + (f64.mul + (f64.load + (get_local $0) + ) + (f64.const 3.2) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (br_if $label$1 + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + ) + ) + ) + (return) + ) + (func $doublediamond (; 8 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (i32.store + (get_local $2) + (i32.const 0) + ) + (block $label$0 + (block $label$1 + (br_if $label$1 + (get_local $0) + ) + (i32.store + (get_local $2) + (i32.const 1) + ) + (br $label$0) + ) + (i32.store + (get_local $2) + (i32.const 2) + ) + (block $label$2 + (br_if $label$2 + (get_local $1) + ) + (i32.store + (get_local $2) + (i32.const 3) + ) + (br $label$0) + ) + (i32.store + (get_local $2) + (i32.const 4) + ) + ) + (i32.store + (get_local $2) + (i32.const 5) + ) + (return + (i32.const 0) + ) + ) + (func $triangle (; 9 ;) (param $0 i32) (param $1 i32) (result i32) + (i32.store + (get_local $0) + (i32.const 0) + ) + (block $label$0 + (br_if $label$0 + (get_local $1) + ) + (i32.store + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (get_local $0) + (i32.const 2) + ) + (return + (i32.const 0) + ) + ) + (func $diamond (; 10 ;) (param $0 i32) (param $1 i32) (result i32) + (i32.store + (get_local $0) + (i32.const 0) + ) + (block $label$0 + (block $label$1 + (br_if $label$1 + (get_local $1) + ) + (i32.store + (get_local $0) + (i32.const 1) + ) + (br $label$0) + ) + (i32.store + (get_local $0) + (i32.const 2) + ) + ) + (i32.store + (get_local $0) + (i32.const 3) + ) + (return + (i32.const 0) + ) + ) + (func $single_block (; 11 ;) (param $0 i32) (result i32) + (i32.store + (get_local $0) + (i32.const 0) + ) + (return + (i32.const 0) + ) + ) + (func $minimal_loop (; 12 ;) (param $0 i32) (result i32) + (i32.store + (get_local $0) + (i32.const 0) + ) + (loop $label$0 (result i32) + (i32.store + (get_local $0) + (i32.const 1) + ) + (br $label$0) + ) + ) + (func $simple_loop (; 13 ;) (param $0 i32) (param $1 i32) (result i32) + (i32.store + (get_local $0) + (i32.const 0) + ) + (loop $label$0 + (i32.store + (get_local $0) + (i32.const 1) + ) + (br_if $label$0 + (i32.eqz + (get_local $1) + ) + ) + ) + (i32.store + (get_local $0) + (i32.const 2) + ) + (return + (i32.const 0) + ) + ) + (func $doubletriangle (; 14 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (i32.store + (get_local $2) + (i32.const 0) + ) + (block $label$0 + (br_if $label$0 + (get_local $0) + ) + (i32.store + (get_local $2) + (i32.const 2) + ) + (block $label$1 + (br_if $label$1 + (get_local $1) + ) + (i32.store + (get_local $2) + (i32.const 3) + ) + ) + (i32.store + (get_local $2) + (i32.const 4) + ) + ) + (i32.store + (get_local $2) + (i32.const 5) + ) + (return + (i32.const 0) + ) + ) + (func $ifelse_earlyexits (; 15 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (i32.store + (get_local $2) + (i32.const 0) + ) + (block $label$0 + (block $label$1 + (br_if $label$1 + (get_local $0) + ) + (i32.store + (get_local $2) + (i32.const 1) + ) + (br $label$0) + ) + (i32.store + (get_local $2) + (i32.const 2) + ) + (br_if $label$0 + (get_local $1) + ) + (i32.store + (get_local $2) + (i32.const 3) + ) + ) + (i32.store + (get_local $2) + (i32.const 4) + ) + (return + (i32.const 0) + ) + ) + (func $doublediamond_in_a_loop (; 16 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (loop $label$0 (result i32) + (i32.store + (get_local $2) + (i32.const 0) + ) + (block $label$1 + (br_if $label$1 + (get_local $0) + ) + (i32.store + (get_local $2) + (i32.const 1) + ) + (i32.store + (get_local $2) + (i32.const 5) + ) + (br $label$0) + ) + (i32.store + (get_local $2) + (i32.const 2) + ) + (block $label$2 + (br_if $label$2 + (get_local $1) + ) + (i32.store + (get_local $2) + (i32.const 3) + ) + (i32.store + (get_local $2) + (i32.const 5) + ) + (br $label$0) + ) + (i32.store + (get_local $2) + (i32.const 4) + ) + (i32.store + (get_local $2) + (i32.const 5) + ) + (br $label$0) + ) + ) + (func $test3 (; 17 ;) (param $0 i32) + (block $label$0 + (br_if $label$0 + (i32.const 0) + ) + (set_local $0 + (i32.eq + (get_local $0) + (get_local $0) + ) + ) + (block $label$1 + (loop $label$2 + (br_if $label$1 + (get_local $0) + ) + (loop $label$3 + (br_if $label$3 + (i32.eqz + (get_local $0) + ) + ) + ) + (call $bar) + (br $label$2) + ) + ) + (unreachable) + ) + (return) + ) + (func $test4 (; 18 ;) (param $0 i32) + (block $label$0 + (block $label$1 + (br_if $label$1 + (i32.gt_s + (get_local $0) + (i32.const 3) + ) + ) + (br_if $label$0 + (i32.eqz + (get_local $0) + ) + ) + (drop + (i32.eq + (get_local $0) + (i32.const 2) + ) + ) + (br $label$0) + ) + (block $label$2 + (br_if $label$2 + (i32.eq + (get_local $0) + (i32.const 4) + ) + ) + (br_if $label$0 + (i32.ne + (get_local $0) + (i32.const 622) + ) + ) + ) + (return) + ) + (return) + ) + (func $test5 (; 19 ;) (param $0 i32) (param $1 i32) + (set_local $0 + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.and + (get_local $1) + (i32.const 1) + ) + ) + (block $label$0 + (loop $label$1 + (i32.store + (i32.const 0) + (i32.const 0) + ) + (br_if $label$0 + (i32.eqz + (get_local $0) + ) + ) + (i32.store + (i32.const 0) + (i32.const 1) + ) + (br_if $label$1 + (get_local $1) + ) + ) + (i32.store + (i32.const 0) + (i32.const 3) + ) + (return) + ) + (i32.store + (i32.const 0) + (i32.const 2) + ) + (return) + ) + (func $test6 (; 20 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (set_local $2 + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + (block $label$0 + (block $label$1 + (loop $label$2 + (i32.store + (i32.const 0) + (i32.const 0) + ) + (br_if $label$0 + (i32.eqz + (get_local $2) + ) + ) + (i32.store + (i32.const 0) + (i32.const 1) + ) + (br_if $label$1 + (i32.eqz + (tee_local $0 + (i32.and + (get_local $1) + (i32.const 1) + ) + ) + ) + ) + (i32.store + (i32.const 0) + (i32.const 1) + ) + (br_if $label$2 + (get_local $0) + ) + ) + (i32.store + (i32.const 0) + (i32.const 2) + ) + (return) + ) + (i32.store + (i32.const 0) + (i32.const 3) + ) + ) + (i32.store + (i32.const 0) + (i32.const 4) + ) + (return) + ) + (func $test7 (; 21 ;) (param $0 i32) (param $1 i32) + (i32.store + (i32.const 0) + (i32.const 0) + ) + (set_local $0 + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + (loop $label$0 + (i32.store + (i32.const 0) + (i32.const 1) + ) + (block $label$1 + (br_if $label$1 + (get_local $0) + ) + (i32.store + (i32.const 0) + (i32.const 2) + ) + (br_if $label$0 + (i32.and + (get_local $1) + (i32.const 1) + ) + ) + (i32.store + (i32.const 0) + (i32.const 4) + ) + (unreachable) + ) + (i32.store + (i32.const 0) + (i32.const 3) + ) + (br_if $label$0 + (i32.and + (get_local $1) + (i32.const 1) + ) + ) + ) + (i32.store + (i32.const 0) + (i32.const 5) + ) + (unreachable) + ) + (func $test8 (; 22 ;) (result i32) + (loop $label$0 (result i32) + (br_if $label$0 + (i32.const 0) + ) + (br $label$0) + ) + ) + (func $test9 (; 23 ;) + (i32.store + (i32.const 0) + (i32.const 0) + ) + (block $label$0 + (loop $label$1 + (i32.store + (i32.const 0) + (i32.const 1) + ) + (br_if $label$0 + (i32.eqz + (i32.and + (call $a) + (i32.const 1) + ) + ) + ) + (loop $label$2 + (i32.store + (i32.const 0) + (i32.const 2) + ) + (block $label$3 + (br_if $label$3 + (i32.eqz + (i32.and + (call $a) + (i32.const 1) + ) + ) + ) + (i32.store + (i32.const 0) + (i32.const 3) + ) + (br_if $label$1 + (i32.eqz + (i32.and + (call $a) + (i32.const 1) + ) + ) + ) + (br $label$2) + ) + (i32.store + (i32.const 0) + (i32.const 4) + ) + (br_if $label$1 + (i32.eqz + (i32.and + (call $a) + (i32.const 1) + ) + ) + ) + (br $label$2) + ) + ) + ) + (i32.store + (i32.const 0) + (i32.const 5) + ) + (return) + ) + (func $test10 (; 24 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (set_local $0 + (i32.const 2) + ) + (loop $label$0 + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (set_local $1 + (i32.const 0) + ) + (set_local $0 + (i32.const 3) + ) + (br_if $label$0 + (get_local $2) + ) + (set_local $2 + (i32.const 4) + ) + (block $label$1 + (loop $label$2 + (set_local $4 + (get_local $3) + ) + (set_local $3 + (get_local $2) + ) + (loop $label$3 + (br_if $label$0 + (i32.gt_u + (tee_local $2 + (get_local $4) + ) + (i32.const 4) + ) + ) + (block $label$4 + (set_local $4 + (get_local $3) + ) + (br_table $label$3 $label$4 $label$0 $label$2 $label$1 $label$3 + (get_local $2) + ) + ) + ) + ) + (return) + ) + (set_local $1 + (i32.const 1) + ) + (br $label$0) + ) + ) + (func $test11 (; 25 ;) + (i32.store + (i32.const 0) + (i32.const 0) + ) + (block $label$0 + (block $label$1 + (block $label$2 + (block $label$3 + (br_if $label$3 + (i32.const 0) + ) + (i32.store + (i32.const 0) + (i32.const 1) + ) + (block $label$4 + (br_if $label$4 + (i32.const 0) + ) + (i32.store + (i32.const 0) + (i32.const 2) + ) + (br_if $label$2 + (i32.const 0) + ) + ) + (i32.store + (i32.const 0) + (i32.const 3) + ) + (return) + ) + (i32.store + (i32.const 0) + (i32.const 4) + ) + (br_if $label$1 + (i32.const 0) + ) + (i32.store + (i32.const 0) + (i32.const 5) + ) + (br_if $label$0 + (i32.eqz + (i32.const 0) + ) + ) + ) + (i32.store + (i32.const 0) + (i32.const 7) + ) + (return) + ) + (i32.store + (i32.const 0) + (i32.const 8) + ) + (return) + ) + (i32.store + (i32.const 0) + (i32.const 6) + ) + (return) + ) + (func $test12 (; 26 ;) (param $0 i32) + (local $1 i32) + (block $label$0 + (loop $label$1 + (block $label$2 + (block $label$3 + (br_if $label$3 + (i32.gt_s + (tee_local $1 + (i32.load8_u + (get_local $0) + ) + ) + (i32.const 103) + ) + ) + (br_if $label$2 + (i32.eq + (get_local $1) + (i32.const 42) + ) + ) + (br_if $label$2 + (i32.eq + (get_local $1) + (i32.const 76) + ) + ) + (br $label$0) + ) + (br_if $label$2 + (i32.eq + (get_local $1) + (i32.const 108) + ) + ) + (br_if $label$0 + (i32.ne + (get_local $1) + (i32.const 104) + ) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $label$1) + ) + ) + (return) + ) + (func $test13 (; 27 ;) + (local $0 i32) + (block $label$0 + (block $label$1 + (br_if $label$1 + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (block $label$2 + (br_if $label$2 + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + (br_if $label$0 + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + (br $label$0) + ) + (return) + ) + (unreachable) + ) + (func $test14 (; 28 ;) + (loop $label$0 + (br_if $label$0 + (i32.const 0) + ) + ) + (loop $label$1 + (br_if $label$1 + (i32.const 0) + ) + ) + (return) + ) + (func $test15 (; 29 ;) + (local $0 i32) + (local $1 i32) + (block $label$0 + (block $label$1 + (br_if $label$1 + (i32.const 1) + ) + (set_local $0 + (i32.const 0) + ) + (block $label$2 + (block $label$3 + (loop $label$4 + (br_if $label$3 + (i32.const 1) + ) + (set_local $1 + (i32.const 0) + ) + (br_if $label$4 + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + ) + (br $label$2) + ) + ) + (set_local $1 + (i32.const 0) + ) + ) + (br_if $label$0 + (i32.eqz + (get_local $1) + ) + ) + (call $test15_callee0) + (return) + ) + (call $test15_callee1) + ) + (return) + ) + (func $stackSave (; 30 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 31 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 32 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/comparisons_f32.s b/src/binaryen/test/llvm_autogenerated/comparisons_f32.s new file mode 100644 index 0000000000..ea7df1e31b --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/comparisons_f32.s @@ -0,0 +1,185 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/comparisons_f32.ll" + .globl ord_f32 + .type ord_f32,@function +ord_f32: + .param f32, f32 + .result i32 + f32.eq $push1=, $0, $0 + f32.eq $push0=, $1, $1 + i32.and $push2=, $pop1, $pop0 + return $pop2 + .endfunc +.Lfunc_end0: + .size ord_f32, .Lfunc_end0-ord_f32 + + .globl uno_f32 + .type uno_f32,@function +uno_f32: + .param f32, f32 + .result i32 + f32.ne $push1=, $0, $0 + f32.ne $push0=, $1, $1 + i32.or $push2=, $pop1, $pop0 + return $pop2 + .endfunc +.Lfunc_end1: + .size uno_f32, .Lfunc_end1-uno_f32 + + .globl oeq_f32 + .type oeq_f32,@function +oeq_f32: + .param f32, f32 + .result i32 + f32.eq $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end2: + .size oeq_f32, .Lfunc_end2-oeq_f32 + + .globl une_f32 + .type une_f32,@function +une_f32: + .param f32, f32 + .result i32 + f32.ne $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end3: + .size une_f32, .Lfunc_end3-une_f32 + + .globl olt_f32 + .type olt_f32,@function +olt_f32: + .param f32, f32 + .result i32 + f32.lt $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end4: + .size olt_f32, .Lfunc_end4-olt_f32 + + .globl ole_f32 + .type ole_f32,@function +ole_f32: + .param f32, f32 + .result i32 + f32.le $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end5: + .size ole_f32, .Lfunc_end5-ole_f32 + + .globl ogt_f32 + .type ogt_f32,@function +ogt_f32: + .param f32, f32 + .result i32 + f32.gt $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end6: + .size ogt_f32, .Lfunc_end6-ogt_f32 + + .globl oge_f32 + .type oge_f32,@function +oge_f32: + .param f32, f32 + .result i32 + f32.ge $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end7: + .size oge_f32, .Lfunc_end7-oge_f32 + + .globl ueq_f32 + .type ueq_f32,@function +ueq_f32: + .param f32, f32 + .result i32 + f32.eq $push0=, $0, $1 + f32.ne $push2=, $0, $0 + f32.ne $push1=, $1, $1 + i32.or $push3=, $pop2, $pop1 + i32.or $push4=, $pop0, $pop3 + return $pop4 + .endfunc +.Lfunc_end8: + .size ueq_f32, .Lfunc_end8-ueq_f32 + + .globl one_f32 + .type one_f32,@function +one_f32: + .param f32, f32 + .result i32 + f32.ne $push0=, $0, $1 + f32.eq $push2=, $0, $0 + f32.eq $push1=, $1, $1 + i32.and $push3=, $pop2, $pop1 + i32.and $push4=, $pop0, $pop3 + return $pop4 + .endfunc +.Lfunc_end9: + .size one_f32, .Lfunc_end9-one_f32 + + .globl ult_f32 + .type ult_f32,@function +ult_f32: + .param f32, f32 + .result i32 + f32.lt $push0=, $0, $1 + f32.ne $push2=, $0, $0 + f32.ne $push1=, $1, $1 + i32.or $push3=, $pop2, $pop1 + i32.or $push4=, $pop0, $pop3 + return $pop4 + .endfunc +.Lfunc_end10: + .size ult_f32, .Lfunc_end10-ult_f32 + + .globl ule_f32 + .type ule_f32,@function +ule_f32: + .param f32, f32 + .result i32 + f32.le $push0=, $0, $1 + f32.ne $push2=, $0, $0 + f32.ne $push1=, $1, $1 + i32.or $push3=, $pop2, $pop1 + i32.or $push4=, $pop0, $pop3 + return $pop4 + .endfunc +.Lfunc_end11: + .size ule_f32, .Lfunc_end11-ule_f32 + + .globl ugt_f32 + .type ugt_f32,@function +ugt_f32: + .param f32, f32 + .result i32 + f32.gt $push0=, $0, $1 + f32.ne $push2=, $0, $0 + f32.ne $push1=, $1, $1 + i32.or $push3=, $pop2, $pop1 + i32.or $push4=, $pop0, $pop3 + return $pop4 + .endfunc +.Lfunc_end12: + .size ugt_f32, .Lfunc_end12-ugt_f32 + + .globl uge_f32 + .type uge_f32,@function +uge_f32: + .param f32, f32 + .result i32 + f32.ge $push0=, $0, $1 + f32.ne $push2=, $0, $0 + f32.ne $push1=, $1, $1 + i32.or $push3=, $pop2, $pop1 + i32.or $push4=, $pop0, $pop3 + return $pop4 + .endfunc +.Lfunc_end13: + .size uge_f32, .Lfunc_end13-uge_f32 + + diff --git a/src/binaryen/test/llvm_autogenerated/comparisons_f32.wast b/src/binaryen/test/llvm_autogenerated/comparisons_f32.wast new file mode 100644 index 0000000000..a46694d64d --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/comparisons_f32.wast @@ -0,0 +1,249 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "ord_f32" (func $ord_f32)) + (export "uno_f32" (func $uno_f32)) + (export "oeq_f32" (func $oeq_f32)) + (export "une_f32" (func $une_f32)) + (export "olt_f32" (func $olt_f32)) + (export "ole_f32" (func $ole_f32)) + (export "ogt_f32" (func $ogt_f32)) + (export "oge_f32" (func $oge_f32)) + (export "ueq_f32" (func $ueq_f32)) + (export "one_f32" (func $one_f32)) + (export "ult_f32" (func $ult_f32)) + (export "ule_f32" (func $ule_f32)) + (export "ugt_f32" (func $ugt_f32)) + (export "uge_f32" (func $uge_f32)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $ord_f32 (; 0 ;) (param $0 f32) (param $1 f32) (result i32) + (return + (i32.and + (f32.eq + (get_local $0) + (get_local $0) + ) + (f32.eq + (get_local $1) + (get_local $1) + ) + ) + ) + ) + (func $uno_f32 (; 1 ;) (param $0 f32) (param $1 f32) (result i32) + (return + (i32.or + (f32.ne + (get_local $0) + (get_local $0) + ) + (f32.ne + (get_local $1) + (get_local $1) + ) + ) + ) + ) + (func $oeq_f32 (; 2 ;) (param $0 f32) (param $1 f32) (result i32) + (return + (f32.eq + (get_local $0) + (get_local $1) + ) + ) + ) + (func $une_f32 (; 3 ;) (param $0 f32) (param $1 f32) (result i32) + (return + (f32.ne + (get_local $0) + (get_local $1) + ) + ) + ) + (func $olt_f32 (; 4 ;) (param $0 f32) (param $1 f32) (result i32) + (return + (f32.lt + (get_local $0) + (get_local $1) + ) + ) + ) + (func $ole_f32 (; 5 ;) (param $0 f32) (param $1 f32) (result i32) + (return + (f32.le + (get_local $0) + (get_local $1) + ) + ) + ) + (func $ogt_f32 (; 6 ;) (param $0 f32) (param $1 f32) (result i32) + (return + (f32.gt + (get_local $0) + (get_local $1) + ) + ) + ) + (func $oge_f32 (; 7 ;) (param $0 f32) (param $1 f32) (result i32) + (return + (f32.ge + (get_local $0) + (get_local $1) + ) + ) + ) + (func $ueq_f32 (; 8 ;) (param $0 f32) (param $1 f32) (result i32) + (return + (i32.or + (f32.eq + (get_local $0) + (get_local $1) + ) + (i32.or + (f32.ne + (get_local $0) + (get_local $0) + ) + (f32.ne + (get_local $1) + (get_local $1) + ) + ) + ) + ) + ) + (func $one_f32 (; 9 ;) (param $0 f32) (param $1 f32) (result i32) + (return + (i32.and + (f32.ne + (get_local $0) + (get_local $1) + ) + (i32.and + (f32.eq + (get_local $0) + (get_local $0) + ) + (f32.eq + (get_local $1) + (get_local $1) + ) + ) + ) + ) + ) + (func $ult_f32 (; 10 ;) (param $0 f32) (param $1 f32) (result i32) + (return + (i32.or + (f32.lt + (get_local $0) + (get_local $1) + ) + (i32.or + (f32.ne + (get_local $0) + (get_local $0) + ) + (f32.ne + (get_local $1) + (get_local $1) + ) + ) + ) + ) + ) + (func $ule_f32 (; 11 ;) (param $0 f32) (param $1 f32) (result i32) + (return + (i32.or + (f32.le + (get_local $0) + (get_local $1) + ) + (i32.or + (f32.ne + (get_local $0) + (get_local $0) + ) + (f32.ne + (get_local $1) + (get_local $1) + ) + ) + ) + ) + ) + (func $ugt_f32 (; 12 ;) (param $0 f32) (param $1 f32) (result i32) + (return + (i32.or + (f32.gt + (get_local $0) + (get_local $1) + ) + (i32.or + (f32.ne + (get_local $0) + (get_local $0) + ) + (f32.ne + (get_local $1) + (get_local $1) + ) + ) + ) + ) + ) + (func $uge_f32 (; 13 ;) (param $0 f32) (param $1 f32) (result i32) + (return + (i32.or + (f32.ge + (get_local $0) + (get_local $1) + ) + (i32.or + (f32.ne + (get_local $0) + (get_local $0) + ) + (f32.ne + (get_local $1) + (get_local $1) + ) + ) + ) + ) + ) + (func $stackSave (; 14 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 15 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 16 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/comparisons_f64.s b/src/binaryen/test/llvm_autogenerated/comparisons_f64.s new file mode 100644 index 0000000000..704bcaf06e --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/comparisons_f64.s @@ -0,0 +1,185 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/comparisons_f64.ll" + .globl ord_f64 + .type ord_f64,@function +ord_f64: + .param f64, f64 + .result i32 + f64.eq $push1=, $0, $0 + f64.eq $push0=, $1, $1 + i32.and $push2=, $pop1, $pop0 + return $pop2 + .endfunc +.Lfunc_end0: + .size ord_f64, .Lfunc_end0-ord_f64 + + .globl uno_f64 + .type uno_f64,@function +uno_f64: + .param f64, f64 + .result i32 + f64.ne $push1=, $0, $0 + f64.ne $push0=, $1, $1 + i32.or $push2=, $pop1, $pop0 + return $pop2 + .endfunc +.Lfunc_end1: + .size uno_f64, .Lfunc_end1-uno_f64 + + .globl oeq_f64 + .type oeq_f64,@function +oeq_f64: + .param f64, f64 + .result i32 + f64.eq $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end2: + .size oeq_f64, .Lfunc_end2-oeq_f64 + + .globl une_f64 + .type une_f64,@function +une_f64: + .param f64, f64 + .result i32 + f64.ne $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end3: + .size une_f64, .Lfunc_end3-une_f64 + + .globl olt_f64 + .type olt_f64,@function +olt_f64: + .param f64, f64 + .result i32 + f64.lt $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end4: + .size olt_f64, .Lfunc_end4-olt_f64 + + .globl ole_f64 + .type ole_f64,@function +ole_f64: + .param f64, f64 + .result i32 + f64.le $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end5: + .size ole_f64, .Lfunc_end5-ole_f64 + + .globl ogt_f64 + .type ogt_f64,@function +ogt_f64: + .param f64, f64 + .result i32 + f64.gt $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end6: + .size ogt_f64, .Lfunc_end6-ogt_f64 + + .globl oge_f64 + .type oge_f64,@function +oge_f64: + .param f64, f64 + .result i32 + f64.ge $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end7: + .size oge_f64, .Lfunc_end7-oge_f64 + + .globl ueq_f64 + .type ueq_f64,@function +ueq_f64: + .param f64, f64 + .result i32 + f64.eq $push0=, $0, $1 + f64.ne $push2=, $0, $0 + f64.ne $push1=, $1, $1 + i32.or $push3=, $pop2, $pop1 + i32.or $push4=, $pop0, $pop3 + return $pop4 + .endfunc +.Lfunc_end8: + .size ueq_f64, .Lfunc_end8-ueq_f64 + + .globl one_f64 + .type one_f64,@function +one_f64: + .param f64, f64 + .result i32 + f64.ne $push0=, $0, $1 + f64.eq $push2=, $0, $0 + f64.eq $push1=, $1, $1 + i32.and $push3=, $pop2, $pop1 + i32.and $push4=, $pop0, $pop3 + return $pop4 + .endfunc +.Lfunc_end9: + .size one_f64, .Lfunc_end9-one_f64 + + .globl ult_f64 + .type ult_f64,@function +ult_f64: + .param f64, f64 + .result i32 + f64.lt $push0=, $0, $1 + f64.ne $push2=, $0, $0 + f64.ne $push1=, $1, $1 + i32.or $push3=, $pop2, $pop1 + i32.or $push4=, $pop0, $pop3 + return $pop4 + .endfunc +.Lfunc_end10: + .size ult_f64, .Lfunc_end10-ult_f64 + + .globl ule_f64 + .type ule_f64,@function +ule_f64: + .param f64, f64 + .result i32 + f64.le $push0=, $0, $1 + f64.ne $push2=, $0, $0 + f64.ne $push1=, $1, $1 + i32.or $push3=, $pop2, $pop1 + i32.or $push4=, $pop0, $pop3 + return $pop4 + .endfunc +.Lfunc_end11: + .size ule_f64, .Lfunc_end11-ule_f64 + + .globl ugt_f64 + .type ugt_f64,@function +ugt_f64: + .param f64, f64 + .result i32 + f64.gt $push0=, $0, $1 + f64.ne $push2=, $0, $0 + f64.ne $push1=, $1, $1 + i32.or $push3=, $pop2, $pop1 + i32.or $push4=, $pop0, $pop3 + return $pop4 + .endfunc +.Lfunc_end12: + .size ugt_f64, .Lfunc_end12-ugt_f64 + + .globl uge_f64 + .type uge_f64,@function +uge_f64: + .param f64, f64 + .result i32 + f64.ge $push0=, $0, $1 + f64.ne $push2=, $0, $0 + f64.ne $push1=, $1, $1 + i32.or $push3=, $pop2, $pop1 + i32.or $push4=, $pop0, $pop3 + return $pop4 + .endfunc +.Lfunc_end13: + .size uge_f64, .Lfunc_end13-uge_f64 + + diff --git a/src/binaryen/test/llvm_autogenerated/comparisons_f64.wast b/src/binaryen/test/llvm_autogenerated/comparisons_f64.wast new file mode 100644 index 0000000000..cbc254f9cc --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/comparisons_f64.wast @@ -0,0 +1,249 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "ord_f64" (func $ord_f64)) + (export "uno_f64" (func $uno_f64)) + (export "oeq_f64" (func $oeq_f64)) + (export "une_f64" (func $une_f64)) + (export "olt_f64" (func $olt_f64)) + (export "ole_f64" (func $ole_f64)) + (export "ogt_f64" (func $ogt_f64)) + (export "oge_f64" (func $oge_f64)) + (export "ueq_f64" (func $ueq_f64)) + (export "one_f64" (func $one_f64)) + (export "ult_f64" (func $ult_f64)) + (export "ule_f64" (func $ule_f64)) + (export "ugt_f64" (func $ugt_f64)) + (export "uge_f64" (func $uge_f64)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $ord_f64 (; 0 ;) (param $0 f64) (param $1 f64) (result i32) + (return + (i32.and + (f64.eq + (get_local $0) + (get_local $0) + ) + (f64.eq + (get_local $1) + (get_local $1) + ) + ) + ) + ) + (func $uno_f64 (; 1 ;) (param $0 f64) (param $1 f64) (result i32) + (return + (i32.or + (f64.ne + (get_local $0) + (get_local $0) + ) + (f64.ne + (get_local $1) + (get_local $1) + ) + ) + ) + ) + (func $oeq_f64 (; 2 ;) (param $0 f64) (param $1 f64) (result i32) + (return + (f64.eq + (get_local $0) + (get_local $1) + ) + ) + ) + (func $une_f64 (; 3 ;) (param $0 f64) (param $1 f64) (result i32) + (return + (f64.ne + (get_local $0) + (get_local $1) + ) + ) + ) + (func $olt_f64 (; 4 ;) (param $0 f64) (param $1 f64) (result i32) + (return + (f64.lt + (get_local $0) + (get_local $1) + ) + ) + ) + (func $ole_f64 (; 5 ;) (param $0 f64) (param $1 f64) (result i32) + (return + (f64.le + (get_local $0) + (get_local $1) + ) + ) + ) + (func $ogt_f64 (; 6 ;) (param $0 f64) (param $1 f64) (result i32) + (return + (f64.gt + (get_local $0) + (get_local $1) + ) + ) + ) + (func $oge_f64 (; 7 ;) (param $0 f64) (param $1 f64) (result i32) + (return + (f64.ge + (get_local $0) + (get_local $1) + ) + ) + ) + (func $ueq_f64 (; 8 ;) (param $0 f64) (param $1 f64) (result i32) + (return + (i32.or + (f64.eq + (get_local $0) + (get_local $1) + ) + (i32.or + (f64.ne + (get_local $0) + (get_local $0) + ) + (f64.ne + (get_local $1) + (get_local $1) + ) + ) + ) + ) + ) + (func $one_f64 (; 9 ;) (param $0 f64) (param $1 f64) (result i32) + (return + (i32.and + (f64.ne + (get_local $0) + (get_local $1) + ) + (i32.and + (f64.eq + (get_local $0) + (get_local $0) + ) + (f64.eq + (get_local $1) + (get_local $1) + ) + ) + ) + ) + ) + (func $ult_f64 (; 10 ;) (param $0 f64) (param $1 f64) (result i32) + (return + (i32.or + (f64.lt + (get_local $0) + (get_local $1) + ) + (i32.or + (f64.ne + (get_local $0) + (get_local $0) + ) + (f64.ne + (get_local $1) + (get_local $1) + ) + ) + ) + ) + ) + (func $ule_f64 (; 11 ;) (param $0 f64) (param $1 f64) (result i32) + (return + (i32.or + (f64.le + (get_local $0) + (get_local $1) + ) + (i32.or + (f64.ne + (get_local $0) + (get_local $0) + ) + (f64.ne + (get_local $1) + (get_local $1) + ) + ) + ) + ) + ) + (func $ugt_f64 (; 12 ;) (param $0 f64) (param $1 f64) (result i32) + (return + (i32.or + (f64.gt + (get_local $0) + (get_local $1) + ) + (i32.or + (f64.ne + (get_local $0) + (get_local $0) + ) + (f64.ne + (get_local $1) + (get_local $1) + ) + ) + ) + ) + ) + (func $uge_f64 (; 13 ;) (param $0 f64) (param $1 f64) (result i32) + (return + (i32.or + (f64.ge + (get_local $0) + (get_local $1) + ) + (i32.or + (f64.ne + (get_local $0) + (get_local $0) + ) + (f64.ne + (get_local $1) + (get_local $1) + ) + ) + ) + ) + ) + (func $stackSave (; 14 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 15 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 16 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/comparisons_i32.s b/src/binaryen/test/llvm_autogenerated/comparisons_i32.s new file mode 100644 index 0000000000..b4bffe48d8 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/comparisons_i32.s @@ -0,0 +1,113 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/comparisons_i32.ll" + .globl eq_i32 + .type eq_i32,@function +eq_i32: + .param i32, i32 + .result i32 + i32.eq $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end0: + .size eq_i32, .Lfunc_end0-eq_i32 + + .globl ne_i32 + .type ne_i32,@function +ne_i32: + .param i32, i32 + .result i32 + i32.ne $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end1: + .size ne_i32, .Lfunc_end1-ne_i32 + + .globl slt_i32 + .type slt_i32,@function +slt_i32: + .param i32, i32 + .result i32 + i32.lt_s $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end2: + .size slt_i32, .Lfunc_end2-slt_i32 + + .globl sle_i32 + .type sle_i32,@function +sle_i32: + .param i32, i32 + .result i32 + i32.le_s $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end3: + .size sle_i32, .Lfunc_end3-sle_i32 + + .globl ult_i32 + .type ult_i32,@function +ult_i32: + .param i32, i32 + .result i32 + i32.lt_u $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end4: + .size ult_i32, .Lfunc_end4-ult_i32 + + .globl ule_i32 + .type ule_i32,@function +ule_i32: + .param i32, i32 + .result i32 + i32.le_u $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end5: + .size ule_i32, .Lfunc_end5-ule_i32 + + .globl sgt_i32 + .type sgt_i32,@function +sgt_i32: + .param i32, i32 + .result i32 + i32.gt_s $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end6: + .size sgt_i32, .Lfunc_end6-sgt_i32 + + .globl sge_i32 + .type sge_i32,@function +sge_i32: + .param i32, i32 + .result i32 + i32.ge_s $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end7: + .size sge_i32, .Lfunc_end7-sge_i32 + + .globl ugt_i32 + .type ugt_i32,@function +ugt_i32: + .param i32, i32 + .result i32 + i32.gt_u $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end8: + .size ugt_i32, .Lfunc_end8-ugt_i32 + + .globl uge_i32 + .type uge_i32,@function +uge_i32: + .param i32, i32 + .result i32 + i32.ge_u $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end9: + .size uge_i32, .Lfunc_end9-uge_i32 + + diff --git a/src/binaryen/test/llvm_autogenerated/comparisons_i32.wast b/src/binaryen/test/llvm_autogenerated/comparisons_i32.wast new file mode 100644 index 0000000000..e55b7c98b5 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/comparisons_i32.wast @@ -0,0 +1,129 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "eq_i32" (func $eq_i32)) + (export "ne_i32" (func $ne_i32)) + (export "slt_i32" (func $slt_i32)) + (export "sle_i32" (func $sle_i32)) + (export "ult_i32" (func $ult_i32)) + (export "ule_i32" (func $ule_i32)) + (export "sgt_i32" (func $sgt_i32)) + (export "sge_i32" (func $sge_i32)) + (export "ugt_i32" (func $ugt_i32)) + (export "uge_i32" (func $uge_i32)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $eq_i32 (; 0 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.eq + (get_local $0) + (get_local $1) + ) + ) + ) + (func $ne_i32 (; 1 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.ne + (get_local $0) + (get_local $1) + ) + ) + ) + (func $slt_i32 (; 2 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.lt_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $sle_i32 (; 3 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.le_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $ult_i32 (; 4 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.lt_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $ule_i32 (; 5 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.le_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $sgt_i32 (; 6 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.gt_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $sge_i32 (; 7 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.ge_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $ugt_i32 (; 8 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.gt_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $uge_i32 (; 9 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.ge_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $stackSave (; 10 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 11 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 12 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/comparisons_i64.s b/src/binaryen/test/llvm_autogenerated/comparisons_i64.s new file mode 100644 index 0000000000..c348750aa7 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/comparisons_i64.s @@ -0,0 +1,113 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/comparisons_i64.ll" + .globl eq_i64 + .type eq_i64,@function +eq_i64: + .param i64, i64 + .result i32 + i64.eq $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end0: + .size eq_i64, .Lfunc_end0-eq_i64 + + .globl ne_i64 + .type ne_i64,@function +ne_i64: + .param i64, i64 + .result i32 + i64.ne $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end1: + .size ne_i64, .Lfunc_end1-ne_i64 + + .globl slt_i64 + .type slt_i64,@function +slt_i64: + .param i64, i64 + .result i32 + i64.lt_s $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end2: + .size slt_i64, .Lfunc_end2-slt_i64 + + .globl sle_i64 + .type sle_i64,@function +sle_i64: + .param i64, i64 + .result i32 + i64.le_s $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end3: + .size sle_i64, .Lfunc_end3-sle_i64 + + .globl ult_i64 + .type ult_i64,@function +ult_i64: + .param i64, i64 + .result i32 + i64.lt_u $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end4: + .size ult_i64, .Lfunc_end4-ult_i64 + + .globl ule_i64 + .type ule_i64,@function +ule_i64: + .param i64, i64 + .result i32 + i64.le_u $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end5: + .size ule_i64, .Lfunc_end5-ule_i64 + + .globl sgt_i64 + .type sgt_i64,@function +sgt_i64: + .param i64, i64 + .result i32 + i64.gt_s $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end6: + .size sgt_i64, .Lfunc_end6-sgt_i64 + + .globl sge_i64 + .type sge_i64,@function +sge_i64: + .param i64, i64 + .result i32 + i64.ge_s $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end7: + .size sge_i64, .Lfunc_end7-sge_i64 + + .globl ugt_i64 + .type ugt_i64,@function +ugt_i64: + .param i64, i64 + .result i32 + i64.gt_u $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end8: + .size ugt_i64, .Lfunc_end8-ugt_i64 + + .globl uge_i64 + .type uge_i64,@function +uge_i64: + .param i64, i64 + .result i32 + i64.ge_u $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end9: + .size uge_i64, .Lfunc_end9-uge_i64 + + diff --git a/src/binaryen/test/llvm_autogenerated/comparisons_i64.wast b/src/binaryen/test/llvm_autogenerated/comparisons_i64.wast new file mode 100644 index 0000000000..c7764d82ba --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/comparisons_i64.wast @@ -0,0 +1,129 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "eq_i64" (func $eq_i64)) + (export "ne_i64" (func $ne_i64)) + (export "slt_i64" (func $slt_i64)) + (export "sle_i64" (func $sle_i64)) + (export "ult_i64" (func $ult_i64)) + (export "ule_i64" (func $ule_i64)) + (export "sgt_i64" (func $sgt_i64)) + (export "sge_i64" (func $sge_i64)) + (export "ugt_i64" (func $ugt_i64)) + (export "uge_i64" (func $uge_i64)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $eq_i64 (; 0 ;) (param $0 i64) (param $1 i64) (result i32) + (return + (i64.eq + (get_local $0) + (get_local $1) + ) + ) + ) + (func $ne_i64 (; 1 ;) (param $0 i64) (param $1 i64) (result i32) + (return + (i64.ne + (get_local $0) + (get_local $1) + ) + ) + ) + (func $slt_i64 (; 2 ;) (param $0 i64) (param $1 i64) (result i32) + (return + (i64.lt_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $sle_i64 (; 3 ;) (param $0 i64) (param $1 i64) (result i32) + (return + (i64.le_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $ult_i64 (; 4 ;) (param $0 i64) (param $1 i64) (result i32) + (return + (i64.lt_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $ule_i64 (; 5 ;) (param $0 i64) (param $1 i64) (result i32) + (return + (i64.le_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $sgt_i64 (; 6 ;) (param $0 i64) (param $1 i64) (result i32) + (return + (i64.gt_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $sge_i64 (; 7 ;) (param $0 i64) (param $1 i64) (result i32) + (return + (i64.ge_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $ugt_i64 (; 8 ;) (param $0 i64) (param $1 i64) (result i32) + (return + (i64.gt_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $uge_i64 (; 9 ;) (param $0 i64) (param $1 i64) (result i32) + (return + (i64.ge_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $stackSave (; 10 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 11 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 12 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/conv.s b/src/binaryen/test/llvm_autogenerated/conv.s new file mode 100644 index 0000000000..b2d9406fa7 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/conv.s @@ -0,0 +1,291 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/conv.ll" + .globl i32_wrap_i64 + .type i32_wrap_i64,@function +i32_wrap_i64: + .param i64 + .result i32 + i32.wrap/i64 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end0: + .size i32_wrap_i64, .Lfunc_end0-i32_wrap_i64 + + .globl i64_extend_s_i32 + .type i64_extend_s_i32,@function +i64_extend_s_i32: + .param i32 + .result i64 + i64.extend_s/i32 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end1: + .size i64_extend_s_i32, .Lfunc_end1-i64_extend_s_i32 + + .globl i64_extend_u_i32 + .type i64_extend_u_i32,@function +i64_extend_u_i32: + .param i32 + .result i64 + i64.extend_u/i32 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end2: + .size i64_extend_u_i32, .Lfunc_end2-i64_extend_u_i32 + + .globl i32_trunc_s_f32 + .type i32_trunc_s_f32,@function +i32_trunc_s_f32: + .param f32 + .result i32 + i32.trunc_s/f32 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end3: + .size i32_trunc_s_f32, .Lfunc_end3-i32_trunc_s_f32 + + .globl i32_trunc_u_f32 + .type i32_trunc_u_f32,@function +i32_trunc_u_f32: + .param f32 + .result i32 + i32.trunc_u/f32 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end4: + .size i32_trunc_u_f32, .Lfunc_end4-i32_trunc_u_f32 + + .globl i32_trunc_s_f64 + .type i32_trunc_s_f64,@function +i32_trunc_s_f64: + .param f64 + .result i32 + i32.trunc_s/f64 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end5: + .size i32_trunc_s_f64, .Lfunc_end5-i32_trunc_s_f64 + + .globl i32_trunc_u_f64 + .type i32_trunc_u_f64,@function +i32_trunc_u_f64: + .param f64 + .result i32 + i32.trunc_u/f64 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end6: + .size i32_trunc_u_f64, .Lfunc_end6-i32_trunc_u_f64 + + .globl i64_trunc_s_f32 + .type i64_trunc_s_f32,@function +i64_trunc_s_f32: + .param f32 + .result i64 + i64.trunc_s/f32 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end7: + .size i64_trunc_s_f32, .Lfunc_end7-i64_trunc_s_f32 + + .globl i64_trunc_u_f32 + .type i64_trunc_u_f32,@function +i64_trunc_u_f32: + .param f32 + .result i64 + i64.trunc_u/f32 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end8: + .size i64_trunc_u_f32, .Lfunc_end8-i64_trunc_u_f32 + + .globl i64_trunc_s_f64 + .type i64_trunc_s_f64,@function +i64_trunc_s_f64: + .param f64 + .result i64 + i64.trunc_s/f64 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end9: + .size i64_trunc_s_f64, .Lfunc_end9-i64_trunc_s_f64 + + .globl i64_trunc_u_f64 + .type i64_trunc_u_f64,@function +i64_trunc_u_f64: + .param f64 + .result i64 + i64.trunc_u/f64 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end10: + .size i64_trunc_u_f64, .Lfunc_end10-i64_trunc_u_f64 + + .globl f32_convert_s_i32 + .type f32_convert_s_i32,@function +f32_convert_s_i32: + .param i32 + .result f32 + f32.convert_s/i32 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end11: + .size f32_convert_s_i32, .Lfunc_end11-f32_convert_s_i32 + + .globl f32_convert_u_i32 + .type f32_convert_u_i32,@function +f32_convert_u_i32: + .param i32 + .result f32 + f32.convert_u/i32 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end12: + .size f32_convert_u_i32, .Lfunc_end12-f32_convert_u_i32 + + .globl f64_convert_s_i32 + .type f64_convert_s_i32,@function +f64_convert_s_i32: + .param i32 + .result f64 + f64.convert_s/i32 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end13: + .size f64_convert_s_i32, .Lfunc_end13-f64_convert_s_i32 + + .globl f64_convert_u_i32 + .type f64_convert_u_i32,@function +f64_convert_u_i32: + .param i32 + .result f64 + f64.convert_u/i32 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end14: + .size f64_convert_u_i32, .Lfunc_end14-f64_convert_u_i32 + + .globl f32_convert_s_i64 + .type f32_convert_s_i64,@function +f32_convert_s_i64: + .param i64 + .result f32 + f32.convert_s/i64 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end15: + .size f32_convert_s_i64, .Lfunc_end15-f32_convert_s_i64 + + .globl f32_convert_u_i64 + .type f32_convert_u_i64,@function +f32_convert_u_i64: + .param i64 + .result f32 + f32.convert_u/i64 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end16: + .size f32_convert_u_i64, .Lfunc_end16-f32_convert_u_i64 + + .globl f64_convert_s_i64 + .type f64_convert_s_i64,@function +f64_convert_s_i64: + .param i64 + .result f64 + f64.convert_s/i64 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end17: + .size f64_convert_s_i64, .Lfunc_end17-f64_convert_s_i64 + + .globl f64_convert_u_i64 + .type f64_convert_u_i64,@function +f64_convert_u_i64: + .param i64 + .result f64 + f64.convert_u/i64 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end18: + .size f64_convert_u_i64, .Lfunc_end18-f64_convert_u_i64 + + .globl f64_promote_f32 + .type f64_promote_f32,@function +f64_promote_f32: + .param f32 + .result f64 + f64.promote/f32 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end19: + .size f64_promote_f32, .Lfunc_end19-f64_promote_f32 + + .globl f32_demote_f64 + .type f32_demote_f64,@function +f32_demote_f64: + .param f64 + .result f32 + f32.demote/f64 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end20: + .size f32_demote_f64, .Lfunc_end20-f32_demote_f64 + + .globl anyext + .type anyext,@function +anyext: + .param i32 + .result i64 + i64.extend_u/i32 $push0=, $0 + i64.const $push1=, 32 + i64.shl $push2=, $pop0, $pop1 + return $pop2 + .endfunc +.Lfunc_end21: + .size anyext, .Lfunc_end21-anyext + + .globl bitcast_i32_to_float + .type bitcast_i32_to_float,@function +bitcast_i32_to_float: + .param i32 + .result f32 + f32.reinterpret/i32 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end22: + .size bitcast_i32_to_float, .Lfunc_end22-bitcast_i32_to_float + + .globl bitcast_float_to_i32 + .type bitcast_float_to_i32,@function +bitcast_float_to_i32: + .param f32 + .result i32 + i32.reinterpret/f32 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end23: + .size bitcast_float_to_i32, .Lfunc_end23-bitcast_float_to_i32 + + .globl bitcast_i64_to_double + .type bitcast_i64_to_double,@function +bitcast_i64_to_double: + .param i64 + .result f64 + f64.reinterpret/i64 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end24: + .size bitcast_i64_to_double, .Lfunc_end24-bitcast_i64_to_double + + .globl bitcast_double_to_i64 + .type bitcast_double_to_i64,@function +bitcast_double_to_i64: + .param f64 + .result i64 + i64.reinterpret/f64 $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end25: + .size bitcast_double_to_i64, .Lfunc_end25-bitcast_double_to_i64 + + diff --git a/src/binaryen/test/llvm_autogenerated/conv.wast b/src/binaryen/test/llvm_autogenerated/conv.wast new file mode 100644 index 0000000000..7a59f056da --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/conv.wast @@ -0,0 +1,250 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "i32_wrap_i64" (func $i32_wrap_i64)) + (export "i64_extend_s_i32" (func $i64_extend_s_i32)) + (export "i64_extend_u_i32" (func $i64_extend_u_i32)) + (export "i32_trunc_s_f32" (func $i32_trunc_s_f32)) + (export "i32_trunc_u_f32" (func $i32_trunc_u_f32)) + (export "i32_trunc_s_f64" (func $i32_trunc_s_f64)) + (export "i32_trunc_u_f64" (func $i32_trunc_u_f64)) + (export "i64_trunc_s_f32" (func $i64_trunc_s_f32)) + (export "i64_trunc_u_f32" (func $i64_trunc_u_f32)) + (export "i64_trunc_s_f64" (func $i64_trunc_s_f64)) + (export "i64_trunc_u_f64" (func $i64_trunc_u_f64)) + (export "f32_convert_s_i32" (func $f32_convert_s_i32)) + (export "f32_convert_u_i32" (func $f32_convert_u_i32)) + (export "f64_convert_s_i32" (func $f64_convert_s_i32)) + (export "f64_convert_u_i32" (func $f64_convert_u_i32)) + (export "f32_convert_s_i64" (func $f32_convert_s_i64)) + (export "f32_convert_u_i64" (func $f32_convert_u_i64)) + (export "f64_convert_s_i64" (func $f64_convert_s_i64)) + (export "f64_convert_u_i64" (func $f64_convert_u_i64)) + (export "f64_promote_f32" (func $f64_promote_f32)) + (export "f32_demote_f64" (func $f32_demote_f64)) + (export "anyext" (func $anyext)) + (export "bitcast_i32_to_float" (func $bitcast_i32_to_float)) + (export "bitcast_float_to_i32" (func $bitcast_float_to_i32)) + (export "bitcast_i64_to_double" (func $bitcast_i64_to_double)) + (export "bitcast_double_to_i64" (func $bitcast_double_to_i64)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $i32_wrap_i64 (; 0 ;) (param $0 i64) (result i32) + (return + (i32.wrap/i64 + (get_local $0) + ) + ) + ) + (func $i64_extend_s_i32 (; 1 ;) (param $0 i32) (result i64) + (return + (i64.extend_s/i32 + (get_local $0) + ) + ) + ) + (func $i64_extend_u_i32 (; 2 ;) (param $0 i32) (result i64) + (return + (i64.extend_u/i32 + (get_local $0) + ) + ) + ) + (func $i32_trunc_s_f32 (; 3 ;) (param $0 f32) (result i32) + (return + (i32.trunc_s/f32 + (get_local $0) + ) + ) + ) + (func $i32_trunc_u_f32 (; 4 ;) (param $0 f32) (result i32) + (return + (i32.trunc_u/f32 + (get_local $0) + ) + ) + ) + (func $i32_trunc_s_f64 (; 5 ;) (param $0 f64) (result i32) + (return + (i32.trunc_s/f64 + (get_local $0) + ) + ) + ) + (func $i32_trunc_u_f64 (; 6 ;) (param $0 f64) (result i32) + (return + (i32.trunc_u/f64 + (get_local $0) + ) + ) + ) + (func $i64_trunc_s_f32 (; 7 ;) (param $0 f32) (result i64) + (return + (i64.trunc_s/f32 + (get_local $0) + ) + ) + ) + (func $i64_trunc_u_f32 (; 8 ;) (param $0 f32) (result i64) + (return + (i64.trunc_u/f32 + (get_local $0) + ) + ) + ) + (func $i64_trunc_s_f64 (; 9 ;) (param $0 f64) (result i64) + (return + (i64.trunc_s/f64 + (get_local $0) + ) + ) + ) + (func $i64_trunc_u_f64 (; 10 ;) (param $0 f64) (result i64) + (return + (i64.trunc_u/f64 + (get_local $0) + ) + ) + ) + (func $f32_convert_s_i32 (; 11 ;) (param $0 i32) (result f32) + (return + (f32.convert_s/i32 + (get_local $0) + ) + ) + ) + (func $f32_convert_u_i32 (; 12 ;) (param $0 i32) (result f32) + (return + (f32.convert_u/i32 + (get_local $0) + ) + ) + ) + (func $f64_convert_s_i32 (; 13 ;) (param $0 i32) (result f64) + (return + (f64.convert_s/i32 + (get_local $0) + ) + ) + ) + (func $f64_convert_u_i32 (; 14 ;) (param $0 i32) (result f64) + (return + (f64.convert_u/i32 + (get_local $0) + ) + ) + ) + (func $f32_convert_s_i64 (; 15 ;) (param $0 i64) (result f32) + (return + (f32.convert_s/i64 + (get_local $0) + ) + ) + ) + (func $f32_convert_u_i64 (; 16 ;) (param $0 i64) (result f32) + (return + (f32.convert_u/i64 + (get_local $0) + ) + ) + ) + (func $f64_convert_s_i64 (; 17 ;) (param $0 i64) (result f64) + (return + (f64.convert_s/i64 + (get_local $0) + ) + ) + ) + (func $f64_convert_u_i64 (; 18 ;) (param $0 i64) (result f64) + (return + (f64.convert_u/i64 + (get_local $0) + ) + ) + ) + (func $f64_promote_f32 (; 19 ;) (param $0 f32) (result f64) + (return + (f64.promote/f32 + (get_local $0) + ) + ) + ) + (func $f32_demote_f64 (; 20 ;) (param $0 f64) (result f32) + (return + (f32.demote/f64 + (get_local $0) + ) + ) + ) + (func $anyext (; 21 ;) (param $0 i32) (result i64) + (return + (i64.shl + (i64.extend_u/i32 + (get_local $0) + ) + (i64.const 32) + ) + ) + ) + (func $bitcast_i32_to_float (; 22 ;) (param $0 i32) (result f32) + (return + (f32.reinterpret/i32 + (get_local $0) + ) + ) + ) + (func $bitcast_float_to_i32 (; 23 ;) (param $0 f32) (result i32) + (return + (i32.reinterpret/f32 + (get_local $0) + ) + ) + ) + (func $bitcast_i64_to_double (; 24 ;) (param $0 i64) (result f64) + (return + (f64.reinterpret/i64 + (get_local $0) + ) + ) + ) + (func $bitcast_double_to_i64 (; 25 ;) (param $0 f64) (result i64) + (return + (i64.reinterpret/f64 + (get_local $0) + ) + ) + ) + (func $stackSave (; 26 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 27 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 28 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/copysign-casts.s b/src/binaryen/test/llvm_autogenerated/copysign-casts.s new file mode 100644 index 0000000000..154edb9c36 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/copysign-casts.s @@ -0,0 +1,27 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/copysign-casts.ll" + .globl fold_promote + .type fold_promote,@function +fold_promote: + .param f64, f32 + .result f64 + f64.promote/f32 $push0=, $1 + f64.copysign $push1=, $0, $pop0 + .endfunc +.Lfunc_end0: + .size fold_promote, .Lfunc_end0-fold_promote + + .globl fold_demote + .type fold_demote,@function +fold_demote: + .param f32, f64 + .result f32 + f32.demote/f64 $push0=, $1 + f32.copysign $push1=, $0, $pop0 + .endfunc +.Lfunc_end1: + .size fold_demote, .Lfunc_end1-fold_demote + + + .functype copysign, f64, f64, f64 + .functype copysignf, f32, f32, f32 diff --git a/src/binaryen/test/llvm_autogenerated/copysign-casts.wast b/src/binaryen/test/llvm_autogenerated/copysign-casts.wast new file mode 100644 index 0000000000..b1bcb7d9b3 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/copysign-casts.wast @@ -0,0 +1,59 @@ +(module + (type $FUNCSIG$ddd (func (param f64 f64) (result f64))) + (type $FUNCSIG$fff (func (param f32 f32) (result f32))) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "fold_promote" (func $fold_promote)) + (export "fold_demote" (func $fold_demote)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $fold_promote (; 0 ;) (param $0 f64) (param $1 f32) (result f64) + (f64.copysign + (get_local $0) + (f64.promote/f32 + (get_local $1) + ) + ) + ) + (func $fold_demote (; 1 ;) (param $0 f32) (param $1 f64) (result f32) + (f32.copysign + (get_local $0) + (f32.demote/f64 + (get_local $1) + ) + ) + ) + (func $stackSave (; 2 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 3 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 4 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/cpus.s b/src/binaryen/test/llvm_autogenerated/cpus.s new file mode 100644 index 0000000000..696468d463 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/cpus.s @@ -0,0 +1,13 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/cpus.ll" + .globl f + .type f,@function +f: + .param i32 + .result i32 + copy_local $push0=, $0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + + diff --git a/src/binaryen/test/llvm_autogenerated/cpus.wast b/src/binaryen/test/llvm_autogenerated/cpus.wast new file mode 100644 index 0000000000..fb6b6bd944 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/cpus.wast @@ -0,0 +1,43 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "f" (func $f)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $f (; 0 ;) (param $0 i32) (result i32) + (get_local $0) + ) + (func $stackSave (; 1 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 2 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 3 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/dead-vreg.s b/src/binaryen/test/llvm_autogenerated/dead-vreg.s new file mode 100644 index 0000000000..db0e73d203 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/dead-vreg.s @@ -0,0 +1,50 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/dead-vreg.ll" + .globl foo + .type foo,@function +foo: + .param i32, i32, i32 + .local i32, i32, i32, i32, i32, i32 + block + i32.const $push3=, 1 + i32.lt_s $push0=, $2, $pop3 + br_if 0, $pop0 + i32.const $push1=, 2 + i32.shl $3=, $1, $pop1 + i32.const $5=, 0 + i32.const $push4=, 1 + i32.lt_s $4=, $1, $pop4 +.LBB0_2: + loop + block + br_if 0, $4 + i32.const $6=, 0 + copy_local $7=, $0 + copy_local $8=, $1 +.LBB0_4: + loop + i32.store 0($7), $6 + i32.add $6=, $6, $5 + i32.const $push8=, 4 + i32.add $7=, $7, $pop8 + i32.const $push7=, -1 + i32.add $push6=, $8, $pop7 + tee_local $push5=, $8=, $pop6 + br_if 0, $pop5 +.LBB0_5: + end_loop + end_block + i32.add $0=, $0, $3 + i32.const $push11=, 1 + i32.add $push10=, $5, $pop11 + tee_local $push9=, $5=, $pop10 + i32.ne $push2=, $pop9, $2 + br_if 0, $pop2 +.LBB0_6: + end_loop + end_block + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + + diff --git a/src/binaryen/test/llvm_autogenerated/dead-vreg.wast b/src/binaryen/test/llvm_autogenerated/dead-vreg.wast new file mode 100644 index 0000000000..312b87d3de --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/dead-vreg.wast @@ -0,0 +1,130 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "foo" (func $foo)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $foo (; 0 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (block $label$0 + (br_if $label$0 + (i32.lt_s + (get_local $2) + (i32.const 1) + ) + ) + (set_local $3 + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $4 + (i32.lt_s + (get_local $1) + (i32.const 1) + ) + ) + (loop $label$1 + (block $label$2 + (br_if $label$2 + (get_local $4) + ) + (set_local $6 + (i32.const 0) + ) + (set_local $7 + (get_local $0) + ) + (set_local $8 + (get_local $1) + ) + (loop $label$3 + (i32.store + (get_local $7) + (get_local $6) + ) + (set_local $6 + (i32.add + (get_local $6) + (get_local $5) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (br_if $label$3 + (tee_local $8 + (i32.add + (get_local $8) + (i32.const -1) + ) + ) + ) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (get_local $3) + ) + ) + (br_if $label$1 + (i32.ne + (tee_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (get_local $2) + ) + ) + ) + ) + ) + (func $stackSave (; 1 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 2 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 3 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/divrem-constant.s b/src/binaryen/test/llvm_autogenerated/divrem-constant.s new file mode 100644 index 0000000000..486730225f --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/divrem-constant.s @@ -0,0 +1,91 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/divrem-constant.ll" + .globl test_udiv_2 + .type test_udiv_2,@function +test_udiv_2: + .param i32 + .result i32 + i32.const $push0=, 1 + i32.shr_u $push1=, $0, $pop0 + .endfunc +.Lfunc_end0: + .size test_udiv_2, .Lfunc_end0-test_udiv_2 + + .globl test_udiv_5 + .type test_udiv_5,@function +test_udiv_5: + .param i32 + .result i32 + i32.const $push0=, 5 + i32.div_u $push1=, $0, $pop0 + .endfunc +.Lfunc_end1: + .size test_udiv_5, .Lfunc_end1-test_udiv_5 + + .globl test_sdiv_2 + .type test_sdiv_2,@function +test_sdiv_2: + .param i32 + .result i32 + i32.const $push0=, 2 + i32.div_s $push1=, $0, $pop0 + .endfunc +.Lfunc_end2: + .size test_sdiv_2, .Lfunc_end2-test_sdiv_2 + + .globl test_sdiv_5 + .type test_sdiv_5,@function +test_sdiv_5: + .param i32 + .result i32 + i32.const $push0=, 5 + i32.div_s $push1=, $0, $pop0 + .endfunc +.Lfunc_end3: + .size test_sdiv_5, .Lfunc_end3-test_sdiv_5 + + .globl test_urem_2 + .type test_urem_2,@function +test_urem_2: + .param i32 + .result i32 + i32.const $push0=, 1 + i32.and $push1=, $0, $pop0 + .endfunc +.Lfunc_end4: + .size test_urem_2, .Lfunc_end4-test_urem_2 + + .globl test_urem_5 + .type test_urem_5,@function +test_urem_5: + .param i32 + .result i32 + i32.const $push0=, 5 + i32.rem_u $push1=, $0, $pop0 + .endfunc +.Lfunc_end5: + .size test_urem_5, .Lfunc_end5-test_urem_5 + + .globl test_srem_2 + .type test_srem_2,@function +test_srem_2: + .param i32 + .result i32 + i32.const $push0=, 2 + i32.rem_s $push1=, $0, $pop0 + .endfunc +.Lfunc_end6: + .size test_srem_2, .Lfunc_end6-test_srem_2 + + .globl test_srem_5 + .type test_srem_5,@function +test_srem_5: + .param i32 + .result i32 + i32.const $push0=, 5 + i32.rem_s $push1=, $0, $pop0 + .endfunc +.Lfunc_end7: + .size test_srem_5, .Lfunc_end7-test_srem_5 + + diff --git a/src/binaryen/test/llvm_autogenerated/divrem-constant.wast b/src/binaryen/test/llvm_autogenerated/divrem-constant.wast new file mode 100644 index 0000000000..957048e571 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/divrem-constant.wast @@ -0,0 +1,95 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "test_udiv_2" (func $test_udiv_2)) + (export "test_udiv_5" (func $test_udiv_5)) + (export "test_sdiv_2" (func $test_sdiv_2)) + (export "test_sdiv_5" (func $test_sdiv_5)) + (export "test_urem_2" (func $test_urem_2)) + (export "test_urem_5" (func $test_urem_5)) + (export "test_srem_2" (func $test_srem_2)) + (export "test_srem_5" (func $test_srem_5)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $test_udiv_2 (; 0 ;) (param $0 i32) (result i32) + (i32.shr_u + (get_local $0) + (i32.const 1) + ) + ) + (func $test_udiv_5 (; 1 ;) (param $0 i32) (result i32) + (i32.div_u + (get_local $0) + (i32.const 5) + ) + ) + (func $test_sdiv_2 (; 2 ;) (param $0 i32) (result i32) + (i32.div_s + (get_local $0) + (i32.const 2) + ) + ) + (func $test_sdiv_5 (; 3 ;) (param $0 i32) (result i32) + (i32.div_s + (get_local $0) + (i32.const 5) + ) + ) + (func $test_urem_2 (; 4 ;) (param $0 i32) (result i32) + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + (func $test_urem_5 (; 5 ;) (param $0 i32) (result i32) + (i32.rem_u + (get_local $0) + (i32.const 5) + ) + ) + (func $test_srem_2 (; 6 ;) (param $0 i32) (result i32) + (i32.rem_s + (get_local $0) + (i32.const 2) + ) + ) + (func $test_srem_5 (; 7 ;) (param $0 i32) (result i32) + (i32.rem_s + (get_local $0) + (i32.const 5) + ) + ) + (func $stackSave (; 8 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 9 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 10 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/f32.s b/src/binaryen/test/llvm_autogenerated/f32.s new file mode 100644 index 0000000000..5d241747e1 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/f32.s @@ -0,0 +1,181 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/f32.ll" + .globl fadd32 + .type fadd32,@function +fadd32: + .param f32, f32 + .result f32 + f32.add $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end0: + .size fadd32, .Lfunc_end0-fadd32 + + .globl fsub32 + .type fsub32,@function +fsub32: + .param f32, f32 + .result f32 + f32.sub $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end1: + .size fsub32, .Lfunc_end1-fsub32 + + .globl fmul32 + .type fmul32,@function +fmul32: + .param f32, f32 + .result f32 + f32.mul $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end2: + .size fmul32, .Lfunc_end2-fmul32 + + .globl fdiv32 + .type fdiv32,@function +fdiv32: + .param f32, f32 + .result f32 + f32.div $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end3: + .size fdiv32, .Lfunc_end3-fdiv32 + + .globl fabs32 + .type fabs32,@function +fabs32: + .param f32 + .result f32 + f32.abs $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end4: + .size fabs32, .Lfunc_end4-fabs32 + + .globl fneg32 + .type fneg32,@function +fneg32: + .param f32 + .result f32 + f32.neg $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end5: + .size fneg32, .Lfunc_end5-fneg32 + + .globl copysign32 + .type copysign32,@function +copysign32: + .param f32, f32 + .result f32 + f32.copysign $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end6: + .size copysign32, .Lfunc_end6-copysign32 + + .globl sqrt32 + .type sqrt32,@function +sqrt32: + .param f32 + .result f32 + f32.sqrt $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end7: + .size sqrt32, .Lfunc_end7-sqrt32 + + .globl ceil32 + .type ceil32,@function +ceil32: + .param f32 + .result f32 + f32.ceil $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end8: + .size ceil32, .Lfunc_end8-ceil32 + + .globl floor32 + .type floor32,@function +floor32: + .param f32 + .result f32 + f32.floor $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end9: + .size floor32, .Lfunc_end9-floor32 + + .globl trunc32 + .type trunc32,@function +trunc32: + .param f32 + .result f32 + f32.trunc $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end10: + .size trunc32, .Lfunc_end10-trunc32 + + .globl nearest32 + .type nearest32,@function +nearest32: + .param f32 + .result f32 + f32.nearest $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end11: + .size nearest32, .Lfunc_end11-nearest32 + + .globl nearest32_via_rint + .type nearest32_via_rint,@function +nearest32_via_rint: + .param f32 + .result f32 + f32.nearest $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end12: + .size nearest32_via_rint, .Lfunc_end12-nearest32_via_rint + + .globl fmin32 + .type fmin32,@function +fmin32: + .param f32 + .result f32 + f32.const $push0=, 0x0p0 + f32.min $push1=, $0, $pop0 + return $pop1 + .endfunc +.Lfunc_end13: + .size fmin32, .Lfunc_end13-fmin32 + + .globl fmax32 + .type fmax32,@function +fmax32: + .param f32 + .result f32 + f32.const $push0=, 0x0p0 + f32.max $push1=, $0, $pop0 + return $pop1 + .endfunc +.Lfunc_end14: + .size fmax32, .Lfunc_end14-fmax32 + + .globl fma32 + .type fma32,@function +fma32: + .param f32, f32, f32 + .result f32 + f32.call $push0=, fmaf@FUNCTION, $0, $1, $2 + return $pop0 + .endfunc +.Lfunc_end15: + .size fma32, .Lfunc_end15-fma32 + + diff --git a/src/binaryen/test/llvm_autogenerated/f32.wast b/src/binaryen/test/llvm_autogenerated/f32.wast new file mode 100644 index 0000000000..1904cb3577 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/f32.wast @@ -0,0 +1,178 @@ +(module + (type $FUNCSIG$ffff (func (param f32 f32 f32) (result f32))) + (import "env" "fmaf" (func $fmaf (param f32 f32 f32) (result f32))) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "fadd32" (func $fadd32)) + (export "fsub32" (func $fsub32)) + (export "fmul32" (func $fmul32)) + (export "fdiv32" (func $fdiv32)) + (export "fabs32" (func $fabs32)) + (export "fneg32" (func $fneg32)) + (export "copysign32" (func $copysign32)) + (export "sqrt32" (func $sqrt32)) + (export "ceil32" (func $ceil32)) + (export "floor32" (func $floor32)) + (export "trunc32" (func $trunc32)) + (export "nearest32" (func $nearest32)) + (export "nearest32_via_rint" (func $nearest32_via_rint)) + (export "fmin32" (func $fmin32)) + (export "fmax32" (func $fmax32)) + (export "fma32" (func $fma32)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $fadd32 (; 1 ;) (param $0 f32) (param $1 f32) (result f32) + (return + (f32.add + (get_local $0) + (get_local $1) + ) + ) + ) + (func $fsub32 (; 2 ;) (param $0 f32) (param $1 f32) (result f32) + (return + (f32.sub + (get_local $0) + (get_local $1) + ) + ) + ) + (func $fmul32 (; 3 ;) (param $0 f32) (param $1 f32) (result f32) + (return + (f32.mul + (get_local $0) + (get_local $1) + ) + ) + ) + (func $fdiv32 (; 4 ;) (param $0 f32) (param $1 f32) (result f32) + (return + (f32.div + (get_local $0) + (get_local $1) + ) + ) + ) + (func $fabs32 (; 5 ;) (param $0 f32) (result f32) + (return + (f32.abs + (get_local $0) + ) + ) + ) + (func $fneg32 (; 6 ;) (param $0 f32) (result f32) + (return + (f32.neg + (get_local $0) + ) + ) + ) + (func $copysign32 (; 7 ;) (param $0 f32) (param $1 f32) (result f32) + (return + (f32.copysign + (get_local $0) + (get_local $1) + ) + ) + ) + (func $sqrt32 (; 8 ;) (param $0 f32) (result f32) + (return + (f32.sqrt + (get_local $0) + ) + ) + ) + (func $ceil32 (; 9 ;) (param $0 f32) (result f32) + (return + (f32.ceil + (get_local $0) + ) + ) + ) + (func $floor32 (; 10 ;) (param $0 f32) (result f32) + (return + (f32.floor + (get_local $0) + ) + ) + ) + (func $trunc32 (; 11 ;) (param $0 f32) (result f32) + (return + (f32.trunc + (get_local $0) + ) + ) + ) + (func $nearest32 (; 12 ;) (param $0 f32) (result f32) + (return + (f32.nearest + (get_local $0) + ) + ) + ) + (func $nearest32_via_rint (; 13 ;) (param $0 f32) (result f32) + (return + (f32.nearest + (get_local $0) + ) + ) + ) + (func $fmin32 (; 14 ;) (param $0 f32) (result f32) + (return + (f32.min + (get_local $0) + (f32.const 0) + ) + ) + ) + (func $fmax32 (; 15 ;) (param $0 f32) (result f32) + (return + (f32.max + (get_local $0) + (f32.const 0) + ) + ) + ) + (func $fma32 (; 16 ;) (param $0 f32) (param $1 f32) (param $2 f32) (result f32) + (return + (call $fmaf + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (func $stackSave (; 17 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 18 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 19 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/f64.s b/src/binaryen/test/llvm_autogenerated/f64.s new file mode 100644 index 0000000000..fd3c59c797 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/f64.s @@ -0,0 +1,181 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/f64.ll" + .globl fadd64 + .type fadd64,@function +fadd64: + .param f64, f64 + .result f64 + f64.add $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end0: + .size fadd64, .Lfunc_end0-fadd64 + + .globl fsub64 + .type fsub64,@function +fsub64: + .param f64, f64 + .result f64 + f64.sub $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end1: + .size fsub64, .Lfunc_end1-fsub64 + + .globl fmul64 + .type fmul64,@function +fmul64: + .param f64, f64 + .result f64 + f64.mul $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end2: + .size fmul64, .Lfunc_end2-fmul64 + + .globl fdiv64 + .type fdiv64,@function +fdiv64: + .param f64, f64 + .result f64 + f64.div $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end3: + .size fdiv64, .Lfunc_end3-fdiv64 + + .globl fabs64 + .type fabs64,@function +fabs64: + .param f64 + .result f64 + f64.abs $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end4: + .size fabs64, .Lfunc_end4-fabs64 + + .globl fneg64 + .type fneg64,@function +fneg64: + .param f64 + .result f64 + f64.neg $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end5: + .size fneg64, .Lfunc_end5-fneg64 + + .globl copysign64 + .type copysign64,@function +copysign64: + .param f64, f64 + .result f64 + f64.copysign $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end6: + .size copysign64, .Lfunc_end6-copysign64 + + .globl sqrt64 + .type sqrt64,@function +sqrt64: + .param f64 + .result f64 + f64.sqrt $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end7: + .size sqrt64, .Lfunc_end7-sqrt64 + + .globl ceil64 + .type ceil64,@function +ceil64: + .param f64 + .result f64 + f64.ceil $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end8: + .size ceil64, .Lfunc_end8-ceil64 + + .globl floor64 + .type floor64,@function +floor64: + .param f64 + .result f64 + f64.floor $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end9: + .size floor64, .Lfunc_end9-floor64 + + .globl trunc64 + .type trunc64,@function +trunc64: + .param f64 + .result f64 + f64.trunc $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end10: + .size trunc64, .Lfunc_end10-trunc64 + + .globl nearest64 + .type nearest64,@function +nearest64: + .param f64 + .result f64 + f64.nearest $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end11: + .size nearest64, .Lfunc_end11-nearest64 + + .globl nearest64_via_rint + .type nearest64_via_rint,@function +nearest64_via_rint: + .param f64 + .result f64 + f64.nearest $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end12: + .size nearest64_via_rint, .Lfunc_end12-nearest64_via_rint + + .globl fmin64 + .type fmin64,@function +fmin64: + .param f64 + .result f64 + f64.const $push0=, 0x0p0 + f64.min $push1=, $0, $pop0 + return $pop1 + .endfunc +.Lfunc_end13: + .size fmin64, .Lfunc_end13-fmin64 + + .globl fmax64 + .type fmax64,@function +fmax64: + .param f64 + .result f64 + f64.const $push0=, 0x0p0 + f64.max $push1=, $0, $pop0 + return $pop1 + .endfunc +.Lfunc_end14: + .size fmax64, .Lfunc_end14-fmax64 + + .globl fma64 + .type fma64,@function +fma64: + .param f64, f64, f64 + .result f64 + f64.call $push0=, fma@FUNCTION, $0, $1, $2 + return $pop0 + .endfunc +.Lfunc_end15: + .size fma64, .Lfunc_end15-fma64 + + diff --git a/src/binaryen/test/llvm_autogenerated/f64.wast b/src/binaryen/test/llvm_autogenerated/f64.wast new file mode 100644 index 0000000000..50ad8aa540 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/f64.wast @@ -0,0 +1,178 @@ +(module + (type $FUNCSIG$dddd (func (param f64 f64 f64) (result f64))) + (import "env" "fma" (func $fma (param f64 f64 f64) (result f64))) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "fadd64" (func $fadd64)) + (export "fsub64" (func $fsub64)) + (export "fmul64" (func $fmul64)) + (export "fdiv64" (func $fdiv64)) + (export "fabs64" (func $fabs64)) + (export "fneg64" (func $fneg64)) + (export "copysign64" (func $copysign64)) + (export "sqrt64" (func $sqrt64)) + (export "ceil64" (func $ceil64)) + (export "floor64" (func $floor64)) + (export "trunc64" (func $trunc64)) + (export "nearest64" (func $nearest64)) + (export "nearest64_via_rint" (func $nearest64_via_rint)) + (export "fmin64" (func $fmin64)) + (export "fmax64" (func $fmax64)) + (export "fma64" (func $fma64)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $fadd64 (; 1 ;) (param $0 f64) (param $1 f64) (result f64) + (return + (f64.add + (get_local $0) + (get_local $1) + ) + ) + ) + (func $fsub64 (; 2 ;) (param $0 f64) (param $1 f64) (result f64) + (return + (f64.sub + (get_local $0) + (get_local $1) + ) + ) + ) + (func $fmul64 (; 3 ;) (param $0 f64) (param $1 f64) (result f64) + (return + (f64.mul + (get_local $0) + (get_local $1) + ) + ) + ) + (func $fdiv64 (; 4 ;) (param $0 f64) (param $1 f64) (result f64) + (return + (f64.div + (get_local $0) + (get_local $1) + ) + ) + ) + (func $fabs64 (; 5 ;) (param $0 f64) (result f64) + (return + (f64.abs + (get_local $0) + ) + ) + ) + (func $fneg64 (; 6 ;) (param $0 f64) (result f64) + (return + (f64.neg + (get_local $0) + ) + ) + ) + (func $copysign64 (; 7 ;) (param $0 f64) (param $1 f64) (result f64) + (return + (f64.copysign + (get_local $0) + (get_local $1) + ) + ) + ) + (func $sqrt64 (; 8 ;) (param $0 f64) (result f64) + (return + (f64.sqrt + (get_local $0) + ) + ) + ) + (func $ceil64 (; 9 ;) (param $0 f64) (result f64) + (return + (f64.ceil + (get_local $0) + ) + ) + ) + (func $floor64 (; 10 ;) (param $0 f64) (result f64) + (return + (f64.floor + (get_local $0) + ) + ) + ) + (func $trunc64 (; 11 ;) (param $0 f64) (result f64) + (return + (f64.trunc + (get_local $0) + ) + ) + ) + (func $nearest64 (; 12 ;) (param $0 f64) (result f64) + (return + (f64.nearest + (get_local $0) + ) + ) + ) + (func $nearest64_via_rint (; 13 ;) (param $0 f64) (result f64) + (return + (f64.nearest + (get_local $0) + ) + ) + ) + (func $fmin64 (; 14 ;) (param $0 f64) (result f64) + (return + (f64.min + (get_local $0) + (f64.const 0) + ) + ) + ) + (func $fmax64 (; 15 ;) (param $0 f64) (result f64) + (return + (f64.max + (get_local $0) + (f64.const 0) + ) + ) + ) + (func $fma64 (; 16 ;) (param $0 f64) (param $1 f64) (param $2 f64) (result f64) + (return + (call $fma + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (func $stackSave (; 17 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 18 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 19 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/fast-isel-noreg.s b/src/binaryen/test/llvm_autogenerated/fast-isel-noreg.s new file mode 100644 index 0000000000..1cf0dbbc68 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/fast-isel-noreg.s @@ -0,0 +1,45 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/fast-isel-noreg.ll" + .hidden a + .globl a + .type a,@function +a: + .result i32 + i32.const $push0=, 0 + return $pop0 + .endfunc +.Lfunc_end0: + .size a, .Lfunc_end0-a + + .hidden b + .globl b + .type b,@function +b: + .result i32 + block + i32.const $push0=, 1 + br_if 0, $pop0 + unreachable +.LBB1_2: + end_block + i32.const $push1=, 0 + return $pop1 + .endfunc +.Lfunc_end1: + .size b, .Lfunc_end1-b + + .hidden c + .globl c + .type c,@function +c: + .result i32 + i32.const $push1=, 0 + i32.const $push2=, 0 + i32.store 0($pop1), $pop2 + i32.const $push0=, 0 + return $pop0 + .endfunc +.Lfunc_end2: + .size c, .Lfunc_end2-c + + diff --git a/src/binaryen/test/llvm_autogenerated/fast-isel-noreg.wast b/src/binaryen/test/llvm_autogenerated/fast-isel-noreg.wast new file mode 100644 index 0000000000..2814ca5766 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/fast-isel-noreg.wast @@ -0,0 +1,67 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "a" (func $a)) + (export "b" (func $b)) + (export "c" (func $c)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $a (; 0 ;) (result i32) + (return + (i32.const 0) + ) + ) + (func $b (; 1 ;) (result i32) + (block $label$0 + (br_if $label$0 + (i32.const 1) + ) + (unreachable) + ) + (return + (i32.const 0) + ) + ) + (func $c (; 2 ;) (result i32) + (i32.store + (i32.const 0) + (i32.const 0) + ) + (return + (i32.const 0) + ) + ) + (func $stackSave (; 3 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 4 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 5 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/fast-isel.s b/src/binaryen/test/llvm_autogenerated/fast-isel.s new file mode 100644 index 0000000000..f085020383 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/fast-isel.s @@ -0,0 +1,61 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/fast-isel.ll" + .globl immediate_f32 + .type immediate_f32,@function +immediate_f32: + .result f32 + f32.const $push0=, 0x1.4p1 + .endfunc +.Lfunc_end0: + .size immediate_f32, .Lfunc_end0-immediate_f32 + + .globl immediate_f64 + .type immediate_f64,@function +immediate_f64: + .result f64 + f64.const $push0=, 0x1.4p1 + .endfunc +.Lfunc_end1: + .size immediate_f64, .Lfunc_end1-immediate_f64 + + .globl bitcast_i32_f32 + .type bitcast_i32_f32,@function +bitcast_i32_f32: + .param f32 + .result i32 + i32.reinterpret/f32 $push0=, $0 + .endfunc +.Lfunc_end2: + .size bitcast_i32_f32, .Lfunc_end2-bitcast_i32_f32 + + .globl bitcast_f32_i32 + .type bitcast_f32_i32,@function +bitcast_f32_i32: + .param i32 + .result f32 + f32.reinterpret/i32 $push0=, $0 + .endfunc +.Lfunc_end3: + .size bitcast_f32_i32, .Lfunc_end3-bitcast_f32_i32 + + .globl bitcast_i64_f64 + .type bitcast_i64_f64,@function +bitcast_i64_f64: + .param f64 + .result i64 + i64.reinterpret/f64 $push0=, $0 + .endfunc +.Lfunc_end4: + .size bitcast_i64_f64, .Lfunc_end4-bitcast_i64_f64 + + .globl bitcast_f64_i64 + .type bitcast_f64_i64,@function +bitcast_f64_i64: + .param i64 + .result f64 + f64.reinterpret/i64 $push0=, $0 + .endfunc +.Lfunc_end5: + .size bitcast_f64_i64, .Lfunc_end5-bitcast_f64_i64 + + diff --git a/src/binaryen/test/llvm_autogenerated/fast-isel.wast b/src/binaryen/test/llvm_autogenerated/fast-isel.wast new file mode 100644 index 0000000000..efe4e1ffc2 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/fast-isel.wast @@ -0,0 +1,71 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "immediate_f32" (func $immediate_f32)) + (export "immediate_f64" (func $immediate_f64)) + (export "bitcast_i32_f32" (func $bitcast_i32_f32)) + (export "bitcast_f32_i32" (func $bitcast_f32_i32)) + (export "bitcast_i64_f64" (func $bitcast_i64_f64)) + (export "bitcast_f64_i64" (func $bitcast_f64_i64)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $immediate_f32 (; 0 ;) (result f32) + (f32.const 2.5) + ) + (func $immediate_f64 (; 1 ;) (result f64) + (f64.const 2.5) + ) + (func $bitcast_i32_f32 (; 2 ;) (param $0 f32) (result i32) + (i32.reinterpret/f32 + (get_local $0) + ) + ) + (func $bitcast_f32_i32 (; 3 ;) (param $0 i32) (result f32) + (f32.reinterpret/i32 + (get_local $0) + ) + ) + (func $bitcast_i64_f64 (; 4 ;) (param $0 f64) (result i64) + (i64.reinterpret/f64 + (get_local $0) + ) + ) + (func $bitcast_f64_i64 (; 5 ;) (param $0 i64) (result f64) + (f64.reinterpret/i64 + (get_local $0) + ) + ) + (func $stackSave (; 6 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 7 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 8 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/frem.s b/src/binaryen/test/llvm_autogenerated/frem.s new file mode 100644 index 0000000000..74d18d1c62 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/frem.s @@ -0,0 +1,25 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/frem.ll" + .globl frem32 + .type frem32,@function +frem32: + .param f32, f32 + .result f32 + f32.call $push0=, fmodf@FUNCTION, $0, $1 + return $pop0 + .endfunc +.Lfunc_end0: + .size frem32, .Lfunc_end0-frem32 + + .globl frem64 + .type frem64,@function +frem64: + .param f64, f64 + .result f64 + f64.call $push0=, fmod@FUNCTION, $0, $1 + return $pop0 + .endfunc +.Lfunc_end1: + .size frem64, .Lfunc_end1-frem64 + + diff --git a/src/binaryen/test/llvm_autogenerated/frem.wast b/src/binaryen/test/llvm_autogenerated/frem.wast new file mode 100644 index 0000000000..75c89b6207 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/frem.wast @@ -0,0 +1,61 @@ +(module + (type $FUNCSIG$ddd (func (param f64 f64) (result f64))) + (type $FUNCSIG$fff (func (param f32 f32) (result f32))) + (import "env" "fmod" (func $fmod (param f64 f64) (result f64))) + (import "env" "fmodf" (func $fmodf (param f32 f32) (result f32))) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "frem32" (func $frem32)) + (export "frem64" (func $frem64)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $frem32 (; 2 ;) (param $0 f32) (param $1 f32) (result f32) + (return + (call $fmodf + (get_local $0) + (get_local $1) + ) + ) + ) + (func $frem64 (; 3 ;) (param $0 f64) (param $1 f64) (result f64) + (return + (call $fmod + (get_local $0) + (get_local $1) + ) + ) + ) + (func $stackSave (; 4 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 5 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 6 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/func.s b/src/binaryen/test/llvm_autogenerated/func.s new file mode 100644 index 0000000000..ec8cbedfc3 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/func.s @@ -0,0 +1,70 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/func.ll" + .globl f0 + .type f0,@function +f0: + return + .endfunc +.Lfunc_end0: + .size f0, .Lfunc_end0-f0 + + .globl f1 + .type f1,@function +f1: + .result i32 + i32.const $push0=, 0 + return $pop0 + .endfunc +.Lfunc_end1: + .size f1, .Lfunc_end1-f1 + + .globl f2 + .type f2,@function +f2: + .param i32, f32 + .result i32 + i32.const $push0=, 0 + return $pop0 + .endfunc +.Lfunc_end2: + .size f2, .Lfunc_end2-f2 + + .globl f3 + .type f3,@function +f3: + .param i32, f32 + return + .endfunc +.Lfunc_end3: + .size f3, .Lfunc_end3-f3 + + .globl f4 + .type f4,@function +f4: + .param i32 + .result i32 + block + i32.const $push2=, 1 + i32.and $push0=, $0, $pop2 + i32.eqz $push4=, $pop0 + br_if 0, $pop4 + i32.const $push1=, 0 + return $pop1 +.LBB4_2: + end_block + i32.const $push3=, 1 + return $pop3 + .endfunc +.Lfunc_end4: + .size f4, .Lfunc_end4-f4 + + .globl f5 + .type f5,@function +f5: + .result f32 + unreachable + .endfunc +.Lfunc_end5: + .size f5, .Lfunc_end5-f5 + + diff --git a/src/binaryen/test/llvm_autogenerated/func.wast b/src/binaryen/test/llvm_autogenerated/func.wast new file mode 100644 index 0000000000..7fbad243a8 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/func.wast @@ -0,0 +1,82 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "f0" (func $f0)) + (export "f1" (func $f1)) + (export "f2" (func $f2)) + (export "f3" (func $f3)) + (export "f4" (func $f4)) + (export "f5" (func $f5)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $f0 (; 0 ;) + (return) + ) + (func $f1 (; 1 ;) (result i32) + (return + (i32.const 0) + ) + ) + (func $f2 (; 2 ;) (param $0 i32) (param $1 f32) (result i32) + (return + (i32.const 0) + ) + ) + (func $f3 (; 3 ;) (param $0 i32) (param $1 f32) + (return) + ) + (func $f4 (; 4 ;) (param $0 i32) (result i32) + (block $label$0 + (br_if $label$0 + (i32.eqz + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + ) + (return + (i32.const 0) + ) + ) + (return + (i32.const 1) + ) + ) + (func $f5 (; 5 ;) (result f32) + (unreachable) + ) + (func $stackSave (; 6 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 7 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 8 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/global.s b/src/binaryen/test/llvm_autogenerated/global.s new file mode 100644 index 0000000000..031743e6dc --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/global.s @@ -0,0 +1,163 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/global.ll" + .globl foo + .type foo,@function +foo: + .result i32 + i32.const $push0=, 0 + i32.load $push1=, answer($pop0) + return $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + + .globl call_memcpy + .type call_memcpy,@function +call_memcpy: + .param i32, i32, i32 + .result i32 + i32.call $push0=, memcpy@FUNCTION, $0, $1, $2 + return $pop0 + .endfunc +.Lfunc_end1: + .size call_memcpy, .Lfunc_end1-call_memcpy + + .type .Lg,@object + .data + .p2align 2 +.Lg: + .int32 1337 + .size .Lg, 4 + + .type ud,@object + .p2align 2 +ud: + .skip 4 + .size ud, 4 + + .type nil,@object + .lcomm nil,4,2 + .type z,@object + .lcomm z,4,2 + .type one,@object + .p2align 2 +one: + .int32 1 + .size one, 4 + + .type answer,@object + .p2align 2 +answer: + .int32 42 + .size answer, 4 + + .type u32max,@object + .p2align 2 +u32max: + .int32 4294967295 + .size u32max, 4 + + .type ud64,@object + .p2align 3 +ud64: + .skip 8 + .size ud64, 8 + + .type nil64,@object + .lcomm nil64,8,3 + .type z64,@object + .lcomm z64,8,3 + .type twoP32,@object + .p2align 3 +twoP32: + .int64 4294967296 + .size twoP32, 8 + + .type u64max,@object + .p2align 3 +u64max: + .int64 -1 + .size u64max, 8 + + .type f32ud,@object + .p2align 2 +f32ud: + .skip 4 + .size f32ud, 4 + + .type f32nil,@object + .lcomm f32nil,4,2 + .type f32z,@object + .lcomm f32z,4,2 + .type f32nz,@object + .p2align 2 +f32nz: + .int32 2147483648 + .size f32nz, 4 + + .type f32two,@object + .p2align 2 +f32two: + .int32 1073741824 + .size f32two, 4 + + .type f64ud,@object + .p2align 3 +f64ud: + .skip 8 + .size f64ud, 8 + + .type f64nil,@object + .lcomm f64nil,8,3 + .type f64z,@object + .lcomm f64z,8,3 + .type f64nz,@object + .p2align 3 +f64nz: + .int64 -9223372036854775808 + .size f64nz, 8 + + .type f64two,@object + .p2align 3 +f64two: + .int64 4611686018427387904 + .size f64two, 8 + + .type arr,@object + .bss + .globl arr + .p2align 4 +arr: + .skip 512 + .size arr, 512 + + .type ptr,@object + .data + .globl ptr + .p2align 2 +ptr: + .int32 arr+80 + .size ptr, 4 + + .type rom,@object + .section .rodata,"a",@progbits + .globl rom + .p2align 4 +rom: + .skip 512 + .size rom, 512 + + .type array,@object +array: + .skip 8 + .size array, 8 + + .type pointer_to_array,@object + .section .data.rel.ro,"aw",@progbits + .globl pointer_to_array + .p2align 2 +pointer_to_array: + .int32 array+4 + .size pointer_to_array, 4 + + diff --git a/src/binaryen/test/llvm_autogenerated/global.wast b/src/binaryen/test/llvm_autogenerated/global.wast new file mode 100644 index 0000000000..05de7a8ef1 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/global.wast @@ -0,0 +1,71 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (import "env" "memcpy" (func $memcpy (param i32 i32 i32) (result i32))) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\b0\08\00\00") + (data (i32.const 12) "9\05\00\00") + (data (i32.const 28) "\01\00\00\00") + (data (i32.const 32) "*\00\00\00") + (data (i32.const 36) "\ff\ff\ff\ff") + (data (i32.const 64) "\00\00\00\00\01\00\00\00") + (data (i32.const 72) "\ff\ff\ff\ff\ff\ff\ff\ff") + (data (i32.const 92) "\00\00\00\80") + (data (i32.const 96) "\00\00\00@") + (data (i32.const 128) "\00\00\00\00\00\00\00\80") + (data (i32.const 136) "\00\00\00\00\00\00\00@") + (data (i32.const 656) "\e0\00\00\00") + (data (i32.const 1192) "\a4\04\00\00") + (export "foo" (func $foo)) + (export "call_memcpy" (func $call_memcpy)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $foo (; 1 ;) (result i32) + (return + (i32.load offset=32 + (i32.const 0) + ) + ) + ) + (func $call_memcpy (; 2 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (return + (call $memcpy + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (func $stackSave (; 3 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 4 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 5 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 2224, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/globl.s b/src/binaryen/test/llvm_autogenerated/globl.s new file mode 100644 index 0000000000..00b0610a69 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/globl.s @@ -0,0 +1,10 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/globl.ll" + .globl foo + .type foo,@function +foo: + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + + diff --git a/src/binaryen/test/llvm_autogenerated/globl.wast b/src/binaryen/test/llvm_autogenerated/globl.wast new file mode 100644 index 0000000000..09fa247fc2 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/globl.wast @@ -0,0 +1,42 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "foo" (func $foo)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $foo (; 0 ;) + ) + (func $stackSave (; 1 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 2 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 3 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/i128.s b/src/binaryen/test/llvm_autogenerated/i128.s new file mode 100644 index 0000000000..3789351892 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/i128.s @@ -0,0 +1,631 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/i128.ll" + .globl add128 + .type add128,@function +add128: + .param i32, i64, i64, i64, i64 + .local i64 + i64.add $push10=, $1, $3 + tee_local $push9=, $5=, $pop10 + i64.store 0($0), $pop9 + i32.const $push7=, 8 + i32.add $push8=, $0, $pop7 + i64.add $push5=, $2, $4 + i64.const $push3=, 1 + i64.lt_u $push1=, $5, $1 + i64.extend_u/i32 $push2=, $pop1 + i64.lt_u $push0=, $5, $3 + i64.select $push4=, $pop3, $pop2, $pop0 + i64.add $push6=, $pop5, $pop4 + i64.store 0($pop8), $pop6 + return + .endfunc +.Lfunc_end0: + .size add128, .Lfunc_end0-add128 + + .globl sub128 + .type sub128,@function +sub128: + .param i32, i64, i64, i64, i64 + i64.sub $push0=, $1, $3 + i64.store 0($0), $pop0 + i32.const $push5=, 8 + i32.add $push6=, $0, $pop5 + i64.sub $push1=, $2, $4 + i64.lt_u $push2=, $1, $3 + i64.extend_u/i32 $push3=, $pop2 + i64.sub $push4=, $pop1, $pop3 + i64.store 0($pop6), $pop4 + return + .endfunc +.Lfunc_end1: + .size sub128, .Lfunc_end1-sub128 + + .globl mul128 + .type mul128,@function +mul128: + .param i32, i64, i64, i64, i64 + .local i32 + i32.const $push8=, 0 + i32.const $push5=, 0 + i32.load $push6=, __stack_pointer($pop5) + i32.const $push7=, 16 + i32.sub $push14=, $pop6, $pop7 + tee_local $push13=, $5=, $pop14 + i32.store __stack_pointer($pop8), $pop13 + call __multi3@FUNCTION, $5, $1, $2, $3, $4 + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i32.const $push12=, 8 + i32.add $push2=, $5, $pop12 + i64.load $push3=, 0($pop2) + i64.store 0($pop1), $pop3 + i64.load $push4=, 0($5) + i64.store 0($0), $pop4 + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $5, $pop9 + i32.store __stack_pointer($pop11), $pop10 + return + .endfunc +.Lfunc_end2: + .size mul128, .Lfunc_end2-mul128 + + .globl sdiv128 + .type sdiv128,@function +sdiv128: + .param i32, i64, i64, i64, i64 + .local i32 + i32.const $push8=, 0 + i32.const $push5=, 0 + i32.load $push6=, __stack_pointer($pop5) + i32.const $push7=, 16 + i32.sub $push14=, $pop6, $pop7 + tee_local $push13=, $5=, $pop14 + i32.store __stack_pointer($pop8), $pop13 + call __divti3@FUNCTION, $5, $1, $2, $3, $4 + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i32.const $push12=, 8 + i32.add $push2=, $5, $pop12 + i64.load $push3=, 0($pop2) + i64.store 0($pop1), $pop3 + i64.load $push4=, 0($5) + i64.store 0($0), $pop4 + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $5, $pop9 + i32.store __stack_pointer($pop11), $pop10 + return + .endfunc +.Lfunc_end3: + .size sdiv128, .Lfunc_end3-sdiv128 + + .globl udiv128 + .type udiv128,@function +udiv128: + .param i32, i64, i64, i64, i64 + .local i32 + i32.const $push8=, 0 + i32.const $push5=, 0 + i32.load $push6=, __stack_pointer($pop5) + i32.const $push7=, 16 + i32.sub $push14=, $pop6, $pop7 + tee_local $push13=, $5=, $pop14 + i32.store __stack_pointer($pop8), $pop13 + call __udivti3@FUNCTION, $5, $1, $2, $3, $4 + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i32.const $push12=, 8 + i32.add $push2=, $5, $pop12 + i64.load $push3=, 0($pop2) + i64.store 0($pop1), $pop3 + i64.load $push4=, 0($5) + i64.store 0($0), $pop4 + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $5, $pop9 + i32.store __stack_pointer($pop11), $pop10 + return + .endfunc +.Lfunc_end4: + .size udiv128, .Lfunc_end4-udiv128 + + .globl srem128 + .type srem128,@function +srem128: + .param i32, i64, i64, i64, i64 + .local i32 + i32.const $push8=, 0 + i32.const $push5=, 0 + i32.load $push6=, __stack_pointer($pop5) + i32.const $push7=, 16 + i32.sub $push14=, $pop6, $pop7 + tee_local $push13=, $5=, $pop14 + i32.store __stack_pointer($pop8), $pop13 + call __modti3@FUNCTION, $5, $1, $2, $3, $4 + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i32.const $push12=, 8 + i32.add $push2=, $5, $pop12 + i64.load $push3=, 0($pop2) + i64.store 0($pop1), $pop3 + i64.load $push4=, 0($5) + i64.store 0($0), $pop4 + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $5, $pop9 + i32.store __stack_pointer($pop11), $pop10 + return + .endfunc +.Lfunc_end5: + .size srem128, .Lfunc_end5-srem128 + + .globl urem128 + .type urem128,@function +urem128: + .param i32, i64, i64, i64, i64 + .local i32 + i32.const $push8=, 0 + i32.const $push5=, 0 + i32.load $push6=, __stack_pointer($pop5) + i32.const $push7=, 16 + i32.sub $push14=, $pop6, $pop7 + tee_local $push13=, $5=, $pop14 + i32.store __stack_pointer($pop8), $pop13 + call __umodti3@FUNCTION, $5, $1, $2, $3, $4 + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i32.const $push12=, 8 + i32.add $push2=, $5, $pop12 + i64.load $push3=, 0($pop2) + i64.store 0($pop1), $pop3 + i64.load $push4=, 0($5) + i64.store 0($0), $pop4 + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $5, $pop9 + i32.store __stack_pointer($pop11), $pop10 + return + .endfunc +.Lfunc_end6: + .size urem128, .Lfunc_end6-urem128 + + .globl and128 + .type and128,@function +and128: + .param i32, i64, i64, i64, i64 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i64.and $push0=, $2, $4 + i64.store 0($pop2), $pop0 + i64.and $push3=, $1, $3 + i64.store 0($0), $pop3 + return + .endfunc +.Lfunc_end7: + .size and128, .Lfunc_end7-and128 + + .globl or128 + .type or128,@function +or128: + .param i32, i64, i64, i64, i64 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i64.or $push0=, $2, $4 + i64.store 0($pop2), $pop0 + i64.or $push3=, $1, $3 + i64.store 0($0), $pop3 + return + .endfunc +.Lfunc_end8: + .size or128, .Lfunc_end8-or128 + + .globl xor128 + .type xor128,@function +xor128: + .param i32, i64, i64, i64, i64 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i64.xor $push0=, $2, $4 + i64.store 0($pop2), $pop0 + i64.xor $push3=, $1, $3 + i64.store 0($0), $pop3 + return + .endfunc +.Lfunc_end9: + .size xor128, .Lfunc_end9-xor128 + + .globl shl128 + .type shl128,@function +shl128: + .param i32, i64, i64, i64, i64 + .local i32 + i32.const $push9=, 0 + i32.const $push6=, 0 + i32.load $push7=, __stack_pointer($pop6) + i32.const $push8=, 16 + i32.sub $push15=, $pop7, $pop8 + tee_local $push14=, $5=, $pop15 + i32.store __stack_pointer($pop9), $pop14 + i32.wrap/i64 $push0=, $3 + call __ashlti3@FUNCTION, $5, $1, $2, $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push13=, 8 + i32.add $push3=, $5, $pop13 + i64.load $push4=, 0($pop3) + i64.store 0($pop2), $pop4 + i64.load $push5=, 0($5) + i64.store 0($0), $pop5 + i32.const $push12=, 0 + i32.const $push10=, 16 + i32.add $push11=, $5, $pop10 + i32.store __stack_pointer($pop12), $pop11 + return + .endfunc +.Lfunc_end10: + .size shl128, .Lfunc_end10-shl128 + + .globl shr128 + .type shr128,@function +shr128: + .param i32, i64, i64, i64, i64 + .local i32 + i32.const $push9=, 0 + i32.const $push6=, 0 + i32.load $push7=, __stack_pointer($pop6) + i32.const $push8=, 16 + i32.sub $push15=, $pop7, $pop8 + tee_local $push14=, $5=, $pop15 + i32.store __stack_pointer($pop9), $pop14 + i32.wrap/i64 $push0=, $3 + call __lshrti3@FUNCTION, $5, $1, $2, $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push13=, 8 + i32.add $push3=, $5, $pop13 + i64.load $push4=, 0($pop3) + i64.store 0($pop2), $pop4 + i64.load $push5=, 0($5) + i64.store 0($0), $pop5 + i32.const $push12=, 0 + i32.const $push10=, 16 + i32.add $push11=, $5, $pop10 + i32.store __stack_pointer($pop12), $pop11 + return + .endfunc +.Lfunc_end11: + .size shr128, .Lfunc_end11-shr128 + + .globl sar128 + .type sar128,@function +sar128: + .param i32, i64, i64, i64, i64 + .local i32 + i32.const $push9=, 0 + i32.const $push6=, 0 + i32.load $push7=, __stack_pointer($pop6) + i32.const $push8=, 16 + i32.sub $push15=, $pop7, $pop8 + tee_local $push14=, $5=, $pop15 + i32.store __stack_pointer($pop9), $pop14 + i32.wrap/i64 $push0=, $3 + call __ashrti3@FUNCTION, $5, $1, $2, $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push13=, 8 + i32.add $push3=, $5, $pop13 + i64.load $push4=, 0($pop3) + i64.store 0($pop2), $pop4 + i64.load $push5=, 0($5) + i64.store 0($0), $pop5 + i32.const $push12=, 0 + i32.const $push10=, 16 + i32.add $push11=, $5, $pop10 + i32.store __stack_pointer($pop12), $pop11 + return + .endfunc +.Lfunc_end12: + .size sar128, .Lfunc_end12-sar128 + + .globl clz128 + .type clz128,@function +clz128: + .param i32, i64, i64 + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i64.const $push2=, 0 + i64.store 0($pop1), $pop2 + i64.clz $push7=, $2 + i64.clz $push4=, $1 + i64.const $push5=, 64 + i64.add $push6=, $pop4, $pop5 + i64.const $push9=, 0 + i64.ne $push3=, $2, $pop9 + i64.select $push8=, $pop7, $pop6, $pop3 + i64.store 0($0), $pop8 + return + .endfunc +.Lfunc_end13: + .size clz128, .Lfunc_end13-clz128 + + .globl clz128_zero_undef + .type clz128_zero_undef,@function +clz128_zero_undef: + .param i32, i64, i64 + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i64.const $push2=, 0 + i64.store 0($pop1), $pop2 + i64.clz $push7=, $2 + i64.clz $push4=, $1 + i64.const $push5=, 64 + i64.add $push6=, $pop4, $pop5 + i64.const $push9=, 0 + i64.ne $push3=, $2, $pop9 + i64.select $push8=, $pop7, $pop6, $pop3 + i64.store 0($0), $pop8 + return + .endfunc +.Lfunc_end14: + .size clz128_zero_undef, .Lfunc_end14-clz128_zero_undef + + .globl ctz128 + .type ctz128,@function +ctz128: + .param i32, i64, i64 + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i64.const $push2=, 0 + i64.store 0($pop1), $pop2 + i64.ctz $push7=, $1 + i64.ctz $push4=, $2 + i64.const $push5=, 64 + i64.add $push6=, $pop4, $pop5 + i64.const $push9=, 0 + i64.ne $push3=, $1, $pop9 + i64.select $push8=, $pop7, $pop6, $pop3 + i64.store 0($0), $pop8 + return + .endfunc +.Lfunc_end15: + .size ctz128, .Lfunc_end15-ctz128 + + .globl ctz128_zero_undef + .type ctz128_zero_undef,@function +ctz128_zero_undef: + .param i32, i64, i64 + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i64.const $push2=, 0 + i64.store 0($pop1), $pop2 + i64.ctz $push7=, $1 + i64.ctz $push4=, $2 + i64.const $push5=, 64 + i64.add $push6=, $pop4, $pop5 + i64.const $push9=, 0 + i64.ne $push3=, $1, $pop9 + i64.select $push8=, $pop7, $pop6, $pop3 + i64.store 0($0), $pop8 + return + .endfunc +.Lfunc_end16: + .size ctz128_zero_undef, .Lfunc_end16-ctz128_zero_undef + + .globl popcnt128 + .type popcnt128,@function +popcnt128: + .param i32, i64, i64 + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i64.const $push2=, 0 + i64.store 0($pop1), $pop2 + i64.popcnt $push4=, $1 + i64.popcnt $push3=, $2 + i64.add $push5=, $pop4, $pop3 + i64.store 0($0), $pop5 + return + .endfunc +.Lfunc_end17: + .size popcnt128, .Lfunc_end17-popcnt128 + + .globl eqz128 + .type eqz128,@function +eqz128: + .param i64, i64 + .result i32 + i64.or $push0=, $0, $1 + i64.eqz $push1=, $pop0 + return $pop1 + .endfunc +.Lfunc_end18: + .size eqz128, .Lfunc_end18-eqz128 + + .globl rotl + .type rotl,@function +rotl: + .param i32, i64, i64, i64, i64 + .local i32 + i32.const $push17=, 0 + i32.const $push14=, 0 + i32.load $push15=, __stack_pointer($pop14) + i32.const $push16=, 32 + i32.sub $push28=, $pop15, $pop16 + tee_local $push27=, $5=, $pop28 + i32.store __stack_pointer($pop17), $pop27 + i32.const $push21=, 16 + i32.add $push22=, $5, $pop21 + i32.wrap/i64 $push0=, $3 + call __ashlti3@FUNCTION, $pop22, $1, $2, $pop0 + i64.const $push1=, 128 + i64.sub $push2=, $pop1, $3 + i32.wrap/i64 $push3=, $pop2 + call __lshrti3@FUNCTION, $5, $1, $2, $pop3 + i32.const $push4=, 8 + i32.add $push5=, $0, $pop4 + i32.const $push23=, 16 + i32.add $push24=, $5, $pop23 + i32.const $push26=, 8 + i32.add $push6=, $pop24, $pop26 + i64.load $push7=, 0($pop6) + i32.const $push25=, 8 + i32.add $push8=, $5, $pop25 + i64.load $push9=, 0($pop8) + i64.or $push10=, $pop7, $pop9 + i64.store 0($pop5), $pop10 + i64.load $push11=, 16($5) + i64.load $push12=, 0($5) + i64.or $push13=, $pop11, $pop12 + i64.store 0($0), $pop13 + i32.const $push20=, 0 + i32.const $push18=, 32 + i32.add $push19=, $5, $pop18 + i32.store __stack_pointer($pop20), $pop19 + return + .endfunc +.Lfunc_end19: + .size rotl, .Lfunc_end19-rotl + + .globl masked_rotl + .type masked_rotl,@function +masked_rotl: + .param i32, i64, i64, i64, i64 + .local i32 + i32.const $push18=, 0 + i32.const $push15=, 0 + i32.load $push16=, __stack_pointer($pop15) + i32.const $push17=, 32 + i32.sub $push31=, $pop16, $pop17 + tee_local $push30=, $5=, $pop31 + i32.store __stack_pointer($pop18), $pop30 + i32.const $push22=, 16 + i32.add $push23=, $5, $pop22 + i64.const $push0=, 127 + i64.and $push29=, $3, $pop0 + tee_local $push28=, $3=, $pop29 + i32.wrap/i64 $push1=, $pop28 + call __ashlti3@FUNCTION, $pop23, $1, $2, $pop1 + i64.const $push2=, 128 + i64.sub $push3=, $pop2, $3 + i32.wrap/i64 $push4=, $pop3 + call __lshrti3@FUNCTION, $5, $1, $2, $pop4 + i32.const $push5=, 8 + i32.add $push6=, $0, $pop5 + i32.const $push24=, 16 + i32.add $push25=, $5, $pop24 + i32.const $push27=, 8 + i32.add $push7=, $pop25, $pop27 + i64.load $push8=, 0($pop7) + i32.const $push26=, 8 + i32.add $push9=, $5, $pop26 + i64.load $push10=, 0($pop9) + i64.or $push11=, $pop8, $pop10 + i64.store 0($pop6), $pop11 + i64.load $push12=, 16($5) + i64.load $push13=, 0($5) + i64.or $push14=, $pop12, $pop13 + i64.store 0($0), $pop14 + i32.const $push21=, 0 + i32.const $push19=, 32 + i32.add $push20=, $5, $pop19 + i32.store __stack_pointer($pop21), $pop20 + return + .endfunc +.Lfunc_end20: + .size masked_rotl, .Lfunc_end20-masked_rotl + + .globl rotr + .type rotr,@function +rotr: + .param i32, i64, i64, i64, i64 + .local i32 + i32.const $push17=, 0 + i32.const $push14=, 0 + i32.load $push15=, __stack_pointer($pop14) + i32.const $push16=, 32 + i32.sub $push28=, $pop15, $pop16 + tee_local $push27=, $5=, $pop28 + i32.store __stack_pointer($pop17), $pop27 + i32.const $push21=, 16 + i32.add $push22=, $5, $pop21 + i32.wrap/i64 $push0=, $3 + call __lshrti3@FUNCTION, $pop22, $1, $2, $pop0 + i64.const $push1=, 128 + i64.sub $push2=, $pop1, $3 + i32.wrap/i64 $push3=, $pop2 + call __ashlti3@FUNCTION, $5, $1, $2, $pop3 + i32.const $push4=, 8 + i32.add $push5=, $0, $pop4 + i32.const $push23=, 16 + i32.add $push24=, $5, $pop23 + i32.const $push26=, 8 + i32.add $push6=, $pop24, $pop26 + i64.load $push7=, 0($pop6) + i32.const $push25=, 8 + i32.add $push8=, $5, $pop25 + i64.load $push9=, 0($pop8) + i64.or $push10=, $pop7, $pop9 + i64.store 0($pop5), $pop10 + i64.load $push11=, 16($5) + i64.load $push12=, 0($5) + i64.or $push13=, $pop11, $pop12 + i64.store 0($0), $pop13 + i32.const $push20=, 0 + i32.const $push18=, 32 + i32.add $push19=, $5, $pop18 + i32.store __stack_pointer($pop20), $pop19 + return + .endfunc +.Lfunc_end21: + .size rotr, .Lfunc_end21-rotr + + .globl masked_rotr + .type masked_rotr,@function +masked_rotr: + .param i32, i64, i64, i64, i64 + .local i32 + i32.const $push18=, 0 + i32.const $push15=, 0 + i32.load $push16=, __stack_pointer($pop15) + i32.const $push17=, 32 + i32.sub $push31=, $pop16, $pop17 + tee_local $push30=, $5=, $pop31 + i32.store __stack_pointer($pop18), $pop30 + i32.const $push22=, 16 + i32.add $push23=, $5, $pop22 + i64.const $push0=, 127 + i64.and $push29=, $3, $pop0 + tee_local $push28=, $3=, $pop29 + i32.wrap/i64 $push1=, $pop28 + call __lshrti3@FUNCTION, $pop23, $1, $2, $pop1 + i64.const $push2=, 128 + i64.sub $push3=, $pop2, $3 + i32.wrap/i64 $push4=, $pop3 + call __ashlti3@FUNCTION, $5, $1, $2, $pop4 + i32.const $push5=, 8 + i32.add $push6=, $0, $pop5 + i32.const $push24=, 16 + i32.add $push25=, $5, $pop24 + i32.const $push27=, 8 + i32.add $push7=, $pop25, $pop27 + i64.load $push8=, 0($pop7) + i32.const $push26=, 8 + i32.add $push9=, $5, $pop26 + i64.load $push10=, 0($pop9) + i64.or $push11=, $pop8, $pop10 + i64.store 0($pop6), $pop11 + i64.load $push12=, 16($5) + i64.load $push13=, 0($5) + i64.or $push14=, $pop12, $pop13 + i64.store 0($0), $pop14 + i32.const $push21=, 0 + i32.const $push19=, 32 + i32.add $push20=, $5, $pop19 + i32.store __stack_pointer($pop21), $pop20 + return + .endfunc +.Lfunc_end22: + .size masked_rotr, .Lfunc_end22-masked_rotr + + diff --git a/src/binaryen/test/llvm_autogenerated/i128.wast b/src/binaryen/test/llvm_autogenerated/i128.wast new file mode 100644 index 0000000000..d22b3e8aaa --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/i128.wast @@ -0,0 +1,1042 @@ +(module + (type $FUNCSIG$vijji (func (param i32 i64 i64 i32))) + (type $FUNCSIG$vijjjj (func (param i32 i64 i64 i64 i64))) + (import "env" "__ashlti3" (func $__ashlti3 (param i32 i64 i64 i32))) + (import "env" "__ashrti3" (func $__ashrti3 (param i32 i64 i64 i32))) + (import "env" "__divti3" (func $__divti3 (param i32 i64 i64 i64 i64))) + (import "env" "__lshrti3" (func $__lshrti3 (param i32 i64 i64 i32))) + (import "env" "__modti3" (func $__modti3 (param i32 i64 i64 i64 i64))) + (import "env" "__multi3" (func $__multi3 (param i32 i64 i64 i64 i64))) + (import "env" "__udivti3" (func $__udivti3 (param i32 i64 i64 i64 i64))) + (import "env" "__umodti3" (func $__umodti3 (param i32 i64 i64 i64 i64))) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "add128" (func $add128)) + (export "sub128" (func $sub128)) + (export "mul128" (func $mul128)) + (export "sdiv128" (func $sdiv128)) + (export "udiv128" (func $udiv128)) + (export "srem128" (func $srem128)) + (export "urem128" (func $urem128)) + (export "and128" (func $and128)) + (export "or128" (func $or128)) + (export "xor128" (func $xor128)) + (export "shl128" (func $shl128)) + (export "shr128" (func $shr128)) + (export "sar128" (func $sar128)) + (export "clz128" (func $clz128)) + (export "clz128_zero_undef" (func $clz128_zero_undef)) + (export "ctz128" (func $ctz128)) + (export "ctz128_zero_undef" (func $ctz128_zero_undef)) + (export "popcnt128" (func $popcnt128)) + (export "eqz128" (func $eqz128)) + (export "rotl" (func $rotl)) + (export "masked_rotl" (func $masked_rotl)) + (export "rotr" (func $rotr)) + (export "masked_rotr" (func $masked_rotr)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $add128 (; 8 ;) (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) + (local $5 i64) + (i64.store + (get_local $0) + (tee_local $5 + (i64.add + (get_local $1) + (get_local $3) + ) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.add + (i64.add + (get_local $2) + (get_local $4) + ) + (select + (i64.const 1) + (i64.extend_u/i32 + (i64.lt_u + (get_local $5) + (get_local $1) + ) + ) + (i64.lt_u + (get_local $5) + (get_local $3) + ) + ) + ) + ) + (return) + ) + (func $sub128 (; 9 ;) (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) + (i64.store + (get_local $0) + (i64.sub + (get_local $1) + (get_local $3) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.sub + (i64.sub + (get_local $2) + (get_local $4) + ) + (i64.extend_u/i32 + (i64.lt_u + (get_local $1) + (get_local $3) + ) + ) + ) + ) + (return) + ) + (func $mul128 (; 10 ;) (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) + (local $5 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $5 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 16) + ) + ) + ) + (call $__multi3 + (get_local $5) + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.load + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + (i64.store + (get_local $0) + (i64.load + (get_local $5) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + (return) + ) + (func $sdiv128 (; 11 ;) (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) + (local $5 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $5 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 16) + ) + ) + ) + (call $__divti3 + (get_local $5) + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.load + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + (i64.store + (get_local $0) + (i64.load + (get_local $5) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + (return) + ) + (func $udiv128 (; 12 ;) (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) + (local $5 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $5 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 16) + ) + ) + ) + (call $__udivti3 + (get_local $5) + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.load + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + (i64.store + (get_local $0) + (i64.load + (get_local $5) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + (return) + ) + (func $srem128 (; 13 ;) (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) + (local $5 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $5 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 16) + ) + ) + ) + (call $__modti3 + (get_local $5) + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.load + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + (i64.store + (get_local $0) + (i64.load + (get_local $5) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + (return) + ) + (func $urem128 (; 14 ;) (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) + (local $5 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $5 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 16) + ) + ) + ) + (call $__umodti3 + (get_local $5) + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.load + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + (i64.store + (get_local $0) + (i64.load + (get_local $5) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + (return) + ) + (func $and128 (; 15 ;) (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.and + (get_local $2) + (get_local $4) + ) + ) + (i64.store + (get_local $0) + (i64.and + (get_local $1) + (get_local $3) + ) + ) + (return) + ) + (func $or128 (; 16 ;) (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.or + (get_local $2) + (get_local $4) + ) + ) + (i64.store + (get_local $0) + (i64.or + (get_local $1) + (get_local $3) + ) + ) + (return) + ) + (func $xor128 (; 17 ;) (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.xor + (get_local $2) + (get_local $4) + ) + ) + (i64.store + (get_local $0) + (i64.xor + (get_local $1) + (get_local $3) + ) + ) + (return) + ) + (func $shl128 (; 18 ;) (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) + (local $5 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $5 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 16) + ) + ) + ) + (call $__ashlti3 + (get_local $5) + (get_local $1) + (get_local $2) + (i32.wrap/i64 + (get_local $3) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.load + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + (i64.store + (get_local $0) + (i64.load + (get_local $5) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + (return) + ) + (func $shr128 (; 19 ;) (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) + (local $5 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $5 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 16) + ) + ) + ) + (call $__lshrti3 + (get_local $5) + (get_local $1) + (get_local $2) + (i32.wrap/i64 + (get_local $3) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.load + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + (i64.store + (get_local $0) + (i64.load + (get_local $5) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + (return) + ) + (func $sar128 (; 20 ;) (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) + (local $5 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $5 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 16) + ) + ) + ) + (call $__ashrti3 + (get_local $5) + (get_local $1) + (get_local $2) + (i32.wrap/i64 + (get_local $3) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.load + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + (i64.store + (get_local $0) + (i64.load + (get_local $5) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + (return) + ) + (func $clz128 (; 21 ;) (param $0 i32) (param $1 i64) (param $2 i64) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.const 0) + ) + (i64.store + (get_local $0) + (select + (i64.clz + (get_local $2) + ) + (i64.add + (i64.clz + (get_local $1) + ) + (i64.const 64) + ) + (i64.ne + (get_local $2) + (i64.const 0) + ) + ) + ) + (return) + ) + (func $clz128_zero_undef (; 22 ;) (param $0 i32) (param $1 i64) (param $2 i64) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.const 0) + ) + (i64.store + (get_local $0) + (select + (i64.clz + (get_local $2) + ) + (i64.add + (i64.clz + (get_local $1) + ) + (i64.const 64) + ) + (i64.ne + (get_local $2) + (i64.const 0) + ) + ) + ) + (return) + ) + (func $ctz128 (; 23 ;) (param $0 i32) (param $1 i64) (param $2 i64) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.const 0) + ) + (i64.store + (get_local $0) + (select + (i64.ctz + (get_local $1) + ) + (i64.add + (i64.ctz + (get_local $2) + ) + (i64.const 64) + ) + (i64.ne + (get_local $1) + (i64.const 0) + ) + ) + ) + (return) + ) + (func $ctz128_zero_undef (; 24 ;) (param $0 i32) (param $1 i64) (param $2 i64) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.const 0) + ) + (i64.store + (get_local $0) + (select + (i64.ctz + (get_local $1) + ) + (i64.add + (i64.ctz + (get_local $2) + ) + (i64.const 64) + ) + (i64.ne + (get_local $1) + (i64.const 0) + ) + ) + ) + (return) + ) + (func $popcnt128 (; 25 ;) (param $0 i32) (param $1 i64) (param $2 i64) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.const 0) + ) + (i64.store + (get_local $0) + (i64.add + (i64.popcnt + (get_local $1) + ) + (i64.popcnt + (get_local $2) + ) + ) + ) + (return) + ) + (func $eqz128 (; 26 ;) (param $0 i64) (param $1 i64) (result i32) + (return + (i64.eqz + (i64.or + (get_local $0) + (get_local $1) + ) + ) + ) + ) + (func $rotl (; 27 ;) (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) + (local $5 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $5 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 32) + ) + ) + ) + (call $__ashlti3 + (i32.add + (get_local $5) + (i32.const 16) + ) + (get_local $1) + (get_local $2) + (i32.wrap/i64 + (get_local $3) + ) + ) + (call $__lshrti3 + (get_local $5) + (get_local $1) + (get_local $2) + (i32.wrap/i64 + (i64.sub + (i64.const 128) + (get_local $3) + ) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.or + (i64.load + (i32.add + (i32.add + (get_local $5) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + ) + (i64.store + (get_local $0) + (i64.or + (i64.load offset=16 + (get_local $5) + ) + (i64.load + (get_local $5) + ) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $5) + (i32.const 32) + ) + ) + (return) + ) + (func $masked_rotl (; 28 ;) (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) + (local $5 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $5 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 32) + ) + ) + ) + (call $__ashlti3 + (i32.add + (get_local $5) + (i32.const 16) + ) + (get_local $1) + (get_local $2) + (i32.wrap/i64 + (tee_local $3 + (i64.and + (get_local $3) + (i64.const 127) + ) + ) + ) + ) + (call $__lshrti3 + (get_local $5) + (get_local $1) + (get_local $2) + (i32.wrap/i64 + (i64.sub + (i64.const 128) + (get_local $3) + ) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.or + (i64.load + (i32.add + (i32.add + (get_local $5) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + ) + (i64.store + (get_local $0) + (i64.or + (i64.load offset=16 + (get_local $5) + ) + (i64.load + (get_local $5) + ) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $5) + (i32.const 32) + ) + ) + (return) + ) + (func $rotr (; 29 ;) (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) + (local $5 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $5 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 32) + ) + ) + ) + (call $__lshrti3 + (i32.add + (get_local $5) + (i32.const 16) + ) + (get_local $1) + (get_local $2) + (i32.wrap/i64 + (get_local $3) + ) + ) + (call $__ashlti3 + (get_local $5) + (get_local $1) + (get_local $2) + (i32.wrap/i64 + (i64.sub + (i64.const 128) + (get_local $3) + ) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.or + (i64.load + (i32.add + (i32.add + (get_local $5) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + ) + (i64.store + (get_local $0) + (i64.or + (i64.load offset=16 + (get_local $5) + ) + (i64.load + (get_local $5) + ) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $5) + (i32.const 32) + ) + ) + (return) + ) + (func $masked_rotr (; 30 ;) (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) + (local $5 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $5 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 32) + ) + ) + ) + (call $__lshrti3 + (i32.add + (get_local $5) + (i32.const 16) + ) + (get_local $1) + (get_local $2) + (i32.wrap/i64 + (tee_local $3 + (i64.and + (get_local $3) + (i64.const 127) + ) + ) + ) + ) + (call $__ashlti3 + (get_local $5) + (get_local $1) + (get_local $2) + (i32.wrap/i64 + (i64.sub + (i64.const 128) + (get_local $3) + ) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.or + (i64.load + (i32.add + (i32.add + (get_local $5) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + ) + (i64.store + (get_local $0) + (i64.or + (i64.load offset=16 + (get_local $5) + ) + (i64.load + (get_local $5) + ) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $5) + (i32.const 32) + ) + ) + (return) + ) + (func $stackSave (; 31 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 32 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 33 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/i32-load-store-alignment.s b/src/binaryen/test/llvm_autogenerated/i32-load-store-alignment.s new file mode 100644 index 0000000000..2900ea5380 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/i32-load-store-alignment.s @@ -0,0 +1,213 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/i32-load-store-alignment.ll" + .globl ldi32_a1 + .type ldi32_a1,@function +ldi32_a1: + .param i32 + .result i32 + i32.load $push0=, 0($0):p2align=0 + return $pop0 + .endfunc +.Lfunc_end0: + .size ldi32_a1, .Lfunc_end0-ldi32_a1 + + .globl ldi32_a2 + .type ldi32_a2,@function +ldi32_a2: + .param i32 + .result i32 + i32.load $push0=, 0($0):p2align=1 + return $pop0 + .endfunc +.Lfunc_end1: + .size ldi32_a2, .Lfunc_end1-ldi32_a2 + + .globl ldi32_a4 + .type ldi32_a4,@function +ldi32_a4: + .param i32 + .result i32 + i32.load $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end2: + .size ldi32_a4, .Lfunc_end2-ldi32_a4 + + .globl ldi32 + .type ldi32,@function +ldi32: + .param i32 + .result i32 + i32.load $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end3: + .size ldi32, .Lfunc_end3-ldi32 + + .globl ldi32_a8 + .type ldi32_a8,@function +ldi32_a8: + .param i32 + .result i32 + i32.load $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end4: + .size ldi32_a8, .Lfunc_end4-ldi32_a8 + + .globl ldi8_a1 + .type ldi8_a1,@function +ldi8_a1: + .param i32 + .result i32 + i32.load8_u $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end5: + .size ldi8_a1, .Lfunc_end5-ldi8_a1 + + .globl ldi8_a2 + .type ldi8_a2,@function +ldi8_a2: + .param i32 + .result i32 + i32.load8_u $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end6: + .size ldi8_a2, .Lfunc_end6-ldi8_a2 + + .globl ldi16_a1 + .type ldi16_a1,@function +ldi16_a1: + .param i32 + .result i32 + i32.load16_u $push0=, 0($0):p2align=0 + return $pop0 + .endfunc +.Lfunc_end7: + .size ldi16_a1, .Lfunc_end7-ldi16_a1 + + .globl ldi16_a2 + .type ldi16_a2,@function +ldi16_a2: + .param i32 + .result i32 + i32.load16_u $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end8: + .size ldi16_a2, .Lfunc_end8-ldi16_a2 + + .globl ldi16_a4 + .type ldi16_a4,@function +ldi16_a4: + .param i32 + .result i32 + i32.load16_u $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end9: + .size ldi16_a4, .Lfunc_end9-ldi16_a4 + + .globl sti32_a1 + .type sti32_a1,@function +sti32_a1: + .param i32, i32 + i32.store 0($0):p2align=0, $1 + return + .endfunc +.Lfunc_end10: + .size sti32_a1, .Lfunc_end10-sti32_a1 + + .globl sti32_a2 + .type sti32_a2,@function +sti32_a2: + .param i32, i32 + i32.store 0($0):p2align=1, $1 + return + .endfunc +.Lfunc_end11: + .size sti32_a2, .Lfunc_end11-sti32_a2 + + .globl sti32_a4 + .type sti32_a4,@function +sti32_a4: + .param i32, i32 + i32.store 0($0), $1 + return + .endfunc +.Lfunc_end12: + .size sti32_a4, .Lfunc_end12-sti32_a4 + + .globl sti32 + .type sti32,@function +sti32: + .param i32, i32 + i32.store 0($0), $1 + return + .endfunc +.Lfunc_end13: + .size sti32, .Lfunc_end13-sti32 + + .globl sti32_a8 + .type sti32_a8,@function +sti32_a8: + .param i32, i32 + i32.store 0($0), $1 + return + .endfunc +.Lfunc_end14: + .size sti32_a8, .Lfunc_end14-sti32_a8 + + .globl sti8_a1 + .type sti8_a1,@function +sti8_a1: + .param i32, i32 + i32.store8 0($0), $1 + return + .endfunc +.Lfunc_end15: + .size sti8_a1, .Lfunc_end15-sti8_a1 + + .globl sti8_a2 + .type sti8_a2,@function +sti8_a2: + .param i32, i32 + i32.store8 0($0), $1 + return + .endfunc +.Lfunc_end16: + .size sti8_a2, .Lfunc_end16-sti8_a2 + + .globl sti16_a1 + .type sti16_a1,@function +sti16_a1: + .param i32, i32 + i32.store16 0($0):p2align=0, $1 + return + .endfunc +.Lfunc_end17: + .size sti16_a1, .Lfunc_end17-sti16_a1 + + .globl sti16_a2 + .type sti16_a2,@function +sti16_a2: + .param i32, i32 + i32.store16 0($0), $1 + return + .endfunc +.Lfunc_end18: + .size sti16_a2, .Lfunc_end18-sti16_a2 + + .globl sti16_a4 + .type sti16_a4,@function +sti16_a4: + .param i32, i32 + i32.store16 0($0), $1 + return + .endfunc +.Lfunc_end19: + .size sti16_a4, .Lfunc_end19-sti16_a4 + + diff --git a/src/binaryen/test/llvm_autogenerated/i32-load-store-alignment.wast b/src/binaryen/test/llvm_autogenerated/i32-load-store-alignment.wast new file mode 100644 index 0000000000..a486171326 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/i32-load-store-alignment.wast @@ -0,0 +1,199 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "ldi32_a1" (func $ldi32_a1)) + (export "ldi32_a2" (func $ldi32_a2)) + (export "ldi32_a4" (func $ldi32_a4)) + (export "ldi32" (func $ldi32)) + (export "ldi32_a8" (func $ldi32_a8)) + (export "ldi8_a1" (func $ldi8_a1)) + (export "ldi8_a2" (func $ldi8_a2)) + (export "ldi16_a1" (func $ldi16_a1)) + (export "ldi16_a2" (func $ldi16_a2)) + (export "ldi16_a4" (func $ldi16_a4)) + (export "sti32_a1" (func $sti32_a1)) + (export "sti32_a2" (func $sti32_a2)) + (export "sti32_a4" (func $sti32_a4)) + (export "sti32" (func $sti32)) + (export "sti32_a8" (func $sti32_a8)) + (export "sti8_a1" (func $sti8_a1)) + (export "sti8_a2" (func $sti8_a2)) + (export "sti16_a1" (func $sti16_a1)) + (export "sti16_a2" (func $sti16_a2)) + (export "sti16_a4" (func $sti16_a4)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $ldi32_a1 (; 0 ;) (param $0 i32) (result i32) + (return + (i32.load align=1 + (get_local $0) + ) + ) + ) + (func $ldi32_a2 (; 1 ;) (param $0 i32) (result i32) + (return + (i32.load align=2 + (get_local $0) + ) + ) + ) + (func $ldi32_a4 (; 2 ;) (param $0 i32) (result i32) + (return + (i32.load + (get_local $0) + ) + ) + ) + (func $ldi32 (; 3 ;) (param $0 i32) (result i32) + (return + (i32.load + (get_local $0) + ) + ) + ) + (func $ldi32_a8 (; 4 ;) (param $0 i32) (result i32) + (return + (i32.load + (get_local $0) + ) + ) + ) + (func $ldi8_a1 (; 5 ;) (param $0 i32) (result i32) + (return + (i32.load8_u + (get_local $0) + ) + ) + ) + (func $ldi8_a2 (; 6 ;) (param $0 i32) (result i32) + (return + (i32.load8_u + (get_local $0) + ) + ) + ) + (func $ldi16_a1 (; 7 ;) (param $0 i32) (result i32) + (return + (i32.load16_u align=1 + (get_local $0) + ) + ) + ) + (func $ldi16_a2 (; 8 ;) (param $0 i32) (result i32) + (return + (i32.load16_u + (get_local $0) + ) + ) + ) + (func $ldi16_a4 (; 9 ;) (param $0 i32) (result i32) + (return + (i32.load16_u + (get_local $0) + ) + ) + ) + (func $sti32_a1 (; 10 ;) (param $0 i32) (param $1 i32) + (i32.store align=1 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti32_a2 (; 11 ;) (param $0 i32) (param $1 i32) + (i32.store align=2 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti32_a4 (; 12 ;) (param $0 i32) (param $1 i32) + (i32.store + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti32 (; 13 ;) (param $0 i32) (param $1 i32) + (i32.store + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti32_a8 (; 14 ;) (param $0 i32) (param $1 i32) + (i32.store + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti8_a1 (; 15 ;) (param $0 i32) (param $1 i32) + (i32.store8 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti8_a2 (; 16 ;) (param $0 i32) (param $1 i32) + (i32.store8 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti16_a1 (; 17 ;) (param $0 i32) (param $1 i32) + (i32.store16 align=1 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti16_a2 (; 18 ;) (param $0 i32) (param $1 i32) + (i32.store16 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti16_a4 (; 19 ;) (param $0 i32) (param $1 i32) + (i32.store16 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $stackSave (; 20 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 21 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 22 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/i32.s b/src/binaryen/test/llvm_autogenerated/i32.s new file mode 100644 index 0000000000..55e77cc27b --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/i32.s @@ -0,0 +1,256 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/i32.ll" + .globl add32 + .type add32,@function +add32: + .param i32, i32 + .result i32 + i32.add $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end0: + .size add32, .Lfunc_end0-add32 + + .globl sub32 + .type sub32,@function +sub32: + .param i32, i32 + .result i32 + i32.sub $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end1: + .size sub32, .Lfunc_end1-sub32 + + .globl mul32 + .type mul32,@function +mul32: + .param i32, i32 + .result i32 + i32.mul $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end2: + .size mul32, .Lfunc_end2-mul32 + + .globl sdiv32 + .type sdiv32,@function +sdiv32: + .param i32, i32 + .result i32 + i32.div_s $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end3: + .size sdiv32, .Lfunc_end3-sdiv32 + + .globl udiv32 + .type udiv32,@function +udiv32: + .param i32, i32 + .result i32 + i32.div_u $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end4: + .size udiv32, .Lfunc_end4-udiv32 + + .globl srem32 + .type srem32,@function +srem32: + .param i32, i32 + .result i32 + i32.rem_s $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end5: + .size srem32, .Lfunc_end5-srem32 + + .globl urem32 + .type urem32,@function +urem32: + .param i32, i32 + .result i32 + i32.rem_u $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end6: + .size urem32, .Lfunc_end6-urem32 + + .globl and32 + .type and32,@function +and32: + .param i32, i32 + .result i32 + i32.and $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end7: + .size and32, .Lfunc_end7-and32 + + .globl or32 + .type or32,@function +or32: + .param i32, i32 + .result i32 + i32.or $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end8: + .size or32, .Lfunc_end8-or32 + + .globl xor32 + .type xor32,@function +xor32: + .param i32, i32 + .result i32 + i32.xor $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end9: + .size xor32, .Lfunc_end9-xor32 + + .globl shl32 + .type shl32,@function +shl32: + .param i32, i32 + .result i32 + i32.shl $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end10: + .size shl32, .Lfunc_end10-shl32 + + .globl shr32 + .type shr32,@function +shr32: + .param i32, i32 + .result i32 + i32.shr_u $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end11: + .size shr32, .Lfunc_end11-shr32 + + .globl sar32 + .type sar32,@function +sar32: + .param i32, i32 + .result i32 + i32.shr_s $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end12: + .size sar32, .Lfunc_end12-sar32 + + .globl clz32 + .type clz32,@function +clz32: + .param i32 + .result i32 + i32.clz $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end13: + .size clz32, .Lfunc_end13-clz32 + + .globl clz32_zero_undef + .type clz32_zero_undef,@function +clz32_zero_undef: + .param i32 + .result i32 + i32.clz $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end14: + .size clz32_zero_undef, .Lfunc_end14-clz32_zero_undef + + .globl ctz32 + .type ctz32,@function +ctz32: + .param i32 + .result i32 + i32.ctz $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end15: + .size ctz32, .Lfunc_end15-ctz32 + + .globl ctz32_zero_undef + .type ctz32_zero_undef,@function +ctz32_zero_undef: + .param i32 + .result i32 + i32.ctz $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end16: + .size ctz32_zero_undef, .Lfunc_end16-ctz32_zero_undef + + .globl popcnt32 + .type popcnt32,@function +popcnt32: + .param i32 + .result i32 + i32.popcnt $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end17: + .size popcnt32, .Lfunc_end17-popcnt32 + + .globl eqz32 + .type eqz32,@function +eqz32: + .param i32 + .result i32 + i32.eqz $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end18: + .size eqz32, .Lfunc_end18-eqz32 + + .globl rotl + .type rotl,@function +rotl: + .param i32, i32 + .result i32 + i32.rotl $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end19: + .size rotl, .Lfunc_end19-rotl + + .globl masked_rotl + .type masked_rotl,@function +masked_rotl: + .param i32, i32 + .result i32 + i32.rotl $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end20: + .size masked_rotl, .Lfunc_end20-masked_rotl + + .globl rotr + .type rotr,@function +rotr: + .param i32, i32 + .result i32 + i32.rotr $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end21: + .size rotr, .Lfunc_end21-rotr + + .globl masked_rotr + .type masked_rotr,@function +masked_rotr: + .param i32, i32 + .result i32 + i32.rotr $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end22: + .size masked_rotr, .Lfunc_end22-masked_rotr + + diff --git a/src/binaryen/test/llvm_autogenerated/i32.wast b/src/binaryen/test/llvm_autogenerated/i32.wast new file mode 100644 index 0000000000..63dc81ada8 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/i32.wast @@ -0,0 +1,240 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "add32" (func $add32)) + (export "sub32" (func $sub32)) + (export "mul32" (func $mul32)) + (export "sdiv32" (func $sdiv32)) + (export "udiv32" (func $udiv32)) + (export "srem32" (func $srem32)) + (export "urem32" (func $urem32)) + (export "and32" (func $and32)) + (export "or32" (func $or32)) + (export "xor32" (func $xor32)) + (export "shl32" (func $shl32)) + (export "shr32" (func $shr32)) + (export "sar32" (func $sar32)) + (export "clz32" (func $clz32)) + (export "clz32_zero_undef" (func $clz32_zero_undef)) + (export "ctz32" (func $ctz32)) + (export "ctz32_zero_undef" (func $ctz32_zero_undef)) + (export "popcnt32" (func $popcnt32)) + (export "eqz32" (func $eqz32)) + (export "rotl" (func $rotl)) + (export "masked_rotl" (func $masked_rotl)) + (export "rotr" (func $rotr)) + (export "masked_rotr" (func $masked_rotr)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $add32 (; 0 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.add + (get_local $0) + (get_local $1) + ) + ) + ) + (func $sub32 (; 1 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.sub + (get_local $0) + (get_local $1) + ) + ) + ) + (func $mul32 (; 2 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.mul + (get_local $0) + (get_local $1) + ) + ) + ) + (func $sdiv32 (; 3 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.div_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $udiv32 (; 4 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.div_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $srem32 (; 5 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.rem_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $urem32 (; 6 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.rem_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $and32 (; 7 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.and + (get_local $0) + (get_local $1) + ) + ) + ) + (func $or32 (; 8 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.or + (get_local $0) + (get_local $1) + ) + ) + ) + (func $xor32 (; 9 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.xor + (get_local $0) + (get_local $1) + ) + ) + ) + (func $shl32 (; 10 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.shl + (get_local $0) + (get_local $1) + ) + ) + ) + (func $shr32 (; 11 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.shr_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $sar32 (; 12 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.shr_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $clz32 (; 13 ;) (param $0 i32) (result i32) + (return + (i32.clz + (get_local $0) + ) + ) + ) + (func $clz32_zero_undef (; 14 ;) (param $0 i32) (result i32) + (return + (i32.clz + (get_local $0) + ) + ) + ) + (func $ctz32 (; 15 ;) (param $0 i32) (result i32) + (return + (i32.ctz + (get_local $0) + ) + ) + ) + (func $ctz32_zero_undef (; 16 ;) (param $0 i32) (result i32) + (return + (i32.ctz + (get_local $0) + ) + ) + ) + (func $popcnt32 (; 17 ;) (param $0 i32) (result i32) + (return + (i32.popcnt + (get_local $0) + ) + ) + ) + (func $eqz32 (; 18 ;) (param $0 i32) (result i32) + (return + (i32.eqz + (get_local $0) + ) + ) + ) + (func $rotl (; 19 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.rotl + (get_local $0) + (get_local $1) + ) + ) + ) + (func $masked_rotl (; 20 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.rotl + (get_local $0) + (get_local $1) + ) + ) + ) + (func $rotr (; 21 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.rotr + (get_local $0) + (get_local $1) + ) + ) + ) + (func $masked_rotr (; 22 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.rotr + (get_local $0) + (get_local $1) + ) + ) + ) + (func $stackSave (; 23 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 24 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 25 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/i64-load-store-alignment.s b/src/binaryen/test/llvm_autogenerated/i64-load-store-alignment.s new file mode 100644 index 0000000000..e285e63235 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/i64-load-store-alignment.s @@ -0,0 +1,318 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/i64-load-store-alignment.ll" + .globl ldi64_a1 + .type ldi64_a1,@function +ldi64_a1: + .param i32 + .result i64 + i64.load $push0=, 0($0):p2align=0 + return $pop0 + .endfunc +.Lfunc_end0: + .size ldi64_a1, .Lfunc_end0-ldi64_a1 + + .globl ldi64_a2 + .type ldi64_a2,@function +ldi64_a2: + .param i32 + .result i64 + i64.load $push0=, 0($0):p2align=1 + return $pop0 + .endfunc +.Lfunc_end1: + .size ldi64_a2, .Lfunc_end1-ldi64_a2 + + .globl ldi64_a4 + .type ldi64_a4,@function +ldi64_a4: + .param i32 + .result i64 + i64.load $push0=, 0($0):p2align=2 + return $pop0 + .endfunc +.Lfunc_end2: + .size ldi64_a4, .Lfunc_end2-ldi64_a4 + + .globl ldi64_a8 + .type ldi64_a8,@function +ldi64_a8: + .param i32 + .result i64 + i64.load $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end3: + .size ldi64_a8, .Lfunc_end3-ldi64_a8 + + .globl ldi64 + .type ldi64,@function +ldi64: + .param i32 + .result i64 + i64.load $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end4: + .size ldi64, .Lfunc_end4-ldi64 + + .globl ldi64_a16 + .type ldi64_a16,@function +ldi64_a16: + .param i32 + .result i64 + i64.load $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end5: + .size ldi64_a16, .Lfunc_end5-ldi64_a16 + + .globl ldi8_a1 + .type ldi8_a1,@function +ldi8_a1: + .param i32 + .result i64 + i64.load8_u $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end6: + .size ldi8_a1, .Lfunc_end6-ldi8_a1 + + .globl ldi8_a2 + .type ldi8_a2,@function +ldi8_a2: + .param i32 + .result i64 + i64.load8_u $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end7: + .size ldi8_a2, .Lfunc_end7-ldi8_a2 + + .globl ldi16_a1 + .type ldi16_a1,@function +ldi16_a1: + .param i32 + .result i64 + i64.load16_u $push0=, 0($0):p2align=0 + return $pop0 + .endfunc +.Lfunc_end8: + .size ldi16_a1, .Lfunc_end8-ldi16_a1 + + .globl ldi16_a2 + .type ldi16_a2,@function +ldi16_a2: + .param i32 + .result i64 + i64.load16_u $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end9: + .size ldi16_a2, .Lfunc_end9-ldi16_a2 + + .globl ldi16_a4 + .type ldi16_a4,@function +ldi16_a4: + .param i32 + .result i64 + i64.load16_u $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end10: + .size ldi16_a4, .Lfunc_end10-ldi16_a4 + + .globl ldi32_a1 + .type ldi32_a1,@function +ldi32_a1: + .param i32 + .result i64 + i64.load32_u $push0=, 0($0):p2align=0 + return $pop0 + .endfunc +.Lfunc_end11: + .size ldi32_a1, .Lfunc_end11-ldi32_a1 + + .globl ldi32_a2 + .type ldi32_a2,@function +ldi32_a2: + .param i32 + .result i64 + i64.load32_u $push0=, 0($0):p2align=1 + return $pop0 + .endfunc +.Lfunc_end12: + .size ldi32_a2, .Lfunc_end12-ldi32_a2 + + .globl ldi32_a4 + .type ldi32_a4,@function +ldi32_a4: + .param i32 + .result i64 + i64.load32_u $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end13: + .size ldi32_a4, .Lfunc_end13-ldi32_a4 + + .globl ldi32_a8 + .type ldi32_a8,@function +ldi32_a8: + .param i32 + .result i64 + i64.load32_u $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end14: + .size ldi32_a8, .Lfunc_end14-ldi32_a8 + + .globl sti64_a1 + .type sti64_a1,@function +sti64_a1: + .param i32, i64 + i64.store 0($0):p2align=0, $1 + return + .endfunc +.Lfunc_end15: + .size sti64_a1, .Lfunc_end15-sti64_a1 + + .globl sti64_a2 + .type sti64_a2,@function +sti64_a2: + .param i32, i64 + i64.store 0($0):p2align=1, $1 + return + .endfunc +.Lfunc_end16: + .size sti64_a2, .Lfunc_end16-sti64_a2 + + .globl sti64_a4 + .type sti64_a4,@function +sti64_a4: + .param i32, i64 + i64.store 0($0):p2align=2, $1 + return + .endfunc +.Lfunc_end17: + .size sti64_a4, .Lfunc_end17-sti64_a4 + + .globl sti64_a8 + .type sti64_a8,@function +sti64_a8: + .param i32, i64 + i64.store 0($0), $1 + return + .endfunc +.Lfunc_end18: + .size sti64_a8, .Lfunc_end18-sti64_a8 + + .globl sti64 + .type sti64,@function +sti64: + .param i32, i64 + i64.store 0($0), $1 + return + .endfunc +.Lfunc_end19: + .size sti64, .Lfunc_end19-sti64 + + .globl sti64_a16 + .type sti64_a16,@function +sti64_a16: + .param i32, i64 + i64.store 0($0), $1 + return + .endfunc +.Lfunc_end20: + .size sti64_a16, .Lfunc_end20-sti64_a16 + + .globl sti8_a1 + .type sti8_a1,@function +sti8_a1: + .param i32, i64 + i64.store8 0($0), $1 + return + .endfunc +.Lfunc_end21: + .size sti8_a1, .Lfunc_end21-sti8_a1 + + .globl sti8_a2 + .type sti8_a2,@function +sti8_a2: + .param i32, i64 + i64.store8 0($0), $1 + return + .endfunc +.Lfunc_end22: + .size sti8_a2, .Lfunc_end22-sti8_a2 + + .globl sti16_a1 + .type sti16_a1,@function +sti16_a1: + .param i32, i64 + i64.store16 0($0):p2align=0, $1 + return + .endfunc +.Lfunc_end23: + .size sti16_a1, .Lfunc_end23-sti16_a1 + + .globl sti16_a2 + .type sti16_a2,@function +sti16_a2: + .param i32, i64 + i64.store16 0($0), $1 + return + .endfunc +.Lfunc_end24: + .size sti16_a2, .Lfunc_end24-sti16_a2 + + .globl sti16_a4 + .type sti16_a4,@function +sti16_a4: + .param i32, i64 + i64.store16 0($0), $1 + return + .endfunc +.Lfunc_end25: + .size sti16_a4, .Lfunc_end25-sti16_a4 + + .globl sti32_a1 + .type sti32_a1,@function +sti32_a1: + .param i32, i64 + i64.store32 0($0):p2align=0, $1 + return + .endfunc +.Lfunc_end26: + .size sti32_a1, .Lfunc_end26-sti32_a1 + + .globl sti32_a2 + .type sti32_a2,@function +sti32_a2: + .param i32, i64 + i64.store32 0($0):p2align=1, $1 + return + .endfunc +.Lfunc_end27: + .size sti32_a2, .Lfunc_end27-sti32_a2 + + .globl sti32_a4 + .type sti32_a4,@function +sti32_a4: + .param i32, i64 + i64.store32 0($0), $1 + return + .endfunc +.Lfunc_end28: + .size sti32_a4, .Lfunc_end28-sti32_a4 + + .globl sti32_a8 + .type sti32_a8,@function +sti32_a8: + .param i32, i64 + i64.store32 0($0), $1 + return + .endfunc +.Lfunc_end29: + .size sti32_a8, .Lfunc_end29-sti32_a8 + + diff --git a/src/binaryen/test/llvm_autogenerated/i64-load-store-alignment.wast b/src/binaryen/test/llvm_autogenerated/i64-load-store-alignment.wast new file mode 100644 index 0000000000..d7041e5a83 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/i64-load-store-alignment.wast @@ -0,0 +1,279 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "ldi64_a1" (func $ldi64_a1)) + (export "ldi64_a2" (func $ldi64_a2)) + (export "ldi64_a4" (func $ldi64_a4)) + (export "ldi64_a8" (func $ldi64_a8)) + (export "ldi64" (func $ldi64)) + (export "ldi64_a16" (func $ldi64_a16)) + (export "ldi8_a1" (func $ldi8_a1)) + (export "ldi8_a2" (func $ldi8_a2)) + (export "ldi16_a1" (func $ldi16_a1)) + (export "ldi16_a2" (func $ldi16_a2)) + (export "ldi16_a4" (func $ldi16_a4)) + (export "ldi32_a1" (func $ldi32_a1)) + (export "ldi32_a2" (func $ldi32_a2)) + (export "ldi32_a4" (func $ldi32_a4)) + (export "ldi32_a8" (func $ldi32_a8)) + (export "sti64_a1" (func $sti64_a1)) + (export "sti64_a2" (func $sti64_a2)) + (export "sti64_a4" (func $sti64_a4)) + (export "sti64_a8" (func $sti64_a8)) + (export "sti64" (func $sti64)) + (export "sti64_a16" (func $sti64_a16)) + (export "sti8_a1" (func $sti8_a1)) + (export "sti8_a2" (func $sti8_a2)) + (export "sti16_a1" (func $sti16_a1)) + (export "sti16_a2" (func $sti16_a2)) + (export "sti16_a4" (func $sti16_a4)) + (export "sti32_a1" (func $sti32_a1)) + (export "sti32_a2" (func $sti32_a2)) + (export "sti32_a4" (func $sti32_a4)) + (export "sti32_a8" (func $sti32_a8)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $ldi64_a1 (; 0 ;) (param $0 i32) (result i64) + (return + (i64.load align=1 + (get_local $0) + ) + ) + ) + (func $ldi64_a2 (; 1 ;) (param $0 i32) (result i64) + (return + (i64.load align=2 + (get_local $0) + ) + ) + ) + (func $ldi64_a4 (; 2 ;) (param $0 i32) (result i64) + (return + (i64.load align=4 + (get_local $0) + ) + ) + ) + (func $ldi64_a8 (; 3 ;) (param $0 i32) (result i64) + (return + (i64.load + (get_local $0) + ) + ) + ) + (func $ldi64 (; 4 ;) (param $0 i32) (result i64) + (return + (i64.load + (get_local $0) + ) + ) + ) + (func $ldi64_a16 (; 5 ;) (param $0 i32) (result i64) + (return + (i64.load + (get_local $0) + ) + ) + ) + (func $ldi8_a1 (; 6 ;) (param $0 i32) (result i64) + (return + (i64.load8_u + (get_local $0) + ) + ) + ) + (func $ldi8_a2 (; 7 ;) (param $0 i32) (result i64) + (return + (i64.load8_u + (get_local $0) + ) + ) + ) + (func $ldi16_a1 (; 8 ;) (param $0 i32) (result i64) + (return + (i64.load16_u align=1 + (get_local $0) + ) + ) + ) + (func $ldi16_a2 (; 9 ;) (param $0 i32) (result i64) + (return + (i64.load16_u + (get_local $0) + ) + ) + ) + (func $ldi16_a4 (; 10 ;) (param $0 i32) (result i64) + (return + (i64.load16_u + (get_local $0) + ) + ) + ) + (func $ldi32_a1 (; 11 ;) (param $0 i32) (result i64) + (return + (i64.load32_u align=1 + (get_local $0) + ) + ) + ) + (func $ldi32_a2 (; 12 ;) (param $0 i32) (result i64) + (return + (i64.load32_u align=2 + (get_local $0) + ) + ) + ) + (func $ldi32_a4 (; 13 ;) (param $0 i32) (result i64) + (return + (i64.load32_u + (get_local $0) + ) + ) + ) + (func $ldi32_a8 (; 14 ;) (param $0 i32) (result i64) + (return + (i64.load32_u + (get_local $0) + ) + ) + ) + (func $sti64_a1 (; 15 ;) (param $0 i32) (param $1 i64) + (i64.store align=1 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti64_a2 (; 16 ;) (param $0 i32) (param $1 i64) + (i64.store align=2 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti64_a4 (; 17 ;) (param $0 i32) (param $1 i64) + (i64.store align=4 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti64_a8 (; 18 ;) (param $0 i32) (param $1 i64) + (i64.store + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti64 (; 19 ;) (param $0 i32) (param $1 i64) + (i64.store + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti64_a16 (; 20 ;) (param $0 i32) (param $1 i64) + (i64.store + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti8_a1 (; 21 ;) (param $0 i32) (param $1 i64) + (i64.store8 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti8_a2 (; 22 ;) (param $0 i32) (param $1 i64) + (i64.store8 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti16_a1 (; 23 ;) (param $0 i32) (param $1 i64) + (i64.store16 align=1 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti16_a2 (; 24 ;) (param $0 i32) (param $1 i64) + (i64.store16 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti16_a4 (; 25 ;) (param $0 i32) (param $1 i64) + (i64.store16 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti32_a1 (; 26 ;) (param $0 i32) (param $1 i64) + (i64.store32 align=1 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti32_a2 (; 27 ;) (param $0 i32) (param $1 i64) + (i64.store32 align=2 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti32_a4 (; 28 ;) (param $0 i32) (param $1 i64) + (i64.store32 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti32_a8 (; 29 ;) (param $0 i32) (param $1 i64) + (i64.store32 + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $stackSave (; 30 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 31 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 32 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/i64.s b/src/binaryen/test/llvm_autogenerated/i64.s new file mode 100644 index 0000000000..d7925b0f41 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/i64.s @@ -0,0 +1,256 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/i64.ll" + .globl add64 + .type add64,@function +add64: + .param i64, i64 + .result i64 + i64.add $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end0: + .size add64, .Lfunc_end0-add64 + + .globl sub64 + .type sub64,@function +sub64: + .param i64, i64 + .result i64 + i64.sub $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end1: + .size sub64, .Lfunc_end1-sub64 + + .globl mul64 + .type mul64,@function +mul64: + .param i64, i64 + .result i64 + i64.mul $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end2: + .size mul64, .Lfunc_end2-mul64 + + .globl sdiv64 + .type sdiv64,@function +sdiv64: + .param i64, i64 + .result i64 + i64.div_s $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end3: + .size sdiv64, .Lfunc_end3-sdiv64 + + .globl udiv64 + .type udiv64,@function +udiv64: + .param i64, i64 + .result i64 + i64.div_u $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end4: + .size udiv64, .Lfunc_end4-udiv64 + + .globl srem64 + .type srem64,@function +srem64: + .param i64, i64 + .result i64 + i64.rem_s $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end5: + .size srem64, .Lfunc_end5-srem64 + + .globl urem64 + .type urem64,@function +urem64: + .param i64, i64 + .result i64 + i64.rem_u $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end6: + .size urem64, .Lfunc_end6-urem64 + + .globl and64 + .type and64,@function +and64: + .param i64, i64 + .result i64 + i64.and $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end7: + .size and64, .Lfunc_end7-and64 + + .globl or64 + .type or64,@function +or64: + .param i64, i64 + .result i64 + i64.or $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end8: + .size or64, .Lfunc_end8-or64 + + .globl xor64 + .type xor64,@function +xor64: + .param i64, i64 + .result i64 + i64.xor $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end9: + .size xor64, .Lfunc_end9-xor64 + + .globl shl64 + .type shl64,@function +shl64: + .param i64, i64 + .result i64 + i64.shl $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end10: + .size shl64, .Lfunc_end10-shl64 + + .globl shr64 + .type shr64,@function +shr64: + .param i64, i64 + .result i64 + i64.shr_u $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end11: + .size shr64, .Lfunc_end11-shr64 + + .globl sar64 + .type sar64,@function +sar64: + .param i64, i64 + .result i64 + i64.shr_s $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end12: + .size sar64, .Lfunc_end12-sar64 + + .globl clz64 + .type clz64,@function +clz64: + .param i64 + .result i64 + i64.clz $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end13: + .size clz64, .Lfunc_end13-clz64 + + .globl clz64_zero_undef + .type clz64_zero_undef,@function +clz64_zero_undef: + .param i64 + .result i64 + i64.clz $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end14: + .size clz64_zero_undef, .Lfunc_end14-clz64_zero_undef + + .globl ctz64 + .type ctz64,@function +ctz64: + .param i64 + .result i64 + i64.ctz $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end15: + .size ctz64, .Lfunc_end15-ctz64 + + .globl ctz64_zero_undef + .type ctz64_zero_undef,@function +ctz64_zero_undef: + .param i64 + .result i64 + i64.ctz $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end16: + .size ctz64_zero_undef, .Lfunc_end16-ctz64_zero_undef + + .globl popcnt64 + .type popcnt64,@function +popcnt64: + .param i64 + .result i64 + i64.popcnt $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end17: + .size popcnt64, .Lfunc_end17-popcnt64 + + .globl eqz64 + .type eqz64,@function +eqz64: + .param i64 + .result i32 + i64.eqz $push0=, $0 + return $pop0 + .endfunc +.Lfunc_end18: + .size eqz64, .Lfunc_end18-eqz64 + + .globl rotl + .type rotl,@function +rotl: + .param i64, i64 + .result i64 + i64.rotl $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end19: + .size rotl, .Lfunc_end19-rotl + + .globl masked_rotl + .type masked_rotl,@function +masked_rotl: + .param i64, i64 + .result i64 + i64.rotl $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end20: + .size masked_rotl, .Lfunc_end20-masked_rotl + + .globl rotr + .type rotr,@function +rotr: + .param i64, i64 + .result i64 + i64.rotr $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end21: + .size rotr, .Lfunc_end21-rotr + + .globl masked_rotr + .type masked_rotr,@function +masked_rotr: + .param i64, i64 + .result i64 + i64.rotr $push0=, $0, $1 + return $pop0 + .endfunc +.Lfunc_end22: + .size masked_rotr, .Lfunc_end22-masked_rotr + + diff --git a/src/binaryen/test/llvm_autogenerated/i64.wast b/src/binaryen/test/llvm_autogenerated/i64.wast new file mode 100644 index 0000000000..ae05aab15a --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/i64.wast @@ -0,0 +1,240 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "add64" (func $add64)) + (export "sub64" (func $sub64)) + (export "mul64" (func $mul64)) + (export "sdiv64" (func $sdiv64)) + (export "udiv64" (func $udiv64)) + (export "srem64" (func $srem64)) + (export "urem64" (func $urem64)) + (export "and64" (func $and64)) + (export "or64" (func $or64)) + (export "xor64" (func $xor64)) + (export "shl64" (func $shl64)) + (export "shr64" (func $shr64)) + (export "sar64" (func $sar64)) + (export "clz64" (func $clz64)) + (export "clz64_zero_undef" (func $clz64_zero_undef)) + (export "ctz64" (func $ctz64)) + (export "ctz64_zero_undef" (func $ctz64_zero_undef)) + (export "popcnt64" (func $popcnt64)) + (export "eqz64" (func $eqz64)) + (export "rotl" (func $rotl)) + (export "masked_rotl" (func $masked_rotl)) + (export "rotr" (func $rotr)) + (export "masked_rotr" (func $masked_rotr)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $add64 (; 0 ;) (param $0 i64) (param $1 i64) (result i64) + (return + (i64.add + (get_local $0) + (get_local $1) + ) + ) + ) + (func $sub64 (; 1 ;) (param $0 i64) (param $1 i64) (result i64) + (return + (i64.sub + (get_local $0) + (get_local $1) + ) + ) + ) + (func $mul64 (; 2 ;) (param $0 i64) (param $1 i64) (result i64) + (return + (i64.mul + (get_local $0) + (get_local $1) + ) + ) + ) + (func $sdiv64 (; 3 ;) (param $0 i64) (param $1 i64) (result i64) + (return + (i64.div_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $udiv64 (; 4 ;) (param $0 i64) (param $1 i64) (result i64) + (return + (i64.div_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $srem64 (; 5 ;) (param $0 i64) (param $1 i64) (result i64) + (return + (i64.rem_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $urem64 (; 6 ;) (param $0 i64) (param $1 i64) (result i64) + (return + (i64.rem_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $and64 (; 7 ;) (param $0 i64) (param $1 i64) (result i64) + (return + (i64.and + (get_local $0) + (get_local $1) + ) + ) + ) + (func $or64 (; 8 ;) (param $0 i64) (param $1 i64) (result i64) + (return + (i64.or + (get_local $0) + (get_local $1) + ) + ) + ) + (func $xor64 (; 9 ;) (param $0 i64) (param $1 i64) (result i64) + (return + (i64.xor + (get_local $0) + (get_local $1) + ) + ) + ) + (func $shl64 (; 10 ;) (param $0 i64) (param $1 i64) (result i64) + (return + (i64.shl + (get_local $0) + (get_local $1) + ) + ) + ) + (func $shr64 (; 11 ;) (param $0 i64) (param $1 i64) (result i64) + (return + (i64.shr_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $sar64 (; 12 ;) (param $0 i64) (param $1 i64) (result i64) + (return + (i64.shr_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $clz64 (; 13 ;) (param $0 i64) (result i64) + (return + (i64.clz + (get_local $0) + ) + ) + ) + (func $clz64_zero_undef (; 14 ;) (param $0 i64) (result i64) + (return + (i64.clz + (get_local $0) + ) + ) + ) + (func $ctz64 (; 15 ;) (param $0 i64) (result i64) + (return + (i64.ctz + (get_local $0) + ) + ) + ) + (func $ctz64_zero_undef (; 16 ;) (param $0 i64) (result i64) + (return + (i64.ctz + (get_local $0) + ) + ) + ) + (func $popcnt64 (; 17 ;) (param $0 i64) (result i64) + (return + (i64.popcnt + (get_local $0) + ) + ) + ) + (func $eqz64 (; 18 ;) (param $0 i64) (result i32) + (return + (i64.eqz + (get_local $0) + ) + ) + ) + (func $rotl (; 19 ;) (param $0 i64) (param $1 i64) (result i64) + (return + (i64.rotl + (get_local $0) + (get_local $1) + ) + ) + ) + (func $masked_rotl (; 20 ;) (param $0 i64) (param $1 i64) (result i64) + (return + (i64.rotl + (get_local $0) + (get_local $1) + ) + ) + ) + (func $rotr (; 21 ;) (param $0 i64) (param $1 i64) (result i64) + (return + (i64.rotr + (get_local $0) + (get_local $1) + ) + ) + ) + (func $masked_rotr (; 22 ;) (param $0 i64) (param $1 i64) (result i64) + (return + (i64.rotr + (get_local $0) + (get_local $1) + ) + ) + ) + (func $stackSave (; 23 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 24 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 25 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/ident.s b/src/binaryen/test/llvm_autogenerated/ident.s new file mode 100644 index 0000000000..8149b3683e --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/ident.s @@ -0,0 +1,4 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/ident.ll" + + .ident "hello world" diff --git a/src/binaryen/test/llvm_autogenerated/ident.wast b/src/binaryen/test/llvm_autogenerated/ident.wast new file mode 100644 index 0000000000..e6ed0e88b2 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/ident.wast @@ -0,0 +1,39 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $stackSave (; 0 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 1 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 2 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/immediates.s b/src/binaryen/test/llvm_autogenerated/immediates.s new file mode 100644 index 0000000000..f6b034e715 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/immediates.s @@ -0,0 +1,283 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/immediates.ll" + .globl zero_i32 + .type zero_i32,@function +zero_i32: + .result i32 + i32.const $push0=, 0 + return $pop0 + .endfunc +.Lfunc_end0: + .size zero_i32, .Lfunc_end0-zero_i32 + + .globl one_i32 + .type one_i32,@function +one_i32: + .result i32 + i32.const $push0=, 1 + return $pop0 + .endfunc +.Lfunc_end1: + .size one_i32, .Lfunc_end1-one_i32 + + .globl max_i32 + .type max_i32,@function +max_i32: + .result i32 + i32.const $push0=, 2147483647 + return $pop0 + .endfunc +.Lfunc_end2: + .size max_i32, .Lfunc_end2-max_i32 + + .globl min_i32 + .type min_i32,@function +min_i32: + .result i32 + i32.const $push0=, -2147483648 + return $pop0 + .endfunc +.Lfunc_end3: + .size min_i32, .Lfunc_end3-min_i32 + + .globl zero_i64 + .type zero_i64,@function +zero_i64: + .result i64 + i64.const $push0=, 0 + return $pop0 + .endfunc +.Lfunc_end4: + .size zero_i64, .Lfunc_end4-zero_i64 + + .globl one_i64 + .type one_i64,@function +one_i64: + .result i64 + i64.const $push0=, 1 + return $pop0 + .endfunc +.Lfunc_end5: + .size one_i64, .Lfunc_end5-one_i64 + + .globl max_i64 + .type max_i64,@function +max_i64: + .result i64 + i64.const $push0=, 9223372036854775807 + return $pop0 + .endfunc +.Lfunc_end6: + .size max_i64, .Lfunc_end6-max_i64 + + .globl min_i64 + .type min_i64,@function +min_i64: + .result i64 + i64.const $push0=, -9223372036854775808 + return $pop0 + .endfunc +.Lfunc_end7: + .size min_i64, .Lfunc_end7-min_i64 + + .globl negzero_f32 + .type negzero_f32,@function +negzero_f32: + .result f32 + f32.const $push0=, -0x0p0 + return $pop0 + .endfunc +.Lfunc_end8: + .size negzero_f32, .Lfunc_end8-negzero_f32 + + .globl zero_f32 + .type zero_f32,@function +zero_f32: + .result f32 + f32.const $push0=, 0x0p0 + return $pop0 + .endfunc +.Lfunc_end9: + .size zero_f32, .Lfunc_end9-zero_f32 + + .globl one_f32 + .type one_f32,@function +one_f32: + .result f32 + f32.const $push0=, 0x1p0 + return $pop0 + .endfunc +.Lfunc_end10: + .size one_f32, .Lfunc_end10-one_f32 + + .globl two_f32 + .type two_f32,@function +two_f32: + .result f32 + f32.const $push0=, 0x1p1 + return $pop0 + .endfunc +.Lfunc_end11: + .size two_f32, .Lfunc_end11-two_f32 + + .globl nan_f32 + .type nan_f32,@function +nan_f32: + .result f32 + f32.const $push0=, nan + return $pop0 + .endfunc +.Lfunc_end12: + .size nan_f32, .Lfunc_end12-nan_f32 + + .globl negnan_f32 + .type negnan_f32,@function +negnan_f32: + .result f32 + f32.const $push0=, -nan + return $pop0 + .endfunc +.Lfunc_end13: + .size negnan_f32, .Lfunc_end13-negnan_f32 + + .globl inf_f32 + .type inf_f32,@function +inf_f32: + .result f32 + f32.const $push0=, infinity + return $pop0 + .endfunc +.Lfunc_end14: + .size inf_f32, .Lfunc_end14-inf_f32 + + .globl neginf_f32 + .type neginf_f32,@function +neginf_f32: + .result f32 + f32.const $push0=, -infinity + return $pop0 + .endfunc +.Lfunc_end15: + .size neginf_f32, .Lfunc_end15-neginf_f32 + + .globl custom_nan_f32 + .type custom_nan_f32,@function +custom_nan_f32: + .result f32 + f32.const $push0=, -nan:0x6bcdef + return $pop0 + .endfunc +.Lfunc_end16: + .size custom_nan_f32, .Lfunc_end16-custom_nan_f32 + + .globl custom_nans_f32 + .type custom_nans_f32,@function +custom_nans_f32: + .result f32 + f32.const $push0=, -nan:0x6bcdef + return $pop0 + .endfunc +.Lfunc_end17: + .size custom_nans_f32, .Lfunc_end17-custom_nans_f32 + + .globl negzero_f64 + .type negzero_f64,@function +negzero_f64: + .result f64 + f64.const $push0=, -0x0p0 + return $pop0 + .endfunc +.Lfunc_end18: + .size negzero_f64, .Lfunc_end18-negzero_f64 + + .globl zero_f64 + .type zero_f64,@function +zero_f64: + .result f64 + f64.const $push0=, 0x0p0 + return $pop0 + .endfunc +.Lfunc_end19: + .size zero_f64, .Lfunc_end19-zero_f64 + + .globl one_f64 + .type one_f64,@function +one_f64: + .result f64 + f64.const $push0=, 0x1p0 + return $pop0 + .endfunc +.Lfunc_end20: + .size one_f64, .Lfunc_end20-one_f64 + + .globl two_f64 + .type two_f64,@function +two_f64: + .result f64 + f64.const $push0=, 0x1p1 + return $pop0 + .endfunc +.Lfunc_end21: + .size two_f64, .Lfunc_end21-two_f64 + + .globl nan_f64 + .type nan_f64,@function +nan_f64: + .result f64 + f64.const $push0=, nan + return $pop0 + .endfunc +.Lfunc_end22: + .size nan_f64, .Lfunc_end22-nan_f64 + + .globl negnan_f64 + .type negnan_f64,@function +negnan_f64: + .result f64 + f64.const $push0=, -nan + return $pop0 + .endfunc +.Lfunc_end23: + .size negnan_f64, .Lfunc_end23-negnan_f64 + + .globl inf_f64 + .type inf_f64,@function +inf_f64: + .result f64 + f64.const $push0=, infinity + return $pop0 + .endfunc +.Lfunc_end24: + .size inf_f64, .Lfunc_end24-inf_f64 + + .globl neginf_f64 + .type neginf_f64,@function +neginf_f64: + .result f64 + f64.const $push0=, -infinity + return $pop0 + .endfunc +.Lfunc_end25: + .size neginf_f64, .Lfunc_end25-neginf_f64 + + .globl custom_nan_f64 + .type custom_nan_f64,@function +custom_nan_f64: + .result f64 + f64.const $push0=, -nan:0xabcdef0123456 + return $pop0 + .endfunc +.Lfunc_end26: + .size custom_nan_f64, .Lfunc_end26-custom_nan_f64 + + .globl custom_nans_f64 + .type custom_nans_f64,@function +custom_nans_f64: + .result f64 + f64.const $push0=, -nan:0x2bcdef0123456 + return $pop0 + .endfunc +.Lfunc_end27: + .size custom_nans_f64, .Lfunc_end27-custom_nans_f64 + + diff --git a/src/binaryen/test/llvm_autogenerated/immediates.wast b/src/binaryen/test/llvm_autogenerated/immediates.wast new file mode 100644 index 0000000000..285ac387da --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/immediates.wast @@ -0,0 +1,207 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "zero_i32" (func $zero_i32)) + (export "one_i32" (func $one_i32)) + (export "max_i32" (func $max_i32)) + (export "min_i32" (func $min_i32)) + (export "zero_i64" (func $zero_i64)) + (export "one_i64" (func $one_i64)) + (export "max_i64" (func $max_i64)) + (export "min_i64" (func $min_i64)) + (export "negzero_f32" (func $negzero_f32)) + (export "zero_f32" (func $zero_f32)) + (export "one_f32" (func $one_f32)) + (export "two_f32" (func $two_f32)) + (export "nan_f32" (func $nan_f32)) + (export "negnan_f32" (func $negnan_f32)) + (export "inf_f32" (func $inf_f32)) + (export "neginf_f32" (func $neginf_f32)) + (export "custom_nan_f32" (func $custom_nan_f32)) + (export "custom_nans_f32" (func $custom_nans_f32)) + (export "negzero_f64" (func $negzero_f64)) + (export "zero_f64" (func $zero_f64)) + (export "one_f64" (func $one_f64)) + (export "two_f64" (func $two_f64)) + (export "nan_f64" (func $nan_f64)) + (export "negnan_f64" (func $negnan_f64)) + (export "inf_f64" (func $inf_f64)) + (export "neginf_f64" (func $neginf_f64)) + (export "custom_nan_f64" (func $custom_nan_f64)) + (export "custom_nans_f64" (func $custom_nans_f64)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $zero_i32 (; 0 ;) (result i32) + (return + (i32.const 0) + ) + ) + (func $one_i32 (; 1 ;) (result i32) + (return + (i32.const 1) + ) + ) + (func $max_i32 (; 2 ;) (result i32) + (return + (i32.const 2147483647) + ) + ) + (func $min_i32 (; 3 ;) (result i32) + (return + (i32.const -2147483648) + ) + ) + (func $zero_i64 (; 4 ;) (result i64) + (return + (i64.const 0) + ) + ) + (func $one_i64 (; 5 ;) (result i64) + (return + (i64.const 1) + ) + ) + (func $max_i64 (; 6 ;) (result i64) + (return + (i64.const 9223372036854775807) + ) + ) + (func $min_i64 (; 7 ;) (result i64) + (return + (i64.const -9223372036854775808) + ) + ) + (func $negzero_f32 (; 8 ;) (result f32) + (return + (f32.const -0) + ) + ) + (func $zero_f32 (; 9 ;) (result f32) + (return + (f32.const 0) + ) + ) + (func $one_f32 (; 10 ;) (result f32) + (return + (f32.const 1) + ) + ) + (func $two_f32 (; 11 ;) (result f32) + (return + (f32.const 2) + ) + ) + (func $nan_f32 (; 12 ;) (result f32) + (return + (f32.const nan:0x400000) + ) + ) + (func $negnan_f32 (; 13 ;) (result f32) + (return + (f32.const -nan:0x400000) + ) + ) + (func $inf_f32 (; 14 ;) (result f32) + (return + (f32.const inf) + ) + ) + (func $neginf_f32 (; 15 ;) (result f32) + (return + (f32.const -inf) + ) + ) + (func $custom_nan_f32 (; 16 ;) (result f32) + (return + (f32.const -nan:0x6bcdef) + ) + ) + (func $custom_nans_f32 (; 17 ;) (result f32) + (return + (f32.const -nan:0x6bcdef) + ) + ) + (func $negzero_f64 (; 18 ;) (result f64) + (return + (f64.const -0) + ) + ) + (func $zero_f64 (; 19 ;) (result f64) + (return + (f64.const 0) + ) + ) + (func $one_f64 (; 20 ;) (result f64) + (return + (f64.const 1) + ) + ) + (func $two_f64 (; 21 ;) (result f64) + (return + (f64.const 2) + ) + ) + (func $nan_f64 (; 22 ;) (result f64) + (return + (f64.const nan:0x8000000000000) + ) + ) + (func $negnan_f64 (; 23 ;) (result f64) + (return + (f64.const -nan:0x8000000000000) + ) + ) + (func $inf_f64 (; 24 ;) (result f64) + (return + (f64.const inf) + ) + ) + (func $neginf_f64 (; 25 ;) (result f64) + (return + (f64.const -inf) + ) + ) + (func $custom_nan_f64 (; 26 ;) (result f64) + (return + (f64.const -nan:0xabcdef0123456) + ) + ) + (func $custom_nans_f64 (; 27 ;) (result f64) + (return + (f64.const -nan:0x2bcdef0123456) + ) + ) + (func $stackSave (; 28 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 29 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 30 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/indirect-import.s b/src/binaryen/test/llvm_autogenerated/indirect-import.s new file mode 100644 index 0000000000..ddb5c0a22b --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/indirect-import.s @@ -0,0 +1,53 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/indirect-import.ll" + .hidden bar + .globl bar + .type bar,@function +bar: + .result i32 + .local i32, i32 + i32.const $push13=, 0 + i32.const $push10=, 0 + i32.load $push11=, __stack_pointer($pop10) + i32.const $push12=, 32 + i32.sub $push19=, $pop11, $pop12 + tee_local $push18=, $1=, $pop19 + i32.store __stack_pointer($pop13), $pop18 + i32.const $push0=, extern_fd@FUNCTION + i32.store 28($1), $pop0 + i32.const $push1=, extern_vj@FUNCTION + i32.store 24($1), $pop1 + i64.const $push2=, 1 + call extern_vj@FUNCTION, $pop2 + i32.const $push3=, extern_v@FUNCTION + i32.store 20($1), $pop3 + call extern_v@FUNCTION + i32.const $push4=, extern_ijidf@FUNCTION + i32.store 16($1), $pop4 + i64.const $push17=, 1 + i32.const $push7=, 2 + f64.const $push6=, 0x1.8p1 + f32.const $push5=, 0x1p2 + i32.call $drop=, extern_ijidf@FUNCTION, $pop17, $pop7, $pop6, $pop5 + i32.const $push8=, extern_struct@FUNCTION + i32.store 12($1), $pop8 + i32.const $push9=, extern_sret@FUNCTION + i32.store 8($1), $pop9 + i32.load $0=, 28($1) + i32.const $push16=, 0 + i32.const $push14=, 32 + i32.add $push15=, $1, $pop14 + i32.store __stack_pointer($pop16), $pop15 + return $0 + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + + + .functype extern_fd, f32, f64 + .functype extern_vj, void, i64 + .functype extern_v, void + .functype extern_ijidf, i32, i64, i32, f64, f32 + .functype extern_struct, void, i32 + .functype extern_sret, void, i32 + .functype extern_i128ret, void, i32, i64 diff --git a/src/binaryen/test/llvm_autogenerated/indirect-import.wast b/src/binaryen/test/llvm_autogenerated/indirect-import.wast new file mode 100644 index 0000000000..cc05dad0b4 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/indirect-import.wast @@ -0,0 +1,173 @@ +(module + (type $FUNCSIG$fd (func (param f64) (result f32))) + (type $FUNCSIG$vj (func (param i64))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$ijidf (func (param i64 i32 f64 f32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$vij (func (param i32 i64))) + (import "env" "extern_ijidf" (func $extern_ijidf (param i64 i32 f64 f32) (result i32))) + (import "env" "extern_v" (func $extern_v)) + (import "env" "extern_vj" (func $extern_vj (param i64))) + (import "env" "memory" (memory $0 1)) + (import "env" "extern_fd" (func $extern_fd (param f64) (result f32))) + (import "env" "extern_struct" (func $extern_struct (param i32))) + (import "env" "extern_sret" (func $extern_sret (param i32))) + (table 7 7 anyfunc) + (elem (i32.const 0) $__wasm_nullptr $__importThunk_extern_fd $__importThunk_extern_vj $__importThunk_extern_v $__importThunk_extern_ijidf $__importThunk_extern_struct $__importThunk_extern_sret) + (data (i32.const 4) "\10\04\00\00") + (export "bar" (func $bar)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (export "dynCall_fd" (func $dynCall_fd)) + (export "dynCall_v" (func $dynCall_v)) + (export "dynCall_vi" (func $dynCall_vi)) + (func $bar (; 6 ;) (result i32) + (local $0 i32) + (local $1 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $1 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 32) + ) + ) + ) + (i32.store offset=28 + (get_local $1) + (i32.const 1) + ) + (i32.store offset=24 + (get_local $1) + (i32.const 2) + ) + (call $extern_vj + (i64.const 1) + ) + (i32.store offset=20 + (get_local $1) + (i32.const 3) + ) + (call $extern_v) + (i32.store offset=16 + (get_local $1) + (i32.const 4) + ) + (drop + (call $extern_ijidf + (i64.const 1) + (i32.const 2) + (f64.const 3) + (f32.const 4) + ) + ) + (i32.store offset=12 + (get_local $1) + (i32.const 5) + ) + (i32.store offset=8 + (get_local $1) + (i32.const 6) + ) + (set_local $0 + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $1) + (i32.const 32) + ) + ) + (return + (get_local $0) + ) + ) + (func $__wasm_nullptr (; 7 ;) (type $FUNCSIG$v) + (unreachable) + ) + (func $__importThunk_extern_fd (; 8 ;) (type $FUNCSIG$fd) (param $0 f64) (result f32) + (call $extern_fd + (get_local $0) + ) + ) + (func $__importThunk_extern_vj (; 9 ;) (type $FUNCSIG$vj) (param $0 i64) + (call $extern_vj + (get_local $0) + ) + ) + (func $__importThunk_extern_v (; 10 ;) (type $FUNCSIG$v) + (call $extern_v) + ) + (func $__importThunk_extern_ijidf (; 11 ;) (type $FUNCSIG$ijidf) (param $0 i64) (param $1 i32) (param $2 f64) (param $3 f32) (result i32) + (call $extern_ijidf + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $3) + ) + ) + (func $__importThunk_extern_struct (; 12 ;) (type $FUNCSIG$vi) (param $0 i32) + (call $extern_struct + (get_local $0) + ) + ) + (func $__importThunk_extern_sret (; 13 ;) (type $FUNCSIG$vi) (param $0 i32) + (call $extern_sret + (get_local $0) + ) + ) + (func $stackSave (; 14 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 15 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 16 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) + (func $dynCall_fd (; 17 ;) (param $fptr i32) (param $0 f64) (result f32) + (call_indirect (type $FUNCSIG$fd) + (get_local $0) + (get_local $fptr) + ) + ) + (func $dynCall_v (; 18 ;) (param $fptr i32) + (call_indirect (type $FUNCSIG$v) + (get_local $fptr) + ) + ) + (func $dynCall_vi (; 19 ;) (param $fptr i32) (param $0 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $0) + (get_local $fptr) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/irreducible-cfg.s b/src/binaryen/test/llvm_autogenerated/irreducible-cfg.s new file mode 100644 index 0000000000..028f071ef8 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/irreducible-cfg.s @@ -0,0 +1,170 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/irreducible-cfg.ll" + .globl test0 + .type test0,@function +test0: + .param i32, i32, i32, i32 + .local f64, i32 + block + block + br_if 0, $2 + i32.const $2=, 0 + i32.const $5=, 1 + br 1 +.LBB0_3: + end_block + i32.const $push0=, 3 + i32.shl $push1=, $3, $pop0 + i32.add $push2=, $0, $pop1 + f64.load $4=, 0($pop2):p2align=2 + i32.const $5=, 0 +.LBB0_5: + end_block + loop + block + block + block + block + block + block + br_table $5, 2, 0, 3, 1, 1 +.LBB0_6: + end_block + i32.ge_s $push3=, $2, $1 + br_if 4, $pop3 + i32.const $5=, 3 + br 5 +.LBB0_8: + end_block + i32.const $push4=, 3 + i32.shl $push5=, $2, $pop4 + i32.add $push17=, $0, $pop5 + tee_local $push16=, $3=, $pop17 + f64.load $push6=, 0($3):p2align=2 + f64.const $push7=, 0x1.2666666666666p1 + f64.mul $push15=, $pop6, $pop7 + tee_local $push14=, $4=, $pop15 + f64.store 0($pop16):p2align=2, $pop14 + i32.const $5=, 0 + br 4 +.LBB0_10: + end_block + i32.const $push10=, 3 + i32.shl $push11=, $2, $pop10 + i32.add $push12=, $0, $pop11 + f64.const $push8=, 0x1.4cccccccccccdp0 + f64.add $push9=, $4, $pop8 + f64.store 0($pop12):p2align=2, $pop9 + i32.const $push13=, 1 + i32.add $2=, $2, $pop13 + br 1 +.LBB0_11: + end_block + return +.LBB0_12: + end_block + i32.const $5=, 1 + br 1 +.LBB0_13: + end_block + i32.const $5=, 2 + br 0 +.LBB0_14: + end_loop + .endfunc +.Lfunc_end0: + .size test0, .Lfunc_end0-test0 + + .globl test1 + .type test1,@function +test1: + .param i32, i32, i32, i32 + .local f64, i32 + block + block + br_if 0, $2 + i32.const $3=, 0 + i32.const $5=, 1 + br 1 +.LBB1_3: + end_block + i32.const $push0=, 3 + i32.shl $push1=, $3, $pop0 + i32.add $push2=, $0, $pop1 + f64.load $4=, 0($pop2):p2align=2 + i32.const $5=, 0 +.LBB1_5: + end_block + loop + block + block + block + block + block + block + block + block + br_table $5, 3, 0, 4, 1, 2, 2 +.LBB1_6: + end_block + i32.ge_s $push3=, $3, $1 + br_if 6, $pop3 + i32.const $5=, 3 + br 7 +.LBB1_8: + end_block + i32.const $push4=, 3 + i32.shl $push5=, $3, $pop4 + i32.add $push18=, $0, $pop5 + tee_local $push17=, $2=, $pop18 + f64.load $push6=, 0($2):p2align=2 + f64.const $push7=, 0x1.2666666666666p1 + f64.mul $push16=, $pop6, $pop7 + tee_local $push15=, $4=, $pop16 + f64.store 0($pop17):p2align=2, $pop15 + i32.const $2=, 0 + i32.const $5=, 4 + br 6 +.LBB1_10: + end_block + i32.const $push22=, 1 + i32.add $push21=, $2, $pop22 + tee_local $push20=, $2=, $pop21 + i32.const $push19=, 256 + i32.lt_s $push8=, $pop20, $pop19 + br_if 3, $pop8 + i32.const $5=, 0 + br 5 +.LBB1_12: + end_block + i32.const $push11=, 3 + i32.shl $push12=, $3, $pop11 + i32.add $push13=, $0, $pop12 + f64.const $push9=, 0x1.4cccccccccccdp0 + f64.add $push10=, $4, $pop9 + f64.store 0($pop13):p2align=2, $pop10 + i32.const $push14=, 1 + i32.add $3=, $3, $pop14 + br 1 +.LBB1_13: + end_block + return +.LBB1_14: + end_block + i32.const $5=, 1 + br 2 +.LBB1_15: + end_block + i32.const $5=, 4 + br 1 +.LBB1_16: + end_block + i32.const $5=, 2 + br 0 +.LBB1_17: + end_loop + .endfunc +.Lfunc_end1: + .size test1, .Lfunc_end1-test1 + + diff --git a/src/binaryen/test/llvm_autogenerated/irreducible-cfg.wast b/src/binaryen/test/llvm_autogenerated/irreducible-cfg.wast new file mode 100644 index 0000000000..0e9c7a3f2e --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/irreducible-cfg.wast @@ -0,0 +1,289 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "test0" (func $test0)) + (export "test1" (func $test1)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $test0 (; 0 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (local $4 f64) + (local $5 i32) + (block $label$0 + (block $label$1 + (br_if $label$1 + (get_local $2) + ) + (set_local $2 + (i32.const 0) + ) + (set_local $5 + (i32.const 1) + ) + (br $label$0) + ) + (set_local $4 + (f64.load align=4 + (i32.add + (get_local $0) + (i32.shl + (get_local $3) + (i32.const 3) + ) + ) + ) + ) + (set_local $5 + (i32.const 0) + ) + ) + (loop $label$2 + (block $label$3 + (block $label$4 + (block $label$5 + (block $label$6 + (block $label$7 + (block $label$8 + (br_table $label$6 $label$8 $label$5 $label$7 $label$7 + (get_local $5) + ) + ) + (br_if $label$3 + (i32.ge_s + (get_local $2) + (get_local $1) + ) + ) + (set_local $5 + (i32.const 3) + ) + (br $label$2) + ) + (f64.store align=4 + (tee_local $3 + (i32.add + (get_local $0) + (i32.shl + (get_local $2) + (i32.const 3) + ) + ) + ) + (tee_local $4 + (f64.mul + (f64.load align=4 + (get_local $3) + ) + (f64.const 2.3) + ) + ) + ) + (set_local $5 + (i32.const 0) + ) + (br $label$2) + ) + (f64.store align=4 + (i32.add + (get_local $0) + (i32.shl + (get_local $2) + (i32.const 3) + ) + ) + (f64.add + (get_local $4) + (f64.const 1.3) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br $label$4) + ) + (return) + ) + (set_local $5 + (i32.const 1) + ) + (br $label$2) + ) + (set_local $5 + (i32.const 2) + ) + (br $label$2) + ) + ) + (func $test1 (; 1 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (local $4 f64) + (local $5 i32) + (block $label$0 + (block $label$1 + (br_if $label$1 + (get_local $2) + ) + (set_local $3 + (i32.const 0) + ) + (set_local $5 + (i32.const 1) + ) + (br $label$0) + ) + (set_local $4 + (f64.load align=4 + (i32.add + (get_local $0) + (i32.shl + (get_local $3) + (i32.const 3) + ) + ) + ) + ) + (set_local $5 + (i32.const 0) + ) + ) + (loop $label$2 + (block $label$3 + (block $label$4 + (block $label$5 + (block $label$6 + (block $label$7 + (block $label$8 + (block $label$9 + (block $label$10 + (br_table $label$7 $label$10 $label$6 $label$9 $label$8 $label$8 + (get_local $5) + ) + ) + (br_if $label$3 + (i32.ge_s + (get_local $3) + (get_local $1) + ) + ) + (set_local $5 + (i32.const 3) + ) + (br $label$2) + ) + (f64.store align=4 + (tee_local $2 + (i32.add + (get_local $0) + (i32.shl + (get_local $3) + (i32.const 3) + ) + ) + ) + (tee_local $4 + (f64.mul + (f64.load align=4 + (get_local $2) + ) + (f64.const 2.3) + ) + ) + ) + (set_local $2 + (i32.const 0) + ) + (set_local $5 + (i32.const 4) + ) + (br $label$2) + ) + (br_if $label$4 + (i32.lt_s + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 256) + ) + ) + (set_local $5 + (i32.const 0) + ) + (br $label$2) + ) + (f64.store align=4 + (i32.add + (get_local $0) + (i32.shl + (get_local $3) + (i32.const 3) + ) + ) + (f64.add + (get_local $4) + (f64.const 1.3) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (br $label$5) + ) + (return) + ) + (set_local $5 + (i32.const 1) + ) + (br $label$2) + ) + (set_local $5 + (i32.const 4) + ) + (br $label$2) + ) + (set_local $5 + (i32.const 2) + ) + (br $label$2) + ) + ) + (func $stackSave (; 2 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 3 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 4 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/legalize.s b/src/binaryen/test/llvm_autogenerated/legalize.s new file mode 100644 index 0000000000..0cbb88302f --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/legalize.s @@ -0,0 +1,1079 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/legalize.ll" + .globl shl_i3 + .type shl_i3,@function +shl_i3: + .param i32, i32, i32 + .result i32 + i32.const $push0=, 7 + i32.and $push1=, $1, $pop0 + i32.shl $push2=, $0, $pop1 + return $pop2 + .endfunc +.Lfunc_end0: + .size shl_i3, .Lfunc_end0-shl_i3 + + .globl shl_i53 + .type shl_i53,@function +shl_i53: + .param i64, i64, i32 + .result i64 + i64.const $push0=, 9007199254740991 + i64.and $push1=, $1, $pop0 + i64.shl $push2=, $0, $pop1 + return $pop2 + .endfunc +.Lfunc_end1: + .size shl_i53, .Lfunc_end1-shl_i53 + + .globl sext_in_reg_i32_i64 + .type sext_in_reg_i32_i64,@function +sext_in_reg_i32_i64: + .param i64 + .result i64 + i64.const $push0=, 32 + i64.shl $push1=, $0, $pop0 + i64.const $push3=, 32 + i64.shr_s $push2=, $pop1, $pop3 + return $pop2 + .endfunc +.Lfunc_end2: + .size sext_in_reg_i32_i64, .Lfunc_end2-sext_in_reg_i32_i64 + + .globl fpext_f32_f64 + .type fpext_f32_f64,@function +fpext_f32_f64: + .param i32 + .result f64 + f32.load $push0=, 0($0) + f64.promote/f32 $push1=, $pop0 + return $pop1 + .endfunc +.Lfunc_end3: + .size fpext_f32_f64, .Lfunc_end3-fpext_f32_f64 + + .globl fpconv_f64_f32 + .type fpconv_f64_f32,@function +fpconv_f64_f32: + .param i32 + .result f32 + f64.load $push0=, 0($0) + f32.demote/f64 $push1=, $pop0 + return $pop1 + .endfunc +.Lfunc_end4: + .size fpconv_f64_f32, .Lfunc_end4-fpconv_f64_f32 + + .globl bigshift + .type bigshift,@function +bigshift: + .param i32, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + i32.const $push469=, 0 + i32.const $push466=, 0 + i32.load $push467=, __stack_pointer($pop466) + i32.const $push468=, 1024 + i32.sub $push919=, $pop467, $pop468 + tee_local $push918=, $52=, $pop919 + i32.store __stack_pointer($pop469), $pop918 + i32.const $push473=, 512 + i32.add $push474=, $52, $pop473 + i32.wrap/i64 $push917=, $17 + tee_local $push916=, $33=, $pop917 + call __ashlti3@FUNCTION, $pop474, $1, $2, $pop916 + i32.const $push475=, 528 + i32.add $push476=, $52, $pop475 + call __ashlti3@FUNCTION, $pop476, $3, $4, $33 + i32.const $push477=, 544 + i32.add $push478=, $52, $pop477 + i32.const $push0=, 128 + i32.sub $push915=, $pop0, $33 + tee_local $push914=, $41=, $pop915 + call __lshrti3@FUNCTION, $pop478, $1, $2, $pop914 + i32.const $push479=, 560 + i32.add $push480=, $52, $pop479 + i32.const $push1=, -128 + i32.add $push913=, $33, $pop1 + tee_local $push912=, $42=, $pop913 + call __ashlti3@FUNCTION, $pop480, $1, $2, $pop912 + i32.const $push481=, 736 + i32.add $push482=, $52, $pop481 + i32.const $push2=, 384 + i32.sub $push911=, $pop2, $33 + tee_local $push910=, $43=, $pop911 + call __lshrti3@FUNCTION, $pop482, $1, $2, $pop910 + i32.const $push483=, 720 + i32.add $push484=, $52, $pop483 + i32.const $push3=, -256 + i32.add $push909=, $33, $pop3 + tee_local $push908=, $34=, $pop909 + call __ashlti3@FUNCTION, $pop484, $3, $4, $pop908 + i32.const $push485=, 752 + i32.add $push486=, $52, $pop485 + i32.const $push4=, -384 + i32.add $push907=, $33, $pop4 + tee_local $push906=, $39=, $pop907 + call __ashlti3@FUNCTION, $pop486, $1, $2, $pop906 + i32.const $push487=, 592 + i32.add $push488=, $52, $pop487 + call __ashlti3@FUNCTION, $pop488, $7, $8, $33 + i32.const $push489=, 608 + i32.add $push490=, $52, $pop489 + call __lshrti3@FUNCTION, $pop490, $5, $6, $41 + i32.const $push491=, 624 + i32.add $push492=, $52, $pop491 + call __ashlti3@FUNCTION, $pop492, $5, $6, $42 + i32.const $push493=, 688 + i32.add $push494=, $52, $pop493 + i32.const $push5=, 256 + i32.sub $push905=, $pop5, $33 + tee_local $push904=, $35=, $pop905 + call __lshrti3@FUNCTION, $pop494, $3, $4, $pop904 + i32.const $push495=, 640 + i32.add $push496=, $52, $pop495 + call __lshrti3@FUNCTION, $pop496, $1, $2, $35 + i32.const $push497=, 656 + i32.add $push498=, $52, $pop497 + i32.const $push903=, 128 + i32.sub $push902=, $pop903, $35 + tee_local $push901=, $50=, $pop902 + call __ashlti3@FUNCTION, $pop498, $3, $4, $pop901 + i32.const $push499=, 672 + i32.add $push500=, $52, $pop499 + call __lshrti3@FUNCTION, $pop500, $3, $4, $41 + i32.const $push501=, 576 + i32.add $push502=, $52, $pop501 + call __ashlti3@FUNCTION, $pop502, $5, $6, $33 + i32.const $push503=, 704 + i32.add $push504=, $52, $pop503 + call __ashlti3@FUNCTION, $pop504, $1, $2, $34 + i32.const $push505=, 480 + i32.add $push506=, $52, $pop505 + i32.const $push6=, 896 + i32.sub $push7=, $pop6, $33 + call __lshrti3@FUNCTION, $pop506, $1, $2, $pop7 + i32.const $push507=, 464 + i32.add $push508=, $52, $pop507 + i32.const $push8=, -768 + i32.add $push900=, $33, $pop8 + tee_local $push899=, $36=, $pop900 + call __ashlti3@FUNCTION, $pop508, $3, $4, $pop899 + i32.const $push509=, 496 + i32.add $push510=, $52, $pop509 + i32.const $push9=, -896 + i32.add $push10=, $33, $pop9 + call __ashlti3@FUNCTION, $pop510, $1, $2, $pop10 + i32.const $push511=, 352 + i32.add $push512=, $52, $pop511 + i32.const $push11=, 640 + i32.sub $push898=, $pop11, $33 + tee_local $push897=, $45=, $pop898 + call __lshrti3@FUNCTION, $pop512, $5, $6, $pop897 + i32.const $push513=, 336 + i32.add $push514=, $52, $pop513 + i32.const $push12=, -512 + i32.add $push896=, $33, $pop12 + tee_local $push895=, $37=, $pop896 + call __ashlti3@FUNCTION, $pop514, $7, $8, $pop895 + i32.const $push515=, 368 + i32.add $push516=, $52, $pop515 + i32.const $push13=, -640 + i32.add $push894=, $33, $pop13 + tee_local $push893=, $51=, $pop894 + call __ashlti3@FUNCTION, $pop516, $5, $6, $pop893 + i32.const $push517=, 432 + i32.add $push518=, $52, $pop517 + i32.const $push14=, 768 + i32.sub $push892=, $pop14, $33 + tee_local $push891=, $38=, $pop892 + call __lshrti3@FUNCTION, $pop518, $3, $4, $pop891 + i32.const $push519=, 864 + i32.add $push520=, $52, $pop519 + call __lshrti3@FUNCTION, $pop520, $9, $10, $43 + i32.const $push521=, 848 + i32.add $push522=, $52, $pop521 + call __ashlti3@FUNCTION, $pop522, $11, $12, $34 + i32.const $push523=, 880 + i32.add $push524=, $52, $pop523 + call __ashlti3@FUNCTION, $pop524, $9, $10, $39 + i32.const $push525=, 1008 + i32.add $push526=, $52, $pop525 + call __ashlti3@FUNCTION, $pop526, $15, $16, $33 + i32.const $push527=, 960 + i32.add $push528=, $52, $pop527 + call __lshrti3@FUNCTION, $pop528, $13, $14, $41 + i32.const $push529=, 976 + i32.add $push530=, $52, $pop529 + call __ashlti3@FUNCTION, $pop530, $13, $14, $42 + i32.const $push531=, 816 + i32.add $push532=, $52, $pop531 + call __lshrti3@FUNCTION, $pop532, $11, $12, $35 + i32.const $push533=, 240 + i32.add $push534=, $52, $pop533 + i32.const $push15=, 512 + i32.sub $push890=, $pop15, $33 + tee_local $push889=, $39=, $pop890 + call __lshrti3@FUNCTION, $pop534, $7, $8, $pop889 + i32.const $push535=, 192 + i32.add $push536=, $52, $pop535 + call __lshrti3@FUNCTION, $pop536, $5, $6, $39 + i32.const $push537=, 208 + i32.add $push538=, $52, $pop537 + i32.const $push888=, 128 + i32.sub $push887=, $pop888, $39 + tee_local $push886=, $44=, $pop887 + call __ashlti3@FUNCTION, $pop538, $7, $8, $pop886 + i32.const $push539=, 224 + i32.add $push540=, $52, $pop539 + call __lshrti3@FUNCTION, $pop540, $7, $8, $43 + i32.const $push541=, 768 + i32.add $push542=, $52, $pop541 + call __lshrti3@FUNCTION, $pop542, $9, $10, $35 + i32.const $push543=, 784 + i32.add $push544=, $52, $pop543 + call __ashlti3@FUNCTION, $pop544, $11, $12, $50 + i32.const $push545=, 800 + i32.add $push546=, $52, $pop545 + call __lshrti3@FUNCTION, $pop546, $11, $12, $41 + i32.const $push547=, 992 + i32.add $push548=, $52, $pop547 + call __ashlti3@FUNCTION, $pop548, $13, $14, $33 + i32.const $push549=, 832 + i32.add $push550=, $52, $pop549 + call __ashlti3@FUNCTION, $pop550, $9, $10, $34 + i32.const $push551=, 384 + i32.add $push552=, $52, $pop551 + call __lshrti3@FUNCTION, $pop552, $1, $2, $38 + i32.const $push553=, 400 + i32.add $push554=, $52, $pop553 + i32.const $push885=, 128 + i32.sub $push16=, $pop885, $38 + call __ashlti3@FUNCTION, $pop554, $3, $4, $pop16 + i32.const $push555=, 416 + i32.add $push556=, $52, $pop555 + call __lshrti3@FUNCTION, $pop556, $3, $4, $45 + i32.const $push557=, 320 + i32.add $push558=, $52, $pop557 + call __ashlti3@FUNCTION, $pop558, $5, $6, $37 + i32.const $push559=, 448 + i32.add $push560=, $52, $pop559 + call __ashlti3@FUNCTION, $pop560, $1, $2, $36 + i32.const $push561=, 128 + i32.add $push562=, $52, $pop561 + call __lshrti3@FUNCTION, $pop562, $5, $6, $35 + i32.const $push563=, 144 + i32.add $push564=, $52, $pop563 + i32.const $push884=, 384 + i32.sub $push17=, $pop884, $39 + call __ashlti3@FUNCTION, $pop564, $7, $8, $pop17 + i32.const $push565=, 160 + i32.add $push566=, $52, $pop565 + call __lshrti3@FUNCTION, $pop566, $7, $8, $41 + call __lshrti3@FUNCTION, $52, $1, $2, $39 + i32.const $push567=, 16 + i32.add $push568=, $52, $pop567 + call __ashlti3@FUNCTION, $pop568, $3, $4, $44 + i32.const $push569=, 32 + i32.add $push570=, $52, $pop569 + call __lshrti3@FUNCTION, $pop570, $3, $4, $43 + i32.const $push571=, 64 + i32.add $push572=, $52, $pop571 + i32.const $push883=, 256 + i32.sub $push882=, $pop883, $39 + tee_local $push881=, $40=, $pop882 + call __ashlti3@FUNCTION, $pop572, $5, $6, $pop881 + i32.const $push573=, 896 + i32.add $push574=, $52, $pop573 + call __ashlti3@FUNCTION, $pop574, $9, $10, $33 + i32.const $push575=, 256 + i32.add $push576=, $52, $pop575 + call __ashlti3@FUNCTION, $pop576, $1, $2, $37 + i32.const $push577=, 912 + i32.add $push578=, $52, $pop577 + call __ashlti3@FUNCTION, $pop578, $11, $12, $33 + i32.const $push579=, 928 + i32.add $push580=, $52, $pop579 + call __lshrti3@FUNCTION, $pop580, $9, $10, $41 + i32.const $push581=, 944 + i32.add $push582=, $52, $pop581 + call __ashlti3@FUNCTION, $pop582, $9, $10, $42 + i32.const $push583=, 80 + i32.add $push584=, $52, $pop583 + call __ashlti3@FUNCTION, $pop584, $7, $8, $40 + i32.const $push585=, 96 + i32.add $push586=, $52, $pop585 + i32.const $push880=, 128 + i32.sub $push18=, $pop880, $40 + call __lshrti3@FUNCTION, $pop586, $5, $6, $pop18 + i32.const $push587=, 112 + i32.add $push588=, $52, $pop587 + call __ashlti3@FUNCTION, $pop588, $5, $6, $44 + i32.const $push589=, 48 + i32.add $push590=, $52, $pop589 + call __lshrti3@FUNCTION, $pop590, $3, $4, $39 + i32.const $push591=, 176 + i32.add $push592=, $52, $pop591 + call __lshrti3@FUNCTION, $pop592, $7, $8, $35 + i32.const $push593=, 288 + i32.add $push594=, $52, $pop593 + call __lshrti3@FUNCTION, $pop594, $1, $2, $45 + i32.const $push595=, 272 + i32.add $push596=, $52, $pop595 + call __ashlti3@FUNCTION, $pop596, $3, $4, $37 + i32.const $push597=, 304 + i32.add $push598=, $52, $pop597 + call __ashlti3@FUNCTION, $pop598, $1, $2, $51 + i32.const $push19=, 8 + i32.add $push26=, $0, $pop19 + i32.const $push599=, 512 + i32.add $push600=, $52, $pop599 + i32.const $push879=, 8 + i32.add $push20=, $pop600, $pop879 + i64.load $push21=, 0($pop20) + i64.const $push22=, 0 + i32.const $push878=, 128 + i32.lt_u $push877=, $33, $pop878 + tee_local $push876=, $41=, $pop877 + i64.select $push23=, $pop21, $pop22, $pop876 + i64.const $push875=, 0 + i32.const $push874=, 256 + i32.lt_u $push873=, $33, $pop874 + tee_local $push872=, $42=, $pop873 + i64.select $push24=, $pop23, $pop875, $pop872 + i64.const $push871=, 0 + i32.const $push870=, 512 + i32.lt_u $push869=, $33, $pop870 + tee_local $push868=, $43=, $pop869 + i64.select $push25=, $pop24, $pop871, $pop868 + i64.store 0($pop26), $pop25 + i64.load $push27=, 512($52) + i64.const $push867=, 0 + i64.select $push28=, $pop27, $pop867, $41 + i64.const $push866=, 0 + i64.select $push29=, $pop28, $pop866, $42 + i64.const $push865=, 0 + i64.select $push30=, $pop29, $pop865, $43 + i64.store 0($0), $pop30 + i32.const $push42=, 24 + i32.add $push43=, $0, $pop42 + i32.const $push601=, 528 + i32.add $push602=, $52, $pop601 + i32.const $push864=, 8 + i32.add $push31=, $pop602, $pop864 + i64.load $push32=, 0($pop31) + i32.const $push603=, 544 + i32.add $push604=, $52, $pop603 + i32.const $push863=, 8 + i32.add $push33=, $pop604, $pop863 + i64.load $push34=, 0($pop33) + i64.or $push35=, $pop32, $pop34 + i32.const $push605=, 560 + i32.add $push606=, $52, $pop605 + i32.const $push862=, 8 + i32.add $push36=, $pop606, $pop862 + i64.load $push37=, 0($pop36) + i64.select $push38=, $pop35, $pop37, $41 + i64.select $push39=, $pop38, $4, $33 + i64.const $push861=, 0 + i64.select $push40=, $pop39, $pop861, $42 + i64.const $push860=, 0 + i64.select $push41=, $pop40, $pop860, $43 + i64.store 0($pop43), $pop41 + i32.const $push52=, 16 + i32.add $push53=, $0, $pop52 + i64.load $push44=, 528($52) + i64.load $push45=, 544($52) + i64.or $push46=, $pop44, $pop45 + i64.load $push47=, 560($52) + i64.select $push48=, $pop46, $pop47, $41 + i64.select $push49=, $pop48, $3, $33 + i64.const $push859=, 0 + i64.select $push50=, $pop49, $pop859, $42 + i64.const $push858=, 0 + i64.select $push51=, $pop50, $pop858, $43 + i64.store 0($pop53), $pop51 + i32.const $push79=, 56 + i32.add $push80=, $0, $pop79 + i32.const $push613=, 592 + i32.add $push614=, $52, $pop613 + i32.const $push857=, 8 + i32.add $push63=, $pop614, $pop857 + i64.load $push64=, 0($pop63) + i32.const $push615=, 608 + i32.add $push616=, $52, $pop615 + i32.const $push856=, 8 + i32.add $push65=, $pop616, $pop856 + i64.load $push66=, 0($pop65) + i64.or $push67=, $pop64, $pop66 + i32.const $push617=, 624 + i32.add $push618=, $52, $pop617 + i32.const $push855=, 8 + i32.add $push68=, $pop618, $pop855 + i64.load $push69=, 0($pop68) + i64.select $push70=, $pop67, $pop69, $41 + i64.select $push71=, $pop70, $8, $33 + i32.const $push619=, 688 + i32.add $push620=, $52, $pop619 + i32.const $push854=, 8 + i32.add $push72=, $pop620, $pop854 + i64.load $push73=, 0($pop72) + i64.const $push853=, 0 + i32.const $push852=, 128 + i32.lt_u $push851=, $35, $pop852 + tee_local $push850=, $45=, $pop851 + i64.select $push74=, $pop73, $pop853, $pop850 + i64.or $push75=, $pop71, $pop74 + i32.const $push609=, 720 + i32.add $push610=, $52, $pop609 + i32.const $push849=, 8 + i32.add $push56=, $pop610, $pop849 + i64.load $push57=, 0($pop56) + i32.const $push607=, 736 + i32.add $push608=, $52, $pop607 + i32.const $push848=, 8 + i32.add $push54=, $pop608, $pop848 + i64.load $push55=, 0($pop54) + i64.or $push58=, $pop57, $pop55 + i32.const $push611=, 752 + i32.add $push612=, $52, $pop611 + i32.const $push847=, 8 + i32.add $push59=, $pop612, $pop847 + i64.load $push60=, 0($pop59) + i32.const $push846=, 128 + i32.lt_u $push845=, $34, $pop846 + tee_local $push844=, $44=, $pop845 + i64.select $push61=, $pop58, $pop60, $pop844 + i64.select $push62=, $pop61, $4, $34 + i64.select $push76=, $pop75, $pop62, $42 + i64.select $push77=, $pop76, $8, $33 + i64.const $push843=, 0 + i64.select $push78=, $pop77, $pop843, $43 + i64.store 0($pop80), $pop78 + i32.const $push99=, 48 + i32.add $push100=, $0, $pop99 + i64.load $push87=, 592($52) + i64.load $push88=, 608($52) + i64.or $push89=, $pop87, $pop88 + i64.load $push90=, 624($52) + i64.select $push91=, $pop89, $pop90, $41 + i64.select $push92=, $pop91, $7, $33 + i64.load $push93=, 688($52) + i64.const $push842=, 0 + i64.select $push94=, $pop93, $pop842, $45 + i64.or $push95=, $pop92, $pop94 + i64.load $push82=, 720($52) + i64.load $push81=, 736($52) + i64.or $push83=, $pop82, $pop81 + i64.load $push84=, 752($52) + i64.select $push85=, $pop83, $pop84, $44 + i64.select $push86=, $pop85, $3, $34 + i64.select $push96=, $pop95, $pop86, $42 + i64.select $push97=, $pop96, $7, $33 + i64.const $push841=, 0 + i64.select $push98=, $pop97, $pop841, $43 + i64.store 0($pop100), $pop98 + i32.const $push120=, 40 + i32.add $push121=, $0, $pop120 + i32.const $push627=, 576 + i32.add $push628=, $52, $pop627 + i32.const $push840=, 8 + i32.add $push110=, $pop628, $pop840 + i64.load $push111=, 0($pop110) + i64.const $push839=, 0 + i64.select $push112=, $pop111, $pop839, $41 + i32.const $push621=, 640 + i32.add $push622=, $52, $pop621 + i32.const $push838=, 8 + i32.add $push101=, $pop622, $pop838 + i64.load $push102=, 0($pop101) + i32.const $push623=, 656 + i32.add $push624=, $52, $pop623 + i32.const $push837=, 8 + i32.add $push103=, $pop624, $pop837 + i64.load $push104=, 0($pop103) + i64.or $push105=, $pop102, $pop104 + i32.const $push625=, 672 + i32.add $push626=, $52, $pop625 + i32.const $push836=, 8 + i32.add $push106=, $pop626, $pop836 + i64.load $push107=, 0($pop106) + i64.select $push108=, $pop105, $pop107, $45 + i64.select $push109=, $pop108, $2, $35 + i64.or $push113=, $pop112, $pop109 + i32.const $push629=, 704 + i32.add $push630=, $52, $pop629 + i32.const $push835=, 8 + i32.add $push114=, $pop630, $pop835 + i64.load $push115=, 0($pop114) + i64.const $push834=, 0 + i64.select $push116=, $pop115, $pop834, $44 + i64.select $push117=, $pop113, $pop116, $42 + i64.select $push118=, $pop117, $6, $33 + i64.const $push833=, 0 + i64.select $push119=, $pop118, $pop833, $43 + i64.store 0($pop121), $pop119 + i32.const $push136=, 32 + i32.add $push137=, $0, $pop136 + i64.load $push128=, 576($52) + i64.const $push832=, 0 + i64.select $push129=, $pop128, $pop832, $41 + i64.load $push122=, 640($52) + i64.load $push123=, 656($52) + i64.or $push124=, $pop122, $pop123 + i64.load $push125=, 672($52) + i64.select $push126=, $pop124, $pop125, $45 + i64.select $push127=, $pop126, $1, $35 + i64.or $push130=, $pop129, $pop127 + i64.load $push131=, 704($52) + i64.const $push831=, 0 + i64.select $push132=, $pop131, $pop831, $44 + i64.select $push133=, $pop130, $pop132, $42 + i64.select $push134=, $pop133, $5, $33 + i64.const $push830=, 0 + i64.select $push135=, $pop134, $pop830, $43 + i64.store 0($pop137), $pop135 + i32.const $push193=, 120 + i32.add $push194=, $0, $pop193 + i32.const $push651=, 1008 + i32.add $push652=, $52, $pop651 + i32.const $push829=, 8 + i32.add $push171=, $pop652, $pop829 + i64.load $push172=, 0($pop171) + i32.const $push653=, 960 + i32.add $push654=, $52, $pop653 + i32.const $push828=, 8 + i32.add $push173=, $pop654, $pop828 + i64.load $push174=, 0($pop173) + i64.or $push175=, $pop172, $pop174 + i32.const $push655=, 976 + i32.add $push656=, $52, $pop655 + i32.const $push827=, 8 + i32.add $push176=, $pop656, $pop827 + i64.load $push177=, 0($pop176) + i64.select $push178=, $pop175, $pop177, $41 + i64.select $push179=, $pop178, $16, $33 + i32.const $push657=, 816 + i32.add $push658=, $52, $pop657 + i32.const $push826=, 8 + i32.add $push180=, $pop658, $pop826 + i64.load $push181=, 0($pop180) + i64.const $push825=, 0 + i64.select $push182=, $pop181, $pop825, $45 + i64.or $push183=, $pop179, $pop182 + i32.const $push647=, 848 + i32.add $push648=, $52, $pop647 + i32.const $push824=, 8 + i32.add $push164=, $pop648, $pop824 + i64.load $push165=, 0($pop164) + i32.const $push645=, 864 + i32.add $push646=, $52, $pop645 + i32.const $push823=, 8 + i32.add $push162=, $pop646, $pop823 + i64.load $push163=, 0($pop162) + i64.or $push166=, $pop165, $pop163 + i32.const $push649=, 880 + i32.add $push650=, $52, $pop649 + i32.const $push822=, 8 + i32.add $push167=, $pop650, $pop822 + i64.load $push168=, 0($pop167) + i64.select $push169=, $pop166, $pop168, $44 + i64.select $push170=, $pop169, $12, $34 + i64.select $push184=, $pop183, $pop170, $42 + i64.select $push185=, $pop184, $16, $33 + i32.const $push659=, 240 + i32.add $push660=, $52, $pop659 + i32.const $push821=, 8 + i32.add $push186=, $pop660, $pop821 + i64.load $push187=, 0($pop186) + i64.const $push820=, 0 + i32.const $push819=, 128 + i32.lt_u $push818=, $39, $pop819 + tee_local $push817=, $50=, $pop818 + i64.select $push188=, $pop187, $pop820, $pop817 + i64.const $push816=, 0 + i32.const $push815=, 256 + i32.lt_u $push814=, $39, $pop815 + tee_local $push813=, $51=, $pop814 + i64.select $push189=, $pop188, $pop816, $pop813 + i64.or $push190=, $pop185, $pop189 + i32.const $push639=, 336 + i32.add $push640=, $52, $pop639 + i32.const $push812=, 8 + i32.add $push149=, $pop640, $pop812 + i64.load $push150=, 0($pop149) + i32.const $push637=, 352 + i32.add $push638=, $52, $pop637 + i32.const $push811=, 8 + i32.add $push147=, $pop638, $pop811 + i64.load $push148=, 0($pop147) + i64.or $push151=, $pop150, $pop148 + i32.const $push641=, 368 + i32.add $push642=, $52, $pop641 + i32.const $push810=, 8 + i32.add $push152=, $pop642, $pop810 + i64.load $push153=, 0($pop152) + i32.const $push809=, 128 + i32.lt_u $push808=, $37, $pop809 + tee_local $push807=, $47=, $pop808 + i64.select $push154=, $pop151, $pop153, $pop807 + i64.select $push155=, $pop154, $8, $37 + i32.const $push643=, 432 + i32.add $push644=, $52, $pop643 + i32.const $push806=, 8 + i32.add $push156=, $pop644, $pop806 + i64.load $push157=, 0($pop156) + i64.const $push805=, 0 + i32.const $push804=, 128 + i32.lt_u $push803=, $38, $pop804 + tee_local $push802=, $48=, $pop803 + i64.select $push158=, $pop157, $pop805, $pop802 + i64.or $push159=, $pop155, $pop158 + i32.const $push633=, 464 + i32.add $push634=, $52, $pop633 + i32.const $push801=, 8 + i32.add $push140=, $pop634, $pop801 + i64.load $push141=, 0($pop140) + i32.const $push631=, 480 + i32.add $push632=, $52, $pop631 + i32.const $push800=, 8 + i32.add $push138=, $pop632, $pop800 + i64.load $push139=, 0($pop138) + i64.or $push142=, $pop141, $pop139 + i32.const $push635=, 496 + i32.add $push636=, $52, $pop635 + i32.const $push799=, 8 + i32.add $push143=, $pop636, $pop799 + i64.load $push144=, 0($pop143) + i32.const $push798=, 128 + i32.lt_u $push797=, $36, $pop798 + tee_local $push796=, $46=, $pop797 + i64.select $push145=, $pop142, $pop144, $pop796 + i64.select $push146=, $pop145, $4, $36 + i32.const $push795=, 256 + i32.lt_u $push794=, $37, $pop795 + tee_local $push793=, $49=, $pop794 + i64.select $push160=, $pop159, $pop146, $pop793 + i64.select $push161=, $pop160, $8, $37 + i64.select $push191=, $pop190, $pop161, $43 + i64.select $push192=, $pop191, $16, $33 + i64.store 0($pop194), $pop192 + i32.const $push235=, 112 + i32.add $push236=, $0, $pop235 + i64.load $push218=, 1008($52) + i64.load $push219=, 960($52) + i64.or $push220=, $pop218, $pop219 + i64.load $push221=, 976($52) + i64.select $push222=, $pop220, $pop221, $41 + i64.select $push223=, $pop222, $15, $33 + i64.load $push224=, 816($52) + i64.const $push792=, 0 + i64.select $push225=, $pop224, $pop792, $45 + i64.or $push226=, $pop223, $pop225 + i64.load $push213=, 848($52) + i64.load $push212=, 864($52) + i64.or $push214=, $pop213, $pop212 + i64.load $push215=, 880($52) + i64.select $push216=, $pop214, $pop215, $44 + i64.select $push217=, $pop216, $11, $34 + i64.select $push227=, $pop226, $pop217, $42 + i64.select $push228=, $pop227, $15, $33 + i64.load $push229=, 240($52) + i64.const $push791=, 0 + i64.select $push230=, $pop229, $pop791, $50 + i64.const $push790=, 0 + i64.select $push231=, $pop230, $pop790, $51 + i64.or $push232=, $pop228, $pop231 + i64.load $push202=, 336($52) + i64.load $push201=, 352($52) + i64.or $push203=, $pop202, $pop201 + i64.load $push204=, 368($52) + i64.select $push205=, $pop203, $pop204, $47 + i64.select $push206=, $pop205, $7, $37 + i64.load $push207=, 432($52) + i64.const $push789=, 0 + i64.select $push208=, $pop207, $pop789, $48 + i64.or $push209=, $pop206, $pop208 + i64.load $push196=, 464($52) + i64.load $push195=, 480($52) + i64.or $push197=, $pop196, $pop195 + i64.load $push198=, 496($52) + i64.select $push199=, $pop197, $pop198, $46 + i64.select $push200=, $pop199, $3, $36 + i64.select $push210=, $pop209, $pop200, $49 + i64.select $push211=, $pop210, $7, $37 + i64.select $push233=, $pop232, $pop211, $43 + i64.select $push234=, $pop233, $15, $33 + i64.store 0($pop236), $pop234 + i32.const $push286=, 104 + i32.add $push287=, $0, $pop286 + i32.const $push673=, 992 + i32.add $push674=, $52, $pop673 + i32.const $push788=, 8 + i32.add $push256=, $pop674, $pop788 + i64.load $push257=, 0($pop256) + i64.const $push787=, 0 + i64.select $push258=, $pop257, $pop787, $41 + i32.const $push667=, 768 + i32.add $push668=, $52, $pop667 + i32.const $push786=, 8 + i32.add $push247=, $pop668, $pop786 + i64.load $push248=, 0($pop247) + i32.const $push669=, 784 + i32.add $push670=, $52, $pop669 + i32.const $push785=, 8 + i32.add $push249=, $pop670, $pop785 + i64.load $push250=, 0($pop249) + i64.or $push251=, $pop248, $pop250 + i32.const $push671=, 800 + i32.add $push672=, $52, $pop671 + i32.const $push784=, 8 + i32.add $push252=, $pop672, $pop784 + i64.load $push253=, 0($pop252) + i64.select $push254=, $pop251, $pop253, $45 + i64.select $push255=, $pop254, $10, $35 + i64.or $push259=, $pop258, $pop255 + i32.const $push675=, 832 + i32.add $push676=, $52, $pop675 + i32.const $push783=, 8 + i32.add $push260=, $pop676, $pop783 + i64.load $push261=, 0($pop260) + i64.const $push782=, 0 + i64.select $push262=, $pop261, $pop782, $44 + i64.select $push263=, $pop259, $pop262, $42 + i64.select $push264=, $pop263, $14, $33 + i32.const $push661=, 192 + i32.add $push662=, $52, $pop661 + i32.const $push781=, 8 + i32.add $push237=, $pop662, $pop781 + i64.load $push238=, 0($pop237) + i32.const $push663=, 208 + i32.add $push664=, $52, $pop663 + i32.const $push780=, 8 + i32.add $push239=, $pop664, $pop780 + i64.load $push240=, 0($pop239) + i64.or $push241=, $pop238, $pop240 + i32.const $push665=, 224 + i32.add $push666=, $52, $pop665 + i32.const $push779=, 8 + i32.add $push242=, $pop666, $pop779 + i64.load $push243=, 0($pop242) + i64.select $push244=, $pop241, $pop243, $50 + i64.select $push245=, $pop244, $6, $39 + i64.const $push778=, 0 + i64.select $push246=, $pop245, $pop778, $51 + i64.or $push265=, $pop264, $pop246 + i32.const $push683=, 320 + i32.add $push684=, $52, $pop683 + i32.const $push777=, 8 + i32.add $push275=, $pop684, $pop777 + i64.load $push276=, 0($pop275) + i64.const $push776=, 0 + i64.select $push277=, $pop276, $pop776, $47 + i32.const $push677=, 384 + i32.add $push678=, $52, $pop677 + i32.const $push775=, 8 + i32.add $push266=, $pop678, $pop775 + i64.load $push267=, 0($pop266) + i32.const $push679=, 400 + i32.add $push680=, $52, $pop679 + i32.const $push774=, 8 + i32.add $push268=, $pop680, $pop774 + i64.load $push269=, 0($pop268) + i64.or $push270=, $pop267, $pop269 + i32.const $push681=, 416 + i32.add $push682=, $52, $pop681 + i32.const $push773=, 8 + i32.add $push271=, $pop682, $pop773 + i64.load $push272=, 0($pop271) + i64.select $push273=, $pop270, $pop272, $48 + i64.select $push274=, $pop273, $2, $38 + i64.or $push278=, $pop277, $pop274 + i32.const $push685=, 448 + i32.add $push686=, $52, $pop685 + i32.const $push772=, 8 + i32.add $push279=, $pop686, $pop772 + i64.load $push280=, 0($pop279) + i64.const $push771=, 0 + i64.select $push281=, $pop280, $pop771, $46 + i64.select $push282=, $pop278, $pop281, $49 + i64.select $push283=, $pop282, $6, $37 + i64.select $push284=, $pop265, $pop283, $43 + i64.select $push285=, $pop284, $14, $33 + i64.store 0($pop287), $pop285 + i32.const $push324=, 96 + i32.add $push325=, $0, $pop324 + i64.load $push301=, 992($52) + i64.const $push770=, 0 + i64.select $push302=, $pop301, $pop770, $41 + i64.load $push295=, 768($52) + i64.load $push296=, 784($52) + i64.or $push297=, $pop295, $pop296 + i64.load $push298=, 800($52) + i64.select $push299=, $pop297, $pop298, $45 + i64.select $push300=, $pop299, $9, $35 + i64.or $push303=, $pop302, $pop300 + i64.load $push304=, 832($52) + i64.const $push769=, 0 + i64.select $push305=, $pop304, $pop769, $44 + i64.select $push306=, $pop303, $pop305, $42 + i64.select $push307=, $pop306, $13, $33 + i64.load $push288=, 192($52) + i64.load $push289=, 208($52) + i64.or $push290=, $pop288, $pop289 + i64.load $push291=, 224($52) + i64.select $push292=, $pop290, $pop291, $50 + i64.select $push293=, $pop292, $5, $39 + i64.const $push768=, 0 + i64.select $push294=, $pop293, $pop768, $51 + i64.or $push308=, $pop307, $pop294 + i64.load $push315=, 320($52) + i64.const $push767=, 0 + i64.select $push316=, $pop315, $pop767, $47 + i64.load $push309=, 384($52) + i64.load $push310=, 400($52) + i64.or $push311=, $pop309, $pop310 + i64.load $push312=, 416($52) + i64.select $push313=, $pop311, $pop312, $48 + i64.select $push314=, $pop313, $1, $38 + i64.or $push317=, $pop316, $pop314 + i64.load $push318=, 448($52) + i64.const $push766=, 0 + i64.select $push319=, $pop318, $pop766, $46 + i64.select $push320=, $pop317, $pop319, $49 + i64.select $push321=, $pop320, $5, $37 + i64.select $push322=, $pop308, $pop321, $43 + i64.select $push323=, $pop322, $13, $33 + i64.store 0($pop325), $pop323 + i32.const $push361=, 72 + i32.add $push362=, $0, $pop361 + i32.const $push699=, 896 + i32.add $push700=, $52, $pop699 + i32.const $push765=, 8 + i32.add $push350=, $pop700, $pop765 + i64.load $push351=, 0($pop350) + i64.const $push764=, 0 + i64.select $push352=, $pop351, $pop764, $41 + i64.const $push763=, 0 + i64.select $push353=, $pop352, $pop763, $42 + i32.const $push762=, 8 + i32.add $push335=, $52, $pop762 + i64.load $push336=, 0($pop335) + i32.const $push693=, 16 + i32.add $push694=, $52, $pop693 + i32.const $push761=, 8 + i32.add $push337=, $pop694, $pop761 + i64.load $push338=, 0($pop337) + i64.or $push339=, $pop336, $pop338 + i32.const $push695=, 32 + i32.add $push696=, $52, $pop695 + i32.const $push760=, 8 + i32.add $push340=, $pop696, $pop760 + i64.load $push341=, 0($pop340) + i64.select $push342=, $pop339, $pop341, $50 + i64.select $push343=, $pop342, $2, $39 + i32.const $push697=, 64 + i32.add $push698=, $52, $pop697 + i32.const $push759=, 8 + i32.add $push344=, $pop698, $pop759 + i64.load $push345=, 0($pop344) + i64.const $push758=, 0 + i32.const $push757=, 128 + i32.lt_u $push756=, $40, $pop757 + tee_local $push755=, $34=, $pop756 + i64.select $push346=, $pop345, $pop758, $pop755 + i64.or $push347=, $pop343, $pop346 + i32.const $push687=, 128 + i32.add $push688=, $52, $pop687 + i32.const $push754=, 8 + i32.add $push326=, $pop688, $pop754 + i64.load $push327=, 0($pop326) + i32.const $push689=, 144 + i32.add $push690=, $52, $pop689 + i32.const $push753=, 8 + i32.add $push328=, $pop690, $pop753 + i64.load $push329=, 0($pop328) + i64.or $push330=, $pop327, $pop329 + i32.const $push691=, 160 + i32.add $push692=, $52, $pop691 + i32.const $push752=, 8 + i32.add $push331=, $pop692, $pop752 + i64.load $push332=, 0($pop331) + i64.select $push333=, $pop330, $pop332, $45 + i64.select $push334=, $pop333, $6, $35 + i64.select $push348=, $pop347, $pop334, $51 + i64.select $push349=, $pop348, $2, $39 + i64.or $push354=, $pop353, $pop349 + i32.const $push701=, 256 + i32.add $push702=, $52, $pop701 + i32.const $push751=, 8 + i32.add $push355=, $pop702, $pop751 + i64.load $push356=, 0($pop355) + i64.const $push750=, 0 + i64.select $push357=, $pop356, $pop750, $47 + i64.const $push749=, 0 + i64.select $push358=, $pop357, $pop749, $49 + i64.select $push359=, $pop354, $pop358, $43 + i64.select $push360=, $pop359, $10, $33 + i64.store 0($pop362), $pop360 + i32.const $push389=, 64 + i32.add $push390=, $0, $pop389 + i64.load $push380=, 896($52) + i64.const $push748=, 0 + i64.select $push381=, $pop380, $pop748, $41 + i64.const $push747=, 0 + i64.select $push382=, $pop381, $pop747, $42 + i64.load $push369=, 0($52) + i64.load $push370=, 16($52) + i64.or $push371=, $pop369, $pop370 + i64.load $push372=, 32($52) + i64.select $push373=, $pop371, $pop372, $50 + i64.select $push374=, $pop373, $1, $39 + i64.load $push375=, 64($52) + i64.const $push746=, 0 + i64.select $push376=, $pop375, $pop746, $34 + i64.or $push377=, $pop374, $pop376 + i64.load $push363=, 128($52) + i64.load $push364=, 144($52) + i64.or $push365=, $pop363, $pop364 + i64.load $push366=, 160($52) + i64.select $push367=, $pop365, $pop366, $45 + i64.select $push368=, $pop367, $5, $35 + i64.select $push378=, $pop377, $pop368, $51 + i64.select $push379=, $pop378, $1, $39 + i64.or $push383=, $pop382, $pop379 + i64.load $push384=, 256($52) + i64.const $push745=, 0 + i64.select $push385=, $pop384, $pop745, $47 + i64.const $push744=, 0 + i64.select $push386=, $pop385, $pop744, $49 + i64.select $push387=, $pop383, $pop386, $43 + i64.select $push388=, $pop387, $9, $33 + i64.store 0($pop390), $pop388 + i32.const $push432=, 88 + i32.add $push433=, $0, $pop432 + i32.const $push703=, 912 + i32.add $push704=, $52, $pop703 + i32.const $push743=, 8 + i32.add $push391=, $pop704, $pop743 + i64.load $push392=, 0($pop391) + i32.const $push705=, 928 + i32.add $push706=, $52, $pop705 + i32.const $push742=, 8 + i32.add $push393=, $pop706, $pop742 + i64.load $push394=, 0($pop393) + i64.or $push395=, $pop392, $pop394 + i32.const $push707=, 944 + i32.add $push708=, $52, $pop707 + i32.const $push741=, 8 + i32.add $push396=, $pop708, $pop741 + i64.load $push397=, 0($pop396) + i64.select $push398=, $pop395, $pop397, $41 + i64.select $push399=, $pop398, $12, $33 + i64.const $push740=, 0 + i64.select $push400=, $pop399, $pop740, $42 + i32.const $push715=, 48 + i32.add $push716=, $52, $pop715 + i32.const $push739=, 8 + i32.add $push410=, $pop716, $pop739 + i64.load $push411=, 0($pop410) + i64.const $push738=, 0 + i64.select $push412=, $pop411, $pop738, $50 + i32.const $push709=, 80 + i32.add $push710=, $52, $pop709 + i32.const $push737=, 8 + i32.add $push401=, $pop710, $pop737 + i64.load $push402=, 0($pop401) + i32.const $push711=, 96 + i32.add $push712=, $52, $pop711 + i32.const $push736=, 8 + i32.add $push403=, $pop712, $pop736 + i64.load $push404=, 0($pop403) + i64.or $push405=, $pop402, $pop404 + i32.const $push713=, 112 + i32.add $push714=, $52, $pop713 + i32.const $push735=, 8 + i32.add $push406=, $pop714, $pop735 + i64.load $push407=, 0($pop406) + i64.select $push408=, $pop405, $pop407, $34 + i64.select $push409=, $pop408, $8, $40 + i64.or $push413=, $pop412, $pop409 + i32.const $push717=, 176 + i32.add $push718=, $52, $pop717 + i32.const $push734=, 8 + i32.add $push414=, $pop718, $pop734 + i64.load $push415=, 0($pop414) + i64.const $push733=, 0 + i64.select $push416=, $pop415, $pop733, $45 + i64.select $push417=, $pop413, $pop416, $51 + i64.select $push418=, $pop417, $4, $39 + i64.or $push419=, $pop400, $pop418 + i32.const $push721=, 272 + i32.add $push722=, $52, $pop721 + i32.const $push732=, 8 + i32.add $push422=, $pop722, $pop732 + i64.load $push423=, 0($pop422) + i32.const $push719=, 288 + i32.add $push720=, $52, $pop719 + i32.const $push731=, 8 + i32.add $push420=, $pop720, $pop731 + i64.load $push421=, 0($pop420) + i64.or $push424=, $pop423, $pop421 + i32.const $push723=, 304 + i32.add $push724=, $52, $pop723 + i32.const $push730=, 8 + i32.add $push425=, $pop724, $pop730 + i64.load $push426=, 0($pop425) + i64.select $push427=, $pop424, $pop426, $47 + i64.select $push428=, $pop427, $4, $37 + i64.const $push729=, 0 + i64.select $push429=, $pop428, $pop729, $49 + i64.select $push430=, $pop419, $pop429, $43 + i64.select $push431=, $pop430, $12, $33 + i64.store 0($pop433), $pop431 + i32.const $push464=, 80 + i32.add $push465=, $0, $pop464 + i64.load $push434=, 912($52) + i64.load $push435=, 928($52) + i64.or $push436=, $pop434, $pop435 + i64.load $push437=, 944($52) + i64.select $push438=, $pop436, $pop437, $41 + i64.select $push439=, $pop438, $11, $33 + i64.const $push728=, 0 + i64.select $push440=, $pop439, $pop728, $42 + i64.load $push447=, 48($52) + i64.const $push727=, 0 + i64.select $push448=, $pop447, $pop727, $50 + i64.load $push441=, 80($52) + i64.load $push442=, 96($52) + i64.or $push443=, $pop441, $pop442 + i64.load $push444=, 112($52) + i64.select $push445=, $pop443, $pop444, $34 + i64.select $push446=, $pop445, $7, $40 + i64.or $push449=, $pop448, $pop446 + i64.load $push450=, 176($52) + i64.const $push726=, 0 + i64.select $push451=, $pop450, $pop726, $45 + i64.select $push452=, $pop449, $pop451, $51 + i64.select $push453=, $pop452, $3, $39 + i64.or $push454=, $pop440, $pop453 + i64.load $push456=, 272($52) + i64.load $push455=, 288($52) + i64.or $push457=, $pop456, $pop455 + i64.load $push458=, 304($52) + i64.select $push459=, $pop457, $pop458, $47 + i64.select $push460=, $pop459, $3, $37 + i64.const $push725=, 0 + i64.select $push461=, $pop460, $pop725, $49 + i64.select $push462=, $pop454, $pop461, $43 + i64.select $push463=, $pop462, $11, $33 + i64.store 0($pop465), $pop463 + i32.const $push472=, 0 + i32.const $push470=, 1024 + i32.add $push471=, $52, $pop470 + i32.store __stack_pointer($pop472), $pop471 + return + .endfunc +.Lfunc_end5: + .size bigshift, .Lfunc_end5-bigshift + + diff --git a/src/binaryen/test/llvm_autogenerated/legalize.wast b/src/binaryen/test/llvm_autogenerated/legalize.wast new file mode 100644 index 0000000000..bc4b317284 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/legalize.wast @@ -0,0 +1,2453 @@ +(module + (type $FUNCSIG$vijji (func (param i32 i64 i64 i32))) + (import "env" "__ashlti3" (func $__ashlti3 (param i32 i64 i64 i32))) + (import "env" "__lshrti3" (func $__lshrti3 (param i32 i64 i64 i32))) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "shl_i3" (func $shl_i3)) + (export "shl_i53" (func $shl_i53)) + (export "sext_in_reg_i32_i64" (func $sext_in_reg_i32_i64)) + (export "fpext_f32_f64" (func $fpext_f32_f64)) + (export "fpconv_f64_f32" (func $fpconv_f64_f32)) + (export "bigshift" (func $bigshift)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $shl_i3 (; 2 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (return + (i32.shl + (get_local $0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + (func $shl_i53 (; 3 ;) (param $0 i64) (param $1 i64) (param $2 i32) (result i64) + (return + (i64.shl + (get_local $0) + (i64.and + (get_local $1) + (i64.const 9007199254740991) + ) + ) + ) + ) + (func $sext_in_reg_i32_i64 (; 4 ;) (param $0 i64) (result i64) + (return + (i64.shr_s + (i64.shl + (get_local $0) + (i64.const 32) + ) + (i64.const 32) + ) + ) + ) + (func $fpext_f32_f64 (; 5 ;) (param $0 i32) (result f64) + (return + (f64.promote/f32 + (f32.load + (get_local $0) + ) + ) + ) + ) + (func $fpconv_f64_f32 (; 6 ;) (param $0 i32) (result f32) + (return + (f32.demote/f64 + (f64.load + (get_local $0) + ) + ) + ) + ) + (func $bigshift (; 7 ;) (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (param $16 i64) (param $17 i64) (param $18 i64) (param $19 i64) (param $20 i64) (param $21 i64) (param $22 i64) (param $23 i64) (param $24 i64) (param $25 i64) (param $26 i64) (param $27 i64) (param $28 i64) (param $29 i64) (param $30 i64) (param $31 i64) (param $32 i64) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (local $47 i32) + (local $48 i32) + (local $49 i32) + (local $50 i32) + (local $51 i32) + (local $52 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $52 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 1024) + ) + ) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 512) + ) + (get_local $1) + (get_local $2) + (tee_local $33 + (i32.wrap/i64 + (get_local $17) + ) + ) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 528) + ) + (get_local $3) + (get_local $4) + (get_local $33) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 544) + ) + (get_local $1) + (get_local $2) + (tee_local $41 + (i32.sub + (i32.const 128) + (get_local $33) + ) + ) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 560) + ) + (get_local $1) + (get_local $2) + (tee_local $42 + (i32.add + (get_local $33) + (i32.const -128) + ) + ) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 736) + ) + (get_local $1) + (get_local $2) + (tee_local $43 + (i32.sub + (i32.const 384) + (get_local $33) + ) + ) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 720) + ) + (get_local $3) + (get_local $4) + (tee_local $34 + (i32.add + (get_local $33) + (i32.const -256) + ) + ) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 752) + ) + (get_local $1) + (get_local $2) + (tee_local $39 + (i32.add + (get_local $33) + (i32.const -384) + ) + ) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 592) + ) + (get_local $7) + (get_local $8) + (get_local $33) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 608) + ) + (get_local $5) + (get_local $6) + (get_local $41) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 624) + ) + (get_local $5) + (get_local $6) + (get_local $42) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 688) + ) + (get_local $3) + (get_local $4) + (tee_local $35 + (i32.sub + (i32.const 256) + (get_local $33) + ) + ) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 640) + ) + (get_local $1) + (get_local $2) + (get_local $35) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 656) + ) + (get_local $3) + (get_local $4) + (tee_local $50 + (i32.sub + (i32.const 128) + (get_local $35) + ) + ) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 672) + ) + (get_local $3) + (get_local $4) + (get_local $41) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 576) + ) + (get_local $5) + (get_local $6) + (get_local $33) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 704) + ) + (get_local $1) + (get_local $2) + (get_local $34) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 480) + ) + (get_local $1) + (get_local $2) + (i32.sub + (i32.const 896) + (get_local $33) + ) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 464) + ) + (get_local $3) + (get_local $4) + (tee_local $36 + (i32.add + (get_local $33) + (i32.const -768) + ) + ) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 496) + ) + (get_local $1) + (get_local $2) + (i32.add + (get_local $33) + (i32.const -896) + ) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 352) + ) + (get_local $5) + (get_local $6) + (tee_local $45 + (i32.sub + (i32.const 640) + (get_local $33) + ) + ) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 336) + ) + (get_local $7) + (get_local $8) + (tee_local $37 + (i32.add + (get_local $33) + (i32.const -512) + ) + ) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 368) + ) + (get_local $5) + (get_local $6) + (tee_local $51 + (i32.add + (get_local $33) + (i32.const -640) + ) + ) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 432) + ) + (get_local $3) + (get_local $4) + (tee_local $38 + (i32.sub + (i32.const 768) + (get_local $33) + ) + ) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 864) + ) + (get_local $9) + (get_local $10) + (get_local $43) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 848) + ) + (get_local $11) + (get_local $12) + (get_local $34) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 880) + ) + (get_local $9) + (get_local $10) + (get_local $39) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 1008) + ) + (get_local $15) + (get_local $16) + (get_local $33) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 960) + ) + (get_local $13) + (get_local $14) + (get_local $41) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 976) + ) + (get_local $13) + (get_local $14) + (get_local $42) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 816) + ) + (get_local $11) + (get_local $12) + (get_local $35) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 240) + ) + (get_local $7) + (get_local $8) + (tee_local $39 + (i32.sub + (i32.const 512) + (get_local $33) + ) + ) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 192) + ) + (get_local $5) + (get_local $6) + (get_local $39) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 208) + ) + (get_local $7) + (get_local $8) + (tee_local $44 + (i32.sub + (i32.const 128) + (get_local $39) + ) + ) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 224) + ) + (get_local $7) + (get_local $8) + (get_local $43) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 768) + ) + (get_local $9) + (get_local $10) + (get_local $35) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 784) + ) + (get_local $11) + (get_local $12) + (get_local $50) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 800) + ) + (get_local $11) + (get_local $12) + (get_local $41) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 992) + ) + (get_local $13) + (get_local $14) + (get_local $33) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 832) + ) + (get_local $9) + (get_local $10) + (get_local $34) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 384) + ) + (get_local $1) + (get_local $2) + (get_local $38) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 400) + ) + (get_local $3) + (get_local $4) + (i32.sub + (i32.const 128) + (get_local $38) + ) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 416) + ) + (get_local $3) + (get_local $4) + (get_local $45) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 320) + ) + (get_local $5) + (get_local $6) + (get_local $37) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 448) + ) + (get_local $1) + (get_local $2) + (get_local $36) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 128) + ) + (get_local $5) + (get_local $6) + (get_local $35) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 144) + ) + (get_local $7) + (get_local $8) + (i32.sub + (i32.const 384) + (get_local $39) + ) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 160) + ) + (get_local $7) + (get_local $8) + (get_local $41) + ) + (call $__lshrti3 + (get_local $52) + (get_local $1) + (get_local $2) + (get_local $39) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 16) + ) + (get_local $3) + (get_local $4) + (get_local $44) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 32) + ) + (get_local $3) + (get_local $4) + (get_local $43) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 64) + ) + (get_local $5) + (get_local $6) + (tee_local $40 + (i32.sub + (i32.const 256) + (get_local $39) + ) + ) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 896) + ) + (get_local $9) + (get_local $10) + (get_local $33) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 256) + ) + (get_local $1) + (get_local $2) + (get_local $37) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 912) + ) + (get_local $11) + (get_local $12) + (get_local $33) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 928) + ) + (get_local $9) + (get_local $10) + (get_local $41) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 944) + ) + (get_local $9) + (get_local $10) + (get_local $42) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 80) + ) + (get_local $7) + (get_local $8) + (get_local $40) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 96) + ) + (get_local $5) + (get_local $6) + (i32.sub + (i32.const 128) + (get_local $40) + ) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 112) + ) + (get_local $5) + (get_local $6) + (get_local $44) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 48) + ) + (get_local $3) + (get_local $4) + (get_local $39) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 176) + ) + (get_local $7) + (get_local $8) + (get_local $35) + ) + (call $__lshrti3 + (i32.add + (get_local $52) + (i32.const 288) + ) + (get_local $1) + (get_local $2) + (get_local $45) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 272) + ) + (get_local $3) + (get_local $4) + (get_local $37) + ) + (call $__ashlti3 + (i32.add + (get_local $52) + (i32.const 304) + ) + (get_local $1) + (get_local $2) + (get_local $51) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (select + (select + (select + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 512) + ) + (i32.const 8) + ) + ) + (i64.const 0) + (tee_local $41 + (i32.lt_u + (get_local $33) + (i32.const 128) + ) + ) + ) + (i64.const 0) + (tee_local $42 + (i32.lt_u + (get_local $33) + (i32.const 256) + ) + ) + ) + (i64.const 0) + (tee_local $43 + (i32.lt_u + (get_local $33) + (i32.const 512) + ) + ) + ) + ) + (i64.store + (get_local $0) + (select + (select + (select + (i64.load offset=512 + (get_local $52) + ) + (i64.const 0) + (get_local $41) + ) + (i64.const 0) + (get_local $42) + ) + (i64.const 0) + (get_local $43) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 24) + ) + (select + (select + (select + (select + (i64.or + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 528) + ) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 544) + ) + (i32.const 8) + ) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 560) + ) + (i32.const 8) + ) + ) + (get_local $41) + ) + (get_local $4) + (get_local $33) + ) + (i64.const 0) + (get_local $42) + ) + (i64.const 0) + (get_local $43) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 16) + ) + (select + (select + (select + (select + (i64.or + (i64.load offset=528 + (get_local $52) + ) + (i64.load offset=544 + (get_local $52) + ) + ) + (i64.load offset=560 + (get_local $52) + ) + (get_local $41) + ) + (get_local $3) + (get_local $33) + ) + (i64.const 0) + (get_local $42) + ) + (i64.const 0) + (get_local $43) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 56) + ) + (select + (select + (select + (i64.or + (select + (select + (i64.or + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 592) + ) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 608) + ) + (i32.const 8) + ) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 624) + ) + (i32.const 8) + ) + ) + (get_local $41) + ) + (get_local $8) + (get_local $33) + ) + (select + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 688) + ) + (i32.const 8) + ) + ) + (i64.const 0) + (tee_local $45 + (i32.lt_u + (get_local $35) + (i32.const 128) + ) + ) + ) + ) + (select + (select + (i64.or + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 720) + ) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 736) + ) + (i32.const 8) + ) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 752) + ) + (i32.const 8) + ) + ) + (tee_local $44 + (i32.lt_u + (get_local $34) + (i32.const 128) + ) + ) + ) + (get_local $4) + (get_local $34) + ) + (get_local $42) + ) + (get_local $8) + (get_local $33) + ) + (i64.const 0) + (get_local $43) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 48) + ) + (select + (select + (select + (i64.or + (select + (select + (i64.or + (i64.load offset=592 + (get_local $52) + ) + (i64.load offset=608 + (get_local $52) + ) + ) + (i64.load offset=624 + (get_local $52) + ) + (get_local $41) + ) + (get_local $7) + (get_local $33) + ) + (select + (i64.load offset=688 + (get_local $52) + ) + (i64.const 0) + (get_local $45) + ) + ) + (select + (select + (i64.or + (i64.load offset=720 + (get_local $52) + ) + (i64.load offset=736 + (get_local $52) + ) + ) + (i64.load offset=752 + (get_local $52) + ) + (get_local $44) + ) + (get_local $3) + (get_local $34) + ) + (get_local $42) + ) + (get_local $7) + (get_local $33) + ) + (i64.const 0) + (get_local $43) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 40) + ) + (select + (select + (select + (i64.or + (select + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 576) + ) + (i32.const 8) + ) + ) + (i64.const 0) + (get_local $41) + ) + (select + (select + (i64.or + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 640) + ) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 656) + ) + (i32.const 8) + ) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 672) + ) + (i32.const 8) + ) + ) + (get_local $45) + ) + (get_local $2) + (get_local $35) + ) + ) + (select + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 704) + ) + (i32.const 8) + ) + ) + (i64.const 0) + (get_local $44) + ) + (get_local $42) + ) + (get_local $6) + (get_local $33) + ) + (i64.const 0) + (get_local $43) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 32) + ) + (select + (select + (select + (i64.or + (select + (i64.load offset=576 + (get_local $52) + ) + (i64.const 0) + (get_local $41) + ) + (select + (select + (i64.or + (i64.load offset=640 + (get_local $52) + ) + (i64.load offset=656 + (get_local $52) + ) + ) + (i64.load offset=672 + (get_local $52) + ) + (get_local $45) + ) + (get_local $1) + (get_local $35) + ) + ) + (select + (i64.load offset=704 + (get_local $52) + ) + (i64.const 0) + (get_local $44) + ) + (get_local $42) + ) + (get_local $5) + (get_local $33) + ) + (i64.const 0) + (get_local $43) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 120) + ) + (select + (select + (i64.or + (select + (select + (i64.or + (select + (select + (i64.or + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 1008) + ) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 960) + ) + (i32.const 8) + ) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 976) + ) + (i32.const 8) + ) + ) + (get_local $41) + ) + (get_local $16) + (get_local $33) + ) + (select + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 816) + ) + (i32.const 8) + ) + ) + (i64.const 0) + (get_local $45) + ) + ) + (select + (select + (i64.or + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 848) + ) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 864) + ) + (i32.const 8) + ) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 880) + ) + (i32.const 8) + ) + ) + (get_local $44) + ) + (get_local $12) + (get_local $34) + ) + (get_local $42) + ) + (get_local $16) + (get_local $33) + ) + (select + (select + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 240) + ) + (i32.const 8) + ) + ) + (i64.const 0) + (tee_local $50 + (i32.lt_u + (get_local $39) + (i32.const 128) + ) + ) + ) + (i64.const 0) + (tee_local $51 + (i32.lt_u + (get_local $39) + (i32.const 256) + ) + ) + ) + ) + (select + (select + (i64.or + (select + (select + (i64.or + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 336) + ) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 352) + ) + (i32.const 8) + ) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 368) + ) + (i32.const 8) + ) + ) + (tee_local $47 + (i32.lt_u + (get_local $37) + (i32.const 128) + ) + ) + ) + (get_local $8) + (get_local $37) + ) + (select + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 432) + ) + (i32.const 8) + ) + ) + (i64.const 0) + (tee_local $48 + (i32.lt_u + (get_local $38) + (i32.const 128) + ) + ) + ) + ) + (select + (select + (i64.or + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 464) + ) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 480) + ) + (i32.const 8) + ) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 496) + ) + (i32.const 8) + ) + ) + (tee_local $46 + (i32.lt_u + (get_local $36) + (i32.const 128) + ) + ) + ) + (get_local $4) + (get_local $36) + ) + (tee_local $49 + (i32.lt_u + (get_local $37) + (i32.const 256) + ) + ) + ) + (get_local $8) + (get_local $37) + ) + (get_local $43) + ) + (get_local $16) + (get_local $33) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 112) + ) + (select + (select + (i64.or + (select + (select + (i64.or + (select + (select + (i64.or + (i64.load offset=1008 + (get_local $52) + ) + (i64.load offset=960 + (get_local $52) + ) + ) + (i64.load offset=976 + (get_local $52) + ) + (get_local $41) + ) + (get_local $15) + (get_local $33) + ) + (select + (i64.load offset=816 + (get_local $52) + ) + (i64.const 0) + (get_local $45) + ) + ) + (select + (select + (i64.or + (i64.load offset=848 + (get_local $52) + ) + (i64.load offset=864 + (get_local $52) + ) + ) + (i64.load offset=880 + (get_local $52) + ) + (get_local $44) + ) + (get_local $11) + (get_local $34) + ) + (get_local $42) + ) + (get_local $15) + (get_local $33) + ) + (select + (select + (i64.load offset=240 + (get_local $52) + ) + (i64.const 0) + (get_local $50) + ) + (i64.const 0) + (get_local $51) + ) + ) + (select + (select + (i64.or + (select + (select + (i64.or + (i64.load offset=336 + (get_local $52) + ) + (i64.load offset=352 + (get_local $52) + ) + ) + (i64.load offset=368 + (get_local $52) + ) + (get_local $47) + ) + (get_local $7) + (get_local $37) + ) + (select + (i64.load offset=432 + (get_local $52) + ) + (i64.const 0) + (get_local $48) + ) + ) + (select + (select + (i64.or + (i64.load offset=464 + (get_local $52) + ) + (i64.load offset=480 + (get_local $52) + ) + ) + (i64.load offset=496 + (get_local $52) + ) + (get_local $46) + ) + (get_local $3) + (get_local $36) + ) + (get_local $49) + ) + (get_local $7) + (get_local $37) + ) + (get_local $43) + ) + (get_local $15) + (get_local $33) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 104) + ) + (select + (select + (i64.or + (select + (select + (i64.or + (select + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 992) + ) + (i32.const 8) + ) + ) + (i64.const 0) + (get_local $41) + ) + (select + (select + (i64.or + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 768) + ) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 784) + ) + (i32.const 8) + ) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 800) + ) + (i32.const 8) + ) + ) + (get_local $45) + ) + (get_local $10) + (get_local $35) + ) + ) + (select + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 832) + ) + (i32.const 8) + ) + ) + (i64.const 0) + (get_local $44) + ) + (get_local $42) + ) + (get_local $14) + (get_local $33) + ) + (select + (select + (select + (i64.or + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 192) + ) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 208) + ) + (i32.const 8) + ) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 224) + ) + (i32.const 8) + ) + ) + (get_local $50) + ) + (get_local $6) + (get_local $39) + ) + (i64.const 0) + (get_local $51) + ) + ) + (select + (select + (i64.or + (select + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 320) + ) + (i32.const 8) + ) + ) + (i64.const 0) + (get_local $47) + ) + (select + (select + (i64.or + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 384) + ) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 400) + ) + (i32.const 8) + ) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 416) + ) + (i32.const 8) + ) + ) + (get_local $48) + ) + (get_local $2) + (get_local $38) + ) + ) + (select + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 448) + ) + (i32.const 8) + ) + ) + (i64.const 0) + (get_local $46) + ) + (get_local $49) + ) + (get_local $6) + (get_local $37) + ) + (get_local $43) + ) + (get_local $14) + (get_local $33) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 96) + ) + (select + (select + (i64.or + (select + (select + (i64.or + (select + (i64.load offset=992 + (get_local $52) + ) + (i64.const 0) + (get_local $41) + ) + (select + (select + (i64.or + (i64.load offset=768 + (get_local $52) + ) + (i64.load offset=784 + (get_local $52) + ) + ) + (i64.load offset=800 + (get_local $52) + ) + (get_local $45) + ) + (get_local $9) + (get_local $35) + ) + ) + (select + (i64.load offset=832 + (get_local $52) + ) + (i64.const 0) + (get_local $44) + ) + (get_local $42) + ) + (get_local $13) + (get_local $33) + ) + (select + (select + (select + (i64.or + (i64.load offset=192 + (get_local $52) + ) + (i64.load offset=208 + (get_local $52) + ) + ) + (i64.load offset=224 + (get_local $52) + ) + (get_local $50) + ) + (get_local $5) + (get_local $39) + ) + (i64.const 0) + (get_local $51) + ) + ) + (select + (select + (i64.or + (select + (i64.load offset=320 + (get_local $52) + ) + (i64.const 0) + (get_local $47) + ) + (select + (select + (i64.or + (i64.load offset=384 + (get_local $52) + ) + (i64.load offset=400 + (get_local $52) + ) + ) + (i64.load offset=416 + (get_local $52) + ) + (get_local $48) + ) + (get_local $1) + (get_local $38) + ) + ) + (select + (i64.load offset=448 + (get_local $52) + ) + (i64.const 0) + (get_local $46) + ) + (get_local $49) + ) + (get_local $5) + (get_local $37) + ) + (get_local $43) + ) + (get_local $13) + (get_local $33) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 72) + ) + (select + (select + (i64.or + (select + (select + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 896) + ) + (i32.const 8) + ) + ) + (i64.const 0) + (get_local $41) + ) + (i64.const 0) + (get_local $42) + ) + (select + (select + (i64.or + (select + (select + (i64.or + (i64.load + (i32.add + (get_local $52) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 32) + ) + (i32.const 8) + ) + ) + (get_local $50) + ) + (get_local $2) + (get_local $39) + ) + (select + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 64) + ) + (i32.const 8) + ) + ) + (i64.const 0) + (tee_local $34 + (i32.lt_u + (get_local $40) + (i32.const 128) + ) + ) + ) + ) + (select + (select + (i64.or + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 128) + ) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 144) + ) + (i32.const 8) + ) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 160) + ) + (i32.const 8) + ) + ) + (get_local $45) + ) + (get_local $6) + (get_local $35) + ) + (get_local $51) + ) + (get_local $2) + (get_local $39) + ) + ) + (select + (select + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 256) + ) + (i32.const 8) + ) + ) + (i64.const 0) + (get_local $47) + ) + (i64.const 0) + (get_local $49) + ) + (get_local $43) + ) + (get_local $10) + (get_local $33) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 64) + ) + (select + (select + (i64.or + (select + (select + (i64.load offset=896 + (get_local $52) + ) + (i64.const 0) + (get_local $41) + ) + (i64.const 0) + (get_local $42) + ) + (select + (select + (i64.or + (select + (select + (i64.or + (i64.load + (get_local $52) + ) + (i64.load offset=16 + (get_local $52) + ) + ) + (i64.load offset=32 + (get_local $52) + ) + (get_local $50) + ) + (get_local $1) + (get_local $39) + ) + (select + (i64.load offset=64 + (get_local $52) + ) + (i64.const 0) + (get_local $34) + ) + ) + (select + (select + (i64.or + (i64.load offset=128 + (get_local $52) + ) + (i64.load offset=144 + (get_local $52) + ) + ) + (i64.load offset=160 + (get_local $52) + ) + (get_local $45) + ) + (get_local $5) + (get_local $35) + ) + (get_local $51) + ) + (get_local $1) + (get_local $39) + ) + ) + (select + (select + (i64.load offset=256 + (get_local $52) + ) + (i64.const 0) + (get_local $47) + ) + (i64.const 0) + (get_local $49) + ) + (get_local $43) + ) + (get_local $9) + (get_local $33) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 88) + ) + (select + (select + (i64.or + (select + (select + (select + (i64.or + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 912) + ) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 928) + ) + (i32.const 8) + ) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 944) + ) + (i32.const 8) + ) + ) + (get_local $41) + ) + (get_local $12) + (get_local $33) + ) + (i64.const 0) + (get_local $42) + ) + (select + (select + (i64.or + (select + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 48) + ) + (i32.const 8) + ) + ) + (i64.const 0) + (get_local $50) + ) + (select + (select + (i64.or + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 80) + ) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 96) + ) + (i32.const 8) + ) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 112) + ) + (i32.const 8) + ) + ) + (get_local $34) + ) + (get_local $8) + (get_local $40) + ) + ) + (select + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 176) + ) + (i32.const 8) + ) + ) + (i64.const 0) + (get_local $45) + ) + (get_local $51) + ) + (get_local $4) + (get_local $39) + ) + ) + (select + (select + (select + (i64.or + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 272) + ) + (i32.const 8) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 288) + ) + (i32.const 8) + ) + ) + ) + (i64.load + (i32.add + (i32.add + (get_local $52) + (i32.const 304) + ) + (i32.const 8) + ) + ) + (get_local $47) + ) + (get_local $4) + (get_local $37) + ) + (i64.const 0) + (get_local $49) + ) + (get_local $43) + ) + (get_local $12) + (get_local $33) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 80) + ) + (select + (select + (i64.or + (select + (select + (select + (i64.or + (i64.load offset=912 + (get_local $52) + ) + (i64.load offset=928 + (get_local $52) + ) + ) + (i64.load offset=944 + (get_local $52) + ) + (get_local $41) + ) + (get_local $11) + (get_local $33) + ) + (i64.const 0) + (get_local $42) + ) + (select + (select + (i64.or + (select + (i64.load offset=48 + (get_local $52) + ) + (i64.const 0) + (get_local $50) + ) + (select + (select + (i64.or + (i64.load offset=80 + (get_local $52) + ) + (i64.load offset=96 + (get_local $52) + ) + ) + (i64.load offset=112 + (get_local $52) + ) + (get_local $34) + ) + (get_local $7) + (get_local $40) + ) + ) + (select + (i64.load offset=176 + (get_local $52) + ) + (i64.const 0) + (get_local $45) + ) + (get_local $51) + ) + (get_local $3) + (get_local $39) + ) + ) + (select + (select + (select + (i64.or + (i64.load offset=272 + (get_local $52) + ) + (i64.load offset=288 + (get_local $52) + ) + ) + (i64.load offset=304 + (get_local $52) + ) + (get_local $47) + ) + (get_local $3) + (get_local $37) + ) + (i64.const 0) + (get_local $49) + ) + (get_local $43) + ) + (get_local $11) + (get_local $33) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $52) + (i32.const 1024) + ) + ) + (return) + ) + (func $stackSave (; 8 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 9 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 10 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/llvm-to-s.py b/src/binaryen/test/llvm_autogenerated/llvm-to-s.py new file mode 100755 index 0000000000..8fb04aad01 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/llvm-to-s.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python + +import argparse +import os +import re +import shlex +import subprocess +import sys + + +ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) +LLVM_TEST_DIR = os.path.join('test', 'CodeGen', 'WebAssembly') +S_TEST_DIR = ROOT_DIR + + +def FindTestFiles(directory, ext): + tests = [] + for root, dirs, files in os.walk(directory): + for f in files: + path = os.path.join(root, f) + if os.path.splitext(f)[1] == ext: + tests.append(path) + tests.sort() + return tests + + +def GetRunLine(test): + run_line = '' + with open(test) as test_file: + for line in test_file.readlines(): + m = re.match(r'; RUN: (.*?)(\\?)$', line) + if m: + run_line += m.group(1) + if not m.group(2): + break + # Remove FileCheck + run_line = re.sub(r'\|\s*FileCheck.*$', '', run_line) + # Remove pipe input + run_line = re.sub(r'<\s*%s', '', run_line) + # Remove stderr > stdout redirect + run_line = re.sub(r'2>&1', '', run_line) + return run_line + + +def main(args): + parser = argparse.ArgumentParser() + parser.add_argument('-l', '--llvm-dir', required=True) + parser.add_argument('-b', '--bin-dir', required=True) + options = parser.parse_args(args) + llvm_dir = options.llvm_dir + bin_dir = options.bin_dir + llvm_test_dir = os.path.join(llvm_dir, LLVM_TEST_DIR) + + tests = FindTestFiles(llvm_test_dir, '.ll') + for ll_test in tests: + name_noext = os.path.splitext(os.path.basename(ll_test))[0] + + BLACKLIST = ['inline-asm', # inline asm containing invalid syntax + 'dbgvalue', # external global symbol + 'returned', # external global symbol + 'vtable', # external global symbol + 'offset-folding', # external global symbol + 'address-offsets', # external global symbol + 'memory-addr64', # wasm64 + 'simd-arith', # No SIMD in binaryen yet + ] + if name_noext in BLACKLIST: + continue + + s = os.path.join(S_TEST_DIR, name_noext + '.s') + run_line = GetRunLine(ll_test) + cmd = shlex.split(run_line) + cmd.extend([ll_test, '-o', s]) + # Don't run if the command isn't llc. Some are opt and they don't + # generate .s files. + if cmd[0] != 'llc': + continue + cmd[0] = os.path.join(bin_dir, cmd[0]) + print ' '.join(cmd) + subprocess.check_call(cmd) + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) diff --git a/src/binaryen/test/llvm_autogenerated/load-ext.s b/src/binaryen/test/llvm_autogenerated/load-ext.s new file mode 100644 index 0000000000..f8cb8feb84 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/load-ext.s @@ -0,0 +1,113 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/load-ext.ll" + .globl sext_i8_i32 + .type sext_i8_i32,@function +sext_i8_i32: + .param i32 + .result i32 + i32.load8_s $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end0: + .size sext_i8_i32, .Lfunc_end0-sext_i8_i32 + + .globl zext_i8_i32 + .type zext_i8_i32,@function +zext_i8_i32: + .param i32 + .result i32 + i32.load8_u $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end1: + .size zext_i8_i32, .Lfunc_end1-zext_i8_i32 + + .globl sext_i16_i32 + .type sext_i16_i32,@function +sext_i16_i32: + .param i32 + .result i32 + i32.load16_s $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end2: + .size sext_i16_i32, .Lfunc_end2-sext_i16_i32 + + .globl zext_i16_i32 + .type zext_i16_i32,@function +zext_i16_i32: + .param i32 + .result i32 + i32.load16_u $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end3: + .size zext_i16_i32, .Lfunc_end3-zext_i16_i32 + + .globl sext_i8_i64 + .type sext_i8_i64,@function +sext_i8_i64: + .param i32 + .result i64 + i64.load8_s $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end4: + .size sext_i8_i64, .Lfunc_end4-sext_i8_i64 + + .globl zext_i8_i64 + .type zext_i8_i64,@function +zext_i8_i64: + .param i32 + .result i64 + i64.load8_u $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end5: + .size zext_i8_i64, .Lfunc_end5-zext_i8_i64 + + .globl sext_i16_i64 + .type sext_i16_i64,@function +sext_i16_i64: + .param i32 + .result i64 + i64.load16_s $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end6: + .size sext_i16_i64, .Lfunc_end6-sext_i16_i64 + + .globl zext_i16_i64 + .type zext_i16_i64,@function +zext_i16_i64: + .param i32 + .result i64 + i64.load16_u $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end7: + .size zext_i16_i64, .Lfunc_end7-zext_i16_i64 + + .globl sext_i32_i64 + .type sext_i32_i64,@function +sext_i32_i64: + .param i32 + .result i64 + i64.load32_s $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end8: + .size sext_i32_i64, .Lfunc_end8-sext_i32_i64 + + .globl zext_i32_i64 + .type zext_i32_i64,@function +zext_i32_i64: + .param i32 + .result i64 + i64.load32_u $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end9: + .size zext_i32_i64, .Lfunc_end9-zext_i32_i64 + + diff --git a/src/binaryen/test/llvm_autogenerated/load-ext.wast b/src/binaryen/test/llvm_autogenerated/load-ext.wast new file mode 100644 index 0000000000..f40690f7a0 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/load-ext.wast @@ -0,0 +1,119 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "sext_i8_i32" (func $sext_i8_i32)) + (export "zext_i8_i32" (func $zext_i8_i32)) + (export "sext_i16_i32" (func $sext_i16_i32)) + (export "zext_i16_i32" (func $zext_i16_i32)) + (export "sext_i8_i64" (func $sext_i8_i64)) + (export "zext_i8_i64" (func $zext_i8_i64)) + (export "sext_i16_i64" (func $sext_i16_i64)) + (export "zext_i16_i64" (func $zext_i16_i64)) + (export "sext_i32_i64" (func $sext_i32_i64)) + (export "zext_i32_i64" (func $zext_i32_i64)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $sext_i8_i32 (; 0 ;) (param $0 i32) (result i32) + (return + (i32.load8_s + (get_local $0) + ) + ) + ) + (func $zext_i8_i32 (; 1 ;) (param $0 i32) (result i32) + (return + (i32.load8_u + (get_local $0) + ) + ) + ) + (func $sext_i16_i32 (; 2 ;) (param $0 i32) (result i32) + (return + (i32.load16_s + (get_local $0) + ) + ) + ) + (func $zext_i16_i32 (; 3 ;) (param $0 i32) (result i32) + (return + (i32.load16_u + (get_local $0) + ) + ) + ) + (func $sext_i8_i64 (; 4 ;) (param $0 i32) (result i64) + (return + (i64.load8_s + (get_local $0) + ) + ) + ) + (func $zext_i8_i64 (; 5 ;) (param $0 i32) (result i64) + (return + (i64.load8_u + (get_local $0) + ) + ) + ) + (func $sext_i16_i64 (; 6 ;) (param $0 i32) (result i64) + (return + (i64.load16_s + (get_local $0) + ) + ) + ) + (func $zext_i16_i64 (; 7 ;) (param $0 i32) (result i64) + (return + (i64.load16_u + (get_local $0) + ) + ) + ) + (func $sext_i32_i64 (; 8 ;) (param $0 i32) (result i64) + (return + (i64.load32_s + (get_local $0) + ) + ) + ) + (func $zext_i32_i64 (; 9 ;) (param $0 i32) (result i64) + (return + (i64.load32_u + (get_local $0) + ) + ) + ) + (func $stackSave (; 10 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 11 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 12 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/load-store-i1.s b/src/binaryen/test/llvm_autogenerated/load-store-i1.s new file mode 100644 index 0000000000..29d616961f --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/load-store-i1.s @@ -0,0 +1,79 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/load-store-i1.ll" + .globl load_u_i1_i32 + .type load_u_i1_i32,@function +load_u_i1_i32: + .param i32 + .result i32 + i32.load8_u $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end0: + .size load_u_i1_i32, .Lfunc_end0-load_u_i1_i32 + + .globl load_s_i1_i32 + .type load_s_i1_i32,@function +load_s_i1_i32: + .param i32 + .result i32 + i32.const $push3=, 0 + i32.load8_u $push0=, 0($0) + i32.const $push1=, 1 + i32.and $push2=, $pop0, $pop1 + i32.sub $push4=, $pop3, $pop2 + return $pop4 + .endfunc +.Lfunc_end1: + .size load_s_i1_i32, .Lfunc_end1-load_s_i1_i32 + + .globl load_u_i1_i64 + .type load_u_i1_i64,@function +load_u_i1_i64: + .param i32 + .result i64 + i64.load8_u $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end2: + .size load_u_i1_i64, .Lfunc_end2-load_u_i1_i64 + + .globl load_s_i1_i64 + .type load_s_i1_i64,@function +load_s_i1_i64: + .param i32 + .result i64 + i64.const $push3=, 0 + i64.load8_u $push0=, 0($0) + i64.const $push1=, 1 + i64.and $push2=, $pop0, $pop1 + i64.sub $push4=, $pop3, $pop2 + return $pop4 + .endfunc +.Lfunc_end3: + .size load_s_i1_i64, .Lfunc_end3-load_s_i1_i64 + + .globl store_i32_i1 + .type store_i32_i1,@function +store_i32_i1: + .param i32, i32 + i32.const $push0=, 1 + i32.and $push1=, $1, $pop0 + i32.store8 0($0), $pop1 + return + .endfunc +.Lfunc_end4: + .size store_i32_i1, .Lfunc_end4-store_i32_i1 + + .globl store_i64_i1 + .type store_i64_i1,@function +store_i64_i1: + .param i32, i64 + i64.const $push0=, 1 + i64.and $push1=, $1, $pop0 + i64.store8 0($0), $pop1 + return + .endfunc +.Lfunc_end5: + .size store_i64_i1, .Lfunc_end5-store_i64_i1 + + diff --git a/src/binaryen/test/llvm_autogenerated/load-store-i1.wast b/src/binaryen/test/llvm_autogenerated/load-store-i1.wast new file mode 100644 index 0000000000..c7b6713007 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/load-store-i1.wast @@ -0,0 +1,105 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "load_u_i1_i32" (func $load_u_i1_i32)) + (export "load_s_i1_i32" (func $load_s_i1_i32)) + (export "load_u_i1_i64" (func $load_u_i1_i64)) + (export "load_s_i1_i64" (func $load_s_i1_i64)) + (export "store_i32_i1" (func $store_i32_i1)) + (export "store_i64_i1" (func $store_i64_i1)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $load_u_i1_i32 (; 0 ;) (param $0 i32) (result i32) + (return + (i32.load8_u + (get_local $0) + ) + ) + ) + (func $load_s_i1_i32 (; 1 ;) (param $0 i32) (result i32) + (return + (i32.sub + (i32.const 0) + (i32.and + (i32.load8_u + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + ) + (func $load_u_i1_i64 (; 2 ;) (param $0 i32) (result i64) + (return + (i64.load8_u + (get_local $0) + ) + ) + ) + (func $load_s_i1_i64 (; 3 ;) (param $0 i32) (result i64) + (return + (i64.sub + (i64.const 0) + (i64.and + (i64.load8_u + (get_local $0) + ) + (i64.const 1) + ) + ) + ) + ) + (func $store_i32_i1 (; 4 ;) (param $0 i32) (param $1 i32) + (i32.store8 + (get_local $0) + (i32.and + (get_local $1) + (i32.const 1) + ) + ) + (return) + ) + (func $store_i64_i1 (; 5 ;) (param $0 i32) (param $1 i64) + (i64.store8 + (get_local $0) + (i64.and + (get_local $1) + (i64.const 1) + ) + ) + (return) + ) + (func $stackSave (; 6 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 7 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 8 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/load.s b/src/binaryen/test/llvm_autogenerated/load.s new file mode 100644 index 0000000000..782cb40847 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/load.s @@ -0,0 +1,47 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/load.ll" + .globl ldi32 + .type ldi32,@function +ldi32: + .param i32 + .result i32 + i32.load $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end0: + .size ldi32, .Lfunc_end0-ldi32 + + .globl ldi64 + .type ldi64,@function +ldi64: + .param i32 + .result i64 + i64.load $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end1: + .size ldi64, .Lfunc_end1-ldi64 + + .globl ldf32 + .type ldf32,@function +ldf32: + .param i32 + .result f32 + f32.load $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end2: + .size ldf32, .Lfunc_end2-ldf32 + + .globl ldf64 + .type ldf64,@function +ldf64: + .param i32 + .result f64 + f64.load $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end3: + .size ldf64, .Lfunc_end3-ldf64 + + diff --git a/src/binaryen/test/llvm_autogenerated/load.wast b/src/binaryen/test/llvm_autogenerated/load.wast new file mode 100644 index 0000000000..173ca3a376 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/load.wast @@ -0,0 +1,71 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "ldi32" (func $ldi32)) + (export "ldi64" (func $ldi64)) + (export "ldf32" (func $ldf32)) + (export "ldf64" (func $ldf64)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $ldi32 (; 0 ;) (param $0 i32) (result i32) + (return + (i32.load + (get_local $0) + ) + ) + ) + (func $ldi64 (; 1 ;) (param $0 i32) (result i64) + (return + (i64.load + (get_local $0) + ) + ) + ) + (func $ldf32 (; 2 ;) (param $0 i32) (result f32) + (return + (f32.load + (get_local $0) + ) + ) + ) + (func $ldf64 (; 3 ;) (param $0 i32) (result f64) + (return + (f64.load + (get_local $0) + ) + ) + ) + (func $stackSave (; 4 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 5 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 6 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/lower-em-ehsjlj-options.s b/src/binaryen/test/llvm_autogenerated/lower-em-ehsjlj-options.s new file mode 100644 index 0000000000..0c00a22314 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/lower-em-ehsjlj-options.s @@ -0,0 +1,123 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/lower-em-ehsjlj-options.ll" + .hidden exception + .globl exception + .type exception,@function +exception: # @exception + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push7=, 0 + i32.store __THREW__($pop8), $pop7 + i32.const $push0=, foo@FUNCTION + call __invoke_void@FUNCTION, $pop0 + i32.const $push6=, 0 + i32.load $0=, __THREW__($pop6) + i32.const $push5=, 0 + i32.const $push4=, 0 + i32.store __THREW__($pop5), $pop4 + block + i32.const $push1=, 1 + i32.ne $push2=, $0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %lpad + i32.const $push9=, 0 + i32.call $push3=, __cxa_find_matching_catch_3@FUNCTION, $pop9 + i32.call $drop=, __cxa_begin_catch@FUNCTION, $pop3 + call __cxa_end_catch@FUNCTION +.LBB0_2: # %try.cont + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size exception, .Lfunc_end0-exception + + .hidden setjmp_longjmp + .globl setjmp_longjmp + .type setjmp_longjmp,@function +setjmp_longjmp: # @setjmp_longjmp + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push1=, 0 + i32.load $push2=, __stack_pointer($pop1) + i32.const $push3=, 160 + i32.sub $push6=, $pop2, $pop3 + tee_local $push5=, $0=, $pop6 + i32.store __stack_pointer($pop4), $pop5 + i32.call $drop=, setjmp@FUNCTION, $0 + i32.const $push0=, 1 + call longjmp@FUNCTION, $0, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size setjmp_longjmp, .Lfunc_end1-setjmp_longjmp + + .globl setThrew + .type setThrew,@function +setThrew: # @setThrew + .param i32, i32 +# BB#0: # %entry + block + i32.const $push1=, 0 + i32.load $push0=, __THREW__($pop1) + br_if 0, $pop0 # 0: down to label1 +# BB#1: # %if.then + i32.const $push3=, 0 + i32.store __threwValue($pop3), $1 + i32.const $push2=, 0 + i32.store __THREW__($pop2), $0 +.LBB2_2: # %if.end + end_block # label1: + # fallthrough-return + .endfunc +.Lfunc_end2: + .size setThrew, .Lfunc_end2-setThrew + + .globl setTempRet0 + .type setTempRet0,@function +setTempRet0: # @setTempRet0 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store __tempRet0($pop0), $0 + # fallthrough-return + .endfunc +.Lfunc_end3: + .size setTempRet0, .Lfunc_end3-setTempRet0 + + .type __THREW__,@object # @__THREW__ + .bss + .globl __THREW__ + .p2align 2 +__THREW__: + .int32 0 # 0x0 + .size __THREW__, 4 + + .type __threwValue,@object # @__threwValue + .globl __threwValue + .p2align 2 +__threwValue: + .int32 0 # 0x0 + .size __threwValue, 4 + + .type __tempRet0,@object # @__tempRet0 + .globl __tempRet0 + .p2align 2 +__tempRet0: + .int32 0 # 0x0 + .size __tempRet0, 4 + + + .functype foo, void + .functype __gxx_personality_v0, i32 + .functype __cxa_begin_catch, i32, i32 + .functype __cxa_end_catch, void + .functype setjmp, i32, i32 + .functype longjmp, void, i32, i32 + .functype malloc, i32, i32 + .functype free, void, i32 + .functype __resumeException, void, i32 + .functype llvm_eh_typeid_for, i32, i32 + .functype __invoke_void, void, i32 + .functype __cxa_find_matching_catch_3, i32, i32 diff --git a/src/binaryen/test/llvm_autogenerated/lower-em-ehsjlj-options.wast b/src/binaryen/test/llvm_autogenerated/lower-em-ehsjlj-options.wast new file mode 100644 index 0000000000..001cbc4276 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/lower-em-ehsjlj-options.wast @@ -0,0 +1,153 @@ +(module + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$vi (func (param i32))) + (import "env" "__cxa_begin_catch" (func $__cxa_begin_catch (param i32) (result i32))) + (import "env" "__cxa_end_catch" (func $__cxa_end_catch)) + (import "env" "__cxa_find_matching_catch_3" (func $__cxa_find_matching_catch_3 (param i32) (result i32))) + (import "env" "invoke_v" (func $invoke_v (param i32))) + (import "env" "longjmp" (func $longjmp (param i32 i32))) + (import "env" "setjmp" (func $setjmp (param i32) (result i32))) + (import "env" "memory" (memory $0 1)) + (import "env" "foo" (func $foo)) + (table 2 2 anyfunc) + (elem (i32.const 0) $__wasm_nullptr $__importThunk_foo) + (data (i32.const 4) " \04\00\00") + (data (i32.const 12) "\00\00\00\00") + (data (i32.const 16) "\00\00\00\00") + (data (i32.const 20) "\00\00\00\00") + (export "exception" (func $exception)) + (export "setjmp_longjmp" (func $setjmp_longjmp)) + (export "setThrew" (func $setThrew)) + (export "setTempRet0" (func $setTempRet0)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (export "dynCall_v" (func $dynCall_v)) + (func $exception (; 7 ;) + (local $0 i32) + (i32.store offset=12 + (i32.const 0) + (i32.const 0) + ) + (call $invoke_v + (i32.const 1) + ) + (set_local $0 + (i32.load offset=12 + (i32.const 0) + ) + ) + (i32.store offset=12 + (i32.const 0) + (i32.const 0) + ) + (block $label$0 + (br_if $label$0 + (i32.ne + (get_local $0) + (i32.const 1) + ) + ) + (drop + (call $__cxa_begin_catch + (call $__cxa_find_matching_catch_3 + (i32.const 0) + ) + ) + ) + (call $__cxa_end_catch) + ) + ) + (func $setjmp_longjmp (; 8 ;) + (local $0 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $0 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 160) + ) + ) + ) + (drop + (call $setjmp + (get_local $0) + ) + ) + (call $longjmp + (get_local $0) + (i32.const 1) + ) + (unreachable) + ) + (func $setThrew (; 9 ;) (param $0 i32) (param $1 i32) + (block $label$0 + (br_if $label$0 + (i32.load offset=12 + (i32.const 0) + ) + ) + (i32.store offset=16 + (i32.const 0) + (get_local $1) + ) + (i32.store offset=12 + (i32.const 0) + (get_local $0) + ) + ) + ) + (func $setTempRet0 (; 10 ;) (param $0 i32) + (i32.store offset=20 + (i32.const 0) + (get_local $0) + ) + ) + (func $__wasm_nullptr (; 11 ;) (type $FUNCSIG$v) + (unreachable) + ) + (func $__importThunk_foo (; 12 ;) (type $FUNCSIG$v) + (call $foo) + ) + (func $stackSave (; 13 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 14 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 15 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) + (func $dynCall_v (; 16 ;) (param $fptr i32) + (call_indirect (type $FUNCSIG$v) + (get_local $fptr) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1056, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/mem-intrinsics.s b/src/binaryen/test/llvm_autogenerated/mem-intrinsics.s new file mode 100644 index 0000000000..d7047b85c3 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/mem-intrinsics.s @@ -0,0 +1,152 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/mem-intrinsics.ll" + .globl copy_yes + .type copy_yes,@function +copy_yes: + .param i32, i32, i32 + .result i32 + i32.call $push0=, memcpy@FUNCTION, $0, $1, $2 + return $pop0 + .endfunc +.Lfunc_end0: + .size copy_yes, .Lfunc_end0-copy_yes + + .globl copy_no + .type copy_no,@function +copy_no: + .param i32, i32, i32 + i32.call $drop=, memcpy@FUNCTION, $0, $1, $2 + return + .endfunc +.Lfunc_end1: + .size copy_no, .Lfunc_end1-copy_no + + .globl move_yes + .type move_yes,@function +move_yes: + .param i32, i32, i32 + .result i32 + i32.call $push0=, memmove@FUNCTION, $0, $1, $2 + return $pop0 + .endfunc +.Lfunc_end2: + .size move_yes, .Lfunc_end2-move_yes + + .globl move_no + .type move_no,@function +move_no: + .param i32, i32, i32 + i32.call $drop=, memmove@FUNCTION, $0, $1, $2 + return + .endfunc +.Lfunc_end3: + .size move_no, .Lfunc_end3-move_no + + .globl set_yes + .type set_yes,@function +set_yes: + .param i32, i32, i32 + .result i32 + i32.call $push0=, memset@FUNCTION, $0, $1, $2 + return $pop0 + .endfunc +.Lfunc_end4: + .size set_yes, .Lfunc_end4-set_yes + + .globl set_no + .type set_no,@function +set_no: + .param i32, i32, i32 + i32.call $drop=, memset@FUNCTION, $0, $1, $2 + return + .endfunc +.Lfunc_end5: + .size set_no, .Lfunc_end5-set_no + + .globl frame_index + .type frame_index,@function +frame_index: + .local i32 + i32.const $push6=, 0 + i32.const $push3=, 0 + i32.load $push4=, __stack_pointer($pop3) + i32.const $push5=, 4096 + i32.sub $push15=, $pop4, $pop5 + tee_local $push14=, $0=, $pop15 + i32.store __stack_pointer($pop6), $pop14 + i32.const $push10=, 2048 + i32.add $push11=, $0, $pop10 + i32.const $push2=, 0 + i32.const $push1=, 1024 + i32.call $drop=, memset@FUNCTION, $pop11, $pop2, $pop1 + i32.const $push9=, 0 + i32.const $push13=, 0 + i32.const $push12=, 1024 + i32.call $push0=, memset@FUNCTION, $0, $pop13, $pop12 + i32.const $push7=, 4096 + i32.add $push8=, $pop0, $pop7 + i32.store __stack_pointer($pop9), $pop8 + return + .endfunc +.Lfunc_end6: + .size frame_index, .Lfunc_end6-frame_index + + .globl drop_result + .type drop_result,@function +drop_result: + .param i32, i32, i32, i32, i32 + .result i32 + block + block + block + i32.eqz $push0=, $3 + br_if 0, $pop0 + i32.call $0=, def@FUNCTION + br 1 +.LBB7_2: + end_block + i32.eqz $push1=, $4 + br_if 1, $pop1 +.LBB7_3: + end_block + call block_tail_dup@FUNCTION + return $0 +.LBB7_4: + end_block + i32.call $drop=, memset@FUNCTION, $0, $1, $2 + call block_tail_dup@FUNCTION + return $0 + .endfunc +.Lfunc_end7: + .size drop_result, .Lfunc_end7-drop_result + + .globl tail_dup_to_reuse_result + .type tail_dup_to_reuse_result,@function +tail_dup_to_reuse_result: + .param i32, i32, i32, i32, i32 + .result i32 + block + block + block + i32.eqz $push1=, $3 + br_if 0, $pop1 + i32.call $0=, def@FUNCTION + br 1 +.LBB8_2: + end_block + i32.eqz $push2=, $4 + br_if 1, $pop2 +.LBB8_3: + end_block + return $0 +.LBB8_4: + end_block + i32.call $push0=, memset@FUNCTION, $0, $1, $2 + return $pop0 + .endfunc +.Lfunc_end8: + .size tail_dup_to_reuse_result, .Lfunc_end8-tail_dup_to_reuse_result + + + .functype def, i32 + .functype block_tail_dup, void diff --git a/src/binaryen/test/llvm_autogenerated/mem-intrinsics.wast b/src/binaryen/test/llvm_autogenerated/mem-intrinsics.wast new file mode 100644 index 0000000000..65ab6a7b90 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/mem-intrinsics.wast @@ -0,0 +1,218 @@ +(module + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (import "env" "block_tail_dup" (func $block_tail_dup)) + (import "env" "def" (func $def (result i32))) + (import "env" "memcpy" (func $memcpy (param i32 i32 i32) (result i32))) + (import "env" "memmove" (func $memmove (param i32 i32 i32) (result i32))) + (import "env" "memset" (func $memset (param i32 i32 i32) (result i32))) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "copy_yes" (func $copy_yes)) + (export "copy_no" (func $copy_no)) + (export "move_yes" (func $move_yes)) + (export "move_no" (func $move_no)) + (export "set_yes" (func $set_yes)) + (export "set_no" (func $set_no)) + (export "frame_index" (func $frame_index)) + (export "drop_result" (func $drop_result)) + (export "tail_dup_to_reuse_result" (func $tail_dup_to_reuse_result)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $copy_yes (; 5 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (return + (call $memcpy + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (func $copy_no (; 6 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (drop + (call $memcpy + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (return) + ) + (func $move_yes (; 7 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (return + (call $memmove + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (func $move_no (; 8 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (drop + (call $memmove + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (return) + ) + (func $set_yes (; 9 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (return + (call $memset + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (func $set_no (; 10 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (drop + (call $memset + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (return) + ) + (func $frame_index (; 11 ;) + (local $0 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $0 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 4096) + ) + ) + ) + (drop + (call $memset + (i32.add + (get_local $0) + (i32.const 2048) + ) + (i32.const 0) + (i32.const 1024) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (call $memset + (get_local $0) + (i32.const 0) + (i32.const 1024) + ) + (i32.const 4096) + ) + ) + (return) + ) + (func $drop_result (; 12 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (block $label$0 + (block $label$1 + (block $label$2 + (br_if $label$2 + (i32.eqz + (get_local $3) + ) + ) + (set_local $0 + (call $def) + ) + (br $label$1) + ) + (br_if $label$0 + (i32.eqz + (get_local $4) + ) + ) + ) + (call $block_tail_dup) + (return + (get_local $0) + ) + ) + (drop + (call $memset + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (call $block_tail_dup) + (return + (get_local $0) + ) + ) + (func $tail_dup_to_reuse_result (; 13 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (block $label$0 + (block $label$1 + (block $label$2 + (br_if $label$2 + (i32.eqz + (get_local $3) + ) + ) + (set_local $0 + (call $def) + ) + (br $label$1) + ) + (br_if $label$0 + (i32.eqz + (get_local $4) + ) + ) + ) + (return + (get_local $0) + ) + ) + (return + (call $memset + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (func $stackSave (; 14 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 15 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 16 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/memory-addr32.s b/src/binaryen/test/llvm_autogenerated/memory-addr32.s new file mode 100644 index 0000000000..d2e6ff306b --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/memory-addr32.s @@ -0,0 +1,23 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/memory-addr32.ll" + .globl current_memory + .type current_memory,@function +current_memory: + .result i32 + current_memory $push0= + return $pop0 + .endfunc +.Lfunc_end0: + .size current_memory, .Lfunc_end0-current_memory + + .globl grow_memory + .type grow_memory,@function +grow_memory: + .param i32 + grow_memory $0 + return + .endfunc +.Lfunc_end1: + .size grow_memory, .Lfunc_end1-grow_memory + + diff --git a/src/binaryen/test/llvm_autogenerated/memory-addr32.wast b/src/binaryen/test/llvm_autogenerated/memory-addr32.wast new file mode 100644 index 0000000000..180551efa8 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/memory-addr32.wast @@ -0,0 +1,54 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "current_memory" (func $current_memory)) + (export "grow_memory" (func $grow_memory)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $current_memory (; 0 ;) (result i32) + (return + (current_memory) + ) + ) + (func $grow_memory (; 1 ;) (param $0 i32) + (drop + (grow_memory + (get_local $0) + ) + ) + (return) + ) + (func $stackSave (; 2 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 3 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 4 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/negative-base-reg.s b/src/binaryen/test/llvm_autogenerated/negative-base-reg.s new file mode 100644 index 0000000000..b3807831c3 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/negative-base-reg.s @@ -0,0 +1,37 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/negative-base-reg.ll" + .hidden main + .globl main + .type main,@function +main: + .result i32 + .local i32 + i32.const $0=, -128 +.LBB0_1: + loop + i32.const $push6=, args+128 + i32.add $push0=, $0, $pop6 + i32.const $push5=, 1 + i32.store 0($pop0), $pop5 + i32.const $push4=, 4 + i32.add $push3=, $0, $pop4 + tee_local $push2=, $0=, $pop3 + br_if 0, $pop2 + end_loop + i32.const $push1=, 0 + return $pop1 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + + .hidden args + .type args,@object + .bss + .globl args + .p2align 4 +args: + .skip 128 + .size args, 128 + + + .ident "clang version 4.0.0 (trunk 279056) (llvm/trunk 279074)" diff --git a/src/binaryen/test/llvm_autogenerated/negative-base-reg.wast b/src/binaryen/test/llvm_autogenerated/negative-base-reg.wast new file mode 100644 index 0000000000..bcac0cc1e1 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/negative-base-reg.wast @@ -0,0 +1,66 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\90\04\00\00") + (export "main" (func $main)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $main (; 0 ;) (result i32) + (local $0 i32) + (set_local $0 + (i32.const -128) + ) + (loop $label$0 + (i32.store + (i32.add + (get_local $0) + (i32.const 144) + ) + (i32.const 1) + ) + (br_if $label$0 + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (return + (i32.const 0) + ) + ) + (func $stackSave (; 1 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 2 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 3 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1168, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/non-executable-stack.s b/src/binaryen/test/llvm_autogenerated/non-executable-stack.s new file mode 100644 index 0000000000..94a2f68d18 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/non-executable-stack.s @@ -0,0 +1,3 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/non-executable-stack.ll" + diff --git a/src/binaryen/test/llvm_autogenerated/non-executable-stack.wast b/src/binaryen/test/llvm_autogenerated/non-executable-stack.wast new file mode 100644 index 0000000000..e6ed0e88b2 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/non-executable-stack.wast @@ -0,0 +1,39 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $stackSave (; 0 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 1 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 2 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/offset.s b/src/binaryen/test/llvm_autogenerated/offset.s new file mode 100644 index 0000000000..81b63991ab --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/offset.s @@ -0,0 +1,404 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/offset.ll" + .globl load_i32_with_folded_offset + .type load_i32_with_folded_offset,@function +load_i32_with_folded_offset: + .param i32 + .result i32 + i32.load $push0=, 24($0) + .endfunc +.Lfunc_end0: + .size load_i32_with_folded_offset, .Lfunc_end0-load_i32_with_folded_offset + + .globl load_i32_with_folded_gep_offset + .type load_i32_with_folded_gep_offset,@function +load_i32_with_folded_gep_offset: + .param i32 + .result i32 + i32.load $push0=, 24($0) + .endfunc +.Lfunc_end1: + .size load_i32_with_folded_gep_offset, .Lfunc_end1-load_i32_with_folded_gep_offset + + .globl load_i32_with_unfolded_gep_negative_offset + .type load_i32_with_unfolded_gep_negative_offset,@function +load_i32_with_unfolded_gep_negative_offset: + .param i32 + .result i32 + i32.const $push0=, -24 + i32.add $push1=, $0, $pop0 + i32.load $push2=, 0($pop1) + .endfunc +.Lfunc_end2: + .size load_i32_with_unfolded_gep_negative_offset, .Lfunc_end2-load_i32_with_unfolded_gep_negative_offset + + .globl load_i32_with_unfolded_offset + .type load_i32_with_unfolded_offset,@function +load_i32_with_unfolded_offset: + .param i32 + .result i32 + i32.const $push0=, 24 + i32.add $push1=, $0, $pop0 + i32.load $push2=, 0($pop1) + .endfunc +.Lfunc_end3: + .size load_i32_with_unfolded_offset, .Lfunc_end3-load_i32_with_unfolded_offset + + .globl load_i32_with_unfolded_gep_offset + .type load_i32_with_unfolded_gep_offset,@function +load_i32_with_unfolded_gep_offset: + .param i32 + .result i32 + i32.const $push0=, 24 + i32.add $push1=, $0, $pop0 + i32.load $push2=, 0($pop1) + .endfunc +.Lfunc_end4: + .size load_i32_with_unfolded_gep_offset, .Lfunc_end4-load_i32_with_unfolded_gep_offset + + .globl load_i64_with_folded_offset + .type load_i64_with_folded_offset,@function +load_i64_with_folded_offset: + .param i32 + .result i64 + i64.load $push0=, 24($0) + .endfunc +.Lfunc_end5: + .size load_i64_with_folded_offset, .Lfunc_end5-load_i64_with_folded_offset + + .globl load_i64_with_folded_gep_offset + .type load_i64_with_folded_gep_offset,@function +load_i64_with_folded_gep_offset: + .param i32 + .result i64 + i64.load $push0=, 24($0) + .endfunc +.Lfunc_end6: + .size load_i64_with_folded_gep_offset, .Lfunc_end6-load_i64_with_folded_gep_offset + + .globl load_i64_with_unfolded_gep_negative_offset + .type load_i64_with_unfolded_gep_negative_offset,@function +load_i64_with_unfolded_gep_negative_offset: + .param i32 + .result i64 + i32.const $push0=, -24 + i32.add $push1=, $0, $pop0 + i64.load $push2=, 0($pop1) + .endfunc +.Lfunc_end7: + .size load_i64_with_unfolded_gep_negative_offset, .Lfunc_end7-load_i64_with_unfolded_gep_negative_offset + + .globl load_i64_with_unfolded_offset + .type load_i64_with_unfolded_offset,@function +load_i64_with_unfolded_offset: + .param i32 + .result i64 + i32.const $push0=, 24 + i32.add $push1=, $0, $pop0 + i64.load $push2=, 0($pop1) + .endfunc +.Lfunc_end8: + .size load_i64_with_unfolded_offset, .Lfunc_end8-load_i64_with_unfolded_offset + + .globl load_i64_with_unfolded_gep_offset + .type load_i64_with_unfolded_gep_offset,@function +load_i64_with_unfolded_gep_offset: + .param i32 + .result i64 + i32.const $push0=, 24 + i32.add $push1=, $0, $pop0 + i64.load $push2=, 0($pop1) + .endfunc +.Lfunc_end9: + .size load_i64_with_unfolded_gep_offset, .Lfunc_end9-load_i64_with_unfolded_gep_offset + + .globl load_i32_with_folded_or_offset + .type load_i32_with_folded_or_offset,@function +load_i32_with_folded_or_offset: + .param i32 + .result i32 + i32.const $push0=, -4 + i32.and $push1=, $0, $pop0 + i32.load8_s $push2=, 2($pop1) + .endfunc +.Lfunc_end10: + .size load_i32_with_folded_or_offset, .Lfunc_end10-load_i32_with_folded_or_offset + + .globl store_i32_with_folded_offset + .type store_i32_with_folded_offset,@function +store_i32_with_folded_offset: + .param i32 + i32.const $push0=, 0 + i32.store 24($0), $pop0 + .endfunc +.Lfunc_end11: + .size store_i32_with_folded_offset, .Lfunc_end11-store_i32_with_folded_offset + + .globl store_i32_with_folded_gep_offset + .type store_i32_with_folded_gep_offset,@function +store_i32_with_folded_gep_offset: + .param i32 + i32.const $push0=, 0 + i32.store 24($0), $pop0 + .endfunc +.Lfunc_end12: + .size store_i32_with_folded_gep_offset, .Lfunc_end12-store_i32_with_folded_gep_offset + + .globl store_i32_with_unfolded_gep_negative_offset + .type store_i32_with_unfolded_gep_negative_offset,@function +store_i32_with_unfolded_gep_negative_offset: + .param i32 + i32.const $push0=, -24 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 0 + i32.store 0($pop1), $pop2 + .endfunc +.Lfunc_end13: + .size store_i32_with_unfolded_gep_negative_offset, .Lfunc_end13-store_i32_with_unfolded_gep_negative_offset + + .globl store_i32_with_unfolded_offset + .type store_i32_with_unfolded_offset,@function +store_i32_with_unfolded_offset: + .param i32 + i32.const $push0=, 24 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 0 + i32.store 0($pop1), $pop2 + .endfunc +.Lfunc_end14: + .size store_i32_with_unfolded_offset, .Lfunc_end14-store_i32_with_unfolded_offset + + .globl store_i32_with_unfolded_gep_offset + .type store_i32_with_unfolded_gep_offset,@function +store_i32_with_unfolded_gep_offset: + .param i32 + i32.const $push0=, 24 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 0 + i32.store 0($pop1), $pop2 + .endfunc +.Lfunc_end15: + .size store_i32_with_unfolded_gep_offset, .Lfunc_end15-store_i32_with_unfolded_gep_offset + + .globl store_i64_with_folded_offset + .type store_i64_with_folded_offset,@function +store_i64_with_folded_offset: + .param i32 + i64.const $push0=, 0 + i64.store 24($0), $pop0 + .endfunc +.Lfunc_end16: + .size store_i64_with_folded_offset, .Lfunc_end16-store_i64_with_folded_offset + + .globl store_i64_with_folded_gep_offset + .type store_i64_with_folded_gep_offset,@function +store_i64_with_folded_gep_offset: + .param i32 + i64.const $push0=, 0 + i64.store 24($0), $pop0 + .endfunc +.Lfunc_end17: + .size store_i64_with_folded_gep_offset, .Lfunc_end17-store_i64_with_folded_gep_offset + + .globl store_i64_with_unfolded_gep_negative_offset + .type store_i64_with_unfolded_gep_negative_offset,@function +store_i64_with_unfolded_gep_negative_offset: + .param i32 + i32.const $push0=, -24 + i32.add $push1=, $0, $pop0 + i64.const $push2=, 0 + i64.store 0($pop1), $pop2 + .endfunc +.Lfunc_end18: + .size store_i64_with_unfolded_gep_negative_offset, .Lfunc_end18-store_i64_with_unfolded_gep_negative_offset + + .globl store_i64_with_unfolded_offset + .type store_i64_with_unfolded_offset,@function +store_i64_with_unfolded_offset: + .param i32 + i32.const $push0=, 24 + i32.add $push1=, $0, $pop0 + i64.const $push2=, 0 + i64.store 0($pop1), $pop2 + .endfunc +.Lfunc_end19: + .size store_i64_with_unfolded_offset, .Lfunc_end19-store_i64_with_unfolded_offset + + .globl store_i64_with_unfolded_gep_offset + .type store_i64_with_unfolded_gep_offset,@function +store_i64_with_unfolded_gep_offset: + .param i32 + i32.const $push0=, 24 + i32.add $push1=, $0, $pop0 + i64.const $push2=, 0 + i64.store 0($pop1), $pop2 + .endfunc +.Lfunc_end20: + .size store_i64_with_unfolded_gep_offset, .Lfunc_end20-store_i64_with_unfolded_gep_offset + + .globl store_i32_with_folded_or_offset + .type store_i32_with_folded_or_offset,@function +store_i32_with_folded_or_offset: + .param i32 + i32.const $push0=, -4 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 0 + i32.store8 2($pop1), $pop2 + .endfunc +.Lfunc_end21: + .size store_i32_with_folded_or_offset, .Lfunc_end21-store_i32_with_folded_or_offset + + .globl load_i32_from_numeric_address + .type load_i32_from_numeric_address,@function +load_i32_from_numeric_address: + .result i32 + i32.const $push0=, 0 + i32.load $push1=, 42($pop0) + .endfunc +.Lfunc_end22: + .size load_i32_from_numeric_address, .Lfunc_end22-load_i32_from_numeric_address + + .globl load_i32_from_global_address + .type load_i32_from_global_address,@function +load_i32_from_global_address: + .result i32 + i32.const $push0=, 0 + i32.load $push1=, gv($pop0) + .endfunc +.Lfunc_end23: + .size load_i32_from_global_address, .Lfunc_end23-load_i32_from_global_address + + .globl store_i32_to_numeric_address + .type store_i32_to_numeric_address,@function +store_i32_to_numeric_address: + i32.const $push0=, 0 + i32.const $push1=, 0 + i32.store 42($pop0), $pop1 + .endfunc +.Lfunc_end24: + .size store_i32_to_numeric_address, .Lfunc_end24-store_i32_to_numeric_address + + .globl store_i32_to_global_address + .type store_i32_to_global_address,@function +store_i32_to_global_address: + i32.const $push0=, 0 + i32.const $push1=, 0 + i32.store gv($pop0), $pop1 + .endfunc +.Lfunc_end25: + .size store_i32_to_global_address, .Lfunc_end25-store_i32_to_global_address + + .globl load_i8_s_with_folded_offset + .type load_i8_s_with_folded_offset,@function +load_i8_s_with_folded_offset: + .param i32 + .result i32 + i32.load8_s $push0=, 24($0) + .endfunc +.Lfunc_end26: + .size load_i8_s_with_folded_offset, .Lfunc_end26-load_i8_s_with_folded_offset + + .globl load_i8_s_with_folded_gep_offset + .type load_i8_s_with_folded_gep_offset,@function +load_i8_s_with_folded_gep_offset: + .param i32 + .result i32 + i32.load8_s $push0=, 24($0) + .endfunc +.Lfunc_end27: + .size load_i8_s_with_folded_gep_offset, .Lfunc_end27-load_i8_s_with_folded_gep_offset + + .globl load_i8_u_with_folded_offset + .type load_i8_u_with_folded_offset,@function +load_i8_u_with_folded_offset: + .param i32 + .result i32 + i32.load8_u $push0=, 24($0) + .endfunc +.Lfunc_end28: + .size load_i8_u_with_folded_offset, .Lfunc_end28-load_i8_u_with_folded_offset + + .globl load_i8_u_with_folded_gep_offset + .type load_i8_u_with_folded_gep_offset,@function +load_i8_u_with_folded_gep_offset: + .param i32 + .result i32 + i32.load8_u $push0=, 24($0) + .endfunc +.Lfunc_end29: + .size load_i8_u_with_folded_gep_offset, .Lfunc_end29-load_i8_u_with_folded_gep_offset + + .globl store_i8_with_folded_offset + .type store_i8_with_folded_offset,@function +store_i8_with_folded_offset: + .param i32 + i32.const $push0=, 0 + i32.store8 24($0), $pop0 + .endfunc +.Lfunc_end30: + .size store_i8_with_folded_offset, .Lfunc_end30-store_i8_with_folded_offset + + .globl store_i8_with_folded_gep_offset + .type store_i8_with_folded_gep_offset,@function +store_i8_with_folded_gep_offset: + .param i32 + i32.const $push0=, 0 + i32.store8 24($0), $pop0 + .endfunc +.Lfunc_end31: + .size store_i8_with_folded_gep_offset, .Lfunc_end31-store_i8_with_folded_gep_offset + + .globl aggregate_load_store + .type aggregate_load_store,@function +aggregate_load_store: + .param i32, i32 + .local i32, i32, i32 + i32.load $2=, 0($0) + i32.load $3=, 4($0) + i32.load $4=, 8($0) + i32.load $push0=, 12($0) + i32.store 12($1), $pop0 + i32.store 8($1), $4 + i32.store 4($1), $3 + i32.store 0($1), $2 + .endfunc +.Lfunc_end32: + .size aggregate_load_store, .Lfunc_end32-aggregate_load_store + + .globl aggregate_return + .type aggregate_return,@function +aggregate_return: + .param i32 + i64.const $push0=, 0 + i64.store 8($0):p2align=2, $pop0 + i64.const $push1=, 0 + i64.store 0($0):p2align=2, $pop1 + .endfunc +.Lfunc_end33: + .size aggregate_return, .Lfunc_end33-aggregate_return + + .globl aggregate_return_without_merge + .type aggregate_return_without_merge,@function +aggregate_return_without_merge: + .param i32 + i32.const $push0=, 0 + i32.store8 14($0), $pop0 + i32.const $push3=, 0 + i32.store16 12($0), $pop3 + i32.const $push2=, 0 + i32.store 8($0), $pop2 + i64.const $push1=, 0 + i64.store 0($0), $pop1 + .endfunc +.Lfunc_end34: + .size aggregate_return_without_merge, .Lfunc_end34-aggregate_return_without_merge + + .type gv,@object + .bss + .globl gv + .p2align 2 +gv: + .int32 0 + .size gv, 4 + + diff --git a/src/binaryen/test/llvm_autogenerated/offset.wast b/src/binaryen/test/llvm_autogenerated/offset.wast new file mode 100644 index 0000000000..00fa47e43e --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/offset.wast @@ -0,0 +1,358 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (data (i32.const 12) "\00\00\00\00") + (export "load_i32_with_folded_offset" (func $load_i32_with_folded_offset)) + (export "load_i32_with_folded_gep_offset" (func $load_i32_with_folded_gep_offset)) + (export "load_i32_with_unfolded_gep_negative_offset" (func $load_i32_with_unfolded_gep_negative_offset)) + (export "load_i32_with_unfolded_offset" (func $load_i32_with_unfolded_offset)) + (export "load_i32_with_unfolded_gep_offset" (func $load_i32_with_unfolded_gep_offset)) + (export "load_i64_with_folded_offset" (func $load_i64_with_folded_offset)) + (export "load_i64_with_folded_gep_offset" (func $load_i64_with_folded_gep_offset)) + (export "load_i64_with_unfolded_gep_negative_offset" (func $load_i64_with_unfolded_gep_negative_offset)) + (export "load_i64_with_unfolded_offset" (func $load_i64_with_unfolded_offset)) + (export "load_i64_with_unfolded_gep_offset" (func $load_i64_with_unfolded_gep_offset)) + (export "load_i32_with_folded_or_offset" (func $load_i32_with_folded_or_offset)) + (export "store_i32_with_folded_offset" (func $store_i32_with_folded_offset)) + (export "store_i32_with_folded_gep_offset" (func $store_i32_with_folded_gep_offset)) + (export "store_i32_with_unfolded_gep_negative_offset" (func $store_i32_with_unfolded_gep_negative_offset)) + (export "store_i32_with_unfolded_offset" (func $store_i32_with_unfolded_offset)) + (export "store_i32_with_unfolded_gep_offset" (func $store_i32_with_unfolded_gep_offset)) + (export "store_i64_with_folded_offset" (func $store_i64_with_folded_offset)) + (export "store_i64_with_folded_gep_offset" (func $store_i64_with_folded_gep_offset)) + (export "store_i64_with_unfolded_gep_negative_offset" (func $store_i64_with_unfolded_gep_negative_offset)) + (export "store_i64_with_unfolded_offset" (func $store_i64_with_unfolded_offset)) + (export "store_i64_with_unfolded_gep_offset" (func $store_i64_with_unfolded_gep_offset)) + (export "store_i32_with_folded_or_offset" (func $store_i32_with_folded_or_offset)) + (export "load_i32_from_numeric_address" (func $load_i32_from_numeric_address)) + (export "load_i32_from_global_address" (func $load_i32_from_global_address)) + (export "store_i32_to_numeric_address" (func $store_i32_to_numeric_address)) + (export "store_i32_to_global_address" (func $store_i32_to_global_address)) + (export "load_i8_s_with_folded_offset" (func $load_i8_s_with_folded_offset)) + (export "load_i8_s_with_folded_gep_offset" (func $load_i8_s_with_folded_gep_offset)) + (export "load_i8_u_with_folded_offset" (func $load_i8_u_with_folded_offset)) + (export "load_i8_u_with_folded_gep_offset" (func $load_i8_u_with_folded_gep_offset)) + (export "store_i8_with_folded_offset" (func $store_i8_with_folded_offset)) + (export "store_i8_with_folded_gep_offset" (func $store_i8_with_folded_gep_offset)) + (export "aggregate_load_store" (func $aggregate_load_store)) + (export "aggregate_return" (func $aggregate_return)) + (export "aggregate_return_without_merge" (func $aggregate_return_without_merge)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $load_i32_with_folded_offset (; 0 ;) (param $0 i32) (result i32) + (i32.load offset=24 + (get_local $0) + ) + ) + (func $load_i32_with_folded_gep_offset (; 1 ;) (param $0 i32) (result i32) + (i32.load offset=24 + (get_local $0) + ) + ) + (func $load_i32_with_unfolded_gep_negative_offset (; 2 ;) (param $0 i32) (result i32) + (i32.load + (i32.add + (get_local $0) + (i32.const -24) + ) + ) + ) + (func $load_i32_with_unfolded_offset (; 3 ;) (param $0 i32) (result i32) + (i32.load + (i32.add + (get_local $0) + (i32.const 24) + ) + ) + ) + (func $load_i32_with_unfolded_gep_offset (; 4 ;) (param $0 i32) (result i32) + (i32.load + (i32.add + (get_local $0) + (i32.const 24) + ) + ) + ) + (func $load_i64_with_folded_offset (; 5 ;) (param $0 i32) (result i64) + (i64.load offset=24 + (get_local $0) + ) + ) + (func $load_i64_with_folded_gep_offset (; 6 ;) (param $0 i32) (result i64) + (i64.load offset=24 + (get_local $0) + ) + ) + (func $load_i64_with_unfolded_gep_negative_offset (; 7 ;) (param $0 i32) (result i64) + (i64.load + (i32.add + (get_local $0) + (i32.const -24) + ) + ) + ) + (func $load_i64_with_unfolded_offset (; 8 ;) (param $0 i32) (result i64) + (i64.load + (i32.add + (get_local $0) + (i32.const 24) + ) + ) + ) + (func $load_i64_with_unfolded_gep_offset (; 9 ;) (param $0 i32) (result i64) + (i64.load + (i32.add + (get_local $0) + (i32.const 24) + ) + ) + ) + (func $load_i32_with_folded_or_offset (; 10 ;) (param $0 i32) (result i32) + (i32.load8_s offset=2 + (i32.and + (get_local $0) + (i32.const -4) + ) + ) + ) + (func $store_i32_with_folded_offset (; 11 ;) (param $0 i32) + (i32.store offset=24 + (get_local $0) + (i32.const 0) + ) + ) + (func $store_i32_with_folded_gep_offset (; 12 ;) (param $0 i32) + (i32.store offset=24 + (get_local $0) + (i32.const 0) + ) + ) + (func $store_i32_with_unfolded_gep_negative_offset (; 13 ;) (param $0 i32) + (i32.store + (i32.add + (get_local $0) + (i32.const -24) + ) + (i32.const 0) + ) + ) + (func $store_i32_with_unfolded_offset (; 14 ;) (param $0 i32) + (i32.store + (i32.add + (get_local $0) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (func $store_i32_with_unfolded_gep_offset (; 15 ;) (param $0 i32) + (i32.store + (i32.add + (get_local $0) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (func $store_i64_with_folded_offset (; 16 ;) (param $0 i32) + (i64.store offset=24 + (get_local $0) + (i64.const 0) + ) + ) + (func $store_i64_with_folded_gep_offset (; 17 ;) (param $0 i32) + (i64.store offset=24 + (get_local $0) + (i64.const 0) + ) + ) + (func $store_i64_with_unfolded_gep_negative_offset (; 18 ;) (param $0 i32) + (i64.store + (i32.add + (get_local $0) + (i32.const -24) + ) + (i64.const 0) + ) + ) + (func $store_i64_with_unfolded_offset (; 19 ;) (param $0 i32) + (i64.store + (i32.add + (get_local $0) + (i32.const 24) + ) + (i64.const 0) + ) + ) + (func $store_i64_with_unfolded_gep_offset (; 20 ;) (param $0 i32) + (i64.store + (i32.add + (get_local $0) + (i32.const 24) + ) + (i64.const 0) + ) + ) + (func $store_i32_with_folded_or_offset (; 21 ;) (param $0 i32) + (i32.store8 offset=2 + (i32.and + (get_local $0) + (i32.const -4) + ) + (i32.const 0) + ) + ) + (func $load_i32_from_numeric_address (; 22 ;) (result i32) + (i32.load offset=42 + (i32.const 0) + ) + ) + (func $load_i32_from_global_address (; 23 ;) (result i32) + (i32.load offset=12 + (i32.const 0) + ) + ) + (func $store_i32_to_numeric_address (; 24 ;) + (i32.store offset=42 + (i32.const 0) + (i32.const 0) + ) + ) + (func $store_i32_to_global_address (; 25 ;) + (i32.store offset=12 + (i32.const 0) + (i32.const 0) + ) + ) + (func $load_i8_s_with_folded_offset (; 26 ;) (param $0 i32) (result i32) + (i32.load8_s offset=24 + (get_local $0) + ) + ) + (func $load_i8_s_with_folded_gep_offset (; 27 ;) (param $0 i32) (result i32) + (i32.load8_s offset=24 + (get_local $0) + ) + ) + (func $load_i8_u_with_folded_offset (; 28 ;) (param $0 i32) (result i32) + (i32.load8_u offset=24 + (get_local $0) + ) + ) + (func $load_i8_u_with_folded_gep_offset (; 29 ;) (param $0 i32) (result i32) + (i32.load8_u offset=24 + (get_local $0) + ) + ) + (func $store_i8_with_folded_offset (; 30 ;) (param $0 i32) + (i32.store8 offset=24 + (get_local $0) + (i32.const 0) + ) + ) + (func $store_i8_with_folded_gep_offset (; 31 ;) (param $0 i32) + (i32.store8 offset=24 + (get_local $0) + (i32.const 0) + ) + ) + (func $aggregate_load_store (; 32 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (set_local $2 + (i32.load + (get_local $0) + ) + ) + (set_local $3 + (i32.load offset=4 + (get_local $0) + ) + ) + (set_local $4 + (i32.load offset=8 + (get_local $0) + ) + ) + (i32.store offset=12 + (get_local $1) + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.store offset=8 + (get_local $1) + (get_local $4) + ) + (i32.store offset=4 + (get_local $1) + (get_local $3) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + ) + (func $aggregate_return (; 33 ;) (param $0 i32) + (i64.store offset=8 align=4 + (get_local $0) + (i64.const 0) + ) + (i64.store align=4 + (get_local $0) + (i64.const 0) + ) + ) + (func $aggregate_return_without_merge (; 34 ;) (param $0 i32) + (i32.store8 offset=14 + (get_local $0) + (i32.const 0) + ) + (i32.store16 offset=12 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i64.store + (get_local $0) + (i64.const 0) + ) + ) + (func $stackSave (; 35 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 36 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 37 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/phi.s b/src/binaryen/test/llvm_autogenerated/phi.s new file mode 100644 index 0000000000..20211dddce --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/phi.s @@ -0,0 +1,46 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/phi.ll" + .globl test0 + .type test0,@function +test0: + .param i32 + .result i32 + block + i32.const $push0=, -1 + i32.gt_s $push1=, $0, $pop0 + br_if 0, $pop1 + i32.const $push2=, 3 + i32.div_s $0=, $0, $pop2 +.LBB0_2: + end_block + return $0 + .endfunc +.Lfunc_end0: + .size test0, .Lfunc_end0-test0 + + .globl test1 + .type test1,@function +test1: + .param i32 + .result i32 + .local i32, i32, i32, i32 + i32.const $2=, 0 + i32.const $3=, 1 + i32.const $4=, 0 +.LBB1_1: + loop + copy_local $1=, $2 + copy_local $2=, $3 + copy_local $3=, $1 + i32.const $push3=, 1 + i32.add $push2=, $4, $pop3 + tee_local $push1=, $4=, $pop2 + i32.lt_s $push0=, $pop1, $0 + br_if 0, $pop0 + end_loop + return $1 + .endfunc +.Lfunc_end1: + .size test1, .Lfunc_end1-test1 + + diff --git a/src/binaryen/test/llvm_autogenerated/phi.wast b/src/binaryen/test/llvm_autogenerated/phi.wast new file mode 100644 index 0000000000..7ece876cf6 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/phi.wast @@ -0,0 +1,100 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "test0" (func $test0)) + (export "test1" (func $test1)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $test0 (; 0 ;) (param $0 i32) (result i32) + (block $label$0 + (br_if $label$0 + (i32.gt_s + (get_local $0) + (i32.const -1) + ) + ) + (set_local $0 + (i32.div_s + (get_local $0) + (i32.const 3) + ) + ) + ) + (return + (get_local $0) + ) + ) + (func $test1 (; 1 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (set_local $2 + (i32.const 0) + ) + (set_local $3 + (i32.const 1) + ) + (set_local $4 + (i32.const 0) + ) + (loop $label$0 + (set_local $1 + (get_local $2) + ) + (set_local $2 + (get_local $3) + ) + (set_local $3 + (get_local $1) + ) + (br_if $label$0 + (i32.lt_s + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (get_local $0) + ) + ) + ) + (return + (get_local $1) + ) + ) + (func $stackSave (; 2 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 3 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 4 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/reg-stackify.s b/src/binaryen/test/llvm_autogenerated/reg-stackify.s new file mode 100644 index 0000000000..11a8e863b8 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/reg-stackify.s @@ -0,0 +1,536 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/reg-stackify.ll" + .globl no0 + .type no0,@function +no0: +.Lfunc_begin0: + .param i32, i32 + .result i32 + i32.load $1=, 0($1) + i32.const $push0=, 0 + i32.store 0($0), $pop0 + return $1 + .endfunc +.Lfunc_end0: + .size no0, .Lfunc_end0-no0 + + .globl no1 + .type no1,@function +no1: +.Lfunc_begin1: + .param i32, i32 + .result i32 + i32.load $1=, 0($1) + i32.const $push0=, 0 + i32.store 0($0), $pop0 + return $1 + .endfunc +.Lfunc_end1: + .size no1, .Lfunc_end1-no1 + + .globl yes0 + .type yes0,@function +yes0: +.Lfunc_begin2: + .param i32, i32 + .result i32 + i32.const $push0=, 0 + i32.store 0($0), $pop0 + i32.load $push1=, 0($1) + return $pop1 + .endfunc +.Lfunc_end2: + .size yes0, .Lfunc_end2-yes0 + + .globl yes1 + .type yes1,@function +yes1: +.Lfunc_begin3: + .param i32 + .result i32 + i32.load $push0=, 0($0) + return $pop0 + .endfunc +.Lfunc_end3: + .size yes1, .Lfunc_end3-yes1 + + .globl sink_trap + .type sink_trap,@function +sink_trap: +.Lfunc_begin4: + .param i32, i32, i32 + .result i32 + i32.const $push0=, 0 + i32.store 0($2), $pop0 + i32.div_s $push1=, $0, $1 + return $pop1 + .endfunc +.Lfunc_end4: + .size sink_trap, .Lfunc_end4-sink_trap + + .globl sink_readnone_call + .type sink_readnone_call,@function +sink_readnone_call: +.Lfunc_begin5: + .param i32, i32, i32 + .result i32 + i32.const $push1=, 0 + i32.store 0($2), $pop1 + i32.call $push0=, readnone_callee@FUNCTION + return $pop0 + .endfunc +.Lfunc_end5: + .size sink_readnone_call, .Lfunc_end5-sink_readnone_call + + .globl no_sink_readonly_call + .type no_sink_readonly_call,@function +no_sink_readonly_call: +.Lfunc_begin6: + .param i32, i32, i32 + .result i32 + .local i32 + i32.call $3=, readonly_callee@FUNCTION + i32.const $push0=, 0 + i32.store 0($2), $pop0 + return $3 + .endfunc +.Lfunc_end6: + .size no_sink_readonly_call, .Lfunc_end6-no_sink_readonly_call + + .globl stack_uses + .type stack_uses,@function +stack_uses: +.Lfunc_begin7: + .param i32, i32, i32, i32 + .result i32 + block + i32.const $push13=, 1 + i32.lt_s $push5=, $0, $pop13 + i32.const $push0=, 2 + i32.lt_s $push4=, $1, $pop0 + i32.xor $push6=, $pop5, $pop4 + i32.const $push12=, 1 + i32.lt_s $push2=, $2, $pop12 + i32.const $push11=, 2 + i32.lt_s $push1=, $3, $pop11 + i32.xor $push3=, $pop2, $pop1 + i32.xor $push7=, $pop6, $pop3 + i32.const $push10=, 1 + i32.ne $push8=, $pop7, $pop10 + br_if 0, $pop8 + i32.const $push9=, 0 + return $pop9 +.LBB7_2: + end_block + i32.const $push14=, 1 + return $pop14 + .endfunc +.Lfunc_end7: + .size stack_uses, .Lfunc_end7-stack_uses + + .globl multiple_uses + .type multiple_uses,@function +multiple_uses: +.Lfunc_begin8: + .param i32, i32, i32 + .local i32 + block + i32.load $push3=, 0($2) + tee_local $push2=, $3=, $pop3 + i32.ge_u $push0=, $pop2, $1 + br_if 0, $pop0 + i32.lt_u $push1=, $3, $0 + br_if 0, $pop1 + i32.store 0($2), $3 +.LBB8_3: + end_block + return + .endfunc +.Lfunc_end8: + .size multiple_uses, .Lfunc_end8-multiple_uses + + .hidden stackify_store_across_side_effects + .globl stackify_store_across_side_effects + .type stackify_store_across_side_effects,@function +stackify_store_across_side_effects: +.Lfunc_begin9: + .param i32 + i64.const $push0=, 4611686018427387904 + i64.store 0($0), $pop0 + call evoke_side_effects@FUNCTION + i64.const $push1=, 4611686018427387904 + i64.store 0($0), $pop1 + call evoke_side_effects@FUNCTION + return + .endfunc +.Lfunc_end9: + .size stackify_store_across_side_effects, .Lfunc_end9-stackify_store_across_side_effects + + .globl div_tree + .type div_tree,@function +div_tree: +.Lfunc_begin10: + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .result i32 + i32.div_s $push11=, $0, $1 + i32.div_s $push10=, $2, $3 + i32.div_s $push12=, $pop11, $pop10 + i32.div_s $push8=, $4, $5 + i32.div_s $push7=, $6, $7 + i32.div_s $push9=, $pop8, $pop7 + i32.div_s $push13=, $pop12, $pop9 + i32.div_s $push4=, $8, $9 + i32.div_s $push3=, $10, $11 + i32.div_s $push5=, $pop4, $pop3 + i32.div_s $push1=, $12, $13 + i32.div_s $push0=, $14, $15 + i32.div_s $push2=, $pop1, $pop0 + i32.div_s $push6=, $pop5, $pop2 + i32.div_s $push14=, $pop13, $pop6 + return $pop14 + .endfunc +.Lfunc_end10: + .size div_tree, .Lfunc_end10-div_tree + + .globl simple_multiple_use + .type simple_multiple_use,@function +simple_multiple_use: +.Lfunc_begin11: + .param i32, i32 + i32.mul $push1=, $1, $0 + tee_local $push0=, $1=, $pop1 + call use_a@FUNCTION, $pop0 + call use_b@FUNCTION, $1 + return + .endfunc +.Lfunc_end11: + .size simple_multiple_use, .Lfunc_end11-simple_multiple_use + + .globl multiple_uses_in_same_insn + .type multiple_uses_in_same_insn,@function +multiple_uses_in_same_insn: +.Lfunc_begin12: + .param i32, i32 + i32.mul $push1=, $1, $0 + tee_local $push0=, $1=, $pop1 + call use_2@FUNCTION, $pop0, $1 + return + .endfunc +.Lfunc_end12: + .size multiple_uses_in_same_insn, .Lfunc_end12-multiple_uses_in_same_insn + + .globl commute + .type commute,@function +commute: +.Lfunc_begin13: + .result i32 + i32.call $push0=, red@FUNCTION + i32.call $push1=, green@FUNCTION + i32.add $push2=, $pop0, $pop1 + i32.call $push3=, blue@FUNCTION + i32.add $push4=, $pop2, $pop3 + return $pop4 + .endfunc +.Lfunc_end13: + .size commute, .Lfunc_end13-commute + + .globl no_stackify_past_use + .type no_stackify_past_use,@function +no_stackify_past_use: +.Lfunc_begin14: + .param i32 + .result i32 + .local i32 + i32.call $1=, callee@FUNCTION, $0 + i32.const $push0=, 1 + i32.add $push1=, $0, $pop0 + i32.call $push2=, callee@FUNCTION, $pop1 + i32.sub $push3=, $pop2, $1 + i32.div_s $push4=, $pop3, $1 + return $pop4 + .endfunc +.Lfunc_end14: + .size no_stackify_past_use, .Lfunc_end14-no_stackify_past_use + + .globl commute_to_fix_ordering + .type commute_to_fix_ordering,@function +commute_to_fix_ordering: +.Lfunc_begin15: + .param i32 + .result i32 + .local i32 + i32.call $push6=, callee@FUNCTION, $0 + tee_local $push5=, $1=, $pop6 + i32.const $push0=, 1 + i32.add $push1=, $0, $pop0 + i32.call $push2=, callee@FUNCTION, $pop1 + i32.add $push3=, $1, $pop2 + i32.mul $push4=, $pop5, $pop3 + return $pop4 + .endfunc +.Lfunc_end15: + .size commute_to_fix_ordering, .Lfunc_end15-commute_to_fix_ordering + + .globl multiple_defs + .type multiple_defs,@function +multiple_defs: +.Lfunc_begin16: + .param i32, i32, i32, i32, i32 + .local f64, f64, f64, f64, f64 + f64.const $6=, 0x0p0 + i32.const $push3=, 1 + i32.and $2=, $2, $pop3 + i32.const $push12=, 1 + i32.and $3=, $3, $pop12 + f64.const $push11=, -0x1.62cc8f5c28f5cp13 + f64.const $push9=, -0x1.e147ae147bp-3 + i32.const $push5=, 2 + i32.or $push6=, $1, $pop5 + i32.const $push7=, 14 + i32.eq $push8=, $pop6, $pop7 + f64.select $5=, $pop11, $pop9, $pop8 + f64.const $7=, 0x0p0 +.LBB16_1: + loop + block + f64.const $push14=, 0x1.73c083126e979p4 + f64.ge $push0=, $7, $pop14 + f64.ne $push1=, $7, $7 + i32.or $push2=, $pop0, $pop1 + br_if 0, $pop2 + copy_local $8=, $6 +.LBB16_3: + loop + f64.const $push20=, -0x1.62cc8f5c28f5cp13 + f64.const $push19=, -0x1p0 + f64.add $push18=, $7, $pop19 + tee_local $push17=, $9=, $pop18 + f64.select $push4=, $pop20, $pop17, $2 + copy_local $push16=, $8 + tee_local $push15=, $6=, $pop16 + f64.add $8=, $pop4, $pop15 + block + br_if 0, $3 + copy_local $9=, $5 +.LBB16_5: + end_block + f64.add $8=, $9, $8 + f64.const $push21=, 0x1.73c083126e979p4 + f64.lt $push10=, $7, $pop21 + br_if 0, $pop10 +.LBB16_6: + end_loop + end_block + f64.const $push13=, 0x1p0 + f64.add $7=, $7, $pop13 + br 0 +.LBB16_7: + end_loop + .endfunc +.Lfunc_end16: + .size multiple_defs, .Lfunc_end16-multiple_defs + + .globl no_stackify_call_past_load + .type no_stackify_call_past_load,@function +no_stackify_call_past_load: +.Lfunc_begin17: + .result i32 + .local i32, i32 + i32.call $0=, red@FUNCTION + i32.const $push0=, 0 + i32.load $1=, count($pop0) + i32.call $drop=, callee@FUNCTION, $0 + return $1 + .endfunc +.Lfunc_end17: + .size no_stackify_call_past_load, .Lfunc_end17-no_stackify_call_past_load + + .globl no_stackify_store_past_load + .type no_stackify_store_past_load,@function +no_stackify_store_past_load: +.Lfunc_begin18: + .param i32, i32, i32 + .result i32 + i32.store 0($1), $0 + i32.load $2=, 0($2) + i32.call $drop=, callee@FUNCTION, $0 + return $2 + .endfunc +.Lfunc_end18: + .size no_stackify_store_past_load, .Lfunc_end18-no_stackify_store_past_load + + .globl store_past_invar_load + .type store_past_invar_load,@function +store_past_invar_load: +.Lfunc_begin19: + .param i32, i32, i32 + .result i32 + i32.store 0($1), $0 + i32.call $drop=, callee@FUNCTION, $0 + i32.load $push0=, 0($2) + return $pop0 + .endfunc +.Lfunc_end19: + .size store_past_invar_load, .Lfunc_end19-store_past_invar_load + + .globl ignore_dbg_value + .type ignore_dbg_value,@function +ignore_dbg_value: +.Lfunc_begin20: + unreachable + .endfunc +.Lfunc_end20: + .size ignore_dbg_value, .Lfunc_end20-ignore_dbg_value + + .globl no_stackify_past_epilogue + .type no_stackify_past_epilogue,@function +no_stackify_past_epilogue: +.Lfunc_begin21: + .result i32 + .local i32, i32 + i32.const $push3=, 0 + i32.const $push0=, 0 + i32.load $push1=, __stack_pointer($pop0) + i32.const $push2=, 16 + i32.sub $push10=, $pop1, $pop2 + tee_local $push9=, $1=, $pop10 + i32.store __stack_pointer($pop3), $pop9 + i32.const $push7=, 12 + i32.add $push8=, $1, $pop7 + i32.call $0=, use_memory@FUNCTION, $pop8 + i32.const $push6=, 0 + i32.const $push4=, 16 + i32.add $push5=, $1, $pop4 + i32.store __stack_pointer($pop6), $pop5 + return $0 + .endfunc +.Lfunc_end21: + .size no_stackify_past_epilogue, .Lfunc_end21-no_stackify_past_epilogue + + .globl stackify_indvar + .type stackify_indvar,@function +stackify_indvar: +.Lfunc_begin22: + .param i32, i32 + .local i32 + i32.const $2=, 0 +.LBB22_1: + loop + i32.load $push0=, 0($1) + i32.add $push1=, $2, $pop0 + i32.store 0($1), $pop1 + i32.const $push5=, 1 + i32.add $push4=, $2, $pop5 + tee_local $push3=, $2=, $pop4 + i32.ne $push2=, $0, $pop3 + br_if 0, $pop2 + end_loop + return + .endfunc +.Lfunc_end22: + .size stackify_indvar, .Lfunc_end22-stackify_indvar + + .globl stackpointer_dependency + .type stackpointer_dependency,@function +stackpointer_dependency: +.Lfunc_begin23: + .param i32 + .result i32 + .local i32 + i32.const $push0=, 0 + i32.load $push2=, __stack_pointer($pop0) + copy_local $push4=, $pop2 + tee_local $push3=, $1=, $pop4 + i32.call $0=, stackpointer_callee@FUNCTION, $0, $pop3 + i32.const $push1=, 0 + i32.store __stack_pointer($pop1), $1 + return $0 + .endfunc +.Lfunc_end23: + .size stackpointer_dependency, .Lfunc_end23-stackpointer_dependency + + .globl call_indirect_stackify + .type call_indirect_stackify,@function +call_indirect_stackify: +.Lfunc_begin24: + .param i32, i32 + .result i32 + i32.load $push4=, 0($0) + tee_local $push3=, $0=, $pop4 + i32.load $push0=, 0($0) + i32.load $push1=, 0($pop0) + i32.call_indirect $push2=, $pop3, $1, $pop1 + return $pop2 + .endfunc +.Lfunc_end24: + .size call_indirect_stackify, .Lfunc_end24-call_indirect_stackify + + .hidden count + .type count,@object + .bss + .globl count + .p2align 2 +count: + .int32 0 + .size count, 4 + + .section .debug_str,"MS",@progbits,1 +.Linfo_string0: + .asciz "clang version 3.9.0 (trunk 266005) (llvm/trunk 266105)" +.Linfo_string1: + .asciz "test.c" +.Linfo_string2: + .asciz "/" + .section .debug_loc,"",@progbits + .section .debug_abbrev,"",@progbits +.Lsection_abbrev: + .int8 1 + .int8 17 + .int8 0 + .int8 37 + .int8 14 + .int8 19 + .int8 5 + .int8 3 + .int8 14 + .int8 16 + .int8 23 + .int8 27 + .int8 14 + .int8 0 + .int8 0 + .int8 0 + .section .debug_info,"",@progbits +.Lsection_info: +.Lcu_begin0: + .int32 26 + .int16 4 + .int32 .Lsection_abbrev + .int8 4 + .int8 1 + .int32 .Linfo_string0 + .int16 12 + .int32 .Linfo_string1 + .int32 .Lline_table_start0 + .int32 .Linfo_string2 + .section .debug_ranges,"",@progbits +.Ldebug_range: + .section .debug_macinfo,"",@progbits +.Ldebug_macinfo: +.Lcu_macro_begin0: + .int8 0 + + .functype readnone_callee, i32 + .functype readonly_callee, i32 + .functype evoke_side_effects, void + .functype use_a, void, i32 + .functype use_b, void, i32 + .functype use_2, void, i32, i32 + .functype red, i32 + .functype green, i32 + .functype blue, i32 + .functype callee, i32, i32 + .functype use_memory, i32, i32 + .functype stackpointer_callee, i32, i32, i32 + .section .debug_line,"",@progbits +.Lline_table_start0: diff --git a/src/binaryen/test/llvm_autogenerated/reg-stackify.wast b/src/binaryen/test/llvm_autogenerated/reg-stackify.wast new file mode 100644 index 0000000000..7a06425c1c --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/reg-stackify.wast @@ -0,0 +1,629 @@ +(module + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$vi (func (param i32))) + (import "env" "blue" (func $blue (result i32))) + (import "env" "callee" (func $callee (param i32) (result i32))) + (import "env" "evoke_side_effects" (func $evoke_side_effects)) + (import "env" "green" (func $green (result i32))) + (import "env" "readnone_callee" (func $readnone_callee (result i32))) + (import "env" "readonly_callee" (func $readonly_callee (result i32))) + (import "env" "red" (func $red (result i32))) + (import "env" "stackpointer_callee" (func $stackpointer_callee (param i32 i32) (result i32))) + (import "env" "use_2" (func $use_2 (param i32 i32))) + (import "env" "use_a" (func $use_a (param i32))) + (import "env" "use_b" (func $use_b (param i32))) + (import "env" "use_memory" (func $use_memory (param i32) (result i32))) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (data (i32.const 12) "\00\00\00\00") + (export "no0" (func $no0)) + (export "no1" (func $no1)) + (export "yes0" (func $yes0)) + (export "yes1" (func $yes1)) + (export "sink_trap" (func $sink_trap)) + (export "sink_readnone_call" (func $sink_readnone_call)) + (export "no_sink_readonly_call" (func $no_sink_readonly_call)) + (export "stack_uses" (func $stack_uses)) + (export "multiple_uses" (func $multiple_uses)) + (export "stackify_store_across_side_effects" (func $stackify_store_across_side_effects)) + (export "div_tree" (func $div_tree)) + (export "simple_multiple_use" (func $simple_multiple_use)) + (export "multiple_uses_in_same_insn" (func $multiple_uses_in_same_insn)) + (export "commute" (func $commute)) + (export "no_stackify_past_use" (func $no_stackify_past_use)) + (export "commute_to_fix_ordering" (func $commute_to_fix_ordering)) + (export "multiple_defs" (func $multiple_defs)) + (export "no_stackify_call_past_load" (func $no_stackify_call_past_load)) + (export "no_stackify_store_past_load" (func $no_stackify_store_past_load)) + (export "store_past_invar_load" (func $store_past_invar_load)) + (export "ignore_dbg_value" (func $ignore_dbg_value)) + (export "no_stackify_past_epilogue" (func $no_stackify_past_epilogue)) + (export "stackify_indvar" (func $stackify_indvar)) + (export "stackpointer_dependency" (func $stackpointer_dependency)) + (export "call_indirect_stackify" (func $call_indirect_stackify)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $no0 (; 12 ;) (param $0 i32) (param $1 i32) (result i32) + (set_local $1 + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (return + (get_local $1) + ) + ) + (func $no1 (; 13 ;) (param $0 i32) (param $1 i32) (result i32) + (set_local $1 + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (return + (get_local $1) + ) + ) + (func $yes0 (; 14 ;) (param $0 i32) (param $1 i32) (result i32) + (i32.store + (get_local $0) + (i32.const 0) + ) + (return + (i32.load + (get_local $1) + ) + ) + ) + (func $yes1 (; 15 ;) (param $0 i32) (result i32) + (return + (i32.load + (get_local $0) + ) + ) + ) + (func $sink_trap (; 16 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (i32.store + (get_local $2) + (i32.const 0) + ) + (return + (i32.div_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $sink_readnone_call (; 17 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (i32.store + (get_local $2) + (i32.const 0) + ) + (return + (call $readnone_callee) + ) + ) + (func $no_sink_readonly_call (; 18 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (set_local $3 + (call $readonly_callee) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (return + (get_local $3) + ) + ) + (func $stack_uses (; 19 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (block $label$0 + (br_if $label$0 + (i32.ne + (i32.xor + (i32.xor + (i32.lt_s + (get_local $0) + (i32.const 1) + ) + (i32.lt_s + (get_local $1) + (i32.const 2) + ) + ) + (i32.xor + (i32.lt_s + (get_local $2) + (i32.const 1) + ) + (i32.lt_s + (get_local $3) + (i32.const 2) + ) + ) + ) + (i32.const 1) + ) + ) + (return + (i32.const 0) + ) + ) + (return + (i32.const 1) + ) + ) + (func $multiple_uses (; 20 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (block $label$0 + (br_if $label$0 + (i32.ge_u + (tee_local $3 + (i32.load + (get_local $2) + ) + ) + (get_local $1) + ) + ) + (br_if $label$0 + (i32.lt_u + (get_local $3) + (get_local $0) + ) + ) + (i32.store + (get_local $2) + (get_local $3) + ) + ) + (return) + ) + (func $stackify_store_across_side_effects (; 21 ;) (param $0 i32) + (i64.store + (get_local $0) + (i64.const 4611686018427387904) + ) + (call $evoke_side_effects) + (i64.store + (get_local $0) + (i64.const 4611686018427387904) + ) + (call $evoke_side_effects) + (return) + ) + (func $div_tree (; 22 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) (param $9 i32) (param $10 i32) (param $11 i32) (param $12 i32) (param $13 i32) (param $14 i32) (param $15 i32) (result i32) + (return + (i32.div_s + (i32.div_s + (i32.div_s + (i32.div_s + (get_local $0) + (get_local $1) + ) + (i32.div_s + (get_local $2) + (get_local $3) + ) + ) + (i32.div_s + (i32.div_s + (get_local $4) + (get_local $5) + ) + (i32.div_s + (get_local $6) + (get_local $7) + ) + ) + ) + (i32.div_s + (i32.div_s + (i32.div_s + (get_local $8) + (get_local $9) + ) + (i32.div_s + (get_local $10) + (get_local $11) + ) + ) + (i32.div_s + (i32.div_s + (get_local $12) + (get_local $13) + ) + (i32.div_s + (get_local $14) + (get_local $15) + ) + ) + ) + ) + ) + ) + (func $simple_multiple_use (; 23 ;) (param $0 i32) (param $1 i32) + (call $use_a + (tee_local $1 + (i32.mul + (get_local $1) + (get_local $0) + ) + ) + ) + (call $use_b + (get_local $1) + ) + (return) + ) + (func $multiple_uses_in_same_insn (; 24 ;) (param $0 i32) (param $1 i32) + (call $use_2 + (tee_local $1 + (i32.mul + (get_local $1) + (get_local $0) + ) + ) + (get_local $1) + ) + (return) + ) + (func $commute (; 25 ;) (result i32) + (return + (i32.add + (i32.add + (call $red) + (call $green) + ) + (call $blue) + ) + ) + ) + (func $no_stackify_past_use (; 26 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (call $callee + (get_local $0) + ) + ) + (return + (i32.div_s + (i32.sub + (call $callee + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (get_local $1) + ) + (get_local $1) + ) + ) + ) + (func $commute_to_fix_ordering (; 27 ;) (param $0 i32) (result i32) + (local $1 i32) + (return + (i32.mul + (tee_local $1 + (call $callee + (get_local $0) + ) + ) + (i32.add + (get_local $1) + (call $callee + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (func $multiple_defs (; 28 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (local $5 f64) + (local $6 f64) + (local $7 f64) + (local $8 f64) + (local $9 f64) + (set_local $6 + (f64.const 0) + ) + (set_local $2 + (i32.and + (get_local $2) + (i32.const 1) + ) + ) + (set_local $3 + (i32.and + (get_local $3) + (i32.const 1) + ) + ) + (set_local $5 + (select + (f64.const -11353.57) + (f64.const -0.23500000000001364) + (i32.eq + (i32.or + (get_local $1) + (i32.const 2) + ) + (i32.const 14) + ) + ) + ) + (set_local $7 + (f64.const 0) + ) + (loop $label$0 + (block $label$1 + (br_if $label$1 + (i32.or + (f64.ge + (get_local $7) + (f64.const 23.2345) + ) + (f64.ne + (get_local $7) + (get_local $7) + ) + ) + ) + (set_local $8 + (get_local $6) + ) + (loop $label$2 + (set_local $8 + (f64.add + (select + (f64.const -11353.57) + (tee_local $9 + (f64.add + (get_local $7) + (f64.const -1) + ) + ) + (get_local $2) + ) + (tee_local $6 + (get_local $8) + ) + ) + ) + (block $label$3 + (br_if $label$3 + (get_local $3) + ) + (set_local $9 + (get_local $5) + ) + ) + (set_local $8 + (f64.add + (get_local $9) + (get_local $8) + ) + ) + (br_if $label$2 + (f64.lt + (get_local $7) + (f64.const 23.2345) + ) + ) + ) + ) + (set_local $7 + (f64.add + (get_local $7) + (f64.const 1) + ) + ) + (br $label$0) + ) + ) + (func $no_stackify_call_past_load (; 29 ;) (result i32) + (local $0 i32) + (local $1 i32) + (set_local $0 + (call $red) + ) + (set_local $1 + (i32.load offset=12 + (i32.const 0) + ) + ) + (drop + (call $callee + (get_local $0) + ) + ) + (return + (get_local $1) + ) + ) + (func $no_stackify_store_past_load (; 30 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (i32.store + (get_local $1) + (get_local $0) + ) + (set_local $2 + (i32.load + (get_local $2) + ) + ) + (drop + (call $callee + (get_local $0) + ) + ) + (return + (get_local $2) + ) + ) + (func $store_past_invar_load (; 31 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (i32.store + (get_local $1) + (get_local $0) + ) + (drop + (call $callee + (get_local $0) + ) + ) + (return + (i32.load + (get_local $2) + ) + ) + ) + (func $ignore_dbg_value (; 32 ;) + (unreachable) + ) + (func $no_stackify_past_epilogue (; 33 ;) (result i32) + (local $0 i32) + (local $1 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $1 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 16) + ) + ) + ) + (set_local $0 + (call $use_memory + (i32.add + (get_local $1) + (i32.const 12) + ) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (return + (get_local $0) + ) + ) + (func $stackify_indvar (; 34 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (set_local $2 + (i32.const 0) + ) + (loop $label$0 + (i32.store + (get_local $1) + (i32.add + (get_local $2) + (i32.load + (get_local $1) + ) + ) + ) + (br_if $label$0 + (i32.ne + (get_local $0) + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + ) + ) + ) + (return) + ) + (func $stackpointer_dependency (; 35 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $0 + (call $stackpointer_callee + (get_local $0) + (tee_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + ) + ) + (i32.store offset=4 + (i32.const 0) + (get_local $1) + ) + (return + (get_local $0) + ) + ) + (func $call_indirect_stackify (; 36 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (call_indirect (type $FUNCSIG$iii) + (tee_local $0 + (i32.load + (get_local $0) + ) + ) + (get_local $1) + (i32.load + (i32.load + (get_local $0) + ) + ) + ) + ) + ) + (func $stackSave (; 37 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 38 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 39 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/return-int32.s b/src/binaryen/test/llvm_autogenerated/return-int32.s new file mode 100644 index 0000000000..80b98b7ff2 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/return-int32.s @@ -0,0 +1,36 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/return-int32.ll" + .globl return_i32 + .type return_i32,@function +return_i32: + .param i32 + .result i32 + copy_local $push0=, $0 + .endfunc +.Lfunc_end0: + .size return_i32, .Lfunc_end0-return_i32 + + .globl return_i32_twice + .type return_i32_twice,@function +return_i32_twice: + .param i32 + .result i32 + block + i32.eqz $push6=, $0 + br_if 0, $pop6 + i32.const $push3=, 0 + i32.const $push5=, 0 + i32.store 0($pop3), $pop5 + i32.const $push4=, 1 + return $pop4 +.LBB1_2: + end_block + i32.const $push1=, 0 + i32.const $push0=, 2 + i32.store 0($pop1), $pop0 + i32.const $push2=, 3 + .endfunc +.Lfunc_end1: + .size return_i32_twice, .Lfunc_end1-return_i32_twice + + diff --git a/src/binaryen/test/llvm_autogenerated/return-int32.wast b/src/binaryen/test/llvm_autogenerated/return-int32.wast new file mode 100644 index 0000000000..bca1fd03b4 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/return-int32.wast @@ -0,0 +1,65 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "return_i32" (func $return_i32)) + (export "return_i32_twice" (func $return_i32_twice)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $return_i32 (; 0 ;) (param $0 i32) (result i32) + (get_local $0) + ) + (func $return_i32_twice (; 1 ;) (param $0 i32) (result i32) + (block $label$0 + (br_if $label$0 + (i32.eqz + (get_local $0) + ) + ) + (i32.store + (i32.const 0) + (i32.const 0) + ) + (return + (i32.const 1) + ) + ) + (i32.store + (i32.const 0) + (i32.const 2) + ) + (i32.const 3) + ) + (func $stackSave (; 2 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 3 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 4 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/return-void.s b/src/binaryen/test/llvm_autogenerated/return-void.s new file mode 100644 index 0000000000..bb2bcf5103 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/return-void.s @@ -0,0 +1,30 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/return-void.ll" + .globl return_void + .type return_void,@function +return_void: + .endfunc +.Lfunc_end0: + .size return_void, .Lfunc_end0-return_void + + .globl return_void_twice + .type return_void_twice,@function +return_void_twice: + .param i32 + block + i32.eqz $push4=, $0 + br_if 0, $pop4 + i32.const $push2=, 0 + i32.const $push3=, 0 + i32.store 0($pop2), $pop3 + return +.LBB1_2: + end_block + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store 0($pop1), $pop0 + .endfunc +.Lfunc_end1: + .size return_void_twice, .Lfunc_end1-return_void_twice + + diff --git a/src/binaryen/test/llvm_autogenerated/return-void.wast b/src/binaryen/test/llvm_autogenerated/return-void.wast new file mode 100644 index 0000000000..98f45583e9 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/return-void.wast @@ -0,0 +1,61 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "return_void" (func $return_void)) + (export "return_void_twice" (func $return_void_twice)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $return_void (; 0 ;) + ) + (func $return_void_twice (; 1 ;) (param $0 i32) + (block $label$0 + (br_if $label$0 + (i32.eqz + (get_local $0) + ) + ) + (i32.store + (i32.const 0) + (i32.const 0) + ) + (return) + ) + (i32.store + (i32.const 0) + (i32.const 1) + ) + ) + (func $stackSave (; 2 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 3 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 4 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/select.s b/src/binaryen/test/llvm_autogenerated/select.s new file mode 100644 index 0000000000..676dae6df0 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/select.s @@ -0,0 +1,135 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/select.ll" + .globl select_i32_bool + .type select_i32_bool,@function +select_i32_bool: + .param i32, i32, i32 + .result i32 + i32.select $push0=, $1, $2, $0 + return $pop0 + .endfunc +.Lfunc_end0: + .size select_i32_bool, .Lfunc_end0-select_i32_bool + + .globl select_i32_eq + .type select_i32_eq,@function +select_i32_eq: + .param i32, i32, i32 + .result i32 + i32.select $push0=, $2, $1, $0 + return $pop0 + .endfunc +.Lfunc_end1: + .size select_i32_eq, .Lfunc_end1-select_i32_eq + + .globl select_i32_ne + .type select_i32_ne,@function +select_i32_ne: + .param i32, i32, i32 + .result i32 + i32.select $push0=, $1, $2, $0 + return $pop0 + .endfunc +.Lfunc_end2: + .size select_i32_ne, .Lfunc_end2-select_i32_ne + + .globl select_i64_bool + .type select_i64_bool,@function +select_i64_bool: + .param i32, i64, i64 + .result i64 + i64.select $push0=, $1, $2, $0 + return $pop0 + .endfunc +.Lfunc_end3: + .size select_i64_bool, .Lfunc_end3-select_i64_bool + + .globl select_i64_eq + .type select_i64_eq,@function +select_i64_eq: + .param i32, i64, i64 + .result i64 + i64.select $push0=, $2, $1, $0 + return $pop0 + .endfunc +.Lfunc_end4: + .size select_i64_eq, .Lfunc_end4-select_i64_eq + + .globl select_i64_ne + .type select_i64_ne,@function +select_i64_ne: + .param i32, i64, i64 + .result i64 + i64.select $push0=, $1, $2, $0 + return $pop0 + .endfunc +.Lfunc_end5: + .size select_i64_ne, .Lfunc_end5-select_i64_ne + + .globl select_f32_bool + .type select_f32_bool,@function +select_f32_bool: + .param i32, f32, f32 + .result f32 + f32.select $push0=, $1, $2, $0 + return $pop0 + .endfunc +.Lfunc_end6: + .size select_f32_bool, .Lfunc_end6-select_f32_bool + + .globl select_f32_eq + .type select_f32_eq,@function +select_f32_eq: + .param i32, f32, f32 + .result f32 + f32.select $push0=, $2, $1, $0 + return $pop0 + .endfunc +.Lfunc_end7: + .size select_f32_eq, .Lfunc_end7-select_f32_eq + + .globl select_f32_ne + .type select_f32_ne,@function +select_f32_ne: + .param i32, f32, f32 + .result f32 + f32.select $push0=, $1, $2, $0 + return $pop0 + .endfunc +.Lfunc_end8: + .size select_f32_ne, .Lfunc_end8-select_f32_ne + + .globl select_f64_bool + .type select_f64_bool,@function +select_f64_bool: + .param i32, f64, f64 + .result f64 + f64.select $push0=, $1, $2, $0 + return $pop0 + .endfunc +.Lfunc_end9: + .size select_f64_bool, .Lfunc_end9-select_f64_bool + + .globl select_f64_eq + .type select_f64_eq,@function +select_f64_eq: + .param i32, f64, f64 + .result f64 + f64.select $push0=, $2, $1, $0 + return $pop0 + .endfunc +.Lfunc_end10: + .size select_f64_eq, .Lfunc_end10-select_f64_eq + + .globl select_f64_ne + .type select_f64_ne,@function +select_f64_ne: + .param i32, f64, f64 + .result f64 + f64.select $push0=, $1, $2, $0 + return $pop0 + .endfunc +.Lfunc_end11: + .size select_f64_ne, .Lfunc_end11-select_f64_ne + + diff --git a/src/binaryen/test/llvm_autogenerated/select.wast b/src/binaryen/test/llvm_autogenerated/select.wast new file mode 100644 index 0000000000..6af2dd3128 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/select.wast @@ -0,0 +1,159 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "select_i32_bool" (func $select_i32_bool)) + (export "select_i32_eq" (func $select_i32_eq)) + (export "select_i32_ne" (func $select_i32_ne)) + (export "select_i64_bool" (func $select_i64_bool)) + (export "select_i64_eq" (func $select_i64_eq)) + (export "select_i64_ne" (func $select_i64_ne)) + (export "select_f32_bool" (func $select_f32_bool)) + (export "select_f32_eq" (func $select_f32_eq)) + (export "select_f32_ne" (func $select_f32_ne)) + (export "select_f64_bool" (func $select_f64_bool)) + (export "select_f64_eq" (func $select_f64_eq)) + (export "select_f64_ne" (func $select_f64_ne)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $select_i32_bool (; 0 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (return + (select + (get_local $1) + (get_local $2) + (get_local $0) + ) + ) + ) + (func $select_i32_eq (; 1 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (return + (select + (get_local $2) + (get_local $1) + (get_local $0) + ) + ) + ) + (func $select_i32_ne (; 2 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (return + (select + (get_local $1) + (get_local $2) + (get_local $0) + ) + ) + ) + (func $select_i64_bool (; 3 ;) (param $0 i32) (param $1 i64) (param $2 i64) (result i64) + (return + (select + (get_local $1) + (get_local $2) + (get_local $0) + ) + ) + ) + (func $select_i64_eq (; 4 ;) (param $0 i32) (param $1 i64) (param $2 i64) (result i64) + (return + (select + (get_local $2) + (get_local $1) + (get_local $0) + ) + ) + ) + (func $select_i64_ne (; 5 ;) (param $0 i32) (param $1 i64) (param $2 i64) (result i64) + (return + (select + (get_local $1) + (get_local $2) + (get_local $0) + ) + ) + ) + (func $select_f32_bool (; 6 ;) (param $0 i32) (param $1 f32) (param $2 f32) (result f32) + (return + (select + (get_local $1) + (get_local $2) + (get_local $0) + ) + ) + ) + (func $select_f32_eq (; 7 ;) (param $0 i32) (param $1 f32) (param $2 f32) (result f32) + (return + (select + (get_local $2) + (get_local $1) + (get_local $0) + ) + ) + ) + (func $select_f32_ne (; 8 ;) (param $0 i32) (param $1 f32) (param $2 f32) (result f32) + (return + (select + (get_local $1) + (get_local $2) + (get_local $0) + ) + ) + ) + (func $select_f64_bool (; 9 ;) (param $0 i32) (param $1 f64) (param $2 f64) (result f64) + (return + (select + (get_local $1) + (get_local $2) + (get_local $0) + ) + ) + ) + (func $select_f64_eq (; 10 ;) (param $0 i32) (param $1 f64) (param $2 f64) (result f64) + (return + (select + (get_local $2) + (get_local $1) + (get_local $0) + ) + ) + ) + (func $select_f64_ne (; 11 ;) (param $0 i32) (param $1 f64) (param $2 f64) (result f64) + (return + (select + (get_local $1) + (get_local $2) + (get_local $0) + ) + ) + ) + (func $stackSave (; 12 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 13 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 14 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/signext-zeroext.s b/src/binaryen/test/llvm_autogenerated/signext-zeroext.s new file mode 100644 index 0000000000..5fa9bde6b5 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/signext-zeroext.s @@ -0,0 +1,61 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/signext-zeroext.ll" + .globl z2s_func + .type z2s_func,@function +z2s_func: + .param i32 + .result i32 + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.const $push3=, 24 + i32.shr_s $push2=, $pop1, $pop3 + return $pop2 + .endfunc +.Lfunc_end0: + .size z2s_func, .Lfunc_end0-z2s_func + + .globl s2z_func + .type s2z_func,@function +s2z_func: + .param i32 + .result i32 + i32.const $push0=, 255 + i32.and $push1=, $0, $pop0 + return $pop1 + .endfunc +.Lfunc_end1: + .size s2z_func, .Lfunc_end1-s2z_func + + .globl z2s_call + .type z2s_call,@function +z2s_call: + .param i32 + .result i32 + i32.const $push0=, 255 + i32.and $push1=, $0, $pop0 + i32.call $push2=, z2s_func@FUNCTION, $pop1 + return $pop2 + .endfunc +.Lfunc_end2: + .size z2s_call, .Lfunc_end2-z2s_call + + .globl s2z_call + .type s2z_call,@function +s2z_call: + .param i32 + .result i32 + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.const $push8=, 24 + i32.shr_s $push2=, $pop1, $pop8 + i32.call $push3=, s2z_func@FUNCTION, $pop2 + i32.const $push7=, 24 + i32.shl $push4=, $pop3, $pop7 + i32.const $push6=, 24 + i32.shr_s $push5=, $pop4, $pop6 + return $pop5 + .endfunc +.Lfunc_end3: + .size s2z_call, .Lfunc_end3-s2z_call + + diff --git a/src/binaryen/test/llvm_autogenerated/signext-zeroext.wast b/src/binaryen/test/llvm_autogenerated/signext-zeroext.wast new file mode 100644 index 0000000000..a3a48cd6b7 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/signext-zeroext.wast @@ -0,0 +1,91 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "z2s_func" (func $z2s_func)) + (export "s2z_func" (func $s2z_func)) + (export "z2s_call" (func $z2s_call)) + (export "s2z_call" (func $s2z_call)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $z2s_func (; 0 ;) (param $0 i32) (result i32) + (return + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $s2z_func (; 1 ;) (param $0 i32) (result i32) + (return + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + ) + (func $z2s_call (; 2 ;) (param $0 i32) (result i32) + (return + (call $z2s_func + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + ) + ) + (func $s2z_call (; 3 ;) (param $0 i32) (result i32) + (return + (i32.shr_s + (i32.shl + (call $s2z_func + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $stackSave (; 4 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 5 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 6 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/vendor/conv/.cargo-ok b/src/binaryen/test/llvm_autogenerated/store-results.wast similarity index 100% rename from src/vendor/conv/.cargo-ok rename to src/binaryen/test/llvm_autogenerated/store-results.wast diff --git a/src/binaryen/test/llvm_autogenerated/store-trunc.s b/src/binaryen/test/llvm_autogenerated/store-trunc.s new file mode 100644 index 0000000000..6ddaafce5a --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/store-trunc.s @@ -0,0 +1,48 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/store-trunc.ll" + .globl trunc_i8_i32 + .type trunc_i8_i32,@function +trunc_i8_i32: + .param i32, i32 + i32.store8 0($0), $1 + .endfunc +.Lfunc_end0: + .size trunc_i8_i32, .Lfunc_end0-trunc_i8_i32 + + .globl trunc_i16_i32 + .type trunc_i16_i32,@function +trunc_i16_i32: + .param i32, i32 + i32.store16 0($0), $1 + .endfunc +.Lfunc_end1: + .size trunc_i16_i32, .Lfunc_end1-trunc_i16_i32 + + .globl trunc_i8_i64 + .type trunc_i8_i64,@function +trunc_i8_i64: + .param i32, i64 + i64.store8 0($0), $1 + .endfunc +.Lfunc_end2: + .size trunc_i8_i64, .Lfunc_end2-trunc_i8_i64 + + .globl trunc_i16_i64 + .type trunc_i16_i64,@function +trunc_i16_i64: + .param i32, i64 + i64.store16 0($0), $1 + .endfunc +.Lfunc_end3: + .size trunc_i16_i64, .Lfunc_end3-trunc_i16_i64 + + .globl trunc_i32_i64 + .type trunc_i32_i64,@function +trunc_i32_i64: + .param i32, i64 + i64.store32 0($0), $1 + .endfunc +.Lfunc_end4: + .size trunc_i32_i64, .Lfunc_end4-trunc_i32_i64 + + diff --git a/src/binaryen/test/llvm_autogenerated/store-trunc.wast b/src/binaryen/test/llvm_autogenerated/store-trunc.wast new file mode 100644 index 0000000000..61b82a41ed --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/store-trunc.wast @@ -0,0 +1,74 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "trunc_i8_i32" (func $trunc_i8_i32)) + (export "trunc_i16_i32" (func $trunc_i16_i32)) + (export "trunc_i8_i64" (func $trunc_i8_i64)) + (export "trunc_i16_i64" (func $trunc_i16_i64)) + (export "trunc_i32_i64" (func $trunc_i32_i64)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $trunc_i8_i32 (; 0 ;) (param $0 i32) (param $1 i32) + (i32.store8 + (get_local $0) + (get_local $1) + ) + ) + (func $trunc_i16_i32 (; 1 ;) (param $0 i32) (param $1 i32) + (i32.store16 + (get_local $0) + (get_local $1) + ) + ) + (func $trunc_i8_i64 (; 2 ;) (param $0 i32) (param $1 i64) + (i64.store8 + (get_local $0) + (get_local $1) + ) + ) + (func $trunc_i16_i64 (; 3 ;) (param $0 i32) (param $1 i64) + (i64.store16 + (get_local $0) + (get_local $1) + ) + ) + (func $trunc_i32_i64 (; 4 ;) (param $0 i32) (param $1 i64) + (i64.store32 + (get_local $0) + (get_local $1) + ) + ) + (func $stackSave (; 5 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 6 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 7 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/store.s b/src/binaryen/test/llvm_autogenerated/store.s new file mode 100644 index 0000000000..588155538b --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/store.s @@ -0,0 +1,43 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/store.ll" + .globl sti32 + .type sti32,@function +sti32: + .param i32, i32 + i32.store 0($0), $1 + return + .endfunc +.Lfunc_end0: + .size sti32, .Lfunc_end0-sti32 + + .globl sti64 + .type sti64,@function +sti64: + .param i32, i64 + i64.store 0($0), $1 + return + .endfunc +.Lfunc_end1: + .size sti64, .Lfunc_end1-sti64 + + .globl stf32 + .type stf32,@function +stf32: + .param i32, f32 + f32.store 0($0), $1 + return + .endfunc +.Lfunc_end2: + .size stf32, .Lfunc_end2-stf32 + + .globl stf64 + .type stf64,@function +stf64: + .param i32, f64 + f64.store 0($0), $1 + return + .endfunc +.Lfunc_end3: + .size stf64, .Lfunc_end3-stf64 + + diff --git a/src/binaryen/test/llvm_autogenerated/store.wast b/src/binaryen/test/llvm_autogenerated/store.wast new file mode 100644 index 0000000000..2de1adcb93 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/store.wast @@ -0,0 +1,71 @@ +(module + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "sti32" (func $sti32)) + (export "sti64" (func $sti64)) + (export "stf32" (func $stf32)) + (export "stf64" (func $stf64)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $sti32 (; 0 ;) (param $0 i32) (param $1 i32) + (i32.store + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $sti64 (; 1 ;) (param $0 i32) (param $1 i64) + (i64.store + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $stf32 (; 2 ;) (param $0 i32) (param $1 f32) + (f32.store + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $stf64 (; 3 ;) (param $0 i32) (param $1 f64) + (f64.store + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $stackSave (; 4 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 5 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 6 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/switch.s b/src/binaryen/test/llvm_autogenerated/switch.s new file mode 100644 index 0000000000..d231ac3cce --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/switch.s @@ -0,0 +1,100 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/switch.ll" + .globl bar32 + .type bar32,@function +bar32: + .param i32 + block + i32.const $push0=, 23 + i32.gt_u $push1=, $0, $pop0 + br_if 0, $pop1 + block + block + block + block + block + block + br_table $0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 4, 5, 0 +.LBB0_2: + end_block + call foo0@FUNCTION + return +.LBB0_3: + end_block + call foo1@FUNCTION + return +.LBB0_4: + end_block + call foo2@FUNCTION + return +.LBB0_5: + end_block + call foo3@FUNCTION + return +.LBB0_6: + end_block + call foo4@FUNCTION + return +.LBB0_7: + end_block + call foo5@FUNCTION +.LBB0_8: + end_block + return + .endfunc +.Lfunc_end0: + .size bar32, .Lfunc_end0-bar32 + + .globl bar64 + .type bar64,@function +bar64: + .param i64 + block + i64.const $push1=, 23 + i64.gt_u $push2=, $0, $pop1 + br_if 0, $pop2 + block + block + block + block + block + block + i32.wrap/i64 $push0=, $0 + br_table $pop0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 4, 5, 0 +.LBB1_2: + end_block + call foo0@FUNCTION + return +.LBB1_3: + end_block + call foo1@FUNCTION + return +.LBB1_4: + end_block + call foo2@FUNCTION + return +.LBB1_5: + end_block + call foo3@FUNCTION + return +.LBB1_6: + end_block + call foo4@FUNCTION + return +.LBB1_7: + end_block + call foo5@FUNCTION +.LBB1_8: + end_block + return + .endfunc +.Lfunc_end1: + .size bar64, .Lfunc_end1-bar64 + + + .functype foo0, void + .functype foo1, void + .functype foo2, void + .functype foo3, void + .functype foo4, void + .functype foo5, void diff --git a/src/binaryen/test/llvm_autogenerated/switch.wast b/src/binaryen/test/llvm_autogenerated/switch.wast new file mode 100644 index 0000000000..7ea6adf7e1 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/switch.wast @@ -0,0 +1,124 @@ +(module + (type $FUNCSIG$v (func)) + (import "env" "foo0" (func $foo0)) + (import "env" "foo1" (func $foo1)) + (import "env" "foo2" (func $foo2)) + (import "env" "foo3" (func $foo3)) + (import "env" "foo4" (func $foo4)) + (import "env" "foo5" (func $foo5)) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "bar32" (func $bar32)) + (export "bar64" (func $bar64)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $bar32 (; 6 ;) (param $0 i32) + (block $label$0 + (br_if $label$0 + (i32.gt_u + (get_local $0) + (i32.const 23) + ) + ) + (block $label$1 + (block $label$2 + (block $label$3 + (block $label$4 + (block $label$5 + (block $label$6 + (br_table $label$6 $label$6 $label$6 $label$6 $label$6 $label$6 $label$6 $label$5 $label$5 $label$5 $label$5 $label$5 $label$5 $label$5 $label$5 $label$4 $label$4 $label$4 $label$4 $label$4 $label$4 $label$3 $label$2 $label$1 $label$6 + (get_local $0) + ) + ) + (call $foo0) + (return) + ) + (call $foo1) + (return) + ) + (call $foo2) + (return) + ) + (call $foo3) + (return) + ) + (call $foo4) + (return) + ) + (call $foo5) + ) + (return) + ) + (func $bar64 (; 7 ;) (param $0 i64) + (block $label$0 + (br_if $label$0 + (i64.gt_u + (get_local $0) + (i64.const 23) + ) + ) + (block $label$1 + (block $label$2 + (block $label$3 + (block $label$4 + (block $label$5 + (block $label$6 + (br_table $label$6 $label$6 $label$6 $label$6 $label$6 $label$6 $label$6 $label$5 $label$5 $label$5 $label$5 $label$5 $label$5 $label$5 $label$5 $label$4 $label$4 $label$4 $label$4 $label$4 $label$4 $label$3 $label$2 $label$1 $label$6 + (i32.wrap/i64 + (get_local $0) + ) + ) + ) + (call $foo0) + (return) + ) + (call $foo1) + (return) + ) + (call $foo2) + (return) + ) + (call $foo3) + (return) + ) + (call $foo4) + (return) + ) + (call $foo5) + ) + (return) + ) + (func $stackSave (; 8 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 9 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 10 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/unreachable.s b/src/binaryen/test/llvm_autogenerated/unreachable.s new file mode 100644 index 0000000000..6ff8b5520d --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/unreachable.s @@ -0,0 +1,30 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/unreachable.ll" + .globl f1 + .type f1,@function +f1: + .result i32 + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + + .globl f2 + .type f2,@function +f2: + unreachable + .endfunc +.Lfunc_end1: + .size f2, .Lfunc_end1-f2 + + .globl f3 + .type f3,@function +f3: + unreachable + .endfunc +.Lfunc_end2: + .size f3, .Lfunc_end2-f3 + + + .functype abort, void diff --git a/src/binaryen/test/llvm_autogenerated/unreachable.wast b/src/binaryen/test/llvm_autogenerated/unreachable.wast new file mode 100644 index 0000000000..fc44c23625 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/unreachable.wast @@ -0,0 +1,54 @@ +(module + (type $FUNCSIG$v (func)) + (import "env" "abort" (func $abort)) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "f1" (func $f1)) + (export "f2" (func $f2)) + (export "f3" (func $f3)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $f1 (; 1 ;) (result i32) + (call $abort) + (unreachable) + ) + (func $f2 (; 2 ;) + (unreachable) + ) + (func $f3 (; 3 ;) + (unreachable) + ) + (func $stackSave (; 4 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 5 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 6 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/unused-argument.s b/src/binaryen/test/llvm_autogenerated/unused-argument.s new file mode 100644 index 0000000000..b7a23dc87b --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/unused-argument.s @@ -0,0 +1,33 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/unused-argument.ll" + .globl unused_first + .type unused_first,@function +unused_first: + .param i32, i32 + .result i32 + return $1 + .endfunc +.Lfunc_end0: + .size unused_first, .Lfunc_end0-unused_first + + .globl unused_second + .type unused_second,@function +unused_second: + .param i32, i32 + .result i32 + return $0 + .endfunc +.Lfunc_end1: + .size unused_second, .Lfunc_end1-unused_second + + .globl call_something + .type call_something,@function +call_something: + i32.call $drop=, return_something@FUNCTION + return + .endfunc +.Lfunc_end2: + .size call_something, .Lfunc_end2-call_something + + + .functype return_something, i32 diff --git a/src/binaryen/test/llvm_autogenerated/unused-argument.wast b/src/binaryen/test/llvm_autogenerated/unused-argument.wast new file mode 100644 index 0000000000..d0382d354b --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/unused-argument.wast @@ -0,0 +1,60 @@ +(module + (type $FUNCSIG$i (func (result i32))) + (import "env" "return_something" (func $return_something (result i32))) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "unused_first" (func $unused_first)) + (export "unused_second" (func $unused_second)) + (export "call_something" (func $call_something)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $unused_first (; 1 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (get_local $1) + ) + ) + (func $unused_second (; 2 ;) (param $0 i32) (param $1 i32) (result i32) + (return + (get_local $0) + ) + ) + (func $call_something (; 3 ;) + (drop + (call $return_something) + ) + (return) + ) + (func $stackSave (; 4 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 5 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 6 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/userstack.s b/src/binaryen/test/llvm_autogenerated/userstack.s new file mode 100644 index 0000000000..78647f3067 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/userstack.s @@ -0,0 +1,355 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/userstack.ll" + .globl alloca32 + .type alloca32,@function +alloca32: + .local i32 + i32.const $push4=, 0 + i32.const $push1=, 0 + i32.load $push2=, __stack_pointer($pop1) + i32.const $push3=, 16 + i32.sub $push9=, $pop2, $pop3 + tee_local $push8=, $0=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.const $push0=, 0 + i32.store 12($0), $pop0 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $0, $pop5 + i32.store __stack_pointer($pop7), $pop6 + return + .endfunc +.Lfunc_end0: + .size alloca32, .Lfunc_end0-alloca32 + + .globl alloca3264 + .type alloca3264,@function +alloca3264: + .local i32 + i32.const $push2=, 0 + i32.load $push3=, __stack_pointer($pop2) + i32.const $push4=, 16 + i32.sub $push6=, $pop3, $pop4 + tee_local $push5=, $0=, $pop6 + i32.const $push0=, 0 + i32.store 12($pop5), $pop0 + i64.const $push1=, 0 + i64.store 0($0), $pop1 + return + .endfunc +.Lfunc_end1: + .size alloca3264, .Lfunc_end1-alloca3264 + + .globl allocarray + .type allocarray,@function +allocarray: + .local i32 + i32.const $push6=, 0 + i32.const $push3=, 0 + i32.load $push4=, __stack_pointer($pop3) + i32.const $push5=, 144 + i32.sub $push12=, $pop4, $pop5 + tee_local $push11=, $0=, $pop12 + i32.store __stack_pointer($pop6), $pop11 + i32.const $push0=, 24 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 1 + i32.store 0($pop1), $pop2 + i32.const $push10=, 1 + i32.store 12($0), $pop10 + i32.const $push9=, 0 + i32.const $push7=, 144 + i32.add $push8=, $0, $pop7 + i32.store __stack_pointer($pop9), $pop8 + return + .endfunc +.Lfunc_end2: + .size allocarray, .Lfunc_end2-allocarray + + .globl non_mem_use + .type non_mem_use,@function +non_mem_use: + .param i32 + .local i32 + i32.const $push3=, 0 + i32.const $push0=, 0 + i32.load $push1=, __stack_pointer($pop0) + i32.const $push2=, 48 + i32.sub $push12=, $pop1, $pop2 + tee_local $push11=, $1=, $pop12 + i32.store __stack_pointer($pop3), $pop11 + i32.const $push7=, 8 + i32.add $push8=, $1, $pop7 + call ext_func@FUNCTION, $pop8 + call ext_func@FUNCTION, $1 + i32.const $push9=, 16 + i32.add $push10=, $1, $pop9 + i32.store 0($0), $pop10 + i32.const $push6=, 0 + i32.const $push4=, 48 + i32.add $push5=, $1, $pop4 + i32.store __stack_pointer($pop6), $pop5 + return + .endfunc +.Lfunc_end3: + .size non_mem_use, .Lfunc_end3-non_mem_use + + .globl allocarray_inbounds + .type allocarray_inbounds,@function +allocarray_inbounds: + .local i32 + i32.const $push5=, 0 + i32.const $push2=, 0 + i32.load $push3=, __stack_pointer($pop2) + i32.const $push4=, 32 + i32.sub $push11=, $pop3, $pop4 + tee_local $push10=, $0=, $pop11 + i32.store __stack_pointer($pop5), $pop10 + i32.const $push0=, 1 + i32.store 24($0), $pop0 + i32.const $push9=, 1 + i32.store 12($0), $pop9 + i32.const $push1=, 0 + call ext_func@FUNCTION, $pop1 + i32.const $push8=, 0 + i32.const $push6=, 32 + i32.add $push7=, $0, $pop6 + i32.store __stack_pointer($pop8), $pop7 + return + .endfunc +.Lfunc_end4: + .size allocarray_inbounds, .Lfunc_end4-allocarray_inbounds + + .globl dynamic_alloca + .type dynamic_alloca,@function +dynamic_alloca: + .param i32 + .local i32 + i32.const $push6=, 0 + i32.const $push7=, 0 + i32.load $push14=, __stack_pointer($pop7) + tee_local $push13=, $1=, $pop14 + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 15 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, -16 + i32.and $push5=, $pop3, $pop4 + i32.sub $push12=, $pop13, $pop5 + tee_local $push11=, $0=, $pop12 + copy_local $push10=, $pop11 + i32.store __stack_pointer($pop6), $pop10 + call ext_func_i32@FUNCTION, $0 + i32.const $push8=, 0 + copy_local $push9=, $1 + i32.store __stack_pointer($pop8), $pop9 + return + .endfunc +.Lfunc_end5: + .size dynamic_alloca, .Lfunc_end5-dynamic_alloca + + .globl dynamic_alloca_redzone + .type dynamic_alloca_redzone,@function +dynamic_alloca_redzone: + .param i32 + .local i32 + i32.const $push7=, 0 + i32.load $push11=, __stack_pointer($pop7) + tee_local $push10=, $1=, $pop11 + copy_local $drop=, $pop10 + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 15 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, -16 + i32.and $push5=, $pop3, $pop4 + i32.sub $push9=, $1, $pop5 + tee_local $push8=, $0=, $pop9 + copy_local $drop=, $pop8 + i32.const $push6=, 0 + i32.store 0($0), $pop6 + return + .endfunc +.Lfunc_end6: + .size dynamic_alloca_redzone, .Lfunc_end6-dynamic_alloca_redzone + + .globl dynamic_static_alloca + .type dynamic_static_alloca,@function +dynamic_static_alloca: + .param i32 + .local i32, i32, i32 + i32.const $push16=, 0 + i32.const $push13=, 0 + i32.load $push14=, __stack_pointer($pop13) + i32.const $push15=, 16 + i32.sub $push32=, $pop14, $pop15 + tee_local $push31=, $2=, $pop32 + i32.store __stack_pointer($pop16), $pop31 + copy_local $push30=, $2 + tee_local $push29=, $1=, $pop30 + i32.const $push0=, 101 + i32.store 12($pop29), $pop0 + i32.const $push11=, 0 + i32.const $push1=, 2 + i32.shl $push2=, $0, $pop1 + i32.const $push3=, 15 + i32.add $push4=, $pop2, $pop3 + i32.const $push5=, -16 + i32.and $push28=, $pop4, $pop5 + tee_local $push27=, $0=, $pop28 + i32.sub $push26=, $2, $pop27 + tee_local $push25=, $2=, $pop26 + copy_local $push24=, $pop25 + tee_local $push23=, $3=, $pop24 + i32.store __stack_pointer($pop11), $pop23 + i32.const $push6=, 102 + i32.store 12($1), $pop6 + i32.const $push7=, 103 + i32.store 0($2), $pop7 + i32.const $push12=, 0 + i32.sub $push22=, $3, $0 + tee_local $push21=, $0=, $pop22 + copy_local $push20=, $pop21 + i32.store __stack_pointer($pop12), $pop20 + i32.const $push8=, 104 + i32.store 12($1), $pop8 + i32.const $push9=, 105 + i32.store 0($2), $pop9 + i32.const $push10=, 106 + i32.store 0($0), $pop10 + i32.const $push19=, 0 + i32.const $push17=, 16 + i32.add $push18=, $1, $pop17 + i32.store __stack_pointer($pop19), $pop18 + return + .endfunc +.Lfunc_end7: + .size dynamic_static_alloca, .Lfunc_end7-dynamic_static_alloca + + .globl llvm_stack_builtins + .type llvm_stack_builtins,@function +llvm_stack_builtins: + .param i32 + .local i32, i32, i32 + i32.const $push7=, 0 + i32.load $push11=, __stack_pointer($pop7) + tee_local $push10=, $3=, $pop11 + copy_local $2=, $pop10 + copy_local $1=, $3 + i32.const $push6=, 0 + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 15 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, -16 + i32.and $push5=, $pop3, $pop4 + i32.sub $push9=, $3, $pop5 + i32.store __stack_pointer($pop6), $pop9 + copy_local $drop=, $1 + i32.const $push8=, 0 + i32.store __stack_pointer($pop8), $2 + return + .endfunc +.Lfunc_end8: + .size llvm_stack_builtins, .Lfunc_end8-llvm_stack_builtins + + .globl dynamic_alloca_nouse + .type dynamic_alloca_nouse,@function +dynamic_alloca_nouse: + .param i32 + .local i32, i32 + i32.const $push7=, 0 + i32.load $push11=, __stack_pointer($pop7) + tee_local $push10=, $2=, $pop11 + copy_local $1=, $pop10 + i32.const $push6=, 0 + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 15 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, -16 + i32.and $push5=, $pop3, $pop4 + i32.sub $push9=, $2, $pop5 + i32.store __stack_pointer($pop6), $pop9 + i32.const $push8=, 0 + i32.store __stack_pointer($pop8), $1 + return + .endfunc +.Lfunc_end9: + .size dynamic_alloca_nouse, .Lfunc_end9-dynamic_alloca_nouse + + .globl copytoreg_fi + .type copytoreg_fi,@function +copytoreg_fi: + .param i32, i32 + .local i32 + i32.const $push0=, 0 + i32.load $push1=, __stack_pointer($pop0) + i32.const $push2=, 16 + i32.sub $push5=, $pop1, $pop2 + i32.const $push3=, 12 + i32.add $push4=, $pop5, $pop3 + copy_local $2=, $pop4 + i32.const $push6=, 1 + i32.and $0=, $0, $pop6 +.LBB10_1: + loop + i32.const $push7=, 1 + i32.store 0($2), $pop7 + copy_local $2=, $1 + br_if 0, $0 + end_loop + return + .endfunc +.Lfunc_end10: + .size copytoreg_fi, .Lfunc_end10-copytoreg_fi + + .globl frameaddress_0 + .type frameaddress_0,@function +frameaddress_0: + .local i32 + i32.const $push0=, 0 + i32.load $push2=, __stack_pointer($pop0) + copy_local $push4=, $pop2 + tee_local $push3=, $0=, $pop4 + call use_i8_star@FUNCTION, $pop3 + i32.const $push1=, 0 + i32.store __stack_pointer($pop1), $0 + return + .endfunc +.Lfunc_end11: + .size frameaddress_0, .Lfunc_end11-frameaddress_0 + + .globl frameaddress_1 + .type frameaddress_1,@function +frameaddress_1: + i32.const $push0=, 0 + call use_i8_star@FUNCTION, $pop0 + return + .endfunc +.Lfunc_end12: + .size frameaddress_1, .Lfunc_end12-frameaddress_1 + + .globl inline_asm + .type inline_asm,@function +inline_asm: + .local i32 + i32.const $push0=, 0 + i32.load $push1=, __stack_pointer($pop0) + i32.const $push2=, 16 + i32.sub $push5=, $pop1, $pop2 + i32.const $push3=, 15 + i32.add $push4=, $pop5, $pop3 + copy_local $0=, $pop4 + #APP + # %0 + #NO_APP + return + .endfunc +.Lfunc_end13: + .size inline_asm, .Lfunc_end13-inline_asm + + + .functype ext_func, void, i32 + .functype ext_func_i32, void, i32 + .functype use_i8_star, void, i32 diff --git a/src/binaryen/test/llvm_autogenerated/userstack.wast b/src/binaryen/test/llvm_autogenerated/userstack.wast new file mode 100644 index 0000000000..4fa702b0e9 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/userstack.wast @@ -0,0 +1,492 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (import "env" "ext_func" (func $ext_func (param i32))) + (import "env" "ext_func_i32" (func $ext_func_i32 (param i32))) + (import "env" "use_i8_star" (func $use_i8_star (param i32))) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "alloca32" (func $alloca32)) + (export "alloca3264" (func $alloca3264)) + (export "allocarray" (func $allocarray)) + (export "non_mem_use" (func $non_mem_use)) + (export "allocarray_inbounds" (func $allocarray_inbounds)) + (export "dynamic_alloca" (func $dynamic_alloca)) + (export "dynamic_alloca_redzone" (func $dynamic_alloca_redzone)) + (export "dynamic_static_alloca" (func $dynamic_static_alloca)) + (export "llvm_stack_builtins" (func $llvm_stack_builtins)) + (export "dynamic_alloca_nouse" (func $dynamic_alloca_nouse)) + (export "copytoreg_fi" (func $copytoreg_fi)) + (export "frameaddress_0" (func $frameaddress_0)) + (export "frameaddress_1" (func $frameaddress_1)) + (export "inline_asm" (func $inline_asm)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $alloca32 (; 3 ;) + (local $0 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $0 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 16) + ) + ) + ) + (i32.store offset=12 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (return) + ) + (func $alloca3264 (; 4 ;) + (local $0 i32) + (i32.store offset=12 + (tee_local $0 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i64.store + (get_local $0) + (i64.const 0) + ) + (return) + ) + (func $allocarray (; 5 ;) + (local $0 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $0 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 144) + ) + ) + ) + (i32.store + (i32.add + (get_local $0) + (i32.const 24) + ) + (i32.const 1) + ) + (i32.store offset=12 + (get_local $0) + (i32.const 1) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $0) + (i32.const 144) + ) + ) + (return) + ) + (func $non_mem_use (; 6 ;) (param $0 i32) + (local $1 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $1 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 48) + ) + ) + ) + (call $ext_func + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (call $ext_func + (get_local $1) + ) + (i32.store + (get_local $0) + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $1) + (i32.const 48) + ) + ) + (return) + ) + (func $allocarray_inbounds (; 7 ;) + (local $0 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $0 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 32) + ) + ) + ) + (i32.store offset=24 + (get_local $0) + (i32.const 1) + ) + (i32.store offset=12 + (get_local $0) + (i32.const 1) + ) + (call $ext_func + (i32.const 0) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $0) + (i32.const 32) + ) + ) + (return) + ) + (func $dynamic_alloca (; 8 ;) (param $0 i32) + (local $1 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $0 + (i32.sub + (tee_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.and + (i32.add + (i32.shl + (get_local $0) + (i32.const 2) + ) + (i32.const 15) + ) + (i32.const -16) + ) + ) + ) + ) + (call $ext_func_i32 + (get_local $0) + ) + (i32.store offset=4 + (i32.const 0) + (get_local $1) + ) + (return) + ) + (func $dynamic_alloca_redzone (; 9 ;) (param $0 i32) + (local $1 i32) + (drop + (tee_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + ) + (drop + (tee_local $0 + (i32.sub + (get_local $1) + (i32.and + (i32.add + (i32.shl + (get_local $0) + (i32.const 2) + ) + (i32.const 15) + ) + (i32.const -16) + ) + ) + ) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (return) + ) + (func $dynamic_static_alloca (; 10 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $2 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 16) + ) + ) + ) + (i32.store offset=12 + (tee_local $1 + (get_local $2) + ) + (i32.const 101) + ) + (i32.store offset=4 + (i32.const 0) + (tee_local $3 + (tee_local $2 + (i32.sub + (get_local $2) + (tee_local $0 + (i32.and + (i32.add + (i32.shl + (get_local $0) + (i32.const 2) + ) + (i32.const 15) + ) + (i32.const -16) + ) + ) + ) + ) + ) + ) + (i32.store offset=12 + (get_local $1) + (i32.const 102) + ) + (i32.store + (get_local $2) + (i32.const 103) + ) + (i32.store offset=4 + (i32.const 0) + (tee_local $0 + (i32.sub + (get_local $3) + (get_local $0) + ) + ) + ) + (i32.store offset=12 + (get_local $1) + (i32.const 104) + ) + (i32.store + (get_local $2) + (i32.const 105) + ) + (i32.store + (get_local $0) + (i32.const 106) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (return) + ) + (func $llvm_stack_builtins (; 11 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (set_local $2 + (tee_local $3 + (i32.load offset=4 + (i32.const 0) + ) + ) + ) + (set_local $1 + (get_local $3) + ) + (i32.store offset=4 + (i32.const 0) + (i32.sub + (get_local $3) + (i32.and + (i32.add + (i32.shl + (get_local $0) + (i32.const 2) + ) + (i32.const 15) + ) + (i32.const -16) + ) + ) + ) + (drop + (get_local $1) + ) + (i32.store offset=4 + (i32.const 0) + (get_local $2) + ) + (return) + ) + (func $dynamic_alloca_nouse (; 12 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (tee_local $2 + (i32.load offset=4 + (i32.const 0) + ) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.sub + (get_local $2) + (i32.and + (i32.add + (i32.shl + (get_local $0) + (i32.const 2) + ) + (i32.const 15) + ) + (i32.const -16) + ) + ) + ) + (i32.store offset=4 + (i32.const 0) + (get_local $1) + ) + (return) + ) + (func $copytoreg_fi (; 13 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (set_local $2 + (i32.add + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 16) + ) + (i32.const 12) + ) + ) + (set_local $0 + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + (loop $label$0 + (i32.store + (get_local $2) + (i32.const 1) + ) + (set_local $2 + (get_local $1) + ) + (br_if $label$0 + (get_local $0) + ) + ) + (return) + ) + (func $frameaddress_0 (; 14 ;) + (local $0 i32) + (call $use_i8_star + (tee_local $0 + (i32.load offset=4 + (i32.const 0) + ) + ) + ) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + (return) + ) + (func $frameaddress_1 (; 15 ;) + (call $use_i8_star + (i32.const 0) + ) + (return) + ) + (func $inline_asm (; 16 ;) + (local $0 i32) + (set_local $0 + (i32.add + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 16) + ) + (i32.const 15) + ) + ) + (return) + ) + (func $stackSave (; 17 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 18 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 19 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/llvm_autogenerated/varargs.s b/src/binaryen/test/llvm_autogenerated/varargs.s new file mode 100644 index 0000000000..2ab4aa3610 --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/varargs.s @@ -0,0 +1,154 @@ + .text + .file "/s/llvm-upstream/llvm/test/CodeGen/WebAssembly/varargs.ll" + .globl start + .type start,@function +start: + .param i32, i32 + i32.store 0($0), $1 + return + .endfunc +.Lfunc_end0: + .size start, .Lfunc_end0-start + + .globl end + .type end,@function +end: + .param i32 + return + .endfunc +.Lfunc_end1: + .size end, .Lfunc_end1-end + + .globl copy + .type copy,@function +copy: + .param i32, i32 + i32.load $push0=, 0($1) + i32.store 0($0), $pop0 + return + .endfunc +.Lfunc_end2: + .size copy, .Lfunc_end2-copy + + .globl arg_i8 + .type arg_i8,@function +arg_i8: + .param i32 + .result i32 + .local i32 + i32.load $push4=, 0($0) + tee_local $push3=, $1=, $pop4 + i32.const $push0=, 4 + i32.add $push1=, $pop3, $pop0 + i32.store 0($0), $pop1 + i32.load $push2=, 0($1) + return $pop2 + .endfunc +.Lfunc_end3: + .size arg_i8, .Lfunc_end3-arg_i8 + + .globl arg_i32 + .type arg_i32,@function +arg_i32: + .param i32 + .result i32 + .local i32 + i32.load $push0=, 0($0) + i32.const $push1=, 3 + i32.add $push2=, $pop0, $pop1 + i32.const $push3=, -4 + i32.and $push8=, $pop2, $pop3 + tee_local $push7=, $1=, $pop8 + i32.const $push4=, 4 + i32.add $push5=, $pop7, $pop4 + i32.store 0($0), $pop5 + i32.load $push6=, 0($1) + return $pop6 + .endfunc +.Lfunc_end4: + .size arg_i32, .Lfunc_end4-arg_i32 + + .globl arg_i128 + .type arg_i128,@function +arg_i128: + .param i32, i32 + .local i32, i32, i64 + i32.load $push0=, 0($1) + i32.const $push1=, 7 + i32.add $push2=, $pop0, $pop1 + i32.const $push3=, -8 + i32.and $push13=, $pop2, $pop3 + tee_local $push12=, $2=, $pop13 + i32.const $push4=, 8 + i32.add $push11=, $pop12, $pop4 + tee_local $push10=, $3=, $pop11 + i32.store 0($1), $pop10 + i64.load $4=, 0($2) + i32.const $push5=, 16 + i32.add $push6=, $2, $pop5 + i32.store 0($1), $pop6 + i32.const $push9=, 8 + i32.add $push7=, $0, $pop9 + i64.load $push8=, 0($3) + i64.store 0($pop7), $pop8 + i64.store 0($0), $4 + return + .endfunc +.Lfunc_end5: + .size arg_i128, .Lfunc_end5-arg_i128 + + .globl caller_none + .type caller_none,@function +caller_none: + i32.const $push0=, 0 + call callee@FUNCTION, $pop0 + return + .endfunc +.Lfunc_end6: + .size caller_none, .Lfunc_end6-caller_none + + .globl caller_some + .type caller_some,@function +caller_some: + .local i32 + i32.const $push5=, 0 + i32.const $push2=, 0 + i32.load $push3=, __stack_pointer($pop2) + i32.const $push4=, 16 + i32.sub $push10=, $pop3, $pop4 + tee_local $push9=, $0=, $pop10 + i32.store __stack_pointer($pop5), $pop9 + i64.const $push0=, 4611686018427387904 + i64.store 8($0), $pop0 + i32.const $push1=, 0 + i32.store 0($0), $pop1 + call callee@FUNCTION, $0 + i32.const $push8=, 0 + i32.const $push6=, 16 + i32.add $push7=, $0, $pop6 + i32.store __stack_pointer($pop8), $pop7 + return + .endfunc +.Lfunc_end7: + .size caller_some, .Lfunc_end7-caller_some + + .globl startbb + .type startbb,@function +startbb: + .param i32, i32, i32 + block + i32.const $push0=, 1 + i32.and $push1=, $0, $pop0 + i32.eqz $push2=, $pop1 + br_if 0, $pop2 + return +.LBB8_2: + end_block + i32.store 0($1), $2 + return + .endfunc +.Lfunc_end8: + .size startbb, .Lfunc_end8-startbb + + + .functype callee, void diff --git a/src/binaryen/test/llvm_autogenerated/varargs.wast b/src/binaryen/test/llvm_autogenerated/varargs.wast new file mode 100644 index 0000000000..df3ac3e74b --- /dev/null +++ b/src/binaryen/test/llvm_autogenerated/varargs.wast @@ -0,0 +1,221 @@ +(module + (type $FUNCSIG$v (func)) + (type $FUNCSIG$vi (func (param i32))) + (import "env" "callee" (func $callee (param i32))) + (import "env" "memory" (memory $0 1)) + (table 0 anyfunc) + (data (i32.const 4) "\10\04\00\00") + (export "start" (func $start)) + (export "end" (func $end)) + (export "copy" (func $copy)) + (export "arg_i8" (func $arg_i8)) + (export "arg_i32" (func $arg_i32)) + (export "arg_i128" (func $arg_i128)) + (export "caller_none" (func $caller_none)) + (export "caller_some" (func $caller_some)) + (export "startbb" (func $startbb)) + (export "stackSave" (func $stackSave)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackRestore" (func $stackRestore)) + (func $start (; 1 ;) (param $0 i32) (param $1 i32) + (i32.store + (get_local $0) + (get_local $1) + ) + (return) + ) + (func $end (; 2 ;) (param $0 i32) + (return) + ) + (func $copy (; 3 ;) (param $0 i32) (param $1 i32) + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (return) + ) + (func $arg_i8 (; 4 ;) (param $0 i32) (result i32) + (local $1 i32) + (i32.store + (get_local $0) + (i32.add + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.const 4) + ) + ) + (return + (i32.load + (get_local $1) + ) + ) + ) + (func $arg_i32 (; 5 ;) (param $0 i32) (result i32) + (local $1 i32) + (i32.store + (get_local $0) + (i32.add + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $0) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + (i32.const 4) + ) + ) + (return + (i32.load + (get_local $1) + ) + ) + ) + (func $arg_i128 (; 6 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i64) + (i32.store + (get_local $1) + (tee_local $3 + (i32.add + (tee_local $2 + (i32.and + (i32.add + (i32.load + (get_local $1) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + (i32.const 8) + ) + ) + ) + (set_local $4 + (i64.load + (get_local $2) + ) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + (i64.store + (i32.add + (get_local $0) + (i32.const 8) + ) + (i64.load + (get_local $3) + ) + ) + (i64.store + (get_local $0) + (get_local $4) + ) + (return) + ) + (func $caller_none (; 7 ;) + (call $callee + (i32.const 0) + ) + (return) + ) + (func $caller_some (; 8 ;) + (local $0 i32) + (i32.store offset=4 + (i32.const 0) + (tee_local $0 + (i32.sub + (i32.load offset=4 + (i32.const 0) + ) + (i32.const 16) + ) + ) + ) + (i64.store offset=8 + (get_local $0) + (i64.const 4611686018427387904) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (call $callee + (get_local $0) + ) + (i32.store offset=4 + (i32.const 0) + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (return) + ) + (func $startbb (; 9 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (block $label$0 + (br_if $label$0 + (i32.eqz + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + ) + (return) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (return) + ) + (func $stackSave (; 10 ;) (result i32) + (i32.load offset=4 + (i32.const 0) + ) + ) + (func $stackAlloc (; 11 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (i32.load offset=4 + (i32.const 0) + ) + ) + (i32.store offset=4 + (i32.const 0) + (i32.and + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackRestore (; 12 ;) (param $0 i32) + (i32.store offset=4 + (i32.const 0) + (get_local $0) + ) + ) +) +;; METADATA: { "asmConsts": {},"staticBump": 1040, "initializers": [] } diff --git a/src/binaryen/test/mem.cpp b/src/binaryen/test/mem.cpp new file mode 100644 index 0000000000..e45149df1c --- /dev/null +++ b/src/binaryen/test/mem.cpp @@ -0,0 +1,34 @@ +#include +#include + +extern "C" { + +int EMSCRIPTEN_KEEPALIVE loadi8(size_t addr) { return ((int8_t*)addr)[0]; } +int EMSCRIPTEN_KEEPALIVE loadi16(size_t addr) { return ((int16_t*)addr)[0]; } +int EMSCRIPTEN_KEEPALIVE loadi32(size_t addr) { return ((int32_t*)addr)[0]; } + +int EMSCRIPTEN_KEEPALIVE loadu8(size_t addr) { return ((uint8_t*)addr)[0]; } +int EMSCRIPTEN_KEEPALIVE loadu16(size_t addr) { return ((uint16_t*)addr)[0]; } +int EMSCRIPTEN_KEEPALIVE loadu32(size_t addr) { return ((uint32_t*)addr)[0]; } + +double EMSCRIPTEN_KEEPALIVE loadf32(size_t addr) { return ((float*)addr)[0]; } +double EMSCRIPTEN_KEEPALIVE loadf64(size_t addr) { return ((double*)addr)[0]; } + +void EMSCRIPTEN_KEEPALIVE storei8(size_t addr, int8_t v) { ((int8_t*)addr)[0] = v; } +void EMSCRIPTEN_KEEPALIVE storei16(size_t addr, int16_t v) { ((int16_t*)addr)[0] = v; } +void EMSCRIPTEN_KEEPALIVE storei32(size_t addr, int32_t v) { ((int32_t*)addr)[0] = v; } + +void EMSCRIPTEN_KEEPALIVE storeu8(size_t addr, uint8_t v) { ((uint8_t*)addr)[0] = v; } +void EMSCRIPTEN_KEEPALIVE storeu16(size_t addr, uint16_t v) { ((uint16_t*)addr)[0] = v; } +void EMSCRIPTEN_KEEPALIVE storeu32(size_t addr, uint32_t v) { ((uint32_t*)addr)[0] = v; } + +void EMSCRIPTEN_KEEPALIVE storef32(size_t addr, float v) { ((float*)addr)[0] = v; } +void EMSCRIPTEN_KEEPALIVE storef64(size_t addr, double v) { ((double*)addr)[0] = v; } + +int* EMSCRIPTEN_KEEPALIVE get_stack() { + int t; + return &t; +} + +} + diff --git a/src/binaryen/test/mem.emcc b/src/binaryen/test/mem.emcc new file mode 100644 index 0000000000..40c421eee9 --- /dev/null +++ b/src/binaryen/test/mem.emcc @@ -0,0 +1 @@ +["-s", "ASSERTIONS=0"] diff --git a/src/binaryen/test/mem.post.js b/src/binaryen/test/mem.post.js new file mode 100644 index 0000000000..4dcfb7a83d --- /dev/null +++ b/src/binaryen/test/mem.post.js @@ -0,0 +1,53 @@ + +function test(name) { + Module.print(name); + function doTest(x) { + // write to 0, as 0-8 is normally unused anyhow + Module['_store' + name](0, x); + Module.print(' ' + [x] + ' ==> ' + Module['_load' + name](0)); + } + doTest(0); + doTest(1); + doTest(-1); + doTest(0.5); + doTest(-0.5); + doTest(1.4); + doTest(-1.4); + doTest(1.6); + doTest(-1.6); + doTest(5.1); + doTest(5.3); + doTest(5.7); + doTest(5.9); + doTest(1 << 10); + doTest(1 << 20); + doTest(-1 | 0); + doTest((-1 | 0) + 1); + doTest((-1 | 0) - 1); + doTest(-1 >>> 0); + doTest((-1 >>> 0) + 1); + doTest((-1 >>> 0) - 1); + + Module.print(' pre ==> ' + Module['_load' + name](0)); + HEAPU8[0] = 10; + HEAPU8[1] = 20; + HEAPU8[2] = 30; + HEAPU8[3] = 40; + HEAPU8[4] = 50; + HEAPU8[5] = 99; + HEAPU8[6] = 125; + HEAPU8[7] = 250; + Module.print(' post ==> ' + Module['_load' + name](0)); +} + +test('i8'); +test('i16'); +test('i32'); +test('u8'); +test('u16'); +test('u32'); +test('f32'); +test('f64'); + +Module.print('stack: ' + (Module['_get_stack']() > 8)); + diff --git a/src/binaryen/test/mem.txt b/src/binaryen/test/mem.txt new file mode 100644 index 0000000000..13d2377651 --- /dev/null +++ b/src/binaryen/test/mem.txt @@ -0,0 +1,193 @@ +i8 + 0 ==> 0 + 1 ==> 1 + -1 ==> -1 + 0.5 ==> 0 + -0.5 ==> 0 + 1.4 ==> 1 + -1.4 ==> -1 + 1.6 ==> 1 + -1.6 ==> -1 + 5.1 ==> 5 + 5.3 ==> 5 + 5.7 ==> 5 + 5.9 ==> 5 + 1024 ==> 0 + 1048576 ==> 0 + -1 ==> -1 + 0 ==> 0 + -2 ==> -2 + 4294967295 ==> -1 + 4294967296 ==> 0 + 4294967294 ==> -2 + pre ==> -2 + post ==> 10 +i16 + 0 ==> 0 + 1 ==> 1 + -1 ==> -1 + 0.5 ==> 0 + -0.5 ==> 0 + 1.4 ==> 1 + -1.4 ==> -1 + 1.6 ==> 1 + -1.6 ==> -1 + 5.1 ==> 5 + 5.3 ==> 5 + 5.7 ==> 5 + 5.9 ==> 5 + 1024 ==> 1024 + 1048576 ==> 0 + -1 ==> -1 + 0 ==> 0 + -2 ==> -2 + 4294967295 ==> -1 + 4294967296 ==> 0 + 4294967294 ==> -2 + pre ==> -2 + post ==> 5130 +i32 + 0 ==> 0 + 1 ==> 1 + -1 ==> -1 + 0.5 ==> 0 + -0.5 ==> 0 + 1.4 ==> 1 + -1.4 ==> -1 + 1.6 ==> 1 + -1.6 ==> -1 + 5.1 ==> 5 + 5.3 ==> 5 + 5.7 ==> 5 + 5.9 ==> 5 + 1024 ==> 1024 + 1048576 ==> 1048576 + -1 ==> -1 + 0 ==> 0 + -2 ==> -2 + 4294967295 ==> -1 + 4294967296 ==> 0 + 4294967294 ==> -2 + pre ==> -2 + post ==> 673059850 +u8 + 0 ==> 0 + 1 ==> 1 + -1 ==> 255 + 0.5 ==> 0 + -0.5 ==> 0 + 1.4 ==> 1 + -1.4 ==> 255 + 1.6 ==> 1 + -1.6 ==> 255 + 5.1 ==> 5 + 5.3 ==> 5 + 5.7 ==> 5 + 5.9 ==> 5 + 1024 ==> 0 + 1048576 ==> 0 + -1 ==> 255 + 0 ==> 0 + -2 ==> 254 + 4294967295 ==> 255 + 4294967296 ==> 0 + 4294967294 ==> 254 + pre ==> 254 + post ==> 10 +u16 + 0 ==> 0 + 1 ==> 1 + -1 ==> 65535 + 0.5 ==> 0 + -0.5 ==> 0 + 1.4 ==> 1 + -1.4 ==> 65535 + 1.6 ==> 1 + -1.6 ==> 65535 + 5.1 ==> 5 + 5.3 ==> 5 + 5.7 ==> 5 + 5.9 ==> 5 + 1024 ==> 1024 + 1048576 ==> 0 + -1 ==> 65535 + 0 ==> 0 + -2 ==> 65534 + 4294967295 ==> 65535 + 4294967296 ==> 0 + 4294967294 ==> 65534 + pre ==> 65534 + post ==> 5130 +u32 + 0 ==> 0 + 1 ==> 1 + -1 ==> -1 + 0.5 ==> 0 + -0.5 ==> 0 + 1.4 ==> 1 + -1.4 ==> -1 + 1.6 ==> 1 + -1.6 ==> -1 + 5.1 ==> 5 + 5.3 ==> 5 + 5.7 ==> 5 + 5.9 ==> 5 + 1024 ==> 1024 + 1048576 ==> 1048576 + -1 ==> -1 + 0 ==> 0 + -2 ==> -2 + 4294967295 ==> -1 + 4294967296 ==> 0 + 4294967294 ==> -2 + pre ==> -2 + post ==> 673059850 +f32 + 0 ==> 0 + 1 ==> 1 + -1 ==> -1 + 0.5 ==> 0.5 + -0.5 ==> -0.5 + 1.4 ==> 1.399999976158142 + -1.4 ==> -1.399999976158142 + 1.6 ==> 1.600000023841858 + -1.6 ==> -1.600000023841858 + 5.1 ==> 5.099999904632568 + 5.3 ==> 5.300000190734863 + 5.7 ==> 5.699999809265137 + 5.9 ==> 5.900000095367432 + 1024 ==> 1024 + 1048576 ==> 1048576 + -1 ==> -1 + 0 ==> 0 + -2 ==> -2 + 4294967295 ==> 4294967296 + 4294967296 ==> 4294967296 + 4294967294 ==> 4294967296 + pre ==> 4294967296 + post ==> 8.775107173558151e-15 +f64 + 0 ==> 0 + 1 ==> 1 + -1 ==> -1 + 0.5 ==> 0.5 + -0.5 ==> -0.5 + 1.4 ==> 1.4 + -1.4 ==> -1.4 + 1.6 ==> 1.6 + -1.6 ==> -1.6 + 5.1 ==> 5.1 + 5.3 ==> 5.3 + 5.7 ==> 5.7 + 5.9 ==> 5.9 + 1024 ==> 1024 + 1048576 ==> 1048576 + -1 ==> -1 + 0 ==> 0 + -2 ==> -2 + 4294967295 ==> 4294967295 + 4294967296 ==> 4294967296 + 4294967294 ==> 4294967294 + pre ==> 4294967294 + post ==> -1.066886858533604e+282 +stack: true diff --git a/src/binaryen/test/memory-import.wast b/src/binaryen/test/memory-import.wast new file mode 100644 index 0000000000..d7e6e37704 --- /dev/null +++ b/src/binaryen/test/memory-import.wast @@ -0,0 +1,9 @@ +(module + (type $0 (func (result i32))) + (import "env" "memory" (memory $0 1 1)) + (func $foo (type $0) (result i32) + (i32.load offset=13 + (i32.const 37) + ) + ) +) diff --git a/src/binaryen/test/memory-import.wast.from-wast b/src/binaryen/test/memory-import.wast.from-wast new file mode 100644 index 0000000000..6532a10186 --- /dev/null +++ b/src/binaryen/test/memory-import.wast.from-wast @@ -0,0 +1,9 @@ +(module + (type $0 (func (result i32))) + (import "env" "memory" (memory $0 1 1)) + (func $foo (; 0 ;) (type $0) (result i32) + (i32.load offset=13 + (i32.const 37) + ) + ) +) diff --git a/src/binaryen/test/memory-import.wast.fromBinary b/src/binaryen/test/memory-import.wast.fromBinary new file mode 100644 index 0000000000..427dbb7823 --- /dev/null +++ b/src/binaryen/test/memory-import.wast.fromBinary @@ -0,0 +1,10 @@ +(module + (type $0 (func (result i32))) + (import "env" "memory" (memory $0 1 1)) + (func $foo (; 0 ;) (type $0) (result i32) + (i32.load offset=13 + (i32.const 37) + ) + ) +) + diff --git a/src/binaryen/test/memory-import.wast.fromBinary.noDebugInfo b/src/binaryen/test/memory-import.wast.fromBinary.noDebugInfo new file mode 100644 index 0000000000..a7cf4ced43 --- /dev/null +++ b/src/binaryen/test/memory-import.wast.fromBinary.noDebugInfo @@ -0,0 +1,10 @@ +(module + (type $0 (func (result i32))) + (import "env" "memory" (memory $0 1 1)) + (func $0 (; 0 ;) (type $0) (result i32) + (i32.load offset=13 + (i32.const 37) + ) + ) +) + diff --git a/src/binaryen/test/memory-shared.wast b/src/binaryen/test/memory-shared.wast new file mode 100644 index 0000000000..ee02979b11 --- /dev/null +++ b/src/binaryen/test/memory-shared.wast @@ -0,0 +1,3 @@ +(module + (memory $0 (shared 23 256)) +) diff --git a/src/binaryen/test/memory-shared.wast.from-wast b/src/binaryen/test/memory-shared.wast.from-wast new file mode 100644 index 0000000000..ee02979b11 --- /dev/null +++ b/src/binaryen/test/memory-shared.wast.from-wast @@ -0,0 +1,3 @@ +(module + (memory $0 (shared 23 256)) +) diff --git a/src/binaryen/test/memory-shared.wast.fromBinary b/src/binaryen/test/memory-shared.wast.fromBinary new file mode 100644 index 0000000000..ea904d0850 --- /dev/null +++ b/src/binaryen/test/memory-shared.wast.fromBinary @@ -0,0 +1,4 @@ +(module + (memory $0 (shared 23 256)) +) + diff --git a/src/binaryen/test/memory-shared.wast.fromBinary.noDebugInfo b/src/binaryen/test/memory-shared.wast.fromBinary.noDebugInfo new file mode 100644 index 0000000000..ea904d0850 --- /dev/null +++ b/src/binaryen/test/memory-shared.wast.fromBinary.noDebugInfo @@ -0,0 +1,4 @@ +(module + (memory $0 (shared 23 256)) +) + diff --git a/src/binaryen/test/memorygrowth.asm.js b/src/binaryen/test/memorygrowth.asm.js new file mode 100644 index 0000000000..e4bdc8a983 --- /dev/null +++ b/src/binaryen/test/memorygrowth.asm.js @@ -0,0 +1,2387 @@ +Module["asm"] = (function(global,env,buffer) { + + "almost asm"; + var a = global.Int8Array; + var b = global.Int16Array; + var c = global.Int32Array; + var d = global.Uint8Array; + var e = global.Uint16Array; + var f = global.Uint32Array; + var g = global.Float32Array; + var h = global.Float64Array; + var i = new a(buffer); + var j = new b(buffer); + var k = new c(buffer); + var l = new d(buffer); + var m = new e(buffer); + var n = new f(buffer); + var o = new g(buffer); + var p = new h(buffer); + var q = global.byteLength; + var r = env.STACKTOP | 0; + var s = env.STACK_MAX | 0; + var t = env.tempDoublePtr | 0; + var u = env.ABORT | 0; + var v = 0; + var w = 0; + var x = 0; + var y = 0; + var z = global.NaN, A = global.Infinity; + var B = 0, C = 0, D = 0, E = 0, F = 0.0, G = 0, H = 0, I = 0, J = 0.0; + var K = 0; + var L = 0; + var M = 0; + var N = 0; + var O = 0; + var P = 0; + var Q = 0; + var R = 0; + var S = 0; + var T = 0; + var U = global.Math.floor; + var V = global.Math.abs; + var W = global.Math.sqrt; + var X = global.Math.pow; + var Y = global.Math.cos; + var Z = global.Math.sin; + var _ = global.Math.tan; + var $ = global.Math.acos; + var aa = global.Math.asin; + var ba = global.Math.atan; + var ca = global.Math.atan2; + var da = global.Math.exp; + var ea = global.Math.log; + var fa = global.Math.ceil; + var ga = global.Math.imul; + var ha = global.Math.min; + var ia = global.Math.clz32; + var ja = env.abort; + var ka = env.assert; + var la = env.invoke_ii; + var ma = env.invoke_iiii; + var na = env.invoke_vi; + var oa = env._pthread_cleanup_pop; + var pa = env.___lock; + var qa = env._abort; + var ra = env._pthread_cleanup_push; + var sa = env.___syscall6; + var ta = env._sbrk; + var ua = env.___syscall140; + var va = env._emscripten_memcpy_big; + var wa = env.___syscall54; + var xa = env.___unlock; + var ya = env.___syscall146; + var za = 0.0; + function Aa(newBuffer) { + if (q(newBuffer) & 16777215 || q(newBuffer) <= 16777215 || q(newBuffer) > 2147483648) return false; + i = new a(newBuffer); + j = new b(newBuffer); + k = new c(newBuffer); + l = new d(newBuffer); + m = new e(newBuffer); + n = new f(newBuffer); + o = new g(newBuffer); + p = new h(newBuffer); + buffer = newBuffer; + return true; + } + +// EMSCRIPTEN_START_FUNCS + +function eb(a) { + a = a | 0; + var b = 0, c = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, s = 0, t = 0, u = 0, v = 0, w = 0, x = 0, y = 0, z = 0, A = 0, B = 0, C = 0, D = 0, E = 0, F = 0, G = 0, H = 0, I = 0, J = 0, K = 0, L = 0, M = 0, N = 0, O = 0, P = 0, Q = 0, R = 0, S = 0, T = 0, U = 0, V = 0, W = 0, X = 0, Y = 0, Z = 0, _ = 0, $ = 0, aa = 0, ba = 0, ca = 0, da = 0, ea = 0, fa = 0, ga = 0, ha = 0, ia = 0, ja = 0, ka = 0, la = 0, ma = 0, na = 0, oa = 0, pa = 0, ra = 0, sa = 0, ua = 0, va = 0, wa = 0, xa = 0, ya = 0, za = 0, Aa = 0, Ba = 0, Ca = 0, Da = 0, Ea = 0, Fa = 0, Ga = 0, Ha = 0, Ia = 0, Ja = 0, Ka = 0, La = 0, Ma = 0, Na = 0, Oa = 0, Pa = 0, Ra = 0, Sa = 0; + b = r; + r = r + 16 | 0; + c = b; + do if (a >>> 0 < 245) { + d = a >>> 0 < 11 ? 16 : a + 11 & -8; + e = d >>> 3; + f = k[302] | 0; + g = f >>> e; + if (g & 3 | 0) { + h = (g & 1 ^ 1) + e | 0; + i = 1248 + (h << 1 << 2) | 0; + j = i + 8 | 0; + l = k[j >> 2] | 0; + m = l + 8 | 0; + n = k[m >> 2] | 0; + do if ((i | 0) == (n | 0)) k[302] = f & ~(1 << h); else { + if (n >>> 0 < (k[306] | 0) >>> 0) qa(); + o = n + 12 | 0; + if ((k[o >> 2] | 0) == (l | 0)) { + k[o >> 2] = i; + k[j >> 2] = n; + break; + } else qa(); + } while (0); + n = h << 3; + k[l + 4 >> 2] = n | 3; + j = l + n + 4 | 0; + k[j >> 2] = k[j >> 2] | 1; + p = m; + r = b; + return p | 0; + } + j = k[304] | 0; + if (d >>> 0 > j >>> 0) { + if (g | 0) { + n = 2 << e; + i = g << e & (n | 0 - n); + n = (i & 0 - i) + -1 | 0; + i = n >>> 12 & 16; + o = n >>> i; + n = o >>> 5 & 8; + q = o >>> n; + o = q >>> 2 & 4; + s = q >>> o; + q = s >>> 1 & 2; + t = s >>> q; + s = t >>> 1 & 1; + u = (n | i | o | q | s) + (t >>> s) | 0; + s = 1248 + (u << 1 << 2) | 0; + t = s + 8 | 0; + q = k[t >> 2] | 0; + o = q + 8 | 0; + i = k[o >> 2] | 0; + do if ((s | 0) == (i | 0)) { + k[302] = f & ~(1 << u); + v = j; + } else { + if (i >>> 0 < (k[306] | 0) >>> 0) qa(); + n = i + 12 | 0; + if ((k[n >> 2] | 0) == (q | 0)) { + k[n >> 2] = s; + k[t >> 2] = i; + v = k[304] | 0; + break; + } else qa(); + } while (0); + i = (u << 3) - d | 0; + k[q + 4 >> 2] = d | 3; + t = q + d | 0; + k[t + 4 >> 2] = i | 1; + k[t + i >> 2] = i; + if (v | 0) { + s = k[307] | 0; + j = v >>> 3; + f = 1248 + (j << 1 << 2) | 0; + e = k[302] | 0; + g = 1 << j; + if (!(e & g)) { + k[302] = e | g; + w = f + 8 | 0; + x = f; + } else { + g = f + 8 | 0; + e = k[g >> 2] | 0; + if (e >>> 0 < (k[306] | 0) >>> 0) qa(); else { + w = g; + x = e; + } + } + k[w >> 2] = s; + k[x + 12 >> 2] = s; + k[s + 8 >> 2] = x; + k[s + 12 >> 2] = f; + } + k[304] = i; + k[307] = t; + p = o; + r = b; + return p | 0; + } + t = k[303] | 0; + if (!t) y = d; else { + i = (t & 0 - t) + -1 | 0; + t = i >>> 12 & 16; + f = i >>> t; + i = f >>> 5 & 8; + s = f >>> i; + f = s >>> 2 & 4; + e = s >>> f; + s = e >>> 1 & 2; + g = e >>> s; + e = g >>> 1 & 1; + j = k[1512 + ((i | t | f | s | e) + (g >>> e) << 2) >> 2] | 0; + e = (k[j + 4 >> 2] & -8) - d | 0; + g = j; + s = j; + while (1) { + j = k[g + 16 >> 2] | 0; + if (!j) { + f = k[g + 20 >> 2] | 0; + if (!f) { + z = e; + A = s; + break; + } else B = f; + } else B = j; + j = (k[B + 4 >> 2] & -8) - d | 0; + f = j >>> 0 < e >>> 0; + e = f ? j : e; + g = B; + s = f ? B : s; + } + s = k[306] | 0; + if (A >>> 0 < s >>> 0) qa(); + g = A + d | 0; + if (A >>> 0 >= g >>> 0) qa(); + e = k[A + 24 >> 2] | 0; + o = k[A + 12 >> 2] | 0; + do if ((o | 0) == (A | 0)) { + q = A + 20 | 0; + u = k[q >> 2] | 0; + if (!u) { + f = A + 16 | 0; + j = k[f >> 2] | 0; + if (!j) { + C = 0; + break; + } else { + D = j; + E = f; + } + } else { + D = u; + E = q; + } + while (1) { + q = D + 20 | 0; + u = k[q >> 2] | 0; + if (u | 0) { + D = u; + E = q; + continue; + } + q = D + 16 | 0; + u = k[q >> 2] | 0; + if (!u) { + F = D; + G = E; + break; + } else { + D = u; + E = q; + } + } + if (G >>> 0 < s >>> 0) qa(); else { + k[G >> 2] = 0; + C = F; + break; + } + } else { + q = k[A + 8 >> 2] | 0; + if (q >>> 0 < s >>> 0) qa(); + u = q + 12 | 0; + if ((k[u >> 2] | 0) != (A | 0)) qa(); + f = o + 8 | 0; + if ((k[f >> 2] | 0) == (A | 0)) { + k[u >> 2] = o; + k[f >> 2] = q; + C = o; + break; + } else qa(); + } while (0); + do if (e | 0) { + o = k[A + 28 >> 2] | 0; + s = 1512 + (o << 2) | 0; + if ((A | 0) == (k[s >> 2] | 0)) { + k[s >> 2] = C; + if (!C) { + k[303] = k[303] & ~(1 << o); + break; + } + } else { + if (e >>> 0 < (k[306] | 0) >>> 0) qa(); + o = e + 16 | 0; + if ((k[o >> 2] | 0) == (A | 0)) k[o >> 2] = C; else k[e + 20 >> 2] = C; + if (!C) break; + } + o = k[306] | 0; + if (C >>> 0 < o >>> 0) qa(); + k[C + 24 >> 2] = e; + s = k[A + 16 >> 2] | 0; + do if (s | 0) if (s >>> 0 < o >>> 0) qa(); else { + k[C + 16 >> 2] = s; + k[s + 24 >> 2] = C; + break; + } while (0); + s = k[A + 20 >> 2] | 0; + if (s | 0) if (s >>> 0 < (k[306] | 0) >>> 0) qa(); else { + k[C + 20 >> 2] = s; + k[s + 24 >> 2] = C; + break; + } + } while (0); + if (z >>> 0 < 16) { + e = z + d | 0; + k[A + 4 >> 2] = e | 3; + s = A + e + 4 | 0; + k[s >> 2] = k[s >> 2] | 1; + } else { + k[A + 4 >> 2] = d | 3; + k[g + 4 >> 2] = z | 1; + k[g + z >> 2] = z; + s = k[304] | 0; + if (s | 0) { + e = k[307] | 0; + o = s >>> 3; + s = 1248 + (o << 1 << 2) | 0; + q = k[302] | 0; + f = 1 << o; + if (!(q & f)) { + k[302] = q | f; + H = s + 8 | 0; + I = s; + } else { + f = s + 8 | 0; + q = k[f >> 2] | 0; + if (q >>> 0 < (k[306] | 0) >>> 0) qa(); else { + H = f; + I = q; + } + } + k[H >> 2] = e; + k[I + 12 >> 2] = e; + k[e + 8 >> 2] = I; + k[e + 12 >> 2] = s; + } + k[304] = z; + k[307] = g; + } + p = A + 8 | 0; + r = b; + return p | 0; + } + } else y = d; + } else if (a >>> 0 > 4294967231) y = -1; else { + s = a + 11 | 0; + e = s & -8; + q = k[303] | 0; + if (!q) y = e; else { + f = 0 - e | 0; + o = s >>> 8; + if (!o) J = 0; else if (e >>> 0 > 16777215) J = 31; else { + s = (o + 1048320 | 0) >>> 16 & 8; + u = o << s; + o = (u + 520192 | 0) >>> 16 & 4; + j = u << o; + u = (j + 245760 | 0) >>> 16 & 2; + t = 14 - (o | s | u) + (j << u >>> 15) | 0; + J = e >>> (t + 7 | 0) & 1 | t << 1; + } + t = k[1512 + (J << 2) >> 2] | 0; + a : do if (!t) { + K = f; + L = 0; + M = 0; + N = 86; + } else { + u = f; + j = 0; + s = e << ((J | 0) == 31 ? 0 : 25 - (J >>> 1) | 0); + o = t; + i = 0; + while (1) { + m = k[o + 4 >> 2] & -8; + l = m - e | 0; + if (l >>> 0 < u >>> 0) if ((m | 0) == (e | 0)) { + O = l; + P = o; + Q = o; + N = 90; + break a; + } else { + R = l; + S = o; + } else { + R = u; + S = i; + } + l = k[o + 20 >> 2] | 0; + o = k[o + 16 + (s >>> 31 << 2) >> 2] | 0; + m = (l | 0) == 0 | (l | 0) == (o | 0) ? j : l; + l = (o | 0) == 0; + if (l) { + K = R; + L = m; + M = S; + N = 86; + break; + } else { + u = R; + j = m; + s = s << (l & 1 ^ 1); + i = S; + } + } + } while (0); + if ((N | 0) == 86) { + if ((L | 0) == 0 & (M | 0) == 0) { + t = 2 << J; + f = q & (t | 0 - t); + if (!f) { + y = e; + break; + } + t = (f & 0 - f) + -1 | 0; + f = t >>> 12 & 16; + d = t >>> f; + t = d >>> 5 & 8; + g = d >>> t; + d = g >>> 2 & 4; + i = g >>> d; + g = i >>> 1 & 2; + s = i >>> g; + i = s >>> 1 & 1; + T = k[1512 + ((t | f | d | g | i) + (s >>> i) << 2) >> 2] | 0; + } else T = L; + if (!T) { + U = K; + V = M; + } else { + O = K; + P = T; + Q = M; + N = 90; + } + } + if ((N | 0) == 90) while (1) { + N = 0; + i = (k[P + 4 >> 2] & -8) - e | 0; + s = i >>> 0 < O >>> 0; + g = s ? i : O; + i = s ? P : Q; + s = k[P + 16 >> 2] | 0; + if (s | 0) { + O = g; + P = s; + Q = i; + N = 90; + continue; + } + P = k[P + 20 >> 2] | 0; + if (!P) { + U = g; + V = i; + break; + } else { + O = g; + Q = i; + N = 90; + } + } + if (!V) y = e; else if (U >>> 0 < ((k[304] | 0) - e | 0) >>> 0) { + q = k[306] | 0; + if (V >>> 0 < q >>> 0) qa(); + i = V + e | 0; + if (V >>> 0 >= i >>> 0) qa(); + g = k[V + 24 >> 2] | 0; + s = k[V + 12 >> 2] | 0; + do if ((s | 0) == (V | 0)) { + d = V + 20 | 0; + f = k[d >> 2] | 0; + if (!f) { + t = V + 16 | 0; + j = k[t >> 2] | 0; + if (!j) { + W = 0; + break; + } else { + X = j; + Y = t; + } + } else { + X = f; + Y = d; + } + while (1) { + d = X + 20 | 0; + f = k[d >> 2] | 0; + if (f | 0) { + X = f; + Y = d; + continue; + } + d = X + 16 | 0; + f = k[d >> 2] | 0; + if (!f) { + Z = X; + _ = Y; + break; + } else { + X = f; + Y = d; + } + } + if (_ >>> 0 < q >>> 0) qa(); else { + k[_ >> 2] = 0; + W = Z; + break; + } + } else { + d = k[V + 8 >> 2] | 0; + if (d >>> 0 < q >>> 0) qa(); + f = d + 12 | 0; + if ((k[f >> 2] | 0) != (V | 0)) qa(); + t = s + 8 | 0; + if ((k[t >> 2] | 0) == (V | 0)) { + k[f >> 2] = s; + k[t >> 2] = d; + W = s; + break; + } else qa(); + } while (0); + do if (g | 0) { + s = k[V + 28 >> 2] | 0; + q = 1512 + (s << 2) | 0; + if ((V | 0) == (k[q >> 2] | 0)) { + k[q >> 2] = W; + if (!W) { + k[303] = k[303] & ~(1 << s); + break; + } + } else { + if (g >>> 0 < (k[306] | 0) >>> 0) qa(); + s = g + 16 | 0; + if ((k[s >> 2] | 0) == (V | 0)) k[s >> 2] = W; else k[g + 20 >> 2] = W; + if (!W) break; + } + s = k[306] | 0; + if (W >>> 0 < s >>> 0) qa(); + k[W + 24 >> 2] = g; + q = k[V + 16 >> 2] | 0; + do if (q | 0) if (q >>> 0 < s >>> 0) qa(); else { + k[W + 16 >> 2] = q; + k[q + 24 >> 2] = W; + break; + } while (0); + q = k[V + 20 >> 2] | 0; + if (q | 0) if (q >>> 0 < (k[306] | 0) >>> 0) qa(); else { + k[W + 20 >> 2] = q; + k[q + 24 >> 2] = W; + break; + } + } while (0); + do if (U >>> 0 < 16) { + g = U + e | 0; + k[V + 4 >> 2] = g | 3; + q = V + g + 4 | 0; + k[q >> 2] = k[q >> 2] | 1; + } else { + k[V + 4 >> 2] = e | 3; + k[i + 4 >> 2] = U | 1; + k[i + U >> 2] = U; + q = U >>> 3; + if (U >>> 0 < 256) { + g = 1248 + (q << 1 << 2) | 0; + s = k[302] | 0; + d = 1 << q; + if (!(s & d)) { + k[302] = s | d; + $ = g + 8 | 0; + aa = g; + } else { + d = g + 8 | 0; + s = k[d >> 2] | 0; + if (s >>> 0 < (k[306] | 0) >>> 0) qa(); else { + $ = d; + aa = s; + } + } + k[$ >> 2] = i; + k[aa + 12 >> 2] = i; + k[i + 8 >> 2] = aa; + k[i + 12 >> 2] = g; + break; + } + g = U >>> 8; + if (!g) ba = 0; else if (U >>> 0 > 16777215) ba = 31; else { + s = (g + 1048320 | 0) >>> 16 & 8; + d = g << s; + g = (d + 520192 | 0) >>> 16 & 4; + q = d << g; + d = (q + 245760 | 0) >>> 16 & 2; + t = 14 - (g | s | d) + (q << d >>> 15) | 0; + ba = U >>> (t + 7 | 0) & 1 | t << 1; + } + t = 1512 + (ba << 2) | 0; + k[i + 28 >> 2] = ba; + d = i + 16 | 0; + k[d + 4 >> 2] = 0; + k[d >> 2] = 0; + d = k[303] | 0; + q = 1 << ba; + if (!(d & q)) { + k[303] = d | q; + k[t >> 2] = i; + k[i + 24 >> 2] = t; + k[i + 12 >> 2] = i; + k[i + 8 >> 2] = i; + break; + } + q = U << ((ba | 0) == 31 ? 0 : 25 - (ba >>> 1) | 0); + d = k[t >> 2] | 0; + while (1) { + if ((k[d + 4 >> 2] & -8 | 0) == (U | 0)) { + ca = d; + N = 148; + break; + } + t = d + 16 + (q >>> 31 << 2) | 0; + s = k[t >> 2] | 0; + if (!s) { + da = t; + ea = d; + N = 145; + break; + } else { + q = q << 1; + d = s; + } + } + if ((N | 0) == 145) if (da >>> 0 < (k[306] | 0) >>> 0) qa(); else { + k[da >> 2] = i; + k[i + 24 >> 2] = ea; + k[i + 12 >> 2] = i; + k[i + 8 >> 2] = i; + break; + } else if ((N | 0) == 148) { + d = ca + 8 | 0; + q = k[d >> 2] | 0; + s = k[306] | 0; + if (q >>> 0 >= s >>> 0 & ca >>> 0 >= s >>> 0) { + k[q + 12 >> 2] = i; + k[d >> 2] = i; + k[i + 8 >> 2] = q; + k[i + 12 >> 2] = ca; + k[i + 24 >> 2] = 0; + break; + } else qa(); + } + } while (0); + p = V + 8 | 0; + r = b; + return p | 0; + } else y = e; + } + } while (0); + V = k[304] | 0; + if (V >>> 0 >= y >>> 0) { + ca = V - y | 0; + ea = k[307] | 0; + if (ca >>> 0 > 15) { + da = ea + y | 0; + k[307] = da; + k[304] = ca; + k[da + 4 >> 2] = ca | 1; + k[da + ca >> 2] = ca; + k[ea + 4 >> 2] = y | 3; + } else { + k[304] = 0; + k[307] = 0; + k[ea + 4 >> 2] = V | 3; + ca = ea + V + 4 | 0; + k[ca >> 2] = k[ca >> 2] | 1; + } + p = ea + 8 | 0; + r = b; + return p | 0; + } + ea = k[305] | 0; + if (ea >>> 0 > y >>> 0) { + ca = ea - y | 0; + k[305] = ca; + ea = k[308] | 0; + V = ea + y | 0; + k[308] = V; + k[V + 4 >> 2] = ca | 1; + k[ea + 4 >> 2] = y | 3; + p = ea + 8 | 0; + r = b; + return p | 0; + } + if (!(k[420] | 0)) { + k[422] = 4096; + k[421] = 4096; + k[423] = -1; + k[424] = -1; + k[425] = 0; + k[413] = 0; + ea = c & -16 ^ 1431655768; + k[c >> 2] = ea; + k[420] = ea; + } + ea = y + 48 | 0; + c = k[422] | 0; + ca = y + 47 | 0; + V = c + ca | 0; + da = 0 - c | 0; + c = V & da; + if (c >>> 0 <= y >>> 0) { + p = 0; + r = b; + return p | 0; + } + U = k[412] | 0; + if (U | 0) { + ba = k[410] | 0; + aa = ba + c | 0; + if (aa >>> 0 <= ba >>> 0 | aa >>> 0 > U >>> 0) { + p = 0; + r = b; + return p | 0; + } + } + b : do if (!(k[413] & 4)) { + U = k[308] | 0; + c : do if (!U) N = 171; else { + aa = 1656; + while (1) { + ba = k[aa >> 2] | 0; + if (ba >>> 0 <= U >>> 0) { + $ = aa + 4 | 0; + if ((ba + (k[$ >> 2] | 0) | 0) >>> 0 > U >>> 0) { + fa = aa; + ga = $; + break; + } + } + aa = k[aa + 8 >> 2] | 0; + if (!aa) { + N = 171; + break c; + } + } + aa = V - (k[305] | 0) & da; + if (aa >>> 0 < 2147483647) { + $ = ta(aa | 0) | 0; + if (($ | 0) == ((k[fa >> 2] | 0) + (k[ga >> 2] | 0) | 0)) { + if (($ | 0) != (-1 | 0)) { + ha = $; + ia = aa; + N = 191; + break b; + } + } else { + ja = $; + ka = aa; + N = 181; + } + } + } while (0); + do if ((N | 0) == 171) { + U = ta(0) | 0; + if ((U | 0) != (-1 | 0)) { + e = U; + aa = k[421] | 0; + $ = aa + -1 | 0; + if (!($ & e)) la = c; else la = c - e + ($ + e & 0 - aa) | 0; + aa = k[410] | 0; + e = aa + la | 0; + if (la >>> 0 > y >>> 0 & la >>> 0 < 2147483647) { + $ = k[412] | 0; + if ($ | 0) if (e >>> 0 <= aa >>> 0 | e >>> 0 > $ >>> 0) break; + $ = ta(la | 0) | 0; + if (($ | 0) == (U | 0)) { + ha = U; + ia = la; + N = 191; + break b; + } else { + ja = $; + ka = la; + N = 181; + } + } + } + } while (0); + d : do if ((N | 0) == 181) { + $ = 0 - ka | 0; + do if (ea >>> 0 > ka >>> 0 & (ka >>> 0 < 2147483647 & (ja | 0) != (-1 | 0))) { + U = k[422] | 0; + e = ca - ka + U & 0 - U; + if (e >>> 0 < 2147483647) if ((ta(e | 0) | 0) == (-1 | 0)) { + ta($ | 0) | 0; + break d; + } else { + ma = e + ka | 0; + break; + } else ma = ka; + } else ma = ka; while (0); + if ((ja | 0) != (-1 | 0)) { + ha = ja; + ia = ma; + N = 191; + break b; + } + } while (0); + k[413] = k[413] | 4; + N = 188; + } else N = 188; while (0); + if ((N | 0) == 188) if (c >>> 0 < 2147483647) { + ma = ta(c | 0) | 0; + c = ta(0) | 0; + if (ma >>> 0 < c >>> 0 & ((ma | 0) != (-1 | 0) & (c | 0) != (-1 | 0))) { + ja = c - ma | 0; + if (ja >>> 0 > (y + 40 | 0) >>> 0) { + ha = ma; + ia = ja; + N = 191; + } + } + } + if ((N | 0) == 191) { + ja = (k[410] | 0) + ia | 0; + k[410] = ja; + if (ja >>> 0 > (k[411] | 0) >>> 0) k[411] = ja; + ja = k[308] | 0; + do if (!ja) { + ma = k[306] | 0; + if ((ma | 0) == 0 | ha >>> 0 < ma >>> 0) k[306] = ha; + k[414] = ha; + k[415] = ia; + k[417] = 0; + k[311] = k[420]; + k[310] = -1; + ma = 0; + do { + c = 1248 + (ma << 1 << 2) | 0; + k[c + 12 >> 2] = c; + k[c + 8 >> 2] = c; + ma = ma + 1 | 0; + } while ((ma | 0) != 32); + ma = ha + 8 | 0; + c = (ma & 7 | 0) == 0 ? 0 : 0 - ma & 7; + ma = ha + c | 0; + ka = ia + -40 - c | 0; + k[308] = ma; + k[305] = ka; + k[ma + 4 >> 2] = ka | 1; + k[ma + ka + 4 >> 2] = 40; + k[309] = k[424]; + } else { + ka = 1656; + do { + ma = k[ka >> 2] | 0; + c = ka + 4 | 0; + ca = k[c >> 2] | 0; + if ((ha | 0) == (ma + ca | 0)) { + na = ma; + oa = c; + pa = ca; + ra = ka; + N = 201; + break; + } + ka = k[ka + 8 >> 2] | 0; + } while ((ka | 0) != 0); + if ((N | 0) == 201) if (!(k[ra + 12 >> 2] & 8)) if (ja >>> 0 < ha >>> 0 & ja >>> 0 >= na >>> 0) { + k[oa >> 2] = pa + ia; + ka = ja + 8 | 0; + ca = (ka & 7 | 0) == 0 ? 0 : 0 - ka & 7; + ka = ja + ca | 0; + c = ia - ca + (k[305] | 0) | 0; + k[308] = ka; + k[305] = c; + k[ka + 4 >> 2] = c | 1; + k[ka + c + 4 >> 2] = 40; + k[309] = k[424]; + break; + } + c = k[306] | 0; + if (ha >>> 0 < c >>> 0) { + k[306] = ha; + sa = ha; + } else sa = c; + c = ha + ia | 0; + ka = 1656; + while (1) { + if ((k[ka >> 2] | 0) == (c | 0)) { + ua = ka; + va = ka; + N = 209; + break; + } + ka = k[ka + 8 >> 2] | 0; + if (!ka) { + wa = 1656; + break; + } + } + if ((N | 0) == 209) if (!(k[va + 12 >> 2] & 8)) { + k[ua >> 2] = ha; + ka = va + 4 | 0; + k[ka >> 2] = (k[ka >> 2] | 0) + ia; + ka = ha + 8 | 0; + ca = ha + ((ka & 7 | 0) == 0 ? 0 : 0 - ka & 7) | 0; + ka = c + 8 | 0; + ma = c + ((ka & 7 | 0) == 0 ? 0 : 0 - ka & 7) | 0; + ka = ca + y | 0; + ea = ma - ca - y | 0; + k[ca + 4 >> 2] = y | 3; + do if ((ma | 0) == (ja | 0)) { + la = (k[305] | 0) + ea | 0; + k[305] = la; + k[308] = ka; + k[ka + 4 >> 2] = la | 1; + } else { + if ((ma | 0) == (k[307] | 0)) { + la = (k[304] | 0) + ea | 0; + k[304] = la; + k[307] = ka; + k[ka + 4 >> 2] = la | 1; + k[ka + la >> 2] = la; + break; + } + la = k[ma + 4 >> 2] | 0; + if ((la & 3 | 0) == 1) { + ga = la & -8; + fa = la >>> 3; + e : do if (la >>> 0 < 256) { + da = k[ma + 8 >> 2] | 0; + V = k[ma + 12 >> 2] | 0; + $ = 1248 + (fa << 1 << 2) | 0; + do if ((da | 0) != ($ | 0)) { + if (da >>> 0 < sa >>> 0) qa(); + if ((k[da + 12 >> 2] | 0) == (ma | 0)) break; + qa(); + } while (0); + if ((V | 0) == (da | 0)) { + k[302] = k[302] & ~(1 << fa); + break; + } + do if ((V | 0) == ($ | 0)) xa = V + 8 | 0; else { + if (V >>> 0 < sa >>> 0) qa(); + e = V + 8 | 0; + if ((k[e >> 2] | 0) == (ma | 0)) { + xa = e; + break; + } + qa(); + } while (0); + k[da + 12 >> 2] = V; + k[xa >> 2] = da; + } else { + $ = k[ma + 24 >> 2] | 0; + e = k[ma + 12 >> 2] | 0; + do if ((e | 0) == (ma | 0)) { + U = ma + 16 | 0; + aa = U + 4 | 0; + ba = k[aa >> 2] | 0; + if (!ba) { + W = k[U >> 2] | 0; + if (!W) { + ya = 0; + break; + } else { + za = W; + Aa = U; + } + } else { + za = ba; + Aa = aa; + } + while (1) { + aa = za + 20 | 0; + ba = k[aa >> 2] | 0; + if (ba | 0) { + za = ba; + Aa = aa; + continue; + } + aa = za + 16 | 0; + ba = k[aa >> 2] | 0; + if (!ba) { + Ba = za; + Ca = Aa; + break; + } else { + za = ba; + Aa = aa; + } + } + if (Ca >>> 0 < sa >>> 0) qa(); else { + k[Ca >> 2] = 0; + ya = Ba; + break; + } + } else { + aa = k[ma + 8 >> 2] | 0; + if (aa >>> 0 < sa >>> 0) qa(); + ba = aa + 12 | 0; + if ((k[ba >> 2] | 0) != (ma | 0)) qa(); + U = e + 8 | 0; + if ((k[U >> 2] | 0) == (ma | 0)) { + k[ba >> 2] = e; + k[U >> 2] = aa; + ya = e; + break; + } else qa(); + } while (0); + if (!$) break; + e = k[ma + 28 >> 2] | 0; + da = 1512 + (e << 2) | 0; + do if ((ma | 0) == (k[da >> 2] | 0)) { + k[da >> 2] = ya; + if (ya | 0) break; + k[303] = k[303] & ~(1 << e); + break e; + } else { + if ($ >>> 0 < (k[306] | 0) >>> 0) qa(); + V = $ + 16 | 0; + if ((k[V >> 2] | 0) == (ma | 0)) k[V >> 2] = ya; else k[$ + 20 >> 2] = ya; + if (!ya) break e; + } while (0); + e = k[306] | 0; + if (ya >>> 0 < e >>> 0) qa(); + k[ya + 24 >> 2] = $; + da = ma + 16 | 0; + V = k[da >> 2] | 0; + do if (V | 0) if (V >>> 0 < e >>> 0) qa(); else { + k[ya + 16 >> 2] = V; + k[V + 24 >> 2] = ya; + break; + } while (0); + V = k[da + 4 >> 2] | 0; + if (!V) break; + if (V >>> 0 < (k[306] | 0) >>> 0) qa(); else { + k[ya + 20 >> 2] = V; + k[V + 24 >> 2] = ya; + break; + } + } while (0); + Da = ma + ga | 0; + Ea = ga + ea | 0; + } else { + Da = ma; + Ea = ea; + } + fa = Da + 4 | 0; + k[fa >> 2] = k[fa >> 2] & -2; + k[ka + 4 >> 2] = Ea | 1; + k[ka + Ea >> 2] = Ea; + fa = Ea >>> 3; + if (Ea >>> 0 < 256) { + la = 1248 + (fa << 1 << 2) | 0; + V = k[302] | 0; + e = 1 << fa; + do if (!(V & e)) { + k[302] = V | e; + Fa = la + 8 | 0; + Ga = la; + } else { + fa = la + 8 | 0; + $ = k[fa >> 2] | 0; + if ($ >>> 0 >= (k[306] | 0) >>> 0) { + Fa = fa; + Ga = $; + break; + } + qa(); + } while (0); + k[Fa >> 2] = ka; + k[Ga + 12 >> 2] = ka; + k[ka + 8 >> 2] = Ga; + k[ka + 12 >> 2] = la; + break; + } + e = Ea >>> 8; + do if (!e) Ha = 0; else { + if (Ea >>> 0 > 16777215) { + Ha = 31; + break; + } + V = (e + 1048320 | 0) >>> 16 & 8; + ga = e << V; + $ = (ga + 520192 | 0) >>> 16 & 4; + fa = ga << $; + ga = (fa + 245760 | 0) >>> 16 & 2; + aa = 14 - ($ | V | ga) + (fa << ga >>> 15) | 0; + Ha = Ea >>> (aa + 7 | 0) & 1 | aa << 1; + } while (0); + e = 1512 + (Ha << 2) | 0; + k[ka + 28 >> 2] = Ha; + la = ka + 16 | 0; + k[la + 4 >> 2] = 0; + k[la >> 2] = 0; + la = k[303] | 0; + aa = 1 << Ha; + if (!(la & aa)) { + k[303] = la | aa; + k[e >> 2] = ka; + k[ka + 24 >> 2] = e; + k[ka + 12 >> 2] = ka; + k[ka + 8 >> 2] = ka; + break; + } + aa = Ea << ((Ha | 0) == 31 ? 0 : 25 - (Ha >>> 1) | 0); + la = k[e >> 2] | 0; + while (1) { + if ((k[la + 4 >> 2] & -8 | 0) == (Ea | 0)) { + Ia = la; + N = 279; + break; + } + e = la + 16 + (aa >>> 31 << 2) | 0; + ga = k[e >> 2] | 0; + if (!ga) { + Ja = e; + Ka = la; + N = 276; + break; + } else { + aa = aa << 1; + la = ga; + } + } + if ((N | 0) == 276) if (Ja >>> 0 < (k[306] | 0) >>> 0) qa(); else { + k[Ja >> 2] = ka; + k[ka + 24 >> 2] = Ka; + k[ka + 12 >> 2] = ka; + k[ka + 8 >> 2] = ka; + break; + } else if ((N | 0) == 279) { + la = Ia + 8 | 0; + aa = k[la >> 2] | 0; + ga = k[306] | 0; + if (aa >>> 0 >= ga >>> 0 & Ia >>> 0 >= ga >>> 0) { + k[aa + 12 >> 2] = ka; + k[la >> 2] = ka; + k[ka + 8 >> 2] = aa; + k[ka + 12 >> 2] = Ia; + k[ka + 24 >> 2] = 0; + break; + } else qa(); + } + } while (0); + p = ca + 8 | 0; + r = b; + return p | 0; + } else wa = 1656; + while (1) { + ka = k[wa >> 2] | 0; + if (ka >>> 0 <= ja >>> 0) { + ea = ka + (k[wa + 4 >> 2] | 0) | 0; + if (ea >>> 0 > ja >>> 0) { + La = ea; + break; + } + } + wa = k[wa + 8 >> 2] | 0; + } + ca = La + -47 | 0; + ea = ca + 8 | 0; + ka = ca + ((ea & 7 | 0) == 0 ? 0 : 0 - ea & 7) | 0; + ea = ja + 16 | 0; + ca = ka >>> 0 < ea >>> 0 ? ja : ka; + ka = ca + 8 | 0; + ma = ha + 8 | 0; + c = (ma & 7 | 0) == 0 ? 0 : 0 - ma & 7; + ma = ha + c | 0; + aa = ia + -40 - c | 0; + k[308] = ma; + k[305] = aa; + k[ma + 4 >> 2] = aa | 1; + k[ma + aa + 4 >> 2] = 40; + k[309] = k[424]; + aa = ca + 4 | 0; + k[aa >> 2] = 27; + k[ka >> 2] = k[414]; + k[ka + 4 >> 2] = k[415]; + k[ka + 8 >> 2] = k[416]; + k[ka + 12 >> 2] = k[417]; + k[414] = ha; + k[415] = ia; + k[417] = 0; + k[416] = ka; + ka = ca + 24 | 0; + do { + ka = ka + 4 | 0; + k[ka >> 2] = 7; + } while ((ka + 4 | 0) >>> 0 < La >>> 0); + if ((ca | 0) != (ja | 0)) { + ka = ca - ja | 0; + k[aa >> 2] = k[aa >> 2] & -2; + k[ja + 4 >> 2] = ka | 1; + k[ca >> 2] = ka; + ma = ka >>> 3; + if (ka >>> 0 < 256) { + c = 1248 + (ma << 1 << 2) | 0; + la = k[302] | 0; + ga = 1 << ma; + if (!(la & ga)) { + k[302] = la | ga; + Ma = c + 8 | 0; + Na = c; + } else { + ga = c + 8 | 0; + la = k[ga >> 2] | 0; + if (la >>> 0 < (k[306] | 0) >>> 0) qa(); else { + Ma = ga; + Na = la; + } + } + k[Ma >> 2] = ja; + k[Na + 12 >> 2] = ja; + k[ja + 8 >> 2] = Na; + k[ja + 12 >> 2] = c; + break; + } + c = ka >>> 8; + if (!c) Oa = 0; else if (ka >>> 0 > 16777215) Oa = 31; else { + la = (c + 1048320 | 0) >>> 16 & 8; + ga = c << la; + c = (ga + 520192 | 0) >>> 16 & 4; + ma = ga << c; + ga = (ma + 245760 | 0) >>> 16 & 2; + e = 14 - (c | la | ga) + (ma << ga >>> 15) | 0; + Oa = ka >>> (e + 7 | 0) & 1 | e << 1; + } + e = 1512 + (Oa << 2) | 0; + k[ja + 28 >> 2] = Oa; + k[ja + 20 >> 2] = 0; + k[ea >> 2] = 0; + ga = k[303] | 0; + ma = 1 << Oa; + if (!(ga & ma)) { + k[303] = ga | ma; + k[e >> 2] = ja; + k[ja + 24 >> 2] = e; + k[ja + 12 >> 2] = ja; + k[ja + 8 >> 2] = ja; + break; + } + ma = ka << ((Oa | 0) == 31 ? 0 : 25 - (Oa >>> 1) | 0); + ga = k[e >> 2] | 0; + while (1) { + if ((k[ga + 4 >> 2] & -8 | 0) == (ka | 0)) { + Pa = ga; + N = 305; + break; + } + e = ga + 16 + (ma >>> 31 << 2) | 0; + la = k[e >> 2] | 0; + if (!la) { + Ra = e; + Sa = ga; + N = 302; + break; + } else { + ma = ma << 1; + ga = la; + } + } + if ((N | 0) == 302) if (Ra >>> 0 < (k[306] | 0) >>> 0) qa(); else { + k[Ra >> 2] = ja; + k[ja + 24 >> 2] = Sa; + k[ja + 12 >> 2] = ja; + k[ja + 8 >> 2] = ja; + break; + } else if ((N | 0) == 305) { + ga = Pa + 8 | 0; + ma = k[ga >> 2] | 0; + ka = k[306] | 0; + if (ma >>> 0 >= ka >>> 0 & Pa >>> 0 >= ka >>> 0) { + k[ma + 12 >> 2] = ja; + k[ga >> 2] = ja; + k[ja + 8 >> 2] = ma; + k[ja + 12 >> 2] = Pa; + k[ja + 24 >> 2] = 0; + break; + } else qa(); + } + } + } while (0); + ja = k[305] | 0; + if (ja >>> 0 > y >>> 0) { + Pa = ja - y | 0; + k[305] = Pa; + ja = k[308] | 0; + N = ja + y | 0; + k[308] = N; + k[N + 4 >> 2] = Pa | 1; + k[ja + 4 >> 2] = y | 3; + p = ja + 8 | 0; + r = b; + return p | 0; + } + } + ja = Qa() | 0; + k[ja >> 2] = 12; + p = 0; + r = b; + return p | 0; +} + +function fb(a) { + a = a | 0; + var b = 0, c = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, r = 0, s = 0, t = 0, u = 0, v = 0, w = 0, x = 0, y = 0, z = 0, A = 0, B = 0, C = 0, D = 0, E = 0, F = 0, G = 0, H = 0, I = 0, J = 0, K = 0, L = 0; + if (!a) return; + b = a + -8 | 0; + c = k[306] | 0; + if (b >>> 0 < c >>> 0) qa(); + d = k[a + -4 >> 2] | 0; + a = d & 3; + if ((a | 0) == 1) qa(); + e = d & -8; + f = b + e | 0; + do if (!(d & 1)) { + g = k[b >> 2] | 0; + if (!a) return; + h = b + (0 - g) | 0; + i = g + e | 0; + if (h >>> 0 < c >>> 0) qa(); + if ((h | 0) == (k[307] | 0)) { + j = f + 4 | 0; + l = k[j >> 2] | 0; + if ((l & 3 | 0) != 3) { + m = h; + n = i; + break; + } + k[304] = i; + k[j >> 2] = l & -2; + k[h + 4 >> 2] = i | 1; + k[h + i >> 2] = i; + return; + } + l = g >>> 3; + if (g >>> 0 < 256) { + g = k[h + 8 >> 2] | 0; + j = k[h + 12 >> 2] | 0; + o = 1248 + (l << 1 << 2) | 0; + if ((g | 0) != (o | 0)) { + if (g >>> 0 < c >>> 0) qa(); + if ((k[g + 12 >> 2] | 0) != (h | 0)) qa(); + } + if ((j | 0) == (g | 0)) { + k[302] = k[302] & ~(1 << l); + m = h; + n = i; + break; + } + if ((j | 0) == (o | 0)) p = j + 8 | 0; else { + if (j >>> 0 < c >>> 0) qa(); + o = j + 8 | 0; + if ((k[o >> 2] | 0) == (h | 0)) p = o; else qa(); + } + k[g + 12 >> 2] = j; + k[p >> 2] = g; + m = h; + n = i; + break; + } + g = k[h + 24 >> 2] | 0; + j = k[h + 12 >> 2] | 0; + do if ((j | 0) == (h | 0)) { + o = h + 16 | 0; + l = o + 4 | 0; + q = k[l >> 2] | 0; + if (!q) { + r = k[o >> 2] | 0; + if (!r) { + s = 0; + break; + } else { + t = r; + u = o; + } + } else { + t = q; + u = l; + } + while (1) { + l = t + 20 | 0; + q = k[l >> 2] | 0; + if (q | 0) { + t = q; + u = l; + continue; + } + l = t + 16 | 0; + q = k[l >> 2] | 0; + if (!q) { + v = t; + w = u; + break; + } else { + t = q; + u = l; + } + } + if (w >>> 0 < c >>> 0) qa(); else { + k[w >> 2] = 0; + s = v; + break; + } + } else { + l = k[h + 8 >> 2] | 0; + if (l >>> 0 < c >>> 0) qa(); + q = l + 12 | 0; + if ((k[q >> 2] | 0) != (h | 0)) qa(); + o = j + 8 | 0; + if ((k[o >> 2] | 0) == (h | 0)) { + k[q >> 2] = j; + k[o >> 2] = l; + s = j; + break; + } else qa(); + } while (0); + if (!g) { + m = h; + n = i; + } else { + j = k[h + 28 >> 2] | 0; + l = 1512 + (j << 2) | 0; + if ((h | 0) == (k[l >> 2] | 0)) { + k[l >> 2] = s; + if (!s) { + k[303] = k[303] & ~(1 << j); + m = h; + n = i; + break; + } + } else { + if (g >>> 0 < (k[306] | 0) >>> 0) qa(); + j = g + 16 | 0; + if ((k[j >> 2] | 0) == (h | 0)) k[j >> 2] = s; else k[g + 20 >> 2] = s; + if (!s) { + m = h; + n = i; + break; + } + } + j = k[306] | 0; + if (s >>> 0 < j >>> 0) qa(); + k[s + 24 >> 2] = g; + l = h + 16 | 0; + o = k[l >> 2] | 0; + do if (o | 0) if (o >>> 0 < j >>> 0) qa(); else { + k[s + 16 >> 2] = o; + k[o + 24 >> 2] = s; + break; + } while (0); + o = k[l + 4 >> 2] | 0; + if (!o) { + m = h; + n = i; + } else if (o >>> 0 < (k[306] | 0) >>> 0) qa(); else { + k[s + 20 >> 2] = o; + k[o + 24 >> 2] = s; + m = h; + n = i; + break; + } + } + } else { + m = b; + n = e; + } while (0); + if (m >>> 0 >= f >>> 0) qa(); + e = f + 4 | 0; + b = k[e >> 2] | 0; + if (!(b & 1)) qa(); + if (!(b & 2)) { + if ((f | 0) == (k[308] | 0)) { + s = (k[305] | 0) + n | 0; + k[305] = s; + k[308] = m; + k[m + 4 >> 2] = s | 1; + if ((m | 0) != (k[307] | 0)) return; + k[307] = 0; + k[304] = 0; + return; + } + if ((f | 0) == (k[307] | 0)) { + s = (k[304] | 0) + n | 0; + k[304] = s; + k[307] = m; + k[m + 4 >> 2] = s | 1; + k[m + s >> 2] = s; + return; + } + s = (b & -8) + n | 0; + c = b >>> 3; + do if (b >>> 0 < 256) { + v = k[f + 8 >> 2] | 0; + w = k[f + 12 >> 2] | 0; + u = 1248 + (c << 1 << 2) | 0; + if ((v | 0) != (u | 0)) { + if (v >>> 0 < (k[306] | 0) >>> 0) qa(); + if ((k[v + 12 >> 2] | 0) != (f | 0)) qa(); + } + if ((w | 0) == (v | 0)) { + k[302] = k[302] & ~(1 << c); + break; + } + if ((w | 0) == (u | 0)) x = w + 8 | 0; else { + if (w >>> 0 < (k[306] | 0) >>> 0) qa(); + u = w + 8 | 0; + if ((k[u >> 2] | 0) == (f | 0)) x = u; else qa(); + } + k[v + 12 >> 2] = w; + k[x >> 2] = v; + } else { + v = k[f + 24 >> 2] | 0; + w = k[f + 12 >> 2] | 0; + do if ((w | 0) == (f | 0)) { + u = f + 16 | 0; + t = u + 4 | 0; + p = k[t >> 2] | 0; + if (!p) { + a = k[u >> 2] | 0; + if (!a) { + y = 0; + break; + } else { + z = a; + A = u; + } + } else { + z = p; + A = t; + } + while (1) { + t = z + 20 | 0; + p = k[t >> 2] | 0; + if (p | 0) { + z = p; + A = t; + continue; + } + t = z + 16 | 0; + p = k[t >> 2] | 0; + if (!p) { + B = z; + C = A; + break; + } else { + z = p; + A = t; + } + } + if (C >>> 0 < (k[306] | 0) >>> 0) qa(); else { + k[C >> 2] = 0; + y = B; + break; + } + } else { + t = k[f + 8 >> 2] | 0; + if (t >>> 0 < (k[306] | 0) >>> 0) qa(); + p = t + 12 | 0; + if ((k[p >> 2] | 0) != (f | 0)) qa(); + u = w + 8 | 0; + if ((k[u >> 2] | 0) == (f | 0)) { + k[p >> 2] = w; + k[u >> 2] = t; + y = w; + break; + } else qa(); + } while (0); + if (v | 0) { + w = k[f + 28 >> 2] | 0; + i = 1512 + (w << 2) | 0; + if ((f | 0) == (k[i >> 2] | 0)) { + k[i >> 2] = y; + if (!y) { + k[303] = k[303] & ~(1 << w); + break; + } + } else { + if (v >>> 0 < (k[306] | 0) >>> 0) qa(); + w = v + 16 | 0; + if ((k[w >> 2] | 0) == (f | 0)) k[w >> 2] = y; else k[v + 20 >> 2] = y; + if (!y) break; + } + w = k[306] | 0; + if (y >>> 0 < w >>> 0) qa(); + k[y + 24 >> 2] = v; + i = f + 16 | 0; + h = k[i >> 2] | 0; + do if (h | 0) if (h >>> 0 < w >>> 0) qa(); else { + k[y + 16 >> 2] = h; + k[h + 24 >> 2] = y; + break; + } while (0); + h = k[i + 4 >> 2] | 0; + if (h | 0) if (h >>> 0 < (k[306] | 0) >>> 0) qa(); else { + k[y + 20 >> 2] = h; + k[h + 24 >> 2] = y; + break; + } + } + } while (0); + k[m + 4 >> 2] = s | 1; + k[m + s >> 2] = s; + if ((m | 0) == (k[307] | 0)) { + k[304] = s; + return; + } else D = s; + } else { + k[e >> 2] = b & -2; + k[m + 4 >> 2] = n | 1; + k[m + n >> 2] = n; + D = n; + } + n = D >>> 3; + if (D >>> 0 < 256) { + b = 1248 + (n << 1 << 2) | 0; + e = k[302] | 0; + s = 1 << n; + if (!(e & s)) { + k[302] = e | s; + E = b + 8 | 0; + F = b; + } else { + s = b + 8 | 0; + e = k[s >> 2] | 0; + if (e >>> 0 < (k[306] | 0) >>> 0) qa(); else { + E = s; + F = e; + } + } + k[E >> 2] = m; + k[F + 12 >> 2] = m; + k[m + 8 >> 2] = F; + k[m + 12 >> 2] = b; + return; + } + b = D >>> 8; + if (!b) G = 0; else if (D >>> 0 > 16777215) G = 31; else { + F = (b + 1048320 | 0) >>> 16 & 8; + E = b << F; + b = (E + 520192 | 0) >>> 16 & 4; + e = E << b; + E = (e + 245760 | 0) >>> 16 & 2; + s = 14 - (b | F | E) + (e << E >>> 15) | 0; + G = D >>> (s + 7 | 0) & 1 | s << 1; + } + s = 1512 + (G << 2) | 0; + k[m + 28 >> 2] = G; + k[m + 20 >> 2] = 0; + k[m + 16 >> 2] = 0; + E = k[303] | 0; + e = 1 << G; + do if (!(E & e)) { + k[303] = E | e; + k[s >> 2] = m; + k[m + 24 >> 2] = s; + k[m + 12 >> 2] = m; + k[m + 8 >> 2] = m; + } else { + F = D << ((G | 0) == 31 ? 0 : 25 - (G >>> 1) | 0); + b = k[s >> 2] | 0; + while (1) { + if ((k[b + 4 >> 2] & -8 | 0) == (D | 0)) { + H = b; + I = 130; + break; + } + n = b + 16 + (F >>> 31 << 2) | 0; + y = k[n >> 2] | 0; + if (!y) { + J = n; + K = b; + I = 127; + break; + } else { + F = F << 1; + b = y; + } + } + if ((I | 0) == 127) if (J >>> 0 < (k[306] | 0) >>> 0) qa(); else { + k[J >> 2] = m; + k[m + 24 >> 2] = K; + k[m + 12 >> 2] = m; + k[m + 8 >> 2] = m; + break; + } else if ((I | 0) == 130) { + b = H + 8 | 0; + F = k[b >> 2] | 0; + i = k[306] | 0; + if (F >>> 0 >= i >>> 0 & H >>> 0 >= i >>> 0) { + k[F + 12 >> 2] = m; + k[b >> 2] = m; + k[m + 8 >> 2] = F; + k[m + 12 >> 2] = H; + k[m + 24 >> 2] = 0; + break; + } else qa(); + } + } while (0); + m = (k[310] | 0) + -1 | 0; + k[310] = m; + if (!m) L = 1664; else return; + while (1) { + m = k[L >> 2] | 0; + if (!m) break; else L = m + 8 | 0; + } + k[310] = -1; + return; +} + +function Ra(a, b, c) { + a = a | 0; + b = b | 0; + c = c | 0; + var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, s = 0, t = 0, u = 0, v = 0, w = 0, x = 0, y = 0, z = 0; + d = r; + r = r + 48 | 0; + e = d + 16 | 0; + f = d; + g = d + 32 | 0; + h = a + 28 | 0; + i = k[h >> 2] | 0; + k[g >> 2] = i; + j = a + 20 | 0; + l = (k[j >> 2] | 0) - i | 0; + k[g + 4 >> 2] = l; + k[g + 8 >> 2] = b; + k[g + 12 >> 2] = c; + b = a + 60 | 0; + i = a + 44 | 0; + m = g; + g = 2; + n = l + c | 0; + while (1) { + if (!(k[290] | 0)) { + k[e >> 2] = k[b >> 2]; + k[e + 4 >> 2] = m; + k[e + 8 >> 2] = g; + o = Pa(ya(146, e | 0) | 0) | 0; + } else { + ra(1, a | 0); + k[f >> 2] = k[b >> 2]; + k[f + 4 >> 2] = m; + k[f + 8 >> 2] = g; + l = Pa(ya(146, f | 0) | 0) | 0; + oa(0); + o = l; + } + if ((n | 0) == (o | 0)) { + p = 6; + break; + } + if ((o | 0) < 0) { + q = m; + s = g; + p = 8; + break; + } + l = n - o | 0; + t = k[m + 4 >> 2] | 0; + if (o >>> 0 > t >>> 0) { + u = k[i >> 2] | 0; + k[h >> 2] = u; + k[j >> 2] = u; + v = k[m + 12 >> 2] | 0; + w = o - t | 0; + x = m + 8 | 0; + y = g + -1 | 0; + } else if ((g | 0) == 2) { + k[h >> 2] = (k[h >> 2] | 0) + o; + v = t; + w = o; + x = m; + y = 2; + } else { + v = t; + w = o; + x = m; + y = g; + } + k[x >> 2] = (k[x >> 2] | 0) + w; + k[x + 4 >> 2] = v - w; + m = x; + g = y; + n = l; + } + if ((p | 0) == 6) { + n = k[i >> 2] | 0; + k[a + 16 >> 2] = n + (k[a + 48 >> 2] | 0); + i = n; + k[h >> 2] = i; + k[j >> 2] = i; + z = c; + } else if ((p | 0) == 8) { + k[a + 16 >> 2] = 0; + k[h >> 2] = 0; + k[j >> 2] = 0; + k[a >> 2] = k[a >> 2] | 32; + if ((s | 0) == 2) z = 0; else z = c - (k[q + 4 >> 2] | 0) | 0; + } + r = d; + return z | 0; +} + +function Wa(a, b, c) { + a = a | 0; + b = b | 0; + c = c | 0; + var d = 0, e = 0, f = 0, g = 0, h = 0, j = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0; + d = c + 16 | 0; + e = k[d >> 2] | 0; + if (!e) if (!(Xa(c) | 0)) { + f = k[d >> 2] | 0; + g = 5; + } else h = 0; else { + f = e; + g = 5; + } + a : do if ((g | 0) == 5) { + e = c + 20 | 0; + d = k[e >> 2] | 0; + j = d; + if ((f - d | 0) >>> 0 < b >>> 0) { + h = Ca[k[c + 36 >> 2] & 3](c, a, b) | 0; + break; + } + b : do if ((i[c + 75 >> 0] | 0) > -1) { + d = b; + while (1) { + if (!d) { + l = b; + m = a; + n = j; + o = 0; + break b; + } + p = d + -1 | 0; + if ((i[a + p >> 0] | 0) == 10) { + q = d; + break; + } else d = p; + } + if ((Ca[k[c + 36 >> 2] & 3](c, a, q) | 0) >>> 0 < q >>> 0) { + h = q; + break a; + } + l = b - q | 0; + m = a + q | 0; + n = k[e >> 2] | 0; + o = q; + } else { + l = b; + m = a; + n = j; + o = 0; + } while (0); + jb(n | 0, m | 0, l | 0) | 0; + k[e >> 2] = (k[e >> 2] | 0) + l; + h = o + l | 0; + } while (0); + return h | 0; +} + +function Za(a) { + a = a | 0; + var b = 0, c = 0, d = 0, e = 0, f = 0, g = 0, h = 0, j = 0, l = 0, m = 0; + b = a; + a : do if (!(b & 3)) { + c = a; + d = 4; + } else { + e = a; + f = b; + while (1) { + if (!(i[e >> 0] | 0)) { + g = f; + break a; + } + h = e + 1 | 0; + f = h; + if (!(f & 3)) { + c = h; + d = 4; + break; + } else e = h; + } + } while (0); + if ((d | 0) == 4) { + d = c; + while (1) { + c = k[d >> 2] | 0; + if (!((c & -2139062144 ^ -2139062144) & c + -16843009)) d = d + 4 | 0; else { + j = c; + l = d; + break; + } + } + if (!((j & 255) << 24 >> 24)) m = l; else { + j = l; + while (1) { + l = j + 1 | 0; + if (!(i[l >> 0] | 0)) { + m = l; + break; + } else j = l; + } + } + g = m; + } + return g - b | 0; +} + +function _a(a) { + a = a | 0; + var b = 0, c = 0, d = 0, e = 0, f = 0, g = 0, h = 0; + do if (!a) { + if (!(k[285] | 0)) b = 0; else b = _a(k[285] | 0) | 0; + pa(1188); + c = k[296] | 0; + if (!c) d = b; else { + e = c; + c = b; + while (1) { + if ((k[e + 76 >> 2] | 0) > -1) f = Ya(e) | 0; else f = 0; + if ((k[e + 20 >> 2] | 0) >>> 0 > (k[e + 28 >> 2] | 0) >>> 0) g = $a(e) | 0 | c; else g = c; + if (f | 0) Ta(e); + e = k[e + 56 >> 2] | 0; + if (!e) { + d = g; + break; + } else c = g; + } + } + xa(1188); + h = d; + } else { + if ((k[a + 76 >> 2] | 0) <= -1) { + h = $a(a) | 0; + break; + } + c = (Ya(a) | 0) == 0; + e = $a(a) | 0; + if (c) h = e; else { + Ta(a); + h = e; + } + } while (0); + return h | 0; +} + +function ab(a, b) { + a = a | 0; + b = b | 0; + var c = 0, d = 0, e = 0, f = 0, g = 0, h = 0, j = 0, m = 0, n = 0; + c = r; + r = r + 16 | 0; + d = c; + e = b & 255; + i[d >> 0] = e; + f = a + 16 | 0; + g = k[f >> 2] | 0; + if (!g) if (!(Xa(a) | 0)) { + h = k[f >> 2] | 0; + j = 4; + } else m = -1; else { + h = g; + j = 4; + } + do if ((j | 0) == 4) { + g = a + 20 | 0; + f = k[g >> 2] | 0; + if (f >>> 0 < h >>> 0) { + n = b & 255; + if ((n | 0) != (i[a + 75 >> 0] | 0)) { + k[g >> 2] = f + 1; + i[f >> 0] = e; + m = n; + break; + } + } + if ((Ca[k[a + 36 >> 2] & 3](a, d, 1) | 0) == 1) m = l[d >> 0] | 0; else m = -1; + } while (0); + r = c; + return m | 0; +} + +function $a(a) { + a = a | 0; + var b = 0, c = 0, d = 0, e = 0, f = 0, g = 0, h = 0; + b = a + 20 | 0; + c = a + 28 | 0; + if ((k[b >> 2] | 0) >>> 0 > (k[c >> 2] | 0) >>> 0) { + Ca[k[a + 36 >> 2] & 3](a, 0, 0) | 0; + if (!(k[b >> 2] | 0)) d = -1; else e = 3; + } else e = 3; + if ((e | 0) == 3) { + e = a + 4 | 0; + f = k[e >> 2] | 0; + g = a + 8 | 0; + h = k[g >> 2] | 0; + if (f >>> 0 < h >>> 0) Ca[k[a + 40 >> 2] & 3](a, f - h | 0, 1) | 0; + k[a + 16 >> 2] = 0; + k[c >> 2] = 0; + k[b >> 2] = 0; + k[g >> 2] = 0; + k[e >> 2] = 0; + d = 0; + } + return d | 0; +} + +function jb(a, b, c) { + a = a | 0; + b = b | 0; + c = c | 0; + var d = 0; + if ((c | 0) >= 4096) return va(a | 0, b | 0, c | 0) | 0; + d = a | 0; + if ((a & 3) == (b & 3)) { + while (a & 3) { + if (!c) return d | 0; + i[a >> 0] = i[b >> 0] | 0; + a = a + 1 | 0; + b = b + 1 | 0; + c = c - 1 | 0; + } + while ((c | 0) >= 4) { + k[a >> 2] = k[b >> 2]; + a = a + 4 | 0; + b = b + 4 | 0; + c = c - 4 | 0; + } + } + while ((c | 0) > 0) { + i[a >> 0] = i[b >> 0] | 0; + a = a + 1 | 0; + b = b + 1 | 0; + c = c - 1 | 0; + } + return d | 0; +} + +function gb() {} +function hb(a, b, c) { + a = a | 0; + b = b | 0; + c = c | 0; + var d = 0, e = 0, f = 0, g = 0; + d = a + c | 0; + if ((c | 0) >= 20) { + b = b & 255; + e = a & 3; + f = b | b << 8 | b << 16 | b << 24; + g = d & ~3; + if (e) { + e = a + 4 - e | 0; + while ((a | 0) < (e | 0)) { + i[a >> 0] = b; + a = a + 1 | 0; + } + } + while ((a | 0) < (g | 0)) { + k[a >> 2] = f; + a = a + 4 | 0; + } + } + while ((a | 0) < (d | 0)) { + i[a >> 0] = b; + a = a + 1 | 0; + } + return a - c | 0; +} + +function db(a) { + a = a | 0; + var b = 0, c = 0, d = 0, e = 0, f = 0; + b = k[256] | 0; + if ((k[b + 76 >> 2] | 0) > -1) c = Ya(b) | 0; else c = 0; + do if ((cb(a, b) | 0) < 0) d = 1; else { + if ((i[b + 75 >> 0] | 0) != 10) { + e = b + 20 | 0; + f = k[e >> 2] | 0; + if (f >>> 0 < (k[b + 16 >> 2] | 0) >>> 0) { + k[e >> 2] = f + 1; + i[f >> 0] = 10; + d = 0; + break; + } + } + d = (ab(b, 10) | 0) < 0; + } while (0); + if (c | 0) Ta(b); + return d << 31 >> 31 | 0; +} + +function Xa(a) { + a = a | 0; + var b = 0, c = 0, d = 0; + b = a + 74 | 0; + c = i[b >> 0] | 0; + i[b >> 0] = c + 255 | c; + c = k[a >> 2] | 0; + if (!(c & 8)) { + k[a + 8 >> 2] = 0; + k[a + 4 >> 2] = 0; + b = k[a + 44 >> 2] | 0; + k[a + 28 >> 2] = b; + k[a + 20 >> 2] = b; + k[a + 16 >> 2] = b + (k[a + 48 >> 2] | 0); + d = 0; + } else { + k[a >> 2] = c | 32; + d = -1; + } + return d | 0; +} + +function bb(a, b, c, d) { + a = a | 0; + b = b | 0; + c = c | 0; + d = d | 0; + var e = 0, f = 0, g = 0, h = 0, i = 0; + e = ga(c, b) | 0; + if ((k[d + 76 >> 2] | 0) > -1) { + f = (Ya(d) | 0) == 0; + g = Wa(a, e, d) | 0; + if (f) h = g; else { + Ta(d); + h = g; + } + } else h = Wa(a, e, d) | 0; + if ((h | 0) == (e | 0)) i = c; else i = (h >>> 0) / (b >>> 0) | 0; + return i | 0; +} + +function Ua(a, b, c) { + a = a | 0; + b = b | 0; + c = c | 0; + var d = 0, e = 0, f = 0, g = 0; + d = r; + r = r + 32 | 0; + e = d; + f = d + 20 | 0; + k[e >> 2] = k[a + 60 >> 2]; + k[e + 4 >> 2] = 0; + k[e + 8 >> 2] = b; + k[e + 12 >> 2] = f; + k[e + 16 >> 2] = c; + if ((Pa(ua(140, e | 0) | 0) | 0) < 0) { + k[f >> 2] = -1; + g = -1; + } else g = k[f >> 2] | 0; + r = d; + return g | 0; +} + +function Va(a, b, c) { + a = a | 0; + b = b | 0; + c = c | 0; + var d = 0, e = 0; + d = r; + r = r + 80 | 0; + e = d; + k[a + 36 >> 2] = 3; + if (!(k[a >> 2] & 64)) { + k[e >> 2] = k[a + 60 >> 2]; + k[e + 4 >> 2] = 21505; + k[e + 8 >> 2] = d + 12; + if (wa(54, e | 0) | 0) i[a + 75 >> 0] = -1; + } + e = Ra(a, b, c) | 0; + r = d; + return e | 0; +} + +function Ka(a) { + a = a | 0; + i[t >> 0] = i[a >> 0]; + i[t + 1 >> 0] = i[a + 1 >> 0]; + i[t + 2 >> 0] = i[a + 2 >> 0]; + i[t + 3 >> 0] = i[a + 3 >> 0]; + i[t + 4 >> 0] = i[a + 4 >> 0]; + i[t + 5 >> 0] = i[a + 5 >> 0]; + i[t + 6 >> 0] = i[a + 6 >> 0]; + i[t + 7 >> 0] = i[a + 7 >> 0]; +} + +function Oa(a) { + a = a | 0; + var b = 0, c = 0; + b = r; + r = r + 16 | 0; + c = b; + k[c >> 2] = k[a + 60 >> 2]; + a = Pa(sa(6, c | 0) | 0) | 0; + r = b; + return a | 0; +} + +function Pa(a) { + a = a | 0; + var b = 0, c = 0; + if (a >>> 0 > 4294963200) { + b = Qa() | 0; + k[b >> 2] = 0 - a; + c = -1; + } else c = a; + return c | 0; +} + +function Ja(a) { + a = a | 0; + i[t >> 0] = i[a >> 0]; + i[t + 1 >> 0] = i[a + 1 >> 0]; + i[t + 2 >> 0] = i[a + 2 >> 0]; + i[t + 3 >> 0] = i[a + 3 >> 0]; +} + +function Qa() { + var a = 0, b = 0; + if (!(k[290] | 0)) a = 1204; else { + b = (ib() | 0) + 64 | 0; + a = k[b >> 2] | 0; + } + return a | 0; +} + +function lb(a, b, c, d) { + a = a | 0; + b = b | 0; + c = c | 0; + d = d | 0; + return Ca[a & 3](b | 0, c | 0, d | 0) | 0; +} +function Ea(a) { + a = a | 0; + var b = 0; + b = r; + r = r + a | 0; + r = r + 15 & -16; + return b | 0; +} + +function cb(a, b) { + a = a | 0; + b = b | 0; + return (bb(a, Za(a) | 0, 1, b) | 0) + -1 | 0; +} + +function ob(a, b, c) { + a = a | 0; + b = b | 0; + c = c | 0; + ja(1); + return 0; +} + +function Ia(a, b) { + a = a | 0; + b = b | 0; + if (!v) { + v = a; + w = b; + } +} + +function kb(a, b) { + a = a | 0; + b = b | 0; + return Ba[a & 1](b | 0) | 0; +} + +function Sa(a) { + a = a | 0; + if (!(k[a + 68 >> 2] | 0)) Ta(a); + return; +} + +function mb(a, b) { + a = a | 0; + b = b | 0; + Da[a & 1](b | 0); +} + +function Ha(a, b) { + a = a | 0; + b = b | 0; + r = a; + s = b; +} + +function nb(a) { + a = a | 0; + ja(0); + return 0; +} + +function Na() { + db(1144) | 0; + return 0; +} + +function Ya(a) { + a = a | 0; + return 0; +} + +function Ta(a) { + a = a | 0; + return; +} + +function pb(a) { + a = a | 0; + ja(2); +} + +function La(a) { + a = a | 0; + K = a; +} + +function Ga(a) { + a = a | 0; + r = a; +} + +function Ma() { + return K | 0; +} + +function Fa() { + return r | 0; +} + +function ib() { + return 0; +} + +// EMSCRIPTEN_END_FUNCS + + var Ba = [ nb, Oa ]; + var Ca = [ ob, Va, Ua, Ra ]; + var Da = [ pb, Sa ]; + return { + _free: fb, + _main: Na, + _pthread_self: ib, + _memset: hb, + _malloc: eb, + _memcpy: jb, + _fflush: _a, + ___errno_location: Qa, + runPostSets: gb, + _emscripten_replace_memory: Aa, + stackAlloc: Ea, + stackSave: Fa, + stackRestore: Ga, + establishStackSpace: Ha, + setThrew: Ia, + setTempRet0: La, + getTempRet0: Ma, + dynCall_ii: kb, + dynCall_iiii: lb, + dynCall_vi: mb + }; +}) + + +; \ No newline at end of file diff --git a/src/binaryen/test/memorygrowth.fromasm b/src/binaryen/test/memorygrowth.fromasm new file mode 100644 index 0000000000..7345d440e0 --- /dev/null +++ b/src/binaryen/test/memorygrowth.fromasm @@ -0,0 +1,9821 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (import "env" "STACKTOP" (global $r$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $s$asm2wasm$import i32)) + (import "env" "abort" (func $ja (param i32))) + (import "env" "_pthread_cleanup_pop" (func $oa (param i32))) + (import "env" "___lock" (func $pa (param i32))) + (import "env" "_abort" (func $qa)) + (import "env" "_pthread_cleanup_push" (func $ra (param i32 i32))) + (import "env" "___syscall6" (func $sa (param i32 i32) (result i32))) + (import "env" "_sbrk" (func $ta (param i32) (result i32))) + (import "env" "___syscall140" (func $ua (param i32 i32) (result i32))) + (import "env" "_emscripten_memcpy_big" (func $va (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $wa (param i32 i32) (result i32))) + (import "env" "___unlock" (func $xa (param i32))) + (import "env" "___syscall146" (func $ya (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 8 8 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $r (mut i32) (get_global $r$asm2wasm$import)) + (global $s (mut i32) (get_global $s$asm2wasm$import)) + (global $v (mut i32) (i32.const 0)) + (global $w (mut i32) (i32.const 0)) + (global $K (mut i32) (i32.const 0)) + (elem (get_global $tableBase) $nb $Oa $ob $Va $Ua $Ra $pb $Sa) + (data (get_global $memoryBase) "memorygrowth.asm.js") + (export "_free" (func $fb)) + (export "_main" (func $Na)) + (export "_pthread_self" (func $ib)) + (export "_memset" (func $hb)) + (export "_malloc" (func $eb)) + (export "_memcpy" (func $jb)) + (export "_fflush" (func $_a)) + (export "___errno_location" (func $Qa)) + (export "runPostSets" (func $gb)) + (export "stackAlloc" (func $Ea)) + (export "stackSave" (func $Fa)) + (export "stackRestore" (func $Ga)) + (export "establishStackSpace" (func $Ha)) + (export "setThrew" (func $Ia)) + (export "setTempRet0" (func $La)) + (export "getTempRet0" (func $Ma)) + (export "dynCall_ii" (func $kb)) + (export "dynCall_iiii" (func $lb)) + (export "dynCall_vi" (func $mb)) + (export "__growWasmMemory" (func $__growWasmMemory)) + (func $eb (; 12 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (local $47 i32) + (local $48 i32) + (local $49 i32) + (local $50 i32) + (local $51 i32) + (local $52 i32) + (local $53 i32) + (local $54 i32) + (block $folding-inner0 + (set_local $25 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 16) + ) + ) + (set_local $13 + (get_local $25) + ) + (block $do-once + (if + (i32.lt_u + (get_local $0) + (i32.const 245) + ) + (block + (if + (i32.and + (tee_local $5 + (i32.shr_u + (tee_local $4 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $0 + (i32.shr_u + (tee_local $3 + (select + (i32.const 16) + (i32.and + (i32.add + (get_local $0) + (i32.const 11) + ) + (i32.const -8) + ) + (i32.lt_u + (get_local $0) + (i32.const 11) + ) + ) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 3) + ) + (block + (set_local $6 + (i32.load + (tee_local $3 + (i32.add + (tee_local $12 + (i32.load + (tee_local $14 + (i32.add + (tee_local $8 + (i32.add + (i32.shl + (tee_local $0 + (i32.add + (i32.xor + (i32.and + (get_local $5) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $0) + ) + ) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $8) + (get_local $6) + ) + (i32.store + (i32.const 1208) + (i32.and + (get_local $4) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $0) + ) + (i32.const -1) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + ) + (get_local $12) + ) + (block + (i32.store + (get_local $7) + (get_local $8) + ) + (i32.store + (get_local $14) + (get_local $6) + ) + ) + (call $qa) + ) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.or + (tee_local $6 + (i32.shl + (get_local $0) + (i32.const 3) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $14 + (i32.add + (i32.add + (get_local $12) + (get_local $6) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $14) + ) + (i32.const 1) + ) + ) + (set_global $r + (get_local $25) + ) + (return + (get_local $3) + ) + ) + ) + (if + (i32.gt_u + (get_local $3) + (tee_local $14 + (i32.load + (i32.const 1216) + ) + ) + ) + (block + (if + (get_local $5) + (block + (set_local $8 + (i32.and + (i32.shr_u + (tee_local $6 + (i32.add + (i32.and + (tee_local $8 + (i32.and + (i32.shl + (get_local $5) + (get_local $0) + ) + (i32.or + (tee_local $6 + (i32.shl + (i32.const 2) + (get_local $0) + ) + ) + (i32.sub + (i32.const 0) + (get_local $6) + ) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $8) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $8 + (i32.load + (tee_local $7 + (i32.add + (tee_local $9 + (i32.load + (tee_local $12 + (i32.add + (tee_local $1 + (i32.add + (i32.shl + (tee_local $16 + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $6 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $6) + (get_local $8) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $8) + ) + (tee_local $7 + (i32.and + (i32.shr_u + (tee_local $9 + (i32.shr_u + (get_local $7) + (get_local $6) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $9 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $9) + (get_local $7) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $12 + (i32.shr_u + (get_local $1) + (get_local $9) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $12) + (get_local $1) + ) + ) + ) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $1) + (get_local $8) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (get_local $4) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $16) + ) + (i32.const -1) + ) + ) + ) + (set_local $34 + (get_local $14) + ) + ) + (block + (if + (i32.lt_u + (get_local $8) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $6 + (i32.add + (get_local $8) + (i32.const 12) + ) + ) + ) + (get_local $9) + ) + (block + (i32.store + (get_local $6) + (get_local $1) + ) + (i32.store + (get_local $12) + (get_local $8) + ) + (set_local $34 + (i32.load + (i32.const 1216) + ) + ) + ) + (call $qa) + ) + ) + ) + (i32.store offset=4 + (get_local $9) + (i32.or + (get_local $3) + (i32.const 3) + ) + ) + (i32.store offset=4 + (tee_local $12 + (i32.add + (get_local $9) + (get_local $3) + ) + ) + (i32.or + (tee_local $8 + (i32.sub + (i32.shl + (get_local $16) + (i32.const 3) + ) + (get_local $3) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $12) + (get_local $8) + ) + (get_local $8) + ) + (if + (get_local $34) + (block + (set_local $1 + (i32.load + (i32.const 1228) + ) + ) + (set_local $4 + (i32.add + (i32.shl + (tee_local $14 + (i32.shr_u + (get_local $34) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (if + (i32.and + (tee_local $0 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $5 + (i32.shl + (i32.const 1) + (get_local $14) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $5 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $40 + (get_local $5) + ) + (set_local $35 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $0) + (get_local $5) + ) + ) + (set_local $40 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (set_local $35 + (get_local $4) + ) + ) + ) + (i32.store + (get_local $40) + (get_local $1) + ) + (i32.store offset=12 + (get_local $35) + (get_local $1) + ) + (i32.store offset=8 + (get_local $1) + (get_local $35) + ) + (i32.store offset=12 + (get_local $1) + (get_local $4) + ) + ) + ) + (i32.store + (i32.const 1216) + (get_local $8) + ) + (i32.store + (i32.const 1228) + (get_local $12) + ) + (set_global $r + (get_local $25) + ) + (return + (get_local $7) + ) + ) + ) + (if + (tee_local $12 + (i32.load + (i32.const 1212) + ) + ) + (block + (set_local $12 + (i32.and + (i32.shr_u + (tee_local $8 + (i32.add + (i32.and + (get_local $12) + (i32.sub + (i32.const 0) + (get_local $12) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $0 + (i32.sub + (i32.and + (i32.load offset=4 + (tee_local $14 + (i32.load + (i32.add + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $8 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $8) + (get_local $12) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $12) + ) + (tee_local $4 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $4) + (get_local $8) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $0 + (i32.shr_u + (get_local $1) + (get_local $4) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $5 + (i32.shr_u + (get_local $0) + (get_local $1) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $5) + (get_local $0) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + ) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $5 + (get_local $14) + ) + (set_local $1 + (get_local $14) + ) + (loop $while-in + (block $while-out + (if + (tee_local $14 + (i32.load offset=16 + (get_local $5) + ) + ) + (set_local $6 + (get_local $14) + ) + (if + (tee_local $4 + (i32.load offset=20 + (get_local $5) + ) + ) + (set_local $6 + (get_local $4) + ) + (block + (set_local $6 + (get_local $0) + ) + (set_local $2 + (get_local $1) + ) + (br $while-out) + ) + ) + ) + (set_local $4 + (i32.lt_u + (tee_local $14 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $6) + ) + (i32.const -8) + ) + (get_local $3) + ) + ) + (get_local $0) + ) + ) + (set_local $0 + (select + (get_local $14) + (get_local $0) + (get_local $4) + ) + ) + (set_local $5 + (get_local $6) + ) + (set_local $1 + (select + (get_local $6) + (get_local $1) + (get_local $4) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (get_local $2) + (tee_local $1 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (if + (i32.ge_u + (get_local $2) + (tee_local $5 + (i32.add + (get_local $2) + (get_local $3) + ) + ) + ) + (call $qa) + ) + (set_local $0 + (i32.load offset=24 + (get_local $2) + ) + ) + (block $do-once4 + (if + (i32.eq + (tee_local $7 + (i32.load offset=12 + (get_local $2) + ) + ) + (get_local $2) + ) + (block + (if + (tee_local $16 + (i32.load + (tee_local $9 + (i32.add + (get_local $2) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $14 + (get_local $16) + ) + (set_local $4 + (get_local $9) + ) + ) + (if + (i32.eqz + (tee_local $14 + (i32.load + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + ) + (block + (set_local $23 + (i32.const 0) + ) + (br $do-once4) + ) + ) + ) + (loop $while-in7 + (if + (tee_local $16 + (i32.load + (tee_local $9 + (i32.add + (get_local $14) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $14 + (get_local $16) + ) + (set_local $4 + (get_local $9) + ) + (br $while-in7) + ) + ) + (if + (tee_local $16 + (i32.load + (tee_local $9 + (i32.add + (get_local $14) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $14 + (get_local $16) + ) + (set_local $4 + (get_local $9) + ) + (br $while-in7) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (get_local $1) + ) + (call $qa) + (block + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $23 + (get_local $14) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $9 + (i32.load offset=8 + (get_local $2) + ) + ) + (get_local $1) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (tee_local $16 + (i32.add + (get_local $9) + (i32.const 12) + ) + ) + ) + (get_local $2) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + ) + (get_local $2) + ) + (block + (i32.store + (get_local $16) + (get_local $7) + ) + (i32.store + (get_local $4) + (get_local $9) + ) + (set_local $23 + (get_local $7) + ) + ) + (call $qa) + ) + ) + ) + ) + (block $do-once8 + (if + (get_local $0) + (block + (if + (i32.eq + (get_local $2) + (i32.load + (tee_local $1 + (i32.add + (i32.shl + (tee_local $7 + (i32.load offset=28 + (get_local $2) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + ) + (block + (i32.store + (get_local $1) + (get_local $23) + ) + (if + (i32.eqz + (get_local $23) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $7) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + (get_local $2) + ) + (i32.store + (get_local $7) + (get_local $23) + ) + (i32.store offset=20 + (get_local $0) + (get_local $23) + ) + ) + (br_if $do-once8 + (i32.eqz + (get_local $23) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $23) + (tee_local $7 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (i32.store offset=24 + (get_local $23) + (get_local $0) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $2) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $7) + ) + (call $qa) + (block + (i32.store offset=16 + (get_local $23) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $23) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load offset=20 + (get_local $2) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store offset=20 + (get_local $23) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $23) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $6) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $2) + (i32.or + (tee_local $0 + (i32.add + (get_local $6) + (get_local $3) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $1 + (i32.add + (i32.add + (get_local $2) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $1) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $5) + (i32.or + (get_local $6) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $5) + (get_local $6) + ) + (get_local $6) + ) + (if + (tee_local $1 + (i32.load + (i32.const 1216) + ) + ) + (block + (set_local $0 + (i32.load + (i32.const 1228) + ) + ) + (set_local $1 + (i32.add + (i32.shl + (tee_local $7 + (i32.shr_u + (get_local $1) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (if + (i32.and + (tee_local $9 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $4 + (i32.shl + (i32.const 1) + (get_local $7) + ) + ) + ) + (if + (i32.lt_u + (tee_local $9 + (i32.load + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $41 + (get_local $4) + ) + (set_local $27 + (get_local $9) + ) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $9) + (get_local $4) + ) + ) + (set_local $41 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $27 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $41) + (get_local $0) + ) + (i32.store offset=12 + (get_local $27) + (get_local $0) + ) + (i32.store offset=8 + (get_local $0) + (get_local $27) + ) + (i32.store offset=12 + (get_local $0) + (get_local $1) + ) + ) + ) + (i32.store + (i32.const 1216) + (get_local $6) + ) + (i32.store + (i32.const 1228) + (get_local $5) + ) + ) + ) + (set_global $r + (get_local $25) + ) + (return + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + (set_local $5 + (get_local $3) + ) + ) + ) + (set_local $5 + (get_local $3) + ) + ) + ) + (if + (i32.gt_u + (get_local $0) + (i32.const -65) + ) + (set_local $5 + (i32.const -1) + ) + (block + (set_local $0 + (i32.and + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 11) + ) + ) + (i32.const -8) + ) + ) + (if + (tee_local $9 + (i32.load + (i32.const 1212) + ) + ) + (block + (set_local $4 + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (block $label$break$a + (if + (tee_local $12 + (i32.load + (i32.add + (i32.shl + (tee_local $27 + (if (result i32) + (tee_local $7 + (i32.shr_u + (get_local $1) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $0) + (i32.add + (tee_local $12 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $7 + (i32.and + (i32.shr_u + (i32.add + (tee_local $16 + (i32.shl + (get_local $7) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (get_local $7) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $1) + ) + (tee_local $16 + (i32.and + (i32.shr_u + (i32.add + (tee_local $14 + (i32.shl + (get_local $16) + (get_local $7) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $14) + (get_local $16) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $12) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + (block + (set_local $16 + (get_local $4) + ) + (set_local $14 + (i32.const 0) + ) + (set_local $1 + (i32.shl + (get_local $0) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $27) + (i32.const 1) + ) + ) + (i32.eq + (get_local $27) + (i32.const 31) + ) + ) + ) + ) + (set_local $7 + (get_local $12) + ) + (set_local $8 + (i32.const 0) + ) + (loop $while-in14 + (if + (i32.lt_u + (tee_local $12 + (i32.sub + (tee_local $3 + (i32.and + (i32.load offset=4 + (get_local $7) + ) + (i32.const -8) + ) + ) + (get_local $0) + ) + ) + (get_local $16) + ) + (if + (i32.eq + (get_local $3) + (get_local $0) + ) + (block + (set_local $29 + (get_local $12) + ) + (set_local $28 + (get_local $7) + ) + (set_local $32 + (get_local $7) + ) + (set_local $7 + (i32.const 90) + ) + (br $label$break$a) + ) + (block + (set_local $16 + (get_local $12) + ) + (set_local $8 + (get_local $7) + ) + ) + ) + ) + (set_local $3 + (select + (get_local $14) + (tee_local $12 + (i32.load offset=20 + (get_local $7) + ) + ) + (i32.or + (i32.eqz + (get_local $12) + ) + (i32.eq + (get_local $12) + (tee_local $7 + (i32.load + (i32.add + (i32.add + (get_local $7) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $1) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + ) + (if + (tee_local $12 + (i32.eqz + (get_local $7) + ) + ) + (block + (set_local $36 + (get_local $16) + ) + (set_local $5 + (get_local $3) + ) + (set_local $33 + (get_local $8) + ) + (set_local $7 + (i32.const 86) + ) + ) + (block + (set_local $14 + (get_local $3) + ) + (set_local $1 + (i32.shl + (get_local $1) + (i32.xor + (i32.and + (get_local $12) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (br $while-in14) + ) + ) + ) + ) + (block + (set_local $36 + (get_local $4) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $33 + (i32.const 0) + ) + (set_local $7 + (i32.const 86) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 86) + ) + (if + (tee_local $3 + (if (result i32) + (i32.and + (i32.eqz + (get_local $5) + ) + (i32.eqz + (get_local $33) + ) + ) + (block (result i32) + (if + (i32.eqz + (tee_local $4 + (i32.and + (get_local $9) + (i32.or + (tee_local $12 + (i32.shl + (i32.const 2) + (get_local $27) + ) + ) + (i32.sub + (i32.const 0) + (get_local $12) + ) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $0) + ) + (br $do-once) + ) + ) + (set_local $4 + (i32.and + (i32.shr_u + (tee_local $12 + (i32.add + (i32.and + (get_local $4) + (i32.sub + (i32.const 0) + (get_local $4) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $12 + (i32.and + (i32.shr_u + (tee_local $3 + (i32.shr_u + (get_local $12) + (get_local $4) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $4) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $5 + (i32.shr_u + (get_local $3) + (get_local $12) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $5 + (i32.and + (i32.shr_u + (tee_local $8 + (i32.shr_u + (get_local $5) + (get_local $3) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $8 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $8) + (get_local $5) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $1) + (get_local $8) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + (get_local $5) + ) + ) + (block + (set_local $29 + (get_local $36) + ) + (set_local $28 + (get_local $3) + ) + (set_local $32 + (get_local $33) + ) + (set_local $7 + (i32.const 90) + ) + ) + (block + (set_local $18 + (get_local $36) + ) + (set_local $10 + (get_local $33) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 90) + ) + (loop $while-in16 + (set_local $7 + (i32.const 0) + ) + (set_local $1 + (i32.lt_u + (tee_local $8 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $28) + ) + (i32.const -8) + ) + (get_local $0) + ) + ) + (get_local $29) + ) + ) + (set_local $5 + (select + (get_local $8) + (get_local $29) + (get_local $1) + ) + ) + (set_local $8 + (select + (get_local $28) + (get_local $32) + (get_local $1) + ) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $28) + ) + ) + (block + (set_local $29 + (get_local $5) + ) + (set_local $28 + (get_local $1) + ) + (set_local $32 + (get_local $8) + ) + (br $while-in16) + ) + ) + (if + (tee_local $28 + (i32.load offset=20 + (get_local $28) + ) + ) + (block + (set_local $29 + (get_local $5) + ) + (set_local $32 + (get_local $8) + ) + (br $while-in16) + ) + (block + (set_local $18 + (get_local $5) + ) + (set_local $10 + (get_local $8) + ) + ) + ) + ) + ) + (if + (get_local $10) + (if + (i32.lt_u + (get_local $18) + (i32.sub + (i32.load + (i32.const 1216) + ) + (get_local $0) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (tee_local $9 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (if + (i32.ge_u + (get_local $10) + (tee_local $8 + (i32.add + (get_local $10) + (get_local $0) + ) + ) + ) + (call $qa) + ) + (set_local $5 + (i32.load offset=24 + (get_local $10) + ) + ) + (block $do-once17 + (if + (i32.eq + (tee_local $1 + (i32.load offset=12 + (get_local $10) + ) + ) + (get_local $10) + ) + (block + (if + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $10) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $14 + (get_local $4) + ) + (set_local $1 + (get_local $3) + ) + ) + (if + (tee_local $14 + (i32.load + (tee_local $12 + (i32.add + (get_local $10) + (i32.const 16) + ) + ) + ) + ) + (set_local $1 + (get_local $12) + ) + (block + (set_local $22 + (i32.const 0) + ) + (br $do-once17) + ) + ) + ) + (loop $while-in20 + (if + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $14) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $14 + (get_local $4) + ) + (set_local $1 + (get_local $3) + ) + (br $while-in20) + ) + ) + (if + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $14) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $14 + (get_local $4) + ) + (set_local $1 + (get_local $3) + ) + (br $while-in20) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $9) + ) + (call $qa) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $22 + (get_local $14) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $3 + (i32.load offset=8 + (get_local $10) + ) + ) + (get_local $9) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 12) + ) + ) + ) + (get_local $10) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $12 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (get_local $10) + ) + (block + (i32.store + (get_local $4) + (get_local $1) + ) + (i32.store + (get_local $12) + (get_local $3) + ) + (set_local $22 + (get_local $1) + ) + ) + (call $qa) + ) + ) + ) + ) + (block $do-once21 + (if + (get_local $5) + (block + (if + (i32.eq + (get_local $10) + (i32.load + (tee_local $9 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $10) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + ) + (block + (i32.store + (get_local $9) + (get_local $22) + ) + (if + (i32.eqz + (get_local $22) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $5) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + (get_local $10) + ) + (i32.store + (get_local $1) + (get_local $22) + ) + (i32.store offset=20 + (get_local $5) + (get_local $22) + ) + ) + (br_if $do-once21 + (i32.eqz + (get_local $22) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $22) + (tee_local $1 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (i32.store offset=24 + (get_local $22) + (get_local $5) + ) + (if + (tee_local $9 + (i32.load offset=16 + (get_local $10) + ) + ) + (if + (i32.lt_u + (get_local $9) + (get_local $1) + ) + (call $qa) + (block + (i32.store offset=16 + (get_local $22) + (get_local $9) + ) + (i32.store offset=24 + (get_local $9) + (get_local $22) + ) + ) + ) + ) + (if + (tee_local $9 + (i32.load offset=20 + (get_local $10) + ) + ) + (if + (i32.lt_u + (get_local $9) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store offset=20 + (get_local $22) + (get_local $9) + ) + (i32.store offset=24 + (get_local $9) + (get_local $22) + ) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.lt_u + (get_local $18) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $10) + (i32.or + (tee_local $5 + (i32.add + (get_local $18) + (get_local $0) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $9 + (i32.add + (i32.add + (get_local $10) + (get_local $5) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $9) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $10) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $18) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $8) + (get_local $18) + ) + (get_local $18) + ) + (set_local $9 + (i32.shr_u + (get_local $18) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $18) + (i32.const 256) + ) + (block + (set_local $5 + (i32.add + (i32.shl + (get_local $9) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $3 + (i32.shl + (i32.const 1) + (get_local $9) + ) + ) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.load + (tee_local $3 + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $19 + (get_local $3) + ) + (set_local $6 + (get_local $1) + ) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $1) + (get_local $3) + ) + ) + (set_local $19 + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + (set_local $6 + (get_local $5) + ) + ) + ) + (i32.store + (get_local $19) + (get_local $8) + ) + (i32.store offset=12 + (get_local $6) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $6) + ) + (i32.store offset=12 + (get_local $8) + (get_local $5) + ) + (br $do-once25) + ) + ) + (set_local $12 + (i32.add + (i32.shl + (tee_local $16 + (if (result i32) + (tee_local $5 + (i32.shr_u + (get_local $18) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $18) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $18) + (i32.add + (tee_local $12 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $5 + (i32.and + (i32.shr_u + (i32.add + (tee_local $3 + (i32.shl + (get_local $5) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (get_local $5) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $1) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (i32.add + (tee_local $9 + (i32.shl + (get_local $3) + (get_local $5) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $9) + (get_local $3) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $12) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + (i32.store offset=28 + (get_local $8) + (get_local $16) + ) + (i32.store offset=4 + (tee_local $3 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (i32.const 1212) + ) + ) + (tee_local $9 + (i32.shl + (i32.const 1) + (get_local $16) + ) + ) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $3) + (get_local $9) + ) + ) + (i32.store + (get_local $12) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $12) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + (br $do-once25) + ) + ) + (set_local $9 + (i32.shl + (get_local $18) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $16) + (i32.const 1) + ) + ) + (i32.eq + (get_local $16) + (i32.const 31) + ) + ) + ) + ) + (set_local $3 + (i32.load + (get_local $12) + ) + ) + (loop $while-in28 + (block $while-out27 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const -8) + ) + (get_local $18) + ) + (block + (set_local $17 + (get_local $3) + ) + (set_local $7 + (i32.const 148) + ) + (br $while-out27) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $12 + (i32.add + (i32.add + (get_local $3) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $9) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $9 + (i32.shl + (get_local $9) + (i32.const 1) + ) + ) + (set_local $3 + (get_local $1) + ) + (br $while-in28) + ) + (block + (set_local $21 + (get_local $12) + ) + (set_local $15 + (get_local $3) + ) + (set_local $7 + (i32.const 145) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 145) + ) + (if + (i32.lt_u + (get_local $21) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $21) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $15) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 148) + ) + (if + (i32.and + (i32.ge_u + (tee_local $9 + (i32.load + (tee_local $3 + (i32.add + (get_local $17) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 1224) + ) + ) + ) + (i32.ge_u + (get_local $17) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $9) + (get_local $8) + ) + (i32.store + (get_local $3) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $9) + ) + (i32.store offset=12 + (get_local $8) + (get_local $17) + ) + (i32.store offset=24 + (get_local $8) + (i32.const 0) + ) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + (set_global $r + (get_local $25) + ) + (return + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + ) + (set_local $5 + (get_local $0) + ) + ) + (set_local $5 + (get_local $0) + ) + ) + ) + (set_local $5 + (get_local $0) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (tee_local $10 + (i32.load + (i32.const 1216) + ) + ) + (get_local $5) + ) + (block + (set_local $15 + (i32.load + (i32.const 1228) + ) + ) + (if + (i32.gt_u + (tee_local $17 + (i32.sub + (get_local $10) + (get_local $5) + ) + ) + (i32.const 15) + ) + (block + (i32.store + (i32.const 1228) + (tee_local $21 + (i32.add + (get_local $15) + (get_local $5) + ) + ) + ) + (i32.store + (i32.const 1216) + (get_local $17) + ) + (i32.store offset=4 + (get_local $21) + (i32.or + (get_local $17) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $21) + (get_local $17) + ) + (get_local $17) + ) + (i32.store offset=4 + (get_local $15) + (i32.or + (get_local $5) + (i32.const 3) + ) + ) + ) + (block + (i32.store + (i32.const 1216) + (i32.const 0) + ) + (i32.store + (i32.const 1228) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $15) + (i32.or + (get_local $10) + (i32.const 3) + ) + ) + (i32.store + (tee_local $17 + (i32.add + (i32.add + (get_local $15) + (get_local $10) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $17) + ) + (i32.const 1) + ) + ) + ) + ) + (br $folding-inner0) + ) + ) + (if + (i32.gt_u + (tee_local $15 + (i32.load + (i32.const 1220) + ) + ) + (get_local $5) + ) + (block + (i32.store + (i32.const 1220) + (tee_local $17 + (i32.sub + (get_local $15) + (get_local $5) + ) + ) + ) + (i32.store + (i32.const 1232) + (tee_local $10 + (i32.add + (tee_local $15 + (i32.load + (i32.const 1232) + ) + ) + (get_local $5) + ) + ) + ) + (i32.store offset=4 + (get_local $10) + (i32.or + (get_local $17) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $15) + (i32.or + (get_local $5) + (i32.const 3) + ) + ) + (br $folding-inner0) + ) + ) + (if + (i32.eqz + (i32.load + (i32.const 1680) + ) + ) + (block + (i32.store + (i32.const 1688) + (i32.const 4096) + ) + (i32.store + (i32.const 1684) + (i32.const 4096) + ) + (i32.store + (i32.const 1692) + (i32.const -1) + ) + (i32.store + (i32.const 1696) + (i32.const -1) + ) + (i32.store + (i32.const 1700) + (i32.const 0) + ) + (i32.store + (i32.const 1652) + (i32.const 0) + ) + (i32.store + (get_local $13) + (tee_local $15 + (i32.xor + (i32.and + (get_local $13) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + ) + (i32.store + (i32.const 1680) + (get_local $15) + ) + ) + ) + (set_local $15 + (i32.add + (get_local $5) + (i32.const 48) + ) + ) + (if + (i32.le_u + (tee_local $13 + (i32.and + (tee_local $10 + (i32.add + (tee_local $13 + (i32.load + (i32.const 1688) + ) + ) + (tee_local $17 + (i32.add + (get_local $5) + (i32.const 47) + ) + ) + ) + ) + (tee_local $21 + (i32.sub + (i32.const 0) + (get_local $13) + ) + ) + ) + ) + (get_local $5) + ) + (block + (set_global $r + (get_local $25) + ) + (return + (i32.const 0) + ) + ) + ) + (if + (tee_local $18 + (i32.load + (i32.const 1648) + ) + ) + (if + (i32.or + (i32.le_u + (tee_local $6 + (i32.add + (tee_local $16 + (i32.load + (i32.const 1640) + ) + ) + (get_local $13) + ) + ) + (get_local $16) + ) + (i32.gt_u + (get_local $6) + (get_local $18) + ) + ) + (block + (set_global $r + (get_local $25) + ) + (return + (i32.const 0) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $7 + (block $label$break$b (result i32) + (if (result i32) + (i32.and + (i32.load + (i32.const 1652) + ) + (i32.const 4) + ) + (i32.const 188) + (block (result i32) + (block $label$break$c + (if + (tee_local $18 + (i32.load + (i32.const 1232) + ) + ) + (block + (set_local $6 + (i32.const 1656) + ) + (loop $while-in32 + (block $while-out31 + (if + (i32.le_u + (tee_local $16 + (i32.load + (get_local $6) + ) + ) + (get_local $18) + ) + (if + (i32.gt_u + (i32.add + (get_local $16) + (i32.load + (tee_local $19 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + ) + ) + (get_local $18) + ) + (block + (set_local $0 + (get_local $6) + ) + (set_local $4 + (get_local $19) + ) + (br $while-out31) + ) + ) + ) + (br_if $while-in32 + (tee_local $6 + (i32.load offset=8 + (get_local $6) + ) + ) + ) + (set_local $7 + (i32.const 171) + ) + (br $label$break$c) + ) + ) + (if + (i32.lt_u + (tee_local $6 + (i32.and + (i32.sub + (get_local $10) + (i32.load + (i32.const 1220) + ) + ) + (get_local $21) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (tee_local $19 + (call $ta + (get_local $6) + ) + ) + (i32.add + (i32.load + (get_local $0) + ) + (i32.load + (get_local $4) + ) + ) + ) + (if + (i32.ne + (get_local $19) + (i32.const -1) + ) + (block + (set_local $20 + (get_local $19) + ) + (set_local $26 + (get_local $6) + ) + (br $label$break$b + (i32.const 191) + ) + ) + ) + (block + (set_local $11 + (get_local $19) + ) + (set_local $2 + (get_local $6) + ) + (set_local $7 + (i32.const 181) + ) + ) + ) + ) + ) + (set_local $7 + (i32.const 171) + ) + ) + ) + (block $do-once33 + (if + (i32.eq + (get_local $7) + (i32.const 171) + ) + (if + (i32.ne + (tee_local $18 + (call $ta + (i32.const 0) + ) + ) + (i32.const -1) + ) + (block + (set_local $3 + (if (result i32) + (i32.and + (tee_local $19 + (i32.add + (tee_local $6 + (i32.load + (i32.const 1684) + ) + ) + (i32.const -1) + ) + ) + (tee_local $0 + (get_local $18) + ) + ) + (i32.add + (i32.sub + (get_local $13) + (get_local $0) + ) + (i32.and + (i32.add + (get_local $19) + (get_local $0) + ) + (i32.sub + (i32.const 0) + (get_local $6) + ) + ) + ) + (get_local $13) + ) + ) + (set_local $0 + (i32.add + (tee_local $6 + (i32.load + (i32.const 1640) + ) + ) + (get_local $3) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $3) + (get_local $5) + ) + (i32.lt_u + (get_local $3) + (i32.const 2147483647) + ) + ) + (block + (if + (tee_local $19 + (i32.load + (i32.const 1648) + ) + ) + (br_if $do-once33 + (i32.or + (i32.le_u + (get_local $0) + (get_local $6) + ) + (i32.gt_u + (get_local $0) + (get_local $19) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $19 + (call $ta + (get_local $3) + ) + ) + (get_local $18) + ) + (block + (set_local $20 + (get_local $18) + ) + (set_local $26 + (get_local $3) + ) + (br $label$break$b + (i32.const 191) + ) + ) + (block + (set_local $11 + (get_local $19) + ) + (set_local $2 + (get_local $3) + ) + (set_local $7 + (i32.const 181) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (block $label$break$d + (if + (i32.eq + (get_local $7) + (i32.const 181) + ) + (block + (set_local $19 + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $15) + (get_local $2) + ) + (i32.and + (i32.lt_u + (get_local $2) + (i32.const 2147483647) + ) + (i32.ne + (get_local $11) + (i32.const -1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.and + (i32.add + (i32.sub + (get_local $17) + (get_local $2) + ) + (tee_local $18 + (i32.load + (i32.const 1688) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $18) + ) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (call $ta + (get_local $0) + ) + (i32.const -1) + ) + (block + (drop + (call $ta + (get_local $19) + ) + ) + (br $label$break$d) + ) + (set_local $1 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + ) + (set_local $1 + (get_local $2) + ) + ) + (set_local $1 + (get_local $2) + ) + ) + (if + (i32.ne + (get_local $11) + (i32.const -1) + ) + (block + (set_local $20 + (get_local $11) + ) + (set_local $26 + (get_local $1) + ) + (br $label$break$b + (i32.const 191) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 1652) + (i32.or + (i32.load + (i32.const 1652) + ) + (i32.const 4) + ) + ) + (i32.const 188) + ) + ) + ) + ) + (i32.const 188) + ) + (if + (i32.lt_u + (get_local $13) + (i32.const 2147483647) + ) + (if + (i32.and + (i32.lt_u + (tee_local $1 + (call $ta + (get_local $13) + ) + ) + (tee_local $13 + (call $ta + (i32.const 0) + ) + ) + ) + (i32.and + (i32.ne + (get_local $1) + (i32.const -1) + ) + (i32.ne + (get_local $13) + (i32.const -1) + ) + ) + ) + (if + (i32.gt_u + (tee_local $11 + (i32.sub + (get_local $13) + (get_local $1) + ) + ) + (i32.add + (get_local $5) + (i32.const 40) + ) + ) + (block + (set_local $20 + (get_local $1) + ) + (set_local $26 + (get_local $11) + ) + (set_local $7 + (i32.const 191) + ) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 191) + ) + (block + (i32.store + (i32.const 1640) + (tee_local $11 + (i32.add + (i32.load + (i32.const 1640) + ) + (get_local $26) + ) + ) + ) + (if + (i32.gt_u + (get_local $11) + (i32.load + (i32.const 1644) + ) + ) + (i32.store + (i32.const 1644) + (get_local $11) + ) + ) + (block $do-once38 + (if + (tee_local $11 + (i32.load + (i32.const 1232) + ) + ) + (block + (set_local $2 + (i32.const 1656) + ) + (loop $do-in41 + (block $do-out40 + (if + (i32.eq + (get_local $20) + (i32.add + (tee_local $1 + (i32.load + (get_local $2) + ) + ) + (tee_local $17 + (i32.load + (tee_local $13 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + ) + ) + ) + ) + (block + (set_local $48 + (get_local $1) + ) + (set_local $49 + (get_local $13) + ) + (set_local $50 + (get_local $17) + ) + (set_local $51 + (get_local $2) + ) + (set_local $7 + (i32.const 201) + ) + (br $do-out40) + ) + ) + (br_if $do-in41 + (tee_local $2 + (i32.load offset=8 + (get_local $2) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 201) + ) + (if + (i32.eqz + (i32.and + (i32.load offset=12 + (get_local $51) + ) + (i32.const 8) + ) + ) + (if + (i32.and + (i32.lt_u + (get_local $11) + (get_local $20) + ) + (i32.ge_u + (get_local $11) + (get_local $48) + ) + ) + (block + (i32.store + (get_local $49) + (i32.add + (get_local $50) + (get_local $26) + ) + ) + (set_local $2 + (i32.add + (get_local $11) + (tee_local $17 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $2 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $2) + (i32.const 7) + ) + ) + ) + ) + ) + (set_local $13 + (i32.add + (i32.sub + (get_local $26) + (get_local $17) + ) + (i32.load + (i32.const 1220) + ) + ) + ) + (i32.store + (i32.const 1232) + (get_local $2) + ) + (i32.store + (i32.const 1220) + (get_local $13) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $13) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $2) + (get_local $13) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + (br $do-once38) + ) + ) + ) + ) + (set_local $14 + (if (result i32) + (i32.lt_u + (get_local $20) + (tee_local $13 + (i32.load + (i32.const 1224) + ) + ) + ) + (block (result i32) + (i32.store + (i32.const 1224) + (get_local $20) + ) + (get_local $20) + ) + (get_local $13) + ) + ) + (set_local $13 + (i32.add + (get_local $20) + (get_local $26) + ) + ) + (set_local $2 + (i32.const 1656) + ) + (loop $while-in43 + (block $while-out42 + (if + (i32.eq + (i32.load + (get_local $2) + ) + (get_local $13) + ) + (block + (set_local $52 + (get_local $2) + ) + (set_local $42 + (get_local $2) + ) + (set_local $7 + (i32.const 209) + ) + (br $while-out42) + ) + ) + (br_if $while-in43 + (tee_local $2 + (i32.load offset=8 + (get_local $2) + ) + ) + ) + (set_local $30 + (i32.const 1656) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 209) + ) + (if + (i32.and + (i32.load offset=12 + (get_local $42) + ) + (i32.const 8) + ) + (set_local $30 + (i32.const 1656) + ) + (block + (i32.store + (get_local $52) + (get_local $20) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $42) + (i32.const 4) + ) + ) + (i32.add + (i32.load + (get_local $2) + ) + (get_local $26) + ) + ) + (set_local $17 + (i32.add + (get_local $20) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $2 + (i32.add + (get_local $20) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $2) + (i32.const 7) + ) + ) + ) + ) + (set_local $1 + (i32.add + (get_local $13) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $2 + (i32.add + (get_local $13) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $2) + (i32.const 7) + ) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $17) + (get_local $5) + ) + ) + (set_local $15 + (i32.sub + (i32.sub + (get_local $1) + (get_local $17) + ) + (get_local $5) + ) + ) + (i32.store offset=4 + (get_local $17) + (i32.or + (get_local $5) + (i32.const 3) + ) + ) + (block $do-once44 + (if + (i32.eq + (get_local $1) + (get_local $11) + ) + (block + (i32.store + (i32.const 1220) + (tee_local $3 + (i32.add + (i32.load + (i32.const 1220) + ) + (get_local $15) + ) + ) + ) + (i32.store + (i32.const 1232) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + ) + (block + (if + (i32.eq + (get_local $1) + (i32.load + (i32.const 1228) + ) + ) + (block + (i32.store + (i32.const 1216) + (tee_local $3 + (i32.add + (i32.load + (i32.const 1216) + ) + (get_local $15) + ) + ) + ) + (i32.store + (i32.const 1228) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $3) + ) + (get_local $3) + ) + (br $do-once44) + ) + ) + (if + (i32.eq + (i32.and + (tee_local $3 + (i32.load offset=4 + (get_local $1) + ) + ) + (i32.const 3) + ) + (i32.const 1) + ) + (block + (set_local $4 + (i32.and + (get_local $3) + (i32.const -8) + ) + ) + (set_local $0 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (block $label$break$e + (if + (i32.lt_u + (get_local $3) + (i32.const 256) + ) + (block + (set_local $10 + (i32.load offset=12 + (get_local $1) + ) + ) + (block $do-once47 + (if + (i32.ne + (tee_local $21 + (i32.load offset=8 + (get_local $1) + ) + ) + (tee_local $19 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $21) + (get_local $14) + ) + (call $qa) + ) + (br_if $do-once47 + (i32.eq + (i32.load offset=12 + (get_local $21) + ) + (get_local $1) + ) + ) + (call $qa) + ) + ) + ) + (if + (i32.eq + (get_local $10) + (get_local $21) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (i32.load + (i32.const 1208) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $0) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$e) + ) + ) + (block $do-once49 + (if + (i32.eq + (get_local $10) + (get_local $19) + ) + (set_local $43 + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (get_local $14) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (block + (set_local $43 + (get_local $0) + ) + (br $do-once49) + ) + ) + (call $qa) + ) + ) + ) + (i32.store offset=12 + (get_local $21) + (get_local $10) + ) + (i32.store + (get_local $43) + (get_local $21) + ) + ) + (block + (set_local $19 + (i32.load offset=24 + (get_local $1) + ) + ) + (block $do-once51 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $1) + ) + ) + (get_local $1) + ) + (block + (if + (tee_local $16 + (i32.load + (tee_local $6 + (i32.add + (tee_local $18 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $16) + ) + (set_local $0 + (get_local $6) + ) + ) + (if + (tee_local $22 + (i32.load + (get_local $18) + ) + ) + (block + (set_local $3 + (get_local $22) + ) + (set_local $0 + (get_local $18) + ) + ) + (block + (set_local $24 + (i32.const 0) + ) + (br $do-once51) + ) + ) + ) + (loop $while-in54 + (if + (tee_local $16 + (i32.load + (tee_local $6 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $16) + ) + (set_local $0 + (get_local $6) + ) + (br $while-in54) + ) + ) + (if + (tee_local $16 + (i32.load + (tee_local $6 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $16) + ) + (set_local $0 + (get_local $6) + ) + (br $while-in54) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $14) + ) + (call $qa) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $24 + (get_local $3) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $6 + (i32.load offset=8 + (get_local $1) + ) + ) + (get_local $14) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (tee_local $16 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + ) + (get_local $1) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $18 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (block + (i32.store + (get_local $16) + (get_local $0) + ) + (i32.store + (get_local $18) + (get_local $6) + ) + (set_local $24 + (get_local $0) + ) + ) + (call $qa) + ) + ) + ) + ) + (br_if $label$break$e + (i32.eqz + (get_local $19) + ) + ) + (block $do-once55 + (if + (i32.eq + (get_local $1) + (i32.load + (tee_local $21 + (i32.add + (i32.shl + (tee_local $0 + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + ) + (block + (i32.store + (get_local $21) + (get_local $24) + ) + (br_if $do-once55 + (get_local $24) + ) + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $0) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$e) + ) + (block + (if + (i32.lt_u + (get_local $19) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $10 + (i32.add + (get_local $19) + (i32.const 16) + ) + ) + ) + (get_local $1) + ) + (i32.store + (get_local $10) + (get_local $24) + ) + (i32.store offset=20 + (get_local $19) + (get_local $24) + ) + ) + (br_if $label$break$e + (i32.eqz + (get_local $24) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $24) + (tee_local $0 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (i32.store offset=24 + (get_local $24) + (get_local $19) + ) + (if + (tee_local $10 + (i32.load + (tee_local $21 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $10) + (get_local $0) + ) + (call $qa) + (block + (i32.store offset=16 + (get_local $24) + (get_local $10) + ) + (i32.store offset=24 + (get_local $10) + (get_local $24) + ) + ) + ) + ) + (br_if $label$break$e + (i32.eqz + (tee_local $10 + (i32.load offset=4 + (get_local $21) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $10) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store offset=20 + (get_local $24) + (get_local $10) + ) + (i32.store offset=24 + (get_local $10) + (get_local $24) + ) + ) + ) + ) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (get_local $4) + ) + ) + (set_local $15 + (i32.add + (get_local $4) + (get_local $15) + ) + ) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.and + (i32.load + (get_local $0) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $15) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $15) + ) + (get_local $15) + ) + (set_local $0 + (i32.shr_u + (get_local $15) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $15) + (i32.const 256) + ) + (block + (set_local $3 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (block $do-once59 + (if + (i32.and + (tee_local $10 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (block + (if + (i32.ge_u + (tee_local $19 + (i32.load + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (block + (set_local $44 + (get_local $0) + ) + (set_local $37 + (get_local $19) + ) + (br $do-once59) + ) + ) + (call $qa) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $10) + (get_local $0) + ) + ) + (set_local $44 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $37 + (get_local $3) + ) + ) + ) + ) + (i32.store + (get_local $44) + (get_local $2) + ) + (i32.store offset=12 + (get_local $37) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $37) + ) + (i32.store offset=12 + (get_local $2) + (get_local $3) + ) + (br $do-once44) + ) + ) + (set_local $0 + (i32.add + (i32.shl + (tee_local $4 + (block $do-once61 (result i32) + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $15) + (i32.const 8) + ) + ) + (block (result i32) + (drop + (br_if $do-once61 + (i32.const 31) + (i32.gt_u + (get_local $15) + (i32.const 16777215) + ) + ) + ) + (i32.or + (i32.and + (i32.shr_u + (get_local $15) + (i32.add + (tee_local $6 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $19 + (i32.and + (i32.shr_u + (i32.add + (tee_local $4 + (i32.shl + (get_local $0) + (tee_local $10 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $10) + ) + (tee_local $4 + (i32.and + (i32.shr_u + (i32.add + (tee_local $0 + (i32.shl + (get_local $4) + (get_local $19) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $0) + (get_local $4) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $6) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + (i32.store offset=28 + (get_local $2) + (get_local $4) + ) + (i32.store offset=4 + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (i32.const 1212) + ) + ) + (tee_local $6 + (i32.shl + (i32.const 1) + (get_local $4) + ) + ) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $3) + (get_local $6) + ) + ) + (i32.store + (get_local $0) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $0) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + (br $do-once44) + ) + ) + (set_local $6 + (i32.shl + (get_local $15) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $4) + (i32.const 1) + ) + ) + (i32.eq + (get_local $4) + (i32.const 31) + ) + ) + ) + ) + (set_local $3 + (i32.load + (get_local $0) + ) + ) + (loop $while-in64 + (block $while-out63 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const -8) + ) + (get_local $15) + ) + (block + (set_local $38 + (get_local $3) + ) + (set_local $7 + (i32.const 279) + ) + (br $while-out63) + ) + ) + (if + (tee_local $4 + (i32.load + (tee_local $0 + (i32.add + (i32.add + (get_local $3) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $6) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $6 + (i32.shl + (get_local $6) + (i32.const 1) + ) + ) + (set_local $3 + (get_local $4) + ) + (br $while-in64) + ) + (block + (set_local $45 + (get_local $0) + ) + (set_local $53 + (get_local $3) + ) + (set_local $7 + (i32.const 276) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 276) + ) + (if + (i32.lt_u + (get_local $45) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $45) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $53) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 279) + ) + (if + (i32.and + (i32.ge_u + (tee_local $6 + (i32.load + (tee_local $3 + (i32.add + (get_local $38) + (i32.const 8) + ) + ) + ) + ) + (tee_local $4 + (i32.load + (i32.const 1224) + ) + ) + ) + (i32.ge_u + (get_local $38) + (get_local $4) + ) + ) + (block + (i32.store offset=12 + (get_local $6) + (get_local $2) + ) + (i32.store + (get_local $3) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $6) + ) + (i32.store offset=12 + (get_local $2) + (get_local $38) + ) + (i32.store offset=24 + (get_local $2) + (i32.const 0) + ) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + (set_global $r + (get_local $25) + ) + (return + (i32.add + (get_local $17) + (i32.const 8) + ) + ) + ) + ) + ) + (loop $while-in66 + (block $while-out65 + (if + (i32.le_u + (tee_local $2 + (i32.load + (get_local $30) + ) + ) + (get_local $11) + ) + (if + (i32.gt_u + (tee_local $15 + (i32.add + (get_local $2) + (i32.load offset=4 + (get_local $30) + ) + ) + ) + (get_local $11) + ) + (block + (set_local $0 + (get_local $15) + ) + (br $while-out65) + ) + ) + ) + (set_local $30 + (i32.load offset=8 + (get_local $30) + ) + ) + (br $while-in66) + ) + ) + (set_local $15 + (i32.add + (tee_local $17 + (i32.add + (get_local $0) + (i32.const -47) + ) + ) + (i32.const 8) + ) + ) + (set_local $2 + (i32.add + (tee_local $17 + (select + (get_local $11) + (tee_local $2 + (i32.add + (get_local $17) + (select + (i32.and + (i32.sub + (i32.const 0) + (get_local $15) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $15) + (i32.const 7) + ) + ) + ) + ) + (i32.lt_u + (get_local $2) + (tee_local $15 + (i32.add + (get_local $11) + (i32.const 16) + ) + ) + ) + ) + ) + (i32.const 8) + ) + ) + (i32.store + (i32.const 1232) + (tee_local $1 + (i32.add + (get_local $20) + (tee_local $13 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $20) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 1220) + (tee_local $6 + (i32.sub + (i32.add + (get_local $26) + (i32.const -40) + ) + (get_local $13) + ) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $6) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $1) + (get_local $6) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + (i32.store + (tee_local $6 + (i32.add + (get_local $17) + (i32.const 4) + ) + ) + (i32.const 27) + ) + (i32.store + (get_local $2) + (i32.load + (i32.const 1656) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.load + (i32.const 1660) + ) + ) + (i32.store offset=8 + (get_local $2) + (i32.load + (i32.const 1664) + ) + ) + (i32.store offset=12 + (get_local $2) + (i32.load + (i32.const 1668) + ) + ) + (i32.store + (i32.const 1656) + (get_local $20) + ) + (i32.store + (i32.const 1660) + (get_local $26) + ) + (i32.store + (i32.const 1668) + (i32.const 0) + ) + (i32.store + (i32.const 1664) + (get_local $2) + ) + (set_local $2 + (i32.add + (get_local $17) + (i32.const 24) + ) + ) + (loop $do-in68 + (i32.store + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (i32.const 7) + ) + (br_if $do-in68 + (i32.lt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (get_local $0) + ) + ) + ) + (if + (i32.ne + (get_local $17) + (get_local $11) + ) + (block + (i32.store + (get_local $6) + (i32.and + (i32.load + (get_local $6) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $11) + (i32.or + (tee_local $2 + (i32.sub + (get_local $17) + (get_local $11) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (get_local $17) + (get_local $2) + ) + (set_local $1 + (i32.shr_u + (get_local $2) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $2) + (i32.const 256) + ) + (block + (set_local $13 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $4 + (i32.shl + (i32.const 1) + (get_local $1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.load + (tee_local $4 + (i32.add + (get_local $13) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $46 + (get_local $4) + ) + (set_local $39 + (get_local $3) + ) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $3) + (get_local $4) + ) + ) + (set_local $46 + (i32.add + (get_local $13) + (i32.const 8) + ) + ) + (set_local $39 + (get_local $13) + ) + ) + ) + (i32.store + (get_local $46) + (get_local $11) + ) + (i32.store offset=12 + (get_local $39) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $39) + ) + (i32.store offset=12 + (get_local $11) + (get_local $13) + ) + (br $do-once38) + ) + ) + (set_local $0 + (i32.add + (i32.shl + (tee_local $3 + (if (result i32) + (tee_local $13 + (i32.shr_u + (get_local $2) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $2) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $2) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $13 + (i32.and + (i32.shr_u + (i32.add + (tee_local $4 + (i32.shl + (get_local $13) + (tee_local $3 + (i32.and + (i32.shr_u + (i32.add + (get_local $13) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $3) + ) + (tee_local $4 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $4) + (get_local $13) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $4) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + (i32.store offset=28 + (get_local $11) + (get_local $3) + ) + (i32.store offset=20 + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $15) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $4 + (i32.load + (i32.const 1212) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $3) + ) + ) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $4) + (get_local $1) + ) + ) + (i32.store + (get_local $0) + (get_local $11) + ) + (i32.store offset=24 + (get_local $11) + (get_local $0) + ) + (i32.store offset=12 + (get_local $11) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $11) + ) + (br $do-once38) + ) + ) + (set_local $1 + (i32.shl + (get_local $2) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $3) + (i32.const 1) + ) + ) + (i32.eq + (get_local $3) + (i32.const 31) + ) + ) + ) + ) + (set_local $4 + (i32.load + (get_local $0) + ) + ) + (loop $while-in70 + (block $while-out69 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $4) + ) + (i32.const -8) + ) + (get_local $2) + ) + (block + (set_local $31 + (get_local $4) + ) + (set_local $7 + (i32.const 305) + ) + (br $while-out69) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (i32.add + (get_local $4) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $1) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $1 + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + (set_local $4 + (get_local $3) + ) + (br $while-in70) + ) + (block + (set_local $47 + (get_local $0) + ) + (set_local $54 + (get_local $4) + ) + (set_local $7 + (i32.const 302) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 302) + ) + (if + (i32.lt_u + (get_local $47) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $47) + (get_local $11) + ) + (i32.store offset=24 + (get_local $11) + (get_local $54) + ) + (i32.store offset=12 + (get_local $11) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $11) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 305) + ) + (if + (i32.and + (i32.ge_u + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (get_local $31) + (i32.const 8) + ) + ) + ) + ) + (tee_local $2 + (i32.load + (i32.const 1224) + ) + ) + ) + (i32.ge_u + (get_local $31) + (get_local $2) + ) + ) + (block + (i32.store offset=12 + (get_local $1) + (get_local $11) + ) + (i32.store + (get_local $4) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $1) + ) + (i32.store offset=12 + (get_local $11) + (get_local $31) + ) + (i32.store offset=24 + (get_local $11) + (i32.const 0) + ) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + (block + (if + (i32.or + (i32.eqz + (tee_local $1 + (i32.load + (i32.const 1224) + ) + ) + ) + (i32.lt_u + (get_local $20) + (get_local $1) + ) + ) + (i32.store + (i32.const 1224) + (get_local $20) + ) + ) + (i32.store + (i32.const 1656) + (get_local $20) + ) + (i32.store + (i32.const 1660) + (get_local $26) + ) + (i32.store + (i32.const 1668) + (i32.const 0) + ) + (i32.store + (i32.const 1244) + (i32.load + (i32.const 1680) + ) + ) + (i32.store + (i32.const 1240) + (i32.const -1) + ) + (set_local $1 + (i32.const 0) + ) + (loop $do-in + (i32.store offset=12 + (tee_local $13 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (get_local $13) + ) + (i32.store offset=8 + (get_local $13) + (get_local $13) + ) + (br_if $do-in + (i32.ne + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 32) + ) + ) + ) + (i32.store + (i32.const 1232) + (tee_local $1 + (i32.add + (get_local $20) + (tee_local $13 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $20) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 1220) + (tee_local $2 + (i32.sub + (i32.add + (get_local $26) + (i32.const -40) + ) + (get_local $13) + ) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $2) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $1) + (get_local $2) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + ) + ) + ) + (if + (i32.gt_u + (tee_local $11 + (i32.load + (i32.const 1220) + ) + ) + (get_local $5) + ) + (block + (i32.store + (i32.const 1220) + (tee_local $31 + (i32.sub + (get_local $11) + (get_local $5) + ) + ) + ) + (i32.store + (i32.const 1232) + (tee_local $7 + (i32.add + (tee_local $11 + (i32.load + (i32.const 1232) + ) + ) + (get_local $5) + ) + ) + ) + (i32.store offset=4 + (get_local $7) + (i32.or + (get_local $31) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $11) + (i32.or + (get_local $5) + (i32.const 3) + ) + ) + (set_global $r + (get_local $25) + ) + (return + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + ) + ) + ) + ) + (i32.store + (call $Qa) + (i32.const 12) + ) + (set_global $r + (get_local $25) + ) + (return + (i32.const 0) + ) + ) + (set_global $r + (get_local $25) + ) + (i32.add + (get_local $15) + (i32.const 8) + ) + ) + (func $fb (; 13 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (if + (i32.eqz + (get_local $0) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $0) + (i32.const -8) + ) + ) + (tee_local $14 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (if + (i32.eq + (tee_local $0 + (i32.and + (tee_local $4 + (i32.load + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + ) + (i32.const 3) + ) + ) + (i32.const 1) + ) + (call $qa) + ) + (set_local $8 + (i32.add + (get_local $1) + (tee_local $7 + (i32.and + (get_local $4) + (i32.const -8) + ) + ) + ) + ) + (block $do-once + (if + (i32.and + (get_local $4) + (i32.const 1) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + ) + (block + (set_local $10 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eqz + (get_local $0) + ) + (return) + ) + (set_local $7 + (i32.add + (get_local $10) + (get_local $7) + ) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.sub + (i32.const 0) + (get_local $10) + ) + ) + ) + (get_local $14) + ) + (call $qa) + ) + (if + (i32.eq + (get_local $1) + (i32.load + (i32.const 1228) + ) + ) + (block + (if + (i32.ne + (i32.and + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 3) + ) + (i32.const 3) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 1216) + (get_local $7) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $3) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $7) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $7) + ) + (get_local $7) + ) + (return) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $10) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $10) + (i32.const 256) + ) + (block + (set_local $0 + (i32.load offset=12 + (get_local $1) + ) + ) + (if + (i32.ne + (tee_local $10 + (i32.load offset=8 + (get_local $1) + ) + ) + (tee_local $4 + (i32.add + (i32.shl + (get_local $3) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (get_local $14) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $10) + ) + (get_local $1) + ) + (call $qa) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (get_local $10) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (i32.load + (i32.const 1208) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (get_local $0) + (get_local $4) + ) + (set_local $9 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $0) + (get_local $14) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (set_local $9 + (get_local $4) + ) + (call $qa) + ) + ) + ) + (i32.store offset=12 + (get_local $10) + (get_local $0) + ) + (i32.store + (get_local $9) + (get_local $10) + ) + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + (br $do-once) + ) + ) + (set_local $10 + (i32.load offset=24 + (get_local $1) + ) + ) + (block $do-once0 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $1) + ) + ) + (get_local $1) + ) + (block + (if + (tee_local $9 + (i32.load + (tee_local $3 + (i32.add + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $9) + ) + (set_local $4 + (get_local $3) + ) + ) + (if + (i32.eqz + (tee_local $0 + (i32.load + (get_local $4) + ) + ) + ) + (block + (set_local $5 + (i32.const 0) + ) + (br $do-once0) + ) + ) + ) + (loop $while-in + (if + (tee_local $9 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $9) + ) + (set_local $4 + (get_local $3) + ) + (br $while-in) + ) + ) + (if + (tee_local $9 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $9) + ) + (set_local $4 + (get_local $3) + ) + (br $while-in) + ) + (block + (set_local $12 + (get_local $0) + ) + (set_local $3 + (get_local $4) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $3) + (get_local $14) + ) + (call $qa) + (block + (i32.store + (get_local $3) + (i32.const 0) + ) + (set_local $5 + (get_local $12) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $3 + (i32.load offset=8 + (get_local $1) + ) + ) + (get_local $14) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (tee_local $9 + (i32.add + (get_local $3) + (i32.const 12) + ) + ) + ) + (get_local $1) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (block + (i32.store + (get_local $9) + (get_local $0) + ) + (i32.store + (get_local $4) + (get_local $3) + ) + (set_local $5 + (get_local $0) + ) + ) + (call $qa) + ) + ) + ) + ) + (if + (get_local $10) + (block + (if + (i32.eq + (get_local $1) + (i32.load + (tee_local $3 + (i32.add + (i32.shl + (tee_local $0 + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + ) + (block + (i32.store + (get_local $3) + (get_local $5) + ) + (if + (i32.eqz + (get_local $5) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $0) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $10) + (i32.const 16) + ) + ) + ) + (get_local $1) + ) + (i32.store + (get_local $0) + (get_local $5) + ) + (i32.store offset=20 + (get_local $10) + (get_local $5) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + (br $do-once) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $5) + (tee_local $0 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (i32.store offset=24 + (get_local $5) + (get_local $10) + ) + (if + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (get_local $0) + ) + (call $qa) + (block + (i32.store offset=16 + (get_local $5) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $5) + ) + ) + ) + ) + (if + (tee_local $4 + (i32.load offset=4 + (get_local $3) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store offset=20 + (get_local $5) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $5) + ) + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (get_local $2) + (get_local $8) + ) + (call $qa) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (tee_local $7 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 1) + ) + ) + (call $qa) + ) + (if + (i32.and + (get_local $1) + (i32.const 2) + ) + (block + (i32.store + (get_local $7) + (i32.and + (get_local $1) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $6) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $6) + ) + (get_local $6) + ) + (set_local $0 + (get_local $6) + ) + ) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 1232) + ) + ) + (block + (i32.store + (i32.const 1220) + (tee_local $5 + (i32.add + (i32.load + (i32.const 1220) + ) + (get_local $6) + ) + ) + ) + (i32.store + (i32.const 1232) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $2) + (i32.load + (i32.const 1228) + ) + ) + (return) + ) + (i32.store + (i32.const 1228) + (i32.const 0) + ) + (i32.store + (i32.const 1216) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 1228) + ) + ) + (block + (i32.store + (i32.const 1216) + (tee_local $5 + (i32.add + (i32.load + (i32.const 1216) + ) + (get_local $6) + ) + ) + ) + (i32.store + (i32.const 1228) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $5) + ) + (get_local $5) + ) + (return) + ) + ) + (set_local $5 + (i32.add + (i32.and + (get_local $1) + (i32.const -8) + ) + (get_local $6) + ) + ) + (set_local $14 + (i32.shr_u + (get_local $1) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.lt_u + (get_local $1) + (i32.const 256) + ) + (block + (set_local $3 + (i32.load offset=12 + (get_local $8) + ) + ) + (if + (i32.ne + (tee_local $12 + (i32.load offset=8 + (get_local $8) + ) + ) + (tee_local $4 + (i32.add + (i32.shl + (get_local $14) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $12) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $12) + ) + (get_local $8) + ) + (call $qa) + ) + ) + ) + (if + (i32.eq + (get_local $3) + (get_local $12) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (i32.load + (i32.const 1208) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $14) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.eq + (get_local $3) + (get_local $4) + ) + (set_local $17 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $3) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (set_local $17 + (get_local $4) + ) + (call $qa) + ) + ) + ) + (i32.store offset=12 + (get_local $12) + (get_local $3) + ) + (i32.store + (get_local $17) + (get_local $12) + ) + ) + (block + (set_local $12 + (i32.load offset=24 + (get_local $8) + ) + ) + (block $do-once6 + (if + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $8) + ) + ) + (get_local $8) + ) + (block + (if + (tee_local $9 + (i32.load + (tee_local $0 + (i32.add + (tee_local $4 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $9) + ) + (set_local $4 + (get_local $0) + ) + ) + (if + (tee_local $0 + (i32.load + (get_local $4) + ) + ) + (set_local $6 + (get_local $0) + ) + (block + (set_local $11 + (i32.const 0) + ) + (br $do-once6) + ) + ) + ) + (loop $while-in9 + (if + (tee_local $9 + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $9) + ) + (set_local $4 + (get_local $0) + ) + (br $while-in9) + ) + ) + (if + (tee_local $9 + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $9) + ) + (set_local $4 + (get_local $0) + ) + (br $while-in9) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $11 + (get_local $6) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $0 + (i32.load offset=8 + (get_local $8) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (tee_local $9 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + (get_local $8) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (block + (i32.store + (get_local $9) + (get_local $3) + ) + (i32.store + (get_local $4) + (get_local $0) + ) + (set_local $11 + (get_local $3) + ) + ) + (call $qa) + ) + ) + ) + ) + (if + (get_local $12) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (tee_local $7 + (i32.add + (i32.shl + (tee_local $3 + (i32.load offset=28 + (get_local $8) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + ) + (block + (i32.store + (get_local $7) + (get_local $11) + ) + (if + (i32.eqz + (get_local $11) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $12) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $3 + (i32.add + (get_local $12) + (i32.const 16) + ) + ) + ) + (get_local $8) + ) + (i32.store + (get_local $3) + (get_local $11) + ) + (i32.store offset=20 + (get_local $12) + (get_local $11) + ) + ) + (br_if $do-once4 + (i32.eqz + (get_local $11) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $11) + (tee_local $3 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (i32.store offset=24 + (get_local $11) + (get_local $12) + ) + (if + (tee_local $1 + (i32.load + (tee_local $7 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $3) + ) + (call $qa) + (block + (i32.store offset=16 + (get_local $11) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $11) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load offset=4 + (get_local $7) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store offset=20 + (get_local $11) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $11) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $5) + ) + (get_local $5) + ) + (if + (i32.eq + (get_local $2) + (i32.load + (i32.const 1228) + ) + ) + (block + (i32.store + (i32.const 1216) + (get_local $5) + ) + (return) + ) + (set_local $0 + (get_local $5) + ) + ) + ) + ) + (set_local $6 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.const 256) + ) + (block + (set_local $1 + (i32.add + (i32.shl + (get_local $6) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (if + (i32.and + (tee_local $7 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $5 + (i32.shl + (i32.const 1) + (get_local $6) + ) + ) + ) + (if + (i32.lt_u + (tee_local $7 + (i32.load + (tee_local $5 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $15 + (get_local $5) + ) + (set_local $13 + (get_local $7) + ) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $7) + (get_local $5) + ) + ) + (set_local $15 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $13 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $2) + ) + (i32.store offset=12 + (get_local $13) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $13) + ) + (i32.store offset=12 + (get_local $2) + (get_local $1) + ) + (return) + ) + ) + (set_local $5 + (i32.add + (i32.shl + (tee_local $6 + (if (result i32) + (tee_local $1 + (i32.shr_u + (get_local $0) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $0) + (i32.add + (tee_local $5 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $15 + (i32.shl + (get_local $1) + (tee_local $13 + (i32.and + (i32.shr_u + (i32.add + (get_local $1) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $13) + ) + (tee_local $15 + (i32.and + (i32.shr_u + (i32.add + (tee_local $7 + (i32.shl + (get_local $15) + (get_local $1) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $7) + (get_local $15) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $5) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + (i32.store offset=28 + (get_local $2) + (get_local $6) + ) + (i32.store offset=20 + (get_local $2) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $2) + (i32.const 0) + ) + (if + (i32.and + (tee_local $15 + (i32.load + (i32.const 1212) + ) + ) + (tee_local $7 + (i32.shl + (i32.const 1) + (get_local $6) + ) + ) + ) + (block + (set_local $13 + (i32.shl + (get_local $0) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $6) + (i32.const 1) + ) + ) + (i32.eq + (get_local $6) + (i32.const 31) + ) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $5) + ) + ) + (loop $while-in15 + (block $while-out14 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $1) + ) + (i32.const -8) + ) + (get_local $0) + ) + (block + (set_local $16 + (get_local $1) + ) + (set_local $0 + (i32.const 130) + ) + (br $while-out14) + ) + ) + (if + (tee_local $11 + (i32.load + (tee_local $6 + (i32.add + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $13) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $13 + (i32.shl + (get_local $13) + (i32.const 1) + ) + ) + (set_local $1 + (get_local $11) + ) + (br $while-in15) + ) + (block + (set_local $18 + (get_local $6) + ) + (set_local $19 + (get_local $1) + ) + (set_local $0 + (i32.const 127) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (i32.const 127) + ) + (if + (i32.lt_u + (get_local $18) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $18) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $19) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (i32.const 130) + ) + (if + (i32.and + (i32.ge_u + (tee_local $13 + (i32.load + (tee_local $1 + (i32.add + (get_local $16) + (i32.const 8) + ) + ) + ) + ) + (tee_local $7 + (i32.load + (i32.const 1224) + ) + ) + ) + (i32.ge_u + (get_local $16) + (get_local $7) + ) + ) + (block + (i32.store offset=12 + (get_local $13) + (get_local $2) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $13) + ) + (i32.store offset=12 + (get_local $2) + (get_local $16) + ) + (i32.store offset=24 + (get_local $2) + (i32.const 0) + ) + ) + (call $qa) + ) + ) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $15) + (get_local $7) + ) + ) + (i32.store + (get_local $5) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $5) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + (i32.store + (i32.const 1240) + (tee_local $2 + (i32.add + (i32.load + (i32.const 1240) + ) + (i32.const -1) + ) + ) + ) + (if + (get_local $2) + (return) + (set_local $0 + (i32.const 1664) + ) + ) + (loop $while-in17 + (if + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (block + (set_local $0 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (br $while-in17) + ) + ) + ) + (i32.store + (i32.const 1240) + (i32.const -1) + ) + ) + (func $Ra (; 14 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (set_local $10 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 48) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 16) + ) + ) + (set_local $12 + (get_local $10) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $10) + (i32.const 32) + ) + ) + (tee_local $7 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $3) + (tee_local $9 + (i32.sub + (i32.load + (tee_local $13 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (get_local $7) + ) + ) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (get_local $2) + ) + (set_local $1 + (i32.add + (get_local $0) + (i32.const 60) + ) + ) + (set_local $7 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (set_local $4 + (get_local $3) + ) + (set_local $3 + (i32.const 2) + ) + (set_local $5 + (i32.add + (get_local $9) + (get_local $2) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eq + (get_local $5) + (tee_local $6 + (if (result i32) + (i32.load + (i32.const 1160) + ) + (block (result i32) + (call $ra + (i32.const 1) + (get_local $0) + ) + (i32.store + (get_local $12) + (i32.load + (get_local $1) + ) + ) + (i32.store offset=4 + (get_local $12) + (get_local $4) + ) + (i32.store offset=8 + (get_local $12) + (get_local $3) + ) + (set_local $9 + (call $Pa + (call $ya + (i32.const 146) + (get_local $12) + ) + ) + ) + (call $oa + (i32.const 0) + ) + (get_local $9) + ) + (block (result i32) + (i32.store + (get_local $11) + (i32.load + (get_local $1) + ) + ) + (i32.store offset=4 + (get_local $11) + (get_local $4) + ) + (i32.store offset=8 + (get_local $11) + (get_local $3) + ) + (call $Pa + (call $ya + (i32.const 146) + (get_local $11) + ) + ) + ) + ) + ) + ) + (block + (set_local $1 + (i32.const 6) + ) + (br $while-out) + ) + ) + (if + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (block + (set_local $16 + (get_local $4) + ) + (set_local $17 + (get_local $3) + ) + (set_local $1 + (i32.const 8) + ) + (br $while-out) + ) + ) + (set_local $9 + (i32.sub + (get_local $5) + (get_local $6) + ) + ) + (if + (i32.gt_u + (get_local $6) + (tee_local $14 + (i32.load offset=4 + (get_local $4) + ) + ) + ) + (block + (i32.store + (get_local $8) + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + ) + (i32.store + (get_local $13) + (get_local $5) + ) + (set_local $5 + (i32.load offset=12 + (get_local $4) + ) + ) + (set_local $6 + (i32.sub + (get_local $6) + (get_local $14) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + (set_local $5 + (if (result i32) + (i32.eq + (get_local $3) + (i32.const 2) + ) + (block (result i32) + (i32.store + (get_local $8) + (i32.add + (i32.load + (get_local $8) + ) + (get_local $6) + ) + ) + (set_local $3 + (i32.const 2) + ) + (get_local $14) + ) + (get_local $14) + ) + ) + ) + (i32.store + (get_local $4) + (i32.add + (i32.load + (get_local $4) + ) + (get_local $6) + ) + ) + (i32.store offset=4 + (get_local $4) + (i32.sub + (get_local $5) + (get_local $6) + ) + ) + (set_local $5 + (get_local $9) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 6) + ) + (block + (i32.store offset=16 + (get_local $0) + (i32.add + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.store + (get_local $8) + (tee_local $7 + (get_local $5) + ) + ) + (i32.store + (get_local $13) + (get_local $7) + ) + (set_local $15 + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 8) + ) + (block + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $13) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (set_local $15 + (if (result i32) + (i32.eq + (get_local $17) + (i32.const 2) + ) + (i32.const 0) + (i32.sub + (get_local $2) + (i32.load offset=4 + (get_local $16) + ) + ) + ) + ) + ) + ) + ) + (set_global $r + (get_local $10) + ) + (get_local $15) + ) + (func $Wa (; 15 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (if + (tee_local $5 + (i32.load + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $5) + ) + (set_local $7 + (i32.const 5) + ) + ) + (if + (call $Xa + (get_local $2) + ) + (set_local $4 + (i32.const 0) + ) + (block + (set_local $6 + (i32.load + (get_local $3) + ) + ) + (set_local $7 + (i32.const 5) + ) + ) + ) + ) + (block $label$break$a + (if + (i32.eq + (get_local $7) + (i32.const 5) + ) + (block + (if + (i32.lt_u + (i32.sub + (get_local $6) + (tee_local $3 + (i32.load + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 20) + ) + ) + ) + ) + ) + (get_local $1) + ) + (block + (set_local $4 + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (br $label$break$a) + ) + ) + (set_local $4 + (get_local $3) + ) + (block $label$break$b + (if + (i32.gt_s + (i32.load8_s offset=75 + (get_local $2) + ) + (i32.const -1) + ) + (block + (set_local $3 + (get_local $1) + ) + (loop $while-in + (if + (i32.eqz + (get_local $3) + ) + (block + (set_local $3 + (i32.const 0) + ) + (br $label$break$b) + ) + ) + (if + (i32.ne + (i32.load8_s + (i32.add + (get_local $0) + (tee_local $6 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + (i32.const 10) + ) + (block + (set_local $3 + (get_local $6) + ) + (br $while-in) + ) + ) + ) + (if + (i32.lt_u + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + (get_local $3) + ) + (block + (set_local $4 + (get_local $3) + ) + (br $label$break$a) + ) + ) + (set_local $1 + (i32.sub + (get_local $1) + (get_local $3) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (get_local $3) + ) + ) + (set_local $4 + (i32.load + (get_local $5) + ) + ) + ) + (set_local $3 + (i32.const 0) + ) + ) + ) + (drop + (call $jb + (get_local $4) + (get_local $0) + (get_local $1) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $1) + ) + ) + (set_local $4 + (i32.add + (get_local $3) + (get_local $1) + ) + ) + ) + ) + ) + (get_local $4) + ) + (func $Za (; 16 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (block $label$break$a + (if + (i32.and + (tee_local $3 + (get_local $0) + ) + (i32.const 3) + ) + (block + (set_local $4 + (get_local $3) + ) + (loop $while-in + (if + (i32.eqz + (i32.load8_s + (get_local $0) + ) + ) + (block + (set_local $5 + (get_local $4) + ) + (br $label$break$a) + ) + ) + (br_if $while-in + (i32.and + (tee_local $4 + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 3) + ) + ) + (set_local $1 + (get_local $0) + ) + (set_local $2 + (i32.const 4) + ) + ) + ) + (block + (set_local $1 + (get_local $0) + ) + (set_local $2 + (i32.const 4) + ) + ) + ) + ) + (if + (i32.eq + (get_local $2) + (i32.const 4) + ) + (block + (set_local $2 + (get_local $1) + ) + (loop $while-in1 + (if + (i32.and + (i32.xor + (i32.and + (tee_local $1 + (i32.load + (get_local $2) + ) + ) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $1) + (i32.const -16843009) + ) + ) + (set_local $0 + (get_local $2) + ) + (block + (set_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + (if + (i32.and + (get_local $1) + (i32.const 255) + ) + (block + (set_local $1 + (get_local $0) + ) + (loop $while-in3 + (if + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + (block + (set_local $1 + (get_local $0) + ) + (br $while-in3) + ) + ) + ) + ) + ) + (set_local $5 + (get_local $0) + ) + ) + ) + (i32.sub + (get_local $5) + (get_local $3) + ) + ) + (func $_a (; 17 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (block $do-once + (if + (get_local $0) + (block + (if + (i32.le_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (block + (set_local $1 + (call $$a + (get_local $0) + ) + ) + (br $do-once) + ) + ) + (set_local $2 + (i32.eqz + (call $Ya + (get_local $0) + ) + ) + ) + (set_local $1 + (call $$a + (get_local $0) + ) + ) + (if + (i32.eqz + (get_local $2) + ) + (call $Ta + (get_local $0) + ) + ) + ) + (block + (set_local $0 + (if (result i32) + (i32.load + (i32.const 1140) + ) + (call $_a + (i32.load + (i32.const 1140) + ) + ) + (i32.const 0) + ) + ) + (call $pa + (i32.const 1188) + ) + (if + (tee_local $2 + (i32.load + (i32.const 1184) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (set_local $0 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (get_local $1) + ) + (i32.const -1) + ) + (call $Ya + (get_local $1) + ) + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.load offset=20 + (get_local $1) + ) + (i32.load offset=28 + (get_local $1) + ) + ) + (set_local $2 + (i32.or + (call $$a + (get_local $1) + ) + (get_local $2) + ) + ) + ) + (if + (get_local $0) + (call $Ta + (get_local $1) + ) + ) + (br_if $while-in + (tee_local $1 + (i32.load offset=56 + (get_local $1) + ) + ) + ) + ) + ) + (set_local $2 + (get_local $0) + ) + ) + (call $xa + (i32.const 1188) + ) + (set_local $1 + (get_local $2) + ) + ) + ) + ) + (get_local $1) + ) + (func $ab (; 18 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $5 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 16) + ) + ) + (i32.store8 + (tee_local $6 + (get_local $5) + ) + (tee_local $9 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $3) + ) + (set_local $8 + (i32.const 4) + ) + ) + (if + (call $Xa + (get_local $0) + ) + (set_local $4 + (i32.const -1) + ) + (block + (set_local $7 + (i32.load + (get_local $2) + ) + ) + (set_local $8 + (i32.const 4) + ) + ) + ) + ) + (block $do-once + (if + (i32.eq + (get_local $8) + (i32.const 4) + ) + (block + (if + (i32.lt_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (get_local $7) + ) + (if + (i32.ne + (tee_local $4 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (i32.load8_s offset=75 + (get_local $0) + ) + ) + (block + (i32.store + (get_local $3) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $2) + (get_local $9) + ) + (br $do-once) + ) + ) + ) + (set_local $4 + (if (result i32) + (i32.eq + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (get_local $6) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + (i32.const 1) + ) + (i32.load8_u + (get_local $6) + ) + (i32.const -1) + ) + ) + ) + ) + ) + (set_global $r + (get_local $5) + ) + (get_local $4) + ) + (func $$a (; 19 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (if + (i32.gt_u + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + (block + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.load + (get_local $3) + ) + (set_local $1 + (i32.const 3) + ) + (set_local $2 + (i32.const -1) + ) + ) + ) + (set_local $1 + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 3) + ) + (block + (if + (i32.lt_u + (tee_local $2 + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (tee_local $6 + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.sub + (get_local $2) + (get_local $6) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=40 + (get_local $0) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $4) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $2 + (i32.const 0) + ) + ) + ) + (get_local $2) + ) + (func $jb (; 20 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.ge_s + (get_local $2) + (i32.const 4096) + ) + (return + (call $va + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (set_local $3 + (get_local $0) + ) + (if + (i32.eq + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.and + (get_local $1) + (i32.const 3) + ) + ) + (block + (loop $while-in + (if + (i32.and + (get_local $0) + (i32.const 3) + ) + (block + (if + (i32.eqz + (get_local $2) + ) + (return + (get_local $3) + ) + ) + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (loop $while-in1 + (if + (i32.ge_s + (get_local $2) + (i32.const 4) + ) + (block + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (get_local $3) + ) + (func $gb (; 21 ;) + (nop) + ) + (func $hb (; 22 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (if + (i32.ge_s + (get_local $2) + (i32.const 20) + ) + (block + (set_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (if + (tee_local $3 + (i32.and + (get_local $0) + (i32.const 3) + ) + ) + (block + (set_local $3 + (i32.sub + (i32.add + (get_local $0) + (i32.const 4) + ) + (get_local $3) + ) + ) + (loop $while-in + (if + (i32.lt_s + (get_local $0) + (get_local $3) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (set_local $3 + (i32.or + (i32.or + (i32.or + (get_local $1) + (i32.shl + (get_local $1) + (i32.const 8) + ) + ) + (i32.shl + (get_local $1) + (i32.const 16) + ) + ) + (i32.shl + (get_local $1) + (i32.const 24) + ) + ) + ) + (set_local $5 + (i32.and + (get_local $4) + (i32.const -4) + ) + ) + (loop $while-in1 + (if + (i32.lt_s + (get_local $0) + (get_local $5) + ) + (block + (i32.store + (get_local $0) + (get_local $3) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.lt_s + (get_local $0) + (get_local $4) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $db (; 23 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (set_local $3 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (tee_local $1 + (i32.load + (i32.const 1024) + ) + ) + ) + (i32.const -1) + ) + (call $Ya + (get_local $1) + ) + (i32.const 0) + ) + ) + (set_local $0 + (block $do-once (result i32) + (if (result i32) + (i32.lt_s + (i32.add + (call $bb + (get_local $0) + (call $Za + (get_local $0) + ) + (i32.const 1) + (tee_local $2 + (get_local $1) + ) + ) + (i32.const -1) + ) + (i32.const 0) + ) + (i32.const 1) + (block (result i32) + (if + (i32.ne + (i32.load8_s offset=75 + (get_local $1) + ) + (i32.const 10) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $1) + ) + ) + (block + (i32.store + (get_local $2) + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $0) + (i32.const 10) + ) + (br $do-once + (i32.const 0) + ) + ) + ) + ) + (i32.lt_s + (call $ab + (get_local $1) + (i32.const 10) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (if + (get_local $3) + (call $Ta + (get_local $1) + ) + ) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (func $Xa (; 24 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $2 + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 74) + ) + ) + ) + ) + (i32.store8 + (get_local $1) + (i32.or + (i32.add + (get_local $2) + (i32.const 255) + ) + (get_local $2) + ) + ) + (tee_local $0 + (if (result i32) + (i32.and + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.const 8) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.or + (get_local $2) + (i32.const 32) + ) + ) + (i32.const -1) + ) + (block (result i32) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=28 + (get_local $0) + (tee_local $1 + (i32.load offset=44 + (get_local $0) + ) + ) + ) + (i32.store offset=20 + (get_local $0) + (get_local $1) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (get_local $1) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (func $bb (; 25 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.mul + (get_local $2) + (get_local $1) + ) + ) + (if + (i32.gt_s + (i32.load offset=76 + (get_local $3) + ) + (i32.const -1) + ) + (block + (set_local $5 + (i32.eqz + (call $Ya + (get_local $3) + ) + ) + ) + (set_local $0 + (call $Wa + (get_local $0) + (get_local $4) + (get_local $3) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (call $Ta + (get_local $3) + ) + ) + ) + (set_local $0 + (call $Wa + (get_local $0) + (get_local $4) + (get_local $3) + ) + ) + ) + (if + (i32.ne + (get_local $0) + (get_local $4) + ) + (set_local $2 + (if (result i32) + (get_local $1) + (i32.div_u + (get_local $0) + (get_local $1) + ) + (i32.const 0) + ) + ) + ) + (get_local $2) + ) + (func $Ua (; 26 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 32) + ) + ) + (i32.store + (tee_local $3 + (get_local $4) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + (i32.store offset=16 + (get_local $3) + (get_local $2) + ) + (set_local $0 + (if (result i32) + (i32.lt_s + (call $Pa + (call $ua + (i32.const 140) + (get_local $3) + ) + ) + (i32.const 0) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.const -1) + ) + (i32.const -1) + ) + (i32.load + (get_local $0) + ) + ) + ) + (set_global $r + (get_local $4) + ) + (get_local $0) + ) + (func $Va (; 27 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 80) + ) + ) + (set_local $3 + (get_local $4) + ) + (i32.store offset=36 + (get_local $0) + (i32.const 3) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 64) + ) + ) + (block + (i32.store + (get_local $3) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 21505) + ) + (i32.store offset=8 + (get_local $3) + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + (if + (call $wa + (i32.const 54) + (get_local $3) + ) + (i32.store8 offset=75 + (get_local $0) + (i32.const -1) + ) + ) + ) + ) + (set_local $3 + (call $Ra + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (set_global $r + (get_local $4) + ) + (get_local $3) + ) + (func $Oa (; 28 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 16) + ) + ) + (i32.store + (tee_local $2 + (get_local $1) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (set_local $0 + (call $Pa + (call $sa + (i32.const 6) + (get_local $2) + ) + ) + ) + (set_global $r + (get_local $1) + ) + (get_local $0) + ) + (func $Pa (; 29 ;) (param $0 i32) (result i32) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const -4096) + ) + (block (result i32) + (i32.store + (call $Qa) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + (get_local $0) + ) + ) + (func $Qa (; 30 ;) (result i32) + (if (result i32) + (i32.load + (i32.const 1160) + ) + (i32.load offset=64 + (call $ib) + ) + (i32.const 1204) + ) + ) + (func $lb (; 31 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call_indirect (type $FUNCSIG$iiii) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.add + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (func $Ea (; 32 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (get_local $0) + ) + ) + (set_global $r + (i32.and + (i32.add + (get_global $r) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $ob (; 33 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $ja + (i32.const 1) + ) + (i32.const 0) + ) + (func $Ia (; 34 ;) (param $0 i32) (param $1 i32) + (if + (i32.eqz + (get_global $v) + ) + (block + (set_global $v + (get_local $0) + ) + (set_global $w + (get_local $1) + ) + ) + ) + ) + (func $kb (; 35 ;) (param $0 i32) (param $1 i32) (result i32) + (call_indirect (type $FUNCSIG$ii) + (get_local $1) + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + ) + (func $Sa (; 36 ;) (param $0 i32) + (if + (i32.eqz + (i32.load offset=68 + (get_local $0) + ) + ) + (call $Ta + (get_local $0) + ) + ) + ) + (func $mb (; 37 ;) (param $0 i32) (param $1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $1) + (i32.add + (i32.and + (get_local $0) + (i32.const 1) + ) + (i32.const 6) + ) + ) + ) + (func $Ha (; 38 ;) (param $0 i32) (param $1 i32) + (set_global $r + (get_local $0) + ) + (set_global $s + (get_local $1) + ) + ) + (func $nb (; 39 ;) (param $0 i32) (result i32) + (call $ja + (i32.const 0) + ) + (i32.const 0) + ) + (func $Na (; 40 ;) (result i32) + (drop + (call $db + (i32.const 1144) + ) + ) + (i32.const 0) + ) + (func $Ya (; 41 ;) (param $0 i32) (result i32) + (i32.const 0) + ) + (func $Ta (; 42 ;) (param $0 i32) + (nop) + ) + (func $pb (; 43 ;) (param $0 i32) + (call $ja + (i32.const 2) + ) + ) + (func $La (; 44 ;) (param $0 i32) + (set_global $K + (get_local $0) + ) + ) + (func $Ga (; 45 ;) (param $0 i32) + (set_global $r + (get_local $0) + ) + ) + (func $Ma (; 46 ;) (result i32) + (get_global $K) + ) + (func $Fa (; 47 ;) (result i32) + (get_global $r) + ) + (func $ib (; 48 ;) (result i32) + (i32.const 0) + ) + (func $__growWasmMemory (; 49 ;) (param $newSize i32) (result i32) + (grow_memory + (get_local $newSize) + ) + ) +) diff --git a/src/binaryen/test/memorygrowth.fromasm.clamp b/src/binaryen/test/memorygrowth.fromasm.clamp new file mode 100644 index 0000000000..7345d440e0 --- /dev/null +++ b/src/binaryen/test/memorygrowth.fromasm.clamp @@ -0,0 +1,9821 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (import "env" "STACKTOP" (global $r$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $s$asm2wasm$import i32)) + (import "env" "abort" (func $ja (param i32))) + (import "env" "_pthread_cleanup_pop" (func $oa (param i32))) + (import "env" "___lock" (func $pa (param i32))) + (import "env" "_abort" (func $qa)) + (import "env" "_pthread_cleanup_push" (func $ra (param i32 i32))) + (import "env" "___syscall6" (func $sa (param i32 i32) (result i32))) + (import "env" "_sbrk" (func $ta (param i32) (result i32))) + (import "env" "___syscall140" (func $ua (param i32 i32) (result i32))) + (import "env" "_emscripten_memcpy_big" (func $va (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $wa (param i32 i32) (result i32))) + (import "env" "___unlock" (func $xa (param i32))) + (import "env" "___syscall146" (func $ya (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 8 8 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $r (mut i32) (get_global $r$asm2wasm$import)) + (global $s (mut i32) (get_global $s$asm2wasm$import)) + (global $v (mut i32) (i32.const 0)) + (global $w (mut i32) (i32.const 0)) + (global $K (mut i32) (i32.const 0)) + (elem (get_global $tableBase) $nb $Oa $ob $Va $Ua $Ra $pb $Sa) + (data (get_global $memoryBase) "memorygrowth.asm.js") + (export "_free" (func $fb)) + (export "_main" (func $Na)) + (export "_pthread_self" (func $ib)) + (export "_memset" (func $hb)) + (export "_malloc" (func $eb)) + (export "_memcpy" (func $jb)) + (export "_fflush" (func $_a)) + (export "___errno_location" (func $Qa)) + (export "runPostSets" (func $gb)) + (export "stackAlloc" (func $Ea)) + (export "stackSave" (func $Fa)) + (export "stackRestore" (func $Ga)) + (export "establishStackSpace" (func $Ha)) + (export "setThrew" (func $Ia)) + (export "setTempRet0" (func $La)) + (export "getTempRet0" (func $Ma)) + (export "dynCall_ii" (func $kb)) + (export "dynCall_iiii" (func $lb)) + (export "dynCall_vi" (func $mb)) + (export "__growWasmMemory" (func $__growWasmMemory)) + (func $eb (; 12 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (local $47 i32) + (local $48 i32) + (local $49 i32) + (local $50 i32) + (local $51 i32) + (local $52 i32) + (local $53 i32) + (local $54 i32) + (block $folding-inner0 + (set_local $25 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 16) + ) + ) + (set_local $13 + (get_local $25) + ) + (block $do-once + (if + (i32.lt_u + (get_local $0) + (i32.const 245) + ) + (block + (if + (i32.and + (tee_local $5 + (i32.shr_u + (tee_local $4 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $0 + (i32.shr_u + (tee_local $3 + (select + (i32.const 16) + (i32.and + (i32.add + (get_local $0) + (i32.const 11) + ) + (i32.const -8) + ) + (i32.lt_u + (get_local $0) + (i32.const 11) + ) + ) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 3) + ) + (block + (set_local $6 + (i32.load + (tee_local $3 + (i32.add + (tee_local $12 + (i32.load + (tee_local $14 + (i32.add + (tee_local $8 + (i32.add + (i32.shl + (tee_local $0 + (i32.add + (i32.xor + (i32.and + (get_local $5) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $0) + ) + ) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $8) + (get_local $6) + ) + (i32.store + (i32.const 1208) + (i32.and + (get_local $4) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $0) + ) + (i32.const -1) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + ) + (get_local $12) + ) + (block + (i32.store + (get_local $7) + (get_local $8) + ) + (i32.store + (get_local $14) + (get_local $6) + ) + ) + (call $qa) + ) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.or + (tee_local $6 + (i32.shl + (get_local $0) + (i32.const 3) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $14 + (i32.add + (i32.add + (get_local $12) + (get_local $6) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $14) + ) + (i32.const 1) + ) + ) + (set_global $r + (get_local $25) + ) + (return + (get_local $3) + ) + ) + ) + (if + (i32.gt_u + (get_local $3) + (tee_local $14 + (i32.load + (i32.const 1216) + ) + ) + ) + (block + (if + (get_local $5) + (block + (set_local $8 + (i32.and + (i32.shr_u + (tee_local $6 + (i32.add + (i32.and + (tee_local $8 + (i32.and + (i32.shl + (get_local $5) + (get_local $0) + ) + (i32.or + (tee_local $6 + (i32.shl + (i32.const 2) + (get_local $0) + ) + ) + (i32.sub + (i32.const 0) + (get_local $6) + ) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $8) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $8 + (i32.load + (tee_local $7 + (i32.add + (tee_local $9 + (i32.load + (tee_local $12 + (i32.add + (tee_local $1 + (i32.add + (i32.shl + (tee_local $16 + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $6 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $6) + (get_local $8) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $8) + ) + (tee_local $7 + (i32.and + (i32.shr_u + (tee_local $9 + (i32.shr_u + (get_local $7) + (get_local $6) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $9 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $9) + (get_local $7) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $12 + (i32.shr_u + (get_local $1) + (get_local $9) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $12) + (get_local $1) + ) + ) + ) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $1) + (get_local $8) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (get_local $4) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $16) + ) + (i32.const -1) + ) + ) + ) + (set_local $34 + (get_local $14) + ) + ) + (block + (if + (i32.lt_u + (get_local $8) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $6 + (i32.add + (get_local $8) + (i32.const 12) + ) + ) + ) + (get_local $9) + ) + (block + (i32.store + (get_local $6) + (get_local $1) + ) + (i32.store + (get_local $12) + (get_local $8) + ) + (set_local $34 + (i32.load + (i32.const 1216) + ) + ) + ) + (call $qa) + ) + ) + ) + (i32.store offset=4 + (get_local $9) + (i32.or + (get_local $3) + (i32.const 3) + ) + ) + (i32.store offset=4 + (tee_local $12 + (i32.add + (get_local $9) + (get_local $3) + ) + ) + (i32.or + (tee_local $8 + (i32.sub + (i32.shl + (get_local $16) + (i32.const 3) + ) + (get_local $3) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $12) + (get_local $8) + ) + (get_local $8) + ) + (if + (get_local $34) + (block + (set_local $1 + (i32.load + (i32.const 1228) + ) + ) + (set_local $4 + (i32.add + (i32.shl + (tee_local $14 + (i32.shr_u + (get_local $34) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (if + (i32.and + (tee_local $0 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $5 + (i32.shl + (i32.const 1) + (get_local $14) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $5 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $40 + (get_local $5) + ) + (set_local $35 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $0) + (get_local $5) + ) + ) + (set_local $40 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (set_local $35 + (get_local $4) + ) + ) + ) + (i32.store + (get_local $40) + (get_local $1) + ) + (i32.store offset=12 + (get_local $35) + (get_local $1) + ) + (i32.store offset=8 + (get_local $1) + (get_local $35) + ) + (i32.store offset=12 + (get_local $1) + (get_local $4) + ) + ) + ) + (i32.store + (i32.const 1216) + (get_local $8) + ) + (i32.store + (i32.const 1228) + (get_local $12) + ) + (set_global $r + (get_local $25) + ) + (return + (get_local $7) + ) + ) + ) + (if + (tee_local $12 + (i32.load + (i32.const 1212) + ) + ) + (block + (set_local $12 + (i32.and + (i32.shr_u + (tee_local $8 + (i32.add + (i32.and + (get_local $12) + (i32.sub + (i32.const 0) + (get_local $12) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $0 + (i32.sub + (i32.and + (i32.load offset=4 + (tee_local $14 + (i32.load + (i32.add + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $8 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $8) + (get_local $12) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $12) + ) + (tee_local $4 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $4) + (get_local $8) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $0 + (i32.shr_u + (get_local $1) + (get_local $4) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $5 + (i32.shr_u + (get_local $0) + (get_local $1) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $5) + (get_local $0) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + ) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $5 + (get_local $14) + ) + (set_local $1 + (get_local $14) + ) + (loop $while-in + (block $while-out + (if + (tee_local $14 + (i32.load offset=16 + (get_local $5) + ) + ) + (set_local $6 + (get_local $14) + ) + (if + (tee_local $4 + (i32.load offset=20 + (get_local $5) + ) + ) + (set_local $6 + (get_local $4) + ) + (block + (set_local $6 + (get_local $0) + ) + (set_local $2 + (get_local $1) + ) + (br $while-out) + ) + ) + ) + (set_local $4 + (i32.lt_u + (tee_local $14 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $6) + ) + (i32.const -8) + ) + (get_local $3) + ) + ) + (get_local $0) + ) + ) + (set_local $0 + (select + (get_local $14) + (get_local $0) + (get_local $4) + ) + ) + (set_local $5 + (get_local $6) + ) + (set_local $1 + (select + (get_local $6) + (get_local $1) + (get_local $4) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (get_local $2) + (tee_local $1 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (if + (i32.ge_u + (get_local $2) + (tee_local $5 + (i32.add + (get_local $2) + (get_local $3) + ) + ) + ) + (call $qa) + ) + (set_local $0 + (i32.load offset=24 + (get_local $2) + ) + ) + (block $do-once4 + (if + (i32.eq + (tee_local $7 + (i32.load offset=12 + (get_local $2) + ) + ) + (get_local $2) + ) + (block + (if + (tee_local $16 + (i32.load + (tee_local $9 + (i32.add + (get_local $2) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $14 + (get_local $16) + ) + (set_local $4 + (get_local $9) + ) + ) + (if + (i32.eqz + (tee_local $14 + (i32.load + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + ) + (block + (set_local $23 + (i32.const 0) + ) + (br $do-once4) + ) + ) + ) + (loop $while-in7 + (if + (tee_local $16 + (i32.load + (tee_local $9 + (i32.add + (get_local $14) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $14 + (get_local $16) + ) + (set_local $4 + (get_local $9) + ) + (br $while-in7) + ) + ) + (if + (tee_local $16 + (i32.load + (tee_local $9 + (i32.add + (get_local $14) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $14 + (get_local $16) + ) + (set_local $4 + (get_local $9) + ) + (br $while-in7) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (get_local $1) + ) + (call $qa) + (block + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $23 + (get_local $14) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $9 + (i32.load offset=8 + (get_local $2) + ) + ) + (get_local $1) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (tee_local $16 + (i32.add + (get_local $9) + (i32.const 12) + ) + ) + ) + (get_local $2) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + ) + (get_local $2) + ) + (block + (i32.store + (get_local $16) + (get_local $7) + ) + (i32.store + (get_local $4) + (get_local $9) + ) + (set_local $23 + (get_local $7) + ) + ) + (call $qa) + ) + ) + ) + ) + (block $do-once8 + (if + (get_local $0) + (block + (if + (i32.eq + (get_local $2) + (i32.load + (tee_local $1 + (i32.add + (i32.shl + (tee_local $7 + (i32.load offset=28 + (get_local $2) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + ) + (block + (i32.store + (get_local $1) + (get_local $23) + ) + (if + (i32.eqz + (get_local $23) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $7) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + (get_local $2) + ) + (i32.store + (get_local $7) + (get_local $23) + ) + (i32.store offset=20 + (get_local $0) + (get_local $23) + ) + ) + (br_if $do-once8 + (i32.eqz + (get_local $23) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $23) + (tee_local $7 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (i32.store offset=24 + (get_local $23) + (get_local $0) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $2) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $7) + ) + (call $qa) + (block + (i32.store offset=16 + (get_local $23) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $23) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load offset=20 + (get_local $2) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store offset=20 + (get_local $23) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $23) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $6) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $2) + (i32.or + (tee_local $0 + (i32.add + (get_local $6) + (get_local $3) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $1 + (i32.add + (i32.add + (get_local $2) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $1) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $5) + (i32.or + (get_local $6) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $5) + (get_local $6) + ) + (get_local $6) + ) + (if + (tee_local $1 + (i32.load + (i32.const 1216) + ) + ) + (block + (set_local $0 + (i32.load + (i32.const 1228) + ) + ) + (set_local $1 + (i32.add + (i32.shl + (tee_local $7 + (i32.shr_u + (get_local $1) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (if + (i32.and + (tee_local $9 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $4 + (i32.shl + (i32.const 1) + (get_local $7) + ) + ) + ) + (if + (i32.lt_u + (tee_local $9 + (i32.load + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $41 + (get_local $4) + ) + (set_local $27 + (get_local $9) + ) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $9) + (get_local $4) + ) + ) + (set_local $41 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $27 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $41) + (get_local $0) + ) + (i32.store offset=12 + (get_local $27) + (get_local $0) + ) + (i32.store offset=8 + (get_local $0) + (get_local $27) + ) + (i32.store offset=12 + (get_local $0) + (get_local $1) + ) + ) + ) + (i32.store + (i32.const 1216) + (get_local $6) + ) + (i32.store + (i32.const 1228) + (get_local $5) + ) + ) + ) + (set_global $r + (get_local $25) + ) + (return + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + (set_local $5 + (get_local $3) + ) + ) + ) + (set_local $5 + (get_local $3) + ) + ) + ) + (if + (i32.gt_u + (get_local $0) + (i32.const -65) + ) + (set_local $5 + (i32.const -1) + ) + (block + (set_local $0 + (i32.and + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 11) + ) + ) + (i32.const -8) + ) + ) + (if + (tee_local $9 + (i32.load + (i32.const 1212) + ) + ) + (block + (set_local $4 + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (block $label$break$a + (if + (tee_local $12 + (i32.load + (i32.add + (i32.shl + (tee_local $27 + (if (result i32) + (tee_local $7 + (i32.shr_u + (get_local $1) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $0) + (i32.add + (tee_local $12 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $7 + (i32.and + (i32.shr_u + (i32.add + (tee_local $16 + (i32.shl + (get_local $7) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (get_local $7) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $1) + ) + (tee_local $16 + (i32.and + (i32.shr_u + (i32.add + (tee_local $14 + (i32.shl + (get_local $16) + (get_local $7) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $14) + (get_local $16) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $12) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + (block + (set_local $16 + (get_local $4) + ) + (set_local $14 + (i32.const 0) + ) + (set_local $1 + (i32.shl + (get_local $0) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $27) + (i32.const 1) + ) + ) + (i32.eq + (get_local $27) + (i32.const 31) + ) + ) + ) + ) + (set_local $7 + (get_local $12) + ) + (set_local $8 + (i32.const 0) + ) + (loop $while-in14 + (if + (i32.lt_u + (tee_local $12 + (i32.sub + (tee_local $3 + (i32.and + (i32.load offset=4 + (get_local $7) + ) + (i32.const -8) + ) + ) + (get_local $0) + ) + ) + (get_local $16) + ) + (if + (i32.eq + (get_local $3) + (get_local $0) + ) + (block + (set_local $29 + (get_local $12) + ) + (set_local $28 + (get_local $7) + ) + (set_local $32 + (get_local $7) + ) + (set_local $7 + (i32.const 90) + ) + (br $label$break$a) + ) + (block + (set_local $16 + (get_local $12) + ) + (set_local $8 + (get_local $7) + ) + ) + ) + ) + (set_local $3 + (select + (get_local $14) + (tee_local $12 + (i32.load offset=20 + (get_local $7) + ) + ) + (i32.or + (i32.eqz + (get_local $12) + ) + (i32.eq + (get_local $12) + (tee_local $7 + (i32.load + (i32.add + (i32.add + (get_local $7) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $1) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + ) + (if + (tee_local $12 + (i32.eqz + (get_local $7) + ) + ) + (block + (set_local $36 + (get_local $16) + ) + (set_local $5 + (get_local $3) + ) + (set_local $33 + (get_local $8) + ) + (set_local $7 + (i32.const 86) + ) + ) + (block + (set_local $14 + (get_local $3) + ) + (set_local $1 + (i32.shl + (get_local $1) + (i32.xor + (i32.and + (get_local $12) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (br $while-in14) + ) + ) + ) + ) + (block + (set_local $36 + (get_local $4) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $33 + (i32.const 0) + ) + (set_local $7 + (i32.const 86) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 86) + ) + (if + (tee_local $3 + (if (result i32) + (i32.and + (i32.eqz + (get_local $5) + ) + (i32.eqz + (get_local $33) + ) + ) + (block (result i32) + (if + (i32.eqz + (tee_local $4 + (i32.and + (get_local $9) + (i32.or + (tee_local $12 + (i32.shl + (i32.const 2) + (get_local $27) + ) + ) + (i32.sub + (i32.const 0) + (get_local $12) + ) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $0) + ) + (br $do-once) + ) + ) + (set_local $4 + (i32.and + (i32.shr_u + (tee_local $12 + (i32.add + (i32.and + (get_local $4) + (i32.sub + (i32.const 0) + (get_local $4) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $12 + (i32.and + (i32.shr_u + (tee_local $3 + (i32.shr_u + (get_local $12) + (get_local $4) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $4) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $5 + (i32.shr_u + (get_local $3) + (get_local $12) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $5 + (i32.and + (i32.shr_u + (tee_local $8 + (i32.shr_u + (get_local $5) + (get_local $3) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $8 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $8) + (get_local $5) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $1) + (get_local $8) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + (get_local $5) + ) + ) + (block + (set_local $29 + (get_local $36) + ) + (set_local $28 + (get_local $3) + ) + (set_local $32 + (get_local $33) + ) + (set_local $7 + (i32.const 90) + ) + ) + (block + (set_local $18 + (get_local $36) + ) + (set_local $10 + (get_local $33) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 90) + ) + (loop $while-in16 + (set_local $7 + (i32.const 0) + ) + (set_local $1 + (i32.lt_u + (tee_local $8 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $28) + ) + (i32.const -8) + ) + (get_local $0) + ) + ) + (get_local $29) + ) + ) + (set_local $5 + (select + (get_local $8) + (get_local $29) + (get_local $1) + ) + ) + (set_local $8 + (select + (get_local $28) + (get_local $32) + (get_local $1) + ) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $28) + ) + ) + (block + (set_local $29 + (get_local $5) + ) + (set_local $28 + (get_local $1) + ) + (set_local $32 + (get_local $8) + ) + (br $while-in16) + ) + ) + (if + (tee_local $28 + (i32.load offset=20 + (get_local $28) + ) + ) + (block + (set_local $29 + (get_local $5) + ) + (set_local $32 + (get_local $8) + ) + (br $while-in16) + ) + (block + (set_local $18 + (get_local $5) + ) + (set_local $10 + (get_local $8) + ) + ) + ) + ) + ) + (if + (get_local $10) + (if + (i32.lt_u + (get_local $18) + (i32.sub + (i32.load + (i32.const 1216) + ) + (get_local $0) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (tee_local $9 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (if + (i32.ge_u + (get_local $10) + (tee_local $8 + (i32.add + (get_local $10) + (get_local $0) + ) + ) + ) + (call $qa) + ) + (set_local $5 + (i32.load offset=24 + (get_local $10) + ) + ) + (block $do-once17 + (if + (i32.eq + (tee_local $1 + (i32.load offset=12 + (get_local $10) + ) + ) + (get_local $10) + ) + (block + (if + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $10) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $14 + (get_local $4) + ) + (set_local $1 + (get_local $3) + ) + ) + (if + (tee_local $14 + (i32.load + (tee_local $12 + (i32.add + (get_local $10) + (i32.const 16) + ) + ) + ) + ) + (set_local $1 + (get_local $12) + ) + (block + (set_local $22 + (i32.const 0) + ) + (br $do-once17) + ) + ) + ) + (loop $while-in20 + (if + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $14) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $14 + (get_local $4) + ) + (set_local $1 + (get_local $3) + ) + (br $while-in20) + ) + ) + (if + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $14) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $14 + (get_local $4) + ) + (set_local $1 + (get_local $3) + ) + (br $while-in20) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $9) + ) + (call $qa) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $22 + (get_local $14) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $3 + (i32.load offset=8 + (get_local $10) + ) + ) + (get_local $9) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 12) + ) + ) + ) + (get_local $10) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $12 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (get_local $10) + ) + (block + (i32.store + (get_local $4) + (get_local $1) + ) + (i32.store + (get_local $12) + (get_local $3) + ) + (set_local $22 + (get_local $1) + ) + ) + (call $qa) + ) + ) + ) + ) + (block $do-once21 + (if + (get_local $5) + (block + (if + (i32.eq + (get_local $10) + (i32.load + (tee_local $9 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $10) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + ) + (block + (i32.store + (get_local $9) + (get_local $22) + ) + (if + (i32.eqz + (get_local $22) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $5) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + (get_local $10) + ) + (i32.store + (get_local $1) + (get_local $22) + ) + (i32.store offset=20 + (get_local $5) + (get_local $22) + ) + ) + (br_if $do-once21 + (i32.eqz + (get_local $22) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $22) + (tee_local $1 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (i32.store offset=24 + (get_local $22) + (get_local $5) + ) + (if + (tee_local $9 + (i32.load offset=16 + (get_local $10) + ) + ) + (if + (i32.lt_u + (get_local $9) + (get_local $1) + ) + (call $qa) + (block + (i32.store offset=16 + (get_local $22) + (get_local $9) + ) + (i32.store offset=24 + (get_local $9) + (get_local $22) + ) + ) + ) + ) + (if + (tee_local $9 + (i32.load offset=20 + (get_local $10) + ) + ) + (if + (i32.lt_u + (get_local $9) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store offset=20 + (get_local $22) + (get_local $9) + ) + (i32.store offset=24 + (get_local $9) + (get_local $22) + ) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.lt_u + (get_local $18) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $10) + (i32.or + (tee_local $5 + (i32.add + (get_local $18) + (get_local $0) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $9 + (i32.add + (i32.add + (get_local $10) + (get_local $5) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $9) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $10) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $18) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $8) + (get_local $18) + ) + (get_local $18) + ) + (set_local $9 + (i32.shr_u + (get_local $18) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $18) + (i32.const 256) + ) + (block + (set_local $5 + (i32.add + (i32.shl + (get_local $9) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $3 + (i32.shl + (i32.const 1) + (get_local $9) + ) + ) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.load + (tee_local $3 + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $19 + (get_local $3) + ) + (set_local $6 + (get_local $1) + ) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $1) + (get_local $3) + ) + ) + (set_local $19 + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + (set_local $6 + (get_local $5) + ) + ) + ) + (i32.store + (get_local $19) + (get_local $8) + ) + (i32.store offset=12 + (get_local $6) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $6) + ) + (i32.store offset=12 + (get_local $8) + (get_local $5) + ) + (br $do-once25) + ) + ) + (set_local $12 + (i32.add + (i32.shl + (tee_local $16 + (if (result i32) + (tee_local $5 + (i32.shr_u + (get_local $18) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $18) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $18) + (i32.add + (tee_local $12 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $5 + (i32.and + (i32.shr_u + (i32.add + (tee_local $3 + (i32.shl + (get_local $5) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (get_local $5) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $1) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (i32.add + (tee_local $9 + (i32.shl + (get_local $3) + (get_local $5) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $9) + (get_local $3) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $12) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + (i32.store offset=28 + (get_local $8) + (get_local $16) + ) + (i32.store offset=4 + (tee_local $3 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (i32.const 1212) + ) + ) + (tee_local $9 + (i32.shl + (i32.const 1) + (get_local $16) + ) + ) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $3) + (get_local $9) + ) + ) + (i32.store + (get_local $12) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $12) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + (br $do-once25) + ) + ) + (set_local $9 + (i32.shl + (get_local $18) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $16) + (i32.const 1) + ) + ) + (i32.eq + (get_local $16) + (i32.const 31) + ) + ) + ) + ) + (set_local $3 + (i32.load + (get_local $12) + ) + ) + (loop $while-in28 + (block $while-out27 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const -8) + ) + (get_local $18) + ) + (block + (set_local $17 + (get_local $3) + ) + (set_local $7 + (i32.const 148) + ) + (br $while-out27) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $12 + (i32.add + (i32.add + (get_local $3) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $9) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $9 + (i32.shl + (get_local $9) + (i32.const 1) + ) + ) + (set_local $3 + (get_local $1) + ) + (br $while-in28) + ) + (block + (set_local $21 + (get_local $12) + ) + (set_local $15 + (get_local $3) + ) + (set_local $7 + (i32.const 145) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 145) + ) + (if + (i32.lt_u + (get_local $21) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $21) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $15) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 148) + ) + (if + (i32.and + (i32.ge_u + (tee_local $9 + (i32.load + (tee_local $3 + (i32.add + (get_local $17) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 1224) + ) + ) + ) + (i32.ge_u + (get_local $17) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $9) + (get_local $8) + ) + (i32.store + (get_local $3) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $9) + ) + (i32.store offset=12 + (get_local $8) + (get_local $17) + ) + (i32.store offset=24 + (get_local $8) + (i32.const 0) + ) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + (set_global $r + (get_local $25) + ) + (return + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + ) + (set_local $5 + (get_local $0) + ) + ) + (set_local $5 + (get_local $0) + ) + ) + ) + (set_local $5 + (get_local $0) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (tee_local $10 + (i32.load + (i32.const 1216) + ) + ) + (get_local $5) + ) + (block + (set_local $15 + (i32.load + (i32.const 1228) + ) + ) + (if + (i32.gt_u + (tee_local $17 + (i32.sub + (get_local $10) + (get_local $5) + ) + ) + (i32.const 15) + ) + (block + (i32.store + (i32.const 1228) + (tee_local $21 + (i32.add + (get_local $15) + (get_local $5) + ) + ) + ) + (i32.store + (i32.const 1216) + (get_local $17) + ) + (i32.store offset=4 + (get_local $21) + (i32.or + (get_local $17) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $21) + (get_local $17) + ) + (get_local $17) + ) + (i32.store offset=4 + (get_local $15) + (i32.or + (get_local $5) + (i32.const 3) + ) + ) + ) + (block + (i32.store + (i32.const 1216) + (i32.const 0) + ) + (i32.store + (i32.const 1228) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $15) + (i32.or + (get_local $10) + (i32.const 3) + ) + ) + (i32.store + (tee_local $17 + (i32.add + (i32.add + (get_local $15) + (get_local $10) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $17) + ) + (i32.const 1) + ) + ) + ) + ) + (br $folding-inner0) + ) + ) + (if + (i32.gt_u + (tee_local $15 + (i32.load + (i32.const 1220) + ) + ) + (get_local $5) + ) + (block + (i32.store + (i32.const 1220) + (tee_local $17 + (i32.sub + (get_local $15) + (get_local $5) + ) + ) + ) + (i32.store + (i32.const 1232) + (tee_local $10 + (i32.add + (tee_local $15 + (i32.load + (i32.const 1232) + ) + ) + (get_local $5) + ) + ) + ) + (i32.store offset=4 + (get_local $10) + (i32.or + (get_local $17) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $15) + (i32.or + (get_local $5) + (i32.const 3) + ) + ) + (br $folding-inner0) + ) + ) + (if + (i32.eqz + (i32.load + (i32.const 1680) + ) + ) + (block + (i32.store + (i32.const 1688) + (i32.const 4096) + ) + (i32.store + (i32.const 1684) + (i32.const 4096) + ) + (i32.store + (i32.const 1692) + (i32.const -1) + ) + (i32.store + (i32.const 1696) + (i32.const -1) + ) + (i32.store + (i32.const 1700) + (i32.const 0) + ) + (i32.store + (i32.const 1652) + (i32.const 0) + ) + (i32.store + (get_local $13) + (tee_local $15 + (i32.xor + (i32.and + (get_local $13) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + ) + (i32.store + (i32.const 1680) + (get_local $15) + ) + ) + ) + (set_local $15 + (i32.add + (get_local $5) + (i32.const 48) + ) + ) + (if + (i32.le_u + (tee_local $13 + (i32.and + (tee_local $10 + (i32.add + (tee_local $13 + (i32.load + (i32.const 1688) + ) + ) + (tee_local $17 + (i32.add + (get_local $5) + (i32.const 47) + ) + ) + ) + ) + (tee_local $21 + (i32.sub + (i32.const 0) + (get_local $13) + ) + ) + ) + ) + (get_local $5) + ) + (block + (set_global $r + (get_local $25) + ) + (return + (i32.const 0) + ) + ) + ) + (if + (tee_local $18 + (i32.load + (i32.const 1648) + ) + ) + (if + (i32.or + (i32.le_u + (tee_local $6 + (i32.add + (tee_local $16 + (i32.load + (i32.const 1640) + ) + ) + (get_local $13) + ) + ) + (get_local $16) + ) + (i32.gt_u + (get_local $6) + (get_local $18) + ) + ) + (block + (set_global $r + (get_local $25) + ) + (return + (i32.const 0) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $7 + (block $label$break$b (result i32) + (if (result i32) + (i32.and + (i32.load + (i32.const 1652) + ) + (i32.const 4) + ) + (i32.const 188) + (block (result i32) + (block $label$break$c + (if + (tee_local $18 + (i32.load + (i32.const 1232) + ) + ) + (block + (set_local $6 + (i32.const 1656) + ) + (loop $while-in32 + (block $while-out31 + (if + (i32.le_u + (tee_local $16 + (i32.load + (get_local $6) + ) + ) + (get_local $18) + ) + (if + (i32.gt_u + (i32.add + (get_local $16) + (i32.load + (tee_local $19 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + ) + ) + (get_local $18) + ) + (block + (set_local $0 + (get_local $6) + ) + (set_local $4 + (get_local $19) + ) + (br $while-out31) + ) + ) + ) + (br_if $while-in32 + (tee_local $6 + (i32.load offset=8 + (get_local $6) + ) + ) + ) + (set_local $7 + (i32.const 171) + ) + (br $label$break$c) + ) + ) + (if + (i32.lt_u + (tee_local $6 + (i32.and + (i32.sub + (get_local $10) + (i32.load + (i32.const 1220) + ) + ) + (get_local $21) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (tee_local $19 + (call $ta + (get_local $6) + ) + ) + (i32.add + (i32.load + (get_local $0) + ) + (i32.load + (get_local $4) + ) + ) + ) + (if + (i32.ne + (get_local $19) + (i32.const -1) + ) + (block + (set_local $20 + (get_local $19) + ) + (set_local $26 + (get_local $6) + ) + (br $label$break$b + (i32.const 191) + ) + ) + ) + (block + (set_local $11 + (get_local $19) + ) + (set_local $2 + (get_local $6) + ) + (set_local $7 + (i32.const 181) + ) + ) + ) + ) + ) + (set_local $7 + (i32.const 171) + ) + ) + ) + (block $do-once33 + (if + (i32.eq + (get_local $7) + (i32.const 171) + ) + (if + (i32.ne + (tee_local $18 + (call $ta + (i32.const 0) + ) + ) + (i32.const -1) + ) + (block + (set_local $3 + (if (result i32) + (i32.and + (tee_local $19 + (i32.add + (tee_local $6 + (i32.load + (i32.const 1684) + ) + ) + (i32.const -1) + ) + ) + (tee_local $0 + (get_local $18) + ) + ) + (i32.add + (i32.sub + (get_local $13) + (get_local $0) + ) + (i32.and + (i32.add + (get_local $19) + (get_local $0) + ) + (i32.sub + (i32.const 0) + (get_local $6) + ) + ) + ) + (get_local $13) + ) + ) + (set_local $0 + (i32.add + (tee_local $6 + (i32.load + (i32.const 1640) + ) + ) + (get_local $3) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $3) + (get_local $5) + ) + (i32.lt_u + (get_local $3) + (i32.const 2147483647) + ) + ) + (block + (if + (tee_local $19 + (i32.load + (i32.const 1648) + ) + ) + (br_if $do-once33 + (i32.or + (i32.le_u + (get_local $0) + (get_local $6) + ) + (i32.gt_u + (get_local $0) + (get_local $19) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $19 + (call $ta + (get_local $3) + ) + ) + (get_local $18) + ) + (block + (set_local $20 + (get_local $18) + ) + (set_local $26 + (get_local $3) + ) + (br $label$break$b + (i32.const 191) + ) + ) + (block + (set_local $11 + (get_local $19) + ) + (set_local $2 + (get_local $3) + ) + (set_local $7 + (i32.const 181) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (block $label$break$d + (if + (i32.eq + (get_local $7) + (i32.const 181) + ) + (block + (set_local $19 + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $15) + (get_local $2) + ) + (i32.and + (i32.lt_u + (get_local $2) + (i32.const 2147483647) + ) + (i32.ne + (get_local $11) + (i32.const -1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.and + (i32.add + (i32.sub + (get_local $17) + (get_local $2) + ) + (tee_local $18 + (i32.load + (i32.const 1688) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $18) + ) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (call $ta + (get_local $0) + ) + (i32.const -1) + ) + (block + (drop + (call $ta + (get_local $19) + ) + ) + (br $label$break$d) + ) + (set_local $1 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + ) + (set_local $1 + (get_local $2) + ) + ) + (set_local $1 + (get_local $2) + ) + ) + (if + (i32.ne + (get_local $11) + (i32.const -1) + ) + (block + (set_local $20 + (get_local $11) + ) + (set_local $26 + (get_local $1) + ) + (br $label$break$b + (i32.const 191) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 1652) + (i32.or + (i32.load + (i32.const 1652) + ) + (i32.const 4) + ) + ) + (i32.const 188) + ) + ) + ) + ) + (i32.const 188) + ) + (if + (i32.lt_u + (get_local $13) + (i32.const 2147483647) + ) + (if + (i32.and + (i32.lt_u + (tee_local $1 + (call $ta + (get_local $13) + ) + ) + (tee_local $13 + (call $ta + (i32.const 0) + ) + ) + ) + (i32.and + (i32.ne + (get_local $1) + (i32.const -1) + ) + (i32.ne + (get_local $13) + (i32.const -1) + ) + ) + ) + (if + (i32.gt_u + (tee_local $11 + (i32.sub + (get_local $13) + (get_local $1) + ) + ) + (i32.add + (get_local $5) + (i32.const 40) + ) + ) + (block + (set_local $20 + (get_local $1) + ) + (set_local $26 + (get_local $11) + ) + (set_local $7 + (i32.const 191) + ) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 191) + ) + (block + (i32.store + (i32.const 1640) + (tee_local $11 + (i32.add + (i32.load + (i32.const 1640) + ) + (get_local $26) + ) + ) + ) + (if + (i32.gt_u + (get_local $11) + (i32.load + (i32.const 1644) + ) + ) + (i32.store + (i32.const 1644) + (get_local $11) + ) + ) + (block $do-once38 + (if + (tee_local $11 + (i32.load + (i32.const 1232) + ) + ) + (block + (set_local $2 + (i32.const 1656) + ) + (loop $do-in41 + (block $do-out40 + (if + (i32.eq + (get_local $20) + (i32.add + (tee_local $1 + (i32.load + (get_local $2) + ) + ) + (tee_local $17 + (i32.load + (tee_local $13 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + ) + ) + ) + ) + (block + (set_local $48 + (get_local $1) + ) + (set_local $49 + (get_local $13) + ) + (set_local $50 + (get_local $17) + ) + (set_local $51 + (get_local $2) + ) + (set_local $7 + (i32.const 201) + ) + (br $do-out40) + ) + ) + (br_if $do-in41 + (tee_local $2 + (i32.load offset=8 + (get_local $2) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 201) + ) + (if + (i32.eqz + (i32.and + (i32.load offset=12 + (get_local $51) + ) + (i32.const 8) + ) + ) + (if + (i32.and + (i32.lt_u + (get_local $11) + (get_local $20) + ) + (i32.ge_u + (get_local $11) + (get_local $48) + ) + ) + (block + (i32.store + (get_local $49) + (i32.add + (get_local $50) + (get_local $26) + ) + ) + (set_local $2 + (i32.add + (get_local $11) + (tee_local $17 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $2 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $2) + (i32.const 7) + ) + ) + ) + ) + ) + (set_local $13 + (i32.add + (i32.sub + (get_local $26) + (get_local $17) + ) + (i32.load + (i32.const 1220) + ) + ) + ) + (i32.store + (i32.const 1232) + (get_local $2) + ) + (i32.store + (i32.const 1220) + (get_local $13) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $13) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $2) + (get_local $13) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + (br $do-once38) + ) + ) + ) + ) + (set_local $14 + (if (result i32) + (i32.lt_u + (get_local $20) + (tee_local $13 + (i32.load + (i32.const 1224) + ) + ) + ) + (block (result i32) + (i32.store + (i32.const 1224) + (get_local $20) + ) + (get_local $20) + ) + (get_local $13) + ) + ) + (set_local $13 + (i32.add + (get_local $20) + (get_local $26) + ) + ) + (set_local $2 + (i32.const 1656) + ) + (loop $while-in43 + (block $while-out42 + (if + (i32.eq + (i32.load + (get_local $2) + ) + (get_local $13) + ) + (block + (set_local $52 + (get_local $2) + ) + (set_local $42 + (get_local $2) + ) + (set_local $7 + (i32.const 209) + ) + (br $while-out42) + ) + ) + (br_if $while-in43 + (tee_local $2 + (i32.load offset=8 + (get_local $2) + ) + ) + ) + (set_local $30 + (i32.const 1656) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 209) + ) + (if + (i32.and + (i32.load offset=12 + (get_local $42) + ) + (i32.const 8) + ) + (set_local $30 + (i32.const 1656) + ) + (block + (i32.store + (get_local $52) + (get_local $20) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $42) + (i32.const 4) + ) + ) + (i32.add + (i32.load + (get_local $2) + ) + (get_local $26) + ) + ) + (set_local $17 + (i32.add + (get_local $20) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $2 + (i32.add + (get_local $20) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $2) + (i32.const 7) + ) + ) + ) + ) + (set_local $1 + (i32.add + (get_local $13) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $2 + (i32.add + (get_local $13) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $2) + (i32.const 7) + ) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $17) + (get_local $5) + ) + ) + (set_local $15 + (i32.sub + (i32.sub + (get_local $1) + (get_local $17) + ) + (get_local $5) + ) + ) + (i32.store offset=4 + (get_local $17) + (i32.or + (get_local $5) + (i32.const 3) + ) + ) + (block $do-once44 + (if + (i32.eq + (get_local $1) + (get_local $11) + ) + (block + (i32.store + (i32.const 1220) + (tee_local $3 + (i32.add + (i32.load + (i32.const 1220) + ) + (get_local $15) + ) + ) + ) + (i32.store + (i32.const 1232) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + ) + (block + (if + (i32.eq + (get_local $1) + (i32.load + (i32.const 1228) + ) + ) + (block + (i32.store + (i32.const 1216) + (tee_local $3 + (i32.add + (i32.load + (i32.const 1216) + ) + (get_local $15) + ) + ) + ) + (i32.store + (i32.const 1228) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $3) + ) + (get_local $3) + ) + (br $do-once44) + ) + ) + (if + (i32.eq + (i32.and + (tee_local $3 + (i32.load offset=4 + (get_local $1) + ) + ) + (i32.const 3) + ) + (i32.const 1) + ) + (block + (set_local $4 + (i32.and + (get_local $3) + (i32.const -8) + ) + ) + (set_local $0 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (block $label$break$e + (if + (i32.lt_u + (get_local $3) + (i32.const 256) + ) + (block + (set_local $10 + (i32.load offset=12 + (get_local $1) + ) + ) + (block $do-once47 + (if + (i32.ne + (tee_local $21 + (i32.load offset=8 + (get_local $1) + ) + ) + (tee_local $19 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $21) + (get_local $14) + ) + (call $qa) + ) + (br_if $do-once47 + (i32.eq + (i32.load offset=12 + (get_local $21) + ) + (get_local $1) + ) + ) + (call $qa) + ) + ) + ) + (if + (i32.eq + (get_local $10) + (get_local $21) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (i32.load + (i32.const 1208) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $0) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$e) + ) + ) + (block $do-once49 + (if + (i32.eq + (get_local $10) + (get_local $19) + ) + (set_local $43 + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (get_local $14) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (block + (set_local $43 + (get_local $0) + ) + (br $do-once49) + ) + ) + (call $qa) + ) + ) + ) + (i32.store offset=12 + (get_local $21) + (get_local $10) + ) + (i32.store + (get_local $43) + (get_local $21) + ) + ) + (block + (set_local $19 + (i32.load offset=24 + (get_local $1) + ) + ) + (block $do-once51 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $1) + ) + ) + (get_local $1) + ) + (block + (if + (tee_local $16 + (i32.load + (tee_local $6 + (i32.add + (tee_local $18 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $16) + ) + (set_local $0 + (get_local $6) + ) + ) + (if + (tee_local $22 + (i32.load + (get_local $18) + ) + ) + (block + (set_local $3 + (get_local $22) + ) + (set_local $0 + (get_local $18) + ) + ) + (block + (set_local $24 + (i32.const 0) + ) + (br $do-once51) + ) + ) + ) + (loop $while-in54 + (if + (tee_local $16 + (i32.load + (tee_local $6 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $16) + ) + (set_local $0 + (get_local $6) + ) + (br $while-in54) + ) + ) + (if + (tee_local $16 + (i32.load + (tee_local $6 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $16) + ) + (set_local $0 + (get_local $6) + ) + (br $while-in54) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $14) + ) + (call $qa) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $24 + (get_local $3) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $6 + (i32.load offset=8 + (get_local $1) + ) + ) + (get_local $14) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (tee_local $16 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + ) + (get_local $1) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $18 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (block + (i32.store + (get_local $16) + (get_local $0) + ) + (i32.store + (get_local $18) + (get_local $6) + ) + (set_local $24 + (get_local $0) + ) + ) + (call $qa) + ) + ) + ) + ) + (br_if $label$break$e + (i32.eqz + (get_local $19) + ) + ) + (block $do-once55 + (if + (i32.eq + (get_local $1) + (i32.load + (tee_local $21 + (i32.add + (i32.shl + (tee_local $0 + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + ) + (block + (i32.store + (get_local $21) + (get_local $24) + ) + (br_if $do-once55 + (get_local $24) + ) + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $0) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$e) + ) + (block + (if + (i32.lt_u + (get_local $19) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $10 + (i32.add + (get_local $19) + (i32.const 16) + ) + ) + ) + (get_local $1) + ) + (i32.store + (get_local $10) + (get_local $24) + ) + (i32.store offset=20 + (get_local $19) + (get_local $24) + ) + ) + (br_if $label$break$e + (i32.eqz + (get_local $24) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $24) + (tee_local $0 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (i32.store offset=24 + (get_local $24) + (get_local $19) + ) + (if + (tee_local $10 + (i32.load + (tee_local $21 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $10) + (get_local $0) + ) + (call $qa) + (block + (i32.store offset=16 + (get_local $24) + (get_local $10) + ) + (i32.store offset=24 + (get_local $10) + (get_local $24) + ) + ) + ) + ) + (br_if $label$break$e + (i32.eqz + (tee_local $10 + (i32.load offset=4 + (get_local $21) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $10) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store offset=20 + (get_local $24) + (get_local $10) + ) + (i32.store offset=24 + (get_local $10) + (get_local $24) + ) + ) + ) + ) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (get_local $4) + ) + ) + (set_local $15 + (i32.add + (get_local $4) + (get_local $15) + ) + ) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.and + (i32.load + (get_local $0) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $15) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $15) + ) + (get_local $15) + ) + (set_local $0 + (i32.shr_u + (get_local $15) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $15) + (i32.const 256) + ) + (block + (set_local $3 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (block $do-once59 + (if + (i32.and + (tee_local $10 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (block + (if + (i32.ge_u + (tee_local $19 + (i32.load + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (block + (set_local $44 + (get_local $0) + ) + (set_local $37 + (get_local $19) + ) + (br $do-once59) + ) + ) + (call $qa) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $10) + (get_local $0) + ) + ) + (set_local $44 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $37 + (get_local $3) + ) + ) + ) + ) + (i32.store + (get_local $44) + (get_local $2) + ) + (i32.store offset=12 + (get_local $37) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $37) + ) + (i32.store offset=12 + (get_local $2) + (get_local $3) + ) + (br $do-once44) + ) + ) + (set_local $0 + (i32.add + (i32.shl + (tee_local $4 + (block $do-once61 (result i32) + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $15) + (i32.const 8) + ) + ) + (block (result i32) + (drop + (br_if $do-once61 + (i32.const 31) + (i32.gt_u + (get_local $15) + (i32.const 16777215) + ) + ) + ) + (i32.or + (i32.and + (i32.shr_u + (get_local $15) + (i32.add + (tee_local $6 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $19 + (i32.and + (i32.shr_u + (i32.add + (tee_local $4 + (i32.shl + (get_local $0) + (tee_local $10 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $10) + ) + (tee_local $4 + (i32.and + (i32.shr_u + (i32.add + (tee_local $0 + (i32.shl + (get_local $4) + (get_local $19) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $0) + (get_local $4) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $6) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + (i32.store offset=28 + (get_local $2) + (get_local $4) + ) + (i32.store offset=4 + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (i32.const 1212) + ) + ) + (tee_local $6 + (i32.shl + (i32.const 1) + (get_local $4) + ) + ) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $3) + (get_local $6) + ) + ) + (i32.store + (get_local $0) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $0) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + (br $do-once44) + ) + ) + (set_local $6 + (i32.shl + (get_local $15) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $4) + (i32.const 1) + ) + ) + (i32.eq + (get_local $4) + (i32.const 31) + ) + ) + ) + ) + (set_local $3 + (i32.load + (get_local $0) + ) + ) + (loop $while-in64 + (block $while-out63 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const -8) + ) + (get_local $15) + ) + (block + (set_local $38 + (get_local $3) + ) + (set_local $7 + (i32.const 279) + ) + (br $while-out63) + ) + ) + (if + (tee_local $4 + (i32.load + (tee_local $0 + (i32.add + (i32.add + (get_local $3) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $6) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $6 + (i32.shl + (get_local $6) + (i32.const 1) + ) + ) + (set_local $3 + (get_local $4) + ) + (br $while-in64) + ) + (block + (set_local $45 + (get_local $0) + ) + (set_local $53 + (get_local $3) + ) + (set_local $7 + (i32.const 276) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 276) + ) + (if + (i32.lt_u + (get_local $45) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $45) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $53) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 279) + ) + (if + (i32.and + (i32.ge_u + (tee_local $6 + (i32.load + (tee_local $3 + (i32.add + (get_local $38) + (i32.const 8) + ) + ) + ) + ) + (tee_local $4 + (i32.load + (i32.const 1224) + ) + ) + ) + (i32.ge_u + (get_local $38) + (get_local $4) + ) + ) + (block + (i32.store offset=12 + (get_local $6) + (get_local $2) + ) + (i32.store + (get_local $3) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $6) + ) + (i32.store offset=12 + (get_local $2) + (get_local $38) + ) + (i32.store offset=24 + (get_local $2) + (i32.const 0) + ) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + (set_global $r + (get_local $25) + ) + (return + (i32.add + (get_local $17) + (i32.const 8) + ) + ) + ) + ) + ) + (loop $while-in66 + (block $while-out65 + (if + (i32.le_u + (tee_local $2 + (i32.load + (get_local $30) + ) + ) + (get_local $11) + ) + (if + (i32.gt_u + (tee_local $15 + (i32.add + (get_local $2) + (i32.load offset=4 + (get_local $30) + ) + ) + ) + (get_local $11) + ) + (block + (set_local $0 + (get_local $15) + ) + (br $while-out65) + ) + ) + ) + (set_local $30 + (i32.load offset=8 + (get_local $30) + ) + ) + (br $while-in66) + ) + ) + (set_local $15 + (i32.add + (tee_local $17 + (i32.add + (get_local $0) + (i32.const -47) + ) + ) + (i32.const 8) + ) + ) + (set_local $2 + (i32.add + (tee_local $17 + (select + (get_local $11) + (tee_local $2 + (i32.add + (get_local $17) + (select + (i32.and + (i32.sub + (i32.const 0) + (get_local $15) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $15) + (i32.const 7) + ) + ) + ) + ) + (i32.lt_u + (get_local $2) + (tee_local $15 + (i32.add + (get_local $11) + (i32.const 16) + ) + ) + ) + ) + ) + (i32.const 8) + ) + ) + (i32.store + (i32.const 1232) + (tee_local $1 + (i32.add + (get_local $20) + (tee_local $13 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $20) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 1220) + (tee_local $6 + (i32.sub + (i32.add + (get_local $26) + (i32.const -40) + ) + (get_local $13) + ) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $6) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $1) + (get_local $6) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + (i32.store + (tee_local $6 + (i32.add + (get_local $17) + (i32.const 4) + ) + ) + (i32.const 27) + ) + (i32.store + (get_local $2) + (i32.load + (i32.const 1656) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.load + (i32.const 1660) + ) + ) + (i32.store offset=8 + (get_local $2) + (i32.load + (i32.const 1664) + ) + ) + (i32.store offset=12 + (get_local $2) + (i32.load + (i32.const 1668) + ) + ) + (i32.store + (i32.const 1656) + (get_local $20) + ) + (i32.store + (i32.const 1660) + (get_local $26) + ) + (i32.store + (i32.const 1668) + (i32.const 0) + ) + (i32.store + (i32.const 1664) + (get_local $2) + ) + (set_local $2 + (i32.add + (get_local $17) + (i32.const 24) + ) + ) + (loop $do-in68 + (i32.store + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (i32.const 7) + ) + (br_if $do-in68 + (i32.lt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (get_local $0) + ) + ) + ) + (if + (i32.ne + (get_local $17) + (get_local $11) + ) + (block + (i32.store + (get_local $6) + (i32.and + (i32.load + (get_local $6) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $11) + (i32.or + (tee_local $2 + (i32.sub + (get_local $17) + (get_local $11) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (get_local $17) + (get_local $2) + ) + (set_local $1 + (i32.shr_u + (get_local $2) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $2) + (i32.const 256) + ) + (block + (set_local $13 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $4 + (i32.shl + (i32.const 1) + (get_local $1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.load + (tee_local $4 + (i32.add + (get_local $13) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $46 + (get_local $4) + ) + (set_local $39 + (get_local $3) + ) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $3) + (get_local $4) + ) + ) + (set_local $46 + (i32.add + (get_local $13) + (i32.const 8) + ) + ) + (set_local $39 + (get_local $13) + ) + ) + ) + (i32.store + (get_local $46) + (get_local $11) + ) + (i32.store offset=12 + (get_local $39) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $39) + ) + (i32.store offset=12 + (get_local $11) + (get_local $13) + ) + (br $do-once38) + ) + ) + (set_local $0 + (i32.add + (i32.shl + (tee_local $3 + (if (result i32) + (tee_local $13 + (i32.shr_u + (get_local $2) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $2) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $2) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $13 + (i32.and + (i32.shr_u + (i32.add + (tee_local $4 + (i32.shl + (get_local $13) + (tee_local $3 + (i32.and + (i32.shr_u + (i32.add + (get_local $13) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $3) + ) + (tee_local $4 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $4) + (get_local $13) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $4) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + (i32.store offset=28 + (get_local $11) + (get_local $3) + ) + (i32.store offset=20 + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $15) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $4 + (i32.load + (i32.const 1212) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $3) + ) + ) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $4) + (get_local $1) + ) + ) + (i32.store + (get_local $0) + (get_local $11) + ) + (i32.store offset=24 + (get_local $11) + (get_local $0) + ) + (i32.store offset=12 + (get_local $11) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $11) + ) + (br $do-once38) + ) + ) + (set_local $1 + (i32.shl + (get_local $2) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $3) + (i32.const 1) + ) + ) + (i32.eq + (get_local $3) + (i32.const 31) + ) + ) + ) + ) + (set_local $4 + (i32.load + (get_local $0) + ) + ) + (loop $while-in70 + (block $while-out69 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $4) + ) + (i32.const -8) + ) + (get_local $2) + ) + (block + (set_local $31 + (get_local $4) + ) + (set_local $7 + (i32.const 305) + ) + (br $while-out69) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (i32.add + (get_local $4) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $1) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $1 + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + (set_local $4 + (get_local $3) + ) + (br $while-in70) + ) + (block + (set_local $47 + (get_local $0) + ) + (set_local $54 + (get_local $4) + ) + (set_local $7 + (i32.const 302) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 302) + ) + (if + (i32.lt_u + (get_local $47) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $47) + (get_local $11) + ) + (i32.store offset=24 + (get_local $11) + (get_local $54) + ) + (i32.store offset=12 + (get_local $11) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $11) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 305) + ) + (if + (i32.and + (i32.ge_u + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (get_local $31) + (i32.const 8) + ) + ) + ) + ) + (tee_local $2 + (i32.load + (i32.const 1224) + ) + ) + ) + (i32.ge_u + (get_local $31) + (get_local $2) + ) + ) + (block + (i32.store offset=12 + (get_local $1) + (get_local $11) + ) + (i32.store + (get_local $4) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $1) + ) + (i32.store offset=12 + (get_local $11) + (get_local $31) + ) + (i32.store offset=24 + (get_local $11) + (i32.const 0) + ) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + (block + (if + (i32.or + (i32.eqz + (tee_local $1 + (i32.load + (i32.const 1224) + ) + ) + ) + (i32.lt_u + (get_local $20) + (get_local $1) + ) + ) + (i32.store + (i32.const 1224) + (get_local $20) + ) + ) + (i32.store + (i32.const 1656) + (get_local $20) + ) + (i32.store + (i32.const 1660) + (get_local $26) + ) + (i32.store + (i32.const 1668) + (i32.const 0) + ) + (i32.store + (i32.const 1244) + (i32.load + (i32.const 1680) + ) + ) + (i32.store + (i32.const 1240) + (i32.const -1) + ) + (set_local $1 + (i32.const 0) + ) + (loop $do-in + (i32.store offset=12 + (tee_local $13 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (get_local $13) + ) + (i32.store offset=8 + (get_local $13) + (get_local $13) + ) + (br_if $do-in + (i32.ne + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 32) + ) + ) + ) + (i32.store + (i32.const 1232) + (tee_local $1 + (i32.add + (get_local $20) + (tee_local $13 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $20) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 1220) + (tee_local $2 + (i32.sub + (i32.add + (get_local $26) + (i32.const -40) + ) + (get_local $13) + ) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $2) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $1) + (get_local $2) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + ) + ) + ) + (if + (i32.gt_u + (tee_local $11 + (i32.load + (i32.const 1220) + ) + ) + (get_local $5) + ) + (block + (i32.store + (i32.const 1220) + (tee_local $31 + (i32.sub + (get_local $11) + (get_local $5) + ) + ) + ) + (i32.store + (i32.const 1232) + (tee_local $7 + (i32.add + (tee_local $11 + (i32.load + (i32.const 1232) + ) + ) + (get_local $5) + ) + ) + ) + (i32.store offset=4 + (get_local $7) + (i32.or + (get_local $31) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $11) + (i32.or + (get_local $5) + (i32.const 3) + ) + ) + (set_global $r + (get_local $25) + ) + (return + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + ) + ) + ) + ) + (i32.store + (call $Qa) + (i32.const 12) + ) + (set_global $r + (get_local $25) + ) + (return + (i32.const 0) + ) + ) + (set_global $r + (get_local $25) + ) + (i32.add + (get_local $15) + (i32.const 8) + ) + ) + (func $fb (; 13 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (if + (i32.eqz + (get_local $0) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $0) + (i32.const -8) + ) + ) + (tee_local $14 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (if + (i32.eq + (tee_local $0 + (i32.and + (tee_local $4 + (i32.load + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + ) + (i32.const 3) + ) + ) + (i32.const 1) + ) + (call $qa) + ) + (set_local $8 + (i32.add + (get_local $1) + (tee_local $7 + (i32.and + (get_local $4) + (i32.const -8) + ) + ) + ) + ) + (block $do-once + (if + (i32.and + (get_local $4) + (i32.const 1) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + ) + (block + (set_local $10 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eqz + (get_local $0) + ) + (return) + ) + (set_local $7 + (i32.add + (get_local $10) + (get_local $7) + ) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.sub + (i32.const 0) + (get_local $10) + ) + ) + ) + (get_local $14) + ) + (call $qa) + ) + (if + (i32.eq + (get_local $1) + (i32.load + (i32.const 1228) + ) + ) + (block + (if + (i32.ne + (i32.and + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 3) + ) + (i32.const 3) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 1216) + (get_local $7) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $3) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $7) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $7) + ) + (get_local $7) + ) + (return) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $10) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $10) + (i32.const 256) + ) + (block + (set_local $0 + (i32.load offset=12 + (get_local $1) + ) + ) + (if + (i32.ne + (tee_local $10 + (i32.load offset=8 + (get_local $1) + ) + ) + (tee_local $4 + (i32.add + (i32.shl + (get_local $3) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (get_local $14) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $10) + ) + (get_local $1) + ) + (call $qa) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (get_local $10) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (i32.load + (i32.const 1208) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (get_local $0) + (get_local $4) + ) + (set_local $9 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $0) + (get_local $14) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (set_local $9 + (get_local $4) + ) + (call $qa) + ) + ) + ) + (i32.store offset=12 + (get_local $10) + (get_local $0) + ) + (i32.store + (get_local $9) + (get_local $10) + ) + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + (br $do-once) + ) + ) + (set_local $10 + (i32.load offset=24 + (get_local $1) + ) + ) + (block $do-once0 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $1) + ) + ) + (get_local $1) + ) + (block + (if + (tee_local $9 + (i32.load + (tee_local $3 + (i32.add + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $9) + ) + (set_local $4 + (get_local $3) + ) + ) + (if + (i32.eqz + (tee_local $0 + (i32.load + (get_local $4) + ) + ) + ) + (block + (set_local $5 + (i32.const 0) + ) + (br $do-once0) + ) + ) + ) + (loop $while-in + (if + (tee_local $9 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $9) + ) + (set_local $4 + (get_local $3) + ) + (br $while-in) + ) + ) + (if + (tee_local $9 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $9) + ) + (set_local $4 + (get_local $3) + ) + (br $while-in) + ) + (block + (set_local $12 + (get_local $0) + ) + (set_local $3 + (get_local $4) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $3) + (get_local $14) + ) + (call $qa) + (block + (i32.store + (get_local $3) + (i32.const 0) + ) + (set_local $5 + (get_local $12) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $3 + (i32.load offset=8 + (get_local $1) + ) + ) + (get_local $14) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (tee_local $9 + (i32.add + (get_local $3) + (i32.const 12) + ) + ) + ) + (get_local $1) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (block + (i32.store + (get_local $9) + (get_local $0) + ) + (i32.store + (get_local $4) + (get_local $3) + ) + (set_local $5 + (get_local $0) + ) + ) + (call $qa) + ) + ) + ) + ) + (if + (get_local $10) + (block + (if + (i32.eq + (get_local $1) + (i32.load + (tee_local $3 + (i32.add + (i32.shl + (tee_local $0 + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + ) + (block + (i32.store + (get_local $3) + (get_local $5) + ) + (if + (i32.eqz + (get_local $5) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $0) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $10) + (i32.const 16) + ) + ) + ) + (get_local $1) + ) + (i32.store + (get_local $0) + (get_local $5) + ) + (i32.store offset=20 + (get_local $10) + (get_local $5) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + (br $do-once) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $5) + (tee_local $0 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (i32.store offset=24 + (get_local $5) + (get_local $10) + ) + (if + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (get_local $0) + ) + (call $qa) + (block + (i32.store offset=16 + (get_local $5) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $5) + ) + ) + ) + ) + (if + (tee_local $4 + (i32.load offset=4 + (get_local $3) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store offset=20 + (get_local $5) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $5) + ) + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (get_local $2) + (get_local $8) + ) + (call $qa) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (tee_local $7 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 1) + ) + ) + (call $qa) + ) + (if + (i32.and + (get_local $1) + (i32.const 2) + ) + (block + (i32.store + (get_local $7) + (i32.and + (get_local $1) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $6) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $6) + ) + (get_local $6) + ) + (set_local $0 + (get_local $6) + ) + ) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 1232) + ) + ) + (block + (i32.store + (i32.const 1220) + (tee_local $5 + (i32.add + (i32.load + (i32.const 1220) + ) + (get_local $6) + ) + ) + ) + (i32.store + (i32.const 1232) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $2) + (i32.load + (i32.const 1228) + ) + ) + (return) + ) + (i32.store + (i32.const 1228) + (i32.const 0) + ) + (i32.store + (i32.const 1216) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 1228) + ) + ) + (block + (i32.store + (i32.const 1216) + (tee_local $5 + (i32.add + (i32.load + (i32.const 1216) + ) + (get_local $6) + ) + ) + ) + (i32.store + (i32.const 1228) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $5) + ) + (get_local $5) + ) + (return) + ) + ) + (set_local $5 + (i32.add + (i32.and + (get_local $1) + (i32.const -8) + ) + (get_local $6) + ) + ) + (set_local $14 + (i32.shr_u + (get_local $1) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.lt_u + (get_local $1) + (i32.const 256) + ) + (block + (set_local $3 + (i32.load offset=12 + (get_local $8) + ) + ) + (if + (i32.ne + (tee_local $12 + (i32.load offset=8 + (get_local $8) + ) + ) + (tee_local $4 + (i32.add + (i32.shl + (get_local $14) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $12) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $12) + ) + (get_local $8) + ) + (call $qa) + ) + ) + ) + (if + (i32.eq + (get_local $3) + (get_local $12) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (i32.load + (i32.const 1208) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $14) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.eq + (get_local $3) + (get_local $4) + ) + (set_local $17 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $3) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (set_local $17 + (get_local $4) + ) + (call $qa) + ) + ) + ) + (i32.store offset=12 + (get_local $12) + (get_local $3) + ) + (i32.store + (get_local $17) + (get_local $12) + ) + ) + (block + (set_local $12 + (i32.load offset=24 + (get_local $8) + ) + ) + (block $do-once6 + (if + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $8) + ) + ) + (get_local $8) + ) + (block + (if + (tee_local $9 + (i32.load + (tee_local $0 + (i32.add + (tee_local $4 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $9) + ) + (set_local $4 + (get_local $0) + ) + ) + (if + (tee_local $0 + (i32.load + (get_local $4) + ) + ) + (set_local $6 + (get_local $0) + ) + (block + (set_local $11 + (i32.const 0) + ) + (br $do-once6) + ) + ) + ) + (loop $while-in9 + (if + (tee_local $9 + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $9) + ) + (set_local $4 + (get_local $0) + ) + (br $while-in9) + ) + ) + (if + (tee_local $9 + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $9) + ) + (set_local $4 + (get_local $0) + ) + (br $while-in9) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $11 + (get_local $6) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $0 + (i32.load offset=8 + (get_local $8) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (tee_local $9 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + (get_local $8) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (block + (i32.store + (get_local $9) + (get_local $3) + ) + (i32.store + (get_local $4) + (get_local $0) + ) + (set_local $11 + (get_local $3) + ) + ) + (call $qa) + ) + ) + ) + ) + (if + (get_local $12) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (tee_local $7 + (i32.add + (i32.shl + (tee_local $3 + (i32.load offset=28 + (get_local $8) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + ) + (block + (i32.store + (get_local $7) + (get_local $11) + ) + (if + (i32.eqz + (get_local $11) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $12) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $3 + (i32.add + (get_local $12) + (i32.const 16) + ) + ) + ) + (get_local $8) + ) + (i32.store + (get_local $3) + (get_local $11) + ) + (i32.store offset=20 + (get_local $12) + (get_local $11) + ) + ) + (br_if $do-once4 + (i32.eqz + (get_local $11) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $11) + (tee_local $3 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (i32.store offset=24 + (get_local $11) + (get_local $12) + ) + (if + (tee_local $1 + (i32.load + (tee_local $7 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $3) + ) + (call $qa) + (block + (i32.store offset=16 + (get_local $11) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $11) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load offset=4 + (get_local $7) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store offset=20 + (get_local $11) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $11) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $5) + ) + (get_local $5) + ) + (if + (i32.eq + (get_local $2) + (i32.load + (i32.const 1228) + ) + ) + (block + (i32.store + (i32.const 1216) + (get_local $5) + ) + (return) + ) + (set_local $0 + (get_local $5) + ) + ) + ) + ) + (set_local $6 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.const 256) + ) + (block + (set_local $1 + (i32.add + (i32.shl + (get_local $6) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (if + (i32.and + (tee_local $7 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $5 + (i32.shl + (i32.const 1) + (get_local $6) + ) + ) + ) + (if + (i32.lt_u + (tee_local $7 + (i32.load + (tee_local $5 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $15 + (get_local $5) + ) + (set_local $13 + (get_local $7) + ) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $7) + (get_local $5) + ) + ) + (set_local $15 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $13 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $2) + ) + (i32.store offset=12 + (get_local $13) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $13) + ) + (i32.store offset=12 + (get_local $2) + (get_local $1) + ) + (return) + ) + ) + (set_local $5 + (i32.add + (i32.shl + (tee_local $6 + (if (result i32) + (tee_local $1 + (i32.shr_u + (get_local $0) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $0) + (i32.add + (tee_local $5 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $15 + (i32.shl + (get_local $1) + (tee_local $13 + (i32.and + (i32.shr_u + (i32.add + (get_local $1) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $13) + ) + (tee_local $15 + (i32.and + (i32.shr_u + (i32.add + (tee_local $7 + (i32.shl + (get_local $15) + (get_local $1) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $7) + (get_local $15) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $5) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + (i32.store offset=28 + (get_local $2) + (get_local $6) + ) + (i32.store offset=20 + (get_local $2) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $2) + (i32.const 0) + ) + (if + (i32.and + (tee_local $15 + (i32.load + (i32.const 1212) + ) + ) + (tee_local $7 + (i32.shl + (i32.const 1) + (get_local $6) + ) + ) + ) + (block + (set_local $13 + (i32.shl + (get_local $0) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $6) + (i32.const 1) + ) + ) + (i32.eq + (get_local $6) + (i32.const 31) + ) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $5) + ) + ) + (loop $while-in15 + (block $while-out14 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $1) + ) + (i32.const -8) + ) + (get_local $0) + ) + (block + (set_local $16 + (get_local $1) + ) + (set_local $0 + (i32.const 130) + ) + (br $while-out14) + ) + ) + (if + (tee_local $11 + (i32.load + (tee_local $6 + (i32.add + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $13) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $13 + (i32.shl + (get_local $13) + (i32.const 1) + ) + ) + (set_local $1 + (get_local $11) + ) + (br $while-in15) + ) + (block + (set_local $18 + (get_local $6) + ) + (set_local $19 + (get_local $1) + ) + (set_local $0 + (i32.const 127) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (i32.const 127) + ) + (if + (i32.lt_u + (get_local $18) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $18) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $19) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (i32.const 130) + ) + (if + (i32.and + (i32.ge_u + (tee_local $13 + (i32.load + (tee_local $1 + (i32.add + (get_local $16) + (i32.const 8) + ) + ) + ) + ) + (tee_local $7 + (i32.load + (i32.const 1224) + ) + ) + ) + (i32.ge_u + (get_local $16) + (get_local $7) + ) + ) + (block + (i32.store offset=12 + (get_local $13) + (get_local $2) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $13) + ) + (i32.store offset=12 + (get_local $2) + (get_local $16) + ) + (i32.store offset=24 + (get_local $2) + (i32.const 0) + ) + ) + (call $qa) + ) + ) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $15) + (get_local $7) + ) + ) + (i32.store + (get_local $5) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $5) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + (i32.store + (i32.const 1240) + (tee_local $2 + (i32.add + (i32.load + (i32.const 1240) + ) + (i32.const -1) + ) + ) + ) + (if + (get_local $2) + (return) + (set_local $0 + (i32.const 1664) + ) + ) + (loop $while-in17 + (if + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (block + (set_local $0 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (br $while-in17) + ) + ) + ) + (i32.store + (i32.const 1240) + (i32.const -1) + ) + ) + (func $Ra (; 14 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (set_local $10 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 48) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 16) + ) + ) + (set_local $12 + (get_local $10) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $10) + (i32.const 32) + ) + ) + (tee_local $7 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $3) + (tee_local $9 + (i32.sub + (i32.load + (tee_local $13 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (get_local $7) + ) + ) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (get_local $2) + ) + (set_local $1 + (i32.add + (get_local $0) + (i32.const 60) + ) + ) + (set_local $7 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (set_local $4 + (get_local $3) + ) + (set_local $3 + (i32.const 2) + ) + (set_local $5 + (i32.add + (get_local $9) + (get_local $2) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eq + (get_local $5) + (tee_local $6 + (if (result i32) + (i32.load + (i32.const 1160) + ) + (block (result i32) + (call $ra + (i32.const 1) + (get_local $0) + ) + (i32.store + (get_local $12) + (i32.load + (get_local $1) + ) + ) + (i32.store offset=4 + (get_local $12) + (get_local $4) + ) + (i32.store offset=8 + (get_local $12) + (get_local $3) + ) + (set_local $9 + (call $Pa + (call $ya + (i32.const 146) + (get_local $12) + ) + ) + ) + (call $oa + (i32.const 0) + ) + (get_local $9) + ) + (block (result i32) + (i32.store + (get_local $11) + (i32.load + (get_local $1) + ) + ) + (i32.store offset=4 + (get_local $11) + (get_local $4) + ) + (i32.store offset=8 + (get_local $11) + (get_local $3) + ) + (call $Pa + (call $ya + (i32.const 146) + (get_local $11) + ) + ) + ) + ) + ) + ) + (block + (set_local $1 + (i32.const 6) + ) + (br $while-out) + ) + ) + (if + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (block + (set_local $16 + (get_local $4) + ) + (set_local $17 + (get_local $3) + ) + (set_local $1 + (i32.const 8) + ) + (br $while-out) + ) + ) + (set_local $9 + (i32.sub + (get_local $5) + (get_local $6) + ) + ) + (if + (i32.gt_u + (get_local $6) + (tee_local $14 + (i32.load offset=4 + (get_local $4) + ) + ) + ) + (block + (i32.store + (get_local $8) + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + ) + (i32.store + (get_local $13) + (get_local $5) + ) + (set_local $5 + (i32.load offset=12 + (get_local $4) + ) + ) + (set_local $6 + (i32.sub + (get_local $6) + (get_local $14) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + (set_local $5 + (if (result i32) + (i32.eq + (get_local $3) + (i32.const 2) + ) + (block (result i32) + (i32.store + (get_local $8) + (i32.add + (i32.load + (get_local $8) + ) + (get_local $6) + ) + ) + (set_local $3 + (i32.const 2) + ) + (get_local $14) + ) + (get_local $14) + ) + ) + ) + (i32.store + (get_local $4) + (i32.add + (i32.load + (get_local $4) + ) + (get_local $6) + ) + ) + (i32.store offset=4 + (get_local $4) + (i32.sub + (get_local $5) + (get_local $6) + ) + ) + (set_local $5 + (get_local $9) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 6) + ) + (block + (i32.store offset=16 + (get_local $0) + (i32.add + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.store + (get_local $8) + (tee_local $7 + (get_local $5) + ) + ) + (i32.store + (get_local $13) + (get_local $7) + ) + (set_local $15 + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 8) + ) + (block + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $13) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (set_local $15 + (if (result i32) + (i32.eq + (get_local $17) + (i32.const 2) + ) + (i32.const 0) + (i32.sub + (get_local $2) + (i32.load offset=4 + (get_local $16) + ) + ) + ) + ) + ) + ) + ) + (set_global $r + (get_local $10) + ) + (get_local $15) + ) + (func $Wa (; 15 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (if + (tee_local $5 + (i32.load + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $5) + ) + (set_local $7 + (i32.const 5) + ) + ) + (if + (call $Xa + (get_local $2) + ) + (set_local $4 + (i32.const 0) + ) + (block + (set_local $6 + (i32.load + (get_local $3) + ) + ) + (set_local $7 + (i32.const 5) + ) + ) + ) + ) + (block $label$break$a + (if + (i32.eq + (get_local $7) + (i32.const 5) + ) + (block + (if + (i32.lt_u + (i32.sub + (get_local $6) + (tee_local $3 + (i32.load + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 20) + ) + ) + ) + ) + ) + (get_local $1) + ) + (block + (set_local $4 + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (br $label$break$a) + ) + ) + (set_local $4 + (get_local $3) + ) + (block $label$break$b + (if + (i32.gt_s + (i32.load8_s offset=75 + (get_local $2) + ) + (i32.const -1) + ) + (block + (set_local $3 + (get_local $1) + ) + (loop $while-in + (if + (i32.eqz + (get_local $3) + ) + (block + (set_local $3 + (i32.const 0) + ) + (br $label$break$b) + ) + ) + (if + (i32.ne + (i32.load8_s + (i32.add + (get_local $0) + (tee_local $6 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + (i32.const 10) + ) + (block + (set_local $3 + (get_local $6) + ) + (br $while-in) + ) + ) + ) + (if + (i32.lt_u + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + (get_local $3) + ) + (block + (set_local $4 + (get_local $3) + ) + (br $label$break$a) + ) + ) + (set_local $1 + (i32.sub + (get_local $1) + (get_local $3) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (get_local $3) + ) + ) + (set_local $4 + (i32.load + (get_local $5) + ) + ) + ) + (set_local $3 + (i32.const 0) + ) + ) + ) + (drop + (call $jb + (get_local $4) + (get_local $0) + (get_local $1) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $1) + ) + ) + (set_local $4 + (i32.add + (get_local $3) + (get_local $1) + ) + ) + ) + ) + ) + (get_local $4) + ) + (func $Za (; 16 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (block $label$break$a + (if + (i32.and + (tee_local $3 + (get_local $0) + ) + (i32.const 3) + ) + (block + (set_local $4 + (get_local $3) + ) + (loop $while-in + (if + (i32.eqz + (i32.load8_s + (get_local $0) + ) + ) + (block + (set_local $5 + (get_local $4) + ) + (br $label$break$a) + ) + ) + (br_if $while-in + (i32.and + (tee_local $4 + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 3) + ) + ) + (set_local $1 + (get_local $0) + ) + (set_local $2 + (i32.const 4) + ) + ) + ) + (block + (set_local $1 + (get_local $0) + ) + (set_local $2 + (i32.const 4) + ) + ) + ) + ) + (if + (i32.eq + (get_local $2) + (i32.const 4) + ) + (block + (set_local $2 + (get_local $1) + ) + (loop $while-in1 + (if + (i32.and + (i32.xor + (i32.and + (tee_local $1 + (i32.load + (get_local $2) + ) + ) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $1) + (i32.const -16843009) + ) + ) + (set_local $0 + (get_local $2) + ) + (block + (set_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + (if + (i32.and + (get_local $1) + (i32.const 255) + ) + (block + (set_local $1 + (get_local $0) + ) + (loop $while-in3 + (if + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + (block + (set_local $1 + (get_local $0) + ) + (br $while-in3) + ) + ) + ) + ) + ) + (set_local $5 + (get_local $0) + ) + ) + ) + (i32.sub + (get_local $5) + (get_local $3) + ) + ) + (func $_a (; 17 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (block $do-once + (if + (get_local $0) + (block + (if + (i32.le_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (block + (set_local $1 + (call $$a + (get_local $0) + ) + ) + (br $do-once) + ) + ) + (set_local $2 + (i32.eqz + (call $Ya + (get_local $0) + ) + ) + ) + (set_local $1 + (call $$a + (get_local $0) + ) + ) + (if + (i32.eqz + (get_local $2) + ) + (call $Ta + (get_local $0) + ) + ) + ) + (block + (set_local $0 + (if (result i32) + (i32.load + (i32.const 1140) + ) + (call $_a + (i32.load + (i32.const 1140) + ) + ) + (i32.const 0) + ) + ) + (call $pa + (i32.const 1188) + ) + (if + (tee_local $2 + (i32.load + (i32.const 1184) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (set_local $0 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (get_local $1) + ) + (i32.const -1) + ) + (call $Ya + (get_local $1) + ) + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.load offset=20 + (get_local $1) + ) + (i32.load offset=28 + (get_local $1) + ) + ) + (set_local $2 + (i32.or + (call $$a + (get_local $1) + ) + (get_local $2) + ) + ) + ) + (if + (get_local $0) + (call $Ta + (get_local $1) + ) + ) + (br_if $while-in + (tee_local $1 + (i32.load offset=56 + (get_local $1) + ) + ) + ) + ) + ) + (set_local $2 + (get_local $0) + ) + ) + (call $xa + (i32.const 1188) + ) + (set_local $1 + (get_local $2) + ) + ) + ) + ) + (get_local $1) + ) + (func $ab (; 18 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $5 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 16) + ) + ) + (i32.store8 + (tee_local $6 + (get_local $5) + ) + (tee_local $9 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $3) + ) + (set_local $8 + (i32.const 4) + ) + ) + (if + (call $Xa + (get_local $0) + ) + (set_local $4 + (i32.const -1) + ) + (block + (set_local $7 + (i32.load + (get_local $2) + ) + ) + (set_local $8 + (i32.const 4) + ) + ) + ) + ) + (block $do-once + (if + (i32.eq + (get_local $8) + (i32.const 4) + ) + (block + (if + (i32.lt_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (get_local $7) + ) + (if + (i32.ne + (tee_local $4 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (i32.load8_s offset=75 + (get_local $0) + ) + ) + (block + (i32.store + (get_local $3) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $2) + (get_local $9) + ) + (br $do-once) + ) + ) + ) + (set_local $4 + (if (result i32) + (i32.eq + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (get_local $6) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + (i32.const 1) + ) + (i32.load8_u + (get_local $6) + ) + (i32.const -1) + ) + ) + ) + ) + ) + (set_global $r + (get_local $5) + ) + (get_local $4) + ) + (func $$a (; 19 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (if + (i32.gt_u + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + (block + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.load + (get_local $3) + ) + (set_local $1 + (i32.const 3) + ) + (set_local $2 + (i32.const -1) + ) + ) + ) + (set_local $1 + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 3) + ) + (block + (if + (i32.lt_u + (tee_local $2 + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (tee_local $6 + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.sub + (get_local $2) + (get_local $6) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=40 + (get_local $0) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $4) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $2 + (i32.const 0) + ) + ) + ) + (get_local $2) + ) + (func $jb (; 20 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.ge_s + (get_local $2) + (i32.const 4096) + ) + (return + (call $va + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (set_local $3 + (get_local $0) + ) + (if + (i32.eq + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.and + (get_local $1) + (i32.const 3) + ) + ) + (block + (loop $while-in + (if + (i32.and + (get_local $0) + (i32.const 3) + ) + (block + (if + (i32.eqz + (get_local $2) + ) + (return + (get_local $3) + ) + ) + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (loop $while-in1 + (if + (i32.ge_s + (get_local $2) + (i32.const 4) + ) + (block + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (get_local $3) + ) + (func $gb (; 21 ;) + (nop) + ) + (func $hb (; 22 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (if + (i32.ge_s + (get_local $2) + (i32.const 20) + ) + (block + (set_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (if + (tee_local $3 + (i32.and + (get_local $0) + (i32.const 3) + ) + ) + (block + (set_local $3 + (i32.sub + (i32.add + (get_local $0) + (i32.const 4) + ) + (get_local $3) + ) + ) + (loop $while-in + (if + (i32.lt_s + (get_local $0) + (get_local $3) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (set_local $3 + (i32.or + (i32.or + (i32.or + (get_local $1) + (i32.shl + (get_local $1) + (i32.const 8) + ) + ) + (i32.shl + (get_local $1) + (i32.const 16) + ) + ) + (i32.shl + (get_local $1) + (i32.const 24) + ) + ) + ) + (set_local $5 + (i32.and + (get_local $4) + (i32.const -4) + ) + ) + (loop $while-in1 + (if + (i32.lt_s + (get_local $0) + (get_local $5) + ) + (block + (i32.store + (get_local $0) + (get_local $3) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.lt_s + (get_local $0) + (get_local $4) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $db (; 23 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (set_local $3 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (tee_local $1 + (i32.load + (i32.const 1024) + ) + ) + ) + (i32.const -1) + ) + (call $Ya + (get_local $1) + ) + (i32.const 0) + ) + ) + (set_local $0 + (block $do-once (result i32) + (if (result i32) + (i32.lt_s + (i32.add + (call $bb + (get_local $0) + (call $Za + (get_local $0) + ) + (i32.const 1) + (tee_local $2 + (get_local $1) + ) + ) + (i32.const -1) + ) + (i32.const 0) + ) + (i32.const 1) + (block (result i32) + (if + (i32.ne + (i32.load8_s offset=75 + (get_local $1) + ) + (i32.const 10) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $1) + ) + ) + (block + (i32.store + (get_local $2) + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $0) + (i32.const 10) + ) + (br $do-once + (i32.const 0) + ) + ) + ) + ) + (i32.lt_s + (call $ab + (get_local $1) + (i32.const 10) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (if + (get_local $3) + (call $Ta + (get_local $1) + ) + ) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (func $Xa (; 24 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $2 + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 74) + ) + ) + ) + ) + (i32.store8 + (get_local $1) + (i32.or + (i32.add + (get_local $2) + (i32.const 255) + ) + (get_local $2) + ) + ) + (tee_local $0 + (if (result i32) + (i32.and + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.const 8) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.or + (get_local $2) + (i32.const 32) + ) + ) + (i32.const -1) + ) + (block (result i32) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=28 + (get_local $0) + (tee_local $1 + (i32.load offset=44 + (get_local $0) + ) + ) + ) + (i32.store offset=20 + (get_local $0) + (get_local $1) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (get_local $1) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (func $bb (; 25 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.mul + (get_local $2) + (get_local $1) + ) + ) + (if + (i32.gt_s + (i32.load offset=76 + (get_local $3) + ) + (i32.const -1) + ) + (block + (set_local $5 + (i32.eqz + (call $Ya + (get_local $3) + ) + ) + ) + (set_local $0 + (call $Wa + (get_local $0) + (get_local $4) + (get_local $3) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (call $Ta + (get_local $3) + ) + ) + ) + (set_local $0 + (call $Wa + (get_local $0) + (get_local $4) + (get_local $3) + ) + ) + ) + (if + (i32.ne + (get_local $0) + (get_local $4) + ) + (set_local $2 + (if (result i32) + (get_local $1) + (i32.div_u + (get_local $0) + (get_local $1) + ) + (i32.const 0) + ) + ) + ) + (get_local $2) + ) + (func $Ua (; 26 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 32) + ) + ) + (i32.store + (tee_local $3 + (get_local $4) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + (i32.store offset=16 + (get_local $3) + (get_local $2) + ) + (set_local $0 + (if (result i32) + (i32.lt_s + (call $Pa + (call $ua + (i32.const 140) + (get_local $3) + ) + ) + (i32.const 0) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.const -1) + ) + (i32.const -1) + ) + (i32.load + (get_local $0) + ) + ) + ) + (set_global $r + (get_local $4) + ) + (get_local $0) + ) + (func $Va (; 27 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 80) + ) + ) + (set_local $3 + (get_local $4) + ) + (i32.store offset=36 + (get_local $0) + (i32.const 3) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 64) + ) + ) + (block + (i32.store + (get_local $3) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 21505) + ) + (i32.store offset=8 + (get_local $3) + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + (if + (call $wa + (i32.const 54) + (get_local $3) + ) + (i32.store8 offset=75 + (get_local $0) + (i32.const -1) + ) + ) + ) + ) + (set_local $3 + (call $Ra + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (set_global $r + (get_local $4) + ) + (get_local $3) + ) + (func $Oa (; 28 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 16) + ) + ) + (i32.store + (tee_local $2 + (get_local $1) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (set_local $0 + (call $Pa + (call $sa + (i32.const 6) + (get_local $2) + ) + ) + ) + (set_global $r + (get_local $1) + ) + (get_local $0) + ) + (func $Pa (; 29 ;) (param $0 i32) (result i32) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const -4096) + ) + (block (result i32) + (i32.store + (call $Qa) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + (get_local $0) + ) + ) + (func $Qa (; 30 ;) (result i32) + (if (result i32) + (i32.load + (i32.const 1160) + ) + (i32.load offset=64 + (call $ib) + ) + (i32.const 1204) + ) + ) + (func $lb (; 31 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call_indirect (type $FUNCSIG$iiii) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.add + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (func $Ea (; 32 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (get_local $0) + ) + ) + (set_global $r + (i32.and + (i32.add + (get_global $r) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $ob (; 33 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $ja + (i32.const 1) + ) + (i32.const 0) + ) + (func $Ia (; 34 ;) (param $0 i32) (param $1 i32) + (if + (i32.eqz + (get_global $v) + ) + (block + (set_global $v + (get_local $0) + ) + (set_global $w + (get_local $1) + ) + ) + ) + ) + (func $kb (; 35 ;) (param $0 i32) (param $1 i32) (result i32) + (call_indirect (type $FUNCSIG$ii) + (get_local $1) + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + ) + (func $Sa (; 36 ;) (param $0 i32) + (if + (i32.eqz + (i32.load offset=68 + (get_local $0) + ) + ) + (call $Ta + (get_local $0) + ) + ) + ) + (func $mb (; 37 ;) (param $0 i32) (param $1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $1) + (i32.add + (i32.and + (get_local $0) + (i32.const 1) + ) + (i32.const 6) + ) + ) + ) + (func $Ha (; 38 ;) (param $0 i32) (param $1 i32) + (set_global $r + (get_local $0) + ) + (set_global $s + (get_local $1) + ) + ) + (func $nb (; 39 ;) (param $0 i32) (result i32) + (call $ja + (i32.const 0) + ) + (i32.const 0) + ) + (func $Na (; 40 ;) (result i32) + (drop + (call $db + (i32.const 1144) + ) + ) + (i32.const 0) + ) + (func $Ya (; 41 ;) (param $0 i32) (result i32) + (i32.const 0) + ) + (func $Ta (; 42 ;) (param $0 i32) + (nop) + ) + (func $pb (; 43 ;) (param $0 i32) + (call $ja + (i32.const 2) + ) + ) + (func $La (; 44 ;) (param $0 i32) + (set_global $K + (get_local $0) + ) + ) + (func $Ga (; 45 ;) (param $0 i32) + (set_global $r + (get_local $0) + ) + ) + (func $Ma (; 46 ;) (result i32) + (get_global $K) + ) + (func $Fa (; 47 ;) (result i32) + (get_global $r) + ) + (func $ib (; 48 ;) (result i32) + (i32.const 0) + ) + (func $__growWasmMemory (; 49 ;) (param $newSize i32) (result i32) + (grow_memory + (get_local $newSize) + ) + ) +) diff --git a/src/binaryen/test/memorygrowth.fromasm.clamp.no-opts b/src/binaryen/test/memorygrowth.fromasm.clamp.no-opts new file mode 100644 index 0000000000..46625f4b0c --- /dev/null +++ b/src/binaryen/test/memorygrowth.fromasm.clamp.no-opts @@ -0,0 +1,12004 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (import "env" "STACKTOP" (global $r$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $s$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $t$asm2wasm$import i32)) + (import "env" "ABORT" (global $u$asm2wasm$import i32)) + (import "global" "NaN" (global $z$asm2wasm$import f64)) + (import "global" "Infinity" (global $A$asm2wasm$import f64)) + (import "env" "abort" (func $ja (param i32))) + (import "env" "_pthread_cleanup_pop" (func $oa (param i32))) + (import "env" "___lock" (func $pa (param i32))) + (import "env" "_abort" (func $qa)) + (import "env" "_pthread_cleanup_push" (func $ra (param i32 i32))) + (import "env" "___syscall6" (func $sa (param i32 i32) (result i32))) + (import "env" "_sbrk" (func $ta (param i32) (result i32))) + (import "env" "___syscall140" (func $ua (param i32 i32) (result i32))) + (import "env" "_emscripten_memcpy_big" (func $va (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $wa (param i32 i32) (result i32))) + (import "env" "___unlock" (func $xa (param i32))) + (import "env" "___syscall146" (func $ya (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 8 8 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $r (mut i32) (get_global $r$asm2wasm$import)) + (global $s (mut i32) (get_global $s$asm2wasm$import)) + (global $t (mut i32) (get_global $t$asm2wasm$import)) + (global $u (mut i32) (get_global $u$asm2wasm$import)) + (global $v (mut i32) (i32.const 0)) + (global $w (mut i32) (i32.const 0)) + (global $x (mut i32) (i32.const 0)) + (global $y (mut i32) (i32.const 0)) + (global $z (mut f64) (get_global $z$asm2wasm$import)) + (global $A (mut f64) (get_global $A$asm2wasm$import)) + (global $B (mut i32) (i32.const 0)) + (global $C (mut i32) (i32.const 0)) + (global $D (mut i32) (i32.const 0)) + (global $E (mut i32) (i32.const 0)) + (global $F (mut f64) (f64.const 0)) + (global $G (mut i32) (i32.const 0)) + (global $H (mut i32) (i32.const 0)) + (global $I (mut i32) (i32.const 0)) + (global $J (mut f64) (f64.const 0)) + (global $K (mut i32) (i32.const 0)) + (global $L (mut i32) (i32.const 0)) + (global $M (mut i32) (i32.const 0)) + (global $N (mut i32) (i32.const 0)) + (global $O (mut i32) (i32.const 0)) + (global $P (mut i32) (i32.const 0)) + (global $Q (mut i32) (i32.const 0)) + (global $R (mut i32) (i32.const 0)) + (global $S (mut i32) (i32.const 0)) + (global $T (mut i32) (i32.const 0)) + (global $za (mut f64) (f64.const 0)) + (elem (get_global $tableBase) $nb $Oa $ob $Va $Ua $Ra $pb $Sa) + (export "_free" (func $fb)) + (export "_main" (func $Na)) + (export "_pthread_self" (func $ib)) + (export "_memset" (func $hb)) + (export "_malloc" (func $eb)) + (export "_memcpy" (func $jb)) + (export "_fflush" (func $_a)) + (export "___errno_location" (func $Qa)) + (export "runPostSets" (func $gb)) + (export "stackAlloc" (func $Ea)) + (export "stackSave" (func $Fa)) + (export "stackRestore" (func $Ga)) + (export "establishStackSpace" (func $Ha)) + (export "setThrew" (func $Ia)) + (export "setTempRet0" (func $La)) + (export "getTempRet0" (func $Ma)) + (export "dynCall_ii" (func $kb)) + (export "dynCall_iiii" (func $lb)) + (export "dynCall_vi" (func $mb)) + (export "__growWasmMemory" (func $__growWasmMemory)) + (func $eb (; 12 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $i i32) + (local $j i32) + (local $l i32) + (local $m i32) + (local $n i32) + (local $o i32) + (local $p i32) + (local $q i32) + (local $s i32) + (local $t i32) + (local $u i32) + (local $v i32) + (local $w i32) + (local $x i32) + (local $y i32) + (local $z i32) + (local $A i32) + (local $B i32) + (local $C i32) + (local $D i32) + (local $E i32) + (local $F i32) + (local $G i32) + (local $H i32) + (local $I i32) + (local $J i32) + (local $K i32) + (local $L i32) + (local $M i32) + (local $N i32) + (local $O i32) + (local $P i32) + (local $Q i32) + (local $R i32) + (local $S i32) + (local $T i32) + (local $U i32) + (local $V i32) + (local $W i32) + (local $X i32) + (local $Y i32) + (local $Z i32) + (local $_ i32) + (local $$ i32) + (local $aa i32) + (local $ba i32) + (local $ca i32) + (local $da i32) + (local $ea i32) + (local $fa i32) + (local $ga i32) + (local $ha i32) + (local $ia i32) + (local $ja i32) + (local $ka i32) + (local $la i32) + (local $ma i32) + (local $na i32) + (local $oa i32) + (local $pa i32) + (local $ra i32) + (local $sa i32) + (local $ua i32) + (local $va i32) + (local $wa i32) + (local $xa i32) + (local $ya i32) + (local $za i32) + (local $Aa i32) + (local $Ba i32) + (local $Ca i32) + (local $Da i32) + (local $Ea i32) + (local $Fa i32) + (local $Ga i32) + (local $Ha i32) + (local $Ia i32) + (local $Ja i32) + (local $Ka i32) + (local $La i32) + (local $Ma i32) + (local $Na i32) + (local $Oa i32) + (local $Pa i32) + (local $Ra i32) + (local $Sa i32) + (set_local $b + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 16) + ) + ) + (set_local $c + (get_local $b) + ) + (block $do-once + (if + (i32.lt_u + (get_local $a) + (i32.const 245) + ) + (block + (set_local $d + (if (result i32) + (i32.lt_u + (get_local $a) + (i32.const 11) + ) + (i32.const 16) + (i32.and + (i32.add + (get_local $a) + (i32.const 11) + ) + (i32.const -8) + ) + ) + ) + (set_local $e + (i32.shr_u + (get_local $d) + (i32.const 3) + ) + ) + (set_local $f + (i32.load + (i32.const 1208) + ) + ) + (set_local $g + (i32.shr_u + (get_local $f) + (get_local $e) + ) + ) + (if + (i32.and + (get_local $g) + (i32.const 3) + ) + (block + (set_local $h + (i32.add + (i32.xor + (i32.and + (get_local $g) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $e) + ) + ) + (set_local $i + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $h) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $j + (i32.add + (get_local $i) + (i32.const 8) + ) + ) + (set_local $l + (i32.load + (get_local $j) + ) + ) + (set_local $m + (i32.add + (get_local $l) + (i32.const 8) + ) + ) + (set_local $n + (i32.load + (get_local $m) + ) + ) + (block $do-once0 + (if + (i32.eq + (get_local $i) + (get_local $n) + ) + (i32.store + (i32.const 1208) + (i32.and + (get_local $f) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $h) + ) + (i32.const -1) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $n) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $o + (i32.add + (get_local $n) + (i32.const 12) + ) + ) + (if + (i32.eq + (i32.load + (get_local $o) + ) + (get_local $l) + ) + (block + (i32.store + (get_local $o) + (get_local $i) + ) + (i32.store + (get_local $j) + (get_local $n) + ) + (br $do-once0) + ) + (call $qa) + ) + ) + ) + ) + (set_local $n + (i32.shl + (get_local $h) + (i32.const 3) + ) + ) + (i32.store + (i32.add + (get_local $l) + (i32.const 4) + ) + (i32.or + (get_local $n) + (i32.const 3) + ) + ) + (set_local $j + (i32.add + (i32.add + (get_local $l) + (get_local $n) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $j) + (i32.or + (i32.load + (get_local $j) + ) + (i32.const 1) + ) + ) + (set_local $p + (get_local $m) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + (set_local $j + (i32.load + (i32.const 1216) + ) + ) + (if + (i32.gt_u + (get_local $d) + (get_local $j) + ) + (block + (if + (get_local $g) + (block + (set_local $n + (i32.shl + (i32.const 2) + (get_local $e) + ) + ) + (set_local $i + (i32.and + (i32.shl + (get_local $g) + (get_local $e) + ) + (i32.or + (get_local $n) + (i32.sub + (i32.const 0) + (get_local $n) + ) + ) + ) + ) + (set_local $n + (i32.add + (i32.and + (get_local $i) + (i32.sub + (i32.const 0) + (get_local $i) + ) + ) + (i32.const -1) + ) + ) + (set_local $i + (i32.and + (i32.shr_u + (get_local $n) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $o + (i32.shr_u + (get_local $n) + (get_local $i) + ) + ) + (set_local $n + (i32.and + (i32.shr_u + (get_local $o) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $q + (i32.shr_u + (get_local $o) + (get_local $n) + ) + ) + (set_local $o + (i32.and + (i32.shr_u + (get_local $q) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $s + (i32.shr_u + (get_local $q) + (get_local $o) + ) + ) + (set_local $q + (i32.and + (i32.shr_u + (get_local $s) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $t + (i32.shr_u + (get_local $s) + (get_local $q) + ) + ) + (set_local $s + (i32.and + (i32.shr_u + (get_local $t) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $u + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $n) + (get_local $i) + ) + (get_local $o) + ) + (get_local $q) + ) + (get_local $s) + ) + (i32.shr_u + (get_local $t) + (get_local $s) + ) + ) + ) + (set_local $s + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $u) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $t + (i32.add + (get_local $s) + (i32.const 8) + ) + ) + (set_local $q + (i32.load + (get_local $t) + ) + ) + (set_local $o + (i32.add + (get_local $q) + (i32.const 8) + ) + ) + (set_local $i + (i32.load + (get_local $o) + ) + ) + (block $do-once2 + (if + (i32.eq + (get_local $s) + (get_local $i) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (get_local $f) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $u) + ) + (i32.const -1) + ) + ) + ) + (set_local $v + (get_local $j) + ) + ) + (block + (if + (i32.lt_u + (get_local $i) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $n + (i32.add + (get_local $i) + (i32.const 12) + ) + ) + (if + (i32.eq + (i32.load + (get_local $n) + ) + (get_local $q) + ) + (block + (i32.store + (get_local $n) + (get_local $s) + ) + (i32.store + (get_local $t) + (get_local $i) + ) + (set_local $v + (i32.load + (i32.const 1216) + ) + ) + (br $do-once2) + ) + (call $qa) + ) + ) + ) + ) + (set_local $i + (i32.sub + (i32.shl + (get_local $u) + (i32.const 3) + ) + (get_local $d) + ) + ) + (i32.store + (i32.add + (get_local $q) + (i32.const 4) + ) + (i32.or + (get_local $d) + (i32.const 3) + ) + ) + (set_local $t + (i32.add + (get_local $q) + (get_local $d) + ) + ) + (i32.store + (i32.add + (get_local $t) + (i32.const 4) + ) + (i32.or + (get_local $i) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $t) + (get_local $i) + ) + (get_local $i) + ) + (if + (get_local $v) + (block + (set_local $s + (i32.load + (i32.const 1228) + ) + ) + (set_local $j + (i32.shr_u + (get_local $v) + (i32.const 3) + ) + ) + (set_local $f + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $j) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $e + (i32.load + (i32.const 1208) + ) + ) + (set_local $g + (i32.shl + (i32.const 1) + (get_local $j) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $e) + (get_local $g) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $e) + (get_local $g) + ) + ) + (set_local $w + (i32.add + (get_local $f) + (i32.const 8) + ) + ) + (set_local $x + (get_local $f) + ) + ) + (block + (set_local $g + (i32.add + (get_local $f) + (i32.const 8) + ) + ) + (set_local $e + (i32.load + (get_local $g) + ) + ) + (if + (i32.lt_u + (get_local $e) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $w + (get_local $g) + ) + (set_local $x + (get_local $e) + ) + ) + ) + ) + ) + (i32.store + (get_local $w) + (get_local $s) + ) + (i32.store + (i32.add + (get_local $x) + (i32.const 12) + ) + (get_local $s) + ) + (i32.store + (i32.add + (get_local $s) + (i32.const 8) + ) + (get_local $x) + ) + (i32.store + (i32.add + (get_local $s) + (i32.const 12) + ) + (get_local $f) + ) + ) + ) + (i32.store + (i32.const 1216) + (get_local $i) + ) + (i32.store + (i32.const 1228) + (get_local $t) + ) + (set_local $p + (get_local $o) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + (set_local $t + (i32.load + (i32.const 1212) + ) + ) + (if + (i32.eqz + (get_local $t) + ) + (set_local $y + (get_local $d) + ) + (block + (set_local $i + (i32.add + (i32.and + (get_local $t) + (i32.sub + (i32.const 0) + (get_local $t) + ) + ) + (i32.const -1) + ) + ) + (set_local $t + (i32.and + (i32.shr_u + (get_local $i) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $f + (i32.shr_u + (get_local $i) + (get_local $t) + ) + ) + (set_local $i + (i32.and + (i32.shr_u + (get_local $f) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $s + (i32.shr_u + (get_local $f) + (get_local $i) + ) + ) + (set_local $f + (i32.and + (i32.shr_u + (get_local $s) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $e + (i32.shr_u + (get_local $s) + (get_local $f) + ) + ) + (set_local $s + (i32.and + (i32.shr_u + (get_local $e) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $g + (i32.shr_u + (get_local $e) + (get_local $s) + ) + ) + (set_local $e + (i32.and + (i32.shr_u + (get_local $g) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $j + (i32.load + (i32.add + (i32.const 1512) + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $i) + (get_local $t) + ) + (get_local $f) + ) + (get_local $s) + ) + (get_local $e) + ) + (i32.shr_u + (get_local $g) + (get_local $e) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $e + (i32.sub + (i32.and + (i32.load + (i32.add + (get_local $j) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $d) + ) + ) + (set_local $g + (get_local $j) + ) + (set_local $s + (get_local $j) + ) + (loop $while-in + (block $while-out + (set_local $j + (i32.load + (i32.add + (get_local $g) + (i32.const 16) + ) + ) + ) + (if + (i32.eqz + (get_local $j) + ) + (block + (set_local $f + (i32.load + (i32.add + (get_local $g) + (i32.const 20) + ) + ) + ) + (if + (i32.eqz + (get_local $f) + ) + (block + (set_local $z + (get_local $e) + ) + (set_local $A + (get_local $s) + ) + (br $while-out) + ) + (set_local $B + (get_local $f) + ) + ) + ) + (set_local $B + (get_local $j) + ) + ) + (set_local $j + (i32.sub + (i32.and + (i32.load + (i32.add + (get_local $B) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $d) + ) + ) + (set_local $f + (i32.lt_u + (get_local $j) + (get_local $e) + ) + ) + (set_local $e + (if (result i32) + (get_local $f) + (get_local $j) + (get_local $e) + ) + ) + (set_local $g + (get_local $B) + ) + (set_local $s + (if (result i32) + (get_local $f) + (get_local $B) + (get_local $s) + ) + ) + (br $while-in) + ) + ) + (set_local $s + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $A) + (get_local $s) + ) + (call $qa) + ) + (set_local $g + (i32.add + (get_local $A) + (get_local $d) + ) + ) + (if + (i32.ge_u + (get_local $A) + (get_local $g) + ) + (call $qa) + ) + (set_local $e + (i32.load + (i32.add + (get_local $A) + (i32.const 24) + ) + ) + ) + (set_local $o + (i32.load + (i32.add + (get_local $A) + (i32.const 12) + ) + ) + ) + (block $do-once4 + (if + (i32.eq + (get_local $o) + (get_local $A) + ) + (block + (set_local $q + (i32.add + (get_local $A) + (i32.const 20) + ) + ) + (set_local $u + (i32.load + (get_local $q) + ) + ) + (if + (i32.eqz + (get_local $u) + ) + (block + (set_local $f + (i32.add + (get_local $A) + (i32.const 16) + ) + ) + (set_local $j + (i32.load + (get_local $f) + ) + ) + (if + (i32.eqz + (get_local $j) + ) + (block + (set_local $C + (i32.const 0) + ) + (br $do-once4) + ) + (block + (set_local $D + (get_local $j) + ) + (set_local $E + (get_local $f) + ) + ) + ) + ) + (block + (set_local $D + (get_local $u) + ) + (set_local $E + (get_local $q) + ) + ) + ) + (loop $while-in7 + (block $while-out6 + (set_local $q + (i32.add + (get_local $D) + (i32.const 20) + ) + ) + (set_local $u + (i32.load + (get_local $q) + ) + ) + (if + (get_local $u) + (block + (set_local $D + (get_local $u) + ) + (set_local $E + (get_local $q) + ) + (br $while-in7) + ) + ) + (set_local $q + (i32.add + (get_local $D) + (i32.const 16) + ) + ) + (set_local $u + (i32.load + (get_local $q) + ) + ) + (if + (i32.eqz + (get_local $u) + ) + (block + (set_local $F + (get_local $D) + ) + (set_local $G + (get_local $E) + ) + (br $while-out6) + ) + (block + (set_local $D + (get_local $u) + ) + (set_local $E + (get_local $q) + ) + ) + ) + (br $while-in7) + ) + ) + (if + (i32.lt_u + (get_local $G) + (get_local $s) + ) + (call $qa) + (block + (i32.store + (get_local $G) + (i32.const 0) + ) + (set_local $C + (get_local $F) + ) + (br $do-once4) + ) + ) + ) + (block + (set_local $q + (i32.load + (i32.add + (get_local $A) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $q) + (get_local $s) + ) + (call $qa) + ) + (set_local $u + (i32.add + (get_local $q) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $u) + ) + (get_local $A) + ) + (call $qa) + ) + (set_local $f + (i32.add + (get_local $o) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $f) + ) + (get_local $A) + ) + (block + (i32.store + (get_local $u) + (get_local $o) + ) + (i32.store + (get_local $f) + (get_local $q) + ) + (set_local $C + (get_local $o) + ) + (br $do-once4) + ) + (call $qa) + ) + ) + ) + ) + (block $do-once8 + (if + (get_local $e) + (block + (set_local $o + (i32.load + (i32.add + (get_local $A) + (i32.const 28) + ) + ) + ) + (set_local $s + (i32.add + (i32.const 1512) + (i32.shl + (get_local $o) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $A) + (i32.load + (get_local $s) + ) + ) + (block + (i32.store + (get_local $s) + (get_local $C) + ) + (if + (i32.eqz + (get_local $C) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $o) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $e) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $o + (i32.add + (get_local $e) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $o) + ) + (get_local $A) + ) + (i32.store + (get_local $o) + (get_local $C) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 20) + ) + (get_local $C) + ) + ) + (if + (i32.eqz + (get_local $C) + ) + (br $do-once8) + ) + ) + ) + (set_local $o + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $C) + (get_local $o) + ) + (call $qa) + ) + (i32.store + (i32.add + (get_local $C) + (i32.const 24) + ) + (get_local $e) + ) + (set_local $s + (i32.load + (i32.add + (get_local $A) + (i32.const 16) + ) + ) + ) + (block $do-once10 + (if + (get_local $s) + (if + (i32.lt_u + (get_local $s) + (get_local $o) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $C) + (i32.const 16) + ) + (get_local $s) + ) + (i32.store + (i32.add + (get_local $s) + (i32.const 24) + ) + (get_local $C) + ) + (br $do-once10) + ) + ) + ) + ) + (set_local $s + (i32.load + (i32.add + (get_local $A) + (i32.const 20) + ) + ) + ) + (if + (get_local $s) + (if + (i32.lt_u + (get_local $s) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $C) + (i32.const 20) + ) + (get_local $s) + ) + (i32.store + (i32.add + (get_local $s) + (i32.const 24) + ) + (get_local $C) + ) + (br $do-once8) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $z) + (i32.const 16) + ) + (block + (set_local $e + (i32.add + (get_local $z) + (get_local $d) + ) + ) + (i32.store + (i32.add + (get_local $A) + (i32.const 4) + ) + (i32.or + (get_local $e) + (i32.const 3) + ) + ) + (set_local $s + (i32.add + (i32.add + (get_local $A) + (get_local $e) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $s) + (i32.or + (i32.load + (get_local $s) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store + (i32.add + (get_local $A) + (i32.const 4) + ) + (i32.or + (get_local $d) + (i32.const 3) + ) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 4) + ) + (i32.or + (get_local $z) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $g) + (get_local $z) + ) + (get_local $z) + ) + (set_local $s + (i32.load + (i32.const 1216) + ) + ) + (if + (get_local $s) + (block + (set_local $e + (i32.load + (i32.const 1228) + ) + ) + (set_local $o + (i32.shr_u + (get_local $s) + (i32.const 3) + ) + ) + (set_local $s + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $o) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $q + (i32.load + (i32.const 1208) + ) + ) + (set_local $f + (i32.shl + (i32.const 1) + (get_local $o) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $q) + (get_local $f) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $q) + (get_local $f) + ) + ) + (set_local $H + (i32.add + (get_local $s) + (i32.const 8) + ) + ) + (set_local $I + (get_local $s) + ) + ) + (block + (set_local $f + (i32.add + (get_local $s) + (i32.const 8) + ) + ) + (set_local $q + (i32.load + (get_local $f) + ) + ) + (if + (i32.lt_u + (get_local $q) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $H + (get_local $f) + ) + (set_local $I + (get_local $q) + ) + ) + ) + ) + ) + (i32.store + (get_local $H) + (get_local $e) + ) + (i32.store + (i32.add + (get_local $I) + (i32.const 12) + ) + (get_local $e) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 8) + ) + (get_local $I) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 12) + ) + (get_local $s) + ) + ) + ) + (i32.store + (i32.const 1216) + (get_local $z) + ) + (i32.store + (i32.const 1228) + (get_local $g) + ) + ) + ) + (set_local $p + (i32.add + (get_local $A) + (i32.const 8) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + ) + (set_local $y + (get_local $d) + ) + ) + ) + (if + (i32.gt_u + (get_local $a) + (i32.const -65) + ) + (set_local $y + (i32.const -1) + ) + (block + (set_local $s + (i32.add + (get_local $a) + (i32.const 11) + ) + ) + (set_local $e + (i32.and + (get_local $s) + (i32.const -8) + ) + ) + (set_local $q + (i32.load + (i32.const 1212) + ) + ) + (if + (i32.eqz + (get_local $q) + ) + (set_local $y + (get_local $e) + ) + (block + (set_local $f + (i32.sub + (i32.const 0) + (get_local $e) + ) + ) + (set_local $o + (i32.shr_u + (get_local $s) + (i32.const 8) + ) + ) + (if + (i32.eqz + (get_local $o) + ) + (set_local $J + (i32.const 0) + ) + (if + (i32.gt_u + (get_local $e) + (i32.const 16777215) + ) + (set_local $J + (i32.const 31) + ) + (block + (set_local $s + (i32.and + (i32.shr_u + (i32.add + (get_local $o) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $u + (i32.shl + (get_local $o) + (get_local $s) + ) + ) + (set_local $o + (i32.and + (i32.shr_u + (i32.add + (get_local $u) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $j + (i32.shl + (get_local $u) + (get_local $o) + ) + ) + (set_local $u + (i32.and + (i32.shr_u + (i32.add + (get_local $j) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $t + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $o) + (get_local $s) + ) + (get_local $u) + ) + ) + (i32.shr_u + (i32.shl + (get_local $j) + (get_local $u) + ) + (i32.const 15) + ) + ) + ) + (set_local $J + (i32.or + (i32.and + (i32.shr_u + (get_local $e) + (i32.add + (get_local $t) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $t) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $t + (i32.load + (i32.add + (i32.const 1512) + (i32.shl + (get_local $J) + (i32.const 2) + ) + ) + ) + ) + (block $label$break$a + (if + (i32.eqz + (get_local $t) + ) + (block + (set_local $K + (get_local $f) + ) + (set_local $L + (i32.const 0) + ) + (set_local $M + (i32.const 0) + ) + (set_local $N + (i32.const 86) + ) + ) + (block + (set_local $u + (get_local $f) + ) + (set_local $j + (i32.const 0) + ) + (set_local $s + (i32.shl + (get_local $e) + (if (result i32) + (i32.eq + (get_local $J) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $J) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $o + (get_local $t) + ) + (set_local $i + (i32.const 0) + ) + (loop $while-in14 + (block $while-out13 + (set_local $m + (i32.and + (i32.load + (i32.add + (get_local $o) + (i32.const 4) + ) + ) + (i32.const -8) + ) + ) + (set_local $l + (i32.sub + (get_local $m) + (get_local $e) + ) + ) + (if + (i32.lt_u + (get_local $l) + (get_local $u) + ) + (if + (i32.eq + (get_local $m) + (get_local $e) + ) + (block + (set_local $O + (get_local $l) + ) + (set_local $P + (get_local $o) + ) + (set_local $Q + (get_local $o) + ) + (set_local $N + (i32.const 90) + ) + (br $label$break$a) + ) + (block + (set_local $R + (get_local $l) + ) + (set_local $S + (get_local $o) + ) + ) + ) + (block + (set_local $R + (get_local $u) + ) + (set_local $S + (get_local $i) + ) + ) + ) + (set_local $l + (i32.load + (i32.add + (get_local $o) + (i32.const 20) + ) + ) + ) + (set_local $o + (i32.load + (i32.add + (i32.add + (get_local $o) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $s) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $m + (if (result i32) + (i32.or + (i32.eq + (get_local $l) + (i32.const 0) + ) + (i32.eq + (get_local $l) + (get_local $o) + ) + ) + (get_local $j) + (get_local $l) + ) + ) + (set_local $l + (i32.eq + (get_local $o) + (i32.const 0) + ) + ) + (if + (get_local $l) + (block + (set_local $K + (get_local $R) + ) + (set_local $L + (get_local $m) + ) + (set_local $M + (get_local $S) + ) + (set_local $N + (i32.const 86) + ) + (br $while-out13) + ) + (block + (set_local $u + (get_local $R) + ) + (set_local $j + (get_local $m) + ) + (set_local $s + (i32.shl + (get_local $s) + (i32.xor + (i32.and + (get_local $l) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (set_local $i + (get_local $S) + ) + ) + ) + (br $while-in14) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 86) + ) + (block + (if + (i32.and + (i32.eq + (get_local $L) + (i32.const 0) + ) + (i32.eq + (get_local $M) + (i32.const 0) + ) + ) + (block + (set_local $t + (i32.shl + (i32.const 2) + (get_local $J) + ) + ) + (set_local $f + (i32.and + (get_local $q) + (i32.or + (get_local $t) + (i32.sub + (i32.const 0) + (get_local $t) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $f) + ) + (block + (set_local $y + (get_local $e) + ) + (br $do-once) + ) + ) + (set_local $t + (i32.add + (i32.and + (get_local $f) + (i32.sub + (i32.const 0) + (get_local $f) + ) + ) + (i32.const -1) + ) + ) + (set_local $f + (i32.and + (i32.shr_u + (get_local $t) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $d + (i32.shr_u + (get_local $t) + (get_local $f) + ) + ) + (set_local $t + (i32.and + (i32.shr_u + (get_local $d) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $g + (i32.shr_u + (get_local $d) + (get_local $t) + ) + ) + (set_local $d + (i32.and + (i32.shr_u + (get_local $g) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $i + (i32.shr_u + (get_local $g) + (get_local $d) + ) + ) + (set_local $g + (i32.and + (i32.shr_u + (get_local $i) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $s + (i32.shr_u + (get_local $i) + (get_local $g) + ) + ) + (set_local $i + (i32.and + (i32.shr_u + (get_local $s) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $T + (i32.load + (i32.add + (i32.const 1512) + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $t) + (get_local $f) + ) + (get_local $d) + ) + (get_local $g) + ) + (get_local $i) + ) + (i32.shr_u + (get_local $s) + (get_local $i) + ) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (set_local $T + (get_local $L) + ) + ) + (if + (i32.eqz + (get_local $T) + ) + (block + (set_local $U + (get_local $K) + ) + (set_local $V + (get_local $M) + ) + ) + (block + (set_local $O + (get_local $K) + ) + (set_local $P + (get_local $T) + ) + (set_local $Q + (get_local $M) + ) + (set_local $N + (i32.const 90) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 90) + ) + (loop $while-in16 + (block $while-out15 + (set_local $N + (i32.const 0) + ) + (set_local $i + (i32.sub + (i32.and + (i32.load + (i32.add + (get_local $P) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $e) + ) + ) + (set_local $s + (i32.lt_u + (get_local $i) + (get_local $O) + ) + ) + (set_local $g + (if (result i32) + (get_local $s) + (get_local $i) + (get_local $O) + ) + ) + (set_local $i + (if (result i32) + (get_local $s) + (get_local $P) + (get_local $Q) + ) + ) + (set_local $s + (i32.load + (i32.add + (get_local $P) + (i32.const 16) + ) + ) + ) + (if + (get_local $s) + (block + (set_local $O + (get_local $g) + ) + (set_local $P + (get_local $s) + ) + (set_local $Q + (get_local $i) + ) + (set_local $N + (i32.const 90) + ) + (br $while-in16) + ) + ) + (set_local $P + (i32.load + (i32.add + (get_local $P) + (i32.const 20) + ) + ) + ) + (if + (i32.eqz + (get_local $P) + ) + (block + (set_local $U + (get_local $g) + ) + (set_local $V + (get_local $i) + ) + (br $while-out15) + ) + (block + (set_local $O + (get_local $g) + ) + (set_local $Q + (get_local $i) + ) + (set_local $N + (i32.const 90) + ) + ) + ) + (br $while-in16) + ) + ) + ) + (if + (i32.eqz + (get_local $V) + ) + (set_local $y + (get_local $e) + ) + (if + (i32.lt_u + (get_local $U) + (i32.sub + (i32.load + (i32.const 1216) + ) + (get_local $e) + ) + ) + (block + (set_local $q + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $V) + (get_local $q) + ) + (call $qa) + ) + (set_local $i + (i32.add + (get_local $V) + (get_local $e) + ) + ) + (if + (i32.ge_u + (get_local $V) + (get_local $i) + ) + (call $qa) + ) + (set_local $g + (i32.load + (i32.add + (get_local $V) + (i32.const 24) + ) + ) + ) + (set_local $s + (i32.load + (i32.add + (get_local $V) + (i32.const 12) + ) + ) + ) + (block $do-once17 + (if + (i32.eq + (get_local $s) + (get_local $V) + ) + (block + (set_local $d + (i32.add + (get_local $V) + (i32.const 20) + ) + ) + (set_local $f + (i32.load + (get_local $d) + ) + ) + (if + (i32.eqz + (get_local $f) + ) + (block + (set_local $t + (i32.add + (get_local $V) + (i32.const 16) + ) + ) + (set_local $j + (i32.load + (get_local $t) + ) + ) + (if + (i32.eqz + (get_local $j) + ) + (block + (set_local $W + (i32.const 0) + ) + (br $do-once17) + ) + (block + (set_local $X + (get_local $j) + ) + (set_local $Y + (get_local $t) + ) + ) + ) + ) + (block + (set_local $X + (get_local $f) + ) + (set_local $Y + (get_local $d) + ) + ) + ) + (loop $while-in20 + (block $while-out19 + (set_local $d + (i32.add + (get_local $X) + (i32.const 20) + ) + ) + (set_local $f + (i32.load + (get_local $d) + ) + ) + (if + (get_local $f) + (block + (set_local $X + (get_local $f) + ) + (set_local $Y + (get_local $d) + ) + (br $while-in20) + ) + ) + (set_local $d + (i32.add + (get_local $X) + (i32.const 16) + ) + ) + (set_local $f + (i32.load + (get_local $d) + ) + ) + (if + (i32.eqz + (get_local $f) + ) + (block + (set_local $Z + (get_local $X) + ) + (set_local $_ + (get_local $Y) + ) + (br $while-out19) + ) + (block + (set_local $X + (get_local $f) + ) + (set_local $Y + (get_local $d) + ) + ) + ) + (br $while-in20) + ) + ) + (if + (i32.lt_u + (get_local $_) + (get_local $q) + ) + (call $qa) + (block + (i32.store + (get_local $_) + (i32.const 0) + ) + (set_local $W + (get_local $Z) + ) + (br $do-once17) + ) + ) + ) + (block + (set_local $d + (i32.load + (i32.add + (get_local $V) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $d) + (get_local $q) + ) + (call $qa) + ) + (set_local $f + (i32.add + (get_local $d) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $f) + ) + (get_local $V) + ) + (call $qa) + ) + (set_local $t + (i32.add + (get_local $s) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $t) + ) + (get_local $V) + ) + (block + (i32.store + (get_local $f) + (get_local $s) + ) + (i32.store + (get_local $t) + (get_local $d) + ) + (set_local $W + (get_local $s) + ) + (br $do-once17) + ) + (call $qa) + ) + ) + ) + ) + (block $do-once21 + (if + (get_local $g) + (block + (set_local $s + (i32.load + (i32.add + (get_local $V) + (i32.const 28) + ) + ) + ) + (set_local $q + (i32.add + (i32.const 1512) + (i32.shl + (get_local $s) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $V) + (i32.load + (get_local $q) + ) + ) + (block + (i32.store + (get_local $q) + (get_local $W) + ) + (if + (i32.eqz + (get_local $W) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $s) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $g) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $s + (i32.add + (get_local $g) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $s) + ) + (get_local $V) + ) + (i32.store + (get_local $s) + (get_local $W) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 20) + ) + (get_local $W) + ) + ) + (if + (i32.eqz + (get_local $W) + ) + (br $do-once21) + ) + ) + ) + (set_local $s + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $W) + (get_local $s) + ) + (call $qa) + ) + (i32.store + (i32.add + (get_local $W) + (i32.const 24) + ) + (get_local $g) + ) + (set_local $q + (i32.load + (i32.add + (get_local $V) + (i32.const 16) + ) + ) + ) + (block $do-once23 + (if + (get_local $q) + (if + (i32.lt_u + (get_local $q) + (get_local $s) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $W) + (i32.const 16) + ) + (get_local $q) + ) + (i32.store + (i32.add + (get_local $q) + (i32.const 24) + ) + (get_local $W) + ) + (br $do-once23) + ) + ) + ) + ) + (set_local $q + (i32.load + (i32.add + (get_local $V) + (i32.const 20) + ) + ) + ) + (if + (get_local $q) + (if + (i32.lt_u + (get_local $q) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $W) + (i32.const 20) + ) + (get_local $q) + ) + (i32.store + (i32.add + (get_local $q) + (i32.const 24) + ) + (get_local $W) + ) + (br $do-once21) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.lt_u + (get_local $U) + (i32.const 16) + ) + (block + (set_local $g + (i32.add + (get_local $U) + (get_local $e) + ) + ) + (i32.store + (i32.add + (get_local $V) + (i32.const 4) + ) + (i32.or + (get_local $g) + (i32.const 3) + ) + ) + (set_local $q + (i32.add + (i32.add + (get_local $V) + (get_local $g) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $q) + (i32.or + (i32.load + (get_local $q) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store + (i32.add + (get_local $V) + (i32.const 4) + ) + (i32.or + (get_local $e) + (i32.const 3) + ) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 4) + ) + (i32.or + (get_local $U) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i) + (get_local $U) + ) + (get_local $U) + ) + (set_local $q + (i32.shr_u + (get_local $U) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $U) + (i32.const 256) + ) + (block + (set_local $g + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $q) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $s + (i32.load + (i32.const 1208) + ) + ) + (set_local $d + (i32.shl + (i32.const 1) + (get_local $q) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $s) + (get_local $d) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $s) + (get_local $d) + ) + ) + (set_local $$ + (i32.add + (get_local $g) + (i32.const 8) + ) + ) + (set_local $aa + (get_local $g) + ) + ) + (block + (set_local $d + (i32.add + (get_local $g) + (i32.const 8) + ) + ) + (set_local $s + (i32.load + (get_local $d) + ) + ) + (if + (i32.lt_u + (get_local $s) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $$ + (get_local $d) + ) + (set_local $aa + (get_local $s) + ) + ) + ) + ) + ) + (i32.store + (get_local $$) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $aa) + (i32.const 12) + ) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 8) + ) + (get_local $aa) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 12) + ) + (get_local $g) + ) + (br $do-once25) + ) + ) + (set_local $g + (i32.shr_u + (get_local $U) + (i32.const 8) + ) + ) + (if + (i32.eqz + (get_local $g) + ) + (set_local $ba + (i32.const 0) + ) + (if + (i32.gt_u + (get_local $U) + (i32.const 16777215) + ) + (set_local $ba + (i32.const 31) + ) + (block + (set_local $s + (i32.and + (i32.shr_u + (i32.add + (get_local $g) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $d + (i32.shl + (get_local $g) + (get_local $s) + ) + ) + (set_local $g + (i32.and + (i32.shr_u + (i32.add + (get_local $d) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $q + (i32.shl + (get_local $d) + (get_local $g) + ) + ) + (set_local $d + (i32.and + (i32.shr_u + (i32.add + (get_local $q) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $t + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $g) + (get_local $s) + ) + (get_local $d) + ) + ) + (i32.shr_u + (i32.shl + (get_local $q) + (get_local $d) + ) + (i32.const 15) + ) + ) + ) + (set_local $ba + (i32.or + (i32.and + (i32.shr_u + (get_local $U) + (i32.add + (get_local $t) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $t) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $t + (i32.add + (i32.const 1512) + (i32.shl + (get_local $ba) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 28) + ) + (get_local $ba) + ) + (set_local $d + (i32.add + (get_local $i) + (i32.const 16) + ) + ) + (i32.store + (i32.add + (get_local $d) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store + (get_local $d) + (i32.const 0) + ) + (set_local $d + (i32.load + (i32.const 1212) + ) + ) + (set_local $q + (i32.shl + (i32.const 1) + (get_local $ba) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $d) + (get_local $q) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $d) + (get_local $q) + ) + ) + (i32.store + (get_local $t) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 24) + ) + (get_local $t) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 12) + ) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 8) + ) + (get_local $i) + ) + (br $do-once25) + ) + ) + (set_local $q + (i32.shl + (get_local $U) + (if (result i32) + (i32.eq + (get_local $ba) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $ba) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $d + (i32.load + (get_local $t) + ) + ) + (loop $while-in28 + (block $while-out27 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $d) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $U) + ) + (block + (set_local $ca + (get_local $d) + ) + (set_local $N + (i32.const 148) + ) + (br $while-out27) + ) + ) + (set_local $t + (i32.add + (i32.add + (get_local $d) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $q) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $s + (i32.load + (get_local $t) + ) + ) + (if + (i32.eqz + (get_local $s) + ) + (block + (set_local $da + (get_local $t) + ) + (set_local $ea + (get_local $d) + ) + (set_local $N + (i32.const 145) + ) + (br $while-out27) + ) + (block + (set_local $q + (i32.shl + (get_local $q) + (i32.const 1) + ) + ) + (set_local $d + (get_local $s) + ) + ) + ) + (br $while-in28) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 145) + ) + (if + (i32.lt_u + (get_local $da) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $da) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 24) + ) + (get_local $ea) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 12) + ) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 8) + ) + (get_local $i) + ) + (br $do-once25) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 148) + ) + (block + (set_local $d + (i32.add + (get_local $ca) + (i32.const 8) + ) + ) + (set_local $q + (i32.load + (get_local $d) + ) + ) + (set_local $s + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $q) + (get_local $s) + ) + (i32.ge_u + (get_local $ca) + (get_local $s) + ) + ) + (block + (i32.store + (i32.add + (get_local $q) + (i32.const 12) + ) + (get_local $i) + ) + (i32.store + (get_local $d) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 8) + ) + (get_local $q) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 12) + ) + (get_local $ca) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once25) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + ) + (set_local $p + (i32.add + (get_local $V) + (i32.const 8) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + (set_local $y + (get_local $e) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $V + (i32.load + (i32.const 1216) + ) + ) + (if + (i32.ge_u + (get_local $V) + (get_local $y) + ) + (block + (set_local $ca + (i32.sub + (get_local $V) + (get_local $y) + ) + ) + (set_local $ea + (i32.load + (i32.const 1228) + ) + ) + (if + (i32.gt_u + (get_local $ca) + (i32.const 15) + ) + (block + (set_local $da + (i32.add + (get_local $ea) + (get_local $y) + ) + ) + (i32.store + (i32.const 1228) + (get_local $da) + ) + (i32.store + (i32.const 1216) + (get_local $ca) + ) + (i32.store + (i32.add + (get_local $da) + (i32.const 4) + ) + (i32.or + (get_local $ca) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $da) + (get_local $ca) + ) + (get_local $ca) + ) + (i32.store + (i32.add + (get_local $ea) + (i32.const 4) + ) + (i32.or + (get_local $y) + (i32.const 3) + ) + ) + ) + (block + (i32.store + (i32.const 1216) + (i32.const 0) + ) + (i32.store + (i32.const 1228) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $ea) + (i32.const 4) + ) + (i32.or + (get_local $V) + (i32.const 3) + ) + ) + (set_local $ca + (i32.add + (i32.add + (get_local $ea) + (get_local $V) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $ca) + (i32.or + (i32.load + (get_local $ca) + ) + (i32.const 1) + ) + ) + ) + ) + (set_local $p + (i32.add + (get_local $ea) + (i32.const 8) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + (set_local $ea + (i32.load + (i32.const 1220) + ) + ) + (if + (i32.gt_u + (get_local $ea) + (get_local $y) + ) + (block + (set_local $ca + (i32.sub + (get_local $ea) + (get_local $y) + ) + ) + (i32.store + (i32.const 1220) + (get_local $ca) + ) + (set_local $ea + (i32.load + (i32.const 1232) + ) + ) + (set_local $V + (i32.add + (get_local $ea) + (get_local $y) + ) + ) + (i32.store + (i32.const 1232) + (get_local $V) + ) + (i32.store + (i32.add + (get_local $V) + (i32.const 4) + ) + (i32.or + (get_local $ca) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $ea) + (i32.const 4) + ) + (i32.or + (get_local $y) + (i32.const 3) + ) + ) + (set_local $p + (i32.add + (get_local $ea) + (i32.const 8) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + (if + (i32.eqz + (i32.load + (i32.const 1680) + ) + ) + (block + (i32.store + (i32.const 1688) + (i32.const 4096) + ) + (i32.store + (i32.const 1684) + (i32.const 4096) + ) + (i32.store + (i32.const 1692) + (i32.const -1) + ) + (i32.store + (i32.const 1696) + (i32.const -1) + ) + (i32.store + (i32.const 1700) + (i32.const 0) + ) + (i32.store + (i32.const 1652) + (i32.const 0) + ) + (set_local $ea + (i32.xor + (i32.and + (get_local $c) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + (i32.store + (get_local $c) + (get_local $ea) + ) + (i32.store + (i32.const 1680) + (get_local $ea) + ) + ) + ) + (set_local $ea + (i32.add + (get_local $y) + (i32.const 48) + ) + ) + (set_local $c + (i32.load + (i32.const 1688) + ) + ) + (set_local $ca + (i32.add + (get_local $y) + (i32.const 47) + ) + ) + (set_local $V + (i32.add + (get_local $c) + (get_local $ca) + ) + ) + (set_local $da + (i32.sub + (i32.const 0) + (get_local $c) + ) + ) + (set_local $c + (i32.and + (get_local $V) + (get_local $da) + ) + ) + (if + (i32.le_u + (get_local $c) + (get_local $y) + ) + (block + (set_local $p + (i32.const 0) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + (set_local $U + (i32.load + (i32.const 1648) + ) + ) + (if + (get_local $U) + (block + (set_local $ba + (i32.load + (i32.const 1640) + ) + ) + (set_local $aa + (i32.add + (get_local $ba) + (get_local $c) + ) + ) + (if + (i32.or + (i32.le_u + (get_local $aa) + (get_local $ba) + ) + (i32.gt_u + (get_local $aa) + (get_local $U) + ) + ) + (block + (set_local $p + (i32.const 0) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + ) + ) + (block $label$break$b + (if + (i32.eqz + (i32.and + (i32.load + (i32.const 1652) + ) + (i32.const 4) + ) + ) + (block + (set_local $U + (i32.load + (i32.const 1232) + ) + ) + (block $label$break$c + (if + (i32.eqz + (get_local $U) + ) + (set_local $N + (i32.const 171) + ) + (block + (set_local $aa + (i32.const 1656) + ) + (loop $while-in32 + (block $while-out31 + (set_local $ba + (i32.load + (get_local $aa) + ) + ) + (if + (i32.le_u + (get_local $ba) + (get_local $U) + ) + (block + (set_local $$ + (i32.add + (get_local $aa) + (i32.const 4) + ) + ) + (if + (i32.gt_u + (i32.add + (get_local $ba) + (i32.load + (get_local $$) + ) + ) + (get_local $U) + ) + (block + (set_local $fa + (get_local $aa) + ) + (set_local $ga + (get_local $$) + ) + (br $while-out31) + ) + ) + ) + ) + (set_local $aa + (i32.load + (i32.add + (get_local $aa) + (i32.const 8) + ) + ) + ) + (if + (i32.eqz + (get_local $aa) + ) + (block + (set_local $N + (i32.const 171) + ) + (br $label$break$c) + ) + ) + (br $while-in32) + ) + ) + (set_local $aa + (i32.and + (i32.sub + (get_local $V) + (i32.load + (i32.const 1220) + ) + ) + (get_local $da) + ) + ) + (if + (i32.lt_u + (get_local $aa) + (i32.const 2147483647) + ) + (block + (set_local $$ + (call $ta + (get_local $aa) + ) + ) + (if + (i32.eq + (get_local $$) + (i32.add + (i32.load + (get_local $fa) + ) + (i32.load + (get_local $ga) + ) + ) + ) + (if + (i32.ne + (get_local $$) + (i32.const -1) + ) + (block + (set_local $ha + (get_local $$) + ) + (set_local $ia + (get_local $aa) + ) + (set_local $N + (i32.const 191) + ) + (br $label$break$b) + ) + ) + (block + (set_local $ja + (get_local $$) + ) + (set_local $ka + (get_local $aa) + ) + (set_local $N + (i32.const 181) + ) + ) + ) + ) + ) + ) + ) + ) + (block $do-once33 + (if + (i32.eq + (get_local $N) + (i32.const 171) + ) + (block + (set_local $U + (call $ta + (i32.const 0) + ) + ) + (if + (i32.ne + (get_local $U) + (i32.const -1) + ) + (block + (set_local $e + (get_local $U) + ) + (set_local $aa + (i32.load + (i32.const 1684) + ) + ) + (set_local $$ + (i32.add + (get_local $aa) + (i32.const -1) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $$) + (get_local $e) + ) + ) + (set_local $la + (get_local $c) + ) + (set_local $la + (i32.add + (i32.sub + (get_local $c) + (get_local $e) + ) + (i32.and + (i32.add + (get_local $$) + (get_local $e) + ) + (i32.sub + (i32.const 0) + (get_local $aa) + ) + ) + ) + ) + ) + (set_local $aa + (i32.load + (i32.const 1640) + ) + ) + (set_local $e + (i32.add + (get_local $aa) + (get_local $la) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $la) + (get_local $y) + ) + (i32.lt_u + (get_local $la) + (i32.const 2147483647) + ) + ) + (block + (set_local $$ + (i32.load + (i32.const 1648) + ) + ) + (if + (get_local $$) + (if + (i32.or + (i32.le_u + (get_local $e) + (get_local $aa) + ) + (i32.gt_u + (get_local $e) + (get_local $$) + ) + ) + (br $do-once33) + ) + ) + (set_local $$ + (call $ta + (get_local $la) + ) + ) + (if + (i32.eq + (get_local $$) + (get_local $U) + ) + (block + (set_local $ha + (get_local $U) + ) + (set_local $ia + (get_local $la) + ) + (set_local $N + (i32.const 191) + ) + (br $label$break$b) + ) + (block + (set_local $ja + (get_local $$) + ) + (set_local $ka + (get_local $la) + ) + (set_local $N + (i32.const 181) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (block $label$break$d + (if + (i32.eq + (get_local $N) + (i32.const 181) + ) + (block + (set_local $$ + (i32.sub + (i32.const 0) + (get_local $ka) + ) + ) + (block $do-once36 + (if + (i32.and + (i32.gt_u + (get_local $ea) + (get_local $ka) + ) + (i32.and + (i32.lt_u + (get_local $ka) + (i32.const 2147483647) + ) + (i32.ne + (get_local $ja) + (i32.const -1) + ) + ) + ) + (block + (set_local $U + (i32.load + (i32.const 1688) + ) + ) + (set_local $e + (i32.and + (i32.add + (i32.sub + (get_local $ca) + (get_local $ka) + ) + (get_local $U) + ) + (i32.sub + (i32.const 0) + (get_local $U) + ) + ) + ) + (if + (i32.lt_u + (get_local $e) + (i32.const 2147483647) + ) + (if + (i32.eq + (call $ta + (get_local $e) + ) + (i32.const -1) + ) + (block + (drop + (call $ta + (get_local $$) + ) + ) + (br $label$break$d) + ) + (block + (set_local $ma + (i32.add + (get_local $e) + (get_local $ka) + ) + ) + (br $do-once36) + ) + ) + (set_local $ma + (get_local $ka) + ) + ) + ) + (set_local $ma + (get_local $ka) + ) + ) + ) + (if + (i32.ne + (get_local $ja) + (i32.const -1) + ) + (block + (set_local $ha + (get_local $ja) + ) + (set_local $ia + (get_local $ma) + ) + (set_local $N + (i32.const 191) + ) + (br $label$break$b) + ) + ) + ) + ) + ) + (i32.store + (i32.const 1652) + (i32.or + (i32.load + (i32.const 1652) + ) + (i32.const 4) + ) + ) + (set_local $N + (i32.const 188) + ) + ) + (set_local $N + (i32.const 188) + ) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 188) + ) + (if + (i32.lt_u + (get_local $c) + (i32.const 2147483647) + ) + (block + (set_local $ma + (call $ta + (get_local $c) + ) + ) + (set_local $c + (call $ta + (i32.const 0) + ) + ) + (if + (i32.and + (i32.lt_u + (get_local $ma) + (get_local $c) + ) + (i32.and + (i32.ne + (get_local $ma) + (i32.const -1) + ) + (i32.ne + (get_local $c) + (i32.const -1) + ) + ) + ) + (block + (set_local $ja + (i32.sub + (get_local $c) + (get_local $ma) + ) + ) + (if + (i32.gt_u + (get_local $ja) + (i32.add + (get_local $y) + (i32.const 40) + ) + ) + (block + (set_local $ha + (get_local $ma) + ) + (set_local $ia + (get_local $ja) + ) + (set_local $N + (i32.const 191) + ) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 191) + ) + (block + (set_local $ja + (i32.add + (i32.load + (i32.const 1640) + ) + (get_local $ia) + ) + ) + (i32.store + (i32.const 1640) + (get_local $ja) + ) + (if + (i32.gt_u + (get_local $ja) + (i32.load + (i32.const 1644) + ) + ) + (i32.store + (i32.const 1644) + (get_local $ja) + ) + ) + (set_local $ja + (i32.load + (i32.const 1232) + ) + ) + (block $do-once38 + (if + (i32.eqz + (get_local $ja) + ) + (block + (set_local $ma + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.or + (i32.eq + (get_local $ma) + (i32.const 0) + ) + (i32.lt_u + (get_local $ha) + (get_local $ma) + ) + ) + (i32.store + (i32.const 1224) + (get_local $ha) + ) + ) + (i32.store + (i32.const 1656) + (get_local $ha) + ) + (i32.store + (i32.const 1660) + (get_local $ia) + ) + (i32.store + (i32.const 1668) + (i32.const 0) + ) + (i32.store + (i32.const 1244) + (i32.load + (i32.const 1680) + ) + ) + (i32.store + (i32.const 1240) + (i32.const -1) + ) + (set_local $ma + (i32.const 0) + ) + (loop $do-in + (block $do-out + (set_local $c + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $ma) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $c) + (i32.const 12) + ) + (get_local $c) + ) + (i32.store + (i32.add + (get_local $c) + (i32.const 8) + ) + (get_local $c) + ) + (set_local $ma + (i32.add + (get_local $ma) + (i32.const 1) + ) + ) + (br_if $do-in + (i32.ne + (get_local $ma) + (i32.const 32) + ) + ) + ) + ) + (set_local $ma + (i32.add + (get_local $ha) + (i32.const 8) + ) + ) + (set_local $c + (if (result i32) + (i32.eq + (i32.and + (get_local $ma) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ma) + ) + (i32.const 7) + ) + ) + ) + (set_local $ma + (i32.add + (get_local $ha) + (get_local $c) + ) + ) + (set_local $ka + (i32.sub + (i32.add + (get_local $ia) + (i32.const -40) + ) + (get_local $c) + ) + ) + (i32.store + (i32.const 1232) + (get_local $ma) + ) + (i32.store + (i32.const 1220) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ma) + (i32.const 4) + ) + (i32.or + (get_local $ka) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $ma) + (get_local $ka) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + ) + (block + (set_local $ka + (i32.const 1656) + ) + (loop $do-in41 + (block $do-out40 + (set_local $ma + (i32.load + (get_local $ka) + ) + ) + (set_local $c + (i32.add + (get_local $ka) + (i32.const 4) + ) + ) + (set_local $ca + (i32.load + (get_local $c) + ) + ) + (if + (i32.eq + (get_local $ha) + (i32.add + (get_local $ma) + (get_local $ca) + ) + ) + (block + (set_local $na + (get_local $ma) + ) + (set_local $oa + (get_local $c) + ) + (set_local $pa + (get_local $ca) + ) + (set_local $ra + (get_local $ka) + ) + (set_local $N + (i32.const 201) + ) + (br $do-out40) + ) + ) + (set_local $ka + (i32.load + (i32.add + (get_local $ka) + (i32.const 8) + ) + ) + ) + (br_if $do-in41 + (i32.ne + (get_local $ka) + (i32.const 0) + ) + ) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 201) + ) + (if + (i32.eqz + (i32.and + (i32.load + (i32.add + (get_local $ra) + (i32.const 12) + ) + ) + (i32.const 8) + ) + ) + (if + (i32.and + (i32.lt_u + (get_local $ja) + (get_local $ha) + ) + (i32.ge_u + (get_local $ja) + (get_local $na) + ) + ) + (block + (i32.store + (get_local $oa) + (i32.add + (get_local $pa) + (get_local $ia) + ) + ) + (set_local $ka + (i32.add + (get_local $ja) + (i32.const 8) + ) + ) + (set_local $ca + (if (result i32) + (i32.eq + (i32.and + (get_local $ka) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ka) + ) + (i32.const 7) + ) + ) + ) + (set_local $ka + (i32.add + (get_local $ja) + (get_local $ca) + ) + ) + (set_local $c + (i32.add + (i32.sub + (get_local $ia) + (get_local $ca) + ) + (i32.load + (i32.const 1220) + ) + ) + ) + (i32.store + (i32.const 1232) + (get_local $ka) + ) + (i32.store + (i32.const 1220) + (get_local $c) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 4) + ) + (i32.or + (get_local $c) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $ka) + (get_local $c) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + (br $do-once38) + ) + ) + ) + ) + (set_local $c + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $ha) + (get_local $c) + ) + (block + (i32.store + (i32.const 1224) + (get_local $ha) + ) + (set_local $sa + (get_local $ha) + ) + ) + (set_local $sa + (get_local $c) + ) + ) + (set_local $c + (i32.add + (get_local $ha) + (get_local $ia) + ) + ) + (set_local $ka + (i32.const 1656) + ) + (loop $while-in43 + (block $while-out42 + (if + (i32.eq + (i32.load + (get_local $ka) + ) + (get_local $c) + ) + (block + (set_local $ua + (get_local $ka) + ) + (set_local $va + (get_local $ka) + ) + (set_local $N + (i32.const 209) + ) + (br $while-out42) + ) + ) + (set_local $ka + (i32.load + (i32.add + (get_local $ka) + (i32.const 8) + ) + ) + ) + (if + (i32.eqz + (get_local $ka) + ) + (block + (set_local $wa + (i32.const 1656) + ) + (br $while-out42) + ) + ) + (br $while-in43) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 209) + ) + (if + (i32.eqz + (i32.and + (i32.load + (i32.add + (get_local $va) + (i32.const 12) + ) + ) + (i32.const 8) + ) + ) + (block + (i32.store + (get_local $ua) + (get_local $ha) + ) + (set_local $ka + (i32.add + (get_local $va) + (i32.const 4) + ) + ) + (i32.store + (get_local $ka) + (i32.add + (i32.load + (get_local $ka) + ) + (get_local $ia) + ) + ) + (set_local $ka + (i32.add + (get_local $ha) + (i32.const 8) + ) + ) + (set_local $ca + (i32.add + (get_local $ha) + (if (result i32) + (i32.eq + (i32.and + (get_local $ka) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ka) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $ka + (i32.add + (get_local $c) + (i32.const 8) + ) + ) + (set_local $ma + (i32.add + (get_local $c) + (if (result i32) + (i32.eq + (i32.and + (get_local $ka) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ka) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $ka + (i32.add + (get_local $ca) + (get_local $y) + ) + ) + (set_local $ea + (i32.sub + (i32.sub + (get_local $ma) + (get_local $ca) + ) + (get_local $y) + ) + ) + (i32.store + (i32.add + (get_local $ca) + (i32.const 4) + ) + (i32.or + (get_local $y) + (i32.const 3) + ) + ) + (block $do-once44 + (if + (i32.eq + (get_local $ma) + (get_local $ja) + ) + (block + (set_local $la + (i32.add + (i32.load + (i32.const 1220) + ) + (get_local $ea) + ) + ) + (i32.store + (i32.const 1220) + (get_local $la) + ) + (i32.store + (i32.const 1232) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 4) + ) + (i32.or + (get_local $la) + (i32.const 1) + ) + ) + ) + (block + (if + (i32.eq + (get_local $ma) + (i32.load + (i32.const 1228) + ) + ) + (block + (set_local $la + (i32.add + (i32.load + (i32.const 1216) + ) + (get_local $ea) + ) + ) + (i32.store + (i32.const 1216) + (get_local $la) + ) + (i32.store + (i32.const 1228) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 4) + ) + (i32.or + (get_local $la) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (get_local $la) + ) + (get_local $la) + ) + (br $do-once44) + ) + ) + (set_local $la + (i32.load + (i32.add + (get_local $ma) + (i32.const 4) + ) + ) + ) + (if + (i32.eq + (i32.and + (get_local $la) + (i32.const 3) + ) + (i32.const 1) + ) + (block + (set_local $ga + (i32.and + (get_local $la) + (i32.const -8) + ) + ) + (set_local $fa + (i32.shr_u + (get_local $la) + (i32.const 3) + ) + ) + (block $label$break$e + (if + (i32.lt_u + (get_local $la) + (i32.const 256) + ) + (block + (set_local $da + (i32.load + (i32.add + (get_local $ma) + (i32.const 8) + ) + ) + ) + (set_local $V + (i32.load + (i32.add + (get_local $ma) + (i32.const 12) + ) + ) + ) + (set_local $$ + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $fa) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (block $do-once47 + (if + (i32.ne + (get_local $da) + (get_local $$) + ) + (block + (if + (i32.lt_u + (get_local $da) + (get_local $sa) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (i32.add + (get_local $da) + (i32.const 12) + ) + ) + (get_local $ma) + ) + (br $do-once47) + ) + (call $qa) + ) + ) + ) + (if + (i32.eq + (get_local $V) + (get_local $da) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (i32.load + (i32.const 1208) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $fa) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$e) + ) + ) + (block $do-once49 + (if + (i32.eq + (get_local $V) + (get_local $$) + ) + (set_local $xa + (i32.add + (get_local $V) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $V) + (get_local $sa) + ) + (call $qa) + ) + (set_local $e + (i32.add + (get_local $V) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $e) + ) + (get_local $ma) + ) + (block + (set_local $xa + (get_local $e) + ) + (br $do-once49) + ) + ) + (call $qa) + ) + ) + ) + (i32.store + (i32.add + (get_local $da) + (i32.const 12) + ) + (get_local $V) + ) + (i32.store + (get_local $xa) + (get_local $da) + ) + ) + (block + (set_local $$ + (i32.load + (i32.add + (get_local $ma) + (i32.const 24) + ) + ) + ) + (set_local $e + (i32.load + (i32.add + (get_local $ma) + (i32.const 12) + ) + ) + ) + (block $do-once51 + (if + (i32.eq + (get_local $e) + (get_local $ma) + ) + (block + (set_local $U + (i32.add + (get_local $ma) + (i32.const 16) + ) + ) + (set_local $aa + (i32.add + (get_local $U) + (i32.const 4) + ) + ) + (set_local $ba + (i32.load + (get_local $aa) + ) + ) + (if + (i32.eqz + (get_local $ba) + ) + (block + (set_local $W + (i32.load + (get_local $U) + ) + ) + (if + (i32.eqz + (get_local $W) + ) + (block + (set_local $ya + (i32.const 0) + ) + (br $do-once51) + ) + (block + (set_local $za + (get_local $W) + ) + (set_local $Aa + (get_local $U) + ) + ) + ) + ) + (block + (set_local $za + (get_local $ba) + ) + (set_local $Aa + (get_local $aa) + ) + ) + ) + (loop $while-in54 + (block $while-out53 + (set_local $aa + (i32.add + (get_local $za) + (i32.const 20) + ) + ) + (set_local $ba + (i32.load + (get_local $aa) + ) + ) + (if + (get_local $ba) + (block + (set_local $za + (get_local $ba) + ) + (set_local $Aa + (get_local $aa) + ) + (br $while-in54) + ) + ) + (set_local $aa + (i32.add + (get_local $za) + (i32.const 16) + ) + ) + (set_local $ba + (i32.load + (get_local $aa) + ) + ) + (if + (i32.eqz + (get_local $ba) + ) + (block + (set_local $Ba + (get_local $za) + ) + (set_local $Ca + (get_local $Aa) + ) + (br $while-out53) + ) + (block + (set_local $za + (get_local $ba) + ) + (set_local $Aa + (get_local $aa) + ) + ) + ) + (br $while-in54) + ) + ) + (if + (i32.lt_u + (get_local $Ca) + (get_local $sa) + ) + (call $qa) + (block + (i32.store + (get_local $Ca) + (i32.const 0) + ) + (set_local $ya + (get_local $Ba) + ) + (br $do-once51) + ) + ) + ) + (block + (set_local $aa + (i32.load + (i32.add + (get_local $ma) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $aa) + (get_local $sa) + ) + (call $qa) + ) + (set_local $ba + (i32.add + (get_local $aa) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $ba) + ) + (get_local $ma) + ) + (call $qa) + ) + (set_local $U + (i32.add + (get_local $e) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $U) + ) + (get_local $ma) + ) + (block + (i32.store + (get_local $ba) + (get_local $e) + ) + (i32.store + (get_local $U) + (get_local $aa) + ) + (set_local $ya + (get_local $e) + ) + (br $do-once51) + ) + (call $qa) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $$) + ) + (br $label$break$e) + ) + (set_local $e + (i32.load + (i32.add + (get_local $ma) + (i32.const 28) + ) + ) + ) + (set_local $da + (i32.add + (i32.const 1512) + (i32.shl + (get_local $e) + (i32.const 2) + ) + ) + ) + (block $do-once55 + (if + (i32.eq + (get_local $ma) + (i32.load + (get_local $da) + ) + ) + (block + (i32.store + (get_local $da) + (get_local $ya) + ) + (if + (get_local $ya) + (br $do-once55) + ) + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $e) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$e) + ) + (block + (if + (i32.lt_u + (get_local $$) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $V + (i32.add + (get_local $$) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $V) + ) + (get_local $ma) + ) + (i32.store + (get_local $V) + (get_local $ya) + ) + (i32.store + (i32.add + (get_local $$) + (i32.const 20) + ) + (get_local $ya) + ) + ) + (if + (i32.eqz + (get_local $ya) + ) + (br $label$break$e) + ) + ) + ) + ) + (set_local $e + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $ya) + (get_local $e) + ) + (call $qa) + ) + (i32.store + (i32.add + (get_local $ya) + (i32.const 24) + ) + (get_local $$) + ) + (set_local $da + (i32.add + (get_local $ma) + (i32.const 16) + ) + ) + (set_local $V + (i32.load + (get_local $da) + ) + ) + (block $do-once57 + (if + (get_local $V) + (if + (i32.lt_u + (get_local $V) + (get_local $e) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $ya) + (i32.const 16) + ) + (get_local $V) + ) + (i32.store + (i32.add + (get_local $V) + (i32.const 24) + ) + (get_local $ya) + ) + (br $do-once57) + ) + ) + ) + ) + (set_local $V + (i32.load + (i32.add + (get_local $da) + (i32.const 4) + ) + ) + ) + (if + (i32.eqz + (get_local $V) + ) + (br $label$break$e) + ) + (if + (i32.lt_u + (get_local $V) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $ya) + (i32.const 20) + ) + (get_local $V) + ) + (i32.store + (i32.add + (get_local $V) + (i32.const 24) + ) + (get_local $ya) + ) + (br $label$break$e) + ) + ) + ) + ) + ) + (set_local $Da + (i32.add + (get_local $ma) + (get_local $ga) + ) + ) + (set_local $Ea + (i32.add + (get_local $ga) + (get_local $ea) + ) + ) + ) + (block + (set_local $Da + (get_local $ma) + ) + (set_local $Ea + (get_local $ea) + ) + ) + ) + (set_local $fa + (i32.add + (get_local $Da) + (i32.const 4) + ) + ) + (i32.store + (get_local $fa) + (i32.and + (i32.load + (get_local $fa) + ) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 4) + ) + (i32.or + (get_local $Ea) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (get_local $Ea) + ) + (get_local $Ea) + ) + (set_local $fa + (i32.shr_u + (get_local $Ea) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $Ea) + (i32.const 256) + ) + (block + (set_local $la + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $fa) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $V + (i32.load + (i32.const 1208) + ) + ) + (set_local $e + (i32.shl + (i32.const 1) + (get_local $fa) + ) + ) + (block $do-once59 + (if + (i32.eqz + (i32.and + (get_local $V) + (get_local $e) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $V) + (get_local $e) + ) + ) + (set_local $Fa + (i32.add + (get_local $la) + (i32.const 8) + ) + ) + (set_local $Ga + (get_local $la) + ) + ) + (block + (set_local $fa + (i32.add + (get_local $la) + (i32.const 8) + ) + ) + (set_local $$ + (i32.load + (get_local $fa) + ) + ) + (if + (i32.ge_u + (get_local $$) + (i32.load + (i32.const 1224) + ) + ) + (block + (set_local $Fa + (get_local $fa) + ) + (set_local $Ga + (get_local $$) + ) + (br $do-once59) + ) + ) + (call $qa) + ) + ) + ) + (i32.store + (get_local $Fa) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $Ga) + (i32.const 12) + ) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 8) + ) + (get_local $Ga) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 12) + ) + (get_local $la) + ) + (br $do-once44) + ) + ) + (set_local $e + (i32.shr_u + (get_local $Ea) + (i32.const 8) + ) + ) + (block $do-once61 + (if + (i32.eqz + (get_local $e) + ) + (set_local $Ha + (i32.const 0) + ) + (block + (if + (i32.gt_u + (get_local $Ea) + (i32.const 16777215) + ) + (block + (set_local $Ha + (i32.const 31) + ) + (br $do-once61) + ) + ) + (set_local $V + (i32.and + (i32.shr_u + (i32.add + (get_local $e) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $ga + (i32.shl + (get_local $e) + (get_local $V) + ) + ) + (set_local $$ + (i32.and + (i32.shr_u + (i32.add + (get_local $ga) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $fa + (i32.shl + (get_local $ga) + (get_local $$) + ) + ) + (set_local $ga + (i32.and + (i32.shr_u + (i32.add + (get_local $fa) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $aa + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $$) + (get_local $V) + ) + (get_local $ga) + ) + ) + (i32.shr_u + (i32.shl + (get_local $fa) + (get_local $ga) + ) + (i32.const 15) + ) + ) + ) + (set_local $Ha + (i32.or + (i32.and + (i32.shr_u + (get_local $Ea) + (i32.add + (get_local $aa) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $aa) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $e + (i32.add + (i32.const 1512) + (i32.shl + (get_local $Ha) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 28) + ) + (get_local $Ha) + ) + (set_local $la + (i32.add + (get_local $ka) + (i32.const 16) + ) + ) + (i32.store + (i32.add + (get_local $la) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store + (get_local $la) + (i32.const 0) + ) + (set_local $la + (i32.load + (i32.const 1212) + ) + ) + (set_local $aa + (i32.shl + (i32.const 1) + (get_local $Ha) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $la) + (get_local $aa) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $la) + (get_local $aa) + ) + ) + (i32.store + (get_local $e) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 24) + ) + (get_local $e) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 12) + ) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 8) + ) + (get_local $ka) + ) + (br $do-once44) + ) + ) + (set_local $aa + (i32.shl + (get_local $Ea) + (if (result i32) + (i32.eq + (get_local $Ha) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $Ha) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $la + (i32.load + (get_local $e) + ) + ) + (loop $while-in64 + (block $while-out63 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $la) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $Ea) + ) + (block + (set_local $Ia + (get_local $la) + ) + (set_local $N + (i32.const 279) + ) + (br $while-out63) + ) + ) + (set_local $e + (i32.add + (i32.add + (get_local $la) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $aa) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $ga + (i32.load + (get_local $e) + ) + ) + (if + (i32.eqz + (get_local $ga) + ) + (block + (set_local $Ja + (get_local $e) + ) + (set_local $Ka + (get_local $la) + ) + (set_local $N + (i32.const 276) + ) + (br $while-out63) + ) + (block + (set_local $aa + (i32.shl + (get_local $aa) + (i32.const 1) + ) + ) + (set_local $la + (get_local $ga) + ) + ) + ) + (br $while-in64) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 276) + ) + (if + (i32.lt_u + (get_local $Ja) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $Ja) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 24) + ) + (get_local $Ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 12) + ) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 8) + ) + (get_local $ka) + ) + (br $do-once44) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 279) + ) + (block + (set_local $la + (i32.add + (get_local $Ia) + (i32.const 8) + ) + ) + (set_local $aa + (i32.load + (get_local $la) + ) + ) + (set_local $ga + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $aa) + (get_local $ga) + ) + (i32.ge_u + (get_local $Ia) + (get_local $ga) + ) + ) + (block + (i32.store + (i32.add + (get_local $aa) + (i32.const 12) + ) + (get_local $ka) + ) + (i32.store + (get_local $la) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 8) + ) + (get_local $aa) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 12) + ) + (get_local $Ia) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once44) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + ) + (set_local $p + (i32.add + (get_local $ca) + (i32.const 8) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + (set_local $wa + (i32.const 1656) + ) + ) + ) + (loop $while-in66 + (block $while-out65 + (set_local $ka + (i32.load + (get_local $wa) + ) + ) + (if + (i32.le_u + (get_local $ka) + (get_local $ja) + ) + (block + (set_local $ea + (i32.add + (get_local $ka) + (i32.load + (i32.add + (get_local $wa) + (i32.const 4) + ) + ) + ) + ) + (if + (i32.gt_u + (get_local $ea) + (get_local $ja) + ) + (block + (set_local $La + (get_local $ea) + ) + (br $while-out65) + ) + ) + ) + ) + (set_local $wa + (i32.load + (i32.add + (get_local $wa) + (i32.const 8) + ) + ) + ) + (br $while-in66) + ) + ) + (set_local $ca + (i32.add + (get_local $La) + (i32.const -47) + ) + ) + (set_local $ea + (i32.add + (get_local $ca) + (i32.const 8) + ) + ) + (set_local $ka + (i32.add + (get_local $ca) + (if (result i32) + (i32.eq + (i32.and + (get_local $ea) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ea) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $ea + (i32.add + (get_local $ja) + (i32.const 16) + ) + ) + (set_local $ca + (if (result i32) + (i32.lt_u + (get_local $ka) + (get_local $ea) + ) + (get_local $ja) + (get_local $ka) + ) + ) + (set_local $ka + (i32.add + (get_local $ca) + (i32.const 8) + ) + ) + (set_local $ma + (i32.add + (get_local $ha) + (i32.const 8) + ) + ) + (set_local $c + (if (result i32) + (i32.eq + (i32.and + (get_local $ma) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ma) + ) + (i32.const 7) + ) + ) + ) + (set_local $ma + (i32.add + (get_local $ha) + (get_local $c) + ) + ) + (set_local $aa + (i32.sub + (i32.add + (get_local $ia) + (i32.const -40) + ) + (get_local $c) + ) + ) + (i32.store + (i32.const 1232) + (get_local $ma) + ) + (i32.store + (i32.const 1220) + (get_local $aa) + ) + (i32.store + (i32.add + (get_local $ma) + (i32.const 4) + ) + (i32.or + (get_local $aa) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $ma) + (get_local $aa) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + (set_local $aa + (i32.add + (get_local $ca) + (i32.const 4) + ) + ) + (i32.store + (get_local $aa) + (i32.const 27) + ) + (i32.store + (get_local $ka) + (i32.load + (i32.const 1656) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 4) + ) + (i32.load + (i32.const 1660) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 8) + ) + (i32.load + (i32.const 1664) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 12) + ) + (i32.load + (i32.const 1668) + ) + ) + (i32.store + (i32.const 1656) + (get_local $ha) + ) + (i32.store + (i32.const 1660) + (get_local $ia) + ) + (i32.store + (i32.const 1668) + (i32.const 0) + ) + (i32.store + (i32.const 1664) + (get_local $ka) + ) + (set_local $ka + (i32.add + (get_local $ca) + (i32.const 24) + ) + ) + (loop $do-in68 + (block $do-out67 + (set_local $ka + (i32.add + (get_local $ka) + (i32.const 4) + ) + ) + (i32.store + (get_local $ka) + (i32.const 7) + ) + (br_if $do-in68 + (i32.lt_u + (i32.add + (get_local $ka) + (i32.const 4) + ) + (get_local $La) + ) + ) + ) + ) + (if + (i32.ne + (get_local $ca) + (get_local $ja) + ) + (block + (set_local $ka + (i32.sub + (get_local $ca) + (get_local $ja) + ) + ) + (i32.store + (get_local $aa) + (i32.and + (i32.load + (get_local $aa) + ) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 4) + ) + (i32.or + (get_local $ka) + (i32.const 1) + ) + ) + (i32.store + (get_local $ca) + (get_local $ka) + ) + (set_local $ma + (i32.shr_u + (get_local $ka) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $ka) + (i32.const 256) + ) + (block + (set_local $c + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $ma) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $la + (i32.load + (i32.const 1208) + ) + ) + (set_local $ga + (i32.shl + (i32.const 1) + (get_local $ma) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $la) + (get_local $ga) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $la) + (get_local $ga) + ) + ) + (set_local $Ma + (i32.add + (get_local $c) + (i32.const 8) + ) + ) + (set_local $Na + (get_local $c) + ) + ) + (block + (set_local $ga + (i32.add + (get_local $c) + (i32.const 8) + ) + ) + (set_local $la + (i32.load + (get_local $ga) + ) + ) + (if + (i32.lt_u + (get_local $la) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $Ma + (get_local $ga) + ) + (set_local $Na + (get_local $la) + ) + ) + ) + ) + ) + (i32.store + (get_local $Ma) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $Na) + (i32.const 12) + ) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 8) + ) + (get_local $Na) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 12) + ) + (get_local $c) + ) + (br $do-once38) + ) + ) + (set_local $c + (i32.shr_u + (get_local $ka) + (i32.const 8) + ) + ) + (if + (i32.eqz + (get_local $c) + ) + (set_local $Oa + (i32.const 0) + ) + (if + (i32.gt_u + (get_local $ka) + (i32.const 16777215) + ) + (set_local $Oa + (i32.const 31) + ) + (block + (set_local $la + (i32.and + (i32.shr_u + (i32.add + (get_local $c) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $ga + (i32.shl + (get_local $c) + (get_local $la) + ) + ) + (set_local $c + (i32.and + (i32.shr_u + (i32.add + (get_local $ga) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $ma + (i32.shl + (get_local $ga) + (get_local $c) + ) + ) + (set_local $ga + (i32.and + (i32.shr_u + (i32.add + (get_local $ma) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $e + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $c) + (get_local $la) + ) + (get_local $ga) + ) + ) + (i32.shr_u + (i32.shl + (get_local $ma) + (get_local $ga) + ) + (i32.const 15) + ) + ) + ) + (set_local $Oa + (i32.or + (i32.and + (i32.shr_u + (get_local $ka) + (i32.add + (get_local $e) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $e) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $e + (i32.add + (i32.const 1512) + (i32.shl + (get_local $Oa) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 28) + ) + (get_local $Oa) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 20) + ) + (i32.const 0) + ) + (i32.store + (get_local $ea) + (i32.const 0) + ) + (set_local $ga + (i32.load + (i32.const 1212) + ) + ) + (set_local $ma + (i32.shl + (i32.const 1) + (get_local $Oa) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $ga) + (get_local $ma) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $ga) + (get_local $ma) + ) + ) + (i32.store + (get_local $e) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 24) + ) + (get_local $e) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 12) + ) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 8) + ) + (get_local $ja) + ) + (br $do-once38) + ) + ) + (set_local $ma + (i32.shl + (get_local $ka) + (if (result i32) + (i32.eq + (get_local $Oa) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $Oa) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $ga + (i32.load + (get_local $e) + ) + ) + (loop $while-in70 + (block $while-out69 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $ga) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $ka) + ) + (block + (set_local $Pa + (get_local $ga) + ) + (set_local $N + (i32.const 305) + ) + (br $while-out69) + ) + ) + (set_local $e + (i32.add + (i32.add + (get_local $ga) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $ma) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $la + (i32.load + (get_local $e) + ) + ) + (if + (i32.eqz + (get_local $la) + ) + (block + (set_local $Ra + (get_local $e) + ) + (set_local $Sa + (get_local $ga) + ) + (set_local $N + (i32.const 302) + ) + (br $while-out69) + ) + (block + (set_local $ma + (i32.shl + (get_local $ma) + (i32.const 1) + ) + ) + (set_local $ga + (get_local $la) + ) + ) + ) + (br $while-in70) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 302) + ) + (if + (i32.lt_u + (get_local $Ra) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $Ra) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 24) + ) + (get_local $Sa) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 12) + ) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 8) + ) + (get_local $ja) + ) + (br $do-once38) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 305) + ) + (block + (set_local $ga + (i32.add + (get_local $Pa) + (i32.const 8) + ) + ) + (set_local $ma + (i32.load + (get_local $ga) + ) + ) + (set_local $ka + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $ma) + (get_local $ka) + ) + (i32.ge_u + (get_local $Pa) + (get_local $ka) + ) + ) + (block + (i32.store + (i32.add + (get_local $ma) + (i32.const 12) + ) + (get_local $ja) + ) + (i32.store + (get_local $ga) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 8) + ) + (get_local $ma) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 12) + ) + (get_local $Pa) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once38) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $ja + (i32.load + (i32.const 1220) + ) + ) + (if + (i32.gt_u + (get_local $ja) + (get_local $y) + ) + (block + (set_local $Pa + (i32.sub + (get_local $ja) + (get_local $y) + ) + ) + (i32.store + (i32.const 1220) + (get_local $Pa) + ) + (set_local $ja + (i32.load + (i32.const 1232) + ) + ) + (set_local $N + (i32.add + (get_local $ja) + (get_local $y) + ) + ) + (i32.store + (i32.const 1232) + (get_local $N) + ) + (i32.store + (i32.add + (get_local $N) + (i32.const 4) + ) + (i32.or + (get_local $Pa) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 4) + ) + (i32.or + (get_local $y) + (i32.const 3) + ) + ) + (set_local $p + (i32.add + (get_local $ja) + (i32.const 8) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + ) + ) + (set_local $ja + (call $Qa) + ) + (i32.store + (get_local $ja) + (i32.const 12) + ) + (set_local $p + (i32.const 0) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + (func $fb (; 13 ;) (param $a i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $i i32) + (local $j i32) + (local $l i32) + (local $m i32) + (local $n i32) + (local $o i32) + (local $p i32) + (local $q i32) + (local $r i32) + (local $s i32) + (local $t i32) + (local $u i32) + (local $v i32) + (local $w i32) + (local $x i32) + (local $y i32) + (local $z i32) + (local $A i32) + (local $B i32) + (local $C i32) + (local $D i32) + (local $E i32) + (local $F i32) + (local $G i32) + (local $H i32) + (local $I i32) + (local $J i32) + (local $K i32) + (local $L i32) + (if + (i32.eqz + (get_local $a) + ) + (return) + ) + (set_local $b + (i32.add + (get_local $a) + (i32.const -8) + ) + ) + (set_local $c + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $b) + (get_local $c) + ) + (call $qa) + ) + (set_local $d + (i32.load + (i32.add + (get_local $a) + (i32.const -4) + ) + ) + ) + (set_local $a + (i32.and + (get_local $d) + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $a) + (i32.const 1) + ) + (call $qa) + ) + (set_local $e + (i32.and + (get_local $d) + (i32.const -8) + ) + ) + (set_local $f + (i32.add + (get_local $b) + (get_local $e) + ) + ) + (block $do-once + (if + (i32.eqz + (i32.and + (get_local $d) + (i32.const 1) + ) + ) + (block + (set_local $g + (i32.load + (get_local $b) + ) + ) + (if + (i32.eqz + (get_local $a) + ) + (return) + ) + (set_local $h + (i32.add + (get_local $b) + (i32.sub + (i32.const 0) + (get_local $g) + ) + ) + ) + (set_local $i + (i32.add + (get_local $g) + (get_local $e) + ) + ) + (if + (i32.lt_u + (get_local $h) + (get_local $c) + ) + (call $qa) + ) + (if + (i32.eq + (get_local $h) + (i32.load + (i32.const 1228) + ) + ) + (block + (set_local $j + (i32.add + (get_local $f) + (i32.const 4) + ) + ) + (set_local $l + (i32.load + (get_local $j) + ) + ) + (if + (i32.ne + (i32.and + (get_local $l) + (i32.const 3) + ) + (i32.const 3) + ) + (block + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 1216) + (get_local $i) + ) + (i32.store + (get_local $j) + (i32.and + (get_local $l) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $h) + (i32.const 4) + ) + (i32.or + (get_local $i) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $h) + (get_local $i) + ) + (get_local $i) + ) + (return) + ) + ) + (set_local $l + (i32.shr_u + (get_local $g) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $g) + (i32.const 256) + ) + (block + (set_local $g + (i32.load + (i32.add + (get_local $h) + (i32.const 8) + ) + ) + ) + (set_local $j + (i32.load + (i32.add + (get_local $h) + (i32.const 12) + ) + ) + ) + (set_local $o + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $l) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.ne + (get_local $g) + (get_local $o) + ) + (block + (if + (i32.lt_u + (get_local $g) + (get_local $c) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (i32.add + (get_local $g) + (i32.const 12) + ) + ) + (get_local $h) + ) + (call $qa) + ) + ) + ) + (if + (i32.eq + (get_local $j) + (get_local $g) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (i32.load + (i32.const 1208) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $l) + ) + (i32.const -1) + ) + ) + ) + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (get_local $j) + (get_local $o) + ) + (set_local $p + (i32.add + (get_local $j) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $j) + (get_local $c) + ) + (call $qa) + ) + (set_local $o + (i32.add + (get_local $j) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $o) + ) + (get_local $h) + ) + (set_local $p + (get_local $o) + ) + (call $qa) + ) + ) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 12) + ) + (get_local $j) + ) + (i32.store + (get_local $p) + (get_local $g) + ) + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + (br $do-once) + ) + ) + (set_local $g + (i32.load + (i32.add + (get_local $h) + (i32.const 24) + ) + ) + ) + (set_local $j + (i32.load + (i32.add + (get_local $h) + (i32.const 12) + ) + ) + ) + (block $do-once0 + (if + (i32.eq + (get_local $j) + (get_local $h) + ) + (block + (set_local $o + (i32.add + (get_local $h) + (i32.const 16) + ) + ) + (set_local $l + (i32.add + (get_local $o) + (i32.const 4) + ) + ) + (set_local $q + (i32.load + (get_local $l) + ) + ) + (if + (i32.eqz + (get_local $q) + ) + (block + (set_local $r + (i32.load + (get_local $o) + ) + ) + (if + (i32.eqz + (get_local $r) + ) + (block + (set_local $s + (i32.const 0) + ) + (br $do-once0) + ) + (block + (set_local $t + (get_local $r) + ) + (set_local $u + (get_local $o) + ) + ) + ) + ) + (block + (set_local $t + (get_local $q) + ) + (set_local $u + (get_local $l) + ) + ) + ) + (loop $while-in + (block $while-out + (set_local $l + (i32.add + (get_local $t) + (i32.const 20) + ) + ) + (set_local $q + (i32.load + (get_local $l) + ) + ) + (if + (get_local $q) + (block + (set_local $t + (get_local $q) + ) + (set_local $u + (get_local $l) + ) + (br $while-in) + ) + ) + (set_local $l + (i32.add + (get_local $t) + (i32.const 16) + ) + ) + (set_local $q + (i32.load + (get_local $l) + ) + ) + (if + (i32.eqz + (get_local $q) + ) + (block + (set_local $v + (get_local $t) + ) + (set_local $w + (get_local $u) + ) + (br $while-out) + ) + (block + (set_local $t + (get_local $q) + ) + (set_local $u + (get_local $l) + ) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (get_local $w) + (get_local $c) + ) + (call $qa) + (block + (i32.store + (get_local $w) + (i32.const 0) + ) + (set_local $s + (get_local $v) + ) + (br $do-once0) + ) + ) + ) + (block + (set_local $l + (i32.load + (i32.add + (get_local $h) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $l) + (get_local $c) + ) + (call $qa) + ) + (set_local $q + (i32.add + (get_local $l) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $q) + ) + (get_local $h) + ) + (call $qa) + ) + (set_local $o + (i32.add + (get_local $j) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $o) + ) + (get_local $h) + ) + (block + (i32.store + (get_local $q) + (get_local $j) + ) + (i32.store + (get_local $o) + (get_local $l) + ) + (set_local $s + (get_local $j) + ) + (br $do-once0) + ) + (call $qa) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $g) + ) + (block + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + ) + (block + (set_local $j + (i32.load + (i32.add + (get_local $h) + (i32.const 28) + ) + ) + ) + (set_local $l + (i32.add + (i32.const 1512) + (i32.shl + (get_local $j) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $h) + (i32.load + (get_local $l) + ) + ) + (block + (i32.store + (get_local $l) + (get_local $s) + ) + (if + (i32.eqz + (get_local $s) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $j) + ) + (i32.const -1) + ) + ) + ) + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $g) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $j + (i32.add + (get_local $g) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $j) + ) + (get_local $h) + ) + (i32.store + (get_local $j) + (get_local $s) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 20) + ) + (get_local $s) + ) + ) + (if + (i32.eqz + (get_local $s) + ) + (block + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + (br $do-once) + ) + ) + ) + ) + (set_local $j + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $s) + (get_local $j) + ) + (call $qa) + ) + (i32.store + (i32.add + (get_local $s) + (i32.const 24) + ) + (get_local $g) + ) + (set_local $l + (i32.add + (get_local $h) + (i32.const 16) + ) + ) + (set_local $o + (i32.load + (get_local $l) + ) + ) + (block $do-once2 + (if + (get_local $o) + (if + (i32.lt_u + (get_local $o) + (get_local $j) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $s) + (i32.const 16) + ) + (get_local $o) + ) + (i32.store + (i32.add + (get_local $o) + (i32.const 24) + ) + (get_local $s) + ) + (br $do-once2) + ) + ) + ) + ) + (set_local $o + (i32.load + (i32.add + (get_local $l) + (i32.const 4) + ) + ) + ) + (if + (i32.eqz + (get_local $o) + ) + (block + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + ) + (if + (i32.lt_u + (get_local $o) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $s) + (i32.const 20) + ) + (get_local $o) + ) + (i32.store + (i32.add + (get_local $o) + (i32.const 24) + ) + (get_local $s) + ) + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + (br $do-once) + ) + ) + ) + ) + ) + ) + (block + (set_local $m + (get_local $b) + ) + (set_local $n + (get_local $e) + ) + ) + ) + ) + (if + (i32.ge_u + (get_local $m) + (get_local $f) + ) + (call $qa) + ) + (set_local $e + (i32.add + (get_local $f) + (i32.const 4) + ) + ) + (set_local $b + (i32.load + (get_local $e) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $b) + (i32.const 1) + ) + ) + (call $qa) + ) + (if + (i32.eqz + (i32.and + (get_local $b) + (i32.const 2) + ) + ) + (block + (if + (i32.eq + (get_local $f) + (i32.load + (i32.const 1232) + ) + ) + (block + (set_local $s + (i32.add + (i32.load + (i32.const 1220) + ) + (get_local $n) + ) + ) + (i32.store + (i32.const 1220) + (get_local $s) + ) + (i32.store + (i32.const 1232) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 4) + ) + (i32.or + (get_local $s) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $m) + (i32.load + (i32.const 1228) + ) + ) + (return) + ) + (i32.store + (i32.const 1228) + (i32.const 0) + ) + (i32.store + (i32.const 1216) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $f) + (i32.load + (i32.const 1228) + ) + ) + (block + (set_local $s + (i32.add + (i32.load + (i32.const 1216) + ) + (get_local $n) + ) + ) + (i32.store + (i32.const 1216) + (get_local $s) + ) + (i32.store + (i32.const 1228) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 4) + ) + (i32.or + (get_local $s) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $m) + (get_local $s) + ) + (get_local $s) + ) + (return) + ) + ) + (set_local $s + (i32.add + (i32.and + (get_local $b) + (i32.const -8) + ) + (get_local $n) + ) + ) + (set_local $c + (i32.shr_u + (get_local $b) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.lt_u + (get_local $b) + (i32.const 256) + ) + (block + (set_local $v + (i32.load + (i32.add + (get_local $f) + (i32.const 8) + ) + ) + ) + (set_local $w + (i32.load + (i32.add + (get_local $f) + (i32.const 12) + ) + ) + ) + (set_local $u + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $c) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.ne + (get_local $v) + (get_local $u) + ) + (block + (if + (i32.lt_u + (get_local $v) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (i32.add + (get_local $v) + (i32.const 12) + ) + ) + (get_local $f) + ) + (call $qa) + ) + ) + ) + (if + (i32.eq + (get_local $w) + (get_local $v) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (i32.load + (i32.const 1208) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $c) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.eq + (get_local $w) + (get_local $u) + ) + (set_local $x + (i32.add + (get_local $w) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $w) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $u + (i32.add + (get_local $w) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $u) + ) + (get_local $f) + ) + (set_local $x + (get_local $u) + ) + (call $qa) + ) + ) + ) + (i32.store + (i32.add + (get_local $v) + (i32.const 12) + ) + (get_local $w) + ) + (i32.store + (get_local $x) + (get_local $v) + ) + ) + (block + (set_local $v + (i32.load + (i32.add + (get_local $f) + (i32.const 24) + ) + ) + ) + (set_local $w + (i32.load + (i32.add + (get_local $f) + (i32.const 12) + ) + ) + ) + (block $do-once6 + (if + (i32.eq + (get_local $w) + (get_local $f) + ) + (block + (set_local $u + (i32.add + (get_local $f) + (i32.const 16) + ) + ) + (set_local $t + (i32.add + (get_local $u) + (i32.const 4) + ) + ) + (set_local $p + (i32.load + (get_local $t) + ) + ) + (if + (i32.eqz + (get_local $p) + ) + (block + (set_local $a + (i32.load + (get_local $u) + ) + ) + (if + (i32.eqz + (get_local $a) + ) + (block + (set_local $y + (i32.const 0) + ) + (br $do-once6) + ) + (block + (set_local $z + (get_local $a) + ) + (set_local $A + (get_local $u) + ) + ) + ) + ) + (block + (set_local $z + (get_local $p) + ) + (set_local $A + (get_local $t) + ) + ) + ) + (loop $while-in9 + (block $while-out8 + (set_local $t + (i32.add + (get_local $z) + (i32.const 20) + ) + ) + (set_local $p + (i32.load + (get_local $t) + ) + ) + (if + (get_local $p) + (block + (set_local $z + (get_local $p) + ) + (set_local $A + (get_local $t) + ) + (br $while-in9) + ) + ) + (set_local $t + (i32.add + (get_local $z) + (i32.const 16) + ) + ) + (set_local $p + (i32.load + (get_local $t) + ) + ) + (if + (i32.eqz + (get_local $p) + ) + (block + (set_local $B + (get_local $z) + ) + (set_local $C + (get_local $A) + ) + (br $while-out8) + ) + (block + (set_local $z + (get_local $p) + ) + (set_local $A + (get_local $t) + ) + ) + ) + (br $while-in9) + ) + ) + (if + (i32.lt_u + (get_local $C) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $C) + (i32.const 0) + ) + (set_local $y + (get_local $B) + ) + (br $do-once6) + ) + ) + ) + (block + (set_local $t + (i32.load + (i32.add + (get_local $f) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $t) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $p + (i32.add + (get_local $t) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $p) + ) + (get_local $f) + ) + (call $qa) + ) + (set_local $u + (i32.add + (get_local $w) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $u) + ) + (get_local $f) + ) + (block + (i32.store + (get_local $p) + (get_local $w) + ) + (i32.store + (get_local $u) + (get_local $t) + ) + (set_local $y + (get_local $w) + ) + (br $do-once6) + ) + (call $qa) + ) + ) + ) + ) + (if + (get_local $v) + (block + (set_local $w + (i32.load + (i32.add + (get_local $f) + (i32.const 28) + ) + ) + ) + (set_local $i + (i32.add + (i32.const 1512) + (i32.shl + (get_local $w) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $f) + (i32.load + (get_local $i) + ) + ) + (block + (i32.store + (get_local $i) + (get_local $y) + ) + (if + (i32.eqz + (get_local $y) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $w) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $v) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $w + (i32.add + (get_local $v) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $w) + ) + (get_local $f) + ) + (i32.store + (get_local $w) + (get_local $y) + ) + (i32.store + (i32.add + (get_local $v) + (i32.const 20) + ) + (get_local $y) + ) + ) + (if + (i32.eqz + (get_local $y) + ) + (br $do-once4) + ) + ) + ) + (set_local $w + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $y) + (get_local $w) + ) + (call $qa) + ) + (i32.store + (i32.add + (get_local $y) + (i32.const 24) + ) + (get_local $v) + ) + (set_local $i + (i32.add + (get_local $f) + (i32.const 16) + ) + ) + (set_local $h + (i32.load + (get_local $i) + ) + ) + (block $do-once10 + (if + (get_local $h) + (if + (i32.lt_u + (get_local $h) + (get_local $w) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $y) + (i32.const 16) + ) + (get_local $h) + ) + (i32.store + (i32.add + (get_local $h) + (i32.const 24) + ) + (get_local $y) + ) + (br $do-once10) + ) + ) + ) + ) + (set_local $h + (i32.load + (i32.add + (get_local $i) + (i32.const 4) + ) + ) + ) + (if + (get_local $h) + (if + (i32.lt_u + (get_local $h) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $y) + (i32.const 20) + ) + (get_local $h) + ) + (i32.store + (i32.add + (get_local $h) + (i32.const 24) + ) + (get_local $y) + ) + (br $do-once4) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 4) + ) + (i32.or + (get_local $s) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $m) + (get_local $s) + ) + (get_local $s) + ) + (if + (i32.eq + (get_local $m) + (i32.load + (i32.const 1228) + ) + ) + (block + (i32.store + (i32.const 1216) + (get_local $s) + ) + (return) + ) + (set_local $D + (get_local $s) + ) + ) + ) + (block + (i32.store + (get_local $e) + (i32.and + (get_local $b) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 4) + ) + (i32.or + (get_local $n) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $m) + (get_local $n) + ) + (get_local $n) + ) + (set_local $D + (get_local $n) + ) + ) + ) + (set_local $n + (i32.shr_u + (get_local $D) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $D) + (i32.const 256) + ) + (block + (set_local $b + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $n) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $e + (i32.load + (i32.const 1208) + ) + ) + (set_local $s + (i32.shl + (i32.const 1) + (get_local $n) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $e) + (get_local $s) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $e) + (get_local $s) + ) + ) + (set_local $E + (i32.add + (get_local $b) + (i32.const 8) + ) + ) + (set_local $F + (get_local $b) + ) + ) + (block + (set_local $s + (i32.add + (get_local $b) + (i32.const 8) + ) + ) + (set_local $e + (i32.load + (get_local $s) + ) + ) + (if + (i32.lt_u + (get_local $e) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $E + (get_local $s) + ) + (set_local $F + (get_local $e) + ) + ) + ) + ) + ) + (i32.store + (get_local $E) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $F) + (i32.const 12) + ) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 8) + ) + (get_local $F) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 12) + ) + (get_local $b) + ) + (return) + ) + ) + (set_local $b + (i32.shr_u + (get_local $D) + (i32.const 8) + ) + ) + (if + (i32.eqz + (get_local $b) + ) + (set_local $G + (i32.const 0) + ) + (if + (i32.gt_u + (get_local $D) + (i32.const 16777215) + ) + (set_local $G + (i32.const 31) + ) + (block + (set_local $F + (i32.and + (i32.shr_u + (i32.add + (get_local $b) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $E + (i32.shl + (get_local $b) + (get_local $F) + ) + ) + (set_local $b + (i32.and + (i32.shr_u + (i32.add + (get_local $E) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $e + (i32.shl + (get_local $E) + (get_local $b) + ) + ) + (set_local $E + (i32.and + (i32.shr_u + (i32.add + (get_local $e) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $s + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $b) + (get_local $F) + ) + (get_local $E) + ) + ) + (i32.shr_u + (i32.shl + (get_local $e) + (get_local $E) + ) + (i32.const 15) + ) + ) + ) + (set_local $G + (i32.or + (i32.and + (i32.shr_u + (get_local $D) + (i32.add + (get_local $s) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $s) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $s + (i32.add + (i32.const 1512) + (i32.shl + (get_local $G) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 28) + ) + (get_local $G) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 20) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 16) + ) + (i32.const 0) + ) + (set_local $E + (i32.load + (i32.const 1212) + ) + ) + (set_local $e + (i32.shl + (i32.const 1) + (get_local $G) + ) + ) + (block $do-once12 + (if + (i32.eqz + (i32.and + (get_local $E) + (get_local $e) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $E) + (get_local $e) + ) + ) + (i32.store + (get_local $s) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 24) + ) + (get_local $s) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 12) + ) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 8) + ) + (get_local $m) + ) + ) + (block + (set_local $F + (i32.shl + (get_local $D) + (if (result i32) + (i32.eq + (get_local $G) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $G) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $b + (i32.load + (get_local $s) + ) + ) + (loop $while-in15 + (block $while-out14 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $b) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $D) + ) + (block + (set_local $H + (get_local $b) + ) + (set_local $I + (i32.const 130) + ) + (br $while-out14) + ) + ) + (set_local $n + (i32.add + (i32.add + (get_local $b) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $F) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $y + (i32.load + (get_local $n) + ) + ) + (if + (i32.eqz + (get_local $y) + ) + (block + (set_local $J + (get_local $n) + ) + (set_local $K + (get_local $b) + ) + (set_local $I + (i32.const 127) + ) + (br $while-out14) + ) + (block + (set_local $F + (i32.shl + (get_local $F) + (i32.const 1) + ) + ) + (set_local $b + (get_local $y) + ) + ) + ) + (br $while-in15) + ) + ) + (if + (i32.eq + (get_local $I) + (i32.const 127) + ) + (if + (i32.lt_u + (get_local $J) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $J) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 24) + ) + (get_local $K) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 12) + ) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 8) + ) + (get_local $m) + ) + (br $do-once12) + ) + ) + (if + (i32.eq + (get_local $I) + (i32.const 130) + ) + (block + (set_local $b + (i32.add + (get_local $H) + (i32.const 8) + ) + ) + (set_local $F + (i32.load + (get_local $b) + ) + ) + (set_local $i + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $F) + (get_local $i) + ) + (i32.ge_u + (get_local $H) + (get_local $i) + ) + ) + (block + (i32.store + (i32.add + (get_local $F) + (i32.const 12) + ) + (get_local $m) + ) + (i32.store + (get_local $b) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 8) + ) + (get_local $F) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 12) + ) + (get_local $H) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once12) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + ) + (set_local $m + (i32.add + (i32.load + (i32.const 1240) + ) + (i32.const -1) + ) + ) + (i32.store + (i32.const 1240) + (get_local $m) + ) + (if + (i32.eqz + (get_local $m) + ) + (set_local $L + (i32.const 1664) + ) + (return) + ) + (loop $while-in17 + (block $while-out16 + (set_local $m + (i32.load + (get_local $L) + ) + ) + (if + (i32.eqz + (get_local $m) + ) + (br $while-out16) + (set_local $L + (i32.add + (get_local $m) + (i32.const 8) + ) + ) + ) + (br $while-in17) + ) + ) + (i32.store + (i32.const 1240) + (i32.const -1) + ) + (return) + ) + (func $Ra (; 14 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $i i32) + (local $j i32) + (local $l i32) + (local $m i32) + (local $n i32) + (local $o i32) + (local $p i32) + (local $q i32) + (local $s i32) + (local $t i32) + (local $u i32) + (local $v i32) + (local $w i32) + (local $x i32) + (local $y i32) + (local $z i32) + (set_local $d + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 48) + ) + ) + (set_local $e + (i32.add + (get_local $d) + (i32.const 16) + ) + ) + (set_local $f + (get_local $d) + ) + (set_local $g + (i32.add + (get_local $d) + (i32.const 32) + ) + ) + (set_local $h + (i32.add + (get_local $a) + (i32.const 28) + ) + ) + (set_local $i + (i32.load + (get_local $h) + ) + ) + (i32.store + (get_local $g) + (get_local $i) + ) + (set_local $j + (i32.add + (get_local $a) + (i32.const 20) + ) + ) + (set_local $l + (i32.sub + (i32.load + (get_local $j) + ) + (get_local $i) + ) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 4) + ) + (get_local $l) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 8) + ) + (get_local $b) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 12) + ) + (get_local $c) + ) + (set_local $b + (i32.add + (get_local $a) + (i32.const 60) + ) + ) + (set_local $i + (i32.add + (get_local $a) + (i32.const 44) + ) + ) + (set_local $m + (get_local $g) + ) + (set_local $g + (i32.const 2) + ) + (set_local $n + (i32.add + (get_local $l) + (get_local $c) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.load + (i32.const 1160) + ) + ) + (block + (i32.store + (get_local $e) + (i32.load + (get_local $b) + ) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 4) + ) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 8) + ) + (get_local $g) + ) + (set_local $o + (call $Pa + (call $ya + (i32.const 146) + (get_local $e) + ) + ) + ) + ) + (block + (call $ra + (i32.const 1) + (get_local $a) + ) + (i32.store + (get_local $f) + (i32.load + (get_local $b) + ) + ) + (i32.store + (i32.add + (get_local $f) + (i32.const 4) + ) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $f) + (i32.const 8) + ) + (get_local $g) + ) + (set_local $l + (call $Pa + (call $ya + (i32.const 146) + (get_local $f) + ) + ) + ) + (call $oa + (i32.const 0) + ) + (set_local $o + (get_local $l) + ) + ) + ) + (if + (i32.eq + (get_local $n) + (get_local $o) + ) + (block + (set_local $p + (i32.const 6) + ) + (br $while-out) + ) + ) + (if + (i32.lt_s + (get_local $o) + (i32.const 0) + ) + (block + (set_local $q + (get_local $m) + ) + (set_local $s + (get_local $g) + ) + (set_local $p + (i32.const 8) + ) + (br $while-out) + ) + ) + (set_local $l + (i32.sub + (get_local $n) + (get_local $o) + ) + ) + (set_local $t + (i32.load + (i32.add + (get_local $m) + (i32.const 4) + ) + ) + ) + (if + (i32.gt_u + (get_local $o) + (get_local $t) + ) + (block + (set_local $u + (i32.load + (get_local $i) + ) + ) + (i32.store + (get_local $h) + (get_local $u) + ) + (i32.store + (get_local $j) + (get_local $u) + ) + (set_local $v + (i32.load + (i32.add + (get_local $m) + (i32.const 12) + ) + ) + ) + (set_local $w + (i32.sub + (get_local $o) + (get_local $t) + ) + ) + (set_local $x + (i32.add + (get_local $m) + (i32.const 8) + ) + ) + (set_local $y + (i32.add + (get_local $g) + (i32.const -1) + ) + ) + ) + (if + (i32.eq + (get_local $g) + (i32.const 2) + ) + (block + (i32.store + (get_local $h) + (i32.add + (i32.load + (get_local $h) + ) + (get_local $o) + ) + ) + (set_local $v + (get_local $t) + ) + (set_local $w + (get_local $o) + ) + (set_local $x + (get_local $m) + ) + (set_local $y + (i32.const 2) + ) + ) + (block + (set_local $v + (get_local $t) + ) + (set_local $w + (get_local $o) + ) + (set_local $x + (get_local $m) + ) + (set_local $y + (get_local $g) + ) + ) + ) + ) + (i32.store + (get_local $x) + (i32.add + (i32.load + (get_local $x) + ) + (get_local $w) + ) + ) + (i32.store + (i32.add + (get_local $x) + (i32.const 4) + ) + (i32.sub + (get_local $v) + (get_local $w) + ) + ) + (set_local $m + (get_local $x) + ) + (set_local $g + (get_local $y) + ) + (set_local $n + (get_local $l) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $p) + (i32.const 6) + ) + (block + (set_local $n + (i32.load + (get_local $i) + ) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 16) + ) + (i32.add + (get_local $n) + (i32.load + (i32.add + (get_local $a) + (i32.const 48) + ) + ) + ) + ) + (set_local $i + (get_local $n) + ) + (i32.store + (get_local $h) + (get_local $i) + ) + (i32.store + (get_local $j) + (get_local $i) + ) + (set_local $z + (get_local $c) + ) + ) + (if + (i32.eq + (get_local $p) + (i32.const 8) + ) + (block + (i32.store + (i32.add + (get_local $a) + (i32.const 16) + ) + (i32.const 0) + ) + (i32.store + (get_local $h) + (i32.const 0) + ) + (i32.store + (get_local $j) + (i32.const 0) + ) + (i32.store + (get_local $a) + (i32.or + (i32.load + (get_local $a) + ) + (i32.const 32) + ) + ) + (if + (i32.eq + (get_local $s) + (i32.const 2) + ) + (set_local $z + (i32.const 0) + ) + (set_local $z + (i32.sub + (get_local $c) + (i32.load + (i32.add + (get_local $q) + (i32.const 4) + ) + ) + ) + ) + ) + ) + ) + ) + (set_global $r + (get_local $d) + ) + (return + (get_local $z) + ) + ) + (func $Wa (; 15 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $j i32) + (local $l i32) + (local $m i32) + (local $n i32) + (local $o i32) + (local $p i32) + (local $q i32) + (set_local $d + (i32.add + (get_local $c) + (i32.const 16) + ) + ) + (set_local $e + (i32.load + (get_local $d) + ) + ) + (if + (i32.eqz + (get_local $e) + ) + (if + (i32.eqz + (call $Xa + (get_local $c) + ) + ) + (block + (set_local $f + (i32.load + (get_local $d) + ) + ) + (set_local $g + (i32.const 5) + ) + ) + (set_local $h + (i32.const 0) + ) + ) + (block + (set_local $f + (get_local $e) + ) + (set_local $g + (i32.const 5) + ) + ) + ) + (block $label$break$a + (if + (i32.eq + (get_local $g) + (i32.const 5) + ) + (block + (set_local $e + (i32.add + (get_local $c) + (i32.const 20) + ) + ) + (set_local $d + (i32.load + (get_local $e) + ) + ) + (set_local $j + (get_local $d) + ) + (if + (i32.lt_u + (i32.sub + (get_local $f) + (get_local $d) + ) + (get_local $b) + ) + (block + (set_local $h + (call_indirect (type $FUNCSIG$iiii) + (get_local $c) + (get_local $a) + (get_local $b) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $c) + (i32.const 36) + ) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (br $label$break$a) + ) + ) + (block $label$break$b + (if + (i32.gt_s + (i32.load8_s + (i32.add + (get_local $c) + (i32.const 75) + ) + ) + (i32.const -1) + ) + (block + (set_local $d + (get_local $b) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (get_local $d) + ) + (block + (set_local $l + (get_local $b) + ) + (set_local $m + (get_local $a) + ) + (set_local $n + (get_local $j) + ) + (set_local $o + (i32.const 0) + ) + (br $label$break$b) + ) + ) + (set_local $p + (i32.add + (get_local $d) + (i32.const -1) + ) + ) + (if + (i32.eq + (i32.load8_s + (i32.add + (get_local $a) + (get_local $p) + ) + ) + (i32.const 10) + ) + (block + (set_local $q + (get_local $d) + ) + (br $while-out) + ) + (set_local $d + (get_local $p) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (call_indirect (type $FUNCSIG$iiii) + (get_local $c) + (get_local $a) + (get_local $q) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $c) + (i32.const 36) + ) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + (get_local $q) + ) + (block + (set_local $h + (get_local $q) + ) + (br $label$break$a) + ) + ) + (set_local $l + (i32.sub + (get_local $b) + (get_local $q) + ) + ) + (set_local $m + (i32.add + (get_local $a) + (get_local $q) + ) + ) + (set_local $n + (i32.load + (get_local $e) + ) + ) + (set_local $o + (get_local $q) + ) + ) + (block + (set_local $l + (get_local $b) + ) + (set_local $m + (get_local $a) + ) + (set_local $n + (get_local $j) + ) + (set_local $o + (i32.const 0) + ) + ) + ) + ) + (drop + (call $jb + (get_local $n) + (get_local $m) + (get_local $l) + ) + ) + (i32.store + (get_local $e) + (i32.add + (i32.load + (get_local $e) + ) + (get_local $l) + ) + ) + (set_local $h + (i32.add + (get_local $o) + (get_local $l) + ) + ) + ) + ) + ) + (return + (get_local $h) + ) + ) + (func $Za (; 16 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $j i32) + (local $l i32) + (local $m i32) + (set_local $b + (get_local $a) + ) + (block $label$break$a + (if + (i32.eqz + (i32.and + (get_local $b) + (i32.const 3) + ) + ) + (block + (set_local $c + (get_local $a) + ) + (set_local $d + (i32.const 4) + ) + ) + (block + (set_local $e + (get_local $a) + ) + (set_local $f + (get_local $b) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.load8_s + (get_local $e) + ) + ) + (block + (set_local $g + (get_local $f) + ) + (br $label$break$a) + ) + ) + (set_local $h + (i32.add + (get_local $e) + (i32.const 1) + ) + ) + (set_local $f + (get_local $h) + ) + (if + (i32.eqz + (i32.and + (get_local $f) + (i32.const 3) + ) + ) + (block + (set_local $c + (get_local $h) + ) + (set_local $d + (i32.const 4) + ) + (br $while-out) + ) + (set_local $e + (get_local $h) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $d) + (i32.const 4) + ) + (block + (set_local $d + (get_local $c) + ) + (loop $while-in1 + (block $while-out0 + (set_local $c + (i32.load + (get_local $d) + ) + ) + (if + (i32.eqz + (i32.and + (i32.xor + (i32.and + (get_local $c) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $c) + (i32.const -16843009) + ) + ) + ) + (set_local $d + (i32.add + (get_local $d) + (i32.const 4) + ) + ) + (block + (set_local $j + (get_local $c) + ) + (set_local $l + (get_local $d) + ) + (br $while-out0) + ) + ) + (br $while-in1) + ) + ) + (if + (i32.eqz + (i32.shr_s + (i32.shl + (i32.and + (get_local $j) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $m + (get_local $l) + ) + (block + (set_local $j + (get_local $l) + ) + (loop $while-in3 + (block $while-out2 + (set_local $l + (i32.add + (get_local $j) + (i32.const 1) + ) + ) + (if + (i32.eqz + (i32.load8_s + (get_local $l) + ) + ) + (block + (set_local $m + (get_local $l) + ) + (br $while-out2) + ) + (set_local $j + (get_local $l) + ) + ) + (br $while-in3) + ) + ) + ) + ) + (set_local $g + (get_local $m) + ) + ) + ) + (return + (i32.sub + (get_local $g) + (get_local $b) + ) + ) + ) + (func $_a (; 17 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (block $do-once + (if + (i32.eqz + (get_local $a) + ) + (block + (if + (i32.eqz + (i32.load + (i32.const 1140) + ) + ) + (set_local $b + (i32.const 0) + ) + (set_local $b + (call $_a + (i32.load + (i32.const 1140) + ) + ) + ) + ) + (call $pa + (i32.const 1188) + ) + (set_local $c + (i32.load + (i32.const 1184) + ) + ) + (if + (i32.eqz + (get_local $c) + ) + (set_local $d + (get_local $b) + ) + (block + (set_local $e + (get_local $c) + ) + (set_local $c + (get_local $b) + ) + (loop $while-in + (block $while-out + (if + (i32.gt_s + (i32.load + (i32.add + (get_local $e) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (set_local $f + (call $Ya + (get_local $e) + ) + ) + (set_local $f + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.load + (i32.add + (get_local $e) + (i32.const 20) + ) + ) + (i32.load + (i32.add + (get_local $e) + (i32.const 28) + ) + ) + ) + (set_local $g + (i32.or + (call $$a + (get_local $e) + ) + (get_local $c) + ) + ) + (set_local $g + (get_local $c) + ) + ) + (if + (get_local $f) + (call $Ta + (get_local $e) + ) + ) + (set_local $e + (i32.load + (i32.add + (get_local $e) + (i32.const 56) + ) + ) + ) + (if + (i32.eqz + (get_local $e) + ) + (block + (set_local $d + (get_local $g) + ) + (br $while-out) + ) + (set_local $c + (get_local $g) + ) + ) + (br $while-in) + ) + ) + ) + ) + (call $xa + (i32.const 1188) + ) + (set_local $h + (get_local $d) + ) + ) + (block + (if + (i32.le_s + (i32.load + (i32.add + (get_local $a) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (block + (set_local $h + (call $$a + (get_local $a) + ) + ) + (br $do-once) + ) + ) + (set_local $c + (i32.eq + (call $Ya + (get_local $a) + ) + (i32.const 0) + ) + ) + (set_local $e + (call $$a + (get_local $a) + ) + ) + (if + (get_local $c) + (set_local $h + (get_local $e) + ) + (block + (call $Ta + (get_local $a) + ) + (set_local $h + (get_local $e) + ) + ) + ) + ) + ) + ) + (return + (get_local $h) + ) + ) + (func $ab (; 18 ;) (param $a i32) (param $b i32) (result i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $j i32) + (local $m i32) + (local $n i32) + (set_local $c + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 16) + ) + ) + (set_local $d + (get_local $c) + ) + (set_local $e + (i32.and + (get_local $b) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $d) + (get_local $e) + ) + (set_local $f + (i32.add + (get_local $a) + (i32.const 16) + ) + ) + (set_local $g + (i32.load + (get_local $f) + ) + ) + (if + (i32.eqz + (get_local $g) + ) + (if + (i32.eqz + (call $Xa + (get_local $a) + ) + ) + (block + (set_local $h + (i32.load + (get_local $f) + ) + ) + (set_local $j + (i32.const 4) + ) + ) + (set_local $m + (i32.const -1) + ) + ) + (block + (set_local $h + (get_local $g) + ) + (set_local $j + (i32.const 4) + ) + ) + ) + (block $do-once + (if + (i32.eq + (get_local $j) + (i32.const 4) + ) + (block + (set_local $g + (i32.add + (get_local $a) + (i32.const 20) + ) + ) + (set_local $f + (i32.load + (get_local $g) + ) + ) + (if + (i32.lt_u + (get_local $f) + (get_local $h) + ) + (block + (set_local $n + (i32.and + (get_local $b) + (i32.const 255) + ) + ) + (if + (i32.ne + (get_local $n) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 75) + ) + ) + ) + (block + (i32.store + (get_local $g) + (i32.add + (get_local $f) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $f) + (get_local $e) + ) + (set_local $m + (get_local $n) + ) + (br $do-once) + ) + ) + ) + ) + (if + (i32.eq + (call_indirect (type $FUNCSIG$iiii) + (get_local $a) + (get_local $d) + (i32.const 1) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $a) + (i32.const 36) + ) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + (i32.const 1) + ) + (set_local $m + (i32.load8_u + (get_local $d) + ) + ) + (set_local $m + (i32.const -1) + ) + ) + ) + ) + ) + (set_global $r + (get_local $c) + ) + (return + (get_local $m) + ) + ) + (func $$a (; 19 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (set_local $b + (i32.add + (get_local $a) + (i32.const 20) + ) + ) + (set_local $c + (i32.add + (get_local $a) + (i32.const 28) + ) + ) + (if + (i32.gt_u + (i32.load + (get_local $b) + ) + (i32.load + (get_local $c) + ) + ) + (block + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $a) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $a) + (i32.const 36) + ) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.eqz + (i32.load + (get_local $b) + ) + ) + (set_local $d + (i32.const -1) + ) + (set_local $e + (i32.const 3) + ) + ) + ) + (set_local $e + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $e) + (i32.const 3) + ) + (block + (set_local $e + (i32.add + (get_local $a) + (i32.const 4) + ) + ) + (set_local $f + (i32.load + (get_local $e) + ) + ) + (set_local $g + (i32.add + (get_local $a) + (i32.const 8) + ) + ) + (set_local $h + (i32.load + (get_local $g) + ) + ) + (if + (i32.lt_u + (get_local $f) + (get_local $h) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $a) + (i32.sub + (get_local $f) + (get_local $h) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $a) + (i32.const 40) + ) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 16) + ) + (i32.const 0) + ) + (i32.store + (get_local $c) + (i32.const 0) + ) + (i32.store + (get_local $b) + (i32.const 0) + ) + (i32.store + (get_local $g) + (i32.const 0) + ) + (i32.store + (get_local $e) + (i32.const 0) + ) + (set_local $d + (i32.const 0) + ) + ) + ) + (return + (get_local $d) + ) + ) + (func $jb (; 20 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $d i32) + (if + (i32.ge_s + (get_local $c) + (i32.const 4096) + ) + (return + (call $va + (get_local $a) + (get_local $b) + (get_local $c) + ) + ) + ) + (set_local $d + (get_local $a) + ) + (if + (i32.eq + (i32.and + (get_local $a) + (i32.const 3) + ) + (i32.and + (get_local $b) + (i32.const 3) + ) + ) + (block + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.and + (get_local $a) + (i32.const 3) + ) + ) + (br $while-out) + ) + (block + (if + (i32.eqz + (get_local $c) + ) + (return + (get_local $d) + ) + ) + (i32.store8 + (get_local $a) + (i32.load8_s + (get_local $b) + ) + ) + (set_local $a + (i32.add + (get_local $a) + (i32.const 1) + ) + ) + (set_local $b + (i32.add + (get_local $b) + (i32.const 1) + ) + ) + (set_local $c + (i32.sub + (get_local $c) + (i32.const 1) + ) + ) + ) + (br $while-in) + ) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eqz + (i32.ge_s + (get_local $c) + (i32.const 4) + ) + ) + (br $while-out0) + ) + (block + (i32.store + (get_local $a) + (i32.load + (get_local $b) + ) + ) + (set_local $a + (i32.add + (get_local $a) + (i32.const 4) + ) + ) + (set_local $b + (i32.add + (get_local $b) + (i32.const 4) + ) + ) + (set_local $c + (i32.sub + (get_local $c) + (i32.const 4) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eqz + (i32.gt_s + (get_local $c) + (i32.const 0) + ) + ) + (br $while-out2) + ) + (block + (i32.store8 + (get_local $a) + (i32.load8_s + (get_local $b) + ) + ) + (set_local $a + (i32.add + (get_local $a) + (i32.const 1) + ) + ) + (set_local $b + (i32.add + (get_local $b) + (i32.const 1) + ) + ) + (set_local $c + (i32.sub + (get_local $c) + (i32.const 1) + ) + ) + ) + (br $while-in3) + ) + ) + (return + (get_local $d) + ) + ) + (func $gb (; 21 ;) + (nop) + ) + (func $hb (; 22 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (set_local $d + (i32.add + (get_local $a) + (get_local $c) + ) + ) + (if + (i32.ge_s + (get_local $c) + (i32.const 20) + ) + (block + (set_local $b + (i32.and + (get_local $b) + (i32.const 255) + ) + ) + (set_local $e + (i32.and + (get_local $a) + (i32.const 3) + ) + ) + (set_local $f + (i32.or + (i32.or + (i32.or + (get_local $b) + (i32.shl + (get_local $b) + (i32.const 8) + ) + ) + (i32.shl + (get_local $b) + (i32.const 16) + ) + ) + (i32.shl + (get_local $b) + (i32.const 24) + ) + ) + ) + (set_local $g + (i32.and + (get_local $d) + (i32.xor + (i32.const 3) + (i32.const -1) + ) + ) + ) + (if + (get_local $e) + (block + (set_local $e + (i32.sub + (i32.add + (get_local $a) + (i32.const 4) + ) + (get_local $e) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.lt_s + (get_local $a) + (get_local $e) + ) + ) + (br $while-out) + ) + (block + (i32.store8 + (get_local $a) + (get_local $b) + ) + (set_local $a + (i32.add + (get_local $a) + (i32.const 1) + ) + ) + ) + (br $while-in) + ) + ) + ) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eqz + (i32.lt_s + (get_local $a) + (get_local $g) + ) + ) + (br $while-out0) + ) + (block + (i32.store + (get_local $a) + (get_local $f) + ) + (set_local $a + (i32.add + (get_local $a) + (i32.const 4) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eqz + (i32.lt_s + (get_local $a) + (get_local $d) + ) + ) + (br $while-out2) + ) + (block + (i32.store8 + (get_local $a) + (get_local $b) + ) + (set_local $a + (i32.add + (get_local $a) + (i32.const 1) + ) + ) + ) + (br $while-in3) + ) + ) + (return + (i32.sub + (get_local $a) + (get_local $c) + ) + ) + ) + (func $db (; 23 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (set_local $b + (i32.load + (i32.const 1024) + ) + ) + (if + (i32.gt_s + (i32.load + (i32.add + (get_local $b) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (set_local $c + (call $Ya + (get_local $b) + ) + ) + (set_local $c + (i32.const 0) + ) + ) + (block $do-once + (if + (i32.lt_s + (call $cb + (get_local $a) + (get_local $b) + ) + (i32.const 0) + ) + (set_local $d + (i32.const 1) + ) + (block + (if + (i32.ne + (i32.load8_s + (i32.add + (get_local $b) + (i32.const 75) + ) + ) + (i32.const 10) + ) + (block + (set_local $e + (i32.add + (get_local $b) + (i32.const 20) + ) + ) + (set_local $f + (i32.load + (get_local $e) + ) + ) + (if + (i32.lt_u + (get_local $f) + (i32.load + (i32.add + (get_local $b) + (i32.const 16) + ) + ) + ) + (block + (i32.store + (get_local $e) + (i32.add + (get_local $f) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $f) + (i32.const 10) + ) + (set_local $d + (i32.const 0) + ) + (br $do-once) + ) + ) + ) + ) + (set_local $d + (i32.lt_s + (call $ab + (get_local $b) + (i32.const 10) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (if + (get_local $c) + (call $Ta + (get_local $b) + ) + ) + (return + (i32.shr_s + (i32.shl + (get_local $d) + (i32.const 31) + ) + (i32.const 31) + ) + ) + ) + (func $Xa (; 24 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (local $d i32) + (set_local $b + (i32.add + (get_local $a) + (i32.const 74) + ) + ) + (set_local $c + (i32.load8_s + (get_local $b) + ) + ) + (i32.store8 + (get_local $b) + (i32.or + (i32.add + (get_local $c) + (i32.const 255) + ) + (get_local $c) + ) + ) + (set_local $c + (i32.load + (get_local $a) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $c) + (i32.const 8) + ) + ) + (block + (i32.store + (i32.add + (get_local $a) + (i32.const 8) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 4) + ) + (i32.const 0) + ) + (set_local $b + (i32.load + (i32.add + (get_local $a) + (i32.const 44) + ) + ) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 28) + ) + (get_local $b) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 20) + ) + (get_local $b) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 16) + ) + (i32.add + (get_local $b) + (i32.load + (i32.add + (get_local $a) + (i32.const 48) + ) + ) + ) + ) + (set_local $d + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $a) + (i32.or + (get_local $c) + (i32.const 32) + ) + ) + (set_local $d + (i32.const -1) + ) + ) + ) + (return + (get_local $d) + ) + ) + (func $i32u-div (; 25 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (i32.div_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $bb (; 26 ;) (param $a i32) (param $b i32) (param $c i32) (param $d i32) (result i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $i i32) + (set_local $e + (i32.mul + (get_local $c) + (get_local $b) + ) + ) + (if + (i32.gt_s + (i32.load + (i32.add + (get_local $d) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (block + (set_local $f + (i32.eq + (call $Ya + (get_local $d) + ) + (i32.const 0) + ) + ) + (set_local $g + (call $Wa + (get_local $a) + (get_local $e) + (get_local $d) + ) + ) + (if + (get_local $f) + (set_local $h + (get_local $g) + ) + (block + (call $Ta + (get_local $d) + ) + (set_local $h + (get_local $g) + ) + ) + ) + ) + (set_local $h + (call $Wa + (get_local $a) + (get_local $e) + (get_local $d) + ) + ) + ) + (if + (i32.eq + (get_local $h) + (get_local $e) + ) + (set_local $i + (get_local $c) + ) + (set_local $i + (call $i32u-div + (get_local $h) + (get_local $b) + ) + ) + ) + (return + (get_local $i) + ) + ) + (func $Ua (; 27 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (set_local $d + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 32) + ) + ) + (set_local $e + (get_local $d) + ) + (set_local $f + (i32.add + (get_local $d) + (i32.const 20) + ) + ) + (i32.store + (get_local $e) + (i32.load + (i32.add + (get_local $a) + (i32.const 60) + ) + ) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 8) + ) + (get_local $b) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 12) + ) + (get_local $f) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 16) + ) + (get_local $c) + ) + (if + (i32.lt_s + (call $Pa + (call $ua + (i32.const 140) + (get_local $e) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $f) + (i32.const -1) + ) + (set_local $g + (i32.const -1) + ) + ) + (set_local $g + (i32.load + (get_local $f) + ) + ) + ) + (set_global $r + (get_local $d) + ) + (return + (get_local $g) + ) + ) + (func $Va (; 28 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $d i32) + (local $e i32) + (set_local $d + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 80) + ) + ) + (set_local $e + (get_local $d) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 36) + ) + (i32.const 3) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $a) + ) + (i32.const 64) + ) + ) + (block + (i32.store + (get_local $e) + (i32.load + (i32.add + (get_local $a) + (i32.const 60) + ) + ) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 4) + ) + (i32.const 21505) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 8) + ) + (i32.add + (get_local $d) + (i32.const 12) + ) + ) + (if + (call $wa + (i32.const 54) + (get_local $e) + ) + (i32.store8 + (i32.add + (get_local $a) + (i32.const 75) + ) + (i32.const -1) + ) + ) + ) + ) + (set_local $e + (call $Ra + (get_local $a) + (get_local $b) + (get_local $c) + ) + ) + (set_global $r + (get_local $d) + ) + (return + (get_local $e) + ) + ) + (func $Ka (; 29 ;) (param $a i32) + (i32.store8 + (get_global $t) + (i32.load8_s + (get_local $a) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 1) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 1) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 2) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 2) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 3) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 3) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 4) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 4) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 5) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 5) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 6) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 6) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 7) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 7) + ) + ) + ) + ) + (func $Oa (; 30 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (set_local $b + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 16) + ) + ) + (set_local $c + (get_local $b) + ) + (i32.store + (get_local $c) + (i32.load + (i32.add + (get_local $a) + (i32.const 60) + ) + ) + ) + (set_local $a + (call $Pa + (call $sa + (i32.const 6) + (get_local $c) + ) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $a) + ) + ) + (func $Pa (; 31 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (if + (i32.gt_u + (get_local $a) + (i32.const -4096) + ) + (block + (set_local $b + (call $Qa) + ) + (i32.store + (get_local $b) + (i32.sub + (i32.const 0) + (get_local $a) + ) + ) + (set_local $c + (i32.const -1) + ) + ) + (set_local $c + (get_local $a) + ) + ) + (return + (get_local $c) + ) + ) + (func $Ja (; 32 ;) (param $a i32) + (i32.store8 + (get_global $t) + (i32.load8_s + (get_local $a) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 1) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 1) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 2) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 2) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 3) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 3) + ) + ) + ) + ) + (func $Qa (; 33 ;) (result i32) + (local $a i32) + (local $b i32) + (if + (i32.eqz + (i32.load + (i32.const 1160) + ) + ) + (set_local $a + (i32.const 1204) + ) + (block + (set_local $b + (i32.add + (call $ib) + (i32.const 64) + ) + ) + (set_local $a + (i32.load + (get_local $b) + ) + ) + ) + ) + (return + (get_local $a) + ) + ) + (func $lb (; 34 ;) (param $a i32) (param $b i32) (param $c i32) (param $d i32) (result i32) + (return + (call_indirect (type $FUNCSIG$iiii) + (get_local $b) + (get_local $c) + (get_local $d) + (i32.add + (i32.and + (get_local $a) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + ) + (func $Ea (; 35 ;) (param $a i32) (result i32) + (local $b i32) + (set_local $b + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (get_local $a) + ) + ) + (set_global $r + (i32.and + (i32.add + (get_global $r) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (return + (get_local $b) + ) + ) + (func $cb (; 36 ;) (param $a i32) (param $b i32) (result i32) + (return + (i32.add + (call $bb + (get_local $a) + (call $Za + (get_local $a) + ) + (i32.const 1) + (get_local $b) + ) + (i32.const -1) + ) + ) + ) + (func $ob (; 37 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (call $ja + (i32.const 1) + ) + (return + (i32.const 0) + ) + ) + (func $Ia (; 38 ;) (param $a i32) (param $b i32) + (if + (i32.eqz + (get_global $v) + ) + (block + (set_global $v + (get_local $a) + ) + (set_global $w + (get_local $b) + ) + ) + ) + ) + (func $kb (; 39 ;) (param $a i32) (param $b i32) (result i32) + (return + (call_indirect (type $FUNCSIG$ii) + (get_local $b) + (i32.add + (i32.and + (get_local $a) + (i32.const 1) + ) + (i32.const 0) + ) + ) + ) + ) + (func $Sa (; 40 ;) (param $a i32) + (if + (i32.eqz + (i32.load + (i32.add + (get_local $a) + (i32.const 68) + ) + ) + ) + (call $Ta + (get_local $a) + ) + ) + (return) + ) + (func $mb (; 41 ;) (param $a i32) (param $b i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $b) + (i32.add + (i32.and + (get_local $a) + (i32.const 1) + ) + (i32.const 6) + ) + ) + ) + (func $Ha (; 42 ;) (param $a i32) (param $b i32) + (set_global $r + (get_local $a) + ) + (set_global $s + (get_local $b) + ) + ) + (func $nb (; 43 ;) (param $a i32) (result i32) + (call $ja + (i32.const 0) + ) + (return + (i32.const 0) + ) + ) + (func $Na (; 44 ;) (result i32) + (drop + (call $db + (i32.const 1144) + ) + ) + (return + (i32.const 0) + ) + ) + (func $Ya (; 45 ;) (param $a i32) (result i32) + (return + (i32.const 0) + ) + ) + (func $Ta (; 46 ;) (param $a i32) + (return) + ) + (func $pb (; 47 ;) (param $a i32) + (call $ja + (i32.const 2) + ) + ) + (func $La (; 48 ;) (param $a i32) + (set_global $K + (get_local $a) + ) + ) + (func $Ga (; 49 ;) (param $a i32) + (set_global $r + (get_local $a) + ) + ) + (func $Ma (; 50 ;) (result i32) + (return + (get_global $K) + ) + ) + (func $Fa (; 51 ;) (result i32) + (return + (get_global $r) + ) + ) + (func $ib (; 52 ;) (result i32) + (return + (i32.const 0) + ) + ) + (func $__growWasmMemory (; 53 ;) (param $newSize i32) (result i32) + (grow_memory + (get_local $newSize) + ) + ) +) diff --git a/src/binaryen/test/memorygrowth.fromasm.imprecise b/src/binaryen/test/memorygrowth.fromasm.imprecise new file mode 100644 index 0000000000..acf1fdd59c --- /dev/null +++ b/src/binaryen/test/memorygrowth.fromasm.imprecise @@ -0,0 +1,9816 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (import "env" "STACKTOP" (global $r$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $s$asm2wasm$import i32)) + (import "env" "abort" (func $ja (param i32))) + (import "env" "_pthread_cleanup_pop" (func $oa (param i32))) + (import "env" "___lock" (func $pa (param i32))) + (import "env" "_abort" (func $qa)) + (import "env" "_pthread_cleanup_push" (func $ra (param i32 i32))) + (import "env" "___syscall6" (func $sa (param i32 i32) (result i32))) + (import "env" "_sbrk" (func $ta (param i32) (result i32))) + (import "env" "___syscall140" (func $ua (param i32 i32) (result i32))) + (import "env" "_emscripten_memcpy_big" (func $va (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $wa (param i32 i32) (result i32))) + (import "env" "___unlock" (func $xa (param i32))) + (import "env" "___syscall146" (func $ya (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 8 8 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $r (mut i32) (get_global $r$asm2wasm$import)) + (global $s (mut i32) (get_global $s$asm2wasm$import)) + (global $v (mut i32) (i32.const 0)) + (global $w (mut i32) (i32.const 0)) + (global $K (mut i32) (i32.const 0)) + (elem (get_global $tableBase) $nb $Oa $ob $Va $Ua $Ra $pb $Sa) + (export "_free" (func $fb)) + (export "_main" (func $Na)) + (export "_pthread_self" (func $ib)) + (export "_memset" (func $hb)) + (export "_malloc" (func $eb)) + (export "_memcpy" (func $jb)) + (export "_fflush" (func $_a)) + (export "___errno_location" (func $Qa)) + (export "runPostSets" (func $gb)) + (export "stackAlloc" (func $Ea)) + (export "stackSave" (func $Fa)) + (export "stackRestore" (func $Ga)) + (export "establishStackSpace" (func $Ha)) + (export "setThrew" (func $Ia)) + (export "setTempRet0" (func $La)) + (export "getTempRet0" (func $Ma)) + (export "dynCall_ii" (func $kb)) + (export "dynCall_iiii" (func $lb)) + (export "dynCall_vi" (func $mb)) + (export "__growWasmMemory" (func $__growWasmMemory)) + (func $eb (; 12 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (local $47 i32) + (local $48 i32) + (local $49 i32) + (local $50 i32) + (local $51 i32) + (local $52 i32) + (local $53 i32) + (local $54 i32) + (block $folding-inner0 + (set_local $25 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 16) + ) + ) + (set_local $13 + (get_local $25) + ) + (block $do-once + (if + (i32.lt_u + (get_local $0) + (i32.const 245) + ) + (block + (if + (i32.and + (tee_local $5 + (i32.shr_u + (tee_local $4 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $0 + (i32.shr_u + (tee_local $3 + (select + (i32.const 16) + (i32.and + (i32.add + (get_local $0) + (i32.const 11) + ) + (i32.const -8) + ) + (i32.lt_u + (get_local $0) + (i32.const 11) + ) + ) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 3) + ) + (block + (set_local $6 + (i32.load + (tee_local $3 + (i32.add + (tee_local $12 + (i32.load + (tee_local $14 + (i32.add + (tee_local $8 + (i32.add + (i32.shl + (tee_local $0 + (i32.add + (i32.xor + (i32.and + (get_local $5) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $0) + ) + ) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $8) + (get_local $6) + ) + (i32.store + (i32.const 1208) + (i32.and + (get_local $4) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $0) + ) + (i32.const -1) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + ) + (get_local $12) + ) + (block + (i32.store + (get_local $7) + (get_local $8) + ) + (i32.store + (get_local $14) + (get_local $6) + ) + ) + (call $qa) + ) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.or + (tee_local $6 + (i32.shl + (get_local $0) + (i32.const 3) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $14 + (i32.add + (i32.add + (get_local $12) + (get_local $6) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $14) + ) + (i32.const 1) + ) + ) + (set_global $r + (get_local $25) + ) + (return + (get_local $3) + ) + ) + ) + (if + (i32.gt_u + (get_local $3) + (tee_local $14 + (i32.load + (i32.const 1216) + ) + ) + ) + (block + (if + (get_local $5) + (block + (set_local $8 + (i32.and + (i32.shr_u + (tee_local $6 + (i32.add + (i32.and + (tee_local $8 + (i32.and + (i32.shl + (get_local $5) + (get_local $0) + ) + (i32.or + (tee_local $6 + (i32.shl + (i32.const 2) + (get_local $0) + ) + ) + (i32.sub + (i32.const 0) + (get_local $6) + ) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $8) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $8 + (i32.load + (tee_local $7 + (i32.add + (tee_local $9 + (i32.load + (tee_local $12 + (i32.add + (tee_local $1 + (i32.add + (i32.shl + (tee_local $16 + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $6 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $6) + (get_local $8) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $8) + ) + (tee_local $7 + (i32.and + (i32.shr_u + (tee_local $9 + (i32.shr_u + (get_local $7) + (get_local $6) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $9 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $9) + (get_local $7) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $12 + (i32.shr_u + (get_local $1) + (get_local $9) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $12) + (get_local $1) + ) + ) + ) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $1) + (get_local $8) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (get_local $4) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $16) + ) + (i32.const -1) + ) + ) + ) + (set_local $34 + (get_local $14) + ) + ) + (block + (if + (i32.lt_u + (get_local $8) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $6 + (i32.add + (get_local $8) + (i32.const 12) + ) + ) + ) + (get_local $9) + ) + (block + (i32.store + (get_local $6) + (get_local $1) + ) + (i32.store + (get_local $12) + (get_local $8) + ) + (set_local $34 + (i32.load + (i32.const 1216) + ) + ) + ) + (call $qa) + ) + ) + ) + (i32.store offset=4 + (get_local $9) + (i32.or + (get_local $3) + (i32.const 3) + ) + ) + (i32.store offset=4 + (tee_local $12 + (i32.add + (get_local $9) + (get_local $3) + ) + ) + (i32.or + (tee_local $8 + (i32.sub + (i32.shl + (get_local $16) + (i32.const 3) + ) + (get_local $3) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $12) + (get_local $8) + ) + (get_local $8) + ) + (if + (get_local $34) + (block + (set_local $1 + (i32.load + (i32.const 1228) + ) + ) + (set_local $4 + (i32.add + (i32.shl + (tee_local $14 + (i32.shr_u + (get_local $34) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (if + (i32.and + (tee_local $0 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $5 + (i32.shl + (i32.const 1) + (get_local $14) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $5 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $40 + (get_local $5) + ) + (set_local $35 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $0) + (get_local $5) + ) + ) + (set_local $40 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (set_local $35 + (get_local $4) + ) + ) + ) + (i32.store + (get_local $40) + (get_local $1) + ) + (i32.store offset=12 + (get_local $35) + (get_local $1) + ) + (i32.store offset=8 + (get_local $1) + (get_local $35) + ) + (i32.store offset=12 + (get_local $1) + (get_local $4) + ) + ) + ) + (i32.store + (i32.const 1216) + (get_local $8) + ) + (i32.store + (i32.const 1228) + (get_local $12) + ) + (set_global $r + (get_local $25) + ) + (return + (get_local $7) + ) + ) + ) + (if + (tee_local $12 + (i32.load + (i32.const 1212) + ) + ) + (block + (set_local $12 + (i32.and + (i32.shr_u + (tee_local $8 + (i32.add + (i32.and + (get_local $12) + (i32.sub + (i32.const 0) + (get_local $12) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $0 + (i32.sub + (i32.and + (i32.load offset=4 + (tee_local $14 + (i32.load + (i32.add + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $8 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $8) + (get_local $12) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $12) + ) + (tee_local $4 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $4) + (get_local $8) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $0 + (i32.shr_u + (get_local $1) + (get_local $4) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $5 + (i32.shr_u + (get_local $0) + (get_local $1) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $5) + (get_local $0) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + ) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $5 + (get_local $14) + ) + (set_local $1 + (get_local $14) + ) + (loop $while-in + (block $while-out + (if + (tee_local $14 + (i32.load offset=16 + (get_local $5) + ) + ) + (set_local $6 + (get_local $14) + ) + (if + (tee_local $4 + (i32.load offset=20 + (get_local $5) + ) + ) + (set_local $6 + (get_local $4) + ) + (block + (set_local $6 + (get_local $0) + ) + (set_local $2 + (get_local $1) + ) + (br $while-out) + ) + ) + ) + (set_local $4 + (i32.lt_u + (tee_local $14 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $6) + ) + (i32.const -8) + ) + (get_local $3) + ) + ) + (get_local $0) + ) + ) + (set_local $0 + (select + (get_local $14) + (get_local $0) + (get_local $4) + ) + ) + (set_local $5 + (get_local $6) + ) + (set_local $1 + (select + (get_local $6) + (get_local $1) + (get_local $4) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (get_local $2) + (tee_local $1 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (if + (i32.ge_u + (get_local $2) + (tee_local $5 + (i32.add + (get_local $2) + (get_local $3) + ) + ) + ) + (call $qa) + ) + (set_local $0 + (i32.load offset=24 + (get_local $2) + ) + ) + (block $do-once4 + (if + (i32.eq + (tee_local $7 + (i32.load offset=12 + (get_local $2) + ) + ) + (get_local $2) + ) + (block + (if + (tee_local $16 + (i32.load + (tee_local $9 + (i32.add + (get_local $2) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $14 + (get_local $16) + ) + (set_local $4 + (get_local $9) + ) + ) + (if + (i32.eqz + (tee_local $14 + (i32.load + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + ) + (block + (set_local $23 + (i32.const 0) + ) + (br $do-once4) + ) + ) + ) + (loop $while-in7 + (if + (tee_local $16 + (i32.load + (tee_local $9 + (i32.add + (get_local $14) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $14 + (get_local $16) + ) + (set_local $4 + (get_local $9) + ) + (br $while-in7) + ) + ) + (if + (tee_local $16 + (i32.load + (tee_local $9 + (i32.add + (get_local $14) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $14 + (get_local $16) + ) + (set_local $4 + (get_local $9) + ) + (br $while-in7) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (get_local $1) + ) + (call $qa) + (block + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $23 + (get_local $14) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $9 + (i32.load offset=8 + (get_local $2) + ) + ) + (get_local $1) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (tee_local $16 + (i32.add + (get_local $9) + (i32.const 12) + ) + ) + ) + (get_local $2) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + ) + (get_local $2) + ) + (block + (i32.store + (get_local $16) + (get_local $7) + ) + (i32.store + (get_local $4) + (get_local $9) + ) + (set_local $23 + (get_local $7) + ) + ) + (call $qa) + ) + ) + ) + ) + (block $do-once8 + (if + (get_local $0) + (block + (if + (i32.eq + (get_local $2) + (i32.load + (tee_local $1 + (i32.add + (i32.shl + (tee_local $7 + (i32.load offset=28 + (get_local $2) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + ) + (block + (i32.store + (get_local $1) + (get_local $23) + ) + (if + (i32.eqz + (get_local $23) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $7) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + (get_local $2) + ) + (i32.store + (get_local $7) + (get_local $23) + ) + (i32.store offset=20 + (get_local $0) + (get_local $23) + ) + ) + (br_if $do-once8 + (i32.eqz + (get_local $23) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $23) + (tee_local $7 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (i32.store offset=24 + (get_local $23) + (get_local $0) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $2) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $7) + ) + (call $qa) + (block + (i32.store offset=16 + (get_local $23) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $23) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load offset=20 + (get_local $2) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store offset=20 + (get_local $23) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $23) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $6) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $2) + (i32.or + (tee_local $0 + (i32.add + (get_local $6) + (get_local $3) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $1 + (i32.add + (i32.add + (get_local $2) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $1) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $5) + (i32.or + (get_local $6) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $5) + (get_local $6) + ) + (get_local $6) + ) + (if + (tee_local $1 + (i32.load + (i32.const 1216) + ) + ) + (block + (set_local $0 + (i32.load + (i32.const 1228) + ) + ) + (set_local $1 + (i32.add + (i32.shl + (tee_local $7 + (i32.shr_u + (get_local $1) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (if + (i32.and + (tee_local $9 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $4 + (i32.shl + (i32.const 1) + (get_local $7) + ) + ) + ) + (if + (i32.lt_u + (tee_local $9 + (i32.load + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $41 + (get_local $4) + ) + (set_local $27 + (get_local $9) + ) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $9) + (get_local $4) + ) + ) + (set_local $41 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $27 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $41) + (get_local $0) + ) + (i32.store offset=12 + (get_local $27) + (get_local $0) + ) + (i32.store offset=8 + (get_local $0) + (get_local $27) + ) + (i32.store offset=12 + (get_local $0) + (get_local $1) + ) + ) + ) + (i32.store + (i32.const 1216) + (get_local $6) + ) + (i32.store + (i32.const 1228) + (get_local $5) + ) + ) + ) + (set_global $r + (get_local $25) + ) + (return + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + (set_local $5 + (get_local $3) + ) + ) + ) + (set_local $5 + (get_local $3) + ) + ) + ) + (if + (i32.gt_u + (get_local $0) + (i32.const -65) + ) + (set_local $5 + (i32.const -1) + ) + (block + (set_local $0 + (i32.and + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 11) + ) + ) + (i32.const -8) + ) + ) + (if + (tee_local $9 + (i32.load + (i32.const 1212) + ) + ) + (block + (set_local $4 + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (block $label$break$a + (if + (tee_local $12 + (i32.load + (i32.add + (i32.shl + (tee_local $27 + (if (result i32) + (tee_local $7 + (i32.shr_u + (get_local $1) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $0) + (i32.add + (tee_local $12 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $7 + (i32.and + (i32.shr_u + (i32.add + (tee_local $16 + (i32.shl + (get_local $7) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (get_local $7) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $1) + ) + (tee_local $16 + (i32.and + (i32.shr_u + (i32.add + (tee_local $14 + (i32.shl + (get_local $16) + (get_local $7) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $14) + (get_local $16) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $12) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + (block + (set_local $16 + (get_local $4) + ) + (set_local $14 + (i32.const 0) + ) + (set_local $1 + (i32.shl + (get_local $0) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $27) + (i32.const 1) + ) + ) + (i32.eq + (get_local $27) + (i32.const 31) + ) + ) + ) + ) + (set_local $7 + (get_local $12) + ) + (set_local $8 + (i32.const 0) + ) + (loop $while-in14 + (if + (i32.lt_u + (tee_local $12 + (i32.sub + (tee_local $3 + (i32.and + (i32.load offset=4 + (get_local $7) + ) + (i32.const -8) + ) + ) + (get_local $0) + ) + ) + (get_local $16) + ) + (if + (i32.eq + (get_local $3) + (get_local $0) + ) + (block + (set_local $29 + (get_local $12) + ) + (set_local $28 + (get_local $7) + ) + (set_local $32 + (get_local $7) + ) + (set_local $7 + (i32.const 90) + ) + (br $label$break$a) + ) + (block + (set_local $16 + (get_local $12) + ) + (set_local $8 + (get_local $7) + ) + ) + ) + ) + (set_local $3 + (select + (get_local $14) + (tee_local $12 + (i32.load offset=20 + (get_local $7) + ) + ) + (i32.or + (i32.eqz + (get_local $12) + ) + (i32.eq + (get_local $12) + (tee_local $7 + (i32.load + (i32.add + (i32.add + (get_local $7) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $1) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + ) + (if + (tee_local $12 + (i32.eqz + (get_local $7) + ) + ) + (block + (set_local $36 + (get_local $16) + ) + (set_local $5 + (get_local $3) + ) + (set_local $33 + (get_local $8) + ) + (set_local $7 + (i32.const 86) + ) + ) + (block + (set_local $14 + (get_local $3) + ) + (set_local $1 + (i32.shl + (get_local $1) + (i32.xor + (i32.and + (get_local $12) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (br $while-in14) + ) + ) + ) + ) + (block + (set_local $36 + (get_local $4) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $33 + (i32.const 0) + ) + (set_local $7 + (i32.const 86) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 86) + ) + (if + (tee_local $3 + (if (result i32) + (i32.and + (i32.eqz + (get_local $5) + ) + (i32.eqz + (get_local $33) + ) + ) + (block (result i32) + (if + (i32.eqz + (tee_local $4 + (i32.and + (get_local $9) + (i32.or + (tee_local $12 + (i32.shl + (i32.const 2) + (get_local $27) + ) + ) + (i32.sub + (i32.const 0) + (get_local $12) + ) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $0) + ) + (br $do-once) + ) + ) + (set_local $4 + (i32.and + (i32.shr_u + (tee_local $12 + (i32.add + (i32.and + (get_local $4) + (i32.sub + (i32.const 0) + (get_local $4) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $12 + (i32.and + (i32.shr_u + (tee_local $3 + (i32.shr_u + (get_local $12) + (get_local $4) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $4) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $5 + (i32.shr_u + (get_local $3) + (get_local $12) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $5 + (i32.and + (i32.shr_u + (tee_local $8 + (i32.shr_u + (get_local $5) + (get_local $3) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $8 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $8) + (get_local $5) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $1) + (get_local $8) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + (get_local $5) + ) + ) + (block + (set_local $29 + (get_local $36) + ) + (set_local $28 + (get_local $3) + ) + (set_local $32 + (get_local $33) + ) + (set_local $7 + (i32.const 90) + ) + ) + (block + (set_local $18 + (get_local $36) + ) + (set_local $10 + (get_local $33) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 90) + ) + (loop $while-in16 + (set_local $7 + (i32.const 0) + ) + (set_local $1 + (i32.lt_u + (tee_local $8 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $28) + ) + (i32.const -8) + ) + (get_local $0) + ) + ) + (get_local $29) + ) + ) + (set_local $5 + (select + (get_local $8) + (get_local $29) + (get_local $1) + ) + ) + (set_local $8 + (select + (get_local $28) + (get_local $32) + (get_local $1) + ) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $28) + ) + ) + (block + (set_local $29 + (get_local $5) + ) + (set_local $28 + (get_local $1) + ) + (set_local $32 + (get_local $8) + ) + (br $while-in16) + ) + ) + (if + (tee_local $28 + (i32.load offset=20 + (get_local $28) + ) + ) + (block + (set_local $29 + (get_local $5) + ) + (set_local $32 + (get_local $8) + ) + (br $while-in16) + ) + (block + (set_local $18 + (get_local $5) + ) + (set_local $10 + (get_local $8) + ) + ) + ) + ) + ) + (if + (get_local $10) + (if + (i32.lt_u + (get_local $18) + (i32.sub + (i32.load + (i32.const 1216) + ) + (get_local $0) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (tee_local $9 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (if + (i32.ge_u + (get_local $10) + (tee_local $8 + (i32.add + (get_local $10) + (get_local $0) + ) + ) + ) + (call $qa) + ) + (set_local $5 + (i32.load offset=24 + (get_local $10) + ) + ) + (block $do-once17 + (if + (i32.eq + (tee_local $1 + (i32.load offset=12 + (get_local $10) + ) + ) + (get_local $10) + ) + (block + (if + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $10) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $14 + (get_local $4) + ) + (set_local $1 + (get_local $3) + ) + ) + (if + (tee_local $14 + (i32.load + (tee_local $12 + (i32.add + (get_local $10) + (i32.const 16) + ) + ) + ) + ) + (set_local $1 + (get_local $12) + ) + (block + (set_local $22 + (i32.const 0) + ) + (br $do-once17) + ) + ) + ) + (loop $while-in20 + (if + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $14) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $14 + (get_local $4) + ) + (set_local $1 + (get_local $3) + ) + (br $while-in20) + ) + ) + (if + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $14) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $14 + (get_local $4) + ) + (set_local $1 + (get_local $3) + ) + (br $while-in20) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $9) + ) + (call $qa) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $22 + (get_local $14) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $3 + (i32.load offset=8 + (get_local $10) + ) + ) + (get_local $9) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 12) + ) + ) + ) + (get_local $10) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $12 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (get_local $10) + ) + (block + (i32.store + (get_local $4) + (get_local $1) + ) + (i32.store + (get_local $12) + (get_local $3) + ) + (set_local $22 + (get_local $1) + ) + ) + (call $qa) + ) + ) + ) + ) + (block $do-once21 + (if + (get_local $5) + (block + (if + (i32.eq + (get_local $10) + (i32.load + (tee_local $9 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $10) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + ) + (block + (i32.store + (get_local $9) + (get_local $22) + ) + (if + (i32.eqz + (get_local $22) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $5) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + (get_local $10) + ) + (i32.store + (get_local $1) + (get_local $22) + ) + (i32.store offset=20 + (get_local $5) + (get_local $22) + ) + ) + (br_if $do-once21 + (i32.eqz + (get_local $22) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $22) + (tee_local $1 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (i32.store offset=24 + (get_local $22) + (get_local $5) + ) + (if + (tee_local $9 + (i32.load offset=16 + (get_local $10) + ) + ) + (if + (i32.lt_u + (get_local $9) + (get_local $1) + ) + (call $qa) + (block + (i32.store offset=16 + (get_local $22) + (get_local $9) + ) + (i32.store offset=24 + (get_local $9) + (get_local $22) + ) + ) + ) + ) + (if + (tee_local $9 + (i32.load offset=20 + (get_local $10) + ) + ) + (if + (i32.lt_u + (get_local $9) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store offset=20 + (get_local $22) + (get_local $9) + ) + (i32.store offset=24 + (get_local $9) + (get_local $22) + ) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.lt_u + (get_local $18) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $10) + (i32.or + (tee_local $5 + (i32.add + (get_local $18) + (get_local $0) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $9 + (i32.add + (i32.add + (get_local $10) + (get_local $5) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $9) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $10) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $18) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $8) + (get_local $18) + ) + (get_local $18) + ) + (set_local $9 + (i32.shr_u + (get_local $18) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $18) + (i32.const 256) + ) + (block + (set_local $5 + (i32.add + (i32.shl + (get_local $9) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $3 + (i32.shl + (i32.const 1) + (get_local $9) + ) + ) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.load + (tee_local $3 + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $19 + (get_local $3) + ) + (set_local $6 + (get_local $1) + ) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $1) + (get_local $3) + ) + ) + (set_local $19 + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + (set_local $6 + (get_local $5) + ) + ) + ) + (i32.store + (get_local $19) + (get_local $8) + ) + (i32.store offset=12 + (get_local $6) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $6) + ) + (i32.store offset=12 + (get_local $8) + (get_local $5) + ) + (br $do-once25) + ) + ) + (set_local $12 + (i32.add + (i32.shl + (tee_local $16 + (if (result i32) + (tee_local $5 + (i32.shr_u + (get_local $18) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $18) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $18) + (i32.add + (tee_local $12 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $5 + (i32.and + (i32.shr_u + (i32.add + (tee_local $3 + (i32.shl + (get_local $5) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (get_local $5) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $1) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (i32.add + (tee_local $9 + (i32.shl + (get_local $3) + (get_local $5) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $9) + (get_local $3) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $12) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + (i32.store offset=28 + (get_local $8) + (get_local $16) + ) + (i32.store offset=4 + (tee_local $3 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (i32.const 1212) + ) + ) + (tee_local $9 + (i32.shl + (i32.const 1) + (get_local $16) + ) + ) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $3) + (get_local $9) + ) + ) + (i32.store + (get_local $12) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $12) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + (br $do-once25) + ) + ) + (set_local $9 + (i32.shl + (get_local $18) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $16) + (i32.const 1) + ) + ) + (i32.eq + (get_local $16) + (i32.const 31) + ) + ) + ) + ) + (set_local $3 + (i32.load + (get_local $12) + ) + ) + (loop $while-in28 + (block $while-out27 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const -8) + ) + (get_local $18) + ) + (block + (set_local $17 + (get_local $3) + ) + (set_local $7 + (i32.const 148) + ) + (br $while-out27) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $12 + (i32.add + (i32.add + (get_local $3) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $9) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $9 + (i32.shl + (get_local $9) + (i32.const 1) + ) + ) + (set_local $3 + (get_local $1) + ) + (br $while-in28) + ) + (block + (set_local $21 + (get_local $12) + ) + (set_local $15 + (get_local $3) + ) + (set_local $7 + (i32.const 145) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 145) + ) + (if + (i32.lt_u + (get_local $21) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $21) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $15) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 148) + ) + (if + (i32.and + (i32.ge_u + (tee_local $9 + (i32.load + (tee_local $3 + (i32.add + (get_local $17) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 1224) + ) + ) + ) + (i32.ge_u + (get_local $17) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $9) + (get_local $8) + ) + (i32.store + (get_local $3) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $9) + ) + (i32.store offset=12 + (get_local $8) + (get_local $17) + ) + (i32.store offset=24 + (get_local $8) + (i32.const 0) + ) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + (set_global $r + (get_local $25) + ) + (return + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + ) + (set_local $5 + (get_local $0) + ) + ) + (set_local $5 + (get_local $0) + ) + ) + ) + (set_local $5 + (get_local $0) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (tee_local $10 + (i32.load + (i32.const 1216) + ) + ) + (get_local $5) + ) + (block + (set_local $15 + (i32.load + (i32.const 1228) + ) + ) + (if + (i32.gt_u + (tee_local $17 + (i32.sub + (get_local $10) + (get_local $5) + ) + ) + (i32.const 15) + ) + (block + (i32.store + (i32.const 1228) + (tee_local $21 + (i32.add + (get_local $15) + (get_local $5) + ) + ) + ) + (i32.store + (i32.const 1216) + (get_local $17) + ) + (i32.store offset=4 + (get_local $21) + (i32.or + (get_local $17) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $21) + (get_local $17) + ) + (get_local $17) + ) + (i32.store offset=4 + (get_local $15) + (i32.or + (get_local $5) + (i32.const 3) + ) + ) + ) + (block + (i32.store + (i32.const 1216) + (i32.const 0) + ) + (i32.store + (i32.const 1228) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $15) + (i32.or + (get_local $10) + (i32.const 3) + ) + ) + (i32.store + (tee_local $17 + (i32.add + (i32.add + (get_local $15) + (get_local $10) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $17) + ) + (i32.const 1) + ) + ) + ) + ) + (br $folding-inner0) + ) + ) + (if + (i32.gt_u + (tee_local $15 + (i32.load + (i32.const 1220) + ) + ) + (get_local $5) + ) + (block + (i32.store + (i32.const 1220) + (tee_local $17 + (i32.sub + (get_local $15) + (get_local $5) + ) + ) + ) + (i32.store + (i32.const 1232) + (tee_local $10 + (i32.add + (tee_local $15 + (i32.load + (i32.const 1232) + ) + ) + (get_local $5) + ) + ) + ) + (i32.store offset=4 + (get_local $10) + (i32.or + (get_local $17) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $15) + (i32.or + (get_local $5) + (i32.const 3) + ) + ) + (br $folding-inner0) + ) + ) + (if + (i32.eqz + (i32.load + (i32.const 1680) + ) + ) + (block + (i32.store + (i32.const 1688) + (i32.const 4096) + ) + (i32.store + (i32.const 1684) + (i32.const 4096) + ) + (i32.store + (i32.const 1692) + (i32.const -1) + ) + (i32.store + (i32.const 1696) + (i32.const -1) + ) + (i32.store + (i32.const 1700) + (i32.const 0) + ) + (i32.store + (i32.const 1652) + (i32.const 0) + ) + (i32.store + (get_local $13) + (tee_local $15 + (i32.xor + (i32.and + (get_local $13) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + ) + (i32.store + (i32.const 1680) + (get_local $15) + ) + ) + ) + (set_local $15 + (i32.add + (get_local $5) + (i32.const 48) + ) + ) + (if + (i32.le_u + (tee_local $13 + (i32.and + (tee_local $10 + (i32.add + (tee_local $13 + (i32.load + (i32.const 1688) + ) + ) + (tee_local $17 + (i32.add + (get_local $5) + (i32.const 47) + ) + ) + ) + ) + (tee_local $21 + (i32.sub + (i32.const 0) + (get_local $13) + ) + ) + ) + ) + (get_local $5) + ) + (block + (set_global $r + (get_local $25) + ) + (return + (i32.const 0) + ) + ) + ) + (if + (tee_local $18 + (i32.load + (i32.const 1648) + ) + ) + (if + (i32.or + (i32.le_u + (tee_local $6 + (i32.add + (tee_local $16 + (i32.load + (i32.const 1640) + ) + ) + (get_local $13) + ) + ) + (get_local $16) + ) + (i32.gt_u + (get_local $6) + (get_local $18) + ) + ) + (block + (set_global $r + (get_local $25) + ) + (return + (i32.const 0) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $7 + (block $label$break$b (result i32) + (if (result i32) + (i32.and + (i32.load + (i32.const 1652) + ) + (i32.const 4) + ) + (i32.const 188) + (block (result i32) + (block $label$break$c + (if + (tee_local $18 + (i32.load + (i32.const 1232) + ) + ) + (block + (set_local $6 + (i32.const 1656) + ) + (loop $while-in32 + (block $while-out31 + (if + (i32.le_u + (tee_local $16 + (i32.load + (get_local $6) + ) + ) + (get_local $18) + ) + (if + (i32.gt_u + (i32.add + (get_local $16) + (i32.load + (tee_local $19 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + ) + ) + (get_local $18) + ) + (block + (set_local $0 + (get_local $6) + ) + (set_local $4 + (get_local $19) + ) + (br $while-out31) + ) + ) + ) + (br_if $while-in32 + (tee_local $6 + (i32.load offset=8 + (get_local $6) + ) + ) + ) + (set_local $7 + (i32.const 171) + ) + (br $label$break$c) + ) + ) + (if + (i32.lt_u + (tee_local $6 + (i32.and + (i32.sub + (get_local $10) + (i32.load + (i32.const 1220) + ) + ) + (get_local $21) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (tee_local $19 + (call $ta + (get_local $6) + ) + ) + (i32.add + (i32.load + (get_local $0) + ) + (i32.load + (get_local $4) + ) + ) + ) + (if + (i32.ne + (get_local $19) + (i32.const -1) + ) + (block + (set_local $20 + (get_local $19) + ) + (set_local $26 + (get_local $6) + ) + (br $label$break$b + (i32.const 191) + ) + ) + ) + (block + (set_local $11 + (get_local $19) + ) + (set_local $2 + (get_local $6) + ) + (set_local $7 + (i32.const 181) + ) + ) + ) + ) + ) + (set_local $7 + (i32.const 171) + ) + ) + ) + (block $do-once33 + (if + (i32.eq + (get_local $7) + (i32.const 171) + ) + (if + (i32.ne + (tee_local $18 + (call $ta + (i32.const 0) + ) + ) + (i32.const -1) + ) + (block + (set_local $3 + (if (result i32) + (i32.and + (tee_local $19 + (i32.add + (tee_local $6 + (i32.load + (i32.const 1684) + ) + ) + (i32.const -1) + ) + ) + (tee_local $0 + (get_local $18) + ) + ) + (i32.add + (i32.sub + (get_local $13) + (get_local $0) + ) + (i32.and + (i32.add + (get_local $19) + (get_local $0) + ) + (i32.sub + (i32.const 0) + (get_local $6) + ) + ) + ) + (get_local $13) + ) + ) + (set_local $0 + (i32.add + (tee_local $6 + (i32.load + (i32.const 1640) + ) + ) + (get_local $3) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $3) + (get_local $5) + ) + (i32.lt_u + (get_local $3) + (i32.const 2147483647) + ) + ) + (block + (if + (tee_local $19 + (i32.load + (i32.const 1648) + ) + ) + (br_if $do-once33 + (i32.or + (i32.le_u + (get_local $0) + (get_local $6) + ) + (i32.gt_u + (get_local $0) + (get_local $19) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $19 + (call $ta + (get_local $3) + ) + ) + (get_local $18) + ) + (block + (set_local $20 + (get_local $18) + ) + (set_local $26 + (get_local $3) + ) + (br $label$break$b + (i32.const 191) + ) + ) + (block + (set_local $11 + (get_local $19) + ) + (set_local $2 + (get_local $3) + ) + (set_local $7 + (i32.const 181) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (block $label$break$d + (if + (i32.eq + (get_local $7) + (i32.const 181) + ) + (block + (set_local $19 + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $15) + (get_local $2) + ) + (i32.and + (i32.lt_u + (get_local $2) + (i32.const 2147483647) + ) + (i32.ne + (get_local $11) + (i32.const -1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.and + (i32.add + (i32.sub + (get_local $17) + (get_local $2) + ) + (tee_local $18 + (i32.load + (i32.const 1688) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $18) + ) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (call $ta + (get_local $0) + ) + (i32.const -1) + ) + (block + (drop + (call $ta + (get_local $19) + ) + ) + (br $label$break$d) + ) + (set_local $1 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + ) + (set_local $1 + (get_local $2) + ) + ) + (set_local $1 + (get_local $2) + ) + ) + (if + (i32.ne + (get_local $11) + (i32.const -1) + ) + (block + (set_local $20 + (get_local $11) + ) + (set_local $26 + (get_local $1) + ) + (br $label$break$b + (i32.const 191) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 1652) + (i32.or + (i32.load + (i32.const 1652) + ) + (i32.const 4) + ) + ) + (i32.const 188) + ) + ) + ) + ) + (i32.const 188) + ) + (if + (i32.lt_u + (get_local $13) + (i32.const 2147483647) + ) + (if + (i32.and + (i32.lt_u + (tee_local $1 + (call $ta + (get_local $13) + ) + ) + (tee_local $13 + (call $ta + (i32.const 0) + ) + ) + ) + (i32.and + (i32.ne + (get_local $1) + (i32.const -1) + ) + (i32.ne + (get_local $13) + (i32.const -1) + ) + ) + ) + (if + (i32.gt_u + (tee_local $11 + (i32.sub + (get_local $13) + (get_local $1) + ) + ) + (i32.add + (get_local $5) + (i32.const 40) + ) + ) + (block + (set_local $20 + (get_local $1) + ) + (set_local $26 + (get_local $11) + ) + (set_local $7 + (i32.const 191) + ) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 191) + ) + (block + (i32.store + (i32.const 1640) + (tee_local $11 + (i32.add + (i32.load + (i32.const 1640) + ) + (get_local $26) + ) + ) + ) + (if + (i32.gt_u + (get_local $11) + (i32.load + (i32.const 1644) + ) + ) + (i32.store + (i32.const 1644) + (get_local $11) + ) + ) + (block $do-once38 + (if + (tee_local $11 + (i32.load + (i32.const 1232) + ) + ) + (block + (set_local $2 + (i32.const 1656) + ) + (loop $do-in41 + (block $do-out40 + (if + (i32.eq + (get_local $20) + (i32.add + (tee_local $1 + (i32.load + (get_local $2) + ) + ) + (tee_local $17 + (i32.load + (tee_local $13 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + ) + ) + ) + ) + (block + (set_local $48 + (get_local $1) + ) + (set_local $49 + (get_local $13) + ) + (set_local $50 + (get_local $17) + ) + (set_local $51 + (get_local $2) + ) + (set_local $7 + (i32.const 201) + ) + (br $do-out40) + ) + ) + (br_if $do-in41 + (tee_local $2 + (i32.load offset=8 + (get_local $2) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 201) + ) + (if + (i32.eqz + (i32.and + (i32.load offset=12 + (get_local $51) + ) + (i32.const 8) + ) + ) + (if + (i32.and + (i32.lt_u + (get_local $11) + (get_local $20) + ) + (i32.ge_u + (get_local $11) + (get_local $48) + ) + ) + (block + (i32.store + (get_local $49) + (i32.add + (get_local $50) + (get_local $26) + ) + ) + (set_local $2 + (i32.add + (get_local $11) + (tee_local $17 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $2 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $2) + (i32.const 7) + ) + ) + ) + ) + ) + (set_local $13 + (i32.add + (i32.sub + (get_local $26) + (get_local $17) + ) + (i32.load + (i32.const 1220) + ) + ) + ) + (i32.store + (i32.const 1232) + (get_local $2) + ) + (i32.store + (i32.const 1220) + (get_local $13) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $13) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $2) + (get_local $13) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + (br $do-once38) + ) + ) + ) + ) + (set_local $14 + (if (result i32) + (i32.lt_u + (get_local $20) + (tee_local $13 + (i32.load + (i32.const 1224) + ) + ) + ) + (block (result i32) + (i32.store + (i32.const 1224) + (get_local $20) + ) + (get_local $20) + ) + (get_local $13) + ) + ) + (set_local $13 + (i32.add + (get_local $20) + (get_local $26) + ) + ) + (set_local $2 + (i32.const 1656) + ) + (loop $while-in43 + (block $while-out42 + (if + (i32.eq + (i32.load + (get_local $2) + ) + (get_local $13) + ) + (block + (set_local $52 + (get_local $2) + ) + (set_local $42 + (get_local $2) + ) + (set_local $7 + (i32.const 209) + ) + (br $while-out42) + ) + ) + (br_if $while-in43 + (tee_local $2 + (i32.load offset=8 + (get_local $2) + ) + ) + ) + (set_local $30 + (i32.const 1656) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 209) + ) + (if + (i32.and + (i32.load offset=12 + (get_local $42) + ) + (i32.const 8) + ) + (set_local $30 + (i32.const 1656) + ) + (block + (i32.store + (get_local $52) + (get_local $20) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $42) + (i32.const 4) + ) + ) + (i32.add + (i32.load + (get_local $2) + ) + (get_local $26) + ) + ) + (set_local $17 + (i32.add + (get_local $20) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $2 + (i32.add + (get_local $20) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $2) + (i32.const 7) + ) + ) + ) + ) + (set_local $1 + (i32.add + (get_local $13) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $2 + (i32.add + (get_local $13) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $2) + (i32.const 7) + ) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $17) + (get_local $5) + ) + ) + (set_local $15 + (i32.sub + (i32.sub + (get_local $1) + (get_local $17) + ) + (get_local $5) + ) + ) + (i32.store offset=4 + (get_local $17) + (i32.or + (get_local $5) + (i32.const 3) + ) + ) + (block $do-once44 + (if + (i32.eq + (get_local $1) + (get_local $11) + ) + (block + (i32.store + (i32.const 1220) + (tee_local $3 + (i32.add + (i32.load + (i32.const 1220) + ) + (get_local $15) + ) + ) + ) + (i32.store + (i32.const 1232) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + ) + (block + (if + (i32.eq + (get_local $1) + (i32.load + (i32.const 1228) + ) + ) + (block + (i32.store + (i32.const 1216) + (tee_local $3 + (i32.add + (i32.load + (i32.const 1216) + ) + (get_local $15) + ) + ) + ) + (i32.store + (i32.const 1228) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $3) + ) + (get_local $3) + ) + (br $do-once44) + ) + ) + (if + (i32.eq + (i32.and + (tee_local $3 + (i32.load offset=4 + (get_local $1) + ) + ) + (i32.const 3) + ) + (i32.const 1) + ) + (block + (set_local $4 + (i32.and + (get_local $3) + (i32.const -8) + ) + ) + (set_local $0 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (block $label$break$e + (if + (i32.lt_u + (get_local $3) + (i32.const 256) + ) + (block + (set_local $10 + (i32.load offset=12 + (get_local $1) + ) + ) + (block $do-once47 + (if + (i32.ne + (tee_local $21 + (i32.load offset=8 + (get_local $1) + ) + ) + (tee_local $19 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $21) + (get_local $14) + ) + (call $qa) + ) + (br_if $do-once47 + (i32.eq + (i32.load offset=12 + (get_local $21) + ) + (get_local $1) + ) + ) + (call $qa) + ) + ) + ) + (if + (i32.eq + (get_local $10) + (get_local $21) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (i32.load + (i32.const 1208) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $0) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$e) + ) + ) + (block $do-once49 + (if + (i32.eq + (get_local $10) + (get_local $19) + ) + (set_local $43 + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (get_local $14) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (block + (set_local $43 + (get_local $0) + ) + (br $do-once49) + ) + ) + (call $qa) + ) + ) + ) + (i32.store offset=12 + (get_local $21) + (get_local $10) + ) + (i32.store + (get_local $43) + (get_local $21) + ) + ) + (block + (set_local $19 + (i32.load offset=24 + (get_local $1) + ) + ) + (block $do-once51 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $1) + ) + ) + (get_local $1) + ) + (block + (if + (tee_local $16 + (i32.load + (tee_local $6 + (i32.add + (tee_local $18 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $16) + ) + (set_local $0 + (get_local $6) + ) + ) + (if + (tee_local $22 + (i32.load + (get_local $18) + ) + ) + (block + (set_local $3 + (get_local $22) + ) + (set_local $0 + (get_local $18) + ) + ) + (block + (set_local $24 + (i32.const 0) + ) + (br $do-once51) + ) + ) + ) + (loop $while-in54 + (if + (tee_local $16 + (i32.load + (tee_local $6 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $16) + ) + (set_local $0 + (get_local $6) + ) + (br $while-in54) + ) + ) + (if + (tee_local $16 + (i32.load + (tee_local $6 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $16) + ) + (set_local $0 + (get_local $6) + ) + (br $while-in54) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $14) + ) + (call $qa) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $24 + (get_local $3) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $6 + (i32.load offset=8 + (get_local $1) + ) + ) + (get_local $14) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (tee_local $16 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + ) + (get_local $1) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $18 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (block + (i32.store + (get_local $16) + (get_local $0) + ) + (i32.store + (get_local $18) + (get_local $6) + ) + (set_local $24 + (get_local $0) + ) + ) + (call $qa) + ) + ) + ) + ) + (br_if $label$break$e + (i32.eqz + (get_local $19) + ) + ) + (block $do-once55 + (if + (i32.eq + (get_local $1) + (i32.load + (tee_local $21 + (i32.add + (i32.shl + (tee_local $0 + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + ) + (block + (i32.store + (get_local $21) + (get_local $24) + ) + (br_if $do-once55 + (get_local $24) + ) + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $0) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$e) + ) + (block + (if + (i32.lt_u + (get_local $19) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $10 + (i32.add + (get_local $19) + (i32.const 16) + ) + ) + ) + (get_local $1) + ) + (i32.store + (get_local $10) + (get_local $24) + ) + (i32.store offset=20 + (get_local $19) + (get_local $24) + ) + ) + (br_if $label$break$e + (i32.eqz + (get_local $24) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $24) + (tee_local $0 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (i32.store offset=24 + (get_local $24) + (get_local $19) + ) + (if + (tee_local $10 + (i32.load + (tee_local $21 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $10) + (get_local $0) + ) + (call $qa) + (block + (i32.store offset=16 + (get_local $24) + (get_local $10) + ) + (i32.store offset=24 + (get_local $10) + (get_local $24) + ) + ) + ) + ) + (br_if $label$break$e + (i32.eqz + (tee_local $10 + (i32.load offset=4 + (get_local $21) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $10) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store offset=20 + (get_local $24) + (get_local $10) + ) + (i32.store offset=24 + (get_local $10) + (get_local $24) + ) + ) + ) + ) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (get_local $4) + ) + ) + (set_local $15 + (i32.add + (get_local $4) + (get_local $15) + ) + ) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.and + (i32.load + (get_local $0) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $15) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $15) + ) + (get_local $15) + ) + (set_local $0 + (i32.shr_u + (get_local $15) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $15) + (i32.const 256) + ) + (block + (set_local $3 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (block $do-once59 + (if + (i32.and + (tee_local $10 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (block + (if + (i32.ge_u + (tee_local $19 + (i32.load + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (block + (set_local $44 + (get_local $0) + ) + (set_local $37 + (get_local $19) + ) + (br $do-once59) + ) + ) + (call $qa) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $10) + (get_local $0) + ) + ) + (set_local $44 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $37 + (get_local $3) + ) + ) + ) + ) + (i32.store + (get_local $44) + (get_local $2) + ) + (i32.store offset=12 + (get_local $37) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $37) + ) + (i32.store offset=12 + (get_local $2) + (get_local $3) + ) + (br $do-once44) + ) + ) + (set_local $0 + (i32.add + (i32.shl + (tee_local $4 + (block $do-once61 (result i32) + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $15) + (i32.const 8) + ) + ) + (block (result i32) + (drop + (br_if $do-once61 + (i32.const 31) + (i32.gt_u + (get_local $15) + (i32.const 16777215) + ) + ) + ) + (i32.or + (i32.and + (i32.shr_u + (get_local $15) + (i32.add + (tee_local $6 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $19 + (i32.and + (i32.shr_u + (i32.add + (tee_local $4 + (i32.shl + (get_local $0) + (tee_local $10 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $10) + ) + (tee_local $4 + (i32.and + (i32.shr_u + (i32.add + (tee_local $0 + (i32.shl + (get_local $4) + (get_local $19) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $0) + (get_local $4) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $6) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + (i32.store offset=28 + (get_local $2) + (get_local $4) + ) + (i32.store offset=4 + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (i32.const 1212) + ) + ) + (tee_local $6 + (i32.shl + (i32.const 1) + (get_local $4) + ) + ) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $3) + (get_local $6) + ) + ) + (i32.store + (get_local $0) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $0) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + (br $do-once44) + ) + ) + (set_local $6 + (i32.shl + (get_local $15) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $4) + (i32.const 1) + ) + ) + (i32.eq + (get_local $4) + (i32.const 31) + ) + ) + ) + ) + (set_local $3 + (i32.load + (get_local $0) + ) + ) + (loop $while-in64 + (block $while-out63 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const -8) + ) + (get_local $15) + ) + (block + (set_local $38 + (get_local $3) + ) + (set_local $7 + (i32.const 279) + ) + (br $while-out63) + ) + ) + (if + (tee_local $4 + (i32.load + (tee_local $0 + (i32.add + (i32.add + (get_local $3) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $6) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $6 + (i32.shl + (get_local $6) + (i32.const 1) + ) + ) + (set_local $3 + (get_local $4) + ) + (br $while-in64) + ) + (block + (set_local $45 + (get_local $0) + ) + (set_local $53 + (get_local $3) + ) + (set_local $7 + (i32.const 276) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 276) + ) + (if + (i32.lt_u + (get_local $45) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $45) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $53) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 279) + ) + (if + (i32.and + (i32.ge_u + (tee_local $6 + (i32.load + (tee_local $3 + (i32.add + (get_local $38) + (i32.const 8) + ) + ) + ) + ) + (tee_local $4 + (i32.load + (i32.const 1224) + ) + ) + ) + (i32.ge_u + (get_local $38) + (get_local $4) + ) + ) + (block + (i32.store offset=12 + (get_local $6) + (get_local $2) + ) + (i32.store + (get_local $3) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $6) + ) + (i32.store offset=12 + (get_local $2) + (get_local $38) + ) + (i32.store offset=24 + (get_local $2) + (i32.const 0) + ) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + (set_global $r + (get_local $25) + ) + (return + (i32.add + (get_local $17) + (i32.const 8) + ) + ) + ) + ) + ) + (loop $while-in66 + (block $while-out65 + (if + (i32.le_u + (tee_local $2 + (i32.load + (get_local $30) + ) + ) + (get_local $11) + ) + (if + (i32.gt_u + (tee_local $15 + (i32.add + (get_local $2) + (i32.load offset=4 + (get_local $30) + ) + ) + ) + (get_local $11) + ) + (block + (set_local $0 + (get_local $15) + ) + (br $while-out65) + ) + ) + ) + (set_local $30 + (i32.load offset=8 + (get_local $30) + ) + ) + (br $while-in66) + ) + ) + (set_local $15 + (i32.add + (tee_local $17 + (i32.add + (get_local $0) + (i32.const -47) + ) + ) + (i32.const 8) + ) + ) + (set_local $2 + (i32.add + (tee_local $17 + (select + (get_local $11) + (tee_local $2 + (i32.add + (get_local $17) + (select + (i32.and + (i32.sub + (i32.const 0) + (get_local $15) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $15) + (i32.const 7) + ) + ) + ) + ) + (i32.lt_u + (get_local $2) + (tee_local $15 + (i32.add + (get_local $11) + (i32.const 16) + ) + ) + ) + ) + ) + (i32.const 8) + ) + ) + (i32.store + (i32.const 1232) + (tee_local $1 + (i32.add + (get_local $20) + (tee_local $13 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $20) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 1220) + (tee_local $6 + (i32.sub + (i32.add + (get_local $26) + (i32.const -40) + ) + (get_local $13) + ) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $6) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $1) + (get_local $6) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + (i32.store + (tee_local $6 + (i32.add + (get_local $17) + (i32.const 4) + ) + ) + (i32.const 27) + ) + (i32.store + (get_local $2) + (i32.load + (i32.const 1656) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.load + (i32.const 1660) + ) + ) + (i32.store offset=8 + (get_local $2) + (i32.load + (i32.const 1664) + ) + ) + (i32.store offset=12 + (get_local $2) + (i32.load + (i32.const 1668) + ) + ) + (i32.store + (i32.const 1656) + (get_local $20) + ) + (i32.store + (i32.const 1660) + (get_local $26) + ) + (i32.store + (i32.const 1668) + (i32.const 0) + ) + (i32.store + (i32.const 1664) + (get_local $2) + ) + (set_local $2 + (i32.add + (get_local $17) + (i32.const 24) + ) + ) + (loop $do-in68 + (i32.store + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (i32.const 7) + ) + (br_if $do-in68 + (i32.lt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (get_local $0) + ) + ) + ) + (if + (i32.ne + (get_local $17) + (get_local $11) + ) + (block + (i32.store + (get_local $6) + (i32.and + (i32.load + (get_local $6) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $11) + (i32.or + (tee_local $2 + (i32.sub + (get_local $17) + (get_local $11) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (get_local $17) + (get_local $2) + ) + (set_local $1 + (i32.shr_u + (get_local $2) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $2) + (i32.const 256) + ) + (block + (set_local $13 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $4 + (i32.shl + (i32.const 1) + (get_local $1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.load + (tee_local $4 + (i32.add + (get_local $13) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $46 + (get_local $4) + ) + (set_local $39 + (get_local $3) + ) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $3) + (get_local $4) + ) + ) + (set_local $46 + (i32.add + (get_local $13) + (i32.const 8) + ) + ) + (set_local $39 + (get_local $13) + ) + ) + ) + (i32.store + (get_local $46) + (get_local $11) + ) + (i32.store offset=12 + (get_local $39) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $39) + ) + (i32.store offset=12 + (get_local $11) + (get_local $13) + ) + (br $do-once38) + ) + ) + (set_local $0 + (i32.add + (i32.shl + (tee_local $3 + (if (result i32) + (tee_local $13 + (i32.shr_u + (get_local $2) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $2) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $2) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $13 + (i32.and + (i32.shr_u + (i32.add + (tee_local $4 + (i32.shl + (get_local $13) + (tee_local $3 + (i32.and + (i32.shr_u + (i32.add + (get_local $13) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $3) + ) + (tee_local $4 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $4) + (get_local $13) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $4) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + (i32.store offset=28 + (get_local $11) + (get_local $3) + ) + (i32.store offset=20 + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $15) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $4 + (i32.load + (i32.const 1212) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $3) + ) + ) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $4) + (get_local $1) + ) + ) + (i32.store + (get_local $0) + (get_local $11) + ) + (i32.store offset=24 + (get_local $11) + (get_local $0) + ) + (i32.store offset=12 + (get_local $11) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $11) + ) + (br $do-once38) + ) + ) + (set_local $1 + (i32.shl + (get_local $2) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $3) + (i32.const 1) + ) + ) + (i32.eq + (get_local $3) + (i32.const 31) + ) + ) + ) + ) + (set_local $4 + (i32.load + (get_local $0) + ) + ) + (loop $while-in70 + (block $while-out69 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $4) + ) + (i32.const -8) + ) + (get_local $2) + ) + (block + (set_local $31 + (get_local $4) + ) + (set_local $7 + (i32.const 305) + ) + (br $while-out69) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (i32.add + (get_local $4) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $1) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $1 + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + (set_local $4 + (get_local $3) + ) + (br $while-in70) + ) + (block + (set_local $47 + (get_local $0) + ) + (set_local $54 + (get_local $4) + ) + (set_local $7 + (i32.const 302) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 302) + ) + (if + (i32.lt_u + (get_local $47) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $47) + (get_local $11) + ) + (i32.store offset=24 + (get_local $11) + (get_local $54) + ) + (i32.store offset=12 + (get_local $11) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $11) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.const 305) + ) + (if + (i32.and + (i32.ge_u + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (get_local $31) + (i32.const 8) + ) + ) + ) + ) + (tee_local $2 + (i32.load + (i32.const 1224) + ) + ) + ) + (i32.ge_u + (get_local $31) + (get_local $2) + ) + ) + (block + (i32.store offset=12 + (get_local $1) + (get_local $11) + ) + (i32.store + (get_local $4) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $1) + ) + (i32.store offset=12 + (get_local $11) + (get_local $31) + ) + (i32.store offset=24 + (get_local $11) + (i32.const 0) + ) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + (block + (if + (i32.or + (i32.eqz + (tee_local $1 + (i32.load + (i32.const 1224) + ) + ) + ) + (i32.lt_u + (get_local $20) + (get_local $1) + ) + ) + (i32.store + (i32.const 1224) + (get_local $20) + ) + ) + (i32.store + (i32.const 1656) + (get_local $20) + ) + (i32.store + (i32.const 1660) + (get_local $26) + ) + (i32.store + (i32.const 1668) + (i32.const 0) + ) + (i32.store + (i32.const 1244) + (i32.load + (i32.const 1680) + ) + ) + (i32.store + (i32.const 1240) + (i32.const -1) + ) + (set_local $1 + (i32.const 0) + ) + (loop $do-in + (i32.store offset=12 + (tee_local $13 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (get_local $13) + ) + (i32.store offset=8 + (get_local $13) + (get_local $13) + ) + (br_if $do-in + (i32.ne + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 32) + ) + ) + ) + (i32.store + (i32.const 1232) + (tee_local $1 + (i32.add + (get_local $20) + (tee_local $13 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $20) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 1220) + (tee_local $2 + (i32.sub + (i32.add + (get_local $26) + (i32.const -40) + ) + (get_local $13) + ) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $2) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $1) + (get_local $2) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + ) + ) + ) + (if + (i32.gt_u + (tee_local $11 + (i32.load + (i32.const 1220) + ) + ) + (get_local $5) + ) + (block + (i32.store + (i32.const 1220) + (tee_local $31 + (i32.sub + (get_local $11) + (get_local $5) + ) + ) + ) + (i32.store + (i32.const 1232) + (tee_local $7 + (i32.add + (tee_local $11 + (i32.load + (i32.const 1232) + ) + ) + (get_local $5) + ) + ) + ) + (i32.store offset=4 + (get_local $7) + (i32.or + (get_local $31) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $11) + (i32.or + (get_local $5) + (i32.const 3) + ) + ) + (set_global $r + (get_local $25) + ) + (return + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + ) + ) + ) + ) + (i32.store + (call $Qa) + (i32.const 12) + ) + (set_global $r + (get_local $25) + ) + (return + (i32.const 0) + ) + ) + (set_global $r + (get_local $25) + ) + (i32.add + (get_local $15) + (i32.const 8) + ) + ) + (func $fb (; 13 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (if + (i32.eqz + (get_local $0) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $0) + (i32.const -8) + ) + ) + (tee_local $14 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (if + (i32.eq + (tee_local $0 + (i32.and + (tee_local $4 + (i32.load + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + ) + (i32.const 3) + ) + ) + (i32.const 1) + ) + (call $qa) + ) + (set_local $8 + (i32.add + (get_local $1) + (tee_local $7 + (i32.and + (get_local $4) + (i32.const -8) + ) + ) + ) + ) + (block $do-once + (if + (i32.and + (get_local $4) + (i32.const 1) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + ) + (block + (set_local $10 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eqz + (get_local $0) + ) + (return) + ) + (set_local $7 + (i32.add + (get_local $10) + (get_local $7) + ) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.sub + (i32.const 0) + (get_local $10) + ) + ) + ) + (get_local $14) + ) + (call $qa) + ) + (if + (i32.eq + (get_local $1) + (i32.load + (i32.const 1228) + ) + ) + (block + (if + (i32.ne + (i32.and + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 3) + ) + (i32.const 3) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 1216) + (get_local $7) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $3) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $7) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $7) + ) + (get_local $7) + ) + (return) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $10) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $10) + (i32.const 256) + ) + (block + (set_local $0 + (i32.load offset=12 + (get_local $1) + ) + ) + (if + (i32.ne + (tee_local $10 + (i32.load offset=8 + (get_local $1) + ) + ) + (tee_local $4 + (i32.add + (i32.shl + (get_local $3) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (get_local $14) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $10) + ) + (get_local $1) + ) + (call $qa) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (get_local $10) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (i32.load + (i32.const 1208) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (get_local $0) + (get_local $4) + ) + (set_local $9 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $0) + (get_local $14) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (set_local $9 + (get_local $4) + ) + (call $qa) + ) + ) + ) + (i32.store offset=12 + (get_local $10) + (get_local $0) + ) + (i32.store + (get_local $9) + (get_local $10) + ) + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + (br $do-once) + ) + ) + (set_local $10 + (i32.load offset=24 + (get_local $1) + ) + ) + (block $do-once0 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $1) + ) + ) + (get_local $1) + ) + (block + (if + (tee_local $9 + (i32.load + (tee_local $3 + (i32.add + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $9) + ) + (set_local $4 + (get_local $3) + ) + ) + (if + (i32.eqz + (tee_local $0 + (i32.load + (get_local $4) + ) + ) + ) + (block + (set_local $5 + (i32.const 0) + ) + (br $do-once0) + ) + ) + ) + (loop $while-in + (if + (tee_local $9 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $9) + ) + (set_local $4 + (get_local $3) + ) + (br $while-in) + ) + ) + (if + (tee_local $9 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $9) + ) + (set_local $4 + (get_local $3) + ) + (br $while-in) + ) + (block + (set_local $12 + (get_local $0) + ) + (set_local $3 + (get_local $4) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $3) + (get_local $14) + ) + (call $qa) + (block + (i32.store + (get_local $3) + (i32.const 0) + ) + (set_local $5 + (get_local $12) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $3 + (i32.load offset=8 + (get_local $1) + ) + ) + (get_local $14) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (tee_local $9 + (i32.add + (get_local $3) + (i32.const 12) + ) + ) + ) + (get_local $1) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (block + (i32.store + (get_local $9) + (get_local $0) + ) + (i32.store + (get_local $4) + (get_local $3) + ) + (set_local $5 + (get_local $0) + ) + ) + (call $qa) + ) + ) + ) + ) + (if + (get_local $10) + (block + (if + (i32.eq + (get_local $1) + (i32.load + (tee_local $3 + (i32.add + (i32.shl + (tee_local $0 + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + ) + (block + (i32.store + (get_local $3) + (get_local $5) + ) + (if + (i32.eqz + (get_local $5) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $0) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $10) + (i32.const 16) + ) + ) + ) + (get_local $1) + ) + (i32.store + (get_local $0) + (get_local $5) + ) + (i32.store offset=20 + (get_local $10) + (get_local $5) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + (br $do-once) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $5) + (tee_local $0 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (i32.store offset=24 + (get_local $5) + (get_local $10) + ) + (if + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (get_local $0) + ) + (call $qa) + (block + (i32.store offset=16 + (get_local $5) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $5) + ) + ) + ) + ) + (if + (tee_local $4 + (i32.load offset=4 + (get_local $3) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store offset=20 + (get_local $5) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $5) + ) + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $7) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (get_local $2) + (get_local $8) + ) + (call $qa) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (tee_local $7 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 1) + ) + ) + (call $qa) + ) + (if + (i32.and + (get_local $1) + (i32.const 2) + ) + (block + (i32.store + (get_local $7) + (i32.and + (get_local $1) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $6) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $6) + ) + (get_local $6) + ) + (set_local $0 + (get_local $6) + ) + ) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 1232) + ) + ) + (block + (i32.store + (i32.const 1220) + (tee_local $5 + (i32.add + (i32.load + (i32.const 1220) + ) + (get_local $6) + ) + ) + ) + (i32.store + (i32.const 1232) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $2) + (i32.load + (i32.const 1228) + ) + ) + (return) + ) + (i32.store + (i32.const 1228) + (i32.const 0) + ) + (i32.store + (i32.const 1216) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 1228) + ) + ) + (block + (i32.store + (i32.const 1216) + (tee_local $5 + (i32.add + (i32.load + (i32.const 1216) + ) + (get_local $6) + ) + ) + ) + (i32.store + (i32.const 1228) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $5) + ) + (get_local $5) + ) + (return) + ) + ) + (set_local $5 + (i32.add + (i32.and + (get_local $1) + (i32.const -8) + ) + (get_local $6) + ) + ) + (set_local $14 + (i32.shr_u + (get_local $1) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.lt_u + (get_local $1) + (i32.const 256) + ) + (block + (set_local $3 + (i32.load offset=12 + (get_local $8) + ) + ) + (if + (i32.ne + (tee_local $12 + (i32.load offset=8 + (get_local $8) + ) + ) + (tee_local $4 + (i32.add + (i32.shl + (get_local $14) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $12) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $12) + ) + (get_local $8) + ) + (call $qa) + ) + ) + ) + (if + (i32.eq + (get_local $3) + (get_local $12) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (i32.load + (i32.const 1208) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $14) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.eq + (get_local $3) + (get_local $4) + ) + (set_local $17 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $3) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (set_local $17 + (get_local $4) + ) + (call $qa) + ) + ) + ) + (i32.store offset=12 + (get_local $12) + (get_local $3) + ) + (i32.store + (get_local $17) + (get_local $12) + ) + ) + (block + (set_local $12 + (i32.load offset=24 + (get_local $8) + ) + ) + (block $do-once6 + (if + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $8) + ) + ) + (get_local $8) + ) + (block + (if + (tee_local $9 + (i32.load + (tee_local $0 + (i32.add + (tee_local $4 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $9) + ) + (set_local $4 + (get_local $0) + ) + ) + (if + (tee_local $0 + (i32.load + (get_local $4) + ) + ) + (set_local $6 + (get_local $0) + ) + (block + (set_local $11 + (i32.const 0) + ) + (br $do-once6) + ) + ) + ) + (loop $while-in9 + (if + (tee_local $9 + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $9) + ) + (set_local $4 + (get_local $0) + ) + (br $while-in9) + ) + ) + (if + (tee_local $9 + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $9) + ) + (set_local $4 + (get_local $0) + ) + (br $while-in9) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $11 + (get_local $6) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $0 + (i32.load offset=8 + (get_local $8) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (tee_local $9 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + (get_local $8) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (block + (i32.store + (get_local $9) + (get_local $3) + ) + (i32.store + (get_local $4) + (get_local $0) + ) + (set_local $11 + (get_local $3) + ) + ) + (call $qa) + ) + ) + ) + ) + (if + (get_local $12) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (tee_local $7 + (i32.add + (i32.shl + (tee_local $3 + (i32.load offset=28 + (get_local $8) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + ) + ) + (block + (i32.store + (get_local $7) + (get_local $11) + ) + (if + (i32.eqz + (get_local $11) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $12) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (tee_local $3 + (i32.add + (get_local $12) + (i32.const 16) + ) + ) + ) + (get_local $8) + ) + (i32.store + (get_local $3) + (get_local $11) + ) + (i32.store offset=20 + (get_local $12) + (get_local $11) + ) + ) + (br_if $do-once4 + (i32.eqz + (get_local $11) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $11) + (tee_local $3 + (i32.load + (i32.const 1224) + ) + ) + ) + (call $qa) + ) + (i32.store offset=24 + (get_local $11) + (get_local $12) + ) + (if + (tee_local $1 + (i32.load + (tee_local $7 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $3) + ) + (call $qa) + (block + (i32.store offset=16 + (get_local $11) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $11) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load offset=4 + (get_local $7) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store offset=20 + (get_local $11) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $11) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $5) + ) + (get_local $5) + ) + (if + (i32.eq + (get_local $2) + (i32.load + (i32.const 1228) + ) + ) + (block + (i32.store + (i32.const 1216) + (get_local $5) + ) + (return) + ) + (set_local $0 + (get_local $5) + ) + ) + ) + ) + (set_local $6 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.const 256) + ) + (block + (set_local $1 + (i32.add + (i32.shl + (get_local $6) + (i32.const 3) + ) + (i32.const 1248) + ) + ) + (if + (i32.and + (tee_local $7 + (i32.load + (i32.const 1208) + ) + ) + (tee_local $5 + (i32.shl + (i32.const 1) + (get_local $6) + ) + ) + ) + (if + (i32.lt_u + (tee_local $7 + (i32.load + (tee_local $5 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $15 + (get_local $5) + ) + (set_local $13 + (get_local $7) + ) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $7) + (get_local $5) + ) + ) + (set_local $15 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $13 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $2) + ) + (i32.store offset=12 + (get_local $13) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $13) + ) + (i32.store offset=12 + (get_local $2) + (get_local $1) + ) + (return) + ) + ) + (set_local $5 + (i32.add + (i32.shl + (tee_local $6 + (if (result i32) + (tee_local $1 + (i32.shr_u + (get_local $0) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $0) + (i32.add + (tee_local $5 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $15 + (i32.shl + (get_local $1) + (tee_local $13 + (i32.and + (i32.shr_u + (i32.add + (get_local $1) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $13) + ) + (tee_local $15 + (i32.and + (i32.shr_u + (i32.add + (tee_local $7 + (i32.shl + (get_local $15) + (get_local $1) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $7) + (get_local $15) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $5) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 1512) + ) + ) + (i32.store offset=28 + (get_local $2) + (get_local $6) + ) + (i32.store offset=20 + (get_local $2) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $2) + (i32.const 0) + ) + (if + (i32.and + (tee_local $15 + (i32.load + (i32.const 1212) + ) + ) + (tee_local $7 + (i32.shl + (i32.const 1) + (get_local $6) + ) + ) + ) + (block + (set_local $13 + (i32.shl + (get_local $0) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $6) + (i32.const 1) + ) + ) + (i32.eq + (get_local $6) + (i32.const 31) + ) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $5) + ) + ) + (loop $while-in15 + (block $while-out14 + (if + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $1) + ) + (i32.const -8) + ) + (get_local $0) + ) + (block + (set_local $16 + (get_local $1) + ) + (set_local $0 + (i32.const 130) + ) + (br $while-out14) + ) + ) + (if + (tee_local $11 + (i32.load + (tee_local $6 + (i32.add + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $13) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $13 + (i32.shl + (get_local $13) + (i32.const 1) + ) + ) + (set_local $1 + (get_local $11) + ) + (br $while-in15) + ) + (block + (set_local $18 + (get_local $6) + ) + (set_local $19 + (get_local $1) + ) + (set_local $0 + (i32.const 127) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (i32.const 127) + ) + (if + (i32.lt_u + (get_local $18) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $18) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $19) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (i32.const 130) + ) + (if + (i32.and + (i32.ge_u + (tee_local $13 + (i32.load + (tee_local $1 + (i32.add + (get_local $16) + (i32.const 8) + ) + ) + ) + ) + (tee_local $7 + (i32.load + (i32.const 1224) + ) + ) + ) + (i32.ge_u + (get_local $16) + (get_local $7) + ) + ) + (block + (i32.store offset=12 + (get_local $13) + (get_local $2) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $13) + ) + (i32.store offset=12 + (get_local $2) + (get_local $16) + ) + (i32.store offset=24 + (get_local $2) + (i32.const 0) + ) + ) + (call $qa) + ) + ) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $15) + (get_local $7) + ) + ) + (i32.store + (get_local $5) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $5) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + (i32.store + (i32.const 1240) + (tee_local $2 + (i32.add + (i32.load + (i32.const 1240) + ) + (i32.const -1) + ) + ) + ) + (if + (get_local $2) + (return) + (set_local $0 + (i32.const 1664) + ) + ) + (loop $while-in17 + (if + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (block + (set_local $0 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (br $while-in17) + ) + ) + ) + (i32.store + (i32.const 1240) + (i32.const -1) + ) + ) + (func $Ra (; 14 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (set_local $10 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 48) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 16) + ) + ) + (set_local $12 + (get_local $10) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $10) + (i32.const 32) + ) + ) + (tee_local $7 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $3) + (tee_local $9 + (i32.sub + (i32.load + (tee_local $13 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (get_local $7) + ) + ) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (get_local $2) + ) + (set_local $1 + (i32.add + (get_local $0) + (i32.const 60) + ) + ) + (set_local $7 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (set_local $4 + (get_local $3) + ) + (set_local $3 + (i32.const 2) + ) + (set_local $5 + (i32.add + (get_local $9) + (get_local $2) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eq + (get_local $5) + (tee_local $6 + (if (result i32) + (i32.load + (i32.const 1160) + ) + (block (result i32) + (call $ra + (i32.const 1) + (get_local $0) + ) + (i32.store + (get_local $12) + (i32.load + (get_local $1) + ) + ) + (i32.store offset=4 + (get_local $12) + (get_local $4) + ) + (i32.store offset=8 + (get_local $12) + (get_local $3) + ) + (set_local $9 + (call $Pa + (call $ya + (i32.const 146) + (get_local $12) + ) + ) + ) + (call $oa + (i32.const 0) + ) + (get_local $9) + ) + (block (result i32) + (i32.store + (get_local $11) + (i32.load + (get_local $1) + ) + ) + (i32.store offset=4 + (get_local $11) + (get_local $4) + ) + (i32.store offset=8 + (get_local $11) + (get_local $3) + ) + (call $Pa + (call $ya + (i32.const 146) + (get_local $11) + ) + ) + ) + ) + ) + ) + (block + (set_local $1 + (i32.const 6) + ) + (br $while-out) + ) + ) + (if + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (block + (set_local $16 + (get_local $4) + ) + (set_local $17 + (get_local $3) + ) + (set_local $1 + (i32.const 8) + ) + (br $while-out) + ) + ) + (set_local $9 + (i32.sub + (get_local $5) + (get_local $6) + ) + ) + (if + (i32.gt_u + (get_local $6) + (tee_local $14 + (i32.load offset=4 + (get_local $4) + ) + ) + ) + (block + (i32.store + (get_local $8) + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + ) + (i32.store + (get_local $13) + (get_local $5) + ) + (set_local $5 + (i32.load offset=12 + (get_local $4) + ) + ) + (set_local $6 + (i32.sub + (get_local $6) + (get_local $14) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + (set_local $5 + (if (result i32) + (i32.eq + (get_local $3) + (i32.const 2) + ) + (block (result i32) + (i32.store + (get_local $8) + (i32.add + (i32.load + (get_local $8) + ) + (get_local $6) + ) + ) + (set_local $3 + (i32.const 2) + ) + (get_local $14) + ) + (get_local $14) + ) + ) + ) + (i32.store + (get_local $4) + (i32.add + (i32.load + (get_local $4) + ) + (get_local $6) + ) + ) + (i32.store offset=4 + (get_local $4) + (i32.sub + (get_local $5) + (get_local $6) + ) + ) + (set_local $5 + (get_local $9) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 6) + ) + (block + (i32.store offset=16 + (get_local $0) + (i32.add + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.store + (get_local $8) + (tee_local $7 + (get_local $5) + ) + ) + (i32.store + (get_local $13) + (get_local $7) + ) + (set_local $15 + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 8) + ) + (block + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $13) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (set_local $15 + (select + (i32.const 0) + (i32.sub + (get_local $2) + (i32.load offset=4 + (get_local $16) + ) + ) + (i32.eq + (get_local $17) + (i32.const 2) + ) + ) + ) + ) + ) + ) + (set_global $r + (get_local $10) + ) + (get_local $15) + ) + (func $Wa (; 15 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (if + (tee_local $5 + (i32.load + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $5) + ) + (set_local $7 + (i32.const 5) + ) + ) + (if + (call $Xa + (get_local $2) + ) + (set_local $4 + (i32.const 0) + ) + (block + (set_local $6 + (i32.load + (get_local $3) + ) + ) + (set_local $7 + (i32.const 5) + ) + ) + ) + ) + (block $label$break$a + (if + (i32.eq + (get_local $7) + (i32.const 5) + ) + (block + (if + (i32.lt_u + (i32.sub + (get_local $6) + (tee_local $3 + (i32.load + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 20) + ) + ) + ) + ) + ) + (get_local $1) + ) + (block + (set_local $4 + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (br $label$break$a) + ) + ) + (set_local $4 + (get_local $3) + ) + (block $label$break$b + (if + (i32.gt_s + (i32.load8_s offset=75 + (get_local $2) + ) + (i32.const -1) + ) + (block + (set_local $3 + (get_local $1) + ) + (loop $while-in + (if + (i32.eqz + (get_local $3) + ) + (block + (set_local $3 + (i32.const 0) + ) + (br $label$break$b) + ) + ) + (if + (i32.ne + (i32.load8_s + (i32.add + (get_local $0) + (tee_local $6 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + (i32.const 10) + ) + (block + (set_local $3 + (get_local $6) + ) + (br $while-in) + ) + ) + ) + (if + (i32.lt_u + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + (get_local $3) + ) + (block + (set_local $4 + (get_local $3) + ) + (br $label$break$a) + ) + ) + (set_local $1 + (i32.sub + (get_local $1) + (get_local $3) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (get_local $3) + ) + ) + (set_local $4 + (i32.load + (get_local $5) + ) + ) + ) + (set_local $3 + (i32.const 0) + ) + ) + ) + (drop + (call $jb + (get_local $4) + (get_local $0) + (get_local $1) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $1) + ) + ) + (set_local $4 + (i32.add + (get_local $3) + (get_local $1) + ) + ) + ) + ) + ) + (get_local $4) + ) + (func $Za (; 16 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (block $label$break$a + (if + (i32.and + (tee_local $3 + (get_local $0) + ) + (i32.const 3) + ) + (block + (set_local $4 + (get_local $3) + ) + (loop $while-in + (if + (i32.eqz + (i32.load8_s + (get_local $0) + ) + ) + (block + (set_local $5 + (get_local $4) + ) + (br $label$break$a) + ) + ) + (br_if $while-in + (i32.and + (tee_local $4 + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 3) + ) + ) + (set_local $1 + (get_local $0) + ) + (set_local $2 + (i32.const 4) + ) + ) + ) + (block + (set_local $1 + (get_local $0) + ) + (set_local $2 + (i32.const 4) + ) + ) + ) + ) + (if + (i32.eq + (get_local $2) + (i32.const 4) + ) + (block + (set_local $2 + (get_local $1) + ) + (loop $while-in1 + (if + (i32.and + (i32.xor + (i32.and + (tee_local $1 + (i32.load + (get_local $2) + ) + ) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $1) + (i32.const -16843009) + ) + ) + (set_local $0 + (get_local $2) + ) + (block + (set_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + (if + (i32.and + (get_local $1) + (i32.const 255) + ) + (block + (set_local $1 + (get_local $0) + ) + (loop $while-in3 + (if + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + (block + (set_local $1 + (get_local $0) + ) + (br $while-in3) + ) + ) + ) + ) + ) + (set_local $5 + (get_local $0) + ) + ) + ) + (i32.sub + (get_local $5) + (get_local $3) + ) + ) + (func $_a (; 17 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (block $do-once + (if + (get_local $0) + (block + (if + (i32.le_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (block + (set_local $1 + (call $$a + (get_local $0) + ) + ) + (br $do-once) + ) + ) + (set_local $2 + (i32.eqz + (call $Ya + (get_local $0) + ) + ) + ) + (set_local $1 + (call $$a + (get_local $0) + ) + ) + (if + (i32.eqz + (get_local $2) + ) + (call $Ta + (get_local $0) + ) + ) + ) + (block + (set_local $0 + (if (result i32) + (i32.load + (i32.const 1140) + ) + (call $_a + (i32.load + (i32.const 1140) + ) + ) + (i32.const 0) + ) + ) + (call $pa + (i32.const 1188) + ) + (if + (tee_local $2 + (i32.load + (i32.const 1184) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (set_local $0 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (get_local $1) + ) + (i32.const -1) + ) + (call $Ya + (get_local $1) + ) + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.load offset=20 + (get_local $1) + ) + (i32.load offset=28 + (get_local $1) + ) + ) + (set_local $2 + (i32.or + (call $$a + (get_local $1) + ) + (get_local $2) + ) + ) + ) + (if + (get_local $0) + (call $Ta + (get_local $1) + ) + ) + (br_if $while-in + (tee_local $1 + (i32.load offset=56 + (get_local $1) + ) + ) + ) + ) + ) + (set_local $2 + (get_local $0) + ) + ) + (call $xa + (i32.const 1188) + ) + (set_local $1 + (get_local $2) + ) + ) + ) + ) + (get_local $1) + ) + (func $ab (; 18 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $5 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 16) + ) + ) + (i32.store8 + (tee_local $6 + (get_local $5) + ) + (tee_local $9 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $3) + ) + (set_local $8 + (i32.const 4) + ) + ) + (if + (call $Xa + (get_local $0) + ) + (set_local $4 + (i32.const -1) + ) + (block + (set_local $7 + (i32.load + (get_local $2) + ) + ) + (set_local $8 + (i32.const 4) + ) + ) + ) + ) + (block $do-once + (if + (i32.eq + (get_local $8) + (i32.const 4) + ) + (block + (if + (i32.lt_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (get_local $7) + ) + (if + (i32.ne + (tee_local $4 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (i32.load8_s offset=75 + (get_local $0) + ) + ) + (block + (i32.store + (get_local $3) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $2) + (get_local $9) + ) + (br $do-once) + ) + ) + ) + (set_local $4 + (if (result i32) + (i32.eq + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (get_local $6) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + (i32.const 1) + ) + (i32.load8_u + (get_local $6) + ) + (i32.const -1) + ) + ) + ) + ) + ) + (set_global $r + (get_local $5) + ) + (get_local $4) + ) + (func $$a (; 19 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (if + (i32.gt_u + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + (block + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.load + (get_local $3) + ) + (set_local $1 + (i32.const 3) + ) + (set_local $2 + (i32.const -1) + ) + ) + ) + (set_local $1 + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 3) + ) + (block + (if + (i32.lt_u + (tee_local $2 + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (tee_local $6 + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.sub + (get_local $2) + (get_local $6) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=40 + (get_local $0) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $4) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $2 + (i32.const 0) + ) + ) + ) + (get_local $2) + ) + (func $jb (; 20 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.ge_s + (get_local $2) + (i32.const 4096) + ) + (return + (call $va + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (set_local $3 + (get_local $0) + ) + (if + (i32.eq + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.and + (get_local $1) + (i32.const 3) + ) + ) + (block + (loop $while-in + (if + (i32.and + (get_local $0) + (i32.const 3) + ) + (block + (if + (i32.eqz + (get_local $2) + ) + (return + (get_local $3) + ) + ) + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (loop $while-in1 + (if + (i32.ge_s + (get_local $2) + (i32.const 4) + ) + (block + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (get_local $3) + ) + (func $gb (; 21 ;) + (nop) + ) + (func $hb (; 22 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (if + (i32.ge_s + (get_local $2) + (i32.const 20) + ) + (block + (set_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (if + (tee_local $3 + (i32.and + (get_local $0) + (i32.const 3) + ) + ) + (block + (set_local $3 + (i32.sub + (i32.add + (get_local $0) + (i32.const 4) + ) + (get_local $3) + ) + ) + (loop $while-in + (if + (i32.lt_s + (get_local $0) + (get_local $3) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (set_local $3 + (i32.or + (i32.or + (i32.or + (get_local $1) + (i32.shl + (get_local $1) + (i32.const 8) + ) + ) + (i32.shl + (get_local $1) + (i32.const 16) + ) + ) + (i32.shl + (get_local $1) + (i32.const 24) + ) + ) + ) + (set_local $5 + (i32.and + (get_local $4) + (i32.const -4) + ) + ) + (loop $while-in1 + (if + (i32.lt_s + (get_local $0) + (get_local $5) + ) + (block + (i32.store + (get_local $0) + (get_local $3) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.lt_s + (get_local $0) + (get_local $4) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $db (; 23 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (set_local $3 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (tee_local $1 + (i32.load + (i32.const 1024) + ) + ) + ) + (i32.const -1) + ) + (call $Ya + (get_local $1) + ) + (i32.const 0) + ) + ) + (set_local $0 + (block $do-once (result i32) + (if (result i32) + (i32.lt_s + (i32.add + (call $bb + (get_local $0) + (call $Za + (get_local $0) + ) + (i32.const 1) + (tee_local $2 + (get_local $1) + ) + ) + (i32.const -1) + ) + (i32.const 0) + ) + (i32.const 1) + (block (result i32) + (if + (i32.ne + (i32.load8_s offset=75 + (get_local $1) + ) + (i32.const 10) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $1) + ) + ) + (block + (i32.store + (get_local $2) + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $0) + (i32.const 10) + ) + (br $do-once + (i32.const 0) + ) + ) + ) + ) + (i32.lt_s + (call $ab + (get_local $1) + (i32.const 10) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (if + (get_local $3) + (call $Ta + (get_local $1) + ) + ) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (func $Xa (; 24 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $2 + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 74) + ) + ) + ) + ) + (i32.store8 + (get_local $1) + (i32.or + (i32.add + (get_local $2) + (i32.const 255) + ) + (get_local $2) + ) + ) + (tee_local $0 + (if (result i32) + (i32.and + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.const 8) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.or + (get_local $2) + (i32.const 32) + ) + ) + (i32.const -1) + ) + (block (result i32) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=28 + (get_local $0) + (tee_local $1 + (i32.load offset=44 + (get_local $0) + ) + ) + ) + (i32.store offset=20 + (get_local $0) + (get_local $1) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (get_local $1) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (func $bb (; 25 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.mul + (get_local $2) + (get_local $1) + ) + ) + (if + (i32.gt_s + (i32.load offset=76 + (get_local $3) + ) + (i32.const -1) + ) + (block + (set_local $5 + (i32.eqz + (call $Ya + (get_local $3) + ) + ) + ) + (set_local $0 + (call $Wa + (get_local $0) + (get_local $4) + (get_local $3) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (call $Ta + (get_local $3) + ) + ) + ) + (set_local $0 + (call $Wa + (get_local $0) + (get_local $4) + (get_local $3) + ) + ) + ) + (if + (i32.ne + (get_local $0) + (get_local $4) + ) + (set_local $2 + (i32.div_u + (get_local $0) + (get_local $1) + ) + ) + ) + (get_local $2) + ) + (func $Ua (; 26 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 32) + ) + ) + (i32.store + (tee_local $3 + (get_local $4) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + (i32.store offset=16 + (get_local $3) + (get_local $2) + ) + (set_local $0 + (if (result i32) + (i32.lt_s + (call $Pa + (call $ua + (i32.const 140) + (get_local $3) + ) + ) + (i32.const 0) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.const -1) + ) + (i32.const -1) + ) + (i32.load + (get_local $0) + ) + ) + ) + (set_global $r + (get_local $4) + ) + (get_local $0) + ) + (func $Va (; 27 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 80) + ) + ) + (set_local $3 + (get_local $4) + ) + (i32.store offset=36 + (get_local $0) + (i32.const 3) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 64) + ) + ) + (block + (i32.store + (get_local $3) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 21505) + ) + (i32.store offset=8 + (get_local $3) + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + (if + (call $wa + (i32.const 54) + (get_local $3) + ) + (i32.store8 offset=75 + (get_local $0) + (i32.const -1) + ) + ) + ) + ) + (set_local $3 + (call $Ra + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (set_global $r + (get_local $4) + ) + (get_local $3) + ) + (func $Oa (; 28 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 16) + ) + ) + (i32.store + (tee_local $2 + (get_local $1) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (set_local $0 + (call $Pa + (call $sa + (i32.const 6) + (get_local $2) + ) + ) + ) + (set_global $r + (get_local $1) + ) + (get_local $0) + ) + (func $Pa (; 29 ;) (param $0 i32) (result i32) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const -4096) + ) + (block (result i32) + (i32.store + (call $Qa) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + (get_local $0) + ) + ) + (func $Qa (; 30 ;) (result i32) + (if (result i32) + (i32.load + (i32.const 1160) + ) + (i32.load offset=64 + (call $ib) + ) + (i32.const 1204) + ) + ) + (func $lb (; 31 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call_indirect (type $FUNCSIG$iiii) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.add + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (func $Ea (; 32 ;) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (get_local $0) + ) + ) + (set_global $r + (i32.and + (i32.add + (get_global $r) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $ob (; 33 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $ja + (i32.const 1) + ) + (i32.const 0) + ) + (func $Ia (; 34 ;) (param $0 i32) (param $1 i32) + (if + (i32.eqz + (get_global $v) + ) + (block + (set_global $v + (get_local $0) + ) + (set_global $w + (get_local $1) + ) + ) + ) + ) + (func $kb (; 35 ;) (param $0 i32) (param $1 i32) (result i32) + (call_indirect (type $FUNCSIG$ii) + (get_local $1) + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + ) + (func $Sa (; 36 ;) (param $0 i32) + (if + (i32.eqz + (i32.load offset=68 + (get_local $0) + ) + ) + (call $Ta + (get_local $0) + ) + ) + ) + (func $mb (; 37 ;) (param $0 i32) (param $1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $1) + (i32.add + (i32.and + (get_local $0) + (i32.const 1) + ) + (i32.const 6) + ) + ) + ) + (func $Ha (; 38 ;) (param $0 i32) (param $1 i32) + (set_global $r + (get_local $0) + ) + (set_global $s + (get_local $1) + ) + ) + (func $nb (; 39 ;) (param $0 i32) (result i32) + (call $ja + (i32.const 0) + ) + (i32.const 0) + ) + (func $Na (; 40 ;) (result i32) + (drop + (call $db + (i32.const 1144) + ) + ) + (i32.const 0) + ) + (func $Ya (; 41 ;) (param $0 i32) (result i32) + (i32.const 0) + ) + (func $Ta (; 42 ;) (param $0 i32) + (nop) + ) + (func $pb (; 43 ;) (param $0 i32) + (call $ja + (i32.const 2) + ) + ) + (func $La (; 44 ;) (param $0 i32) + (set_global $K + (get_local $0) + ) + ) + (func $Ga (; 45 ;) (param $0 i32) + (set_global $r + (get_local $0) + ) + ) + (func $Ma (; 46 ;) (result i32) + (get_global $K) + ) + (func $Fa (; 47 ;) (result i32) + (get_global $r) + ) + (func $ib (; 48 ;) (result i32) + (i32.const 0) + ) + (func $__growWasmMemory (; 49 ;) (param $newSize i32) (result i32) + (grow_memory + (get_local $newSize) + ) + ) +) diff --git a/src/binaryen/test/memorygrowth.fromasm.imprecise.no-opts b/src/binaryen/test/memorygrowth.fromasm.imprecise.no-opts new file mode 100644 index 0000000000..86256f15ae --- /dev/null +++ b/src/binaryen/test/memorygrowth.fromasm.imprecise.no-opts @@ -0,0 +1,11992 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (import "env" "STACKTOP" (global $r$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $s$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $t$asm2wasm$import i32)) + (import "env" "ABORT" (global $u$asm2wasm$import i32)) + (import "global" "NaN" (global $z$asm2wasm$import f64)) + (import "global" "Infinity" (global $A$asm2wasm$import f64)) + (import "env" "abort" (func $ja (param i32))) + (import "env" "_pthread_cleanup_pop" (func $oa (param i32))) + (import "env" "___lock" (func $pa (param i32))) + (import "env" "_abort" (func $qa)) + (import "env" "_pthread_cleanup_push" (func $ra (param i32 i32))) + (import "env" "___syscall6" (func $sa (param i32 i32) (result i32))) + (import "env" "_sbrk" (func $ta (param i32) (result i32))) + (import "env" "___syscall140" (func $ua (param i32 i32) (result i32))) + (import "env" "_emscripten_memcpy_big" (func $va (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $wa (param i32 i32) (result i32))) + (import "env" "___unlock" (func $xa (param i32))) + (import "env" "___syscall146" (func $ya (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 8 8 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $r (mut i32) (get_global $r$asm2wasm$import)) + (global $s (mut i32) (get_global $s$asm2wasm$import)) + (global $t (mut i32) (get_global $t$asm2wasm$import)) + (global $u (mut i32) (get_global $u$asm2wasm$import)) + (global $v (mut i32) (i32.const 0)) + (global $w (mut i32) (i32.const 0)) + (global $x (mut i32) (i32.const 0)) + (global $y (mut i32) (i32.const 0)) + (global $z (mut f64) (get_global $z$asm2wasm$import)) + (global $A (mut f64) (get_global $A$asm2wasm$import)) + (global $B (mut i32) (i32.const 0)) + (global $C (mut i32) (i32.const 0)) + (global $D (mut i32) (i32.const 0)) + (global $E (mut i32) (i32.const 0)) + (global $F (mut f64) (f64.const 0)) + (global $G (mut i32) (i32.const 0)) + (global $H (mut i32) (i32.const 0)) + (global $I (mut i32) (i32.const 0)) + (global $J (mut f64) (f64.const 0)) + (global $K (mut i32) (i32.const 0)) + (global $L (mut i32) (i32.const 0)) + (global $M (mut i32) (i32.const 0)) + (global $N (mut i32) (i32.const 0)) + (global $O (mut i32) (i32.const 0)) + (global $P (mut i32) (i32.const 0)) + (global $Q (mut i32) (i32.const 0)) + (global $R (mut i32) (i32.const 0)) + (global $S (mut i32) (i32.const 0)) + (global $T (mut i32) (i32.const 0)) + (global $za (mut f64) (f64.const 0)) + (elem (get_global $tableBase) $nb $Oa $ob $Va $Ua $Ra $pb $Sa) + (export "_free" (func $fb)) + (export "_main" (func $Na)) + (export "_pthread_self" (func $ib)) + (export "_memset" (func $hb)) + (export "_malloc" (func $eb)) + (export "_memcpy" (func $jb)) + (export "_fflush" (func $_a)) + (export "___errno_location" (func $Qa)) + (export "runPostSets" (func $gb)) + (export "stackAlloc" (func $Ea)) + (export "stackSave" (func $Fa)) + (export "stackRestore" (func $Ga)) + (export "establishStackSpace" (func $Ha)) + (export "setThrew" (func $Ia)) + (export "setTempRet0" (func $La)) + (export "getTempRet0" (func $Ma)) + (export "dynCall_ii" (func $kb)) + (export "dynCall_iiii" (func $lb)) + (export "dynCall_vi" (func $mb)) + (export "__growWasmMemory" (func $__growWasmMemory)) + (func $eb (; 12 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $i i32) + (local $j i32) + (local $l i32) + (local $m i32) + (local $n i32) + (local $o i32) + (local $p i32) + (local $q i32) + (local $s i32) + (local $t i32) + (local $u i32) + (local $v i32) + (local $w i32) + (local $x i32) + (local $y i32) + (local $z i32) + (local $A i32) + (local $B i32) + (local $C i32) + (local $D i32) + (local $E i32) + (local $F i32) + (local $G i32) + (local $H i32) + (local $I i32) + (local $J i32) + (local $K i32) + (local $L i32) + (local $M i32) + (local $N i32) + (local $O i32) + (local $P i32) + (local $Q i32) + (local $R i32) + (local $S i32) + (local $T i32) + (local $U i32) + (local $V i32) + (local $W i32) + (local $X i32) + (local $Y i32) + (local $Z i32) + (local $_ i32) + (local $$ i32) + (local $aa i32) + (local $ba i32) + (local $ca i32) + (local $da i32) + (local $ea i32) + (local $fa i32) + (local $ga i32) + (local $ha i32) + (local $ia i32) + (local $ja i32) + (local $ka i32) + (local $la i32) + (local $ma i32) + (local $na i32) + (local $oa i32) + (local $pa i32) + (local $ra i32) + (local $sa i32) + (local $ua i32) + (local $va i32) + (local $wa i32) + (local $xa i32) + (local $ya i32) + (local $za i32) + (local $Aa i32) + (local $Ba i32) + (local $Ca i32) + (local $Da i32) + (local $Ea i32) + (local $Fa i32) + (local $Ga i32) + (local $Ha i32) + (local $Ia i32) + (local $Ja i32) + (local $Ka i32) + (local $La i32) + (local $Ma i32) + (local $Na i32) + (local $Oa i32) + (local $Pa i32) + (local $Ra i32) + (local $Sa i32) + (set_local $b + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 16) + ) + ) + (set_local $c + (get_local $b) + ) + (block $do-once + (if + (i32.lt_u + (get_local $a) + (i32.const 245) + ) + (block + (set_local $d + (if (result i32) + (i32.lt_u + (get_local $a) + (i32.const 11) + ) + (i32.const 16) + (i32.and + (i32.add + (get_local $a) + (i32.const 11) + ) + (i32.const -8) + ) + ) + ) + (set_local $e + (i32.shr_u + (get_local $d) + (i32.const 3) + ) + ) + (set_local $f + (i32.load + (i32.const 1208) + ) + ) + (set_local $g + (i32.shr_u + (get_local $f) + (get_local $e) + ) + ) + (if + (i32.and + (get_local $g) + (i32.const 3) + ) + (block + (set_local $h + (i32.add + (i32.xor + (i32.and + (get_local $g) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $e) + ) + ) + (set_local $i + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $h) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $j + (i32.add + (get_local $i) + (i32.const 8) + ) + ) + (set_local $l + (i32.load + (get_local $j) + ) + ) + (set_local $m + (i32.add + (get_local $l) + (i32.const 8) + ) + ) + (set_local $n + (i32.load + (get_local $m) + ) + ) + (block $do-once0 + (if + (i32.eq + (get_local $i) + (get_local $n) + ) + (i32.store + (i32.const 1208) + (i32.and + (get_local $f) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $h) + ) + (i32.const -1) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $n) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $o + (i32.add + (get_local $n) + (i32.const 12) + ) + ) + (if + (i32.eq + (i32.load + (get_local $o) + ) + (get_local $l) + ) + (block + (i32.store + (get_local $o) + (get_local $i) + ) + (i32.store + (get_local $j) + (get_local $n) + ) + (br $do-once0) + ) + (call $qa) + ) + ) + ) + ) + (set_local $n + (i32.shl + (get_local $h) + (i32.const 3) + ) + ) + (i32.store + (i32.add + (get_local $l) + (i32.const 4) + ) + (i32.or + (get_local $n) + (i32.const 3) + ) + ) + (set_local $j + (i32.add + (i32.add + (get_local $l) + (get_local $n) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $j) + (i32.or + (i32.load + (get_local $j) + ) + (i32.const 1) + ) + ) + (set_local $p + (get_local $m) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + (set_local $j + (i32.load + (i32.const 1216) + ) + ) + (if + (i32.gt_u + (get_local $d) + (get_local $j) + ) + (block + (if + (get_local $g) + (block + (set_local $n + (i32.shl + (i32.const 2) + (get_local $e) + ) + ) + (set_local $i + (i32.and + (i32.shl + (get_local $g) + (get_local $e) + ) + (i32.or + (get_local $n) + (i32.sub + (i32.const 0) + (get_local $n) + ) + ) + ) + ) + (set_local $n + (i32.add + (i32.and + (get_local $i) + (i32.sub + (i32.const 0) + (get_local $i) + ) + ) + (i32.const -1) + ) + ) + (set_local $i + (i32.and + (i32.shr_u + (get_local $n) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $o + (i32.shr_u + (get_local $n) + (get_local $i) + ) + ) + (set_local $n + (i32.and + (i32.shr_u + (get_local $o) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $q + (i32.shr_u + (get_local $o) + (get_local $n) + ) + ) + (set_local $o + (i32.and + (i32.shr_u + (get_local $q) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $s + (i32.shr_u + (get_local $q) + (get_local $o) + ) + ) + (set_local $q + (i32.and + (i32.shr_u + (get_local $s) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $t + (i32.shr_u + (get_local $s) + (get_local $q) + ) + ) + (set_local $s + (i32.and + (i32.shr_u + (get_local $t) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $u + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $n) + (get_local $i) + ) + (get_local $o) + ) + (get_local $q) + ) + (get_local $s) + ) + (i32.shr_u + (get_local $t) + (get_local $s) + ) + ) + ) + (set_local $s + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $u) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $t + (i32.add + (get_local $s) + (i32.const 8) + ) + ) + (set_local $q + (i32.load + (get_local $t) + ) + ) + (set_local $o + (i32.add + (get_local $q) + (i32.const 8) + ) + ) + (set_local $i + (i32.load + (get_local $o) + ) + ) + (block $do-once2 + (if + (i32.eq + (get_local $s) + (get_local $i) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (get_local $f) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $u) + ) + (i32.const -1) + ) + ) + ) + (set_local $v + (get_local $j) + ) + ) + (block + (if + (i32.lt_u + (get_local $i) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $n + (i32.add + (get_local $i) + (i32.const 12) + ) + ) + (if + (i32.eq + (i32.load + (get_local $n) + ) + (get_local $q) + ) + (block + (i32.store + (get_local $n) + (get_local $s) + ) + (i32.store + (get_local $t) + (get_local $i) + ) + (set_local $v + (i32.load + (i32.const 1216) + ) + ) + (br $do-once2) + ) + (call $qa) + ) + ) + ) + ) + (set_local $i + (i32.sub + (i32.shl + (get_local $u) + (i32.const 3) + ) + (get_local $d) + ) + ) + (i32.store + (i32.add + (get_local $q) + (i32.const 4) + ) + (i32.or + (get_local $d) + (i32.const 3) + ) + ) + (set_local $t + (i32.add + (get_local $q) + (get_local $d) + ) + ) + (i32.store + (i32.add + (get_local $t) + (i32.const 4) + ) + (i32.or + (get_local $i) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $t) + (get_local $i) + ) + (get_local $i) + ) + (if + (get_local $v) + (block + (set_local $s + (i32.load + (i32.const 1228) + ) + ) + (set_local $j + (i32.shr_u + (get_local $v) + (i32.const 3) + ) + ) + (set_local $f + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $j) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $e + (i32.load + (i32.const 1208) + ) + ) + (set_local $g + (i32.shl + (i32.const 1) + (get_local $j) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $e) + (get_local $g) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $e) + (get_local $g) + ) + ) + (set_local $w + (i32.add + (get_local $f) + (i32.const 8) + ) + ) + (set_local $x + (get_local $f) + ) + ) + (block + (set_local $g + (i32.add + (get_local $f) + (i32.const 8) + ) + ) + (set_local $e + (i32.load + (get_local $g) + ) + ) + (if + (i32.lt_u + (get_local $e) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $w + (get_local $g) + ) + (set_local $x + (get_local $e) + ) + ) + ) + ) + ) + (i32.store + (get_local $w) + (get_local $s) + ) + (i32.store + (i32.add + (get_local $x) + (i32.const 12) + ) + (get_local $s) + ) + (i32.store + (i32.add + (get_local $s) + (i32.const 8) + ) + (get_local $x) + ) + (i32.store + (i32.add + (get_local $s) + (i32.const 12) + ) + (get_local $f) + ) + ) + ) + (i32.store + (i32.const 1216) + (get_local $i) + ) + (i32.store + (i32.const 1228) + (get_local $t) + ) + (set_local $p + (get_local $o) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + (set_local $t + (i32.load + (i32.const 1212) + ) + ) + (if + (i32.eqz + (get_local $t) + ) + (set_local $y + (get_local $d) + ) + (block + (set_local $i + (i32.add + (i32.and + (get_local $t) + (i32.sub + (i32.const 0) + (get_local $t) + ) + ) + (i32.const -1) + ) + ) + (set_local $t + (i32.and + (i32.shr_u + (get_local $i) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $f + (i32.shr_u + (get_local $i) + (get_local $t) + ) + ) + (set_local $i + (i32.and + (i32.shr_u + (get_local $f) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $s + (i32.shr_u + (get_local $f) + (get_local $i) + ) + ) + (set_local $f + (i32.and + (i32.shr_u + (get_local $s) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $e + (i32.shr_u + (get_local $s) + (get_local $f) + ) + ) + (set_local $s + (i32.and + (i32.shr_u + (get_local $e) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $g + (i32.shr_u + (get_local $e) + (get_local $s) + ) + ) + (set_local $e + (i32.and + (i32.shr_u + (get_local $g) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $j + (i32.load + (i32.add + (i32.const 1512) + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $i) + (get_local $t) + ) + (get_local $f) + ) + (get_local $s) + ) + (get_local $e) + ) + (i32.shr_u + (get_local $g) + (get_local $e) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $e + (i32.sub + (i32.and + (i32.load + (i32.add + (get_local $j) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $d) + ) + ) + (set_local $g + (get_local $j) + ) + (set_local $s + (get_local $j) + ) + (loop $while-in + (block $while-out + (set_local $j + (i32.load + (i32.add + (get_local $g) + (i32.const 16) + ) + ) + ) + (if + (i32.eqz + (get_local $j) + ) + (block + (set_local $f + (i32.load + (i32.add + (get_local $g) + (i32.const 20) + ) + ) + ) + (if + (i32.eqz + (get_local $f) + ) + (block + (set_local $z + (get_local $e) + ) + (set_local $A + (get_local $s) + ) + (br $while-out) + ) + (set_local $B + (get_local $f) + ) + ) + ) + (set_local $B + (get_local $j) + ) + ) + (set_local $j + (i32.sub + (i32.and + (i32.load + (i32.add + (get_local $B) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $d) + ) + ) + (set_local $f + (i32.lt_u + (get_local $j) + (get_local $e) + ) + ) + (set_local $e + (if (result i32) + (get_local $f) + (get_local $j) + (get_local $e) + ) + ) + (set_local $g + (get_local $B) + ) + (set_local $s + (if (result i32) + (get_local $f) + (get_local $B) + (get_local $s) + ) + ) + (br $while-in) + ) + ) + (set_local $s + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $A) + (get_local $s) + ) + (call $qa) + ) + (set_local $g + (i32.add + (get_local $A) + (get_local $d) + ) + ) + (if + (i32.ge_u + (get_local $A) + (get_local $g) + ) + (call $qa) + ) + (set_local $e + (i32.load + (i32.add + (get_local $A) + (i32.const 24) + ) + ) + ) + (set_local $o + (i32.load + (i32.add + (get_local $A) + (i32.const 12) + ) + ) + ) + (block $do-once4 + (if + (i32.eq + (get_local $o) + (get_local $A) + ) + (block + (set_local $q + (i32.add + (get_local $A) + (i32.const 20) + ) + ) + (set_local $u + (i32.load + (get_local $q) + ) + ) + (if + (i32.eqz + (get_local $u) + ) + (block + (set_local $f + (i32.add + (get_local $A) + (i32.const 16) + ) + ) + (set_local $j + (i32.load + (get_local $f) + ) + ) + (if + (i32.eqz + (get_local $j) + ) + (block + (set_local $C + (i32.const 0) + ) + (br $do-once4) + ) + (block + (set_local $D + (get_local $j) + ) + (set_local $E + (get_local $f) + ) + ) + ) + ) + (block + (set_local $D + (get_local $u) + ) + (set_local $E + (get_local $q) + ) + ) + ) + (loop $while-in7 + (block $while-out6 + (set_local $q + (i32.add + (get_local $D) + (i32.const 20) + ) + ) + (set_local $u + (i32.load + (get_local $q) + ) + ) + (if + (get_local $u) + (block + (set_local $D + (get_local $u) + ) + (set_local $E + (get_local $q) + ) + (br $while-in7) + ) + ) + (set_local $q + (i32.add + (get_local $D) + (i32.const 16) + ) + ) + (set_local $u + (i32.load + (get_local $q) + ) + ) + (if + (i32.eqz + (get_local $u) + ) + (block + (set_local $F + (get_local $D) + ) + (set_local $G + (get_local $E) + ) + (br $while-out6) + ) + (block + (set_local $D + (get_local $u) + ) + (set_local $E + (get_local $q) + ) + ) + ) + (br $while-in7) + ) + ) + (if + (i32.lt_u + (get_local $G) + (get_local $s) + ) + (call $qa) + (block + (i32.store + (get_local $G) + (i32.const 0) + ) + (set_local $C + (get_local $F) + ) + (br $do-once4) + ) + ) + ) + (block + (set_local $q + (i32.load + (i32.add + (get_local $A) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $q) + (get_local $s) + ) + (call $qa) + ) + (set_local $u + (i32.add + (get_local $q) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $u) + ) + (get_local $A) + ) + (call $qa) + ) + (set_local $f + (i32.add + (get_local $o) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $f) + ) + (get_local $A) + ) + (block + (i32.store + (get_local $u) + (get_local $o) + ) + (i32.store + (get_local $f) + (get_local $q) + ) + (set_local $C + (get_local $o) + ) + (br $do-once4) + ) + (call $qa) + ) + ) + ) + ) + (block $do-once8 + (if + (get_local $e) + (block + (set_local $o + (i32.load + (i32.add + (get_local $A) + (i32.const 28) + ) + ) + ) + (set_local $s + (i32.add + (i32.const 1512) + (i32.shl + (get_local $o) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $A) + (i32.load + (get_local $s) + ) + ) + (block + (i32.store + (get_local $s) + (get_local $C) + ) + (if + (i32.eqz + (get_local $C) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $o) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $e) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $o + (i32.add + (get_local $e) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $o) + ) + (get_local $A) + ) + (i32.store + (get_local $o) + (get_local $C) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 20) + ) + (get_local $C) + ) + ) + (if + (i32.eqz + (get_local $C) + ) + (br $do-once8) + ) + ) + ) + (set_local $o + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $C) + (get_local $o) + ) + (call $qa) + ) + (i32.store + (i32.add + (get_local $C) + (i32.const 24) + ) + (get_local $e) + ) + (set_local $s + (i32.load + (i32.add + (get_local $A) + (i32.const 16) + ) + ) + ) + (block $do-once10 + (if + (get_local $s) + (if + (i32.lt_u + (get_local $s) + (get_local $o) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $C) + (i32.const 16) + ) + (get_local $s) + ) + (i32.store + (i32.add + (get_local $s) + (i32.const 24) + ) + (get_local $C) + ) + (br $do-once10) + ) + ) + ) + ) + (set_local $s + (i32.load + (i32.add + (get_local $A) + (i32.const 20) + ) + ) + ) + (if + (get_local $s) + (if + (i32.lt_u + (get_local $s) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $C) + (i32.const 20) + ) + (get_local $s) + ) + (i32.store + (i32.add + (get_local $s) + (i32.const 24) + ) + (get_local $C) + ) + (br $do-once8) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $z) + (i32.const 16) + ) + (block + (set_local $e + (i32.add + (get_local $z) + (get_local $d) + ) + ) + (i32.store + (i32.add + (get_local $A) + (i32.const 4) + ) + (i32.or + (get_local $e) + (i32.const 3) + ) + ) + (set_local $s + (i32.add + (i32.add + (get_local $A) + (get_local $e) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $s) + (i32.or + (i32.load + (get_local $s) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store + (i32.add + (get_local $A) + (i32.const 4) + ) + (i32.or + (get_local $d) + (i32.const 3) + ) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 4) + ) + (i32.or + (get_local $z) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $g) + (get_local $z) + ) + (get_local $z) + ) + (set_local $s + (i32.load + (i32.const 1216) + ) + ) + (if + (get_local $s) + (block + (set_local $e + (i32.load + (i32.const 1228) + ) + ) + (set_local $o + (i32.shr_u + (get_local $s) + (i32.const 3) + ) + ) + (set_local $s + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $o) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $q + (i32.load + (i32.const 1208) + ) + ) + (set_local $f + (i32.shl + (i32.const 1) + (get_local $o) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $q) + (get_local $f) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $q) + (get_local $f) + ) + ) + (set_local $H + (i32.add + (get_local $s) + (i32.const 8) + ) + ) + (set_local $I + (get_local $s) + ) + ) + (block + (set_local $f + (i32.add + (get_local $s) + (i32.const 8) + ) + ) + (set_local $q + (i32.load + (get_local $f) + ) + ) + (if + (i32.lt_u + (get_local $q) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $H + (get_local $f) + ) + (set_local $I + (get_local $q) + ) + ) + ) + ) + ) + (i32.store + (get_local $H) + (get_local $e) + ) + (i32.store + (i32.add + (get_local $I) + (i32.const 12) + ) + (get_local $e) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 8) + ) + (get_local $I) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 12) + ) + (get_local $s) + ) + ) + ) + (i32.store + (i32.const 1216) + (get_local $z) + ) + (i32.store + (i32.const 1228) + (get_local $g) + ) + ) + ) + (set_local $p + (i32.add + (get_local $A) + (i32.const 8) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + ) + (set_local $y + (get_local $d) + ) + ) + ) + (if + (i32.gt_u + (get_local $a) + (i32.const -65) + ) + (set_local $y + (i32.const -1) + ) + (block + (set_local $s + (i32.add + (get_local $a) + (i32.const 11) + ) + ) + (set_local $e + (i32.and + (get_local $s) + (i32.const -8) + ) + ) + (set_local $q + (i32.load + (i32.const 1212) + ) + ) + (if + (i32.eqz + (get_local $q) + ) + (set_local $y + (get_local $e) + ) + (block + (set_local $f + (i32.sub + (i32.const 0) + (get_local $e) + ) + ) + (set_local $o + (i32.shr_u + (get_local $s) + (i32.const 8) + ) + ) + (if + (i32.eqz + (get_local $o) + ) + (set_local $J + (i32.const 0) + ) + (if + (i32.gt_u + (get_local $e) + (i32.const 16777215) + ) + (set_local $J + (i32.const 31) + ) + (block + (set_local $s + (i32.and + (i32.shr_u + (i32.add + (get_local $o) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $u + (i32.shl + (get_local $o) + (get_local $s) + ) + ) + (set_local $o + (i32.and + (i32.shr_u + (i32.add + (get_local $u) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $j + (i32.shl + (get_local $u) + (get_local $o) + ) + ) + (set_local $u + (i32.and + (i32.shr_u + (i32.add + (get_local $j) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $t + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $o) + (get_local $s) + ) + (get_local $u) + ) + ) + (i32.shr_u + (i32.shl + (get_local $j) + (get_local $u) + ) + (i32.const 15) + ) + ) + ) + (set_local $J + (i32.or + (i32.and + (i32.shr_u + (get_local $e) + (i32.add + (get_local $t) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $t) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $t + (i32.load + (i32.add + (i32.const 1512) + (i32.shl + (get_local $J) + (i32.const 2) + ) + ) + ) + ) + (block $label$break$a + (if + (i32.eqz + (get_local $t) + ) + (block + (set_local $K + (get_local $f) + ) + (set_local $L + (i32.const 0) + ) + (set_local $M + (i32.const 0) + ) + (set_local $N + (i32.const 86) + ) + ) + (block + (set_local $u + (get_local $f) + ) + (set_local $j + (i32.const 0) + ) + (set_local $s + (i32.shl + (get_local $e) + (if (result i32) + (i32.eq + (get_local $J) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $J) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $o + (get_local $t) + ) + (set_local $i + (i32.const 0) + ) + (loop $while-in14 + (block $while-out13 + (set_local $m + (i32.and + (i32.load + (i32.add + (get_local $o) + (i32.const 4) + ) + ) + (i32.const -8) + ) + ) + (set_local $l + (i32.sub + (get_local $m) + (get_local $e) + ) + ) + (if + (i32.lt_u + (get_local $l) + (get_local $u) + ) + (if + (i32.eq + (get_local $m) + (get_local $e) + ) + (block + (set_local $O + (get_local $l) + ) + (set_local $P + (get_local $o) + ) + (set_local $Q + (get_local $o) + ) + (set_local $N + (i32.const 90) + ) + (br $label$break$a) + ) + (block + (set_local $R + (get_local $l) + ) + (set_local $S + (get_local $o) + ) + ) + ) + (block + (set_local $R + (get_local $u) + ) + (set_local $S + (get_local $i) + ) + ) + ) + (set_local $l + (i32.load + (i32.add + (get_local $o) + (i32.const 20) + ) + ) + ) + (set_local $o + (i32.load + (i32.add + (i32.add + (get_local $o) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $s) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $m + (if (result i32) + (i32.or + (i32.eq + (get_local $l) + (i32.const 0) + ) + (i32.eq + (get_local $l) + (get_local $o) + ) + ) + (get_local $j) + (get_local $l) + ) + ) + (set_local $l + (i32.eq + (get_local $o) + (i32.const 0) + ) + ) + (if + (get_local $l) + (block + (set_local $K + (get_local $R) + ) + (set_local $L + (get_local $m) + ) + (set_local $M + (get_local $S) + ) + (set_local $N + (i32.const 86) + ) + (br $while-out13) + ) + (block + (set_local $u + (get_local $R) + ) + (set_local $j + (get_local $m) + ) + (set_local $s + (i32.shl + (get_local $s) + (i32.xor + (i32.and + (get_local $l) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (set_local $i + (get_local $S) + ) + ) + ) + (br $while-in14) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 86) + ) + (block + (if + (i32.and + (i32.eq + (get_local $L) + (i32.const 0) + ) + (i32.eq + (get_local $M) + (i32.const 0) + ) + ) + (block + (set_local $t + (i32.shl + (i32.const 2) + (get_local $J) + ) + ) + (set_local $f + (i32.and + (get_local $q) + (i32.or + (get_local $t) + (i32.sub + (i32.const 0) + (get_local $t) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $f) + ) + (block + (set_local $y + (get_local $e) + ) + (br $do-once) + ) + ) + (set_local $t + (i32.add + (i32.and + (get_local $f) + (i32.sub + (i32.const 0) + (get_local $f) + ) + ) + (i32.const -1) + ) + ) + (set_local $f + (i32.and + (i32.shr_u + (get_local $t) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $d + (i32.shr_u + (get_local $t) + (get_local $f) + ) + ) + (set_local $t + (i32.and + (i32.shr_u + (get_local $d) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $g + (i32.shr_u + (get_local $d) + (get_local $t) + ) + ) + (set_local $d + (i32.and + (i32.shr_u + (get_local $g) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $i + (i32.shr_u + (get_local $g) + (get_local $d) + ) + ) + (set_local $g + (i32.and + (i32.shr_u + (get_local $i) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $s + (i32.shr_u + (get_local $i) + (get_local $g) + ) + ) + (set_local $i + (i32.and + (i32.shr_u + (get_local $s) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $T + (i32.load + (i32.add + (i32.const 1512) + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $t) + (get_local $f) + ) + (get_local $d) + ) + (get_local $g) + ) + (get_local $i) + ) + (i32.shr_u + (get_local $s) + (get_local $i) + ) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (set_local $T + (get_local $L) + ) + ) + (if + (i32.eqz + (get_local $T) + ) + (block + (set_local $U + (get_local $K) + ) + (set_local $V + (get_local $M) + ) + ) + (block + (set_local $O + (get_local $K) + ) + (set_local $P + (get_local $T) + ) + (set_local $Q + (get_local $M) + ) + (set_local $N + (i32.const 90) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 90) + ) + (loop $while-in16 + (block $while-out15 + (set_local $N + (i32.const 0) + ) + (set_local $i + (i32.sub + (i32.and + (i32.load + (i32.add + (get_local $P) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $e) + ) + ) + (set_local $s + (i32.lt_u + (get_local $i) + (get_local $O) + ) + ) + (set_local $g + (if (result i32) + (get_local $s) + (get_local $i) + (get_local $O) + ) + ) + (set_local $i + (if (result i32) + (get_local $s) + (get_local $P) + (get_local $Q) + ) + ) + (set_local $s + (i32.load + (i32.add + (get_local $P) + (i32.const 16) + ) + ) + ) + (if + (get_local $s) + (block + (set_local $O + (get_local $g) + ) + (set_local $P + (get_local $s) + ) + (set_local $Q + (get_local $i) + ) + (set_local $N + (i32.const 90) + ) + (br $while-in16) + ) + ) + (set_local $P + (i32.load + (i32.add + (get_local $P) + (i32.const 20) + ) + ) + ) + (if + (i32.eqz + (get_local $P) + ) + (block + (set_local $U + (get_local $g) + ) + (set_local $V + (get_local $i) + ) + (br $while-out15) + ) + (block + (set_local $O + (get_local $g) + ) + (set_local $Q + (get_local $i) + ) + (set_local $N + (i32.const 90) + ) + ) + ) + (br $while-in16) + ) + ) + ) + (if + (i32.eqz + (get_local $V) + ) + (set_local $y + (get_local $e) + ) + (if + (i32.lt_u + (get_local $U) + (i32.sub + (i32.load + (i32.const 1216) + ) + (get_local $e) + ) + ) + (block + (set_local $q + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $V) + (get_local $q) + ) + (call $qa) + ) + (set_local $i + (i32.add + (get_local $V) + (get_local $e) + ) + ) + (if + (i32.ge_u + (get_local $V) + (get_local $i) + ) + (call $qa) + ) + (set_local $g + (i32.load + (i32.add + (get_local $V) + (i32.const 24) + ) + ) + ) + (set_local $s + (i32.load + (i32.add + (get_local $V) + (i32.const 12) + ) + ) + ) + (block $do-once17 + (if + (i32.eq + (get_local $s) + (get_local $V) + ) + (block + (set_local $d + (i32.add + (get_local $V) + (i32.const 20) + ) + ) + (set_local $f + (i32.load + (get_local $d) + ) + ) + (if + (i32.eqz + (get_local $f) + ) + (block + (set_local $t + (i32.add + (get_local $V) + (i32.const 16) + ) + ) + (set_local $j + (i32.load + (get_local $t) + ) + ) + (if + (i32.eqz + (get_local $j) + ) + (block + (set_local $W + (i32.const 0) + ) + (br $do-once17) + ) + (block + (set_local $X + (get_local $j) + ) + (set_local $Y + (get_local $t) + ) + ) + ) + ) + (block + (set_local $X + (get_local $f) + ) + (set_local $Y + (get_local $d) + ) + ) + ) + (loop $while-in20 + (block $while-out19 + (set_local $d + (i32.add + (get_local $X) + (i32.const 20) + ) + ) + (set_local $f + (i32.load + (get_local $d) + ) + ) + (if + (get_local $f) + (block + (set_local $X + (get_local $f) + ) + (set_local $Y + (get_local $d) + ) + (br $while-in20) + ) + ) + (set_local $d + (i32.add + (get_local $X) + (i32.const 16) + ) + ) + (set_local $f + (i32.load + (get_local $d) + ) + ) + (if + (i32.eqz + (get_local $f) + ) + (block + (set_local $Z + (get_local $X) + ) + (set_local $_ + (get_local $Y) + ) + (br $while-out19) + ) + (block + (set_local $X + (get_local $f) + ) + (set_local $Y + (get_local $d) + ) + ) + ) + (br $while-in20) + ) + ) + (if + (i32.lt_u + (get_local $_) + (get_local $q) + ) + (call $qa) + (block + (i32.store + (get_local $_) + (i32.const 0) + ) + (set_local $W + (get_local $Z) + ) + (br $do-once17) + ) + ) + ) + (block + (set_local $d + (i32.load + (i32.add + (get_local $V) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $d) + (get_local $q) + ) + (call $qa) + ) + (set_local $f + (i32.add + (get_local $d) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $f) + ) + (get_local $V) + ) + (call $qa) + ) + (set_local $t + (i32.add + (get_local $s) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $t) + ) + (get_local $V) + ) + (block + (i32.store + (get_local $f) + (get_local $s) + ) + (i32.store + (get_local $t) + (get_local $d) + ) + (set_local $W + (get_local $s) + ) + (br $do-once17) + ) + (call $qa) + ) + ) + ) + ) + (block $do-once21 + (if + (get_local $g) + (block + (set_local $s + (i32.load + (i32.add + (get_local $V) + (i32.const 28) + ) + ) + ) + (set_local $q + (i32.add + (i32.const 1512) + (i32.shl + (get_local $s) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $V) + (i32.load + (get_local $q) + ) + ) + (block + (i32.store + (get_local $q) + (get_local $W) + ) + (if + (i32.eqz + (get_local $W) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $s) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $g) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $s + (i32.add + (get_local $g) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $s) + ) + (get_local $V) + ) + (i32.store + (get_local $s) + (get_local $W) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 20) + ) + (get_local $W) + ) + ) + (if + (i32.eqz + (get_local $W) + ) + (br $do-once21) + ) + ) + ) + (set_local $s + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $W) + (get_local $s) + ) + (call $qa) + ) + (i32.store + (i32.add + (get_local $W) + (i32.const 24) + ) + (get_local $g) + ) + (set_local $q + (i32.load + (i32.add + (get_local $V) + (i32.const 16) + ) + ) + ) + (block $do-once23 + (if + (get_local $q) + (if + (i32.lt_u + (get_local $q) + (get_local $s) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $W) + (i32.const 16) + ) + (get_local $q) + ) + (i32.store + (i32.add + (get_local $q) + (i32.const 24) + ) + (get_local $W) + ) + (br $do-once23) + ) + ) + ) + ) + (set_local $q + (i32.load + (i32.add + (get_local $V) + (i32.const 20) + ) + ) + ) + (if + (get_local $q) + (if + (i32.lt_u + (get_local $q) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $W) + (i32.const 20) + ) + (get_local $q) + ) + (i32.store + (i32.add + (get_local $q) + (i32.const 24) + ) + (get_local $W) + ) + (br $do-once21) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.lt_u + (get_local $U) + (i32.const 16) + ) + (block + (set_local $g + (i32.add + (get_local $U) + (get_local $e) + ) + ) + (i32.store + (i32.add + (get_local $V) + (i32.const 4) + ) + (i32.or + (get_local $g) + (i32.const 3) + ) + ) + (set_local $q + (i32.add + (i32.add + (get_local $V) + (get_local $g) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $q) + (i32.or + (i32.load + (get_local $q) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store + (i32.add + (get_local $V) + (i32.const 4) + ) + (i32.or + (get_local $e) + (i32.const 3) + ) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 4) + ) + (i32.or + (get_local $U) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i) + (get_local $U) + ) + (get_local $U) + ) + (set_local $q + (i32.shr_u + (get_local $U) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $U) + (i32.const 256) + ) + (block + (set_local $g + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $q) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $s + (i32.load + (i32.const 1208) + ) + ) + (set_local $d + (i32.shl + (i32.const 1) + (get_local $q) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $s) + (get_local $d) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $s) + (get_local $d) + ) + ) + (set_local $$ + (i32.add + (get_local $g) + (i32.const 8) + ) + ) + (set_local $aa + (get_local $g) + ) + ) + (block + (set_local $d + (i32.add + (get_local $g) + (i32.const 8) + ) + ) + (set_local $s + (i32.load + (get_local $d) + ) + ) + (if + (i32.lt_u + (get_local $s) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $$ + (get_local $d) + ) + (set_local $aa + (get_local $s) + ) + ) + ) + ) + ) + (i32.store + (get_local $$) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $aa) + (i32.const 12) + ) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 8) + ) + (get_local $aa) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 12) + ) + (get_local $g) + ) + (br $do-once25) + ) + ) + (set_local $g + (i32.shr_u + (get_local $U) + (i32.const 8) + ) + ) + (if + (i32.eqz + (get_local $g) + ) + (set_local $ba + (i32.const 0) + ) + (if + (i32.gt_u + (get_local $U) + (i32.const 16777215) + ) + (set_local $ba + (i32.const 31) + ) + (block + (set_local $s + (i32.and + (i32.shr_u + (i32.add + (get_local $g) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $d + (i32.shl + (get_local $g) + (get_local $s) + ) + ) + (set_local $g + (i32.and + (i32.shr_u + (i32.add + (get_local $d) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $q + (i32.shl + (get_local $d) + (get_local $g) + ) + ) + (set_local $d + (i32.and + (i32.shr_u + (i32.add + (get_local $q) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $t + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $g) + (get_local $s) + ) + (get_local $d) + ) + ) + (i32.shr_u + (i32.shl + (get_local $q) + (get_local $d) + ) + (i32.const 15) + ) + ) + ) + (set_local $ba + (i32.or + (i32.and + (i32.shr_u + (get_local $U) + (i32.add + (get_local $t) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $t) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $t + (i32.add + (i32.const 1512) + (i32.shl + (get_local $ba) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 28) + ) + (get_local $ba) + ) + (set_local $d + (i32.add + (get_local $i) + (i32.const 16) + ) + ) + (i32.store + (i32.add + (get_local $d) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store + (get_local $d) + (i32.const 0) + ) + (set_local $d + (i32.load + (i32.const 1212) + ) + ) + (set_local $q + (i32.shl + (i32.const 1) + (get_local $ba) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $d) + (get_local $q) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $d) + (get_local $q) + ) + ) + (i32.store + (get_local $t) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 24) + ) + (get_local $t) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 12) + ) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 8) + ) + (get_local $i) + ) + (br $do-once25) + ) + ) + (set_local $q + (i32.shl + (get_local $U) + (if (result i32) + (i32.eq + (get_local $ba) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $ba) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $d + (i32.load + (get_local $t) + ) + ) + (loop $while-in28 + (block $while-out27 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $d) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $U) + ) + (block + (set_local $ca + (get_local $d) + ) + (set_local $N + (i32.const 148) + ) + (br $while-out27) + ) + ) + (set_local $t + (i32.add + (i32.add + (get_local $d) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $q) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $s + (i32.load + (get_local $t) + ) + ) + (if + (i32.eqz + (get_local $s) + ) + (block + (set_local $da + (get_local $t) + ) + (set_local $ea + (get_local $d) + ) + (set_local $N + (i32.const 145) + ) + (br $while-out27) + ) + (block + (set_local $q + (i32.shl + (get_local $q) + (i32.const 1) + ) + ) + (set_local $d + (get_local $s) + ) + ) + ) + (br $while-in28) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 145) + ) + (if + (i32.lt_u + (get_local $da) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $da) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 24) + ) + (get_local $ea) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 12) + ) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 8) + ) + (get_local $i) + ) + (br $do-once25) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 148) + ) + (block + (set_local $d + (i32.add + (get_local $ca) + (i32.const 8) + ) + ) + (set_local $q + (i32.load + (get_local $d) + ) + ) + (set_local $s + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $q) + (get_local $s) + ) + (i32.ge_u + (get_local $ca) + (get_local $s) + ) + ) + (block + (i32.store + (i32.add + (get_local $q) + (i32.const 12) + ) + (get_local $i) + ) + (i32.store + (get_local $d) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 8) + ) + (get_local $q) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 12) + ) + (get_local $ca) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once25) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + ) + (set_local $p + (i32.add + (get_local $V) + (i32.const 8) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + (set_local $y + (get_local $e) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $V + (i32.load + (i32.const 1216) + ) + ) + (if + (i32.ge_u + (get_local $V) + (get_local $y) + ) + (block + (set_local $ca + (i32.sub + (get_local $V) + (get_local $y) + ) + ) + (set_local $ea + (i32.load + (i32.const 1228) + ) + ) + (if + (i32.gt_u + (get_local $ca) + (i32.const 15) + ) + (block + (set_local $da + (i32.add + (get_local $ea) + (get_local $y) + ) + ) + (i32.store + (i32.const 1228) + (get_local $da) + ) + (i32.store + (i32.const 1216) + (get_local $ca) + ) + (i32.store + (i32.add + (get_local $da) + (i32.const 4) + ) + (i32.or + (get_local $ca) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $da) + (get_local $ca) + ) + (get_local $ca) + ) + (i32.store + (i32.add + (get_local $ea) + (i32.const 4) + ) + (i32.or + (get_local $y) + (i32.const 3) + ) + ) + ) + (block + (i32.store + (i32.const 1216) + (i32.const 0) + ) + (i32.store + (i32.const 1228) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $ea) + (i32.const 4) + ) + (i32.or + (get_local $V) + (i32.const 3) + ) + ) + (set_local $ca + (i32.add + (i32.add + (get_local $ea) + (get_local $V) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $ca) + (i32.or + (i32.load + (get_local $ca) + ) + (i32.const 1) + ) + ) + ) + ) + (set_local $p + (i32.add + (get_local $ea) + (i32.const 8) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + (set_local $ea + (i32.load + (i32.const 1220) + ) + ) + (if + (i32.gt_u + (get_local $ea) + (get_local $y) + ) + (block + (set_local $ca + (i32.sub + (get_local $ea) + (get_local $y) + ) + ) + (i32.store + (i32.const 1220) + (get_local $ca) + ) + (set_local $ea + (i32.load + (i32.const 1232) + ) + ) + (set_local $V + (i32.add + (get_local $ea) + (get_local $y) + ) + ) + (i32.store + (i32.const 1232) + (get_local $V) + ) + (i32.store + (i32.add + (get_local $V) + (i32.const 4) + ) + (i32.or + (get_local $ca) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $ea) + (i32.const 4) + ) + (i32.or + (get_local $y) + (i32.const 3) + ) + ) + (set_local $p + (i32.add + (get_local $ea) + (i32.const 8) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + (if + (i32.eqz + (i32.load + (i32.const 1680) + ) + ) + (block + (i32.store + (i32.const 1688) + (i32.const 4096) + ) + (i32.store + (i32.const 1684) + (i32.const 4096) + ) + (i32.store + (i32.const 1692) + (i32.const -1) + ) + (i32.store + (i32.const 1696) + (i32.const -1) + ) + (i32.store + (i32.const 1700) + (i32.const 0) + ) + (i32.store + (i32.const 1652) + (i32.const 0) + ) + (set_local $ea + (i32.xor + (i32.and + (get_local $c) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + (i32.store + (get_local $c) + (get_local $ea) + ) + (i32.store + (i32.const 1680) + (get_local $ea) + ) + ) + ) + (set_local $ea + (i32.add + (get_local $y) + (i32.const 48) + ) + ) + (set_local $c + (i32.load + (i32.const 1688) + ) + ) + (set_local $ca + (i32.add + (get_local $y) + (i32.const 47) + ) + ) + (set_local $V + (i32.add + (get_local $c) + (get_local $ca) + ) + ) + (set_local $da + (i32.sub + (i32.const 0) + (get_local $c) + ) + ) + (set_local $c + (i32.and + (get_local $V) + (get_local $da) + ) + ) + (if + (i32.le_u + (get_local $c) + (get_local $y) + ) + (block + (set_local $p + (i32.const 0) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + (set_local $U + (i32.load + (i32.const 1648) + ) + ) + (if + (get_local $U) + (block + (set_local $ba + (i32.load + (i32.const 1640) + ) + ) + (set_local $aa + (i32.add + (get_local $ba) + (get_local $c) + ) + ) + (if + (i32.or + (i32.le_u + (get_local $aa) + (get_local $ba) + ) + (i32.gt_u + (get_local $aa) + (get_local $U) + ) + ) + (block + (set_local $p + (i32.const 0) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + ) + ) + (block $label$break$b + (if + (i32.eqz + (i32.and + (i32.load + (i32.const 1652) + ) + (i32.const 4) + ) + ) + (block + (set_local $U + (i32.load + (i32.const 1232) + ) + ) + (block $label$break$c + (if + (i32.eqz + (get_local $U) + ) + (set_local $N + (i32.const 171) + ) + (block + (set_local $aa + (i32.const 1656) + ) + (loop $while-in32 + (block $while-out31 + (set_local $ba + (i32.load + (get_local $aa) + ) + ) + (if + (i32.le_u + (get_local $ba) + (get_local $U) + ) + (block + (set_local $$ + (i32.add + (get_local $aa) + (i32.const 4) + ) + ) + (if + (i32.gt_u + (i32.add + (get_local $ba) + (i32.load + (get_local $$) + ) + ) + (get_local $U) + ) + (block + (set_local $fa + (get_local $aa) + ) + (set_local $ga + (get_local $$) + ) + (br $while-out31) + ) + ) + ) + ) + (set_local $aa + (i32.load + (i32.add + (get_local $aa) + (i32.const 8) + ) + ) + ) + (if + (i32.eqz + (get_local $aa) + ) + (block + (set_local $N + (i32.const 171) + ) + (br $label$break$c) + ) + ) + (br $while-in32) + ) + ) + (set_local $aa + (i32.and + (i32.sub + (get_local $V) + (i32.load + (i32.const 1220) + ) + ) + (get_local $da) + ) + ) + (if + (i32.lt_u + (get_local $aa) + (i32.const 2147483647) + ) + (block + (set_local $$ + (call $ta + (get_local $aa) + ) + ) + (if + (i32.eq + (get_local $$) + (i32.add + (i32.load + (get_local $fa) + ) + (i32.load + (get_local $ga) + ) + ) + ) + (if + (i32.ne + (get_local $$) + (i32.const -1) + ) + (block + (set_local $ha + (get_local $$) + ) + (set_local $ia + (get_local $aa) + ) + (set_local $N + (i32.const 191) + ) + (br $label$break$b) + ) + ) + (block + (set_local $ja + (get_local $$) + ) + (set_local $ka + (get_local $aa) + ) + (set_local $N + (i32.const 181) + ) + ) + ) + ) + ) + ) + ) + ) + (block $do-once33 + (if + (i32.eq + (get_local $N) + (i32.const 171) + ) + (block + (set_local $U + (call $ta + (i32.const 0) + ) + ) + (if + (i32.ne + (get_local $U) + (i32.const -1) + ) + (block + (set_local $e + (get_local $U) + ) + (set_local $aa + (i32.load + (i32.const 1684) + ) + ) + (set_local $$ + (i32.add + (get_local $aa) + (i32.const -1) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $$) + (get_local $e) + ) + ) + (set_local $la + (get_local $c) + ) + (set_local $la + (i32.add + (i32.sub + (get_local $c) + (get_local $e) + ) + (i32.and + (i32.add + (get_local $$) + (get_local $e) + ) + (i32.sub + (i32.const 0) + (get_local $aa) + ) + ) + ) + ) + ) + (set_local $aa + (i32.load + (i32.const 1640) + ) + ) + (set_local $e + (i32.add + (get_local $aa) + (get_local $la) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $la) + (get_local $y) + ) + (i32.lt_u + (get_local $la) + (i32.const 2147483647) + ) + ) + (block + (set_local $$ + (i32.load + (i32.const 1648) + ) + ) + (if + (get_local $$) + (if + (i32.or + (i32.le_u + (get_local $e) + (get_local $aa) + ) + (i32.gt_u + (get_local $e) + (get_local $$) + ) + ) + (br $do-once33) + ) + ) + (set_local $$ + (call $ta + (get_local $la) + ) + ) + (if + (i32.eq + (get_local $$) + (get_local $U) + ) + (block + (set_local $ha + (get_local $U) + ) + (set_local $ia + (get_local $la) + ) + (set_local $N + (i32.const 191) + ) + (br $label$break$b) + ) + (block + (set_local $ja + (get_local $$) + ) + (set_local $ka + (get_local $la) + ) + (set_local $N + (i32.const 181) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (block $label$break$d + (if + (i32.eq + (get_local $N) + (i32.const 181) + ) + (block + (set_local $$ + (i32.sub + (i32.const 0) + (get_local $ka) + ) + ) + (block $do-once36 + (if + (i32.and + (i32.gt_u + (get_local $ea) + (get_local $ka) + ) + (i32.and + (i32.lt_u + (get_local $ka) + (i32.const 2147483647) + ) + (i32.ne + (get_local $ja) + (i32.const -1) + ) + ) + ) + (block + (set_local $U + (i32.load + (i32.const 1688) + ) + ) + (set_local $e + (i32.and + (i32.add + (i32.sub + (get_local $ca) + (get_local $ka) + ) + (get_local $U) + ) + (i32.sub + (i32.const 0) + (get_local $U) + ) + ) + ) + (if + (i32.lt_u + (get_local $e) + (i32.const 2147483647) + ) + (if + (i32.eq + (call $ta + (get_local $e) + ) + (i32.const -1) + ) + (block + (drop + (call $ta + (get_local $$) + ) + ) + (br $label$break$d) + ) + (block + (set_local $ma + (i32.add + (get_local $e) + (get_local $ka) + ) + ) + (br $do-once36) + ) + ) + (set_local $ma + (get_local $ka) + ) + ) + ) + (set_local $ma + (get_local $ka) + ) + ) + ) + (if + (i32.ne + (get_local $ja) + (i32.const -1) + ) + (block + (set_local $ha + (get_local $ja) + ) + (set_local $ia + (get_local $ma) + ) + (set_local $N + (i32.const 191) + ) + (br $label$break$b) + ) + ) + ) + ) + ) + (i32.store + (i32.const 1652) + (i32.or + (i32.load + (i32.const 1652) + ) + (i32.const 4) + ) + ) + (set_local $N + (i32.const 188) + ) + ) + (set_local $N + (i32.const 188) + ) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 188) + ) + (if + (i32.lt_u + (get_local $c) + (i32.const 2147483647) + ) + (block + (set_local $ma + (call $ta + (get_local $c) + ) + ) + (set_local $c + (call $ta + (i32.const 0) + ) + ) + (if + (i32.and + (i32.lt_u + (get_local $ma) + (get_local $c) + ) + (i32.and + (i32.ne + (get_local $ma) + (i32.const -1) + ) + (i32.ne + (get_local $c) + (i32.const -1) + ) + ) + ) + (block + (set_local $ja + (i32.sub + (get_local $c) + (get_local $ma) + ) + ) + (if + (i32.gt_u + (get_local $ja) + (i32.add + (get_local $y) + (i32.const 40) + ) + ) + (block + (set_local $ha + (get_local $ma) + ) + (set_local $ia + (get_local $ja) + ) + (set_local $N + (i32.const 191) + ) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 191) + ) + (block + (set_local $ja + (i32.add + (i32.load + (i32.const 1640) + ) + (get_local $ia) + ) + ) + (i32.store + (i32.const 1640) + (get_local $ja) + ) + (if + (i32.gt_u + (get_local $ja) + (i32.load + (i32.const 1644) + ) + ) + (i32.store + (i32.const 1644) + (get_local $ja) + ) + ) + (set_local $ja + (i32.load + (i32.const 1232) + ) + ) + (block $do-once38 + (if + (i32.eqz + (get_local $ja) + ) + (block + (set_local $ma + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.or + (i32.eq + (get_local $ma) + (i32.const 0) + ) + (i32.lt_u + (get_local $ha) + (get_local $ma) + ) + ) + (i32.store + (i32.const 1224) + (get_local $ha) + ) + ) + (i32.store + (i32.const 1656) + (get_local $ha) + ) + (i32.store + (i32.const 1660) + (get_local $ia) + ) + (i32.store + (i32.const 1668) + (i32.const 0) + ) + (i32.store + (i32.const 1244) + (i32.load + (i32.const 1680) + ) + ) + (i32.store + (i32.const 1240) + (i32.const -1) + ) + (set_local $ma + (i32.const 0) + ) + (loop $do-in + (block $do-out + (set_local $c + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $ma) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $c) + (i32.const 12) + ) + (get_local $c) + ) + (i32.store + (i32.add + (get_local $c) + (i32.const 8) + ) + (get_local $c) + ) + (set_local $ma + (i32.add + (get_local $ma) + (i32.const 1) + ) + ) + (br_if $do-in + (i32.ne + (get_local $ma) + (i32.const 32) + ) + ) + ) + ) + (set_local $ma + (i32.add + (get_local $ha) + (i32.const 8) + ) + ) + (set_local $c + (if (result i32) + (i32.eq + (i32.and + (get_local $ma) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ma) + ) + (i32.const 7) + ) + ) + ) + (set_local $ma + (i32.add + (get_local $ha) + (get_local $c) + ) + ) + (set_local $ka + (i32.sub + (i32.add + (get_local $ia) + (i32.const -40) + ) + (get_local $c) + ) + ) + (i32.store + (i32.const 1232) + (get_local $ma) + ) + (i32.store + (i32.const 1220) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ma) + (i32.const 4) + ) + (i32.or + (get_local $ka) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $ma) + (get_local $ka) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + ) + (block + (set_local $ka + (i32.const 1656) + ) + (loop $do-in41 + (block $do-out40 + (set_local $ma + (i32.load + (get_local $ka) + ) + ) + (set_local $c + (i32.add + (get_local $ka) + (i32.const 4) + ) + ) + (set_local $ca + (i32.load + (get_local $c) + ) + ) + (if + (i32.eq + (get_local $ha) + (i32.add + (get_local $ma) + (get_local $ca) + ) + ) + (block + (set_local $na + (get_local $ma) + ) + (set_local $oa + (get_local $c) + ) + (set_local $pa + (get_local $ca) + ) + (set_local $ra + (get_local $ka) + ) + (set_local $N + (i32.const 201) + ) + (br $do-out40) + ) + ) + (set_local $ka + (i32.load + (i32.add + (get_local $ka) + (i32.const 8) + ) + ) + ) + (br_if $do-in41 + (i32.ne + (get_local $ka) + (i32.const 0) + ) + ) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 201) + ) + (if + (i32.eqz + (i32.and + (i32.load + (i32.add + (get_local $ra) + (i32.const 12) + ) + ) + (i32.const 8) + ) + ) + (if + (i32.and + (i32.lt_u + (get_local $ja) + (get_local $ha) + ) + (i32.ge_u + (get_local $ja) + (get_local $na) + ) + ) + (block + (i32.store + (get_local $oa) + (i32.add + (get_local $pa) + (get_local $ia) + ) + ) + (set_local $ka + (i32.add + (get_local $ja) + (i32.const 8) + ) + ) + (set_local $ca + (if (result i32) + (i32.eq + (i32.and + (get_local $ka) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ka) + ) + (i32.const 7) + ) + ) + ) + (set_local $ka + (i32.add + (get_local $ja) + (get_local $ca) + ) + ) + (set_local $c + (i32.add + (i32.sub + (get_local $ia) + (get_local $ca) + ) + (i32.load + (i32.const 1220) + ) + ) + ) + (i32.store + (i32.const 1232) + (get_local $ka) + ) + (i32.store + (i32.const 1220) + (get_local $c) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 4) + ) + (i32.or + (get_local $c) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $ka) + (get_local $c) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + (br $do-once38) + ) + ) + ) + ) + (set_local $c + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $ha) + (get_local $c) + ) + (block + (i32.store + (i32.const 1224) + (get_local $ha) + ) + (set_local $sa + (get_local $ha) + ) + ) + (set_local $sa + (get_local $c) + ) + ) + (set_local $c + (i32.add + (get_local $ha) + (get_local $ia) + ) + ) + (set_local $ka + (i32.const 1656) + ) + (loop $while-in43 + (block $while-out42 + (if + (i32.eq + (i32.load + (get_local $ka) + ) + (get_local $c) + ) + (block + (set_local $ua + (get_local $ka) + ) + (set_local $va + (get_local $ka) + ) + (set_local $N + (i32.const 209) + ) + (br $while-out42) + ) + ) + (set_local $ka + (i32.load + (i32.add + (get_local $ka) + (i32.const 8) + ) + ) + ) + (if + (i32.eqz + (get_local $ka) + ) + (block + (set_local $wa + (i32.const 1656) + ) + (br $while-out42) + ) + ) + (br $while-in43) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 209) + ) + (if + (i32.eqz + (i32.and + (i32.load + (i32.add + (get_local $va) + (i32.const 12) + ) + ) + (i32.const 8) + ) + ) + (block + (i32.store + (get_local $ua) + (get_local $ha) + ) + (set_local $ka + (i32.add + (get_local $va) + (i32.const 4) + ) + ) + (i32.store + (get_local $ka) + (i32.add + (i32.load + (get_local $ka) + ) + (get_local $ia) + ) + ) + (set_local $ka + (i32.add + (get_local $ha) + (i32.const 8) + ) + ) + (set_local $ca + (i32.add + (get_local $ha) + (if (result i32) + (i32.eq + (i32.and + (get_local $ka) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ka) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $ka + (i32.add + (get_local $c) + (i32.const 8) + ) + ) + (set_local $ma + (i32.add + (get_local $c) + (if (result i32) + (i32.eq + (i32.and + (get_local $ka) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ka) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $ka + (i32.add + (get_local $ca) + (get_local $y) + ) + ) + (set_local $ea + (i32.sub + (i32.sub + (get_local $ma) + (get_local $ca) + ) + (get_local $y) + ) + ) + (i32.store + (i32.add + (get_local $ca) + (i32.const 4) + ) + (i32.or + (get_local $y) + (i32.const 3) + ) + ) + (block $do-once44 + (if + (i32.eq + (get_local $ma) + (get_local $ja) + ) + (block + (set_local $la + (i32.add + (i32.load + (i32.const 1220) + ) + (get_local $ea) + ) + ) + (i32.store + (i32.const 1220) + (get_local $la) + ) + (i32.store + (i32.const 1232) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 4) + ) + (i32.or + (get_local $la) + (i32.const 1) + ) + ) + ) + (block + (if + (i32.eq + (get_local $ma) + (i32.load + (i32.const 1228) + ) + ) + (block + (set_local $la + (i32.add + (i32.load + (i32.const 1216) + ) + (get_local $ea) + ) + ) + (i32.store + (i32.const 1216) + (get_local $la) + ) + (i32.store + (i32.const 1228) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 4) + ) + (i32.or + (get_local $la) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (get_local $la) + ) + (get_local $la) + ) + (br $do-once44) + ) + ) + (set_local $la + (i32.load + (i32.add + (get_local $ma) + (i32.const 4) + ) + ) + ) + (if + (i32.eq + (i32.and + (get_local $la) + (i32.const 3) + ) + (i32.const 1) + ) + (block + (set_local $ga + (i32.and + (get_local $la) + (i32.const -8) + ) + ) + (set_local $fa + (i32.shr_u + (get_local $la) + (i32.const 3) + ) + ) + (block $label$break$e + (if + (i32.lt_u + (get_local $la) + (i32.const 256) + ) + (block + (set_local $da + (i32.load + (i32.add + (get_local $ma) + (i32.const 8) + ) + ) + ) + (set_local $V + (i32.load + (i32.add + (get_local $ma) + (i32.const 12) + ) + ) + ) + (set_local $$ + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $fa) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (block $do-once47 + (if + (i32.ne + (get_local $da) + (get_local $$) + ) + (block + (if + (i32.lt_u + (get_local $da) + (get_local $sa) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (i32.add + (get_local $da) + (i32.const 12) + ) + ) + (get_local $ma) + ) + (br $do-once47) + ) + (call $qa) + ) + ) + ) + (if + (i32.eq + (get_local $V) + (get_local $da) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (i32.load + (i32.const 1208) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $fa) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$e) + ) + ) + (block $do-once49 + (if + (i32.eq + (get_local $V) + (get_local $$) + ) + (set_local $xa + (i32.add + (get_local $V) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $V) + (get_local $sa) + ) + (call $qa) + ) + (set_local $e + (i32.add + (get_local $V) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $e) + ) + (get_local $ma) + ) + (block + (set_local $xa + (get_local $e) + ) + (br $do-once49) + ) + ) + (call $qa) + ) + ) + ) + (i32.store + (i32.add + (get_local $da) + (i32.const 12) + ) + (get_local $V) + ) + (i32.store + (get_local $xa) + (get_local $da) + ) + ) + (block + (set_local $$ + (i32.load + (i32.add + (get_local $ma) + (i32.const 24) + ) + ) + ) + (set_local $e + (i32.load + (i32.add + (get_local $ma) + (i32.const 12) + ) + ) + ) + (block $do-once51 + (if + (i32.eq + (get_local $e) + (get_local $ma) + ) + (block + (set_local $U + (i32.add + (get_local $ma) + (i32.const 16) + ) + ) + (set_local $aa + (i32.add + (get_local $U) + (i32.const 4) + ) + ) + (set_local $ba + (i32.load + (get_local $aa) + ) + ) + (if + (i32.eqz + (get_local $ba) + ) + (block + (set_local $W + (i32.load + (get_local $U) + ) + ) + (if + (i32.eqz + (get_local $W) + ) + (block + (set_local $ya + (i32.const 0) + ) + (br $do-once51) + ) + (block + (set_local $za + (get_local $W) + ) + (set_local $Aa + (get_local $U) + ) + ) + ) + ) + (block + (set_local $za + (get_local $ba) + ) + (set_local $Aa + (get_local $aa) + ) + ) + ) + (loop $while-in54 + (block $while-out53 + (set_local $aa + (i32.add + (get_local $za) + (i32.const 20) + ) + ) + (set_local $ba + (i32.load + (get_local $aa) + ) + ) + (if + (get_local $ba) + (block + (set_local $za + (get_local $ba) + ) + (set_local $Aa + (get_local $aa) + ) + (br $while-in54) + ) + ) + (set_local $aa + (i32.add + (get_local $za) + (i32.const 16) + ) + ) + (set_local $ba + (i32.load + (get_local $aa) + ) + ) + (if + (i32.eqz + (get_local $ba) + ) + (block + (set_local $Ba + (get_local $za) + ) + (set_local $Ca + (get_local $Aa) + ) + (br $while-out53) + ) + (block + (set_local $za + (get_local $ba) + ) + (set_local $Aa + (get_local $aa) + ) + ) + ) + (br $while-in54) + ) + ) + (if + (i32.lt_u + (get_local $Ca) + (get_local $sa) + ) + (call $qa) + (block + (i32.store + (get_local $Ca) + (i32.const 0) + ) + (set_local $ya + (get_local $Ba) + ) + (br $do-once51) + ) + ) + ) + (block + (set_local $aa + (i32.load + (i32.add + (get_local $ma) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $aa) + (get_local $sa) + ) + (call $qa) + ) + (set_local $ba + (i32.add + (get_local $aa) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $ba) + ) + (get_local $ma) + ) + (call $qa) + ) + (set_local $U + (i32.add + (get_local $e) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $U) + ) + (get_local $ma) + ) + (block + (i32.store + (get_local $ba) + (get_local $e) + ) + (i32.store + (get_local $U) + (get_local $aa) + ) + (set_local $ya + (get_local $e) + ) + (br $do-once51) + ) + (call $qa) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $$) + ) + (br $label$break$e) + ) + (set_local $e + (i32.load + (i32.add + (get_local $ma) + (i32.const 28) + ) + ) + ) + (set_local $da + (i32.add + (i32.const 1512) + (i32.shl + (get_local $e) + (i32.const 2) + ) + ) + ) + (block $do-once55 + (if + (i32.eq + (get_local $ma) + (i32.load + (get_local $da) + ) + ) + (block + (i32.store + (get_local $da) + (get_local $ya) + ) + (if + (get_local $ya) + (br $do-once55) + ) + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $e) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$e) + ) + (block + (if + (i32.lt_u + (get_local $$) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $V + (i32.add + (get_local $$) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $V) + ) + (get_local $ma) + ) + (i32.store + (get_local $V) + (get_local $ya) + ) + (i32.store + (i32.add + (get_local $$) + (i32.const 20) + ) + (get_local $ya) + ) + ) + (if + (i32.eqz + (get_local $ya) + ) + (br $label$break$e) + ) + ) + ) + ) + (set_local $e + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $ya) + (get_local $e) + ) + (call $qa) + ) + (i32.store + (i32.add + (get_local $ya) + (i32.const 24) + ) + (get_local $$) + ) + (set_local $da + (i32.add + (get_local $ma) + (i32.const 16) + ) + ) + (set_local $V + (i32.load + (get_local $da) + ) + ) + (block $do-once57 + (if + (get_local $V) + (if + (i32.lt_u + (get_local $V) + (get_local $e) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $ya) + (i32.const 16) + ) + (get_local $V) + ) + (i32.store + (i32.add + (get_local $V) + (i32.const 24) + ) + (get_local $ya) + ) + (br $do-once57) + ) + ) + ) + ) + (set_local $V + (i32.load + (i32.add + (get_local $da) + (i32.const 4) + ) + ) + ) + (if + (i32.eqz + (get_local $V) + ) + (br $label$break$e) + ) + (if + (i32.lt_u + (get_local $V) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $ya) + (i32.const 20) + ) + (get_local $V) + ) + (i32.store + (i32.add + (get_local $V) + (i32.const 24) + ) + (get_local $ya) + ) + (br $label$break$e) + ) + ) + ) + ) + ) + (set_local $Da + (i32.add + (get_local $ma) + (get_local $ga) + ) + ) + (set_local $Ea + (i32.add + (get_local $ga) + (get_local $ea) + ) + ) + ) + (block + (set_local $Da + (get_local $ma) + ) + (set_local $Ea + (get_local $ea) + ) + ) + ) + (set_local $fa + (i32.add + (get_local $Da) + (i32.const 4) + ) + ) + (i32.store + (get_local $fa) + (i32.and + (i32.load + (get_local $fa) + ) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 4) + ) + (i32.or + (get_local $Ea) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (get_local $Ea) + ) + (get_local $Ea) + ) + (set_local $fa + (i32.shr_u + (get_local $Ea) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $Ea) + (i32.const 256) + ) + (block + (set_local $la + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $fa) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $V + (i32.load + (i32.const 1208) + ) + ) + (set_local $e + (i32.shl + (i32.const 1) + (get_local $fa) + ) + ) + (block $do-once59 + (if + (i32.eqz + (i32.and + (get_local $V) + (get_local $e) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $V) + (get_local $e) + ) + ) + (set_local $Fa + (i32.add + (get_local $la) + (i32.const 8) + ) + ) + (set_local $Ga + (get_local $la) + ) + ) + (block + (set_local $fa + (i32.add + (get_local $la) + (i32.const 8) + ) + ) + (set_local $$ + (i32.load + (get_local $fa) + ) + ) + (if + (i32.ge_u + (get_local $$) + (i32.load + (i32.const 1224) + ) + ) + (block + (set_local $Fa + (get_local $fa) + ) + (set_local $Ga + (get_local $$) + ) + (br $do-once59) + ) + ) + (call $qa) + ) + ) + ) + (i32.store + (get_local $Fa) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $Ga) + (i32.const 12) + ) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 8) + ) + (get_local $Ga) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 12) + ) + (get_local $la) + ) + (br $do-once44) + ) + ) + (set_local $e + (i32.shr_u + (get_local $Ea) + (i32.const 8) + ) + ) + (block $do-once61 + (if + (i32.eqz + (get_local $e) + ) + (set_local $Ha + (i32.const 0) + ) + (block + (if + (i32.gt_u + (get_local $Ea) + (i32.const 16777215) + ) + (block + (set_local $Ha + (i32.const 31) + ) + (br $do-once61) + ) + ) + (set_local $V + (i32.and + (i32.shr_u + (i32.add + (get_local $e) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $ga + (i32.shl + (get_local $e) + (get_local $V) + ) + ) + (set_local $$ + (i32.and + (i32.shr_u + (i32.add + (get_local $ga) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $fa + (i32.shl + (get_local $ga) + (get_local $$) + ) + ) + (set_local $ga + (i32.and + (i32.shr_u + (i32.add + (get_local $fa) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $aa + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $$) + (get_local $V) + ) + (get_local $ga) + ) + ) + (i32.shr_u + (i32.shl + (get_local $fa) + (get_local $ga) + ) + (i32.const 15) + ) + ) + ) + (set_local $Ha + (i32.or + (i32.and + (i32.shr_u + (get_local $Ea) + (i32.add + (get_local $aa) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $aa) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $e + (i32.add + (i32.const 1512) + (i32.shl + (get_local $Ha) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 28) + ) + (get_local $Ha) + ) + (set_local $la + (i32.add + (get_local $ka) + (i32.const 16) + ) + ) + (i32.store + (i32.add + (get_local $la) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store + (get_local $la) + (i32.const 0) + ) + (set_local $la + (i32.load + (i32.const 1212) + ) + ) + (set_local $aa + (i32.shl + (i32.const 1) + (get_local $Ha) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $la) + (get_local $aa) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $la) + (get_local $aa) + ) + ) + (i32.store + (get_local $e) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 24) + ) + (get_local $e) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 12) + ) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 8) + ) + (get_local $ka) + ) + (br $do-once44) + ) + ) + (set_local $aa + (i32.shl + (get_local $Ea) + (if (result i32) + (i32.eq + (get_local $Ha) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $Ha) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $la + (i32.load + (get_local $e) + ) + ) + (loop $while-in64 + (block $while-out63 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $la) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $Ea) + ) + (block + (set_local $Ia + (get_local $la) + ) + (set_local $N + (i32.const 279) + ) + (br $while-out63) + ) + ) + (set_local $e + (i32.add + (i32.add + (get_local $la) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $aa) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $ga + (i32.load + (get_local $e) + ) + ) + (if + (i32.eqz + (get_local $ga) + ) + (block + (set_local $Ja + (get_local $e) + ) + (set_local $Ka + (get_local $la) + ) + (set_local $N + (i32.const 276) + ) + (br $while-out63) + ) + (block + (set_local $aa + (i32.shl + (get_local $aa) + (i32.const 1) + ) + ) + (set_local $la + (get_local $ga) + ) + ) + ) + (br $while-in64) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 276) + ) + (if + (i32.lt_u + (get_local $Ja) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $Ja) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 24) + ) + (get_local $Ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 12) + ) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 8) + ) + (get_local $ka) + ) + (br $do-once44) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 279) + ) + (block + (set_local $la + (i32.add + (get_local $Ia) + (i32.const 8) + ) + ) + (set_local $aa + (i32.load + (get_local $la) + ) + ) + (set_local $ga + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $aa) + (get_local $ga) + ) + (i32.ge_u + (get_local $Ia) + (get_local $ga) + ) + ) + (block + (i32.store + (i32.add + (get_local $aa) + (i32.const 12) + ) + (get_local $ka) + ) + (i32.store + (get_local $la) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 8) + ) + (get_local $aa) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 12) + ) + (get_local $Ia) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once44) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + ) + (set_local $p + (i32.add + (get_local $ca) + (i32.const 8) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + (set_local $wa + (i32.const 1656) + ) + ) + ) + (loop $while-in66 + (block $while-out65 + (set_local $ka + (i32.load + (get_local $wa) + ) + ) + (if + (i32.le_u + (get_local $ka) + (get_local $ja) + ) + (block + (set_local $ea + (i32.add + (get_local $ka) + (i32.load + (i32.add + (get_local $wa) + (i32.const 4) + ) + ) + ) + ) + (if + (i32.gt_u + (get_local $ea) + (get_local $ja) + ) + (block + (set_local $La + (get_local $ea) + ) + (br $while-out65) + ) + ) + ) + ) + (set_local $wa + (i32.load + (i32.add + (get_local $wa) + (i32.const 8) + ) + ) + ) + (br $while-in66) + ) + ) + (set_local $ca + (i32.add + (get_local $La) + (i32.const -47) + ) + ) + (set_local $ea + (i32.add + (get_local $ca) + (i32.const 8) + ) + ) + (set_local $ka + (i32.add + (get_local $ca) + (if (result i32) + (i32.eq + (i32.and + (get_local $ea) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ea) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $ea + (i32.add + (get_local $ja) + (i32.const 16) + ) + ) + (set_local $ca + (if (result i32) + (i32.lt_u + (get_local $ka) + (get_local $ea) + ) + (get_local $ja) + (get_local $ka) + ) + ) + (set_local $ka + (i32.add + (get_local $ca) + (i32.const 8) + ) + ) + (set_local $ma + (i32.add + (get_local $ha) + (i32.const 8) + ) + ) + (set_local $c + (if (result i32) + (i32.eq + (i32.and + (get_local $ma) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ma) + ) + (i32.const 7) + ) + ) + ) + (set_local $ma + (i32.add + (get_local $ha) + (get_local $c) + ) + ) + (set_local $aa + (i32.sub + (i32.add + (get_local $ia) + (i32.const -40) + ) + (get_local $c) + ) + ) + (i32.store + (i32.const 1232) + (get_local $ma) + ) + (i32.store + (i32.const 1220) + (get_local $aa) + ) + (i32.store + (i32.add + (get_local $ma) + (i32.const 4) + ) + (i32.or + (get_local $aa) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $ma) + (get_local $aa) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + (set_local $aa + (i32.add + (get_local $ca) + (i32.const 4) + ) + ) + (i32.store + (get_local $aa) + (i32.const 27) + ) + (i32.store + (get_local $ka) + (i32.load + (i32.const 1656) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 4) + ) + (i32.load + (i32.const 1660) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 8) + ) + (i32.load + (i32.const 1664) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 12) + ) + (i32.load + (i32.const 1668) + ) + ) + (i32.store + (i32.const 1656) + (get_local $ha) + ) + (i32.store + (i32.const 1660) + (get_local $ia) + ) + (i32.store + (i32.const 1668) + (i32.const 0) + ) + (i32.store + (i32.const 1664) + (get_local $ka) + ) + (set_local $ka + (i32.add + (get_local $ca) + (i32.const 24) + ) + ) + (loop $do-in68 + (block $do-out67 + (set_local $ka + (i32.add + (get_local $ka) + (i32.const 4) + ) + ) + (i32.store + (get_local $ka) + (i32.const 7) + ) + (br_if $do-in68 + (i32.lt_u + (i32.add + (get_local $ka) + (i32.const 4) + ) + (get_local $La) + ) + ) + ) + ) + (if + (i32.ne + (get_local $ca) + (get_local $ja) + ) + (block + (set_local $ka + (i32.sub + (get_local $ca) + (get_local $ja) + ) + ) + (i32.store + (get_local $aa) + (i32.and + (i32.load + (get_local $aa) + ) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 4) + ) + (i32.or + (get_local $ka) + (i32.const 1) + ) + ) + (i32.store + (get_local $ca) + (get_local $ka) + ) + (set_local $ma + (i32.shr_u + (get_local $ka) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $ka) + (i32.const 256) + ) + (block + (set_local $c + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $ma) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $la + (i32.load + (i32.const 1208) + ) + ) + (set_local $ga + (i32.shl + (i32.const 1) + (get_local $ma) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $la) + (get_local $ga) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $la) + (get_local $ga) + ) + ) + (set_local $Ma + (i32.add + (get_local $c) + (i32.const 8) + ) + ) + (set_local $Na + (get_local $c) + ) + ) + (block + (set_local $ga + (i32.add + (get_local $c) + (i32.const 8) + ) + ) + (set_local $la + (i32.load + (get_local $ga) + ) + ) + (if + (i32.lt_u + (get_local $la) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $Ma + (get_local $ga) + ) + (set_local $Na + (get_local $la) + ) + ) + ) + ) + ) + (i32.store + (get_local $Ma) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $Na) + (i32.const 12) + ) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 8) + ) + (get_local $Na) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 12) + ) + (get_local $c) + ) + (br $do-once38) + ) + ) + (set_local $c + (i32.shr_u + (get_local $ka) + (i32.const 8) + ) + ) + (if + (i32.eqz + (get_local $c) + ) + (set_local $Oa + (i32.const 0) + ) + (if + (i32.gt_u + (get_local $ka) + (i32.const 16777215) + ) + (set_local $Oa + (i32.const 31) + ) + (block + (set_local $la + (i32.and + (i32.shr_u + (i32.add + (get_local $c) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $ga + (i32.shl + (get_local $c) + (get_local $la) + ) + ) + (set_local $c + (i32.and + (i32.shr_u + (i32.add + (get_local $ga) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $ma + (i32.shl + (get_local $ga) + (get_local $c) + ) + ) + (set_local $ga + (i32.and + (i32.shr_u + (i32.add + (get_local $ma) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $e + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $c) + (get_local $la) + ) + (get_local $ga) + ) + ) + (i32.shr_u + (i32.shl + (get_local $ma) + (get_local $ga) + ) + (i32.const 15) + ) + ) + ) + (set_local $Oa + (i32.or + (i32.and + (i32.shr_u + (get_local $ka) + (i32.add + (get_local $e) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $e) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $e + (i32.add + (i32.const 1512) + (i32.shl + (get_local $Oa) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 28) + ) + (get_local $Oa) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 20) + ) + (i32.const 0) + ) + (i32.store + (get_local $ea) + (i32.const 0) + ) + (set_local $ga + (i32.load + (i32.const 1212) + ) + ) + (set_local $ma + (i32.shl + (i32.const 1) + (get_local $Oa) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $ga) + (get_local $ma) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $ga) + (get_local $ma) + ) + ) + (i32.store + (get_local $e) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 24) + ) + (get_local $e) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 12) + ) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 8) + ) + (get_local $ja) + ) + (br $do-once38) + ) + ) + (set_local $ma + (i32.shl + (get_local $ka) + (if (result i32) + (i32.eq + (get_local $Oa) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $Oa) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $ga + (i32.load + (get_local $e) + ) + ) + (loop $while-in70 + (block $while-out69 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $ga) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $ka) + ) + (block + (set_local $Pa + (get_local $ga) + ) + (set_local $N + (i32.const 305) + ) + (br $while-out69) + ) + ) + (set_local $e + (i32.add + (i32.add + (get_local $ga) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $ma) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $la + (i32.load + (get_local $e) + ) + ) + (if + (i32.eqz + (get_local $la) + ) + (block + (set_local $Ra + (get_local $e) + ) + (set_local $Sa + (get_local $ga) + ) + (set_local $N + (i32.const 302) + ) + (br $while-out69) + ) + (block + (set_local $ma + (i32.shl + (get_local $ma) + (i32.const 1) + ) + ) + (set_local $ga + (get_local $la) + ) + ) + ) + (br $while-in70) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 302) + ) + (if + (i32.lt_u + (get_local $Ra) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $Ra) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 24) + ) + (get_local $Sa) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 12) + ) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 8) + ) + (get_local $ja) + ) + (br $do-once38) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 305) + ) + (block + (set_local $ga + (i32.add + (get_local $Pa) + (i32.const 8) + ) + ) + (set_local $ma + (i32.load + (get_local $ga) + ) + ) + (set_local $ka + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $ma) + (get_local $ka) + ) + (i32.ge_u + (get_local $Pa) + (get_local $ka) + ) + ) + (block + (i32.store + (i32.add + (get_local $ma) + (i32.const 12) + ) + (get_local $ja) + ) + (i32.store + (get_local $ga) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 8) + ) + (get_local $ma) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 12) + ) + (get_local $Pa) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once38) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $ja + (i32.load + (i32.const 1220) + ) + ) + (if + (i32.gt_u + (get_local $ja) + (get_local $y) + ) + (block + (set_local $Pa + (i32.sub + (get_local $ja) + (get_local $y) + ) + ) + (i32.store + (i32.const 1220) + (get_local $Pa) + ) + (set_local $ja + (i32.load + (i32.const 1232) + ) + ) + (set_local $N + (i32.add + (get_local $ja) + (get_local $y) + ) + ) + (i32.store + (i32.const 1232) + (get_local $N) + ) + (i32.store + (i32.add + (get_local $N) + (i32.const 4) + ) + (i32.or + (get_local $Pa) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 4) + ) + (i32.or + (get_local $y) + (i32.const 3) + ) + ) + (set_local $p + (i32.add + (get_local $ja) + (i32.const 8) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + ) + ) + (set_local $ja + (call $Qa) + ) + (i32.store + (get_local $ja) + (i32.const 12) + ) + (set_local $p + (i32.const 0) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + (func $fb (; 13 ;) (param $a i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $i i32) + (local $j i32) + (local $l i32) + (local $m i32) + (local $n i32) + (local $o i32) + (local $p i32) + (local $q i32) + (local $r i32) + (local $s i32) + (local $t i32) + (local $u i32) + (local $v i32) + (local $w i32) + (local $x i32) + (local $y i32) + (local $z i32) + (local $A i32) + (local $B i32) + (local $C i32) + (local $D i32) + (local $E i32) + (local $F i32) + (local $G i32) + (local $H i32) + (local $I i32) + (local $J i32) + (local $K i32) + (local $L i32) + (if + (i32.eqz + (get_local $a) + ) + (return) + ) + (set_local $b + (i32.add + (get_local $a) + (i32.const -8) + ) + ) + (set_local $c + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $b) + (get_local $c) + ) + (call $qa) + ) + (set_local $d + (i32.load + (i32.add + (get_local $a) + (i32.const -4) + ) + ) + ) + (set_local $a + (i32.and + (get_local $d) + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $a) + (i32.const 1) + ) + (call $qa) + ) + (set_local $e + (i32.and + (get_local $d) + (i32.const -8) + ) + ) + (set_local $f + (i32.add + (get_local $b) + (get_local $e) + ) + ) + (block $do-once + (if + (i32.eqz + (i32.and + (get_local $d) + (i32.const 1) + ) + ) + (block + (set_local $g + (i32.load + (get_local $b) + ) + ) + (if + (i32.eqz + (get_local $a) + ) + (return) + ) + (set_local $h + (i32.add + (get_local $b) + (i32.sub + (i32.const 0) + (get_local $g) + ) + ) + ) + (set_local $i + (i32.add + (get_local $g) + (get_local $e) + ) + ) + (if + (i32.lt_u + (get_local $h) + (get_local $c) + ) + (call $qa) + ) + (if + (i32.eq + (get_local $h) + (i32.load + (i32.const 1228) + ) + ) + (block + (set_local $j + (i32.add + (get_local $f) + (i32.const 4) + ) + ) + (set_local $l + (i32.load + (get_local $j) + ) + ) + (if + (i32.ne + (i32.and + (get_local $l) + (i32.const 3) + ) + (i32.const 3) + ) + (block + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 1216) + (get_local $i) + ) + (i32.store + (get_local $j) + (i32.and + (get_local $l) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $h) + (i32.const 4) + ) + (i32.or + (get_local $i) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $h) + (get_local $i) + ) + (get_local $i) + ) + (return) + ) + ) + (set_local $l + (i32.shr_u + (get_local $g) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $g) + (i32.const 256) + ) + (block + (set_local $g + (i32.load + (i32.add + (get_local $h) + (i32.const 8) + ) + ) + ) + (set_local $j + (i32.load + (i32.add + (get_local $h) + (i32.const 12) + ) + ) + ) + (set_local $o + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $l) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.ne + (get_local $g) + (get_local $o) + ) + (block + (if + (i32.lt_u + (get_local $g) + (get_local $c) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (i32.add + (get_local $g) + (i32.const 12) + ) + ) + (get_local $h) + ) + (call $qa) + ) + ) + ) + (if + (i32.eq + (get_local $j) + (get_local $g) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (i32.load + (i32.const 1208) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $l) + ) + (i32.const -1) + ) + ) + ) + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (get_local $j) + (get_local $o) + ) + (set_local $p + (i32.add + (get_local $j) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $j) + (get_local $c) + ) + (call $qa) + ) + (set_local $o + (i32.add + (get_local $j) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $o) + ) + (get_local $h) + ) + (set_local $p + (get_local $o) + ) + (call $qa) + ) + ) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 12) + ) + (get_local $j) + ) + (i32.store + (get_local $p) + (get_local $g) + ) + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + (br $do-once) + ) + ) + (set_local $g + (i32.load + (i32.add + (get_local $h) + (i32.const 24) + ) + ) + ) + (set_local $j + (i32.load + (i32.add + (get_local $h) + (i32.const 12) + ) + ) + ) + (block $do-once0 + (if + (i32.eq + (get_local $j) + (get_local $h) + ) + (block + (set_local $o + (i32.add + (get_local $h) + (i32.const 16) + ) + ) + (set_local $l + (i32.add + (get_local $o) + (i32.const 4) + ) + ) + (set_local $q + (i32.load + (get_local $l) + ) + ) + (if + (i32.eqz + (get_local $q) + ) + (block + (set_local $r + (i32.load + (get_local $o) + ) + ) + (if + (i32.eqz + (get_local $r) + ) + (block + (set_local $s + (i32.const 0) + ) + (br $do-once0) + ) + (block + (set_local $t + (get_local $r) + ) + (set_local $u + (get_local $o) + ) + ) + ) + ) + (block + (set_local $t + (get_local $q) + ) + (set_local $u + (get_local $l) + ) + ) + ) + (loop $while-in + (block $while-out + (set_local $l + (i32.add + (get_local $t) + (i32.const 20) + ) + ) + (set_local $q + (i32.load + (get_local $l) + ) + ) + (if + (get_local $q) + (block + (set_local $t + (get_local $q) + ) + (set_local $u + (get_local $l) + ) + (br $while-in) + ) + ) + (set_local $l + (i32.add + (get_local $t) + (i32.const 16) + ) + ) + (set_local $q + (i32.load + (get_local $l) + ) + ) + (if + (i32.eqz + (get_local $q) + ) + (block + (set_local $v + (get_local $t) + ) + (set_local $w + (get_local $u) + ) + (br $while-out) + ) + (block + (set_local $t + (get_local $q) + ) + (set_local $u + (get_local $l) + ) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (get_local $w) + (get_local $c) + ) + (call $qa) + (block + (i32.store + (get_local $w) + (i32.const 0) + ) + (set_local $s + (get_local $v) + ) + (br $do-once0) + ) + ) + ) + (block + (set_local $l + (i32.load + (i32.add + (get_local $h) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $l) + (get_local $c) + ) + (call $qa) + ) + (set_local $q + (i32.add + (get_local $l) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $q) + ) + (get_local $h) + ) + (call $qa) + ) + (set_local $o + (i32.add + (get_local $j) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $o) + ) + (get_local $h) + ) + (block + (i32.store + (get_local $q) + (get_local $j) + ) + (i32.store + (get_local $o) + (get_local $l) + ) + (set_local $s + (get_local $j) + ) + (br $do-once0) + ) + (call $qa) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $g) + ) + (block + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + ) + (block + (set_local $j + (i32.load + (i32.add + (get_local $h) + (i32.const 28) + ) + ) + ) + (set_local $l + (i32.add + (i32.const 1512) + (i32.shl + (get_local $j) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $h) + (i32.load + (get_local $l) + ) + ) + (block + (i32.store + (get_local $l) + (get_local $s) + ) + (if + (i32.eqz + (get_local $s) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $j) + ) + (i32.const -1) + ) + ) + ) + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $g) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $j + (i32.add + (get_local $g) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $j) + ) + (get_local $h) + ) + (i32.store + (get_local $j) + (get_local $s) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 20) + ) + (get_local $s) + ) + ) + (if + (i32.eqz + (get_local $s) + ) + (block + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + (br $do-once) + ) + ) + ) + ) + (set_local $j + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $s) + (get_local $j) + ) + (call $qa) + ) + (i32.store + (i32.add + (get_local $s) + (i32.const 24) + ) + (get_local $g) + ) + (set_local $l + (i32.add + (get_local $h) + (i32.const 16) + ) + ) + (set_local $o + (i32.load + (get_local $l) + ) + ) + (block $do-once2 + (if + (get_local $o) + (if + (i32.lt_u + (get_local $o) + (get_local $j) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $s) + (i32.const 16) + ) + (get_local $o) + ) + (i32.store + (i32.add + (get_local $o) + (i32.const 24) + ) + (get_local $s) + ) + (br $do-once2) + ) + ) + ) + ) + (set_local $o + (i32.load + (i32.add + (get_local $l) + (i32.const 4) + ) + ) + ) + (if + (i32.eqz + (get_local $o) + ) + (block + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + ) + (if + (i32.lt_u + (get_local $o) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $s) + (i32.const 20) + ) + (get_local $o) + ) + (i32.store + (i32.add + (get_local $o) + (i32.const 24) + ) + (get_local $s) + ) + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + (br $do-once) + ) + ) + ) + ) + ) + ) + (block + (set_local $m + (get_local $b) + ) + (set_local $n + (get_local $e) + ) + ) + ) + ) + (if + (i32.ge_u + (get_local $m) + (get_local $f) + ) + (call $qa) + ) + (set_local $e + (i32.add + (get_local $f) + (i32.const 4) + ) + ) + (set_local $b + (i32.load + (get_local $e) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $b) + (i32.const 1) + ) + ) + (call $qa) + ) + (if + (i32.eqz + (i32.and + (get_local $b) + (i32.const 2) + ) + ) + (block + (if + (i32.eq + (get_local $f) + (i32.load + (i32.const 1232) + ) + ) + (block + (set_local $s + (i32.add + (i32.load + (i32.const 1220) + ) + (get_local $n) + ) + ) + (i32.store + (i32.const 1220) + (get_local $s) + ) + (i32.store + (i32.const 1232) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 4) + ) + (i32.or + (get_local $s) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $m) + (i32.load + (i32.const 1228) + ) + ) + (return) + ) + (i32.store + (i32.const 1228) + (i32.const 0) + ) + (i32.store + (i32.const 1216) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $f) + (i32.load + (i32.const 1228) + ) + ) + (block + (set_local $s + (i32.add + (i32.load + (i32.const 1216) + ) + (get_local $n) + ) + ) + (i32.store + (i32.const 1216) + (get_local $s) + ) + (i32.store + (i32.const 1228) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 4) + ) + (i32.or + (get_local $s) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $m) + (get_local $s) + ) + (get_local $s) + ) + (return) + ) + ) + (set_local $s + (i32.add + (i32.and + (get_local $b) + (i32.const -8) + ) + (get_local $n) + ) + ) + (set_local $c + (i32.shr_u + (get_local $b) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.lt_u + (get_local $b) + (i32.const 256) + ) + (block + (set_local $v + (i32.load + (i32.add + (get_local $f) + (i32.const 8) + ) + ) + ) + (set_local $w + (i32.load + (i32.add + (get_local $f) + (i32.const 12) + ) + ) + ) + (set_local $u + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $c) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.ne + (get_local $v) + (get_local $u) + ) + (block + (if + (i32.lt_u + (get_local $v) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (i32.add + (get_local $v) + (i32.const 12) + ) + ) + (get_local $f) + ) + (call $qa) + ) + ) + ) + (if + (i32.eq + (get_local $w) + (get_local $v) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (i32.load + (i32.const 1208) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $c) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.eq + (get_local $w) + (get_local $u) + ) + (set_local $x + (i32.add + (get_local $w) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $w) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $u + (i32.add + (get_local $w) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $u) + ) + (get_local $f) + ) + (set_local $x + (get_local $u) + ) + (call $qa) + ) + ) + ) + (i32.store + (i32.add + (get_local $v) + (i32.const 12) + ) + (get_local $w) + ) + (i32.store + (get_local $x) + (get_local $v) + ) + ) + (block + (set_local $v + (i32.load + (i32.add + (get_local $f) + (i32.const 24) + ) + ) + ) + (set_local $w + (i32.load + (i32.add + (get_local $f) + (i32.const 12) + ) + ) + ) + (block $do-once6 + (if + (i32.eq + (get_local $w) + (get_local $f) + ) + (block + (set_local $u + (i32.add + (get_local $f) + (i32.const 16) + ) + ) + (set_local $t + (i32.add + (get_local $u) + (i32.const 4) + ) + ) + (set_local $p + (i32.load + (get_local $t) + ) + ) + (if + (i32.eqz + (get_local $p) + ) + (block + (set_local $a + (i32.load + (get_local $u) + ) + ) + (if + (i32.eqz + (get_local $a) + ) + (block + (set_local $y + (i32.const 0) + ) + (br $do-once6) + ) + (block + (set_local $z + (get_local $a) + ) + (set_local $A + (get_local $u) + ) + ) + ) + ) + (block + (set_local $z + (get_local $p) + ) + (set_local $A + (get_local $t) + ) + ) + ) + (loop $while-in9 + (block $while-out8 + (set_local $t + (i32.add + (get_local $z) + (i32.const 20) + ) + ) + (set_local $p + (i32.load + (get_local $t) + ) + ) + (if + (get_local $p) + (block + (set_local $z + (get_local $p) + ) + (set_local $A + (get_local $t) + ) + (br $while-in9) + ) + ) + (set_local $t + (i32.add + (get_local $z) + (i32.const 16) + ) + ) + (set_local $p + (i32.load + (get_local $t) + ) + ) + (if + (i32.eqz + (get_local $p) + ) + (block + (set_local $B + (get_local $z) + ) + (set_local $C + (get_local $A) + ) + (br $while-out8) + ) + (block + (set_local $z + (get_local $p) + ) + (set_local $A + (get_local $t) + ) + ) + ) + (br $while-in9) + ) + ) + (if + (i32.lt_u + (get_local $C) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $C) + (i32.const 0) + ) + (set_local $y + (get_local $B) + ) + (br $do-once6) + ) + ) + ) + (block + (set_local $t + (i32.load + (i32.add + (get_local $f) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $t) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $p + (i32.add + (get_local $t) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $p) + ) + (get_local $f) + ) + (call $qa) + ) + (set_local $u + (i32.add + (get_local $w) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $u) + ) + (get_local $f) + ) + (block + (i32.store + (get_local $p) + (get_local $w) + ) + (i32.store + (get_local $u) + (get_local $t) + ) + (set_local $y + (get_local $w) + ) + (br $do-once6) + ) + (call $qa) + ) + ) + ) + ) + (if + (get_local $v) + (block + (set_local $w + (i32.load + (i32.add + (get_local $f) + (i32.const 28) + ) + ) + ) + (set_local $i + (i32.add + (i32.const 1512) + (i32.shl + (get_local $w) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $f) + (i32.load + (get_local $i) + ) + ) + (block + (i32.store + (get_local $i) + (get_local $y) + ) + (if + (i32.eqz + (get_local $y) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $w) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $v) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $w + (i32.add + (get_local $v) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $w) + ) + (get_local $f) + ) + (i32.store + (get_local $w) + (get_local $y) + ) + (i32.store + (i32.add + (get_local $v) + (i32.const 20) + ) + (get_local $y) + ) + ) + (if + (i32.eqz + (get_local $y) + ) + (br $do-once4) + ) + ) + ) + (set_local $w + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $y) + (get_local $w) + ) + (call $qa) + ) + (i32.store + (i32.add + (get_local $y) + (i32.const 24) + ) + (get_local $v) + ) + (set_local $i + (i32.add + (get_local $f) + (i32.const 16) + ) + ) + (set_local $h + (i32.load + (get_local $i) + ) + ) + (block $do-once10 + (if + (get_local $h) + (if + (i32.lt_u + (get_local $h) + (get_local $w) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $y) + (i32.const 16) + ) + (get_local $h) + ) + (i32.store + (i32.add + (get_local $h) + (i32.const 24) + ) + (get_local $y) + ) + (br $do-once10) + ) + ) + ) + ) + (set_local $h + (i32.load + (i32.add + (get_local $i) + (i32.const 4) + ) + ) + ) + (if + (get_local $h) + (if + (i32.lt_u + (get_local $h) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $y) + (i32.const 20) + ) + (get_local $h) + ) + (i32.store + (i32.add + (get_local $h) + (i32.const 24) + ) + (get_local $y) + ) + (br $do-once4) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 4) + ) + (i32.or + (get_local $s) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $m) + (get_local $s) + ) + (get_local $s) + ) + (if + (i32.eq + (get_local $m) + (i32.load + (i32.const 1228) + ) + ) + (block + (i32.store + (i32.const 1216) + (get_local $s) + ) + (return) + ) + (set_local $D + (get_local $s) + ) + ) + ) + (block + (i32.store + (get_local $e) + (i32.and + (get_local $b) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 4) + ) + (i32.or + (get_local $n) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $m) + (get_local $n) + ) + (get_local $n) + ) + (set_local $D + (get_local $n) + ) + ) + ) + (set_local $n + (i32.shr_u + (get_local $D) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $D) + (i32.const 256) + ) + (block + (set_local $b + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $n) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $e + (i32.load + (i32.const 1208) + ) + ) + (set_local $s + (i32.shl + (i32.const 1) + (get_local $n) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $e) + (get_local $s) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $e) + (get_local $s) + ) + ) + (set_local $E + (i32.add + (get_local $b) + (i32.const 8) + ) + ) + (set_local $F + (get_local $b) + ) + ) + (block + (set_local $s + (i32.add + (get_local $b) + (i32.const 8) + ) + ) + (set_local $e + (i32.load + (get_local $s) + ) + ) + (if + (i32.lt_u + (get_local $e) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $E + (get_local $s) + ) + (set_local $F + (get_local $e) + ) + ) + ) + ) + ) + (i32.store + (get_local $E) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $F) + (i32.const 12) + ) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 8) + ) + (get_local $F) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 12) + ) + (get_local $b) + ) + (return) + ) + ) + (set_local $b + (i32.shr_u + (get_local $D) + (i32.const 8) + ) + ) + (if + (i32.eqz + (get_local $b) + ) + (set_local $G + (i32.const 0) + ) + (if + (i32.gt_u + (get_local $D) + (i32.const 16777215) + ) + (set_local $G + (i32.const 31) + ) + (block + (set_local $F + (i32.and + (i32.shr_u + (i32.add + (get_local $b) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $E + (i32.shl + (get_local $b) + (get_local $F) + ) + ) + (set_local $b + (i32.and + (i32.shr_u + (i32.add + (get_local $E) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $e + (i32.shl + (get_local $E) + (get_local $b) + ) + ) + (set_local $E + (i32.and + (i32.shr_u + (i32.add + (get_local $e) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $s + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $b) + (get_local $F) + ) + (get_local $E) + ) + ) + (i32.shr_u + (i32.shl + (get_local $e) + (get_local $E) + ) + (i32.const 15) + ) + ) + ) + (set_local $G + (i32.or + (i32.and + (i32.shr_u + (get_local $D) + (i32.add + (get_local $s) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $s) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $s + (i32.add + (i32.const 1512) + (i32.shl + (get_local $G) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 28) + ) + (get_local $G) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 20) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 16) + ) + (i32.const 0) + ) + (set_local $E + (i32.load + (i32.const 1212) + ) + ) + (set_local $e + (i32.shl + (i32.const 1) + (get_local $G) + ) + ) + (block $do-once12 + (if + (i32.eqz + (i32.and + (get_local $E) + (get_local $e) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $E) + (get_local $e) + ) + ) + (i32.store + (get_local $s) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 24) + ) + (get_local $s) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 12) + ) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 8) + ) + (get_local $m) + ) + ) + (block + (set_local $F + (i32.shl + (get_local $D) + (if (result i32) + (i32.eq + (get_local $G) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $G) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $b + (i32.load + (get_local $s) + ) + ) + (loop $while-in15 + (block $while-out14 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $b) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $D) + ) + (block + (set_local $H + (get_local $b) + ) + (set_local $I + (i32.const 130) + ) + (br $while-out14) + ) + ) + (set_local $n + (i32.add + (i32.add + (get_local $b) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $F) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $y + (i32.load + (get_local $n) + ) + ) + (if + (i32.eqz + (get_local $y) + ) + (block + (set_local $J + (get_local $n) + ) + (set_local $K + (get_local $b) + ) + (set_local $I + (i32.const 127) + ) + (br $while-out14) + ) + (block + (set_local $F + (i32.shl + (get_local $F) + (i32.const 1) + ) + ) + (set_local $b + (get_local $y) + ) + ) + ) + (br $while-in15) + ) + ) + (if + (i32.eq + (get_local $I) + (i32.const 127) + ) + (if + (i32.lt_u + (get_local $J) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $J) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 24) + ) + (get_local $K) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 12) + ) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 8) + ) + (get_local $m) + ) + (br $do-once12) + ) + ) + (if + (i32.eq + (get_local $I) + (i32.const 130) + ) + (block + (set_local $b + (i32.add + (get_local $H) + (i32.const 8) + ) + ) + (set_local $F + (i32.load + (get_local $b) + ) + ) + (set_local $i + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $F) + (get_local $i) + ) + (i32.ge_u + (get_local $H) + (get_local $i) + ) + ) + (block + (i32.store + (i32.add + (get_local $F) + (i32.const 12) + ) + (get_local $m) + ) + (i32.store + (get_local $b) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 8) + ) + (get_local $F) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 12) + ) + (get_local $H) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once12) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + ) + (set_local $m + (i32.add + (i32.load + (i32.const 1240) + ) + (i32.const -1) + ) + ) + (i32.store + (i32.const 1240) + (get_local $m) + ) + (if + (i32.eqz + (get_local $m) + ) + (set_local $L + (i32.const 1664) + ) + (return) + ) + (loop $while-in17 + (block $while-out16 + (set_local $m + (i32.load + (get_local $L) + ) + ) + (if + (i32.eqz + (get_local $m) + ) + (br $while-out16) + (set_local $L + (i32.add + (get_local $m) + (i32.const 8) + ) + ) + ) + (br $while-in17) + ) + ) + (i32.store + (i32.const 1240) + (i32.const -1) + ) + (return) + ) + (func $Ra (; 14 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $i i32) + (local $j i32) + (local $l i32) + (local $m i32) + (local $n i32) + (local $o i32) + (local $p i32) + (local $q i32) + (local $s i32) + (local $t i32) + (local $u i32) + (local $v i32) + (local $w i32) + (local $x i32) + (local $y i32) + (local $z i32) + (set_local $d + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 48) + ) + ) + (set_local $e + (i32.add + (get_local $d) + (i32.const 16) + ) + ) + (set_local $f + (get_local $d) + ) + (set_local $g + (i32.add + (get_local $d) + (i32.const 32) + ) + ) + (set_local $h + (i32.add + (get_local $a) + (i32.const 28) + ) + ) + (set_local $i + (i32.load + (get_local $h) + ) + ) + (i32.store + (get_local $g) + (get_local $i) + ) + (set_local $j + (i32.add + (get_local $a) + (i32.const 20) + ) + ) + (set_local $l + (i32.sub + (i32.load + (get_local $j) + ) + (get_local $i) + ) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 4) + ) + (get_local $l) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 8) + ) + (get_local $b) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 12) + ) + (get_local $c) + ) + (set_local $b + (i32.add + (get_local $a) + (i32.const 60) + ) + ) + (set_local $i + (i32.add + (get_local $a) + (i32.const 44) + ) + ) + (set_local $m + (get_local $g) + ) + (set_local $g + (i32.const 2) + ) + (set_local $n + (i32.add + (get_local $l) + (get_local $c) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.load + (i32.const 1160) + ) + ) + (block + (i32.store + (get_local $e) + (i32.load + (get_local $b) + ) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 4) + ) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 8) + ) + (get_local $g) + ) + (set_local $o + (call $Pa + (call $ya + (i32.const 146) + (get_local $e) + ) + ) + ) + ) + (block + (call $ra + (i32.const 1) + (get_local $a) + ) + (i32.store + (get_local $f) + (i32.load + (get_local $b) + ) + ) + (i32.store + (i32.add + (get_local $f) + (i32.const 4) + ) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $f) + (i32.const 8) + ) + (get_local $g) + ) + (set_local $l + (call $Pa + (call $ya + (i32.const 146) + (get_local $f) + ) + ) + ) + (call $oa + (i32.const 0) + ) + (set_local $o + (get_local $l) + ) + ) + ) + (if + (i32.eq + (get_local $n) + (get_local $o) + ) + (block + (set_local $p + (i32.const 6) + ) + (br $while-out) + ) + ) + (if + (i32.lt_s + (get_local $o) + (i32.const 0) + ) + (block + (set_local $q + (get_local $m) + ) + (set_local $s + (get_local $g) + ) + (set_local $p + (i32.const 8) + ) + (br $while-out) + ) + ) + (set_local $l + (i32.sub + (get_local $n) + (get_local $o) + ) + ) + (set_local $t + (i32.load + (i32.add + (get_local $m) + (i32.const 4) + ) + ) + ) + (if + (i32.gt_u + (get_local $o) + (get_local $t) + ) + (block + (set_local $u + (i32.load + (get_local $i) + ) + ) + (i32.store + (get_local $h) + (get_local $u) + ) + (i32.store + (get_local $j) + (get_local $u) + ) + (set_local $v + (i32.load + (i32.add + (get_local $m) + (i32.const 12) + ) + ) + ) + (set_local $w + (i32.sub + (get_local $o) + (get_local $t) + ) + ) + (set_local $x + (i32.add + (get_local $m) + (i32.const 8) + ) + ) + (set_local $y + (i32.add + (get_local $g) + (i32.const -1) + ) + ) + ) + (if + (i32.eq + (get_local $g) + (i32.const 2) + ) + (block + (i32.store + (get_local $h) + (i32.add + (i32.load + (get_local $h) + ) + (get_local $o) + ) + ) + (set_local $v + (get_local $t) + ) + (set_local $w + (get_local $o) + ) + (set_local $x + (get_local $m) + ) + (set_local $y + (i32.const 2) + ) + ) + (block + (set_local $v + (get_local $t) + ) + (set_local $w + (get_local $o) + ) + (set_local $x + (get_local $m) + ) + (set_local $y + (get_local $g) + ) + ) + ) + ) + (i32.store + (get_local $x) + (i32.add + (i32.load + (get_local $x) + ) + (get_local $w) + ) + ) + (i32.store + (i32.add + (get_local $x) + (i32.const 4) + ) + (i32.sub + (get_local $v) + (get_local $w) + ) + ) + (set_local $m + (get_local $x) + ) + (set_local $g + (get_local $y) + ) + (set_local $n + (get_local $l) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $p) + (i32.const 6) + ) + (block + (set_local $n + (i32.load + (get_local $i) + ) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 16) + ) + (i32.add + (get_local $n) + (i32.load + (i32.add + (get_local $a) + (i32.const 48) + ) + ) + ) + ) + (set_local $i + (get_local $n) + ) + (i32.store + (get_local $h) + (get_local $i) + ) + (i32.store + (get_local $j) + (get_local $i) + ) + (set_local $z + (get_local $c) + ) + ) + (if + (i32.eq + (get_local $p) + (i32.const 8) + ) + (block + (i32.store + (i32.add + (get_local $a) + (i32.const 16) + ) + (i32.const 0) + ) + (i32.store + (get_local $h) + (i32.const 0) + ) + (i32.store + (get_local $j) + (i32.const 0) + ) + (i32.store + (get_local $a) + (i32.or + (i32.load + (get_local $a) + ) + (i32.const 32) + ) + ) + (if + (i32.eq + (get_local $s) + (i32.const 2) + ) + (set_local $z + (i32.const 0) + ) + (set_local $z + (i32.sub + (get_local $c) + (i32.load + (i32.add + (get_local $q) + (i32.const 4) + ) + ) + ) + ) + ) + ) + ) + ) + (set_global $r + (get_local $d) + ) + (return + (get_local $z) + ) + ) + (func $Wa (; 15 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $j i32) + (local $l i32) + (local $m i32) + (local $n i32) + (local $o i32) + (local $p i32) + (local $q i32) + (set_local $d + (i32.add + (get_local $c) + (i32.const 16) + ) + ) + (set_local $e + (i32.load + (get_local $d) + ) + ) + (if + (i32.eqz + (get_local $e) + ) + (if + (i32.eqz + (call $Xa + (get_local $c) + ) + ) + (block + (set_local $f + (i32.load + (get_local $d) + ) + ) + (set_local $g + (i32.const 5) + ) + ) + (set_local $h + (i32.const 0) + ) + ) + (block + (set_local $f + (get_local $e) + ) + (set_local $g + (i32.const 5) + ) + ) + ) + (block $label$break$a + (if + (i32.eq + (get_local $g) + (i32.const 5) + ) + (block + (set_local $e + (i32.add + (get_local $c) + (i32.const 20) + ) + ) + (set_local $d + (i32.load + (get_local $e) + ) + ) + (set_local $j + (get_local $d) + ) + (if + (i32.lt_u + (i32.sub + (get_local $f) + (get_local $d) + ) + (get_local $b) + ) + (block + (set_local $h + (call_indirect (type $FUNCSIG$iiii) + (get_local $c) + (get_local $a) + (get_local $b) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $c) + (i32.const 36) + ) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (br $label$break$a) + ) + ) + (block $label$break$b + (if + (i32.gt_s + (i32.load8_s + (i32.add + (get_local $c) + (i32.const 75) + ) + ) + (i32.const -1) + ) + (block + (set_local $d + (get_local $b) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (get_local $d) + ) + (block + (set_local $l + (get_local $b) + ) + (set_local $m + (get_local $a) + ) + (set_local $n + (get_local $j) + ) + (set_local $o + (i32.const 0) + ) + (br $label$break$b) + ) + ) + (set_local $p + (i32.add + (get_local $d) + (i32.const -1) + ) + ) + (if + (i32.eq + (i32.load8_s + (i32.add + (get_local $a) + (get_local $p) + ) + ) + (i32.const 10) + ) + (block + (set_local $q + (get_local $d) + ) + (br $while-out) + ) + (set_local $d + (get_local $p) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (call_indirect (type $FUNCSIG$iiii) + (get_local $c) + (get_local $a) + (get_local $q) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $c) + (i32.const 36) + ) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + (get_local $q) + ) + (block + (set_local $h + (get_local $q) + ) + (br $label$break$a) + ) + ) + (set_local $l + (i32.sub + (get_local $b) + (get_local $q) + ) + ) + (set_local $m + (i32.add + (get_local $a) + (get_local $q) + ) + ) + (set_local $n + (i32.load + (get_local $e) + ) + ) + (set_local $o + (get_local $q) + ) + ) + (block + (set_local $l + (get_local $b) + ) + (set_local $m + (get_local $a) + ) + (set_local $n + (get_local $j) + ) + (set_local $o + (i32.const 0) + ) + ) + ) + ) + (drop + (call $jb + (get_local $n) + (get_local $m) + (get_local $l) + ) + ) + (i32.store + (get_local $e) + (i32.add + (i32.load + (get_local $e) + ) + (get_local $l) + ) + ) + (set_local $h + (i32.add + (get_local $o) + (get_local $l) + ) + ) + ) + ) + ) + (return + (get_local $h) + ) + ) + (func $Za (; 16 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $j i32) + (local $l i32) + (local $m i32) + (set_local $b + (get_local $a) + ) + (block $label$break$a + (if + (i32.eqz + (i32.and + (get_local $b) + (i32.const 3) + ) + ) + (block + (set_local $c + (get_local $a) + ) + (set_local $d + (i32.const 4) + ) + ) + (block + (set_local $e + (get_local $a) + ) + (set_local $f + (get_local $b) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.load8_s + (get_local $e) + ) + ) + (block + (set_local $g + (get_local $f) + ) + (br $label$break$a) + ) + ) + (set_local $h + (i32.add + (get_local $e) + (i32.const 1) + ) + ) + (set_local $f + (get_local $h) + ) + (if + (i32.eqz + (i32.and + (get_local $f) + (i32.const 3) + ) + ) + (block + (set_local $c + (get_local $h) + ) + (set_local $d + (i32.const 4) + ) + (br $while-out) + ) + (set_local $e + (get_local $h) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $d) + (i32.const 4) + ) + (block + (set_local $d + (get_local $c) + ) + (loop $while-in1 + (block $while-out0 + (set_local $c + (i32.load + (get_local $d) + ) + ) + (if + (i32.eqz + (i32.and + (i32.xor + (i32.and + (get_local $c) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $c) + (i32.const -16843009) + ) + ) + ) + (set_local $d + (i32.add + (get_local $d) + (i32.const 4) + ) + ) + (block + (set_local $j + (get_local $c) + ) + (set_local $l + (get_local $d) + ) + (br $while-out0) + ) + ) + (br $while-in1) + ) + ) + (if + (i32.eqz + (i32.shr_s + (i32.shl + (i32.and + (get_local $j) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $m + (get_local $l) + ) + (block + (set_local $j + (get_local $l) + ) + (loop $while-in3 + (block $while-out2 + (set_local $l + (i32.add + (get_local $j) + (i32.const 1) + ) + ) + (if + (i32.eqz + (i32.load8_s + (get_local $l) + ) + ) + (block + (set_local $m + (get_local $l) + ) + (br $while-out2) + ) + (set_local $j + (get_local $l) + ) + ) + (br $while-in3) + ) + ) + ) + ) + (set_local $g + (get_local $m) + ) + ) + ) + (return + (i32.sub + (get_local $g) + (get_local $b) + ) + ) + ) + (func $_a (; 17 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (block $do-once + (if + (i32.eqz + (get_local $a) + ) + (block + (if + (i32.eqz + (i32.load + (i32.const 1140) + ) + ) + (set_local $b + (i32.const 0) + ) + (set_local $b + (call $_a + (i32.load + (i32.const 1140) + ) + ) + ) + ) + (call $pa + (i32.const 1188) + ) + (set_local $c + (i32.load + (i32.const 1184) + ) + ) + (if + (i32.eqz + (get_local $c) + ) + (set_local $d + (get_local $b) + ) + (block + (set_local $e + (get_local $c) + ) + (set_local $c + (get_local $b) + ) + (loop $while-in + (block $while-out + (if + (i32.gt_s + (i32.load + (i32.add + (get_local $e) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (set_local $f + (call $Ya + (get_local $e) + ) + ) + (set_local $f + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.load + (i32.add + (get_local $e) + (i32.const 20) + ) + ) + (i32.load + (i32.add + (get_local $e) + (i32.const 28) + ) + ) + ) + (set_local $g + (i32.or + (call $$a + (get_local $e) + ) + (get_local $c) + ) + ) + (set_local $g + (get_local $c) + ) + ) + (if + (get_local $f) + (call $Ta + (get_local $e) + ) + ) + (set_local $e + (i32.load + (i32.add + (get_local $e) + (i32.const 56) + ) + ) + ) + (if + (i32.eqz + (get_local $e) + ) + (block + (set_local $d + (get_local $g) + ) + (br $while-out) + ) + (set_local $c + (get_local $g) + ) + ) + (br $while-in) + ) + ) + ) + ) + (call $xa + (i32.const 1188) + ) + (set_local $h + (get_local $d) + ) + ) + (block + (if + (i32.le_s + (i32.load + (i32.add + (get_local $a) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (block + (set_local $h + (call $$a + (get_local $a) + ) + ) + (br $do-once) + ) + ) + (set_local $c + (i32.eq + (call $Ya + (get_local $a) + ) + (i32.const 0) + ) + ) + (set_local $e + (call $$a + (get_local $a) + ) + ) + (if + (get_local $c) + (set_local $h + (get_local $e) + ) + (block + (call $Ta + (get_local $a) + ) + (set_local $h + (get_local $e) + ) + ) + ) + ) + ) + ) + (return + (get_local $h) + ) + ) + (func $ab (; 18 ;) (param $a i32) (param $b i32) (result i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $j i32) + (local $m i32) + (local $n i32) + (set_local $c + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 16) + ) + ) + (set_local $d + (get_local $c) + ) + (set_local $e + (i32.and + (get_local $b) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $d) + (get_local $e) + ) + (set_local $f + (i32.add + (get_local $a) + (i32.const 16) + ) + ) + (set_local $g + (i32.load + (get_local $f) + ) + ) + (if + (i32.eqz + (get_local $g) + ) + (if + (i32.eqz + (call $Xa + (get_local $a) + ) + ) + (block + (set_local $h + (i32.load + (get_local $f) + ) + ) + (set_local $j + (i32.const 4) + ) + ) + (set_local $m + (i32.const -1) + ) + ) + (block + (set_local $h + (get_local $g) + ) + (set_local $j + (i32.const 4) + ) + ) + ) + (block $do-once + (if + (i32.eq + (get_local $j) + (i32.const 4) + ) + (block + (set_local $g + (i32.add + (get_local $a) + (i32.const 20) + ) + ) + (set_local $f + (i32.load + (get_local $g) + ) + ) + (if + (i32.lt_u + (get_local $f) + (get_local $h) + ) + (block + (set_local $n + (i32.and + (get_local $b) + (i32.const 255) + ) + ) + (if + (i32.ne + (get_local $n) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 75) + ) + ) + ) + (block + (i32.store + (get_local $g) + (i32.add + (get_local $f) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $f) + (get_local $e) + ) + (set_local $m + (get_local $n) + ) + (br $do-once) + ) + ) + ) + ) + (if + (i32.eq + (call_indirect (type $FUNCSIG$iiii) + (get_local $a) + (get_local $d) + (i32.const 1) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $a) + (i32.const 36) + ) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + (i32.const 1) + ) + (set_local $m + (i32.load8_u + (get_local $d) + ) + ) + (set_local $m + (i32.const -1) + ) + ) + ) + ) + ) + (set_global $r + (get_local $c) + ) + (return + (get_local $m) + ) + ) + (func $$a (; 19 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (set_local $b + (i32.add + (get_local $a) + (i32.const 20) + ) + ) + (set_local $c + (i32.add + (get_local $a) + (i32.const 28) + ) + ) + (if + (i32.gt_u + (i32.load + (get_local $b) + ) + (i32.load + (get_local $c) + ) + ) + (block + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $a) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $a) + (i32.const 36) + ) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.eqz + (i32.load + (get_local $b) + ) + ) + (set_local $d + (i32.const -1) + ) + (set_local $e + (i32.const 3) + ) + ) + ) + (set_local $e + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $e) + (i32.const 3) + ) + (block + (set_local $e + (i32.add + (get_local $a) + (i32.const 4) + ) + ) + (set_local $f + (i32.load + (get_local $e) + ) + ) + (set_local $g + (i32.add + (get_local $a) + (i32.const 8) + ) + ) + (set_local $h + (i32.load + (get_local $g) + ) + ) + (if + (i32.lt_u + (get_local $f) + (get_local $h) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $a) + (i32.sub + (get_local $f) + (get_local $h) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $a) + (i32.const 40) + ) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 16) + ) + (i32.const 0) + ) + (i32.store + (get_local $c) + (i32.const 0) + ) + (i32.store + (get_local $b) + (i32.const 0) + ) + (i32.store + (get_local $g) + (i32.const 0) + ) + (i32.store + (get_local $e) + (i32.const 0) + ) + (set_local $d + (i32.const 0) + ) + ) + ) + (return + (get_local $d) + ) + ) + (func $jb (; 20 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $d i32) + (if + (i32.ge_s + (get_local $c) + (i32.const 4096) + ) + (return + (call $va + (get_local $a) + (get_local $b) + (get_local $c) + ) + ) + ) + (set_local $d + (get_local $a) + ) + (if + (i32.eq + (i32.and + (get_local $a) + (i32.const 3) + ) + (i32.and + (get_local $b) + (i32.const 3) + ) + ) + (block + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.and + (get_local $a) + (i32.const 3) + ) + ) + (br $while-out) + ) + (block + (if + (i32.eqz + (get_local $c) + ) + (return + (get_local $d) + ) + ) + (i32.store8 + (get_local $a) + (i32.load8_s + (get_local $b) + ) + ) + (set_local $a + (i32.add + (get_local $a) + (i32.const 1) + ) + ) + (set_local $b + (i32.add + (get_local $b) + (i32.const 1) + ) + ) + (set_local $c + (i32.sub + (get_local $c) + (i32.const 1) + ) + ) + ) + (br $while-in) + ) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eqz + (i32.ge_s + (get_local $c) + (i32.const 4) + ) + ) + (br $while-out0) + ) + (block + (i32.store + (get_local $a) + (i32.load + (get_local $b) + ) + ) + (set_local $a + (i32.add + (get_local $a) + (i32.const 4) + ) + ) + (set_local $b + (i32.add + (get_local $b) + (i32.const 4) + ) + ) + (set_local $c + (i32.sub + (get_local $c) + (i32.const 4) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eqz + (i32.gt_s + (get_local $c) + (i32.const 0) + ) + ) + (br $while-out2) + ) + (block + (i32.store8 + (get_local $a) + (i32.load8_s + (get_local $b) + ) + ) + (set_local $a + (i32.add + (get_local $a) + (i32.const 1) + ) + ) + (set_local $b + (i32.add + (get_local $b) + (i32.const 1) + ) + ) + (set_local $c + (i32.sub + (get_local $c) + (i32.const 1) + ) + ) + ) + (br $while-in3) + ) + ) + (return + (get_local $d) + ) + ) + (func $gb (; 21 ;) + (nop) + ) + (func $hb (; 22 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (set_local $d + (i32.add + (get_local $a) + (get_local $c) + ) + ) + (if + (i32.ge_s + (get_local $c) + (i32.const 20) + ) + (block + (set_local $b + (i32.and + (get_local $b) + (i32.const 255) + ) + ) + (set_local $e + (i32.and + (get_local $a) + (i32.const 3) + ) + ) + (set_local $f + (i32.or + (i32.or + (i32.or + (get_local $b) + (i32.shl + (get_local $b) + (i32.const 8) + ) + ) + (i32.shl + (get_local $b) + (i32.const 16) + ) + ) + (i32.shl + (get_local $b) + (i32.const 24) + ) + ) + ) + (set_local $g + (i32.and + (get_local $d) + (i32.xor + (i32.const 3) + (i32.const -1) + ) + ) + ) + (if + (get_local $e) + (block + (set_local $e + (i32.sub + (i32.add + (get_local $a) + (i32.const 4) + ) + (get_local $e) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.lt_s + (get_local $a) + (get_local $e) + ) + ) + (br $while-out) + ) + (block + (i32.store8 + (get_local $a) + (get_local $b) + ) + (set_local $a + (i32.add + (get_local $a) + (i32.const 1) + ) + ) + ) + (br $while-in) + ) + ) + ) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eqz + (i32.lt_s + (get_local $a) + (get_local $g) + ) + ) + (br $while-out0) + ) + (block + (i32.store + (get_local $a) + (get_local $f) + ) + (set_local $a + (i32.add + (get_local $a) + (i32.const 4) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eqz + (i32.lt_s + (get_local $a) + (get_local $d) + ) + ) + (br $while-out2) + ) + (block + (i32.store8 + (get_local $a) + (get_local $b) + ) + (set_local $a + (i32.add + (get_local $a) + (i32.const 1) + ) + ) + ) + (br $while-in3) + ) + ) + (return + (i32.sub + (get_local $a) + (get_local $c) + ) + ) + ) + (func $db (; 23 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (set_local $b + (i32.load + (i32.const 1024) + ) + ) + (if + (i32.gt_s + (i32.load + (i32.add + (get_local $b) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (set_local $c + (call $Ya + (get_local $b) + ) + ) + (set_local $c + (i32.const 0) + ) + ) + (block $do-once + (if + (i32.lt_s + (call $cb + (get_local $a) + (get_local $b) + ) + (i32.const 0) + ) + (set_local $d + (i32.const 1) + ) + (block + (if + (i32.ne + (i32.load8_s + (i32.add + (get_local $b) + (i32.const 75) + ) + ) + (i32.const 10) + ) + (block + (set_local $e + (i32.add + (get_local $b) + (i32.const 20) + ) + ) + (set_local $f + (i32.load + (get_local $e) + ) + ) + (if + (i32.lt_u + (get_local $f) + (i32.load + (i32.add + (get_local $b) + (i32.const 16) + ) + ) + ) + (block + (i32.store + (get_local $e) + (i32.add + (get_local $f) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $f) + (i32.const 10) + ) + (set_local $d + (i32.const 0) + ) + (br $do-once) + ) + ) + ) + ) + (set_local $d + (i32.lt_s + (call $ab + (get_local $b) + (i32.const 10) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (if + (get_local $c) + (call $Ta + (get_local $b) + ) + ) + (return + (i32.shr_s + (i32.shl + (get_local $d) + (i32.const 31) + ) + (i32.const 31) + ) + ) + ) + (func $Xa (; 24 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (local $d i32) + (set_local $b + (i32.add + (get_local $a) + (i32.const 74) + ) + ) + (set_local $c + (i32.load8_s + (get_local $b) + ) + ) + (i32.store8 + (get_local $b) + (i32.or + (i32.add + (get_local $c) + (i32.const 255) + ) + (get_local $c) + ) + ) + (set_local $c + (i32.load + (get_local $a) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $c) + (i32.const 8) + ) + ) + (block + (i32.store + (i32.add + (get_local $a) + (i32.const 8) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 4) + ) + (i32.const 0) + ) + (set_local $b + (i32.load + (i32.add + (get_local $a) + (i32.const 44) + ) + ) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 28) + ) + (get_local $b) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 20) + ) + (get_local $b) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 16) + ) + (i32.add + (get_local $b) + (i32.load + (i32.add + (get_local $a) + (i32.const 48) + ) + ) + ) + ) + (set_local $d + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $a) + (i32.or + (get_local $c) + (i32.const 32) + ) + ) + (set_local $d + (i32.const -1) + ) + ) + ) + (return + (get_local $d) + ) + ) + (func $bb (; 25 ;) (param $a i32) (param $b i32) (param $c i32) (param $d i32) (result i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $i i32) + (set_local $e + (i32.mul + (get_local $c) + (get_local $b) + ) + ) + (if + (i32.gt_s + (i32.load + (i32.add + (get_local $d) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (block + (set_local $f + (i32.eq + (call $Ya + (get_local $d) + ) + (i32.const 0) + ) + ) + (set_local $g + (call $Wa + (get_local $a) + (get_local $e) + (get_local $d) + ) + ) + (if + (get_local $f) + (set_local $h + (get_local $g) + ) + (block + (call $Ta + (get_local $d) + ) + (set_local $h + (get_local $g) + ) + ) + ) + ) + (set_local $h + (call $Wa + (get_local $a) + (get_local $e) + (get_local $d) + ) + ) + ) + (if + (i32.eq + (get_local $h) + (get_local $e) + ) + (set_local $i + (get_local $c) + ) + (set_local $i + (i32.div_u + (get_local $h) + (get_local $b) + ) + ) + ) + (return + (get_local $i) + ) + ) + (func $Ua (; 26 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (set_local $d + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 32) + ) + ) + (set_local $e + (get_local $d) + ) + (set_local $f + (i32.add + (get_local $d) + (i32.const 20) + ) + ) + (i32.store + (get_local $e) + (i32.load + (i32.add + (get_local $a) + (i32.const 60) + ) + ) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 8) + ) + (get_local $b) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 12) + ) + (get_local $f) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 16) + ) + (get_local $c) + ) + (if + (i32.lt_s + (call $Pa + (call $ua + (i32.const 140) + (get_local $e) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $f) + (i32.const -1) + ) + (set_local $g + (i32.const -1) + ) + ) + (set_local $g + (i32.load + (get_local $f) + ) + ) + ) + (set_global $r + (get_local $d) + ) + (return + (get_local $g) + ) + ) + (func $Va (; 27 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $d i32) + (local $e i32) + (set_local $d + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 80) + ) + ) + (set_local $e + (get_local $d) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 36) + ) + (i32.const 3) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $a) + ) + (i32.const 64) + ) + ) + (block + (i32.store + (get_local $e) + (i32.load + (i32.add + (get_local $a) + (i32.const 60) + ) + ) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 4) + ) + (i32.const 21505) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 8) + ) + (i32.add + (get_local $d) + (i32.const 12) + ) + ) + (if + (call $wa + (i32.const 54) + (get_local $e) + ) + (i32.store8 + (i32.add + (get_local $a) + (i32.const 75) + ) + (i32.const -1) + ) + ) + ) + ) + (set_local $e + (call $Ra + (get_local $a) + (get_local $b) + (get_local $c) + ) + ) + (set_global $r + (get_local $d) + ) + (return + (get_local $e) + ) + ) + (func $Ka (; 28 ;) (param $a i32) + (i32.store8 + (get_global $t) + (i32.load8_s + (get_local $a) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 1) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 1) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 2) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 2) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 3) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 3) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 4) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 4) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 5) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 5) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 6) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 6) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 7) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 7) + ) + ) + ) + ) + (func $Oa (; 29 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (set_local $b + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 16) + ) + ) + (set_local $c + (get_local $b) + ) + (i32.store + (get_local $c) + (i32.load + (i32.add + (get_local $a) + (i32.const 60) + ) + ) + ) + (set_local $a + (call $Pa + (call $sa + (i32.const 6) + (get_local $c) + ) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $a) + ) + ) + (func $Pa (; 30 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (if + (i32.gt_u + (get_local $a) + (i32.const -4096) + ) + (block + (set_local $b + (call $Qa) + ) + (i32.store + (get_local $b) + (i32.sub + (i32.const 0) + (get_local $a) + ) + ) + (set_local $c + (i32.const -1) + ) + ) + (set_local $c + (get_local $a) + ) + ) + (return + (get_local $c) + ) + ) + (func $Ja (; 31 ;) (param $a i32) + (i32.store8 + (get_global $t) + (i32.load8_s + (get_local $a) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 1) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 1) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 2) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 2) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 3) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 3) + ) + ) + ) + ) + (func $Qa (; 32 ;) (result i32) + (local $a i32) + (local $b i32) + (if + (i32.eqz + (i32.load + (i32.const 1160) + ) + ) + (set_local $a + (i32.const 1204) + ) + (block + (set_local $b + (i32.add + (call $ib) + (i32.const 64) + ) + ) + (set_local $a + (i32.load + (get_local $b) + ) + ) + ) + ) + (return + (get_local $a) + ) + ) + (func $lb (; 33 ;) (param $a i32) (param $b i32) (param $c i32) (param $d i32) (result i32) + (return + (call_indirect (type $FUNCSIG$iiii) + (get_local $b) + (get_local $c) + (get_local $d) + (i32.add + (i32.and + (get_local $a) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + ) + (func $Ea (; 34 ;) (param $a i32) (result i32) + (local $b i32) + (set_local $b + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (get_local $a) + ) + ) + (set_global $r + (i32.and + (i32.add + (get_global $r) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (return + (get_local $b) + ) + ) + (func $cb (; 35 ;) (param $a i32) (param $b i32) (result i32) + (return + (i32.add + (call $bb + (get_local $a) + (call $Za + (get_local $a) + ) + (i32.const 1) + (get_local $b) + ) + (i32.const -1) + ) + ) + ) + (func $ob (; 36 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (call $ja + (i32.const 1) + ) + (return + (i32.const 0) + ) + ) + (func $Ia (; 37 ;) (param $a i32) (param $b i32) + (if + (i32.eqz + (get_global $v) + ) + (block + (set_global $v + (get_local $a) + ) + (set_global $w + (get_local $b) + ) + ) + ) + ) + (func $kb (; 38 ;) (param $a i32) (param $b i32) (result i32) + (return + (call_indirect (type $FUNCSIG$ii) + (get_local $b) + (i32.add + (i32.and + (get_local $a) + (i32.const 1) + ) + (i32.const 0) + ) + ) + ) + ) + (func $Sa (; 39 ;) (param $a i32) + (if + (i32.eqz + (i32.load + (i32.add + (get_local $a) + (i32.const 68) + ) + ) + ) + (call $Ta + (get_local $a) + ) + ) + (return) + ) + (func $mb (; 40 ;) (param $a i32) (param $b i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $b) + (i32.add + (i32.and + (get_local $a) + (i32.const 1) + ) + (i32.const 6) + ) + ) + ) + (func $Ha (; 41 ;) (param $a i32) (param $b i32) + (set_global $r + (get_local $a) + ) + (set_global $s + (get_local $b) + ) + ) + (func $nb (; 42 ;) (param $a i32) (result i32) + (call $ja + (i32.const 0) + ) + (return + (i32.const 0) + ) + ) + (func $Na (; 43 ;) (result i32) + (drop + (call $db + (i32.const 1144) + ) + ) + (return + (i32.const 0) + ) + ) + (func $Ya (; 44 ;) (param $a i32) (result i32) + (return + (i32.const 0) + ) + ) + (func $Ta (; 45 ;) (param $a i32) + (return) + ) + (func $pb (; 46 ;) (param $a i32) + (call $ja + (i32.const 2) + ) + ) + (func $La (; 47 ;) (param $a i32) + (set_global $K + (get_local $a) + ) + ) + (func $Ga (; 48 ;) (param $a i32) + (set_global $r + (get_local $a) + ) + ) + (func $Ma (; 49 ;) (result i32) + (return + (get_global $K) + ) + ) + (func $Fa (; 50 ;) (result i32) + (return + (get_global $r) + ) + ) + (func $ib (; 51 ;) (result i32) + (return + (i32.const 0) + ) + ) + (func $__growWasmMemory (; 52 ;) (param $newSize i32) (result i32) + (grow_memory + (get_local $newSize) + ) + ) +) diff --git a/src/binaryen/test/memorygrowth.fromasm.no-opts b/src/binaryen/test/memorygrowth.fromasm.no-opts new file mode 100644 index 0000000000..46625f4b0c --- /dev/null +++ b/src/binaryen/test/memorygrowth.fromasm.no-opts @@ -0,0 +1,12004 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (import "env" "STACKTOP" (global $r$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $s$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $t$asm2wasm$import i32)) + (import "env" "ABORT" (global $u$asm2wasm$import i32)) + (import "global" "NaN" (global $z$asm2wasm$import f64)) + (import "global" "Infinity" (global $A$asm2wasm$import f64)) + (import "env" "abort" (func $ja (param i32))) + (import "env" "_pthread_cleanup_pop" (func $oa (param i32))) + (import "env" "___lock" (func $pa (param i32))) + (import "env" "_abort" (func $qa)) + (import "env" "_pthread_cleanup_push" (func $ra (param i32 i32))) + (import "env" "___syscall6" (func $sa (param i32 i32) (result i32))) + (import "env" "_sbrk" (func $ta (param i32) (result i32))) + (import "env" "___syscall140" (func $ua (param i32 i32) (result i32))) + (import "env" "_emscripten_memcpy_big" (func $va (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $wa (param i32 i32) (result i32))) + (import "env" "___unlock" (func $xa (param i32))) + (import "env" "___syscall146" (func $ya (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 8 8 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $r (mut i32) (get_global $r$asm2wasm$import)) + (global $s (mut i32) (get_global $s$asm2wasm$import)) + (global $t (mut i32) (get_global $t$asm2wasm$import)) + (global $u (mut i32) (get_global $u$asm2wasm$import)) + (global $v (mut i32) (i32.const 0)) + (global $w (mut i32) (i32.const 0)) + (global $x (mut i32) (i32.const 0)) + (global $y (mut i32) (i32.const 0)) + (global $z (mut f64) (get_global $z$asm2wasm$import)) + (global $A (mut f64) (get_global $A$asm2wasm$import)) + (global $B (mut i32) (i32.const 0)) + (global $C (mut i32) (i32.const 0)) + (global $D (mut i32) (i32.const 0)) + (global $E (mut i32) (i32.const 0)) + (global $F (mut f64) (f64.const 0)) + (global $G (mut i32) (i32.const 0)) + (global $H (mut i32) (i32.const 0)) + (global $I (mut i32) (i32.const 0)) + (global $J (mut f64) (f64.const 0)) + (global $K (mut i32) (i32.const 0)) + (global $L (mut i32) (i32.const 0)) + (global $M (mut i32) (i32.const 0)) + (global $N (mut i32) (i32.const 0)) + (global $O (mut i32) (i32.const 0)) + (global $P (mut i32) (i32.const 0)) + (global $Q (mut i32) (i32.const 0)) + (global $R (mut i32) (i32.const 0)) + (global $S (mut i32) (i32.const 0)) + (global $T (mut i32) (i32.const 0)) + (global $za (mut f64) (f64.const 0)) + (elem (get_global $tableBase) $nb $Oa $ob $Va $Ua $Ra $pb $Sa) + (export "_free" (func $fb)) + (export "_main" (func $Na)) + (export "_pthread_self" (func $ib)) + (export "_memset" (func $hb)) + (export "_malloc" (func $eb)) + (export "_memcpy" (func $jb)) + (export "_fflush" (func $_a)) + (export "___errno_location" (func $Qa)) + (export "runPostSets" (func $gb)) + (export "stackAlloc" (func $Ea)) + (export "stackSave" (func $Fa)) + (export "stackRestore" (func $Ga)) + (export "establishStackSpace" (func $Ha)) + (export "setThrew" (func $Ia)) + (export "setTempRet0" (func $La)) + (export "getTempRet0" (func $Ma)) + (export "dynCall_ii" (func $kb)) + (export "dynCall_iiii" (func $lb)) + (export "dynCall_vi" (func $mb)) + (export "__growWasmMemory" (func $__growWasmMemory)) + (func $eb (; 12 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $i i32) + (local $j i32) + (local $l i32) + (local $m i32) + (local $n i32) + (local $o i32) + (local $p i32) + (local $q i32) + (local $s i32) + (local $t i32) + (local $u i32) + (local $v i32) + (local $w i32) + (local $x i32) + (local $y i32) + (local $z i32) + (local $A i32) + (local $B i32) + (local $C i32) + (local $D i32) + (local $E i32) + (local $F i32) + (local $G i32) + (local $H i32) + (local $I i32) + (local $J i32) + (local $K i32) + (local $L i32) + (local $M i32) + (local $N i32) + (local $O i32) + (local $P i32) + (local $Q i32) + (local $R i32) + (local $S i32) + (local $T i32) + (local $U i32) + (local $V i32) + (local $W i32) + (local $X i32) + (local $Y i32) + (local $Z i32) + (local $_ i32) + (local $$ i32) + (local $aa i32) + (local $ba i32) + (local $ca i32) + (local $da i32) + (local $ea i32) + (local $fa i32) + (local $ga i32) + (local $ha i32) + (local $ia i32) + (local $ja i32) + (local $ka i32) + (local $la i32) + (local $ma i32) + (local $na i32) + (local $oa i32) + (local $pa i32) + (local $ra i32) + (local $sa i32) + (local $ua i32) + (local $va i32) + (local $wa i32) + (local $xa i32) + (local $ya i32) + (local $za i32) + (local $Aa i32) + (local $Ba i32) + (local $Ca i32) + (local $Da i32) + (local $Ea i32) + (local $Fa i32) + (local $Ga i32) + (local $Ha i32) + (local $Ia i32) + (local $Ja i32) + (local $Ka i32) + (local $La i32) + (local $Ma i32) + (local $Na i32) + (local $Oa i32) + (local $Pa i32) + (local $Ra i32) + (local $Sa i32) + (set_local $b + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 16) + ) + ) + (set_local $c + (get_local $b) + ) + (block $do-once + (if + (i32.lt_u + (get_local $a) + (i32.const 245) + ) + (block + (set_local $d + (if (result i32) + (i32.lt_u + (get_local $a) + (i32.const 11) + ) + (i32.const 16) + (i32.and + (i32.add + (get_local $a) + (i32.const 11) + ) + (i32.const -8) + ) + ) + ) + (set_local $e + (i32.shr_u + (get_local $d) + (i32.const 3) + ) + ) + (set_local $f + (i32.load + (i32.const 1208) + ) + ) + (set_local $g + (i32.shr_u + (get_local $f) + (get_local $e) + ) + ) + (if + (i32.and + (get_local $g) + (i32.const 3) + ) + (block + (set_local $h + (i32.add + (i32.xor + (i32.and + (get_local $g) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $e) + ) + ) + (set_local $i + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $h) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $j + (i32.add + (get_local $i) + (i32.const 8) + ) + ) + (set_local $l + (i32.load + (get_local $j) + ) + ) + (set_local $m + (i32.add + (get_local $l) + (i32.const 8) + ) + ) + (set_local $n + (i32.load + (get_local $m) + ) + ) + (block $do-once0 + (if + (i32.eq + (get_local $i) + (get_local $n) + ) + (i32.store + (i32.const 1208) + (i32.and + (get_local $f) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $h) + ) + (i32.const -1) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $n) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $o + (i32.add + (get_local $n) + (i32.const 12) + ) + ) + (if + (i32.eq + (i32.load + (get_local $o) + ) + (get_local $l) + ) + (block + (i32.store + (get_local $o) + (get_local $i) + ) + (i32.store + (get_local $j) + (get_local $n) + ) + (br $do-once0) + ) + (call $qa) + ) + ) + ) + ) + (set_local $n + (i32.shl + (get_local $h) + (i32.const 3) + ) + ) + (i32.store + (i32.add + (get_local $l) + (i32.const 4) + ) + (i32.or + (get_local $n) + (i32.const 3) + ) + ) + (set_local $j + (i32.add + (i32.add + (get_local $l) + (get_local $n) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $j) + (i32.or + (i32.load + (get_local $j) + ) + (i32.const 1) + ) + ) + (set_local $p + (get_local $m) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + (set_local $j + (i32.load + (i32.const 1216) + ) + ) + (if + (i32.gt_u + (get_local $d) + (get_local $j) + ) + (block + (if + (get_local $g) + (block + (set_local $n + (i32.shl + (i32.const 2) + (get_local $e) + ) + ) + (set_local $i + (i32.and + (i32.shl + (get_local $g) + (get_local $e) + ) + (i32.or + (get_local $n) + (i32.sub + (i32.const 0) + (get_local $n) + ) + ) + ) + ) + (set_local $n + (i32.add + (i32.and + (get_local $i) + (i32.sub + (i32.const 0) + (get_local $i) + ) + ) + (i32.const -1) + ) + ) + (set_local $i + (i32.and + (i32.shr_u + (get_local $n) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $o + (i32.shr_u + (get_local $n) + (get_local $i) + ) + ) + (set_local $n + (i32.and + (i32.shr_u + (get_local $o) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $q + (i32.shr_u + (get_local $o) + (get_local $n) + ) + ) + (set_local $o + (i32.and + (i32.shr_u + (get_local $q) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $s + (i32.shr_u + (get_local $q) + (get_local $o) + ) + ) + (set_local $q + (i32.and + (i32.shr_u + (get_local $s) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $t + (i32.shr_u + (get_local $s) + (get_local $q) + ) + ) + (set_local $s + (i32.and + (i32.shr_u + (get_local $t) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $u + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $n) + (get_local $i) + ) + (get_local $o) + ) + (get_local $q) + ) + (get_local $s) + ) + (i32.shr_u + (get_local $t) + (get_local $s) + ) + ) + ) + (set_local $s + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $u) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $t + (i32.add + (get_local $s) + (i32.const 8) + ) + ) + (set_local $q + (i32.load + (get_local $t) + ) + ) + (set_local $o + (i32.add + (get_local $q) + (i32.const 8) + ) + ) + (set_local $i + (i32.load + (get_local $o) + ) + ) + (block $do-once2 + (if + (i32.eq + (get_local $s) + (get_local $i) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (get_local $f) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $u) + ) + (i32.const -1) + ) + ) + ) + (set_local $v + (get_local $j) + ) + ) + (block + (if + (i32.lt_u + (get_local $i) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $n + (i32.add + (get_local $i) + (i32.const 12) + ) + ) + (if + (i32.eq + (i32.load + (get_local $n) + ) + (get_local $q) + ) + (block + (i32.store + (get_local $n) + (get_local $s) + ) + (i32.store + (get_local $t) + (get_local $i) + ) + (set_local $v + (i32.load + (i32.const 1216) + ) + ) + (br $do-once2) + ) + (call $qa) + ) + ) + ) + ) + (set_local $i + (i32.sub + (i32.shl + (get_local $u) + (i32.const 3) + ) + (get_local $d) + ) + ) + (i32.store + (i32.add + (get_local $q) + (i32.const 4) + ) + (i32.or + (get_local $d) + (i32.const 3) + ) + ) + (set_local $t + (i32.add + (get_local $q) + (get_local $d) + ) + ) + (i32.store + (i32.add + (get_local $t) + (i32.const 4) + ) + (i32.or + (get_local $i) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $t) + (get_local $i) + ) + (get_local $i) + ) + (if + (get_local $v) + (block + (set_local $s + (i32.load + (i32.const 1228) + ) + ) + (set_local $j + (i32.shr_u + (get_local $v) + (i32.const 3) + ) + ) + (set_local $f + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $j) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $e + (i32.load + (i32.const 1208) + ) + ) + (set_local $g + (i32.shl + (i32.const 1) + (get_local $j) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $e) + (get_local $g) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $e) + (get_local $g) + ) + ) + (set_local $w + (i32.add + (get_local $f) + (i32.const 8) + ) + ) + (set_local $x + (get_local $f) + ) + ) + (block + (set_local $g + (i32.add + (get_local $f) + (i32.const 8) + ) + ) + (set_local $e + (i32.load + (get_local $g) + ) + ) + (if + (i32.lt_u + (get_local $e) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $w + (get_local $g) + ) + (set_local $x + (get_local $e) + ) + ) + ) + ) + ) + (i32.store + (get_local $w) + (get_local $s) + ) + (i32.store + (i32.add + (get_local $x) + (i32.const 12) + ) + (get_local $s) + ) + (i32.store + (i32.add + (get_local $s) + (i32.const 8) + ) + (get_local $x) + ) + (i32.store + (i32.add + (get_local $s) + (i32.const 12) + ) + (get_local $f) + ) + ) + ) + (i32.store + (i32.const 1216) + (get_local $i) + ) + (i32.store + (i32.const 1228) + (get_local $t) + ) + (set_local $p + (get_local $o) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + (set_local $t + (i32.load + (i32.const 1212) + ) + ) + (if + (i32.eqz + (get_local $t) + ) + (set_local $y + (get_local $d) + ) + (block + (set_local $i + (i32.add + (i32.and + (get_local $t) + (i32.sub + (i32.const 0) + (get_local $t) + ) + ) + (i32.const -1) + ) + ) + (set_local $t + (i32.and + (i32.shr_u + (get_local $i) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $f + (i32.shr_u + (get_local $i) + (get_local $t) + ) + ) + (set_local $i + (i32.and + (i32.shr_u + (get_local $f) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $s + (i32.shr_u + (get_local $f) + (get_local $i) + ) + ) + (set_local $f + (i32.and + (i32.shr_u + (get_local $s) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $e + (i32.shr_u + (get_local $s) + (get_local $f) + ) + ) + (set_local $s + (i32.and + (i32.shr_u + (get_local $e) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $g + (i32.shr_u + (get_local $e) + (get_local $s) + ) + ) + (set_local $e + (i32.and + (i32.shr_u + (get_local $g) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $j + (i32.load + (i32.add + (i32.const 1512) + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $i) + (get_local $t) + ) + (get_local $f) + ) + (get_local $s) + ) + (get_local $e) + ) + (i32.shr_u + (get_local $g) + (get_local $e) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $e + (i32.sub + (i32.and + (i32.load + (i32.add + (get_local $j) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $d) + ) + ) + (set_local $g + (get_local $j) + ) + (set_local $s + (get_local $j) + ) + (loop $while-in + (block $while-out + (set_local $j + (i32.load + (i32.add + (get_local $g) + (i32.const 16) + ) + ) + ) + (if + (i32.eqz + (get_local $j) + ) + (block + (set_local $f + (i32.load + (i32.add + (get_local $g) + (i32.const 20) + ) + ) + ) + (if + (i32.eqz + (get_local $f) + ) + (block + (set_local $z + (get_local $e) + ) + (set_local $A + (get_local $s) + ) + (br $while-out) + ) + (set_local $B + (get_local $f) + ) + ) + ) + (set_local $B + (get_local $j) + ) + ) + (set_local $j + (i32.sub + (i32.and + (i32.load + (i32.add + (get_local $B) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $d) + ) + ) + (set_local $f + (i32.lt_u + (get_local $j) + (get_local $e) + ) + ) + (set_local $e + (if (result i32) + (get_local $f) + (get_local $j) + (get_local $e) + ) + ) + (set_local $g + (get_local $B) + ) + (set_local $s + (if (result i32) + (get_local $f) + (get_local $B) + (get_local $s) + ) + ) + (br $while-in) + ) + ) + (set_local $s + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $A) + (get_local $s) + ) + (call $qa) + ) + (set_local $g + (i32.add + (get_local $A) + (get_local $d) + ) + ) + (if + (i32.ge_u + (get_local $A) + (get_local $g) + ) + (call $qa) + ) + (set_local $e + (i32.load + (i32.add + (get_local $A) + (i32.const 24) + ) + ) + ) + (set_local $o + (i32.load + (i32.add + (get_local $A) + (i32.const 12) + ) + ) + ) + (block $do-once4 + (if + (i32.eq + (get_local $o) + (get_local $A) + ) + (block + (set_local $q + (i32.add + (get_local $A) + (i32.const 20) + ) + ) + (set_local $u + (i32.load + (get_local $q) + ) + ) + (if + (i32.eqz + (get_local $u) + ) + (block + (set_local $f + (i32.add + (get_local $A) + (i32.const 16) + ) + ) + (set_local $j + (i32.load + (get_local $f) + ) + ) + (if + (i32.eqz + (get_local $j) + ) + (block + (set_local $C + (i32.const 0) + ) + (br $do-once4) + ) + (block + (set_local $D + (get_local $j) + ) + (set_local $E + (get_local $f) + ) + ) + ) + ) + (block + (set_local $D + (get_local $u) + ) + (set_local $E + (get_local $q) + ) + ) + ) + (loop $while-in7 + (block $while-out6 + (set_local $q + (i32.add + (get_local $D) + (i32.const 20) + ) + ) + (set_local $u + (i32.load + (get_local $q) + ) + ) + (if + (get_local $u) + (block + (set_local $D + (get_local $u) + ) + (set_local $E + (get_local $q) + ) + (br $while-in7) + ) + ) + (set_local $q + (i32.add + (get_local $D) + (i32.const 16) + ) + ) + (set_local $u + (i32.load + (get_local $q) + ) + ) + (if + (i32.eqz + (get_local $u) + ) + (block + (set_local $F + (get_local $D) + ) + (set_local $G + (get_local $E) + ) + (br $while-out6) + ) + (block + (set_local $D + (get_local $u) + ) + (set_local $E + (get_local $q) + ) + ) + ) + (br $while-in7) + ) + ) + (if + (i32.lt_u + (get_local $G) + (get_local $s) + ) + (call $qa) + (block + (i32.store + (get_local $G) + (i32.const 0) + ) + (set_local $C + (get_local $F) + ) + (br $do-once4) + ) + ) + ) + (block + (set_local $q + (i32.load + (i32.add + (get_local $A) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $q) + (get_local $s) + ) + (call $qa) + ) + (set_local $u + (i32.add + (get_local $q) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $u) + ) + (get_local $A) + ) + (call $qa) + ) + (set_local $f + (i32.add + (get_local $o) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $f) + ) + (get_local $A) + ) + (block + (i32.store + (get_local $u) + (get_local $o) + ) + (i32.store + (get_local $f) + (get_local $q) + ) + (set_local $C + (get_local $o) + ) + (br $do-once4) + ) + (call $qa) + ) + ) + ) + ) + (block $do-once8 + (if + (get_local $e) + (block + (set_local $o + (i32.load + (i32.add + (get_local $A) + (i32.const 28) + ) + ) + ) + (set_local $s + (i32.add + (i32.const 1512) + (i32.shl + (get_local $o) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $A) + (i32.load + (get_local $s) + ) + ) + (block + (i32.store + (get_local $s) + (get_local $C) + ) + (if + (i32.eqz + (get_local $C) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $o) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $e) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $o + (i32.add + (get_local $e) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $o) + ) + (get_local $A) + ) + (i32.store + (get_local $o) + (get_local $C) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 20) + ) + (get_local $C) + ) + ) + (if + (i32.eqz + (get_local $C) + ) + (br $do-once8) + ) + ) + ) + (set_local $o + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $C) + (get_local $o) + ) + (call $qa) + ) + (i32.store + (i32.add + (get_local $C) + (i32.const 24) + ) + (get_local $e) + ) + (set_local $s + (i32.load + (i32.add + (get_local $A) + (i32.const 16) + ) + ) + ) + (block $do-once10 + (if + (get_local $s) + (if + (i32.lt_u + (get_local $s) + (get_local $o) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $C) + (i32.const 16) + ) + (get_local $s) + ) + (i32.store + (i32.add + (get_local $s) + (i32.const 24) + ) + (get_local $C) + ) + (br $do-once10) + ) + ) + ) + ) + (set_local $s + (i32.load + (i32.add + (get_local $A) + (i32.const 20) + ) + ) + ) + (if + (get_local $s) + (if + (i32.lt_u + (get_local $s) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $C) + (i32.const 20) + ) + (get_local $s) + ) + (i32.store + (i32.add + (get_local $s) + (i32.const 24) + ) + (get_local $C) + ) + (br $do-once8) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $z) + (i32.const 16) + ) + (block + (set_local $e + (i32.add + (get_local $z) + (get_local $d) + ) + ) + (i32.store + (i32.add + (get_local $A) + (i32.const 4) + ) + (i32.or + (get_local $e) + (i32.const 3) + ) + ) + (set_local $s + (i32.add + (i32.add + (get_local $A) + (get_local $e) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $s) + (i32.or + (i32.load + (get_local $s) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store + (i32.add + (get_local $A) + (i32.const 4) + ) + (i32.or + (get_local $d) + (i32.const 3) + ) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 4) + ) + (i32.or + (get_local $z) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $g) + (get_local $z) + ) + (get_local $z) + ) + (set_local $s + (i32.load + (i32.const 1216) + ) + ) + (if + (get_local $s) + (block + (set_local $e + (i32.load + (i32.const 1228) + ) + ) + (set_local $o + (i32.shr_u + (get_local $s) + (i32.const 3) + ) + ) + (set_local $s + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $o) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $q + (i32.load + (i32.const 1208) + ) + ) + (set_local $f + (i32.shl + (i32.const 1) + (get_local $o) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $q) + (get_local $f) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $q) + (get_local $f) + ) + ) + (set_local $H + (i32.add + (get_local $s) + (i32.const 8) + ) + ) + (set_local $I + (get_local $s) + ) + ) + (block + (set_local $f + (i32.add + (get_local $s) + (i32.const 8) + ) + ) + (set_local $q + (i32.load + (get_local $f) + ) + ) + (if + (i32.lt_u + (get_local $q) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $H + (get_local $f) + ) + (set_local $I + (get_local $q) + ) + ) + ) + ) + ) + (i32.store + (get_local $H) + (get_local $e) + ) + (i32.store + (i32.add + (get_local $I) + (i32.const 12) + ) + (get_local $e) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 8) + ) + (get_local $I) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 12) + ) + (get_local $s) + ) + ) + ) + (i32.store + (i32.const 1216) + (get_local $z) + ) + (i32.store + (i32.const 1228) + (get_local $g) + ) + ) + ) + (set_local $p + (i32.add + (get_local $A) + (i32.const 8) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + ) + (set_local $y + (get_local $d) + ) + ) + ) + (if + (i32.gt_u + (get_local $a) + (i32.const -65) + ) + (set_local $y + (i32.const -1) + ) + (block + (set_local $s + (i32.add + (get_local $a) + (i32.const 11) + ) + ) + (set_local $e + (i32.and + (get_local $s) + (i32.const -8) + ) + ) + (set_local $q + (i32.load + (i32.const 1212) + ) + ) + (if + (i32.eqz + (get_local $q) + ) + (set_local $y + (get_local $e) + ) + (block + (set_local $f + (i32.sub + (i32.const 0) + (get_local $e) + ) + ) + (set_local $o + (i32.shr_u + (get_local $s) + (i32.const 8) + ) + ) + (if + (i32.eqz + (get_local $o) + ) + (set_local $J + (i32.const 0) + ) + (if + (i32.gt_u + (get_local $e) + (i32.const 16777215) + ) + (set_local $J + (i32.const 31) + ) + (block + (set_local $s + (i32.and + (i32.shr_u + (i32.add + (get_local $o) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $u + (i32.shl + (get_local $o) + (get_local $s) + ) + ) + (set_local $o + (i32.and + (i32.shr_u + (i32.add + (get_local $u) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $j + (i32.shl + (get_local $u) + (get_local $o) + ) + ) + (set_local $u + (i32.and + (i32.shr_u + (i32.add + (get_local $j) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $t + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $o) + (get_local $s) + ) + (get_local $u) + ) + ) + (i32.shr_u + (i32.shl + (get_local $j) + (get_local $u) + ) + (i32.const 15) + ) + ) + ) + (set_local $J + (i32.or + (i32.and + (i32.shr_u + (get_local $e) + (i32.add + (get_local $t) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $t) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $t + (i32.load + (i32.add + (i32.const 1512) + (i32.shl + (get_local $J) + (i32.const 2) + ) + ) + ) + ) + (block $label$break$a + (if + (i32.eqz + (get_local $t) + ) + (block + (set_local $K + (get_local $f) + ) + (set_local $L + (i32.const 0) + ) + (set_local $M + (i32.const 0) + ) + (set_local $N + (i32.const 86) + ) + ) + (block + (set_local $u + (get_local $f) + ) + (set_local $j + (i32.const 0) + ) + (set_local $s + (i32.shl + (get_local $e) + (if (result i32) + (i32.eq + (get_local $J) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $J) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $o + (get_local $t) + ) + (set_local $i + (i32.const 0) + ) + (loop $while-in14 + (block $while-out13 + (set_local $m + (i32.and + (i32.load + (i32.add + (get_local $o) + (i32.const 4) + ) + ) + (i32.const -8) + ) + ) + (set_local $l + (i32.sub + (get_local $m) + (get_local $e) + ) + ) + (if + (i32.lt_u + (get_local $l) + (get_local $u) + ) + (if + (i32.eq + (get_local $m) + (get_local $e) + ) + (block + (set_local $O + (get_local $l) + ) + (set_local $P + (get_local $o) + ) + (set_local $Q + (get_local $o) + ) + (set_local $N + (i32.const 90) + ) + (br $label$break$a) + ) + (block + (set_local $R + (get_local $l) + ) + (set_local $S + (get_local $o) + ) + ) + ) + (block + (set_local $R + (get_local $u) + ) + (set_local $S + (get_local $i) + ) + ) + ) + (set_local $l + (i32.load + (i32.add + (get_local $o) + (i32.const 20) + ) + ) + ) + (set_local $o + (i32.load + (i32.add + (i32.add + (get_local $o) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $s) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $m + (if (result i32) + (i32.or + (i32.eq + (get_local $l) + (i32.const 0) + ) + (i32.eq + (get_local $l) + (get_local $o) + ) + ) + (get_local $j) + (get_local $l) + ) + ) + (set_local $l + (i32.eq + (get_local $o) + (i32.const 0) + ) + ) + (if + (get_local $l) + (block + (set_local $K + (get_local $R) + ) + (set_local $L + (get_local $m) + ) + (set_local $M + (get_local $S) + ) + (set_local $N + (i32.const 86) + ) + (br $while-out13) + ) + (block + (set_local $u + (get_local $R) + ) + (set_local $j + (get_local $m) + ) + (set_local $s + (i32.shl + (get_local $s) + (i32.xor + (i32.and + (get_local $l) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (set_local $i + (get_local $S) + ) + ) + ) + (br $while-in14) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 86) + ) + (block + (if + (i32.and + (i32.eq + (get_local $L) + (i32.const 0) + ) + (i32.eq + (get_local $M) + (i32.const 0) + ) + ) + (block + (set_local $t + (i32.shl + (i32.const 2) + (get_local $J) + ) + ) + (set_local $f + (i32.and + (get_local $q) + (i32.or + (get_local $t) + (i32.sub + (i32.const 0) + (get_local $t) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $f) + ) + (block + (set_local $y + (get_local $e) + ) + (br $do-once) + ) + ) + (set_local $t + (i32.add + (i32.and + (get_local $f) + (i32.sub + (i32.const 0) + (get_local $f) + ) + ) + (i32.const -1) + ) + ) + (set_local $f + (i32.and + (i32.shr_u + (get_local $t) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $d + (i32.shr_u + (get_local $t) + (get_local $f) + ) + ) + (set_local $t + (i32.and + (i32.shr_u + (get_local $d) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (set_local $g + (i32.shr_u + (get_local $d) + (get_local $t) + ) + ) + (set_local $d + (i32.and + (i32.shr_u + (get_local $g) + (i32.const 2) + ) + (i32.const 4) + ) + ) + (set_local $i + (i32.shr_u + (get_local $g) + (get_local $d) + ) + ) + (set_local $g + (i32.and + (i32.shr_u + (get_local $i) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (set_local $s + (i32.shr_u + (get_local $i) + (get_local $g) + ) + ) + (set_local $i + (i32.and + (i32.shr_u + (get_local $s) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (set_local $T + (i32.load + (i32.add + (i32.const 1512) + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (get_local $t) + (get_local $f) + ) + (get_local $d) + ) + (get_local $g) + ) + (get_local $i) + ) + (i32.shr_u + (get_local $s) + (get_local $i) + ) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (set_local $T + (get_local $L) + ) + ) + (if + (i32.eqz + (get_local $T) + ) + (block + (set_local $U + (get_local $K) + ) + (set_local $V + (get_local $M) + ) + ) + (block + (set_local $O + (get_local $K) + ) + (set_local $P + (get_local $T) + ) + (set_local $Q + (get_local $M) + ) + (set_local $N + (i32.const 90) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 90) + ) + (loop $while-in16 + (block $while-out15 + (set_local $N + (i32.const 0) + ) + (set_local $i + (i32.sub + (i32.and + (i32.load + (i32.add + (get_local $P) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $e) + ) + ) + (set_local $s + (i32.lt_u + (get_local $i) + (get_local $O) + ) + ) + (set_local $g + (if (result i32) + (get_local $s) + (get_local $i) + (get_local $O) + ) + ) + (set_local $i + (if (result i32) + (get_local $s) + (get_local $P) + (get_local $Q) + ) + ) + (set_local $s + (i32.load + (i32.add + (get_local $P) + (i32.const 16) + ) + ) + ) + (if + (get_local $s) + (block + (set_local $O + (get_local $g) + ) + (set_local $P + (get_local $s) + ) + (set_local $Q + (get_local $i) + ) + (set_local $N + (i32.const 90) + ) + (br $while-in16) + ) + ) + (set_local $P + (i32.load + (i32.add + (get_local $P) + (i32.const 20) + ) + ) + ) + (if + (i32.eqz + (get_local $P) + ) + (block + (set_local $U + (get_local $g) + ) + (set_local $V + (get_local $i) + ) + (br $while-out15) + ) + (block + (set_local $O + (get_local $g) + ) + (set_local $Q + (get_local $i) + ) + (set_local $N + (i32.const 90) + ) + ) + ) + (br $while-in16) + ) + ) + ) + (if + (i32.eqz + (get_local $V) + ) + (set_local $y + (get_local $e) + ) + (if + (i32.lt_u + (get_local $U) + (i32.sub + (i32.load + (i32.const 1216) + ) + (get_local $e) + ) + ) + (block + (set_local $q + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $V) + (get_local $q) + ) + (call $qa) + ) + (set_local $i + (i32.add + (get_local $V) + (get_local $e) + ) + ) + (if + (i32.ge_u + (get_local $V) + (get_local $i) + ) + (call $qa) + ) + (set_local $g + (i32.load + (i32.add + (get_local $V) + (i32.const 24) + ) + ) + ) + (set_local $s + (i32.load + (i32.add + (get_local $V) + (i32.const 12) + ) + ) + ) + (block $do-once17 + (if + (i32.eq + (get_local $s) + (get_local $V) + ) + (block + (set_local $d + (i32.add + (get_local $V) + (i32.const 20) + ) + ) + (set_local $f + (i32.load + (get_local $d) + ) + ) + (if + (i32.eqz + (get_local $f) + ) + (block + (set_local $t + (i32.add + (get_local $V) + (i32.const 16) + ) + ) + (set_local $j + (i32.load + (get_local $t) + ) + ) + (if + (i32.eqz + (get_local $j) + ) + (block + (set_local $W + (i32.const 0) + ) + (br $do-once17) + ) + (block + (set_local $X + (get_local $j) + ) + (set_local $Y + (get_local $t) + ) + ) + ) + ) + (block + (set_local $X + (get_local $f) + ) + (set_local $Y + (get_local $d) + ) + ) + ) + (loop $while-in20 + (block $while-out19 + (set_local $d + (i32.add + (get_local $X) + (i32.const 20) + ) + ) + (set_local $f + (i32.load + (get_local $d) + ) + ) + (if + (get_local $f) + (block + (set_local $X + (get_local $f) + ) + (set_local $Y + (get_local $d) + ) + (br $while-in20) + ) + ) + (set_local $d + (i32.add + (get_local $X) + (i32.const 16) + ) + ) + (set_local $f + (i32.load + (get_local $d) + ) + ) + (if + (i32.eqz + (get_local $f) + ) + (block + (set_local $Z + (get_local $X) + ) + (set_local $_ + (get_local $Y) + ) + (br $while-out19) + ) + (block + (set_local $X + (get_local $f) + ) + (set_local $Y + (get_local $d) + ) + ) + ) + (br $while-in20) + ) + ) + (if + (i32.lt_u + (get_local $_) + (get_local $q) + ) + (call $qa) + (block + (i32.store + (get_local $_) + (i32.const 0) + ) + (set_local $W + (get_local $Z) + ) + (br $do-once17) + ) + ) + ) + (block + (set_local $d + (i32.load + (i32.add + (get_local $V) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $d) + (get_local $q) + ) + (call $qa) + ) + (set_local $f + (i32.add + (get_local $d) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $f) + ) + (get_local $V) + ) + (call $qa) + ) + (set_local $t + (i32.add + (get_local $s) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $t) + ) + (get_local $V) + ) + (block + (i32.store + (get_local $f) + (get_local $s) + ) + (i32.store + (get_local $t) + (get_local $d) + ) + (set_local $W + (get_local $s) + ) + (br $do-once17) + ) + (call $qa) + ) + ) + ) + ) + (block $do-once21 + (if + (get_local $g) + (block + (set_local $s + (i32.load + (i32.add + (get_local $V) + (i32.const 28) + ) + ) + ) + (set_local $q + (i32.add + (i32.const 1512) + (i32.shl + (get_local $s) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $V) + (i32.load + (get_local $q) + ) + ) + (block + (i32.store + (get_local $q) + (get_local $W) + ) + (if + (i32.eqz + (get_local $W) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $s) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $g) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $s + (i32.add + (get_local $g) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $s) + ) + (get_local $V) + ) + (i32.store + (get_local $s) + (get_local $W) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 20) + ) + (get_local $W) + ) + ) + (if + (i32.eqz + (get_local $W) + ) + (br $do-once21) + ) + ) + ) + (set_local $s + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $W) + (get_local $s) + ) + (call $qa) + ) + (i32.store + (i32.add + (get_local $W) + (i32.const 24) + ) + (get_local $g) + ) + (set_local $q + (i32.load + (i32.add + (get_local $V) + (i32.const 16) + ) + ) + ) + (block $do-once23 + (if + (get_local $q) + (if + (i32.lt_u + (get_local $q) + (get_local $s) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $W) + (i32.const 16) + ) + (get_local $q) + ) + (i32.store + (i32.add + (get_local $q) + (i32.const 24) + ) + (get_local $W) + ) + (br $do-once23) + ) + ) + ) + ) + (set_local $q + (i32.load + (i32.add + (get_local $V) + (i32.const 20) + ) + ) + ) + (if + (get_local $q) + (if + (i32.lt_u + (get_local $q) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $W) + (i32.const 20) + ) + (get_local $q) + ) + (i32.store + (i32.add + (get_local $q) + (i32.const 24) + ) + (get_local $W) + ) + (br $do-once21) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.lt_u + (get_local $U) + (i32.const 16) + ) + (block + (set_local $g + (i32.add + (get_local $U) + (get_local $e) + ) + ) + (i32.store + (i32.add + (get_local $V) + (i32.const 4) + ) + (i32.or + (get_local $g) + (i32.const 3) + ) + ) + (set_local $q + (i32.add + (i32.add + (get_local $V) + (get_local $g) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $q) + (i32.or + (i32.load + (get_local $q) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store + (i32.add + (get_local $V) + (i32.const 4) + ) + (i32.or + (get_local $e) + (i32.const 3) + ) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 4) + ) + (i32.or + (get_local $U) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i) + (get_local $U) + ) + (get_local $U) + ) + (set_local $q + (i32.shr_u + (get_local $U) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $U) + (i32.const 256) + ) + (block + (set_local $g + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $q) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $s + (i32.load + (i32.const 1208) + ) + ) + (set_local $d + (i32.shl + (i32.const 1) + (get_local $q) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $s) + (get_local $d) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $s) + (get_local $d) + ) + ) + (set_local $$ + (i32.add + (get_local $g) + (i32.const 8) + ) + ) + (set_local $aa + (get_local $g) + ) + ) + (block + (set_local $d + (i32.add + (get_local $g) + (i32.const 8) + ) + ) + (set_local $s + (i32.load + (get_local $d) + ) + ) + (if + (i32.lt_u + (get_local $s) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $$ + (get_local $d) + ) + (set_local $aa + (get_local $s) + ) + ) + ) + ) + ) + (i32.store + (get_local $$) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $aa) + (i32.const 12) + ) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 8) + ) + (get_local $aa) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 12) + ) + (get_local $g) + ) + (br $do-once25) + ) + ) + (set_local $g + (i32.shr_u + (get_local $U) + (i32.const 8) + ) + ) + (if + (i32.eqz + (get_local $g) + ) + (set_local $ba + (i32.const 0) + ) + (if + (i32.gt_u + (get_local $U) + (i32.const 16777215) + ) + (set_local $ba + (i32.const 31) + ) + (block + (set_local $s + (i32.and + (i32.shr_u + (i32.add + (get_local $g) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $d + (i32.shl + (get_local $g) + (get_local $s) + ) + ) + (set_local $g + (i32.and + (i32.shr_u + (i32.add + (get_local $d) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $q + (i32.shl + (get_local $d) + (get_local $g) + ) + ) + (set_local $d + (i32.and + (i32.shr_u + (i32.add + (get_local $q) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $t + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $g) + (get_local $s) + ) + (get_local $d) + ) + ) + (i32.shr_u + (i32.shl + (get_local $q) + (get_local $d) + ) + (i32.const 15) + ) + ) + ) + (set_local $ba + (i32.or + (i32.and + (i32.shr_u + (get_local $U) + (i32.add + (get_local $t) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $t) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $t + (i32.add + (i32.const 1512) + (i32.shl + (get_local $ba) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 28) + ) + (get_local $ba) + ) + (set_local $d + (i32.add + (get_local $i) + (i32.const 16) + ) + ) + (i32.store + (i32.add + (get_local $d) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store + (get_local $d) + (i32.const 0) + ) + (set_local $d + (i32.load + (i32.const 1212) + ) + ) + (set_local $q + (i32.shl + (i32.const 1) + (get_local $ba) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $d) + (get_local $q) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $d) + (get_local $q) + ) + ) + (i32.store + (get_local $t) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 24) + ) + (get_local $t) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 12) + ) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 8) + ) + (get_local $i) + ) + (br $do-once25) + ) + ) + (set_local $q + (i32.shl + (get_local $U) + (if (result i32) + (i32.eq + (get_local $ba) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $ba) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $d + (i32.load + (get_local $t) + ) + ) + (loop $while-in28 + (block $while-out27 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $d) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $U) + ) + (block + (set_local $ca + (get_local $d) + ) + (set_local $N + (i32.const 148) + ) + (br $while-out27) + ) + ) + (set_local $t + (i32.add + (i32.add + (get_local $d) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $q) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $s + (i32.load + (get_local $t) + ) + ) + (if + (i32.eqz + (get_local $s) + ) + (block + (set_local $da + (get_local $t) + ) + (set_local $ea + (get_local $d) + ) + (set_local $N + (i32.const 145) + ) + (br $while-out27) + ) + (block + (set_local $q + (i32.shl + (get_local $q) + (i32.const 1) + ) + ) + (set_local $d + (get_local $s) + ) + ) + ) + (br $while-in28) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 145) + ) + (if + (i32.lt_u + (get_local $da) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $da) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 24) + ) + (get_local $ea) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 12) + ) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 8) + ) + (get_local $i) + ) + (br $do-once25) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 148) + ) + (block + (set_local $d + (i32.add + (get_local $ca) + (i32.const 8) + ) + ) + (set_local $q + (i32.load + (get_local $d) + ) + ) + (set_local $s + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $q) + (get_local $s) + ) + (i32.ge_u + (get_local $ca) + (get_local $s) + ) + ) + (block + (i32.store + (i32.add + (get_local $q) + (i32.const 12) + ) + (get_local $i) + ) + (i32.store + (get_local $d) + (get_local $i) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 8) + ) + (get_local $q) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 12) + ) + (get_local $ca) + ) + (i32.store + (i32.add + (get_local $i) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once25) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + ) + (set_local $p + (i32.add + (get_local $V) + (i32.const 8) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + (set_local $y + (get_local $e) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $V + (i32.load + (i32.const 1216) + ) + ) + (if + (i32.ge_u + (get_local $V) + (get_local $y) + ) + (block + (set_local $ca + (i32.sub + (get_local $V) + (get_local $y) + ) + ) + (set_local $ea + (i32.load + (i32.const 1228) + ) + ) + (if + (i32.gt_u + (get_local $ca) + (i32.const 15) + ) + (block + (set_local $da + (i32.add + (get_local $ea) + (get_local $y) + ) + ) + (i32.store + (i32.const 1228) + (get_local $da) + ) + (i32.store + (i32.const 1216) + (get_local $ca) + ) + (i32.store + (i32.add + (get_local $da) + (i32.const 4) + ) + (i32.or + (get_local $ca) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $da) + (get_local $ca) + ) + (get_local $ca) + ) + (i32.store + (i32.add + (get_local $ea) + (i32.const 4) + ) + (i32.or + (get_local $y) + (i32.const 3) + ) + ) + ) + (block + (i32.store + (i32.const 1216) + (i32.const 0) + ) + (i32.store + (i32.const 1228) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $ea) + (i32.const 4) + ) + (i32.or + (get_local $V) + (i32.const 3) + ) + ) + (set_local $ca + (i32.add + (i32.add + (get_local $ea) + (get_local $V) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $ca) + (i32.or + (i32.load + (get_local $ca) + ) + (i32.const 1) + ) + ) + ) + ) + (set_local $p + (i32.add + (get_local $ea) + (i32.const 8) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + (set_local $ea + (i32.load + (i32.const 1220) + ) + ) + (if + (i32.gt_u + (get_local $ea) + (get_local $y) + ) + (block + (set_local $ca + (i32.sub + (get_local $ea) + (get_local $y) + ) + ) + (i32.store + (i32.const 1220) + (get_local $ca) + ) + (set_local $ea + (i32.load + (i32.const 1232) + ) + ) + (set_local $V + (i32.add + (get_local $ea) + (get_local $y) + ) + ) + (i32.store + (i32.const 1232) + (get_local $V) + ) + (i32.store + (i32.add + (get_local $V) + (i32.const 4) + ) + (i32.or + (get_local $ca) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $ea) + (i32.const 4) + ) + (i32.or + (get_local $y) + (i32.const 3) + ) + ) + (set_local $p + (i32.add + (get_local $ea) + (i32.const 8) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + (if + (i32.eqz + (i32.load + (i32.const 1680) + ) + ) + (block + (i32.store + (i32.const 1688) + (i32.const 4096) + ) + (i32.store + (i32.const 1684) + (i32.const 4096) + ) + (i32.store + (i32.const 1692) + (i32.const -1) + ) + (i32.store + (i32.const 1696) + (i32.const -1) + ) + (i32.store + (i32.const 1700) + (i32.const 0) + ) + (i32.store + (i32.const 1652) + (i32.const 0) + ) + (set_local $ea + (i32.xor + (i32.and + (get_local $c) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + (i32.store + (get_local $c) + (get_local $ea) + ) + (i32.store + (i32.const 1680) + (get_local $ea) + ) + ) + ) + (set_local $ea + (i32.add + (get_local $y) + (i32.const 48) + ) + ) + (set_local $c + (i32.load + (i32.const 1688) + ) + ) + (set_local $ca + (i32.add + (get_local $y) + (i32.const 47) + ) + ) + (set_local $V + (i32.add + (get_local $c) + (get_local $ca) + ) + ) + (set_local $da + (i32.sub + (i32.const 0) + (get_local $c) + ) + ) + (set_local $c + (i32.and + (get_local $V) + (get_local $da) + ) + ) + (if + (i32.le_u + (get_local $c) + (get_local $y) + ) + (block + (set_local $p + (i32.const 0) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + (set_local $U + (i32.load + (i32.const 1648) + ) + ) + (if + (get_local $U) + (block + (set_local $ba + (i32.load + (i32.const 1640) + ) + ) + (set_local $aa + (i32.add + (get_local $ba) + (get_local $c) + ) + ) + (if + (i32.or + (i32.le_u + (get_local $aa) + (get_local $ba) + ) + (i32.gt_u + (get_local $aa) + (get_local $U) + ) + ) + (block + (set_local $p + (i32.const 0) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + ) + ) + (block $label$break$b + (if + (i32.eqz + (i32.and + (i32.load + (i32.const 1652) + ) + (i32.const 4) + ) + ) + (block + (set_local $U + (i32.load + (i32.const 1232) + ) + ) + (block $label$break$c + (if + (i32.eqz + (get_local $U) + ) + (set_local $N + (i32.const 171) + ) + (block + (set_local $aa + (i32.const 1656) + ) + (loop $while-in32 + (block $while-out31 + (set_local $ba + (i32.load + (get_local $aa) + ) + ) + (if + (i32.le_u + (get_local $ba) + (get_local $U) + ) + (block + (set_local $$ + (i32.add + (get_local $aa) + (i32.const 4) + ) + ) + (if + (i32.gt_u + (i32.add + (get_local $ba) + (i32.load + (get_local $$) + ) + ) + (get_local $U) + ) + (block + (set_local $fa + (get_local $aa) + ) + (set_local $ga + (get_local $$) + ) + (br $while-out31) + ) + ) + ) + ) + (set_local $aa + (i32.load + (i32.add + (get_local $aa) + (i32.const 8) + ) + ) + ) + (if + (i32.eqz + (get_local $aa) + ) + (block + (set_local $N + (i32.const 171) + ) + (br $label$break$c) + ) + ) + (br $while-in32) + ) + ) + (set_local $aa + (i32.and + (i32.sub + (get_local $V) + (i32.load + (i32.const 1220) + ) + ) + (get_local $da) + ) + ) + (if + (i32.lt_u + (get_local $aa) + (i32.const 2147483647) + ) + (block + (set_local $$ + (call $ta + (get_local $aa) + ) + ) + (if + (i32.eq + (get_local $$) + (i32.add + (i32.load + (get_local $fa) + ) + (i32.load + (get_local $ga) + ) + ) + ) + (if + (i32.ne + (get_local $$) + (i32.const -1) + ) + (block + (set_local $ha + (get_local $$) + ) + (set_local $ia + (get_local $aa) + ) + (set_local $N + (i32.const 191) + ) + (br $label$break$b) + ) + ) + (block + (set_local $ja + (get_local $$) + ) + (set_local $ka + (get_local $aa) + ) + (set_local $N + (i32.const 181) + ) + ) + ) + ) + ) + ) + ) + ) + (block $do-once33 + (if + (i32.eq + (get_local $N) + (i32.const 171) + ) + (block + (set_local $U + (call $ta + (i32.const 0) + ) + ) + (if + (i32.ne + (get_local $U) + (i32.const -1) + ) + (block + (set_local $e + (get_local $U) + ) + (set_local $aa + (i32.load + (i32.const 1684) + ) + ) + (set_local $$ + (i32.add + (get_local $aa) + (i32.const -1) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $$) + (get_local $e) + ) + ) + (set_local $la + (get_local $c) + ) + (set_local $la + (i32.add + (i32.sub + (get_local $c) + (get_local $e) + ) + (i32.and + (i32.add + (get_local $$) + (get_local $e) + ) + (i32.sub + (i32.const 0) + (get_local $aa) + ) + ) + ) + ) + ) + (set_local $aa + (i32.load + (i32.const 1640) + ) + ) + (set_local $e + (i32.add + (get_local $aa) + (get_local $la) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $la) + (get_local $y) + ) + (i32.lt_u + (get_local $la) + (i32.const 2147483647) + ) + ) + (block + (set_local $$ + (i32.load + (i32.const 1648) + ) + ) + (if + (get_local $$) + (if + (i32.or + (i32.le_u + (get_local $e) + (get_local $aa) + ) + (i32.gt_u + (get_local $e) + (get_local $$) + ) + ) + (br $do-once33) + ) + ) + (set_local $$ + (call $ta + (get_local $la) + ) + ) + (if + (i32.eq + (get_local $$) + (get_local $U) + ) + (block + (set_local $ha + (get_local $U) + ) + (set_local $ia + (get_local $la) + ) + (set_local $N + (i32.const 191) + ) + (br $label$break$b) + ) + (block + (set_local $ja + (get_local $$) + ) + (set_local $ka + (get_local $la) + ) + (set_local $N + (i32.const 181) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (block $label$break$d + (if + (i32.eq + (get_local $N) + (i32.const 181) + ) + (block + (set_local $$ + (i32.sub + (i32.const 0) + (get_local $ka) + ) + ) + (block $do-once36 + (if + (i32.and + (i32.gt_u + (get_local $ea) + (get_local $ka) + ) + (i32.and + (i32.lt_u + (get_local $ka) + (i32.const 2147483647) + ) + (i32.ne + (get_local $ja) + (i32.const -1) + ) + ) + ) + (block + (set_local $U + (i32.load + (i32.const 1688) + ) + ) + (set_local $e + (i32.and + (i32.add + (i32.sub + (get_local $ca) + (get_local $ka) + ) + (get_local $U) + ) + (i32.sub + (i32.const 0) + (get_local $U) + ) + ) + ) + (if + (i32.lt_u + (get_local $e) + (i32.const 2147483647) + ) + (if + (i32.eq + (call $ta + (get_local $e) + ) + (i32.const -1) + ) + (block + (drop + (call $ta + (get_local $$) + ) + ) + (br $label$break$d) + ) + (block + (set_local $ma + (i32.add + (get_local $e) + (get_local $ka) + ) + ) + (br $do-once36) + ) + ) + (set_local $ma + (get_local $ka) + ) + ) + ) + (set_local $ma + (get_local $ka) + ) + ) + ) + (if + (i32.ne + (get_local $ja) + (i32.const -1) + ) + (block + (set_local $ha + (get_local $ja) + ) + (set_local $ia + (get_local $ma) + ) + (set_local $N + (i32.const 191) + ) + (br $label$break$b) + ) + ) + ) + ) + ) + (i32.store + (i32.const 1652) + (i32.or + (i32.load + (i32.const 1652) + ) + (i32.const 4) + ) + ) + (set_local $N + (i32.const 188) + ) + ) + (set_local $N + (i32.const 188) + ) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 188) + ) + (if + (i32.lt_u + (get_local $c) + (i32.const 2147483647) + ) + (block + (set_local $ma + (call $ta + (get_local $c) + ) + ) + (set_local $c + (call $ta + (i32.const 0) + ) + ) + (if + (i32.and + (i32.lt_u + (get_local $ma) + (get_local $c) + ) + (i32.and + (i32.ne + (get_local $ma) + (i32.const -1) + ) + (i32.ne + (get_local $c) + (i32.const -1) + ) + ) + ) + (block + (set_local $ja + (i32.sub + (get_local $c) + (get_local $ma) + ) + ) + (if + (i32.gt_u + (get_local $ja) + (i32.add + (get_local $y) + (i32.const 40) + ) + ) + (block + (set_local $ha + (get_local $ma) + ) + (set_local $ia + (get_local $ja) + ) + (set_local $N + (i32.const 191) + ) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 191) + ) + (block + (set_local $ja + (i32.add + (i32.load + (i32.const 1640) + ) + (get_local $ia) + ) + ) + (i32.store + (i32.const 1640) + (get_local $ja) + ) + (if + (i32.gt_u + (get_local $ja) + (i32.load + (i32.const 1644) + ) + ) + (i32.store + (i32.const 1644) + (get_local $ja) + ) + ) + (set_local $ja + (i32.load + (i32.const 1232) + ) + ) + (block $do-once38 + (if + (i32.eqz + (get_local $ja) + ) + (block + (set_local $ma + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.or + (i32.eq + (get_local $ma) + (i32.const 0) + ) + (i32.lt_u + (get_local $ha) + (get_local $ma) + ) + ) + (i32.store + (i32.const 1224) + (get_local $ha) + ) + ) + (i32.store + (i32.const 1656) + (get_local $ha) + ) + (i32.store + (i32.const 1660) + (get_local $ia) + ) + (i32.store + (i32.const 1668) + (i32.const 0) + ) + (i32.store + (i32.const 1244) + (i32.load + (i32.const 1680) + ) + ) + (i32.store + (i32.const 1240) + (i32.const -1) + ) + (set_local $ma + (i32.const 0) + ) + (loop $do-in + (block $do-out + (set_local $c + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $ma) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $c) + (i32.const 12) + ) + (get_local $c) + ) + (i32.store + (i32.add + (get_local $c) + (i32.const 8) + ) + (get_local $c) + ) + (set_local $ma + (i32.add + (get_local $ma) + (i32.const 1) + ) + ) + (br_if $do-in + (i32.ne + (get_local $ma) + (i32.const 32) + ) + ) + ) + ) + (set_local $ma + (i32.add + (get_local $ha) + (i32.const 8) + ) + ) + (set_local $c + (if (result i32) + (i32.eq + (i32.and + (get_local $ma) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ma) + ) + (i32.const 7) + ) + ) + ) + (set_local $ma + (i32.add + (get_local $ha) + (get_local $c) + ) + ) + (set_local $ka + (i32.sub + (i32.add + (get_local $ia) + (i32.const -40) + ) + (get_local $c) + ) + ) + (i32.store + (i32.const 1232) + (get_local $ma) + ) + (i32.store + (i32.const 1220) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ma) + (i32.const 4) + ) + (i32.or + (get_local $ka) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $ma) + (get_local $ka) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + ) + (block + (set_local $ka + (i32.const 1656) + ) + (loop $do-in41 + (block $do-out40 + (set_local $ma + (i32.load + (get_local $ka) + ) + ) + (set_local $c + (i32.add + (get_local $ka) + (i32.const 4) + ) + ) + (set_local $ca + (i32.load + (get_local $c) + ) + ) + (if + (i32.eq + (get_local $ha) + (i32.add + (get_local $ma) + (get_local $ca) + ) + ) + (block + (set_local $na + (get_local $ma) + ) + (set_local $oa + (get_local $c) + ) + (set_local $pa + (get_local $ca) + ) + (set_local $ra + (get_local $ka) + ) + (set_local $N + (i32.const 201) + ) + (br $do-out40) + ) + ) + (set_local $ka + (i32.load + (i32.add + (get_local $ka) + (i32.const 8) + ) + ) + ) + (br_if $do-in41 + (i32.ne + (get_local $ka) + (i32.const 0) + ) + ) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 201) + ) + (if + (i32.eqz + (i32.and + (i32.load + (i32.add + (get_local $ra) + (i32.const 12) + ) + ) + (i32.const 8) + ) + ) + (if + (i32.and + (i32.lt_u + (get_local $ja) + (get_local $ha) + ) + (i32.ge_u + (get_local $ja) + (get_local $na) + ) + ) + (block + (i32.store + (get_local $oa) + (i32.add + (get_local $pa) + (get_local $ia) + ) + ) + (set_local $ka + (i32.add + (get_local $ja) + (i32.const 8) + ) + ) + (set_local $ca + (if (result i32) + (i32.eq + (i32.and + (get_local $ka) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ka) + ) + (i32.const 7) + ) + ) + ) + (set_local $ka + (i32.add + (get_local $ja) + (get_local $ca) + ) + ) + (set_local $c + (i32.add + (i32.sub + (get_local $ia) + (get_local $ca) + ) + (i32.load + (i32.const 1220) + ) + ) + ) + (i32.store + (i32.const 1232) + (get_local $ka) + ) + (i32.store + (i32.const 1220) + (get_local $c) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 4) + ) + (i32.or + (get_local $c) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $ka) + (get_local $c) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + (br $do-once38) + ) + ) + ) + ) + (set_local $c + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $ha) + (get_local $c) + ) + (block + (i32.store + (i32.const 1224) + (get_local $ha) + ) + (set_local $sa + (get_local $ha) + ) + ) + (set_local $sa + (get_local $c) + ) + ) + (set_local $c + (i32.add + (get_local $ha) + (get_local $ia) + ) + ) + (set_local $ka + (i32.const 1656) + ) + (loop $while-in43 + (block $while-out42 + (if + (i32.eq + (i32.load + (get_local $ka) + ) + (get_local $c) + ) + (block + (set_local $ua + (get_local $ka) + ) + (set_local $va + (get_local $ka) + ) + (set_local $N + (i32.const 209) + ) + (br $while-out42) + ) + ) + (set_local $ka + (i32.load + (i32.add + (get_local $ka) + (i32.const 8) + ) + ) + ) + (if + (i32.eqz + (get_local $ka) + ) + (block + (set_local $wa + (i32.const 1656) + ) + (br $while-out42) + ) + ) + (br $while-in43) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 209) + ) + (if + (i32.eqz + (i32.and + (i32.load + (i32.add + (get_local $va) + (i32.const 12) + ) + ) + (i32.const 8) + ) + ) + (block + (i32.store + (get_local $ua) + (get_local $ha) + ) + (set_local $ka + (i32.add + (get_local $va) + (i32.const 4) + ) + ) + (i32.store + (get_local $ka) + (i32.add + (i32.load + (get_local $ka) + ) + (get_local $ia) + ) + ) + (set_local $ka + (i32.add + (get_local $ha) + (i32.const 8) + ) + ) + (set_local $ca + (i32.add + (get_local $ha) + (if (result i32) + (i32.eq + (i32.and + (get_local $ka) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ka) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $ka + (i32.add + (get_local $c) + (i32.const 8) + ) + ) + (set_local $ma + (i32.add + (get_local $c) + (if (result i32) + (i32.eq + (i32.and + (get_local $ka) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ka) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $ka + (i32.add + (get_local $ca) + (get_local $y) + ) + ) + (set_local $ea + (i32.sub + (i32.sub + (get_local $ma) + (get_local $ca) + ) + (get_local $y) + ) + ) + (i32.store + (i32.add + (get_local $ca) + (i32.const 4) + ) + (i32.or + (get_local $y) + (i32.const 3) + ) + ) + (block $do-once44 + (if + (i32.eq + (get_local $ma) + (get_local $ja) + ) + (block + (set_local $la + (i32.add + (i32.load + (i32.const 1220) + ) + (get_local $ea) + ) + ) + (i32.store + (i32.const 1220) + (get_local $la) + ) + (i32.store + (i32.const 1232) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 4) + ) + (i32.or + (get_local $la) + (i32.const 1) + ) + ) + ) + (block + (if + (i32.eq + (get_local $ma) + (i32.load + (i32.const 1228) + ) + ) + (block + (set_local $la + (i32.add + (i32.load + (i32.const 1216) + ) + (get_local $ea) + ) + ) + (i32.store + (i32.const 1216) + (get_local $la) + ) + (i32.store + (i32.const 1228) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 4) + ) + (i32.or + (get_local $la) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (get_local $la) + ) + (get_local $la) + ) + (br $do-once44) + ) + ) + (set_local $la + (i32.load + (i32.add + (get_local $ma) + (i32.const 4) + ) + ) + ) + (if + (i32.eq + (i32.and + (get_local $la) + (i32.const 3) + ) + (i32.const 1) + ) + (block + (set_local $ga + (i32.and + (get_local $la) + (i32.const -8) + ) + ) + (set_local $fa + (i32.shr_u + (get_local $la) + (i32.const 3) + ) + ) + (block $label$break$e + (if + (i32.lt_u + (get_local $la) + (i32.const 256) + ) + (block + (set_local $da + (i32.load + (i32.add + (get_local $ma) + (i32.const 8) + ) + ) + ) + (set_local $V + (i32.load + (i32.add + (get_local $ma) + (i32.const 12) + ) + ) + ) + (set_local $$ + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $fa) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (block $do-once47 + (if + (i32.ne + (get_local $da) + (get_local $$) + ) + (block + (if + (i32.lt_u + (get_local $da) + (get_local $sa) + ) + (call $qa) + ) + (if + (i32.eq + (i32.load + (i32.add + (get_local $da) + (i32.const 12) + ) + ) + (get_local $ma) + ) + (br $do-once47) + ) + (call $qa) + ) + ) + ) + (if + (i32.eq + (get_local $V) + (get_local $da) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (i32.load + (i32.const 1208) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $fa) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$e) + ) + ) + (block $do-once49 + (if + (i32.eq + (get_local $V) + (get_local $$) + ) + (set_local $xa + (i32.add + (get_local $V) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $V) + (get_local $sa) + ) + (call $qa) + ) + (set_local $e + (i32.add + (get_local $V) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $e) + ) + (get_local $ma) + ) + (block + (set_local $xa + (get_local $e) + ) + (br $do-once49) + ) + ) + (call $qa) + ) + ) + ) + (i32.store + (i32.add + (get_local $da) + (i32.const 12) + ) + (get_local $V) + ) + (i32.store + (get_local $xa) + (get_local $da) + ) + ) + (block + (set_local $$ + (i32.load + (i32.add + (get_local $ma) + (i32.const 24) + ) + ) + ) + (set_local $e + (i32.load + (i32.add + (get_local $ma) + (i32.const 12) + ) + ) + ) + (block $do-once51 + (if + (i32.eq + (get_local $e) + (get_local $ma) + ) + (block + (set_local $U + (i32.add + (get_local $ma) + (i32.const 16) + ) + ) + (set_local $aa + (i32.add + (get_local $U) + (i32.const 4) + ) + ) + (set_local $ba + (i32.load + (get_local $aa) + ) + ) + (if + (i32.eqz + (get_local $ba) + ) + (block + (set_local $W + (i32.load + (get_local $U) + ) + ) + (if + (i32.eqz + (get_local $W) + ) + (block + (set_local $ya + (i32.const 0) + ) + (br $do-once51) + ) + (block + (set_local $za + (get_local $W) + ) + (set_local $Aa + (get_local $U) + ) + ) + ) + ) + (block + (set_local $za + (get_local $ba) + ) + (set_local $Aa + (get_local $aa) + ) + ) + ) + (loop $while-in54 + (block $while-out53 + (set_local $aa + (i32.add + (get_local $za) + (i32.const 20) + ) + ) + (set_local $ba + (i32.load + (get_local $aa) + ) + ) + (if + (get_local $ba) + (block + (set_local $za + (get_local $ba) + ) + (set_local $Aa + (get_local $aa) + ) + (br $while-in54) + ) + ) + (set_local $aa + (i32.add + (get_local $za) + (i32.const 16) + ) + ) + (set_local $ba + (i32.load + (get_local $aa) + ) + ) + (if + (i32.eqz + (get_local $ba) + ) + (block + (set_local $Ba + (get_local $za) + ) + (set_local $Ca + (get_local $Aa) + ) + (br $while-out53) + ) + (block + (set_local $za + (get_local $ba) + ) + (set_local $Aa + (get_local $aa) + ) + ) + ) + (br $while-in54) + ) + ) + (if + (i32.lt_u + (get_local $Ca) + (get_local $sa) + ) + (call $qa) + (block + (i32.store + (get_local $Ca) + (i32.const 0) + ) + (set_local $ya + (get_local $Ba) + ) + (br $do-once51) + ) + ) + ) + (block + (set_local $aa + (i32.load + (i32.add + (get_local $ma) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $aa) + (get_local $sa) + ) + (call $qa) + ) + (set_local $ba + (i32.add + (get_local $aa) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $ba) + ) + (get_local $ma) + ) + (call $qa) + ) + (set_local $U + (i32.add + (get_local $e) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $U) + ) + (get_local $ma) + ) + (block + (i32.store + (get_local $ba) + (get_local $e) + ) + (i32.store + (get_local $U) + (get_local $aa) + ) + (set_local $ya + (get_local $e) + ) + (br $do-once51) + ) + (call $qa) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $$) + ) + (br $label$break$e) + ) + (set_local $e + (i32.load + (i32.add + (get_local $ma) + (i32.const 28) + ) + ) + ) + (set_local $da + (i32.add + (i32.const 1512) + (i32.shl + (get_local $e) + (i32.const 2) + ) + ) + ) + (block $do-once55 + (if + (i32.eq + (get_local $ma) + (i32.load + (get_local $da) + ) + ) + (block + (i32.store + (get_local $da) + (get_local $ya) + ) + (if + (get_local $ya) + (br $do-once55) + ) + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $e) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$e) + ) + (block + (if + (i32.lt_u + (get_local $$) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $V + (i32.add + (get_local $$) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $V) + ) + (get_local $ma) + ) + (i32.store + (get_local $V) + (get_local $ya) + ) + (i32.store + (i32.add + (get_local $$) + (i32.const 20) + ) + (get_local $ya) + ) + ) + (if + (i32.eqz + (get_local $ya) + ) + (br $label$break$e) + ) + ) + ) + ) + (set_local $e + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $ya) + (get_local $e) + ) + (call $qa) + ) + (i32.store + (i32.add + (get_local $ya) + (i32.const 24) + ) + (get_local $$) + ) + (set_local $da + (i32.add + (get_local $ma) + (i32.const 16) + ) + ) + (set_local $V + (i32.load + (get_local $da) + ) + ) + (block $do-once57 + (if + (get_local $V) + (if + (i32.lt_u + (get_local $V) + (get_local $e) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $ya) + (i32.const 16) + ) + (get_local $V) + ) + (i32.store + (i32.add + (get_local $V) + (i32.const 24) + ) + (get_local $ya) + ) + (br $do-once57) + ) + ) + ) + ) + (set_local $V + (i32.load + (i32.add + (get_local $da) + (i32.const 4) + ) + ) + ) + (if + (i32.eqz + (get_local $V) + ) + (br $label$break$e) + ) + (if + (i32.lt_u + (get_local $V) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $ya) + (i32.const 20) + ) + (get_local $V) + ) + (i32.store + (i32.add + (get_local $V) + (i32.const 24) + ) + (get_local $ya) + ) + (br $label$break$e) + ) + ) + ) + ) + ) + (set_local $Da + (i32.add + (get_local $ma) + (get_local $ga) + ) + ) + (set_local $Ea + (i32.add + (get_local $ga) + (get_local $ea) + ) + ) + ) + (block + (set_local $Da + (get_local $ma) + ) + (set_local $Ea + (get_local $ea) + ) + ) + ) + (set_local $fa + (i32.add + (get_local $Da) + (i32.const 4) + ) + ) + (i32.store + (get_local $fa) + (i32.and + (i32.load + (get_local $fa) + ) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 4) + ) + (i32.or + (get_local $Ea) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (get_local $Ea) + ) + (get_local $Ea) + ) + (set_local $fa + (i32.shr_u + (get_local $Ea) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $Ea) + (i32.const 256) + ) + (block + (set_local $la + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $fa) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $V + (i32.load + (i32.const 1208) + ) + ) + (set_local $e + (i32.shl + (i32.const 1) + (get_local $fa) + ) + ) + (block $do-once59 + (if + (i32.eqz + (i32.and + (get_local $V) + (get_local $e) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $V) + (get_local $e) + ) + ) + (set_local $Fa + (i32.add + (get_local $la) + (i32.const 8) + ) + ) + (set_local $Ga + (get_local $la) + ) + ) + (block + (set_local $fa + (i32.add + (get_local $la) + (i32.const 8) + ) + ) + (set_local $$ + (i32.load + (get_local $fa) + ) + ) + (if + (i32.ge_u + (get_local $$) + (i32.load + (i32.const 1224) + ) + ) + (block + (set_local $Fa + (get_local $fa) + ) + (set_local $Ga + (get_local $$) + ) + (br $do-once59) + ) + ) + (call $qa) + ) + ) + ) + (i32.store + (get_local $Fa) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $Ga) + (i32.const 12) + ) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 8) + ) + (get_local $Ga) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 12) + ) + (get_local $la) + ) + (br $do-once44) + ) + ) + (set_local $e + (i32.shr_u + (get_local $Ea) + (i32.const 8) + ) + ) + (block $do-once61 + (if + (i32.eqz + (get_local $e) + ) + (set_local $Ha + (i32.const 0) + ) + (block + (if + (i32.gt_u + (get_local $Ea) + (i32.const 16777215) + ) + (block + (set_local $Ha + (i32.const 31) + ) + (br $do-once61) + ) + ) + (set_local $V + (i32.and + (i32.shr_u + (i32.add + (get_local $e) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $ga + (i32.shl + (get_local $e) + (get_local $V) + ) + ) + (set_local $$ + (i32.and + (i32.shr_u + (i32.add + (get_local $ga) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $fa + (i32.shl + (get_local $ga) + (get_local $$) + ) + ) + (set_local $ga + (i32.and + (i32.shr_u + (i32.add + (get_local $fa) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $aa + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $$) + (get_local $V) + ) + (get_local $ga) + ) + ) + (i32.shr_u + (i32.shl + (get_local $fa) + (get_local $ga) + ) + (i32.const 15) + ) + ) + ) + (set_local $Ha + (i32.or + (i32.and + (i32.shr_u + (get_local $Ea) + (i32.add + (get_local $aa) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $aa) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $e + (i32.add + (i32.const 1512) + (i32.shl + (get_local $Ha) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 28) + ) + (get_local $Ha) + ) + (set_local $la + (i32.add + (get_local $ka) + (i32.const 16) + ) + ) + (i32.store + (i32.add + (get_local $la) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store + (get_local $la) + (i32.const 0) + ) + (set_local $la + (i32.load + (i32.const 1212) + ) + ) + (set_local $aa + (i32.shl + (i32.const 1) + (get_local $Ha) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $la) + (get_local $aa) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $la) + (get_local $aa) + ) + ) + (i32.store + (get_local $e) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 24) + ) + (get_local $e) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 12) + ) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 8) + ) + (get_local $ka) + ) + (br $do-once44) + ) + ) + (set_local $aa + (i32.shl + (get_local $Ea) + (if (result i32) + (i32.eq + (get_local $Ha) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $Ha) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $la + (i32.load + (get_local $e) + ) + ) + (loop $while-in64 + (block $while-out63 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $la) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $Ea) + ) + (block + (set_local $Ia + (get_local $la) + ) + (set_local $N + (i32.const 279) + ) + (br $while-out63) + ) + ) + (set_local $e + (i32.add + (i32.add + (get_local $la) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $aa) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $ga + (i32.load + (get_local $e) + ) + ) + (if + (i32.eqz + (get_local $ga) + ) + (block + (set_local $Ja + (get_local $e) + ) + (set_local $Ka + (get_local $la) + ) + (set_local $N + (i32.const 276) + ) + (br $while-out63) + ) + (block + (set_local $aa + (i32.shl + (get_local $aa) + (i32.const 1) + ) + ) + (set_local $la + (get_local $ga) + ) + ) + ) + (br $while-in64) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 276) + ) + (if + (i32.lt_u + (get_local $Ja) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $Ja) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 24) + ) + (get_local $Ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 12) + ) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 8) + ) + (get_local $ka) + ) + (br $do-once44) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 279) + ) + (block + (set_local $la + (i32.add + (get_local $Ia) + (i32.const 8) + ) + ) + (set_local $aa + (i32.load + (get_local $la) + ) + ) + (set_local $ga + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $aa) + (get_local $ga) + ) + (i32.ge_u + (get_local $Ia) + (get_local $ga) + ) + ) + (block + (i32.store + (i32.add + (get_local $aa) + (i32.const 12) + ) + (get_local $ka) + ) + (i32.store + (get_local $la) + (get_local $ka) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 8) + ) + (get_local $aa) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 12) + ) + (get_local $Ia) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once44) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + ) + (set_local $p + (i32.add + (get_local $ca) + (i32.const 8) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + (set_local $wa + (i32.const 1656) + ) + ) + ) + (loop $while-in66 + (block $while-out65 + (set_local $ka + (i32.load + (get_local $wa) + ) + ) + (if + (i32.le_u + (get_local $ka) + (get_local $ja) + ) + (block + (set_local $ea + (i32.add + (get_local $ka) + (i32.load + (i32.add + (get_local $wa) + (i32.const 4) + ) + ) + ) + ) + (if + (i32.gt_u + (get_local $ea) + (get_local $ja) + ) + (block + (set_local $La + (get_local $ea) + ) + (br $while-out65) + ) + ) + ) + ) + (set_local $wa + (i32.load + (i32.add + (get_local $wa) + (i32.const 8) + ) + ) + ) + (br $while-in66) + ) + ) + (set_local $ca + (i32.add + (get_local $La) + (i32.const -47) + ) + ) + (set_local $ea + (i32.add + (get_local $ca) + (i32.const 8) + ) + ) + (set_local $ka + (i32.add + (get_local $ca) + (if (result i32) + (i32.eq + (i32.and + (get_local $ea) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ea) + ) + (i32.const 7) + ) + ) + ) + ) + (set_local $ea + (i32.add + (get_local $ja) + (i32.const 16) + ) + ) + (set_local $ca + (if (result i32) + (i32.lt_u + (get_local $ka) + (get_local $ea) + ) + (get_local $ja) + (get_local $ka) + ) + ) + (set_local $ka + (i32.add + (get_local $ca) + (i32.const 8) + ) + ) + (set_local $ma + (i32.add + (get_local $ha) + (i32.const 8) + ) + ) + (set_local $c + (if (result i32) + (i32.eq + (i32.and + (get_local $ma) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ma) + ) + (i32.const 7) + ) + ) + ) + (set_local $ma + (i32.add + (get_local $ha) + (get_local $c) + ) + ) + (set_local $aa + (i32.sub + (i32.add + (get_local $ia) + (i32.const -40) + ) + (get_local $c) + ) + ) + (i32.store + (i32.const 1232) + (get_local $ma) + ) + (i32.store + (i32.const 1220) + (get_local $aa) + ) + (i32.store + (i32.add + (get_local $ma) + (i32.const 4) + ) + (i32.or + (get_local $aa) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $ma) + (get_local $aa) + ) + (i32.const 4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + (set_local $aa + (i32.add + (get_local $ca) + (i32.const 4) + ) + ) + (i32.store + (get_local $aa) + (i32.const 27) + ) + (i32.store + (get_local $ka) + (i32.load + (i32.const 1656) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 4) + ) + (i32.load + (i32.const 1660) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 8) + ) + (i32.load + (i32.const 1664) + ) + ) + (i32.store + (i32.add + (get_local $ka) + (i32.const 12) + ) + (i32.load + (i32.const 1668) + ) + ) + (i32.store + (i32.const 1656) + (get_local $ha) + ) + (i32.store + (i32.const 1660) + (get_local $ia) + ) + (i32.store + (i32.const 1668) + (i32.const 0) + ) + (i32.store + (i32.const 1664) + (get_local $ka) + ) + (set_local $ka + (i32.add + (get_local $ca) + (i32.const 24) + ) + ) + (loop $do-in68 + (block $do-out67 + (set_local $ka + (i32.add + (get_local $ka) + (i32.const 4) + ) + ) + (i32.store + (get_local $ka) + (i32.const 7) + ) + (br_if $do-in68 + (i32.lt_u + (i32.add + (get_local $ka) + (i32.const 4) + ) + (get_local $La) + ) + ) + ) + ) + (if + (i32.ne + (get_local $ca) + (get_local $ja) + ) + (block + (set_local $ka + (i32.sub + (get_local $ca) + (get_local $ja) + ) + ) + (i32.store + (get_local $aa) + (i32.and + (i32.load + (get_local $aa) + ) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 4) + ) + (i32.or + (get_local $ka) + (i32.const 1) + ) + ) + (i32.store + (get_local $ca) + (get_local $ka) + ) + (set_local $ma + (i32.shr_u + (get_local $ka) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $ka) + (i32.const 256) + ) + (block + (set_local $c + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $ma) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $la + (i32.load + (i32.const 1208) + ) + ) + (set_local $ga + (i32.shl + (i32.const 1) + (get_local $ma) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $la) + (get_local $ga) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $la) + (get_local $ga) + ) + ) + (set_local $Ma + (i32.add + (get_local $c) + (i32.const 8) + ) + ) + (set_local $Na + (get_local $c) + ) + ) + (block + (set_local $ga + (i32.add + (get_local $c) + (i32.const 8) + ) + ) + (set_local $la + (i32.load + (get_local $ga) + ) + ) + (if + (i32.lt_u + (get_local $la) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $Ma + (get_local $ga) + ) + (set_local $Na + (get_local $la) + ) + ) + ) + ) + ) + (i32.store + (get_local $Ma) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $Na) + (i32.const 12) + ) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 8) + ) + (get_local $Na) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 12) + ) + (get_local $c) + ) + (br $do-once38) + ) + ) + (set_local $c + (i32.shr_u + (get_local $ka) + (i32.const 8) + ) + ) + (if + (i32.eqz + (get_local $c) + ) + (set_local $Oa + (i32.const 0) + ) + (if + (i32.gt_u + (get_local $ka) + (i32.const 16777215) + ) + (set_local $Oa + (i32.const 31) + ) + (block + (set_local $la + (i32.and + (i32.shr_u + (i32.add + (get_local $c) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $ga + (i32.shl + (get_local $c) + (get_local $la) + ) + ) + (set_local $c + (i32.and + (i32.shr_u + (i32.add + (get_local $ga) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $ma + (i32.shl + (get_local $ga) + (get_local $c) + ) + ) + (set_local $ga + (i32.and + (i32.shr_u + (i32.add + (get_local $ma) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $e + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $c) + (get_local $la) + ) + (get_local $ga) + ) + ) + (i32.shr_u + (i32.shl + (get_local $ma) + (get_local $ga) + ) + (i32.const 15) + ) + ) + ) + (set_local $Oa + (i32.or + (i32.and + (i32.shr_u + (get_local $ka) + (i32.add + (get_local $e) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $e) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $e + (i32.add + (i32.const 1512) + (i32.shl + (get_local $Oa) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 28) + ) + (get_local $Oa) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 20) + ) + (i32.const 0) + ) + (i32.store + (get_local $ea) + (i32.const 0) + ) + (set_local $ga + (i32.load + (i32.const 1212) + ) + ) + (set_local $ma + (i32.shl + (i32.const 1) + (get_local $Oa) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $ga) + (get_local $ma) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $ga) + (get_local $ma) + ) + ) + (i32.store + (get_local $e) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 24) + ) + (get_local $e) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 12) + ) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 8) + ) + (get_local $ja) + ) + (br $do-once38) + ) + ) + (set_local $ma + (i32.shl + (get_local $ka) + (if (result i32) + (i32.eq + (get_local $Oa) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $Oa) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $ga + (i32.load + (get_local $e) + ) + ) + (loop $while-in70 + (block $while-out69 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $ga) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $ka) + ) + (block + (set_local $Pa + (get_local $ga) + ) + (set_local $N + (i32.const 305) + ) + (br $while-out69) + ) + ) + (set_local $e + (i32.add + (i32.add + (get_local $ga) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $ma) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $la + (i32.load + (get_local $e) + ) + ) + (if + (i32.eqz + (get_local $la) + ) + (block + (set_local $Ra + (get_local $e) + ) + (set_local $Sa + (get_local $ga) + ) + (set_local $N + (i32.const 302) + ) + (br $while-out69) + ) + (block + (set_local $ma + (i32.shl + (get_local $ma) + (i32.const 1) + ) + ) + (set_local $ga + (get_local $la) + ) + ) + ) + (br $while-in70) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 302) + ) + (if + (i32.lt_u + (get_local $Ra) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $Ra) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 24) + ) + (get_local $Sa) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 12) + ) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 8) + ) + (get_local $ja) + ) + (br $do-once38) + ) + ) + (if + (i32.eq + (get_local $N) + (i32.const 305) + ) + (block + (set_local $ga + (i32.add + (get_local $Pa) + (i32.const 8) + ) + ) + (set_local $ma + (i32.load + (get_local $ga) + ) + ) + (set_local $ka + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $ma) + (get_local $ka) + ) + (i32.ge_u + (get_local $Pa) + (get_local $ka) + ) + ) + (block + (i32.store + (i32.add + (get_local $ma) + (i32.const 12) + ) + (get_local $ja) + ) + (i32.store + (get_local $ga) + (get_local $ja) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 8) + ) + (get_local $ma) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 12) + ) + (get_local $Pa) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once38) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $ja + (i32.load + (i32.const 1220) + ) + ) + (if + (i32.gt_u + (get_local $ja) + (get_local $y) + ) + (block + (set_local $Pa + (i32.sub + (get_local $ja) + (get_local $y) + ) + ) + (i32.store + (i32.const 1220) + (get_local $Pa) + ) + (set_local $ja + (i32.load + (i32.const 1232) + ) + ) + (set_local $N + (i32.add + (get_local $ja) + (get_local $y) + ) + ) + (i32.store + (i32.const 1232) + (get_local $N) + ) + (i32.store + (i32.add + (get_local $N) + (i32.const 4) + ) + (i32.or + (get_local $Pa) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $ja) + (i32.const 4) + ) + (i32.or + (get_local $y) + (i32.const 3) + ) + ) + (set_local $p + (i32.add + (get_local $ja) + (i32.const 8) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + ) + ) + ) + (set_local $ja + (call $Qa) + ) + (i32.store + (get_local $ja) + (i32.const 12) + ) + (set_local $p + (i32.const 0) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $p) + ) + ) + (func $fb (; 13 ;) (param $a i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $i i32) + (local $j i32) + (local $l i32) + (local $m i32) + (local $n i32) + (local $o i32) + (local $p i32) + (local $q i32) + (local $r i32) + (local $s i32) + (local $t i32) + (local $u i32) + (local $v i32) + (local $w i32) + (local $x i32) + (local $y i32) + (local $z i32) + (local $A i32) + (local $B i32) + (local $C i32) + (local $D i32) + (local $E i32) + (local $F i32) + (local $G i32) + (local $H i32) + (local $I i32) + (local $J i32) + (local $K i32) + (local $L i32) + (if + (i32.eqz + (get_local $a) + ) + (return) + ) + (set_local $b + (i32.add + (get_local $a) + (i32.const -8) + ) + ) + (set_local $c + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $b) + (get_local $c) + ) + (call $qa) + ) + (set_local $d + (i32.load + (i32.add + (get_local $a) + (i32.const -4) + ) + ) + ) + (set_local $a + (i32.and + (get_local $d) + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $a) + (i32.const 1) + ) + (call $qa) + ) + (set_local $e + (i32.and + (get_local $d) + (i32.const -8) + ) + ) + (set_local $f + (i32.add + (get_local $b) + (get_local $e) + ) + ) + (block $do-once + (if + (i32.eqz + (i32.and + (get_local $d) + (i32.const 1) + ) + ) + (block + (set_local $g + (i32.load + (get_local $b) + ) + ) + (if + (i32.eqz + (get_local $a) + ) + (return) + ) + (set_local $h + (i32.add + (get_local $b) + (i32.sub + (i32.const 0) + (get_local $g) + ) + ) + ) + (set_local $i + (i32.add + (get_local $g) + (get_local $e) + ) + ) + (if + (i32.lt_u + (get_local $h) + (get_local $c) + ) + (call $qa) + ) + (if + (i32.eq + (get_local $h) + (i32.load + (i32.const 1228) + ) + ) + (block + (set_local $j + (i32.add + (get_local $f) + (i32.const 4) + ) + ) + (set_local $l + (i32.load + (get_local $j) + ) + ) + (if + (i32.ne + (i32.and + (get_local $l) + (i32.const 3) + ) + (i32.const 3) + ) + (block + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 1216) + (get_local $i) + ) + (i32.store + (get_local $j) + (i32.and + (get_local $l) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $h) + (i32.const 4) + ) + (i32.or + (get_local $i) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $h) + (get_local $i) + ) + (get_local $i) + ) + (return) + ) + ) + (set_local $l + (i32.shr_u + (get_local $g) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $g) + (i32.const 256) + ) + (block + (set_local $g + (i32.load + (i32.add + (get_local $h) + (i32.const 8) + ) + ) + ) + (set_local $j + (i32.load + (i32.add + (get_local $h) + (i32.const 12) + ) + ) + ) + (set_local $o + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $l) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.ne + (get_local $g) + (get_local $o) + ) + (block + (if + (i32.lt_u + (get_local $g) + (get_local $c) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (i32.add + (get_local $g) + (i32.const 12) + ) + ) + (get_local $h) + ) + (call $qa) + ) + ) + ) + (if + (i32.eq + (get_local $j) + (get_local $g) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (i32.load + (i32.const 1208) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $l) + ) + (i32.const -1) + ) + ) + ) + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (get_local $j) + (get_local $o) + ) + (set_local $p + (i32.add + (get_local $j) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $j) + (get_local $c) + ) + (call $qa) + ) + (set_local $o + (i32.add + (get_local $j) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $o) + ) + (get_local $h) + ) + (set_local $p + (get_local $o) + ) + (call $qa) + ) + ) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 12) + ) + (get_local $j) + ) + (i32.store + (get_local $p) + (get_local $g) + ) + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + (br $do-once) + ) + ) + (set_local $g + (i32.load + (i32.add + (get_local $h) + (i32.const 24) + ) + ) + ) + (set_local $j + (i32.load + (i32.add + (get_local $h) + (i32.const 12) + ) + ) + ) + (block $do-once0 + (if + (i32.eq + (get_local $j) + (get_local $h) + ) + (block + (set_local $o + (i32.add + (get_local $h) + (i32.const 16) + ) + ) + (set_local $l + (i32.add + (get_local $o) + (i32.const 4) + ) + ) + (set_local $q + (i32.load + (get_local $l) + ) + ) + (if + (i32.eqz + (get_local $q) + ) + (block + (set_local $r + (i32.load + (get_local $o) + ) + ) + (if + (i32.eqz + (get_local $r) + ) + (block + (set_local $s + (i32.const 0) + ) + (br $do-once0) + ) + (block + (set_local $t + (get_local $r) + ) + (set_local $u + (get_local $o) + ) + ) + ) + ) + (block + (set_local $t + (get_local $q) + ) + (set_local $u + (get_local $l) + ) + ) + ) + (loop $while-in + (block $while-out + (set_local $l + (i32.add + (get_local $t) + (i32.const 20) + ) + ) + (set_local $q + (i32.load + (get_local $l) + ) + ) + (if + (get_local $q) + (block + (set_local $t + (get_local $q) + ) + (set_local $u + (get_local $l) + ) + (br $while-in) + ) + ) + (set_local $l + (i32.add + (get_local $t) + (i32.const 16) + ) + ) + (set_local $q + (i32.load + (get_local $l) + ) + ) + (if + (i32.eqz + (get_local $q) + ) + (block + (set_local $v + (get_local $t) + ) + (set_local $w + (get_local $u) + ) + (br $while-out) + ) + (block + (set_local $t + (get_local $q) + ) + (set_local $u + (get_local $l) + ) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (get_local $w) + (get_local $c) + ) + (call $qa) + (block + (i32.store + (get_local $w) + (i32.const 0) + ) + (set_local $s + (get_local $v) + ) + (br $do-once0) + ) + ) + ) + (block + (set_local $l + (i32.load + (i32.add + (get_local $h) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $l) + (get_local $c) + ) + (call $qa) + ) + (set_local $q + (i32.add + (get_local $l) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $q) + ) + (get_local $h) + ) + (call $qa) + ) + (set_local $o + (i32.add + (get_local $j) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $o) + ) + (get_local $h) + ) + (block + (i32.store + (get_local $q) + (get_local $j) + ) + (i32.store + (get_local $o) + (get_local $l) + ) + (set_local $s + (get_local $j) + ) + (br $do-once0) + ) + (call $qa) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $g) + ) + (block + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + ) + (block + (set_local $j + (i32.load + (i32.add + (get_local $h) + (i32.const 28) + ) + ) + ) + (set_local $l + (i32.add + (i32.const 1512) + (i32.shl + (get_local $j) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $h) + (i32.load + (get_local $l) + ) + ) + (block + (i32.store + (get_local $l) + (get_local $s) + ) + (if + (i32.eqz + (get_local $s) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $j) + ) + (i32.const -1) + ) + ) + ) + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $g) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $j + (i32.add + (get_local $g) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $j) + ) + (get_local $h) + ) + (i32.store + (get_local $j) + (get_local $s) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 20) + ) + (get_local $s) + ) + ) + (if + (i32.eqz + (get_local $s) + ) + (block + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + (br $do-once) + ) + ) + ) + ) + (set_local $j + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $s) + (get_local $j) + ) + (call $qa) + ) + (i32.store + (i32.add + (get_local $s) + (i32.const 24) + ) + (get_local $g) + ) + (set_local $l + (i32.add + (get_local $h) + (i32.const 16) + ) + ) + (set_local $o + (i32.load + (get_local $l) + ) + ) + (block $do-once2 + (if + (get_local $o) + (if + (i32.lt_u + (get_local $o) + (get_local $j) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $s) + (i32.const 16) + ) + (get_local $o) + ) + (i32.store + (i32.add + (get_local $o) + (i32.const 24) + ) + (get_local $s) + ) + (br $do-once2) + ) + ) + ) + ) + (set_local $o + (i32.load + (i32.add + (get_local $l) + (i32.const 4) + ) + ) + ) + (if + (i32.eqz + (get_local $o) + ) + (block + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + ) + (if + (i32.lt_u + (get_local $o) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $s) + (i32.const 20) + ) + (get_local $o) + ) + (i32.store + (i32.add + (get_local $o) + (i32.const 24) + ) + (get_local $s) + ) + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + (br $do-once) + ) + ) + ) + ) + ) + ) + (block + (set_local $m + (get_local $b) + ) + (set_local $n + (get_local $e) + ) + ) + ) + ) + (if + (i32.ge_u + (get_local $m) + (get_local $f) + ) + (call $qa) + ) + (set_local $e + (i32.add + (get_local $f) + (i32.const 4) + ) + ) + (set_local $b + (i32.load + (get_local $e) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $b) + (i32.const 1) + ) + ) + (call $qa) + ) + (if + (i32.eqz + (i32.and + (get_local $b) + (i32.const 2) + ) + ) + (block + (if + (i32.eq + (get_local $f) + (i32.load + (i32.const 1232) + ) + ) + (block + (set_local $s + (i32.add + (i32.load + (i32.const 1220) + ) + (get_local $n) + ) + ) + (i32.store + (i32.const 1220) + (get_local $s) + ) + (i32.store + (i32.const 1232) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 4) + ) + (i32.or + (get_local $s) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $m) + (i32.load + (i32.const 1228) + ) + ) + (return) + ) + (i32.store + (i32.const 1228) + (i32.const 0) + ) + (i32.store + (i32.const 1216) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $f) + (i32.load + (i32.const 1228) + ) + ) + (block + (set_local $s + (i32.add + (i32.load + (i32.const 1216) + ) + (get_local $n) + ) + ) + (i32.store + (i32.const 1216) + (get_local $s) + ) + (i32.store + (i32.const 1228) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 4) + ) + (i32.or + (get_local $s) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $m) + (get_local $s) + ) + (get_local $s) + ) + (return) + ) + ) + (set_local $s + (i32.add + (i32.and + (get_local $b) + (i32.const -8) + ) + (get_local $n) + ) + ) + (set_local $c + (i32.shr_u + (get_local $b) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.lt_u + (get_local $b) + (i32.const 256) + ) + (block + (set_local $v + (i32.load + (i32.add + (get_local $f) + (i32.const 8) + ) + ) + ) + (set_local $w + (i32.load + (i32.add + (get_local $f) + (i32.const 12) + ) + ) + ) + (set_local $u + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $c) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.ne + (get_local $v) + (get_local $u) + ) + (block + (if + (i32.lt_u + (get_local $v) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (if + (i32.ne + (i32.load + (i32.add + (get_local $v) + (i32.const 12) + ) + ) + (get_local $f) + ) + (call $qa) + ) + ) + ) + (if + (i32.eq + (get_local $w) + (get_local $v) + ) + (block + (i32.store + (i32.const 1208) + (i32.and + (i32.load + (i32.const 1208) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $c) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.eq + (get_local $w) + (get_local $u) + ) + (set_local $x + (i32.add + (get_local $w) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $w) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $u + (i32.add + (get_local $w) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $u) + ) + (get_local $f) + ) + (set_local $x + (get_local $u) + ) + (call $qa) + ) + ) + ) + (i32.store + (i32.add + (get_local $v) + (i32.const 12) + ) + (get_local $w) + ) + (i32.store + (get_local $x) + (get_local $v) + ) + ) + (block + (set_local $v + (i32.load + (i32.add + (get_local $f) + (i32.const 24) + ) + ) + ) + (set_local $w + (i32.load + (i32.add + (get_local $f) + (i32.const 12) + ) + ) + ) + (block $do-once6 + (if + (i32.eq + (get_local $w) + (get_local $f) + ) + (block + (set_local $u + (i32.add + (get_local $f) + (i32.const 16) + ) + ) + (set_local $t + (i32.add + (get_local $u) + (i32.const 4) + ) + ) + (set_local $p + (i32.load + (get_local $t) + ) + ) + (if + (i32.eqz + (get_local $p) + ) + (block + (set_local $a + (i32.load + (get_local $u) + ) + ) + (if + (i32.eqz + (get_local $a) + ) + (block + (set_local $y + (i32.const 0) + ) + (br $do-once6) + ) + (block + (set_local $z + (get_local $a) + ) + (set_local $A + (get_local $u) + ) + ) + ) + ) + (block + (set_local $z + (get_local $p) + ) + (set_local $A + (get_local $t) + ) + ) + ) + (loop $while-in9 + (block $while-out8 + (set_local $t + (i32.add + (get_local $z) + (i32.const 20) + ) + ) + (set_local $p + (i32.load + (get_local $t) + ) + ) + (if + (get_local $p) + (block + (set_local $z + (get_local $p) + ) + (set_local $A + (get_local $t) + ) + (br $while-in9) + ) + ) + (set_local $t + (i32.add + (get_local $z) + (i32.const 16) + ) + ) + (set_local $p + (i32.load + (get_local $t) + ) + ) + (if + (i32.eqz + (get_local $p) + ) + (block + (set_local $B + (get_local $z) + ) + (set_local $C + (get_local $A) + ) + (br $while-out8) + ) + (block + (set_local $z + (get_local $p) + ) + (set_local $A + (get_local $t) + ) + ) + ) + (br $while-in9) + ) + ) + (if + (i32.lt_u + (get_local $C) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $C) + (i32.const 0) + ) + (set_local $y + (get_local $B) + ) + (br $do-once6) + ) + ) + ) + (block + (set_local $t + (i32.load + (i32.add + (get_local $f) + (i32.const 8) + ) + ) + ) + (if + (i32.lt_u + (get_local $t) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $p + (i32.add + (get_local $t) + (i32.const 12) + ) + ) + (if + (i32.ne + (i32.load + (get_local $p) + ) + (get_local $f) + ) + (call $qa) + ) + (set_local $u + (i32.add + (get_local $w) + (i32.const 8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $u) + ) + (get_local $f) + ) + (block + (i32.store + (get_local $p) + (get_local $w) + ) + (i32.store + (get_local $u) + (get_local $t) + ) + (set_local $y + (get_local $w) + ) + (br $do-once6) + ) + (call $qa) + ) + ) + ) + ) + (if + (get_local $v) + (block + (set_local $w + (i32.load + (i32.add + (get_local $f) + (i32.const 28) + ) + ) + ) + (set_local $i + (i32.add + (i32.const 1512) + (i32.shl + (get_local $w) + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (get_local $f) + (i32.load + (get_local $i) + ) + ) + (block + (i32.store + (get_local $i) + (get_local $y) + ) + (if + (i32.eqz + (get_local $y) + ) + (block + (i32.store + (i32.const 1212) + (i32.and + (i32.load + (i32.const 1212) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $w) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $v) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + ) + (set_local $w + (i32.add + (get_local $v) + (i32.const 16) + ) + ) + (if + (i32.eq + (i32.load + (get_local $w) + ) + (get_local $f) + ) + (i32.store + (get_local $w) + (get_local $y) + ) + (i32.store + (i32.add + (get_local $v) + (i32.const 20) + ) + (get_local $y) + ) + ) + (if + (i32.eqz + (get_local $y) + ) + (br $do-once4) + ) + ) + ) + (set_local $w + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.lt_u + (get_local $y) + (get_local $w) + ) + (call $qa) + ) + (i32.store + (i32.add + (get_local $y) + (i32.const 24) + ) + (get_local $v) + ) + (set_local $i + (i32.add + (get_local $f) + (i32.const 16) + ) + ) + (set_local $h + (i32.load + (get_local $i) + ) + ) + (block $do-once10 + (if + (get_local $h) + (if + (i32.lt_u + (get_local $h) + (get_local $w) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $y) + (i32.const 16) + ) + (get_local $h) + ) + (i32.store + (i32.add + (get_local $h) + (i32.const 24) + ) + (get_local $y) + ) + (br $do-once10) + ) + ) + ) + ) + (set_local $h + (i32.load + (i32.add + (get_local $i) + (i32.const 4) + ) + ) + ) + (if + (get_local $h) + (if + (i32.lt_u + (get_local $h) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (i32.add + (get_local $y) + (i32.const 20) + ) + (get_local $h) + ) + (i32.store + (i32.add + (get_local $h) + (i32.const 24) + ) + (get_local $y) + ) + (br $do-once4) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 4) + ) + (i32.or + (get_local $s) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $m) + (get_local $s) + ) + (get_local $s) + ) + (if + (i32.eq + (get_local $m) + (i32.load + (i32.const 1228) + ) + ) + (block + (i32.store + (i32.const 1216) + (get_local $s) + ) + (return) + ) + (set_local $D + (get_local $s) + ) + ) + ) + (block + (i32.store + (get_local $e) + (i32.and + (get_local $b) + (i32.const -2) + ) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 4) + ) + (i32.or + (get_local $n) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $m) + (get_local $n) + ) + (get_local $n) + ) + (set_local $D + (get_local $n) + ) + ) + ) + (set_local $n + (i32.shr_u + (get_local $D) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $D) + (i32.const 256) + ) + (block + (set_local $b + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $n) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (set_local $e + (i32.load + (i32.const 1208) + ) + ) + (set_local $s + (i32.shl + (i32.const 1) + (get_local $n) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $e) + (get_local $s) + ) + ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $e) + (get_local $s) + ) + ) + (set_local $E + (i32.add + (get_local $b) + (i32.const 8) + ) + ) + (set_local $F + (get_local $b) + ) + ) + (block + (set_local $s + (i32.add + (get_local $b) + (i32.const 8) + ) + ) + (set_local $e + (i32.load + (get_local $s) + ) + ) + (if + (i32.lt_u + (get_local $e) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (set_local $E + (get_local $s) + ) + (set_local $F + (get_local $e) + ) + ) + ) + ) + ) + (i32.store + (get_local $E) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $F) + (i32.const 12) + ) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 8) + ) + (get_local $F) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 12) + ) + (get_local $b) + ) + (return) + ) + ) + (set_local $b + (i32.shr_u + (get_local $D) + (i32.const 8) + ) + ) + (if + (i32.eqz + (get_local $b) + ) + (set_local $G + (i32.const 0) + ) + (if + (i32.gt_u + (get_local $D) + (i32.const 16777215) + ) + (set_local $G + (i32.const 31) + ) + (block + (set_local $F + (i32.and + (i32.shr_u + (i32.add + (get_local $b) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + (set_local $E + (i32.shl + (get_local $b) + (get_local $F) + ) + ) + (set_local $b + (i32.and + (i32.shr_u + (i32.add + (get_local $E) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (set_local $e + (i32.shl + (get_local $E) + (get_local $b) + ) + ) + (set_local $E + (i32.and + (i32.shr_u + (i32.add + (get_local $e) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + (set_local $s + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (get_local $b) + (get_local $F) + ) + (get_local $E) + ) + ) + (i32.shr_u + (i32.shl + (get_local $e) + (get_local $E) + ) + (i32.const 15) + ) + ) + ) + (set_local $G + (i32.or + (i32.and + (i32.shr_u + (get_local $D) + (i32.add + (get_local $s) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $s) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $s + (i32.add + (i32.const 1512) + (i32.shl + (get_local $G) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 28) + ) + (get_local $G) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 20) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 16) + ) + (i32.const 0) + ) + (set_local $E + (i32.load + (i32.const 1212) + ) + ) + (set_local $e + (i32.shl + (i32.const 1) + (get_local $G) + ) + ) + (block $do-once12 + (if + (i32.eqz + (i32.and + (get_local $E) + (get_local $e) + ) + ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $E) + (get_local $e) + ) + ) + (i32.store + (get_local $s) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 24) + ) + (get_local $s) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 12) + ) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 8) + ) + (get_local $m) + ) + ) + (block + (set_local $F + (i32.shl + (get_local $D) + (if (result i32) + (i32.eq + (get_local $G) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $G) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $b + (i32.load + (get_local $s) + ) + ) + (loop $while-in15 + (block $while-out14 + (if + (i32.eq + (i32.and + (i32.load + (i32.add + (get_local $b) + (i32.const 4) + ) + ) + (i32.const -8) + ) + (get_local $D) + ) + (block + (set_local $H + (get_local $b) + ) + (set_local $I + (i32.const 130) + ) + (br $while-out14) + ) + ) + (set_local $n + (i32.add + (i32.add + (get_local $b) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $F) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + (set_local $y + (i32.load + (get_local $n) + ) + ) + (if + (i32.eqz + (get_local $y) + ) + (block + (set_local $J + (get_local $n) + ) + (set_local $K + (get_local $b) + ) + (set_local $I + (i32.const 127) + ) + (br $while-out14) + ) + (block + (set_local $F + (i32.shl + (get_local $F) + (i32.const 1) + ) + ) + (set_local $b + (get_local $y) + ) + ) + ) + (br $while-in15) + ) + ) + (if + (i32.eq + (get_local $I) + (i32.const 127) + ) + (if + (i32.lt_u + (get_local $J) + (i32.load + (i32.const 1224) + ) + ) + (call $qa) + (block + (i32.store + (get_local $J) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 24) + ) + (get_local $K) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 12) + ) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 8) + ) + (get_local $m) + ) + (br $do-once12) + ) + ) + (if + (i32.eq + (get_local $I) + (i32.const 130) + ) + (block + (set_local $b + (i32.add + (get_local $H) + (i32.const 8) + ) + ) + (set_local $F + (i32.load + (get_local $b) + ) + ) + (set_local $i + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.and + (i32.ge_u + (get_local $F) + (get_local $i) + ) + (i32.ge_u + (get_local $H) + (get_local $i) + ) + ) + (block + (i32.store + (i32.add + (get_local $F) + (i32.const 12) + ) + (get_local $m) + ) + (i32.store + (get_local $b) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 8) + ) + (get_local $F) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 12) + ) + (get_local $H) + ) + (i32.store + (i32.add + (get_local $m) + (i32.const 24) + ) + (i32.const 0) + ) + (br $do-once12) + ) + (call $qa) + ) + ) + ) + ) + ) + ) + ) + (set_local $m + (i32.add + (i32.load + (i32.const 1240) + ) + (i32.const -1) + ) + ) + (i32.store + (i32.const 1240) + (get_local $m) + ) + (if + (i32.eqz + (get_local $m) + ) + (set_local $L + (i32.const 1664) + ) + (return) + ) + (loop $while-in17 + (block $while-out16 + (set_local $m + (i32.load + (get_local $L) + ) + ) + (if + (i32.eqz + (get_local $m) + ) + (br $while-out16) + (set_local $L + (i32.add + (get_local $m) + (i32.const 8) + ) + ) + ) + (br $while-in17) + ) + ) + (i32.store + (i32.const 1240) + (i32.const -1) + ) + (return) + ) + (func $Ra (; 14 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $i i32) + (local $j i32) + (local $l i32) + (local $m i32) + (local $n i32) + (local $o i32) + (local $p i32) + (local $q i32) + (local $s i32) + (local $t i32) + (local $u i32) + (local $v i32) + (local $w i32) + (local $x i32) + (local $y i32) + (local $z i32) + (set_local $d + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 48) + ) + ) + (set_local $e + (i32.add + (get_local $d) + (i32.const 16) + ) + ) + (set_local $f + (get_local $d) + ) + (set_local $g + (i32.add + (get_local $d) + (i32.const 32) + ) + ) + (set_local $h + (i32.add + (get_local $a) + (i32.const 28) + ) + ) + (set_local $i + (i32.load + (get_local $h) + ) + ) + (i32.store + (get_local $g) + (get_local $i) + ) + (set_local $j + (i32.add + (get_local $a) + (i32.const 20) + ) + ) + (set_local $l + (i32.sub + (i32.load + (get_local $j) + ) + (get_local $i) + ) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 4) + ) + (get_local $l) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 8) + ) + (get_local $b) + ) + (i32.store + (i32.add + (get_local $g) + (i32.const 12) + ) + (get_local $c) + ) + (set_local $b + (i32.add + (get_local $a) + (i32.const 60) + ) + ) + (set_local $i + (i32.add + (get_local $a) + (i32.const 44) + ) + ) + (set_local $m + (get_local $g) + ) + (set_local $g + (i32.const 2) + ) + (set_local $n + (i32.add + (get_local $l) + (get_local $c) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.load + (i32.const 1160) + ) + ) + (block + (i32.store + (get_local $e) + (i32.load + (get_local $b) + ) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 4) + ) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 8) + ) + (get_local $g) + ) + (set_local $o + (call $Pa + (call $ya + (i32.const 146) + (get_local $e) + ) + ) + ) + ) + (block + (call $ra + (i32.const 1) + (get_local $a) + ) + (i32.store + (get_local $f) + (i32.load + (get_local $b) + ) + ) + (i32.store + (i32.add + (get_local $f) + (i32.const 4) + ) + (get_local $m) + ) + (i32.store + (i32.add + (get_local $f) + (i32.const 8) + ) + (get_local $g) + ) + (set_local $l + (call $Pa + (call $ya + (i32.const 146) + (get_local $f) + ) + ) + ) + (call $oa + (i32.const 0) + ) + (set_local $o + (get_local $l) + ) + ) + ) + (if + (i32.eq + (get_local $n) + (get_local $o) + ) + (block + (set_local $p + (i32.const 6) + ) + (br $while-out) + ) + ) + (if + (i32.lt_s + (get_local $o) + (i32.const 0) + ) + (block + (set_local $q + (get_local $m) + ) + (set_local $s + (get_local $g) + ) + (set_local $p + (i32.const 8) + ) + (br $while-out) + ) + ) + (set_local $l + (i32.sub + (get_local $n) + (get_local $o) + ) + ) + (set_local $t + (i32.load + (i32.add + (get_local $m) + (i32.const 4) + ) + ) + ) + (if + (i32.gt_u + (get_local $o) + (get_local $t) + ) + (block + (set_local $u + (i32.load + (get_local $i) + ) + ) + (i32.store + (get_local $h) + (get_local $u) + ) + (i32.store + (get_local $j) + (get_local $u) + ) + (set_local $v + (i32.load + (i32.add + (get_local $m) + (i32.const 12) + ) + ) + ) + (set_local $w + (i32.sub + (get_local $o) + (get_local $t) + ) + ) + (set_local $x + (i32.add + (get_local $m) + (i32.const 8) + ) + ) + (set_local $y + (i32.add + (get_local $g) + (i32.const -1) + ) + ) + ) + (if + (i32.eq + (get_local $g) + (i32.const 2) + ) + (block + (i32.store + (get_local $h) + (i32.add + (i32.load + (get_local $h) + ) + (get_local $o) + ) + ) + (set_local $v + (get_local $t) + ) + (set_local $w + (get_local $o) + ) + (set_local $x + (get_local $m) + ) + (set_local $y + (i32.const 2) + ) + ) + (block + (set_local $v + (get_local $t) + ) + (set_local $w + (get_local $o) + ) + (set_local $x + (get_local $m) + ) + (set_local $y + (get_local $g) + ) + ) + ) + ) + (i32.store + (get_local $x) + (i32.add + (i32.load + (get_local $x) + ) + (get_local $w) + ) + ) + (i32.store + (i32.add + (get_local $x) + (i32.const 4) + ) + (i32.sub + (get_local $v) + (get_local $w) + ) + ) + (set_local $m + (get_local $x) + ) + (set_local $g + (get_local $y) + ) + (set_local $n + (get_local $l) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $p) + (i32.const 6) + ) + (block + (set_local $n + (i32.load + (get_local $i) + ) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 16) + ) + (i32.add + (get_local $n) + (i32.load + (i32.add + (get_local $a) + (i32.const 48) + ) + ) + ) + ) + (set_local $i + (get_local $n) + ) + (i32.store + (get_local $h) + (get_local $i) + ) + (i32.store + (get_local $j) + (get_local $i) + ) + (set_local $z + (get_local $c) + ) + ) + (if + (i32.eq + (get_local $p) + (i32.const 8) + ) + (block + (i32.store + (i32.add + (get_local $a) + (i32.const 16) + ) + (i32.const 0) + ) + (i32.store + (get_local $h) + (i32.const 0) + ) + (i32.store + (get_local $j) + (i32.const 0) + ) + (i32.store + (get_local $a) + (i32.or + (i32.load + (get_local $a) + ) + (i32.const 32) + ) + ) + (if + (i32.eq + (get_local $s) + (i32.const 2) + ) + (set_local $z + (i32.const 0) + ) + (set_local $z + (i32.sub + (get_local $c) + (i32.load + (i32.add + (get_local $q) + (i32.const 4) + ) + ) + ) + ) + ) + ) + ) + ) + (set_global $r + (get_local $d) + ) + (return + (get_local $z) + ) + ) + (func $Wa (; 15 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $j i32) + (local $l i32) + (local $m i32) + (local $n i32) + (local $o i32) + (local $p i32) + (local $q i32) + (set_local $d + (i32.add + (get_local $c) + (i32.const 16) + ) + ) + (set_local $e + (i32.load + (get_local $d) + ) + ) + (if + (i32.eqz + (get_local $e) + ) + (if + (i32.eqz + (call $Xa + (get_local $c) + ) + ) + (block + (set_local $f + (i32.load + (get_local $d) + ) + ) + (set_local $g + (i32.const 5) + ) + ) + (set_local $h + (i32.const 0) + ) + ) + (block + (set_local $f + (get_local $e) + ) + (set_local $g + (i32.const 5) + ) + ) + ) + (block $label$break$a + (if + (i32.eq + (get_local $g) + (i32.const 5) + ) + (block + (set_local $e + (i32.add + (get_local $c) + (i32.const 20) + ) + ) + (set_local $d + (i32.load + (get_local $e) + ) + ) + (set_local $j + (get_local $d) + ) + (if + (i32.lt_u + (i32.sub + (get_local $f) + (get_local $d) + ) + (get_local $b) + ) + (block + (set_local $h + (call_indirect (type $FUNCSIG$iiii) + (get_local $c) + (get_local $a) + (get_local $b) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $c) + (i32.const 36) + ) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (br $label$break$a) + ) + ) + (block $label$break$b + (if + (i32.gt_s + (i32.load8_s + (i32.add + (get_local $c) + (i32.const 75) + ) + ) + (i32.const -1) + ) + (block + (set_local $d + (get_local $b) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (get_local $d) + ) + (block + (set_local $l + (get_local $b) + ) + (set_local $m + (get_local $a) + ) + (set_local $n + (get_local $j) + ) + (set_local $o + (i32.const 0) + ) + (br $label$break$b) + ) + ) + (set_local $p + (i32.add + (get_local $d) + (i32.const -1) + ) + ) + (if + (i32.eq + (i32.load8_s + (i32.add + (get_local $a) + (get_local $p) + ) + ) + (i32.const 10) + ) + (block + (set_local $q + (get_local $d) + ) + (br $while-out) + ) + (set_local $d + (get_local $p) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (call_indirect (type $FUNCSIG$iiii) + (get_local $c) + (get_local $a) + (get_local $q) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $c) + (i32.const 36) + ) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + (get_local $q) + ) + (block + (set_local $h + (get_local $q) + ) + (br $label$break$a) + ) + ) + (set_local $l + (i32.sub + (get_local $b) + (get_local $q) + ) + ) + (set_local $m + (i32.add + (get_local $a) + (get_local $q) + ) + ) + (set_local $n + (i32.load + (get_local $e) + ) + ) + (set_local $o + (get_local $q) + ) + ) + (block + (set_local $l + (get_local $b) + ) + (set_local $m + (get_local $a) + ) + (set_local $n + (get_local $j) + ) + (set_local $o + (i32.const 0) + ) + ) + ) + ) + (drop + (call $jb + (get_local $n) + (get_local $m) + (get_local $l) + ) + ) + (i32.store + (get_local $e) + (i32.add + (i32.load + (get_local $e) + ) + (get_local $l) + ) + ) + (set_local $h + (i32.add + (get_local $o) + (get_local $l) + ) + ) + ) + ) + ) + (return + (get_local $h) + ) + ) + (func $Za (; 16 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $j i32) + (local $l i32) + (local $m i32) + (set_local $b + (get_local $a) + ) + (block $label$break$a + (if + (i32.eqz + (i32.and + (get_local $b) + (i32.const 3) + ) + ) + (block + (set_local $c + (get_local $a) + ) + (set_local $d + (i32.const 4) + ) + ) + (block + (set_local $e + (get_local $a) + ) + (set_local $f + (get_local $b) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.load8_s + (get_local $e) + ) + ) + (block + (set_local $g + (get_local $f) + ) + (br $label$break$a) + ) + ) + (set_local $h + (i32.add + (get_local $e) + (i32.const 1) + ) + ) + (set_local $f + (get_local $h) + ) + (if + (i32.eqz + (i32.and + (get_local $f) + (i32.const 3) + ) + ) + (block + (set_local $c + (get_local $h) + ) + (set_local $d + (i32.const 4) + ) + (br $while-out) + ) + (set_local $e + (get_local $h) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (if + (i32.eq + (get_local $d) + (i32.const 4) + ) + (block + (set_local $d + (get_local $c) + ) + (loop $while-in1 + (block $while-out0 + (set_local $c + (i32.load + (get_local $d) + ) + ) + (if + (i32.eqz + (i32.and + (i32.xor + (i32.and + (get_local $c) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $c) + (i32.const -16843009) + ) + ) + ) + (set_local $d + (i32.add + (get_local $d) + (i32.const 4) + ) + ) + (block + (set_local $j + (get_local $c) + ) + (set_local $l + (get_local $d) + ) + (br $while-out0) + ) + ) + (br $while-in1) + ) + ) + (if + (i32.eqz + (i32.shr_s + (i32.shl + (i32.and + (get_local $j) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $m + (get_local $l) + ) + (block + (set_local $j + (get_local $l) + ) + (loop $while-in3 + (block $while-out2 + (set_local $l + (i32.add + (get_local $j) + (i32.const 1) + ) + ) + (if + (i32.eqz + (i32.load8_s + (get_local $l) + ) + ) + (block + (set_local $m + (get_local $l) + ) + (br $while-out2) + ) + (set_local $j + (get_local $l) + ) + ) + (br $while-in3) + ) + ) + ) + ) + (set_local $g + (get_local $m) + ) + ) + ) + (return + (i32.sub + (get_local $g) + (get_local $b) + ) + ) + ) + (func $_a (; 17 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (block $do-once + (if + (i32.eqz + (get_local $a) + ) + (block + (if + (i32.eqz + (i32.load + (i32.const 1140) + ) + ) + (set_local $b + (i32.const 0) + ) + (set_local $b + (call $_a + (i32.load + (i32.const 1140) + ) + ) + ) + ) + (call $pa + (i32.const 1188) + ) + (set_local $c + (i32.load + (i32.const 1184) + ) + ) + (if + (i32.eqz + (get_local $c) + ) + (set_local $d + (get_local $b) + ) + (block + (set_local $e + (get_local $c) + ) + (set_local $c + (get_local $b) + ) + (loop $while-in + (block $while-out + (if + (i32.gt_s + (i32.load + (i32.add + (get_local $e) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (set_local $f + (call $Ya + (get_local $e) + ) + ) + (set_local $f + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.load + (i32.add + (get_local $e) + (i32.const 20) + ) + ) + (i32.load + (i32.add + (get_local $e) + (i32.const 28) + ) + ) + ) + (set_local $g + (i32.or + (call $$a + (get_local $e) + ) + (get_local $c) + ) + ) + (set_local $g + (get_local $c) + ) + ) + (if + (get_local $f) + (call $Ta + (get_local $e) + ) + ) + (set_local $e + (i32.load + (i32.add + (get_local $e) + (i32.const 56) + ) + ) + ) + (if + (i32.eqz + (get_local $e) + ) + (block + (set_local $d + (get_local $g) + ) + (br $while-out) + ) + (set_local $c + (get_local $g) + ) + ) + (br $while-in) + ) + ) + ) + ) + (call $xa + (i32.const 1188) + ) + (set_local $h + (get_local $d) + ) + ) + (block + (if + (i32.le_s + (i32.load + (i32.add + (get_local $a) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (block + (set_local $h + (call $$a + (get_local $a) + ) + ) + (br $do-once) + ) + ) + (set_local $c + (i32.eq + (call $Ya + (get_local $a) + ) + (i32.const 0) + ) + ) + (set_local $e + (call $$a + (get_local $a) + ) + ) + (if + (get_local $c) + (set_local $h + (get_local $e) + ) + (block + (call $Ta + (get_local $a) + ) + (set_local $h + (get_local $e) + ) + ) + ) + ) + ) + ) + (return + (get_local $h) + ) + ) + (func $ab (; 18 ;) (param $a i32) (param $b i32) (result i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $j i32) + (local $m i32) + (local $n i32) + (set_local $c + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 16) + ) + ) + (set_local $d + (get_local $c) + ) + (set_local $e + (i32.and + (get_local $b) + (i32.const 255) + ) + ) + (i32.store8 + (get_local $d) + (get_local $e) + ) + (set_local $f + (i32.add + (get_local $a) + (i32.const 16) + ) + ) + (set_local $g + (i32.load + (get_local $f) + ) + ) + (if + (i32.eqz + (get_local $g) + ) + (if + (i32.eqz + (call $Xa + (get_local $a) + ) + ) + (block + (set_local $h + (i32.load + (get_local $f) + ) + ) + (set_local $j + (i32.const 4) + ) + ) + (set_local $m + (i32.const -1) + ) + ) + (block + (set_local $h + (get_local $g) + ) + (set_local $j + (i32.const 4) + ) + ) + ) + (block $do-once + (if + (i32.eq + (get_local $j) + (i32.const 4) + ) + (block + (set_local $g + (i32.add + (get_local $a) + (i32.const 20) + ) + ) + (set_local $f + (i32.load + (get_local $g) + ) + ) + (if + (i32.lt_u + (get_local $f) + (get_local $h) + ) + (block + (set_local $n + (i32.and + (get_local $b) + (i32.const 255) + ) + ) + (if + (i32.ne + (get_local $n) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 75) + ) + ) + ) + (block + (i32.store + (get_local $g) + (i32.add + (get_local $f) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $f) + (get_local $e) + ) + (set_local $m + (get_local $n) + ) + (br $do-once) + ) + ) + ) + ) + (if + (i32.eq + (call_indirect (type $FUNCSIG$iiii) + (get_local $a) + (get_local $d) + (i32.const 1) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $a) + (i32.const 36) + ) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + (i32.const 1) + ) + (set_local $m + (i32.load8_u + (get_local $d) + ) + ) + (set_local $m + (i32.const -1) + ) + ) + ) + ) + ) + (set_global $r + (get_local $c) + ) + (return + (get_local $m) + ) + ) + (func $$a (; 19 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (set_local $b + (i32.add + (get_local $a) + (i32.const 20) + ) + ) + (set_local $c + (i32.add + (get_local $a) + (i32.const 28) + ) + ) + (if + (i32.gt_u + (i32.load + (get_local $b) + ) + (i32.load + (get_local $c) + ) + ) + (block + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $a) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $a) + (i32.const 36) + ) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.eqz + (i32.load + (get_local $b) + ) + ) + (set_local $d + (i32.const -1) + ) + (set_local $e + (i32.const 3) + ) + ) + ) + (set_local $e + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $e) + (i32.const 3) + ) + (block + (set_local $e + (i32.add + (get_local $a) + (i32.const 4) + ) + ) + (set_local $f + (i32.load + (get_local $e) + ) + ) + (set_local $g + (i32.add + (get_local $a) + (i32.const 8) + ) + ) + (set_local $h + (i32.load + (get_local $g) + ) + ) + (if + (i32.lt_u + (get_local $f) + (get_local $h) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $a) + (i32.sub + (get_local $f) + (get_local $h) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load + (i32.add + (get_local $a) + (i32.const 40) + ) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 16) + ) + (i32.const 0) + ) + (i32.store + (get_local $c) + (i32.const 0) + ) + (i32.store + (get_local $b) + (i32.const 0) + ) + (i32.store + (get_local $g) + (i32.const 0) + ) + (i32.store + (get_local $e) + (i32.const 0) + ) + (set_local $d + (i32.const 0) + ) + ) + ) + (return + (get_local $d) + ) + ) + (func $jb (; 20 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $d i32) + (if + (i32.ge_s + (get_local $c) + (i32.const 4096) + ) + (return + (call $va + (get_local $a) + (get_local $b) + (get_local $c) + ) + ) + ) + (set_local $d + (get_local $a) + ) + (if + (i32.eq + (i32.and + (get_local $a) + (i32.const 3) + ) + (i32.and + (get_local $b) + (i32.const 3) + ) + ) + (block + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.and + (get_local $a) + (i32.const 3) + ) + ) + (br $while-out) + ) + (block + (if + (i32.eqz + (get_local $c) + ) + (return + (get_local $d) + ) + ) + (i32.store8 + (get_local $a) + (i32.load8_s + (get_local $b) + ) + ) + (set_local $a + (i32.add + (get_local $a) + (i32.const 1) + ) + ) + (set_local $b + (i32.add + (get_local $b) + (i32.const 1) + ) + ) + (set_local $c + (i32.sub + (get_local $c) + (i32.const 1) + ) + ) + ) + (br $while-in) + ) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eqz + (i32.ge_s + (get_local $c) + (i32.const 4) + ) + ) + (br $while-out0) + ) + (block + (i32.store + (get_local $a) + (i32.load + (get_local $b) + ) + ) + (set_local $a + (i32.add + (get_local $a) + (i32.const 4) + ) + ) + (set_local $b + (i32.add + (get_local $b) + (i32.const 4) + ) + ) + (set_local $c + (i32.sub + (get_local $c) + (i32.const 4) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eqz + (i32.gt_s + (get_local $c) + (i32.const 0) + ) + ) + (br $while-out2) + ) + (block + (i32.store8 + (get_local $a) + (i32.load8_s + (get_local $b) + ) + ) + (set_local $a + (i32.add + (get_local $a) + (i32.const 1) + ) + ) + (set_local $b + (i32.add + (get_local $b) + (i32.const 1) + ) + ) + (set_local $c + (i32.sub + (get_local $c) + (i32.const 1) + ) + ) + ) + (br $while-in3) + ) + ) + (return + (get_local $d) + ) + ) + (func $gb (; 21 ;) + (nop) + ) + (func $hb (; 22 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (set_local $d + (i32.add + (get_local $a) + (get_local $c) + ) + ) + (if + (i32.ge_s + (get_local $c) + (i32.const 20) + ) + (block + (set_local $b + (i32.and + (get_local $b) + (i32.const 255) + ) + ) + (set_local $e + (i32.and + (get_local $a) + (i32.const 3) + ) + ) + (set_local $f + (i32.or + (i32.or + (i32.or + (get_local $b) + (i32.shl + (get_local $b) + (i32.const 8) + ) + ) + (i32.shl + (get_local $b) + (i32.const 16) + ) + ) + (i32.shl + (get_local $b) + (i32.const 24) + ) + ) + ) + (set_local $g + (i32.and + (get_local $d) + (i32.xor + (i32.const 3) + (i32.const -1) + ) + ) + ) + (if + (get_local $e) + (block + (set_local $e + (i32.sub + (i32.add + (get_local $a) + (i32.const 4) + ) + (get_local $e) + ) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.lt_s + (get_local $a) + (get_local $e) + ) + ) + (br $while-out) + ) + (block + (i32.store8 + (get_local $a) + (get_local $b) + ) + (set_local $a + (i32.add + (get_local $a) + (i32.const 1) + ) + ) + ) + (br $while-in) + ) + ) + ) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eqz + (i32.lt_s + (get_local $a) + (get_local $g) + ) + ) + (br $while-out0) + ) + (block + (i32.store + (get_local $a) + (get_local $f) + ) + (set_local $a + (i32.add + (get_local $a) + (i32.const 4) + ) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eqz + (i32.lt_s + (get_local $a) + (get_local $d) + ) + ) + (br $while-out2) + ) + (block + (i32.store8 + (get_local $a) + (get_local $b) + ) + (set_local $a + (i32.add + (get_local $a) + (i32.const 1) + ) + ) + ) + (br $while-in3) + ) + ) + (return + (i32.sub + (get_local $a) + (get_local $c) + ) + ) + ) + (func $db (; 23 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (set_local $b + (i32.load + (i32.const 1024) + ) + ) + (if + (i32.gt_s + (i32.load + (i32.add + (get_local $b) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (set_local $c + (call $Ya + (get_local $b) + ) + ) + (set_local $c + (i32.const 0) + ) + ) + (block $do-once + (if + (i32.lt_s + (call $cb + (get_local $a) + (get_local $b) + ) + (i32.const 0) + ) + (set_local $d + (i32.const 1) + ) + (block + (if + (i32.ne + (i32.load8_s + (i32.add + (get_local $b) + (i32.const 75) + ) + ) + (i32.const 10) + ) + (block + (set_local $e + (i32.add + (get_local $b) + (i32.const 20) + ) + ) + (set_local $f + (i32.load + (get_local $e) + ) + ) + (if + (i32.lt_u + (get_local $f) + (i32.load + (i32.add + (get_local $b) + (i32.const 16) + ) + ) + ) + (block + (i32.store + (get_local $e) + (i32.add + (get_local $f) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $f) + (i32.const 10) + ) + (set_local $d + (i32.const 0) + ) + (br $do-once) + ) + ) + ) + ) + (set_local $d + (i32.lt_s + (call $ab + (get_local $b) + (i32.const 10) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (if + (get_local $c) + (call $Ta + (get_local $b) + ) + ) + (return + (i32.shr_s + (i32.shl + (get_local $d) + (i32.const 31) + ) + (i32.const 31) + ) + ) + ) + (func $Xa (; 24 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (local $d i32) + (set_local $b + (i32.add + (get_local $a) + (i32.const 74) + ) + ) + (set_local $c + (i32.load8_s + (get_local $b) + ) + ) + (i32.store8 + (get_local $b) + (i32.or + (i32.add + (get_local $c) + (i32.const 255) + ) + (get_local $c) + ) + ) + (set_local $c + (i32.load + (get_local $a) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $c) + (i32.const 8) + ) + ) + (block + (i32.store + (i32.add + (get_local $a) + (i32.const 8) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 4) + ) + (i32.const 0) + ) + (set_local $b + (i32.load + (i32.add + (get_local $a) + (i32.const 44) + ) + ) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 28) + ) + (get_local $b) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 20) + ) + (get_local $b) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 16) + ) + (i32.add + (get_local $b) + (i32.load + (i32.add + (get_local $a) + (i32.const 48) + ) + ) + ) + ) + (set_local $d + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $a) + (i32.or + (get_local $c) + (i32.const 32) + ) + ) + (set_local $d + (i32.const -1) + ) + ) + ) + (return + (get_local $d) + ) + ) + (func $i32u-div (; 25 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (i32.div_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $bb (; 26 ;) (param $a i32) (param $b i32) (param $c i32) (param $d i32) (result i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $i i32) + (set_local $e + (i32.mul + (get_local $c) + (get_local $b) + ) + ) + (if + (i32.gt_s + (i32.load + (i32.add + (get_local $d) + (i32.const 76) + ) + ) + (i32.const -1) + ) + (block + (set_local $f + (i32.eq + (call $Ya + (get_local $d) + ) + (i32.const 0) + ) + ) + (set_local $g + (call $Wa + (get_local $a) + (get_local $e) + (get_local $d) + ) + ) + (if + (get_local $f) + (set_local $h + (get_local $g) + ) + (block + (call $Ta + (get_local $d) + ) + (set_local $h + (get_local $g) + ) + ) + ) + ) + (set_local $h + (call $Wa + (get_local $a) + (get_local $e) + (get_local $d) + ) + ) + ) + (if + (i32.eq + (get_local $h) + (get_local $e) + ) + (set_local $i + (get_local $c) + ) + (set_local $i + (call $i32u-div + (get_local $h) + (get_local $b) + ) + ) + ) + (return + (get_local $i) + ) + ) + (func $Ua (; 27 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (set_local $d + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 32) + ) + ) + (set_local $e + (get_local $d) + ) + (set_local $f + (i32.add + (get_local $d) + (i32.const 20) + ) + ) + (i32.store + (get_local $e) + (i32.load + (i32.add + (get_local $a) + (i32.const 60) + ) + ) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 4) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 8) + ) + (get_local $b) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 12) + ) + (get_local $f) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 16) + ) + (get_local $c) + ) + (if + (i32.lt_s + (call $Pa + (call $ua + (i32.const 140) + (get_local $e) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $f) + (i32.const -1) + ) + (set_local $g + (i32.const -1) + ) + ) + (set_local $g + (i32.load + (get_local $f) + ) + ) + ) + (set_global $r + (get_local $d) + ) + (return + (get_local $g) + ) + ) + (func $Va (; 28 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $d i32) + (local $e i32) + (set_local $d + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 80) + ) + ) + (set_local $e + (get_local $d) + ) + (i32.store + (i32.add + (get_local $a) + (i32.const 36) + ) + (i32.const 3) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $a) + ) + (i32.const 64) + ) + ) + (block + (i32.store + (get_local $e) + (i32.load + (i32.add + (get_local $a) + (i32.const 60) + ) + ) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 4) + ) + (i32.const 21505) + ) + (i32.store + (i32.add + (get_local $e) + (i32.const 8) + ) + (i32.add + (get_local $d) + (i32.const 12) + ) + ) + (if + (call $wa + (i32.const 54) + (get_local $e) + ) + (i32.store8 + (i32.add + (get_local $a) + (i32.const 75) + ) + (i32.const -1) + ) + ) + ) + ) + (set_local $e + (call $Ra + (get_local $a) + (get_local $b) + (get_local $c) + ) + ) + (set_global $r + (get_local $d) + ) + (return + (get_local $e) + ) + ) + (func $Ka (; 29 ;) (param $a i32) + (i32.store8 + (get_global $t) + (i32.load8_s + (get_local $a) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 1) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 1) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 2) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 2) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 3) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 3) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 4) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 4) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 5) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 5) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 6) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 6) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 7) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 7) + ) + ) + ) + ) + (func $Oa (; 30 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (set_local $b + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (i32.const 16) + ) + ) + (set_local $c + (get_local $b) + ) + (i32.store + (get_local $c) + (i32.load + (i32.add + (get_local $a) + (i32.const 60) + ) + ) + ) + (set_local $a + (call $Pa + (call $sa + (i32.const 6) + (get_local $c) + ) + ) + ) + (set_global $r + (get_local $b) + ) + (return + (get_local $a) + ) + ) + (func $Pa (; 31 ;) (param $a i32) (result i32) + (local $b i32) + (local $c i32) + (if + (i32.gt_u + (get_local $a) + (i32.const -4096) + ) + (block + (set_local $b + (call $Qa) + ) + (i32.store + (get_local $b) + (i32.sub + (i32.const 0) + (get_local $a) + ) + ) + (set_local $c + (i32.const -1) + ) + ) + (set_local $c + (get_local $a) + ) + ) + (return + (get_local $c) + ) + ) + (func $Ja (; 32 ;) (param $a i32) + (i32.store8 + (get_global $t) + (i32.load8_s + (get_local $a) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 1) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 1) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 2) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 2) + ) + ) + ) + (i32.store8 + (i32.add + (get_global $t) + (i32.const 3) + ) + (i32.load8_s + (i32.add + (get_local $a) + (i32.const 3) + ) + ) + ) + ) + (func $Qa (; 33 ;) (result i32) + (local $a i32) + (local $b i32) + (if + (i32.eqz + (i32.load + (i32.const 1160) + ) + ) + (set_local $a + (i32.const 1204) + ) + (block + (set_local $b + (i32.add + (call $ib) + (i32.const 64) + ) + ) + (set_local $a + (i32.load + (get_local $b) + ) + ) + ) + ) + (return + (get_local $a) + ) + ) + (func $lb (; 34 ;) (param $a i32) (param $b i32) (param $c i32) (param $d i32) (result i32) + (return + (call_indirect (type $FUNCSIG$iiii) + (get_local $b) + (get_local $c) + (get_local $d) + (i32.add + (i32.and + (get_local $a) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + ) + (func $Ea (; 35 ;) (param $a i32) (result i32) + (local $b i32) + (set_local $b + (get_global $r) + ) + (set_global $r + (i32.add + (get_global $r) + (get_local $a) + ) + ) + (set_global $r + (i32.and + (i32.add + (get_global $r) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (return + (get_local $b) + ) + ) + (func $cb (; 36 ;) (param $a i32) (param $b i32) (result i32) + (return + (i32.add + (call $bb + (get_local $a) + (call $Za + (get_local $a) + ) + (i32.const 1) + (get_local $b) + ) + (i32.const -1) + ) + ) + ) + (func $ob (; 37 ;) (param $a i32) (param $b i32) (param $c i32) (result i32) + (call $ja + (i32.const 1) + ) + (return + (i32.const 0) + ) + ) + (func $Ia (; 38 ;) (param $a i32) (param $b i32) + (if + (i32.eqz + (get_global $v) + ) + (block + (set_global $v + (get_local $a) + ) + (set_global $w + (get_local $b) + ) + ) + ) + ) + (func $kb (; 39 ;) (param $a i32) (param $b i32) (result i32) + (return + (call_indirect (type $FUNCSIG$ii) + (get_local $b) + (i32.add + (i32.and + (get_local $a) + (i32.const 1) + ) + (i32.const 0) + ) + ) + ) + ) + (func $Sa (; 40 ;) (param $a i32) + (if + (i32.eqz + (i32.load + (i32.add + (get_local $a) + (i32.const 68) + ) + ) + ) + (call $Ta + (get_local $a) + ) + ) + (return) + ) + (func $mb (; 41 ;) (param $a i32) (param $b i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $b) + (i32.add + (i32.and + (get_local $a) + (i32.const 1) + ) + (i32.const 6) + ) + ) + ) + (func $Ha (; 42 ;) (param $a i32) (param $b i32) + (set_global $r + (get_local $a) + ) + (set_global $s + (get_local $b) + ) + ) + (func $nb (; 43 ;) (param $a i32) (result i32) + (call $ja + (i32.const 0) + ) + (return + (i32.const 0) + ) + ) + (func $Na (; 44 ;) (result i32) + (drop + (call $db + (i32.const 1144) + ) + ) + (return + (i32.const 0) + ) + ) + (func $Ya (; 45 ;) (param $a i32) (result i32) + (return + (i32.const 0) + ) + ) + (func $Ta (; 46 ;) (param $a i32) + (return) + ) + (func $pb (; 47 ;) (param $a i32) + (call $ja + (i32.const 2) + ) + ) + (func $La (; 48 ;) (param $a i32) + (set_global $K + (get_local $a) + ) + ) + (func $Ga (; 49 ;) (param $a i32) + (set_global $r + (get_local $a) + ) + ) + (func $Ma (; 50 ;) (result i32) + (return + (get_global $K) + ) + ) + (func $Fa (; 51 ;) (result i32) + (return + (get_global $r) + ) + ) + (func $ib (; 52 ;) (result i32) + (return + (i32.const 0) + ) + ) + (func $__growWasmMemory (; 53 ;) (param $newSize i32) (result i32) + (grow_memory + (get_local $newSize) + ) + ) +) diff --git a/src/binaryen/test/merge/basics.wast b/src/binaryen/test/merge/basics.wast new file mode 100644 index 0000000000..b5fc97f7e1 --- /dev/null +++ b/src/binaryen/test/merge/basics.wast @@ -0,0 +1,38 @@ +(module + (type $ii (func (param i32 i32))) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) + (import "env" "some-func" (func $some-func)) + (import "env" "some-collide" (func $some-collide)) + (data (get_global $memoryBase) "hello, A!\n") + (global $global-collide i32 (i32.const 0)) + (global $global-collide-mut (mut i32) (i32.const 0)) + (global $global-a i32 (i32.const 1)) + (elem (get_global $tableBase) $only-a $willCollide $some-func $some-collide $only-a) + (export "exp-a" (func $only-a)) + (export "exp-collide" (func $only-a)) + (export "exp-collide2" (func $willCollide)) + (func $only-a + (drop (i32.const 100)) + (call $only-a) + (call_import $some-func) + (call_import $some-collide) + (call_indirect (type $ii) + (i32.const 123) + (i32.const 456) + (i32.const 789) + ) + (drop (get_global $global-collide)) + (drop (get_global $global-a)) + (drop (get_global $memoryBase)) + (drop (get_global $tableBase)) + (set_global $global-collide-mut (i32.const 1234)) + ) + (func $willCollide + (drop (i32.const 200)) + (call $willCollide) + ) +) + diff --git a/src/binaryen/test/merge/basics.wast.combined b/src/binaryen/test/merge/basics.wast.combined new file mode 100644 index 0000000000..e90b4f5944 --- /dev/null +++ b/src/binaryen/test/merge/basics.wast.combined @@ -0,0 +1,133 @@ +(module + (type $ii (func (param i32 i32))) + (type $FUNCSIG$v (func)) + (type $ii$0 (func (param i32 i32))) + (type $FUNCSIG$v$0 (func)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 10 anyfunc)) + (import "env" "some-func" (func $some-func)) + (import "env" "some-collide" (func $some-collide)) + (import "env" "memoryBase" (global $memoryBase$0 i32)) + (import "env" "tableBase" (global $tableBase$0 i32)) + (import "env" "some-func-b" (func $some-func-b)) + (import "env" "some-collide" (func $some-collide$0)) + (global $global-collide i32 (i32.const 0)) + (global $global-collide-mut (mut i32) (i32.const 0)) + (global $global-a i32 (i32.const 1)) + (global $global-collide$0 i32 (i32.const 0)) + (global $global-collide-mut$0 (mut i32) (i32.const 0)) + (global $global-b i32 (i32.const 1)) + (elem (get_global $tableBase) $only-a $willCollide $some-func $some-collide $only-a $only-a $only-b $willCollide$0 $some-func-b $some-collide$0) + (data (get_global $memoryBase) "hello, A!\n\00\00\00\00\00\00hello, B!\n\00\00\00\00\00\00") + (export "exp-a" (func $only-a)) + (export "exp-collide" (func $only-a)) + (export "exp-collide2" (func $willCollide)) + (export "exp-b" (func $only-b)) + (export "exp-b-nameCollided" (func $willCollide$0)) + (func $only-a (; 4 ;) (type $FUNCSIG$v) + (drop + (i32.const 100) + ) + (call $only-a) + (call $some-func) + (call $some-collide) + (call_indirect (type $ii) + (i32.const 123) + (i32.const 456) + (i32.const 789) + ) + (drop + (get_global $global-collide) + ) + (drop + (get_global $global-a) + ) + (drop + (get_global $memoryBase) + ) + (drop + (get_global $tableBase) + ) + (set_global $global-collide-mut + (i32.const 1234) + ) + ) + (func $willCollide (; 5 ;) (type $FUNCSIG$v) + (drop + (i32.const 200) + ) + (call $willCollide) + ) + (func $only-b (; 6 ;) (type $FUNCSIG$v$0) + (drop + (i32.const 111) + ) + (call $only-b) + (call $some-func-b) + (call $some-collide$0) + (call_indirect (type $ii$0) + (i32.const 12) + (i32.const 34) + (i32.const 56) + ) + (drop + (get_global $global-collide$0) + ) + (drop + (get_global $global-b) + ) + (drop + (i32.add + (get_global $memoryBase$0) + (i32.const 16) + ) + ) + (drop + (i32.add + (get_global $tableBase$0) + (i32.const 6) + ) + ) + (drop + (i32.add + (get_global $memoryBase$0) + (i32.const 1016) + ) + ) + (drop + (i32.add + (get_global $tableBase$0) + (i32.const 1006) + ) + ) + (drop + (i32.add + (i32.add + (get_global $tableBase$0) + (i32.const 6) + ) + (unreachable) + ) + ) + (drop + (i32.sub + (i32.add + (get_global $tableBase$0) + (i32.const 6) + ) + (i32.const 1000) + ) + ) + (set_global $global-collide-mut$0 + (i32.const 5678) + ) + ) + (func $willCollide$0 (; 7 ;) (type $FUNCSIG$v$0) + (drop + (i32.const 222) + ) + (call $willCollide$0) + ) +) diff --git a/src/binaryen/test/merge/basics.wast.combined.finalized b/src/binaryen/test/merge/basics.wast.combined.finalized new file mode 100644 index 0000000000..e25d70a6eb --- /dev/null +++ b/src/binaryen/test/merge/basics.wast.combined.finalized @@ -0,0 +1,133 @@ +(module + (type $ii (func (param i32 i32))) + (type $FUNCSIG$v (func)) + (type $ii$0 (func (param i32 i32))) + (type $FUNCSIG$v$0 (func)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 18 anyfunc)) + (import "env" "some-func" (func $some-func)) + (import "env" "some-collide" (func $some-collide)) + (import "env" "memoryBase" (global $memoryBase$0 i32)) + (import "env" "tableBase" (global $tableBase$0 i32)) + (import "env" "some-func-b" (func $some-func-b)) + (import "env" "some-collide" (func $some-collide$0)) + (global $global-collide i32 (i32.const 0)) + (global $global-collide-mut (mut i32) (i32.const 0)) + (global $global-a i32 (i32.const 1)) + (global $global-collide$0 i32 (i32.const 0)) + (global $global-collide-mut$0 (mut i32) (i32.const 0)) + (global $global-b i32 (i32.const 1)) + (elem (i32.const 8) $only-a $willCollide $some-func $some-collide $only-a $only-a $only-b $willCollide$0 $some-func-b $some-collide$0) + (data (i32.const 1024) "hello, A!\n\00\00\00\00\00\00hello, B!\n\00\00\00\00\00\00") + (export "exp-a" (func $only-a)) + (export "exp-collide" (func $only-a)) + (export "exp-collide2" (func $willCollide)) + (export "exp-b" (func $only-b)) + (export "exp-b-nameCollided" (func $willCollide$0)) + (func $only-a (; 4 ;) (type $FUNCSIG$v) + (drop + (i32.const 100) + ) + (call $only-a) + (call $some-func) + (call $some-collide) + (call_indirect (type $ii) + (i32.const 123) + (i32.const 456) + (i32.const 789) + ) + (drop + (get_global $global-collide) + ) + (drop + (get_global $global-a) + ) + (drop + (i32.const 1024) + ) + (drop + (i32.const 8) + ) + (set_global $global-collide-mut + (i32.const 1234) + ) + ) + (func $willCollide (; 5 ;) (type $FUNCSIG$v) + (drop + (i32.const 200) + ) + (call $willCollide) + ) + (func $only-b (; 6 ;) (type $FUNCSIG$v$0) + (drop + (i32.const 111) + ) + (call $only-b) + (call $some-func-b) + (call $some-collide$0) + (call_indirect (type $ii$0) + (i32.const 12) + (i32.const 34) + (i32.const 56) + ) + (drop + (get_global $global-collide$0) + ) + (drop + (get_global $global-b) + ) + (drop + (i32.add + (i32.const 1024) + (i32.const 16) + ) + ) + (drop + (i32.add + (i32.const 8) + (i32.const 6) + ) + ) + (drop + (i32.add + (i32.const 1024) + (i32.const 1016) + ) + ) + (drop + (i32.add + (i32.const 8) + (i32.const 1006) + ) + ) + (drop + (i32.add + (i32.add + (i32.const 8) + (i32.const 6) + ) + (unreachable) + ) + ) + (drop + (i32.sub + (i32.add + (i32.const 8) + (i32.const 6) + ) + (i32.const 1000) + ) + ) + (set_global $global-collide-mut$0 + (i32.const 5678) + ) + ) + (func $willCollide$0 (; 7 ;) (type $FUNCSIG$v$0) + (drop + (i32.const 222) + ) + (call $willCollide$0) + ) +) diff --git a/src/binaryen/test/merge/basics.wast.combined.finalized.opt b/src/binaryen/test/merge/basics.wast.combined.finalized.opt new file mode 100644 index 0000000000..d023ca1832 --- /dev/null +++ b/src/binaryen/test/merge/basics.wast.combined.finalized.opt @@ -0,0 +1,84 @@ +(module + (type $ii (func (param i32 i32))) + (type $FUNCSIG$v (func)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 18 anyfunc)) + (import "env" "some-func" (func $some-func)) + (import "env" "some-collide" (func $some-collide)) + (import "env" "some-func-b" (func $some-func-b)) + (import "env" "some-collide" (func $some-collide$0)) + (global $global-collide i32 (i32.const 0)) + (global $global-collide-mut (mut i32) (i32.const 0)) + (global $global-a i32 (i32.const 1)) + (global $global-collide$0 i32 (i32.const 0)) + (global $global-collide-mut$0 (mut i32) (i32.const 0)) + (global $global-b i32 (i32.const 1)) + (elem (i32.const 8) $only-a $willCollide $some-func $some-collide $only-a $only-a $only-b $willCollide$0 $some-func-b $some-collide$0) + (data (i32.const 1024) "hello, A!\n\00\00\00\00\00\00hello, B!\n") + (export "exp-a" (func $only-a)) + (export "exp-collide" (func $only-a)) + (export "exp-collide2" (func $willCollide)) + (export "exp-b" (func $only-b)) + (export "exp-b-nameCollided" (func $willCollide$0)) + (func $only-a (; 4 ;) (type $FUNCSIG$v) + (nop) + (call $only-a) + (call $some-func) + (call $some-collide) + (call_indirect (type $ii) + (i32.const 123) + (i32.const 456) + (i32.const 789) + ) + (drop + (get_global $global-collide) + ) + (drop + (get_global $global-a) + ) + (nop) + (nop) + (set_global $global-collide-mut + (i32.const 1234) + ) + ) + (func $willCollide (; 5 ;) (type $FUNCSIG$v) + (nop) + (call $willCollide) + ) + (func $only-b (; 6 ;) (type $FUNCSIG$v) + (nop) + (call $only-b) + (call $some-func-b) + (call $some-collide$0) + (call_indirect (type $ii) + (i32.const 12) + (i32.const 34) + (i32.const 56) + ) + (drop + (get_global $global-collide$0) + ) + (drop + (get_global $global-b) + ) + (nop) + (nop) + (nop) + (nop) + (drop + (i32.add + (i32.const 14) + (unreachable) + ) + ) + (nop) + (set_global $global-collide-mut$0 + (i32.const 5678) + ) + ) + (func $willCollide$0 (; 7 ;) (type $FUNCSIG$v) + (nop) + (call $willCollide$0) + ) +) diff --git a/src/binaryen/test/merge/basics.wast.combined.finalized.opt.stdout b/src/binaryen/test/merge/basics.wast.combined.finalized.opt.stdout new file mode 100644 index 0000000000..18fbdb05ed --- /dev/null +++ b/src/binaryen/test/merge/basics.wast.combined.finalized.opt.stdout @@ -0,0 +1,3 @@ +merged total memory size: 32 +merged total table size: 10 +merged functions: 4 diff --git a/src/binaryen/test/merge/basics.wast.combined.finalized.stdout b/src/binaryen/test/merge/basics.wast.combined.finalized.stdout new file mode 100644 index 0000000000..18fbdb05ed --- /dev/null +++ b/src/binaryen/test/merge/basics.wast.combined.finalized.stdout @@ -0,0 +1,3 @@ +merged total memory size: 32 +merged total table size: 10 +merged functions: 4 diff --git a/src/binaryen/test/merge/basics.wast.combined.opt b/src/binaryen/test/merge/basics.wast.combined.opt new file mode 100644 index 0000000000..beddc7e0b0 --- /dev/null +++ b/src/binaryen/test/merge/basics.wast.combined.opt @@ -0,0 +1,120 @@ +(module + (type $ii (func (param i32 i32))) + (type $FUNCSIG$v (func)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 10 anyfunc)) + (import "env" "some-func" (func $some-func)) + (import "env" "some-collide" (func $some-collide)) + (import "env" "memoryBase" (global $memoryBase$0 i32)) + (import "env" "tableBase" (global $tableBase$0 i32)) + (import "env" "some-func-b" (func $some-func-b)) + (import "env" "some-collide" (func $some-collide$0)) + (global $global-collide i32 (i32.const 0)) + (global $global-collide-mut (mut i32) (i32.const 0)) + (global $global-a i32 (i32.const 1)) + (global $global-collide$0 i32 (i32.const 0)) + (global $global-collide-mut$0 (mut i32) (i32.const 0)) + (global $global-b i32 (i32.const 1)) + (elem (get_global $tableBase) $only-a $willCollide $some-func $some-collide $only-a $only-a $only-b $willCollide$0 $some-func-b $some-collide$0) + (data (get_global $memoryBase) "hello, A!\n\00\00\00\00\00\00hello, B!\n") + (export "exp-a" (func $only-a)) + (export "exp-collide" (func $only-a)) + (export "exp-collide2" (func $willCollide)) + (export "exp-b" (func $only-b)) + (export "exp-b-nameCollided" (func $willCollide$0)) + (func $only-a (; 4 ;) (type $FUNCSIG$v) + (nop) + (call $only-a) + (call $some-func) + (call $some-collide) + (call_indirect (type $ii) + (i32.const 123) + (i32.const 456) + (i32.const 789) + ) + (drop + (get_global $global-collide) + ) + (drop + (get_global $global-a) + ) + (drop + (get_global $memoryBase) + ) + (drop + (get_global $tableBase) + ) + (set_global $global-collide-mut + (i32.const 1234) + ) + ) + (func $willCollide (; 5 ;) (type $FUNCSIG$v) + (nop) + (call $willCollide) + ) + (func $only-b (; 6 ;) (type $FUNCSIG$v) + (nop) + (call $only-b) + (call $some-func-b) + (call $some-collide$0) + (call_indirect (type $ii) + (i32.const 12) + (i32.const 34) + (i32.const 56) + ) + (drop + (get_global $global-collide$0) + ) + (drop + (get_global $global-b) + ) + (drop + (i32.add + (get_global $memoryBase$0) + (i32.const 16) + ) + ) + (drop + (i32.add + (get_global $tableBase$0) + (i32.const 6) + ) + ) + (drop + (i32.add + (get_global $memoryBase$0) + (i32.const 1016) + ) + ) + (drop + (i32.add + (get_global $tableBase$0) + (i32.const 1006) + ) + ) + (drop + (i32.add + (i32.add + (get_global $tableBase$0) + (i32.const 6) + ) + (unreachable) + ) + ) + (drop + (i32.add + (get_global $tableBase$0) + (i32.const -994) + ) + ) + (set_global $global-collide-mut$0 + (i32.const 5678) + ) + ) + (func $willCollide$0 (; 7 ;) (type $FUNCSIG$v) + (nop) + (call $willCollide$0) + ) +) diff --git a/src/binaryen/test/merge/basics.wast.combined.opt.stdout b/src/binaryen/test/merge/basics.wast.combined.opt.stdout new file mode 100644 index 0000000000..18fbdb05ed --- /dev/null +++ b/src/binaryen/test/merge/basics.wast.combined.opt.stdout @@ -0,0 +1,3 @@ +merged total memory size: 32 +merged total table size: 10 +merged functions: 4 diff --git a/src/binaryen/test/merge/basics.wast.combined.stdout b/src/binaryen/test/merge/basics.wast.combined.stdout new file mode 100644 index 0000000000..18fbdb05ed --- /dev/null +++ b/src/binaryen/test/merge/basics.wast.combined.stdout @@ -0,0 +1,3 @@ +merged total memory size: 32 +merged total table size: 10 +merged functions: 4 diff --git a/src/binaryen/test/merge/basics.wast.toMerge b/src/binaryen/test/merge/basics.wast.toMerge new file mode 100644 index 0000000000..954b95bce3 --- /dev/null +++ b/src/binaryen/test/merge/basics.wast.toMerge @@ -0,0 +1,63 @@ +(module + (type $ii (func (param i32 i32))) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) + (import "env" "some-func-b" (func $some-func-b)) + (import "env" "some-collide" (func $some-collide)) + (data (get_global $memoryBase) "hello, B!\n") + (global $global-collide i32 (i32.const 0)) + (global $global-collide-mut (mut i32) (i32.const 0)) + (global $global-b i32 (i32.const 1)) + (elem (get_global $tableBase) $only-b $willCollide $some-func-b $some-collide) + (export "exp-b" (func $only-b)) + (export "exp-collide" (func $only-b)) + (export "exp-collide2" (func $willCollide)) + (export "exp-b-nameCollided" (func $willCollide)) + (func $only-b + (drop (i32.const 111)) + (call $only-b) + (call $some-func-b) + (call_import $some-collide) + (call_indirect (type $ii) + (i32.const 12) + (i32.const 34) + (i32.const 56) + ) + (drop (get_global $global-collide)) + (drop (get_global $global-b)) + (drop (get_global $memoryBase)) + (drop (get_global $tableBase)) + (drop + (i32.add + (get_global $memoryBase) + (i32.const 1000) + ) + ) + (drop + (i32.add + (get_global $tableBase) + (i32.const 1000) + ) + ) + (drop + (i32.add + (get_global $tableBase) + (unreachable) ;; bad! + ) + ) + (drop + (i32.sub ;; bad! + (get_global $tableBase) + (i32.const 1000) + ) + ) + (set_global $global-collide-mut (i32.const 5678)) + ) + (func $willCollide + (drop (i32.const 222)) + (call $willCollide) + ) +) + diff --git a/src/binaryen/test/merge/dylib.wasm b/src/binaryen/test/merge/dylib.wasm new file mode 100644 index 0000000000000000000000000000000000000000..8df894a7498ca31769ebdbffa446725b0a8791c8 GIT binary patch literal 386 zcmZusF;2uV5FD?Qz@3E@QBoaBN(%VFg%=?4fW)V>M2^IX5+CR)2MHljfuP|Z)bIoT zMC^b>L9y2C% zU=Bx?Bh;|S4kjA%fy0r)FXb792G-{gI6A?D&KA&#_$%xmv0OEY!pJ?KEG&JRJgZV1|iRtEzi`x|#U zv1cX>;Kf}Ep!~?Wm$Zo@PgCIthmcY}WCyQE%GV#rt0ih)^18gLMa7c|pGlfIZ4JF= ei2c@fz7O>=<#+gRvH0(`$CN8Bwwu;nSNH}{!e40s literal 0 HcmV?d00001 diff --git a/src/binaryen/test/merge/fusing.wast b/src/binaryen/test/merge/fusing.wast new file mode 100644 index 0000000000..588647e358 --- /dev/null +++ b/src/binaryen/test/merge/fusing.wast @@ -0,0 +1,18 @@ +(module + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) + (export "foo" (func $foo-func)) + (import "env" "bar" (func $bar-func)) + (global $a-global i32 (i32.const 0)) + (export "aglobal" (global $a-global)) + (import "env" "bglobal" (global $b-global f64)) + (func $foo-func + (drop (i32.const 1337)) + (call_import $bar-func) + (drop (get_global $a-global)) + (drop (get_global $b-global)) + ) +) + diff --git a/src/binaryen/test/merge/fusing.wast.combined b/src/binaryen/test/merge/fusing.wast.combined new file mode 100644 index 0000000000..37f0358ec5 --- /dev/null +++ b/src/binaryen/test/merge/fusing.wast.combined @@ -0,0 +1,44 @@ +(module + (type $FUNCSIG$v (func)) + (type $FUNCSIG$v$0 (func)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase$0 i32)) + (import "env" "tableBase" (global $tableBase$0 i32)) + (global $a-global i32 (i32.const 0)) + (global $b-global f64 (f64.const 2.14281428)) + + (data (get_global $memoryBase) "") + (export "foo" (func $foo-func)) + (export "aglobal" (global $a-global)) + (export "bar" (func $bar-func)) + (export "bglobal" (global $b-global)) + (func $foo-func (; 0 ;) (type $FUNCSIG$v) + (drop + (i32.const 1337) + ) + (call $bar-func) + (drop + (get_global $a-global) + ) + (drop + (get_global $b-global) + ) + ) + (func $b (; 1 ;) (type $FUNCSIG$v$0) + (call $foo-func) + ) + (func $bar-func (; 2 ;) (type $FUNCSIG$v$0) + (drop + (f64.const 3.14159) + ) + (drop + (get_global $a-global) + ) + (drop + (get_global $b-global) + ) + ) +) diff --git a/src/binaryen/test/merge/fusing.wast.combined.finalized b/src/binaryen/test/merge/fusing.wast.combined.finalized new file mode 100644 index 0000000000..2675454bdd --- /dev/null +++ b/src/binaryen/test/merge/fusing.wast.combined.finalized @@ -0,0 +1,44 @@ +(module + (type $FUNCSIG$v (func)) + (type $FUNCSIG$v$0 (func)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 8 anyfunc)) + (import "env" "memoryBase" (global $memoryBase$0 i32)) + (import "env" "tableBase" (global $tableBase$0 i32)) + (global $a-global i32 (i32.const 0)) + (global $b-global f64 (f64.const 2.14281428)) + + (data (i32.const 1024) "") + (export "foo" (func $foo-func)) + (export "aglobal" (global $a-global)) + (export "bar" (func $bar-func)) + (export "bglobal" (global $b-global)) + (func $foo-func (; 0 ;) (type $FUNCSIG$v) + (drop + (i32.const 1337) + ) + (call $bar-func) + (drop + (get_global $a-global) + ) + (drop + (get_global $b-global) + ) + ) + (func $b (; 1 ;) (type $FUNCSIG$v$0) + (call $foo-func) + ) + (func $bar-func (; 2 ;) (type $FUNCSIG$v$0) + (drop + (f64.const 3.14159) + ) + (drop + (get_global $a-global) + ) + (drop + (get_global $b-global) + ) + ) +) diff --git a/src/binaryen/test/merge/fusing.wast.combined.finalized.opt b/src/binaryen/test/merge/fusing.wast.combined.finalized.opt new file mode 100644 index 0000000000..2e8a19ebfc --- /dev/null +++ b/src/binaryen/test/merge/fusing.wast.combined.finalized.opt @@ -0,0 +1,31 @@ +(module + (type $FUNCSIG$v (func)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 8 anyfunc)) + (global $a-global i32 (i32.const 0)) + (global $b-global f64 (f64.const 2.14281428)) + + (export "foo" (func $foo-func)) + (export "aglobal" (global $a-global)) + (export "bar" (func $bar-func)) + (export "bglobal" (global $b-global)) + (func $foo-func (; 0 ;) (type $FUNCSIG$v) + (nop) + (call $bar-func) + (drop + (get_global $a-global) + ) + (drop + (get_global $b-global) + ) + ) + (func $bar-func (; 1 ;) (type $FUNCSIG$v) + (nop) + (drop + (get_global $a-global) + ) + (drop + (get_global $b-global) + ) + ) +) diff --git a/src/binaryen/test/merge/fusing.wast.combined.finalized.opt.stdout b/src/binaryen/test/merge/fusing.wast.combined.finalized.opt.stdout new file mode 100644 index 0000000000..80b514d229 --- /dev/null +++ b/src/binaryen/test/merge/fusing.wast.combined.finalized.opt.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 3 diff --git a/src/binaryen/test/merge/fusing.wast.combined.finalized.stdout b/src/binaryen/test/merge/fusing.wast.combined.finalized.stdout new file mode 100644 index 0000000000..80b514d229 --- /dev/null +++ b/src/binaryen/test/merge/fusing.wast.combined.finalized.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 3 diff --git a/src/binaryen/test/merge/fusing.wast.combined.opt b/src/binaryen/test/merge/fusing.wast.combined.opt new file mode 100644 index 0000000000..b48bc05340 --- /dev/null +++ b/src/binaryen/test/merge/fusing.wast.combined.opt @@ -0,0 +1,34 @@ +(module + (type $FUNCSIG$v (func)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) + (global $a-global i32 (i32.const 0)) + (global $b-global f64 (f64.const 2.14281428)) + + (data (get_global $memoryBase) "") + (export "foo" (func $foo-func)) + (export "aglobal" (global $a-global)) + (export "bar" (func $bar-func)) + (export "bglobal" (global $b-global)) + (func $foo-func (; 0 ;) (type $FUNCSIG$v) + (nop) + (call $bar-func) + (drop + (get_global $a-global) + ) + (drop + (get_global $b-global) + ) + ) + (func $bar-func (; 1 ;) (type $FUNCSIG$v) + (nop) + (drop + (get_global $a-global) + ) + (drop + (get_global $b-global) + ) + ) +) diff --git a/src/binaryen/test/merge/fusing.wast.combined.opt.stdout b/src/binaryen/test/merge/fusing.wast.combined.opt.stdout new file mode 100644 index 0000000000..80b514d229 --- /dev/null +++ b/src/binaryen/test/merge/fusing.wast.combined.opt.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 3 diff --git a/src/binaryen/test/merge/fusing.wast.combined.stdout b/src/binaryen/test/merge/fusing.wast.combined.stdout new file mode 100644 index 0000000000..80b514d229 --- /dev/null +++ b/src/binaryen/test/merge/fusing.wast.combined.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 3 diff --git a/src/binaryen/test/merge/fusing.wast.toMerge b/src/binaryen/test/merge/fusing.wast.toMerge new file mode 100644 index 0000000000..4abd0a5e1c --- /dev/null +++ b/src/binaryen/test/merge/fusing.wast.toMerge @@ -0,0 +1,20 @@ +(module + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) + (import "env" "foo" (func $b-foo)) + (export "bar" (func $bar-func)) + (global $b-global f64 (f64.const 2.14281428)) + (export "bglobal" (global $b-global)) + (import "env" "aglobal" (global $a-global i32)) + (func $b + (call $b-foo) + ) + (func $bar-func + (drop (f64.const 3.14159)) + (drop (get_global $a-global)) + (drop (get_global $b-global)) + ) +) + diff --git a/src/binaryen/test/merge/global-init.wast b/src/binaryen/test/merge/global-init.wast new file mode 100644 index 0000000000..ddf1a868f2 --- /dev/null +++ b/src/binaryen/test/merge/global-init.wast @@ -0,0 +1,10 @@ +(module + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) + (import "env" "globally" (global $i-collide i32)) + (global $a i32 (get_global $i-collide)) + (global $g-collide i32 (get_global $i-collide)) +) + diff --git a/src/binaryen/test/merge/global-init.wast.combined b/src/binaryen/test/merge/global-init.wast.combined new file mode 100644 index 0000000000..95b3399686 --- /dev/null +++ b/src/binaryen/test/merge/global-init.wast.combined @@ -0,0 +1,16 @@ +(module + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) + (import "env" "globally" (global $i-collide i32)) + (import "env" "memoryBase" (global $memoryBase$0 i32)) + (import "env" "tableBase" (global $tableBase$0 i32)) + (import "env" "globally" (global $i-collide$0 f64)) + (global $a i32 (get_global $i-collide)) + (global $g-collide i32 (get_global $i-collide)) + (global $b f64 (get_global $i-collide$0)) + (global $g-collide$0 f64 (get_global $i-collide$0)) + + (data (get_global $memoryBase) "") +) diff --git a/src/binaryen/test/merge/global-init.wast.combined.finalized b/src/binaryen/test/merge/global-init.wast.combined.finalized new file mode 100644 index 0000000000..40a5066fac --- /dev/null +++ b/src/binaryen/test/merge/global-init.wast.combined.finalized @@ -0,0 +1,16 @@ +(module + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 8 anyfunc)) + (import "env" "globally" (global $i-collide i32)) + (import "env" "memoryBase" (global $memoryBase$0 i32)) + (import "env" "tableBase" (global $tableBase$0 i32)) + (import "env" "globally" (global $i-collide$0 f64)) + (global $a i32 (get_global $i-collide)) + (global $g-collide i32 (get_global $i-collide)) + (global $b f64 (get_global $i-collide$0)) + (global $g-collide$0 f64 (get_global $i-collide$0)) + + (data (i32.const 1024) "") +) diff --git a/src/binaryen/test/merge/global-init.wast.combined.finalized.opt b/src/binaryen/test/merge/global-init.wast.combined.finalized.opt new file mode 100644 index 0000000000..02a0900f54 --- /dev/null +++ b/src/binaryen/test/merge/global-init.wast.combined.finalized.opt @@ -0,0 +1,5 @@ +(module + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 8 anyfunc)) + +) diff --git a/src/binaryen/test/merge/global-init.wast.combined.finalized.opt.stdout b/src/binaryen/test/merge/global-init.wast.combined.finalized.opt.stdout new file mode 100644 index 0000000000..361590ef0d --- /dev/null +++ b/src/binaryen/test/merge/global-init.wast.combined.finalized.opt.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 0 diff --git a/src/binaryen/test/merge/global-init.wast.combined.finalized.stdout b/src/binaryen/test/merge/global-init.wast.combined.finalized.stdout new file mode 100644 index 0000000000..361590ef0d --- /dev/null +++ b/src/binaryen/test/merge/global-init.wast.combined.finalized.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 0 diff --git a/src/binaryen/test/merge/global-init.wast.combined.opt b/src/binaryen/test/merge/global-init.wast.combined.opt new file mode 100644 index 0000000000..44c047693a --- /dev/null +++ b/src/binaryen/test/merge/global-init.wast.combined.opt @@ -0,0 +1,8 @@ +(module + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) + + (data (get_global $memoryBase) "") +) diff --git a/src/binaryen/test/merge/global-init.wast.combined.opt.stdout b/src/binaryen/test/merge/global-init.wast.combined.opt.stdout new file mode 100644 index 0000000000..361590ef0d --- /dev/null +++ b/src/binaryen/test/merge/global-init.wast.combined.opt.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 0 diff --git a/src/binaryen/test/merge/global-init.wast.combined.stdout b/src/binaryen/test/merge/global-init.wast.combined.stdout new file mode 100644 index 0000000000..361590ef0d --- /dev/null +++ b/src/binaryen/test/merge/global-init.wast.combined.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 0 diff --git a/src/binaryen/test/merge/global-init.wast.toMerge b/src/binaryen/test/merge/global-init.wast.toMerge new file mode 100644 index 0000000000..6f5d5e6dde --- /dev/null +++ b/src/binaryen/test/merge/global-init.wast.toMerge @@ -0,0 +1,10 @@ +(module + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) + (import "env" "globally" (global $i-collide f64)) + (global $b f64 (get_global $i-collide)) + (global $g-collide f64 (get_global $i-collide)) +) + diff --git a/src/binaryen/test/merge/main-lacks-segments.wast b/src/binaryen/test/merge/main-lacks-segments.wast new file mode 100644 index 0000000000..c18db24706 --- /dev/null +++ b/src/binaryen/test/merge/main-lacks-segments.wast @@ -0,0 +1,7 @@ +(module + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) +) + diff --git a/src/binaryen/test/merge/main-lacks-segments.wast.combined b/src/binaryen/test/merge/main-lacks-segments.wast.combined new file mode 100644 index 0000000000..91fcde27d6 --- /dev/null +++ b/src/binaryen/test/merge/main-lacks-segments.wast.combined @@ -0,0 +1,25 @@ +(module + (type $0 (func)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 2 anyfunc)) + (import "env" "memoryBase" (global $memoryBase$0 i32)) + (import "env" "tableBase" (global $tableBase$0 i32)) + (elem (get_global $tableBase) $foo $foo) + (data (get_global $memoryBase) "hello, this is some data!\00\00\00\00\00\00\00") + (func $foo (; 0 ;) (type $0) + (drop + (i32.add + (get_global $tableBase$0) + (i32.const 0) + ) + ) + (drop + (i32.add + (get_global $memoryBase$0) + (i32.const 0) + ) + ) + ) +) diff --git a/src/binaryen/test/merge/main-lacks-segments.wast.combined.finalized b/src/binaryen/test/merge/main-lacks-segments.wast.combined.finalized new file mode 100644 index 0000000000..dd180662d3 --- /dev/null +++ b/src/binaryen/test/merge/main-lacks-segments.wast.combined.finalized @@ -0,0 +1,25 @@ +(module + (type $0 (func)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 10 anyfunc)) + (import "env" "memoryBase" (global $memoryBase$0 i32)) + (import "env" "tableBase" (global $tableBase$0 i32)) + (elem (i32.const 8) $foo $foo) + (data (i32.const 1024) "hello, this is some data!\00\00\00\00\00\00\00") + (func $foo (; 0 ;) (type $0) + (drop + (i32.add + (i32.const 8) + (i32.const 0) + ) + ) + (drop + (i32.add + (i32.const 1024) + (i32.const 0) + ) + ) + ) +) diff --git a/src/binaryen/test/merge/main-lacks-segments.wast.combined.finalized.opt b/src/binaryen/test/merge/main-lacks-segments.wast.combined.finalized.opt new file mode 100644 index 0000000000..d37e264387 --- /dev/null +++ b/src/binaryen/test/merge/main-lacks-segments.wast.combined.finalized.opt @@ -0,0 +1,10 @@ +(module + (type $0 (func)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 10 anyfunc)) + (elem (i32.const 8) $foo $foo) + (data (i32.const 1024) "hello, this is some data!") + (func $foo (; 0 ;) (type $0) + (nop) + ) +) diff --git a/src/binaryen/test/merge/main-lacks-segments.wast.combined.finalized.opt.stdout b/src/binaryen/test/merge/main-lacks-segments.wast.combined.finalized.opt.stdout new file mode 100644 index 0000000000..5e72852f9b --- /dev/null +++ b/src/binaryen/test/merge/main-lacks-segments.wast.combined.finalized.opt.stdout @@ -0,0 +1,3 @@ +merged total memory size: 32 +merged total table size: 2 +merged functions: 1 diff --git a/src/binaryen/test/merge/main-lacks-segments.wast.combined.finalized.stdout b/src/binaryen/test/merge/main-lacks-segments.wast.combined.finalized.stdout new file mode 100644 index 0000000000..5e72852f9b --- /dev/null +++ b/src/binaryen/test/merge/main-lacks-segments.wast.combined.finalized.stdout @@ -0,0 +1,3 @@ +merged total memory size: 32 +merged total table size: 2 +merged functions: 1 diff --git a/src/binaryen/test/merge/main-lacks-segments.wast.combined.opt b/src/binaryen/test/merge/main-lacks-segments.wast.combined.opt new file mode 100644 index 0000000000..6fb489574a --- /dev/null +++ b/src/binaryen/test/merge/main-lacks-segments.wast.combined.opt @@ -0,0 +1,19 @@ +(module + (type $0 (func)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 2 anyfunc)) + (import "env" "memoryBase" (global $memoryBase$0 i32)) + (import "env" "tableBase" (global $tableBase$0 i32)) + (elem (get_global $tableBase) $foo $foo) + (data (get_global $memoryBase) "hello, this is some data!") + (func $foo (; 0 ;) (type $0) + (drop + (get_global $tableBase$0) + ) + (drop + (get_global $memoryBase$0) + ) + ) +) diff --git a/src/binaryen/test/merge/main-lacks-segments.wast.combined.opt.stdout b/src/binaryen/test/merge/main-lacks-segments.wast.combined.opt.stdout new file mode 100644 index 0000000000..5e72852f9b --- /dev/null +++ b/src/binaryen/test/merge/main-lacks-segments.wast.combined.opt.stdout @@ -0,0 +1,3 @@ +merged total memory size: 32 +merged total table size: 2 +merged functions: 1 diff --git a/src/binaryen/test/merge/main-lacks-segments.wast.combined.stdout b/src/binaryen/test/merge/main-lacks-segments.wast.combined.stdout new file mode 100644 index 0000000000..5e72852f9b --- /dev/null +++ b/src/binaryen/test/merge/main-lacks-segments.wast.combined.stdout @@ -0,0 +1,3 @@ +merged total memory size: 32 +merged total table size: 2 +merged functions: 1 diff --git a/src/binaryen/test/merge/main-lacks-segments.wast.toMerge b/src/binaryen/test/merge/main-lacks-segments.wast.toMerge new file mode 100644 index 0000000000..63c2c3a3a7 --- /dev/null +++ b/src/binaryen/test/merge/main-lacks-segments.wast.toMerge @@ -0,0 +1,13 @@ +(module + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) + (elem (get_global $tableBase) $foo) + (data (get_global $memoryBase) "hello, this is some data!") + (func $foo + (drop (get_global $tableBase)) + (drop (get_global $memoryBase)) + ) +) + diff --git a/src/binaryen/test/merge/post-instantiate-a.wast b/src/binaryen/test/merge/post-instantiate-a.wast new file mode 100644 index 0000000000..5099df5747 --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-a.wast @@ -0,0 +1,9 @@ +(module + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "__post_instantiate" (func $0)) + (func $0 + (drop (i32.const 1000)) + ) +) + diff --git a/src/binaryen/test/merge/post-instantiate-a.wast.combined b/src/binaryen/test/merge/post-instantiate-a.wast.combined new file mode 100644 index 0000000000..23ff598afc --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-a.wast.combined @@ -0,0 +1,19 @@ +(module + (type $0 (func)) + (type $0$0 (func)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memoryBase" (global $memoryBase$0 i32)) + (import "env" "tableBase" (global $tableBase$0 i32)) + (memory $0 0) + (data (get_global $memoryBase) "") + (export "__post_instantiate" (func $0)) + (func $0 (; 0 ;) (type $0) + (drop + (i32.const 1000) + ) + ) + (func $0$0 (; 1 ;) (type $0$0) + (nop) + ) +) diff --git a/src/binaryen/test/merge/post-instantiate-a.wast.combined.finalized b/src/binaryen/test/merge/post-instantiate-a.wast.combined.finalized new file mode 100644 index 0000000000..edd0d85e39 --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-a.wast.combined.finalized @@ -0,0 +1,19 @@ +(module + (type $0 (func)) + (type $0$0 (func)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memoryBase" (global $memoryBase$0 i32)) + (import "env" "tableBase" (global $tableBase$0 i32)) + (memory $0 1) + (data (i32.const 1024) "") + (export "__post_instantiate" (func $0)) + (func $0 (; 0 ;) (type $0) + (drop + (i32.const 1000) + ) + ) + (func $0$0 (; 1 ;) (type $0$0) + (nop) + ) +) diff --git a/src/binaryen/test/merge/post-instantiate-a.wast.combined.finalized.opt b/src/binaryen/test/merge/post-instantiate-a.wast.combined.finalized.opt new file mode 100644 index 0000000000..38b2931679 --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-a.wast.combined.finalized.opt @@ -0,0 +1,9 @@ +(module + (type $0 (func)) + (memory $0 1) + (data (i32.const 1024) "") + (export "__post_instantiate" (func $0)) + (func $0 (; 0 ;) (type $0) + (nop) + ) +) diff --git a/src/binaryen/test/merge/post-instantiate-a.wast.combined.finalized.opt.stdout b/src/binaryen/test/merge/post-instantiate-a.wast.combined.finalized.opt.stdout new file mode 100644 index 0000000000..3816869a76 --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-a.wast.combined.finalized.opt.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 2 diff --git a/src/binaryen/test/merge/post-instantiate-a.wast.combined.finalized.stdout b/src/binaryen/test/merge/post-instantiate-a.wast.combined.finalized.stdout new file mode 100644 index 0000000000..3816869a76 --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-a.wast.combined.finalized.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 2 diff --git a/src/binaryen/test/merge/post-instantiate-a.wast.combined.opt b/src/binaryen/test/merge/post-instantiate-a.wast.combined.opt new file mode 100644 index 0000000000..8d0f05db20 --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-a.wast.combined.opt @@ -0,0 +1,11 @@ +(module + (type $0 (func)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (memory $0 0) + (data (get_global $memoryBase) "") + (export "__post_instantiate" (func $0)) + (func $0 (; 0 ;) (type $0) + (nop) + ) +) diff --git a/src/binaryen/test/merge/post-instantiate-a.wast.combined.opt.stdout b/src/binaryen/test/merge/post-instantiate-a.wast.combined.opt.stdout new file mode 100644 index 0000000000..3816869a76 --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-a.wast.combined.opt.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 2 diff --git a/src/binaryen/test/merge/post-instantiate-a.wast.combined.stdout b/src/binaryen/test/merge/post-instantiate-a.wast.combined.stdout new file mode 100644 index 0000000000..3816869a76 --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-a.wast.combined.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 2 diff --git a/src/binaryen/test/merge/post-instantiate-a.wast.toMerge b/src/binaryen/test/merge/post-instantiate-a.wast.toMerge new file mode 100644 index 0000000000..3b62ceb9ec --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-a.wast.toMerge @@ -0,0 +1,6 @@ +(module + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (func $0) +) + diff --git a/src/binaryen/test/merge/post-instantiate-b.wast b/src/binaryen/test/merge/post-instantiate-b.wast new file mode 100644 index 0000000000..3b62ceb9ec --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-b.wast @@ -0,0 +1,6 @@ +(module + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (func $0) +) + diff --git a/src/binaryen/test/merge/post-instantiate-b.wast.combined b/src/binaryen/test/merge/post-instantiate-b.wast.combined new file mode 100644 index 0000000000..74f4ede174 --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-b.wast.combined @@ -0,0 +1,19 @@ +(module + (type $0 (func)) + (type $0$0 (func)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memoryBase" (global $memoryBase$0 i32)) + (import "env" "tableBase" (global $tableBase$0 i32)) + (memory $0 0) + (data (get_global $memoryBase) "") + (export "__post_instantiate" (func $0$0)) + (func $0 (; 0 ;) (type $0) + (nop) + ) + (func $0$0 (; 1 ;) (type $0$0) + (drop + (i32.const 2000) + ) + ) +) diff --git a/src/binaryen/test/merge/post-instantiate-b.wast.combined.finalized b/src/binaryen/test/merge/post-instantiate-b.wast.combined.finalized new file mode 100644 index 0000000000..b9ec7cba5c --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-b.wast.combined.finalized @@ -0,0 +1,19 @@ +(module + (type $0 (func)) + (type $0$0 (func)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memoryBase" (global $memoryBase$0 i32)) + (import "env" "tableBase" (global $tableBase$0 i32)) + (memory $0 1) + (data (i32.const 1024) "") + (export "__post_instantiate" (func $0$0)) + (func $0 (; 0 ;) (type $0) + (nop) + ) + (func $0$0 (; 1 ;) (type $0$0) + (drop + (i32.const 2000) + ) + ) +) diff --git a/src/binaryen/test/merge/post-instantiate-b.wast.combined.finalized.opt b/src/binaryen/test/merge/post-instantiate-b.wast.combined.finalized.opt new file mode 100644 index 0000000000..749a6a74e7 --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-b.wast.combined.finalized.opt @@ -0,0 +1,9 @@ +(module + (type $0$0 (func)) + (memory $0 1) + (data (i32.const 1024) "") + (export "__post_instantiate" (func $0$0)) + (func $0$0 (; 0 ;) (type $0$0) + (nop) + ) +) diff --git a/src/binaryen/test/merge/post-instantiate-b.wast.combined.finalized.opt.stdout b/src/binaryen/test/merge/post-instantiate-b.wast.combined.finalized.opt.stdout new file mode 100644 index 0000000000..3816869a76 --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-b.wast.combined.finalized.opt.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 2 diff --git a/src/binaryen/test/merge/post-instantiate-b.wast.combined.finalized.stdout b/src/binaryen/test/merge/post-instantiate-b.wast.combined.finalized.stdout new file mode 100644 index 0000000000..3816869a76 --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-b.wast.combined.finalized.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 2 diff --git a/src/binaryen/test/merge/post-instantiate-b.wast.combined.opt b/src/binaryen/test/merge/post-instantiate-b.wast.combined.opt new file mode 100644 index 0000000000..f52546012e --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-b.wast.combined.opt @@ -0,0 +1,11 @@ +(module + (type $0$0 (func)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (memory $0 0) + (data (get_global $memoryBase) "") + (export "__post_instantiate" (func $0$0)) + (func $0$0 (; 0 ;) (type $0$0) + (nop) + ) +) diff --git a/src/binaryen/test/merge/post-instantiate-b.wast.combined.opt.stdout b/src/binaryen/test/merge/post-instantiate-b.wast.combined.opt.stdout new file mode 100644 index 0000000000..3816869a76 --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-b.wast.combined.opt.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 2 diff --git a/src/binaryen/test/merge/post-instantiate-b.wast.combined.stdout b/src/binaryen/test/merge/post-instantiate-b.wast.combined.stdout new file mode 100644 index 0000000000..3816869a76 --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-b.wast.combined.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 2 diff --git a/src/binaryen/test/merge/post-instantiate-b.wast.toMerge b/src/binaryen/test/merge/post-instantiate-b.wast.toMerge new file mode 100644 index 0000000000..0b36783896 --- /dev/null +++ b/src/binaryen/test/merge/post-instantiate-b.wast.toMerge @@ -0,0 +1,9 @@ +(module + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "__post_instantiate" (func $0)) + (func $0 + (drop (i32.const 2000)) + ) +) + diff --git a/src/binaryen/test/merge/printf.wast b/src/binaryen/test/merge/printf.wast new file mode 100644 index 0000000000..c984602bf5 --- /dev/null +++ b/src/binaryen/test/merge/printf.wast @@ -0,0 +1,13 @@ +(module + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) + (import "env" "globally" (global $i-collide i32)) + (import "env" "foobar" (func $import$8 (param i32 i32) (result i32))) + (export "_printf" (func $625)) + (func $625 (param $var$0 i32) (param $var$1 i32) (result i32) + (i32.const 102030) + ) +) + diff --git a/src/binaryen/test/merge/printf.wast.combined b/src/binaryen/test/merge/printf.wast.combined new file mode 100644 index 0000000000..6ea6577503 --- /dev/null +++ b/src/binaryen/test/merge/printf.wast.combined @@ -0,0 +1,28 @@ +(module + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$iii$0 (func (param i32 i32) (result i32))) + (type $1 (func)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) + (import "env" "globally" (global $i-collide i32)) + (import "env" "foobar" (func $import$8 (param i32 i32) (result i32))) + (import "env" "memoryBase" (global $memoryBase$0 i32)) + (import "env" "tableBase" (global $tableBase$0 i32)) + (import "env" "globally" (global $i-collide$0 f64)) + + (data (get_global $memoryBase) "") + (export "_printf" (func $625)) + (func $625 (; 1 ;) (type $FUNCSIG$iii) (param $var$0 i32) (param $var$1 i32) (result i32) + (i32.const 102030) + ) + (func $b (; 2 ;) (type $1) + (drop + (call $625 + (i32.const 11) + (i32.const 22) + ) + ) + ) +) diff --git a/src/binaryen/test/merge/printf.wast.combined.finalized b/src/binaryen/test/merge/printf.wast.combined.finalized new file mode 100644 index 0000000000..7ec67f6028 --- /dev/null +++ b/src/binaryen/test/merge/printf.wast.combined.finalized @@ -0,0 +1,28 @@ +(module + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$iii$0 (func (param i32 i32) (result i32))) + (type $1 (func)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 8 anyfunc)) + (import "env" "globally" (global $i-collide i32)) + (import "env" "foobar" (func $import$8 (param i32 i32) (result i32))) + (import "env" "memoryBase" (global $memoryBase$0 i32)) + (import "env" "tableBase" (global $tableBase$0 i32)) + (import "env" "globally" (global $i-collide$0 f64)) + + (data (i32.const 1024) "") + (export "_printf" (func $625)) + (func $625 (; 1 ;) (type $FUNCSIG$iii) (param $var$0 i32) (param $var$1 i32) (result i32) + (i32.const 102030) + ) + (func $b (; 2 ;) (type $1) + (drop + (call $625 + (i32.const 11) + (i32.const 22) + ) + ) + ) +) diff --git a/src/binaryen/test/merge/printf.wast.combined.finalized.opt b/src/binaryen/test/merge/printf.wast.combined.finalized.opt new file mode 100644 index 0000000000..52276eed88 --- /dev/null +++ b/src/binaryen/test/merge/printf.wast.combined.finalized.opt @@ -0,0 +1,10 @@ +(module + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 8 anyfunc)) + + (export "_printf" (func $625)) + (func $625 (; 0 ;) (type $FUNCSIG$iii) (param $var$0 i32) (param $var$1 i32) (result i32) + (i32.const 102030) + ) +) diff --git a/src/binaryen/test/merge/printf.wast.combined.finalized.opt.stdout b/src/binaryen/test/merge/printf.wast.combined.finalized.opt.stdout new file mode 100644 index 0000000000..3816869a76 --- /dev/null +++ b/src/binaryen/test/merge/printf.wast.combined.finalized.opt.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 2 diff --git a/src/binaryen/test/merge/printf.wast.combined.finalized.stdout b/src/binaryen/test/merge/printf.wast.combined.finalized.stdout new file mode 100644 index 0000000000..3816869a76 --- /dev/null +++ b/src/binaryen/test/merge/printf.wast.combined.finalized.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 2 diff --git a/src/binaryen/test/merge/printf.wast.combined.opt b/src/binaryen/test/merge/printf.wast.combined.opt new file mode 100644 index 0000000000..e3471d6360 --- /dev/null +++ b/src/binaryen/test/merge/printf.wast.combined.opt @@ -0,0 +1,13 @@ +(module + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) + + (data (get_global $memoryBase) "") + (export "_printf" (func $625)) + (func $625 (; 0 ;) (type $FUNCSIG$iii) (param $var$0 i32) (param $var$1 i32) (result i32) + (i32.const 102030) + ) +) diff --git a/src/binaryen/test/merge/printf.wast.combined.opt.stdout b/src/binaryen/test/merge/printf.wast.combined.opt.stdout new file mode 100644 index 0000000000..3816869a76 --- /dev/null +++ b/src/binaryen/test/merge/printf.wast.combined.opt.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 2 diff --git a/src/binaryen/test/merge/printf.wast.combined.stdout b/src/binaryen/test/merge/printf.wast.combined.stdout new file mode 100644 index 0000000000..3816869a76 --- /dev/null +++ b/src/binaryen/test/merge/printf.wast.combined.stdout @@ -0,0 +1,3 @@ +merged total memory size: 0 +merged total table size: 0 +merged functions: 2 diff --git a/src/binaryen/test/merge/printf.wast.toMerge b/src/binaryen/test/merge/printf.wast.toMerge new file mode 100644 index 0000000000..d394abe34a --- /dev/null +++ b/src/binaryen/test/merge/printf.wast.toMerge @@ -0,0 +1,14 @@ +(module + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) + (import "env" "globally" (global $i-collide f64)) + (import "env" "_printf" (func $import$8 (param i32 i32) (result i32))) + (func $b + (drop + (call $import$8 (i32.const 11) (i32.const 22)) + ) + ) +) + diff --git a/src/binaryen/test/min.asm.js b/src/binaryen/test/min.asm.js new file mode 100644 index 0000000000..3352879884 --- /dev/null +++ b/src/binaryen/test/min.asm.js @@ -0,0 +1,52 @@ +function (global, env, buffer) { + "use asm"; + + var c = new global.Int32Array(buffer); + var g = new global.Float32Array(buffer); + + var fr = global.Math.fround; + + var tDP = env.tempDoublePtr | 0; + var ctz32 = env._llvm_cttz_i32; + + var h8 = new global.Int8Array(buffer); + var h16 = new global.Int16Array(buffer); + var h32 = new global.Int32Array(buffer); + var hU8 = new global.Uint8Array(buffer); + var hU16 = new global.Uint16Array(buffer); + var hU32 = new global.Uint32Array(buffer); + var hF32 = new global.Float32Array(buffer); + var hF64 = new global.Float64Array(buffer); + + var M = 0; // tempRet + + function floats(f) { + f = fr(f); + var t = fr(0); + return fr(t + f); + } + function neg(k, p) { + k = k | 0; + p = p | 0; + var n = fr(0); + n = fr(-(c[k >> 2] = p, fr(g[k >> 2]))); + return n; + } + function bitcasts(i, f) { + i = i | 0; + f = Math_fround(f); + (h32[tDP >> 2] = i, fr(hF32[tDP >> 2])); // i32->f32 + (h32[tDP >> 2] = i, +hF32[tDP >> 2]); // i32->f32, no fround + (hF32[tDP >> 2] = f, h32[tDP >> 2] | 0); // f32->i32 + } + function ctzzzz() { + return ctz32(0x1234) | 0; + } + function ub() { + ub(); // emterpreter assertions mode might add some code here + return M | 0; + } + + return { floats: floats, getTempRet0: ub, neg: neg, bitcasts: bitcasts, ctzzzz: ctzzzz }; +} + diff --git a/src/binaryen/test/min.fromasm b/src/binaryen/test/min.fromasm new file mode 100644 index 0000000000..ecee68833d --- /dev/null +++ b/src/binaryen/test/min.fromasm @@ -0,0 +1,68 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $M (mut i32) (i32.const 0)) + (data (get_global $memoryBase) "min.asm.js") + (export "floats" (func $legalstub$floats)) + (export "getTempRet0" (func $ub)) + (export "neg" (func $legalstub$neg)) + (export "bitcasts" (func $legalstub$bitcasts)) + (export "ctzzzz" (func $ctzzzz)) + (func $floats (; 0 ;) (param $0 f32) (result f32) + (local $1 f32) + (f32.add + (get_local $1) + (get_local $0) + ) + ) + (func $neg (; 1 ;) (param $0 i32) (param $1 i32) (result f32) + (i32.store + (get_local $0) + (get_local $1) + ) + (f32.neg + (f32.load + (get_local $0) + ) + ) + ) + (func $bitcasts (; 2 ;) (param $0 i32) (param $1 f32) + (nop) + ) + (func $ctzzzz (; 3 ;) (result i32) + (i32.const 2) + ) + (func $ub (; 4 ;) (result i32) + (drop + (call $ub) + ) + (get_global $M) + ) + (func $legalstub$floats (; 5 ;) (param $0 f64) (result f64) + (f64.promote/f32 + (call $floats + (f32.demote/f64 + (get_local $0) + ) + ) + ) + ) + (func $legalstub$neg (; 6 ;) (param $0 i32) (param $1 i32) (result f64) + (f64.promote/f32 + (call $neg + (get_local $0) + (get_local $1) + ) + ) + ) + (func $legalstub$bitcasts (; 7 ;) (param $0 i32) (param $1 f64) + (call $bitcasts + (get_local $0) + (f32.demote/f64 + (get_local $1) + ) + ) + ) +) diff --git a/src/binaryen/test/min.fromasm.clamp b/src/binaryen/test/min.fromasm.clamp new file mode 100644 index 0000000000..ecee68833d --- /dev/null +++ b/src/binaryen/test/min.fromasm.clamp @@ -0,0 +1,68 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $M (mut i32) (i32.const 0)) + (data (get_global $memoryBase) "min.asm.js") + (export "floats" (func $legalstub$floats)) + (export "getTempRet0" (func $ub)) + (export "neg" (func $legalstub$neg)) + (export "bitcasts" (func $legalstub$bitcasts)) + (export "ctzzzz" (func $ctzzzz)) + (func $floats (; 0 ;) (param $0 f32) (result f32) + (local $1 f32) + (f32.add + (get_local $1) + (get_local $0) + ) + ) + (func $neg (; 1 ;) (param $0 i32) (param $1 i32) (result f32) + (i32.store + (get_local $0) + (get_local $1) + ) + (f32.neg + (f32.load + (get_local $0) + ) + ) + ) + (func $bitcasts (; 2 ;) (param $0 i32) (param $1 f32) + (nop) + ) + (func $ctzzzz (; 3 ;) (result i32) + (i32.const 2) + ) + (func $ub (; 4 ;) (result i32) + (drop + (call $ub) + ) + (get_global $M) + ) + (func $legalstub$floats (; 5 ;) (param $0 f64) (result f64) + (f64.promote/f32 + (call $floats + (f32.demote/f64 + (get_local $0) + ) + ) + ) + ) + (func $legalstub$neg (; 6 ;) (param $0 i32) (param $1 i32) (result f64) + (f64.promote/f32 + (call $neg + (get_local $0) + (get_local $1) + ) + ) + ) + (func $legalstub$bitcasts (; 7 ;) (param $0 i32) (param $1 f64) + (call $bitcasts + (get_local $0) + (f32.demote/f64 + (get_local $1) + ) + ) + ) +) diff --git a/src/binaryen/test/min.fromasm.clamp.no-opts b/src/binaryen/test/min.fromasm.clamp.no-opts new file mode 100644 index 0000000000..02579216d4 --- /dev/null +++ b/src/binaryen/test/min.fromasm.clamp.no-opts @@ -0,0 +1,101 @@ +(module + (import "env" "tempDoublePtr" (global $tDP$asm2wasm$import i32)) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $tDP (mut i32) (get_global $tDP$asm2wasm$import)) + (global $M (mut i32) (i32.const 0)) + (export "floats" (func $legalstub$floats)) + (export "getTempRet0" (func $ub)) + (export "neg" (func $legalstub$neg)) + (export "bitcasts" (func $legalstub$bitcasts)) + (export "ctzzzz" (func $ctzzzz)) + (func $floats (; 0 ;) (param $f f32) (result f32) + (local $t f32) + (return + (f32.add + (get_local $t) + (get_local $f) + ) + ) + ) + (func $neg (; 1 ;) (param $k i32) (param $p i32) (result f32) + (local $n f32) + (set_local $n + (f32.neg + (block (result f32) + (i32.store + (get_local $k) + (get_local $p) + ) + (f32.load + (get_local $k) + ) + ) + ) + ) + (return + (get_local $n) + ) + ) + (func $bitcasts (; 2 ;) (param $i i32) (param $f f32) + (drop + (f32.reinterpret/i32 + (get_local $i) + ) + ) + (drop + (f64.promote/f32 + (f32.reinterpret/i32 + (get_local $i) + ) + ) + ) + (drop + (i32.reinterpret/f32 + (get_local $f) + ) + ) + ) + (func $ctzzzz (; 3 ;) (result i32) + (return + (i32.ctz + (i32.const 4660) + ) + ) + ) + (func $ub (; 4 ;) (result i32) + (drop + (call $ub) + ) + (return + (get_global $M) + ) + ) + (func $legalstub$floats (; 5 ;) (param $0 f64) (result f64) + (f64.promote/f32 + (call $floats + (f32.demote/f64 + (get_local $0) + ) + ) + ) + ) + (func $legalstub$neg (; 6 ;) (param $0 i32) (param $1 i32) (result f64) + (f64.promote/f32 + (call $neg + (get_local $0) + (get_local $1) + ) + ) + ) + (func $legalstub$bitcasts (; 7 ;) (param $0 i32) (param $1 f64) + (call $bitcasts + (get_local $0) + (f32.demote/f64 + (get_local $1) + ) + ) + ) +) diff --git a/src/binaryen/test/min.fromasm.imprecise b/src/binaryen/test/min.fromasm.imprecise new file mode 100644 index 0000000000..37a1416ff7 --- /dev/null +++ b/src/binaryen/test/min.fromasm.imprecise @@ -0,0 +1,67 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $M (mut i32) (i32.const 0)) + (export "floats" (func $legalstub$floats)) + (export "getTempRet0" (func $ub)) + (export "neg" (func $legalstub$neg)) + (export "bitcasts" (func $legalstub$bitcasts)) + (export "ctzzzz" (func $ctzzzz)) + (func $floats (; 0 ;) (param $0 f32) (result f32) + (local $1 f32) + (f32.add + (get_local $1) + (get_local $0) + ) + ) + (func $neg (; 1 ;) (param $0 i32) (param $1 i32) (result f32) + (i32.store + (get_local $0) + (get_local $1) + ) + (f32.neg + (f32.load + (get_local $0) + ) + ) + ) + (func $bitcasts (; 2 ;) (param $0 i32) (param $1 f32) + (nop) + ) + (func $ctzzzz (; 3 ;) (result i32) + (i32.const 2) + ) + (func $ub (; 4 ;) (result i32) + (drop + (call $ub) + ) + (get_global $M) + ) + (func $legalstub$floats (; 5 ;) (param $0 f64) (result f64) + (f64.promote/f32 + (call $floats + (f32.demote/f64 + (get_local $0) + ) + ) + ) + ) + (func $legalstub$neg (; 6 ;) (param $0 i32) (param $1 i32) (result f64) + (f64.promote/f32 + (call $neg + (get_local $0) + (get_local $1) + ) + ) + ) + (func $legalstub$bitcasts (; 7 ;) (param $0 i32) (param $1 f64) + (call $bitcasts + (get_local $0) + (f32.demote/f64 + (get_local $1) + ) + ) + ) +) diff --git a/src/binaryen/test/min.fromasm.imprecise.no-opts b/src/binaryen/test/min.fromasm.imprecise.no-opts new file mode 100644 index 0000000000..02579216d4 --- /dev/null +++ b/src/binaryen/test/min.fromasm.imprecise.no-opts @@ -0,0 +1,101 @@ +(module + (import "env" "tempDoublePtr" (global $tDP$asm2wasm$import i32)) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $tDP (mut i32) (get_global $tDP$asm2wasm$import)) + (global $M (mut i32) (i32.const 0)) + (export "floats" (func $legalstub$floats)) + (export "getTempRet0" (func $ub)) + (export "neg" (func $legalstub$neg)) + (export "bitcasts" (func $legalstub$bitcasts)) + (export "ctzzzz" (func $ctzzzz)) + (func $floats (; 0 ;) (param $f f32) (result f32) + (local $t f32) + (return + (f32.add + (get_local $t) + (get_local $f) + ) + ) + ) + (func $neg (; 1 ;) (param $k i32) (param $p i32) (result f32) + (local $n f32) + (set_local $n + (f32.neg + (block (result f32) + (i32.store + (get_local $k) + (get_local $p) + ) + (f32.load + (get_local $k) + ) + ) + ) + ) + (return + (get_local $n) + ) + ) + (func $bitcasts (; 2 ;) (param $i i32) (param $f f32) + (drop + (f32.reinterpret/i32 + (get_local $i) + ) + ) + (drop + (f64.promote/f32 + (f32.reinterpret/i32 + (get_local $i) + ) + ) + ) + (drop + (i32.reinterpret/f32 + (get_local $f) + ) + ) + ) + (func $ctzzzz (; 3 ;) (result i32) + (return + (i32.ctz + (i32.const 4660) + ) + ) + ) + (func $ub (; 4 ;) (result i32) + (drop + (call $ub) + ) + (return + (get_global $M) + ) + ) + (func $legalstub$floats (; 5 ;) (param $0 f64) (result f64) + (f64.promote/f32 + (call $floats + (f32.demote/f64 + (get_local $0) + ) + ) + ) + ) + (func $legalstub$neg (; 6 ;) (param $0 i32) (param $1 i32) (result f64) + (f64.promote/f32 + (call $neg + (get_local $0) + (get_local $1) + ) + ) + ) + (func $legalstub$bitcasts (; 7 ;) (param $0 i32) (param $1 f64) + (call $bitcasts + (get_local $0) + (f32.demote/f64 + (get_local $1) + ) + ) + ) +) diff --git a/src/binaryen/test/min.fromasm.no-opts b/src/binaryen/test/min.fromasm.no-opts new file mode 100644 index 0000000000..02579216d4 --- /dev/null +++ b/src/binaryen/test/min.fromasm.no-opts @@ -0,0 +1,101 @@ +(module + (import "env" "tempDoublePtr" (global $tDP$asm2wasm$import i32)) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $tDP (mut i32) (get_global $tDP$asm2wasm$import)) + (global $M (mut i32) (i32.const 0)) + (export "floats" (func $legalstub$floats)) + (export "getTempRet0" (func $ub)) + (export "neg" (func $legalstub$neg)) + (export "bitcasts" (func $legalstub$bitcasts)) + (export "ctzzzz" (func $ctzzzz)) + (func $floats (; 0 ;) (param $f f32) (result f32) + (local $t f32) + (return + (f32.add + (get_local $t) + (get_local $f) + ) + ) + ) + (func $neg (; 1 ;) (param $k i32) (param $p i32) (result f32) + (local $n f32) + (set_local $n + (f32.neg + (block (result f32) + (i32.store + (get_local $k) + (get_local $p) + ) + (f32.load + (get_local $k) + ) + ) + ) + ) + (return + (get_local $n) + ) + ) + (func $bitcasts (; 2 ;) (param $i i32) (param $f f32) + (drop + (f32.reinterpret/i32 + (get_local $i) + ) + ) + (drop + (f64.promote/f32 + (f32.reinterpret/i32 + (get_local $i) + ) + ) + ) + (drop + (i32.reinterpret/f32 + (get_local $f) + ) + ) + ) + (func $ctzzzz (; 3 ;) (result i32) + (return + (i32.ctz + (i32.const 4660) + ) + ) + ) + (func $ub (; 4 ;) (result i32) + (drop + (call $ub) + ) + (return + (get_global $M) + ) + ) + (func $legalstub$floats (; 5 ;) (param $0 f64) (result f64) + (f64.promote/f32 + (call $floats + (f32.demote/f64 + (get_local $0) + ) + ) + ) + ) + (func $legalstub$neg (; 6 ;) (param $0 i32) (param $1 i32) (result f64) + (f64.promote/f32 + (call $neg + (get_local $0) + (get_local $1) + ) + ) + ) + (func $legalstub$bitcasts (; 7 ;) (param $0 i32) (param $1 f64) + (call $bitcasts + (get_local $0) + (f32.demote/f64 + (get_local $1) + ) + ) + ) +) diff --git a/src/binaryen/test/min.wast b/src/binaryen/test/min.wast new file mode 100644 index 0000000000..8ef35a49d0 --- /dev/null +++ b/src/binaryen/test/min.wast @@ -0,0 +1,57 @@ +(module + (type $0 (func (param f32) (result f32))) + (type $1 (func (param i32 i32) (result f32))) + (type $2 (func (param i32) (result i32))) + (type $3 (func (param i32 i32 i32) (result i32))) + (memory $0 256 256) + (export "floats" (func $floats)) + (func $floats (type $0) (param $f f32) (result f32) + (local $t f32) + (f32.add + (get_local $t) + (get_local $f) + ) + ) + (func $neg (type $1) (param $k i32) (param $p i32) (result f32) + (local $n f32) + (tee_local $n + (f32.neg + (block $block0 (result f32) + (i32.store + (get_local $k) + (get_local $p) + ) + (f32.load + (get_local $k) + ) + ) + ) + ) + ) + (func $littleswitch (type $2) (param $x i32) (result i32) + (block $topmost (result i32) + (block $switch-case$2 + (block $switch-case$1 + (br_table $switch-case$1 $switch-case$2 $switch-case$1 + (i32.sub + (get_local $x) + (i32.const 1) + ) + ) + ) + (br $topmost + (i32.const 1) + ) + ) + (br $topmost + (i32.const 2) + ) + (i32.const 0) + ) + ) + (func $f1 (type $3) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (block $topmost (result i32) + (get_local $i3) + ) + ) +) diff --git a/src/binaryen/test/min.wast.from-wast b/src/binaryen/test/min.wast.from-wast new file mode 100644 index 0000000000..c58551fe37 --- /dev/null +++ b/src/binaryen/test/min.wast.from-wast @@ -0,0 +1,57 @@ +(module + (type $0 (func (param f32) (result f32))) + (type $1 (func (param i32 i32) (result f32))) + (type $2 (func (param i32) (result i32))) + (type $3 (func (param i32 i32 i32) (result i32))) + (memory $0 256 256) + (export "floats" (func $floats)) + (func $floats (; 0 ;) (type $0) (param $f f32) (result f32) + (local $t f32) + (f32.add + (get_local $t) + (get_local $f) + ) + ) + (func $neg (; 1 ;) (type $1) (param $k i32) (param $p i32) (result f32) + (local $n f32) + (tee_local $n + (f32.neg + (block $block0 (result f32) + (i32.store + (get_local $k) + (get_local $p) + ) + (f32.load + (get_local $k) + ) + ) + ) + ) + ) + (func $littleswitch (; 2 ;) (type $2) (param $x i32) (result i32) + (block $topmost (result i32) + (block $switch-case$2 + (block $switch-case$1 + (br_table $switch-case$1 $switch-case$2 $switch-case$1 + (i32.sub + (get_local $x) + (i32.const 1) + ) + ) + ) + (br $topmost + (i32.const 1) + ) + ) + (br $topmost + (i32.const 2) + ) + (i32.const 0) + ) + ) + (func $f1 (; 3 ;) (type $3) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (block $topmost (result i32) + (get_local $i3) + ) + ) +) diff --git a/src/binaryen/test/min.wast.fromBinary b/src/binaryen/test/min.wast.fromBinary new file mode 100644 index 0000000000..272f10f7fb --- /dev/null +++ b/src/binaryen/test/min.wast.fromBinary @@ -0,0 +1,55 @@ +(module + (type $0 (func (param f32) (result f32))) + (type $1 (func (param i32 i32) (result f32))) + (type $2 (func (param i32) (result i32))) + (type $3 (func (param i32 i32 i32) (result i32))) + (memory $0 256 256) + (export "floats" (func $floats)) + (func $floats (; 0 ;) (type $0) (param $var$0 f32) (result f32) + (local $var$1 f32) + (f32.add + (get_local $var$1) + (get_local $var$0) + ) + ) + (func $neg (; 1 ;) (type $1) (param $var$0 i32) (param $var$1 i32) (result f32) + (local $var$2 f32) + (tee_local $var$2 + (f32.neg + (block $label$1 (result f32) + (i32.store + (get_local $var$0) + (get_local $var$1) + ) + (f32.load + (get_local $var$0) + ) + ) + ) + ) + ) + (func $littleswitch (; 2 ;) (type $2) (param $var$0 i32) (result i32) + (block $label$1 (result i32) + (block $label$2 + (block $label$3 + (br_table $label$3 $label$2 $label$3 + (i32.sub + (get_local $var$0) + (i32.const 1) + ) + ) + ) + (br $label$1 + (i32.const 1) + ) + ) + (br $label$1 + (i32.const 2) + ) + ) + ) + (func $f1 (; 3 ;) (type $3) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (get_local $var$2) + ) +) + diff --git a/src/binaryen/test/min.wast.fromBinary.noDebugInfo b/src/binaryen/test/min.wast.fromBinary.noDebugInfo new file mode 100644 index 0000000000..c76976a51e --- /dev/null +++ b/src/binaryen/test/min.wast.fromBinary.noDebugInfo @@ -0,0 +1,55 @@ +(module + (type $0 (func (param f32) (result f32))) + (type $1 (func (param i32 i32) (result f32))) + (type $2 (func (param i32) (result i32))) + (type $3 (func (param i32 i32 i32) (result i32))) + (memory $0 256 256) + (export "floats" (func $0)) + (func $0 (; 0 ;) (type $0) (param $var$0 f32) (result f32) + (local $var$1 f32) + (f32.add + (get_local $var$1) + (get_local $var$0) + ) + ) + (func $1 (; 1 ;) (type $1) (param $var$0 i32) (param $var$1 i32) (result f32) + (local $var$2 f32) + (tee_local $var$2 + (f32.neg + (block $label$1 (result f32) + (i32.store + (get_local $var$0) + (get_local $var$1) + ) + (f32.load + (get_local $var$0) + ) + ) + ) + ) + ) + (func $2 (; 2 ;) (type $2) (param $var$0 i32) (result i32) + (block $label$1 (result i32) + (block $label$2 + (block $label$3 + (br_table $label$3 $label$2 $label$3 + (i32.sub + (get_local $var$0) + (i32.const 1) + ) + ) + ) + (br $label$1 + (i32.const 1) + ) + ) + (br $label$1 + (i32.const 2) + ) + ) + ) + (func $3 (; 3 ;) (type $3) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) + (get_local $var$2) + ) +) + diff --git a/src/binaryen/test/noffi_f32.asm.js b/src/binaryen/test/noffi_f32.asm.js new file mode 100644 index 0000000000..cc7a47972c --- /dev/null +++ b/src/binaryen/test/noffi_f32.asm.js @@ -0,0 +1,21 @@ +function(global, env, buffer) { + "use asm"; + var Math_fround=global.Math.fround; + var importf=env._importf; + + function exportf(a){ + a=Math_fround(a); + return Math_fround(a+Math_fround(1.0)) + } + function main(){ + Math_fround(importf(Math_fround(3.4000000953674316))); + return 0 + } + + return{ + main:main, + exportf:exportf} +} + +; + diff --git a/src/binaryen/test/noffi_f32.fromasm b/src/binaryen/test/noffi_f32.fromasm new file mode 100644 index 0000000000..bc91cd66b5 --- /dev/null +++ b/src/binaryen/test/noffi_f32.fromasm @@ -0,0 +1,25 @@ +(module + (type $FUNCSIG$ff (func (param f32) (result f32))) + (import "env" "_importf" (func $importf (param f32) (result f32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (data (get_global $memoryBase) "noffi_f32.asm.js") + (export "main" (func $main)) + (export "exportf" (func $exportf)) + (func $exportf (; 1 ;) (param $0 f32) (result f32) + (f32.add + (get_local $0) + (f32.const 1) + ) + ) + (func $main (; 2 ;) (result i32) + (drop + (call $importf + (f32.const 3.4000000953674316) + ) + ) + (i32.const 0) + ) +) diff --git a/src/binaryen/test/noffi_f32.fromasm.clamp b/src/binaryen/test/noffi_f32.fromasm.clamp new file mode 100644 index 0000000000..bc91cd66b5 --- /dev/null +++ b/src/binaryen/test/noffi_f32.fromasm.clamp @@ -0,0 +1,25 @@ +(module + (type $FUNCSIG$ff (func (param f32) (result f32))) + (import "env" "_importf" (func $importf (param f32) (result f32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (data (get_global $memoryBase) "noffi_f32.asm.js") + (export "main" (func $main)) + (export "exportf" (func $exportf)) + (func $exportf (; 1 ;) (param $0 f32) (result f32) + (f32.add + (get_local $0) + (f32.const 1) + ) + ) + (func $main (; 2 ;) (result i32) + (drop + (call $importf + (f32.const 3.4000000953674316) + ) + ) + (i32.const 0) + ) +) diff --git a/src/binaryen/test/noffi_f32.fromasm.clamp.no-opts b/src/binaryen/test/noffi_f32.fromasm.clamp.no-opts new file mode 100644 index 0000000000..2dce4dbaa3 --- /dev/null +++ b/src/binaryen/test/noffi_f32.fromasm.clamp.no-opts @@ -0,0 +1,28 @@ +(module + (type $FUNCSIG$ff (func (param f32) (result f32))) + (import "env" "_importf" (func $importf (param f32) (result f32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "main" (func $main)) + (export "exportf" (func $exportf)) + (func $exportf (; 1 ;) (param $a f32) (result f32) + (return + (f32.add + (get_local $a) + (f32.const 1) + ) + ) + ) + (func $main (; 2 ;) (result i32) + (drop + (call $importf + (f32.const 3.4000000953674316) + ) + ) + (return + (i32.const 0) + ) + ) +) diff --git a/src/binaryen/test/noffi_f32.fromasm.imprecise b/src/binaryen/test/noffi_f32.fromasm.imprecise new file mode 100644 index 0000000000..94c5183854 --- /dev/null +++ b/src/binaryen/test/noffi_f32.fromasm.imprecise @@ -0,0 +1,24 @@ +(module + (type $FUNCSIG$ff (func (param f32) (result f32))) + (import "env" "_importf" (func $importf (param f32) (result f32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "main" (func $main)) + (export "exportf" (func $exportf)) + (func $exportf (; 1 ;) (param $0 f32) (result f32) + (f32.add + (get_local $0) + (f32.const 1) + ) + ) + (func $main (; 2 ;) (result i32) + (drop + (call $importf + (f32.const 3.4000000953674316) + ) + ) + (i32.const 0) + ) +) diff --git a/src/binaryen/test/noffi_f32.fromasm.imprecise.no-opts b/src/binaryen/test/noffi_f32.fromasm.imprecise.no-opts new file mode 100644 index 0000000000..2dce4dbaa3 --- /dev/null +++ b/src/binaryen/test/noffi_f32.fromasm.imprecise.no-opts @@ -0,0 +1,28 @@ +(module + (type $FUNCSIG$ff (func (param f32) (result f32))) + (import "env" "_importf" (func $importf (param f32) (result f32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "main" (func $main)) + (export "exportf" (func $exportf)) + (func $exportf (; 1 ;) (param $a f32) (result f32) + (return + (f32.add + (get_local $a) + (f32.const 1) + ) + ) + ) + (func $main (; 2 ;) (result i32) + (drop + (call $importf + (f32.const 3.4000000953674316) + ) + ) + (return + (i32.const 0) + ) + ) +) diff --git a/src/binaryen/test/noffi_f32.fromasm.no-opts b/src/binaryen/test/noffi_f32.fromasm.no-opts new file mode 100644 index 0000000000..2dce4dbaa3 --- /dev/null +++ b/src/binaryen/test/noffi_f32.fromasm.no-opts @@ -0,0 +1,28 @@ +(module + (type $FUNCSIG$ff (func (param f32) (result f32))) + (import "env" "_importf" (func $importf (param f32) (result f32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "main" (func $main)) + (export "exportf" (func $exportf)) + (func $exportf (; 1 ;) (param $a f32) (result f32) + (return + (f32.add + (get_local $a) + (f32.const 1) + ) + ) + ) + (func $main (; 2 ;) (result i32) + (drop + (call $importf + (f32.const 3.4000000953674316) + ) + ) + (return + (i32.const 0) + ) + ) +) diff --git a/src/binaryen/test/noffi_i64.asm.js b/src/binaryen/test/noffi_i64.asm.js new file mode 100644 index 0000000000..304d70fc0b --- /dev/null +++ b/src/binaryen/test/noffi_i64.asm.js @@ -0,0 +1,21 @@ +function(global, env, buffer) { + "use asm"; + var importll=env._importll; + + function add(a,b) { + a = i64(a); + b = i64(b); + var c = i64(); + c = i64_add(b,a); + return (i64(c)); + } + function main() { + (i64(importll(i64_const(2,0)))); + return 0; + } + + return { + _add: add, + _main: main }; +} +; diff --git a/src/binaryen/test/noffi_i64.fromasm b/src/binaryen/test/noffi_i64.fromasm new file mode 100644 index 0000000000..fd179943c8 --- /dev/null +++ b/src/binaryen/test/noffi_i64.fromasm @@ -0,0 +1,25 @@ +(module + (type $FUNCSIG$jj (func (param i64) (result i64))) + (import "env" "_importll" (func $importll (param i64) (result i64))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (data (get_global $memoryBase) "noffi_i64.asm.js") + (export "_add" (func $add)) + (export "_main" (func $main)) + (func $add (; 1 ;) (param $0 i64) (param $1 i64) (result i64) + (i64.add + (get_local $1) + (get_local $0) + ) + ) + (func $main (; 2 ;) (result i32) + (drop + (call $importll + (i64.const 2) + ) + ) + (i32.const 0) + ) +) diff --git a/src/binaryen/test/noffi_i64.fromasm.clamp b/src/binaryen/test/noffi_i64.fromasm.clamp new file mode 100644 index 0000000000..fd179943c8 --- /dev/null +++ b/src/binaryen/test/noffi_i64.fromasm.clamp @@ -0,0 +1,25 @@ +(module + (type $FUNCSIG$jj (func (param i64) (result i64))) + (import "env" "_importll" (func $importll (param i64) (result i64))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (data (get_global $memoryBase) "noffi_i64.asm.js") + (export "_add" (func $add)) + (export "_main" (func $main)) + (func $add (; 1 ;) (param $0 i64) (param $1 i64) (result i64) + (i64.add + (get_local $1) + (get_local $0) + ) + ) + (func $main (; 2 ;) (result i32) + (drop + (call $importll + (i64.const 2) + ) + ) + (i32.const 0) + ) +) diff --git a/src/binaryen/test/noffi_i64.fromasm.clamp.no-opts b/src/binaryen/test/noffi_i64.fromasm.clamp.no-opts new file mode 100644 index 0000000000..20eb477d2e --- /dev/null +++ b/src/binaryen/test/noffi_i64.fromasm.clamp.no-opts @@ -0,0 +1,32 @@ +(module + (type $FUNCSIG$jj (func (param i64) (result i64))) + (import "env" "_importll" (func $importll (param i64) (result i64))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "_add" (func $add)) + (export "_main" (func $main)) + (func $add (; 1 ;) (param $a i64) (param $b i64) (result i64) + (local $c i64) + (set_local $c + (i64.add + (get_local $b) + (get_local $a) + ) + ) + (return + (get_local $c) + ) + ) + (func $main (; 2 ;) (result i32) + (drop + (call $importll + (i64.const 2) + ) + ) + (return + (i32.const 0) + ) + ) +) diff --git a/src/binaryen/test/noffi_i64.fromasm.imprecise b/src/binaryen/test/noffi_i64.fromasm.imprecise new file mode 100644 index 0000000000..014bcaec0b --- /dev/null +++ b/src/binaryen/test/noffi_i64.fromasm.imprecise @@ -0,0 +1,24 @@ +(module + (type $FUNCSIG$jj (func (param i64) (result i64))) + (import "env" "_importll" (func $importll (param i64) (result i64))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "_add" (func $add)) + (export "_main" (func $main)) + (func $add (; 1 ;) (param $0 i64) (param $1 i64) (result i64) + (i64.add + (get_local $1) + (get_local $0) + ) + ) + (func $main (; 2 ;) (result i32) + (drop + (call $importll + (i64.const 2) + ) + ) + (i32.const 0) + ) +) diff --git a/src/binaryen/test/noffi_i64.fromasm.imprecise.no-opts b/src/binaryen/test/noffi_i64.fromasm.imprecise.no-opts new file mode 100644 index 0000000000..20eb477d2e --- /dev/null +++ b/src/binaryen/test/noffi_i64.fromasm.imprecise.no-opts @@ -0,0 +1,32 @@ +(module + (type $FUNCSIG$jj (func (param i64) (result i64))) + (import "env" "_importll" (func $importll (param i64) (result i64))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "_add" (func $add)) + (export "_main" (func $main)) + (func $add (; 1 ;) (param $a i64) (param $b i64) (result i64) + (local $c i64) + (set_local $c + (i64.add + (get_local $b) + (get_local $a) + ) + ) + (return + (get_local $c) + ) + ) + (func $main (; 2 ;) (result i32) + (drop + (call $importll + (i64.const 2) + ) + ) + (return + (i32.const 0) + ) + ) +) diff --git a/src/binaryen/test/noffi_i64.fromasm.no-opts b/src/binaryen/test/noffi_i64.fromasm.no-opts new file mode 100644 index 0000000000..20eb477d2e --- /dev/null +++ b/src/binaryen/test/noffi_i64.fromasm.no-opts @@ -0,0 +1,32 @@ +(module + (type $FUNCSIG$jj (func (param i64) (result i64))) + (import "env" "_importll" (func $importll (param i64) (result i64))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "_add" (func $add)) + (export "_main" (func $main)) + (func $add (; 1 ;) (param $a i64) (param $b i64) (result i64) + (local $c i64) + (set_local $c + (i64.add + (get_local $b) + (get_local $a) + ) + ) + (return + (get_local $c) + ) + ) + (func $main (; 2 ;) (result i32) + (drop + (call $importll + (i64.const 2) + ) + ) + (return + (i32.const 0) + ) + ) +) diff --git a/src/binaryen/test/passes/O.bin.txt b/src/binaryen/test/passes/O.bin.txt new file mode 100644 index 0000000000..1b74f5db44 --- /dev/null +++ b/src/binaryen/test/passes/O.bin.txt @@ -0,0 +1,110 @@ +(module + (type $0 (func (param i64) (result i64))) + (memory $0 0) + (export "fac-rec" (func $0)) + (export "fac-rec-named" (func $1)) + (export "fac-iter" (func $2)) + (export "fac-iter-named" (func $3)) + (export "fac-opt" (func $4)) + (func $0 (; 0 ;) (type $0) (param $0 i64) (result i64) + (if (result i64) + (i64.eq + (get_local $0) + (i64.const 0) + ) + (i64.const 1) + (i64.mul + (get_local $0) + (call $0 + (i64.sub + (get_local $0) + (i64.const 1) + ) + ) + ) + ) + ) + (func $1 (; 1 ;) (type $0) (param $0 i64) (result i64) + (if (result i64) + (i64.eq + (get_local $0) + (i64.const 0) + ) + (i64.const 1) + (i64.mul + (get_local $0) + (call $1 + (i64.sub + (get_local $0) + (i64.const 1) + ) + ) + ) + ) + ) + (func $2 (; 2 ;) (type $0) (param $0 i64) (result i64) + (unreachable) + ) + (func $3 (; 3 ;) (type $0) (param $0 i64) (result i64) + (local $1 i64) + (set_local $1 + (i64.const 1) + ) + (loop $label$3 + (if + (i64.ne + (get_local $0) + (i64.const 0) + ) + (block + (set_local $1 + (i64.mul + (get_local $0) + (get_local $1) + ) + ) + (set_local $0 + (i64.sub + (get_local $0) + (i64.const 1) + ) + ) + (br $label$3) + ) + ) + ) + (get_local $1) + ) + (func $4 (; 4 ;) (type $0) (param $0 i64) (result i64) + (local $1 i64) + (set_local $1 + (i64.const 1) + ) + (if + (i64.ge_s + (get_local $0) + (i64.const 2) + ) + (loop $label$3 + (set_local $1 + (i64.mul + (get_local $1) + (get_local $0) + ) + ) + (br_if $label$3 + (i64.gt_s + (tee_local $0 + (i64.add + (get_local $0) + (i64.const -1) + ) + ) + (i64.const 1) + ) + ) + ) + ) + (get_local $1) + ) +) diff --git a/src/binaryen/test/passes/O.txt b/src/binaryen/test/passes/O.txt new file mode 100644 index 0000000000..7a4f760849 --- /dev/null +++ b/src/binaryen/test/passes/O.txt @@ -0,0 +1,24 @@ +(module + (type $0 (func (result i32))) + (type $1 (func (param i64))) + (memory $0 0) + (export "ret" (func $ret)) + (export "waka" (func $if-0-unreachable-to-none)) + (func $ret (; 0 ;) (type $0) (result i32) + (block $out (result i32) + (drop + (call $ret) + ) + (if + (call $ret) + (return + (i32.const 1) + ) + ) + (i32.const 999) + ) + ) + (func $if-0-unreachable-to-none (; 1 ;) (type $1) (param $0 i64) + (unreachable) + ) +) diff --git a/src/binaryen/test/passes/O.wasm b/src/binaryen/test/passes/O.wasm new file mode 100644 index 0000000000000000000000000000000000000000..6dfd301de49b8ecc78332b931ab1cfa9aa128ea2 GIT binary patch literal 330 zcmah@%Wc9y6r6d+BI4N*CA=+w9xQhdA?~q^kvJG4hhtcr3oWFK9H=0Lq?hcj%q>wa zPxEFpA2hE$0q{DGBlt{DpCz0J7MOoUKA-QJb~SV@P)=xdX!>poKE!{2>ITT;9Zp)7 zT*sFaW{dCl81oUsV5spl^EGpenCB(D>R%dzc1z>Li#IsdbRtz&8DmaGgsCRpNg#N3 r)B*}M`NvmCZv5T%nfe&|LKme9D`j0GRvNqur@p+oG=5V;)u{Rd%~U`0 literal 0 HcmV?d00001 diff --git a/src/binaryen/test/passes/O.wast b/src/binaryen/test/passes/O.wast new file mode 100644 index 0000000000..e425413762 --- /dev/null +++ b/src/binaryen/test/passes/O.wast @@ -0,0 +1,28 @@ +(module + (func $ret (export "ret") (result i32) + (block $out (result i32) + (drop (call $ret)) + (if (call $ret) + (return + (return + (i32.const 1) + ) + ) + ) + (drop (br_if $out (i32.const 999) (i32.const 1))) + (unreachable) + ) + ) + (func $if-0-unreachable-to-none (export "waka") (param $var$0 i64) + (local $var$1 i64) + (local $var$2 i64) + (block $label$1 + (if + (i32.const 0) + (br $label$1) + (unreachable) + ) + ) + ) +) + diff --git a/src/binaryen/test/passes/O3_inlining.txt b/src/binaryen/test/passes/O3_inlining.txt new file mode 100644 index 0000000000..7931decf59 --- /dev/null +++ b/src/binaryen/test/passes/O3_inlining.txt @@ -0,0 +1,29 @@ +(module + (type $0 (func)) + (type $1 (func (param i32))) + (type $2 (func (param f32 i32 i32) (result i32))) + (global $global$1 (mut i32) (i32.const 100)) + (memory $0 1 1) + (export "func_217" (func $1)) + (func $1 (; 0 ;) (type $1) (param $0 i32) + (if + (get_global $global$1) + (unreachable) + ) + (set_global $global$1 + (i32.const 0) + ) + (if + (i32.eqz + (if (result i32) + (i32.load16_u + (i32.const 3) + ) + (i32.const 1) + (i32.const 0) + ) + ) + (unreachable) + ) + ) +) diff --git a/src/binaryen/test/passes/O3_inlining.wast b/src/binaryen/test/passes/O3_inlining.wast new file mode 100644 index 0000000000..4396044e8f --- /dev/null +++ b/src/binaryen/test/passes/O3_inlining.wast @@ -0,0 +1,44 @@ +(module + (global $global$0 (mut f64) (f64.const -32768)) + (global $global$1 (mut i32) (i32.const 100)) + (memory $0 1 1) + (export "func_217" (func $1)) + (func $0 + (if + (get_global $global$1) + (unreachable) + ) + (set_global $global$1 + (i32.const 0) + ) + (block $label$2 + (set_global $global$0 + (block $label$3 (result f64) + (br_if $label$2 + (if (result i32) + (i32.load16_u offset=3 + (i32.const 0) + ) + (i32.const 1) + (i32.const 0) + ) + ) + (unreachable) + ) + ) + ) + ) + (func $1 (param $var$0 i32) + (drop + (call $2 + (f32.const 1) + (i32.const 1) + (i32.const 0) + ) + ) + ) + (func $2 (param $var$0 f32) (param $var$1 i32) (param $var$2 i32) (result i32) + (call $0) + (i32.const 0) + ) +) diff --git a/src/binaryen/test/passes/Oz.txt b/src/binaryen/test/passes/Oz.txt new file mode 100644 index 0000000000..4ba8d8088b --- /dev/null +++ b/src/binaryen/test/passes/Oz.txt @@ -0,0 +1,53 @@ +(module + (type $0 (func (param i32 i32) (result i32))) + (type $1 (func (param i32 i32 i32 i32) (result i32))) + (memory $0 100 100) + (export "localcse" (func $basics)) + (export "localcse-2" (func $8)) + (func $basics (; 0 ;) (type $0) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (i32.add + (tee_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (get_local $2) + ) + ) + (func $8 (; 1 ;) (type $1) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (i32.store + (tee_local $2 + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + ) + (i32.and + (i32.load + (get_local $2) + ) + (i32.xor + (i32.const 74) + (i32.const -1) + ) + ) + ) + (i32.store + (tee_local $1 + (get_local $4) + ) + (i32.or + (i32.load + (get_local $1) + ) + (i32.const 8) + ) + ) + (i32.const 0) + ) +) diff --git a/src/binaryen/test/passes/Oz.wast b/src/binaryen/test/passes/Oz.wast new file mode 100644 index 0000000000..5ba6a7ea5e --- /dev/null +++ b/src/binaryen/test/passes/Oz.wast @@ -0,0 +1,59 @@ +(module + (memory 100 100) + (func $basics (export "localcse") (param $x i32) ($param $y i32) (result i32) ;; -O3 does localcse + (local $x2 i32) + (local $y2 i32) + (set_local $x2 + (i32.add (get_local $x) (get_local $y)) + ) + (set_local $y2 + (i32.add (get_local $x) (get_local $y)) + ) + (i32.add (get_local $x2) (get_local $y2)) + ) + (func $8 (export "localcse-2") (param $var$0 i32) + (param $var$1 i32) + (param $var$2 i32) + (param $var$3 i32) + (result i32) + (block $label$0 (result i32) + (i32.store + (tee_local $var$2 + (i32.add + (get_local $var$1) + (i32.const 4) + ) + ) + (i32.and + (i32.load + (get_local $var$2) + ) + (i32.xor + (tee_local $var$2 + (i32.const 74) + ) + (i32.const -1) + ) + ) + ) + (i32.store + (tee_local $var$1 + (i32.add + (get_local $var$1) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $var$1) + ) + (i32.and + (get_local $var$2) + (i32.const 8) + ) + ) + ) + (i32.const 0) + ) + ) +) diff --git a/src/binaryen/test/passes/coalesce-locals-learning.txt b/src/binaryen/test/passes/coalesce-locals-learning.txt new file mode 100644 index 0000000000..ecf2f4cd7a --- /dev/null +++ b/src/binaryen/test/passes/coalesce-locals-learning.txt @@ -0,0 +1,868 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $2 (func)) + (type $3 (func (param i32 f32))) + (type $4 (func (param i32))) + (import "env" "_emscripten_autodebug_i32" (func $_emscripten_autodebug_i32 (param i32 i32) (result i32))) + (memory $0 10) + (func $nothing-to-do (; 1 ;) (type $2) + (local $0 i32) + (nop) + ) + (func $merge (; 2 ;) (type $2) + (local $0 i32) + (nop) + ) + (func $leave-type (; 3 ;) (type $2) + (local $0 i32) + (local $1 f32) + (nop) + ) + (func $leave-interfere (; 4 ;) (type $2) + (local $0 i32) + (local $1 i32) + (set_local $0 + (i32.const 0) + ) + (set_local $1 + (i32.const 0) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (func $almost-interfere (; 5 ;) (type $2) + (local $0 i32) + (set_local $0 + (i32.const 0) + ) + (drop + (get_local $0) + ) + (set_local $0 + (i32.const 0) + ) + (drop + (get_local $0) + ) + ) + (func $redundant-copy (; 6 ;) (type $2) + (local $0 i32) + (set_local $0 + (i32.const 0) + ) + (nop) + (drop + (get_local $0) + ) + ) + (func $ineffective-store (; 7 ;) (type $2) + (local $0 i32) + (drop + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (drop + (get_local $0) + ) + ) + (func $block (; 8 ;) (type $2) + (local $0 i32) + (block $block0 + (set_local $0 + (i32.const 0) + ) + ) + (drop + (get_local $0) + ) + ) + (func $see-both-sides (; 9 ;) (type $2) + (local $0 i32) + (local $1 i32) + (set_local $0 + (i32.const 0) + ) + (block $block0 + (set_local $1 + (i32.const 0) + ) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (func $see-br-and-ignore-dead (; 10 ;) (type $2) + (local $0 i32) + (set_local $0 + (i32.const 0) + ) + (block $block + (br $block) + (drop + (i32.const 0) + ) + (drop + (i32.const 0) + ) + (drop + (i32.const -1) + ) + ) + (drop + (get_local $0) + ) + ) + (func $see-block-body (; 11 ;) (type $2) + (local $0 i32) + (local $1 i32) + (set_local $0 + (i32.const 0) + ) + (block $block + (set_local $1 + (i32.const 0) + ) + (drop + (get_local $1) + ) + (br $block) + ) + (drop + (get_local $0) + ) + ) + (func $zero-init (; 12 ;) (type $2) + (local $0 i32) + (local $1 i32) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (func $multi (; 13 ;) (type $2) + (local $0 i32) + (local $1 i32) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (func $if-else (; 14 ;) (type $2) + (local $0 i32) + (local $1 i32) + (if + (i32.const 0) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + ) + (func $if-else-parallel (; 15 ;) (type $2) + (local $0 i32) + (if + (i32.const 0) + (block $block1 + (set_local $0 + (i32.const 0) + ) + (drop + (get_local $0) + ) + ) + (block $block3 + (set_local $0 + (i32.const 1) + ) + (drop + (get_local $0) + ) + ) + ) + ) + (func $if-else-after (; 16 ;) (type $2) + (local $0 i32) + (local $1 i32) + (if + (i32.const 0) + (set_local $0 + (i32.const 0) + ) + (set_local $1 + (i32.const 1) + ) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (func $if-else-through (; 17 ;) (type $2) + (local $0 i32) + (local $1 i32) + (set_local $0 + (i32.const 0) + ) + (set_local $1 + (i32.const 1) + ) + (if + (i32.const 0) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (func $if-through (; 18 ;) (type $2) + (local $0 i32) + (local $1 i32) + (set_local $0 + (i32.const 0) + ) + (set_local $1 + (i32.const 1) + ) + (if + (i32.const 0) + (drop + (i32.const 1) + ) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (func $if-through2 (; 19 ;) (type $2) + (local $0 i32) + (local $1 i32) + (set_local $0 + (i32.const 0) + ) + (if + (i32.const 0) + (set_local $1 + (i32.const 1) + ) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (func $if-through3 (; 20 ;) (type $2) + (local $0 i32) + (local $1 i32) + (set_local $0 + (i32.const 0) + ) + (if + (i32.const 0) + (block $block1 + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + ) + ) + (func $if2 (; 21 ;) (type $2) + (local $0 i32) + (local $1 i32) + (if + (tee_local $0 + (i32.const 0) + ) + (block $block1 + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + ) + ) + (func $if3 (; 22 ;) (type $2) + (local $0 i32) + (local $1 i32) + (if + (i32.const 0) + (block $block1 + (set_local $0 + (i32.const 0) + ) + (drop + (get_local $0) + ) + ) + ) + (drop + (get_local $1) + ) + ) + (func $if4 (; 23 ;) (type $2) + (local $0 i32) + (if + (i32.const 0) + (block $block1 + (set_local $0 + (i32.const 0) + ) + (drop + (get_local $0) + ) + (set_local $0 + (i32.const 1) + ) + ) + ) + (drop + (get_local $0) + ) + ) + (func $if5 (; 24 ;) (type $2) + (local $0 i32) + (local $1 i32) + (if + (i32.const 0) + (block $block1 + (drop + (get_local $0) + ) + (set_local $1 + (i32.const 1) + ) + ) + ) + (drop + (get_local $1) + ) + ) + (func $loop (; 25 ;) (type $2) + (local $0 i32) + (local $1 i32) + (block $out + (loop $in + (drop + (get_local $0) + ) + (set_local $0 + (i32.const 0) + ) + (drop + (get_local $1) + ) + (br $in) + ) + ) + ) + (func $interfere-in-dead (; 26 ;) (type $2) + (local $0 i32) + (block $block + (br $block) + (drop + (i32.const 0) + ) + (drop + (i32.const 0) + ) + ) + ) + (func $interfere-in-dead2 (; 27 ;) (type $2) + (local $0 i32) + (block $block + (unreachable) + (drop + (i32.const 0) + ) + (drop + (i32.const 0) + ) + ) + ) + (func $interfere-in-dead3 (; 28 ;) (type $2) + (local $0 i32) + (block $block + (return) + (drop + (i32.const 0) + ) + (drop + (i32.const 0) + ) + ) + ) + (func $params (; 29 ;) (type $3) (param $0 i32) (param $1 f32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (drop + (get_local $2) + ) + (drop + (get_local $3) + ) + (drop + (get_local $4) + ) + ) + (func $interfere-in-dead4 (; 30 ;) (type $2) + (local $0 i32) + (local $1 i32) + (block $block + (br_if $block + (i32.const 0) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + ) + (func $switch (; 31 ;) (type $2) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (block $switch$def + (block $switch-case$1 + (block $switch-case$2 + (br_table $switch-case$1 $switch-case$2 $switch-case$1 $switch-case$1 $switch$def + (i32.const 100) + ) + (drop + (i32.const 0) + ) + ) + (drop + (get_local $0) + ) + ) + (drop + (get_local $1) + ) + ) + (drop + (get_local $2) + ) + ) + (func $greedy-can-be-happy (; 32 ;) (type $2) + (local $0 i32) + (local $1 i32) + (if + (i32.const 0) + (if + (i32.const 1) + (if + (i32.const 2) + (block $block3 + (set_local $0 + (i32.const 100) + ) + (set_local $1 + (i32.const 101) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (block $block5 + (set_local $0 + (i32.const 102) + ) + (set_local $1 + (i32.const 103) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + ) + (if + (i32.const 3) + (block $block8 + (set_local $0 + (i32.const 104) + ) + (set_local $1 + (i32.const 105) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (block $block10 + (set_local $0 + (i32.const 106) + ) + (set_local $1 + (i32.const 107) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + ) + ) + (if + (i32.const 4) + (block $block13 + (set_local $0 + (i32.const 108) + ) + (set_local $1 + (i32.const 109) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (block $block15 + (set_local $0 + (i32.const 110) + ) + (set_local $1 + (i32.const 111) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + ) + ) + ) + (func $greedy-can-be-sad (; 33 ;) (type $2) + (local $0 i32) + (local $1 i32) + (if + (i32.const 0) + (if + (i32.const 1) + (if + (i32.const 2) + (block $block3 + (set_local $0 + (i32.const 100) + ) + (set_local $1 + (i32.const 101) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (block $block5 + (set_local $0 + (i32.const 102) + ) + (set_local $1 + (i32.const 103) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + ) + (if + (i32.const 3) + (block $block8 + (set_local $0 + (i32.const 104) + ) + (set_local $1 + (i32.const 105) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (block $block10 + (set_local $0 + (i32.const 106) + ) + (set_local $1 + (i32.const 107) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + ) + ) + (if + (i32.const 4) + (block $block13 + (set_local $0 + (i32.const 108) + ) + (set_local $1 + (i32.const 109) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (block $block15 + (set_local $0 + (i32.const 110) + ) + (set_local $1 + (i32.const 111) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + ) + ) + ) + (func $_memcpy (; 34 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.ge_s + (get_local $2) + (i32.const 4096) + ) + (drop + (get_local $0) + ) + ) + (set_local $3 + (get_local $0) + ) + (if + (i32.eq + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.and + (get_local $1) + (i32.const 3) + ) + ) + (block $block2 + (block $while-out$0 + (loop $while-in$1 + (if + (i32.eqz + (i32.and + (get_local $0) + (i32.const 3) + ) + ) + (br $while-out$0) + ) + (block $block4 + (if + (i32.eqz + (get_local $2) + ) + (return + (get_local $3) + ) + ) + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + ) + (br $while-in$1) + ) + ) + (block $while-out$2 + (loop $while-in$3 + (if + (i32.eqz + (i32.ge_s + (get_local $2) + (i32.const 4) + ) + ) + (br $while-out$2) + ) + (block $block7 + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 4) + ) + ) + ) + (br $while-in$3) + ) + ) + ) + ) + (block $while-out$4 + (loop $while-in$5 + (if + (i32.eqz + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + ) + (br $while-out$4) + ) + (block $block9 + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + ) + (br $while-in$5) + ) + ) + (return + (get_local $3) + ) + ) + (func $this-is-effective-i-tell-you (; 35 ;) (type $4) (param $0 i32) + (if + (i32.const -1) + (block $block1 + (if + (i32.const 0) + (nop) + ) + (set_local $0 + (i32.const 1) + ) + ) + (nop) + ) + (drop + (get_local $0) + ) + ) +) diff --git a/src/binaryen/test/passes/coalesce-locals-learning.wast b/src/binaryen/test/passes/coalesce-locals-learning.wast new file mode 100644 index 0000000000..23fc9cba85 --- /dev/null +++ b/src/binaryen/test/passes/coalesce-locals-learning.wast @@ -0,0 +1,890 @@ +(module + (memory 10) + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $2 (func)) + (type $3 (func (param i32 f32))) + (type $4 (func (param i32))) + (import $_emscripten_autodebug_i32 "env" "_emscripten_autodebug_i32" (param i32 i32) (result i32)) + (func $nothing-to-do (type $2) + (local $x i32) + (nop) + ) + (func $merge (type $2) + (local $x i32) + (local $y i32) + (nop) + ) + (func $leave-type (type $2) + (local $x i32) + (local $y f32) + (nop) + ) + (func $leave-interfere (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (set_local $y + (i32.const 0) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + (func $almost-interfere (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (drop + (get_local $x) + ) + (set_local $y + (i32.const 0) + ) + (drop + (get_local $y) + ) + ) + (func $redundant-copy (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (set_local $y + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + (func $ineffective-store (type $2) + (local $x i32) + (set_local $x + (i32.const 0) + ) + (set_local $x + (i32.const 0) + ) + (drop + (get_local $x) + ) + ) + (func $block (type $2) + (local $x i32) + (block $block0 + (set_local $x + (i32.const 0) + ) + ) + (drop + (get_local $x) + ) + ) + (func $see-both-sides (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (block $block0 + (set_local $y + (i32.const 0) + ) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + (func $see-br-and-ignore-dead (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (block $block + (br $block) + (set_local $y + (i32.const 0) + ) + (drop + (get_local $y) + ) + (set_local $x + (i32.const -1) + ) + ) + (drop + (get_local $x) + ) + ) + (func $see-block-body (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (block $block + (set_local $y + (i32.const 0) + ) + (drop + (get_local $y) + ) + (br $block) + ) + (drop + (get_local $x) + ) + ) + (func $zero-init (type $2) + (local $x i32) + (local $y i32) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + (func $multi (type $2) + (local $x i32) + (local $y i32) + (local $z i32) + (drop + (get_local $y) + ) + (drop + (get_local $z) + ) + ) + (func $if-else (type $2) + (local $x i32) + (local $y i32) + (if + (i32.const 0) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + ) + (func $if-else-parallel (type $2) + (local $x i32) + (local $y i32) + (if + (i32.const 0) + (block $block1 + (set_local $x + (i32.const 0) + ) + (drop + (get_local $x) + ) + ) + (block $block3 + (set_local $y + (i32.const 1) + ) + (drop + (get_local $y) + ) + ) + ) + ) + (func $if-else-after (type $2) + (local $x i32) + (local $y i32) + (if + (i32.const 0) + (set_local $x + (i32.const 0) + ) + (set_local $y + (i32.const 1) + ) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + (func $if-else-through (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (set_local $y + (i32.const 1) + ) + (if + (i32.const 0) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + (func $if-through (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (set_local $y + (i32.const 1) + ) + (if + (i32.const 0) + (drop + (i32.const 1) + ) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + (func $if-through2 (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (if + (i32.const 0) + (set_local $y + (i32.const 1) + ) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + (func $if-through3 (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (if + (i32.const 0) + (block $block1 + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + ) + ) + (func $if2 (type $2) + (local $x i32) + (local $y i32) + (if + (tee_local $x + (i32.const 0) + ) + (block $block1 + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + ) + ) + (func $if3 (type $2) + (local $x i32) + (local $y i32) + (if + (i32.const 0) + (block $block1 + (set_local $x + (i32.const 0) + ) + (drop + (get_local $x) + ) + ) + ) + (drop + (get_local $y) + ) + ) + (func $if4 (type $2) + (local $x i32) + (local $y i32) + (if + (i32.const 0) + (block $block1 + (set_local $x + (i32.const 0) + ) + (drop + (get_local $x) + ) + (set_local $y + (i32.const 1) + ) + ) + ) + (drop + (get_local $y) + ) + ) + (func $if5 (type $2) + (local $x i32) + (local $y i32) + (if + (i32.const 0) + (block $block1 + (drop + (get_local $x) + ) + (set_local $y + (i32.const 1) + ) + ) + ) + (drop + (get_local $y) + ) + ) + (func $loop (type $2) + (local $x i32) + (local $y i32) + (block $out + (loop $in + (drop + (get_local $x) + ) + (set_local $x + (i32.const 0) + ) + (drop + (get_local $y) + ) + (br $in) + ) + ) + ) + (func $interfere-in-dead (type $2) + (local $x i32) + (local $y i32) + (block $block + (br $block) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + ) + (func $interfere-in-dead2 (type $2) + (local $x i32) + (local $y i32) + (block $block + (unreachable) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + ) + (func $interfere-in-dead3 (type $2) + (local $x i32) + (local $y i32) + (block $block + (return) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + ) + (func $params (type $3) (param $p i32) (param $q f32) + (local $x i32) + (local $y i32) + (local $z i32) + (local $w i32) + (drop + (get_local $y) + ) + (drop + (get_local $z) + ) + (drop + (get_local $w) + ) + ) + (func $interfere-in-dead4 (type $2) + (local $x i32) + (local $y i32) + (block $block + (br_if $block + (i32.const 0) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + ) + (func $switch (type $2) + (local $x i32) + (local $y i32) + (local $z i32) + (local $w i32) + (block $switch$def + (block $switch-case$1 + (block $switch-case$2 + (br_table $switch-case$1 $switch-case$2 $switch-case$1 $switch-case$1 $switch$def + (i32.const 100) + ) + (drop + (get_local $x) + ) + ) + (drop + (get_local $y) + ) + ) + (drop + (get_local $z) + ) + ) + (drop + (get_local $w) + ) + ) + (func $greedy-can-be-happy (type $2) + (local $x1 i32) + (local $x2 i32) + (local $x3 i32) + (local $y1 i32) + (local $y2 i32) + (local $y3 i32) + (if + (i32.const 0) + (if + (i32.const 1) + (if + (i32.const 2) + (block $block3 + (set_local $x1 + (i32.const 100) + ) + (set_local $y2 + (i32.const 101) + ) + (drop + (get_local $x1) + ) + (drop + (get_local $y2) + ) + ) + (block $block5 + (set_local $x1 + (i32.const 102) + ) + (set_local $y3 + (i32.const 103) + ) + (drop + (get_local $x1) + ) + (drop + (get_local $y3) + ) + ) + ) + (if + (i32.const 3) + (block $block8 + (set_local $x2 + (i32.const 104) + ) + (set_local $y1 + (i32.const 105) + ) + (drop + (get_local $x2) + ) + (drop + (get_local $y1) + ) + ) + (block $block10 + (set_local $x2 + (i32.const 106) + ) + (set_local $y3 + (i32.const 107) + ) + (drop + (get_local $x2) + ) + (drop + (get_local $y3) + ) + ) + ) + ) + (if + (i32.const 4) + (block $block13 + (set_local $x3 + (i32.const 108) + ) + (set_local $y1 + (i32.const 109) + ) + (drop + (get_local $x3) + ) + (drop + (get_local $y1) + ) + ) + (block $block15 + (set_local $x3 + (i32.const 110) + ) + (set_local $y2 + (i32.const 111) + ) + (drop + (get_local $x3) + ) + (drop + (get_local $y2) + ) + ) + ) + ) + ) + (func $greedy-can-be-sad (type $2) + (local $x1 i32) + (local $y1 i32) + (local $x2 i32) + (local $y2 i32) + (local $x3 i32) + (local $y3 i32) + (if + (i32.const 0) + (if + (i32.const 1) + (if + (i32.const 2) + (block $block3 + (set_local $x1 + (i32.const 100) + ) + (set_local $y2 + (i32.const 101) + ) + (drop + (get_local $x1) + ) + (drop + (get_local $y2) + ) + ) + (block $block5 + (set_local $x1 + (i32.const 102) + ) + (set_local $y3 + (i32.const 103) + ) + (drop + (get_local $x1) + ) + (drop + (get_local $y3) + ) + ) + ) + (if + (i32.const 3) + (block $block8 + (set_local $x2 + (i32.const 104) + ) + (set_local $y1 + (i32.const 105) + ) + (drop + (get_local $x2) + ) + (drop + (get_local $y1) + ) + ) + (block $block10 + (set_local $x2 + (i32.const 106) + ) + (set_local $y3 + (i32.const 107) + ) + (drop + (get_local $x2) + ) + (drop + (get_local $y3) + ) + ) + ) + ) + (if + (i32.const 4) + (block $block13 + (set_local $x3 + (i32.const 108) + ) + (set_local $y1 + (i32.const 109) + ) + (drop + (get_local $x3) + ) + (drop + (get_local $y1) + ) + ) + (block $block15 + (set_local $x3 + (i32.const 110) + ) + (set_local $y2 + (i32.const 111) + ) + (drop + (get_local $x3) + ) + (drop + (get_local $y2) + ) + ) + ) + ) + ) + (func $_memcpy (type $FUNCSIG$iiii) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (if + (i32.ge_s + (get_local $i3) + (i32.const 4096) + ) + (drop + (get_local $i1) + ) + ) + (set_local $i4 + (get_local $i1) + ) + (if + (i32.eq + (i32.and + (get_local $i1) + (i32.const 3) + ) + (i32.and + (get_local $i2) + (i32.const 3) + ) + ) + (block $block2 + (block $while-out$0 + (loop $while-in$1 + (if + (i32.eqz + (i32.and + (get_local $i1) + (i32.const 3) + ) + ) + (br $while-out$0) + ) + (block $block4 + (if + (i32.eqz + (get_local $i3) + ) + (return + (get_local $i4) + ) + ) + (i32.store8 + (get_local $i1) + (i32.load8_s + (get_local $i2) + ) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + (set_local $i2 + (i32.add + (get_local $i2) + (i32.const 1) + ) + ) + (set_local $i3 + (i32.sub + (get_local $i3) + (i32.const 1) + ) + ) + ) + (br $while-in$1) + ) + ) + (block $while-out$2 + (loop $while-in$3 + (if + (i32.eqz + (i32.ge_s + (get_local $i3) + (i32.const 4) + ) + ) + (br $while-out$2) + ) + (block $block7 + (i32.store + (get_local $i1) + (i32.load + (get_local $i2) + ) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 4) + ) + ) + (set_local $i2 + (i32.add + (get_local $i2) + (i32.const 4) + ) + ) + (set_local $i3 + (i32.sub + (get_local $i3) + (i32.const 4) + ) + ) + ) + (br $while-in$3) + ) + ) + ) + ) + (block $while-out$4 + (loop $while-in$5 + (if + (i32.eqz + (i32.gt_s + (get_local $i3) + (i32.const 0) + ) + ) + (br $while-out$4) + ) + (block $block9 + (i32.store8 + (get_local $i1) + (i32.load8_s + (get_local $i2) + ) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + (set_local $i2 + (i32.add + (get_local $i2) + (i32.const 1) + ) + ) + (set_local $i3 + (i32.sub + (get_local $i3) + (i32.const 1) + ) + ) + ) + (br $while-in$5) + ) + ) + (return + (get_local $i4) + ) + ) + (func $this-is-effective-i-tell-you (type $4) (param $x i32) + (if + (i32.const -1) + (block $block1 + (if + (i32.const 0) + (nop) + ) + (set_local $x + (i32.const 1) + ) + ) + (nop) + ) + (drop + (get_local $x) + ) + ) +) diff --git a/src/binaryen/test/passes/coalesce-locals.txt b/src/binaryen/test/passes/coalesce-locals.txt new file mode 100644 index 0000000000..b7544af448 --- /dev/null +++ b/src/binaryen/test/passes/coalesce-locals.txt @@ -0,0 +1,1156 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $2 (func)) + (type $3 (func (param i32 f32))) + (type $4 (func (param i32))) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $7 (func (param i32) (result i32))) + (type $8 (func (param f64 i32) (result i64))) + (import "env" "_emscripten_autodebug_i32" (func $_emscripten_autodebug_i32 (param i32 i32) (result i32))) + (import "env" "get" (func $get (result i32))) + (import "env" "set" (func $set (param i32))) + (memory $0 10) + (func $nothing-to-do (; 3 ;) (type $2) + (local $0 i32) + (nop) + ) + (func $merge (; 4 ;) (type $2) + (local $0 i32) + (nop) + ) + (func $leave-type (; 5 ;) (type $2) + (local $0 i32) + (local $1 f32) + (nop) + ) + (func $leave-interfere (; 6 ;) (type $2) + (local $0 i32) + (local $1 i32) + (set_local $0 + (i32.const 0) + ) + (set_local $1 + (i32.const 0) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (func $almost-interfere (; 7 ;) (type $2) + (local $0 i32) + (set_local $0 + (i32.const 0) + ) + (drop + (get_local $0) + ) + (set_local $0 + (i32.const 0) + ) + (drop + (get_local $0) + ) + ) + (func $redundant-copy (; 8 ;) (type $2) + (local $0 i32) + (set_local $0 + (i32.const 0) + ) + (nop) + (drop + (get_local $0) + ) + ) + (func $ineffective-store (; 9 ;) (type $2) + (local $0 i32) + (drop + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (drop + (get_local $0) + ) + ) + (func $block (; 10 ;) (type $2) + (local $0 i32) + (block $block0 + (set_local $0 + (i32.const 0) + ) + ) + (drop + (get_local $0) + ) + ) + (func $see-both-sides (; 11 ;) (type $2) + (local $0 i32) + (local $1 i32) + (set_local $0 + (i32.const 0) + ) + (block $block0 + (set_local $1 + (i32.const 0) + ) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (func $see-br-and-ignore-dead (; 12 ;) (type $2) + (local $0 i32) + (set_local $0 + (i32.const 0) + ) + (block $block + (br $block) + (drop + (i32.const 0) + ) + (drop + (i32.const 0) + ) + (drop + (i32.const -1) + ) + ) + (drop + (get_local $0) + ) + ) + (func $see-block-body (; 13 ;) (type $2) + (local $0 i32) + (local $1 i32) + (set_local $0 + (i32.const 0) + ) + (block $block + (set_local $1 + (i32.const 0) + ) + (drop + (get_local $1) + ) + (br $block) + ) + (drop + (get_local $0) + ) + ) + (func $zero-init (; 14 ;) (type $2) + (local $0 i32) + (local $1 i32) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (func $multi (; 15 ;) (type $2) + (local $0 i32) + (local $1 i32) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (func $if-else (; 16 ;) (type $2) + (local $0 i32) + (local $1 i32) + (if + (i32.const 0) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + ) + (func $if-else-parallel (; 17 ;) (type $2) + (local $0 i32) + (if + (i32.const 0) + (block $block1 + (set_local $0 + (i32.const 0) + ) + (drop + (get_local $0) + ) + ) + (block $block3 + (set_local $0 + (i32.const 1) + ) + (drop + (get_local $0) + ) + ) + ) + ) + (func $if-else-after (; 18 ;) (type $2) + (local $0 i32) + (local $1 i32) + (if + (i32.const 0) + (set_local $0 + (i32.const 0) + ) + (set_local $1 + (i32.const 1) + ) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (func $if-else-through (; 19 ;) (type $2) + (local $0 i32) + (local $1 i32) + (set_local $0 + (i32.const 0) + ) + (set_local $1 + (i32.const 1) + ) + (if + (i32.const 0) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (func $if-through (; 20 ;) (type $2) + (local $0 i32) + (local $1 i32) + (set_local $0 + (i32.const 0) + ) + (set_local $1 + (i32.const 1) + ) + (if + (i32.const 0) + (drop + (i32.const 1) + ) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (func $if-through2 (; 21 ;) (type $2) + (local $0 i32) + (local $1 i32) + (set_local $0 + (i32.const 0) + ) + (if + (i32.const 0) + (set_local $1 + (i32.const 1) + ) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (func $if-through3 (; 22 ;) (type $2) + (local $0 i32) + (local $1 i32) + (set_local $0 + (i32.const 0) + ) + (if + (i32.const 0) + (block $block1 + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + ) + ) + (func $if2 (; 23 ;) (type $2) + (local $0 i32) + (local $1 i32) + (if + (tee_local $0 + (i32.const 0) + ) + (block $block1 + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + ) + ) + (func $if3 (; 24 ;) (type $2) + (local $0 i32) + (local $1 i32) + (if + (i32.const 0) + (block $block1 + (set_local $0 + (i32.const 0) + ) + (drop + (get_local $0) + ) + ) + ) + (drop + (get_local $1) + ) + ) + (func $if4 (; 25 ;) (type $2) + (local $0 i32) + (if + (i32.const 0) + (block $block1 + (set_local $0 + (i32.const 0) + ) + (drop + (get_local $0) + ) + (set_local $0 + (i32.const 1) + ) + ) + ) + (drop + (get_local $0) + ) + ) + (func $if5 (; 26 ;) (type $2) + (local $0 i32) + (local $1 i32) + (if + (i32.const 0) + (block $block1 + (drop + (get_local $0) + ) + (set_local $1 + (i32.const 1) + ) + ) + ) + (drop + (get_local $1) + ) + ) + (func $loop (; 27 ;) (type $2) + (local $0 i32) + (local $1 i32) + (loop $in + (drop + (get_local $0) + ) + (set_local $0 + (i32.const 0) + ) + (drop + (get_local $1) + ) + (br $in) + ) + ) + (func $interfere-in-dead (; 28 ;) (type $2) + (local $0 i32) + (block $block + (br $block) + (drop + (i32.const 0) + ) + (drop + (i32.const 0) + ) + ) + ) + (func $interfere-in-dead2 (; 29 ;) (type $2) + (local $0 i32) + (block $block + (unreachable) + (drop + (i32.const 0) + ) + (drop + (i32.const 0) + ) + ) + ) + (func $interfere-in-dead3 (; 30 ;) (type $2) + (local $0 i32) + (block $block + (return) + (drop + (i32.const 0) + ) + (drop + (i32.const 0) + ) + ) + ) + (func $params (; 31 ;) (type $3) (param $0 i32) (param $1 f32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (drop + (get_local $2) + ) + (drop + (get_local $3) + ) + (drop + (get_local $4) + ) + ) + (func $interfere-in-dead4 (; 32 ;) (type $2) + (local $0 i32) + (local $1 i32) + (block $block + (br_if $block + (i32.const 0) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + ) + (func $switch (; 33 ;) (type $2) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (block $switch$def + (block $switch-case$1 + (block $switch-case$2 + (br_table $switch-case$1 $switch-case$2 $switch-case$1 $switch-case$1 $switch$def + (i32.const 100) + ) + (drop + (i32.const 0) + ) + ) + (drop + (get_local $0) + ) + ) + (drop + (get_local $1) + ) + ) + (drop + (get_local $2) + ) + ) + (func $greedy-can-be-happy (; 34 ;) (type $2) + (local $0 i32) + (local $1 i32) + (if + (i32.const 0) + (if + (i32.const 1) + (if + (i32.const 2) + (block $block3 + (set_local $0 + (i32.const 100) + ) + (set_local $1 + (i32.const 101) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (block $block5 + (set_local $0 + (i32.const 102) + ) + (set_local $1 + (i32.const 103) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + ) + (if + (i32.const 3) + (block $block8 + (set_local $0 + (i32.const 104) + ) + (set_local $1 + (i32.const 105) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (block $block10 + (set_local $0 + (i32.const 106) + ) + (set_local $1 + (i32.const 107) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + ) + ) + (if + (i32.const 4) + (block $block13 + (set_local $0 + (i32.const 108) + ) + (set_local $1 + (i32.const 109) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (block $block15 + (set_local $0 + (i32.const 110) + ) + (set_local $1 + (i32.const 111) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + ) + ) + ) + (func $greedy-can-be-sad (; 35 ;) (type $2) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (if + (i32.const 0) + (if + (i32.const 1) + (if + (i32.const 2) + (block $block3 + (set_local $0 + (i32.const 100) + ) + (set_local $1 + (i32.const 101) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (block $block5 + (set_local $0 + (i32.const 102) + ) + (set_local $2 + (i32.const 103) + ) + (drop + (get_local $0) + ) + (drop + (get_local $2) + ) + ) + ) + (if + (i32.const 3) + (block $block8 + (set_local $1 + (i32.const 104) + ) + (set_local $0 + (i32.const 105) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + ) + (block $block10 + (set_local $1 + (i32.const 106) + ) + (set_local $2 + (i32.const 107) + ) + (drop + (get_local $1) + ) + (drop + (get_local $2) + ) + ) + ) + ) + (if + (i32.const 4) + (block $block13 + (set_local $2 + (i32.const 108) + ) + (set_local $0 + (i32.const 109) + ) + (drop + (get_local $2) + ) + (drop + (get_local $0) + ) + ) + (block $block15 + (set_local $2 + (i32.const 110) + ) + (set_local $1 + (i32.const 111) + ) + (drop + (get_local $2) + ) + (drop + (get_local $1) + ) + ) + ) + ) + ) + (func $_memcpy (; 36 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.ge_s + (get_local $2) + (i32.const 4096) + ) + (drop + (get_local $0) + ) + ) + (set_local $3 + (get_local $0) + ) + (if + (i32.eq + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.and + (get_local $1) + (i32.const 3) + ) + ) + (block $block2 + (block $while-out$0 + (loop $while-in$1 + (if + (i32.eqz + (i32.and + (get_local $0) + (i32.const 3) + ) + ) + (br $while-out$0) + ) + (block $block4 + (if + (i32.eqz + (get_local $2) + ) + (return + (get_local $3) + ) + ) + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + ) + (br $while-in$1) + ) + ) + (block $while-out$2 + (loop $while-in$3 + (if + (i32.eqz + (i32.ge_s + (get_local $2) + (i32.const 4) + ) + ) + (br $while-out$2) + ) + (block $block7 + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 4) + ) + ) + ) + (br $while-in$3) + ) + ) + ) + ) + (block $while-out$4 + (loop $while-in$5 + (if + (i32.eqz + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + ) + (br $while-out$4) + ) + (block $block9 + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + ) + (br $while-in$5) + ) + ) + (return + (get_local $3) + ) + ) + (func $this-is-effective-i-tell-you (; 37 ;) (type $4) (param $0 i32) + (if + (i32.const -1) + (block $block1 + (if + (i32.const 0) + (nop) + ) + (set_local $0 + (i32.const 1) + ) + ) + (nop) + ) + (drop + (get_local $0) + ) + ) + (func $prefer-remove-copies1 (; 38 ;) (type $2) + (local $0 i32) + (local $1 i32) + (set_local $0 + (i32.const 0) + ) + (nop) + (set_local $1 + (i32.const 1) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + (func $prefer-remove-copies2 (; 39 ;) (type $2) + (local $0 i32) + (local $1 i32) + (set_local $0 + (i32.const 0) + ) + (nop) + (set_local $1 + (i32.const 1) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + ) + (func $in-unreachable (; 40 ;) (type $2) + (local $0 i32) + (block $x + (return) + (drop + (i32.const 1) + ) + (drop + (i32.const 0) + ) + (drop + (i32.const 0) + ) + ) + (block $y + (unreachable) + (drop + (i32.const 1) + ) + (drop + (i32.const 0) + ) + (drop + (i32.const 0) + ) + ) + (block $z + (br $z) + (drop + (i32.const 1) + ) + (drop + (i32.const 0) + ) + (drop + (i32.const 0) + ) + ) + (block $z14 + (br_table $z14 $z14 + (i32.const 100) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 0) + ) + (drop + (i32.const 0) + ) + ) + ) + (func $nop-in-unreachable (; 41 ;) (type $2) + (local $0 i32) + (block $block + (unreachable) + (i32.store + (i32.const 0) + (i32.const 0) + ) + ) + ) + (func $loop-backedge (; 42 ;) (type $2) + (local $0 i32) + (local $1 i32) + (set_local $0 + (i32.const 2) + ) + (block $out + (loop $while-in7 + (set_local $1 + (i32.const 0) + ) + (call $set + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (if + (call $get) + (set_local $1 + (get_local $0) + ) + ) + (br_if $out + (get_local $1) + ) + (set_local $0 + (i32.const 100) + ) + (nop) + (br $while-in7) + ) + ) + ) + (func $if-copy1 (; 43 ;) (type $2) + (local $0 i32) + (local $1 i32) + (loop $top + (if + (i32.eqz + (i32.const 1) + ) + (set_local $0 + (get_local $1) + ) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + (br $top) + ) + ) + (func $if-copy2 (; 44 ;) (type $2) + (local $0 i32) + (local $1 i32) + (loop $top + (if + (i32.const 1) + (set_local $1 + (get_local $0) + ) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (br $top) + ) + ) + (func $if-copy3 (; 45 ;) (type $2) + (local $0 i32) + (local $1 i32) + (loop $top + (if + (i32.const 1) + (tee_local $0 + (unreachable) + ) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + (br $top) + ) + ) + (func $if-copy4 (; 46 ;) (type $2) + (local $0 i32) + (local $1 i32) + (loop $top + (set_local $1 + (if (result i32) + (i32.const 1) + (unreachable) + (get_local $0) + ) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (br $top) + ) + ) + (func $if-copy-tee (; 47 ;) (type $2) + (local $0 i32) + (local $1 i32) + (loop $top + (drop + (if (result i32) + (i32.const 1) + (get_local $0) + (tee_local $0 + (i32.const 2) + ) + ) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + (br $top) + ) + ) + (func $tee_br (; 48 ;) (type $7) (param $0 i32) (result i32) + (block $b + (return + (br $b) + ) + ) + (i32.const 1) + ) + (func $unused-tee-with-child-if-no-else (; 49 ;) (type $4) (param $0 i32) + (loop $label$0 + (drop + (if + (br $label$0) + (nop) + ) + ) + ) + ) + (func $tee_if_with_unreachable_else (; 50 ;) (type $8) (param $0 f64) (param $1 i32) (result i64) + (call $tee_if_with_unreachable_else + (if (result f64) + (get_local $1) + (get_local $0) + (tee_local $0 + (unreachable) + ) + ) + (f64.lt + (f64.const -128) + (get_local $0) + ) + ) + ) + (func $tee_if_with_unreachable_true (; 51 ;) (type $8) (param $0 f64) (param $1 i32) (result i64) + (call $tee_if_with_unreachable_else + (if (result f64) + (get_local $1) + (tee_local $0 + (unreachable) + ) + (get_local $0) + ) + (f64.lt + (f64.const -128) + (get_local $0) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/coalesce-locals.wast b/src/binaryen/test/passes/coalesce-locals.wast new file mode 100644 index 0000000000..ee92bb05e1 --- /dev/null +++ b/src/binaryen/test/passes/coalesce-locals.wast @@ -0,0 +1,1130 @@ +(module + (memory 10) + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $2 (func)) + (type $3 (func (param i32 f32))) + (type $4 (func (param i32))) + (import $_emscripten_autodebug_i32 "env" "_emscripten_autodebug_i32" (param i32 i32) (result i32)) + (import $get "env" "get" (result i32)) + (import $set "env" "set" (param i32)) + (func $nothing-to-do (type $2) + (local $x i32) + (nop) + ) + (func $merge (type $2) + (local $x i32) + (local $y i32) + (nop) + ) + (func $leave-type (type $2) + (local $x i32) + (local $y f32) + (nop) + ) + (func $leave-interfere (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (set_local $y + (i32.const 0) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + (func $almost-interfere (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (drop + (get_local $x) + ) + (set_local $y + (i32.const 0) + ) + (drop + (get_local $y) + ) + ) + (func $redundant-copy (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (set_local $y + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + (func $ineffective-store (type $2) + (local $x i32) + (set_local $x + (i32.const 0) + ) + (set_local $x + (i32.const 0) + ) + (drop + (get_local $x) + ) + ) + (func $block (type $2) + (local $x i32) + (block $block0 + (set_local $x + (i32.const 0) + ) + ) + (drop + (get_local $x) + ) + ) + (func $see-both-sides (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (block $block0 + (set_local $y + (i32.const 0) + ) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + (func $see-br-and-ignore-dead (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (block $block + (br $block) + (set_local $y + (i32.const 0) + ) + (drop + (get_local $y) + ) + (set_local $x + (i32.const -1) + ) + ) + (drop + (get_local $x) + ) + ) + (func $see-block-body (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (block $block + (set_local $y + (i32.const 0) + ) + (drop + (get_local $y) + ) + (br $block) + ) + (drop + (get_local $x) + ) + ) + (func $zero-init (type $2) + (local $x i32) + (local $y i32) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + (func $multi (type $2) + (local $x i32) + (local $y i32) + (local $z i32) + (drop + (get_local $y) + ) + (drop + (get_local $z) + ) + ) + (func $if-else (type $2) + (local $x i32) + (local $y i32) + (if + (i32.const 0) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + ) + (func $if-else-parallel (type $2) + (local $x i32) + (local $y i32) + (if + (i32.const 0) + (block $block1 + (set_local $x + (i32.const 0) + ) + (drop + (get_local $x) + ) + ) + (block $block3 + (set_local $y + (i32.const 1) + ) + (drop + (get_local $y) + ) + ) + ) + ) + (func $if-else-after (type $2) + (local $x i32) + (local $y i32) + (if + (i32.const 0) + (set_local $x + (i32.const 0) + ) + (set_local $y + (i32.const 1) + ) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + (func $if-else-through (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (set_local $y + (i32.const 1) + ) + (if + (i32.const 0) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + (func $if-through (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (set_local $y + (i32.const 1) + ) + (if + (i32.const 0) + (drop + (i32.const 1) + ) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + (func $if-through2 (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (if + (i32.const 0) + (set_local $y + (i32.const 1) + ) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + (func $if-through3 (type $2) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 0) + ) + (if + (i32.const 0) + (block $block1 + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + ) + ) + (func $if2 (type $2) + (local $x i32) + (local $y i32) + (if + (tee_local $x + (i32.const 0) + ) + (block $block1 + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + ) + ) + (func $if3 (type $2) + (local $x i32) + (local $y i32) + (if + (i32.const 0) + (block $block1 + (set_local $x + (i32.const 0) + ) + (drop + (get_local $x) + ) + ) + ) + (drop + (get_local $y) + ) + ) + (func $if4 (type $2) + (local $x i32) + (local $y i32) + (if + (i32.const 0) + (block $block1 + (set_local $x + (i32.const 0) + ) + (drop + (get_local $x) + ) + (set_local $y + (i32.const 1) + ) + ) + ) + (drop + (get_local $y) + ) + ) + (func $if5 (type $2) + (local $x i32) + (local $y i32) + (if + (i32.const 0) + (block $block1 + (drop + (get_local $x) + ) + (set_local $y + (i32.const 1) + ) + ) + ) + (drop + (get_local $y) + ) + ) + (func $loop (type $2) + (local $x i32) + (local $y i32) + (loop $in + (drop + (get_local $x) + ) + (set_local $x + (i32.const 0) + ) + (drop + (get_local $y) + ) + (br $in) + ) + ) + (func $interfere-in-dead (type $2) + (local $x i32) + (local $y i32) + (block $block + (br $block) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + ) + (func $interfere-in-dead2 (type $2) + (local $x i32) + (local $y i32) + (block $block + (unreachable) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + ) + (func $interfere-in-dead3 (type $2) + (local $x i32) + (local $y i32) + (block $block + (return) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + ) + (func $params (type $3) (param $p i32) (param $q f32) + (local $x i32) + (local $y i32) + (local $z i32) + (local $w i32) + (drop + (get_local $y) + ) + (drop + (get_local $z) + ) + (drop + (get_local $w) + ) + ) + (func $interfere-in-dead4 (type $2) + (local $x i32) + (local $y i32) + (block $block + (br_if $block + (i32.const 0) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + ) + (func $switch (type $2) + (local $x i32) + (local $y i32) + (local $z i32) + (local $w i32) + (block $switch$def + (block $switch-case$1 + (block $switch-case$2 + (br_table $switch-case$1 $switch-case$2 $switch-case$1 $switch-case$1 $switch$def + (i32.const 100) + ) + (drop + (get_local $x) + ) + ) + (drop + (get_local $y) + ) + ) + (drop + (get_local $z) + ) + ) + (drop + (get_local $w) + ) + ) + (func $greedy-can-be-happy (type $2) + (local $x1 i32) + (local $x2 i32) + (local $x3 i32) + (local $y1 i32) + (local $y2 i32) + (local $y3 i32) + (if + (i32.const 0) + (if + (i32.const 1) + (if + (i32.const 2) + (block $block3 + (set_local $x1 + (i32.const 100) + ) + (set_local $y2 + (i32.const 101) + ) + (drop + (get_local $x1) + ) + (drop + (get_local $y2) + ) + ) + (block $block5 + (set_local $x1 + (i32.const 102) + ) + (set_local $y3 + (i32.const 103) + ) + (drop + (get_local $x1) + ) + (drop + (get_local $y3) + ) + ) + ) + (if + (i32.const 3) + (block $block8 + (set_local $x2 + (i32.const 104) + ) + (set_local $y1 + (i32.const 105) + ) + (drop + (get_local $x2) + ) + (drop + (get_local $y1) + ) + ) + (block $block10 + (set_local $x2 + (i32.const 106) + ) + (set_local $y3 + (i32.const 107) + ) + (drop + (get_local $x2) + ) + (drop + (get_local $y3) + ) + ) + ) + ) + (if + (i32.const 4) + (block $block13 + (set_local $x3 + (i32.const 108) + ) + (set_local $y1 + (i32.const 109) + ) + (drop + (get_local $x3) + ) + (drop + (get_local $y1) + ) + ) + (block $block15 + (set_local $x3 + (i32.const 110) + ) + (set_local $y2 + (i32.const 111) + ) + (drop + (get_local $x3) + ) + (drop + (get_local $y2) + ) + ) + ) + ) + ) + (func $greedy-can-be-sad (type $2) + (local $x1 i32) + (local $y1 i32) + (local $x2 i32) + (local $y2 i32) + (local $x3 i32) + (local $y3 i32) + (if + (i32.const 0) + (if + (i32.const 1) + (if + (i32.const 2) + (block $block3 + (set_local $x1 + (i32.const 100) + ) + (set_local $y2 + (i32.const 101) + ) + (drop + (get_local $x1) + ) + (drop + (get_local $y2) + ) + ) + (block $block5 + (set_local $x1 + (i32.const 102) + ) + (set_local $y3 + (i32.const 103) + ) + (drop + (get_local $x1) + ) + (drop + (get_local $y3) + ) + ) + ) + (if + (i32.const 3) + (block $block8 + (set_local $x2 + (i32.const 104) + ) + (set_local $y1 + (i32.const 105) + ) + (drop + (get_local $x2) + ) + (drop + (get_local $y1) + ) + ) + (block $block10 + (set_local $x2 + (i32.const 106) + ) + (set_local $y3 + (i32.const 107) + ) + (drop + (get_local $x2) + ) + (drop + (get_local $y3) + ) + ) + ) + ) + (if + (i32.const 4) + (block $block13 + (set_local $x3 + (i32.const 108) + ) + (set_local $y1 + (i32.const 109) + ) + (drop + (get_local $x3) + ) + (drop + (get_local $y1) + ) + ) + (block $block15 + (set_local $x3 + (i32.const 110) + ) + (set_local $y2 + (i32.const 111) + ) + (drop + (get_local $x3) + ) + (drop + (get_local $y2) + ) + ) + ) + ) + ) + (func $_memcpy (type $FUNCSIG$iiii) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) + (local $i4 i32) + (if + (i32.ge_s + (get_local $i3) + (i32.const 4096) + ) + (drop + (get_local $i1) + ) + ) + (set_local $i4 + (get_local $i1) + ) + (if + (i32.eq + (i32.and + (get_local $i1) + (i32.const 3) + ) + (i32.and + (get_local $i2) + (i32.const 3) + ) + ) + (block $block2 + (block $while-out$0 + (loop $while-in$1 + (if + (i32.eqz + (i32.and + (get_local $i1) + (i32.const 3) + ) + ) + (br $while-out$0) + ) + (block $block4 + (if + (i32.eqz + (get_local $i3) + ) + (return + (get_local $i4) + ) + ) + (i32.store8 + (get_local $i1) + (i32.load8_s + (get_local $i2) + ) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + (set_local $i2 + (i32.add + (get_local $i2) + (i32.const 1) + ) + ) + (set_local $i3 + (i32.sub + (get_local $i3) + (i32.const 1) + ) + ) + ) + (br $while-in$1) + ) + ) + (block $while-out$2 + (loop $while-in$3 + (if + (i32.eqz + (i32.ge_s + (get_local $i3) + (i32.const 4) + ) + ) + (br $while-out$2) + ) + (block $block7 + (i32.store + (get_local $i1) + (i32.load + (get_local $i2) + ) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 4) + ) + ) + (set_local $i2 + (i32.add + (get_local $i2) + (i32.const 4) + ) + ) + (set_local $i3 + (i32.sub + (get_local $i3) + (i32.const 4) + ) + ) + ) + (br $while-in$3) + ) + ) + ) + ) + (block $while-out$4 + (loop $while-in$5 + (if + (i32.eqz + (i32.gt_s + (get_local $i3) + (i32.const 0) + ) + ) + (br $while-out$4) + ) + (block $block9 + (i32.store8 + (get_local $i1) + (i32.load8_s + (get_local $i2) + ) + ) + (set_local $i1 + (i32.add + (get_local $i1) + (i32.const 1) + ) + ) + (set_local $i2 + (i32.add + (get_local $i2) + (i32.const 1) + ) + ) + (set_local $i3 + (i32.sub + (get_local $i3) + (i32.const 1) + ) + ) + ) + (br $while-in$5) + ) + ) + (return + (get_local $i4) + ) + ) + (func $this-is-effective-i-tell-you (type $4) (param $x i32) + (if + (i32.const -1) + (block $block1 + (if + (i32.const 0) + (nop) + ) + (set_local $x + (i32.const 1) + ) + ) + (nop) + ) + (drop + (get_local $x) + ) + ) + (func $prefer-remove-copies1 (type $2) + (local $y i32) + (local $z i32) + (local $x i32) + (set_local $x + (i32.const 0) + ) + (set_local $y + (get_local $x) + ) + (set_local $z + (i32.const 1) + ) + (drop + (get_local $y) + ) + (drop + (get_local $z) + ) + ) + (func $prefer-remove-copies2 (type $2) + (local $y i32) + (local $z i32) + (local $x i32) + (set_local $x + (i32.const 0) + ) + (set_local $z + (get_local $x) + ) + (set_local $y + (i32.const 1) + ) + (drop + (get_local $y) + ) + (drop + (get_local $z) + ) + ) + (func $in-unreachable + (local $a i32) + (block $x + (return) + (set_local $a (i32.const 1)) + (drop (get_local $a)) + (set_local $a (get_local $a)) + ) + (block $y + (unreachable) + (set_local $a (i32.const 1)) + (drop (get_local $a)) + (set_local $a (get_local $a)) + ) + (block $z + (br $z) + (set_local $a (i32.const 1)) + (drop (get_local $a)) + (set_local $a (get_local $a)) + ) + (block $z + (br_table $z $z + (i32.const 100) + ) + (set_local $a (i32.const 1)) + (drop (get_local $a)) + (set_local $a (get_local $a)) + ) + ) + (func $nop-in-unreachable + (local $x i32) + (block + (unreachable) + (i32.store + (get_local $x) + (tee_local $x (i32.const 0)) + ) + ) + ) + (func $loop-backedge + (local $0 i32) ;; loop phi + (local $1 i32) ;; value for next loop iteration + (local $2 i32) ;; a local that might be merged with with $1, perhaps making us prefer it to removing a backedge copy + (set_local $0 + (i32.const 2) + ) + (block $out + (loop $while-in7 + (set_local $2 (i32.const 0)) ;; 2 interferes with 0 + (call $set (get_local $2)) + (set_local $1 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (if (call $get) + (set_local $2 (get_local $1)) ;; copy for 1/2 + ) + (br_if $out (get_local $2)) + (set_local $1 (i32.const 100)) + (set_local $0 (get_local $1)) ;; copy for 1/0, with extra weight should win the tie + (br $while-in7) + ) + ) + ) + (func $if-copy1 + (local $x i32) + (local $y i32) + (loop $top + (set_local $x + (if (result i32) + (i32.const 1) + (get_local $x) + (get_local $y) + ) + ) + (drop (get_local $x)) + (drop (get_local $y)) + (br $top) + ) + ) + (func $if-copy2 + (local $x i32) + (local $y i32) + (loop $top + (set_local $x + (if (result i32) + (i32.const 1) + (get_local $y) + (get_local $x) + ) + ) + (drop (get_local $x)) + (drop (get_local $y)) + (br $top) + ) + ) + (func $if-copy3 + (local $x i32) + (local $y i32) + (loop $top + (set_local $x + (if (result i32) + (i32.const 1) + (unreachable) + (get_local $x) + ) + ) + (drop (get_local $x)) + (drop (get_local $y)) + (br $top) + ) + ) + (func $if-copy4 + (local $x i32) + (local $y i32) + (loop $top + (set_local $x + (if (result i32) + (i32.const 1) + (unreachable) + (get_local $y) + ) + ) + (drop (get_local $x)) + (drop (get_local $y)) + (br $top) + ) + ) + (func $if-copy-tee + (local $x i32) + (local $y i32) + (loop $top + (drop + (tee_local $x + (if (result i32) + (i32.const 1) + (get_local $x) + (i32.const 2) + ) + ) + ) + (drop (get_local $x)) + (drop (get_local $y)) + (br $top) + ) + ) + (func $tee_br (param $x i32) (result i32) + (block $b + (return + (tee_local $x + (br $b) + ) + ) + ) + (i32.const 1) + ) + (func $unused-tee-with-child-if-no-else (param $0 i32) + (loop $label$0 + (drop + (tee_local $0 + (if + (br $label$0) + (nop) + ) + ) + ) + ) + ) + (func $tee_if_with_unreachable_else (param $0 f64) (param $1 i32) (result i64) + (call $tee_if_with_unreachable_else + (tee_local $0 + (if (result f64) + (get_local $1) + (get_local $0) + (unreachable) + ) + ) + (f64.lt + (f64.const -128) + (get_local $0) + ) + ) + ) + (func $tee_if_with_unreachable_true (param $0 f64) (param $1 i32) (result i64) + (call $tee_if_with_unreachable_else + (tee_local $0 + (if (result f64) + (get_local $1) + (unreachable) + (get_local $0) + ) + ) + (f64.lt + (f64.const -128) + (get_local $0) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/code-folding.txt b/src/binaryen/test/passes/code-folding.txt new file mode 100644 index 0000000000..e11999ac85 --- /dev/null +++ b/src/binaryen/test/passes/code-folding.txt @@ -0,0 +1,109 @@ +(module + (type $13 (func (param f32))) + (type $1 (func)) + (type $2 (func (result f32))) + (table 282 282 anyfunc) + (memory $0 1 1) + (func $0 (; 0 ;) (type $1) + (block $label$1 + (if + (i32.const 1) + (block + (block $label$3 + (call_indirect (type $13) + (block $label$4 + (br $label$3) + ) + (i32.const 105) + ) + ) + (nop) + ) + ) + ) + ) + (func $negative-zero (; 1 ;) (type $2) (result f32) + (if (result f32) + (i32.const 0) + (block $label$0 (result f32) + (f32.const 0) + ) + (block $label$1 (result f32) + (f32.const -0) + ) + ) + ) + (func $negative-zero-b (; 2 ;) (type $2) (result f32) + (drop + (i32.const 0) + ) + (block $label$0 (result f32) + (f32.const -0) + ) + ) + (func $negative-zero-c (; 3 ;) (type $2) (result f32) + (drop + (i32.const 0) + ) + (block $label$0 (result f32) + (f32.const 0) + ) + ) + (func $break-target-outside-of-return-merged-code (; 4 ;) (type $1) + (block $label$A + (if + (unreachable) + (block $block + (block $block0 + (block $label$B + (if + (unreachable) + (br_table $label$A $label$B + (unreachable) + ) + ) + ) + (return) + ) + ) + (block $block2 + (block $label$C + (if + (unreachable) + (br_table $label$A $label$C + (unreachable) + ) + ) + ) + (return) + ) + ) + ) + ) + (func $break-target-inside-all-good (; 5 ;) (type $1) + (block $folding-inner0 + (block $label$A + (if + (unreachable) + (block $block + (block $block4 + (br $folding-inner0) + ) + ) + (block $block6 + (br $folding-inner0) + ) + ) + ) + ) + (block $label$B + (if + (unreachable) + (br_table $label$B $label$B + (unreachable) + ) + ) + ) + (return) + ) +) diff --git a/src/binaryen/test/passes/code-folding.wast b/src/binaryen/test/passes/code-folding.wast new file mode 100644 index 0000000000..2064f2db6a --- /dev/null +++ b/src/binaryen/test/passes/code-folding.wast @@ -0,0 +1,118 @@ +(module + (type $13 (func (param f32))) + (table 282 282 anyfunc) + (memory $0 1 1) + (func $0 + (block $label$1 + (if + (i32.const 1) + (block $label$3 + (call_indirect (type $13) + (block $label$4 (result f32) ;; but this type may change dangerously + (nop) ;; fold this + (br $label$3) + ) + (i32.const 105) + ) + (nop) ;; with this + ) + ) + ) + ) + (func $negative-zero (result f32) + (if (result f32) + (i32.const 0) + (block $label$0 (result f32) + (f32.const 0) + ) + (block $label$1 (result f32) + (f32.const -0) + ) + ) + ) + (func $negative-zero-b (result f32) + (if (result f32) + (i32.const 0) + (block $label$0 (result f32) + (f32.const -0) + ) + (block $label$1 (result f32) + (f32.const -0) + ) + ) + ) + (func $negative-zero-c (result f32) + (if (result f32) + (i32.const 0) + (block $label$0 (result f32) + (f32.const 0) + ) + (block $label$1 (result f32) + (f32.const 0) + ) + ) + ) + (func $break-target-outside-of-return-merged-code + (block $label$A + (if + (unreachable) + (block + (block + (block $label$B + (if + (unreachable) + (br_table $label$A $label$B + (unreachable) + ) + ) + ) + (return) + ) + ) + (block + (block $label$C + (if + (unreachable) + (br_table $label$A $label$C ;; this all looks mergeable, but $label$A is outside + (unreachable) + ) + ) + ) + (return) + ) + ) + ) + ) + (func $break-target-inside-all-good + (block $label$A + (if + (unreachable) + (block + (block + (block $label$B + (if + (unreachable) + (br_table $label$B $label$B + (unreachable) + ) + ) + ) + (return) + ) + ) + (block + (block $label$C + (if + (unreachable) + (br_table $label$C $label$C ;; this all looks mergeable, and is, B ~~ C + (unreachable) + ) + ) + ) + (return) + ) + ) + ) + ) +) + diff --git a/src/binaryen/test/passes/code-pushing_ignore-implicit-traps.txt b/src/binaryen/test/passes/code-pushing_ignore-implicit-traps.txt new file mode 100644 index 0000000000..58b124ec9f --- /dev/null +++ b/src/binaryen/test/passes/code-pushing_ignore-implicit-traps.txt @@ -0,0 +1,460 @@ +(module + (type $0 (func)) + (type $1 (func (result i32))) + (memory $0 0) + (func $push1 (; 0 ;) (type $0) + (local $x i32) + (block $out + (br_if $out + (i32.const 2) + ) + (set_local $x + (i32.const 1) + ) + (drop + (get_local $x) + ) + ) + ) + (func $push2 (; 1 ;) (type $0) + (local $x i32) + (local $y i32) + (block $out + (br_if $out + (i32.const 2) + ) + (set_local $x + (i32.const 1) + ) + (set_local $y + (i32.const 3) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + ) + (func $push1-twice (; 2 ;) (type $0) + (local $x i32) + (block $out + (br_if $out + (i32.const 2) + ) + (br_if $out + (i32.const 3) + ) + (set_local $x + (i32.const 1) + ) + (drop + (get_local $x) + ) + ) + ) + (func $push1-twiceb (; 3 ;) (type $0) + (local $x i32) + (block $out + (br_if $out + (i32.const 2) + ) + (nop) + (br_if $out + (i32.const 3) + ) + (set_local $x + (i32.const 1) + ) + (drop + (get_local $x) + ) + ) + ) + (func $push2-twice (; 4 ;) (type $0) + (local $x i32) + (local $y i32) + (block $out + (br_if $out + (i32.const 2) + ) + (br_if $out + (i32.const 2) + ) + (set_local $x + (i32.const 1) + ) + (set_local $y + (i32.const 3) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + ) + (func $ignore-last (; 5 ;) (type $0) + (local $x i32) + (block $out + (set_local $x + (i32.const 1) + ) + (br_if $out + (i32.const 2) + ) + ) + ) + (func $ignore-last2 (; 6 ;) (type $0) + (local $x i32) + (block $out + (set_local $x + (i32.const 1) + ) + (nop) + (nop) + (br_if $out + (i32.const 2) + ) + ) + ) + (func $push-if (; 7 ;) (type $0) + (local $x i32) + (block $out + (if + (i32.const 2) + (nop) + ) + (set_local $x + (i32.const 1) + ) + (drop + (get_local $x) + ) + ) + ) + (func $push-dropped (; 8 ;) (type $1) (result i32) + (local $x i32) + (block $out (result i32) + (drop + (br_if $out + (i32.const 2) + (i32.const 3) + ) + ) + (set_local $x + (i32.const 1) + ) + (drop + (get_local $x) + ) + (i32.const 4) + ) + ) + (func $push-past-stuff (; 9 ;) (type $0) + (local $x i32) + (block $out + (call $push-past-stuff) + (drop + (i32.const 1) + ) + (br_if $out + (i32.const 2) + ) + (set_local $x + (i32.const 1) + ) + (drop + (get_local $x) + ) + ) + ) + (func $fail-then-push (; 10 ;) (type $0) + (local $x i32) + (local $y i32) + (block $out + (set_local $x + (i32.const 1) + ) + (drop + (get_local $x) + ) + (br_if $out + (i32.const 2) + ) + (br_if $out + (i32.const 3) + ) + (set_local $y + (i32.const 1) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + ) + (func $used (; 11 ;) (type $0) + (local $x i32) + (block $out + (set_local $x + (i32.const 1) + ) + (br_if $out + (get_local $x) + ) + (drop + (get_local $x) + ) + ) + ) + (func $not-sfa (; 12 ;) (type $0) + (local $x i32) + (set_local $x + (i32.const 1) + ) + (block $out + (set_local $x + (i32.const 1) + ) + (br_if $out + (i32.const 2) + ) + (drop + (get_local $x) + ) + ) + ) + (func $not-sfa2 (; 13 ;) (type $0) + (local $x i32) + (drop + (get_local $x) + ) + (block $out + (set_local $x + (i32.const 1) + ) + (br_if $out + (i32.const 2) + ) + (drop + (get_local $x) + ) + ) + ) + (func $used-out (; 14 ;) (type $0) + (local $x i32) + (block $out + (set_local $x + (i32.const 1) + ) + (br_if $out + (i32.const 2) + ) + (drop + (get_local $x) + ) + ) + (drop + (get_local $x) + ) + ) + (func $value-might-interfere (; 15 ;) (type $0) + (local $x i32) + (block $out + (br_if $out + (i32.const 2) + ) + (set_local $x + (i32.load + (i32.const 0) + ) + ) + (drop + (get_local $x) + ) + ) + ) + (func $value-interferes (; 16 ;) (type $0) + (local $x i32) + (block $out + (set_local $x + (i32.load + (i32.const 0) + ) + ) + (i32.store + (i32.const 1) + (i32.const 3) + ) + (br_if $out + (i32.const 2) + ) + (drop + (get_local $x) + ) + ) + ) + (func $value-interferes-accumulation (; 17 ;) (type $0) + (local $x i32) + (block $out + (set_local $x + (i32.load + (i32.const 0) + ) + ) + (nop) + (i32.store + (i32.const 1) + (i32.const 3) + ) + (nop) + (br_if $out + (i32.const 2) + ) + (drop + (get_local $x) + ) + ) + ) + (func $value-interferes-in-pushpoint (; 18 ;) (type $0) + (local $x i32) + (block $out + (set_local $x + (i32.load + (i32.const 0) + ) + ) + (if + (i32.const 1) + (call $value-interferes) + ) + (drop + (get_local $x) + ) + ) + ) + (func $values-might-interfere (; 19 ;) (type $0) + (local $x i32) + (local $y i32) + (block $out + (set_local $x + (call $push-dropped) + ) + (set_local $y + (call $push-dropped) + ) + (br_if $out + (i32.const 2) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + ) + (func $unpushed-interferes (; 20 ;) (type $0) + (local $x i32) + (local $y i32) + (block $out + (set_local $x + (call $push-dropped) + ) + (set_local $y + (call $push-dropped) + ) + (br_if $out + (i32.const 2) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + (drop + (get_local $y) + ) + ) + (func $unpushed-ignorable (; 21 ;) (type $0) + (local $x i32) + (local $y i32) + (block $out + (set_local $x + (i32.const 1) + ) + (br_if $out + (i32.const 2) + ) + (set_local $y + (i32.const 3) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + (drop + (get_local $x) + ) + ) + (func $unpushed-ignorable-side-effect (; 22 ;) (type $0) + (local $x i32) + (local $y i32) + (block $out + (set_local $x + (call $push-dropped) + ) + (br_if $out + (i32.const 2) + ) + (set_local $y + (i32.const 3) + ) + (drop + (get_local $x) + ) + (drop + (get_local $y) + ) + ) + ) + (func $unpushed-side-effect-into-drop (; 23 ;) (type $0) + (local $x i32) + (block $out + (set_local $x + (call $push-dropped) + ) + (br_if $out + (i32.const 1) + ) + (drop + (get_local $x) + ) + ) + ) + (func $unpushed-side-effect-into-if (; 24 ;) (type $0) + (local $x i32) + (block $out + (set_local $x + (call $push-dropped) + ) + (br_if $out + (i32.const 1) + ) + (if + (get_local $x) + (nop) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/code-pushing_ignore-implicit-traps.wast b/src/binaryen/test/passes/code-pushing_ignore-implicit-traps.wast new file mode 100644 index 0000000000..c3ee7f8d72 --- /dev/null +++ b/src/binaryen/test/passes/code-pushing_ignore-implicit-traps.wast @@ -0,0 +1,248 @@ +(module + (func $push1 + (local $x i32) + (block $out + (set_local $x (i32.const 1)) + (br_if $out (i32.const 2)) + (drop (get_local $x)) + ) + ) + (func $push2 + (local $x i32) + (local $y i32) + (block $out + (set_local $x (i32.const 1)) + (set_local $y (i32.const 3)) + (br_if $out (i32.const 2)) + (drop (get_local $x)) + (drop (get_local $y)) + ) + ) + (func $push1-twice + (local $x i32) + (block $out + (set_local $x (i32.const 1)) + (br_if $out (i32.const 2)) + (br_if $out (i32.const 3)) + (drop (get_local $x)) + ) + ) + (func $push1-twiceb + (local $x i32) + (block $out + (set_local $x (i32.const 1)) + (br_if $out (i32.const 2)) + (nop) + (br_if $out (i32.const 3)) + (drop (get_local $x)) + ) + ) + (func $push2-twice + (local $x i32) + (local $y i32) + (block $out + (set_local $x (i32.const 1)) + (set_local $y (i32.const 3)) + (br_if $out (i32.const 2)) + (br_if $out (i32.const 2)) + (drop (get_local $x)) + (drop (get_local $y)) + ) + ) + (func $ignore-last + (local $x i32) + (block $out + (set_local $x (i32.const 1)) + (br_if $out (i32.const 2)) + ) + ) + (func $ignore-last2 + (local $x i32) + (block $out + (set_local $x (i32.const 1)) + (nop) + (nop) + (br_if $out (i32.const 2)) + ) + ) + (func $push-if + (local $x i32) + (block $out + (set_local $x (i32.const 1)) + (if (i32.const 2) (nop)) + (drop (get_local $x)) + ) + ) + (func $push-dropped (result i32) + (local $x i32) + (block $out (result i32) + (set_local $x (i32.const 1)) + (drop (br_if $out (i32.const 2) (i32.const 3))) + (drop (get_local $x)) + (i32.const 4) + ) + ) + (func $push-past-stuff + (local $x i32) + (block $out + (set_local $x (i32.const 1)) + (call $push-past-stuff) + (drop (i32.const 1)) + (br_if $out (i32.const 2)) + (drop (get_local $x)) + ) + ) + (func $fail-then-push + (local $x i32) + (local $y i32) + (block $out + (set_local $x (i32.const 1)) + (drop (get_local $x)) + (br_if $out (i32.const 2)) + (set_local $y (i32.const 1)) + (br_if $out (i32.const 3)) + (drop (get_local $x)) + (drop (get_local $y)) + ) + ) + ;; and now for stuff that should *not* be pushed + (func $used + (local $x i32) + (block $out + (set_local $x (i32.const 1)) + (br_if $out (get_local $x)) + (drop (get_local $x)) + ) + ) + (func $not-sfa + (local $x i32) + (set_local $x (i32.const 1)) + (block $out + (set_local $x (i32.const 1)) + (br_if $out (i32.const 2)) + (drop (get_local $x)) + ) + ) + (func $not-sfa2 + (local $x i32) + (drop (get_local $x)) + (block $out + (set_local $x (i32.const 1)) + (br_if $out (i32.const 2)) + (drop (get_local $x)) + ) + ) + (func $used-out + (local $x i32) + (block $out + (set_local $x (i32.const 1)) + (br_if $out (i32.const 2)) + (drop (get_local $x)) + ) + (drop (get_local $x)) + ) + (func $value-might-interfere ;; but doesn't + (local $x i32) + (block $out + (set_local $x (i32.load (i32.const 0))) + (br_if $out (i32.const 2)) + (drop (get_local $x)) + ) + ) + (func $value-interferes + (local $x i32) + (block $out + (set_local $x (i32.load (i32.const 0))) + (i32.store (i32.const 1) (i32.const 3)) + (br_if $out (i32.const 2)) + (drop (get_local $x)) + ) + ) + (func $value-interferes-accumulation + (local $x i32) + (block $out + (set_local $x (i32.load (i32.const 0))) + (nop) + (i32.store (i32.const 1) (i32.const 3)) + (nop) + (br_if $out (i32.const 2)) + (drop (get_local $x)) + ) + ) + (func $value-interferes-in-pushpoint + (local $x i32) + (block $out + (set_local $x (i32.load (i32.const 0))) + (if (i32.const 1) + (call $value-interferes) + ) + (drop (get_local $x)) + ) + ) + (func $values-might-interfere ;; they don't, as we keep the order - but here their side effects prevent pushing + (local $x i32) + (local $y i32) + (block $out + (set_local $x (call $push-dropped)) + (set_local $y (call $push-dropped)) + (br_if $out (i32.const 2)) + (drop (get_local $x)) + (drop (get_local $y)) + ) + ) + (func $unpushed-interferes + (local $x i32) + (local $y i32) + (block $out + (set_local $x (call $push-dropped)) + (set_local $y (call $push-dropped)) + (br_if $out (i32.const 2)) + (drop (get_local $x)) + (drop (get_local $y)) + ) + (drop (get_local $y)) ;; $y can't be pushed, so x can't be + ) + (func $unpushed-ignorable + (local $x i32) + (local $y i32) + (block $out + (set_local $x (i32.const 1)) + (set_local $y (i32.const 3)) + (br_if $out (i32.const 2)) + (drop (get_local $x)) + (drop (get_local $y)) + ) + (drop (get_local $x)) ;; $x can't be pushed, but y doesn't care + ) + (func $unpushed-ignorable-side-effect + (local $x i32) + (local $y i32) + (block $out + (set_local $x (call $push-dropped)) ;; $x can't be pushed, but y doesn't care + (set_local $y (i32.const 3)) + (br_if $out (i32.const 2)) + (drop (get_local $x)) + (drop (get_local $y)) + ) + ) + (func $unpushed-side-effect-into-drop + (local $x i32) + (block $out + (set_local $x (call $push-dropped)) + (br_if $out (i32.const 1)) + (drop (get_local $x)) + ) + ) + (func $unpushed-side-effect-into-if + (local $x i32) + (block $out + (set_local $x (call $push-dropped)) + (br_if $out (i32.const 1)) + (if + (get_local $x) + (nop) + ) + ) + ) +) + diff --git a/src/binaryen/test/passes/const-hoisting.txt b/src/binaryen/test/passes/const-hoisting.txt new file mode 100644 index 0000000000..e878e3f72e --- /dev/null +++ b/src/binaryen/test/passes/const-hoisting.txt @@ -0,0 +1,630 @@ +(module + (type $0 (func)) + (memory $0 0) + (func $10-of-each (; 0 ;) (type $0) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (block + (set_local $0 + (i32.const -1048577) + ) + (set_local $1 + (i32.const -1048576) + ) + (set_local $2 + (i32.const -8193) + ) + (set_local $3 + (i32.const 8192) + ) + (set_local $4 + (i32.const 1048575) + ) + (set_local $5 + (i32.const 1048576) + ) + ) + (block + (drop + (i32.const 0) + ) + (drop + (i32.const 63) + ) + (drop + (i32.const 64) + ) + (drop + (i32.const 8191) + ) + (drop + (get_local $3) + ) + (drop + (get_local $4) + ) + (drop + (get_local $5) + ) + (drop + (i32.const -64) + ) + (drop + (i32.const -65) + ) + (drop + (i32.const -8192) + ) + (drop + (get_local $2) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (drop + (i32.const 0) + ) + (drop + (i32.const 63) + ) + (drop + (i32.const 64) + ) + (drop + (i32.const 8191) + ) + (drop + (get_local $3) + ) + (drop + (get_local $4) + ) + (drop + (get_local $5) + ) + (drop + (i32.const -64) + ) + (drop + (i32.const -65) + ) + (drop + (i32.const -8192) + ) + (drop + (get_local $2) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (drop + (i32.const 0) + ) + (drop + (i32.const 63) + ) + (drop + (i32.const 64) + ) + (drop + (i32.const 8191) + ) + (drop + (get_local $3) + ) + (drop + (get_local $4) + ) + (drop + (get_local $5) + ) + (drop + (i32.const -64) + ) + (drop + (i32.const -65) + ) + (drop + (i32.const -8192) + ) + (drop + (get_local $2) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (drop + (i32.const 0) + ) + (drop + (i32.const 63) + ) + (drop + (i32.const 64) + ) + (drop + (i32.const 8191) + ) + (drop + (get_local $3) + ) + (drop + (get_local $4) + ) + (drop + (get_local $5) + ) + (drop + (i32.const -64) + ) + (drop + (i32.const -65) + ) + (drop + (i32.const -8192) + ) + (drop + (get_local $2) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (drop + (i32.const 0) + ) + (drop + (i32.const 63) + ) + (drop + (i32.const 64) + ) + (drop + (i32.const 8191) + ) + (drop + (get_local $3) + ) + (drop + (get_local $4) + ) + (drop + (get_local $5) + ) + (drop + (i32.const -64) + ) + (drop + (i32.const -65) + ) + (drop + (i32.const -8192) + ) + (drop + (get_local $2) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (drop + (i32.const 0) + ) + (drop + (i32.const 63) + ) + (drop + (i32.const 64) + ) + (drop + (i32.const 8191) + ) + (drop + (get_local $3) + ) + (drop + (get_local $4) + ) + (drop + (get_local $5) + ) + (drop + (i32.const -64) + ) + (drop + (i32.const -65) + ) + (drop + (i32.const -8192) + ) + (drop + (get_local $2) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (drop + (i32.const 0) + ) + (drop + (i32.const 63) + ) + (drop + (i32.const 64) + ) + (drop + (i32.const 8191) + ) + (drop + (get_local $3) + ) + (drop + (get_local $4) + ) + (drop + (get_local $5) + ) + (drop + (i32.const -64) + ) + (drop + (i32.const -65) + ) + (drop + (i32.const -8192) + ) + (drop + (get_local $2) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (drop + (i32.const 0) + ) + (drop + (i32.const 63) + ) + (drop + (i32.const 64) + ) + (drop + (i32.const 8191) + ) + (drop + (get_local $3) + ) + (drop + (get_local $4) + ) + (drop + (get_local $5) + ) + (drop + (i32.const -64) + ) + (drop + (i32.const -65) + ) + (drop + (i32.const -8192) + ) + (drop + (get_local $2) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (drop + (i32.const 0) + ) + (drop + (i32.const 63) + ) + (drop + (i32.const 64) + ) + (drop + (i32.const 8191) + ) + (drop + (get_local $3) + ) + (drop + (get_local $4) + ) + (drop + (get_local $5) + ) + (drop + (i32.const -64) + ) + (drop + (i32.const -65) + ) + (drop + (i32.const -8192) + ) + (drop + (get_local $2) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (drop + (i32.const 0) + ) + (drop + (i32.const 63) + ) + (drop + (i32.const 64) + ) + (drop + (i32.const 8191) + ) + (drop + (get_local $3) + ) + (drop + (get_local $4) + ) + (drop + (get_local $5) + ) + (drop + (i32.const -64) + ) + (drop + (i32.const -65) + ) + (drop + (i32.const -8192) + ) + (drop + (get_local $2) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + ) + ) + (func $floats-10-times (; 1 ;) (type $0) + (local $0 f32) + (local $1 f64) + (block + (set_local $0 + (f32.const 0) + ) + (set_local $1 + (f64.const 0) + ) + ) + (block + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + (drop + (get_local $0) + ) + (drop + (get_local $1) + ) + ) + ) + (func $too-few (; 2 ;) (type $0) + (drop + (i32.const 8192) + ) + (drop + (i32.const 8192) + ) + (drop + (i32.const 8192) + ) + (drop + (i32.const 8192) + ) + (drop + (i32.const 8192) + ) + ) + (func $just-enough (; 3 ;) (type $0) + (local $0 i32) + (block + (set_local $0 + (i32.const 8192) + ) + ) + (block + (drop + (get_local $0) + ) + (drop + (get_local $0) + ) + (drop + (get_local $0) + ) + (drop + (get_local $0) + ) + (drop + (get_local $0) + ) + (drop + (get_local $0) + ) + ) + ) + (func $too-few-b (; 4 ;) (type $0) + (drop + (i32.const 1048576) + ) + (drop + (i32.const 1048576) + ) + (drop + (i32.const 1048576) + ) + ) + (func $enough-b (; 5 ;) (type $0) + (local $0 i32) + (block + (set_local $0 + (i32.const 1048576) + ) + ) + (block + (drop + (get_local $0) + ) + (drop + (get_local $0) + ) + (drop + (get_local $0) + ) + (drop + (get_local $0) + ) + ) + ) + (func $too-few-c (; 6 ;) (type $0) + (drop + (f32.const 0) + ) + (drop + (f32.const 0) + ) + (drop + (f32.const 0) + ) + ) + (func $enough-c (; 7 ;) (type $0) + (local $0 f32) + (block + (set_local $0 + (f32.const 0) + ) + ) + (block + (drop + (get_local $0) + ) + (drop + (get_local $0) + ) + (drop + (get_local $0) + ) + (drop + (get_local $0) + ) + ) + ) + (func $too-few-d (; 8 ;) (type $0) + (drop + (f64.const 0) + ) + ) + (func $enough-d (; 9 ;) (type $0) + (local $0 f64) + (block + (set_local $0 + (f64.const 0) + ) + ) + (block + (drop + (get_local $0) + ) + (drop + (get_local $0) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/const-hoisting.wast b/src/binaryen/test/passes/const-hoisting.wast new file mode 100644 index 0000000000..66f79bc147 --- /dev/null +++ b/src/binaryen/test/passes/const-hoisting.wast @@ -0,0 +1,201 @@ +(module + (func $10-of-each + (drop (i32.const 0)) ;; 1 byte + (drop (i32.const 63)) ;; 1 byte + (drop (i32.const 64)) ;; 2 bytes + (drop (i32.const 8191)) ;; 2 bytes + (drop (i32.const 8192)) ;; 3 bytes + (drop (i32.const 1048575)) ;; 3 bytes + (drop (i32.const 1048576)) ;; 4 bytes + (drop (i32.const -64)) ;; 1 byte + (drop (i32.const -65)) ;; 2 bytes + (drop (i32.const -8192)) ;; 2 bytes + (drop (i32.const -8193)) ;; 3 bytes + (drop (i32.const -1048576)) ;; 3 bytes + (drop (i32.const -1048577)) ;; 4 bytes + (drop (i32.const 0)) ;; 1 byte + (drop (i32.const 63)) ;; 1 byte + (drop (i32.const 64)) ;; 2 bytes + (drop (i32.const 8191)) ;; 2 bytes + (drop (i32.const 8192)) ;; 3 bytes + (drop (i32.const 1048575)) ;; 3 bytes + (drop (i32.const 1048576)) ;; 4 bytes + (drop (i32.const -64)) ;; 1 byte + (drop (i32.const -65)) ;; 2 bytes + (drop (i32.const -8192)) ;; 2 bytes + (drop (i32.const -8193)) ;; 3 bytes + (drop (i32.const -1048576)) ;; 3 bytes + (drop (i32.const -1048577)) ;; 4 bytes + (drop (i32.const 0)) ;; 1 byte + (drop (i32.const 63)) ;; 1 byte + (drop (i32.const 64)) ;; 2 bytes + (drop (i32.const 8191)) ;; 2 bytes + (drop (i32.const 8192)) ;; 3 bytes + (drop (i32.const 1048575)) ;; 3 bytes + (drop (i32.const 1048576)) ;; 4 bytes + (drop (i32.const -64)) ;; 1 byte + (drop (i32.const -65)) ;; 2 bytes + (drop (i32.const -8192)) ;; 2 bytes + (drop (i32.const -8193)) ;; 3 bytes + (drop (i32.const -1048576)) ;; 3 bytes + (drop (i32.const -1048577)) ;; 4 bytes + (drop (i32.const 0)) ;; 1 byte + (drop (i32.const 63)) ;; 1 byte + (drop (i32.const 64)) ;; 2 bytes + (drop (i32.const 8191)) ;; 2 bytes + (drop (i32.const 8192)) ;; 3 bytes + (drop (i32.const 1048575)) ;; 3 bytes + (drop (i32.const 1048576)) ;; 4 bytes + (drop (i32.const -64)) ;; 1 byte + (drop (i32.const -65)) ;; 2 bytes + (drop (i32.const -8192)) ;; 2 bytes + (drop (i32.const -8193)) ;; 3 bytes + (drop (i32.const -1048576)) ;; 3 bytes + (drop (i32.const -1048577)) ;; 4 bytes + (drop (i32.const 0)) ;; 1 byte + (drop (i32.const 63)) ;; 1 byte + (drop (i32.const 64)) ;; 2 bytes + (drop (i32.const 8191)) ;; 2 bytes + (drop (i32.const 8192)) ;; 3 bytes + (drop (i32.const 1048575)) ;; 3 bytes + (drop (i32.const 1048576)) ;; 4 bytes + (drop (i32.const -64)) ;; 1 byte + (drop (i32.const -65)) ;; 2 bytes + (drop (i32.const -8192)) ;; 2 bytes + (drop (i32.const -8193)) ;; 3 bytes + (drop (i32.const -1048576)) ;; 3 bytes + (drop (i32.const -1048577)) ;; 4 bytes + (drop (i32.const 0)) ;; 1 byte + (drop (i32.const 63)) ;; 1 byte + (drop (i32.const 64)) ;; 2 bytes + (drop (i32.const 8191)) ;; 2 bytes + (drop (i32.const 8192)) ;; 3 bytes + (drop (i32.const 1048575)) ;; 3 bytes + (drop (i32.const 1048576)) ;; 4 bytes + (drop (i32.const -64)) ;; 1 byte + (drop (i32.const -65)) ;; 2 bytes + (drop (i32.const -8192)) ;; 2 bytes + (drop (i32.const -8193)) ;; 3 bytes + (drop (i32.const -1048576)) ;; 3 bytes + (drop (i32.const -1048577)) ;; 4 bytes + (drop (i32.const 0)) ;; 1 byte + (drop (i32.const 63)) ;; 1 byte + (drop (i32.const 64)) ;; 2 bytes + (drop (i32.const 8191)) ;; 2 bytes + (drop (i32.const 8192)) ;; 3 bytes + (drop (i32.const 1048575)) ;; 3 bytes + (drop (i32.const 1048576)) ;; 4 bytes + (drop (i32.const -64)) ;; 1 byte + (drop (i32.const -65)) ;; 2 bytes + (drop (i32.const -8192)) ;; 2 bytes + (drop (i32.const -8193)) ;; 3 bytes + (drop (i32.const -1048576)) ;; 3 bytes + (drop (i32.const -1048577)) ;; 4 bytes + (drop (i32.const 0)) ;; 1 byte + (drop (i32.const 63)) ;; 1 byte + (drop (i32.const 64)) ;; 2 bytes + (drop (i32.const 8191)) ;; 2 bytes + (drop (i32.const 8192)) ;; 3 bytes + (drop (i32.const 1048575)) ;; 3 bytes + (drop (i32.const 1048576)) ;; 4 bytes + (drop (i32.const -64)) ;; 1 byte + (drop (i32.const -65)) ;; 2 bytes + (drop (i32.const -8192)) ;; 2 bytes + (drop (i32.const -8193)) ;; 3 bytes + (drop (i32.const -1048576)) ;; 3 bytes + (drop (i32.const -1048577)) ;; 4 bytes + (drop (i32.const 0)) ;; 1 byte + (drop (i32.const 63)) ;; 1 byte + (drop (i32.const 64)) ;; 2 bytes + (drop (i32.const 8191)) ;; 2 bytes + (drop (i32.const 8192)) ;; 3 bytes + (drop (i32.const 1048575)) ;; 3 bytes + (drop (i32.const 1048576)) ;; 4 bytes + (drop (i32.const -64)) ;; 1 byte + (drop (i32.const -65)) ;; 2 bytes + (drop (i32.const -8192)) ;; 2 bytes + (drop (i32.const -8193)) ;; 3 bytes + (drop (i32.const -1048576)) ;; 3 bytes + (drop (i32.const -1048577)) ;; 4 bytes + (drop (i32.const 0)) ;; 1 byte + (drop (i32.const 63)) ;; 1 byte + (drop (i32.const 64)) ;; 2 bytes + (drop (i32.const 8191)) ;; 2 bytes + (drop (i32.const 8192)) ;; 3 bytes + (drop (i32.const 1048575)) ;; 3 bytes + (drop (i32.const 1048576)) ;; 4 bytes + (drop (i32.const -64)) ;; 1 byte + (drop (i32.const -65)) ;; 2 bytes + (drop (i32.const -8192)) ;; 2 bytes + (drop (i32.const -8193)) ;; 3 bytes + (drop (i32.const -1048576)) ;; 3 bytes + (drop (i32.const -1048577)) ;; 4 bytes + ) + (func $floats-10-times + (drop (f32.const 0)) ;; 4 bytes + (drop (f64.const 0)) ;; 8 bytes + (drop (f32.const 0)) ;; 4 bytes + (drop (f64.const 0)) ;; 8 bytes + (drop (f32.const 0)) ;; 4 bytes + (drop (f64.const 0)) ;; 8 bytes + (drop (f32.const 0)) ;; 4 bytes + (drop (f64.const 0)) ;; 8 bytes + (drop (f32.const 0)) ;; 4 bytes + (drop (f64.const 0)) ;; 8 bytes + (drop (f32.const 0)) ;; 4 bytes + (drop (f64.const 0)) ;; 8 bytes + (drop (f32.const 0)) ;; 4 bytes + (drop (f64.const 0)) ;; 8 bytes + (drop (f32.const 0)) ;; 4 bytes + (drop (f64.const 0)) ;; 8 bytes + (drop (f32.const 0)) ;; 4 bytes + (drop (f64.const 0)) ;; 8 bytes + (drop (f32.const 0)) ;; 4 bytes + (drop (f64.const 0)) ;; 8 bytes + ) + (func $too-few + (drop (i32.const 8192)) ;; 3 bytes, need 6 appearances + (drop (i32.const 8192)) + (drop (i32.const 8192)) + (drop (i32.const 8192)) + (drop (i32.const 8192)) + ) + (func $just-enough + (drop (i32.const 8192)) ;; 3 bytes, need 6 appearances + (drop (i32.const 8192)) + (drop (i32.const 8192)) + (drop (i32.const 8192)) + (drop (i32.const 8192)) + (drop (i32.const 8192)) + ) + (func $too-few-b + (drop (i32.const 1048576)) ;; 4 bytes, need 4 appearances + (drop (i32.const 1048576)) + (drop (i32.const 1048576)) + ) + (func $enough-b + (drop (i32.const 1048576)) ;; 4 bytes, need 4 appearances + (drop (i32.const 1048576)) + (drop (i32.const 1048576)) + (drop (i32.const 1048576)) + ) + (func $too-few-c + (drop (f32.const 0)) ;; 4 bytes, need 4 appearances + (drop (f32.const 0)) + (drop (f32.const 0)) + ) + (func $enough-c + (drop (f32.const 0)) ;; 4 bytes, need 4 appearances + (drop (f32.const 0)) + (drop (f32.const 0)) + (drop (f32.const 0)) + ) + (func $too-few-d + (drop (f64.const 0)) ;; 8 bytes, need 2 appearances + ) + (func $enough-d + (drop (f64.const 0)) ;; 4 bytes, need 4 appearances + (drop (f64.const 0)) + ) +) + diff --git a/src/binaryen/test/passes/dce.txt b/src/binaryen/test/passes/dce.txt new file mode 100644 index 0000000000..17de5f2283 --- /dev/null +++ b/src/binaryen/test/passes/dce.txt @@ -0,0 +1,505 @@ +(module + (type $ii (func (param i32 i32))) + (type $1 (func)) + (type $2 (func (result i32))) + (type $3 (func (param i32) (result i32))) + (type $4 (func (param i64 i64) (result i64))) + (type $5 (func (param f32 i64))) + (type $6 (func (param f32 i64) (result i32))) + (global $x (mut i32) (i32.const 0)) + (table 1 1 anyfunc) + (elem (i32.const 0) $call-me) + (memory $0 10) + (func $call-me (; 0 ;) (type $ii) (param $0 i32) (param $1 i32) + (nop) + ) + (func $code-to-kill (; 1 ;) (type $1) + (local $x i32) + (block $out + (br $out) + ) + (if + (i32.const 0) + (unreachable) + ) + (if + (i32.const 0) + (return) + ) + (block $out4 + (br_table $out4 $out4 $out4 $out4 + (i32.const 4) + ) + ) + (block $out5 + (br_if $out5 + (i32.const 3) + ) + (drop + (i32.const 0) + ) + ) + (if + (i32.const 0) + (if + (i32.const 0) + (unreachable) + (unreachable) + ) + ) + (if + (i32.const 0) + (unreachable) + ) + (if + (i32.const 0) + (unreachable) + ) + (if + (i32.const 0) + (unreachable) + ) + (block $out16 + (block $in + (br_if $out16 + (i32.const 1) + ) + ) + (unreachable) + ) + (if + (i32.const 0) + (block $out18 + (block $in19 + (br_if $in19 + (i32.const 1) + ) + ) + (unreachable) + ) + ) + (block $out20 + (block $in21 + (br_table $out20 $in21 + (i32.const 1) + ) + ) + (unreachable) + ) + (block $out22 + (block $in23 + (br_table $in23 $out22 + (i32.const 1) + ) + ) + (unreachable) + ) + (if + (i32.const 0) + (block $out25 + (block $in26 + (br_table $in26 $in26 + (i32.const 1) + ) + ) + (unreachable) + ) + ) + (if + (i32.const 0) + (block $block15 + (drop + (i32.const 10) + ) + (drop + (i32.const 42) + ) + (unreachable) + ) + ) + (if + (i32.const 0) + (unreachable) + ) + (block $out29 + (block + (br_if $out29 + (i32.const 1) + ) + (unreachable) + ) + ) + (if + (i32.const 0) + (loop $in32 + (br_if $in32 + (i32.const 1) + ) + (unreachable) + ) + ) + (if + (i32.const 1) + (block + (drop + (i32.const 123) + ) + (unreachable) + ) + ) + (if + (i32.const 2) + (unreachable) + ) + (if + (i32.const 3) + (unreachable) + ) + (if + (i32.const -1) + (block + (drop + (i32.const 123) + ) + (drop + (i32.const 456) + ) + (unreachable) + ) + ) + (if + (i32.const -2) + (block + (drop + (i32.const 139) + ) + (unreachable) + ) + ) + (if + (i32.const -3) + (block + (drop + (i32.const 246) + ) + (unreachable) + ) + ) + (if + (i32.const -4) + (unreachable) + ) + (if + (i32.const 11) + (unreachable) + ) + (if + (i32.const 22) + (unreachable) + ) + (if + (i32.const 33) + (block + (drop + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.const 44) + (unreachable) + ) + (if + (i32.const 55) + (unreachable) + ) + (if + (i32.const 66) + (unreachable) + ) + (if + (i32.const 77) + (unreachable) + ) + (if + (i32.const 88) + (block + (drop + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.const 99) + (unreachable) + ) + (if + (i32.const 100) + (block + (drop + (i32.const 123) + ) + (drop + (i32.const 456) + ) + (unreachable) + ) + ) + (if + (i32.const 101) + (block + (drop + (i32.const 123) + ) + (unreachable) + ) + ) + (if + (i32.const 102) + (unreachable) + ) + (drop + (i32.const 1337) + ) + ) + (func $killer (; 2 ;) (type $1) + (unreachable) + ) + (func $target (; 3 ;) (type $1) + (drop + (i32.const 2000) + ) + ) + (func $typed-block-none-then-unreachable (; 4 ;) (type $2) (result i32) + (return + (i32.const 0) + ) + ) + (func $typed-block-remove-br-changes-type (; 5 ;) (type $3) (param $$$0 i32) (result i32) + (block $switch$7 + (block $switch-default$10 + (block $switch-case$9 + (block $switch-case$8 + (br_table $switch-case$9 $switch-case$8 $switch-default$10 + (i32.const -1) + ) + ) + ) + (return + (get_local $$$0) + ) + ) + (return + (get_local $$$0) + ) + ) + ) + (func $global (; 6 ;) (type $1) + (unreachable) + ) + (func $ret (; 7 ;) (type $2) (result i32) + (return + (i32.const 0) + ) + ) + (func $unreachable-br (; 8 ;) (type $2) (result i32) + (block $out (result i32) + (br $out + (i32.const 0) + ) + ) + ) + (func $unreachable-br-loop (; 9 ;) (type $2) (result i32) + (loop $out + (br $out) + ) + ) + (func $unreachable-block-ends-switch (; 10 ;) (type $2) (result i32) + (block $label$3 + (nop) + (unreachable) + ) + ) + (func $unreachable-block-ends-br_if (; 11 ;) (type $1) (result i32) + (block $label$2 + (nop) + (unreachable) + ) + ) + (func $unreachable-brs-3 (; 12 ;) (type $2) (result i32) + (block $label$0 (result i32) + (br $label$0 + (i32.const 18) + ) + ) + ) + (func $unreachable-brs-4 (; 13 ;) (type $3) (param $var$0 i32) (result i32) + (drop + (i32.const 1) + ) + (block + (drop + (i32.const 4104) + ) + (unreachable) + ) + ) + (func $call-unreach (; 14 ;) (type $4) (param $var$0 i64) (param $var$1 i64) (result i64) + (local $2 i64) + (if (result i64) + (i64.eqz + (get_local $var$0) + ) + (block $label$0 (result i64) + (get_local $var$1) + ) + (block + (drop + (i64.sub + (get_local $var$0) + (i64.const 1) + ) + ) + (block + (drop + (block $block (result i64) + (set_local $2 + (get_local $var$0) + ) + (nop) + (get_local $2) + ) + ) + (unreachable) + ) + ) + ) + ) + (func $br-gone-means-block-type-changes-then-refinalize-at-end-is-too-late (; 15 ;) (type $1) (param $var$0 i32) (result i32) + (block $block + (nop) + (unreachable) + ) + ) + (func $br-with-unreachable-value-should-not-give-a-block-a-value (; 16 ;) (type $1) (param $var$0 i32) (result i32) + (block $label$0 (result i32) + (block $block + (drop + (br_if $label$0 + (i32.const 8) + (get_local $var$0) + ) + ) + (unreachable) + ) + ) + ) + (func $replace-br-value-of-i32-with-unreachable (; 17 ;) (type $2) (result i32) + (block $label$1 + (nop) + (unreachable) + ) + ) + (func $shorten-block-requires-sync-refinalize (; 18 ;) (type $ii) (param $var$0 i32) (param $var$1 i32) + (unreachable) + ) + (func $block-with-type-but-is-unreachable (; 19 ;) (type $3) (param $var$0 i32) (result i32) + (block $block + (nop) + (unreachable) + ) + ) + (func $if-with-type-but-is-unreachable (; 20 ;) (type $3) (param $var$0 i32) (result i32) + (if + (get_local $var$0) + (unreachable) + (unreachable) + ) + ) + (func $unreachable-loop (; 21 ;) (type $1) + (unreachable) + ) + (func $br-block-from-unary (; 22 ;) (type $2) (result i32) + (block $label$6 (result i32) + (br $label$6 + (i32.const 8) + ) + ) + ) + (func $replace-unary-with-br-child (; 23 ;) (type $1) + (drop + (block $label$6 (result i32) + (br $label$6 + (i32.const 8) + ) + ) + ) + ) + (func $br_if-unreach-then-br_if-normal (; 24 ;) (type $1) + (block $out + (nop) + (unreachable) + ) + ) + (func $replace-with-unreachable-affects-parent (; 25 ;) (type $5) (param $var$0 f32) (param $var$1 i64) + (drop + (i64.const 0) + ) + (if + (block $block (result i32) + (call $replace-with-unreachable-affects-parent + (f32.const 1) + (i64.const -15917430362925035) + ) + (i32.const 1) + ) + (unreachable) + (unreachable) + ) + ) + (func $replace-block-changes-later-when-if-goes (; 26 ;) (type $1) + (block $top + (set_global $global$0 + (i32.const 0) + ) + (block $inner + (drop + (call $helper + (f32.const 1) + (i64.const -15917430362925035) + ) + ) + (unreachable) + ) + ) + ) + (func $helper (; 27 ;) (type $6) (param $var$0 f32) (param $var$1 i64) (result i32) + (i32.const 0) + ) +) +(module + (type $0 (func)) + (global $global (mut f64) (f64.const 0)) + (memory $0 0) + (func $0 (; 0 ;) (type $0) + (if + (i32.const 0) + (unreachable) + (unreachable) + ) + ) +) +(module + (type $0 (func)) + (memory $0 0) + (func $0 (; 0 ;) (type $0) + (local $local f64) + (if + (i32.const 0) + (unreachable) + (unreachable) + ) + ) +) diff --git a/src/binaryen/test/passes/dce.wast b/src/binaryen/test/passes/dce.wast new file mode 100644 index 0000000000..7050a383f9 --- /dev/null +++ b/src/binaryen/test/passes/dce.wast @@ -0,0 +1,736 @@ +(module + (memory 10) + (type $ii (func (param i32 i32))) + (type $1 (func)) + (table 1 1 anyfunc) + (elem (i32.const 0) $call-me) + (global $x (mut i32) (i32.const 0)) + (func $call-me (type $ii) (param $0 i32) (param $1 i32) + (nop) + ) + (func $code-to-kill (type $1) + (local $x i32) + (block $out + (br $out) + (drop + (i32.const 0) + ) + (if + (i32.const 1) + (drop + (i32.const 2) + ) + ) + (br_table $out $out $out $out + (i32.const 3) + ) + (call $code-to-kill) + ) + (if + (i32.const 0) + (block $out + (unreachable) + (drop + (i32.const 0) + ) + ) + ) + (if + (i32.const 0) + (block $out + (return) + (drop + (i32.const 0) + ) + ) + ) + (block $out + (br_table $out $out $out $out + (i32.const 4) + ) + (drop + (i32.const 0) + ) + ) + (block $out + (br_if $out + (i32.const 3) + ) + (drop + (i32.const 0) + ) + ) + (if + (i32.const 0) + (block $block4 + (if + (i32.const 0) + (block $out + (unreachable) + (drop + (i32.const 0) + ) + ) + (block $out + (unreachable) + (drop + (i32.const 0) + ) + ) + ) + (drop + (i32.const 0) + ) + ) + ) + (if + (i32.const 0) + (drop + (block $out (result i32) + (br $out + (unreachable) + ) + (drop + (i32.const 0) + ) + (unreachable) + ) + ) + ) + (if + (i32.const 0) + (drop + (block $out (result i32) + (br_if $out + (unreachable) + (i32.const 0) + ) + (drop + (i32.const 0) + ) + (unreachable) + ) + ) + ) + (if + (i32.const 0) + (drop + (block $out (result i32) + (br_if $out + (unreachable) + (unreachable) + ) + (drop + (i32.const 0) + ) + (unreachable) + ) + ) + ) + (block $out + (block $in + (br_if $out + (i32.const 1) + ) + ) + (unreachable) + ) + (if + (i32.const 0) + (block $block11 + (block $out + (block $in + (br_if $in + (i32.const 1) + ) + ) + (unreachable) + ) + (drop + (i32.const 10) + ) + ) + ) + (block $out + (block $in + (br_table $out $in + (i32.const 1) + ) + ) + (unreachable) + ) + (block $out + (block $in + (br_table $in $out + (i32.const 1) + ) + ) + (unreachable) + ) + (if + (i32.const 0) + (block $block13 + (block $out + (block $in + (br_table $in $in + (i32.const 1) + ) + ) + (unreachable) + ) + (drop + (i32.const 10) + ) + ) + ) + (if + (i32.const 0) + (block $block15 + (drop + (i32.const 10) + ) + (drop + (i32.const 42) + ) + (unreachable) + (return + (unreachable) + ) + (unreachable) + (return) + ) + ) + (if + (i32.const 0) + (loop $loop-in18 + (unreachable) + ) + ) + (block $out + (loop $in + (br_if $out + (i32.const 1) + ) + (unreachable) + ) + ) + (if + (i32.const 0) + (block $block20 + (loop $in + (br_if $in + (i32.const 1) + ) + (unreachable) + ) + (drop + (i32.const 10) + ) + ) + ) + (if + (i32.const 1) + (call $call-me + (i32.const 123) + (unreachable) + ) + ) + (if + (i32.const 2) + (call $call-me + (unreachable) + (i32.const 0) + ) + ) + (if + (i32.const 3) + (call $call-me + (unreachable) + (unreachable) + ) + ) + (if + (i32.const -1) + (call_indirect (type $ii) + (i32.const 123) + (i32.const 456) + (unreachable) + ) + ) + (if + (i32.const -2) + (call_indirect (type $ii) + (i32.const 139) + (unreachable) + (i32.const 0) + ) + ) + (if + (i32.const -3) + (call_indirect (type $ii) + (i32.const 246) + (unreachable) + (unreachable) + ) + ) + (if + (i32.const -4) + (call_indirect (type $ii) + (unreachable) + (unreachable) + (unreachable) + ) + ) + (if + (i32.const 11) + (set_local $x + (unreachable) + ) + ) + (if + (i32.const 22) + (drop + (i32.load + (unreachable) + ) + ) + ) + (if + (i32.const 33) + (i32.store + (i32.const 0) + (unreachable) + ) + ) + (if + (i32.const 44) + (i32.store + (unreachable) + (i32.const 0) + ) + ) + (if + (i32.const 55) + (i32.store + (unreachable) + (unreachable) + ) + ) + (if + (i32.const 66) + (drop + (i32.eqz + (unreachable) + ) + ) + ) + (if + (i32.const 77) + (drop + (i32.add + (unreachable) + (i32.const 0) + ) + ) + ) + (if + (i32.const 88) + (drop + (i32.add + (i32.const 0) + (unreachable) + ) + ) + ) + (if + (i32.const 99) + (i32.add + (unreachable) + (unreachable) + ) + ) + (if + (i32.const 100) + (drop + (select + (i32.const 123) + (i32.const 456) + (unreachable) + ) + ) + ) + (if + (i32.const 101) + (drop + (select + (i32.const 123) + (unreachable) + (i32.const 456) + ) + ) + ) + (if + (i32.const 102) + (drop + (select + (unreachable) + (i32.const 123) + (i32.const 456) + ) + ) + ) + (drop + (i32.const 1337) + ) + ) + (func $killer (type $1) + (unreachable) + (drop + (i32.const 1000) + ) + ) + (func $target (type $1) + (drop + (i32.const 2000) + ) + ) + (func $typed-block-none-then-unreachable (result i32) + (block $top-typed (result i32) + (block $switch$0 ;; this looks like it can be broken to, so it gets type 'none' + (return + (i32.const 0) + ) + (br $switch$0) ;; this is not reachable, so dce cleans it up, changing $switch$0's type + ) + (return ;; and this is cleaned up as well, leaving $top-typed in need of a type change + (i32.const 1) + ) + ) + ) + (func $typed-block-remove-br-changes-type (param $$$0 i32) (result i32) + (block $switch$7 + (block $switch-default$10 + (block $switch-case$9 + (block $switch-case$8 + (br_table $switch-case$9 $switch-case$8 $switch-default$10 + (i32.const -1) + ) + ) + ) + (return + (get_local $$$0) + ) + (br $switch$7) + ) + (return + (get_local $$$0) + ) + ) + (return + (i32.const 0) + ) + ) + (func $global + (unreachable) + (drop (get_global $x)) + (set_global $x (i32.const 1)) + ) + (func $ret (result i32) + (return + (i32.const 0) + ) + (nop) + (i32.const 0) + ) + (func $unreachable-br (result i32) + (block $out (result i32) + (br $out + (br $out (i32.const 0)) + ) + ) + ) + (func $unreachable-br-loop (result i32) + (loop $out + (br $out) + ) + ) + (func $unreachable-block-ends-switch (result i32) + (block $label$0 (result i32) + (block $label$3 + (nop) + (br_table $label$3 + (unreachable) + ) + (unreachable) + ) + (i32.const 19) + ) + ) + (func $unreachable-block-ends-br_if (type $1) (result i32) + (block $label$0 (result i32) + (block $label$2 + (nop) + (br_if $label$2 + (unreachable) + ) + (unreachable) + ) + (i32.const 19) + ) + ) + (func $unreachable-brs-3 (result i32) + (block $label$0 (result i32) + (br $label$0 + (grow_memory + (br $label$0 + (i32.const 18) + ) + ) + ) + (i32.const 21) + ) + ) + (func $unreachable-brs-4 (param $var$0 i32) (result i32) + (i32.add + (i32.const 1) + (block $label$0 (result i32) + (br $label$0 + (block $label$1 (result i32) ;; this block is declared i32, but we can see it is unreachable + (drop + (br_if $label$0 + (i32.const 4104) + (unreachable) + ) + ) + (i32.const 4) + ) + ) + (i32.const 16) + ) + ) + ) + (func $call-unreach (param $var$0 i64) (param $var$1 i64) (result i64) + (local $2 i64) + (if (result i64) + (i64.eqz + (get_local $var$0) + ) + (block $label$0 (result i64) + (get_local $var$1) + ) + (block $label$1 (result i64) + (call $call-unreach + (i64.sub + (get_local $var$0) + (i64.const 1) + ) + (i64.mul + (block (result i64) + (set_local $2 + (get_local $var$0) + ) + (nop) + (get_local $2) + ) + (unreachable) + ) + ) + ) + ) + ) + (func $br-gone-means-block-type-changes-then-refinalize-at-end-is-too-late (type $1) (param $var$0 i32) (result i32) + (block $label$0 (result i32) + (br $label$0 + (block (result i32) + (nop) + (drop + (br_if $label$0 + (unreachable) + (get_local $var$0) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (func $br-with-unreachable-value-should-not-give-a-block-a-value (type $1) (param $var$0 i32) (result i32) + (block $label$0 (result i32) + (br $label$0 + (block (result i32) ;; turns into unreachable when refinalized + (drop + (br_if $label$0 + (i32.const 8) + (get_local $var$0) + ) + ) + (unreachable) + ) + ) + (i32.const 16) + ) + ) + (func $replace-br-value-of-i32-with-unreachable (result i32) + (block $label$0 (result i32) + (br $label$0 + (block $label$1 (result i32) + (nop) + (unreachable) + ) + ) + ) + ) + (func $shorten-block-requires-sync-refinalize (param $var$0 i32) (param $var$1 i32) + (block $label$0 + (unreachable) + (if + (unreachable) + (br_if $label$0 + (get_local $var$1) + ) + ) + ) + ) + (func $block-with-type-but-is-unreachable (param $var$0 i32) (result i32) + (block $label$0 (result i32) + (br $label$0 + (block $block (result i32) + (nop) + (unreachable) + ) + ) + ) + ) + (func $if-with-type-but-is-unreachable (param $var$0 i32) (result i32) + (block $label$0 (result i32) + (br $label$0 + (if (result i32) + (get_local $var$0) + (unreachable) + (unreachable) + ) + ) + ) + ) + (func $unreachable-loop + (loop $label$2 + (unreachable) + (br $label$2) + ) + ) + (func $br-block-from-unary (result i32) + (block $label$6 (result i32) + (i32.ctz + (block $label$7 (result i32) + (br $label$6 + (i32.const 8) + ) + ) + ) + ) + ) + (func $replace-unary-with-br-child + (drop + (block $label$6 (result i32) + (i32.ctz + (br $label$6 + (i32.const 8) + ) + ) + ) + ) + ) + (func $br_if-unreach-then-br_if-normal + (block $out + (nop) + (br_if $out + (unreachable) + ) + (br_if $out + (i32.const 1) + ) + ) + ) + (func $replace-with-unreachable-affects-parent (param $var$0 f32) (param $var$1 i64) + (block $top + (drop + (f32.load offset=4 + (i64.ne + (i64.const 0) + (if (result i64) + (block (result i32) + (call $replace-with-unreachable-affects-parent + (f32.const 1) + (i64.const -15917430362925035) + ) + (i32.const 1) + ) + (unreachable) + (unreachable) + ) + ) + ) + ) + (nop) ;; this is not reachable due to the above code, so we replace it with unreachable. type should go to parent + ) + ) + (func $replace-block-changes-later-when-if-goes + (block $top ;; and so should this + (set_global $global$0 + (i32.const 0) + ) + (drop + (f32.load offset=4 + (i64.ne + (block $inner (result i64) ;; this becomes unreachable + (drop + (call $helper + (f32.const 1) + (i64.const -15917430362925035) + ) + ) + (unreachable) + ) + (i64.const 0) + ) + ) + ) + (if + (i32.load16_s offset=22 align=1 + (i32.const 0) + ) + (br $top) ;; this keeps the block none after the inner block gets unreachable. but it will vanish into unreachable itself + (unreachable) + ) + ) + ) + (func $helper (param $var$0 f32) (param $var$1 i64) (result i32) + (i32.const 0) + ) +) +;; if goes to unreachable, need to propagate that up to the set_global +(module + (global $global (mut f64) (f64.const 0)) + (func $0 + (set_global $global + (if (result f64) + (i32.const 0) + (unreachable) + (unreachable) + ) + ) + ) +) +(module + (func $0 + (local $local f64) + (set_local $local + (if (result f64) + (i32.const 0) + (unreachable) + (unreachable) + ) + ) + ) +) + diff --git a/src/binaryen/test/passes/dce_vacuum.bin.txt b/src/binaryen/test/passes/dce_vacuum.bin.txt new file mode 100644 index 0000000000..8e41656b4c --- /dev/null +++ b/src/binaryen/test/passes/dce_vacuum.bin.txt @@ -0,0 +1,99 @@ +(module + (type $0 (func (param f32 f32) (result f32))) + (type $1 (func (param f64 f64) (result f64))) + (memory $0 0) + (export "f32.compute_radix" (func $0)) + (export "f64.compute_radix" (func $1)) + (func $0 (; 0 ;) (type $0) (param $var$0 f32) (param $var$1 f32) (result f32) + (block $label$1 + (loop $label$2 + (br_if $label$2 + (f32.eq + (f32.add + (f32.sub + (f32.add + (tee_local $var$0 + (f32.add + (get_local $var$0) + (get_local $var$0) + ) + ) + (f32.const 1) + ) + (get_local $var$0) + ) + (f32.const -1) + ) + (f32.const 0) + ) + ) + ) + (block + (drop + (call $0 + (f32.add + (get_local $var$0) + (tee_local $var$1 + (f32.add + (get_local $var$1) + (f32.const 1) + ) + ) + ) + (get_local $var$0) + ) + ) + (unreachable) + ) + ) + ) + (func $1 (; 1 ;) (type $1) (param $var$0 f64) (param $var$1 f64) (result f64) + (block $label$1 (result f64) + (loop $label$2 + (br_if $label$2 + (f64.eq + (f64.add + (f64.sub + (f64.add + (tee_local $var$0 + (f64.add + (get_local $var$0) + (get_local $var$0) + ) + ) + (f64.const 1) + ) + (get_local $var$0) + ) + (f64.const -1) + ) + (f64.const 0) + ) + ) + ) + (loop $label$3 + (br_if $label$3 + (f64.ne + (f64.sub + (f64.sub + (f64.add + (get_local $var$0) + (tee_local $var$1 + (f64.add + (get_local $var$1) + (f64.const 1) + ) + ) + ) + (get_local $var$0) + ) + (get_local $var$1) + ) + (f64.const 0) + ) + ) + ) + (get_local $var$1) + ) + ) +) diff --git a/src/binaryen/test/passes/dce_vacuum.txt b/src/binaryen/test/passes/dce_vacuum.txt new file mode 100644 index 0000000000..6ee0a78762 --- /dev/null +++ b/src/binaryen/test/passes/dce_vacuum.txt @@ -0,0 +1,26 @@ +(module + (type $0 (func (result i32))) + (type $1 (func (param f32 f32) (result f32))) + (type $2 (func (param i64) (result i64))) + (memory $0 0) + (func $__Z12serveroptionPc (; 0 ;) (type $0) (result i32) + (return + (i32.const 0) + ) + ) + (func $drop-unreachable (; 1 ;) (type $1) (param $var$0 f32) (param $var$1 f32) (result f32) + (unreachable) + ) + (func $set-unreachable (; 2 ;) (type $2) (param $var$0 i64) (result i64) + (local $var$1 i64) + (local $var$2 i64) + (if + (i64.eq + (get_local $var$1) + (i64.const 0) + ) + (unreachable) + (unreachable) + ) + ) +) diff --git a/src/binaryen/test/passes/dce_vacuum.wasm b/src/binaryen/test/passes/dce_vacuum.wasm new file mode 100644 index 0000000000000000000000000000000000000000..5fa1892bda19a6266871f9b02deb63d116962b26 GIT binary patch literal 260 zcmZQbEY4+QU|?YEZD?pbDC zXWyw#(m<1o10VbCk8g%y7n0iy0RTU%sseukSh5OM&ax9M8DPN#b4F;HsUo*!3EhcS zKDWJqLOROT-blYbG{eU0`(+v}ZmyF>G(SE97=Y6gz&@C9LJR;W-It9;JrO6aV{%^bDQ?of@Nf30lIN1DPE!)Q?3;&z< zCL=|`k7Y%SaAgQz42g{)d1=UDX}&AwF3a1PAo%I`*mHo7IMious4n (none.const ?) +[fuzz-exec] note result: $func_1 => (none.const ?) +[fuzz-exec] 2 results noted +(module + (type $0 (func (result i64))) + (type $1 (func (result i32))) + (memory $0 1 1) + (export "func_0" (func $func_0)) + (export "func_1" (func $func_1)) + (func $func_0 (; 0 ;) (type $0) (result i64) + (block $label$0 (result i64) + (br_if $label$0 + (i64.const 1234) + (i32.load16_s offset=22 align=1 + (i32.const -1) + ) + ) + ) + ) + (func $func_1 (; 1 ;) (type $1) (result i32) + (i32.load16_s offset=22 align=1 + (i32.const -1) + ) + ) +) +[fuzz-exec] note result: $func_0 => (none.const ?) +[fuzz-exec] note result: $func_1 => (none.const ?) +[fuzz-exec] 2 results noted +[fuzz-exec] comparing $func_0 +[fuzz-exec] comparing $func_1 +[fuzz-exec] 2 results match diff --git a/src/binaryen/test/passes/fuzz-exec_O.wast b/src/binaryen/test/passes/fuzz-exec_O.wast new file mode 100644 index 0000000000..3d03de7147 --- /dev/null +++ b/src/binaryen/test/passes/fuzz-exec_O.wast @@ -0,0 +1,23 @@ +(module + (memory $0 1 1) + (export "func_0" (func $func_0)) + (export "func_1" (func $func_1)) + (func $func_0 (result i64) + (block $label$0 (result i64) + (loop $label$1 (result i64) + (br_if $label$0 + (i64.const 1234) + (i32.load16_s offset=22 align=1 + (i32.const -1) + ) + ) + ) + ) + ) + (func $func_1 (result i32) + (i32.load16_s offset=22 align=1 + (i32.const -1) + ) + ) +) + diff --git a/src/binaryen/test/passes/inlining-optimizing.txt b/src/binaryen/test/passes/inlining-optimizing.txt new file mode 100644 index 0000000000..e018827160 --- /dev/null +++ b/src/binaryen/test/passes/inlining-optimizing.txt @@ -0,0 +1,55 @@ +(module + (type $0 (func)) + (type $1 (func (result i32))) + (type $2 (func (result f64))) + (type $3 (func (param f32 i64))) + (table 1 1 anyfunc) + (elem (i32.const 0) $tabled) + (memory $0 0) + (export "user" (func $user)) + (export "exported" (func $exported)) + (func $user (; 0 ;) (type $0) + (call $exported) + (call $tabled) + (call $multi) + (call $multi) + ) + (func $exported (; 1 ;) (type $0) + (nop) + ) + (func $recursive (; 2 ;) (type $0) + (call $recursive) + ) + (func $tabled (; 3 ;) (type $0) + (nop) + ) + (func $cycle1 (; 4 ;) (type $0) + (call $cycle2) + ) + (func $cycle2 (; 5 ;) (type $0) + (call $cycle1) + ) + (func $multi (; 6 ;) (type $0) + (nop) + ) +) +(module + (type $0 (func (result i32))) + (type $1 (func)) + (memory $0 0) + (func $main (; 0 ;) (type $0) (result i32) + (unreachable) + ) +) +(module + (type $0 (func (result i32))) + (type $1 (func (result i64))) + (memory $0 (shared 1 1)) + (func $1 (; 0 ;) (type $1) (result i64) + (i32.atomic.store16 + (i32.const 0) + (i32.const 0) + ) + (i64.const 0) + ) +) diff --git a/src/binaryen/test/passes/inlining-optimizing.wast b/src/binaryen/test/passes/inlining-optimizing.wast new file mode 100644 index 0000000000..aac4706fea --- /dev/null +++ b/src/binaryen/test/passes/inlining-optimizing.wast @@ -0,0 +1,103 @@ +(module + (table 1 1 anyfunc) + (elem (i32.const 0) $tabled) + (func $user (export "user") + (local $x i32) + (local $y f64) + (call $exported) + (call $tabled) + (call $multi) + (call $multi) + (call $ok) + (drop (call $int)) + (drop (call $double)) + (set_local $x (call $int2)) + (set_local $y (call $double2)) + (call $with-local) + (call $with-local2) + (drop (call $return)) + (call $multipass) + (call $param (f32.const 12.34) (i64.const 890005350012)) + ) + (func $exported (export "exported") + (nop) + ) + (func $recursive + (call $recursive) + ) + (func $tabled + (nop) + ) + (func $cycle1 + (call $cycle2) + ) + (func $cycle2 + (call $cycle1) + ) + (func $multi + (nop) + ) + (func $ok + (drop (i32.const 1)) + ) + (func $int (result i32) + (i32.const 2) + ) + (func $double (result f64) + (f64.const 3.14159) + ) + (func $int2 (result i32) + (i32.const 112) + ) + (func $double2 (result f64) + (f64.const 113.14159) + ) + (func $with-local + (local $x f32) + (set_local $x (f32.const 2.141828)) + ) + (func $with-local2 + (local $y i64) + (set_local $y (i64.const 4)) + ) + (func $return (result i32) + (return (i32.const 5)) + ) + (func $multipass + (call $multipass2) + ) + (func $multipass2 + (drop (i32.const 6)) + ) + (func $param (param $x f32) (param $y i64) + (local $z f32) + (drop (get_local $x)) + (drop (get_local $y)) + (drop (get_local $z)) + ) +) +(module + (func $main (result i32) + (call $func_51) + (i32.const 0) + ) + (func $func_51 + (unreachable) ;; void function but having unreachable body, when inlined, type must be fixed + ) +) +(module + (memory $0 (shared 1 1)) + (func $0 (result i32) + (i32.atomic.store16 + (i32.const 0) + (i32.const 0) + ) + (i32.const 1) + ) + (func $1 (result i64) + (drop + (call $0) + ) + (i64.const 0) + ) +) diff --git a/src/binaryen/test/passes/inlining-optimizing_optimize-level=3.txt b/src/binaryen/test/passes/inlining-optimizing_optimize-level=3.txt new file mode 100644 index 0000000000..1bc6fe7427 --- /dev/null +++ b/src/binaryen/test/passes/inlining-optimizing_optimize-level=3.txt @@ -0,0 +1,15793 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $7 (func (param f64 i32) (result f64))) + (type $8 (func (param f64) (result i32))) + (type $9 (func (param i32 i32 i32 i32 i32) (result i32))) + (type $10 (func (param i32 i32 i32))) + (type $11 (func (param i32 i32 i32 i32 i32))) + (type $12 (func (param i32 i32 i32 i32) (result i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "abort" (func $abort)) + (import "env" "nullFunc_ii" (func $nullFunc_ii (param i32))) + (import "env" "nullFunc_iiii" (func $nullFunc_iiii (param i32))) + (import "env" "nullFunc_vi" (func $nullFunc_vi (param i32))) + (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) + (import "env" "___lock" (func $___lock (param i32))) + (import "env" "_pthread_self" (func $_pthread_self (result i32))) + (import "env" "_abort" (func $_abort)) + (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) + (import "env" "_sbrk" (func $_sbrk (param i32) (result i32))) + (import "env" "_time" (func $_time (param i32) (result i32))) + (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $___unlock (param i32))) + (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) + (import "env" "_sysconf" (func $_sysconf (param i32) (result i32))) + (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 18 18 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (elem (get_global $tableBase) $b0 $___stdio_close $b1 $b1 $___stdout_write $___stdio_seek $___stdio_write $b1 $b1 $b1 $b2 $b2 $b2 $b2 $b2 $_cleanup $b2 $b2) + (data (i32.const 1024) "emcc_hello_world.asm.js") + (export "_i64Subtract" (func $_i64Subtract)) + (export "_free" (func $_free)) + (export "_main" (func $_main)) + (export "_i64Add" (func $_i64Add)) + (export "_memset" (func $_memset)) + (export "_malloc" (func $_malloc)) + (export "_memcpy" (func $_memcpy)) + (export "_bitshift64Lshr" (func $_bitshift64Lshr)) + (export "_fflush" (func $_fflush)) + (export "___errno_location" (func $___errno_location)) + (export "_bitshift64Shl" (func $_bitshift64Shl)) + (export "runPostSets" (func $runPostSets)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackSave" (func $stackSave)) + (export "stackRestore" (func $stackRestore)) + (export "establishStackSpace" (func $establishStackSpace)) + (export "setThrew" (func $setThrew)) + (export "setTempRet0" (func $setTempRet0)) + (export "getTempRet0" (func $getTempRet0)) + (export "dynCall_ii" (func $dynCall_ii)) + (export "dynCall_iiii" (func $dynCall_iiii)) + (export "dynCall_vi" (func $dynCall_vi)) + (export "___udivmoddi4" (func $___udivmoddi4)) + (func $stackAlloc (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $0) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (get_local $1) + ) + (func $stackSave (; 19 ;) (type $FUNCSIG$i) (result i32) + (get_global $STACKTOP) + ) + (func $stackRestore (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $establishStackSpace (; 21 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (set_global $STACKTOP + (get_local $0) + ) + (set_global $STACK_MAX + (get_local $1) + ) + ) + (func $setThrew (; 22 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (if + (i32.eqz + (get_global $__THREW__) + ) + (block $block + (set_global $__THREW__ + (get_local $0) + ) + (set_global $threwValue + (get_local $1) + ) + ) + ) + ) + (func $setTempRet0 (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) + (set_global $tempRet0 + (get_local $0) + ) + ) + (func $getTempRet0 (; 24 ;) (type $FUNCSIG$i) (result i32) + (get_global $tempRet0) + ) + (func $_main (; 25 ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (drop + (call $_printf + (i32.const 672) + (get_local $0) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (i32.const 0) + ) + (func $_frexp (; 26 ;) (type $7) (param $0 f64) (param $1 i32) (result f64) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (f64.store + (get_global $tempDoublePtr) + (get_local $0) + ) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default + (tee_local $3 + (i32.and + (tee_local $3 + (call $_bitshift64Lshr + (tee_local $2 + (i32.load + (get_global $tempDoublePtr) + ) + ) + (tee_local $4 + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + ) + (i32.const 52) + ) + ) + (i32.const 2047) + ) + ) + ) + ) + (i32.store + (get_local $1) + (tee_local $2 + (if (result i32) + (f64.ne + (get_local $0) + (f64.const 0) + ) + (block $block (result i32) + (set_local $0 + (call $_frexp + (f64.mul + (get_local $0) + (f64.const 18446744073709551615) + ) + (get_local $1) + ) + ) + (i32.add + (i32.load + (get_local $1) + ) + (i32.const -64) + ) + ) + (i32.const 0) + ) + ) + ) + (br $switch) + ) + (br $switch) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $3) + (i32.const -1022) + ) + ) + (i32.store + (get_global $tempDoublePtr) + (get_local $2) + ) + (i32.store offset=4 + (get_global $tempDoublePtr) + (i32.or + (i32.and + (get_local $4) + (i32.const -2146435073) + ) + (i32.const 1071644672) + ) + ) + (set_local $0 + (f64.load + (get_global $tempDoublePtr) + ) + ) + ) + (get_local $0) + ) + (func $_strerror (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (i32.const 0) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in + (br_if $__rjti$0 + (i32.eq + (i32.load8_u offset=687 + (get_local $1) + ) + (get_local $0) + ) + ) + (br_if $while-in + (i32.ne + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 87) + ) + ) + (set_local $1 + (i32.const 87) + ) + (br $__rjti$1) + ) + ) + (br_if $__rjti$1 + (get_local $1) + ) + (set_local $0 + (i32.const 775) + ) + (br $__rjto$1) + ) + (set_local $0 + (i32.const 775) + ) + (loop $while-in1 + (loop $while-in3 + (set_local $2 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (if + (i32.load8_s + (get_local $0) + ) + (block $block + (set_local $0 + (get_local $2) + ) + (br $while-in3) + ) + (set_local $0 + (get_local $2) + ) + ) + ) + (br_if $while-in1 + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + ) + ) + ) + (get_local $0) + ) + (func $___errno_location (; 28 ;) (type $FUNCSIG$i) (result i32) + (if (result i32) + (i32.load + (i32.const 16) + ) + (i32.load offset=60 + (call $_pthread_self) + ) + (i32.const 60) + ) + ) + (func $___stdio_close (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (i32.store + (tee_local $2 + (get_local $1) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (set_local $0 + (call $___syscall_ret + (call $___syscall6 + (i32.const 6) + (get_local $2) + ) + ) + ) + (set_global $STACKTOP + (get_local $1) + ) + (get_local $0) + ) + (func $___stdout_write (; 30 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 80) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $3 + (get_local $4) + ) + (set_local $5 + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + (i32.store offset=36 + (get_local $0) + (i32.const 4) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 64) + ) + ) + (block $block + (i32.store + (get_local $3) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 21505) + ) + (i32.store offset=8 + (get_local $3) + (get_local $5) + ) + (if + (call $___syscall54 + (i32.const 54) + (get_local $3) + ) + (i32.store8 offset=75 + (get_local $0) + (i32.const -1) + ) + ) + ) + ) + (set_local $0 + (call $___stdio_write + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $___stdio_seek (; 31 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (i32.store + (tee_local $3 + (get_local $4) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + (i32.store offset=16 + (get_local $3) + (get_local $2) + ) + (set_local $0 + (if (result i32) + (i32.lt_s + (call $___syscall_ret + (call $___syscall140 + (i32.const 140) + (get_local $3) + ) + ) + (i32.const 0) + ) + (block $block (result i32) + (i32.store + (get_local $0) + (i32.const -1) + ) + (i32.const -1) + ) + (i32.load + (get_local $0) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $_fflush (; 32 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (block $do-once + (if + (get_local $0) + (block + (if + (i32.le_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (block + (set_local $0 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (br $do-once) + ) + ) + (set_local $1 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (set_local $0 + (if (result i32) + (tee_local $2 + (i32.eqz + (i32.const 0) + ) + ) + (get_local $1) + (get_local $1) + ) + ) + ) + (block + (set_local $0 + (if (result i32) + (i32.load + (i32.const 12) + ) + (call $_fflush + (i32.load + (i32.const 12) + ) + ) + (i32.const 0) + ) + ) + (call $___lock + (i32.const 44) + ) + (if + (tee_local $1 + (i32.load + (i32.const 40) + ) + ) + (loop $while-in + (set_local $2 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (get_local $1) + ) + (i32.const -1) + ) + (i32.const 0) + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.load offset=20 + (get_local $1) + ) + (i32.load offset=28 + (get_local $1) + ) + ) + (set_local $0 + (i32.or + (call $___fflush_unlocked + (get_local $1) + ) + (get_local $0) + ) + ) + ) + (drop + (get_local $2) + ) + (br_if $while-in + (tee_local $1 + (i32.load offset=56 + (get_local $1) + ) + ) + ) + ) + ) + (call $___unlock + (i32.const 44) + ) + ) + ) + ) + (get_local $0) + ) + (func $_printf (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (set_local $2 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (i32.store + (tee_local $3 + (get_local $2) + ) + (get_local $1) + ) + (set_local $0 + (call $_vfprintf + (i32.load + (i32.const 8) + ) + (get_local $0) + (get_local $3) + ) + ) + (set_global $STACKTOP + (get_local $2) + ) + (get_local $0) + ) + (func $___stdio_write (; 34 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $8 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $9 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (set_local $10 + (get_local $8) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $8) + (i32.const 32) + ) + ) + (tee_local $3 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $4) + (tee_local $3 + (i32.sub + (i32.load + (tee_local $11 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (get_local $3) + ) + ) + ) + (i32.store offset=8 + (get_local $4) + (get_local $1) + ) + (i32.store offset=12 + (get_local $4) + (get_local $2) + ) + (set_local $13 + (i32.add + (get_local $0) + (i32.const 60) + ) + ) + (set_local $14 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (set_local $1 + (get_local $4) + ) + (set_local $4 + (i32.const 2) + ) + (set_local $12 + (i32.add + (get_local $3) + (get_local $2) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in + (if + (i32.load + (i32.const 16) + ) + (block $block + (call $_pthread_cleanup_push + (i32.const 5) + (get_local $0) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $10) + (get_local $1) + ) + (i32.store offset=8 + (get_local $10) + (get_local $4) + ) + (set_local $3 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $10) + ) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + ) + (block $block14 + (i32.store + (get_local $9) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $9) + (get_local $1) + ) + (i32.store offset=8 + (get_local $9) + (get_local $4) + ) + (set_local $3 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $9) + ) + ) + ) + ) + ) + (br_if $__rjti$0 + (i32.eq + (get_local $12) + (get_local $3) + ) + ) + (br_if $__rjti$1 + (i32.lt_s + (get_local $3) + (i32.const 0) + ) + ) + (set_local $5 + (if (result i32) + (i32.gt_u + (get_local $3) + (tee_local $5 + (i32.load offset=4 + (get_local $1) + ) + ) + ) + (block $block16 (result i32) + (i32.store + (get_local $6) + (tee_local $7 + (i32.load + (get_local $14) + ) + ) + ) + (i32.store + (get_local $11) + (get_local $7) + ) + (set_local $7 + (i32.load offset=12 + (get_local $1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const -1) + ) + ) + (i32.sub + (get_local $3) + (get_local $5) + ) + ) + (block $block17 (result i32) + (if + (i32.eq + (get_local $4) + (i32.const 2) + ) + (block $block19 + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (get_local $3) + ) + ) + (set_local $7 + (get_local $5) + ) + (set_local $4 + (i32.const 2) + ) + ) + (set_local $7 + (get_local $5) + ) + ) + (get_local $3) + ) + ) + ) + (i32.store + (get_local $1) + (i32.add + (i32.load + (get_local $1) + ) + (get_local $5) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.sub + (get_local $7) + (get_local $5) + ) + ) + (set_local $12 + (i32.sub + (get_local $12) + (get_local $3) + ) + ) + (br $while-in) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (tee_local $1 + (i32.load + (get_local $14) + ) + ) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.store + (get_local $6) + (get_local $1) + ) + (i32.store + (get_local $11) + (get_local $1) + ) + (br $__rjto$1) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (set_local $2 + (if (result i32) + (i32.eq + (get_local $4) + (i32.const 2) + ) + (i32.const 0) + (i32.sub + (get_local $2) + (i32.load offset=4 + (get_local $1) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $8) + ) + (get_local $2) + ) + (func $_vfprintf (; 35 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 224) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $5 + (i32.add + (get_local $4) + (i32.const 120) + ) + ) + (set_local $7 + (get_local $4) + ) + (set_local $6 + (i32.add + (get_local $4) + (i32.const 136) + ) + ) + (set_local $9 + (i32.add + (tee_local $3 + (tee_local $8 + (i32.add + (get_local $4) + (i32.const 80) + ) + ) + ) + (i32.const 40) + ) + ) + (loop $do-in + (i32.store + (get_local $3) + (i32.const 0) + ) + (br_if $do-in + (i32.lt_s + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (get_local $9) + ) + ) + ) + (i32.store + (get_local $5) + (i32.load + (get_local $2) + ) + ) + (set_local $0 + (if (result i32) + (i32.lt_s + (call $_printf_core + (i32.const 0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + (i32.const 0) + ) + (i32.const -1) + (block (result i32) + (set_local $14 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (i32.const 0) + (i32.const 0) + ) + ) + (set_local $10 + (i32.load + (get_local $0) + ) + ) + (if + (i32.lt_s + (i32.load8_s offset=74 + (get_local $0) + ) + (i32.const 1) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $10) + (i32.const -33) + ) + ) + ) + (if + (i32.load + (tee_local $11 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + ) + (set_local $1 + (call $_printf_core + (get_local $0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + ) + (block + (set_local $13 + (i32.load + (tee_local $12 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + ) + ) + (i32.store + (get_local $12) + (get_local $6) + ) + (i32.store + (tee_local $9 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + (get_local $6) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (get_local $6) + ) + (i32.store + (get_local $11) + (i32.const 80) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (i32.add + (get_local $6) + (i32.const 80) + ) + ) + (set_local $1 + (call $_printf_core + (get_local $0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + ) + (if + (get_local $13) + (block + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (set_local $1 + (select + (get_local $1) + (i32.const -1) + (i32.load + (get_local $3) + ) + ) + ) + (i32.store + (get_local $12) + (get_local $13) + ) + (i32.store + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $9) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + ) + ) + ) + ) + (i32.store + (get_local $0) + (i32.or + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.and + (get_local $10) + (i32.const 32) + ) + ) + ) + (drop + (get_local $14) + ) + (select + (i32.const -1) + (get_local $1) + (i32.and + (get_local $2) + (i32.const 32) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $___fwritex (; 36 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (block $label$break$L5 + (block $__rjti$0 + (br_if $__rjti$0 + (tee_local $3 + (i32.load + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + ) + (if + (call $___towrite + (get_local $2) + ) + (set_local $3 + (i32.const 0) + ) + (block $block + (set_local $3 + (i32.load + (get_local $4) + ) + ) + (br $__rjti$0) + ) + ) + (br $label$break$L5) + ) + (if + (i32.lt_u + (i32.sub + (get_local $3) + (tee_local $4 + (i32.load + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 20) + ) + ) + ) + ) + ) + (get_local $1) + ) + (block $block30 + (set_local $3 + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (br $label$break$L5) + ) + ) + (set_local $2 + (block $label$break$L10 (result i32) + (if (result i32) + (i32.gt_s + (i32.load8_s offset=75 + (get_local $2) + ) + (i32.const -1) + ) + (block $block32 (result i32) + (set_local $3 + (get_local $1) + ) + (loop $while-in + (drop + (br_if $label$break$L10 + (i32.const 0) + (i32.eqz + (get_local $3) + ) + ) + ) + (if + (i32.ne + (i32.load8_s + (i32.add + (get_local $0) + (tee_local $6 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + (i32.const 10) + ) + (block $block34 + (set_local $3 + (get_local $6) + ) + (br $while-in) + ) + ) + ) + (br_if $label$break$L5 + (i32.lt_u + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + (get_local $3) + ) + ) + (set_local $4 + (i32.load + (get_local $5) + ) + ) + (set_local $1 + (i32.sub + (get_local $1) + (get_local $3) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (get_local $3) + ) + ) + (get_local $3) + ) + (i32.const 0) + ) + ) + ) + (drop + (call $_memcpy + (get_local $4) + (get_local $0) + (get_local $1) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $1) + ) + ) + (set_local $3 + (i32.add + (get_local $2) + (get_local $1) + ) + ) + ) + (get_local $3) + ) + (func $___towrite (; 37 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (i32.load8_s + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 74) + ) + ) + ) + ) + (i32.store8 + (get_local $2) + (i32.or + (i32.add + (get_local $1) + (i32.const 255) + ) + (get_local $1) + ) + ) + (tee_local $0 + (if (result i32) + (i32.and + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.const 8) + ) + (block $block (result i32) + (i32.store + (get_local $0) + (i32.or + (get_local $1) + (i32.const 32) + ) + ) + (i32.const -1) + ) + (block $block35 (result i32) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=28 + (get_local $0) + (tee_local $1 + (i32.load offset=44 + (get_local $0) + ) + ) + ) + (i32.store offset=20 + (get_local $0) + (get_local $1) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (get_local $1) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (func $_wcrtomb (; 38 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $do-once (result i32) + (if (result i32) + (get_local $0) + (block (result i32) + (if + (i32.lt_u + (get_local $1) + (i32.const 128) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (br $do-once + (i32.const 1) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.const 2048) + ) + (block + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 192) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (br $do-once + (i32.const 2) + ) + ) + ) + (if + (i32.or + (i32.lt_u + (get_local $1) + (i32.const 55296) + ) + (i32.eq + (i32.and + (get_local $1) + (i32.const -8192) + ) + (i32.const 57344) + ) + ) + (block + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 12) + ) + (i32.const 224) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=2 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (br $do-once + (i32.const 3) + ) + ) + ) + (if (result i32) + (i32.lt_u + (i32.add + (get_local $1) + (i32.const -65536) + ) + (i32.const 1048576) + ) + (block (result i32) + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 18) + ) + (i32.const 240) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 12) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=2 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=3 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.const 4) + ) + (block (result i32) + (i32.store + (if (result i32) + (i32.load + (i32.const 16) + ) + (i32.load offset=60 + (call $_pthread_self) + ) + (i32.const 60) + ) + (i32.const 84) + ) + (i32.const -1) + ) + ) + ) + (i32.const 1) + ) + ) + ) + (func $_wctomb (; 39 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (get_local $0) + (call $_wcrtomb + (get_local $0) + (get_local $1) + (i32.const 0) + ) + (i32.const 0) + ) + ) + (func $_memchr (; 40 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $5 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (block $label$break$L8 + (block $__rjti$2 + (if + (i32.and + (tee_local $4 + (i32.ne + (get_local $2) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.const 0) + ) + ) + (block $block + (set_local $4 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (br_if $__rjti$2 + (i32.eq + (i32.load8_u + (get_local $2) + ) + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + ) + (br_if $while-in + (i32.and + (tee_local $0 + (i32.ne + (tee_local $3 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 3) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (block $block45 + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (set_local $0 + (i32.const 0) + ) + (br $label$break$L8) + ) + (set_local $0 + (get_local $3) + ) + (if + (i32.ne + (i32.load8_u + (get_local $2) + ) + (tee_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (block $block47 + (set_local $3 + (i32.mul + (get_local $5) + (i32.const 16843009) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.le_u + (get_local $0) + (i32.const 3) + ) + ) + (loop $while-in3 + (if + (i32.eqz + (i32.and + (i32.xor + (i32.and + (tee_local $4 + (i32.xor + (i32.load + (get_local $2) + ) + (get_local $3) + ) + ) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $4) + (i32.const -16843009) + ) + ) + ) + (block $block49 + (set_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (br_if $while-in3 + (i32.gt_u + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + (i32.const 3) + ) + ) + (br $__rjti$0) + ) + ) + ) + (br $__rjto$0) + ) + (if + (i32.eqz + (get_local $0) + ) + (block $block51 + (set_local $0 + (i32.const 0) + ) + (br $label$break$L8) + ) + ) + ) + (loop $while-in5 + (br_if $label$break$L8 + (i32.eq + (i32.load8_u + (get_local $2) + ) + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br_if $while-in5 + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -1) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + ) + (select + (get_local $2) + (i32.const 0) + (get_local $0) + ) + ) + (func $___syscall_ret (; 41 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const -4096) + ) + (block (result i32) + (i32.store + (if (result i32) + (i32.load + (i32.const 16) + ) + (i32.load offset=60 + (call $_pthread_self) + ) + (i32.const 60) + ) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + (get_local $0) + ) + ) + (func $___fflush_unlocked (; 42 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (tee_local $0 + (block $__rjto$0 (result i32) + (block $__rjti$0 + (br_if $__rjti$0 + (i32.le_u + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (br_if $__rjti$0 + (i32.load + (get_local $1) + ) + ) + (br $__rjto$0 + (i32.const -1) + ) + ) + (if + (i32.lt_u + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (tee_local $6 + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.sub + (get_local $4) + (get_local $6) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=40 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + (func $_cleanup (; 43 ;) (type $FUNCSIG$vi) (param $0 i32) + (drop + (i32.eqz + (i32.load offset=68 + (get_local $0) + ) + ) + ) + ) + (func $_printf_core (; 44 ;) (type $9) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 f64) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 f64) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (local $47 i32) + (local $48 i32) + (local $49 i32) + (local $50 i32) + (local $51 i32) + (set_local $26 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 624) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $22 + (i32.add + (get_local $26) + (i32.const 16) + ) + ) + (set_local $19 + (get_local $26) + ) + (set_local $38 + (i32.add + (get_local $26) + (i32.const 528) + ) + ) + (set_local $30 + (i32.ne + (get_local $0) + (i32.const 0) + ) + ) + (set_local $41 + (tee_local $27 + (i32.add + (tee_local $5 + (i32.add + (get_local $26) + (i32.const 536) + ) + ) + (i32.const 40) + ) + ) + ) + (set_local $42 + (i32.add + (get_local $5) + (i32.const 39) + ) + ) + (set_local $46 + (i32.add + (tee_local $43 + (i32.add + (get_local $26) + (i32.const 8) + ) + ) + (i32.const 4) + ) + ) + (set_local $36 + (i32.add + (tee_local $5 + (i32.add + (get_local $26) + (i32.const 576) + ) + ) + (i32.const 12) + ) + ) + (set_local $44 + (i32.add + (get_local $5) + (i32.const 11) + ) + ) + (set_local $47 + (i32.sub + (tee_local $29 + (get_local $36) + ) + (tee_local $39 + (tee_local $24 + (i32.add + (get_local $26) + (i32.const 588) + ) + ) + ) + ) + ) + (set_local $48 + (i32.sub + (i32.const -2) + (get_local $39) + ) + ) + (set_local $49 + (i32.add + (get_local $29) + (i32.const 2) + ) + ) + (set_local $51 + (i32.add + (tee_local $50 + (i32.add + (get_local $26) + (i32.const 24) + ) + ) + (i32.const 288) + ) + ) + (set_local $45 + (tee_local $31 + (i32.add + (get_local $24) + (i32.const 9) + ) + ) + ) + (set_local $37 + (i32.add + (get_local $24) + (i32.const 8) + ) + ) + (set_local $16 + (i32.const 0) + ) + (set_local $5 + (get_local $1) + ) + (set_local $10 + (i32.const 0) + ) + (set_local $1 + (i32.const 0) + ) + (block $label$break$L343 + (block $__rjti$9 + (loop $label$continue$L1 + (block $label$break$L1 + (if + (i32.gt_s + (get_local $16) + (i32.const -1) + ) + (set_local $16 + (if (result i32) + (i32.gt_s + (get_local $10) + (i32.sub + (i32.const 2147483647) + (get_local $16) + ) + ) + (block (result i32) + (i32.store + (if (result i32) + (i32.load + (i32.const 16) + ) + (i32.load offset=60 + (call $_pthread_self) + ) + (i32.const 60) + ) + (i32.const 75) + ) + (i32.const -1) + ) + (i32.add + (get_local $10) + (get_local $16) + ) + ) + ) + ) + (br_if $__rjti$9 + (i32.eqz + (tee_local $7 + (i32.load8_s + (get_local $5) + ) + ) + ) + ) + (set_local $10 + (get_local $5) + ) + (block $label$break$L12 + (block $__rjti$1 + (loop $label$continue$L9 + (block $label$break$L9 + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.shr_s + (i32.shl + (get_local $7) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (set_local $6 + (get_local $10) + ) + (br $__rjti$1) + ) + (set_local $6 + (get_local $10) + ) + (br $label$break$L9) + ) + (set_local $7 + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + ) + (br $label$continue$L9) + ) + ) + (br $label$break$L12) + ) + (loop $while-in + (br_if $label$break$L12 + (i32.ne + (i32.load8_s offset=1 + (get_local $6) + ) + (i32.const 37) + ) + ) + (set_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (br_if $while-in + (i32.eq + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 2) + ) + ) + ) + (i32.const 37) + ) + ) + ) + ) + (set_local $7 + (i32.sub + (get_local $10) + (get_local $5) + ) + ) + (if + (get_local $30) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $5) + (get_local $7) + (get_local $0) + ) + ) + ) + ) + (if + (i32.ne + (get_local $10) + (get_local $5) + ) + (block + (set_local $5 + (get_local $6) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + ) + (set_local $8 + (if (result i32) + (i32.lt_u + (tee_local $8 + (i32.add + (tee_local $12 + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block (result i32) + (set_local $6 + (i32.load8_s + (tee_local $10 + (select + (i32.add + (get_local $6) + (i32.const 3) + ) + (get_local $10) + (tee_local $12 + (i32.eq + (i32.load8_s offset=2 + (get_local $6) + ) + (i32.const 36) + ) + ) + ) + ) + ) + ) + (set_local $17 + (select + (get_local $8) + (i32.const -1) + (get_local $12) + ) + ) + (select + (i32.const 1) + (get_local $1) + (get_local $12) + ) + ) + (block (result i32) + (set_local $6 + (get_local $12) + ) + (set_local $17 + (i32.const -1) + ) + (get_local $1) + ) + ) + ) + (block $label$break$L25 + (if + (i32.eq + (i32.and + (tee_local $12 + (i32.shr_s + (i32.shl + (get_local $6) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (i32.const -32) + ) + (i32.const 32) + ) + (block + (set_local $1 + (get_local $6) + ) + (set_local $6 + (get_local $12) + ) + (set_local $12 + (i32.const 0) + ) + (loop $while-in4 + (if + (i32.eqz + (i32.and + (i32.shl + (i32.const 1) + (i32.add + (get_local $6) + (i32.const -32) + ) + ) + (i32.const 75913) + ) + ) + (block + (set_local $6 + (get_local $1) + ) + (set_local $1 + (get_local $12) + ) + (br $label$break$L25) + ) + ) + (set_local $12 + (i32.or + (i32.shl + (i32.const 1) + (i32.add + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -32) + ) + ) + (get_local $12) + ) + ) + (br_if $while-in4 + (i32.eq + (i32.and + (tee_local $6 + (tee_local $1 + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + ) + ) + (i32.const -32) + ) + (i32.const 32) + ) + ) + (set_local $6 + (get_local $1) + ) + (set_local $1 + (get_local $12) + ) + ) + ) + (set_local $1 + (i32.const 0) + ) + ) + ) + (block $do-once5 + (if + (i32.eq + (i32.and + (get_local $6) + (i32.const 255) + ) + (i32.const 42) + ) + (block + (set_local $10 + (block $__rjto$0 (result i32) + (block $__rjti$0 + (br_if $__rjti$0 + (i32.ge_u + (tee_local $12 + (i32.add + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + ) + (br_if $__rjti$0 + (i32.ne + (i32.load8_s offset=2 + (get_local $10) + ) + (i32.const 36) + ) + ) + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $12) + (i32.const 2) + ) + ) + (i32.const 10) + ) + (drop + (i32.load offset=4 + (tee_local $6 + (i32.add + (get_local $3) + (i32.shl + (i32.add + (i32.load8_s + (get_local $6) + ) + (i32.const -48) + ) + (i32.const 3) + ) + ) + ) + ) + ) + (set_local $8 + (i32.const 1) + ) + (set_local $14 + (i32.load + (get_local $6) + ) + ) + (br $__rjto$0 + (i32.add + (get_local $10) + (i32.const 3) + ) + ) + ) + (if + (get_local $8) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (if + (i32.eqz + (get_local $30) + ) + (block + (set_local $12 + (get_local $1) + ) + (set_local $10 + (get_local $6) + ) + (set_local $1 + (i32.const 0) + ) + (set_local $14 + (i32.const 0) + ) + (br $do-once5) + ) + ) + (set_local $14 + (i32.load + (tee_local $10 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $8 + (i32.const 0) + ) + (get_local $6) + ) + ) + (set_local $12 + (if (result i32) + (i32.lt_s + (get_local $14) + (i32.const 0) + ) + (block (result i32) + (set_local $14 + (i32.sub + (i32.const 0) + (get_local $14) + ) + ) + (i32.or + (get_local $1) + (i32.const 8192) + ) + ) + (get_local $1) + ) + ) + (set_local $1 + (get_local $8) + ) + ) + (if + (i32.lt_u + (tee_local $6 + (i32.add + (i32.shr_s + (i32.shl + (get_local $6) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $12 + (i32.const 0) + ) + (loop $while-in8 + (set_local $6 + (i32.add + (i32.mul + (get_local $12) + (i32.const 10) + ) + (get_local $6) + ) + ) + (if + (i32.lt_u + (tee_local $9 + (i32.add + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $12 + (get_local $6) + ) + (set_local $6 + (get_local $9) + ) + (br $while-in8) + ) + ) + ) + (if + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + (block + (set_local $12 + (get_local $1) + ) + (set_local $1 + (get_local $8) + ) + (set_local $14 + (get_local $6) + ) + ) + ) + ) + (block + (set_local $12 + (get_local $1) + ) + (set_local $1 + (get_local $8) + ) + (set_local $14 + (i32.const 0) + ) + ) + ) + ) + ) + (set_local $6 + (block $label$break$L46 (result i32) + (if (result i32) + (i32.eq + (i32.load8_s + (get_local $10) + ) + (i32.const 46) + ) + (block (result i32) + (if + (i32.ne + (tee_local $8 + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + ) + (i32.const 42) + ) + (block + (if + (i32.lt_u + (tee_local $9 + (i32.add + (get_local $8) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $10 + (get_local $6) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $6 + (get_local $9) + ) + ) + (block + (set_local $10 + (get_local $6) + ) + (br $label$break$L46 + (i32.const 0) + ) + ) + ) + (loop $while-in11 + (drop + (br_if $label$break$L46 + (tee_local $6 + (i32.add + (i32.mul + (get_local $8) + (i32.const 10) + ) + (get_local $6) + ) + ) + (i32.ge_u + (tee_local $9 + (i32.add + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + ) + ) + (set_local $8 + (get_local $6) + ) + (set_local $6 + (get_local $9) + ) + (br $while-in11) + ) + ) + ) + (if + (i32.lt_u + (tee_local $8 + (i32.add + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $10) + (i32.const 2) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (if + (i32.eq + (i32.load8_s offset=3 + (get_local $10) + ) + (i32.const 36) + ) + (block + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $8) + (i32.const 2) + ) + ) + (i32.const 10) + ) + (drop + (i32.load offset=4 + (tee_local $6 + (i32.add + (get_local $3) + (i32.shl + (i32.add + (i32.load8_s + (get_local $6) + ) + (i32.const -48) + ) + (i32.const 3) + ) + ) + ) + ) + ) + (set_local $10 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (br $label$break$L46 + (i32.load + (get_local $6) + ) + ) + ) + ) + ) + (if + (get_local $1) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (if (result i32) + (get_local $30) + (block (result i32) + (set_local $8 + (i32.load + (tee_local $10 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $10 + (get_local $6) + ) + (get_local $8) + ) + (block (result i32) + (set_local $10 + (get_local $6) + ) + (i32.const 0) + ) + ) + ) + (i32.const -1) + ) + ) + ) + (set_local $8 + (get_local $10) + ) + (set_local $9 + (i32.const 0) + ) + (loop $while-in13 + (if + (i32.gt_u + (tee_local $11 + (i32.add + (i32.load8_s + (get_local $8) + ) + (i32.const -65) + ) + ) + (i32.const 57) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $10 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + (if + (i32.lt_u + (i32.add + (tee_local $11 + (i32.and + (tee_local $13 + (i32.load8_s + (i32.add + (i32.add + (i32.mul + (get_local $9) + (i32.const 58) + ) + (i32.const 3611) + ) + (get_local $11) + ) + ) + ) + (i32.const 255) + ) + ) + (i32.const -1) + ) + (i32.const 8) + ) + (block + (set_local $8 + (get_local $10) + ) + (set_local $9 + (get_local $11) + ) + (br $while-in13) + ) + (set_local $18 + (get_local $8) + ) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $13) + (i32.const 255) + ) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $8 + (i32.gt_s + (get_local $17) + (i32.const -1) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (if + (i32.eq + (i32.and + (get_local $13) + (i32.const 255) + ) + (i32.const 19) + ) + (if + (get_local $8) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + (br $__rjti$2) + ) + (block + (if + (get_local $8) + (block + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $17) + (i32.const 2) + ) + ) + (get_local $11) + ) + (set_local $13 + (i32.load offset=4 + (tee_local $11 + (i32.add + (get_local $3) + (i32.shl + (get_local $17) + (i32.const 3) + ) + ) + ) + ) + ) + (i32.store + (tee_local $8 + (get_local $19) + ) + (i32.load + (get_local $11) + ) + ) + (i32.store offset=4 + (get_local $8) + (get_local $13) + ) + (br $__rjti$2) + ) + ) + (if + (i32.eqz + (get_local $30) + ) + (block + (set_local $16 + (i32.const 0) + ) + (br $label$break$L1) + ) + ) + (call $_pop_arg_336 + (get_local $19) + (get_local $11) + (get_local $2) + ) + ) + ) + (br $__rjto$2) + ) + (if + (i32.eqz + (get_local $30) + ) + (block + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + ) + ) + (set_local $12 + (select + (tee_local $8 + (i32.and + (get_local $12) + (i32.const -65537) + ) + ) + (get_local $12) + (i32.and + (get_local $12) + (i32.const 8192) + ) + ) + ) + (set_local $5 + (block $__rjto$8 (result i32) + (block $__rjti$8 + (block $__rjti$7 + (block $__rjti$6 + (block $__rjti$5 + (block $__rjti$4 + (block $__rjti$3 + (block $switch-default120 + (block $switch-case42 + (block $switch-case41 + (block $switch-case40 + (block $switch-case39 + (block $switch-case38 + (block $switch-case37 + (block $switch-case36 + (block $switch-case34 + (block $switch-case33 + (block $switch-case29 + (block $switch-case28 + (block $switch-case27 + (br_table $switch-case42 $switch-default120 $switch-case40 $switch-default120 $switch-case42 $switch-case42 $switch-case42 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case41 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case29 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case42 $switch-default120 $switch-case37 $switch-case34 $switch-case42 $switch-case42 $switch-case42 $switch-default120 $switch-case34 $switch-default120 $switch-default120 $switch-default120 $switch-case38 $switch-case27 $switch-case33 $switch-case28 $switch-default120 $switch-default120 $switch-case39 $switch-default120 $switch-case36 $switch-default120 $switch-default120 $switch-case29 $switch-default120 + (i32.sub + (tee_local $18 + (select + (i32.and + (tee_local $11 + (i32.load8_s + (get_local $18) + ) + ) + (i32.const -33) + ) + (get_local $11) + (i32.and + (i32.ne + (get_local $9) + (i32.const 0) + ) + (i32.eq + (i32.and + (get_local $11) + (i32.const 15) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 65) + ) + ) + ) + (block $switch-default26 + (block $switch-case25 + (block $switch-case24 + (block $switch-case23 + (block $switch-case22 + (block $switch-case21 + (block $switch-case20 + (block $switch-case19 + (br_table $switch-case19 $switch-case20 $switch-case21 $switch-case22 $switch-case23 $switch-default26 $switch-case24 $switch-case25 $switch-default26 + (get_local $9) + ) + ) + (i32.store + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (tee_local $5 + (i32.load + (get_local $19) + ) + ) + (get_local $16) + ) + (i32.store offset=4 + (get_local $5) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $16) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store16 + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store8 + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (tee_local $5 + (i32.load + (get_local $19) + ) + ) + (get_local $16) + ) + (i32.store offset=4 + (get_local $5) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $16) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (set_local $7 + (i32.or + (get_local $12) + (i32.const 8) + ) + ) + (set_local $6 + (select + (get_local $6) + (i32.const 8) + (i32.gt_u + (get_local $6) + (i32.const 8) + ) + ) + ) + (set_local $18 + (i32.const 120) + ) + (br $__rjti$3) + ) + (set_local $7 + (get_local $12) + ) + (br $__rjti$3) + ) + (if + (i32.and + (i32.eqz + (tee_local $7 + (i32.load + (tee_local $5 + (get_local $19) + ) + ) + ) + ) + (i32.eqz + (tee_local $8 + (i32.load offset=4 + (get_local $5) + ) + ) + ) + ) + (set_local $8 + (get_local $27) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $7 + (get_local $8) + ) + (set_local $8 + (get_local $27) + ) + (loop $while-in32 + (i32.store8 + (tee_local $8 + (i32.add + (get_local $8) + (i32.const -1) + ) + ) + (i32.or + (i32.and + (get_local $5) + (i32.const 7) + ) + (i32.const 48) + ) + ) + (br_if $while-in32 + (i32.eqz + (i32.and + (i32.eqz + (tee_local $5 + (call $_bitshift64Lshr + (get_local $5) + (get_local $7) + (i32.const 3) + ) + ) + ) + (i32.eqz + (tee_local $7 + (get_global $tempRet0) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $5 + (if (result i32) + (i32.and + (get_local $12) + (i32.const 8) + ) + (block (result i32) + (set_local $7 + (get_local $12) + ) + (set_local $6 + (select + (tee_local $12 + (i32.add + (i32.sub + (get_local $41) + (get_local $8) + ) + (i32.const 1) + ) + ) + (get_local $6) + (i32.lt_s + (get_local $6) + (get_local $12) + ) + ) + ) + (get_local $8) + ) + (block (result i32) + (set_local $7 + (get_local $12) + ) + (get_local $8) + ) + ) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$8) + ) + (set_local $5 + (i32.load + (tee_local $7 + (get_local $19) + ) + ) + ) + (if + (i32.lt_s + (tee_local $7 + (i32.load offset=4 + (get_local $7) + ) + ) + (i32.const 0) + ) + (block + (set_global $tempRet0 + (i32.sub + (i32.sub + (i32.const 0) + (get_local $7) + ) + (i32.gt_u + (get_local $5) + (i32.const 0) + ) + ) + ) + (i32.store + (tee_local $8 + (get_local $19) + ) + (tee_local $5 + (i32.sub + (i32.const 0) + (get_local $5) + ) + ) + ) + (i32.store offset=4 + (get_local $8) + (tee_local $7 + (get_global $tempRet0) + ) + ) + (set_local $8 + (i32.const 1) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$4) + ) + ) + (set_local $9 + (if (result i32) + (i32.and + (get_local $12) + (i32.const 2048) + ) + (block (result i32) + (set_local $8 + (i32.const 1) + ) + (i32.const 4092) + ) + (block (result i32) + (set_local $8 + (tee_local $9 + (i32.and + (get_local $12) + (i32.const 1) + ) + ) + ) + (select + (i32.const 4093) + (i32.const 4091) + (get_local $9) + ) + ) + ) + ) + (br $__rjti$4) + ) + (set_local $5 + (i32.load + (tee_local $7 + (get_local $19) + ) + ) + ) + (set_local $7 + (i32.load offset=4 + (get_local $7) + ) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$4) + ) + (drop + (i32.load offset=4 + (tee_local $5 + (get_local $19) + ) + ) + ) + (i32.store8 + (get_local $42) + (i32.load + (get_local $5) + ) + ) + (set_local $7 + (get_local $42) + ) + (set_local $12 + (get_local $8) + ) + (set_local $11 + (i32.const 1) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjto$8 + (get_local $27) + ) + ) + (set_local $5 + (call $_strerror + (i32.load + (if (result i32) + (i32.load + (i32.const 16) + ) + (i32.load offset=60 + (call $_pthread_self) + ) + (i32.const 60) + ) + ) + ) + ) + (br $__rjti$5) + ) + (set_local $5 + (select + (tee_local $5 + (i32.load + (get_local $19) + ) + ) + (i32.const 4101) + (get_local $5) + ) + ) + (br $__rjti$5) + ) + (drop + (i32.load offset=4 + (tee_local $5 + (get_local $19) + ) + ) + ) + (i32.store + (get_local $43) + (i32.load + (get_local $5) + ) + ) + (i32.store + (get_local $46) + (i32.const 0) + ) + (i32.store + (get_local $19) + (get_local $43) + ) + (set_local $8 + (i32.const -1) + ) + (br $__rjti$6) + ) + (if + (get_local $6) + (block + (set_local $8 + (get_local $6) + ) + (br $__rjti$6) + ) + (block + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (i32.const 0) + (get_local $12) + ) + (set_local $7 + (i32.const 0) + ) + (br $__rjti$7) + ) + ) + ) + (set_local $15 + (f64.load + (get_local $19) + ) + ) + (i32.store + (get_local $22) + (i32.const 0) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $15) + ) + (drop + (i32.load + (get_global $tempDoublePtr) + ) + ) + (set_local $32 + (if (result i32) + (i32.lt_s + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + (i32.const 0) + ) + (block (result i32) + (set_local $28 + (i32.const 1) + ) + (set_local $15 + (f64.neg + (get_local $15) + ) + ) + (i32.const 4108) + ) + (if (result i32) + (i32.and + (get_local $12) + (i32.const 2048) + ) + (block (result i32) + (set_local $28 + (i32.const 1) + ) + (i32.const 4111) + ) + (block (result i32) + (set_local $28 + (tee_local $5 + (i32.and + (get_local $12) + (i32.const 1) + ) + ) + ) + (select + (i32.const 4114) + (i32.const 4109) + (get_local $5) + ) + ) + ) + ) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $15) + ) + (drop + (i32.load + (get_global $tempDoublePtr) + ) + ) + (set_local $7 + (block $do-once49 (result i32) + (if (result i32) + (i32.or + (i32.lt_u + (tee_local $5 + (i32.and + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + (i32.const 2146435072) + ) + ) + (i32.const 2146435072) + ) + (i32.and + (i32.eq + (get_local $5) + (i32.const 2146435072) + ) + (i32.const 0) + ) + ) + (block (result i32) + (if + (tee_local $5 + (f64.ne + (tee_local $20 + (f64.mul + (call $_frexp + (get_local $15) + (get_local $22) + ) + (f64.const 2) + ) + ) + (f64.const 0) + ) + ) + (i32.store + (get_local $22) + (i32.add + (i32.load + (get_local $22) + ) + (i32.const -1) + ) + ) + ) + (if + (i32.eq + (tee_local $25 + (i32.or + (get_local $18) + (i32.const 32) + ) + ) + (i32.const 97) + ) + (block + (set_local $9 + (select + (i32.add + (get_local $32) + (i32.const 9) + ) + (get_local $32) + (tee_local $13 + (i32.and + (get_local $18) + (i32.const 32) + ) + ) + ) + ) + (set_local $15 + (if (result f64) + (i32.or + (i32.gt_u + (get_local $6) + (i32.const 11) + ) + (i32.eqz + (tee_local $5 + (i32.sub + (i32.const 12) + (get_local $6) + ) + ) + ) + ) + (get_local $20) + (block (result f64) + (set_local $15 + (f64.const 8) + ) + (loop $while-in54 + (set_local $15 + (f64.mul + (get_local $15) + (f64.const 16) + ) + ) + (br_if $while-in54 + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + ) + ) + (if (result f64) + (i32.eq + (i32.load8_s + (get_local $9) + ) + (i32.const 45) + ) + (f64.neg + (f64.add + (get_local $15) + (f64.sub + (f64.neg + (get_local $20) + ) + (get_local $15) + ) + ) + ) + (f64.sub + (f64.add + (get_local $20) + (get_local $15) + ) + (get_local $15) + ) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $5 + (call $_fmt_u + (tee_local $5 + (select + (i32.sub + (i32.const 0) + (tee_local $7 + (i32.load + (get_local $22) + ) + ) + ) + (get_local $7) + (i32.lt_s + (get_local $7) + (i32.const 0) + ) + ) + ) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + (get_local $36) + ) + ) + (get_local $36) + ) + (block + (i32.store8 + (get_local $44) + (i32.const 48) + ) + (set_local $5 + (get_local $44) + ) + ) + ) + (set_local $11 + (i32.or + (get_local $28) + (i32.const 2) + ) + ) + (i32.store8 + (i32.add + (get_local $5) + (i32.const -1) + ) + (i32.add + (i32.and + (i32.shr_s + (get_local $7) + (i32.const 31) + ) + (i32.const 2) + ) + (i32.const 43) + ) + ) + (i32.store8 + (tee_local $8 + (i32.add + (get_local $5) + (i32.const -2) + ) + ) + (i32.add + (get_local $18) + (i32.const 15) + ) + ) + (set_local $18 + (i32.lt_s + (get_local $6) + (i32.const 1) + ) + ) + (set_local $17 + (i32.eqz + (i32.and + (get_local $12) + (i32.const 8) + ) + ) + ) + (set_local $5 + (get_local $24) + ) + (loop $while-in56 + (i32.store8 + (get_local $5) + (i32.or + (i32.load8_u + (i32.add + (tee_local $7 + (if (result i32) + (f64.ne + (tee_local $20 + (get_local $15) + ) + (get_local $20) + ) + (i32.const -2147483648) + (if (result i32) + (f64.ge + (get_local $20) + (f64.const 2147483648) + ) + (i32.const -2147483648) + (if (result i32) + (f64.le + (get_local $20) + (f64.const -2147483649) + ) + (i32.const -2147483648) + (i32.trunc_s/f64 + (get_local $20) + ) + ) + ) + ) + ) + (i32.const 4075) + ) + ) + (get_local $13) + ) + ) + (set_local $15 + (f64.mul + (f64.sub + (get_local $15) + (f64.convert_s/i32 + (get_local $7) + ) + ) + (f64.const 16) + ) + ) + (set_local $5 + (block $do-once57 (result i32) + (if (result i32) + (i32.eq + (i32.sub + (tee_local $7 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (get_local $39) + ) + (i32.const 1) + ) + (block (result i32) + (drop + (br_if $do-once57 + (get_local $7) + (i32.and + (get_local $17) + (i32.and + (get_local $18) + (f64.eq + (get_local $15) + (f64.const 0) + ) + ) + ) + ) + ) + (i32.store8 + (get_local $7) + (i32.const 46) + ) + (i32.add + (get_local $5) + (i32.const 2) + ) + ) + (get_local $7) + ) + ) + ) + (br_if $while-in56 + (f64.ne + (get_local $15) + (f64.const 0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (tee_local $7 + (i32.add + (tee_local $6 + (select + (i32.sub + (i32.add + (get_local $49) + (get_local $6) + ) + (get_local $8) + ) + (i32.add + (i32.sub + (get_local $47) + (get_local $8) + ) + (get_local $5) + ) + (i32.and + (i32.ne + (get_local $6) + (i32.const 0) + ) + (i32.lt_s + (i32.add + (get_local $48) + (get_local $5) + ) + (get_local $6) + ) + ) + ) + ) + (get_local $11) + ) + ) + (get_local $12) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $9) + (get_local $11) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $12) + (i32.const 65536) + ) + ) + (set_local $5 + (i32.sub + (get_local $5) + (get_local $39) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $24) + (get_local $5) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.sub + (get_local $6) + (i32.add + (get_local $5) + (tee_local $5 + (i32.sub + (get_local $29) + (get_local $8) + ) + ) + ) + ) + (i32.const 0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $8) + (get_local $5) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $12) + (i32.const 8192) + ) + ) + (br $do-once49 + (select + (get_local $14) + (get_local $7) + (i32.lt_s + (get_local $7) + (get_local $14) + ) + ) + ) + ) + ) + (set_local $15 + (if (result f64) + (get_local $5) + (block (result f64) + (i32.store + (get_local $22) + (tee_local $5 + (i32.add + (i32.load + (get_local $22) + ) + (i32.const -28) + ) + ) + ) + (f64.mul + (get_local $20) + (f64.const 268435456) + ) + ) + (block (result f64) + (set_local $5 + (i32.load + (get_local $22) + ) + ) + (get_local $20) + ) + ) + ) + (set_local $7 + (tee_local $8 + (select + (get_local $50) + (get_local $51) + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + ) + ) + ) + (loop $while-in60 + (i32.store + (get_local $7) + (tee_local $5 + (if (result i32) + (f64.ne + (tee_local $20 + (get_local $15) + ) + (get_local $20) + ) + (i32.const -2147483648) + (if (result i32) + (f64.ge + (get_local $20) + (f64.const 2147483648) + ) + (i32.const -2147483648) + (if (result i32) + (f64.le + (get_local $20) + (f64.const -2147483649) + ) + (i32.const -2147483648) + (i32.trunc_s/f64 + (get_local $20) + ) + ) + ) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (br_if $while-in60 + (f64.ne + (tee_local $15 + (f64.mul + (f64.sub + (get_local $15) + (f64.convert_u/i32 + (get_local $5) + ) + ) + (f64.const 1e9) + ) + ) + (f64.const 0) + ) + ) + ) + (if + (i32.gt_s + (tee_local $9 + (i32.load + (get_local $22) + ) + ) + (i32.const 0) + ) + (block + (set_local $5 + (get_local $8) + ) + (loop $while-in62 + (set_local $13 + (select + (i32.const 29) + (get_local $9) + (i32.gt_s + (get_local $9) + (i32.const 29) + ) + ) + ) + (block $do-once63 + (if + (i32.ge_u + (tee_local $9 + (i32.add + (get_local $7) + (i32.const -4) + ) + ) + (get_local $5) + ) + (block + (set_local $11 + (i32.const 0) + ) + (loop $while-in66 + (i32.store + (get_local $9) + (call $___uremdi3 + (block (result i32) + (set_local $21 + (call $_bitshift64Shl + (i32.load + (get_local $9) + ) + (i32.const 0) + (get_local $13) + ) + ) + (set_global $tempRet0 + (i32.add + (i32.add + (tee_local $23 + (get_global $tempRet0) + ) + (i32.const 0) + ) + (i32.lt_u + (tee_local $11 + (i32.add + (get_local $21) + (get_local $11) + ) + ) + (get_local $21) + ) + ) + ) + (tee_local $11 + (get_local $11) + ) + ) + (tee_local $17 + (get_global $tempRet0) + ) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (set_local $11 + (call $___udivdi3 + (get_local $11) + (get_local $17) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (br_if $while-in66 + (i32.ge_u + (tee_local $9 + (i32.add + (get_local $9) + (i32.const -4) + ) + ) + (get_local $5) + ) + ) + ) + (br_if $do-once63 + (i32.eqz + (get_local $11) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -4) + ) + ) + (get_local $11) + ) + ) + ) + ) + (loop $while-in68 + (if + (i32.gt_u + (get_local $7) + (get_local $5) + ) + (if + (i32.eqz + (i32.load + (tee_local $9 + (i32.add + (get_local $7) + (i32.const -4) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $9) + ) + (br $while-in68) + ) + ) + ) + ) + (i32.store + (get_local $22) + (tee_local $9 + (i32.sub + (i32.load + (get_local $22) + ) + (get_local $13) + ) + ) + ) + (br_if $while-in62 + (i32.gt_s + (get_local $9) + (i32.const 0) + ) + ) + ) + ) + (set_local $5 + (get_local $8) + ) + ) + (set_local $17 + (select + (i32.const 6) + (get_local $6) + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + ) + ) + (if + (i32.lt_s + (get_local $9) + (i32.const 0) + ) + (block + (set_local $6 + (i32.add + (get_local $17) + (i32.const 25) + ) + ) + (set_local $21 + (i32.add + (if (result i32) + (i32.and + (i32.eq + (get_local $6) + (i32.const -2147483648) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.div_s + (get_local $6) + (i32.const 9) + ) + ) + (i32.const 1) + ) + ) + (set_local $33 + (i32.eq + (get_local $25) + (i32.const 102) + ) + ) + (set_local $6 + (get_local $5) + ) + (set_local $5 + (get_local $7) + ) + (loop $while-in70 + (set_local $13 + (select + (i32.const 9) + (tee_local $7 + (i32.sub + (i32.const 0) + (get_local $9) + ) + ) + (i32.gt_s + (get_local $7) + (i32.const 9) + ) + ) + ) + (block $do-once71 + (if + (i32.lt_u + (get_local $6) + (get_local $5) + ) + (block + (set_local $11 + (i32.add + (i32.shl + (i32.const 1) + (get_local $13) + ) + (i32.const -1) + ) + ) + (set_local $40 + (i32.shr_u + (i32.const 1000000000) + (get_local $13) + ) + ) + (set_local $9 + (i32.const 0) + ) + (set_local $7 + (get_local $6) + ) + (loop $while-in74 + (i32.store + (get_local $7) + (i32.add + (i32.shr_u + (tee_local $34 + (i32.load + (get_local $7) + ) + ) + (get_local $13) + ) + (get_local $9) + ) + ) + (set_local $9 + (i32.mul + (i32.and + (get_local $34) + (get_local $11) + ) + (get_local $40) + ) + ) + (br_if $while-in74 + (i32.lt_u + (tee_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (get_local $5) + ) + ) + ) + (set_local $7 + (select + (get_local $6) + (i32.add + (get_local $6) + (i32.const 4) + ) + (i32.load + (get_local $6) + ) + ) + ) + (br_if $do-once71 + (i32.eqz + (get_local $9) + ) + ) + (i32.store + (get_local $5) + (get_local $9) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + ) + (set_local $7 + (select + (get_local $6) + (i32.add + (get_local $6) + (i32.const 4) + ) + (i32.load + (get_local $6) + ) + ) + ) + ) + ) + (set_local $11 + (select + (i32.add + (tee_local $6 + (select + (get_local $8) + (get_local $7) + (get_local $33) + ) + ) + (i32.shl + (get_local $21) + (i32.const 2) + ) + ) + (get_local $5) + (i32.gt_s + (i32.shr_s + (i32.sub + (get_local $5) + (get_local $6) + ) + (i32.const 2) + ) + (get_local $21) + ) + ) + ) + (i32.store + (get_local $22) + (tee_local $9 + (i32.add + (i32.load + (get_local $22) + ) + (get_local $13) + ) + ) + ) + (if + (i32.lt_s + (get_local $9) + (i32.const 0) + ) + (block + (set_local $6 + (get_local $7) + ) + (set_local $5 + (get_local $11) + ) + (br $while-in70) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $9 + (get_local $11) + ) + ) + ) + ) + ) + (set_local $9 + (get_local $7) + ) + ) + (set_local $21 + (get_local $8) + ) + (block $do-once75 + (if + (i32.lt_u + (get_local $5) + (get_local $9) + ) + (block + (set_local $7 + (i32.mul + (i32.shr_s + (i32.sub + (get_local $21) + (get_local $5) + ) + (i32.const 2) + ) + (i32.const 9) + ) + ) + (br_if $do-once75 + (i32.lt_u + (tee_local $11 + (i32.load + (get_local $5) + ) + ) + (i32.const 10) + ) + ) + (set_local $6 + (i32.const 10) + ) + (loop $while-in78 + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br_if $while-in78 + (i32.ge_u + (get_local $11) + (tee_local $6 + (i32.mul + (get_local $6) + (i32.const 10) + ) + ) + ) + ) + ) + ) + (set_local $7 + (i32.const 0) + ) + ) + ) + (set_local $5 + (if (result i32) + (i32.lt_s + (tee_local $6 + (i32.add + (i32.sub + (get_local $17) + (select + (get_local $7) + (i32.const 0) + (i32.ne + (get_local $25) + (i32.const 102) + ) + ) + ) + (i32.shr_s + (i32.shl + (i32.and + (tee_local $33 + (i32.ne + (get_local $17) + (i32.const 0) + ) + ) + (tee_local $40 + (i32.eq + (get_local $25) + (i32.const 103) + ) + ) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + ) + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (get_local $9) + (get_local $21) + ) + (i32.const 2) + ) + (i32.const 9) + ) + (i32.const -9) + ) + ) + (block (result i32) + (set_local $11 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 9216) + ) + ) + ) + (set_local $13 + (if (result i32) + (i32.and + (i32.eq + (get_local $11) + (i32.const -2147483648) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.div_s + (get_local $11) + (i32.const 9) + ) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.add + (i32.rem_s + (get_local $6) + (i32.const 9) + ) + (i32.const 1) + ) + ) + (i32.const 9) + ) + (block + (set_local $11 + (i32.const 10) + ) + (loop $while-in80 + (set_local $11 + (i32.mul + (get_local $11) + (i32.const 10) + ) + ) + (br_if $while-in80 + (i32.ne + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (i32.const 9) + ) + ) + ) + ) + (set_local $11 + (i32.const 10) + ) + ) + (set_local $23 + (tee_local $25 + (i32.load + (tee_local $6 + (i32.add + (i32.add + (get_local $8) + (i32.shl + (get_local $13) + (i32.const 2) + ) + ) + (i32.const -4092) + ) + ) + ) + ) + ) + (set_local $13 + (if (result i32) + (tee_local $13 + (get_local $11) + ) + (i32.rem_u + (get_local $23) + (get_local $13) + ) + (i32.const 0) + ) + ) + (block $do-once81 + (if + (i32.eqz + (i32.and + (tee_local $34 + (i32.eq + (i32.add + (get_local $6) + (i32.const 4) + ) + (get_local $9) + ) + ) + (i32.eqz + (get_local $13) + ) + ) + ) + (block + (set_local $23 + (get_local $25) + ) + (set_local $35 + (if (result i32) + (tee_local $35 + (get_local $11) + ) + (i32.div_u + (get_local $23) + (get_local $35) + ) + (i32.const 0) + ) + ) + (set_local $15 + (if (result f64) + (block (result i32) + (set_local $23 + (get_local $11) + ) + (i32.lt_u + (get_local $13) + (tee_local $23 + (if (result i32) + (i32.and + (i32.eq + (get_local $23) + (i32.const -2147483648) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.div_s + (get_local $23) + (i32.const 2) + ) + ) + ) + ) + ) + (f64.const 0.5) + (select + (f64.const 1) + (f64.const 1.5) + (i32.and + (get_local $34) + (i32.eq + (get_local $13) + (get_local $23) + ) + ) + ) + ) + ) + (set_local $20 + (select + (f64.const 9007199254740994) + (f64.const 9007199254740992) + (i32.and + (get_local $35) + (i32.const 1) + ) + ) + ) + (block $do-once83 + (if + (get_local $28) + (block + (br_if $do-once83 + (i32.ne + (i32.load8_s + (get_local $32) + ) + (i32.const 45) + ) + ) + (set_local $20 + (f64.neg + (get_local $20) + ) + ) + (set_local $15 + (f64.neg + (get_local $15) + ) + ) + ) + ) + ) + (i32.store + (get_local $6) + (tee_local $13 + (i32.sub + (get_local $25) + (get_local $13) + ) + ) + ) + (br_if $do-once81 + (f64.eq + (f64.add + (get_local $20) + (get_local $15) + ) + (get_local $20) + ) + ) + (i32.store + (get_local $6) + (tee_local $7 + (i32.add + (get_local $13) + (get_local $11) + ) + ) + ) + (if + (i32.gt_u + (get_local $7) + (i32.const 999999999) + ) + (loop $while-in86 + (i32.store + (get_local $6) + (i32.const 0) + ) + (if + (i32.lt_u + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -4) + ) + ) + (get_local $5) + ) + (i32.store + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -4) + ) + ) + (i32.const 0) + ) + ) + (i32.store + (get_local $6) + (tee_local $7 + (i32.add + (i32.load + (get_local $6) + ) + (i32.const 1) + ) + ) + ) + (br_if $while-in86 + (i32.gt_u + (get_local $7) + (i32.const 999999999) + ) + ) + ) + ) + (set_local $7 + (i32.mul + (i32.shr_s + (i32.sub + (get_local $21) + (get_local $5) + ) + (i32.const 2) + ) + (i32.const 9) + ) + ) + (br_if $do-once81 + (i32.lt_u + (tee_local $13 + (i32.load + (get_local $5) + ) + ) + (i32.const 10) + ) + ) + (set_local $11 + (i32.const 10) + ) + (loop $while-in88 + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br_if $while-in88 + (i32.ge_u + (get_local $13) + (tee_local $11 + (i32.mul + (get_local $11) + (i32.const 10) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $11 + (get_local $5) + ) + (set_local $13 + (get_local $7) + ) + (select + (tee_local $5 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (get_local $9) + (i32.gt_u + (get_local $9) + (get_local $5) + ) + ) + ) + (block (result i32) + (set_local $11 + (get_local $5) + ) + (set_local $13 + (get_local $7) + ) + (get_local $9) + ) + ) + ) + (set_local $34 + (i32.sub + (i32.const 0) + (get_local $13) + ) + ) + (loop $while-in90 + (block $while-out89 + (if + (i32.le_u + (get_local $5) + (get_local $11) + ) + (block + (set_local $25 + (i32.const 0) + ) + (set_local $9 + (get_local $5) + ) + (br $while-out89) + ) + ) + (if + (i32.load + (tee_local $7 + (i32.add + (get_local $5) + (i32.const -4) + ) + ) + ) + (block + (set_local $25 + (i32.const 1) + ) + (set_local $9 + (get_local $5) + ) + ) + (block + (set_local $5 + (get_local $7) + ) + (br $while-in90) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (tee_local $13 + (i32.add + (i32.add + (i32.add + (i32.add + (get_local $28) + (i32.const 1) + ) + (tee_local $5 + (block $do-once91 (result i32) + (if (result i32) + (get_local $40) + (block (result i32) + (set_local $7 + (if (result i32) + (i32.and + (i32.gt_s + (tee_local $5 + (i32.add + (i32.xor + (get_local $33) + (i32.const 1) + ) + (get_local $17) + ) + ) + (get_local $13) + ) + (i32.gt_s + (get_local $13) + (i32.const -5) + ) + ) + (block (result i32) + (set_local $17 + (i32.sub + (i32.add + (get_local $5) + (i32.const -1) + ) + (get_local $13) + ) + ) + (i32.add + (get_local $18) + (i32.const -1) + ) + ) + (block (result i32) + (set_local $17 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + (i32.add + (get_local $18) + (i32.const -2) + ) + ) + ) + ) + (if + (tee_local $5 + (i32.and + (get_local $12) + (i32.const 8) + ) + ) + (block + (set_local $21 + (get_local $5) + ) + (br $do-once91 + (get_local $17) + ) + ) + ) + (block $do-once93 + (if + (get_local $25) + (block + (if + (i32.eqz + (tee_local $18 + (i32.load + (i32.add + (get_local $9) + (i32.const -4) + ) + ) + ) + ) + (block + (set_local $5 + (i32.const 9) + ) + (br $do-once93) + ) + ) + (if + (block (result i32) + (set_local $5 + (get_local $18) + ) + (i32.rem_u + (get_local $5) + (i32.const 10) + ) + ) + (block + (set_local $5 + (i32.const 0) + ) + (br $do-once93) + ) + (block + (set_local $6 + (i32.const 10) + ) + (set_local $5 + (i32.const 0) + ) + ) + ) + (loop $while-in96 + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (set_local $23 + (get_local $18) + ) + (br_if $while-in96 + (i32.eqz + (if (result i32) + (tee_local $35 + (tee_local $6 + (i32.mul + (get_local $6) + (i32.const 10) + ) + ) + ) + (i32.rem_u + (get_local $23) + (get_local $35) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (set_local $5 + (i32.const 9) + ) + ) + ) + (set_local $6 + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (get_local $9) + (get_local $21) + ) + (i32.const 2) + ) + (i32.const 9) + ) + (i32.const -9) + ) + ) + (if (result i32) + (i32.eq + (i32.or + (get_local $7) + (i32.const 32) + ) + (i32.const 102) + ) + (block (result i32) + (set_local $21 + (i32.const 0) + ) + (select + (get_local $17) + (tee_local $5 + (select + (i32.const 0) + (tee_local $5 + (i32.sub + (get_local $6) + (get_local $5) + ) + ) + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + ) + ) + (i32.lt_s + (get_local $17) + (get_local $5) + ) + ) + ) + (block (result i32) + (set_local $21 + (i32.const 0) + ) + (select + (get_local $17) + (tee_local $5 + (select + (i32.const 0) + (tee_local $5 + (i32.sub + (i32.add + (get_local $6) + (get_local $13) + ) + (get_local $5) + ) + ) + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + ) + ) + (i32.lt_s + (get_local $17) + (get_local $5) + ) + ) + ) + ) + ) + (block (result i32) + (set_local $21 + (i32.and + (get_local $12) + (i32.const 8) + ) + ) + (set_local $7 + (get_local $18) + ) + (get_local $17) + ) + ) + ) + ) + ) + (i32.ne + (tee_local $33 + (i32.or + (get_local $5) + (get_local $21) + ) + ) + (i32.const 0) + ) + ) + (if (result i32) + (tee_local $17 + (i32.eq + (i32.or + (get_local $7) + (i32.const 32) + ) + (i32.const 102) + ) + ) + (block (result i32) + (set_local $18 + (i32.const 0) + ) + (select + (get_local $13) + (i32.const 0) + (i32.gt_s + (get_local $13) + (i32.const 0) + ) + ) + ) + (block (result i32) + (if + (i32.lt_s + (i32.sub + (get_local $29) + (tee_local $6 + (call $_fmt_u + (tee_local $6 + (select + (get_local $34) + (get_local $13) + (i32.lt_s + (get_local $13) + (i32.const 0) + ) + ) + ) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + (get_local $36) + ) + ) + ) + (i32.const 2) + ) + (loop $while-in98 + (i32.store8 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in98 + (i32.lt_s + (i32.sub + (get_local $29) + (get_local $6) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store8 + (i32.add + (get_local $6) + (i32.const -1) + ) + (i32.add + (i32.and + (i32.shr_s + (get_local $13) + (i32.const 31) + ) + (i32.const 2) + ) + (i32.const 43) + ) + ) + (i32.store8 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -2) + ) + ) + (get_local $7) + ) + (set_local $18 + (get_local $6) + ) + (i32.sub + (get_local $29) + (get_local $6) + ) + ) + ) + ) + ) + (get_local $12) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $32) + (get_local $28) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $14) + (get_local $13) + (i32.xor + (get_local $12) + (i32.const 65536) + ) + ) + (block $do-once99 + (if + (get_local $17) + (block + (set_local $6 + (tee_local $11 + (select + (get_local $8) + (get_local $11) + (i32.gt_u + (get_local $11) + (get_local $8) + ) + ) + ) + ) + (loop $while-in102 + (set_local $7 + (call $_fmt_u + (i32.load + (get_local $6) + ) + (i32.const 0) + (get_local $31) + ) + ) + (block $do-once103 + (if + (i32.eq + (get_local $6) + (get_local $11) + ) + (block + (br_if $do-once103 + (i32.ne + (get_local $7) + (get_local $31) + ) + ) + (i32.store8 + (get_local $37) + (i32.const 48) + ) + (set_local $7 + (get_local $37) + ) + ) + (block + (br_if $do-once103 + (i32.le_u + (get_local $7) + (get_local $24) + ) + ) + (loop $while-in106 + (i32.store8 + (tee_local $7 + (i32.add + (get_local $7) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in106 + (i32.gt_u + (get_local $7) + (get_local $24) + ) + ) + ) + ) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $7) + (i32.sub + (get_local $45) + (get_local $7) + ) + (get_local $0) + ) + ) + ) + (if + (i32.le_u + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (get_local $8) + ) + (block + (set_local $6 + (get_local $7) + ) + (br $while-in102) + ) + ) + ) + (block $do-once107 + (if + (get_local $33) + (block + (br_if $do-once107 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $0) + ) + ) + ) + ) + ) + (if + (i32.and + (i32.gt_s + (get_local $5) + (i32.const 0) + ) + (i32.lt_u + (get_local $7) + (get_local $9) + ) + ) + (loop $while-in110 + (if + (i32.gt_u + (tee_local $6 + (call $_fmt_u + (i32.load + (get_local $7) + ) + (i32.const 0) + (get_local $31) + ) + ) + (get_local $24) + ) + (loop $while-in112 + (i32.store8 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in112 + (i32.gt_u + (get_local $6) + (get_local $24) + ) + ) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $6) + (select + (i32.const 9) + (get_local $5) + (i32.gt_s + (get_local $5) + (i32.const 9) + ) + ) + (get_local $0) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $5) + (i32.const -9) + ) + ) + (if + (i32.and + (i32.gt_s + (get_local $5) + (i32.const 9) + ) + (i32.lt_u + (tee_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (get_local $9) + ) + ) + (block + (set_local $5 + (get_local $6) + ) + (br $while-in110) + ) + (set_local $5 + (get_local $6) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.add + (get_local $5) + (i32.const 9) + ) + (i32.const 9) + (i32.const 0) + ) + ) + (block + (set_local $9 + (select + (get_local $9) + (i32.add + (get_local $11) + (i32.const 4) + ) + (get_local $25) + ) + ) + (if + (i32.gt_s + (get_local $5) + (i32.const -1) + ) + (block + (set_local $17 + (i32.eqz + (get_local $21) + ) + ) + (set_local $6 + (get_local $11) + ) + (set_local $7 + (get_local $5) + ) + (loop $while-in114 + (if + (i32.eq + (tee_local $5 + (call $_fmt_u + (i32.load + (get_local $6) + ) + (i32.const 0) + (get_local $31) + ) + ) + (get_local $31) + ) + (block + (i32.store8 + (get_local $37) + (i32.const 48) + ) + (set_local $5 + (get_local $37) + ) + ) + ) + (block $do-once115 + (if + (i32.eq + (get_local $6) + (get_local $11) + ) + (block + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $5) + (i32.const 1) + (get_local $0) + ) + ) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (br_if $do-once115 + (i32.and + (get_local $17) + (i32.lt_s + (get_local $7) + (i32.const 1) + ) + ) + ) + (br_if $do-once115 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $0) + ) + ) + ) + (block + (br_if $do-once115 + (i32.le_u + (get_local $5) + (get_local $24) + ) + ) + (loop $while-in118 + (i32.store8 + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in118 + (i32.gt_u + (get_local $5) + (get_local $24) + ) + ) + ) + ) + ) + ) + (set_local $8 + (i32.sub + (get_local $45) + (get_local $5) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $5) + (select + (get_local $8) + (get_local $7) + (i32.gt_s + (get_local $7) + (get_local $8) + ) + ) + (get_local $0) + ) + ) + ) + (br_if $while-in114 + (i32.and + (i32.lt_u + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (get_local $9) + ) + (i32.gt_s + (tee_local $7 + (i32.sub + (get_local $7) + (get_local $8) + ) + ) + (i32.const -1) + ) + ) + ) + (set_local $5 + (get_local $7) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.add + (get_local $5) + (i32.const 18) + ) + (i32.const 18) + (i32.const 0) + ) + (br_if $do-once99 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $18) + (i32.sub + (get_local $29) + (get_local $18) + ) + (get_local $0) + ) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $13) + (i32.xor + (get_local $12) + (i32.const 8192) + ) + ) + (select + (get_local $14) + (get_local $13) + (i32.lt_s + (get_local $13) + (get_local $14) + ) + ) + ) + (block (result i32) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (tee_local $7 + (i32.add + (tee_local $9 + (select + (i32.const 0) + (get_local $28) + (tee_local $6 + (i32.or + (f64.ne + (get_local $15) + (get_local $15) + ) + (i32.const 0) + ) + ) + ) + ) + (i32.const 3) + ) + ) + (get_local $8) + ) + (if + (i32.eqz + (i32.and + (tee_local $5 + (i32.load + (get_local $0) + ) + ) + (i32.const 32) + ) + ) + (block + (drop + (call $___fwritex + (get_local $32) + (get_local $9) + (get_local $0) + ) + ) + (set_local $5 + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $6 + (select + (select + (i32.const 4135) + (i32.const 4139) + (tee_local $8 + (i32.ne + (i32.and + (get_local $18) + (i32.const 32) + ) + (i32.const 0) + ) + ) + ) + (select + (i32.const 4127) + (i32.const 4131) + (get_local $8) + ) + (get_local $6) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $5) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $6) + (i32.const 3) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $12) + (i32.const 8192) + ) + ) + (select + (get_local $14) + (get_local $7) + (i32.lt_s + (get_local $7) + (get_local $14) + ) + ) + ) + ) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (set_local $7 + (get_local $5) + ) + (set_local $11 + (get_local $6) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjto$8 + (get_local $27) + ) + ) + (set_local $9 + (i32.and + (get_local $18) + (i32.const 32) + ) + ) + (if + (i32.and + (i32.eqz + (tee_local $8 + (i32.load + (tee_local $5 + (get_local $19) + ) + ) + ) + ) + (i32.eqz + (tee_local $12 + (i32.load offset=4 + (get_local $5) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $27) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$8) + ) + (block + (set_local $5 + (get_local $8) + ) + (set_local $8 + (get_local $27) + ) + (loop $while-in123 + (i32.store8 + (tee_local $8 + (i32.add + (get_local $8) + (i32.const -1) + ) + ) + (i32.or + (i32.load8_u + (i32.add + (i32.and + (get_local $5) + (i32.const 15) + ) + (i32.const 4075) + ) + ) + (get_local $9) + ) + ) + (br_if $while-in123 + (i32.eqz + (i32.and + (i32.eqz + (tee_local $5 + (call $_bitshift64Lshr + (get_local $5) + (get_local $12) + (i32.const 4) + ) + ) + ) + (i32.eqz + (tee_local $12 + (get_global $tempRet0) + ) + ) + ) + ) + ) + (set_local $5 + (get_local $8) + ) + ) + (set_local $8 + (if (result i32) + (i32.or + (i32.eqz + (i32.and + (get_local $7) + (i32.const 8) + ) + ) + (i32.and + (i32.eqz + (i32.load + (tee_local $12 + (get_local $19) + ) + ) + ) + (i32.eqz + (i32.load offset=4 + (get_local $12) + ) + ) + ) + ) + (block (result i32) + (set_local $9 + (i32.const 4091) + ) + (i32.const 0) + ) + (block (result i32) + (set_local $9 + (i32.add + (i32.shr_s + (get_local $18) + (i32.const 4) + ) + (i32.const 4091) + ) + ) + (i32.const 2) + ) + ) + ) + (br $__rjti$8) + ) + ) + ) + (set_local $5 + (call $_fmt_u + (get_local $5) + (get_local $7) + (get_local $27) + ) + ) + (set_local $7 + (get_local $12) + ) + (br $__rjti$8) + ) + (set_local $18 + (i32.eqz + (tee_local $13 + (call $_memchr + (get_local $5) + (i32.const 0) + (get_local $6) + ) + ) + ) + ) + (set_local $7 + (get_local $5) + ) + (set_local $12 + (get_local $8) + ) + (set_local $11 + (select + (get_local $6) + (i32.sub + (get_local $13) + (get_local $5) + ) + (get_local $18) + ) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjto$8 + (select + (i32.add + (get_local $5) + (get_local $6) + ) + (get_local $13) + (get_local $18) + ) + ) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $6 + (i32.load + (get_local $19) + ) + ) + (loop $while-in125 + (block $while-out124 + (br_if $while-out124 + (i32.eqz + (tee_local $9 + (i32.load + (get_local $6) + ) + ) + ) + ) + (br_if $while-out124 + (i32.or + (i32.lt_s + (tee_local $7 + (call $_wctomb + (get_local $38) + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.gt_u + (get_local $7) + (i32.sub + (get_local $8) + (get_local $5) + ) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (br_if $while-in125 + (i32.gt_u + (get_local $8) + (tee_local $5 + (i32.add + (get_local $7) + (get_local $5) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_s + (get_local $7) + (i32.const 0) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $5) + (get_local $12) + ) + (if + (get_local $5) + (block + (set_local $6 + (i32.const 0) + ) + (set_local $7 + (i32.load + (get_local $19) + ) + ) + (loop $while-in127 + (if + (i32.eqz + (tee_local $8 + (i32.load + (get_local $7) + ) + ) + ) + (block + (set_local $7 + (get_local $5) + ) + (br $__rjti$7) + ) + ) + (if + (i32.gt_s + (tee_local $6 + (i32.add + (tee_local $8 + (call $_wctomb + (get_local $38) + (get_local $8) + ) + ) + (get_local $6) + ) + ) + (get_local $5) + ) + (block + (set_local $7 + (get_local $5) + ) + (br $__rjti$7) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $38) + (get_local $8) + (get_local $0) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (br_if $while-in127 + (i32.lt_u + (get_local $6) + (get_local $5) + ) + ) + (set_local $7 + (get_local $5) + ) + ) + ) + (set_local $7 + (i32.const 0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $12) + (i32.const 8192) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (select + (get_local $14) + (get_local $7) + (i32.gt_s + (get_local $14) + (get_local $7) + ) + ) + ) + (br $label$continue$L1) + ) + (set_local $12 + (select + (i32.and + (get_local $7) + (i32.const -65537) + ) + (get_local $7) + (i32.gt_s + (get_local $6) + (i32.const -1) + ) + ) + ) + (set_local $11 + (if (result i32) + (i32.or + (get_local $6) + (tee_local $11 + (i32.or + (i32.ne + (i32.load + (tee_local $7 + (get_local $19) + ) + ) + (i32.const 0) + ) + (i32.ne + (i32.load offset=4 + (get_local $7) + ) + (i32.const 0) + ) + ) + ) + ) + (block (result i32) + (set_local $7 + (get_local $5) + ) + (select + (get_local $6) + (tee_local $5 + (i32.add + (i32.xor + (i32.and + (get_local $11) + (i32.const 1) + ) + (i32.const 1) + ) + (i32.sub + (get_local $41) + (get_local $5) + ) + ) + ) + (i32.gt_s + (get_local $6) + (get_local $5) + ) + ) + ) + (block (result i32) + (set_local $7 + (get_local $27) + ) + (i32.const 0) + ) + ) + ) + (get_local $27) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (tee_local $6 + (select + (tee_local $5 + (i32.add + (get_local $8) + (tee_local $11 + (select + (tee_local $13 + (i32.sub + (get_local $5) + (get_local $7) + ) + ) + (get_local $11) + (i32.lt_s + (get_local $11) + (get_local $13) + ) + ) + ) + ) + ) + (get_local $14) + (i32.lt_s + (get_local $14) + (get_local $5) + ) + ) + ) + (get_local $5) + (get_local $12) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $9) + (get_local $8) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $6) + (get_local $5) + (i32.xor + (get_local $12) + (i32.const 65536) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $11) + (get_local $13) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $7) + (get_local $13) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $6) + (get_local $5) + (i32.xor + (get_local $12) + (i32.const 8192) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $6) + ) + (br $label$continue$L1) + ) + ) + (br $label$break$L343) + ) + (if + (i32.eqz + (get_local $0) + ) + (if + (get_local $1) + (block + (set_local $0 + (i32.const 1) + ) + (loop $while-in130 + (if + (tee_local $1 + (i32.load + (i32.add + (get_local $4) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + ) + ) + (block + (call $_pop_arg_336 + (i32.add + (get_local $3) + (i32.shl + (get_local $0) + (i32.const 3) + ) + ) + (get_local $1) + (get_local $2) + ) + (br_if $while-in130 + (i32.lt_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.const 10) + ) + ) + (set_local $16 + (i32.const 1) + ) + (br $label$break$L343) + ) + ) + ) + (if + (i32.lt_s + (get_local $0) + (i32.const 10) + ) + (loop $while-in132 + (if + (i32.load + (i32.add + (get_local $4) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L343) + ) + ) + (br_if $while-in132 + (i32.lt_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.const 10) + ) + ) + (set_local $16 + (i32.const 1) + ) + ) + (set_local $16 + (i32.const 1) + ) + ) + ) + (set_local $16 + (i32.const 0) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $26) + ) + (get_local $16) + ) + (func $_pop_arg_336 (; 45 ;) (type $10) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 f64) + (local $5 i32) + (block $label$break$L1 + (if + (i32.le_u + (get_local $1) + (i32.const 20) + ) + (block $switch-default + (block $switch-case9 + (block $switch-case8 + (block $switch-case7 + (block $switch-case6 + (block $switch-case5 + (block $switch-case4 + (block $switch-case3 + (block $switch-case2 + (block $switch-case1 + (block $switch-case + (br_table $switch-case $switch-case1 $switch-case2 $switch-case3 $switch-case4 $switch-case5 $switch-case6 $switch-case7 $switch-case8 $switch-case9 $switch-default + (i32.sub + (get_local $1) + (i32.const 9) + ) + ) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + (br $label$break$L1) + ) + (set_local $1 + (i32.load + (tee_local $3 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $1) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $5 + (i32.load + (tee_local $3 + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + ) + (set_local $3 + (i32.load offset=4 + (get_local $3) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (i32.store + (get_local $0) + (get_local $5) + ) + (i32.store offset=4 + (get_local $0) + (get_local $3) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (tee_local $1 + (i32.shr_s + (i32.shl + (i32.and + (get_local $3) + (i32.const 65535) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $3) + (i32.const 65535) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (tee_local $1 + (i32.shr_s + (i32.shl + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $4 + (f64.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (f64.store + (get_local $0) + (get_local $4) + ) + (br $label$break$L1) + ) + (set_local $4 + (f64.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (f64.store + (get_local $0) + (get_local $4) + ) + ) + ) + ) + ) + (func $_fmt_u (; 46 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (if + (i32.or + (i32.gt_u + (get_local $1) + (i32.const 0) + ) + (i32.and + (i32.eqz + (get_local $1) + ) + (i32.gt_u + (get_local $0) + (i32.const -1) + ) + ) + ) + (loop $while-in + (i32.store8 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.or + (call $___uremdi3 + (get_local $0) + (get_local $1) + (i32.const 10) + (i32.const 0) + ) + (i32.const 48) + ) + ) + (set_local $3 + (call $___udivdi3 + (get_local $0) + (get_local $1) + (i32.const 10) + (i32.const 0) + ) + ) + (set_local $4 + (get_global $tempRet0) + ) + (if + (i32.or + (i32.gt_u + (get_local $1) + (i32.const 9) + ) + (i32.and + (i32.eq + (get_local $1) + (i32.const 9) + ) + (i32.gt_u + (get_local $0) + (i32.const -1) + ) + ) + ) + (block + (set_local $0 + (get_local $3) + ) + (set_local $1 + (get_local $4) + ) + (br $while-in) + ) + (set_local $0 + (get_local $3) + ) + ) + ) + ) + (if + (get_local $0) + (loop $while-in1 + (set_local $1 + (get_local $0) + ) + (i32.store8 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.or + (i32.rem_u + (get_local $1) + (i32.const 10) + ) + (i32.const 48) + ) + ) + (set_local $1 + (get_local $0) + ) + (set_local $1 + (i32.div_u + (get_local $1) + (i32.const 10) + ) + ) + (if + (i32.ge_u + (get_local $0) + (i32.const 10) + ) + (block + (set_local $0 + (get_local $1) + ) + (br $while-in1) + ) + ) + ) + ) + (get_local $2) + ) + (func $_pad (; 47 ;) (type $11) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 256) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $6 + (get_local $7) + ) + (block $do-once + (if + (i32.and + (i32.gt_s + (get_local $2) + (get_local $3) + ) + (i32.eqz + (i32.and + (get_local $4) + (i32.const 73728) + ) + ) + ) + (block $block + (drop + (call $_memset + (get_local $6) + (get_local $1) + (select + (i32.const 256) + (tee_local $5 + (i32.sub + (get_local $2) + (get_local $3) + ) + ) + (i32.gt_u + (get_local $5) + (i32.const 256) + ) + ) + ) + ) + (set_local $4 + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.const 32) + ) + ) + ) + (if + (i32.gt_u + (get_local $5) + (i32.const 255) + ) + (block $block271 + (loop $while-in + (if + (get_local $4) + (block $block273 + (drop + (call $___fwritex + (get_local $6) + (i32.const 256) + (get_local $0) + ) + ) + (set_local $1 + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $4 + (i32.eqz + (i32.and + (get_local $1) + (i32.const 32) + ) + ) + ) + (br_if $while-in + (i32.gt_u + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -256) + ) + ) + (i32.const 255) + ) + ) + ) + (br_if $do-once + (i32.eqz + (get_local $4) + ) + ) + (set_local $5 + (i32.and + (i32.sub + (get_local $2) + (get_local $3) + ) + (i32.const 255) + ) + ) + ) + (br_if $do-once + (i32.eqz + (get_local $4) + ) + ) + ) + (drop + (call $___fwritex + (get_local $6) + (get_local $5) + (get_local $0) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + ) + (func $_malloc (; 48 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (block $folding-inner0 + (block $do-once + (if + (i32.lt_u + (get_local $0) + (i32.const 245) + ) + (block + (if + (i32.and + (tee_local $5 + (i32.shr_u + (tee_local $11 + (i32.load + (i32.const 176) + ) + ) + (tee_local $13 + (i32.shr_u + (tee_local $4 + (select + (i32.const 16) + (i32.and + (i32.add + (get_local $0) + (i32.const 11) + ) + (i32.const -8) + ) + (i32.lt_u + (get_local $0) + (i32.const 11) + ) + ) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 3) + ) + (block + (set_local $10 + (i32.load + (tee_local $1 + (i32.add + (tee_local $7 + (i32.load + (tee_local $3 + (i32.add + (tee_local $2 + (i32.add + (i32.shl + (tee_local $4 + (i32.add + (i32.xor + (i32.and + (get_local $5) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $13) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $2) + (get_local $10) + ) + (i32.store + (i32.const 176) + (i32.and + (get_local $11) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $4) + ) + (i32.const -1) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + ) + (get_local $7) + ) + (block + (i32.store + (get_local $0) + (get_local $2) + ) + (i32.store + (get_local $3) + (get_local $10) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=4 + (get_local $7) + (i32.or + (tee_local $0 + (i32.shl + (get_local $4) + (i32.const 3) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $7) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + (return + (get_local $1) + ) + ) + ) + (if + (i32.gt_u + (get_local $4) + (tee_local $0 + (i32.load + (i32.const 184) + ) + ) + ) + (block + (if + (get_local $5) + (block + (set_local $10 + (i32.and + (i32.shr_u + (tee_local $3 + (i32.add + (i32.and + (tee_local $3 + (i32.and + (i32.shl + (get_local $5) + (get_local $13) + ) + (i32.or + (tee_local $3 + (i32.shl + (i32.const 2) + (get_local $13) + ) + ) + (i32.sub + (i32.const 0) + (get_local $3) + ) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $3) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $9 + (i32.load + (tee_local $7 + (i32.add + (tee_local $12 + (i32.load + (tee_local $3 + (i32.add + (tee_local $10 + (i32.add + (i32.shl + (tee_local $5 + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $3) + (get_local $10) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $10) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $10) + (get_local $9) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (get_local $11) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $8 + (get_local $0) + ) + ) + (block + (if + (i32.lt_u + (get_local $9) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $9) + (i32.const 12) + ) + ) + ) + (get_local $12) + ) + (block + (i32.store + (get_local $0) + (get_local $10) + ) + (i32.store + (get_local $3) + (get_local $9) + ) + (set_local $8 + (i32.load + (i32.const 184) + ) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.or + (get_local $4) + (i32.const 3) + ) + ) + (i32.store offset=4 + (tee_local $10 + (i32.add + (get_local $12) + (get_local $4) + ) + ) + (i32.or + (tee_local $5 + (i32.sub + (i32.shl + (get_local $5) + (i32.const 3) + ) + (get_local $4) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $10) + (get_local $5) + ) + (get_local $5) + ) + (if + (get_local $8) + (block + (set_local $12 + (i32.load + (i32.const 196) + ) + ) + (set_local $4 + (i32.add + (i32.shl + (tee_local $0 + (i32.shr_u + (get_local $8) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $3 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $2 + (get_local $3) + ) + (set_local $1 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $3) + (get_local $0) + ) + ) + (set_local $2 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (set_local $1 + (get_local $4) + ) + ) + ) + (i32.store + (get_local $2) + (get_local $12) + ) + (i32.store offset=12 + (get_local $1) + (get_local $12) + ) + (i32.store offset=8 + (get_local $12) + (get_local $1) + ) + (i32.store offset=12 + (get_local $12) + (get_local $4) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $5) + ) + (i32.store + (i32.const 196) + (get_local $10) + ) + (return + (get_local $7) + ) + ) + ) + (if + (tee_local $0 + (i32.load + (i32.const 180) + ) + ) + (block + (set_local $2 + (i32.and + (i32.shr_u + (tee_local $0 + (i32.add + (i32.and + (get_local $0) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $7 + (i32.sub + (i32.and + (i32.load offset=4 + (tee_local $0 + (i32.load offset=480 + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $0) + (get_local $2) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $2) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const -8) + ) + (get_local $4) + ) + ) + (set_local $1 + (get_local $0) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (tee_local $0 + (i32.load offset=16 + (get_local $1) + ) + ) + ) + (if + (i32.eqz + (tee_local $0 + (i32.load offset=20 + (get_local $1) + ) + ) + ) + (block + (set_local $10 + (get_local $7) + ) + (set_local $5 + (get_local $2) + ) + (br $while-out) + ) + ) + ) + (set_local $10 + (i32.lt_u + (tee_local $1 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $4) + ) + ) + (get_local $7) + ) + ) + (set_local $7 + (select + (get_local $1) + (get_local $7) + (get_local $10) + ) + ) + (set_local $1 + (get_local $0) + ) + (set_local $2 + (select + (get_local $0) + (get_local $2) + (get_local $10) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (get_local $5) + (tee_local $12 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $5) + (tee_local $11 + (i32.add + (get_local $5) + (get_local $4) + ) + ) + ) + (call $_abort) + ) + (set_local $8 + (i32.load offset=24 + (get_local $5) + ) + ) + (block $do-once4 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $5) + ) + ) + (get_local $5) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $5) + (i32.const 20) + ) + ) + ) + ) + ) + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + ) + ) + (block + (set_local $9 + (i32.const 0) + ) + (br $do-once4) + ) + ) + ) + (loop $while-in7 + (if + (tee_local $2 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $0 + (get_local $7) + ) + (br $while-in7) + ) + ) + (if + (tee_local $2 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $0 + (get_local $7) + ) + (br $while-in7) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $12) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $9 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $7 + (i32.load offset=8 + (get_local $5) + ) + ) + (get_local $12) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $2 + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + ) + (get_local $5) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $5) + ) + (block + (i32.store + (get_local $2) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $7) + ) + (set_local $9 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once8 + (if + (get_local $8) + (block + (if + (i32.eq + (get_local $5) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $5) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $9) + ) + (if + (i32.eqz + (get_local $9) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $8) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + ) + (get_local $5) + ) + (i32.store + (get_local $0) + (get_local $9) + ) + (i32.store offset=20 + (get_local $8) + (get_local $9) + ) + ) + (br_if $do-once8 + (i32.eqz + (get_local $9) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $9) + (tee_local $0 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $9) + (get_local $8) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $5) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $0) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $9) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $9) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=20 + (get_local $5) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $9) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $9) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $10) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $5) + (i32.or + (tee_local $0 + (i32.add + (get_local $10) + (get_local $4) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $5) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $5) + (i32.or + (get_local $4) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $11) + (i32.or + (get_local $10) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $11) + (get_local $10) + ) + (get_local $10) + ) + (if + (tee_local $0 + (i32.load + (i32.const 184) + ) + ) + (block + (set_local $4 + (i32.load + (i32.const 196) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $0 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $6 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $6 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (set_local $3 + (get_local $2) + ) + ) + ) + (i32.store + (get_local $6) + (get_local $4) + ) + (i32.store offset=12 + (get_local $3) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $3) + ) + (i32.store offset=12 + (get_local $4) + (get_local $2) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $10) + ) + (i32.store + (i32.const 196) + (get_local $11) + ) + ) + ) + (return + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (if + (i32.gt_u + (get_local $0) + (i32.const -65) + ) + (set_local $0 + (i32.const -1) + ) + (block + (set_local $2 + (i32.and + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 11) + ) + ) + (i32.const -8) + ) + ) + (if + (tee_local $18 + (i32.load + (i32.const 180) + ) + ) + (block + (set_local $14 + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $0) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $2) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $2) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $3 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $3) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (set_local $3 + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + (block $__rjto$3 + (block $__rjti$3 + (if + (tee_local $0 + (i32.load offset=480 + (i32.shl + (get_local $14) + (i32.const 2) + ) + ) + ) + (block + (set_local $6 + (i32.const 0) + ) + (set_local $8 + (i32.shl + (get_local $2) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $14) + (i32.const 1) + ) + ) + (i32.eq + (get_local $14) + (i32.const 31) + ) + ) + ) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in14 + (if + (i32.lt_u + (tee_local $4 + (i32.sub + (tee_local $9 + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + ) + (get_local $2) + ) + ) + (get_local $3) + ) + (if + (i32.eq + (get_local $9) + (get_local $2) + ) + (block + (set_local $1 + (get_local $4) + ) + (set_local $3 + (get_local $0) + ) + (br $__rjti$3) + ) + (block + (set_local $3 + (get_local $4) + ) + (set_local $1 + (get_local $0) + ) + ) + ) + ) + (set_local $0 + (select + (get_local $6) + (tee_local $4 + (i32.load offset=20 + (get_local $0) + ) + ) + (i32.or + (i32.eqz + (get_local $4) + ) + (i32.eq + (get_local $4) + (tee_local $9 + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $8) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $4 + (i32.shl + (get_local $8) + (i32.xor + (tee_local $6 + (i32.eqz + (get_local $9) + ) + ) + (i32.const 1) + ) + ) + ) + (if + (get_local $6) + (block + (set_local $4 + (get_local $0) + ) + (set_local $0 + (get_local $1) + ) + ) + (block + (set_local $6 + (get_local $0) + ) + (set_local $8 + (get_local $4) + ) + (set_local $0 + (get_local $9) + ) + (br $while-in14) + ) + ) + ) + ) + (block + (set_local $4 + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + (if + (i32.and + (i32.eqz + (get_local $4) + ) + (i32.eqz + (get_local $0) + ) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.and + (get_local $18) + (i32.or + (tee_local $1 + (i32.shl + (i32.const 2) + (get_local $14) + ) + ) + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $2) + ) + (br $do-once) + ) + ) + (set_local $9 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.add + (i32.and + (get_local $1) + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $4 + (i32.load offset=480 + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $1) + (get_local $9) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $9) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (if + (get_local $4) + (block + (set_local $1 + (get_local $3) + ) + (set_local $3 + (get_local $4) + ) + (br $__rjti$3) + ) + (set_local $4 + (get_local $0) + ) + ) + (br $__rjto$3) + ) + (loop $while-in16 + (set_local $9 + (i32.lt_u + (tee_local $4 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const -8) + ) + (get_local $2) + ) + ) + (get_local $1) + ) + ) + (set_local $1 + (select + (get_local $4) + (get_local $1) + (get_local $9) + ) + ) + (set_local $0 + (select + (get_local $3) + (get_local $0) + (get_local $9) + ) + ) + (if + (tee_local $4 + (i32.load offset=16 + (get_local $3) + ) + ) + (block + (set_local $3 + (get_local $4) + ) + (br $while-in16) + ) + ) + (br_if $while-in16 + (tee_local $3 + (i32.load offset=20 + (get_local $3) + ) + ) + ) + (set_local $3 + (get_local $1) + ) + (set_local $4 + (get_local $0) + ) + ) + ) + (if + (get_local $4) + (if + (i32.lt_u + (get_local $3) + (i32.sub + (i32.load + (i32.const 184) + ) + (get_local $2) + ) + ) + (block + (if + (i32.lt_u + (get_local $4) + (tee_local $12 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $4) + (tee_local $6 + (i32.add + (get_local $4) + (get_local $2) + ) + ) + ) + (call $_abort) + ) + (set_local $9 + (i32.load offset=24 + (get_local $4) + ) + ) + (block $do-once17 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $4) + ) + ) + (get_local $4) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + ) + ) + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 16) + ) + ) + ) + ) + ) + (block + (set_local $11 + (i32.const 0) + ) + (br $do-once17) + ) + ) + ) + (loop $while-in20 + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $7) + ) + (set_local $0 + (get_local $10) + ) + (br $while-in20) + ) + ) + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $7) + ) + (set_local $0 + (get_local $10) + ) + (br $while-in20) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $12) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $11 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $10 + (i32.load offset=8 + (get_local $4) + ) + ) + (get_local $12) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $7 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + ) + (get_local $4) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $4) + ) + (block + (i32.store + (get_local $7) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $10) + ) + (set_local $11 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once21 + (if + (get_local $9) + (block + (if + (i32.eq + (get_local $4) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $4) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $11) + ) + (if + (i32.eqz + (get_local $11) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $9) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $9) + (i32.const 16) + ) + ) + ) + (get_local $4) + ) + (i32.store + (get_local $0) + (get_local $11) + ) + (i32.store offset=20 + (get_local $9) + (get_local $11) + ) + ) + (br_if $do-once21 + (i32.eqz + (get_local $11) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $11) + (tee_local $0 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $11) + (get_local $9) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $4) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $0) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $11) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $11) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=20 + (get_local $4) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $11) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $11) + ) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.lt_u + (get_local $3) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $4) + (i32.or + (tee_local $0 + (i32.add + (get_local $3) + (get_local $2) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $4) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $2) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $6) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $6) + (get_local $3) + ) + (get_local $3) + ) + (set_local $0 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $3) + (i32.const 256) + ) + (block + (set_local $3 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $13 + (get_local $1) + ) + (set_local $5 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $13 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $5 + (get_local $3) + ) + ) + ) + (i32.store + (get_local $13) + (get_local $6) + ) + (i32.store offset=12 + (get_local $5) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $5) + ) + (i32.store offset=12 + (get_local $6) + (get_local $3) + ) + (br $do-once25) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $7 + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $3) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $3) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $2 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $2) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $6) + (get_local $7) + ) + (i32.store offset=4 + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (i32.const 180) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $7) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $2) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $2) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once25) + ) + ) + (set_local $7 + (i32.shl + (get_local $3) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $7) + (i32.const 1) + ) + ) + (i32.eq + (get_local $7) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $2) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (loop $while-in28 + (br_if $__rjti$1 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $2 + (i32.shl + (get_local $7) + (i32.const 1) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $7 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $7) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $2) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in28) + ) + ) + ) + (if + (i32.lt_u + (get_local $7) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $7) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $0) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once25) + ) + ) + (br $__rjto$1) + ) + (if + (i32.and + (i32.ge_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $2) + (get_local $6) + ) + (i32.store + (get_local $3) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $2) + ) + (i32.store offset=12 + (get_local $6) + (get_local $0) + ) + (i32.store offset=24 + (get_local $6) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (return + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (set_local $0 + (get_local $2) + ) + ) + (set_local $0 + (get_local $2) + ) + ) + ) + (set_local $0 + (get_local $2) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (tee_local $1 + (i32.load + (i32.const 184) + ) + ) + (get_local $0) + ) + (block + (set_local $2 + (i32.load + (i32.const 196) + ) + ) + (if + (i32.gt_u + (tee_local $3 + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + (i32.const 15) + ) + (block + (i32.store + (i32.const 196) + (tee_local $1 + (i32.add + (get_local $2) + (get_local $0) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $3) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $3) + ) + (get_local $3) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + ) + (block + (i32.store + (i32.const 184) + (i32.const 0) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $1) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $2) + (get_local $1) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + ) + (return + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (br_if $folding-inner0 + (i32.gt_u + (tee_local $1 + (i32.load + (i32.const 188) + ) + ) + (get_local $0) + ) + ) + (if + (i32.eqz + (i32.load + (i32.const 648) + ) + ) + (if + (i32.and + (i32.add + (tee_local $1 + (call $_sysconf + (i32.const 30) + ) + ) + (i32.const -1) + ) + (get_local $1) + ) + (call $_abort) + (block + (i32.store + (i32.const 656) + (get_local $1) + ) + (i32.store + (i32.const 652) + (get_local $1) + ) + (i32.store + (i32.const 660) + (i32.const -1) + ) + (i32.store + (i32.const 664) + (i32.const -1) + ) + (i32.store + (i32.const 668) + (i32.const 0) + ) + (i32.store + (i32.const 620) + (i32.const 0) + ) + (i32.store + (i32.const 648) + (i32.xor + (i32.and + (call $_time + (i32.const 0) + ) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + ) + ) + ) + (if + (i32.le_u + (tee_local $5 + (i32.and + (tee_local $6 + (i32.add + (tee_local $1 + (i32.load + (i32.const 656) + ) + ) + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 47) + ) + ) + ) + ) + (tee_local $9 + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + ) + ) + (get_local $0) + ) + (return + (i32.const 0) + ) + ) + (if + (tee_local $2 + (i32.load + (i32.const 616) + ) + ) + (if + (i32.or + (i32.le_u + (tee_local $1 + (i32.add + (tee_local $3 + (i32.load + (i32.const 608) + ) + ) + (get_local $5) + ) + ) + (get_local $3) + ) + (i32.gt_u + (get_local $1) + (get_local $2) + ) + ) + (return + (i32.const 0) + ) + ) + ) + (set_local $11 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + (block $__rjto$13 + (block $__rjti$13 + (if + (i32.eqz + (i32.and + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + ) + (block + (block $label$break$L279 + (block $__rjti$5 + (block $__rjti$4 + (br_if $__rjti$4 + (i32.eqz + (tee_local $4 + (i32.load + (i32.const 200) + ) + ) + ) + ) + (set_local $1 + (i32.const 624) + ) + (loop $while-in34 + (block $while-out33 + (if + (i32.le_u + (tee_local $3 + (i32.load + (get_local $1) + ) + ) + (get_local $4) + ) + (if + (i32.gt_u + (i32.add + (get_local $3) + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + ) + ) + (get_local $4) + ) + (block + (set_local $4 + (get_local $1) + ) + (br $while-out33) + ) + ) + ) + (br_if $while-in34 + (tee_local $1 + (i32.load offset=8 + (get_local $1) + ) + ) + ) + (br $__rjti$4) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.and + (i32.sub + (get_local $6) + (i32.load + (i32.const 188) + ) + ) + (get_local $9) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (tee_local $1 + (call $_sbrk + (get_local $3) + ) + ) + (i32.add + (i32.load + (get_local $4) + ) + (i32.load + (get_local $2) + ) + ) + ) + (br_if $__rjti$13 + (i32.ne + (get_local $1) + (i32.const -1) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (br $__rjti$5) + ) + ) + ) + (br $label$break$L279) + ) + (if + (i32.ne + (tee_local $1 + (call $_sbrk + (i32.const 0) + ) + ) + (i32.const -1) + ) + (block + (set_local $3 + (if (result i32) + (i32.and + (tee_local $2 + (i32.add + (tee_local $4 + (i32.load + (i32.const 652) + ) + ) + (i32.const -1) + ) + ) + (tee_local $3 + (get_local $1) + ) + ) + (i32.add + (i32.sub + (get_local $5) + (get_local $3) + ) + (i32.and + (i32.add + (get_local $2) + (get_local $3) + ) + (i32.sub + (i32.const 0) + (get_local $4) + ) + ) + ) + (get_local $5) + ) + ) + (set_local $9 + (i32.add + (tee_local $4 + (i32.load + (i32.const 608) + ) + ) + (get_local $3) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $3) + (get_local $0) + ) + (i32.lt_u + (get_local $3) + (i32.const 2147483647) + ) + ) + (block + (if + (tee_local $2 + (i32.load + (i32.const 616) + ) + ) + (br_if $label$break$L279 + (i32.or + (i32.le_u + (get_local $9) + (get_local $4) + ) + (i32.gt_u + (get_local $9) + (get_local $2) + ) + ) + ) + ) + (br_if $__rjti$13 + (i32.eq + (tee_local $2 + (call $_sbrk + (get_local $3) + ) + ) + (get_local $1) + ) + ) + (br $__rjti$5) + ) + ) + ) + ) + (br $label$break$L279) + ) + (set_local $4 + (i32.sub + (i32.const 0) + (tee_local $1 + (get_local $3) + ) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $11) + (get_local $1) + ) + (i32.and + (i32.lt_u + (get_local $1) + (i32.const 2147483647) + ) + (i32.ne + (get_local $2) + (i32.const -1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.and + (i32.add + (i32.sub + (get_local $8) + (get_local $1) + ) + (tee_local $3 + (i32.load + (i32.const 656) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $3) + ) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (call $_sbrk + (get_local $3) + ) + (i32.const -1) + ) + (block + (drop + (call $_sbrk + (get_local $4) + ) + ) + (br $label$break$L279) + ) + (set_local $3 + (i32.add + (get_local $3) + (get_local $1) + ) + ) + ) + (set_local $3 + (get_local $1) + ) + ) + (set_local $3 + (get_local $1) + ) + ) + (if + (i32.ne + (get_local $2) + (i32.const -1) + ) + (block + (set_local $1 + (get_local $2) + ) + (br $__rjti$13) + ) + ) + ) + (i32.store + (i32.const 620) + (i32.or + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.const 2147483647) + ) + (if + (i32.and + (i32.lt_u + (tee_local $1 + (call $_sbrk + (get_local $5) + ) + ) + (tee_local $3 + (call $_sbrk + (i32.const 0) + ) + ) + ) + (i32.and + (i32.ne + (get_local $1) + (i32.const -1) + ) + (i32.ne + (get_local $3) + (i32.const -1) + ) + ) + ) + (br_if $__rjti$13 + (i32.gt_u + (tee_local $3 + (i32.sub + (get_local $3) + (get_local $1) + ) + ) + (i32.add + (get_local $0) + (i32.const 40) + ) + ) + ) + ) + ) + (br $__rjto$13) + ) + (i32.store + (i32.const 608) + (tee_local $2 + (i32.add + (i32.load + (i32.const 608) + ) + (get_local $3) + ) + ) + ) + (if + (i32.gt_u + (get_local $2) + (i32.load + (i32.const 612) + ) + ) + (i32.store + (i32.const 612) + (get_local $2) + ) + ) + (block $do-once40 + (if + (tee_local $6 + (i32.load + (i32.const 200) + ) + ) + (block + (set_local $2 + (i32.const 624) + ) + (block $__rjto$10 + (block $__rjti$10 + (loop $while-in45 + (br_if $__rjti$10 + (i32.eq + (get_local $1) + (i32.add + (tee_local $11 + (i32.load + (get_local $2) + ) + ) + (tee_local $5 + (i32.load + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + ) + ) + ) + ) + ) + (br_if $while-in45 + (tee_local $2 + (i32.load offset=8 + (get_local $2) + ) + ) + ) + ) + (br $__rjto$10) + ) + (if + (i32.eqz + (i32.and + (i32.load offset=12 + (get_local $2) + ) + (i32.const 8) + ) + ) + (if + (i32.and + (i32.lt_u + (get_local $6) + (get_local $1) + ) + (i32.ge_u + (get_local $6) + (get_local $11) + ) + ) + (block + (i32.store + (get_local $4) + (i32.add + (get_local $5) + (get_local $3) + ) + ) + (set_local $2 + (i32.add + (get_local $6) + (tee_local $1 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + ) + (set_local $1 + (i32.add + (i32.sub + (get_local $3) + (get_local $1) + ) + (i32.load + (i32.const 188) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $2) + ) + (i32.store + (i32.const 188) + (get_local $1) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $1) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $2) + (get_local $1) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (br $do-once40) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (tee_local $4 + (i32.load + (i32.const 192) + ) + ) + ) + (block + (i32.store + (i32.const 192) + (get_local $1) + ) + (set_local $4 + (get_local $1) + ) + ) + ) + (set_local $11 + (i32.add + (get_local $1) + (get_local $3) + ) + ) + (set_local $2 + (i32.const 624) + ) + (block $__rjto$11 + (block $__rjti$11 + (loop $while-in47 + (if + (i32.eq + (i32.load + (get_local $2) + ) + (get_local $11) + ) + (block + (set_local $5 + (get_local $2) + ) + (br $__rjti$11) + ) + ) + (br_if $while-in47 + (tee_local $2 + (i32.load offset=8 + (get_local $2) + ) + ) + ) + (set_local $4 + (i32.const 624) + ) + ) + (br $__rjto$11) + ) + (if + (i32.and + (i32.load offset=12 + (get_local $2) + ) + (i32.const 8) + ) + (set_local $4 + (i32.const 624) + ) + (block + (i32.store + (get_local $5) + (get_local $1) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (i32.add + (i32.load + (get_local $2) + ) + (get_local $3) + ) + ) + (set_local $8 + (i32.add + (tee_local $9 + (i32.add + (get_local $1) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + (get_local $0) + ) + ) + (set_local $7 + (i32.sub + (i32.sub + (tee_local $5 + (i32.add + (get_local $11) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + (get_local $9) + ) + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $9) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + (block $do-once48 + (if + (i32.eq + (get_local $5) + (get_local $6) + ) + (block + (i32.store + (i32.const 188) + (tee_local $0 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $7) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $8) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + ) + (block + (if + (i32.eq + (get_local $5) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (tee_local $0 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $7) + ) + ) + ) + (i32.store + (i32.const 196) + (get_local $8) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $8) + (get_local $0) + ) + (get_local $0) + ) + (br $do-once48) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (if (result i32) + (i32.eq + (i32.and + (tee_local $0 + (i32.load offset=4 + (get_local $5) + ) + ) + (i32.const 3) + ) + (i32.const 1) + ) + (block (result i32) + (set_local $11 + (i32.and + (get_local $0) + (i32.const -8) + ) + ) + (set_local $1 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (block $label$break$L331 + (if + (i32.lt_u + (get_local $0) + (i32.const 256) + ) + (block + (set_local $2 + (i32.load offset=12 + (get_local $5) + ) + ) + (block $do-once51 + (if + (i32.ne + (tee_local $3 + (i32.load offset=8 + (get_local $5) + ) + ) + (tee_local $0 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $3) + (get_local $4) + ) + (call $_abort) + ) + (br_if $do-once51 + (i32.eq + (i32.load offset=12 + (get_local $3) + ) + (get_local $5) + ) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $2) + (get_local $3) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + ) + (block $do-once53 + (if + (i32.eq + (get_local $2) + (get_local $0) + ) + (set_local $15 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $2) + (get_local $4) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + (get_local $5) + ) + (block + (set_local $15 + (get_local $0) + ) + (br $do-once53) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $3) + (get_local $2) + ) + (i32.store + (get_local $15) + (get_local $3) + ) + ) + (block + (set_local $6 + (i32.load offset=24 + (get_local $5) + ) + ) + (block $do-once55 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $5) + ) + ) + (get_local $5) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (tee_local $3 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load + (get_local $3) + ) + ) + (set_local $0 + (get_local $3) + ) + (block + (set_local $12 + (i32.const 0) + ) + (br $do-once55) + ) + ) + ) + (loop $while-in58 + (if + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $3) + ) + (set_local $0 + (get_local $2) + ) + (br $while-in58) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $3) + ) + (set_local $0 + (get_local $2) + ) + (br $while-in58) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $4) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $12 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $2 + (i32.load offset=8 + (get_local $5) + ) + ) + (get_local $4) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 12) + ) + ) + ) + (get_local $5) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $5) + ) + (block + (i32.store + (get_local $3) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (set_local $12 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (get_local $6) + ) + ) + (block $do-once59 + (if + (i32.eq + (get_local $5) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $5) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $12) + ) + (br_if $do-once59 + (get_local $12) + ) + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $5) + ) + (i32.store + (get_local $0) + (get_local $12) + ) + (i32.store offset=20 + (get_local $6) + (get_local $12) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (get_local $12) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $12) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $12) + (get_local $6) + ) + (if + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $3) + (get_local $1) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $12) + (get_local $3) + ) + (i32.store offset=24 + (get_local $3) + (get_local $12) + ) + ) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (tee_local $0 + (i32.load offset=4 + (get_local $0) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $12) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $12) + ) + ) + ) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $11) + (get_local $7) + ) + ) + (i32.add + (get_local $5) + (get_local $11) + ) + ) + (get_local $5) + ) + (i32.const 4) + ) + ) + (i32.and + (i32.load + (get_local $0) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $7) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $8) + (get_local $7) + ) + (get_local $7) + ) + (set_local $0 + (i32.shr_u + (get_local $7) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $7) + (i32.const 256) + ) + (block + (set_local $3 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (block $do-once63 + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (block + (if + (i32.ge_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (block + (set_local $16 + (get_local $1) + ) + (set_local $10 + (get_local $0) + ) + (br $do-once63) + ) + ) + (call $_abort) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $16 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $10 + (get_local $3) + ) + ) + ) + ) + (i32.store + (get_local $16) + (get_local $8) + ) + (i32.store offset=12 + (get_local $10) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $10) + ) + (i32.store offset=12 + (get_local $8) + (get_local $3) + ) + (br $do-once48) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (tee_local $2 + (block $do-once65 (result i32) + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $7) + (i32.const 8) + ) + ) + (block (result i32) + (drop + (br_if $do-once65 + (i32.const 31) + (i32.gt_u + (get_local $7) + (i32.const 16777215) + ) + ) + ) + (i32.or + (i32.and + (i32.shr_u + (get_local $7) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $3 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $3) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $8) + (get_local $2) + ) + (i32.store offset=4 + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (i32.const 180) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $2) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $3) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $3) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + (br $do-once48) + ) + ) + (set_local $2 + (i32.shl + (get_local $7) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $2) + (i32.const 1) + ) + ) + (i32.eq + (get_local $2) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $3) + ) + ) + (block $__rjto$7 + (block $__rjti$7 + (loop $while-in68 + (br_if $__rjti$7 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $7) + ) + ) + (set_local $3 + (i32.shl + (get_local $2) + (i32.const 1) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $2) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $3) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in68) + ) + ) + ) + (if + (i32.lt_u + (get_local $2) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $2) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $0) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + (br $do-once48) + ) + ) + (br $__rjto$7) + ) + (if + (i32.and + (i32.ge_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $2) + (get_local $8) + ) + (i32.store + (get_local $3) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $2) + ) + (i32.store offset=12 + (get_local $8) + (get_local $0) + ) + (i32.store offset=24 + (get_local $8) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (return + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + ) + ) + ) + (loop $while-in70 + (block $while-out69 + (if + (i32.le_u + (tee_local $2 + (i32.load + (get_local $4) + ) + ) + (get_local $6) + ) + (br_if $while-out69 + (i32.gt_u + (tee_local $2 + (i32.add + (get_local $2) + (i32.load offset=4 + (get_local $4) + ) + ) + ) + (get_local $6) + ) + ) + ) + (set_local $4 + (i32.load offset=8 + (get_local $4) + ) + ) + (br $while-in70) + ) + ) + (set_local $10 + (i32.add + (tee_local $4 + (i32.add + (get_local $2) + (i32.const -47) + ) + ) + (i32.const 8) + ) + ) + (set_local $12 + (i32.add + (tee_local $11 + (select + (get_local $6) + (tee_local $4 + (i32.add + (get_local $4) + (select + (i32.and + (i32.sub + (i32.const 0) + (get_local $10) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $10) + (i32.const 7) + ) + ) + ) + ) + (i32.lt_u + (get_local $4) + (tee_local $10 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + ) + ) + (i32.const 8) + ) + ) + (i32.store + (i32.const 200) + (tee_local $5 + (i32.add + (get_local $1) + (tee_local $4 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $4) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 188) + (tee_local $4 + (i32.sub + (i32.add + (get_local $3) + (i32.const -40) + ) + (get_local $4) + ) + ) + ) + (i32.store offset=4 + (get_local $5) + (i32.or + (get_local $4) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $5) + (get_local $4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (i32.const 27) + ) + (i32.store + (get_local $12) + (i32.load + (i32.const 624) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.load + (i32.const 628) + ) + ) + (i32.store offset=8 + (get_local $12) + (i32.load + (i32.const 632) + ) + ) + (i32.store offset=12 + (get_local $12) + (i32.load + (i32.const 636) + ) + ) + (i32.store + (i32.const 624) + (get_local $1) + ) + (i32.store + (i32.const 628) + (get_local $3) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 632) + (get_local $12) + ) + (set_local $1 + (i32.add + (get_local $11) + (i32.const 24) + ) + ) + (loop $while-in72 + (i32.store + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.const 7) + ) + (br_if $while-in72 + (i32.lt_u + (i32.add + (get_local $1) + (i32.const 4) + ) + (get_local $2) + ) + ) + ) + (if + (i32.ne + (get_local $11) + (get_local $6) + ) + (block + (i32.store + (get_local $4) + (i32.and + (i32.load + (get_local $4) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $6) + (i32.or + (tee_local $5 + (i32.sub + (get_local $11) + (get_local $6) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (get_local $11) + (get_local $5) + ) + (set_local $1 + (i32.shr_u + (get_local $5) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.const 256) + ) + (block + (set_local $2 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 176) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.load + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $17 + (get_local $3) + ) + (set_local $7 + (get_local $1) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $3) + (get_local $1) + ) + ) + (set_local $17 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (set_local $7 + (get_local $2) + ) + ) + ) + (i32.store + (get_local $17) + (get_local $6) + ) + (i32.store offset=12 + (get_local $7) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $7) + ) + (i32.store offset=12 + (get_local $6) + (get_local $2) + ) + (br $do-once40) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $4 + (if (result i32) + (tee_local $1 + (i32.shr_u + (get_local $5) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $5) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $5) + (i32.add + (tee_local $1 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $3 + (i32.shl + (get_local $1) + (tee_local $2 + (i32.and + (i32.shr_u + (i32.add + (get_local $1) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $2) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $3 + (i32.shl + (get_local $3) + (get_local $1) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $3) + (get_local $1) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $6) + (get_local $4) + ) + (i32.store offset=20 + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $10) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (i32.const 180) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $4) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $3) + (get_local $1) + ) + ) + (i32.store + (get_local $2) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $2) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once40) + ) + ) + (set_local $4 + (i32.shl + (get_local $5) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $4) + (i32.const 1) + ) + ) + (i32.eq + (get_local $4) + (i32.const 31) + ) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $2) + ) + ) + (block $__rjto$9 + (block $__rjti$9 + (loop $while-in74 + (br_if $__rjti$9 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $1) + ) + (i32.const -8) + ) + (get_local $5) + ) + ) + (set_local $2 + (i32.shl + (get_local $4) + (i32.const 1) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $4 + (i32.add + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $4) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $4 + (get_local $2) + ) + (set_local $1 + (get_local $3) + ) + (br $while-in74) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $4) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $1) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once40) + ) + ) + (br $__rjto$9) + ) + (if + (i32.and + (i32.ge_u + (tee_local $4 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (tee_local $3 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $1) + (get_local $3) + ) + ) + (block + (i32.store offset=12 + (get_local $4) + (get_local $6) + ) + (i32.store + (get_local $2) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $4) + ) + (i32.store offset=12 + (get_local $6) + (get_local $1) + ) + (i32.store offset=24 + (get_local $6) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (block + (if + (i32.or + (i32.eqz + (tee_local $2 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.lt_u + (get_local $1) + (get_local $2) + ) + ) + (i32.store + (i32.const 192) + (get_local $1) + ) + ) + (i32.store + (i32.const 624) + (get_local $1) + ) + (i32.store + (i32.const 628) + (get_local $3) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 212) + (i32.load + (i32.const 648) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (set_local $2 + (i32.const 0) + ) + (loop $while-in43 + (i32.store offset=12 + (tee_local $4 + (i32.add + (i32.shl + (get_local $2) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $4) + ) + (br_if $while-in43 + (i32.ne + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 32) + ) + ) + ) + (i32.store + (i32.const 200) + (tee_local $2 + (i32.add + (get_local $1) + (tee_local $1 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 188) + (tee_local $1 + (i32.sub + (i32.add + (get_local $3) + (i32.const -40) + ) + (get_local $1) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $1) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $2) + (get_local $1) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + ) + ) + ) + (br_if $folding-inner0 + (i32.gt_u + (tee_local $1 + (i32.load + (i32.const 188) + ) + ) + (get_local $0) + ) + ) + ) + (i32.store + (if (result i32) + (i32.load + (i32.const 16) + ) + (i32.load offset=60 + (call $_pthread_self) + ) + (i32.const 60) + ) + (i32.const 12) + ) + (return + (i32.const 0) + ) + ) + (i32.store + (i32.const 188) + (tee_local $3 + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + ) + (i32.store + (i32.const 200) + (tee_local $1 + (i32.add + (tee_local $2 + (i32.load + (i32.const 200) + ) + ) + (get_local $0) + ) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (func $_free (; 49 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (if + (i32.eqz + (get_local $0) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $0) + (i32.const -8) + ) + ) + (tee_local $11 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (tee_local $5 + (i32.and + (tee_local $7 + (i32.load + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + ) + (i32.const 3) + ) + ) + (i32.const 1) + ) + (call $_abort) + ) + (set_local $8 + (i32.add + (get_local $1) + (tee_local $0 + (i32.and + (get_local $7) + (i32.const -8) + ) + ) + ) + ) + (block $do-once + (if + (i32.and + (get_local $7) + (i32.const 1) + ) + (block $block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + (block $block558 + (set_local $7 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.sub + (i32.const 0) + (get_local $7) + ) + ) + ) + (get_local $11) + ) + (call $_abort) + ) + (set_local $0 + (i32.add + (get_local $7) + (get_local $0) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.load + (i32.const 196) + ) + ) + (block $block562 + (if + (i32.ne + (i32.and + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 3) + ) + (i32.const 3) + ) + (block $block564 + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 184) + (get_local $0) + ) + (i32.store + (get_local $2) + (i32.and + (get_local $3) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $0) + ) + (get_local $0) + ) + (return) + ) + ) + (set_local $5 + (i32.shr_u + (get_local $7) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $7) + (i32.const 256) + ) + (block $block566 + (set_local $6 + (i32.load offset=12 + (get_local $1) + ) + ) + (if + (i32.ne + (tee_local $2 + (i32.load offset=8 + (get_local $1) + ) + ) + (tee_local $3 + (i32.add + (i32.shl + (get_local $5) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block $block568 + (if + (i32.lt_u + (get_local $2) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $2) + ) + (get_local $1) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $6) + (get_local $2) + ) + (block $block572 + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (get_local $6) + (get_local $3) + ) + (set_local $4 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (block $block574 + (if + (i32.lt_u + (get_local $6) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $3 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (set_local $4 + (get_local $3) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $2) + (get_local $6) + ) + (i32.store + (get_local $4) + (get_local $2) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (set_local $12 + (i32.load offset=24 + (get_local $1) + ) + ) + (block $do-once0 + (if + (i32.eq + (tee_local $4 + (i32.load offset=12 + (get_local $1) + ) + ) + (get_local $1) + ) + (block $block578 + (if + (i32.eqz + (tee_local $5 + (i32.load + (tee_local $4 + (i32.add + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + (set_local $4 + (get_local $7) + ) + (block $block581 + (set_local $6 + (i32.const 0) + ) + (br $do-once0) + ) + ) + ) + (loop $while-in + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $5) + (i32.const 20) + ) + ) + ) + ) + (block $block583 + (set_local $5 + (get_local $7) + ) + (set_local $4 + (get_local $10) + ) + (br $while-in) + ) + ) + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + ) + (block $block585 + (set_local $5 + (get_local $7) + ) + (set_local $4 + (get_local $10) + ) + (br $while-in) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (get_local $11) + ) + (call $_abort) + (block $block587 + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $6 + (get_local $5) + ) + ) + ) + ) + (block $block588 + (if + (i32.lt_u + (tee_local $10 + (i32.load offset=8 + (get_local $1) + ) + ) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $7 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + ) + (get_local $1) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $5 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (block $block592 + (i32.store + (get_local $7) + (get_local $4) + ) + (i32.store + (get_local $5) + (get_local $10) + ) + (set_local $6 + (get_local $4) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $12) + (block $block594 + (if + (i32.eq + (get_local $1) + (i32.load + (tee_local $4 + (i32.add + (i32.shl + (tee_local $5 + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block $block596 + (i32.store + (get_local $4) + (get_local $6) + ) + (if + (i32.eqz + (get_local $6) + ) + (block $block598 + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + ) + (block $block599 + (if + (i32.lt_u + (get_local $12) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $12) + (i32.const 16) + ) + ) + ) + (get_local $1) + ) + (i32.store + (get_local $4) + (get_local $6) + ) + (i32.store offset=20 + (get_local $12) + (get_local $6) + ) + ) + (if + (i32.eqz + (get_local $6) + ) + (block $block603 + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $6) + (tee_local $5 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $6) + (get_local $12) + ) + (if + (tee_local $7 + (i32.load + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $7) + (get_local $5) + ) + (call $_abort) + (block $block607 + (i32.store offset=16 + (get_local $6) + (get_local $7) + ) + (i32.store offset=24 + (get_local $7) + (get_local $6) + ) + ) + ) + ) + (if + (tee_local $4 + (i32.load offset=4 + (get_local $4) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block $block610 + (i32.store offset=20 + (get_local $6) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $6) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + (block $block611 + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + ) + (block $block612 + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (get_local $2) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 1) + ) + ) + (call $_abort) + ) + (if + (i32.and + (get_local $1) + (i32.const 2) + ) + (block $block616 + (i32.store + (get_local $0) + (i32.and + (get_local $1) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $3) + ) + (get_local $3) + ) + ) + (block $block617 + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 200) + ) + ) + (block $block619 + (i32.store + (i32.const 188) + (tee_local $0 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $2) + (i32.load + (i32.const 196) + ) + ) + (return) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store + (i32.const 184) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 196) + ) + ) + (block $block622 + (i32.store + (i32.const 184) + (tee_local $0 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 196) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $0) + ) + (get_local $0) + ) + (return) + ) + ) + (set_local $5 + (i32.add + (i32.and + (get_local $1) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $1) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.lt_u + (get_local $1) + (i32.const 256) + ) + (block $block624 + (set_local $4 + (i32.load offset=12 + (get_local $8) + ) + ) + (if + (i32.ne + (tee_local $1 + (i32.load offset=8 + (get_local $8) + ) + ) + (tee_local $0 + (i32.add + (i32.shl + (get_local $3) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block $block626 + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $1) + ) + (get_local $8) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $1) + ) + (block $block630 + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $0) + ) + (set_local $14 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (block $block632 + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (set_local $14 + (get_local $0) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $1) + (get_local $4) + ) + (i32.store + (get_local $14) + (get_local $1) + ) + ) + (block $block635 + (set_local $6 + (i32.load offset=24 + (get_local $8) + ) + ) + (block $do-once6 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $8) + ) + ) + (get_local $8) + ) + (block $block637 + (if + (i32.eqz + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (tee_local $1 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $3 + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (get_local $1) + ) + (block $block640 + (set_local $9 + (i32.const 0) + ) + (br $do-once6) + ) + ) + ) + (loop $while-in9 + (if + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + ) + ) + (block $block642 + (set_local $3 + (get_local $1) + ) + (set_local $0 + (get_local $4) + ) + (br $while-in9) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (block $block644 + (set_local $3 + (get_local $1) + ) + (set_local $0 + (get_local $4) + ) + (br $while-in9) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block $block646 + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $9 + (get_local $3) + ) + ) + ) + ) + (block $block647 + (if + (i32.lt_u + (tee_local $4 + (i32.load offset=8 + (get_local $8) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $1 + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + ) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (block $block651 + (i32.store + (get_local $1) + (get_local $0) + ) + (i32.store + (get_local $3) + (get_local $4) + ) + (set_local $9 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $6) + (block $block653 + (if + (i32.eq + (get_local $8) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $3 + (i32.load offset=28 + (get_local $8) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block $block655 + (i32.store + (get_local $0) + (get_local $9) + ) + (if + (i32.eqz + (get_local $9) + ) + (block $block657 + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block $block658 + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $8) + ) + (i32.store + (get_local $0) + (get_local $9) + ) + (i32.store offset=20 + (get_local $6) + (get_local $9) + ) + ) + (br_if $do-once4 + (i32.eqz + (get_local $9) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $9) + (tee_local $3 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $9) + (get_local $6) + ) + (if + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $3) + ) + (call $_abort) + (block $block664 + (i32.store offset=16 + (get_local $9) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $9) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=4 + (get_local $0) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block $block667 + (i32.store offset=20 + (get_local $9) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $9) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $5) + ) + (get_local $5) + ) + (if + (i32.eq + (get_local $2) + (i32.load + (i32.const 196) + ) + ) + (block $block669 + (i32.store + (i32.const 184) + (get_local $5) + ) + (return) + ) + (set_local $3 + (get_local $5) + ) + ) + ) + ) + (set_local $0 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $3) + (i32.const 256) + ) + (block $block671 + (set_local $1 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block $block674 + (set_local $15 + (get_local $3) + ) + (set_local $13 + (get_local $0) + ) + ) + ) + (block $block675 + (i32.store + (i32.const 176) + (i32.or + (get_local $3) + (get_local $0) + ) + ) + (set_local $15 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $13 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $2) + ) + (i32.store offset=12 + (get_local $13) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $13) + ) + (i32.store offset=12 + (get_local $2) + (get_local $1) + ) + (return) + ) + ) + (set_local $4 + (i32.add + (i32.shl + (tee_local $5 + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $3) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $3) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $4 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $4) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $2) + (get_local $5) + ) + (i32.store offset=20 + (get_local $2) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $2) + (i32.const 0) + ) + (block $do-once12 + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 180) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $5) + ) + ) + ) + (block $block679 + (set_local $5 + (i32.shl + (get_local $3) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $5) + (i32.const 1) + ) + ) + (i32.eq + (get_local $5) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $4) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (loop $while-in15 + (br_if $__rjti$1 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $4 + (i32.shl + (get_local $5) + (i32.const 1) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $5 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $5) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block $block681 + (set_local $5 + (get_local $4) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in15) + ) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block $block683 + (i32.store + (get_local $5) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $0) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + (br $do-once12) + ) + ) + (br $__rjto$1) + ) + (if + (i32.and + (i32.ge_u + (tee_local $4 + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $3 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $3) + ) + ) + (block $block685 + (i32.store offset=12 + (get_local $4) + (get_local $2) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $4) + ) + (i32.store offset=12 + (get_local $2) + (get_local $0) + ) + (i32.store offset=24 + (get_local $2) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + (block $block686 + (i32.store + (i32.const 180) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $4) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $4) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + ) + (i32.store + (i32.const 208) + (tee_local $0 + (i32.add + (i32.load + (i32.const 208) + ) + (i32.const -1) + ) + ) + ) + (if + (get_local $0) + (return) + (set_local $0 + (i32.const 632) + ) + ) + (loop $while-in17 + (set_local $0 + (i32.add + (tee_local $3 + (i32.load + (get_local $0) + ) + ) + (i32.const 8) + ) + ) + (br_if $while-in17 + (get_local $3) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + ) + (func $runPostSets (; 50 ;) (type $FUNCSIG$v) + (nop) + ) + (func $_i64Subtract (; 51 ;) (type $12) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (set_global $tempRet0 + (i32.sub + (i32.sub + (get_local $1) + (get_local $3) + ) + (i32.gt_u + (get_local $2) + (get_local $0) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $_i64Add (; 52 ;) (type $12) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (set_global $tempRet0 + (i32.add + (i32.add + (get_local $1) + (get_local $3) + ) + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (get_local $0) + ) + ) + ) + (get_local $4) + ) + (func $_memset (; 53 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (if + (i32.ge_s + (get_local $2) + (i32.const 20) + ) + (block $block + (set_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (if + (tee_local $3 + (i32.and + (get_local $0) + (i32.const 3) + ) + ) + (block $block689 + (set_local $3 + (i32.sub + (i32.add + (get_local $0) + (i32.const 4) + ) + (get_local $3) + ) + ) + (loop $while-in + (if + (i32.lt_s + (get_local $0) + (get_local $3) + ) + (block $block691 + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (set_local $3 + (i32.or + (i32.or + (i32.or + (get_local $1) + (i32.shl + (get_local $1) + (i32.const 8) + ) + ) + (i32.shl + (get_local $1) + (i32.const 16) + ) + ) + (i32.shl + (get_local $1) + (i32.const 24) + ) + ) + ) + (set_local $5 + (i32.and + (get_local $4) + (i32.const -4) + ) + ) + (loop $while-in1 + (if + (i32.lt_s + (get_local $0) + (get_local $5) + ) + (block $block693 + (i32.store + (get_local $0) + (get_local $3) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.lt_s + (get_local $0) + (get_local $4) + ) + (block $block695 + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $_bitshift64Lshr (; 54 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if + (i32.lt_s + (get_local $2) + (i32.const 32) + ) + (block $block + (set_global $tempRet0 + (i32.shr_u + (get_local $1) + (get_local $2) + ) + ) + (return + (i32.or + (i32.shr_u + (get_local $0) + (get_local $2) + ) + (i32.shl + (i32.and + (get_local $1) + (i32.sub + (i32.shl + (i32.const 1) + (get_local $2) + ) + (i32.const 1) + ) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.const 0) + ) + (i32.shr_u + (get_local $1) + (i32.sub + (get_local $2) + (i32.const 32) + ) + ) + ) + (func $_bitshift64Shl (; 55 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if + (i32.lt_s + (get_local $2) + (i32.const 32) + ) + (block $block + (set_global $tempRet0 + (i32.or + (i32.shl + (get_local $1) + (get_local $2) + ) + (i32.shr_u + (i32.and + (get_local $0) + (i32.shl + (i32.sub + (i32.shl + (i32.const 1) + (get_local $2) + ) + (i32.const 1) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + ) + (return + (i32.shl + (get_local $0) + (get_local $2) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.shl + (get_local $0) + (i32.sub + (get_local $2) + (i32.const 32) + ) + ) + ) + (i32.const 0) + ) + (func $_memcpy (; 56 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.ge_s + (get_local $2) + (i32.const 4096) + ) + (return + (call $_emscripten_memcpy_big + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (set_local $3 + (get_local $0) + ) + (if + (i32.eq + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.and + (get_local $1) + (i32.const 3) + ) + ) + (block $block + (loop $while-in + (if + (i32.and + (get_local $0) + (i32.const 3) + ) + (block $block698 + (if + (i32.eqz + (get_local $2) + ) + (return + (get_local $3) + ) + ) + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (loop $while-in1 + (if + (i32.ge_s + (get_local $2) + (i32.const 4) + ) + (block $block701 + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block $block703 + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (get_local $3) + ) + (func $___udivdi3 (; 57 ;) (type $12) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call $___udivmoddi4 + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.const 0) + ) + ) + (func $___uremdi3 (; 58 ;) (type $12) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (drop + (call $___udivmoddi4 + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $3) + (tee_local $0 + (get_local $4) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (set_global $tempRet0 + (i32.load offset=4 + (get_local $0) + ) + ) + (i32.load + (get_local $0) + ) + ) + (func $___udivmoddi4 (; 59 ;) (type $9) (param $xl i32) (param $xh i32) (param $yl i32) (param $yh i32) (param $r i32) (result i32) + (local $x64 i64) + (local $y64 i64) + (set_local $x64 + (i64.or + (i64.extend_u/i32 + (get_local $xl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $xh) + ) + (i64.const 32) + ) + ) + ) + (set_local $y64 + (i64.or + (i64.extend_u/i32 + (get_local $yl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $yh) + ) + (i64.const 32) + ) + ) + ) + (if + (get_local $r) + (i64.store + (get_local $r) + (i64.rem_u + (get_local $x64) + (get_local $y64) + ) + ) + ) + (set_local $x64 + (i64.div_u + (get_local $x64) + (get_local $y64) + ) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $x64) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $x64) + ) + ) + (func $dynCall_ii (; 60 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (call_indirect (type $FUNCSIG$ii) + (get_local $1) + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + ) + (func $dynCall_iiii (; 61 ;) (type $12) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call_indirect (type $FUNCSIG$iiii) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (func $dynCall_vi (; 62 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $1) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 10) + ) + ) + ) + (func $b0 (; 63 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (call $nullFunc_ii + (i32.const 0) + ) + (i32.const 0) + ) + (func $b1 (; 64 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $nullFunc_iiii + (i32.const 1) + ) + (i32.const 0) + ) + (func $b2 (; 65 ;) (type $FUNCSIG$vi) (param $0 i32) + (call $nullFunc_vi + (i32.const 2) + ) + ) +) diff --git a/src/binaryen/test/passes/inlining-optimizing_optimize-level=3.wast b/src/binaryen/test/passes/inlining-optimizing_optimize-level=3.wast new file mode 100644 index 0000000000..ca357e548c --- /dev/null +++ b/src/binaryen/test/passes/inlining-optimizing_optimize-level=3.wast @@ -0,0 +1,15703 @@ +;; similar to test/emcc_hello_world.fromasm.clamp ;; +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "abort" (func $abort)) + (import "env" "nullFunc_ii" (func $nullFunc_ii (param i32))) + (import "env" "nullFunc_iiii" (func $nullFunc_iiii (param i32))) + (import "env" "nullFunc_vi" (func $nullFunc_vi (param i32))) + (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) + (import "env" "___lock" (func $___lock (param i32))) + (import "env" "_pthread_self" (func $_pthread_self (result i32))) + (import "env" "_abort" (func $_abort)) + (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) + (import "env" "_sbrk" (func $_sbrk (param i32) (result i32))) + (import "env" "_time" (func $_time (param i32) (result i32))) + (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $___unlock (param i32))) + (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) + (import "env" "_sysconf" (func $_sysconf (param i32) (result i32))) + (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 18 18 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (elem (get_global $tableBase) $b0 $___stdio_close $b1 $b1 $___stdout_write $___stdio_seek $___stdio_write $b1 $b1 $b1 $b2 $b2 $b2 $b2 $b2 $_cleanup $b2 $b2) + (data (i32.const 1024) "emcc_hello_world.asm.js") + (export "_i64Subtract" (func $_i64Subtract)) + (export "_free" (func $_free)) + (export "_main" (func $_main)) + (export "_i64Add" (func $_i64Add)) + (export "_memset" (func $_memset)) + (export "_malloc" (func $_malloc)) + (export "_memcpy" (func $_memcpy)) + (export "_bitshift64Lshr" (func $_bitshift64Lshr)) + (export "_fflush" (func $_fflush)) + (export "___errno_location" (func $___errno_location)) + (export "_bitshift64Shl" (func $_bitshift64Shl)) + (export "runPostSets" (func $runPostSets)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackSave" (func $stackSave)) + (export "stackRestore" (func $stackRestore)) + (export "establishStackSpace" (func $establishStackSpace)) + (export "setThrew" (func $setThrew)) + (export "setTempRet0" (func $setTempRet0)) + (export "getTempRet0" (func $getTempRet0)) + (export "dynCall_ii" (func $dynCall_ii)) + (export "dynCall_iiii" (func $dynCall_iiii)) + (export "dynCall_vi" (func $dynCall_vi)) + (export "___udivmoddi4" (func $___udivmoddi4)) + (func $stackAlloc (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $0) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (get_local $1) + ) + (func $stackSave (result i32) + (get_global $STACKTOP) + ) + (func $stackRestore (param $0 i32) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $establishStackSpace (param $0 i32) (param $1 i32) + (set_global $STACKTOP + (get_local $0) + ) + (set_global $STACK_MAX + (get_local $1) + ) + ) + (func $setThrew (param $0 i32) (param $1 i32) + (if + (i32.eqz + (get_global $__THREW__) + ) + (block + (set_global $__THREW__ + (get_local $0) + ) + (set_global $threwValue + (get_local $1) + ) + ) + ) + ) + (func $setTempRet0 (param $0 i32) + (set_global $tempRet0 + (get_local $0) + ) + ) + (func $getTempRet0 (result i32) + (get_global $tempRet0) + ) + (func $_main (result i32) + (local $0 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (drop + (call $_printf + (i32.const 672) + (get_local $0) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (i32.const 0) + ) + (func $_frexp (param $0 f64) (param $1 i32) (result f64) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (f64.store + (get_global $tempDoublePtr) + (get_local $0) + ) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default + (tee_local $3 + (i32.and + (tee_local $3 + (call $_bitshift64Lshr + (tee_local $2 + (i32.load + (get_global $tempDoublePtr) + ) + ) + (tee_local $4 + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + ) + (i32.const 52) + ) + ) + (i32.const 2047) + ) + ) + ) + ) + (i32.store + (get_local $1) + (tee_local $2 + (if (result i32) + (f64.ne + (get_local $0) + (f64.const 0) + ) + (block (result i32) + (set_local $0 + (call $_frexp + (f64.mul + (get_local $0) + (f64.const 18446744073709551615) + ) + (get_local $1) + ) + ) + (i32.add + (i32.load + (get_local $1) + ) + (i32.const -64) + ) + ) + (i32.const 0) + ) + ) + ) + (br $switch) + ) + (br $switch) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $3) + (i32.const -1022) + ) + ) + (i32.store + (get_global $tempDoublePtr) + (get_local $2) + ) + (i32.store offset=4 + (get_global $tempDoublePtr) + (i32.or + (i32.and + (get_local $4) + (i32.const -2146435073) + ) + (i32.const 1071644672) + ) + ) + (set_local $0 + (f64.load + (get_global $tempDoublePtr) + ) + ) + ) + (get_local $0) + ) + (func $_strerror (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (i32.const 0) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in + (br_if $__rjti$0 + (i32.eq + (i32.load8_u offset=687 + (get_local $1) + ) + (get_local $0) + ) + ) + (br_if $while-in + (i32.ne + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 87) + ) + ) + (set_local $1 + (i32.const 87) + ) + (br $__rjti$1) + ) + ) + (br_if $__rjti$1 + (get_local $1) + ) + (set_local $0 + (i32.const 775) + ) + (br $__rjto$1) + ) + (set_local $0 + (i32.const 775) + ) + (loop $while-in1 + (loop $while-in3 + (set_local $2 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (if + (i32.load8_s + (get_local $0) + ) + (block + (set_local $0 + (get_local $2) + ) + (br $while-in3) + ) + (set_local $0 + (get_local $2) + ) + ) + ) + (br_if $while-in1 + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + ) + ) + ) + (get_local $0) + ) + (func $___errno_location (result i32) + (if (result i32) + (i32.load + (i32.const 16) + ) + (i32.load offset=60 + (call $_pthread_self) + ) + (i32.const 60) + ) + ) + (func $___stdio_close (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (i32.store + (tee_local $2 + (get_local $1) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (set_local $0 + (call $___syscall_ret + (call $___syscall6 + (i32.const 6) + (get_local $2) + ) + ) + ) + (set_global $STACKTOP + (get_local $1) + ) + (get_local $0) + ) + (func $___stdout_write (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 80) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $3 + (get_local $4) + ) + (set_local $5 + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + (i32.store offset=36 + (get_local $0) + (i32.const 4) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 64) + ) + ) + (block + (i32.store + (get_local $3) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 21505) + ) + (i32.store offset=8 + (get_local $3) + (get_local $5) + ) + (if + (call $___syscall54 + (i32.const 54) + (get_local $3) + ) + (i32.store8 offset=75 + (get_local $0) + (i32.const -1) + ) + ) + ) + ) + (set_local $0 + (call $___stdio_write + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $___stdio_seek (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (i32.store + (tee_local $3 + (get_local $4) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + (i32.store offset=16 + (get_local $3) + (get_local $2) + ) + (set_local $0 + (if (result i32) + (i32.lt_s + (call $___syscall_ret + (call $___syscall140 + (i32.const 140) + (get_local $3) + ) + ) + (i32.const 0) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.const -1) + ) + (i32.const -1) + ) + (i32.load + (get_local $0) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $_fflush (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (block $do-once + (if + (get_local $0) + (block + (if + (i32.le_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (block + (set_local $0 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (br $do-once) + ) + ) + (set_local $2 + (i32.eqz + (call $___lockfile + (get_local $0) + ) + ) + ) + (set_local $1 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (set_local $0 + (if (result i32) + (get_local $2) + (get_local $1) + (block (result i32) + (call $___unlockfile + (get_local $0) + ) + (get_local $1) + ) + ) + ) + ) + (block + (set_local $0 + (if (result i32) + (i32.load + (i32.const 12) + ) + (call $_fflush + (i32.load + (i32.const 12) + ) + ) + (i32.const 0) + ) + ) + (call $___lock + (i32.const 44) + ) + (if + (tee_local $1 + (i32.load + (i32.const 40) + ) + ) + (loop $while-in + (set_local $2 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (get_local $1) + ) + (i32.const -1) + ) + (call $___lockfile + (get_local $1) + ) + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.load offset=20 + (get_local $1) + ) + (i32.load offset=28 + (get_local $1) + ) + ) + (set_local $0 + (i32.or + (call $___fflush_unlocked + (get_local $1) + ) + (get_local $0) + ) + ) + ) + (if + (get_local $2) + (call $___unlockfile + (get_local $1) + ) + ) + (br_if $while-in + (tee_local $1 + (i32.load offset=56 + (get_local $1) + ) + ) + ) + ) + ) + (call $___unlock + (i32.const 44) + ) + ) + ) + ) + (get_local $0) + ) + (func $_printf (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (set_local $2 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (i32.store + (tee_local $3 + (get_local $2) + ) + (get_local $1) + ) + (set_local $0 + (call $_vfprintf + (i32.load + (i32.const 8) + ) + (get_local $0) + (get_local $3) + ) + ) + (set_global $STACKTOP + (get_local $2) + ) + (get_local $0) + ) + (func $___lockfile (param $0 i32) (result i32) + (i32.const 0) + ) + (func $___unlockfile (param $0 i32) + (nop) + ) + (func $___stdio_write (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $8 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $9 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (set_local $10 + (get_local $8) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $8) + (i32.const 32) + ) + ) + (tee_local $3 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $4) + (tee_local $3 + (i32.sub + (i32.load + (tee_local $11 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (get_local $3) + ) + ) + ) + (i32.store offset=8 + (get_local $4) + (get_local $1) + ) + (i32.store offset=12 + (get_local $4) + (get_local $2) + ) + (set_local $13 + (i32.add + (get_local $0) + (i32.const 60) + ) + ) + (set_local $14 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (set_local $1 + (get_local $4) + ) + (set_local $4 + (i32.const 2) + ) + (set_local $12 + (i32.add + (get_local $3) + (get_local $2) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in + (if + (i32.load + (i32.const 16) + ) + (block + (call $_pthread_cleanup_push + (i32.const 5) + (get_local $0) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $10) + (get_local $1) + ) + (i32.store offset=8 + (get_local $10) + (get_local $4) + ) + (set_local $3 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $10) + ) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $9) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $9) + (get_local $1) + ) + (i32.store offset=8 + (get_local $9) + (get_local $4) + ) + (set_local $3 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $9) + ) + ) + ) + ) + ) + (br_if $__rjti$0 + (i32.eq + (get_local $12) + (get_local $3) + ) + ) + (br_if $__rjti$1 + (i32.lt_s + (get_local $3) + (i32.const 0) + ) + ) + (set_local $5 + (if (result i32) + (i32.gt_u + (get_local $3) + (tee_local $5 + (i32.load offset=4 + (get_local $1) + ) + ) + ) + (block (result i32) + (i32.store + (get_local $6) + (tee_local $7 + (i32.load + (get_local $14) + ) + ) + ) + (i32.store + (get_local $11) + (get_local $7) + ) + (set_local $7 + (i32.load offset=12 + (get_local $1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const -1) + ) + ) + (i32.sub + (get_local $3) + (get_local $5) + ) + ) + (block (result i32) + (if + (i32.eq + (get_local $4) + (i32.const 2) + ) + (block + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (get_local $3) + ) + ) + (set_local $7 + (get_local $5) + ) + (set_local $4 + (i32.const 2) + ) + ) + (set_local $7 + (get_local $5) + ) + ) + (get_local $3) + ) + ) + ) + (i32.store + (get_local $1) + (i32.add + (i32.load + (get_local $1) + ) + (get_local $5) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.sub + (get_local $7) + (get_local $5) + ) + ) + (set_local $12 + (i32.sub + (get_local $12) + (get_local $3) + ) + ) + (br $while-in) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (tee_local $1 + (i32.load + (get_local $14) + ) + ) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.store + (get_local $6) + (get_local $1) + ) + (i32.store + (get_local $11) + (get_local $1) + ) + (br $__rjto$1) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (set_local $2 + (if (result i32) + (i32.eq + (get_local $4) + (i32.const 2) + ) + (i32.const 0) + (i32.sub + (get_local $2) + (i32.load offset=4 + (get_local $1) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $8) + ) + (get_local $2) + ) + (func $_vfprintf (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 224) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $5 + (i32.add + (get_local $4) + (i32.const 120) + ) + ) + (set_local $7 + (get_local $4) + ) + (set_local $6 + (i32.add + (get_local $4) + (i32.const 136) + ) + ) + (set_local $9 + (i32.add + (tee_local $3 + (tee_local $8 + (i32.add + (get_local $4) + (i32.const 80) + ) + ) + ) + (i32.const 40) + ) + ) + (loop $do-in + (i32.store + (get_local $3) + (i32.const 0) + ) + (br_if $do-in + (i32.lt_s + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (get_local $9) + ) + ) + ) + (i32.store + (get_local $5) + (i32.load + (get_local $2) + ) + ) + (set_local $0 + (if (result i32) + (i32.lt_s + (call $_printf_core + (i32.const 0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + (i32.const 0) + ) + (i32.const -1) + (block (result i32) + (set_local $14 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (call $___lockfile + (get_local $0) + ) + (i32.const 0) + ) + ) + (set_local $10 + (i32.load + (get_local $0) + ) + ) + (if + (i32.lt_s + (i32.load8_s offset=74 + (get_local $0) + ) + (i32.const 1) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $10) + (i32.const -33) + ) + ) + ) + (if + (i32.load + (tee_local $11 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + ) + (set_local $1 + (call $_printf_core + (get_local $0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + ) + (block + (set_local $13 + (i32.load + (tee_local $12 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + ) + ) + (i32.store + (get_local $12) + (get_local $6) + ) + (i32.store + (tee_local $9 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + (get_local $6) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (get_local $6) + ) + (i32.store + (get_local $11) + (i32.const 80) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (i32.add + (get_local $6) + (i32.const 80) + ) + ) + (set_local $1 + (call $_printf_core + (get_local $0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + ) + (if + (get_local $13) + (block + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (set_local $1 + (select + (get_local $1) + (i32.const -1) + (i32.load + (get_local $3) + ) + ) + ) + (i32.store + (get_local $12) + (get_local $13) + ) + (i32.store + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $9) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + ) + ) + ) + ) + (i32.store + (get_local $0) + (i32.or + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.and + (get_local $10) + (i32.const 32) + ) + ) + ) + (if + (get_local $14) + (call $___unlockfile + (get_local $0) + ) + ) + (select + (i32.const -1) + (get_local $1) + (i32.and + (get_local $2) + (i32.const 32) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $___fwritex (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (block $label$break$L5 + (block $__rjti$0 + (br_if $__rjti$0 + (tee_local $3 + (i32.load + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + ) + (if + (call $___towrite + (get_local $2) + ) + (set_local $3 + (i32.const 0) + ) + (block + (set_local $3 + (i32.load + (get_local $4) + ) + ) + (br $__rjti$0) + ) + ) + (br $label$break$L5) + ) + (if + (i32.lt_u + (i32.sub + (get_local $3) + (tee_local $4 + (i32.load + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 20) + ) + ) + ) + ) + ) + (get_local $1) + ) + (block + (set_local $3 + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (br $label$break$L5) + ) + ) + (set_local $2 + (block $label$break$L10 (result i32) + (if (result i32) + (i32.gt_s + (i32.load8_s offset=75 + (get_local $2) + ) + (i32.const -1) + ) + (block (result i32) + (set_local $3 + (get_local $1) + ) + (loop $while-in + (drop + (br_if $label$break$L10 + (i32.const 0) + (i32.eqz + (get_local $3) + ) + ) + ) + (if + (i32.ne + (i32.load8_s + (i32.add + (get_local $0) + (tee_local $6 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + (i32.const 10) + ) + (block + (set_local $3 + (get_local $6) + ) + (br $while-in) + ) + ) + ) + (br_if $label$break$L5 + (i32.lt_u + (call_indirect (type $FUNCSIG$iiii) + (get_local $2) + (get_local $0) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + (get_local $3) + ) + ) + (set_local $4 + (i32.load + (get_local $5) + ) + ) + (set_local $1 + (i32.sub + (get_local $1) + (get_local $3) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (get_local $3) + ) + ) + (get_local $3) + ) + (i32.const 0) + ) + ) + ) + (drop + (call $_memcpy + (get_local $4) + (get_local $0) + (get_local $1) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $1) + ) + ) + (set_local $3 + (i32.add + (get_local $2) + (get_local $1) + ) + ) + ) + (get_local $3) + ) + (func $___towrite (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (i32.load8_s + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 74) + ) + ) + ) + ) + (i32.store8 + (get_local $2) + (i32.or + (i32.add + (get_local $1) + (i32.const 255) + ) + (get_local $1) + ) + ) + (tee_local $0 + (if (result i32) + (i32.and + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.const 8) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.or + (get_local $1) + (i32.const 32) + ) + ) + (i32.const -1) + ) + (block (result i32) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=28 + (get_local $0) + (tee_local $1 + (i32.load offset=44 + (get_local $0) + ) + ) + ) + (i32.store offset=20 + (get_local $0) + (get_local $1) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (get_local $1) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (func $_wcrtomb (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $do-once (result i32) + (if (result i32) + (get_local $0) + (block (result i32) + (if + (i32.lt_u + (get_local $1) + (i32.const 128) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (br $do-once + (i32.const 1) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.const 2048) + ) + (block + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 192) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (br $do-once + (i32.const 2) + ) + ) + ) + (if + (i32.or + (i32.lt_u + (get_local $1) + (i32.const 55296) + ) + (i32.eq + (i32.and + (get_local $1) + (i32.const -8192) + ) + (i32.const 57344) + ) + ) + (block + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 12) + ) + (i32.const 224) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=2 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (br $do-once + (i32.const 3) + ) + ) + ) + (if (result i32) + (i32.lt_u + (i32.add + (get_local $1) + (i32.const -65536) + ) + (i32.const 1048576) + ) + (block (result i32) + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 18) + ) + (i32.const 240) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 12) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=2 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=3 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.const 4) + ) + (block (result i32) + (i32.store + (call $___errno_location) + (i32.const 84) + ) + (i32.const -1) + ) + ) + ) + (i32.const 1) + ) + ) + ) + (func $_wctomb (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (get_local $0) + (call $_wcrtomb + (get_local $0) + (get_local $1) + (i32.const 0) + ) + (i32.const 0) + ) + ) + (func $_memchr (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $5 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (block $label$break$L8 + (block $__rjti$2 + (if + (i32.and + (tee_local $4 + (i32.ne + (get_local $2) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.const 0) + ) + ) + (block + (set_local $4 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (br_if $__rjti$2 + (i32.eq + (i32.load8_u + (get_local $2) + ) + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + ) + (br_if $while-in + (i32.and + (tee_local $0 + (i32.ne + (tee_local $3 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 3) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (set_local $0 + (i32.const 0) + ) + (br $label$break$L8) + ) + (set_local $0 + (get_local $3) + ) + (if + (i32.ne + (i32.load8_u + (get_local $2) + ) + (tee_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (block + (set_local $3 + (i32.mul + (get_local $5) + (i32.const 16843009) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.le_u + (get_local $0) + (i32.const 3) + ) + ) + (loop $while-in3 + (if + (i32.eqz + (i32.and + (i32.xor + (i32.and + (tee_local $4 + (i32.xor + (i32.load + (get_local $2) + ) + (get_local $3) + ) + ) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $4) + (i32.const -16843009) + ) + ) + ) + (block + (set_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (br_if $while-in3 + (i32.gt_u + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + (i32.const 3) + ) + ) + (br $__rjti$0) + ) + ) + ) + (br $__rjto$0) + ) + (if + (i32.eqz + (get_local $0) + ) + (block + (set_local $0 + (i32.const 0) + ) + (br $label$break$L8) + ) + ) + ) + (loop $while-in5 + (br_if $label$break$L8 + (i32.eq + (i32.load8_u + (get_local $2) + ) + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br_if $while-in5 + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -1) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + ) + (select + (get_local $2) + (i32.const 0) + (get_local $0) + ) + ) + (func $___syscall_ret (param $0 i32) (result i32) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const -4096) + ) + (block (result i32) + (i32.store + (call $___errno_location) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + (get_local $0) + ) + ) + (func $___fflush_unlocked (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (tee_local $0 + (block $__rjto$0 (result i32) + (block $__rjti$0 + (br_if $__rjti$0 + (i32.le_u + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (br_if $__rjti$0 + (i32.load + (get_local $1) + ) + ) + (br $__rjto$0 + (i32.const -1) + ) + ) + (if + (i32.lt_u + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (tee_local $6 + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.sub + (get_local $4) + (get_local $6) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=40 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + (func $_cleanup (param $0 i32) + (if + (i32.eqz + (i32.load offset=68 + (get_local $0) + ) + ) + (call $___unlockfile + (get_local $0) + ) + ) + ) + (func $f64-to-int (param $0 f64) (result i32) + (if (result i32) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i32.const -2147483648) + (if (result i32) + (f64.ge + (get_local $0) + (f64.const 2147483648) + ) + (i32.const -2147483648) + (if (result i32) + (f64.le + (get_local $0) + (f64.const -2147483649) + ) + (i32.const -2147483648) + (i32.trunc_s/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $i32s-div (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (get_local $1) + (if (result i32) + (i32.and + (i32.eq + (get_local $0) + (i32.const -2147483648) + ) + (i32.eq + (get_local $1) + (i32.const -1) + ) + ) + (i32.const 0) + (i32.div_s + (get_local $0) + (get_local $1) + ) + ) + (i32.const 0) + ) + ) + (func $i32u-rem (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (get_local $1) + (i32.rem_u + (get_local $0) + (get_local $1) + ) + (i32.const 0) + ) + ) + (func $i32u-div (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (get_local $1) + (i32.div_u + (get_local $0) + (get_local $1) + ) + (i32.const 0) + ) + ) + (func $_printf_core (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 f64) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 f64) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (local $47 i32) + (local $48 i32) + (local $49 i32) + (local $50 i32) + (local $51 i32) + (set_local $25 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 624) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $20 + (i32.add + (get_local $25) + (i32.const 16) + ) + ) + (set_local $19 + (get_local $25) + ) + (set_local $36 + (i32.add + (get_local $25) + (i32.const 528) + ) + ) + (set_local $29 + (i32.ne + (get_local $0) + (i32.const 0) + ) + ) + (set_local $39 + (tee_local $26 + (i32.add + (tee_local $5 + (i32.add + (get_local $25) + (i32.const 536) + ) + ) + (i32.const 40) + ) + ) + ) + (set_local $40 + (i32.add + (get_local $5) + (i32.const 39) + ) + ) + (set_local $44 + (i32.add + (tee_local $41 + (i32.add + (get_local $25) + (i32.const 8) + ) + ) + (i32.const 4) + ) + ) + (set_local $34 + (i32.add + (tee_local $5 + (i32.add + (get_local $25) + (i32.const 576) + ) + ) + (i32.const 12) + ) + ) + (set_local $42 + (i32.add + (get_local $5) + (i32.const 11) + ) + ) + (set_local $45 + (i32.sub + (tee_local $28 + (get_local $34) + ) + (tee_local $37 + (tee_local $22 + (i32.add + (get_local $25) + (i32.const 588) + ) + ) + ) + ) + ) + (set_local $46 + (i32.sub + (i32.const -2) + (get_local $37) + ) + ) + (set_local $47 + (i32.add + (get_local $28) + (i32.const 2) + ) + ) + (set_local $49 + (i32.add + (tee_local $48 + (i32.add + (get_local $25) + (i32.const 24) + ) + ) + (i32.const 288) + ) + ) + (set_local $43 + (tee_local $30 + (i32.add + (get_local $22) + (i32.const 9) + ) + ) + ) + (set_local $35 + (i32.add + (get_local $22) + (i32.const 8) + ) + ) + (set_local $16 + (i32.const 0) + ) + (set_local $5 + (get_local $1) + ) + (set_local $10 + (i32.const 0) + ) + (set_local $1 + (i32.const 0) + ) + (block $label$break$L343 + (block $__rjti$9 + (loop $label$continue$L1 + (block $label$break$L1 + (if + (i32.gt_s + (get_local $16) + (i32.const -1) + ) + (set_local $16 + (if (result i32) + (i32.gt_s + (get_local $10) + (i32.sub + (i32.const 2147483647) + (get_local $16) + ) + ) + (block (result i32) + (i32.store + (call $___errno_location) + (i32.const 75) + ) + (i32.const -1) + ) + (i32.add + (get_local $10) + (get_local $16) + ) + ) + ) + ) + (br_if $__rjti$9 + (i32.eqz + (tee_local $7 + (i32.load8_s + (get_local $5) + ) + ) + ) + ) + (set_local $10 + (get_local $5) + ) + (block $label$break$L12 + (block $__rjti$1 + (loop $label$continue$L9 + (block $label$break$L9 + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.shr_s + (i32.shl + (get_local $7) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (set_local $6 + (get_local $10) + ) + (br $__rjti$1) + ) + (set_local $6 + (get_local $10) + ) + (br $label$break$L9) + ) + (set_local $7 + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + ) + (br $label$continue$L9) + ) + ) + (br $label$break$L12) + ) + (loop $while-in + (br_if $label$break$L12 + (i32.ne + (i32.load8_s offset=1 + (get_local $6) + ) + (i32.const 37) + ) + ) + (set_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (br_if $while-in + (i32.eq + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 2) + ) + ) + ) + (i32.const 37) + ) + ) + ) + ) + (set_local $7 + (i32.sub + (get_local $10) + (get_local $5) + ) + ) + (if + (get_local $29) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $5) + (get_local $7) + (get_local $0) + ) + ) + ) + ) + (if + (i32.ne + (get_local $10) + (get_local $5) + ) + (block + (set_local $5 + (get_local $6) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + ) + (set_local $8 + (if (result i32) + (i32.lt_u + (tee_local $8 + (i32.add + (tee_local $11 + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block (result i32) + (set_local $6 + (i32.load8_s + (tee_local $10 + (select + (i32.add + (get_local $6) + (i32.const 3) + ) + (get_local $10) + (tee_local $11 + (i32.eq + (i32.load8_s offset=2 + (get_local $6) + ) + (i32.const 36) + ) + ) + ) + ) + ) + ) + (set_local $17 + (select + (get_local $8) + (i32.const -1) + (get_local $11) + ) + ) + (select + (i32.const 1) + (get_local $1) + (get_local $11) + ) + ) + (block (result i32) + (set_local $6 + (get_local $11) + ) + (set_local $17 + (i32.const -1) + ) + (get_local $1) + ) + ) + ) + (block $label$break$L25 + (if + (i32.eq + (i32.and + (tee_local $11 + (i32.shr_s + (i32.shl + (get_local $6) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (i32.const -32) + ) + (i32.const 32) + ) + (block + (set_local $1 + (get_local $6) + ) + (set_local $6 + (get_local $11) + ) + (set_local $11 + (i32.const 0) + ) + (loop $while-in4 + (if + (i32.eqz + (i32.and + (i32.shl + (i32.const 1) + (i32.add + (get_local $6) + (i32.const -32) + ) + ) + (i32.const 75913) + ) + ) + (block + (set_local $6 + (get_local $1) + ) + (set_local $1 + (get_local $11) + ) + (br $label$break$L25) + ) + ) + (set_local $11 + (i32.or + (i32.shl + (i32.const 1) + (i32.add + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -32) + ) + ) + (get_local $11) + ) + ) + (br_if $while-in4 + (i32.eq + (i32.and + (tee_local $6 + (tee_local $1 + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + ) + ) + (i32.const -32) + ) + (i32.const 32) + ) + ) + (set_local $6 + (get_local $1) + ) + (set_local $1 + (get_local $11) + ) + ) + ) + (set_local $1 + (i32.const 0) + ) + ) + ) + (block $do-once5 + (if + (i32.eq + (i32.and + (get_local $6) + (i32.const 255) + ) + (i32.const 42) + ) + (block + (set_local $10 + (block $__rjto$0 (result i32) + (block $__rjti$0 + (br_if $__rjti$0 + (i32.ge_u + (tee_local $11 + (i32.add + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + ) + (br_if $__rjti$0 + (i32.ne + (i32.load8_s offset=2 + (get_local $10) + ) + (i32.const 36) + ) + ) + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + (i32.const 10) + ) + (drop + (i32.load offset=4 + (tee_local $6 + (i32.add + (get_local $3) + (i32.shl + (i32.add + (i32.load8_s + (get_local $6) + ) + (i32.const -48) + ) + (i32.const 3) + ) + ) + ) + ) + ) + (set_local $8 + (i32.const 1) + ) + (set_local $14 + (i32.load + (get_local $6) + ) + ) + (br $__rjto$0 + (i32.add + (get_local $10) + (i32.const 3) + ) + ) + ) + (if + (get_local $8) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (if + (i32.eqz + (get_local $29) + ) + (block + (set_local $11 + (get_local $1) + ) + (set_local $10 + (get_local $6) + ) + (set_local $1 + (i32.const 0) + ) + (set_local $14 + (i32.const 0) + ) + (br $do-once5) + ) + ) + (set_local $14 + (i32.load + (tee_local $10 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $8 + (i32.const 0) + ) + (get_local $6) + ) + ) + (set_local $11 + (if (result i32) + (i32.lt_s + (get_local $14) + (i32.const 0) + ) + (block (result i32) + (set_local $14 + (i32.sub + (i32.const 0) + (get_local $14) + ) + ) + (i32.or + (get_local $1) + (i32.const 8192) + ) + ) + (get_local $1) + ) + ) + (set_local $1 + (get_local $8) + ) + ) + (if + (i32.lt_u + (tee_local $6 + (i32.add + (i32.shr_s + (i32.shl + (get_local $6) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $11 + (i32.const 0) + ) + (loop $while-in8 + (set_local $6 + (i32.add + (i32.mul + (get_local $11) + (i32.const 10) + ) + (get_local $6) + ) + ) + (if + (i32.lt_u + (tee_local $9 + (i32.add + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $11 + (get_local $6) + ) + (set_local $6 + (get_local $9) + ) + (br $while-in8) + ) + ) + ) + (if + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + (block + (set_local $11 + (get_local $1) + ) + (set_local $1 + (get_local $8) + ) + (set_local $14 + (get_local $6) + ) + ) + ) + ) + (block + (set_local $11 + (get_local $1) + ) + (set_local $1 + (get_local $8) + ) + (set_local $14 + (i32.const 0) + ) + ) + ) + ) + ) + (set_local $6 + (block $label$break$L46 (result i32) + (if (result i32) + (i32.eq + (i32.load8_s + (get_local $10) + ) + (i32.const 46) + ) + (block (result i32) + (if + (i32.ne + (tee_local $8 + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + ) + (i32.const 42) + ) + (block + (if + (i32.lt_u + (tee_local $9 + (i32.add + (get_local $8) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $10 + (get_local $6) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $6 + (get_local $9) + ) + ) + (block + (set_local $10 + (get_local $6) + ) + (br $label$break$L46 + (i32.const 0) + ) + ) + ) + (loop $while-in11 + (drop + (br_if $label$break$L46 + (tee_local $6 + (i32.add + (i32.mul + (get_local $8) + (i32.const 10) + ) + (get_local $6) + ) + ) + (i32.ge_u + (tee_local $9 + (i32.add + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + ) + ) + (set_local $8 + (get_local $6) + ) + (set_local $6 + (get_local $9) + ) + (br $while-in11) + ) + ) + ) + (if + (i32.lt_u + (tee_local $8 + (i32.add + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $10) + (i32.const 2) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (if + (i32.eq + (i32.load8_s offset=3 + (get_local $10) + ) + (i32.const 36) + ) + (block + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $8) + (i32.const 2) + ) + ) + (i32.const 10) + ) + (drop + (i32.load offset=4 + (tee_local $6 + (i32.add + (get_local $3) + (i32.shl + (i32.add + (i32.load8_s + (get_local $6) + ) + (i32.const -48) + ) + (i32.const 3) + ) + ) + ) + ) + ) + (set_local $10 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (br $label$break$L46 + (i32.load + (get_local $6) + ) + ) + ) + ) + ) + (if + (get_local $1) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (if (result i32) + (get_local $29) + (block (result i32) + (set_local $8 + (i32.load + (tee_local $10 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $10 + (get_local $6) + ) + (get_local $8) + ) + (block (result i32) + (set_local $10 + (get_local $6) + ) + (i32.const 0) + ) + ) + ) + (i32.const -1) + ) + ) + ) + (set_local $8 + (get_local $10) + ) + (set_local $9 + (i32.const 0) + ) + (loop $while-in13 + (if + (i32.gt_u + (tee_local $12 + (i32.add + (i32.load8_s + (get_local $8) + ) + (i32.const -65) + ) + ) + (i32.const 57) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $10 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + (if + (i32.lt_u + (i32.add + (tee_local $12 + (i32.and + (tee_local $13 + (i32.load8_s + (i32.add + (i32.add + (i32.mul + (get_local $9) + (i32.const 58) + ) + (i32.const 3611) + ) + (get_local $12) + ) + ) + ) + (i32.const 255) + ) + ) + (i32.const -1) + ) + (i32.const 8) + ) + (block + (set_local $8 + (get_local $10) + ) + (set_local $9 + (get_local $12) + ) + (br $while-in13) + ) + (set_local $18 + (get_local $8) + ) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $13) + (i32.const 255) + ) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $8 + (i32.gt_s + (get_local $17) + (i32.const -1) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (if + (i32.eq + (i32.and + (get_local $13) + (i32.const 255) + ) + (i32.const 19) + ) + (if + (get_local $8) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + (br $__rjti$2) + ) + (block + (if + (get_local $8) + (block + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $17) + (i32.const 2) + ) + ) + (get_local $12) + ) + (set_local $13 + (i32.load offset=4 + (tee_local $12 + (i32.add + (get_local $3) + (i32.shl + (get_local $17) + (i32.const 3) + ) + ) + ) + ) + ) + (i32.store + (tee_local $8 + (get_local $19) + ) + (i32.load + (get_local $12) + ) + ) + (i32.store offset=4 + (get_local $8) + (get_local $13) + ) + (br $__rjti$2) + ) + ) + (if + (i32.eqz + (get_local $29) + ) + (block + (set_local $16 + (i32.const 0) + ) + (br $label$break$L1) + ) + ) + (call $_pop_arg_336 + (get_local $19) + (get_local $12) + (get_local $2) + ) + ) + ) + (br $__rjto$2) + ) + (if + (i32.eqz + (get_local $29) + ) + (block + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + ) + ) + (set_local $11 + (select + (tee_local $8 + (i32.and + (get_local $11) + (i32.const -65537) + ) + ) + (get_local $11) + (i32.and + (get_local $11) + (i32.const 8192) + ) + ) + ) + (set_local $5 + (block $__rjto$8 (result i32) + (block $__rjti$8 + (block $__rjti$7 + (block $__rjti$6 + (block $__rjti$5 + (block $__rjti$4 + (block $__rjti$3 + (block $switch-default120 + (block $switch-case42 + (block $switch-case41 + (block $switch-case40 + (block $switch-case39 + (block $switch-case38 + (block $switch-case37 + (block $switch-case36 + (block $switch-case34 + (block $switch-case33 + (block $switch-case29 + (block $switch-case28 + (block $switch-case27 + (br_table $switch-case42 $switch-default120 $switch-case40 $switch-default120 $switch-case42 $switch-case42 $switch-case42 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case41 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case29 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case42 $switch-default120 $switch-case37 $switch-case34 $switch-case42 $switch-case42 $switch-case42 $switch-default120 $switch-case34 $switch-default120 $switch-default120 $switch-default120 $switch-case38 $switch-case27 $switch-case33 $switch-case28 $switch-default120 $switch-default120 $switch-case39 $switch-default120 $switch-case36 $switch-default120 $switch-default120 $switch-case29 $switch-default120 + (i32.sub + (tee_local $18 + (select + (i32.and + (tee_local $12 + (i32.load8_s + (get_local $18) + ) + ) + (i32.const -33) + ) + (get_local $12) + (i32.and + (i32.ne + (get_local $9) + (i32.const 0) + ) + (i32.eq + (i32.and + (get_local $12) + (i32.const 15) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 65) + ) + ) + ) + (block $switch-default26 + (block $switch-case25 + (block $switch-case24 + (block $switch-case23 + (block $switch-case22 + (block $switch-case21 + (block $switch-case20 + (block $switch-case19 + (br_table $switch-case19 $switch-case20 $switch-case21 $switch-case22 $switch-case23 $switch-default26 $switch-case24 $switch-case25 $switch-default26 + (get_local $9) + ) + ) + (i32.store + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (tee_local $5 + (i32.load + (get_local $19) + ) + ) + (get_local $16) + ) + (i32.store offset=4 + (get_local $5) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $16) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store16 + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store8 + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (i32.load + (get_local $19) + ) + (get_local $16) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (i32.store + (tee_local $5 + (i32.load + (get_local $19) + ) + ) + (get_local $16) + ) + (i32.store offset=4 + (get_local $5) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $16) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (set_local $7 + (i32.or + (get_local $11) + (i32.const 8) + ) + ) + (set_local $6 + (select + (get_local $6) + (i32.const 8) + (i32.gt_u + (get_local $6) + (i32.const 8) + ) + ) + ) + (set_local $18 + (i32.const 120) + ) + (br $__rjti$3) + ) + (set_local $7 + (get_local $11) + ) + (br $__rjti$3) + ) + (if + (i32.and + (i32.eqz + (tee_local $7 + (i32.load + (tee_local $5 + (get_local $19) + ) + ) + ) + ) + (i32.eqz + (tee_local $8 + (i32.load offset=4 + (get_local $5) + ) + ) + ) + ) + (set_local $8 + (get_local $26) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $7 + (get_local $8) + ) + (set_local $8 + (get_local $26) + ) + (loop $while-in32 + (i32.store8 + (tee_local $8 + (i32.add + (get_local $8) + (i32.const -1) + ) + ) + (i32.or + (i32.and + (get_local $5) + (i32.const 7) + ) + (i32.const 48) + ) + ) + (br_if $while-in32 + (i32.eqz + (i32.and + (i32.eqz + (tee_local $5 + (call $_bitshift64Lshr + (get_local $5) + (get_local $7) + (i32.const 3) + ) + ) + ) + (i32.eqz + (tee_local $7 + (get_global $tempRet0) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $5 + (if (result i32) + (i32.and + (get_local $11) + (i32.const 8) + ) + (block (result i32) + (set_local $7 + (get_local $11) + ) + (set_local $6 + (select + (tee_local $11 + (i32.add + (i32.sub + (get_local $39) + (get_local $8) + ) + (i32.const 1) + ) + ) + (get_local $6) + (i32.lt_s + (get_local $6) + (get_local $11) + ) + ) + ) + (get_local $8) + ) + (block (result i32) + (set_local $7 + (get_local $11) + ) + (get_local $8) + ) + ) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$8) + ) + (set_local $5 + (i32.load + (tee_local $7 + (get_local $19) + ) + ) + ) + (if + (i32.lt_s + (tee_local $7 + (i32.load offset=4 + (get_local $7) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (tee_local $8 + (get_local $19) + ) + (tee_local $5 + (call $_i64Subtract + (i32.const 0) + (i32.const 0) + (get_local $5) + (get_local $7) + ) + ) + ) + (i32.store offset=4 + (get_local $8) + (tee_local $7 + (get_global $tempRet0) + ) + ) + (set_local $8 + (i32.const 1) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$4) + ) + ) + (set_local $9 + (if (result i32) + (i32.and + (get_local $11) + (i32.const 2048) + ) + (block (result i32) + (set_local $8 + (i32.const 1) + ) + (i32.const 4092) + ) + (block (result i32) + (set_local $8 + (tee_local $9 + (i32.and + (get_local $11) + (i32.const 1) + ) + ) + ) + (select + (i32.const 4093) + (i32.const 4091) + (get_local $9) + ) + ) + ) + ) + (br $__rjti$4) + ) + (set_local $5 + (i32.load + (tee_local $7 + (get_local $19) + ) + ) + ) + (set_local $7 + (i32.load offset=4 + (get_local $7) + ) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$4) + ) + (drop + (i32.load offset=4 + (tee_local $5 + (get_local $19) + ) + ) + ) + (i32.store8 + (get_local $40) + (i32.load + (get_local $5) + ) + ) + (set_local $7 + (get_local $40) + ) + (set_local $11 + (get_local $8) + ) + (set_local $12 + (i32.const 1) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjto$8 + (get_local $26) + ) + ) + (set_local $5 + (call $_strerror + (i32.load + (call $___errno_location) + ) + ) + ) + (br $__rjti$5) + ) + (set_local $5 + (select + (tee_local $5 + (i32.load + (get_local $19) + ) + ) + (i32.const 4101) + (get_local $5) + ) + ) + (br $__rjti$5) + ) + (drop + (i32.load offset=4 + (tee_local $5 + (get_local $19) + ) + ) + ) + (i32.store + (get_local $41) + (i32.load + (get_local $5) + ) + ) + (i32.store + (get_local $44) + (i32.const 0) + ) + (i32.store + (get_local $19) + (get_local $41) + ) + (set_local $8 + (i32.const -1) + ) + (br $__rjti$6) + ) + (if + (get_local $6) + (block + (set_local $8 + (get_local $6) + ) + (br $__rjti$6) + ) + (block + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (i32.const 0) + (get_local $11) + ) + (set_local $7 + (i32.const 0) + ) + (br $__rjti$7) + ) + ) + ) + (set_local $15 + (f64.load + (get_local $19) + ) + ) + (i32.store + (get_local $20) + (i32.const 0) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $15) + ) + (drop + (i32.load + (get_global $tempDoublePtr) + ) + ) + (set_local $31 + (if (result i32) + (i32.lt_s + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + (i32.const 0) + ) + (block (result i32) + (set_local $27 + (i32.const 1) + ) + (set_local $15 + (f64.neg + (get_local $15) + ) + ) + (i32.const 4108) + ) + (if (result i32) + (i32.and + (get_local $11) + (i32.const 2048) + ) + (block (result i32) + (set_local $27 + (i32.const 1) + ) + (i32.const 4111) + ) + (block (result i32) + (set_local $27 + (tee_local $5 + (i32.and + (get_local $11) + (i32.const 1) + ) + ) + ) + (select + (i32.const 4114) + (i32.const 4109) + (get_local $5) + ) + ) + ) + ) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $15) + ) + (drop + (i32.load + (get_global $tempDoublePtr) + ) + ) + (set_local $7 + (block $do-once49 (result i32) + (if (result i32) + (i32.or + (i32.lt_u + (tee_local $5 + (i32.and + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + (i32.const 2146435072) + ) + ) + (i32.const 2146435072) + ) + (i32.and + (i32.eq + (get_local $5) + (i32.const 2146435072) + ) + (i32.const 0) + ) + ) + (block (result i32) + (if + (tee_local $5 + (f64.ne + (tee_local $23 + (f64.mul + (call $_frexp + (get_local $15) + (tee_local $5 + (get_local $20) + ) + ) + (f64.const 2) + ) + ) + (f64.const 0) + ) + ) + (i32.store + (get_local $20) + (i32.add + (i32.load + (get_local $20) + ) + (i32.const -1) + ) + ) + ) + (if + (i32.eq + (tee_local $24 + (i32.or + (get_local $18) + (i32.const 32) + ) + ) + (i32.const 97) + ) + (block + (set_local $9 + (select + (i32.add + (get_local $31) + (i32.const 9) + ) + (get_local $31) + (tee_local $13 + (i32.and + (get_local $18) + (i32.const 32) + ) + ) + ) + ) + (set_local $15 + (if (result f64) + (i32.or + (i32.gt_u + (get_local $6) + (i32.const 11) + ) + (i32.eqz + (tee_local $5 + (i32.sub + (i32.const 12) + (get_local $6) + ) + ) + ) + ) + (get_local $23) + (block (result f64) + (set_local $15 + (f64.const 8) + ) + (loop $while-in54 + (set_local $15 + (f64.mul + (get_local $15) + (f64.const 16) + ) + ) + (br_if $while-in54 + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + ) + ) + (if (result f64) + (i32.eq + (i32.load8_s + (get_local $9) + ) + (i32.const 45) + ) + (f64.neg + (f64.add + (get_local $15) + (f64.sub + (f64.neg + (get_local $23) + ) + (get_local $15) + ) + ) + ) + (f64.sub + (f64.add + (get_local $23) + (get_local $15) + ) + (get_local $15) + ) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $5 + (call $_fmt_u + (tee_local $5 + (select + (i32.sub + (i32.const 0) + (tee_local $7 + (i32.load + (get_local $20) + ) + ) + ) + (get_local $7) + (i32.lt_s + (get_local $7) + (i32.const 0) + ) + ) + ) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + (get_local $34) + ) + ) + (get_local $34) + ) + (block + (i32.store8 + (get_local $42) + (i32.const 48) + ) + (set_local $5 + (get_local $42) + ) + ) + ) + (set_local $12 + (i32.or + (get_local $27) + (i32.const 2) + ) + ) + (i32.store8 + (i32.add + (get_local $5) + (i32.const -1) + ) + (i32.add + (i32.and + (i32.shr_s + (get_local $7) + (i32.const 31) + ) + (i32.const 2) + ) + (i32.const 43) + ) + ) + (i32.store8 + (tee_local $8 + (i32.add + (get_local $5) + (i32.const -2) + ) + ) + (i32.add + (get_local $18) + (i32.const 15) + ) + ) + (set_local $18 + (i32.lt_s + (get_local $6) + (i32.const 1) + ) + ) + (set_local $17 + (i32.eqz + (i32.and + (get_local $11) + (i32.const 8) + ) + ) + ) + (set_local $5 + (get_local $22) + ) + (loop $while-in56 + (i32.store8 + (get_local $5) + (i32.or + (i32.load8_u + (i32.add + (tee_local $7 + (call $f64-to-int + (get_local $15) + ) + ) + (i32.const 4075) + ) + ) + (get_local $13) + ) + ) + (set_local $15 + (f64.mul + (f64.sub + (get_local $15) + (f64.convert_s/i32 + (get_local $7) + ) + ) + (f64.const 16) + ) + ) + (set_local $5 + (block $do-once57 (result i32) + (if (result i32) + (i32.eq + (i32.sub + (tee_local $7 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (get_local $37) + ) + (i32.const 1) + ) + (block (result i32) + (drop + (br_if $do-once57 + (get_local $7) + (i32.and + (get_local $17) + (i32.and + (get_local $18) + (f64.eq + (get_local $15) + (f64.const 0) + ) + ) + ) + ) + ) + (i32.store8 + (get_local $7) + (i32.const 46) + ) + (i32.add + (get_local $5) + (i32.const 2) + ) + ) + (get_local $7) + ) + ) + ) + (br_if $while-in56 + (f64.ne + (get_local $15) + (f64.const 0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (tee_local $7 + (i32.add + (tee_local $6 + (select + (i32.sub + (i32.add + (get_local $47) + (get_local $6) + ) + (get_local $8) + ) + (i32.add + (i32.sub + (get_local $45) + (get_local $8) + ) + (get_local $5) + ) + (i32.and + (i32.ne + (get_local $6) + (i32.const 0) + ) + (i32.lt_s + (i32.add + (get_local $46) + (get_local $5) + ) + (get_local $6) + ) + ) + ) + ) + (get_local $12) + ) + ) + (get_local $11) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $9) + (get_local $12) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $11) + (i32.const 65536) + ) + ) + (set_local $5 + (i32.sub + (get_local $5) + (get_local $37) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $22) + (get_local $5) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.sub + (get_local $6) + (i32.add + (get_local $5) + (tee_local $5 + (i32.sub + (get_local $28) + (get_local $8) + ) + ) + ) + ) + (i32.const 0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $8) + (get_local $5) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (br $do-once49 + (select + (get_local $14) + (get_local $7) + (i32.lt_s + (get_local $7) + (get_local $14) + ) + ) + ) + ) + ) + (set_local $15 + (if (result f64) + (get_local $5) + (block (result f64) + (i32.store + (get_local $20) + (tee_local $5 + (i32.add + (i32.load + (get_local $20) + ) + (i32.const -28) + ) + ) + ) + (f64.mul + (get_local $23) + (f64.const 268435456) + ) + ) + (block (result f64) + (set_local $5 + (i32.load + (get_local $20) + ) + ) + (get_local $23) + ) + ) + ) + (set_local $7 + (tee_local $8 + (select + (get_local $48) + (get_local $49) + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + ) + ) + ) + (loop $while-in60 + (i32.store + (get_local $7) + (tee_local $5 + (call $f64-to-int + (get_local $15) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (br_if $while-in60 + (f64.ne + (tee_local $15 + (f64.mul + (f64.sub + (get_local $15) + (f64.convert_u/i32 + (get_local $5) + ) + ) + (f64.const 1e9) + ) + ) + (f64.const 0) + ) + ) + ) + (if + (i32.gt_s + (tee_local $9 + (i32.load + (get_local $20) + ) + ) + (i32.const 0) + ) + (block + (set_local $5 + (get_local $8) + ) + (loop $while-in62 + (set_local $13 + (select + (i32.const 29) + (get_local $9) + (i32.gt_s + (get_local $9) + (i32.const 29) + ) + ) + ) + (block $do-once63 + (if + (i32.ge_u + (tee_local $9 + (i32.add + (get_local $7) + (i32.const -4) + ) + ) + (get_local $5) + ) + (block + (set_local $12 + (i32.const 0) + ) + (loop $while-in66 + (i32.store + (get_local $9) + (call $___uremdi3 + (tee_local $12 + (call $_i64Add + (call $_bitshift64Shl + (i32.load + (get_local $9) + ) + (i32.const 0) + (get_local $13) + ) + (get_global $tempRet0) + (get_local $12) + (i32.const 0) + ) + ) + (tee_local $17 + (get_global $tempRet0) + ) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (set_local $12 + (call $___udivdi3 + (get_local $12) + (get_local $17) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (br_if $while-in66 + (i32.ge_u + (tee_local $9 + (i32.add + (get_local $9) + (i32.const -4) + ) + ) + (get_local $5) + ) + ) + ) + (br_if $do-once63 + (i32.eqz + (get_local $12) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -4) + ) + ) + (get_local $12) + ) + ) + ) + ) + (loop $while-in68 + (if + (i32.gt_u + (get_local $7) + (get_local $5) + ) + (if + (i32.eqz + (i32.load + (tee_local $9 + (i32.add + (get_local $7) + (i32.const -4) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $9) + ) + (br $while-in68) + ) + ) + ) + ) + (i32.store + (get_local $20) + (tee_local $9 + (i32.sub + (i32.load + (get_local $20) + ) + (get_local $13) + ) + ) + ) + (br_if $while-in62 + (i32.gt_s + (get_local $9) + (i32.const 0) + ) + ) + ) + ) + (set_local $5 + (get_local $8) + ) + ) + (set_local $17 + (select + (i32.const 6) + (get_local $6) + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + ) + ) + (if + (i32.lt_s + (get_local $9) + (i32.const 0) + ) + (block + (set_local $21 + (i32.add + (call $i32s-div + (i32.add + (get_local $17) + (i32.const 25) + ) + (i32.const 9) + ) + (i32.const 1) + ) + ) + (set_local $32 + (i32.eq + (get_local $24) + (i32.const 102) + ) + ) + (set_local $6 + (get_local $5) + ) + (set_local $5 + (get_local $7) + ) + (loop $while-in70 + (set_local $13 + (select + (i32.const 9) + (tee_local $7 + (i32.sub + (i32.const 0) + (get_local $9) + ) + ) + (i32.gt_s + (get_local $7) + (i32.const 9) + ) + ) + ) + (block $do-once71 + (if + (i32.lt_u + (get_local $6) + (get_local $5) + ) + (block + (set_local $12 + (i32.add + (i32.shl + (i32.const 1) + (get_local $13) + ) + (i32.const -1) + ) + ) + (set_local $38 + (i32.shr_u + (i32.const 1000000000) + (get_local $13) + ) + ) + (set_local $9 + (i32.const 0) + ) + (set_local $7 + (get_local $6) + ) + (loop $while-in74 + (i32.store + (get_local $7) + (i32.add + (i32.shr_u + (tee_local $33 + (i32.load + (get_local $7) + ) + ) + (get_local $13) + ) + (get_local $9) + ) + ) + (set_local $9 + (i32.mul + (i32.and + (get_local $33) + (get_local $12) + ) + (get_local $38) + ) + ) + (br_if $while-in74 + (i32.lt_u + (tee_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (get_local $5) + ) + ) + ) + (set_local $7 + (select + (get_local $6) + (i32.add + (get_local $6) + (i32.const 4) + ) + (i32.load + (get_local $6) + ) + ) + ) + (br_if $do-once71 + (i32.eqz + (get_local $9) + ) + ) + (i32.store + (get_local $5) + (get_local $9) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + ) + (set_local $7 + (select + (get_local $6) + (i32.add + (get_local $6) + (i32.const 4) + ) + (i32.load + (get_local $6) + ) + ) + ) + ) + ) + (set_local $12 + (select + (i32.add + (tee_local $6 + (select + (get_local $8) + (get_local $7) + (get_local $32) + ) + ) + (i32.shl + (get_local $21) + (i32.const 2) + ) + ) + (get_local $5) + (i32.gt_s + (i32.shr_s + (i32.sub + (get_local $5) + (get_local $6) + ) + (i32.const 2) + ) + (get_local $21) + ) + ) + ) + (i32.store + (get_local $20) + (tee_local $9 + (i32.add + (i32.load + (get_local $20) + ) + (get_local $13) + ) + ) + ) + (if + (i32.lt_s + (get_local $9) + (i32.const 0) + ) + (block + (set_local $6 + (get_local $7) + ) + (set_local $5 + (get_local $12) + ) + (br $while-in70) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $9 + (get_local $12) + ) + ) + ) + ) + ) + (set_local $9 + (get_local $7) + ) + ) + (set_local $21 + (get_local $8) + ) + (block $do-once75 + (if + (i32.lt_u + (get_local $5) + (get_local $9) + ) + (block + (set_local $7 + (i32.mul + (i32.shr_s + (i32.sub + (get_local $21) + (get_local $5) + ) + (i32.const 2) + ) + (i32.const 9) + ) + ) + (br_if $do-once75 + (i32.lt_u + (tee_local $12 + (i32.load + (get_local $5) + ) + ) + (i32.const 10) + ) + ) + (set_local $6 + (i32.const 10) + ) + (loop $while-in78 + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br_if $while-in78 + (i32.ge_u + (get_local $12) + (tee_local $6 + (i32.mul + (get_local $6) + (i32.const 10) + ) + ) + ) + ) + ) + ) + (set_local $7 + (i32.const 0) + ) + ) + ) + (set_local $5 + (if (result i32) + (i32.lt_s + (tee_local $6 + (i32.add + (i32.sub + (get_local $17) + (select + (get_local $7) + (i32.const 0) + (i32.ne + (get_local $24) + (i32.const 102) + ) + ) + ) + (i32.shr_s + (i32.shl + (i32.and + (tee_local $32 + (i32.ne + (get_local $17) + (i32.const 0) + ) + ) + (tee_local $38 + (i32.eq + (get_local $24) + (i32.const 103) + ) + ) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + ) + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (get_local $9) + (get_local $21) + ) + (i32.const 2) + ) + (i32.const 9) + ) + (i32.const -9) + ) + ) + (block (result i32) + (set_local $13 + (call $i32s-div + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 9216) + ) + ) + (i32.const 9) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.add + (if (result i32) + (tee_local $12 + (i32.const 9) + ) + (i32.rem_s + (get_local $6) + (get_local $12) + ) + (i32.const 0) + ) + (i32.const 1) + ) + ) + (i32.const 9) + ) + (block + (set_local $12 + (i32.const 10) + ) + (loop $while-in80 + (set_local $12 + (i32.mul + (get_local $12) + (i32.const 10) + ) + ) + (br_if $while-in80 + (i32.ne + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (i32.const 9) + ) + ) + ) + ) + (set_local $12 + (i32.const 10) + ) + ) + (set_local $13 + (call $i32u-rem + (tee_local $24 + (i32.load + (tee_local $6 + (i32.add + (i32.add + (get_local $8) + (i32.shl + (get_local $13) + (i32.const 2) + ) + ) + (i32.const -4092) + ) + ) + ) + ) + (get_local $12) + ) + ) + (block $do-once81 + (if + (i32.eqz + (i32.and + (tee_local $33 + (i32.eq + (i32.add + (get_local $6) + (i32.const 4) + ) + (get_local $9) + ) + ) + (i32.eqz + (get_local $13) + ) + ) + ) + (block + (set_local $50 + (call $i32u-div + (get_local $24) + (get_local $12) + ) + ) + (set_local $15 + (if (result f64) + (i32.lt_u + (get_local $13) + (tee_local $51 + (call $i32s-div + (get_local $12) + (i32.const 2) + ) + ) + ) + (f64.const 0.5) + (select + (f64.const 1) + (f64.const 1.5) + (i32.and + (get_local $33) + (i32.eq + (get_local $13) + (get_local $51) + ) + ) + ) + ) + ) + (set_local $23 + (select + (f64.const 9007199254740994) + (f64.const 9007199254740992) + (i32.and + (get_local $50) + (i32.const 1) + ) + ) + ) + (block $do-once83 + (if + (get_local $27) + (block + (br_if $do-once83 + (i32.ne + (i32.load8_s + (get_local $31) + ) + (i32.const 45) + ) + ) + (set_local $23 + (f64.neg + (get_local $23) + ) + ) + (set_local $15 + (f64.neg + (get_local $15) + ) + ) + ) + ) + ) + (i32.store + (get_local $6) + (tee_local $13 + (i32.sub + (get_local $24) + (get_local $13) + ) + ) + ) + (br_if $do-once81 + (f64.eq + (f64.add + (get_local $23) + (get_local $15) + ) + (get_local $23) + ) + ) + (i32.store + (get_local $6) + (tee_local $7 + (i32.add + (get_local $13) + (get_local $12) + ) + ) + ) + (if + (i32.gt_u + (get_local $7) + (i32.const 999999999) + ) + (loop $while-in86 + (i32.store + (get_local $6) + (i32.const 0) + ) + (if + (i32.lt_u + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -4) + ) + ) + (get_local $5) + ) + (i32.store + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -4) + ) + ) + (i32.const 0) + ) + ) + (i32.store + (get_local $6) + (tee_local $7 + (i32.add + (i32.load + (get_local $6) + ) + (i32.const 1) + ) + ) + ) + (br_if $while-in86 + (i32.gt_u + (get_local $7) + (i32.const 999999999) + ) + ) + ) + ) + (set_local $7 + (i32.mul + (i32.shr_s + (i32.sub + (get_local $21) + (get_local $5) + ) + (i32.const 2) + ) + (i32.const 9) + ) + ) + (br_if $do-once81 + (i32.lt_u + (tee_local $13 + (i32.load + (get_local $5) + ) + ) + (i32.const 10) + ) + ) + (set_local $12 + (i32.const 10) + ) + (loop $while-in88 + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br_if $while-in88 + (i32.ge_u + (get_local $13) + (tee_local $12 + (i32.mul + (get_local $12) + (i32.const 10) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $12 + (get_local $5) + ) + (set_local $13 + (get_local $7) + ) + (select + (tee_local $5 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (get_local $9) + (i32.gt_u + (get_local $9) + (get_local $5) + ) + ) + ) + (block (result i32) + (set_local $12 + (get_local $5) + ) + (set_local $13 + (get_local $7) + ) + (get_local $9) + ) + ) + ) + (set_local $33 + (i32.sub + (i32.const 0) + (get_local $13) + ) + ) + (loop $while-in90 + (block $while-out89 + (if + (i32.le_u + (get_local $5) + (get_local $12) + ) + (block + (set_local $24 + (i32.const 0) + ) + (set_local $9 + (get_local $5) + ) + (br $while-out89) + ) + ) + (if + (i32.load + (tee_local $7 + (i32.add + (get_local $5) + (i32.const -4) + ) + ) + ) + (block + (set_local $24 + (i32.const 1) + ) + (set_local $9 + (get_local $5) + ) + ) + (block + (set_local $5 + (get_local $7) + ) + (br $while-in90) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (tee_local $13 + (i32.add + (i32.add + (i32.add + (i32.add + (get_local $27) + (i32.const 1) + ) + (tee_local $5 + (block $do-once91 (result i32) + (if (result i32) + (get_local $38) + (block (result i32) + (set_local $7 + (if (result i32) + (i32.and + (i32.gt_s + (tee_local $5 + (i32.add + (i32.xor + (get_local $32) + (i32.const 1) + ) + (get_local $17) + ) + ) + (get_local $13) + ) + (i32.gt_s + (get_local $13) + (i32.const -5) + ) + ) + (block (result i32) + (set_local $17 + (i32.sub + (i32.add + (get_local $5) + (i32.const -1) + ) + (get_local $13) + ) + ) + (i32.add + (get_local $18) + (i32.const -1) + ) + ) + (block (result i32) + (set_local $17 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + (i32.add + (get_local $18) + (i32.const -2) + ) + ) + ) + ) + (if + (tee_local $5 + (i32.and + (get_local $11) + (i32.const 8) + ) + ) + (block + (set_local $21 + (get_local $5) + ) + (br $do-once91 + (get_local $17) + ) + ) + ) + (block $do-once93 + (if + (get_local $24) + (block + (if + (i32.eqz + (tee_local $18 + (i32.load + (i32.add + (get_local $9) + (i32.const -4) + ) + ) + ) + ) + (block + (set_local $5 + (i32.const 9) + ) + (br $do-once93) + ) + ) + (if + (call $i32u-rem + (get_local $18) + (i32.const 10) + ) + (block + (set_local $5 + (i32.const 0) + ) + (br $do-once93) + ) + (block + (set_local $6 + (i32.const 10) + ) + (set_local $5 + (i32.const 0) + ) + ) + ) + (loop $while-in96 + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (br_if $while-in96 + (i32.eqz + (call $i32u-rem + (get_local $18) + (tee_local $6 + (i32.mul + (get_local $6) + (i32.const 10) + ) + ) + ) + ) + ) + ) + ) + (set_local $5 + (i32.const 9) + ) + ) + ) + (set_local $6 + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (get_local $9) + (get_local $21) + ) + (i32.const 2) + ) + (i32.const 9) + ) + (i32.const -9) + ) + ) + (if (result i32) + (i32.eq + (i32.or + (get_local $7) + (i32.const 32) + ) + (i32.const 102) + ) + (block (result i32) + (set_local $21 + (i32.const 0) + ) + (select + (get_local $17) + (tee_local $5 + (select + (i32.const 0) + (tee_local $5 + (i32.sub + (get_local $6) + (get_local $5) + ) + ) + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + ) + ) + (i32.lt_s + (get_local $17) + (get_local $5) + ) + ) + ) + (block (result i32) + (set_local $21 + (i32.const 0) + ) + (select + (get_local $17) + (tee_local $5 + (select + (i32.const 0) + (tee_local $5 + (i32.sub + (i32.add + (get_local $6) + (get_local $13) + ) + (get_local $5) + ) + ) + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + ) + ) + (i32.lt_s + (get_local $17) + (get_local $5) + ) + ) + ) + ) + ) + (block (result i32) + (set_local $21 + (i32.and + (get_local $11) + (i32.const 8) + ) + ) + (set_local $7 + (get_local $18) + ) + (get_local $17) + ) + ) + ) + ) + ) + (i32.ne + (tee_local $32 + (i32.or + (get_local $5) + (get_local $21) + ) + ) + (i32.const 0) + ) + ) + (if (result i32) + (tee_local $17 + (i32.eq + (i32.or + (get_local $7) + (i32.const 32) + ) + (i32.const 102) + ) + ) + (block (result i32) + (set_local $18 + (i32.const 0) + ) + (select + (get_local $13) + (i32.const 0) + (i32.gt_s + (get_local $13) + (i32.const 0) + ) + ) + ) + (block (result i32) + (if + (i32.lt_s + (i32.sub + (get_local $28) + (tee_local $6 + (call $_fmt_u + (tee_local $6 + (select + (get_local $33) + (get_local $13) + (i32.lt_s + (get_local $13) + (i32.const 0) + ) + ) + ) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + (get_local $34) + ) + ) + ) + (i32.const 2) + ) + (loop $while-in98 + (i32.store8 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in98 + (i32.lt_s + (i32.sub + (get_local $28) + (get_local $6) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store8 + (i32.add + (get_local $6) + (i32.const -1) + ) + (i32.add + (i32.and + (i32.shr_s + (get_local $13) + (i32.const 31) + ) + (i32.const 2) + ) + (i32.const 43) + ) + ) + (i32.store8 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -2) + ) + ) + (get_local $7) + ) + (set_local $18 + (get_local $6) + ) + (i32.sub + (get_local $28) + (get_local $6) + ) + ) + ) + ) + ) + (get_local $11) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $31) + (get_local $27) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $14) + (get_local $13) + (i32.xor + (get_local $11) + (i32.const 65536) + ) + ) + (block $do-once99 + (if + (get_local $17) + (block + (set_local $6 + (tee_local $12 + (select + (get_local $8) + (get_local $12) + (i32.gt_u + (get_local $12) + (get_local $8) + ) + ) + ) + ) + (loop $while-in102 + (set_local $7 + (call $_fmt_u + (i32.load + (get_local $6) + ) + (i32.const 0) + (get_local $30) + ) + ) + (block $do-once103 + (if + (i32.eq + (get_local $6) + (get_local $12) + ) + (block + (br_if $do-once103 + (i32.ne + (get_local $7) + (get_local $30) + ) + ) + (i32.store8 + (get_local $35) + (i32.const 48) + ) + (set_local $7 + (get_local $35) + ) + ) + (block + (br_if $do-once103 + (i32.le_u + (get_local $7) + (get_local $22) + ) + ) + (loop $while-in106 + (i32.store8 + (tee_local $7 + (i32.add + (get_local $7) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in106 + (i32.gt_u + (get_local $7) + (get_local $22) + ) + ) + ) + ) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $7) + (i32.sub + (get_local $43) + (get_local $7) + ) + (get_local $0) + ) + ) + ) + (if + (i32.le_u + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (get_local $8) + ) + (block + (set_local $6 + (get_local $7) + ) + (br $while-in102) + ) + ) + ) + (block $do-once107 + (if + (get_local $32) + (block + (br_if $do-once107 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $0) + ) + ) + ) + ) + ) + (if + (i32.and + (i32.gt_s + (get_local $5) + (i32.const 0) + ) + (i32.lt_u + (get_local $7) + (get_local $9) + ) + ) + (loop $while-in110 + (if + (i32.gt_u + (tee_local $6 + (call $_fmt_u + (i32.load + (get_local $7) + ) + (i32.const 0) + (get_local $30) + ) + ) + (get_local $22) + ) + (loop $while-in112 + (i32.store8 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in112 + (i32.gt_u + (get_local $6) + (get_local $22) + ) + ) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $6) + (select + (i32.const 9) + (get_local $5) + (i32.gt_s + (get_local $5) + (i32.const 9) + ) + ) + (get_local $0) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $5) + (i32.const -9) + ) + ) + (if + (i32.and + (i32.gt_s + (get_local $5) + (i32.const 9) + ) + (i32.lt_u + (tee_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (get_local $9) + ) + ) + (block + (set_local $5 + (get_local $6) + ) + (br $while-in110) + ) + (set_local $5 + (get_local $6) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.add + (get_local $5) + (i32.const 9) + ) + (i32.const 9) + (i32.const 0) + ) + ) + (block + (set_local $9 + (select + (get_local $9) + (i32.add + (get_local $12) + (i32.const 4) + ) + (get_local $24) + ) + ) + (if + (i32.gt_s + (get_local $5) + (i32.const -1) + ) + (block + (set_local $17 + (i32.eqz + (get_local $21) + ) + ) + (set_local $6 + (get_local $12) + ) + (set_local $7 + (get_local $5) + ) + (loop $while-in114 + (if + (i32.eq + (tee_local $5 + (call $_fmt_u + (i32.load + (get_local $6) + ) + (i32.const 0) + (get_local $30) + ) + ) + (get_local $30) + ) + (block + (i32.store8 + (get_local $35) + (i32.const 48) + ) + (set_local $5 + (get_local $35) + ) + ) + ) + (block $do-once115 + (if + (i32.eq + (get_local $6) + (get_local $12) + ) + (block + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $5) + (i32.const 1) + (get_local $0) + ) + ) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (br_if $do-once115 + (i32.and + (get_local $17) + (i32.lt_s + (get_local $7) + (i32.const 1) + ) + ) + ) + (br_if $do-once115 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (get_local $0) + ) + ) + ) + (block + (br_if $do-once115 + (i32.le_u + (get_local $5) + (get_local $22) + ) + ) + (loop $while-in118 + (i32.store8 + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in118 + (i32.gt_u + (get_local $5) + (get_local $22) + ) + ) + ) + ) + ) + ) + (set_local $8 + (i32.sub + (get_local $43) + (get_local $5) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $5) + (select + (get_local $8) + (get_local $7) + (i32.gt_s + (get_local $7) + (get_local $8) + ) + ) + (get_local $0) + ) + ) + ) + (br_if $while-in114 + (i32.and + (i32.lt_u + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (get_local $9) + ) + (i32.gt_s + (tee_local $7 + (i32.sub + (get_local $7) + (get_local $8) + ) + ) + (i32.const -1) + ) + ) + ) + (set_local $5 + (get_local $7) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.add + (get_local $5) + (i32.const 18) + ) + (i32.const 18) + (i32.const 0) + ) + (br_if $do-once99 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $18) + (i32.sub + (get_local $28) + (get_local $18) + ) + (get_local $0) + ) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $13) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (select + (get_local $14) + (get_local $13) + (i32.lt_s + (get_local $13) + (get_local $14) + ) + ) + ) + (block (result i32) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (tee_local $7 + (i32.add + (tee_local $9 + (select + (i32.const 0) + (get_local $27) + (tee_local $6 + (i32.or + (f64.ne + (get_local $15) + (get_local $15) + ) + (i32.const 0) + ) + ) + ) + ) + (i32.const 3) + ) + ) + (get_local $8) + ) + (if + (i32.eqz + (i32.and + (tee_local $5 + (i32.load + (get_local $0) + ) + ) + (i32.const 32) + ) + ) + (block + (drop + (call $___fwritex + (get_local $31) + (get_local $9) + (get_local $0) + ) + ) + (set_local $5 + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $6 + (select + (select + (i32.const 4135) + (i32.const 4139) + (tee_local $8 + (i32.ne + (i32.and + (get_local $18) + (i32.const 32) + ) + (i32.const 0) + ) + ) + ) + (select + (i32.const 4127) + (i32.const 4131) + (get_local $8) + ) + (get_local $6) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $5) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $6) + (i32.const 3) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (select + (get_local $14) + (get_local $7) + (i32.lt_s + (get_local $7) + (get_local $14) + ) + ) + ) + ) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (br $label$continue$L1) + ) + (set_local $7 + (get_local $5) + ) + (set_local $12 + (get_local $6) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjto$8 + (get_local $26) + ) + ) + (set_local $9 + (i32.and + (get_local $18) + (i32.const 32) + ) + ) + (if + (i32.and + (i32.eqz + (tee_local $8 + (i32.load + (tee_local $5 + (get_local $19) + ) + ) + ) + ) + (i32.eqz + (tee_local $11 + (i32.load offset=4 + (get_local $5) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $26) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjti$8) + ) + (block + (set_local $5 + (get_local $8) + ) + (set_local $8 + (get_local $26) + ) + (loop $while-in123 + (i32.store8 + (tee_local $8 + (i32.add + (get_local $8) + (i32.const -1) + ) + ) + (i32.or + (i32.load8_u + (i32.add + (i32.and + (get_local $5) + (i32.const 15) + ) + (i32.const 4075) + ) + ) + (get_local $9) + ) + ) + (br_if $while-in123 + (i32.eqz + (i32.and + (i32.eqz + (tee_local $5 + (call $_bitshift64Lshr + (get_local $5) + (get_local $11) + (i32.const 4) + ) + ) + ) + (i32.eqz + (tee_local $11 + (get_global $tempRet0) + ) + ) + ) + ) + ) + (set_local $5 + (get_local $8) + ) + ) + (set_local $8 + (if (result i32) + (i32.or + (i32.eqz + (i32.and + (get_local $7) + (i32.const 8) + ) + ) + (i32.and + (i32.eqz + (i32.load + (tee_local $11 + (get_local $19) + ) + ) + ) + (i32.eqz + (i32.load offset=4 + (get_local $11) + ) + ) + ) + ) + (block (result i32) + (set_local $9 + (i32.const 4091) + ) + (i32.const 0) + ) + (block (result i32) + (set_local $9 + (i32.add + (i32.shr_s + (get_local $18) + (i32.const 4) + ) + (i32.const 4091) + ) + ) + (i32.const 2) + ) + ) + ) + (br $__rjti$8) + ) + ) + ) + (set_local $5 + (call $_fmt_u + (get_local $5) + (get_local $7) + (get_local $26) + ) + ) + (set_local $7 + (get_local $11) + ) + (br $__rjti$8) + ) + (set_local $18 + (i32.eqz + (tee_local $13 + (call $_memchr + (get_local $5) + (i32.const 0) + (get_local $6) + ) + ) + ) + ) + (set_local $7 + (get_local $5) + ) + (set_local $11 + (get_local $8) + ) + (set_local $12 + (select + (get_local $6) + (i32.sub + (get_local $13) + (get_local $5) + ) + (get_local $18) + ) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (i32.const 4091) + ) + (br $__rjto$8 + (select + (i32.add + (get_local $5) + (get_local $6) + ) + (get_local $13) + (get_local $18) + ) + ) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $6 + (i32.load + (get_local $19) + ) + ) + (loop $while-in125 + (block $while-out124 + (br_if $while-out124 + (i32.eqz + (tee_local $9 + (i32.load + (get_local $6) + ) + ) + ) + ) + (br_if $while-out124 + (i32.or + (i32.lt_s + (tee_local $7 + (call $_wctomb + (get_local $36) + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.gt_u + (get_local $7) + (i32.sub + (get_local $8) + (get_local $5) + ) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (br_if $while-in125 + (i32.gt_u + (get_local $8) + (tee_local $5 + (i32.add + (get_local $7) + (get_local $5) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_s + (get_local $7) + (i32.const 0) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $5) + (get_local $11) + ) + (if + (get_local $5) + (block + (set_local $6 + (i32.const 0) + ) + (set_local $7 + (i32.load + (get_local $19) + ) + ) + (loop $while-in127 + (if + (i32.eqz + (tee_local $8 + (i32.load + (get_local $7) + ) + ) + ) + (block + (set_local $7 + (get_local $5) + ) + (br $__rjti$7) + ) + ) + (if + (i32.gt_s + (tee_local $6 + (i32.add + (tee_local $8 + (call $_wctomb + (get_local $36) + (get_local $8) + ) + ) + (get_local $6) + ) + ) + (get_local $5) + ) + (block + (set_local $7 + (get_local $5) + ) + (br $__rjti$7) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $36) + (get_local $8) + (get_local $0) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (br_if $while-in127 + (i32.lt_u + (get_local $6) + (get_local $5) + ) + ) + (set_local $7 + (get_local $5) + ) + ) + ) + (set_local $7 + (i32.const 0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $14) + (get_local $7) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (select + (get_local $14) + (get_local $7) + (i32.gt_s + (get_local $14) + (get_local $7) + ) + ) + ) + (br $label$continue$L1) + ) + (set_local $11 + (select + (i32.and + (get_local $7) + (i32.const -65537) + ) + (get_local $7) + (i32.gt_s + (get_local $6) + (i32.const -1) + ) + ) + ) + (set_local $12 + (if (result i32) + (i32.or + (get_local $6) + (tee_local $12 + (i32.or + (i32.ne + (i32.load + (tee_local $7 + (get_local $19) + ) + ) + (i32.const 0) + ) + (i32.ne + (i32.load offset=4 + (get_local $7) + ) + (i32.const 0) + ) + ) + ) + ) + (block (result i32) + (set_local $7 + (get_local $5) + ) + (select + (get_local $6) + (tee_local $5 + (i32.add + (i32.xor + (i32.and + (get_local $12) + (i32.const 1) + ) + (i32.const 1) + ) + (i32.sub + (get_local $39) + (get_local $5) + ) + ) + ) + (i32.gt_s + (get_local $6) + (get_local $5) + ) + ) + ) + (block (result i32) + (set_local $7 + (get_local $26) + ) + (i32.const 0) + ) + ) + ) + (get_local $26) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (tee_local $6 + (select + (tee_local $5 + (i32.add + (get_local $8) + (tee_local $12 + (select + (tee_local $13 + (i32.sub + (get_local $5) + (get_local $7) + ) + ) + (get_local $12) + (i32.lt_s + (get_local $12) + (get_local $13) + ) + ) + ) + ) + ) + (get_local $14) + (i32.lt_s + (get_local $14) + (get_local $5) + ) + ) + ) + (get_local $5) + (get_local $11) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $9) + (get_local $8) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $6) + (get_local $5) + (i32.xor + (get_local $11) + (i32.const 65536) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $12) + (get_local $13) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $7) + (get_local $13) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $6) + (get_local $5) + (i32.xor + (get_local $11) + (i32.const 8192) + ) + ) + (set_local $5 + (get_local $10) + ) + (set_local $10 + (get_local $6) + ) + (br $label$continue$L1) + ) + ) + (br $label$break$L343) + ) + (if + (i32.eqz + (get_local $0) + ) + (if + (get_local $1) + (block + (set_local $0 + (i32.const 1) + ) + (loop $while-in130 + (if + (tee_local $1 + (i32.load + (i32.add + (get_local $4) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + ) + ) + (block + (call $_pop_arg_336 + (i32.add + (get_local $3) + (i32.shl + (get_local $0) + (i32.const 3) + ) + ) + (get_local $1) + (get_local $2) + ) + (br_if $while-in130 + (i32.lt_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.const 10) + ) + ) + (set_local $16 + (i32.const 1) + ) + (br $label$break$L343) + ) + ) + ) + (if + (i32.lt_s + (get_local $0) + (i32.const 10) + ) + (loop $while-in132 + (if + (i32.load + (i32.add + (get_local $4) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + ) + (block + (set_local $16 + (i32.const -1) + ) + (br $label$break$L343) + ) + ) + (br_if $while-in132 + (i32.lt_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.const 10) + ) + ) + (set_local $16 + (i32.const 1) + ) + ) + (set_local $16 + (i32.const 1) + ) + ) + ) + (set_local $16 + (i32.const 0) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $25) + ) + (get_local $16) + ) + (func $_pop_arg_336 (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 f64) + (local $5 i32) + (block $label$break$L1 + (if + (i32.le_u + (get_local $1) + (i32.const 20) + ) + (block $switch-default + (block $switch-case9 + (block $switch-case8 + (block $switch-case7 + (block $switch-case6 + (block $switch-case5 + (block $switch-case4 + (block $switch-case3 + (block $switch-case2 + (block $switch-case1 + (block $switch-case + (br_table $switch-case $switch-case1 $switch-case2 $switch-case3 $switch-case4 $switch-case5 $switch-case6 $switch-case7 $switch-case8 $switch-case9 $switch-default + (i32.sub + (get_local $1) + (i32.const 9) + ) + ) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + (br $label$break$L1) + ) + (set_local $1 + (i32.load + (tee_local $3 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $1) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $5 + (i32.load + (tee_local $3 + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + ) + (set_local $3 + (i32.load offset=4 + (get_local $3) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (i32.store + (get_local $0) + (get_local $5) + ) + (i32.store offset=4 + (get_local $0) + (get_local $3) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (tee_local $1 + (i32.shr_s + (i32.shl + (i32.and + (get_local $3) + (i32.const 65535) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $3) + (i32.const 65535) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (tee_local $1 + (i32.shr_s + (i32.shl + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $4 + (f64.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (f64.store + (get_local $0) + (get_local $4) + ) + (br $label$break$L1) + ) + (set_local $4 + (f64.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (f64.store + (get_local $0) + (get_local $4) + ) + ) + ) + ) + ) + (func $_fmt_u (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (if + (i32.or + (i32.gt_u + (get_local $1) + (i32.const 0) + ) + (i32.and + (i32.eqz + (get_local $1) + ) + (i32.gt_u + (get_local $0) + (i32.const -1) + ) + ) + ) + (loop $while-in + (i32.store8 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.or + (tee_local $3 + (call $___uremdi3 + (get_local $0) + (get_local $1) + (i32.const 10) + (i32.const 0) + ) + ) + (i32.const 48) + ) + ) + (set_local $3 + (call $___udivdi3 + (get_local $0) + (get_local $1) + (i32.const 10) + (i32.const 0) + ) + ) + (set_local $4 + (get_global $tempRet0) + ) + (if + (i32.or + (i32.gt_u + (get_local $1) + (i32.const 9) + ) + (i32.and + (i32.eq + (get_local $1) + (i32.const 9) + ) + (i32.gt_u + (get_local $0) + (i32.const -1) + ) + ) + ) + (block + (set_local $0 + (get_local $3) + ) + (set_local $1 + (get_local $4) + ) + (br $while-in) + ) + (set_local $0 + (get_local $3) + ) + ) + ) + ) + (if + (get_local $0) + (loop $while-in1 + (i32.store8 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.or + (call $i32u-rem + (get_local $0) + (i32.const 10) + ) + (i32.const 48) + ) + ) + (set_local $1 + (call $i32u-div + (get_local $0) + (i32.const 10) + ) + ) + (if + (i32.ge_u + (get_local $0) + (i32.const 10) + ) + (block + (set_local $0 + (get_local $1) + ) + (br $while-in1) + ) + ) + ) + ) + (get_local $2) + ) + (func $_pad (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 256) + ) + ) + (if + (i32.ge_s + (get_global $STACKTOP) + (get_global $STACK_MAX) + ) + (call $abort) + ) + (set_local $6 + (get_local $7) + ) + (block $do-once + (if + (i32.and + (i32.gt_s + (get_local $2) + (get_local $3) + ) + (i32.eqz + (i32.and + (get_local $4) + (i32.const 73728) + ) + ) + ) + (block + (drop + (call $_memset + (get_local $6) + (get_local $1) + (select + (i32.const 256) + (tee_local $5 + (i32.sub + (get_local $2) + (get_local $3) + ) + ) + (i32.gt_u + (get_local $5) + (i32.const 256) + ) + ) + ) + ) + (set_local $4 + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.const 32) + ) + ) + ) + (if + (i32.gt_u + (get_local $5) + (i32.const 255) + ) + (block + (loop $while-in + (if + (get_local $4) + (block + (drop + (call $___fwritex + (get_local $6) + (i32.const 256) + (get_local $0) + ) + ) + (set_local $1 + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $4 + (i32.eqz + (i32.and + (get_local $1) + (i32.const 32) + ) + ) + ) + (br_if $while-in + (i32.gt_u + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -256) + ) + ) + (i32.const 255) + ) + ) + ) + (br_if $do-once + (i32.eqz + (get_local $4) + ) + ) + (set_local $5 + (i32.and + (i32.sub + (get_local $2) + (get_local $3) + ) + (i32.const 255) + ) + ) + ) + (br_if $do-once + (i32.eqz + (get_local $4) + ) + ) + ) + (drop + (call $___fwritex + (get_local $6) + (get_local $5) + (get_local $0) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + ) + (func $_malloc (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (block $folding-inner0 + (block $do-once + (if + (i32.lt_u + (get_local $0) + (i32.const 245) + ) + (block + (if + (i32.and + (tee_local $5 + (i32.shr_u + (tee_local $11 + (i32.load + (i32.const 176) + ) + ) + (tee_local $13 + (i32.shr_u + (tee_local $4 + (select + (i32.const 16) + (i32.and + (i32.add + (get_local $0) + (i32.const 11) + ) + (i32.const -8) + ) + (i32.lt_u + (get_local $0) + (i32.const 11) + ) + ) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 3) + ) + (block + (set_local $10 + (i32.load + (tee_local $1 + (i32.add + (tee_local $7 + (i32.load + (tee_local $3 + (i32.add + (tee_local $2 + (i32.add + (i32.shl + (tee_local $4 + (i32.add + (i32.xor + (i32.and + (get_local $5) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $13) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $2) + (get_local $10) + ) + (i32.store + (i32.const 176) + (i32.and + (get_local $11) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $4) + ) + (i32.const -1) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + ) + (get_local $7) + ) + (block + (i32.store + (get_local $0) + (get_local $2) + ) + (i32.store + (get_local $3) + (get_local $10) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=4 + (get_local $7) + (i32.or + (tee_local $0 + (i32.shl + (get_local $4) + (i32.const 3) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $7) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + (return + (get_local $1) + ) + ) + ) + (if + (i32.gt_u + (get_local $4) + (tee_local $0 + (i32.load + (i32.const 184) + ) + ) + ) + (block + (if + (get_local $5) + (block + (set_local $10 + (i32.and + (i32.shr_u + (tee_local $3 + (i32.add + (i32.and + (tee_local $3 + (i32.and + (i32.shl + (get_local $5) + (get_local $13) + ) + (i32.or + (tee_local $3 + (i32.shl + (i32.const 2) + (get_local $13) + ) + ) + (i32.sub + (i32.const 0) + (get_local $3) + ) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $3) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $9 + (i32.load + (tee_local $7 + (i32.add + (tee_local $12 + (i32.load + (tee_local $3 + (i32.add + (tee_local $10 + (i32.add + (i32.shl + (tee_local $5 + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $3) + (get_local $10) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $10) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $3 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $7) + (get_local $3) + ) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $10) + (get_local $9) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (get_local $11) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $8 + (get_local $0) + ) + ) + (block + (if + (i32.lt_u + (get_local $9) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $9) + (i32.const 12) + ) + ) + ) + (get_local $12) + ) + (block + (i32.store + (get_local $0) + (get_local $10) + ) + (i32.store + (get_local $3) + (get_local $9) + ) + (set_local $8 + (i32.load + (i32.const 184) + ) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.or + (get_local $4) + (i32.const 3) + ) + ) + (i32.store offset=4 + (tee_local $10 + (i32.add + (get_local $12) + (get_local $4) + ) + ) + (i32.or + (tee_local $5 + (i32.sub + (i32.shl + (get_local $5) + (i32.const 3) + ) + (get_local $4) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $10) + (get_local $5) + ) + (get_local $5) + ) + (if + (get_local $8) + (block + (set_local $12 + (i32.load + (i32.const 196) + ) + ) + (set_local $4 + (i32.add + (i32.shl + (tee_local $0 + (i32.shr_u + (get_local $8) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $3 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $2 + (get_local $3) + ) + (set_local $1 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $3) + (get_local $0) + ) + ) + (set_local $2 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (set_local $1 + (get_local $4) + ) + ) + ) + (i32.store + (get_local $2) + (get_local $12) + ) + (i32.store offset=12 + (get_local $1) + (get_local $12) + ) + (i32.store offset=8 + (get_local $12) + (get_local $1) + ) + (i32.store offset=12 + (get_local $12) + (get_local $4) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $5) + ) + (i32.store + (i32.const 196) + (get_local $10) + ) + (return + (get_local $7) + ) + ) + ) + (if + (tee_local $0 + (i32.load + (i32.const 180) + ) + ) + (block + (set_local $2 + (i32.and + (i32.shr_u + (tee_local $0 + (i32.add + (i32.and + (get_local $0) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $7 + (i32.sub + (i32.and + (i32.load offset=4 + (tee_local $0 + (i32.load offset=480 + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $0) + (get_local $2) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $2) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const -8) + ) + (get_local $4) + ) + ) + (set_local $1 + (get_local $0) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (tee_local $0 + (i32.load offset=16 + (get_local $1) + ) + ) + ) + (if + (i32.eqz + (tee_local $0 + (i32.load offset=20 + (get_local $1) + ) + ) + ) + (block + (set_local $10 + (get_local $7) + ) + (set_local $5 + (get_local $2) + ) + (br $while-out) + ) + ) + ) + (set_local $10 + (i32.lt_u + (tee_local $1 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $4) + ) + ) + (get_local $7) + ) + ) + (set_local $7 + (select + (get_local $1) + (get_local $7) + (get_local $10) + ) + ) + (set_local $1 + (get_local $0) + ) + (set_local $2 + (select + (get_local $0) + (get_local $2) + (get_local $10) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (get_local $5) + (tee_local $12 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $5) + (tee_local $11 + (i32.add + (get_local $5) + (get_local $4) + ) + ) + ) + (call $_abort) + ) + (set_local $8 + (i32.load offset=24 + (get_local $5) + ) + ) + (block $do-once4 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $5) + ) + ) + (get_local $5) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $5) + (i32.const 20) + ) + ) + ) + ) + ) + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + ) + ) + (block + (set_local $9 + (i32.const 0) + ) + (br $do-once4) + ) + ) + ) + (loop $while-in7 + (if + (tee_local $2 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $0 + (get_local $7) + ) + (br $while-in7) + ) + ) + (if + (tee_local $2 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $0 + (get_local $7) + ) + (br $while-in7) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $12) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $9 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $7 + (i32.load offset=8 + (get_local $5) + ) + ) + (get_local $12) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $2 + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + ) + (get_local $5) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $5) + ) + (block + (i32.store + (get_local $2) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $7) + ) + (set_local $9 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once8 + (if + (get_local $8) + (block + (if + (i32.eq + (get_local $5) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $5) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $9) + ) + (if + (i32.eqz + (get_local $9) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $8) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + ) + (get_local $5) + ) + (i32.store + (get_local $0) + (get_local $9) + ) + (i32.store offset=20 + (get_local $8) + (get_local $9) + ) + ) + (br_if $do-once8 + (i32.eqz + (get_local $9) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $9) + (tee_local $0 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $9) + (get_local $8) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $5) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $0) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $9) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $9) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=20 + (get_local $5) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $9) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $9) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $10) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $5) + (i32.or + (tee_local $0 + (i32.add + (get_local $10) + (get_local $4) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $5) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $5) + (i32.or + (get_local $4) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $11) + (i32.or + (get_local $10) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $11) + (get_local $10) + ) + (get_local $10) + ) + (if + (tee_local $0 + (i32.load + (i32.const 184) + ) + ) + (block + (set_local $4 + (i32.load + (i32.const 196) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $0 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $6 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $6 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (set_local $3 + (get_local $2) + ) + ) + ) + (i32.store + (get_local $6) + (get_local $4) + ) + (i32.store offset=12 + (get_local $3) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $3) + ) + (i32.store offset=12 + (get_local $4) + (get_local $2) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $10) + ) + (i32.store + (i32.const 196) + (get_local $11) + ) + ) + ) + (return + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (if + (i32.gt_u + (get_local $0) + (i32.const -65) + ) + (set_local $0 + (i32.const -1) + ) + (block + (set_local $2 + (i32.and + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 11) + ) + ) + (i32.const -8) + ) + ) + (if + (tee_local $18 + (i32.load + (i32.const 180) + ) + ) + (block + (set_local $14 + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $0) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $2) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $2) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $3 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $3) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (set_local $3 + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + (block $__rjto$3 + (block $__rjti$3 + (if + (tee_local $0 + (i32.load offset=480 + (i32.shl + (get_local $14) + (i32.const 2) + ) + ) + ) + (block + (set_local $6 + (i32.const 0) + ) + (set_local $8 + (i32.shl + (get_local $2) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $14) + (i32.const 1) + ) + ) + (i32.eq + (get_local $14) + (i32.const 31) + ) + ) + ) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in14 + (if + (i32.lt_u + (tee_local $4 + (i32.sub + (tee_local $9 + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + ) + (get_local $2) + ) + ) + (get_local $3) + ) + (if + (i32.eq + (get_local $9) + (get_local $2) + ) + (block + (set_local $1 + (get_local $4) + ) + (set_local $3 + (get_local $0) + ) + (br $__rjti$3) + ) + (block + (set_local $3 + (get_local $4) + ) + (set_local $1 + (get_local $0) + ) + ) + ) + ) + (set_local $0 + (select + (get_local $6) + (tee_local $4 + (i32.load offset=20 + (get_local $0) + ) + ) + (i32.or + (i32.eqz + (get_local $4) + ) + (i32.eq + (get_local $4) + (tee_local $9 + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $8) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $4 + (i32.shl + (get_local $8) + (i32.xor + (tee_local $6 + (i32.eqz + (get_local $9) + ) + ) + (i32.const 1) + ) + ) + ) + (if + (get_local $6) + (block + (set_local $4 + (get_local $0) + ) + (set_local $0 + (get_local $1) + ) + ) + (block + (set_local $6 + (get_local $0) + ) + (set_local $8 + (get_local $4) + ) + (set_local $0 + (get_local $9) + ) + (br $while-in14) + ) + ) + ) + ) + (block + (set_local $4 + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + (if + (i32.and + (i32.eqz + (get_local $4) + ) + (i32.eqz + (get_local $0) + ) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.and + (get_local $18) + (i32.or + (tee_local $1 + (i32.shl + (i32.const 2) + (get_local $14) + ) + ) + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $2) + ) + (br $do-once) + ) + ) + (set_local $9 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.add + (i32.and + (get_local $1) + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $4 + (i32.load offset=480 + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $1) + (get_local $9) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $9) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (tee_local $4 + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $4) + (get_local $1) + ) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (if + (get_local $4) + (block + (set_local $1 + (get_local $3) + ) + (set_local $3 + (get_local $4) + ) + (br $__rjti$3) + ) + (set_local $4 + (get_local $0) + ) + ) + (br $__rjto$3) + ) + (loop $while-in16 + (set_local $9 + (i32.lt_u + (tee_local $4 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const -8) + ) + (get_local $2) + ) + ) + (get_local $1) + ) + ) + (set_local $1 + (select + (get_local $4) + (get_local $1) + (get_local $9) + ) + ) + (set_local $0 + (select + (get_local $3) + (get_local $0) + (get_local $9) + ) + ) + (if + (tee_local $4 + (i32.load offset=16 + (get_local $3) + ) + ) + (block + (set_local $3 + (get_local $4) + ) + (br $while-in16) + ) + ) + (br_if $while-in16 + (tee_local $3 + (i32.load offset=20 + (get_local $3) + ) + ) + ) + (set_local $3 + (get_local $1) + ) + (set_local $4 + (get_local $0) + ) + ) + ) + (if + (get_local $4) + (if + (i32.lt_u + (get_local $3) + (i32.sub + (i32.load + (i32.const 184) + ) + (get_local $2) + ) + ) + (block + (if + (i32.lt_u + (get_local $4) + (tee_local $12 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $4) + (tee_local $6 + (i32.add + (get_local $4) + (get_local $2) + ) + ) + ) + (call $_abort) + ) + (set_local $9 + (i32.load offset=24 + (get_local $4) + ) + ) + (block $do-once17 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $4) + ) + ) + (get_local $4) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + ) + ) + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 16) + ) + ) + ) + ) + ) + (block + (set_local $11 + (i32.const 0) + ) + (br $do-once17) + ) + ) + ) + (loop $while-in20 + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $7) + ) + (set_local $0 + (get_local $10) + ) + (br $while-in20) + ) + ) + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $7) + ) + (set_local $0 + (get_local $10) + ) + (br $while-in20) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $12) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $11 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $10 + (i32.load offset=8 + (get_local $4) + ) + ) + (get_local $12) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $7 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + ) + (get_local $4) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $4) + ) + (block + (i32.store + (get_local $7) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $10) + ) + (set_local $11 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once21 + (if + (get_local $9) + (block + (if + (i32.eq + (get_local $4) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $4) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $11) + ) + (if + (i32.eqz + (get_local $11) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $9) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $9) + (i32.const 16) + ) + ) + ) + (get_local $4) + ) + (i32.store + (get_local $0) + (get_local $11) + ) + (i32.store offset=20 + (get_local $9) + (get_local $11) + ) + ) + (br_if $do-once21 + (i32.eqz + (get_local $11) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $11) + (tee_local $0 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $11) + (get_local $9) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $4) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $0) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $11) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $11) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=20 + (get_local $4) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $11) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $11) + ) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.lt_u + (get_local $3) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $4) + (i32.or + (tee_local $0 + (i32.add + (get_local $3) + (get_local $2) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $4) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $2) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $6) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $6) + (get_local $3) + ) + (get_local $3) + ) + (set_local $0 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $3) + (i32.const 256) + ) + (block + (set_local $3 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $13 + (get_local $1) + ) + (set_local $5 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $13 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $5 + (get_local $3) + ) + ) + ) + (i32.store + (get_local $13) + (get_local $6) + ) + (i32.store offset=12 + (get_local $5) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $5) + ) + (i32.store offset=12 + (get_local $6) + (get_local $3) + ) + (br $do-once25) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $7 + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $3) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $3) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $2 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $2) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $6) + (get_local $7) + ) + (i32.store offset=4 + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (i32.const 180) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $7) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $2) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $2) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once25) + ) + ) + (set_local $7 + (i32.shl + (get_local $3) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $7) + (i32.const 1) + ) + ) + (i32.eq + (get_local $7) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $2) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (loop $while-in28 + (br_if $__rjti$1 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $2 + (i32.shl + (get_local $7) + (i32.const 1) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $7 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $7) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $2) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in28) + ) + ) + ) + (if + (i32.lt_u + (get_local $7) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $7) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $0) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once25) + ) + ) + (br $__rjto$1) + ) + (if + (i32.and + (i32.ge_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $2) + (get_local $6) + ) + (i32.store + (get_local $3) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $2) + ) + (i32.store offset=12 + (get_local $6) + (get_local $0) + ) + (i32.store offset=24 + (get_local $6) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (return + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (set_local $0 + (get_local $2) + ) + ) + (set_local $0 + (get_local $2) + ) + ) + ) + (set_local $0 + (get_local $2) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (tee_local $1 + (i32.load + (i32.const 184) + ) + ) + (get_local $0) + ) + (block + (set_local $2 + (i32.load + (i32.const 196) + ) + ) + (if + (i32.gt_u + (tee_local $3 + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + (i32.const 15) + ) + (block + (i32.store + (i32.const 196) + (tee_local $1 + (i32.add + (get_local $2) + (get_local $0) + ) + ) + ) + (i32.store + (i32.const 184) + (get_local $3) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $3) + ) + (get_local $3) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + ) + (block + (i32.store + (i32.const 184) + (i32.const 0) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $1) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $2) + (get_local $1) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + ) + (return + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (br_if $folding-inner0 + (i32.gt_u + (tee_local $1 + (i32.load + (i32.const 188) + ) + ) + (get_local $0) + ) + ) + (if + (i32.eqz + (i32.load + (i32.const 648) + ) + ) + (if + (i32.and + (i32.add + (tee_local $1 + (call $_sysconf + (i32.const 30) + ) + ) + (i32.const -1) + ) + (get_local $1) + ) + (call $_abort) + (block + (i32.store + (i32.const 656) + (get_local $1) + ) + (i32.store + (i32.const 652) + (get_local $1) + ) + (i32.store + (i32.const 660) + (i32.const -1) + ) + (i32.store + (i32.const 664) + (i32.const -1) + ) + (i32.store + (i32.const 668) + (i32.const 0) + ) + (i32.store + (i32.const 620) + (i32.const 0) + ) + (i32.store + (i32.const 648) + (i32.xor + (i32.and + (call $_time + (i32.const 0) + ) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + ) + ) + ) + (if + (i32.le_u + (tee_local $5 + (i32.and + (tee_local $6 + (i32.add + (tee_local $1 + (i32.load + (i32.const 656) + ) + ) + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 47) + ) + ) + ) + ) + (tee_local $9 + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + ) + ) + (get_local $0) + ) + (return + (i32.const 0) + ) + ) + (if + (tee_local $2 + (i32.load + (i32.const 616) + ) + ) + (if + (i32.or + (i32.le_u + (tee_local $1 + (i32.add + (tee_local $3 + (i32.load + (i32.const 608) + ) + ) + (get_local $5) + ) + ) + (get_local $3) + ) + (i32.gt_u + (get_local $1) + (get_local $2) + ) + ) + (return + (i32.const 0) + ) + ) + ) + (set_local $11 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + (block $__rjto$13 + (block $__rjti$13 + (if + (i32.eqz + (i32.and + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + ) + (block + (block $label$break$L279 + (block $__rjti$5 + (block $__rjti$4 + (br_if $__rjti$4 + (i32.eqz + (tee_local $4 + (i32.load + (i32.const 200) + ) + ) + ) + ) + (set_local $1 + (i32.const 624) + ) + (loop $while-in34 + (block $while-out33 + (if + (i32.le_u + (tee_local $3 + (i32.load + (get_local $1) + ) + ) + (get_local $4) + ) + (if + (i32.gt_u + (i32.add + (get_local $3) + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + ) + ) + (get_local $4) + ) + (block + (set_local $4 + (get_local $1) + ) + (br $while-out33) + ) + ) + ) + (br_if $while-in34 + (tee_local $1 + (i32.load offset=8 + (get_local $1) + ) + ) + ) + (br $__rjti$4) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.and + (i32.sub + (get_local $6) + (i32.load + (i32.const 188) + ) + ) + (get_local $9) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (tee_local $1 + (call $_sbrk + (get_local $3) + ) + ) + (i32.add + (i32.load + (get_local $4) + ) + (i32.load + (get_local $2) + ) + ) + ) + (br_if $__rjti$13 + (i32.ne + (get_local $1) + (i32.const -1) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (br $__rjti$5) + ) + ) + ) + (br $label$break$L279) + ) + (if + (i32.ne + (tee_local $1 + (call $_sbrk + (i32.const 0) + ) + ) + (i32.const -1) + ) + (block + (set_local $3 + (if (result i32) + (i32.and + (tee_local $2 + (i32.add + (tee_local $4 + (i32.load + (i32.const 652) + ) + ) + (i32.const -1) + ) + ) + (tee_local $3 + (get_local $1) + ) + ) + (i32.add + (i32.sub + (get_local $5) + (get_local $3) + ) + (i32.and + (i32.add + (get_local $2) + (get_local $3) + ) + (i32.sub + (i32.const 0) + (get_local $4) + ) + ) + ) + (get_local $5) + ) + ) + (set_local $9 + (i32.add + (tee_local $4 + (i32.load + (i32.const 608) + ) + ) + (get_local $3) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $3) + (get_local $0) + ) + (i32.lt_u + (get_local $3) + (i32.const 2147483647) + ) + ) + (block + (if + (tee_local $2 + (i32.load + (i32.const 616) + ) + ) + (br_if $label$break$L279 + (i32.or + (i32.le_u + (get_local $9) + (get_local $4) + ) + (i32.gt_u + (get_local $9) + (get_local $2) + ) + ) + ) + ) + (br_if $__rjti$13 + (i32.eq + (tee_local $2 + (call $_sbrk + (get_local $3) + ) + ) + (get_local $1) + ) + ) + (br $__rjti$5) + ) + ) + ) + ) + (br $label$break$L279) + ) + (set_local $1 + (get_local $3) + ) + (set_local $4 + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $11) + (get_local $1) + ) + (i32.and + (i32.lt_u + (get_local $1) + (i32.const 2147483647) + ) + (i32.ne + (get_local $2) + (i32.const -1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.and + (i32.add + (i32.sub + (get_local $8) + (get_local $1) + ) + (tee_local $3 + (i32.load + (i32.const 656) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $3) + ) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (call $_sbrk + (get_local $3) + ) + (i32.const -1) + ) + (block + (drop + (call $_sbrk + (get_local $4) + ) + ) + (br $label$break$L279) + ) + (set_local $3 + (i32.add + (get_local $3) + (get_local $1) + ) + ) + ) + (set_local $3 + (get_local $1) + ) + ) + (set_local $3 + (get_local $1) + ) + ) + (if + (i32.ne + (get_local $2) + (i32.const -1) + ) + (block + (set_local $1 + (get_local $2) + ) + (br $__rjti$13) + ) + ) + ) + (i32.store + (i32.const 620) + (i32.or + (i32.load + (i32.const 620) + ) + (i32.const 4) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.const 2147483647) + ) + (if + (i32.and + (i32.lt_u + (tee_local $1 + (call $_sbrk + (get_local $5) + ) + ) + (tee_local $3 + (call $_sbrk + (i32.const 0) + ) + ) + ) + (i32.and + (i32.ne + (get_local $1) + (i32.const -1) + ) + (i32.ne + (get_local $3) + (i32.const -1) + ) + ) + ) + (br_if $__rjti$13 + (i32.gt_u + (tee_local $3 + (i32.sub + (get_local $3) + (get_local $1) + ) + ) + (i32.add + (get_local $0) + (i32.const 40) + ) + ) + ) + ) + ) + (br $__rjto$13) + ) + (i32.store + (i32.const 608) + (tee_local $2 + (i32.add + (i32.load + (i32.const 608) + ) + (get_local $3) + ) + ) + ) + (if + (i32.gt_u + (get_local $2) + (i32.load + (i32.const 612) + ) + ) + (i32.store + (i32.const 612) + (get_local $2) + ) + ) + (block $do-once40 + (if + (tee_local $6 + (i32.load + (i32.const 200) + ) + ) + (block + (set_local $2 + (i32.const 624) + ) + (block $__rjto$10 + (block $__rjti$10 + (loop $while-in45 + (br_if $__rjti$10 + (i32.eq + (get_local $1) + (i32.add + (tee_local $11 + (i32.load + (get_local $2) + ) + ) + (tee_local $5 + (i32.load + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + ) + ) + ) + ) + ) + (br_if $while-in45 + (tee_local $2 + (i32.load offset=8 + (get_local $2) + ) + ) + ) + ) + (br $__rjto$10) + ) + (if + (i32.eqz + (i32.and + (i32.load offset=12 + (get_local $2) + ) + (i32.const 8) + ) + ) + (if + (i32.and + (i32.lt_u + (get_local $6) + (get_local $1) + ) + (i32.ge_u + (get_local $6) + (get_local $11) + ) + ) + (block + (i32.store + (get_local $4) + (i32.add + (get_local $5) + (get_local $3) + ) + ) + (set_local $2 + (i32.add + (get_local $6) + (tee_local $1 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + ) + (set_local $1 + (i32.add + (i32.sub + (get_local $3) + (get_local $1) + ) + (i32.load + (i32.const 188) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $2) + ) + (i32.store + (i32.const 188) + (get_local $1) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $1) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $2) + (get_local $1) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (br $do-once40) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (tee_local $4 + (i32.load + (i32.const 192) + ) + ) + ) + (block + (i32.store + (i32.const 192) + (get_local $1) + ) + (set_local $4 + (get_local $1) + ) + ) + ) + (set_local $11 + (i32.add + (get_local $1) + (get_local $3) + ) + ) + (set_local $2 + (i32.const 624) + ) + (block $__rjto$11 + (block $__rjti$11 + (loop $while-in47 + (if + (i32.eq + (i32.load + (get_local $2) + ) + (get_local $11) + ) + (block + (set_local $5 + (get_local $2) + ) + (br $__rjti$11) + ) + ) + (br_if $while-in47 + (tee_local $2 + (i32.load offset=8 + (get_local $2) + ) + ) + ) + (set_local $4 + (i32.const 624) + ) + ) + (br $__rjto$11) + ) + (if + (i32.and + (i32.load offset=12 + (get_local $2) + ) + (i32.const 8) + ) + (set_local $4 + (i32.const 624) + ) + (block + (i32.store + (get_local $5) + (get_local $1) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (i32.add + (i32.load + (get_local $2) + ) + (get_local $3) + ) + ) + (set_local $8 + (i32.add + (tee_local $9 + (i32.add + (get_local $1) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + (get_local $0) + ) + ) + (set_local $7 + (i32.sub + (i32.sub + (tee_local $5 + (i32.add + (get_local $11) + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + (get_local $9) + ) + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $9) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + (block $do-once48 + (if + (i32.eq + (get_local $5) + (get_local $6) + ) + (block + (i32.store + (i32.const 188) + (tee_local $0 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $7) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $8) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + ) + (block + (if + (i32.eq + (get_local $5) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (tee_local $0 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $7) + ) + ) + ) + (i32.store + (i32.const 196) + (get_local $8) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $8) + (get_local $0) + ) + (get_local $0) + ) + (br $do-once48) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (tee_local $0 + (if (result i32) + (i32.eq + (i32.and + (tee_local $0 + (i32.load offset=4 + (get_local $5) + ) + ) + (i32.const 3) + ) + (i32.const 1) + ) + (block (result i32) + (set_local $11 + (i32.and + (get_local $0) + (i32.const -8) + ) + ) + (set_local $1 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (block $label$break$L331 + (if + (i32.lt_u + (get_local $0) + (i32.const 256) + ) + (block + (set_local $2 + (i32.load offset=12 + (get_local $5) + ) + ) + (block $do-once51 + (if + (i32.ne + (tee_local $3 + (i32.load offset=8 + (get_local $5) + ) + ) + (tee_local $0 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $3) + (get_local $4) + ) + (call $_abort) + ) + (br_if $do-once51 + (i32.eq + (i32.load offset=12 + (get_local $3) + ) + (get_local $5) + ) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $2) + (get_local $3) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + ) + (block $do-once53 + (if + (i32.eq + (get_local $2) + (get_local $0) + ) + (set_local $15 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $2) + (get_local $4) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + (get_local $5) + ) + (block + (set_local $15 + (get_local $0) + ) + (br $do-once53) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $3) + (get_local $2) + ) + (i32.store + (get_local $15) + (get_local $3) + ) + ) + (block + (set_local $6 + (i32.load offset=24 + (get_local $5) + ) + ) + (block $do-once55 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $5) + ) + ) + (get_local $5) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (tee_local $3 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load + (get_local $3) + ) + ) + (set_local $0 + (get_local $3) + ) + (block + (set_local $12 + (i32.const 0) + ) + (br $do-once55) + ) + ) + ) + (loop $while-in58 + (if + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $3) + ) + (set_local $0 + (get_local $2) + ) + (br $while-in58) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $3) + ) + (set_local $0 + (get_local $2) + ) + (br $while-in58) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $4) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $12 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $2 + (i32.load offset=8 + (get_local $5) + ) + ) + (get_local $4) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 12) + ) + ) + ) + (get_local $5) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $5) + ) + (block + (i32.store + (get_local $3) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (set_local $12 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (get_local $6) + ) + ) + (block $do-once59 + (if + (i32.eq + (get_local $5) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $5) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $12) + ) + (br_if $do-once59 + (get_local $12) + ) + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $5) + ) + (i32.store + (get_local $0) + (get_local $12) + ) + (i32.store offset=20 + (get_local $6) + (get_local $12) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (get_local $12) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $12) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $12) + (get_local $6) + ) + (if + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $3) + (get_local $1) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $12) + (get_local $3) + ) + (i32.store offset=24 + (get_local $3) + (get_local $12) + ) + ) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (tee_local $0 + (i32.load offset=4 + (get_local $0) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $12) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $12) + ) + ) + ) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $11) + (get_local $7) + ) + ) + (i32.add + (get_local $5) + (get_local $11) + ) + ) + (get_local $5) + ) + ) + (i32.const 4) + ) + ) + (i32.and + (i32.load + (get_local $0) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $7) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $8) + (get_local $7) + ) + (get_local $7) + ) + (set_local $0 + (i32.shr_u + (get_local $7) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $7) + (i32.const 256) + ) + (block + (set_local $3 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (block $do-once63 + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (block + (if + (i32.ge_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (block + (set_local $16 + (get_local $1) + ) + (set_local $10 + (get_local $0) + ) + (br $do-once63) + ) + ) + (call $_abort) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $16 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $10 + (get_local $3) + ) + ) + ) + ) + (i32.store + (get_local $16) + (get_local $8) + ) + (i32.store offset=12 + (get_local $10) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $10) + ) + (i32.store offset=12 + (get_local $8) + (get_local $3) + ) + (br $do-once48) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (tee_local $2 + (block $do-once65 (result i32) + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $7) + (i32.const 8) + ) + ) + (block (result i32) + (drop + (br_if $do-once65 + (i32.const 31) + (i32.gt_u + (get_local $7) + (i32.const 16777215) + ) + ) + ) + (i32.or + (i32.and + (i32.shr_u + (get_local $7) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $3 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $3) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $8) + (get_local $2) + ) + (i32.store offset=4 + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (i32.const 180) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $2) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $3) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $3) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + (br $do-once48) + ) + ) + (set_local $2 + (i32.shl + (get_local $7) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $2) + (i32.const 1) + ) + ) + (i32.eq + (get_local $2) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $3) + ) + ) + (block $__rjto$7 + (block $__rjti$7 + (loop $while-in68 + (br_if $__rjti$7 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $7) + ) + ) + (set_local $3 + (i32.shl + (get_local $2) + (i32.const 1) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $2) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $3) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in68) + ) + ) + ) + (if + (i32.lt_u + (get_local $2) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $2) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $0) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + (br $do-once48) + ) + ) + (br $__rjto$7) + ) + (if + (i32.and + (i32.ge_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $2) + (get_local $8) + ) + (i32.store + (get_local $3) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $2) + ) + (i32.store offset=12 + (get_local $8) + (get_local $0) + ) + (i32.store offset=24 + (get_local $8) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (return + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + ) + ) + ) + (loop $while-in70 + (block $while-out69 + (if + (i32.le_u + (tee_local $2 + (i32.load + (get_local $4) + ) + ) + (get_local $6) + ) + (br_if $while-out69 + (i32.gt_u + (tee_local $2 + (i32.add + (get_local $2) + (i32.load offset=4 + (get_local $4) + ) + ) + ) + (get_local $6) + ) + ) + ) + (set_local $4 + (i32.load offset=8 + (get_local $4) + ) + ) + (br $while-in70) + ) + ) + (set_local $10 + (i32.add + (tee_local $4 + (i32.add + (get_local $2) + (i32.const -47) + ) + ) + (i32.const 8) + ) + ) + (set_local $12 + (i32.add + (tee_local $11 + (select + (get_local $6) + (tee_local $4 + (i32.add + (get_local $4) + (select + (i32.and + (i32.sub + (i32.const 0) + (get_local $10) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $10) + (i32.const 7) + ) + ) + ) + ) + (i32.lt_u + (get_local $4) + (tee_local $10 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + ) + ) + (i32.const 8) + ) + ) + (i32.store + (i32.const 200) + (tee_local $5 + (i32.add + (get_local $1) + (tee_local $4 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $4) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 188) + (tee_local $4 + (i32.sub + (i32.add + (get_local $3) + (i32.const -40) + ) + (get_local $4) + ) + ) + ) + (i32.store offset=4 + (get_local $5) + (i32.or + (get_local $4) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $5) + (get_local $4) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (i32.const 27) + ) + (i32.store + (get_local $12) + (i32.load + (i32.const 624) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.load + (i32.const 628) + ) + ) + (i32.store offset=8 + (get_local $12) + (i32.load + (i32.const 632) + ) + ) + (i32.store offset=12 + (get_local $12) + (i32.load + (i32.const 636) + ) + ) + (i32.store + (i32.const 624) + (get_local $1) + ) + (i32.store + (i32.const 628) + (get_local $3) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 632) + (get_local $12) + ) + (set_local $1 + (i32.add + (get_local $11) + (i32.const 24) + ) + ) + (loop $while-in72 + (i32.store + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.const 7) + ) + (br_if $while-in72 + (i32.lt_u + (i32.add + (get_local $1) + (i32.const 4) + ) + (get_local $2) + ) + ) + ) + (if + (i32.ne + (get_local $11) + (get_local $6) + ) + (block + (i32.store + (get_local $4) + (i32.and + (i32.load + (get_local $4) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $6) + (i32.or + (tee_local $5 + (i32.sub + (get_local $11) + (get_local $6) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (get_local $11) + (get_local $5) + ) + (set_local $1 + (i32.shr_u + (get_local $5) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.const 256) + ) + (block + (set_local $2 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 176) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.load + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $17 + (get_local $3) + ) + (set_local $7 + (get_local $1) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $3) + (get_local $1) + ) + ) + (set_local $17 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (set_local $7 + (get_local $2) + ) + ) + ) + (i32.store + (get_local $17) + (get_local $6) + ) + (i32.store offset=12 + (get_local $7) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $7) + ) + (i32.store offset=12 + (get_local $6) + (get_local $2) + ) + (br $do-once40) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $4 + (if (result i32) + (tee_local $1 + (i32.shr_u + (get_local $5) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $5) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $5) + (i32.add + (tee_local $1 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $3 + (i32.shl + (get_local $1) + (tee_local $2 + (i32.and + (i32.shr_u + (i32.add + (get_local $1) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $2) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $3 + (i32.shl + (get_local $3) + (get_local $1) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $3) + (get_local $1) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $6) + (get_local $4) + ) + (i32.store offset=20 + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $10) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (i32.const 180) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $4) + ) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $3) + (get_local $1) + ) + ) + (i32.store + (get_local $2) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $2) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once40) + ) + ) + (set_local $4 + (i32.shl + (get_local $5) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $4) + (i32.const 1) + ) + ) + (i32.eq + (get_local $4) + (i32.const 31) + ) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $2) + ) + ) + (block $__rjto$9 + (block $__rjti$9 + (loop $while-in74 + (br_if $__rjti$9 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $1) + ) + (i32.const -8) + ) + (get_local $5) + ) + ) + (set_local $2 + (i32.shl + (get_local $4) + (i32.const 1) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $4 + (i32.add + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $4) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $4 + (get_local $2) + ) + (set_local $1 + (get_local $3) + ) + (br $while-in74) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $4) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $1) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once40) + ) + ) + (br $__rjto$9) + ) + (if + (i32.and + (i32.ge_u + (tee_local $4 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (tee_local $3 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $1) + (get_local $3) + ) + ) + (block + (i32.store offset=12 + (get_local $4) + (get_local $6) + ) + (i32.store + (get_local $2) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $4) + ) + (i32.store offset=12 + (get_local $6) + (get_local $1) + ) + (i32.store offset=24 + (get_local $6) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (block + (if + (i32.or + (i32.eqz + (tee_local $2 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.lt_u + (get_local $1) + (get_local $2) + ) + ) + (i32.store + (i32.const 192) + (get_local $1) + ) + ) + (i32.store + (i32.const 624) + (get_local $1) + ) + (i32.store + (i32.const 628) + (get_local $3) + ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 212) + (i32.load + (i32.const 648) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + (set_local $2 + (i32.const 0) + ) + (loop $while-in43 + (i32.store offset=12 + (tee_local $4 + (i32.add + (i32.shl + (get_local $2) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $4) + ) + (br_if $while-in43 + (i32.ne + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 32) + ) + ) + ) + (i32.store + (i32.const 200) + (tee_local $2 + (i32.add + (get_local $1) + (tee_local $1 + (select + (i32.and + (i32.sub + (i32.const 0) + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.const 188) + (tee_local $1 + (i32.sub + (i32.add + (get_local $3) + (i32.const -40) + ) + (get_local $1) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $1) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $2) + (get_local $1) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + ) + ) + ) + (br_if $folding-inner0 + (i32.gt_u + (tee_local $1 + (i32.load + (i32.const 188) + ) + ) + (get_local $0) + ) + ) + ) + (i32.store + (call $___errno_location) + (i32.const 12) + ) + (return + (i32.const 0) + ) + ) + (i32.store + (i32.const 188) + (tee_local $3 + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + ) + (i32.store + (i32.const 200) + (tee_local $1 + (i32.add + (tee_local $2 + (i32.load + (i32.const 200) + ) + ) + (get_local $0) + ) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (func $_free (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (if + (i32.eqz + (get_local $0) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $0) + (i32.const -8) + ) + ) + (tee_local $11 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (tee_local $5 + (i32.and + (tee_local $7 + (i32.load + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + ) + (i32.const 3) + ) + ) + (i32.const 1) + ) + (call $_abort) + ) + (set_local $8 + (i32.add + (get_local $1) + (tee_local $0 + (i32.and + (get_local $7) + (i32.const -8) + ) + ) + ) + ) + (block $do-once + (if + (i32.and + (get_local $7) + (i32.const 1) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + (block + (set_local $7 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.sub + (i32.const 0) + (get_local $7) + ) + ) + ) + (get_local $11) + ) + (call $_abort) + ) + (set_local $0 + (i32.add + (get_local $7) + (get_local $0) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.load + (i32.const 196) + ) + ) + (block + (if + (i32.ne + (i32.and + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 3) + ) + (i32.const 3) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 184) + (get_local $0) + ) + (i32.store + (get_local $2) + (i32.and + (get_local $3) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $0) + ) + (get_local $0) + ) + (return) + ) + ) + (set_local $5 + (i32.shr_u + (get_local $7) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $7) + (i32.const 256) + ) + (block + (set_local $6 + (i32.load offset=12 + (get_local $1) + ) + ) + (if + (i32.ne + (tee_local $2 + (i32.load offset=8 + (get_local $1) + ) + ) + (tee_local $3 + (i32.add + (i32.shl + (get_local $5) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $2) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $2) + ) + (get_local $1) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $6) + (get_local $2) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (get_local $6) + (get_local $3) + ) + (set_local $4 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $3 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (set_local $4 + (get_local $3) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $2) + (get_local $6) + ) + (i32.store + (get_local $4) + (get_local $2) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (set_local $12 + (i32.load offset=24 + (get_local $1) + ) + ) + (block $do-once0 + (if + (i32.eq + (tee_local $4 + (i32.load offset=12 + (get_local $1) + ) + ) + (get_local $1) + ) + (block + (if + (i32.eqz + (tee_local $5 + (i32.load + (tee_local $4 + (i32.add + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + (set_local $4 + (get_local $7) + ) + (block + (set_local $6 + (i32.const 0) + ) + (br $do-once0) + ) + ) + ) + (loop $while-in + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $5) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $4 + (get_local $10) + ) + (br $while-in) + ) + ) + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $4 + (get_local $10) + ) + (br $while-in) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (get_local $11) + ) + (call $_abort) + (block + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $6 + (get_local $5) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $10 + (i32.load offset=8 + (get_local $1) + ) + ) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $7 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + ) + (get_local $1) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $5 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (block + (i32.store + (get_local $7) + (get_local $4) + ) + (i32.store + (get_local $5) + (get_local $10) + ) + (set_local $6 + (get_local $4) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $12) + (block + (if + (i32.eq + (get_local $1) + (i32.load + (tee_local $4 + (i32.add + (i32.shl + (tee_local $5 + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $4) + (get_local $6) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $12) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $12) + (i32.const 16) + ) + ) + ) + (get_local $1) + ) + (i32.store + (get_local $4) + (get_local $6) + ) + (i32.store offset=20 + (get_local $12) + (get_local $6) + ) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $6) + (tee_local $5 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $6) + (get_local $12) + ) + (if + (tee_local $7 + (i32.load + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $7) + (get_local $5) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $6) + (get_local $7) + ) + (i32.store offset=24 + (get_local $7) + (get_local $6) + ) + ) + ) + ) + (if + (tee_local $4 + (i32.load offset=4 + (get_local $4) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $6) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $6) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (get_local $2) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 1) + ) + ) + (call $_abort) + ) + (if + (i32.and + (get_local $1) + (i32.const 2) + ) + (block + (i32.store + (get_local $0) + (i32.and + (get_local $1) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $3) + ) + (get_local $3) + ) + ) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 200) + ) + ) + (block + (i32.store + (i32.const 188) + (tee_local $0 + (i32.add + (i32.load + (i32.const 188) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 200) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $2) + (i32.load + (i32.const 196) + ) + ) + (return) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store + (i32.const 184) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (tee_local $0 + (i32.add + (i32.load + (i32.const 184) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 196) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $0) + ) + (get_local $0) + ) + (return) + ) + ) + (set_local $5 + (i32.add + (i32.and + (get_local $1) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $1) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.lt_u + (get_local $1) + (i32.const 256) + ) + (block + (set_local $4 + (i32.load offset=12 + (get_local $8) + ) + ) + (if + (i32.ne + (tee_local $1 + (i32.load offset=8 + (get_local $8) + ) + ) + (tee_local $0 + (i32.add + (i32.shl + (get_local $3) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $1) + ) + (get_local $8) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $1) + ) + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $0) + ) + (set_local $14 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (set_local $14 + (get_local $0) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $1) + (get_local $4) + ) + (i32.store + (get_local $14) + (get_local $1) + ) + ) + (block + (set_local $6 + (i32.load offset=24 + (get_local $8) + ) + ) + (block $do-once6 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $8) + ) + ) + (get_local $8) + ) + (block + (if + (i32.eqz + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (tee_local $1 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $3 + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (get_local $1) + ) + (block + (set_local $9 + (i32.const 0) + ) + (br $do-once6) + ) + ) + ) + (loop $while-in9 + (if + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $0 + (get_local $4) + ) + (br $while-in9) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $0 + (get_local $4) + ) + (br $while-in9) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $9 + (get_local $3) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $4 + (i32.load offset=8 + (get_local $8) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $1 + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + ) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (block + (i32.store + (get_local $1) + (get_local $0) + ) + (i32.store + (get_local $3) + (get_local $4) + ) + (set_local $9 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $6) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $3 + (i32.load offset=28 + (get_local $8) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $9) + ) + (if + (i32.eqz + (get_local $9) + ) + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $8) + ) + (i32.store + (get_local $0) + (get_local $9) + ) + (i32.store offset=20 + (get_local $6) + (get_local $9) + ) + ) + (br_if $do-once4 + (i32.eqz + (get_local $9) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $9) + (tee_local $3 + (i32.load + (i32.const 192) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $9) + (get_local $6) + ) + (if + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $3) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $9) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $9) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=4 + (get_local $0) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $9) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $9) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $5) + ) + (get_local $5) + ) + (if + (i32.eq + (get_local $2) + (i32.load + (i32.const 196) + ) + ) + (block + (i32.store + (i32.const 184) + (get_local $5) + ) + (return) + ) + (set_local $3 + (get_local $5) + ) + ) + ) + ) + (set_local $0 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $3) + (i32.const 256) + ) + (block + (set_local $1 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 176) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (set_local $15 + (get_local $3) + ) + (set_local $13 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $3) + (get_local $0) + ) + ) + (set_local $15 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $13 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $2) + ) + (i32.store offset=12 + (get_local $13) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $13) + ) + (i32.store offset=12 + (get_local $2) + (get_local $1) + ) + (return) + ) + ) + (set_local $4 + (i32.add + (i32.shl + (tee_local $5 + (if (result i32) + (tee_local $0 + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (if (result i32) + (i32.gt_u + (get_local $3) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $3) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $4 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $4) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (get_local $2) + (get_local $5) + ) + (i32.store offset=20 + (get_local $2) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $2) + (i32.const 0) + ) + (block $do-once12 + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 180) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $5) + ) + ) + ) + (block + (set_local $5 + (i32.shl + (get_local $3) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $5) + (i32.const 1) + ) + ) + (i32.eq + (get_local $5) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $4) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (loop $while-in15 + (br_if $__rjti$1 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $4 + (i32.shl + (get_local $5) + (i32.const 1) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $5 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $5) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $4) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in15) + ) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.load + (i32.const 192) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $5) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $0) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + (br $do-once12) + ) + ) + (br $__rjto$1) + ) + (if + (i32.and + (i32.ge_u + (tee_local $4 + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $3 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $3) + ) + ) + (block + (i32.store offset=12 + (get_local $4) + (get_local $2) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $4) + ) + (i32.store offset=12 + (get_local $2) + (get_local $0) + ) + (i32.store offset=24 + (get_local $2) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + (block + (i32.store + (i32.const 180) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $4) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $4) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + ) + (i32.store + (i32.const 208) + (tee_local $0 + (i32.add + (i32.load + (i32.const 208) + ) + (i32.const -1) + ) + ) + ) + (if + (get_local $0) + (return) + (set_local $0 + (i32.const 632) + ) + ) + (loop $while-in17 + (set_local $0 + (i32.add + (tee_local $3 + (i32.load + (get_local $0) + ) + ) + (i32.const 8) + ) + ) + (br_if $while-in17 + (get_local $3) + ) + ) + (i32.store + (i32.const 208) + (i32.const -1) + ) + ) + (func $runPostSets + (nop) + ) + (func $_i64Subtract (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (set_global $tempRet0 + (i32.sub + (i32.sub + (get_local $1) + (get_local $3) + ) + (i32.gt_u + (get_local $2) + (get_local $0) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $_i64Add (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (set_global $tempRet0 + (i32.add + (i32.add + (get_local $1) + (get_local $3) + ) + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (get_local $0) + ) + ) + ) + (get_local $4) + ) + (func $_memset (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (if + (i32.ge_s + (get_local $2) + (i32.const 20) + ) + (block + (set_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (if + (tee_local $3 + (i32.and + (get_local $0) + (i32.const 3) + ) + ) + (block + (set_local $3 + (i32.sub + (i32.add + (get_local $0) + (i32.const 4) + ) + (get_local $3) + ) + ) + (loop $while-in + (if + (i32.lt_s + (get_local $0) + (get_local $3) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (set_local $3 + (i32.or + (i32.or + (i32.or + (get_local $1) + (i32.shl + (get_local $1) + (i32.const 8) + ) + ) + (i32.shl + (get_local $1) + (i32.const 16) + ) + ) + (i32.shl + (get_local $1) + (i32.const 24) + ) + ) + ) + (set_local $5 + (i32.and + (get_local $4) + (i32.const -4) + ) + ) + (loop $while-in1 + (if + (i32.lt_s + (get_local $0) + (get_local $5) + ) + (block + (i32.store + (get_local $0) + (get_local $3) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.lt_s + (get_local $0) + (get_local $4) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $_bitshift64Lshr (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if + (i32.lt_s + (get_local $2) + (i32.const 32) + ) + (block + (set_global $tempRet0 + (i32.shr_u + (get_local $1) + (get_local $2) + ) + ) + (return + (i32.or + (i32.shr_u + (get_local $0) + (get_local $2) + ) + (i32.shl + (i32.and + (get_local $1) + (i32.sub + (i32.shl + (i32.const 1) + (get_local $2) + ) + (i32.const 1) + ) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.const 0) + ) + (i32.shr_u + (get_local $1) + (i32.sub + (get_local $2) + (i32.const 32) + ) + ) + ) + (func $_bitshift64Shl (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if + (i32.lt_s + (get_local $2) + (i32.const 32) + ) + (block + (set_global $tempRet0 + (i32.or + (i32.shl + (get_local $1) + (get_local $2) + ) + (i32.shr_u + (i32.and + (get_local $0) + (i32.shl + (i32.sub + (i32.shl + (i32.const 1) + (get_local $2) + ) + (i32.const 1) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + ) + (return + (i32.shl + (get_local $0) + (get_local $2) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.shl + (get_local $0) + (i32.sub + (get_local $2) + (i32.const 32) + ) + ) + ) + (i32.const 0) + ) + (func $_memcpy (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.ge_s + (get_local $2) + (i32.const 4096) + ) + (return + (call $_emscripten_memcpy_big + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (set_local $3 + (get_local $0) + ) + (if + (i32.eq + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.and + (get_local $1) + (i32.const 3) + ) + ) + (block + (loop $while-in + (if + (i32.and + (get_local $0) + (i32.const 3) + ) + (block + (if + (i32.eqz + (get_local $2) + ) + (return + (get_local $3) + ) + ) + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (loop $while-in1 + (if + (i32.ge_s + (get_local $2) + (i32.const 4) + ) + (block + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (get_local $3) + ) + (func $___udivdi3 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call $___udivmoddi4 + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.const 0) + ) + ) + (func $___uremdi3 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (drop + (call $___udivmoddi4 + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $3) + (tee_local $0 + (get_local $4) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (set_global $tempRet0 + (i32.load offset=4 + (get_local $0) + ) + ) + (i32.load + (get_local $0) + ) + ) + (func $___udivmoddi4 (param $xl i32) (param $xh i32) (param $yl i32) (param $yh i32) (param $r i32) (result i32) + (local $x64 i64) + (local $y64 i64) + (set_local $x64 + (i64.or + (i64.extend_u/i32 + (get_local $xl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $xh) + ) + (i64.const 32) + ) + ) + ) + (set_local $y64 + (i64.or + (i64.extend_u/i32 + (get_local $yl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $yh) + ) + (i64.const 32) + ) + ) + ) + (if + (get_local $r) + (i64.store + (get_local $r) + (i64.rem_u + (get_local $x64) + (get_local $y64) + ) + ) + ) + (set_local $x64 + (i64.div_u + (get_local $x64) + (get_local $y64) + ) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $x64) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $x64) + ) + ) + (func $dynCall_ii (param $0 i32) (param $1 i32) (result i32) + (call_indirect (type $FUNCSIG$ii) + (get_local $1) + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + ) + (func $dynCall_iiii (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call_indirect (type $FUNCSIG$iiii) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (func $dynCall_vi (param $0 i32) (param $1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $1) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 10) + ) + ) + ) + (func $b0 (param $0 i32) (result i32) + (call $nullFunc_ii + (i32.const 0) + ) + (i32.const 0) + ) + (func $b1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $nullFunc_iiii + (i32.const 1) + ) + (i32.const 0) + ) + (func $b2 (param $0 i32) + (call $nullFunc_vi + (i32.const 2) + ) + ) +) diff --git a/src/binaryen/test/passes/inlining.txt b/src/binaryen/test/passes/inlining.txt new file mode 100644 index 0000000000..8a195b96dd --- /dev/null +++ b/src/binaryen/test/passes/inlining.txt @@ -0,0 +1,251 @@ +(module + (type $0 (func)) + (type $1 (func (result i32))) + (type $2 (func (result f64))) + (type $3 (func (param f32 i64))) + (table 1 1 anyfunc) + (elem (i32.const 0) $tabled) + (memory $0 0) + (export "user" (func $user)) + (export "exported" (func $exported)) + (func $user (; 0 ;) (type $0) + (local $x i32) + (local $y f64) + (local $2 f32) + (local $3 i64) + (local $4 f32) + (local $5 i64) + (local $6 f32) + (call $exported) + (call $tabled) + (call $multi) + (call $multi) + (block + (block $__inlined_func$ok + (drop + (i32.const 1) + ) + ) + ) + (drop + (block (result i32) + (block $__inlined_func$int (result i32) + (i32.const 2) + ) + ) + ) + (drop + (block (result f64) + (block $__inlined_func$double (result f64) + (f64.const 3.14159) + ) + ) + ) + (set_local $x + (block (result i32) + (block $__inlined_func$int2 (result i32) + (i32.const 112) + ) + ) + ) + (set_local $y + (block (result f64) + (block $__inlined_func$double2 (result f64) + (f64.const 113.14159) + ) + ) + ) + (block + (block $__inlined_func$with-local + (set_local $2 + (f32.const 0) + ) + (set_local $2 + (f32.const 2.1418280601501465) + ) + ) + ) + (block + (block $__inlined_func$with-local2 + (set_local $3 + (i64.const 0) + ) + (set_local $3 + (i64.const 4) + ) + ) + ) + (drop + (block (result i32) + (block $__inlined_func$return (result i32) + (br $__inlined_func$return + (i32.const 5) + ) + ) + ) + ) + (block + (block $__inlined_func$multipass + (block + (block $__inlined_func$multipass2 + (drop + (i32.const 6) + ) + ) + ) + ) + ) + (block + (block $__inlined_func$param + (set_local $4 + (f32.const 12.34000015258789) + ) + (set_local $5 + (i64.const 890005350012) + ) + (set_local $6 + (f32.const 0) + ) + (block + (drop + (get_local $4) + ) + (drop + (get_local $5) + ) + (drop + (get_local $6) + ) + ) + ) + ) + ) + (func $exported (; 1 ;) (type $0) + (nop) + ) + (func $recursive (; 2 ;) (type $0) + (call $recursive) + ) + (func $tabled (; 3 ;) (type $0) + (nop) + ) + (func $cycle1 (; 4 ;) (type $0) + (call $cycle2) + ) + (func $cycle2 (; 5 ;) (type $0) + (call $cycle1) + ) + (func $multi (; 6 ;) (type $0) + (nop) + ) +) +(module + (type $0 (func (param i32) (result i32))) + (type $1 (func (result i32))) + (memory $0 0) + (func $child (; 0 ;) (type $0) (param $0 i32) (result i32) + (i32.const 1234) + ) + (func $parent (; 1 ;) (type $1) (result i32) + (call $child + (unreachable) + ) + ) +) +(module + (type $0 (func (result i32))) + (type $1 (func (param f32 i32) (result i32))) + (type $2 (func)) + (global $hangLimit (mut i32) (i32.const 25)) + (memory $0 1 1) + (export "hangLimitInitializer" (func $hangLimitInitializer)) + (func $func_4 (; 0 ;) (type $1) (param $0 f32) (param $1 i32) (result i32) + (local $2 i64) + (local $3 f64) + (local $4 f32) + (local $5 i32) + (local $6 i32) + (local $7 f64) + (local $8 i32) + (loop $label$0 (result i32) + (block $block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (i32.const 54) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (i32.eqz + (if (result i32) + (i32.const 1) + (if (result i32) + (i32.eqz + (block (result i32) + (block $__inlined_func$func_3 (result i32) + (set_local $8 + (i32.const 0) + ) + (select + (get_local $8) + (tee_local $8 + (i32.const -1) + ) + (i32.const 1) + ) + ) + ) + ) + (br $label$0) + (i32.const 0) + ) + (unreachable) + ) + ) + ) + ) + (func $hangLimitInitializer (; 1 ;) (type $2) + (set_global $hangLimit + (i32.const 25) + ) + ) +) +(module + (type $T (func (param i32))) + (type $1 (func)) + (table 10 anyfunc) + (memory $0 0) + (func $0 (; 0 ;) (type $1) + (block $__inlined_func$1 + (call_indirect (type $T) + (if (result i32) + (i32.const 0) + (unreachable) + (unreachable) + ) + (i32.const 1) + ) + ) + ) +) +(module + (type $0 (func)) + (memory $0 0) + (func $1 (; 0 ;) (type $0) + (block $__inlined_func$0 + (block $label$1 + (br_table $label$1 $label$1 + (i32.const 0) + ) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/inlining.wast b/src/binaryen/test/passes/inlining.wast new file mode 100644 index 0000000000..eda8b9cc10 --- /dev/null +++ b/src/binaryen/test/passes/inlining.wast @@ -0,0 +1,177 @@ +(module + (table 1 1 anyfunc) + (elem (i32.const 0) $tabled) + (func $user (export "user") + (local $x i32) + (local $y f64) + (call $exported) + (call $tabled) + (call $multi) + (call $multi) + (call $ok) + (drop (call $int)) + (drop (call $double)) + (set_local $x (call $int2)) + (set_local $y (call $double2)) + (call $with-local) + (call $with-local2) + (drop (call $return)) + (call $multipass) + (call $param (f32.const 12.34) (i64.const 890005350012)) + ) + (func $exported (export "exported") + (nop) + ) + (func $recursive + (call $recursive) + ) + (func $tabled + (nop) + ) + (func $cycle1 + (call $cycle2) + ) + (func $cycle2 + (call $cycle1) + ) + (func $multi + (nop) + ) + (func $ok + (drop (i32.const 1)) + ) + (func $int (result i32) + (i32.const 2) + ) + (func $double (result f64) + (f64.const 3.14159) + ) + (func $int2 (result i32) + (i32.const 112) + ) + (func $double2 (result f64) + (f64.const 113.14159) + ) + (func $with-local + (local $x f32) + (set_local $x (f32.const 2.141828)) + ) + (func $with-local2 + (local $y i64) + (set_local $y (i64.const 4)) + ) + (func $return (result i32) + (return (i32.const 5)) + ) + (func $multipass + (call $multipass2) + ) + (func $multipass2 + (drop (i32.const 6)) + ) + (func $param (param $x f32) (param $y i64) + (local $z f32) + (drop (get_local $x)) + (drop (get_local $y)) + (drop (get_local $z)) + ) +) +(module + (func $child (param i32) (result i32) + (i32.const 1234) + ) + (func $parent (result i32) + (call $child + (unreachable) ;; call is not performed, no sense to inline + ) + ) +) +(module + (global $hangLimit (mut i32) (i32.const 25)) + (memory $0 1 1) + (export "hangLimitInitializer" (func $hangLimitInitializer)) + (func $func_3 (result i32) + (local $0 i32) + (select + (get_local $0) ;; we depend on the zero-init value here, so it must be set when inlining! + (tee_local $0 + (i32.const -1) + ) + (i32.const 1) + ) + ) + (func $func_4 (param $0 f32) (param $1 i32) (result i32) + (local $2 i64) + (local $3 f64) + (local $4 f32) + (local $5 i32) + (local $6 i32) + (local $7 f64) + (loop $label$0 (result i32) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (i32.const 54) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (i32.eqz + (if (result i32) + (i32.const 1) + (if (result i32) + (i32.eqz + (call $func_3) + ) + (br $label$0) + (i32.const 0) + ) + (unreachable) + ) + ) + ) + ) + (func $hangLimitInitializer + (set_global $hangLimit + (i32.const 25) + ) + ) +) +(module + (type $T (func (param i32))) + (table 10 anyfunc) + (func $0 + (call $1) + ) + (func $1 + (call_indirect (type $T) + (if (result i32) ;; if copy must preserve the forced type + (i32.const 0) + (unreachable) + (unreachable) + ) + (i32.const 1) + ) + ) +) +(module + (func $0 + (block $label$1 ;; copy this name + (br_table $label$1 $label$1 + (i32.const 0) + ) + ) + ) + (func $1 + (call $0) + ) +) + diff --git a/src/binaryen/test/passes/inlining_optimize-level=3.txt b/src/binaryen/test/passes/inlining_optimize-level=3.txt new file mode 100644 index 0000000000..238aaa9d2e --- /dev/null +++ b/src/binaryen/test/passes/inlining_optimize-level=3.txt @@ -0,0 +1,117 @@ +(module + (type $0 (func (result i32))) + (type $1 (func)) + (table 1 1 anyfunc) + (elem (i32.const 0) $no-loops-but-one-use-but-tabled) + (memory $0 0) + (export "yes" (func $yes)) + (export "no-loops-but-one-use-but-exported" (func $no-loops-but-one-use-but-exported)) + (func $yes (; 0 ;) (type $0) (result i32) + (i32.const 1) + ) + (func $no-tooBig (; 1 ;) (type $0) (result i32) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (i32.const 1) + ) + (func $no-calls (; 2 ;) (type $0) (result i32) + (block $__inlined_func$yes (result i32) + (i32.const 1) + ) + ) + (func $no-loops (; 3 ;) (type $0) (result i32) + (loop $loop-in (result i32) + (i32.const 1) + ) + ) + (func $no-loops-but-one-use-but-exported (; 4 ;) (type $0) (result i32) + (loop $loop-in (result i32) + (i32.const 1) + ) + ) + (func $no-loops-but-one-use-but-tabled (; 5 ;) (type $0) (result i32) + (loop $loop-in (result i32) + (i32.const 1) + ) + ) + (func $intoHere (; 6 ;) (type $1) + (drop + (block (result i32) + (block $__inlined_func$yes (result i32) + (i32.const 1) + ) + ) + ) + (drop + (call $no-tooBig) + ) + (drop + (call $no-calls) + ) + (drop + (call $no-calls) + ) + (drop + (block (result i32) + (block $__inlined_func$yes-calls-but-one-use (result i32) + (call $yes) + ) + ) + ) + (drop + (call $no-loops) + ) + (drop + (call $no-loops) + ) + (drop + (block (result i32) + (block $__inlined_func$yes-loops-but-one-use (result i32) + (loop $loop-in (result i32) + (i32.const 1) + ) + ) + ) + ) + (drop + (call $no-loops-but-one-use-but-exported) + ) + (drop + (call $no-loops-but-one-use-but-tabled) + ) + ) +) diff --git a/src/binaryen/test/passes/inlining_optimize-level=3.wast b/src/binaryen/test/passes/inlining_optimize-level=3.wast new file mode 100644 index 0000000000..21940bc826 --- /dev/null +++ b/src/binaryen/test/passes/inlining_optimize-level=3.wast @@ -0,0 +1,58 @@ +(module + (export "yes" (func $yes)) + (export "no-loops-but-one-use-but-exported" (func $no-loops-but-one-use-but-exported)) + (table 1 1 anyfunc) + (elem (i32.const 0) $no-loops-but-one-use-but-tabled) + + (func $yes (result i32) ;; inlinable: small, lightweight, even with multi uses and a global use, ok when opt-level=3 + (i32.const 1) + ) + (func $no-tooBig (result i32) + (nop) (nop) (nop) (nop) (nop) (nop) + (nop) (nop) (nop) (nop) (nop) (nop) + (nop) (nop) (nop) (nop) (nop) (nop) + (nop) (nop) (nop) (nop) (nop) (nop) + (nop) (nop) (nop) (nop) (nop) (nop) + (nop) (nop) (nop) (nop) (nop) (nop) + (i32.const 1) + ) + (func $no-calls (result i32) + (call $yes) + ) + (func $yes-calls-but-one-use (result i32) + (call $yes) + ) + (func $no-loops (result i32) + (loop (result i32) + (i32.const 1) + ) + ) + (func $yes-loops-but-one-use (result i32) + (loop (result i32) + (i32.const 1) + ) + ) + (func $no-loops-but-one-use-but-exported (result i32) + (loop (result i32) + (i32.const 1) + ) + ) + (func $no-loops-but-one-use-but-tabled (result i32) + (loop (result i32) + (i32.const 1) + ) + ) + (func $intoHere + (drop (call $yes)) + (drop (call $no-tooBig)) + (drop (call $no-calls)) + (drop (call $no-calls)) + (drop (call $yes-calls-but-one-use)) + (drop (call $no-loops)) + (drop (call $no-loops)) + (drop (call $yes-loops-but-one-use)) + (drop (call $no-loops-but-one-use-but-exported)) + (drop (call $no-loops-but-one-use-but-tabled)) + ) +) + diff --git a/src/binaryen/test/passes/instrument-locals.txt b/src/binaryen/test/passes/instrument-locals.txt new file mode 100644 index 0000000000..26f04d0834 --- /dev/null +++ b/src/binaryen/test/passes/instrument-locals.txt @@ -0,0 +1,118 @@ +(module + (type $0 (func)) + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$jiij (func (param i32 i32 i64) (result i64))) + (type $FUNCSIG$fiif (func (param i32 i32 f32) (result f32))) + (type $FUNCSIG$diid (func (param i32 i32 f64) (result f64))) + (import "instrument" "get_i32" (func $get_i32 (param i32 i32 i32) (result i32))) + (import "instrument" "get_i64" (func $get_i64 (param i32 i32 i64) (result i64))) + (import "instrument" "get_f32" (func $get_f32 (param i32 i32 f32) (result f32))) + (import "instrument" "get_f64" (func $get_f64 (param i32 i32 f64) (result f64))) + (import "instrument" "set_i32" (func $set_i32 (param i32 i32 i32) (result i32))) + (import "instrument" "set_i64" (func $set_i64 (param i32 i32 i64) (result i64))) + (import "instrument" "set_f32" (func $set_f32 (param i32 i32 f32) (result f32))) + (import "instrument" "set_f64" (func $set_f64 (param i32 i32 f64) (result f64))) + (memory $0 0) + (func $A (; 8 ;) (type $0) + (local $x i32) + (local $y i64) + (local $z f32) + (local $w f64) + (drop + (call $get_i32 + (i32.const 0) + (i32.const 0) + (get_local $x) + ) + ) + (drop + (get_local $y) + ) + (drop + (call $get_f32 + (i32.const 1) + (i32.const 2) + (get_local $z) + ) + ) + (drop + (call $get_f64 + (i32.const 2) + (i32.const 3) + (get_local $w) + ) + ) + (drop + (call $get_i32 + (i32.const 3) + (i32.const 0) + (get_local $x) + ) + ) + (drop + (get_local $y) + ) + (drop + (call $get_f32 + (i32.const 4) + (i32.const 2) + (get_local $z) + ) + ) + (drop + (call $get_f64 + (i32.const 5) + (i32.const 3) + (get_local $w) + ) + ) + (set_local $x + (call $set_i32 + (i32.const 6) + (i32.const 0) + (i32.const 1) + ) + ) + (set_local $y + (i64.const 2) + ) + (set_local $z + (call $set_f32 + (i32.const 7) + (i32.const 2) + (f32.const 3.2100000381469727) + ) + ) + (set_local $w + (call $set_f64 + (i32.const 8) + (i32.const 3) + (f64.const 4.321) + ) + ) + (set_local $x + (call $set_i32 + (i32.const 9) + (i32.const 0) + (i32.const 11) + ) + ) + (set_local $y + (i64.const 22) + ) + (set_local $z + (call $set_f32 + (i32.const 10) + (i32.const 2) + (f32.const 33.209999084472656) + ) + ) + (set_local $w + (call $set_f64 + (i32.const 11) + (i32.const 3) + (f64.const 44.321) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/instrument-locals.wast b/src/binaryen/test/passes/instrument-locals.wast new file mode 100644 index 0000000000..b7e34c6d6d --- /dev/null +++ b/src/binaryen/test/passes/instrument-locals.wast @@ -0,0 +1,29 @@ +(module + (func $A + (local $x i32) + (local $y i64) + (local $z f32) + (local $w f64) + + (drop (get_local $x)) + (drop (get_local $y)) + (drop (get_local $z)) + (drop (get_local $w)) + + (drop (get_local $x)) + (drop (get_local $y)) + (drop (get_local $z)) + (drop (get_local $w)) + + (set_local $x (i32.const 1)) + (set_local $y (i64.const 2)) + (set_local $z (f32.const 3.21)) + (set_local $w (f64.const 4.321)) + + (set_local $x (i32.const 11)) + (set_local $y (i64.const 22)) + (set_local $z (f32.const 33.21)) + (set_local $w (f64.const 44.321)) + ) +) + diff --git a/src/binaryen/test/passes/instrument-memory.txt b/src/binaryen/test/passes/instrument-memory.txt new file mode 100644 index 0000000000..fc5221c3eb --- /dev/null +++ b/src/binaryen/test/passes/instrument-memory.txt @@ -0,0 +1,453 @@ +(module + (type $1 (func)) + (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) + (import "instrument" "load" (func $load (param i32 i32 i32 i32) (result i32))) + (import "instrument" "store" (func $store (param i32 i32 i32 i32) (result i32))) + (memory $0 256 256) + (func $A (; 2 ;) (type $1) + (drop + (i32.load8_s + (call $load + (i32.const 0) + (i32.const 1) + (i32.const 0) + (i32.const 0) + ) + ) + ) + (drop + (i32.load8_u + (call $load + (i32.const 1) + (i32.const 1) + (i32.const 0) + (i32.const 0) + ) + ) + ) + (drop + (i32.load16_s + (call $load + (i32.const 2) + (i32.const 2) + (i32.const 0) + (i32.const 0) + ) + ) + ) + (drop + (i32.load16_u + (call $load + (i32.const 3) + (i32.const 2) + (i32.const 0) + (i32.const 0) + ) + ) + ) + (drop + (i32.load + (call $load + (i32.const 4) + (i32.const 4) + (i32.const 0) + (i32.const 0) + ) + ) + ) + (drop + (i64.load8_s + (call $load + (i32.const 5) + (i32.const 1) + (i32.const 0) + (i32.const 0) + ) + ) + ) + (drop + (i64.load8_u + (call $load + (i32.const 6) + (i32.const 1) + (i32.const 0) + (i32.const 0) + ) + ) + ) + (drop + (i64.load16_s + (call $load + (i32.const 7) + (i32.const 2) + (i32.const 0) + (i32.const 0) + ) + ) + ) + (drop + (i64.load16_u + (call $load + (i32.const 8) + (i32.const 2) + (i32.const 0) + (i32.const 0) + ) + ) + ) + (drop + (i64.load32_s + (call $load + (i32.const 9) + (i32.const 4) + (i32.const 0) + (i32.const 0) + ) + ) + ) + (drop + (i64.load32_u + (call $load + (i32.const 10) + (i32.const 4) + (i32.const 0) + (i32.const 0) + ) + ) + ) + (drop + (i64.load + (call $load + (i32.const 11) + (i32.const 8) + (i32.const 0) + (i32.const 0) + ) + ) + ) + (drop + (f32.load + (call $load + (i32.const 12) + (i32.const 4) + (i32.const 0) + (i32.const 0) + ) + ) + ) + (drop + (f64.load + (call $load + (i32.const 13) + (i32.const 8) + (i32.const 0) + (i32.const 0) + ) + ) + ) + (drop + (i32.load8_s offset=1 + (call $load + (i32.const 14) + (i32.const 1) + (i32.const 1) + (i32.const 0) + ) + ) + ) + (drop + (i32.load8_u offset=2 + (call $load + (i32.const 15) + (i32.const 1) + (i32.const 2) + (i32.const 0) + ) + ) + ) + (drop + (i32.load16_s offset=3 align=1 + (call $load + (i32.const 16) + (i32.const 2) + (i32.const 3) + (i32.const 0) + ) + ) + ) + (drop + (i32.load16_u offset=4 align=1 + (call $load + (i32.const 17) + (i32.const 2) + (i32.const 4) + (i32.const 0) + ) + ) + ) + (drop + (i32.load offset=5 align=2 + (call $load + (i32.const 18) + (i32.const 4) + (i32.const 5) + (i32.const 0) + ) + ) + ) + (drop + (i64.load8_s offset=6 + (call $load + (i32.const 19) + (i32.const 1) + (i32.const 6) + (i32.const 0) + ) + ) + ) + (drop + (i64.load8_u offset=7 + (call $load + (i32.const 20) + (i32.const 1) + (i32.const 7) + (i32.const 0) + ) + ) + ) + (drop + (i64.load16_s offset=8 align=1 + (call $load + (i32.const 21) + (i32.const 2) + (i32.const 8) + (i32.const 0) + ) + ) + ) + (drop + (i64.load16_u offset=9 align=1 + (call $load + (i32.const 22) + (i32.const 2) + (i32.const 9) + (i32.const 0) + ) + ) + ) + (drop + (i64.load32_s offset=10 align=2 + (call $load + (i32.const 23) + (i32.const 4) + (i32.const 10) + (i32.const 0) + ) + ) + ) + (drop + (i64.load32_u offset=11 align=2 + (call $load + (i32.const 24) + (i32.const 4) + (i32.const 11) + (i32.const 0) + ) + ) + ) + (drop + (i64.load offset=12 align=2 + (call $load + (i32.const 25) + (i32.const 8) + (i32.const 12) + (i32.const 0) + ) + ) + ) + (drop + (f32.load offset=13 align=2 + (call $load + (i32.const 26) + (i32.const 4) + (i32.const 13) + (i32.const 0) + ) + ) + ) + (drop + (f64.load offset=14 align=2 + (call $load + (i32.const 27) + (i32.const 8) + (i32.const 14) + (i32.const 0) + ) + ) + ) + ) + (func $B (; 3 ;) (type $1) + (i32.store8 + (call $store + (i32.const 28) + (i32.const 1) + (i32.const 0) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.store16 + (call $store + (i32.const 29) + (i32.const 2) + (i32.const 0) + (i32.const 0) + ) + (i32.const 2) + ) + (i32.store + (call $store + (i32.const 30) + (i32.const 4) + (i32.const 0) + (i32.const 0) + ) + (i32.const 3) + ) + (i64.store8 + (call $store + (i32.const 31) + (i32.const 1) + (i32.const 0) + (i32.const 0) + ) + (i64.const 4) + ) + (i64.store16 + (call $store + (i32.const 32) + (i32.const 2) + (i32.const 0) + (i32.const 0) + ) + (i64.const 5) + ) + (i64.store32 + (call $store + (i32.const 33) + (i32.const 4) + (i32.const 0) + (i32.const 0) + ) + (i64.const 6) + ) + (i64.store + (call $store + (i32.const 34) + (i32.const 8) + (i32.const 0) + (i32.const 0) + ) + (i64.const 7) + ) + (f32.store + (call $store + (i32.const 35) + (i32.const 4) + (i32.const 0) + (i32.const 0) + ) + (f32.const 8) + ) + (f64.store + (call $store + (i32.const 36) + (i32.const 8) + (i32.const 0) + (i32.const 0) + ) + (f64.const 9) + ) + (i32.store8 offset=1 + (call $store + (i32.const 37) + (i32.const 1) + (i32.const 1) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.store16 offset=2 align=1 + (call $store + (i32.const 38) + (i32.const 2) + (i32.const 2) + (i32.const 0) + ) + (i32.const 2) + ) + (i32.store offset=3 align=2 + (call $store + (i32.const 39) + (i32.const 4) + (i32.const 3) + (i32.const 0) + ) + (i32.const 3) + ) + (i64.store8 offset=4 + (call $store + (i32.const 40) + (i32.const 1) + (i32.const 4) + (i32.const 0) + ) + (i64.const 4) + ) + (i64.store16 offset=5 + (call $store + (i32.const 41) + (i32.const 2) + (i32.const 5) + (i32.const 0) + ) + (i64.const 5) + ) + (i64.store32 offset=6 align=2 + (call $store + (i32.const 42) + (i32.const 4) + (i32.const 6) + (i32.const 0) + ) + (i64.const 6) + ) + (i64.store offset=7 align=2 + (call $store + (i32.const 43) + (i32.const 8) + (i32.const 7) + (i32.const 0) + ) + (i64.const 7) + ) + (f32.store offset=8 align=2 + (call $store + (i32.const 44) + (i32.const 4) + (i32.const 8) + (i32.const 0) + ) + (f32.const 8) + ) + (f64.store offset=9 align=2 + (call $store + (i32.const 45) + (i32.const 8) + (i32.const 9) + (i32.const 0) + ) + (f64.const 9) + ) + ) +) diff --git a/src/binaryen/test/passes/instrument-memory.wast b/src/binaryen/test/passes/instrument-memory.wast new file mode 100644 index 0000000000..7f92de9cde --- /dev/null +++ b/src/binaryen/test/passes/instrument-memory.wast @@ -0,0 +1,58 @@ +(module + (memory 256 256) + (type $1 (func)) + (func $A (type $1) + (drop (i32.load8_s (i32.const 0))) + (drop (i32.load8_u (i32.const 0))) + (drop (i32.load16_s (i32.const 0))) + (drop (i32.load16_u (i32.const 0))) + (drop (i32.load (i32.const 0))) + (drop (i64.load8_s (i32.const 0))) + (drop (i64.load8_u (i32.const 0))) + (drop (i64.load16_s (i32.const 0))) + (drop (i64.load16_u (i32.const 0))) + (drop (i64.load32_s (i32.const 0))) + (drop (i64.load32_u (i32.const 0))) + (drop (i64.load (i32.const 0))) + (drop (f32.load (i32.const 0))) + (drop (f64.load (i32.const 0))) + + (drop (i32.load8_s align=1 offset=1 (i32.const 0))) + (drop (i32.load8_u align=1 offset=2 (i32.const 0))) + (drop (i32.load16_s align=1 offset=3 (i32.const 0))) + (drop (i32.load16_u align=1 offset=4 (i32.const 0))) + (drop (i32.load align=2 offset=5 (i32.const 0))) + (drop (i64.load8_s align=1 offset=6 (i32.const 0))) + (drop (i64.load8_u align=1 offset=7 (i32.const 0))) + (drop (i64.load16_s align=1 offset=8 (i32.const 0))) + (drop (i64.load16_u align=1 offset=9 (i32.const 0))) + (drop (i64.load32_s align=2 offset=10 (i32.const 0))) + (drop (i64.load32_u align=2 offset=11 (i32.const 0))) + (drop (i64.load align=2 offset=12 (i32.const 0))) + (drop (f32.load align=2 offset=13 (i32.const 0))) + (drop (f64.load align=2 offset=14 (i32.const 0))) + ) + + (func $B (type $1) + (i32.store8 (i32.const 0) (i32.const 1)) + (i32.store16 (i32.const 0) (i32.const 2)) + (i32.store (i32.const 0) (i32.const 3)) + (i64.store8 (i32.const 0) (i64.const 4)) + (i64.store16 (i32.const 0) (i64.const 5)) + (i64.store326 (i32.const 0) (i64.const 6)) + (i64.store (i32.const 0) (i64.const 7)) + (f32.store (i32.const 0) (f32.const 8)) + (f64.store (i32.const 0) (f64.const 9)) + + (i32.store8 align=1 offset=1 (i32.const 0) (i32.const 1)) + (i32.store16 align=1 offset=2 (i32.const 0) (i32.const 2)) + (i32.store align=2 offset=3 (i32.const 0) (i32.const 3)) + (i64.store8 align=1 offset=4 (i32.const 0) (i64.const 4)) + (i64.store16 align=2 offset=5 (i32.const 0) (i64.const 5)) + (i64.store32 align=2 offset=6 (i32.const 0) (i64.const 6)) + (i64.store align=2 offset=7 (i32.const 0) (i64.const 7)) + (f32.store align=2 offset=8 (i32.const 0) (f32.const 8)) + (f64.store align=2 offset=9 (i32.const 0) (f64.const 9)) + ) +) + diff --git a/src/binaryen/test/passes/local-cse.txt b/src/binaryen/test/passes/local-cse.txt new file mode 100644 index 0000000000..c15b1a95c7 --- /dev/null +++ b/src/binaryen/test/passes/local-cse.txt @@ -0,0 +1,184 @@ +(module + (type $0 (func)) + (type $1 (func (param i32) (result i32))) + (memory $0 100 100) + (func $basics (; 0 ;) (type $0) + (local $x i32) + (local $y i32) + (local $2 i32) + (local $3 i32) + (drop + (tee_local $2 + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + ) + (drop + (get_local $2) + ) + (if + (i32.const 0) + (nop) + ) + (drop + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + (drop + (tee_local $3 + (i32.add + (get_local $x) + (get_local $y) + ) + ) + ) + (drop + (get_local $3) + ) + (drop + (get_local $3) + ) + (call $basics) + (drop + (get_local $3) + ) + (set_local $x + (i32.const 100) + ) + (drop + (i32.add + (get_local $x) + (get_local $y) + ) + ) + ) + (func $recursive1 (; 1 ;) (type $0) + (local $x i32) + (local $y i32) + (local $2 i32) + (drop + (i32.add + (i32.const 1) + (tee_local $2 + (i32.add + (i32.const 2) + (i32.const 3) + ) + ) + ) + ) + (drop + (i32.add + (i32.const 1) + (get_local $2) + ) + ) + (drop + (get_local $2) + ) + ) + (func $recursive2 (; 2 ;) (type $0) + (local $x i32) + (local $y i32) + (local $2 i32) + (drop + (i32.add + (i32.const 1) + (tee_local $2 + (i32.add + (i32.const 2) + (i32.const 3) + ) + ) + ) + ) + (drop + (get_local $2) + ) + (drop + (i32.add + (i32.const 1) + (get_local $2) + ) + ) + ) + (func $self (; 3 ;) (type $0) + (local $x i32) + (local $y i32) + (local $2 i32) + (drop + (i32.add + (tee_local $2 + (i32.add + (i32.const 2) + (i32.const 3) + ) + ) + (get_local $2) + ) + ) + (drop + (get_local $2) + ) + ) + (func $loads (; 4 ;) (type $0) + (drop + (i32.load + (i32.const 10) + ) + ) + (drop + (i32.load + (i32.const 10) + ) + ) + ) + (func $8 (; 5 ;) (type $1) (param $var$0 i32) (result i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (local $4 i32) + (block $label$0 (result i32) + (i32.store + (tee_local $var$2 + (tee_local $4 + (i32.add + (get_local $var$1) + (i32.const 4) + ) + ) + ) + (i32.and + (i32.load + (get_local $var$2) + ) + (i32.xor + (tee_local $var$2 + (i32.const 74) + ) + (i32.const -1) + ) + ) + ) + (i32.store + (tee_local $var$1 + (get_local $4) + ) + (i32.or + (i32.load + (get_local $var$1) + ) + (i32.and + (get_local $var$2) + (i32.const 8) + ) + ) + ) + (i32.const 0) + ) + ) +) diff --git a/src/binaryen/test/passes/local-cse.wast b/src/binaryen/test/passes/local-cse.wast new file mode 100644 index 0000000000..31b49cbb1f --- /dev/null +++ b/src/binaryen/test/passes/local-cse.wast @@ -0,0 +1,164 @@ +(module + (memory 100 100) + (func $basics + (local $x i32) + (local $y i32) + (drop + (i32.add (i32.const 1) (i32.const 2)) + ) + (drop + (i32.add (i32.const 1) (i32.const 2)) + ) + (if (i32.const 0) (nop)) + (drop ;; we can't do this yet, non-linear + (i32.add (i32.const 1) (i32.const 2)) + ) + (drop + (i32.add (get_local $x) (get_local $y)) + ) + (drop + (i32.add (get_local $x) (get_local $y)) + ) + (drop + (i32.add (get_local $x) (get_local $y)) + ) + (call $basics) ;; side effects, but no matter for our locals + (drop + (i32.add (get_local $x) (get_local $y)) + ) + (set_local $x (i32.const 100)) + (drop ;; x was changed! + (i32.add (get_local $x) (get_local $y)) + ) + ) + (func $recursive1 + (local $x i32) + (local $y i32) + (drop + (i32.add + (i32.const 1) + (i32.add + (i32.const 2) + (i32.const 3) + ) + ) + ) + (drop + (i32.add + (i32.const 1) + (i32.add + (i32.const 2) + (i32.const 3) + ) + ) + ) + (drop + (i32.add + (i32.const 2) + (i32.const 3) + ) + ) + ) + (func $recursive2 + (local $x i32) + (local $y i32) + (drop + (i32.add + (i32.const 1) + (i32.add + (i32.const 2) + (i32.const 3) + ) + ) + ) + (drop + (i32.add + (i32.const 2) + (i32.const 3) + ) + ) + (drop + (i32.add + (i32.const 1) + (i32.add + (i32.const 2) + (i32.const 3) + ) + ) + ) + ) + (func $self + (local $x i32) + (local $y i32) + (drop + (i32.add + (i32.add + (i32.const 2) + (i32.const 3) + ) + (i32.add + (i32.const 2) + (i32.const 3) + ) + ) + ) + (drop + (i32.add + (i32.const 2) + (i32.const 3) + ) + ) + ) + (func $loads + (drop + (i32.load (i32.const 10)) + ) + (drop + (i32.load (i32.const 10)) ;; implicit traps, sad + ) + ) + (func $8 (param $var$0 i32) (result i32) + (local $var$1 i32) + (local $var$2 i32) + (local $var$3 i32) + (block $label$0 (result i32) + (i32.store + (tee_local $var$2 + (i32.add + (get_local $var$1) + (i32.const 4) + ) + ) + (i32.and + (i32.load + (get_local $var$2) + ) + (i32.xor + (tee_local $var$2 + (i32.const 74) + ) + (i32.const -1) + ) + ) + ) + (i32.store + (tee_local $var$1 + (i32.add + (get_local $var$1) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $var$1) + ) + (i32.and + (get_local $var$2) + (i32.const 8) + ) + ) + ) + (i32.const 0) + ) + ) +) diff --git a/src/binaryen/test/passes/local-cse_ignore-implicit-traps.txt b/src/binaryen/test/passes/local-cse_ignore-implicit-traps.txt new file mode 100644 index 0000000000..8d57201439 --- /dev/null +++ b/src/binaryen/test/passes/local-cse_ignore-implicit-traps.txt @@ -0,0 +1,30 @@ +(module + (type $0 (func)) + (memory $0 100 100) + (func $loads (; 0 ;) (type $0) + (local $0 i32) + (drop + (tee_local $0 + (i32.load + (i32.const 10) + ) + ) + ) + (drop + (get_local $0) + ) + (drop + (i32.load offset=5 + (i32.const 10) + ) + ) + (drop + (i32.load + (i32.const 11) + ) + ) + (drop + (get_local $0) + ) + ) +) diff --git a/src/binaryen/test/passes/local-cse_ignore-implicit-traps.wast b/src/binaryen/test/passes/local-cse_ignore-implicit-traps.wast new file mode 100644 index 0000000000..0f22084c64 --- /dev/null +++ b/src/binaryen/test/passes/local-cse_ignore-implicit-traps.wast @@ -0,0 +1,20 @@ +(module + (memory 100 100) + (func $loads + (drop + (i32.load (i32.const 10)) + ) + (drop + (i32.load (i32.const 10)) + ) + (drop + (i32.load offset=5 (i32.const 10)) + ) + (drop + (i32.load (i32.const 11)) + ) + (drop + (i32.load (i32.const 10)) + ) + ) +) diff --git a/src/binaryen/test/passes/log-execution.txt b/src/binaryen/test/passes/log-execution.txt new file mode 100644 index 0000000000..e756385abc --- /dev/null +++ b/src/binaryen/test/passes/log-execution.txt @@ -0,0 +1,88 @@ +(module + (type $0 (func)) + (type $1 (func (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (import "env" "log_execution" (func $log_execution (param i32))) + (memory $0 0) + (func $nopp (; 1 ;) (type $0) + (call $log_execution + (i32.const 0) + ) + (nop) + ) + (func $intt (; 2 ;) (type $1) (result i32) + (call $log_execution + (i32.const 1) + ) + (i32.const 10) + ) + (func $workk (; 3 ;) (type $0) + (call $log_execution + (i32.const 2) + ) + (block + (if + (i32.const 0) + (nop) + ) + (drop + (i32.const 1) + ) + ) + ) + (func $loops (; 4 ;) (type $0) + (call $log_execution + (i32.const 6) + ) + (block + (loop $x + (call $log_execution + (i32.const 3) + ) + (block + (call $loops) + (br $x) + ) + ) + (if + (call $intt) + (loop $y + (call $log_execution + (i32.const 4) + ) + (call $loops) + ) + ) + (loop $loop-in + (call $log_execution + (i32.const 5) + ) + (block + (drop + (i32.const 10) + ) + (drop + (i32.const 20) + ) + (drop + (i32.const 30) + ) + ) + ) + ) + ) + (func $loops-similar (; 5 ;) (type $0) + (call $log_execution + (i32.const 8) + ) + (loop $x + (call $log_execution + (i32.const 7) + ) + (block + (call $loops) + (br $x) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/log-execution.wast b/src/binaryen/test/passes/log-execution.wast new file mode 100644 index 0000000000..12175fbcb5 --- /dev/null +++ b/src/binaryen/test/passes/log-execution.wast @@ -0,0 +1,35 @@ +(module + (func $nopp + (nop) + ) + (func $intt (result i32) + (i32.const 10) + ) + (func $workk + (if (i32.const 0) (nop)) + (drop (i32.const 1)) + ) + (func $loops + (loop $x + (call $loops) + (br $x) + ) + (if (call $intt) + (loop $y + (call $loops) + ) + ) + (loop + (drop (i32.const 10)) + (drop (i32.const 20)) + (drop (i32.const 30)) + ) + ) + (func $loops-similar + (loop $x + (call $loops) + (br $x) + ) + ) +) + diff --git a/src/binaryen/test/passes/memory-packing.txt b/src/binaryen/test/passes/memory-packing.txt new file mode 100644 index 0000000000..6f67f9dcbd --- /dev/null +++ b/src/binaryen/test/passes/memory-packing.txt @@ -0,0 +1,20 @@ +(module + (import "env" "memory" (memory $0 2048 2048)) + (import "env" "memoryBase" (global $memoryBase i32)) + (data (get_global $memoryBase) "waka this cannot be optimized\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00we don\'t know where it will go") + (data (i32.const 1024) "waka this CAN be optimized") + (data (i32.const 1107) "we DO know where it will go") + (data (i32.const 2057) "zeros before") + (data (i32.const 3000) "zeros after") + (data (i32.const 4000) "zeros\00in\00the\00middle") + (data (i32.const 4035) "nice skip here") + (data (i32.const 4066) "another\00but no") +) +(module + (import "env" "memory" (memory $0 2048 2048)) + (import "env" "memoryBase" (global $memoryBase i32)) +) +(module + (import "env" "memory" (memory $0 2048 2048)) + (import "env" "memoryBase" (global $memoryBase i32)) +) diff --git a/src/binaryen/test/passes/memory-packing.wast b/src/binaryen/test/passes/memory-packing.wast new file mode 100644 index 0000000000..eb343188e3 --- /dev/null +++ b/src/binaryen/test/passes/memory-packing.wast @@ -0,0 +1,20 @@ +(module + (import "env" "memory" (memory $0 2048 2048)) + (import "env" "memoryBase" (global $memoryBase i32)) + (data (get_global $memoryBase) "waka this cannot be optimized\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00we don't know where it will go") + (data (i32.const 1024) "waka this CAN be optimized\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00we DO know where it will go") + (data (i32.const 2000) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeros before") + (data (i32.const 3000) "zeros after\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 4000) "zeros\00in\00the\00middle\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00nice skip here\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00another\00but no") +) +(module + (import "env" "memory" (memory $0 2048 2048)) + (import "env" "memoryBase" (global $memoryBase i32)) + ;; nothing +) +(module + (import "env" "memory" (memory $0 2048 2048)) + (import "env" "memoryBase" (global $memoryBase i32)) + (data (i32.const 4066) "") ;; empty +) + diff --git a/src/binaryen/test/passes/merge-blocks.txt b/src/binaryen/test/passes/merge-blocks.txt new file mode 100644 index 0000000000..b5be6f2cfe --- /dev/null +++ b/src/binaryen/test/passes/merge-blocks.txt @@ -0,0 +1,133 @@ +(module + (type $0 (func)) + (type $1 (func (param i32))) + (type $2 (func (result i32))) + (memory $0 0) + (func $drop-block (; 0 ;) (type $0) + (block $block + (block $x + (drop + (i32.const 0) + ) + ) + ) + ) + (func $drop-block-br (; 1 ;) (type $0) + (block $block + (drop + (block $x (result i32) + (br $x + (i32.const 1) + ) + (i32.const 0) + ) + ) + ) + ) + (func $drop-block-br-if (; 2 ;) (type $0) + (block $block + (block $x + (drop + (i32.const 1) + ) + (br_if $x + (i32.const 2) + ) + (drop + (i32.const 0) + ) + ) + ) + ) + (func $undroppable-block-br-if (; 3 ;) (type $1) (param $0 i32) + (block $block + (drop + (block $x (result i32) + (call $undroppable-block-br-if + (br_if $x + (i32.const 1) + (i32.const 2) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (func $drop-block-nested-br-if (; 4 ;) (type $0) + (block $block + (block $x + (if + (i32.const 100) + (block $block0 + (drop + (i32.const 1) + ) + (br_if $x + (i32.const 2) + ) + (nop) + ) + ) + (drop + (i32.const 0) + ) + ) + ) + ) + (func $drop-unreachable-br_if (; 5 ;) (type $2) (result i32) + (block $label$0 (result i32) + (block $label$2 (result i32) + (br_if $label$2 + (br $label$0 + (i32.const 538976371) + ) + (i32.const 1918987552) + ) + ) + ) + ) + (func $drop-block-squared-iloop (; 6 ;) (type $0) + (drop + (block $label$0 (result i32) + (drop + (block $label$1 + (loop $label$2 + (br $label$2) + ) + ) + ) + ) + ) + ) + (func $br-goes-away-label2-becomes-unreachable (; 7 ;) (type $0) + (block $block + (drop + (block $label$1 (result i32) + (block $label$2 + (drop + (br_if $label$1 + (unreachable) + (i32.eqz + (br $label$2) + ) + ) + ) + ) + (i32.const 1) + ) + ) + ) + ) + (func $loop-block-drop-block-return (; 8 ;) (type $0) + (loop $label$4 + (block $label$5 + (drop + (block $label$6 (result i32) + (return) + ) + ) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/merge-blocks.wast b/src/binaryen/test/passes/merge-blocks.wast new file mode 100644 index 0000000000..7cba9bf903 --- /dev/null +++ b/src/binaryen/test/passes/merge-blocks.wast @@ -0,0 +1,112 @@ +(module + (func $drop-block + (block + (drop + (block $x (result i32) + (i32.const 0) + ) + ) + ) + ) + (func $drop-block-br + (block + (drop + (block $x (result i32) + (br $x (i32.const 1)) + (i32.const 0) + ) + ) + ) + ) + (func $drop-block-br-if + (block + (drop + (block $x (result i32) + (drop (br_if $x (i32.const 1) (i32.const 2))) + (i32.const 0) + ) + ) + ) + ) + (func $undroppable-block-br-if (param i32) + (block + (drop + (block $x (result i32) + (call $undroppable-block-br-if (br_if $x (i32.const 1) (i32.const 2))) + (i32.const 0) + ) + ) + ) + ) + (func $drop-block-nested-br-if + (block + (drop + (block $x (result i32) + (if (i32.const 100) + (block + (drop (br_if $x (i32.const 1) (i32.const 2))) + (nop) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (func $drop-unreachable-br_if (result i32) + (block $label$0 (result i32) + (block $label$2 (result i32) + (br_if $label$2 + (br $label$0 + (i32.const 538976371) + ) + (i32.const 1918987552) + ) + ) + ) + ) + (func $drop-block-squared-iloop + (drop + (block $label$0 (result i32) ;; this block's type should not change, so the drop remains none and valid + (drop + (block $label$1 + (loop $label$2 + (br $label$2) + ) + ) + ) + ) + ) + ) + (func $br-goes-away-label2-becomes-unreachable + (block + (drop + (block $label$1 (result i32) + (block $label$2 + (drop + (br_if $label$1 + (unreachable) + (i32.eqz + (br $label$2) + ) + ) + ) + ) + (i32.const 1) + ) + ) + ) + ) + (func $loop-block-drop-block-return + (loop $label$4 + (block $label$5 + (drop + (block $label$6 (result i32) + (return) + ) + ) + ) + ) + ) +) + diff --git a/src/binaryen/test/passes/metrics.txt b/src/binaryen/test/passes/metrics.txt new file mode 100644 index 0000000000..fd8aa790f5 --- /dev/null +++ b/src/binaryen/test/passes/metrics.txt @@ -0,0 +1,65 @@ +Counts + [funcs] : 1 + [memory-data] : 9 + [table-data] : 3 + [total] : 27 + [vars] : 1 + binary : 1 + block : 1 + const : 15 + drop : 6 + if : 4 +(module + (type $0 (func (param i32))) + (global $glob i32 (i32.const 1337)) + (table 256 256 anyfunc) + (elem (i32.const 0) $ifs $ifs $ifs) + (memory $0 256 256) + (data (i32.const 0) "\ff\ef\0f\1f 0@P\99") + (func $ifs (; 0 ;) (type $0) (param $x i32) + (local $y f32) + (block $block0 + (if + (i32.const 0) + (drop + (i32.const 1) + ) + ) + (if + (i32.const 0) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + ) + (if + (i32.const 4) + (drop + (i32.const 5) + ) + (drop + (i32.const 6) + ) + ) + (drop + (i32.eq + (if (result i32) + (i32.const 4) + (i32.const 5) + (i32.const 6) + ) + (i32.const 177) + ) + ) + ) + ) +) +Counts + [funcs] : 0 + [total] : 0 + [vars] : 0 +(module + (memory $0 0) +) diff --git a/src/binaryen/test/passes/metrics.wast b/src/binaryen/test/passes/metrics.wast new file mode 100644 index 0000000000..4c762b59d3 --- /dev/null +++ b/src/binaryen/test/passes/metrics.wast @@ -0,0 +1,50 @@ +(module + (memory 256 256) + (table 256 256 anyfunc) + (elem (i32.const 0) $ifs $ifs $ifs) + (data (i32.const 0) "\ff\ef\0f\1f\20\30\40\50\99") + (type $0 (func (param i32))) + (global $glob i32 (i32.const 1337)) + (func $ifs (type $0) (param $x i32) + (local $y f32) + (block $block0 + (if + (i32.const 0) + (drop + (i32.const 1) + ) + ) + (if + (i32.const 0) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + ) + (if + (i32.const 4) + (drop + (i32.const 5) + ) + (drop + (i32.const 6) + ) + ) + (drop + (i32.eq + (if (result i32) + (i32.const 4) + (i32.const 5) + (i32.const 6) + ) + (i32.const 177) + ) + ) + ) + ) +) +;; module with no table or memory or anything for that matter +(module +) diff --git a/src/binaryen/test/passes/nm.txt b/src/binaryen/test/passes/nm.txt new file mode 100644 index 0000000000..e34788c6d9 --- /dev/null +++ b/src/binaryen/test/passes/nm.txt @@ -0,0 +1,39 @@ + $a : 1 + $b : 5 + $c : 13 +(module + (type $0 (func)) + (memory $0 0) + (func $a (; 0 ;) (type $0) + (nop) + ) + (func $b (; 1 ;) (type $0) + (drop + (loop $loop-in1 (result i32) + (nop) + (i32.const 1000) + ) + ) + ) + (func $c (; 2 ;) (type $0) + (block $top + (nop) + (drop + (i32.const 1000) + ) + (drop + (i32.add + (i32.add + (i32.const 1001) + (i32.const 1002) + ) + (i32.add + (i32.const 1003) + (i32.const 1004) + ) + ) + ) + (br $top) + ) + ) +) diff --git a/src/binaryen/test/passes/nm.wast b/src/binaryen/test/passes/nm.wast new file mode 100644 index 0000000000..4b3e82acf2 --- /dev/null +++ b/src/binaryen/test/passes/nm.wast @@ -0,0 +1,36 @@ +(module + (memory 0) + (type $0 (func)) + (func $a (type $0) + (nop) + ) + (func $b (type $0) + (drop + (loop $loop-in1 (result i32) + (nop) + (i32.const 1000) + ) + ) + ) + (func $c (type $0) + (block $top + (nop) + (drop + (i32.const 1000) + ) + (drop + (i32.add + (i32.add + (i32.const 1001) + (i32.const 1002) + ) + (i32.add + (i32.const 1003) + (i32.const 1004) + ) + ) + ) + (br $top) + ) + ) +) diff --git a/src/binaryen/test/passes/optimize-instructions.txt b/src/binaryen/test/passes/optimize-instructions.txt new file mode 100644 index 0000000000..d30e8f22e8 --- /dev/null +++ b/src/binaryen/test/passes/optimize-instructions.txt @@ -0,0 +1,2218 @@ +(module + (type $0 (func (param i32 i64))) + (type $1 (func)) + (type $2 (func (result i32))) + (type $3 (func (param i32) (result i32))) + (type $4 (func (param i32 i32))) + (type $5 (func (param i32))) + (type $6 (func (param i32 i32) (result i32))) + (type $7 (func (param i64) (result i64))) + (type $8 (func (result i64))) + (memory $0 0) + (export "load-off-2" (func $load-off-2)) + (func $f (; 0 ;) (type $0) (param $i1 i32) (param $i2 i64) + (if + (i32.eqz + (get_local $i1) + ) + (drop + (i32.const 10) + ) + ) + (if + (get_local $i1) + (drop + (i32.const 12) + ) + (drop + (i32.const 11) + ) + ) + (if + (i64.eqz + (get_local $i2) + ) + (drop + (i32.const 11) + ) + (drop + (i32.const 12) + ) + ) + (drop + (i32.le_s + (i32.const 1) + (i32.const 2) + ) + ) + (drop + (i32.lt_s + (i32.const 1) + (i32.const 2) + ) + ) + (drop + (i32.ge_s + (i32.const 1) + (i32.const 2) + ) + ) + (drop + (i32.gt_s + (i32.const 1) + (i32.const 2) + ) + ) + (drop + (i32.le_u + (i32.const 1) + (i32.const 2) + ) + ) + (drop + (i32.lt_u + (i32.const 1) + (i32.const 2) + ) + ) + (drop + (i32.ge_u + (i32.const 1) + (i32.const 2) + ) + ) + (drop + (i32.gt_u + (i32.const 1) + (i32.const 2) + ) + ) + (drop + (i32.eqz + (f32.gt + (f32.const 1) + (f32.const 2) + ) + ) + ) + (drop + (i32.eqz + (f32.ge + (f32.const 1) + (f32.const 2) + ) + ) + ) + (drop + (i32.eqz + (f32.lt + (f32.const 1) + (f32.const 2) + ) + ) + ) + (drop + (i32.eqz + (f32.le + (f32.const 1) + (f32.const 2) + ) + ) + ) + (drop + (i32.eqz + (f64.gt + (f64.const 1) + (f64.const 2) + ) + ) + ) + (drop + (i32.eqz + (f64.ge + (f64.const 1) + (f64.const 2) + ) + ) + ) + (drop + (i32.eqz + (f64.lt + (f64.const 1) + (f64.const 2) + ) + ) + ) + (drop + (i32.eqz + (f64.le + (f64.const 1) + (f64.const 2) + ) + ) + ) + (drop + (f32.ne + (f32.const 1) + (f32.const 2) + ) + ) + (drop + (f32.eq + (f32.const 1) + (f32.const 2) + ) + ) + (drop + (f64.ne + (f64.const 1) + (f64.const 2) + ) + ) + (drop + (f64.eq + (f64.const 1) + (f64.const 2) + ) + ) + (drop + (i32.eqz + (i32.const 100) + ) + ) + (drop + (i32.eq + (i32.const 0) + (i32.const 100) + ) + ) + (drop + (i32.eqz + (i32.const 0) + ) + ) + (if + (i32.const 123) + (nop) + ) + (drop + (select + (i32.const 102) + (i32.const 101) + (get_local $i1) + ) + ) + (drop + (select + (tee_local $i1 + (i32.const 103) + ) + (tee_local $i1 + (i32.const 104) + ) + (i32.eqz + (get_local $i1) + ) + ) + ) + (drop + (select + (i32.const 0) + (i32.const 1) + (i32.const 2) + ) + ) + ) + (func $load-store (; 1 ;) (type $1) + (drop + (i32.load8_u + (i32.const 0) + ) + ) + (drop + (i32.load8_u + (i32.const 1) + ) + ) + (drop + (i32.and + (i32.load8_s + (i32.const 2) + ) + (i32.const 254) + ) + ) + (drop + (i32.and + (i32.load8_u + (i32.const 3) + ) + (i32.const 1) + ) + ) + (drop + (i32.load16_u + (i32.const 4) + ) + ) + (drop + (i32.load16_u + (i32.const 5) + ) + ) + (drop + (i32.and + (i32.load16_s + (i32.const 6) + ) + (i32.const 65534) + ) + ) + (drop + (i32.and + (i32.load16_u + (i32.const 7) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.const 8) + (i32.const -1) + ) + (i32.store8 + (i32.const 9) + (i32.and + (i32.const -2) + (i32.const 254) + ) + ) + (i32.store16 + (i32.const 10) + (i32.const -3) + ) + (i32.store16 + (i32.const 11) + (i32.and + (i32.const -4) + (i32.const 65534) + ) + ) + (i64.store8 + (i32.const 11) + (i64.const 1) + ) + (i64.store16 + (i32.const 11) + (i64.const 2) + ) + (i64.store32 + (i32.const 11) + (i64.const 3) + ) + ) + (func $and-neg1 (; 2 ;) (type $1) + (drop + (i32.const 100) + ) + (drop + (i32.and + (i32.const 100) + (i32.const 1) + ) + ) + ) + (func $and-pos1 (; 3 ;) (type $1) + (drop + (i32.eqz + (i32.const 1000) + ) + ) + (drop + (i32.eqz + (i32.const 1000) + ) + ) + (drop + (i32.and + (i32.const 100) + (i32.const 1) + ) + ) + (drop + (i32.lt_s + (i32.const 2000) + (i32.const 3000) + ) + ) + ) + (func $canonicalize-binary (; 4 ;) (type $1) + (drop + (i32.and + (unreachable) + (i32.const 1) + ) + ) + (drop + (i32.and + (i32.const 1) + (unreachable) + ) + ) + (drop + (i32.div_s + (unreachable) + (i32.const 1) + ) + ) + (drop + (i32.div_s + (i32.const 1) + (unreachable) + ) + ) + ) + (func $ne0 (; 5 ;) (type $2) (result i32) + (if + (call $ne0) + (nop) + ) + (if + (call $ne0) + (nop) + ) + (if + (i32.or + (call $ne0) + (call $ne0) + ) + (nop) + ) + (if + (i32.and + (i32.ne + (call $ne0) + (i32.const 0) + ) + (i32.ne + (call $ne0) + (i32.const 0) + ) + ) + (nop) + ) + (i32.const 1) + ) + (func $recurse-bool (; 6 ;) (type $1) + (if + (if (result i32) + (i32.const 1) + (call $ne0) + (call $ne1) + ) + (nop) + ) + (if + (block $block (result i32) + (nop) + (call $ne0) + ) + (nop) + ) + ) + (func $ne1 (; 7 ;) (type $2) (result i32) + (unreachable) + ) + (func $load-off-2 (; 8 ;) (type $3) (param $0 i32) (result i32) + (i32.store + (i32.const 6) + (get_local $0) + ) + (i32.store + (i32.const 6) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (get_local $0) + (i32.const 5) + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (get_local $0) + (i32.const 7) + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (get_local $0) + (i32.const -11) + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (get_local $0) + (i32.const -13) + ) + (get_local $0) + ) + (i32.store + (i32.const 4) + (get_local $0) + ) + (i32.store offset=2 + (i32.const -2) + (get_local $0) + ) + (i32.store + (i32.const 25) + (get_local $0) + ) + (i32.store offset=2 + (i32.const -25) + (get_local $0) + ) + (drop + (i32.load + (i32.const 8) + ) + ) + (drop + (i32.load + (i32.const 8) + ) + ) + (drop + (i32.load offset=2 + (i32.add + (get_local $0) + (i32.const 6) + ) + ) + ) + (drop + (i32.load + (i32.const 10) + ) + ) + (i32.load offset=2 + (i32.add + (get_local $0) + (i32.const 10) + ) + ) + ) + (func $sign-ext (; 9 ;) (type $4) (param $0 i32) (param $1 i32) + (drop + (i32.eqz + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + ) + (drop + (i32.eqz + (i32.and + (get_local $0) + (i32.const 65535) + ) + ) + ) + (drop + (i32.eqz + (i32.and + (get_local $0) + (i32.const 134217727) + ) + ) + ) + (drop + (i32.eq + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.const 100) + ) + ) + (drop + (i32.eq + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.const -2147483648) + ) + ) + (drop + (i32.eq + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.const 107) + ) + ) + (drop + (i32.eq + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (drop + (i32.eq + (i32.and + (get_local $0) + (i32.const 65535) + ) + (i32.and + (get_local $1) + (i32.const 65535) + ) + ) + ) + (drop + (i32.eqz + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 23) + ) + ) + ) + (drop + (i32.eqz + (i32.shr_u + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (drop + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + ) + (func $sign-ext-input (; 10 ;) (type $4) (param $0 i32) (param $1 i32) + (drop + (i32.const 100) + ) + (drop + (i32.const 127) + ) + (drop + (i32.shr_s + (i32.shl + (i32.const 128) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (unreachable) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.div_s + (i32.const 1) + (i32.const 2) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.and + (i32.const 127) + (i32.const 128) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.and + (i32.const 128) + (i32.const 129) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.xor + (i32.const 127) + (i32.const 126) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.xor + (i32.const 127) + (i32.const 128) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.or + (i32.const 127) + (i32.const 126) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.or + (i32.const 127) + (i32.const 128) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.const 32) + (i32.const 26) + ) + (i32.const 24) + ) + ) + (drop + (i32.shl + (i32.const 32) + (i32.const 1) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.const 32) + (i32.const 27) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_u + (i32.const 256) + (i32.const 1) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_u + (i32.const 256) + (i32.const 2) + ) + ) + (drop + (i32.shr_u + (i32.const 128) + (i32.const 35) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_s + (i32.const 256) + (i32.const 1) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.const 256) + (i32.const 2) + ) + ) + (drop + (i32.shr_s + (i32.const 128) + (i32.const 35) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_s + (i32.const -1) + (i32.const 32) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.and + (i32.const -1) + (i32.const 2147483647) + ) + (i32.const 31) + ) + ) + (drop + (i32.ne + (i32.const -1) + (i32.const -1) + ) + ) + (drop + (f32.le + (f32.const -1) + (f32.const -1) + ) + ) + (drop + (i32.clz + (i32.const 0) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.clz + (i32.const 0) + ) + (i32.const 26) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.clz + (i32.const 0) + ) + (i32.const 27) + ) + (i32.const 24) + ) + ) + (drop + (i32.wrap/i64 + (i64.clz + (i64.const 0) + ) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.wrap/i64 + (i64.clz + (i64.const 0) + ) + ) + (i32.const 25) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.wrap/i64 + (i64.clz + (i64.const 0) + ) + ) + (i32.const 26) + ) + (i32.const 24) + ) + ) + (drop + (i32.eqz + (i32.const -1) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_u + (i32.wrap/i64 + (i64.const -1) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_u + (i32.wrap/i64 + (i64.const -1) + ) + (i32.const 25) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_u + (i32.wrap/i64 + (i64.extend_s/i32 + (i32.const -1) + ) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_u + (i32.wrap/i64 + (i64.extend_s/i32 + (i32.const -1) + ) + ) + (i32.const 25) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.xor + (i32.le_u + (get_local $0) + (i32.const 2) + ) + (get_local $0) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $linear-sums (; 11 ;) (type $4) (param $0 i32) (param $1 i32) + (drop + (i32.add + (get_local $1) + (i32.shl + (get_local $0) + (i32.const 4) + ) + ) + ) + (drop + (i32.add + (i32.add + (get_local $1) + (i32.shl + (get_local $0) + (i32.const 3) + ) + ) + (i32.const 12) + ) + ) + (drop + (i32.const 4) + ) + (drop + (i32.const 18) + ) + (drop + (i32.const 6) + ) + (drop + (i32.const -4) + ) + (drop + (i32.const 2) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 26) + ) + (drop + (i32.const -20) + ) + (drop + (i32.const 22) + ) + (drop + (i32.add + (i32.shl + (i32.const 1) + (get_local $0) + ) + (i32.const 14) + ) + ) + (drop + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const -66) + ) + ) + (drop + (i32.const 44) + ) + (drop + (i32.add + (i32.mul + (get_local $0) + (i32.const 10) + ) + (i32.const 14) + ) + ) + (drop + (i32.add + (i32.mul + (get_local $0) + (i32.const 2) + ) + (i32.const 34) + ) + ) + (drop + (get_local $0) + ) + ) + (func $almost-sign-ext (; 12 ;) (type $4) (param $0 i32) (param $0 i32) + (drop + (i32.shr_s + (i32.shl + (i32.const 100) + (i32.const 25) + ) + (i32.const 24) + ) + ) + (drop + (i32.shl + (i32.const 50) + (i32.const 1) + ) + ) + ) + (func $squaring (; 13 ;) (type $4) (param $0 i32) (param $1 i32) + (drop + (i32.and + (get_local $0) + (i32.const 8) + ) + ) + (drop + (i32.and + (i32.and + (get_local $0) + (i32.const 11) + ) + (get_local $0) + ) + ) + (drop + (i32.and + (get_local $0) + (i32.const 8) + ) + ) + (drop + (i32.or + (get_local $0) + (i32.const 203) + ) + ) + (drop + (i32.shl + (get_local $0) + (i32.const 19) + ) + ) + (drop + (i32.shr_s + (get_local $0) + (i32.const 19) + ) + ) + (drop + (i32.shr_u + (get_local $0) + (i32.const 19) + ) + ) + (drop + (i32.shr_u + (i32.shr_s + (get_local $0) + (i32.const 11) + ) + (i32.const 200) + ) + ) + ) + (func $sign-ext-ne (; 14 ;) (type $4) (param $0 i32) (param $1 i32) + (drop + (i32.ne + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.const -2147483648) + ) + ) + (drop + (i32.ne + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.const -2147483648) + ) + ) + (drop + (i32.ne + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.const 107) + ) + ) + (drop + (i32.ne + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.const 111) + ) + ) + (drop + (i32.ne + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + ) + (func $sign-ext-eqz (; 15 ;) (type $4) (param $0 i32) (param $1 i32) + (drop + (i32.eqz + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + ) + ) + (func $sign-ext-boolean (; 16 ;) (type $4) (param $0 i32) (param $1 i32) + (drop + (if (result i32) + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.const 100) + (i32.const 200) + ) + ) + ) + (func $add-sub-zero (; 17 ;) (type $4) (param $0 i32) (param $1 i32) + (drop + (get_local $0) + ) + (drop + (get_local $0) + ) + ) + (func $store-signext (; 18 ;) (type $5) (param $0 i32) + (i32.store8 + (i32.const 8) + (get_local $0) + ) + (i32.store8 + (i32.const 8) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 25) + ) + (i32.const 25) + ) + ) + (i32.store8 + (i32.const 8) + (get_local $0) + ) + (i32.store16 + (i32.const 8) + (get_local $0) + ) + (i32.store16 + (i32.const 8) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 17) + ) + (i32.const 17) + ) + ) + (i32.store16 + (i32.const 8) + (get_local $0) + ) + (i32.store + (i32.const 8) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 16) + ) + (i32.const 16) + ) + ) + (i32.store + (i32.const 8) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 8) + ) + (i32.const 8) + ) + ) + ) + (func $sign-ext-tee (; 19 ;) (type $4) (param $0 i32) (param $1 i32) + (drop + (i32.shr_s + (i32.shl + (tee_local $0 + (i32.const 128) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (tee_local $0 + (i32.const 127) + ) + ) + ) + (func $sign-ext-load (; 20 ;) (type $4) (param $0 i32) (param $1 i32) + (drop + (i32.load8_s + (i32.const 256) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_u + (i32.load8_s + (i32.const 256) + ) + (i32.const 1) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_u + (i32.load8_u + (i32.const 256) + ) + (i32.const 1) + ) + ) + (drop + (i32.load16_s + (i32.const 256) + ) + ) + (drop + (tee_local $1 + (i32.load8_s + (i32.const 1) + ) + ) + ) + (drop + (i32.shr_s + (i32.shl + (tee_local $1 + (i32.load8_u + (i32.const 1) + ) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.and + (tee_local $1 + (i32.load8_s + (i32.const 1) + ) + ) + (i32.const 255) + ) + ) + (drop + (tee_local $1 + (i32.load8_u + (i32.const 1) + ) + ) + ) + ) + (func $mask-bits (; 21 ;) (type $4) (param $0 i32) (param $1 i32) + (drop + (tee_local $0 + (i32.const 127) + ) + ) + (drop + (tee_local $0 + (i32.const 128) + ) + ) + (drop + (i32.and + (tee_local $0 + (i32.const 128) + ) + (i32.const 254) + ) + ) + (drop + (i32.and + (tee_local $0 + (i32.const 128) + ) + (i32.const 1279) + ) + ) + (drop + (i32.and + (tee_local $0 + (i32.const 128) + ) + (i32.const 1290) + ) + ) + (drop + (tee_local $0 + (i32.const 128) + ) + ) + (drop + (tee_local $0 + (i32.const 128) + ) + ) + (drop + (i32.and + (tee_local $0 + (i32.const 128) + ) + (i32.const 127) + ) + ) + ) + (func $local-info-zero-ext (; 22 ;) (type $4) (param $0 i32) (param $1 i32) + (local $x i32) + (local $y i32) + (local $z i32) + (local $w i32) + (set_local $x + (i32.const 212) + ) + (drop + (get_local $x) + ) + (set_local $y + (i32.const 500) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + (set_local $0 + (i32.const 212) + ) + (drop + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + (set_local $z + (i32.const 212) + ) + (set_local $z + (i32.const 220) + ) + (drop + (get_local $z) + ) + (set_local $w + (i32.const 212) + ) + (set_local $w + (i32.const 1000) + ) + (drop + (i32.and + (get_local $w) + (i32.const 255) + ) + ) + ) + (func $local-info-sign-ext-bitsize (; 23 ;) (type $4) (param $0 i32) (param $1 i32) + (local $x i32) + (local $y i32) + (local $z i32) + (local $w i32) + (set_local $x + (i32.const 127) + ) + (drop + (get_local $x) + ) + (set_local $y + (i32.const 128) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $y) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $0 + (i32.const 127) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $z + (i32.const 127) + ) + (set_local $z + (i32.const 100) + ) + (drop + (get_local $z) + ) + (set_local $w + (i32.const 127) + ) + (set_local $w + (i32.const 150) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $w) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $local-info-sign-ext-already-exted (; 24 ;) (type $4) (param $0 i32) (param $1 i32) + (local $x i32) + (local $y i32) + (local $z i32) + (local $w i32) + (set_local $x + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (get_local $x) + ) + (set_local $y + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 16) + ) + (i32.const 16) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $y) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $0 + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $z + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $z + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (get_local $z) + ) + (set_local $w + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $w + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 23) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $w) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 23) + ) + ) + ) + (func $signed-loads-fill-the-bits (; 25 ;) (type $3) (param $$e i32) (result i32) + (local $$0 i32) + (local $$conv i32) + (set_local $$0 + (i32.load8_s + (i32.const 1024) + ) + ) + (set_local $$conv + (i32.and + (get_local $$0) + (i32.const 255) + ) + ) + (return + (i32.eq + (get_local $$conv) + (get_local $$e) + ) + ) + ) + (func $local-info-sign-ext-already-exted-by-load (; 26 ;) (type $4) (param $0 i32) (param $1 i32) + (local $x i32) + (local $y i32) + (local $z i32) + (local $w i32) + (set_local $x + (i32.load8_s + (i32.const 1024) + ) + ) + (drop + (get_local $x) + ) + (set_local $y + (i32.load8_u + (i32.const 1024) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $y) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $z + (i32.load16_s + (i32.const 1024) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $z) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $compare-load-s-sign-extend (; 27 ;) (type $4) (param $0 i32) (param $1 i32) + (drop + (i32.eq + (i32.load8_u + (get_local $0) + ) + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (drop + (i32.eq + (i32.and + (get_local $1) + (i32.const 255) + ) + (i32.load8_u + (get_local $0) + ) + ) + ) + (drop + (i32.eq + (i32.load8_u + (get_local $0) + ) + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (drop + (i32.eq + (i32.load8_s + (get_local $0) + ) + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 16) + ) + (i32.const 16) + ) + ) + ) + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.load8_u + (get_local $0) + ) + ) + ) + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 16) + ) + (i32.const 16) + ) + (i32.load8_s + (get_local $0) + ) + ) + ) + ) + (func $unsign-diff-sizes (; 28 ;) (type $6) (param $x i32) (param $y i32) (result i32) + (i32.ne + (i32.shr_s + (i32.shl + (call $unsign-diff-sizes + (i32.const -1) + (i32.const 5) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (call $unsign-diff-sizes + (i32.const 1) + (i32.const 2006) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + ) + (func $unsign-same-sizes (; 29 ;) (type $6) (param $x i32) (param $y i32) (result i32) + (i32.ne + (i32.and + (call $unsign-same-sizes + (i32.const -1) + (i32.const 5) + ) + (i32.const 255) + ) + (i32.and + (call $unsign-same-sizes + (i32.const 1) + (i32.const 2006) + ) + (i32.const 255) + ) + ) + ) + (func $fuzz-almost-sign-ext (; 30 ;) (type $1) + (drop + (i32.shr_s + (i32.shl + (i32.load16_u + (i32.const 2278) + ) + (i32.const 17) + ) + (i32.const 16) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.load16_u + (i32.const 2278) + ) + (i32.const 17) + ) + (i32.const 16) + ) + ) + ) + (func $fuzz-comp-impossible (; 31 ;) (type $5) (param $x i32) + (drop + (i32.eq + (i32.and + (get_local $x) + (i32.const 65535) + ) + (i32.const -2147483648) + ) + ) + (drop + (i32.eq + (i32.and + (get_local $x) + (i32.const 255) + ) + (i32.const -2147483648) + ) + ) + (drop + (i32.eq + (i32.and + (get_local $x) + (i32.const 255) + ) + (i32.const 127) + ) + ) + (drop + (i32.eq + (i32.and + (get_local $x) + (i32.const 255) + ) + (i32.const -2147483648) + ) + ) + (drop + (i32.eq + (i32.and + (get_local $x) + (i32.const 255) + ) + (i32.const -2147483648) + ) + ) + (drop + (i32.eq + (i32.and + (get_local $x) + (i32.const 255) + ) + (i32.const -2147483648) + ) + ) + (drop + (i32.eq + (i32.and + (get_local $x) + (i32.const 255) + ) + (i32.const 252) + ) + ) + ) + (func $if-parallel (; 32 ;) (type $4) (param $0 i32) (param $1 i32) + (drop + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (drop + (block (result i32) + (drop + (tee_local $0 + (get_local $1) + ) + ) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + (drop + (block (result i32) + (i32.add + (get_local $1) + (unreachable) + ) + ) + ) + (drop + (block (result i32) + (drop + (tee_local $0 + (get_local $1) + ) + ) + (i32.add + (get_local $1) + (unreachable) + ) + ) + ) + (drop + (if (result i32) + (unreachable) + (i32.add + (get_local $1) + (unreachable) + ) + (i32.add + (get_local $1) + (unreachable) + ) + ) + ) + ) + (func $select-parallel (; 33 ;) (type $4) (param $0 i32) (param $1 i32) + (drop + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (drop + (select + (tee_local $0 + (get_local $1) + ) + (tee_local $0 + (get_local $1) + ) + (get_local $0) + ) + ) + (drop + (block (result i32) + (drop + (tee_local $0 + (get_local $1) + ) + ) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + (drop + (select + (tee_local $0 + (get_local $1) + ) + (tee_local $0 + (get_local $1) + ) + (tee_local $0 + (get_local $1) + ) + ) + ) + (drop + (select + (tee_local $0 + (get_local $1) + ) + (tee_local $0 + (get_local $1) + ) + (unreachable) + ) + ) + ) + (func $zero-shifts-is-not-sign-ext (; 34 ;) (type $1) + (drop + (i32.eq + (i32.load16_s align=1 + (i32.const 790656516) + ) + (i32.const -5431187) + ) + ) + (drop + (i32.eq + (i32.shl + (i32.load16_s align=1 + (i32.const 790656516) + ) + (i32.const 1) + ) + (i32.const -5431187) + ) + ) + ) + (func $zero-ops (; 35 ;) (type $2) (result i32) + (return + (i32.eq + (i32.load16_s align=1 + (i32.const 790656516) + ) + (i32.const -1337) + ) + ) + ) + (func $sign-ext-1-and-ne (; 36 ;) (type $2) (result i32) + (select + (i32.ne + (i32.and + (call $sign-ext-1-and-ne) + (i32.const 2147483647) + ) + (i32.const -2147483648) + ) + (i32.const 2) + (i32.const 1) + ) + ) + (func $neg-shifts-and-255 (; 37 ;) (type $2) (result i32) + (i32.and + (i32.shr_u + (i32.const -99) + (i32.const -32) + ) + (i32.const 255) + ) + ) + (func $neg-shifts-and-255-b (; 38 ;) (type $2) (result i32) + (i32.and + (i32.shl + (i32.const -2349025) + (i32.const -32) + ) + (i32.const 255) + ) + ) + (func $shifts-square-overflow (; 39 ;) (type $3) (param $x i32) (result i32) + (i32.shr_u + (i32.shr_u + (get_local $x) + (i32.const 65535) + ) + (i32.const 32767) + ) + ) + (func $shifts-square-no-overflow-small (; 40 ;) (type $3) (param $x i32) (result i32) + (i32.shr_u + (get_local $x) + (i32.const 9) + ) + ) + (func $shifts-square-overflow-64 (; 41 ;) (type $7) (param $x i64) (result i64) + (i64.shr_u + (i64.shr_u + (get_local $x) + (i64.const 65535) + ) + (i64.const 64767) + ) + ) + (func $shifts-square-no-overflow-small-64 (; 42 ;) (type $7) (param $x i64) (result i64) + (i64.shr_u + (get_local $x) + (i64.const 9) + ) + ) + (func $shifts-square-unreachable (; 43 ;) (type $3) (param $x i32) (result i32) + (i32.shr_u + (i32.shr_u + (unreachable) + (i32.const 1031) + ) + (i32.const 4098) + ) + ) + (func $mix-shifts (; 44 ;) (type $2) (result i32) + (i32.shr_s + (i32.shl + (i32.const 23) + (i32.const -61) + ) + (i32.const 168) + ) + ) + (func $actually-no-shifts (; 45 ;) (type $2) (result i32) + (i32.const 33) + ) + (func $less-shifts-than-it-seems (; 46 ;) (type $3) (param $x i32) (result i32) + (i32.const 4800) + ) + (func $and-popcount32 (; 47 ;) (type $2) (result i32) + (i32.and + (i32.popcnt + (i32.const -1) + ) + (i32.const 31) + ) + ) + (func $and-popcount32-big (; 48 ;) (type $2) (result i32) + (i32.popcnt + (i32.const -1) + ) + ) + (func $and-popcount64 (; 49 ;) (type $8) (result i64) + (i64.and + (i64.popcnt + (i64.const -1) + ) + (i64.const 63) + ) + ) + (func $and-popcount64-big (; 50 ;) (type $8) (result i64) + (i64.and + (i64.popcnt + (i64.const -1) + ) + (i64.const 127) + ) + ) + (func $and-popcount64-bigger (; 51 ;) (type $8) (result i64) + (i64.and + (i64.popcnt + (i64.const -1) + ) + (i64.const 255) + ) + ) + (func $optimizeAddedConstants-filters-through-nonzero (; 52 ;) (type $2) (result i32) + (i32.add + (i32.shl + (i32.const -536870912) + (i32.wrap/i64 + (i64.const 0) + ) + ) + (i32.const -31744) + ) + ) + (func $optimizeAddedConstants-filters-through-nonzero-b (; 53 ;) (type $2) (result i32) + (i32.add + (i32.shl + (i32.const -536870912) + (i32.wrap/i64 + (i64.const -1) + ) + ) + (i32.const -31744) + ) + ) + (func $return-proper-value-from-shift-left-by-zero (; 54 ;) (type $2) (result i32) + (if (result i32) + (i32.add + (loop $label$0 (result i32) + (block $label$1 + (br_if $label$1 + (i32.load + (i32.const 0) + ) + ) + ) + (i32.const -62) + ) + (i32.const 40) + ) + (i32.const 1) + (i32.const 0) + ) + ) +) +(module + (type $0 (func)) + (import "env" "memory" (memory $0 (shared 256 256))) + (func $x (; 0 ;) (type $0) + (drop + (i32.shr_s + (i32.shl + (i32.atomic.load8_u + (i32.const 100) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/optimize-instructions.wast b/src/binaryen/test/passes/optimize-instructions.wast new file mode 100644 index 0000000000..4ee2b0c860 --- /dev/null +++ b/src/binaryen/test/passes/optimize-instructions.wast @@ -0,0 +1,2659 @@ +(module + (memory 0) + (type $0 (func (param i32 i64))) + (func $f (type $0) (param $i1 i32) (param $i2 i64) + (if + (i32.eqz + (get_local $i1) + ) + (drop + (i32.const 10) + ) + ) + (if + (i32.eqz + (get_local $i1) + ) + (drop + (i32.const 11) + ) + (drop + (i32.const 12) + ) + ) + (if + (i64.eqz + (get_local $i2) + ) + (drop + (i32.const 11) + ) + (drop + (i32.const 12) + ) + ) + (drop + (i32.eqz + (i32.gt_s + (i32.const 1) + (i32.const 2) + ) + ) + ) + (drop + (i32.eqz + (i32.ge_s + (i32.const 1) + (i32.const 2) + ) + ) + ) + (drop + (i32.eqz + (i32.lt_s + (i32.const 1) + (i32.const 2) + ) + ) + ) + (drop + (i32.eqz + (i32.le_s + (i32.const 1) + (i32.const 2) + ) + ) + ) + (drop + (i32.eqz + (i32.gt_u + (i32.const 1) + (i32.const 2) + ) + ) + ) + (drop + (i32.eqz + (i32.ge_u + (i32.const 1) + (i32.const 2) + ) + ) + ) + (drop + (i32.eqz + (i32.lt_u + (i32.const 1) + (i32.const 2) + ) + ) + ) + (drop + (i32.eqz + (i32.le_u + (i32.const 1) + (i32.const 2) + ) + ) + ) + (drop + (i32.eqz + (f32.gt + (f32.const 1) + (f32.const 2) + ) + ) + ) + (drop + (i32.eqz + (f32.ge + (f32.const 1) + (f32.const 2) + ) + ) + ) + (drop + (i32.eqz + (f32.lt + (f32.const 1) + (f32.const 2) + ) + ) + ) + (drop + (i32.eqz + (f32.le + (f32.const 1) + (f32.const 2) + ) + ) + ) + (drop + (i32.eqz + (f64.gt + (f64.const 1) + (f64.const 2) + ) + ) + ) + (drop + (i32.eqz + (f64.ge + (f64.const 1) + (f64.const 2) + ) + ) + ) + (drop + (i32.eqz + (f64.lt + (f64.const 1) + (f64.const 2) + ) + ) + ) + (drop + (i32.eqz + (f64.le + (f64.const 1) + (f64.const 2) + ) + ) + ) + (drop + (i32.eqz + (f32.eq + (f32.const 1) + (f32.const 2) + ) + ) + ) + (drop + (i32.eqz + (f32.ne + (f32.const 1) + (f32.const 2) + ) + ) + ) + (drop + (i32.eqz + (f64.eq + (f64.const 1) + (f64.const 2) + ) + ) + ) + (drop + (i32.eqz + (f64.ne + (f64.const 1) + (f64.const 2) + ) + ) + ) + ;; we handle only 0 in the right position, as we assume a const is there, and don't care about if + ;; both are consts here (precompute does that, so no need) + (drop + (i32.eq + (i32.const 100) + (i32.const 0) + ) + ) + (drop + (i32.eq + (i32.const 0) + (i32.const 100) + ) + ) + (drop + (i32.eq + (i32.const 0) + (i32.const 0) + ) + ) + (if + (i32.eqz + (i32.eqz + (i32.const 123) + ) + ) + (nop) + ) + (drop + (select + (i32.const 101) + (i32.const 102) + (i32.eqz + (get_local $i1) + ) + ) + ) + (drop + (select + (tee_local $i1 + (i32.const 103) + ) ;; these conflict + (tee_local $i1 + (i32.const 104) + ) + (i32.eqz + (get_local $i1) + ) + ) + ) + (drop + (select + (i32.const 0) + (i32.const 1) + (i32.eqz + (i32.eqz + (i32.const 2) + ) + ) + ) + ) + ) + (func $load-store + (drop (i32.and (i32.load8_s (i32.const 0)) (i32.const 255))) + (drop (i32.and (i32.load8_u (i32.const 1)) (i32.const 255))) + (drop (i32.and (i32.load8_s (i32.const 2)) (i32.const 254))) + (drop (i32.and (i32.load8_u (i32.const 3)) (i32.const 1))) + (drop (i32.and (i32.load16_s (i32.const 4)) (i32.const 65535))) + (drop (i32.and (i32.load16_u (i32.const 5)) (i32.const 65535))) + (drop (i32.and (i32.load16_s (i32.const 6)) (i32.const 65534))) + (drop (i32.and (i32.load16_u (i32.const 7)) (i32.const 1))) + ;; + (i32.store8 (i32.const 8) (i32.and (i32.const -1) (i32.const 255))) + (i32.store8 (i32.const 9) (i32.and (i32.const -2) (i32.const 254))) + (i32.store16 (i32.const 10) (i32.and (i32.const -3) (i32.const 65535))) + (i32.store16 (i32.const 11) (i32.and (i32.const -4) (i32.const 65534))) + ;; + (i32.store8 (i32.const 11) (i32.wrap/i64 (i64.const 1))) + (i32.store16 (i32.const 11) (i32.wrap/i64 (i64.const 2))) + (i32.store (i32.const 11) (i32.wrap/i64 (i64.const 3))) + ) + (func $and-neg1 + (drop (i32.and (i32.const 100) (i32.const -1))) + (drop (i32.and (i32.const 100) (i32.const 1))) + ) + (func $and-pos1 + (drop (i32.and (i32.eqz (i32.const 1000)) (i32.const 1))) + (drop (i32.and (i32.const 1) (i32.eqz (i32.const 1000)))) + (drop (i32.and (i32.const 100) (i32.const 1))) + (drop (i32.and (i32.lt_s (i32.const 2000) (i32.const 3000)) (i32.const 1))) + ) + (func $canonicalize-binary + (drop (i32.and (unreachable) (i32.const 1))) ;; ok to reorder + (drop (i32.and (i32.const 1) (unreachable))) + (drop (i32.div_s (unreachable) (i32.const 1))) ;; not ok + (drop (i32.div_s (i32.const 1) (unreachable))) + ) + (func $ne0 (result i32) + (if (i32.ne (call $ne0) (i32.const 0)) + (nop) + ) + (if (i32.ne (i32.const 0) (call $ne0)) + (nop) + ) + ;; through an or + (if + (i32.or + (i32.ne (i32.const 0) (call $ne0)) + (i32.ne (i32.const 0) (call $ne0)) + ) + (nop) + ) + ;; but not an and + (if + (i32.and + (i32.ne (i32.const 0) (call $ne0)) + (i32.ne (i32.const 0) (call $ne0)) + ) + (nop) + ) + (i32.const 1) + ) + (func $recurse-bool + (if + (if (result i32) + (i32.const 1) + (i32.ne (call $ne0) (i32.const 0)) + (i32.ne (call $ne1) (i32.const 0)) + ) + (nop) + ) + (if + (block (result i32) + (nop) + (i32.ne (call $ne0) (i32.const 0)) + ) + (nop) + ) + ) + (func $ne1 (result i32) + (unreachable) + ) + (func $load-off-2 "load-off-2" (param $0 i32) (result i32) + (i32.store offset=2 + (i32.add + (i32.const 1) + (i32.const 3) + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (i32.const 3) + (i32.const 1) + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (get_local $0) + (i32.const 5) + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (i32.const 7) + (get_local $0) + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (i32.const -11) ;; do not fold this! + (get_local $0) + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (get_local $0) + (i32.const -13) ;; do not fold this! + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (i32.const -15) + (i32.const 17) + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (i32.const -21) + (i32.const 19) + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.const 23) + (get_local $0) + ) + (i32.store offset=2 + (i32.const -25) + (get_local $0) + ) + (drop + (i32.load offset=2 + (i32.add + (i32.const 2) + (i32.const 4) + ) + ) + ) + (drop + (i32.load offset=2 + (i32.add + (i32.const 4) + (i32.const 2) + ) + ) + ) + (drop + (i32.load offset=2 + (i32.add + (get_local $0) + (i32.const 6) + ) + ) + ) + (drop + (i32.load offset=2 + (i32.const 8) + ) + ) + (i32.load offset=2 + (i32.add + (i32.const 10) + (get_local $0) + ) + ) + ) + (func $sign-ext (param $0 i32) (param $1 i32) + ;; eq of sign-ext to const, can be a zext + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 16) + ) + (i32.const 16) + ) + (i32.const 0) + ) + ) + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 5) ;; weird size, but still valid + ) + (i32.const 5) + ) + (i32.const 0) + ) + ) + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 100) ;; non-zero + ) + ) + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 32767) ;; non-zero and bigger than the mask, with sign bit + ) + ) + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -149) ;; non-zero and bigger than the mask, without sign bit + ) + ) + ;; eq of two sign-ext, can both be a zext + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 16) + ) + (i32.const 16) + ) + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 16) + ) + (i32.const 16) + ) + ) + ) + ;; corner cases we should not opt + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 23) ;; different shift, smaller + ) + (i32.const 0) + ) + ) + (drop + (i32.eq + (i32.shr_u ;; unsigned + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (drop + (i32.lt_s ;; non-eq + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + ) + (func $sign-ext-input (param $0 i32) (param $1 i32) + (drop + (i32.shr_s + (i32.shl + (i32.const 100) ;; small! + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.const 127) ;; just small enough + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.const 128) ;; just too big + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get-local $0) ;; who knows... + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (unreachable) ;; ignore + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.div_s ;; this could be optimizable in theory, but currently we don't look into adds etc. + (i32.const 1) + (i32.const 2) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.and ;; takes the min, here it is ok + (i32.const 127) + (i32.const 128) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.and ;; takes the min, here it is not + (i32.const 128) + (i32.const 129) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.xor ;; takes the max, here it is ok + (i32.const 127) + (i32.const 126) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.xor ;; takes the max, here it is not + (i32.const 127) + (i32.const 128) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.or ;; takes the max, here it is ok + (i32.const 127) + (i32.const 126) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.or ;; takes the max, here it is not + (i32.const 127) + (i32.const 128) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shl ;; adds, here it is too much + (i32.const 32) + (i32.const 2) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shl ;; adds, here it is ok + (i32.const 32) + (i32.const 1) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shl ;; adds, here it is too much and "overflows" + (i32.const 32) + (i32.const 35) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_u ;; subtracts, here it is still too much + (i32.const 256) + (i32.const 1) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_u ;; subtracts, here it is ok + (i32.const 256) + (i32.const 2) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_u ;; subtracts, here it "overflows" + (i32.const 128) + (i32.const 35) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_s ;; subtracts, here it is still too much + (i32.const 256) + (i32.const 1) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_s ;; subtracts, here it is ok + (i32.const 256) + (i32.const 2) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_s ;; subtracts, here it "overflows" + (i32.const 128) + (i32.const 35) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_s ;; subtracts, here there is a sign bit, so it stays 32 bits no matter how much we shift + (i32.const -1) + (i32.const 32) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_s ;; subtracts, here we mask out that sign bit + (i32.and + (i32.const -1) + (i32.const 2147483647) + ) + (i32.const 31) ;; adjusted after we fixed shift computation to just look at lower 5 bits + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.ne ;; 1 bit + (i32.const -1) + (i32.const -1) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (f32.le + (f32.const -1) + (f32.const -1) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.clz ;; assumed 5 bits + (i32.const 0) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shl + (i32.clz ;; assumed 5 bits + (i32.const 0) + ) + (i32.const 2) ;; + 2, so 7 + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shl + (i32.clz ;; assumed 5 bits + (i32.const 0) + ) + (i32.const 3) ;; + 3, so 8, too much + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.wrap/i64 ;; preserves 6 + (i64.clz ;; assumed 6 bits + (i64.const 0) + ) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shl + (i32.wrap/i64 ;; preserves 6 + (i64.clz ;; assumed 6 bits + (i64.const 0) + ) + ) + (i32.const 1) ;; + 1, so 7 + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shl + (i32.wrap/i64 ;; preserves 6 + (i64.clz ;; assumed 6 bits + (i64.const 0) + ) + ) + (i32.const 2) ;; + 2, so 8, too much + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.eqz ;; 1 bit + (i32.const -1) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_u + (i32.wrap/i64 ;; down to 32 + (i64.const -1) ;; 64 + ) + (i32.const 24) ;; 32 - 24 = 8 + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_u + (i32.wrap/i64 ;; down to 32 + (i64.const -1) ;; 64 + ) + (i32.const 25) ;; 32 - 25 = 7, ok + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_u + (i32.wrap/i64 ;; stay 32 + (i64.extend_s/i32 + (i32.const -1) + ) + ) + (i32.const 24) ;; 32 - 24 = 8 + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_u + (i32.wrap/i64 ;; stay 32 + (i64.extend_s/i32 + (i32.const -1) + ) + ) + (i32.const 25) ;; 32 - 25 = 7, ok + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop ;; fuzz testcase + (i32.shr_s + (i32.shl + (i32.xor ;; should be 32 bits + (i32.le_u ;; 1 bit + (get_local $0) + (i32.const 2) + ) + (get_local $0) ;; unknown, so 32 bits + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $linear-sums (param $0 i32) (param $1 i32) + (drop + (i32.add + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.shl + (i32.add + (get_local $0) + (i32.const -1) ;; -16, so cancels out! + ) + (i32.const 4) + ) + ) + ) + (drop + (i32.add + (i32.add + (get_local $1) + (i32.const 20) + ) + (i32.shl + (i32.add + (get_local $0) + (i32.const -1) ;; -8, so sum is +12 + ) + (i32.const 3) + ) + ) + ) + (drop + (i32.add ;; simple sum + (i32.const 1) + (i32.const 3) + ) + ) + (drop + (i32.add ;; nested sum + (i32.add + (i32.const 1) + (i32.const 3) + ) + (i32.add + (i32.const 5) + (i32.const 9) + ) + ) + ) + (drop + (i32.add + (i32.add + (i32.const 1) + (i32.const 3) + ) + (i32.sub ;; internal sub + (i32.const 5) + (i32.const 3) + ) + ) + ) + (drop + (i32.sub ;; external sub + (i32.add + (i32.const 1) + (i32.const 3) + ) + (i32.add + (i32.const 5) + (i32.const 3) + ) + ) + ) + (drop + (i32.sub ;; external sub + (i32.add + (i32.const 1) + (i32.const 3) + ) + (i32.sub ;; and also internal sub + (i32.const 5) + (i32.const 3) + ) + ) + ) + (drop + (i32.add + (i32.add + (i32.const 1) + (i32.const 3) + ) + (i32.sub ;; negating sub + (i32.const 0) + (i32.const 3) + ) + ) + ) + (drop + (i32.add + (i32.sub + (i32.const 0) + (i32.sub ;; two negating subs + (i32.const 0) + (i32.add + (i32.const 3) + (i32.const 20) + ) + ) + ) + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + ) + (drop + (i32.add + (i32.add + (i32.const 0) + (i32.sub ;; one negating sub + (i32.const 0) + (i32.add + (i32.const 3) + (i32.const 20) + ) + ) + ) + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + ) + (drop + (i32.add + (i32.shl ;; shifted value + (i32.const 1) + (i32.const 3) + ) + (i32.add + (i32.const 5) + (i32.const 9) + ) + ) + ) + (drop + (i32.add + (i32.shl ;; shifted value + (i32.const 1) + (get_local $0) ;; but not by const + ) + (i32.add + (i32.const 5) + (i32.const 9) + ) + ) + ) + (drop + (i32.add + (i32.shl ;; shifted nested value + (i32.sub + (get_local $1) + (i32.const 10) + ) + (i32.const 3) + ) + (i32.add + (i32.const 5) + (i32.const 9) + ) + ) + ) + (drop + (i32.add + (i32.mul ;; multiplied + (i32.const 10) + (i32.const 3) + ) + (i32.add + (i32.const 5) + (i32.const 9) + ) + ) + ) + (drop + (i32.add + (i32.mul ;; multiplied by nonconstant - can't recurse + (i32.const 10) + (get_local $0) + ) + (i32.add + (i32.const 5) + (i32.const 9) + ) + ) + ) + (drop + (i32.add + (i32.mul ;; nested mul + (i32.add + (i32.const 10) + (get_local $0) + ) + (i32.const 2) + ) + (i32.add + (i32.const 5) + (i32.const 9) + ) + ) + ) + (drop + (i32.add + (i32.add + (get_local $0) + (i32.const 10) ;; cancelled out with the below + ) + (i32.sub + (i32.const -5) + (i32.const 5) + ) + ) + ) + ) + (func $almost-sign-ext (param $0 i32) (param $0 i32) + (drop + (i32.shr_s + (i32.shl + (i32.const 100) ;; too big, there is a sign bit, due to the extra shift + (i32.const 25) + ) + (i32.const 24) ;; different shift, but larger, so ok to opt if we leave a shift, in theory + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.const 50) ;; small enough, no sign bit + (i32.const 25) + ) + (i32.const 24) ;; different shift, but larger, so ok to opt if we leave a shift + ) + ) + ) + (func $squaring (param $0 i32) (param $1 i32) + (drop + (i32.and + (i32.and + (get_local $0) + (i32.const 11) + ) + (i32.const 200) + ) + ) + (drop + (i32.and + (i32.and + (get_local $0) + (i32.const 11) + ) + (get_local $0) ;; non-const, cannot optimize this! + ) + ) + (drop + (i32.and + (i32.and + (i32.const 11) ;; flipped order + (get_local $0) + ) + (i32.const 200) + ) + ) + (drop + (i32.or + (i32.or + (get_local $0) + (i32.const 11) + ) + (i32.const 200) + ) + ) + (drop + (i32.shl + (i32.shl + (get_local $0) + (i32.const 11) + ) + (i32.const 200) + ) + ) + (drop + (i32.shr_s + (i32.shr_s + (get_local $0) + (i32.const 11) + ) + (i32.const 200) + ) + ) + (drop + (i32.shr_u + (i32.shr_u + (get_local $0) + (i32.const 11) + ) + (i32.const 200) + ) + ) + (drop + (i32.shr_u + (i32.shr_s ;; but do not optimize a mixture or different shifts! + (get_local $0) + (i32.const 11) + ) + (i32.const 200) + ) + ) + ) + (func $sign-ext-ne (param $0 i32) (param $1 i32) + ;; ne of sign-ext to const, can be a zext + (drop + (i32.ne + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 65000) + ) + ) + (drop + (i32.ne + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 64872) ;; no sign bit + ) + ) + (drop + (i32.ne + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -149) ;; no sign bit, not all ones + ) + ) + (drop + (i32.ne + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 111) + ) + ) + (drop + (i32.ne + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + ) + (func $sign-ext-eqz (param $0 i32) (param $1 i32) + (drop + (i32.eqz + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + ) + (func $sign-ext-boolean (param $0 i32) (param $1 i32) + (drop + (if (result i32) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 100) + (i32.const 200) + ) + ) + ) + (func $add-sub-zero (param $0 i32) (param $1 i32) + (drop + (i32.add + (get_local $0) + (i32.const 0) + ) + ) + (drop + (i32.sub + (get_local $0) + (i32.const 0) + ) + ) + ) + (func $store-signext (param $0 i32) + (i32.store8 + (i32.const 8) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) ;; exact size we store, sign-ext of 8 bits + ) + (i32.const 24) + ) + ) + (i32.store8 + (i32.const 8) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 25) ;; 7 bits. so the ext can alter a bit we store, do not optimize + ) + (i32.const 25) + ) + ) + (i32.store8 + (i32.const 8) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 23) ;; 9 bits, this is good to optimize + ) + (i32.const 23) + ) + ) + (i32.store16 + (i32.const 8) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 16) ;; exact size we store, sign-ext of 16 bits + ) + (i32.const 16) + ) + ) + (i32.store16 + (i32.const 8) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 17) ;; 15 bits. so the ext can alter a bit we store, do not optimize + ) + (i32.const 17) + ) + ) + (i32.store16 + (i32.const 8) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 14) ;; 17 bits, this is good to optimize + ) + (i32.const 14) + ) + ) + (i32.store + (i32.const 8) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 16) ;; 4 bytes stored, do nothing + ) + (i32.const 16) + ) + ) + (i32.store + (i32.const 8) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 8) ;; 4 bytes stored, do nothing + ) + (i32.const 8) + ) + ) + ) + (func $sign-ext-tee (param $0 i32) (param $1 i32) + (drop + (i32.shr_s + (i32.shl + (tee_local $0 + (i32.const 128) ;; too big + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (tee_local $0 + (i32.const 127) ;; just right + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $sign-ext-load (param $0 i32) (param $1 i32) + (drop + (i32.shr_s + (i32.shl + (i32.load8_s ;; one byte, so perfect + (i32.const 256) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_u + (i32.load8_s ;; one byte, but sexted to 32 + (i32.const 256) + ) + (i32.const 1) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shr_u + (i32.load8_u ;; one byte, but reduced to 7 + (i32.const 256) + ) + (i32.const 1) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.load16_s ;; two, so perfect + (i32.const 256) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + ;; through tees, we cannot alter the load sign + (drop + (i32.shr_s + (i32.shl + (tee_local $1 + (i32.load8_s + (i32.const 1) + ) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (tee_local $1 + (i32.load8_u + (i32.const 1) + ) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.and + (tee_local $1 + (i32.load8_s + (i32.const 1) + ) + ) + (i32.const 255) + ) + ) + (drop + (i32.and + (tee_local $1 + (i32.load8_u + (i32.const 1) + ) + ) + (i32.const 255) + ) + ) + ) + (func $mask-bits (param $0 i32) (param $1 i32) + (drop + (i32.and + (tee_local $0 + (i32.const 127) ;; 7 bits + ) + (i32.const 255) ;; mask 8, so we don't need this + ) + ) + (drop + (i32.and + (tee_local $0 + (i32.const 128) ;; 8 bits + ) + (i32.const 255) ;; mask 8, so we don't need this + ) + ) + (drop + (i32.and + (tee_local $0 + (i32.const 128) + ) + (i32.const 254) ;; improper mask, small + ) + ) + (drop + (i32.and + (tee_local $0 + (i32.const 128) + ) + (i32.const 1279) ;; improper mask, large + ) + ) + (drop + (i32.and + (tee_local $0 + (i32.const 128) + ) + (i32.const 1290) ;; improper mask, large + ) + ) + (drop + (i32.and + (tee_local $0 + (i32.const 128) + ) + (i32.const 4095) ;; proper mask, huge + ) + ) + (drop + (i32.and + (tee_local $0 + (i32.const 128) + ) + (i32.const 511) ;; proper mask, large + ) + ) + (drop + (i32.and + (tee_local $0 + (i32.const 128) + ) + (i32.const 127) ;; proper mask, just too small + ) + ) + ) + (func $local-info-zero-ext (param $0 i32) (param $1 i32) + (local $x i32) + (local $y i32) + (local $z i32) + (local $w i32) + (set_local $x + (i32.const 212) ;; mask is unneeded, we are small + ) + (drop + (i32.and + (get_local $x) + (i32.const 255) + ) + ) + (set_local $y + (i32.const 500) ;; mask is needed, we are too big + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + (set_local $0 + (i32.const 212) ;; mask is unneeded, but we are a param, not a var, so no + ) + (drop + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + (set_local $z + (i32.const 212) ;; mask is unneeded, we are small + ) + (set_local $z + (i32.const 220) ;; mask is still unneeded even with 2 uses + ) + (drop + (i32.and + (get_local $z) + (i32.const 255) + ) + ) + (set_local $w + (i32.const 212) ;; mask is unneeded, we are small + ) + (set_local $w + (i32.const 1000) ;; mask is needed, one use is too big + ) + (drop + (i32.and + (get_local $w) + (i32.const 255) + ) + ) + ) + (func $local-info-sign-ext-bitsize (param $0 i32) (param $1 i32) + (local $x i32) + (local $y i32) + (local $z i32) + (local $w i32) + (set_local $x + (i32.const 127) ;; mask is unneeded, we are small + ) + (drop + (i32.shr_s + (i32.shl + (get_local $x) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $y + (i32.const 128) ;; mask is needed, we are too big + ) + (drop + (i32.shr_s + (i32.shl + (get_local $y) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $0 + (i32.const 127) ;; mask is unneeded, but we are a param, not a var, so no + ) + (drop + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $z + (i32.const 127) ;; mask is unneeded, we are small + ) + (set_local $z + (i32.const 100) ;; mask is still unneeded even with 2 uses + ) + (drop + (i32.shr_s + (i32.shl + (get_local $z) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $w + (i32.const 127) ;; mask is unneeded, we are small + ) + (set_local $w + (i32.const 150) ;; mask is needed, one use is too big + ) + (drop + (i32.shr_s + (i32.shl + (get_local $w) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $local-info-sign-ext-already-exted (param $0 i32) (param $1 i32) + (local $x i32) + (local $y i32) + (local $z i32) + (local $w i32) + (set_local $x + (i32.shr_s + (i32.shl + (get_local $0) ;; already sign-exted here, so no need later + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $x) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $y + (i32.shr_s + (i32.shl + (get_local $0) ;; already sign-exted here, but wrong bit size + (i32.const 16) + ) + (i32.const 16) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $y) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $0 + (i32.shr_s + (i32.shl + (get_local $0) ;; already sign-exted here, so no need later, but we are a param + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $z + (i32.shr_s + (i32.shl + (get_local $0) ;; already sign-exted here, so no need later + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $z + (i32.shr_s + (i32.shl + (get_local $1) ;; already sign-exted here, so no need later + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $z) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $w + (i32.shr_s + (i32.shl + (get_local $0) ;; already sign-exted here, so no need later + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $w + (i32.shr_s + (i32.shl + (get_local $0) ;; not quite a sign-ext + (i32.const 23) + ) + (i32.const 24) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $w) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (drop ;; odd corner case + (i32.shr_s + (i32.shl + (get_local $0) ;; param, so we should know nothing + (i32.const 24) + ) + (i32.const 23) ;; different shift, smaller + ) + ) + ) + (func $signed-loads-fill-the-bits (param $$e i32) (result i32) + (local $$0 i32) + (local $$conv i32) + (set_local $$0 + (i32.load8_s ;; one byte, but 32 bits due to sign-extend + (i32.const 1024) + ) + ) + (set_local $$conv + (i32.and + (get_local $$0) + (i32.const 255) ;; so we need this zexting! + ) + ) + (return + (i32.eq + (get_local $$conv) + (get_local $$e) + ) + ) + ) + (func $local-info-sign-ext-already-exted-by-load (param $0 i32) (param $1 i32) + (local $x i32) + (local $y i32) + (local $z i32) + (local $w i32) + (set_local $x + (i32.load8_s (i32.const 1024)) ;; 8 bits, sign extended, no need to do it again + ) + (drop + (i32.shr_s + (i32.shl + (get_local $x) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $y + (i32.load8_u (i32.const 1024)) ;; 8 bits, zext, so bad + ) + (drop + (i32.shr_s + (i32.shl + (get_local $y) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $z + (i32.load16_s (i32.const 1024)) ;; 16 bits sign-extended, wrong size + ) + (drop + (i32.shr_s + (i32.shl + (get_local $z) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $compare-load-s-sign-extend (param $0 i32) (param $1 i32) + (drop + (i32.eq + (i32.load8_s + (get_local $0) + ) + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.load8_s + (get_local $0) ;; flip order, we should canonicalize + ) + ) + ) + (drop + (i32.eq + (i32.load8_u ;; unsigned, bad + (get_local $0) + ) + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (drop + (i32.eq + (i32.load8_s + (get_local $0) + ) + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 16) ;; wrong size + ) + (i32.const 16) + ) + ) + ) + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.load8_u ;; unsigned, bad + (get_local $0) + ) + ) + ) + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 16) ;; wrong size + ) + (i32.const 16) + ) + (i32.load8_s + (get_local $0) + ) + ) + ) + ) + (func $unsign-diff-sizes (param $x i32) (param $y i32) (result i32) + (i32.ne + (i32.shr_s + (i32.shl + (call $unsign-diff-sizes + (i32.const -1) + (i32.const 5) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (call $unsign-diff-sizes + (i32.const 1) + (i32.const 2006) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + ) + (func $unsign-same-sizes (param $x i32) (param $y i32) (result i32) + (i32.ne + (i32.shr_s + (i32.shl + (call $unsign-same-sizes + (i32.const -1) + (i32.const 5) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (call $unsign-same-sizes + (i32.const 1) + (i32.const 2006) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $fuzz-almost-sign-ext + (drop + (i32.shr_s + (i32.shl + (i32.load16_u + (i32.const 2278) + ) + (i32.const 17) + ) + (i32.const 16) + ) + ) + (drop + (i32.shr_s + (i32.shl + (i32.shl + (i32.load16_u + (i32.const 2278) + ) + (i32.const 1) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + ) + (func $fuzz-comp-impossible (param $x i32) + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $x) + (i32.const 16) + ) + (i32.const 16) + ) + (i32.const 65535) ;; impossible to be equal, the effective sign bit is set, but not the higher bits, which the sign-ext will set on the non-const value + ) + ) + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $x) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 255) + ) + ) + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $x) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 127) ;; safe + ) + ) + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $x) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 128) ;; unsafe again + ) + ) + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $x) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 4223) ;; more big bits, so sign bit though + ) + ) + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $x) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 4224) ;; more big bits + ) + ) + (drop + (i32.eq + (i32.shr_s + (i32.shl + (get_local $x) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -4) ;; safe even with more big bits, as they are all 1s + ) + ) + ) + (func $if-parallel (param $0 i32) (param $1 i32) + (drop + (if (result i32) + (get_local $0) + (i32.add (get_local $1) (i32.const 1)) + (i32.add (get_local $1) (i32.const 1)) + ) + ) + (drop + (if (result i32) + (tee_local $0 (get_local $1)) ;; side effects! + (i32.add (get_local $1) (i32.const 1)) + (i32.add (get_local $1) (i32.const 1)) + ) + ) + (drop + (if (result i32) + (get_local $0) + (i32.add (get_local $1) (unreachable)) ;; folding them would change the type of the if + (i32.add (get_local $1) (unreachable)) + ) + ) + (drop + (if (result i32) + (tee_local $0 (get_local $1)) ;; side effects! + (i32.add (get_local $1) (unreachable)) ;; folding them would change the type of the if + (i32.add (get_local $1) (unreachable)) + ) + ) + (drop + (if (result i32) + (unreachable) ;; !!! + (i32.add (get_local $1) (unreachable)) ;; folding them would change the type of the if + (i32.add (get_local $1) (unreachable)) + ) + ) + ) + (func $select-parallel (param $0 i32) (param $1 i32) + (drop + (select + (i32.add (get_local $1) (i32.const 1)) + (i32.add (get_local $1) (i32.const 1)) + (get_local $0) + ) + ) + (drop + (select + (tee_local $0 (get_local $1)) ;; side effects! + (tee_local $0 (get_local $1)) ;; side effects! + (get_local $0) + ) + ) + (drop + (select + (i32.add (get_local $1) (i32.const 1)) + (i32.add (get_local $1) (i32.const 1)) + (tee_local $0 (get_local $1)) ;; side effects! (but no interference with values) + ) + ) + (drop + (select + (tee_local $0 (get_local $1)) ;; side effects! interference! + (tee_local $0 (get_local $1)) ;; side effects! interference! + (tee_local $0 (get_local $1)) ;; side effects! interference! + ) + ) + (drop + (select + (tee_local $0 (get_local $1)) ;; side effects! + (tee_local $0 (get_local $1)) ;; side effects! + (unreachable) ;; side effects! (but no interference with values) + ) + ) + ) + (func $zero-shifts-is-not-sign-ext + (drop + (i32.eq + (i32.const -5431187) + (i32.add + (i32.const 0) + (i32.shr_s + (i32.shl + (i32.load16_s align=1 + (i32.const 790656516) + ) + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + ) + (drop + (i32.eq + (i32.const -5431187) + (i32.add + (i32.const 0) + (i32.shr_s + (i32.shl + (i32.load16_s align=1 + (i32.const 790656516) + ) + (i32.const 1) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (func $zero-ops (result i32) + (return + (i32.eq + (i32.const -1337) + (i32.shr_u + (i32.add + (i32.const 0) + (i32.shr_s + (i32.shl + (i32.load16_s align=1 + (i32.const 790656516) + ) + (i32.const 0) + ) + (i32.const 0) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (func $sign-ext-1-and-ne (result i32) + (select + (i32.ne + (i32.const 1333788672) + (i32.shr_s + (i32.shl + (call $sign-ext-1-and-ne) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (i32.const 2) + (i32.const 1) + ) + ) + (func $neg-shifts-and-255 (result i32) + (i32.and + (i32.shr_u + (i32.const -99) + (i32.const -32) ;; this shift does nothing + ) + (i32.const 255) + ) + ) + (func $neg-shifts-and-255-b (result i32) + (i32.and + (i32.shl + (i32.const -2349025) + (i32.const -32) ;; this shift does nothing + ) + (i32.const 255) + ) + ) + (func $shifts-square-overflow (param $x i32) (result i32) + (i32.shr_u + (i32.shr_u + (get_local $x) + (i32.const 65535) ;; 31 bits effectively + ) + (i32.const 32767) ;; also 31 bits, so two shifts that force the value into nothing for sure + ) + ) + (func $shifts-square-no-overflow-small (param $x i32) (result i32) + (i32.shr_u + (i32.shr_u + (get_local $x) + (i32.const 1031) ;; 7 bits effectively + ) + (i32.const 4098) ;; 2 bits effectively + ) + ) + (func $shifts-square-overflow-64 (param $x i64) (result i64) + (i64.shr_u + (i64.shr_u + (get_local $x) + (i64.const 65535) ;; 63 bits effectively + ) + (i64.const 64767) ;; also 63 bits, so two shifts that force the value into nothing for sure + ) + ) + (func $shifts-square-no-overflow-small-64 (param $x i64) (result i64) + (i64.shr_u + (i64.shr_u + (get_local $x) + (i64.const 1031) ;; 7 bits effectively + ) + (i64.const 4098) ;; 2 bits effectively + ) + ) + (func $shifts-square-unreachable (param $x i32) (result i32) + (i32.shr_u + (i32.shr_u + (unreachable) + (i32.const 1031) ;; 7 bits effectively + ) + (i32.const 4098) ;; 2 bits effectively + ) + ) + (func $mix-shifts (result i32) + (i32.shr_s + (i32.shl + (i32.const 23) + (i32.const -61) + ) + (i32.const 168) + ) + ) + (func $actually-no-shifts (result i32) + (i32.add + (i32.shl + (i32.const 23) + (i32.const 32) ;; really 0 + ) + (i32.const 10) + ) + ) + (func $less-shifts-than-it-seems (param $x i32) (result i32) + (i32.add + (i32.shl + (i32.const 200) + (i32.const 36) ;; really 4 + ) + (i32.shl + (i32.const 100) + (i32.const 4) + ) + ) + ) + (func $and-popcount32 (result i32) + (i32.and + (i32.popcnt + (i32.const -1) + ) + (i32.const 31) + ) + ) + (func $and-popcount32-big (result i32) + (i32.and + (i32.popcnt + (i32.const -1) + ) + (i32.const 63) + ) + ) + (func $and-popcount64 (result i64) ;; these are TODOs + (i64.and + (i64.popcnt + (i64.const -1) + ) + (i64.const 63) + ) + ) + (func $and-popcount64-big (result i64) + (i64.and + (i64.popcnt + (i64.const -1) + ) + (i64.const 127) + ) + ) + (func $and-popcount64-bigger (result i64) + (i64.and + (i64.popcnt + (i64.const -1) + ) + (i64.const 255) + ) + ) + (func $optimizeAddedConstants-filters-through-nonzero (result i32) + (i32.sub + (i32.add + (i32.shl + (i32.const -536870912) + (i32.wrap/i64 + (i64.const 0) + ) + ) + (i32.const -32768) + ) + (i32.const -1024) + ) + ) + (func $optimizeAddedConstants-filters-through-nonzero-b (result i32) + (i32.sub + (i32.add + (i32.shl + (i32.const -536870912) + (i32.wrap/i64 + (i64.const -1) + ) + ) + (i32.const -32768) + ) + (i32.const -1024) + ) + ) + (func $return-proper-value-from-shift-left-by-zero (result i32) + (if (result i32) + (i32.sub + (i32.add + (loop $label$0 (result i32) + (block $label$1 + (br_if $label$1 + (i32.shl + (i32.load + (i32.const 0) + ) + (i32.const -31904) ;; really 0 shifts + ) + ) + ) + (i32.const -62) + ) + (i32.const 38) + ) + (i32.const -2) + ) + (i32.const 1) + (i32.const 0) + ) + ) +) +(module + (import "env" "memory" (memory $0 (shared 256 256))) + (func $x + (drop + (i32.shr_s + (i32.shl + (i32.atomic.load8_u ;; can't be signed + (i32.const 100) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/optimize-instructions_optimize-level=2_ignore-implicit-traps.txt b/src/binaryen/test/passes/optimize-instructions_optimize-level=2_ignore-implicit-traps.txt new file mode 100644 index 0000000000..14c82d38e8 --- /dev/null +++ b/src/binaryen/test/passes/optimize-instructions_optimize-level=2_ignore-implicit-traps.txt @@ -0,0 +1,362 @@ +(module + (type $0 (func (param i32 i32) (result i32))) + (type $1 (func (result f64))) + (memory $0 0) + (func $conditionals (; 0 ;) (type $0) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (set_local $3 + (i32.const 0) + ) + (loop $while-in6 + (set_local $6 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $0 + (if (result i32) + (if (result i32) + (i32.rem_s + (i32.add + (i32.mul + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 2) + ) + ) + (get_local $0) + ) + (i32.const 17) + ) + (i32.const 5) + ) + (i32.eqz + (i32.rem_u + (i32.add + (i32.mul + (get_local $0) + (get_local $0) + ) + (i32.const 11) + ) + (i32.const 3) + ) + ) + (i32.const 1) + ) + (get_local $7) + (get_local $6) + ) + ) + (br_if $while-in6 + (i32.lt_s + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (get_local $4) + ) + ) + ) + (br_if $while-in + (i32.ne + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 27000) + ) + ) + ) + (return + (get_local $5) + ) + ) + (func $side-effect (; 1 ;) (type $0) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (set_local $3 + (i32.const 0) + ) + (loop $while-in6 + (set_local $6 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $0 + (if (result i32) + (i32.or + (i32.eqz + (i32.rem_s + (i32.add + (i32.mul + (tee_local $7 + (get_local $0) + ) + (get_local $0) + ) + (i32.const 17) + ) + (i32.const 5) + ) + ) + (i32.eqz + (i32.rem_u + (i32.add + (i32.mul + (get_local $0) + (get_local $0) + ) + (unreachable) + ) + (i32.const 3) + ) + ) + ) + (get_local $7) + (get_local $6) + ) + ) + (br_if $while-in6 + (i32.lt_s + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (get_local $4) + ) + ) + ) + (br_if $while-in + (i32.ne + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 27000) + ) + ) + ) + (return + (get_local $5) + ) + ) + (func $flip (; 2 ;) (type $0) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (set_local $3 + (i32.const 0) + ) + (loop $while-in6 + (set_local $6 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $0 + (if (result i32) + (if (result i32) + (i32.rem_u + (i32.add + (i32.mul + (get_local $0) + (get_local $0) + ) + (i32.const 100) + ) + (i32.const 3) + ) + (i32.eqz + (i32.rem_s + (i32.add + (i32.mul + (i32.eqz + (get_local $0) + ) + (get_local $0) + ) + (i32.const 17) + ) + (i32.const 5) + ) + ) + (i32.const 1) + ) + (get_local $7) + (get_local $6) + ) + ) + (br_if $while-in6 + (i32.lt_s + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (get_local $4) + ) + ) + ) + (br_if $while-in + (i32.ne + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 27000) + ) + ) + ) + (return + (get_local $5) + ) + ) + (func $invalidate-conditionalizeExpensiveOnBitwise (; 3 ;) (type $0) (param $0 i32) (param $1 i32) (result i32) + (if + (i32.eqz + (i32.and + (i32.lt_s + (i32.and + (i32.shr_s + (i32.shl + (i32.add + (get_local $1) + (i32.const -1) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 255) + ) + (i32.const 3) + ) + (i32.ne + (tee_local $1 + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + (return + (get_local $0) + ) + ) + (return + (get_local $1) + ) + ) + (func $invalidate-conditionalizeExpensiveOnBitwise-ok (; 4 ;) (type $0) (param $0 i32) (param $1 i32) (result i32) + (if + (i32.eqz + (if (result i32) + (tee_local $1 + (i32.const 0) + ) + (i32.lt_s + (i32.and + (i32.shr_s + (i32.shl + (i32.add + (get_local $0) + (i32.const -1) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 255) + ) + (i32.const 3) + ) + (i32.const 0) + ) + ) + (return + (get_local $0) + ) + ) + (return + (get_local $1) + ) + ) + (func $conditionalize-if-type-change (; 5 ;) (type $1) (result f64) + (local $0 i32) + (drop + (loop $label$1 (result f32) + (block $label$2 (result f32) + (drop + (block $label$3 (result f32) + (br_if $label$1 + (i32.or + (f32.gt + (br_if $label$3 + (f32.const 1) + (get_local $0) + ) + (br $label$2 + (f32.const 71) + ) + ) + (i64.eqz + (select + (i64.const 58) + (i64.const -982757) + (i64.eqz + (i64.const 0) + ) + ) + ) + ) + ) + ) + ) + (f32.const 1) + ) + ) + ) + (f64.const -nan:0xfffffffffffff) + ) +) diff --git a/src/binaryen/test/passes/optimize-instructions_optimize-level=2_ignore-implicit-traps.wast b/src/binaryen/test/passes/optimize-instructions_optimize-level=2_ignore-implicit-traps.wast new file mode 100644 index 0000000000..6e19255ed9 --- /dev/null +++ b/src/binaryen/test/passes/optimize-instructions_optimize-level=2_ignore-implicit-traps.wast @@ -0,0 +1,365 @@ +(module + (type $0 (func (param i32 i32) (result i32))) + (memory $0 0) + (func $conditionals (type $0) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (set_local $3 + (i32.const 0) + ) + (loop $while-in6 + (set_local $6 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $0 + (if (result i32) + (i32.or ;; this or is very expensive. we should compute one side, then see if we even need the other + (i32.eqz + (i32.rem_s + (i32.add + (i32.mul + (tee_local $7 ;; side effect, so we can't do this one + (i32.add + (get_local $0) + (i32.const 2) + ) + ) + (get_local $0) + ) + (i32.const 17) + ) + (i32.const 5) + ) + ) + (i32.eqz + (i32.rem_u + (i32.add + (i32.mul + (get_local $0) + (get_local $0) + ) + (i32.const 11) + ) + (i32.const 3) + ) + ) + ) + (get_local $7) + (get_local $6) + ) + ) + (br_if $while-in6 + (i32.lt_s + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (get_local $4) + ) + ) + ) + (br_if $while-in + (i32.ne + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 27000) + ) + ) + ) + (return + (get_local $5) + ) + ) + (func $side-effect (type $0) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (set_local $3 + (i32.const 0) + ) + (loop $while-in6 + (set_local $6 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $0 + (if (result i32) + (i32.or ;; this or is very expensive, but has a side effect on both sides + (i32.eqz + (i32.rem_s + (i32.add + (i32.mul + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 0) + ) + ) + (get_local $0) + ) + (i32.const 17) + ) + (i32.const 5) + ) + ) + (i32.eqz + (i32.rem_u + (i32.add + (i32.mul + (get_local $0) + (get_local $0) + ) + (unreachable) + ) + (i32.const 3) + ) + ) + ) + (get_local $7) + (get_local $6) + ) + ) + (br_if $while-in6 + (i32.lt_s + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (get_local $4) + ) + ) + ) + (br_if $while-in + (i32.ne + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 27000) + ) + ) + ) + (return + (get_local $5) + ) + ) + (func $flip (type $0) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (set_local $3 + (i32.const 0) + ) + (loop $while-in6 + (set_local $6 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $0 + (if (result i32) + (i32.or ;; this or is very expensive, and the first side has no side effect + (i32.eqz + (i32.rem_s + (i32.add + (i32.mul + (i32.eqz + (i32.add + (get_local $0) + (i32.const 0) + ) + ) + (get_local $0) + ) + (i32.const 17) + ) + (i32.const 5) + ) + ) + (i32.eqz + (i32.rem_u + (i32.add + (i32.mul + (get_local $0) + (get_local $0) + ) + (i32.const 100) + ) + (i32.const 3) + ) + ) + ) + (get_local $7) + (get_local $6) + ) + ) + (br_if $while-in6 + (i32.lt_s + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (get_local $4) + ) + ) + ) + (br_if $while-in + (i32.ne + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 27000) + ) + ) + ) + (return + (get_local $5) + ) + ) + (func $invalidate-conditionalizeExpensiveOnBitwise (param $0 i32) (param $1 i32) (result i32) + (if + (i32.eqz + (i32.and + (i32.lt_s + (i32.and + (i32.shr_s + (i32.shl + (i32.add + (get_local $1) ;; conflict with tee + (i32.const -1) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 255) + ) + (i32.const 3) + ) + (i32.ne + (tee_local $1 + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + (return (get_local $0)) + ) + (return (get_local $1)) + ) + (func $invalidate-conditionalizeExpensiveOnBitwise-ok (param $0 i32) (param $1 i32) (result i32) + (if + (i32.eqz + (i32.and + (i32.lt_s + (i32.and + (i32.shr_s + (i32.shl + (i32.add + (get_local $0) ;; no conflict + (i32.const -1) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 255) + ) + (i32.const 3) + ) + (i32.ne + (tee_local $1 + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + (return (get_local $0)) + ) + (return (get_local $1)) + ) + + (func $conditionalize-if-type-change (result f64) + (local $0 i32) + (drop + (loop $label$1 (result f32) + (block $label$2 (result f32) + (drop + (block $label$3 (result f32) + (br_if $label$1 + (i32.or ;; this turns into an if, but then the if might not be unreachable + (f32.gt + (br_if $label$3 + (f32.const 1) + (get_local $0) + ) + (br $label$2 + (f32.const 71) + ) + ) + (i64.eqz + (select + (i64.const 58) + (i64.const -982757) + (i64.eqz + (i64.const 0) + ) + ) + ) + ) + ) + ) + ) + (f32.const 1) + ) + ) + ) + (f64.const -nan:0xfffffffffffff) + ) +) + diff --git a/src/binaryen/test/passes/pick-load-signs.txt b/src/binaryen/test/passes/pick-load-signs.txt new file mode 100644 index 0000000000..24b9558571 --- /dev/null +++ b/src/binaryen/test/passes/pick-load-signs.txt @@ -0,0 +1,279 @@ +(module + (type $0 (func)) + (type $1 (func (result i32))) + (memory $0 0) + (func $a (; 0 ;) (type $0) + (local $y i32) + (set_local $y + (i32.load8_u + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + ) + (func $b (; 1 ;) (type $0) + (local $y i32) + (set_local $y + (i32.load16_u + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 65535) + ) + ) + ) + (func $c (; 2 ;) (type $0) + (local $y i32) + (set_local $y + (i32.load8_u + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + ) + (func $d (; 3 ;) (type $0) + (local $y i32) + (set_local $y + (i32.load16_u + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 65535) + ) + ) + ) + (func $one-of-each (; 4 ;) (type $0) + (local $y i32) + (set_local $y + (i32.load8_s + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $y) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $more-of-one (; 5 ;) (type $0) + (local $y i32) + (set_local $y + (i32.load8_s + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $y) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $many-more-of-one (; 6 ;) (type $0) + (local $y i32) + (set_local $y + (i32.load8_u + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $y) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $a-sign (; 7 ;) (type $0) + (local $y i32) + (set_local $y + (i32.load8_s + (i32.const 1024) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $y) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $multivar (; 8 ;) (type $0) + (local $x i32) + (local $y i32) + (set_local $x + (i32.load8_u + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $x) + (i32.const 255) + ) + ) + (set_local $y + (i32.load8_s + (i32.const 1024) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $y) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $corners (; 9 ;) (type $0) + (local $y i32) + (drop + (i32.load8_s + (i32.const 1024) + ) + ) + (drop + (i32.load8_u + (i32.const 1024) + ) + ) + (set_local $y + (i32.const 1024) + ) + ) + (func $wrong-size (; 10 ;) (type $0) + (local $y i32) + (set_local $y + (i32.load8_s + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 65535) + ) + ) + ) + (func $wrong-size_s (; 11 ;) (type $0) + (local $y i32) + (set_local $y + (i32.load8_u + (i32.const 1024) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $y) + (i32.const 16) + ) + (i32.const 16) + ) + ) + ) + (func $non-sign-or-unsigned-use (; 12 ;) (type $0) + (local $y i32) + (set_local $y + (i32.load8_s + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + (drop + (get_local $y) + ) + ) + (func $toplevel-load (; 13 ;) (type $1) (result i32) + (i32.load8_s + (i32.const 1024) + ) + ) + (func $tees (; 14 ;) (type $0) + (local $y i32) + (drop + (tee_local $y + (i32.load8_s + (i32.const 1024) + ) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/pick-load-signs.wast b/src/binaryen/test/passes/pick-load-signs.wast new file mode 100644 index 0000000000..33f814926b --- /dev/null +++ b/src/binaryen/test/passes/pick-load-signs.wast @@ -0,0 +1,276 @@ +(module + (func $a ;; load 8s, but use is 8u, so load should be signed + (local $y i32) + (set_local $y + (i32.load8_s + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + ) + (func $b ;; load 16s, but use is 16u, so load should be signed + (local $y i32) + (set_local $y + (i32.load16_s + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 65535) + ) + ) + ) + (func $c ;; load 8u, keep + (local $y i32) + (set_local $y + (i32.load8_u + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + ) + (func $d ;; load 16u, keep + (local $y i32) + (set_local $y + (i32.load16_u + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 65535) + ) + ) + ) + (func $one-of-each ;; prefer the signed, potential code removal is bigger + (local $y i32) + (set_local $y + (i32.load8_s + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $y) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $more-of-one ;; prefer the signed even if 2x more unsigned + (local $y i32) + (set_local $y + (i32.load8_s + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $y) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $many-more-of-one ;; but not 3x + (local $y i32) + (set_local $y + (i32.load8_s + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $y) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $a-sign ;; load 8s, use is s, so keep + (local $y i32) + (set_local $y + (i32.load8_s + (i32.const 1024) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $y) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $multivar + (local $x i32) + (local $y i32) + (set_local $x + (i32.load8_s + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $x) + (i32.const 255) + ) + ) + (set_local $y + (i32.load8_s + (i32.const 1024) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $y) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (func $corners + (local $y i32) + (drop + (i32.load8_s ;; not sent into a set_local + (i32.const 1024) + ) + ) + (drop + (i32.load8_u ;; not sent into a set_local + (i32.const 1024) + ) + ) + (set_local $y + (i32.const 1024) ;; not a load + ) + ) + (func $wrong-size ;; load 8s, but use is 16 + (local $y i32) + (set_local $y + (i32.load8_s + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 65535) + ) + ) + ) + (func $wrong-size_s ;; load 8s, but use is 16 + (local $y i32) + (set_local $y + (i32.load8_u + (i32.const 1024) + ) + ) + (drop + (i32.shr_s + (i32.shl + (get_local $y) + (i32.const 16) + ) + (i32.const 16) + ) + ) + ) + (func $non-sign-or-unsigned-use + (local $y i32) + (set_local $y + (i32.load8_s + (i32.const 1024) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + (drop + (get_local $y) + ) + ) + (func $toplevel-load (result i32) + (i32.load8_s + (i32.const 1024) + ) + ) + (func $tees + (local $y i32) + (drop ;; a "use", so we can't alter the value + (tee_local $y + (i32.load8_s + (i32.const 1024) + ) + ) + ) + (drop + (i32.and + (get_local $y) + (i32.const 255) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/post-emscripten.txt b/src/binaryen/test/passes/post-emscripten.txt new file mode 100644 index 0000000000..a1bac030aa --- /dev/null +++ b/src/binaryen/test/passes/post-emscripten.txt @@ -0,0 +1,182 @@ +(module + (type $0 (func (param i32))) + (type $FUNCSIG$ddd (func (param f64 f64) (result f64))) + (type $2 (func (param i32) (result i32))) + (type $3 (func)) + (import "global.Math" "pow" (func $Math_pow (param f64 f64) (result f64))) + (memory $0 256 256) + (export "load-off-2" (func $load-off-2)) + (func $b0 (; 1 ;) (type $0) (param $x i32) + (drop + (i32.load offset=1 + (get_local $x) + ) + ) + (drop + (i32.load offset=8 + (get_local $x) + ) + ) + (drop + (i32.load offset=1023 + (get_local $x) + ) + ) + (drop + (i32.load + (i32.add + (get_local $x) + (i32.const 1024) + ) + ) + ) + (drop + (i32.load + (i32.add + (get_local $x) + (i32.const 2048) + ) + ) + ) + (drop + (i32.load offset=4 + (get_local $x) + ) + ) + ) + (func $load-off-2 (; 2 ;) (type $2) (param $0 i32) (result i32) + (i32.store + (i32.const 6) + (get_local $0) + ) + (i32.store + (i32.const 6) + (get_local $0) + ) + (i32.store offset=7 + (get_local $0) + (get_local $0) + ) + (i32.store offset=9 + (get_local $0) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (i32.const -11) + (get_local $0) + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (get_local $0) + (i32.const -13) + ) + (get_local $0) + ) + (i32.store + (i32.const 4) + (get_local $0) + ) + (i32.store + (i32.const 0) + (get_local $0) + ) + (i32.store + (i32.const 25) + (get_local $0) + ) + (i32.store + (i32.const -23) + (get_local $0) + ) + (drop + (i32.load + (i32.const 8) + ) + ) + (drop + (i32.load + (i32.const 8) + ) + ) + (drop + (i32.load offset=8 + (get_local $0) + ) + ) + (drop + (i32.load + (i32.const 10) + ) + ) + (i32.load offset=12 + (get_local $0) + ) + ) + (func $pow2 (; 3 ;) (type $3) + (local $x f64) + (local $y f64) + (local $2 f64) + (local $3 f64) + (drop + (f64.mul + (tee_local $2 + (f64.const 1) + ) + (get_local $2) + ) + ) + (drop + (call $Math_pow + (f64.const 1) + (f64.const 3) + ) + ) + (drop + (call $Math_pow + (f64.const 2) + (f64.const 1) + ) + ) + (set_local $x + (f64.const 5) + ) + (drop + (f64.mul + (get_local $x) + (get_local $x) + ) + ) + (drop + (f64.mul + (tee_local $y + (f64.const 7) + ) + (get_local $y) + ) + ) + (drop + (f64.mul + (tee_local $3 + (f64.const 8) + ) + (get_local $3) + ) + ) + ) + (func $pow.2 (; 4 ;) (type $3) + (drop + (f64.sqrt + (f64.const 1) + ) + ) + (drop + (call $Math_pow + (f64.const 1) + (f64.const 0.51) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/post-emscripten.wast b/src/binaryen/test/passes/post-emscripten.wast new file mode 100644 index 0000000000..5c255ffca4 --- /dev/null +++ b/src/binaryen/test/passes/post-emscripten.wast @@ -0,0 +1,211 @@ +(module + (memory 256 256) + (type $0 (func (param i32))) + (import "global.Math" "pow" (func $Math_pow (param f64 f64) (result f64))) + (func $b0 (type $0) (param $x i32) + (drop + (i32.load + (i32.add + (get_local $x) + (i32.const 1) + ) + ) + ) + (drop + (i32.load + (i32.add + (get_local $x) + (i32.const 8) + ) + ) + ) + (drop + (i32.load + (i32.add + (get_local $x) + (i32.const 1023) + ) + ) + ) + (drop + (i32.load + (i32.add + (get_local $x) + (i32.const 1024) + ) + ) + ) + (drop + (i32.load + (i32.add + (get_local $x) + (i32.const 2048) + ) + ) + ) + (drop + (i32.load + (i32.add + (i32.const 4) + (get_local $x) + ) + ) + ) + ) + (func $load-off-2 "load-off-2" (param $0 i32) (result i32) + (i32.store offset=2 + (i32.add + (i32.const 1) + (i32.const 3) + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (i32.const 3) + (i32.const 1) + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (get_local $0) + (i32.const 5) + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (i32.const 7) + (get_local $0) + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (i32.const -11) ;; do not fold this! + (get_local $0) + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (get_local $0) + (i32.const -13) ;; do not fold this! + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (i32.const -15) + (i32.const 17) + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.add + (i32.const -21) + (i32.const 19) + ) + (get_local $0) + ) + (i32.store offset=2 + (i32.const 23) + (get_local $0) + ) + (i32.store offset=2 + (i32.const -25) + (get_local $0) + ) + (drop + (i32.load offset=2 + (i32.add + (i32.const 2) + (i32.const 4) + ) + ) + ) + (drop + (i32.load offset=2 + (i32.add + (i32.const 4) + (i32.const 2) + ) + ) + ) + (drop + (i32.load offset=2 + (i32.add + (get_local $0) + (i32.const 6) + ) + ) + ) + (drop + (i32.load offset=2 + (i32.const 8) + ) + ) + (i32.load offset=2 + (i32.add + (i32.const 10) + (get_local $0) + ) + ) + ) + (func $pow2 + (local $x f64) + (local $y f64) + (drop + (call $Math_pow + (f64.const 1) + (f64.const 2) + ) + ) + (drop + (call $Math_pow + (f64.const 1) + (f64.const 3) + ) + ) + (drop + (call $Math_pow + (f64.const 2) + (f64.const 1) + ) + ) + (set_local $x (f64.const 5)) + (drop + (call $Math_pow + (get_local $x) + (f64.const 2) + ) + ) + (drop + (call $Math_pow + (tee_local $y (f64.const 7)) + (f64.const 2) + ) + ) + (drop + (call $Math_pow + (f64.const 8) + (f64.const 2) + ) + ) + ) + (func $pow.2 + (drop + (call $Math_pow + (f64.const 1) + (f64.const 0.5) + ) + ) + (drop + (call $Math_pow + (f64.const 1) + (f64.const 0.51) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/precompute-propagate.txt b/src/binaryen/test/passes/precompute-propagate.txt new file mode 100644 index 0000000000..4477b22947 --- /dev/null +++ b/src/binaryen/test/passes/precompute-propagate.txt @@ -0,0 +1,214 @@ +(module + (type $0 (func (param i32))) + (type $1 (func (param i32) (result i32))) + (memory $0 0) + (func $basic (; 0 ;) (type $0) (param $p i32) + (local $x i32) + (set_local $x + (i32.const 10) + ) + (call $basic + (i32.const 20) + ) + ) + (func $split (; 1 ;) (type $0) (param $p i32) + (local $x i32) + (if + (i32.const 1) + (set_local $x + (i32.const 10) + ) + ) + (call $basic + (i32.add + (get_local $x) + (get_local $x) + ) + ) + ) + (func $split-but-join (; 2 ;) (type $0) (param $p i32) + (local $x i32) + (if + (i32.const 1) + (set_local $x + (i32.const 10) + ) + (set_local $x + (i32.const 10) + ) + ) + (call $basic + (i32.const 20) + ) + ) + (func $split-but-join-different (; 3 ;) (type $0) (param $p i32) + (local $x i32) + (if + (i32.const 1) + (set_local $x + (i32.const 10) + ) + (set_local $x + (i32.const 20) + ) + ) + (call $basic + (i32.add + (get_local $x) + (get_local $x) + ) + ) + ) + (func $split-but-join-different-b (; 4 ;) (type $0) (param $p i32) + (local $x i32) + (if + (i32.const 1) + (set_local $x + (i32.const 10) + ) + (set_local $x + (get_local $p) + ) + ) + (call $basic + (i32.add + (get_local $x) + (get_local $x) + ) + ) + ) + (func $split-but-join-init0 (; 5 ;) (type $0) (param $p i32) + (local $x i32) + (if + (i32.const 1) + (set_local $x + (i32.const 0) + ) + ) + (call $basic + (i32.const 0) + ) + ) + (func $later (; 6 ;) (type $0) (param $p i32) + (local $x i32) + (set_local $x + (i32.const 10) + ) + (call $basic + (i32.const 20) + ) + (set_local $x + (i32.const 22) + ) + (call $basic + (i32.const 44) + ) + (set_local $x + (i32.const 39) + ) + ) + (func $later2 (; 7 ;) (type $1) (param $p i32) (result i32) + (local $x i32) + (set_local $x + (i32.const 10) + ) + (set_local $x + (i32.const 20) + ) + (i32.const 20) + ) + (func $two-ways-but-identical (; 8 ;) (type $1) (param $p i32) (result i32) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 10) + ) + (if + (i32.const 1) + (set_local $y + (i32.const 11) + ) + (set_local $y + (i32.const 11) + ) + ) + (set_local $y + (i32.const 21) + ) + (i32.const 21) + ) + (func $two-ways-but-almost-identical (; 9 ;) (type $1) (param $p i32) (result i32) + (local $x i32) + (local $y i32) + (set_local $x + (i32.const 10) + ) + (if + (i32.const 1) + (set_local $y + (i32.const 12) + ) + (set_local $y + (i32.const 11) + ) + ) + (set_local $y + (i32.add + (i32.const 10) + (get_local $y) + ) + ) + (get_local $y) + ) + (func $deadloop (; 10 ;) (type $1) (param $p i32) (result i32) + (local $x i32) + (local $y i32) + (loop $loop + (set_local $x + (i32.const 0) + ) + (set_local $y + (i32.const 0) + ) + (br $loop) + ) + ) + (func $deadloop2 (; 11 ;) (type $0) (param $p i32) + (local $x i32) + (local $y i32) + (loop $loop + (set_local $x + (i32.const 0) + ) + (set_local $y + (i32.const 0) + ) + (call $deadloop2 + (i32.const 0) + ) + (call $deadloop2 + (i32.const 0) + ) + (br $loop) + ) + ) + (func $deadloop3 (; 12 ;) (type $0) (param $p i32) + (local $x i32) + (local $y i32) + (loop $loop + (set_local $x + (i32.const 0) + ) + (set_local $y + (i32.const 0) + ) + (call $deadloop2 + (i32.const 0) + ) + (call $deadloop2 + (i32.const 0) + ) + (br $loop) + ) + ) +) diff --git a/src/binaryen/test/passes/precompute-propagate.wast b/src/binaryen/test/passes/precompute-propagate.wast new file mode 100644 index 0000000000..af1a21ba26 --- /dev/null +++ b/src/binaryen/test/passes/precompute-propagate.wast @@ -0,0 +1,113 @@ +(module + (func $basic (param $p i32) + (local $x i32) + (set_local $x (i32.const 10)) + (call $basic (i32.add (get_local $x) (get_local $x))) + ) + (func $split (param $p i32) + (local $x i32) + (if (i32.const 1) + (set_local $x (i32.const 10)) + ) + (call $basic (i32.add (get_local $x) (get_local $x))) + ) + (func $split-but-join (param $p i32) + (local $x i32) + (if (i32.const 1) + (set_local $x (i32.const 10)) + (set_local $x (i32.const 10)) + ) + (call $basic (i32.add (get_local $x) (get_local $x))) + ) + (func $split-but-join-different (param $p i32) + (local $x i32) + (if (i32.const 1) + (set_local $x (i32.const 10)) + (set_local $x (i32.const 20)) + ) + (call $basic (i32.add (get_local $x) (get_local $x))) + ) + (func $split-but-join-different-b (param $p i32) + (local $x i32) + (if (i32.const 1) + (set_local $x (i32.const 10)) + (set_local $x (get_local $p)) + ) + (call $basic (i32.add (get_local $x) (get_local $x))) + ) + (func $split-but-join-init0 (param $p i32) + (local $x i32) + (if (i32.const 1) + (set_local $x (i32.const 0)) + ) + (call $basic (i32.add (get_local $x) (get_local $x))) + ) + (func $later (param $p i32) + (local $x i32) + (set_local $x (i32.const 10)) + (call $basic (i32.add (get_local $x) (get_local $x))) + (set_local $x (i32.const 22)) + (call $basic (i32.add (get_local $x) (get_local $x))) + (set_local $x (i32.const 39)) + ) + (func $later2 (param $p i32) (result i32) + (local $x i32) + (set_local $x (i32.const 10)) + (set_local $x (i32.add (get_local $x) (get_local $x))) + (get_local $x) + ) + (func $two-ways-but-identical (param $p i32) (result i32) + (local $x i32) + (local $y i32) + (set_local $x (i32.const 10)) + (if (i32.const 1) + (set_local $y (i32.const 11)) + (set_local $y (i32.add (get_local $x) (i32.const 1))) + ) + (set_local $y (i32.add (get_local $x) (get_local $y))) + (get_local $y) + ) + (func $two-ways-but-almost-identical (param $p i32) (result i32) + (local $x i32) + (local $y i32) + (set_local $x (i32.const 10)) + (if (i32.const 1) + (set_local $y (i32.const 12)) ;; 12, not 11... + (set_local $y (i32.add (get_local $x) (i32.const 1))) + ) + (set_local $y (i32.add (get_local $x) (get_local $y))) + (get_local $y) + ) + (func $deadloop (param $p i32) (result i32) + (local $x i32) + (local $y i32) + (loop $loop ;; we look like we depend on the other, but we don't actually + (set_local $x (if (result i32) (i32.const 1) (i32.const 0) (get_local $y))) + (set_local $y (if (result i32) (i32.const 1) (i32.const 0) (get_local $x))) + (br $loop) + ) + ) + (func $deadloop2 (param $p i32) + (local $x i32) + (local $y i32) + (loop $loop ;; we look like we depend on the other, but we don't actually + (set_local $x (if (result i32) (i32.const 1) (i32.const 0) (get_local $y))) + (set_local $y (if (result i32) (i32.const 1) (i32.const 0) (get_local $x))) + (call $deadloop2 (get_local $x)) + (call $deadloop2 (get_local $y)) + (br $loop) + ) + ) + (func $deadloop3 (param $p i32) + (local $x i32) + (local $y i32) + (loop $loop ;; we look like we depend on the other, but we don't actually + (set_local $x (if (result i32) (i32.const 1) (i32.const 0) (get_local $x))) + (set_local $y (if (result i32) (i32.const 1) (i32.const 0) (get_local $y))) + (call $deadloop2 (get_local $x)) + (call $deadloop2 (get_local $y)) + (br $loop) + ) + ) +) + diff --git a/src/binaryen/test/passes/precompute.txt b/src/binaryen/test/passes/precompute.txt new file mode 100644 index 0000000000..bb045f8531 --- /dev/null +++ b/src/binaryen/test/passes/precompute.txt @@ -0,0 +1,190 @@ +(module + (type $0 (func (param i32))) + (type $1 (func (result i32))) + (type $2 (func)) + (type $3 (func (result f64))) + (memory $0 0) + (func $x (; 0 ;) (type $0) (param $x i32) + (call $x + (i32.const 2300) + ) + (nop) + (drop + (i32.add + (i32.const 1) + (get_local $x) + ) + ) + (nop) + (nop) + (nop) + (loop $in + (br $in) + ) + (nop) + (block $c + (nop) + (call $x + (i32.const 4) + ) + (br $c) + (br $c) + ) + (drop + (block $val (result i32) + (nop) + (call $x + (i32.const 4) + ) + (br $val + (i32.const 101) + ) + (br $val + (i32.const 102) + ) + ) + ) + (nop) + (drop + (block $d0 (result i32) + (call $x + (i32.const 5) + ) + (nop) + (i32.const 1) + ) + ) + (drop + (block $d2 (result i32) + (call $x + (i32.const 6) + ) + (nop) + (i32.const 1) + ) + ) + (drop + (block $d4 (result i32) + (call $x + (i32.const 7) + ) + (nop) + (i32.const 2) + ) + ) + (call $x + (i32.const 2) + ) + (call $x + (i32.const 1) + ) + (call $x + (i32.const 0) + ) + (call $x + (i32.const 0) + ) + ) + (func $ret (; 1 ;) (type $1) (result i32) + (if + (call $ret) + (return + (i32.const 0) + ) + ) + (if + (call $ret) + (return + (i32.const 1) + ) + ) + (i32.const 1) + ) + (func $noret (; 2 ;) (type $2) + (if + (call $ret) + (return) + ) + ) + (func $refinalize-br-condition-unreachable (; 3 ;) (type $2) + (block $label$1 + (drop + (br_if $label$1 + (unreachable) + ) + ) + ) + ) + (func $br_if-condition-is-block-i32-but-unreachable-so-refinalize-tricky (; 4 ;) (type $2) + (drop + (block $label$1 (result i32) + (drop + (br_if $label$1 + (i32.const 100) + (block $label$3 + (unreachable) + ) + ) + ) + (i32.const 0) + ) + ) + ) + (func $reuse-br-value (; 5 ;) (type $3) (result f64) + (block $label$0 (result f64) + (i32.store8 + (i32.const 1919623207) + (if (result i32) + (i32.const 1) + (block $label$2 + (drop + (i64.and + (i64.trunc_u/f32 + (f32.const 70847791997969805621592064) + ) + (i64.const 729618461987467893) + ) + ) + (br $label$0 + (f64.const 6.134856208230095e-154) + ) + ) + (i32.load offset=3 align=2 + (i32.const 169901344) + ) + ) + ) + (f64.const 4776014875438170098655851e156) + ) + ) + (func $refinalize-two-breaks-one-unreachable (; 6 ;) (type $2) + (drop + (block $label$0 (result i64) + (br_if $label$0 + (select + (i64.const 1) + (block $block + (set_global $global$0 + (i32.const 1) + ) + (br $label$0 + (i64.const -22) + ) + ) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + ) + (func $one-break-value-and-it-is-unreachable (; 7 ;) (type $3) (result f64) + (local $var$0 i32) + (block $label$6 (result f64) + (br_if $label$6 + (unreachable) + (i32.const 0) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/precompute.wast b/src/binaryen/test/passes/precompute.wast new file mode 100644 index 0000000000..b339a55d44 --- /dev/null +++ b/src/binaryen/test/passes/precompute.wast @@ -0,0 +1,283 @@ +(module + (memory 0) + (type $0 (func (param i32))) + (func $x (type $0) (param $x i32) + (call $x + (i32.add + (i32.const 100) + (i32.const 2200) + ) + ) + (drop + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + (drop + (i32.add + (i32.const 1) + (get_local $x) + ) + ) + (drop + (i32.add + (i32.const 1) + (i32.add + (i32.const 2) + (i32.const 3) + ) + ) + ) + (drop + (i32.sub + (i32.const 1) + (i32.const 2) + ) + ) + (drop + (i32.sub + (i32.add + (i32.const 0) + (i32.const 4) + ) + (i32.const 1) + ) + ) + (loop $in + (br $in) + ) + (block $b + (br_if $b (i32.const 0)) + (br_if $b (i32.const 1)) + (call $x (i32.const 4)) + ) + (block $c + (br_if $c (i32.const 0)) + (call $x (i32.const 4)) + (br_if $c (i32.const 1)) + (br $c) + ) + (drop + (block $val (result i32) + (drop (br_if $val (i32.const 100) (i32.const 0))) + (call $x (i32.const 4)) + (drop (br_if $val (i32.const 101) (i32.const 1))) + (br $val (i32.const 102)) + ) + ) + (block $d + (block $e + (br_if $d (br $e)) + (call $x (i32.const 4)) + (br_if $e (br $d)) + ) + ) + (drop + (block $d (result i32) + (call $x (i32.const 5)) + (block $e + (drop (br_if $d (br $e) (i32.const 1))) + (drop (br_if $d (br $e) (i32.const 0))) + (drop (br_if $d (i32.const 1) (br $e))) + (drop (br_if $d (i32.const 0) (br $e))) + (unreachable) + ) + (i32.const 1) + ) + ) + (drop + (block $d (result i32) + (call $x (i32.const 6)) + (block $e + (drop (br_if $d (br $e) (i32.const 0))) + (drop (br_if $d (i32.const 1) (br $e))) + (drop (br_if $d (i32.const 0) (br $e))) + (unreachable) + ) + (i32.const 1) + ) + ) + (drop + (block $d (result i32) + (call $x (i32.const 7)) + (block $e + (drop (br_if $d (i32.const 1) (br $e))) + ) + (i32.const 2) + ) + ) + (call $x + (block $out (result i32) + (block $waka1 + (block $waka2 + (block $waka3 + (br_table $waka1 $waka2 $waka3 + (i32.const 0) + ) + ) + (br $out (i32.const 0)) + ) + (br $out (i32.const 1)) + ) + (br $out (i32.const 2)) + ) + ) + (call $x + (block $out (result i32) + (block $waka1 + (block $waka2 + (block $waka3 + (br_table $waka1 $waka2 $waka3 + (i32.const 1) + ) + ) + (br $out (i32.const 0)) + ) + (br $out (i32.const 1)) + ) + (br $out (i32.const 2)) + ) + ) + (call $x + (block $out (result i32) + (block $waka1 + (block $waka2 + (block $waka3 + (br_table $waka1 $waka2 $waka3 + (i32.const 2) + ) + ) + (br $out (i32.const 0)) + ) + (br $out (i32.const 1)) + ) + (br $out (i32.const 2)) + ) + ) + (call $x + (block $out (result i32) + (block $waka1 + (block $waka2 + (block $waka3 + (br_table $waka1 $waka2 $waka3 + (i32.const 3) + ) + ) + (br $out (i32.const 0)) + ) + (br $out (i32.const 1)) + ) + (br $out (i32.const 2)) + ) + ) + ) + (func $ret (result i32) + (if (call $ret) + (return (i32.const 0)) + ) + (if (call $ret) + (return (return (i32.const 1))) + ) + (i32.const 1) + ) + (func $noret + (if (call $ret) + (return) + ) + ) + (func $refinalize-br-condition-unreachable + (block $label$1 + (drop + (br_if $label$1 + (unreachable) + ) + ) + ) + ) + (func $br_if-condition-is-block-i32-but-unreachable-so-refinalize-tricky + (drop + (block $label$1 (result i32) + (drop + (br_if $label$1 + (i32.const 100) + (block $label$3 (result i32) + (unreachable) + ) + ) + ) + (i32.const 0) + ) + ) + ) + (func $reuse-br-value (result f64) + (block $label$0 (result f64) + (i32.store8 + (i32.const 1919623207) + (if (result i32) + (i32.const 1) + (block $label$2 (result i32) + (drop + (i64.and + (i64.trunc_u/f32 + (f32.const 70847791997969805621592064) + ) + (i64.const 729618461987467893) + ) + ) + (br_if $label$2 + (i32.const 2049535349) + (f32.eq + (f32.demote/f64 + (f64.mul + (br_if $label$0 ;; this br is optimized, and br *and* values reused + (f64.const 6.134856208230095e-154) + (i32.const 690910817) + ) + (f64.const 1.515470884183969e-152) + ) + ) + (f32.const 66524025679377434935296) + ) + ) + ) + (i32.load offset=3 align=2 + (i32.const 169901344) + ) + ) + ) + (f64.const 4776014875438170098655851e156) + ) + ) + (func $refinalize-two-breaks-one-unreachable + (drop + (block $label$0 (result i64) + (br_if $label$0 + (select + (i64.const 1) + (block (result i64) + (set_global $global$0 + (i32.const 1) + ) + (br_if $label$0 + (i64.const -22) + (i32.const -1) + ) + ) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + ) + (func $one-break-value-and-it-is-unreachable (result f64) + (local $var$0 i32) + (block $label$6 (result f64) + (br_if $label$6 + (unreachable) + (i32.const 0) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/precompute_coalesce-locals_vacuum.txt b/src/binaryen/test/passes/precompute_coalesce-locals_vacuum.txt new file mode 100644 index 0000000000..9113fd97e2 --- /dev/null +++ b/src/binaryen/test/passes/precompute_coalesce-locals_vacuum.txt @@ -0,0 +1,9 @@ +(module + (type $0 (func (param i32) (result i32))) + (memory $0 0) + (func $nested-br_if-value (; 0 ;) (type $0) (param $0 i32) (result i32) + (loop $label$0 + (br $label$0) + ) + ) +) diff --git a/src/binaryen/test/passes/precompute_coalesce-locals_vacuum.wast b/src/binaryen/test/passes/precompute_coalesce-locals_vacuum.wast new file mode 100644 index 0000000000..3364906fda --- /dev/null +++ b/src/binaryen/test/passes/precompute_coalesce-locals_vacuum.wast @@ -0,0 +1,20 @@ +(module + (func $nested-br_if-value (param $var$0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (loop $label$0 (result i32) + (drop + (i32.const 2) + ) + (block (result i32) + (set_local $2 + (i32.const 4) + ) + (br_if $label$0 ;; precomputing this into a br must change the type + (i32.const 1) + ) + (get_local $2) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/print-call-graph.txt b/src/binaryen/test/passes/print-call-graph.txt new file mode 100644 index 0000000000..50c67d9d78 --- /dev/null +++ b/src/binaryen/test/passes/print-call-graph.txt @@ -0,0 +1,1497 @@ +digraph call { + rankdir = LR; + subgraph cluster_key { + node [shape=box, fontname=courier, fontsize=10]; + edge [fontname=courier, fontsize=10]; + label = "Key"; + "Import" [style="filled", fillcolor="turquoise"]; + "Export" [style="filled", fillcolor="gray"]; + "Indirect Target" [style="filled, rounded", fillcolor="white"]; + "A" -> "B" [style="filled, rounded", label = "Direct Call"]; + } + + node [shape=box, fontname=courier, fontsize=10]; + "$stackAlloc" [style="filled", fillcolor="white"]; + "$stackSave" [style="filled", fillcolor="white"]; + "$stackRestore" [style="filled", fillcolor="white"]; + "$establishStackSpace" [style="filled", fillcolor="white"]; + "$setThrew" [style="filled", fillcolor="white"]; + "$setTempRet0" [style="filled", fillcolor="white"]; + "$getTempRet0" [style="filled", fillcolor="white"]; + "$_malloc" [style="filled", fillcolor="white"]; + "$_free" [style="filled", fillcolor="white"]; + "$_main" [style="filled", fillcolor="white"]; + "$___stdio_close" [style="filled", fillcolor="white"]; + "$___stdio_write" [style="filled", fillcolor="white"]; + "$___stdio_seek" [style="filled", fillcolor="white"]; + "$___syscall_ret" [style="filled", fillcolor="white"]; + "$___errno_location" [style="filled", fillcolor="white"]; + "$_cleanup_387" [style="filled", fillcolor="white"]; + "$___stdout_write" [style="filled", fillcolor="white"]; + "$_fflush" [style="filled", fillcolor="white"]; + "$___fflush_unlocked" [style="filled", fillcolor="white"]; + "$__Znwj" [style="filled", fillcolor="white"]; + "$__ZSt15get_new_handlerv" [style="filled", fillcolor="white"]; + "$runPostSets" [style="filled", fillcolor="white"]; + "$_memset" [style="filled", fillcolor="white"]; + "$_memcpy" [style="filled", fillcolor="white"]; + "$_pthread_self" [style="filled", fillcolor="white"]; + "$dynCall_ii" [style="filled", fillcolor="white"]; + "$dynCall_iiii" [style="filled", fillcolor="white"]; + "$dynCall_vi" [style="filled", fillcolor="white"]; + "$dynCall_v" [style="filled", fillcolor="white"]; + "$b0" [style="filled", fillcolor="white"]; + "$b1" [style="filled", fillcolor="white"]; + "$b2" [style="filled", fillcolor="white"]; + "$b3" [style="filled", fillcolor="white"]; + "$abort" [style="filled", fillcolor="turquoise"]; + "$_pthread_cleanup_pop" [style="filled", fillcolor="turquoise"]; + "$___lock" [style="filled", fillcolor="turquoise"]; + "$___syscall6" [style="filled", fillcolor="turquoise"]; + "$_pthread_cleanup_push" [style="filled", fillcolor="turquoise"]; + "$___syscall140" [style="filled", fillcolor="turquoise"]; + "$_emscripten_memcpy_big" [style="filled", fillcolor="turquoise"]; + "$___syscall54" [style="filled", fillcolor="turquoise"]; + "$___unlock" [style="filled", fillcolor="turquoise"]; + "$___syscall146" [style="filled", fillcolor="turquoise"]; + "$_fflush" [style="filled", fillcolor="gray"]; + "$_main" [style="filled", fillcolor="gray"]; + "$_pthread_self" [style="filled", fillcolor="gray"]; + "$_memset" [style="filled", fillcolor="gray"]; + "$_malloc" [style="filled", fillcolor="gray"]; + "$_memcpy" [style="filled", fillcolor="gray"]; + "$_free" [style="filled", fillcolor="gray"]; + "$___errno_location" [style="filled", fillcolor="gray"]; + "$runPostSets" [style="filled", fillcolor="gray"]; + "$stackAlloc" [style="filled", fillcolor="gray"]; + "$stackSave" [style="filled", fillcolor="gray"]; + "$stackRestore" [style="filled", fillcolor="gray"]; + "$establishStackSpace" [style="filled", fillcolor="gray"]; + "$setThrew" [style="filled", fillcolor="gray"]; + "$setTempRet0" [style="filled", fillcolor="gray"]; + "$getTempRet0" [style="filled", fillcolor="gray"]; + "$dynCall_ii" [style="filled", fillcolor="gray"]; + "$dynCall_iiii" [style="filled", fillcolor="gray"]; + "$dynCall_vi" [style="filled", fillcolor="gray"]; + "$dynCall_v" [style="filled", fillcolor="gray"]; + "$_main" -> "$__Znwj"; // call + "$___stdio_close" -> "$___syscall6"; // callImport + "$___stdio_close" -> "$___syscall_ret"; // call + "$___stdio_write" -> "$_pthread_cleanup_push"; // callImport + "$___stdio_write" -> "$___syscall146"; // callImport + "$___stdio_write" -> "$___syscall_ret"; // call + "$___stdio_write" -> "$_pthread_cleanup_pop"; // callImport + "$___stdio_seek" -> "$___syscall140"; // callImport + "$___stdio_seek" -> "$___syscall_ret"; // call + "$___syscall_ret" -> "$___errno_location"; // call + "$___errno_location" -> "$_pthread_self"; // call + "$_cleanup_387" -> "$_free"; // call + "$___stdout_write" -> "$___syscall54"; // callImport + "$___stdout_write" -> "$___stdio_write"; // call + "$_fflush" -> "$___fflush_unlocked"; // call + "$_fflush" -> "$_malloc"; // call + "$_fflush" -> "$_free"; // call + "$_fflush" -> "$_fflush"; // call + "$_fflush" -> "$___lock"; // callImport + "$_fflush" -> "$___unlock"; // callImport + "$__Znwj" -> "$_malloc"; // call + "$__Znwj" -> "$__ZSt15get_new_handlerv"; // call + "$_memcpy" -> "$_emscripten_memcpy_big"; // callImport + "$b0" -> "$abort"; // callImport + "$b1" -> "$abort"; // callImport + "$b2" -> "$abort"; // callImport + "$b3" -> "$abort"; // callImport + "$b0" [style="filled, rounded"]; + "$___stdio_close" [style="filled, rounded"]; + "$b1" [style="filled, rounded"]; + "$___stdout_write" [style="filled, rounded"]; + "$___stdio_seek" [style="filled, rounded"]; + "$___stdio_write" [style="filled, rounded"]; + "$b2" [style="filled, rounded"]; + "$_cleanup_387" [style="filled, rounded"]; + "$b3" [style="filled, rounded"]; +} +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $6 (func (result i32))) + (type $7 (func (param i32 i32 i32 i32) (result i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "DYNAMICTOP_PTR" (global $DYNAMICTOP_PTR$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "ABORT" (global $ABORT$asm2wasm$import i32)) + (import "global" "NaN" (global $nan$asm2wasm$import f64)) + (import "global" "Infinity" (global $inf$asm2wasm$import f64)) + (import "env" "abort" (func $abort (param i32))) + (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) + (import "env" "___lock" (func $___lock (param i32))) + (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) + (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) + (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $___unlock (param i32))) + (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 9 9 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $DYNAMICTOP_PTR (mut i32) (get_global $DYNAMICTOP_PTR$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $ABORT (mut i32) (get_global $ABORT$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $setjmpId (mut i32) (i32.const 0)) + (global $undef (mut i32) (i32.const 0)) + (global $nan (mut f64) (get_global $nan$asm2wasm$import)) + (global $inf (mut f64) (get_global $inf$asm2wasm$import)) + (global $tempInt (mut i32) (i32.const 0)) + (global $tempBigInt (mut i32) (i32.const 0)) + (global $tempBigIntP (mut i32) (i32.const 0)) + (global $tempBigIntS (mut i32) (i32.const 0)) + (global $tempBigIntR (mut f64) (f64.const 0)) + (global $tempBigIntI (mut i32) (i32.const 0)) + (global $tempBigIntD (mut i32) (i32.const 0)) + (global $tempValue (mut i32) (i32.const 0)) + (global $tempDouble (mut f64) (f64.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (global $tempFloat (mut f32) (f32.const 0)) + (global $f0 (mut f32) (f32.const 0)) + (elem (i32.const 0) $b0 $___stdio_close $b1 $___stdout_write $___stdio_seek $___stdio_write $b2 $_cleanup_387 $b3) + (data (get_global $memoryBase) "\05\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\b0\04\00\00\00\04\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\n\ff\ff\ff\ff\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\04") + (export "_fflush" (func $_fflush)) + (export "_main" (func $_main)) + (export "_pthread_self" (func $_pthread_self)) + (export "_memset" (func $_memset)) + (export "_malloc" (func $_malloc)) + (export "_memcpy" (func $_memcpy)) + (export "_free" (func $_free)) + (export "___errno_location" (func $___errno_location)) + (export "runPostSets" (func $runPostSets)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackSave" (func $stackSave)) + (export "stackRestore" (func $stackRestore)) + (export "establishStackSpace" (func $establishStackSpace)) + (export "setThrew" (func $setThrew)) + (export "setTempRet0" (func $setTempRet0)) + (export "getTempRet0" (func $getTempRet0)) + (export "dynCall_ii" (func $dynCall_ii)) + (export "dynCall_iiii" (func $dynCall_iiii)) + (export "dynCall_vi" (func $dynCall_vi)) + (export "dynCall_v" (func $dynCall_v)) + (func $stackAlloc (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $0) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackSave (; 11 ;) (type $6) (result i32) + (get_global $STACKTOP) + ) + (func $stackRestore (; 12 ;) (type $FUNCSIG$vi) (param $0 i32) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $establishStackSpace (; 13 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (set_global $STACKTOP + (get_local $0) + ) + (set_global $STACK_MAX + (get_local $1) + ) + ) + (func $setThrew (; 14 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (if + (i32.eqz + (get_global $__THREW__) + ) + (block $block + (set_global $__THREW__ + (get_local $0) + ) + (set_global $threwValue + (get_local $1) + ) + ) + ) + ) + (func $setTempRet0 (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) + (set_global $tempRet0 + (get_local $0) + ) + ) + (func $getTempRet0 (; 16 ;) (type $6) (result i32) + (get_global $tempRet0) + ) + (func $_malloc (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (i32.const 0) + ) + (func $_free (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) + (nop) + ) + (func $_main (; 19 ;) (type $6) (result i32) + (local $0 i32) + (i64.store align=4 + (tee_local $0 + (call $__Znwj + (i32.const 8) + ) + ) + (i64.const 0) + ) + (get_local $0) + ) + (func $___stdio_close (; 20 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $2 + (get_local $1) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (set_local $0 + (call $___syscall_ret + (call $___syscall6 + (i32.const 6) + (get_local $2) + ) + ) + ) + (set_global $STACKTOP + (get_local $1) + ) + (get_local $0) + ) + (func $___stdio_write (; 21 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (set_local $8 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + (set_local $9 + (get_local $7) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $7) + (i32.const 32) + ) + ) + (tee_local $5 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $3) + (tee_local $4 + (i32.sub + (i32.load + (tee_local $10 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (get_local $5) + ) + ) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (get_local $2) + ) + (set_local $13 + (i32.add + (get_local $0) + (i32.const 60) + ) + ) + (set_local $14 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (set_local $1 + (get_local $3) + ) + (set_local $5 + (i32.const 2) + ) + (set_local $11 + (i32.add + (get_local $4) + (get_local $2) + ) + ) + (set_local $0 + (block $jumpthreading$outer$1 (result i32) + (block $jumpthreading$inner$1 + (block $jumpthreading$inner$0 + (loop $while-in + (br_if $jumpthreading$inner$0 + (i32.eq + (get_local $11) + (tee_local $4 + (if (result i32) + (i32.load + (i32.const 1140) + ) + (block $block (result i32) + (call $_pthread_cleanup_push + (i32.const 1) + (get_local $0) + ) + (i32.store + (get_local $9) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $9) + (get_local $1) + ) + (i32.store offset=8 + (get_local $9) + (get_local $5) + ) + (set_local $3 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $9) + ) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + (get_local $3) + ) + (block $block0 (result i32) + (i32.store + (get_local $8) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $8) + (get_local $1) + ) + (i32.store offset=8 + (get_local $8) + (get_local $5) + ) + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $8) + ) + ) + ) + ) + ) + ) + ) + (br_if $jumpthreading$inner$1 + (i32.lt_s + (get_local $4) + (i32.const 0) + ) + ) + (set_local $11 + (i32.sub + (get_local $11) + (get_local $4) + ) + ) + (set_local $1 + (if (result i32) + (i32.gt_u + (get_local $4) + (tee_local $12 + (i32.load offset=4 + (get_local $1) + ) + ) + ) + (block $block2 (result i32) + (i32.store + (get_local $6) + (tee_local $3 + (i32.load + (get_local $14) + ) + ) + ) + (i32.store + (get_local $10) + (get_local $3) + ) + (set_local $4 + (i32.sub + (get_local $4) + (get_local $12) + ) + ) + (set_local $3 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + (i32.load offset=12 + (get_local $1) + ) + ) + (if (result i32) + (i32.eq + (get_local $5) + (i32.const 2) + ) + (block $block4 (result i32) + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (get_local $4) + ) + ) + (set_local $3 + (get_local $1) + ) + (set_local $5 + (i32.const 2) + ) + (get_local $12) + ) + (block $block5 (result i32) + (set_local $3 + (get_local $1) + ) + (get_local $12) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $4) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.sub + (get_local $1) + (get_local $4) + ) + ) + (set_local $1 + (get_local $3) + ) + (br $while-in) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (tee_local $1 + (i32.load + (get_local $14) + ) + ) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.store + (get_local $6) + (tee_local $0 + (get_local $1) + ) + ) + (i32.store + (get_local $10) + (get_local $0) + ) + (br $jumpthreading$outer$1 + (get_local $2) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $10) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (select + (i32.const 0) + (i32.sub + (get_local $2) + (i32.load offset=4 + (get_local $1) + ) + ) + (i32.eq + (get_local $5) + (i32.const 2) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + (get_local $0) + ) + (func $___stdio_seek (; 22 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (i32.store + (tee_local $3 + (get_local $4) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + (i32.store offset=16 + (get_local $3) + (get_local $2) + ) + (set_local $0 + (if (result i32) + (i32.lt_s + (call $___syscall_ret + (call $___syscall140 + (i32.const 140) + (get_local $3) + ) + ) + (i32.const 0) + ) + (block $block (result i32) + (i32.store + (get_local $0) + (i32.const -1) + ) + (i32.const -1) + ) + (i32.load + (get_local $0) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $___syscall_ret (; 23 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const -4096) + ) + (block $block (result i32) + (i32.store + (call $___errno_location) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + (get_local $0) + ) + ) + (func $___errno_location (; 24 ;) (type $6) (result i32) + (if (result i32) + (i32.load + (i32.const 1140) + ) + (i32.load offset=64 + (call $_pthread_self) + ) + (i32.const 1184) + ) + ) + (func $_cleanup_387 (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) + (if + (i32.eqz + (i32.load offset=68 + (get_local $0) + ) + ) + (call $_free + (get_local $0) + ) + ) + ) + (func $___stdout_write (; 26 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 80) + ) + ) + (set_local $3 + (get_local $4) + ) + (set_local $5 + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + (i32.store offset=36 + (get_local $0) + (i32.const 3) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 64) + ) + ) + (block $block + (i32.store + (get_local $3) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 21505) + ) + (i32.store offset=8 + (get_local $3) + (get_local $5) + ) + (if + (call $___syscall54 + (i32.const 54) + (get_local $3) + ) + (i32.store8 offset=75 + (get_local $0) + (i32.const -1) + ) + ) + ) + ) + (set_local $0 + (call $___stdio_write + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $_fflush (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (block $do-once (result i32) + (if (result i32) + (get_local $0) + (block $block (result i32) + (if + (i32.le_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (br $do-once + (call $___fflush_unlocked + (get_local $0) + ) + ) + ) + (set_local $2 + (i32.eqz + (call $_malloc + (get_local $0) + ) + ) + ) + (set_local $1 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (if (result i32) + (get_local $2) + (get_local $1) + (block $block9 (result i32) + (call $_free + (get_local $0) + ) + (get_local $1) + ) + ) + ) + (block $block10 (result i32) + (set_local $0 + (if (result i32) + (i32.load + (i32.const 1136) + ) + (call $_fflush + (i32.load + (i32.const 1136) + ) + ) + (i32.const 0) + ) + ) + (call $___lock + (i32.const 1168) + ) + (if + (tee_local $1 + (i32.load + (i32.const 1164) + ) + ) + (loop $while-in + (set_local $2 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (get_local $1) + ) + (i32.const -1) + ) + (call $_malloc + (get_local $1) + ) + (i32.const 0) + ) + ) + (set_local $0 + (if (result i32) + (i32.gt_u + (i32.load offset=20 + (get_local $1) + ) + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.or + (call $___fflush_unlocked + (get_local $1) + ) + (get_local $0) + ) + (get_local $0) + ) + ) + (if + (get_local $2) + (call $_free + (get_local $1) + ) + ) + (br_if $while-in + (tee_local $1 + (i32.load offset=56 + (get_local $1) + ) + ) + ) + ) + ) + (call $___unlock + (i32.const 1168) + ) + (get_local $0) + ) + ) + ) + ) + (func $___fflush_unlocked (; 28 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (block $jumpthreading$outer$0 (result i32) + (block $jumpthreading$inner$0 + (br_if $jumpthreading$inner$0 + (i32.le_u + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (br_if $jumpthreading$inner$0 + (i32.load + (get_local $1) + ) + ) + (br $jumpthreading$outer$0 + (i32.const -1) + ) + ) + (if + (i32.lt_u + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (tee_local $6 + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.sub + (get_local $4) + (get_local $6) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=40 + (get_local $0) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (i32.const 0) + ) + ) + (func $__Znwj (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (select + (get_local $0) + (i32.const 1) + (get_local $0) + ) + ) + (loop $while-in + (block $while-out + (br_if $while-out + (tee_local $0 + (call $_malloc + (get_local $1) + ) + ) + ) + (if + (tee_local $0 + (call $__ZSt15get_new_handlerv) + ) + (block $block + (call_indirect (type $FUNCSIG$v) + (i32.add + (i32.and + (get_local $0) + (i32.const 0) + ) + (i32.const 8) + ) + ) + (br $while-in) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (get_local $0) + ) + (func $__ZSt15get_new_handlerv (; 30 ;) (type $6) (result i32) + (local $0 i32) + (i32.store + (i32.const 1188) + (i32.add + (tee_local $0 + (i32.load + (i32.const 1188) + ) + ) + (i32.const 0) + ) + ) + (get_local $0) + ) + (func $runPostSets (; 31 ;) (type $FUNCSIG$v) + (nop) + ) + (func $_memset (; 32 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (set_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (if + (i32.ge_s + (get_local $2) + (i32.const 20) + ) + (block $block + (set_local $5 + (i32.or + (i32.or + (i32.or + (tee_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (i32.shl + (get_local $1) + (i32.const 8) + ) + ) + (i32.shl + (get_local $1) + (i32.const 16) + ) + ) + (i32.shl + (get_local $1) + (i32.const 24) + ) + ) + ) + (set_local $6 + (i32.and + (get_local $4) + (i32.const -4) + ) + ) + (if + (tee_local $3 + (i32.and + (get_local $0) + (i32.const 3) + ) + ) + (block $block17 + (set_local $3 + (i32.sub + (i32.add + (get_local $0) + (i32.const 4) + ) + (get_local $3) + ) + ) + (loop $while-in + (if + (i32.lt_s + (get_local $0) + (get_local $3) + ) + (block $block19 + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (loop $while-in1 + (if + (i32.lt_s + (get_local $0) + (get_local $6) + ) + (block $block21 + (i32.store + (get_local $0) + (get_local $5) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.lt_s + (get_local $0) + (get_local $4) + ) + (block $block23 + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $_memcpy (; 33 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.ge_s + (get_local $2) + (i32.const 4096) + ) + (return + (call $_emscripten_memcpy_big + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (set_local $3 + (get_local $0) + ) + (if + (i32.eq + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.and + (get_local $1) + (i32.const 3) + ) + ) + (block $block + (loop $while-in + (block $while-out + (br_if $while-out + (i32.eqz + (i32.and + (get_local $0) + (i32.const 3) + ) + ) + ) + (if + (i32.eqz + (get_local $2) + ) + (return + (get_local $3) + ) + ) + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + (loop $while-in1 + (if + (i32.ge_s + (get_local $2) + (i32.const 4) + ) + (block $block27 + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block $block29 + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (get_local $3) + ) + (func $_pthread_self (; 34 ;) (type $6) (result i32) + (i32.const 0) + ) + (func $dynCall_ii (; 35 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (call_indirect (type $FUNCSIG$ii) + (get_local $1) + (i32.add + (i32.and + (get_local $0) + (i32.const 1) + ) + (i32.const 0) + ) + ) + ) + (func $dynCall_iiii (; 36 ;) (type $7) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call_indirect (type $FUNCSIG$iiii) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.add + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (func $dynCall_vi (; 37 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $1) + (i32.add + (i32.and + (get_local $0) + (i32.const 1) + ) + (i32.const 6) + ) + ) + ) + (func $dynCall_v (; 38 ;) (type $FUNCSIG$vi) (param $0 i32) + (call_indirect (type $FUNCSIG$v) + (i32.add + (i32.and + (get_local $0) + (i32.const 0) + ) + (i32.const 8) + ) + ) + ) + (func $b0 (; 39 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (call $abort + (i32.const 0) + ) + (i32.const 0) + ) + (func $b1 (; 40 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $abort + (i32.const 1) + ) + (i32.const 0) + ) + (func $b2 (; 41 ;) (type $FUNCSIG$vi) (param $0 i32) + (call $abort + (i32.const 2) + ) + ) + (func $b3 (; 42 ;) (type $FUNCSIG$v) + (call $abort + (i32.const 3) + ) + ) +) diff --git a/src/binaryen/test/passes/print-call-graph.wast b/src/binaryen/test/passes/print-call-graph.wast new file mode 100644 index 0000000000..1a9eb2f422 --- /dev/null +++ b/src/binaryen/test/passes/print-call-graph.wast @@ -0,0 +1,1382 @@ +(module + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "DYNAMICTOP_PTR" (global $DYNAMICTOP_PTR$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "ABORT" (global $ABORT$asm2wasm$import i32)) + (import "global" "NaN" (global $nan$asm2wasm$import f64)) + (import "global" "Infinity" (global $inf$asm2wasm$import f64)) + (import "env" "abort" (func $abort (param i32))) + (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) + (import "env" "___lock" (func $___lock (param i32))) + (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) + (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) + (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $___unlock (param i32))) + (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 9 9 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (elem (i32.const 0) $b0 $___stdio_close $b1 $___stdout_write $___stdio_seek $___stdio_write $b2 $_cleanup_387 $b3) + (data (get_global $memoryBase) "\05\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\b0\04\00\00\00\04\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\n\ff\ff\ff\ff\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\04") + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $DYNAMICTOP_PTR (mut i32) (get_global $DYNAMICTOP_PTR$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $ABORT (mut i32) (get_global $ABORT$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $setjmpId (mut i32) (i32.const 0)) + (global $undef (mut i32) (i32.const 0)) + (global $nan (mut f64) (get_global $nan$asm2wasm$import)) + (global $inf (mut f64) (get_global $inf$asm2wasm$import)) + (global $tempInt (mut i32) (i32.const 0)) + (global $tempBigInt (mut i32) (i32.const 0)) + (global $tempBigIntP (mut i32) (i32.const 0)) + (global $tempBigIntS (mut i32) (i32.const 0)) + (global $tempBigIntR (mut f64) (f64.const 0)) + (global $tempBigIntI (mut i32) (i32.const 0)) + (global $tempBigIntD (mut i32) (i32.const 0)) + (global $tempValue (mut i32) (i32.const 0)) + (global $tempDouble (mut f64) (f64.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (global $tempFloat (mut f32) (f32.const 0)) + (global $f0 (mut f32) (f32.const 0)) + (export "_fflush" (func $_fflush)) + (export "_main" (func $_main)) + (export "_pthread_self" (func $_pthread_self)) + (export "_memset" (func $_memset)) + (export "_malloc" (func $_malloc)) + (export "_memcpy" (func $_memcpy)) + (export "_free" (func $_free)) + (export "___errno_location" (func $___errno_location)) + (export "runPostSets" (func $runPostSets)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackSave" (func $stackSave)) + (export "stackRestore" (func $stackRestore)) + (export "establishStackSpace" (func $establishStackSpace)) + (export "setThrew" (func $setThrew)) + (export "setTempRet0" (func $setTempRet0)) + (export "getTempRet0" (func $getTempRet0)) + (export "dynCall_ii" (func $dynCall_ii)) + (export "dynCall_iiii" (func $dynCall_iiii)) + (export "dynCall_vi" (func $dynCall_vi)) + (export "dynCall_v" (func $dynCall_v)) + (func $stackAlloc (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $0) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $stackSave (result i32) + (get_global $STACKTOP) + ) + (func $stackRestore (param $0 i32) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $establishStackSpace (param $0 i32) (param $1 i32) + (set_global $STACKTOP + (get_local $0) + ) + (set_global $STACK_MAX + (get_local $1) + ) + ) + (func $setThrew (param $0 i32) (param $1 i32) + (if + (i32.eqz + (get_global $__THREW__) + ) + (block + (set_global $__THREW__ + (get_local $0) + ) + (set_global $threwValue + (get_local $1) + ) + ) + ) + ) + (func $setTempRet0 (param $0 i32) + (set_global $tempRet0 + (get_local $0) + ) + ) + (func $getTempRet0 (result i32) + (get_global $tempRet0) + ) + (func $_malloc (param $0 i32) (result i32) + (i32.const 0) + ) + (func $_free (param $0 i32) + (nop) + ) + (func $_main (result i32) + (local $0 i32) + (i64.store align=4 + (tee_local $0 + (call $__Znwj + (i32.const 8) + ) + ) + (i64.const 0) + ) + (get_local $0) + ) + (func $___stdio_close (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $2 + (get_local $1) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (set_local $0 + (call $___syscall_ret + (call $___syscall6 + (i32.const 6) + (get_local $2) + ) + ) + ) + (set_global $STACKTOP + (get_local $1) + ) + (get_local $0) + ) + (func $___stdio_write (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (set_local $8 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + (set_local $9 + (get_local $7) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $7) + (i32.const 32) + ) + ) + (tee_local $5 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $3) + (tee_local $4 + (i32.sub + (i32.load + (tee_local $10 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (get_local $5) + ) + ) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (get_local $2) + ) + (set_local $13 + (i32.add + (get_local $0) + (i32.const 60) + ) + ) + (set_local $14 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (set_local $1 + (get_local $3) + ) + (set_local $5 + (i32.const 2) + ) + (set_local $11 + (i32.add + (get_local $4) + (get_local $2) + ) + ) + (set_local $0 + (block $jumpthreading$outer$1 (result i32) + (block $jumpthreading$inner$1 + (block $jumpthreading$inner$0 + (loop $while-in + (br_if $jumpthreading$inner$0 + (i32.eq + (get_local $11) + (tee_local $4 + (if (result i32) + (i32.load + (i32.const 1140) + ) + (block (result i32) + (call $_pthread_cleanup_push + (i32.const 1) + (get_local $0) + ) + (i32.store + (get_local $9) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $9) + (get_local $1) + ) + (i32.store offset=8 + (get_local $9) + (get_local $5) + ) + (set_local $3 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $9) + ) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + (get_local $3) + ) + (block (result i32) + (i32.store + (get_local $8) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $8) + (get_local $1) + ) + (i32.store offset=8 + (get_local $8) + (get_local $5) + ) + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $8) + ) + ) + ) + ) + ) + ) + ) + (br_if $jumpthreading$inner$1 + (i32.lt_s + (get_local $4) + (i32.const 0) + ) + ) + (set_local $11 + (i32.sub + (get_local $11) + (get_local $4) + ) + ) + (set_local $1 + (if (result i32) + (i32.gt_u + (get_local $4) + (tee_local $12 + (i32.load offset=4 + (get_local $1) + ) + ) + ) + (block (result i32) + (i32.store + (get_local $6) + (tee_local $3 + (i32.load + (get_local $14) + ) + ) + ) + (i32.store + (get_local $10) + (get_local $3) + ) + (set_local $4 + (i32.sub + (get_local $4) + (get_local $12) + ) + ) + (set_local $3 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + (i32.load offset=12 + (get_local $1) + ) + ) + (if (result i32) + (i32.eq + (get_local $5) + (i32.const 2) + ) + (block (result i32) + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (get_local $4) + ) + ) + (set_local $3 + (get_local $1) + ) + (set_local $5 + (i32.const 2) + ) + (get_local $12) + ) + (block (result i32) + (set_local $3 + (get_local $1) + ) + (get_local $12) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $4) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.sub + (get_local $1) + (get_local $4) + ) + ) + (set_local $1 + (get_local $3) + ) + (br $while-in) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (tee_local $1 + (i32.load + (get_local $14) + ) + ) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.store + (get_local $6) + (tee_local $0 + (get_local $1) + ) + ) + (i32.store + (get_local $10) + (get_local $0) + ) + (br $jumpthreading$outer$1 + (get_local $2) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $10) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (select + (i32.const 0) + (i32.sub + (get_local $2) + (i32.load offset=4 + (get_local $1) + ) + ) + (i32.eq + (get_local $5) + (i32.const 2) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + (get_local $0) + ) + (func $___stdio_seek (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (i32.store + (tee_local $3 + (get_local $4) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + (i32.store offset=16 + (get_local $3) + (get_local $2) + ) + (set_local $0 + (if (result i32) + (i32.lt_s + (call $___syscall_ret + (call $___syscall140 + (i32.const 140) + (get_local $3) + ) + ) + (i32.const 0) + ) + (block (result i32) + (i32.store + (get_local $0) + (i32.const -1) + ) + (i32.const -1) + ) + (i32.load + (get_local $0) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $___syscall_ret (param $0 i32) (result i32) + (if (result i32) + (i32.gt_u + (get_local $0) + (i32.const -4096) + ) + (block (result i32) + (i32.store + (call $___errno_location) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + (get_local $0) + ) + ) + (func $___errno_location (result i32) + (if (result i32) + (i32.load + (i32.const 1140) + ) + (i32.load offset=64 + (call $_pthread_self) + ) + (i32.const 1184) + ) + ) + (func $_cleanup_387 (param $0 i32) + (if + (i32.eqz + (i32.load offset=68 + (get_local $0) + ) + ) + (call $_free + (get_local $0) + ) + ) + ) + (func $___stdout_write (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 80) + ) + ) + (set_local $3 + (get_local $4) + ) + (set_local $5 + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + (i32.store offset=36 + (get_local $0) + (i32.const 3) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 64) + ) + ) + (block + (i32.store + (get_local $3) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 21505) + ) + (i32.store offset=8 + (get_local $3) + (get_local $5) + ) + (if + (call $___syscall54 + (i32.const 54) + (get_local $3) + ) + (i32.store8 offset=75 + (get_local $0) + (i32.const -1) + ) + ) + ) + ) + (set_local $0 + (call $___stdio_write + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $_fflush (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (block $do-once (result i32) + (if (result i32) + (get_local $0) + (block (result i32) + (if + (i32.le_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (br $do-once + (call $___fflush_unlocked + (get_local $0) + ) + ) + ) + (set_local $2 + (i32.eqz + (call $_malloc + (get_local $0) + ) + ) + ) + (set_local $1 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (if (result i32) + (get_local $2) + (get_local $1) + (block (result i32) + (call $_free + (get_local $0) + ) + (get_local $1) + ) + ) + ) + (block (result i32) + (set_local $0 + (if (result i32) + (i32.load + (i32.const 1136) + ) + (call $_fflush + (i32.load + (i32.const 1136) + ) + ) + (i32.const 0) + ) + ) + (call $___lock + (i32.const 1168) + ) + (if + (tee_local $1 + (i32.load + (i32.const 1164) + ) + ) + (loop $while-in + (set_local $2 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (get_local $1) + ) + (i32.const -1) + ) + (call $_malloc + (get_local $1) + ) + (i32.const 0) + ) + ) + (set_local $0 + (if (result i32) + (i32.gt_u + (i32.load offset=20 + (get_local $1) + ) + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.or + (call $___fflush_unlocked + (get_local $1) + ) + (get_local $0) + ) + (get_local $0) + ) + ) + (if + (get_local $2) + (call $_free + (get_local $1) + ) + ) + (br_if $while-in + (tee_local $1 + (i32.load offset=56 + (get_local $1) + ) + ) + ) + ) + ) + (call $___unlock + (i32.const 1168) + ) + (get_local $0) + ) + ) + ) + ) + (func $___fflush_unlocked (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (block $jumpthreading$outer$0 (result i32) + (block $jumpthreading$inner$0 + (br_if $jumpthreading$inner$0 + (i32.le_u + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (br_if $jumpthreading$inner$0 + (i32.load + (get_local $1) + ) + ) + (br $jumpthreading$outer$0 + (i32.const -1) + ) + ) + (if + (i32.lt_u + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (tee_local $6 + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + ) + (drop + (call_indirect (type $FUNCSIG$iiii) + (get_local $0) + (i32.sub + (get_local $4) + (get_local $6) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=40 + (get_local $0) + ) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (i32.const 0) + ) + ) + (func $__Znwj (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (select + (get_local $0) + (i32.const 1) + (get_local $0) + ) + ) + (loop $while-in + (block $while-out + (br_if $while-out + (tee_local $0 + (call $_malloc + (get_local $1) + ) + ) + ) + (if + (tee_local $0 + (call $__ZSt15get_new_handlerv) + ) + (block + (call_indirect (type $FUNCSIG$v) + (i32.add + (i32.and + (get_local $0) + (i32.const 0) + ) + (i32.const 8) + ) + ) + (br $while-in) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (get_local $0) + ) + (func $__ZSt15get_new_handlerv (result i32) + (local $0 i32) + (i32.store + (i32.const 1188) + (i32.add + (tee_local $0 + (i32.load + (i32.const 1188) + ) + ) + (i32.const 0) + ) + ) + (get_local $0) + ) + (func $runPostSets + (nop) + ) + (func $_memset (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (set_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (if + (i32.ge_s + (get_local $2) + (i32.const 20) + ) + (block + (set_local $5 + (i32.or + (i32.or + (i32.or + (tee_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (i32.shl + (get_local $1) + (i32.const 8) + ) + ) + (i32.shl + (get_local $1) + (i32.const 16) + ) + ) + (i32.shl + (get_local $1) + (i32.const 24) + ) + ) + ) + (set_local $6 + (i32.and + (get_local $4) + (i32.const -4) + ) + ) + (if + (tee_local $3 + (i32.and + (get_local $0) + (i32.const 3) + ) + ) + (block + (set_local $3 + (i32.sub + (i32.add + (get_local $0) + (i32.const 4) + ) + (get_local $3) + ) + ) + (loop $while-in + (if + (i32.lt_s + (get_local $0) + (get_local $3) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (loop $while-in1 + (if + (i32.lt_s + (get_local $0) + (get_local $6) + ) + (block + (i32.store + (get_local $0) + (get_local $5) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.lt_s + (get_local $0) + (get_local $4) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $_memcpy (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.ge_s + (get_local $2) + (i32.const 4096) + ) + (return + (call $_emscripten_memcpy_big + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (set_local $3 + (get_local $0) + ) + (if + (i32.eq + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.and + (get_local $1) + (i32.const 3) + ) + ) + (block + (loop $while-in + (block $while-out + (br_if $while-out + (i32.eqz + (i32.and + (get_local $0) + (i32.const 3) + ) + ) + ) + (if + (i32.eqz + (get_local $2) + ) + (return + (get_local $3) + ) + ) + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + (loop $while-in1 + (if + (i32.ge_s + (get_local $2) + (i32.const 4) + ) + (block + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (get_local $3) + ) + (func $_pthread_self (result i32) + (i32.const 0) + ) + (func $dynCall_ii (param $0 i32) (param $1 i32) (result i32) + (call_indirect (type $FUNCSIG$ii) + (get_local $1) + (i32.add + (i32.and + (get_local $0) + (i32.const 1) + ) + (i32.const 0) + ) + ) + ) + (func $dynCall_iiii (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call_indirect (type $FUNCSIG$iiii) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.add + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (func $dynCall_vi (param $0 i32) (param $1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $1) + (i32.add + (i32.and + (get_local $0) + (i32.const 1) + ) + (i32.const 6) + ) + ) + ) + (func $dynCall_v (param $0 i32) + (call_indirect (type $FUNCSIG$v) + (i32.add + (i32.and + (get_local $0) + (i32.const 0) + ) + (i32.const 8) + ) + ) + ) + (func $b0 (param $0 i32) (result i32) + (call $abort + (i32.const 0) + ) + (i32.const 0) + ) + (func $b1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $abort + (i32.const 1) + ) + (i32.const 0) + ) + (func $b2 (param $0 i32) + (call $abort + (i32.const 2) + ) + ) + (func $b3 + (call $abort + (i32.const 3) + ) + ) +) diff --git a/src/binaryen/test/passes/remove-imports.txt b/src/binaryen/test/passes/remove-imports.txt new file mode 100644 index 0000000000..9c7444b8df --- /dev/null +++ b/src/binaryen/test/passes/remove-imports.txt @@ -0,0 +1,16 @@ +(module + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$d (func (result f64))) + (import "env" "memBase" (global $import$global0 i32)) + (memory $0 1024 1024) + (func $nada (; 0 ;) (type $FUNCSIG$v) + (nop) + (drop + (i32.const 0) + ) + (drop + (f64.const 0) + ) + ) +) diff --git a/src/binaryen/test/passes/remove-imports.wast b/src/binaryen/test/passes/remove-imports.wast new file mode 100644 index 0000000000..d7c883d67d --- /dev/null +++ b/src/binaryen/test/passes/remove-imports.wast @@ -0,0 +1,19 @@ +(module + (memory 1024 1024) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$d (func (result f64))) + (import $waka "somewhere" "waka") + (import $waka-ret "somewhere" "waka-ret" (result i32)) + (import $waka-ret-d "somewhere" "waka-ret-d" (result f64)) + (import "env" "memBase" (global i32)) + (func $nada (type $FUNCSIG$v) + (call $waka) + (drop + (call $waka-ret) + ) + (drop + (call $waka-ret-d) + ) + ) +) diff --git a/src/binaryen/test/passes/remove-memory.txt b/src/binaryen/test/passes/remove-memory.txt new file mode 100644 index 0000000000..ee65d237e2 --- /dev/null +++ b/src/binaryen/test/passes/remove-memory.txt @@ -0,0 +1,3 @@ +(module + (memory $0 1024 1024) +) diff --git a/src/binaryen/test/passes/remove-memory.wast b/src/binaryen/test/passes/remove-memory.wast new file mode 100644 index 0000000000..bbb9990079 --- /dev/null +++ b/src/binaryen/test/passes/remove-memory.wast @@ -0,0 +1,6 @@ +(module + (memory 1024 1024 + (segment 10 "123") + (segment 20 "149") + ) +) diff --git a/src/binaryen/test/passes/remove-unused-brs.txt b/src/binaryen/test/passes/remove-unused-brs.txt new file mode 100644 index 0000000000..529fa61525 --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-brs.txt @@ -0,0 +1,1159 @@ +(module + (type $0 (func (param i32))) + (type $1 (func)) + (type $2 (func (result i32))) + (type $3 (func (param i32 i32) (result i32))) + (type $4 (func (param i32 i32))) + (type $5 (func (param f32 i32 f32 i32 i32 f64 f32) (result i32))) + (type $6 (func (param i32) (result i64))) + (type $7 (func (result i64))) + (type $8 (func (result f32))) + (type $9 (func (param i32) (result f32))) + (memory $0 256 256) + (func $b0-yes (; 0 ;) (type $0) (param $i1 i32) + (block $topmost + ) + ) + (func $b1 (; 1 ;) (type $0) (param $i1 i32) + (block $topmost + (block $block + (drop + (i32.const 0) + ) + ) + ) + ) + (func $b2 (; 2 ;) (type $0) (param $i1 i32) + (block $topmost + (block $inner + ) + ) + ) + (func $b3-yes (; 3 ;) (type $0) (param $i1 i32) + (block $topmost + (block $inner + ) + ) + ) + (func $b4 (; 4 ;) (type $0) (param $i1 i32) + (block $topmost + (block $inner + (block $block + (drop + (i32.const 0) + ) + ) + ) + ) + ) + (func $b5 (; 5 ;) (type $0) (param $i1 i32) + (block $topmost + (block $inner + (block $block + (drop + (i32.const 0) + ) + ) + ) + ) + ) + (func $b6 (; 6 ;) (type $0) (param $i1 i32) + (block $topmost + (br_if $topmost + (i32.const 1) + ) + ) + ) + (func $b7 (; 7 ;) (type $0) (param $i1 i32) + (block $topmost + (block $block + (drop + (i32.const 0) + ) + (br_if $topmost + (i32.const 1) + ) + ) + ) + ) + (func $b8 (; 8 ;) (type $0) (param $i1 i32) + (block $topmost + (block $inner + (br_if $topmost + (i32.const 1) + ) + ) + ) + ) + (func $b9 (; 9 ;) (type $0) (param $i1 i32) + (block $topmost + (block $inner + (br_if $topmost + (i32.const 1) + ) + ) + ) + ) + (func $b10 (; 10 ;) (type $0) (param $i1 i32) + (block $topmost + (block $inner + (block $block + (drop + (i32.const 0) + ) + (br_if $topmost + (i32.const 1) + ) + ) + ) + ) + ) + (func $b11 (; 11 ;) (type $0) (param $i1 i32) + (block $topmost + (block $inner + (block $block + (drop + (i32.const 0) + ) + (br_if $topmost + (i32.const 1) + ) + ) + ) + ) + ) + (func $b12-yes (; 12 ;) (type $1) + (block $topmost + (if + (i32.const 1) + (block $block1 + (drop + (i32.const 12) + ) + (block $block + (drop + (i32.const 1) + ) + ) + ) + (block $block3 + (drop + (i32.const 27) + ) + (block $block0 + (drop + (i32.const 2) + ) + ) + ) + ) + ) + ) + (func $b13 (; 13 ;) (type $2) (result i32) + (block $topmost (result i32) + (if + (i32.const 1) + (block $block1 + (drop + (i32.const 12) + ) + (drop + (br_if $topmost + (i32.const 1) + (i32.const 1) + ) + ) + ) + (block $block3 + (drop + (i32.const 27) + ) + (br $topmost + (i32.const 2) + ) + ) + ) + (i32.const 3) + ) + ) + (func $b14 (; 14 ;) (type $2) (result i32) + (block $topmost (result i32) + (if (result i32) + (i32.const 1) + (block $block1 (result i32) + (i32.const 12) + ) + (block $block3 (result i32) + (i32.const 27) + ) + ) + ) + ) + (func $b15 (; 15 ;) (type $1) + (block $topmost + (br_if $topmost + (i32.const 17) + ) + ) + ) + (func $b15b (; 16 ;) (type $1) + (block $topmost + (if + (i32.const 18) + (block $block + (drop + (i32.const 0) + ) + ) + ) + ) + ) + (func $b16 (; 17 ;) (type $1) + (block $a + (block $b + (block $c + ) + ) + ) + (block $a1 + (block $b2 + (block $c3 + ) + ) + ) + (block $a4 + (block $b5 + (block $c6 + ) + ) + ) + ) + (func $b17 (; 18 ;) (type $1) + (block $a + (if + (i32.const 0) + (block $block1 + ) + (block $block3 + ) + ) + ) + (block $a7 + (if + (i32.const 0) + (drop + (i32.const 1) + ) + (block $block6 + ) + ) + ) + (block $a9 + (if + (i32.const 0) + (block $block8 + ) + (drop + (i32.const 1) + ) + ) + ) + (block $c + (block $b + (if + (i32.const 0) + (block $block11 + ) + (block $block13 + ) + ) + ) + ) + ) + (func $ret-1 (; 19 ;) (type $1) + (nop) + ) + (func $ret-2 (; 20 ;) (type $1) + (block $block0 + (block $block1 + ) + ) + ) + (func $ret-3 (; 21 ;) (type $1) + (block $block0 + (if + (i32.const 0) + (nop) + (block $block3 + ) + ) + ) + ) + (func $ret-value (; 22 ;) (type $2) (result i32) + (block $block0 (result i32) + (block $block1 (result i32) + (i32.const 1) + ) + ) + ) + (func $no-select-but-the-last (; 23 ;) (type $1) + (block $a + (if + (i32.const 0) + (drop + (i32.const 1) + ) + (block $block2 + (block $block + (drop + (i32.const 2) + ) + (br $a) + ) + (drop + (i32.const 3) + ) + ) + ) + (if + (i32.const 0) + (block $block4 + (block $block13 + (drop + (i32.const 2) + ) + (br $a) + ) + (drop + (i32.const 3) + ) + ) + (drop + (i32.const 1) + ) + ) + (if + (block $block6 (result i32) + (block $block15 + (drop + (i32.const 2) + ) + (br $a) + ) + (i32.const 3) + ) + (drop + (i32.const 0) + ) + (drop + (i32.const 1) + ) + ) + (if + (block $a17 (result i32) + (i32.const 0) + ) + (block $a18 + (block $block19 + (drop + (i32.const 1) + ) + ) + ) + (block $a20 + (block $block21 + (drop + (i32.const 2) + ) + ) + ) + ) + ) + ) + (func $side-effects-and-order (; 24 ;) (type $2) (result i32) + (local $x i32) + (block $do-once$0 + (if + (call $b13) + (block $block + (drop + (i32.const 0) + ) + (br $do-once$0) + ) + ) + (drop + (i32.const 1) + ) + ) + (block $do-once$022 + (if + (call $b13) + (block $block24 + (drop + (call $b14) + ) + (br $do-once$022) + ) + ) + (drop + (i32.const 1) + ) + ) + (block $do-once$025 + (if + (i32.const 0) + (block $block27 + (drop + (call $b14) + ) + (br $do-once$025) + ) + ) + (drop + (i32.const 1) + ) + ) + (block $do-once$028 (result i32) + (if + (tee_local $x + (i32.const 1) + ) + (br $do-once$028 + (tee_local $x + (i32.const 2) + ) + ) + ) + (i32.const 1) + ) + ) + (func $loops (; 25 ;) (type $1) + (loop $in + (block $out + (br_if $in + (i32.eqz + (i32.const 0) + ) + ) + ) + ) + (loop $in30 + (br $in30) + ) + (loop $loop-in + (block $out31 + (br_if $out31 + (i32.const 0) + ) + ) + ) + (loop $in33 + (block $out34 + (br_if $out34 + (i32.const 0) + ) + ) + ) + (loop $in36 + (nop) + ) + (loop $in37 + (block $out38 + ) + ) + (loop $in39 + (if + (i32.eqz + (i32.const 0) + ) + (block + (nop) + (br_if $in39 + (i32.const 1) + ) + ) + ) + ) + (loop $in42 + (block $out43 + (br_if $in42 + (i32.const 0) + ) + ) + ) + (loop $in45 + (block $out46 + (br_if $in45 + (i32.eqz + (i32.const 0) + ) + ) + (unreachable) + ) + ) + (loop $in48 + (block $out49 + (br_if $in48 + (i32.eqz + (i32.const 0) + ) + ) + (block $block + (call $loops) + ) + ) + ) + (loop $in-todo + (block $out-todo + (if + (i32.const 0) + (nop) + (block + (call $loops) + (br $in-todo) + ) + ) + ) + ) + (loop $in52 + (block $out53 + (if + (i32.const 0) + (nop) + (block + (call $loops) + (br $in52) + ) + ) + ) + ) + (loop $in55 + (block $out56 + (if + (i32.const 0) + (block + (call $loops) + (br $in55) + ) + (nop) + ) + ) + ) + (loop $in58 + (block $out59 + (if + (i32.const 0) + (block + (block $block61 + (drop + (i32.const 1) + ) + (call $loops) + ) + (br $in58) + ) + (nop) + ) + ) + ) + (loop $in62 + (block $out63 + (if + (i32.const 0) + (nop) + (block + (call $loops) + (drop + (i32.const 100) + ) + (br $in62) + ) + ) + ) + ) + (loop $in65 + (block $out66 + (if + (i32.const 0) + (block + (call $loops) + (drop + (i32.const 101) + ) + (br $in65) + ) + (nop) + ) + ) + ) + (loop $in68 + (block $out69 + (if + (i32.const 0) + (block + (block $block71 + (drop + (i32.const 1) + ) + (call $loops) + ) + (drop + (i32.const 102) + ) + (br $in68) + ) + (nop) + ) + ) + ) + (loop $in72 + (if + (i32.eqz + (i32.const 0) + ) + (block + (nop) + (call $loops) + (return) + (br $in72) + ) + ) + ) + (loop $in75 + (block $out76 + (br_if $out76 + (i32.const 0) + ) + (call $loops) + (br $out76) + (br $in75) + ) + ) + (loop $in78 + (block $out79 + (if + (i32.const 0) + (nop) + (block + (call $loops) + (drop + (block $out2 (result i32) + (i32.const 1) + ) + ) + (br $in78) + ) + ) + ) + ) + (loop $in81 + (block $out82 + (br_if $in81 + (i32.eqz + (i32.const 0) + ) + ) + ) + ) + (loop $in-todo2 + (block $out-todo2 + (if + (i32.const 0) + (nop) + (block + (call $loops) + (br $in-todo2) + ) + ) + ) + ) + (loop $in83 + (block $out84 + (br $out84) + (br $in83) + ) + ) + (loop $in85 + (block $out86 + (br_if $in85 + (i32.const 0) + ) + (br $in85) + ) + ) + (loop $in-not + (block $out-not + (br_if $out-not + (i32.const -1) + ) + (br_if $out-not + (i32.const 0) + ) + (call $loops) + (br $in-not) + ) + ) + (loop $in-todo287 + (block $out-todo288 + (if + (i32.const 0) + (nop) + (block + (call $loops) + (drop + (i32.const 1) + ) + (br $in-todo287) + ) + ) + ) + ) + ) + (func $br_if_in_block (; 26 ;) (type $2) (result i32) + (block $outval (result i32) + (block $in + (br_if $in + (i32.const 1) + ) + (br $in) + (drop + (i32.const 2) + ) + (br_if $in + (i32.eqz + (i32.const 3) + ) + ) + (unreachable) + (drop + (i32.const 4) + ) + (br_if $in + (i32.const 5) + ) + (unreachable) + (drop + (i32.const 6) + ) + ) + (if (result i32) + (i32.const 6) + (br $outval + (i32.const 7) + ) + (i32.const 8) + ) + ) + ) + (func $threading (; 27 ;) (type $1) + (drop + (block $value-out (result i32) + (block $value-in (result i32) + (block $out + (block $in + (br_if $out + (i32.const 1) + ) + (br_if $out + (i32.const 2) + ) + (br $value-in + (i32.const 3) + ) + ) + ) + (i32.const 4) + ) + ) + ) + (block $stack1 + (block $stack2 + (block $stack3 + (block $stack4 + (br_if $stack1 + (i32.const 1) + ) + (unreachable) + ) + ) + ) + ) + ) + (func $if-to-br_if-conflict (; 28 ;) (type $3) (param $x i32) (param $y i32) (result i32) + (block $leave + (set_local $y + (block $out (result i32) + (if + (get_local $x) + (br $out + (block $block (result i32) + (set_local $x + (i32.const 0) + ) + (i32.const 1) + ) + ) + (br_if $leave + (i32.const 1) + ) + ) + (unreachable) + ) + ) + ) + (i32.add + (get_local $x) + (get_local $y) + ) + ) + (func $if-to-br_if-conflict2 (; 29 ;) (type $3) (param $x i32) (param $y i32) (result i32) + (block $leave + (set_local $y + (block $out (result i32) + (if + (get_local $x) + (br_if $leave + (i32.const 1) + ) + (br $out + (block $block (result i32) + (set_local $x + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (unreachable) + ) + ) + ) + (i32.add + (get_local $x) + (get_local $y) + ) + ) + (func $if-to-br_if-value-sideeffect (; 30 ;) (type $3) (param $x i32) (param $y i32) (result i32) + (block $leave + (set_local $y + (block $out (result i32) + (if + (get_local $x) + (br $out + (block $block (result i32) + (drop + (call $if-to-br_if-value-sideeffect + (i32.const 0) + (i32.const 1) + ) + ) + (nop) + (i32.const 1) + ) + ) + ) + (unreachable) + ) + ) + ) + (i32.add + (get_local $x) + (get_local $y) + ) + ) + (func $fuzz (; 31 ;) (type $4) (param $j i32) (param $g i32) + (block $label$break$c + (loop $label$continue$d + (block $label$break$d + (if + (i32.lt_s + (get_local $j) + (i32.const 2147483640) + ) + (block $x + (block $y + (block $z + (br_if $x + (get_local $j) + ) + ) + ) + ) + (block $switch$26 + ) + ) + (i32.store + (i32.const 5724) + (i32.const -254899267) + ) + (br $label$continue$d) + ) + ) + ) + ) + (func $iffify (; 32 ;) (type $1) + (if + (i32.eqz + (i32.const 0) + ) + (block + (nop) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + ) + ) + (block $no + (br_if $no + (i32.const 0) + ) + (drop + (i32.const 1) + ) + (br $no) + (drop + (i32.const 2) + ) + ) + (block $no2 + (br_if $no2 + (i32.const 0) + ) + ) + (block $no3 + (br $no3) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + ) + (block $no5 + (block $no4 + (br_if $no5 + (i32.const 0) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + ) + ) + ) + (func $loop-if (; 33 ;) (type $2) (result i32) + (block $outer (result i32) + (loop $typed (result i32) + (if (result i32) + (i32.const 2) + (block $block (result i32) + (drop + (call $loop-if) + ) + (i32.const 0) + ) + (br $typed) + ) + ) + ) + ) + (func $block-break (; 34 ;) (type $0) (param $0 i32) + (block $block$7$break + (block $shape$6$continue + (call $block-break + (i32.const 1) + ) + ) + ) + ) + (func $loop-break (; 35 ;) (type $0) (param $0 i32) + (block $block$7$break + (loop $shape$6$continue + (call $loop-break + (i32.const 1) + ) + (br_if $shape$6$continue + (get_local $0) + ) + (nop) + ) + ) + ) + (func $untaken-brs-might-prevent-block-removal (; 36 ;) (type $5) (param $0 f32) (param $1 i32) (param $2 f32) (param $3 i32) (param $4 i32) (param $5 f64) (param $6 f32) (result i32) + (block $label$0 (result i32) + (block $label$1 + (br_if $label$1 + (i32.const 607395945) + ) + (br_if $label$1 + (unreachable.load16_s offset=3 align=1 + (select + (call $untaken-brs-might-prevent-block-removal + (f32.const 1.4904844647389837e-07) + (br_if $label$0 + (i32.store16 offset=4 align=1 + (i32.const 1900641) + (br $label$0 + (i32.const 1628075109) + ) + ) + (i32.const 1764950569) + ) + (f32.const 1.1910939690100655e-32) + (i32.const 1628057906) + (i32.const 859068982) + (f64.const 2.524518840347722e-258) + (f32.const -nan:0x40a63) + ) + (i32.const 688529440) + (i32.const 1751478890) + ) + ) + ) + ) + (i32.const 1935947830) + ) + ) + (func $unexitable-loops-result (; 37 ;) (type $6) (param $0 i32) (result i64) + (loop $label$0 + (loop $label$1 + (br_if $label$0 + (i32.load8_s + (i32.const 201460482) + ) + ) + (block + (block $label$3 + (br_if $label$1 + (get_local $0) + ) + ) + (br $label$1) + ) + ) + ) + ) + (func $untaken-br-with-concrete-last-element (; 38 ;) (type $1) + (block $label$8 + (block $label$11 + (block $label$14 + (br_if $label$8 + (br $label$8) + ) + ) + ) + ) + ) + (func $untaken-br-with-concrete-last-element2 (; 39 ;) (type $2) (result i32) + (block $label$8 (result i32) + (block $label$11 (result i32) + (block $label$14 (result i32) + (br_if $label$14 + (i32.const 102) + (br $label$11 + (i32.const 103) + ) + ) + ) + ) + ) + ) + (func $untaken-br_if-then-if (; 40 ;) (type $1) + (block $label$0 + (br_if $label$0 + (unreachable) + ) + (if + (i32.const 0) + (nop) + ) + ) + ) + (func $unreachable-if-that-could-be-a-br_if (; 41 ;) (type $7) (result i64) + (loop $label$3 (result i64) + (drop + (if (result f64) + (unreachable) + (f64.const 1) + (br $label$3) + ) + ) + (i64.const 1) + ) + ) + (func $nop-br-might-update-type (; 42 ;) (type $1) + (block $label$39 + (drop + (if (result i32) + (unreachable) + (if (result i32) + (i32.const 1) + (br $label$39) + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + ) + (func $no-flow-through-if-without-else (; 43 ;) (type $8) (result f32) + (local $0 i32) + (local $2 f32) + (block $label$0 (result f32) + (if (result f32) + (get_local $0) + (block $label$11 + (return + (f32.const 239) + ) + (if + (i32.const 0) + (return + (get_local $2) + ) + ) + ) + (f32.const -9223372036854775808) + ) + ) + ) + (func $unreachable-return-loop-value (; 44 ;) (type $7) (result i64) + (loop $loop + (if + (i32.const 1) + (block $block + (br_if $block + (br $loop) + ) + (br $loop) + ) + ) + (br $loop) + ) + ) + (func $obviously-flows-out-maybe (; 45 ;) (type $9) (param $var$0 i32) (result f32) + (block $label$1 (result f32) + (br $label$1 + (f32.const 1) + ) + (loop $label$5 + (if + (i32.const 11) + (block $label$8 + (br_if $label$8 + (unreachable) + ) + (br $label$5) + ) + ) + (br $label$5) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/remove-unused-brs.wast b/src/binaryen/test/passes/remove-unused-brs.wast new file mode 100644 index 0000000000..731a9f88f5 --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-brs.wast @@ -0,0 +1,1043 @@ +(module + (memory 256 256) + (type $0 (func (param i32))) + (type $1 (func)) + (type $2 (func (result i32))) + (func $b0-yes (type $0) (param $i1 i32) + (block $topmost + (br $topmost) + ) + ) + (func $b1 (type $0) (param $i1 i32) + (block $topmost + (block + (drop + (i32.const 0) + ) + (br $topmost) + ) + ) + ) + (func $b2 (type $0) (param $i1 i32) + (block $topmost + (block $inner + (br $topmost) + ) + ) + ) + (func $b3-yes (type $0) (param $i1 i32) + (block $topmost + (block $inner + (br $inner) + ) + ) + ) + (func $b4 (type $0) (param $i1 i32) + (block $topmost + (block $inner + (block + (drop + (i32.const 0) + ) + (br $topmost) + ) + ) + ) + ) + (func $b5 (type $0) (param $i1 i32) + (block $topmost + (block $inner + (block + (drop + (i32.const 0) + ) + (br $inner) + ) + ) + ) + ) + (func $b6 (type $0) (param $i1 i32) + (block $topmost + (br_if $topmost + (i32.const 1) + ) + ) + ) + (func $b7 (type $0) (param $i1 i32) + (block $topmost + (block + (drop + (i32.const 0) + ) + (br_if $topmost + (i32.const 1) + ) + ) + ) + ) + (func $b8 (type $0) (param $i1 i32) + (block $topmost + (block $inner + (br_if $topmost + (i32.const 1) + ) + ) + ) + ) + (func $b9 (type $0) (param $i1 i32) + (block $topmost + (block $inner + (br_if $topmost + (i32.const 1) + ) + ) + ) + ) + (func $b10 (type $0) (param $i1 i32) + (block $topmost + (block $inner + (block + (drop + (i32.const 0) + ) + (br_if $topmost + (i32.const 1) + ) + ) + ) + ) + ) + (func $b11 (type $0) (param $i1 i32) + (block $topmost + (block $inner + (block + (drop + (i32.const 0) + ) + (br_if $inner + (i32.const 1) + ) + ) + ) + ) + ) + (func $b12-yes (type $1) + (block $topmost + (if + (i32.const 1) + (block $block1 + (drop + (i32.const 12) + ) + (block + (drop + (i32.const 1) + ) + (br $topmost) + ) + ) + (block $block3 + (drop + (i32.const 27) + ) + (block + (drop + (i32.const 2) + ) + (br $topmost) + ) + ) + ) + ) + ) + (func $b13 (type $2) (result i32) + (block $topmost (result i32) + (if + (i32.const 1) + (block $block1 + (drop + (i32.const 12) + ) + (drop + (br_if $topmost + (i32.const 1) + (i32.const 1) + ) + ) + ) + (block $block3 + (drop + (i32.const 27) + ) + (br $topmost + (i32.const 2) + ) + ) + ) + (i32.const 3) + ) + ) + (func $b14 (type $2) (result i32) + (block $topmost (result i32) + (if (result i32) + (i32.const 1) + (block $block1 (result i32) + (i32.const 12) + ) + (block $block3 (result i32) + (i32.const 27) + ) + ) + ) + ) + (func $b15 (type $1) + (block $topmost + (if + (i32.const 17) + (br $topmost) + ) + ) + ) + (func $b15b (type $1) + (block $topmost + (if + (i32.const 18) + (block + (drop + (i32.const 0) + ) + (br $topmost) + ) + ) + ) + ) + (func $b16 (type $1) + (block $a + (block $b + (block $c + (br $a) + ) + (br $a) + ) + (br $a) + ) + (block $a + (block $b + (block $c + (br $c) + ) + (br $b) + ) + (br $a) + ) + (block $a + (block $b + (block $c + (br $b) + ) + (br $a) + ) + (br $a) + ) + ) + (func $b17 (type $1) + (block $a + (if + (i32.const 0) + (block $block1 + (br $a) + ) + (block $block3 + (br $a) + ) + ) + ) + (block $a + (if + (i32.const 0) + (drop + (i32.const 1) + ) + (block $block6 + (br $a) + ) + ) + ) + (block $a + (if + (i32.const 0) + (block $block8 + (br $a) + ) + (drop + (i32.const 1) + ) + ) + ) + (block $c + (block $b + (if + (i32.const 0) + (block $block11 + (br $b) + ) + (block $block13 + (br $c) + ) + ) + ) + ) + ) + (func $ret-1 (type $1) + (return) + ) + (func $ret-2 (type $1) + (block $block0 + (block $block1 + (return) + ) + ) + ) + (func $ret-3 (type $1) + (block $block0 + (if + (i32.const 0) + (return) + (block $block3 + (return) + ) + ) + ) + ) + (func $ret-value (type $2) (result i32) + (block $block0 + (block $block1 + (return + (i32.const 1) + ) + ) + ) + ) + (func $no-select-but-the-last (type $1) + (block $a + (if + (i32.const 0) + (drop + (i32.const 1) + ) + (block $block2 + (block + (drop + (i32.const 2) + ) + (br $a) + ) + (drop + (i32.const 3) + ) + ) + ) + (if + (i32.const 0) + (block $block4 + (block + (drop + (i32.const 2) + ) + (br $a) + ) + (drop + (i32.const 3) + ) + ) + (drop + (i32.const 1) + ) + ) + (if + (block $block6 (result i32) + (block + (drop + (i32.const 2) + ) + (br $a) + ) + (i32.const 3) + ) + (drop + (i32.const 0) + ) + (drop + (i32.const 1) + ) + ) + (if + (block $a (result i32) + (br $a + (i32.const 0) + ) + ) + (block $a + (block + (drop + (i32.const 1) + ) + (br $a) + ) + ) + (block $a + (block + (drop + (i32.const 2) + ) + (br $a) + ) + ) + ) + ) + ) + (func $side-effects-and-order (type $2) (result i32) + (local $x i32) + (block $do-once$0 + (if + (call $b13) + (block + (drop + (i32.const 0) + ) + (br $do-once$0) + ) + ) + (drop + (i32.const 1) + ) + ) + (block $do-once$0 + (if + (call $b13) + (block + (drop + (call $b14) + ) + (br $do-once$0) + ) + ) + (drop + (i32.const 1) + ) + ) + (block $do-once$0 + (if + (i32.const 0) + (block + (drop + (call $b14) + ) + (br $do-once$0) + ) + ) + (drop + (i32.const 1) + ) + ) + (block $do-once$0 (result i32) + (if + (tee_local $x + (i32.const 1) + ) + (br $do-once$0 + (tee_local $x + (i32.const 2) + ) + ) + ) + (i32.const 1) + ) + ) + (func $loops + (loop $in + (block $out + (if (i32.const 0) (br $out)) + (br $in) ;; we can conditionalize this, and then the br out can vanish + ) + ) + (loop $in + (br $in) + ) + (loop + (block $out + (if (i32.const 0) (br $out)) + (br $out) + ) + ) + (loop $in + (block $out + (if (i32.const 0) (br $out)) + (br $out) + ) + ) + (loop $in) + (loop $in + (block $out) + ) + (loop $in + (block $out + (if (i32.const 0) (br $out)) + (br_if $in (i32.const 1)) + ) + ) + (loop $in + (block $out + (if (i32.const 0) (br $in)) + (br $out) + ) + ) + (loop $in + (block $out + (if (i32.const 0) (unreachable)) + (br $in) + ) + ) + (loop $in + (block $out + (if (i32.const 0) + (block + (call $loops) + (br $out) + ) + ) + (br $in) + ) + ) + (loop $in-todo ;; br_if into if + (block $out-todo + (if (i32.const 0) (br $out-todo)) + (call $loops) + (br $in-todo) + ) + ) + (loop $in + (block $out + (if (i32.const 0) + (br $out) + (call $loops) + ) + (br $in) + ) + ) + (loop $in + (block $out + (if (i32.const 0) + (call $loops) + (br $out) + ) + (br $in) + ) + ) + (loop $in + (block $out + (if (i32.const 0) + (block + (drop (i32.const 1)) + (call $loops) + ) + (br $out) + ) + (br $in) + ) + ) + (loop $in + (block $out + (if (i32.const 0) + (br $out) + (call $loops) + ) + (drop (i32.const 100)) + (br $in) + ) + ) + (loop $in + (block $out + (if (i32.const 0) + (call $loops) + (br $out) + ) + (drop (i32.const 101)) + (br $in) + ) + ) + (loop $in + (block $out + (if (i32.const 0) + (block + (drop (i32.const 1)) + (call $loops) + ) + (br $out) + ) + (drop (i32.const 102)) + (br $in) + ) + ) + (loop $in + (block $out + (if (i32.const 0) + (br $out) + (call $loops) + ) + (return) + (br $in) + ) + ) + (loop $in + (block $out + (if (i32.const 0) + (br $out) + (call $loops) + ) + (br $out) + (br $in) + ) + ) + (loop $in + (block $out + (if (i32.const 0) + (br $out) + (call $loops) + ) + (drop + (block $out2 (result i32) + (br $out2 (i32.const 1)) + ) + ) + (br $in) + ) + ) + (loop $in + (block $out + (br_if $out (i32.const 0)) + (br $in) + ) + ) + (loop $in-todo2 ;; if-ify + (block $out-todo2 + (br_if $out-todo2 (i32.const 0)) + (call $loops) + (br $in-todo2) + ) + ) + (loop $in + (block $out + (br $out) + (br $in) + ) + ) + (loop $in + (block $out + (br_if $in (i32.const 0)) + (br $in) + ) + ) + (loop $in-not ;; do NOT if-ify, the block can't be removed + (block $out-not + (br_if $out-not (i32.const -1)) + (br_if $out-not (i32.const 0)) + (call $loops) + (br $in-not) + ) + ) + (loop $in-todo2 ;; if-ify a slice with 2 things + (block $out-todo2 + (br_if $out-todo2 (i32.const 0)) + (call $loops) + (drop (i32.const 1)) + (br $in-todo2) + ) + ) + ) + (func $br_if_in_block (result i32) + (block $outval (result i32) + (block $in + (if (i32.const 1) (br $in) (br $in)) + (drop (i32.const 2)) + (if (i32.const 3) (unreachable) (br $in)) + (drop (i32.const 4)) + (if (i32.const 5) (br $in) (unreachable)) + (drop (i32.const 6)) + ) + (if (result i32) (i32.const 6) (br $outval (i32.const 7)) (i32.const 8)) + ) + ) + (func $threading + (drop + (block $value-out (result i32) + (block $value-in (result i32) + (block $out + (block $in + (if (i32.const 1) + (br $in) + ) + (br_if $in (i32.const 2)) + (br $value-in (i32.const 3)) + ) + (br $out) + ) + (i32.const 4) + ) + ) + ) + (block $stack1 + (block $stack2 + (block $stack3 + (block $stack4 + (if (i32.const 1) + (br $stack4) + ) + (unreachable) + ) + (br $stack3) + ) + (br $stack2) + ) + (br $stack1) + ) + ) + (func $if-to-br_if-conflict (param $x i32) (param $y i32) (result i32) + (block $leave + (set_local $y + (block $out (result i32) + (if + (get_local $x) + (br $out + (block (result i32) + (set_local $x (i32.const 0)) + (i32.const 1) + ) + ) + (br_if $leave (i32.const 1)) + ) + (unreachable) + ) + ) + ) + (i32.add (get_local $x) (get_local $y)) + ) + (func $if-to-br_if-conflict2 (param $x i32) (param $y i32) (result i32) + (block $leave + (set_local $y + (block $out (result i32) + (if + (get_local $x) + (br_if $leave (i32.const 1)) + (br $out + (block (result i32) + (set_local $x (i32.const 0)) + (i32.const 1) + ) + ) + ) + (unreachable) + ) + ) + ) + (i32.add (get_local $x) (get_local $y)) + ) + (func $if-to-br_if-value-sideeffect (param $x i32) (param $y i32) (result i32) + (block $leave + (set_local $y + (block $out (result i32) + (if + (get_local $x) + (br $out + (block (result i32) + (drop (call $if-to-br_if-value-sideeffect (i32.const 0) (i32.const 1))) + (nop) + (i32.const 1) + ) + ) + ) + (unreachable) + ) + ) + ) + (i32.add (get_local $x) (get_local $y)) + ) + (func $fuzz (param $j i32) (param $g i32) + (block $label$break$c + (loop $label$continue$d + (block $label$break$d + (if + (i32.lt_s + (get_local $j) + (i32.const 2147483640) + ) + (block $x + (block $y + (block $z + (br_if $y + (get_local $j) + ) + (br $x) ;; don't be confused by this + ) + (nop) ;; get me to the store! + ) + ) + (block $switch$26 + (nop) + ) + ) + (i32.store + (i32.const 5724) + (i32.const -254899267) + ) + (br $label$continue$d) + ) + ) + ) + ) + (func $iffify + (block $yes + (br_if $yes + (i32.const 0) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + ) + (block $no + (br_if $no + (i32.const 0) + ) + (drop (i32.const 1)) + (br $no) + (drop (i32.const 2)) + ) + (block $no2 + (br_if $no2 + (i32.const 0) + ) + ) + (block $no3 + (br $no3) + (drop (i32.const 1)) + (drop (i32.const 2)) + ) + (block $no5 + (block $no4 + (br_if $no5 + (i32.const 0) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + ) + ) + ) + (func $loop-if (result i32) + (block $outer (result i32) + (loop $typed (result i32) + ;; we can move the br after us into our if-else, which means we are the final + ;; element in the block, + (if + (i32.const 2) + (block + (drop (call $loop-if)) + (br $outer (i32.const 0)) + ) + ) + (br $typed) + ) + ) + ) + (func $block-break (param $0 i32) + (block $block$7$break + (block $shape$6$continue + (call $block-break (i32.const 1)) + (br $block$7$break) + ) + ) + ) + (func $loop-break (param $0 i32) + (block $block$7$break + (loop $shape$6$continue + (call $loop-break (i32.const 1)) + (br_if $shape$6$continue + (get_local $0) + ) + (br $block$7$break) + ) + ) + ) + (func $untaken-brs-might-prevent-block-removal (param $0 f32) (param $1 i32) (param $2 f32) (param $3 i32) (param $4 i32) (param $5 f64) (param $6 f32) (result i32) + (block $label$0 (result i32) + (block $label$1 ;; this block has no taken brs, but we can't remove it without removing them first + (br_if $label$1 + (i32.const 607395945) + ) + (br_if $label$1 + (i32.load16_s offset=3 align=1 + (select + (call $untaken-brs-might-prevent-block-removal + (f32.const 1.4904844647389837e-07) + (br_if $label$0 + (i32.store16 offset=4 align=1 + (i32.const 1900641) + (br $label$0 + (i32.const 1628075109) + ) + ) + (i32.const 1764950569) + ) + (f32.const 1.1910939690100655e-32) + (i32.const 1628057906) + (i32.const 859068982) + (f64.const 2.524518840347722e-258) + (f32.const -nan:0x40a63) + ) + (i32.const 688529440) + (i32.const 1751478890) + ) + ) + ) + ) + (i32.const 1935947830) + ) + ) + (func $unexitable-loops-result (param $0 i32) (result i64) + (loop $label$0 + (loop $label$1 + (if + (i32.load8_s + (i32.const 201460482) + ) + (br $label$0) + (block $label$3 + (br_if $label$3 + (get_local $0) + ) + ) + ) + (br $label$1) + ) + ) + ) + (func $untaken-br-with-concrete-last-element + (block $label$8 + (block $label$11 + (block $label$14 + (br_if $label$14 + (br $label$11 + ) + ) + ) + ) + ) + ) + (func $untaken-br-with-concrete-last-element2 (result i32) + (block $label$8 (result i32) + (block $label$11 (result i32) + (block $label$14 (result i32) + (br_if $label$14 + (i32.const 102) + (br $label$11 + (i32.const 103) + ) + ) + ) + ) + ) + ) + (func $untaken-br_if-then-if + (block $label$0 + (br_if $label$0 + (unreachable) + ) + (if + (i32.const 0) + (nop) + ) + ) + ) + (func $unreachable-if-that-could-be-a-br_if (result i64) + (loop $label$3 (result i64) + (drop + (if (result f64) + (unreachable) + (f64.const 1) + (br $label$3) + ) + ) + (i64.const 1) + ) + ) + (func $nop-br-might-update-type + (block $label$39 + (drop + (if (result i32) + (unreachable) + (if (result i32) + (i32.const 1) + (br $label$39) ;; if we nop this, then the parent type must change + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + ) + (func $no-flow-through-if-without-else (result f32) + (local $0 i32) + (local $2 f32) + (block $label$0 + (if + (get_local $0) + (block $label$11 + (return + (f32.const 239) + ) + (if + (i32.const 0) + (return + (get_local $2) + ) + ) + ) + (return + (f32.const -9223372036854775808) + ) + ) + ) + ) + (func $unreachable-return-loop-value (result i64) + (loop $loop + (if + (i32.const 1) + (block $block + (br_if $block + (br $loop) + ) + (br $loop) + ) + ) + (br $loop) ;; we 100% go back to the loop top, the loop is never exited. but opts move code around so that is not obvious anymore, and the loop becomes a nop, but the func has a return value + ) + ) + (func $obviously-flows-out-maybe (param $var$0 i32) (result f32) + (block $label$1 (result f32) + (br $label$1 + (f32.const 1) + ) + (loop $label$5 + (if + (i32.const 11) + (block $label$8 ;; this block is none - it has a break, even if not taken - and so looks like it might flow out, + (br_if $label$8 ;; and so we can't move it outside to be the end of the loop's block + (unreachable) + ) + (br $label$5) + ) + ) + (br $label$5) + ) + ) + ) +) + diff --git a/src/binaryen/test/passes/remove-unused-brs_precompute_vacuum_remove-unused-brs.txt b/src/binaryen/test/passes/remove-unused-brs_precompute_vacuum_remove-unused-brs.txt new file mode 100644 index 0000000000..be58b2f90d --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-brs_precompute_vacuum_remove-unused-brs.txt @@ -0,0 +1,14 @@ +(module + (type $0 (func (param i32) (result f64))) + (global $global$3 (mut f64) (f64.const 0)) + (memory $0 0) + (func $1 (; 0 ;) (type $0) (param $x i32) (result f64) + (local $var$0 f64) + (block $label$0 (result f64) + (set_local $var$0 + (f64.const 0) + ) + (f64.const -3.4) + ) + ) +) diff --git a/src/binaryen/test/passes/remove-unused-brs_precompute_vacuum_remove-unused-brs.wast b/src/binaryen/test/passes/remove-unused-brs_precompute_vacuum_remove-unused-brs.wast new file mode 100644 index 0000000000..5dfbfa1023 --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-brs_precompute_vacuum_remove-unused-brs.wast @@ -0,0 +1,29 @@ +(module + (global $global$3 (mut f64) (f64.const 0)) + (func $1 (param $x i32) (result f64) + (local $var$0 f64) + (block $label$0 + (set_local $var$0 + (f64.const 0) + ) + (if + (i32.gt_s + (i32.const 9) + (i32.const 0) + ) + (return + (f64.const -3.4) + ) + ) + (if + (get_local $x) + (return + (f64.const 5.6) + ) + ) + (return + (f64.const 1.2) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/remove-unused-brs_shrink-level=1.txt b/src/binaryen/test/passes/remove-unused-brs_shrink-level=1.txt new file mode 100644 index 0000000000..ac47d9f0e1 --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-brs_shrink-level=1.txt @@ -0,0 +1,162 @@ +(module + (type $0 (func (param i32))) + (type $1 (func)) + (type $2 (func (result i32))) + (memory $0 256 256) + (func $b14 (; 0 ;) (type $2) (result i32) + (drop + (select + (block $block1 (result i32) + (i32.const 12) + ) + (block $block3 (result i32) + (i32.const 27) + ) + (i32.const 1) + ) + ) + (drop + (if (result i32) + (i32.const 1) + (i32.load + (i32.const 10) + ) + (i32.const 27) + ) + ) + (drop + (if (result i32) + (i32.const 1) + (i32.rem_s + (i32.const 11) + (i32.const 12) + ) + (i32.const 27) + ) + ) + (drop + (if (result i32) + (i32.const 1) + (i32.trunc_u/f64 + (f64.const 12.34) + ) + (i32.const 27) + ) + ) + (i32.const 0) + ) + (func $join-br_ifs (; 1 ;) (type $1) + (block $out + (br_if $out + (i32.or + (i32.const 1) + (i32.const 2) + ) + ) + (nop) + (br_if $out + (i32.const 3) + ) + ) + (block $out2 + (block $out3 + (br_if $out2 + (i32.const 1) + ) + (br_if $out3 + (i32.const 2) + ) + (br_if $out2 + (i32.const 3) + ) + ) + (unreachable) + ) + (block $out4 + (block $out5 + (br_if $out4 + (i32.const 1) + ) + (br_if $out5 + (i32.or + (i32.const 2) + (i32.const 3) + ) + ) + (nop) + ) + (unreachable) + ) + (block $out6 + (block $out7 + (br_if $out6 + (i32.or + (i32.const 1) + (i32.const 2) + ) + ) + (nop) + (br_if $out7 + (i32.const 3) + ) + ) + (unreachable) + ) + (if + (i32.eqz + (i32.or + (call $b14) + (i32.const 0) + ) + ) + (block + (nop) + (nop) + ) + ) + (block $out83 + (br_if $out83 + (i32.const 1) + ) + (br_if $out83 + (call $b14) + ) + ) + ) + (func $join-and-it-becomes-unreachable (; 2 ;) (type $1) + (block $label$1 + (block $block + (br_if $label$1 + (i32.load8_u + (i32.const -93487262) + ) + ) + (br_if $label$1 + (loop $label$5 + (br $label$5) + ) + ) + ) + ) + ) + (func $br-if-unreachable-pair (; 3 ;) (type $1) + (block $label$14 + (br_if $label$14 + (unreachable) + ) + (br_if $label$14 + (i32.const 0) + ) + ) + ) + (func $br-if-unreachable-pair2 (; 4 ;) (type $1) + (block $label$14 + (br_if $label$14 + (i32.const 0) + ) + (br_if $label$14 + (unreachable) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/remove-unused-brs_shrink-level=1.wast b/src/binaryen/test/passes/remove-unused-brs_shrink-level=1.wast new file mode 100644 index 0000000000..11510dea73 --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-brs_shrink-level=1.wast @@ -0,0 +1,117 @@ +(module + (memory 256 256) + (type $0 (func (param i32))) + (type $1 (func)) + (type $2 (func (result i32))) + (func $b14 (type $2) + (drop + (if (result i32) ;; with shrinking, this can become a select + (i32.const 1) + (block $block1 (result i32) + (i32.const 12) + ) + (block $block3 (result i32) + (i32.const 27) + ) + ) + ) + (drop + (if (result i32) + (i32.const 1) + (i32.load (i32.const 10)) ;; load may have side effects, unless ignored + (i32.const 27) + ) + ) + (drop + (if (result i32) + (i32.const 1) + (i32.rem_s (i32.const 11) (i32.const 12)) ;; rem may have side effects, unless ignored + (i32.const 27) + ) + ) + (drop + (if (result i32) + (i32.const 1) + (i32.trunc_u/f64 (f64.const 12.34)) ;; float to int may have side effects, unless ignored + (i32.const 27) + ) + ) + (i32.const 0) + ) + (func $join-br_ifs + (block $out + (br_if $out (i32.const 1)) + (br_if $out (i32.const 2)) + (br_if $out (i32.const 3)) + ) + (block $out2 + (block $out3 + (br_if $out2 (i32.const 1)) + (br_if $out3 (i32.const 2)) + (br_if $out2 (i32.const 3)) + ) + (unreachable) + ) + (block $out4 + (block $out5 + (br_if $out4 (i32.const 1)) + (br_if $out5 (i32.const 2)) + (br_if $out5 (i32.const 3)) + ) + (unreachable) + ) + (block $out6 + (block $out7 + (br_if $out6 (i32.const 1)) + (br_if $out6 (i32.const 2)) + (br_if $out7 (i32.const 3)) + ) + (unreachable) + ) + (block $out8 + (br_if $out8 (call $b14)) ;; side effect + (br_if $out8 (i32.const 0)) + ) + (block $out8 + (br_if $out8 (i32.const 1)) + (br_if $out8 (call $b14)) ;; side effect + ) + ) + (func $join-and-it-becomes-unreachable + (block $label$1 + (block + (br_if $label$1 + (i32.load8_u + (i32.const -93487262) + ) + ) + (br_if $label$1 + (loop $label$5 ;; this is unreachable (infinite loop, no exit) + (br $label$5) + ) + ) + ) + ) + ) + (func $br-if-unreachable-pair + (block $label$14 + (br_if $label$14 + (unreachable) + ) + (br_if $label$14 + (i32.const 0) + ) + ) + ) + (func $br-if-unreachable-pair2 + (block $label$14 + (br_if $label$14 + (i32.const 0) + ) + (br_if $label$14 + (unreachable) + ) + ) + ) +) + diff --git a/src/binaryen/test/passes/remove-unused-brs_shrink-level=1_ignore-implicit-traps.txt b/src/binaryen/test/passes/remove-unused-brs_shrink-level=1_ignore-implicit-traps.txt new file mode 100644 index 0000000000..8e865c39dd --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-brs_shrink-level=1_ignore-implicit-traps.txt @@ -0,0 +1,126 @@ +(module + (type $0 (func (param i32))) + (type $1 (func)) + (type $2 (func (result i32))) + (memory $0 256 256) + (func $b14 (; 0 ;) (type $2) (result i32) + (drop + (select + (block $block1 (result i32) + (i32.const 12) + ) + (block $block3 (result i32) + (i32.const 27) + ) + (i32.const 1) + ) + ) + (drop + (select + (i32.load + (i32.const 10) + ) + (i32.const 27) + (i32.const 1) + ) + ) + (drop + (select + (i32.rem_s + (i32.const 11) + (i32.const 12) + ) + (i32.const 27) + (i32.const 1) + ) + ) + (drop + (select + (i32.trunc_u/f64 + (f64.const 12.34) + ) + (i32.const 27) + (i32.const 1) + ) + ) + (i32.const 0) + ) + (func $join-br_ifs (; 1 ;) (type $1) + (block $out + (br_if $out + (i32.or + (i32.const 1) + (i32.const 2) + ) + ) + (nop) + (br_if $out + (i32.const 3) + ) + ) + (block $out2 + (block $out3 + (br_if $out2 + (i32.const 1) + ) + (br_if $out3 + (i32.const 2) + ) + (br_if $out2 + (i32.const 3) + ) + ) + (unreachable) + ) + (block $out4 + (block $out5 + (br_if $out4 + (i32.const 1) + ) + (br_if $out5 + (i32.or + (i32.const 2) + (i32.const 3) + ) + ) + (nop) + ) + (unreachable) + ) + (block $out6 + (block $out7 + (br_if $out6 + (i32.or + (i32.const 1) + (i32.const 2) + ) + ) + (nop) + (br_if $out7 + (i32.const 3) + ) + ) + (unreachable) + ) + (if + (i32.eqz + (i32.or + (call $b14) + (i32.const 0) + ) + ) + (block + (nop) + (nop) + ) + ) + (block $out83 + (br_if $out83 + (i32.const 1) + ) + (br_if $out83 + (call $b14) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/remove-unused-brs_shrink-level=1_ignore-implicit-traps.wast b/src/binaryen/test/passes/remove-unused-brs_shrink-level=1_ignore-implicit-traps.wast new file mode 100644 index 0000000000..000658b918 --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-brs_shrink-level=1_ignore-implicit-traps.wast @@ -0,0 +1,81 @@ +(module + (memory 256 256) + (type $0 (func (param i32))) + (type $1 (func)) + (type $2 (func (result i32))) + (func $b14 (type $2) + (drop + (if (result i32) ;; with shrinking, this can become a select + (i32.const 1) + (block $block1 (result i32) + (i32.const 12) + ) + (block $block3 (result i32) + (i32.const 27) + ) + ) + ) + (drop + (if (result i32) + (i32.const 1) + (i32.load (i32.const 10)) ;; load may have side effects, unless ignored + (i32.const 27) + ) + ) + (drop + (if (result i32) + (i32.const 1) + (i32.rem_s (i32.const 11) (i32.const 12)) ;; rem may have side effects, unless ignored + (i32.const 27) + ) + ) + (drop + (if (result i32) + (i32.const 1) + (i32.trunc_u/f64 (f64.const 12.34)) ;; float to int may have side effects, unless ignored + (i32.const 27) + ) + ) + (i32.const 0) + ) + (func $join-br_ifs + (block $out + (br_if $out (i32.const 1)) + (br_if $out (i32.const 2)) + (br_if $out (i32.const 3)) + ) + (block $out2 + (block $out3 + (br_if $out2 (i32.const 1)) + (br_if $out3 (i32.const 2)) + (br_if $out2 (i32.const 3)) + ) + (unreachable) + ) + (block $out4 + (block $out5 + (br_if $out4 (i32.const 1)) + (br_if $out5 (i32.const 2)) + (br_if $out5 (i32.const 3)) + ) + (unreachable) + ) + (block $out6 + (block $out7 + (br_if $out6 (i32.const 1)) + (br_if $out6 (i32.const 2)) + (br_if $out7 (i32.const 3)) + ) + (unreachable) + ) + (block $out8 + (br_if $out8 (call $b14)) ;; side effect + (br_if $out8 (i32.const 0)) + ) + (block $out8 + (br_if $out8 (i32.const 1)) + (br_if $out8 (call $b14)) ;; side effect + ) + ) +) + diff --git a/src/binaryen/test/passes/remove-unused-module-elements.txt b/src/binaryen/test/passes/remove-unused-module-elements.txt new file mode 100644 index 0000000000..a577c187c7 --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-module-elements.txt @@ -0,0 +1,134 @@ +(module + (type $0 (func)) + (type $1 (func (param i32))) + (type $2 (func (param i32) (result i32))) + (table 1 1 anyfunc) + (elem (i32.const 0) $called_indirect) + (memory $0 0) + (export "memory" (memory $0)) + (export "exported" (func $exported)) + (export "other1" (func $other1)) + (export "other2" (func $other2)) + (start $start) + (func $start (; 0 ;) (type $0) + (call $called0) + ) + (func $called0 (; 1 ;) (type $0) + (call $called1) + ) + (func $called1 (; 2 ;) (type $0) + (nop) + ) + (func $called_indirect (; 3 ;) (type $0) + (nop) + ) + (func $exported (; 4 ;) (type $0) + (call $called2) + ) + (func $called2 (; 5 ;) (type $0) + (call $called2) + (call $called3) + ) + (func $called3 (; 6 ;) (type $0) + (call $called4) + ) + (func $called4 (; 7 ;) (type $0) + (call $called3) + ) + (func $other1 (; 8 ;) (type $1) (param $0 i32) + (call_indirect (type $0) + (i32.const 0) + ) + (call_indirect (type $0) + (i32.const 0) + ) + (call_indirect (type $0) + (i32.const 0) + ) + (call_indirect (type $0) + (i32.const 0) + ) + (call_indirect (type $1) + (i32.const 0) + (i32.const 0) + ) + (call_indirect (type $1) + (i32.const 0) + (i32.const 0) + ) + (drop + (call_indirect (type $2) + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call_indirect (type $2) + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call_indirect (type $2) + (i32.const 0) + (i32.const 0) + ) + ) + ) + (func $other2 (; 9 ;) (type $1) (param $0 i32) + (unreachable) + ) +) +(module + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) +) +(module + (type $0 (func)) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (elem (get_global $tableBase) $waka) + (data (get_global $memoryBase) "hello, world!") + (func $waka (; 0 ;) (type $0) + (nop) + ) +) +(module + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $1 (func (result i32))) + (type $2 (func)) + (import "env" "imported" (global $imported i32)) + (import "env" "_puts" (func $_puts (param i32) (result i32))) + (global $int (mut i32) (get_global $imported)) + (global $set (mut i32) (i32.const 100)) + (global $exp_glob i32 (i32.const 600)) + (memory $0 0) + (export "one" (func $one)) + (export "three" (func $three)) + (export "exp_glob" (global $exp_glob)) + (start $starter) + (func $one (; 1 ;) (type $1) (result i32) + (call $two) + ) + (func $two (; 2 ;) (type $1) (result i32) + (get_global $int) + ) + (func $three (; 3 ;) (type $2) + (call $four) + ) + (func $four (; 4 ;) (type $2) + (set_global $set + (i32.const 200) + ) + (drop + (call $_puts + (i32.const 300) + ) + ) + ) + (func $starter (; 5 ;) (type $2) + (nop) + ) +) diff --git a/src/binaryen/test/passes/remove-unused-module-elements.wast b/src/binaryen/test/passes/remove-unused-module-elements.wast new file mode 100644 index 0000000000..4dfb9300f5 --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-module-elements.wast @@ -0,0 +1,118 @@ +(module + (memory 0) + (start $start) + (type $0 (func)) + (type $0-dupe (func)) + (type $1 (func (param i32))) + (type $1-dupe (func (param i32))) + (type $2 (func (param i32) (result i32))) + (type $2-dupe (func (param i32) (result i32))) + (type $2-thrupe (func (param i32) (result i32))) + (export "memory" (memory $0)) + (export "exported" $exported) + (export "other1" $other1) + (export "other2" $other2) + (table 1 1 anyfunc) + (elem (i32.const 0) $called_indirect) + (func $start (type $0) + (call $called0) + ) + (func $called0 (type $0) + (call $called1) + ) + (func $called1 (type $0) + (nop) + ) + (func $called_indirect (type $0) + (nop) + ) + (func $exported (type $0-dupe) + (call $called2) + ) + (func $called2 (type $0-dupe) + (call $called2) + (call $called3) + ) + (func $called3 (type $0-dupe) + (call $called4) + ) + (func $called4 (type $0-dupe) + (call $called3) + ) + (func $remove0 (type $0-dupe) + (call $remove1) + ) + (func $remove1 (type $0-dupe) + (nop) + ) + (func $remove2 (type $0-dupe) + (call $remove2) + ) + (func $remove3 (type $0) + (call $remove4) + ) + (func $remove4 (type $0) + (call $remove3) + ) + (func $other1 (param i32) (type $1) + (call_indirect (type $0) (i32.const 0)) + (call_indirect (type $0) (i32.const 0)) + (call_indirect (type $0-dupe) (i32.const 0)) + (call_indirect (type $0-dupe) (i32.const 0)) + (call_indirect (type $1) (i32.const 0) (i32.const 0)) + (call_indirect (type $1-dupe) (i32.const 0) (i32.const 0)) + (drop (call_indirect (type $2) (i32.const 0) (i32.const 0))) + (drop (call_indirect (type $2-dupe) (i32.const 0) (i32.const 0))) + (drop (call_indirect (type $2-thrupe) (i32.const 0) (i32.const 0))) + ) + (func $other2 (param i32) (type $1-dupe) + (unreachable) + ) +) +(module ;; leave the table and memory alone + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) +) +(module + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) ;; used in init + (import "env" "tableBase" (global $tableBase i32)) ;; used in init + (data (get_global $memoryBase) "hello, world!") + (elem (get_global $tableBase) $waka) + (func $waka) ;; used in table +) +(module ;; one is exported, and one->two->int global, whose init->imported + (import "env" "imported" (global $imported i32)) + (import "env" "forgetme" (global $forgetme i32)) + (import "env" "_puts" (func $_puts (param i32) (result i32))) + (import "env" "forget_puts" (func $forget_puts (param i32) (result i32))) + (global $int (mut i32) (get_global $imported)) + (global $set (mut i32) (i32.const 100)) + (global $forget_global (mut i32) (i32.const 500)) + (global $exp_glob i32 (i32.const 600)) + (export "one" (func $one)) + (export "three" (func $three)) + (export "exp_glob" (global $exp_glob)) + (start $starter) + (func $one (result i32) + (call $two) + ) + (func $two (result i32) + (get_global $int) + ) + (func $three + (call $four) + ) + (func $four + (set_global $set (i32.const 200)) + (drop (call $_puts (i32.const 300))) + ) + (func $forget_implemented + (nop) + ) + (func $starter + (nop) + ) +) + diff --git a/src/binaryen/test/passes/remove-unused-names.txt b/src/binaryen/test/passes/remove-unused-names.txt new file mode 100644 index 0000000000..864dcca6c9 --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-names.txt @@ -0,0 +1,81 @@ +(module + (type $0 (func (param i32) (result i32))) + (type $1 (func)) + (type $2 (func (result i32))) + (memory $0 256 256) + (func $b0 (; 0 ;) (type $0) (param $i1 i32) (result i32) + (i32.const 0) + ) + (func $loops (; 1 ;) (type $1) + (block $out + (loop $in + (br $out) + (br $in) + ) + ) + (loop $in0 + (br $in0) + ) + (nop) + (block $out4 + (loop $in5 + (br $out4) + (br $in5) + ) + ) + (block $out6 + (loop $in7 + (br $out6) + (br $in7) + ) + ) + (loop $in8 + (block $out9 + (br $out9) + (br $in8) + ) + ) + (loop $in10 + (block $out11 + (br $out11) + (br $in10) + ) + ) + (block $out12 + (loop $in13 + (br $out12) + (br $in13) + ) + ) + ) + (func $merges (; 2 ;) (type $1) + (block $b + (br $b) + (br $b) + ) + (block $b15 + (br_table $b15 $b15 + (i32.const 3) + ) + ) + (block $b17 + (br_table $b17 $b17 + (i32.const 3) + ) + ) + ) + (func $merge-typed-with-unreachable-child (; 3 ;) (type $2) (result i32) + (local $0 f32) + (block $label$1 (result i32) + (br_if $label$1 + (i32.const 1) + (br_if $label$1 + (i32.const 0) + (br $label$1 + (i32.const 0) + ) + ) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/remove-unused-names.wast b/src/binaryen/test/passes/remove-unused-names.wast new file mode 100644 index 0000000000..a4c240f027 --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-names.wast @@ -0,0 +1,96 @@ +(module + (memory 256 256) + (type $0 (func (param i32) (result i32))) + (type $1 (func)) + (func $b0 (type $0) (param $i1 i32) (result i32) + (block $topmost (result i32) + (i32.const 0) + ) + ) + (func $loops (type $1) + (block $out + (loop $in + (br $out) + (br $in) + ) + ) + (loop $in + (br $in) + ) + (loop $in + (nop) + ) + (block $out + (loop $in + (block $out + (loop $in + (br $out) + (br $in) + ) + ) + ) + ) + (block $out + (loop $in + (br $out) + (br $in) + ) + ) + (loop $in + (block $out + (br $out) + (br $in) + ) + ) + (loop $in + (block $out + (br $out) + (br $in) + ) + ) + (block $out + (loop $in + (br $out) + (br $in) + ) + ) + ) + (func $merges (type $1) + (block $a + (block $b + (br $a) + (br $b) + ) + ) + (block $a + (block $b + (br_table $a $b + (i32.const 3) + ) + ) + ) + (block $a + (block $b + (br_table $b $a + (i32.const 3) + ) + ) + ) + ) + (func $merge-typed-with-unreachable-child (result i32) + (local $0 f32) + (block $label$0 (result i32) + (block $label$1 (result i32) + (br_if $label$1 + (i32.const 1) + (br_if $label$0 + (i32.const 0) + (br $label$0 + (i32.const 0) + ) + ) + ) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/remove-unused-names_code-folding.txt b/src/binaryen/test/passes/remove-unused-names_code-folding.txt new file mode 100644 index 0000000000..c037c95ef9 --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-names_code-folding.txt @@ -0,0 +1,1681 @@ +(module + (type $0 (func)) + (type $1 (func (param i32 i32) (result i32))) + (type $2 (func (result i32))) + (memory $0 0) + (func $ifs (; 0 ;) (type $0) + (if + (i32.const 0) + (nop) + ) + (block + (drop + (i32.const 0) + ) + (nop) + ) + (if + (i32.const 0) + (nop) + (unreachable) + ) + (drop + (block (result i32) + (drop + (i32.const 0) + ) + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + ) + (drop + (if (result i32) + (i32.const 0) + (i32.add + (i32.const 1) + (i32.const 2) + ) + (i32.add + (i32.const 1) + (i32.const 333333333) + ) + ) + ) + ) + (func $ifs-blocks (; 1 ;) (type $0) + (block + (drop + (i32.const 0) + ) + (block + (nop) + ) + ) + (block + (if + (i32.const 0) + (unreachable) + (block + ) + ) + (nop) + ) + (block + (if + (i32.const 0) + (block + ) + (unreachable) + ) + (nop) + ) + (if + (i32.const 0) + (block + (nop) + (unreachable) + ) + (nop) + ) + (if + (i32.const 0) + (nop) + (block + (nop) + (unreachable) + ) + ) + ) + (func $ifs-blocks-big (; 2 ;) (type $0) + (block + (drop + (i32.const 0) + ) + (block + (drop + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + ) + ) + (block + (if + (i32.const 0) + (unreachable) + (block + ) + ) + (drop + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + ) + (block + (if + (i32.const 0) + (block + ) + (unreachable) + ) + (drop + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + ) + (if + (i32.const 0) + (block + (drop + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + (unreachable) + ) + (drop + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + ) + (if + (i32.const 0) + (drop + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + (block + (drop + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + (unreachable) + ) + ) + ) + (func $ifs-blocks-long (; 3 ;) (type $0) + (block + (if + (i32.const 1) + (block + (drop + (i32.const -1234) + ) + (drop + (i32.const -1000) + ) + ) + (drop + (i32.const 999) + ) + ) + (drop + (i32.const 1) + ) + (nop) + (unreachable) + ) + (drop + (block (result i32) + (if + (i32.const 2) + (block + (drop + (i32.const -1234) + ) + (drop + (i32.const -1000) + ) + ) + (drop + (i32.const 999) + ) + ) + (drop + (i32.const 1) + ) + (nop) + (unreachable) + (i32.const 2) + ) + ) + (drop + (block (result i32) + (if + (i32.const 3) + (block + (drop + (i32.const -1234) + ) + (drop + (i32.const -1000) + ) + ) + (drop + (i32.const 999) + ) + ) + (drop + (i32.const 1) + ) + (nop) + (i32.const 2) + ) + ) + ) + (func $if-worth-it-i-dunno (; 4 ;) (type $0) + (block $folding-inner0 + (block + (if + (i32.const 0) + (if + (i32.const 0) + (block + (drop + (i32.const -1234) + ) + (drop + (i32.const -1000) + ) + (br $folding-inner0) + ) + (block + (drop + (i32.const 999) + ) + (drop + (i32.const 1) + ) + (br $folding-inner0) + ) + ) + ) + (if + (i32.const 0) + (block + (if + (i32.const 0) + (block + (drop + (i32.const -1234) + ) + (drop + (i32.const -1000) + ) + ) + (block + (drop + (i32.const 999) + ) + (drop + (i32.const 1) + ) + ) + ) + (unreachable) + (br $folding-inner0) + ) + ) + (if + (i32.const 0) + (block + (if + (i32.const 0) + (block + ) + (block + (drop + (i32.const 999) + ) + (drop + (i32.const 1) + ) + ) + ) + (br $folding-inner0) + ) + ) + (if + (i32.const 0) + (block + (if + (i32.const 0) + (block + (drop + (i32.const -1234) + ) + (drop + (i32.const -1000) + ) + ) + (block + ) + ) + (br $folding-inner0) + ) + ) + (block + (block + (if + (i32.const 9999) + (block + (drop + (i32.const -51234) + ) + (drop + (i32.const -51000) + ) + ) + (block + (drop + (i32.const 5999) + ) + (drop + (i32.const 51) + ) + ) + ) + (br $folding-inner0) + ) + ) + (drop + (block (result i32) + (block (result i32) + (if + (i32.const 9999) + (block + (drop + (i32.const -51234) + ) + (drop + (i32.const -51000) + ) + ) + (block + (drop + (i32.const 5999) + ) + (drop + (i32.const 51) + ) + ) + ) + (unreachable) + (i32.const 10) + ) + ) + ) + (block + (drop + (if (result i32) + (i32.const 9999) + (block (result i32) + (drop + (i32.const -51234) + ) + (drop + (i32.const -51000) + ) + (unreachable) + (i32.const 10) + ) + (block (result i32) + (drop + (i32.const 5999) + ) + (drop + (i32.const 51) + ) + (unreachable) + (i32.const 10) + ) + ) + ) + ) + ) + ) + (unreachable) + (unreachable) + ) + (func $no-grandparent (; 5 ;) (type $0) + (if + (i32.const 9999) + (block + (drop + (i32.const -51234) + ) + (drop + (i32.const -51000) + ) + (unreachable) + (unreachable) + ) + (block + (drop + (i32.const 5999) + ) + (drop + (i32.const 51) + ) + (unreachable) + (unreachable) + ) + ) + ) + (func $yes-grandparent (; 6 ;) (type $0) + (block + (if + (i32.const 9999) + (block + (drop + (i32.const -51234) + ) + (drop + (i32.const -51000) + ) + ) + (block + (drop + (i32.const 5999) + ) + (drop + (i32.const 51) + ) + ) + ) + (unreachable) + (unreachable) + ) + ) + (func $ifs-named-block (; 7 ;) (type $1) (param $x i32) (param $y i32) (result i32) + (block $out + (block $out2 + (block + (drop + (get_local $x) + ) + (block + (br_if $out + (get_local $y) + ) + (nop) + ) + ) + (block + (if + (get_local $x) + (br_if $out + (get_local $y) + ) + (br_if $out2 + (get_local $y) + ) + ) + (nop) + ) + (if + (i32.const 1234) + (if + (get_local $x) + (block + (nop) + (br_if $out + (get_local $y) + ) + (nop) + ) + (block + (nop) + (br_if $out2 + (get_local $y) + ) + (nop) + ) + ) + ) + (if + (get_local $x) + (block $left + (br_if $left + (get_local $y) + ) + (nop) + ) + (block + (br_if $out + (get_local $y) + ) + (nop) + ) + ) + (if + (get_local $x) + (block + (br_if $out + (get_local $y) + ) + (nop) + ) + (block $right + (br_if $right + (get_local $y) + ) + (nop) + ) + ) + ) + (return + (i32.const 10) + ) + ) + (return + (i32.const 20) + ) + ) + (func $block (; 8 ;) (type $0) + (block $x + (if + (i32.const 0) + (br $x) + ) + (if + (i32.const 0) + (br $x) + ) + (br $x) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + ) + (func $block2 (; 9 ;) (type $0) + (block $x + (if + (i32.const 0) + (block + (drop + (i32.const 1) + ) + (drop + (i32.const 333333) + ) + (br $x) + ) + ) + (if + (i32.const 0) + (block + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + (br $x) + ) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + (br $x) + ) + ) + (func $block3 (; 10 ;) (type $0) + (block $x + (if + (i32.const 0) + (block + (drop + (i32.const 1000) + ) + (br $x) + ) + ) + (if + (i32.const 0) + (block + (drop + (i32.const 2000) + ) + (drop + (i32.const 3000) + ) + (br $x) + ) + ) + (drop + (i32.const 4000) + ) + (drop + (i32.const 5000) + ) + (drop + (i32.const 6000) + ) + (br $x) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + ) + (func $mixture (; 11 ;) (type $0) + (block $out + (block + (drop + (i32.const 1) + ) + (block + (drop + (i32.const 2) + ) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (br $out) + ) + ) + ) + (block $out2 + (block + (if + (i32.const 1) + (drop + (i32.const 3) + ) + (block + (drop + (i32.const 4) + ) + (drop + (i32.const 5) + ) + ) + ) + (drop + (i32.const 2) + ) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (br $out2) + ) + ) + (block + (block $out3 + (block + (drop + (i32.const 1) + ) + (block + (br $out3) + ) + ) + (block + (drop + (i32.const 1) + ) + (block + (br $out3) + ) + ) + (br $out3) + ) + (drop + (i32.const 2) + ) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + ) + ) + (func $block-corners (; 12 ;) (type $0) + (block + (block $x + (if + (i32.const 0) + (br $x) + ) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + ) + (drop + (block $y (result i32) + (if + (i32.const 0) + (block + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + (br $y + (i32.const 3) + ) + ) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + (br $y + (i32.const 3) + ) + ) + ) + (drop + (block $z (result i32) + (if + (i32.const 0) + (block + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + (br $z + (i32.const 2) + ) + ) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + (i32.const 3) + ) + ) + (block $w + (if + (i32.const 0) + (block + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + (br_if $w + (i32.const 3) + ) + ) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + ) + (block $x1 + (if + (i32.const 0) + (block + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + (br $x1) + (nop) + ) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + ) + (block $side + (block $x2 + (br_table $x2 $side + (i32.const 0) + ) + (if + (i32.const 0) + (block + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + (br $x2) + ) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + ) + (block $x3 + (br_table $side $x3 + (i32.const 0) + ) + (if + (i32.const 0) + (block + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + (br $x3) + ) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + ) + ) + ) + (func $terminating (; 13 ;) (type $0) + (block $folding-inner0 + (block + (if + (i32.const 1) + (br $folding-inner0) + ) + (if + (i32.const 2) + (br $folding-inner0) + ) + (if + (i32.const 3) + (br $folding-inner0) + ) + ) + (return) + ) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (unreachable) + ) + (func $terminating-unreachable (; 14 ;) (type $0) + (block $folding-inner0 + (block + (if + (i32.const 1) + (br $folding-inner0) + ) + (if + (i32.const 2) + (br $folding-inner0) + ) + (if + (i32.const 3) + (br $folding-inner0) + ) + (unreachable) + ) + ) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (unreachable) + ) + (func $terminating-value (; 15 ;) (type $2) (result i32) + (block $folding-inner0 + (return + (block (result i32) + (if + (i32.const 1) + (br $folding-inner0) + ) + (if + (i32.const 2) + (br $folding-inner0) + ) + (if + (i32.const 3) + (br $folding-inner0) + ) + (i32.const 4) + ) + ) + ) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (unreachable) + ) + (func $terminating-just-2 (; 16 ;) (type $0) + (block $folding-inner0 + (block + (if + (i32.const 1) + (br $folding-inner0) + ) + (if + (i32.const 2) + (br $folding-inner0) + ) + (if + (i32.const 3) + (block + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (drop + (i32.const 10) + ) + (unreachable) + ) + ) + ) + (return) + ) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (unreachable) + ) + (func $terminating-shortness (; 17 ;) (type $0) + (block $folding-inner1 + (block + (block $folding-inner0 + (block + (if + (i32.const 1) + (br $folding-inner0) + ) + (if + (i32.const 2) + (br $folding-inner1) + ) + (if + (i32.const 3) + (block + (drop + (i32.const 10) + ) + (br $folding-inner0) + ) + ) + ) + (return) + ) + (nop) + (br $folding-inner1) + ) + ) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (unreachable) + ) + (func $terminating-multiple-separate (; 18 ;) (type $0) + (block $folding-inner1 + (block + (block $folding-inner0 + (block + (if + (i32.const 1) + (br $folding-inner0) + ) + (if + (i32.const 1) + (br $folding-inner0) + ) + (if + (i32.const 1) + (br $folding-inner1) + ) + (if + (i32.const 1) + (br $folding-inner1) + ) + ) + (return) + ) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (drop + (i32.const 1) + ) + (unreachable) + ) + ) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (drop + (i32.const 2) + ) + (unreachable) + ) + (func $terminating-just-worth-it (; 19 ;) (type $0) + (block $folding-inner0 + (block + (if + (i32.const 1) + (br $folding-inner0) + ) + (if + (i32.const 2) + (br $folding-inner0) + ) + (if + (i32.const 3) + (br $folding-inner0) + ) + ) + (return) + ) + (nop) + (nop) + (nop) + (unreachable) + ) + (func $terminating-not-worth-it (; 20 ;) (type $0) + (if + (i32.const 1) + (block + (nop) + (nop) + (unreachable) + ) + ) + (if + (i32.const 2) + (block + (nop) + (nop) + (unreachable) + ) + ) + (if + (i32.const 3) + (block + (nop) + (nop) + (unreachable) + ) + ) + ) + (func $terminating-return (; 21 ;) (type $0) + (block $folding-inner0 + (block + (if + (i32.const 1) + (br $folding-inner0) + ) + (if + (i32.const 2) + (br $folding-inner0) + ) + (if + (i32.const 3) + (br $folding-inner0) + ) + ) + (return) + ) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (return) + ) + (func $terminating-return-value (; 22 ;) (type $2) (result i32) + (block $folding-inner0 + (block + (if + (i32.const 1) + (br $folding-inner0) + ) + (if + (i32.const 2) + (br $folding-inner0) + ) + (if + (i32.const 3) + (br $folding-inner0) + ) + (if + (i32.const 3) + (block + (nop) + (return + (i32.add + (i32.const 111111111) + (i32.const 2222222) + ) + ) + ) + ) + (return + (i32.const 1234) + ) + ) + ) + (nop) + (return + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + ) + (func $terminating-fallthrough-value (; 23 ;) (type $2) (result i32) + (block $folding-inner0 + (return + (block (result i32) + (if + (i32.const 1) + (br $folding-inner0) + ) + (if + (i32.const 2) + (br $folding-inner0) + ) + (if + (i32.const 3) + (br $folding-inner0) + ) + (if + (i32.const 3) + (block + (nop) + (return + (i32.add + (i32.const 111111111) + (i32.const 2222222) + ) + ) + ) + ) + (i32.const 1234) + ) + ) + ) + (nop) + (return + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + ) + (func $big-return (; 24 ;) (type $2) (result i32) + (block $folding-inner0 + (block + (if + (i32.const 1) + (br $folding-inner0) + ) + (if + (i32.const 2) + (br $folding-inner0) + ) + (if + (i32.const 3) + (br $folding-inner0) + ) + (if + (i32.const 4) + (br $folding-inner0) + ) + (if + (i32.const 5) + (br $folding-inner0) + ) + (if + (i32.const 6) + (br $folding-inner0) + ) + (unreachable) + ) + ) + (return + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + ) + (func $return-mix (; 25 ;) (type $2) (result i32) + (block $folding-inner0 + (block + (if + (i32.const 1) + (br $folding-inner0) + ) + (if + (i32.const 2) + (br $folding-inner0) + ) + (if + (i32.const 3) + (br $folding-inner0) + ) + (if + (i32.const 4) + (br $folding-inner0) + ) + (if + (i32.const 3) + (return + (i32.add + (i32.const 1) + (i32.const 234567) + ) + ) + ) + (br $folding-inner0) + ) + ) + (return + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + ) + (func $just-unreachable (; 26 ;) (type $0) + (unreachable) + ) + (func $just-return (; 27 ;) (type $2) (result i32) + (return + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + ) + (func $drop-if-with-value-but-unreachable (; 28 ;) (type $0) + (if + (i32.const 0) + (nop) + ) + (block + (drop + (i32.const 0) + ) + (block + (nop) + ) + ) + (if + (i32.const 0) + (nop) + (unreachable) + ) + (nop) + (drop + (block (result i32) + (drop + (unreachable) + ) + (block (result i32) + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + ) + ) + (drop + (if (result i32) + (i32.const 0) + (i32.add + (i32.const 1) + (i32.const 2) + ) + (i32.add + (i32.const 1) + (i32.const 333333333) + ) + ) + ) + ) + (func $nested-control-flow (; 29 ;) (type $0) + (block $out + (block + (block $x + (if + (i32.const 0) + (br $x) + ) + (if + (i32.const 0) + (br $x) + ) + (br $x) + ) + (if + (i32.const 1) + (br $out) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + ) + (drop + (i32.const 3) + ) + ) + ) + (func $nested-control-flow-dangerous (; 30 ;) (type $0) + (block $folding-inner0 + (block $out + (block + (if + (i32.const 0) + (block + (if + (i32.const 1) + (br $out) + ) + (br $folding-inner0) + ) + ) + (if + (i32.const 0) + (block + (if + (i32.const 1) + (br $out) + ) + (br $folding-inner0) + ) + ) + (if + (i32.const 1) + (br $out) + ) + (br $folding-inner0) + ) + (drop + (i32.const 3) + ) + ) + (return) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + (return) + ) + (func $nested-control-flow-dangerous-but-ok (; 31 ;) (type $0) + (block $folding-inner0 + (block + (block $middle + (block + (if + (i32.const 0) + (block + (if + (i32.add + (i32.const 0) + (i32.const 1) + ) + (br $middle) + ) + (br $folding-inner0) + ) + ) + (if + (i32.const 0) + (block + (if + (i32.add + (i32.const 0) + (i32.const 1) + ) + (br $middle) + ) + (br $folding-inner0) + ) + ) + (if + (i32.add + (i32.const 0) + (i32.const 1) + ) + (br $middle) + ) + (br $folding-inner0) + ) + ) + (drop + (i32.const 3) + ) + ) + (return) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + (return) + ) + (func $nested-control-flow-dangerous-but-ok-b (; 32 ;) (type $0) + (block $out + (block $middle + (block + (if + (i32.const 0) + (block + (if + (i32.add + (i32.const 0) + (i32.const 1) + ) + (br $middle) + ) + (br $out) + ) + ) + (if + (i32.const 0) + (block + (if + (i32.add + (i32.const 0) + (i32.const 1) + ) + (br $middle) + ) + (br $out) + ) + ) + (if + (i32.add + (i32.const 0) + (i32.const 1) + ) + (br $middle) + ) + ) + ) + (unreachable) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + (drop + (i32.const 3) + ) + (drop + (i32.const 4) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + (drop + (i32.const 3) + ) + (drop + (i32.const 4) + ) + ) + (func $nested-control-flow-dangerous-but-ok-c (; 33 ;) (type $0) + (block $x + (block + (block $out + (block + (if + (i32.const 0) + (br $out) + ) + (if + (i32.const 0) + (br $out) + ) + (br $out) + ) + (unreachable) + ) + (if + (i32.add + (i32.const 0) + (i32.const 1) + ) + (br $x) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + ) + (unreachable) + ) + (drop + (i32.const 5) + ) + ) + (func $nested-control-flow-dangerous-but-ok-d (; 34 ;) (type $0) + (block + (block $out + (block + (if + (i32.const 0) + (br $out) + ) + (if + (i32.const 0) + (br $out) + ) + (br $out) + ) + ) + (block $x + (if + (i32.add + (i32.const 0) + (i32.const 1) + ) + (br $x) + ) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + ) + (drop + (i32.const 3) + ) + ) +) diff --git a/src/binaryen/test/passes/remove-unused-names_code-folding.wast b/src/binaryen/test/passes/remove-unused-names_code-folding.wast new file mode 100644 index 0000000000..35d95ba909 --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-names_code-folding.wast @@ -0,0 +1,1176 @@ +(module + (func $ifs + (if (i32.const 0) (nop)) + (if (i32.const 0) (nop) (nop)) + (if (i32.const 0) (nop) (unreachable)) + (drop + (if (result i32) (i32.const 0) + (i32.add (i32.const 1) (i32.const 2)) + (i32.add (i32.const 1) (i32.const 2)) + ) + ) + (drop + (if (result i32) (i32.const 0) + (i32.add (i32.const 1) (i32.const 2)) + (i32.add (i32.const 1) (i32.const 333333333)) + ) + ) + ) + (func $ifs-blocks + (if (i32.const 0) + (block + (nop) + ) + (block + (nop) + ) + ) + (if (i32.const 0) + (block + (unreachable) + (nop) + ) + (block + (nop) + ) + ) + (if (i32.const 0) + (block + (nop) + ) + (block + (unreachable) + (nop) + ) + ) + (if (i32.const 0) + (block + (nop) + (unreachable) + ) + (block + (nop) + ) + ) + (if (i32.const 0) + (block + (nop) + ) + (block + (nop) + (unreachable) + ) + ) + ) + (func $ifs-blocks-big + (if (i32.const 0) + (block + (drop (i32.add (i32.const 1) (i32.const 2))) + ) + (block + (drop (i32.add (i32.const 1) (i32.const 2))) + ) + ) + (if (i32.const 0) + (block + (unreachable) + (drop (i32.add (i32.const 1) (i32.const 2))) + ) + (block + (drop (i32.add (i32.const 1) (i32.const 2))) + ) + ) + (if (i32.const 0) + (block + (drop (i32.add (i32.const 1) (i32.const 2))) + ) + (block + (unreachable) + (drop (i32.add (i32.const 1) (i32.const 2))) + ) + ) + (if (i32.const 0) + (block + (drop (i32.add (i32.const 1) (i32.const 2))) + (unreachable) + ) + (block + (drop (i32.add (i32.const 1) (i32.const 2))) + ) + ) + (if (i32.const 0) + (block + (drop (i32.add (i32.const 1) (i32.const 2))) + ) + (block + (drop (i32.add (i32.const 1) (i32.const 2))) + (unreachable) + ) + ) + ) + (func $ifs-blocks-long + (if (i32.const 1) + (block + (drop (i32.const -1234)) + (drop (i32.const -1000)) + (drop (i32.const 1)) + (nop) + (unreachable) + ) + (block + (drop (i32.const 999)) + (drop (i32.const 1)) + (nop) + (unreachable) + ) + ) + (drop + (if (result i32) (i32.const 2) + (block (result i32) + (drop (i32.const -1234)) + (drop (i32.const -1000)) + (drop (i32.const 1)) + (nop) + (unreachable) + (i32.const 2) + ) + (block (result i32) + (drop (i32.const 999)) + (drop (i32.const 1)) + (nop) + (unreachable) + (i32.const 2) + ) + ) + ) + (drop + (if (result i32) (i32.const 3) + (block (result i32) + (drop (i32.const -1234)) + (drop (i32.const -1000)) + (drop (i32.const 1)) + (nop) + (i32.const 2) + ) + (block (result i32) + (drop (i32.const 999)) + (drop (i32.const 1)) + (nop) + (i32.const 2) + ) + ) + ) + ) + (func $if-worth-it-i-dunno + ;; just 2, so not worth it + (if (i32.const 0) ;; (put them in ifs, so no block outside which would make us more confident in creating a block in hopes it would vanish) + (if (i32.const 0) + (block + (drop (i32.const -1234)) + (drop (i32.const -1000)) + (unreachable) + (unreachable) + ) + (block + (drop (i32.const 999)) + (drop (i32.const 1)) + (unreachable) + (unreachable) + ) + ) + ) + ;; 3, so why not + (if (i32.const 0) ;; (put them in ifs, so no block outside which would make us more confident in creating a block in hopes it would vanish) + (if (i32.const 0) + (block + (drop (i32.const -1234)) + (drop (i32.const -1000)) + (unreachable) + (unreachable) + (unreachable) + ) + (block + (drop (i32.const 999)) + (drop (i32.const 1)) + (unreachable) + (unreachable) + (unreachable) + ) + ) + ) + ;; just 2, but we'll empty out a block + (if (i32.const 0) ;; (put them in ifs, so no block outside which would make us more confident in creating a block in hopes it would vanish) + (if (i32.const 0) + (block + (unreachable) + (unreachable) + ) + (block + (drop (i32.const 999)) + (drop (i32.const 1)) + (unreachable) + (unreachable) + ) + ) + ) + ;; just 2, but we'll empty out a block + (if (i32.const 0) ;; (put them in ifs, so no block outside which would make us more confident in creating a block in hopes it would vanish) + (if (i32.const 0) + (block + (drop (i32.const -1234)) + (drop (i32.const -1000)) + (unreachable) + (unreachable) + ) + (block + (unreachable) + (unreachable) + ) + ) + ) + ;; just two, but on a block, so we hope to merge, and can optimize here + (block $a-holding-block + (if (i32.const 9999) + (block + (drop (i32.const -51234)) + (drop (i32.const -51000)) + (unreachable) + (unreachable) + ) + (block + (drop (i32.const 5999)) + (drop (i32.const 51)) + (unreachable) + (unreachable) + ) + ) + ) + ;; with value + (drop + (block $b-holding-block (result i32) + (if (result i32) (i32.const 9999) + (block (result i32) + (drop (i32.const -51234)) + (drop (i32.const -51000)) + (unreachable) + (i32.const 10) + ) + (block (result i32) + (drop (i32.const 5999)) + (drop (i32.const 51)) + (unreachable) + (i32.const 10) + ) + ) + ) + ) + ;; oops, something in between + (block $c-holding-block + (drop + (if (result i32) (i32.const 9999) + (block (result i32) + (drop (i32.const -51234)) + (drop (i32.const -51000)) + (unreachable) + (i32.const 10) + ) + (block (result i32) + (drop (i32.const 5999)) + (drop (i32.const 51)) + (unreachable) + (i32.const 10) + ) + ) + ) + ) + ) + (func $no-grandparent + ;; if we had a parent block, we might optimize this + (if (i32.const 9999) + (block + (drop (i32.const -51234)) + (drop (i32.const -51000)) + (unreachable) + (unreachable) + ) + (block + (drop (i32.const 5999)) + (drop (i32.const 51)) + (unreachable) + (unreachable) + ) + ) + ) + (func $yes-grandparent + (block + (if (i32.const 9999) + (block + (drop (i32.const -51234)) + (drop (i32.const -51000)) + (unreachable) + (unreachable) + ) + (block + (drop (i32.const 5999)) + (drop (i32.const 51)) + (unreachable) + (unreachable) + ) + ) + ) + ) + (func $ifs-named-block (param $x i32) (param $y i32) (result i32) + (block $out + (block $out2 + (if (get_local $x) + (block + (br_if $out (get_local $y i32)) + (nop) + ) + (block + (br_if $out (get_local $y i32)) + (nop) + ) + ) + (if (get_local $x) + (block + (br_if $out (get_local $y i32)) + (nop) + ) + (block + (br_if $out2 (get_local $y i32)) + (nop) + ) + ) + (if (i32.const 1234) + (if (get_local $x) + (block + (nop) + (br_if $out (get_local $y i32)) + (nop) + ) + (block + (nop) + (br_if $out2 (get_local $y i32)) + (nop) + ) + ) + ) + (if (get_local $x) + (block $left + (br_if $left (get_local $y i32)) + (nop) + ) + (block + (br_if $out (get_local $y i32)) + (nop) + ) + ) + (if (get_local $x) + (block + (br_if $out (get_local $y i32)) + (nop) + ) + (block $right + (br_if $right (get_local $y i32)) + (nop) + ) + ) + ) + (return (i32.const 10)) + ) + (return (i32.const 20)) + ) + (func $block + (block $x + (if (i32.const 0) + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) + ) + ) + (if (i32.const 0) + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) + ) + ) + ;; no fallthrough, another thing to merge + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) + ) + ) + (func $block2 + (block $x + (if (i32.const 0) + (block + (drop (i32.const 1)) + (drop (i32.const 333333)) + (br $x) + ) + ) + (if (i32.const 0) + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) + ) + ) + ;; no fallthrough, another thing to merge + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) + ) + ) + (func $block3 + (block $x + (if (i32.const 0) + (block + (drop (i32.const 1000)) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) + ) + ) + (if (i32.const 0) + (block + (drop (i32.const 2000)) + (drop (i32.const 3000)) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) + ) + ) + (drop (i32.const 4000)) + (drop (i32.const 5000)) + (drop (i32.const 6000)) + ;; no fallthrough, another thing to merge + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) + ) + ) + (func $mixture + (block $out ;; then we reach the block, and the tail infos are stale, should ignore + (if (i32.const 1) ;; then we optimize the if, pushing those brs outside! + (block + (drop (i32.const 2)) ;; first we note the block tails for $out + (nop) (nop) (nop) (nop) (nop) (nop) ;; totally worth it + (br $out) + ) + (block + (drop (i32.const 2)) + (nop) (nop) (nop) (nop) (nop) (nop) + (br $out) + ) + ) + ) + (block $out2 + (if (i32.const 1) + (block + (drop (i32.const 3)) ;; leave something + (drop (i32.const 2)) + (nop) (nop) (nop) (nop) (nop) (nop) + (br $out2) + ) + (block + (drop (i32.const 4)) ;; leave something + (drop (i32.const 5)) ;; leave something + (drop (i32.const 2)) + (nop) (nop) (nop) (nop) (nop) (nop) + (br $out2) + ) + ) + ) + ;; now a case where do **do** want to fold for the block (which we can only do in a later pass) + (block $out3 + (if (i32.const 1) + (block + (drop (i32.const 2)) + (nop) (nop) (nop) (nop) (nop) (nop) + (br $out3) + ) + (block + (drop (i32.const 2)) + (nop) (nop) (nop) (nop) (nop) (nop) + (br $out3) + ) + ) + (if (i32.const 1) + (block + (drop (i32.const 2)) + (nop) (nop) (nop) (nop) (nop) (nop) + (br $out3) + ) + (block + (drop (i32.const 2)) + (nop) (nop) (nop) (nop) (nop) (nop) + (br $out3) + ) + ) + (drop (i32.const 2)) + (nop) (nop) (nop) (nop) (nop) (nop) + (br $out3) + ) + ) + (func $block-corners + ;; these should be merged + (block $x + (if (i32.const 0) + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + ) + ;; these should not + ;; values + (drop + (block $y (result i32) + (if (i32.const 0) + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $y (i32.const 3)) + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $y (i32.const 3)) + ) + ) + (drop + (block $z (result i32) + (if (i32.const 0) + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $z (i32.const 2)) + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (i32.const 3) + ) + ) + ;; condition + (block $w + (if (i32.const 0) + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br_if $w (i32.const 3)) + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + ) + ;; not at the end + (block $x1 + (if (i32.const 0) + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x1) + (nop) + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + ) + ;; switches + (block $side + (block $x2 + (br_table $x2 $side (i32.const 0)) + (if (i32.const 0) + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x2) + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + ) + (block $x3 + (br_table $side $x3 (i32.const 0)) + (if (i32.const 0) + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x3) + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + ) + ) + ) + (func $terminating + (if (i32.const 1) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) + ) + (if (i32.const 2) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) + ) + (if (i32.const 3) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) + ) + ) + (func $terminating-unreachable + (if (i32.const 1) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) + ) + (if (i32.const 2) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) + ) + (if (i32.const 3) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) + ) + (unreachable) + ) + (func $terminating-value (result i32) + (if (i32.const 1) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) + ) + (if (i32.const 2) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) + ) + (if (i32.const 3) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) + ) + (i32.const 4) + ) + (func $terminating-just-2 + (if (i32.const 1) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) + ) + (if (i32.const 2) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) + ) + (if (i32.const 3) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (drop (i32.const 10)) + (unreachable) + ) + ) + ) + (func $terminating-shortness + (if (i32.const 1) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) + ) + (if (i32.const 2) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) ;; shorter. we do the two long ones greedily, then the merged one and this can also be opted + (unreachable) + ) + ) + (if (i32.const 3) + (block + (drop (i32.const 10)) + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) + ) + ) + (func $terminating-multiple-separate + (if (i32.const 1) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (drop (i32.const 1)) + (unreachable) + ) + ) + (if (i32.const 1) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (drop (i32.const 1)) + (unreachable) + ) + ) + (if (i32.const 1) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (drop (i32.const 2)) + (unreachable) + ) + ) + (if (i32.const 1) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (drop (i32.const 2)) + (unreachable) + ) + ) + ) + (func $terminating-just-worth-it + (if (i32.const 1) + (block + (nop) (nop) (nop) + (unreachable) + ) + ) + (if (i32.const 2) + (block + (nop) (nop) (nop) + (unreachable) + ) + ) + (if (i32.const 3) + (block + (nop) (nop) (nop) + (unreachable) + ) + ) + ) + (func $terminating-not-worth-it + (if (i32.const 1) + (block + (nop) (nop) + (unreachable) + ) + ) + (if (i32.const 2) + (block + (nop) (nop) + (unreachable) + ) + ) + (if (i32.const 3) + (block + (nop) (nop) + (unreachable) + ) + ) + ) + (func $terminating-return + (if (i32.const 1) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (return) + ) + ) + (if (i32.const 2) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (return) + ) + ) + (if (i32.const 3) + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (return) + ) + ) + ) + (func $terminating-return-value (result i32) + (if (i32.const 1) + (block + (nop) + (return (i32.add (i32.const 1) (i32.const 2))) + ) + ) + (if (i32.const 2) + (block + (nop) + (return (i32.add (i32.const 1) (i32.const 2))) + ) + ) + (if (i32.const 3) + (block + (nop) + (return (i32.add (i32.const 1) (i32.const 2))) + ) + ) + (if (i32.const 3) + (block + (nop) + (return (i32.add (i32.const 111111111) (i32.const 2222222))) + ) + ) + (return (i32.const 1234)) + ) + (func $terminating-fallthrough-value (result i32) + (if (i32.const 1) + (block + (nop) + (return (i32.add (i32.const 1) (i32.const 2))) + ) + ) + (if (i32.const 2) + (block + (nop) + (return (i32.add (i32.const 1) (i32.const 2))) + ) + ) + (if (i32.const 3) + (block + (nop) + (return (i32.add (i32.const 1) (i32.const 2))) + ) + ) + (if (i32.const 3) + (block + (nop) + (return (i32.add (i32.const 111111111) (i32.const 2222222))) + ) + ) + (i32.const 1234) + ) + (func $big-return (result i32) + (if (i32.const 1) (return (i32.add (i32.const 1) (i32.const 2)))) + (if (i32.const 2) (return (i32.add (i32.const 1) (i32.const 2)))) + (if (i32.const 3) (return (i32.add (i32.const 1) (i32.const 2)))) + (if (i32.const 4) (return (i32.add (i32.const 1) (i32.const 2)))) + (if (i32.const 5) (return (i32.add (i32.const 1) (i32.const 2)))) + (if (i32.const 6) (return (i32.add (i32.const 1) (i32.const 2)))) + (unreachable) + ) + (func $return-mix (result i32) + (if (i32.const 1) (return (i32.add (i32.const 1) (i32.const 2)))) + (if (i32.const 2) (return (i32.add (i32.const 1) (i32.const 2)))) + (if (i32.const 3) (return (i32.add (i32.const 1) (i32.const 2)))) + (if (i32.const 4) (return (i32.add (i32.const 1) (i32.const 2)))) + (if (i32.const 3) (return (i32.add (i32.const 1) (i32.const 234567)))) + (return (i32.add (i32.const 1) (i32.const 2))) ;; on a block, and the toplevel in fact + ) + (func $just-unreachable + (unreachable) + ) + (func $just-return (result i32) + (return (i32.add (i32.const 1) (i32.const 2))) ;; on a block, and the toplevel in fact + ) + (func $drop-if-with-value-but-unreachable + (block $label$0 + (if + (i32.const 0) + (block $label$1 + (nop) + ) + ) + (if + (i32.const 0) + (block $label$2 + (nop) + ) + (block $label$3 + (nop) + ) + ) + (if + (i32.const 0) + (block $label$4 + (nop) + ) + (block $label$5 + (unreachable) + ) + ) + (nop) + (drop + (if (result i32) ;; we replace this if, must replace with same type! + (unreachable) + (block $label$6 (result i32) + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + (block $label$7 (result i32) + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + ) + ) + (drop + (if (result i32) + (i32.const 0) + (block $label$8 (result i32) + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + (block $label$9 (result i32) + (i32.add + (i32.const 1) + (i32.const 333333333) + ) + ) + ) + ) + ) + ) + (func $nested-control-flow + (block $out + (block $x + (if (i32.const 0) + (block + (if (i32.const 1) + (br $out) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) + ) + ) + (if (i32.const 0) + (block + (if (i32.const 1) + (br $out) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) + ) + ) + ;; no fallthrough, another thing to merge + (if (i32.const 1) + (br $out) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) + ) + (drop (i32.const 3)) + ) + ) + (func $nested-control-flow-dangerous + (block $out + (block $x + (if (i32.const 0) + (block + (if (i32.const 1) + (br $out) ;; this br cannot be moved out of the $out block! + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (return) + ) + ) + (if (i32.const 0) + (block + (if (i32.const 1) + (br $out) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (return) + ) + ) + ;; no fallthrough, another thing to merge + (if (i32.const 1) + (br $out) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (return) + ) + (drop (i32.const 3)) + ) + ) + (func $nested-control-flow-dangerous-but-ok + (block $out + (block $middle + (block $x + (if (i32.const 0) + (block + (if (i32.add (i32.const 0) (i32.const 1)) + (br $middle) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (return) + ) + ) + (if (i32.const 0) + (block + (if (i32.add (i32.const 0) (i32.const 1)) + (br $middle) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (return) + ) + ) + ;; no fallthrough, another thing to merge + (if (i32.add (i32.const 0) (i32.const 1)) + (br $middle) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (return) + ) + ) + (drop (i32.const 3)) + ) + ) + (func $nested-control-flow-dangerous-but-ok-b + (block $out + (block $middle + (block $x + (if (i32.const 0) + (block + (if (i32.add (i32.const 0) (i32.const 1)) + (br $middle) ;; this is dangerous - we branch to middle with is inside out, so we can't move this out of out + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (drop (i32.const 3)) + (drop (i32.const 4)) + (drop (i32.const 1)) + (drop (i32.const 2)) + (drop (i32.const 3)) + (drop (i32.const 4)) + (br $out) + ) + ) + (if (i32.const 0) + (block + (if (i32.add (i32.const 0) (i32.const 1)) + (br $middle) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (drop (i32.const 3)) + (drop (i32.const 4)) + (drop (i32.const 1)) + (drop (i32.const 2)) + (drop (i32.const 3)) + (drop (i32.const 4)) + (br $out) + ) + ) + ;; no fallthrough, another thing to merge + (if (i32.add (i32.const 0) (i32.const 1)) + (br $middle) + ) + ) + ) + (unreachable) ;; no fallthrough + ) + ) + (func $nested-control-flow-dangerous-but-ok-c + (block $x + (block $out + (block $middle + (if (i32.const 0) + (block + (if (i32.add (i32.const 0) (i32.const 1)) + (br $x) ;; this is ok - we branch to x which is outside of out + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $out) + ) + ) + (if (i32.const 0) + (block + (if (i32.add (i32.const 0) (i32.const 1)) + (br $x) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $out) + ) + ) + ;; no fallthrough, another thing to merge + (if (i32.add (i32.const 0) (i32.const 1)) + (br $x) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $out) + ) + (unreachable) ;; no fallthrough + ) + (unreachable) ;; no fallthrough + ) + (drop (i32.const 5)) + ) + (func $nested-control-flow-dangerous-but-ok-d + (block $out + (block $middle + (if (i32.const 0) + (block + (block $x + (if (i32.add (i32.const 0) (i32.const 1)) + (br $x) ;; this is ok - we branch to x which is nested in us + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $out) + ) + ) + (if (i32.const 0) + (block + (block $x + (if (i32.add (i32.const 0) (i32.const 1)) + (br $x) ;; this is ok - we branch to x which is nested in us + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $out) + ) + ) + ;; no fallthrough, another thing to merge + (block $x + (if (i32.add (i32.const 0) (i32.const 1)) + (br $x) ;; this is ok - we branch to x which is nested in us + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $out) + ) + ) + (drop (i32.const 3)) + ) +) diff --git a/src/binaryen/test/passes/remove-unused-names_merge-blocks.txt b/src/binaryen/test/passes/remove-unused-names_merge-blocks.txt new file mode 100644 index 0000000000..a46cacf473 --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-names_merge-blocks.txt @@ -0,0 +1,933 @@ +(module + (type $i (func (param i32))) + (type $ii (func (param i32 i32))) + (type $iii (func (param i32 i32 i32))) + (type $3 (func)) + (type $4 (func (result i32))) + (type $5 (func (result f64))) + (table 1 1 anyfunc) + (elem (i32.const 0) $call-i) + (memory $0 (shared 256 256)) + (func $call-i (; 0 ;) (type $i) (param $0 i32) + (nop) + ) + (func $call-ii (; 1 ;) (type $ii) (param $0 i32) (param $1 i32) + (nop) + ) + (func $call-iii (; 2 ;) (type $iii) (param $0 i32) (param $1 i32) (param $2 i32) + (nop) + ) + (func $b0-yes (; 3 ;) (type $i) (param $i1 i32) + (drop + (i32.const 10) + ) + ) + (func $b0-no (; 4 ;) (type $i) (param $i1 i32) + (block $topmost + (block $block0 + (br $block0) + ) + (br $topmost) + ) + ) + (func $b0-br-but-ok (; 5 ;) (type $i) (param $i1 i32) + (block $topmost + (br $topmost) + ) + ) + (func $b1-yes (; 6 ;) (type $i) (param $i1 i32) + (drop + (i32.const 10) + ) + ) + (func $b2-yes (; 7 ;) (type $i) (param $i1 i32) + (drop + (i32.const 5) + ) + (drop + (i32.const 10) + ) + (drop + (i32.const 15) + ) + ) + (func $b3-yes (; 8 ;) (type $i) (param $i1 i32) + (drop + (i32.const 3) + ) + (drop + (i32.const 6) + ) + (drop + (i32.const 10) + ) + (drop + (i32.const 15) + ) + (drop + (i32.const 20) + ) + ) + (func $b4 (; 9 ;) (type $i) (param $i1 i32) + (block $inner + (drop + (i32.const 10) + ) + (br $inner) + ) + ) + (func $b5 (; 10 ;) (type $i) (param $i1 i32) + (block $middle + (block $inner + (drop + (i32.const 10) + ) + (br $inner) + ) + (br $middle) + ) + ) + (func $b6 (; 11 ;) (type $i) (param $i1 i32) + (drop + (i32.const 5) + ) + (block $inner + (drop + (i32.const 10) + ) + (br $inner) + ) + (drop + (i32.const 15) + ) + ) + (func $b7 (; 12 ;) (type $i) (param $i1 i32) + (drop + (i32.const 3) + ) + (block $middle + (drop + (i32.const 6) + ) + (block $inner + (drop + (i32.const 10) + ) + (br $inner) + ) + (drop + (i32.const 15) + ) + (br $middle) + ) + (drop + (i32.const 20) + ) + ) + (func $unary (; 13 ;) (type $3) + (local $x i32) + (drop + (i32.eqz + (block (result i32) + (i32.const 10) + ) + ) + ) + (drop + (i32.const 10) + ) + (drop + (i32.eqz + (i32.const 20) + ) + ) + (drop + (i32.const 10) + ) + (drop + (i32.const 20) + ) + (drop + (i32.eqz + (i32.const 30) + ) + ) + (drop + (i32.const 10) + ) + (set_local $x + (i32.const 20) + ) + (drop + (i32.const 10) + ) + (drop + (i32.load + (i32.const 20) + ) + ) + (return + (block + (drop + (i32.const 10) + ) + (unreachable) + ) + ) + ) + (func $binary (; 14 ;) (type $3) + (drop + (i32.add + (block (result i32) + (i32.const 10) + ) + (i32.const 20) + ) + ) + (drop + (i32.const 10) + ) + (drop + (i32.add + (i32.const 20) + (i32.const 30) + ) + ) + (drop + (i32.const 10) + ) + (drop + (i32.const 20) + ) + (drop + (i32.add + (i32.const 30) + (i32.const 40) + ) + ) + (drop + (i32.add + (i32.const 10) + (block (result i32) + (i32.const 20) + ) + ) + ) + (drop + (i32.const 20) + ) + (drop + (i32.add + (i32.const 10) + (i32.const 30) + ) + ) + (drop + (i32.const 20) + ) + (drop + (i32.const 30) + ) + (drop + (i32.add + (i32.const 10) + (i32.const 40) + ) + ) + (drop + (i32.add + (block (result i32) + (i32.const 10) + ) + (block (result i32) + (i32.const 20) + ) + ) + ) + (drop + (i32.const 10) + ) + (drop + (i32.const 30) + ) + (drop + (i32.add + (i32.const 20) + (i32.const 40) + ) + ) + (drop + (i32.const 10) + ) + (drop + (i32.const 20) + ) + (drop + (i32.const 40) + ) + (drop + (i32.const 50) + ) + (drop + (i32.add + (i32.const 30) + (i32.const 60) + ) + ) + (drop + (i32.const 20) + ) + (i32.store + (i32.const 10) + (i32.const 30) + ) + (drop + (i32.const 10) + ) + (i32.store + (i32.const 20) + (i32.const 30) + ) + (drop + (i32.add + (unreachable) + (block (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + ) + ) + (drop + (block (result i32) + (unreachable) + (drop + (i32.const 20) + ) + (i32.add + (i32.const 10) + (i32.const 30) + ) + ) + ) + ) + (func $trinary (; 15 ;) (type $3) + (drop + (i32.const 10) + ) + (drop + (i32.const 30) + ) + (drop + (i32.const 50) + ) + (drop + (select + (i32.const 20) + (i32.const 40) + (i32.const 60) + ) + ) + (drop + (i32.const 20) + ) + (drop + (i32.const 40) + ) + (drop + (select + (block (result i32) + (i32.const 10) + ) + (i32.const 30) + (i32.const 50) + ) + ) + (drop + (i32.const 10) + ) + (drop + (i32.const 40) + ) + (drop + (select + (i32.const 20) + (block (result i32) + (i32.const 30) + ) + (i32.const 50) + ) + ) + (drop + (i32.const 10) + ) + (drop + (i32.const 30) + ) + (drop + (select + (i32.const 20) + (i32.const 40) + (block (result i32) + (i32.const 50) + ) + ) + ) + (drop + (i32.const 30) + ) + (drop + (select + (block (result i32) + (i32.const 10) + ) + (block (result i32) + (i32.const 20) + ) + (i32.const 40) + ) + ) + (drop + (i32.const 20) + ) + (drop + (select + (block (result i32) + (i32.const 10) + ) + (i32.const 30) + (block (result i32) + (i32.const 40) + ) + ) + ) + (drop + (i32.const 10) + ) + (drop + (select + (i32.const 20) + (block (result i32) + (i32.const 30) + ) + (block (result i32) + (i32.const 40) + ) + ) + ) + (drop + (select + (block (result i32) + (unreachable) + (i32.const 20) + ) + (block (result i32) + (drop + (i32.const 30) + ) + (i32.const 40) + ) + (block (result i32) + (drop + (i32.const 50) + ) + (i32.const 60) + ) + ) + ) + (drop + (select + (block (result i32) + (drop + (i32.const 10) + ) + (unreachable) + ) + (block (result i32) + (drop + (i32.const 30) + ) + (i32.const 40) + ) + (block (result i32) + (drop + (i32.const 50) + ) + (i32.const 60) + ) + ) + ) + (drop + (i32.const 10) + ) + (drop + (select + (i32.const 20) + (block (result i32) + (unreachable) + (i32.const 40) + ) + (block (result i32) + (drop + (i32.const 50) + ) + (i32.const 60) + ) + ) + ) + (drop + (i32.const 10) + ) + (drop + (select + (i32.const 20) + (block (result i32) + (drop + (i32.const 30) + ) + (unreachable) + ) + (block (result i32) + (drop + (i32.const 50) + ) + (i32.const 60) + ) + ) + ) + (drop + (i32.const 10) + ) + (drop + (i32.const 30) + ) + (drop + (select + (i32.const 20) + (i32.const 40) + (block (result i32) + (unreachable) + (i32.const 60) + ) + ) + ) + (drop + (i32.const 10) + ) + (drop + (i32.const 30) + ) + (drop + (select + (i32.const 20) + (i32.const 40) + (block (result i32) + (drop + (i32.const 50) + ) + (unreachable) + ) + ) + ) + ) + (func $breaks (; 16 ;) (type $3) + (block $out + (drop + (i32.const 10) + ) + (drop + (i32.const 20) + ) + (br $out) + (drop + (i32.const 10) + ) + (br_if $out + (i32.const 20) + ) + (drop + (i32.const 10) + ) + (drop + (i32.const 20) + ) + (drop + (i32.const 30) + ) + (br_if $out + (i32.const 40) + ) + (drop + (i32.const 10) + ) + (br_table $out $out + (i32.const 20) + ) + (drop + (block $out2 (result i32) + (drop + (i32.const 10) + ) + (drop + (i32.const 30) + ) + (br_table $out2 $out2 + (i32.const 20) + (i32.const 40) + ) + ) + ) + (unreachable) + ) + ) + (func $calls (; 17 ;) (type $3) + (call $call-i + (block (result i32) + (i32.const 10) + ) + ) + (drop + (i32.const 10) + ) + (call $call-i + (i32.const 20) + ) + (drop + (i32.const 10) + ) + (drop + (i32.const 20) + ) + (call $call-i + (i32.const 30) + ) + (drop + (i32.const 10) + ) + (drop + (i32.const 30) + ) + (call $call-ii + (i32.const 20) + (i32.const 40) + ) + (call $call-ii + (block (result i32) + (unreachable) + (i32.const 10) + ) + (block (result i32) + (drop + (i32.const 20) + ) + (i32.const 30) + ) + ) + (call $call-ii + (block (result i32) + (drop + (i32.const 10) + ) + (unreachable) + ) + (block (result i32) + (drop + (i32.const 20) + ) + (i32.const 30) + ) + ) + (drop + (i32.const 10) + ) + (call $call-ii + (i32.const 20) + (block (result i32) + (unreachable) + (i32.const 30) + ) + ) + (drop + (i32.const 10) + ) + (call $call-ii + (i32.const 20) + (block (result i32) + (drop + (i32.const 30) + ) + (unreachable) + ) + ) + (drop + (i32.const 10) + ) + (drop + (i32.const 30) + ) + (drop + (i32.const 50) + ) + (call $call-iii + (i32.const 20) + (i32.const 40) + (i32.const 60) + ) + (drop + (i32.const 10) + ) + (drop + (i32.const 40) + ) + (call $call-iii + (i32.const 20) + (i32.const 30) + (i32.const 50) + ) + (drop + (i32.const 10) + ) + (drop + (i32.const 30) + ) + (drop + (i32.const 50) + ) + (call_indirect (type $ii) + (i32.const 20) + (i32.const 40) + (i32.const 60) + ) + (call_indirect (type $ii) + (unreachable) + (block (result i32) + (drop + (i32.const 30) + ) + (i32.const 40) + ) + (block (result i32) + (drop + (i32.const 50) + ) + (i32.const 60) + ) + ) + (drop + (i32.const 31) + ) + (call_indirect (type $ii) + (i32.const 41) + (unreachable) + (block (result i32) + (drop + (i32.const 51) + ) + (i32.const 61) + ) + ) + (drop + (i32.const 32) + ) + (drop + (i32.const 52) + ) + (call_indirect (type $ii) + (i32.const 42) + (i32.const 62) + (unreachable) + ) + ) + (func $atomics (; 18 ;) (type $3) + (drop + (i32.const 10) + ) + (drop + (i32.const 30) + ) + (drop + (i32.const 50) + ) + (drop + (i32.atomic.rmw.cmpxchg + (i32.const 20) + (i32.const 40) + (i32.const 60) + ) + ) + (drop + (i32.const 10) + ) + (drop + (i32.atomic.rmw.add + (i32.const 20) + (i32.const 30) + ) + ) + ) + (func $mix-select (; 19 ;) (type $i) (param $x i32) + (drop + (select + (get_local $x) + (get_local $x) + (block (result i32) + (set_local $x + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + ) + (func $block-type-change (; 20 ;) (type $3) + (local $0 f64) + (local $1 f64) + (if + (block (result i32) + (nop) + (f64.gt + (get_local $0) + (get_local $1) + ) + ) + (nop) + ) + ) + (func $do-reorder (; 21 ;) (type $i) (param $x i32) + (local $y i32) + (if + (i32.const 1) + (block + (set_local $y + (i32.const 5) + ) + (set_local $x + (i32.le_u + (get_local $x) + (i32.const 10) + ) + ) + ) + ) + ) + (func $do-not-reorder (; 22 ;) (type $i) (param $x i32) + (local $y i32) + (if + (i32.const 1) + (set_local $x + (i32.le_u + (get_local $y) + (block (result i32) + (set_local $y + (i32.const 5) + ) + (i32.const 10) + ) + ) + ) + ) + ) + (func $return-different-type (; 23 ;) (type $4) (result i32) + (drop + (f64.abs + (block + (drop + (i32.const 2) + ) + (return + (i32.const 1) + ) + ) + ) + ) + (unreachable) + ) + (func $drop-unreachable (; 24 ;) (type $4) (result i32) + (local $0 i32) + (drop + (block (result i32) + (unreachable) + ) + ) + (unreachable) + ) + (func $concrete_finale_in_unreachable (; 25 ;) (type $5) (result f64) + (drop + (block (result f64) + (unreachable) + (f64.const 6.322092475576799e-96) + ) + ) + (f64.const -1) + ) + (func $dont-move-unreachable (; 26 ;) (type $3) + (loop $label$0 + (drop + (block (result i32) + (br $label$0) + (i32.const 1) + ) + ) + ) + ) + (func $dont-move-unreachable-last (; 27 ;) (type $3) + (loop $label$0 + (drop + (block (result i32) + (call $dont-move-unreachable-last) + (br $label$0) + ) + ) + ) + ) + (func $move-around-unreachable-in-middle (; 28 ;) (type $3) + (loop $label$0 + (nop) + (drop + (block $label$3 (result i32) + (drop + (br_if $label$3 + (br $label$0) + (i32.const 0) + ) + ) + (i32.const 1) + ) + ) + ) + ) + (func $drop-unreachable-block-with-concrete-final (; 29 ;) (type $3) + (drop + (block (result i32) + (drop + (block + (drop + (return) + ) + ) + ) + (i32.const -452) + ) + ) + ) + (func $merging-with-unreachable-in-middle (; 30 ;) (type $4) (result i32) + (return + (i32.const 21536) + ) + (block $label$15 + (br $label$15) + ) + (i32.const 19299) + ) + (func $remove-br-after-unreachable (; 31 ;) (type $3) + (block $label$9 + (drop + (block + (return) + (br $label$9) + ) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/remove-unused-names_merge-blocks.wast b/src/binaryen/test/passes/remove-unused-names_merge-blocks.wast new file mode 100644 index 0000000000..920664b4b1 --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-names_merge-blocks.wast @@ -0,0 +1,1099 @@ +(module + (memory (shared 256 256)) + (type $i (func (param i32))) + (type $ii (func (param i32 i32))) + (type $iii (func (param i32 i32 i32))) + (type $3 (func)) + (table 1 1 anyfunc) + (elem (i32.const 0) $call-i) + (func $call-i (type $i) (param $0 i32) + (nop) + ) + (func $call-ii (type $ii) (param $0 i32) (param $1 i32) + (nop) + ) + (func $call-iii (type $iii) (param $0 i32) (param $1 i32) (param $2 i32) + (nop) + ) + (func $b0-yes (type $i) (param $i1 i32) + (block $topmost + (block $block0 + (drop + (i32.const 10) + ) + ) + ) + ) + (func $b0-no (type $i) (param $i1 i32) + (block $topmost + (block $block0 + (br $block0) + ) + (br $topmost) + ) + ) + (func $b0-br-but-ok (type $i) (param $i1 i32) + (block $topmost + (block $block0 + (br $topmost) + ) + ) + ) + (func $b1-yes (type $i) (param $i1 i32) + (block $topmost + (block $block0 + (block $block1 + (drop + (i32.const 10) + ) + ) + ) + ) + ) + (func $b2-yes (type $i) (param $i1 i32) + (block $topmost + (drop + (i32.const 5) + ) + (block $block0 + (drop + (i32.const 10) + ) + ) + (drop + (i32.const 15) + ) + ) + ) + (func $b3-yes (type $i) (param $i1 i32) + (block $topmost + (drop + (i32.const 3) + ) + (block $block0 + (drop + (i32.const 6) + ) + (block $block1 + (drop + (i32.const 10) + ) + ) + (drop + (i32.const 15) + ) + ) + (drop + (i32.const 20) + ) + ) + ) + (func $b4 (type $i) (param $i1 i32) + (block $topmost + (block $inner + (drop + (i32.const 10) + ) + (br $inner) + ) + ) + ) + (func $b5 (type $i) (param $i1 i32) + (block $topmost + (block $middle + (block $inner + (drop + (i32.const 10) + ) + (br $inner) + ) + (br $middle) + ) + ) + ) + (func $b6 (type $i) (param $i1 i32) + (block $topmost + (drop + (i32.const 5) + ) + (block $inner + (drop + (i32.const 10) + ) + (br $inner) + ) + (drop + (i32.const 15) + ) + ) + ) + (func $b7 (type $i) (param $i1 i32) + (block $topmost + (drop + (i32.const 3) + ) + (block $middle + (drop + (i32.const 6) + ) + (block $inner + (drop + (i32.const 10) + ) + (br $inner) + ) + (drop + (i32.const 15) + ) + (br $middle) + ) + (drop + (i32.const 20) + ) + ) + ) + (func $unary (type $3) + (local $x i32) + (drop + (i32.eqz + (block $block0 (result i32) + (i32.const 10) + ) + ) + ) + (drop + (i32.eqz + (block $block1 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + ) + ) + (drop + (i32.eqz + (block $block2 (result i32) + (drop + (i32.const 10) + ) + (drop + (i32.const 20) + ) + (i32.const 30) + ) + ) + ) + (set_local $x + (block $block3 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + ) + (drop + (i32.load + (block $block4 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + ) + ) + (return + (block $block5 + (drop + (i32.const 10) + ) + (unreachable) + ) + ) + ) + (func $binary (type $3) + (drop + (i32.add + (block $block0 (result i32) + (i32.const 10) + ) + (i32.const 20) + ) + ) + (drop + (i32.add + (block $block1 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (i32.const 30) + ) + ) + (drop + (i32.add + (block $block2 (result i32) + (drop + (i32.const 10) + ) + (drop + (i32.const 20) + ) + (i32.const 30) + ) + (i32.const 40) + ) + ) + (drop + (i32.add + (i32.const 10) + (block $block3 (result i32) + (i32.const 20) + ) + ) + ) + (drop + (i32.add + (i32.const 10) + (block $block4 (result i32) + (drop + (i32.const 20) + ) + (i32.const 30) + ) + ) + ) + (drop + (i32.add + (i32.const 10) + (block $block5 (result i32) + (drop + (i32.const 20) + ) + (drop + (i32.const 30) + ) + (i32.const 40) + ) + ) + ) + (drop + (i32.add + (block $block6 (result i32) + (i32.const 10) + ) + (block $block7 (result i32) + (i32.const 20) + ) + ) + ) + (drop + (i32.add + (block $block8 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (block $block9 (result i32) + (drop + (i32.const 30) + ) + (i32.const 40) + ) + ) + ) + (drop + (i32.add + (block $block10 (result i32) + (drop + (i32.const 10) + ) + (drop + (i32.const 20) + ) + (i32.const 30) + ) + (block $block11 (result i32) + (drop + (i32.const 40) + ) + (drop + (i32.const 50) + ) + (i32.const 60) + ) + ) + ) + (i32.store + (i32.const 10) + (block $block12 (result i32) + (drop + (i32.const 20) + ) + (i32.const 30) + ) + ) + (i32.store + (block $block13 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (i32.const 30) + ) + (drop + (i32.add + (unreachable) + (block $block14 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + ) + ) + (drop + (i32.add + (block $block15 (result i32) + (unreachable) + (i32.const 10) + ) + (block $block16 (result i32) + (drop + (i32.const 20) + ) + (i32.const 30) + ) + ) + ) + ) + (func $trinary (type $3) + (drop + (select + (block $block0 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (block $block1 (result i32) + (drop + (i32.const 30) + ) + (i32.const 40) + ) + (block $block2 (result i32) + (drop + (i32.const 50) + ) + (i32.const 60) + ) + ) + ) + (drop + (select + (block $block3 (result i32) + (i32.const 10) + ) + (block $block4 (result i32) + (drop + (i32.const 20) + ) + (i32.const 30) + ) + (block $block5 (result i32) + (drop + (i32.const 40) + ) + (i32.const 50) + ) + ) + ) + (drop + (select + (block $block6 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (block $block7 (result i32) + (i32.const 30) + ) + (block $block8 (result i32) + (drop + (i32.const 40) + ) + (i32.const 50) + ) + ) + ) + (drop + (select + (block $block9 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (block $block10 (result i32) + (drop + (i32.const 30) + ) + (i32.const 40) + ) + (block $block11 (result i32) + (i32.const 50) + ) + ) + ) + (drop + (select + (block $block12 (result i32) + (i32.const 10) + ) + (block $block13 (result i32) + (i32.const 20) + ) + (block $block14 (result i32) + (drop + (i32.const 30) + ) + (i32.const 40) + ) + ) + ) + (drop + (select + (block $block15 (result i32) + (i32.const 10) + ) + (block $block16 (result i32) + (drop + (i32.const 20) + ) + (i32.const 30) + ) + (block $block17 (result i32) + (i32.const 40) + ) + ) + ) + (drop + (select + (block $block18 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (block $block19 (result i32) + (i32.const 30) + ) + (block $block20 (result i32) + (i32.const 40) + ) + ) + ) + (drop + (select + (block $block21 (result i32) + (unreachable) + (i32.const 20) + ) + (block $block22 (result i32) + (drop + (i32.const 30) + ) + (i32.const 40) + ) + (block $block23 (result i32) + (drop + (i32.const 50) + ) + (i32.const 60) + ) + ) + ) + (drop + (select + (block $block24 (result i32) + (drop + (i32.const 10) + ) + (unreachable) + ) + (block $block25 (result i32) + (drop + (i32.const 30) + ) + (i32.const 40) + ) + (block $block26 (result i32) + (drop + (i32.const 50) + ) + (i32.const 60) + ) + ) + ) + (drop + (select + (block $block27 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (block $block28 (result i32) + (unreachable) + (i32.const 40) + ) + (block $block29 (result i32) + (drop + (i32.const 50) + ) + (i32.const 60) + ) + ) + ) + (drop + (select + (block $block30 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (block $block31 (result i32) + (drop + (i32.const 30) + ) + (unreachable) + ) + (block $block32 (result i32) + (drop + (i32.const 50) + ) + (i32.const 60) + ) + ) + ) + (drop + (select + (block $block33 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (block $block34 (result i32) + (drop + (i32.const 30) + ) + (i32.const 40) + ) + (block $block35 (result i32) + (unreachable) + (i32.const 60) + ) + ) + ) + (drop + (select + (block $block36 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (block $block37 (result i32) + (drop + (i32.const 30) + ) + (i32.const 40) + ) + (block $block38 (result i32) + (drop + (i32.const 50) + ) + (unreachable) + ) + ) + ) + ) + (func $breaks (type $3) + (block $out + (block + (drop + (block $block0 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + ) + (br $out) + ) + (br_if $out + (block $block1 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + ) + (block + (drop + (block $block2 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + ) + (br_if $out + (block $block3 (result i32) + (drop + (i32.const 30) + ) + (i32.const 40) + ) + ) + ) + (br_table $out $out + (block $block4 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + ) + (drop + (block $out2 (result i32) + (br_table $out2 $out2 + (block $block5 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (block $block6 (result i32) + (drop + (i32.const 30) + ) + (i32.const 40) + ) + ) + ) + ) + (unreachable) + ) + ) + (func $calls (type $3) + (call $call-i + (block $block0 (result i32) + (i32.const 10) + ) + ) + (call $call-i + (block $block1 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + ) + (call $call-i + (block $block2 (result i32) + (drop + (i32.const 10) + ) + (drop + (i32.const 20) + ) + (i32.const 30) + ) + ) + (call $call-ii + (block $block3 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (block $block4 (result i32) + (drop + (i32.const 30) + ) + (i32.const 40) + ) + ) + (call $call-ii + (block $block5 (result i32) + (unreachable) + (i32.const 10) + ) + (block $block6 (result i32) + (drop + (i32.const 20) + ) + (i32.const 30) + ) + ) + (call $call-ii + (block $block7 (result i32) + (drop + (i32.const 10) + ) + (unreachable) + ) + (block $block8 (result i32) + (drop + (i32.const 20) + ) + (i32.const 30) + ) + ) + (call $call-ii + (block $block9 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (block $block10 (result i32) + (unreachable) + (i32.const 30) + ) + ) + (call $call-ii + (block $block11 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (block $block12 (result i32) + (drop + (i32.const 30) + ) + (unreachable) + ) + ) + (call $call-iii + (block $block13 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (block $block14 (result i32) + (drop + (i32.const 30) + ) + (i32.const 40) + ) + (block $block15 (result i32) + (drop + (i32.const 50) + ) + (i32.const 60) + ) + ) + (call $call-iii + (block $block16 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (i32.const 30) + (block $block17 (result i32) + (drop + (i32.const 40) + ) + (i32.const 50) + ) + ) + (call_indirect (type $ii) + (block $block18 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (block $block19 (result i32) + (drop + (i32.const 30) + ) + (i32.const 40) + ) + (block $block20 (result i32) + (drop + (i32.const 50) + ) + (i32.const 60) + ) + ) + (call_indirect (type $ii) + (unreachable) + (block $block21 (result i32) + (drop + (i32.const 30) + ) + (i32.const 40) + ) + (block $block22 (result i32) + (drop + (i32.const 50) + ) + (i32.const 60) + ) + ) + (call_indirect (type $ii) + (block $block21 (result i32) + (drop + (i32.const 31) + ) + (i32.const 41) + ) + (unreachable) + (block $block22 (result i32) + (drop + (i32.const 51) + ) + (i32.const 61) + ) + ) + (call_indirect (type $ii) + (block $block21 (result i32) + (drop + (i32.const 32) + ) + (i32.const 42) + ) + (block $block22 (result i32) + (drop + (i32.const 52) + ) + (i32.const 62) + ) + (unreachable) + ) + ) + (func $atomics (type $3) + (drop + (i32.atomic.rmw.cmpxchg ;; mergeblock logic should be same as select + (block $block0 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (block $block1 (result i32) + (drop + (i32.const 30) + ) + (i32.const 40) + ) + (block $block2 (result i32) + (drop + (i32.const 50) + ) + (i32.const 60) + ) + ) + ) + (drop + (i32.atomic.rmw.add ;; atomicrmw is like a binary + (block $block1 (result i32) + (drop + (i32.const 10) + ) + (i32.const 20) + ) + (i32.const 30) + ) + ) + ) + (func $mix-select (param $x i32) + (drop + (select + (get_local $x) + (get_local $x) + (block (result i32) + (set_local $x ;; cannot be moved before the gets + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + ) + (func $block-type-change (type $3) + (local $0 f64) + (local $1 f64) + (if + (f64.gt + (get_local $0) + (block $block0 (result f64) + (nop) + (get_local $1) + ) + ) + (nop) + ) + ) + (func $do-reorder (param $x i32) + (local $y i32) + (if (i32.const 1) + (block + (set_local $x + (i32.le_u + (get_local $x) + (block (result i32) + (set_local $y (i32.const 5)) + (i32.const 10) + ) + ) + ) + ) + ) + ) + (func $do-not-reorder (param $x i32) + (local $y i32) + (if (i32.const 1) + (block + (set_local $x + (i32.le_u + (get_local $y) + (block (result i32) + (set_local $y (i32.const 5)) + (i32.const 10) + ) + ) + ) + ) + ) + ) + (func $return-different-type (result i32) + (drop + (f64.abs + (return + (block (result i32) ;; when we flip the block out, it should have an ok type for the (dead) f64 op + (drop (i32.const 2)) + (i32.const 1) + ) + ) + ) + ) + (unreachable) + ) + + (func $drop-unreachable (result i32) + (local $0 i32) + (block $label$1 (result i32) + (drop + (block (result i32) + (unreachable) + ) + ) + (unreachable) + ) + ) + (func $concrete_finale_in_unreachable (result f64) + (block $label$0 (result f64) + (drop + (block (result f64) + (unreachable) + (f64.const 6.322092475576799e-96) + ) + ) + (f64.const -1) + ) + ) + (func $dont-move-unreachable + (loop $label$0 + (drop + (block $label$3 (result i32) + (br $label$0) + (i32.const 1) + ) + ) + ) + ) + (func $dont-move-unreachable-last + (loop $label$0 + (drop + (block $label$3 (result i32) + (call $dont-move-unreachable-last) + (br $label$0) + ) + ) + ) + ) + (func $move-around-unreachable-in-middle + (loop $label$0 + (drop + (block $label$2 (result i32) + (block $block2 + (nop) + ) + (block $label$3 (result i32) + (drop + (br_if $label$3 + (br $label$0) + (i32.const 0) + ) + ) + (i32.const 1) + ) + ) + ) + ) + ) + (func $drop-unreachable-block-with-concrete-final + (drop + (block (result i32) + (drop + (block + (drop + (return) + ) + ) + ) + (i32.const -452) + ) + ) + ) + (func $merging-with-unreachable-in-middle (result i32) + (block $label$1 (result i32) + (block (result i32) + (return + (i32.const 21536) + ) + (block $label$15 + (br $label$15) + ) + (i32.const 19299) + ) + ) + ) + (func $remove-br-after-unreachable + (block $label$9 + (drop + (block + (block + (return) + (br $label$9) ;; removing this leads to the block becoming unreachable + ) + ) + ) + ) + ) +) + diff --git a/src/binaryen/test/passes/remove-unused-names_precompute.txt b/src/binaryen/test/passes/remove-unused-names_precompute.txt new file mode 100644 index 0000000000..a54bb68efd --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-names_precompute.txt @@ -0,0 +1,25 @@ +(module + (type $0 (func (param i32))) + (memory $0 256 256) + (func $__ZN10WasmAssertC2Ev__async_cb (; 0 ;) (type $0) (param $$0 i32) + (block $switch-default + (nop) + (block + (i32.store + (i32.const 12) + (i32.const 26) + ) + (return) + ) + ) + (block + (set_local $$0 + (i32.const 4) + ) + (i32.store + (get_local $$0) + (i32.const 1) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/remove-unused-names_precompute.wast b/src/binaryen/test/passes/remove-unused-names_precompute.wast new file mode 100644 index 0000000000..5e18533897 --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-names_precompute.wast @@ -0,0 +1,28 @@ +(module + (memory $0 256 256) + (func $__ZN10WasmAssertC2Ev__async_cb (param $$0 i32) + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default + (i32.const 0) + ) + ) + (block + (i32.store + (i32.const 12) + (i32.const 26) + ) + (return) + ) + ) + (block + (set_local $$0 + (i32.const 4) + ) + (i32.store + (get_local $$0) + (i32.const 1) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/remove-unused-names_remove-unused-brs_vacuum.txt b/src/binaryen/test/passes/remove-unused-names_remove-unused-brs_vacuum.txt new file mode 100644 index 0000000000..e6b01cc117 --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-names_remove-unused-brs_vacuum.txt @@ -0,0 +1,134 @@ +(module + (type $0 (func (param i32 i32 i32) (result i32))) + (type $1 (func (param f64) (result i32))) + (type $2 (func (param i32 i32) (result i32))) + (type $3 (func (param i32) (result i32))) + (type $4 (func (param i32))) + (type $5 (func (result i32))) + (type $6 (func)) + (type $7 (func (param i32 i32))) + (type $8 (func (param i64 i32 i32))) + (type $9 (func (param i64 i64) (result i64))) + (type $10 (func (param i32 i32 i32 i32 i32) (result i32))) + (type $11 (func (param i32 i32 i32))) + (type $12 (func (param i64 i32) (result i32))) + (type $13 (func (param i32 i32 i32 i32 i32))) + (type $14 (func (param f64 i32) (result f64))) + (type $15 (func (param i32 i32 i32 i32) (result i32))) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$id (func (param f64) (result i32))) + (type $23 (func (param i32) (result i64))) + (import "env" "DYNAMICTOP_PTR" (global $import$0 i32)) + (import "env" "tempDoublePtr" (global $import$1 i32)) + (import "env" "ABORT" (global $import$2 i32)) + (import "env" "STACKTOP" (global $import$3 i32)) + (import "env" "STACK_MAX" (global $import$4 i32)) + (import "global" "NaN" (global $import$5 f64)) + (import "global" "Infinity" (global $import$6 f64)) + (import "env" "enlargeMemory" (func $import$7 (result i32))) + (import "env" "getTotalMemory" (func $import$8 (result i32))) + (import "env" "abortOnCannotGrowMemory" (func $import$9 (result i32))) + (import "env" "abortStackOverflow" (func $import$10 (param i32))) + (import "env" "nullFunc_ii" (func $import$11 (param i32))) + (import "env" "nullFunc_iiii" (func $import$12 (param i32))) + (import "env" "nullFunc_vi" (func $import$13 (param i32))) + (import "env" "_pthread_cleanup_pop" (func $import$14 (param i32))) + (import "env" "___lock" (func $import$15 (param i32))) + (import "env" "_abort" (func $import$16)) + (import "env" "___setErrNo" (func $import$17 (param i32))) + (import "env" "___syscall6" (func $import$18 (param i32 i32) (result i32))) + (import "env" "___syscall140" (func $import$19 (param i32 i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $import$20 (param i32 i32))) + (import "env" "_emscripten_memcpy_big" (func $import$21 (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $import$22 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $import$23 (param i32))) + (import "env" "___syscall146" (func $import$24 (param i32 i32) (result i32))) + (import "asm2wasm" "f64-to-int" (func $import$25 (param f64) (result i32))) + (import "asm2wasm" "i32s-div" (func $import$26 (param i32 i32) (result i32))) + (import "asm2wasm" "i32s-rem" (func $import$27 (param i32 i32) (result i32))) + (import "asm2wasm" "i32u-rem" (func $import$28 (param i32 i32) (result i32))) + (import "asm2wasm" "i32u-div" (func $import$29 (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 18 18 anyfunc)) + (import "env" "memoryBase" (global $import$32 i32)) + (import "env" "tableBase" (global $import$33 i32)) + (global $global$0 (mut i32) (get_global $import$0)) + (global $global$1 (mut i32) (get_global $import$1)) + (global $global$2 (mut i32) (get_global $import$2)) + (global $global$3 (mut i32) (get_global $import$3)) + (global $global$4 (mut i32) (get_global $import$4)) + (global $global$5 (mut i32) (i32.const 0)) + (global $global$6 (mut i32) (i32.const 0)) + (global $global$7 (mut i32) (i32.const 0)) + (global $global$8 (mut i32) (i32.const 0)) + (global $global$9 (mut f64) (get_global $import$5)) + (global $global$10 (mut f64) (get_global $import$6)) + (global $global$11 (mut i32) (i32.const 0)) + (global $global$12 (mut i32) (i32.const 0)) + (global $global$13 (mut i32) (i32.const 0)) + (global $global$14 (mut i32) (i32.const 0)) + (global $global$15 (mut f64) (f64.const 0)) + (global $global$16 (mut i32) (i32.const 0)) + (global $global$17 (mut i32) (i32.const 0)) + (global $global$18 (mut i32) (i32.const 0)) + (global $global$19 (mut f64) (f64.const 0)) + (global $global$20 (mut i32) (i32.const 0)) + (global $global$21 (mut f32) (f32.const 0)) + (global $global$22 (mut f32) (f32.const 0)) + (func $27 (; 23 ;) (type $13) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (block $label$3 + (if + (get_local $var$4) + (block + (if + (i32.eqz + (get_local $var$8) + ) + (if + (i32.eqz + (get_local $var$6) + ) + (br $label$3) + ) + ) + (drop + (call $23 + (get_local $var$7) + (get_local $var$4) + (get_local $var$0) + ) + ) + ) + ) + ) + ) + (func $23 (; 24 ;) (type $0) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (unreachable) + ) + (func $unexitable-loops-result (; 25 ;) (type $23) (param $0 i32) (result i64) + (loop $label$0 + (loop $label$1 + (br_if $label$0 + (i32.load8_s + (i32.const 201460482) + ) + ) + (block + (br_if $label$1 + (get_local $0) + ) + (br $label$1) + ) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/remove-unused-names_remove-unused-brs_vacuum.wast b/src/binaryen/test/passes/remove-unused-names_remove-unused-brs_vacuum.wast new file mode 100644 index 0000000000..12f664a36d --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-names_remove-unused-brs_vacuum.wast @@ -0,0 +1,149 @@ +(module + (type $0 (func (param i32 i32 i32) (result i32))) + (type $1 (func (param f64) (result i32))) + (type $2 (func (param i32 i32) (result i32))) + (type $3 (func (param i32) (result i32))) + (type $4 (func (param i32))) + (type $5 (func (result i32))) + (type $6 (func)) + (type $7 (func (param i32 i32))) + (type $8 (func (param i64 i32 i32))) + (type $9 (func (param i64 i64) (result i64))) + (type $10 (func (param i32 i32 i32 i32 i32) (result i32))) + (type $11 (func (param i32 i32 i32))) + (type $12 (func (param i64 i32) (result i32))) + (type $13 (func (param i32 i32 i32 i32 i32))) + (type $14 (func (param f64 i32) (result f64))) + (type $15 (func (param i32 i32 i32 i32) (result i32))) + (import "env" "DYNAMICTOP_PTR" (global $import$0 i32)) + (import "env" "tempDoublePtr" (global $import$1 i32)) + (import "env" "ABORT" (global $import$2 i32)) + (import "env" "STACKTOP" (global $import$3 i32)) + (import "env" "STACK_MAX" (global $import$4 i32)) + (import "global" "NaN" (global $import$5 f64)) + (import "global" "Infinity" (global $import$6 f64)) + (import "env" "enlargeMemory" (func $import$7 (result i32))) + (import "env" "getTotalMemory" (func $import$8 (result i32))) + (import "env" "abortOnCannotGrowMemory" (func $import$9 (result i32))) + (import "env" "abortStackOverflow" (func $import$10 (param i32))) + (import "env" "nullFunc_ii" (func $import$11 (param i32))) + (import "env" "nullFunc_iiii" (func $import$12 (param i32))) + (import "env" "nullFunc_vi" (func $import$13 (param i32))) + (import "env" "_pthread_cleanup_pop" (func $import$14 (param i32))) + (import "env" "___lock" (func $import$15 (param i32))) + (import "env" "_abort" (func $import$16)) + (import "env" "___setErrNo" (func $import$17 (param i32))) + (import "env" "___syscall6" (func $import$18 (param i32 i32) (result i32))) + (import "env" "___syscall140" (func $import$19 (param i32 i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $import$20 (param i32 i32))) + (import "env" "_emscripten_memcpy_big" (func $import$21 (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $import$22 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $import$23 (param i32))) + (import "env" "___syscall146" (func $import$24 (param i32 i32) (result i32))) + (import "asm2wasm" "f64-to-int" (func $import$25 (param f64) (result i32))) + (import "asm2wasm" "i32s-div" (func $import$26 (param i32 i32) (result i32))) + (import "asm2wasm" "i32s-rem" (func $import$27 (param i32 i32) (result i32))) + (import "asm2wasm" "i32u-rem" (func $import$28 (param i32 i32) (result i32))) + (import "asm2wasm" "i32u-div" (func $import$29 (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 18 18 anyfunc)) + (import "env" "memoryBase" (global $import$32 i32)) + (import "env" "tableBase" (global $import$33 i32)) + (global $global$0 (mut i32) (get_global $import$0)) + (global $global$1 (mut i32) (get_global $import$1)) + (global $global$2 (mut i32) (get_global $import$2)) + (global $global$3 (mut i32) (get_global $import$3)) + (global $global$4 (mut i32) (get_global $import$4)) + (global $global$5 (mut i32) (i32.const 0)) + (global $global$6 (mut i32) (i32.const 0)) + (global $global$7 (mut i32) (i32.const 0)) + (global $global$8 (mut i32) (i32.const 0)) + (global $global$9 (mut f64) (get_global $import$5)) + (global $global$10 (mut f64) (get_global $import$6)) + (global $global$11 (mut i32) (i32.const 0)) + (global $global$12 (mut i32) (i32.const 0)) + (global $global$13 (mut i32) (i32.const 0)) + (global $global$14 (mut i32) (i32.const 0)) + (global $global$15 (mut f64) (f64.const 0)) + (global $global$16 (mut i32) (i32.const 0)) + (global $global$17 (mut i32) (i32.const 0)) + (global $global$18 (mut i32) (i32.const 0)) + (global $global$19 (mut f64) (f64.const 0)) + (global $global$20 (mut i32) (i32.const 0)) + (global $global$21 (mut f32) (f32.const 0)) + (global $global$22 (mut f32) (f32.const 0)) + (func $27 (type $13) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (local $var$7 i32) + (local $var$8 i32) + (block $label$0 + (block $label$1 + (block $label$3 + (if + (get_local $var$4) + (block $label$4 + (if + (get_local $var$8) + (block $label$7 + (loop $label$8 + (block $label$9 + (if + (get_local $var$3) + (block $label$12 ;; these empty blocks must never be unreachable-typed + ) + (block $label$13 + (br $label$9) + ) + ) + (br $label$8) + ) + ) + ) + (block $label$16 + (if + (get_local $var$6) + (block $label$17 + ) + (block $label$18 + (br $label$3) + ) + ) + ) + ) + (drop + (call $23 + (get_local $var$7) + (get_local $var$4) + (get_local $var$0) + ) + ) + ) + ) + ) + ) + ) + ) + (func $23 (param i32) (param i32) (param i32) (result i32) + (unreachable) + ) + (func $unexitable-loops-result (param $0 i32) (result i64) + (loop $label$0 + (loop $label$1 + (if + (i32.load8_s + (i32.const 201460482) + ) + (br $label$0) + (block $label$3 + (br_if $label$3 + (get_local $0) + ) + ) + ) + (br $label$1) + ) + ) + ) +) + diff --git a/src/binaryen/test/passes/remove-unused-names_vacuum.txt b/src/binaryen/test/passes/remove-unused-names_vacuum.txt new file mode 100644 index 0000000000..e02fa3e9e2 --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-names_vacuum.txt @@ -0,0 +1,32 @@ +(module + (type $0 (func (result i32))) + (type $1 (func)) + (memory $0 0) + (func $return-i32-but-body-is-unreachable3 (; 0 ;) (type $0) (result i32) + (local $label i32) + (loop $while-in$1 + (br $while-in$1) + ) + ) + (func $return-i32-but-body-is-unreachable4 (; 1 ;) (type $0) (result i32) + (local $label i32) + (loop $while-in$1 + (br $while-in$1) + ) + ) + (func $to-drop-unreachable (; 2 ;) (type $1) + (drop + (block (result i32) + (unreachable) + ) + ) + ) + (func $return-i32-but-body-is-unreachable5 (; 3 ;) (type $0) (result i32) + (local $label i32) + (unreachable) + ) + (func $return-i32-but-body-is-unreachable6 (; 4 ;) (type $0) (result i32) + (local $label i32) + (unreachable) + ) +) diff --git a/src/binaryen/test/passes/remove-unused-names_vacuum.wast b/src/binaryen/test/passes/remove-unused-names_vacuum.wast new file mode 100644 index 0000000000..66412353ca --- /dev/null +++ b/src/binaryen/test/passes/remove-unused-names_vacuum.wast @@ -0,0 +1,40 @@ +(module + (func $return-i32-but-body-is-unreachable3 (result i32) + (local $label i32) + (block ;; without a name here, vaccum had a too-eager bug + (loop $while-in$1 + (br $while-in$1) + ) + ) + ) + (func $return-i32-but-body-is-unreachable4 (result i32) + (local $label i32) + (block ;; without a name here, vaccum had a too-eager bug + (loop $while-in$1 + (br $while-in$1) + ) + ) + (i32.const 0) + ) + (func $to-drop-unreachable + (drop + (block (result i32) + (unreachable) + ) + ) + ) + (func $return-i32-but-body-is-unreachable5 (result i32) + (local $label i32) + (block ;; without a name here, vaccum had a too-eager bug + (unreachable) + ) + ) + (func $return-i32-but-body-is-unreachable6 (result i32) + (local $label i32) + (block ;; without a name here, vaccum had a too-eager bug + (unreachable) + ) + (i32.const 0) + ) +) + diff --git a/src/binaryen/test/passes/reorder-functions.txt b/src/binaryen/test/passes/reorder-functions.txt new file mode 100644 index 0000000000..f2fbcec30d --- /dev/null +++ b/src/binaryen/test/passes/reorder-functions.txt @@ -0,0 +1,16 @@ +(module + (type $0 (func)) + (memory $0 256 256) + (func $c (; 0 ;) (type $0) + (call $c) + (call $c) + (call $c) + ) + (func $b (; 1 ;) (type $0) + (call $b) + (call $b) + ) + (func $a (; 2 ;) (type $0) + (call $a) + ) +) diff --git a/src/binaryen/test/passes/reorder-functions.wast b/src/binaryen/test/passes/reorder-functions.wast new file mode 100644 index 0000000000..a69afa3b92 --- /dev/null +++ b/src/binaryen/test/passes/reorder-functions.wast @@ -0,0 +1,16 @@ +(module + (memory 256 256) + (type $0 (func)) + (func $a (type $0) + (call $a) + ) + (func $b (type $0) + (call $b) + (call $b) + ) + (func $c (type $0) + (call $c) + (call $c) + (call $c) + ) +) diff --git a/src/binaryen/test/passes/reorder-locals.txt b/src/binaryen/test/passes/reorder-locals.txt new file mode 100644 index 0000000000..0770f03826 --- /dev/null +++ b/src/binaryen/test/passes/reorder-locals.txt @@ -0,0 +1,55 @@ +(module + (type $0 (func (param i32 i32))) + (type $1 (func)) + (memory $0 256 256) + (func $b0-yes (; 0 ;) (type $0) (param $a i32) (param $b i32) + (local $z i32) + (local $y i32) + (local $x i32) + (set_local $x + (get_local $x) + ) + (set_local $y + (get_local $y) + ) + (set_local $y + (get_local $y) + ) + (set_local $z + (get_local $z) + ) + (set_local $z + (get_local $z) + ) + (set_local $z + (get_local $z) + ) + (set_local $b + (get_local $b) + ) + (set_local $b + (get_local $b) + ) + (set_local $b + (get_local $b) + ) + (set_local $b + (get_local $b) + ) + (set_local $b + (get_local $b) + ) + (set_local $b + (get_local $b) + ) + ) + (func $zero (; 1 ;) (type $1) + (local $b i32) + (drop + (get_local $b) + ) + ) + (func $null (; 2 ;) (type $1) + (nop) + ) +) diff --git a/src/binaryen/test/passes/reorder-locals.wast b/src/binaryen/test/passes/reorder-locals.wast new file mode 100644 index 0000000000..872d352ee1 --- /dev/null +++ b/src/binaryen/test/passes/reorder-locals.wast @@ -0,0 +1,59 @@ +(module + (memory 256 256) + (type $0 (func (param i32 i32))) + (type $1 (func)) + (func $b0-yes (type $0) (param $a i32) (param $b i32) + (local $x i32) + (local $y i32) + (local $z i32) + (set_local $x + (get_local $x) + ) + (set_local $y + (get_local $y) + ) + (set_local $y + (get_local $y) + ) + (set_local $z + (get_local $z) + ) + (set_local $z + (get_local $z) + ) + (set_local $z + (get_local $z) + ) + (set_local $b + (get_local $b) + ) + (set_local $b + (get_local $b) + ) + (set_local $b + (get_local $b) + ) + (set_local $b + (get_local $b) + ) + (set_local $b + (get_local $b) + ) + (set_local $b + (get_local $b) + ) + ) + (func $zero (type $1) + (local $a i32) + (local $b i32) + (local $c i32) + (drop + (get_local $b) + ) + ) + (func $null (type $1) + (local $a i32) + (local $c i32) + (nop) + ) +) diff --git a/src/binaryen/test/passes/rereloop.txt b/src/binaryen/test/passes/rereloop.txt new file mode 100644 index 0000000000..52f0885941 --- /dev/null +++ b/src/binaryen/test/passes/rereloop.txt @@ -0,0 +1,808 @@ +(module + (type $0 (func)) + (type $1 (func (result i32))) + (type $2 (func (param i32) (result i32))) + (type $3 (func (param i32))) + (memory $0 0) + (func $trivial (; 0 ;) (type $0) + (local $0 i32) + (block + (nop) + (return) + ) + ) + (func $trivial2 (; 1 ;) (type $0) + (local $0 i32) + (block + (call $trivial) + (call $trivial) + (return) + ) + ) + (func $return-void (; 2 ;) (type $0) + (local $0 i32) + (block + (return) + ) + ) + (func $return-val (; 3 ;) (type $1) (result i32) + (local $0 i32) + (block + (return + (i32.const 1) + ) + ) + ) + (func $ifs (; 4 ;) (type $2) (param $x i32) (result i32) + (local $1 i32) + (block + ) + (if + (get_local $x) + (block + (block + ) + (if + (get_local $x) + (block + (block + (return + (i32.const 2) + ) + ) + ) + (block + (block + (return + (i32.const 3) + ) + ) + ) + ) + ) + (block + (block + ) + (if + (get_local $x) + (block + (block + (return + (i32.const 4) + ) + ) + ) + (block + (block + (return + (i32.const 5) + ) + ) + ) + ) + ) + ) + ) + (func $loops (; 5 ;) (type $3) (param $x i32) + (local $1 i32) + (block $block$5$break + (block + ) + (if + (get_local $x) + (block + (block $block$3$break + (block + ) + (block + (br $block$3$break) + ) + ) + (loop $shape$3$continue + (block + (call $trivial) + ) + (block + (br $shape$3$continue) + ) + ) + ) + (br $block$5$break) + ) + ) + (block + (block $block$6$break + (block + ) + (block + (br $block$6$break) + ) + ) + (block + (block $block$7$break + (loop $shape$6$continue + (block + (call $trivial) + ) + (if + (get_local $x) + (br $shape$6$continue) + (br $block$7$break) + ) + ) + ) + (block + (block $block$8$break + (block + ) + (block + (br $block$8$break) + ) + ) + (block + (block $block$11$break + (loop $shape$9$continue + (block $block$9$break + (block + (call $trivial) + ) + (if + (get_local $x) + (br $block$9$break) + (br $block$11$break) + ) + ) + (block + (block + ) + (block + (br $shape$9$continue) + ) + ) + ) + ) + (block + (block + (return) + ) + ) + ) + ) + ) + ) + ) + (func $br-out (; 6 ;) (type $3) (param $x i32) + (local $1 i32) + (block $block$2$break + (block + (call $br-out + (i32.const 5) + ) + ) + (block + (br $block$2$break) + ) + ) + (block + (block + (return) + ) + ) + ) + (func $unreachable (; 7 ;) (type $3) (param $x i32) + (local $1 i32) + (block $block$2$break + (block + ) + (if + (get_local $x) + (br $block$2$break) + (block + (block $block$11$break + (block + (call $unreachable + (i32.const 5) + ) + ) + (block + (br $block$11$break) + ) + ) + (block + (block + (return) + ) + ) + ) + ) + ) + (block + (block + ) + (if + (get_local $x) + (block + (block + (call $unreachable + (i32.const 1) + ) + (unreachable) + ) + ) + (block + (block + (call $unreachable + (i32.const 3) + ) + (return) + ) + ) + ) + ) + ) + (func $empty-blocks (; 8 ;) (type $3) (param $x i32) + (local $1 i32) + (block $block$2$break + (block + ) + (block + (br $block$2$break) + ) + ) + (block + (block $block$3$break + (block + ) + (block + (br $block$3$break) + ) + ) + (block + (block + (return) + ) + ) + ) + ) + (func $before-and-after (; 9 ;) (type $3) (param $x i32) + (local $1 i32) + (block $block$2$break + (block + (call $before-and-after + (i32.const 1) + ) + (call $before-and-after + (i32.const 2) + ) + ) + (block + (br $block$2$break) + ) + ) + (block + (block $block$3$break + (block + (call $before-and-after + (i32.const 3) + ) + (call $before-and-after + (i32.const 4) + ) + ) + (if + (get_local $x) + (br $block$3$break) + (block + (block + (call $before-and-after + (i32.const 5) + ) + ) + (block + (br $block$3$break) + ) + ) + ) + ) + (block + (block $block$5$break + (block + (call $before-and-after + (i32.const 6) + ) + ) + (block + (br $block$5$break) + ) + ) + (block + (block $block$6$break + (block + (nop) + (call $before-and-after + (i32.const 7) + ) + ) + (block + (br $block$6$break) + ) + ) + (block + (block $block$7$break + (block + (nop) + (call $before-and-after + (i32.const 8) + ) + ) + (block + (br $block$7$break) + ) + ) + (block + (block $block$8$break + (loop $shape$7$continue + (block + (call $before-and-after + (i32.const 9) + ) + ) + (if + (get_local $x) + (br $shape$7$continue) + (br $block$8$break) + ) + ) + ) + (block + (block $block$10$break + (block + (call $before-and-after + (i32.const 10) + ) + (call $before-and-after + (i32.const 11) + ) + ) + (if + (get_local $x) + (block + (block + (call $before-and-after + (i32.const 12) + ) + ) + (block + (br $block$10$break) + ) + ) + (br $block$10$break) + ) + ) + (block + (block $block$13$break + (block + (call $before-and-after + (i32.const 13) + ) + ) + (if + (get_local $x) + (block + (block + (call $before-and-after + (i32.const 14) + ) + ) + (block + (br $block$13$break) + ) + ) + (block + (block + (call $before-and-after + (i32.const 15) + ) + ) + (block + (br $block$13$break) + ) + ) + ) + ) + (block + (block $block$16$break + (block + ) + (if + (get_local $x) + (block + (block $block$15$break + (block + (call $before-and-after + (i32.const 16) + ) + ) + (block + (br $block$15$break) + ) + ) + (block + (block + ) + (block + (br $block$16$break) + ) + ) + ) + (br $block$16$break) + ) + ) + (block + (block $block$18$break + (block + (call $before-and-after + (i32.const 17) + ) + (call $before-and-after + (i32.const 18) + ) + (call $before-and-after + (i32.const 19) + ) + ) + (block + (br $block$18$break) + ) + ) + (block + (block $block$17$break + (block + (call $before-and-after + (i32.const 20) + ) + ) + (block + (br $block$17$break) + ) + ) + (block + (block $block$20$break + (block + (call $before-and-after + (i32.const 21) + ) + (call $before-and-after + (i32.const 22) + ) + ) + (block + (br $block$20$break) + ) + ) + (block + (block $block$19$break + (block + ) + (block + (br $block$19$break) + ) + ) + (block + (block $block$22$break + (block + (call $before-and-after + (i32.const 23) + ) + (call $before-and-after + (i32.const 24) + ) + ) + (block + (br $block$22$break) + ) + ) + (block + (block $block$21$break + (block + ) + (block + (br $block$21$break) + ) + ) + (block + (block + (call $before-and-after + (i32.const 25) + ) + (return) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (func $switch (; 10 ;) (type $3) (param $x i32) + (local $1 i32) + (block $block$3$break + (block + ) + (block $switch$1$leave + (block $switch$1$default + (block $switch$1$case$3 + (br_table $switch$1$case$3 $switch$1$default + (get_local $x) + ) + ) + (block + (br $block$3$break) + ) + ) + (block + (block + (block + ) + (block + (br $block$3$break) + ) + ) + ) + ) + ) + (block + (block $block$6$break + (block + (call $switch + (i32.const 1) + ) + ) + (block $switch$3$leave + (block $switch$3$default + (block $switch$3$case$6 + (br_table $switch$3$case$6 $switch$3$case$6 $switch$3$case$6 $switch$3$default + (get_local $x) + ) + ) + (block + (br $block$6$break) + ) + ) + (block + (block + (block + (call $switch + (i32.const 2) + ) + ) + (block + (br $block$6$break) + ) + ) + ) + ) + ) + (block + (block $block$2$break + (block + (call $switch + (i32.const 3) + ) + ) + (block + (br $block$2$break) + ) + ) + (block + (block + (return) + ) + ) + ) + ) + ) + (func $no-return (; 11 ;) (type $0) + (local $0 i32) + (block $block$4$break + (block + ) + (if + (i32.const 1) + (block + (block + (drop + (i32.const 2) + ) + ) + (block + (br $block$4$break) + ) + ) + (block + (block + (drop + (i32.const 3) + ) + ) + (block + (br $block$4$break) + ) + ) + ) + ) + (block + (block + (return) + ) + ) + ) + (func $if-br-wat (; 12 ;) (type $3) (param $x i32) + (local $1 i32) + (block $block$2$break + (block $block$8$break + (block + (call $if-br-wat + (i32.const 0) + ) + ) + (if + (get_local $x) + (block + (block + (call $if-br-wat + (i32.const 1) + ) + ) + (block + (br $block$8$break) + ) + ) + (block + (block + ) + (if + (get_local $x) + (block + (block + ) + (block + (br $block$2$break) + ) + ) + (block + (block + ) + (block + (br $block$8$break) + ) + ) + ) + ) + ) + ) + (block + (block + (call $if-br-wat + (i32.const 2) + ) + ) + (block + (br $block$2$break) + ) + ) + ) + (block + (block + (call $if-br-wat + (i32.const 3) + ) + (return) + ) + ) + ) + (func $switcher-to-nowhere (; 13 ;) (type $2) (param $0 i32) (result i32) + (local $1 i32) + (block + (block + ) + (block $switch$1$leave + (block $switch$1$default + (block $switch$1$case$3 + (block $switch$1$case$4 + (br_table $switch$1$case$4 $switch$1$case$3 $switch$1$default + (get_local $0) + ) + ) + (block + (block + (block + (return + (i32.const 1) + ) + ) + ) + ) + ) + (block + (block + (block + (return + (i32.const 2) + ) + ) + ) + ) + ) + (block + (block + (block + (return + (i32.const 3) + ) + ) + ) + ) + ) + ) + (unreachable) + ) +) +(module + (type $0 (func)) + (type $1 (func (result i32))) + (global $global$0 (mut i32) (i32.const 1)) + (memory $0 0) + (export "one" (func $0)) + (export "two" (func $1)) + (func $0 (; 0 ;) (type $0) + (local $0 i32) + (block $block$4$break + (block + ) + (if + (i32.const 1) + (block + (block + (return) + ) + ) + (br $block$4$break) + ) + ) + (block + (block $block$3$break + (block + (set_global $global$0 + (i32.const 0) + ) + ) + (block + (br $block$3$break) + ) + ) + (block + (block + (unreachable) + ) + ) + ) + ) + (func $1 (; 1 ;) (type $1) (result i32) + (local $0 i32) + (block + (return + (get_global $global$0) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/rereloop.wast b/src/binaryen/test/passes/rereloop.wast new file mode 100644 index 0000000000..36057566a9 --- /dev/null +++ b/src/binaryen/test/passes/rereloop.wast @@ -0,0 +1,221 @@ +(module + (func $trivial + (nop) + ) + (func $trivial2 + (call $trivial) + (call $trivial) + ) + (func $return-void + (return) + ) + (func $return-val (result i32) + (return (i32.const 1)) + ) + (func $ifs (param $x i32) (result i32) + (if + (get_local $x) + (if + (get_local $x) + (return (i32.const 2)) + (return (i32.const 3)) + ) + ) + (if + (get_local $x) + (return (i32.const 4)) + ) + (return (i32.const 5)) + ) + (func $loops (param $x i32) + (if (get_local $x) + (loop $top + (call $trivial) + (br $top) + ) + ) + (loop $top2 + (call $trivial) + (br_if $top2 (get_local $x)) + ) + (loop $top3 + (call $trivial) + (if (get_local $x) (br $top3)) + ) + ) + (func $br-out (param $x i32) + (block $out + (call $br-out (i32.const 5)) + (br $out) + ) + ) + (func $unreachable (param $x i32) + (if (get_local $x) + (if (get_local $x) + (block + (call $unreachable (i32.const 1)) + (unreachable) + (call $unreachable (i32.const 2)) + ) + (block + (call $unreachable (i32.const 3)) + (return) + (call $unreachable (i32.const 4)) + ) + ) + ) + (block $out + (call $unreachable (i32.const 5)) + (br $out) + (call $unreachable (i32.const 6)) + ) + ) + (func $empty-blocks (param $x i32) + (block) + (block) + ) + (func $before-and-after (param $x i32) + (call $before-and-after (i32.const 1)) + (block + (call $before-and-after (i32.const 2)) + ) + (call $before-and-after (i32.const 3)) + (block $out + (call $before-and-after (i32.const 4)) + (br_if $out (get_local $x)) + (call $before-and-after (i32.const 5)) + ) + (call $before-and-after (i32.const 6)) + (loop) + (call $before-and-after (i32.const 7)) + (loop $top) + (call $before-and-after (i32.const 8)) + (loop $top2 + (call $before-and-after (i32.const 9)) + (br_if $top2 (get_local $x)) + (call $before-and-after (i32.const 10)) + ) + (call $before-and-after (i32.const 11)) + (if (get_local $x) + (call $before-and-after (i32.const 12)) + ) + (call $before-and-after (i32.const 13)) + (if (get_local $x) + (call $before-and-after (i32.const 14)) + (call $before-and-after (i32.const 15)) + ) + (if (get_local $x) + (block + (call $before-and-after (i32.const 16)) + ) + ) + (call $before-and-after (i32.const 17)) + (block + (call $before-and-after (i32.const 18)) + (block + (call $before-and-after (i32.const 19)) + ) + (call $before-and-after (i32.const 20)) + ) + (call $before-and-after (i32.const 21)) + (block + (block + (call $before-and-after (i32.const 22)) + ) + ) + (call $before-and-after (i32.const 23)) + (block $no1 + (block $no2 + (call $before-and-after (i32.const 24)) + ) + ) + (call $before-and-after (i32.const 25)) + ) + (func $switch (param $x i32) + (block $out + (block $a + (br_table $a $a (get_local $x)) + ) + (call $switch (i32.const 1)) + (block $b + (block $c + (br_table $b $b $b $c (get_local $x)) + ) + (call $switch (i32.const 2)) + ) + (call $switch (i32.const 3)) + ) + ) + (func $no-return + (if (i32.const 1) + (drop (i32.const 2)) + (drop (i32.const 3)) + ) + ) + (func $if-br-wat (param $x i32) + (call $if-br-wat + (i32.const 0) + ) + (block $label$2 + (if + (get_local $x) + (call $if-br-wat + (i32.const 1) + ) + (if + (get_local $x) + (br $label$2) ;; waka + ) + ) + (call $if-br-wat + (i32.const 2) + ) + ) + (call $if-br-wat + (i32.const 3) + ) + ) + + (func $switcher-to-nowhere (param $0 i32) (result i32) + (block $switch + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-case0 $switch + (get_local $0) + ) + ) + (return + (i32.const 1) + ) + ) + (return + (i32.const 2) + ) + ) + (return + (i32.const 3) + ) + ) +) +(module + (global $global$0 (mut i32) (i32.const 1)) + (export "one" (func $0)) + (export "two" (func $1)) + (func $0 + (block $outer + (block + (br_if $outer ;; taken - do not modify the global, stay it at 1 + (i32.const 1) + ) + (set_global $global$0 ;; never get here! + (i32.const 0) + ) + ) + (unreachable) + ) + ) + (func $1 (result i32) + (return (get_global $global$0)) + ) +) + diff --git a/src/binaryen/test/passes/rereloop_dce_remove-unused-brs_remove-unused-names_coalesce-locals_simplify-locals_reorder-locals_remove-unused-brs_merge-blocks_vacuum.txt b/src/binaryen/test/passes/rereloop_dce_remove-unused-brs_remove-unused-names_coalesce-locals_simplify-locals_reorder-locals_remove-unused-brs_merge-blocks_vacuum.txt new file mode 100644 index 0000000000..6aecee1235 --- /dev/null +++ b/src/binaryen/test/passes/rereloop_dce_remove-unused-brs_remove-unused-names_coalesce-locals_simplify-locals_reorder-locals_remove-unused-brs_merge-blocks_vacuum.txt @@ -0,0 +1,242 @@ +(module + (type $0 (func)) + (type $1 (func (result i32))) + (type $2 (func (param i32) (result i32))) + (type $3 (func (param i32))) + (memory $0 0) + (func $trivial (; 0 ;) (type $0) + (nop) + ) + (func $trivial2 (; 1 ;) (type $0) + (call $trivial) + (call $trivial) + ) + (func $return-void (; 2 ;) (type $0) + (nop) + ) + (func $return-val (; 3 ;) (type $1) (result i32) + (i32.const 1) + ) + (func $ifs (; 4 ;) (type $2) (param $0 i32) (result i32) + (if (result i32) + (get_local $0) + (if (result i32) + (get_local $0) + (i32.const 2) + (i32.const 3) + ) + (if (result i32) + (get_local $0) + (i32.const 4) + (i32.const 5) + ) + ) + ) + (func $loops (; 5 ;) (type $3) (param $0 i32) + (if + (get_local $0) + (loop $shape$3$continue + (call $trivial) + (br $shape$3$continue) + ) + ) + (loop $shape$6$continue + (call $trivial) + (br_if $shape$6$continue + (get_local $0) + ) + ) + (block $block$11$break + (loop $shape$9$continue + (call $trivial) + (br_if $block$11$break + (i32.eqz + (get_local $0) + ) + ) + (br $shape$9$continue) + ) + ) + ) + (func $br-out (; 6 ;) (type $3) (param $0 i32) + (call $br-out + (i32.const 5) + ) + ) + (func $unreachable (; 7 ;) (type $3) (param $0 i32) + (if + (i32.eqz + (get_local $0) + ) + (block + (call $unreachable + (i32.const 5) + ) + (return) + ) + ) + (if + (get_local $0) + (block + (call $unreachable + (i32.const 1) + ) + (unreachable) + ) + (call $unreachable + (i32.const 3) + ) + ) + ) + (func $empty-blocks (; 8 ;) (type $3) (param $0 i32) + (nop) + ) + (func $before-and-after (; 9 ;) (type $3) (param $0 i32) + (call $before-and-after + (i32.const 1) + ) + (call $before-and-after + (i32.const 2) + ) + (call $before-and-after + (i32.const 3) + ) + (call $before-and-after + (i32.const 4) + ) + (if + (i32.eqz + (get_local $0) + ) + (call $before-and-after + (i32.const 5) + ) + ) + (call $before-and-after + (i32.const 6) + ) + (call $before-and-after + (i32.const 7) + ) + (call $before-and-after + (i32.const 8) + ) + (loop $shape$7$continue + (call $before-and-after + (i32.const 9) + ) + (br_if $shape$7$continue + (get_local $0) + ) + ) + (call $before-and-after + (i32.const 10) + ) + (call $before-and-after + (i32.const 11) + ) + (if + (get_local $0) + (call $before-and-after + (i32.const 12) + ) + ) + (call $before-and-after + (i32.const 13) + ) + (if + (get_local $0) + (call $before-and-after + (i32.const 14) + ) + (call $before-and-after + (i32.const 15) + ) + ) + (if + (get_local $0) + (call $before-and-after + (i32.const 16) + ) + ) + (call $before-and-after + (i32.const 17) + ) + (call $before-and-after + (i32.const 18) + ) + (call $before-and-after + (i32.const 19) + ) + (call $before-and-after + (i32.const 20) + ) + (call $before-and-after + (i32.const 21) + ) + (call $before-and-after + (i32.const 22) + ) + (call $before-and-after + (i32.const 23) + ) + (call $before-and-after + (i32.const 24) + ) + (call $before-and-after + (i32.const 25) + ) + ) + (func $switch (; 10 ;) (type $3) (param $0 i32) + (block $switch$1$case$3 + (br_table $switch$1$case$3 $switch$1$case$3 + (get_local $0) + ) + ) + (block $block$6$break + (call $switch + (i32.const 1) + ) + (block $switch$3$default + (block $switch$3$case$6 + (br_table $switch$3$case$6 $switch$3$case$6 $switch$3$case$6 $switch$3$default + (get_local $0) + ) + ) + (br $block$6$break) + ) + (call $switch + (i32.const 2) + ) + ) + (call $switch + (i32.const 3) + ) + ) + (func $no-return (; 11 ;) (type $0) + (nop) + ) + (func $if-br-wat (; 12 ;) (type $3) (param $0 i32) + (block $block$2$break + (call $if-br-wat + (i32.const 0) + ) + (if + (get_local $0) + (call $if-br-wat + (i32.const 1) + ) + (if + (get_local $0) + (br $block$2$break) + ) + ) + (call $if-br-wat + (i32.const 2) + ) + ) + (call $if-br-wat + (i32.const 3) + ) + ) +) diff --git a/src/binaryen/test/passes/rereloop_dce_remove-unused-brs_remove-unused-names_coalesce-locals_simplify-locals_reorder-locals_remove-unused-brs_merge-blocks_vacuum.wast b/src/binaryen/test/passes/rereloop_dce_remove-unused-brs_remove-unused-names_coalesce-locals_simplify-locals_reorder-locals_remove-unused-brs_merge-blocks_vacuum.wast new file mode 100644 index 0000000000..38c74ff568 --- /dev/null +++ b/src/binaryen/test/passes/rereloop_dce_remove-unused-brs_remove-unused-names_coalesce-locals_simplify-locals_reorder-locals_remove-unused-brs_merge-blocks_vacuum.wast @@ -0,0 +1,179 @@ +(module + (func $trivial + (nop) + ) + (func $trivial2 + (call $trivial) + (call $trivial) + ) + (func $return-void + (return) + ) + (func $return-val (result i32) + (return (i32.const 1)) + ) + (func $ifs (param $x i32) (result i32) + (if + (get_local $x) + (if + (get_local $x) + (return (i32.const 2)) + (return (i32.const 3)) + ) + ) + (if + (get_local $x) + (return (i32.const 4)) + ) + (return (i32.const 5)) + ) + (func $loops (param $x i32) + (if (get_local $x) + (loop $top + (call $trivial) + (br $top) + ) + ) + (loop $top2 + (call $trivial) + (br_if $top2 (get_local $x)) + ) + (loop $top3 + (call $trivial) + (if (get_local $x) (br $top3)) + ) + ) + (func $br-out (param $x i32) + (block $out + (call $br-out (i32.const 5)) + (br $out) + ) + ) + (func $unreachable (param $x i32) + (if (get_local $x) + (if (get_local $x) + (block + (call $unreachable (i32.const 1)) + (unreachable) + (call $unreachable (i32.const 2)) + ) + (block + (call $unreachable (i32.const 3)) + (return) + (call $unreachable (i32.const 4)) + ) + ) + ) + (block $out + (call $unreachable (i32.const 5)) + (br $out) + (call $unreachable (i32.const 6)) + ) + ) + (func $empty-blocks (param $x i32) + (block) + (block) + ) + (func $before-and-after (param $x i32) + (call $before-and-after (i32.const 1)) + (block + (call $before-and-after (i32.const 2)) + ) + (call $before-and-after (i32.const 3)) + (block $out + (call $before-and-after (i32.const 4)) + (br_if $out (get_local $x)) + (call $before-and-after (i32.const 5)) + ) + (call $before-and-after (i32.const 6)) + (loop) + (call $before-and-after (i32.const 7)) + (loop $top) + (call $before-and-after (i32.const 8)) + (loop $top2 + (call $before-and-after (i32.const 9)) + (br_if $top2 (get_local $x)) + (call $before-and-after (i32.const 10)) + ) + (call $before-and-after (i32.const 11)) + (if (get_local $x) + (call $before-and-after (i32.const 12)) + ) + (call $before-and-after (i32.const 13)) + (if (get_local $x) + (call $before-and-after (i32.const 14)) + (call $before-and-after (i32.const 15)) + ) + (if (get_local $x) + (block + (call $before-and-after (i32.const 16)) + ) + ) + (call $before-and-after (i32.const 17)) + (block + (call $before-and-after (i32.const 18)) + (block + (call $before-and-after (i32.const 19)) + ) + (call $before-and-after (i32.const 20)) + ) + (call $before-and-after (i32.const 21)) + (block + (block + (call $before-and-after (i32.const 22)) + ) + ) + (call $before-and-after (i32.const 23)) + (block $no1 + (block $no2 + (call $before-and-after (i32.const 24)) + ) + ) + (call $before-and-after (i32.const 25)) + ) + (func $switch (param $x i32) + (block $out + (block $a + (br_table $a $a (get_local $x)) + ) + (call $switch (i32.const 1)) + (block $b + (block $c + (br_table $b $b $b $c (get_local $x)) + ) + (call $switch (i32.const 2)) + ) + (call $switch (i32.const 3)) + ) + ) + (func $no-return + (if (i32.const 1) + (drop (i32.const 2)) + (drop (i32.const 3)) + ) + ) + (func $if-br-wat (param $x i32) + (call $if-br-wat + (i32.const 0) + ) + (block $label$2 + (if + (get_local $x) + (call $if-br-wat + (i32.const 1) + ) + (if + (get_local $x) + (br $label$2) ;; waka + ) + ) + (call $if-br-wat + (i32.const 2) + ) + ) + (call $if-br-wat + (i32.const 3) + ) + ) +) + diff --git a/src/binaryen/test/passes/safe-heap.txt b/src/binaryen/test/passes/safe-heap.txt new file mode 100644 index 0000000000..dd5244c154 --- /dev/null +++ b/src/binaryen/test/passes/safe-heap.txt @@ -0,0 +1,10981 @@ +(module + (type $0 (func)) + (type $FUNCSIG$v (func)) + (import "env" "DYNAMICTOP_PTR" (global $DYNAMICTOP_PTR i32)) + (import "env" "segfault" (func $segfault)) + (import "env" "alignfault" (func $alignfault)) + (memory $0 (shared 100 100)) + (func $loads (; 2 ;) (type $0) + (drop + (call $SAFE_HEAP_LOAD_i32_4_U_4 + (i32.const 1) + (i32.const 0) + ) + ) + (drop + (call $SAFE_HEAP_LOAD_i32_4_U_A + (i32.const 1) + (i32.const 0) + ) + ) + (drop + (call $SAFE_HEAP_LOAD_i32_4_U_4 + (i32.const 2) + (i32.const 31) + ) + ) + (drop + (call $SAFE_HEAP_LOAD_i32_4_U_2 + (i32.const 3) + (i32.const 0) + ) + ) + (drop + (call $SAFE_HEAP_LOAD_i32_4_U_1 + (i32.const 4) + (i32.const 0) + ) + ) + (drop + (call $SAFE_HEAP_LOAD_i32_1_1 + (i32.const 5) + (i32.const 0) + ) + ) + (drop + (call $SAFE_HEAP_LOAD_i32_2_U_2 + (i32.const 6) + (i32.const 0) + ) + ) + (drop + (call $SAFE_HEAP_LOAD_i64_1_1 + (i32.const 7) + (i32.const 0) + ) + ) + (drop + (call $SAFE_HEAP_LOAD_i64_2_U_2 + (i32.const 8) + (i32.const 0) + ) + ) + (drop + (call $SAFE_HEAP_LOAD_i64_4_4 + (i32.const 9) + (i32.const 0) + ) + ) + (drop + (call $SAFE_HEAP_LOAD_i64_8_U_4 + (i32.const 10) + (i32.const 0) + ) + ) + (drop + (call $SAFE_HEAP_LOAD_i64_8_U_8 + (i32.const 11) + (i32.const 0) + ) + ) + (drop + (call $SAFE_HEAP_LOAD_f32_4_4 + (i32.const 12) + (i32.const 0) + ) + ) + (drop + (call $SAFE_HEAP_LOAD_f64_8_8 + (i32.const 13) + (i32.const 0) + ) + ) + ) + (func $stores (; 3 ;) (type $0) + (call $SAFE_HEAP_STORE_i32_4_4 + (i32.const 1) + (i32.const 0) + (i32.const 100) + ) + (call $SAFE_HEAP_STORE_i32_4_A + (i32.const 1) + (i32.const 0) + (i32.const 100) + ) + (call $SAFE_HEAP_STORE_i32_4_4 + (i32.const 2) + (i32.const 31) + (i32.const 200) + ) + (call $SAFE_HEAP_STORE_i32_4_2 + (i32.const 3) + (i32.const 0) + (i32.const 300) + ) + (call $SAFE_HEAP_STORE_i32_4_1 + (i32.const 4) + (i32.const 0) + (i32.const 400) + ) + (call $SAFE_HEAP_STORE_i32_1_1 + (i32.const 5) + (i32.const 0) + (i32.const 500) + ) + (call $SAFE_HEAP_STORE_i32_2_2 + (i32.const 6) + (i32.const 0) + (i32.const 600) + ) + (call $SAFE_HEAP_STORE_i64_1_1 + (i32.const 7) + (i32.const 0) + (i64.const 700) + ) + (call $SAFE_HEAP_STORE_i64_2_2 + (i32.const 8) + (i32.const 0) + (i64.const 800) + ) + (call $SAFE_HEAP_STORE_i64_4_4 + (i32.const 9) + (i32.const 0) + (i64.const 900) + ) + (call $SAFE_HEAP_STORE_i64_8_4 + (i32.const 10) + (i32.const 0) + (i64.const 1000) + ) + (call $SAFE_HEAP_STORE_i64_8_8 + (i32.const 11) + (i32.const 0) + (i64.const 1100) + ) + (call $SAFE_HEAP_STORE_f32_4_4 + (i32.const 12) + (i32.const 0) + (f32.const 1200) + ) + (call $SAFE_HEAP_STORE_f64_8_8 + (i32.const 13) + (i32.const 0) + (f64.const 1300) + ) + ) + (func $SAFE_HEAP_LOAD_i32_1_A (; 4 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.shr_s + (i32.shl + (i32.atomic.load8_u + (get_local $2) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (func $SAFE_HEAP_LOAD_i32_1_1 (; 5 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.load8_s + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_1_U_A (; 6 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.atomic.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_1_U_1 (; 7 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_2_1 (; 8 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.load16_s align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_2_A (; 9 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.shr_s + (i32.shl + (i32.atomic.load16_u + (get_local $2) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + (func $SAFE_HEAP_LOAD_i32_2_2 (; 10 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.load16_s + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_2_U_1 (; 11 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.load16_u align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_2_U_A (; 12 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.atomic.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_2_U_2 (; 13 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_1 (; 14 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_2 (; 15 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_A (; 16 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i32.atomic.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_4 (; 17 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i32.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_U_1 (; 18 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_U_2 (; 19 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_U_A (; 20 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i32.atomic.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_U_4 (; 21 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i32.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_1_A (; 22 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.shr_s + (i64.shl + (i64.atomic.load8_u + (get_local $2) + ) + (i64.const 56) + ) + (i64.const 56) + ) + ) + (func $SAFE_HEAP_LOAD_i64_1_1 (; 23 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load8_s + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_1_U_A (; 24 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.atomic.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_1_U_1 (; 25 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_2_1 (; 26 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load16_s align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_2_A (; 27 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.shr_s + (i64.shl + (i64.atomic.load16_u + (get_local $2) + ) + (i64.const 48) + ) + (i64.const 48) + ) + ) + (func $SAFE_HEAP_LOAD_i64_2_2 (; 28 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.load16_s + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_2_U_1 (; 29 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load16_u align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_2_U_A (; 30 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.atomic.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_2_U_2 (; 31 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_1 (; 32 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load32_s align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_2 (; 33 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.load32_s align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_A (; 34 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.shr_s + (i64.shl + (i64.atomic.load32_u + (get_local $2) + ) + (i64.const 32) + ) + (i64.const 32) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_4 (; 35 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.load32_s + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_U_1 (; 36 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load32_u align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_U_2 (; 37 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.load32_u align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_U_A (; 38 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.atomic.load32_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_U_4 (; 39 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.load32_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_1 (; 40 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_2 (; 41 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_4 (; 42 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.load align=4 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_A (; 43 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 7) + ) + (call $alignfault) + ) + (i64.atomic.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_8 (; 44 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 7) + ) + (call $alignfault) + ) + (i64.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_U_1 (; 45 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_U_2 (; 46 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_U_4 (; 47 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.load align=4 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_U_A (; 48 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 7) + ) + (call $alignfault) + ) + (i64.atomic.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_U_8 (; 49 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 7) + ) + (call $alignfault) + ) + (i64.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_1_A (; 50 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.atomic.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_1_1 (; 51 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_2_1 (; 52 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.load16_u align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_2_A (; 53 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (f32.atomic.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_2_2 (; 54 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (f32.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_4_1 (; 55 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_4_2 (; 56 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (f32.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_4_A (; 57 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (f32.atomic.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_4_4 (; 58 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (f32.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_1_A (; 59 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.atomic.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_1_1 (; 60 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_2_1 (; 61 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.load16_u align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_2_A (; 62 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.atomic.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_2_2 (; 63 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_4_1 (; 64 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_4_2 (; 65 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_4_A (; 66 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (f64.atomic.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_4_4 (; 67 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (f64.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_8_1 (; 68 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_8_2 (; 69 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_8_4 (; 70 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (f64.load align=4 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_8_A (; 71 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 7) + ) + (call $alignfault) + ) + (f64.atomic.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_8_8 (; 72 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 7) + ) + (call $alignfault) + ) + (f64.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_1_A (; 73 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.atomic.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_1_1 (; 74 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_2_1 (; 75 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.store16 align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_2_A (; 76 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.atomic.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_2_2 (; 77 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_4_1 (; 78 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.store align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_4_2 (; 79 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.store align=2 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_4_A (; 80 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (i32.atomic.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_4_4 (; 81 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (i32.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_1_A (; 82 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.atomic.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_1_1 (; 83 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_2_1 (; 84 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.store16 align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_2_A (; 85 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.atomic.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_2_2 (; 86 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_4_1 (; 87 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.store32 align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_4_2 (; 88 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.store32 align=2 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_4_A (; 89 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.atomic.store32 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_4_4 (; 90 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.store32 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_8_1 (; 91 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.store align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_8_2 (; 92 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.store align=2 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_8_4 (; 93 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.store align=4 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_8_A (; 94 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 7) + ) + (call $alignfault) + ) + (i64.atomic.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_8_8 (; 95 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 7) + ) + (call $alignfault) + ) + (i64.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_1_A (; 96 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.atomic.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_1_1 (; 97 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_2_1 (; 98 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.store16 align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_2_A (; 99 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (f32.atomic.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_2_2 (; 100 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (f32.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_4_1 (; 101 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.store align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_4_2 (; 102 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (f32.store align=2 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_4_A (; 103 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (f32.atomic.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_4_4 (; 104 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (f32.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_1_A (; 105 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.atomic.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_1_1 (; 106 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_2_1 (; 107 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.store16 align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_2_A (; 108 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.atomic.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_2_2 (; 109 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_4_1 (; 110 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.store align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_4_2 (; 111 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.store align=2 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_4_A (; 112 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (f64.atomic.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_4_4 (; 113 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (f64.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_8_1 (; 114 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.store align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_8_2 (; 115 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.store align=2 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_8_4 (; 116 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (f64.store align=4 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_8_A (; 117 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 7) + ) + (call $alignfault) + ) + (f64.atomic.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_8_8 (; 118 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 7) + ) + (call $alignfault) + ) + (f64.store + (get_local $3) + (get_local $2) + ) + ) +) +(module + (type $0 (func)) + (type $FUNCSIG$v (func)) + (import "env" "DYNAMICTOP_PTR" (global $DYNAMICTOP_PTR i32)) + (import "env" "segfault" (func $segfault)) + (import "env" "alignfault" (func $alignfault)) + (memory $0 100 100) + (func $loads (; 2 ;) (type $0) + (drop + (call $SAFE_HEAP_LOAD_i32_4_U_4 + (i32.const 1) + (i32.const 0) + ) + ) + ) + (func $SAFE_HEAP_LOAD_i32_1_1 (; 3 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.load8_s + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_1_U_1 (; 4 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_2_1 (; 5 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.load16_s align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_2_2 (; 6 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.load16_s + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_2_U_1 (; 7 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.load16_u align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_2_U_2 (; 8 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_1 (; 9 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_2 (; 10 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_4 (; 11 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i32.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_U_1 (; 12 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_U_2 (; 13 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_U_4 (; 14 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i32.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_1_1 (; 15 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load8_s + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_1_U_1 (; 16 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_2_1 (; 17 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load16_s align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_2_2 (; 18 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.load16_s + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_2_U_1 (; 19 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load16_u align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_2_U_2 (; 20 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_1 (; 21 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load32_s align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_2 (; 22 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.load32_s align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_4 (; 23 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.load32_s + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_U_1 (; 24 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load32_u align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_U_2 (; 25 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.load32_u align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_U_4 (; 26 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.load32_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_1 (; 27 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_2 (; 28 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_4 (; 29 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.load align=4 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_8 (; 30 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 7) + ) + (call $alignfault) + ) + (i64.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_U_1 (; 31 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_U_2 (; 32 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_U_4 (; 33 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.load align=4 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_U_8 (; 34 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 7) + ) + (call $alignfault) + ) + (i64.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_1_1 (; 35 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_2_1 (; 36 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.load16_u align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_2_2 (; 37 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (f32.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_4_1 (; 38 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_4_2 (; 39 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (f32.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_4_4 (; 40 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (f32.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_1_1 (; 41 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_2_1 (; 42 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.load16_u align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_2_2 (; 43 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_4_1 (; 44 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_4_2 (; 45 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_4_4 (; 46 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (f64.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_8_1 (; 47 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_8_2 (; 48 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_8_4 (; 49 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (f64.load align=4 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_8_8 (; 50 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 7) + ) + (call $alignfault) + ) + (f64.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_1_1 (; 51 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_2_1 (; 52 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.store16 align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_2_2 (; 53 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_4_1 (; 54 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.store align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_4_2 (; 55 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.store align=2 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_4_4 (; 56 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (i32.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_1_1 (; 57 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_2_1 (; 58 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.store16 align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_2_2 (; 59 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_4_1 (; 60 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.store32 align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_4_2 (; 61 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.store32 align=2 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_4_4 (; 62 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.store32 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_8_1 (; 63 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.store align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_8_2 (; 64 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.store align=2 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_8_4 (; 65 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.store align=4 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_8_8 (; 66 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 7) + ) + (call $alignfault) + ) + (i64.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_1_1 (; 67 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_2_1 (; 68 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.store16 align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_2_2 (; 69 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (f32.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_4_1 (; 70 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.store align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_4_2 (; 71 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (f32.store align=2 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_4_4 (; 72 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (f32.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_1_1 (; 73 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_2_1 (; 74 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.store16 align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_2_2 (; 75 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_4_1 (; 76 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.store align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_4_2 (; 77 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.store align=2 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_4_4 (; 78 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (f64.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_8_1 (; 79 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.store align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_8_2 (; 80 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.store align=2 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_8_4 (; 81 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (f64.store align=4 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_8_8 (; 82 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 7) + ) + (call $alignfault) + ) + (f64.store + (get_local $3) + (get_local $2) + ) + ) +) +(module + (type $FUNCSIG$v (func)) + (import "env" "DYNAMICTOP_PTR" (global $DYNAMICTOP_PTR i32)) + (import "env" "segfault" (func $segfault)) + (import "env" "alignfault" (func $alignfault)) + (memory $0 (shared 100 100)) + (func $actions (; 2 ;) (type $FUNCSIG$v) + (drop + (call $SAFE_HEAP_LOAD_i32_4_U_4 + (i32.const 1) + (i32.const 0) + ) + ) + (call $SAFE_HEAP_STORE_i32_4_4 + (i32.const 1) + (i32.const 0) + (i32.const 100) + ) + ) + (func $SAFE_HEAP_LOAD_i32_1_A (; 3 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.shr_s + (i32.shl + (i32.atomic.load8_u + (get_local $2) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (func $SAFE_HEAP_LOAD_i32_1_1 (; 4 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.load8_s + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_1_U_A (; 5 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.atomic.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_1_U_1 (; 6 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_2_1 (; 7 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.load16_s align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_2_A (; 8 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.shr_s + (i32.shl + (i32.atomic.load16_u + (get_local $2) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + (func $SAFE_HEAP_LOAD_i32_2_2 (; 9 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.load16_s + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_2_U_1 (; 10 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.load16_u align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_2_U_A (; 11 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.atomic.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_2_U_2 (; 12 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_1 (; 13 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_2 (; 14 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_A (; 15 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i32.atomic.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_4 (; 16 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i32.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_U_1 (; 17 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_U_2 (; 18 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_U_A (; 19 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i32.atomic.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i32_4_U_4 (; 20 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i32.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_1_A (; 21 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.shr_s + (i64.shl + (i64.atomic.load8_u + (get_local $2) + ) + (i64.const 56) + ) + (i64.const 56) + ) + ) + (func $SAFE_HEAP_LOAD_i64_1_1 (; 22 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load8_s + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_1_U_A (; 23 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.atomic.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_1_U_1 (; 24 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_2_1 (; 25 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load16_s align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_2_A (; 26 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.shr_s + (i64.shl + (i64.atomic.load16_u + (get_local $2) + ) + (i64.const 48) + ) + (i64.const 48) + ) + ) + (func $SAFE_HEAP_LOAD_i64_2_2 (; 27 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.load16_s + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_2_U_1 (; 28 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load16_u align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_2_U_A (; 29 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.atomic.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_2_U_2 (; 30 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_1 (; 31 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load32_s align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_2 (; 32 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.load32_s align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_A (; 33 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.shr_s + (i64.shl + (i64.atomic.load32_u + (get_local $2) + ) + (i64.const 32) + ) + (i64.const 32) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_4 (; 34 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.load32_s + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_U_1 (; 35 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load32_u align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_U_2 (; 36 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.load32_u align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_U_A (; 37 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.atomic.load32_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_4_U_4 (; 38 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.load32_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_1 (; 39 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_2 (; 40 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_4 (; 41 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.load align=4 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_A (; 42 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 7) + ) + (call $alignfault) + ) + (i64.atomic.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_8 (; 43 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 7) + ) + (call $alignfault) + ) + (i64.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_U_1 (; 44 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_U_2 (; 45 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_U_4 (; 46 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.load align=4 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_U_A (; 47 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 7) + ) + (call $alignfault) + ) + (i64.atomic.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_i64_8_U_8 (; 48 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 7) + ) + (call $alignfault) + ) + (i64.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_1_A (; 49 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.atomic.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_1_1 (; 50 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_2_1 (; 51 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.load16_u align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_2_A (; 52 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (f32.atomic.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_2_2 (; 53 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (f32.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_4_1 (; 54 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_4_2 (; 55 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (f32.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_4_A (; 56 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (f32.atomic.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f32_4_4 (; 57 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (f32.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_1_A (; 58 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.atomic.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_1_1 (; 59 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.load8_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_2_1 (; 60 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.load16_u align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_2_A (; 61 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.atomic.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_2_2 (; 62 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.load16_u + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_4_1 (; 63 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_4_2 (; 64 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_4_A (; 65 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (f64.atomic.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_4_4 (; 66 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (f64.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_8_1 (; 67 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.load align=1 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_8_2 (; 68 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.load align=2 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_8_4 (; 69 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 3) + ) + (call $alignfault) + ) + (f64.load align=4 + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_8_A (; 70 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 7) + ) + (call $alignfault) + ) + (f64.atomic.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_LOAD_f64_8_8 (; 71 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (set_local $2 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $2) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $2) + (i32.const 7) + ) + (call $alignfault) + ) + (f64.load + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_1_A (; 72 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.atomic.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_1_1 (; 73 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_2_1 (; 74 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.store16 align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_2_A (; 75 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.atomic.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_2_2 (; 76 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_4_1 (; 77 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i32.store align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_4_2 (; 78 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (i32.store align=2 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_4_A (; 79 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (i32.atomic.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i32_4_4 (; 80 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (i32.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_1_A (; 81 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.atomic.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_1_1 (; 82 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_2_1 (; 83 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.store16 align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_2_A (; 84 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.atomic.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_2_2 (; 85 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_4_1 (; 86 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.store32 align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_4_2 (; 87 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.store32 align=2 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_4_A (; 88 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.atomic.store32 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_4_4 (; 89 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.store32 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_8_1 (; 90 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (i64.store align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_8_2 (; 91 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (i64.store align=2 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_8_4 (; 92 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (i64.store align=4 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_8_A (; 93 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 7) + ) + (call $alignfault) + ) + (i64.atomic.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_i64_8_8 (; 94 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 7) + ) + (call $alignfault) + ) + (i64.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_1_A (; 95 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.atomic.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_1_1 (; 96 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_2_1 (; 97 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.store16 align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_2_A (; 98 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (f32.atomic.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_2_2 (; 99 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (f32.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_4_1 (; 100 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f32.store align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_4_2 (; 101 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (f32.store align=2 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_4_A (; 102 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (f32.atomic.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f32_4_4 (; 103 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (f32.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_1_A (; 104 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.atomic.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_1_1 (; 105 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.store8 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_2_1 (; 106 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.store16 align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_2_A (; 107 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.atomic.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_2_2 (; 108 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.store16 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_4_1 (; 109 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.store align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_4_2 (; 110 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.store align=2 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_4_A (; 111 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (f64.atomic.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_4_4 (; 112 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (f64.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_8_1 (; 113 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (f64.store align=1 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_8_2 (; 114 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (call $alignfault) + ) + (f64.store align=2 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_8_4 (; 115 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 3) + ) + (call $alignfault) + ) + (f64.store align=4 + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_8_A (; 116 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 7) + ) + (call $alignfault) + ) + (f64.atomic.store + (get_local $3) + (get_local $2) + ) + ) + (func $SAFE_HEAP_STORE_f64_8_8 (; 117 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (set_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (if + (i32.or + (i32.eq + (get_local $3) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (get_local $3) + (i32.const 8) + ) + (i32.load + (get_global $DYNAMICTOP_PTR) + ) + ) + ) + (call $segfault) + ) + (if + (i32.and + (get_local $3) + (i32.const 7) + ) + (call $alignfault) + ) + (f64.store + (get_local $3) + (get_local $2) + ) + ) +) diff --git a/src/binaryen/test/passes/safe-heap.wast b/src/binaryen/test/passes/safe-heap.wast new file mode 100644 index 0000000000..19aa94a355 --- /dev/null +++ b/src/binaryen/test/passes/safe-heap.wast @@ -0,0 +1,55 @@ +(module + (memory (shared 100 100)) + (func $loads + (drop (i32.load (i32.const 1))) + (drop (i32.atomic.load (i32.const 1))) + (drop (i32.load offset=31 (i32.const 2))) + (drop (i32.load align=2 (i32.const 3))) + (drop (i32.load align=1 (i32.const 4))) + (drop (i32.load8_s (i32.const 5))) + (drop (i32.load16_u (i32.const 6))) + (drop (i64.load8_s (i32.const 7))) + (drop (i64.load16_u (i32.const 8))) + (drop (i64.load32_s (i32.const 9))) + (drop (i64.load align=4 (i32.const 10))) + (drop (i64.load (i32.const 11))) + (drop (f32.load (i32.const 12))) + (drop (f64.load (i32.const 13))) + ) + (func $stores + (i32.store (i32.const 1) (i32.const 100)) + (i32.atomic.store (i32.const 1) (i32.const 100)) + (i32.store offset=31 (i32.const 2) (i32.const 200)) + (i32.store align=2 (i32.const 3) (i32.const 300)) + (i32.store align=1 (i32.const 4) (i32.const 400)) + (i32.store8 (i32.const 5) (i32.const 500)) + (i32.store16 (i32.const 6) (i32.const 600)) + (i64.store8 (i32.const 7) (i64.const 700)) + (i64.store16 (i32.const 8) (i64.const 800)) + (i64.store32 (i32.const 9) (i64.const 900)) + (i64.store align=4 (i32.const 10) (i64.const 1000)) + (i64.store (i32.const 11) (i64.const 1100)) + (f32.store (i32.const 12) (f32.const 1200)) + (f64.store (i32.const 13) (f64.const 1300)) + ) +) +;; not shared +(module + (memory 100 100) + (func $loads + (drop (i32.load (i32.const 1))) + ) +) +;; pre-existing +(module + (type $FUNCSIG$v (func)) + (import "env" "DYNAMICTOP_PTR" (global $DYNAMICTOP_PTR i32)) + (import "env" "segfault" (func $segfault)) + (import "env" "alignfault" (func $alignfault)) + (memory $0 (shared 100 100)) + (func $actions + (drop (i32.load (i32.const 1))) + (i32.store (i32.const 1) (i32.const 100)) + ) +) + diff --git a/src/binaryen/test/passes/simplify-locals-nostructure.txt b/src/binaryen/test/passes/simplify-locals-nostructure.txt new file mode 100644 index 0000000000..b94d681fce --- /dev/null +++ b/src/binaryen/test/passes/simplify-locals-nostructure.txt @@ -0,0 +1,103 @@ +(module + (type $0 (func)) + (memory $0 0) + (func $contrast (; 0 ;) (type $0) + (local $x i32) + (local $y i32) + (local $z i32) + (local $a i32) + (local $b i32) + (nop) + (if + (tee_local $x + (i32.const 1) + ) + (nop) + ) + (if + (get_local $x) + (nop) + ) + (nop) + (drop + (if (result i32) + (i32.const 2) + (i32.const 3) + (i32.const 4) + ) + ) + (nop) + (drop + (block $block (result i32) + (i32.const 5) + ) + ) + (if + (i32.const 6) + (set_local $a + (i32.const 7) + ) + (set_local $a + (i32.const 8) + ) + ) + (drop + (get_local $a) + ) + (block $val + (if + (i32.const 10) + (block $block4 + (set_local $b + (i32.const 11) + ) + (br $val) + ) + ) + (set_local $b + (i32.const 12) + ) + ) + (drop + (get_local $b) + ) + ) + (func $no-unreachable (; 1 ;) (type $0) + (local $x i32) + (unreachable) + ) + (func $implicit-trap-and-global-effects (; 2 ;) (type $0) + (local $var$0 i32) + (set_local $var$0 + (i32.trunc_u/f64 + (f64.const -nan:0xfffffffffffc3) + ) + ) + (f32.store align=1 + (i32.const 22) + (f32.const 154) + ) + (drop + (get_local $var$0) + ) + ) + (func $implicit-trap-and-local-effects (; 3 ;) (type $0) + (local $var$0 i32) + (local $other i32) + (nop) + (set_local $other + (i32.const 100) + ) + (drop + (i32.trunc_u/f64 + (f64.const -nan:0xfffffffffffc3) + ) + ) + (if + (i32.const 1) + (drop + (get_local $other) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/simplify-locals-nostructure.wast b/src/binaryen/test/passes/simplify-locals-nostructure.wast new file mode 100644 index 0000000000..9a4a63a2e9 --- /dev/null +++ b/src/binaryen/test/passes/simplify-locals-nostructure.wast @@ -0,0 +1,73 @@ +(module + (func $contrast ;; check for tee and structure sinking + (local $x i32) + (local $y i32) + (local $z i32) + (local $a i32) + (local $b i32) + (set_local $x (i32.const 1)) + (if (get_local $x) (nop)) + (if (get_local $x) (nop)) + (set_local $y (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4))) + (drop (get_local $y)) + (set_local $z (block (result i32) (i32.const 5))) + (drop (get_local $z)) + (if (i32.const 6) + (set_local $a (i32.const 7)) + (set_local $a (i32.const 8)) + ) + (drop (get_local $a)) + (block $val + (if (i32.const 10) + (block + (set_local $b (i32.const 11)) + (br $val) + ) + ) + (set_local $b (i32.const 12)) + ) + (drop (get_local $b)) + ) + (func $no-unreachable + (local $x i32) + (drop + (tee_local $x + (unreachable) + ) + ) + ) + (func $implicit-trap-and-global-effects + (local $var$0 i32) + (set_local $var$0 + (i32.trunc_u/f64 + (f64.const -nan:0xfffffffffffc3) ;; this implicit trap will actually trap + ) + ) + (f32.store align=1 ;; and if we move it across this store, the store will execute, having global side effects + (i32.const 22) + (f32.const 154) + ) + (drop + (get_local $var$0) + ) + ) + (func $implicit-trap-and-local-effects + (local $var$0 i32) + (local $other i32) + (set_local $var$0 + (i32.trunc_u/f64 + (f64.const -nan:0xfffffffffffc3) ;; this implicit trap will actually trap + ) + ) + (set_local $other (i32.const 100)) ;; but it's fine to move it across a local effect, that vanishes anyhow + (drop + (get_local $var$0) + ) + (if (i32.const 1) + (drop + (get_local $other) + ) + ) + ) +) + diff --git a/src/binaryen/test/passes/simplify-locals-notee-nostructure.txt b/src/binaryen/test/passes/simplify-locals-notee-nostructure.txt new file mode 100644 index 0000000000..9133ed092c --- /dev/null +++ b/src/binaryen/test/passes/simplify-locals-notee-nostructure.txt @@ -0,0 +1,65 @@ +(module + (type $0 (func)) + (memory $0 0) + (func $contrast (; 0 ;) (type $0) + (local $x i32) + (local $y i32) + (local $z i32) + (local $a i32) + (local $b i32) + (set_local $x + (i32.const 1) + ) + (if + (get_local $x) + (nop) + ) + (if + (get_local $x) + (nop) + ) + (nop) + (drop + (if (result i32) + (i32.const 2) + (i32.const 3) + (i32.const 4) + ) + ) + (nop) + (drop + (block $block (result i32) + (i32.const 5) + ) + ) + (if + (i32.const 6) + (set_local $a + (i32.const 7) + ) + (set_local $a + (i32.const 8) + ) + ) + (drop + (get_local $a) + ) + (block $val + (if + (i32.const 10) + (block $block4 + (set_local $b + (i32.const 11) + ) + (br $val) + ) + ) + (set_local $b + (i32.const 12) + ) + ) + (drop + (get_local $b) + ) + ) +) diff --git a/src/binaryen/test/passes/simplify-locals-notee-nostructure.wast b/src/binaryen/test/passes/simplify-locals-notee-nostructure.wast new file mode 100644 index 0000000000..33f891e61b --- /dev/null +++ b/src/binaryen/test/passes/simplify-locals-notee-nostructure.wast @@ -0,0 +1,32 @@ +(module + (func $contrast ;; check for tee and structure sinking + (local $x i32) + (local $y i32) + (local $z i32) + (local $a i32) + (local $b i32) + (set_local $x (i32.const 1)) + (if (get_local $x) (nop)) + (if (get_local $x) (nop)) + (set_local $y (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4))) + (drop (get_local $y)) + (set_local $z (block (result i32) (i32.const 5))) + (drop (get_local $z)) + (if (i32.const 6) + (set_local $a (i32.const 7)) + (set_local $a (i32.const 8)) + ) + (drop (get_local $a)) + (block $val + (if (i32.const 10) + (block + (set_local $b (i32.const 11)) + (br $val) + ) + ) + (set_local $b (i32.const 12)) + ) + (drop (get_local $b)) + ) +) + diff --git a/src/binaryen/test/passes/simplify-locals-notee.txt b/src/binaryen/test/passes/simplify-locals-notee.txt new file mode 100644 index 0000000000..57b8e19c4c --- /dev/null +++ b/src/binaryen/test/passes/simplify-locals-notee.txt @@ -0,0 +1,66 @@ +(module + (type $0 (func)) + (memory $0 0) + (func $contrast (; 0 ;) (type $0) + (local $x i32) + (local $y i32) + (local $z i32) + (local $a i32) + (local $b i32) + (set_local $x + (i32.const 1) + ) + (if + (get_local $x) + (nop) + ) + (if + (get_local $x) + (nop) + ) + (nop) + (drop + (if (result i32) + (i32.const 2) + (i32.const 3) + (i32.const 4) + ) + ) + (nop) + (drop + (block $block (result i32) + (i32.const 5) + ) + ) + (nop) + (drop + (if (result i32) + (i32.const 6) + (block (result i32) + (nop) + (i32.const 7) + ) + (block (result i32) + (nop) + (i32.const 8) + ) + ) + ) + (nop) + (drop + (block $val (result i32) + (if + (i32.const 10) + (block $block4 + (nop) + (br $val + (i32.const 11) + ) + ) + ) + (nop) + (i32.const 12) + ) + ) + ) +) diff --git a/src/binaryen/test/passes/simplify-locals-notee.wast b/src/binaryen/test/passes/simplify-locals-notee.wast new file mode 100644 index 0000000000..33f891e61b --- /dev/null +++ b/src/binaryen/test/passes/simplify-locals-notee.wast @@ -0,0 +1,32 @@ +(module + (func $contrast ;; check for tee and structure sinking + (local $x i32) + (local $y i32) + (local $z i32) + (local $a i32) + (local $b i32) + (set_local $x (i32.const 1)) + (if (get_local $x) (nop)) + (if (get_local $x) (nop)) + (set_local $y (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4))) + (drop (get_local $y)) + (set_local $z (block (result i32) (i32.const 5))) + (drop (get_local $z)) + (if (i32.const 6) + (set_local $a (i32.const 7)) + (set_local $a (i32.const 8)) + ) + (drop (get_local $a)) + (block $val + (if (i32.const 10) + (block + (set_local $b (i32.const 11)) + (br $val) + ) + ) + (set_local $b (i32.const 12)) + ) + (drop (get_local $b)) + ) +) + diff --git a/src/binaryen/test/passes/simplify-locals.txt b/src/binaryen/test/passes/simplify-locals.txt new file mode 100644 index 0000000000..00caacb895 --- /dev/null +++ b/src/binaryen/test/passes/simplify-locals.txt @@ -0,0 +1,1076 @@ +(module + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) + (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) + (type $4 (func (param i32))) + (type $5 (func (param i32) (result i32))) + (type $6 (func (param i32 i32 i32 i32 i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $8 (func (param i32 i32))) + (type $9 (func (param i32 i32 i32) (result i32))) + (type $10 (func (param i64))) + (import "env" "waka" (func $waka)) + (import "env" "waka_int" (func $waka_int (result i32))) + (import "env" "i64sub" (func $_i64Subtract (param i32 i32 i32 i32) (result i32))) + (import "env" "moddi" (func $___udivmoddi4 (param i32 i32 i32 i32 i32) (result i32))) + (import "env" "lp" (func $lp (param i32 i32) (result i32))) + (memory $0 256 256) + (func $contrast (; 5 ;) (type $FUNCSIG$v) + (local $x i32) + (local $y i32) + (local $z i32) + (local $a i32) + (local $b i32) + (nop) + (if + (tee_local $x + (i32.const 1) + ) + (nop) + ) + (if + (get_local $x) + (nop) + ) + (nop) + (drop + (if (result i32) + (i32.const 2) + (i32.const 3) + (i32.const 4) + ) + ) + (nop) + (drop + (block $block (result i32) + (i32.const 5) + ) + ) + (nop) + (drop + (if (result i32) + (i32.const 6) + (block (result i32) + (nop) + (i32.const 7) + ) + (block (result i32) + (nop) + (i32.const 8) + ) + ) + ) + (nop) + (drop + (block $val (result i32) + (if + (i32.const 10) + (block $block4 + (nop) + (br $val + (i32.const 11) + ) + ) + ) + (nop) + (i32.const 12) + ) + ) + ) + (func $b0-yes (; 6 ;) (type $4) (param $i1 i32) + (local $x i32) + (local $y i32) + (local $a i32) + (local $b i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (nop) + (drop + (i32.const 5) + ) + (block $block0 + (nop) + (drop + (i32.const 7) + ) + ) + (nop) + (drop + (i32.const 11) + ) + (drop + (i32.const 9) + ) + (drop + (get_local $y) + ) + (block $block1 + (drop + (i32.const 8) + ) + (drop + (get_local $y) + ) + ) + (drop + (i32.const 11) + ) + (drop + (get_local $y) + ) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (drop + (i32.const 17) + ) + (block $block2 + (nop) + (nop) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) + (drop + (i32.const 3) + ) + (drop + (i32.const 4) + ) + (nop) + (nop) + (drop + (i32.const 6) + ) + (drop + (i32.const 5) + ) + (drop + (i32.const 7) + ) + (drop + (i32.const 8) + ) + (nop) + (nop) + (call $waka) + (drop + (i32.const 9) + ) + (drop + (i32.const 10) + ) + (drop + (i32.const 11) + ) + (drop + (i32.const 12) + ) + (nop) + (nop) + (drop + (i32.load + (i32.const 24) + ) + ) + (drop + (i32.const 13) + ) + (drop + (i32.const 14) + ) + (drop + (i32.const 15) + ) + (drop + (i32.const 16) + ) + (nop) + (nop) + (i32.store + (i32.const 48) + (i32.const 96) + ) + (drop + (i32.const 17) + ) + (drop + (i32.const 18) + ) + ) + (block $block3 + (nop) + (set_local $a + (call $waka_int) + ) + (call $waka) + (set_local $a + (call $waka_int) + ) + (call $waka) + (drop + (get_local $a) + ) + (call $waka) + (set_local $a + (call $waka_int) + ) + (drop + (i32.load + (i32.const 1) + ) + ) + (drop + (get_local $a) + ) + (call $waka) + (set_local $a + (call $waka_int) + ) + (i32.store + (i32.const 1) + (i32.const 2) + ) + (drop + (get_local $a) + ) + (call $waka) + (nop) + (set_local $a + (i32.load + (i32.const 100) + ) + ) + (call $waka) + (nop) + (drop + (i32.load + (i32.const 1) + ) + ) + (set_local $a + (i32.load + (i32.const 101) + ) + ) + (call $waka) + (set_local $a + (i32.load + (i32.const 102) + ) + ) + (call $waka) + (drop + (get_local $a) + ) + (call $waka) + (set_local $a + (i32.load + (i32.const 103) + ) + ) + (i32.store + (i32.const 1) + (i32.const 2) + ) + (drop + (get_local $a) + ) + (call $waka) + (nop) + (set_local $a + (block $block (result i32) + (block $block5 + (nop) + (i32.store + (i32.const 104) + (tee_local $5 + (i32.const 105) + ) + ) + ) + (get_local $5) + ) + ) + (call $waka) + (set_local $a + (block $block6 (result i32) + (block $block7 + (nop) + (i32.store + (i32.const 106) + (tee_local $6 + (i32.const 107) + ) + ) + ) + (get_local $6) + ) + ) + (call $waka) + (drop + (get_local $a) + ) + (call $waka) + (set_local $a + (block $block8 (result i32) + (block $block9 + (nop) + (i32.store + (i32.const 108) + (tee_local $7 + (i32.const 109) + ) + ) + ) + (get_local $7) + ) + ) + (drop + (i32.load + (i32.const 1) + ) + ) + (drop + (get_local $a) + ) + (call $waka) + (set_local $a + (block $block10 (result i32) + (block $block11 + (nop) + (i32.store + (i32.const 110) + (tee_local $8 + (i32.const 111) + ) + ) + ) + (get_local $8) + ) + ) + (i32.store + (i32.const 1) + (i32.const 2) + ) + (drop + (get_local $a) + ) + (call $waka) + ) + (block $out-of-block + (nop) + (nop) + (drop + (block $b (result i32) + (block $c + (br $b + (i32.const 1337) + ) + ) + (nop) + (i32.const 9876) + ) + ) + ) + (block $loopey + (set_local $a + (i32.const 1337) + ) + (drop + (loop $loop-in5 (result i32) + (drop + (get_local $a) + ) + (tee_local $a + (i32.const 9876) + ) + ) + ) + (drop + (get_local $a) + ) + ) + ) + (func $Ia (; 7 ;) (type $5) (param $a i32) (result i32) + (local $b i32) + (block $switch$0 + (block $switch-default$6 + (nop) + ) + ) + (return + (i32.const 60) + ) + ) + (func $memories (; 8 ;) (type $6) (param $i2 i32) (param $i3 i32) (param $bi2 i32) (param $bi3 i32) (param $ci3 i32) (param $di3 i32) + (local $set_with_no_get i32) + (nop) + (i32.store8 + (get_local $i2) + (i32.const 1) + ) + (nop) + (i32.store8 + (tee_local $bi3 + (i32.const 1) + ) + (get_local $bi3) + ) + (nop) + (i32.store8 + (get_local $bi3) + (get_local $bi3) + ) + (set_local $di3 + (tee_local $bi3 + (i32.const 123) + ) + ) + (i32.store8 + (get_local $bi3) + (get_local $di3) + ) + (drop + (i32.const 456) + ) + ) + (func $___remdi3 (; 9 ;) (type $FUNCSIG$iiiii) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) + (local $$1$1 i32) + (local $$1$0 i32) + (local $$rem i32) + (local $__stackBase__ i32) + (local $$2$1 i32) + (local $$2$0 i32) + (local $$4$1 i32) + (local $$4$0 i32) + (local $$10$1 i32) + (local $$10$0 i32) + (local $$6$0 i32) + (set_local $__stackBase__ + (i32.load + (i32.const 8) + ) + ) + (i32.store + (i32.const 8) + (i32.add + (i32.load + (i32.const 8) + ) + (i32.const 16) + ) + ) + (set_local $$rem + (get_local $__stackBase__) + ) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (drop + (call $___udivmoddi4 + (call $_i64Subtract + (i32.xor + (tee_local $$1$0 + (i32.or + (i32.shr_s + (get_local $$a$1) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (get_local $$a$0) + ) + (i32.xor + (tee_local $$1$1 + (i32.or + (i32.shr_s + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (get_local $$a$1) + ) + (get_local $$1$0) + (get_local $$1$1) + ) + (i32.load + (i32.const 168) + ) + (call $_i64Subtract + (i32.xor + (tee_local $$2$0 + (i32.or + (i32.shr_s + (get_local $$b$1) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (get_local $$b$0) + ) + (i32.xor + (tee_local $$2$1 + (i32.or + (i32.shr_s + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (get_local $$b$1) + ) + (get_local $$2$0) + (get_local $$2$1) + ) + (i32.load + (i32.const 168) + ) + (get_local $$rem) + ) + ) + (set_local $$10$0 + (call $_i64Subtract + (i32.xor + (i32.load + (get_local $$rem) + ) + (get_local $$1$0) + ) + (i32.xor + (i32.load offset=4 + (get_local $$rem) + ) + (get_local $$1$1) + ) + (get_local $$1$0) + (get_local $$1$1) + ) + ) + (set_local $$10$1 + (i32.load + (i32.const 168) + ) + ) + (i32.store + (i32.const 8) + (get_local $__stackBase__) + ) + (return + (block $block12 (result i32) + (i32.store + (i32.const 168) + (get_local $$10$1) + ) + (get_local $$10$0) + ) + ) + ) + (func $block-returns (; 10 ;) (type $FUNCSIG$v) + (local $x i32) + (set_local $x + (block $out (result i32) + (nop) + (drop + (br_if $out + (tee_local $x + (block $waka (result i32) + (nop) + (drop + (br_if $waka + (tee_local $x + (i32.const 12) + ) + (i32.const 1) + ) + ) + (nop) + (i32.const 34) + ) + ) + (i32.const 1) + ) + ) + (drop + (get_local $x) + ) + (block $waka2 + (set_local $x + (if (result i32) + (i32.const 1) + (block (result i32) + (nop) + (i32.const 13) + ) + (block (result i32) + (nop) + (i32.const 24) + ) + ) + ) + (nop) + ) + (drop + (br_if $out + (tee_local $x + (if (result i32) + (i32.const 1) + (block $block3 (result i32) + (nop) + (i32.const 14) + ) + (block $block5 (result i32) + (nop) + (i32.const 25) + ) + ) + ) + (i32.const 1) + ) + ) + (block $sink-out-of-me-i-have-but-one-exit + (nop) + ) + (nop) + (i32.const 99) + ) + ) + ) + (func $multiple (; 11 ;) (type $6) (param $s i32) (param $r i32) (param $f i32) (param $p i32) (param $t i32) (param $m i32) + (nop) + (set_local $r + (i32.add + (get_local $f) + (get_local $p) + ) + ) + (set_local $t + (get_local $p) + ) + (set_local $p + (i32.load + (i32.const 0) + ) + ) + (i32.store + (get_local $r) + (get_local $t) + ) + (drop + (get_local $m) + ) + (drop + (get_local $t) + ) + ) + (func $switch-def (; 12 ;) (type $5) (param $i3 i32) (result i32) + (local $i1 i32) + (set_local $i1 + (i32.const 10) + ) + (block $switch$def + (block $switch-case$1 + (br_table $switch-case$1 $switch$def + (get_local $i3) + ) + ) + (set_local $i1 + (i32.const 1) + ) + ) + (return + (get_local $i1) + ) + ) + (func $no-out-of-label (; 13 ;) (type $8) (param $x i32) (param $y i32) + (loop $moar + (set_local $x + (block $block (result i32) + (br_if $moar + (get_local $x) + ) + (i32.const 0) + ) + ) + ) + (drop + (get_local $x) + ) + (block $moar18 + (set_local $y + (block $block19 (result i32) + (br_if $moar18 + (get_local $y) + ) + (i32.const 0) + ) + ) + ) + (drop + (get_local $y) + ) + ) + (func $freetype-cd (; 14 ;) (type $5) (param $a i32) (result i32) + (local $e i32) + (loop $while-in$1 + (set_local $a + (block $while-out$0 (result i32) + (set_local $e + (get_local $a) + ) + (nop) + (drop + (br_if $while-out$0 + (tee_local $a + (i32.const 4) + ) + (get_local $e) + ) + ) + (nop) + (i32.add + (get_local $a) + (i32.const 0) + ) + ) + ) + ) + (get_local $a) + ) + (func $drop-if-value (; 15 ;) (type $9) (param $x i32) (param $y i32) (param $z i32) (result i32) + (local $temp i32) + (drop + (if (result i32) + (get_local $x) + (block $block53 (result i32) + (nop) + (set_local $temp + (get_local $y) + ) + (get_local $z) + ) + (block $block54 (result i32) + (nop) + (set_local $temp + (get_local $y) + ) + (get_local $z) + ) + ) + ) + (drop + (get_local $temp) + ) + (return + (i32.const 0) + ) + ) + (func $drop-br_if (; 16 ;) (type $9) (param $label i32) (param $$cond2 i32) (param $$$0151 i32) (result i32) + (nop) + (tee_local $label + (block $label$break$L4 (result i32) + (if + (i32.eq + (get_local $label) + (i32.const 15) + ) + (block $block + (nop) + (nop) + (drop + (br_if $label$break$L4 + (tee_local $label + (i32.const 0) + ) + (i32.eqz + (i32.eq + (get_local $$$0151) + (i32.const 0) + ) + ) + ) + ) + ) + ) + (nop) + (i32.const 1) + ) + ) + ) + (func $drop-tee-unreachable (; 17 ;) (type $FUNCSIG$v) + (local $x i32) + (tee_local $x + (unreachable) + ) + (drop + (get_local $x) + ) + ) + (func $if-return-but-unreachable (; 18 ;) (type $10) (param $var$0 i64) + (if + (unreachable) + (set_local $var$0 + (get_local $var$0) + ) + (set_local $var$0 + (i64.const 1) + ) + ) + ) +) +(module + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) + (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) + (type $4 (func (param i32))) + (type $5 (func (param i32) (result i32))) + (type $6 (func (param i32 i32 i32 i32 i32 i32))) + (memory $0 (shared 256 256)) + (func $nonatomics (; 0 ;) (type $FUNCSIG$i) (result i32) + (local $x i32) + (nop) + (drop + (i32.load + (i32.const 1028) + ) + ) + (i32.load + (i32.const 1024) + ) + ) + (func $nonatomic-growmem (; 1 ;) (type $FUNCSIG$i) (result i32) + (local $x i32) + (set_local $x + (i32.load + (grow_memory + (i32.const 1) + ) + ) + ) + (drop + (i32.load + (i32.const 1028) + ) + ) + (get_local $x) + ) + (func $atomics (; 2 ;) (type $FUNCSIG$v) + (local $x i32) + (set_local $x + (i32.atomic.load + (i32.const 1024) + ) + ) + (drop + (i32.atomic.load + (i32.const 1028) + ) + ) + (drop + (get_local $x) + ) + ) + (func $one-atomic (; 3 ;) (type $FUNCSIG$v) + (local $x i32) + (set_local $x + (i32.load + (i32.const 1024) + ) + ) + (drop + (i32.atomic.load + (i32.const 1028) + ) + ) + (drop + (get_local $x) + ) + ) + (func $other-atomic (; 4 ;) (type $FUNCSIG$v) + (local $x i32) + (set_local $x + (i32.atomic.load + (i32.const 1024) + ) + ) + (drop + (i32.load + (i32.const 1028) + ) + ) + (drop + (get_local $x) + ) + ) + (func $atomic-growmem (; 5 ;) (type $FUNCSIG$i) (result i32) + (local $x i32) + (set_local $x + (i32.load + (grow_memory + (i32.const 1) + ) + ) + ) + (drop + (i32.atomic.load + (i32.const 1028) + ) + ) + (get_local $x) + ) + (func $atomicrmw (; 6 ;) (type $FUNCSIG$v) + (local $x i32) + (set_local $x + (i32.atomic.rmw.add + (i32.const 1024) + (i32.const 1) + ) + ) + (drop + (i32.atomic.load + (i32.const 1028) + ) + ) + (drop + (get_local $x) + ) + ) + (func $atomic-cmpxchg (; 7 ;) (type $FUNCSIG$v) + (local $x i32) + (set_local $x + (i32.atomic.rmw.cmpxchg + (i32.const 1024) + (i32.const 1) + (i32.const 2) + ) + ) + (drop + (i32.atomic.load + (i32.const 1028) + ) + ) + (drop + (get_local $x) + ) + ) + (func $br-value-reordering (; 8 ;) (type $FUNCSIG$i) (result i32) + (local $temp i32) + (block $outside + (loop $loop + (br_if $outside + (block $block (result i32) + (br_if $loop + (get_local $temp) + ) + (unreachable) + (set_local $temp + (i32.const -1) + ) + (i32.const 0) + ) + ) + ) + (set_local $temp + (i32.const -1) + ) + ) + (unreachable) + ) + (func $br-value-reordering-safe (; 9 ;) (type $FUNCSIG$i) (result i32) + (local $temp i32) + (set_local $temp + (block $outside (result i32) + (loop $loop + (drop + (get_local $temp) + ) + (drop + (br_if $outside + (tee_local $temp + (i32.const -1) + ) + (block $block (result i32) + (nop) + (i32.const 0) + ) + ) + ) + ) + (nop) + (i32.const -1) + ) + ) + (unreachable) + ) +) diff --git a/src/binaryen/test/passes/simplify-locals.wast b/src/binaryen/test/passes/simplify-locals.wast new file mode 100644 index 0000000000..842e2b5af8 --- /dev/null +++ b/src/binaryen/test/passes/simplify-locals.wast @@ -0,0 +1,990 @@ +(module + (memory 256 256) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) + (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) + (type $4 (func (param i32))) + (type $5 (func (param i32) (result i32))) + (type $6 (func (param i32 i32 i32 i32 i32 i32))) + (import $waka "env" "waka") + (import $waka_int "env" "waka_int" (result i32)) + (import $_i64Subtract "env" "i64sub" (param i32 i32 i32 i32) (result i32)) + (import $___udivmoddi4 "env" "moddi" (param i32 i32 i32 i32 i32) (result i32)) + (import $lp "env" "lp" (param i32 i32) (result i32)) + (func $contrast ;; check for tee and structure sinking + (local $x i32) + (local $y i32) + (local $z i32) + (local $a i32) + (local $b i32) + (set_local $x (i32.const 1)) + (if (get_local $x) (nop)) + (if (get_local $x) (nop)) + (set_local $y (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4))) + (drop (get_local $y)) + (set_local $z (block (result i32) (i32.const 5))) + (drop (get_local $z)) + (if (i32.const 6) + (set_local $a (i32.const 7)) + (set_local $a (i32.const 8)) + ) + (drop (get_local $a)) + (block $val + (if (i32.const 10) + (block + (set_local $b (i32.const 11)) + (br $val) + ) + ) + (set_local $b (i32.const 12)) + ) + (drop (get_local $b)) + ) + (func $b0-yes (type $4) (param $i1 i32) + (local $x i32) + (local $y i32) + (local $a i32) + (local $b i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (set_local $x + (i32.const 5) + ) + (drop + (get_local $x) + ) + (block $block0 + (set_local $x + (i32.const 7) + ) + (drop + (get_local $x) + ) + ) + (set_local $x + (i32.const 11) + ) + (drop + (get_local $x) + ) + (set_local $x + (i32.const 9) + ) + (drop + (get_local $y) + ) + (block $block1 + (set_local $x + (i32.const 8) + ) + (drop + (get_local $y) + ) + ) + (set_local $x + (i32.const 11) + ) + (drop + (get_local $y) + ) + (set_local $x + (i32.const 17) + ) + (drop + (get_local $x) + ) + (drop + (get_local $x) + ) + (drop + (get_local $x) + ) + (drop + (get_local $x) + ) + (drop + (get_local $x) + ) + (drop + (get_local $x) + ) + (block $block2 + (set_local $a + (i32.const 1) + ) + (set_local $b + (i32.const 2) + ) + (drop + (get_local $a) + ) + (drop + (get_local $b) + ) + (set_local $a + (i32.const 3) + ) + (set_local $b + (i32.const 4) + ) + (set_local $a + (i32.const 5) + ) + (set_local $b + (i32.const 6) + ) + (drop + (get_local $b) + ) + (drop + (get_local $a) + ) + (set_local $a + (i32.const 7) + ) + (set_local $b + (i32.const 8) + ) + (set_local $a + (i32.const 9) + ) + (set_local $b + (i32.const 10) + ) + (call $waka) + (drop + (get_local $a) + ) + (drop + (get_local $b) + ) + (set_local $a + (i32.const 11) + ) + (set_local $b + (i32.const 12) + ) + (set_local $a + (i32.const 13) + ) + (set_local $b + (i32.const 14) + ) + (drop + (i32.load + (i32.const 24) + ) + ) + (drop + (get_local $a) + ) + (drop + (get_local $b) + ) + (set_local $a + (i32.const 15) + ) + (set_local $b + (i32.const 16) + ) + (set_local $a + (i32.const 17) + ) + (set_local $b + (i32.const 18) + ) + (i32.store + (i32.const 48) + (i32.const 96) + ) + (drop + (get_local $a) + ) + (drop + (get_local $b) + ) + ) + (block $block3 + (set_local $a + (call $waka_int) + ) + (drop + (get_local $a) + ) + (call $waka) + (set_local $a + (call $waka_int) + ) + (call $waka) + (drop + (get_local $a) + ) + (call $waka) + (set_local $a + (call $waka_int) + ) + (drop + (i32.load + (i32.const 1) + ) + ) + (drop + (get_local $a) + ) + (call $waka) + (set_local $a + (call $waka_int) + ) + (i32.store + (i32.const 1) + (i32.const 2) + ) + (drop + (get_local $a) + ) + (call $waka) + (set_local $a + (i32.load + (i32.const 100) + ) + ) + (drop + (get_local $a) + ) + (call $waka) + (set_local $a + (i32.load + (i32.const 101) + ) + ) + (drop + (i32.load + (i32.const 1) + ) + ) + (drop + (get_local $a) + ) + (call $waka) + (set_local $a + (i32.load + (i32.const 102) + ) + ) + (call $waka) + (drop + (get_local $a) + ) + (call $waka) + (set_local $a + (i32.load + (i32.const 103) + ) + ) + (i32.store + (i32.const 1) + (i32.const 2) + ) + (drop + (get_local $a) + ) + (call $waka) + (set_local $a + (block (result i32) + (block + (set_local $5 + (i32.const 105) + ) + (i32.store + (i32.const 104) + (get_local $5) + ) + ) + (get_local $5) + ) + ) + (drop + (get_local $a) + ) + (call $waka) + (set_local $a + (block (result i32) + (block + (set_local $6 + (i32.const 107) + ) + (i32.store + (i32.const 106) + (get_local $6) + ) + ) + (get_local $6) + ) + ) + (call $waka) + (drop + (get_local $a) + ) + (call $waka) + (set_local $a + (block (result i32) + (block + (set_local $7 + (i32.const 109) + ) + (i32.store + (i32.const 108) + (get_local $7) + ) + ) + (get_local $7) + ) + ) + (drop + (i32.load + (i32.const 1) + ) + ) + (drop + (get_local $a) + ) + (call $waka) + (set_local $a + (block (result i32) + (block + (set_local $8 + (i32.const 111) + ) + (i32.store + (i32.const 110) + (get_local $8) + ) + ) + (get_local $8) + ) + ) + (i32.store + (i32.const 1) + (i32.const 2) + ) + (drop + (get_local $a) + ) + (call $waka) + ) + (block $out-of-block + (set_local $a + (i32.const 1337) + ) + (block $b + (block $c + (br $b) + ) + (set_local $a + (i32.const 9876) + ) + ) + (drop + (get_local $a) + ) + ) + (block $loopey + (set_local $a + (i32.const 1337) + ) + (drop + (loop $loop-in5 (result i32) + (drop + (get_local $a) + ) + (tee_local $a + (i32.const 9876) + ) + ) + ) + (drop + (get_local $a) + ) + ) + ) + (func $Ia (type $5) (param $a i32) (result i32) + (local $b i32) + (block $switch$0 + (block $switch-default$6 + (set_local $b + (i32.const 60) + ) + ) + ) + (return + (get_local $b) + ) + ) + (func $memories (type $6) (param $i2 i32) (param $i3 i32) (param $bi2 i32) (param $bi3 i32) (param $ci3 i32) (param $di3 i32) + (local $set_with_no_get i32) + (set_local $i3 + (i32.const 1) + ) + (i32.store8 + (get_local $i2) + (get_local $i3) + ) + (set_local $bi3 + (i32.const 1) + ) + (i32.store8 + (get_local $bi3) + (get_local $bi3) + ) + (set_local $ci3 + (get_local $bi3) + ) + (i32.store8 + (get_local $bi3) + (get_local $ci3) + ) + (set_local $di3 + (tee_local $bi3 + (i32.const 123) + ) + ) + (i32.store8 + (get_local $bi3) + (get_local $di3) + ) + (set_local $set_with_no_get + (i32.const 456) + ) + ) + (func $___remdi3 (type $FUNCSIG$iiiii) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) + (local $$1$1 i32) + (local $$1$0 i32) + (local $$rem i32) + (local $__stackBase__ i32) + (local $$2$1 i32) + (local $$2$0 i32) + (local $$4$1 i32) + (local $$4$0 i32) + (local $$10$1 i32) + (local $$10$0 i32) + (local $$6$0 i32) + (set_local $__stackBase__ + (i32.load + (i32.const 8) + ) + ) + (i32.store + (i32.const 8) + (i32.add + (i32.load + (i32.const 8) + ) + (i32.const 16) + ) + ) + (set_local $$rem + (get_local $__stackBase__) + ) + (set_local $$1$0 + (i32.or + (i32.shr_s + (get_local $$a$1) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$1$1 + (i32.or + (i32.shr_s + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$2$0 + (i32.or + (i32.shr_s + (get_local $$b$1) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$2$1 + (i32.or + (i32.shr_s + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if (result i32) + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$4$0 + (call $_i64Subtract + (i32.xor + (get_local $$1$0) + (get_local $$a$0) + ) + (i32.xor + (get_local $$1$1) + (get_local $$a$1) + ) + (get_local $$1$0) + (get_local $$1$1) + ) + ) + (set_local $$4$1 + (i32.load + (i32.const 168) + ) + ) + (drop + (call $___udivmoddi4 + (get_local $$4$0) + (get_local $$4$1) + (call $_i64Subtract + (i32.xor + (get_local $$2$0) + (get_local $$b$0) + ) + (i32.xor + (get_local $$2$1) + (get_local $$b$1) + ) + (get_local $$2$0) + (get_local $$2$1) + ) + (i32.load + (i32.const 168) + ) + (get_local $$rem) + ) + ) + (set_local $$10$0 + (call $_i64Subtract + (i32.xor + (i32.load + (get_local $$rem) + ) + (get_local $$1$0) + ) + (i32.xor + (i32.load offset=4 + (get_local $$rem) + ) + (get_local $$1$1) + ) + (get_local $$1$0) + (get_local $$1$1) + ) + ) + (set_local $$10$1 + (i32.load + (i32.const 168) + ) + ) + (i32.store + (i32.const 8) + (get_local $__stackBase__) + ) + (return + (block $block12 (result i32) + (i32.store + (i32.const 168) + (get_local $$10$1) + ) + (get_local $$10$0) + ) + ) + ) + (func $block-returns (type $FUNCSIG$v) + (local $x i32) + (block $out + (block $waka + (set_local $x + (i32.const 12) + ) + (br_if $waka + (i32.const 1) + ) + (set_local $x + (i32.const 34) + ) + ) + (br_if $out + (i32.const 1) + ) + (drop + (get_local $x) + ) + (block $waka2 + (if + (i32.const 1) + (set_local $x + (i32.const 13) + ) + (set_local $x + (i32.const 24) + ) + ) + (if + (i32.const 1) + (block $block3 + (set_local $x + (i32.const 14) + ) + ) + (block $block5 + (set_local $x + (i32.const 25) + ) + ) + ) + ) + (br_if $out + (i32.const 1) + ) + (block $sink-out-of-me-i-have-but-one-exit + (set_local $x + (i32.const 99) + ) + ) + (drop + (get_local $x) + ) + ) + ) + (func $multiple (type $6) (param $s i32) (param $r i32) (param $f i32) (param $p i32) (param $t i32) (param $m i32) + (set_local $s + (get_local $m) + ) + (set_local $r + (i32.add + (get_local $f) + (get_local $p) + ) + ) + (set_local $t + (get_local $p) + ) + (set_local $p + (i32.load + (i32.const 0) + ) + ) + (i32.store + (get_local $r) + (get_local $t) + ) + (drop + (get_local $s) + ) + (drop + (get_local $t) + ) + ) + (func $switch-def (type $5) (param $i3 i32) (result i32) + (local $i1 i32) + (set_local $i1 + (i32.const 10) + ) + (block $switch$def + (block $switch-case$1 + (br_table $switch-case$1 $switch$def + (get_local $i3) + ) + ) + (set_local $i1 + (i32.const 1) + ) + ) + (return + (get_local $i1) + ) + ) + (func $no-out-of-label (param $x i32) (param $y i32) + (loop $moar + (set_local $x + (block (result i32) + (br_if $moar (get_local $x)) + (i32.const 0) + ) + ) + ) + (drop (get_local $x)) + (block $moar + (set_local $y + (block (result i32) + (br_if $moar (get_local $y)) + (i32.const 0) + ) + ) + ) + (drop (get_local $y)) + ) + (func $freetype-cd (param $a i32) (result i32) + (local $e i32) + (loop $while-in$1 + (block $while-out$0 + (set_local $e + (get_local $a) + ) + (set_local $a ;; this set must happen, so that if the br_if does not break, we have the right $a later down - once we use a block return value, the $a set's outside the block + (i32.const 4) + ) + (br_if $while-out$0 + (get_local $e) + ) + (set_local $a + (i32.add + (get_local $a) + (i32.const 0) + ) + ) + ) + ) + (get_local $a) + ) + (func $drop-if-value (param $x i32) (param $y i32) (param $z i32) (result i32) + (local $temp i32) + (drop + (if (result i32) + (get_local $x) + (block $block53 (result i32) + (nop) + (set_local $temp + (get_local $y) + ) + (get_local $z) + ) + (block $block54 (result i32) + (nop) + (set_local $temp + (get_local $y) + ) + (get_local $z) + ) + ) + ) + (drop (get_local $temp)) + (return + (i32.const 0) + ) + ) + (func $drop-br_if (param $label i32) (param $$cond2 i32) (param $$$0151 i32) (result i32) + (block $label$break$L4 + (if + (i32.eq + (get_local $label) + (i32.const 15) + ) + (block $block + (set_local $label + (i32.const 0) + ) + (set_local $$cond2 + (i32.eq + (get_local $$$0151) + (i32.const 0) + ) + ) + (br_if $label$break$L4 ;; when we add a value to this, its type changes as it returns the value too, so must be dropped + (i32.eqz + (get_local $$cond2) + ) + ) + ) + ) + (set_local $label + (i32.const 1) + ) + ) + (get_local $label) + ) + (func $drop-tee-unreachable + (local $x i32) + (drop + (tee_local $x + (unreachable) + ) + ) + (drop + (get_local $x) + ) + ) + (func $if-return-but-unreachable (param $var$0 i64) + (if + (unreachable) + (set_local $var$0 + (get_local $var$0) + ) + (set_local $var$0 + (i64.const 1) + ) + ) + ) +) +(module + (memory (shared 256 256)) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) + (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) + (type $4 (func (param i32))) + (type $5 (func (param i32) (result i32))) + (type $6 (func (param i32 i32 i32 i32 i32 i32))) + (func $nonatomics (result i32) ;; loads are reordered + (local $x i32) + (set_local $x (i32.load (i32.const 1024))) + (drop (i32.load (i32.const 1028))) + (get_local $x) + ) + (func $nonatomic-growmem (result i32) ;; grow_memory is modeled as modifying memory + (local $x i32) + (set_local $x (i32.load (grow_memory (i32.const 1)))) + (drop (i32.load (i32.const 1028))) + (get_local $x) + ) + (func $atomics ;; atomic loads don't pass each other + (local $x i32) + (set_local $x (i32.atomic.load (i32.const 1024))) + (drop (i32.atomic.load (i32.const 1028))) + (drop (get_local $x)) + ) + (func $one-atomic ;; atomic loads don't pass other loads + (local $x i32) + (set_local $x (i32.load (i32.const 1024))) + (drop (i32.atomic.load (i32.const 1028))) + (drop (get_local $x)) + ) + (func $other-atomic ;; atomic loads don't pass other loads + (local $x i32) + (set_local $x (i32.atomic.load (i32.const 1024))) + (drop (i32.load (i32.const 1028))) + (drop (get_local $x)) + ) + (func $atomic-growmem (result i32) ;; grow_memory is modeled as modifying memory + (local $x i32) + (set_local $x (i32.load (grow_memory (i32.const 1)))) + (drop (i32.atomic.load (i32.const 1028))) + (get_local $x) + ) + (func $atomicrmw ;; atomic rmw don't pass loads + (local $x i32) + (set_local $x (i32.atomic.rmw.add (i32.const 1024) (i32.const 1))) + (drop (i32.atomic.load (i32.const 1028))) + (drop (get_local $x)) + ) + (func $atomic-cmpxchg ;; cmpxchg don't pass loads + (local $x i32) + (set_local $x (i32.atomic.rmw.cmpxchg (i32.const 1024) (i32.const 1) (i32.const 2))) + (drop (i32.atomic.load (i32.const 1028))) + (drop (get_local $x)) + ) + (func $br-value-reordering (result i32) + (local $temp i32) + (block $outside + (loop $loop ;; we should exit this loop, hit the unreachable outside + ;; loop logic + (br_if $outside ;; we should not create a block value that adds a value to a br, if the value&condition of the br cannot be reordered, + ;; as the value comes first + (block (result i32) + (br_if $loop + (get_local $temp) ;; false, don't loop + ) + (unreachable) ;; the end + (set_local $temp + (i32.const -1) + ) + (i32.const 0) + ) + ) + ) + (set_local $temp + (i32.const -1) + ) + ) + (unreachable) + ) + (func $br-value-reordering-safe (result i32) + (local $temp i32) + (block $outside + (loop $loop ;; we should exit this loop, hit the unreachable outside + ;; loop logic + (drop (get_local $temp)) ;; different from above - add a use here + (br_if $outside ;; we should not create a block value that adds a value to a br, if the value&condition of the br cannot be reordered, + ;; as the value comes first + (block (result i32) + (set_local $temp ;; the use *is* in the condition, but it's ok, no conflicts + (i32.const -1) + ) + (i32.const 0) + ) + ) + ) + (set_local $temp + (i32.const -1) + ) + ) + (unreachable) + ) +) diff --git a/src/binaryen/test/passes/ssa.txt b/src/binaryen/test/passes/ssa.txt new file mode 100644 index 0000000000..1370e40960 --- /dev/null +++ b/src/binaryen/test/passes/ssa.txt @@ -0,0 +1,730 @@ +(module + (type $0 (func (param i32))) + (type $1 (func)) + (type $2 (func (result i32))) + (global $global$0 (mut i32) (i32.const 1)) + (memory $0 0) + (func $basics (; 0 ;) (type $0) (param $x i32) + (local $y i32) + (local $z f32) + (local $w i64) + (local $t f64) + (local $5 i32) + (local $6 f64) + (local $7 f64) + (drop + (get_local $x) + ) + (drop + (i32.const 0) + ) + (drop + (f32.const 0) + ) + (drop + (i64.const 0) + ) + (drop + (f64.const 0) + ) + (set_local $5 + (i32.const 100) + ) + (drop + (get_local $5) + ) + (set_local $6 + (f64.const 2) + ) + (drop + (get_local $6) + ) + (set_local $7 + (f64.const 33) + ) + (drop + (get_local $7) + ) + (drop + (get_local $7) + ) + ) + (func $if (; 1 ;) (type $0) (param $p i32) + (local $x i32) + (local $y i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (set_local $13 + (get_local $p) + ) + (block + (drop + (if (result i32) + (i32.const 1) + (i32.const 0) + (i32.const 0) + ) + ) + (if + (i32.const 1) + (set_local $3 + (tee_local $15 + (tee_local $14 + (tee_local $12 + (i32.const 1) + ) + ) + ) + ) + ) + (drop + (get_local $12) + ) + (if + (i32.const 1) + (set_local $4 + (tee_local $13 + (i32.const 1) + ) + ) + ) + (drop + (get_local $13) + ) + (if + (i32.const 1) + (set_local $5 + (tee_local $15 + (tee_local $14 + (i32.const 2) + ) + ) + ) + (nop) + ) + (drop + (get_local $14) + ) + (if + (i32.const 1) + (nop) + (set_local $6 + (tee_local $15 + (i32.const 3) + ) + ) + ) + (drop + (get_local $15) + ) + (if + (i32.const 1) + (set_local $7 + (tee_local $16 + (i32.const 4) + ) + ) + (set_local $8 + (tee_local $16 + (i32.const 5) + ) + ) + ) + (drop + (get_local $16) + ) + (if + (i32.const 1) + (set_local $9 + (tee_local $17 + (i32.const 6) + ) + ) + (block $block + (set_local $10 + (i32.const 7) + ) + (set_local $11 + (tee_local $17 + (i32.const 8) + ) + ) + ) + ) + (drop + (get_local $17) + ) + ) + ) + (func $if2 (; 2 ;) (type $0) (param $x i32) + (local $1 i32) + (local $2 i32) + (set_local $2 + (get_local $x) + ) + (block + (if + (i32.const 1) + (block $block + (set_local $1 + (tee_local $2 + (i32.const 1) + ) + ) + (drop + (get_local $1) + ) + ) + ) + (drop + (get_local $2) + ) + ) + ) + (func $block (; 3 ;) (type $0) (param $x i32) + (local $1 i32) + (local $2 i32) + (set_local $2 + (get_local $x) + ) + (block + (block $out + (br_if $out + (i32.const 2) + ) + (set_local $1 + (tee_local $2 + (i32.const 1) + ) + ) + ) + (drop + (get_local $2) + ) + ) + ) + (func $block2 (; 4 ;) (type $0) (param $x i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (block $out + (set_local $1 + (tee_local $6 + (i32.const 1) + ) + ) + (drop + (get_local $1) + ) + (br_if $out + (i32.const 2) + ) + (drop + (get_local $1) + ) + (if + (i32.const 3) + (block $block + (set_local $2 + (tee_local $6 + (i32.const 1) + ) + ) + (drop + (get_local $2) + ) + (br $out) + ) + ) + (drop + (get_local $1) + ) + (set_local $3 + (tee_local $6 + (i32.const 4) + ) + ) + (drop + (get_local $3) + ) + (if + (i32.const 5) + (br $out) + ) + (drop + (get_local $3) + ) + (if + (i32.const 6) + (nop) + ) + (if + (i32.const 7) + (nop) + (nop) + ) + (block $in + (set_local $4 + (tee_local $6 + (i32.const 8) + ) + ) + (drop + (get_local $4) + ) + (br_table $in $out + (i32.const 9) + ) + ) + (drop + (get_local $4) + ) + (block $in2 + (set_local $5 + (tee_local $6 + (i32.const 10) + ) + ) + (drop + (get_local $5) + ) + (br_table $out $in2 + (i32.const 11) + ) + ) + (drop + (get_local $5) + ) + ) + (drop + (get_local $6) + ) + ) + (func $loop (; 5 ;) (type $0) (param $x i32) + (local $1 i32) + (local $2 i32) + (set_local $2 + (get_local $x) + ) + (block + (drop + (get_local $x) + ) + (loop $moar + (drop + (get_local $2) + ) + (set_local $1 + (tee_local $2 + (i32.const 1) + ) + ) + (br_if $moar + (i32.const 2) + ) + ) + (drop + (get_local $1) + ) + ) + ) + (func $loop2 (; 6 ;) (type $0) (param $x i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_local $x) + ) + (block + (drop + (get_local $x) + ) + (loop $moar + (drop + (get_local $4) + ) + (set_local $1 + (i32.const 1) + ) + (drop + (get_local $1) + ) + (set_local $2 + (tee_local $4 + (i32.const 123) + ) + ) + (drop + (get_local $2) + ) + (br_if $moar + (i32.const 2) + ) + (drop + (get_local $2) + ) + (set_local $3 + (i32.const 3) + ) + (drop + (get_local $3) + ) + ) + (drop + (get_local $3) + ) + ) + ) + (func $loop2-zeroinit (; 7 ;) (type $1) + (local $x i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (drop + (i32.const 0) + ) + (loop $moar + (drop + (get_local $4) + ) + (set_local $1 + (i32.const 1) + ) + (drop + (get_local $1) + ) + (set_local $2 + (tee_local $4 + (i32.const 123) + ) + ) + (drop + (get_local $2) + ) + (br_if $moar + (i32.const 2) + ) + (drop + (get_local $2) + ) + (set_local $3 + (i32.const 3) + ) + (drop + (get_local $3) + ) + ) + (drop + (get_local $3) + ) + ) + (func $real-loop (; 8 ;) (type $0) (param $param i32) + (local $loopvar i32) + (local $inc i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (set_local $3 + (tee_local $6 + (get_local $param) + ) + ) + (loop $more + (block $stop + (if + (i32.const 1) + (br $stop) + ) + (set_local $4 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (set_local $5 + (tee_local $6 + (get_local $4) + ) + ) + (br $more) + ) + ) + (drop + (get_local $6) + ) + ) + (func $real-loop-outblock (; 9 ;) (type $0) (param $param i32) + (local $loopvar i32) + (local $inc i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (set_local $3 + (tee_local $6 + (get_local $param) + ) + ) + (block $stop + (loop $more + (if + (i32.const 1) + (br $stop) + ) + (set_local $4 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (set_local $5 + (tee_local $6 + (get_local $4) + ) + ) + (br $more) + ) + ) + (drop + (get_local $6) + ) + ) + (func $loop-loop-param (; 10 ;) (type $0) (param $param i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (set_local $3 + (get_local $param) + ) + (set_local $4 + (get_local $param) + ) + (block + (loop $loop1 + (block $out1 + (if + (get_local $3) + (br $out1) + ) + (set_local $1 + (tee_local $4 + (tee_local $3 + (i32.const 1) + ) + ) + ) + (br $loop1) + ) + ) + (loop $loop2 + (block $out2 + (if + (get_local $4) + (br $out2) + ) + (set_local $2 + (tee_local $4 + (i32.const 2) + ) + ) + (br $loop2) + ) + ) + ) + ) + (func $loop-loop-param-nomerge (; 11 ;) (type $0) (param $param i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (loop $loop1 + (block $out1 + (set_local $1 + (tee_local $3 + (i32.const 1) + ) + ) + (if + (get_local $1) + (br $out1) + ) + (br $loop1) + ) + ) + (loop $loop2 + (block $out2 + (if + (get_local $3) + (br $out2) + ) + (set_local $2 + (tee_local $3 + (i32.const 2) + ) + ) + (br $loop2) + ) + ) + ) + (func $loop-nesting (; 12 ;) (type $0) (param $x i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $3 + (get_local $x) + ) + (set_local $4 + (get_local $x) + ) + (set_local $5 + (get_local $x) + ) + (block + (block $out + (loop $loop1 + (if + (get_local $3) + (br $out) + ) + (loop $loop2 + (if + (get_local $4) + (br $out) + ) + (set_local $1 + (tee_local $5 + (tee_local $4 + (i32.const 1) + ) + ) + ) + (br $loop2) + ) + (set_local $2 + (tee_local $5 + (tee_local $4 + (tee_local $3 + (i32.const 2) + ) + ) + ) + ) + (br $loop1) + ) + ) + (drop + (get_local $5) + ) + ) + ) + (func $loop-nesting-2 (; 13 ;) (type $0) (param $x i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $3 + (get_local $x) + ) + (set_local $4 + (get_local $x) + ) + (set_local $5 + (get_local $x) + ) + (block + (block $out + (loop $loop1 + (if + (get_local $3) + (br $out) + ) + (loop $loop2 + (if + (get_local $4) + (br $out) + ) + (set_local $1 + (tee_local $5 + (tee_local $4 + (i32.const 1) + ) + ) + ) + (br_if $loop2 + (i32.const 3) + ) + ) + (set_local $2 + (tee_local $5 + (tee_local $4 + (tee_local $3 + (i32.const 2) + ) + ) + ) + ) + (br $loop1) + ) + ) + (drop + (get_local $5) + ) + ) + ) + (func $func_6 (; 14 ;) (type $2) (result i32) + (local $result i32) + (local $zero i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (loop $label$1 + (if + (i32.eqz + (get_global $global$0) + ) + (return + (get_local $4) + ) + ) + (set_global $global$0 + (i32.const 0) + ) + (set_local $2 + (tee_local $4 + (i32.const 1) + ) + ) + (br_if $label$1 + (i32.const 0) + ) + (set_local $3 + (tee_local $4 + (i32.const 0) + ) + ) + (br $label$1) + ) + ) +) diff --git a/src/binaryen/test/passes/ssa.wast b/src/binaryen/test/passes/ssa.wast new file mode 100644 index 0000000000..e51189b5eb --- /dev/null +++ b/src/binaryen/test/passes/ssa.wast @@ -0,0 +1,343 @@ +(module + (global $global$0 (mut i32) (i32.const 1)) + (func $basics (param $x i32) + (local $y i32) + (local $z f32) + (local $w i64) + (local $t f64) + (drop (get_local $x)) ;; keep as param get + (drop (get_local $y)) ;; turn into get of 0-init + (drop (get_local $z)) + (drop (get_local $w)) + (drop (get_local $t)) + (set_local $x (i32.const 100)) ;; overwrite param + (drop (get_local $x)) ;; no longer a param! + (set_local $t (f64.const 2)) ;; overwrite local + (drop (get_local $t)) + (set_local $t (f64.const 33)) ;; overwrite local AGAIN + (drop (get_local $t)) + (drop (get_local $t)) ;; use twice + ) + (func $if (param $p i32) + (local $x i32) + (local $y i32) + (drop + (if i32 + (i32.const 1) + (get_local $x) + (get_local $y) + ) + ) + (if + (i32.const 1) + (set_local $x (i32.const 1)) + ) + (drop (get_local $x)) + ;; same but with param + (if + (i32.const 1) + (set_local $p (i32.const 1)) + ) + (drop (get_local $p)) + ;; if-else + (if + (i32.const 1) + (set_local $x (i32.const 2)) + (nop) + ) + (drop (get_local $x)) + (if + (i32.const 1) + (nop) + (set_local $x (i32.const 3)) + ) + (drop (get_local $x)) + (if + (i32.const 1) + (set_local $x (i32.const 4)) + (set_local $x (i32.const 5)) + ) + (drop (get_local $x)) + (if + (i32.const 1) + (set_local $x (i32.const 6)) + (block + (set_local $x (i32.const 7)) + (set_local $x (i32.const 8)) + ) + ) + (drop (get_local $x)) + ) + (func $if2 (param $x i32) + (if + (i32.const 1) + (block + (set_local $x (i32.const 1)) + (drop (get_local $x)) ;; use between phi set and use + ) + ) + (drop (get_local $x)) + ) + (func $block (param $x i32) + (block $out + (br_if $out (i32.const 2)) + (set_local $x (i32.const 1)) + ) + (drop (get_local $x)) + ) + (func $block2 (param $x i32) + (block $out + (set_local $x (i32.const 1)) + (drop (get_local $x)) + (br_if $out (i32.const 2)) + (drop (get_local $x)) + (if (i32.const 3) + (block + (set_local $x (i32.const 1)) + (drop (get_local $x)) + (br $out) + ) + ) + (drop (get_local $x)) + (set_local $x (i32.const 4)) + (drop (get_local $x)) + (if (i32.const 5) + (br $out) + ) + (drop (get_local $x)) + (if (i32.const 6) + (nop) + ) + (if (i32.const 7) + (nop) + (nop) + ) + ;; finally, switching + (block $in + (set_local $x (i32.const 8)) + (drop (get_local $x)) + (br_table $in $out (i32.const 9)) + ) + (drop (get_local $x)) + (block $in2 + (set_local $x (i32.const 10)) + (drop (get_local $x)) + (br_table $out $in2 (i32.const 11)) + ) + (drop (get_local $x)) + ) + (drop (get_local $x)) + ) + (func $loop (param $x i32) + (drop (get_local $x)) + (loop $moar + (drop (get_local $x)) + (set_local $x (i32.const 1)) + (br_if $moar (i32.const 2)) + ) + (drop (get_local $x)) + ) + (func $loop2 (param $x i32) + (drop (get_local $x)) + (loop $moar + (drop (get_local $x)) + (set_local $x (i32.const 1)) + (drop (get_local $x)) + (set_local $x (i32.const 123)) + (drop (get_local $x)) + (br_if $moar (i32.const 2)) + (drop (get_local $x)) ;; add use in loop before it ends, we should update this to the phi + (set_local $x (i32.const 3)) + (drop (get_local $x)) ;; another use, but should *not* be phi'd + ) + (drop (get_local $x)) + ) + (func $loop2-zeroinit + (local $x i32) + (drop (get_local $x)) + (loop $moar + (drop (get_local $x)) + (set_local $x (i32.const 1)) + (drop (get_local $x)) + (set_local $x (i32.const 123)) + (drop (get_local $x)) + (br_if $moar (i32.const 2)) + (drop (get_local $x)) ;; add use in loop before it ends, we should update this to the phi + (set_local $x (i32.const 3)) + (drop (get_local $x)) ;; another use, but should *not* be phi'd + ) + (drop (get_local $x)) + ) + (func $real-loop + (param $param i32) + (local $loopvar i32) + (local $inc i32) + (set_local $loopvar + (get_local $param) + ) + (loop $more + (block $stop + (if + (i32.const 1) + (br $stop) + ) + (set_local $inc + (i32.add + (get_local $loopvar) ;; this var should be written to from before the loop and the inc at the end + (i32.const 1) + ) + ) + (set_local $loopvar + (get_local $inc) + ) + (br $more) + ) + ) + (drop (get_local $loopvar)) + ) + (func $real-loop-outblock + (param $param i32) + (local $loopvar i32) + (local $inc i32) + (set_local $loopvar + (get_local $param) + ) + (block $stop + (loop $more + (if + (i32.const 1) + (br $stop) + ) + (set_local $inc + (i32.add + (get_local $loopvar) ;; this var should be written to from before the loop and the inc at the end + (i32.const 1) + ) + ) + (set_local $loopvar + (get_local $inc) + ) + (br $more) + ) + ) + (drop (get_local $loopvar)) + ) + (func $loop-loop-param + (param $param i32) + (loop $loop1 + (block $out1 + (if + (get_local $param) + (br $out1) + ) + (set_local $param (i32.const 1)) + (br $loop1) + ) + ) + (loop $loop2 + (block $out2 + (if + (get_local $param) + (br $out2) + ) + (set_local $param (i32.const 2)) + (br $loop2) + ) + ) + ) + (func $loop-loop-param-nomerge + (param $param i32) + (loop $loop1 + (block $out1 + (set_local $param (i32.const 1)) + (if + (get_local $param) + (br $out1) + ) + (br $loop1) + ) + ) + (loop $loop2 + (block $out2 + (if + (get_local $param) + (br $out2) + ) + (set_local $param (i32.const 2)) + (br $loop2) + ) + ) + ) + (func $loop-nesting + (param $x i32) + (block $out + (loop $loop1 + (if + (get_local $x) + (br $out) + ) + (loop $loop2 + (if + (get_local $x) + (br $out) + ) + (set_local $x (i32.const 1)) + (br $loop2) + ) + (set_local $x (i32.const 2)) + (br $loop1) + ) + ) + (drop (get_local $x)) ;; can receive from either set, or input param + ) + (func $loop-nesting-2 + (param $x i32) + (block $out + (loop $loop1 + (if + (get_local $x) + (br $out) + ) + (loop $loop2 + (if + (get_local $x) + (br $out) + ) + (set_local $x (i32.const 1)) + (br_if $loop2 (i32.const 3)) ;; add fallthrough + ) + (set_local $x (i32.const 2)) + (br $loop1) + ) + ) + (drop (get_local $x)) ;; can receive from either set, or input param + ) + (func $func_6 (result i32) + (local $result i32) + (local $zero i32) + (loop $label$1 + (if + (i32.eqz + (get_global $global$0) + ) + (return + (get_local $result) ;; we eventually reach here + ) + ) + (set_global $global$0 + (i32.const 0) ;; tell next iteration to return + ) + (set_local $result + (i32.const 1) ;; set the return value to 1, temporarily + ) + (br_if $label$1 + (i32.const 0) ;; don't do anything here + ) + (set_local $result + (get_local $zero) ;; set it to zero instead + ) + (br $label$1) ;; back to the top, where we will return the zero + ) + ) +) + diff --git a/src/binaryen/test/passes/translate-to-fuzz.txt b/src/binaryen/test/passes/translate-to-fuzz.txt new file mode 100644 index 0000000000..34abb603f3 --- /dev/null +++ b/src/binaryen/test/passes/translate-to-fuzz.txt @@ -0,0 +1,917 @@ +(module + (type $FUNCSIG$ji (func (param i32) (result i64))) + (type $FUNCSIG$ff (func (param f32) (result f32))) + (global $global$0 (mut f64) (f64.const 138413376)) + (global $global$1 (mut f64) (f64.const -3402823466385288598117041e14)) + (global $hangLimit (mut i32) (i32.const 100)) + (table 0 anyfunc) + + (memory $0 (shared 1 1)) + (data (i32.const 0) "\00C\00[\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (export "func_0" (func $func_0)) + (export "func_1" (func $func_1)) + (export "hangLimitInitializer" (func $hangLimitInitializer)) + (func $func_0 (; 0 ;) (type $FUNCSIG$ji) (param $0 i32) (result i64) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (i64.const 3564930269531684152) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block $label$0 (result i64) + (drop + (wake + (i32.and + (i32.const 5142) + (i32.const 31) + ) + (i32.const 88) + ) + ) + (i64.and + (i64.const 5340426979903478799) + (i64.const 1836149622) + ) + ) + ) + (func $func_1 (; 1 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) + (local $1 f32) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (get_local $1) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block + (block $label$0 + (nop) + (if + (i32.const -8) + (block + (block $label$1 + (nop) + (br_table $label$0 $label$1 $label$1 $label$1 $label$0 $label$1 $label$0 $label$0 $label$0 $label$0 + (i32.const -28) + ) + ) + (block $label$9 + (loop $label$10 + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (get_local $1) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block $label$11 + (if + (i32.eqz + (if (result i32) + (i32.const 65535) + (i32.const -4194304) + (block $label$14 (result i32) + (nop) + (br $label$11) + ) + ) + ) + (block $label$15 + (nop) + (loop $label$16 + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (f32.const -2147483648) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (nop) + ) + ) + (block $label$17 + (i32.store8 offset=2 + (i32.and + (i32.const 8) + (i32.const 31) + ) + (i32.const -16777216) + ) + (nop) + ) + ) + (block $label$18 + (drop + (f64.const -9223372036854775808) + ) + (nop) + ) + ) + ) + (loop $label$19 + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (get_local $1) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block + (block $label$20 + (nop) + (block $label$21 + (drop + (i64.atomic.rmw8_u.xor offset=3 + (i32.and + (i32.load8_s offset=2 + (i32.and + (i32.const 524288) + (i32.const 31) + ) + ) + (i32.const 31) + ) + (loop $label$23 (result i64) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (f32.const 3477819136) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (i64.const -69) + ) + ) + ) + (loop $label$24 + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (get_local $1) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block $label$25 + (if + (i32.eqz + (wake + (i32.and + (i32.trunc_u/f32 + (f32.const 2056) + ) + (i32.const 31) + ) + (i32.load offset=2 align=2 + (i32.and + (i32.atomic.load8_u offset=2 + (i32.and + (i32.atomic.load offset=2 + (i32.and + (i32.const -131072) + (i32.const 31) + ) + ) + (i32.const 31) + ) + ) + (i32.const 31) + ) + ) + ) + ) + (set_local $0 + (f32.const 536) + ) + (block $label$26 + (br_if $label$26 + (i32.const -16) + ) + (if + (block $label$27 (result i32) + (nop) + (br $label$24) + ) + (block $label$28 + (if + (block $label$29 (result i32) + (set_local $1 + (block $label$30 (result f32) + (set_local $0 + (call $deNan32 + (f32.demote/f64 + (f64.const 1970236986) + ) + ) + ) + (block $label$31 (result f32) + (nop) + (br $label$19) + ) + ) + ) + (br $label$20) + ) + (block $label$32 + (set_local $0 + (f32.const 9223372036854775808) + ) + (loop $label$33 + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (f32.const 57542873088) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (nop) + ) + ) + (block $label$34 + (nop) + (nop) + ) + ) + (f64.store offset=3 align=2 + (i32.and + (i32.const 2097152) + (i32.const 31) + ) + (f64.const -2097152) + ) + ) + (block $label$36 + (loop $label$37 + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (f32.const -68719476736) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (loop $label$38 + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (get_local $1) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block + (br_if $label$37 + (i32.eqz + (if (result i32) + (i32.eqz + (i32.const 340281875) + ) + (i32.const 255) + (i32.const -25) + ) + ) + ) + (br_if $label$38 + (i32.const -32767) + ) + (loop $label$39 + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (get_local $0) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block + (nop) + (br_if $label$39 + (i32.const 5651) + ) + (nop) + ) + ) + ) + ) + ) + (if + (i32.const 96) + (set_local $1 + (call $deNan32 + (select + (f32.const 9223372036854775808) + (get_local $0) + (i32.const 0) + ) + ) + ) + (block $label$40 + (if + (i32.eqz + (block $label$41 (result i32) + (drop + (get_local $0) + ) + (br $label$24) + ) + ) + (block $label$42 + (if + (i32.const -4) + (loop $label$43 + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (f32.const -4503599627370496) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block + (loop $label$44 + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (get_local $1) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (nop) + ) + (br_if $label$43 + (i32.eqz + (i32.const 0) + ) + ) + (nop) + ) + ) + (nop) + ) + (block $label$45 + (nop) + (nop) + ) + ) + (f64.store offset=4 align=4 + (i32.and + (i32.const 128) + (i32.const 31) + ) + (f64.const -25) + ) + ) + (loop $label$46 + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (f32.const 9223372036854775808) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block $label$47 + (br_if $label$19 + (i32.eqz + (block $label$48 (result i32) + (i32.const 386995996) + ) + ) + ) + (br_if $label$20 + (i32.eqz + (i32.const -2147483647) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (nop) + ) + ) + ) + ) + (br_if $label$19 + (i64.ne + (i64.trunc_s/f32 + (tee_local $0 + (if (result f32) + (wake + (f64.ge + (block $label$49 (result f64) + (nop) + (f64.const 5) + ) + (f64.const -1024) + ) + (loop $label$50 (result i32) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (get_local $1) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block (result i32) + (block $label$51 + (i32.atomic.store16 offset=22 + (i32.and + (i32.const 127) + (i32.const 31) + ) + (i32.const 0) + ) + (drop + (i64.const 64) + ) + ) + (br_if $label$50 + (wake + (i32.and + (i32.const 18505) + (i32.const 31) + ) + (i32.const 25) + ) + ) + (i32.const 16384) + ) + ) + ) + (block $label$52 (result f32) + (drop + (call $deNan32 + (f32.convert_s/i32 + (i32.atomic.load offset=22 + (i32.and + (i32.const -68) + (i32.const 31) + ) + ) + ) + ) + ) + (br $label$19) + ) + (block $label$53 (result f32) + (if + (f32.lt + (f32.load offset=3 align=1 + (i32.and + (i32.const -65535) + (i32.const 31) + ) + ) + (call $deNan32 + (f32.abs + (f32.const 1047536704) + ) + ) + ) + (block $label$54 + (if + (i32.eqz + (i32.wrap/i64 + (i64.const 255) + ) + ) + (block $label$55 + (set_local $0 + (get_local $0) + ) + (block $label$56 + (if + (i32.const 20341) + (nop) + (set_local $1 + (get_local $1) + ) + ) + (nop) + ) + ) + (block $label$57 + (block $label$58 + (block $label$59 + (nop) + (block $label$60 + (nop) + (nop) + ) + ) + (nop) + ) + (block $label$61 + (nop) + ) + ) + ) + (nop) + ) + (block $label$62 + (nop) + (nop) + ) + ) + (call $deNan32 + (f32.demote/f64 + (call $deNan64 + (f64.div + (call $deNan64 + (select + (call $deNan64 + (select + (f64.const -2048) + (f64.const 386145560) + (i32.const 1769303922) + ) + ) + (f64.const 8234166675167740447353394e125) + (i32.const 21824) + ) + ) + (get_global $global$0) + ) + ) + ) + ) + ) + ) + ) + ) + (i64.const -9223372036854775806) + ) + ) + (loop $label$65 + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (f32.const 3402823466385288598117041e14) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block + (block $label$66 + (br_if $label$66 + (i32.eqz + (i32.const 32768) + ) + ) + ) + (br_if $label$65 + (loop $label$67 (result i32) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (get_local $1) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block (result i32) + (block $label$68 + (set_local $0 + (f32.const 6.947862890707752e-37) + ) + (i32.atomic.store16 offset=22 + (i32.and + (select + (select + (i32.const 32768) + (f64.lt + (f64.const 1.1754943508222875e-38) + (f64.load offset=22 align=2 + (i32.and + (i32.const -5) + (i32.const 31) + ) + ) + ) + (i32.atomic.load16_u offset=4 + (i32.const -126) + ) + ) + (i32.atomic.rmw8_u.cmpxchg offset=4 + (i32.and + (f32.lt + (get_local $1) + (f32.const 5100585927634429158935007e9) + ) + (i32.const 31) + ) + (i32.add + (i32.const 65536) + (if (result i32) + (i32.const -2147483647) + (i32.const 440812573) + (f64.ge + (call $deNan64 + (f64.abs + (f64.const 1) + ) + ) + (f64.const 512) + ) + ) + ) + (if (result i32) + (i32.eqz + (i32.const -2147483648) + ) + (block $label$69 (result i32) + (i64.eqz + (i64.const -6) + ) + ) + (block $label$70 (result i32) + (nop) + (loop $label$71 (result i32) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (f32.const -nan:0x7fffcd) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block (result i32) + (nop) + (br_if $label$71 + (i32.const -268435456) + ) + (i32.const 1499148335) + ) + ) + ) + ) + ) + (i32.const 2147483647) + ) + (i32.const 31) + ) + (i32.trunc_s/f64 + (get_global $global$1) + ) + ) + ) + (br_if $label$67 + (loop $label$72 (result i32) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (get_local $0) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block (result i32) + (nop) + (br_if $label$72 + (i32.eqz + (i32.load16_s offset=2 align=1 + (i32.and + (i32.const -64) + (i32.const -4194304) + ) + ) + ) + ) + (f64.ge + (call $deNan64 + (f64.convert_u/i32 + (i32.const -2147483647) + ) + ) + (get_global $global$1) + ) + ) + ) + ) + (i32.const -68) + ) + ) + ) + (if + (i32.const -89) + (f64.store offset=4 align=4 + (return + (f32.const -274877906944) + ) + (return + (f32.const 19) + ) + ) + (return + (get_local $0) + ) + ) + ) + ) + ) + ) + ) + ) + (return + (get_local $1) + ) + ) + ) + (return + (f32.const 2147483648) + ) + ) + ) + (func $hangLimitInitializer (; 2 ;) + (set_global $hangLimit + (i32.const 100) + ) + ) + (func $deNan32 (; 3 ;) (param $0 f32) (result f32) + (if (result f32) + (f32.eq + (get_local $0) + (get_local $0) + ) + (get_local $0) + (f32.const 0) + ) + ) + (func $deNan64 (; 4 ;) (param $0 f64) (result f64) + (if (result f64) + (f64.eq + (get_local $0) + (get_local $0) + ) + (get_local $0) + (f64.const 0) + ) + ) +) diff --git a/src/binaryen/test/passes/translate-to-fuzz.wast b/src/binaryen/test/passes/translate-to-fuzz.wast new file mode 100644 index 0000000000..cbf25fde1d --- /dev/null +++ b/src/binaryen/test/passes/translate-to-fuzz.wast @@ -0,0 +1,99 @@ +(module # fake module here, for test harness, but it's really not needed +.. +any +3INPUT +h e r e +*will* +d0 +0.753538467597066 +2.2339337309978227 +................. +lorem ipsum whatever + +through the darkness of future past +the magician longs to see +one [chants|chance] out between two worlds +fire, walk with me + + +h e r e +*will* +d0 +0.753538467597066 +2.2339337309978227 +................. +lorem ipsum whatever + +through the darkness of future past +the magician longs to see +one [chants|chance] out between two worlds +fire, walk with me + + +(&!*^@$*&@!^*&@#^$*&@#$*&@#$^*&@^#$)(&)(!&$(*&^@&#*$ + +MOAR testing09237861235980723894570389yfskdjhgfm13jo847rtnjcsjjdhfgnc12o387456vb1p98364vlaisutfvlKUYASDOV*&Q@$%VOUAYFROVLUKSYDFP(*A^*&%DFASF________ +<>?><>?>>?<>??>DS?><>?>>?<>??>DS?><>?>>?<>??>DS + +int main() { + int a = 12345; + unsigned b = 123456; + long c = 1234567; + unsigned long d = 12345678; + long long e = 1234567891011; + unsigned long long f = 123456789101112; + + printf( + "int a = %d\n" + "unsigned b = %u\n" + "long c = %ld\n" + "unsigned long d = %lu\n" + "long long e = %lld\n" + "unsigned long long f = %llu\n" + , a, b, c, d, e, f); + return 0; +} diff --git a/src/binaryen/test/printf.txt b/src/binaryen/test/printf.txt new file mode 100644 index 0000000000..3680d516c4 --- /dev/null +++ b/src/binaryen/test/printf.txt @@ -0,0 +1,6 @@ +int a = 12345 +unsigned b = 123456 +long c = 1234567 +unsigned long d = 12345678 +long long e = 1234567891011 +unsigned long long f = 123456789101112 diff --git a/src/binaryen/test/reduce/destructive.wast b/src/binaryen/test/reduce/destructive.wast new file mode 100644 index 0000000000..65786502f8 --- /dev/null +++ b/src/binaryen/test/reduce/destructive.wast @@ -0,0 +1,10 @@ +(module + (export "x" (func $x)) + (func $x (param $x i32) (result i32) + (if (i32.eq (get_local $x) (i32.const 98658746)) + (unreachable) ;; this can be removed destructively, since we do not sent this param + ) + (i32.const 100) + ) +) + diff --git a/src/binaryen/test/reduce/destructive.wast.txt b/src/binaryen/test/reduce/destructive.wast.txt new file mode 100644 index 0000000000..d58f0ed7a7 --- /dev/null +++ b/src/binaryen/test/reduce/destructive.wast.txt @@ -0,0 +1,9 @@ +(module + (type $0 (func (param i32) (result i32))) + (memory $0 0) + (export "x" (func $0)) + (func $0 (; 0 ;) (type $0) (param $var$0 i32) (result i32) + (i32.const 100) + ) +) + diff --git a/src/binaryen/test/reduce/memory_table.wast b/src/binaryen/test/reduce/memory_table.wast new file mode 100644 index 0000000000..129d951552 --- /dev/null +++ b/src/binaryen/test/reduce/memory_table.wast @@ -0,0 +1,31 @@ +(module + (type $i (func (result i32))) + (memory $0 256 256) + (table 481 481 anyfunc) + (elem (i32.const 0) $f0 $f0 $f1 $f2 $f0 $f3 $f0) + (data (i32.const 0) "p\0bflkj") + (data (i32.const 10960) "1234hello") + (export "f1" (func $f1)) + (export "f2" (func $f2)) + (export "f4" (func $f4)) + (func $f0 (result i32) + (i32.const 1234) + ) + (func $f1 + (i32.store (i32.const 1000) (i32.const 65530)) ;; dead store + ) + (func $f2 (result i32) + (i32.store (i32.const 0) (i32.const 65530)) + (i32.load (i32.const 0)) ;; load the written stuff + ) + (func $f3 (result i32) + (i32.load (i32.const 10964)) ;; load the 'hell' + ) + (func $f4 (result i32) + (i32.add + (call_indirect (type $i) (i32.const 3)) + (call_indirect (type $i) (i32.const 0)) + ) + ) +) + diff --git a/src/binaryen/test/reduce/memory_table.wast.txt b/src/binaryen/test/reduce/memory_table.wast.txt new file mode 100644 index 0000000000..c8a265b1b5 --- /dev/null +++ b/src/binaryen/test/reduce/memory_table.wast.txt @@ -0,0 +1,36 @@ +(module + (type $0 (func (result i32))) + (type $1 (func)) + (table 481 481 anyfunc) + (elem (i32.const 0) $1 $1 $1 $3) + (memory $0 256 256) + (export "f1" (func $2)) + (export "f2" (func $3)) + (export "f4" (func $0)) + (func $0 (; 0 ;) (type $0) (result i32) + (i32.add + (call_indirect (type $0) + (i32.const 3) + ) + (call_indirect (type $0) + (i32.const 0) + ) + ) + ) + (func $1 (; 1 ;) (type $0) (result i32) + (i32.const 1234) + ) + (func $2 (; 2 ;) (type $1) + (nop) + ) + (func $3 (; 3 ;) (type $0) (result i32) + (i32.store + (i32.const 0) + (i32.const 65530) + ) + (i32.load + (i32.const 0) + ) + ) +) + diff --git a/src/binaryen/test/reduce/simple.wast b/src/binaryen/test/reduce/simple.wast new file mode 100644 index 0000000000..e544241908 --- /dev/null +++ b/src/binaryen/test/reduce/simple.wast @@ -0,0 +1,15 @@ +(module + (export "x" (func $x)) + (func $x (result i32) + (nop) + (nop) + (nop) + (drop (i32.const 1234)) + (i32.const 5678) ;; easily reducible + ) + (func $not-exported + (nop) + (unreachable) + ) +) + diff --git a/src/binaryen/test/reduce/simple.wast.txt b/src/binaryen/test/reduce/simple.wast.txt new file mode 100644 index 0000000000..9c162a7a6b --- /dev/null +++ b/src/binaryen/test/reduce/simple.wast.txt @@ -0,0 +1,9 @@ +(module + (type $0 (func (result i32))) + (memory $0 0) + (export "x" (func $0)) + (func $0 (; 0 ;) (type $0) (result i32) + (i32.const 5678) + ) +) + diff --git a/src/binaryen/test/reg_switch.wast b/src/binaryen/test/reg_switch.wast new file mode 100644 index 0000000000..3bae4683d4 --- /dev/null +++ b/src/binaryen/test/reg_switch.wast @@ -0,0 +1,14 @@ +(module + (type $0 (func)) + (memory $0 0) + (func $0 (type $0) + (if + (i32.const 0) + (block $A + (br_table $A + (i32.const 0) + ) + ) + ) + ) +) diff --git a/src/binaryen/test/reg_switch.wast.from-wast b/src/binaryen/test/reg_switch.wast.from-wast new file mode 100644 index 0000000000..e6f3d0960b --- /dev/null +++ b/src/binaryen/test/reg_switch.wast.from-wast @@ -0,0 +1,14 @@ +(module + (type $0 (func)) + (memory $0 0) + (func $0 (; 0 ;) (type $0) + (if + (i32.const 0) + (block $A + (br_table $A + (i32.const 0) + ) + ) + ) + ) +) diff --git a/src/binaryen/test/reg_switch.wast.fromBinary b/src/binaryen/test/reg_switch.wast.fromBinary new file mode 100644 index 0000000000..bd09d1dd8e --- /dev/null +++ b/src/binaryen/test/reg_switch.wast.fromBinary @@ -0,0 +1,15 @@ +(module + (type $0 (func)) + (memory $0 0) + (func $0 (; 0 ;) (type $0) + (if + (i32.const 0) + (block $label$2 + (br_table $label$2 + (i32.const 0) + ) + ) + ) + ) +) + diff --git a/src/binaryen/test/reg_switch.wast.fromBinary.noDebugInfo b/src/binaryen/test/reg_switch.wast.fromBinary.noDebugInfo new file mode 100644 index 0000000000..bd09d1dd8e --- /dev/null +++ b/src/binaryen/test/reg_switch.wast.fromBinary.noDebugInfo @@ -0,0 +1,15 @@ +(module + (type $0 (func)) + (memory $0 0) + (func $0 (; 0 ;) (type $0) + (if + (i32.const 0) + (block $label$2 + (br_table $label$2 + (i32.const 0) + ) + ) + ) + ) +) + diff --git a/src/binaryen/test/revision b/src/binaryen/test/revision new file mode 100644 index 0000000000..b72cde812e --- /dev/null +++ b/src/binaryen/test/revision @@ -0,0 +1 @@ +13645 diff --git a/src/binaryen/test/s2wasm_known_binaryen_shell_test_failures.txt b/src/binaryen/test/s2wasm_known_binaryen_shell_test_failures.txt new file mode 100644 index 0000000000..328efba2a9 --- /dev/null +++ b/src/binaryen/test/s2wasm_known_binaryen_shell_test_failures.txt @@ -0,0 +1,151 @@ +# [trap final > memory] +20010915-1.c.s.wast +20020413-1.c.s.wast +20021120-3.c.s.wast +20030221-1.c.s.wast +20031012-1.c.s.wast +20041214-1.c.s.wast +20050502-1.c.s.wast +20050502-2.c.s.wast +20070201-1.c.s.wast +20071030-1.c.s.wast +20080502-1.c.s.wast +20100708-1.c.s.wast +20121108-1.c.s.wast +920501-8.c.s.wast +920501-9.c.s.wast +920726-1.c.s.wast +930513-1.c.s.wast +980605-1.c.s.wast +990513-1.c.s.wast +bitfld-5.c.s.wast +memcpy-1.c.s.wast +multi-ix.c.s.wast +pr37573.c.s.wast +pr43236.c.s.wast +pr44852.c.s.wast +pr51933.c.s.wast +pr54471.c.s.wast +pr56205.c.s.wast +pr56866.c.s.wast +pr56982.c.s.wast +pr57130.c.s.wast +stdarg-1.c.s.wast +stdarg-2.c.s.wast +string-opt-17.c.s.wast +struct-ret-1.c.s.wast +va-arg-2.c.s.wast +va-arg-5.c.s.wast +va-arg-6.c.s.wast +va-arg-9.c.s.wast + +# [trap offset > memory] +complex-7.c.s.wast + +# abort called: the tests are self-validating and call abort when they detect a +# failure. This may not be binaryen's fault (the toolchain may be emitting bad +# code) but it could be binaryen's fault. +20030125-1.c.s.wast +920612-1.c.s.wast +920625-1.c.s.wast +920711-1.c.s.wast +931004-10.c.s.wast +931004-12.c.s.wast +931004-14.c.s.wast +931004-6.c.s.wast +bcp-1.c.s.wast +bitfld-3.c.s.wast +builtin-constant.c.s.wast +eeprof-1.c.s.wast +pr22493-1.c.s.wast +pr32244-1.c.s.wast +pr34971.c.s.wast +pr38151.c.s.wast +pr44575.c.s.wast +stdarg-3.c.s.wast +strct-stdarg-1.c.s.wast +strct-varg-1.c.s.wast +va-arg-pack-1.c.s.wast + +# callImport: the toolchain needs to properly use libc and a runtime. These +# aren't binaryen's fault. +20000910-2.c.s.wast # strchr +20000914-1.c.s.wast # malloc +20011024-1.c.s.wast # strcmp +20020406-1.c.s.wast # malloc +20021011-1.c.s.wast # strcmp +20031204-1.c.s.wast # strcmp +20050218-1.c.s.wast # strlen +20050826-1.c.s.wast # memset +20051113-1.c.s.wast # malloc +20060412-1.c.s.wast # memset +20071018-1.c.s.wast # __builtin_malloc +20071120-1.c.s.wast # __builtin_malloc +20071202-1.c.s.wast # memcpy +20081218-1.c.s.wast # memset +20101011-1.c.s.wast # signal +921117-1.c.s.wast # strcmp +941014-2.c.s.wast # malloc +960215-1.c.s.wast # __addtf3 +960405-1.c.s.wast # __eqtf2 +960521-1.c.s.wast # malloc +980506-3.c.s.wast # memset +980707-1.c.s.wast # strcmp +980709-1.c.s.wast # pow +990628-1.c.s.wast # malloc +991112-1.c.s.wast # isprint +align-2.c.s.wast # __eqtf2 +builtin-bitops-1.c.s.wast # __builtin_clrsb +complex-5.c.s.wast # __divsc3 +ipa-sra-2.c.s.wast # calloc +loop-2f.c.s.wast # open +loop-2g.c.s.wast # open +memcpy-2.c.s.wast # memset +memcpy-bi.c.s.wast # memcpy +memset-1.c.s.wast # memset +memset-3.c.s.wast # memset +pr28982b.c.s.wast # memset +pr33870-1.c.s.wast # memset +pr33870.c.s.wast # memset +pr34456.c.s.wast # qsort +pr36038.c.s.wast # memcpy +pr36093.c.s.wast # memset +pr36765.c.s.wast # __builtin_malloc +pr39228.c.s.wast # __builtin_isinff +pr41395-1.c.s.wast # malloc +pr41395-2.c.s.wast # malloc +pr41463.c.s.wast # malloc +pr43008.c.s.wast # __builtin_malloc +pr43784.c.s.wast # memcpy +pr47237.c.s.wast # __builtin_apply_args +pr47337.c.s.wast # strcmp +pr49218.c.s.wast # __fixsfti +pr53688.c.s.wast # memset +pr58419.c.s.wast # getpid +pr59229.c.s.wast # memcpy +printf-1.c.s.wast # isprint +printf-chk-1.c.s.wast # vprintf +regstack-1.c.s.wast # __addtf3 +strcmp-1.c.s.wast # strcmp +strcpy-1.c.s.wast # memset +string-opt-5.c.s.wast # strlen +strlen-1.c.s.wast # strlen +strncmp-1.c.s.wast # strcmp +va-arg-10.c.s.wast # strlen +va-arg-22.c.s.wast # memcpy +va-arg-21.c.s.wast # malloc +vprintf-chk-1.c.s.wast # vprintf +vprintf-1.c.s.wast # vprintf +fprintf-1.c.s.wast # stdout +fprintf-chk-1.c.s.wast # stdout +vfprintf-1.c.s.wast # stdout +vfprintf-chk-1.c.s.wast # stdout + +# Results of signed integer overflow are undefined in C, so don't care. +# 'clang -O2' runs -instcombine pass that does these transformations: +# > add nsw x, INT_MIN -> or x, INT_MIN +# > add nuw x, INT_MIN -> xor x, INT_MIN +# which makes the tests below fail. +20040409-1.c.s.wast # abort() +20040409-2.c.s.wast # abort() +20040409-3.c.s.wast # abort() diff --git a/src/binaryen/test/s2wasm_known_gcc_test_failures.txt b/src/binaryen/test/s2wasm_known_gcc_test_failures.txt new file mode 100644 index 0000000000..496893ef7b --- /dev/null +++ b/src/binaryen/test/s2wasm_known_gcc_test_failures.txt @@ -0,0 +1,9 @@ +# Expected failures from running s2wasm on the linked GCC torture test output +# files. + +# Block address taken. +20071220-1.c.s +20071220-2.c.s + +# Call has wrong number of parameters for function declaration. +pr44942.c.s diff --git a/src/binaryen/test/segment-overlap.wast b/src/binaryen/test/segment-overlap.wast new file mode 100644 index 0000000000..dce86fd882 --- /dev/null +++ b/src/binaryen/test/segment-overlap.wast @@ -0,0 +1,6 @@ +(module + (memory $0 10) + (data (i32.const 100) "\ff\ff\ff\ff\ff\ff\ff\ff") ;; overlaps with the next + (data (i32.const 104) "\00\00\00\00") +) + diff --git a/src/binaryen/test/segment-overlap.wast.from-wast b/src/binaryen/test/segment-overlap.wast.from-wast new file mode 100644 index 0000000000..fbc15a9e4d --- /dev/null +++ b/src/binaryen/test/segment-overlap.wast.from-wast @@ -0,0 +1,5 @@ +(module + (memory $0 10) + (data (i32.const 100) "\ff\ff\ff\ff\ff\ff\ff\ff") + (data (i32.const 104) "\00\00\00\00") +) diff --git a/src/binaryen/test/segment-overlap.wast.fromBinary b/src/binaryen/test/segment-overlap.wast.fromBinary new file mode 100644 index 0000000000..33c8fffca4 --- /dev/null +++ b/src/binaryen/test/segment-overlap.wast.fromBinary @@ -0,0 +1,6 @@ +(module + (memory $0 10) + (data (i32.const 100) "\ff\ff\ff\ff\ff\ff\ff\ff") + (data (i32.const 104) "\00\00\00\00") +) + diff --git a/src/binaryen/test/segment-overlap.wast.fromBinary.noDebugInfo b/src/binaryen/test/segment-overlap.wast.fromBinary.noDebugInfo new file mode 100644 index 0000000000..33c8fffca4 --- /dev/null +++ b/src/binaryen/test/segment-overlap.wast.fromBinary.noDebugInfo @@ -0,0 +1,6 @@ +(module + (memory $0 10) + (data (i32.const 100) "\ff\ff\ff\ff\ff\ff\ff\ff") + (data (i32.const 104) "\00\00\00\00") +) + diff --git a/src/binaryen/test/signext.wast b/src/binaryen/test/signext.wast new file mode 100644 index 0000000000..3370e9b164 --- /dev/null +++ b/src/binaryen/test/signext.wast @@ -0,0 +1,12 @@ +(module + (type $0 (func)) + (func $signext (type $0) + (local $0 i32) + (local $1 i64) + (drop (i32.extend8_s (get_local $0))) + (drop (i32.extend16_s (get_local $0))) + (drop (i64.extend8_s (get_local $1))) + (drop (i64.extend16_s (get_local $1))) + (drop (i64.extend32_s (get_local $1))) + ) +) diff --git a/src/binaryen/test/signext.wast.from-wast b/src/binaryen/test/signext.wast.from-wast new file mode 100644 index 0000000000..0256c06ff0 --- /dev/null +++ b/src/binaryen/test/signext.wast.from-wast @@ -0,0 +1,33 @@ +(module + (type $0 (func)) + (memory $0 0) + (func $signext (; 0 ;) (type $0) + (local $0 i32) + (local $1 i64) + (drop + (i32.extend8_s + (get_local $0) + ) + ) + (drop + (i32.extend16_s + (get_local $0) + ) + ) + (drop + (i64.extend8_s + (get_local $1) + ) + ) + (drop + (i64.extend16_s + (get_local $1) + ) + ) + (drop + (i64.extend32_s + (get_local $1) + ) + ) + ) +) diff --git a/src/binaryen/test/signext.wast.fromBinary b/src/binaryen/test/signext.wast.fromBinary new file mode 100644 index 0000000000..acd40f0212 --- /dev/null +++ b/src/binaryen/test/signext.wast.fromBinary @@ -0,0 +1,34 @@ +(module + (type $0 (func)) + (memory $0 0) + (func $signext (; 0 ;) (type $0) + (local $var$0 i32) + (local $var$1 i64) + (drop + (i32.extend8_s + (get_local $var$0) + ) + ) + (drop + (i32.extend16_s + (get_local $var$0) + ) + ) + (drop + (i64.extend8_s + (get_local $var$1) + ) + ) + (drop + (i64.extend16_s + (get_local $var$1) + ) + ) + (drop + (i64.extend32_s + (get_local $var$1) + ) + ) + ) +) + diff --git a/src/binaryen/test/signext.wast.fromBinary.noDebugInfo b/src/binaryen/test/signext.wast.fromBinary.noDebugInfo new file mode 100644 index 0000000000..cbbf4350f2 --- /dev/null +++ b/src/binaryen/test/signext.wast.fromBinary.noDebugInfo @@ -0,0 +1,34 @@ +(module + (type $0 (func)) + (memory $0 0) + (func $0 (; 0 ;) (type $0) + (local $var$0 i32) + (local $var$1 i64) + (drop + (i32.extend8_s + (get_local $var$0) + ) + ) + (drop + (i32.extend16_s + (get_local $var$0) + ) + ) + (drop + (i64.extend8_s + (get_local $var$1) + ) + ) + (drop + (i64.extend16_s + (get_local $var$1) + ) + ) + (drop + (i64.extend32_s + (get_local $var$1) + ) + ) + ) +) + diff --git a/src/binaryen/test/spec/Contributing.md b/src/binaryen/test/spec/Contributing.md new file mode 100644 index 0000000000..1cc607fa47 --- /dev/null +++ b/src/binaryen/test/spec/Contributing.md @@ -0,0 +1,8 @@ +# Contributing to WebAssembly + +Interested in participating? Please follow +[the same contributing guidelines as the design repository][]. + + [the same contributing guidelines as the design repository]: https://github.com/WebAssembly/design/blob/master/Contributing.md + +Also, please be sure to read [the README.md](README.md) for this repository. diff --git a/src/binaryen/test/spec/LICENSE b/src/binaryen/test/spec/LICENSE new file mode 100644 index 0000000000..8f71f43fee --- /dev/null +++ b/src/binaryen/test/spec/LICENSE @@ -0,0 +1,202 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/src/binaryen/test/spec/README.md b/src/binaryen/test/spec/README.md new file mode 100644 index 0000000000..2548cd3d7d --- /dev/null +++ b/src/binaryen/test/spec/README.md @@ -0,0 +1,2 @@ +This repository holds a mirror of the spec testsuite which is maintained +[here](https://github.com/WebAssembly/spec/tree/master/ml-proto/test). diff --git a/src/binaryen/test/spec/address-offset-range.fail.wast b/src/binaryen/test/spec/address-offset-range.fail.wast new file mode 100644 index 0000000000..127327a260 --- /dev/null +++ b/src/binaryen/test/spec/address-offset-range.fail.wast @@ -0,0 +1,4 @@ +(module + (memory 1) + (func $bad (drop (i32.load offset=4294967296 (i32.const 0)))) +) diff --git a/src/binaryen/test/spec/address.wast b/src/binaryen/test/spec/address.wast new file mode 100644 index 0000000000..4f8e349828 --- /dev/null +++ b/src/binaryen/test/spec/address.wast @@ -0,0 +1,34 @@ +(module + (import "spectest" "print" (func $print (param i32))) + + (memory 1) + (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz") + + (func (export "good") (param $i i32) + (call $print (i32.load8_u offset=0 (get_local $i))) ;; 97 'a' + (call $print (i32.load8_u offset=1 (get_local $i))) ;; 98 'b' + (call $print (i32.load8_u offset=2 (get_local $i))) ;; 99 'c' + (call $print (i32.load8_u offset=25 (get_local $i))) ;; 122 'z' + + (call $print (i32.load16_u offset=0 (get_local $i))) ;; 25185 'ab' + (call $print (i32.load16_u align=1 (get_local $i))) ;; 25185 'ab' + (call $print (i32.load16_u offset=1 align=1 (get_local $i))) ;; 25442 'bc' + (call $print (i32.load16_u offset=2 (get_local $i))) ;; 25699 'cd' + (call $print (i32.load16_u offset=25 align=1 (get_local $i))) ;; 122 'z\0' + + (call $print (i32.load offset=0 (get_local $i))) ;; 1684234849 'abcd' + (call $print (i32.load offset=1 align=1 (get_local $i))) ;; 1701077858 'bcde' + (call $print (i32.load offset=2 align=2 (get_local $i))) ;; 1717920867 'cdef' + (call $print (i32.load offset=25 align=1 (get_local $i))) ;; 122 'z\0\0\0' + ) + + (func (export "bad") (param $i i32) + (drop (i32.load offset=4294967295 (get_local $i))) + ) +) + +(invoke "good" (i32.const 0)) +(invoke "good" (i32.const 65507)) +(assert_trap (invoke "good" (i32.const 65508)) "out of bounds memory access") +(assert_trap (invoke "bad" (i32.const 0)) "out of bounds memory access") +(assert_trap (invoke "bad" (i32.const 1)) "out of bounds memory access") diff --git a/src/binaryen/test/spec/binary.wast b/src/binaryen/test/spec/binary.wast new file mode 100644 index 0000000000..07fc114a9b --- /dev/null +++ b/src/binaryen/test/spec/binary.wast @@ -0,0 +1,15 @@ +(module "\00asm\0c\00\00\00") +(module "\00asm" "\0c\00\00\00") +(module $M1 "\00asm\0c\00\00\00") +(module $M2 "\00asm" "\0c\00\00\00") + +(assert_malformed (module "") "unexpected end") +(assert_malformed (module "\01") "unexpected end") +(assert_malformed (module "\00as") "unexpected end") +(assert_malformed (module "\01") "unexpected end") +(assert_malformed (module "asm\00") "magic header not detected") + +(assert_malformed (module "\00asm") "unexpected end") +(assert_malformed (module "\00asm\0c") "unexpected end") +(assert_malformed (module "\00asm\0c\00\00") "unexpected end") +(assert_malformed (module "\00asm\10\00\00\00") "unknown binary version") diff --git a/src/binaryen/test/spec/block.wast b/src/binaryen/test/spec/block.wast new file mode 100644 index 0000000000..389a71a376 --- /dev/null +++ b/src/binaryen/test/spec/block.wast @@ -0,0 +1,284 @@ +;; Test `block` operator + +(module + ;; Auxiliary definition + (func $dummy) + + (func (export "empty") + (block) + (block $l) + ) + + (func (export "singular") (result i32) + (block (nop)) + (block i32 (i32.const 7)) + ) + + (func (export "multi") (result i32) + (block (call $dummy) (call $dummy) (call $dummy) (call $dummy)) + (block i32 (call $dummy) (call $dummy) (call $dummy) (i32.const 8)) + ) + + (func (export "nested") (result i32) + (block i32 + (block (call $dummy) (block) (nop)) + (block i32 (call $dummy) (i32.const 9)) + ) + ) + + (func (export "deep") (result i32) + (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 + (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 + (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 + (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 + (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 + (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 + (block i32 (block i32 (call $dummy) (i32.const 150))) + )))))) + )))))) + )))))) + )))))) + )))))) + )))))) + ) + + (func (export "as-unary-operand") (result i32) + (i32.ctz (block i32 (call $dummy) (i32.const 13))) + ) + (func (export "as-binary-operand") (result i32) + (i32.mul + (block i32 (call $dummy) (i32.const 3)) + (block i32 (call $dummy) (i32.const 4)) + ) + ) + (func (export "as-test-operand") (result i32) + (i32.eqz (block i32 (call $dummy) (i32.const 13))) + ) + (func (export "as-compare-operand") (result i32) + (f32.gt + (block f32 (call $dummy) (f32.const 3)) + (block f32 (call $dummy) (f32.const 3)) + ) + ) + + (func (export "break-bare") (result i32) + (block (br 0) (unreachable)) + (block (br_if 0 (i32.const 1)) (unreachable)) + (block (br_table 0 (i32.const 0)) (unreachable)) + (block (br_table 0 0 0 (i32.const 1)) (unreachable)) + (i32.const 19) + ) + (func (export "break-value") (result i32) + (block i32 (br 0 (i32.const 18)) (i32.const 19)) + ) + (func (export "break-repeated") (result i32) + (block i32 + (br 0 (i32.const 18)) + (br 0 (i32.const 19)) + (drop (br_if 0 (i32.const 20) (i32.const 0))) + (drop (br_if 0 (i32.const 20) (i32.const 1))) + (br 0 (i32.const 21)) + (br_table 0 (i32.const 22) (i32.const 4)) + (br_table 0 0 0 (i32.const 23) (i32.const 1)) + (i32.const 21) + ) + ) + (func (export "break-inner") (result i32) + (local i32) + (set_local 0 (i32.const 0)) + (set_local 0 (i32.add (get_local 0) (block i32 (block i32 (br 1 (i32.const 0x1)))))) + (set_local 0 (i32.add (get_local 0) (block i32 (block (br 0)) (i32.const 0x2)))) + (set_local 0 + (i32.add (get_local 0) (block i32 (i32.ctz (br 0 (i32.const 0x4))))) + ) + (set_local 0 + (i32.add (get_local 0) (block i32 (i32.ctz (block i32 (br 1 (i32.const 0x8)))))) + ) + (get_local 0) + ) + + (func (export "effects") (result i32) + (local i32) + (block + (set_local 0 (i32.const 1)) + (set_local 0 (i32.mul (get_local 0) (i32.const 3))) + (set_local 0 (i32.sub (get_local 0) (i32.const 5))) + (set_local 0 (i32.mul (get_local 0) (i32.const 7))) + (br 0) + (set_local 0 (i32.mul (get_local 0) (i32.const 100))) + ) + (i32.eq (get_local 0) (i32.const -14)) + ) +) + +(assert_return (invoke "empty")) +(assert_return (invoke "singular") (i32.const 7)) +(assert_return (invoke "multi") (i32.const 8)) +(assert_return (invoke "nested") (i32.const 9)) +(assert_return (invoke "deep") (i32.const 150)) + +(assert_return (invoke "as-unary-operand") (i32.const 0)) +(assert_return (invoke "as-binary-operand") (i32.const 12)) +(assert_return (invoke "as-test-operand") (i32.const 0)) +(assert_return (invoke "as-compare-operand") (i32.const 0)) + +(assert_return (invoke "break-bare") (i32.const 19)) +(assert_return (invoke "break-value") (i32.const 18)) +(assert_return (invoke "break-repeated") (i32.const 18)) +(assert_return (invoke "break-inner") (i32.const 0xf)) + +(assert_return (invoke "effects") (i32.const 1)) + +(assert_invalid + (module (func $type-empty-i32 (result i32) (block))) + "type mismatch" +) +(assert_invalid + (module (func $type-empty-i64 (result i64) (block))) + "type mismatch" +) +(assert_invalid + (module (func $type-empty-f32 (result f32) (block))) + "type mismatch" +) +(assert_invalid + (module (func $type-empty-f64 (result f64) (block))) + "type mismatch" +) + +(assert_invalid + (module (func $type-value-num-vs-void + (block (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-value-void-vs-num (result i32) + (block (nop)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-value-num-vs-num (result i32) + (block (f32.const 0)) + )) + "type mismatch" +) + +(; TODO(stack): soft failure +(assert_invalid + (module (func $type-value-num-vs-void-after-break + (block (br 0) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-value-void-vs-num-after-break (result i32) + (block (i32.const 1) (br 0) (nop)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-value-num-vs-num-after-break (result i32) + (block (i32.const 1) (br 0) (f32.const 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-second-void-vs-num (result i32) + (block i32 (br 0 (i32.const 1)) (br 0 (nop))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-second-num-vs-num (result i32) + (block i32 (br 0 (i32.const 1)) (br 0 (f64.const 1))) + )) + "type mismatch" +) +;) + +(assert_invalid + (module (func $type-break-last-void-vs-num (result i32) + (block i32 (br 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-void-vs-num (result i32) + (block i32 (br 0) (i32.const 1)) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-break-void-vs-num (result i32) + (block (br 0 (nop)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-num-vs-num (result i32) + (block (br 0 (i64.const 1)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-first-void-vs-num (result i32) + (block (br 0 (nop)) (br 0 (i32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-first-num-vs-num (result i32) + (block (br 0 (i64.const 1)) (br 0 (i32.const 1))) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-break-nested-num-vs-void + (block i32 (block i32 (br 1 (i32.const 1))) (br 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-nested-empty-vs-num (result i32) + (block (block (br 1)) (br 0 (i32.const 1))) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-break-nested-void-vs-num (result i32) + (block (block (br 1 (nop))) (br 0 (i32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-nested-num-vs-num (result i32) + (block (block (br 1 (i64.const 1))) (br 0 (i32.const 1))) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-break-operand-empty-vs-num (result i32) + (i32.ctz (block (br 0))) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-break-operand-void-vs-num (result i32) + (i64.ctz (block (br 0 (nop)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-operand-num-vs-num (result i32) + (i64.ctz (block (br 0 (i64.const 9)))) + )) + "type mismatch" +) + diff --git a/src/binaryen/test/spec/br.wast b/src/binaryen/test/spec/br.wast new file mode 100644 index 0000000000..2e98282a84 --- /dev/null +++ b/src/binaryen/test/spec/br.wast @@ -0,0 +1,412 @@ +;; Test `br` operator + +(module + ;; Auxiliary definition + (func $dummy) + + (func (export "type-i32") (block (drop (i32.ctz (br 0))))) + (func (export "type-i64") (block (drop (i64.ctz (br 0))))) + (func (export "type-f32") (block (drop (f32.neg (br 0))))) + (func (export "type-f64") (block (drop (f64.neg (br 0))))) + + (func (export "type-i32-value") (result i32) + (block i32 (i32.ctz (br 0 (i32.const 1)))) + ) + (func (export "type-i64-value") (result i64) + (block i64 (i64.ctz (br 0 (i64.const 2)))) + ) + (func (export "type-f32-value") (result f32) + (block f32 (f32.neg (br 0 (f32.const 3)))) + ) + (func (export "type-f64-value") (result f64) + (block f64 (f64.neg (br 0 (f64.const 4)))) + ) + + (func (export "as-block-first") + (block (br 0) (call $dummy)) + ) + (func (export "as-block-mid") + (block (call $dummy) (br 0) (call $dummy)) + ) + (func (export "as-block-last") + (block (nop) (call $dummy) (br 0)) + ) + (func (export "as-block-value") (result i32) + (block i32 (nop) (call $dummy) (br 0 (i32.const 2))) + ) + + (func (export "as-loop-first") (result i32) + (block i32 (loop i32 (br 1 (i32.const 3)) (i32.const 2))) + ) + (func (export "as-loop-mid") (result i32) + (block i32 (loop i32 (call $dummy) (br 1 (i32.const 4)) (i32.const 2))) + ) + (func (export "as-loop-last") (result i32) + (block i32 (loop i32 (nop) (call $dummy) (br 1 (i32.const 5)))) + ) + + (func (export "as-br-value") (result i32) + (block i32 (br 0 (br 0 (i32.const 9)))) + ) + + (func (export "as-br_if-cond") + (block (br_if 0 (br 0))) + ) + (func (export "as-br_if-value") (result i32) + (block i32 (br_if 0 (br 0 (i32.const 8)) (i32.const 1)) (i32.const 7)) + ) + (func (export "as-br_if-value-cond") (result i32) + (block i32 (drop (br_if 0 (i32.const 6) (br 0 (i32.const 9)))) (i32.const 7)) + ) + + (func (export "as-br_table-index") + (block (br_table 0 0 0 (br 0))) + ) + (func (export "as-br_table-value") (result i32) + (block i32 + (br_table 0 0 0 (br 0 (i32.const 10)) (i32.const 1)) (i32.const 7) + ) + ) + (func (export "as-br_table-value-index") (result i32) + (block i32 + (br_table 0 0 (i32.const 6) (br 0 (i32.const 11))) (i32.const 7) + ) + ) + + (func (export "as-return-value") (result i64) + (block i64 (return (br 0 (i64.const 7)))) + ) + + (func (export "as-if-cond") (result i32) + (block i32 (if i32 (br 0 (i32.const 2)) (i32.const 0) (i32.const 1))) + ) + (func (export "as-if-then") (param i32 i32) (result i32) + (block i32 (if i32 (get_local 0) (br 1 (i32.const 3)) (get_local 1))) + ) + (func (export "as-if-else") (param i32 i32) (result i32) + (block i32 (if i32 (get_local 0) (get_local 1) (br 1 (i32.const 4)))) + ) + + (func (export "as-select-first") (param i32 i32) (result i32) + (block i32 (select (br 0 (i32.const 5)) (get_local 0) (get_local 1))) + ) + (func (export "as-select-second") (param i32 i32) (result i32) + (block i32 (select (get_local 0) (br 0 (i32.const 6)) (get_local 1))) + ) + (func (export "as-select-cond") (result i32) + (block i32 (select (i32.const 0) (i32.const 1) (br 0 (i32.const 7)))) + ) + + (func $f (param i32 i32 i32) (result i32) (i32.const -1)) + (func (export "as-call-first") (result i32) + (block i32 (call $f (br 0 (i32.const 12)) (i32.const 2) (i32.const 3))) + ) + (func (export "as-call-mid") (result i32) + (block i32 (call $f (i32.const 1) (br 0 (i32.const 13)) (i32.const 3))) + ) + (func (export "as-call-last") (result i32) + (block i32 (call $f (i32.const 1) (i32.const 2) (br 0 (i32.const 14)))) + ) + + (type $sig (func (param i32 i32 i32) (result i32))) + (table anyfunc (elem $f)) + (func (export "as-call_indirect-func") (result i32) + (block i32 + (call_indirect (type $sig) + (br 0 (i32.const 20)) + (i32.const 1) (i32.const 2) (i32.const 3) + ) + ) + ) + (func (export "as-call_indirect-first") (result i32) + (block i32 + (call_indirect (type $sig) + (i32.const 0) + (br 0 (i32.const 21)) (i32.const 2) (i32.const 3) + ) + ) + ) + (func (export "as-call_indirect-mid") (result i32) + (block i32 + (call_indirect (type $sig) + (i32.const 0) + (i32.const 1) (br 0 (i32.const 22)) (i32.const 3) + ) + ) + ) + (func (export "as-call_indirect-last") (result i32) + (block i32 + (call_indirect (type $sig) + (i32.const 0) + (i32.const 1) (i32.const 2) (br 0 (i32.const 23)) + ) + ) + ) + + (func (export "as-set_local-value") (result i32) (local f32) + (block i32 (set_local 0 (br 0 (i32.const 17))) (i32.const -1)) + ) + + (memory 1) + (func (export "as-load-address") (result f32) + (block f32 (f32.load (br 0 (f32.const 1.7)))) + ) + (func (export "as-loadN-address") (result i64) + (block i64 (i64.load8_s (br 0 (i64.const 30)))) + ) + + (func (export "as-store-address") (result i32) + (block i32 (f64.store (br 0 (i32.const 30)) (f64.const 7)) (i32.const -1)) + ) + (func (export "as-store-value") (result i32) + (block i32 (i64.store (i32.const 2) (br 0 (i32.const 31))) (i32.const -1)) + ) + + (func (export "as-storeN-address") (result i32) + (block i32 (i32.store8 (br 0 (i32.const 32)) (i32.const 7)) (i32.const -1)) + ) + (func (export "as-storeN-value") (result i32) + (block i32 (i64.store16 (i32.const 2) (br 0 (i32.const 33))) (i32.const -1)) + ) + + (func (export "as-unary-operand") (result f32) + (block f32 (f32.neg (br 0 (f32.const 3.4)))) + ) + + (func (export "as-binary-left") (result i32) + (block i32 (i32.add (br 0 (i32.const 3)) (i32.const 10))) + ) + (func (export "as-binary-right") (result i64) + (block i64 (i64.sub (i64.const 10) (br 0 (i64.const 45)))) + ) + + (func (export "as-test-operand") (result i32) + (block i32 (i32.eqz (br 0 (i32.const 44)))) + ) + + (func (export "as-compare-left") (result i32) + (block i32 (f64.le (br 0 (i32.const 43)) (f64.const 10))) + ) + (func (export "as-compare-right") (result i32) + (block i32 (f32.ne (f32.const 10) (br 0 (i32.const 42)))) + ) + + (func (export "as-convert-operand") (result i32) + (block i32 (i32.wrap/i64 (br 0 (i32.const 41)))) + ) + + (func (export "as-grow_memory-size") (result i32) + (block i32 (grow_memory (br 0 (i32.const 40)))) + ) + + (func (export "nested-block-value") (result i32) + (i32.add + (i32.const 1) + (block i32 + (call $dummy) + (i32.add (i32.const 4) (br 0 (i32.const 8))) + ) + ) + ) + + (func (export "nested-br-value") (result i32) + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (drop + (block i32 + (drop (i32.const 4)) + (br 0 (br 1 (i32.const 8))) + ) + ) + (i32.const 16) + ) + ) + ) + + (func (export "nested-br_if-value") (result i32) + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (drop + (block i32 + (drop (i32.const 4)) + (br_if 0 (br 1 (i32.const 8)) (i32.const 1)) + (i32.const 32) + ) + ) + (i32.const 16) + ) + ) + ) + + (func (export "nested-br_if-value-cond") (result i32) + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (drop (br_if 0 (i32.const 4) (br 0 (i32.const 8)))) + (i32.const 16) + ) + ) + ) + + (func (export "nested-br_table-value") (result i32) + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (drop + (block i32 + (drop (i32.const 4)) + (br_table 0 (br 1 (i32.const 8)) (i32.const 1)) + ) + ) + (i32.const 16) + ) + ) + ) + + (func (export "nested-br_table-value-index") (result i32) + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (br_table 0 (i32.const 4) (br 0 (i32.const 8))) + (i32.const 16) + ) + ) + ) +) + +(assert_return (invoke "type-i32")) +(assert_return (invoke "type-i64")) +(assert_return (invoke "type-f32")) +(assert_return (invoke "type-f64")) + +(assert_return (invoke "type-i32-value") (i32.const 1)) +(assert_return (invoke "type-i64-value") (i64.const 2)) +(assert_return (invoke "type-f32-value") (f32.const 3)) +(assert_return (invoke "type-f64-value") (f64.const 4)) + +(assert_return (invoke "as-block-first")) +(assert_return (invoke "as-block-mid")) +(assert_return (invoke "as-block-last")) +(assert_return (invoke "as-block-value") (i32.const 2)) + +(assert_return (invoke "as-loop-first") (i32.const 3)) +(assert_return (invoke "as-loop-mid") (i32.const 4)) +(assert_return (invoke "as-loop-last") (i32.const 5)) + +(assert_return (invoke "as-br-value") (i32.const 9)) + +(assert_return (invoke "as-br_if-cond")) +(assert_return (invoke "as-br_if-value") (i32.const 8)) +(assert_return (invoke "as-br_if-value-cond") (i32.const 9)) + +(assert_return (invoke "as-br_table-index")) +(assert_return (invoke "as-br_table-value") (i32.const 10)) +(assert_return (invoke "as-br_table-value-index") (i32.const 11)) + +(assert_return (invoke "as-return-value") (i64.const 7)) + +(assert_return (invoke "as-if-cond") (i32.const 2)) +(assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) +(assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) +(assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) + +(assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) +(assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) +(assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-select-cond") (i32.const 7)) + +(assert_return (invoke "as-call-first") (i32.const 12)) +(assert_return (invoke "as-call-mid") (i32.const 13)) +(assert_return (invoke "as-call-last") (i32.const 14)) + +(assert_return (invoke "as-call_indirect-func") (i32.const 20)) +(assert_return (invoke "as-call_indirect-first") (i32.const 21)) +(assert_return (invoke "as-call_indirect-mid") (i32.const 22)) +(assert_return (invoke "as-call_indirect-last") (i32.const 23)) + +(assert_return (invoke "as-set_local-value") (i32.const 17)) + +(assert_return (invoke "as-load-address") (f32.const 1.7)) +(assert_return (invoke "as-loadN-address") (i64.const 30)) + +(assert_return (invoke "as-store-address") (i32.const 30)) +(assert_return (invoke "as-store-value") (i32.const 31)) +(assert_return (invoke "as-storeN-address") (i32.const 32)) +(assert_return (invoke "as-storeN-value") (i32.const 33)) + +(assert_return (invoke "as-unary-operand") (f32.const 3.4)) + +(assert_return (invoke "as-binary-left") (i32.const 3)) +(assert_return (invoke "as-binary-right") (i64.const 45)) + +(assert_return (invoke "as-test-operand") (i32.const 44)) + +(assert_return (invoke "as-compare-left") (i32.const 43)) +(assert_return (invoke "as-compare-right") (i32.const 42)) + +(assert_return (invoke "as-convert-operand") (i32.const 41)) + +(assert_return (invoke "as-grow_memory-size") (i32.const 40)) + +(assert_return (invoke "nested-block-value") (i32.const 9)) +(assert_return (invoke "nested-br-value") (i32.const 9)) +(assert_return (invoke "nested-br_if-value") (i32.const 9)) +(assert_return (invoke "nested-br_if-value-cond") (i32.const 9)) +(assert_return (invoke "nested-br_table-value") (i32.const 9)) +(assert_return (invoke "nested-br_table-value-index") (i32.const 9)) + +(assert_invalid + (module (func $type-arg-empty-vs-num (result i32) + (block (br 0) (i32.const 1)) + )) + "type mismatch" +) + +;; TODO(stack): move this elsewhere +(module (func $type-arg-num-vs-void + (block (drop (i32.const 0)) (br 0)) +)) + +(; TODO(stack): soft failure +(assert_invalid + (module (func $type-arg-poly-vs-empty + (block (br 0 (unreachable))) + )) + "type mismatch" +) +;) + +(assert_invalid + (module (func $type-arg-void-vs-num (result i32) + (block (br 0 (nop)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-arg-num-vs-num (result i32) + (block (br 0 (i64.const 1)) (i32.const 1)) + )) + "type mismatch" +) + +(assert_invalid + (module (func $unbound-label (br 1))) + "unknown label" +) +(assert_invalid + (module (func $unbound-nested-label (block (block (br 5))))) + "unknown label" +) +(assert_invalid + (module (func $large-label (br 0x10000001))) + "unknown label" +) diff --git a/src/binaryen/test/spec/br_if.wast b/src/binaryen/test/spec/br_if.wast new file mode 100644 index 0000000000..d115fcbc50 --- /dev/null +++ b/src/binaryen/test/spec/br_if.wast @@ -0,0 +1,306 @@ +;; Test `br_if` operator + +(module + (func $dummy) + + (func (export "as-block-first") (param i32) (result i32) + (block (br_if 0 (get_local 0)) (return (i32.const 2))) (i32.const 3) + ) + (func (export "as-block-mid") (param i32) (result i32) + (block (call $dummy) (br_if 0 (get_local 0)) (return (i32.const 2))) + (i32.const 3) + ) + (func (export "as-block-last") (param i32) + (block (call $dummy) (call $dummy) (br_if 0 (get_local 0))) + ) + (func (export "as-block-first-value") (param i32) (result i32) + (block i32 (drop (br_if 0 (i32.const 10) (get_local 0))) (return (i32.const 11))) + ) + (func (export "as-block-mid-value") (param i32) (result i32) + (block i32 (call $dummy) (drop (br_if 0 (i32.const 20) (get_local 0))) (return (i32.const 21))) + ) + (func (export "as-block-last-value") (param i32) (result i32) + (block i32 + (call $dummy) (call $dummy) (br_if 0 (i32.const 11) (get_local 0)) + ) + ) + + (func (export "as-loop-first") (param i32) (result i32) + (block (loop (br_if 1 (get_local 0)) (return (i32.const 2)))) (i32.const 3) + ) + (func (export "as-loop-mid") (param i32) (result i32) + (block (loop (call $dummy) (br_if 1 (get_local 0)) (return (i32.const 2)))) + (i32.const 4) + ) + (func (export "as-loop-last") (param i32) + (loop (call $dummy) (br_if 1 (get_local 0))) + ) + + (func (export "as-if-then") (param i32 i32) + (block (if (get_local 0) (br_if 1 (get_local 1)) (call $dummy))) + ) + (func (export "as-if-else") (param i32 i32) + (block (if (get_local 0) (call $dummy) (br_if 1 (get_local 1)))) + ) + + (func (export "nested-block-value") (param i32) (result i32) + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (i32.add + (i32.const 4) + (block i32 + (drop (br_if 1 (i32.const 8) (get_local 0))) + (i32.const 16) + ) + ) + ) + ) + ) + + (func (export "nested-br-value") (param i32) (result i32) + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (br 0 + (block i32 (drop (br_if 1 (i32.const 8) (get_local 0))) (i32.const 4)) + ) + (i32.const 16) + ) + ) + ) + + (func (export "nested-br_if-value") (param i32) (result i32) + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (drop (br_if 0 + (block i32 (drop (br_if 1 (i32.const 8) (get_local 0))) (i32.const 4)) + (i32.const 1) + )) + (i32.const 16) + ) + ) + ) + + (func (export "nested-br_if-value-cond") (param i32) (result i32) + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (drop (br_if 0 + (i32.const 4) + (block i32 (drop (br_if 1 (i32.const 8) (get_local 0))) (i32.const 1)) + )) + (i32.const 16) + ) + ) + ) + + (func (export "nested-br_table-value") (param i32) (result i32) + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (br_table 0 + (block i32 (drop (br_if 1 (i32.const 8) (get_local 0))) (i32.const 4)) + (i32.const 1) + ) + (i32.const 16) + ) + ) + ) + + (func (export "nested-br_table-value-index") (param i32) (result i32) + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (br_table 0 + (i32.const 4) + (block i32 (drop (br_if 1 (i32.const 8) (get_local 0))) (i32.const 1)) + ) + (i32.const 16) + ) + ) + ) +) + +(assert_return (invoke "as-block-first" (i32.const 0)) (i32.const 2)) +(assert_return (invoke "as-block-first" (i32.const 1)) (i32.const 3)) +(assert_return (invoke "as-block-mid" (i32.const 0)) (i32.const 2)) +(assert_return (invoke "as-block-mid" (i32.const 1)) (i32.const 3)) +(assert_return (invoke "as-block-last" (i32.const 0))) +(assert_return (invoke "as-block-last" (i32.const 1))) +(assert_return (invoke "as-block-last-value" (i32.const 0)) (i32.const 11)) +(assert_return (invoke "as-block-last-value" (i32.const 1)) (i32.const 11)) + +(assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 2)) +(assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 3)) +(assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 2)) +(assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 4)) +(assert_return (invoke "as-loop-last" (i32.const 0))) +(assert_return (invoke "as-loop-last" (i32.const 1))) + +(assert_return (invoke "as-if-then" (i32.const 0) (i32.const 0))) +(assert_return (invoke "as-if-then" (i32.const 4) (i32.const 0))) +(assert_return (invoke "as-if-then" (i32.const 0) (i32.const 1))) +(assert_return (invoke "as-if-then" (i32.const 4) (i32.const 1))) +(assert_return (invoke "as-if-else" (i32.const 0) (i32.const 0))) +(assert_return (invoke "as-if-else" (i32.const 3) (i32.const 0))) +(assert_return (invoke "as-if-else" (i32.const 0) (i32.const 1))) +(assert_return (invoke "as-if-else" (i32.const 3) (i32.const 1))) + +(assert_return (invoke "nested-block-value" (i32.const 0)) (i32.const 21)) +(assert_return (invoke "nested-block-value" (i32.const 1)) (i32.const 9)) +(assert_return (invoke "nested-br-value" (i32.const 0)) (i32.const 5)) +(assert_return (invoke "nested-br-value" (i32.const 1)) (i32.const 9)) +(assert_return (invoke "nested-br_if-value" (i32.const 0)) (i32.const 5)) +(assert_return (invoke "nested-br_if-value" (i32.const 1)) (i32.const 9)) +(assert_return (invoke "nested-br_if-value-cond" (i32.const 0)) (i32.const 5)) +(assert_return (invoke "nested-br_if-value-cond" (i32.const 1)) (i32.const 9)) +(assert_return (invoke "nested-br_table-value" (i32.const 0)) (i32.const 5)) +(assert_return (invoke "nested-br_table-value" (i32.const 1)) (i32.const 9)) +(assert_return (invoke "nested-br_table-value-index" (i32.const 0)) (i32.const 5)) +(assert_return (invoke "nested-br_table-value-index" (i32.const 1)) (i32.const 9)) + +(assert_invalid + (module (func $type-false-i32 (block (i32.ctz (br_if 0 (i32.const 0)))))) + "type mismatch" +) +(assert_invalid + (module (func $type-false-i64 (block (i64.ctz (br_if 0 (i32.const 0)))))) + "type mismatch" +) +(assert_invalid + (module (func $type-false-f32 (block (f32.neg (br_if 0 (i32.const 0)))))) + "type mismatch" +) +(assert_invalid + (module (func $type-false-f64 (block (f64.neg (br_if 0 (i32.const 0)))))) + "type mismatch" +) + +(assert_invalid + (module (func $type-true-i32 (block (i32.ctz (br_if 0 (i32.const 1)))))) + "type mismatch" +) +(assert_invalid + (module (func $type-true-i64 (block (i64.ctz (br_if 0 (i64.const 1)))))) + "type mismatch" +) +(assert_invalid + (module (func $type-true-f32 (block (f32.neg (br_if 0 (f32.const 1)))))) + "type mismatch" +) +(assert_invalid + (module (func $type-true-f64 (block (f64.neg (br_if 0 (i64.const 1)))))) + "type mismatch" +) + +(assert_invalid + (module (func $type-false-arg-void-vs-num (result i32) + (block i32 (br_if 0 (i32.const 0)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-true-arg-void-vs-num (result i32) + (block i32 (br_if 0 (i32.const 1)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-false-arg-num-vs-void + (block (br_if 0 (i32.const 0) (i32.const 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-true-arg-num-vs-void + (block (br_if 0 (i32.const 0) (i32.const 1))) + )) + "type mismatch" +) + +(; TODO(stack): soft failure +(assert_invalid + (module (func $type-false-arg-poly-vs-empty + (block (br_if 0 (unreachable) (i32.const 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-true-arg-poly-vs-empty + (block (br_if 0 (unreachable) (i32.const 1))) + )) + "type mismatch" +) +;) + +(assert_invalid + (module (func $type-false-arg-void-vs-num (result i32) + (block i32 (br_if 0 (nop) (i32.const 0)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-true-arg-void-vs-num (result i32) + (block i32 (br_if 0 (nop) (i32.const 1)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-false-arg-num-vs-num (result i32) + (block i32 (drop (br_if 0 (i64.const 1) (i32.const 0))) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-true-arg-num-vs-num (result i32) + (block i32 (drop (br_if 0 (i64.const 1) (i32.const 0))) (i32.const 1)) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-cond-void-vs-i32 + (block (br_if 0 (nop))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-cond-num-vs-i32 + (block (br_if 0 (i64.const 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-arg-cond-void-vs-i32 (result i32) + (block i32 (br_if 0 (i32.const 0) (nop)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-arg-cond-num-vs-i32 (result i32) + (block i32 (br_if 0 (i32.const 0) (i64.const 0)) (i32.const 1)) + )) + "type mismatch" +) + +(assert_invalid + (module (func $unbound-label (br_if 1 (i32.const 1)))) + "unknown label" +) +(assert_invalid + (module (func $unbound-nested-label (block (block (br_if 5 (i32.const 1)))))) + "unknown label" +) +(assert_invalid + (module (func $large-label (br_if 0x10000001 (i32.const 1)))) + "unknown label" +) + diff --git a/src/binaryen/test/spec/br_table.wast b/src/binaryen/test/spec/br_table.wast new file mode 100644 index 0000000000..3a305f43db --- /dev/null +++ b/src/binaryen/test/spec/br_table.wast @@ -0,0 +1,1469 @@ +;; Test `br_table` operator + +(module + ;; Auxiliary definition + (func $dummy) + + (func (export "type-i32") + (block (drop (i32.ctz (br_table 0 0 (i32.const 0))))) + ) + (func (export "type-i64") + (block (drop (i64.ctz (br_table 0 0 (i32.const 0))))) + ) + (func (export "type-f32") + (block (drop (f32.neg (br_table 0 0 (i32.const 0))))) + ) + (func (export "type-f64") + (block (drop (f64.neg (br_table 0 0 (i32.const 0))))) + ) + + (func (export "type-i32-value") (result i32) + (block i32 (i32.ctz (br_table 0 0 (i32.const 1) (i32.const 0)))) + ) + (func (export "type-i64-value") (result i64) + (block i64 (i64.ctz (br_table 0 0 (i64.const 2) (i32.const 0)))) + ) + (func (export "type-f32-value") (result f32) + (block f32 (f32.neg (br_table 0 0 (f32.const 3) (i32.const 0)))) + ) + (func (export "type-f64-value") (result f64) + (block f64 (f64.neg (br_table 0 0 (f64.const 4) (i32.const 0)))) + ) + + (func (export "empty") (param i32) (result i32) + (block (br_table 0 (get_local 0)) (return (i32.const 21))) + (i32.const 22) + ) + (func (export "empty-value") (param i32) (result i32) + (block i32 (br_table 0 (i32.const 33) (get_local 0)) (i32.const 31)) + ) + + (func (export "singleton") (param i32) (result i32) + (block + (block + (br_table 1 0 (get_local 0)) + (return (i32.const 21)) + ) + (return (i32.const 20)) + ) + (i32.const 22) + ) + + (func (export "singleton-value") (param i32) (result i32) + (block i32 + (drop + (block i32 + (br_table 0 1 (i32.const 33) (get_local 0)) + (return (i32.const 31)) + ) + ) + (i32.const 32) + ) + ) + + (func (export "multiple") (param i32) (result i32) + (block + (block + (block + (block + (block + (br_table 3 2 1 0 4 (get_local 0)) + (return (i32.const 99)) + ) + (return (i32.const 100)) + ) + (return (i32.const 101)) + ) + (return (i32.const 102)) + ) + (return (i32.const 103)) + ) + (i32.const 104) + ) + + (func (export "multiple-value") (param i32) (result i32) + (local i32) + (set_local 1 (block i32 + (set_local 1 (block i32 + (set_local 1 (block i32 + (set_local 1 (block i32 + (set_local 1 (block i32 + (br_table 3 2 1 0 4 (i32.const 200) (get_local 0)) + (return (i32.add (get_local 1) (i32.const 99))) + )) + (return (i32.add (get_local 1) (i32.const 10))) + )) + (return (i32.add (get_local 1) (i32.const 11))) + )) + (return (i32.add (get_local 1) (i32.const 12))) + )) + (return (i32.add (get_local 1) (i32.const 13))) + )) + (i32.add (get_local 1) (i32.const 14)) + ) + + (func (export "large") (param i32) (result i32) + (block + (block + (br_table + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + (get_local 0) + ) + (return (i32.const -1)) + ) + (return (i32.const 0)) + ) + (return (i32.const 1)) + ) + + (func (export "as-block-first") + (block (br_table 0 0 0 (i32.const 0)) (call $dummy)) + ) + (func (export "as-block-mid") + (block (call $dummy) (br_table 0 0 0 (i32.const 0)) (call $dummy)) + ) + (func (export "as-block-last") + (block (nop) (call $dummy) (br_table 0 0 0 (i32.const 0))) + ) + (func (export "as-block-value") (result i32) + (block i32 (nop) (call $dummy) (br_table 0 0 0 (i32.const 2) (i32.const 0))) + ) + + (func (export "as-loop-first") (result i32) + (loop i32 (br_table 1 1 (i32.const 3) (i32.const 0)) (i32.const 1)) + ) + (func (export "as-loop-mid") (result i32) + (loop i32 + (call $dummy) + (br_table 1 1 1 (i32.const 4) (i32.const -1)) + (i32.const 2) + ) + ) + (func (export "as-loop-last") (result i32) + (loop i32 (nop) (call $dummy) (br_table 1 1 1 (i32.const 5) (i32.const 1))) + ) + + (func (export "as-br-value") (result i32) + (block i32 (br 0 (br 0 (i32.const 9)))) + ) + + (func (export "as-br_if-cond") + (block (br_if 0 (br_table 0 0 0 (i32.const 1)))) + ) + (func (export "as-br_if-value") (result i32) + (block i32 + (br_if 0 (br_table 0 (i32.const 8) (i32.const 0)) (i32.const 1)) + (i32.const 7) + ) + ) + (func (export "as-br_if-value-cond") (result i32) + (block i32 + (drop (br_if 0 (i32.const 6) (br_table 0 0 (i32.const 9) (i32.const 0)))) + (i32.const 7) + ) + ) + + (func (export "as-br_table-index") + (block (br_table 0 0 0 (br_table 0 (i32.const 1)))) + ) + (func (export "as-br_table-value") (result i32) + (block i32 + (br_table 0 0 0 (br_table 0 (i32.const 10) (i32.const 0)) (i32.const 1)) + (i32.const 7) + ) + ) + (func (export "as-br_table-value-index") (result i32) + (block i32 + (br_table 0 0 (i32.const 6) (br_table 0 (i32.const 11) (i32.const 1))) + (i32.const 7) + ) + ) + + (func (export "as-return-value") (result i64) + (block i64 (return (br_table 0 (i64.const 7) (i32.const 0)))) + ) + + (func (export "as-if-cond") (result i32) + (block i32 + (if i32 + (br_table 0 (i32.const 2) (i32.const 0)) + (i32.const 0) + (i32.const 1) + ) + ) + ) + (func (export "as-if-then") (param i32 i32) (result i32) + (block i32 + (if i32 + (get_local 0) + (br_table 1 (i32.const 3) (i32.const 0)) + (get_local 1) + ) + ) + ) + (func (export "as-if-else") (param i32 i32) (result i32) + (block i32 + (if i32 + (get_local 0) + (get_local 1) + (br_table 1 0 (i32.const 4) (i32.const 0)) + ) + ) + ) + + (func (export "as-select-first") (param i32 i32) (result i32) + (block i32 + (select + (br_table 0 (i32.const 5) (i32.const 0)) (get_local 0) (get_local 1) + ) + ) + ) + (func (export "as-select-second") (param i32 i32) (result i32) + (block i32 + (select + (get_local 0) (br_table 0 (i32.const 6) (i32.const 1)) (get_local 1) + ) + ) + ) + (func (export "as-select-cond") (result i32) + (block i32 + (select + (i32.const 0) (i32.const 1) (br_table 0 (i32.const 7) (i32.const 1)) + ) + ) + ) + + (func $f (param i32 i32 i32) (result i32) (i32.const -1)) + (func (export "as-call-first") (result i32) + (block i32 + (call $f + (br_table 0 (i32.const 12) (i32.const 1)) (i32.const 2) (i32.const 3) + ) + ) + ) + (func (export "as-call-mid") (result i32) + (block i32 + (call $f + (i32.const 1) (br_table 0 (i32.const 13) (i32.const 1)) (i32.const 3) + ) + ) + ) + (func (export "as-call-last") (result i32) + (block i32 + (call $f + (i32.const 1) (i32.const 2) (br_table 0 (i32.const 14) (i32.const 1)) + ) + ) + ) + + (type $sig (func (param i32 i32 i32) (result i32))) + (table anyfunc (elem $f)) + (func (export "as-call_indirect-first") (result i32) + (block i32 + (call_indirect (type $sig) + (br_table 0 (i32.const 20) (i32.const 1)) (i32.const 1) (i32.const 2) + (i32.const 3) + ) + ) + ) + (func (export "as-call_indirect-mid") (result i32) + (block i32 + (call_indirect (type $sig) + (i32.const 0) (br_table 0 (i32.const 21) (i32.const 1)) (i32.const 2) + (i32.const 3) + ) + ) + ) + (func (export "as-call_indirect-last") (result i32) + (block i32 + (call_indirect (type $sig) + (i32.const 0) (i32.const 1) (br_table 0 (i32.const 22) (i32.const 1)) + (i32.const 3) + ) + ) + ) + (func (export "as-call_indirect-func") (result i32) + (block i32 + (call_indirect (type $sig) + (i32.const 0) (i32.const 1) (i32.const 2) + (br_table 0 (i32.const 23) (i32.const 1)) + ) + ) + ) + + (func (export "as-set_local-value") (result i32) + (local f32) + (block i32 + (set_local 0 (br_table 0 (i32.const 17) (i32.const 1))) + (i32.const -1) + ) + ) + + (memory 1) + (func (export "as-load-address") (result f32) + (block f32 (f32.load (br_table 0 (f32.const 1.7) (i32.const 1)))) + ) + (func (export "as-loadN-address") (result i64) + (block i64 (i64.load8_s (br_table 0 (i64.const 30) (i32.const 1)))) + ) + + (func (export "as-store-address") (result i32) + (block i32 + (f64.store (br_table 0 (i32.const 30) (i32.const 1)) (f64.const 7)) + (i32.const -1) + ) + ) + (func (export "as-store-value") (result i32) + (block i32 + (i64.store (i32.const 2) (br_table 0 (i32.const 31) (i32.const 1))) + (i32.const -1) + ) + ) + + (func (export "as-storeN-address") (result i32) + (block i32 + (i32.store8 (br_table 0 (i32.const 32) (i32.const 0)) (i32.const 7)) + (i32.const -1) + ) + ) + (func (export "as-storeN-value") (result i32) + (block i32 + (i64.store16 (i32.const 2) (br_table 0 (i32.const 33) (i32.const 0))) + (i32.const -1) + ) + ) + + (func (export "as-unary-operand") (result f32) + (block f32 (f32.neg (br_table 0 (f32.const 3.4) (i32.const 0)))) + ) + + (func (export "as-binary-left") (result i32) + (block i32 + (i32.add (br_table 0 0 (i32.const 3) (i32.const 0)) (i32.const 10)) + ) + ) + (func (export "as-binary-right") (result i64) + (block i64 + (i64.sub (i64.const 10) (br_table 0 (i64.const 45) (i32.const 0))) + ) + ) + + (func (export "as-test-operand") (result i32) + (block i32 (i32.eqz (br_table 0 (i32.const 44) (i32.const 0)))) + ) + + (func (export "as-compare-left") (result i32) + (block i32 + (f64.le (br_table 0 0 (i32.const 43) (i32.const 0)) (f64.const 10)) + ) + ) + (func (export "as-compare-right") (result i32) + (block i32 + (f32.ne (f32.const 10) (br_table 0 (i32.const 42) (i32.const 0))) + ) + ) + + (func (export "as-convert-operand") (result i32) + (block i32 (i32.wrap/i64 (br_table 0 (i32.const 41) (i32.const 0)))) + ) + + (func (export "as-grow_memory-size") (result i32) + (block i32 (grow_memory (br_table 0 (i32.const 40) (i32.const 0)))) + ) + + (func (export "nested-block-value") (param i32) (result i32) + (block i32 + (drop (i32.const -1)) + (i32.add + (i32.const 1) + (block i32 + (i32.add + (i32.const 2) + (block i32 + (drop (i32.const 4)) + (i32.add + (i32.const 8) + (br_table 0 1 2 (i32.const 16) (get_local 0)) + ) + ) + ) + ) + ) + ) + ) + + (func (export "nested-br-value") (param i32) (result i32) + (block i32 + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (drop + (block i32 + (drop (i32.const 4)) + (br 0 (br_table 2 1 0 (i32.const 8) (get_local 0))) + ) + ) + (i32.const 16) + ) + ) + ) + ) + + (func (export "nested-br_if-value") (param i32) (result i32) + (block i32 + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (drop + (block i32 + (drop (i32.const 4)) + (br_if 0 (br_table 0 1 2 (i32.const 8) (get_local 0)) (i32.const 1)) + (i32.const 32) + ) + ) + (i32.const 16) + ) + ) + ) + ) + + (func (export "nested-br_if-value-cond") (param i32) (result i32) + (block i32 + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (drop (br_if 0 (i32.const 4) (br_table 0 1 0 (i32.const 8) (get_local 0)))) + (i32.const 16) + ) + ) + ) + ) + + (func (export "nested-br_table-value") (param i32) (result i32) + (block i32 + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (drop + (block i32 + (drop (i32.const 4)) + (br_table 0 (br_table 0 1 2 (i32.const 8) (get_local 0)) (i32.const 1)) + (i32.const 32) + ) + ) + (i32.const 16) + ) + ) + ) + ) + + (func (export "nested-br_table-value-index") (param i32) (result i32) + (block i32 + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (br_table 0 (i32.const 4) (br_table 0 1 0 (i32.const 8) (get_local 0))) + (i32.const 16) + ) + ) + ) + ) +) + +(assert_return (invoke "type-i32")) +(assert_return (invoke "type-i64")) +(assert_return (invoke "type-f32")) +(assert_return (invoke "type-f64")) + +(assert_return (invoke "type-i32-value") (i32.const 1)) +(assert_return (invoke "type-i64-value") (i64.const 2)) +(assert_return (invoke "type-f32-value") (f32.const 3)) +(assert_return (invoke "type-f64-value") (f64.const 4)) + +(assert_return (invoke "empty" (i32.const 0)) (i32.const 22)) +(assert_return (invoke "empty" (i32.const 1)) (i32.const 22)) +(assert_return (invoke "empty" (i32.const 11)) (i32.const 22)) +(assert_return (invoke "empty" (i32.const -1)) (i32.const 22)) +(assert_return (invoke "empty" (i32.const -100)) (i32.const 22)) +(assert_return (invoke "empty" (i32.const 0xffffffff)) (i32.const 22)) + +(assert_return (invoke "empty-value" (i32.const 0)) (i32.const 33)) +(assert_return (invoke "empty-value" (i32.const 1)) (i32.const 33)) +(assert_return (invoke "empty-value" (i32.const 11)) (i32.const 33)) +(assert_return (invoke "empty-value" (i32.const -1)) (i32.const 33)) +(assert_return (invoke "empty-value" (i32.const -100)) (i32.const 33)) +(assert_return (invoke "empty-value" (i32.const 0xffffffff)) (i32.const 33)) + +(assert_return (invoke "singleton" (i32.const 0)) (i32.const 22)) +(assert_return (invoke "singleton" (i32.const 1)) (i32.const 20)) +(assert_return (invoke "singleton" (i32.const 11)) (i32.const 20)) +(assert_return (invoke "singleton" (i32.const -1)) (i32.const 20)) +(assert_return (invoke "singleton" (i32.const -100)) (i32.const 20)) +(assert_return (invoke "singleton" (i32.const 0xffffffff)) (i32.const 20)) + +(assert_return (invoke "singleton-value" (i32.const 0)) (i32.const 32)) +(assert_return (invoke "singleton-value" (i32.const 1)) (i32.const 33)) +(assert_return (invoke "singleton-value" (i32.const 11)) (i32.const 33)) +(assert_return (invoke "singleton-value" (i32.const -1)) (i32.const 33)) +(assert_return (invoke "singleton-value" (i32.const -100)) (i32.const 33)) +(assert_return (invoke "singleton-value" (i32.const 0xffffffff)) (i32.const 33)) + +(assert_return (invoke "multiple" (i32.const 0)) (i32.const 103)) +(assert_return (invoke "multiple" (i32.const 1)) (i32.const 102)) +(assert_return (invoke "multiple" (i32.const 2)) (i32.const 101)) +(assert_return (invoke "multiple" (i32.const 3)) (i32.const 100)) +(assert_return (invoke "multiple" (i32.const 4)) (i32.const 104)) +(assert_return (invoke "multiple" (i32.const 5)) (i32.const 104)) +(assert_return (invoke "multiple" (i32.const 6)) (i32.const 104)) +(assert_return (invoke "multiple" (i32.const 10)) (i32.const 104)) +(assert_return (invoke "multiple" (i32.const -1)) (i32.const 104)) +(assert_return (invoke "multiple" (i32.const 0xffffffff)) (i32.const 104)) + +(assert_return (invoke "multiple-value" (i32.const 0)) (i32.const 213)) +(assert_return (invoke "multiple-value" (i32.const 1)) (i32.const 212)) +(assert_return (invoke "multiple-value" (i32.const 2)) (i32.const 211)) +(assert_return (invoke "multiple-value" (i32.const 3)) (i32.const 210)) +(assert_return (invoke "multiple-value" (i32.const 4)) (i32.const 214)) +(assert_return (invoke "multiple-value" (i32.const 5)) (i32.const 214)) +(assert_return (invoke "multiple-value" (i32.const 6)) (i32.const 214)) +(assert_return (invoke "multiple-value" (i32.const 10)) (i32.const 214)) +(assert_return (invoke "multiple-value" (i32.const -1)) (i32.const 214)) +(assert_return (invoke "multiple-value" (i32.const 0xffffffff)) (i32.const 214)) + +(assert_return (invoke "large" (i32.const 0)) (i32.const 0)) +(assert_return (invoke "large" (i32.const 1)) (i32.const 1)) +(assert_return (invoke "large" (i32.const 100)) (i32.const 0)) +(assert_return (invoke "large" (i32.const 101)) (i32.const 1)) +(assert_return (invoke "large" (i32.const 10000)) (i32.const 0)) +(assert_return (invoke "large" (i32.const 10001)) (i32.const 1)) +(assert_return (invoke "large" (i32.const 1000000)) (i32.const 1)) +(assert_return (invoke "large" (i32.const 1000001)) (i32.const 1)) + +(assert_return (invoke "as-block-first")) +(assert_return (invoke "as-block-mid")) +(assert_return (invoke "as-block-last")) +(assert_return (invoke "as-block-value") (i32.const 2)) + +(assert_return (invoke "as-loop-first") (i32.const 3)) +(assert_return (invoke "as-loop-mid") (i32.const 4)) +(assert_return (invoke "as-loop-last") (i32.const 5)) + +(assert_return (invoke "as-br-value") (i32.const 9)) + +(assert_return (invoke "as-br_if-cond")) +(assert_return (invoke "as-br_if-value") (i32.const 8)) +(assert_return (invoke "as-br_if-value-cond") (i32.const 9)) + +(assert_return (invoke "as-br_table-index")) +(assert_return (invoke "as-br_table-value") (i32.const 10)) +(assert_return (invoke "as-br_table-value-index") (i32.const 11)) + +(assert_return (invoke "as-return-value") (i64.const 7)) + +(assert_return (invoke "as-if-cond") (i32.const 2)) +(assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) +(assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) +(assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) + +(assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) +(assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) +(assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-select-cond") (i32.const 7)) + +(assert_return (invoke "as-call-first") (i32.const 12)) +(assert_return (invoke "as-call-mid") (i32.const 13)) +(assert_return (invoke "as-call-last") (i32.const 14)) + +(assert_return (invoke "as-call_indirect-first") (i32.const 20)) +(assert_return (invoke "as-call_indirect-mid") (i32.const 21)) +(assert_return (invoke "as-call_indirect-last") (i32.const 22)) +(assert_return (invoke "as-call_indirect-func") (i32.const 23)) + +(assert_return (invoke "as-set_local-value") (i32.const 17)) + +(assert_return (invoke "as-load-address") (f32.const 1.7)) +(assert_return (invoke "as-loadN-address") (i64.const 30)) + +(assert_return (invoke "as-store-address") (i32.const 30)) +(assert_return (invoke "as-store-value") (i32.const 31)) +(assert_return (invoke "as-storeN-address") (i32.const 32)) +(assert_return (invoke "as-storeN-value") (i32.const 33)) + +(assert_return (invoke "as-unary-operand") (f32.const 3.4)) + +(assert_return (invoke "as-binary-left") (i32.const 3)) +(assert_return (invoke "as-binary-right") (i64.const 45)) + +(assert_return (invoke "as-test-operand") (i32.const 44)) + +(assert_return (invoke "as-compare-left") (i32.const 43)) +(assert_return (invoke "as-compare-right") (i32.const 42)) + +(assert_return (invoke "as-convert-operand") (i32.const 41)) + +(assert_return (invoke "as-grow_memory-size") (i32.const 40)) + +(assert_return (invoke "nested-block-value" (i32.const 0)) (i32.const 19)) +(assert_return (invoke "nested-block-value" (i32.const 1)) (i32.const 17)) +(assert_return (invoke "nested-block-value" (i32.const 2)) (i32.const 16)) +(assert_return (invoke "nested-block-value" (i32.const 10)) (i32.const 16)) +(assert_return (invoke "nested-block-value" (i32.const -1)) (i32.const 16)) +(assert_return (invoke "nested-block-value" (i32.const 100000)) (i32.const 16)) + +(assert_return (invoke "nested-br-value" (i32.const 0)) (i32.const 8)) +(assert_return (invoke "nested-br-value" (i32.const 1)) (i32.const 9)) +(assert_return (invoke "nested-br-value" (i32.const 2)) (i32.const 17)) +(assert_return (invoke "nested-br-value" (i32.const 11)) (i32.const 17)) +(assert_return (invoke "nested-br-value" (i32.const -4)) (i32.const 17)) +(assert_return (invoke "nested-br-value" (i32.const 10213210)) (i32.const 17)) + +(assert_return (invoke "nested-br_if-value" (i32.const 0)) (i32.const 17)) +(assert_return (invoke "nested-br_if-value" (i32.const 1)) (i32.const 9)) +(assert_return (invoke "nested-br_if-value" (i32.const 2)) (i32.const 8)) +(assert_return (invoke "nested-br_if-value" (i32.const 9)) (i32.const 8)) +(assert_return (invoke "nested-br_if-value" (i32.const -9)) (i32.const 8)) +(assert_return (invoke "nested-br_if-value" (i32.const 999999)) (i32.const 8)) + +(assert_return (invoke "nested-br_if-value-cond" (i32.const 0)) (i32.const 9)) +(assert_return (invoke "nested-br_if-value-cond" (i32.const 1)) (i32.const 8)) +(assert_return (invoke "nested-br_if-value-cond" (i32.const 2)) (i32.const 9)) +(assert_return (invoke "nested-br_if-value-cond" (i32.const 3)) (i32.const 9)) +(assert_return (invoke "nested-br_if-value-cond" (i32.const -1000000)) (i32.const 9)) +(assert_return (invoke "nested-br_if-value-cond" (i32.const 9423975)) (i32.const 9)) + +(assert_return (invoke "nested-br_table-value" (i32.const 0)) (i32.const 17)) +(assert_return (invoke "nested-br_table-value" (i32.const 1)) (i32.const 9)) +(assert_return (invoke "nested-br_table-value" (i32.const 2)) (i32.const 8)) +(assert_return (invoke "nested-br_table-value" (i32.const 9)) (i32.const 8)) +(assert_return (invoke "nested-br_table-value" (i32.const -9)) (i32.const 8)) +(assert_return (invoke "nested-br_table-value" (i32.const 999999)) (i32.const 8)) + +(assert_return (invoke "nested-br_table-value-index" (i32.const 0)) (i32.const 9)) +(assert_return (invoke "nested-br_table-value-index" (i32.const 1)) (i32.const 8)) +(assert_return (invoke "nested-br_table-value-index" (i32.const 2)) (i32.const 9)) +(assert_return (invoke "nested-br_table-value-index" (i32.const 3)) (i32.const 9)) +(assert_return (invoke "nested-br_table-value-index" (i32.const -1000000)) (i32.const 9)) +(assert_return (invoke "nested-br_table-value-index" (i32.const 9423975)) (i32.const 9)) + +(assert_invalid + (module (func $type-arg-void-vs-num (result i32) + (block (br_table 0 (i32.const 1)) (i32.const 1)) + )) + "type mismatch" +) + +(; TODO(stack): soft failure +(assert_invalid + (module (func $type-arg-poly-vs-empty + (block (br_table 0 (unreachable) (i32.const 1))) + )) + "type mismatch" +) +;) + +(assert_invalid + (module (func $type-arg-void-vs-num (result i32) + (block i32 (br_table 0 (nop) (i32.const 1)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-arg-num-vs-num (result i32) + (block i32 (br_table 0 0 0 (i64.const 1) (i32.const 1)) (i32.const 1)) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-index-void-vs-i32 + (block (br_table 0 0 0 (nop))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-index-num-vs-i32 + (block (br_table 0 (i64.const 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-arg-index-void-vs-i32 (result i32) + (block i32 (br_table 0 0 (i32.const 0) (nop)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-arg-index-num-vs-i32 (result i32) + (block i32 (br_table 0 0 (i32.const 0) (i64.const 0)) (i32.const 1)) + )) + "type mismatch" +) + +(assert_invalid + (module (func $unbound-label + (block (br_table 2 1 (i32.const 1))) + )) + "unknown label" +) +(assert_invalid + (module (func $unbound-nested-label + (block (block (br_table 0 5 (i32.const 1)))) + )) + "unknown label" +) +(assert_invalid + (module (func $large-label + (block (br_table 0 0x10000001 0 (i32.const 1))) + )) + "unknown label" +) + +(assert_invalid + (module (func $unbound-label-default + (block (br_table 1 2 (i32.const 1))) + )) + "unknown label" +) +(assert_invalid + (module (func $unbound-nested-label-default + (block (block (br_table 0 5 (i32.const 1)))) + )) + "unknown label" +) +(assert_invalid + (module (func $large-label-default + (block (br_table 0 0 0x10000001 (i32.const 1))) + )) + "unknown label" +) + diff --git a/src/binaryen/test/spec/break-drop.wast b/src/binaryen/test/spec/break-drop.wast new file mode 100644 index 0000000000..e10df66715 --- /dev/null +++ b/src/binaryen/test/spec/break-drop.wast @@ -0,0 +1,9 @@ +(module + (func (export "br") (block (br 0))) + (func (export "br_if") (block (br_if 0 (i32.const 1)))) + (func (export "br_table") (block (br_table 0 (i32.const 0)))) +) + +(assert_return (invoke "br")) +(assert_return (invoke "br_if")) +(assert_return (invoke "br_table")) diff --git a/src/binaryen/test/spec/call.wast b/src/binaryen/test/spec/call.wast new file mode 100644 index 0000000000..b47eba89e0 --- /dev/null +++ b/src/binaryen/test/spec/call.wast @@ -0,0 +1,233 @@ +;; Test `call` operator + +(module + ;; Auxiliary definitions + (func $const-i32 (result i32) (i32.const 0x132)) + (func $const-i64 (result i64) (i64.const 0x164)) + (func $const-f32 (result f32) (f32.const 0xf32)) + (func $const-f64 (result f64) (f64.const 0xf64)) + + (func $id-i32 (param i32) (result i32) (get_local 0)) + (func $id-i64 (param i64) (result i64) (get_local 0)) + (func $id-f32 (param f32) (result f32) (get_local 0)) + (func $id-f64 (param f64) (result f64) (get_local 0)) + + (func $f32-i32 (param f32 i32) (result i32) (get_local 1)) + (func $i32-i64 (param i32 i64) (result i64) (get_local 1)) + (func $f64-f32 (param f64 f32) (result f32) (get_local 1)) + (func $i64-f64 (param i64 f64) (result f64) (get_local 1)) + + ;; Typing + + (func (export "type-i32") (result i32) (call $const-i32)) + (func (export "type-i64") (result i64) (call $const-i64)) + (func (export "type-f32") (result f32) (call $const-f32)) + (func (export "type-f64") (result f64) (call $const-f64)) + + (func (export "type-first-i32") (result i32) (call $id-i32 (i32.const 32))) + (func (export "type-first-i64") (result i64) (call $id-i64 (i64.const 64))) + (func (export "type-first-f32") (result f32) (call $id-f32 (f32.const 1.32))) + (func (export "type-first-f64") (result f64) (call $id-f64 (f64.const 1.64))) + + (func (export "type-second-i32") (result i32) + (call $f32-i32 (f32.const 32.1) (i32.const 32)) + ) + (func (export "type-second-i64") (result i64) + (call $i32-i64 (i32.const 32) (i64.const 64)) + ) + (func (export "type-second-f32") (result f32) + (call $f64-f32 (f64.const 64) (f32.const 32)) + ) + (func (export "type-second-f64") (result f64) + (call $i64-f64 (i64.const 64) (f64.const 64.1)) + ) + + ;; Recursion + + (func $fac (export "fac") (param i64) (result i64) + (if i64 (i64.eqz (get_local 0)) + (i64.const 1) + (i64.mul (get_local 0) (call $fac (i64.sub (get_local 0) (i64.const 1)))) + ) + ) + + (func $fac-acc (export "fac-acc") (param i64 i64) (result i64) + (if i64 (i64.eqz (get_local 0)) + (get_local 1) + (call $fac-acc + (i64.sub (get_local 0) (i64.const 1)) + (i64.mul (get_local 0) (get_local 1)) + ) + ) + ) + + (func $fib (export "fib") (param i64) (result i64) + (if i64 (i64.le_u (get_local 0) (i64.const 1)) + (i64.const 1) + (i64.add + (call $fib (i64.sub (get_local 0) (i64.const 2))) + (call $fib (i64.sub (get_local 0) (i64.const 1))) + ) + ) + ) + + (func $even (export "even") (param i64) (result i32) + (if i32 (i64.eqz (get_local 0)) + (i32.const 44) + (call $odd (i64.sub (get_local 0) (i64.const 1))) + ) + ) + (func $odd (export "odd") (param i64) (result i32) + (if i32 (i64.eqz (get_local 0)) + (i32.const 99) + (call $even (i64.sub (get_local 0) (i64.const 1))) + ) + ) + + ;; Stack exhaustion + + ;; Implementations are required to have every call consume some abstract + ;; resource towards exhausting some abstract finite limit, such that + ;; infinitely recursive test cases reliably trap in finite time. This is + ;; because otherwise applications could come to depend on it on those + ;; implementations and be incompatible with implementations that don't do + ;; it (or don't do it under the same circumstances). + + (func $runaway (export "runaway") (call $runaway)) + + (func $mutual-runaway1 (export "mutual-runaway") (call $mutual-runaway2)) + (func $mutual-runaway2 (call $mutual-runaway1)) +) + +(assert_return (invoke "type-i32") (i32.const 0x132)) +(assert_return (invoke "type-i64") (i64.const 0x164)) +(assert_return (invoke "type-f32") (f32.const 0xf32)) +(assert_return (invoke "type-f64") (f64.const 0xf64)) + +(assert_return (invoke "type-first-i32") (i32.const 32)) +(assert_return (invoke "type-first-i64") (i64.const 64)) +(assert_return (invoke "type-first-f32") (f32.const 1.32)) +(assert_return (invoke "type-first-f64") (f64.const 1.64)) + +(assert_return (invoke "type-second-i32") (i32.const 32)) +(assert_return (invoke "type-second-i64") (i64.const 64)) +(assert_return (invoke "type-second-f32") (f32.const 32)) +(assert_return (invoke "type-second-f64") (f64.const 64.1)) + +(assert_return (invoke "fac" (i64.const 0)) (i64.const 1)) +(assert_return (invoke "fac" (i64.const 1)) (i64.const 1)) +(assert_return (invoke "fac" (i64.const 5)) (i64.const 120)) +(assert_return (invoke "fac" (i64.const 25)) (i64.const 7034535277573963776)) +(assert_return (invoke "fac-acc" (i64.const 0) (i64.const 1)) (i64.const 1)) +(assert_return (invoke "fac-acc" (i64.const 1) (i64.const 1)) (i64.const 1)) +(assert_return (invoke "fac-acc" (i64.const 5) (i64.const 1)) (i64.const 120)) +(assert_return + (invoke "fac-acc" (i64.const 25) (i64.const 1)) + (i64.const 7034535277573963776) +) + +(assert_return (invoke "fib" (i64.const 0)) (i64.const 1)) +(assert_return (invoke "fib" (i64.const 1)) (i64.const 1)) +(assert_return (invoke "fib" (i64.const 2)) (i64.const 2)) +(assert_return (invoke "fib" (i64.const 5)) (i64.const 8)) +(assert_return (invoke "fib" (i64.const 20)) (i64.const 10946)) + +(assert_return (invoke "even" (i64.const 0)) (i32.const 44)) +(assert_return (invoke "even" (i64.const 1)) (i32.const 99)) +(assert_return (invoke "even" (i64.const 100)) (i32.const 44)) +(assert_return (invoke "even" (i64.const 77)) (i32.const 99)) +(assert_return (invoke "odd" (i64.const 0)) (i32.const 99)) +(assert_return (invoke "odd" (i64.const 1)) (i32.const 44)) +(assert_return (invoke "odd" (i64.const 200)) (i32.const 99)) +(assert_return (invoke "odd" (i64.const 77)) (i32.const 44)) + +(assert_trap (invoke "runaway") "call stack exhausted") +(assert_trap (invoke "mutual-runaway") "call stack exhausted") + + +;; Invalid typing + +(assert_invalid + (module + (func $type-void-vs-num (i32.eqz (call 1))) + (func) + ) + "type mismatch" +) +(assert_invalid + (module + (func $type-num-vs-num (i32.eqz (call 1))) + (func (result i64) (i64.const 1)) + ) + "type mismatch" +) + +(assert_invalid + (module + (func $arity-0-vs-1 (call 1)) + (func (param i32)) + ) + "type mismatch" +) +(assert_invalid + (module + (func $arity-0-vs-2 (call 1)) + (func (param f64 i32)) + ) + "type mismatch" +) +(assert_invalid + (module + (func $arity-1-vs-0 (call 1 (i32.const 1))) + (func) + ) + "type mismatch" +) +(assert_invalid + (module + (func $arity-2-vs-0 (call 1 (f64.const 2) (i32.const 1))) + (func) + ) + "type mismatch" +) + +(assert_invalid + (module + (func $type-first-void-vs-num (call 1 (nop) (i32.const 1))) + (func (param i32 i32)) + ) + "type mismatch" +) +(assert_invalid + (module + (func $type-second-void-vs-num (call 1 (i32.const 1) (nop))) + (func (param i32 i32)) + ) + "type mismatch" +) +(assert_invalid + (module + (func $type-first-num-vs-num (call 1 (f64.const 1) (i32.const 1))) + (func (param i32 f64)) + ) + "type mismatch" +) +(assert_invalid + (module + (func $type-second-num-vs-num (call 1 (i32.const 1) (f64.const 1))) + (func (param f64 i32)) + ) + "type mismatch" +) + + +;; Unbound function + +(assert_invalid + (module (func $unbound-func (call 1))) + "unknown function" +) +(assert_invalid + (module (func $large-func (call 1012321300))) + "unknown function" +) diff --git a/src/binaryen/test/spec/call_indirect.wast b/src/binaryen/test/spec/call_indirect.wast new file mode 100644 index 0000000000..e4161affdb --- /dev/null +++ b/src/binaryen/test/spec/call_indirect.wast @@ -0,0 +1,362 @@ +;; Test `call_indirect` operator + +(module + ;; Auxiliary definitions + (type $proc (func)) + (type $out-i32 (func (result i32))) + (type $out-i64 (func (result i64))) + (type $out-f32 (func (result f32))) + (type $out-f64 (func (result f64))) + (type $over-i32 (func (param i32) (result i32))) + (type $over-i64 (func (param i64) (result i64))) + (type $over-f32 (func (param f32) (result f32))) + (type $over-f64 (func (param f64) (result f64))) + (type $f32-i32 (func (param f32 i32) (result i32))) + (type $i32-i64 (func (param i32 i64) (result i64))) + (type $f64-f32 (func (param f64 f32) (result f32))) + (type $i64-f64 (func (param i64 f64) (result f64))) + (type $over-i32-duplicate (func (param i32) (result i32))) + (type $over-i64-duplicate (func (param i64) (result i64))) + (type $over-f32-duplicate (func (param f32) (result f32))) + (type $over-f64-duplicate (func (param f64) (result f64))) + + (func $const-i32 (type $out-i32) (i32.const 0x132)) + (func $const-i64 (type $out-i64) (i64.const 0x164)) + (func $const-f32 (type $out-f32) (f32.const 0xf32)) + (func $const-f64 (type $out-f64) (f64.const 0xf64)) + + (func $id-i32 (type $over-i32) (get_local 0)) + (func $id-i64 (type $over-i64) (get_local 0)) + (func $id-f32 (type $over-f32) (get_local 0)) + (func $id-f64 (type $over-f64) (get_local 0)) + + (func $i32-i64 (type $i32-i64) (get_local 1)) + (func $i64-f64 (type $i64-f64) (get_local 1)) + (func $f32-i32 (type $f32-i32) (get_local 1)) + (func $f64-f32 (type $f64-f32) (get_local 1)) + + (func $over-i32-duplicate (type $over-i32-duplicate) (get_local 0)) + (func $over-i64-duplicate (type $over-i64-duplicate) (get_local 0)) + (func $over-f32-duplicate (type $over-f32-duplicate) (get_local 0)) + (func $over-f64-duplicate (type $over-f64-duplicate) (get_local 0)) + + (table anyfunc + (elem + $const-i32 $const-i64 $const-f32 $const-f64 + $id-i32 $id-i64 $id-f32 $id-f64 + $f32-i32 $i32-i64 $f64-f32 $i64-f64 + $fac $fib $even $odd + $runaway $mutual-runaway1 $mutual-runaway2 + $over-i32-duplicate $over-i64-duplicate + $over-f32-duplicate $over-f64-duplicate + ) + ) + + ;; Typing + + (func (export "type-i32") (result i32) (call_indirect (type $out-i32) (i32.const 0))) + (func (export "type-i64") (result i64) (call_indirect (type $out-i64) (i32.const 1))) + (func (export "type-f32") (result f32) (call_indirect (type $out-f32) (i32.const 2))) + (func (export "type-f64") (result f64) (call_indirect (type $out-f64) (i32.const 3))) + + (func (export "type-index") (result i64) + (call_indirect (type $over-i64) (i64.const 100) (i32.const 5)) + ) + + (func (export "type-first-i32") (result i32) + (call_indirect (type $over-i32) (i32.const 32) (i32.const 4)) + ) + (func (export "type-first-i64") (result i64) + (call_indirect (type $over-i64) (i64.const 64) (i32.const 5)) + ) + (func (export "type-first-f32") (result f32) + (call_indirect (type $over-f32) (f32.const 1.32) (i32.const 6)) + ) + (func (export "type-first-f64") (result f64) + (call_indirect (type $over-f64) (f64.const 1.64) (i32.const 7)) + ) + + (func (export "type-second-i32") (result i32) + (call_indirect (type $f32-i32) (f32.const 32.1) (i32.const 32) (i32.const 8)) + ) + (func (export "type-second-i64") (result i64) + (call_indirect (type $i32-i64) (i32.const 32) (i64.const 64) (i32.const 9)) + ) + (func (export "type-second-f32") (result f32) + (call_indirect (type $f64-f32) (f64.const 64) (f32.const 32) (i32.const 10)) + ) + (func (export "type-second-f64") (result f64) + (call_indirect (type $i64-f64) (i64.const 64) (f64.const 64.1) (i32.const 11)) + ) + + ;; Dispatch + + (func (export "dispatch") (param i32 i64) (result i64) + (call_indirect (type $over-i64) (get_local 1) (get_local 0)) + ) + + (func (export "dispatch-structural") (param i32) (result i64) + (call_indirect (type $over-i64-duplicate) (i64.const 9) (get_local 0)) + ) + + ;; Recursion + + (func $fac (export "fac") (type $over-i64) + (if i64 (i64.eqz (get_local 0)) + (i64.const 1) + (i64.mul + (get_local 0) + (call_indirect (type $over-i64) + (i64.sub (get_local 0) (i64.const 1)) + (i32.const 12) + ) + ) + ) + ) + + (func $fib (export "fib") (type $over-i64) + (if i64 (i64.le_u (get_local 0) (i64.const 1)) + (i64.const 1) + (i64.add + (call_indirect (type $over-i64) + (i64.sub (get_local 0) (i64.const 2)) + (i32.const 13) + ) + (call_indirect (type $over-i64) + (i64.sub (get_local 0) (i64.const 1)) + (i32.const 13) + ) + ) + ) + ) + + (func $even (export "even") (param i32) (result i32) + (if i32 (i32.eqz (get_local 0)) + (i32.const 44) + (call_indirect (type $over-i32) + (i32.sub (get_local 0) (i32.const 1)) + (i32.const 15) + ) + ) + ) + (func $odd (export "odd") (param i32) (result i32) + (if i32 (i32.eqz (get_local 0)) + (i32.const 99) + (call_indirect (type $over-i32) + (i32.sub (get_local 0) (i32.const 1)) + (i32.const 14) + ) + ) + ) + + ;; Stack exhaustion + + ;; Implementations are required to have every call consume some abstract + ;; resource towards exhausting some abstract finite limit, such that + ;; infinitely recursive test cases reliably trap in finite time. This is + ;; because otherwise applications could come to depend on it on those + ;; implementations and be incompatible with implementations that don't do + ;; it (or don't do it under the same circumstances). + + (func $runaway (export "runaway") (call_indirect (type $proc) (i32.const 16))) + + (func $mutual-runaway1 (export "mutual-runaway") (call_indirect (type $proc) (i32.const 18))) + (func $mutual-runaway2 (call_indirect (type $proc) (i32.const 17))) +) + +(assert_return (invoke "type-i32") (i32.const 0x132)) +(assert_return (invoke "type-i64") (i64.const 0x164)) +(assert_return (invoke "type-f32") (f32.const 0xf32)) +(assert_return (invoke "type-f64") (f64.const 0xf64)) + +(assert_return (invoke "type-index") (i64.const 100)) + +(assert_return (invoke "type-first-i32") (i32.const 32)) +(assert_return (invoke "type-first-i64") (i64.const 64)) +(assert_return (invoke "type-first-f32") (f32.const 1.32)) +(assert_return (invoke "type-first-f64") (f64.const 1.64)) + +(assert_return (invoke "type-second-i32") (i32.const 32)) +(assert_return (invoke "type-second-i64") (i64.const 64)) +(assert_return (invoke "type-second-f32") (f32.const 32)) +(assert_return (invoke "type-second-f64") (f64.const 64.1)) + +(assert_return (invoke "dispatch" (i32.const 5) (i64.const 2)) (i64.const 2)) +(assert_return (invoke "dispatch" (i32.const 5) (i64.const 5)) (i64.const 5)) +(assert_return (invoke "dispatch" (i32.const 12) (i64.const 5)) (i64.const 120)) +(assert_return (invoke "dispatch" (i32.const 13) (i64.const 5)) (i64.const 8)) +(assert_return (invoke "dispatch" (i32.const 20) (i64.const 2)) (i64.const 2)) +(assert_trap (invoke "dispatch" (i32.const 0) (i64.const 2)) "indirect call signature mismatch") +(assert_trap (invoke "dispatch" (i32.const 15) (i64.const 2)) "indirect call signature mismatch") +(assert_trap (invoke "dispatch" (i32.const 23) (i64.const 2)) "undefined element") +(assert_trap (invoke "dispatch" (i32.const -1) (i64.const 2)) "undefined element") +(assert_trap (invoke "dispatch" (i32.const 1213432423) (i64.const 2)) "undefined element") + +(assert_return (invoke "dispatch-structural" (i32.const 5)) (i64.const 9)) +(assert_return (invoke "dispatch-structural" (i32.const 5)) (i64.const 9)) +(assert_return (invoke "dispatch-structural" (i32.const 12)) (i64.const 362880)) +(assert_return (invoke "dispatch-structural" (i32.const 20)) (i64.const 9)) +(assert_trap (invoke "dispatch-structural" (i32.const 11)) "indirect call signature mismatch") +(assert_trap (invoke "dispatch-structural" (i32.const 22)) "indirect call signature mismatch") + +(assert_return (invoke "fac" (i64.const 0)) (i64.const 1)) +(assert_return (invoke "fac" (i64.const 1)) (i64.const 1)) +(assert_return (invoke "fac" (i64.const 5)) (i64.const 120)) +(assert_return (invoke "fac" (i64.const 25)) (i64.const 7034535277573963776)) + +(assert_return (invoke "fib" (i64.const 0)) (i64.const 1)) +(assert_return (invoke "fib" (i64.const 1)) (i64.const 1)) +(assert_return (invoke "fib" (i64.const 2)) (i64.const 2)) +(assert_return (invoke "fib" (i64.const 5)) (i64.const 8)) +(assert_return (invoke "fib" (i64.const 20)) (i64.const 10946)) + +(assert_return (invoke "even" (i32.const 0)) (i32.const 44)) +(assert_return (invoke "even" (i32.const 1)) (i32.const 99)) +(assert_return (invoke "even" (i32.const 100)) (i32.const 44)) +(assert_return (invoke "even" (i32.const 77)) (i32.const 99)) +(assert_return (invoke "odd" (i32.const 0)) (i32.const 99)) +(assert_return (invoke "odd" (i32.const 1)) (i32.const 44)) +(assert_return (invoke "odd" (i32.const 200)) (i32.const 99)) +(assert_return (invoke "odd" (i32.const 77)) (i32.const 44)) + +(assert_trap (invoke "runaway") "call stack exhausted") +(assert_trap (invoke "mutual-runaway") "call stack exhausted") + + +;; Invalid typing + +(assert_invalid + (module + (type (func)) + (func $no-table (call_indirect (type 0) (i32.const 0))) + ) + "unknown table" +) + +(assert_invalid + (module + (type (func)) + (table 0 anyfunc) + (func $type-void-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0)))) + ) + "type mismatch" +) +(assert_invalid + (module + (type (func (result i64))) + (table 0 anyfunc) + (func $type-num-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0)))) + ) + "type mismatch" +) + +(assert_invalid + (module + (type (func (param i32))) + (table 0 anyfunc) + (func $arity-0-vs-1 (call_indirect (type 0) (i32.const 0))) + ) + "type mismatch" +) +(assert_invalid + (module + (type (func (param f64 i32))) + (table 0 anyfunc) + (func $arity-0-vs-2 (call_indirect (type 0) (i32.const 0))) + ) + "type mismatch" +) +(assert_invalid + (module + (type (func)) + (table 0 anyfunc) + (func $arity-1-vs-0 (call_indirect (type 0) (i32.const 1) (i32.const 0))) + ) + "type mismatch" +) +(assert_invalid + (module + (type (func)) + (table 0 anyfunc) + (func $arity-2-vs-0 + (call_indirect (type 0) (f64.const 2) (i32.const 1) (i32.const 0)) + ) + ) + "type mismatch" +) + +(assert_invalid + (module + (type (func (param i32))) + (table 0 anyfunc) + (func $type-func-void-vs-i32 (call_indirect (type 0) (i32.const 1) (nop))) + ) + "type mismatch" +) +(assert_invalid + (module + (type (func (param i32))) + (table 0 anyfunc) + (func $type-func-num-vs-i32 (call_indirect (type 0) (i32.const 0) (i64.const 1))) + ) + "type mismatch" +) + +(assert_invalid + (module + (type (func (param i32 i32))) + (table 0 anyfunc) + (func $type-first-void-vs-num + (call_indirect (type 0) (nop) (i32.const 1) (i32.const 0)) + ) + ) + "type mismatch" +) +(assert_invalid + (module + (type (func (param i32 i32))) + (table 0 anyfunc) + (func $type-second-void-vs-num + (call_indirect (type 0) (i32.const 1) (nop) (i32.const 0)) + ) + ) + "type mismatch" +) +(assert_invalid + (module + (type (func (param i32 f64))) + (table 0 anyfunc) + (func $type-first-num-vs-num + (call_indirect (type 0) (f64.const 1) (i32.const 1) (i32.const 0)) + ) + ) + "type mismatch" +) +(assert_invalid + (module + (type (func (param f64 i32))) + (table 0 anyfunc) + (func $type-second-num-vs-num + (call_indirect (type 0) (i32.const 1) (f64.const 1) (i32.const 0)) + ) + ) + "type mismatch" +) + + +;; Unbound type + +(assert_invalid + (module + (table 0 anyfunc) + (func $unbound-type (call_indirect (type 1) (i32.const 0))) + ) + "unknown type" +) +(assert_invalid + (module + (table 0 anyfunc) + (func $large-type (call_indirect (type 1012321300) (i32.const 0))) + ) + "unknown type" +) diff --git a/src/binaryen/test/spec/comments.wast b/src/binaryen/test/spec/comments.wast new file mode 100644 index 0000000000..07a6298c4f --- /dev/null +++ b/src/binaryen/test/spec/comments.wast @@ -0,0 +1,69 @@ +;; Test comment syntax + +;;comment + +;;;;;;;;;;; + + ;;comment + +( ;;comment +module;;comment +);;comment + +;;) +;;;) +;; ;) +;; (; + +(;;) + +(;comment;) + +(;;comment;) + +(;;;comment;) + +(;;;;;;;;;;;;;;) + +(;(((((((((( ;) + +(;)))))))))));) + +(;comment";) + +(;comment"";) + +(;comment""";) + +(;Heiße Würstchen;) + +(;í ½í¸ší¸Ží ½í²©;) + +(;comment +comment;) + + (;comment;) + +(;comment;)((;comment;) +(;comment;)module(;comment;) +(;comment;))(;comment;) + +(;comment(;nested;)comment;) + +(;comment +(;nested +;)comment +;) + +(module + (;comment(;nested(;further;)nested;)comment;) +) + +(;comment;;comment;) + +(;comment;;comment +;) + +(module + (;comment;;comment(;nested;)comment;) +) \ No newline at end of file diff --git a/src/binaryen/test/spec/conversions.wast b/src/binaryen/test/spec/conversions.wast new file mode 100644 index 0000000000..17036a75ff --- /dev/null +++ b/src/binaryen/test/spec/conversions.wast @@ -0,0 +1,419 @@ +(module + (func (export "i64.extend_s_i32") (param $x i32) (result i64) (i64.extend_s/i32 (get_local $x))) + (func (export "i64.extend_u_i32") (param $x i32) (result i64) (i64.extend_u/i32 (get_local $x))) + (func (export "i32.wrap_i64") (param $x i64) (result i32) (i32.wrap/i64 (get_local $x))) + (func (export "i32.trunc_s_f32") (param $x f32) (result i32) (i32.trunc_s/f32 (get_local $x))) + (func (export "i32.trunc_u_f32") (param $x f32) (result i32) (i32.trunc_u/f32 (get_local $x))) + (func (export "i32.trunc_s_f64") (param $x f64) (result i32) (i32.trunc_s/f64 (get_local $x))) + (func (export "i32.trunc_u_f64") (param $x f64) (result i32) (i32.trunc_u/f64 (get_local $x))) + (func (export "i64.trunc_s_f32") (param $x f32) (result i64) (i64.trunc_s/f32 (get_local $x))) + (func (export "i64.trunc_u_f32") (param $x f32) (result i64) (i64.trunc_u/f32 (get_local $x))) + (func (export "i64.trunc_s_f64") (param $x f64) (result i64) (i64.trunc_s/f64 (get_local $x))) + (func (export "i64.trunc_u_f64") (param $x f64) (result i64) (i64.trunc_u/f64 (get_local $x))) + (func (export "f32.convert_s_i32") (param $x i32) (result f32) (f32.convert_s/i32 (get_local $x))) + (func (export "f32.convert_s_i64") (param $x i64) (result f32) (f32.convert_s/i64 (get_local $x))) + (func (export "f64.convert_s_i32") (param $x i32) (result f64) (f64.convert_s/i32 (get_local $x))) + (func (export "f64.convert_s_i64") (param $x i64) (result f64) (f64.convert_s/i64 (get_local $x))) + (func (export "f32.convert_u_i32") (param $x i32) (result f32) (f32.convert_u/i32 (get_local $x))) + (func (export "f32.convert_u_i64") (param $x i64) (result f32) (f32.convert_u/i64 (get_local $x))) + (func (export "f64.convert_u_i32") (param $x i32) (result f64) (f64.convert_u/i32 (get_local $x))) + (func (export "f64.convert_u_i64") (param $x i64) (result f64) (f64.convert_u/i64 (get_local $x))) + (func (export "f64.promote_f32") (param $x f32) (result f64) (f64.promote/f32 (get_local $x))) + (func (export "f32.demote_f64") (param $x f64) (result f32) (f32.demote/f64 (get_local $x))) + (func (export "f32.reinterpret_i32") (param $x i32) (result f32) (f32.reinterpret/i32 (get_local $x))) + (func (export "f64.reinterpret_i64") (param $x i64) (result f64) (f64.reinterpret/i64 (get_local $x))) + (func (export "i32.reinterpret_f32") (param $x f32) (result i32) (i32.reinterpret/f32 (get_local $x))) + (func (export "i64.reinterpret_f64") (param $x f64) (result i64) (i64.reinterpret/f64 (get_local $x))) +) + +(assert_return (invoke "i64.extend_s_i32" (i32.const 0)) (i64.const 0)) +(assert_return (invoke "i64.extend_s_i32" (i32.const 10000)) (i64.const 10000)) +(assert_return (invoke "i64.extend_s_i32" (i32.const -10000)) (i64.const -10000)) +(assert_return (invoke "i64.extend_s_i32" (i32.const -1)) (i64.const -1)) +(assert_return (invoke "i64.extend_s_i32" (i32.const 0x7fffffff)) (i64.const 0x000000007fffffff)) +(assert_return (invoke "i64.extend_s_i32" (i32.const 0x80000000)) (i64.const 0xffffffff80000000)) + +(assert_return (invoke "i64.extend_u_i32" (i32.const 0)) (i64.const 0)) +(assert_return (invoke "i64.extend_u_i32" (i32.const 10000)) (i64.const 10000)) +(assert_return (invoke "i64.extend_u_i32" (i32.const -10000)) (i64.const 0x00000000ffffd8f0)) +(assert_return (invoke "i64.extend_u_i32" (i32.const -1)) (i64.const 0xffffffff)) +(assert_return (invoke "i64.extend_u_i32" (i32.const 0x7fffffff)) (i64.const 0x000000007fffffff)) +(assert_return (invoke "i64.extend_u_i32" (i32.const 0x80000000)) (i64.const 0x0000000080000000)) + +(assert_return (invoke "i32.wrap_i64" (i64.const -1)) (i32.const -1)) +(assert_return (invoke "i32.wrap_i64" (i64.const -100000)) (i32.const -100000)) +(assert_return (invoke "i32.wrap_i64" (i64.const 0x80000000)) (i32.const 0x80000000)) +(assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff7fffffff)) (i32.const 0x7fffffff)) +(assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff00000000)) (i32.const 0x00000000)) +(assert_return (invoke "i32.wrap_i64" (i64.const 0xfffffffeffffffff)) (i32.const 0xffffffff)) +(assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff00000001)) (i32.const 0x00000001)) +(assert_return (invoke "i32.wrap_i64" (i64.const 0)) (i32.const 0)) +(assert_return (invoke "i32.wrap_i64" (i64.const 1311768467463790320)) (i32.const 0x9abcdef0)) +(assert_return (invoke "i32.wrap_i64" (i64.const 0x00000000ffffffff)) (i32.const 0xffffffff)) +(assert_return (invoke "i32.wrap_i64" (i64.const 0x0000000100000000)) (i32.const 0x00000000)) +(assert_return (invoke "i32.wrap_i64" (i64.const 0x0000000100000001)) (i32.const 0x00000001)) + +(assert_return (invoke "i32.trunc_s_f32" (f32.const 0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_f32" (f32.const -0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_f32" (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_f32" (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_f32" (f32.const 1.0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_s_f32" (f32.const 0x1.19999ap+0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_s_f32" (f32.const 1.5)) (i32.const 1)) +(assert_return (invoke "i32.trunc_s_f32" (f32.const -1.0)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_f32" (f32.const -0x1.19999ap+0)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_f32" (f32.const -1.5)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_f32" (f32.const -1.9)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_f32" (f32.const -2.0)) (i32.const -2)) +(assert_return (invoke "i32.trunc_s_f32" (f32.const 2147483520.0)) (i32.const 2147483520)) +(assert_return (invoke "i32.trunc_s_f32" (f32.const -2147483648.0)) (i32.const -2147483648)) +(assert_trap (invoke "i32.trunc_s_f32" (f32.const 2147483648.0)) "integer overflow") +(assert_trap (invoke "i32.trunc_s_f32" (f32.const -2147483904.0)) "integer overflow") +(assert_trap (invoke "i32.trunc_s_f32" (f32.const infinity)) "integer overflow") +(assert_trap (invoke "i32.trunc_s_f32" (f32.const -infinity)) "integer overflow") +(assert_trap (invoke "i32.trunc_s_f32" (f32.const nan)) "invalid conversion to integer") + +(assert_return (invoke "i32.trunc_u_f32" (f32.const 0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_f32" (f32.const -0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_f32" (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_f32" (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_f32" (f32.const 1.0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_f32" (f32.const 0x1.19999ap+0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_f32" (f32.const 1.5)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_f32" (f32.const 1.9)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_f32" (f32.const 2.0)) (i32.const 2)) +(assert_return (invoke "i32.trunc_u_f32" (f32.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 +(assert_return (invoke "i32.trunc_u_f32" (f32.const 4294967040.0)) (i32.const -256)) +(assert_return (invoke "i32.trunc_u_f32" (f32.const -0x1.ccccccp-1)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_f32" (f32.const -0x1.fffffep-1)) (i32.const 0)) +(assert_trap (invoke "i32.trunc_u_f32" (f32.const 4294967296.0)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f32" (f32.const -1.0)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f32" (f32.const infinity)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f32" (f32.const -infinity)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f32" (f32.const nan)) "invalid conversion to integer") + +(assert_return (invoke "i32.trunc_s_f64" (f64.const 0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const -0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const 1.0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const 1.5)) (i32.const 1)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const -1.0)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const -0x1.199999999999ap+0)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const -1.5)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const -1.9)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const -2.0)) (i32.const -2)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const 2147483647.0)) (i32.const 2147483647)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const -2147483648.0)) (i32.const -2147483648)) +(assert_trap (invoke "i32.trunc_s_f64" (f64.const 2147483648.0)) "integer overflow") +(assert_trap (invoke "i32.trunc_s_f64" (f64.const -2147483649.0)) "integer overflow") +(assert_trap (invoke "i32.trunc_s_f64" (f64.const infinity)) "integer overflow") +(assert_trap (invoke "i32.trunc_s_f64" (f64.const -infinity)) "integer overflow") +(assert_trap (invoke "i32.trunc_s_f64" (f64.const nan)) "invalid conversion to integer") + +(assert_return (invoke "i32.trunc_u_f64" (f64.const 0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const -0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const 1.0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const 1.5)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const 1.9)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const 2.0)) (i32.const 2)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 +(assert_return (invoke "i32.trunc_u_f64" (f64.const 4294967295.0)) (i32.const -1)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const -0x1.ccccccccccccdp-1)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const -0x1.fffffffffffffp-1)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const 1e8)) (i32.const 100000000)) +(assert_trap (invoke "i32.trunc_u_f64" (f64.const 4294967296.0)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f64" (f64.const -1.0)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f64" (f64.const 1e16)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f64" (f64.const 1e30)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f64" (f64.const 9223372036854775808)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f64" (f64.const infinity)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f64" (f64.const -infinity)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f64" (f64.const nan)) "invalid conversion to integer") + +(assert_return (invoke "i64.trunc_s_f32" (f32.const 0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const -0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const 0x1p-149)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const -0x1p-149)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const 1.0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const 0x1.19999ap+0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const 1.5)) (i64.const 1)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const -1.0)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const -0x1.19999ap+0)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const -1.5)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const -1.9)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const -2.0)) (i64.const -2)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 +(assert_return (invoke "i64.trunc_s_f32" (f32.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 +(assert_return (invoke "i64.trunc_s_f32" (f32.const 9223371487098961920.0)) (i64.const 9223371487098961920)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const -9223372036854775808.0)) (i64.const -9223372036854775808)) +(assert_trap (invoke "i64.trunc_s_f32" (f32.const 9223372036854775808.0)) "integer overflow") +(assert_trap (invoke "i64.trunc_s_f32" (f32.const -9223373136366403584.0)) "integer overflow") +(assert_trap (invoke "i64.trunc_s_f32" (f32.const infinity)) "integer overflow") +(assert_trap (invoke "i64.trunc_s_f32" (f32.const -infinity)) "integer overflow") +(assert_trap (invoke "i64.trunc_s_f32" (f32.const nan)) "invalid conversion to integer") + +(assert_return (invoke "i64.trunc_u_f32" (f32.const 0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const -0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const 0x1p-149)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const -0x1p-149)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const 1.0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const 0x1.19999ap+0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const 1.5)) (i64.const 1)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const 4294967296)) (i64.const 4294967296)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const 18446742974197923840.0)) (i64.const -1099511627776)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const -0x1.ccccccp-1)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const -0x1.fffffep-1)) (i64.const 0)) +(assert_trap (invoke "i64.trunc_u_f32" (f32.const 18446744073709551616.0)) "integer overflow") +(assert_trap (invoke "i64.trunc_u_f32" (f32.const -1.0)) "integer overflow") +(assert_trap (invoke "i64.trunc_u_f32" (f32.const infinity)) "integer overflow") +(assert_trap (invoke "i64.trunc_u_f32" (f32.const -infinity)) "integer overflow") +(assert_trap (invoke "i64.trunc_u_f32" (f32.const nan)) "invalid conversion to integer") + +(assert_return (invoke "i64.trunc_s_f64" (f64.const 0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const -0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const 1.0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const 1.5)) (i64.const 1)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const -1.0)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const -0x1.199999999999ap+0)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const -1.5)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const -1.9)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const -2.0)) (i64.const -2)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 +(assert_return (invoke "i64.trunc_s_f64" (f64.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 +(assert_return (invoke "i64.trunc_s_f64" (f64.const 9223372036854774784.0)) (i64.const 9223372036854774784)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const -9223372036854775808.0)) (i64.const -9223372036854775808)) +(assert_trap (invoke "i64.trunc_s_f64" (f64.const 9223372036854775808.0)) "integer overflow") +(assert_trap (invoke "i64.trunc_s_f64" (f64.const -9223372036854777856.0)) "integer overflow") +(assert_trap (invoke "i64.trunc_s_f64" (f64.const infinity)) "integer overflow") +(assert_trap (invoke "i64.trunc_s_f64" (f64.const -infinity)) "integer overflow") +(assert_trap (invoke "i64.trunc_s_f64" (f64.const nan)) "invalid conversion to integer") + +(assert_return (invoke "i64.trunc_u_f64" (f64.const 0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const -0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 1.0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 1.5)) (i64.const 1)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 4294967295)) (i64.const 0xffffffff)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 4294967296)) (i64.const 0x100000000)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 18446744073709549568.0)) (i64.const -2048)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const -0x1.ccccccccccccdp-1)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const -0x1.fffffffffffffp-1)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 1e8)) (i64.const 100000000)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 1e16)) (i64.const 10000000000000000)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 9223372036854775808)) (i64.const -9223372036854775808)) +(assert_trap (invoke "i64.trunc_u_f64" (f64.const 18446744073709551616.0)) "integer overflow") +(assert_trap (invoke "i64.trunc_u_f64" (f64.const -1.0)) "integer overflow") +(assert_trap (invoke "i64.trunc_u_f64" (f64.const infinity)) "integer overflow") +(assert_trap (invoke "i64.trunc_u_f64" (f64.const -infinity)) "integer overflow") +(assert_trap (invoke "i64.trunc_u_f64" (f64.const nan)) "invalid conversion to integer") + +(assert_return (invoke "f32.convert_s_i32" (i32.const 1)) (f32.const 1.0)) +(assert_return (invoke "f32.convert_s_i32" (i32.const -1)) (f32.const -1.0)) +(assert_return (invoke "f32.convert_s_i32" (i32.const 0)) (f32.const 0.0)) +(assert_return (invoke "f32.convert_s_i32" (i32.const 2147483647)) (f32.const 2147483648)) +(assert_return (invoke "f32.convert_s_i32" (i32.const -2147483648)) (f32.const -2147483648)) +(assert_return (invoke "f32.convert_s_i32" (i32.const 1234567890)) (f32.const 0x1.26580cp+30)) +;; Test rounding directions. +(assert_return (invoke "f32.convert_s_i32" (i32.const 16777217)) (f32.const 16777216.0)) +(assert_return (invoke "f32.convert_s_i32" (i32.const -16777217)) (f32.const -16777216.0)) +(assert_return (invoke "f32.convert_s_i32" (i32.const 16777219)) (f32.const 16777220.0)) +(assert_return (invoke "f32.convert_s_i32" (i32.const -16777219)) (f32.const -16777220.0)) + +(assert_return (invoke "f32.convert_s_i64" (i64.const 1)) (f32.const 1.0)) +(assert_return (invoke "f32.convert_s_i64" (i64.const -1)) (f32.const -1.0)) +(assert_return (invoke "f32.convert_s_i64" (i64.const 0)) (f32.const 0.0)) +(assert_return (invoke "f32.convert_s_i64" (i64.const 9223372036854775807)) (f32.const 9223372036854775807)) +(assert_return (invoke "f32.convert_s_i64" (i64.const -9223372036854775808)) (f32.const -9223372036854775808)) +(assert_return (invoke "f32.convert_s_i64" (i64.const 314159265358979)) (f32.const 0x1.1db9e8p+48)) ;; PI +;; Test rounding directions. +(assert_return (invoke "f32.convert_s_i64" (i64.const 16777217)) (f32.const 16777216.0)) +(assert_return (invoke "f32.convert_s_i64" (i64.const -16777217)) (f32.const -16777216.0)) +(assert_return (invoke "f32.convert_s_i64" (i64.const 16777219)) (f32.const 16777220.0)) +(assert_return (invoke "f32.convert_s_i64" (i64.const -16777219)) (f32.const -16777220.0)) + +(assert_return (invoke "f64.convert_s_i32" (i32.const 1)) (f64.const 1.0)) +(assert_return (invoke "f64.convert_s_i32" (i32.const -1)) (f64.const -1.0)) +(assert_return (invoke "f64.convert_s_i32" (i32.const 0)) (f64.const 0.0)) +(assert_return (invoke "f64.convert_s_i32" (i32.const 2147483647)) (f64.const 2147483647)) +(assert_return (invoke "f64.convert_s_i32" (i32.const -2147483648)) (f64.const -2147483648)) +(assert_return (invoke "f64.convert_s_i32" (i32.const 987654321)) (f64.const 987654321)) + +(assert_return (invoke "f64.convert_s_i64" (i64.const 1)) (f64.const 1.0)) +(assert_return (invoke "f64.convert_s_i64" (i64.const -1)) (f64.const -1.0)) +(assert_return (invoke "f64.convert_s_i64" (i64.const 0)) (f64.const 0.0)) +(assert_return (invoke "f64.convert_s_i64" (i64.const 9223372036854775807)) (f64.const 9223372036854775807)) +(assert_return (invoke "f64.convert_s_i64" (i64.const -9223372036854775808)) (f64.const -9223372036854775808)) +(assert_return (invoke "f64.convert_s_i64" (i64.const 4669201609102990)) (f64.const 4669201609102990)) ;; Feigenbaum +;; Test rounding directions. +(assert_return (invoke "f64.convert_s_i64" (i64.const 9007199254740993)) (f64.const 9007199254740992)) +(assert_return (invoke "f64.convert_s_i64" (i64.const -9007199254740993)) (f64.const -9007199254740992)) +(assert_return (invoke "f64.convert_s_i64" (i64.const 9007199254740995)) (f64.const 9007199254740996)) +(assert_return (invoke "f64.convert_s_i64" (i64.const -9007199254740995)) (f64.const -9007199254740996)) + +(assert_return (invoke "f32.convert_u_i32" (i32.const 1)) (f32.const 1.0)) +(assert_return (invoke "f32.convert_u_i32" (i32.const 0)) (f32.const 0.0)) +(assert_return (invoke "f32.convert_u_i32" (i32.const 2147483647)) (f32.const 2147483648)) +(assert_return (invoke "f32.convert_u_i32" (i32.const -2147483648)) (f32.const 2147483648)) +(assert_return (invoke "f32.convert_u_i32" (i32.const 0x12345678)) (f32.const 0x1.234568p+28)) +(assert_return (invoke "f32.convert_u_i32" (i32.const 0xffffffff)) (f32.const 4294967296.0)) +;; Test rounding directions. +(assert_return (invoke "f32.convert_u_i32" (i32.const 16777217)) (f32.const 16777216.0)) +(assert_return (invoke "f32.convert_u_i32" (i32.const 16777219)) (f32.const 16777220.0)) + +(assert_return (invoke "f32.convert_u_i64" (i64.const 1)) (f32.const 1.0)) +(assert_return (invoke "f32.convert_u_i64" (i64.const 0)) (f32.const 0.0)) +(assert_return (invoke "f32.convert_u_i64" (i64.const 9223372036854775807)) (f32.const 9223372036854775807)) +(assert_return (invoke "f32.convert_u_i64" (i64.const -9223372036854775808)) (f32.const 9223372036854775808)) +(assert_return (invoke "f32.convert_u_i64" (i64.const 0xffffffffffffffff)) (f32.const 18446744073709551616.0)) +;; Test rounding directions. +(assert_return (invoke "f32.convert_u_i64" (i64.const 16777217)) (f32.const 16777216.0)) +(assert_return (invoke "f32.convert_u_i64" (i64.const 16777219)) (f32.const 16777220.0)) + +(assert_return (invoke "f64.convert_u_i32" (i32.const 1)) (f64.const 1.0)) +(assert_return (invoke "f64.convert_u_i32" (i32.const 0)) (f64.const 0.0)) +(assert_return (invoke "f64.convert_u_i32" (i32.const 2147483647)) (f64.const 2147483647)) +(assert_return (invoke "f64.convert_u_i32" (i32.const -2147483648)) (f64.const 2147483648)) +(assert_return (invoke "f64.convert_u_i32" (i32.const 0xffffffff)) (f64.const 4294967295.0)) + +(assert_return (invoke "f64.convert_u_i64" (i64.const 1)) (f64.const 1.0)) +(assert_return (invoke "f64.convert_u_i64" (i64.const 0)) (f64.const 0.0)) +(assert_return (invoke "f64.convert_u_i64" (i64.const 9223372036854775807)) (f64.const 9223372036854775807)) +(assert_return (invoke "f64.convert_u_i64" (i64.const -9223372036854775808)) (f64.const 9223372036854775808)) +(assert_return (invoke "f64.convert_u_i64" (i64.const 0xffffffffffffffff)) (f64.const 18446744073709551616.0)) +;; Test rounding directions. +(assert_return (invoke "f64.convert_u_i64" (i64.const 9007199254740993)) (f64.const 9007199254740992)) +(assert_return (invoke "f64.convert_u_i64" (i64.const 9007199254740995)) (f64.const 9007199254740996)) + +(assert_return (invoke "f64.promote_f32" (f32.const 0.0)) (f64.const 0.0)) +(assert_return (invoke "f64.promote_f32" (f32.const -0.0)) (f64.const -0.0)) +(assert_return (invoke "f64.promote_f32" (f32.const 0x1p-149)) (f64.const 0x1p-149)) +(assert_return (invoke "f64.promote_f32" (f32.const -0x1p-149)) (f64.const -0x1p-149)) +(assert_return (invoke "f64.promote_f32" (f32.const 1.0)) (f64.const 1.0)) +(assert_return (invoke "f64.promote_f32" (f32.const -1.0)) (f64.const -1.0)) +(assert_return (invoke "f64.promote_f32" (f32.const -0x1.fffffep+127)) (f64.const -0x1.fffffep+127)) +(assert_return (invoke "f64.promote_f32" (f32.const 0x1.fffffep+127)) (f64.const 0x1.fffffep+127)) +;; Generated randomly by picking a random int and reinterpret it to float. +(assert_return (invoke "f64.promote_f32" (f32.const 0x1p-119)) (f64.const 0x1p-119)) +;; Generated randomly by picking a random float. +(assert_return (invoke "f64.promote_f32" (f32.const 0x1.8f867ep+125)) (f64.const 6.6382536710104395e+37)) +(assert_return (invoke "f64.promote_f32" (f32.const infinity)) (f64.const infinity)) +(assert_return (invoke "f64.promote_f32" (f32.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "f64.promote_f32" (f32.const nan)) (f64.const nan)) + +(assert_return (invoke "f32.demote_f64" (f64.const 0.0)) (f32.const 0.0)) +(assert_return (invoke "f32.demote_f64" (f64.const -0.0)) (f32.const -0.0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x0.0000000000001p-1022)) (f32.const 0.0)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x0.0000000000001p-1022)) (f32.const -0.0)) +(assert_return (invoke "f32.demote_f64" (f64.const 1.0)) (f32.const 1.0)) +(assert_return (invoke "f32.demote_f64" (f64.const -1.0)) (f32.const -1.0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffe0000000p-127)) (f32.const 0x1p-126)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffe0000000p-127)) (f32.const -0x1p-126)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffdfffffffp-127)) (f32.const 0x1.fffffcp-127)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffdfffffffp-127)) (f32.const -0x1.fffffcp-127)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffd0000000p+127)) (f32.const 0x1.fffffcp+127)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffd0000000p+127)) (f32.const -0x1.fffffcp+127)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffd0000001p+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffd0000001p+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffefffffffp+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffefffffffp+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.ffffffp+127)) (f32.const infinity)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.ffffffp+127)) (f32.const -infinity)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1p-119)) (f32.const 0x1p-119)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.8f867ep+125)) (f32.const 0x1.8f867ep+125)) +(assert_return (invoke "f32.demote_f64" (f64.const infinity)) (f32.const infinity)) +(assert_return (invoke "f32.demote_f64" (f64.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000000000001p+0)) (f32.const 1.0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffffffffffp-1)) (f32.const 1.0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000000p+0)) (f32.const 0x1.000000p+0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000001p+0)) (f32.const 0x1.000002p+0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.000002fffffffp+0)) (f32.const 0x1.000002p+0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000030000000p+0)) (f32.const 0x1.000004p+0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000050000000p+0)) (f32.const 0x1.000004p+0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000000p+24)) (f32.const 0x1.0p+24)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000001p+24)) (f32.const 0x1.000002p+24)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.000002fffffffp+24)) (f32.const 0x1.000002p+24)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000030000000p+24)) (f32.const 0x1.000004p+24)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.4eae4f7024c7p+108)) (f32.const 0x1.4eae5p+108)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.a12e71e358685p-113)) (f32.const 0x1.a12e72p-113)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.cb98354d521ffp-127)) (f32.const 0x1.cb9834p-127)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.6972b30cfb562p+1)) (f32.const -0x1.6972b4p+1)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.bedbe4819d4c4p+112)) (f32.const -0x1.bedbe4p+112)) +(assert_return (invoke "f32.demote_f64" (f64.const nan)) (f32.const nan)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1p-1022)) (f32.const 0.0)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1p-1022)) (f32.const -0.0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0p-150)) (f32.const 0.0)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.0p-150)) (f32.const -0.0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000000000001p-150)) (f32.const 0x1p-149)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.0000000000001p-150)) (f32.const -0x1p-149)) + +(assert_return (invoke "f32.reinterpret_i32" (i32.const 0)) (f32.const 0.0)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const 0x80000000)) (f32.const -0.0)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const 1)) (f32.const 0x1p-149)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const -1)) (f32.const -nan:0x7fffff)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const 123456789)) (f32.const 0x1.b79a2ap-113)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const -2147483647)) (f32.const -0x1p-149)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7f800000)) (f32.const infinity)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const 0xff800000)) (f32.const -infinity)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7fc00000)) (f32.const nan)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const 0xffc00000)) (f32.const -nan)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7fa00000)) (f32.const nan:0x200000)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const 0xffa00000)) (f32.const -nan:0x200000)) + +(assert_return (invoke "f64.reinterpret_i64" (i64.const 0)) (f64.const 0.0)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const 1)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const -1)) (f64.const -nan:0xfffffffffffff)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const 0x8000000000000000)) (f64.const -0.0)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const 1234567890)) (f64.const 0x0.00000499602d2p-1022)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const -9223372036854775807)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff0000000000000)) (f64.const infinity)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff0000000000000)) (f64.const -infinity)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff8000000000000)) (f64.const nan)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff8000000000000)) (f64.const -nan)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff4000000000000)) (f64.const nan:0x4000000000000)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff4000000000000)) (f64.const -nan:0x4000000000000)) + +(assert_return (invoke "i32.reinterpret_f32" (f32.const 0.0)) (i32.const 0)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const -0.0)) (i32.const 0x80000000)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const -nan:0x7fffff)) (i32.const -1)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const -0x1p-149)) (i32.const 0x80000001)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const 1.0)) (i32.const 1065353216)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const 3.1415926)) (i32.const 1078530010)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const 0x1.fffffep+127)) (i32.const 2139095039)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const -0x1.fffffep+127)) (i32.const -8388609)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const infinity)) (i32.const 0x7f800000)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const -infinity)) (i32.const 0xff800000)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const nan)) (i32.const 0x7fc00000)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const -nan)) (i32.const 0xffc00000)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const nan:0x200000)) (i32.const 0x7fa00000)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const -nan:0x200000)) (i32.const 0xffa00000)) + +(assert_return (invoke "i64.reinterpret_f64" (f64.const 0.0)) (i64.const 0)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const -0.0)) (i64.const 0x8000000000000000)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const 0x0.0000000000001p-1022)) (i64.const 1)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const -nan:0xfffffffffffff)) (i64.const -1)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const -0x0.0000000000001p-1022)) (i64.const 0x8000000000000001)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const 1.0)) (i64.const 4607182418800017408)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const 3.14159265358979)) (i64.const 4614256656552045841)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const 0x1.fffffffffffffp+1023)) (i64.const 9218868437227405311)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const -0x1.fffffffffffffp+1023)) (i64.const -4503599627370497)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const infinity)) (i64.const 0x7ff0000000000000)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const -infinity)) (i64.const 0xfff0000000000000)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const nan)) (i64.const 0x7ff8000000000000)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const -nan)) (i64.const 0xfff8000000000000)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const nan:0x4000000000000)) (i64.const 0x7ff4000000000000)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const -nan:0x4000000000000)) (i64.const 0xfff4000000000000)) diff --git a/src/binaryen/test/spec/endianness.wast b/src/binaryen/test/spec/endianness.wast new file mode 100644 index 0000000000..8dc0c2e2eb --- /dev/null +++ b/src/binaryen/test/spec/endianness.wast @@ -0,0 +1,217 @@ +(module + (memory 1) + + ;; Stores an i16 value in little-endian-format + (func $i16_store_little (param $address i32) (param $value i32) + (i32.store8 (get_local $address) (get_local $value)) + (i32.store8 (i32.add (get_local $address) (i32.const 1)) (i32.shr_u (get_local $value) (i32.const 8))) + ) + + ;; Stores an i32 value in little-endian format + (func $i32_store_little (param $address i32) (param $value i32) + (call $i16_store_little (get_local $address) (get_local $value)) + (call $i16_store_little (i32.add (get_local $address) (i32.const 2)) (i32.shr_u (get_local $value) (i32.const 16))) + ) + + ;; Stores an i64 value in little-endian format + (func $i64_store_little (param $address i32) (param $value i64) + (call $i32_store_little (get_local $address) (i32.wrap/i64 (get_local $value))) + (call $i32_store_little (i32.add (get_local $address) (i32.const 4)) (i32.wrap/i64 (i64.shr_u (get_local $value) (i64.const 32)))) + ) + + ;; Loads an i16 value in little-endian format + (func $i16_load_little (param $address i32) (result i32) + (i32.or + (i32.load8_u (get_local $address)) + (i32.shl (i32.load8_u (i32.add (get_local $address) (i32.const 1))) (i32.const 8)) + ) + ) + + ;; Loads an i32 value in little-endian format + (func $i32_load_little (param $address i32) (result i32) + (i32.or + (call $i16_load_little (get_local $address)) + (i32.shl (call $i16_load_little (i32.add (get_local $address) (i32.const 2))) (i32.const 16)) + ) + ) + + ;; Loads an i64 value in little-endian format + (func $i64_load_little (param $address i32) (result i64) + (i64.or + (i64.extend_u/i32 (call $i32_load_little (get_local $address))) + (i64.shl (i64.extend_u/i32 (call $i32_load_little (i32.add (get_local $address) (i32.const 4)))) (i64.const 32)) + ) + ) + + (func (export "i32_load16_s") (param $value i32) (result i32) + (call $i16_store_little (i32.const 0) (get_local $value)) + (i32.load16_s (i32.const 0)) + ) + + (func (export "i32_load16_u") (param $value i32) (result i32) + (call $i16_store_little (i32.const 0) (get_local $value)) + (i32.load16_u (i32.const 0)) + ) + + (func (export "i32_load") (param $value i32) (result i32) + (call $i32_store_little (i32.const 0) (get_local $value)) + (i32.load (i32.const 0)) + ) + + (func (export "i64_load16_s") (param $value i64) (result i64) + (call $i16_store_little (i32.const 0) (i32.wrap/i64 (get_local $value))) + (i64.load16_s (i32.const 0)) + ) + + (func (export "i64_load16_u") (param $value i64) (result i64) + (call $i16_store_little (i32.const 0) (i32.wrap/i64 (get_local $value))) + (i64.load16_u (i32.const 0)) + ) + + (func (export "i64_load32_s") (param $value i64) (result i64) + (call $i32_store_little (i32.const 0) (i32.wrap/i64 (get_local $value))) + (i64.load32_s (i32.const 0)) + ) + + (func (export "i64_load32_u") (param $value i64) (result i64) + (call $i32_store_little (i32.const 0) (i32.wrap/i64 (get_local $value))) + (i64.load32_u (i32.const 0)) + ) + + (func (export "i64_load") (param $value i64) (result i64) + (call $i64_store_little (i32.const 0) (get_local $value)) + (i64.load (i32.const 0)) + ) + + (func (export "f32_load") (param $value f32) (result f32) + (call $i32_store_little (i32.const 0) (i32.reinterpret/f32 (get_local $value))) + (f32.load (i32.const 0)) + ) + + (func (export "f64_load") (param $value f64) (result f64) + (call $i64_store_little (i32.const 0) (i64.reinterpret/f64 (get_local $value))) + (f64.load (i32.const 0)) + ) + + + (func (export "i32_store16") (param $value i32) (result i32) + (i32.store16 (i32.const 0) (get_local $value)) + (call $i16_load_little (i32.const 0)) + ) + + (func (export "i32_store") (param $value i32) (result i32) + (i32.store (i32.const 0) (get_local $value)) + (call $i32_load_little (i32.const 0)) + ) + + (func (export "i64_store16") (param $value i64) (result i64) + (i64.store16 (i32.const 0) (get_local $value)) + (i64.extend_u/i32 (call $i16_load_little (i32.const 0))) + ) + + (func (export "i64_store32") (param $value i64) (result i64) + (i64.store32 (i32.const 0) (get_local $value)) + (i64.extend_u/i32 (call $i32_load_little (i32.const 0))) + ) + + (func (export "i64_store") (param $value i64) (result i64) + (i64.store (i32.const 0) (get_local $value)) + (call $i64_load_little (i32.const 0)) + ) + + (func (export "f32_store") (param $value f32) (result f32) + (f32.store (i32.const 0) (get_local $value)) + (f32.reinterpret/i32 (call $i32_load_little (i32.const 0))) + ) + + (func (export "f64_store") (param $value f64) (result f64) + (f64.store (i32.const 0) (get_local $value)) + (f64.reinterpret/i64 (call $i64_load_little (i32.const 0))) + ) +) + +(assert_return (invoke "i32_load16_s" (i32.const -1)) (i32.const -1)) +(assert_return (invoke "i32_load16_s" (i32.const -4242)) (i32.const -4242)) +(assert_return (invoke "i32_load16_s" (i32.const 42)) (i32.const 42)) +(assert_return (invoke "i32_load16_s" (i32.const 0x3210)) (i32.const 0x3210)) + +(assert_return (invoke "i32_load16_u" (i32.const -1)) (i32.const 0xFFFF)) +(assert_return (invoke "i32_load16_u" (i32.const -4242)) (i32.const 61294)) +(assert_return (invoke "i32_load16_u" (i32.const 42)) (i32.const 42)) +(assert_return (invoke "i32_load16_u" (i32.const 0xCAFE)) (i32.const 0xCAFE)) + +(assert_return (invoke "i32_load" (i32.const -1)) (i32.const -1)) +(assert_return (invoke "i32_load" (i32.const -42424242)) (i32.const -42424242)) +(assert_return (invoke "i32_load" (i32.const 42424242)) (i32.const 42424242)) +(assert_return (invoke "i32_load" (i32.const 0xABAD1DEA)) (i32.const 0xABAD1DEA)) + +(assert_return (invoke "i64_load16_s" (i64.const -1)) (i64.const -1)) +(assert_return (invoke "i64_load16_s" (i64.const -4242)) (i64.const -4242)) +(assert_return (invoke "i64_load16_s" (i64.const 42)) (i64.const 42)) +(assert_return (invoke "i64_load16_s" (i64.const 0x3210)) (i64.const 0x3210)) + +(assert_return (invoke "i64_load16_u" (i64.const -1)) (i64.const 0xFFFF)) +(assert_return (invoke "i64_load16_u" (i64.const -4242)) (i64.const 61294)) +(assert_return (invoke "i64_load16_u" (i64.const 42)) (i64.const 42)) +(assert_return (invoke "i64_load16_u" (i64.const 0xCAFE)) (i64.const 0xCAFE)) + +(assert_return (invoke "i64_load32_s" (i64.const -1)) (i64.const -1)) +(assert_return (invoke "i64_load32_s" (i64.const -42424242)) (i64.const -42424242)) +(assert_return (invoke "i64_load32_s" (i64.const 42424242)) (i64.const 42424242)) +(assert_return (invoke "i64_load32_s" (i64.const 0x12345678)) (i64.const 0x12345678)) + +(assert_return (invoke "i64_load32_u" (i64.const -1)) (i64.const 0xFFFFFFFF)) +(assert_return (invoke "i64_load32_u" (i64.const -42424242)) (i64.const 4252543054)) +(assert_return (invoke "i64_load32_u" (i64.const 42424242)) (i64.const 42424242)) +(assert_return (invoke "i64_load32_u" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) + +(assert_return (invoke "i64_load" (i64.const -1)) (i64.const -1)) +(assert_return (invoke "i64_load" (i64.const -42424242)) (i64.const -42424242)) +(assert_return (invoke "i64_load" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) +(assert_return (invoke "i64_load" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA)) + +(assert_return (invoke "f32_load" (f32.const -1)) (f32.const -1)) +(assert_return (invoke "f32_load" (f32.const 1234e-5)) (f32.const 1234e-5)) +(assert_return (invoke "f32_load" (f32.const 4242.4242)) (f32.const 4242.4242)) +(assert_return (invoke "f32_load" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) + +(assert_return (invoke "f64_load" (f64.const -1)) (f64.const -1)) +(assert_return (invoke "f64_load" (f64.const 123456789e-5)) (f64.const 123456789e-5)) +(assert_return (invoke "f64_load" (f64.const 424242.424242)) (f64.const 424242.424242)) +(assert_return (invoke "f64_load" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) + + +(assert_return (invoke "i32_store16" (i32.const -1)) (i32.const 0xFFFF)) +(assert_return (invoke "i32_store16" (i32.const -4242)) (i32.const 61294)) +(assert_return (invoke "i32_store16" (i32.const 42)) (i32.const 42)) +(assert_return (invoke "i32_store16" (i32.const 0xCAFE)) (i32.const 0xCAFE)) + +(assert_return (invoke "i32_store" (i32.const -1)) (i32.const -1)) +(assert_return (invoke "i32_store" (i32.const -4242)) (i32.const -4242)) +(assert_return (invoke "i32_store" (i32.const 42424242)) (i32.const 42424242)) +(assert_return (invoke "i32_store" (i32.const 0xDEADCAFE)) (i32.const 0xDEADCAFE)) + +(assert_return (invoke "i64_store16" (i64.const -1)) (i64.const 0xFFFF)) +(assert_return (invoke "i64_store16" (i64.const -4242)) (i64.const 61294)) +(assert_return (invoke "i64_store16" (i64.const 42)) (i64.const 42)) +(assert_return (invoke "i64_store16" (i64.const 0xCAFE)) (i64.const 0xCAFE)) + +(assert_return (invoke "i64_store32" (i64.const -1)) (i64.const 0xFFFFFFFF)) +(assert_return (invoke "i64_store32" (i64.const -4242)) (i64.const 4294963054)) +(assert_return (invoke "i64_store32" (i64.const 42424242)) (i64.const 42424242)) +(assert_return (invoke "i64_store32" (i64.const 0xDEADCAFE)) (i64.const 0xDEADCAFE)) + +(assert_return (invoke "i64_store" (i64.const -1)) (i64.const -1)) +(assert_return (invoke "i64_store" (i64.const -42424242)) (i64.const -42424242)) +(assert_return (invoke "i64_store" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) +(assert_return (invoke "i64_store" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA)) + +(assert_return (invoke "f32_store" (f32.const -1)) (f32.const -1)) +(assert_return (invoke "f32_store" (f32.const 1234e-5)) (f32.const 1234e-5)) +(assert_return (invoke "f32_store" (f32.const 4242.4242)) (f32.const 4242.4242)) +(assert_return (invoke "f32_store" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) + +(assert_return (invoke "f64_store" (f64.const -1)) (f64.const -1)) +(assert_return (invoke "f64_store" (f64.const 123456789e-5)) (f64.const 123456789e-5)) +(assert_return (invoke "f64_store" (f64.const 424242.424242)) (f64.const 424242.424242)) +(assert_return (invoke "f64_store" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) diff --git a/src/binaryen/test/spec/expected-output/address.wast.log b/src/binaryen/test/spec/expected-output/address.wast.log new file mode 100644 index 0000000000..c2e443367c --- /dev/null +++ b/src/binaryen/test/spec/expected-output/address.wast.log @@ -0,0 +1,38 @@ +97 : i32 +98 : i32 +99 : i32 +122 : i32 +25185 : i32 +25185 : i32 +25442 : i32 +25699 : i32 +122 : i32 +1684234849 : i32 +1701077858 : i32 +1717920867 : i32 +122 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 +0 : i32 diff --git a/src/binaryen/test/spec/expected-output/func_ptrs.wast.log b/src/binaryen/test/spec/expected-output/func_ptrs.wast.log new file mode 100644 index 0000000000..8f757d3c04 --- /dev/null +++ b/src/binaryen/test/spec/expected-output/func_ptrs.wast.log @@ -0,0 +1 @@ +83 : i32 diff --git a/src/binaryen/test/spec/expected-output/if-label-scope.fail.wast.log b/src/binaryen/test/spec/expected-output/if-label-scope.fail.wast.log new file mode 100644 index 0000000000..a3e1d79e11 --- /dev/null +++ b/src/binaryen/test/spec/expected-output/if-label-scope.fail.wast.log @@ -0,0 +1 @@ +test/if-label-scope.fail.wast:1.26-1.28: syntax error: unknown label $l diff --git a/src/binaryen/test/spec/expected-output/imports.wast.log b/src/binaryen/test/spec/expected-output/imports.wast.log new file mode 100644 index 0000000000..cd34c23997 --- /dev/null +++ b/src/binaryen/test/spec/expected-output/imports.wast.log @@ -0,0 +1,10 @@ +13 : i32 +14 : i32 +42. : f32 +13 : i32 +13 : i32 +24 : i64 +25 : i64 +53. : f64 +24 : i64 +24 : i64 diff --git a/src/binaryen/test/spec/expected-output/names.wast.log b/src/binaryen/test/spec/expected-output/names.wast.log new file mode 100644 index 0000000000..b694f30336 --- /dev/null +++ b/src/binaryen/test/spec/expected-output/names.wast.log @@ -0,0 +1,2 @@ +42 : i32 +123 : i32 diff --git a/src/binaryen/test/spec/expected-output/start.wast.log b/src/binaryen/test/spec/expected-output/start.wast.log new file mode 100644 index 0000000000..f74aa5848a --- /dev/null +++ b/src/binaryen/test/spec/expected-output/start.wast.log @@ -0,0 +1,2 @@ +1 : i32 +2 : i32 diff --git a/src/binaryen/test/spec/exports.wast b/src/binaryen/test/spec/exports.wast new file mode 100644 index 0000000000..fdbb052b09 --- /dev/null +++ b/src/binaryen/test/spec/exports.wast @@ -0,0 +1,172 @@ +;; Functions + +(module (func) (export "a" (func 0))) +(module (func) (export "a" (func 0)) (export "b" (func 0))) +(module (func) (func) (export "a" (func 0)) (export "b" (func 1))) + +(module (func (export "a"))) +(module (func $a (export "a"))) + +(module $Func + (export "e" (func $f)) + (func $f (param $n i32) (result i32) + (return (i32.add (get_local $n) (i32.const 1))) + ) +) +(assert_return (invoke "e" (i32.const 42)) (i32.const 43)) +(assert_return (invoke $Func "e" (i32.const 42)) (i32.const 43)) +(module) +(module $Other1) +(assert_return (invoke $Func "e" (i32.const 42)) (i32.const 43)) + +(assert_invalid + (module (func) (export "a" (func 1))) + "unknown function" +) +(assert_invalid + (module (func) (export "a" (func 0)) (export "a" (func 0))) + "duplicate export name" +) +(assert_invalid + (module (func) (func) (export "a" (func 0)) (export "a" (func 1))) + "duplicate export name" +) +(assert_invalid + (module (func) (global i32 (i32.const 0)) (export "a" (func 0)) (export "a" (global 0))) + "duplicate export name" +) +(assert_invalid + (module (func) (table 0 anyfunc) (export "a" (func 0)) (export "a" (table 0))) + "duplicate export name" +) +(assert_invalid + (module (func) (memory 0) (export "a" (func 0)) (export "a" (memory 0))) + "duplicate export name" +) + + +;; Globals + +(module (global i32 (i32.const 0)) (export "a" (global 0))) +(module (global i32 (i32.const 0)) (export "a" (global 0)) (export "b" (global 0))) +(module (global i32 (i32.const 0)) (global i32 (i32.const 0)) (export "a" (global 0)) (export "b" (global 1))) + +(module (global (export "a") i32 (i32.const 0))) +(module (global $a (export "a") i32 (i32.const 0))) + +(module $Global + (export "e" (global $g)) + (global $g i32 (i32.const 42)) +) +(assert_return (get "e") (i32.const 42)) +(assert_return (get $Global "e") (i32.const 42)) +(module) +(module $Other2) +(assert_return (get $Global "e") (i32.const 42)) + +(assert_invalid + (module (global i32 (i32.const 0)) (export "a" (global 1))) + "unknown global" +) +(assert_invalid + (module (global i32 (i32.const 0)) (export "a" (global 0)) (export "a" (global 0))) + "duplicate export name" +) +(assert_invalid + (module (global i32 (i32.const 0)) (global i32 (i32.const 0)) (export "a" (global 0)) (export "a" (global 1))) + "duplicate export name" +) +(assert_invalid + (module (global i32 (i32.const 0)) (func) (export "a" (global 0)) (export "a" (func 0))) + "duplicate export name" +) +(assert_invalid + (module (global i32 (i32.const 0)) (table 0 anyfunc) (export "a" (global 0)) (export "a" (table 0))) + "duplicate export name" +) +(assert_invalid + (module (global i32 (i32.const 0)) (memory 0) (export "a" (global 0)) (export "a" (memory 0))) + "duplicate export name" +) + + +;; Tables + +(module (table 0 anyfunc) (export "a" (table 0))) +(module (table 0 anyfunc) (export "a" (table 0)) (export "b" (table 0))) +;; No multiple tables yet. +;; (module (table 0 anyfunc) (table 0 anyfunc) (export "a" (table 0)) (export "b" (table 1))) + +(module (table (export "a") 0 anyfunc)) +(module (table (export "a") 0 1 anyfunc)) +(module (table $a (export "a") 0 anyfunc)) +(module (table $a (export "a") 0 1 anyfunc)) + +(; TODO: access table ;) + +(assert_invalid + (module (table 0 anyfunc) (export "a" (table 1))) + "unknown table" +) +(assert_invalid + (module (table 0 anyfunc) (export "a" (table 0)) (export "a" (table 0))) + "duplicate export name" +) +;; No multiple tables yet. +;; (assert_invalid +;; (module (table 0 anyfunc) (table 0 anyfunc) (export "a" (table 0)) (export "a" (table 1))) +;; "duplicate export name" +;; ) +(assert_invalid + (module (table 0 anyfunc) (func) (export "a" (table 0)) (export "a" (func 0))) + "duplicate export name" +) +(assert_invalid + (module (table 0 anyfunc) (global i32 (i32.const 0)) (export "a" (table 0)) (export "a" (global 0))) + "duplicate export name" +) +(assert_invalid + (module (table 0 anyfunc) (memory 0) (export "a" (table 0)) (export "a" (memory 0))) + "duplicate export name" +) + + +;; Memories + +(module (memory 0) (export "a" (memory 0))) +(module (memory 0) (export "a" (memory 0)) (export "b" (memory 0))) +;; No multiple memories yet. +;; (module (memory 0) (memory 0) (export "a" (memory 0)) (export "b" (memory 1))) + +(module (memory (export "a") 0)) +(module (memory (export "a") 0 1)) +(module (memory $a (export "a") 0)) +(module (memory $a (export "a") 0 1)) + +(; TODO: access memory ;) + +(assert_invalid + (module (memory 0) (export "a" (memory 1))) + "unknown memory" +) +(assert_invalid + (module (memory 0) (export "a" (memory 0)) (export "a" (memory 0))) + "duplicate export name" +) +;; No multiple memories yet. +;; (assert_invalid +;; (module (memory 0) (memory 0) (export "a" (memory 0)) (export "a" (memory 1))) +;; "duplicate export name" +;; ) +(assert_invalid + (module (memory 0) (func) (export "a" (memory 0)) (export "a" (func 0))) + "duplicate export name" +) +(assert_invalid + (module (memory 0) (global i32 (i32.const 0)) (export "a" (memory 0)) (export "a" (global 0))) + "duplicate export name" +) +(assert_invalid + (module (memory 0) (table 0 anyfunc) (export "a" (memory 0)) (export "a" (table 0))) + "duplicate export name" +) diff --git a/src/binaryen/test/spec/f32.load32.fail.wast b/src/binaryen/test/spec/f32.load32.fail.wast new file mode 100644 index 0000000000..313364538c --- /dev/null +++ b/src/binaryen/test/spec/f32.load32.fail.wast @@ -0,0 +1 @@ +(module (memory 1) (func (param i32) (result f32) (f32.load32 (get_local 0)))) diff --git a/src/binaryen/test/spec/f32.load64.fail.wast b/src/binaryen/test/spec/f32.load64.fail.wast new file mode 100644 index 0000000000..da94668fc2 --- /dev/null +++ b/src/binaryen/test/spec/f32.load64.fail.wast @@ -0,0 +1 @@ +(module (memory 1) (func (param i32) (result f32) (f32.load64 (get_local 0)))) diff --git a/src/binaryen/test/spec/f32.store32.fail.wast b/src/binaryen/test/spec/f32.store32.fail.wast new file mode 100644 index 0000000000..3daf6eb35e --- /dev/null +++ b/src/binaryen/test/spec/f32.store32.fail.wast @@ -0,0 +1 @@ +(module (memory 1) (func (param i32) (param f32) (f32.store32 (get_local 0) (get_local 1)))) diff --git a/src/binaryen/test/spec/f32.store64.fail.wast b/src/binaryen/test/spec/f32.store64.fail.wast new file mode 100644 index 0000000000..b2c47bb9b4 --- /dev/null +++ b/src/binaryen/test/spec/f32.store64.fail.wast @@ -0,0 +1 @@ +(module (memory 1) (func (param i32) (param f64) (f32.store64 (get_local 0) (get_local 1)))) diff --git a/src/binaryen/test/spec/f32.wast b/src/binaryen/test/spec/f32.wast new file mode 100644 index 0000000000..9f58f9bd10 --- /dev/null +++ b/src/binaryen/test/spec/f32.wast @@ -0,0 +1,2414 @@ +;; Test all the f32 operators on major boundary values and all special +;; values (except comparison operators, which are tested in f32_cmp.wast). + +(module + (func (export "add") (param $x f32) (param $y f32) (result f32) (f32.add (get_local $x) (get_local $y))) + (func (export "sub") (param $x f32) (param $y f32) (result f32) (f32.sub (get_local $x) (get_local $y))) + (func (export "mul") (param $x f32) (param $y f32) (result f32) (f32.mul (get_local $x) (get_local $y))) + (func (export "div") (param $x f32) (param $y f32) (result f32) (f32.div (get_local $x) (get_local $y))) + (func (export "sqrt") (param $x f32) (result f32) (f32.sqrt (get_local $x))) + (func (export "min") (param $x f32) (param $y f32) (result f32) (f32.min (get_local $x) (get_local $y))) + (func (export "max") (param $x f32) (param $y f32) (result f32) (f32.max (get_local $x) (get_local $y))) + (func (export "ceil") (param $x f32) (result f32) (f32.ceil (get_local $x))) + (func (export "floor") (param $x f32) (result f32) (f32.floor (get_local $x))) + (func (export "trunc") (param $x f32) (result f32) (f32.trunc (get_local $x))) + (func (export "nearest") (param $x f32) (result f32) (f32.nearest (get_local $x))) + (func (export "abs") (param $x f32) (result f32) (f32.abs (get_local $x))) + (func (export "neg") (param $x f32) (result f32) (f32.neg (get_local $x))) + (func (export "copysign") (param $x f32) (param $y f32) (result f32) (f32.copysign (get_local $x) (get_local $y))) +) + +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-148)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-148)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1.000002p-126)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1.fffffcp-127)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1.fffffcp-127)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1.000002p-126)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1.000002p-126)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1.fffffcp-127)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1.fffffcp-127)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1.000002p-126)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-125)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-125)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1.8p+0)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1.8p+0)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.b21fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.721fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.721fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.b21fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1.8p+0)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1.8p+0)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+1)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+1)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.d21fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.521fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.521fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.d21fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.b21fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.721fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.721fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.b21fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.d21fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.521fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.521fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.d21fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+3)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+3)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "add" (f32.const -infinity) (f32.const -0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const -infinity) (f32.const 0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const infinity) (f32.const -0x0p+0)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const infinity) (f32.const 0x0p+0)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const -infinity) (f32.const -0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const -infinity) (f32.const 0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const infinity) (f32.const -0x1p-149)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const infinity) (f32.const 0x1p-149)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const -infinity) (f32.const -0x1p-126)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const -infinity) (f32.const 0x1p-126)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const infinity) (f32.const -0x1p-126)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const infinity) (f32.const 0x1p-126)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const -infinity) (f32.const -0x1p-1)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const -infinity) (f32.const 0x1p-1)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const infinity) (f32.const -0x1p-1)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const infinity) (f32.const 0x1p-1)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const -infinity) (f32.const -0x1p+0)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const -infinity) (f32.const 0x1p+0)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const infinity) (f32.const -0x1p+0)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const infinity) (f32.const 0x1p+0)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const -infinity) (f32.const -0x1.921fb6p+2)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const -infinity) (f32.const 0x1.921fb6p+2)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const infinity) (f32.const -0x1.921fb6p+2)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const infinity) (f32.const 0x1.921fb6p+2)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const -infinity) (f32.const -0x1.fffffep+127)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const -infinity) (f32.const 0x1.fffffep+127)) (f32.const -infinity)) +(assert_return (invoke "add" (f32.const infinity) (f32.const -0x1.fffffep+127)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const infinity) (f32.const 0x1.fffffep+127)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const -infinity) (f32.const -infinity)) (f32.const -infinity)) +(assert_return_nan (invoke "add" (f32.const -infinity) (f32.const infinity))) +(assert_return_nan (invoke "add" (f32.const infinity) (f32.const -infinity))) +(assert_return (invoke "add" (f32.const infinity) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "add" (f32.const -infinity) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const -infinity) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "add" (f32.const infinity) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const infinity) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "add" (f32.const -nan) (f32.const -0x0p+0)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const -nan) (f32.const 0x0p+0)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan)) +(assert_return (invoke "add" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan)) +(assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p-149)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p-149)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan)) +(assert_return (invoke "add" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan)) +(assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p-126)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p-126)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan)) +(assert_return (invoke "add" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan)) +(assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p-1)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p-1)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan)) +(assert_return (invoke "add" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan)) +(assert_return (invoke "add" (f32.const -nan) (f32.const -0x1p+0)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const -nan) (f32.const 0x1p+0)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan)) +(assert_return (invoke "add" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan)) +(assert_return (invoke "add" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan)) +(assert_return (invoke "add" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan)) +(assert_return (invoke "add" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan)) +(assert_return (invoke "add" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan)) +(assert_return (invoke "add" (f32.const -nan) (f32.const -infinity)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const -nan) (f32.const infinity)) (f32.const -nan)) +(assert_return (invoke "add" (f32.const nan) (f32.const -infinity)) (f32.const nan)) +(assert_return (invoke "add" (f32.const nan) (f32.const infinity)) (f32.const nan)) +(assert_return (invoke "add" (f32.const -nan) (f32.const -nan)) (f32.const -nan)) +(assert_return_nan (invoke "add" (f32.const -nan) (f32.const nan))) +(assert_return_nan (invoke "add" (f32.const nan) (f32.const -nan))) +(assert_return (invoke "add" (f32.const nan) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p-148)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p-148)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1.fffffcp-127)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1.000002p-126)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1.000002p-126)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1.fffffcp-127)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1.fffffcp-127)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1.000002p-126)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1.000002p-126)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1.fffffcp-127)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p-125)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p-125)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1.8p+0)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1.8p+0)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.721fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.b21fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.b21fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.721fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1.8p+0)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1.8p+0)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+1)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+1)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.521fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.d21fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.d21fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.521fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.721fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.b21fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.b21fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.721fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.521fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.d21fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.d21fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.521fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+3)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+3)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const -infinity) (f32.const -0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const -infinity) (f32.const 0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const infinity) (f32.const -0x0p+0)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const infinity) (f32.const 0x0p+0)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const -infinity) (f32.const -0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const -infinity) (f32.const 0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const infinity) (f32.const -0x1p-149)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const infinity) (f32.const 0x1p-149)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const -infinity) (f32.const -0x1p-126)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const -infinity) (f32.const 0x1p-126)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const infinity) (f32.const -0x1p-126)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const infinity) (f32.const 0x1p-126)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const -infinity) (f32.const -0x1p-1)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const -infinity) (f32.const 0x1p-1)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const infinity) (f32.const -0x1p-1)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const infinity) (f32.const 0x1p-1)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const -infinity) (f32.const -0x1p+0)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const -infinity) (f32.const 0x1p+0)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const infinity) (f32.const -0x1p+0)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const infinity) (f32.const 0x1p+0)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const -infinity) (f32.const -0x1.921fb6p+2)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const -infinity) (f32.const 0x1.921fb6p+2)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const infinity) (f32.const -0x1.921fb6p+2)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const infinity) (f32.const 0x1.921fb6p+2)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const -infinity) (f32.const -0x1.fffffep+127)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const -infinity) (f32.const 0x1.fffffep+127)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const infinity) (f32.const -0x1.fffffep+127)) (f32.const infinity)) +(assert_return (invoke "sub" (f32.const infinity) (f32.const 0x1.fffffep+127)) (f32.const infinity)) +(assert_return_nan (invoke "sub" (f32.const -infinity) (f32.const -infinity))) +(assert_return (invoke "sub" (f32.const -infinity) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "sub" (f32.const infinity) (f32.const -infinity)) (f32.const infinity)) +(assert_return_nan (invoke "sub" (f32.const infinity) (f32.const infinity))) +(assert_return (invoke "sub" (f32.const -infinity) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const -infinity) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const infinity) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const infinity) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const -nan) (f32.const -0x0p+0)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const -nan) (f32.const 0x0p+0)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p-149)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p-149)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p-126)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p-126)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p-1)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p-1)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1p+0)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1p+0)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const -nan) (f32.const -infinity)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const -nan) (f32.const infinity)) (f32.const -nan)) +(assert_return (invoke "sub" (f32.const nan) (f32.const -infinity)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const nan) (f32.const infinity)) (f32.const nan)) +(assert_return (invoke "sub" (f32.const -nan) (f32.const -nan)) (f32.const -nan)) +(assert_return_nan (invoke "sub" (f32.const -nan) (f32.const nan))) +(assert_return_nan (invoke "sub" (f32.const nan) (f32.const -nan))) +(assert_return (invoke "sub" (f32.const nan) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return_nan (invoke "mul" (f32.const -0x0p+0) (f32.const -infinity))) +(assert_return_nan (invoke "mul" (f32.const -0x0p+0) (f32.const infinity))) +(assert_return_nan (invoke "mul" (f32.const 0x0p+0) (f32.const -infinity))) +(assert_return_nan (invoke "mul" (f32.const 0x0p+0) (f32.const infinity))) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.8p-147)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.8p-147)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p-147)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p-147)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep-22)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep-22)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep-22)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep-22)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-127)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-127)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-127)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-127)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p-124)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p-124)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p-124)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p-124)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+1)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+1)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+1)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+1)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-127)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-127)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-127)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-127)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p-2)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p-2)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-2)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-2)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+1)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+1)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+1)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+1)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+126)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+126)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+126)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+126)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.8p-147)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.8p-147)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.8p-147)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.8p-147)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p-124)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p-124)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p-124)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p-124)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+1)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+1)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+1)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+1)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.3bd3cep+5)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.3bd3cep+5)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.3bd3cep+5)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.3bd3cep+5)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep-22)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep-22)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep-22)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep-22)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+1)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+1)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+1)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+1)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+126)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+126)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+126)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+126)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan)) +(assert_return_nan (invoke "mul" (f32.const -infinity) (f32.const -0x0p+0))) +(assert_return_nan (invoke "mul" (f32.const -infinity) (f32.const 0x0p+0))) +(assert_return_nan (invoke "mul" (f32.const infinity) (f32.const -0x0p+0))) +(assert_return_nan (invoke "mul" (f32.const infinity) (f32.const 0x0p+0))) +(assert_return (invoke "mul" (f32.const -infinity) (f32.const -0x1p-149)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -infinity) (f32.const 0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const infinity) (f32.const -0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const infinity) (f32.const 0x1p-149)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -infinity) (f32.const -0x1p-126)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -infinity) (f32.const 0x1p-126)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const infinity) (f32.const -0x1p-126)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const infinity) (f32.const 0x1p-126)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -infinity) (f32.const -0x1p-1)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -infinity) (f32.const 0x1p-1)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const infinity) (f32.const -0x1p-1)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const infinity) (f32.const 0x1p-1)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -infinity) (f32.const -0x1p+0)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -infinity) (f32.const 0x1p+0)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const infinity) (f32.const -0x1p+0)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const infinity) (f32.const 0x1p+0)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -infinity) (f32.const -0x1.921fb6p+2)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -infinity) (f32.const 0x1.921fb6p+2)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const infinity) (f32.const -0x1.921fb6p+2)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const infinity) (f32.const 0x1.921fb6p+2)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -infinity) (f32.const -0x1.fffffep+127)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -infinity) (f32.const 0x1.fffffep+127)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const infinity) (f32.const -0x1.fffffep+127)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const infinity) (f32.const 0x1.fffffep+127)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -infinity) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -infinity) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const infinity) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "mul" (f32.const infinity) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "mul" (f32.const -infinity) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const -infinity) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const infinity) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const infinity) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const -nan) (f32.const -0x0p+0)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const -nan) (f32.const 0x0p+0)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p-149)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p-149)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p-126)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p-126)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p-1)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p-1)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1p+0)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1p+0)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const -nan) (f32.const -infinity)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const -nan) (f32.const infinity)) (f32.const -nan)) +(assert_return (invoke "mul" (f32.const nan) (f32.const -infinity)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const nan) (f32.const infinity)) (f32.const nan)) +(assert_return (invoke "mul" (f32.const -nan) (f32.const -nan)) (f32.const -nan)) +(assert_return_nan (invoke "mul" (f32.const -nan) (f32.const nan))) +(assert_return_nan (invoke "mul" (f32.const nan) (f32.const -nan))) +(assert_return (invoke "mul" (f32.const nan) (f32.const nan)) (f32.const nan)) +(assert_return_nan (invoke "div" (f32.const -0x0p+0) (f32.const -0x0p+0))) +(assert_return_nan (invoke "div" (f32.const -0x0p+0) (f32.const 0x0p+0))) +(assert_return_nan (invoke "div" (f32.const 0x0p+0) (f32.const -0x0p+0))) +(assert_return_nan (invoke "div" (f32.const 0x0p+0) (f32.const 0x0p+0))) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -infinity)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const infinity)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -infinity)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const infinity)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1p-23)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1p-23)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-23)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-23)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-148)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-148)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-148)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-148)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -infinity)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const infinity)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -infinity)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const infinity)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1p+23)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1p+23)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p+23)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p+23)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-125)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-125)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-125)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-125)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f3p-129)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f3p-129)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f3p-129)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f3p-129)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -infinity)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const infinity)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -infinity)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const infinity)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p+125)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p+125)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p+125)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p+125)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f306p-4)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f306p-4)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f306p-4)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f306p-4)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-129)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-129)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-129)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-129)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -infinity)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const infinity)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -infinity)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const infinity)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+126)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+126)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+126)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+126)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p+1)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p+1)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+1)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+1)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f306p-3)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f306p-3)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f306p-3)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f306p-3)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-128)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-128)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-128)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-128)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -infinity)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const infinity)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -infinity)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const infinity)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+3)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+3)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+3)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+3)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.921fb8p-126)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.921fb8p-126)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb8p-126)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb8p-126)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -infinity)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const infinity)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -infinity)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const infinity)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f304p+125)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f304p+125)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f304p+125)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f304p+125)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -infinity)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const infinity)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -infinity)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const infinity)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "div" (f32.const -infinity) (f32.const -0x0p+0)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -infinity) (f32.const 0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const infinity) (f32.const -0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const infinity) (f32.const 0x0p+0)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -infinity) (f32.const -0x1p-149)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -infinity) (f32.const 0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const infinity) (f32.const -0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const infinity) (f32.const 0x1p-149)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -infinity) (f32.const -0x1p-126)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -infinity) (f32.const 0x1p-126)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const infinity) (f32.const -0x1p-126)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const infinity) (f32.const 0x1p-126)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -infinity) (f32.const -0x1p-1)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -infinity) (f32.const 0x1p-1)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const infinity) (f32.const -0x1p-1)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const infinity) (f32.const 0x1p-1)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -infinity) (f32.const -0x1p+0)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -infinity) (f32.const 0x1p+0)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const infinity) (f32.const -0x1p+0)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const infinity) (f32.const 0x1p+0)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -infinity) (f32.const -0x1.921fb6p+2)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -infinity) (f32.const 0x1.921fb6p+2)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const infinity) (f32.const -0x1.921fb6p+2)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const infinity) (f32.const 0x1.921fb6p+2)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -infinity) (f32.const -0x1.fffffep+127)) (f32.const infinity)) +(assert_return (invoke "div" (f32.const -infinity) (f32.const 0x1.fffffep+127)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const infinity) (f32.const -0x1.fffffep+127)) (f32.const -infinity)) +(assert_return (invoke "div" (f32.const infinity) (f32.const 0x1.fffffep+127)) (f32.const infinity)) +(assert_return_nan (invoke "div" (f32.const -infinity) (f32.const -infinity))) +(assert_return_nan (invoke "div" (f32.const -infinity) (f32.const infinity))) +(assert_return_nan (invoke "div" (f32.const infinity) (f32.const -infinity))) +(assert_return_nan (invoke "div" (f32.const infinity) (f32.const infinity))) +(assert_return (invoke "div" (f32.const -infinity) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const -infinity) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "div" (f32.const infinity) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const infinity) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "div" (f32.const -nan) (f32.const -0x0p+0)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const -nan) (f32.const 0x0p+0)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const nan) (f32.const -0x0p+0)) (f32.const nan)) +(assert_return (invoke "div" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan)) +(assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p-149)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p-149)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const nan) (f32.const -0x1p-149)) (f32.const nan)) +(assert_return (invoke "div" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan)) +(assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p-126)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p-126)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const nan) (f32.const -0x1p-126)) (f32.const nan)) +(assert_return (invoke "div" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan)) +(assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p-1)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p-1)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const nan) (f32.const -0x1p-1)) (f32.const nan)) +(assert_return (invoke "div" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan)) +(assert_return (invoke "div" (f32.const -nan) (f32.const -0x1p+0)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const -nan) (f32.const 0x1p+0)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const nan) (f32.const -0x1p+0)) (f32.const nan)) +(assert_return (invoke "div" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan)) +(assert_return (invoke "div" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const nan)) +(assert_return (invoke "div" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan)) +(assert_return (invoke "div" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const nan)) +(assert_return (invoke "div" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan)) +(assert_return (invoke "div" (f32.const -nan) (f32.const -infinity)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const -nan) (f32.const infinity)) (f32.const -nan)) +(assert_return (invoke "div" (f32.const nan) (f32.const -infinity)) (f32.const nan)) +(assert_return (invoke "div" (f32.const nan) (f32.const infinity)) (f32.const nan)) +(assert_return (invoke "div" (f32.const -nan) (f32.const -nan)) (f32.const -nan)) +(assert_return_nan (invoke "div" (f32.const -nan) (f32.const nan))) +(assert_return_nan (invoke "div" (f32.const nan) (f32.const -nan))) +(assert_return (invoke "div" (f32.const nan) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const infinity)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const infinity)) (f32.const 0x0p+0)) +(assert_return_nan (invoke "min" (f32.const -0x0p+0) (f32.const -nan))) +(assert_return_nan (invoke "min" (f32.const -0x0p+0) (f32.const nan))) +(assert_return_nan (invoke "min" (f32.const 0x0p+0) (f32.const -nan))) +(assert_return_nan (invoke "min" (f32.const 0x0p+0) (f32.const nan))) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const infinity)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const infinity)) (f32.const 0x1p-149)) +(assert_return_nan (invoke "min" (f32.const -0x1p-149) (f32.const -nan))) +(assert_return_nan (invoke "min" (f32.const -0x1p-149) (f32.const nan))) +(assert_return_nan (invoke "min" (f32.const 0x1p-149) (f32.const -nan))) +(assert_return_nan (invoke "min" (f32.const 0x1p-149) (f32.const nan))) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const infinity)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const infinity)) (f32.const 0x1p-126)) +(assert_return_nan (invoke "min" (f32.const -0x1p-126) (f32.const -nan))) +(assert_return_nan (invoke "min" (f32.const -0x1p-126) (f32.const nan))) +(assert_return_nan (invoke "min" (f32.const 0x1p-126) (f32.const -nan))) +(assert_return_nan (invoke "min" (f32.const 0x1p-126) (f32.const nan))) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const infinity)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const infinity)) (f32.const 0x1p-1)) +(assert_return_nan (invoke "min" (f32.const -0x1p-1) (f32.const -nan))) +(assert_return_nan (invoke "min" (f32.const -0x1p-1) (f32.const nan))) +(assert_return_nan (invoke "min" (f32.const 0x1p-1) (f32.const -nan))) +(assert_return_nan (invoke "min" (f32.const 0x1p-1) (f32.const nan))) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const infinity)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const infinity)) (f32.const 0x1p+0)) +(assert_return_nan (invoke "min" (f32.const -0x1p+0) (f32.const -nan))) +(assert_return_nan (invoke "min" (f32.const -0x1p+0) (f32.const nan))) +(assert_return_nan (invoke "min" (f32.const 0x1p+0) (f32.const -nan))) +(assert_return_nan (invoke "min" (f32.const 0x1p+0) (f32.const nan))) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const infinity)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const infinity)) (f32.const 0x1.921fb6p+2)) +(assert_return_nan (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -nan))) +(assert_return_nan (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const nan))) +(assert_return_nan (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -nan))) +(assert_return_nan (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const nan))) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const infinity)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const infinity)) (f32.const 0x1.fffffep+127)) +(assert_return_nan (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -nan))) +(assert_return_nan (invoke "min" (f32.const -0x1.fffffep+127) (f32.const nan))) +(assert_return_nan (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -nan))) +(assert_return_nan (invoke "min" (f32.const 0x1.fffffep+127) (f32.const nan))) +(assert_return (invoke "min" (f32.const -infinity) (f32.const -0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const -infinity) (f32.const 0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const infinity) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const infinity) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -infinity) (f32.const -0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const -infinity) (f32.const 0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const infinity) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const infinity) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -infinity) (f32.const -0x1p-126)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const -infinity) (f32.const 0x1p-126)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const infinity) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const infinity) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -infinity) (f32.const -0x1p-1)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const -infinity) (f32.const 0x1p-1)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const infinity) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const infinity) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "min" (f32.const -infinity) (f32.const -0x1p+0)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const -infinity) (f32.const 0x1p+0)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const infinity) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const infinity) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "min" (f32.const -infinity) (f32.const -0x1.921fb6p+2)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const -infinity) (f32.const 0x1.921fb6p+2)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const infinity) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const infinity) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -infinity) (f32.const -0x1.fffffep+127)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const -infinity) (f32.const 0x1.fffffep+127)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const infinity) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const infinity) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -infinity) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const -infinity) (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const infinity) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "min" (f32.const infinity) (f32.const infinity)) (f32.const infinity)) +(assert_return_nan (invoke "min" (f32.const -infinity) (f32.const -nan))) +(assert_return_nan (invoke "min" (f32.const -infinity) (f32.const nan))) +(assert_return_nan (invoke "min" (f32.const infinity) (f32.const -nan))) +(assert_return_nan (invoke "min" (f32.const infinity) (f32.const nan))) +(assert_return_nan (invoke "min" (f32.const -nan) (f32.const -0x0p+0))) +(assert_return_nan (invoke "min" (f32.const -nan) (f32.const 0x0p+0))) +(assert_return_nan (invoke "min" (f32.const nan) (f32.const -0x0p+0))) +(assert_return_nan (invoke "min" (f32.const nan) (f32.const 0x0p+0))) +(assert_return_nan (invoke "min" (f32.const -nan) (f32.const -0x1p-149))) +(assert_return_nan (invoke "min" (f32.const -nan) (f32.const 0x1p-149))) +(assert_return_nan (invoke "min" (f32.const nan) (f32.const -0x1p-149))) +(assert_return_nan (invoke "min" (f32.const nan) (f32.const 0x1p-149))) +(assert_return_nan (invoke "min" (f32.const -nan) (f32.const -0x1p-126))) +(assert_return_nan (invoke "min" (f32.const -nan) (f32.const 0x1p-126))) +(assert_return_nan (invoke "min" (f32.const nan) (f32.const -0x1p-126))) +(assert_return_nan (invoke "min" (f32.const nan) (f32.const 0x1p-126))) +(assert_return_nan (invoke "min" (f32.const -nan) (f32.const -0x1p-1))) +(assert_return_nan (invoke "min" (f32.const -nan) (f32.const 0x1p-1))) +(assert_return_nan (invoke "min" (f32.const nan) (f32.const -0x1p-1))) +(assert_return_nan (invoke "min" (f32.const nan) (f32.const 0x1p-1))) +(assert_return_nan (invoke "min" (f32.const -nan) (f32.const -0x1p+0))) +(assert_return_nan (invoke "min" (f32.const -nan) (f32.const 0x1p+0))) +(assert_return_nan (invoke "min" (f32.const nan) (f32.const -0x1p+0))) +(assert_return_nan (invoke "min" (f32.const nan) (f32.const 0x1p+0))) +(assert_return_nan (invoke "min" (f32.const -nan) (f32.const -0x1.921fb6p+2))) +(assert_return_nan (invoke "min" (f32.const -nan) (f32.const 0x1.921fb6p+2))) +(assert_return_nan (invoke "min" (f32.const nan) (f32.const -0x1.921fb6p+2))) +(assert_return_nan (invoke "min" (f32.const nan) (f32.const 0x1.921fb6p+2))) +(assert_return_nan (invoke "min" (f32.const -nan) (f32.const -0x1.fffffep+127))) +(assert_return_nan (invoke "min" (f32.const -nan) (f32.const 0x1.fffffep+127))) +(assert_return_nan (invoke "min" (f32.const nan) (f32.const -0x1.fffffep+127))) +(assert_return_nan (invoke "min" (f32.const nan) (f32.const 0x1.fffffep+127))) +(assert_return_nan (invoke "min" (f32.const -nan) (f32.const -infinity))) +(assert_return_nan (invoke "min" (f32.const -nan) (f32.const infinity))) +(assert_return_nan (invoke "min" (f32.const nan) (f32.const -infinity))) +(assert_return_nan (invoke "min" (f32.const nan) (f32.const infinity))) +(assert_return_nan (invoke "min" (f32.const -nan) (f32.const -nan))) +(assert_return_nan (invoke "min" (f32.const -nan) (f32.const nan))) +(assert_return_nan (invoke "min" (f32.const nan) (f32.const -nan))) +(assert_return_nan (invoke "min" (f32.const nan) (f32.const nan))) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -infinity)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -infinity)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const infinity)) (f32.const infinity)) +(assert_return_nan (invoke "max" (f32.const -0x0p+0) (f32.const -nan))) +(assert_return_nan (invoke "max" (f32.const -0x0p+0) (f32.const nan))) +(assert_return_nan (invoke "max" (f32.const 0x0p+0) (f32.const -nan))) +(assert_return_nan (invoke "max" (f32.const 0x0p+0) (f32.const nan))) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -infinity)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -infinity)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const infinity)) (f32.const infinity)) +(assert_return_nan (invoke "max" (f32.const -0x1p-149) (f32.const -nan))) +(assert_return_nan (invoke "max" (f32.const -0x1p-149) (f32.const nan))) +(assert_return_nan (invoke "max" (f32.const 0x1p-149) (f32.const -nan))) +(assert_return_nan (invoke "max" (f32.const 0x1p-149) (f32.const nan))) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -infinity)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -infinity)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const infinity)) (f32.const infinity)) +(assert_return_nan (invoke "max" (f32.const -0x1p-126) (f32.const -nan))) +(assert_return_nan (invoke "max" (f32.const -0x1p-126) (f32.const nan))) +(assert_return_nan (invoke "max" (f32.const 0x1p-126) (f32.const -nan))) +(assert_return_nan (invoke "max" (f32.const 0x1p-126) (f32.const nan))) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -infinity)) (f32.const -0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -infinity)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const infinity)) (f32.const infinity)) +(assert_return_nan (invoke "max" (f32.const -0x1p-1) (f32.const -nan))) +(assert_return_nan (invoke "max" (f32.const -0x1p-1) (f32.const nan))) +(assert_return_nan (invoke "max" (f32.const 0x1p-1) (f32.const -nan))) +(assert_return_nan (invoke "max" (f32.const 0x1p-1) (f32.const nan))) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -infinity)) (f32.const -0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -infinity)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const infinity)) (f32.const infinity)) +(assert_return_nan (invoke "max" (f32.const -0x1p+0) (f32.const -nan))) +(assert_return_nan (invoke "max" (f32.const -0x1p+0) (f32.const nan))) +(assert_return_nan (invoke "max" (f32.const 0x1p+0) (f32.const -nan))) +(assert_return_nan (invoke "max" (f32.const 0x1p+0) (f32.const nan))) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -infinity)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -infinity)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const infinity)) (f32.const infinity)) +(assert_return_nan (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -nan))) +(assert_return_nan (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const nan))) +(assert_return_nan (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -nan))) +(assert_return_nan (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const nan))) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -infinity)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -infinity)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const infinity)) (f32.const infinity)) +(assert_return_nan (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -nan))) +(assert_return_nan (invoke "max" (f32.const -0x1.fffffep+127) (f32.const nan))) +(assert_return_nan (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -nan))) +(assert_return_nan (invoke "max" (f32.const 0x1.fffffep+127) (f32.const nan))) +(assert_return (invoke "max" (f32.const -infinity) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -infinity) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const infinity) (f32.const -0x0p+0)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const infinity) (f32.const 0x0p+0)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const -infinity) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -infinity) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const infinity) (f32.const -0x1p-149)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const infinity) (f32.const 0x1p-149)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const -infinity) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -infinity) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const infinity) (f32.const -0x1p-126)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const infinity) (f32.const 0x1p-126)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const -infinity) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "max" (f32.const -infinity) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const infinity) (f32.const -0x1p-1)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const infinity) (f32.const 0x1p-1)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const -infinity) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "max" (f32.const -infinity) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const infinity) (f32.const -0x1p+0)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const infinity) (f32.const 0x1p+0)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const -infinity) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -infinity) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const infinity) (f32.const -0x1.921fb6p+2)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const infinity) (f32.const 0x1.921fb6p+2)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const -infinity) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -infinity) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const infinity) (f32.const -0x1.fffffep+127)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const infinity) (f32.const 0x1.fffffep+127)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const -infinity) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "max" (f32.const -infinity) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const infinity) (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "max" (f32.const infinity) (f32.const infinity)) (f32.const infinity)) +(assert_return_nan (invoke "max" (f32.const -infinity) (f32.const -nan))) +(assert_return_nan (invoke "max" (f32.const -infinity) (f32.const nan))) +(assert_return_nan (invoke "max" (f32.const infinity) (f32.const -nan))) +(assert_return_nan (invoke "max" (f32.const infinity) (f32.const nan))) +(assert_return_nan (invoke "max" (f32.const -nan) (f32.const -0x0p+0))) +(assert_return_nan (invoke "max" (f32.const -nan) (f32.const 0x0p+0))) +(assert_return_nan (invoke "max" (f32.const nan) (f32.const -0x0p+0))) +(assert_return_nan (invoke "max" (f32.const nan) (f32.const 0x0p+0))) +(assert_return_nan (invoke "max" (f32.const -nan) (f32.const -0x1p-149))) +(assert_return_nan (invoke "max" (f32.const -nan) (f32.const 0x1p-149))) +(assert_return_nan (invoke "max" (f32.const nan) (f32.const -0x1p-149))) +(assert_return_nan (invoke "max" (f32.const nan) (f32.const 0x1p-149))) +(assert_return_nan (invoke "max" (f32.const -nan) (f32.const -0x1p-126))) +(assert_return_nan (invoke "max" (f32.const -nan) (f32.const 0x1p-126))) +(assert_return_nan (invoke "max" (f32.const nan) (f32.const -0x1p-126))) +(assert_return_nan (invoke "max" (f32.const nan) (f32.const 0x1p-126))) +(assert_return_nan (invoke "max" (f32.const -nan) (f32.const -0x1p-1))) +(assert_return_nan (invoke "max" (f32.const -nan) (f32.const 0x1p-1))) +(assert_return_nan (invoke "max" (f32.const nan) (f32.const -0x1p-1))) +(assert_return_nan (invoke "max" (f32.const nan) (f32.const 0x1p-1))) +(assert_return_nan (invoke "max" (f32.const -nan) (f32.const -0x1p+0))) +(assert_return_nan (invoke "max" (f32.const -nan) (f32.const 0x1p+0))) +(assert_return_nan (invoke "max" (f32.const nan) (f32.const -0x1p+0))) +(assert_return_nan (invoke "max" (f32.const nan) (f32.const 0x1p+0))) +(assert_return_nan (invoke "max" (f32.const -nan) (f32.const -0x1.921fb6p+2))) +(assert_return_nan (invoke "max" (f32.const -nan) (f32.const 0x1.921fb6p+2))) +(assert_return_nan (invoke "max" (f32.const nan) (f32.const -0x1.921fb6p+2))) +(assert_return_nan (invoke "max" (f32.const nan) (f32.const 0x1.921fb6p+2))) +(assert_return_nan (invoke "max" (f32.const -nan) (f32.const -0x1.fffffep+127))) +(assert_return_nan (invoke "max" (f32.const -nan) (f32.const 0x1.fffffep+127))) +(assert_return_nan (invoke "max" (f32.const nan) (f32.const -0x1.fffffep+127))) +(assert_return_nan (invoke "max" (f32.const nan) (f32.const 0x1.fffffep+127))) +(assert_return_nan (invoke "max" (f32.const -nan) (f32.const -infinity))) +(assert_return_nan (invoke "max" (f32.const -nan) (f32.const infinity))) +(assert_return_nan (invoke "max" (f32.const nan) (f32.const -infinity))) +(assert_return_nan (invoke "max" (f32.const nan) (f32.const infinity))) +(assert_return_nan (invoke "max" (f32.const -nan) (f32.const -nan))) +(assert_return_nan (invoke "max" (f32.const -nan) (f32.const nan))) +(assert_return_nan (invoke "max" (f32.const nan) (f32.const -nan))) +(assert_return_nan (invoke "max" (f32.const nan) (f32.const nan))) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -infinity)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const infinity)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -infinity)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const infinity)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -nan)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const nan)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -nan)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const nan)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -infinity)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const infinity)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -infinity)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const infinity)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -nan)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const nan)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -nan)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const nan)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -infinity)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const infinity)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -infinity)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const infinity)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -nan)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const nan)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -nan)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const nan)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -infinity)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const infinity)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -infinity)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const infinity)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -nan)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const nan)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -nan)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const nan)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -infinity)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const infinity)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -infinity)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const infinity)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -nan)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const nan)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -nan)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const nan)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -infinity)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const infinity)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -infinity)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const infinity)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -infinity)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const infinity)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -infinity)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const infinity)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -infinity) (f32.const -0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "copysign" (f32.const -infinity) (f32.const 0x0p+0)) (f32.const infinity)) +(assert_return (invoke "copysign" (f32.const infinity) (f32.const -0x0p+0)) (f32.const -infinity)) +(assert_return (invoke "copysign" (f32.const infinity) (f32.const 0x0p+0)) (f32.const infinity)) +(assert_return (invoke "copysign" (f32.const -infinity) (f32.const -0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "copysign" (f32.const -infinity) (f32.const 0x1p-149)) (f32.const infinity)) +(assert_return (invoke "copysign" (f32.const infinity) (f32.const -0x1p-149)) (f32.const -infinity)) +(assert_return (invoke "copysign" (f32.const infinity) (f32.const 0x1p-149)) (f32.const infinity)) +(assert_return (invoke "copysign" (f32.const -infinity) (f32.const -0x1p-126)) (f32.const -infinity)) +(assert_return (invoke "copysign" (f32.const -infinity) (f32.const 0x1p-126)) (f32.const infinity)) +(assert_return (invoke "copysign" (f32.const infinity) (f32.const -0x1p-126)) (f32.const -infinity)) +(assert_return (invoke "copysign" (f32.const infinity) (f32.const 0x1p-126)) (f32.const infinity)) +(assert_return (invoke "copysign" (f32.const -infinity) (f32.const -0x1p-1)) (f32.const -infinity)) +(assert_return (invoke "copysign" (f32.const -infinity) (f32.const 0x1p-1)) (f32.const infinity)) +(assert_return (invoke "copysign" (f32.const infinity) (f32.const -0x1p-1)) (f32.const -infinity)) +(assert_return (invoke "copysign" (f32.const infinity) (f32.const 0x1p-1)) (f32.const infinity)) +(assert_return (invoke "copysign" (f32.const -infinity) (f32.const -0x1p+0)) (f32.const -infinity)) +(assert_return (invoke "copysign" (f32.const -infinity) (f32.const 0x1p+0)) (f32.const infinity)) +(assert_return (invoke "copysign" (f32.const infinity) (f32.const -0x1p+0)) (f32.const -infinity)) +(assert_return (invoke "copysign" (f32.const infinity) (f32.const 0x1p+0)) (f32.const infinity)) +(assert_return (invoke "copysign" (f32.const -infinity) (f32.const -0x1.921fb6p+2)) (f32.const -infinity)) +(assert_return (invoke "copysign" (f32.const -infinity) (f32.const 0x1.921fb6p+2)) (f32.const infinity)) +(assert_return (invoke "copysign" (f32.const infinity) (f32.const -0x1.921fb6p+2)) (f32.const -infinity)) +(assert_return (invoke "copysign" (f32.const infinity) (f32.const 0x1.921fb6p+2)) (f32.const infinity)) +(assert_return (invoke "copysign" (f32.const -infinity) (f32.const -0x1.fffffep+127)) (f32.const -infinity)) +(assert_return (invoke "copysign" (f32.const -infinity) (f32.const 0x1.fffffep+127)) (f32.const infinity)) +(assert_return (invoke "copysign" (f32.const infinity) (f32.const -0x1.fffffep+127)) (f32.const -infinity)) +(assert_return (invoke "copysign" (f32.const infinity) (f32.const 0x1.fffffep+127)) (f32.const infinity)) +(assert_return (invoke "copysign" (f32.const -infinity) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "copysign" (f32.const -infinity) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "copysign" (f32.const infinity) (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "copysign" (f32.const infinity) (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "copysign" (f32.const -infinity) (f32.const -nan)) (f32.const -infinity)) +(assert_return (invoke "copysign" (f32.const -infinity) (f32.const nan)) (f32.const infinity)) +(assert_return (invoke "copysign" (f32.const infinity) (f32.const -nan)) (f32.const -infinity)) +(assert_return (invoke "copysign" (f32.const infinity) (f32.const nan)) (f32.const infinity)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x0p+0)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const -0x0p+0)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-149)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-149)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-126)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-126)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-1)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-1)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p+0)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p+0)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const -infinity)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const infinity)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const -infinity)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const infinity)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "sqrt" (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "sqrt" (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return_nan (invoke "sqrt" (f32.const -0x1p-149))) +(assert_return (invoke "sqrt" (f32.const 0x1p-149)) (f32.const 0x1.6a09e6p-75)) +(assert_return_nan (invoke "sqrt" (f32.const -0x1p-126))) +(assert_return (invoke "sqrt" (f32.const 0x1p-126)) (f32.const 0x1p-63)) +(assert_return_nan (invoke "sqrt" (f32.const -0x1p-1))) +(assert_return (invoke "sqrt" (f32.const 0x1p-1)) (f32.const 0x1.6a09e6p-1)) +(assert_return_nan (invoke "sqrt" (f32.const -0x1p+0))) +(assert_return (invoke "sqrt" (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return_nan (invoke "sqrt" (f32.const -0x1.921fb6p+2))) +(assert_return (invoke "sqrt" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.40d932p+1)) +(assert_return_nan (invoke "sqrt" (f32.const -0x1.fffffep+127))) +(assert_return (invoke "sqrt" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+63)) +(assert_return_nan (invoke "sqrt" (f32.const -infinity))) +(assert_return (invoke "sqrt" (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "sqrt" (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "sqrt" (f32.const nan)) (f32.const nan)) +(assert_return (invoke "floor" (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "floor" (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "floor" (f32.const -0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "floor" (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "floor" (f32.const -0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "floor" (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "floor" (f32.const -0x1p-1)) (f32.const -0x1p+0)) +(assert_return (invoke "floor" (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "floor" (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "floor" (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "floor" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.cp+2)) +(assert_return (invoke "floor" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) +(assert_return (invoke "floor" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "floor" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "floor" (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "floor" (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "floor" (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "floor" (f32.const nan)) (f32.const nan)) +(assert_return (invoke "ceil" (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "ceil" (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "ceil" (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "ceil" (f32.const 0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "ceil" (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "ceil" (f32.const 0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "ceil" (f32.const -0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "ceil" (f32.const 0x1p-1)) (f32.const 0x1p+0)) +(assert_return (invoke "ceil" (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "ceil" (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "ceil" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) +(assert_return (invoke "ceil" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.cp+2)) +(assert_return (invoke "ceil" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "ceil" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "ceil" (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "ceil" (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "ceil" (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "ceil" (f32.const nan)) (f32.const nan)) +(assert_return (invoke "trunc" (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "trunc" (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "trunc" (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "trunc" (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "trunc" (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "trunc" (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "trunc" (f32.const -0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "trunc" (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "trunc" (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "trunc" (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "trunc" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) +(assert_return (invoke "trunc" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) +(assert_return (invoke "trunc" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "trunc" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "trunc" (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "trunc" (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "trunc" (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "trunc" (f32.const nan)) (f32.const nan)) +(assert_return (invoke "nearest" (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "nearest" (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "nearest" (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "nearest" (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "nearest" (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "nearest" (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "nearest" (f32.const -0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "nearest" (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "nearest" (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "nearest" (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "nearest" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) +(assert_return (invoke "nearest" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) +(assert_return (invoke "nearest" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "nearest" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "nearest" (f32.const -infinity)) (f32.const -infinity)) +(assert_return (invoke "nearest" (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "nearest" (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "nearest" (f32.const nan)) (f32.const nan)) +(assert_return (invoke "abs" (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "abs" (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "abs" (f32.const -0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "abs" (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "abs" (f32.const -0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "abs" (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "abs" (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "abs" (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "abs" (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "abs" (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "abs" (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "abs" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "abs" (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "abs" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "abs" (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "abs" (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "abs" (f32.const -nan)) (f32.const nan)) +(assert_return (invoke "abs" (f32.const nan)) (f32.const nan)) +(assert_return (invoke "neg" (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "neg" (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "neg" (f32.const -0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "neg" (f32.const 0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "neg" (f32.const -0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "neg" (f32.const 0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "neg" (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "neg" (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "neg" (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "neg" (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "neg" (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "neg" (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "neg" (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "neg" (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "neg" (f32.const -infinity)) (f32.const infinity)) +(assert_return (invoke "neg" (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "neg" (f32.const -nan)) (f32.const nan)) +(assert_return (invoke "neg" (f32.const nan)) (f32.const -nan)) diff --git a/src/binaryen/test/spec/f32_cmp.wast b/src/binaryen/test/spec/f32_cmp.wast new file mode 100644 index 0000000000..9458069c30 --- /dev/null +++ b/src/binaryen/test/spec/f32_cmp.wast @@ -0,0 +1,1956 @@ +;; Test all the f32 comparison operators on major boundary values and all +;; special values. + +(module + (func (export "eq") (param $x f32) (param $y f32) (result i32) (f32.eq (get_local $x) (get_local $y))) + (func (export "ne") (param $x f32) (param $y f32) (result i32) (f32.ne (get_local $x) (get_local $y))) + (func (export "lt") (param $x f32) (param $y f32) (result i32) (f32.lt (get_local $x) (get_local $y))) + (func (export "le") (param $x f32) (param $y f32) (result i32) (f32.le (get_local $x) (get_local $y))) + (func (export "gt") (param $x f32) (param $y f32) (result i32) (f32.gt (get_local $x) (get_local $y))) + (func (export "ge") (param $x f32) (param $y f32) (result i32) (f32.ge (get_local $x) (get_local $y))) +) + +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -infinity) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -infinity) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const infinity) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const infinity) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -infinity) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -infinity) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const infinity) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const infinity) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -infinity) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -infinity) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const infinity) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const infinity) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -infinity) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -infinity) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const infinity) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const infinity) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -infinity) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -infinity) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const infinity) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const infinity) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -infinity) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -infinity) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const infinity) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const infinity) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -infinity) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -infinity) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const infinity) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const infinity) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -infinity) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -infinity) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const infinity) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const infinity) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -infinity) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -infinity) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const infinity) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const infinity) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -infinity) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -infinity) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const infinity) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const infinity) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -infinity) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -infinity) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const infinity) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const infinity) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -infinity) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -infinity) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const infinity) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const infinity) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -infinity) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -infinity) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const infinity) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const infinity) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -infinity) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -infinity) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const infinity) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const infinity) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -infinity) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -infinity) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const infinity) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const infinity) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -infinity) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -infinity) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const infinity) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const infinity) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -infinity) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -infinity) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const infinity) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const infinity) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -infinity) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -infinity) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const infinity) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const infinity) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -infinity) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -infinity) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const infinity) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const infinity) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -infinity) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -infinity) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const infinity) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const infinity) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -infinity) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -infinity) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const infinity) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const infinity) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -infinity) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -infinity) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const infinity) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const infinity) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -infinity) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -infinity) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const infinity) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const infinity) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -infinity) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -infinity) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const infinity) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const infinity) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -infinity) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -infinity) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const infinity) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const infinity) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -infinity) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -infinity) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const infinity) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const infinity) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -infinity) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -infinity) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const infinity) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const infinity) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -infinity) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -infinity) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const infinity) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const infinity) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -infinity) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -infinity) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const infinity) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const infinity) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -infinity) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -infinity) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const infinity) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const infinity) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -infinity) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -infinity) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const infinity) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const infinity) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -infinity) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -infinity) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const infinity) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const infinity) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -infinity) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -infinity) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const infinity) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const infinity) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -infinity) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -infinity) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const infinity) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const infinity) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -infinity) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -infinity) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f32.const infinity) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f32.const infinity) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -infinity) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -infinity) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const infinity) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const infinity) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -infinity) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -infinity) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const infinity) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const infinity) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -infinity) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -infinity) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const infinity) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const infinity) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -infinity) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -infinity) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const infinity) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const infinity) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -infinity) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -infinity) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const infinity) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const infinity) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -infinity) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -infinity) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const infinity) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const infinity) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -infinity) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -infinity) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const infinity) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const infinity) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -infinity) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -infinity) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const infinity) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const infinity) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -infinity) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -infinity) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const infinity) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const infinity) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -infinity) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -infinity) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const infinity) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const infinity) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -infinity) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -infinity) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const infinity) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const infinity) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -infinity) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -infinity) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const infinity) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const infinity) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -infinity) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -infinity) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const infinity) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const infinity) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -infinity) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -infinity) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const infinity) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const infinity) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -infinity) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -infinity) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const infinity) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const infinity) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -infinity) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -infinity) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const infinity) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const infinity) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -infinity) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -infinity) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const infinity) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const infinity) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -infinity) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -infinity) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const infinity) (f32.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const infinity) (f32.const infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -infinity) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -infinity) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const infinity) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const infinity) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const nan)) (i32.const 0)) diff --git a/src/binaryen/test/spec/f64.load32.fail.wast b/src/binaryen/test/spec/f64.load32.fail.wast new file mode 100644 index 0000000000..38811ff353 --- /dev/null +++ b/src/binaryen/test/spec/f64.load32.fail.wast @@ -0,0 +1 @@ +(module (memory 1) (func (param i32) (result f64) (f64.load32 (get_local 0)))) diff --git a/src/binaryen/test/spec/f64.load64.fail.wast b/src/binaryen/test/spec/f64.load64.fail.wast new file mode 100644 index 0000000000..f3c30ef345 --- /dev/null +++ b/src/binaryen/test/spec/f64.load64.fail.wast @@ -0,0 +1 @@ +(module (memory 1) (func (param i32) (result f64) (f64.load64 (get_local 0)))) diff --git a/src/binaryen/test/spec/f64.store32.fail.wast b/src/binaryen/test/spec/f64.store32.fail.wast new file mode 100644 index 0000000000..92858a35e0 --- /dev/null +++ b/src/binaryen/test/spec/f64.store32.fail.wast @@ -0,0 +1 @@ +(module (memory 1) (func (param i32) (param f32) (f64.store32 (get_local 0) (get_local 1)))) diff --git a/src/binaryen/test/spec/f64.store64.fail.wast b/src/binaryen/test/spec/f64.store64.fail.wast new file mode 100644 index 0000000000..2b49017fe1 --- /dev/null +++ b/src/binaryen/test/spec/f64.store64.fail.wast @@ -0,0 +1 @@ +(module (memory 1) (func (param i32) (param f64) (f64.store64 (get_local 0) (get_local 1)))) diff --git a/src/binaryen/test/spec/f64.wast b/src/binaryen/test/spec/f64.wast new file mode 100644 index 0000000000..26a058a253 --- /dev/null +++ b/src/binaryen/test/spec/f64.wast @@ -0,0 +1,2414 @@ +;; Test all the f64 operators on major boundary values and all special +;; values (except comparison operators, which are tested in f64_cmp.wast). + +(module + (func (export "add") (param $x f64) (param $y f64) (result f64) (f64.add (get_local $x) (get_local $y))) + (func (export "sub") (param $x f64) (param $y f64) (result f64) (f64.sub (get_local $x) (get_local $y))) + (func (export "mul") (param $x f64) (param $y f64) (result f64) (f64.mul (get_local $x) (get_local $y))) + (func (export "div") (param $x f64) (param $y f64) (result f64) (f64.div (get_local $x) (get_local $y))) + (func (export "sqrt") (param $x f64) (result f64) (f64.sqrt (get_local $x))) + (func (export "min") (param $x f64) (param $y f64) (result f64) (f64.min (get_local $x) (get_local $y))) + (func (export "max") (param $x f64) (param $y f64) (result f64) (f64.max (get_local $x) (get_local $y))) + (func (export "ceil") (param $x f64) (result f64) (f64.ceil (get_local $x))) + (func (export "floor") (param $x f64) (result f64) (f64.floor (get_local $x))) + (func (export "trunc") (param $x f64) (result f64) (f64.trunc (get_local $x))) + (func (export "nearest") (param $x f64) (result f64) (f64.nearest (get_local $x))) + (func (export "abs") (param $x f64) (result f64) (f64.abs (get_local $x))) + (func (export "neg") (param $x f64) (result f64) (f64.neg (get_local $x))) + (func (export "copysign") (param $x f64) (param $y f64) (result f64) (f64.copysign (get_local $x) (get_local $y))) +) + +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000002p-1022)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000002p-1022)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.fffffffffffffp-1022)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.fffffffffffffp-1022)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.fffffffffffffp-1022)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.fffffffffffffp-1022)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1021)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1021)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1.8p+0)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1.8p+0)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.b21fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.721fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.721fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.b21fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1.8p+0)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1.8p+0)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+1)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+1)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.d21fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.521fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.521fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.d21fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.b21fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.721fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.721fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.b21fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.d21fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.521fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.521fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.d21fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+3)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+3)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "add" (f64.const -infinity) (f64.const -0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const -infinity) (f64.const 0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const infinity) (f64.const -0x0p+0)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const infinity) (f64.const 0x0p+0)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const -infinity) (f64.const -0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const -infinity) (f64.const 0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const infinity) (f64.const -0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const infinity) (f64.const 0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const -infinity) (f64.const -0x1p-1022)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const -infinity) (f64.const 0x1p-1022)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const infinity) (f64.const -0x1p-1022)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const infinity) (f64.const 0x1p-1022)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const -infinity) (f64.const -0x1p-1)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const -infinity) (f64.const 0x1p-1)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const infinity) (f64.const -0x1p-1)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const infinity) (f64.const 0x1p-1)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const -infinity) (f64.const -0x1p+0)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const -infinity) (f64.const 0x1p+0)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const infinity) (f64.const -0x1p+0)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const infinity) (f64.const 0x1p+0)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const -infinity) (f64.const -0x1.921fb54442d18p+2)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const -infinity) (f64.const 0x1.921fb54442d18p+2)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const infinity) (f64.const -0x1.921fb54442d18p+2)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const infinity) (f64.const 0x1.921fb54442d18p+2)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const -infinity) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const -infinity) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -infinity)) +(assert_return (invoke "add" (f64.const infinity) (f64.const -0x1.fffffffffffffp+1023)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const infinity) (f64.const 0x1.fffffffffffffp+1023)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const -infinity) (f64.const -infinity)) (f64.const -infinity)) +(assert_return_nan (invoke "add" (f64.const -infinity) (f64.const infinity))) +(assert_return_nan (invoke "add" (f64.const infinity) (f64.const -infinity))) +(assert_return (invoke "add" (f64.const infinity) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "add" (f64.const -infinity) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const -infinity) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "add" (f64.const infinity) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const infinity) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "add" (f64.const -nan) (f64.const -0x0p+0)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const -nan) (f64.const 0x0p+0)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan)) +(assert_return (invoke "add" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan)) +(assert_return (invoke "add" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan)) +(assert_return (invoke "add" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan)) +(assert_return (invoke "add" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan)) +(assert_return (invoke "add" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan)) +(assert_return (invoke "add" (f64.const -nan) (f64.const -0x1p-1)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const -nan) (f64.const 0x1p-1)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan)) +(assert_return (invoke "add" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan)) +(assert_return (invoke "add" (f64.const -nan) (f64.const -0x1p+0)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const -nan) (f64.const 0x1p+0)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan)) +(assert_return (invoke "add" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan)) +(assert_return (invoke "add" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan)) +(assert_return (invoke "add" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan)) +(assert_return (invoke "add" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan)) +(assert_return (invoke "add" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan)) +(assert_return (invoke "add" (f64.const -nan) (f64.const -infinity)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const -nan) (f64.const infinity)) (f64.const -nan)) +(assert_return (invoke "add" (f64.const nan) (f64.const -infinity)) (f64.const nan)) +(assert_return (invoke "add" (f64.const nan) (f64.const infinity)) (f64.const nan)) +(assert_return (invoke "add" (f64.const -nan) (f64.const -nan)) (f64.const -nan)) +(assert_return_nan (invoke "add" (f64.const -nan) (f64.const nan))) +(assert_return_nan (invoke "add" (f64.const nan) (f64.const -nan))) +(assert_return (invoke "add" (f64.const nan) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000002p-1022)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000002p-1022)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0.fffffffffffffp-1022)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x1.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x1.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0.fffffffffffffp-1022)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.fffffffffffffp-1022)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.fffffffffffffp-1022)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-1021)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-1021)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1.8p+0)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1.8p+0)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.721fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.b21fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.b21fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.721fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1.8p+0)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1.8p+0)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+1)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+1)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.521fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.d21fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.d21fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.521fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.721fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.b21fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.b21fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.721fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.521fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.d21fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.d21fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.521fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+3)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+3)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const -infinity) (f64.const -0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const -infinity) (f64.const 0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const infinity) (f64.const -0x0p+0)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const infinity) (f64.const 0x0p+0)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const -infinity) (f64.const -0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const -infinity) (f64.const 0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const infinity) (f64.const -0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const infinity) (f64.const 0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const -infinity) (f64.const -0x1p-1022)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const -infinity) (f64.const 0x1p-1022)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const infinity) (f64.const -0x1p-1022)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const infinity) (f64.const 0x1p-1022)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const -infinity) (f64.const -0x1p-1)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const -infinity) (f64.const 0x1p-1)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const infinity) (f64.const -0x1p-1)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const infinity) (f64.const 0x1p-1)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const -infinity) (f64.const -0x1p+0)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const -infinity) (f64.const 0x1p+0)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const infinity) (f64.const -0x1p+0)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const infinity) (f64.const 0x1p+0)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const -infinity) (f64.const -0x1.921fb54442d18p+2)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const -infinity) (f64.const 0x1.921fb54442d18p+2)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const infinity) (f64.const -0x1.921fb54442d18p+2)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const infinity) (f64.const 0x1.921fb54442d18p+2)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const -infinity) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const -infinity) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const infinity) (f64.const -0x1.fffffffffffffp+1023)) (f64.const infinity)) +(assert_return (invoke "sub" (f64.const infinity) (f64.const 0x1.fffffffffffffp+1023)) (f64.const infinity)) +(assert_return_nan (invoke "sub" (f64.const -infinity) (f64.const -infinity))) +(assert_return (invoke "sub" (f64.const -infinity) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "sub" (f64.const infinity) (f64.const -infinity)) (f64.const infinity)) +(assert_return_nan (invoke "sub" (f64.const infinity) (f64.const infinity))) +(assert_return (invoke "sub" (f64.const -infinity) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const -infinity) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const infinity) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const infinity) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const -nan) (f64.const -0x0p+0)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const -nan) (f64.const 0x0p+0)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1p-1)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1p-1)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1p+0)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1p+0)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const -nan) (f64.const -infinity)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const -nan) (f64.const infinity)) (f64.const -nan)) +(assert_return (invoke "sub" (f64.const nan) (f64.const -infinity)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const nan) (f64.const infinity)) (f64.const nan)) +(assert_return (invoke "sub" (f64.const -nan) (f64.const -nan)) (f64.const -nan)) +(assert_return_nan (invoke "sub" (f64.const -nan) (f64.const nan))) +(assert_return_nan (invoke "sub" (f64.const nan) (f64.const -nan))) +(assert_return (invoke "sub" (f64.const nan) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return_nan (invoke "mul" (f64.const -0x0p+0) (f64.const -infinity))) +(assert_return_nan (invoke "mul" (f64.const -0x0p+0) (f64.const infinity))) +(assert_return_nan (invoke "mul" (f64.const 0x0p+0) (f64.const -infinity))) +(assert_return_nan (invoke "mul" (f64.const 0x0p+0) (f64.const infinity))) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000006p-1022)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000006p-1022)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000006p-1022)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000006p-1022)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp-51)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp-51)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp-51)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp-51)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x0.8p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x0.8p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x0.8p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x0.8p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p-1020)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p-1020)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p-1020)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p-1020)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x0.8p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x0.8p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x0.8p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x0.8p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p-2)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p-2)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-2)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-2)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+1)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+1)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+1)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+1)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1022)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1022)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1022)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1022)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000006p-1022)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000006p-1022)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000006p-1022)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000006p-1022)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p-1020)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p-1020)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p-1020)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p-1020)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+1)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+1)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+1)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+1)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.3bd3cc9be45dep+5)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.3bd3cc9be45dep+5)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.3bd3cc9be45dep+5)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.3bd3cc9be45dep+5)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp-51)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp-51)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp-51)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp-51)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1022)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1022)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1022)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1022)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan)) +(assert_return_nan (invoke "mul" (f64.const -infinity) (f64.const -0x0p+0))) +(assert_return_nan (invoke "mul" (f64.const -infinity) (f64.const 0x0p+0))) +(assert_return_nan (invoke "mul" (f64.const infinity) (f64.const -0x0p+0))) +(assert_return_nan (invoke "mul" (f64.const infinity) (f64.const 0x0p+0))) +(assert_return (invoke "mul" (f64.const -infinity) (f64.const -0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -infinity) (f64.const 0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const infinity) (f64.const -0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const infinity) (f64.const 0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -infinity) (f64.const -0x1p-1022)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -infinity) (f64.const 0x1p-1022)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const infinity) (f64.const -0x1p-1022)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const infinity) (f64.const 0x1p-1022)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -infinity) (f64.const -0x1p-1)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -infinity) (f64.const 0x1p-1)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const infinity) (f64.const -0x1p-1)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const infinity) (f64.const 0x1p-1)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -infinity) (f64.const -0x1p+0)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -infinity) (f64.const 0x1p+0)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const infinity) (f64.const -0x1p+0)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const infinity) (f64.const 0x1p+0)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -infinity) (f64.const -0x1.921fb54442d18p+2)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -infinity) (f64.const 0x1.921fb54442d18p+2)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const infinity) (f64.const -0x1.921fb54442d18p+2)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const infinity) (f64.const 0x1.921fb54442d18p+2)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -infinity) (f64.const -0x1.fffffffffffffp+1023)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -infinity) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const infinity) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const infinity) (f64.const 0x1.fffffffffffffp+1023)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -infinity) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -infinity) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const infinity) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "mul" (f64.const infinity) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "mul" (f64.const -infinity) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const -infinity) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const infinity) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const infinity) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const -nan) (f64.const -0x0p+0)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const -nan) (f64.const 0x0p+0)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1p-1)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1p-1)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1p+0)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1p+0)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const -nan) (f64.const -infinity)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const -nan) (f64.const infinity)) (f64.const -nan)) +(assert_return (invoke "mul" (f64.const nan) (f64.const -infinity)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const nan) (f64.const infinity)) (f64.const nan)) +(assert_return (invoke "mul" (f64.const -nan) (f64.const -nan)) (f64.const -nan)) +(assert_return_nan (invoke "mul" (f64.const -nan) (f64.const nan))) +(assert_return_nan (invoke "mul" (f64.const nan) (f64.const -nan))) +(assert_return (invoke "mul" (f64.const nan) (f64.const nan)) (f64.const nan)) +(assert_return_nan (invoke "div" (f64.const -0x0p+0) (f64.const -0x0p+0))) +(assert_return_nan (invoke "div" (f64.const -0x0p+0) (f64.const 0x0p+0))) +(assert_return_nan (invoke "div" (f64.const 0x0p+0) (f64.const -0x0p+0))) +(assert_return_nan (invoke "div" (f64.const 0x0p+0) (f64.const 0x0p+0))) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -infinity)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const infinity)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -infinity)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const infinity)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-52)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-52)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-52)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-52)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0.0000000000002p-1022)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0.0000000000002p-1022)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000002p-1022)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000002p-1022)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -infinity)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const infinity)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -infinity)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const infinity)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+52)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+52)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+52)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+52)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1021)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1021)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1021)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1021)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.28be60db9391p-1022)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.28be60db9391p-1022)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.28be60db9391p-1022)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.28be60db9391p-1022)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -infinity)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const infinity)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -infinity)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const infinity)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p+1021)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p+1021)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p+1021)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p+1021)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-4)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-4)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-4)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-4)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.2p-1022)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.2p-1022)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.2p-1022)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.2p-1022)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -infinity)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const infinity)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -infinity)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const infinity)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+1022)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+1022)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+1022)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+1022)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p+1)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p+1)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+1)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+1)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-3)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-3)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-3)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-3)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.4p-1022)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.4p-1022)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.4p-1022)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.4p-1022)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -infinity)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const infinity)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -infinity)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const infinity)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+3)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+3)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+3)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+3)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d19p-1022)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d19p-1022)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d19p-1022)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d19p-1022)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -infinity)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const infinity)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -infinity)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const infinity)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c882p+1021)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c882p+1021)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c882p+1021)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c882p+1021)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -infinity)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const infinity)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -infinity)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const infinity)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "div" (f64.const -infinity) (f64.const -0x0p+0)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -infinity) (f64.const 0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const infinity) (f64.const -0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const infinity) (f64.const 0x0p+0)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -infinity) (f64.const -0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -infinity) (f64.const 0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const infinity) (f64.const -0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const infinity) (f64.const 0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -infinity) (f64.const -0x1p-1022)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -infinity) (f64.const 0x1p-1022)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const infinity) (f64.const -0x1p-1022)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const infinity) (f64.const 0x1p-1022)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -infinity) (f64.const -0x1p-1)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -infinity) (f64.const 0x1p-1)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const infinity) (f64.const -0x1p-1)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const infinity) (f64.const 0x1p-1)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -infinity) (f64.const -0x1p+0)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -infinity) (f64.const 0x1p+0)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const infinity) (f64.const -0x1p+0)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const infinity) (f64.const 0x1p+0)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -infinity) (f64.const -0x1.921fb54442d18p+2)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -infinity) (f64.const 0x1.921fb54442d18p+2)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const infinity) (f64.const -0x1.921fb54442d18p+2)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const infinity) (f64.const 0x1.921fb54442d18p+2)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -infinity) (f64.const -0x1.fffffffffffffp+1023)) (f64.const infinity)) +(assert_return (invoke "div" (f64.const -infinity) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const infinity) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -infinity)) +(assert_return (invoke "div" (f64.const infinity) (f64.const 0x1.fffffffffffffp+1023)) (f64.const infinity)) +(assert_return_nan (invoke "div" (f64.const -infinity) (f64.const -infinity))) +(assert_return_nan (invoke "div" (f64.const -infinity) (f64.const infinity))) +(assert_return_nan (invoke "div" (f64.const infinity) (f64.const -infinity))) +(assert_return_nan (invoke "div" (f64.const infinity) (f64.const infinity))) +(assert_return (invoke "div" (f64.const -infinity) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const -infinity) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "div" (f64.const infinity) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const infinity) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "div" (f64.const -nan) (f64.const -0x0p+0)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const -nan) (f64.const 0x0p+0)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const nan) (f64.const -0x0p+0)) (f64.const nan)) +(assert_return (invoke "div" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan)) +(assert_return (invoke "div" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const nan)) +(assert_return (invoke "div" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan)) +(assert_return (invoke "div" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const nan) (f64.const -0x1p-1022)) (f64.const nan)) +(assert_return (invoke "div" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan)) +(assert_return (invoke "div" (f64.const -nan) (f64.const -0x1p-1)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const -nan) (f64.const 0x1p-1)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const nan) (f64.const -0x1p-1)) (f64.const nan)) +(assert_return (invoke "div" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan)) +(assert_return (invoke "div" (f64.const -nan) (f64.const -0x1p+0)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const -nan) (f64.const 0x1p+0)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const nan) (f64.const -0x1p+0)) (f64.const nan)) +(assert_return (invoke "div" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan)) +(assert_return (invoke "div" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const nan)) +(assert_return (invoke "div" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan)) +(assert_return (invoke "div" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const nan)) +(assert_return (invoke "div" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan)) +(assert_return (invoke "div" (f64.const -nan) (f64.const -infinity)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const -nan) (f64.const infinity)) (f64.const -nan)) +(assert_return (invoke "div" (f64.const nan) (f64.const -infinity)) (f64.const nan)) +(assert_return (invoke "div" (f64.const nan) (f64.const infinity)) (f64.const nan)) +(assert_return (invoke "div" (f64.const -nan) (f64.const -nan)) (f64.const -nan)) +(assert_return_nan (invoke "div" (f64.const -nan) (f64.const nan))) +(assert_return_nan (invoke "div" (f64.const nan) (f64.const -nan))) +(assert_return (invoke "div" (f64.const nan) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const infinity)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const infinity)) (f64.const 0x0p+0)) +(assert_return_nan (invoke "min" (f64.const -0x0p+0) (f64.const -nan))) +(assert_return_nan (invoke "min" (f64.const -0x0p+0) (f64.const nan))) +(assert_return_nan (invoke "min" (f64.const 0x0p+0) (f64.const -nan))) +(assert_return_nan (invoke "min" (f64.const 0x0p+0) (f64.const nan))) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const infinity)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const infinity)) (f64.const 0x0.0000000000001p-1022)) +(assert_return_nan (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -nan))) +(assert_return_nan (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const nan))) +(assert_return_nan (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -nan))) +(assert_return_nan (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const nan))) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const infinity)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const infinity)) (f64.const 0x1p-1022)) +(assert_return_nan (invoke "min" (f64.const -0x1p-1022) (f64.const -nan))) +(assert_return_nan (invoke "min" (f64.const -0x1p-1022) (f64.const nan))) +(assert_return_nan (invoke "min" (f64.const 0x1p-1022) (f64.const -nan))) +(assert_return_nan (invoke "min" (f64.const 0x1p-1022) (f64.const nan))) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const infinity)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const infinity)) (f64.const 0x1p-1)) +(assert_return_nan (invoke "min" (f64.const -0x1p-1) (f64.const -nan))) +(assert_return_nan (invoke "min" (f64.const -0x1p-1) (f64.const nan))) +(assert_return_nan (invoke "min" (f64.const 0x1p-1) (f64.const -nan))) +(assert_return_nan (invoke "min" (f64.const 0x1p-1) (f64.const nan))) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const infinity)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const infinity)) (f64.const 0x1p+0)) +(assert_return_nan (invoke "min" (f64.const -0x1p+0) (f64.const -nan))) +(assert_return_nan (invoke "min" (f64.const -0x1p+0) (f64.const nan))) +(assert_return_nan (invoke "min" (f64.const 0x1p+0) (f64.const -nan))) +(assert_return_nan (invoke "min" (f64.const 0x1p+0) (f64.const nan))) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const infinity)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const infinity)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return_nan (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan))) +(assert_return_nan (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const nan))) +(assert_return_nan (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan))) +(assert_return_nan (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const nan))) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const infinity)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const infinity)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return_nan (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan))) +(assert_return_nan (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan))) +(assert_return_nan (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan))) +(assert_return_nan (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan))) +(assert_return (invoke "min" (f64.const -infinity) (f64.const -0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const -infinity) (f64.const 0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const infinity) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const infinity) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -infinity) (f64.const -0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const -infinity) (f64.const 0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const infinity) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const infinity) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -infinity) (f64.const -0x1p-1022)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const -infinity) (f64.const 0x1p-1022)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const infinity) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const infinity) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -infinity) (f64.const -0x1p-1)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const -infinity) (f64.const 0x1p-1)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const infinity) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const infinity) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "min" (f64.const -infinity) (f64.const -0x1p+0)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const -infinity) (f64.const 0x1p+0)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const infinity) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const infinity) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "min" (f64.const -infinity) (f64.const -0x1.921fb54442d18p+2)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const -infinity) (f64.const 0x1.921fb54442d18p+2)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const infinity) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const infinity) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -infinity) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const -infinity) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const infinity) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const infinity) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -infinity) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const -infinity) (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const infinity) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "min" (f64.const infinity) (f64.const infinity)) (f64.const infinity)) +(assert_return_nan (invoke "min" (f64.const -infinity) (f64.const -nan))) +(assert_return_nan (invoke "min" (f64.const -infinity) (f64.const nan))) +(assert_return_nan (invoke "min" (f64.const infinity) (f64.const -nan))) +(assert_return_nan (invoke "min" (f64.const infinity) (f64.const nan))) +(assert_return_nan (invoke "min" (f64.const -nan) (f64.const -0x0p+0))) +(assert_return_nan (invoke "min" (f64.const -nan) (f64.const 0x0p+0))) +(assert_return_nan (invoke "min" (f64.const nan) (f64.const -0x0p+0))) +(assert_return_nan (invoke "min" (f64.const nan) (f64.const 0x0p+0))) +(assert_return_nan (invoke "min" (f64.const -nan) (f64.const -0x0.0000000000001p-1022))) +(assert_return_nan (invoke "min" (f64.const -nan) (f64.const 0x0.0000000000001p-1022))) +(assert_return_nan (invoke "min" (f64.const nan) (f64.const -0x0.0000000000001p-1022))) +(assert_return_nan (invoke "min" (f64.const nan) (f64.const 0x0.0000000000001p-1022))) +(assert_return_nan (invoke "min" (f64.const -nan) (f64.const -0x1p-1022))) +(assert_return_nan (invoke "min" (f64.const -nan) (f64.const 0x1p-1022))) +(assert_return_nan (invoke "min" (f64.const nan) (f64.const -0x1p-1022))) +(assert_return_nan (invoke "min" (f64.const nan) (f64.const 0x1p-1022))) +(assert_return_nan (invoke "min" (f64.const -nan) (f64.const -0x1p-1))) +(assert_return_nan (invoke "min" (f64.const -nan) (f64.const 0x1p-1))) +(assert_return_nan (invoke "min" (f64.const nan) (f64.const -0x1p-1))) +(assert_return_nan (invoke "min" (f64.const nan) (f64.const 0x1p-1))) +(assert_return_nan (invoke "min" (f64.const -nan) (f64.const -0x1p+0))) +(assert_return_nan (invoke "min" (f64.const -nan) (f64.const 0x1p+0))) +(assert_return_nan (invoke "min" (f64.const nan) (f64.const -0x1p+0))) +(assert_return_nan (invoke "min" (f64.const nan) (f64.const 0x1p+0))) +(assert_return_nan (invoke "min" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_nan (invoke "min" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_nan (invoke "min" (f64.const nan) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_nan (invoke "min" (f64.const nan) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_nan (invoke "min" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_nan (invoke "min" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_nan (invoke "min" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_nan (invoke "min" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_nan (invoke "min" (f64.const -nan) (f64.const -infinity))) +(assert_return_nan (invoke "min" (f64.const -nan) (f64.const infinity))) +(assert_return_nan (invoke "min" (f64.const nan) (f64.const -infinity))) +(assert_return_nan (invoke "min" (f64.const nan) (f64.const infinity))) +(assert_return_nan (invoke "min" (f64.const -nan) (f64.const -nan))) +(assert_return_nan (invoke "min" (f64.const -nan) (f64.const nan))) +(assert_return_nan (invoke "min" (f64.const nan) (f64.const -nan))) +(assert_return_nan (invoke "min" (f64.const nan) (f64.const nan))) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -infinity)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -infinity)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const infinity)) (f64.const infinity)) +(assert_return_nan (invoke "max" (f64.const -0x0p+0) (f64.const -nan))) +(assert_return_nan (invoke "max" (f64.const -0x0p+0) (f64.const nan))) +(assert_return_nan (invoke "max" (f64.const 0x0p+0) (f64.const -nan))) +(assert_return_nan (invoke "max" (f64.const 0x0p+0) (f64.const nan))) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -infinity)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -infinity)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const infinity)) (f64.const infinity)) +(assert_return_nan (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -nan))) +(assert_return_nan (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const nan))) +(assert_return_nan (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -nan))) +(assert_return_nan (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const nan))) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -infinity)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -infinity)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const infinity)) (f64.const infinity)) +(assert_return_nan (invoke "max" (f64.const -0x1p-1022) (f64.const -nan))) +(assert_return_nan (invoke "max" (f64.const -0x1p-1022) (f64.const nan))) +(assert_return_nan (invoke "max" (f64.const 0x1p-1022) (f64.const -nan))) +(assert_return_nan (invoke "max" (f64.const 0x1p-1022) (f64.const nan))) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -infinity)) (f64.const -0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -infinity)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const infinity)) (f64.const infinity)) +(assert_return_nan (invoke "max" (f64.const -0x1p-1) (f64.const -nan))) +(assert_return_nan (invoke "max" (f64.const -0x1p-1) (f64.const nan))) +(assert_return_nan (invoke "max" (f64.const 0x1p-1) (f64.const -nan))) +(assert_return_nan (invoke "max" (f64.const 0x1p-1) (f64.const nan))) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -infinity)) (f64.const -0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -infinity)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const infinity)) (f64.const infinity)) +(assert_return_nan (invoke "max" (f64.const -0x1p+0) (f64.const -nan))) +(assert_return_nan (invoke "max" (f64.const -0x1p+0) (f64.const nan))) +(assert_return_nan (invoke "max" (f64.const 0x1p+0) (f64.const -nan))) +(assert_return_nan (invoke "max" (f64.const 0x1p+0) (f64.const nan))) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -infinity)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -infinity)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const infinity)) (f64.const infinity)) +(assert_return_nan (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan))) +(assert_return_nan (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const nan))) +(assert_return_nan (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan))) +(assert_return_nan (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const nan))) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -infinity)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -infinity)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const infinity)) (f64.const infinity)) +(assert_return_nan (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan))) +(assert_return_nan (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan))) +(assert_return_nan (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan))) +(assert_return_nan (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan))) +(assert_return (invoke "max" (f64.const -infinity) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -infinity) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const infinity) (f64.const -0x0p+0)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const infinity) (f64.const 0x0p+0)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const -infinity) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -infinity) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const infinity) (f64.const -0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const infinity) (f64.const 0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const -infinity) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -infinity) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const infinity) (f64.const -0x1p-1022)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const infinity) (f64.const 0x1p-1022)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const -infinity) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "max" (f64.const -infinity) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const infinity) (f64.const -0x1p-1)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const infinity) (f64.const 0x1p-1)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const -infinity) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "max" (f64.const -infinity) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const infinity) (f64.const -0x1p+0)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const infinity) (f64.const 0x1p+0)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const -infinity) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -infinity) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const infinity) (f64.const -0x1.921fb54442d18p+2)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const infinity) (f64.const 0x1.921fb54442d18p+2)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const -infinity) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -infinity) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const infinity) (f64.const -0x1.fffffffffffffp+1023)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const infinity) (f64.const 0x1.fffffffffffffp+1023)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const -infinity) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "max" (f64.const -infinity) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const infinity) (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "max" (f64.const infinity) (f64.const infinity)) (f64.const infinity)) +(assert_return_nan (invoke "max" (f64.const -infinity) (f64.const -nan))) +(assert_return_nan (invoke "max" (f64.const -infinity) (f64.const nan))) +(assert_return_nan (invoke "max" (f64.const infinity) (f64.const -nan))) +(assert_return_nan (invoke "max" (f64.const infinity) (f64.const nan))) +(assert_return_nan (invoke "max" (f64.const -nan) (f64.const -0x0p+0))) +(assert_return_nan (invoke "max" (f64.const -nan) (f64.const 0x0p+0))) +(assert_return_nan (invoke "max" (f64.const nan) (f64.const -0x0p+0))) +(assert_return_nan (invoke "max" (f64.const nan) (f64.const 0x0p+0))) +(assert_return_nan (invoke "max" (f64.const -nan) (f64.const -0x0.0000000000001p-1022))) +(assert_return_nan (invoke "max" (f64.const -nan) (f64.const 0x0.0000000000001p-1022))) +(assert_return_nan (invoke "max" (f64.const nan) (f64.const -0x0.0000000000001p-1022))) +(assert_return_nan (invoke "max" (f64.const nan) (f64.const 0x0.0000000000001p-1022))) +(assert_return_nan (invoke "max" (f64.const -nan) (f64.const -0x1p-1022))) +(assert_return_nan (invoke "max" (f64.const -nan) (f64.const 0x1p-1022))) +(assert_return_nan (invoke "max" (f64.const nan) (f64.const -0x1p-1022))) +(assert_return_nan (invoke "max" (f64.const nan) (f64.const 0x1p-1022))) +(assert_return_nan (invoke "max" (f64.const -nan) (f64.const -0x1p-1))) +(assert_return_nan (invoke "max" (f64.const -nan) (f64.const 0x1p-1))) +(assert_return_nan (invoke "max" (f64.const nan) (f64.const -0x1p-1))) +(assert_return_nan (invoke "max" (f64.const nan) (f64.const 0x1p-1))) +(assert_return_nan (invoke "max" (f64.const -nan) (f64.const -0x1p+0))) +(assert_return_nan (invoke "max" (f64.const -nan) (f64.const 0x1p+0))) +(assert_return_nan (invoke "max" (f64.const nan) (f64.const -0x1p+0))) +(assert_return_nan (invoke "max" (f64.const nan) (f64.const 0x1p+0))) +(assert_return_nan (invoke "max" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_nan (invoke "max" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_nan (invoke "max" (f64.const nan) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_nan (invoke "max" (f64.const nan) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_nan (invoke "max" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_nan (invoke "max" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_nan (invoke "max" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_nan (invoke "max" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_nan (invoke "max" (f64.const -nan) (f64.const -infinity))) +(assert_return_nan (invoke "max" (f64.const -nan) (f64.const infinity))) +(assert_return_nan (invoke "max" (f64.const nan) (f64.const -infinity))) +(assert_return_nan (invoke "max" (f64.const nan) (f64.const infinity))) +(assert_return_nan (invoke "max" (f64.const -nan) (f64.const -nan))) +(assert_return_nan (invoke "max" (f64.const -nan) (f64.const nan))) +(assert_return_nan (invoke "max" (f64.const nan) (f64.const -nan))) +(assert_return_nan (invoke "max" (f64.const nan) (f64.const nan))) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -infinity)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const infinity)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -infinity)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const infinity)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -nan)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const nan)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -nan)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const nan)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -infinity)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const infinity)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -infinity)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const infinity)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -infinity)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const infinity)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -infinity)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const infinity)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const nan)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const nan)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -infinity)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const infinity)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -infinity)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const infinity)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -nan)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const nan)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -nan)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const nan)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -infinity)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const infinity)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -infinity)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const infinity)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -nan)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const nan)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -nan)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const nan)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -infinity)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const infinity)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -infinity)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const infinity)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -infinity)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const infinity)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -infinity)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const infinity)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -infinity) (f64.const -0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "copysign" (f64.const -infinity) (f64.const 0x0p+0)) (f64.const infinity)) +(assert_return (invoke "copysign" (f64.const infinity) (f64.const -0x0p+0)) (f64.const -infinity)) +(assert_return (invoke "copysign" (f64.const infinity) (f64.const 0x0p+0)) (f64.const infinity)) +(assert_return (invoke "copysign" (f64.const -infinity) (f64.const -0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "copysign" (f64.const -infinity) (f64.const 0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "copysign" (f64.const infinity) (f64.const -0x0.0000000000001p-1022)) (f64.const -infinity)) +(assert_return (invoke "copysign" (f64.const infinity) (f64.const 0x0.0000000000001p-1022)) (f64.const infinity)) +(assert_return (invoke "copysign" (f64.const -infinity) (f64.const -0x1p-1022)) (f64.const -infinity)) +(assert_return (invoke "copysign" (f64.const -infinity) (f64.const 0x1p-1022)) (f64.const infinity)) +(assert_return (invoke "copysign" (f64.const infinity) (f64.const -0x1p-1022)) (f64.const -infinity)) +(assert_return (invoke "copysign" (f64.const infinity) (f64.const 0x1p-1022)) (f64.const infinity)) +(assert_return (invoke "copysign" (f64.const -infinity) (f64.const -0x1p-1)) (f64.const -infinity)) +(assert_return (invoke "copysign" (f64.const -infinity) (f64.const 0x1p-1)) (f64.const infinity)) +(assert_return (invoke "copysign" (f64.const infinity) (f64.const -0x1p-1)) (f64.const -infinity)) +(assert_return (invoke "copysign" (f64.const infinity) (f64.const 0x1p-1)) (f64.const infinity)) +(assert_return (invoke "copysign" (f64.const -infinity) (f64.const -0x1p+0)) (f64.const -infinity)) +(assert_return (invoke "copysign" (f64.const -infinity) (f64.const 0x1p+0)) (f64.const infinity)) +(assert_return (invoke "copysign" (f64.const infinity) (f64.const -0x1p+0)) (f64.const -infinity)) +(assert_return (invoke "copysign" (f64.const infinity) (f64.const 0x1p+0)) (f64.const infinity)) +(assert_return (invoke "copysign" (f64.const -infinity) (f64.const -0x1.921fb54442d18p+2)) (f64.const -infinity)) +(assert_return (invoke "copysign" (f64.const -infinity) (f64.const 0x1.921fb54442d18p+2)) (f64.const infinity)) +(assert_return (invoke "copysign" (f64.const infinity) (f64.const -0x1.921fb54442d18p+2)) (f64.const -infinity)) +(assert_return (invoke "copysign" (f64.const infinity) (f64.const 0x1.921fb54442d18p+2)) (f64.const infinity)) +(assert_return (invoke "copysign" (f64.const -infinity) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -infinity)) +(assert_return (invoke "copysign" (f64.const -infinity) (f64.const 0x1.fffffffffffffp+1023)) (f64.const infinity)) +(assert_return (invoke "copysign" (f64.const infinity) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -infinity)) +(assert_return (invoke "copysign" (f64.const infinity) (f64.const 0x1.fffffffffffffp+1023)) (f64.const infinity)) +(assert_return (invoke "copysign" (f64.const -infinity) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "copysign" (f64.const -infinity) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "copysign" (f64.const infinity) (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "copysign" (f64.const infinity) (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "copysign" (f64.const -infinity) (f64.const -nan)) (f64.const -infinity)) +(assert_return (invoke "copysign" (f64.const -infinity) (f64.const nan)) (f64.const infinity)) +(assert_return (invoke "copysign" (f64.const infinity) (f64.const -nan)) (f64.const -infinity)) +(assert_return (invoke "copysign" (f64.const infinity) (f64.const nan)) (f64.const infinity)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x0p+0)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const -0x0p+0)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p-1022)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p-1)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p-1)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p+0)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p+0)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const -infinity)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const infinity)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const -infinity)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const infinity)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "sqrt" (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "sqrt" (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return_nan (invoke "sqrt" (f64.const -0x0.0000000000001p-1022))) +(assert_return (invoke "sqrt" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-537)) +(assert_return_nan (invoke "sqrt" (f64.const -0x1p-1022))) +(assert_return (invoke "sqrt" (f64.const 0x1p-1022)) (f64.const 0x1p-511)) +(assert_return_nan (invoke "sqrt" (f64.const -0x1p-1))) +(assert_return (invoke "sqrt" (f64.const 0x1p-1)) (f64.const 0x1.6a09e667f3bcdp-1)) +(assert_return_nan (invoke "sqrt" (f64.const -0x1p+0))) +(assert_return (invoke "sqrt" (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return_nan (invoke "sqrt" (f64.const -0x1.921fb54442d18p+2))) +(assert_return (invoke "sqrt" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.40d931ff62705p+1)) +(assert_return_nan (invoke "sqrt" (f64.const -0x1.fffffffffffffp+1023))) +(assert_return (invoke "sqrt" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+511)) +(assert_return_nan (invoke "sqrt" (f64.const -infinity))) +(assert_return (invoke "sqrt" (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "sqrt" (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "sqrt" (f64.const nan)) (f64.const nan)) +(assert_return (invoke "floor" (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "floor" (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "floor" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "floor" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "floor" (f64.const -0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "floor" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "floor" (f64.const -0x1p-1)) (f64.const -0x1p+0)) +(assert_return (invoke "floor" (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "floor" (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "floor" (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "floor" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.cp+2)) +(assert_return (invoke "floor" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) +(assert_return (invoke "floor" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "floor" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "floor" (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "floor" (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "floor" (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "floor" (f64.const nan)) (f64.const nan)) +(assert_return (invoke "ceil" (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "ceil" (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "ceil" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "ceil" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "ceil" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "ceil" (f64.const 0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "ceil" (f64.const -0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "ceil" (f64.const 0x1p-1)) (f64.const 0x1p+0)) +(assert_return (invoke "ceil" (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "ceil" (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "ceil" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) +(assert_return (invoke "ceil" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.cp+2)) +(assert_return (invoke "ceil" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "ceil" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "ceil" (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "ceil" (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "ceil" (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "ceil" (f64.const nan)) (f64.const nan)) +(assert_return (invoke "trunc" (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "trunc" (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "trunc" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "trunc" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "trunc" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "trunc" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "trunc" (f64.const -0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "trunc" (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "trunc" (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "trunc" (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "trunc" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) +(assert_return (invoke "trunc" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) +(assert_return (invoke "trunc" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "trunc" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "trunc" (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "trunc" (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "trunc" (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "trunc" (f64.const nan)) (f64.const nan)) +(assert_return (invoke "nearest" (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "nearest" (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "nearest" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "nearest" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "nearest" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "nearest" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "nearest" (f64.const -0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "nearest" (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "nearest" (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "nearest" (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "nearest" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) +(assert_return (invoke "nearest" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) +(assert_return (invoke "nearest" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "nearest" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "nearest" (f64.const -infinity)) (f64.const -infinity)) +(assert_return (invoke "nearest" (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "nearest" (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "nearest" (f64.const nan)) (f64.const nan)) +(assert_return (invoke "abs" (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "abs" (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "abs" (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "abs" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "abs" (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "abs" (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "abs" (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "abs" (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "abs" (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "abs" (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "abs" (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "abs" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "abs" (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "abs" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "abs" (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "abs" (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "abs" (f64.const -nan)) (f64.const nan)) +(assert_return (invoke "abs" (f64.const nan)) (f64.const nan)) +(assert_return (invoke "neg" (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "neg" (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "neg" (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "neg" (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "neg" (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "neg" (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "neg" (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "neg" (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "neg" (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "neg" (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "neg" (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "neg" (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "neg" (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "neg" (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "neg" (f64.const -infinity)) (f64.const infinity)) +(assert_return (invoke "neg" (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "neg" (f64.const -nan)) (f64.const nan)) +(assert_return (invoke "neg" (f64.const nan)) (f64.const -nan)) diff --git a/src/binaryen/test/spec/f64_cmp.wast b/src/binaryen/test/spec/f64_cmp.wast new file mode 100644 index 0000000000..f4958b8f98 --- /dev/null +++ b/src/binaryen/test/spec/f64_cmp.wast @@ -0,0 +1,1956 @@ +;; Test all the f64 comparison operators on major boundary values and all +;; special values. + +(module + (func (export "eq") (param $x f64) (param $y f64) (result i32) (f64.eq (get_local $x) (get_local $y))) + (func (export "ne") (param $x f64) (param $y f64) (result i32) (f64.ne (get_local $x) (get_local $y))) + (func (export "lt") (param $x f64) (param $y f64) (result i32) (f64.lt (get_local $x) (get_local $y))) + (func (export "le") (param $x f64) (param $y f64) (result i32) (f64.le (get_local $x) (get_local $y))) + (func (export "gt") (param $x f64) (param $y f64) (result i32) (f64.gt (get_local $x) (get_local $y))) + (func (export "ge") (param $x f64) (param $y f64) (result i32) (f64.ge (get_local $x) (get_local $y))) +) + +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -infinity) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -infinity) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const infinity) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const infinity) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -infinity) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -infinity) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const infinity) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const infinity) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -infinity) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -infinity) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const infinity) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const infinity) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -infinity) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -infinity) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const infinity) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const infinity) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -infinity) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -infinity) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const infinity) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const infinity) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -infinity) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -infinity) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const infinity) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const infinity) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -infinity) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -infinity) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const infinity) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const infinity) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -infinity) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -infinity) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const infinity) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const infinity) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -infinity) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -infinity) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const infinity) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const infinity) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -infinity) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -infinity) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const infinity) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const infinity) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -infinity) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -infinity) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const infinity) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const infinity) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -infinity) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -infinity) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const infinity) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const infinity) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -infinity) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -infinity) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const infinity) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const infinity) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -infinity) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -infinity) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const infinity) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const infinity) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -infinity) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -infinity) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const infinity) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const infinity) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -infinity) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -infinity) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const infinity) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const infinity) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -infinity) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -infinity) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const infinity) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const infinity) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -infinity) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -infinity) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const infinity) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const infinity) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -infinity) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -infinity) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const infinity) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const infinity) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -infinity) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -infinity) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const infinity) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const infinity) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -infinity) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -infinity) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const infinity) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const infinity) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -infinity) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -infinity) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const infinity) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const infinity) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -infinity) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -infinity) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const infinity) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const infinity) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -infinity) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -infinity) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const infinity) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const infinity) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -infinity) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -infinity) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const infinity) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const infinity) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -infinity) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -infinity) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const infinity) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const infinity) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -infinity) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -infinity) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const infinity) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const infinity) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -infinity) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -infinity) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const infinity) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const infinity) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -infinity) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -infinity) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const infinity) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const infinity) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -infinity) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -infinity) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const infinity) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const infinity) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -infinity) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -infinity) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const infinity) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const infinity) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -infinity) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -infinity) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const infinity) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const infinity) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -infinity) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -infinity) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const infinity) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const infinity) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -infinity) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -infinity) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const infinity) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const infinity) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -infinity) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -infinity) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f64.const infinity) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f64.const infinity) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -infinity) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -infinity) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const infinity) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const infinity) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -infinity) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -infinity) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const infinity) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const infinity) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -infinity) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -infinity) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const infinity) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const infinity) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -infinity) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -infinity) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const infinity) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const infinity) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -infinity) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -infinity) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const infinity) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const infinity) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -infinity) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -infinity) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const infinity) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const infinity) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -infinity) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -infinity) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const infinity) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const infinity) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -infinity) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -infinity) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const infinity) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const infinity) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -infinity) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -infinity) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const infinity) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const infinity) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -infinity) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -infinity) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const infinity) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const infinity) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -infinity) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -infinity) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const infinity) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const infinity) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -infinity) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -infinity) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const infinity) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const infinity) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -infinity) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -infinity) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const infinity) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const infinity) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -infinity) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -infinity) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const infinity) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const infinity) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -infinity) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -infinity) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const infinity) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const infinity) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -infinity) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -infinity) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const infinity) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const infinity) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -infinity) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -infinity) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const infinity) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const infinity) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -infinity) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -infinity) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const infinity) (f64.const -infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const infinity) (f64.const infinity)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -infinity) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -infinity) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const infinity) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const infinity) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const infinity)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const nan)) (i32.const 0)) diff --git a/src/binaryen/test/spec/fac.wast b/src/binaryen/test/spec/fac.wast new file mode 100644 index 0000000000..be587520ca --- /dev/null +++ b/src/binaryen/test/spec/fac.wast @@ -0,0 +1,85 @@ +(module + ;; Recursive factorial + (func (export "fac-rec") (param i64) (result i64) + (if i64 (i64.eq (get_local 0) (i64.const 0)) + (i64.const 1) + (i64.mul (get_local 0) (call 0 (i64.sub (get_local 0) (i64.const 1)))) + ) + ) + + ;; Recursive factorial named + (func $fac-rec-named (export "fac-rec-named") (param $n i64) (result i64) + (if i64 (i64.eq (get_local $n) (i64.const 0)) + (i64.const 1) + (i64.mul + (get_local $n) + (call $fac-rec-named (i64.sub (get_local $n) (i64.const 1))) + ) + ) + ) + + ;; Iterative factorial + (func (export "fac-iter") (param i64) (result i64) + (local i64 i64) + (set_local 1 (get_local 0)) + (set_local 2 (i64.const 1)) + (block + (loop + (if + (i64.eq (get_local 1) (i64.const 0)) + (br 2) + (block + (set_local 2 (i64.mul (get_local 1) (get_local 2))) + (set_local 1 (i64.sub (get_local 1) (i64.const 1))) + ) + ) + (br 0) + ) + ) + (get_local 2) + ) + + ;; Iterative factorial named + (func (export "fac-iter-named") (param $n i64) (result i64) + (local $i i64) + (local $res i64) + (set_local $i (get_local $n)) + (set_local $res (i64.const 1)) + (block $done + (loop $loop + (if + (i64.eq (get_local $i) (i64.const 0)) + (br $done) + (block + (set_local $res (i64.mul (get_local $i) (get_local $res))) + (set_local $i (i64.sub (get_local $i) (i64.const 1))) + ) + ) + (br $loop) + ) + ) + (get_local $res) + ) + + ;; Optimized factorial. + (func (export "fac-opt") (param i64) (result i64) + (local i64) + (set_local 1 (i64.const 1)) + (block + (br_if 0 (i64.lt_s (get_local 0) (i64.const 2))) + (loop + (set_local 1 (i64.mul (get_local 1) (get_local 0))) + (set_local 0 (i64.add (get_local 0) (i64.const -1))) + (br_if 0 (i64.gt_s (get_local 0) (i64.const 1))) + ) + ) + (get_local 1) + ) +) + +(assert_return (invoke "fac-rec" (i64.const 25)) (i64.const 7034535277573963776)) +(assert_return (invoke "fac-iter" (i64.const 25)) (i64.const 7034535277573963776)) +(assert_return (invoke "fac-rec-named" (i64.const 25)) (i64.const 7034535277573963776)) +(assert_return (invoke "fac-iter-named" (i64.const 25)) (i64.const 7034535277573963776)) +(assert_return (invoke "fac-opt" (i64.const 25)) (i64.const 7034535277573963776)) +(assert_trap (invoke "fac-rec" (i64.const 1073741824)) "call stack exhausted") diff --git a/src/binaryen/test/spec/float_exprs.wast b/src/binaryen/test/spec/float_exprs.wast new file mode 100644 index 0000000000..ad8f769f0d --- /dev/null +++ b/src/binaryen/test/spec/float_exprs.wast @@ -0,0 +1,1979 @@ +;; Test interesting floating-point "expressions". These tests contain code +;; patterns which tempt common value-changing optimizations. + +;; Test that x*y+z is not done with x87-style intermediate precision. + +(module + (func (export "f64.no_contraction") (param $x f64) (param $y f64) (param $z f64) (result f64) + (f64.add (f64.mul (get_local $x) (get_local $y)) (get_local $z))) +) + +(assert_return (invoke "f64.no_contraction" (f64.const -0x1.9e87ce14273afp-103) (f64.const 0x1.2515ad31db63ep+664) (f64.const 0x1.868c6685e6185p+533)) (f64.const -0x1.da94885b11493p+561)) +(assert_return (invoke "f64.no_contraction" (f64.const 0x1.da21c460a6f44p+52) (f64.const 0x1.60859d2e7714ap-321) (f64.const 0x1.e63f1b7b660e1p-302)) (f64.const 0x1.4672f256d1794p-268)) +(assert_return (invoke "f64.no_contraction" (f64.const -0x1.f3eaf43f327cp-594) (f64.const 0x1.dfcc009906b57p+533) (f64.const 0x1.5984e03c520a1p-104)) (f64.const -0x1.d4797fb3db166p-60)) +(assert_return (invoke "f64.no_contraction" (f64.const 0x1.dab6c772cb2e2p-69) (f64.const -0x1.d761663679a84p-101) (f64.const 0x1.f22f92c843226p-218)) (f64.const -0x1.b50d72dfcef68p-169)) +(assert_return (invoke "f64.no_contraction" (f64.const -0x1.87c5def1e4d3dp-950) (f64.const -0x1.50cd5dab2207fp+935) (f64.const 0x1.e629bd0da8c5dp-54)) (f64.const 0x1.01b6feb4e78a7p-14)) + +;; Test that x*y+z is not folded to fma. + +(module + (func (export "f32.no_fma") (param $x f32) (param $y f32) (param $z f32) (result f32) + (f32.add (f32.mul (get_local $x) (get_local $y)) (get_local $z))) + (func (export "f64.no_fma") (param $x f64) (param $y f64) (param $z f64) (result f64) + (f64.add (f64.mul (get_local $x) (get_local $y)) (get_local $z))) +) + +(assert_return (invoke "f32.no_fma" (f32.const 0x1.a78402p+124) (f32.const 0x1.cf8548p-23) (f32.const 0x1.992adap+107)) (f32.const 0x1.a5262cp+107)) +(assert_return (invoke "f32.no_fma" (f32.const 0x1.ed15a4p-28) (f32.const -0x1.613c72p-50) (f32.const 0x1.4757bp-88)) (f32.const -0x1.5406b8p-77)) +(assert_return (invoke "f32.no_fma" (f32.const 0x1.ae63a2p+37) (f32.const 0x1.b3a59ap-13) (f32.const 0x1.c16918p+10)) (f32.const 0x1.6e385cp+25)) +(assert_return (invoke "f32.no_fma" (f32.const 0x1.2a77fap-8) (f32.const -0x1.bb7356p+22) (f32.const -0x1.32be2ap+1)) (f32.const -0x1.0286d4p+15)) +(assert_return (invoke "f32.no_fma" (f32.const 0x1.298fb6p+126) (f32.const -0x1.03080cp-70) (f32.const -0x1.418de6p+34)) (f32.const -0x1.2d15c6p+56)) +(assert_return (invoke "f64.no_fma" (f64.const 0x1.ac357ff46eed4p+557) (f64.const 0x1.852c01a5e7297p+430) (f64.const -0x1.05995704eda8ap+987)) (f64.const 0x1.855d905d338ep+987)) +(assert_return (invoke "f64.no_fma" (f64.const 0x1.e2fd6bf32010cp+749) (f64.const 0x1.01c2238d405e4p-130) (f64.const 0x1.2ecc0db4b9f94p+573)) (f64.const 0x1.e64eb07e063bcp+619)) +(assert_return (invoke "f64.no_fma" (f64.const 0x1.92b7c7439ede3p-721) (f64.const -0x1.6aa97586d3de6p+1011) (f64.const 0x1.8de4823f6358ap+237)) (f64.const -0x1.1d4139fd20ecdp+291)) +(assert_return (invoke "f64.no_fma" (f64.const -0x1.466d30bddb453p-386) (f64.const -0x1.185a4d739c7aap+443) (f64.const 0x1.5f9c436fbfc7bp+55)) (f64.const 0x1.bd61a350fcc1ap+57)) +(assert_return (invoke "f64.no_fma" (f64.const 0x1.7e2c44058a799p+52) (f64.const 0x1.c73b71765b8b2p+685) (f64.const -0x1.16c641df0b108p+690)) (f64.const 0x1.53ccb53de0bd1p+738)) + +;; Test that x+0.0 is not folded to x. +;; See IEEE 754-2008 10.4 "Literal meaning and value-changing optimizations". + +(module + (func (export "f32.no_fold_add_zero") (param $x f32) (result f32) + (f32.add (get_local $x) (f32.const 0.0))) + (func (export "f64.no_fold_add_zero") (param $x f64) (result f64) + (f64.add (get_local $x) (f64.const 0.0))) +) + +(assert_return (invoke "f32.no_fold_add_zero" (f32.const -0.0)) (f32.const 0.0)) +(assert_return (invoke "f64.no_fold_add_zero" (f64.const -0.0)) (f64.const 0.0)) +(assert_return (invoke "f32.no_fold_add_zero" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "f64.no_fold_add_zero" (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) + +;; Test that 0.0 - x is not folded to -x. + +(module + (func (export "f32.no_fold_zero_sub") (param $x f32) (result f32) + (f32.sub (f32.const 0.0) (get_local $x))) + (func (export "f64.no_fold_zero_sub") (param $x f64) (result f64) + (f64.sub (f64.const 0.0) (get_local $x))) +) + +(assert_return (invoke "f32.no_fold_zero_sub" (f32.const 0.0)) (f32.const 0.0)) +(assert_return (invoke "f64.no_fold_zero_sub" (f64.const 0.0)) (f64.const 0.0)) +(assert_return (invoke "f32.no_fold_zero_sub" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "f64.no_fold_zero_sub" (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) + +;; Test that x - 0.0 is not folded to x. + +(module + (func (export "f32.no_fold_sub_zero") (param $x f32) (result f32) + (f32.sub (get_local $x) (f32.const 0.0))) + (func (export "f64.no_fold_sub_zero") (param $x f64) (result f64) + (f64.sub (get_local $x) (f64.const 0.0))) +) + +(assert_return (invoke "f32.no_fold_sub_zero" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "f64.no_fold_sub_zero" (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) + +;; Test that x*0.0 is not folded to 0.0. + +(module + (func (export "f32.no_fold_mul_zero") (param $x f32) (result f32) + (f32.mul (get_local $x) (f32.const 0.0))) + (func (export "f64.no_fold_mul_zero") (param $x f64) (result f64) + (f64.mul (get_local $x) (f64.const 0.0))) +) + +(assert_return (invoke "f32.no_fold_mul_zero" (f32.const -0.0)) (f32.const -0.0)) +(assert_return (invoke "f32.no_fold_mul_zero" (f32.const -1.0)) (f32.const -0.0)) +(assert_return (invoke "f32.no_fold_mul_zero" (f32.const -2.0)) (f32.const -0.0)) +(assert_return (invoke "f32.no_fold_mul_zero" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "f64.no_fold_mul_zero" (f64.const -0.0)) (f64.const -0.0)) +(assert_return (invoke "f64.no_fold_mul_zero" (f64.const -1.0)) (f64.const -0.0)) +(assert_return (invoke "f64.no_fold_mul_zero" (f64.const -2.0)) (f64.const -0.0)) +(assert_return (invoke "f64.no_fold_mul_zero" (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) + +;; Test that x*1.0 is not folded to x. +;; See IEEE 754-2008 10.4 "Literal meaning and value-changing optimizations". + +(module + (func (export "f32.no_fold_mul_one") (param $x f32) (result f32) + (f32.mul (get_local $x) (f32.const 1.0))) + (func (export "f64.no_fold_mul_one") (param $x f64) (result f64) + (f64.mul (get_local $x) (f64.const 1.0))) +) + +(assert_return (invoke "f32.no_fold_mul_one" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "f64.no_fold_mul_one" (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) + +;; Test that 0.0/x is not folded to 0.0. + +(module + (func (export "f32.no_fold_zero_div") (param $x f32) (result f32) + (f32.div (f32.const 0.0) (get_local $x))) + (func (export "f64.no_fold_zero_div") (param $x f64) (result f64) + (f64.div (f64.const 0.0) (get_local $x))) +) + +(assert_return_nan (invoke "f32.no_fold_zero_div" (f32.const 0.0))) +(assert_return_nan (invoke "f32.no_fold_zero_div" (f32.const -0.0))) +(assert_return (invoke "f32.no_fold_zero_div" (f32.const nan)) (f32.const nan)) +(assert_return (invoke "f32.no_fold_zero_div" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return_nan (invoke "f64.no_fold_zero_div" (f64.const 0.0))) +(assert_return_nan (invoke "f64.no_fold_zero_div" (f64.const -0.0))) +(assert_return (invoke "f64.no_fold_zero_div" (f64.const nan)) (f64.const nan)) +(assert_return (invoke "f64.no_fold_zero_div" (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) + +;; Test that x/1.0 is not folded to x. + +(module + (func (export "f32.no_fold_div_one") (param $x f32) (result f32) + (f32.div (get_local $x) (f32.const 1.0))) + (func (export "f64.no_fold_div_one") (param $x f64) (result f64) + (f64.div (get_local $x) (f64.const 1.0))) +) + +(assert_return (invoke "f32.no_fold_div_one" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "f64.no_fold_div_one" (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) + +;; Test that x/-1.0 is not folded to -x. + +(module + (func (export "f32.no_fold_div_neg1") (param $x f32) (result f32) + (f32.div (get_local $x) (f32.const -1.0))) + (func (export "f64.no_fold_div_neg1") (param $x f64) (result f64) + (f64.div (get_local $x) (f64.const -1.0))) +) + +(assert_return (invoke "f32.no_fold_div_neg1" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "f64.no_fold_div_neg1" (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) + +;; Test that -0.0 - x is not folded to -x. + +(module + (func (export "f32.no_fold_neg0_sub") (param $x f32) (result f32) + (f32.sub (f32.const -0.0) (get_local $x))) + (func (export "f64.no_fold_neg0_sub") (param $x f64) (result f64) + (f64.sub (f64.const -0.0) (get_local $x))) +) + +(assert_return (invoke "f32.no_fold_neg0_sub" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "f64.no_fold_neg0_sub" (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) + +;; Test that -1.0 * x is not folded to -x. + +(module + (func (export "f32.no_fold_neg1_mul") (param $x f32) (result f32) + (f32.mul (f32.const -1.0) (get_local $x))) + (func (export "f64.no_fold_neg1_mul") (param $x f64) (result f64) + (f64.mul (f64.const -1.0) (get_local $x))) +) + +(assert_return (invoke "f32.no_fold_neg1_mul" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "f64.no_fold_neg1_mul" (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) + +;; Test that x == x is not folded to true. + +(module + (func (export "f32.no_fold_eq_self") (param $x f32) (result i32) + (f32.eq (get_local $x) (get_local $x))) + (func (export "f64.no_fold_eq_self") (param $x f64) (result i32) + (f64.eq (get_local $x) (get_local $x))) +) + +(assert_return (invoke "f32.no_fold_eq_self" (f32.const nan)) (i32.const 0)) +(assert_return (invoke "f64.no_fold_eq_self" (f64.const nan)) (i32.const 0)) + +;; Test that x != x is not folded to false. + +(module + (func (export "f32.no_fold_ne_self") (param $x f32) (result i32) + (f32.ne (get_local $x) (get_local $x))) + (func (export "f64.no_fold_ne_self") (param $x f64) (result i32) + (f64.ne (get_local $x) (get_local $x))) +) + +(assert_return (invoke "f32.no_fold_ne_self" (f32.const nan)) (i32.const 1)) +(assert_return (invoke "f64.no_fold_ne_self" (f64.const nan)) (i32.const 1)) + +;; Test that x - x is not folded to 0.0. + +(module + (func (export "f32.no_fold_sub_self") (param $x f32) (result f32) + (f32.sub (get_local $x) (get_local $x))) + (func (export "f64.no_fold_sub_self") (param $x f64) (result f64) + (f64.sub (get_local $x) (get_local $x))) +) + +(assert_return_nan (invoke "f32.no_fold_sub_self" (f32.const infinity))) +(assert_return (invoke "f32.no_fold_sub_self" (f32.const nan)) (f32.const nan)) +(assert_return_nan (invoke "f64.no_fold_sub_self" (f64.const infinity))) +(assert_return (invoke "f64.no_fold_sub_self" (f64.const nan)) (f64.const nan)) + +;; Test that x/3 is not folded to x*(1/3). + +(module + (func (export "f32.no_fold_div_3") (param $x f32) (result f32) + (f32.div (get_local $x) (f32.const 3.0))) + (func (export "f64.no_fold_div_3") (param $x f64) (result f64) + (f64.div (get_local $x) (f64.const 3.0))) +) + +(assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.359c26p+50)) (f32.const -0x1.9cd032p+48)) +(assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.e45646p+93)) (f32.const -0x1.42e42ep+92)) +(assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.2a3916p-83)) (f32.const -0x1.8da172p-85)) +(assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.1f8b38p-124)) (f32.const -0x1.7f644ap-126)) +(assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.d64f64p-56)) (f32.const -0x1.398a42p-57)) +(assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.a8a88d29e2cc3p+632)) (f64.const -0x1.1b1b08c69732dp+631)) +(assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.bcf52dc950972p-167)) (f64.const -0x1.28a373db8b0f7p-168)) +(assert_return (invoke "f64.no_fold_div_3" (f64.const 0x1.bd3c0d989f7a4p-874)) (f64.const 0x1.28d2b3bb14fc3p-875)) +(assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.0138bf530a53cp+1007)) (f64.const -0x1.56f6546eb86fbp+1005)) +(assert_return (invoke "f64.no_fold_div_3" (f64.const 0x1.052b87f9d794dp+415)) (f64.const 0x1.5c3a0aa274c67p+413)) + +;; Test that (x*z)+(y*z) is not folded to (x+y)*z + +(module + (func (export "f32.no_factor") (param $x f32) (param $y f32) (param $z f32) (result f32) + (f32.add (f32.mul (get_local $x) (get_local $z)) (f32.mul (get_local $y) (get_local $z)))) + (func (export "f64.no_factor") (param $x f64) (param $y f64) (param $z f64) (result f64) + (f64.add (f64.mul (get_local $x) (get_local $z)) (f64.mul (get_local $y) (get_local $z)))) +) + +(assert_return (invoke "f32.no_factor" (f32.const -0x1.4e2352p+40) (f32.const -0x1.842e2cp+49) (f32.const 0x1.eea602p+59)) (f32.const -0x1.77a7dp+109)) +(assert_return (invoke "f32.no_factor" (f32.const -0x1.b4e7f6p-6) (f32.const 0x1.8c990cp-5) (f32.const -0x1.70cc02p-9)) (f32.const -0x1.00a342p-14)) +(assert_return (invoke "f32.no_factor" (f32.const -0x1.06722ep-41) (f32.const 0x1.eed3cep-64) (f32.const 0x1.5c5558p+123)) (f32.const -0x1.651aaep+82)) +(assert_return (invoke "f32.no_factor" (f32.const -0x1.f8c6a4p-64) (f32.const 0x1.08c806p-83) (f32.const 0x1.b5ceccp+118)) (f32.const -0x1.afa15p+55)) +(assert_return (invoke "f32.no_factor" (f32.const -0x1.3aaa1ep-84) (f32.const 0x1.c6d5eep-71) (f32.const 0x1.8d2924p+20)) (f32.const 0x1.60c9cep-50)) +(assert_return (invoke "f64.no_factor" (f64.const 0x1.3adeda9144977p-424) (f64.const 0x1.c15af887049e1p-462) (f64.const -0x1.905179c4c4778p-225)) (f64.const -0x1.ec606bcb87b1ap-649)) +(assert_return (invoke "f64.no_factor" (f64.const 0x1.3c84821c1d348p-662) (f64.const -0x1.4ffd4c77ad037p-1009) (f64.const -0x1.dd275335c6f4p-957)) (f64.const 0x0p+0)) +(assert_return (invoke "f64.no_factor" (f64.const -0x1.074f372347051p-334) (f64.const -0x1.aaeef661f4c96p-282) (f64.const -0x1.9bd34abe8696dp+479)) (f64.const 0x1.5767029593e2p+198)) +(assert_return (invoke "f64.no_factor" (f64.const -0x1.c4ded58a6f389p-289) (f64.const 0x1.ba6fdef5d59c9p-260) (f64.const -0x1.c1201c0470205p-253)) (f64.const -0x1.841ada2e0f184p-512)) +(assert_return (invoke "f64.no_factor" (f64.const 0x1.9d3688f8e375ap-608) (f64.const 0x1.bf91311588256p-579) (f64.const -0x1.1605a6b5d5ff8p+489)) (f64.const -0x1.e6118ca76af53p-90)) + +;; Test that (x+y)*z is not folded to (x*z)+(y*z) + +(module + (func (export "f32.no_distribute") (param $x f32) (param $y f32) (param $z f32) (result f32) + (f32.mul (f32.add (get_local $x) (get_local $y)) (get_local $z))) + (func (export "f64.no_distribute") (param $x f64) (param $y f64) (param $z f64) (result f64) + (f64.mul (f64.add (get_local $x) (get_local $y)) (get_local $z))) +) + +(assert_return (invoke "f32.no_distribute" (f32.const -0x1.4e2352p+40) (f32.const -0x1.842e2cp+49) (f32.const 0x1.eea602p+59)) (f32.const -0x1.77a7d2p+109)) +(assert_return (invoke "f32.no_distribute" (f32.const -0x1.b4e7f6p-6) (f32.const 0x1.8c990cp-5) (f32.const -0x1.70cc02p-9)) (f32.const -0x1.00a34p-14)) +(assert_return (invoke "f32.no_distribute" (f32.const -0x1.06722ep-41) (f32.const 0x1.eed3cep-64) (f32.const 0x1.5c5558p+123)) (f32.const -0x1.651abp+82)) +(assert_return (invoke "f32.no_distribute" (f32.const -0x1.f8c6a4p-64) (f32.const 0x1.08c806p-83) (f32.const 0x1.b5ceccp+118)) (f32.const -0x1.afa14ep+55)) +(assert_return (invoke "f32.no_distribute" (f32.const -0x1.3aaa1ep-84) (f32.const 0x1.c6d5eep-71) (f32.const 0x1.8d2924p+20)) (f32.const 0x1.60c9ccp-50)) +(assert_return (invoke "f64.no_distribute" (f64.const 0x1.3adeda9144977p-424) (f64.const 0x1.c15af887049e1p-462) (f64.const -0x1.905179c4c4778p-225)) (f64.const -0x1.ec606bcb87b1bp-649)) +(assert_return (invoke "f64.no_distribute" (f64.const 0x1.3c84821c1d348p-662) (f64.const -0x1.4ffd4c77ad037p-1009) (f64.const -0x1.dd275335c6f4p-957)) (f64.const -0x0p+0)) +(assert_return (invoke "f64.no_distribute" (f64.const -0x1.074f372347051p-334) (f64.const -0x1.aaeef661f4c96p-282) (f64.const -0x1.9bd34abe8696dp+479)) (f64.const 0x1.5767029593e1fp+198)) +(assert_return (invoke "f64.no_distribute" (f64.const -0x1.c4ded58a6f389p-289) (f64.const 0x1.ba6fdef5d59c9p-260) (f64.const -0x1.c1201c0470205p-253)) (f64.const -0x1.841ada2e0f183p-512)) +(assert_return (invoke "f64.no_distribute" (f64.const 0x1.9d3688f8e375ap-608) (f64.const 0x1.bf91311588256p-579) (f64.const -0x1.1605a6b5d5ff8p+489)) (f64.const -0x1.e6118ca76af52p-90)) + +;; Test that x*(y/z) is not folded to (x*y)/z + +(module + (func (export "f32.no_regroup_div_mul") (param $x f32) (param $y f32) (param $z f32) (result f32) + (f32.mul (get_local $x) (f32.div (get_local $y) (get_local $z)))) + (func (export "f64.no_regroup_div_mul") (param $x f64) (param $y f64) (param $z f64) (result f64) + (f64.mul (get_local $x) (f64.div (get_local $y) (get_local $z)))) +) + +(assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.2d14a6p-115) (f32.const -0x1.575a6cp-64) (f32.const 0x1.5cee0ep-116)) (f32.const 0x1.2844cap-63)) +(assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.454738p+91) (f32.const -0x1.b28a66p-115) (f32.const -0x1.f53908p+72)) (f32.const -0x0p+0)) +(assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.6be56ep+16) (f32.const -0x1.b46fc6p-21) (f32.const -0x1.a51df6p-123)) (f32.const -0x1.792258p+118)) +(assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.c343f8p-94) (f32.const 0x1.e4d906p+73) (f32.const 0x1.be69f8p+68)) (f32.const -0x1.ea1df2p-89)) +(assert_return (invoke "f32.no_regroup_div_mul" (f32.const 0x1.c6ae76p+112) (f32.const 0x1.fc953cp+24) (f32.const -0x1.60b3e8p+71)) (f32.const -0x1.47d0eap+66)) +(assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.3c04b815e30bp-423) (f64.const -0x1.379646fd98127p-119) (f64.const 0x1.bddb158506031p-642)) (f64.const -0x1.b9b3301f2dd2dp+99)) +(assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.46b3a402f86d5p+337) (f64.const 0x1.6fbf1b9e1798dp-447) (f64.const -0x1.bd9704a5a6a06p+797)) (f64.const -0x0p+0)) +(assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.6c9765bb4347fp-479) (f64.const 0x1.a4af42e34a141p+902) (f64.const 0x1.d2dde70eb68f9p-448)) (f64.const infinity)) +(assert_return (invoke "f64.no_regroup_div_mul" (f64.const -0x1.706023645be72p+480) (f64.const -0x1.6c229f7d9101dp+611) (f64.const -0x1.4d50fa68d3d9ep+836)) (f64.const -0x1.926fa3cacc651p+255)) +(assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.8cc63d8caf4c7p-599) (f64.const 0x1.8671ac4c35753p-878) (f64.const -0x1.ef35b1695e659p-838)) (f64.const -0x1.38d55f56406dp-639)) + +;; Test that (x*y)/z is not folded to x*(y/z) + +(module + (func (export "f32.no_regroup_mul_div") (param $x f32) (param $y f32) (param $z f32) (result f32) + (f32.div (f32.mul (get_local $x) (get_local $y)) (get_local $z))) + (func (export "f64.no_regroup_mul_div") (param $x f64) (param $y f64) (param $z f64) (result f64) + (f64.div (f64.mul (get_local $x) (get_local $y)) (get_local $z))) +) + +(assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.2d14a6p-115) (f32.const -0x1.575a6cp-64) (f32.const 0x1.5cee0ep-116)) (f32.const 0x0p+0)) +(assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.454738p+91) (f32.const -0x1.b28a66p-115) (f32.const -0x1.f53908p+72)) (f32.const -0x1.1a00e8p-96)) +(assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.6be56ep+16) (f32.const -0x1.b46fc6p-21) (f32.const -0x1.a51df6p-123)) (f32.const -0x1.79225ap+118)) +(assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.c343f8p-94) (f32.const 0x1.e4d906p+73) (f32.const 0x1.be69f8p+68)) (f32.const -0x1.ea1df4p-89)) +(assert_return (invoke "f32.no_regroup_mul_div" (f32.const 0x1.c6ae76p+112) (f32.const 0x1.fc953cp+24) (f32.const -0x1.60b3e8p+71)) (f32.const -infinity)) +(assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.3c04b815e30bp-423) (f64.const -0x1.379646fd98127p-119) (f64.const 0x1.bddb158506031p-642)) (f64.const -0x1.b9b3301f2dd2ep+99)) +(assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.46b3a402f86d5p+337) (f64.const 0x1.6fbf1b9e1798dp-447) (f64.const -0x1.bd9704a5a6a06p+797)) (f64.const -0x1.0da0b6328e09p-907)) +(assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.6c9765bb4347fp-479) (f64.const 0x1.a4af42e34a141p+902) (f64.const 0x1.d2dde70eb68f9p-448)) (f64.const 0x1.4886b6d9a9a79p+871)) +(assert_return (invoke "f64.no_regroup_mul_div" (f64.const -0x1.706023645be72p+480) (f64.const -0x1.6c229f7d9101dp+611) (f64.const -0x1.4d50fa68d3d9ep+836)) (f64.const -infinity)) +(assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.8cc63d8caf4c7p-599) (f64.const 0x1.8671ac4c35753p-878) (f64.const -0x1.ef35b1695e659p-838)) (f64.const -0x0p+0)) + +;; Test that x+y+z+w is not reassociated. + +(module + (func (export "f32.no_reassociate_add") (param $x f32) (param $y f32) (param $z f32) (param $w f32) (result f32) + (f32.add (f32.add (f32.add (get_local $x) (get_local $y)) (get_local $z)) (get_local $w))) + (func (export "f64.no_reassociate_add") (param $x f64) (param $y f64) (param $z f64) (param $w f64) (result f64) + (f64.add (f64.add (f64.add (get_local $x) (get_local $y)) (get_local $z)) (get_local $w))) +) + +(assert_return (invoke "f32.no_reassociate_add" (f32.const -0x1.5f7ddcp+44) (f32.const 0x1.854e1p+34) (f32.const -0x1.b2068cp+47) (f32.const -0x1.209692p+41)) (f32.const -0x1.e26c76p+47)) +(assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.da3b78p-9) (f32.const -0x1.4312fap-7) (f32.const 0x1.0395e6p-4) (f32.const -0x1.6d5ea6p-7)) (f32.const 0x1.78b31ap-5)) +(assert_return (invoke "f32.no_reassociate_add" (f32.const -0x1.fdb93ap+34) (f32.const -0x1.b6fce6p+41) (f32.const 0x1.c131d8p+44) (f32.const 0x1.8835b6p+38)) (f32.const 0x1.8ff3a2p+44)) +(assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.1739fcp+47) (f32.const 0x1.a4b186p+49) (f32.const -0x1.0c623cp+35) (f32.const 0x1.16a102p+51)) (f32.const 0x1.913ff6p+51)) +(assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.733cfap+108) (f32.const -0x1.38d30cp+108) (f32.const 0x1.2f5854p+105) (f32.const -0x1.ccb058p+94)) (f32.const 0x1.813716p+106)) +(assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.697a4d9ff19a6p+841) (f64.const 0x1.b305466238397p+847) (f64.const 0x1.e0b2d9bfb4e72p+855) (f64.const -0x1.6e1f3ae2b06bbp+857)) (f64.const -0x1.eb0e5936f087ap+856)) +(assert_return (invoke "f64.no_reassociate_add" (f64.const 0x1.00ef6746b30e1p-543) (f64.const 0x1.cc1cfafdf3fe1p-544) (f64.const -0x1.f7726df3ecba6p-543) (f64.const -0x1.b26695f99d307p-594)) (f64.const -0x1.074892e3fad76p-547)) +(assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.e807b3bd6d854p+440) (f64.const 0x1.cedae26c2c5fp+407) (f64.const -0x1.00ab6e1442541p+437) (f64.const 0x1.28538a55997bdp+397)) (f64.const -0x1.040e90bf871ebp+441)) +(assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.ba2b6f35a2402p-317) (f64.const 0x1.ad1c3fea7cd9ep-307) (f64.const -0x1.93aace2bf1261p-262) (f64.const 0x1.9fddbe472847ep-260)) (f64.const 0x1.3af30abc2c01bp-260)) +(assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.ccb9c6092fb1dp+641) (f64.const -0x1.4b7c28c108244p+614) (f64.const 0x1.8a7cefef4bde1p+646) (f64.const -0x1.901b28b08b482p+644)) (f64.const 0x1.1810579194126p+646)) + +;; Test that x*y*z*w is not reassociated. + +(module + (func (export "f32.no_reassociate_mul") (param $x f32) (param $y f32) (param $z f32) (param $w f32) (result f32) + (f32.mul (f32.mul (f32.mul (get_local $x) (get_local $y)) (get_local $z)) (get_local $w))) + (func (export "f64.no_reassociate_mul") (param $x f64) (param $y f64) (param $z f64) (param $w f64) (result f64) + (f64.mul (f64.mul (f64.mul (get_local $x) (get_local $y)) (get_local $z)) (get_local $w))) +) + +(assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.950ba8p-116) (f32.const 0x1.efdacep-33) (f32.const -0x1.5f9bcp+102) (f32.const 0x1.f04508p-56)) (f32.const -0x1.ff356ep-101)) +(assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.5990aep-56) (f32.const -0x1.7dfb04p+102) (f32.const -0x1.4f774ap-125) (f32.const -0x1.595fe6p+70)) (f32.const -0x1.c7c8fcp-8)) +(assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.6ad9a4p-48) (f32.const -0x1.9138aap+55) (f32.const -0x1.4a774ep-40) (f32.const 0x1.1ff08p+76)) (f32.const 0x1.9cd8ecp+44)) +(assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.e1caecp-105) (f32.const 0x1.af0dd2p+77) (f32.const -0x1.016eep+56) (f32.const -0x1.ab70d6p+59)) (f32.const 0x1.54870ep+89)) +(assert_return (invoke "f32.no_reassociate_mul" (f32.const -0x1.3b1dcp-99) (f32.const 0x1.4e5a34p-49) (f32.const -0x1.38ba5ap+3) (f32.const 0x1.7fb8eep+59)) (f32.const 0x1.5bbf98p-85)) +(assert_return (invoke "f64.no_reassociate_mul" (f64.const -0x1.e7842ab7181p-667) (f64.const -0x1.fabf40ceeceafp+990) (f64.const -0x1.1a38a825ab01ap-376) (f64.const -0x1.27e8ea469b14fp+664)) (f64.const 0x1.336eb428af4f3p+613)) +(assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.4ca2292a6acbcp+454) (f64.const 0x1.6ffbab850089ap-516) (f64.const -0x1.547c32e1f5b93p-899) (f64.const -0x1.c7571d9388375p+540)) (f64.const 0x1.1ac796954fc1p-419)) +(assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.73881a52e0401p-501) (f64.const -0x1.1b68dd9efb1a7p+788) (f64.const 0x1.d1c5e6a3eb27cp-762) (f64.const -0x1.56cb2fcc7546fp+88)) (f64.const 0x1.f508db92c34efp-386)) +(assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.2efa87859987cp+692) (f64.const 0x1.68e4373e241p-423) (f64.const 0x1.4e2d0fb383a57p+223) (f64.const -0x1.301d3265c737bp-23)) (f64.const -0x1.4b2b6c393f30cp+470)) +(assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.1013f7498b95fp-234) (f64.const 0x1.d2d1c36fff138p-792) (f64.const -0x1.cbf1824ea7bfdp+728) (f64.const -0x1.440da9c8b836dp-599)) (f64.const 0x1.1a16512881c91p-895)) + +;; Test that x/0 is not folded away. + +(module + (func (export "f32.no_fold_div_0") (param $x f32) (result f32) + (f32.div (get_local $x) (f32.const 0.0))) + (func (export "f64.no_fold_div_0") (param $x f64) (result f64) + (f64.div (get_local $x) (f64.const 0.0))) +) + +(assert_return (invoke "f32.no_fold_div_0" (f32.const 1.0)) (f32.const infinity)) +(assert_return (invoke "f32.no_fold_div_0" (f32.const -1.0)) (f32.const -infinity)) +(assert_return (invoke "f32.no_fold_div_0" (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "f32.no_fold_div_0" (f32.const -infinity)) (f32.const -infinity)) +(assert_return_nan (invoke "f32.no_fold_div_0" (f32.const 0))) +(assert_return_nan (invoke "f32.no_fold_div_0" (f32.const -0))) +(assert_return (invoke "f32.no_fold_div_0" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "f32.no_fold_div_0" (f32.const nan)) (f32.const nan)) +(assert_return (invoke "f64.no_fold_div_0" (f64.const 1.0)) (f64.const infinity)) +(assert_return (invoke "f64.no_fold_div_0" (f64.const -1.0)) (f64.const -infinity)) +(assert_return (invoke "f64.no_fold_div_0" (f64.const infinity)) (f64.const infinity)) +(assert_return (invoke "f64.no_fold_div_0" (f64.const -infinity)) (f64.const -infinity)) +(assert_return_nan (invoke "f64.no_fold_div_0" (f64.const 0))) +(assert_return_nan (invoke "f64.no_fold_div_0" (f64.const -0))) +(assert_return (invoke "f64.no_fold_div_0" (f64.const nan)) (f64.const nan)) +(assert_return (invoke "f64.no_fold_div_0" (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) + +;; Test that x/-0 is not folded away. + +(module + (func (export "f32.no_fold_div_neg0") (param $x f32) (result f32) + (f32.div (get_local $x) (f32.const -0.0))) + (func (export "f64.no_fold_div_neg0") (param $x f64) (result f64) + (f64.div (get_local $x) (f64.const -0.0))) +) + +(assert_return (invoke "f32.no_fold_div_neg0" (f32.const 1.0)) (f32.const -infinity)) +(assert_return (invoke "f32.no_fold_div_neg0" (f32.const -1.0)) (f32.const infinity)) +(assert_return (invoke "f32.no_fold_div_neg0" (f32.const infinity)) (f32.const -infinity)) +(assert_return (invoke "f32.no_fold_div_neg0" (f32.const -infinity)) (f32.const infinity)) +(assert_return_nan (invoke "f32.no_fold_div_neg0" (f32.const 0))) +(assert_return_nan (invoke "f32.no_fold_div_neg0" (f32.const -0))) +(assert_return (invoke "f32.no_fold_div_neg0" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "f32.no_fold_div_neg0" (f32.const nan)) (f32.const nan)) +(assert_return (invoke "f64.no_fold_div_neg0" (f64.const 1.0)) (f64.const -infinity)) +(assert_return (invoke "f64.no_fold_div_neg0" (f64.const -1.0)) (f64.const infinity)) +(assert_return (invoke "f64.no_fold_div_neg0" (f64.const infinity)) (f64.const -infinity)) +(assert_return (invoke "f64.no_fold_div_neg0" (f64.const -infinity)) (f64.const infinity)) +(assert_return_nan (invoke "f64.no_fold_div_neg0" (f64.const 0))) +(assert_return_nan (invoke "f64.no_fold_div_neg0" (f64.const -0))) +(assert_return (invoke "f64.no_fold_div_neg0" (f64.const nan)) (f64.const nan)) +(assert_return (invoke "f64.no_fold_div_neg0" (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) + +;; Test that sqrt(x*x+y*y) is not folded to hypot. + +(module + (func (export "f32.no_fold_to_hypot") (param $x f32) (param $y f32) (result f32) + (f32.sqrt (f32.add (f32.mul (get_local $x) (get_local $x)) + (f32.mul (get_local $y) (get_local $y))))) + (func (export "f64.no_fold_to_hypot") (param $x f64) (param $y f64) (result f64) + (f64.sqrt (f64.add (f64.mul (get_local $x) (get_local $x)) + (f64.mul (get_local $y) (get_local $y))))) +) + +(assert_return (invoke "f32.no_fold_to_hypot" (f32.const 0x1.c2f338p-81) (f32.const 0x1.401b5ep-68)) (f32.const 0x1.401cccp-68)) +(assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.c38d1p-71) (f32.const -0x1.359ddp-107)) (f32.const 0x1.c36a62p-71)) +(assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.99e0cap-114) (f32.const -0x1.ed0c6cp-69)) (f32.const 0x1.ed0e48p-69)) +(assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.1b6ceap+5) (f32.const 0x1.5440bep+17)) (f32.const 0x1.5440cp+17)) +(assert_return (invoke "f32.no_fold_to_hypot" (f32.const 0x1.8f019ep-76) (f32.const -0x1.182308p-71)) (f32.const 0x1.17e2bcp-71)) +(assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.1a0ac4f7c8711p-636) (f64.const 0x1.1372ebafff551p-534)) (f64.const 0x1.13463fa37014ep-534)) +(assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.b793512167499p+395) (f64.const -0x1.11cbc52af4c36p+410)) (f64.const 0x1.11cbc530783a2p+410)) +(assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.76777f44ff40bp-536) (f64.const -0x1.c3896e4dc1fbp-766)) (f64.const 0x1.8p-536)) +(assert_return (invoke "f64.no_fold_to_hypot" (f64.const -0x1.889ac72cc6b5dp-521) (f64.const 0x1.8d7084e659f3bp-733)) (f64.const 0x1.889ac72ca843ap-521)) +(assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.5ee588c02cb08p-670) (f64.const -0x1.05ce25788d9ecp-514)) (f64.const 0x1.05ce25788d9dfp-514)) + +;; Test that 1.0/x isn't approximated. + +(module + (func (export "f32.no_approximate_reciprocal") (param $x f32) (result f32) + (f32.div (f32.const 1.0) (get_local $x))) +) + +(assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.2900b6p-10)) (f32.const -0x1.b950d4p+9)) +(assert_return (invoke "f32.no_approximate_reciprocal" (f32.const 0x1.e7212p+127)) (f32.const 0x1.0d11f8p-128)) +(assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.42a466p-93)) (f32.const -0x1.963ee6p+92)) +(assert_return (invoke "f32.no_approximate_reciprocal" (f32.const 0x1.5d0c32p+76)) (f32.const 0x1.778362p-77)) +(assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.601de2p-82)) (f32.const -0x1.743d7ep+81)) + +;; Test that 1.0/sqrt(x) isn't approximated or fused. + +(module + (func (export "f32.no_approximate_reciprocal_sqrt") (param $x f32) (result f32) + (f32.div (f32.const 1.0) (f32.sqrt (get_local $x)))) + (func (export "f64.no_fuse_reciprocal_sqrt") (param $x f64) (result f64) + (f64.div (f64.const 1.0) (f64.sqrt (get_local $x)))) +) + +(assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.6af12ap-43)) (f32.const 0x1.300ed4p+21)) +(assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.e82fc6p-8)) (f32.const 0x1.72c376p+3)) +(assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.b9fa9cp-66)) (f32.const 0x1.85a9bap+32)) +(assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.f4f546p-44)) (f32.const 0x1.6e01c2p+21)) +(assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.5da7aap-86)) (f32.const 0x1.b618cap+42)) + +(assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.1568a63b55fa3p+889)) (f64.const 0x1.5bc9c74c9952p-445)) +(assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.239fcd0939cafp+311)) (f64.const 0x1.5334a922b4818p-156)) +(assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.6e36a24e11054p+104)) (f64.const 0x1.ac13f20977f29p-53)) +(assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.23ee173219f83p+668)) (f64.const 0x1.df753e055862dp-335)) +(assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.b30f74caf9babp+146)) (f64.const 0x1.88bfc3d1764a9p-74)) + +;; Test that sqrt(1.0/x) isn't approximated. + +(module + (func (export "f32.no_approximate_sqrt_reciprocal") (param $x f32) (result f32) + (f32.sqrt (f32.div (f32.const 1.0) (get_local $x)))) +) + +(assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.a4c986p+60)) (f32.const 0x1.8f5ac6p-31)) +(assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.50511ep-9)) (f32.const 0x1.3bdd46p+4)) +(assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.125ec2p+69)) (f32.const 0x1.5db572p-35)) +(assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.ba4c5p+13)) (f32.const 0x1.136f16p-7)) +(assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.4a5be2p+104)) (f32.const 0x1.c2b5bp-53)) + +;; Test that converting i32/i64 to f32/f64 and back isn't folded away + +(module + (func (export "i32.no_fold_f32_s") (param i32) (result i32) + (i32.trunc_s/f32 (f32.convert_s/i32 (get_local 0)))) + (func (export "i32.no_fold_f32_u") (param i32) (result i32) + (i32.trunc_u/f32 (f32.convert_u/i32 (get_local 0)))) + (func (export "i64.no_fold_f64_s") (param i64) (result i64) + (i64.trunc_s/f64 (f64.convert_s/i64 (get_local 0)))) + (func (export "i64.no_fold_f64_u") (param i64) (result i64) + (i64.trunc_u/f64 (f64.convert_u/i64 (get_local 0)))) +) + +(assert_return (invoke "i32.no_fold_f32_s" (i32.const 0x1000000)) (i32.const 0x1000000)) +(assert_return (invoke "i32.no_fold_f32_s" (i32.const 0x1000001)) (i32.const 0x1000000)) +(assert_return (invoke "i32.no_fold_f32_s" (i32.const 0xf0000010)) (i32.const 0xf0000010)) + +(assert_return (invoke "i32.no_fold_f32_u" (i32.const 0x1000000)) (i32.const 0x1000000)) +(assert_return (invoke "i32.no_fold_f32_u" (i32.const 0x1000001)) (i32.const 0x1000000)) +(assert_return (invoke "i32.no_fold_f32_u" (i32.const 0xf0000010)) (i32.const 0xf0000000)) + +(assert_return (invoke "i64.no_fold_f64_s" (i64.const 0x20000000000000)) (i64.const 0x20000000000000)) +(assert_return (invoke "i64.no_fold_f64_s" (i64.const 0x20000000000001)) (i64.const 0x20000000000000)) +(assert_return (invoke "i64.no_fold_f64_s" (i64.const 0xf000000000000400)) (i64.const 0xf000000000000400)) + +(assert_return (invoke "i64.no_fold_f64_u" (i64.const 0x20000000000000)) (i64.const 0x20000000000000)) +(assert_return (invoke "i64.no_fold_f64_u" (i64.const 0x20000000000001)) (i64.const 0x20000000000000)) +(assert_return (invoke "i64.no_fold_f64_u" (i64.const 0xf000000000000400)) (i64.const 0xf000000000000000)) + +;; Test that x+y-y is not folded to x. + +(module + (func (export "f32.no_fold_add_sub") (param $x f32) (param $y f32) (result f32) + (f32.sub (f32.add (get_local $x) (get_local $y)) (get_local $y))) + (func (export "f64.no_fold_add_sub") (param $x f64) (param $y f64) (result f64) + (f64.sub (f64.add (get_local $x) (get_local $y)) (get_local $y))) +) + +(assert_return (invoke "f32.no_fold_add_sub" (f32.const 0x1.b553e4p-47) (f32.const -0x1.67db2cp-26)) (f32.const 0x1.cp-47)) +(assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.a884dp-23) (f32.const 0x1.f2ae1ep-19)) (f32.const -0x1.a884ep-23)) +(assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.fc04fp+82) (f32.const -0x1.65403ap+101)) (f32.const -0x1p+83)) +(assert_return (invoke "f32.no_fold_add_sub" (f32.const 0x1.870fa2p-78) (f32.const 0x1.c54916p-56)) (f32.const 0x1.8p-78)) +(assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.17e966p-108) (f32.const -0x1.5fa61ap-84)) (f32.const -0x1p-107)) + +(assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.1053ea172dba8p-874) (f64.const 0x1.113c413408ac8p-857)) (f64.const -0x1.1053ea172p-874)) +(assert_return (invoke "f64.no_fold_add_sub" (f64.const 0x1.e377d54807972p-546) (f64.const 0x1.040a0a4d1ff7p-526)) (f64.const 0x1.e377d548p-546)) +(assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.75f53cd926b62p-30) (f64.const -0x1.66b176e602bb5p-3)) (f64.const -0x1.75f53dp-30)) +(assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.c450ff28332ap-341) (f64.const 0x1.15a5855023baep-305)) (f64.const -0x1.c451p-341)) +(assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.1ad4a596d3ea8p-619) (f64.const -0x1.17d81a41c0ea8p-588)) (f64.const -0x1.1ad4a8p-619)) + +;; Test that x-y+y is not folded to x. + +(module + (func (export "f32.no_fold_sub_add") (param $x f32) (param $y f32) (result f32) + (f32.add (f32.sub (get_local $x) (get_local $y)) (get_local $y))) + (func (export "f64.no_fold_sub_add") (param $x f64) (param $y f64) (result f64) + (f64.add (f64.sub (get_local $x) (get_local $y)) (get_local $y))) +) + +(assert_return (invoke "f32.no_fold_sub_add" (f32.const -0x1.523cb8p+9) (f32.const 0x1.93096cp+8)) (f32.const -0x1.523cbap+9)) +(assert_return (invoke "f32.no_fold_sub_add" (f32.const -0x1.a31a1p-111) (f32.const 0x1.745efp-95)) (f32.const -0x1.a4p-111)) +(assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.3d5328p+26) (f32.const 0x1.58567p+35)) (f32.const 0x1.3d54p+26)) +(assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.374e26p-39) (f32.const -0x1.66a5p-27)) (f32.const 0x1.374p-39)) +(assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.320facp-3) (f32.const -0x1.ac069ap+14)) (f32.const 0x1.34p-3)) + +(assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.8f92aad2c9b8dp+255) (f64.const -0x1.08cd4992266cbp+259)) (f64.const 0x1.8f92aad2c9b9p+255)) +(assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.5aaff55742c8bp-666) (f64.const 0x1.8f5f47181f46dp-647)) (f64.const 0x1.5aaff5578p-666)) +(assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.21bc52967a98dp+251) (f64.const -0x1.fcffaa32d0884p+300)) (f64.const 0x1.2p+251)) +(assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.9c78361f47374p-26) (f64.const -0x1.69d69f4edc61cp-13)) (f64.const 0x1.9c78361f48p-26)) +(assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.4dbe68e4afab2p-367) (f64.const -0x1.dc24e5b39cd02p-361)) (f64.const 0x1.4dbe68e4afacp-367)) + +;; Test that x*y/y is not folded to x. + +(module + (func (export "f32.no_fold_mul_div") (param $x f32) (param $y f32) (result f32) + (f32.div (f32.mul (get_local $x) (get_local $y)) (get_local $y))) + (func (export "f64.no_fold_mul_div") (param $x f64) (param $y f64) (result f64) + (f64.div (f64.mul (get_local $x) (get_local $y)) (get_local $y))) +) + +(assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.cd859ap+54) (f32.const 0x1.6ca936p-47)) (f32.const -0x1.cd8598p+54)) +(assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.0b56b8p-26) (f32.const 0x1.48264cp-106)) (f32.const -0x1.0b56a4p-26)) +(assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.e7555cp-48) (f32.const -0x1.9161cp+48)) (f32.const -0x1.e7555ap-48)) +(assert_return (invoke "f32.no_fold_mul_div" (f32.const 0x1.aaa50ep+52) (f32.const -0x1.dfb39ep+60)) (f32.const 0x1.aaa50cp+52)) +(assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.2b7dfap-92) (f32.const -0x1.7c4ca6p-37)) (f32.const -0x1.2b7dfep-92)) + +(assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.3d79ff4118a1ap-837) (f64.const -0x1.b8b5dda31808cp-205)) (f64.const -0x1.3d79ff412263ep-837)) +(assert_return (invoke "f64.no_fold_mul_div" (f64.const 0x1.f894d1ee6b3a4p+384) (f64.const 0x1.8c2606d03d58ap+585)) (f64.const 0x1.f894d1ee6b3a5p+384)) +(assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.a022260acc993p+238) (f64.const -0x1.5fbc128fc8e3cp-552)) (f64.const -0x1.a022260acc992p+238)) +(assert_return (invoke "f64.no_fold_mul_div" (f64.const 0x1.9d4b8ed174f54p-166) (f64.const 0x1.ee3d467aeeac6p-906)) (f64.const 0x1.8dcc95a053b2bp-166)) +(assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.e95ea897cdcd4p+660) (f64.const -0x1.854d5df085f2ep-327)) (f64.const -0x1.e95ea897cdcd5p+660)) + +;; Test that x/y*y is not folded to x. + +(module + (func (export "f32.no_fold_div_mul") (param $x f32) (param $y f32) (result f32) + (f32.mul (f32.div (get_local $x) (get_local $y)) (get_local $y))) + (func (export "f64.no_fold_div_mul") (param $x f64) (param $y f64) (result f64) + (f64.mul (f64.div (get_local $x) (get_local $y)) (get_local $y))) +) + +(assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.dc6364p+38) (f32.const 0x1.d630ecp+29)) (f32.const -0x1.dc6362p+38)) +(assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.1f9836p-52) (f32.const -0x1.16c4e4p-18)) (f32.const -0x1.1f9838p-52)) +(assert_return (invoke "f32.no_fold_div_mul" (f32.const 0x1.c5972cp-126) (f32.const -0x1.d6659ep+7)) (f32.const 0x1.c5980ep-126)) +(assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.2e3a9ep-74) (f32.const -0x1.353994p+59)) (f32.const -0x1.2e3a4p-74)) +(assert_return (invoke "f32.no_fold_div_mul" (f32.const 0x1.d96b82p-98) (f32.const 0x1.95d908p+27)) (f32.const 0x1.d96b84p-98)) + +(assert_return (invoke "f64.no_fold_div_mul" (f64.const 0x1.d01f913a52481p-876) (f64.const -0x1.2cd0668b28344p+184)) (f64.const 0x1.d020daf71cdcp-876)) +(assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.81cb7d400918dp-714) (f64.const 0x1.7caa643586d6ep-53)) (f64.const -0x1.81cb7d400918ep-714)) +(assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.66904c97b5c8ep-145) (f64.const 0x1.5c3481592ad4cp+428)) (f64.const -0x1.66904c97b5c8dp-145)) +(assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.e75859d2f0765p-278) (f64.const -0x1.5f19b6ab497f9p+283)) (f64.const -0x1.e75859d2f0764p-278)) +(assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.515fe9c3b5f5p+620) (f64.const 0x1.36be869c99f7ap+989)) (f64.const -0x1.515fe9c3b5f4fp+620)) + +;; Test that promote(demote(x)) is not folded to x. + +(module + (func (export "no_fold_demote_promote") (param $x f64) (result f64) + (f64.promote/f32 (f32.demote/f64 (get_local $x)))) +) + +(assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.dece272390f5dp-133)) (f64.const -0x1.decep-133)) +(assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.19e6c79938a6fp-85)) (f64.const -0x1.19e6c8p-85)) +(assert_return (invoke "no_fold_demote_promote" (f64.const 0x1.49b297ec44dc1p+107)) (f64.const 0x1.49b298p+107)) +(assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.74f5bd865163p-88)) (f64.const -0x1.74f5bep-88)) +(assert_return (invoke "no_fold_demote_promote" (f64.const 0x1.26d675662367ep+104)) (f64.const 0x1.26d676p+104)) + +;; Test that demote(promote(x)) is not folded to x, and aside from NaN is +;; bit-preserving. + +(module + (func (export "no_fold_promote_demote") (param $x f32) (result f32) + (f32.demote/f64 (f64.promote/f32 (get_local $x)))) +) + +(assert_return (invoke "no_fold_promote_demote" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "no_fold_promote_demote" (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "no_fold_promote_demote" (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "no_fold_promote_demote" (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "no_fold_promote_demote" (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "no_fold_promote_demote" (f32.const 0x1.fffffcp-127)) (f32.const 0x1.fffffcp-127)) +(assert_return (invoke "no_fold_promote_demote" (f32.const -0x1.fffffcp-127)) (f32.const -0x1.fffffcp-127)) +(assert_return (invoke "no_fold_promote_demote" (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "no_fold_promote_demote" (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "no_fold_promote_demote" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "no_fold_promote_demote" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "no_fold_promote_demote" (f32.const infinity)) (f32.const infinity)) +(assert_return (invoke "no_fold_promote_demote" (f32.const -infinity)) (f32.const -infinity)) + +;; Test that demote(x+promote(y)) is not folded to demote(x)+y. + +(module + (func (export "no_demote_mixed_add") (param $x f64) (param $y f32) (result f32) + (f32.demote/f64 (f64.add (get_local $x) (f64.promote/f32 (get_local $y))))) + (func (export "no_demote_mixed_add_commuted") (param $y f32) (param $x f64) (result f32) + (f32.demote/f64 (f64.add (f64.promote/f32 (get_local $y)) (get_local $x)))) +) + +(assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.f51a9d04854f9p-95) (f32.const 0x1.3f4e9cp-119)) (f32.const 0x1.f51a9ep-95)) +(assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.065b3d81ad8dp+37) (f32.const 0x1.758cd8p+38)) (f32.const 0x1.f8ba76p+38)) +(assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.626c80963bd17p-119) (f32.const -0x1.9bbf86p-121)) (f32.const 0x1.f6f93ep-120)) +(assert_return (invoke "no_demote_mixed_add" (f64.const -0x1.0d5110e3385bbp-20) (f32.const 0x1.096f4ap-29)) (f32.const -0x1.0ccc5ap-20)) +(assert_return (invoke "no_demote_mixed_add" (f64.const -0x1.73852db4e5075p-20) (f32.const -0x1.24e474p-41)) (f32.const -0x1.738536p-20)) + +(assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.3f4e9cp-119) (f64.const 0x1.f51a9d04854f9p-95)) (f32.const 0x1.f51a9ep-95)) +(assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.758cd8p+38) (f64.const 0x1.065b3d81ad8dp+37)) (f32.const 0x1.f8ba76p+38)) +(assert_return (invoke "no_demote_mixed_add_commuted" (f32.const -0x1.9bbf86p-121) (f64.const 0x1.626c80963bd17p-119)) (f32.const 0x1.f6f93ep-120)) +(assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.096f4ap-29) (f64.const -0x1.0d5110e3385bbp-20)) (f32.const -0x1.0ccc5ap-20)) +(assert_return (invoke "no_demote_mixed_add_commuted" (f32.const -0x1.24e474p-41) (f64.const -0x1.73852db4e5075p-20)) (f32.const -0x1.738536p-20)) + +;; Test that demote(x-promote(y)) is not folded to demote(x)-y. + +(module + (func (export "no_demote_mixed_sub") (param $x f64) (param $y f32) (result f32) + (f32.demote/f64 (f64.sub (get_local $x) (f64.promote/f32 (get_local $y))))) +) + +(assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.a0a183220e9b1p+82) (f32.const 0x1.c5acf8p+61)) (f32.const 0x1.a0a174p+82)) +(assert_return (invoke "no_demote_mixed_sub" (f64.const -0x1.6e2c5ac39f63ep+30) (f32.const 0x1.d48ca4p+17)) (f32.const -0x1.6e3bp+30)) +(assert_return (invoke "no_demote_mixed_sub" (f64.const -0x1.98c74350dde6ap+6) (f32.const 0x1.9d69bcp-12)) (f32.const -0x1.98c7aap+6)) +(assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.0459f34091dbfp-54) (f32.const 0x1.61ad08p-71)) (f32.const 0x1.045942p-54)) +(assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.a7498dca3fdb7p+14) (f32.const 0x1.ed21c8p+15)) (f32.const -0x1.197d02p+15)) + +;; Test that converting between integer and float and back isn't folded away. + +(module + (func (export "f32.i32.no_fold_trunc_s_convert_s") (param $x f32) (result f32) + (f32.convert_s/i32 (i32.trunc_s/f32 (get_local $x)))) + (func (export "f32.i32.no_fold_trunc_u_convert_s") (param $x f32) (result f32) + (f32.convert_s/i32 (i32.trunc_u/f32 (get_local $x)))) + (func (export "f32.i32.no_fold_trunc_s_convert_u") (param $x f32) (result f32) + (f32.convert_u/i32 (i32.trunc_s/f32 (get_local $x)))) + (func (export "f32.i32.no_fold_trunc_u_convert_u") (param $x f32) (result f32) + (f32.convert_u/i32 (i32.trunc_u/f32 (get_local $x)))) + (func (export "f64.i32.no_fold_trunc_s_convert_s") (param $x f64) (result f64) + (f64.convert_s/i32 (i32.trunc_s/f64 (get_local $x)))) + (func (export "f64.i32.no_fold_trunc_u_convert_s") (param $x f64) (result f64) + (f64.convert_s/i32 (i32.trunc_u/f64 (get_local $x)))) + (func (export "f64.i32.no_fold_trunc_s_convert_u") (param $x f64) (result f64) + (f64.convert_u/i32 (i32.trunc_s/f64 (get_local $x)))) + (func (export "f64.i32.no_fold_trunc_u_convert_u") (param $x f64) (result f64) + (f64.convert_u/i32 (i32.trunc_u/f64 (get_local $x)))) + (func (export "f32.i64.no_fold_trunc_s_convert_s") (param $x f32) (result f32) + (f32.convert_s/i64 (i64.trunc_s/f32 (get_local $x)))) + (func (export "f32.i64.no_fold_trunc_u_convert_s") (param $x f32) (result f32) + (f32.convert_s/i64 (i64.trunc_u/f32 (get_local $x)))) + (func (export "f32.i64.no_fold_trunc_s_convert_u") (param $x f32) (result f32) + (f32.convert_u/i64 (i64.trunc_s/f32 (get_local $x)))) + (func (export "f32.i64.no_fold_trunc_u_convert_u") (param $x f32) (result f32) + (f32.convert_u/i64 (i64.trunc_u/f32 (get_local $x)))) + (func (export "f64.i64.no_fold_trunc_s_convert_s") (param $x f64) (result f64) + (f64.convert_s/i64 (i64.trunc_s/f64 (get_local $x)))) + (func (export "f64.i64.no_fold_trunc_u_convert_s") (param $x f64) (result f64) + (f64.convert_s/i64 (i64.trunc_u/f64 (get_local $x)))) + (func (export "f64.i64.no_fold_trunc_s_convert_u") (param $x f64) (result f64) + (f64.convert_u/i64 (i64.trunc_s/f64 (get_local $x)))) + (func (export "f64.i64.no_fold_trunc_u_convert_u") (param $x f64) (result f64) + (f64.convert_u/i64 (i64.trunc_u/f64 (get_local $x)))) +) + +(assert_return (invoke "f32.i32.no_fold_trunc_s_convert_s" (f32.const 1.5)) (f32.const 1.0)) +(assert_return (invoke "f32.i32.no_fold_trunc_s_convert_s" (f32.const -1.5)) (f32.const -1.0)) +(assert_return (invoke "f32.i32.no_fold_trunc_u_convert_s" (f32.const 1.5)) (f32.const 1.0)) +(assert_return (invoke "f32.i32.no_fold_trunc_u_convert_s" (f32.const -0.5)) (f32.const 0.0)) +(assert_return (invoke "f32.i32.no_fold_trunc_s_convert_u" (f32.const 1.5)) (f32.const 1.0)) +(assert_return (invoke "f32.i32.no_fold_trunc_s_convert_u" (f32.const -1.5)) (f32.const 0x1p+32)) +(assert_return (invoke "f32.i32.no_fold_trunc_u_convert_u" (f32.const 1.5)) (f32.const 1.0)) +(assert_return (invoke "f32.i32.no_fold_trunc_u_convert_u" (f32.const -0.5)) (f32.const 0.0)) + +(assert_return (invoke "f64.i32.no_fold_trunc_s_convert_s" (f64.const 1.5)) (f64.const 1.0)) +(assert_return (invoke "f64.i32.no_fold_trunc_s_convert_s" (f64.const -1.5)) (f64.const -1.0)) +(assert_return (invoke "f64.i32.no_fold_trunc_u_convert_s" (f64.const 1.5)) (f64.const 1.0)) +(assert_return (invoke "f64.i32.no_fold_trunc_u_convert_s" (f64.const -0.5)) (f64.const 0.0)) +(assert_return (invoke "f64.i32.no_fold_trunc_s_convert_u" (f64.const 1.5)) (f64.const 1.0)) +(assert_return (invoke "f64.i32.no_fold_trunc_s_convert_u" (f64.const -1.5)) (f64.const 0x1.fffffffep+31)) +(assert_return (invoke "f64.i32.no_fold_trunc_u_convert_u" (f64.const 1.5)) (f64.const 1.0)) +(assert_return (invoke "f64.i32.no_fold_trunc_u_convert_u" (f64.const -0.5)) (f64.const 0.0)) + +(assert_return (invoke "f32.i64.no_fold_trunc_s_convert_s" (f32.const 1.5)) (f32.const 1.0)) +(assert_return (invoke "f32.i64.no_fold_trunc_s_convert_s" (f32.const -1.5)) (f32.const -1.0)) +(assert_return (invoke "f32.i64.no_fold_trunc_u_convert_s" (f32.const 1.5)) (f32.const 1.0)) +(assert_return (invoke "f32.i64.no_fold_trunc_u_convert_s" (f32.const -0.5)) (f32.const 0.0)) +(assert_return (invoke "f32.i64.no_fold_trunc_s_convert_u" (f32.const 1.5)) (f32.const 1.0)) +(assert_return (invoke "f32.i64.no_fold_trunc_s_convert_u" (f32.const -1.5)) (f32.const 0x1p+64)) +(assert_return (invoke "f32.i64.no_fold_trunc_u_convert_u" (f32.const 1.5)) (f32.const 1.0)) +(assert_return (invoke "f32.i64.no_fold_trunc_u_convert_u" (f32.const -0.5)) (f32.const 0.0)) + +(assert_return (invoke "f64.i64.no_fold_trunc_s_convert_s" (f64.const 1.5)) (f64.const 1.0)) +(assert_return (invoke "f64.i64.no_fold_trunc_s_convert_s" (f64.const -1.5)) (f64.const -1.0)) +(assert_return (invoke "f64.i64.no_fold_trunc_u_convert_s" (f64.const 1.5)) (f64.const 1.0)) +(assert_return (invoke "f64.i64.no_fold_trunc_u_convert_s" (f64.const -0.5)) (f64.const 0.0)) +(assert_return (invoke "f64.i64.no_fold_trunc_s_convert_u" (f64.const 1.5)) (f64.const 1.0)) +(assert_return (invoke "f64.i64.no_fold_trunc_s_convert_u" (f64.const -1.5)) (f64.const 0x1p+64)) +(assert_return (invoke "f64.i64.no_fold_trunc_u_convert_u" (f64.const 1.5)) (f64.const 1.0)) +(assert_return (invoke "f64.i64.no_fold_trunc_u_convert_u" (f64.const -0.5)) (f64.const 0.0)) + +;; Test that dividing by a loop-invariant constant isn't optimized to be a +;; multiplication by a reciprocal, which would be particularly tempting since +;; the reciprocal computation could be hoisted. + +(module + (memory 1 1) + (func (export "init") (param $i i32) (param $x f32) (f32.store (get_local $i) (get_local $x))) + + (func (export "run") (param $n i32) (param $z f32) + (local $i i32) + (block $exit + (loop $cont + (f32.store + (get_local $i) + (f32.div (f32.load (get_local $i)) (get_local $z)) + ) + (set_local $i (i32.add (get_local $i) (i32.const 4))) + (br_if $cont (i32.lt_u (get_local $i) (get_local $n))) + ) + ) + ) + + (func (export "check") (param $i i32) (result f32) (f32.load (get_local $i))) +) + +(invoke "init" (i32.const 0) (f32.const 15.1)) +(invoke "init" (i32.const 4) (f32.const 15.2)) +(invoke "init" (i32.const 8) (f32.const 15.3)) +(invoke "init" (i32.const 12) (f32.const 15.4)) +(assert_return (invoke "check" (i32.const 0)) (f32.const 15.1)) +(assert_return (invoke "check" (i32.const 4)) (f32.const 15.2)) +(assert_return (invoke "check" (i32.const 8)) (f32.const 15.3)) +(assert_return (invoke "check" (i32.const 12)) (f32.const 15.4)) +(invoke "run" (i32.const 16) (f32.const 3.0)) +(assert_return (invoke "check" (i32.const 0)) (f32.const 0x1.422222p+2)) +(assert_return (invoke "check" (i32.const 4)) (f32.const 0x1.444444p+2)) +(assert_return (invoke "check" (i32.const 8)) (f32.const 0x1.466666p+2)) +(assert_return (invoke "check" (i32.const 12)) (f32.const 0x1.488888p+2)) + +(module + (memory 1 1) + (func (export "init") (param $i i32) (param $x f64) (f64.store (get_local $i) (get_local $x))) + + (func (export "run") (param $n i32) (param $z f64) + (local $i i32) + (block $exit + (loop $cont + (f64.store + (get_local $i) + (f64.div (f64.load (get_local $i)) (get_local $z)) + ) + (set_local $i (i32.add (get_local $i) (i32.const 8))) + (br_if $cont (i32.lt_u (get_local $i) (get_local $n))) + ) + ) + ) + + (func (export "check") (param $i i32) (result f64) (f64.load (get_local $i))) +) + +(invoke "init" (i32.const 0) (f64.const 15.1)) +(invoke "init" (i32.const 8) (f64.const 15.2)) +(invoke "init" (i32.const 16) (f64.const 15.3)) +(invoke "init" (i32.const 24) (f64.const 15.4)) +(assert_return (invoke "check" (i32.const 0)) (f64.const 15.1)) +(assert_return (invoke "check" (i32.const 8)) (f64.const 15.2)) +(assert_return (invoke "check" (i32.const 16)) (f64.const 15.3)) +(assert_return (invoke "check" (i32.const 24)) (f64.const 15.4)) +(invoke "run" (i32.const 32) (f64.const 3.0)) +(assert_return (invoke "check" (i32.const 0)) (f64.const 0x1.4222222222222p+2)) +(assert_return (invoke "check" (i32.const 8)) (f64.const 0x1.4444444444444p+2)) +(assert_return (invoke "check" (i32.const 16)) (f64.const 0x1.4666666666667p+2)) +(assert_return (invoke "check" (i32.const 24)) (f64.const 0x1.4888888888889p+2)) + +;; Test that ult/ugt/etc. aren't folded to olt/ogt/etc. + +(module + (func (export "f32.ult") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.ge (get_local $x) (get_local $y)))) + (func (export "f32.ule") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.gt (get_local $x) (get_local $y)))) + (func (export "f32.ugt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.le (get_local $x) (get_local $y)))) + (func (export "f32.uge") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.lt (get_local $x) (get_local $y)))) + + (func (export "f64.ult") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.ge (get_local $x) (get_local $y)))) + (func (export "f64.ule") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.gt (get_local $x) (get_local $y)))) + (func (export "f64.ugt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.le (get_local $x) (get_local $y)))) + (func (export "f64.uge") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.lt (get_local $x) (get_local $y)))) +) + +(assert_return (invoke "f32.ult" (f32.const 3.0) (f32.const 2.0)) (i32.const 0)) +(assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const 2.0)) (i32.const 0)) +(assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const 3.0)) (i32.const 1)) +(assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "f32.ule" (f32.const 3.0) (f32.const 2.0)) (i32.const 0)) +(assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const 2.0)) (i32.const 1)) +(assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const 3.0)) (i32.const 1)) +(assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "f32.ugt" (f32.const 3.0) (f32.const 2.0)) (i32.const 1)) +(assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const 2.0)) (i32.const 0)) +(assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const 3.0)) (i32.const 0)) +(assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "f32.uge" (f32.const 3.0) (f32.const 2.0)) (i32.const 1)) +(assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const 2.0)) (i32.const 1)) +(assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const 3.0)) (i32.const 0)) +(assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "f64.ult" (f64.const 3.0) (f64.const 2.0)) (i32.const 0)) +(assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const 2.0)) (i32.const 0)) +(assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const 3.0)) (i32.const 1)) +(assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "f64.ule" (f64.const 3.0) (f64.const 2.0)) (i32.const 0)) +(assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const 2.0)) (i32.const 1)) +(assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const 3.0)) (i32.const 1)) +(assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "f64.ugt" (f64.const 3.0) (f64.const 2.0)) (i32.const 1)) +(assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const 2.0)) (i32.const 0)) +(assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const 3.0)) (i32.const 0)) +(assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "f64.uge" (f64.const 3.0) (f64.const 2.0)) (i32.const 1)) +(assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const 2.0)) (i32.const 1)) +(assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const 3.0)) (i32.const 0)) +(assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const nan)) (i32.const 1)) + +;; Test that x= y+z is not optimized to x >= y (monotonicity). +;; http://cs.nyu.edu/courses/spring13/CSCI-UA.0201-003/lecture6.pdf + +(module + (func (export "f32.no_fold_add_le_monotonicity") (param $x f32) (param $y f32) (param $z f32) (result i32) + (f32.le (f32.add (get_local $x) (get_local $z)) (f32.add (get_local $y) (get_local $z)))) + + (func (export "f32.no_fold_add_ge_monotonicity") (param $x f32) (param $y f32) (param $z f32) (result i32) + (f32.ge (f32.add (get_local $x) (get_local $z)) (f32.add (get_local $y) (get_local $z)))) + + (func (export "f64.no_fold_add_le_monotonicity") (param $x f64) (param $y f64) (param $z f64) (result i32) + (f64.le (f64.add (get_local $x) (get_local $z)) (f64.add (get_local $y) (get_local $z)))) + + (func (export "f64.no_fold_add_ge_monotonicity") (param $x f64) (param $y f64) (param $z f64) (result i32) + (f64.ge (f64.add (get_local $x) (get_local $z)) (f64.add (get_local $y) (get_local $z)))) +) + +(assert_return (invoke "f32.no_fold_add_le_monotonicity" (f32.const 0.0) (f32.const 0.0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "f32.no_fold_add_le_monotonicity" (f32.const infinity) (f32.const -infinity) (f32.const infinity)) (i32.const 0)) +(assert_return (invoke "f64.no_fold_add_le_monotonicity" (f64.const 0.0) (f64.const 0.0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "f64.no_fold_add_le_monotonicity" (f64.const infinity) (f64.const -infinity) (f64.const infinity)) (i32.const 0)) + +;; Test that !(x < y) and friends are not optimized to x >= y and friends. + +(module + (func (export "f32.not_lt") (param $x f32) (param $y f32) (result i32) + (i32.eqz (f32.lt (get_local $x) (get_local $y)))) + + (func (export "f32.not_le") (param $x f32) (param $y f32) (result i32) + (i32.eqz (f32.le (get_local $x) (get_local $y)))) + + (func (export "f32.not_gt") (param $x f32) (param $y f32) (result i32) + (i32.eqz (f32.gt (get_local $x) (get_local $y)))) + + (func (export "f32.not_ge") (param $x f32) (param $y f32) (result i32) + (i32.eqz (f32.ge (get_local $x) (get_local $y)))) + + (func (export "f64.not_lt") (param $x f64) (param $y f64) (result i32) + (i32.eqz (f64.lt (get_local $x) (get_local $y)))) + + (func (export "f64.not_le") (param $x f64) (param $y f64) (result i32) + (i32.eqz (f64.le (get_local $x) (get_local $y)))) + + (func (export "f64.not_gt") (param $x f64) (param $y f64) (result i32) + (i32.eqz (f64.gt (get_local $x) (get_local $y)))) + + (func (export "f64.not_ge") (param $x f64) (param $y f64) (result i32) + (i32.eqz (f64.ge (get_local $x) (get_local $y)))) +) + +(assert_return (invoke "f32.not_lt" (f32.const nan) (f32.const 0.0)) (i32.const 1)) +(assert_return (invoke "f32.not_le" (f32.const nan) (f32.const 0.0)) (i32.const 1)) +(assert_return (invoke "f32.not_gt" (f32.const nan) (f32.const 0.0)) (i32.const 1)) +(assert_return (invoke "f32.not_ge" (f32.const nan) (f32.const 0.0)) (i32.const 1)) +(assert_return (invoke "f64.not_lt" (f64.const nan) (f64.const 0.0)) (i32.const 1)) +(assert_return (invoke "f64.not_le" (f64.const nan) (f64.const 0.0)) (i32.const 1)) +(assert_return (invoke "f64.not_gt" (f64.const nan) (f64.const 0.0)) (i32.const 1)) +(assert_return (invoke "f64.not_ge" (f64.const nan) (f64.const 0.0)) (i32.const 1)) + +;; Test that a method for approximating a "machine epsilon" produces the expected +;; approximation. +;; http://blogs.mathworks.com/cleve/2014/07/07/floating-point-numbers/#24cb4f4d-b8a9-4c19-b22b-9d2a9f7f3812 + +(module + (func (export "f32.epsilon") (result f32) + (f32.sub (f32.const 1.0) (f32.mul (f32.const 3.0) (f32.sub (f32.div (f32.const 4.0) (f32.const 3.0)) (f32.const 1.0))))) + + (func (export "f64.epsilon") (result f64) + (f64.sub (f64.const 1.0) (f64.mul (f64.const 3.0) (f64.sub (f64.div (f64.const 4.0) (f64.const 3.0)) (f64.const 1.0))))) +) + +(assert_return (invoke "f32.epsilon") (f32.const -0x1p-23)) +(assert_return (invoke "f64.epsilon") (f64.const 0x1p-52)) + +;; Test that floating-point numbers are not optimized as if they form a +;; trichotomy. + +(module + (func (export "f32.no_trichotomy_lt") (param $x f32) (param $y f32) (result i32) + (i32.or (f32.lt (get_local $x) (get_local $y)) (f32.ge (get_local $x) (get_local $y)))) + (func (export "f32.no_trichotomy_le") (param $x f32) (param $y f32) (result i32) + (i32.or (f32.le (get_local $x) (get_local $y)) (f32.gt (get_local $x) (get_local $y)))) + (func (export "f32.no_trichotomy_gt") (param $x f32) (param $y f32) (result i32) + (i32.or (f32.gt (get_local $x) (get_local $y)) (f32.le (get_local $x) (get_local $y)))) + (func (export "f32.no_trichotomy_ge") (param $x f32) (param $y f32) (result i32) + (i32.or (f32.ge (get_local $x) (get_local $y)) (f32.lt (get_local $x) (get_local $y)))) + + (func (export "f64.no_trichotomy_lt") (param $x f64) (param $y f64) (result i32) + (i32.or (f64.lt (get_local $x) (get_local $y)) (f64.ge (get_local $x) (get_local $y)))) + (func (export "f64.no_trichotomy_le") (param $x f64) (param $y f64) (result i32) + (i32.or (f64.le (get_local $x) (get_local $y)) (f64.gt (get_local $x) (get_local $y)))) + (func (export "f64.no_trichotomy_gt") (param $x f64) (param $y f64) (result i32) + (i32.or (f64.gt (get_local $x) (get_local $y)) (f64.le (get_local $x) (get_local $y)))) + (func (export "f64.no_trichotomy_ge") (param $x f64) (param $y f64) (result i32) + (i32.or (f64.ge (get_local $x) (get_local $y)) (f64.lt (get_local $x) (get_local $y)))) +) + +(assert_return (invoke "f32.no_trichotomy_lt" (f32.const 0.0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "f32.no_trichotomy_le" (f32.const 0.0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "f32.no_trichotomy_gt" (f32.const 0.0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "f32.no_trichotomy_ge" (f32.const 0.0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "f64.no_trichotomy_lt" (f64.const 0.0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "f64.no_trichotomy_le" (f64.const 0.0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "f64.no_trichotomy_gt" (f64.const 0.0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "f64.no_trichotomy_ge" (f64.const 0.0) (f64.const nan)) (i32.const 0)) diff --git a/src/binaryen/test/spec/float_literals.wast b/src/binaryen/test/spec/float_literals.wast new file mode 100644 index 0000000000..c69d81fb7d --- /dev/null +++ b/src/binaryen/test/spec/float_literals.wast @@ -0,0 +1,137 @@ +;; Test floating-point literal parsing. + +(module + ;; f32 special values + (func (export "f32.nan") (result i32) (i32.reinterpret/f32 (f32.const nan))) + (func (export "f32.positive_nan") (result i32) (i32.reinterpret/f32 (f32.const +nan))) + (func (export "f32.negative_nan") (result i32) (i32.reinterpret/f32 (f32.const -nan))) + (func (export "f32.plain_nan") (result i32) (i32.reinterpret/f32 (f32.const nan:0x400000))) + (func (export "f32.informally_known_as_plain_snan") (result i32) (i32.reinterpret/f32 (f32.const nan:0x200000))) + (func (export "f32.all_ones_nan") (result i32) (i32.reinterpret/f32 (f32.const -nan:0x7fffff))) + (func (export "f32.misc_nan") (result i32) (i32.reinterpret/f32 (f32.const nan:0x012345))) + (func (export "f32.misc_positive_nan") (result i32) (i32.reinterpret/f32 (f32.const +nan:0x304050))) + (func (export "f32.misc_negative_nan") (result i32) (i32.reinterpret/f32 (f32.const -nan:0x2abcde))) + (func (export "f32.infinity") (result i32) (i32.reinterpret/f32 (f32.const infinity))) + (func (export "f32.positive_infinity") (result i32) (i32.reinterpret/f32 (f32.const +infinity))) + (func (export "f32.negative_infinity") (result i32) (i32.reinterpret/f32 (f32.const -infinity))) + + ;; f32 numbers + (func (export "f32.zero") (result i32) (i32.reinterpret/f32 (f32.const 0x0.0p0))) + (func (export "f32.positive_zero") (result i32) (i32.reinterpret/f32 (f32.const +0x0.0p0))) + (func (export "f32.negative_zero") (result i32) (i32.reinterpret/f32 (f32.const -0x0.0p0))) + (func (export "f32.misc") (result i32) (i32.reinterpret/f32 (f32.const 0x1.921fb6p+2))) + (func (export "f32.min_positive") (result i32) (i32.reinterpret/f32 (f32.const 0x1p-149))) + (func (export "f32.min_normal") (result i32) (i32.reinterpret/f32 (f32.const 0x1p-126))) + (func (export "f32.max_finite") (result i32) (i32.reinterpret/f32 (f32.const 0x1.fffffep+127))) + (func (export "f32.max_subnormal") (result i32) (i32.reinterpret/f32 (f32.const 0x1.fffffcp-127))) + (func (export "f32.trailing_dot") (result i32) (i32.reinterpret/f32 (f32.const 0x1.p10))) + + ;; f32 in decimal format + (func (export "f32_dec.zero") (result i32) (i32.reinterpret/f32 (f32.const 0.0e0))) + (func (export "f32_dec.positive_zero") (result i32) (i32.reinterpret/f32 (f32.const +0.0e0))) + (func (export "f32_dec.negative_zero") (result i32) (i32.reinterpret/f32 (f32.const -0.0e0))) + (func (export "f32_dec.misc") (result i32) (i32.reinterpret/f32 (f32.const 6.28318548202514648))) + (func (export "f32_dec.min_positive") (result i32) (i32.reinterpret/f32 (f32.const 1.4013e-45))) + (func (export "f32_dec.min_normal") (result i32) (i32.reinterpret/f32 (f32.const 1.1754944e-38))) + (func (export "f32_dec.max_subnormal") (result i32) (i32.reinterpret/f32 (f32.const 1.1754942e-38))) + (func (export "f32_dec.max_finite") (result i32) (i32.reinterpret/f32 (f32.const 3.4028234e+38))) + (func (export "f32_dec.trailing_dot") (result i32) (i32.reinterpret/f32 (f32.const 1.e10))) + + ;; f64 special values + (func (export "f64.nan") (result i64) (i64.reinterpret/f64 (f64.const nan))) + (func (export "f64.positive_nan") (result i64) (i64.reinterpret/f64 (f64.const +nan))) + (func (export "f64.negative_nan") (result i64) (i64.reinterpret/f64 (f64.const -nan))) + (func (export "f64.plain_nan") (result i64) (i64.reinterpret/f64 (f64.const nan:0x8000000000000))) + (func (export "f64.informally_known_as_plain_snan") (result i64) (i64.reinterpret/f64 (f64.const nan:0x4000000000000))) + (func (export "f64.all_ones_nan") (result i64) (i64.reinterpret/f64 (f64.const -nan:0xfffffffffffff))) + (func (export "f64.misc_nan") (result i64) (i64.reinterpret/f64 (f64.const nan:0x0123456789abc))) + (func (export "f64.misc_positive_nan") (result i64) (i64.reinterpret/f64 (f64.const +nan:0x3040506070809))) + (func (export "f64.misc_negative_nan") (result i64) (i64.reinterpret/f64 (f64.const -nan:0x2abcdef012345))) + (func (export "f64.infinity") (result i64) (i64.reinterpret/f64 (f64.const infinity))) + (func (export "f64.positive_infinity") (result i64) (i64.reinterpret/f64 (f64.const +infinity))) + (func (export "f64.negative_infinity") (result i64) (i64.reinterpret/f64 (f64.const -infinity))) + + ;; f64 numbers + (func (export "f64.zero") (result i64) (i64.reinterpret/f64 (f64.const 0x0.0p0))) + (func (export "f64.positive_zero") (result i64) (i64.reinterpret/f64 (f64.const +0x0.0p0))) + (func (export "f64.negative_zero") (result i64) (i64.reinterpret/f64 (f64.const -0x0.0p0))) + (func (export "f64.misc") (result i64) (i64.reinterpret/f64 (f64.const 0x1.921fb54442d18p+2))) + (func (export "f64.min_positive") (result i64) (i64.reinterpret/f64 (f64.const 0x0.0000000000001p-1022))) + (func (export "f64.min_normal") (result i64) (i64.reinterpret/f64 (f64.const 0x1p-1022))) + (func (export "f64.max_subnormal") (result i64) (i64.reinterpret/f64 (f64.const 0x0.fffffffffffffp-1022))) + (func (export "f64.max_finite") (result i64) (i64.reinterpret/f64 (f64.const 0x1.fffffffffffffp+1023))) + (func (export "f64.trailing_dot") (result i64) (i64.reinterpret/f64 (f64.const 0x1.p100))) + + ;; f64 numbers in decimal format + (func (export "f64_dec.zero") (result i64) (i64.reinterpret/f64 (f64.const 0.0e0))) + (func (export "f64_dec.positive_zero") (result i64) (i64.reinterpret/f64 (f64.const +0.0e0))) + (func (export "f64_dec.negative_zero") (result i64) (i64.reinterpret/f64 (f64.const -0.0e0))) + (func (export "f64_dec.misc") (result i64) (i64.reinterpret/f64 (f64.const 6.28318530717958623))) + (func (export "f64_dec.min_positive") (result i64) (i64.reinterpret/f64 (f64.const 4.94066e-324))) + (func (export "f64_dec.min_normal") (result i64) (i64.reinterpret/f64 (f64.const 2.2250738585072012e-308))) + (func (export "f64_dec.max_subnormal") (result i64) (i64.reinterpret/f64 (f64.const 2.2250738585072011e-308))) + (func (export "f64_dec.max_finite") (result i64) (i64.reinterpret/f64 (f64.const 1.7976931348623157e+308))) + (func (export "f64_dec.trailing_dot") (result i64) (i64.reinterpret/f64 (f64.const 1.e100))) +) + +(assert_return (invoke "f32.nan") (i32.const 0x7fc00000)) +(assert_return (invoke "f32.positive_nan") (i32.const 0x7fc00000)) +(assert_return (invoke "f32.negative_nan") (i32.const 0xffc00000)) +(assert_return (invoke "f32.plain_nan") (i32.const 0x7fc00000)) +(assert_return (invoke "f32.informally_known_as_plain_snan") (i32.const 0x7fa00000)) +(assert_return (invoke "f32.all_ones_nan") (i32.const 0xffffffff)) +(assert_return (invoke "f32.misc_nan") (i32.const 0x7f812345)) +(assert_return (invoke "f32.misc_positive_nan") (i32.const 0x7fb04050)) +(assert_return (invoke "f32.misc_negative_nan") (i32.const 0xffaabcde)) +(assert_return (invoke "f32.infinity") (i32.const 0x7f800000)) +(assert_return (invoke "f32.positive_infinity") (i32.const 0x7f800000)) +(assert_return (invoke "f32.negative_infinity") (i32.const 0xff800000)) +(assert_return (invoke "f32.zero") (i32.const 0)) +(assert_return (invoke "f32.positive_zero") (i32.const 0)) +(assert_return (invoke "f32.negative_zero") (i32.const 0x80000000)) +(assert_return (invoke "f32.misc") (i32.const 0x40c90fdb)) +(assert_return (invoke "f32.min_positive") (i32.const 1)) +(assert_return (invoke "f32.min_normal") (i32.const 0x800000)) +(assert_return (invoke "f32.max_subnormal") (i32.const 0x7fffff)) +(assert_return (invoke "f32.max_finite") (i32.const 0x7f7fffff)) +(assert_return (invoke "f32.trailing_dot") (i32.const 0x44800000)) +(assert_return (invoke "f32_dec.zero") (i32.const 0)) +(assert_return (invoke "f32_dec.positive_zero") (i32.const 0)) +(assert_return (invoke "f32_dec.negative_zero") (i32.const 0x80000000)) +(assert_return (invoke "f32_dec.misc") (i32.const 0x40c90fdb)) +(assert_return (invoke "f32_dec.min_positive") (i32.const 1)) +(assert_return (invoke "f32_dec.min_normal") (i32.const 0x800000)) +(assert_return (invoke "f32_dec.max_subnormal") (i32.const 0x7fffff)) +(assert_return (invoke "f32_dec.max_finite") (i32.const 0x7f7fffff)) +(assert_return (invoke "f32_dec.trailing_dot") (i32.const 0x501502f9)) + +(assert_return (invoke "f64.nan") (i64.const 0x7ff8000000000000)) +(assert_return (invoke "f64.positive_nan") (i64.const 0x7ff8000000000000)) +(assert_return (invoke "f64.negative_nan") (i64.const 0xfff8000000000000)) +(assert_return (invoke "f64.plain_nan") (i64.const 0x7ff8000000000000)) +(assert_return (invoke "f64.informally_known_as_plain_snan") (i64.const 0x7ff4000000000000)) +(assert_return (invoke "f64.all_ones_nan") (i64.const 0xffffffffffffffff)) +(assert_return (invoke "f64.misc_nan") (i64.const 0x7ff0123456789abc)) +(assert_return (invoke "f64.misc_positive_nan") (i64.const 0x7ff3040506070809)) +(assert_return (invoke "f64.misc_negative_nan") (i64.const 0xfff2abcdef012345)) +(assert_return (invoke "f64.infinity") (i64.const 0x7ff0000000000000)) +(assert_return (invoke "f64.positive_infinity") (i64.const 0x7ff0000000000000)) +(assert_return (invoke "f64.negative_infinity") (i64.const 0xfff0000000000000)) +(assert_return (invoke "f64.zero") (i64.const 0)) +(assert_return (invoke "f64.positive_zero") (i64.const 0)) +(assert_return (invoke "f64.negative_zero") (i64.const 0x8000000000000000)) +(assert_return (invoke "f64.misc") (i64.const 0x401921fb54442d18)) +(assert_return (invoke "f64.min_positive") (i64.const 1)) +(assert_return (invoke "f64.min_normal") (i64.const 0x10000000000000)) +(assert_return (invoke "f64.max_subnormal") (i64.const 0xfffffffffffff)) +(assert_return (invoke "f64.max_finite") (i64.const 0x7fefffffffffffff)) +(assert_return (invoke "f64.trailing_dot") (i64.const 0x4630000000000000)) +(assert_return (invoke "f64_dec.zero") (i64.const 0)) +(assert_return (invoke "f64_dec.positive_zero") (i64.const 0)) +(assert_return (invoke "f64_dec.negative_zero") (i64.const 0x8000000000000000)) +(assert_return (invoke "f64_dec.misc") (i64.const 0x401921fb54442d18)) +(assert_return (invoke "f64_dec.min_positive") (i64.const 1)) +(assert_return (invoke "f64_dec.min_normal") (i64.const 0x10000000000000)) +(assert_return (invoke "f64_dec.max_subnormal") (i64.const 0xfffffffffffff)) +(assert_return (invoke "f64_dec.max_finite") (i64.const 0x7fefffffffffffff)) +(assert_return (invoke "f64_dec.trailing_dot") (i64.const 0x54b249ad2594c37d)) diff --git a/src/binaryen/test/spec/float_memory.wast b/src/binaryen/test/spec/float_memory.wast new file mode 100644 index 0000000000..3801158f92 --- /dev/null +++ b/src/binaryen/test/spec/float_memory.wast @@ -0,0 +1,157 @@ +;; Test that floating-point load and store are bit-preserving. + +;; Test that load and store do not canonicalize NaNs as x87 does. + +(module + (memory (data "\00\00\a0\7f")) + + (func (export "f32.load") (result f32) (f32.load (i32.const 0))) + (func (export "i32.load") (result i32) (i32.load (i32.const 0))) + (func (export "f32.store") (f32.store (i32.const 0) (f32.const nan:0x200000))) + (func (export "i32.store") (i32.store (i32.const 0) (i32.const 0x7fa00000))) + (func (export "reset") (i32.store (i32.const 0) (i32.const 0))) +) + +(assert_return (invoke "i32.load") (i32.const 0x7fa00000)) +(assert_return (invoke "f32.load") (f32.const nan:0x200000)) +(invoke "reset") +(assert_return (invoke "i32.load") (i32.const 0x0)) +(assert_return (invoke "f32.load") (f32.const 0.0)) +(invoke "f32.store") +(assert_return (invoke "i32.load") (i32.const 0x7fa00000)) +(assert_return (invoke "f32.load") (f32.const nan:0x200000)) +(invoke "reset") +(assert_return (invoke "i32.load") (i32.const 0x0)) +(assert_return (invoke "f32.load") (f32.const 0.0)) +(invoke "i32.store") +(assert_return (invoke "i32.load") (i32.const 0x7fa00000)) +(assert_return (invoke "f32.load") (f32.const nan:0x200000)) + +(module + (memory (data "\00\00\00\00\00\00\f4\7f")) + + (func (export "f64.load") (result f64) (f64.load (i32.const 0))) + (func (export "i64.load") (result i64) (i64.load (i32.const 0))) + (func (export "f64.store") (f64.store (i32.const 0) (f64.const nan:0x4000000000000))) + (func (export "i64.store") (i64.store (i32.const 0) (i64.const 0x7ff4000000000000))) + (func (export "reset") (i64.store (i32.const 0) (i64.const 0))) +) + +(assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) +(assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) +(invoke "reset") +(assert_return (invoke "i64.load") (i64.const 0x0)) +(assert_return (invoke "f64.load") (f64.const 0.0)) +(invoke "f64.store") +(assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) +(assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) +(invoke "reset") +(assert_return (invoke "i64.load") (i64.const 0x0)) +(assert_return (invoke "f64.load") (f64.const 0.0)) +(invoke "i64.store") +(assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) +(assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) + +;; Test that unaligned load and store do not canonicalize NaNs. + +(module + (memory (data "\00\00\00\a0\7f")) + + (func (export "f32.load") (result f32) (f32.load (i32.const 1))) + (func (export "i32.load") (result i32) (i32.load (i32.const 1))) + (func (export "f32.store") (f32.store (i32.const 1) (f32.const nan:0x200000))) + (func (export "i32.store") (i32.store (i32.const 1) (i32.const 0x7fa00000))) + (func (export "reset") (i32.store (i32.const 1) (i32.const 0))) +) + +(assert_return (invoke "i32.load") (i32.const 0x7fa00000)) +(assert_return (invoke "f32.load") (f32.const nan:0x200000)) +(invoke "reset") +(assert_return (invoke "i32.load") (i32.const 0x0)) +(assert_return (invoke "f32.load") (f32.const 0.0)) +(invoke "f32.store") +(assert_return (invoke "i32.load") (i32.const 0x7fa00000)) +(assert_return (invoke "f32.load") (f32.const nan:0x200000)) +(invoke "reset") +(assert_return (invoke "i32.load") (i32.const 0x0)) +(assert_return (invoke "f32.load") (f32.const 0.0)) +(invoke "i32.store") +(assert_return (invoke "i32.load") (i32.const 0x7fa00000)) +(assert_return (invoke "f32.load") (f32.const nan:0x200000)) + +(module + (memory (data "\00\00\00\00\00\00\00\f4\7f")) + + (func (export "f64.load") (result f64) (f64.load (i32.const 1))) + (func (export "i64.load") (result i64) (i64.load (i32.const 1))) + (func (export "f64.store") (f64.store (i32.const 1) (f64.const nan:0x4000000000000))) + (func (export "i64.store") (i64.store (i32.const 1) (i64.const 0x7ff4000000000000))) + (func (export "reset") (i64.store (i32.const 1) (i64.const 0))) +) + +(assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) +(assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) +(invoke "reset") +(assert_return (invoke "i64.load") (i64.const 0x0)) +(assert_return (invoke "f64.load") (f64.const 0.0)) +(invoke "f64.store") +(assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) +(assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) +(invoke "reset") +(assert_return (invoke "i64.load") (i64.const 0x0)) +(assert_return (invoke "f64.load") (f64.const 0.0)) +(invoke "i64.store") +(assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) +(assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) + +;; Test that load and store do not canonicalize NaNs as some JS engines do. + +(module + (memory (data "\01\00\d0\7f")) + + (func (export "f32.load") (result f32) (f32.load (i32.const 0))) + (func (export "i32.load") (result i32) (i32.load (i32.const 0))) + (func (export "f32.store") (f32.store (i32.const 0) (f32.const nan:0x500001))) + (func (export "i32.store") (i32.store (i32.const 0) (i32.const 0x7fd00001))) + (func (export "reset") (i32.store (i32.const 0) (i32.const 0))) +) + +(assert_return (invoke "i32.load") (i32.const 0x7fd00001)) +(assert_return (invoke "f32.load") (f32.const nan:0x500001)) +(invoke "reset") +(assert_return (invoke "i32.load") (i32.const 0x0)) +(assert_return (invoke "f32.load") (f32.const 0.0)) +(invoke "f32.store") +(assert_return (invoke "i32.load") (i32.const 0x7fd00001)) +(assert_return (invoke "f32.load") (f32.const nan:0x500001)) +(invoke "reset") +(assert_return (invoke "i32.load") (i32.const 0x0)) +(assert_return (invoke "f32.load") (f32.const 0.0)) +(invoke "i32.store") +(assert_return (invoke "i32.load") (i32.const 0x7fd00001)) +(assert_return (invoke "f32.load") (f32.const nan:0x500001)) + +(module + (memory (data "\01\00\00\00\00\00\fc\7f")) + + (func (export "f64.load") (result f64) (f64.load (i32.const 0))) + (func (export "i64.load") (result i64) (i64.load (i32.const 0))) + (func (export "f64.store") (f64.store (i32.const 0) (f64.const nan:0xc000000000001))) + (func (export "i64.store") (i64.store (i32.const 0) (i64.const 0x7ffc000000000001))) + (func (export "reset") (i64.store (i32.const 0) (i64.const 0))) +) + +(assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) +(assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) +(invoke "reset") +(assert_return (invoke "i64.load") (i64.const 0x0)) +(assert_return (invoke "f64.load") (f64.const 0.0)) +(invoke "f64.store") +(assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) +(assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) +(invoke "reset") +(assert_return (invoke "i64.load") (i64.const 0x0)) +(assert_return (invoke "f64.load") (f64.const 0.0)) +(invoke "i64.store") +(assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) +(assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) diff --git a/src/binaryen/test/spec/float_misc.wast b/src/binaryen/test/spec/float_misc.wast new file mode 100644 index 0000000000..41e29321d5 --- /dev/null +++ b/src/binaryen/test/spec/float_misc.wast @@ -0,0 +1,643 @@ +;; Platforms intended to run WebAssembly must support IEEE 754 arithmetic. +;; This testsuite is not currently sufficient for full IEEE 754 conformance +;; testing; platforms are currently expected to meet these requirements in +;; their own way (widely-used hardware platforms already do this). +;; +;; What this testsuite does test is that (a) the platform is basically IEEE 754 +;; rather than something else entirely, (b) it's configured correctly for +;; WebAssembly (rounding direction, exception masks, precision level, subnormal +;; mode, etc.), (c) the WebAssembly implementation doesn't perform any common +;; value-changing optimizations, and (d) that the WebAssembly implementation +;; doesn't exhibit any known implementation bugs. +;; +;; This file supplements f32.wast, f64.wast, f32_cmp.wast, and f64_cmp.wast with +;; additional single-instruction tests covering additional miscellaneous +;; interesting cases. + +(module + (func (export "f32.add") (param $x f32) (param $y f32) (result f32) (f32.add (get_local $x) (get_local $y))) + (func (export "f32.sub") (param $x f32) (param $y f32) (result f32) (f32.sub (get_local $x) (get_local $y))) + (func (export "f32.mul") (param $x f32) (param $y f32) (result f32) (f32.mul (get_local $x) (get_local $y))) + (func (export "f32.div") (param $x f32) (param $y f32) (result f32) (f32.div (get_local $x) (get_local $y))) + (func (export "f32.sqrt") (param $x f32) (result f32) (f32.sqrt (get_local $x))) + (func (export "f32.abs") (param $x f32) (result f32) (f32.abs (get_local $x))) + (func (export "f32.neg") (param $x f32) (result f32) (f32.neg (get_local $x))) + (func (export "f32.copysign") (param $x f32) (param $y f32) (result f32) (f32.copysign (get_local $x) (get_local $y))) + (func (export "f32.ceil") (param $x f32) (result f32) (f32.ceil (get_local $x))) + (func (export "f32.floor") (param $x f32) (result f32) (f32.floor (get_local $x))) + (func (export "f32.trunc") (param $x f32) (result f32) (f32.trunc (get_local $x))) + (func (export "f32.nearest") (param $x f32) (result f32) (f32.nearest (get_local $x))) + (func (export "f32.min") (param $x f32) (param $y f32) (result f32) (f32.min (get_local $x) (get_local $y))) + (func (export "f32.max") (param $x f32) (param $y f32) (result f32) (f32.max (get_local $x) (get_local $y))) + + (func (export "f64.add") (param $x f64) (param $y f64) (result f64) (f64.add (get_local $x) (get_local $y))) + (func (export "f64.sub") (param $x f64) (param $y f64) (result f64) (f64.sub (get_local $x) (get_local $y))) + (func (export "f64.mul") (param $x f64) (param $y f64) (result f64) (f64.mul (get_local $x) (get_local $y))) + (func (export "f64.div") (param $x f64) (param $y f64) (result f64) (f64.div (get_local $x) (get_local $y))) + (func (export "f64.sqrt") (param $x f64) (result f64) (f64.sqrt (get_local $x))) + (func (export "f64.abs") (param $x f64) (result f64) (f64.abs (get_local $x))) + (func (export "f64.neg") (param $x f64) (result f64) (f64.neg (get_local $x))) + (func (export "f64.copysign") (param $x f64) (param $y f64) (result f64) (f64.copysign (get_local $x) (get_local $y))) + (func (export "f64.ceil") (param $x f64) (result f64) (f64.ceil (get_local $x))) + (func (export "f64.floor") (param $x f64) (result f64) (f64.floor (get_local $x))) + (func (export "f64.trunc") (param $x f64) (result f64) (f64.trunc (get_local $x))) + (func (export "f64.nearest") (param $x f64) (result f64) (f64.nearest (get_local $x))) + (func (export "f64.min") (param $x f64) (param $y f64) (result f64) (f64.min (get_local $x) (get_local $y))) + (func (export "f64.max") (param $x f64) (param $y f64) (result f64) (f64.max (get_local $x) (get_local $y))) +) + +;; Miscellaneous values. +(assert_return (invoke "f32.add" (f32.const 1.1234567890) (f32.const 1.2345e-10)) (f32.const 1.123456789)) +(assert_return (invoke "f64.add" (f64.const 1.1234567890) (f64.const 1.2345e-10)) (f64.const 0x1.1f9add37c11f7p+0)) + +;; Test adding the greatest value to 1.0 that rounds back to 1.0, and the +;; least that rounds to something greater. +(assert_return (invoke "f32.add" (f32.const 1.0) (f32.const 0x1p-24)) (f32.const 0x1.0p+0)) +(assert_return (invoke "f32.add" (f32.const 1.0) (f32.const 0x1.000002p-24)) (f32.const 0x1.000002p+0)) +(assert_return (invoke "f64.add" (f64.const 1.0) (f64.const 0x1p-53)) (f64.const 0x1.0p+0)) +(assert_return (invoke "f64.add" (f64.const 1.0) (f64.const 0x1.0000000000001p-53)) (f64.const 0x1.0000000000001p+0)) + +;; Test that what some systems call signaling NaN behaves as a quiet NaN. +(assert_return (invoke "f32.add" (f32.const nan:0x200000) (f32.const 1.0)) (f32.const nan:0x600000)) +(assert_return (invoke "f64.add" (f64.const nan:0x4000000000000) (f64.const 1.0)) (f64.const nan:0xc000000000000)) + +;; Max subnornmal + min subnormal = min normal. +(assert_return (invoke "f32.add" (f32.const 0x1p-149) (f32.const 0x1.fffffcp-127)) (f32.const 0x1p-126)) +(assert_return (invoke "f64.add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x1p-1022)) + +;; Test for a case of double rounding, example from: +;; http://perso.ens-lyon.fr/jean-michel.muller/Handbook.html +;; section 3.3.1: A typical problem: "double rounding" +(assert_return (invoke "f32.add" (f32.const 0x1p+31) (f32.const 1024.25)) (f32.const 0x1.000008p+31)) +(assert_return (invoke "f64.add" (f64.const 0x1p+63) (f64.const 1024.25)) (f64.const 0x1.0000000000001p+63)) + +;; Test a case that was "tricky" on MMIX. +;; http://mmix.cs.hm.edu/bugs/bug_rounding.html +(assert_return (invoke "f64.add" (f64.const -0x1p-1008) (f64.const 0x0.0000000001716p-1022)) (f64.const -0x1.fffffffffffffp-1009)) + +;; Computations that round differently in ties-to-odd mode. +(assert_return (invoke "f32.add" (f32.const 0x1p23) (f32.const 0x1p-1)) (f32.const 0x1p23)) +(assert_return (invoke "f32.add" (f32.const 0x1.000002p+23) (f32.const 0x1p-1)) (f32.const 0x1.000004p+23)) +(assert_return (invoke "f64.add" (f64.const 0x1p52) (f64.const 0x1p-1)) (f64.const 0x1p52)) +(assert_return (invoke "f64.add" (f64.const 0x1.0000000000001p+52) (f64.const 0x1p-1)) (f64.const 0x1.0000000000002p+52)) + +;; Computations that round differently in round-upward mode. +(assert_return (invoke "f32.add" (f32.const -0x1.39675ap+102) (f32.const 0x1.76c94cp-99)) (f32.const -0x1.39675ap+102)) +(assert_return (invoke "f32.add" (f32.const 0x1.6c0f24p+67) (f32.const -0x1.2b92dp+52)) (f32.const 0x1.6c0cccp+67)) +(assert_return (invoke "f32.add" (f32.const 0x1.e62318p-83) (f32.const 0x1.f74abep-125)) (f32.const 0x1.e62318p-83)) +(assert_return (invoke "f32.add" (f32.const 0x1.2a71d4p+39) (f32.const -0x1.c9f10cp+55)) (f32.const -0x1.c9efe2p+55)) +(assert_return (invoke "f32.add" (f32.const 0x1.f8f736p-15) (f32.const 0x1.7bd45ep+106)) (f32.const 0x1.7bd45ep+106)) +(assert_return (invoke "f64.add" (f64.const 0x1.f33e1fbca27aap-413) (f64.const -0x1.6b192891ed61p+249)) (f64.const -0x1.6b192891ed61p+249)) +(assert_return (invoke "f64.add" (f64.const -0x1.46f75d130eeb1p+76) (f64.const 0x1.25275d6f7a4acp-184)) (f64.const -0x1.46f75d130eeb1p+76)) +(assert_return (invoke "f64.add" (f64.const 0x1.04dec9265a731p-148) (f64.const -0x1.11eed4e8c127cp-12)) (f64.const -0x1.11eed4e8c127cp-12)) +(assert_return (invoke "f64.add" (f64.const 0x1.05773b7166b0ap+497) (f64.const 0x1.134022f2da37bp+66)) (f64.const 0x1.05773b7166b0ap+497)) +(assert_return (invoke "f64.add" (f64.const 0x1.ef4f794282a82p+321) (f64.const 0x1.14a82266badep+394)) (f64.const 0x1.14a82266badep+394)) + +;; Computations that round differently in round-downward mode. +(assert_return (invoke "f32.add" (f32.const 0x1.1bf976p+72) (f32.const -0x1.7f5868p+20)) (f32.const 0x1.1bf976p+72)) +(assert_return (invoke "f32.add" (f32.const 0x1.7f9c6cp-45) (f32.const -0x1.b9bb0ep-78)) (f32.const 0x1.7f9c6cp-45)) +(assert_return (invoke "f32.add" (f32.const -0x1.32d1bcp-42) (f32.const 0x1.f7d214p+125)) (f32.const 0x1.f7d214p+125)) +(assert_return (invoke "f32.add" (f32.const -0x1.8e5c0ep-44) (f32.const -0x1.3afa4cp-106)) (f32.const -0x1.8e5c0ep-44)) +(assert_return (invoke "f32.add" (f32.const 0x1.13cd78p-10) (f32.const -0x1.3af316p-107)) (f32.const 0x1.13cd78p-10)) +(assert_return (invoke "f64.add" (f64.const 0x1.f8dd15ca97d4ap+179) (f64.const -0x1.367317d1fe8bfp-527)) (f64.const 0x1.f8dd15ca97d4ap+179)) +(assert_return (invoke "f64.add" (f64.const 0x1.5db08d739228cp+155) (f64.const -0x1.fb316fa147dcbp-61)) (f64.const 0x1.5db08d739228cp+155)) +(assert_return (invoke "f64.add" (f64.const 0x1.bbb403cb85c07p-404) (f64.const -0x1.7e44046b8bbf3p-979)) (f64.const 0x1.bbb403cb85c07p-404)) +(assert_return (invoke "f64.add" (f64.const -0x1.34d38af291831p+147) (f64.const -0x1.9890b47439953p+139)) (f64.const -0x1.366c1ba705bcap+147)) +(assert_return (invoke "f64.add" (f64.const -0x1.b61dedf4e0306p+3) (f64.const 0x1.09e2f31773c4ap+290)) (f64.const 0x1.09e2f31773c4ap+290)) + +;; Computations that round differently in round-toward-zero mode. +(assert_return (invoke "f32.add" (f32.const -0x1.129bd8p-117) (f32.const 0x1.c75012p-43)) (f32.const 0x1.c75012p-43)) +(assert_return (invoke "f32.add" (f32.const -0x1.c204a2p-16) (f32.const 0x1.80b132p-27)) (f32.const -0x1.c1d48cp-16)) +(assert_return (invoke "f32.add" (f32.const -0x1.decc1cp+36) (f32.const 0x1.c688dap-109)) (f32.const -0x1.decc1cp+36)) +(assert_return (invoke "f32.add" (f32.const 0x1.61ce6ap-118) (f32.const -0x1.772892p+30)) (f32.const -0x1.772892p+30)) +(assert_return (invoke "f32.add" (f32.const -0x1.3dc826p-120) (f32.const 0x1.fc3f66p+95)) (f32.const 0x1.fc3f66p+95)) +(assert_return (invoke "f64.add" (f64.const 0x1.bf68acc263a0fp-777) (f64.const -0x1.5f9352965e5a6p+1004)) (f64.const -0x1.5f9352965e5a6p+1004)) +(assert_return (invoke "f64.add" (f64.const -0x1.76eaa70911f51p+516) (f64.const -0x1.2d746324ce47ap+493)) (f64.const -0x1.76eaa963fabb6p+516)) +(assert_return (invoke "f64.add" (f64.const -0x1.b637d82c15a7ap-967) (f64.const 0x1.cc654ccab4152p-283)) (f64.const 0x1.cc654ccab4152p-283)) +(assert_return (invoke "f64.add" (f64.const -0x1.a5b1fb66e846ep-509) (f64.const 0x1.4bdd36f0bb5ccp-860)) (f64.const -0x1.a5b1fb66e846ep-509)) +(assert_return (invoke "f64.add" (f64.const -0x1.14108da880f9ep+966) (f64.const 0x1.417f35701e89fp+800)) (f64.const -0x1.14108da880f9ep+966)) + +;; Computations that round differently on x87. +(assert_return (invoke "f64.add" (f64.const -0x1.fa0caf21ffebcp+804) (f64.const 0x1.4ca8fdcff89f9p+826)) (f64.const 0x1.4ca8f5e7c5e31p+826)) +(assert_return (invoke "f64.add" (f64.const 0x1.016f1fcbdfd38p+784) (f64.const 0x1.375dffcbc9a2cp+746)) (f64.const 0x1.016f1fcbe4b0fp+784)) +(assert_return (invoke "f64.add" (f64.const -0x1.dffda6d5bff3ap+624) (f64.const 0x1.f9e8cc2dff782p+674)) (f64.const 0x1.f9e8cc2dff77bp+674)) +(assert_return (invoke "f64.add" (f64.const 0x1.fff4b43687dfbp+463) (f64.const 0x1.0fd5617c4a809p+517)) (f64.const 0x1.0fd5617c4a809p+517)) +(assert_return (invoke "f64.add" (f64.const 0x1.535d380035da2p-995) (f64.const 0x1.cce37dddbb73bp-963)) (f64.const 0x1.cce37ddf0ed0fp-963)) + +;; Computations that round differently when computed via f32. +(assert_return (invoke "f64.add" (f64.const -0x1.d91cd3fc0c66fp+752) (f64.const -0x1.4e18c80229734p+952)) (f64.const -0x1.4e18c80229734p+952)) +(assert_return (invoke "f64.add" (f64.const 0x1.afc70fd36e372p+193) (f64.const -0x1.bd10a9b377b46p+273)) (f64.const -0x1.bd10a9b377b46p+273)) +(assert_return (invoke "f64.add" (f64.const -0x1.2abd570b078b2p+302) (f64.const 0x1.b3c1ad759cb5bp-423)) (f64.const -0x1.2abd570b078b2p+302)) +(assert_return (invoke "f64.add" (f64.const -0x1.5b2ae84c0686cp-317) (f64.const -0x1.dba7a1c022823p+466)) (f64.const -0x1.dba7a1c022823p+466)) +(assert_return (invoke "f64.add" (f64.const -0x1.ac627bd7cbf38p-198) (f64.const 0x1.2312e265b8d59p-990)) (f64.const -0x1.ac627bd7cbf38p-198)) + +;; Computations that utilize the maximum exponent value to avoid overflow. +(assert_return (invoke "f32.add" (f32.const 0x1.2b91ap+116) (f32.const 0x1.cbcd52p+127)) (f32.const 0x1.cbf2c4p+127)) +(assert_return (invoke "f32.add" (f32.const 0x1.96f392p+127) (f32.const -0x1.6b3fecp+107)) (f32.const 0x1.96f37cp+127)) +(assert_return (invoke "f32.add" (f32.const 0x1.132f1cp+118) (f32.const -0x1.63d632p+127)) (f32.const -0x1.634c9ap+127)) +(assert_return (invoke "f32.add" (f32.const -0x1.1dda64p+120) (f32.const -0x1.ef02ep+127)) (f32.const -0x1.f13e94p+127)) +(assert_return (invoke "f32.add" (f32.const -0x1.4ad8dap+127) (f32.const -0x1.eae082p+125)) (f32.const -0x1.c590fap+127)) +(assert_return (invoke "f64.add" (f64.const 0x1.017099f2a4b8bp+1023) (f64.const 0x1.1f63b28f05454p+981)) (f64.const 0x1.017099f2a5009p+1023)) +(assert_return (invoke "f64.add" (f64.const 0x1.d88b6c74984efp+1023) (f64.const 0x1.33b444775eabcp+990)) (f64.const 0x1.d88b6c7532291p+1023)) +(assert_return (invoke "f64.add" (f64.const -0x1.84576422fdf5p+1023) (f64.const 0x1.60ee6aa12fb9cp+1012)) (f64.const -0x1.842b4655a9cf1p+1023)) +(assert_return (invoke "f64.add" (f64.const -0x1.9aaace3e79f7dp+1001) (f64.const 0x1.e4068af295cb6p+1023)) (f64.const 0x1.e4068487ea926p+1023)) +(assert_return (invoke "f64.add" (f64.const 0x1.06cdae79f27b9p+1023) (f64.const -0x1.e05cb0c96f975p+991)) (f64.const 0x1.06cdae78121eep+1023)) + +;; Computations that utilize the minimum exponent value. +(assert_return (invoke "f32.add" (f32.const 0x1.6a1a2p-127) (f32.const 0x1.378p-140)) (f32.const 0x1.6a23dcp-127)) +(assert_return (invoke "f32.add" (f32.const 0x1.28p-144) (f32.const -0x1p-148)) (f32.const 0x1.18p-144)) +(assert_return (invoke "f32.add" (f32.const -0x1p-146) (f32.const 0x1.c3cap-128)) (f32.const 0x1.c3c9cp-128)) +(assert_return (invoke "f32.add" (f32.const -0x1.4p-145) (f32.const 0x1.424052p-122)) (f32.const 0x1.42405p-122)) +(assert_return (invoke "f32.add" (f32.const 0x1.c5p-141) (f32.const -0x1.72f8p-135)) (f32.const -0x1.6be4p-135)) +(assert_return (invoke "f64.add" (f64.const 0x1.4774c681d1e21p-1022) (f64.const -0x1.271e58e9f58cap-1021)) (f64.const -0x1.06c7eb5219373p-1022)) +(assert_return (invoke "f64.add" (f64.const 0x1.10b3a75e31916p-1021) (f64.const -0x1.ffb82b0e868a7p-1021)) (f64.const -0x1.de090760a9f22p-1022)) +(assert_return (invoke "f64.add" (f64.const -0x0.6b58448b8098ap-1022) (f64.const -0x1.579796ed04cbep-1022)) (f64.const -0x1.c2efdb7885648p-1022)) +(assert_return (invoke "f64.add" (f64.const 0x1.9eb9e7baae8d1p-1020) (f64.const -0x1.d58e136f8c6eep-1020)) (f64.const -0x0.db50aed377874p-1022)) +(assert_return (invoke "f64.add" (f64.const -0x1.f1115deeafa0bp-1022) (f64.const 0x1.221b1c87dca29p-1022)) (f64.const -0x0.cef64166d2fe2p-1022)) + +;; Test an add of the second-greatest finite value with the distance to greatest +;; finite value. +(assert_return (invoke "f32.add" (f32.const 0x1.fffffcp+127) (f32.const 0x1p+104)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "f64.add" (f64.const 0x1.ffffffffffffep+1023) (f64.const 0x1p+971)) (f64.const 0x1.fffffffffffffp+1023)) + +;; Test for a historic spreadsheet bug. +;; https://blogs.office.com/2007/09/25/calculation-issue-update/ +(assert_return (invoke "f32.sub" (f32.const 65536.0) (f32.const 0x1p-37)) (f32.const 65536.0)) +(assert_return (invoke "f64.sub" (f64.const 65536.0) (f64.const 0x1p-37)) (f64.const 0x1.fffffffffffffp+15)) + +;; Test subtracting the greatest value from 1.0 that rounds back to 1.0, and the +;; least that rounds to something less. +(assert_return (invoke "f32.sub" (f32.const 1.0) (f32.const 0x1p-25)) (f32.const 0x1.0p+0)) +(assert_return (invoke "f32.sub" (f32.const 1.0) (f32.const 0x1.000002p-25)) (f32.const 0x1.fffffep-1)) +(assert_return (invoke "f64.sub" (f64.const 1.0) (f64.const 0x1p-54)) (f64.const 0x1.0p+0)) +(assert_return (invoke "f64.sub" (f64.const 1.0) (f64.const 0x1.0000000000001p-54)) (f64.const 0x1.fffffffffffffp-1)) + +;; Computations that round differently in round-upward mode. +(assert_return (invoke "f32.sub" (f32.const 0x1.ee2466p-106) (f32.const -0x1.16277ep+119)) (f32.const 0x1.16277ep+119)) +(assert_return (invoke "f32.sub" (f32.const -0x1.446f9ep+119) (f32.const -0x1.4396a4p+43)) (f32.const -0x1.446f9ep+119)) +(assert_return (invoke "f32.sub" (f32.const 0x1.74773cp+0) (f32.const -0x1.a25512p-82)) (f32.const 0x1.74773cp+0)) +(assert_return (invoke "f32.sub" (f32.const 0x1.9345c4p-117) (f32.const 0x1.6792c2p-76)) (f32.const -0x1.6792c2p-76)) +(assert_return (invoke "f32.sub" (f32.const 0x1.9ecfa4p-18) (f32.const -0x1.864b44p-107)) (f32.const 0x1.9ecfa4p-18)) +(assert_return (invoke "f64.sub" (f64.const -0x1.5b798875e7845p-333) (f64.const -0x1.b5147117452fep-903)) (f64.const -0x1.5b798875e7845p-333)) +(assert_return (invoke "f64.sub" (f64.const -0x1.6c87baeb6d72dp+552) (f64.const -0x1.64fb35d4b5571p-158)) (f64.const -0x1.6c87baeb6d72dp+552)) +(assert_return (invoke "f64.sub" (f64.const 0x1.b3d369fcf74bp-461) (f64.const -0x1.ea1668c0dec93p-837)) (f64.const 0x1.b3d369fcf74bp-461)) +(assert_return (invoke "f64.sub" (f64.const 0x1.0abd449353eadp-1005) (f64.const -0x1.0422ea3e82ee9p+154)) (f64.const 0x1.0422ea3e82ee9p+154)) +(assert_return (invoke "f64.sub" (f64.const -0x1.aadbc6b43cc3dp-143) (f64.const -0x1.e7f922ef1ee58p-539)) (f64.const -0x1.aadbc6b43cc3dp-143)) + +;; Computations that round differently in round-downward mode. +(assert_return (invoke "f32.sub" (f32.const -0x1.61e262p+108) (f32.const -0x1.baf3e4p+112)) (f32.const 0x1.a4d5bep+112)) +(assert_return (invoke "f32.sub" (f32.const -0x1.62c2f6p+109) (f32.const 0x1.6e514ap+6)) (f32.const -0x1.62c2f6p+109)) +(assert_return (invoke "f32.sub" (f32.const -0x1.287c94p-83) (f32.const 0x1.0f2f9cp-24)) (f32.const -0x1.0f2f9cp-24)) +(assert_return (invoke "f32.sub" (f32.const -0x1.c8825cp-77) (f32.const -0x1.4aead6p-12)) (f32.const 0x1.4aead6p-12)) +(assert_return (invoke "f32.sub" (f32.const -0x1.2976a4p+99) (f32.const 0x1.c6e3b8p-59)) (f32.const -0x1.2976a4p+99)) +(assert_return (invoke "f64.sub" (f64.const -0x1.76cb28ae6c045p+202) (f64.const -0x1.0611f2af4e9b9p+901)) (f64.const 0x1.0611f2af4e9b9p+901)) +(assert_return (invoke "f64.sub" (f64.const 0x1.baf35eff22e9ep-368) (f64.const 0x1.5c3e08ecf73ecp-451)) (f64.const 0x1.baf35eff22e9ep-368)) +(assert_return (invoke "f64.sub" (f64.const -0x1.8fd354b376f1fp-200) (f64.const 0x1.513c860f386ffp-508)) (f64.const -0x1.8fd354b376f1fp-200)) +(assert_return (invoke "f64.sub" (f64.const -0x1.760d447230ae6p-992) (f64.const -0x1.16f788438ae3ep-328)) (f64.const 0x1.16f788438ae3ep-328)) +(assert_return (invoke "f64.sub" (f64.const -0x1.73aab4fcfc7ap+112) (f64.const 0x1.7c589f990b884p+171)) (f64.const -0x1.7c589f990b884p+171)) + +;; Computations that round differently in round-toward-zero mode. +(assert_return (invoke "f32.sub" (f32.const 0x1.ea264cp+95) (f32.const 0x1.852988p-15)) (f32.const 0x1.ea264cp+95)) +(assert_return (invoke "f32.sub" (f32.const -0x1.14ec7cp+19) (f32.const -0x1.0ad3fep-35)) (f32.const -0x1.14ec7cp+19)) +(assert_return (invoke "f32.sub" (f32.const -0x1.3251dap-36) (f32.const -0x1.49c97ep-56)) (f32.const -0x1.3251c6p-36)) +(assert_return (invoke "f32.sub" (f32.const -0x1.13565ep-14) (f32.const 0x1.2f89a8p-13)) (f32.const -0x1.b934d8p-13)) +(assert_return (invoke "f32.sub" (f32.const -0x1.6032b6p-33) (f32.const -0x1.bb5196p-104)) (f32.const -0x1.6032b6p-33)) +(assert_return (invoke "f64.sub" (f64.const -0x1.b5b0797af491p-157) (f64.const -0x1.694b8348189e8p+722)) (f64.const 0x1.694b8348189e8p+722)) +(assert_return (invoke "f64.sub" (f64.const -0x1.72b142826ed73p+759) (f64.const -0x1.010477bc9afbdp+903)) (f64.const 0x1.010477bc9afbdp+903)) +(assert_return (invoke "f64.sub" (f64.const 0x1.83273b6bb94cfp-796) (f64.const 0x1.1a93f948a2abbp+181)) (f64.const -0x1.1a93f948a2abbp+181)) +(assert_return (invoke "f64.sub" (f64.const -0x1.207e7156cbf2p-573) (f64.const 0x1.cf3f12fd3814dp-544)) (f64.const -0x1.cf3f13063c086p-544)) +(assert_return (invoke "f64.sub" (f64.const -0x1.837e6844f1718p-559) (f64.const -0x1.1c29b757f98abp-14)) (f64.const 0x1.1c29b757f98abp-14)) + +;; Computations that round differently on x87. +(assert_return (invoke "f64.sub" (f64.const 0x1.c21151a709b6cp-78) (f64.const 0x1.0a12fff8910f6p-115)) (f64.const 0x1.c21151a701663p-78)) +(assert_return (invoke "f64.sub" (f64.const 0x1.c57912aae2f64p-982) (f64.const 0x1.dbfbd4800b7cfp-1010)) (f64.const 0x1.c579128d2338fp-982)) +(assert_return (invoke "f64.sub" (f64.const 0x1.ffef4399af9c6p-254) (f64.const 0x1.edb96dfaea8b1p-200)) (f64.const -0x1.edb96dfaea8b1p-200)) +(assert_return (invoke "f64.sub" (f64.const -0x1.363eee391cde2p-39) (f64.const -0x1.a65462000265fp-69)) (f64.const -0x1.363eee32838c9p-39)) +(assert_return (invoke "f64.sub" (f64.const 0x1.59016dba002a1p-25) (f64.const 0x1.5d4374f124cccp-3)) (f64.const -0x1.5d436f8d1f15dp-3)) + +;; Computations that round differently when computed via f32. +(assert_return (invoke "f64.sub" (f64.const -0x1.18196bca005cfp-814) (f64.const -0x1.db7b01ce3f52fp-766)) (f64.const 0x1.db7b01ce3f51dp-766)) +(assert_return (invoke "f64.sub" (f64.const -0x1.d17b3528d219p+33) (f64.const 0x1.fd739d4ea220ap+367)) (f64.const -0x1.fd739d4ea220ap+367)) +(assert_return (invoke "f64.sub" (f64.const 0x1.dea46994de319p+114) (f64.const 0x1.b5b19cd55c7d3p-590)) (f64.const 0x1.dea46994de319p+114)) +(assert_return (invoke "f64.sub" (f64.const 0x1.b60f9b2fbd9ecp-489) (f64.const -0x1.6f81c59ec5b8ep-694)) (f64.const 0x1.b60f9b2fbd9ecp-489)) +(assert_return (invoke "f64.sub" (f64.const 0x1.5e423fe8571f4p-57) (f64.const 0x1.9624ed7c162dfp-618)) (f64.const 0x1.5e423fe8571f4p-57)) + +;; pow(e, π) - π +;; https://xkcd.com/217 +(assert_return (invoke "f32.sub" (f32.const 0x1.724046p+4) (f32.const 0x1.921fb6p+1)) (f32.const 0x1.3ffc5p+4)) +(assert_return (invoke "f64.sub" (f64.const 0x1.724046eb0933ap+4) (f64.const 0x1.921fb54442d18p+1)) (f64.const 0x1.3ffc504280d97p+4)) + +;; https://www.cnet.com/news/googles-calculator-muffs-some-math-problems/ +(assert_return (invoke "f32.sub" (f32.const 2999999) (f32.const 2999998)) (f32.const 1.0)) +(assert_return (invoke "f32.sub" (f32.const 1999999) (f32.const 1999995)) (f32.const 4.0)) +(assert_return (invoke "f32.sub" (f32.const 1999999) (f32.const 1999993)) (f32.const 6.0)) +(assert_return (invoke "f32.sub" (f32.const 400002) (f32.const 400001)) (f32.const 1.0)) +(assert_return (invoke "f32.sub" (f32.const 400002) (f32.const 400000)) (f32.const 2.0)) +(assert_return (invoke "f64.sub" (f64.const 2999999999999999) (f64.const 2999999999999998)) (f64.const 1.0)) +(assert_return (invoke "f64.sub" (f64.const 1999999999999999) (f64.const 1999999999999995)) (f64.const 4.0)) +(assert_return (invoke "f64.sub" (f64.const 1999999999999999) (f64.const 1999999999999993)) (f64.const 6.0)) +(assert_return (invoke "f64.sub" (f64.const 400000000000002) (f64.const 400000000000001)) (f64.const 1.0)) +(assert_return (invoke "f64.sub" (f64.const 400000000000002) (f64.const 400000000000000)) (f64.const 2.0)) + +;; Min normal - min subnormal = max subnornmal. +(assert_return (invoke "f32.sub" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1.fffffcp-127)) +(assert_return (invoke "f64.sub" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.fffffffffffffp-1022)) + +;; Min normal - max subnormal = min subnornmal. +(assert_return (invoke "f32.sub" (f32.const 0x1p-126) (f32.const 0x1.fffffcp-127)) (f32.const 0x1p-149)) +(assert_return (invoke "f64.sub" (f64.const 0x1p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x0.0000000000001p-1022)) + +;; Miscellaneous values. +(assert_return (invoke "f32.mul" (f32.const 1e15) (f32.const 1e15)) (f32.const 0x1.93e592p+99)) +(assert_return (invoke "f32.mul" (f32.const 1e20) (f32.const 1e20)) (f32.const infinity)) +(assert_return (invoke "f32.mul" (f32.const 1e25) (f32.const 1e25)) (f32.const infinity)) +(assert_return (invoke "f64.mul" (f64.const 1e15) (f64.const 1e15)) (f64.const 0x1.93e5939a08ceap+99)) +(assert_return (invoke "f64.mul" (f64.const 1e20) (f64.const 1e20)) (f64.const 0x1.d6329f1c35ca5p+132)) +(assert_return (invoke "f64.mul" (f64.const 1e25) (f64.const 1e25)) (f64.const 0x1.11b0ec57e649bp+166)) + +;; Test for a case of double rounding, example from: +;; http://perso.ens-lyon.fr/jean-michel.muller/Handbook.html +;; section 3.3.1: A typical problem: "double rounding" +(assert_return (invoke "f32.mul" (f32.const 1848874880.0) (f32.const 19954563072.0)) (f32.const 0x1.000002p+65)) +(assert_return (invoke "f64.mul" (f64.const 1848874847.0) (f64.const 19954562207.0)) (f64.const 3.6893488147419111424e+19)) + +;; Test for a historic spreadsheet bug. +;; http://www.joelonsoftware.com/items/2007/09/26b.html +(assert_return (invoke "f32.mul" (f32.const 77.1) (f32.const 850)) (f32.const 65535)) +(assert_return (invoke "f64.mul" (f64.const 77.1) (f64.const 850)) (f64.const 65534.99999999999272404)) + +;; Computations that round differently in round-upward mode. +(assert_return (invoke "f32.mul" (f32.const -0x1.14df2ep+61) (f32.const 0x1.748878p-36)) (f32.const -0x1.92e7e8p+25)) +(assert_return (invoke "f32.mul" (f32.const -0x1.5629e2p+102) (f32.const -0x1.c33012p-102)) (f32.const 0x1.2d8604p+1)) +(assert_return (invoke "f32.mul" (f32.const -0x1.b17694p+92) (f32.const -0x1.e4b56ap-97)) (f32.const 0x1.9a5baep-4)) +(assert_return (invoke "f32.mul" (f32.const -0x1.1626a6p+79) (f32.const -0x1.c57d7p-75)) (f32.const 0x1.ecbaaep+4)) +(assert_return (invoke "f32.mul" (f32.const 0x1.7acf72p+53) (f32.const 0x1.6c89acp+5)) (f32.const 0x1.0db556p+59)) +(assert_return (invoke "f64.mul" (f64.const -0x1.25c293f6f37e4p+425) (f64.const 0x1.f5fd4fa41c6d8p+945)) (f64.const -infinity)) +(assert_return (invoke "f64.mul" (f64.const -0x1.cc1ae79fffc5bp-986) (f64.const -0x1.c36ccc2861ca6p-219)) (f64.const 0x0p+0)) +(assert_return (invoke "f64.mul" (f64.const 0x1.c0232b3e64b56p+606) (f64.const -0x1.f6939cf3affaap+106)) (f64.const -0x1.b7e3aedf190d3p+713)) +(assert_return (invoke "f64.mul" (f64.const -0x1.60f289966b271p-313) (f64.const 0x1.28a5497f0c259p+583)) (f64.const -0x1.98fc50bcec259p+270)) +(assert_return (invoke "f64.mul" (f64.const 0x1.37dab12d3afa2p+795) (f64.const 0x1.81e156bd393f1p-858)) (f64.const 0x1.d6126554b8298p-63)) + +;; Computations that round differently in round-downward mode. +(assert_return (invoke "f32.mul" (f32.const -0x1.3f57a2p-89) (f32.const -0x1.041d68p+92)) (f32.const 0x1.4479bp+3)) +(assert_return (invoke "f32.mul" (f32.const 0x1.4d0582p+73) (f32.const 0x1.6e043ap+19)) (f32.const 0x1.dc236p+92)) +(assert_return (invoke "f32.mul" (f32.const -0x1.2fdap-32) (f32.const -0x1.e1731cp+74)) (f32.const 0x1.1db89ep+43)) +(assert_return (invoke "f32.mul" (f32.const 0x1.7bc8fep+67) (f32.const -0x1.3ad592p+15)) (f32.const -0x1.d3115ep+82)) +(assert_return (invoke "f32.mul" (f32.const 0x1.936742p+30) (f32.const -0x1.a7a19p+66)) (f32.const -0x1.4dc71ap+97)) +(assert_return (invoke "f64.mul" (f64.const -0x1.ba737b4ca3b13p-639) (f64.const 0x1.8923309857438p-314)) (f64.const -0x1.53bc0d07baa37p-952)) +(assert_return (invoke "f64.mul" (f64.const 0x1.7c1932e610219p-276) (f64.const -0x1.2605db646489fp-635)) (f64.const -0x1.b48da2b0d2ae3p-911)) +(assert_return (invoke "f64.mul" (f64.const -0x1.e43cdf3b2108p+329) (f64.const -0x1.99d96abbd61d1p+835)) (f64.const infinity)) +(assert_return (invoke "f64.mul" (f64.const 0x1.4c19466551da3p+947) (f64.const 0x1.0bdcd6c7646e9p-439)) (f64.const 0x1.5b7cd8c3f638ap+508)) +(assert_return (invoke "f64.mul" (f64.const 0x1.ff1da1726e3dfp+339) (f64.const -0x1.043c44f52b158p+169)) (f64.const -0x1.03c9364bb585cp+509)) + +;; Computations that round differently in round-toward-zero mode. +(assert_return (invoke "f32.mul" (f32.const -0x1.907e8ap+46) (f32.const -0x1.5d3668p+95)) (f32.const infinity)) +(assert_return (invoke "f32.mul" (f32.const -0x1.8c9f74p-3) (f32.const 0x1.e2b452p-99)) (f32.const -0x1.75edccp-101)) +(assert_return (invoke "f32.mul" (f32.const -0x1.cc605ap-19) (f32.const 0x1.ec321ap+105)) (f32.const -0x1.ba91a4p+87)) +(assert_return (invoke "f32.mul" (f32.const -0x1.5fbb7ap+56) (f32.const 0x1.a8965ep-96)) (f32.const -0x1.23ae8ep-39)) +(assert_return (invoke "f32.mul" (f32.const -0x1.fb7f12p+16) (f32.const 0x1.3a701ap-119)) (f32.const -0x1.37ac0cp-102)) +(assert_return (invoke "f64.mul" (f64.const -0x1.5b0266454c26bp-496) (f64.const -0x1.af5787e3e0399p+433)) (f64.const 0x1.2457d81949e0bp-62)) +(assert_return (invoke "f64.mul" (f64.const 0x1.0d54a82393d45p+478) (f64.const -0x1.425760807ceaep-764)) (f64.const -0x1.532068c8d0d5dp-286)) +(assert_return (invoke "f64.mul" (f64.const -0x1.b532af981786p+172) (f64.const 0x1.ada95085ba36fp+359)) (f64.const -0x1.6ee38c1e01864p+532)) +(assert_return (invoke "f64.mul" (f64.const 0x1.e132f4d49d1cep+768) (f64.const -0x1.a75afe9a7d864p+374)) (f64.const -infinity)) +(assert_return (invoke "f64.mul" (f64.const 0x1.68bbf1cfff90ap+81) (f64.const 0x1.09cd17d652c5p+70)) (f64.const 0x1.768b8d67d794p+151)) + +;; Computations that round differently on x87. +(assert_return (invoke "f64.mul" (f64.const 0x1.f99fb602c89b7p-341) (f64.const 0x1.6caab46a31a2ep-575)) (f64.const 0x1.68201f986e9d7p-915)) +(assert_return (invoke "f64.mul" (f64.const -0x1.86999c5eee379p-9) (f64.const 0x1.6e3b9e0d53e0dp+723)) (f64.const -0x1.17654a0ef35f5p+715)) +(assert_return (invoke "f64.mul" (f64.const -0x1.069571b176f9p+367) (f64.const -0x1.e248b6ab0a0e3p-652)) (f64.const 0x1.eeaff575cae1dp-285)) +(assert_return (invoke "f64.mul" (f64.const 0x1.c217645777dd2p+775) (f64.const 0x1.d93f5715dd646p+60)) (f64.const 0x1.a0064aa1d920dp+836)) +(assert_return (invoke "f64.mul" (f64.const -0x1.848981b6e694ap-276) (f64.const 0x1.f5aacb64a0d19p+896)) (f64.const -0x1.7cb2296e6c2e5p+621)) + +;; Computations that round differently on x87 in double-precision mode. +(assert_return (invoke "f64.mul" (f64.const 0x1.db3bd2a286944p-599) (f64.const 0x1.ce910af1d55cap-425)) (f64.const 0x0.d6accdd538a39p-1022)) +(assert_return (invoke "f64.mul" (f64.const -0x1.aca223916012p-57) (f64.const -0x1.2b2b4958dd228p-966)) (f64.const 0x0.fa74eccae5615p-1022)) +(assert_return (invoke "f64.mul" (f64.const -0x1.bd062def16cffp-488) (f64.const -0x1.7ddd91a0c4c0ep-536)) (f64.const 0x0.a5f4d7769d90dp-1022)) +(assert_return (invoke "f64.mul" (f64.const -0x1.c6a56169e9cep-772) (f64.const 0x1.517d55a474122p-255)) (f64.const -0x0.12baf260afb77p-1022)) +(assert_return (invoke "f64.mul" (f64.const -0x1.08951b0b41705p-516) (f64.const -0x1.102dc27168d09p-507)) (f64.const 0x0.8ca6dbf3f592bp-1022)) + +;; Computations that round differently when computed via f32. +(assert_return (invoke "f64.mul" (f64.const 0x1.8d0dea50c8c9bp+852) (f64.const 0x1.21cac31d87a24p-881)) (f64.const 0x1.c177311f7cd73p-29)) +(assert_return (invoke "f64.mul" (f64.const 0x1.98049118e3063p-7) (f64.const 0x1.6362525151b58p-149)) (f64.const 0x1.1b358514103f9p-155)) +(assert_return (invoke "f64.mul" (f64.const -0x1.ea65cb0631323p+1) (f64.const 0x1.fce683201a19bp-41)) (f64.const -0x1.e76dc8c223667p-39)) +(assert_return (invoke "f64.mul" (f64.const 0x1.e4d235961d543p-373) (f64.const 0x1.bc56f20ef9a48p-205)) (f64.const 0x1.a4c09efcb71d6p-577)) +(assert_return (invoke "f64.mul" (f64.const -0x1.b9612e66faba8p+77) (f64.const 0x1.e2bc6aa782273p-348)) (f64.const -0x1.a026ea4f81db1p-270)) + +;; Test the least positive value with a positive square. +(assert_return (invoke "f32.mul" (f32.const 0x1p-75) (f32.const 0x1p-75)) (f32.const 0x0p+0)) +(assert_return (invoke "f32.mul" (f32.const 0x1.000002p-75) (f32.const 0x1.000002p-75)) (f32.const 0x1p-149)) +(assert_return (invoke "f64.mul" (f64.const 0x1.6a09e667f3bccp-538) (f64.const 0x1.6a09e667f3bccp-538)) (f64.const 0x0p+0)) +(assert_return (invoke "f64.mul" (f64.const 0x1.6a09e667f3bcdp-538) (f64.const 0x1.6a09e667f3bcdp-538)) (f64.const 0x0.0000000000001p-1022)) + +;; Test the greatest positive value with a finite square. +(assert_return (invoke "f32.mul" (f32.const 0x1.fffffep+63) (f32.const 0x1.fffffep+63)) (f32.const 0x1.fffffcp+127)) +(assert_return (invoke "f32.mul" (f32.const 0x1p+64) (f32.const 0x1p+64)) (f32.const infinity)) +(assert_return (invoke "f64.mul" (f64.const 0x1.fffffffffffffp+511) (f64.const 0x1.fffffffffffffp+511)) (f64.const 0x1.ffffffffffffep+1023)) +(assert_return (invoke "f64.mul" (f64.const 0x1p+512) (f64.const 0x1p+512)) (f64.const infinity)) + +;; Test MIN * EPSILON. +;; http://www.mpfr.org/mpfr-2.0.1/patch2 +(assert_return (invoke "f32.mul" (f32.const 0x1p-126) (f32.const 0x1p-23)) (f32.const 0x1p-149)) +(assert_return (invoke "f64.mul" (f64.const 0x1p-1022) (f64.const 0x1p-52)) (f64.const 0x0.0000000000001p-1022)) + +;; Miscellaneous values. +(assert_return (invoke "f32.div" (f32.const 1.123456789) (f32.const 100)) (f32.const 0x1.702264p-7)) +(assert_return (invoke "f32.div" (f32.const 8391667.0) (f32.const 12582905.0)) (f32.const 0x1.55754p-1)) +(assert_return (invoke "f32.div" (f32.const 65536.0) (f32.const 0x1p-37)) (f32.const 0x1p+53)) +(assert_return (invoke "f32.div" (f32.const 0x1.dcbf6ap+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.dcbf68p-128)) +(assert_return (invoke "f32.div" (f32.const 4) (f32.const 3)) (f32.const 0x1.555556p+0)) +(assert_return (invoke "f64.div" (f64.const 1.123456789) (f64.const 100)) (f64.const 0.01123456789)) +(assert_return (invoke "f64.div" (f64.const 8391667.0) (f64.const 12582905.0)) (f64.const 0x1.55753f1d9ba27p-1)) +(assert_return (invoke "f64.div" (f64.const 65536.0) (f64.const 0x1p-37)) (f64.const 0x1p+53)) +(assert_return (invoke "f64.div" (f64.const 0x1.dcbf6ap+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.772fda8p-1022)) +(assert_return (invoke "f64.div" (f64.const 4) (f64.const 3)) (f64.const 0x1.5555555555555p+0)) + +;; Test for a historic hardware bug. +;; https://en.wikipedia.org/wiki/Pentium_FDIV_bug +(assert_return (invoke "f32.div" (f32.const 4195835) (f32.const 3145727)) (f32.const 0x1.557542p+0)) +(assert_return (invoke "f64.div" (f64.const 4195835) (f64.const 3145727)) (f64.const 0x1.557541c7c6b43p+0)) + +;; Computations that round differently in round-upward mode. +(assert_return (invoke "f32.div" (f32.const 0x1.6a6c5ap-48) (f32.const 0x1.fa0b7p+127)) (f32.const 0x0p+0)) +(assert_return (invoke "f32.div" (f32.const 0x1.616fb2p-87) (f32.const 0x1.332172p+68)) (f32.const 0x0p+0)) +(assert_return (invoke "f32.div" (f32.const -0x1.96e778p+16) (f32.const 0x1.eb0c56p-80)) (f32.const -0x1.a8440ap+95)) +(assert_return (invoke "f32.div" (f32.const -0x1.e2624p-76) (f32.const -0x1.ed236ep-122)) (f32.const 0x1.f4d584p+45)) +(assert_return (invoke "f32.div" (f32.const -0x1.e2374ep+41) (f32.const 0x1.71fcdcp-80)) (f32.const -0x1.4da706p+121)) +(assert_return (invoke "f64.div" (f64.const 0x1.163c09d0c38c1p+147) (f64.const 0x1.e04cc737348e6p+223)) (f64.const 0x1.289921caeed23p-77)) +(assert_return (invoke "f64.div" (f64.const 0x1.d6867e741e0a9p-626) (f64.const 0x1.335eb19a9aae4p-972)) (f64.const 0x1.87e342d11f519p+346)) +(assert_return (invoke "f64.div" (f64.const -0x1.d5edf648aeb98p+298) (f64.const 0x1.0dda15b079355p+640)) (f64.const -0x1.bdceaf9734b5cp-342)) +(assert_return (invoke "f64.div" (f64.const -0x1.b683e3934aedap+691) (f64.const 0x1.c364e1df00dffp+246)) (f64.const -0x1.f16456e7afe3bp+444)) +(assert_return (invoke "f64.div" (f64.const -0x1.44ca7539cc851p+540) (f64.const 0x1.58501bccc58fep+453)) (f64.const -0x1.e2f8657e0924ep+86)) + +;; Computations that round differently in round-downward mode. +(assert_return (invoke "f32.div" (f32.const -0x1.c2c54ap+69) (f32.const -0x1.00d142p-86)) (f32.const infinity)) +(assert_return (invoke "f32.div" (f32.const 0x1.e35abep-46) (f32.const 0x1.c69dfp+44)) (f32.const 0x1.102eb4p-90)) +(assert_return (invoke "f32.div" (f32.const 0x1.45ff2ap+0) (f32.const -0x1.1e8754p+89)) (f32.const -0x1.23434ep-89)) +(assert_return (invoke "f32.div" (f32.const 0x1.8db18ap-51) (f32.const 0x1.47c678p-128)) (f32.const 0x1.369b96p+77)) +(assert_return (invoke "f32.div" (f32.const 0x1.78599p+90) (f32.const 0x1.534144p+87)) (f32.const 0x1.1bfddcp+3)) +(assert_return (invoke "f64.div" (f64.const 0x0.f331c4f47eb51p-1022) (f64.const -0x1.c7ff45bf6f03ap+362)) (f64.const -0x0p+0)) +(assert_return (invoke "f64.div" (f64.const -0x1.0fc8707b9d19cp-987) (f64.const 0x1.77524d5f4a563p-536)) (f64.const -0x1.72c1a937d231p-452)) +(assert_return (invoke "f64.div" (f64.const -0x1.edb3aa64bb338p-403) (f64.const -0x1.1c7c164320e4p+45)) (f64.const 0x1.bc44cc1c5ae63p-448)) +(assert_return (invoke "f64.div" (f64.const -0x1.6534b34e8686bp+80) (f64.const 0x1.c34a7fc59e3c3p-791)) (f64.const -0x1.95421bf291b66p+870)) +(assert_return (invoke "f64.div" (f64.const -0x1.91f58d7ed1237p+236) (f64.const -0x1.f190d808383c8p+55)) (f64.const 0x1.9d9eb0836f906p+180)) + +;; Computations that round differently in round-toward-zero mode. +(assert_return (invoke "f32.div" (f32.const 0x1.64b2a4p+26) (f32.const 0x1.e95752p-119)) (f32.const infinity)) +(assert_return (invoke "f32.div" (f32.const -0x1.53c9b6p+77) (f32.const 0x1.d689ap+27)) (f32.const -0x1.71baa4p+49)) +(assert_return (invoke "f32.div" (f32.const 0x1.664a8ap+38) (f32.const -0x1.59dba2p+96)) (f32.const -0x1.0933f4p-58)) +(assert_return (invoke "f32.div" (f32.const -0x1.99e0fap+111) (f32.const -0x1.c2b5a8p+9)) (f32.const 0x1.d19de6p+101)) +(assert_return (invoke "f32.div" (f32.const -0x1.5a815ap+92) (f32.const -0x1.b5820ap+13)) (f32.const 0x1.9580b8p+78)) +(assert_return (invoke "f64.div" (f64.const -0x1.81fd1e2af7bebp-655) (f64.const 0x1.edefc4eae536cp-691)) (f64.const -0x1.901abdd91b661p+35)) +(assert_return (invoke "f64.div" (f64.const -0x1.47cf932953c43p+782) (f64.const -0x1.bc40496b1f2a1p-553)) (f64.const infinity)) +(assert_return (invoke "f64.div" (f64.const -0x1.2bd2e8fbdcad7p-746) (f64.const 0x1.b115674cc476ep-65)) (f64.const -0x1.62752bf19fa81p-682)) +(assert_return (invoke "f64.div" (f64.const -0x1.f923e3fea9efep+317) (f64.const -0x1.8044c74d27a39p-588)) (f64.const 0x1.5086518cc7186p+905)) +(assert_return (invoke "f64.div" (f64.const 0x1.516ed2051d6bbp+181) (f64.const -0x1.c9f455eb9c2eep+214)) (f64.const -0x1.79414d67f2889p-34)) + +;; Computations that round differently on x87. +(assert_return (invoke "f64.div" (f64.const -0x1.9c52726aed366p+585) (f64.const -0x1.7d0568c75660fp+195)) (f64.const 0x1.1507ca2a65f23p+390)) +(assert_return (invoke "f64.div" (f64.const -0x1.522672f461667p+546) (f64.const -0x1.36d36572c9f71p+330)) (f64.const 0x1.1681369370619p+216)) +(assert_return (invoke "f64.div" (f64.const 0x1.01051b4e8cd61p+185) (f64.const -0x1.2cbb5ca3d33ebp+965)) (f64.const -0x1.b59471598a2f3p-781)) +(assert_return (invoke "f64.div" (f64.const 0x1.5f93bb80fc2cbp+217) (f64.const 0x1.7e051aae9f0edp+427)) (f64.const 0x1.d732fa926ba4fp-211)) +(assert_return (invoke "f64.div" (f64.const -0x1.e251d762163ccp+825) (f64.const 0x1.3ee63581e1796p+349)) (f64.const -0x1.8330077d90a07p+476)) + +;; Computations that round differently on x87 in double-precision mode. +(assert_return (invoke "f64.div" (f64.const 0x1.dcbf69f10006dp+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.772fda7c4001bp-1022)) +(assert_return (invoke "f64.div" (f64.const 0x1.e14169442fbcap-1011) (f64.const 0x1.505451d62ff7dp+12)) (f64.const 0x0.b727e85f38b39p-1022)) +(assert_return (invoke "f64.div" (f64.const -0x1.d3ebe726ec964p-144) (f64.const -0x1.4a7bfc0b83608p+880)) (f64.const 0x0.5a9d8c50cbf87p-1022)) +(assert_return (invoke "f64.div" (f64.const -0x1.6c3def770aee1p-393) (f64.const -0x1.8b84724347598p+631)) (f64.const 0x0.3af0707fcd0c7p-1022)) +(assert_return (invoke "f64.div" (f64.const 0x1.16abda1bb3cb3p-856) (f64.const 0x1.6c9c7198eb1e6p+166)) (f64.const 0x0.c3a8fd6741649p-1022)) +(assert_return (invoke "f64.div" (f64.const 0x1.7057d6ab553cap-1005) (f64.const -0x1.2abf1e98660ebp+23)) (f64.const -0x0.04ee8d8ec01cdp-1022)) + +;; Computations that round differently when div is mul by reciprocal. +(assert_return (invoke "f32.div" (f32.const 0x1.ada9aap+89) (f32.const 0x1.69884cp+42)) (f32.const 0x1.303e2ep+47)) +(assert_return (invoke "f32.div" (f32.const 0x1.8281c8p+90) (f32.const -0x1.62883cp+106)) (f32.const -0x1.17169cp-16)) +(assert_return (invoke "f32.div" (f32.const 0x1.5c6be2p+81) (f32.const 0x1.d01dfep-1)) (f32.const 0x1.805e32p+81)) +(assert_return (invoke "f32.div" (f32.const -0x1.bbd252p+19) (f32.const -0x1.fba95p+33)) (f32.const 0x1.bf9d56p-15)) +(assert_return (invoke "f32.div" (f32.const -0x1.0f41d6p-42) (f32.const -0x1.3f2dbep+56)) (f32.const 0x1.b320d8p-99)) +(assert_return (invoke "f64.div" (f64.const 0x1.b2348a1c81899p+61) (f64.const -0x1.4a58aad903dd3p-861)) (f64.const -0x1.507c1e2a41b35p+922)) +(assert_return (invoke "f64.div" (f64.const 0x1.23fa5137a918ap-130) (f64.const -0x1.7268db1951263p-521)) (f64.const -0x1.93965e0d896bep+390)) +(assert_return (invoke "f64.div" (f64.const 0x1.dcb3915d82deep+669) (f64.const 0x1.50caaa1dc6b19p+638)) (f64.const 0x1.6a58ec814b09dp+31)) +(assert_return (invoke "f64.div" (f64.const -0x1.046e378c0cc46p+182) (f64.const 0x1.ac925009a922bp+773)) (f64.const -0x1.3720aa94dab18p-592)) +(assert_return (invoke "f64.div" (f64.const -0x1.8945fd69d8e11p-871) (f64.const -0x1.0a37870af809ap-646)) (f64.const 0x1.7a2e286c62382p-225)) + +;; Computations that round differently when computed via f32. +(assert_return (invoke "f64.div" (f64.const 0x1.82002af0ea1f3p-57) (f64.const 0x1.d0a9b0c2fa339p+0)) (f64.const 0x1.a952fbd1fc17cp-58)) +(assert_return (invoke "f64.div" (f64.const 0x1.1e12b515db471p-102) (f64.const -0x1.41fc3c94fba5p-42)) (f64.const -0x1.c6e50cccb7cb6p-61)) +(assert_return (invoke "f64.div" (f64.const 0x1.aba5adcd6f583p-41) (f64.const 0x1.17dfac639ce0fp-112)) (f64.const 0x1.872b0a008c326p+71)) +(assert_return (invoke "f64.div" (f64.const 0x1.cf82510d0ae6bp+89) (f64.const 0x1.0207d86498053p+97)) (f64.const 0x1.cbdc804e2cf14p-8)) +(assert_return (invoke "f64.div" (f64.const 0x1.4c82cbb508e21p-11) (f64.const -0x1.6b57208c2d5d5p+52)) (f64.const -0x1.d48e8b369129ap-64)) + +;; Division involving the maximum subnormal value and the minimum normal value. +(assert_return (invoke "f32.div" (f32.const 0x1p-126) (f32.const 0x1.fffffcp-127)) (f32.const 0x1.000002p+0)) +(assert_return (invoke "f32.div" (f32.const 0x1.fffffcp-127) (f32.const 0x1p-126)) (f32.const 0x1.fffffcp-1)) +(assert_return (invoke "f64.div" (f64.const 0x1p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x1.0000000000001p+0)) +(assert_return (invoke "f64.div" (f64.const 0x0.fffffffffffffp-1022) (f64.const 0x1p-1022)) (f64.const 0x1.ffffffffffffep-1)) + +;; Test the least positive value with a positive quotient with the maximum value. +(assert_return (invoke "f32.div" (f32.const 0x1.fffffep-23) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "f32.div" (f32.const 0x1p-22) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) +(assert_return (invoke "f64.div" (f64.const 0x1.fffffffffffffp-52) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "f64.div" (f64.const 0x1p-51) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) + +;; Test the least positive value with a finite reciprocal. +(assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1p-128)) (f32.const infinity)) +(assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1.000008p-128)) (f32.const 0x1.fffffp+127)) +(assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x0.4p-1022)) (f64.const infinity)) +(assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x0.4000000000001p-1022)) (f64.const 0x1.ffffffffffff8p+1023)) + +;; Test the least positive value that has a subnormal reciprocal. +(assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1.000002p+126)) (f32.const 0x1.fffffcp-127)) +(assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1p+126)) (f32.const 0x1p-126)) +(assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x1.0000000000001p+1022)) (f64.const 0x0.fffffffffffffp-1022)) +(assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x1p+1022)) (f64.const 0x1p-1022)) + +;; Test the minimum positive normal number divided by the minimum positive +;; subnormal number. +(assert_return (invoke "f32.div" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p+23)) +(assert_return (invoke "f64.div" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+52)) + +;; Test that the last binary digit of 1.0/3.0 is even in f32, +;; https://en.wikipedia.org/wiki/Single-precision_floating-point_format#Single-precision_examples +;; +;; and odd in f64, +;; https://en.wikipedia.org/wiki/Double-precision_floating-point_format#Double-precision_examples +;; +;; and that 1.0/3.0, 3.0/9.0, and 9.0/27.0 all agree. +;; http://www.netlib.org/paranoia +(assert_return (invoke "f32.div" (f32.const 0x1p+0) (f32.const 0x1.8p+1)) (f32.const 0x1.555556p-2)) +(assert_return (invoke "f32.div" (f32.const 0x3p+0) (f32.const 0x1.2p+3)) (f32.const 0x1.555556p-2)) +(assert_return (invoke "f32.div" (f32.const 0x1.2p+3) (f32.const 0x1.bp+4)) (f32.const 0x1.555556p-2)) +(assert_return (invoke "f64.div" (f64.const 0x1p+0) (f64.const 0x1.8p+1)) (f64.const 0x1.5555555555555p-2)) +(assert_return (invoke "f64.div" (f64.const 0x3p+0) (f64.const 0x1.2p+3)) (f64.const 0x1.5555555555555p-2)) +(assert_return (invoke "f64.div" (f64.const 0x1.2p+3) (f64.const 0x1.bp+4)) (f64.const 0x1.5555555555555p-2)) + +;; Test for bugs found in an early RISC-V implementation. +;; https://github.com/riscv/riscv-tests/pull/8 +(assert_return (invoke "f32.sqrt" (f32.const 0x1.56p+7)) (f32.const 0x1.a2744cp+3)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.594dfcp-23)) (f32.const 0x1.a4789cp-12)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.56p+7)) (f64.const 0x1.a2744ce9674f5p+3)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.594dfc70aa105p-23)) (f64.const 0x1.a4789c0e37f99p-12)) + +;; Computations that round differently on x87. +(assert_return (invoke "f64.sqrt" (f64.const 0x1.0263fcc94f259p-164)) (f64.const 0x1.0131485de579fp-82)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.352dfa278c43dp+338)) (f64.const 0x1.195607dac5417p+169)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.b15daa23924fap+402)) (f64.const 0x1.4d143db561493p+201)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.518c8e68cb753p-37)) (f64.const 0x1.9fb8ef1ad5bfdp-19)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.86d8b6518078ep-370)) (f64.const 0x1.3c5142a48fcadp-185)) + +;; Test another sqrt case on x87. +;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52593 +(assert_return (invoke "f64.sqrt" (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.fffffffffffffp-1)) + +;; Computations that round differently in round-upward mode. +(assert_return (invoke "f32.sqrt" (f32.const 0x1.098064p-3)) (f32.const 0x1.70b23p-2)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.d9befp+100)) (f32.const 0x1.5c4052p+50)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.42b5b6p-4)) (f32.const 0x1.1f6d0ep-2)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.3684dp-71)) (f32.const 0x1.8ebae2p-36)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.d8bc4ep-11)) (f32.const 0x1.ebf9eap-6)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.5c39f220d5704p-924)) (f64.const 0x1.2a92bc24ceae9p-462)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.53521a635745cp+727)) (f64.const 0x1.a0cfdc4ef8ff1p+363)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.dfd5bbc9f4678p+385)) (f64.const 0x1.efa817117c94cp+192)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.33f9640811cd4p+105)) (f64.const 0x1.8d17c9243baa3p+52)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.6c0ef0267ff45p+999)) (f64.const 0x1.afbcfae3f2b4p+499)) + +;; Computations that round differently in round-downward mode. +(assert_return (invoke "f32.sqrt" (f32.const 0x1.26a62ep+27)) (f32.const 0x1.84685p+13)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.166002p-113)) (f32.const 0x1.798762p-57)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.3dfb5p-15)) (f32.const 0x1.937e38p-8)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.30eb2cp-120)) (f32.const 0x1.176406p-60)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.cb705cp-123)) (f32.const 0x1.e5020ap-62)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.edae8aea0543p+695)) (f64.const 0x1.f6c1ea4fc8dd2p+347)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.f7ee4bda5c9c3p-763)) (f64.const 0x1.fbf30bdaf11c5p-382)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.a48f348266ad1p-30)) (f64.const 0x1.481ee7540baf7p-15)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.feb5a1ce3ed9cp-242)) (f64.const 0x1.6995060c20d46p-121)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.957d9796e3834p+930)) (f64.const 0x1.42305213157bap+465)) + +;; Computations that round differently in round-toward-zero mode. +(assert_return (invoke "f32.sqrt" (f32.const 0x1.65787cp+118)) (f32.const 0x1.2e82a4p+59)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.736044p+15)) (f32.const 0x1.b40e4p+7)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.a00edp-1)) (f32.const 0x1.cd8aecp-1)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.7a4c8p-87)) (f32.const 0x1.b819e4p-44)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.5d24d4p-94)) (f32.const 0x1.2af75ep-47)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.a008948ead274p+738)) (f64.const 0x1.4659b37c39b19p+369)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.70f6199ed21f5p-381)) (f64.const 0x1.b2a2bddf3300dp-191)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.35c1d49f2a352p+965)) (f64.const 0x1.8e3d9f01a9716p+482)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.3fbdcfb2b2a15p-45)) (f64.const 0x1.949ba4feca42ap-23)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.c201b94757145p-492)) (f64.const 0x1.5369ee6bf2967p-246)) + +;; Computations that round differently when computed via f32. +(assert_return_nan (invoke "f64.sqrt" (f64.const -0x1.360e8d0032adp-963))) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.d9a6f5eef0503p+103)) (f64.const 0x1.ec73f56c166f6p+51)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.aa051a5c4ec27p-760)) (f64.const 0x1.4a3e771ff5149p-380)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.e5522a741babep-276)) (f64.const 0x1.607ae2b6feb7dp-138)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.4832badc0c061p+567)) (f64.const 0x1.99ec7934139b2p+283)) + +;; Test the least greatest value with a sqrt that rounds to one. +(assert_return (invoke "f32.sqrt" (f32.const 0x1.000002p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.000004p+0)) (f32.const 0x1.000002p+0)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.0000000000001p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.0000000000002p+0)) (f64.const 0x1.0000000000001p+0)) + +;; Test that the bitwise floating point operators are bitwise on NaN. + +(assert_return (invoke "f32.abs" (f32.const nan)) (f32.const nan)) +(assert_return (invoke "f32.abs" (f32.const -nan)) (f32.const nan)) +(assert_return (invoke "f32.abs" (f32.const nan:0x0f1e2)) (f32.const nan:0x0f1e2)) +(assert_return (invoke "f32.abs" (f32.const -nan:0x0f1e2)) (f32.const nan:0x0f1e2)) +(assert_return (invoke "f64.abs" (f64.const nan)) (f64.const nan)) +(assert_return (invoke "f64.abs" (f64.const -nan)) (f64.const nan)) +(assert_return (invoke "f64.abs" (f64.const nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) +(assert_return (invoke "f64.abs" (f64.const -nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) + +(assert_return (invoke "f32.neg" (f32.const nan)) (f32.const -nan)) +(assert_return (invoke "f32.neg" (f32.const -nan)) (f32.const nan)) +(assert_return (invoke "f32.neg" (f32.const nan:0x0f1e2)) (f32.const -nan:0x0f1e2)) +(assert_return (invoke "f32.neg" (f32.const -nan:0x0f1e2)) (f32.const nan:0x0f1e2)) +(assert_return (invoke "f64.neg" (f64.const nan)) (f64.const -nan)) +(assert_return (invoke "f64.neg" (f64.const -nan)) (f64.const nan)) +(assert_return (invoke "f64.neg" (f64.const nan:0x0f1e27a6b)) (f64.const -nan:0x0f1e27a6b)) +(assert_return (invoke "f64.neg" (f64.const -nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) + +(assert_return (invoke "f32.copysign" (f32.const nan) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "f32.copysign" (f32.const nan) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "f32.copysign" (f32.const -nan) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "f32.copysign" (f32.const -nan) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "f32.copysign" (f32.const nan:0x0f1e2) (f32.const nan)) (f32.const nan:0x0f1e2)) +(assert_return (invoke "f32.copysign" (f32.const nan:0x0f1e2) (f32.const -nan)) (f32.const -nan:0x0f1e2)) +(assert_return (invoke "f32.copysign" (f32.const -nan:0x0f1e2) (f32.const nan)) (f32.const nan:0x0f1e2)) +(assert_return (invoke "f32.copysign" (f32.const -nan:0x0f1e2) (f32.const -nan)) (f32.const -nan:0x0f1e2)) +(assert_return (invoke "f64.copysign" (f64.const nan) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "f64.copysign" (f64.const nan) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "f64.copysign" (f64.const -nan) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "f64.copysign" (f64.const -nan) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "f64.copysign" (f64.const nan:0x0f1e27a6b) (f64.const nan)) (f64.const nan:0x0f1e27a6b)) +(assert_return (invoke "f64.copysign" (f64.const nan:0x0f1e27a6b) (f64.const -nan)) (f64.const -nan:0x0f1e27a6b)) +(assert_return (invoke "f64.copysign" (f64.const -nan:0x0f1e27a6b) (f64.const nan)) (f64.const nan:0x0f1e27a6b)) +(assert_return (invoke "f64.copysign" (f64.const -nan:0x0f1e27a6b) (f64.const -nan)) (f64.const -nan:0x0f1e27a6b)) + +;; Test that ceil isn't implemented as adding 0.5 and rounding to nearest. +(assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep-1)) (f32.const 1.0)) +(assert_return (invoke "f32.ceil" (f32.const 0x1p-126)) (f32.const 1.0)) +(assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp-1)) (f64.const 1.0)) +(assert_return (invoke "f64.ceil" (f64.const 0x1p-1022)) (f64.const 1.0)) + +;; Test the maximum and minimum value for which ceil is not an identity operator. +(assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep+22)) (f32.const 0x1p+23)) +(assert_return (invoke "f32.ceil" (f32.const -0x1.fffffep+22)) (f32.const -0x1.fffffcp+22)) +(assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1p+52)) +(assert_return (invoke "f64.ceil" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1.ffffffffffffep+51)) + +;; Test that floor isn't implemented as subtracting 0.5 and rounding to nearest. +(assert_return (invoke "f32.floor" (f32.const -0x1.fffffep-1)) (f32.const -1.0)) +(assert_return (invoke "f32.floor" (f32.const -0x1p-126)) (f32.const -1.0)) +(assert_return (invoke "f64.floor" (f64.const -0x1.fffffffffffffp-1)) (f64.const -1.0)) +(assert_return (invoke "f64.floor" (f64.const -0x1p-1022)) (f64.const -1.0)) + +;; Test the maximum and minimum value for which floor is not an identity operator. +(assert_return (invoke "f32.floor" (f32.const -0x1.fffffep+22)) (f32.const -0x1p+23)) +(assert_return (invoke "f32.floor" (f32.const 0x1.fffffep+22)) (f32.const 0x1.fffffcp+22)) +(assert_return (invoke "f64.floor" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1p+52)) +(assert_return (invoke "f64.floor" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1.ffffffffffffep+51)) + +;; Test the maximum and minimum value for which trunc is not an identity operator. +(assert_return (invoke "f32.trunc" (f32.const -0x1.fffffep+22)) (f32.const -0x1.fffffcp+22)) +(assert_return (invoke "f32.trunc" (f32.const 0x1.fffffep+22)) (f32.const 0x1.fffffcp+22)) +(assert_return (invoke "f64.trunc" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1.ffffffffffffep+51)) +(assert_return (invoke "f64.trunc" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1.ffffffffffffep+51)) + +;; Test that nearest isn't implemented naively. +;; http://blog.frama-c.com/index.php?post/2013/05/02/nearbyintf1 +;; http://blog.frama-c.com/index.php?post/2013/05/04/nearbyintf3 +(assert_return (invoke "f32.nearest" (f32.const 0x1.000002p+23)) (f32.const 0x1.000002p+23)) +(assert_return (invoke "f32.nearest" (f32.const 0x1.000004p+23)) (f32.const 0x1.000004p+23)) +(assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep-2)) (f32.const 0.0)) +(assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep+47)) (f32.const 0x1.fffffep+47)) +(assert_return (invoke "f64.nearest" (f64.const 0x1.0000000000001p+52)) (f64.const 0x1.0000000000001p+52)) +(assert_return (invoke "f64.nearest" (f64.const 0x1.0000000000002p+52)) (f64.const 0x1.0000000000002p+52)) +(assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp-2)) (f64.const 0.0)) +(assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp+105)) (f64.const 0x1.fffffffffffffp+105)) + +;; Nearest should not round halfway cases away from zero (as C's round(3) does) +;; or up (as JS's Math.round does). +(assert_return (invoke "f32.nearest" (f32.const 4.5)) (f32.const 4.0)) +(assert_return (invoke "f32.nearest" (f32.const -4.5)) (f32.const -4.0)) +(assert_return (invoke "f32.nearest" (f32.const -3.5)) (f32.const -4.0)) +(assert_return (invoke "f64.nearest" (f64.const 4.5)) (f64.const 4.0)) +(assert_return (invoke "f64.nearest" (f64.const -4.5)) (f64.const -4.0)) +(assert_return (invoke "f64.nearest" (f64.const -3.5)) (f64.const -4.0)) + +;; Test the maximum and minimum value for which nearest is not an identity operator. +(assert_return (invoke "f32.nearest" (f32.const -0x1.fffffep+22)) (f32.const -0x1p+23)) +(assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep+22)) (f32.const 0x1p+23)) +(assert_return (invoke "f64.nearest" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1p+52)) +(assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1p+52)) + +;; Test that min and max behave properly with signaling NaNs. +(assert_return (invoke "f32.min" (f32.const 0.0) (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "f32.min" (f32.const nan:0x200000) (f32.const 0.0)) (f32.const nan:0x600000)) +(assert_return (invoke "f32.max" (f32.const 0.0) (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "f32.max" (f32.const nan:0x200000) (f32.const 0.0)) (f32.const nan:0x600000)) +(assert_return (invoke "f64.min" (f64.const 0.0) (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) +(assert_return (invoke "f64.min" (f64.const nan:0x4000000000000) (f64.const 0.0)) (f64.const nan:0xc000000000000)) +(assert_return (invoke "f64.max" (f64.const 0.0) (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) +(assert_return (invoke "f64.max" (f64.const nan:0x4000000000000) (f64.const 0.0)) (f64.const nan:0xc000000000000)) diff --git a/src/binaryen/test/spec/forward.wast b/src/binaryen/test/spec/forward.wast new file mode 100644 index 0000000000..43ab493485 --- /dev/null +++ b/src/binaryen/test/spec/forward.wast @@ -0,0 +1,20 @@ +(module + (func $even (export "even") (param $n i32) (result i32) + (if i32 (i32.eq (get_local $n) (i32.const 0)) + (i32.const 1) + (call $odd (i32.sub (get_local $n) (i32.const 1))) + ) + ) + + (func $odd (export "odd") (param $n i32) (result i32) + (if i32 (i32.eq (get_local $n) (i32.const 0)) + (i32.const 0) + (call $even (i32.sub (get_local $n) (i32.const 1))) + ) + ) +) + +(assert_return (invoke "even" (i32.const 13)) (i32.const 0)) +(assert_return (invoke "even" (i32.const 20)) (i32.const 1)) +(assert_return (invoke "odd" (i32.const 13)) (i32.const 1)) +(assert_return (invoke "odd" (i32.const 20)) (i32.const 0)) diff --git a/src/binaryen/test/spec/func-local-after-body.fail.wast b/src/binaryen/test/spec/func-local-after-body.fail.wast new file mode 100644 index 0000000000..0c4cf8c3f0 --- /dev/null +++ b/src/binaryen/test/spec/func-local-after-body.fail.wast @@ -0,0 +1 @@ +(module (func (nop) (local i32))) diff --git a/src/binaryen/test/spec/func-local-before-param.fail.wast b/src/binaryen/test/spec/func-local-before-param.fail.wast new file mode 100644 index 0000000000..66f35eb6ca --- /dev/null +++ b/src/binaryen/test/spec/func-local-before-param.fail.wast @@ -0,0 +1 @@ +(module (func (local i32) (param i32))) diff --git a/src/binaryen/test/spec/func-local-before-result.fail.wast b/src/binaryen/test/spec/func-local-before-result.fail.wast new file mode 100644 index 0000000000..52026cf765 --- /dev/null +++ b/src/binaryen/test/spec/func-local-before-result.fail.wast @@ -0,0 +1 @@ +(module (func (local i32) (result i32) (get_local 0))) diff --git a/src/binaryen/test/spec/func-param-after-body.fail.wast b/src/binaryen/test/spec/func-param-after-body.fail.wast new file mode 100644 index 0000000000..399a151b83 --- /dev/null +++ b/src/binaryen/test/spec/func-param-after-body.fail.wast @@ -0,0 +1 @@ +(module (func (nop) (param i32))) diff --git a/src/binaryen/test/spec/func-result-after-body.fail.wast b/src/binaryen/test/spec/func-result-after-body.fail.wast new file mode 100644 index 0000000000..9617a2d00f --- /dev/null +++ b/src/binaryen/test/spec/func-result-after-body.fail.wast @@ -0,0 +1 @@ +(module (func (nop) (result i32))) diff --git a/src/binaryen/test/spec/func-result-before-param.fail.wast b/src/binaryen/test/spec/func-result-before-param.fail.wast new file mode 100644 index 0000000000..93a930f429 --- /dev/null +++ b/src/binaryen/test/spec/func-result-before-param.fail.wast @@ -0,0 +1 @@ +(module (func (result i32) (param i32) (get_local 0))) diff --git a/src/binaryen/test/spec/func.wast b/src/binaryen/test/spec/func.wast new file mode 100644 index 0000000000..1ad375b329 --- /dev/null +++ b/src/binaryen/test/spec/func.wast @@ -0,0 +1,532 @@ +;; Test `func` declarations, i.e. functions + +(module + ;; Auxiliary definition + (type $sig (func)) + (func $dummy) + + ;; Syntax + + (func) + (func (export "f")) + (func $f) + (func $h (export "g")) + + (func (local)) + (func (local) (local)) + (func (local i32)) + (func (local $x i32)) + (func (local i32 f64 i64)) + (func (local i32) (local f64)) + (func (local i32 f32) (local $x i64) (local) (local i32 f64)) + + (func (param)) + (func (param) (param)) + (func (param i32)) + (func (param $x i32)) + (func (param i32 f64 i64)) + (func (param i32) (param f64)) + (func (param i32 f32) (param $x i64) (param) (param i32 f64)) + + (func (result i32) (unreachable)) + + (func (type $sig)) + + (func $complex + (param i32 f32) (param $x i64) (param) (param i32) + (result i32) + (local f32) (local $y i32) (local i64 i32) (local) (local f64 i32) + (unreachable) (unreachable) + ) + (func $complex-sig + (type $sig) + (local f32) (local $y i32) (local i64 i32) (local) (local f64 i32) + (unreachable) (unreachable) + ) + + + ;; Typing of locals + + (func (export "local-first-i32") (result i32) (local i32 i32) (get_local 0)) + (func (export "local-first-i64") (result i64) (local i64 i64) (get_local 0)) + (func (export "local-first-f32") (result f32) (local f32 f32) (get_local 0)) + (func (export "local-first-f64") (result f64) (local f64 f64) (get_local 0)) + (func (export "local-second-i32") (result i32) (local i32 i32) (get_local 1)) + (func (export "local-second-i64") (result i64) (local i64 i64) (get_local 1)) + (func (export "local-second-f32") (result f32) (local f32 f32) (get_local 1)) + (func (export "local-second-f64") (result f64) (local f64 f64) (get_local 1)) + (func (export "local-mixed") (result f64) + (local f32) (local $x i32) (local i64 i32) (local) (local f64 i32) + (drop (f32.neg (get_local 0))) + (drop (i32.eqz (get_local 1))) + (drop (i64.eqz (get_local 2))) + (drop (i32.eqz (get_local 3))) + (drop (f64.neg (get_local 4))) + (drop (i32.eqz (get_local 5))) + (get_local 4) + ) + + ;; Typing of parameters + + (func (export "param-first-i32") (param i32 i32) (result i32) (get_local 0)) + (func (export "param-first-i64") (param i64 i64) (result i64) (get_local 0)) + (func (export "param-first-f32") (param f32 f32) (result f32) (get_local 0)) + (func (export "param-first-f64") (param f64 f64) (result f64) (get_local 0)) + (func (export "param-second-i32") (param i32 i32) (result i32) (get_local 1)) + (func (export "param-second-i64") (param i64 i64) (result i64) (get_local 1)) + (func (export "param-second-f32") (param f32 f32) (result f32) (get_local 1)) + (func (export "param-second-f64") (param f64 f64) (result f64) (get_local 1)) + (func (export "param-mixed") (param f32 i32) (param) (param $x i64) (param i32 f64 i32) + (result f64) + (drop (f32.neg (get_local 0))) + (drop (i32.eqz (get_local 1))) + (drop (i64.eqz (get_local 2))) + (drop (i32.eqz (get_local 3))) + (drop (f64.neg (get_local 4))) + (drop (i32.eqz (get_local 5))) + (get_local 4) + ) + + ;; Typing of result + + (func (export "empty")) + (func (export "value-void") (call $dummy)) + (func (export "value-i32") (result i32) (i32.const 77)) + (func (export "value-i64") (result i64) (i64.const 7777)) + (func (export "value-f32") (result f32) (f32.const 77.7)) + (func (export "value-f64") (result f64) (f64.const 77.77)) + (func (export "value-block-void") (block (call $dummy) (call $dummy))) + (func (export "value-block-i32") (result i32) + (block i32 (call $dummy) (i32.const 77)) + ) + + (func (export "return-empty") (return)) + (func (export "return-i32") (result i32) (return (i32.const 78))) + (func (export "return-i64") (result i64) (return (i64.const 7878))) + (func (export "return-f32") (result f32) (return (f32.const 78.7))) + (func (export "return-f64") (result f64) (return (f64.const 78.78))) + (func (export "return-block-i32") (result i32) + (return (block i32 (call $dummy) (i32.const 77))) + ) + + (func (export "break-empty") (br 0)) + (func (export "break-i32") (result i32) (br 0 (i32.const 79))) + (func (export "break-i64") (result i64) (br 0 (i64.const 7979))) + (func (export "break-f32") (result f32) (br 0 (f32.const 79.9))) + (func (export "break-f64") (result f64) (br 0 (f64.const 79.79))) + (func (export "break-block-i32") (result i32) + (br 0 (block i32 (call $dummy) (i32.const 77))) + ) + + (func (export "break-br_if-empty") (param i32) + (br_if 0 (get_local 0)) + ) + (func (export "break-br_if-num") (param i32) (result i32) + (drop (br_if 0 (i32.const 50) (get_local 0))) (i32.const 51) + ) + + (func (export "break-br_table-empty") (param i32) + (br_table 0 0 0 (get_local 0)) + ) + (func (export "break-br_table-num") (param i32) (result i32) + (br_table 0 0 (i32.const 50) (get_local 0)) (i32.const 51) + ) + (func (export "break-br_table-nested-empty") (param i32) + (block (br_table 0 1 0 (get_local 0))) + ) + (func (export "break-br_table-nested-num") (param i32) (result i32) + (i32.add + (block i32 (br_table 0 1 0 (i32.const 50) (get_local 0)) (i32.const 51)) + (i32.const 2) + ) + ) + + ;; Default initialization of locals + + (func (export "init-local-i32") (result i32) (local i32) (get_local 0)) + (func (export "init-local-i64") (result i64) (local i64) (get_local 0)) + (func (export "init-local-f32") (result f32) (local f32) (get_local 0)) + (func (export "init-local-f64") (result f64) (local f64) (get_local 0)) + + + ;; Desugaring of implicit type signature + (func $empty-sig-1) ;; should be assigned type $sig + (func $complex-sig-1 (param f64 i64 f64 i64 f64 i64 f32 i32)) + (func $empty-sig-2) ;; should be assigned type $sig + (func $complex-sig-2 (param f64 i64 f64 i64 f64 i64 f32 i32)) + (func $complex-sig-3 (param f64 i64 f64 i64 f64 i64 f32 i32)) + + (type $empty-sig-duplicate (func)) + (type $complex-sig-duplicate (func (param f64 i64 f64 i64 f64 i64 f32 i32))) + (table anyfunc + (elem + $complex-sig-3 $empty-sig-2 $complex-sig-1 $complex-sig-3 $empty-sig-1 + ) + ) + + (func (export "signature-explicit-reused") + (call_indirect (type $sig) (i32.const 1)) + (call_indirect (type $sig) (i32.const 4)) + ) + + (func (export "signature-implicit-reused") + ;; The implicit index 16 in this test depends on the function and + ;; type definitions, and may need adapting if they change. + (call_indirect (type 16) + (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) + (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) + (i32.const 0) + ) + (call_indirect (type 16) + (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) + (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) + (i32.const 2) + ) + (call_indirect (type 16) + (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) + (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) + (i32.const 3) + ) + ) + + (func (export "signature-explicit-duplicate") + (call_indirect (type $empty-sig-duplicate) (i32.const 1)) + ) + + (func (export "signature-implicit-duplicate") + (call_indirect (type $complex-sig-duplicate) + (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) + (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) + (i32.const 0) + ) + ) +) + +(assert_return (invoke "local-first-i32") (i32.const 0)) +(assert_return (invoke "local-first-i64") (i64.const 0)) +(assert_return (invoke "local-first-f32") (f32.const 0)) +(assert_return (invoke "local-first-f64") (f64.const 0)) +(assert_return (invoke "local-second-i32") (i32.const 0)) +(assert_return (invoke "local-second-i64") (i64.const 0)) +(assert_return (invoke "local-second-f32") (f32.const 0)) +(assert_return (invoke "local-second-f64") (f64.const 0)) +(assert_return (invoke "local-mixed") (f64.const 0)) + +(assert_return + (invoke "param-first-i32" (i32.const 2) (i32.const 3)) (i32.const 2) +) +(assert_return + (invoke "param-first-i64" (i64.const 2) (i64.const 3)) (i64.const 2) +) +(assert_return + (invoke "param-first-f32" (f32.const 2) (f32.const 3)) (f32.const 2) +) +(assert_return + (invoke "param-first-f64" (f64.const 2) (f64.const 3)) (f64.const 2) +) +(assert_return + (invoke "param-second-i32" (i32.const 2) (i32.const 3)) (i32.const 3) +) +(assert_return + (invoke "param-second-i64" (i64.const 2) (i64.const 3)) (i64.const 3) +) +(assert_return + (invoke "param-second-f32" (f32.const 2) (f32.const 3)) (f32.const 3) +) +(assert_return + (invoke "param-second-f64" (f64.const 2) (f64.const 3)) (f64.const 3) +) + +(assert_return + (invoke "param-mixed" + (f32.const 1) (i32.const 2) (i64.const 3) + (i32.const 4) (f64.const 5.5) (i32.const 6) + ) + (f64.const 5.5) +) + +(assert_return (invoke "empty")) +(assert_return (invoke "value-void")) +(assert_return (invoke "value-i32") (i32.const 77)) +(assert_return (invoke "value-i64") (i64.const 7777)) +(assert_return (invoke "value-f32") (f32.const 77.7)) +(assert_return (invoke "value-f64") (f64.const 77.77)) +(assert_return (invoke "value-block-void")) +(assert_return (invoke "value-block-i32") (i32.const 77)) + +(assert_return (invoke "return-empty")) +(assert_return (invoke "return-i32") (i32.const 78)) +(assert_return (invoke "return-i64") (i64.const 7878)) +(assert_return (invoke "return-f32") (f32.const 78.7)) +(assert_return (invoke "return-f64") (f64.const 78.78)) +(assert_return (invoke "return-block-i32") (i32.const 77)) + +(assert_return (invoke "break-empty")) +(assert_return (invoke "break-i32") (i32.const 79)) +(assert_return (invoke "break-i64") (i64.const 7979)) +(assert_return (invoke "break-f32") (f32.const 79.9)) +(assert_return (invoke "break-f64") (f64.const 79.79)) +(assert_return (invoke "break-block-i32") (i32.const 77)) + +(assert_return (invoke "break-br_if-empty" (i32.const 0))) +(assert_return (invoke "break-br_if-empty" (i32.const 2))) +(assert_return (invoke "break-br_if-num" (i32.const 0)) (i32.const 51)) +(assert_return (invoke "break-br_if-num" (i32.const 1)) (i32.const 50)) + +(assert_return (invoke "break-br_table-empty" (i32.const 0))) +(assert_return (invoke "break-br_table-empty" (i32.const 1))) +(assert_return (invoke "break-br_table-empty" (i32.const 5))) +(assert_return (invoke "break-br_table-empty" (i32.const -1))) +(assert_return (invoke "break-br_table-num" (i32.const 0)) (i32.const 50)) +(assert_return (invoke "break-br_table-num" (i32.const 1)) (i32.const 50)) +(assert_return (invoke "break-br_table-num" (i32.const 10)) (i32.const 50)) +(assert_return (invoke "break-br_table-num" (i32.const -100)) (i32.const 50)) +(assert_return (invoke "break-br_table-nested-empty" (i32.const 0))) +(assert_return (invoke "break-br_table-nested-empty" (i32.const 1))) +(assert_return (invoke "break-br_table-nested-empty" (i32.const 3))) +(assert_return (invoke "break-br_table-nested-empty" (i32.const -2))) +(assert_return + (invoke "break-br_table-nested-num" (i32.const 0)) (i32.const 52) +) +(assert_return + (invoke "break-br_table-nested-num" (i32.const 1)) (i32.const 50) +) +(assert_return + (invoke "break-br_table-nested-num" (i32.const 2)) (i32.const 52) +) +(assert_return + (invoke "break-br_table-nested-num" (i32.const -3)) (i32.const 52) +) + +(assert_return (invoke "init-local-i32") (i32.const 0)) +(assert_return (invoke "init-local-i64") (i64.const 0)) +(assert_return (invoke "init-local-f32") (f32.const 0)) +(assert_return (invoke "init-local-f64") (f64.const 0)) + +(assert_return (invoke "signature-explicit-reused")) +(assert_return (invoke "signature-implicit-reused")) +(assert_return (invoke "signature-explicit-duplicate")) +(assert_return (invoke "signature-implicit-duplicate")) + + +;; Invalid typing of locals + +(assert_invalid + (module (func $type-local-num-vs-num (result i64) (local i32) (get_local 0))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-num-vs-num (local f32) (i32.eqz (get_local 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-num-vs-num (local f64 i64) (f64.neg (get_local 1)))) + "type mismatch" +) + + +;; Invalid typing of parameters + +(assert_invalid + (module (func $type-param-num-vs-num (param i32) (result i64) (get_local 0))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-num-vs-num (param f32) (i32.eqz (get_local 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-num-vs-num (param f64 i64) (f64.neg (get_local 1)))) + "type mismatch" +) + + +;; Invalid typing of result + +(assert_invalid + (module (func $type-multiple-result (result i32 i32) (unreachable))) + "invalid result arity" +) +(assert_invalid + (module + (type (func (result i32 i32))) + (func $type-multiple-result (type 0) (unreachable)) + ) + "invalid result arity" +) + + +(assert_invalid + (module (func $type-empty-i32 (result i32))) + "type mismatch" +) +(assert_invalid + (module (func $type-empty-i64 (result i64))) + "type mismatch" +) +(assert_invalid + (module (func $type-empty-f32 (result f32))) + "type mismatch" +) +(assert_invalid + (module (func $type-empty-f64 (result f64))) + "type mismatch" +) + +(assert_invalid + (module (func $type-value-void-vs-num (result i32) + (nop) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-value-num-vs-void + (i32.const 0) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-value-num-vs-num (result i32) + (f32.const 0) + )) + "type mismatch" +) + +(; TODO(stack): Should these become legal? +(assert_invalid + (module (func $type-value-void-vs-num-after-return (result i32) + (return (i32.const 1)) (nop) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-value-num-vs-num-after-return (result i32) + (return (i32.const 1)) (f32.const 0) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-value-void-vs-num-after-break (result i32) + (br 0 (i32.const 1)) (nop) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-value-num-vs-num-after-break (result i32) + (br 0 (i32.const 1)) (f32.const 0) + )) + "arity mismatch" +) +;) + +(assert_invalid + (module (func $type-return-last-empty-vs-num (result i32) + (return) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-return-last-void-vs-num (result i32) + (return (nop)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-return-last-num-vs-num (result i32) + (return (i64.const 0)) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-return-empty-vs-num (result i32) + (return) (i32.const 1) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-return-void-vs-num (result i32) + (return (nop)) (i32.const 1) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-return-num-vs-num (result i32) + (return (i64.const 1)) (i32.const 1) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-return-first-num-vs-num (result i32) + (return (i64.const 1)) (return (i32.const 1)) + )) + "type mismatch" +) +(; TODO(stack): Should this become legal? +(assert_invalid + (module (func $type-return-second-num-vs-num (result i32) + (return (i32.const 1)) (return (f64.const 1)) + )) + "type mismatch" +) +;) + +(assert_invalid + (module (func $type-break-last-void-vs-num (result i32) + (br 0) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-last-num-vs-num (result i32) + (br 0 (f32.const 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-void-vs-num (result i32) + (br 0) (i32.const 1) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-num-vs-num (result i32) + (br 0 (i64.const 1)) (i32.const 1) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-first-num-vs-num (result i32) + (br 0 (i64.const 1)) (br 0 (i32.const 1)) + )) + "type mismatch" +) + +(; TODO(stack): soft failure +(assert_invalid + (module (func $type-break-second-num-vs-num (result i32) + (br 0 (i32.const 1)) (br 0 (f64.const 1)) + )) + "type mismatch" +) +;) + +(assert_invalid + (module (func $type-break-nested-empty-vs-num (result i32) + (block (br 1)) (br 0 (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-nested-void-vs-num (result i32) + (block (br 1 (nop))) (br 0 (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-nested-num-vs-num (result i32) + (block (br 1 (i64.const 1))) (br 0 (i32.const 1)) + )) + "type mismatch" +) + diff --git a/src/binaryen/test/spec/func_ptrs.wast b/src/binaryen/test/spec/func_ptrs.wast new file mode 100644 index 0000000000..359dd63c43 --- /dev/null +++ b/src/binaryen/test/spec/func_ptrs.wast @@ -0,0 +1,105 @@ +(module + (type (func)) ;; 0: void -> void + (type $S (func)) ;; 1: void -> void + (type (func (param))) ;; 2: void -> void + (type (func (result i32))) ;; 3: void -> i32 + (type (func (param) (result i32))) ;; 4: void -> i32 + (type $T (func (param i32) (result i32))) ;; 5: i32 -> i32 + (type $U (func (param i32))) ;; 6: i32 -> void + + (func $print (import "spectest" "print") (type 6)) + + (func (type 0)) + (func (type $S)) + + (func (export "one") (type 4) (i32.const 13)) + (func (export "two") (type $T) (i32.add (get_local 0) (i32.const 1))) + + ;; Both signature and parameters are allowed (and required to match) + ;; since this allows the naming of parameters. + (func (export "three") (type $T) (param $a i32) (result i32) + (i32.sub (get_local 0) (i32.const 2)) + ) + + (func (export "four") (type $U) (call $print (get_local 0))) +) +(assert_return (invoke "one") (i32.const 13)) +(assert_return (invoke "two" (i32.const 13)) (i32.const 14)) +(assert_return (invoke "three" (i32.const 13)) (i32.const 11)) +(invoke "four" (i32.const 83)) + +(assert_invalid (module (elem (i32.const 0))) "unknown table") +(assert_invalid (module (elem (i32.const 0) 0) (func)) "unknown table") + +(assert_invalid + (module (table 1 anyfunc) (elem (i64.const 0))) + "type mismatch" +) +(assert_invalid + (module (table 1 anyfunc) (elem (i32.ctz (i32.const 0)))) + "constant expression required" +) +(assert_invalid + (module (table 1 anyfunc) (elem (nop))) + "constant expression required" +) + +(assert_invalid (module (func (type 42))) "unknown type") +(assert_invalid (module (import "spectest" "print" (func (type 43)))) "unknown type") + +(module + (type $T (func (param) (result i32))) + (type $U (func (param) (result i32))) + (table anyfunc (elem $t1 $t2 $t3 $u1 $u2 $t1 $t3)) + + (func $t1 (type $T) (i32.const 1)) + (func $t2 (type $T) (i32.const 2)) + (func $t3 (type $T) (i32.const 3)) + (func $u1 (type $U) (i32.const 4)) + (func $u2 (type $U) (i32.const 5)) + + (func (export "callt") (param $i i32) (result i32) + (call_indirect (type $T) (get_local $i)) + ) + + (func (export "callu") (param $i i32) (result i32) + (call_indirect (type $U) (get_local $i)) + ) +) + +(assert_return (invoke "callt" (i32.const 0)) (i32.const 1)) +(assert_return (invoke "callt" (i32.const 1)) (i32.const 2)) +(assert_return (invoke "callt" (i32.const 2)) (i32.const 3)) +(assert_return (invoke "callt" (i32.const 3)) (i32.const 4)) +(assert_return (invoke "callt" (i32.const 4)) (i32.const 5)) +(assert_return (invoke "callt" (i32.const 5)) (i32.const 1)) +(assert_return (invoke "callt" (i32.const 6)) (i32.const 3)) +(assert_trap (invoke "callt" (i32.const 7)) "undefined element") +(assert_trap (invoke "callt" (i32.const 100)) "undefined element") +(assert_trap (invoke "callt" (i32.const -1)) "undefined element") + +(assert_return (invoke "callu" (i32.const 0)) (i32.const 1)) +(assert_return (invoke "callu" (i32.const 1)) (i32.const 2)) +(assert_return (invoke "callu" (i32.const 2)) (i32.const 3)) +(assert_return (invoke "callu" (i32.const 3)) (i32.const 4)) +(assert_return (invoke "callu" (i32.const 4)) (i32.const 5)) +(assert_return (invoke "callu" (i32.const 5)) (i32.const 1)) +(assert_return (invoke "callu" (i32.const 6)) (i32.const 3)) +(assert_trap (invoke "callu" (i32.const 7)) "undefined element") +(assert_trap (invoke "callu" (i32.const 100)) "undefined element") +(assert_trap (invoke "callu" (i32.const -1)) "undefined element") + +(module + (type $T (func (result i32))) + (table anyfunc (elem 0 1)) + + (func $t1 (type $T) (i32.const 1)) + (func $t2 (type $T) (i32.const 2)) + + (func (export "callt") (param $i i32) (result i32) + (call_indirect (type $T) (get_local $i)) + ) +) + +(assert_return (invoke "callt" (i32.const 0)) (i32.const 1)) +(assert_return (invoke "callt" (i32.const 1)) (i32.const 2)) diff --git a/src/binaryen/test/spec/get_local.wast b/src/binaryen/test/spec/get_local.wast new file mode 100644 index 0000000000..e1f9625b96 --- /dev/null +++ b/src/binaryen/test/spec/get_local.wast @@ -0,0 +1,148 @@ +;; Test `get_local` operator + +(module + ;; Typing + + (func (export "type-local-i32") (result i32) (local i32) (get_local 0)) + (func (export "type-local-i64") (result i64) (local i64) (get_local 0)) + (func (export "type-local-f32") (result f32) (local f32) (get_local 0)) + (func (export "type-local-f64") (result f64) (local f64) (get_local 0)) + + (func (export "type-param-i32") (param i32) (result i32) (get_local 0)) + (func (export "type-param-i64") (param i64) (result i64) (get_local 0)) + (func (export "type-param-f32") (param f32) (result f32) (get_local 0)) + (func (export "type-param-f64") (param f64) (result f64) (get_local 0)) + + (func (export "type-mixed") (param i64 f32 f64 i32 i32) + (local f32 i64 i64 f64) + (drop (i64.eqz (get_local 0))) + (drop (f32.neg (get_local 1))) + (drop (f64.neg (get_local 2))) + (drop (i32.eqz (get_local 3))) + (drop (i32.eqz (get_local 4))) + (drop (f32.neg (get_local 5))) + (drop (i64.eqz (get_local 6))) + (drop (i64.eqz (get_local 7))) + (drop (f64.neg (get_local 8))) + ) + + ;; Reading + + (func (export "read") (param i64 f32 f64 i32 i32) (result f64) + (local f32 i64 i64 f64) + (set_local 5 (f32.const 5.5)) + (set_local 6 (i64.const 6)) + (set_local 8 (f64.const 8)) + (f64.add + (f64.convert_u/i64 (get_local 0)) + (f64.add + (f64.promote/f32 (get_local 1)) + (f64.add + (get_local 2) + (f64.add + (f64.convert_u/i32 (get_local 3)) + (f64.add + (f64.convert_s/i32 (get_local 4)) + (f64.add + (f64.promote/f32 (get_local 5)) + (f64.add + (f64.convert_u/i64 (get_local 6)) + (f64.add + (f64.convert_u/i64 (get_local 7)) + (get_local 8) + ) + ) + ) + ) + ) + ) + ) + ) + ) +) + +(assert_return (invoke "type-local-i32") (i32.const 0)) +(assert_return (invoke "type-local-i64") (i64.const 0)) +(assert_return (invoke "type-local-f32") (f32.const 0)) +(assert_return (invoke "type-local-f64") (f64.const 0)) + +(assert_return (invoke "type-param-i32" (i32.const 2)) (i32.const 2)) +(assert_return (invoke "type-param-i64" (i64.const 3)) (i64.const 3)) +(assert_return (invoke "type-param-f32" (f32.const 4.4)) (f32.const 4.4)) +(assert_return (invoke "type-param-f64" (f64.const 5.5)) (f64.const 5.5)) + +(assert_return + (invoke "type-mixed" + (i64.const 1) (f32.const 2.2) (f64.const 3.3) (i32.const 4) (i32.const 5) + ) +) + +(assert_return + (invoke "read" + (i64.const 1) (f32.const 2) (f64.const 3.3) (i32.const 4) (i32.const 5) + ) + (f64.const 34.8) +) + + +;; Invalid typing of access to locals + +(assert_invalid + (module (func $type-local-num-vs-num (result i64) (local i32) (get_local 0))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-num-vs-num (local f32) (i32.eqz (get_local 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-num-vs-num (local f64 i64) (f64.neg (get_local 1)))) + "type mismatch" +) + + +;; Invalid typing of access to parameters + +(assert_invalid + (module (func $type-param-num-vs-num (param i32) (result i64) (get_local 0))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-num-vs-num (param f32) (i32.eqz (get_local 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-num-vs-num (param f64 i64) (f64.neg (get_local 1)))) + "type mismatch" +) + + +;; Invalid local index + +(assert_invalid + (module (func $unbound-local (local i32 i64) (get_local 3))) + "unknown local" +) +(assert_invalid + (module (func $large-local (local i32 i64) (get_local 14324343))) + "unknown local" +) + +(assert_invalid + (module (func $unbound-param (param i32 i64) (get_local 2))) + "unknown local" +) +(assert_invalid + (module (func $large-param (local i32 i64) (get_local 714324343))) + "unknown local" +) + +(assert_invalid + (module (func $unbound-mixed (param i32) (local i32 i64) (get_local 3))) + "unknown local" +) +(assert_invalid + (module (func $large-mixed (param i64) (local i32 i64) (get_local 214324343))) + "unknown local" +) + diff --git a/src/binaryen/test/spec/globals.wast b/src/binaryen/test/spec/globals.wast new file mode 100644 index 0000000000..58cc51b6b1 --- /dev/null +++ b/src/binaryen/test/spec/globals.wast @@ -0,0 +1,92 @@ +;; Test globals + +(module + (global $a i32 (i32.const -2)) + (global (;1;) f32 (f32.const -3)) + (global (;2;) f64 (f64.const -4)) + (global $b i64 (i64.const -5)) + + (global $x (mut i32) (i32.const -12)) + (global (;5;) (mut f32) (f32.const -13)) + (global (;6;) (mut f64) (f64.const -14)) + (global $y (mut i64) (i64.const -15)) + + (func (export "get-a") (result i32) (get_global $a)) + (func (export "get-b") (result i64) (get_global $b)) + (func (export "get-x") (result i32) (get_global $x)) + (func (export "get-y") (result i64) (get_global $y)) + (func (export "set-x") (param i32) (set_global $x (get_local 0))) + (func (export "set-y") (param i64) (set_global $y (get_local 0))) + + (func (export "get-1") (result f32) (get_global 1)) + (func (export "get-2") (result f64) (get_global 2)) + (func (export "get-5") (result f32) (get_global 5)) + (func (export "get-6") (result f64) (get_global 6)) + (func (export "set-5") (param f32) (set_global 5 (get_local 0))) + (func (export "set-6") (param f64) (set_global 6 (get_local 0))) +) + +(assert_return (invoke "get-a") (i32.const -2)) +(assert_return (invoke "get-b") (i64.const -5)) +(assert_return (invoke "get-x") (i32.const -12)) +(assert_return (invoke "get-y") (i64.const -15)) + +(assert_return (invoke "get-1") (f32.const -3)) +(assert_return (invoke "get-2") (f64.const -4)) +(assert_return (invoke "get-5") (f32.const -13)) +(assert_return (invoke "get-6") (f64.const -14)) + +(assert_return (invoke "set-x" (i32.const 6))) +(assert_return (invoke "set-y" (i64.const 7))) +(assert_return (invoke "set-5" (f32.const 8))) +(assert_return (invoke "set-6" (f64.const 9))) + +(assert_return (invoke "get-x") (i32.const 6)) +(assert_return (invoke "get-y") (i64.const 7)) +(assert_return (invoke "get-5") (f32.const 8)) +(assert_return (invoke "get-6") (f64.const 9)) + +(assert_invalid + (module (global f32 (f32.const 0)) (func (set_global 0 (i32.const 1)))) + "global is immutable" +) + +(assert_invalid + (module (import "m" "a" (global (mut i32)))) + "mutable globals cannot be imported" +) + +(assert_invalid + (module (global (import "m" "a") (mut i32))) + "mutable globals cannot be imported" +) + +(assert_invalid + (module (global (mut f32) (f32.const 0)) (export "a" (global 0))) + "mutable globals cannot be exported" +) + +(assert_invalid + (module (global (export "a") (mut f32) (f32.const 0))) + "mutable globals cannot be exported" +) + +(assert_invalid + (module (global f32 (f32.neg (f32.const 0)))) + "constant expression required" +) + +(assert_invalid + (module (global f32 (get_local 0))) + "constant expression required" +) + +(assert_invalid + (module (global i32 (f32.const 0))) + "type mismatch" +) + +(assert_invalid + (module (global i32 (get_global 0))) + "unknown global" +) diff --git a/src/binaryen/test/spec/i32.load32_s.fail.wast b/src/binaryen/test/spec/i32.load32_s.fail.wast new file mode 100644 index 0000000000..abf38966ad --- /dev/null +++ b/src/binaryen/test/spec/i32.load32_s.fail.wast @@ -0,0 +1 @@ +(module (memory 1) (func (param i32) (result i32) (i32.load32_s (get_local 0)))) diff --git a/src/binaryen/test/spec/i32.load32_u.fail.wast b/src/binaryen/test/spec/i32.load32_u.fail.wast new file mode 100644 index 0000000000..26df00312b --- /dev/null +++ b/src/binaryen/test/spec/i32.load32_u.fail.wast @@ -0,0 +1 @@ +(module (memory 1) (func (param i32) (result i32) (i32.load32_u (get_local 0)))) diff --git a/src/binaryen/test/spec/i32.load64_s.fail.wast b/src/binaryen/test/spec/i32.load64_s.fail.wast new file mode 100644 index 0000000000..78fa012796 --- /dev/null +++ b/src/binaryen/test/spec/i32.load64_s.fail.wast @@ -0,0 +1 @@ +(module (memory 1) (func (param i32) (result i32) (i32.load64_s (get_local 0)))) diff --git a/src/binaryen/test/spec/i32.load64_u.fail.wast b/src/binaryen/test/spec/i32.load64_u.fail.wast new file mode 100644 index 0000000000..01e8273e6a --- /dev/null +++ b/src/binaryen/test/spec/i32.load64_u.fail.wast @@ -0,0 +1 @@ +(module (memory 1) (func (param i32) (result i32) (i32.load64_u (get_local 0)))) diff --git a/src/binaryen/test/spec/i32.store32.fail.wast b/src/binaryen/test/spec/i32.store32.fail.wast new file mode 100644 index 0000000000..8a6c528d66 --- /dev/null +++ b/src/binaryen/test/spec/i32.store32.fail.wast @@ -0,0 +1 @@ +(module (memory 1) (func (param i32) (param i32) (i32.store32 (get_local 0) (get_local 1)))) diff --git a/src/binaryen/test/spec/i32.store64.fail.wast b/src/binaryen/test/spec/i32.store64.fail.wast new file mode 100644 index 0000000000..cb176d23e2 --- /dev/null +++ b/src/binaryen/test/spec/i32.store64.fail.wast @@ -0,0 +1 @@ +(module (memory 1) (func (param i32) (param i64) (i32.store64 (get_local 0) (get_local 1)))) diff --git a/src/binaryen/test/spec/i32.wast b/src/binaryen/test/spec/i32.wast new file mode 100644 index 0000000000..ba28d7c090 --- /dev/null +++ b/src/binaryen/test/spec/i32.wast @@ -0,0 +1,404 @@ +;; i32 operations + +(module + (func (export "add") (param $x i32) (param $y i32) (result i32) (i32.add (get_local $x) (get_local $y))) + (func (export "sub") (param $x i32) (param $y i32) (result i32) (i32.sub (get_local $x) (get_local $y))) + (func (export "mul") (param $x i32) (param $y i32) (result i32) (i32.mul (get_local $x) (get_local $y))) + (func (export "div_s") (param $x i32) (param $y i32) (result i32) (i32.div_s (get_local $x) (get_local $y))) + (func (export "div_u") (param $x i32) (param $y i32) (result i32) (i32.div_u (get_local $x) (get_local $y))) + (func (export "rem_s") (param $x i32) (param $y i32) (result i32) (i32.rem_s (get_local $x) (get_local $y))) + (func (export "rem_u") (param $x i32) (param $y i32) (result i32) (i32.rem_u (get_local $x) (get_local $y))) + (func (export "and") (param $x i32) (param $y i32) (result i32) (i32.and (get_local $x) (get_local $y))) + (func (export "or") (param $x i32) (param $y i32) (result i32) (i32.or (get_local $x) (get_local $y))) + (func (export "xor") (param $x i32) (param $y i32) (result i32) (i32.xor (get_local $x) (get_local $y))) + (func (export "shl") (param $x i32) (param $y i32) (result i32) (i32.shl (get_local $x) (get_local $y))) + (func (export "shr_s") (param $x i32) (param $y i32) (result i32) (i32.shr_s (get_local $x) (get_local $y))) + (func (export "shr_u") (param $x i32) (param $y i32) (result i32) (i32.shr_u (get_local $x) (get_local $y))) + (func (export "rotl") (param $x i32) (param $y i32) (result i32) (i32.rotl (get_local $x) (get_local $y))) + (func (export "rotr") (param $x i32) (param $y i32) (result i32) (i32.rotr (get_local $x) (get_local $y))) + (func (export "clz") (param $x i32) (result i32) (i32.clz (get_local $x))) + (func (export "ctz") (param $x i32) (result i32) (i32.ctz (get_local $x))) + (func (export "popcnt") (param $x i32) (result i32) (i32.popcnt (get_local $x))) + (func (export "eqz") (param $x i32) (result i32) (i32.eqz (get_local $x))) + (func (export "eq") (param $x i32) (param $y i32) (result i32) (i32.eq (get_local $x) (get_local $y))) + (func (export "ne") (param $x i32) (param $y i32) (result i32) (i32.ne (get_local $x) (get_local $y))) + (func (export "lt_s") (param $x i32) (param $y i32) (result i32) (i32.lt_s (get_local $x) (get_local $y))) + (func (export "lt_u") (param $x i32) (param $y i32) (result i32) (i32.lt_u (get_local $x) (get_local $y))) + (func (export "le_s") (param $x i32) (param $y i32) (result i32) (i32.le_s (get_local $x) (get_local $y))) + (func (export "le_u") (param $x i32) (param $y i32) (result i32) (i32.le_u (get_local $x) (get_local $y))) + (func (export "gt_s") (param $x i32) (param $y i32) (result i32) (i32.gt_s (get_local $x) (get_local $y))) + (func (export "gt_u") (param $x i32) (param $y i32) (result i32) (i32.gt_u (get_local $x) (get_local $y))) + (func (export "ge_s") (param $x i32) (param $y i32) (result i32) (i32.ge_s (get_local $x) (get_local $y))) + (func (export "ge_u") (param $x i32) (param $y i32) (result i32) (i32.ge_u (get_local $x) (get_local $y))) +) + +(assert_return (invoke "add" (i32.const 1) (i32.const 1)) (i32.const 2)) +(assert_return (invoke "add" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "add" (i32.const -1) (i32.const -1)) (i32.const -2)) +(assert_return (invoke "add" (i32.const -1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "add" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x80000000)) +(assert_return (invoke "add" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x7fffffff)) +(assert_return (invoke "add" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "add" (i32.const 0x3fffffff) (i32.const 1)) (i32.const 0x40000000)) + +(assert_return (invoke "sub" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "sub" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "sub" (i32.const -1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "sub" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x80000000)) +(assert_return (invoke "sub" (i32.const 0x80000000) (i32.const 1)) (i32.const 0x7fffffff)) +(assert_return (invoke "sub" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "sub" (i32.const 0x3fffffff) (i32.const -1)) (i32.const 0x40000000)) + +(assert_return (invoke "mul" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "mul" (i32.const 1) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "mul" (i32.const -1) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "mul" (i32.const 0x10000000) (i32.const 4096)) (i32.const 0)) +(assert_return (invoke "mul" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "mul" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x80000000)) +(assert_return (invoke "mul" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x80000001)) +(assert_return (invoke "mul" (i32.const 0x01234567) (i32.const 0x76543210)) (i32.const 0x358e7470)) + +(assert_trap (invoke "div_s" (i32.const 1) (i32.const 0)) "integer divide by zero") +(assert_trap (invoke "div_s" (i32.const 0) (i32.const 0)) "integer divide by zero") +(assert_trap (invoke "div_s" (i32.const 0x80000000) (i32.const -1)) "integer overflow") +(assert_return (invoke "div_s" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "div_s" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "div_s" (i32.const -1) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "div_s" (i32.const 0x80000000) (i32.const 2)) (i32.const 0xc0000000)) +(assert_return (invoke "div_s" (i32.const 0x80000001) (i32.const 1000)) (i32.const 0xffdf3b65)) +(assert_return (invoke "div_s" (i32.const 5) (i32.const 2)) (i32.const 2)) +(assert_return (invoke "div_s" (i32.const -5) (i32.const 2)) (i32.const -2)) +(assert_return (invoke "div_s" (i32.const 5) (i32.const -2)) (i32.const -2)) +(assert_return (invoke "div_s" (i32.const -5) (i32.const -2)) (i32.const 2)) +(assert_return (invoke "div_s" (i32.const 7) (i32.const 3)) (i32.const 2)) +(assert_return (invoke "div_s" (i32.const -7) (i32.const 3)) (i32.const -2)) +(assert_return (invoke "div_s" (i32.const 7) (i32.const -3)) (i32.const -2)) +(assert_return (invoke "div_s" (i32.const -7) (i32.const -3)) (i32.const 2)) +(assert_return (invoke "div_s" (i32.const 11) (i32.const 5)) (i32.const 2)) +(assert_return (invoke "div_s" (i32.const 17) (i32.const 7)) (i32.const 2)) + +(assert_trap (invoke "div_u" (i32.const 1) (i32.const 0)) "integer divide by zero") +(assert_trap (invoke "div_u" (i32.const 0) (i32.const 0)) "integer divide by zero") +(assert_return (invoke "div_u" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "div_u" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "div_u" (i32.const -1) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "div_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "div_u" (i32.const 0x80000000) (i32.const 2)) (i32.const 0x40000000)) +(assert_return (invoke "div_u" (i32.const 0x8ff00ff0) (i32.const 0x10001)) (i32.const 0x8fef)) +(assert_return (invoke "div_u" (i32.const 0x80000001) (i32.const 1000)) (i32.const 0x20c49b)) +(assert_return (invoke "div_u" (i32.const 5) (i32.const 2)) (i32.const 2)) +(assert_return (invoke "div_u" (i32.const -5) (i32.const 2)) (i32.const 0x7ffffffd)) +(assert_return (invoke "div_u" (i32.const 5) (i32.const -2)) (i32.const 0)) +(assert_return (invoke "div_u" (i32.const -5) (i32.const -2)) (i32.const 0)) +(assert_return (invoke "div_u" (i32.const 7) (i32.const 3)) (i32.const 2)) +(assert_return (invoke "div_u" (i32.const 11) (i32.const 5)) (i32.const 2)) +(assert_return (invoke "div_u" (i32.const 17) (i32.const 7)) (i32.const 2)) + +(assert_trap (invoke "rem_s" (i32.const 1) (i32.const 0)) "integer divide by zero") +(assert_trap (invoke "rem_s" (i32.const 0) (i32.const 0)) "integer divide by zero") +(assert_return (invoke "rem_s" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "rem_s" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "rem_s" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "rem_s" (i32.const -1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "rem_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "rem_s" (i32.const 0x80000000) (i32.const 2)) (i32.const 0)) +(assert_return (invoke "rem_s" (i32.const 0x80000001) (i32.const 1000)) (i32.const -647)) +(assert_return (invoke "rem_s" (i32.const 5) (i32.const 2)) (i32.const 1)) +(assert_return (invoke "rem_s" (i32.const -5) (i32.const 2)) (i32.const -1)) +(assert_return (invoke "rem_s" (i32.const 5) (i32.const -2)) (i32.const 1)) +(assert_return (invoke "rem_s" (i32.const -5) (i32.const -2)) (i32.const -1)) +(assert_return (invoke "rem_s" (i32.const 7) (i32.const 3)) (i32.const 1)) +(assert_return (invoke "rem_s" (i32.const -7) (i32.const 3)) (i32.const -1)) +(assert_return (invoke "rem_s" (i32.const 7) (i32.const -3)) (i32.const 1)) +(assert_return (invoke "rem_s" (i32.const -7) (i32.const -3)) (i32.const -1)) +(assert_return (invoke "rem_s" (i32.const 11) (i32.const 5)) (i32.const 1)) +(assert_return (invoke "rem_s" (i32.const 17) (i32.const 7)) (i32.const 3)) + +(assert_trap (invoke "rem_u" (i32.const 1) (i32.const 0)) "integer divide by zero") +(assert_trap (invoke "rem_u" (i32.const 0) (i32.const 0)) "integer divide by zero") +(assert_return (invoke "rem_u" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "rem_u" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "rem_u" (i32.const -1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "rem_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x80000000)) +(assert_return (invoke "rem_u" (i32.const 0x80000000) (i32.const 2)) (i32.const 0)) +(assert_return (invoke "rem_u" (i32.const 0x8ff00ff0) (i32.const 0x10001)) (i32.const 0x8001)) +(assert_return (invoke "rem_u" (i32.const 0x80000001) (i32.const 1000)) (i32.const 649)) +(assert_return (invoke "rem_u" (i32.const 5) (i32.const 2)) (i32.const 1)) +(assert_return (invoke "rem_u" (i32.const -5) (i32.const 2)) (i32.const 1)) +(assert_return (invoke "rem_u" (i32.const 5) (i32.const -2)) (i32.const 5)) +(assert_return (invoke "rem_u" (i32.const -5) (i32.const -2)) (i32.const -5)) +(assert_return (invoke "rem_u" (i32.const 7) (i32.const 3)) (i32.const 1)) +(assert_return (invoke "rem_u" (i32.const 11) (i32.const 5)) (i32.const 1)) +(assert_return (invoke "rem_u" (i32.const 17) (i32.const 7)) (i32.const 3)) + +(assert_return (invoke "and" (i32.const 1) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "and" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "and" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "and" (i32.const 0) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "and" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "and" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x7fffffff)) +(assert_return (invoke "and" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0xf0f0f0f0)) +(assert_return (invoke "and" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0xffffffff)) + +(assert_return (invoke "or" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "or" (i32.const 0) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "or" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "or" (i32.const 0) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "or" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const -1)) +(assert_return (invoke "or" (i32.const 0x80000000) (i32.const 0)) (i32.const 0x80000000)) +(assert_return (invoke "or" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0xffffffff)) +(assert_return (invoke "or" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0xffffffff)) + +(assert_return (invoke "xor" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "xor" (i32.const 0) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "xor" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "xor" (i32.const 0) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "xor" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const -1)) +(assert_return (invoke "xor" (i32.const 0x80000000) (i32.const 0)) (i32.const 0x80000000)) +(assert_return (invoke "xor" (i32.const -1) (i32.const 0x80000000)) (i32.const 0x7fffffff)) +(assert_return (invoke "xor" (i32.const -1) (i32.const 0x7fffffff)) (i32.const 0x80000000)) +(assert_return (invoke "xor" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0x0f0f0f0f)) +(assert_return (invoke "xor" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0)) + +(assert_return (invoke "shl" (i32.const 1) (i32.const 1)) (i32.const 2)) +(assert_return (invoke "shl" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "shl" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0xfffffffe)) +(assert_return (invoke "shl" (i32.const 0xffffffff) (i32.const 1)) (i32.const 0xfffffffe)) +(assert_return (invoke "shl" (i32.const 0x80000000) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "shl" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x80000000)) +(assert_return (invoke "shl" (i32.const 1) (i32.const 31)) (i32.const 0x80000000)) +(assert_return (invoke "shl" (i32.const 1) (i32.const 32)) (i32.const 1)) +(assert_return (invoke "shl" (i32.const 1) (i32.const 33)) (i32.const 2)) +(assert_return (invoke "shl" (i32.const 1) (i32.const -1)) (i32.const 0x80000000)) +(assert_return (invoke "shl" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0x80000000)) + +(assert_return (invoke "shr_s" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "shr_s" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "shr_s" (i32.const -1) (i32.const 1)) (i32.const -1)) +(assert_return (invoke "shr_s" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x3fffffff)) +(assert_return (invoke "shr_s" (i32.const 0x80000000) (i32.const 1)) (i32.const 0xc0000000)) +(assert_return (invoke "shr_s" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x20000000)) +(assert_return (invoke "shr_s" (i32.const 1) (i32.const 32)) (i32.const 1)) +(assert_return (invoke "shr_s" (i32.const 1) (i32.const 33)) (i32.const 0)) +(assert_return (invoke "shr_s" (i32.const 1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "shr_s" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "shr_s" (i32.const 1) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "shr_s" (i32.const 0x80000000) (i32.const 31)) (i32.const -1)) +(assert_return (invoke "shr_s" (i32.const -1) (i32.const 32)) (i32.const -1)) +(assert_return (invoke "shr_s" (i32.const -1) (i32.const 33)) (i32.const -1)) +(assert_return (invoke "shr_s" (i32.const -1) (i32.const -1)) (i32.const -1)) +(assert_return (invoke "shr_s" (i32.const -1) (i32.const 0x7fffffff)) (i32.const -1)) +(assert_return (invoke "shr_s" (i32.const -1) (i32.const 0x80000000)) (i32.const -1)) + +(assert_return (invoke "shr_u" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "shr_u" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "shr_u" (i32.const -1) (i32.const 1)) (i32.const 0x7fffffff)) +(assert_return (invoke "shr_u" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x3fffffff)) +(assert_return (invoke "shr_u" (i32.const 0x80000000) (i32.const 1)) (i32.const 0x40000000)) +(assert_return (invoke "shr_u" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x20000000)) +(assert_return (invoke "shr_u" (i32.const 1) (i32.const 32)) (i32.const 1)) +(assert_return (invoke "shr_u" (i32.const 1) (i32.const 33)) (i32.const 0)) +(assert_return (invoke "shr_u" (i32.const 1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "shr_u" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "shr_u" (i32.const 1) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "shr_u" (i32.const 0x80000000) (i32.const 31)) (i32.const 1)) +(assert_return (invoke "shr_u" (i32.const -1) (i32.const 32)) (i32.const -1)) +(assert_return (invoke "shr_u" (i32.const -1) (i32.const 33)) (i32.const 0x7fffffff)) +(assert_return (invoke "shr_u" (i32.const -1) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "shr_u" (i32.const -1) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "shr_u" (i32.const -1) (i32.const 0x80000000)) (i32.const -1)) + +(assert_return (invoke "rotl" (i32.const 0xfe00dc00) (i32.const 4)) (i32.const 0xe00dc00f)) +(assert_return (invoke "rotl" (i32.const 0xabcd9876) (i32.const 1)) (i32.const 0x579b30ed)) +(assert_return (invoke "rotl" (i32.const 0x00008000) (i32.const 37)) (i32.const 0x00100000)) +(assert_return (invoke "rotl" (i32.const 0x769abcdf) (i32.const 0x8000000d)) (i32.const 0x579beed3)) +(assert_return (invoke "rotl" (i32.const 1) (i32.const 31)) (i32.const 0x80000000)) +(assert_return (invoke "rotl" (i32.const 0x80000000) (i32.const 1)) (i32.const 1)) + +(assert_return (invoke "rotr" (i32.const 0xb0c1d2e3) (i32.const 0x0005)) (i32.const 0x1d860e97)) +(assert_return (invoke "rotr" (i32.const 0xb0c1d2e3) (i32.const 0xff05)) (i32.const 0x1d860e97)) +(assert_return (invoke "rotr" (i32.const 0xff00cc00) (i32.const 1)) (i32.const 0x7f806600)) +(assert_return (invoke "rotr" (i32.const 0x00080000) (i32.const 4)) (i32.const 0x00008000)) +(assert_return (invoke "rotr" (i32.const 0x769abcdf) (i32.const 0xffffffed)) (i32.const 0xe6fbb4d5)) +(assert_return (invoke "rotr" (i32.const 1) (i32.const 1)) (i32.const 0x80000000)) +(assert_return (invoke "rotr" (i32.const 0x80000000) (i32.const 31)) (i32.const 1)) + +(assert_return (invoke "clz" (i32.const 0xffffffff)) (i32.const 0)) +(assert_return (invoke "clz" (i32.const 0)) (i32.const 32)) +(assert_return (invoke "clz" (i32.const 0x00008000)) (i32.const 16)) +(assert_return (invoke "clz" (i32.const 0xff)) (i32.const 24)) +(assert_return (invoke "clz" (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "clz" (i32.const 1)) (i32.const 31)) +(assert_return (invoke "clz" (i32.const 2)) (i32.const 30)) +(assert_return (invoke "clz" (i32.const 0x7fffffff)) (i32.const 1)) + +(assert_return (invoke "ctz" (i32.const -1)) (i32.const 0)) +(assert_return (invoke "ctz" (i32.const 0)) (i32.const 32)) +(assert_return (invoke "ctz" (i32.const 0x00008000)) (i32.const 15)) +(assert_return (invoke "ctz" (i32.const 0x00010000)) (i32.const 16)) +(assert_return (invoke "ctz" (i32.const 0x80000000)) (i32.const 31)) +(assert_return (invoke "ctz" (i32.const 0x7fffffff)) (i32.const 0)) + +(assert_return (invoke "popcnt" (i32.const -1)) (i32.const 32)) +(assert_return (invoke "popcnt" (i32.const 0)) (i32.const 0)) +(assert_return (invoke "popcnt" (i32.const 0x00008000)) (i32.const 1)) +(assert_return (invoke "popcnt" (i32.const 0x80008000)) (i32.const 2)) +(assert_return (invoke "popcnt" (i32.const 0x7fffffff)) (i32.const 31)) +(assert_return (invoke "popcnt" (i32.const 0xAAAAAAAA)) (i32.const 16)) +(assert_return (invoke "popcnt" (i32.const 0x55555555)) (i32.const 16)) +(assert_return (invoke "popcnt" (i32.const 0xDEADBEEF)) (i32.const 24)) + +(assert_return (invoke "eqz" (i32.const 0)) (i32.const 1)) +(assert_return (invoke "eqz" (i32.const 1)) (i32.const 0)) +(assert_return (invoke "eqz" (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "eqz" (i32.const 0x7fffffff)) (i32.const 0)) + +(assert_return (invoke "eq" (i32.const 0) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "eq" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "eq" (i32.const -1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "eq" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "eq" (i32.const -1) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "eq" (i32.const 1) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "eq" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "eq" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "eq" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "eq" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "eq" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) + +(assert_return (invoke "ne" (i32.const 0) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "ne" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "ne" (i32.const -1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "ne" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "ne" (i32.const -1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "ne" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "ne" (i32.const 0) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "ne" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "ne" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "ne" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "ne" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) + +(assert_return (invoke "lt_s" (i32.const 0) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "lt_s" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "lt_s" (i32.const -1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "lt_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "lt_s" (i32.const -1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "lt_s" (i32.const 1) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "lt_s" (i32.const 0) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "lt_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "lt_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "lt_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) + +(assert_return (invoke "lt_u" (i32.const 0) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const -1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const -1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const 1) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const 0) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "lt_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) + +(assert_return (invoke "le_s" (i32.const 0) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const -1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const -1) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const 1) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "le_s" (i32.const 0) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) + +(assert_return (invoke "le_u" (i32.const 0) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "le_u" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "le_u" (i32.const -1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "le_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "le_u" (i32.const -1) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "le_u" (i32.const 1) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "le_u" (i32.const 0) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "le_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "le_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "le_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) + +(assert_return (invoke "gt_s" (i32.const 0) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const -1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const -1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "gt_s" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) + +(assert_return (invoke "gt_u" (i32.const 0) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "gt_u" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "gt_u" (i32.const -1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "gt_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "gt_u" (i32.const -1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "gt_u" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "gt_u" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "gt_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "gt_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "gt_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) + +(assert_return (invoke "ge_s" (i32.const 0) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "ge_s" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "ge_s" (i32.const -1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "ge_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "ge_s" (i32.const -1) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "ge_s" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "ge_s" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "ge_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "ge_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "ge_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) + +(assert_return (invoke "ge_u" (i32.const 0) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const -1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const -1) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "ge_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) diff --git a/src/binaryen/test/spec/i64.load64_s.fail.wast b/src/binaryen/test/spec/i64.load64_s.fail.wast new file mode 100644 index 0000000000..335bac35ab --- /dev/null +++ b/src/binaryen/test/spec/i64.load64_s.fail.wast @@ -0,0 +1 @@ +(module (memory 1) (func (param i32) (result i64) (i64.load64_s (get_local 0)))) diff --git a/src/binaryen/test/spec/i64.load64_u.fail.wast b/src/binaryen/test/spec/i64.load64_u.fail.wast new file mode 100644 index 0000000000..b9002e2bf6 --- /dev/null +++ b/src/binaryen/test/spec/i64.load64_u.fail.wast @@ -0,0 +1 @@ +(module (memory 1) (func (param i32) (result i64) (i64.load64_u (get_local 0)))) diff --git a/src/binaryen/test/spec/i64.store64.fail.wast b/src/binaryen/test/spec/i64.store64.fail.wast new file mode 100644 index 0000000000..918761f683 --- /dev/null +++ b/src/binaryen/test/spec/i64.store64.fail.wast @@ -0,0 +1 @@ +(module (memory 1) (func (param i32) (param i64) (i64.store64 (get_local 0) (get_local 1)))) diff --git a/src/binaryen/test/spec/i64.wast b/src/binaryen/test/spec/i64.wast new file mode 100644 index 0000000000..54b28c4609 --- /dev/null +++ b/src/binaryen/test/spec/i64.wast @@ -0,0 +1,406 @@ +;; i64 operations + +(module + (func (export "add") (param $x i64) (param $y i64) (result i64) (i64.add (get_local $x) (get_local $y))) + (func (export "sub") (param $x i64) (param $y i64) (result i64) (i64.sub (get_local $x) (get_local $y))) + (func (export "mul") (param $x i64) (param $y i64) (result i64) (i64.mul (get_local $x) (get_local $y))) + (func (export "div_s") (param $x i64) (param $y i64) (result i64) (i64.div_s (get_local $x) (get_local $y))) + (func (export "div_u") (param $x i64) (param $y i64) (result i64) (i64.div_u (get_local $x) (get_local $y))) + (func (export "rem_s") (param $x i64) (param $y i64) (result i64) (i64.rem_s (get_local $x) (get_local $y))) + (func (export "rem_u") (param $x i64) (param $y i64) (result i64) (i64.rem_u (get_local $x) (get_local $y))) + (func (export "and") (param $x i64) (param $y i64) (result i64) (i64.and (get_local $x) (get_local $y))) + (func (export "or") (param $x i64) (param $y i64) (result i64) (i64.or (get_local $x) (get_local $y))) + (func (export "xor") (param $x i64) (param $y i64) (result i64) (i64.xor (get_local $x) (get_local $y))) + (func (export "shl") (param $x i64) (param $y i64) (result i64) (i64.shl (get_local $x) (get_local $y))) + (func (export "shr_s") (param $x i64) (param $y i64) (result i64) (i64.shr_s (get_local $x) (get_local $y))) + (func (export "shr_u") (param $x i64) (param $y i64) (result i64) (i64.shr_u (get_local $x) (get_local $y))) + (func (export "rotl") (param $x i64) (param $y i64) (result i64) (i64.rotl (get_local $x) (get_local $y))) + (func (export "rotr") (param $x i64) (param $y i64) (result i64) (i64.rotr (get_local $x) (get_local $y))) + (func (export "clz") (param $x i64) (result i64) (i64.clz (get_local $x))) + (func (export "ctz") (param $x i64) (result i64) (i64.ctz (get_local $x))) + (func (export "popcnt") (param $x i64) (result i64) (i64.popcnt (get_local $x))) + (func (export "eqz") (param $x i64) (result i32) (i64.eqz (get_local $x))) + (func (export "eq") (param $x i64) (param $y i64) (result i32) (i64.eq (get_local $x) (get_local $y))) + (func (export "ne") (param $x i64) (param $y i64) (result i32) (i64.ne (get_local $x) (get_local $y))) + (func (export "lt_s") (param $x i64) (param $y i64) (result i32) (i64.lt_s (get_local $x) (get_local $y))) + (func (export "lt_u") (param $x i64) (param $y i64) (result i32) (i64.lt_u (get_local $x) (get_local $y))) + (func (export "le_s") (param $x i64) (param $y i64) (result i32) (i64.le_s (get_local $x) (get_local $y))) + (func (export "le_u") (param $x i64) (param $y i64) (result i32) (i64.le_u (get_local $x) (get_local $y))) + (func (export "gt_s") (param $x i64) (param $y i64) (result i32) (i64.gt_s (get_local $x) (get_local $y))) + (func (export "gt_u") (param $x i64) (param $y i64) (result i32) (i64.gt_u (get_local $x) (get_local $y))) + (func (export "ge_s") (param $x i64) (param $y i64) (result i32) (i64.ge_s (get_local $x) (get_local $y))) + (func (export "ge_u") (param $x i64) (param $y i64) (result i32) (i64.ge_u (get_local $x) (get_local $y))) +) + +(assert_return (invoke "add" (i64.const 1) (i64.const 1)) (i64.const 2)) +(assert_return (invoke "add" (i64.const 1) (i64.const 0)) (i64.const 1)) +(assert_return (invoke "add" (i64.const -1) (i64.const -1)) (i64.const -2)) +(assert_return (invoke "add" (i64.const -1) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "add" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x8000000000000000)) +(assert_return (invoke "add" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x7fffffffffffffff)) +(assert_return (invoke "add" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i64.const 0)) +(assert_return (invoke "add" (i64.const 0x3fffffff) (i64.const 1)) (i64.const 0x40000000)) + +(assert_return (invoke "sub" (i64.const 1) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "sub" (i64.const 1) (i64.const 0)) (i64.const 1)) +(assert_return (invoke "sub" (i64.const -1) (i64.const -1)) (i64.const 0)) +(assert_return (invoke "sub" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x8000000000000000)) +(assert_return (invoke "sub" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0x7fffffffffffffff)) +(assert_return (invoke "sub" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i64.const 0)) +(assert_return (invoke "sub" (i64.const 0x3fffffff) (i64.const -1)) (i64.const 0x40000000)) + +(assert_return (invoke "mul" (i64.const 1) (i64.const 1)) (i64.const 1)) +(assert_return (invoke "mul" (i64.const 1) (i64.const 0)) (i64.const 0)) +(assert_return (invoke "mul" (i64.const -1) (i64.const -1)) (i64.const 1)) +(assert_return (invoke "mul" (i64.const 0x1000000000000000) (i64.const 4096)) (i64.const 0)) +(assert_return (invoke "mul" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0)) +(assert_return (invoke "mul" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x8000000000000000)) +(assert_return (invoke "mul" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x8000000000000001)) +(assert_return (invoke "mul" (i64.const 0x0123456789abcdef) (i64.const 0xfedcba9876543210)) (i64.const 0x2236d88fe5618cf0)) + +(assert_trap (invoke "div_s" (i64.const 1) (i64.const 0)) "integer divide by zero") +(assert_trap (invoke "div_s" (i64.const 0) (i64.const 0)) "integer divide by zero") +(assert_trap (invoke "div_s" (i64.const 0x8000000000000000) (i64.const -1)) "integer overflow") +(assert_return (invoke "div_s" (i64.const 1) (i64.const 1)) (i64.const 1)) +(assert_return (invoke "div_s" (i64.const 0) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "div_s" (i64.const -1) (i64.const -1)) (i64.const 1)) +(assert_return (invoke "div_s" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0xc000000000000000)) +(assert_return (invoke "div_s" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 0xffdf3b645a1cac09)) +(assert_return (invoke "div_s" (i64.const 5) (i64.const 2)) (i64.const 2)) +(assert_return (invoke "div_s" (i64.const -5) (i64.const 2)) (i64.const -2)) +(assert_return (invoke "div_s" (i64.const 5) (i64.const -2)) (i64.const -2)) +(assert_return (invoke "div_s" (i64.const -5) (i64.const -2)) (i64.const 2)) +(assert_return (invoke "div_s" (i64.const 7) (i64.const 3)) (i64.const 2)) +(assert_return (invoke "div_s" (i64.const -7) (i64.const 3)) (i64.const -2)) +(assert_return (invoke "div_s" (i64.const 7) (i64.const -3)) (i64.const -2)) +(assert_return (invoke "div_s" (i64.const -7) (i64.const -3)) (i64.const 2)) +(assert_return (invoke "div_s" (i64.const 11) (i64.const 5)) (i64.const 2)) +(assert_return (invoke "div_s" (i64.const 17) (i64.const 7)) (i64.const 2)) + +(assert_trap (invoke "div_u" (i64.const 1) (i64.const 0)) "integer divide by zero") +(assert_trap (invoke "div_u" (i64.const 0) (i64.const 0)) "integer divide by zero") +(assert_return (invoke "div_u" (i64.const 1) (i64.const 1)) (i64.const 1)) +(assert_return (invoke "div_u" (i64.const 0) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "div_u" (i64.const -1) (i64.const -1)) (i64.const 1)) +(assert_return (invoke "div_u" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0)) +(assert_return (invoke "div_u" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0x4000000000000000)) +(assert_return (invoke "div_u" (i64.const 0x8ff00ff00ff00ff0) (i64.const 0x100000001)) (i64.const 0x8ff00fef)) +(assert_return (invoke "div_u" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 0x20c49ba5e353f7)) +(assert_return (invoke "div_u" (i64.const 5) (i64.const 2)) (i64.const 2)) +(assert_return (invoke "div_u" (i64.const -5) (i64.const 2)) (i64.const 0x7ffffffffffffffd)) +(assert_return (invoke "div_u" (i64.const 5) (i64.const -2)) (i64.const 0)) +(assert_return (invoke "div_u" (i64.const -5) (i64.const -2)) (i64.const 0)) +(assert_return (invoke "div_u" (i64.const 7) (i64.const 3)) (i64.const 2)) +(assert_return (invoke "div_u" (i64.const 11) (i64.const 5)) (i64.const 2)) +(assert_return (invoke "div_u" (i64.const 17) (i64.const 7)) (i64.const 2)) + +(assert_trap (invoke "rem_s" (i64.const 1) (i64.const 0)) "integer divide by zero") +(assert_trap (invoke "rem_s" (i64.const 0) (i64.const 0)) "integer divide by zero") +(assert_return (invoke "rem_s" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0)) +(assert_return (invoke "rem_s" (i64.const 1) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "rem_s" (i64.const 0) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "rem_s" (i64.const -1) (i64.const -1)) (i64.const 0)) +(assert_return (invoke "rem_s" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0)) +(assert_return (invoke "rem_s" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0)) +(assert_return (invoke "rem_s" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const -807)) +(assert_return (invoke "rem_s" (i64.const 5) (i64.const 2)) (i64.const 1)) +(assert_return (invoke "rem_s" (i64.const -5) (i64.const 2)) (i64.const -1)) +(assert_return (invoke "rem_s" (i64.const 5) (i64.const -2)) (i64.const 1)) +(assert_return (invoke "rem_s" (i64.const -5) (i64.const -2)) (i64.const -1)) +(assert_return (invoke "rem_s" (i64.const 7) (i64.const 3)) (i64.const 1)) +(assert_return (invoke "rem_s" (i64.const -7) (i64.const 3)) (i64.const -1)) +(assert_return (invoke "rem_s" (i64.const 7) (i64.const -3)) (i64.const 1)) +(assert_return (invoke "rem_s" (i64.const -7) (i64.const -3)) (i64.const -1)) +(assert_return (invoke "rem_s" (i64.const 11) (i64.const 5)) (i64.const 1)) +(assert_return (invoke "rem_s" (i64.const 17) (i64.const 7)) (i64.const 3)) + +(assert_trap (invoke "rem_u" (i64.const 1) (i64.const 0)) "integer divide by zero") +(assert_trap (invoke "rem_u" (i64.const 0) (i64.const 0)) "integer divide by zero") +(assert_return (invoke "rem_u" (i64.const 1) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "rem_u" (i64.const 0) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "rem_u" (i64.const -1) (i64.const -1)) (i64.const 0)) +(assert_return (invoke "rem_u" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x8000000000000000)) +(assert_return (invoke "rem_u" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0)) +(assert_return (invoke "rem_u" (i64.const 0x8ff00ff00ff00ff0) (i64.const 0x100000001)) (i64.const 0x80000001)) +(assert_return (invoke "rem_u" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 809)) +(assert_return (invoke "rem_u" (i64.const 5) (i64.const 2)) (i64.const 1)) +(assert_return (invoke "rem_u" (i64.const -5) (i64.const 2)) (i64.const 1)) +(assert_return (invoke "rem_u" (i64.const 5) (i64.const -2)) (i64.const 5)) +(assert_return (invoke "rem_u" (i64.const -5) (i64.const -2)) (i64.const -5)) +(assert_return (invoke "rem_u" (i64.const 7) (i64.const 3)) (i64.const 1)) +(assert_return (invoke "rem_u" (i64.const 11) (i64.const 5)) (i64.const 1)) +(assert_return (invoke "rem_u" (i64.const 17) (i64.const 7)) (i64.const 3)) + +(assert_return (invoke "and" (i64.const 1) (i64.const 0)) (i64.const 0)) +(assert_return (invoke "and" (i64.const 0) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "and" (i64.const 1) (i64.const 1)) (i64.const 1)) +(assert_return (invoke "and" (i64.const 0) (i64.const 0)) (i64.const 0)) +(assert_return (invoke "and" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const 0)) +(assert_return (invoke "and" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x7fffffffffffffff)) +(assert_return (invoke "and" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0xf0f0f0f0)) +(assert_return (invoke "and" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0xffffffffffffffff)) + +(assert_return (invoke "or" (i64.const 1) (i64.const 0)) (i64.const 1)) +(assert_return (invoke "or" (i64.const 0) (i64.const 1)) (i64.const 1)) +(assert_return (invoke "or" (i64.const 1) (i64.const 1)) (i64.const 1)) +(assert_return (invoke "or" (i64.const 0) (i64.const 0)) (i64.const 0)) +(assert_return (invoke "or" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const -1)) +(assert_return (invoke "or" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0x8000000000000000)) +(assert_return (invoke "or" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0xffffffff)) +(assert_return (invoke "or" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0xffffffffffffffff)) + +(assert_return (invoke "xor" (i64.const 1) (i64.const 0)) (i64.const 1)) +(assert_return (invoke "xor" (i64.const 0) (i64.const 1)) (i64.const 1)) +(assert_return (invoke "xor" (i64.const 1) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "xor" (i64.const 0) (i64.const 0)) (i64.const 0)) +(assert_return (invoke "xor" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const -1)) +(assert_return (invoke "xor" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0x8000000000000000)) +(assert_return (invoke "xor" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const 0x7fffffffffffffff)) +(assert_return (invoke "xor" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const 0x8000000000000000)) +(assert_return (invoke "xor" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0x0f0f0f0f)) +(assert_return (invoke "xor" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0)) + +(assert_return (invoke "shl" (i64.const 1) (i64.const 1)) (i64.const 2)) +(assert_return (invoke "shl" (i64.const 1) (i64.const 0)) (i64.const 1)) +(assert_return (invoke "shl" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0xfffffffffffffffe)) +(assert_return (invoke "shl" (i64.const 0xffffffffffffffff) (i64.const 1)) (i64.const 0xfffffffffffffffe)) +(assert_return (invoke "shl" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "shl" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x8000000000000000)) +(assert_return (invoke "shl" (i64.const 1) (i64.const 63)) (i64.const 0x8000000000000000)) +(assert_return (invoke "shl" (i64.const 1) (i64.const 64)) (i64.const 1)) +(assert_return (invoke "shl" (i64.const 1) (i64.const 65)) (i64.const 2)) +(assert_return (invoke "shl" (i64.const 1) (i64.const -1)) (i64.const 0x8000000000000000)) +(assert_return (invoke "shl" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0x8000000000000000)) + +(assert_return (invoke "shr_s" (i64.const 1) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "shr_s" (i64.const 1) (i64.const 0)) (i64.const 1)) +(assert_return (invoke "shr_s" (i64.const -1) (i64.const 1)) (i64.const -1)) +(assert_return (invoke "shr_s" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x3fffffffffffffff)) +(assert_return (invoke "shr_s" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0xc000000000000000)) +(assert_return (invoke "shr_s" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x2000000000000000)) +(assert_return (invoke "shr_s" (i64.const 1) (i64.const 64)) (i64.const 1)) +(assert_return (invoke "shr_s" (i64.const 1) (i64.const 65)) (i64.const 0)) +(assert_return (invoke "shr_s" (i64.const 1) (i64.const -1)) (i64.const 0)) +(assert_return (invoke "shr_s" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0)) +(assert_return (invoke "shr_s" (i64.const 1) (i64.const 0x8000000000000000)) (i64.const 1)) +(assert_return (invoke "shr_s" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const -1)) +(assert_return (invoke "shr_s" (i64.const -1) (i64.const 64)) (i64.const -1)) +(assert_return (invoke "shr_s" (i64.const -1) (i64.const 65)) (i64.const -1)) +(assert_return (invoke "shr_s" (i64.const -1) (i64.const -1)) (i64.const -1)) +(assert_return (invoke "shr_s" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const -1)) +(assert_return (invoke "shr_s" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const -1)) + +(assert_return (invoke "shr_u" (i64.const 1) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "shr_u" (i64.const 1) (i64.const 0)) (i64.const 1)) +(assert_return (invoke "shr_u" (i64.const -1) (i64.const 1)) (i64.const 0x7fffffffffffffff)) +(assert_return (invoke "shr_u" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x3fffffffffffffff)) +(assert_return (invoke "shr_u" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0x4000000000000000)) +(assert_return (invoke "shr_u" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x2000000000000000)) +(assert_return (invoke "shr_u" (i64.const 1) (i64.const 64)) (i64.const 1)) +(assert_return (invoke "shr_u" (i64.const 1) (i64.const 65)) (i64.const 0)) +(assert_return (invoke "shr_u" (i64.const 1) (i64.const -1)) (i64.const 0)) +(assert_return (invoke "shr_u" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0)) +(assert_return (invoke "shr_u" (i64.const 1) (i64.const 0x8000000000000000)) (i64.const 1)) +(assert_return (invoke "shr_u" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const 1)) +(assert_return (invoke "shr_u" (i64.const -1) (i64.const 64)) (i64.const -1)) +(assert_return (invoke "shr_u" (i64.const -1) (i64.const 65)) (i64.const 0x7fffffffffffffff)) +(assert_return (invoke "shr_u" (i64.const -1) (i64.const -1)) (i64.const 1)) +(assert_return (invoke "shr_u" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const 1)) +(assert_return (invoke "shr_u" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const -1)) + +(assert_return (invoke "rotl" (i64.const 1) (i64.const 1)) (i64.const 2)) +(assert_return (invoke "rotl" (i64.const 1) (i64.const 0)) (i64.const 1)) +(assert_return (invoke "rotl" (i64.const -1) (i64.const 1)) (i64.const -1)) +(assert_return (invoke "rotl" (i64.const 0xabd1234ef567809c) (i64.const 63)) (i64.const 0x55e891a77ab3c04e)) +(assert_return (invoke "rotl" (i64.const 0xabd1234ef567809c) (i64.const 0x800000000000003f)) (i64.const 0x55e891a77ab3c04e)) +(assert_return (invoke "rotl" (i64.const 1) (i64.const 63)) (i64.const 0x8000000000000000)) +(assert_return (invoke "rotl" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 1)) + +(assert_return (invoke "rotr" (i64.const 1) (i64.const 1)) (i64.const 0x8000000000000000)) +(assert_return (invoke "rotr" (i64.const 1) (i64.const 0)) (i64.const 1)) +(assert_return (invoke "rotr" (i64.const -1) (i64.const 1)) (i64.const -1)) +(assert_return (invoke "rotr" (i64.const 0xabcd1234ef567809) (i64.const 53)) (i64.const 0x6891a77ab3c04d5e)) +(assert_return (invoke "rotr" (i64.const 0xabcd1234ef567809) (i64.const 0x35)) (i64.const 0x6891a77ab3c04d5e)) +(assert_return (invoke "rotr" (i64.const 0xabcd1234ef567809) (i64.const 0xf5)) (i64.const 0x6891a77ab3c04d5e)) +(assert_return (invoke "rotr" (i64.const 1) (i64.const 1)) (i64.const 0x8000000000000000)) +(assert_return (invoke "rotr" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const 1)) + +(assert_return (invoke "clz" (i64.const 0xffffffffffffffff)) (i64.const 0)) +(assert_return (invoke "clz" (i64.const 0)) (i64.const 64)) +(assert_return (invoke "clz" (i64.const 0x00008000)) (i64.const 48)) +(assert_return (invoke "clz" (i64.const 0xff)) (i64.const 56)) +(assert_return (invoke "clz" (i64.const 0x8000000000000000)) (i64.const 0)) +(assert_return (invoke "clz" (i64.const 1)) (i64.const 63)) +(assert_return (invoke "clz" (i64.const 2)) (i64.const 62)) +(assert_return (invoke "clz" (i64.const 0x7fffffffffffffff)) (i64.const 1)) + +(assert_return (invoke "ctz" (i64.const -1)) (i64.const 0)) +(assert_return (invoke "ctz" (i64.const 0)) (i64.const 64)) +(assert_return (invoke "ctz" (i64.const 0x00008000)) (i64.const 15)) +(assert_return (invoke "ctz" (i64.const 0x00010000)) (i64.const 16)) +(assert_return (invoke "ctz" (i64.const 0x8000000000000000)) (i64.const 63)) +(assert_return (invoke "ctz" (i64.const 0x7fffffffffffffff)) (i64.const 0)) + +(assert_return (invoke "popcnt" (i64.const -1)) (i64.const 64)) +(assert_return (invoke "popcnt" (i64.const 0)) (i64.const 0)) +(assert_return (invoke "popcnt" (i64.const 0x00008000)) (i64.const 1)) +(assert_return (invoke "popcnt" (i64.const 0x8000800080008000)) (i64.const 4)) +(assert_return (invoke "popcnt" (i64.const 0x7fffffffffffffff)) (i64.const 63)) +(assert_return (invoke "popcnt" (i64.const 0xAAAAAAAA55555555)) (i64.const 32)) +(assert_return (invoke "popcnt" (i64.const 0x99999999AAAAAAAA)) (i64.const 32)) +(assert_return (invoke "popcnt" (i64.const 0xDEADBEEFDEADBEEF)) (i64.const 48)) + +(assert_return (invoke "eqz" (i64.const 0)) (i32.const 1)) +(assert_return (invoke "eqz" (i64.const 1)) (i32.const 0)) +(assert_return (invoke "eqz" (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "eqz" (i64.const 0x7fffffffffffffff)) (i32.const 0)) + +(assert_return (invoke "eq" (i64.const 0) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "eq" (i64.const 1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "eq" (i64.const -1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "eq" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "eq" (i64.const -1) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "eq" (i64.const 1) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "eq" (i64.const 0) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "eq" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "eq" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "eq" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) + +(assert_return (invoke "ne" (i64.const 0) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "ne" (i64.const 1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "ne" (i64.const -1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "ne" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "ne" (i64.const -1) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "ne" (i64.const 1) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "ne" (i64.const 0) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "ne" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "ne" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "ne" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) + +(assert_return (invoke "lt_s" (i64.const 0) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "lt_s" (i64.const 1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "lt_s" (i64.const -1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "lt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "lt_s" (i64.const -1) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "lt_s" (i64.const 1) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "lt_s" (i64.const 0) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "lt_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "lt_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "lt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) + +(assert_return (invoke "lt_u" (i64.const 0) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const 1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const -1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const -1) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const 1) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const 0) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "lt_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) + +(assert_return (invoke "le_s" (i64.const 0) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const 1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const -1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const -1) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const 1) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "le_s" (i64.const 0) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) + +(assert_return (invoke "le_u" (i64.const 0) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "le_u" (i64.const 1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "le_u" (i64.const -1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "le_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "le_u" (i64.const -1) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "le_u" (i64.const 1) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "le_u" (i64.const 0) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "le_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "le_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "le_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) + +(assert_return (invoke "gt_s" (i64.const 0) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const 1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const -1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const -1) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const 1) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "gt_s" (i64.const 0) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) + +(assert_return (invoke "gt_u" (i64.const 0) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "gt_u" (i64.const 1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "gt_u" (i64.const -1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "gt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "gt_u" (i64.const -1) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "gt_u" (i64.const 1) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "gt_u" (i64.const 0) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "gt_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "gt_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "gt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) + +(assert_return (invoke "ge_s" (i64.const 0) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "ge_s" (i64.const 1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "ge_s" (i64.const -1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "ge_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "ge_s" (i64.const -1) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "ge_s" (i64.const 1) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "ge_s" (i64.const 0) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "ge_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "ge_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "ge_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) + +(assert_return (invoke "ge_u" (i64.const 0) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const 1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const -1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const -1) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const 1) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const 0) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "ge_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) diff --git a/src/binaryen/test/spec/import-after-func.fail.wast b/src/binaryen/test/spec/import-after-func.fail.wast new file mode 100644 index 0000000000..ece33a72c9 --- /dev/null +++ b/src/binaryen/test/spec/import-after-func.fail.wast @@ -0,0 +1 @@ +(module (func) (import "" "" (memory 0))) diff --git a/src/binaryen/test/spec/import-after-global.fail.wast b/src/binaryen/test/spec/import-after-global.fail.wast new file mode 100644 index 0000000000..09cece1a01 --- /dev/null +++ b/src/binaryen/test/spec/import-after-global.fail.wast @@ -0,0 +1 @@ +(module (global i64) (import "" "" (table 0 anyfunc))) diff --git a/src/binaryen/test/spec/import-after-memory.fail.wast b/src/binaryen/test/spec/import-after-memory.fail.wast new file mode 100644 index 0000000000..fbe582a934 --- /dev/null +++ b/src/binaryen/test/spec/import-after-memory.fail.wast @@ -0,0 +1 @@ +(module (memory 0) (import "" "" (global i32))) diff --git a/src/binaryen/test/spec/import-after-table.fail.wast b/src/binaryen/test/spec/import-after-table.fail.wast new file mode 100644 index 0000000000..bcd747a997 --- /dev/null +++ b/src/binaryen/test/spec/import-after-table.fail.wast @@ -0,0 +1 @@ +(module (table 0 anyfunc) (import "" "" (func))) diff --git a/src/binaryen/test/spec/imports.wast b/src/binaryen/test/spec/imports.wast new file mode 100644 index 0000000000..f7805ef2b7 --- /dev/null +++ b/src/binaryen/test/spec/imports.wast @@ -0,0 +1,224 @@ +;; Functions + +(module + (import "spectest" "print" (func (param i32))) + (func (import "spectest" "print") (param i64)) + + (import "spectest" "print" (func $print_i32 (param i32))) + (import "spectest" "print" (func $print_i64 (param i64))) + (import "spectest" "print" (func $print_i32_f32 (param i32 f32))) + (import "spectest" "print" (func $print_i64_f64 (param i64 f64))) + + (func $print_i32-2 (import "spectest" "print") (param i32)) + (func $print_i64-2 (import "spectest" "print") (param i64)) + + (func (export "print32") (param $i i32) + (call 0 (get_local $i)) + (call $print_i32_f32 + (i32.add (get_local $i) (i32.const 1)) + (f32.const 42) + ) + (call $print_i32 (get_local $i)) + (call $print_i32-2 (get_local $i)) + ) + + (func (export "print64") (param $i i64) + (call 1 (get_local $i)) + (call $print_i64_f64 + (i64.add (get_local $i) (i64.const 1)) + (f64.const 53) + ) + (call $print_i64 (get_local $i)) + (call $print_i64-2 (get_local $i)) + ) +) + +(assert_return (invoke "print32" (i32.const 13))) +(assert_return (invoke "print64" (i64.const 24))) + +(assert_unlinkable + (module (import "spectest" "unknown" (func))) + "unknown import" +) +(assert_unlinkable + (module (import "spectest" "table" (func))) + "type mismatch" +) + +(assert_unlinkable + (module (import "spectest" "print" (func)) (table anyfunc (elem 0))) + "invalid use of host function" +) + + +;; Globals + +(module + (import "spectest" "global" (global i32)) + (global (import "spectest" "global") i32) + + (import "spectest" "global" (global $x i32)) + (global $y (import "spectest" "global") i32) + + (func (export "get-0") (result i32) (get_global 0)) + (func (export "get-1") (result i32) (get_global 1)) + (func (export "get-x") (result i32) (get_global $x)) + (func (export "get-y") (result i32) (get_global $y)) + + ;; TODO: mutable globals + ;; (func (export "set-0") (param i32) (set_global 0 (get_local 0))) + ;; (func (export "set-1") (param i32) (set_global 1 (get_local 0))) + ;; (func (export "set-x") (param i32) (set_global $x (get_local 0))) + ;; (func (export "set-y") (param i32) (set_global $y (get_local 0))) +) + +(assert_return (invoke "get-0") (i32.const 666)) +(assert_return (invoke "get-1") (i32.const 666)) +(assert_return (invoke "get-x") (i32.const 666)) +(assert_return (invoke "get-y") (i32.const 666)) + +(assert_unlinkable + (module (import "spectest" "unknown" (global i32))) + "unknown import" +) +(assert_unlinkable + (module (import "spectest" "print" (global i32))) + "type mismatch" +) + +(module (import "spectest" "global" (global i64))) +(module (import "spectest" "global" (global f32))) +(module (import "spectest" "global" (global f64))) + + +;; Tables + +(module + (type (func (result i32))) + (import "spectest" "table" (table 10 20 anyfunc)) + (elem 0 (i32.const 1) $f $g) + + (func (export "call") (param i32) (result i32) (call_indirect (type 0) (get_local 0))) + (func $f (result i32) (i32.const 11)) + (func $g (result i32) (i32.const 22)) +) + +(assert_trap (invoke "call" (i32.const 0)) "uninitialized element") +(assert_return (invoke "call" (i32.const 1)) (i32.const 11)) +(assert_return (invoke "call" (i32.const 2)) (i32.const 22)) +(assert_trap (invoke "call" (i32.const 3)) "uninitialized element") +(assert_trap (invoke "call" (i32.const 100)) "undefined element") + + +(module + (type (func (result i32))) + (table (import "spectest" "table") 10 20 anyfunc) + (elem 0 (i32.const 1) $f $g) + + (func (export "call") (param i32) (result i32) (call_indirect (type 0) (get_local 0))) + (func $f (result i32) (i32.const 11)) + (func $g (result i32) (i32.const 22)) +) + +(assert_trap (invoke "call" (i32.const 0)) "uninitialized element") +(assert_return (invoke "call" (i32.const 1)) (i32.const 11)) +(assert_return (invoke "call" (i32.const 2)) (i32.const 22)) +(assert_trap (invoke "call" (i32.const 3)) "uninitialized element") +(assert_trap (invoke "call" (i32.const 100)) "undefined element") + + +(assert_invalid + (module (import "" "" (table 10 anyfunc)) (import "" "" (table 10 anyfunc))) + "multiple tables" +) +(assert_invalid + (module (import "" "" (table 10 anyfunc)) (table 10 anyfunc)) + "multiple tables" +) +(assert_invalid + (module (table 10 anyfunc) (table 10 anyfunc)) + "multiple tables" +) + +(assert_unlinkable + (module (import "spectest" "unknown" (table 10 anyfunc))) + "unknown import" +) +(assert_unlinkable + (module (import "spectest" "print" (table 10 anyfunc))) + "type mismatch" +) +(assert_unlinkable + (module (import "spectest" "table" (table 12 anyfunc))) + "actual size smaller than declared" +) +(assert_unlinkable + (module (import "spectest" "table" (table 10 15 anyfunc))) + "maximum size larger than declared" +) + + +;; Memories + +(module + (import "spectest" "memory" (memory 1 2)) + (data 0 (i32.const 10) "\10") + + (func (export "load") (param i32) (result i32) (i32.load (get_local 0))) +) + +(assert_return (invoke "load" (i32.const 0)) (i32.const 0)) +(assert_return (invoke "load" (i32.const 10)) (i32.const 16)) +(assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000)) +(assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access") + +(module + (memory (import "spectest" "memory") 1 2) + (data 0 (i32.const 10) "\10") + + (func (export "load") (param i32) (result i32) (i32.load (get_local 0))) +) +(assert_return (invoke "load" (i32.const 0)) (i32.const 0)) +(assert_return (invoke "load" (i32.const 10)) (i32.const 16)) +(assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000)) +(assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access") + +(assert_invalid + (module (import "" "" (memory 1)) (import "" "" (memory 1))) + "multiple memories" +) +(assert_invalid + (module (import "" "" (memory 1)) (memory 0)) + "multiple memories" +) +(assert_invalid + (module (memory 0) (memory 0)) + "multiple memories" +) + +(assert_unlinkable + (module (import "spectest" "unknown" (memory 1))) + "unknown import" +) +(assert_unlinkable + (module (import "spectest" "print" (memory 1))) + "type mismatch" +) +(assert_unlinkable + (module (import "spectest" "memory" (memory 2))) + "actual size smaller than declared" +) +(assert_unlinkable + (module (import "spectest" "memory" (memory 1 1))) + "maximum size larger than declared" +) + +(module + (import "spectest" "memory" (memory 0 3)) ;; actual has max size 2 + (func (export "grow") (param i32) (result i32) (grow_memory (get_local 0))) +) +(assert_return (invoke "grow" (i32.const 0)) (i32.const 1)) +(assert_return (invoke "grow" (i32.const 1)) (i32.const 1)) +(assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) +(assert_return (invoke "grow" (i32.const 1)) (i32.const -1)) +(assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) diff --git a/src/binaryen/test/spec/int_exprs.wast b/src/binaryen/test/spec/int_exprs.wast new file mode 100644 index 0000000000..d8272fa7f4 --- /dev/null +++ b/src/binaryen/test/spec/int_exprs.wast @@ -0,0 +1,299 @@ +;; Test interesting integer "expressions". These tests contain code +;; patterns which tempt common value-changing optimizations. + +;; Test that x+1>n is not folded to x + +(module + (func (export "i32.no_fold_shl_shr_s") (param $x i32) (result i32) + (i32.shr_s (i32.shl (get_local $x) (i32.const 1)) (i32.const 1))) + (func (export "i32.no_fold_shl_shr_u") (param $x i32) (result i32) + (i32.shr_u (i32.shl (get_local $x) (i32.const 1)) (i32.const 1))) + + (func (export "i64.no_fold_shl_shr_s") (param $x i64) (result i64) + (i64.shr_s (i64.shl (get_local $x) (i64.const 1)) (i64.const 1))) + (func (export "i64.no_fold_shl_shr_u") (param $x i64) (result i64) + (i64.shr_u (i64.shl (get_local $x) (i64.const 1)) (i64.const 1))) +) + +(assert_return (invoke "i32.no_fold_shl_shr_s" (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "i32.no_fold_shl_shr_u" (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "i64.no_fold_shl_shr_s" (i64.const 0x8000000000000000)) (i64.const 0)) +(assert_return (invoke "i64.no_fold_shl_shr_u" (i64.const 0x8000000000000000)) (i64.const 0)) + +;; Test that x>>n<?,./ ") (result f32) (f32.const 0x1.96p+2)) + + ;; Test that we can use names that have special meaning in JS. + (func (export "NaN") (result f32) (f32.const 0x2.01p+2)) + (func (export "Infinity") (result f32) (f32.const 0x2.02p+2)) + (func (export "if") (result f32) (f32.const 0x2.03p+2)) + + ;; Test that we can use common libc names without conflict. + (func (export "malloc") (result f32) (f32.const 0x1.92p+2)) + + ;; Test that we can use some libc hidden names without conflict. + (func (export "_malloc") (result f32) (f32.const 0x1.93p+2)) + (func (export "__malloc") (result f32) (f32.const 0x1.94p+2)) +) + +(assert_return (invoke "") (f32.const 0x1.91p+2)) +(assert_return (invoke "malloc") (f32.const 0x1.92p+2)) +(assert_return (invoke "_malloc") (f32.const 0x1.93p+2)) +(assert_return (invoke "__malloc") (f32.const 0x1.94p+2)) +(assert_return (invoke "~!@#$%^&*()_+`-={}|[]\\:\";'<>?,./ ") (f32.const 0x1.96p+2)) +(assert_return (invoke "0") (f32.const 0x1.97p+2)) +(assert_return (invoke "_") (f32.const 0x1.98p+2)) +(assert_return (invoke "$") (f32.const 0x1.99p+2)) +(assert_return (invoke "@") (f32.const 0x2.00p+2)) +(assert_return (invoke "NaN") (f32.const 0x2.01p+2)) +(assert_return (invoke "Infinity") (f32.const 0x2.02p+2)) +(assert_return (invoke "if") (f32.const 0x2.03p+2)) + +(module + ;; Test that we can use indices instead of names to reference imports, + ;; exports, functions and parameters. + (import "spectest" "print" (func (param i32))) + (func (import "spectest" "print") (param i32)) + (func (param i32) (param i32) + (call 0 (get_local 0)) + (call 1 (get_local 1)) + ) + (export "print32" (func 2)) +) + +(invoke "print32" (i32.const 42) (i32.const 123)) diff --git a/src/binaryen/test/spec/nop.wast b/src/binaryen/test/spec/nop.wast new file mode 100644 index 0000000000..ab83eede26 --- /dev/null +++ b/src/binaryen/test/spec/nop.wast @@ -0,0 +1,260 @@ +;; Test `nop` operator. + +(module + ;; Auxiliary definitions + (func $dummy) + (func $3-ary (param i32 i32 i32) (result i32) + get_local 0 get_local 1 get_local 2 i32.sub i32.add + ) + (memory 1) + + (func (export "as-func-first") (result i32) + (nop) (i32.const 1) + ) + (func (export "as-func-mid") (result i32) + (call $dummy) (nop) (i32.const 2) + ) + (func (export "as-func-last") (result i32) + (call $dummy) (i32.const 3) (nop) + ) + (func (export "as-func-everywhere") (result i32) + (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop) + ) + + (func (export "as-drop-last") (param i32) + (get_local 0) (nop) (drop) + ) + (func (export "as-drop-everywhere") (param i32) + (nop) (nop) (get_local 0) (nop) (nop) (drop) + ) + + (func (export "as-select-mid1") (param i32) (result i32) + (get_local 0) (nop) (get_local 0) (get_local 0) (select) + ) + (func (export "as-select-mid2") (param i32) (result i32) + (get_local 0) (get_local 0) (nop) (get_local 0) (select) + ) + (func (export "as-select-last") (param i32) (result i32) + (get_local 0) (get_local 0) (get_local 0) (nop) (select) + ) + (func (export "as-select-everywhere") (param i32) (result i32) + (nop) (get_local 0) (nop) (nop) (get_local 0) + (nop) (nop) (get_local 0) (nop) (nop) (select) + ) + + (func (export "as-block-first") (result i32) + (block i32 (nop) (i32.const 2)) + ) + (func (export "as-block-mid") (result i32) + (block i32 (call $dummy) (nop) (i32.const 2)) + ) + (func (export "as-block-last") (result i32) + (block i32 (nop) (call $dummy) (i32.const 3) (nop)) + ) + (func (export "as-block-everywhere") (result i32) + (block i32 (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop)) + ) + + (func (export "as-loop-first") (result i32) + (loop i32 (nop) (i32.const 2)) + ) + (func (export "as-loop-mid") (result i32) + (loop i32 (call $dummy) (nop) (i32.const 2)) + ) + (func (export "as-loop-last") (result i32) + (loop i32 (call $dummy) (i32.const 3) (nop)) + ) + (func (export "as-loop-everywhere") (result i32) + (loop i32 (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop)) + ) + + (func (export "as-if-condition") (param i32) + (get_local 0) (nop) (if (then (call $dummy))) + ) + (func (export "as-if-then") (param i32) + (if (get_local 0) (nop) (call $dummy)) + ) + (func (export "as-if-else") (param i32) + (if (get_local 0) (call $dummy) (nop)) + ) + + (func (export "as-br-last") (param i32) (result i32) + (block i32 (get_local 0) (nop) (br 0)) + ) + (func (export "as-br-everywhere") (param i32) (result i32) + (block i32 (nop) (nop) (get_local 0) (nop) (nop) (br 0)) + ) + + (func (export "as-br_if-mid") (param i32) (result i32) + (block i32 (get_local 0) (nop) (get_local 0) (br_if 0)) + ) + (func (export "as-br_if-last") (param i32) (result i32) + (block i32 (get_local 0) (get_local 0) (nop) (br_if 0)) + ) + (func (export "as-br_if-everywhere") (param i32) (result i32) + (block i32 + (nop) (nop) (get_local 0) (nop) (nop) (get_local 0) (nop) (nop) + (br_if 0) + ) + ) + + (func (export "as-br_table-mid") (param i32) (result i32) + (block i32 (get_local 0) (nop) (get_local 0) (br_table 0 0)) + ) + (func (export "as-br_table-last") (param i32) (result i32) + (block i32 (get_local 0) (get_local 0) (nop) (br_table 0 0)) + ) + (func (export "as-br_table-everywhere") (param i32) (result i32) + (block i32 + (nop) (nop) (get_local 0) (nop) (nop) (get_local 0) (nop) (nop) + (br_table 0 0) + ) + ) + + (func (export "as-return-last") (param i32) (result i32) + (get_local 0) (nop) (return) + ) + (func (export "as-return-everywhere") (param i32) (result i32) + (nop) (nop) (get_local 0) (nop) (nop) (return) + ) + + (func (export "as-call-mid1") (param i32 i32 i32) (result i32) + (get_local 0) (nop) (get_local 1) (get_local 2) (call $3-ary) + ) + (func (export "as-call-mid2") (param i32 i32 i32) (result i32) + (get_local 0) (get_local 1) (nop) (get_local 2) (call $3-ary) + ) + (func (export "as-call-last") (param i32 i32 i32) (result i32) + (get_local 0) (get_local 1) (get_local 2) (nop) (call $3-ary) + ) + (func (export "as-call-everywhere") (param i32 i32 i32) (result i32) + (nop) (nop) (get_local 0) (nop) (nop) (get_local 1) + (nop) (nop) (get_local 2) (nop) (nop) (call $3-ary) + ) + + ;; TODO(stack): call_indirect, *_local, load*, store* + + (func (export "as-unary-last") (param i32) (result i32) + (get_local 0) (nop) (i32.ctz) + ) + (func (export "as-unary-everywhere") (param i32) (result i32) + (nop) (nop) (get_local 0) (nop) (nop) (i32.ctz) + ) + + (func (export "as-binary-mid") (param i32) (result i32) + (get_local 0) (nop) (get_local 0) (i32.add) + ) + (func (export "as-binary-last") (param i32) (result i32) + (get_local 0) (get_local 0) (nop) (i32.add) + ) + (func (export "as-binary-everywhere") (param i32) (result i32) + (nop) (get_local 0) (nop) (nop) (get_local 0) (nop) (nop) (i32.add) + ) + + (func (export "as-test-last") (param i32) (result i32) + (get_local 0) (nop) (i32.eqz) + ) + (func (export "as-test-everywhere") (param i32) (result i32) + (nop) (nop) (get_local 0) (nop) (nop) i32.eqz + ) + + (func (export "as-compare-mid") (param i32) (result i32) + (get_local 0) (nop) (get_local 0) (i32.ne) + ) + (func (export "as-compare-last") (param i32) (result i32) + (get_local 0) (get_local 0) (nop) (i32.lt_u) + ) + (func (export "as-compare-everywhere") (param i32) (result i32) + (nop) (get_local 0) (nop) (nop) (get_local 0) (nop) (nop) (i32.le_s) + ) + + (func (export "as-grow_memory-last") (param i32) (result i32) + (get_local 0) (nop) (grow_memory) + ) + (func (export "as-grow_memory-everywhere") (param i32) (result i32) + (nop) (nop) (get_local 0) (nop) (nop) (grow_memory) + ) +) + +(assert_return (invoke "as-func-first") (i32.const 1)) +(assert_return (invoke "as-func-mid") (i32.const 2)) +(assert_return (invoke "as-func-last") (i32.const 3)) +(assert_return (invoke "as-func-everywhere") (i32.const 4)) + +(assert_return (invoke "as-drop-last" (i32.const 0))) +(assert_return (invoke "as-drop-everywhere" (i32.const 0))) + +(assert_return (invoke "as-select-mid1" (i32.const 3)) (i32.const 3)) +(assert_return (invoke "as-select-mid2" (i32.const 3)) (i32.const 3)) +(assert_return (invoke "as-select-last" (i32.const 3)) (i32.const 3)) +(assert_return (invoke "as-select-everywhere" (i32.const 3)) (i32.const 3)) + +(assert_return (invoke "as-block-first") (i32.const 2)) +(assert_return (invoke "as-block-mid") (i32.const 2)) +(assert_return (invoke "as-block-last") (i32.const 3)) +(assert_return (invoke "as-block-everywhere") (i32.const 4)) + +(assert_return (invoke "as-loop-first") (i32.const 2)) +(assert_return (invoke "as-loop-mid") (i32.const 2)) +(assert_return (invoke "as-loop-last") (i32.const 3)) +(assert_return (invoke "as-loop-everywhere") (i32.const 4)) + +(assert_return (invoke "as-if-condition" (i32.const 0))) +(assert_return (invoke "as-if-condition" (i32.const -1))) +(assert_return (invoke "as-if-then" (i32.const 0))) +(assert_return (invoke "as-if-then" (i32.const 4))) +(assert_return (invoke "as-if-else" (i32.const 0))) +(assert_return (invoke "as-if-else" (i32.const 3))) + +(assert_return (invoke "as-br-last" (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-br-everywhere" (i32.const 7)) (i32.const 7)) + +(assert_return (invoke "as-br_if-mid" (i32.const 5)) (i32.const 5)) +(assert_return (invoke "as-br_if-last" (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-br_if-everywhere" (i32.const 7)) (i32.const 7)) + +(assert_return (invoke "as-br_table-mid" (i32.const 5)) (i32.const 5)) +(assert_return (invoke "as-br_table-last" (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-br_table-everywhere" (i32.const 7)) (i32.const 7)) + +(assert_return (invoke "as-return-last" (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-return-everywhere" (i32.const 7)) (i32.const 7)) + +(assert_return (invoke "as-call-mid1" (i32.const 3) (i32.const 1) (i32.const 2)) (i32.const 2)) +(assert_return (invoke "as-call-mid2" (i32.const 0) (i32.const 3) (i32.const 1)) (i32.const 2)) +(assert_return (invoke "as-call-last" (i32.const 10) (i32.const 9) (i32.const -1)) (i32.const 20)) +(assert_return (invoke "as-call-everywhere" (i32.const 2) (i32.const 1) (i32.const 5)) (i32.const -2)) + +(assert_return (invoke "as-unary-last" (i32.const 30)) (i32.const 1)) +(assert_return (invoke "as-unary-everywhere" (i32.const 12)) (i32.const 2)) + +(assert_return (invoke "as-binary-mid" (i32.const 3)) (i32.const 6)) +(assert_return (invoke "as-binary-last" (i32.const 3)) (i32.const 6)) +(assert_return (invoke "as-binary-everywhere" (i32.const 3)) (i32.const 6)) + +(assert_return (invoke "as-test-last" (i32.const 0)) (i32.const 1)) +(assert_return (invoke "as-test-everywhere" (i32.const 0)) (i32.const 1)) + +(assert_return (invoke "as-compare-mid" (i32.const 3)) (i32.const 0)) +(assert_return (invoke "as-compare-last" (i32.const 3)) (i32.const 0)) +(assert_return (invoke "as-compare-everywhere" (i32.const 3)) (i32.const 1)) + +(assert_return (invoke "as-grow_memory-last" (i32.const 2)) (i32.const 1)) +(assert_return (invoke "as-grow_memory-everywhere" (i32.const 12)) (i32.const 3)) + +(assert_invalid + (module (func $type-i32 (result i32) (nop))) + "type mismatch" +) +(assert_invalid + (module (func $type-i64 (result i64) (nop))) + "type mismatch" +) +(assert_invalid + (module (func $type-f32 (result f32) (nop))) + "type mismatch" +) +(assert_invalid + (module (func $type-f64 (result f64) (nop))) + "type mismatch" +) diff --git a/src/binaryen/test/spec/of_string-overflow-hex-u32.fail.wast b/src/binaryen/test/spec/of_string-overflow-hex-u32.fail.wast new file mode 100644 index 0000000000..1323a1f0b0 --- /dev/null +++ b/src/binaryen/test/spec/of_string-overflow-hex-u32.fail.wast @@ -0,0 +1 @@ +(module (func (i32.const 0x100000000))) diff --git a/src/binaryen/test/spec/of_string-overflow-hex-u64.fail.wast b/src/binaryen/test/spec/of_string-overflow-hex-u64.fail.wast new file mode 100644 index 0000000000..d13d6e4b46 --- /dev/null +++ b/src/binaryen/test/spec/of_string-overflow-hex-u64.fail.wast @@ -0,0 +1 @@ +(module (func (i64.const 0x10000000000000000))) diff --git a/src/binaryen/test/spec/of_string-overflow-s32.fail.wast b/src/binaryen/test/spec/of_string-overflow-s32.fail.wast new file mode 100644 index 0000000000..4dda960273 --- /dev/null +++ b/src/binaryen/test/spec/of_string-overflow-s32.fail.wast @@ -0,0 +1 @@ +(module (func (i32.const -2147483649))) diff --git a/src/binaryen/test/spec/of_string-overflow-s64.fail.wast b/src/binaryen/test/spec/of_string-overflow-s64.fail.wast new file mode 100644 index 0000000000..1034b0b001 --- /dev/null +++ b/src/binaryen/test/spec/of_string-overflow-s64.fail.wast @@ -0,0 +1 @@ +(module (func (i64.const -9223372036854775809))) diff --git a/src/binaryen/test/spec/of_string-overflow-u32.fail.wast b/src/binaryen/test/spec/of_string-overflow-u32.fail.wast new file mode 100644 index 0000000000..8f226177bd --- /dev/null +++ b/src/binaryen/test/spec/of_string-overflow-u32.fail.wast @@ -0,0 +1 @@ +(module (func (i32.const 4294967296))) diff --git a/src/binaryen/test/spec/of_string-overflow-u64.fail.wast b/src/binaryen/test/spec/of_string-overflow-u64.fail.wast new file mode 100644 index 0000000000..cfa2c46b58 --- /dev/null +++ b/src/binaryen/test/spec/of_string-overflow-u64.fail.wast @@ -0,0 +1 @@ +(module (func (i64.const 18446744073709551616))) diff --git a/src/binaryen/test/spec/resizing.wast b/src/binaryen/test/spec/resizing.wast new file mode 100644 index 0000000000..c24b7ec1ae --- /dev/null +++ b/src/binaryen/test/spec/resizing.wast @@ -0,0 +1,58 @@ +(module + (memory 0) + + (func (export "load_at_zero") (result i32) (i32.load (i32.const 0))) + (func (export "store_at_zero") (i32.store (i32.const 0) (i32.const 2))) + + (func (export "load_at_page_size") (result i32) (i32.load (i32.const 0x10000))) + (func (export "store_at_page_size") (i32.store (i32.const 0x10000) (i32.const 3))) + + (func (export "grow") (param $sz i32) (result i32) (grow_memory (get_local $sz))) + (func (export "size") (result i32) (current_memory)) +) + +(assert_return (invoke "size") (i32.const 0)) +(assert_trap (invoke "store_at_zero") "out of bounds memory access") +(assert_trap (invoke "load_at_zero") "out of bounds memory access") +(assert_trap (invoke "store_at_page_size") "out of bounds memory access") +(assert_trap (invoke "load_at_page_size") "out of bounds memory access") +(assert_return (invoke "grow" (i32.const 1)) (i32.const 0)) +(assert_return (invoke "size") (i32.const 1)) +(assert_return (invoke "load_at_zero") (i32.const 0)) +(assert_return (invoke "store_at_zero")) +(assert_return (invoke "load_at_zero") (i32.const 2)) +(assert_trap (invoke "store_at_page_size") "out of bounds memory access") +(assert_trap (invoke "load_at_page_size") "out of bounds memory access") +(assert_return (invoke "grow" (i32.const 4)) (i32.const 1)) +(assert_return (invoke "size") (i32.const 5)) +(assert_return (invoke "load_at_zero") (i32.const 2)) +(assert_return (invoke "store_at_zero")) +(assert_return (invoke "load_at_zero") (i32.const 2)) +(assert_return (invoke "load_at_page_size") (i32.const 0)) +(assert_return (invoke "store_at_page_size")) +(assert_return (invoke "load_at_page_size") (i32.const 3)) + + +(module + (memory 0) + (func (export "grow") (param i32) (result i32) (grow_memory (get_local 0))) +) + +(assert_return (invoke "grow" (i32.const 0)) (i32.const 0)) +(assert_return (invoke "grow" (i32.const 1)) (i32.const 0)) +(assert_return (invoke "grow" (i32.const 0)) (i32.const 1)) +(assert_return (invoke "grow" (i32.const 2)) (i32.const 1)) +(assert_return (invoke "grow" (i32.const 10000)) (i32.const 3)) + +(module + (memory 0 10) + (func (export "grow") (param i32) (result i32) (grow_memory (get_local 0))) +) + +(assert_return (invoke "grow" (i32.const 0)) (i32.const 0)) +(assert_return (invoke "grow" (i32.const 1)) (i32.const 0)) +(assert_return (invoke "grow" (i32.const 1)) (i32.const 1)) +(assert_return (invoke "grow" (i32.const 2)) (i32.const 2)) +(assert_return (invoke "grow" (i32.const 6)) (i32.const 4)) +(assert_return (invoke "grow" (i32.const 0)) (i32.const 10)) +(assert_return (invoke "grow" (i32.const 1)) (i32.const -1)) diff --git a/src/binaryen/test/spec/return.wast b/src/binaryen/test/spec/return.wast new file mode 100644 index 0000000000..e47468beec --- /dev/null +++ b/src/binaryen/test/spec/return.wast @@ -0,0 +1,277 @@ +;; Test `return` operator + +(module + ;; Auxiliary definition + (func $dummy) + + (func (export "type-i32") (drop (i32.ctz (return)))) + (func (export "type-i64") (drop (i64.ctz (return)))) + (func (export "type-f32") (drop (f32.neg (return)))) + (func (export "type-f64") (drop (f64.neg (return)))) + + (func (export "nullary") (return)) + (func (export "unary") (result f64) (return (f64.const 3))) + + (func (export "as-func-first") (result i32) + (return (i32.const 1)) (i32.const 2) + ) + (func (export "as-func-mid") (result i32) + (call $dummy) (return (i32.const 2)) (i32.const 3) + ) + (func (export "as-func-last") + (nop) (call $dummy) (return) + ) + (func (export "as-func-value") (result i32) + (nop) (call $dummy) (return (i32.const 3)) + ) + + (func (export "as-block-first") + (block (return) (call $dummy)) + ) + (func (export "as-block-mid") + (block (call $dummy) (return) (call $dummy)) + ) + (func (export "as-block-last") + (block (nop) (call $dummy) (return)) + ) + (func (export "as-block-value") (result i32) + (block i32 (nop) (call $dummy) (return (i32.const 2))) + ) + + (func (export "as-loop-first") (result i32) + (loop i32 (return (i32.const 3)) (i32.const 2)) + ) + (func (export "as-loop-mid") (result i32) + (loop i32 (call $dummy) (return (i32.const 4)) (i32.const 2)) + ) + (func (export "as-loop-last") (result i32) + (loop i32 (nop) (call $dummy) (return (i32.const 5))) + ) + + (func (export "as-br-value") (result i32) + (block i32 (br 0 (return (i32.const 9)))) + ) + + (func (export "as-br_if-cond") + (block (br_if 0 (return))) + ) + (func (export "as-br_if-value") (result i32) + (block i32 (br_if 0 (return (i32.const 8)) (i32.const 1)) (i32.const 7)) + ) + (func (export "as-br_if-value-cond") (result i32) + (block i32 (drop (br_if 0 (i32.const 6) (return (i32.const 9)))) (i32.const 7)) + ) + + (func (export "as-br_table-index") (result i64) + (block (br_table 0 0 0 (return (i64.const 9)))) (i64.const -1) + ) + (func (export "as-br_table-value") (result i32) + (block i32 + (br_table 0 0 0 (return (i32.const 10)) (i32.const 1)) (i32.const 7) + ) + ) + (func (export "as-br_table-value-index") (result i32) + (block i32 + (br_table 0 0 (i32.const 6) (return (i32.const 11))) (i32.const 7) + ) + ) + + (func (export "as-return-value") (result i64) + (return (return (i64.const 7))) + ) + + (func (export "as-if-cond") (result i32) + (if i32 (return (i32.const 2)) (i32.const 0) (i32.const 1)) + ) + (func (export "as-if-then") (param i32 i32) (result i32) + (if i32 (get_local 0) (return (i32.const 3)) (get_local 1)) + ) + (func (export "as-if-else") (param i32 i32) (result i32) + (if i32 (get_local 0) (get_local 1) (return (i32.const 4))) + ) + + (func (export "as-select-first") (param i32 i32) (result i32) + (select (return (i32.const 5)) (get_local 0) (get_local 1)) + ) + (func (export "as-select-second") (param i32 i32) (result i32) + (select (get_local 0) (return (i32.const 6)) (get_local 1)) + ) + (func (export "as-select-cond") (result i32) + (select (i32.const 0) (i32.const 1) (return (i32.const 7))) + ) + + (func $f (param i32 i32 i32) (result i32) (i32.const -1)) + (func (export "as-call-first") (result i32) + (call $f (return (i32.const 12)) (i32.const 2) (i32.const 3)) + ) + (func (export "as-call-mid") (result i32) + (call $f (i32.const 1) (return (i32.const 13)) (i32.const 3)) + ) + (func (export "as-call-last") (result i32) + (call $f (i32.const 1) (i32.const 2) (return (i32.const 14))) + ) + + (type $sig (func (param i32 i32 i32) (result i32))) + (table anyfunc (elem $f)) + (func (export "as-call_indirect-func") (result i32) + (call_indirect (type $sig) (return (i32.const 20)) (i32.const 1) (i32.const 2) (i32.const 3)) + ) + (func (export "as-call_indirect-first") (result i32) + (call_indirect (type $sig) (i32.const 0) (return (i32.const 21)) (i32.const 2) (i32.const 3)) + ) + (func (export "as-call_indirect-mid") (result i32) + (call_indirect (type $sig) (i32.const 0) (i32.const 1) (return (i32.const 22)) (i32.const 3)) + ) + (func (export "as-call_indirect-last") (result i32) + (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (return (i32.const 23))) + ) + + (func (export "as-set_local-value") (result i32) (local f32) + (set_local 0 (return (i32.const 17))) (i32.const -1) + ) + + (memory 1) + (func (export "as-load-address") (result f32) + (f32.load (return (f32.const 1.7))) + ) + (func (export "as-loadN-address") (result i64) + (i64.load8_s (return (i64.const 30))) + ) + + (func (export "as-store-address") (result i32) + (f64.store (return (i32.const 30)) (f64.const 7)) (i32.const -1) + ) + (func (export "as-store-value") (result i32) + (i64.store (i32.const 2) (return (i32.const 31))) (i32.const -1) + ) + + (func (export "as-storeN-address") (result i32) + (i32.store8 (return (i32.const 32)) (i32.const 7)) (i32.const -1) + ) + (func (export "as-storeN-value") (result i32) + (i64.store16 (i32.const 2) (return (i32.const 33))) (i32.const -1) + ) + + (func (export "as-unary-operand") (result f32) + (f32.neg (return (f32.const 3.4))) + ) + + (func (export "as-binary-left") (result i32) + (i32.add (return (i32.const 3)) (i32.const 10)) + ) + (func (export "as-binary-right") (result i64) + (i64.sub (i64.const 10) (return (i64.const 45))) + ) + + (func (export "as-test-operand") (result i32) + (i32.eqz (return (i32.const 44))) + ) + + (func (export "as-compare-left") (result i32) + (f64.le (return (i32.const 43)) (f64.const 10)) + ) + (func (export "as-compare-right") (result i32) + (f32.ne (f32.const 10) (return (i32.const 42))) + ) + + (func (export "as-convert-operand") (result i32) + (i32.wrap/i64 (return (i32.const 41))) + ) + + (func (export "as-grow_memory-size") (result i32) + (grow_memory (return (i32.const 40))) + ) +) + +(assert_return (invoke "type-i32")) +(assert_return (invoke "type-i64")) +(assert_return (invoke "type-f32")) +(assert_return (invoke "type-f64")) + +(assert_return (invoke "nullary")) +(assert_return (invoke "unary") (f64.const 3)) + +(assert_return (invoke "as-func-first") (i32.const 1)) +(assert_return (invoke "as-func-mid") (i32.const 2)) +(assert_return (invoke "as-func-last")) +(assert_return (invoke "as-func-value") (i32.const 3)) + +(assert_return (invoke "as-block-first")) +(assert_return (invoke "as-block-mid")) +(assert_return (invoke "as-block-last")) +(assert_return (invoke "as-block-value") (i32.const 2)) + +(assert_return (invoke "as-loop-first") (i32.const 3)) +(assert_return (invoke "as-loop-mid") (i32.const 4)) +(assert_return (invoke "as-loop-last") (i32.const 5)) + +(assert_return (invoke "as-br-value") (i32.const 9)) + +(assert_return (invoke "as-br_if-cond")) +(assert_return (invoke "as-br_if-value") (i32.const 8)) +(assert_return (invoke "as-br_if-value-cond") (i32.const 9)) + +(assert_return (invoke "as-br_table-index") (i64.const 9)) +(assert_return (invoke "as-br_table-value") (i32.const 10)) +(assert_return (invoke "as-br_table-value-index") (i32.const 11)) + +(assert_return (invoke "as-return-value") (i64.const 7)) + +(assert_return (invoke "as-if-cond") (i32.const 2)) +(assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) +(assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) +(assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) + +(assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) +(assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) +(assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-select-cond") (i32.const 7)) + +(assert_return (invoke "as-call-first") (i32.const 12)) +(assert_return (invoke "as-call-mid") (i32.const 13)) +(assert_return (invoke "as-call-last") (i32.const 14)) + +(assert_return (invoke "as-call_indirect-func") (i32.const 20)) +(assert_return (invoke "as-call_indirect-first") (i32.const 21)) +(assert_return (invoke "as-call_indirect-mid") (i32.const 22)) +(assert_return (invoke "as-call_indirect-last") (i32.const 23)) + +(assert_return (invoke "as-set_local-value") (i32.const 17)) + +(assert_return (invoke "as-load-address") (f32.const 1.7)) +(assert_return (invoke "as-loadN-address") (i64.const 30)) + +(assert_return (invoke "as-store-address") (i32.const 30)) +(assert_return (invoke "as-store-value") (i32.const 31)) +(assert_return (invoke "as-storeN-address") (i32.const 32)) +(assert_return (invoke "as-storeN-value") (i32.const 33)) + +(assert_return (invoke "as-unary-operand") (f32.const 3.4)) + +(assert_return (invoke "as-binary-left") (i32.const 3)) +(assert_return (invoke "as-binary-right") (i64.const 45)) + +(assert_return (invoke "as-test-operand") (i32.const 44)) + +(assert_return (invoke "as-compare-left") (i32.const 43)) +(assert_return (invoke "as-compare-right") (i32.const 42)) + +(assert_return (invoke "as-convert-operand") (i32.const 41)) + +(assert_return (invoke "as-grow_memory-size") (i32.const 40)) + +(assert_invalid + (module (func $type-value-empty-vs-num (result f64) (return))) + "type mismatch" +) +(assert_invalid + (module (func $type-value-void-vs-num (result f64) (return (nop)))) + "type mismatch" +) +(assert_invalid + (module (func $type-value-num-vs-num (result f64) (return (i64.const 1)))) + "type mismatch" +) + diff --git a/src/binaryen/test/spec/select.wast b/src/binaryen/test/spec/select.wast new file mode 100644 index 0000000000..a2406017f3 --- /dev/null +++ b/src/binaryen/test/spec/select.wast @@ -0,0 +1,57 @@ +(module + (func (export "select_i32") (param $lhs i32) (param $rhs i32) (param $cond i32) (result i32) + (select (get_local $lhs) (get_local $rhs) (get_local $cond))) + + (func (export "select_i64") (param $lhs i64) (param $rhs i64) (param $cond i32) (result i64) + (select (get_local $lhs) (get_local $rhs) (get_local $cond))) + + (func (export "select_f32") (param $lhs f32) (param $rhs f32) (param $cond i32) (result f32) + (select (get_local $lhs) (get_local $rhs) (get_local $cond))) + + (func (export "select_f64") (param $lhs f64) (param $rhs f64) (param $cond i32) (result f64) + (select (get_local $lhs) (get_local $rhs) (get_local $cond))) + + ;; Check that both sides of the select are evaluated + (func (export "select_trap_l") (param $cond i32) (result i32) + (select (unreachable) (i32.const 0) (get_local $cond))) + (func (export "select_trap_r") (param $cond i32) (result i32) + (select (i32.const 0) (unreachable) (get_local $cond))) +) + +(assert_return (invoke "select_i32" (i32.const 1) (i32.const 2) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "select_i64" (i64.const 2) (i64.const 1) (i32.const 1)) (i64.const 2)) +(assert_return (invoke "select_f32" (f32.const 1) (f32.const 2) (i32.const 1)) (f32.const 1)) +(assert_return (invoke "select_f64" (f64.const 1) (f64.const 2) (i32.const 1)) (f64.const 1)) + +(assert_return (invoke "select_i32" (i32.const 1) (i32.const 2) (i32.const 0)) (i32.const 2)) +(assert_return (invoke "select_i32" (i32.const 2) (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "select_i64" (i64.const 2) (i64.const 1) (i32.const -1)) (i64.const 2)) +(assert_return (invoke "select_i64" (i64.const 2) (i64.const 1) (i32.const 0xf0f0f0f0)) (i64.const 2)) + +(assert_return (invoke "select_f32" (f32.const nan) (f32.const 1) (i32.const 1)) (f32.const nan)) +(assert_return (invoke "select_f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 1)) (f32.const nan:0x20304)) +(assert_return (invoke "select_f32" (f32.const nan) (f32.const 1) (i32.const 0)) (f32.const 1)) +(assert_return (invoke "select_f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 0)) (f32.const 1)) +(assert_return (invoke "select_f32" (f32.const 2) (f32.const nan) (i32.const 1)) (f32.const 2)) +(assert_return (invoke "select_f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 1)) (f32.const 2)) +(assert_return (invoke "select_f32" (f32.const 2) (f32.const nan) (i32.const 0)) (f32.const nan)) +(assert_return (invoke "select_f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 0)) (f32.const nan:0x20304)) + +(assert_return (invoke "select_f64" (f64.const nan) (f64.const 1) (i32.const 1)) (f64.const nan)) +(assert_return (invoke "select_f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 1)) (f64.const nan:0x20304)) +(assert_return (invoke "select_f64" (f64.const nan) (f64.const 1) (i32.const 0)) (f64.const 1)) +(assert_return (invoke "select_f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 0)) (f64.const 1)) +(assert_return (invoke "select_f64" (f64.const 2) (f64.const nan) (i32.const 1)) (f64.const 2)) +(assert_return (invoke "select_f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 1)) (f64.const 2)) +(assert_return (invoke "select_f64" (f64.const 2) (f64.const nan) (i32.const 0)) (f64.const nan)) +(assert_return (invoke "select_f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 0)) (f64.const nan:0x20304)) + +(assert_trap (invoke "select_trap_l" (i32.const 1)) "unreachable executed") +(assert_trap (invoke "select_trap_l" (i32.const 0)) "unreachable executed") +(assert_trap (invoke "select_trap_r" (i32.const 1)) "unreachable executed") +(assert_trap (invoke "select_trap_r" (i32.const 0)) "unreachable executed") + +(assert_invalid + (module (func $arity-0 (select (nop) (nop) (i32.const 1)))) + "type mismatch" +) diff --git a/src/binaryen/test/spec/set_local.wast b/src/binaryen/test/spec/set_local.wast new file mode 100644 index 0000000000..5a006e1148 --- /dev/null +++ b/src/binaryen/test/spec/set_local.wast @@ -0,0 +1,205 @@ +;; Test `set_local` operator + +(module + ;; Typing + + (func (export "type-local-i32") (local i32) (set_local 0 (i32.const 0))) + (func (export "type-local-i64") (local i64) (set_local 0 (i64.const 0))) + (func (export "type-local-f32") (local f32) (set_local 0 (f32.const 0))) + (func (export "type-local-f64") (local f64) (set_local 0 (f64.const 0))) + + (func (export "type-param-i32") (param i32) (set_local 0 (i32.const 10))) + (func (export "type-param-i64") (param i64) (set_local 0 (i64.const 11))) + (func (export "type-param-f32") (param f32) (set_local 0 (f32.const 11.1))) + (func (export "type-param-f64") (param f64) (set_local 0 (f64.const 12.2))) + + (func (export "type-mixed") (param i64 f32 f64 i32 i32) (local f32 i64 i64 f64) + (set_local 0 (i64.const 0)) + (set_local 1 (f32.const 0)) + (set_local 2 (f64.const 0)) + (set_local 3 (i32.const 0)) + (set_local 4 (i32.const 0)) + (set_local 5 (f32.const 0)) + (set_local 6 (i64.const 0)) + (set_local 7 (i64.const 0)) + (set_local 8 (f64.const 0)) + ) + + ;; Writing + + (func (export "write") (param i64 f32 f64 i32 i32) (result i64) + (local f32 i64 i64 f64) + (set_local 1 (f32.const -0.3)) + (set_local 3 (i32.const 40)) + (set_local 4 (i32.const -7)) + (set_local 5 (f32.const 5.5)) + (set_local 6 (i64.const 6)) + (set_local 8 (f64.const 8)) + (i64.trunc_s/f64 + (f64.add + (f64.convert_u/i64 (get_local 0)) + (f64.add + (f64.promote/f32 (get_local 1)) + (f64.add + (get_local 2) + (f64.add + (f64.convert_u/i32 (get_local 3)) + (f64.add + (f64.convert_s/i32 (get_local 4)) + (f64.add + (f64.promote/f32 (get_local 5)) + (f64.add + (f64.convert_u/i64 (get_local 6)) + (f64.add + (f64.convert_u/i64 (get_local 7)) + (get_local 8) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) +) + +(assert_return (invoke "type-local-i32")) +(assert_return (invoke "type-local-i64")) +(assert_return (invoke "type-local-f32")) +(assert_return (invoke "type-local-f64")) + +(assert_return (invoke "type-param-i32" (i32.const 2))) +(assert_return (invoke "type-param-i64" (i64.const 3))) +(assert_return (invoke "type-param-f32" (f32.const 4.4))) +(assert_return (invoke "type-param-f64" (f64.const 5.5))) + +(assert_return + (invoke "type-mixed" + (i64.const 1) (f32.const 2.2) (f64.const 3.3) (i32.const 4) (i32.const 5) + ) +) + +(assert_return + (invoke "write" + (i64.const 1) (f32.const 2) (f64.const 3.3) (i32.const 4) (i32.const 5) + ) + (i64.const 56) +) + + +;; Invalid typing of access to locals + +(assert_invalid + (module (func $type-local-num-vs-num (result i64) (local i32) + (set_local 0 (i32.const 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-local-num-vs-num (local f32) + (i32.eqz (set_local 0 (f32.const 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-local-num-vs-num (local f64 i64) + (f64.neg (set_local 1 (i64.const 0))) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-local-arg-void-vs-num (local i32) (set_local 0 (nop)))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-arg-num-vs-num (local i32) (set_local 0 (f32.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-arg-num-vs-num (local f32) (set_local 0 (f64.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-arg-num-vs-num (local f64 i64) (set_local 1 (f64.const 0)))) + "type mismatch" +) + + +;; Invalid typing of access to parameters + +(assert_invalid + (module (func $type-param-num-vs-num (param i32) (result i64) (get_local 0))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-num-vs-num (param f32) (i32.eqz (get_local 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-num-vs-num (param f64 i64) (f64.neg (get_local 1)))) + "type mismatch" +) + +(assert_invalid + (module (func $type-param-arg-void-vs-num (param i32) (set_local 0 (nop)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-arg-num-vs-num (param i32) (set_local 0 (f32.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-arg-num-vs-num (param f32) (set_local 0 (f64.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-arg-num-vs-num (param f64 i64) (set_local 1 (f64.const 0)))) + "type mismatch" +) + + +;; Invalid local index + +(assert_invalid + (module (func $unbound-local (local i32 i64) (get_local 3))) + "unknown local" +) +(assert_invalid + (module (func $large-local (local i32 i64) (get_local 14324343))) + "unknown local" +) + +(assert_invalid + (module (func $unbound-param (param i32 i64) (get_local 2))) + "unknown local" +) +(assert_invalid + (module (func $large-param (local i32 i64) (get_local 714324343))) + "unknown local" +) + +(assert_invalid + (module (func $unbound-mixed (param i32) (local i32 i64) (get_local 3))) + "unknown local" +) +(assert_invalid + (module (func $large-mixed (param i64) (local i32 i64) (get_local 214324343))) + "unknown local" +) + +(assert_invalid + (module (func $type-mixed-arg-num-vs-num (param f32) (local i32) (set_local 1 (f32.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-mixed-arg-num-vs-num (param i64 i32) (local f32) (set_local 1 (f32.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-mixed-arg-num-vs-num (param i64) (local f64 i64) (set_local 1 (i64.const 0)))) + "type mismatch" +) + diff --git a/src/binaryen/test/spec/stack.wast b/src/binaryen/test/spec/stack.wast new file mode 100644 index 0000000000..a0559f5616 --- /dev/null +++ b/src/binaryen/test/spec/stack.wast @@ -0,0 +1,138 @@ +(module + (func (export "fac-expr") (param $n i64) (result i64) + (local $i i64) + (local $res i64) + (set_local $i (get_local $n)) + (set_local $res (i64.const 1)) + (block $done + (loop $loop + (if + (i64.eq (get_local $i) (i64.const 0)) + (br $done) + (block + (set_local $res (i64.mul (get_local $i) (get_local $res))) + (set_local $i (i64.sub (get_local $i) (i64.const 1))) + ) + ) + (br $loop) + ) + ) + (get_local $res) + ) + + (func (export "fac-stack") (param $n i64) (result i64) + (local $i i64) + (local $res i64) + (get_local $n) + (set_local $i) + (i64.const 1) + (set_local $res) + (block $done + (loop $loop + (get_local $i) + (i64.const 0) + (i64.eq) + (if + (then (br $done)) + (else + (get_local $i) + (get_local $res) + (i64.mul) + (set_local $res) + (get_local $i) + (i64.const 1) + (i64.sub) + (set_local $i) + ) + ) + (br $loop) + ) + ) + (get_local $res) + ) + + (func (export "fac-stack-raw") (param $n i64) (result i64) + (local $i i64) + (local $res i64) + get_local $n + set_local $i + i64.const 1 + set_local $res + block $done + loop $loop + get_local $i + i64.const 0 + i64.eq + if + br $done + else + get_local $i + get_local $res + i64.mul + set_local $res + get_local $i + i64.const 1 + i64.sub + set_local $i + end + br $loop + end + end + get_local $res + ) + + (func (export "fac-mixed") (param $n i64) (result i64) + (local $i i64) + (local $res i64) + (set_local $i (get_local $n)) + (set_local $res (i64.const 1)) + (block $done + (loop $loop + (i64.eq (get_local $i) (i64.const 0)) + (if + (then (br $done)) + (else + (i64.mul (get_local $i) (get_local $res)) + (set_local $res) + (i64.sub (get_local $i) (i64.const 1)) + (set_local $i) + ) + ) + (br $loop) + ) + ) + (get_local $res) + ) + + (func (export "fac-mixed-raw") (param $n i64) (result i64) + (local $i i64) + (local $res i64) + (set_local $i (get_local $n)) + (set_local $res (i64.const 1)) + block $done + loop $loop + (i64.eq (get_local $i) (i64.const 0)) + if + br $done + else + (i64.mul (get_local $i) (get_local $res)) + set_local $res + (i64.sub (get_local $i) (i64.const 1)) + set_local $i + end + br $loop + end + end + get_local $res + ) +) + +(assert_return (invoke "fac-expr" (i64.const 25)) (i64.const 7034535277573963776)) +(assert_return (invoke "fac-stack" (i64.const 25)) (i64.const 7034535277573963776)) +(assert_return (invoke "fac-mixed" (i64.const 25)) (i64.const 7034535277573963776)) + +;; from br_table.wast +(module (func $type-arg-num-vs-void + (block (br_table 0 (i32.const 0) (i32.const 1))) +)) + diff --git a/src/binaryen/test/spec/start.wast b/src/binaryen/test/spec/start.wast new file mode 100644 index 0000000000..a20c449be9 --- /dev/null +++ b/src/binaryen/test/spec/start.wast @@ -0,0 +1,88 @@ +(assert_invalid + (module (func) (start 1)) + "unknown function" +) +(assert_invalid + (module + (func $main (result i32) (return (i32.const 0))) + (start $main) + ) + "start function" +) +(assert_invalid + (module + (func $main (param $a i32)) + (start $main) + ) + "start function" +) +(module + (memory (data "A")) + (func $inc + (i32.store8 + (i32.const 0) + (i32.add + (i32.load8_u (i32.const 0)) + (i32.const 1) + ) + ) + ) + (func $get (result i32) + (return (i32.load8_u (i32.const 0))) + ) + (func $main + (call $inc) + (call $inc) + (call $inc) + ) + + (start $main) + (export "inc" (func $inc)) + (export "get" (func $get)) +) +(assert_return (invoke "get") (i32.const 68)) +(invoke "inc") +(assert_return (invoke "get") (i32.const 69)) +(invoke "inc") +(assert_return (invoke "get") (i32.const 70)) + +(module + (memory (data "A")) + (func $inc + (i32.store8 + (i32.const 0) + (i32.add + (i32.load8_u (i32.const 0)) + (i32.const 1) + ) + ) + ) + (func $get (result i32) + (return (i32.load8_u (i32.const 0))) + ) + (func $main + (call $inc) + (call $inc) + (call $inc) + ) + (start 2) + (export "inc" (func $inc)) + (export "get" (func $get)) +) +(assert_return (invoke "get") (i32.const 68)) +(invoke "inc") +(assert_return (invoke "get") (i32.const 69)) +(invoke "inc") +(assert_return (invoke "get") (i32.const 70)) + +(module + (func $print_i32 (import "spectest" "print") (param i32)) + (func $main (call $print_i32 (i32.const 1))) + (start 1) +) + +(module + (func $print_i32 (import "spectest" "print") (param i32)) + (func $main (call $print_i32 (i32.const 2))) + (start $main) +) diff --git a/src/binaryen/test/spec/store_retval.wast b/src/binaryen/test/spec/store_retval.wast new file mode 100644 index 0000000000..a4d03582f6 --- /dev/null +++ b/src/binaryen/test/spec/store_retval.wast @@ -0,0 +1,55 @@ +(assert_invalid + (module (func (param i32) (result i32) (set_local 0 (i32.const 1)))) + "type mismatch" +) +(assert_invalid + (module (func (param i64) (result i64) (set_local 0 (i64.const 1)))) + "type mismatch" +) +(assert_invalid + (module (func (param f32) (result f32) (set_local 0 (f32.const 1)))) + "type mismatch" +) +(assert_invalid + (module (func (param f64) (result f64) (set_local 0 (f64.const 1)))) + "type mismatch" +) + +(assert_invalid + (module (memory 1) (func (param i32) (result i32) (i32.store (i32.const 0) (i32.const 1)))) + "type mismatch" +) +(assert_invalid + (module (memory 1) (func (param i64) (result i64) (i64.store (i32.const 0) (i64.const 1)))) + "type mismatch" +) +(assert_invalid + (module (memory 1) (func (param f32) (result f32) (f32.store (i32.const 0) (f32.const 1)))) + "type mismatch" +) +(assert_invalid + (module (memory 1) (func (param f64) (result f64) (f64.store (i32.const 0) (f64.const 1)))) + "type mismatch" +) + +(assert_invalid + (module (memory 1) (func (param i32) (result i32) (i32.store8 (i32.const 0) (i32.const 1)))) + "type mismatch" +) +(assert_invalid + (module (memory 1) (func (param i32) (result i32) (i32.store16 (i32.const 0) (i32.const 1)))) + "type mismatch" +) +(assert_invalid + (module (memory 1) (func (param i64) (result i64) (i64.store8 (i32.const 0) (i64.const 1)))) + "type mismatch" +) +(assert_invalid + (module (memory 1) (func (param i64) (result i64) (i64.store16 (i32.const 0) (i64.const 1)))) + "type mismatch" +) +(assert_invalid + (module (memory 1) (func (param i64) (result i64) (i64.store32 (i32.const 0) (i64.const 1)))) + "type mismatch" +) + diff --git a/src/binaryen/test/spec/switch.wast b/src/binaryen/test/spec/switch.wast new file mode 100644 index 0000000000..2d4565a5dd --- /dev/null +++ b/src/binaryen/test/spec/switch.wast @@ -0,0 +1,150 @@ +(module + ;; Statement switch + (func (export "stmt") (param $i i32) (result i32) + (local $j i32) + (set_local $j (i32.const 100)) + (block $switch + (block $7 + (block $default + (block $6 + (block $5 + (block $4 + (block $3 + (block $2 + (block $1 + (block $0 + (br_table $0 $1 $2 $3 $4 $5 $6 $7 $default + (get_local $i) + ) + ) ;; 0 + (return (get_local $i)) + ) ;; 1 + (nop) + ;; fallthrough + ) ;; 2 + ;; fallthrough + ) ;; 3 + (set_local $j (i32.sub (i32.const 0) (get_local $i))) + (br $switch) + ) ;; 4 + (br $switch) + ) ;; 5 + (set_local $j (i32.const 101)) + (br $switch) + ) ;; 6 + (set_local $j (i32.const 101)) + ;; fallthrough + ) ;; default + (set_local $j (i32.const 102)) + ) ;; 7 + ;; fallthrough + ) + (return (get_local $j)) + ) + + ;; Expression switch + (func (export "expr") (param $i i64) (result i64) + (local $j i64) + (set_local $j (i64.const 100)) + (return + (block $switch i64 + (block $7 + (block $default + (block $4 + (block $5 + (block $6 + (block $3 + (block $2 + (block $1 + (block $0 + (br_table $0 $1 $2 $3 $4 $5 $6 $7 $default + (i32.wrap/i64 (get_local $i)) + ) + ) ;; 0 + (return (get_local $i)) + ) ;; 1 + (nop) + ;; fallthrough + ) ;; 2 + ;; fallthrough + ) ;; 3 + (br $switch (i64.sub (i64.const 0) (get_local $i))) + ) ;; 6 + (set_local $j (i64.const 101)) + ;; fallthrough + ) ;; 4 + ;; fallthrough + ) ;; 5 + ;; fallthrough + ) ;; default + (br $switch (get_local $j)) + ) ;; 7 + (i64.const -5) + ) + ) + ) + + ;; Argument switch + (func (export "arg") (param $i i32) (result i32) + (return + (block $2 i32 + (i32.add (i32.const 10) + (block $1 i32 + (i32.add (i32.const 100) + (block $0 i32 + (i32.add (i32.const 1000) + (block $default i32 + (br_table $0 $1 $2 $default + (i32.mul (i32.const 2) (get_local $i)) + (i32.and (i32.const 3) (get_local $i)) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + + ;; Corner cases + (func (export "corner") (result i32) + (block + (br_table 0 (i32.const 0)) + ) + (i32.const 1) + ) +) + +(assert_return (invoke "stmt" (i32.const 0)) (i32.const 0)) +(assert_return (invoke "stmt" (i32.const 1)) (i32.const -1)) +(assert_return (invoke "stmt" (i32.const 2)) (i32.const -2)) +(assert_return (invoke "stmt" (i32.const 3)) (i32.const -3)) +(assert_return (invoke "stmt" (i32.const 4)) (i32.const 100)) +(assert_return (invoke "stmt" (i32.const 5)) (i32.const 101)) +(assert_return (invoke "stmt" (i32.const 6)) (i32.const 102)) +(assert_return (invoke "stmt" (i32.const 7)) (i32.const 100)) +(assert_return (invoke "stmt" (i32.const -10)) (i32.const 102)) + +(assert_return (invoke "expr" (i64.const 0)) (i64.const 0)) +(assert_return (invoke "expr" (i64.const 1)) (i64.const -1)) +(assert_return (invoke "expr" (i64.const 2)) (i64.const -2)) +(assert_return (invoke "expr" (i64.const 3)) (i64.const -3)) +(assert_return (invoke "expr" (i64.const 6)) (i64.const 101)) +(assert_return (invoke "expr" (i64.const 7)) (i64.const -5)) +(assert_return (invoke "expr" (i64.const -10)) (i64.const 100)) + +(assert_return (invoke "arg" (i32.const 0)) (i32.const 110)) +(assert_return (invoke "arg" (i32.const 1)) (i32.const 12)) +(assert_return (invoke "arg" (i32.const 2)) (i32.const 4)) +(assert_return (invoke "arg" (i32.const 3)) (i32.const 1116)) +(assert_return (invoke "arg" (i32.const 4)) (i32.const 118)) +(assert_return (invoke "arg" (i32.const 5)) (i32.const 20)) +(assert_return (invoke "arg" (i32.const 6)) (i32.const 12)) +(assert_return (invoke "arg" (i32.const 7)) (i32.const 1124)) +(assert_return (invoke "arg" (i32.const 8)) (i32.const 126)) + +(assert_return (invoke "corner") (i32.const 1)) + +(assert_invalid (module (func (br_table 3 (i32.const 0)))) "unknown label") diff --git a/src/binaryen/test/spec/tee_local.wast b/src/binaryen/test/spec/tee_local.wast new file mode 100644 index 0000000000..452793e300 --- /dev/null +++ b/src/binaryen/test/spec/tee_local.wast @@ -0,0 +1,236 @@ +;; Test `tee_local` operator + +(module + ;; Typing + + (func (export "type-local-i32") (result i32) (local i32) (tee_local 0 (i32.const 0))) + (func (export "type-local-i64") (result i64) (local i64) (tee_local 0 (i64.const 0))) + (func (export "type-local-f32") (result f32) (local f32) (tee_local 0 (f32.const 0))) + (func (export "type-local-f64") (result f64) (local f64) (tee_local 0 (f64.const 0))) + + (func (export "type-param-i32") (param i32) (result i32) (tee_local 0 (i32.const 10))) + (func (export "type-param-i64") (param i64) (result i64) (tee_local 0 (i64.const 11))) + (func (export "type-param-f32") (param f32) (result f32) (tee_local 0 (f32.const 11.1))) + (func (export "type-param-f64") (param f64) (result f64) (tee_local 0 (f64.const 12.2))) + + (func (export "type-mixed") (param i64 f32 f64 i32 i32) (local f32 i64 i64 f64) + (drop (i64.eqz (tee_local 0 (i64.const 0)))) + (drop (f32.neg (tee_local 1 (f32.const 0)))) + (drop (f64.neg (tee_local 2 (f64.const 0)))) + (drop (i32.eqz (tee_local 3 (i32.const 0)))) + (drop (i32.eqz (tee_local 4 (i32.const 0)))) + (drop (f32.neg (tee_local 5 (f32.const 0)))) + (drop (i64.eqz (tee_local 6 (i64.const 0)))) + (drop (i64.eqz (tee_local 7 (i64.const 0)))) + (drop (f64.neg (tee_local 8 (f64.const 0)))) + ) + + ;; Writing + + (func (export "write") (param i64 f32 f64 i32 i32) (result i64) (local f32 i64 i64 f64) + (drop (tee_local 1 (f32.const -0.3))) + (drop (tee_local 3 (i32.const 40))) + (drop (tee_local 4 (i32.const -7))) + (drop (tee_local 5 (f32.const 5.5))) + (drop (tee_local 6 (i64.const 6))) + (drop (tee_local 8 (f64.const 8))) + (i64.trunc_s/f64 + (f64.add + (f64.convert_u/i64 (get_local 0)) + (f64.add + (f64.promote/f32 (get_local 1)) + (f64.add + (get_local 2) + (f64.add + (f64.convert_u/i32 (get_local 3)) + (f64.add + (f64.convert_s/i32 (get_local 4)) + (f64.add + (f64.promote/f32 (get_local 5)) + (f64.add + (f64.convert_u/i64 (get_local 6)) + (f64.add + (f64.convert_u/i64 (get_local 7)) + (get_local 8) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + + ;; Result + + (func (export "result") (param i64 f32 f64 i32 i32) (result f64) + (local f32 i64 i64 f64) + (f64.add + (f64.convert_u/i64 (tee_local 0 (i64.const 1))) + (f64.add + (f64.promote/f32 (tee_local 1 (f32.const 2))) + (f64.add + (tee_local 2 (f64.const 3.3)) + (f64.add + (f64.convert_u/i32 (tee_local 3 (i32.const 4))) + (f64.add + (f64.convert_s/i32 (tee_local 4 (i32.const 5))) + (f64.add + (f64.promote/f32 (tee_local 5 (f32.const 5.5))) + (f64.add + (f64.convert_u/i64 (tee_local 6 (i64.const 6))) + (f64.add + (f64.convert_u/i64 (tee_local 7 (i64.const 0))) + (tee_local 8 (f64.const 8)) + ) + ) + ) + ) + ) + ) + ) + ) + ) +) + +(assert_return (invoke "type-local-i32") (i32.const 0)) +(assert_return (invoke "type-local-i64") (i64.const 0)) +(assert_return (invoke "type-local-f32") (f32.const 0)) +(assert_return (invoke "type-local-f64") (f64.const 0)) + +(assert_return (invoke "type-param-i32" (i32.const 2)) (i32.const 10)) +(assert_return (invoke "type-param-i64" (i64.const 3)) (i64.const 11)) +(assert_return (invoke "type-param-f32" (f32.const 4.4)) (f32.const 11.1)) +(assert_return (invoke "type-param-f64" (f64.const 5.5)) (f64.const 12.2)) + +(assert_return + (invoke "type-mixed" + (i64.const 1) (f32.const 2.2) (f64.const 3.3) (i32.const 4) (i32.const 5) + ) +) + +(assert_return + (invoke "write" + (i64.const 1) (f32.const 2) (f64.const 3.3) (i32.const 4) (i32.const 5) + ) + (i64.const 56) +) + +(assert_return + (invoke "result" + (i64.const -1) (f32.const -2) (f64.const -3.3) (i32.const -4) (i32.const -5) + ) + (f64.const 34.8) +) + + +;; Invalid typing of access to locals + +(assert_invalid + (module (func $type-local-num-vs-num (result i64) (local i32) (tee_local 0 (i32.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-num-vs-num (local f32) (i32.eqz (tee_local 0 (f32.const 0))))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-num-vs-num (local f64 i64) (f64.neg (tee_local 1 (i64.const 0))))) + "type mismatch" +) + +(assert_invalid + (module (func $type-local-arg-void-vs-num (local i32) (tee_local 0 (nop)))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-arg-num-vs-num (local i32) (tee_local 0 (f32.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-arg-num-vs-num (local f32) (tee_local 0 (f64.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-arg-num-vs-num (local f64 i64) (tee_local 1 (f64.const 0)))) + "type mismatch" +) + + +;; Invalid typing of access to parameters + +(assert_invalid + (module (func $type-param-num-vs-num (param i32) (result i64) (get_local 0))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-num-vs-num (param f32) (i32.eqz (get_local 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-num-vs-num (param f64 i64) (f64.neg (get_local 1)))) + "type mismatch" +) + +(assert_invalid + (module (func $type-param-arg-void-vs-num (param i32) (tee_local 0 (nop)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-arg-num-vs-num (param i32) (tee_local 0 (f32.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-arg-num-vs-num (param f32) (tee_local 0 (f64.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-arg-num-vs-num (param f64 i64) (tee_local 1 (f64.const 0)))) + "type mismatch" +) + + +;; Invalid local index + +(assert_invalid + (module (func $unbound-local (local i32 i64) (get_local 3))) + "unknown local" +) +(assert_invalid + (module (func $large-local (local i32 i64) (get_local 14324343))) + "unknown local" +) + +(assert_invalid + (module (func $unbound-param (param i32 i64) (get_local 2))) + "unknown local" +) +(assert_invalid + (module (func $large-param (local i32 i64) (get_local 714324343))) + "unknown local" +) + +(assert_invalid + (module (func $unbound-mixed (param i32) (local i32 i64) (get_local 3))) + "unknown local" +) +(assert_invalid + (module (func $large-mixed (param i64) (local i32 i64) (get_local 214324343))) + "unknown local" +) + +(assert_invalid + (module (func $type-mixed-arg-num-vs-num (param f32) (local i32) (tee_local 1 (f32.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-mixed-arg-num-vs-num (param i64 i32) (local f32) (tee_local 1 (f32.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-mixed-arg-num-vs-num (param i64) (local f64 i64) (tee_local 1 (i64.const 0)))) + "type mismatch" +) + diff --git a/src/binaryen/test/spec/traps.wast b/src/binaryen/test/spec/traps.wast new file mode 100644 index 0000000000..a9184b654b --- /dev/null +++ b/src/binaryen/test/spec/traps.wast @@ -0,0 +1,69 @@ +;; Test that traps are preserved even in instructions which might otherwise +;; be dead-code-eliminated. These functions all perform an operation and +;; discard its return value. + +(module + (func (export "no_dce.i32.div_s") (param $x i32) (param $y i32) (result i32) + (i32.div_s (get_local $x) (get_local $y))) + (func (export "no_dce.i32.div_u") (param $x i32) (param $y i32) (result i32) + (i32.div_u (get_local $x) (get_local $y))) + (func (export "no_dce.i64.div_s") (param $x i64) (param $y i64) (result i64) + (i64.div_s (get_local $x) (get_local $y))) + (func (export "no_dce.i64.div_u") (param $x i64) (param $y i64) (result i64) + (i64.div_u (get_local $x) (get_local $y))) +) + +(assert_trap (invoke "no_dce.i32.div_s" (i32.const 1) (i32.const 0)) "integer divide by zero") +(assert_trap (invoke "no_dce.i32.div_u" (i32.const 1) (i32.const 0)) "integer divide by zero") +(assert_trap (invoke "no_dce.i64.div_s" (i64.const 1) (i64.const 0)) "integer divide by zero") +(assert_trap (invoke "no_dce.i64.div_u" (i64.const 1) (i64.const 0)) "integer divide by zero") + +(module + (func (export "no_dce.i32.rem_s") (param $x i32) (param $y i32) (result i32) + (i32.rem_s (get_local $x) (get_local $y))) + (func (export "no_dce.i32.rem_u") (param $x i32) (param $y i32) (result i32) + (i32.rem_u (get_local $x) (get_local $y))) + (func (export "no_dce.i64.rem_s") (param $x i64) (param $y i64) (result i64) + (i64.rem_s (get_local $x) (get_local $y))) + (func (export "no_dce.i64.rem_u") (param $x i64) (param $y i64) (result i64) + (i64.rem_u (get_local $x) (get_local $y))) +) + +(assert_trap (invoke "no_dce.i32.rem_s" (i32.const 1) (i32.const 0)) "integer divide by zero") +(assert_trap (invoke "no_dce.i32.rem_u" (i32.const 1) (i32.const 0)) "integer divide by zero") +(assert_trap (invoke "no_dce.i64.rem_s" (i64.const 1) (i64.const 0)) "integer divide by zero") +(assert_trap (invoke "no_dce.i64.rem_u" (i64.const 1) (i64.const 0)) "integer divide by zero") + +(module + (func (export "no_dce.i32.trunc_s_f32") (param $x f32) (result i32) (i32.trunc_s/f32 (get_local $x))) + (func (export "no_dce.i32.trunc_u_f32") (param $x f32) (result i32) (i32.trunc_u/f32 (get_local $x))) + (func (export "no_dce.i32.trunc_s_f64") (param $x f64) (result i32) (i32.trunc_s/f64 (get_local $x))) + (func (export "no_dce.i32.trunc_u_f64") (param $x f64) (result i32) (i32.trunc_u/f64 (get_local $x))) + (func (export "no_dce.i64.trunc_s_f32") (param $x f32) (result i64) (i64.trunc_s/f32 (get_local $x))) + (func (export "no_dce.i64.trunc_u_f32") (param $x f32) (result i64) (i64.trunc_u/f32 (get_local $x))) + (func (export "no_dce.i64.trunc_s_f64") (param $x f64) (result i64) (i64.trunc_s/f64 (get_local $x))) + (func (export "no_dce.i64.trunc_u_f64") (param $x f64) (result i64) (i64.trunc_u/f64 (get_local $x))) +) + +(assert_trap (invoke "no_dce.i32.trunc_s_f32" (f32.const nan)) "invalid conversion to integer") +(assert_trap (invoke "no_dce.i32.trunc_u_f32" (f32.const nan)) "invalid conversion to integer") +(assert_trap (invoke "no_dce.i32.trunc_s_f64" (f64.const nan)) "invalid conversion to integer") +(assert_trap (invoke "no_dce.i32.trunc_u_f64" (f64.const nan)) "invalid conversion to integer") +(assert_trap (invoke "no_dce.i64.trunc_s_f32" (f32.const nan)) "invalid conversion to integer") +(assert_trap (invoke "no_dce.i64.trunc_u_f32" (f32.const nan)) "invalid conversion to integer") +(assert_trap (invoke "no_dce.i64.trunc_s_f64" (f64.const nan)) "invalid conversion to integer") +(assert_trap (invoke "no_dce.i64.trunc_u_f64" (f64.const nan)) "invalid conversion to integer") + +(module + (memory 1) + + (func (export "no_dce.i32.load") (param $i i32) (result i32) (i32.load (get_local $i))) + (func (export "no_dce.i64.load") (param $i i32) (result i64) (i64.load (get_local $i))) + (func (export "no_dce.f32.load") (param $i i32) (result f32) (f32.load (get_local $i))) + (func (export "no_dce.f64.load") (param $i i32) (result f64) (f64.load (get_local $i))) +) + +(assert_trap (invoke "no_dce.i32.load" (i32.const 65536)) "out of bounds memory access") +(assert_trap (invoke "no_dce.i64.load" (i32.const 65536)) "out of bounds memory access") +(assert_trap (invoke "no_dce.f32.load" (i32.const 65536)) "out of bounds memory access") +(assert_trap (invoke "no_dce.f64.load" (i32.const 65536)) "out of bounds memory access") diff --git a/src/binaryen/test/spec/typecheck.wast b/src/binaryen/test/spec/typecheck.wast new file mode 100644 index 0000000000..d33cc5be3a --- /dev/null +++ b/src/binaryen/test/spec/typecheck.wast @@ -0,0 +1,433 @@ +;; TODO: move all tests in this file to appropriate operator-specific files. + +(assert_invalid + (module (func $type-unary-operand-missing + (i32.eqz) (drop) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-unary-operand-missing-in-block + (i32.const 0) + (block (i32.eqz) (drop)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-unary-operand-missing-in-loop + (i32.const 0) + (loop (i32.eqz) (drop)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-unary-operand-missing-in-if + (i32.const 0) (i32.const 0) + (if (then (i32.eqz) (drop))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-unary-operand-missing-in-else + (i32.const 0) (i32.const 0) + (if i32 (then (i32.const 0)) (else (i32.eqz))) (drop) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-binary-1st-operand-missing + (i32.add) (drop) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-2nd-operand-missing + (i32.const 0) (i32.add) (drop) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-1st-operand-missing-in-block + (i32.const 0) (i32.const 0) + (block (i32.add) (drop)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-2nd-operand-missing-in-block + (i32.const 0) + (block (i32.const 0) (i32.add) (drop)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-1st-operand-missing-in-loop + (i32.const 0) (i32.const 0) + (loop (i32.add) (drop)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-2nd-operand-missing-in-loop + (i32.const 0) + (loop (i32.const 0) (i32.add) (drop)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-1st-operand-missing-in-if + (i32.const 0) (i32.const 0) (i32.const 0) + (if (i32.add) (drop)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-2nd-operand-missing-in-if + (i32.const 0) (i32.const 0) + (if (i32.const 0) (i32.add) (drop)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-1st-operand-missing-in-else + (i32.const 0) (i32.const 0) (i32.const 0) + (if i32 (then (i32.const 0)) (else (i32.add) (i32.const 0))) + (drop) (drop) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-2nd-operand-missing-in-else + (i32.const 0) (i32.const 0) + (if i32 (then (i32.const 0)) (else (i32.add))) + (drop) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-if-operand-missing + (if (then)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-if-operand-missing-in-block + (i32.const 0) + (block (if (then))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-if-operand-missing-in-loop + (i32.const 0) + (loop (if (then))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-if-operand-missing-in-if + (i32.const 0) (i32.const 0) + (if (then (if (then)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-if-operand-missing-in-else + (i32.const 0) (i32.const 0) + (if i32 (then (i32.const 0)) (else (if (then)) (i32.const 0))) + (drop) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-br-operand-missing + (block i32 (br 0)) + (i32.eqz) (drop) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-br-operand-missing-in-block + (i32.const 0) + (block i32 (br 0)) + (i32.eqz) (drop) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-br-operand-missing-in-loop + (i32.const 0) + (loop i32 (br 0)) + (i32.eqz) (drop) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-br-operand-missing-in-if + (block + (i32.const 0) (i32.const 0) + (if i32 (then (br 0))) + ) + (i32.eqz) (drop) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-br-operand-missing-in-else + (block + (i32.const 0) (i32.const 0) + (if i32 (then (i32.const 0)) (else (br 0))) + ) + (i32.eqz) (drop) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-return-operand-missing (result i32) + (return) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-return-operand-missing-in-block (result i32) + (i32.const 0) + (block (return)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-return-operand-missing-in-loop (result i32) + (i32.const 0) + (loop (return)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-return-operand-missing-in-if (result i32) + (i32.const 0) (i32.const 0) + (if (then (return))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-return-operand-missing-in-else (result i32) + (i32.const 0) (i32.const 0) + (if i32 (then (i32.const 0)) (else (return))) (drop) + )) + "type mismatch" +) + +;; TODO(stack): more of the above + +;; if condition +(assert_invalid (module (func (if (f32.const 0) (nop) (nop)))) "type mismatch") + +;; br_if condition +(assert_invalid (module (func (block (br_if 0 (f32.const 0))))) "type mismatch") + +;; br_table key +(assert_invalid + (module (func (block (br_table 0 (f32.const 0))))) + "type mismatch") + +;; call params +(assert_invalid (module (func (param i32)) (func (call 0 (f32.const 0)))) "type mismatch") +(assert_invalid + (module + (type (func (param i32))) + (func (type 0)) + (table 0 anyfunc) + (func + (call_indirect (type 0) (i32.const 0) (f32.const 0)))) + "type mismatch") + +;; call_indirect (type index) +(assert_invalid + (module + (type (func)) + (func (type 0)) + (table 0 anyfunc) + (func (call_indirect (type 0) (f32.const 0)))) + "type mismatch") + +;; return +(assert_invalid (module (func (result i32) (return (f32.const 0)))) "type mismatch") + +;; set_local +(assert_invalid (module (func (local i32) (set_local 0 (f32.const 0)))) "type mismatch") + +;; load index +(assert_invalid (module (memory 1) (func (i32.load (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i32.load8_s (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i32.load8_u (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i32.load16_s (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i32.load16_u (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.load (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.load8_s (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.load8_u (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.load16_s (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.load16_u (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.load32_s (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.load32_u (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (f32.load (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (f64.load (f32.const 0)))) "type mismatch") + +;; store index +(assert_invalid (module (memory 1) (func (i32.store (f32.const 0) (i32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i32.store8 (f32.const 0) (i32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i32.store16 (f32.const 0) (i32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.store (f32.const 0) (i32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.store8 (f32.const 0) (i64.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.store16 (f32.const 0) (i64.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.store32 (f32.const 0) (i64.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (f32.store (f32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (f64.store (f32.const 0) (f64.const 0)))) "type mismatch") + +;; store value +(assert_invalid (module (memory 1) (func (i32.store (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i32.store8 (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i32.store16 (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.store (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.store8 (i32.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.store16 (i32.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.store32 (i32.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (f32.store (i32.const 0) (i32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (f64.store (i32.const 0) (i64.const 0)))) "type mismatch") + +;; binary +(assert_invalid (module (func (i32.add (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.and (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.div_s (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.div_u (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.mul (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.or (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.rem_s (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.rem_u (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.rotl (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.rotr (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.shl (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.shr_s (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.shr_u (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.sub (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.xor (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.add (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.and (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.div_s (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.div_u (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.mul (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.or (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.rem_s (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.rem_u (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.rotl (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.rotr (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.shl (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.shr_s (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.shr_u (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.sub (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.xor (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.add (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.copysign (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.div (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.max (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.min (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.mul (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.sub (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.add (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.copysign (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.div (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.max (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.min (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.mul (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.sub (i64.const 0) (f32.const 0)))) "type mismatch") + +;; unary +(assert_invalid (module (func (i32.eqz (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.clz (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.ctz (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.popcnt (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.eqz (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.clz (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.ctz (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.popcnt (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.abs (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.ceil (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.floor (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.nearest (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.neg (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.sqrt (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.trunc (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.abs (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.ceil (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.floor (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.nearest (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.neg (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.sqrt (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.trunc (i64.const 0)))) "type mismatch") + +;; compare +(assert_invalid (module (func (i32.eq (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.ge_s (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.ge_u (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.gt_s (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.gt_u (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.le_s (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.le_u (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.lt_s (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.lt_u (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.ne (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.eq (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.ge_s (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.ge_u (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.gt_s (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.gt_u (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.le_s (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.le_u (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.lt_s (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.lt_u (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.ne (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.eq (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.ge (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.gt (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.le (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.lt (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.ne (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.eq (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.ge (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.gt (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.le (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.lt (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.ne (i64.const 0) (f32.const 0)))) "type mismatch") + +;; convert +(assert_invalid (module (func (i32.wrap/i64 (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.trunc_s/f32 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.trunc_u/f32 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.trunc_s/f64 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.trunc_u/f64 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.reinterpret/f32 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.extend_s/i32 (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.extend_u/i32 (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.trunc_s/f32 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.trunc_u/f32 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.trunc_s/f64 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.trunc_u/f64 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.reinterpret/f64 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.convert_s/i32 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.convert_u/i32 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.convert_s/i64 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.convert_u/i64 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.demote/f64 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.reinterpret/i32 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.convert_s/i32 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.convert_u/i32 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.convert_s/i64 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.convert_u/i64 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.promote/f32 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.reinterpret/i64 (i32.const 0)))) "type mismatch") + +;; grow_memory +(assert_invalid (module (memory 1) (func (grow_memory (f32.const 0)))) "type mismatch") diff --git a/src/binaryen/test/spec/unreachable.wast b/src/binaryen/test/spec/unreachable.wast new file mode 100644 index 0000000000..428146f327 --- /dev/null +++ b/src/binaryen/test/spec/unreachable.wast @@ -0,0 +1,262 @@ +;; Test `unreachable` operator + +(module + ;; Auxiliary definitions + (func $dummy) + (func $dummy3 (param i32 i32 i32)) + + (func (export "type-i32") (result i32) (unreachable)) + (func (export "type-i64") (result i32) (unreachable)) + (func (export "type-f32") (result f64) (unreachable)) + (func (export "type-f64") (result f64) (unreachable)) + + (func (export "as-func-first") (result i32) + (unreachable) (i32.const -1) + ) + (func (export "as-func-mid") (result i32) + (call $dummy) (unreachable) (i32.const -1) + ) + (func (export "as-func-last") + (call $dummy) (unreachable) + ) + (func (export "as-func-value") (result i32) + (call $dummy) (unreachable) + ) + + (func (export "as-block-first") (result i32) + (block i32 (unreachable) (i32.const 2)) + ) + (func (export "as-block-mid") (result i32) + (block i32 (call $dummy) (unreachable) (i32.const 2)) + ) + (func (export "as-block-last") + (block (nop) (call $dummy) (unreachable)) + ) + (func (export "as-block-value") (result i32) + (block i32 (nop) (call $dummy) (unreachable)) + ) + (func (export "as-block-broke") (result i32) + (block i32 (call $dummy) (br 0 (i32.const 1)) (unreachable)) + ) + + (func (export "as-loop-first") (result i32) + (loop i32 (unreachable) (i32.const 2)) + ) + (func (export "as-loop-mid") (result i32) + (loop i32 (call $dummy) (unreachable) (i32.const 2)) + ) + (func (export "as-loop-last") + (loop (nop) (call $dummy) (unreachable)) + ) + (func (export "as-loop-broke") (result i32) + (block i32 (loop i32 (call $dummy) (br 1 (i32.const 1)) (unreachable))) + ) + + (func (export "as-br-value") (result i32) + (block i32 (br 0 (unreachable))) + ) + + (func (export "as-br_if-cond") + (block (br_if 0 (unreachable))) + ) + (func (export "as-br_if-value") (result i32) + (block i32 (br_if 0 (unreachable) (i32.const 1)) (i32.const 7)) + ) + (func (export "as-br_if-value-cond") (result i32) + (block i32 (drop (br_if 0 (i32.const 6) (unreachable))) (i32.const 7)) + ) + + (func (export "as-br_table-index") + (block (br_table 0 0 0 (unreachable))) + ) + (func (export "as-br_table-value") (result i32) + (block i32 (br_table 0 0 0 (unreachable) (i32.const 1)) (i32.const 7)) + ) + (func (export "as-br_table-value-index") (result i32) + (block i32 (br_table 0 0 (i32.const 6) (unreachable)) (i32.const 7)) + ) + + (func (export "as-return-value") (result i64) + (return (unreachable)) + ) + + (func (export "as-if-cond") (result i32) + (if i32 (unreachable) (i32.const 0) (i32.const 1)) + ) + (func (export "as-if-then") (param i32 i32) (result i32) + (if i32 (get_local 0) (unreachable) (get_local 1)) + ) + (func (export "as-if-else") (param i32 i32) (result i32) + (if i32 (get_local 0) (get_local 1) (unreachable)) + ) + + (func (export "as-select-first") (param i32 i32) (result i32) + (select (unreachable) (get_local 0) (get_local 1)) + ) + (func (export "as-select-second") (param i32 i32) (result i32) + (select (get_local 0) (unreachable) (get_local 1)) + ) + (func (export "as-select-cond") (result i32) + (select (i32.const 0) (i32.const 1) (unreachable)) + ) + + (func (export "as-call-first") + (call $dummy3 (unreachable) (i32.const 2) (i32.const 3)) + ) + (func (export "as-call-mid") + (call $dummy3 (i32.const 1) (unreachable) (i32.const 3)) + ) + (func (export "as-call-last") + (call $dummy3 (i32.const 1) (i32.const 2) (unreachable)) + ) + + (type $sig (func (param i32 i32 i32))) + (table anyfunc (elem $dummy3)) + (func (export "as-call_indirect-func") + (call_indirect (type $sig) (unreachable) (i32.const 1) (i32.const 2) (i32.const 3)) + ) + (func (export "as-call_indirect-first") + (call_indirect (type $sig) (i32.const 0) (unreachable) (i32.const 2) (i32.const 3)) + ) + (func (export "as-call_indirect-mid") + (call_indirect (type $sig) (i32.const 0) (i32.const 1) (unreachable) (i32.const 3)) + ) + (func (export "as-call_indirect-last") + (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (unreachable)) + ) + + (func (export "as-set_local-value") (local f32) + (set_local 0 (unreachable)) + ) + + (memory 1) + (func (export "as-load-address") (result f32) + (f32.load (unreachable)) + ) + (func (export "as-loadN-address") (result i64) + (i64.load8_s (unreachable)) + ) + + (func (export "as-store-address") + (f64.store (unreachable) (f64.const 7)) + ) + (func (export "as-store-value") + (i64.store (i32.const 2) (unreachable)) + ) + + (func (export "as-storeN-address") + (i32.store8 (unreachable) (i32.const 7)) + ) + (func (export "as-storeN-value") + (i64.store16 (i32.const 2) (unreachable)) + ) + + (func (export "as-unary-operand") (result f32) + (f32.neg (unreachable)) + ) + + (func (export "as-binary-left") (result i32) + (i32.add (unreachable) (i32.const 10)) + ) + (func (export "as-binary-right") (result i64) + (i64.sub (i64.const 10) (unreachable)) + ) + + (func (export "as-test-operand") (result i32) + (i32.eqz (unreachable)) + ) + + (func (export "as-compare-left") (result i32) + (f64.le (unreachable) (f64.const 10)) + ) + (func (export "as-compare-right") (result i32) + (f32.ne (f32.const 10) (unreachable)) + ) + + (func (export "as-convert-operand") (result i32) + (i32.wrap/i64 (unreachable)) + ) + + (func (export "as-grow_memory-size") (result i32) + (grow_memory (unreachable)) + ) +) + +(assert_trap (invoke "type-i32") "unreachable") +(assert_trap (invoke "type-i64") "unreachable") +(assert_trap (invoke "type-f32") "unreachable") +(assert_trap (invoke "type-f64") "unreachable") + +(assert_trap (invoke "as-func-first") "unreachable") +(assert_trap (invoke "as-func-mid") "unreachable") +(assert_trap (invoke "as-func-last") "unreachable") +(assert_trap (invoke "as-func-value") "unreachable") + +(assert_trap (invoke "as-block-first") "unreachable") +(assert_trap (invoke "as-block-mid") "unreachable") +(assert_trap (invoke "as-block-last") "unreachable") +(assert_trap (invoke "as-block-value") "unreachable") +(assert_return (invoke "as-block-broke") (i32.const 1)) + +(assert_trap (invoke "as-loop-first") "unreachable") +(assert_trap (invoke "as-loop-mid") "unreachable") +(assert_trap (invoke "as-loop-last") "unreachable") +(assert_return (invoke "as-loop-broke") (i32.const 1)) + +(assert_trap (invoke "as-br-value") "unreachable") + +(assert_trap (invoke "as-br_if-cond") "unreachable") +(assert_trap (invoke "as-br_if-value") "unreachable") +(assert_trap (invoke "as-br_if-value-cond") "unreachable") + +(assert_trap (invoke "as-br_table-index") "unreachable") +(assert_trap (invoke "as-br_table-value") "unreachable") +(assert_trap (invoke "as-br_table-value-index") "unreachable") + +(assert_trap (invoke "as-return-value") "unreachable") + +(assert_trap (invoke "as-if-cond") "unreachable") +(assert_trap (invoke "as-if-then" (i32.const 1) (i32.const 6)) "unreachable") +(assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) +(assert_trap (invoke "as-if-else" (i32.const 0) (i32.const 6)) "unreachable") +(assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) + +(assert_trap (invoke "as-select-first" (i32.const 0) (i32.const 6)) "unreachable") +(assert_trap (invoke "as-select-first" (i32.const 1) (i32.const 6)) "unreachable") +(assert_trap (invoke "as-select-second" (i32.const 0) (i32.const 6)) "unreachable") +(assert_trap (invoke "as-select-second" (i32.const 1) (i32.const 6)) "unreachable") +(assert_trap (invoke "as-select-cond") "unreachable") + +(assert_trap (invoke "as-call-first") "unreachable") +(assert_trap (invoke "as-call-mid") "unreachable") +(assert_trap (invoke "as-call-last") "unreachable") + +(assert_trap (invoke "as-call_indirect-func") "unreachable") +(assert_trap (invoke "as-call_indirect-first") "unreachable") +(assert_trap (invoke "as-call_indirect-mid") "unreachable") +(assert_trap (invoke "as-call_indirect-last") "unreachable") + +(assert_trap (invoke "as-set_local-value") "unreachable") + +(assert_trap (invoke "as-load-address") "unreachable") +(assert_trap (invoke "as-loadN-address") "unreachable") + +(assert_trap (invoke "as-store-address") "unreachable") +(assert_trap (invoke "as-store-value") "unreachable") +(assert_trap (invoke "as-storeN-address") "unreachable") +(assert_trap (invoke "as-storeN-value") "unreachable") + +(assert_trap (invoke "as-unary-operand") "unreachable") + +(assert_trap (invoke "as-binary-left") "unreachable") +(assert_trap (invoke "as-binary-right") "unreachable") + +(assert_trap (invoke "as-test-operand") "unreachable") + +(assert_trap (invoke "as-compare-left") "unreachable") +(assert_trap (invoke "as-compare-right") "unreachable") + +(assert_trap (invoke "as-convert-operand") "unreachable") + +(assert_trap (invoke "as-grow_memory-size") "unreachable") + diff --git a/src/binaryen/test/spec/unwind.wast b/src/binaryen/test/spec/unwind.wast new file mode 100644 index 0000000000..8db16c75bd --- /dev/null +++ b/src/binaryen/test/spec/unwind.wast @@ -0,0 +1,167 @@ +;; Test that control-flow transfer unwinds stack and it can be anything after. + +(module + (func (export "block-unwind-by-unreachable") + (block (i32.const 3) (i64.const 1) (unreachable)) + ) + (func (export "block-unwind-by-br") (result i32) + (block (i32.const 3) (i64.const 1) (br 0)) (i32.const 9) + ) + (func (export "block-unwind-by-br-value") (result i32) + (block i32 (i32.const 3) (i64.const 1) (br 0 (i32.const 9))) + ) + (func (export "block-unwind-by-br_table") (result i32) + (block (i32.const 3) (i64.const 1) (br_table 0 (i32.const 0))) (i32.const 9) + ) + (func (export "block-unwind-by-br_table-value") (result i32) + (block i32 + (i32.const 3) (i64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) + ) + ) + (func (export "block-unwind-by-return") (result i32) + (block i32 (i32.const 3) (i64.const 1) (return (i32.const 9))) + ) + + (func (export "block-nested-unwind-by-unreachable") (result i32) + (block i32 (i32.const 3) (block (i64.const 1) (unreachable))) + ) + (func (export "block-nested-unwind-by-br") (result i32) + (block (i32.const 3) (block (i64.const 1) (br 1)) (drop)) (i32.const 9) + ) + (func (export "block-nested-unwind-by-br-value") (result i32) + (block i32 (i32.const 3) (block (i64.const 1) (br 1 (i32.const 9)))) + ) + (func (export "block-nested-unwind-by-br_table") (result i32) + (block + (i32.const 3) (block (i64.const 1) (br_table 1 (i32.const 1))) + (drop) + ) + (i32.const 9) + ) + (func (export "block-nested-unwind-by-br_table-value") (result i32) + (block i32 + (i32.const 3) + (block (i64.const 1) (br_table 1 (i32.const 9) (i32.const 1))) + ) + ) + (func (export "block-nested-unwind-by-return") (result i32) + (block i32 (i32.const 3) (block (i64.const 1) (return (i32.const 9)))) + ) + + (func (export "unary-after-unreachable") (result i32) + (f32.const 0) (unreachable) (i64.eqz) + ) + (func (export "unary-after-br") (result i32) + (block i32 (f32.const 0) (br 0 (i32.const 9)) (i64.eqz)) + ) + (func (export "unary-after-br_table") (result i32) + (block i32 + (f32.const 0) (br_table 0 0 (i32.const 9) (i32.const 0)) (i64.eqz) + ) + ) + (func (export "unary-after-return") (result i32) + (f32.const 0) (return (i32.const 9)) (i64.eqz) + ) + + (func (export "binary-after-unreachable") (result i32) + (f32.const 0) (f64.const 1) (unreachable) (i64.eq) + ) + (func (export "binary-after-br") (result i32) + (block i32 (f32.const 0) (f64.const 1) (br 0 (i32.const 9)) (i64.eq)) + ) + (func (export "binary-after-br_table") (result i32) + (block i32 + (f32.const 0) (f64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) + (i64.eq) + ) + ) + (func (export "binary-after-return") (result i32) + (f32.const 0) (f64.const 1) (return (i32.const 9)) (i64.eq) + ) + + (func (export "select-after-unreachable") (result i32) + (f32.const 0) (f64.const 1) (i64.const 0) (unreachable) (select) + ) + (func (export "select-after-br") (result i32) + (block i32 + (f32.const 0) (f64.const 1) (i64.const 0) (br 0 (i32.const 9)) (select) + ) + ) + (func (export "select-after-br_table") (result i32) + (block i32 + (f32.const 0) (f64.const 1) (i64.const 0) + (br_table 0 (i32.const 9) (i32.const 0)) + (select) + ) + ) + (func (export "select-after-return") (result i32) + (f32.const 0) (f64.const 1) (i64.const 1) (return (i32.const 9)) (select) + ) + + (func (export "block-value-after-unreachable") (result i32) + (block i32 (f32.const 0) (unreachable)) + ) + (func (export "block-value-after-br") (result i32) + (block i32 (f32.const 0) (br 0 (i32.const 9))) + ) + (func (export "block-value-after-br_table") (result i32) + (block i32 (f32.const 0) (br_table 0 0 (i32.const 9) (i32.const 0))) + ) + (func (export "block-value-after-return") (result i32) + (block i32 (f32.const 0) (return (i32.const 9))) + ) + + (func (export "loop-value-after-unreachable") (result i32) + (loop i32 (f32.const 0) (unreachable)) + ) + (func (export "loop-value-after-br") (result i32) + (block i32 (loop i32 (f32.const 0) (br 1 (i32.const 9)))) + ) + (func (export "loop-value-after-br_table") (result i32) + (block i32 + (loop i32 (f32.const 0) (br_table 1 1 (i32.const 9) (i32.const 0))) + ) + ) + (func (export "loop-value-after-return") (result i32) + (loop i32 (f32.const 0) (return (i32.const 9))) + ) +) + +(assert_trap (invoke "block-unwind-by-unreachable") "unreachable") +(assert_return (invoke "block-unwind-by-br") (i32.const 9)) +(assert_return (invoke "block-unwind-by-br-value") (i32.const 9)) +(assert_return (invoke "block-unwind-by-br_table") (i32.const 9)) +(assert_return (invoke "block-unwind-by-br_table-value") (i32.const 9)) +(assert_return (invoke "block-unwind-by-return") (i32.const 9)) + +(assert_trap (invoke "block-nested-unwind-by-unreachable") "unreachable") +(assert_return (invoke "block-nested-unwind-by-br") (i32.const 9)) +(assert_return (invoke "block-nested-unwind-by-br-value") (i32.const 9)) +(assert_return (invoke "block-nested-unwind-by-br_table") (i32.const 9)) +(assert_return (invoke "block-nested-unwind-by-br_table-value") (i32.const 9)) +(assert_return (invoke "block-nested-unwind-by-return") (i32.const 9)) + +(assert_trap (invoke "unary-after-unreachable") "unreachable") +(assert_return (invoke "unary-after-br") (i32.const 9)) +(assert_return (invoke "unary-after-br_table") (i32.const 9)) +(assert_return (invoke "unary-after-return") (i32.const 9)) + +(assert_trap (invoke "binary-after-unreachable") "unreachable") +(assert_return (invoke "binary-after-br") (i32.const 9)) +(assert_return (invoke "binary-after-br_table") (i32.const 9)) +(assert_return (invoke "binary-after-return") (i32.const 9)) + +(assert_trap (invoke "select-after-unreachable") "unreachable") +(assert_return (invoke "select-after-br") (i32.const 9)) +(assert_return (invoke "select-after-br_table") (i32.const 9)) +(assert_return (invoke "select-after-return") (i32.const 9)) + +(assert_trap (invoke "block-value-after-unreachable") "unreachable") +(assert_return (invoke "block-value-after-br") (i32.const 9)) +(assert_return (invoke "block-value-after-br_table") (i32.const 9)) +(assert_return (invoke "block-value-after-return") (i32.const 9)) + +(assert_trap (invoke "loop-value-after-unreachable") "unreachable") +(assert_return (invoke "loop-value-after-br") (i32.const 9)) +(assert_return (invoke "loop-value-after-br_table") (i32.const 9)) +(assert_return (invoke "loop-value-after-return") (i32.const 9)) diff --git a/src/binaryen/test/stacky.wasm b/src/binaryen/test/stacky.wasm new file mode 100644 index 0000000000000000000000000000000000000000..8d1545cf82a8fc25f89399fb9bea71c4c99be7c5 GIT binary patch literal 54 zcmZQbEY4+QU|?WmXG~zKuV<`hW@2PuWn*M)U}|7uXJ=$iOi5v2;NoNCVNhUje8Ql} Jpum{L4FJ`j2cG}{ literal 0 HcmV?d00001 diff --git a/src/binaryen/test/stacky.wasm.fromBinary b/src/binaryen/test/stacky.wasm.fromBinary new file mode 100644 index 0000000000..3f2bded487 --- /dev/null +++ b/src/binaryen/test/stacky.wasm.fromBinary @@ -0,0 +1,21 @@ +(module + (type $0 (func (param i32 i32) (result i32))) + (memory $0 256 256) + (export "add" (func $0)) + (func $0 (; 0 ;) (type $0) (param $var$0 i32) (param $var$1 i32) (result i32) + (local $2 i32) + (i32.add + (block (result i32) + (set_local $2 + (get_local $var$0) + ) + (set_local $var$0 + (i32.const 100) + ) + (get_local $2) + ) + (get_local $var$1) + ) + ) +) + diff --git a/src/binaryen/test/table-import.wast b/src/binaryen/test/table-import.wast new file mode 100644 index 0000000000..6d40941e2a --- /dev/null +++ b/src/binaryen/test/table-import.wast @@ -0,0 +1,9 @@ +(module + (type $0 (func)) + (import "env" "table" (table 1 1 anyfunc)) + (elem (i32.const 0) $foo) + (memory $0 0) + (func $foo (type $0) + (nop) + ) +) diff --git a/src/binaryen/test/table-import.wast.from-wast b/src/binaryen/test/table-import.wast.from-wast new file mode 100644 index 0000000000..2c9ee3ea1d --- /dev/null +++ b/src/binaryen/test/table-import.wast.from-wast @@ -0,0 +1,9 @@ +(module + (type $0 (func)) + (import "env" "table" (table 1 1 anyfunc)) + (elem (i32.const 0) $foo) + (memory $0 0) + (func $foo (; 0 ;) (type $0) + (nop) + ) +) diff --git a/src/binaryen/test/table-import.wast.fromBinary b/src/binaryen/test/table-import.wast.fromBinary new file mode 100644 index 0000000000..a8ffec5c7c --- /dev/null +++ b/src/binaryen/test/table-import.wast.fromBinary @@ -0,0 +1,10 @@ +(module + (type $0 (func)) + (import "env" "table" (table 1 1 anyfunc)) + (elem (i32.const 0) $foo) + (memory $0 0) + (func $foo (; 0 ;) (type $0) + (nop) + ) +) + diff --git a/src/binaryen/test/table-import.wast.fromBinary.noDebugInfo b/src/binaryen/test/table-import.wast.fromBinary.noDebugInfo new file mode 100644 index 0000000000..5750f845b3 --- /dev/null +++ b/src/binaryen/test/table-import.wast.fromBinary.noDebugInfo @@ -0,0 +1,10 @@ +(module + (type $0 (func)) + (import "env" "table" (table 1 1 anyfunc)) + (elem (i32.const 0) $0) + (memory $0 0) + (func $0 (; 0 ;) (type $0) + (nop) + ) +) + diff --git a/src/binaryen/test/threads.asm.js b/src/binaryen/test/threads.asm.js new file mode 100644 index 0000000000..1253e8c42e --- /dev/null +++ b/src/binaryen/test/threads.asm.js @@ -0,0 +1,144 @@ +Module["asm"] = (function(global, env, buffer) { + 'use asm'; + + + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + + var DYNAMICTOP_PTR=env.DYNAMICTOP_PTR|0; + var tempDoublePtr=env.tempDoublePtr|0; + var ABORT=env.ABORT|0; + var STACKTOP=env.STACKTOP|0; + var STACK_MAX=env.STACK_MAX|0; + + var __THREW__ = 0; + var threwValue = 0; + var setjmpId = 0; + var undef = 0; + var nan = global.NaN, inf = global.Infinity; + var tempInt = 0, tempBigInt = 0, tempBigIntS = 0, tempValue = 0, tempDouble = 0.0; + var tempRet0 = 0; + + var __pthread_ptr = 0; + var __pthread_is_main_runtime_thread = 0; + var __pthread_is_main_browser_thread = 0; + + var Math_floor=global.Math.floor; + var Math_abs=global.Math.abs; + var Math_sqrt=global.Math.sqrt; + var Math_pow=global.Math.pow; + var Math_cos=global.Math.cos; + var Math_sin=global.Math.sin; + var Math_tan=global.Math.tan; + var Math_acos=global.Math.acos; + var Math_asin=global.Math.asin; + var Math_atan=global.Math.atan; + var Math_atan2=global.Math.atan2; + var Math_exp=global.Math.exp; + var Math_log=global.Math.log; + var Math_ceil=global.Math.ceil; + var Math_imul=global.Math.imul; + var Math_min=global.Math.min; + var Math_max=global.Math.max; + var Math_clz32=global.Math.clz32; + var Math_fround=global.Math.fround; + var abort=env.abort; + var assert=env.assert; + var enlargeMemory=env.enlargeMemory; + var getTotalMemory=env.getTotalMemory; + var abortOnCannotGrowMemory=env.abortOnCannotGrowMemory; + var abortStackOverflow=env.abortStackOverflow; + var nullFunc_iiii=env.nullFunc_iiii; + var nullFunc_i=env.nullFunc_i; + var nullFunc_vi=env.nullFunc_vi; + var nullFunc_vii=env.nullFunc_vii; + var nullFunc_ii=env.nullFunc_ii; + var nullFunc_viii=env.nullFunc_viii; + var nullFunc_v=env.nullFunc_v; + var nullFunc_iii=env.nullFunc_iii; + var invoke_iiii=env.invoke_iiii; + var invoke_i=env.invoke_i; + var invoke_vi=env.invoke_vi; + var invoke_vii=env.invoke_vii; + var invoke_ii=env.invoke_ii; + var invoke_viii=env.invoke_viii; + var invoke_v=env.invoke_v; + var invoke_iii=env.invoke_iii; + var __spawn_thread=env.__spawn_thread; + var _putenv=env._putenv; + var _emscripten_get_now_is_monotonic=env._emscripten_get_now_is_monotonic; + var _fpathconf=env._fpathconf; + var ___unlock=env.___unlock; + var _emscripten_syscall=env._emscripten_syscall; + var ___assert_fail=env.___assert_fail; + var _utimes=env._utimes; + var ___buildEnvironment=env.___buildEnvironment; + var _emscripten_asm_const_i=env._emscripten_asm_const_i; + var _clock_gettime=env._clock_gettime; + var _emscripten_futex_wait=env._emscripten_futex_wait; + var _tzset=env._tzset; + var ___setErrNo=env.___setErrNo; + var _emscripten_set_current_thread_status_js=env._emscripten_set_current_thread_status_js; + var _pthread_getschedparam=env._pthread_getschedparam; + var _clearenv=env._clearenv; + var _emscripten_futex_wake=env._emscripten_futex_wake; + var _sysconf=env._sysconf; + var _utime=env._utime; + var ___call_main=env.___call_main; + var _emscripten_memcpy_big=env._emscripten_memcpy_big; + var _confstr=env._confstr; + var _getenv=env._getenv; + var ___syscall54=env.___syscall54; + var _emscripten_has_threading_support=env._emscripten_has_threading_support; + var _pthread_create=env._pthread_create; + var _emscripten_get_now=env._emscripten_get_now; + var _chroot=env._chroot; + var ___lock=env.___lock; + var ___syscall6=env.___syscall6; + var _unsetenv=env._unsetenv; + var ___clock_gettime=env.___clock_gettime; + var _gettimeofday=env._gettimeofday; + var _atexit=env._atexit; + var ___syscall140=env.___syscall140; + var _emscripten_set_thread_name_js=env._emscripten_set_thread_name_js; + var _setenv=env._setenv; + var ___syscall146=env.___syscall146; + var _emscripten_conditional_set_current_thread_status_js=env._emscripten_conditional_set_current_thread_status_js; + var Atomics_load=global.Atomics.load; + var Atomics_store=global.Atomics.store; + var Atomics_exchange=global.Atomics.exchange; + var Atomics_compareExchange=global.Atomics.compareExchange; + var Atomics_add=global.Atomics.add; + var Atomics_sub=global.Atomics.sub; + var Atomics_and=global.Atomics.and; + var Atomics_or=global.Atomics.or; + var Atomics_xor=global.Atomics.xor; + var tempFloat = Math_fround(0); + const f0 = Math_fround(0); + + function test() { + var $temp = 0; + $temp = (Atomics_load(HEAP32, 1229)|0); + $temp = (Atomics_load(HEAPU16, 1229)|0); + $temp = (Atomics_store(HEAP32, $temp>>2, 0)|0); + $temp = (Atomics_exchange(HEAP32, $temp>>2, 1)|0); + $temp = (Atomics_compareExchange(HEAP32, $temp>>2, 1, 2)|0); + $temp = (Atomics_add(HEAP32, $temp>>2, 0)|0); + $temp = (Atomics_sub(HEAP32, $temp>>2, 0)|0); + $temp = (Atomics_and(HEAP32, $temp>>2, 0)|0); + $temp = (Atomics_or(HEAP32, $temp>>2, 0)|0); + $temp = (Atomics_xor(HEAP32, $temp>>2, 0)|0); + $temp = (Atomics_xor(HEAPU32, 1024, 0)|0); + $temp = (Atomics_xor(HEAP16, 1024, 0)|0); + $temp = (Atomics_xor(HEAPU8, 1024, 0)|0); + } + + return { test: test }; +}) +; diff --git a/src/binaryen/test/threads.fromasm b/src/binaryen/test/threads.fromasm new file mode 100644 index 0000000000..7aafe4a4b6 --- /dev/null +++ b/src/binaryen/test/threads.fromasm @@ -0,0 +1,69 @@ +(module + (import "env" "memory" (memory $0 (shared 256 256))) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (data (get_global $memoryBase) "threads.asm.js") + (export "test" (func $test)) + (func $test (; 0 ;) + (local $0 i32) + (drop + (i32.atomic.load + (i32.const 4916) + ) + ) + (drop + (i32.atomic.rmw.xor + (i32.atomic.rmw.or + (i32.atomic.rmw.and + (i32.atomic.rmw.sub + (i32.atomic.rmw.add + (i32.atomic.rmw.cmpxchg + (block (result i32) + (i32.atomic.store + (i32.atomic.load16_u + (i32.const 2458) + ) + (tee_local $0 + (i32.const 0) + ) + ) + (i32.atomic.rmw.xchg + (get_local $0) + (i32.const 1) + ) + ) + (i32.const 1) + (i32.const 2) + ) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.const 0) + ) + ) + (drop + (i32.atomic.rmw.xor + (i32.const 4096) + (i32.const 0) + ) + ) + (drop + (i32.atomic.rmw16_u.xor + (i32.const 2048) + (i32.const 0) + ) + ) + (drop + (i32.atomic.rmw8_u.xor + (i32.const 1024) + (i32.const 0) + ) + ) + ) +) diff --git a/src/binaryen/test/threads.fromasm.clamp b/src/binaryen/test/threads.fromasm.clamp new file mode 100644 index 0000000000..7aafe4a4b6 --- /dev/null +++ b/src/binaryen/test/threads.fromasm.clamp @@ -0,0 +1,69 @@ +(module + (import "env" "memory" (memory $0 (shared 256 256))) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (data (get_global $memoryBase) "threads.asm.js") + (export "test" (func $test)) + (func $test (; 0 ;) + (local $0 i32) + (drop + (i32.atomic.load + (i32.const 4916) + ) + ) + (drop + (i32.atomic.rmw.xor + (i32.atomic.rmw.or + (i32.atomic.rmw.and + (i32.atomic.rmw.sub + (i32.atomic.rmw.add + (i32.atomic.rmw.cmpxchg + (block (result i32) + (i32.atomic.store + (i32.atomic.load16_u + (i32.const 2458) + ) + (tee_local $0 + (i32.const 0) + ) + ) + (i32.atomic.rmw.xchg + (get_local $0) + (i32.const 1) + ) + ) + (i32.const 1) + (i32.const 2) + ) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.const 0) + ) + ) + (drop + (i32.atomic.rmw.xor + (i32.const 4096) + (i32.const 0) + ) + ) + (drop + (i32.atomic.rmw16_u.xor + (i32.const 2048) + (i32.const 0) + ) + ) + (drop + (i32.atomic.rmw8_u.xor + (i32.const 1024) + (i32.const 0) + ) + ) + ) +) diff --git a/src/binaryen/test/threads.fromasm.clamp.no-opts b/src/binaryen/test/threads.fromasm.clamp.no-opts new file mode 100644 index 0000000000..512d6bac3f --- /dev/null +++ b/src/binaryen/test/threads.fromasm.clamp.no-opts @@ -0,0 +1,122 @@ +(module + (import "env" "DYNAMICTOP_PTR" (global $DYNAMICTOP_PTR$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "ABORT" (global $ABORT$asm2wasm$import i32)) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "global" "NaN" (global $nan$asm2wasm$import f64)) + (import "global" "Infinity" (global $inf$asm2wasm$import f64)) + (import "env" "memory" (memory $0 (shared 256 256))) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $DYNAMICTOP_PTR (mut i32) (get_global $DYNAMICTOP_PTR$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $ABORT (mut i32) (get_global $ABORT$asm2wasm$import)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $setjmpId (mut i32) (i32.const 0)) + (global $undef (mut i32) (i32.const 0)) + (global $nan (mut f64) (get_global $nan$asm2wasm$import)) + (global $inf (mut f64) (get_global $inf$asm2wasm$import)) + (global $tempInt (mut i32) (i32.const 0)) + (global $tempBigInt (mut i32) (i32.const 0)) + (global $tempBigIntS (mut i32) (i32.const 0)) + (global $tempValue (mut i32) (i32.const 0)) + (global $tempDouble (mut f64) (f64.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (global $__pthread_ptr (mut i32) (i32.const 0)) + (global $__pthread_is_main_runtime_thread (mut i32) (i32.const 0)) + (global $__pthread_is_main_browser_thread (mut i32) (i32.const 0)) + (global $tempFloat (mut f32) (f32.const 0)) + (global $f0 (mut f32) (f32.const 0)) + (export "test" (func $test)) + (func $test (; 0 ;) + (local $$temp i32) + (local $1 i32) + (set_local $$temp + (i32.atomic.load + (i32.const 4916) + ) + ) + (set_local $$temp + (i32.atomic.load16_u + (i32.const 2458) + ) + ) + (set_local $$temp + (block (result i32) + (i32.atomic.store + (get_local $$temp) + (tee_local $1 + (i32.const 0) + ) + ) + (get_local $1) + ) + ) + (set_local $$temp + (i32.atomic.rmw.xchg + (get_local $$temp) + (i32.const 1) + ) + ) + (set_local $$temp + (i32.atomic.rmw.cmpxchg + (get_local $$temp) + (i32.const 1) + (i32.const 2) + ) + ) + (set_local $$temp + (i32.atomic.rmw.add + (get_local $$temp) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw.sub + (get_local $$temp) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw.and + (get_local $$temp) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw.or + (get_local $$temp) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw.xor + (get_local $$temp) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw.xor + (i32.const 4096) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw16_u.xor + (i32.const 2048) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw8_u.xor + (i32.const 1024) + (i32.const 0) + ) + ) + ) +) diff --git a/src/binaryen/test/threads.fromasm.imprecise b/src/binaryen/test/threads.fromasm.imprecise new file mode 100644 index 0000000000..546f27370e --- /dev/null +++ b/src/binaryen/test/threads.fromasm.imprecise @@ -0,0 +1,68 @@ +(module + (import "env" "memory" (memory $0 (shared 256 256))) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "test" (func $test)) + (func $test (; 0 ;) + (local $0 i32) + (drop + (i32.atomic.load + (i32.const 4916) + ) + ) + (drop + (i32.atomic.rmw.xor + (i32.atomic.rmw.or + (i32.atomic.rmw.and + (i32.atomic.rmw.sub + (i32.atomic.rmw.add + (i32.atomic.rmw.cmpxchg + (block (result i32) + (i32.atomic.store + (i32.atomic.load16_u + (i32.const 2458) + ) + (tee_local $0 + (i32.const 0) + ) + ) + (i32.atomic.rmw.xchg + (get_local $0) + (i32.const 1) + ) + ) + (i32.const 1) + (i32.const 2) + ) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.const 0) + ) + ) + (drop + (i32.atomic.rmw.xor + (i32.const 4096) + (i32.const 0) + ) + ) + (drop + (i32.atomic.rmw16_u.xor + (i32.const 2048) + (i32.const 0) + ) + ) + (drop + (i32.atomic.rmw8_u.xor + (i32.const 1024) + (i32.const 0) + ) + ) + ) +) diff --git a/src/binaryen/test/threads.fromasm.imprecise.no-opts b/src/binaryen/test/threads.fromasm.imprecise.no-opts new file mode 100644 index 0000000000..512d6bac3f --- /dev/null +++ b/src/binaryen/test/threads.fromasm.imprecise.no-opts @@ -0,0 +1,122 @@ +(module + (import "env" "DYNAMICTOP_PTR" (global $DYNAMICTOP_PTR$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "ABORT" (global $ABORT$asm2wasm$import i32)) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "global" "NaN" (global $nan$asm2wasm$import f64)) + (import "global" "Infinity" (global $inf$asm2wasm$import f64)) + (import "env" "memory" (memory $0 (shared 256 256))) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $DYNAMICTOP_PTR (mut i32) (get_global $DYNAMICTOP_PTR$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $ABORT (mut i32) (get_global $ABORT$asm2wasm$import)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $setjmpId (mut i32) (i32.const 0)) + (global $undef (mut i32) (i32.const 0)) + (global $nan (mut f64) (get_global $nan$asm2wasm$import)) + (global $inf (mut f64) (get_global $inf$asm2wasm$import)) + (global $tempInt (mut i32) (i32.const 0)) + (global $tempBigInt (mut i32) (i32.const 0)) + (global $tempBigIntS (mut i32) (i32.const 0)) + (global $tempValue (mut i32) (i32.const 0)) + (global $tempDouble (mut f64) (f64.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (global $__pthread_ptr (mut i32) (i32.const 0)) + (global $__pthread_is_main_runtime_thread (mut i32) (i32.const 0)) + (global $__pthread_is_main_browser_thread (mut i32) (i32.const 0)) + (global $tempFloat (mut f32) (f32.const 0)) + (global $f0 (mut f32) (f32.const 0)) + (export "test" (func $test)) + (func $test (; 0 ;) + (local $$temp i32) + (local $1 i32) + (set_local $$temp + (i32.atomic.load + (i32.const 4916) + ) + ) + (set_local $$temp + (i32.atomic.load16_u + (i32.const 2458) + ) + ) + (set_local $$temp + (block (result i32) + (i32.atomic.store + (get_local $$temp) + (tee_local $1 + (i32.const 0) + ) + ) + (get_local $1) + ) + ) + (set_local $$temp + (i32.atomic.rmw.xchg + (get_local $$temp) + (i32.const 1) + ) + ) + (set_local $$temp + (i32.atomic.rmw.cmpxchg + (get_local $$temp) + (i32.const 1) + (i32.const 2) + ) + ) + (set_local $$temp + (i32.atomic.rmw.add + (get_local $$temp) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw.sub + (get_local $$temp) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw.and + (get_local $$temp) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw.or + (get_local $$temp) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw.xor + (get_local $$temp) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw.xor + (i32.const 4096) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw16_u.xor + (i32.const 2048) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw8_u.xor + (i32.const 1024) + (i32.const 0) + ) + ) + ) +) diff --git a/src/binaryen/test/threads.fromasm.no-opts b/src/binaryen/test/threads.fromasm.no-opts new file mode 100644 index 0000000000..512d6bac3f --- /dev/null +++ b/src/binaryen/test/threads.fromasm.no-opts @@ -0,0 +1,122 @@ +(module + (import "env" "DYNAMICTOP_PTR" (global $DYNAMICTOP_PTR$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "ABORT" (global $ABORT$asm2wasm$import i32)) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "global" "NaN" (global $nan$asm2wasm$import f64)) + (import "global" "Infinity" (global $inf$asm2wasm$import f64)) + (import "env" "memory" (memory $0 (shared 256 256))) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $DYNAMICTOP_PTR (mut i32) (get_global $DYNAMICTOP_PTR$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $ABORT (mut i32) (get_global $ABORT$asm2wasm$import)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $setjmpId (mut i32) (i32.const 0)) + (global $undef (mut i32) (i32.const 0)) + (global $nan (mut f64) (get_global $nan$asm2wasm$import)) + (global $inf (mut f64) (get_global $inf$asm2wasm$import)) + (global $tempInt (mut i32) (i32.const 0)) + (global $tempBigInt (mut i32) (i32.const 0)) + (global $tempBigIntS (mut i32) (i32.const 0)) + (global $tempValue (mut i32) (i32.const 0)) + (global $tempDouble (mut f64) (f64.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (global $__pthread_ptr (mut i32) (i32.const 0)) + (global $__pthread_is_main_runtime_thread (mut i32) (i32.const 0)) + (global $__pthread_is_main_browser_thread (mut i32) (i32.const 0)) + (global $tempFloat (mut f32) (f32.const 0)) + (global $f0 (mut f32) (f32.const 0)) + (export "test" (func $test)) + (func $test (; 0 ;) + (local $$temp i32) + (local $1 i32) + (set_local $$temp + (i32.atomic.load + (i32.const 4916) + ) + ) + (set_local $$temp + (i32.atomic.load16_u + (i32.const 2458) + ) + ) + (set_local $$temp + (block (result i32) + (i32.atomic.store + (get_local $$temp) + (tee_local $1 + (i32.const 0) + ) + ) + (get_local $1) + ) + ) + (set_local $$temp + (i32.atomic.rmw.xchg + (get_local $$temp) + (i32.const 1) + ) + ) + (set_local $$temp + (i32.atomic.rmw.cmpxchg + (get_local $$temp) + (i32.const 1) + (i32.const 2) + ) + ) + (set_local $$temp + (i32.atomic.rmw.add + (get_local $$temp) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw.sub + (get_local $$temp) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw.and + (get_local $$temp) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw.or + (get_local $$temp) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw.xor + (get_local $$temp) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw.xor + (i32.const 4096) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw16_u.xor + (i32.const 2048) + (i32.const 0) + ) + ) + (set_local $$temp + (i32.atomic.rmw8_u.xor + (i32.const 1024) + (i32.const 0) + ) + ) + ) +) diff --git a/src/binaryen/test/threads.wasm-only.asm.js b/src/binaryen/test/threads.wasm-only.asm.js new file mode 100644 index 0000000000..7c40665f48 --- /dev/null +++ b/src/binaryen/test/threads.wasm-only.asm.js @@ -0,0 +1,48 @@ +// +// Test wasm-only builds. In this case, fastcomp emits code that is +// not asm.js, it will only ever run as wasm, and contains special intrinsics for +// asm2wasm that map LLVM IR into i64s. +// + +function asm(global, env, buffer) { + "use asm"; + + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + + var STACKTOP = env.STACKTOP | 0; + + var fround = global.Math.fround; + var Math_imul = global.Math.imul; + + var illegalImport = env.illegalImport; + var illegalImportResult = env.illegalImportResult; + + var _fabsf = env._fabsf; + var do_i64 = env.do_i64; + var abort = env.abort; + + function test64() { + var x = i64(), y = i64(), z = 0; // define i64 variables using special intrinsic + var int32 = 0, float32 = fround(0), float64 = +0; + i64_atomics_store(4656, i64_const(92, 0))|0; + x = i64_atomics_load(4656); + y = i64_atomics_add(int32, i64_const(26, 0))|0; + x = i64_atomics_sub(1024, y)|0; + y = i64_atomics_and(1024, x)|0; + x = i64_atomics_or(1024, y)|0; + y = i64_atomics_xor(1024, x)|0; + x = i64_atomics_exchange(1024, y)|0; + y = i64_atomics_compareExchange(1024, x, y)|0; + return x; + } + + return { test64: test64 }; +} + diff --git a/src/binaryen/test/threads.wasm-only.fromasm b/src/binaryen/test/threads.wasm-only.fromasm new file mode 100644 index 0000000000..7ad7acf492 --- /dev/null +++ b/src/binaryen/test/threads.wasm-only.fromasm @@ -0,0 +1,70 @@ +(module + (import "env" "memory" (memory $0 (shared 256 256))) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $tempRet0 (mut i32) (i32.const 0)) + (data (get_global $memoryBase) "threads.wasm-only.asm.js") + (export "test64" (func $legalstub$test64)) + (func $test64 (; 0 ;) (result i64) + (local $0 i64) + (local $1 i64) + (local $2 i32) + (i64.atomic.store + (i32.const 4656) + (i64.const 92) + ) + (drop + (i64.atomic.load + (i32.const 4656) + ) + ) + (drop + (i64.atomic.rmw.cmpxchg + (i32.const 1024) + (tee_local $1 + (i64.atomic.rmw.xchg + (i32.const 1024) + (tee_local $0 + (i64.atomic.rmw.xor + (i32.const 1024) + (i64.atomic.rmw.or + (i32.const 1024) + (i64.atomic.rmw.and + (i32.const 1024) + (i64.atomic.rmw.sub + (i32.const 1024) + (i64.atomic.rmw.add + (get_local $2) + (i64.const 26) + ) + ) + ) + ) + ) + ) + ) + ) + (get_local $0) + ) + ) + (get_local $1) + ) + (func $legalstub$test64 (; 1 ;) (result i32) + (local $0 i64) + (set_local $0 + (call $test64) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $0) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $0) + ) + ) +) diff --git a/src/binaryen/test/threads.wasm-only.fromasm.clamp b/src/binaryen/test/threads.wasm-only.fromasm.clamp new file mode 100644 index 0000000000..7ad7acf492 --- /dev/null +++ b/src/binaryen/test/threads.wasm-only.fromasm.clamp @@ -0,0 +1,70 @@ +(module + (import "env" "memory" (memory $0 (shared 256 256))) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $tempRet0 (mut i32) (i32.const 0)) + (data (get_global $memoryBase) "threads.wasm-only.asm.js") + (export "test64" (func $legalstub$test64)) + (func $test64 (; 0 ;) (result i64) + (local $0 i64) + (local $1 i64) + (local $2 i32) + (i64.atomic.store + (i32.const 4656) + (i64.const 92) + ) + (drop + (i64.atomic.load + (i32.const 4656) + ) + ) + (drop + (i64.atomic.rmw.cmpxchg + (i32.const 1024) + (tee_local $1 + (i64.atomic.rmw.xchg + (i32.const 1024) + (tee_local $0 + (i64.atomic.rmw.xor + (i32.const 1024) + (i64.atomic.rmw.or + (i32.const 1024) + (i64.atomic.rmw.and + (i32.const 1024) + (i64.atomic.rmw.sub + (i32.const 1024) + (i64.atomic.rmw.add + (get_local $2) + (i64.const 26) + ) + ) + ) + ) + ) + ) + ) + ) + (get_local $0) + ) + ) + (get_local $1) + ) + (func $legalstub$test64 (; 1 ;) (result i32) + (local $0 i64) + (set_local $0 + (call $test64) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $0) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $0) + ) + ) +) diff --git a/src/binaryen/test/threads.wasm-only.fromasm.clamp.no-opts b/src/binaryen/test/threads.wasm-only.fromasm.clamp.no-opts new file mode 100644 index 0000000000..abaca20100 --- /dev/null +++ b/src/binaryen/test/threads.wasm-only.fromasm.clamp.no-opts @@ -0,0 +1,90 @@ +(module + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "memory" (memory $0 (shared 256 256))) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $tempRet0 (mut i32) (i32.const 0)) + (export "test64" (func $legalstub$test64)) + (func $test64 (; 0 ;) (result i64) + (local $x i64) + (local $y i64) + (local $z i32) + (local $int32 i32) + (local $float32 f32) + (local $float64 f64) + (i64.atomic.store + (i32.const 4656) + (i64.const 92) + ) + (set_local $x + (i64.atomic.load + (i32.const 4656) + ) + ) + (set_local $y + (i64.atomic.rmw.add + (get_local $int32) + (i64.const 26) + ) + ) + (set_local $x + (i64.atomic.rmw.sub + (i32.const 1024) + (get_local $y) + ) + ) + (set_local $y + (i64.atomic.rmw.and + (i32.const 1024) + (get_local $x) + ) + ) + (set_local $x + (i64.atomic.rmw.or + (i32.const 1024) + (get_local $y) + ) + ) + (set_local $y + (i64.atomic.rmw.xor + (i32.const 1024) + (get_local $x) + ) + ) + (set_local $x + (i64.atomic.rmw.xchg + (i32.const 1024) + (get_local $y) + ) + ) + (set_local $y + (i64.atomic.rmw.cmpxchg + (i32.const 1024) + (get_local $x) + (get_local $y) + ) + ) + (return + (get_local $x) + ) + ) + (func $legalstub$test64 (; 1 ;) (result i32) + (local $0 i64) + (set_local $0 + (call $test64) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $0) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $0) + ) + ) +) diff --git a/src/binaryen/test/threads.wasm-only.fromasm.imprecise b/src/binaryen/test/threads.wasm-only.fromasm.imprecise new file mode 100644 index 0000000000..672653913c --- /dev/null +++ b/src/binaryen/test/threads.wasm-only.fromasm.imprecise @@ -0,0 +1,69 @@ +(module + (import "env" "memory" (memory $0 (shared 256 256))) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $tempRet0 (mut i32) (i32.const 0)) + (export "test64" (func $legalstub$test64)) + (func $test64 (; 0 ;) (result i64) + (local $0 i64) + (local $1 i64) + (local $2 i32) + (i64.atomic.store + (i32.const 4656) + (i64.const 92) + ) + (drop + (i64.atomic.load + (i32.const 4656) + ) + ) + (drop + (i64.atomic.rmw.cmpxchg + (i32.const 1024) + (tee_local $1 + (i64.atomic.rmw.xchg + (i32.const 1024) + (tee_local $0 + (i64.atomic.rmw.xor + (i32.const 1024) + (i64.atomic.rmw.or + (i32.const 1024) + (i64.atomic.rmw.and + (i32.const 1024) + (i64.atomic.rmw.sub + (i32.const 1024) + (i64.atomic.rmw.add + (get_local $2) + (i64.const 26) + ) + ) + ) + ) + ) + ) + ) + ) + (get_local $0) + ) + ) + (get_local $1) + ) + (func $legalstub$test64 (; 1 ;) (result i32) + (local $0 i64) + (set_local $0 + (call $test64) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $0) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $0) + ) + ) +) diff --git a/src/binaryen/test/threads.wasm-only.fromasm.imprecise.no-opts b/src/binaryen/test/threads.wasm-only.fromasm.imprecise.no-opts new file mode 100644 index 0000000000..abaca20100 --- /dev/null +++ b/src/binaryen/test/threads.wasm-only.fromasm.imprecise.no-opts @@ -0,0 +1,90 @@ +(module + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "memory" (memory $0 (shared 256 256))) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $tempRet0 (mut i32) (i32.const 0)) + (export "test64" (func $legalstub$test64)) + (func $test64 (; 0 ;) (result i64) + (local $x i64) + (local $y i64) + (local $z i32) + (local $int32 i32) + (local $float32 f32) + (local $float64 f64) + (i64.atomic.store + (i32.const 4656) + (i64.const 92) + ) + (set_local $x + (i64.atomic.load + (i32.const 4656) + ) + ) + (set_local $y + (i64.atomic.rmw.add + (get_local $int32) + (i64.const 26) + ) + ) + (set_local $x + (i64.atomic.rmw.sub + (i32.const 1024) + (get_local $y) + ) + ) + (set_local $y + (i64.atomic.rmw.and + (i32.const 1024) + (get_local $x) + ) + ) + (set_local $x + (i64.atomic.rmw.or + (i32.const 1024) + (get_local $y) + ) + ) + (set_local $y + (i64.atomic.rmw.xor + (i32.const 1024) + (get_local $x) + ) + ) + (set_local $x + (i64.atomic.rmw.xchg + (i32.const 1024) + (get_local $y) + ) + ) + (set_local $y + (i64.atomic.rmw.cmpxchg + (i32.const 1024) + (get_local $x) + (get_local $y) + ) + ) + (return + (get_local $x) + ) + ) + (func $legalstub$test64 (; 1 ;) (result i32) + (local $0 i64) + (set_local $0 + (call $test64) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $0) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $0) + ) + ) +) diff --git a/src/binaryen/test/threads.wasm-only.fromasm.no-opts b/src/binaryen/test/threads.wasm-only.fromasm.no-opts new file mode 100644 index 0000000000..abaca20100 --- /dev/null +++ b/src/binaryen/test/threads.wasm-only.fromasm.no-opts @@ -0,0 +1,90 @@ +(module + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "memory" (memory $0 (shared 256 256))) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $tempRet0 (mut i32) (i32.const 0)) + (export "test64" (func $legalstub$test64)) + (func $test64 (; 0 ;) (result i64) + (local $x i64) + (local $y i64) + (local $z i32) + (local $int32 i32) + (local $float32 f32) + (local $float64 f64) + (i64.atomic.store + (i32.const 4656) + (i64.const 92) + ) + (set_local $x + (i64.atomic.load + (i32.const 4656) + ) + ) + (set_local $y + (i64.atomic.rmw.add + (get_local $int32) + (i64.const 26) + ) + ) + (set_local $x + (i64.atomic.rmw.sub + (i32.const 1024) + (get_local $y) + ) + ) + (set_local $y + (i64.atomic.rmw.and + (i32.const 1024) + (get_local $x) + ) + ) + (set_local $x + (i64.atomic.rmw.or + (i32.const 1024) + (get_local $y) + ) + ) + (set_local $y + (i64.atomic.rmw.xor + (i32.const 1024) + (get_local $x) + ) + ) + (set_local $x + (i64.atomic.rmw.xchg + (i32.const 1024) + (get_local $y) + ) + ) + (set_local $y + (i64.atomic.rmw.cmpxchg + (i32.const 1024) + (get_local $x) + (get_local $y) + ) + ) + (return + (get_local $x) + ) + ) + (func $legalstub$test64 (; 1 ;) (result i32) + (local $0 i64) + (set_local $0 + (call $test64) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $0) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $0) + ) + ) +) diff --git a/src/binaryen/test/torture-s/20000112-1.c.s b/src/binaryen/test/torture-s/20000112-1.c.s new file mode 100644 index 0000000000..c91f127d4f --- /dev/null +++ b/src/binaryen/test/torture-s/20000112-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20000112-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000113-1.c.s b/src/binaryen/test/torture-s/20000113-1.c.s new file mode 100644 index 0000000000..d3e3e6a9a8 --- /dev/null +++ b/src/binaryen/test/torture-s/20000113-1.c.s @@ -0,0 +1,58 @@ + .text + .file "20000113-1.c" + .section .text.foobar,"ax",@progbits + .hidden foobar # -- Begin function foobar + .globl foobar + .type foobar,@function +foobar: # @foobar + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push1=, 1 + i32.and $push11=, $0, $pop1 + tee_local $push10=, $0=, $pop11 + i32.eqz $push14=, $pop10 + br_if 0, $pop14 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.const $push0=, 3 + i32.and $push13=, $1, $pop0 + tee_local $push12=, $1=, $pop13 + i32.sub $push2=, $pop12, $0 + i32.mul $push3=, $pop2, $1 + i32.add $push4=, $pop3, $2 + i32.const $push5=, 7 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 5 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#2: # %if.end + i32.const $push9=, 0 + call exit@FUNCTION, $pop9 + unreachable +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foobar, .Lfunc_end0-foobar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000121-1.c.s b/src/binaryen/test/torture-s/20000121-1.c.s new file mode 100644 index 0000000000..01bf7aba22 --- /dev/null +++ b/src/binaryen/test/torture-s/20000121-1.c.s @@ -0,0 +1,41 @@ + .text + .file "20000121-1.c" + .section .text.big,"ax",@progbits + .hidden big # -- Begin function big + .globl big + .type big,@function +big: # @big + .param i64 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size big, .Lfunc_end0-big + # -- End function + .section .text.doit,"ax",@progbits + .hidden doit # -- Begin function doit + .globl doit + .type doit,@function +doit: # @doit + .param i32, i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end1: + .size doit, .Lfunc_end1-doit + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20000205-1.c.s b/src/binaryen/test/torture-s/20000205-1.c.s new file mode 100644 index 0000000000..a9744dd7a4 --- /dev/null +++ b/src/binaryen/test/torture-s/20000205-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20000205-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000217-1.c.s b/src/binaryen/test/torture-s/20000217-1.c.s new file mode 100644 index 0000000000..682b89c977 --- /dev/null +++ b/src/binaryen/test/torture-s/20000217-1.c.s @@ -0,0 +1,43 @@ + .text + .file "20000217-1.c" + .section .text.showbug,"ax",@progbits + .hidden showbug # -- Begin function showbug + .globl showbug + .type showbug,@function +showbug: # @showbug + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.load16_u $push1=, 0($1) + i32.load16_u $push0=, 0($0) + i32.add $push2=, $pop1, $pop0 + i32.const $push3=, 65528 + i32.add $push9=, $pop2, $pop3 + tee_local $push8=, $1=, $pop9 + i32.store16 0($0), $pop8 + i32.const $push7=, 65528 + i32.and $push4=, $1, $pop7 + i32.const $push5=, 7 + i32.gt_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size showbug, .Lfunc_end0-showbug + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000223-1.c.s b/src/binaryen/test/torture-s/20000223-1.c.s new file mode 100644 index 0000000000..d63634b84e --- /dev/null +++ b/src/binaryen/test/torture-s/20000223-1.c.s @@ -0,0 +1,41 @@ + .text + .file "20000223-1.c" + .section .text.check,"ax",@progbits + .hidden check # -- Begin function check + .globl check + .type check,@function +check: # @check + .param i32, i32 +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.sub $push1=, $pop0, $1 + i32.and $push2=, $pop1, $1 + i32.ne $push3=, $pop2, $1 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size check, .Lfunc_end0-check + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20000224-1.c.s b/src/binaryen/test/torture-s/20000224-1.c.s new file mode 100644 index 0000000000..76cf4ccabd --- /dev/null +++ b/src/binaryen/test/torture-s/20000224-1.c.s @@ -0,0 +1,98 @@ + .text + .file "20000224-1.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .result i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.const $push10=, 0 + i32.load $push9=, loop_1($pop10) + tee_local $push8=, $0=, $pop9 + i32.const $push7=, 1 + i32.lt_s $push0=, $pop8, $pop7 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %while.body.lr.ph + i32.const $push12=, 0 + i32.load $3=, flag($pop12) + i32.const $push11=, 0 + i32.load $1=, loop_2($pop11) + i32.const $4=, 0 +.LBB0_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push19=, 1 + i32.and $2=, $3, $pop19 + i32.const $push18=, 1 + i32.add $3=, $3, $pop18 + i32.const $push17=, 0 + i32.sub $push3=, $pop17, $2 + i32.const $push16=, 0 + i32.const $push15=, 1 + i32.lt_s $push1=, $1, $pop15 + i32.select $push2=, $pop16, $1, $pop1 + i32.and $push4=, $pop3, $pop2 + i32.add $push14=, $4, $pop4 + tee_local $push13=, $4=, $pop14 + i32.gt_s $push5=, $0, $pop13 + br_if 0, $pop5 # 0: up to label1 +# BB#3: # %while.cond.while.end_crit_edge + end_loop + i32.const $push6=, 0 + i32.store flag($pop6), $3 +.LBB0_4: # %while.end + end_block # label0: + i32.const $push20=, 1 + # fallthrough-return: $pop20 + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.call $drop=, test@FUNCTION + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden loop_1 # @loop_1 + .type loop_1,@object + .section .data.loop_1,"aw",@progbits + .globl loop_1 + .p2align 2 +loop_1: + .int32 100 # 0x64 + .size loop_1, 4 + + .hidden loop_2 # @loop_2 + .type loop_2,@object + .section .data.loop_2,"aw",@progbits + .globl loop_2 + .p2align 2 +loop_2: + .int32 7 # 0x7 + .size loop_2, 4 + + .hidden flag # @flag + .type flag,@object + .section .bss.flag,"aw",@nobits + .globl flag + .p2align 2 +flag: + .int32 0 # 0x0 + .size flag, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000225-1.c.s b/src/binaryen/test/torture-s/20000225-1.c.s new file mode 100644 index 0000000000..39b2217659 --- /dev/null +++ b/src/binaryen/test/torture-s/20000225-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20000225-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000227-1.c.s b/src/binaryen/test/torture-s/20000227-1.c.s new file mode 100644 index 0000000000..0ea972bd04 --- /dev/null +++ b/src/binaryen/test/torture-s/20000227-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20000227-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20000313-1.c.s b/src/binaryen/test/torture-s/20000313-1.c.s new file mode 100644 index 0000000000..ff2f0e6ca3 --- /dev/null +++ b/src/binaryen/test/torture-s/20000313-1.c.s @@ -0,0 +1,37 @@ + .text + .file "20000313-1.c" + .section .text.buggy,"ax",@progbits + .hidden buggy # -- Begin function buggy + .globl buggy + .type buggy,@function +buggy: # @buggy + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.load $1=, 0($0) + i32.const $push0=, 0 + i32.store 0($0), $pop0 + i32.const $push1=, -1 + i32.const $push3=, 0 + i32.select $push2=, $pop1, $pop3, $1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size buggy, .Lfunc_end0-buggy + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end3 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20000314-1.c.s b/src/binaryen/test/torture-s/20000314-1.c.s new file mode 100644 index 0000000000..614c0bc882 --- /dev/null +++ b/src/binaryen/test/torture-s/20000314-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20000314-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000314-2.c.s b/src/binaryen/test/torture-s/20000314-2.c.s new file mode 100644 index 0000000000..d8bb84775f --- /dev/null +++ b/src/binaryen/test/torture-s/20000314-2.c.s @@ -0,0 +1,47 @@ + .text + .file "20000314-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push1=, 0 + i32.load $push0=, a($pop1) + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.then + call abort@FUNCTION + unreachable +.LBB0_2: # %if.end + end_block # label0: + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden bigconst # @bigconst + .type bigconst,@object + .section .rodata.bigconst,"a",@progbits + .globl bigconst + .p2align 3 +bigconst: + .int64 17179869184 # 0x400000000 + .size bigconst, 8 + + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 1 # 0x1 + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000314-3.c.s b/src/binaryen/test/torture-s/20000314-3.c.s new file mode 100644 index 0000000000..fe08c27331 --- /dev/null +++ b/src/binaryen/test/torture-s/20000314-3.c.s @@ -0,0 +1,19 @@ + .text + .file "20000314-3.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000402-1.c.s b/src/binaryen/test/torture-s/20000402-1.c.s new file mode 100644 index 0000000000..34ea67d257 --- /dev/null +++ b/src/binaryen/test/torture-s/20000402-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20000402-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000403-1.c.s b/src/binaryen/test/torture-s/20000403-1.c.s new file mode 100644 index 0000000000..c4b2f990ae --- /dev/null +++ b/src/binaryen/test/torture-s/20000403-1.c.s @@ -0,0 +1,88 @@ + .text + .file "20000403-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push8=, 0 + i32.load $push0=, aa($pop8) + i32.const $push1=, 4096 + i32.add $push2=, $pop0, $pop1 + i32.const $push7=, 0 + i32.load $push3=, bb($pop7) + i32.sub $push4=, $pop2, $pop3 + i32.const $push6=, 0 + i32.gt_s $push5=, $pop4, $pop6 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %if.then + call abort@FUNCTION + unreachable +.LBB0_2: # %if.end + end_block # label0: + i32.const $push9=, 0 + call exit@FUNCTION, $pop9 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.seqgt,"ax",@progbits + .hidden seqgt # -- Begin function seqgt + .globl seqgt + .type seqgt,@function +seqgt: # @seqgt + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + i32.add $push0=, $1, $0 + i32.sub $push1=, $pop0, $2 + i32.const $push2=, 0 + i32.gt_s $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size seqgt, .Lfunc_end1-seqgt + # -- End function + .section .text.seqgt2,"ax",@progbits + .hidden seqgt2 # -- Begin function seqgt2 + .globl seqgt2 + .type seqgt2,@function +seqgt2: # @seqgt2 + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + i32.add $push0=, $1, $0 + i32.sub $push1=, $pop0, $2 + i32.const $push2=, 0 + i32.gt_s $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size seqgt2, .Lfunc_end2-seqgt2 + # -- End function + .hidden aa # @aa + .type aa,@object + .section .data.aa,"aw",@progbits + .globl aa + .p2align 2 +aa: + .int32 2147479553 # 0x7ffff001 + .size aa, 4 + + .hidden bb # @bb + .type bb,@object + .section .data.bb,"aw",@progbits + .globl bb + .p2align 2 +bb: + .int32 2147479553 # 0x7ffff001 + .size bb, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000412-1.c.s b/src/binaryen/test/torture-s/20000412-1.c.s new file mode 100644 index 0000000000..b7de285396 --- /dev/null +++ b/src/binaryen/test/torture-s/20000412-1.c.s @@ -0,0 +1,67 @@ + .text + .file "20000412-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_s $push1=, i($pop0) + i32.const $push2=, 2 + i32.shl $push3=, $pop1, $pop2 + i32.const $push4=, wordlist+828 + i32.add $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load16_u $push0=, i($pop3) + i32.const $push1=, 65535 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden i # @i + .type i,@object + .section .data.i,"aw",@progbits + .globl i + .p2align 1 +i: + .int16 65535 # 0xffff + .size i, 2 + + .hidden wordlist # @wordlist + .type wordlist,@object + .section .rodata.wordlist,"a",@progbits + .globl wordlist + .p2align 4 +wordlist: + .skip 828 + .size wordlist, 828 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000412-2.c.s b/src/binaryen/test/torture-s/20000412-2.c.s new file mode 100644 index 0000000000..3e2937a964 --- /dev/null +++ b/src/binaryen/test/torture-s/20000412-2.c.s @@ -0,0 +1,76 @@ + .text + .file "20000412-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push12=, $pop2, $pop4 + tee_local $push11=, $2=, $pop12 + i32.store __stack_pointer($pop5), $pop11 + i32.store 12($2), $0 + block + block + i32.eqz $push13=, $0 + br_if 0, $pop13 # 0: down to label1 +# BB#1: # %if.end + i32.const $push0=, -1 + i32.add $push1=, $0, $pop0 + i32.const $push9=, 12 + i32.add $push10=, $2, $pop9 + i32.call $0=, f@FUNCTION, $pop1, $pop10 + br 1 # 1: down to label0 +.LBB0_2: # %if.then + end_block # label1: + i32.load $0=, 0($1) +.LBB0_3: # %cleanup + end_block # label0: + i32.const $push8=, 0 + i32.const $push6=, 16 + i32.add $push7=, $2, $pop6 + i32.store __stack_pointer($pop8), $pop7 + copy_local $push14=, $0 + # fallthrough-return: $pop14 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 100 + i32.const $push4=, 0 + i32.call $push1=, f@FUNCTION, $pop0, $pop4 + i32.const $push2=, 1 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label2 +# BB#1: # %if.end + i32.const $push5=, 0 + call exit@FUNCTION, $pop5 + unreachable +.LBB1_2: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000412-3.c.s b/src/binaryen/test/torture-s/20000412-3.c.s new file mode 100644 index 0000000000..e2dc13f73f --- /dev/null +++ b/src/binaryen/test/torture-s/20000412-3.c.s @@ -0,0 +1,59 @@ + .text + .file "20000412-3.c" + .section .text.z,"ax",@progbits + .hidden z # -- Begin function z + .globl z + .type z,@function +z: # @z + .result i32 +# BB#0: # %f.exit + i32.const $push0=, 96 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size z, .Lfunc_end0-z + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $2=, 70 + block + i32.load8_u $push1=, 0($0) + i32.load8_u $push0=, 0($1) + i32.ne $push2=, $pop1, $pop0 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.load8_s $push4=, 1($1) + i32.load8_s $push3=, 1($0) + i32.add $2=, $pop4, $pop3 +.LBB2_2: # %return + end_block # label0: + copy_local $push5=, $2 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end2: + .size f, .Lfunc_end2-f + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000412-4.c.s b/src/binaryen/test/torture-s/20000412-4.c.s new file mode 100644 index 0000000000..0e75be40ba --- /dev/null +++ b/src/binaryen/test/torture-s/20000412-4.c.s @@ -0,0 +1,79 @@ + .text + .file "20000412-4.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32, i32, i32 + .local i32, i32 +# BB#0: # %entry + block + block + i32.sub $push15=, $0, $2 + tee_local $push14=, $6=, $pop15 + i32.const $push0=, 0 + i32.const $push13=, 0 + i32.gt_s $push1=, $6, $pop13 + i32.select $push12=, $pop14, $pop0, $pop1 + tee_local $push11=, $5=, $pop12 + i32.const $push2=, 2 + i32.gt_s $push3=, $pop11, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %for.body.lr.ph + i32.const $push17=, -1 + i32.add $6=, $5, $pop17 + i32.add $push4=, $2, $5 + i32.const $push16=, -1 + i32.add $push5=, $pop4, $pop16 + i32.sub $push6=, $pop5, $0 + i32.mul $push7=, $3, $pop6 + i32.add $push8=, $2, $pop7 + i32.sub $2=, $pop8, $1 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.add $push20=, $2, $3 + tee_local $push19=, $2=, $pop20 + i32.const $push18=, -1 + i32.le_s $push9=, $pop19, $pop18 + br_if 2, $pop9 # 2: down to label0 +# BB#3: # %for.cond + # in Loop: Header=BB0_2 Depth=1 + i32.const $push24=, 1 + i32.add $push23=, $6, $pop24 + tee_local $push22=, $6=, $pop23 + i32.const $push21=, 1 + i32.le_u $push10=, $pop22, $pop21 + br_if 0, $pop10 # 0: up to label2 +.LBB0_4: # %for.end + end_loop + end_block # label1: + return +.LBB0_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %for.body.lr.ph.i + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000412-5.c.s b/src/binaryen/test/torture-s/20000412-5.c.s new file mode 100644 index 0000000000..63633ea267 --- /dev/null +++ b/src/binaryen/test/torture-s/20000412-5.c.s @@ -0,0 +1,19 @@ + .text + .file "20000412-5.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000412-6.c.s b/src/binaryen/test/torture-s/20000412-6.c.s new file mode 100644 index 0000000000..e761e0dddf --- /dev/null +++ b/src/binaryen/test/torture-s/20000412-6.c.s @@ -0,0 +1,88 @@ + .text + .file "20000412-6.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %bug.exit + block + i32.const $push1=, 512 + i32.const $push13=, 0 + i32.load16_u $push0=, buf($pop13) + i32.sub $push2=, $pop1, $pop0 + i32.const $push12=, 0 + i32.load16_u $push3=, buf+2($pop12) + i32.sub $push4=, $pop2, $pop3 + i32.const $push11=, 0 + i32.load16_u $push5=, buf+4($pop11) + i32.sub $push6=, $pop4, $pop5 + i32.const $push7=, 65535 + i32.and $push8=, $pop6, $pop7 + i32.const $push9=, 491 + i32.ne $push10=, $pop8, $pop9 + br_if 0, $pop10 # 0: down to label0 +# BB#1: # %if.end + i32.const $push14=, 0 + call exit@FUNCTION, $pop14 + unreachable +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.bug,"ax",@progbits + .hidden bug # -- Begin function bug + .globl bug + .type bug,@function +bug: # @bug + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.ge_u $push0=, $1, $2 + br_if 0, $pop0 # 0: down to label1 +# BB#1: # %for.body.preheader +.LBB1_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push9=, 65535 + i32.and $push1=, $0, $pop9 + i32.load16_u $push2=, 0($1) + i32.sub $0=, $pop1, $pop2 + i32.const $push8=, 2 + i32.add $push7=, $1, $pop8 + tee_local $push6=, $1=, $pop7 + i32.lt_u $push3=, $pop6, $2 + br_if 0, $pop3 # 0: up to label2 +.LBB1_3: # %for.end + end_loop + end_block # label1: + i32.const $push4=, 65535 + i32.and $push5=, $0, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end1: + .size bug, .Lfunc_end1-bug + # -- End function + .hidden buf # @buf + .type buf,@object + .section .data.buf,"aw",@progbits + .globl buf + .p2align 1 +buf: + .int16 1 # 0x1 + .int16 4 # 0x4 + .int16 16 # 0x10 + .int16 64 # 0x40 + .int16 256 # 0x100 + .size buf, 10 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000419-1.c.s b/src/binaryen/test/torture-s/20000419-1.c.s new file mode 100644 index 0000000000..6cb3892ace --- /dev/null +++ b/src/binaryen/test/torture-s/20000419-1.c.s @@ -0,0 +1,60 @@ + .text + .file "20000419-1.c" + .section .text.brother,"ax",@progbits + .hidden brother # -- Begin function brother + .globl brother + .type brother,@function +brother: # @brother + .param i32, i32, i32 +# BB#0: # %entry + block + br_if 0, $0 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size brother, .Lfunc_end0-brother + # -- End function + .section .text.sister,"ax",@progbits + .hidden sister # -- Begin function sister + .globl sister + .type sister,@function +sister: # @sister + .param i32, i32, i32 +# BB#0: # %entry + block + i32.load $push0=, 4($0) + i32.eq $push1=, $pop0, $1 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %brother.exit + return +.LBB1_2: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size sister, .Lfunc_end1-sister + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %sister.exit + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000422-1.c.s b/src/binaryen/test/torture-s/20000422-1.c.s new file mode 100644 index 0000000000..d273e3d68e --- /dev/null +++ b/src/binaryen/test/torture-s/20000422-1.c.s @@ -0,0 +1,171 @@ + .text + .file "20000422-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + block + i32.const $push18=, 0 + i32.load $push17=, num($pop18) + tee_local $push16=, $0=, $pop17 + i32.const $push15=, 1 + i32.lt_s $push0=, $pop16, $pop15 + br_if 0, $pop0 # 0: down to label1 +# BB#1: # %for.body.lr.ph + i32.const $push19=, -1 + i32.add $1=, $0, $pop19 + i32.const $push1=, 2 + i32.shl $push2=, $0, $pop1 + i32.const $push3=, ops-8 + i32.add $2=, $pop2, $pop3 + i32.const $6=, 0 +.LBB0_2: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB0_4 Depth 2 + loop # label2: + block + i32.le_s $push4=, $1, $6 + br_if 0, $pop4 # 0: down to label3 +# BB#3: # %for.body3.preheader + # in Loop: Header=BB0_2 Depth=1 + copy_local $7=, $2 + copy_local $8=, $1 +.LBB0_4: # %for.body3 + # Parent Loop BB0_2 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label4: + block + i32.load $push26=, 0($7) + tee_local $push25=, $3=, $pop26 + i32.const $push24=, 4 + i32.add $push23=, $7, $pop24 + tee_local $push22=, $5=, $pop23 + i32.load $push21=, 0($pop22) + tee_local $push20=, $4=, $pop21 + i32.ge_s $push5=, $pop25, $pop20 + br_if 0, $pop5 # 0: down to label5 +# BB#5: # %if.then + # in Loop: Header=BB0_4 Depth=2 + i32.store 0($7), $4 + i32.store 0($5), $3 +.LBB0_6: # %for.inc + # in Loop: Header=BB0_4 Depth=2 + end_block # label5: + i32.const $push30=, -4 + i32.add $7=, $7, $pop30 + i32.const $push29=, -1 + i32.add $push28=, $8, $pop29 + tee_local $push27=, $8=, $pop28 + i32.gt_s $push6=, $pop27, $6 + br_if 0, $pop6 # 0: up to label4 +.LBB0_7: # %for.end + # in Loop: Header=BB0_2 Depth=1 + end_loop + end_block # label3: + i32.const $push33=, 1 + i32.add $push32=, $6, $pop33 + tee_local $push31=, $6=, $pop32 + i32.lt_s $push7=, $pop31, $0 + br_if 0, $pop7 # 0: up to label2 +# BB#8: # %for.end14 + end_loop + i32.const $push34=, 1 + i32.lt_s $push8=, $0, $pop34 + br_if 0, $pop8 # 0: down to label1 +# BB#9: # %for.body17.preheader + i32.const $7=, 0 + i32.const $8=, 0 +.LBB0_10: # %for.body17 + # =>This Inner Loop Header: Depth=1 + loop # label6: + i32.const $push36=, ops + i32.add $push11=, $7, $pop36 + i32.load $push12=, 0($pop11) + i32.const $push35=, correct + i32.add $push9=, $7, $pop35 + i32.load $push10=, 0($pop9) + i32.ne $push13=, $pop12, $pop10 + br_if 2, $pop13 # 2: down to label0 +# BB#11: # %for.cond15 + # in Loop: Header=BB0_10 Depth=1 + i32.const $push40=, 4 + i32.add $7=, $7, $pop40 + i32.const $push39=, 1 + i32.add $push38=, $8, $pop39 + tee_local $push37=, $8=, $pop38 + i32.lt_s $push14=, $pop37, $0 + br_if 0, $pop14 # 0: up to label6 +.LBB0_12: # %for.end25 + end_loop + end_block # label1: + i32.const $push41=, 0 + call exit@FUNCTION, $pop41 + unreachable +.LBB0_13: # %if.then21 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden ops # @ops + .type ops,@object + .section .data.ops,"aw",@progbits + .globl ops + .p2align 4 +ops: + .int32 11 # 0xb + .int32 12 # 0xc + .int32 46 # 0x2e + .int32 3 # 0x3 + .int32 2 # 0x2 + .int32 2 # 0x2 + .int32 3 # 0x3 + .int32 2 # 0x2 + .int32 1 # 0x1 + .int32 3 # 0x3 + .int32 2 # 0x2 + .int32 1 # 0x1 + .int32 2 # 0x2 + .size ops, 52 + + .hidden correct # @correct + .type correct,@object + .section .data.correct,"aw",@progbits + .globl correct + .p2align 4 +correct: + .int32 46 # 0x2e + .int32 12 # 0xc + .int32 11 # 0xb + .int32 3 # 0x3 + .int32 3 # 0x3 + .int32 3 # 0x3 + .int32 2 # 0x2 + .int32 2 # 0x2 + .int32 2 # 0x2 + .int32 2 # 0x2 + .int32 2 # 0x2 + .int32 1 # 0x1 + .int32 1 # 0x1 + .size correct, 52 + + .hidden num # @num + .type num,@object + .section .data.num,"aw",@progbits + .globl num + .p2align 2 +num: + .int32 13 # 0xd + .size num, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000503-1.c.s b/src/binaryen/test/torture-s/20000503-1.c.s new file mode 100644 index 0000000000..e660c9b832 --- /dev/null +++ b/src/binaryen/test/torture-s/20000503-1.c.s @@ -0,0 +1,41 @@ + .text + .file "20000503-1.c" + .section .text.sub,"ax",@progbits + .hidden sub # -- Begin function sub + .globl sub + .type sub,@function +sub: # @sub + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2 + i32.add $push8=, $0, $pop0 + tee_local $push7=, $0=, $pop8 + i32.const $push1=, 0 + i32.const $push6=, 0 + i32.gt_s $push2=, $0, $pop6 + i32.select $push3=, $pop7, $pop1, $pop2 + i32.const $push4=, 2 + i32.shl $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size sub, .Lfunc_end0-sub + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000511-1.c.s b/src/binaryen/test/torture-s/20000511-1.c.s new file mode 100644 index 0000000000..b0938a35c7 --- /dev/null +++ b/src/binaryen/test/torture-s/20000511-1.c.s @@ -0,0 +1,40 @@ + .text + .file "20000511-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 +# BB#0: # %entry + block + i32.ne $push0=, $0, $1 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000519-1.c.s b/src/binaryen/test/torture-s/20000519-1.c.s new file mode 100644 index 0000000000..7853140a17 --- /dev/null +++ b/src/binaryen/test/torture-s/20000519-1.c.s @@ -0,0 +1,102 @@ + .text + .file "20000519-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry +.LBB0_1: # %do.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.load $2=, 0($1) + i32.const $push4=, 4 + i32.add $push0=, $1, $pop4 + copy_local $1=, $pop0 + i32.const $push3=, 10 + i32.gt_s $push1=, $2, $pop3 + br_if 0, $pop1 # 0: up to label0 +# BB#2: # %do.end + end_loop + i32.add $push2=, $2, $0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push6=, $pop3, $pop5 + i32.store 12($pop6), $1 +.LBB1_1: # %do.body.i + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.load $2=, 0($1) + i32.const $push8=, 4 + i32.add $push0=, $1, $pop8 + copy_local $1=, $pop0 + i32.const $push7=, 10 + i32.gt_s $push1=, $2, $pop7 + br_if 0, $pop1 # 0: up to label1 +# BB#2: # %bar.exit + end_loop + i32.add $push2=, $2, $0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 16 + i32.sub $push14=, $pop6, $pop8 + tee_local $push13=, $0=, $pop14 + i32.store __stack_pointer($pop9), $pop13 + i64.const $push0=, 12884901890 + i64.store 0($0), $pop0 + block + i32.const $push1=, 1 + i32.call $push2=, foo@FUNCTION, $pop1, $0 + i32.const $push3=, 3 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label2 +# BB#1: # %if.end + i32.const $push12=, 0 + i32.const $push10=, 16 + i32.add $push11=, $0, $pop10 + i32.store __stack_pointer($pop12), $pop11 + i32.const $push5=, 0 + return $pop5 +.LBB2_2: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20000519-2.c.s b/src/binaryen/test/torture-s/20000519-2.c.s new file mode 100644 index 0000000000..46d86306cf --- /dev/null +++ b/src/binaryen/test/torture-s/20000519-2.c.s @@ -0,0 +1,40 @@ + .text + .file "20000519-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load $push0=, x($pop3) + i32.const $push1=, -1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 2 +x: + .int32 4294967295 # 0xffffffff + .size x, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000523-1.c.s b/src/binaryen/test/torture-s/20000523-1.c.s new file mode 100644 index 0000000000..11ea7f3f75 --- /dev/null +++ b/src/binaryen/test/torture-s/20000523-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20000523-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000528-1.c.s b/src/binaryen/test/torture-s/20000528-1.c.s new file mode 100644 index 0000000000..9f511b9e37 --- /dev/null +++ b/src/binaryen/test/torture-s/20000528-1.c.s @@ -0,0 +1,55 @@ + .text + .file "20000528-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push6=, 0 + i32.load $push5=, l($pop6) + tee_local $push4=, $0=, $pop5 + i32.store16 s($pop7), $pop4 + block + i32.const $push0=, 65535 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 65534 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push8=, 0 + call exit@FUNCTION, $pop8 + unreachable +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden l # @l + .type l,@object + .section .data.l,"aw",@progbits + .globl l + .p2align 2 +l: + .int32 4294967294 # 0xfffffffe + .size l, 4 + + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 1 +s: + .int16 0 # 0x0 + .size s, 2 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000603-1.c.s b/src/binaryen/test/torture-s/20000603-1.c.s new file mode 100644 index 0000000000..b62acfc83b --- /dev/null +++ b/src/binaryen/test/torture-s/20000603-1.c.s @@ -0,0 +1,35 @@ + .text + .file "20000603-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result f64 +# BB#0: # %entry + i64.const $push0=, 4607182418800017408 + i64.store 0($0), $pop0 + f64.load $push1=, 0($1) + f64.const $push2=, 0x1p0 + f64.add $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20000605-1.c.s b/src/binaryen/test/torture-s/20000605-1.c.s new file mode 100644 index 0000000000..5f42b6d655 --- /dev/null +++ b/src/binaryen/test/torture-s/20000605-1.c.s @@ -0,0 +1,38 @@ + .text + .file "20000605-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %for.body.lr.ph.i + i32.const $0=, 256 +.LBB0_1: # %for.body.i + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push3=, -1 + i32.add $push2=, $0, $pop3 + tee_local $push1=, $0=, $pop2 + br_if 0, $pop1 # 0: up to label0 +# BB#2: # %render_image_rgb_a.exit + end_loop + block + br_if 0, $0 # 0: down to label1 +# BB#3: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable +.LBB0_4: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000605-2.c.s b/src/binaryen/test/torture-s/20000605-2.c.s new file mode 100644 index 0000000000..bea5f0f29e --- /dev/null +++ b/src/binaryen/test/torture-s/20000605-2.c.s @@ -0,0 +1,83 @@ + .text + .file "20000605-2.c" + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + block + block + i32.load $push9=, 0($0) + tee_local $push8=, $2=, $pop9 + i32.load $push0=, 0($1) + i32.ge_s $push1=, $pop8, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %for.body.preheader + i32.const $3=, 0 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push10=, 5 + i32.ge_u $push2=, $3, $pop10 + br_if 2, $pop2 # 2: down to label0 +# BB#3: # %for.inc + # in Loop: Header=BB0_2 Depth=1 + i32.add $push3=, $2, $3 + i32.const $push14=, 1 + i32.add $push4=, $pop3, $pop14 + i32.store 0($0), $pop4 + i32.const $push13=, 1 + i32.add $push12=, $3, $pop13 + tee_local $push11=, $3=, $pop12 + i32.add $push5=, $2, $pop11 + i32.load $push6=, 0($1) + i32.lt_s $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: up to label2 +.LBB0_4: # %for.end + end_loop + end_block # label1: + return +.LBB0_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push10=, $pop2, $pop4 + tee_local $push9=, $0=, $pop10 + i32.store __stack_pointer($pop5), $pop9 + i32.const $push0=, 1 + i32.store 0($0), $pop0 + i32.const $push1=, 0 + i32.store 8($0), $pop1 + i32.const $push6=, 8 + i32.add $push7=, $0, $pop6 + call f1@FUNCTION, $pop7, $0 + i32.const $push8=, 0 + call exit@FUNCTION, $pop8 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000605-3.c.s b/src/binaryen/test/torture-s/20000605-3.c.s new file mode 100644 index 0000000000..88dd11dad2 --- /dev/null +++ b/src/binaryen/test/torture-s/20000605-3.c.s @@ -0,0 +1,17 @@ + .text + .file "20000605-3.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %while.cond + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20000622-1.c.s b/src/binaryen/test/torture-s/20000622-1.c.s new file mode 100644 index 0000000000..069cfc9fd2 --- /dev/null +++ b/src/binaryen/test/torture-s/20000622-1.c.s @@ -0,0 +1,90 @@ + .text + .file "20000622-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 12 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %entry + i32.const $push2=, 1 + i32.ne $push3=, $1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %entry + i32.const $push4=, 11 + i32.ne $push5=, $2, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#3: # %if.end + i32.const $push6=, 0 + return $pop6 +.LBB0_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .param i32, i32, i32 +# BB#0: # %entry + block + i32.const $push0=, 11 + i32.ne $push1=, $1, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %entry + i32.const $push2=, 12 + i32.ne $push3=, $2, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#2: # %foo.exit + return +.LBB2_3: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size baz, .Lfunc_end2-baz + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000703-1.c.s b/src/binaryen/test/torture-s/20000703-1.c.s new file mode 100644 index 0000000000..7f9871db5b --- /dev/null +++ b/src/binaryen/test/torture-s/20000703-1.c.s @@ -0,0 +1,87 @@ + .text + .file "20000703-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 +# BB#0: # %entry + i32.store 20($0), $1 + i32.store 24($0), $2 + i32.const $push0=, 19 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 0 + i32.load8_u $push3=, .L.str+2($pop2) + i32.store8 0($pop1), $pop3 + i32.const $push5=, 0 + i32.load16_u $push4=, .L.str($pop5):p2align=0 + i32.store16 17($0):p2align=0, $pop4 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32, i32 +# BB#0: # %entry + i32.store 20($0), $1 + i32.store 24($0), $2 + i32.const $push0=, 16 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 0 + i32.load8_u $push3=, .L.str.1+16($pop2) + i32.store8 0($pop1), $pop3 + i32.const $push4=, 8 + i32.add $push5=, $0, $pop4 + i32.const $push15=, 0 + i64.load $push6=, .L.str.1+8($pop15):p2align=0 + i64.store 0($pop5):p2align=0, $pop6 + i32.const $push14=, 0 + i64.load $push7=, .L.str.1($pop14):p2align=0 + i64.store 0($0):p2align=0, $pop7 + i32.const $push13=, 0 + i32.load16_u $push8=, .L.str($pop13):p2align=0 + i32.store16 17($0):p2align=0, $pop8 + i32.const $push9=, 19 + i32.add $push10=, $0, $pop9 + i32.const $push12=, 0 + i32.load8_u $push11=, .L.str+2($pop12) + i32.store8 0($pop10), $pop11 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end8 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "abc" + .size .L.str, 4 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "01234567890123456" + .size .L.str.1, 18 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000706-1.c.s b/src/binaryen/test/torture-s/20000706-1.c.s new file mode 100644 index 0000000000..eb7f3b057d --- /dev/null +++ b/src/binaryen/test/torture-s/20000706-1.c.s @@ -0,0 +1,124 @@ + .text + .file "20000706-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.load $push0=, 0($0) + i32.const $push1=, 1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load $push3=, 4($0) + i32.const $push4=, 2 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %lor.lhs.false2 + i32.load $push6=, 8($0) + i32.const $push7=, 3 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %lor.lhs.false4 + i32.load $push9=, 12($0) + i32.const $push10=, 4 + i32.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#4: # %lor.lhs.false6 + i32.const $push13=, 10 + i32.ne $push14=, $5, $pop13 + br_if 0, $pop14 # 0: down to label0 +# BB#5: # %lor.lhs.false6 + i32.const $push15=, 9 + i32.ne $push16=, $4, $pop15 + br_if 0, $pop16 # 0: down to label0 +# BB#6: # %lor.lhs.false6 + i32.const $push17=, 8 + i32.ne $push18=, $3, $pop17 + br_if 0, $pop18 # 0: down to label0 +# BB#7: # %lor.lhs.false6 + i32.const $push19=, 7 + i32.ne $push20=, $2, $pop19 + br_if 0, $pop20 # 0: down to label0 +# BB#8: # %lor.lhs.false6 + i32.const $push21=, 6 + i32.ne $push22=, $1, $pop21 + br_if 0, $pop22 # 0: down to label0 +# BB#9: # %lor.lhs.false6 + i32.load $push12=, 16($0) + i32.const $push23=, 5 + i32.ne $push24=, $pop12, $pop23 + br_if 0, $pop24 # 0: down to label0 +# BB#10: # %if.end + return +.LBB0_11: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + block + i32.load $push0=, 0($0) + i32.const $push1=, 1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %lor.lhs.false.i + i32.load $push3=, 4($0) + i32.const $push4=, 2 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label1 +# BB#2: # %lor.lhs.false2.i + i32.load $push6=, 8($0) + i32.const $push7=, 3 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label1 +# BB#3: # %lor.lhs.false4.i + i32.load $push9=, 12($0) + i32.const $push10=, 4 + i32.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label1 +# BB#4: # %lor.lhs.false6.i + i32.load $push12=, 16($0) + i32.const $push13=, 5 + i32.ne $push14=, $pop12, $pop13 + br_if 0, $pop14 # 0: down to label1 +# BB#5: # %bar.exit + return +.LBB1_6: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %foo.exit + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000706-2.c.s b/src/binaryen/test/torture-s/20000706-2.c.s new file mode 100644 index 0000000000..0643ea9f55 --- /dev/null +++ b/src/binaryen/test/torture-s/20000706-2.c.s @@ -0,0 +1,124 @@ + .text + .file "20000706-2.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.load $push0=, 0($0) + i32.const $push1=, 1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load $push3=, 4($0) + i32.const $push4=, 2 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %lor.lhs.false2 + i32.load $push6=, 8($0) + i32.const $push7=, 3 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %lor.lhs.false4 + i32.load $push9=, 12($0) + i32.const $push10=, 4 + i32.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#4: # %lor.lhs.false6 + i32.const $push13=, 10 + i32.ne $push14=, $5, $pop13 + br_if 0, $pop14 # 0: down to label0 +# BB#5: # %lor.lhs.false6 + i32.const $push15=, 9 + i32.ne $push16=, $4, $pop15 + br_if 0, $pop16 # 0: down to label0 +# BB#6: # %lor.lhs.false6 + i32.const $push17=, 8 + i32.ne $push18=, $3, $pop17 + br_if 0, $pop18 # 0: down to label0 +# BB#7: # %lor.lhs.false6 + i32.const $push19=, 7 + i32.ne $push20=, $2, $pop19 + br_if 0, $pop20 # 0: down to label0 +# BB#8: # %lor.lhs.false6 + i32.const $push21=, 6 + i32.ne $push22=, $1, $pop21 + br_if 0, $pop22 # 0: down to label0 +# BB#9: # %lor.lhs.false6 + i32.load $push12=, 16($0) + i32.const $push23=, 5 + i32.ne $push24=, $pop12, $pop23 + br_if 0, $pop24 # 0: down to label0 +# BB#10: # %if.end + return +.LBB0_11: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 +# BB#0: # %entry + block + i32.load $push0=, 0($1) + i32.const $push1=, 1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %lor.lhs.false.i + i32.load $push3=, 4($1) + i32.const $push4=, 2 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label1 +# BB#2: # %lor.lhs.false2.i + i32.load $push6=, 8($1) + i32.const $push7=, 3 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label1 +# BB#3: # %lor.lhs.false4.i + i32.load $push9=, 12($1) + i32.const $push10=, 4 + i32.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label1 +# BB#4: # %lor.lhs.false6.i + i32.load $push12=, 16($1) + i32.const $push13=, 5 + i32.ne $push14=, $pop12, $pop13 + br_if 0, $pop14 # 0: down to label1 +# BB#5: # %bar.exit + return +.LBB1_6: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %foo.exit + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000706-3.c.s b/src/binaryen/test/torture-s/20000706-3.c.s new file mode 100644 index 0000000000..435dfaed49 --- /dev/null +++ b/src/binaryen/test/torture-s/20000706-3.c.s @@ -0,0 +1,101 @@ + .text + .file "20000706-3.c" + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .param i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.load $push0=, 0($0) + i32.store c($pop1), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size baz, .Lfunc_end0-baz + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + block + i32.const $push1=, 2 + i32.ne $push2=, $0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %entry + i32.const $push3=, 0 + i32.load $push0=, c($pop3) + i32.const $push4=, 1 + i32.ne $push5=, $pop0, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end + return +.LBB1_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store c($pop0), $0 + block + i32.const $push1=, 1 + i32.ne $push2=, $0, $pop1 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %entry + i32.const $push3=, 2 + i32.ne $push4=, $1, $pop3 + br_if 0, $pop4 # 0: down to label1 +# BB#2: # %bar.exit + return +.LBB2_3: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size foo, .Lfunc_end2-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store c($pop1), $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000706-4.c.s b/src/binaryen/test/torture-s/20000706-4.c.s new file mode 100644 index 0000000000..a38ebbf35f --- /dev/null +++ b/src/binaryen/test/torture-s/20000706-4.c.s @@ -0,0 +1,111 @@ + .text + .file "20000706-4.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + block + i32.const $push1=, 2 + i32.ne $push2=, $0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %entry + i32.const $push3=, 0 + i32.load $push4=, c($pop3) + i32.load $push0=, 0($pop4) + i32.const $push5=, 1 + i32.ne $push6=, $pop0, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#2: # %if.end + return +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push15=, $pop5, $pop7 + tee_local $push14=, $2=, $pop15 + i32.store __stack_pointer($pop8), $pop14 + i32.const $push0=, 0 + i32.const $push12=, 12 + i32.add $push13=, $2, $pop12 + i32.store c($pop0), $pop13 + i32.store 12($2), $0 + block + i32.const $push1=, 1 + i32.ne $push2=, $0, $pop1 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %entry + i32.const $push3=, 2 + i32.ne $push4=, $1, $pop3 + br_if 0, $pop4 # 0: down to label1 +# BB#2: # %bar.exit + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $2, $pop9 + i32.store __stack_pointer($pop11), $pop10 + return +.LBB1_3: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push9=, $pop1, $pop3 + tee_local $push8=, $0=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.const $push0=, 0 + i32.const $push5=, 12 + i32.add $push6=, $0, $pop5 + i32.store c($pop0), $pop6 + i32.const $push7=, 0 + call exit@FUNCTION, $pop7 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 + .size c, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000706-5.c.s b/src/binaryen/test/torture-s/20000706-5.c.s new file mode 100644 index 0000000000..df84779161 --- /dev/null +++ b/src/binaryen/test/torture-s/20000706-5.c.s @@ -0,0 +1,127 @@ + .text + .file "20000706-5.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .local i32 +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.load $push13=, c($pop0) + tee_local $push12=, $1=, $pop13 + i32.load $push1=, 0($pop12) + i32.const $push2=, 1 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load $push4=, 4($1) + i32.const $push5=, 2 + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#2: # %lor.lhs.false3 + i32.const $push8=, 4 + i32.ne $push9=, $0, $pop8 + br_if 0, $pop9 # 0: down to label0 +# BB#3: # %lor.lhs.false3 + i32.load $push7=, 8($1) + i32.const $push10=, 3 + i32.ne $push11=, $pop7, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#4: # %if.end + return +.LBB0_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store c($pop0), $0 + block + i32.load $push1=, 0($0) + i32.const $push2=, 1 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %lor.lhs.false.i + i32.load $push4=, 4($0) + i32.const $push5=, 2 + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label1 +# BB#2: # %lor.lhs.false3.i + i32.const $push8=, 4 + i32.ne $push9=, $1, $pop8 + br_if 0, $pop9 # 0: down to label1 +# BB#3: # %lor.lhs.false3.i + i32.load $push7=, 8($0) + i32.const $push10=, 3 + i32.ne $push11=, $pop7, $pop10 + br_if 0, $pop11 # 0: down to label1 +# BB#4: # %bar.exit + return +.LBB1_5: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 32 + i32.sub $push13=, $pop6, $pop8 + tee_local $push12=, $0=, $pop13 + i32.store __stack_pointer($pop9), $pop12 + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 3 + i32.store 0($pop1), $pop2 + i32.const $push11=, 3 + i32.store 24($0), $pop11 + i64.const $push3=, 8589934593 + i64.store 0($0), $pop3 + i64.const $push10=, 8589934593 + i64.store 16($0), $pop10 + i32.const $push4=, 4 + call foo@FUNCTION, $0, $pop4 + i32.const $push5=, 0 + call exit@FUNCTION, $pop5 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 + .size c, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000707-1.c.s b/src/binaryen/test/torture-s/20000707-1.c.s new file mode 100644 index 0000000000..fc199b557c --- /dev/null +++ b/src/binaryen/test/torture-s/20000707-1.c.s @@ -0,0 +1,63 @@ + .text + .file "20000707-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 +# BB#0: # %entry + block + i32.const $push0=, 4 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32, i32 +# BB#0: # %entry + block + i32.load $push0=, 4($0) + i32.const $push1=, 4 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %foo.exit + return +.LBB1_2: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %bar.exit + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000715-1.c.s b/src/binaryen/test/torture-s/20000715-1.c.s new file mode 100644 index 0000000000..2572bb9536 --- /dev/null +++ b/src/binaryen/test/torture-s/20000715-1.c.s @@ -0,0 +1,127 @@ + .text + .file "20000715-1.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end1: + .size test2, .Lfunc_end1-test2 + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end2: + .size test3, .Lfunc_end2-test3 + # -- End function + .section .text.test4,"ax",@progbits + .hidden test4 # -- Begin function test4 + .globl test4 + .type test4,@function +test4: # @test4 +# BB#0: # %if.end8 + i32.const $push1=, 0 + i32.const $push0=, 3 + i32.store y($pop1), $pop0 + i32.const $push3=, 0 + i32.const $push2=, 3 + i32.store x($pop3), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end3: + .size test4, .Lfunc_end3-test4 + # -- End function + .section .text.test5,"ax",@progbits + .hidden test5 # -- Begin function test5 + .globl test5 + .type test5,@function +test5: # @test5 +# BB#0: # %if.end8 + i32.const $push1=, 0 + i32.const $push0=, 3 + i32.store y($pop1), $pop0 + i32.const $push3=, 0 + i32.const $push2=, 3 + i32.store x($pop3), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end4: + .size test5, .Lfunc_end4-test5 + # -- End function + .section .text.test6,"ax",@progbits + .hidden test6 # -- Begin function test6 + .globl test6 + .type test6,@function +test6: # @test6 +# BB#0: # %if.end8 + i32.const $push1=, 0 + i32.const $push0=, 3 + i32.store y($pop1), $pop0 + i32.const $push3=, 0 + i32.const $push2=, 3 + i32.store x($pop3), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end5: + .size test6, .Lfunc_end5-test6 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 3 + i32.store y($pop1), $pop0 + i32.const $push4=, 0 + i32.const $push3=, 3 + i32.store x($pop4), $pop3 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end6: + .size main, .Lfunc_end6-main + # -- End function + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 2 +x: + .int32 0 # 0x0 + .size x, 4 + + .hidden y # @y + .type y,@object + .section .bss.y,"aw",@nobits + .globl y + .p2align 2 +y: + .int32 0 # 0x0 + .size y, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000715-2.c.s b/src/binaryen/test/torture-s/20000715-2.c.s new file mode 100644 index 0000000000..9fe17d8041 --- /dev/null +++ b/src/binaryen/test/torture-s/20000715-2.c.s @@ -0,0 +1,38 @@ + .text + .file "20000715-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 4 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 1020 + i32.and $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000717-1.c.s b/src/binaryen/test/torture-s/20000717-1.c.s new file mode 100644 index 0000000000..df6d9b21d8 --- /dev/null +++ b/src/binaryen/test/torture-s/20000717-1.c.s @@ -0,0 +1,104 @@ + .text + .file "20000717-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + block + i32.load $push5=, 0($1) + tee_local $push4=, $2=, $pop5 + i32.load $push0=, 4($1) + i32.eq $push1=, $pop4, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load $push2=, 8($1) + i32.eq $push3=, $2, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %if.end + return $1 +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + block + i32.load $push5=, 0($0) + tee_local $push4=, $2=, $pop5 + i32.load $push1=, 4($0) + i32.eq $push2=, $pop4, $pop1 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %entry + i32.load $push0=, 8($0) + i32.eq $push3=, $2, $pop0 + br_if 0, $pop3 # 0: down to label1 +# BB#2: # %bar.exit + return $0 +.LBB1_3: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push12=, $pop5, $pop7 + tee_local $push11=, $0=, $pop12 + i32.store __stack_pointer($pop8), $pop11 + i32.const $push2=, 8 + i32.add $push3=, $0, $pop2 + i32.const $push0=, 0 + i32.load $push1=, .Lmain.t+8($pop0) + i32.store 0($pop3), $pop1 + i32.const $push10=, 0 + i64.load $push4=, .Lmain.t($pop10):p2align=2 + i64.store 0($0), $pop4 + i32.call $drop=, foo@FUNCTION, $0, $0 + i32.const $push9=, 0 + call exit@FUNCTION, $pop9 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type .Lmain.t,@object # @main.t + .section .rodata..Lmain.t,"a",@progbits + .p2align 2 +.Lmain.t: + .int32 1 # 0x1 + .int32 2 # 0x2 + .int32 3 # 0x3 + .size .Lmain.t, 12 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000717-2.c.s b/src/binaryen/test/torture-s/20000717-2.c.s new file mode 100644 index 0000000000..1dda61edaa --- /dev/null +++ b/src/binaryen/test/torture-s/20000717-2.c.s @@ -0,0 +1,19 @@ + .text + .file "20000717-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000717-3.c.s b/src/binaryen/test/torture-s/20000717-3.c.s new file mode 100644 index 0000000000..1f5da6486d --- /dev/null +++ b/src/binaryen/test/torture-s/20000717-3.c.s @@ -0,0 +1,61 @@ + .text + .file "20000717-3.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push3=, 0 + i32.load $1=, c($pop3) + i32.load $push0=, 0($0) + i32.const $push1=, -10 + i32.add $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + copy_local $push4=, $1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load $push0=, c($pop3) + i32.const $push1=, -1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden c # @c + .type c,@object + .section .data.c,"aw",@progbits + .globl c + .p2align 2 +c: + .int32 4294967295 # 0xffffffff + .size c, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000717-4.c.s b/src/binaryen/test/torture-s/20000717-4.c.s new file mode 100644 index 0000000000..c90535f2a0 --- /dev/null +++ b/src/binaryen/test/torture-s/20000717-4.c.s @@ -0,0 +1,40 @@ + .text + .file "20000717-4.c" + .section .text.x,"ax",@progbits + .hidden x # -- Begin function x + .globl x + .type x,@function +x: # @x + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, s+8($pop0) + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size x, .Lfunc_end0-x + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 2 +s: + .skip 100 + .size s, 100 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20000717-5.c.s b/src/binaryen/test/torture-s/20000717-5.c.s new file mode 100644 index 0000000000..753bc40395 --- /dev/null +++ b/src/binaryen/test/torture-s/20000717-5.c.s @@ -0,0 +1,139 @@ + .text + .file "20000717-5.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.load $push0=, 0($3) + i32.const $push1=, 1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load $push3=, 4($3) + i32.const $push4=, 2 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %lor.lhs.false2 + i32.const $push7=, 6 + i32.ne $push8=, $2, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %lor.lhs.false2 + i32.const $push9=, 5 + i32.ne $push10=, $1, $pop9 + br_if 0, $pop10 # 0: down to label0 +# BB#4: # %lor.lhs.false2 + i32.const $push11=, 4 + i32.ne $push12=, $0, $pop11 + br_if 0, $pop12 # 0: down to label0 +# BB#5: # %lor.lhs.false2 + i32.load $push6=, 8($3) + i32.const $push13=, 3 + i32.ne $push14=, $pop6, $pop13 + br_if 0, $pop14 # 0: down to label0 +# BB#6: # %if.end + return $3 +.LBB0_7: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.load $push1=, 0($0) + i32.const $push2=, 1 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %entry + i32.load $push0=, 4($0) + i32.const $push4=, 2 + i32.ne $push5=, $pop0, $pop4 + br_if 0, $pop5 # 0: down to label1 +# BB#2: # %lor.lhs.false2.i + i32.const $push7=, 6 + i32.ne $push8=, $3, $pop7 + br_if 0, $pop8 # 0: down to label1 +# BB#3: # %lor.lhs.false2.i + i32.const $push9=, 5 + i32.ne $push10=, $2, $pop9 + br_if 0, $pop10 # 0: down to label1 +# BB#4: # %lor.lhs.false2.i + i32.const $push11=, 4 + i32.ne $push12=, $1, $pop11 + br_if 0, $pop12 # 0: down to label1 +# BB#5: # %lor.lhs.false2.i + i32.load $push6=, 8($0) + i32.const $push13=, 3 + i32.ne $push14=, $pop6, $pop13 + br_if 0, $pop14 # 0: down to label1 +# BB#6: # %bar.exit + return $0 +.LBB1_7: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push11=, 0 + i32.const $push9=, 0 + i32.load $push8=, __stack_pointer($pop9) + i32.const $push10=, 16 + i32.sub $push15=, $pop8, $pop10 + tee_local $push14=, $0=, $pop15 + i32.store __stack_pointer($pop11), $pop14 + i32.const $push2=, 8 + i32.add $push3=, $0, $pop2 + i32.const $push0=, 0 + i32.load $push1=, .Lmain.t+8($pop0) + i32.store 0($pop3), $pop1 + i32.const $push13=, 0 + i64.load $push4=, .Lmain.t($pop13):p2align=2 + i64.store 0($0), $pop4 + i32.const $push7=, 4 + i32.const $push6=, 5 + i32.const $push5=, 6 + i32.call $drop=, foo@FUNCTION, $0, $pop7, $pop6, $pop5 + i32.const $push12=, 0 + call exit@FUNCTION, $pop12 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type .Lmain.t,@object # @main.t + .section .rodata..Lmain.t,"a",@progbits + .p2align 2 +.Lmain.t: + .int32 1 # 0x1 + .int32 2 # 0x2 + .int32 3 # 0x3 + .size .Lmain.t, 12 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000722-1.c.s b/src/binaryen/test/torture-s/20000722-1.c.s new file mode 100644 index 0000000000..4859c701e5 --- /dev/null +++ b/src/binaryen/test/torture-s/20000722-1.c.s @@ -0,0 +1,57 @@ + .text + .file "20000722-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar +# BB#0: # %foo.exit + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.load $push0=, 4($0) + i32.const $push1=, 1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push3=, 4 + i32.add $push4=, $0, $pop3 + i32.const $push5=, 2 + i32.store 0($pop4), $pop5 + return +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size foo, .Lfunc_end2-foo + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20000726-1.c.s b/src/binaryen/test/torture-s/20000726-1.c.s new file mode 100644 index 0000000000..5363043fe5 --- /dev/null +++ b/src/binaryen/test/torture-s/20000726-1.c.s @@ -0,0 +1,33 @@ + .text + .file "20000726-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.adjust_xy,"ax",@progbits + .hidden adjust_xy # -- Begin function adjust_xy + .globl adjust_xy + .type adjust_xy,@function +adjust_xy: # @adjust_xy + .param i32, i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.store16 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size adjust_xy, .Lfunc_end1-adjust_xy + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000731-1.c.s b/src/binaryen/test/torture-s/20000731-1.c.s new file mode 100644 index 0000000000..91c56c8a94 --- /dev/null +++ b/src/binaryen/test/torture-s/20000731-1.c.s @@ -0,0 +1,43 @@ + .text + .file "20000731-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result f64 +# BB#0: # %entry + f64.const $push0=, 0x0p0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.do_sibcall,"ax",@progbits + .hidden do_sibcall # -- Begin function do_sibcall + .globl do_sibcall + .type do_sibcall,@function +do_sibcall: # @do_sibcall +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end1: + .size do_sibcall, .Lfunc_end1-do_sibcall + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000731-2.c.s b/src/binaryen/test/torture-s/20000731-2.c.s new file mode 100644 index 0000000000..26db9f30f5 --- /dev/null +++ b/src/binaryen/test/torture-s/20000731-2.c.s @@ -0,0 +1,19 @@ + .text + .file "20000731-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000801-1.c.s b/src/binaryen/test/torture-s/20000801-1.c.s new file mode 100644 index 0000000000..5a908665c8 --- /dev/null +++ b/src/binaryen/test/torture-s/20000801-1.c.s @@ -0,0 +1,91 @@ + .text + .file "20000801-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + block + i32.const $push4=, 1 + i32.lt_s $push0=, $1, $pop4 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %while.body.preheader + i32.add $2=, $0, $1 +.LBB0_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push16=, 3 + i32.add $push15=, $0, $pop16 + tee_local $push14=, $1=, $pop15 + i32.load8_u $3=, 0($pop14) + i32.load8_u $push1=, 0($0) + i32.store8 0($1), $pop1 + i32.store8 0($0), $3 + i32.const $push13=, 2 + i32.add $push12=, $0, $pop13 + tee_local $push11=, $1=, $pop12 + i32.load8_u $3=, 0($pop11) + i32.const $push10=, 1 + i32.add $push9=, $0, $pop10 + tee_local $push8=, $4=, $pop9 + i32.load8_u $push2=, 0($pop8) + i32.store8 0($1), $pop2 + i32.store8 0($4), $3 + i32.const $push7=, 4 + i32.add $push6=, $0, $pop7 + tee_local $push5=, $0=, $pop6 + i32.lt_u $push3=, $pop5, $2 + br_if 0, $pop3 # 0: up to label1 +.LBB0_3: # %while.end + end_loop + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push11=, $pop3, $pop5 + tee_local $push10=, $0=, $pop11 + i32.store __stack_pointer($pop6), $pop10 + i32.const $push9=, 0 + i32.store 12($0), $pop9 + i32.const $push8=, 0 + i32.store8 14($0), $pop8 + i32.const $push0=, 1 + i32.store16 12($0), $pop0 + block + i32.load $push1=, 12($0) + i32.const $push7=, 1 + i32.ne $push2=, $pop1, $pop7 + br_if 0, $pop2 # 0: down to label2 +# BB#1: # %if.end + i32.const $push12=, 0 + call exit@FUNCTION, $pop12 + unreachable +.LBB1_2: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000801-2.c.s b/src/binaryen/test/torture-s/20000801-2.c.s new file mode 100644 index 0000000000..8d94cb2727 --- /dev/null +++ b/src/binaryen/test/torture-s/20000801-2.c.s @@ -0,0 +1,95 @@ + .text + .file "20000801-2.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32 + .result i32 +# BB#0: # %entry + block + i32.eqz $push3=, $0 + br_if 0, $pop3 # 0: down to label0 +.LBB0_1: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.load $push2=, 0($0) + tee_local $push1=, $0=, $pop2 + br_if 0, $pop1 # 0: up to label1 +.LBB0_2: # %while.end + end_loop + end_block # label0: + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size baz, .Lfunc_end2-baz + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push11=, $pop2, $pop4 + tee_local $push10=, $0=, $pop11 + i32.store __stack_pointer($pop5), $pop10 + i32.const $push0=, 0 + i32.store 8($0), $pop0 + i32.const $push6=, 8 + i32.add $push7=, $0, $pop6 + i32.store 12($0), $pop7 + i32.const $push8=, 12 + i32.add $push9=, $0, $pop8 + copy_local $0=, $pop9 +.LBB3_1: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.load $push13=, 0($0) + tee_local $push12=, $0=, $pop13 + br_if 0, $pop12 # 0: up to label2 +# BB#2: # %if.end + end_loop + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000801-3.c.s b/src/binaryen/test/torture-s/20000801-3.c.s new file mode 100644 index 0000000000..613ec8681b --- /dev/null +++ b/src/binaryen/test/torture-s/20000801-3.c.s @@ -0,0 +1,41 @@ + .text + .file "20000801-3.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load $push0=, s+4($pop3) + i32.const $push1=, 1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.then + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable +.LBB0_2: # %if.else + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden s # @s + .type s,@object + .section .data.s,"aw",@progbits + .globl s + .p2align 2 +s: + .int32 0 # 0x0 + .int32 1 # 0x1 + .size s, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20000801-4.c.s b/src/binaryen/test/torture-s/20000801-4.c.s new file mode 100644 index 0000000000..19b6117b17 --- /dev/null +++ b/src/binaryen/test/torture-s/20000801-4.c.s @@ -0,0 +1,53 @@ + .text + .file "20000801-4.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push9=, $pop1, $pop3 + tee_local $push8=, $0=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.const $push0=, 0 + i32.const $push5=, 14 + i32.add $push6=, $0, $pop5 + i32.store t($pop0), $pop6 + i32.const $push7=, 0 + call exit@FUNCTION, $pop7 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden t # @t + .type t,@object + .section .bss.t,"aw",@nobits + .globl t + .p2align 2 +t: + .int32 0 + .size t, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000808-1.c.s b/src/binaryen/test/torture-s/20000808-1.c.s new file mode 100644 index 0000000000..1c4079eb09 --- /dev/null +++ b/src/binaryen/test/torture-s/20000808-1.c.s @@ -0,0 +1,111 @@ + .text + .file "20000808-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.load $push0=, 0($0) + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load $push1=, 4($0) + i32.const $push2=, 1 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %lor.lhs.false2 + i32.load $push4=, 0($1) + i32.const $push5=, -1 + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#3: # %lor.lhs.false5 + i32.load $push7=, 4($1) + br_if 0, $pop7 # 0: down to label0 +# BB#4: # %lor.lhs.false8 + i32.load $push8=, 0($2) + i32.const $push9=, 1 + i32.ne $push10=, $pop8, $pop9 + br_if 0, $pop10 # 0: down to label0 +# BB#5: # %lor.lhs.false11 + i32.load $push11=, 4($2) + i32.const $push26=, -1 + i32.ne $push12=, $pop11, $pop26 + br_if 0, $pop12 # 0: down to label0 +# BB#6: # %lor.lhs.false14 + i32.load $push13=, 0($3) + i32.const $push27=, -1 + i32.ne $push14=, $pop13, $pop27 + br_if 0, $pop14 # 0: down to label0 +# BB#7: # %lor.lhs.false17 + i32.load $push15=, 4($3) + i32.const $push16=, 1 + i32.ne $push17=, $pop15, $pop16 + br_if 0, $pop17 # 0: down to label0 +# BB#8: # %lor.lhs.false20 + i32.load $push18=, 0($4) + br_if 0, $pop18 # 0: down to label0 +# BB#9: # %lor.lhs.false23 + i32.load $push19=, 4($4) + i32.const $push20=, -1 + i32.ne $push21=, $pop19, $pop20 + br_if 0, $pop21 # 0: down to label0 +# BB#10: # %lor.lhs.false26 + i32.load $push22=, 0($5) + i32.const $push23=, 1 + i32.ne $push24=, $pop22, $pop23 + br_if 0, $pop24 # 0: down to label0 +# BB#11: # %lor.lhs.false29 + i32.load $push25=, 4($5) + br_if 0, $pop25 # 0: down to label0 +# BB#12: # %if.end + return +.LBB1_13: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo +# BB#0: # %f.exit + # fallthrough-return + .endfunc +.Lfunc_end2: + .size foo, .Lfunc_end2-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000815-1.c.s b/src/binaryen/test/torture-s/20000815-1.c.s new file mode 100644 index 0000000000..0ef524c2d4 --- /dev/null +++ b/src/binaryen/test/torture-s/20000815-1.c.s @@ -0,0 +1,283 @@ + .text + .file "20000815-1.c" + .section .text.invalidate_memory,"ax",@progbits + .hidden invalidate_memory # -- Begin function invalidate_memory + .globl invalidate_memory + .type invalidate_memory,@function +invalidate_memory: # @invalidate_memory + .param i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.load8_u $push8=, 0($0) + tee_local $push7=, $0=, $pop8 + i32.const $push1=, 4 + i32.and $2=, $pop7, $pop1 + i32.const $push2=, 8 + i32.and $1=, $0, $pop2 + i32.const $4=, 0 +.LBB0_1: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB0_2 Depth 2 + block + loop # label1: + block + i32.const $push12=, 2 + i32.shl $push3=, $4, $pop12 + i32.const $push11=, table + i32.add $push4=, $pop3, $pop11 + i32.load $push10=, 0($pop4) + tee_local $push9=, $0=, $pop10 + i32.eqz $push17=, $pop9 + br_if 0, $pop17 # 0: down to label2 +.LBB0_2: # %for.body6 + # Parent Loop BB0_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label3: + copy_local $push14=, $0 + tee_local $push13=, $3=, $pop14 + i32.load $0=, 4($pop13) + block + i32.load8_u $push5=, 36($3) + i32.eqz $push18=, $pop5 + br_if 0, $pop18 # 0: down to label4 +# BB#3: # %land.lhs.true + # in Loop: Header=BB0_2 Depth=2 + br_if 4, $1 # 4: down to label0 +# BB#4: # %lor.lhs.false + # in Loop: Header=BB0_2 Depth=2 + i32.eqz $push19=, $2 + br_if 0, $pop19 # 0: down to label4 +# BB#5: # %land.lhs.true10 + # in Loop: Header=BB0_2 Depth=2 + i32.load8_u $push6=, 37($3) + br_if 4, $pop6 # 4: down to label0 +.LBB0_6: # %for.inc + # in Loop: Header=BB0_2 Depth=2 + end_block # label4: + br_if 0, $0 # 0: up to label3 +.LBB0_7: # %for.inc15 + # in Loop: Header=BB0_1 Depth=1 + end_loop + end_block # label2: + i32.const $push16=, 30 + i32.lt_u $0=, $4, $pop16 + i32.const $push15=, 1 + i32.add $push0=, $4, $pop15 + copy_local $4=, $pop0 + br_if 0, $0 # 0: up to label1 +# BB#8: # %for.end16 + end_loop + return +.LBB0_9: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size invalidate_memory, .Lfunc_end0-invalidate_memory + # -- End function + .section .text.cse_rtx_addr_varies_p,"ax",@progbits + .hidden cse_rtx_addr_varies_p # -- Begin function cse_rtx_addr_varies_p + .globl cse_rtx_addr_varies_p + .type cse_rtx_addr_varies_p,@function +cse_rtx_addr_varies_p: # @cse_rtx_addr_varies_p + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size cse_rtx_addr_varies_p, .Lfunc_end1-cse_rtx_addr_varies_p + # -- End function + .section .text.remove_from_table,"ax",@progbits + .hidden remove_from_table # -- Begin function remove_from_table + .globl remove_from_table + .type remove_from_table,@function +remove_from_table: # @remove_from_table + .param i32, i32 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size remove_from_table, .Lfunc_end2-remove_from_table + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push18=, 0 + i32.const $push16=, 0 + i32.load $push15=, __stack_pointer($pop16) + i32.const $push17=, 48 + i32.sub $push35=, $pop15, $pop17 + tee_local $push34=, $3=, $pop35 + i32.store __stack_pointer($pop18), $pop34 + i32.const $push0=, 40 + i32.add $push1=, $3, $pop0 + i64.const $push2=, 0 + i64.store 0($pop1), $pop2 + i32.const $push3=, 32 + i32.add $push4=, $3, $pop3 + i64.const $push33=, 0 + i64.store 0($pop4), $pop33 + i32.const $push5=, 24 + i32.add $push6=, $3, $pop5 + i64.const $push32=, 0 + i64.store 0($pop6), $pop32 + i32.const $push7=, 16 + i32.add $push8=, $3, $pop7 + i64.const $push31=, 0 + i64.store 0($pop8), $pop31 + i64.const $push30=, 0 + i64.store 8($3), $pop30 + i32.const $1=, 0 + i32.const $push29=, 0 + i32.const $push22=, 8 + i32.add $push23=, $3, $pop22 + i32.store table($pop29), $pop23 + i32.const $push28=, 1 + i32.store8 44($3), $pop28 + block + block + i32.const $push24=, 8 + i32.add $push25=, $3, $pop24 + copy_local $push27=, $pop25 + tee_local $push26=, $2=, $pop27 + br_if 0, $pop26 # 0: down to label6 +# BB#1: + i32.const $4=, 4 + br 1 # 1: down to label5 +.LBB3_2: + end_block # label6: + i32.const $4=, 0 +.LBB3_3: # =>This Inner Loop Header: Depth=1 + end_block # label5: + loop i32 # label7: + block + block + block + block + block + block + block + block + block + block + block + block + block + br_table $4, 2, 3, 6, 4, 0, 5, 1, 1 # 2: down to label18 + # 3: down to label17 + # 6: down to label14 + # 4: down to label16 + # 0: down to label20 + # 5: down to label15 + # 1: down to label19 +.LBB3_4: # %for.inc15.i + # in Loop: Header=BB3_3 Depth=1 + end_block # label20: + i32.const $push36=, 29 + i32.gt_u $push11=, $1, $pop36 + br_if 11, $pop11 # 11: down to label8 +# BB#5: # in Loop: Header=BB3_3 Depth=1 + i32.const $4=, 6 + br 12 # 12: up to label7 +.LBB3_6: # %for.inc15.i.for.body.i_crit_edge + # in Loop: Header=BB3_3 Depth=1 + end_block # label19: + i32.const $push43=, 1 + i32.add $push42=, $1, $pop43 + tee_local $push41=, $1=, $pop42 + i32.const $push40=, 2 + i32.shl $push13=, $pop41, $pop40 + i32.const $push39=, table + i32.add $push14=, $pop13, $pop39 + i32.load $push38=, 0($pop14) + tee_local $push37=, $2=, $pop38 + i32.eqz $push44=, $pop37 + br_if 8, $pop44 # 8: down to label10 +# BB#7: # in Loop: Header=BB3_3 Depth=1 + i32.const $4=, 0 + br 11 # 11: up to label7 +.LBB3_8: # %for.body6.i + # in Loop: Header=BB3_3 Depth=1 + end_block # label18: + i32.load $0=, 4($2) + i32.load8_u $push9=, 36($2) + i32.eqz $push45=, $pop9 + br_if 4, $pop45 # 4: down to label13 +# BB#9: # in Loop: Header=BB3_3 Depth=1 + i32.const $4=, 1 + br 10 # 10: up to label7 +.LBB3_10: # %land.lhs.true10.i + # in Loop: Header=BB3_3 Depth=1 + end_block # label17: + i32.load8_u $push10=, 37($2) + br_if 7, $pop10 # 7: down to label9 +# BB#11: # in Loop: Header=BB3_3 Depth=1 + i32.const $4=, 3 + br 9 # 9: up to label7 +.LBB3_12: # %for.inc.i + # in Loop: Header=BB3_3 Depth=1 + end_block # label16: + copy_local $2=, $0 + br_if 4, $0 # 4: down to label11 + br 3 # 3: down to label12 +.LBB3_13: # %invalidate_memory.exit + end_block # label15: + i32.const $push21=, 0 + i32.const $push19=, 48 + i32.add $push20=, $3, $pop19 + i32.store __stack_pointer($pop21), $pop20 + i32.const $push12=, 0 + return $pop12 +.LBB3_14: # %if.then.i + end_block # label14: + call abort@FUNCTION + unreachable +.LBB3_15: # in Loop: Header=BB3_3 Depth=1 + end_block # label13: + i32.const $4=, 3 + br 5 # 5: up to label7 +.LBB3_16: # in Loop: Header=BB3_3 Depth=1 + end_block # label12: + i32.const $4=, 4 + br 4 # 4: up to label7 +.LBB3_17: # in Loop: Header=BB3_3 Depth=1 + end_block # label11: + i32.const $4=, 0 + br 3 # 3: up to label7 +.LBB3_18: # in Loop: Header=BB3_3 Depth=1 + end_block # label10: + i32.const $4=, 4 + br 2 # 2: up to label7 +.LBB3_19: # in Loop: Header=BB3_3 Depth=1 + end_block # label9: + i32.const $4=, 2 + br 1 # 1: up to label7 +.LBB3_20: # in Loop: Header=BB3_3 Depth=1 + end_block # label8: + i32.const $4=, 5 + br 0 # 0: up to label7 +.LBB3_21: + end_loop + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .type table,@object # @table + .section .bss.table,"aw",@nobits + .p2align 4 +table: + .skip 128 + .size table, 128 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20000818-1.c.s b/src/binaryen/test/torture-s/20000818-1.c.s new file mode 100644 index 0000000000..29081034f9 --- /dev/null +++ b/src/binaryen/test/torture-s/20000818-1.c.s @@ -0,0 +1,41 @@ + .text + .file "20000818-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.yylex,"ax",@progbits + .hidden yylex # -- Begin function yylex + .globl yylex + .type yylex,@function +yylex: # @yylex + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size yylex, .Lfunc_end1-yylex + # -- End function + .hidden temporary_obstack # @temporary_obstack + .type temporary_obstack,@object + .section .bss.temporary_obstack,"aw",@nobits + .globl temporary_obstack + .p2align 2 +temporary_obstack: + .int32 0 + .size temporary_obstack, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000819-1.c.s b/src/binaryen/test/torture-s/20000819-1.c.s new file mode 100644 index 0000000000..da5d55986b --- /dev/null +++ b/src/binaryen/test/torture-s/20000819-1.c.s @@ -0,0 +1,78 @@ + .text + .file "20000819-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + block + block + i32.const $push0=, 0 + i32.sub $push10=, $pop0, $1 + tee_local $push9=, $1=, $pop10 + i32.const $push8=, 0 + i32.gt_s $push1=, $pop9, $pop8 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %for.body.lr.ph + i32.const $push2=, 2 + i32.shl $push3=, $1, $pop2 + i32.add $1=, $0, $pop3 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.load $push4=, 0($1) + i32.const $push11=, 1 + i32.le_s $push5=, $pop4, $pop11 + br_if 2, $pop5 # 2: down to label0 +# BB#3: # %for.cond + # in Loop: Header=BB0_2 Depth=1 + i32.const $push14=, 4 + i32.add $push13=, $1, $pop14 + tee_local $push12=, $1=, $pop13 + i32.le_u $push6=, $pop12, $0 + br_if 0, $pop6 # 0: up to label2 +.LBB0_4: # %for.end + end_loop + end_block # label1: + return +.LBB0_5: # %if.then + end_block # label0: + i32.const $push7=, 0 + call exit@FUNCTION, $pop7 + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, a+4 + i32.const $push0=, 1 + call foo@FUNCTION, $pop1, $pop0 + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 2 # 0x2 + .int32 0 # 0x0 + .size a, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20000910-1.c.s b/src/binaryen/test/torture-s/20000910-1.c.s new file mode 100644 index 0000000000..9827741bad --- /dev/null +++ b/src/binaryen/test/torture-s/20000910-1.c.s @@ -0,0 +1,64 @@ + .text + .file "20000910-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end2: + .size bar, .Lfunc_end2-bar + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .param i32, i32 +# BB#0: # %entry + block + i32.ne $push0=, $0, $1 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + return +.LBB3_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size baz, .Lfunc_end3-baz + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20000910-2.c.s b/src/binaryen/test/torture-s/20000910-2.c.s new file mode 100644 index 0000000000..508daa06a4 --- /dev/null +++ b/src/binaryen/test/torture-s/20000910-2.c.s @@ -0,0 +1,66 @@ + .text + .file "20000910-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + block + i32.const $push7=, 0 + i32.load $push0=, list($pop7) + i32.const $push6=, 42 + i32.call $push1=, strchr@FUNCTION, $pop0, $pop6 + i32.eqz $push10=, $pop1 + br_if 0, $pop10 # 0: down to label1 +# BB#1: # %if.then.i + i32.const $push9=, 0 + i32.load $push2=, list+4($pop9) + i32.const $push8=, 42 + i32.call $push3=, strchr@FUNCTION, $pop2, $pop8 + i32.eqz $push11=, $pop3 + br_if 1, $pop11 # 1: down to label0 +# BB#2: # %foo.exit + i32.const $push4=, 0 + return $pop4 +.LBB0_3: # %if.then2.i + end_block # label1: + call abort@FUNCTION + unreachable +.LBB0_4: # %if.else.i + end_block # label0: + i32.const $push5=, 0 + call exit@FUNCTION, $pop5 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "*" + .size .L.str, 2 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "e" + .size .L.str.1, 2 + + .hidden list # @list + .type list,@object + .section .data.list,"aw",@progbits + .globl list + .p2align 2 +list: + .int32 .L.str + .int32 .L.str.1 + .size list, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 + .functype strchr, i32, i32, i32 diff --git a/src/binaryen/test/torture-s/20000914-1.c.s b/src/binaryen/test/torture-s/20000914-1.c.s new file mode 100644 index 0000000000..c94cbf1385 --- /dev/null +++ b/src/binaryen/test/torture-s/20000914-1.c.s @@ -0,0 +1,65 @@ + .text + .file "20000914-1.c" + .section .text.blah,"ax",@progbits + .hidden blah # -- Begin function blah + .globl blah + .type blah,@function +blah: # @blah + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size blah, .Lfunc_end0-blah + # -- End function + .section .text.convert_like_real,"ax",@progbits + .hidden convert_like_real # -- Begin function convert_like_real + .globl convert_like_real + .type convert_like_real,@function +convert_like_real: # @convert_like_real + .param i32 + .result i32 +# BB#0: # %entry + block + i32.load8_u $push0=, 8($0) + i32.const $push1=, 222 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %sw.bb + return $0 +.LBB1_2: # %sw.epilog + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size convert_like_real, .Lfunc_end1-convert_like_real + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 12 + i32.call $push4=, malloc@FUNCTION, $pop0 + tee_local $push3=, $0=, $pop4 + i32.const $push1=, 222 + i32.store 8($pop3), $pop1 + i32.call $drop=, convert_like_real@FUNCTION, $0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype malloc, i32, i32 + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20000917-1.c.s b/src/binaryen/test/torture-s/20000917-1.c.s new file mode 100644 index 0000000000..0bc20e5783 --- /dev/null +++ b/src/binaryen/test/torture-s/20000917-1.c.s @@ -0,0 +1,51 @@ + .text + .file "20000917-1.c" + .section .text.one,"ax",@progbits + .hidden one # -- Begin function one + .globl one + .type one,@function +one: # @one + .param i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.store 8($0), $pop0 + i64.const $push1=, 4294967297 + i64.store 0($0):p2align=2, $pop1 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size one, .Lfunc_end0-one + # -- End function + .section .text.zero,"ax",@progbits + .hidden zero # -- Begin function zero + .globl zero + .type zero,@function +zero: # @zero + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store 8($0), $pop0 + i64.const $push1=, 0 + i64.store 0($0):p2align=2, $pop1 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size zero, .Lfunc_end1-zero + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20001009-1.c.s b/src/binaryen/test/torture-s/20001009-1.c.s new file mode 100644 index 0000000000..f9c31b38e5 --- /dev/null +++ b/src/binaryen/test/torture-s/20001009-1.c.s @@ -0,0 +1,35 @@ + .text + .file "20001009-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20001009-2.c.s b/src/binaryen/test/torture-s/20001009-2.c.s new file mode 100644 index 0000000000..6d765403bc --- /dev/null +++ b/src/binaryen/test/torture-s/20001009-2.c.s @@ -0,0 +1,87 @@ + .text + .file "20001009-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 + .local i32, i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load $push0=, b($pop3) + i32.eqz $push9=, $pop0 + br_if 0, $pop9 # 0: down to label0 +# BB#1: # %for.body.preheader + i32.const $0=, 1 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + #APP + #NO_APP + i32.const $push8=, 0 + i32.const $push7=, 0 + i32.load $push1=, b($pop7) + i32.const $push6=, -1 + i32.add $push5=, $pop1, $pop6 + tee_local $push4=, $1=, $pop5 + i32.store b($pop8), $pop4 + br_if 0, $1 # 0: up to label1 +.LBB0_3: # %if.end + end_loop + end_block # label0: + i32.const $push2=, -1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + block + i32.const $push2=, 0 + i32.load $push0=, b($pop2) + i32.eqz $push9=, $pop0 + br_if 0, $pop9 # 0: down to label2 +# BB#1: # %for.body.i.preheader + i32.const $0=, 1 +.LBB1_2: # %for.body.i + # =>This Inner Loop Header: Depth=1 + loop # label3: + #APP + #NO_APP + i32.const $push7=, 0 + i32.const $push6=, 0 + i32.load $push1=, b($pop6) + i32.const $push5=, -1 + i32.add $push4=, $pop1, $pop5 + tee_local $push3=, $1=, $pop4 + i32.store b($pop7), $pop3 + br_if 0, $1 # 0: up to label3 +.LBB1_3: # %foo.exit + end_loop + end_block # label2: + i32.const $push8=, 0 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden b # @b + .type b,@object + .section .data.b,"aw",@progbits + .globl b + .p2align 2 +b: + .int32 1 # 0x1 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20001011-1.c.s b/src/binaryen/test/torture-s/20001011-1.c.s new file mode 100644 index 0000000000..46e0133634 --- /dev/null +++ b/src/binaryen/test/torture-s/20001011-1.c.s @@ -0,0 +1,39 @@ + .text + .file "20001011-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, .L.str + i32.call $push1=, strcmp@FUNCTION, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "main" + .size .L.str, 5 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strcmp, i32, i32, i32 diff --git a/src/binaryen/test/torture-s/20001013-1.c.s b/src/binaryen/test/torture-s/20001013-1.c.s new file mode 100644 index 0000000000..810082bddd --- /dev/null +++ b/src/binaryen/test/torture-s/20001013-1.c.s @@ -0,0 +1,72 @@ + .text + .file "20001013-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 255 + i32.and $push1=, $1, $pop0 + i32.ne $push2=, $pop1, $1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load $push7=, 0($0) + i32.const $push5=, 0 + i32.load $push4=, 4($0) + i32.sub $push6=, $pop5, $pop4 + i32.le_s $push8=, $pop7, $pop6 + return $pop8 +.LBB0_2: # %return + end_block # label0: + i32.const $push3=, 1 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push6=, 0 + i32.load $push2=, z($pop6) + i32.const $push5=, 0 + i32.const $push4=, 0 + i32.load $push0=, z+4($pop4) + i32.sub $push1=, $pop5, $pop0 + i32.le_s $push3=, $pop2, $pop1 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %if.end + i32.const $push7=, 0 + call exit@FUNCTION, $pop7 + unreachable +.LBB1_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden z # @z + .type z,@object + .section .data.z,"aw",@progbits + .globl z + .p2align 2 +z: + .int32 4294963268 # 0xfffff044 + .int32 4096 # 0x1000 + .size z, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20001017-1.c.s b/src/binaryen/test/torture-s/20001017-1.c.s new file mode 100644 index 0000000000..62c4ce71e8 --- /dev/null +++ b/src/binaryen/test/torture-s/20001017-1.c.s @@ -0,0 +1,38 @@ + .text + .file "20001017-1.c" + .section .text.bug,"ax",@progbits + .hidden bug # -- Begin function bug + .globl bug + .type bug,@function +bug: # @bug + .param i32, i32, i32, i32, i32, f64, i32, i32, i32, i32, f64, i32, i32 +# BB#0: # %entry + block + i32.ne $push0=, $11, $0 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bug, .Lfunc_end0-bug + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20001017-2.c.s b/src/binaryen/test/torture-s/20001017-2.c.s new file mode 100644 index 0000000000..7cb94bf68e --- /dev/null +++ b/src/binaryen/test/torture-s/20001017-2.c.s @@ -0,0 +1,50 @@ + .text + .file "20001017-2.c" + .section .text.fn_4parms,"ax",@progbits + .hidden fn_4parms # -- Begin function fn_4parms + .globl fn_4parms + .type fn_4parms,@function +fn_4parms: # @fn_4parms + .param i32, i32, i32, i32 +# BB#0: # %entry + block + i32.load $push0=, 0($1) + i32.const $push1=, 1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load $push3=, 0($2) + i32.const $push4=, 2 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %lor.lhs.false2 + i32.load $push6=, 0($3) + i32.const $push7=, 3 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %if.end + return +.LBB0_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size fn_4parms, .Lfunc_end0-fn_4parms + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %fn_4parms.exit + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20001024-1.c.s b/src/binaryen/test/torture-s/20001024-1.c.s new file mode 100644 index 0000000000..989f348b7a --- /dev/null +++ b/src/binaryen/test/torture-s/20001024-1.c.s @@ -0,0 +1,67 @@ + .text + .file "20001024-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.load $push0=, 0($1) + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load $push1=, 4($1) + i32.const $push2=, 250000 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %lor.lhs.false2 + i32.load $push4=, 8($1) + br_if 0, $pop4 # 0: down to label0 +# BB#3: # %lor.lhs.false5 + i32.const $push5=, 12 + i32.add $push6=, $1, $pop5 + i32.load $push7=, 0($pop6) + i32.const $push8=, 250000 + i32.ne $push9=, $pop7, $pop8 + br_if 0, $pop9 # 0: down to label0 +# BB#4: # %if.end + return $1 +.LBB0_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo +# BB#0: # %bar.exit + # fallthrough-return + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20001026-1.c.s b/src/binaryen/test/torture-s/20001026-1.c.s new file mode 100644 index 0000000000..52d373288d --- /dev/null +++ b/src/binaryen/test/torture-s/20001026-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20001026-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20001027-1.c.s b/src/binaryen/test/torture-s/20001027-1.c.s new file mode 100644 index 0000000000..b8cda8a748 --- /dev/null +++ b/src/binaryen/test/torture-s/20001027-1.c.s @@ -0,0 +1,56 @@ + .text + .file "20001027-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push0=, 1 + i32.store x($pop8), $pop0 + i32.const $push7=, 0 + i32.load $push1=, p($pop7) + i32.const $push2=, 2 + i32.store 0($pop1), $pop2 + block + i32.const $push6=, 0 + i32.load $push3=, x($pop6) + i32.const $push5=, 2 + i32.ne $push4=, $pop3, $pop5 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + i32.const $push9=, 0 + call exit@FUNCTION, $pop9 + unreachable +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 2 +x: + .int32 0 # 0x0 + .size x, 4 + + .hidden p # @p + .type p,@object + .section .data.p,"aw",@progbits + .globl p + .p2align 2 +p: + .int32 x + .size p, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20001031-1.c.s b/src/binaryen/test/torture-s/20001031-1.c.s new file mode 100644 index 0000000000..69e5e7ae2b --- /dev/null +++ b/src/binaryen/test/torture-s/20001031-1.c.s @@ -0,0 +1,88 @@ + .text + .file "20001031-1.c" + .section .text.t1,"ax",@progbits + .hidden t1 # -- Begin function t1 + .globl t1 + .type t1,@function +t1: # @t1 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 4100 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size t1, .Lfunc_end0-t1 + # -- End function + .section .text.t2,"ax",@progbits + .hidden t2 # -- Begin function t2 + .globl t2 + .type t2,@function +t2: # @t2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 4096 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size t2, .Lfunc_end1-t2 + # -- End function + .section .text.t3,"ax",@progbits + .hidden t3 # -- Begin function t3 + .globl t3 + .type t3,@function +t3: # @t3 + .param i64 +# BB#0: # %entry + block + i64.const $push0=, 2147487743 + i64.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %if.end + return +.LBB2_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size t3, .Lfunc_end2-t3 + # -- End function + .section .text.t4,"ax",@progbits + .hidden t4 # -- Begin function t4 + .globl t4 + .type t4,@function +t4: # @t4 + .result i64 +# BB#0: # %entry + i64.const $push0=, 4096 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size t4, .Lfunc_end3-t4 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20001101.c.s b/src/binaryen/test/torture-s/20001101.c.s new file mode 100644 index 0000000000..d4610e8c59 --- /dev/null +++ b/src/binaryen/test/torture-s/20001101.c.s @@ -0,0 +1,63 @@ + .text + .file "20001101.c" + .section .text.dummy,"ax",@progbits + .hidden dummy # -- Begin function dummy + .globl dummy + .type dummy,@function +dummy: # @dummy + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 7 + i32.store 0($1), $pop0 + i32.const $push1=, 1 + i32.store 0($0), $pop1 + i32.const $push2=, 1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size dummy, .Lfunc_end0-dummy + # -- End function + .section .text.bogus,"ax",@progbits + .hidden bogus # -- Begin function bogus + .globl bogus + .type bogus,@function +bogus: # @bogus + .param i32, i32, i32 +# BB#0: # %if.end5 + i32.load8_u $push0=, 0($0) + i32.const $push1=, 1 + i32.or $push2=, $pop0, $pop1 + i32.store8 0($0), $pop2 + block + i32.const $push3=, 7 + i32.ne $push4=, $1, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end8 + return +.LBB1_2: # %if.then7 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size bogus, .Lfunc_end1-bogus + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20001108-1.c.s b/src/binaryen/test/torture-s/20001108-1.c.s new file mode 100644 index 0000000000..3cc913cde8 --- /dev/null +++ b/src/binaryen/test/torture-s/20001108-1.c.s @@ -0,0 +1,57 @@ + .text + .file "20001108-1.c" + .section .text.signed_poly,"ax",@progbits + .hidden signed_poly # -- Begin function signed_poly + .globl signed_poly + .type signed_poly,@function +signed_poly: # @signed_poly + .param i64, i32 + .result i64 +# BB#0: # %entry + i64.const $push0=, 32 + i64.shl $push1=, $0, $pop0 + i64.const $push6=, 32 + i64.shr_s $push2=, $pop1, $pop6 + i64.extend_s/i32 $push3=, $1 + i64.mul $push4=, $pop2, $pop3 + i64.add $push5=, $pop4, $0 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size signed_poly, .Lfunc_end0-signed_poly + # -- End function + .section .text.unsigned_poly,"ax",@progbits + .hidden unsigned_poly # -- Begin function unsigned_poly + .globl unsigned_poly + .type unsigned_poly,@function +unsigned_poly: # @unsigned_poly + .param i64, i32 + .result i64 +# BB#0: # %entry + i64.const $push0=, 4294967295 + i64.and $push1=, $0, $pop0 + i64.extend_u/i32 $push2=, $1 + i64.mul $push3=, $pop1, $pop2 + i64.add $push4=, $pop3, $0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end1: + .size unsigned_poly, .Lfunc_end1-unsigned_poly + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end4 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20001111-1.c.s b/src/binaryen/test/torture-s/20001111-1.c.s new file mode 100644 index 0000000000..79ce243765 --- /dev/null +++ b/src/binaryen/test/torture-s/20001111-1.c.s @@ -0,0 +1,70 @@ + .text + .file "20001111-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 52783 + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load8_u $push1=, next_buffer($pop5) + i32.select $push3=, $pop2, $pop0, $pop1 + i32.add $push4=, $pop3, $0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push2=, 0 + i32.load8_u $push0=, next_buffer($pop2) + i32.eqz $push5=, $pop0 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %if.then + call abort@FUNCTION + unreachable +.LBB2_2: # %if.end4 + end_block # label0: + i32.const $push4=, 0 + i32.const $push1=, 1 + i32.store8 next_buffer($pop4), $pop1 + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type next_buffer,@object # @next_buffer + .section .bss.next_buffer,"aw",@nobits + .p2align 2 +next_buffer: + .int8 0 # 0x0 + .size next_buffer, 1 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20001112-1.c.s b/src/binaryen/test/torture-s/20001112-1.c.s new file mode 100644 index 0000000000..7fc9cb5dae --- /dev/null +++ b/src/binaryen/test/torture-s/20001112-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20001112-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20001121-1.c.s b/src/binaryen/test/torture-s/20001121-1.c.s new file mode 100644 index 0000000000..56a5ee01bc --- /dev/null +++ b/src/binaryen/test/torture-s/20001121-1.c.s @@ -0,0 +1,55 @@ + .text + .file "20001121-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result f64 +# BB#0: # %entry + i32.const $push0=, 0 + f64.load $push1=, d($pop0) + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 3 +d: + .int64 0 # double 0 + .size d, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20001124-1.c.s b/src/binaryen/test/torture-s/20001124-1.c.s new file mode 100644 index 0000000000..6bd6b6cc54 --- /dev/null +++ b/src/binaryen/test/torture-s/20001124-1.c.s @@ -0,0 +1,110 @@ + .text + .file "20001124-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 9 + i32.store8 s+4($pop1), $pop0 + i32.const $push9=, 0 + i32.const $push2=, 512 + i32.store s($pop9), $pop2 + i32.const $push8=, 0 + i64.const $push3=, 2048 + i64.store i($pop8), $pop3 + i32.const $push7=, 0 + i32.const $push4=, s + i32.store i+8($pop7), $pop4 + i32.const $push6=, 0 + i64.const $push5=, 0 + i64.store f($pop6), $pop5 + call do_isofs_readdir@FUNCTION + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.do_isofs_readdir,"ax",@progbits + .type do_isofs_readdir,@function # -- Begin function do_isofs_readdir +do_isofs_readdir: # @do_isofs_readdir + .local i64 +# BB#0: # %entry + block + i32.const $push9=, 0 + i64.load $push8=, f($pop9) + tee_local $push7=, $0=, $pop8 + i32.const $push6=, 0 + i64.load $push0=, i($pop6) + i64.lt_s $push1=, $pop7, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %cleanup + return +.LBB1_2: # %if.then12 + end_block # label0: + i32.const $push10=, 0 + i32.load $push2=, i+8($pop10) + i64.load8_u $push3=, 4($pop2) + i64.shr_s $push4=, $0, $pop3 + i32.wrap/i64 $push5=, $pop4 + call isofs_bread@FUNCTION, $pop5 + unreachable + .endfunc +.Lfunc_end1: + .size do_isofs_readdir, .Lfunc_end1-do_isofs_readdir + # -- End function + .section .text.isofs_bread,"ax",@progbits + .type isofs_bread,@function # -- Begin function isofs_bread +isofs_bread: # @isofs_bread + .param i32 +# BB#0: # %entry + block + br_if 0, $0 # 0: down to label1 +# BB#1: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable +.LBB2_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size isofs_bread, .Lfunc_end2-isofs_bread + # -- End function + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 2 +s: + .skip 12 + .size s, 12 + + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 3 +i: + .skip 16 + .size i, 16 + + .hidden f # @f + .type f,@object + .section .bss.f,"aw",@nobits + .globl f + .p2align 3 +f: + .skip 8 + .size f, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20001130-1.c.s b/src/binaryen/test/torture-s/20001130-1.c.s new file mode 100644 index 0000000000..821cf79d37 --- /dev/null +++ b/src/binaryen/test/torture-s/20001130-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20001130-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20001130-2.c.s b/src/binaryen/test/torture-s/20001130-2.c.s new file mode 100644 index 0000000000..e2f88b40cb --- /dev/null +++ b/src/binaryen/test/torture-s/20001130-2.c.s @@ -0,0 +1,19 @@ + .text + .file "20001130-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20001203-1.c.s b/src/binaryen/test/torture-s/20001203-1.c.s new file mode 100644 index 0000000000..10db8b7042 --- /dev/null +++ b/src/binaryen/test/torture-s/20001203-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20001203-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20001203-2.c.s b/src/binaryen/test/torture-s/20001203-2.c.s new file mode 100644 index 0000000000..c6d17882f8 --- /dev/null +++ b/src/binaryen/test/torture-s/20001203-2.c.s @@ -0,0 +1,176 @@ + .text + .file "20001203-2.c" + .section .text.create_array_type,"ax",@progbits + .hidden create_array_type # -- Begin function create_array_type + .globl create_array_type + .type create_array_type,@function +create_array_type: # @create_array_type + .param i32, i32 + .result i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + block + block + i32.eqz $push51=, $0 + br_if 0, $pop51 # 0: down to label1 +# BB#1: # %if.end + i32.const $push0=, 1 + i32.store16 8($0), $pop0 + i32.load $push1=, 0($1) + i32.const $push2=, 3 + i32.mul $push3=, $pop1, $pop2 + i32.store 0($0), $pop3 + block + i32.load $push28=, 4($0) + tee_local $push27=, $1=, $pop28 + i32.eqz $push52=, $pop27 + br_if 0, $pop52 # 0: down to label2 +# BB#2: # %cond.true + i32.const $push4=, 20 + i32.add $push5=, $1, $pop4 + i32.load $push35=, 0($pop5) + tee_local $push34=, $2=, $pop35 + i32.const $push33=, 16 + i32.add $push32=, $1, $pop33 + tee_local $push31=, $4=, $pop32 + i32.load $push30=, 0($pop31) + tee_local $push29=, $3=, $pop30 + i32.sub $push6=, $pop34, $pop29 + i32.const $push7=, 15 + i32.le_s $push8=, $pop6, $pop7 + br_if 2, $pop8 # 2: down to label0 +# BB#3: # %if.end9 + i32.const $push42=, 16 + i32.add $push41=, $3, $pop42 + tee_local $push40=, $3=, $pop41 + i32.store 0($4), $pop40 + block + i32.const $push9=, 12 + i32.add $push39=, $1, $pop9 + tee_local $push38=, $4=, $pop39 + i32.load $push37=, 0($pop38) + tee_local $push36=, $6=, $pop37 + i32.ne $push10=, $3, $pop36 + br_if 0, $pop10 # 0: down to label3 +# BB#4: # %if.then14 + i32.const $push11=, 28 + i32.add $push12=, $1, $pop11 + i32.const $push13=, 1 + i32.store 0($pop12), $pop13 +.LBB0_5: # %if.end15 + end_block # label3: + i32.const $push24=, 16 + i32.add $push25=, $1, $pop24 + i32.const $push14=, 24 + i32.add $push15=, $1, $pop14 + i32.load $push50=, 0($pop15) + tee_local $push49=, $5=, $pop50 + i32.add $push18=, $pop49, $3 + i32.const $push16=, -1 + i32.xor $push17=, $5, $pop16 + i32.and $push48=, $pop18, $pop17 + tee_local $push47=, $3=, $pop48 + i32.const $push19=, 8 + i32.add $push20=, $1, $pop19 + i32.load $push46=, 0($pop20) + tee_local $push45=, $1=, $pop46 + i32.sub $push21=, $3, $pop45 + i32.sub $push22=, $2, $1 + i32.gt_s $push23=, $pop21, $pop22 + i32.select $push44=, $2, $pop47, $pop23 + tee_local $push43=, $1=, $pop44 + i32.store 0($pop25), $pop43 + i32.store 0($4), $1 + i32.store 12($0), $6 + return $0 +.LBB0_6: + end_block # label2: + i32.const $push26=, 0 + i32.store 12($0), $pop26 + return $0 +.LBB0_7: # %if.then + end_block # label1: + i32.call $drop=, alloc_type@FUNCTION + unreachable +.LBB0_8: # %if.then8 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size create_array_type, .Lfunc_end0-create_array_type + # -- End function + .section .text.alloc_type,"ax",@progbits + .hidden alloc_type # -- Begin function alloc_type + .globl alloc_type + .type alloc_type,@function +alloc_type: # @alloc_type + .result i32 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size alloc_type, .Lfunc_end1-alloc_type + # -- End function + .section .text.get_discrete_bounds,"ax",@progbits + .hidden get_discrete_bounds # -- Begin function get_discrete_bounds + .globl get_discrete_bounds + .type get_discrete_bounds,@function +get_discrete_bounds: # @get_discrete_bounds + .param i32, i32 +# BB#0: # %entry + i64.const $push0=, 0 + i64.store 0($0), $pop0 + i64.const $push1=, 2 + i64.store 0($1), $pop1 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size get_discrete_bounds, .Lfunc_end2-get_discrete_bounds + # -- End function + .section .text._obstack_newchunk,"ax",@progbits + .hidden _obstack_newchunk # -- Begin function _obstack_newchunk + .globl _obstack_newchunk + .type _obstack_newchunk,@function +_obstack_newchunk: # @_obstack_newchunk + .param i32, i32 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size _obstack_newchunk, .Lfunc_end3-_obstack_newchunk + # -- End function + .section .text.xmalloc,"ax",@progbits + .hidden xmalloc # -- Begin function xmalloc + .globl xmalloc + .type xmalloc,@function +xmalloc: # @xmalloc + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size xmalloc, .Lfunc_end4-xmalloc + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end5: + .size main, .Lfunc_end5-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20001221-1.c.s b/src/binaryen/test/torture-s/20001221-1.c.s new file mode 100644 index 0000000000..cf283cb092 --- /dev/null +++ b/src/binaryen/test/torture-s/20001221-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20001221-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20001228-1.c.s b/src/binaryen/test/torture-s/20001228-1.c.s new file mode 100644 index 0000000000..7123073866 --- /dev/null +++ b/src/binaryen/test/torture-s/20001228-1.c.s @@ -0,0 +1,74 @@ + .text + .file "20001228-1.c" + .section .text.foo1,"ax",@progbits + .hidden foo1 # -- Begin function foo1 + .globl foo1 + .type foo1,@function +foo1: # @foo1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size foo1, .Lfunc_end0-foo1 + # -- End function + .section .text.foo2,"ax",@progbits + .hidden foo2 # -- Begin function foo2 + .globl foo2 + .type foo2,@function +foo2: # @foo2 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push6=, $pop2, $pop4 + tee_local $push5=, $0=, $pop6 + i32.const $push0=, 1 + i32.store 12($pop5), $pop0 + i32.load8_s $push1=, 12($0) + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size foo2, .Lfunc_end1-foo2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push10=, $pop4, $pop6 + tee_local $push9=, $0=, $pop10 + i32.store __stack_pointer($pop7), $pop9 + i32.const $push0=, 1 + i32.store 12($0), $pop0 + block + i32.load8_u $push1=, 12($0) + i32.const $push8=, 1 + i32.ne $push2=, $pop1, $pop8 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20001229-1.c.s b/src/binaryen/test/torture-s/20001229-1.c.s new file mode 100644 index 0000000000..839aa660ef --- /dev/null +++ b/src/binaryen/test/torture-s/20001229-1.c.s @@ -0,0 +1,42 @@ + .text + .file "20001229-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.showinfo,"ax",@progbits + .hidden showinfo # -- Begin function showinfo + .globl showinfo + .type showinfo,@function +showinfo: # @showinfo +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end1: + .size showinfo, .Lfunc_end1-showinfo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010106-1.c.s b/src/binaryen/test/torture-s/20010106-1.c.s new file mode 100644 index 0000000000..3cc558c709 --- /dev/null +++ b/src/binaryen/test/torture-s/20010106-1.c.s @@ -0,0 +1,63 @@ + .text + .file "20010106-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push8=, 2 + i32.add $push7=, $0, $pop8 + tee_local $push6=, $0=, $pop7 + i32.const $push0=, 7 + i32.ge_u $push1=, $pop6, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %switch.lookup + i32.const $push9=, 2 + i32.shl $push2=, $0, $pop9 + i32.const $push3=, .Lswitch.table.f + i32.add $push4=, $pop2, $pop3 + i32.load $push5=, 0($pop4) + return $pop5 +.LBB0_2: # %sw.default + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .Lswitch.table.f,@object # @switch.table.f + .section .rodata..Lswitch.table.f,"a",@progbits + .p2align 4 +.Lswitch.table.f: + .int32 33 # 0x21 + .int32 0 # 0x0 + .int32 7 # 0x7 + .int32 4 # 0x4 + .int32 3 # 0x3 + .int32 15 # 0xf + .int32 9 # 0x9 + .size .Lswitch.table.f, 28 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010114-1.c.s b/src/binaryen/test/torture-s/20010114-1.c.s new file mode 100644 index 0000000000..74d5027208 --- /dev/null +++ b/src/binaryen/test/torture-s/20010114-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20010114-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010116-1.c.s b/src/binaryen/test/torture-s/20010116-1.c.s new file mode 100644 index 0000000000..fd210a0b13 --- /dev/null +++ b/src/binaryen/test/torture-s/20010116-1.c.s @@ -0,0 +1,71 @@ + .text + .file "20010116-1.c" + .section .text.find,"ax",@progbits + .hidden find # -- Begin function find + .globl find + .type find,@function +find: # @find + .param i32, i32 +# BB#0: # %for.cond + block + i32.sub $push0=, $1, $0 + i32.const $push1=, 12 + i32.div_s $push2=, $pop0, $pop1 + i32.const $push3=, 2 + i32.shr_s $push7=, $pop2, $pop3 + tee_local $push6=, $1=, $pop7 + i32.const $push4=, 1 + i32.lt_s $push5=, $pop6, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %for.body + call ok@FUNCTION, $1 + unreachable +.LBB0_2: # %for.end + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size find, .Lfunc_end0-find + # -- End function + .section .text.ok,"ax",@progbits + .hidden ok # -- Begin function ok + .globl ok + .type ok,@function +ok: # @ok + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %if.end + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable +.LBB1_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size ok, .Lfunc_end1-ok + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + call ok@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010118-1.c.s b/src/binaryen/test/torture-s/20010118-1.c.s new file mode 100644 index 0000000000..5c6d74d980 --- /dev/null +++ b/src/binaryen/test/torture-s/20010118-1.c.s @@ -0,0 +1,80 @@ + .text + .file "20010118-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32, i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32, i32, i32, i32 +# BB#0: # %entry + block + block + i32.load $push0=, 0($0) + i32.ne $push1=, $pop0, $1 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %lor.lhs.false + i32.const $push2=, 4 + i32.add $push3=, $0, $pop2 + i32.load $push4=, 0($pop3) + i32.eq $push5=, $pop4, $2 + br_if 1, $pop5 # 1: down to label0 +.LBB1_2: # %if.then + end_block # label1: + i32.store 8($0), $3 + i32.store 12($0), $4 + i32.load $push6=, 16($0) + f64.convert_s/i32 $push7=, $pop6 + f64.const $push8=, 0x0p0 + f64.mul $push9=, $pop7, $pop8 + f64.const $push10=, 0x1p-1 + f64.mul $push11=, $pop9, $pop10 + i32.trunc_s/f64 $push12=, $pop11 + i32.add $push13=, $pop12, $1 + i32.store 0($0), $pop13 + i32.const $push14=, 4 + i32.add $push15=, $0, $pop14 + i32.load $push16=, 20($0) + f64.convert_s/i32 $push17=, $pop16 + f64.const $push23=, 0x0p0 + f64.mul $push18=, $pop17, $pop23 + f64.const $push22=, 0x1p-1 + f64.mul $push19=, $pop18, $pop22 + i32.trunc_s/f64 $push20=, $pop19 + i32.add $push21=, $pop20, $2 + i32.store 0($pop15), $pop21 +.LBB1_3: # %if.end + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010119-1.c.s b/src/binaryen/test/torture-s/20010119-1.c.s new file mode 100644 index 0000000000..945268cd89 --- /dev/null +++ b/src/binaryen/test/torture-s/20010119-1.c.s @@ -0,0 +1,43 @@ + .text + .file "20010119-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end1: + .size baz, .Lfunc_end1-baz + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010123-1.c.s b/src/binaryen/test/torture-s/20010123-1.c.s new file mode 100644 index 0000000000..96e7b75484 --- /dev/null +++ b/src/binaryen/test/torture-s/20010123-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20010123-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010129-1.c.s b/src/binaryen/test/torture-s/20010129-1.c.s new file mode 100644 index 0000000000..ba1dd8f744 --- /dev/null +++ b/src/binaryen/test/torture-s/20010129-1.c.s @@ -0,0 +1,220 @@ + .text + .file "20010129-1.c" + .section .text.baz1,"ax",@progbits + .hidden baz1 # -- Begin function baz1 + .globl baz1 + .type baz1,@function +baz1: # @baz1 + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load $push4=, baz1.l($pop5) + tee_local $push3=, $1=, $pop4 + i32.const $push1=, 1 + i32.add $push2=, $pop3, $pop1 + i32.store baz1.l($pop0), $pop2 + copy_local $push6=, $1 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size baz1, .Lfunc_end0-baz1 + # -- End function + .section .text.baz2,"ax",@progbits + .hidden baz2 # -- Begin function baz2 + .globl baz2 + .type baz2,@function +baz2: # @baz2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size baz2, .Lfunc_end1-baz2 + # -- End function + .section .text.baz3,"ax",@progbits + .hidden baz3 # -- Begin function baz3 + .globl baz3 + .type baz3,@function +baz3: # @baz3 + .param i32 + .result i32 +# BB#0: # %entry + block + i32.eqz $push1=, $0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push0=, 1 + return $pop0 +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size baz3, .Lfunc_end2-baz3 + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push28=, 0 + i32.const $push27=, 0 + i32.load $push26=, baz1.l($pop27) + tee_local $push25=, $11=, $pop26 + i32.const $push24=, 1 + i32.add $push3=, $pop25, $pop24 + i32.store baz1.l($pop28), $pop3 + block + block + i32.ge_s $push4=, $11, $1 + br_if 0, $pop4 # 0: down to label2 +# BB#1: # %if.then.lr.ph + i32.const $push5=, 13834 + i32.and $push6=, $2, $pop5 + i32.const $push35=, 0 + i32.ne $push7=, $pop6, $pop35 + i32.const $push8=, 128 + i32.and $push9=, $2, $pop8 + i32.eqz $push10=, $pop9 + i32.const $push34=, 0 + i32.load $push11=, bar($pop34) + i32.eqz $push12=, $pop11 + i32.or $push33=, $pop10, $pop12 + tee_local $push32=, $4=, $pop33 + i32.or $5=, $pop7, $pop32 + i32.const $push15=, 16 + i32.and $3=, $2, $pop15 + i32.const $push31=, 2 + i32.and $push1=, $2, $pop31 + i32.const $push30=, 0 + i32.ne $8=, $pop1, $pop30 + i32.const $push14=, 16384 + i32.and $push0=, $2, $pop14 + i32.eqz $9=, $pop0 + i32.const $push13=, 13832 + i32.and $push2=, $2, $pop13 + i32.const $push29=, 0 + i32.ne $10=, $pop2, $pop29 + i32.const $2=, 0 +.LBB3_2: # %if.then + # =>This Inner Loop Header: Depth=1 + loop # label3: + block + block + block + i32.or $push16=, $2, $3 + i32.eqz $push44=, $pop16 + br_if 0, $pop44 # 0: down to label6 +# BB#3: # %if.end17 + # in Loop: Header=BB3_2 Depth=1 + i32.const $push36=, 1 + i32.select $6=, $2, $pop36, $2 + br_if 1, $3 # 1: down to label5 +# BB#4: # %land.lhs.true25 + # in Loop: Header=BB3_2 Depth=1 + copy_local $2=, $6 + br_if 2, $5 # 2: down to label4 + br 5 # 5: down to label1 +.LBB3_5: # in Loop: Header=BB3_2 Depth=1 + end_block # label6: + i32.const $2=, 0 + br 1 # 1: down to label4 +.LBB3_6: # %land.lhs.true20 + # in Loop: Header=BB3_2 Depth=1 + end_block # label5: + i32.eqz $7=, $2 + copy_local $2=, $6 + i32.const $push37=, 1 + i32.xor $push17=, $7, $pop37 + i32.or $push18=, $9, $pop17 + i32.and $push19=, $8, $pop18 + i32.or $push20=, $10, $pop19 + i32.or $push21=, $4, $pop20 + i32.eqz $push45=, $pop21 + br_if 3, $pop45 # 3: down to label1 +.LBB3_7: # %while.cond.backedge + # in Loop: Header=BB3_2 Depth=1 + end_block # label4: + i32.const $push42=, 0 + i32.const $push41=, 2 + i32.add $push22=, $11, $pop41 + i32.store baz1.l($pop42), $pop22 + i32.const $push40=, 1 + i32.add $push39=, $11, $pop40 + tee_local $push38=, $11=, $pop39 + i32.lt_s $push23=, $pop38, $1 + br_if 0, $pop23 # 0: up to label3 +.LBB3_8: # %while.end + end_loop + end_block # label2: + i32.const $push43=, 0 + return $pop43 +.LBB3_9: # %for.body + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size foo, .Lfunc_end3-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push12=, $pop3, $pop5 + tee_local $push11=, $0=, $pop12 + i32.store __stack_pointer($pop6), $pop11 + i32.const $push0=, 0 + i32.const $push7=, 12 + i32.add $push8=, $0, $pop7 + i32.store bar($pop0), $pop8 + i32.const $push10=, 0 + i32.store 12($0), $pop10 + i32.const $push2=, 1 + i32.const $push1=, 51217 + i32.call $drop=, foo@FUNCTION, $0, $pop2, $pop1 + i32.const $push9=, 0 + call exit@FUNCTION, $pop9 + unreachable + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + .type baz1.l,@object # @baz1.l + .section .bss.baz1.l,"aw",@nobits + .p2align 2 +baz1.l: + .int32 0 # 0x0 + .size baz1.l, 4 + + .hidden bar # @bar + .type bar,@object + .section .bss.bar,"aw",@nobits + .globl bar + .p2align 2 +bar: + .int32 0 + .size bar, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010206-1.c.s b/src/binaryen/test/torture-s/20010206-1.c.s new file mode 100644 index 0000000000..c6760a744f --- /dev/null +++ b/src/binaryen/test/torture-s/20010206-1.c.s @@ -0,0 +1,32 @@ + .text + .file "20010206-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 26 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010221-1.c.s b/src/binaryen/test/torture-s/20010221-1.c.s new file mode 100644 index 0000000000..85f6e2cca5 --- /dev/null +++ b/src/binaryen/test/torture-s/20010221-1.c.s @@ -0,0 +1,59 @@ + .text + .file "20010221-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $2=, 0 + block + i32.const $push8=, 0 + i32.load $push7=, n($pop8) + tee_local $push6=, $0=, $pop7 + i32.const $push5=, 1 + i32.lt_s $push0=, $pop6, $pop5 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %for.body.preheader + i32.const $1=, 45 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.select $1=, $2, $1, $2 + i32.const $push11=, 1 + i32.add $push10=, $2, $pop11 + tee_local $push9=, $2=, $pop10 + i32.lt_s $push1=, $pop9, $0 + br_if 0, $pop1 # 0: up to label1 +# BB#3: # %for.end + end_loop + i32.const $push2=, 1 + i32.ne $push3=, $1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#4: # %if.end5 + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable +.LBB0_5: # %if.then4 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden n # @n + .type n,@object + .section .data.n,"aw",@progbits + .globl n + .p2align 2 +n: + .int32 2 # 0x2 + .size n, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010222-1.c.s b/src/binaryen/test/torture-s/20010222-1.c.s new file mode 100644 index 0000000000..c3dd64d357 --- /dev/null +++ b/src/binaryen/test/torture-s/20010222-1.c.s @@ -0,0 +1,48 @@ + .text + .file "20010222-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push10=, 0 + i32.load $push1=, a+4($pop10) + i32.const $push9=, 0 + i32.load $push0=, a($pop9) + i32.add $push2=, $pop1, $pop0 + i32.const $push3=, -3 + i32.mul $push4=, $pop2, $pop3 + i32.const $push5=, 83 + i32.add $push6=, $pop4, $pop5 + i32.const $push7=, 12 + i32.lt_u $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#1: # %if.then + call abort@FUNCTION + unreachable +.LBB0_2: # %if.end + end_block # label0: + i32.const $push11=, 0 + call exit@FUNCTION, $pop11 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 18 # 0x12 + .int32 6 # 0x6 + .size a, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010224-1.c.s b/src/binaryen/test/torture-s/20010224-1.c.s new file mode 100644 index 0000000000..45b303ef99 --- /dev/null +++ b/src/binaryen/test/torture-s/20010224-1.c.s @@ -0,0 +1,168 @@ + .text + .file "20010224-1.c" + .section .text.ba_compute_psd,"ax",@progbits + .hidden ba_compute_psd # -- Begin function ba_compute_psd + .globl ba_compute_psd + .type ba_compute_psd,@function +ba_compute_psd: # @ba_compute_psd + .param i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push22=, 1 + i32.shl $push21=, $0, $pop22 + tee_local $push20=, $2=, $pop21 + i32.const $push1=, masktab + i32.add $push2=, $pop20, $pop1 + i32.load16_s $push3=, 0($pop2) + i32.const $push19=, 1 + i32.shl $push4=, $pop3, $pop19 + i32.const $push5=, bndpsd + i32.add $push18=, $pop4, $pop5 + tee_local $push17=, $1=, $pop18 + i32.const $push6=, psd + i32.add $push7=, $2, $pop6 + i32.load16_u $push16=, 0($pop7) + tee_local $push15=, $4=, $pop16 + i32.store16 0($pop17), $pop15 + block + i32.const $push14=, 2 + i32.gt_s $push8=, $0, $pop14 + br_if 0, $pop8 # 0: down to label0 +# BB#1: # %for.body.preheader + i32.const $push9=, -1 + i32.add $3=, $0, $pop9 + i32.const $push10=, psd+2 + i32.add $0=, $2, $pop10 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.load16_u $push12=, 0($0) + i32.const $push28=, 65535 + i32.and $push11=, $4, $pop28 + i32.add $4=, $pop12, $pop11 + i32.const $push27=, 2 + i32.add $push0=, $0, $pop27 + copy_local $0=, $pop0 + i32.const $push26=, 1 + i32.add $push25=, $3, $pop26 + tee_local $push24=, $3=, $pop25 + i32.const $push23=, 2 + i32.lt_s $push13=, $pop24, $pop23 + br_if 0, $pop13 # 0: up to label1 +# BB#3: # %for.cond.for.end_crit_edge + end_loop + i32.store16 0($1), $4 +.LBB0_4: # %for.end + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size ba_compute_psd, .Lfunc_end0-ba_compute_psd + # -- End function + .section .text.logadd,"ax",@progbits + .hidden logadd # -- Begin function logadd + .globl logadd + .type logadd,@function +logadd: # @logadd + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.load16_u $push1=, 0($1) + i32.load16_u $push0=, 0($0) + i32.add $push2=, $pop1, $pop0 + i32.const $push3=, 16 + i32.shl $push4=, $pop2, $pop3 + i32.const $push6=, 16 + i32.shr_s $push5=, $pop4, $pop6 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end1: + .size logadd, .Lfunc_end1-logadd + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push20=, 0 + i32.load16_s $push0=, masktab($pop20) + i32.const $push1=, 1 + i32.shl $push2=, $pop0, $pop1 + i32.const $push3=, bndpsd + i32.add $push4=, $pop2, $pop3 + i32.const $push19=, 0 + i32.load16_u $push6=, psd+2($pop19) + i32.const $push18=, 0 + i32.load16_u $push5=, psd($pop18) + i32.add $push7=, $pop6, $pop5 + i32.const $push17=, 0 + i32.load16_u $push8=, psd+4($pop17) + i32.add $push9=, $pop7, $pop8 + i32.const $push16=, 0 + i32.load16_u $push10=, psd+6($pop16) + i32.add $push11=, $pop9, $pop10 + i32.store16 0($pop4), $pop11 + block + i32.const $push15=, 0 + i32.load16_u $push12=, bndpsd+2($pop15) + i32.const $push13=, 140 + i32.ne $push14=, $pop12, $pop13 + br_if 0, $pop14 # 0: down to label2 +# BB#1: # %if.end + i32.const $push21=, 0 + return $pop21 +.LBB2_2: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden masktab # @masktab + .type masktab,@object + .section .data.masktab,"aw",@progbits + .globl masktab + .p2align 1 +masktab: + .int16 1 # 0x1 + .int16 2 # 0x2 + .int16 3 # 0x3 + .int16 4 # 0x4 + .int16 5 # 0x5 + .int16 0 # 0x0 + .size masktab, 12 + + .hidden psd # @psd + .type psd,@object + .section .data.psd,"aw",@progbits + .globl psd + .p2align 1 +psd: + .int16 50 # 0x32 + .int16 40 # 0x28 + .int16 30 # 0x1e + .int16 20 # 0x14 + .int16 10 # 0xa + .int16 0 # 0x0 + .size psd, 12 + + .hidden bndpsd # @bndpsd + .type bndpsd,@object + .section .data.bndpsd,"aw",@progbits + .globl bndpsd + .p2align 1 +bndpsd: + .int16 1 # 0x1 + .int16 2 # 0x2 + .int16 3 # 0x3 + .int16 4 # 0x4 + .int16 5 # 0x5 + .int16 0 # 0x0 + .size bndpsd, 12 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20010325-1.c.s b/src/binaryen/test/torture-s/20010325-1.c.s new file mode 100644 index 0000000000..b5362c4766 --- /dev/null +++ b/src/binaryen/test/torture-s/20010325-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20010325-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010329-1.c.s b/src/binaryen/test/torture-s/20010329-1.c.s new file mode 100644 index 0000000000..c31299427b --- /dev/null +++ b/src/binaryen/test/torture-s/20010329-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20010329-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010403-1.c.s b/src/binaryen/test/torture-s/20010403-1.c.s new file mode 100644 index 0000000000..c745ff7590 --- /dev/null +++ b/src/binaryen/test/torture-s/20010403-1.c.s @@ -0,0 +1,89 @@ + .text + .file "20010403-1.c" + .section .text.a,"ax",@progbits + .hidden a # -- Begin function a + .globl a + .type a,@function +a: # @a + .param i32, i32 +# BB#0: # %c.exit + # fallthrough-return + .endfunc +.Lfunc_end0: + .size a, .Lfunc_end0-a + # -- End function + .section .text.b,"ax",@progbits + .hidden b # -- Begin function b + .globl b + .type b,@function +b: # @b + .param i32 +# BB#0: # %entry + i32.load $push0=, 0($0) + i32.const $push1=, 1 + i32.add $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size b, .Lfunc_end1-b + # -- End function + .section .text.c,"ax",@progbits + .hidden c # -- Begin function c + .globl c + .type c,@function +c: # @c + .param i32, i32 +# BB#0: # %entry + block + i32.eq $push0=, $0, $1 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + return +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size c, .Lfunc_end2-c + # -- End function + .section .text.d,"ax",@progbits + .hidden d # -- Begin function d + .globl d + .type d,@function +d: # @d + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end3: + .size d, .Lfunc_end3-d + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e + .p2align 2 +e: + .int32 0 # 0x0 + .size e, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010409-1.c.s b/src/binaryen/test/torture-s/20010409-1.c.s new file mode 100644 index 0000000000..affee1d160 --- /dev/null +++ b/src/binaryen/test/torture-s/20010409-1.c.s @@ -0,0 +1,132 @@ + .text + .file "20010409-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push0=, 25 + i32.mul $push1=, $2, $pop0 + i32.load8_s $push2=, 4($1) + i32.add $push3=, $pop1, $pop2 + i32.store c($pop4), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + block + br_if 0, $1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 5000 + i32.store c($pop1), $pop0 + i32.const $push6=, 0 + i32.load $push2=, b($pop6) + i32.eqz $push3=, $pop2 + i32.const $push4=, 16 + i32.shl $push5=, $pop3, $pop4 + i32.call $drop=, bar@FUNCTION, $2, $pop5, $2, $2, $2 + unreachable + .endfunc +.Lfunc_end2: + .size test, .Lfunc_end2-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, a + i32.store d($pop1), $pop0 + i32.const $push10=, 0 + i32.const $push2=, 5000 + i32.store c($pop10), $pop2 + i32.const $push9=, 0 + i32.const $push8=, 0 + i32.store d+4($pop9), $pop8 + i32.const $push7=, 0 + i32.load $push3=, b($pop7) + i32.eqz $push4=, $pop3 + i32.const $push5=, 16 + i32.shl $push6=, $pop4, $pop5 + i32.call $drop=, bar@FUNCTION, $0, $pop6, $0, $0, $0 + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden b # @b + .type b,@object + .section .data.b,"aw",@progbits + .globl b + .p2align 2 +b: + .int32 1 # 0x1 + .size b, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .skip 8 + .size d, 8 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010422-1.c.s b/src/binaryen/test/torture-s/20010422-1.c.s new file mode 100644 index 0000000000..b7bbfd5a49 --- /dev/null +++ b/src/binaryen/test/torture-s/20010422-1.c.s @@ -0,0 +1,37 @@ + .text + .file "20010422-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push3=, 4 + i32.const $push2=, 8 + i32.const $push0=, 5 + i32.lt_u $push1=, $0, $pop0 + i32.select $push4=, $pop3, $pop2, $pop1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010518-1.c.s b/src/binaryen/test/torture-s/20010518-1.c.s new file mode 100644 index 0000000000..c18250eda5 --- /dev/null +++ b/src/binaryen/test/torture-s/20010518-1.c.s @@ -0,0 +1,44 @@ + .text + .file "20010518-1.c" + .section .text.add,"ax",@progbits + .hidden add # -- Begin function add + .globl add + .type add,@function +add: # @add + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + i32.add $push0=, $1, $0 + i32.add $push1=, $pop0, $2 + i32.add $push2=, $pop1, $3 + i32.add $push3=, $pop2, $4 + i32.add $push4=, $pop3, $5 + i32.add $push5=, $pop4, $6 + i32.add $push6=, $pop5, $7 + i32.add $push7=, $pop6, $8 + i32.add $push8=, $pop7, $9 + i32.add $push9=, $pop8, $10 + i32.add $push10=, $pop9, $11 + i32.add $push11=, $pop10, $12 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end0: + .size add, .Lfunc_end0-add + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010518-2.c.s b/src/binaryen/test/torture-s/20010518-2.c.s new file mode 100644 index 0000000000..c967a27697 --- /dev/null +++ b/src/binaryen/test/torture-s/20010518-2.c.s @@ -0,0 +1,88 @@ + .text + .file "20010518-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push29=, 0 + i32.const $push27=, 0 + i32.load $push26=, __stack_pointer($pop27) + i32.const $push28=, 48 + i32.sub $push35=, $pop26, $pop28 + tee_local $push34=, $0=, $pop35 + i32.store __stack_pointer($pop29), $pop34 + i32.const $push33=, 2 + i32.store 24($0), $pop33 + i32.const $push0=, 1 + i32.store16 28($0), $pop0 + i32.load16_u $push1=, 28($0) + i32.store16 46($0), $pop1 + i32.const $push2=, 3 + i32.store16 22($0), $pop2 + i32.load $push3=, 24($0) + i32.store 40($0), $pop3 + i32.const $push4=, 4 + i32.store16 20($0), $pop4 + i32.load16_u $push5=, 22($0) + i32.store16 38($0), $pop5 + i32.const $push6=, 0 + i32.store 16($0), $pop6 + i32.load16_u $push7=, 20($0) + i32.store16 36($0), $pop7 + i32.const $push32=, 0 + i32.store8 15($0), $pop32 + i32.load $push8=, 16($0) + i32.store 32($0), $pop8 + i32.const $push31=, 0 + i32.store8 14($0), $pop31 + i32.load8_u $push9=, 15($0) + i32.store8 31($0), $pop9 + i32.load8_u $push10=, 14($0) + i32.store8 30($0), $pop10 + i32.const $push11=, 99 + i32.store8 31($0), $pop11 + block + i32.load16_u $push12=, 46($0) + i32.const $push30=, 1 + i32.ne $push13=, $pop12, $pop30 + br_if 0, $pop13 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load $push14=, 40($0) + i32.const $push36=, 2 + i32.ne $push15=, $pop14, $pop36 + br_if 0, $pop15 # 0: down to label0 +# BB#2: # %lor.lhs.false9 + i32.load16_u $push17=, 38($0) + i32.const $push16=, 3 + i32.ne $push18=, $pop17, $pop16 + br_if 0, $pop18 # 0: down to label0 +# BB#3: # %lor.lhs.false14 + i32.load16_u $push20=, 36($0) + i32.const $push19=, 4 + i32.ne $push21=, $pop20, $pop19 + br_if 0, $pop21 # 0: down to label0 +# BB#4: # %lor.lhs.false19 + i32.load8_u $push23=, 31($0) + i32.const $push22=, 99 + i32.ne $push24=, $pop23, $pop22 + br_if 0, $pop24 # 0: down to label0 +# BB#5: # %if.end + i32.const $push25=, 0 + call exit@FUNCTION, $pop25 + unreachable +.LBB0_6: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010520-1.c.s b/src/binaryen/test/torture-s/20010520-1.c.s new file mode 100644 index 0000000000..6a2dc61ed1 --- /dev/null +++ b/src/binaryen/test/torture-s/20010520-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20010520-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010604-1.c.s b/src/binaryen/test/torture-s/20010604-1.c.s new file mode 100644 index 0000000000..14c0743564 --- /dev/null +++ b/src/binaryen/test/torture-s/20010604-1.c.s @@ -0,0 +1,53 @@ + .text + .file "20010604-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32, i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.ne $push1=, $6, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %entry + i32.eqz $push4=, $3 + br_if 0, $pop4 # 0: down to label0 +# BB#2: # %entry + i32.eqz $push5=, $4 + br_if 0, $pop5 # 0: down to label0 +# BB#3: # %entry + i32.eqz $push6=, $5 + br_if 0, $pop6 # 0: down to label0 +# BB#4: # %if.end + i32.add $push2=, $1, $0 + i32.add $push3=, $pop2, $2 + return $pop3 +.LBB0_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010605-2.c.s b/src/binaryen/test/torture-s/20010605-2.c.s new file mode 100644 index 0000000000..57a48c9123 --- /dev/null +++ b/src/binaryen/test/torture-s/20010605-2.c.s @@ -0,0 +1,109 @@ + .text + .file "20010605-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %baz.exit + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + f64.load $push0=, 0($0) + f64.const $push1=, 0x1p0 + f64.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %lor.lhs.false + f64.load $push3=, 8($0) + f64.const $push4=, 0x1p1 + f64.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end + return +.LBB1_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + block + f32.load $push0=, 0($0) + f32.const $push1=, 0x1.8p1 + f32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %lor.lhs.false + f32.load $push3=, 4($0) + f32.const $push4=, 0x1p2 + f32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label1 +# BB#2: # %if.end + return +.LBB2_3: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size bar, .Lfunc_end2-bar + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .param i32 +# BB#0: # %entry + block + i64.load $push3=, 0($0) + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i64.load $push2=, 0($pop1) + i64.const $push12=, 0 + i64.const $push4=, 4612037862148276224 + i32.call $push5=, __netf2@FUNCTION, $pop3, $pop2, $pop12, $pop4 + br_if 0, $pop5 # 0: down to label2 +# BB#1: # %lor.lhs.false + i64.load $push9=, 16($0) + i32.const $push6=, 24 + i32.add $push7=, $0, $pop6 + i64.load $push8=, 0($pop7) + i64.const $push13=, 0 + i64.const $push10=, 4612108230892453888 + i32.call $push11=, __eqtf2@FUNCTION, $pop9, $pop8, $pop13, $pop10 + br_if 0, $pop11 # 0: down to label2 +# BB#2: # %if.end + return +.LBB3_3: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size baz, .Lfunc_end3-baz + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20010711-1.c.s b/src/binaryen/test/torture-s/20010711-1.c.s new file mode 100644 index 0000000000..ecd032be88 --- /dev/null +++ b/src/binaryen/test/torture-s/20010711-1.c.s @@ -0,0 +1,31 @@ + .text + .file "20010711-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010717-1.c.s b/src/binaryen/test/torture-s/20010717-1.c.s new file mode 100644 index 0000000000..881f9eb930 --- /dev/null +++ b/src/binaryen/test/torture-s/20010717-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20010717-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20010723-1.c.s b/src/binaryen/test/torture-s/20010723-1.c.s new file mode 100644 index 0000000000..051500debd --- /dev/null +++ b/src/binaryen/test/torture-s/20010723-1.c.s @@ -0,0 +1,32 @@ + .text + .file "20010723-1.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .result i32 +# BB#0: # %entry + i32.const $push0=, 8 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010904-1.c.s b/src/binaryen/test/torture-s/20010904-1.c.s new file mode 100644 index 0000000000..64552ff790 --- /dev/null +++ b/src/binaryen/test/torture-s/20010904-1.c.s @@ -0,0 +1,28 @@ + .text + .file "20010904-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden y # @y + .type y,@object + .section .bss.y,"aw",@nobits + .globl y + .p2align 5 +y: + .skip 2112 + .size y, 2112 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010904-2.c.s b/src/binaryen/test/torture-s/20010904-2.c.s new file mode 100644 index 0000000000..93e1a211f4 --- /dev/null +++ b/src/binaryen/test/torture-s/20010904-2.c.s @@ -0,0 +1,28 @@ + .text + .file "20010904-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden y # @y + .type y,@object + .section .bss.y,"aw",@nobits + .globl y + .p2align 5 +y: + .skip 2112 + .size y, 2112 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20010910-1.c.s b/src/binaryen/test/torture-s/20010910-1.c.s new file mode 100644 index 0000000000..969c8868b7 --- /dev/null +++ b/src/binaryen/test/torture-s/20010910-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20010910-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %for.cond3.4 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20010915-1.c.s b/src/binaryen/test/torture-s/20010915-1.c.s new file mode 100644 index 0000000000..22a9eb0388 --- /dev/null +++ b/src/binaryen/test/torture-s/20010915-1.c.s @@ -0,0 +1,377 @@ + .text + .file "20010915-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push14=, 0 + i32.const $push12=, 0 + i32.load $push11=, __stack_pointer($pop12) + i32.const $push13=, 32 + i32.sub $push21=, $pop11, $pop13 + tee_local $push20=, $2=, $pop21 + i32.store __stack_pointer($pop14), $pop20 + i32.const $push2=, 16 + i32.add $push3=, $2, $pop2 + i32.const $push19=, 0 + i32.load $push1=, .Lmain.args+16($pop19) + i32.store 0($pop3), $pop1 + i32.const $push18=, 0 + i64.load $push4=, .Lmain.args+8($pop18) + i64.store 8($2), $pop4 + i32.const $push17=, 0 + i64.load $push5=, .Lmain.args($pop17) + i64.store 0($2), $pop5 + i32.const $push16=, 5 + i32.call $drop=, x@FUNCTION, $pop16, $2 + block + i32.const $push15=, 0 + i32.load $push6=, check($pop15) + i32.const $push7=, 2 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#1: # %entry + i32.const $push23=, 0 + i32.load $push0=, o($pop23) + i32.const $push22=, 5 + i32.ne $push9=, $pop0, $pop22 + br_if 0, $pop9 # 0: down to label0 +# BB#2: # %if.end + i32.const $push10=, 0 + call exit@FUNCTION, $pop10 + unreachable +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.x,"ax",@progbits + .hidden x # -- Begin function x + .globl x + .type x,@function +x: # @x + .param i32, i32 + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + block + i32.const $push0=, 3 + i32.lt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %entry + i32.const $push2=, 0 + i32.load $push32=, o($pop2) + tee_local $push31=, $4=, $pop32 + i32.ge_s $push3=, $pop31, $0 + br_if 0, $pop3 # 0: down to label1 +# BB#2: # %land.lhs.true2 + i32.const $push4=, 2 + i32.shl $push5=, $4, $pop4 + i32.add $push36=, $1, $pop5 + tee_local $push35=, $2=, $pop36 + i32.load $push34=, 0($pop35) + tee_local $push33=, $5=, $pop34 + i32.eqz $push69=, $pop33 + br_if 0, $pop69 # 0: down to label1 +# BB#3: # %if.then + i32.const $push6=, .L.str + i32.call $push7=, strcmp@FUNCTION, $5, $pop6 + br_if 0, $pop7 # 0: down to label1 +# BB#4: # %lor.lhs.false.i + i32.const $push8=, 0 + i32.const $push39=, 0 + i32.load $push38=, check($pop39) + tee_local $push37=, $3=, $pop38 + i32.const $push9=, 1 + i32.add $push10=, $pop37, $pop9 + i32.store check($pop8), $pop10 + i32.const $push11=, 2 + i32.ge_s $push12=, $3, $pop11 + br_if 0, $pop12 # 0: down to label1 +# BB#5: # %s.exit + i32.const $push13=, .L.str + i32.call $push14=, strcmp@FUNCTION, $5, $pop13 + br_if 0, $pop14 # 0: down to label1 +# BB#6: # %lor.lhs.false.i45 + i32.const $push41=, 0 + i32.const $push15=, 2 + i32.add $push16=, $3, $pop15 + i32.store check($pop41), $pop16 + i32.const $push40=, 1 + i32.ge_s $push17=, $3, $pop40 + br_if 0, $pop17 # 0: down to label1 +# BB#7: # %s.exit48 + i32.const $push44=, 0 + i32.const $push43=, 0 + i32.store u($pop44), $pop43 + i32.load $push19=, 0($2) + i32.const $push42=, 1 + i32.add $push18=, $5, $pop42 + i32.eq $push20=, $pop19, $pop18 + br_if 0, $pop20 # 0: down to label1 +# BB#8: # %if.end19 + i32.const $push48=, 0 + i32.const $push47=, 1 + i32.add $push46=, $4, $pop47 + tee_local $push45=, $5=, $pop46 + i32.store o($pop48), $pop45 + block + i32.ge_s $push21=, $5, $0 + br_if 0, $pop21 # 0: down to label2 +# BB#9: # %while.body.lr.ph + i32.const $push22=, 2 + i32.shl $push23=, $5, $pop22 + i32.add $3=, $1, $pop23 + i32.const $push49=, 0 + i32.load8_u $4=, r.c.0($pop49) +.LBB1_10: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.load $push52=, 0($3) + tee_local $push51=, $1=, $pop52 + i32.load8_u $push25=, 0($pop51) + i32.const $push50=, 255 + i32.and $push24=, $4, $pop50 + i32.ne $push26=, $pop25, $pop24 + br_if 2, $pop26 # 2: down to label1 +# BB#11: # %lor.lhs.false.i50 + # in Loop: Header=BB1_10 Depth=1 + i32.load8_u $push27=, 1($1) + br_if 2, $pop27 # 2: down to label1 +# BB#12: # %lor.lhs.false.i50 + # in Loop: Header=BB1_10 Depth=1 + i32.const $push56=, 0 + i32.load $push55=, r.cnt($pop56) + tee_local $push54=, $1=, $pop55 + i32.const $push53=, 4 + i32.ge_s $push28=, $pop54, $pop53 + br_if 2, $pop28 # 2: down to label1 +# BB#13: # %r.exit + # in Loop: Header=BB1_10 Depth=1 + i32.const $push67=, 0 + i32.const $push66=, 1 + i32.add $push29=, $1, $pop66 + i32.store r.cnt($pop67), $pop29 + i32.const $push65=, 0 + i32.const $push64=, 1 + i32.add $push63=, $4, $pop64 + tee_local $push62=, $4=, $pop63 + i32.store8 r.c.0($pop65), $pop62 + i32.const $push61=, 0 + i32.const $push60=, 1 + i32.add $push59=, $5, $pop60 + tee_local $push58=, $5=, $pop59 + i32.store o($pop61), $pop58 + i32.const $push57=, 4 + i32.add $3=, $3, $pop57 + i32.lt_s $push30=, $5, $0 + br_if 0, $pop30 # 0: up to label3 +.LBB1_14: # %cleanup + end_loop + end_block # label2: + i32.const $push68=, 0 + return $pop68 +.LBB1_15: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size x, .Lfunc_end1-x + # -- End function + .section .text.s,"ax",@progbits + .hidden s # -- Begin function s + .globl s + .type s,@function +s: # @s + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push0=, .L.str + i32.call $push1=, strcmp@FUNCTION, $0, $pop0 + br_if 0, $pop1 # 0: down to label4 +# BB#1: # %lor.lhs.false + i32.const $push10=, 0 + i32.const $push9=, 0 + i32.load $push8=, check($pop9) + tee_local $push7=, $2=, $pop8 + i32.const $push6=, 1 + i32.add $push2=, $pop7, $pop6 + i32.store check($pop10), $pop2 + i32.const $push3=, 2 + i32.ge_s $push4=, $2, $pop3 + br_if 0, $pop4 # 0: down to label4 +# BB#2: # %if.end + i32.const $push12=, 1 + i32.add $push5=, $0, $pop12 + i32.store 0($1), $pop5 + i32.const $push11=, 0 + return $pop11 +.LBB2_3: # %if.then + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size s, .Lfunc_end2-s + # -- End function + .section .text.m,"ax",@progbits + .hidden m # -- Begin function m + .globl m + .type m,@function +m: # @m + .param i32 + .result i32 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size m, .Lfunc_end3-m + # -- End function + .section .text.r,"ax",@progbits + .hidden r # -- Begin function r + .globl r + .type r,@function +r: # @r + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + block + i32.load8_u $push11=, 0($0) + tee_local $push10=, $1=, $pop11 + i32.const $push9=, 0 + i32.load8_u $push0=, r.c.0($pop9) + i32.ne $push1=, $pop10, $pop0 + br_if 0, $pop1 # 0: down to label5 +# BB#1: # %lor.lhs.false + i32.load8_u $push2=, 1($0) + br_if 0, $pop2 # 0: down to label5 +# BB#2: # %lor.lhs.false + i32.const $push14=, 0 + i32.load $push13=, r.cnt($pop14) + tee_local $push12=, $0=, $pop13 + i32.const $push3=, 4 + i32.ge_s $push4=, $pop12, $pop3 + br_if 0, $pop4 # 0: down to label5 +# BB#3: # %if.end + i32.const $push7=, 0 + i32.const $push5=, 1 + i32.add $push6=, $0, $pop5 + i32.store r.cnt($pop7), $pop6 + i32.const $push17=, 0 + i32.const $push16=, 1 + i32.add $push8=, $1, $pop16 + i32.store8 r.c.0($pop17), $pop8 + i32.const $push15=, 1 + return $pop15 +.LBB4_4: # %if.then + end_block # label5: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end4: + .size r, .Lfunc_end4-r + # -- End function + .hidden check # @check + .type check,@object + .section .bss.check,"aw",@nobits + .globl check + .p2align 2 +check: + .int32 0 # 0x0 + .size check, 4 + + .hidden o # @o + .type o,@object + .section .bss.o,"aw",@nobits + .globl o + .p2align 2 +o: + .int32 0 # 0x0 + .size o, 4 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "a" + .size .L.str, 2 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "b" + .size .L.str.1, 2 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "c" + .size .L.str.2, 2 + + .type .L.str.3,@object # @.str.3 +.L.str.3: + .asciz "d" + .size .L.str.3, 2 + + .type .L.str.4,@object # @.str.4 +.L.str.4: + .asciz "e" + .size .L.str.4, 2 + + .type .Lmain.args,@object # @main.args + .section .rodata..Lmain.args,"a",@progbits + .p2align 4 +.Lmain.args: + .int32 .L.str + .int32 .L.str.1 + .int32 .L.str.2 + .int32 .L.str.3 + .int32 .L.str.4 + .size .Lmain.args, 20 + + .hidden h # @h + .type h,@object + .section .bss.h,"aw",@nobits + .globl h + .p2align 2 +h: + .int32 0 + .size h, 4 + + .hidden u # @u + .type u,@object + .section .bss.u,"aw",@nobits + .globl u + .p2align 2 +u: + .int32 0 + .size u, 4 + + .type r.cnt,@object # @r.cnt + .section .bss.r.cnt,"aw",@nobits + .p2align 2 +r.cnt: + .int32 0 # 0x0 + .size r.cnt, 4 + + .type r.c.0,@object # @r.c.0 + .section .data.r.c.0,"aw",@progbits +r.c.0: + .int8 98 # 0x62 + .size r.c.0, 1 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 + .functype strcmp, i32, i32, i32 diff --git a/src/binaryen/test/torture-s/20010924-1.c.s b/src/binaryen/test/torture-s/20010924-1.c.s new file mode 100644 index 0000000000..96a6bd9eeb --- /dev/null +++ b/src/binaryen/test/torture-s/20010924-1.c.s @@ -0,0 +1,144 @@ + .text + .file "20010924-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push37=, 0 + i32.load8_u $push0=, a1($pop37) + i32.const $push1=, 52 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push40=, 0 + i32.load $push39=, a1+4($pop40) + tee_local $push38=, $0=, $pop39 + i32.load8_u $push3=, 0($pop38) + i32.const $push4=, 54 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end6 + i32.load8_u $push6=, 1($0) + i32.const $push7=, 50 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %if.end12 + i32.load8_u $push9=, 2($0) + br_if 0, $pop9 # 0: down to label0 +# BB#4: # %if.end18 + i32.const $push41=, 0 + i32.load8_u $push10=, a2($pop41) + i32.const $push11=, 118 + i32.ne $push12=, $pop10, $pop11 + br_if 0, $pop12 # 0: down to label0 +# BB#5: # %if.end23 + i32.const $push42=, 0 + i32.load8_u $push13=, a2+1($pop42) + i32.const $push14=, 99 + i32.ne $push15=, $pop13, $pop14 + br_if 0, $pop15 # 0: down to label0 +# BB#6: # %if.end28 + i32.const $push43=, 0 + i32.load8_u $push16=, a2+2($pop43) + i32.const $push17=, 113 + i32.ne $push18=, $pop16, $pop17 + br_if 0, $pop18 # 0: down to label0 +# BB#7: # %if.end33 + i32.const $push44=, 0 + i32.load8_u $push19=, a3($pop44) + i32.const $push20=, 111 + i32.ne $push21=, $pop19, $pop20 + br_if 0, $pop21 # 0: down to label0 +# BB#8: # %if.end38 + i32.const $push45=, 0 + i32.load8_u $push22=, a3+1($pop45) + i32.const $push23=, 119 + i32.ne $push24=, $pop22, $pop23 + br_if 0, $pop24 # 0: down to label0 +# BB#9: # %if.end43 + i32.const $push46=, 0 + i32.load8_u $push25=, a3+2($pop46) + i32.const $push26=, 120 + i32.ne $push27=, $pop25, $pop26 + br_if 0, $pop27 # 0: down to label0 +# BB#10: # %if.end48 + i32.const $push47=, 0 + i32.load8_u $push28=, a4($pop47) + i32.const $push29=, 57 + i32.ne $push30=, $pop28, $pop29 + br_if 0, $pop30 # 0: down to label0 +# BB#11: # %if.end53 + i32.const $push48=, 0 + i32.load8_u $push31=, a4+1($pop48) + i32.const $push32=, 101 + i32.ne $push33=, $pop31, $pop32 + br_if 0, $pop33 # 0: down to label0 +# BB#12: # %if.end58 + i32.const $push49=, 0 + i32.load8_u $push34=, a4+2($pop49) + i32.const $push35=, 98 + i32.ne $push36=, $pop34, $pop35 + br_if 0, $pop36 # 0: down to label0 +# BB#13: # %if.end63 + i32.const $push50=, 0 + return $pop50 +.LBB0_14: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "62" + .size .L.str, 3 + + .hidden a1 # @a1 + .type a1,@object + .section .data.a1,"aw",@progbits + .globl a1 + .p2align 2 +a1: + .int8 52 # 0x34 + .skip 3 + .int32 .L.str + .size a1, 8 + + .hidden a2 # @a2 + .type a2,@object + .section .data.a2,"aw",@progbits + .globl a2 +a2: + .int8 118 # 0x76 + .ascii "cq" + .size a2, 3 + + .hidden a3 # @a3 + .type a3,@object + .section .data.a3,"aw",@progbits + .globl a3 +a3: + .int8 111 # 0x6f + .asciz "wx" + .size a3, 4 + + .hidden a4 # @a4 + .type a4,@object + .section .data.a4,"aw",@progbits + .globl a4 +a4: + .int8 57 # 0x39 + .ascii "eb" + .size a4, 3 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20010925-1.c.s b/src/binaryen/test/torture-s/20010925-1.c.s new file mode 100644 index 0000000000..1c790764c1 --- /dev/null +++ b/src/binaryen/test/torture-s/20010925-1.c.s @@ -0,0 +1,68 @@ + .text + .file "20010925-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load16_u $push1=, src+8($pop6) + i32.store16 dst+8($pop0), $pop1 + i32.const $push5=, 0 + i32.const $push4=, 0 + i64.load $push2=, src($pop4) + i64.store dst($pop5), $pop2 + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.eqz $push2=, $2 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.call $drop=, memcpy@FUNCTION, $0, $1, $2 + i32.const $push0=, 0 + return $pop0 +.LBB1_2: + end_block # label0: + i32.const $push1=, 1 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .hidden dst # @dst + .type dst,@object + .section .bss.dst,"aw",@nobits + .globl dst + .p2align 4 +dst: + .skip 40 + .size dst, 40 + + .hidden src # @src + .type src,@object + .section .bss.src,"aw",@nobits + .globl src + .p2align 4 +src: + .skip 40 + .size src, 40 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20011008-3.c.s b/src/binaryen/test/torture-s/20011008-3.c.s new file mode 100644 index 0000000000..012515e503 --- /dev/null +++ b/src/binaryen/test/torture-s/20011008-3.c.s @@ -0,0 +1,120 @@ + .text + .file "20011008-3.c" + .section .text.log_compare,"ax",@progbits + .hidden log_compare # -- Begin function log_compare + .globl log_compare + .type log_compare,@function +log_compare: # @log_compare + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size log_compare, .Lfunc_end0-log_compare + # -- End function + .section .text.__db_txnlist_lsnadd,"ax",@progbits + .hidden __db_txnlist_lsnadd # -- Begin function __db_txnlist_lsnadd + .globl __db_txnlist_lsnadd + .type __db_txnlist_lsnadd,@function +__db_txnlist_lsnadd: # @__db_txnlist_lsnadd + .param i32, i32, i32, i32 + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $5=, 0 + i32.const $push0=, 12 + i32.add $4=, $1, $pop0 + i32.const $6=, 1 + block + block + i32.const $push9=, 1 + i32.and $push8=, $3, $pop9 + tee_local $push7=, $3=, $pop8 + br_if 0, $pop7 # 0: down to label1 +# BB#1: + i32.const $7=, 1 + br 1 # 1: down to label0 +.LBB1_2: + end_block # label1: + i32.const $7=, 0 +.LBB1_3: # =>This Inner Loop Header: Depth=1 + end_block # label0: + loop i32 # label2: + block + block + block + block + block + block + br_table $7, 1, 2, 3, 0, 0 # 1: down to label7 + # 2: down to label6 + # 3: down to label5 + # 0: down to label8 +.LBB1_4: # %for.body + # in Loop: Header=BB1_3 Depth=1 + end_block # label8: + i32.const $push10=, 1 + i32.add $5=, $5, $pop10 + i32.const $6=, 1 + i32.eqz $push11=, $3 + br_if 3, $pop11 # 3: down to label4 +# BB#5: # in Loop: Header=BB1_3 Depth=1 + i32.const $7=, 0 + br 5 # 5: up to label2 +.LBB1_6: # %cond.false + # in Loop: Header=BB1_3 Depth=1 + end_block # label7: + i32.load $6=, 0($4) +# BB#7: # in Loop: Header=BB1_3 Depth=1 + i32.const $7=, 1 + br 4 # 4: up to label2 +.LBB1_8: # %cond.end + # in Loop: Header=BB1_3 Depth=1 + end_block # label6: + i32.lt_s $push1=, $5, $6 + br_if 2, $pop1 # 2: down to label3 +# BB#9: # in Loop: Header=BB1_3 Depth=1 + i32.const $7=, 2 + br 3 # 3: up to label2 +.LBB1_10: # %for.end35 + end_block # label5: + i32.const $push2=, 20 + i32.add $push3=, $1, $pop2 + i32.load $push4=, 0($pop3) + i64.load $push5=, 0($pop4):p2align=2 + i64.store 0($2):p2align=2, $pop5 + i32.add $push6=, $0, $5 + return $pop6 +.LBB1_11: # in Loop: Header=BB1_3 Depth=1 + end_block # label4: + i32.const $7=, 1 + br 1 # 1: up to label2 +.LBB1_12: # in Loop: Header=BB1_3 Depth=1 + end_block # label3: + i32.const $7=, 3 + br 0 # 0: up to label2 +.LBB1_13: + end_loop + .endfunc +.Lfunc_end1: + .size __db_txnlist_lsnadd, .Lfunc_end1-__db_txnlist_lsnadd + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end6 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20011019-1.c.s b/src/binaryen/test/torture-s/20011019-1.c.s new file mode 100644 index 0000000000..de2f0b69f8 --- /dev/null +++ b/src/binaryen/test/torture-s/20011019-1.c.s @@ -0,0 +1,58 @@ + .text + .file "20011019-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, y($pop0) + i32.const $push2=, x+4 + i32.sub $push3=, $pop1, $pop2 + i32.const $push4=, 2 + i32.shr_s $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, x+4 + i32.store y($pop1), $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden y # @y + .type y,@object + .section .bss.y,"aw",@nobits + .globl y + .p2align 2 +y: + .int32 0 + .size y, 4 + + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 2 +x: + .skip 24 + .size x, 24 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20011024-1.c.s b/src/binaryen/test/torture-s/20011024-1.c.s new file mode 100644 index 0000000000..83a602cfe3 --- /dev/null +++ b/src/binaryen/test/torture-s/20011024-1.c.s @@ -0,0 +1,60 @@ + .text + .file "20011024-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push0=, 6513249 + i32.store buf($pop6), $pop0 + block + i32.const $push2=, buf + i32.const $push1=, .L.str + i32.call $push3=, strcmp@FUNCTION, $pop2, $pop1 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %foo.exit + i32.const $push11=, 0 + i32.const $push10=, 0 + i32.load8_u $push4=, .L.str.1+8($pop10) + i32.store8 buf+8($pop11), $pop4 + i32.const $push9=, 0 + i32.const $push8=, 0 + i64.load $push5=, .L.str.1($pop8):p2align=0 + i64.store buf($pop9), $pop5 + i32.const $push7=, 0 + return $pop7 +.LBB0_2: # %if.then1.i + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden buf # @buf + .type buf,@object + .section .bss.buf,"aw",@nobits + .globl buf + .p2align 4 +buf: + .skip 50 + .size buf, 50 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "abc" + .size .L.str, 4 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "abcdefgh" + .size .L.str.1, 9 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype strcmp, i32, i32, i32 diff --git a/src/binaryen/test/torture-s/20011109-1.c.s b/src/binaryen/test/torture-s/20011109-1.c.s new file mode 100644 index 0000000000..3cf75fa12b --- /dev/null +++ b/src/binaryen/test/torture-s/20011109-1.c.s @@ -0,0 +1,121 @@ + .text + .file "20011109-1.c" + .section .text.fail1,"ax",@progbits + .hidden fail1 # -- Begin function fail1 + .globl fail1 + .type fail1,@function +fail1: # @fail1 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size fail1, .Lfunc_end0-fail1 + # -- End function + .section .text.fail2,"ax",@progbits + .hidden fail2 # -- Begin function fail2 + .globl fail2 + .type fail2,@function +fail2: # @fail2 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size fail2, .Lfunc_end1-fail2 + # -- End function + .section .text.fail3,"ax",@progbits + .hidden fail3 # -- Begin function fail3 + .globl fail3 + .type fail3,@function +fail3: # @fail3 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size fail3, .Lfunc_end2-fail3 + # -- End function + .section .text.fail4,"ax",@progbits + .hidden fail4 # -- Begin function fail4 + .globl fail4 + .type fail4,@function +fail4: # @fail4 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size fail4, .Lfunc_end3-fail4 + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + block + block + block + i32.const $push0=, 6 + i32.add $push4=, $0, $pop0 + tee_local $push3=, $0=, $pop4 + i32.const $push1=, 11 + i32.gt_u $push2=, $pop3, $pop1 + br_if 0, $pop2 # 0: down to label3 +# BB#1: # %entry + block + block + br_table $0, 3, 2, 2, 2, 2, 2, 4, 0, 5, 1, 1, 1, 3 # 3: down to label2 + # 2: down to label3 + # 4: down to label1 + # 0: down to label5 + # 5: down to label0 + # 1: down to label4 +.LBB4_2: # %sw.epilog9 + end_block # label5: + return +.LBB4_3: # %sw.bb3 + end_block # label4: + call fail3@FUNCTION + unreachable +.LBB4_4: # %sw.default + end_block # label3: + call fail4@FUNCTION + unreachable +.LBB4_5: # %sw.bb + end_block # label2: + call fail1@FUNCTION + unreachable +.LBB4_6: # %sw.bb1 + end_block # label1: + call fail2@FUNCTION + unreachable +.LBB4_7: # %sw.bb7 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end4: + .size foo, .Lfunc_end4-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end5: + .size main, .Lfunc_end5-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20011109-2.c.s b/src/binaryen/test/torture-s/20011109-2.c.s new file mode 100644 index 0000000000..ca5bf77bf7 --- /dev/null +++ b/src/binaryen/test/torture-s/20011109-2.c.s @@ -0,0 +1,19 @@ + .text + .file "20011109-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20011113-1.c.s b/src/binaryen/test/torture-s/20011113-1.c.s new file mode 100644 index 0000000000..4801efd7be --- /dev/null +++ b/src/binaryen/test/torture-s/20011113-1.c.s @@ -0,0 +1,154 @@ + .text + .file "20011113-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push2=, 8 + i32.add $push3=, $0, $pop2 + i32.load $push4=, 0($pop3) + i32.const $push5=, 21 + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %entry + i32.const $push9=, 12 + i32.add $push10=, $0, $pop9 + i32.load $push0=, 0($pop10) + i32.const $push11=, 22 + i32.ne $push12=, $pop0, $pop11 + br_if 0, $pop12 # 0: down to label0 +# BB#2: # %entry + i32.const $push7=, 16 + i32.add $push8=, $0, $pop7 + i32.load $push1=, 0($pop8) + i32.const $push13=, 23 + i32.ne $push14=, $pop1, $pop13 + br_if 0, $pop14 # 0: down to label0 +# BB#3: # %bar.exit + i32.const $push15=, 0 + return $pop15 +.LBB0_4: # %if.then.i + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.load $push0=, 0($0) + i32.const $push1=, 21 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %lor.lhs.false + i32.load $push3=, 4($0) + i32.const $push4=, 22 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label1 +# BB#2: # %lor.lhs.false4 + i32.load $push6=, 8($0) + i32.const $push7=, 23 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label1 +# BB#3: # %if.end + i32.const $push9=, 0 + return $pop9 +.LBB1_4: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push2=, 8 + i32.add $push3=, $0, $pop2 + i32.load $push4=, 0($pop3) + i32.const $push5=, 21 + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label2 +# BB#1: # %entry + i32.const $push9=, 12 + i32.add $push10=, $0, $pop9 + i32.load $push0=, 0($pop10) + i32.const $push11=, 22 + i32.ne $push12=, $pop0, $pop11 + br_if 0, $pop12 # 0: down to label2 +# BB#2: # %entry + i32.const $push7=, 16 + i32.add $push8=, $0, $pop7 + i32.load $push1=, 0($pop8) + i32.const $push13=, 23 + i32.ne $push14=, $pop1, $pop13 + br_if 0, $pop14 # 0: down to label2 +# BB#3: # %bar.exit + i32.const $push15=, 0 + return $pop15 +.LBB2_4: # %if.then.i + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size baz, .Lfunc_end2-baz + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, t + i32.call $drop=, baz@FUNCTION, $pop0 + i32.const $push2=, t + i32.call $drop=, foo@FUNCTION, $pop2 + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden t # @t + .type t,@object + .section .data.t,"aw",@progbits + .globl t + .p2align 2 +t: + .int8 26 # 0x1a + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int32 0 # 0x0 + .int32 21 # 0x15 + .int32 22 # 0x16 + .int32 23 # 0x17 + .size t, 20 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20011114-1.c.s b/src/binaryen/test/torture-s/20011114-1.c.s new file mode 100644 index 0000000000..4ca246c379 --- /dev/null +++ b/src/binaryen/test/torture-s/20011114-1.c.s @@ -0,0 +1,33 @@ + .text + .file "20011114-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.load8_s $push0=, 1($0) + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20011115-1.c.s b/src/binaryen/test/torture-s/20011115-1.c.s new file mode 100644 index 0000000000..f52addda54 --- /dev/null +++ b/src/binaryen/test/torture-s/20011115-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20011115-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20011121-1.c.s b/src/binaryen/test/torture-s/20011121-1.c.s new file mode 100644 index 0000000000..860e47e742 --- /dev/null +++ b/src/binaryen/test/torture-s/20011121-1.c.s @@ -0,0 +1,28 @@ + .text + .file "20011121-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden s1 # @s1 + .type s1,@object + .section .bss.s1,"aw",@nobits + .globl s1 + .p2align 2 +s1: + .skip 76 + .size s1, 76 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20011126-1.c.s b/src/binaryen/test/torture-s/20011126-1.c.s new file mode 100644 index 0000000000..4190cdd2c1 --- /dev/null +++ b/src/binaryen/test/torture-s/20011126-1.c.s @@ -0,0 +1,38 @@ + .text + .file "20011126-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load $push0=, a($pop3) + i32.const $push1=, -1 + i32.le_s $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end5 + i32.const $push4=, 0 + return $pop4 +.LBB0_2: # %if.then4 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 1 # 0x1 + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20011126-2.c.s b/src/binaryen/test/torture-s/20011126-2.c.s new file mode 100644 index 0000000000..fc5da685b7 --- /dev/null +++ b/src/binaryen/test/torture-s/20011126-2.c.s @@ -0,0 +1,128 @@ + .text + .file "20011126-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $5=, .L.str + i32.const $push12=, 0 + i32.load $push11=, __stack_pointer($pop12) + i32.const $push13=, 16 + i32.sub $push16=, $pop11, $pop13 + i32.const $push14=, 12 + i32.add $push15=, $pop16, $pop14 + copy_local $6=, $pop15 +.LBB0_1: # %while.body.i.outer + # =>This Loop Header: Depth=1 + # Child Loop BB0_2 Depth 2 + # Child Loop BB0_4 Depth 3 + # Child Loop BB0_9 Depth 2 + loop # label0: + i32.load8_u $0=, 0($5) +.LBB0_2: # %while.body.i + # Parent Loop BB0_1 Depth=1 + # => This Loop Header: Depth=2 + # Child Loop BB0_4 Depth 3 + block + loop # label2: + i32.const $push19=, 255 + i32.and $push0=, $0, $pop19 + i32.const $push18=, 97 + i32.ne $push1=, $pop0, $pop18 + br_if 0, $pop1 # 0: up to label2 +# BB#3: # %while.cond2.i.preheader + # in Loop: Header=BB0_2 Depth=2 + copy_local $7=, $5 +.LBB0_4: # %while.cond2.i + # Parent Loop BB0_1 Depth=1 + # Parent Loop BB0_2 Depth=2 + # => This Inner Loop Header: Depth=3 + loop # label3: + i32.load8_u $4=, 1($7) + i32.const $push23=, 1 + i32.add $push22=, $7, $pop23 + tee_local $push21=, $1=, $pop22 + copy_local $7=, $pop21 + i32.const $push20=, 120 + i32.eq $push2=, $4, $pop20 + br_if 0, $pop2 # 0: up to label3 +# BB#5: # %while.cond2.i + # in Loop: Header=BB0_2 Depth=2 + end_loop + i32.const $push24=, 98 + i32.eq $push3=, $4, $pop24 + br_if 1, $pop3 # 1: down to label1 +# BB#6: # %if.end.i + # in Loop: Header=BB0_2 Depth=2 + i32.ge_u $push5=, $5, $1 + br_if 0, $pop5 # 0: up to label2 +# BB#7: # %while.body14.lr.ph.i + # in Loop: Header=BB0_1 Depth=1 + end_loop + i32.const $push30=, 97 + i32.store8 0($6), $pop30 + i32.const $push29=, -1 + i32.add $push28=, $1, $pop29 + tee_local $push27=, $0=, $pop28 + i32.gt_u $push6=, $5, $0 + i32.select $push7=, $5, $pop27, $pop6 + i32.add $2=, $6, $pop7 + i32.const $push26=, 1 + i32.add $7=, $5, $pop26 + i32.const $push25=, 0 + i32.sub $3=, $pop25, $5 + block + block + i32.ge_u $push8=, $5, $0 + br_if 0, $pop8 # 0: down to label5 +# BB#8: # %while.body14.while.body14_crit_edge.i.preheader + # in Loop: Header=BB0_1 Depth=1 + i32.const $push31=, 1 + i32.add $4=, $6, $pop31 +.LBB0_9: # %while.body14.while.body14_crit_edge.i + # Parent Loop BB0_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label6: + i32.load8_u $push9=, 0($7) + i32.store8 0($4), $pop9 + i32.const $push35=, 1 + i32.add $4=, $4, $pop35 + i32.lt_u $1=, $7, $0 + i32.const $push34=, 1 + i32.add $push33=, $7, $pop34 + tee_local $push32=, $5=, $pop33 + copy_local $7=, $pop32 + br_if 0, $1 # 0: up to label6 + br 2 # 2: down to label4 +.LBB0_10: # in Loop: Header=BB0_1 Depth=1 + end_loop + end_block # label5: + copy_local $5=, $7 +.LBB0_11: # %if.end18.loopexit.i + # in Loop: Header=BB0_1 Depth=1 + end_block # label4: + i32.add $push10=, $2, $3 + i32.const $push17=, 1 + i32.add $6=, $pop10, $pop17 + br 1 # 1: up to label0 +.LBB0_12: # %test.exit + end_block # label1: + end_loop + i32.const $push4=, 0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "aab" + .size .L.str, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20011128-1.c.s b/src/binaryen/test/torture-s/20011128-1.c.s new file mode 100644 index 0000000000..8d830845bc --- /dev/null +++ b/src/binaryen/test/torture-s/20011128-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20011128-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20011217-1.c.s b/src/binaryen/test/torture-s/20011217-1.c.s new file mode 100644 index 0000000000..8098dfb04e --- /dev/null +++ b/src/binaryen/test/torture-s/20011217-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20011217-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20011219-1.c.s b/src/binaryen/test/torture-s/20011219-1.c.s new file mode 100644 index 0000000000..91c1804faa --- /dev/null +++ b/src/binaryen/test/torture-s/20011219-1.c.s @@ -0,0 +1,57 @@ + .text + .file "20011219-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + # implicit-def: %vreg14 + block + i32.const $push0=, -10 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 4 + i32.gt_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %sw.epilog.sink.split + i32.load $2=, 0($1) +.LBB1_2: # %sw.epilog + end_block # label0: + copy_local $push4=, $2 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20011223-1.c.s b/src/binaryen/test/torture-s/20011223-1.c.s new file mode 100644 index 0000000000..f8bf2d19e2 --- /dev/null +++ b/src/binaryen/test/torture-s/20011223-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20011223-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020103-1.c.s b/src/binaryen/test/torture-s/20020103-1.c.s new file mode 100644 index 0000000000..189b962b4c --- /dev/null +++ b/src/binaryen/test/torture-s/20020103-1.c.s @@ -0,0 +1,49 @@ + .text + .file "20020103-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 65535 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -65536 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end4 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020107-1.c.s b/src/binaryen/test/torture-s/20020107-1.c.s new file mode 100644 index 0000000000..b912c20d5b --- /dev/null +++ b/src/binaryen/test/torture-s/20020107-1.c.s @@ -0,0 +1,74 @@ + .text + .file "20020107-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + #APP + #NO_APP + i32.const $push0=, 2 + i32.add $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $0=, buf + #APP + #NO_APP + i32.const $push1=, 1 + i32.add $push2=, $0, $pop1 + i32.const $push0=, buf + i32.sub $push3=, $pop2, $pop0 + i32.const $push6=, 1 + i32.eq $push4=, $pop3, $pop6 + call bar@FUNCTION, $pop4 + i32.const $push5=, 0 + call exit@FUNCTION, $pop5 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .section .text.bar,"ax",@progbits + .type bar,@function # -- Begin function bar +bar: # @bar + .param i32 +# BB#0: # %entry + block + i32.eqz $push0=, $0 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + return +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size bar, .Lfunc_end2-bar + # -- End function + .hidden buf # @buf + .type buf,@object + .section .bss.buf,"aw",@nobits + .globl buf +buf: + .skip 10 + .size buf, 10 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20020108-1.c.s b/src/binaryen/test/torture-s/20020108-1.c.s new file mode 100644 index 0000000000..9943994c6e --- /dev/null +++ b/src/binaryen/test/torture-s/20020108-1.c.s @@ -0,0 +1,2574 @@ + .text + .file "20020108-1.c" + .section .text.ashift_qi_0,"ax",@progbits + .hidden ashift_qi_0 # -- Begin function ashift_qi_0 + .globl ashift_qi_0 + .type ashift_qi_0,@function +ashift_qi_0: # @ashift_qi_0 + .param i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size ashift_qi_0, .Lfunc_end0-ashift_qi_0 + # -- End function + .section .text.ashift_qi_1,"ax",@progbits + .hidden ashift_qi_1 # -- Begin function ashift_qi_1 + .globl ashift_qi_1 + .type ashift_qi_1,@function +ashift_qi_1: # @ashift_qi_1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 254 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size ashift_qi_1, .Lfunc_end1-ashift_qi_1 + # -- End function + .section .text.ashift_qi_2,"ax",@progbits + .hidden ashift_qi_2 # -- Begin function ashift_qi_2 + .globl ashift_qi_2 + .type ashift_qi_2,@function +ashift_qi_2: # @ashift_qi_2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 252 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size ashift_qi_2, .Lfunc_end2-ashift_qi_2 + # -- End function + .section .text.ashift_qi_3,"ax",@progbits + .hidden ashift_qi_3 # -- Begin function ashift_qi_3 + .globl ashift_qi_3 + .type ashift_qi_3,@function +ashift_qi_3: # @ashift_qi_3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 248 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end3: + .size ashift_qi_3, .Lfunc_end3-ashift_qi_3 + # -- End function + .section .text.ashift_qi_4,"ax",@progbits + .hidden ashift_qi_4 # -- Begin function ashift_qi_4 + .globl ashift_qi_4 + .type ashift_qi_4,@function +ashift_qi_4: # @ashift_qi_4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 240 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end4: + .size ashift_qi_4, .Lfunc_end4-ashift_qi_4 + # -- End function + .section .text.ashift_qi_5,"ax",@progbits + .hidden ashift_qi_5 # -- Begin function ashift_qi_5 + .globl ashift_qi_5 + .type ashift_qi_5,@function +ashift_qi_5: # @ashift_qi_5 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 5 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 224 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end5: + .size ashift_qi_5, .Lfunc_end5-ashift_qi_5 + # -- End function + .section .text.ashift_qi_6,"ax",@progbits + .hidden ashift_qi_6 # -- Begin function ashift_qi_6 + .globl ashift_qi_6 + .type ashift_qi_6,@function +ashift_qi_6: # @ashift_qi_6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 192 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end6: + .size ashift_qi_6, .Lfunc_end6-ashift_qi_6 + # -- End function + .section .text.ashift_qi_7,"ax",@progbits + .hidden ashift_qi_7 # -- Begin function ashift_qi_7 + .globl ashift_qi_7 + .type ashift_qi_7,@function +ashift_qi_7: # @ashift_qi_7 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 7 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 128 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end7: + .size ashift_qi_7, .Lfunc_end7-ashift_qi_7 + # -- End function + .section .text.lshiftrt_qi_0,"ax",@progbits + .hidden lshiftrt_qi_0 # -- Begin function lshiftrt_qi_0 + .globl lshiftrt_qi_0 + .type lshiftrt_qi_0,@function +lshiftrt_qi_0: # @lshiftrt_qi_0 + .param i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end8: + .size lshiftrt_qi_0, .Lfunc_end8-lshiftrt_qi_0 + # -- End function + .section .text.lshiftrt_qi_1,"ax",@progbits + .hidden lshiftrt_qi_1 # -- Begin function lshiftrt_qi_1 + .globl lshiftrt_qi_1 + .type lshiftrt_qi_1,@function +lshiftrt_qi_1: # @lshiftrt_qi_1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end9: + .size lshiftrt_qi_1, .Lfunc_end9-lshiftrt_qi_1 + # -- End function + .section .text.lshiftrt_qi_2,"ax",@progbits + .hidden lshiftrt_qi_2 # -- Begin function lshiftrt_qi_2 + .globl lshiftrt_qi_2 + .type lshiftrt_qi_2,@function +lshiftrt_qi_2: # @lshiftrt_qi_2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end10: + .size lshiftrt_qi_2, .Lfunc_end10-lshiftrt_qi_2 + # -- End function + .section .text.lshiftrt_qi_3,"ax",@progbits + .hidden lshiftrt_qi_3 # -- Begin function lshiftrt_qi_3 + .globl lshiftrt_qi_3 + .type lshiftrt_qi_3,@function +lshiftrt_qi_3: # @lshiftrt_qi_3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end11: + .size lshiftrt_qi_3, .Lfunc_end11-lshiftrt_qi_3 + # -- End function + .section .text.lshiftrt_qi_4,"ax",@progbits + .hidden lshiftrt_qi_4 # -- Begin function lshiftrt_qi_4 + .globl lshiftrt_qi_4 + .type lshiftrt_qi_4,@function +lshiftrt_qi_4: # @lshiftrt_qi_4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end12: + .size lshiftrt_qi_4, .Lfunc_end12-lshiftrt_qi_4 + # -- End function + .section .text.lshiftrt_qi_5,"ax",@progbits + .hidden lshiftrt_qi_5 # -- Begin function lshiftrt_qi_5 + .globl lshiftrt_qi_5 + .type lshiftrt_qi_5,@function +lshiftrt_qi_5: # @lshiftrt_qi_5 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 5 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end13: + .size lshiftrt_qi_5, .Lfunc_end13-lshiftrt_qi_5 + # -- End function + .section .text.lshiftrt_qi_6,"ax",@progbits + .hidden lshiftrt_qi_6 # -- Begin function lshiftrt_qi_6 + .globl lshiftrt_qi_6 + .type lshiftrt_qi_6,@function +lshiftrt_qi_6: # @lshiftrt_qi_6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end14: + .size lshiftrt_qi_6, .Lfunc_end14-lshiftrt_qi_6 + # -- End function + .section .text.lshiftrt_qi_7,"ax",@progbits + .hidden lshiftrt_qi_7 # -- Begin function lshiftrt_qi_7 + .globl lshiftrt_qi_7 + .type lshiftrt_qi_7,@function +lshiftrt_qi_7: # @lshiftrt_qi_7 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 7 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end15: + .size lshiftrt_qi_7, .Lfunc_end15-lshiftrt_qi_7 + # -- End function + .section .text.ashiftrt_qi_0,"ax",@progbits + .hidden ashiftrt_qi_0 # -- Begin function ashiftrt_qi_0 + .globl ashiftrt_qi_0 + .type ashiftrt_qi_0,@function +ashiftrt_qi_0: # @ashiftrt_qi_0 + .param i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end16: + .size ashiftrt_qi_0, .Lfunc_end16-ashiftrt_qi_0 + # -- End function + .section .text.ashiftrt_qi_1,"ax",@progbits + .hidden ashiftrt_qi_1 # -- Begin function ashiftrt_qi_1 + .globl ashiftrt_qi_1 + .type ashiftrt_qi_1,@function +ashiftrt_qi_1: # @ashiftrt_qi_1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end17: + .size ashiftrt_qi_1, .Lfunc_end17-ashiftrt_qi_1 + # -- End function + .section .text.ashiftrt_qi_2,"ax",@progbits + .hidden ashiftrt_qi_2 # -- Begin function ashiftrt_qi_2 + .globl ashiftrt_qi_2 + .type ashiftrt_qi_2,@function +ashiftrt_qi_2: # @ashiftrt_qi_2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end18: + .size ashiftrt_qi_2, .Lfunc_end18-ashiftrt_qi_2 + # -- End function + .section .text.ashiftrt_qi_3,"ax",@progbits + .hidden ashiftrt_qi_3 # -- Begin function ashiftrt_qi_3 + .globl ashiftrt_qi_3 + .type ashiftrt_qi_3,@function +ashiftrt_qi_3: # @ashiftrt_qi_3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end19: + .size ashiftrt_qi_3, .Lfunc_end19-ashiftrt_qi_3 + # -- End function + .section .text.ashiftrt_qi_4,"ax",@progbits + .hidden ashiftrt_qi_4 # -- Begin function ashiftrt_qi_4 + .globl ashiftrt_qi_4 + .type ashiftrt_qi_4,@function +ashiftrt_qi_4: # @ashiftrt_qi_4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end20: + .size ashiftrt_qi_4, .Lfunc_end20-ashiftrt_qi_4 + # -- End function + .section .text.ashiftrt_qi_5,"ax",@progbits + .hidden ashiftrt_qi_5 # -- Begin function ashiftrt_qi_5 + .globl ashiftrt_qi_5 + .type ashiftrt_qi_5,@function +ashiftrt_qi_5: # @ashiftrt_qi_5 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 5 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end21: + .size ashiftrt_qi_5, .Lfunc_end21-ashiftrt_qi_5 + # -- End function + .section .text.ashiftrt_qi_6,"ax",@progbits + .hidden ashiftrt_qi_6 # -- Begin function ashiftrt_qi_6 + .globl ashiftrt_qi_6 + .type ashiftrt_qi_6,@function +ashiftrt_qi_6: # @ashiftrt_qi_6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end22: + .size ashiftrt_qi_6, .Lfunc_end22-ashiftrt_qi_6 + # -- End function + .section .text.ashiftrt_qi_7,"ax",@progbits + .hidden ashiftrt_qi_7 # -- Begin function ashiftrt_qi_7 + .globl ashiftrt_qi_7 + .type ashiftrt_qi_7,@function +ashiftrt_qi_7: # @ashiftrt_qi_7 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 7 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end23: + .size ashiftrt_qi_7, .Lfunc_end23-ashiftrt_qi_7 + # -- End function + .section .text.ashift_hi_0,"ax",@progbits + .hidden ashift_hi_0 # -- Begin function ashift_hi_0 + .globl ashift_hi_0 + .type ashift_hi_0,@function +ashift_hi_0: # @ashift_hi_0 + .param i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end24: + .size ashift_hi_0, .Lfunc_end24-ashift_hi_0 + # -- End function + .section .text.ashift_hi_1,"ax",@progbits + .hidden ashift_hi_1 # -- Begin function ashift_hi_1 + .globl ashift_hi_1 + .type ashift_hi_1,@function +ashift_hi_1: # @ashift_hi_1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 65534 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end25: + .size ashift_hi_1, .Lfunc_end25-ashift_hi_1 + # -- End function + .section .text.ashift_hi_2,"ax",@progbits + .hidden ashift_hi_2 # -- Begin function ashift_hi_2 + .globl ashift_hi_2 + .type ashift_hi_2,@function +ashift_hi_2: # @ashift_hi_2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 65532 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end26: + .size ashift_hi_2, .Lfunc_end26-ashift_hi_2 + # -- End function + .section .text.ashift_hi_3,"ax",@progbits + .hidden ashift_hi_3 # -- Begin function ashift_hi_3 + .globl ashift_hi_3 + .type ashift_hi_3,@function +ashift_hi_3: # @ashift_hi_3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 65528 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end27: + .size ashift_hi_3, .Lfunc_end27-ashift_hi_3 + # -- End function + .section .text.ashift_hi_4,"ax",@progbits + .hidden ashift_hi_4 # -- Begin function ashift_hi_4 + .globl ashift_hi_4 + .type ashift_hi_4,@function +ashift_hi_4: # @ashift_hi_4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 65520 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end28: + .size ashift_hi_4, .Lfunc_end28-ashift_hi_4 + # -- End function + .section .text.ashift_hi_5,"ax",@progbits + .hidden ashift_hi_5 # -- Begin function ashift_hi_5 + .globl ashift_hi_5 + .type ashift_hi_5,@function +ashift_hi_5: # @ashift_hi_5 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 5 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 65504 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end29: + .size ashift_hi_5, .Lfunc_end29-ashift_hi_5 + # -- End function + .section .text.ashift_hi_6,"ax",@progbits + .hidden ashift_hi_6 # -- Begin function ashift_hi_6 + .globl ashift_hi_6 + .type ashift_hi_6,@function +ashift_hi_6: # @ashift_hi_6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 65472 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end30: + .size ashift_hi_6, .Lfunc_end30-ashift_hi_6 + # -- End function + .section .text.ashift_hi_7,"ax",@progbits + .hidden ashift_hi_7 # -- Begin function ashift_hi_7 + .globl ashift_hi_7 + .type ashift_hi_7,@function +ashift_hi_7: # @ashift_hi_7 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 7 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 65408 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end31: + .size ashift_hi_7, .Lfunc_end31-ashift_hi_7 + # -- End function + .section .text.ashift_hi_8,"ax",@progbits + .hidden ashift_hi_8 # -- Begin function ashift_hi_8 + .globl ashift_hi_8 + .type ashift_hi_8,@function +ashift_hi_8: # @ashift_hi_8 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 8 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 65280 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end32: + .size ashift_hi_8, .Lfunc_end32-ashift_hi_8 + # -- End function + .section .text.ashift_hi_9,"ax",@progbits + .hidden ashift_hi_9 # -- Begin function ashift_hi_9 + .globl ashift_hi_9 + .type ashift_hi_9,@function +ashift_hi_9: # @ashift_hi_9 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 9 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 65024 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end33: + .size ashift_hi_9, .Lfunc_end33-ashift_hi_9 + # -- End function + .section .text.ashift_hi_10,"ax",@progbits + .hidden ashift_hi_10 # -- Begin function ashift_hi_10 + .globl ashift_hi_10 + .type ashift_hi_10,@function +ashift_hi_10: # @ashift_hi_10 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 10 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 64512 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end34: + .size ashift_hi_10, .Lfunc_end34-ashift_hi_10 + # -- End function + .section .text.ashift_hi_11,"ax",@progbits + .hidden ashift_hi_11 # -- Begin function ashift_hi_11 + .globl ashift_hi_11 + .type ashift_hi_11,@function +ashift_hi_11: # @ashift_hi_11 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 11 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 63488 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end35: + .size ashift_hi_11, .Lfunc_end35-ashift_hi_11 + # -- End function + .section .text.ashift_hi_12,"ax",@progbits + .hidden ashift_hi_12 # -- Begin function ashift_hi_12 + .globl ashift_hi_12 + .type ashift_hi_12,@function +ashift_hi_12: # @ashift_hi_12 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 12 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 61440 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end36: + .size ashift_hi_12, .Lfunc_end36-ashift_hi_12 + # -- End function + .section .text.ashift_hi_13,"ax",@progbits + .hidden ashift_hi_13 # -- Begin function ashift_hi_13 + .globl ashift_hi_13 + .type ashift_hi_13,@function +ashift_hi_13: # @ashift_hi_13 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 13 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 57344 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end37: + .size ashift_hi_13, .Lfunc_end37-ashift_hi_13 + # -- End function + .section .text.ashift_hi_14,"ax",@progbits + .hidden ashift_hi_14 # -- Begin function ashift_hi_14 + .globl ashift_hi_14 + .type ashift_hi_14,@function +ashift_hi_14: # @ashift_hi_14 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 14 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 49152 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end38: + .size ashift_hi_14, .Lfunc_end38-ashift_hi_14 + # -- End function + .section .text.ashift_hi_15,"ax",@progbits + .hidden ashift_hi_15 # -- Begin function ashift_hi_15 + .globl ashift_hi_15 + .type ashift_hi_15,@function +ashift_hi_15: # @ashift_hi_15 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 15 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 32768 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end39: + .size ashift_hi_15, .Lfunc_end39-ashift_hi_15 + # -- End function + .section .text.lshiftrt_hi_0,"ax",@progbits + .hidden lshiftrt_hi_0 # -- Begin function lshiftrt_hi_0 + .globl lshiftrt_hi_0 + .type lshiftrt_hi_0,@function +lshiftrt_hi_0: # @lshiftrt_hi_0 + .param i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end40: + .size lshiftrt_hi_0, .Lfunc_end40-lshiftrt_hi_0 + # -- End function + .section .text.lshiftrt_hi_1,"ax",@progbits + .hidden lshiftrt_hi_1 # -- Begin function lshiftrt_hi_1 + .globl lshiftrt_hi_1 + .type lshiftrt_hi_1,@function +lshiftrt_hi_1: # @lshiftrt_hi_1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end41: + .size lshiftrt_hi_1, .Lfunc_end41-lshiftrt_hi_1 + # -- End function + .section .text.lshiftrt_hi_2,"ax",@progbits + .hidden lshiftrt_hi_2 # -- Begin function lshiftrt_hi_2 + .globl lshiftrt_hi_2 + .type lshiftrt_hi_2,@function +lshiftrt_hi_2: # @lshiftrt_hi_2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end42: + .size lshiftrt_hi_2, .Lfunc_end42-lshiftrt_hi_2 + # -- End function + .section .text.lshiftrt_hi_3,"ax",@progbits + .hidden lshiftrt_hi_3 # -- Begin function lshiftrt_hi_3 + .globl lshiftrt_hi_3 + .type lshiftrt_hi_3,@function +lshiftrt_hi_3: # @lshiftrt_hi_3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end43: + .size lshiftrt_hi_3, .Lfunc_end43-lshiftrt_hi_3 + # -- End function + .section .text.lshiftrt_hi_4,"ax",@progbits + .hidden lshiftrt_hi_4 # -- Begin function lshiftrt_hi_4 + .globl lshiftrt_hi_4 + .type lshiftrt_hi_4,@function +lshiftrt_hi_4: # @lshiftrt_hi_4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end44: + .size lshiftrt_hi_4, .Lfunc_end44-lshiftrt_hi_4 + # -- End function + .section .text.lshiftrt_hi_5,"ax",@progbits + .hidden lshiftrt_hi_5 # -- Begin function lshiftrt_hi_5 + .globl lshiftrt_hi_5 + .type lshiftrt_hi_5,@function +lshiftrt_hi_5: # @lshiftrt_hi_5 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 5 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end45: + .size lshiftrt_hi_5, .Lfunc_end45-lshiftrt_hi_5 + # -- End function + .section .text.lshiftrt_hi_6,"ax",@progbits + .hidden lshiftrt_hi_6 # -- Begin function lshiftrt_hi_6 + .globl lshiftrt_hi_6 + .type lshiftrt_hi_6,@function +lshiftrt_hi_6: # @lshiftrt_hi_6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end46: + .size lshiftrt_hi_6, .Lfunc_end46-lshiftrt_hi_6 + # -- End function + .section .text.lshiftrt_hi_7,"ax",@progbits + .hidden lshiftrt_hi_7 # -- Begin function lshiftrt_hi_7 + .globl lshiftrt_hi_7 + .type lshiftrt_hi_7,@function +lshiftrt_hi_7: # @lshiftrt_hi_7 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 7 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end47: + .size lshiftrt_hi_7, .Lfunc_end47-lshiftrt_hi_7 + # -- End function + .section .text.lshiftrt_hi_8,"ax",@progbits + .hidden lshiftrt_hi_8 # -- Begin function lshiftrt_hi_8 + .globl lshiftrt_hi_8 + .type lshiftrt_hi_8,@function +lshiftrt_hi_8: # @lshiftrt_hi_8 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 8 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end48: + .size lshiftrt_hi_8, .Lfunc_end48-lshiftrt_hi_8 + # -- End function + .section .text.lshiftrt_hi_9,"ax",@progbits + .hidden lshiftrt_hi_9 # -- Begin function lshiftrt_hi_9 + .globl lshiftrt_hi_9 + .type lshiftrt_hi_9,@function +lshiftrt_hi_9: # @lshiftrt_hi_9 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 9 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end49: + .size lshiftrt_hi_9, .Lfunc_end49-lshiftrt_hi_9 + # -- End function + .section .text.lshiftrt_hi_10,"ax",@progbits + .hidden lshiftrt_hi_10 # -- Begin function lshiftrt_hi_10 + .globl lshiftrt_hi_10 + .type lshiftrt_hi_10,@function +lshiftrt_hi_10: # @lshiftrt_hi_10 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 10 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end50: + .size lshiftrt_hi_10, .Lfunc_end50-lshiftrt_hi_10 + # -- End function + .section .text.lshiftrt_hi_11,"ax",@progbits + .hidden lshiftrt_hi_11 # -- Begin function lshiftrt_hi_11 + .globl lshiftrt_hi_11 + .type lshiftrt_hi_11,@function +lshiftrt_hi_11: # @lshiftrt_hi_11 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 11 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end51: + .size lshiftrt_hi_11, .Lfunc_end51-lshiftrt_hi_11 + # -- End function + .section .text.lshiftrt_hi_12,"ax",@progbits + .hidden lshiftrt_hi_12 # -- Begin function lshiftrt_hi_12 + .globl lshiftrt_hi_12 + .type lshiftrt_hi_12,@function +lshiftrt_hi_12: # @lshiftrt_hi_12 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 12 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end52: + .size lshiftrt_hi_12, .Lfunc_end52-lshiftrt_hi_12 + # -- End function + .section .text.lshiftrt_hi_13,"ax",@progbits + .hidden lshiftrt_hi_13 # -- Begin function lshiftrt_hi_13 + .globl lshiftrt_hi_13 + .type lshiftrt_hi_13,@function +lshiftrt_hi_13: # @lshiftrt_hi_13 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 13 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end53: + .size lshiftrt_hi_13, .Lfunc_end53-lshiftrt_hi_13 + # -- End function + .section .text.lshiftrt_hi_14,"ax",@progbits + .hidden lshiftrt_hi_14 # -- Begin function lshiftrt_hi_14 + .globl lshiftrt_hi_14 + .type lshiftrt_hi_14,@function +lshiftrt_hi_14: # @lshiftrt_hi_14 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 14 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end54: + .size lshiftrt_hi_14, .Lfunc_end54-lshiftrt_hi_14 + # -- End function + .section .text.lshiftrt_hi_15,"ax",@progbits + .hidden lshiftrt_hi_15 # -- Begin function lshiftrt_hi_15 + .globl lshiftrt_hi_15 + .type lshiftrt_hi_15,@function +lshiftrt_hi_15: # @lshiftrt_hi_15 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 15 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end55: + .size lshiftrt_hi_15, .Lfunc_end55-lshiftrt_hi_15 + # -- End function + .section .text.ashiftrt_hi_0,"ax",@progbits + .hidden ashiftrt_hi_0 # -- Begin function ashiftrt_hi_0 + .globl ashiftrt_hi_0 + .type ashiftrt_hi_0,@function +ashiftrt_hi_0: # @ashiftrt_hi_0 + .param i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end56: + .size ashiftrt_hi_0, .Lfunc_end56-ashiftrt_hi_0 + # -- End function + .section .text.ashiftrt_hi_1,"ax",@progbits + .hidden ashiftrt_hi_1 # -- Begin function ashiftrt_hi_1 + .globl ashiftrt_hi_1 + .type ashiftrt_hi_1,@function +ashiftrt_hi_1: # @ashiftrt_hi_1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end57: + .size ashiftrt_hi_1, .Lfunc_end57-ashiftrt_hi_1 + # -- End function + .section .text.ashiftrt_hi_2,"ax",@progbits + .hidden ashiftrt_hi_2 # -- Begin function ashiftrt_hi_2 + .globl ashiftrt_hi_2 + .type ashiftrt_hi_2,@function +ashiftrt_hi_2: # @ashiftrt_hi_2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end58: + .size ashiftrt_hi_2, .Lfunc_end58-ashiftrt_hi_2 + # -- End function + .section .text.ashiftrt_hi_3,"ax",@progbits + .hidden ashiftrt_hi_3 # -- Begin function ashiftrt_hi_3 + .globl ashiftrt_hi_3 + .type ashiftrt_hi_3,@function +ashiftrt_hi_3: # @ashiftrt_hi_3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end59: + .size ashiftrt_hi_3, .Lfunc_end59-ashiftrt_hi_3 + # -- End function + .section .text.ashiftrt_hi_4,"ax",@progbits + .hidden ashiftrt_hi_4 # -- Begin function ashiftrt_hi_4 + .globl ashiftrt_hi_4 + .type ashiftrt_hi_4,@function +ashiftrt_hi_4: # @ashiftrt_hi_4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end60: + .size ashiftrt_hi_4, .Lfunc_end60-ashiftrt_hi_4 + # -- End function + .section .text.ashiftrt_hi_5,"ax",@progbits + .hidden ashiftrt_hi_5 # -- Begin function ashiftrt_hi_5 + .globl ashiftrt_hi_5 + .type ashiftrt_hi_5,@function +ashiftrt_hi_5: # @ashiftrt_hi_5 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 5 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end61: + .size ashiftrt_hi_5, .Lfunc_end61-ashiftrt_hi_5 + # -- End function + .section .text.ashiftrt_hi_6,"ax",@progbits + .hidden ashiftrt_hi_6 # -- Begin function ashiftrt_hi_6 + .globl ashiftrt_hi_6 + .type ashiftrt_hi_6,@function +ashiftrt_hi_6: # @ashiftrt_hi_6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end62: + .size ashiftrt_hi_6, .Lfunc_end62-ashiftrt_hi_6 + # -- End function + .section .text.ashiftrt_hi_7,"ax",@progbits + .hidden ashiftrt_hi_7 # -- Begin function ashiftrt_hi_7 + .globl ashiftrt_hi_7 + .type ashiftrt_hi_7,@function +ashiftrt_hi_7: # @ashiftrt_hi_7 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 7 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end63: + .size ashiftrt_hi_7, .Lfunc_end63-ashiftrt_hi_7 + # -- End function + .section .text.ashiftrt_hi_8,"ax",@progbits + .hidden ashiftrt_hi_8 # -- Begin function ashiftrt_hi_8 + .globl ashiftrt_hi_8 + .type ashiftrt_hi_8,@function +ashiftrt_hi_8: # @ashiftrt_hi_8 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 8 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end64: + .size ashiftrt_hi_8, .Lfunc_end64-ashiftrt_hi_8 + # -- End function + .section .text.ashiftrt_hi_9,"ax",@progbits + .hidden ashiftrt_hi_9 # -- Begin function ashiftrt_hi_9 + .globl ashiftrt_hi_9 + .type ashiftrt_hi_9,@function +ashiftrt_hi_9: # @ashiftrt_hi_9 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 9 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end65: + .size ashiftrt_hi_9, .Lfunc_end65-ashiftrt_hi_9 + # -- End function + .section .text.ashiftrt_hi_10,"ax",@progbits + .hidden ashiftrt_hi_10 # -- Begin function ashiftrt_hi_10 + .globl ashiftrt_hi_10 + .type ashiftrt_hi_10,@function +ashiftrt_hi_10: # @ashiftrt_hi_10 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 10 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end66: + .size ashiftrt_hi_10, .Lfunc_end66-ashiftrt_hi_10 + # -- End function + .section .text.ashiftrt_hi_11,"ax",@progbits + .hidden ashiftrt_hi_11 # -- Begin function ashiftrt_hi_11 + .globl ashiftrt_hi_11 + .type ashiftrt_hi_11,@function +ashiftrt_hi_11: # @ashiftrt_hi_11 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 11 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end67: + .size ashiftrt_hi_11, .Lfunc_end67-ashiftrt_hi_11 + # -- End function + .section .text.ashiftrt_hi_12,"ax",@progbits + .hidden ashiftrt_hi_12 # -- Begin function ashiftrt_hi_12 + .globl ashiftrt_hi_12 + .type ashiftrt_hi_12,@function +ashiftrt_hi_12: # @ashiftrt_hi_12 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 12 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end68: + .size ashiftrt_hi_12, .Lfunc_end68-ashiftrt_hi_12 + # -- End function + .section .text.ashiftrt_hi_13,"ax",@progbits + .hidden ashiftrt_hi_13 # -- Begin function ashiftrt_hi_13 + .globl ashiftrt_hi_13 + .type ashiftrt_hi_13,@function +ashiftrt_hi_13: # @ashiftrt_hi_13 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 13 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end69: + .size ashiftrt_hi_13, .Lfunc_end69-ashiftrt_hi_13 + # -- End function + .section .text.ashiftrt_hi_14,"ax",@progbits + .hidden ashiftrt_hi_14 # -- Begin function ashiftrt_hi_14 + .globl ashiftrt_hi_14 + .type ashiftrt_hi_14,@function +ashiftrt_hi_14: # @ashiftrt_hi_14 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 14 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end70: + .size ashiftrt_hi_14, .Lfunc_end70-ashiftrt_hi_14 + # -- End function + .section .text.ashiftrt_hi_15,"ax",@progbits + .hidden ashiftrt_hi_15 # -- Begin function ashiftrt_hi_15 + .globl ashiftrt_hi_15 + .type ashiftrt_hi_15,@function +ashiftrt_hi_15: # @ashiftrt_hi_15 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 15 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end71: + .size ashiftrt_hi_15, .Lfunc_end71-ashiftrt_hi_15 + # -- End function + .section .text.ashift_si_0,"ax",@progbits + .hidden ashift_si_0 # -- Begin function ashift_si_0 + .globl ashift_si_0 + .type ashift_si_0,@function +ashift_si_0: # @ashift_si_0 + .param i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end72: + .size ashift_si_0, .Lfunc_end72-ashift_si_0 + # -- End function + .section .text.ashift_si_1,"ax",@progbits + .hidden ashift_si_1 # -- Begin function ashift_si_1 + .globl ashift_si_1 + .type ashift_si_1,@function +ashift_si_1: # @ashift_si_1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end73: + .size ashift_si_1, .Lfunc_end73-ashift_si_1 + # -- End function + .section .text.ashift_si_2,"ax",@progbits + .hidden ashift_si_2 # -- Begin function ashift_si_2 + .globl ashift_si_2 + .type ashift_si_2,@function +ashift_si_2: # @ashift_si_2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end74: + .size ashift_si_2, .Lfunc_end74-ashift_si_2 + # -- End function + .section .text.ashift_si_3,"ax",@progbits + .hidden ashift_si_3 # -- Begin function ashift_si_3 + .globl ashift_si_3 + .type ashift_si_3,@function +ashift_si_3: # @ashift_si_3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end75: + .size ashift_si_3, .Lfunc_end75-ashift_si_3 + # -- End function + .section .text.ashift_si_4,"ax",@progbits + .hidden ashift_si_4 # -- Begin function ashift_si_4 + .globl ashift_si_4 + .type ashift_si_4,@function +ashift_si_4: # @ashift_si_4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end76: + .size ashift_si_4, .Lfunc_end76-ashift_si_4 + # -- End function + .section .text.ashift_si_5,"ax",@progbits + .hidden ashift_si_5 # -- Begin function ashift_si_5 + .globl ashift_si_5 + .type ashift_si_5,@function +ashift_si_5: # @ashift_si_5 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 5 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end77: + .size ashift_si_5, .Lfunc_end77-ashift_si_5 + # -- End function + .section .text.ashift_si_6,"ax",@progbits + .hidden ashift_si_6 # -- Begin function ashift_si_6 + .globl ashift_si_6 + .type ashift_si_6,@function +ashift_si_6: # @ashift_si_6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end78: + .size ashift_si_6, .Lfunc_end78-ashift_si_6 + # -- End function + .section .text.ashift_si_7,"ax",@progbits + .hidden ashift_si_7 # -- Begin function ashift_si_7 + .globl ashift_si_7 + .type ashift_si_7,@function +ashift_si_7: # @ashift_si_7 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 7 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end79: + .size ashift_si_7, .Lfunc_end79-ashift_si_7 + # -- End function + .section .text.ashift_si_8,"ax",@progbits + .hidden ashift_si_8 # -- Begin function ashift_si_8 + .globl ashift_si_8 + .type ashift_si_8,@function +ashift_si_8: # @ashift_si_8 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 8 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end80: + .size ashift_si_8, .Lfunc_end80-ashift_si_8 + # -- End function + .section .text.ashift_si_9,"ax",@progbits + .hidden ashift_si_9 # -- Begin function ashift_si_9 + .globl ashift_si_9 + .type ashift_si_9,@function +ashift_si_9: # @ashift_si_9 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 9 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end81: + .size ashift_si_9, .Lfunc_end81-ashift_si_9 + # -- End function + .section .text.ashift_si_10,"ax",@progbits + .hidden ashift_si_10 # -- Begin function ashift_si_10 + .globl ashift_si_10 + .type ashift_si_10,@function +ashift_si_10: # @ashift_si_10 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 10 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end82: + .size ashift_si_10, .Lfunc_end82-ashift_si_10 + # -- End function + .section .text.ashift_si_11,"ax",@progbits + .hidden ashift_si_11 # -- Begin function ashift_si_11 + .globl ashift_si_11 + .type ashift_si_11,@function +ashift_si_11: # @ashift_si_11 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 11 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end83: + .size ashift_si_11, .Lfunc_end83-ashift_si_11 + # -- End function + .section .text.ashift_si_12,"ax",@progbits + .hidden ashift_si_12 # -- Begin function ashift_si_12 + .globl ashift_si_12 + .type ashift_si_12,@function +ashift_si_12: # @ashift_si_12 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 12 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end84: + .size ashift_si_12, .Lfunc_end84-ashift_si_12 + # -- End function + .section .text.ashift_si_13,"ax",@progbits + .hidden ashift_si_13 # -- Begin function ashift_si_13 + .globl ashift_si_13 + .type ashift_si_13,@function +ashift_si_13: # @ashift_si_13 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 13 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end85: + .size ashift_si_13, .Lfunc_end85-ashift_si_13 + # -- End function + .section .text.ashift_si_14,"ax",@progbits + .hidden ashift_si_14 # -- Begin function ashift_si_14 + .globl ashift_si_14 + .type ashift_si_14,@function +ashift_si_14: # @ashift_si_14 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 14 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end86: + .size ashift_si_14, .Lfunc_end86-ashift_si_14 + # -- End function + .section .text.ashift_si_15,"ax",@progbits + .hidden ashift_si_15 # -- Begin function ashift_si_15 + .globl ashift_si_15 + .type ashift_si_15,@function +ashift_si_15: # @ashift_si_15 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 15 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end87: + .size ashift_si_15, .Lfunc_end87-ashift_si_15 + # -- End function + .section .text.ashift_si_16,"ax",@progbits + .hidden ashift_si_16 # -- Begin function ashift_si_16 + .globl ashift_si_16 + .type ashift_si_16,@function +ashift_si_16: # @ashift_si_16 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end88: + .size ashift_si_16, .Lfunc_end88-ashift_si_16 + # -- End function + .section .text.ashift_si_17,"ax",@progbits + .hidden ashift_si_17 # -- Begin function ashift_si_17 + .globl ashift_si_17 + .type ashift_si_17,@function +ashift_si_17: # @ashift_si_17 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 17 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end89: + .size ashift_si_17, .Lfunc_end89-ashift_si_17 + # -- End function + .section .text.ashift_si_18,"ax",@progbits + .hidden ashift_si_18 # -- Begin function ashift_si_18 + .globl ashift_si_18 + .type ashift_si_18,@function +ashift_si_18: # @ashift_si_18 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 18 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end90: + .size ashift_si_18, .Lfunc_end90-ashift_si_18 + # -- End function + .section .text.ashift_si_19,"ax",@progbits + .hidden ashift_si_19 # -- Begin function ashift_si_19 + .globl ashift_si_19 + .type ashift_si_19,@function +ashift_si_19: # @ashift_si_19 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 19 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end91: + .size ashift_si_19, .Lfunc_end91-ashift_si_19 + # -- End function + .section .text.ashift_si_20,"ax",@progbits + .hidden ashift_si_20 # -- Begin function ashift_si_20 + .globl ashift_si_20 + .type ashift_si_20,@function +ashift_si_20: # @ashift_si_20 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 20 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end92: + .size ashift_si_20, .Lfunc_end92-ashift_si_20 + # -- End function + .section .text.ashift_si_21,"ax",@progbits + .hidden ashift_si_21 # -- Begin function ashift_si_21 + .globl ashift_si_21 + .type ashift_si_21,@function +ashift_si_21: # @ashift_si_21 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 21 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end93: + .size ashift_si_21, .Lfunc_end93-ashift_si_21 + # -- End function + .section .text.ashift_si_22,"ax",@progbits + .hidden ashift_si_22 # -- Begin function ashift_si_22 + .globl ashift_si_22 + .type ashift_si_22,@function +ashift_si_22: # @ashift_si_22 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 22 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end94: + .size ashift_si_22, .Lfunc_end94-ashift_si_22 + # -- End function + .section .text.ashift_si_23,"ax",@progbits + .hidden ashift_si_23 # -- Begin function ashift_si_23 + .globl ashift_si_23 + .type ashift_si_23,@function +ashift_si_23: # @ashift_si_23 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 23 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end95: + .size ashift_si_23, .Lfunc_end95-ashift_si_23 + # -- End function + .section .text.ashift_si_24,"ax",@progbits + .hidden ashift_si_24 # -- Begin function ashift_si_24 + .globl ashift_si_24 + .type ashift_si_24,@function +ashift_si_24: # @ashift_si_24 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end96: + .size ashift_si_24, .Lfunc_end96-ashift_si_24 + # -- End function + .section .text.ashift_si_25,"ax",@progbits + .hidden ashift_si_25 # -- Begin function ashift_si_25 + .globl ashift_si_25 + .type ashift_si_25,@function +ashift_si_25: # @ashift_si_25 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 25 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end97: + .size ashift_si_25, .Lfunc_end97-ashift_si_25 + # -- End function + .section .text.ashift_si_26,"ax",@progbits + .hidden ashift_si_26 # -- Begin function ashift_si_26 + .globl ashift_si_26 + .type ashift_si_26,@function +ashift_si_26: # @ashift_si_26 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 26 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end98: + .size ashift_si_26, .Lfunc_end98-ashift_si_26 + # -- End function + .section .text.ashift_si_27,"ax",@progbits + .hidden ashift_si_27 # -- Begin function ashift_si_27 + .globl ashift_si_27 + .type ashift_si_27,@function +ashift_si_27: # @ashift_si_27 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 27 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end99: + .size ashift_si_27, .Lfunc_end99-ashift_si_27 + # -- End function + .section .text.ashift_si_28,"ax",@progbits + .hidden ashift_si_28 # -- Begin function ashift_si_28 + .globl ashift_si_28 + .type ashift_si_28,@function +ashift_si_28: # @ashift_si_28 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 28 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end100: + .size ashift_si_28, .Lfunc_end100-ashift_si_28 + # -- End function + .section .text.ashift_si_29,"ax",@progbits + .hidden ashift_si_29 # -- Begin function ashift_si_29 + .globl ashift_si_29 + .type ashift_si_29,@function +ashift_si_29: # @ashift_si_29 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 29 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end101: + .size ashift_si_29, .Lfunc_end101-ashift_si_29 + # -- End function + .section .text.ashift_si_30,"ax",@progbits + .hidden ashift_si_30 # -- Begin function ashift_si_30 + .globl ashift_si_30 + .type ashift_si_30,@function +ashift_si_30: # @ashift_si_30 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 30 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end102: + .size ashift_si_30, .Lfunc_end102-ashift_si_30 + # -- End function + .section .text.ashift_si_31,"ax",@progbits + .hidden ashift_si_31 # -- Begin function ashift_si_31 + .globl ashift_si_31 + .type ashift_si_31,@function +ashift_si_31: # @ashift_si_31 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end103: + .size ashift_si_31, .Lfunc_end103-ashift_si_31 + # -- End function + .section .text.lshiftrt_si_0,"ax",@progbits + .hidden lshiftrt_si_0 # -- Begin function lshiftrt_si_0 + .globl lshiftrt_si_0 + .type lshiftrt_si_0,@function +lshiftrt_si_0: # @lshiftrt_si_0 + .param i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end104: + .size lshiftrt_si_0, .Lfunc_end104-lshiftrt_si_0 + # -- End function + .section .text.lshiftrt_si_1,"ax",@progbits + .hidden lshiftrt_si_1 # -- Begin function lshiftrt_si_1 + .globl lshiftrt_si_1 + .type lshiftrt_si_1,@function +lshiftrt_si_1: # @lshiftrt_si_1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end105: + .size lshiftrt_si_1, .Lfunc_end105-lshiftrt_si_1 + # -- End function + .section .text.lshiftrt_si_2,"ax",@progbits + .hidden lshiftrt_si_2 # -- Begin function lshiftrt_si_2 + .globl lshiftrt_si_2 + .type lshiftrt_si_2,@function +lshiftrt_si_2: # @lshiftrt_si_2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end106: + .size lshiftrt_si_2, .Lfunc_end106-lshiftrt_si_2 + # -- End function + .section .text.lshiftrt_si_3,"ax",@progbits + .hidden lshiftrt_si_3 # -- Begin function lshiftrt_si_3 + .globl lshiftrt_si_3 + .type lshiftrt_si_3,@function +lshiftrt_si_3: # @lshiftrt_si_3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end107: + .size lshiftrt_si_3, .Lfunc_end107-lshiftrt_si_3 + # -- End function + .section .text.lshiftrt_si_4,"ax",@progbits + .hidden lshiftrt_si_4 # -- Begin function lshiftrt_si_4 + .globl lshiftrt_si_4 + .type lshiftrt_si_4,@function +lshiftrt_si_4: # @lshiftrt_si_4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end108: + .size lshiftrt_si_4, .Lfunc_end108-lshiftrt_si_4 + # -- End function + .section .text.lshiftrt_si_5,"ax",@progbits + .hidden lshiftrt_si_5 # -- Begin function lshiftrt_si_5 + .globl lshiftrt_si_5 + .type lshiftrt_si_5,@function +lshiftrt_si_5: # @lshiftrt_si_5 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 5 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end109: + .size lshiftrt_si_5, .Lfunc_end109-lshiftrt_si_5 + # -- End function + .section .text.lshiftrt_si_6,"ax",@progbits + .hidden lshiftrt_si_6 # -- Begin function lshiftrt_si_6 + .globl lshiftrt_si_6 + .type lshiftrt_si_6,@function +lshiftrt_si_6: # @lshiftrt_si_6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end110: + .size lshiftrt_si_6, .Lfunc_end110-lshiftrt_si_6 + # -- End function + .section .text.lshiftrt_si_7,"ax",@progbits + .hidden lshiftrt_si_7 # -- Begin function lshiftrt_si_7 + .globl lshiftrt_si_7 + .type lshiftrt_si_7,@function +lshiftrt_si_7: # @lshiftrt_si_7 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 7 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end111: + .size lshiftrt_si_7, .Lfunc_end111-lshiftrt_si_7 + # -- End function + .section .text.lshiftrt_si_8,"ax",@progbits + .hidden lshiftrt_si_8 # -- Begin function lshiftrt_si_8 + .globl lshiftrt_si_8 + .type lshiftrt_si_8,@function +lshiftrt_si_8: # @lshiftrt_si_8 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 8 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end112: + .size lshiftrt_si_8, .Lfunc_end112-lshiftrt_si_8 + # -- End function + .section .text.lshiftrt_si_9,"ax",@progbits + .hidden lshiftrt_si_9 # -- Begin function lshiftrt_si_9 + .globl lshiftrt_si_9 + .type lshiftrt_si_9,@function +lshiftrt_si_9: # @lshiftrt_si_9 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 9 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end113: + .size lshiftrt_si_9, .Lfunc_end113-lshiftrt_si_9 + # -- End function + .section .text.lshiftrt_si_10,"ax",@progbits + .hidden lshiftrt_si_10 # -- Begin function lshiftrt_si_10 + .globl lshiftrt_si_10 + .type lshiftrt_si_10,@function +lshiftrt_si_10: # @lshiftrt_si_10 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 10 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end114: + .size lshiftrt_si_10, .Lfunc_end114-lshiftrt_si_10 + # -- End function + .section .text.lshiftrt_si_11,"ax",@progbits + .hidden lshiftrt_si_11 # -- Begin function lshiftrt_si_11 + .globl lshiftrt_si_11 + .type lshiftrt_si_11,@function +lshiftrt_si_11: # @lshiftrt_si_11 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 11 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end115: + .size lshiftrt_si_11, .Lfunc_end115-lshiftrt_si_11 + # -- End function + .section .text.lshiftrt_si_12,"ax",@progbits + .hidden lshiftrt_si_12 # -- Begin function lshiftrt_si_12 + .globl lshiftrt_si_12 + .type lshiftrt_si_12,@function +lshiftrt_si_12: # @lshiftrt_si_12 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 12 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end116: + .size lshiftrt_si_12, .Lfunc_end116-lshiftrt_si_12 + # -- End function + .section .text.lshiftrt_si_13,"ax",@progbits + .hidden lshiftrt_si_13 # -- Begin function lshiftrt_si_13 + .globl lshiftrt_si_13 + .type lshiftrt_si_13,@function +lshiftrt_si_13: # @lshiftrt_si_13 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 13 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end117: + .size lshiftrt_si_13, .Lfunc_end117-lshiftrt_si_13 + # -- End function + .section .text.lshiftrt_si_14,"ax",@progbits + .hidden lshiftrt_si_14 # -- Begin function lshiftrt_si_14 + .globl lshiftrt_si_14 + .type lshiftrt_si_14,@function +lshiftrt_si_14: # @lshiftrt_si_14 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 14 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end118: + .size lshiftrt_si_14, .Lfunc_end118-lshiftrt_si_14 + # -- End function + .section .text.lshiftrt_si_15,"ax",@progbits + .hidden lshiftrt_si_15 # -- Begin function lshiftrt_si_15 + .globl lshiftrt_si_15 + .type lshiftrt_si_15,@function +lshiftrt_si_15: # @lshiftrt_si_15 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 15 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end119: + .size lshiftrt_si_15, .Lfunc_end119-lshiftrt_si_15 + # -- End function + .section .text.lshiftrt_si_16,"ax",@progbits + .hidden lshiftrt_si_16 # -- Begin function lshiftrt_si_16 + .globl lshiftrt_si_16 + .type lshiftrt_si_16,@function +lshiftrt_si_16: # @lshiftrt_si_16 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 16 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end120: + .size lshiftrt_si_16, .Lfunc_end120-lshiftrt_si_16 + # -- End function + .section .text.lshiftrt_si_17,"ax",@progbits + .hidden lshiftrt_si_17 # -- Begin function lshiftrt_si_17 + .globl lshiftrt_si_17 + .type lshiftrt_si_17,@function +lshiftrt_si_17: # @lshiftrt_si_17 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 17 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end121: + .size lshiftrt_si_17, .Lfunc_end121-lshiftrt_si_17 + # -- End function + .section .text.lshiftrt_si_18,"ax",@progbits + .hidden lshiftrt_si_18 # -- Begin function lshiftrt_si_18 + .globl lshiftrt_si_18 + .type lshiftrt_si_18,@function +lshiftrt_si_18: # @lshiftrt_si_18 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 18 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end122: + .size lshiftrt_si_18, .Lfunc_end122-lshiftrt_si_18 + # -- End function + .section .text.lshiftrt_si_19,"ax",@progbits + .hidden lshiftrt_si_19 # -- Begin function lshiftrt_si_19 + .globl lshiftrt_si_19 + .type lshiftrt_si_19,@function +lshiftrt_si_19: # @lshiftrt_si_19 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 19 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end123: + .size lshiftrt_si_19, .Lfunc_end123-lshiftrt_si_19 + # -- End function + .section .text.lshiftrt_si_20,"ax",@progbits + .hidden lshiftrt_si_20 # -- Begin function lshiftrt_si_20 + .globl lshiftrt_si_20 + .type lshiftrt_si_20,@function +lshiftrt_si_20: # @lshiftrt_si_20 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 20 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end124: + .size lshiftrt_si_20, .Lfunc_end124-lshiftrt_si_20 + # -- End function + .section .text.lshiftrt_si_21,"ax",@progbits + .hidden lshiftrt_si_21 # -- Begin function lshiftrt_si_21 + .globl lshiftrt_si_21 + .type lshiftrt_si_21,@function +lshiftrt_si_21: # @lshiftrt_si_21 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 21 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end125: + .size lshiftrt_si_21, .Lfunc_end125-lshiftrt_si_21 + # -- End function + .section .text.lshiftrt_si_22,"ax",@progbits + .hidden lshiftrt_si_22 # -- Begin function lshiftrt_si_22 + .globl lshiftrt_si_22 + .type lshiftrt_si_22,@function +lshiftrt_si_22: # @lshiftrt_si_22 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 22 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end126: + .size lshiftrt_si_22, .Lfunc_end126-lshiftrt_si_22 + # -- End function + .section .text.lshiftrt_si_23,"ax",@progbits + .hidden lshiftrt_si_23 # -- Begin function lshiftrt_si_23 + .globl lshiftrt_si_23 + .type lshiftrt_si_23,@function +lshiftrt_si_23: # @lshiftrt_si_23 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 23 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end127: + .size lshiftrt_si_23, .Lfunc_end127-lshiftrt_si_23 + # -- End function + .section .text.lshiftrt_si_24,"ax",@progbits + .hidden lshiftrt_si_24 # -- Begin function lshiftrt_si_24 + .globl lshiftrt_si_24 + .type lshiftrt_si_24,@function +lshiftrt_si_24: # @lshiftrt_si_24 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 24 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end128: + .size lshiftrt_si_24, .Lfunc_end128-lshiftrt_si_24 + # -- End function + .section .text.lshiftrt_si_25,"ax",@progbits + .hidden lshiftrt_si_25 # -- Begin function lshiftrt_si_25 + .globl lshiftrt_si_25 + .type lshiftrt_si_25,@function +lshiftrt_si_25: # @lshiftrt_si_25 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 25 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end129: + .size lshiftrt_si_25, .Lfunc_end129-lshiftrt_si_25 + # -- End function + .section .text.lshiftrt_si_26,"ax",@progbits + .hidden lshiftrt_si_26 # -- Begin function lshiftrt_si_26 + .globl lshiftrt_si_26 + .type lshiftrt_si_26,@function +lshiftrt_si_26: # @lshiftrt_si_26 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 26 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end130: + .size lshiftrt_si_26, .Lfunc_end130-lshiftrt_si_26 + # -- End function + .section .text.lshiftrt_si_27,"ax",@progbits + .hidden lshiftrt_si_27 # -- Begin function lshiftrt_si_27 + .globl lshiftrt_si_27 + .type lshiftrt_si_27,@function +lshiftrt_si_27: # @lshiftrt_si_27 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 27 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end131: + .size lshiftrt_si_27, .Lfunc_end131-lshiftrt_si_27 + # -- End function + .section .text.lshiftrt_si_28,"ax",@progbits + .hidden lshiftrt_si_28 # -- Begin function lshiftrt_si_28 + .globl lshiftrt_si_28 + .type lshiftrt_si_28,@function +lshiftrt_si_28: # @lshiftrt_si_28 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 28 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end132: + .size lshiftrt_si_28, .Lfunc_end132-lshiftrt_si_28 + # -- End function + .section .text.lshiftrt_si_29,"ax",@progbits + .hidden lshiftrt_si_29 # -- Begin function lshiftrt_si_29 + .globl lshiftrt_si_29 + .type lshiftrt_si_29,@function +lshiftrt_si_29: # @lshiftrt_si_29 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 29 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end133: + .size lshiftrt_si_29, .Lfunc_end133-lshiftrt_si_29 + # -- End function + .section .text.lshiftrt_si_30,"ax",@progbits + .hidden lshiftrt_si_30 # -- Begin function lshiftrt_si_30 + .globl lshiftrt_si_30 + .type lshiftrt_si_30,@function +lshiftrt_si_30: # @lshiftrt_si_30 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 30 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end134: + .size lshiftrt_si_30, .Lfunc_end134-lshiftrt_si_30 + # -- End function + .section .text.lshiftrt_si_31,"ax",@progbits + .hidden lshiftrt_si_31 # -- Begin function lshiftrt_si_31 + .globl lshiftrt_si_31 + .type lshiftrt_si_31,@function +lshiftrt_si_31: # @lshiftrt_si_31 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end135: + .size lshiftrt_si_31, .Lfunc_end135-lshiftrt_si_31 + # -- End function + .section .text.ashiftrt_si_0,"ax",@progbits + .hidden ashiftrt_si_0 # -- Begin function ashiftrt_si_0 + .globl ashiftrt_si_0 + .type ashiftrt_si_0,@function +ashiftrt_si_0: # @ashiftrt_si_0 + .param i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end136: + .size ashiftrt_si_0, .Lfunc_end136-ashiftrt_si_0 + # -- End function + .section .text.ashiftrt_si_1,"ax",@progbits + .hidden ashiftrt_si_1 # -- Begin function ashiftrt_si_1 + .globl ashiftrt_si_1 + .type ashiftrt_si_1,@function +ashiftrt_si_1: # @ashiftrt_si_1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end137: + .size ashiftrt_si_1, .Lfunc_end137-ashiftrt_si_1 + # -- End function + .section .text.ashiftrt_si_2,"ax",@progbits + .hidden ashiftrt_si_2 # -- Begin function ashiftrt_si_2 + .globl ashiftrt_si_2 + .type ashiftrt_si_2,@function +ashiftrt_si_2: # @ashiftrt_si_2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end138: + .size ashiftrt_si_2, .Lfunc_end138-ashiftrt_si_2 + # -- End function + .section .text.ashiftrt_si_3,"ax",@progbits + .hidden ashiftrt_si_3 # -- Begin function ashiftrt_si_3 + .globl ashiftrt_si_3 + .type ashiftrt_si_3,@function +ashiftrt_si_3: # @ashiftrt_si_3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end139: + .size ashiftrt_si_3, .Lfunc_end139-ashiftrt_si_3 + # -- End function + .section .text.ashiftrt_si_4,"ax",@progbits + .hidden ashiftrt_si_4 # -- Begin function ashiftrt_si_4 + .globl ashiftrt_si_4 + .type ashiftrt_si_4,@function +ashiftrt_si_4: # @ashiftrt_si_4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end140: + .size ashiftrt_si_4, .Lfunc_end140-ashiftrt_si_4 + # -- End function + .section .text.ashiftrt_si_5,"ax",@progbits + .hidden ashiftrt_si_5 # -- Begin function ashiftrt_si_5 + .globl ashiftrt_si_5 + .type ashiftrt_si_5,@function +ashiftrt_si_5: # @ashiftrt_si_5 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 5 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end141: + .size ashiftrt_si_5, .Lfunc_end141-ashiftrt_si_5 + # -- End function + .section .text.ashiftrt_si_6,"ax",@progbits + .hidden ashiftrt_si_6 # -- Begin function ashiftrt_si_6 + .globl ashiftrt_si_6 + .type ashiftrt_si_6,@function +ashiftrt_si_6: # @ashiftrt_si_6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end142: + .size ashiftrt_si_6, .Lfunc_end142-ashiftrt_si_6 + # -- End function + .section .text.ashiftrt_si_7,"ax",@progbits + .hidden ashiftrt_si_7 # -- Begin function ashiftrt_si_7 + .globl ashiftrt_si_7 + .type ashiftrt_si_7,@function +ashiftrt_si_7: # @ashiftrt_si_7 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 7 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end143: + .size ashiftrt_si_7, .Lfunc_end143-ashiftrt_si_7 + # -- End function + .section .text.ashiftrt_si_8,"ax",@progbits + .hidden ashiftrt_si_8 # -- Begin function ashiftrt_si_8 + .globl ashiftrt_si_8 + .type ashiftrt_si_8,@function +ashiftrt_si_8: # @ashiftrt_si_8 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 8 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end144: + .size ashiftrt_si_8, .Lfunc_end144-ashiftrt_si_8 + # -- End function + .section .text.ashiftrt_si_9,"ax",@progbits + .hidden ashiftrt_si_9 # -- Begin function ashiftrt_si_9 + .globl ashiftrt_si_9 + .type ashiftrt_si_9,@function +ashiftrt_si_9: # @ashiftrt_si_9 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 9 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end145: + .size ashiftrt_si_9, .Lfunc_end145-ashiftrt_si_9 + # -- End function + .section .text.ashiftrt_si_10,"ax",@progbits + .hidden ashiftrt_si_10 # -- Begin function ashiftrt_si_10 + .globl ashiftrt_si_10 + .type ashiftrt_si_10,@function +ashiftrt_si_10: # @ashiftrt_si_10 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 10 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end146: + .size ashiftrt_si_10, .Lfunc_end146-ashiftrt_si_10 + # -- End function + .section .text.ashiftrt_si_11,"ax",@progbits + .hidden ashiftrt_si_11 # -- Begin function ashiftrt_si_11 + .globl ashiftrt_si_11 + .type ashiftrt_si_11,@function +ashiftrt_si_11: # @ashiftrt_si_11 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 11 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end147: + .size ashiftrt_si_11, .Lfunc_end147-ashiftrt_si_11 + # -- End function + .section .text.ashiftrt_si_12,"ax",@progbits + .hidden ashiftrt_si_12 # -- Begin function ashiftrt_si_12 + .globl ashiftrt_si_12 + .type ashiftrt_si_12,@function +ashiftrt_si_12: # @ashiftrt_si_12 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 12 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end148: + .size ashiftrt_si_12, .Lfunc_end148-ashiftrt_si_12 + # -- End function + .section .text.ashiftrt_si_13,"ax",@progbits + .hidden ashiftrt_si_13 # -- Begin function ashiftrt_si_13 + .globl ashiftrt_si_13 + .type ashiftrt_si_13,@function +ashiftrt_si_13: # @ashiftrt_si_13 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 13 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end149: + .size ashiftrt_si_13, .Lfunc_end149-ashiftrt_si_13 + # -- End function + .section .text.ashiftrt_si_14,"ax",@progbits + .hidden ashiftrt_si_14 # -- Begin function ashiftrt_si_14 + .globl ashiftrt_si_14 + .type ashiftrt_si_14,@function +ashiftrt_si_14: # @ashiftrt_si_14 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 14 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end150: + .size ashiftrt_si_14, .Lfunc_end150-ashiftrt_si_14 + # -- End function + .section .text.ashiftrt_si_15,"ax",@progbits + .hidden ashiftrt_si_15 # -- Begin function ashiftrt_si_15 + .globl ashiftrt_si_15 + .type ashiftrt_si_15,@function +ashiftrt_si_15: # @ashiftrt_si_15 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 15 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end151: + .size ashiftrt_si_15, .Lfunc_end151-ashiftrt_si_15 + # -- End function + .section .text.ashiftrt_si_16,"ax",@progbits + .hidden ashiftrt_si_16 # -- Begin function ashiftrt_si_16 + .globl ashiftrt_si_16 + .type ashiftrt_si_16,@function +ashiftrt_si_16: # @ashiftrt_si_16 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 16 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end152: + .size ashiftrt_si_16, .Lfunc_end152-ashiftrt_si_16 + # -- End function + .section .text.ashiftrt_si_17,"ax",@progbits + .hidden ashiftrt_si_17 # -- Begin function ashiftrt_si_17 + .globl ashiftrt_si_17 + .type ashiftrt_si_17,@function +ashiftrt_si_17: # @ashiftrt_si_17 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 17 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end153: + .size ashiftrt_si_17, .Lfunc_end153-ashiftrt_si_17 + # -- End function + .section .text.ashiftrt_si_18,"ax",@progbits + .hidden ashiftrt_si_18 # -- Begin function ashiftrt_si_18 + .globl ashiftrt_si_18 + .type ashiftrt_si_18,@function +ashiftrt_si_18: # @ashiftrt_si_18 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 18 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end154: + .size ashiftrt_si_18, .Lfunc_end154-ashiftrt_si_18 + # -- End function + .section .text.ashiftrt_si_19,"ax",@progbits + .hidden ashiftrt_si_19 # -- Begin function ashiftrt_si_19 + .globl ashiftrt_si_19 + .type ashiftrt_si_19,@function +ashiftrt_si_19: # @ashiftrt_si_19 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 19 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end155: + .size ashiftrt_si_19, .Lfunc_end155-ashiftrt_si_19 + # -- End function + .section .text.ashiftrt_si_20,"ax",@progbits + .hidden ashiftrt_si_20 # -- Begin function ashiftrt_si_20 + .globl ashiftrt_si_20 + .type ashiftrt_si_20,@function +ashiftrt_si_20: # @ashiftrt_si_20 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 20 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end156: + .size ashiftrt_si_20, .Lfunc_end156-ashiftrt_si_20 + # -- End function + .section .text.ashiftrt_si_21,"ax",@progbits + .hidden ashiftrt_si_21 # -- Begin function ashiftrt_si_21 + .globl ashiftrt_si_21 + .type ashiftrt_si_21,@function +ashiftrt_si_21: # @ashiftrt_si_21 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 21 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end157: + .size ashiftrt_si_21, .Lfunc_end157-ashiftrt_si_21 + # -- End function + .section .text.ashiftrt_si_22,"ax",@progbits + .hidden ashiftrt_si_22 # -- Begin function ashiftrt_si_22 + .globl ashiftrt_si_22 + .type ashiftrt_si_22,@function +ashiftrt_si_22: # @ashiftrt_si_22 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 22 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end158: + .size ashiftrt_si_22, .Lfunc_end158-ashiftrt_si_22 + # -- End function + .section .text.ashiftrt_si_23,"ax",@progbits + .hidden ashiftrt_si_23 # -- Begin function ashiftrt_si_23 + .globl ashiftrt_si_23 + .type ashiftrt_si_23,@function +ashiftrt_si_23: # @ashiftrt_si_23 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 23 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end159: + .size ashiftrt_si_23, .Lfunc_end159-ashiftrt_si_23 + # -- End function + .section .text.ashiftrt_si_24,"ax",@progbits + .hidden ashiftrt_si_24 # -- Begin function ashiftrt_si_24 + .globl ashiftrt_si_24 + .type ashiftrt_si_24,@function +ashiftrt_si_24: # @ashiftrt_si_24 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 24 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end160: + .size ashiftrt_si_24, .Lfunc_end160-ashiftrt_si_24 + # -- End function + .section .text.ashiftrt_si_25,"ax",@progbits + .hidden ashiftrt_si_25 # -- Begin function ashiftrt_si_25 + .globl ashiftrt_si_25 + .type ashiftrt_si_25,@function +ashiftrt_si_25: # @ashiftrt_si_25 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 25 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end161: + .size ashiftrt_si_25, .Lfunc_end161-ashiftrt_si_25 + # -- End function + .section .text.ashiftrt_si_26,"ax",@progbits + .hidden ashiftrt_si_26 # -- Begin function ashiftrt_si_26 + .globl ashiftrt_si_26 + .type ashiftrt_si_26,@function +ashiftrt_si_26: # @ashiftrt_si_26 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 26 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end162: + .size ashiftrt_si_26, .Lfunc_end162-ashiftrt_si_26 + # -- End function + .section .text.ashiftrt_si_27,"ax",@progbits + .hidden ashiftrt_si_27 # -- Begin function ashiftrt_si_27 + .globl ashiftrt_si_27 + .type ashiftrt_si_27,@function +ashiftrt_si_27: # @ashiftrt_si_27 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 27 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end163: + .size ashiftrt_si_27, .Lfunc_end163-ashiftrt_si_27 + # -- End function + .section .text.ashiftrt_si_28,"ax",@progbits + .hidden ashiftrt_si_28 # -- Begin function ashiftrt_si_28 + .globl ashiftrt_si_28 + .type ashiftrt_si_28,@function +ashiftrt_si_28: # @ashiftrt_si_28 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 28 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end164: + .size ashiftrt_si_28, .Lfunc_end164-ashiftrt_si_28 + # -- End function + .section .text.ashiftrt_si_29,"ax",@progbits + .hidden ashiftrt_si_29 # -- Begin function ashiftrt_si_29 + .globl ashiftrt_si_29 + .type ashiftrt_si_29,@function +ashiftrt_si_29: # @ashiftrt_si_29 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 29 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end165: + .size ashiftrt_si_29, .Lfunc_end165-ashiftrt_si_29 + # -- End function + .section .text.ashiftrt_si_30,"ax",@progbits + .hidden ashiftrt_si_30 # -- Begin function ashiftrt_si_30 + .globl ashiftrt_si_30 + .type ashiftrt_si_30,@function +ashiftrt_si_30: # @ashiftrt_si_30 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 30 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end166: + .size ashiftrt_si_30, .Lfunc_end166-ashiftrt_si_30 + # -- End function + .section .text.ashiftrt_si_31,"ax",@progbits + .hidden ashiftrt_si_31 # -- Begin function ashiftrt_si_31 + .globl ashiftrt_si_31 + .type ashiftrt_si_31,@function +ashiftrt_si_31: # @ashiftrt_si_31 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end167: + .size ashiftrt_si_31, .Lfunc_end167-ashiftrt_si_31 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end1211 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end168: + .size main, .Lfunc_end168-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020118-1.c.s b/src/binaryen/test/torture-s/20020118-1.c.s new file mode 100644 index 0000000000..02238627d1 --- /dev/null +++ b/src/binaryen/test/torture-s/20020118-1.c.s @@ -0,0 +1,91 @@ + .text + .file "20020118-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .local i32 +# BB#0: # %entry + i32.const $push13=, 0 + i32.load $push0=, q($pop13) + i32.const $push1=, 2 + i32.add $0=, $pop0, $pop1 +.LBB0_1: # %for.cond + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push24=, 0 + i32.load8_s $push2=, 0($0) + i32.store n($pop24), $pop2 + i32.const $push23=, 0 + i32.load8_s $push3=, 0($0) + i32.store n($pop23), $pop3 + i32.const $push22=, 0 + i32.load8_s $push4=, 0($0) + i32.store n($pop22), $pop4 + i32.const $push21=, 0 + i32.load8_s $push5=, 0($0) + i32.store n($pop21), $pop5 + i32.const $push20=, 0 + i32.load8_s $push6=, 0($0) + i32.store n($pop20), $pop6 + i32.const $push19=, 0 + i32.load8_s $push7=, 0($0) + i32.store n($pop19), $pop7 + i32.const $push18=, 0 + i32.load8_s $push8=, 0($0) + i32.store n($pop18), $pop8 + i32.const $push17=, 0 + i32.load8_s $push9=, 0($0) + i32.store n($pop17), $pop9 + i32.const $push16=, 0 + i32.load8_s $push10=, 0($0) + i32.store n($pop16), $pop10 + i32.const $push15=, 0 + i32.load8_s $push11=, 0($0) + i32.store n($pop15), $pop11 + i32.const $push14=, 0 + i32.load8_s $push12=, 0($0) + i32.store n($pop14), $pop12 + br 0 # 0: up to label0 +.LBB0_2: + end_loop + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden q # @q + .type q,@object + .section .bss.q,"aw",@nobits + .globl q + .p2align 2 +q: + .int32 0 + .size q, 4 + + .hidden n # @n + .type n,@object + .section .bss.n,"aw",@nobits + .globl n + .p2align 2 +n: + .int32 0 # 0x0 + .size n, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020127-1.c.s b/src/binaryen/test/torture-s/20020127-1.c.s new file mode 100644 index 0000000000..aad28fa2e0 --- /dev/null +++ b/src/binaryen/test/torture-s/20020127-1.c.s @@ -0,0 +1,38 @@ + .text + .file "20020127-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + i32.shr_u $push1=, $0, $pop0 + i32.const $push2=, -1 + i32.xor $push3=, $pop1, $pop2 + i32.const $push4=, 1 + i32.and $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end4 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020129-1.c.s b/src/binaryen/test/torture-s/20020129-1.c.s new file mode 100644 index 0000000000..a473f8bc4b --- /dev/null +++ b/src/binaryen/test/torture-s/20020129-1.c.s @@ -0,0 +1,124 @@ + .text + .file "20020129-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.load $2=, 28($1) + block + block + block + i32.load $push0=, 28($0) + i32.eqz $push20=, $pop0 + br_if 0, $pop20 # 0: down to label2 +# BB#1: # %if.end + i32.eqz $push21=, $2 + br_if 1, $pop21 # 1: down to label1 + br 2 # 2: down to label0 +.LBB0_2: # %if.then + end_block # label2: + i32.const $push1=, 28 + i32.add $push2=, $0, $pop1 + i32.store 0($pop2), $2 + i32.const $push13=, 28 + i32.add $push3=, $1, $pop13 + i32.const $push4=, 0 + i32.store 0($pop3), $pop4 + i32.eqz $push22=, $2 + br_if 0, $pop22 # 0: down to label1 +.LBB0_3: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.store 4($2), $0 + i32.load $push15=, 0($2) + tee_local $push14=, $2=, $pop15 + br_if 0, $pop14 # 0: up to label3 +.LBB0_4: # %if.end7 + end_loop + end_block # label1: + i32.load $2=, 12($1) + block + i32.load $push5=, 12($0) + i32.const $push16=, -1 + i32.eq $push6=, $pop5, $pop16 + br_if 0, $pop6 # 0: down to label4 +# BB#5: # %if.end22 + i32.const $push17=, -1 + i32.ne $push7=, $2, $pop17 + br_if 1, $pop7 # 1: down to label0 +# BB#6: # %if.end27 + return +.LBB0_7: # %if.end22.thread + end_block # label4: + i32.load $push8=, 16($1) + i32.store 16($0), $pop8 + i32.const $push9=, 12 + i32.add $push10=, $0, $pop9 + i32.store 0($pop10), $2 + i32.const $push11=, 0 + i32.store 16($1), $pop11 + i32.const $push19=, 12 + i32.add $push12=, $1, $pop19 + i32.const $push18=, -1 + i32.store 0($pop12), $pop18 + return +.LBB0_8: # %if.then6 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 6 + i32.store y($pop1), $pop0 + i32.const $push8=, 0 + i64.const $push2=, 10514079940753 + i64.store y+12($pop8):p2align=2, $pop2 + i32.const $push7=, 0 + i32.const $push3=, -1 + i32.store x+12($pop7), $pop3 + i32.const $push5=, x + i32.const $push4=, y + call foo@FUNCTION, $pop5, $pop4 + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden y # @y + .type y,@object + .section .bss.y,"aw",@nobits + .globl y + .p2align 2 +y: + .skip 32 + .size y, 32 + + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 2 +x: + .skip 32 + .size x, 32 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020201-1.c.s b/src/binaryen/test/torture-s/20020201-1.c.s new file mode 100644 index 0000000000..528ea45de2 --- /dev/null +++ b/src/binaryen/test/torture-s/20020201-1.c.s @@ -0,0 +1,145 @@ + .text + .file "20020201-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i64 +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.load8_u $push38=, cx($pop0) + tee_local $push37=, $0=, $pop38 + i32.const $push1=, -6 + i32.add $push2=, $pop37, $pop1 + i32.const $push36=, 6 + i32.ge_u $push3=, $pop2, $pop36 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push39=, 6 + i32.rem_u $push4=, $0, $pop39 + i32.const $push5=, 1 + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#2: # %if.end10 + i32.const $push7=, 0 + i32.load16_u $push42=, sx($pop7) + tee_local $push41=, $0=, $pop42 + i32.const $push8=, -12 + i32.add $push9=, $pop41, $pop8 + i32.const $push40=, 6 + i32.ge_u $push10=, $pop9, $pop40 + br_if 0, $pop10 # 0: down to label0 +# BB#3: # %if.end18 + i32.const $push43=, 6 + i32.rem_u $push11=, $0, $pop43 + i32.const $push12=, 2 + i32.ne $push13=, $pop11, $pop12 + br_if 0, $pop13 # 0: down to label0 +# BB#4: # %if.end26 + i32.const $push14=, 0 + i32.load $push46=, ix($pop14) + tee_local $push45=, $0=, $pop46 + i32.const $push15=, -18 + i32.add $push16=, $pop45, $pop15 + i32.const $push44=, 6 + i32.ge_u $push17=, $pop16, $pop44 + br_if 0, $pop17 # 0: down to label0 +# BB#5: # %if.end31 + i32.const $push47=, 6 + i32.rem_u $push18=, $0, $pop47 + i32.const $push19=, 3 + i32.ne $push20=, $pop18, $pop19 + br_if 0, $pop20 # 0: down to label0 +# BB#6: # %if.end36 + i32.const $push21=, 0 + i32.load $push50=, lx($pop21) + tee_local $push49=, $0=, $pop50 + i32.const $push22=, -24 + i32.add $push23=, $pop49, $pop22 + i32.const $push48=, 6 + i32.ge_u $push24=, $pop23, $pop48 + br_if 0, $pop24 # 0: down to label0 +# BB#7: # %if.end41 + i32.const $push51=, 6 + i32.rem_u $push25=, $0, $pop51 + i32.const $push26=, 4 + i32.ne $push27=, $pop25, $pop26 + br_if 0, $pop27 # 0: down to label0 +# BB#8: # %if.end46 + i32.const $push28=, 0 + i64.load $push54=, Lx($pop28) + tee_local $push53=, $1=, $pop54 + i64.const $push29=, -30 + i64.add $push30=, $pop53, $pop29 + i64.const $push52=, 6 + i64.ge_u $push31=, $pop30, $pop52 + br_if 0, $pop31 # 0: down to label0 +# BB#9: # %if.end51 + i64.const $push55=, 6 + i64.rem_u $push32=, $1, $pop55 + i64.const $push33=, 5 + i64.ne $push34=, $pop32, $pop33 + br_if 0, $pop34 # 0: down to label0 +# BB#10: # %if.end56 + i32.const $push35=, 0 + call exit@FUNCTION, $pop35 + unreachable +.LBB0_11: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden cx # @cx + .type cx,@object + .section .data.cx,"aw",@progbits + .globl cx +cx: + .int8 7 # 0x7 + .size cx, 1 + + .hidden sx # @sx + .type sx,@object + .section .data.sx,"aw",@progbits + .globl sx + .p2align 1 +sx: + .int16 14 # 0xe + .size sx, 2 + + .hidden ix # @ix + .type ix,@object + .section .data.ix,"aw",@progbits + .globl ix + .p2align 2 +ix: + .int32 21 # 0x15 + .size ix, 4 + + .hidden lx # @lx + .type lx,@object + .section .data.lx,"aw",@progbits + .globl lx + .p2align 2 +lx: + .int32 28 # 0x1c + .size lx, 4 + + .hidden Lx # @Lx + .type Lx,@object + .section .data.Lx,"aw",@progbits + .globl Lx + .p2align 3 +Lx: + .int64 35 # 0x23 + .size Lx, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020206-1.c.s b/src/binaryen/test/torture-s/20020206-1.c.s new file mode 100644 index 0000000000..e6e63490f4 --- /dev/null +++ b/src/binaryen/test/torture-s/20020206-1.c.s @@ -0,0 +1,81 @@ + .text + .file "20020206-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.store 8($0), $pop0 + i64.const $push1=, 223338299568 + i64.store 0($0):p2align=2, $pop1 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .param i32 +# BB#0: # %entry + block + i32.load $push0=, 0($0) + i32.const $push1=, 176 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load $push3=, 4($0) + i32.const $push4=, 52 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %lor.lhs.false3 + i32.load $push6=, 8($0) + i32.const $push7=, 31 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %if.end + return +.LBB1_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size baz, .Lfunc_end1-baz + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push8=, $pop3, $pop5 + tee_local $push7=, $0=, $pop8 + i32.store __stack_pointer($pop6), $pop7 + i32.const $push0=, 31 + i32.store 8($0), $pop0 + i64.const $push1=, 223338299568 + i64.store 0($0), $pop1 + call baz@FUNCTION, $0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020206-2.c.s b/src/binaryen/test/torture-s/20020206-2.c.s new file mode 100644 index 0000000000..77d8bef1b1 --- /dev/null +++ b/src/binaryen/test/torture-s/20020206-2.c.s @@ -0,0 +1,44 @@ + .text + .file "20020206-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 16 + i32.or $push1=, $0, $pop0 + i32.const $push2=, 2064 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %for.cond.1 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020213-1.c.s b/src/binaryen/test/torture-s/20020213-1.c.s new file mode 100644 index 0000000000..ab70c7e8f4 --- /dev/null +++ b/src/binaryen/test/torture-s/20020213-1.c.s @@ -0,0 +1,89 @@ + .text + .file "20020213-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .local i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push12=, 0 + i32.load $push11=, b($pop12) + tee_local $push10=, $0=, $pop11 + i32.const $push1=, -1 + i32.add $push9=, $pop10, $pop1 + tee_local $push8=, $1=, $pop9 + i32.const $push2=, 2241 + i32.const $push7=, 2241 + i32.lt_s $push3=, $1, $pop7 + i32.select $push4=, $pop8, $pop2, $pop3 + i32.store a+4($pop0), $pop4 + block + i32.const $push5=, 2242 + i32.le_s $push6=, $0, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param f32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2241 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %foo.exit + i32.const $push1=, 0 + i32.const $push0=, 3384 + i32.store b($pop1), $pop0 + i32.const $push4=, 0 + i64.const $push2=, 9626087063552 + i64.store a($pop4):p2align=2, $pop2 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .skip 8 + .size a, 8 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20020215-1.c.s b/src/binaryen/test/torture-s/20020215-1.c.s new file mode 100644 index 0000000000..e12c43455b --- /dev/null +++ b/src/binaryen/test/torture-s/20020215-1.c.s @@ -0,0 +1,43 @@ + .text + .file "20020215-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 4($1) + i32.const $push1=, 1 + i32.add $push2=, $pop0, $pop1 + i32.store 4($1), $pop2 + i32.const $push3=, 8 + i32.add $push4=, $0, $pop3 + i32.const $push8=, 8 + i32.add $push5=, $1, $pop8 + i32.load $push6=, 0($pop5) + i32.store 0($pop4), $pop6 + i64.load $push7=, 0($1):p2align=2 + i64.store 0($0):p2align=2, $pop7 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020216-1.c.s b/src/binaryen/test/torture-s/20020216-1.c.s new file mode 100644 index 0000000000..42e37181c8 --- /dev/null +++ b/src/binaryen/test/torture-s/20020216-1.c.s @@ -0,0 +1,59 @@ + .text + .file "20020216-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_s $push1=, c($pop0) + i32.const $push2=, 65535 + i32.and $push3=, $pop1, $pop2 + i32.const $push4=, -103 + i32.xor $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push5=, 0 + i32.load8_s $push0=, c($pop5) + i32.const $push1=, 65535 + i32.and $push2=, $pop0, $pop1 + i32.const $push4=, 65535 + i32.ne $push3=, $pop2, $pop4 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden c # @c + .type c,@object + .section .data.c,"aw",@progbits + .globl c +c: + .int8 255 # 0xff + .size c, 1 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020219-1.c.s b/src/binaryen/test/torture-s/20020219-1.c.s new file mode 100644 index 0000000000..f33a8b8c2b --- /dev/null +++ b/src/binaryen/test/torture-s/20020219-1.c.s @@ -0,0 +1,32 @@ + .text + .file "20020219-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i64 +# BB#0: # %entry + i64.const $push0=, -9223372036854775808 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020225-1.c.s b/src/binaryen/test/torture-s/20020225-1.c.s new file mode 100644 index 0000000000..63f5da6136 --- /dev/null +++ b/src/binaryen/test/torture-s/20020225-1.c.s @@ -0,0 +1,35 @@ + .text + .file "20020225-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483647 + i32.and $push1=, $1, $pop0 + i32.add $push2=, $pop1, $0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020225-2.c.s b/src/binaryen/test/torture-s/20020225-2.c.s new file mode 100644 index 0000000000..3d24c36e3c --- /dev/null +++ b/src/binaryen/test/torture-s/20020225-2.c.s @@ -0,0 +1,19 @@ + .text + .file "20020225-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020226-1.c.s b/src/binaryen/test/torture-s/20020226-1.c.s new file mode 100644 index 0000000000..6ced74add8 --- /dev/null +++ b/src/binaryen/test/torture-s/20020226-1.c.s @@ -0,0 +1,269 @@ + .text + .file "20020226-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i32 +# BB#0: # %entry + block + i32.const $push2=, 0 + i32.load8_u $push103=, uc($pop2) + tee_local $push102=, $0=, $pop103 + i32.const $push4=, 8 + i32.const $push101=, 0 + i32.load $push100=, shift1($pop101) + tee_local $push99=, $1=, $pop100 + i32.sub $push98=, $pop4, $pop99 + tee_local $push97=, $2=, $pop98 + i32.shl $push5=, $pop102, $pop97 + i32.shr_u $push3=, $0, $1 + i32.or $push6=, $pop5, $pop3 + i32.const $push96=, 835 + i32.ne $push7=, $pop6, $pop96 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %if.end + i32.const $push8=, 4 + i32.shr_u $push10=, $0, $pop8 + i32.const $push105=, 4 + i32.shl $push9=, $0, $pop105 + i32.or $push11=, $pop10, $pop9 + i32.const $push104=, 835 + i32.ne $push12=, $pop11, $pop104 + br_if 0, $pop12 # 0: down to label0 +# BB#2: # %if.end11 + i32.const $push14=, 0 + i32.load16_u $push110=, us($pop14) + tee_local $push109=, $3=, $pop110 + i32.shr_u $push16=, $pop109, $1 + i32.const $push13=, 16 + i32.sub $push108=, $pop13, $1 + tee_local $push107=, $4=, $pop108 + i32.shl $push15=, $3, $pop107 + i32.or $push17=, $pop16, $pop15 + i32.const $push106=, 19087651 + i32.ne $push18=, $pop17, $pop106 + br_if 0, $pop18 # 0: down to label0 +# BB#3: # %if.end21 + i32.const $push21=, 4 + i32.shr_u $push22=, $3, $pop21 + i32.const $push19=, 12 + i32.shl $push20=, $3, $pop19 + i32.or $push23=, $pop22, $pop20 + i32.const $push111=, 19087651 + i32.ne $push24=, $pop23, $pop111 + br_if 0, $pop24 # 0: down to label0 +# BB#4: # %if.end30 + i32.const $push26=, 0 + i32.load $push114=, ui($pop26) + tee_local $push113=, $5=, $pop114 + i32.rotr $push27=, $pop113, $1 + i32.const $push112=, 1073742115 + i32.ne $push28=, $pop27, $pop112 + br_if 0, $pop28 # 0: down to label0 +# BB#5: # %if.end38 + i32.const $push29=, 28 + i32.rotl $push30=, $5, $pop29 + i32.const $push115=, 1073742115 + i32.ne $push31=, $pop30, $pop115 + br_if 0, $pop31 # 0: down to label0 +# BB#6: # %if.end45 + i32.const $push32=, 0 + i32.load $push120=, ul($pop32) + tee_local $push119=, $7=, $pop120 + i32.shr_u $push34=, $pop119, $1 + i32.const $push25=, 32 + i32.sub $push118=, $pop25, $1 + tee_local $push117=, $6=, $pop118 + i32.shl $push33=, $7, $pop117 + i32.or $push35=, $pop34, $pop33 + i32.const $push116=, -2128394905 + i32.ne $push36=, $pop35, $pop116 + br_if 0, $pop36 # 0: down to label0 +# BB#7: # %if.end53 + i32.const $push37=, 28 + i32.rotl $push38=, $7, $pop37 + i32.const $push121=, -2128394905 + i32.ne $push39=, $pop38, $pop121 + br_if 0, $pop39 # 0: down to label0 +# BB#8: # %if.end60 + i32.const $push40=, 0 + i64.load $push126=, ull($pop40) + tee_local $push125=, $8=, $pop126 + i64.extend_u/i32 $push124=, $1 + tee_local $push123=, $9=, $pop124 + i64.rotr $push41=, $pop125, $pop123 + i64.const $push122=, 5124095577148911 + i64.ne $push42=, $pop41, $pop122 + br_if 0, $pop42 # 0: down to label0 +# BB#9: # %if.end69 + i64.const $push45=, 60 + i64.rotl $push46=, $8, $pop45 + i64.const $push127=, 5124095577148911 + i64.ne $push47=, $pop46, $pop127 + br_if 0, $pop47 # 0: down to label0 +# BB#10: # %if.end76 + i32.const $push48=, 0 + i32.load $push132=, shift2($pop48) + tee_local $push131=, $11=, $pop132 + i64.extend_u/i32 $push130=, $pop131 + tee_local $push129=, $10=, $pop130 + i64.rotr $push49=, $8, $pop129 + i64.const $push128=, 1311768467750121216 + i64.ne $push50=, $pop49, $pop128 + br_if 0, $pop50 # 0: down to label0 +# BB#11: # %if.end86 + i64.const $push53=, 4 + i64.rotl $push54=, $8, $pop53 + i64.const $push133=, 1311768467750121216 + i64.ne $push55=, $pop54, $pop133 + br_if 0, $pop55 # 0: down to label0 +# BB#12: # %if.end93 + i32.shr_u $push57=, $0, $2 + i32.shl $push56=, $0, $1 + i32.or $push58=, $pop57, $pop56 + i32.const $push59=, 835 + i32.ne $push60=, $pop58, $pop59 + br_if 0, $pop60 # 0: down to label0 +# BB#13: # %if.end112 + i32.shl $push62=, $3, $1 + i32.shr_u $push61=, $3, $4 + i32.or $push63=, $pop62, $pop61 + i32.const $push134=, 74561 + i32.ne $push64=, $pop63, $pop134 + br_if 0, $pop64 # 0: down to label0 +# BB#14: # %if.end122 + i32.const $push67=, 4 + i32.shl $push68=, $3, $pop67 + i32.const $push65=, 12 + i32.shr_u $push66=, $3, $pop65 + i32.or $push69=, $pop68, $pop66 + i32.const $push135=, 74561 + i32.ne $push70=, $pop69, $pop135 + br_if 0, $pop70 # 0: down to label0 +# BB#15: # %if.end131 + i32.shl $push72=, $5, $1 + i32.shr_u $push71=, $5, $6 + i32.or $push73=, $pop72, $pop71 + i32.const $push136=, 74560 + i32.ne $push74=, $pop73, $pop136 + br_if 0, $pop74 # 0: down to label0 +# BB#16: # %if.end139 + i32.const $push75=, 4 + i32.rotl $push76=, $5, $pop75 + i32.const $push137=, 74560 + i32.ne $push77=, $pop76, $pop137 + br_if 0, $pop77 # 0: down to label0 +# BB#17: # %if.end146 + i32.shl $push79=, $7, $1 + i32.shr_u $push78=, $7, $6 + i32.or $push80=, $pop79, $pop78 + i32.const $push138=, 591751041 + i32.ne $push81=, $pop80, $pop138 + br_if 0, $pop81 # 0: down to label0 +# BB#18: # %if.end154 + i32.const $push82=, 4 + i32.rotl $push83=, $7, $pop82 + i32.const $push139=, 591751041 + i32.ne $push84=, $pop83, $pop139 + br_if 0, $pop84 # 0: down to label0 +# BB#19: # %if.end161 + i64.shl $push86=, $8, $9 + i32.const $push43=, 64 + i32.sub $push44=, $pop43, $1 + i64.extend_u/i32 $push0=, $pop44 + i64.shr_u $push85=, $8, $pop0 + i64.or $push87=, $pop86, $pop85 + i64.const $push88=, 1311768467750121216 + i64.ne $push89=, $pop87, $pop88 + br_if 0, $pop89 # 0: down to label0 +# BB#20: # %if.end178 + i32.const $push51=, 64 + i32.sub $push52=, $pop51, $11 + i64.extend_u/i32 $push1=, $pop52 + i64.shr_u $push91=, $8, $pop1 + i64.shl $push90=, $8, $10 + i64.or $push92=, $pop91, $pop90 + i64.const $push93=, 5124095577148911 + i64.ne $push94=, $pop92, $pop93 + br_if 0, $pop94 # 0: down to label0 +# BB#21: # %if.end195 + i32.const $push95=, 0 + call exit@FUNCTION, $pop95 + unreachable +.LBB0_22: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden uc # @uc + .type uc,@object + .section .data.uc,"aw",@progbits + .globl uc +uc: + .int8 52 # 0x34 + .size uc, 1 + + .hidden us # @us + .type us,@object + .section .data.us,"aw",@progbits + .globl us + .p2align 1 +us: + .int16 4660 # 0x1234 + .size us, 2 + + .hidden ui # @ui + .type ui,@object + .section .data.ui,"aw",@progbits + .globl ui + .p2align 2 +ui: + .int32 4660 # 0x1234 + .size ui, 4 + + .hidden ul # @ul + .type ul,@object + .section .data.ul,"aw",@progbits + .globl ul + .p2align 2 +ul: + .int32 305419896 # 0x12345678 + .size ul, 4 + + .hidden ull # @ull + .type ull,@object + .section .data.ull,"aw",@progbits + .globl ull + .p2align 3 +ull: + .int64 81985529234382576 # 0x12345678abcdef0 + .size ull, 8 + + .hidden shift1 # @shift1 + .type shift1,@object + .section .data.shift1,"aw",@progbits + .globl shift1 + .p2align 2 +shift1: + .int32 4 # 0x4 + .size shift1, 4 + + .hidden shift2 # @shift2 + .type shift2,@object + .section .data.shift2,"aw",@progbits + .globl shift2 + .p2align 2 +shift2: + .int32 60 # 0x3c + .size shift2, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020227-1.c.s b/src/binaryen/test/torture-s/20020227-1.c.s new file mode 100644 index 0000000000..87d4869113 --- /dev/null +++ b/src/binaryen/test/torture-s/20020227-1.c.s @@ -0,0 +1,65 @@ + .text + .file "20020227-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 +# BB#0: # %f2.exit + # fallthrough-return + .endfunc +.Lfunc_end1: + .size f1, .Lfunc_end1-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param i32 +# BB#0: # %entry + block + f32.load $push1=, 1($0):p2align=0 + f32.const $push2=, 0x1p0 + f32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %entry + i32.const $push4=, 5 + i32.add $push5=, $0, $pop4 + f32.load $push0=, 0($pop5):p2align=0 + f32.const $push6=, 0x0p0 + f32.ne $push7=, $pop0, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#2: # %lor.lhs.false + i32.load8_u $push8=, 0($0) + i32.const $push9=, 42 + i32.ne $push10=, $pop8, $pop9 + br_if 0, $pop10 # 0: down to label0 +# BB#3: # %if.end + return +.LBB2_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size f2, .Lfunc_end2-f2 + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20020307-1.c.s b/src/binaryen/test/torture-s/20020307-1.c.s new file mode 100644 index 0000000000..7dd1ae2c9b --- /dev/null +++ b/src/binaryen/test/torture-s/20020307-1.c.s @@ -0,0 +1,687 @@ + .text + .file "20020307-1.c" + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 6 + i32.and $push1=, $0, $pop0 + i32.const $push3=, 6 + i32.eq $push2=, $pop1, $pop3 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f3, .Lfunc_end0-f3 + # -- End function + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 14 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 10 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %if.end + return +.LBB1_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size f4, .Lfunc_end1-f4 + # -- End function + .section .text.f5,"ax",@progbits + .hidden f5 # -- Begin function f5 + .globl f5 + .type f5,@function +f5: # @f5 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 30 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 18 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label2 +# BB#1: # %if.end + return +.LBB2_2: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size f5, .Lfunc_end2-f5 + # -- End function + .section .text.f6,"ax",@progbits + .hidden f6 # -- Begin function f6 + .globl f6 + .type f6,@function +f6: # @f6 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 62 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 34 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label3 +# BB#1: # %if.end + return +.LBB3_2: # %if.then + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size f6, .Lfunc_end3-f6 + # -- End function + .section .text.f7,"ax",@progbits + .hidden f7 # -- Begin function f7 + .globl f7 + .type f7,@function +f7: # @f7 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 126 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 66 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label4 +# BB#1: # %if.end + return +.LBB4_2: # %if.then + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end4: + .size f7, .Lfunc_end4-f7 + # -- End function + .section .text.f8,"ax",@progbits + .hidden f8 # -- Begin function f8 + .globl f8 + .type f8,@function +f8: # @f8 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 254 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 130 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label5 +# BB#1: # %if.end + return +.LBB5_2: # %if.then + end_block # label5: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end5: + .size f8, .Lfunc_end5-f8 + # -- End function + .section .text.f9,"ax",@progbits + .hidden f9 # -- Begin function f9 + .globl f9 + .type f9,@function +f9: # @f9 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 510 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 258 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label6 +# BB#1: # %if.end + return +.LBB6_2: # %if.then + end_block # label6: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end6: + .size f9, .Lfunc_end6-f9 + # -- End function + .section .text.f10,"ax",@progbits + .hidden f10 # -- Begin function f10 + .globl f10 + .type f10,@function +f10: # @f10 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 1022 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 514 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label7 +# BB#1: # %if.end + return +.LBB7_2: # %if.then + end_block # label7: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end7: + .size f10, .Lfunc_end7-f10 + # -- End function + .section .text.f11,"ax",@progbits + .hidden f11 # -- Begin function f11 + .globl f11 + .type f11,@function +f11: # @f11 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 2046 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 1026 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label8 +# BB#1: # %if.end + return +.LBB8_2: # %if.then + end_block # label8: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end8: + .size f11, .Lfunc_end8-f11 + # -- End function + .section .text.f12,"ax",@progbits + .hidden f12 # -- Begin function f12 + .globl f12 + .type f12,@function +f12: # @f12 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 4094 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 2050 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label9 +# BB#1: # %if.end + return +.LBB9_2: # %if.then + end_block # label9: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end9: + .size f12, .Lfunc_end9-f12 + # -- End function + .section .text.f13,"ax",@progbits + .hidden f13 # -- Begin function f13 + .globl f13 + .type f13,@function +f13: # @f13 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 8190 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 4098 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label10 +# BB#1: # %if.end + return +.LBB10_2: # %if.then + end_block # label10: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end10: + .size f13, .Lfunc_end10-f13 + # -- End function + .section .text.f14,"ax",@progbits + .hidden f14 # -- Begin function f14 + .globl f14 + .type f14,@function +f14: # @f14 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 16382 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 8194 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label11 +# BB#1: # %if.end + return +.LBB11_2: # %if.then + end_block # label11: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end11: + .size f14, .Lfunc_end11-f14 + # -- End function + .section .text.f15,"ax",@progbits + .hidden f15 # -- Begin function f15 + .globl f15 + .type f15,@function +f15: # @f15 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 32766 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 16386 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label12 +# BB#1: # %if.end + return +.LBB12_2: # %if.then + end_block # label12: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end12: + .size f15, .Lfunc_end12-f15 + # -- End function + .section .text.f16,"ax",@progbits + .hidden f16 # -- Begin function f16 + .globl f16 + .type f16,@function +f16: # @f16 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 65534 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 32770 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label13 +# BB#1: # %if.end + return +.LBB13_2: # %if.then + end_block # label13: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end13: + .size f16, .Lfunc_end13-f16 + # -- End function + .section .text.f17,"ax",@progbits + .hidden f17 # -- Begin function f17 + .globl f17 + .type f17,@function +f17: # @f17 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 131070 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 65538 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label14 +# BB#1: # %if.end + return +.LBB14_2: # %if.then + end_block # label14: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end14: + .size f17, .Lfunc_end14-f17 + # -- End function + .section .text.f18,"ax",@progbits + .hidden f18 # -- Begin function f18 + .globl f18 + .type f18,@function +f18: # @f18 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 262142 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 131074 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label15 +# BB#1: # %if.end + return +.LBB15_2: # %if.then + end_block # label15: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end15: + .size f18, .Lfunc_end15-f18 + # -- End function + .section .text.f19,"ax",@progbits + .hidden f19 # -- Begin function f19 + .globl f19 + .type f19,@function +f19: # @f19 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 524286 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 262146 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label16 +# BB#1: # %if.end + return +.LBB16_2: # %if.then + end_block # label16: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end16: + .size f19, .Lfunc_end16-f19 + # -- End function + .section .text.f20,"ax",@progbits + .hidden f20 # -- Begin function f20 + .globl f20 + .type f20,@function +f20: # @f20 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 1048574 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 524290 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label17 +# BB#1: # %if.end + return +.LBB17_2: # %if.then + end_block # label17: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end17: + .size f20, .Lfunc_end17-f20 + # -- End function + .section .text.f21,"ax",@progbits + .hidden f21 # -- Begin function f21 + .globl f21 + .type f21,@function +f21: # @f21 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 2097150 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 1048578 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label18 +# BB#1: # %if.end + return +.LBB18_2: # %if.then + end_block # label18: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end18: + .size f21, .Lfunc_end18-f21 + # -- End function + .section .text.f22,"ax",@progbits + .hidden f22 # -- Begin function f22 + .globl f22 + .type f22,@function +f22: # @f22 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 4194302 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 2097154 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label19 +# BB#1: # %if.end + return +.LBB19_2: # %if.then + end_block # label19: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end19: + .size f22, .Lfunc_end19-f22 + # -- End function + .section .text.f23,"ax",@progbits + .hidden f23 # -- Begin function f23 + .globl f23 + .type f23,@function +f23: # @f23 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 8388606 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 4194306 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label20 +# BB#1: # %if.end + return +.LBB20_2: # %if.then + end_block # label20: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end20: + .size f23, .Lfunc_end20-f23 + # -- End function + .section .text.f24,"ax",@progbits + .hidden f24 # -- Begin function f24 + .globl f24 + .type f24,@function +f24: # @f24 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 16777214 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 8388610 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label21 +# BB#1: # %if.end + return +.LBB21_2: # %if.then + end_block # label21: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end21: + .size f24, .Lfunc_end21-f24 + # -- End function + .section .text.f25,"ax",@progbits + .hidden f25 # -- Begin function f25 + .globl f25 + .type f25,@function +f25: # @f25 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 33554430 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 16777218 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label22 +# BB#1: # %if.end + return +.LBB22_2: # %if.then + end_block # label22: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end22: + .size f25, .Lfunc_end22-f25 + # -- End function + .section .text.f26,"ax",@progbits + .hidden f26 # -- Begin function f26 + .globl f26 + .type f26,@function +f26: # @f26 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 67108862 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 33554434 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label23 +# BB#1: # %if.end + return +.LBB23_2: # %if.then + end_block # label23: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end23: + .size f26, .Lfunc_end23-f26 + # -- End function + .section .text.f27,"ax",@progbits + .hidden f27 # -- Begin function f27 + .globl f27 + .type f27,@function +f27: # @f27 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 134217726 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 67108866 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label24 +# BB#1: # %if.end + return +.LBB24_2: # %if.then + end_block # label24: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end24: + .size f27, .Lfunc_end24-f27 + # -- End function + .section .text.f28,"ax",@progbits + .hidden f28 # -- Begin function f28 + .globl f28 + .type f28,@function +f28: # @f28 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 268435454 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 134217730 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label25 +# BB#1: # %if.end + return +.LBB25_2: # %if.then + end_block # label25: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end25: + .size f28, .Lfunc_end25-f28 + # -- End function + .section .text.f29,"ax",@progbits + .hidden f29 # -- Begin function f29 + .globl f29 + .type f29,@function +f29: # @f29 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 536870910 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 268435458 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label26 +# BB#1: # %if.end + return +.LBB26_2: # %if.then + end_block # label26: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end26: + .size f29, .Lfunc_end26-f29 + # -- End function + .section .text.f30,"ax",@progbits + .hidden f30 # -- Begin function f30 + .globl f30 + .type f30,@function +f30: # @f30 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 1073741822 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 536870914 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label27 +# BB#1: # %if.end + return +.LBB27_2: # %if.then + end_block # label27: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end27: + .size f30, .Lfunc_end27-f30 + # -- End function + .section .text.f31,"ax",@progbits + .hidden f31 # -- Begin function f31 + .globl f31 + .type f31,@function +f31: # @f31 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 2147483646 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 1073741826 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label28 +# BB#1: # %if.end + return +.LBB28_2: # %if.then + end_block # label28: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end28: + .size f31, .Lfunc_end28-f31 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end29: + .size main, .Lfunc_end29-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020314-1.c.s b/src/binaryen/test/torture-s/20020314-1.c.s new file mode 100644 index 0000000000..b038d0b212 --- /dev/null +++ b/src/binaryen/test/torture-s/20020314-1.c.s @@ -0,0 +1,49 @@ + .text + .file "20020314-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, f64 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param f64, f64, f64, f64 + .result f64 +# BB#0: # %entry + f64.add $push1=, $0, $1 + f64.mul $push0=, $2, $3 + f64.mul $push2=, $pop1, $pop0 + f64.mul $push3=, $pop2, $0 + f64.add $push4=, $pop3, $1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end1: + .size g, .Lfunc_end1-g + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end8 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020320-1.c.s b/src/binaryen/test/torture-s/20020320-1.c.s new file mode 100644 index 0000000000..41ee35ea6a --- /dev/null +++ b/src/binaryen/test/torture-s/20020320-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20020320-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020321-1.c.s b/src/binaryen/test/torture-s/20020321-1.c.s new file mode 100644 index 0000000000..5cf581c00a --- /dev/null +++ b/src/binaryen/test/torture-s/20020321-1.c.s @@ -0,0 +1,45 @@ + .text + .file "20020321-1.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32, i32, i32, i32, f32 + .result f32 +# BB#0: # %entry + copy_local $push0=, $4 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32, f32 + .result f32 +# BB#0: # %entry + copy_local $push0=, $3 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20020328-1.c.s b/src/binaryen/test/torture-s/20020328-1.c.s new file mode 100644 index 0000000000..0e0e3d5456 --- /dev/null +++ b/src/binaryen/test/torture-s/20020328-1.c.s @@ -0,0 +1,64 @@ + .text + .file "20020328-1.c" + .section .text.func,"ax",@progbits + .hidden func # -- Begin function func + .globl func + .type func,@function +func: # @func + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size func, .Lfunc_end0-func + # -- End function + .section .text.testit,"ax",@progbits + .hidden testit # -- Begin function testit + .globl testit + .type testit,@function +testit: # @testit + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 20 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size testit, .Lfunc_end1-testit + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020402-1.c.s b/src/binaryen/test/torture-s/20020402-1.c.s new file mode 100644 index 0000000000..dd26664445 --- /dev/null +++ b/src/binaryen/test/torture-s/20020402-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20020402-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end34 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020402-2.c.s b/src/binaryen/test/torture-s/20020402-2.c.s new file mode 100644 index 0000000000..fb3357d2d5 --- /dev/null +++ b/src/binaryen/test/torture-s/20020402-2.c.s @@ -0,0 +1,491 @@ + .text + .file "20020402-2.c" + .section .text.InitCache,"ax",@progbits + .hidden InitCache # -- Begin function InitCache + .globl InitCache + .type InitCache,@function +InitCache: # @InitCache + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store MyPte+4($pop0), $0 + i32.const $push74=, 0 + i64.const $push1=, 21474836480 + i64.store MyPte+8($pop74):p2align=2, $pop1 + i32.const $push73=, 0 + i32.const $push2=, MyPte+16 + i32.store Local1($pop73), $pop2 + i32.const $push72=, 0 + i32.const $push3=, MyPte+20 + i32.store Local2($pop72), $pop3 + i32.const $push71=, 0 + i32.const $push4=, MyPte+24 + i32.store Local3($pop71), $pop4 + i32.const $push70=, 0 + i32.const $push5=, MyPte+28 + i32.store RDbf1($pop70), $pop5 + i32.const $push69=, 0 + i32.const $push6=, MyPte+32 + i32.store RDbf2($pop69), $pop6 + i32.const $push68=, 0 + i32.const $push7=, MyPte+36 + i32.store RDbf3($pop68), $pop7 + i32.const $push67=, 0 + i32.const $push8=, 1 + i32.store MyPte+36($pop67), $pop8 + i32.const $push66=, 0 + i32.const $push9=, MyPte+156 + i32.store IntVc1($pop66), $pop9 + i32.const $push65=, 0 + i32.const $push10=, MyPte+160 + i32.store IntVc2($pop65), $pop10 + i32.const $push64=, 0 + i32.const $push11=, MyPte+164 + i32.store IntCode3($pop64), $pop11 + i32.const $push63=, 0 + i32.const $push12=, MyPte+168 + i32.store IntCode4($pop63), $pop12 + i32.const $push62=, 0 + i32.const $push13=, MyPte+172 + i32.store IntCode5($pop62), $pop13 + i32.const $push61=, 0 + i32.const $push14=, MyPte+176 + i32.store IntCode6($pop61), $pop14 + i32.const $push60=, 0 + i32.const $push15=, MyPte+180 + i32.store Workspace($pop60), $pop15 + i32.const $push59=, 0 + i32.const $push16=, MyPte+184 + i32.store Workspace+4($pop59), $pop16 + i32.const $push58=, 0 + i32.const $push17=, MyPte+188 + i32.store Workspace+8($pop58), $pop17 + i32.const $push57=, 0 + i32.const $push18=, MyPte+196 + i32.store Workspace+16($pop57), $pop18 + i32.const $push56=, 0 + i32.const $push19=, MyPte+192 + i32.store Workspace+12($pop56), $pop19 + i32.const $push55=, 0 + i32.const $push20=, MyPte+200 + i32.store Workspace+20($pop55), $pop20 + i32.const $push54=, 0 + i32.const $push21=, MyPte+204 + i32.store Workspace+24($pop54), $pop21 + i32.const $push53=, 0 + i32.const $push22=, MyPte+208 + i32.store Workspace+28($pop53), $pop22 + i32.const $push52=, 0 + i32.const $push23=, MyPte+212 + i32.store Workspace+32($pop52), $pop23 + i32.const $push51=, 0 + i32.const $push24=, MyPte+216 + i32.store Workspace+36($pop51), $pop24 + i32.const $push50=, 0 + i32.const $push25=, MyPte+220 + i32.store Workspace+40($pop50), $pop25 + i32.const $push49=, 0 + i32.const $push26=, MyPte+108 + i32.store Lom1($pop49), $pop26 + i32.const $push48=, 0 + i32.const $push27=, MyPte+112 + i32.store Lom2($pop48), $pop27 + i32.const $push47=, 0 + i32.const $push28=, MyPte+116 + i32.store Lom3($pop47), $pop28 + i32.const $push46=, 0 + i32.const $push29=, MyPte+120 + i32.store Lom4($pop46), $pop29 + i32.const $push45=, 0 + i32.const $push30=, MyPte+124 + i32.store Lom5($pop45), $pop30 + i32.const $push44=, 0 + i32.const $push31=, MyPte+128 + i32.store Lom6($pop44), $pop31 + i32.const $push43=, 0 + i32.const $push32=, MyPte+132 + i32.store Lom7($pop43), $pop32 + i32.const $push42=, 0 + i32.const $push33=, MyPte+136 + i32.store Lom8($pop42), $pop33 + i32.const $push41=, 0 + i32.const $push34=, MyPte+140 + i32.store Lom9($pop41), $pop34 + i32.const $push40=, 0 + i32.const $push35=, MyPte+144 + i32.store Lom10($pop40), $pop35 + i32.const $push39=, 0 + i32.const $push36=, MyPte+148 + i32.store RDbf11($pop39), $pop36 + i32.const $push38=, 0 + i32.const $push37=, MyPte+152 + i32.store RDbf12($pop38), $pop37 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size InitCache, .Lfunc_end0-InitCache + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 5 + i32.store MyPte+12($pop1), $pop0 + i32.const $push76=, 0 + i64.const $push2=, 5 + i64.store MyPte+4($pop76):p2align=2, $pop2 + i32.const $push75=, 0 + i32.const $push3=, MyPte+16 + i32.store Local1($pop75), $pop3 + i32.const $push74=, 0 + i32.const $push4=, MyPte+20 + i32.store Local2($pop74), $pop4 + i32.const $push73=, 0 + i32.const $push5=, MyPte+24 + i32.store Local3($pop73), $pop5 + i32.const $push72=, 0 + i32.const $push6=, MyPte+28 + i32.store RDbf1($pop72), $pop6 + i32.const $push71=, 0 + i32.const $push7=, MyPte+32 + i32.store RDbf2($pop71), $pop7 + i32.const $push70=, 0 + i32.const $push8=, MyPte+36 + i32.store RDbf3($pop70), $pop8 + i32.const $push69=, 0 + i32.const $push9=, 1 + i32.store MyPte+36($pop69), $pop9 + i32.const $push68=, 0 + i32.const $push10=, MyPte+156 + i32.store IntVc1($pop68), $pop10 + i32.const $push67=, 0 + i32.const $push11=, MyPte+160 + i32.store IntVc2($pop67), $pop11 + i32.const $push66=, 0 + i32.const $push12=, MyPte+164 + i32.store IntCode3($pop66), $pop12 + i32.const $push65=, 0 + i32.const $push13=, MyPte+168 + i32.store IntCode4($pop65), $pop13 + i32.const $push64=, 0 + i32.const $push14=, MyPte+172 + i32.store IntCode5($pop64), $pop14 + i32.const $push63=, 0 + i32.const $push15=, MyPte+176 + i32.store IntCode6($pop63), $pop15 + i32.const $push62=, 0 + i32.const $push16=, MyPte+180 + i32.store Workspace($pop62), $pop16 + i32.const $push61=, 0 + i32.const $push17=, MyPte+184 + i32.store Workspace+4($pop61), $pop17 + i32.const $push60=, 0 + i32.const $push18=, MyPte+188 + i32.store Workspace+8($pop60), $pop18 + i32.const $push59=, 0 + i32.const $push19=, MyPte+196 + i32.store Workspace+16($pop59), $pop19 + i32.const $push58=, 0 + i32.const $push20=, MyPte+192 + i32.store Workspace+12($pop58), $pop20 + i32.const $push57=, 0 + i32.const $push21=, MyPte+200 + i32.store Workspace+20($pop57), $pop21 + i32.const $push56=, 0 + i32.const $push22=, MyPte+204 + i32.store Workspace+24($pop56), $pop22 + i32.const $push55=, 0 + i32.const $push23=, MyPte+208 + i32.store Workspace+28($pop55), $pop23 + i32.const $push54=, 0 + i32.const $push24=, MyPte+212 + i32.store Workspace+32($pop54), $pop24 + i32.const $push53=, 0 + i32.const $push25=, MyPte+216 + i32.store Workspace+36($pop53), $pop25 + i32.const $push52=, 0 + i32.const $push26=, MyPte+220 + i32.store Workspace+40($pop52), $pop26 + i32.const $push51=, 0 + i32.const $push27=, MyPte+108 + i32.store Lom1($pop51), $pop27 + i32.const $push50=, 0 + i32.const $push28=, MyPte+112 + i32.store Lom2($pop50), $pop28 + i32.const $push49=, 0 + i32.const $push29=, MyPte+116 + i32.store Lom3($pop49), $pop29 + i32.const $push48=, 0 + i32.const $push30=, MyPte+120 + i32.store Lom4($pop48), $pop30 + i32.const $push47=, 0 + i32.const $push31=, MyPte+124 + i32.store Lom5($pop47), $pop31 + i32.const $push46=, 0 + i32.const $push32=, MyPte+128 + i32.store Lom6($pop46), $pop32 + i32.const $push45=, 0 + i32.const $push33=, MyPte+132 + i32.store Lom7($pop45), $pop33 + i32.const $push44=, 0 + i32.const $push34=, MyPte+136 + i32.store Lom8($pop44), $pop34 + i32.const $push43=, 0 + i32.const $push35=, MyPte+140 + i32.store Lom9($pop43), $pop35 + i32.const $push42=, 0 + i32.const $push36=, MyPte+144 + i32.store Lom10($pop42), $pop36 + i32.const $push41=, 0 + i32.const $push37=, MyPte+148 + i32.store RDbf11($pop41), $pop37 + i32.const $push40=, 0 + i32.const $push38=, MyPte+152 + i32.store RDbf12($pop40), $pop38 + i32.const $push39=, 0 + # fallthrough-return: $pop39 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden Local1 # @Local1 + .type Local1,@object + .section .bss.Local1,"aw",@nobits + .globl Local1 + .p2align 2 +Local1: + .int32 0 + .size Local1, 4 + + .hidden Local2 # @Local2 + .type Local2,@object + .section .bss.Local2,"aw",@nobits + .globl Local2 + .p2align 2 +Local2: + .int32 0 + .size Local2, 4 + + .hidden Local3 # @Local3 + .type Local3,@object + .section .bss.Local3,"aw",@nobits + .globl Local3 + .p2align 2 +Local3: + .int32 0 + .size Local3, 4 + + .hidden RDbf1 # @RDbf1 + .type RDbf1,@object + .section .bss.RDbf1,"aw",@nobits + .globl RDbf1 + .p2align 2 +RDbf1: + .int32 0 + .size RDbf1, 4 + + .hidden RDbf2 # @RDbf2 + .type RDbf2,@object + .section .bss.RDbf2,"aw",@nobits + .globl RDbf2 + .p2align 2 +RDbf2: + .int32 0 + .size RDbf2, 4 + + .hidden RDbf3 # @RDbf3 + .type RDbf3,@object + .section .bss.RDbf3,"aw",@nobits + .globl RDbf3 + .p2align 2 +RDbf3: + .int32 0 + .size RDbf3, 4 + + .hidden IntVc1 # @IntVc1 + .type IntVc1,@object + .section .bss.IntVc1,"aw",@nobits + .globl IntVc1 + .p2align 2 +IntVc1: + .int32 0 + .size IntVc1, 4 + + .hidden IntVc2 # @IntVc2 + .type IntVc2,@object + .section .bss.IntVc2,"aw",@nobits + .globl IntVc2 + .p2align 2 +IntVc2: + .int32 0 + .size IntVc2, 4 + + .hidden IntCode3 # @IntCode3 + .type IntCode3,@object + .section .bss.IntCode3,"aw",@nobits + .globl IntCode3 + .p2align 2 +IntCode3: + .int32 0 + .size IntCode3, 4 + + .hidden IntCode4 # @IntCode4 + .type IntCode4,@object + .section .bss.IntCode4,"aw",@nobits + .globl IntCode4 + .p2align 2 +IntCode4: + .int32 0 + .size IntCode4, 4 + + .hidden IntCode5 # @IntCode5 + .type IntCode5,@object + .section .bss.IntCode5,"aw",@nobits + .globl IntCode5 + .p2align 2 +IntCode5: + .int32 0 + .size IntCode5, 4 + + .hidden IntCode6 # @IntCode6 + .type IntCode6,@object + .section .bss.IntCode6,"aw",@nobits + .globl IntCode6 + .p2align 2 +IntCode6: + .int32 0 + .size IntCode6, 4 + + .hidden Lom1 # @Lom1 + .type Lom1,@object + .section .bss.Lom1,"aw",@nobits + .globl Lom1 + .p2align 2 +Lom1: + .int32 0 + .size Lom1, 4 + + .hidden Lom2 # @Lom2 + .type Lom2,@object + .section .bss.Lom2,"aw",@nobits + .globl Lom2 + .p2align 2 +Lom2: + .int32 0 + .size Lom2, 4 + + .hidden Lom3 # @Lom3 + .type Lom3,@object + .section .bss.Lom3,"aw",@nobits + .globl Lom3 + .p2align 2 +Lom3: + .int32 0 + .size Lom3, 4 + + .hidden Lom4 # @Lom4 + .type Lom4,@object + .section .bss.Lom4,"aw",@nobits + .globl Lom4 + .p2align 2 +Lom4: + .int32 0 + .size Lom4, 4 + + .hidden Lom5 # @Lom5 + .type Lom5,@object + .section .bss.Lom5,"aw",@nobits + .globl Lom5 + .p2align 2 +Lom5: + .int32 0 + .size Lom5, 4 + + .hidden Lom6 # @Lom6 + .type Lom6,@object + .section .bss.Lom6,"aw",@nobits + .globl Lom6 + .p2align 2 +Lom6: + .int32 0 + .size Lom6, 4 + + .hidden Lom7 # @Lom7 + .type Lom7,@object + .section .bss.Lom7,"aw",@nobits + .globl Lom7 + .p2align 2 +Lom7: + .int32 0 + .size Lom7, 4 + + .hidden Lom8 # @Lom8 + .type Lom8,@object + .section .bss.Lom8,"aw",@nobits + .globl Lom8 + .p2align 2 +Lom8: + .int32 0 + .size Lom8, 4 + + .hidden Lom9 # @Lom9 + .type Lom9,@object + .section .bss.Lom9,"aw",@nobits + .globl Lom9 + .p2align 2 +Lom9: + .int32 0 + .size Lom9, 4 + + .hidden Lom10 # @Lom10 + .type Lom10,@object + .section .bss.Lom10,"aw",@nobits + .globl Lom10 + .p2align 2 +Lom10: + .int32 0 + .size Lom10, 4 + + .hidden RDbf11 # @RDbf11 + .type RDbf11,@object + .section .bss.RDbf11,"aw",@nobits + .globl RDbf11 + .p2align 2 +RDbf11: + .int32 0 + .size RDbf11, 4 + + .hidden RDbf12 # @RDbf12 + .type RDbf12,@object + .section .bss.RDbf12,"aw",@nobits + .globl RDbf12 + .p2align 2 +RDbf12: + .int32 0 + .size RDbf12, 4 + + .hidden Workspace # @Workspace + .type Workspace,@object + .section .bss.Workspace,"aw",@nobits + .globl Workspace + .p2align 2 +Workspace: + .skip 44 + .size Workspace, 44 + + .hidden MyPte # @MyPte + .type MyPte,@object + .section .bss.MyPte,"aw",@nobits + .globl MyPte + .p2align 2 +MyPte: + .skip 392 + .size MyPte, 392 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20020402-3.c.s b/src/binaryen/test/torture-s/20020402-3.c.s new file mode 100644 index 0000000000..5d211f59a8 --- /dev/null +++ b/src/binaryen/test/torture-s/20020402-3.c.s @@ -0,0 +1,114 @@ + .text + .file "20020402-3.c" + .section .text.blockvector_for_pc_sect,"ax",@progbits + .hidden blockvector_for_pc_sect # -- Begin function blockvector_for_pc_sect + .globl blockvector_for_pc_sect + .type blockvector_for_pc_sect,@function +blockvector_for_pc_sect: # @blockvector_for_pc_sect + .param i64, i32 + .result i32 + .local i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $7=, 0 + block + block + i32.load $push21=, 0($1) + tee_local $push20=, $2=, $pop21 + i32.load $push19=, 0($pop20) + tee_local $push18=, $1=, $pop19 + i32.const $push17=, 2 + i32.lt_s $push0=, $pop18, $pop17 + br_if 0, $pop0 # 0: down to label1 +# BB#1: # %while.body.preheader + i32.const $7=, 0 + copy_local $6=, $1 +.LBB0_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push34=, 1 + i32.add $push1=, $1, $pop34 + i32.const $push33=, 1 + i32.shr_s $push32=, $pop1, $pop33 + tee_local $push31=, $3=, $pop32 + i32.add $push30=, $pop31, $7 + tee_local $push29=, $1=, $pop30 + i32.sub $4=, $6, $pop29 + i32.const $push28=, 2 + i32.shl $push2=, $1, $pop28 + i32.add $push3=, $2, $pop2 + i32.const $push27=, 4 + i32.add $push4=, $pop3, $pop27 + i32.load $push5=, 0($pop4) + i64.load $push6=, 0($pop5) + i64.gt_u $push26=, $pop6, $0 + tee_local $push25=, $5=, $pop26 + i32.select $6=, $1, $6, $pop25 + i32.select $7=, $7, $1, $5 + i32.select $push24=, $3, $4, $5 + tee_local $push23=, $1=, $pop24 + i32.const $push22=, 1 + i32.gt_s $push7=, $pop23, $pop22 + br_if 0, $pop7 # 0: up to label2 +# BB#3: # %while.end + end_loop + i32.const $1=, 0 + i32.const $push35=, 0 + i32.lt_s $push8=, $7, $pop35 + br_if 1, $pop8 # 1: down to label0 +.LBB0_4: # %while.body10.preheader + end_block # label1: + i32.const $push37=, 1 + i32.add $6=, $7, $pop37 + i32.const $push36=, 2 + i32.shl $push9=, $7, $pop36 + i32.add $push10=, $2, $pop9 + i32.const $push11=, 4 + i32.add $1=, $pop10, $pop11 +.LBB0_5: # %while.body10 + # =>This Inner Loop Header: Depth=1 + block + loop # label4: + i32.load $push12=, 0($1) + i64.load $push13=, 8($pop12) + i64.gt_u $push14=, $pop13, $0 + br_if 1, $pop14 # 1: down to label3 +# BB#6: # %while.cond8 + # in Loop: Header=BB0_5 Depth=1 + i32.const $push42=, -4 + i32.add $1=, $1, $pop42 + i32.const $push41=, -1 + i32.add $push40=, $6, $pop41 + tee_local $push39=, $6=, $pop40 + i32.const $push38=, 1 + i32.ge_s $push15=, $pop39, $pop38 + br_if 0, $pop15 # 0: up to label4 +# BB#7: + end_loop + i32.const $push16=, 0 + return $pop16 +.LBB0_8: + end_block # label3: + copy_local $1=, $2 +.LBB0_9: # %cleanup + end_block # label0: + copy_local $push43=, $1 + # fallthrough-return: $pop43 + .endfunc +.Lfunc_end0: + .size blockvector_for_pc_sect, .Lfunc_end0-blockvector_for_pc_sect + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20020404-1.c.s b/src/binaryen/test/torture-s/20020404-1.c.s new file mode 100644 index 0000000000..26344bb7d1 --- /dev/null +++ b/src/binaryen/test/torture-s/20020404-1.c.s @@ -0,0 +1,51 @@ + .text + .file "20020404-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call dump_bfd_file@FUNCTION + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.dump_bfd_file,"ax",@progbits + .type dump_bfd_file,@function # -- Begin function dump_bfd_file +dump_bfd_file: # @dump_bfd_file +# BB#0: # %entry + i32.const $push1=, 0 + i64.const $push0=, 3735928559 + i64.store bfd_make_section_anyway.foo_section+8($pop1), $pop0 + i32.const $push10=, 0 + i64.const $push9=, 3735928559 + i64.store bfd_make_section_anyway.foo_section+16($pop10), $pop9 + i32.const $push8=, 0 + i64.const $push2=, 0 + i64.store bfd_make_section_anyway.foo_section+24($pop8), $pop2 + i32.const $push7=, 0 + i32.const $push6=, 0 + i32.load8_u $push3=, bfd_make_section_anyway.foo_section($pop6) + i32.const $push4=, 1 + i32.or $push5=, $pop3, $pop4 + i32.store8 bfd_make_section_anyway.foo_section($pop7), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size dump_bfd_file, .Lfunc_end1-dump_bfd_file + # -- End function + .type bfd_make_section_anyway.foo_section,@object # @bfd_make_section_anyway.foo_section + .section .bss.bfd_make_section_anyway.foo_section,"aw",@nobits + .p2align 3 +bfd_make_section_anyway.foo_section: + .skip 32 + .size bfd_make_section_anyway.foo_section, 32 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020406-1.c.s b/src/binaryen/test/torture-s/20020406-1.c.s new file mode 100644 index 0000000000..ffae922b78 --- /dev/null +++ b/src/binaryen/test/torture-s/20020406-1.c.s @@ -0,0 +1,308 @@ + .text + .file "20020406-1.c" + .section .text.FFmul,"ax",@progbits + .hidden FFmul # -- Begin function FFmul + .globl FFmul + .type FFmul,@function +FFmul: # @FFmul + .param i32, i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size FFmul, .Lfunc_end0-FFmul + # -- End function + .section .text.DUPFFdeg,"ax",@progbits + .hidden DUPFFdeg # -- Begin function DUPFFdeg + .globl DUPFFdeg + .type DUPFFdeg,@function +DUPFFdeg: # @DUPFFdeg + .param i32 + .result i32 +# BB#0: # %entry + i32.load $push0=, 4($0) + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size DUPFFdeg, .Lfunc_end1-DUPFFdeg + # -- End function + .section .text.DUPFFnew,"ax",@progbits + .hidden DUPFFnew # -- Begin function DUPFFnew + .globl DUPFFnew + .type DUPFFnew,@function +DUPFFnew: # @DUPFFnew + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 12 + i32.call $push12=, malloc@FUNCTION, $pop0 + tee_local $push11=, $1=, $pop12 + i32.const $push1=, 0 + i32.store 8($pop11), $pop1 + block + i32.const $push10=, 0 + i32.lt_s $push2=, $0, $pop10 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.then + i32.const $push3=, 8 + i32.add $push4=, $1, $pop3 + i32.const $push5=, 1 + i32.add $push6=, $0, $pop5 + i32.const $push7=, 4 + i32.call $push8=, calloc@FUNCTION, $pop6, $pop7 + i32.store 0($pop4), $pop8 +.LBB2_2: # %if.end + end_block # label0: + i32.const $push9=, -1 + i32.store 4($1), $pop9 + i32.store 0($1), $0 + copy_local $push13=, $1 + # fallthrough-return: $pop13 + .endfunc +.Lfunc_end2: + .size DUPFFnew, .Lfunc_end2-DUPFFnew + # -- End function + .section .text.DUPFFfree,"ax",@progbits + .hidden DUPFFfree # -- Begin function DUPFFfree + .globl DUPFFfree + .type DUPFFfree,@function +DUPFFfree: # @DUPFFfree + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end3: + .size DUPFFfree, .Lfunc_end3-DUPFFfree + # -- End function + .section .text.DUPFFswap,"ax",@progbits + .hidden DUPFFswap # -- Begin function DUPFFswap + .globl DUPFFswap + .type DUPFFswap,@function +DUPFFswap: # @DUPFFswap + .param i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end4: + .size DUPFFswap, .Lfunc_end4-DUPFFswap + # -- End function + .section .text.DUPFFcopy,"ax",@progbits + .hidden DUPFFcopy # -- Begin function DUPFFcopy + .globl DUPFFcopy + .type DUPFFcopy,@function +DUPFFcopy: # @DUPFFcopy + .param i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end5: + .size DUPFFcopy, .Lfunc_end5-DUPFFcopy + # -- End function + .section .text.DUPFFshift_add,"ax",@progbits + .hidden DUPFFshift_add # -- Begin function DUPFFshift_add + .globl DUPFFshift_add + .type DUPFFshift_add,@function +DUPFFshift_add: # @DUPFFshift_add + .param i32, i32, i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end6: + .size DUPFFshift_add, .Lfunc_end6-DUPFFshift_add + # -- End function + .section .text.DUPFFexgcd,"ax",@progbits + .hidden DUPFFexgcd # -- Begin function DUPFFexgcd + .globl DUPFFexgcd + .type DUPFFexgcd,@function +DUPFFexgcd: # @DUPFFexgcd + .param i32, i32, i32, i32 + .result i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push20=, 0 + i32.const $push18=, 0 + i32.load $push17=, __stack_pointer($pop18) + i32.const $push19=, 16 + i32.sub $push25=, $pop17, $pop19 + tee_local $push24=, $8=, $pop25 + i32.store __stack_pointer($pop20), $pop24 + i32.load $6=, 4($3) + i32.load $7=, 4($2) +.LBB7_1: # %tailrecurse + # =>This Inner Loop Header: Depth=1 + loop # label1: + copy_local $5=, $3 + copy_local $3=, $2 + copy_local $4=, $1 + copy_local $1=, $0 + i32.store 4($8), $6 + i32.store 0($8), $7 + i32.const $push30=, .L.str + i32.call $drop=, printf@FUNCTION, $pop30, $8 + copy_local $0=, $4 + copy_local $2=, $5 + i32.load $push29=, 4($3) + tee_local $push28=, $6=, $pop29 + i32.load $push27=, 4($5) + tee_local $push26=, $7=, $pop27 + i32.lt_s $push1=, $pop28, $pop26 + br_if 0, $pop1 # 0: up to label1 +# BB#2: # %if.end + end_loop + block + i32.const $push2=, 2 + i32.ne $push3=, $6, $pop2 + br_if 0, $pop3 # 0: down to label2 +# BB#3: # %if.end + i32.const $push4=, 1 + i32.ne $push5=, $7, $pop4 + br_if 0, $pop5 # 0: down to label2 +# BB#4: # %if.end11 + block + i32.load $push6=, 8($3) + i32.load $push7=, 0($pop6) + i32.eqz $push43=, $pop7 + br_if 0, $pop43 # 0: down to label3 +# BB#5: # %DUPFFnew.exit + i32.const $push8=, 12 + i32.call $push41=, malloc@FUNCTION, $pop8 + tee_local $push40=, $6=, $pop41 + i32.const $push9=, 2 + i32.const $push39=, 4 + i32.call $push38=, calloc@FUNCTION, $pop9, $pop39 + tee_local $push37=, $2=, $pop38 + i32.store 8($pop40), $pop37 + i32.const $push10=, 1 + i32.store 0($2), $pop10 + i64.const $push11=, 1 + i64.store 0($6):p2align=2, $pop11 + i32.const $push36=, 12 + i32.call $2=, malloc@FUNCTION, $pop36 + i32.const $push12=, 3 + i32.const $push35=, 4 + i32.call $7=, calloc@FUNCTION, $pop12, $pop35 + i64.const $push13=, -4294967294 + i64.store 0($2):p2align=2, $pop13 + i32.store 8($2), $7 + block + i32.const $push34=, 4 + i32.add $push14=, $5, $pop34 + i32.load $push33=, 0($pop14) + tee_local $push32=, $5=, $pop33 + i32.const $push31=, 1 + i32.lt_s $push15=, $pop32, $pop31 + br_if 0, $pop15 # 0: down to label4 +# BB#6: # %while.body.lr.ph + i32.const $push42=, 4 + i32.add $push16=, $3, $pop42 + i32.load $push0=, 0($pop16) + i32.lt_s $3=, $pop0, $5 +.LBB7_7: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label5: + br_if 0, $3 # 0: up to label5 +.LBB7_8: # %while.cond40 + # =>This Inner Loop Header: Depth=1 + end_loop + loop # label6: + br 0 # 0: up to label6 +.LBB7_9: # %if.end57 + end_loop + end_block # label4: + i32.store 0($1), $6 + i32.store 0($4), $2 +.LBB7_10: # %cleanup + end_block # label3: + i32.const $push23=, 0 + i32.const $push21=, 16 + i32.add $push22=, $8, $pop21 + i32.store __stack_pointer($pop23), $pop22 + return $3 +.LBB7_11: # %if.then10 + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end7: + .size DUPFFexgcd, .Lfunc_end7-DUPFFexgcd + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push13=, 0 + i32.const $push11=, 0 + i32.load $push10=, __stack_pointer($pop11) + i32.const $push12=, 16 + i32.sub $push33=, $pop10, $pop12 + tee_local $push32=, $3=, $pop33 + i32.store __stack_pointer($pop13), $pop32 + i32.const $push0=, 12 + i32.call $push31=, malloc@FUNCTION, $pop0 + tee_local $push30=, $0=, $pop31 + i32.const $push2=, 2 + i32.const $push1=, 4 + i32.call $push29=, calloc@FUNCTION, $pop2, $pop1 + tee_local $push28=, $1=, $pop29 + i32.store 8($pop30), $pop28 + i32.const $push3=, 1 + i32.store 4($1), $pop3 + i64.const $push4=, 4294967297 + i64.store 0($0):p2align=2, $pop4 + i32.const $push27=, 12 + i32.call $push26=, malloc@FUNCTION, $pop27 + tee_local $push25=, $1=, $pop26 + i32.const $push5=, 3 + i32.const $push24=, 4 + i32.call $push23=, calloc@FUNCTION, $pop5, $pop24 + tee_local $push22=, $2=, $pop23 + i32.store 8($pop25), $pop22 + i32.const $push21=, 1 + i32.store 8($2), $pop21 + i64.const $push6=, 8589934594 + i64.store 0($1):p2align=2, $pop6 + i64.const $push7=, 8589934593 + i64.store 0($3), $pop7 + i32.const $push8=, .L.str.1 + i32.call $drop=, printf@FUNCTION, $pop8, $3 + i32.const $push17=, 12 + i32.add $push18=, $3, $pop17 + i32.const $push19=, 8 + i32.add $push20=, $3, $pop19 + i32.call $drop=, DUPFFexgcd@FUNCTION, $pop18, $pop20, $0, $1 + i32.const $push16=, 0 + i32.const $push14=, 16 + i32.add $push15=, $3, $pop14 + i32.store __stack_pointer($pop16), $pop15 + i32.const $push9=, 0 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end8: + .size main, .Lfunc_end8-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "DUPFFexgcd called on degrees %d and %d\n" + .size .L.str, 40 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "calling DUPFFexgcd on degrees %d and %d\n" + .size .L.str.1, 41 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype malloc, i32, i32 + .functype calloc, i32, i32, i32 + .functype printf, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20020411-1.c.s b/src/binaryen/test/torture-s/20020411-1.c.s new file mode 100644 index 0000000000..1e48f4b1fe --- /dev/null +++ b/src/binaryen/test/torture-s/20020411-1.c.s @@ -0,0 +1,33 @@ + .text + .file "20020411-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + i64.const $push0=, -4647714814380998656 + i64.store 0($0):p2align=2, $pop0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020413-1.c.s b/src/binaryen/test/torture-s/20020413-1.c.s new file mode 100644 index 0000000000..69d8dd1b44 --- /dev/null +++ b/src/binaryen/test/torture-s/20020413-1.c.s @@ -0,0 +1,186 @@ + .text + .file "20020413-1.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i64, i64, i32 + .local i64, i64, i32, i32, i32 +# BB#0: # %entry + i32.const $push24=, 0 + i32.const $push22=, 0 + i32.load $push21=, __stack_pointer($pop22) + i32.const $push23=, 48 + i32.sub $push46=, $pop21, $pop23 + tee_local $push45=, $7=, $pop46 + i32.store __stack_pointer($pop24), $pop45 + i32.const $push28=, 32 + i32.add $push29=, $7, $pop28 + i64.const $push44=, 0 + i64.const $push0=, -9223372036854775808 + call __subtf3@FUNCTION, $pop29, $pop44, $pop0, $0, $1 + i64.const $push43=, 0 + i64.const $push42=, 0 + i32.call $5=, __lttf2@FUNCTION, $0, $1, $pop43, $pop42 + i32.const $6=, 0 + block + block + block + i64.load $push4=, 32($7) + i32.const $push41=, 0 + i32.lt_s $push40=, $5, $pop41 + tee_local $push39=, $5=, $pop40 + i64.select $push38=, $pop4, $0, $pop39 + tee_local $push37=, $3=, $pop38 + i32.const $push1=, 40 + i32.add $push2=, $7, $pop1 + i64.load $push3=, 0($pop2) + i64.select $push36=, $pop3, $1, $5 + tee_local $push35=, $4=, $pop36 + i64.const $push34=, 0 + i64.const $push33=, 4611404543450677248 + i32.call $push5=, __getf2@FUNCTION, $pop37, $pop35, $pop34, $pop33 + i32.const $push32=, 0 + i32.ge_s $push6=, $pop5, $pop32 + br_if 0, $pop6 # 0: down to label2 +# BB#1: # %if.else + i64.const $push48=, 0 + i64.const $push47=, 0 + i32.call $push13=, __eqtf2@FUNCTION, $3, $4, $pop48, $pop47 + i32.eqz $push70=, $pop13 + br_if 1, $pop70 # 1: down to label1 +# BB#2: # %if.else + i64.const $0=, 4611404543450677248 + i64.const $push50=, 0 + i64.const $push49=, 4611404543450677248 + i32.call $push14=, __lttf2@FUNCTION, $3, $4, $pop50, $pop49 + i32.const $push15=, -1 + i32.gt_s $push16=, $pop14, $pop15 + br_if 1, $pop16 # 1: down to label1 +# BB#3: # %while.body11.preheader + i32.const $push18=, 8 + i32.add $5=, $7, $pop18 + i32.const $6=, 0 + i64.const $1=, 0 +.LBB0_4: # %while.body11 + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.const $push51=, 10 + i32.ge_u $push17=, $6, $pop51 + br_if 3, $pop17 # 3: down to label0 +# BB#5: # %if.end15 + # in Loop: Header=BB0_4 Depth=1 + i64.const $push59=, 0 + i64.const $push58=, 4611123068473966592 + call __multf3@FUNCTION, $7, $1, $0, $pop59, $pop58 + i32.const $push57=, 1 + i32.add $6=, $6, $pop57 + i64.load $push56=, 0($7) + tee_local $push55=, $1=, $pop56 + i64.load $push54=, 0($5) + tee_local $push53=, $0=, $pop54 + i32.call $push19=, __lttf2@FUNCTION, $3, $4, $pop55, $pop53 + i32.const $push52=, 0 + i32.lt_s $push20=, $pop19, $pop52 + br_if 0, $pop20 # 0: up to label3 + br 2 # 2: down to label1 +.LBB0_6: # %if.then2 + end_loop + end_block # label2: + i64.const $push62=, 0 + i64.const $push61=, 4611404543450677248 + i32.call $push7=, __gttf2@FUNCTION, $3, $4, $pop62, $pop61 + i32.const $push60=, 1 + i32.lt_s $push8=, $pop7, $pop60 + br_if 0, $pop8 # 0: down to label1 +# BB#7: # %while.body.preheader + i64.const $0=, 4611404543450677248 + i64.const $1=, 0 + i32.const $push10=, 24 + i32.add $5=, $7, $pop10 + i32.const $6=, 0 +.LBB0_8: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label4: + i32.const $push63=, 10 + i32.ge_u $push9=, $6, $pop63 + br_if 2, $pop9 # 2: down to label0 +# BB#9: # %if.end6 + # in Loop: Header=BB0_8 Depth=1 + i32.const $push30=, 16 + i32.add $push31=, $7, $pop30 + call __addtf3@FUNCTION, $pop31, $1, $0, $1, $0 + i32.const $push69=, 1 + i32.add $6=, $6, $pop69 + i64.load $push68=, 16($7) + tee_local $push67=, $1=, $pop68 + i64.load $push66=, 0($5) + tee_local $push65=, $0=, $pop66 + i32.call $push11=, __lttf2@FUNCTION, $pop67, $pop65, $3, $4 + i32.const $push64=, 0 + i32.lt_s $push12=, $pop11, $pop64 + br_if 0, $pop12 # 0: up to label4 +.LBB0_10: # %if.end18 + end_loop + end_block # label1: + i32.store 0($2), $6 + i32.const $push27=, 0 + i32.const $push25=, 48 + i32.add $push26=, $7, $pop25 + i32.store __stack_pointer($pop27), $pop26 + return +.LBB0_11: # %if.then5 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 16 + i32.sub $push22=, $pop6, $pop8 + tee_local $push21=, $0=, $pop22 + i32.store __stack_pointer($pop9), $pop21 + i64.const $push1=, 0 + i64.const $push0=, 4611826755915743232 + i32.const $push10=, 12 + i32.add $push11=, $0, $pop10 + call test@FUNCTION, $pop1, $pop0, $pop11 + i64.const $push20=, 0 + i64.const $push2=, 4611897124659920896 + i32.const $push12=, 12 + i32.add $push13=, $0, $pop12 + call test@FUNCTION, $pop20, $pop2, $pop13 + i64.const $push19=, 0 + i64.const $push3=, 4611967493404098560 + i32.const $push14=, 12 + i32.add $push15=, $0, $pop14 + call test@FUNCTION, $pop19, $pop3, $pop15 + i64.const $push18=, 0 + i64.const $push4=, 4612037862148276224 + i32.const $push16=, 12 + i32.add $push17=, $0, $pop16 + call test@FUNCTION, $pop18, $pop4, $pop17 + i32.const $push5=, 0 + call exit@FUNCTION, $pop5 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020418-1.c.s b/src/binaryen/test/torture-s/20020418-1.c.s new file mode 100644 index 0000000000..3b4ce2e366 --- /dev/null +++ b/src/binaryen/test/torture-s/20020418-1.c.s @@ -0,0 +1,54 @@ + .text + .file "20020418-1.c" + .section .text.gcc_crash,"ax",@progbits + .hidden gcc_crash # -- Begin function gcc_crash + .globl gcc_crash + .type gcc_crash,@function +gcc_crash: # @gcc_crash + .param i32 + .local i32, i32 +# BB#0: # %entry + block + i32.load $push4=, 0($0) + tee_local $push3=, $2=, $pop4 + i32.const $push0=, 51 + i32.le_s $push1=, $pop3, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push2=, 60 + i32.gt_s $1=, $2, $pop2 +.LBB0_2: # %top + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push5=, 1 + i32.add $2=, $2, $pop5 + br_if 0, $1 # 0: up to label1 +# BB#3: # %if.end6 + end_loop + i32.store 0($0), $2 + return +.LBB0_4: # %if.then + end_block # label0: + unreachable + unreachable + .endfunc +.Lfunc_end0: + .size gcc_crash, .Lfunc_end0-gcc_crash + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %gcc_crash.exit + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020423-1.c.s b/src/binaryen/test/torture-s/20020423-1.c.s new file mode 100644 index 0000000000..f488535f43 --- /dev/null +++ b/src/binaryen/test/torture-s/20020423-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20020423-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020503-1.c.s b/src/binaryen/test/torture-s/20020503-1.c.s new file mode 100644 index 0000000000..ecbeafaad1 --- /dev/null +++ b/src/binaryen/test/torture-s/20020503-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20020503-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20020506-1.c.s b/src/binaryen/test/torture-s/20020506-1.c.s new file mode 100644 index 0000000000..43ab1cdc2a --- /dev/null +++ b/src/binaryen/test/torture-s/20020506-1.c.s @@ -0,0 +1,266 @@ + .text + .file "20020506-1.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i32, i32 +# BB#0: # %entry + block + block + block + i32.const $push0=, 0 + i32.lt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label2 +# BB#1: # %if.then + br_if 1, $1 # 1: down to label1 + br 2 # 2: down to label0 +.LBB0_2: # %if.else + end_block # label2: + br_if 1, $1 # 1: down to label0 +.LBB0_3: # %if.then2 + end_block # label1: + call abort@FUNCTION + unreachable +.LBB0_4: # %if.end45 + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param i32, i32 +# BB#0: # %entry + block + block + block + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.const $push5=, 24 + i32.shr_s $push2=, $pop1, $pop5 + i32.const $push3=, 0 + i32.lt_s $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label5 +# BB#1: # %if.then + br_if 1, $1 # 1: down to label4 + br 2 # 2: down to label3 +.LBB1_2: # %if.else + end_block # label5: + br_if 1, $1 # 1: down to label3 +.LBB1_3: # %if.then2 + end_block # label4: + call abort@FUNCTION + unreachable +.LBB1_4: # %if.end45 + end_block # label3: + # fallthrough-return + .endfunc +.Lfunc_end1: + .size test2, .Lfunc_end1-test2 + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .param i32, i32 +# BB#0: # %entry + block + block + block + i32.const $push0=, 0 + i32.lt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label8 +# BB#1: # %if.then + br_if 1, $1 # 1: down to label7 + br 2 # 2: down to label6 +.LBB2_2: # %if.else + end_block # label8: + br_if 1, $1 # 1: down to label6 +.LBB2_3: # %if.then2 + end_block # label7: + call abort@FUNCTION + unreachable +.LBB2_4: # %if.end45 + end_block # label6: + # fallthrough-return + .endfunc +.Lfunc_end2: + .size test3, .Lfunc_end2-test3 + # -- End function + .section .text.test4,"ax",@progbits + .hidden test4 # -- Begin function test4 + .globl test4 + .type test4,@function +test4: # @test4 + .param i32, i32 +# BB#0: # %entry + block + block + block + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + i32.const $push5=, 16 + i32.shr_s $push2=, $pop1, $pop5 + i32.const $push3=, 0 + i32.lt_s $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label11 +# BB#1: # %if.then + br_if 1, $1 # 1: down to label10 + br 2 # 2: down to label9 +.LBB3_2: # %if.else + end_block # label11: + br_if 1, $1 # 1: down to label9 +.LBB3_3: # %if.then2 + end_block # label10: + call abort@FUNCTION + unreachable +.LBB3_4: # %if.end45 + end_block # label9: + # fallthrough-return + .endfunc +.Lfunc_end3: + .size test4, .Lfunc_end3-test4 + # -- End function + .section .text.test5,"ax",@progbits + .hidden test5 # -- Begin function test5 + .globl test5 + .type test5,@function +test5: # @test5 + .param i32, i32 +# BB#0: # %entry + block + block + block + i32.const $push0=, 0 + i32.lt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label14 +# BB#1: # %if.then + br_if 1, $1 # 1: down to label13 + br 2 # 2: down to label12 +.LBB4_2: # %if.else + end_block # label14: + br_if 1, $1 # 1: down to label12 +.LBB4_3: # %if.then1 + end_block # label13: + call abort@FUNCTION + unreachable +.LBB4_4: # %if.end38 + end_block # label12: + # fallthrough-return + .endfunc +.Lfunc_end4: + .size test5, .Lfunc_end4-test5 + # -- End function + .section .text.test6,"ax",@progbits + .hidden test6 # -- Begin function test6 + .globl test6 + .type test6,@function +test6: # @test6 + .param i32, i32 +# BB#0: # %entry + block + block + block + i32.const $push0=, 0 + i32.lt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label17 +# BB#1: # %if.then + br_if 1, $1 # 1: down to label16 + br 2 # 2: down to label15 +.LBB5_2: # %if.else + end_block # label17: + br_if 1, $1 # 1: down to label15 +.LBB5_3: # %if.then1 + end_block # label16: + call abort@FUNCTION + unreachable +.LBB5_4: # %if.end38 + end_block # label15: + # fallthrough-return + .endfunc +.Lfunc_end5: + .size test6, .Lfunc_end5-test6 + # -- End function + .section .text.test7,"ax",@progbits + .hidden test7 # -- Begin function test7 + .globl test7 + .type test7,@function +test7: # @test7 + .param i64, i32 +# BB#0: # %entry + block + block + block + i64.const $push0=, 0 + i64.lt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label20 +# BB#1: # %if.then + br_if 1, $1 # 1: down to label19 + br 2 # 2: down to label18 +.LBB6_2: # %if.else + end_block # label20: + br_if 1, $1 # 1: down to label18 +.LBB6_3: # %if.then1 + end_block # label19: + call abort@FUNCTION + unreachable +.LBB6_4: # %if.end38 + end_block # label18: + # fallthrough-return + .endfunc +.Lfunc_end6: + .size test7, .Lfunc_end6-test7 + # -- End function + .section .text.test8,"ax",@progbits + .hidden test8 # -- Begin function test8 + .globl test8 + .type test8,@function +test8: # @test8 + .param i64, i32 +# BB#0: # %entry + block + block + block + i64.const $push0=, 0 + i64.lt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label23 +# BB#1: # %if.then + br_if 1, $1 # 1: down to label22 + br 2 # 2: down to label21 +.LBB7_2: # %if.else + end_block # label23: + br_if 1, $1 # 1: down to label21 +.LBB7_3: # %if.then1 + end_block # label22: + call abort@FUNCTION + unreachable +.LBB7_4: # %if.end38 + end_block # label21: + # fallthrough-return + .endfunc +.Lfunc_end7: + .size test8, .Lfunc_end7-test8 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end8: + .size main, .Lfunc_end8-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20020508-1.c.s b/src/binaryen/test/torture-s/20020508-1.c.s new file mode 100644 index 0000000000..b1e0be21f8 --- /dev/null +++ b/src/binaryen/test/torture-s/20020508-1.c.s @@ -0,0 +1,269 @@ + .text + .file "20020508-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i32 +# BB#0: # %entry + block + i32.const $push2=, 0 + i32.load8_u $push103=, uc($pop2) + tee_local $push102=, $0=, $pop103 + i32.const $push4=, 8 + i32.const $push101=, 0 + i32.load $push100=, shift1($pop101) + tee_local $push99=, $1=, $pop100 + i32.sub $push98=, $pop4, $pop99 + tee_local $push97=, $2=, $pop98 + i32.shl $push5=, $pop102, $pop97 + i32.shr_u $push3=, $0, $1 + i32.or $push6=, $pop5, $pop3 + i32.const $push96=, 835 + i32.ne $push7=, $pop6, $pop96 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %if.end + i32.const $push8=, 4 + i32.shr_u $push10=, $0, $pop8 + i32.const $push105=, 4 + i32.shl $push9=, $0, $pop105 + i32.or $push11=, $pop10, $pop9 + i32.const $push104=, 835 + i32.ne $push12=, $pop11, $pop104 + br_if 0, $pop12 # 0: down to label0 +# BB#2: # %if.end11 + i32.const $push14=, 0 + i32.load16_u $push110=, us($pop14) + tee_local $push109=, $3=, $pop110 + i32.shr_u $push16=, $pop109, $1 + i32.const $push13=, 16 + i32.sub $push108=, $pop13, $1 + tee_local $push107=, $4=, $pop108 + i32.shl $push15=, $3, $pop107 + i32.or $push17=, $pop16, $pop15 + i32.const $push106=, 253972259 + i32.ne $push18=, $pop17, $pop106 + br_if 0, $pop18 # 0: down to label0 +# BB#3: # %if.end21 + i32.const $push21=, 4 + i32.shr_u $push22=, $3, $pop21 + i32.const $push19=, 12 + i32.shl $push20=, $3, $pop19 + i32.or $push23=, $pop22, $pop20 + i32.const $push111=, 253972259 + i32.ne $push24=, $pop23, $pop111 + br_if 0, $pop24 # 0: down to label0 +# BB#4: # %if.end30 + i32.const $push26=, 0 + i32.load $push114=, ui($pop26) + tee_local $push113=, $5=, $pop114 + i32.rotr $push27=, $pop113, $1 + i32.const $push112=, 1073745699 + i32.ne $push28=, $pop27, $pop112 + br_if 0, $pop28 # 0: down to label0 +# BB#5: # %if.end38 + i32.const $push29=, 28 + i32.rotl $push30=, $5, $pop29 + i32.const $push115=, 1073745699 + i32.ne $push31=, $pop30, $pop115 + br_if 0, $pop31 # 0: down to label0 +# BB#6: # %if.end45 + i32.const $push32=, 0 + i32.load $push120=, ul($pop32) + tee_local $push119=, $7=, $pop120 + i32.shr_u $push34=, $pop119, $1 + i32.const $push25=, 32 + i32.sub $push118=, $pop25, $1 + tee_local $push117=, $6=, $pop118 + i32.shl $push33=, $7, $pop117 + i32.or $push35=, $pop34, $pop33 + i32.const $push116=, -1893513881 + i32.ne $push36=, $pop35, $pop116 + br_if 0, $pop36 # 0: down to label0 +# BB#7: # %if.end53 + i32.const $push37=, 28 + i32.rotl $push38=, $7, $pop37 + i32.const $push121=, -1893513881 + i32.ne $push39=, $pop38, $pop121 + br_if 0, $pop39 # 0: down to label0 +# BB#8: # %if.end60 + i32.const $push40=, 0 + i64.load $push126=, ull($pop40) + tee_local $push125=, $8=, $pop126 + i64.extend_u/i32 $push124=, $1 + tee_local $push123=, $9=, $pop124 + i64.rotr $push41=, $pop125, $pop123 + i64.const $push122=, 68174490360335855 + i64.ne $push42=, $pop41, $pop122 + br_if 0, $pop42 # 0: down to label0 +# BB#9: # %if.end69 + i64.const $push45=, 60 + i64.rotl $push46=, $8, $pop45 + i64.const $push127=, 68174490360335855 + i64.ne $push47=, $pop46, $pop127 + br_if 0, $pop47 # 0: down to label0 +# BB#10: # %if.end76 + i32.const $push48=, 0 + i32.load $push132=, shift2($pop48) + tee_local $push131=, $11=, $pop132 + i64.extend_u/i32 $push130=, $pop131 + tee_local $push129=, $10=, $pop130 + i64.rotr $push49=, $8, $pop129 + i64.const $push128=, -994074541463572736 + i64.ne $push50=, $pop49, $pop128 + br_if 0, $pop50 # 0: down to label0 +# BB#11: # %if.end86 + i64.const $push53=, 4 + i64.rotl $push54=, $8, $pop53 + i64.const $push133=, -994074541463572736 + i64.ne $push55=, $pop54, $pop133 + br_if 0, $pop55 # 0: down to label0 +# BB#12: # %if.end93 + i32.shr_u $push57=, $0, $2 + i32.shl $push56=, $0, $1 + i32.or $push58=, $pop57, $pop56 + i32.const $push59=, 835 + i32.ne $push60=, $pop58, $pop59 + br_if 0, $pop60 # 0: down to label0 +# BB#13: # %if.end112 + i32.shl $push62=, $3, $1 + i32.shr_u $push61=, $3, $4 + i32.or $push63=, $pop62, $pop61 + i32.const $push134=, 992079 + i32.ne $push64=, $pop63, $pop134 + br_if 0, $pop64 # 0: down to label0 +# BB#14: # %if.end122 + i32.const $push67=, 4 + i32.shl $push68=, $3, $pop67 + i32.const $push65=, 12 + i32.shr_u $push66=, $3, $pop65 + i32.or $push69=, $pop68, $pop66 + i32.const $push135=, 992079 + i32.ne $push70=, $pop69, $pop135 + br_if 0, $pop70 # 0: down to label0 +# BB#15: # %if.end131 + i32.shl $push72=, $5, $1 + i32.shr_u $push71=, $5, $6 + i32.or $push73=, $pop72, $pop71 + i32.const $push136=, 992064 + i32.ne $push74=, $pop73, $pop136 + br_if 0, $pop74 # 0: down to label0 +# BB#16: # %if.end139 + i32.const $push75=, 4 + i32.rotl $push76=, $5, $pop75 + i32.const $push137=, 992064 + i32.ne $push77=, $pop76, $pop137 + br_if 0, $pop77 # 0: down to label0 +# BB#17: # %if.end146 + i32.shl $push79=, $7, $1 + i32.shr_u $push78=, $7, $6 + i32.or $push80=, $pop79, $pop78 + i32.const $push138=, 591751055 + i32.ne $push81=, $pop80, $pop138 + br_if 0, $pop81 # 0: down to label0 +# BB#18: # %if.end154 + i32.const $push82=, 4 + i32.rotl $push83=, $7, $pop82 + i32.const $push139=, 591751055 + i32.ne $push84=, $pop83, $pop139 + br_if 0, $pop84 # 0: down to label0 +# BB#19: # %if.end161 + i64.shl $push86=, $8, $9 + i32.const $push43=, 64 + i32.sub $push44=, $pop43, $1 + i64.extend_u/i32 $push0=, $pop44 + i64.shr_u $push85=, $8, $pop0 + i64.or $push87=, $pop86, $pop85 + i64.const $push88=, -994074541463572736 + i64.ne $push89=, $pop87, $pop88 + br_if 0, $pop89 # 0: down to label0 +# BB#20: # %if.end178 + i32.const $push51=, 64 + i32.sub $push52=, $pop51, $11 + i64.extend_u/i32 $push1=, $pop52 + i64.shr_u $push91=, $8, $pop1 + i64.shl $push90=, $8, $10 + i64.or $push92=, $pop91, $pop90 + i64.const $push93=, 68174490360335855 + i64.ne $push94=, $pop92, $pop93 + br_if 0, $pop94 # 0: down to label0 +# BB#21: # %if.end195 + i32.const $push95=, 0 + call exit@FUNCTION, $pop95 + unreachable +.LBB0_22: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden uc # @uc + .type uc,@object + .section .data.uc,"aw",@progbits + .globl uc +uc: + .int8 52 # 0x34 + .size uc, 1 + + .hidden us # @us + .type us,@object + .section .data.us,"aw",@progbits + .globl us + .p2align 1 +us: + .int16 62004 # 0xf234 + .size us, 2 + + .hidden ui # @ui + .type ui,@object + .section .data.ui,"aw",@progbits + .globl ui + .p2align 2 +ui: + .int32 62004 # 0xf234 + .size ui, 4 + + .hidden ul # @ul + .type ul,@object + .section .data.ul,"aw",@progbits + .globl ul + .p2align 2 +ul: + .int32 4063516280 # 0xf2345678 + .size ul, 4 + + .hidden ull # @ull + .type ull,@object + .section .data.ull,"aw",@progbits + .globl ull + .p2align 3 +ull: + .int64 1090791845765373680 # 0xf2345678abcdef0 + .size ull, 8 + + .hidden shift1 # @shift1 + .type shift1,@object + .section .data.shift1,"aw",@progbits + .globl shift1 + .p2align 2 +shift1: + .int32 4 # 0x4 + .size shift1, 4 + + .hidden shift2 # @shift2 + .type shift2,@object + .section .data.shift2,"aw",@progbits + .globl shift2 + .p2align 2 +shift2: + .int32 60 # 0x3c + .size shift2, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020508-2.c.s b/src/binaryen/test/torture-s/20020508-2.c.s new file mode 100644 index 0000000000..9558988e67 --- /dev/null +++ b/src/binaryen/test/torture-s/20020508-2.c.s @@ -0,0 +1,295 @@ + .text + .file "20020508-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i32 +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.load8_s $push125=, c($pop0) + tee_local $push124=, $0=, $pop125 + i32.const $push2=, 8 + i32.const $push123=, 0 + i32.load $push122=, shift1($pop123) + tee_local $push121=, $1=, $pop122 + i32.sub $push120=, $pop2, $pop121 + tee_local $push119=, $2=, $pop120 + i32.shl $push3=, $pop124, $pop119 + i32.shr_s $push1=, $0, $1 + i32.or $push4=, $pop3, $pop1 + i32.const $push118=, 835 + i32.ne $push5=, $pop4, $pop118 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 4 + i32.shr_s $push8=, $0, $pop6 + i32.const $push127=, 4 + i32.shl $push7=, $0, $pop127 + i32.or $push9=, $pop8, $pop7 + i32.const $push126=, 835 + i32.ne $push10=, $pop9, $pop126 + br_if 0, $pop10 # 0: down to label0 +# BB#2: # %if.end11 + i32.const $push12=, 0 + i32.load16_s $push132=, s($pop12) + tee_local $push131=, $3=, $pop132 + i32.shr_s $push14=, $pop131, $1 + i32.const $push11=, 16 + i32.sub $push130=, $pop11, $1 + tee_local $push129=, $4=, $pop130 + i32.shl $push13=, $3, $pop129 + i32.or $push15=, $pop14, $pop13 + i32.const $push128=, 19087651 + i32.ne $push16=, $pop15, $pop128 + br_if 0, $pop16 # 0: down to label0 +# BB#3: # %if.end21 + i32.const $push19=, 4 + i32.shr_s $push20=, $3, $pop19 + i32.const $push17=, 12 + i32.shl $push18=, $3, $pop17 + i32.or $push21=, $pop20, $pop18 + i32.const $push133=, 19087651 + i32.ne $push22=, $pop21, $pop133 + br_if 0, $pop22 # 0: down to label0 +# BB#4: # %if.end30 + i32.const $push24=, 0 + i32.load $push138=, i($pop24) + tee_local $push137=, $5=, $pop138 + i32.shr_s $push26=, $pop137, $1 + i32.const $push23=, 32 + i32.sub $push136=, $pop23, $1 + tee_local $push135=, $6=, $pop136 + i32.shl $push25=, $5, $pop135 + i32.or $push27=, $pop26, $pop25 + i32.const $push134=, 1073742115 + i32.ne $push28=, $pop27, $pop134 + br_if 0, $pop28 # 0: down to label0 +# BB#5: # %if.end38 + i32.const $push31=, 4 + i32.shr_s $push32=, $5, $pop31 + i32.const $push29=, 28 + i32.shl $push30=, $5, $pop29 + i32.or $push33=, $pop32, $pop30 + i32.const $push139=, 1073742115 + i32.ne $push34=, $pop33, $pop139 + br_if 0, $pop34 # 0: down to label0 +# BB#6: # %if.end45 + i32.const $push35=, 0 + i32.load $push142=, l($pop35) + tee_local $push141=, $7=, $pop142 + i32.shr_s $push37=, $pop141, $1 + i32.shl $push36=, $7, $6 + i32.or $push38=, $pop37, $pop36 + i32.const $push140=, -2128394905 + i32.ne $push39=, $pop38, $pop140 + br_if 0, $pop39 # 0: down to label0 +# BB#7: # %if.end53 + i32.const $push42=, 4 + i32.shr_s $push43=, $7, $pop42 + i32.const $push40=, 28 + i32.shl $push41=, $7, $pop40 + i32.or $push44=, $pop43, $pop41 + i32.const $push143=, -2128394905 + i32.ne $push45=, $pop44, $pop143 + br_if 0, $pop45 # 0: down to label0 +# BB#8: # %if.end60 + i32.const $push46=, 0 + i64.load $push150=, ll($pop46) + tee_local $push149=, $8=, $pop150 + i64.extend_u/i32 $push148=, $1 + tee_local $push147=, $9=, $pop148 + i64.shr_s $push47=, $pop149, $pop147 + i32.const $push48=, 64 + i32.sub $push49=, $pop48, $1 + i64.extend_u/i32 $push146=, $pop49 + tee_local $push145=, $10=, $pop146 + i64.shl $push50=, $8, $pop145 + i64.or $push51=, $pop47, $pop50 + i64.const $push144=, 5124095577148911 + i64.ne $push52=, $pop51, $pop144 + br_if 0, $pop52 # 0: down to label0 +# BB#9: # %if.end69 + i64.const $push55=, 4 + i64.shr_s $push56=, $8, $pop55 + i64.const $push53=, 60 + i64.shl $push54=, $8, $pop53 + i64.or $push57=, $pop56, $pop54 + i64.const $push151=, 5124095577148911 + i64.ne $push58=, $pop57, $pop151 + br_if 0, $pop58 # 0: down to label0 +# BB#10: # %if.end76 + i32.const $push61=, 64 + i32.const $push59=, 0 + i32.load $push158=, shift2($pop59) + tee_local $push157=, $13=, $pop158 + i32.sub $push62=, $pop61, $pop157 + i64.extend_u/i32 $push156=, $pop62 + tee_local $push155=, $12=, $pop156 + i64.shl $push63=, $8, $pop155 + i64.extend_u/i32 $push154=, $13 + tee_local $push153=, $11=, $pop154 + i64.shr_s $push60=, $8, $pop153 + i64.or $push64=, $pop63, $pop60 + i64.const $push152=, 1311768467750121216 + i64.ne $push65=, $pop64, $pop152 + br_if 0, $pop65 # 0: down to label0 +# BB#11: # %if.end86 + i64.const $push68=, 60 + i64.shr_s $push69=, $8, $pop68 + i64.const $push66=, 4 + i64.shl $push67=, $8, $pop66 + i64.or $push70=, $pop69, $pop67 + i64.const $push159=, 1311768467750121216 + i64.ne $push71=, $pop70, $pop159 + br_if 0, $pop71 # 0: down to label0 +# BB#12: # %if.end93 + i32.shr_s $push73=, $0, $2 + i32.shl $push72=, $0, $1 + i32.or $push74=, $pop73, $pop72 + i32.const $push75=, 835 + i32.ne $push76=, $pop74, $pop75 + br_if 0, $pop76 # 0: down to label0 +# BB#13: # %if.end112 + i32.shl $push78=, $3, $1 + i32.shr_s $push77=, $3, $4 + i32.or $push79=, $pop78, $pop77 + i32.const $push160=, 74561 + i32.ne $push80=, $pop79, $pop160 + br_if 0, $pop80 # 0: down to label0 +# BB#14: # %if.end122 + i32.const $push83=, 4 + i32.shl $push84=, $3, $pop83 + i32.const $push81=, 12 + i32.shr_s $push82=, $3, $pop81 + i32.or $push85=, $pop84, $pop82 + i32.const $push161=, 74561 + i32.ne $push86=, $pop85, $pop161 + br_if 0, $pop86 # 0: down to label0 +# BB#15: # %if.end131 + i32.shl $push88=, $5, $1 + i32.shr_s $push87=, $5, $6 + i32.or $push89=, $pop88, $pop87 + i32.const $push162=, 74560 + i32.ne $push90=, $pop89, $pop162 + br_if 0, $pop90 # 0: down to label0 +# BB#16: # %if.end139 + i32.const $push93=, 4 + i32.shl $push94=, $5, $pop93 + i32.const $push91=, 28 + i32.shr_s $push92=, $5, $pop91 + i32.or $push95=, $pop94, $pop92 + i32.const $push163=, 74560 + i32.ne $push96=, $pop95, $pop163 + br_if 0, $pop96 # 0: down to label0 +# BB#17: # %if.end146 + i32.shl $push98=, $7, $1 + i32.shr_s $push97=, $7, $6 + i32.or $push99=, $pop98, $pop97 + i32.const $push164=, 591751041 + i32.ne $push100=, $pop99, $pop164 + br_if 0, $pop100 # 0: down to label0 +# BB#18: # %if.end154 + i32.const $push103=, 4 + i32.shl $push104=, $7, $pop103 + i32.const $push101=, 28 + i32.shr_s $push102=, $7, $pop101 + i32.or $push105=, $pop104, $pop102 + i32.const $push165=, 591751041 + i32.ne $push106=, $pop105, $pop165 + br_if 0, $pop106 # 0: down to label0 +# BB#19: # %if.end161 + i64.shl $push108=, $8, $9 + i64.shr_s $push107=, $8, $10 + i64.or $push109=, $pop108, $pop107 + i64.const $push110=, 1311768467750121216 + i64.ne $push111=, $pop109, $pop110 + br_if 0, $pop111 # 0: down to label0 +# BB#20: # %if.end178 + i64.shr_s $push113=, $8, $12 + i64.shl $push112=, $8, $11 + i64.or $push114=, $pop113, $pop112 + i64.const $push115=, 5124095577148911 + i64.ne $push116=, $pop114, $pop115 + br_if 0, $pop116 # 0: down to label0 +# BB#21: # %if.end195 + i32.const $push117=, 0 + call exit@FUNCTION, $pop117 + unreachable +.LBB0_22: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden c # @c + .type c,@object + .section .data.c,"aw",@progbits + .globl c +c: + .int8 52 # 0x34 + .size c, 1 + + .hidden s # @s + .type s,@object + .section .data.s,"aw",@progbits + .globl s + .p2align 1 +s: + .int16 4660 # 0x1234 + .size s, 2 + + .hidden i # @i + .type i,@object + .section .data.i,"aw",@progbits + .globl i + .p2align 2 +i: + .int32 4660 # 0x1234 + .size i, 4 + + .hidden l # @l + .type l,@object + .section .data.l,"aw",@progbits + .globl l + .p2align 2 +l: + .int32 305419896 # 0x12345678 + .size l, 4 + + .hidden ll # @ll + .type ll,@object + .section .data.ll,"aw",@progbits + .globl ll + .p2align 3 +ll: + .int64 81985529234382576 # 0x12345678abcdef0 + .size ll, 8 + + .hidden shift1 # @shift1 + .type shift1,@object + .section .data.shift1,"aw",@progbits + .globl shift1 + .p2align 2 +shift1: + .int32 4 # 0x4 + .size shift1, 4 + + .hidden shift2 # @shift2 + .type shift2,@object + .section .data.shift2,"aw",@progbits + .globl shift2 + .p2align 2 +shift2: + .int32 60 # 0x3c + .size shift2, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020508-3.c.s b/src/binaryen/test/torture-s/20020508-3.c.s new file mode 100644 index 0000000000..267828845f --- /dev/null +++ b/src/binaryen/test/torture-s/20020508-3.c.s @@ -0,0 +1,295 @@ + .text + .file "20020508-3.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i32 +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.load8_s $push125=, c($pop0) + tee_local $push124=, $0=, $pop125 + i32.const $push2=, 8 + i32.const $push123=, 0 + i32.load $push122=, shift1($pop123) + tee_local $push121=, $1=, $pop122 + i32.sub $push120=, $pop2, $pop121 + tee_local $push119=, $2=, $pop120 + i32.shl $push3=, $pop124, $pop119 + i32.shr_s $push1=, $0, $1 + i32.or $push4=, $pop3, $pop1 + i32.const $push118=, 835 + i32.ne $push5=, $pop4, $pop118 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 4 + i32.shr_s $push8=, $0, $pop6 + i32.const $push127=, 4 + i32.shl $push7=, $0, $pop127 + i32.or $push9=, $pop8, $pop7 + i32.const $push126=, 835 + i32.ne $push10=, $pop9, $pop126 + br_if 0, $pop10 # 0: down to label0 +# BB#2: # %if.end11 + i32.const $push12=, 0 + i32.load16_s $push132=, s($pop12) + tee_local $push131=, $3=, $pop132 + i32.shr_s $push14=, $pop131, $1 + i32.const $push11=, 16 + i32.sub $push130=, $pop11, $1 + tee_local $push129=, $4=, $pop130 + i32.shl $push13=, $3, $pop129 + i32.or $push15=, $pop14, $pop13 + i32.const $push128=, -221 + i32.ne $push16=, $pop15, $pop128 + br_if 0, $pop16 # 0: down to label0 +# BB#3: # %if.end21 + i32.const $push19=, 4 + i32.shr_s $push20=, $3, $pop19 + i32.const $push17=, 12 + i32.shl $push18=, $3, $pop17 + i32.or $push21=, $pop20, $pop18 + i32.const $push133=, -221 + i32.ne $push22=, $pop21, $pop133 + br_if 0, $pop22 # 0: down to label0 +# BB#4: # %if.end30 + i32.const $push24=, 0 + i32.load $push138=, i($pop24) + tee_local $push137=, $5=, $pop138 + i32.shr_s $push26=, $pop137, $1 + i32.const $push23=, 32 + i32.sub $push136=, $pop23, $1 + tee_local $push135=, $6=, $pop136 + i32.shl $push25=, $5, $pop135 + i32.or $push27=, $pop26, $pop25 + i32.const $push134=, 1073745699 + i32.ne $push28=, $pop27, $pop134 + br_if 0, $pop28 # 0: down to label0 +# BB#5: # %if.end38 + i32.const $push31=, 4 + i32.shr_s $push32=, $5, $pop31 + i32.const $push29=, 28 + i32.shl $push30=, $5, $pop29 + i32.or $push33=, $pop32, $pop30 + i32.const $push139=, 1073745699 + i32.ne $push34=, $pop33, $pop139 + br_if 0, $pop34 # 0: down to label0 +# BB#6: # %if.end45 + i32.const $push35=, 0 + i32.load $push142=, l($pop35) + tee_local $push141=, $7=, $pop142 + i32.shr_s $push37=, $pop141, $1 + i32.shl $push36=, $7, $6 + i32.or $push38=, $pop37, $pop36 + i32.const $push140=, -14465689 + i32.ne $push39=, $pop38, $pop140 + br_if 0, $pop39 # 0: down to label0 +# BB#7: # %if.end53 + i32.const $push42=, 4 + i32.shr_s $push43=, $7, $pop42 + i32.const $push40=, 28 + i32.shl $push41=, $7, $pop40 + i32.or $push44=, $pop43, $pop41 + i32.const $push143=, -14465689 + i32.ne $push45=, $pop44, $pop143 + br_if 0, $pop45 # 0: down to label0 +# BB#8: # %if.end60 + i32.const $push46=, 0 + i64.load $push150=, ll($pop46) + tee_local $push149=, $8=, $pop150 + i64.extend_u/i32 $push148=, $1 + tee_local $push147=, $9=, $pop148 + i64.shr_s $push47=, $pop149, $pop147 + i32.const $push48=, 64 + i32.sub $push49=, $pop48, $1 + i64.extend_u/i32 $push146=, $pop49 + tee_local $push145=, $10=, $pop146 + i64.shl $push50=, $8, $pop145 + i64.or $push51=, $pop47, $pop50 + i64.const $push144=, 68174490360335855 + i64.ne $push52=, $pop51, $pop144 + br_if 0, $pop52 # 0: down to label0 +# BB#9: # %if.end69 + i64.const $push55=, 4 + i64.shr_s $push56=, $8, $pop55 + i64.const $push53=, 60 + i64.shl $push54=, $8, $pop53 + i64.or $push57=, $pop56, $pop54 + i64.const $push151=, 68174490360335855 + i64.ne $push58=, $pop57, $pop151 + br_if 0, $pop58 # 0: down to label0 +# BB#10: # %if.end76 + i32.const $push61=, 64 + i32.const $push59=, 0 + i32.load $push158=, shift2($pop59) + tee_local $push157=, $13=, $pop158 + i32.sub $push62=, $pop61, $pop157 + i64.extend_u/i32 $push156=, $pop62 + tee_local $push155=, $12=, $pop156 + i64.shl $push63=, $8, $pop155 + i64.extend_u/i32 $push154=, $13 + tee_local $push153=, $11=, $pop154 + i64.shr_s $push60=, $8, $pop153 + i64.or $push64=, $pop63, $pop60 + i64.const $push152=, -994074541463572736 + i64.ne $push65=, $pop64, $pop152 + br_if 0, $pop65 # 0: down to label0 +# BB#11: # %if.end86 + i64.const $push68=, 60 + i64.shr_s $push69=, $8, $pop68 + i64.const $push66=, 4 + i64.shl $push67=, $8, $pop66 + i64.or $push70=, $pop69, $pop67 + i64.const $push159=, -994074541463572736 + i64.ne $push71=, $pop70, $pop159 + br_if 0, $pop71 # 0: down to label0 +# BB#12: # %if.end93 + i32.shr_s $push73=, $0, $2 + i32.shl $push72=, $0, $1 + i32.or $push74=, $pop73, $pop72 + i32.const $push75=, 835 + i32.ne $push76=, $pop74, $pop75 + br_if 0, $pop76 # 0: down to label0 +# BB#13: # %if.end112 + i32.shl $push78=, $3, $1 + i32.shr_s $push77=, $3, $4 + i32.or $push79=, $pop78, $pop77 + i32.const $push160=, -1 + i32.ne $push80=, $pop79, $pop160 + br_if 0, $pop80 # 0: down to label0 +# BB#14: # %if.end122 + i32.const $push83=, 4 + i32.shl $push84=, $3, $pop83 + i32.const $push81=, 12 + i32.shr_s $push82=, $3, $pop81 + i32.or $push85=, $pop84, $pop82 + i32.const $push161=, -1 + i32.ne $push86=, $pop85, $pop161 + br_if 0, $pop86 # 0: down to label0 +# BB#15: # %if.end131 + i32.shl $push88=, $5, $1 + i32.shr_s $push87=, $5, $6 + i32.or $push89=, $pop88, $pop87 + i32.const $push162=, 992064 + i32.ne $push90=, $pop89, $pop162 + br_if 0, $pop90 # 0: down to label0 +# BB#16: # %if.end139 + i32.const $push93=, 4 + i32.shl $push94=, $5, $pop93 + i32.const $push91=, 28 + i32.shr_s $push92=, $5, $pop91 + i32.or $push95=, $pop94, $pop92 + i32.const $push163=, 992064 + i32.ne $push96=, $pop95, $pop163 + br_if 0, $pop96 # 0: down to label0 +# BB#17: # %if.end146 + i32.shl $push98=, $7, $1 + i32.shr_s $push97=, $7, $6 + i32.or $push99=, $pop98, $pop97 + i32.const $push164=, -1 + i32.ne $push100=, $pop99, $pop164 + br_if 0, $pop100 # 0: down to label0 +# BB#18: # %if.end154 + i32.const $push103=, 4 + i32.shl $push104=, $7, $pop103 + i32.const $push101=, 28 + i32.shr_s $push102=, $7, $pop101 + i32.or $push105=, $pop104, $pop102 + i32.const $push165=, -1 + i32.ne $push106=, $pop105, $pop165 + br_if 0, $pop106 # 0: down to label0 +# BB#19: # %if.end161 + i64.shl $push108=, $8, $9 + i64.shr_s $push107=, $8, $10 + i64.or $push109=, $pop108, $pop107 + i64.const $push110=, -994074541463572736 + i64.ne $push111=, $pop109, $pop110 + br_if 0, $pop111 # 0: down to label0 +# BB#20: # %if.end178 + i64.shr_s $push113=, $8, $12 + i64.shl $push112=, $8, $11 + i64.or $push114=, $pop113, $pop112 + i64.const $push115=, 68174490360335855 + i64.ne $push116=, $pop114, $pop115 + br_if 0, $pop116 # 0: down to label0 +# BB#21: # %if.end195 + i32.const $push117=, 0 + call exit@FUNCTION, $pop117 + unreachable +.LBB0_22: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden c # @c + .type c,@object + .section .data.c,"aw",@progbits + .globl c +c: + .int8 52 # 0x34 + .size c, 1 + + .hidden s # @s + .type s,@object + .section .data.s,"aw",@progbits + .globl s + .p2align 1 +s: + .int16 62004 # 0xf234 + .size s, 2 + + .hidden i # @i + .type i,@object + .section .data.i,"aw",@progbits + .globl i + .p2align 2 +i: + .int32 62004 # 0xf234 + .size i, 4 + + .hidden l # @l + .type l,@object + .section .data.l,"aw",@progbits + .globl l + .p2align 2 +l: + .int32 4063516280 # 0xf2345678 + .size l, 4 + + .hidden ll # @ll + .type ll,@object + .section .data.ll,"aw",@progbits + .globl ll + .p2align 3 +ll: + .int64 1090791845765373680 # 0xf2345678abcdef0 + .size ll, 8 + + .hidden shift1 # @shift1 + .type shift1,@object + .section .data.shift1,"aw",@progbits + .globl shift1 + .p2align 2 +shift1: + .int32 4 # 0x4 + .size shift1, 4 + + .hidden shift2 # @shift2 + .type shift2,@object + .section .data.shift2,"aw",@progbits + .globl shift2 + .p2align 2 +shift2: + .int32 60 # 0x3c + .size shift2, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020510-1.c.s b/src/binaryen/test/torture-s/20020510-1.c.s new file mode 100644 index 0000000000..a93b3399ab --- /dev/null +++ b/src/binaryen/test/torture-s/20020510-1.c.s @@ -0,0 +1,154 @@ + .text + .file "20020510-1.c" + .section .text.testc,"ax",@progbits + .hidden testc # -- Begin function testc + .globl testc + .type testc,@function +testc: # @testc + .param i32, i32 +# BB#0: # %entry + block + block + block + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.const $push5=, 24 + i32.shr_s $push2=, $pop1, $pop5 + i32.const $push3=, 1 + i32.lt_s $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label2 +# BB#1: # %if.then + i32.eqz $push6=, $1 + br_if 1, $pop6 # 1: down to label1 + br 2 # 2: down to label0 +.LBB0_2: # %if.else + end_block # label2: + i32.eqz $push7=, $1 + br_if 1, $pop7 # 1: down to label0 +.LBB0_3: # %if.then5 + end_block # label1: + call abort@FUNCTION + unreachable +.LBB0_4: # %if.end9 + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size testc, .Lfunc_end0-testc + # -- End function + .section .text.tests,"ax",@progbits + .hidden tests # -- Begin function tests + .globl tests + .type tests,@function +tests: # @tests + .param i32, i32 +# BB#0: # %entry + block + block + block + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + i32.const $push5=, 16 + i32.shr_s $push2=, $pop1, $pop5 + i32.const $push3=, 1 + i32.lt_s $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label5 +# BB#1: # %if.then + i32.eqz $push6=, $1 + br_if 1, $pop6 # 1: down to label4 + br 2 # 2: down to label3 +.LBB1_2: # %if.else + end_block # label5: + i32.eqz $push7=, $1 + br_if 1, $pop7 # 1: down to label3 +.LBB1_3: # %if.then5 + end_block # label4: + call abort@FUNCTION + unreachable +.LBB1_4: # %if.end9 + end_block # label3: + # fallthrough-return + .endfunc +.Lfunc_end1: + .size tests, .Lfunc_end1-tests + # -- End function + .section .text.testi,"ax",@progbits + .hidden testi # -- Begin function testi + .globl testi + .type testi,@function +testi: # @testi + .param i32, i32 +# BB#0: # %entry + block + block + block + i32.const $push0=, 1 + i32.lt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label8 +# BB#1: # %if.then + i32.eqz $push2=, $1 + br_if 1, $pop2 # 1: down to label7 + br 2 # 2: down to label6 +.LBB2_2: # %if.else + end_block # label8: + i32.eqz $push3=, $1 + br_if 1, $pop3 # 1: down to label6 +.LBB2_3: # %if.then2 + end_block # label7: + call abort@FUNCTION + unreachable +.LBB2_4: # %if.end6 + end_block # label6: + # fallthrough-return + .endfunc +.Lfunc_end2: + .size testi, .Lfunc_end2-testi + # -- End function + .section .text.testl,"ax",@progbits + .hidden testl # -- Begin function testl + .globl testl + .type testl,@function +testl: # @testl + .param i32, i32 +# BB#0: # %entry + block + block + block + i32.const $push0=, 1 + i32.lt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label11 +# BB#1: # %if.then + i32.eqz $push2=, $1 + br_if 1, $pop2 # 1: down to label10 + br 2 # 2: down to label9 +.LBB3_2: # %if.else + end_block # label11: + i32.eqz $push3=, $1 + br_if 1, $pop3 # 1: down to label9 +.LBB3_3: # %if.then2 + end_block # label10: + call abort@FUNCTION + unreachable +.LBB3_4: # %if.end6 + end_block # label9: + # fallthrough-return + .endfunc +.Lfunc_end3: + .size testl, .Lfunc_end3-testl + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20020529-1.c.s b/src/binaryen/test/torture-s/20020529-1.c.s new file mode 100644 index 0000000000..3b65e0ebd2 --- /dev/null +++ b/src/binaryen/test/torture-s/20020529-1.c.s @@ -0,0 +1,224 @@ + .text + .file "20020529-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32, i32 + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push15=, 0 + i32.const $push14=, 0 + i32.load $push13=, f1.beenhere($pop14) + tee_local $push12=, $7=, $pop13 + i32.const $push11=, 1 + i32.add $push10=, $pop12, $pop11 + tee_local $push9=, $6=, $pop10 + i32.store f1.beenhere($pop15), $pop9 + block + block + block + i32.const $push8=, 1 + i32.gt_s $push0=, $7, $pop8 + br_if 0, $pop0 # 0: down to label2 +# BB#1: # %f1.exit.lr.ph.lr.ph + i32.const $push3=, 8 + i32.add $5=, $0, $pop3 +.LBB0_2: # %f1.exit + # =>This Inner Loop Header: Depth=1 + loop # label3: + copy_local $4=, $6 + i32.const $push16=, 1 + i32.eq $push1=, $7, $pop16 + br_if 2, $pop1 # 2: down to label1 +# BB#3: # %if.end + # in Loop: Header=BB0_2 Depth=1 + block + i32.eqz $push29=, $1 + br_if 0, $pop29 # 0: down to label4 +# BB#4: # %for.cond + # in Loop: Header=BB0_2 Depth=1 + i32.const $push21=, 0 + i32.const $push20=, 1 + i32.add $push19=, $4, $pop20 + tee_local $push18=, $6=, $pop19 + i32.store f1.beenhere($pop21), $pop18 + copy_local $7=, $4 + i32.const $push17=, 2 + i32.lt_s $push2=, $4, $pop17 + br_if 1, $pop2 # 1: up to label3 + br 2 # 2: down to label2 +.LBB0_5: # %if.end3 + # in Loop: Header=BB0_2 Depth=1 + end_block # label4: + i32.store16 0($5), $3 + i32.load $push4=, 0($0) + br_if 3, $pop4 # 3: down to label0 +# BB#6: # %if.end8 + # in Loop: Header=BB0_2 Depth=1 + br_if 3, $2 # 3: down to label0 +# BB#7: # %sw.epilog + # in Loop: Header=BB0_2 Depth=1 + i32.const $push28=, 0 + i32.const $push27=, 1 + i32.add $push26=, $4, $pop27 + tee_local $push25=, $6=, $pop26 + i32.store f1.beenhere($pop28), $pop25 + i32.const $push24=, 16 + i32.shl $push5=, $3, $pop24 + i32.const $push23=, 16 + i32.shr_s $3=, $pop5, $pop23 + copy_local $7=, $4 + i32.const $push22=, 1 + i32.le_s $push6=, $4, $pop22 + br_if 0, $pop6 # 0: up to label3 +.LBB0_8: # %if.then.i + end_loop + end_block # label2: + call abort@FUNCTION + unreachable +.LBB0_9: # %if.then + end_block # label1: + i32.const $push7=, 0 + return $pop7 +.LBB0_10: # %if.then7 + end_block # label0: + call f2@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push8=, 0 + i32.load $push7=, f1.beenhere($pop8) + tee_local $push6=, $1=, $pop7 + i32.const $push5=, 1 + i32.add $push1=, $pop6, $pop5 + i32.store f1.beenhere($pop0), $pop1 + block + i32.const $push2=, 2 + i32.ge_s $push3=, $1, $pop2 + br_if 0, $pop3 # 0: down to label5 +# BB#1: # %if.end + i32.const $push9=, 1 + i32.eq $push4=, $1, $pop9 + return $pop4 +.LBB1_2: # %if.then + end_block # label5: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size f1, .Lfunc_end1-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size f2, .Lfunc_end2-f2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push13=, 0 + i32.const $push11=, 0 + i32.load $push10=, __stack_pointer($pop11) + i32.const $push12=, 16 + i32.sub $push22=, $pop10, $pop12 + tee_local $push21=, $0=, $pop22 + i32.store __stack_pointer($pop13), $pop21 + i32.const $push0=, 0 + i32.const $push20=, 0 + i32.load $push19=, f1.beenhere($pop20) + tee_local $push18=, $1=, $pop19 + i32.const $push17=, 1 + i32.add $push1=, $pop18, $pop17 + i32.store f1.beenhere($pop0), $pop1 + i32.const $push16=, 0 + i32.store 0($0), $pop16 + i32.const $2=, 23 + i32.const $push15=, 23 + i32.store16 8($0), $pop15 + i32.store 4($0), $0 + block + i32.const $push14=, 1 + i32.gt_s $push2=, $1, $pop14 + br_if 0, $pop2 # 0: down to label6 +# BB#1: # %f1.exit.lr.ph.i.preheader + i32.const $push5=, 8 + i32.add $0=, $0, $pop5 +.LBB3_2: # %f1.exit.lr.ph.i + # =>This Inner Loop Header: Depth=1 + block + loop # label8: + i32.const $push23=, 1 + i32.eq $push3=, $1, $pop23 + br_if 1, $pop3 # 1: down to label7 +# BB#3: # %if.end8.i + # in Loop: Header=BB3_2 Depth=1 + i32.const $2=, 0 + i32.const $push30=, 0 + i32.const $push29=, 2 + i32.add $push4=, $1, $pop29 + i32.store f1.beenhere($pop30), $pop4 + i32.const $push28=, 0 + i32.store16 0($0), $pop28 + i32.const $push27=, 1 + i32.add $push26=, $1, $pop27 + tee_local $push25=, $1=, $pop26 + i32.const $push24=, 1 + i32.le_s $push6=, $pop25, $pop24 + br_if 0, $pop6 # 0: up to label8 + br 2 # 2: down to label6 +.LBB3_4: # %foo.exit + end_loop + end_block # label7: + i32.const $push7=, 65535 + i32.and $push8=, $2, $pop7 + br_if 0, $pop8 # 0: down to label6 +# BB#5: # %if.end + i32.const $push9=, 0 + call exit@FUNCTION, $pop9 + unreachable +.LBB3_6: # %if.then.i.i + end_block # label6: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .type f1.beenhere,@object # @f1.beenhere + .section .bss.f1.beenhere,"aw",@nobits + .p2align 2 +f1.beenhere: + .int32 0 # 0x0 + .size f1.beenhere, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020611-1.c.s b/src/binaryen/test/torture-s/20020611-1.c.s new file mode 100644 index 0000000000..8e7e6101ec --- /dev/null +++ b/src/binaryen/test/torture-s/20020611-1.c.s @@ -0,0 +1,86 @@ + .text + .file "20020611-1.c" + .section .text.x,"ax",@progbits + .hidden x # -- Begin function x + .globl x + .type x,@function +x: # @x + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, n($pop6) + i32.const $push2=, 31 + i32.lt_u $push5=, $pop1, $pop2 + tee_local $push4=, $0=, $pop5 + i32.store p($pop0), $pop4 + i32.const $push3=, 0 + i32.store k($pop3), $0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size x, .Lfunc_end0-x + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push5=, 0 + i32.load $push0=, n($pop5) + i32.const $push1=, 31 + i32.lt_u $push4=, $pop0, $pop1 + tee_local $push3=, $0=, $pop4 + i32.store p($pop6), $pop3 + i32.const $push2=, 0 + i32.store k($pop2), $0 + block + i32.eqz $push8=, $0 + br_if 0, $pop8 # 0: down to label0 +# BB#1: # %if.end + i32.const $push7=, 0 + call exit@FUNCTION, $pop7 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden n # @n + .type n,@object + .section .data.n,"aw",@progbits + .globl n + .p2align 2 +n: + .int32 30 # 0x1e + .size n, 4 + + .hidden p # @p + .type p,@object + .section .bss.p,"aw",@nobits + .globl p + .p2align 2 +p: + .int32 0 # 0x0 + .size p, 4 + + .hidden k # @k + .type k,@object + .section .bss.k,"aw",@nobits + .globl k + .p2align 2 +k: + .int32 0 # 0x0 + .size k, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020614-1.c.s b/src/binaryen/test/torture-s/20020614-1.c.s new file mode 100644 index 0000000000..079f3aa0ac --- /dev/null +++ b/src/binaryen/test/torture-s/20020614-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20020614-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020615-1.c.s b/src/binaryen/test/torture-s/20020615-1.c.s new file mode 100644 index 0000000000..49053f749c --- /dev/null +++ b/src/binaryen/test/torture-s/20020615-1.c.s @@ -0,0 +1,353 @@ + .text + .file "20020615-1.c" + .section .text.line_hints,"ax",@progbits + .hidden line_hints # -- Begin function line_hints + .globl line_hints + .type line_hints,@function +line_hints: # @line_hints + .param i32, i32, i32 + .result i32 + .local i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $8=, 0 + i32.const $push52=, 0 + i32.load $push6=, 4($2) + i32.load $push5=, 4($1) + i32.sub $push51=, $pop6, $pop5 + tee_local $push50=, $5=, $pop51 + i32.sub $push7=, $pop52, $pop50 + i32.load $push49=, 8($0) + tee_local $push48=, $4=, $pop49 + i32.select $push47=, $pop7, $5, $pop48 + tee_local $push46=, $6=, $pop47 + i32.const $push45=, 0 + i32.load $push3=, 0($2) + i32.load $push2=, 0($1) + i32.sub $push44=, $pop3, $pop2 + tee_local $push43=, $2=, $pop44 + i32.sub $push4=, $pop45, $pop43 + i32.load $push42=, 4($0) + tee_local $push41=, $3=, $pop42 + i32.select $push40=, $pop4, $2, $pop41 + tee_local $push39=, $7=, $pop40 + i32.load $push38=, 0($0) + tee_local $push37=, $1=, $pop38 + i32.select $push36=, $pop46, $pop39, $pop37 + tee_local $push35=, $2=, $pop36 + i32.const $push8=, 31 + i32.shr_s $push34=, $2, $pop8 + tee_local $push33=, $0=, $pop34 + i32.add $push9=, $pop35, $pop33 + i32.xor $5=, $pop9, $0 + i32.select $push32=, $7, $6, $1 + tee_local $push31=, $0=, $pop32 + i32.const $push30=, 31 + i32.shr_s $push29=, $0, $pop30 + tee_local $push28=, $6=, $pop29 + i32.add $push10=, $pop31, $pop28 + i32.xor $6=, $pop10, $6 + block + block + i32.eqz $push60=, $0 + br_if 0, $pop60 # 0: down to label1 +# BB#1: # %entry + i32.const $push53=, 4 + i32.shr_s $push1=, $6, $pop53 + i32.gt_s $push11=, $5, $pop1 + br_if 0, $pop11 # 0: down to label1 +# BB#2: # %if.then21 + i32.const $push16=, 2 + i32.const $push15=, 1 + i32.const $push13=, 0 + i32.gt_s $push14=, $0, $pop13 + i32.select $push55=, $pop16, $pop15, $pop14 + tee_local $push54=, $0=, $pop55 + i32.const $push17=, 3 + i32.xor $push18=, $pop54, $pop17 + i32.select $push12=, $4, $3, $1 + i32.select $8=, $pop18, $0, $pop12 + br 1 # 1: down to label0 +.LBB0_3: # %if.else + end_block # label1: + i32.eqz $push61=, $2 + br_if 0, $pop61 # 0: down to label0 +# BB#4: # %if.else + i32.const $push56=, 4 + i32.shr_s $push19=, $5, $pop56 + i32.gt_s $push20=, $6, $pop19 + br_if 0, $pop20 # 0: down to label0 +# BB#5: # %if.then31 + i32.const $push21=, 29 + i32.shr_u $push22=, $2, $pop21 + i32.const $push23=, 4 + i32.and $push24=, $pop22, $pop23 + i32.const $push59=, 4 + i32.add $push58=, $pop24, $pop59 + tee_local $push57=, $0=, $pop58 + i32.const $push25=, 12 + i32.xor $push26=, $pop57, $pop25 + i32.select $push0=, $3, $4, $1 + i32.select $push27=, $pop26, $0, $pop0 + return $pop27 +.LBB0_6: # %if.end40 + end_block # label0: + copy_local $push62=, $8 + # fallthrough-return: $pop62 + .endfunc +.Lfunc_end0: + .size line_hints, .Lfunc_end0-line_hints + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.const $push4=, 0 + i32.const $push85=, 0 + i32.load $push6=, main.gsf+8($pop85) + i32.const $push84=, 0 + i32.load $push5=, main.gsf($pop84) + i32.sub $push83=, $pop6, $pop5 + tee_local $push82=, $3=, $pop83 + i32.sub $push7=, $pop4, $pop82 + i32.const $push81=, 0 + i32.load $push80=, main.fh+4($pop81) + tee_local $push79=, $0=, $pop80 + i32.select $push78=, $pop7, $3, $pop79 + tee_local $push77=, $7=, $pop78 + i32.const $push76=, 0 + i32.const $push75=, 0 + i32.load $push9=, main.gsf+12($pop75) + i32.const $push74=, 0 + i32.load $push8=, main.gsf+4($pop74) + i32.sub $push73=, $pop9, $pop8 + tee_local $push72=, $3=, $pop73 + i32.sub $push10=, $pop76, $pop72 + i32.const $push71=, 0 + i32.load $push70=, main.fh+8($pop71) + tee_local $push69=, $1=, $pop70 + i32.select $push68=, $pop10, $3, $pop69 + tee_local $push67=, $8=, $pop68 + i32.const $push66=, 0 + i32.load $push65=, main.fh($pop66) + tee_local $push64=, $2=, $pop65 + i32.select $push63=, $pop77, $pop67, $pop64 + tee_local $push62=, $3=, $pop63 + i32.eqz $push165=, $pop62 + br_if 0, $pop165 # 0: down to label2 +# BB#1: # %entry + i32.select $push92=, $8, $7, $2 + tee_local $push91=, $7=, $pop92 + i32.const $push11=, 31 + i32.shr_s $push90=, $7, $pop11 + tee_local $push89=, $7=, $pop90 + i32.add $push12=, $pop91, $pop89 + i32.xor $push2=, $pop12, $7 + i32.const $push88=, 31 + i32.shr_s $push87=, $3, $pop88 + tee_local $push86=, $7=, $pop87 + i32.add $push13=, $3, $pop86 + i32.xor $push14=, $pop13, $7 + i32.const $push15=, 4 + i32.shr_s $push3=, $pop14, $pop15 + i32.gt_s $push16=, $pop2, $pop3 + br_if 0, $pop16 # 0: down to label2 +# BB#2: # %line_hints.exit + i32.const $push20=, 2 + i32.const $push19=, 1 + i32.const $push96=, 0 + i32.gt_s $push18=, $3, $pop96 + i32.select $push95=, $pop20, $pop19, $pop18 + tee_local $push94=, $3=, $pop95 + i32.const $push21=, 3 + i32.xor $push22=, $pop94, $pop21 + i32.select $push17=, $1, $0, $2 + i32.select $push23=, $pop22, $3, $pop17 + i32.const $push93=, 1 + i32.ne $push24=, $pop23, $pop93 + br_if 0, $pop24 # 0: down to label2 +# BB#3: # %lor.lhs.false + i32.const $push132=, 0 + i32.const $push131=, 0 + i32.load $push29=, main.gsf+28($pop131) + i32.const $push130=, 0 + i32.load $push28=, main.gsf+20($pop130) + i32.sub $push129=, $pop29, $pop28 + tee_local $push128=, $8=, $pop129 + i32.sub $push127=, $pop132, $pop128 + tee_local $push126=, $5=, $pop127 + i32.const $push125=, 0 + i32.load $push124=, main.fh+20($pop125) + tee_local $push123=, $10=, $pop124 + i32.select $push122=, $pop126, $8, $pop123 + tee_local $push121=, $3=, $pop122 + i32.const $push120=, 0 + i32.const $push119=, 0 + i32.load $push27=, main.gsf+24($pop119) + i32.const $push118=, 0 + i32.load $push26=, main.gsf+16($pop118) + i32.sub $push117=, $pop27, $pop26 + tee_local $push116=, $0=, $pop117 + i32.sub $push115=, $pop120, $pop116 + tee_local $push114=, $4=, $pop115 + i32.const $push113=, 0 + i32.load $push112=, main.fh+16($pop113) + tee_local $push111=, $9=, $pop112 + i32.select $push110=, $pop114, $0, $pop111 + tee_local $push109=, $6=, $pop110 + i32.const $push108=, 0 + i32.load $push107=, main.fh+12($pop108) + tee_local $push106=, $7=, $pop107 + i32.select $push105=, $pop121, $pop109, $pop106 + tee_local $push104=, $2=, $pop105 + i32.const $push30=, 31 + i32.shr_s $push103=, $2, $pop30 + tee_local $push102=, $1=, $pop103 + i32.add $push31=, $pop104, $pop102 + i32.xor $1=, $pop31, $1 + i32.select $push101=, $6, $3, $7 + tee_local $push100=, $3=, $pop101 + i32.const $push99=, 31 + i32.shr_s $push98=, $3, $pop99 + tee_local $push97=, $6=, $pop98 + i32.add $push32=, $pop100, $pop97 + i32.xor $6=, $pop32, $6 + block + i32.eqz $push166=, $3 + br_if 0, $pop166 # 0: down to label3 +# BB#4: # %lor.lhs.false + i32.const $push133=, 4 + i32.shr_s $push25=, $6, $pop133 + i32.le_s $push33=, $1, $pop25 + br_if 1, $pop33 # 1: down to label2 +.LBB1_5: # %if.else.i82 + end_block # label3: + i32.eqz $push167=, $2 + br_if 0, $pop167 # 0: down to label2 +# BB#6: # %if.else.i82 + i32.const $push134=, 4 + i32.shr_s $push34=, $1, $pop134 + i32.gt_s $push35=, $6, $pop34 + br_if 0, $pop35 # 0: down to label2 +# BB#7: # %line_hints.exit89 + i32.const $push36=, 29 + i32.shr_u $push37=, $2, $pop36 + i32.const $push138=, 4 + i32.and $push38=, $pop37, $pop138 + i32.const $push137=, 4 + i32.add $push136=, $pop38, $pop137 + tee_local $push135=, $3=, $pop136 + i32.const $push39=, 12 + i32.xor $push40=, $pop135, $pop39 + i32.select $push0=, $9, $10, $7 + i32.select $push41=, $pop40, $3, $pop0 + i32.const $push42=, 8 + i32.ne $push43=, $pop41, $pop42 + br_if 0, $pop43 # 0: down to label2 +# BB#8: # %lor.lhs.false3 + i32.const $push45=, 0 + i32.load $push159=, main.fh+32($pop45) + tee_local $push158=, $1=, $pop159 + i32.select $push157=, $5, $8, $pop158 + tee_local $push156=, $3=, $pop157 + i32.const $push155=, 0 + i32.load $push154=, main.fh+28($pop155) + tee_local $push153=, $6=, $pop154 + i32.select $push152=, $4, $0, $pop153 + tee_local $push151=, $0=, $pop152 + i32.const $push150=, 0 + i32.load $push149=, main.fh+24($pop150) + tee_local $push148=, $7=, $pop149 + i32.select $push147=, $pop156, $pop151, $pop148 + tee_local $push146=, $2=, $pop147 + i32.const $push46=, 31 + i32.shr_s $push145=, $2, $pop46 + tee_local $push144=, $8=, $pop145 + i32.add $push47=, $pop146, $pop144 + i32.xor $8=, $pop47, $8 + i32.select $push143=, $0, $3, $7 + tee_local $push142=, $3=, $pop143 + i32.const $push141=, 31 + i32.shr_s $push140=, $3, $pop141 + tee_local $push139=, $0=, $pop140 + i32.add $push48=, $pop142, $pop139 + i32.xor $0=, $pop48, $0 + block + i32.eqz $push168=, $3 + br_if 0, $pop168 # 0: down to label4 +# BB#9: # %lor.lhs.false3 + i32.const $push160=, 4 + i32.shr_s $push44=, $0, $pop160 + i32.le_s $push49=, $8, $pop44 + br_if 1, $pop49 # 1: down to label2 +.LBB1_10: # %if.else.i40 + end_block # label4: + i32.eqz $push169=, $2 + br_if 0, $pop169 # 0: down to label2 +# BB#11: # %if.else.i40 + i32.const $push51=, 4 + i32.shr_s $push50=, $8, $pop51 + i32.gt_s $push52=, $0, $pop50 + br_if 0, $pop52 # 0: down to label2 +# BB#12: # %line_hints.exit47 + i32.const $push53=, 29 + i32.shr_u $push54=, $2, $pop53 + i32.const $push55=, 4 + i32.and $push56=, $pop54, $pop55 + i32.const $push164=, 4 + i32.add $push163=, $pop56, $pop164 + tee_local $push162=, $3=, $pop163 + i32.const $push57=, 12 + i32.xor $push58=, $pop162, $pop57 + i32.select $push1=, $6, $1, $7 + i32.select $push59=, $pop58, $3, $pop1 + i32.const $push161=, 4 + i32.ne $push60=, $pop59, $pop161 + br_if 0, $pop60 # 0: down to label2 +# BB#13: # %if.end + i32.const $push61=, 0 + call exit@FUNCTION, $pop61 + unreachable +.LBB1_14: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type main.fh,@object # @main.fh + .section .data.main.fh,"aw",@progbits + .p2align 4 +main.fh: + .int32 0 # 0x0 + .int32 1 # 0x1 + .int32 0 # 0x0 + .int32 0 # 0x0 + .int32 0 # 0x0 + .int32 1 # 0x1 + .skip 12 + .size main.fh, 36 + + .type main.gsf,@object # @main.gsf + .section .data.main.gsf,"aw",@progbits + .p2align 4 +main.gsf: + .int32 196608 # 0x30000 + .int32 80216 # 0x13958 + .int32 196608 # 0x30000 + .int32 98697 # 0x18189 + .int32 80216 # 0x13958 + .int32 196608 # 0x30000 + .int32 98697 # 0x18189 + .int32 196608 # 0x30000 + .size main.gsf, 32 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020619-1.c.s b/src/binaryen/test/torture-s/20020619-1.c.s new file mode 100644 index 0000000000..a33ddfb5ca --- /dev/null +++ b/src/binaryen/test/torture-s/20020619-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20020619-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20020716-1.c.s b/src/binaryen/test/torture-s/20020716-1.c.s new file mode 100644 index 0000000000..4d9bb8bc8c --- /dev/null +++ b/src/binaryen/test/torture-s/20020716-1.c.s @@ -0,0 +1,49 @@ + .text + .file "20020716-1.c" + .section .text.sub1,"ax",@progbits + .hidden sub1 # -- Begin function sub1 + .globl sub1 + .type sub1,@function +sub1: # @sub1 + .param i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size sub1, .Lfunc_end0-sub1 + # -- End function + .section .text.testcond,"ax",@progbits + .hidden testcond # -- Begin function testcond + .globl testcond + .type testcond,@function +testcond: # @testcond + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 5046272 + i32.select $push2=, $pop1, $pop0, $0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size testcond, .Lfunc_end1-testcond + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020720-1.c.s b/src/binaryen/test/torture-s/20020720-1.c.s new file mode 100644 index 0000000000..f53101bb42 --- /dev/null +++ b/src/binaryen/test/torture-s/20020720-1.c.s @@ -0,0 +1,29 @@ + .text + .file "20020720-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param f64 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20020805-1.c.s b/src/binaryen/test/torture-s/20020805-1.c.s new file mode 100644 index 0000000000..e7486ac8aa --- /dev/null +++ b/src/binaryen/test/torture-s/20020805-1.c.s @@ -0,0 +1,62 @@ + .text + .file "20020805-1.c" + .section .text.check,"ax",@progbits + .hidden check # -- Begin function check + .globl check + .type check,@function +check: # @check + .param i32 +# BB#0: # %entry + block + i32.const $push0=, -1 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size check, .Lfunc_end0-check + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push2=, 2 + i32.const $push0=, 0 + i32.load $push10=, n($pop0) + tee_local $push9=, $0=, $pop10 + i32.sub $push3=, $pop2, $pop9 + i32.const $push8=, 0 + i32.sub $push1=, $pop8, $0 + i32.or $push4=, $pop3, $pop1 + i32.const $push5=, 1 + i32.or $push6=, $pop4, $pop5 + call check@FUNCTION, $pop6 + i32.const $push7=, 0 + call exit@FUNCTION, $pop7 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden n # @n + .type n,@object + .section .data.n,"aw",@progbits + .globl n + .p2align 2 +n: + .int32 1 # 0x1 + .size n, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020810-1.c.s b/src/binaryen/test/torture-s/20020810-1.c.s new file mode 100644 index 0000000000..05c5b20c61 --- /dev/null +++ b/src/binaryen/test/torture-s/20020810-1.c.s @@ -0,0 +1,95 @@ + .text + .file "20020810-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 +# BB#0: # %entry + block + i32.load $push1=, 0($0) + i32.const $push6=, 0 + i32.load $push0=, R($pop6) + i32.ne $push2=, $pop1, $pop0 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load $push4=, 4($0) + i32.const $push7=, 0 + i32.load $push3=, R+4($pop7) + i32.ne $push5=, $pop4, $pop3 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end + return +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, R($pop0) + i64.store 0($0):p2align=2, $pop1 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size g, .Lfunc_end1-g + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64 +# BB#0: # %f.exit + block + i32.const $push12=, 0 + i32.load $push2=, R($pop12) + i32.const $push11=, 0 + i64.load $push10=, R($pop11) + tee_local $push9=, $0=, $pop10 + i32.wrap/i64 $push3=, $pop9 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label1 +# BB#1: # %f.exit + i32.const $push13=, 0 + i32.load $push0=, R+4($pop13) + i64.const $push5=, 32 + i64.shr_u $push6=, $0, $pop5 + i32.wrap/i64 $push1=, $pop6 + i32.ne $push7=, $pop0, $pop1 + br_if 0, $pop7 # 0: down to label1 +# BB#2: # %if.end + i32.const $push8=, 0 + return $pop8 +.LBB2_3: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden R # @R + .type R,@object + .section .data.R,"aw",@progbits + .globl R + .p2align 3 +R: + .int32 100 # 0x64 + .int32 200 # 0xc8 + .size R, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20020819-1.c.s b/src/binaryen/test/torture-s/20020819-1.c.s new file mode 100644 index 0000000000..6622b19db0 --- /dev/null +++ b/src/binaryen/test/torture-s/20020819-1.c.s @@ -0,0 +1,32 @@ + .text + .file "20020819-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20020904-1.c.s b/src/binaryen/test/torture-s/20020904-1.c.s new file mode 100644 index 0000000000..95ab8fe4a2 --- /dev/null +++ b/src/binaryen/test/torture-s/20020904-1.c.s @@ -0,0 +1,32 @@ + .text + .file "20020904-1.c" + .section .text.fun,"ax",@progbits + .hidden fun # -- Begin function fun + .globl fun + .type fun,@function +fun: # @fun + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 255 + i32.div_u $push1=, $pop0, $0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size fun, .Lfunc_end0-fun + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20020911-1.c.s b/src/binaryen/test/torture-s/20020911-1.c.s new file mode 100644 index 0000000000..19b09a6dba --- /dev/null +++ b/src/binaryen/test/torture-s/20020911-1.c.s @@ -0,0 +1,38 @@ + .text + .file "20020911-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load16_s $push0=, c($pop3) + i32.const $push2=, 0 + i32.ge_s $push1=, $pop0, $pop2 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden c # @c + .type c,@object + .section .data.c,"aw",@progbits + .globl c + .p2align 1 +c: + .int16 32768 # 0x8000 + .size c, 2 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20020916-1.c.s b/src/binaryen/test/torture-s/20020916-1.c.s new file mode 100644 index 0000000000..dcb1e5400d --- /dev/null +++ b/src/binaryen/test/torture-s/20020916-1.c.s @@ -0,0 +1,32 @@ + .text + .file "20020916-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.ne $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20020920-1.c.s b/src/binaryen/test/torture-s/20020920-1.c.s new file mode 100644 index 0000000000..6aec7b5250 --- /dev/null +++ b/src/binaryen/test/torture-s/20020920-1.c.s @@ -0,0 +1,35 @@ + .text + .file "20020920-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 +# BB#0: # %entry + i64.const $push0=, 4294967296 + i64.store 4($0):p2align=2, $pop0 + i32.const $push1=, 2 + i32.store 0($0), $pop1 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20021010-1.c.s b/src/binaryen/test/torture-s/20021010-1.c.s new file mode 100644 index 0000000000..08d1f8b83b --- /dev/null +++ b/src/binaryen/test/torture-s/20021010-1.c.s @@ -0,0 +1,32 @@ + .text + .file "20021010-1.c" + .section .text.sub,"ax",@progbits + .hidden sub # -- Begin function sub + .globl sub + .type sub,@function +sub: # @sub + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size sub, .Lfunc_end0-sub + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20021010-2.c.s b/src/binaryen/test/torture-s/20021010-2.c.s new file mode 100644 index 0000000000..505bcbc369 --- /dev/null +++ b/src/binaryen/test/torture-s/20021010-2.c.s @@ -0,0 +1,90 @@ + .text + .file "20021010-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + block + i32.const $push19=, 0 + i32.load16_s $push18=, global_bounds+2($pop19) + tee_local $push17=, $0=, $pop18 + i32.const $push16=, 0 + i32.load16_s $push15=, global_saveRect+2($pop16) + tee_local $push14=, $1=, $pop15 + i32.gt_s $push2=, $1, $0 + i32.select $push3=, $pop17, $pop14, $pop2 + i32.const $push13=, 0 + i32.load16_s $push12=, global_bounds($pop13) + tee_local $push11=, $0=, $pop12 + i32.const $push10=, 0 + i32.load16_s $push9=, global_saveRect($pop10) + tee_local $push8=, $1=, $pop9 + i32.lt_s $push0=, $1, $0 + i32.select $push1=, $pop11, $pop8, $pop0 + i32.sub $push4=, $pop3, $pop1 + i32.const $push7=, 0 + i32.load $push5=, expectedwidth($pop7) + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %if.end26 + i32.const $push20=, 0 + call exit@FUNCTION, $pop20 + unreachable +.LBB0_2: # %if.then25 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden expectedwidth # @expectedwidth + .type expectedwidth,@object + .section .data.expectedwidth,"aw",@progbits + .globl expectedwidth + .p2align 2 +expectedwidth: + .int32 50 # 0x32 + .size expectedwidth, 4 + + .hidden global_vramPtr # @global_vramPtr + .type global_vramPtr,@object + .section .data.global_vramPtr,"aw",@progbits + .globl global_vramPtr + .p2align 2 +global_vramPtr: + .int32 40960 + .size global_vramPtr, 4 + + .hidden global_bounds # @global_bounds + .type global_bounds,@object + .section .data.global_bounds,"aw",@progbits + .globl global_bounds + .p2align 1 +global_bounds: + .int16 100 # 0x64 + .int16 150 # 0x96 + .int16 100 # 0x64 + .int16 150 # 0x96 + .size global_bounds, 8 + + .hidden global_saveRect # @global_saveRect + .type global_saveRect,@object + .section .data.global_saveRect,"aw",@progbits + .globl global_saveRect + .p2align 1 +global_saveRect: + .int16 75 # 0x4b + .int16 175 # 0xaf + .int16 75 # 0x4b + .int16 175 # 0xaf + .size global_saveRect, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20021011-1.c.s b/src/binaryen/test/torture-s/20021011-1.c.s new file mode 100644 index 0000000000..43a39b0755 --- /dev/null +++ b/src/binaryen/test/torture-s/20021011-1.c.s @@ -0,0 +1,245 @@ + .text + .file "20021011-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i64 +# BB#0: # %entry + i32.const $push44=, 0 + i32.const $push43=, 0 + i32.load8_u $push42=, .L.str+8($pop43) + tee_local $push41=, $0=, $pop42 + i32.store8 buf+8($pop44), $pop41 + i32.const $push40=, 0 + i32.const $push39=, 0 + i64.load $push38=, .L.str($pop39):p2align=0 + tee_local $push37=, $1=, $pop38 + i64.store buf($pop40), $pop37 + block + i32.const $push36=, buf + i32.const $push35=, .L.str + i32.call $push0=, strcmp@FUNCTION, $pop36, $pop35 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push48=, 0 + i32.store8 buf+8($pop48), $0 + i32.const $push47=, 0 + i64.store buf($pop47), $1 + i32.const $push46=, buf + i32.const $push45=, .L.str + i32.call $push1=, strcmp@FUNCTION, $pop46, $pop45 + br_if 0, $pop1 # 0: down to label0 +# BB#2: # %for.cond + i32.const $push57=, 0 + i32.const $push56=, 0 + i32.load8_u $push55=, .L.str+8($pop56) + tee_local $push54=, $0=, $pop55 + i32.store8 buf+9($pop57), $pop54 + i32.const $push53=, 0 + i32.const $push52=, 0 + i64.load $push51=, .L.str($pop52):p2align=0 + tee_local $push50=, $1=, $pop51 + i64.store buf+1($pop53):p2align=0, $pop50 + i32.const $push2=, buf+1 + i32.const $push49=, .L.str + i32.call $push3=, strcmp@FUNCTION, $pop2, $pop49 + br_if 0, $pop3 # 0: down to label0 +# BB#3: # %for.cond.1 + i32.const $push60=, 0 + i32.store8 buf+10($pop60), $0 + i32.const $push59=, 0 + i64.store buf+2($pop59):p2align=1, $1 + i32.const $push4=, buf+2 + i32.const $push58=, .L.str + i32.call $push5=, strcmp@FUNCTION, $pop4, $pop58 + br_if 0, $pop5 # 0: down to label0 +# BB#4: # %for.cond.2 + i32.const $push69=, 0 + i32.const $push68=, 0 + i32.load8_u $push67=, .L.str+8($pop68) + tee_local $push66=, $0=, $pop67 + i32.store8 buf+11($pop69), $pop66 + i32.const $push65=, 0 + i32.const $push64=, 0 + i64.load $push63=, .L.str($pop64):p2align=0 + tee_local $push62=, $1=, $pop63 + i64.store buf+3($pop65):p2align=0, $pop62 + i32.const $push6=, buf+3 + i32.const $push61=, .L.str + i32.call $push7=, strcmp@FUNCTION, $pop6, $pop61 + br_if 0, $pop7 # 0: down to label0 +# BB#5: # %for.cond.3 + i32.const $push72=, 0 + i32.store8 buf+12($pop72), $0 + i32.const $push71=, 0 + i64.store buf+4($pop71):p2align=2, $1 + i32.const $push8=, buf+4 + i32.const $push70=, .L.str + i32.call $push9=, strcmp@FUNCTION, $pop8, $pop70 + br_if 0, $pop9 # 0: down to label0 +# BB#6: # %for.cond.4 + i32.const $push81=, 0 + i32.const $push80=, 0 + i32.load8_u $push79=, .L.str+8($pop80) + tee_local $push78=, $0=, $pop79 + i32.store8 buf+13($pop81), $pop78 + i32.const $push77=, 0 + i32.const $push76=, 0 + i64.load $push75=, .L.str($pop76):p2align=0 + tee_local $push74=, $1=, $pop75 + i64.store buf+5($pop77):p2align=0, $pop74 + i32.const $push10=, buf+5 + i32.const $push73=, .L.str + i32.call $push11=, strcmp@FUNCTION, $pop10, $pop73 + br_if 0, $pop11 # 0: down to label0 +# BB#7: # %for.cond.5 + i32.const $push84=, 0 + i32.store8 buf+14($pop84), $0 + i32.const $push83=, 0 + i64.store buf+6($pop83):p2align=1, $1 + i32.const $push12=, buf+6 + i32.const $push82=, .L.str + i32.call $push13=, strcmp@FUNCTION, $pop12, $pop82 + br_if 0, $pop13 # 0: down to label0 +# BB#8: # %for.cond.6 + i32.const $push93=, 0 + i32.const $push92=, 0 + i32.load8_u $push91=, .L.str+8($pop92) + tee_local $push90=, $0=, $pop91 + i32.store8 buf+15($pop93), $pop90 + i32.const $push89=, 0 + i32.const $push88=, 0 + i64.load $push87=, .L.str($pop88):p2align=0 + tee_local $push86=, $1=, $pop87 + i64.store buf+7($pop89):p2align=0, $pop86 + i32.const $push14=, buf+7 + i32.const $push85=, .L.str + i32.call $push15=, strcmp@FUNCTION, $pop14, $pop85 + br_if 0, $pop15 # 0: down to label0 +# BB#9: # %for.cond.7 + i32.const $push96=, 0 + i32.store8 buf+16($pop96), $0 + i32.const $push95=, 0 + i64.store buf+8($pop95), $1 + i32.const $push16=, buf+8 + i32.const $push94=, .L.str + i32.call $push17=, strcmp@FUNCTION, $pop16, $pop94 + br_if 0, $pop17 # 0: down to label0 +# BB#10: # %for.cond.8 + i32.const $push105=, 0 + i32.const $push104=, 0 + i32.load8_u $push103=, .L.str+8($pop104) + tee_local $push102=, $0=, $pop103 + i32.store8 buf+17($pop105), $pop102 + i32.const $push101=, 0 + i32.const $push100=, 0 + i64.load $push99=, .L.str($pop100):p2align=0 + tee_local $push98=, $1=, $pop99 + i64.store buf+9($pop101):p2align=0, $pop98 + i32.const $push18=, buf+9 + i32.const $push97=, .L.str + i32.call $push19=, strcmp@FUNCTION, $pop18, $pop97 + br_if 0, $pop19 # 0: down to label0 +# BB#11: # %for.cond.9 + i32.const $push108=, 0 + i32.store8 buf+18($pop108), $0 + i32.const $push107=, 0 + i64.store buf+10($pop107):p2align=1, $1 + i32.const $push20=, buf+10 + i32.const $push106=, .L.str + i32.call $push21=, strcmp@FUNCTION, $pop20, $pop106 + br_if 0, $pop21 # 0: down to label0 +# BB#12: # %for.cond.10 + i32.const $push117=, 0 + i32.const $push116=, 0 + i32.load8_u $push115=, .L.str+8($pop116) + tee_local $push114=, $0=, $pop115 + i32.store8 buf+19($pop117), $pop114 + i32.const $push113=, 0 + i32.const $push112=, 0 + i64.load $push111=, .L.str($pop112):p2align=0 + tee_local $push110=, $1=, $pop111 + i64.store buf+11($pop113):p2align=0, $pop110 + i32.const $push22=, buf+11 + i32.const $push109=, .L.str + i32.call $push23=, strcmp@FUNCTION, $pop22, $pop109 + br_if 0, $pop23 # 0: down to label0 +# BB#13: # %for.cond.11 + i32.const $push120=, 0 + i32.store8 buf+20($pop120), $0 + i32.const $push119=, 0 + i64.store buf+12($pop119):p2align=2, $1 + i32.const $push24=, buf+12 + i32.const $push118=, .L.str + i32.call $push25=, strcmp@FUNCTION, $pop24, $pop118 + br_if 0, $pop25 # 0: down to label0 +# BB#14: # %for.cond.12 + i32.const $push129=, 0 + i32.const $push128=, 0 + i32.load8_u $push127=, .L.str+8($pop128) + tee_local $push126=, $0=, $pop127 + i32.store8 buf+21($pop129), $pop126 + i32.const $push125=, 0 + i32.const $push124=, 0 + i64.load $push123=, .L.str($pop124):p2align=0 + tee_local $push122=, $1=, $pop123 + i64.store buf+13($pop125):p2align=0, $pop122 + i32.const $push26=, buf+13 + i32.const $push121=, .L.str + i32.call $push27=, strcmp@FUNCTION, $pop26, $pop121 + br_if 0, $pop27 # 0: down to label0 +# BB#15: # %for.cond.13 + i32.const $push132=, 0 + i32.store8 buf+22($pop132), $0 + i32.const $push131=, 0 + i64.store buf+14($pop131):p2align=1, $1 + i32.const $push28=, buf+14 + i32.const $push130=, .L.str + i32.call $push29=, strcmp@FUNCTION, $pop28, $pop130 + br_if 0, $pop29 # 0: down to label0 +# BB#16: # %for.cond.14 + i32.const $push136=, 0 + i32.const $push135=, 0 + i32.load8_u $push30=, .L.str+8($pop135) + i32.store8 buf+23($pop136), $pop30 + i32.const $push134=, 0 + i32.const $push133=, 0 + i64.load $push31=, .L.str($pop133):p2align=0 + i64.store buf+15($pop134):p2align=0, $pop31 + i32.const $push33=, buf+15 + i32.const $push32=, .L.str + i32.call $push34=, strcmp@FUNCTION, $pop33, $pop32 + br_if 0, $pop34 # 0: down to label0 +# BB#17: # %for.cond.15 + i32.const $push137=, 0 + return $pop137 +.LBB0_18: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden buf # @buf + .type buf,@object + .section .bss.buf,"aw",@nobits + .globl buf + .p2align 4 +buf: + .skip 64 + .size buf, 64 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "mystring" + .size .L.str, 9 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strcmp, i32, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20021015-1.c.s b/src/binaryen/test/torture-s/20021015-1.c.s new file mode 100644 index 0000000000..0b345ac170 --- /dev/null +++ b/src/binaryen/test/torture-s/20021015-1.c.s @@ -0,0 +1,62 @@ + .text + .file "20021015-1.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.load $push0=, 0($4) + i32.const $push1=, g_list + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push3=, 0 + i32.const $push4=, 0 + i32.store8 g_list($pop3), $pop4 + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push1=, 0 + i32.load8_u $push0=, g_list($pop1) + i32.eqz $push5=, $pop0 + br_if 0, $pop5 # 0: down to label1 +# BB#1: # %g.exit + i32.const $push3=, 0 + i32.const $push2=, 0 + i32.store8 g_list($pop3), $pop2 +.LBB1_2: # %for.end + end_block # label1: + i32.const $push4=, 0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden g_list # @g_list + .type g_list,@object + .section .data.g_list,"aw",@progbits + .globl g_list +g_list: + .int8 49 + .size g_list, 1 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20021024-1.c.s b/src/binaryen/test/torture-s/20021024-1.c.s new file mode 100644 index 0000000000..5bff253ab8 --- /dev/null +++ b/src/binaryen/test/torture-s/20021024-1.c.s @@ -0,0 +1,129 @@ + .text + .file "20021024-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 511 + i32.and $2=, $0, $pop0 + i32.const $push1=, 20 + i32.shr_u $push2=, $0, $pop1 + i32.const $push3=, 4088 + i32.and $push4=, $pop2, $pop3 + i32.add $4=, $1, $pop4 + i32.const $push5=, 6 + i32.shr_u $push6=, $0, $pop5 + i32.const $push16=, 4088 + i32.and $push7=, $pop6, $pop16 + i32.add $3=, $1, $pop7 + i32.const $push15=, 0 + i32.load $0=, cp($pop15) +.LBB1_1: # %top + # =>This Inner Loop Header: Depth=1 + loop # label0: + i64.const $push19=, 1 + i64.store 0($0), $pop19 + i32.const $push18=, 0 + i64.load $push9=, 0($4) + i64.load $push8=, 0($3) + i64.add $push10=, $pop9, $pop8 + i64.store m($pop18), $pop10 + i64.const $push17=, 2 + i64.store 0($0), $pop17 + i32.eqz $push20=, $2 + br_if 0, $pop20 # 0: up to label0 +# BB#2: # %if.end + end_loop + i32.const $push11=, 3 + i32.shl $push12=, $2, $pop11 + i32.add $push13=, $1, $pop12 + i64.const $push14=, 1 + i64.store 0($pop13), $pop14 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 16 + i32.sub $push18=, $pop6, $pop8 + tee_local $push17=, $0=, $pop18 + i32.store __stack_pointer($pop9), $pop17 + i32.const $push1=, 0 + i64.const $push0=, 47 + i64.store main.r+32($pop1), $pop0 + i32.const $push16=, 0 + i64.const $push2=, 11 + i64.store main.r+64($pop16), $pop2 + i32.const $push15=, 0 + i64.const $push3=, 58 + i64.store m($pop15), $pop3 + i32.const $push14=, 0 + i64.const $push4=, 1 + i64.store main.r+120($pop14), $pop4 + i32.const $push13=, 0 + i32.const $push10=, 8 + i32.add $push11=, $0, $pop10 + i32.store cp($pop13), $pop11 + i64.const $push5=, 2 + i64.store 8($0), $pop5 + i32.const $push12=, 0 + call exit@FUNCTION, $pop12 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden cp # @cp + .type cp,@object + .section .bss.cp,"aw",@nobits + .globl cp + .p2align 2 +cp: + .int32 0 + .size cp, 4 + + .hidden m # @m + .type m,@object + .section .bss.m,"aw",@nobits + .globl m + .p2align 3 +m: + .int64 0 # 0x0 + .size m, 8 + + .type main.r,@object # @main.r + .section .bss.main.r,"aw",@nobits + .p2align 4 +main.r: + .skip 512 + .size main.r, 512 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20021111-1.c.s b/src/binaryen/test/torture-s/20021111-1.c.s new file mode 100644 index 0000000000..faf5928d3a --- /dev/null +++ b/src/binaryen/test/torture-s/20021111-1.c.s @@ -0,0 +1,72 @@ + .text + .file "20021111-1.c" + .section .text.aim_callhandler,"ax",@progbits + .hidden aim_callhandler # -- Begin function aim_callhandler + .globl aim_callhandler + .type aim_callhandler,@function +aim_callhandler: # @aim_callhandler + .param i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + block + block + i32.eqz $push11=, $1 + br_if 0, $pop11 # 0: down to label1 +# BB#1: # %entry + i32.const $push0=, 65535 + i32.eq $push1=, $3, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#2: # %if.end3 + i32.const $push8=, 0 + i32.load $push7=, aim_callhandler.i($pop8) + tee_local $push6=, $1=, $pop7 + i32.const $push5=, 1 + i32.ge_s $push2=, $pop6, $pop5 + br_if 1, $pop2 # 1: down to label0 +# BB#3: # %if.end7 + i32.const $push10=, 0 + i32.const $push9=, 1 + i32.add $push3=, $1, $pop9 + i32.store aim_callhandler.i($pop10), $pop3 +.LBB0_4: # %return + end_block # label1: + i32.const $push4=, 0 + return $pop4 +.LBB0_5: # %if.then6 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size aim_callhandler, .Lfunc_end0-aim_callhandler + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.const $push4=, 0 + i32.const $push3=, 0 + i32.call $drop=, aim_callhandler@FUNCTION, $pop1, $pop0, $pop4, $pop3 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type aim_callhandler.i,@object # @aim_callhandler.i + .section .bss.aim_callhandler.i,"aw",@nobits + .p2align 2 +aim_callhandler.i: + .int32 0 # 0x0 + .size aim_callhandler.i, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20021113-1.c.s b/src/binaryen/test/torture-s/20021113-1.c.s new file mode 100644 index 0000000000..ad500b6f18 --- /dev/null +++ b/src/binaryen/test/torture-s/20021113-1.c.s @@ -0,0 +1,35 @@ + .text + .file "20021113-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 10 + i32.store 0($0), $pop0 + copy_local $push1=, $0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20021118-1.c.s b/src/binaryen/test/torture-s/20021118-1.c.s new file mode 100644 index 0000000000..e6591f575c --- /dev/null +++ b/src/binaryen/test/torture-s/20021118-1.c.s @@ -0,0 +1,34 @@ + .text + .file "20021118-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32, i32, i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + i32.load $push0=, 12($0) + i32.add $push1=, $pop0, $7 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20021118-2.c.s b/src/binaryen/test/torture-s/20021118-2.c.s new file mode 100644 index 0000000000..3e16c8fc97 --- /dev/null +++ b/src/binaryen/test/torture-s/20021118-2.c.s @@ -0,0 +1,143 @@ + .text + .file "20021118-2.c" + .section .text.t1,"ax",@progbits + .hidden t1 # -- Begin function t1 + .globl t1 + .type t1,@function +t1: # @t1 + .param i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + f64.const $push0=, 0x1.8p1 + call_indirect $pop0, $2 + i32.const $push1=, 2 + i32.shl $push2=, $1, $pop1 + i32.add $push9=, $0, $pop2 + tee_local $push8=, $0=, $pop9 + i32.const $push3=, 4 + i32.add $push4=, $0, $pop3 + i32.load $push5=, 0($pop4) + i32.store 0($pop8), $pop5 + f32.const $push7=, 0x1.4p1 + f32.const $push6=, 0x1.cp1 + call_indirect $pop7, $pop6, $3 + copy_local $push10=, $3 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end0: + .size t1, .Lfunc_end0-t1 + # -- End function + .section .text.t2,"ax",@progbits + .hidden t2 # -- Begin function t2 + .globl t2 + .type t2,@function +t2: # @t2 + .param i32, i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + f32.const $push0=, 0x1.8p2 + call_indirect $pop0, $4 + f64.const $push1=, 0x1.8p1 + call_indirect $pop1, $2 + i32.const $push2=, 2 + i32.shl $push3=, $1, $pop2 + i32.add $push10=, $0, $pop3 + tee_local $push9=, $0=, $pop10 + i32.const $push4=, 4 + i32.add $push5=, $0, $pop4 + i32.load $push6=, 0($pop5) + i32.store 0($pop9), $pop6 + f32.const $push8=, 0x1.4p1 + f32.const $push7=, 0x1.cp1 + call_indirect $pop8, $pop7, $3 + copy_local $push11=, $3 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end1: + .size t2, .Lfunc_end1-t2 + # -- End function + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param f64 +# BB#0: # %entry + block + f64.const $push0=, 0x1.8p1 + f64.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size f1, .Lfunc_end2-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param f32, f32 +# BB#0: # %entry + block + f32.const $push0=, 0x1.4p1 + f32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %entry + f32.const $push2=, 0x1.cp1 + f32.ne $push3=, $1, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#2: # %if.end + return +.LBB3_3: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size f2, .Lfunc_end3-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .param f32 +# BB#0: # %entry + block + f32.const $push0=, 0x1.8p2 + f32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label2 +# BB#1: # %if.end + return +.LBB4_2: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end4: + .size f3, .Lfunc_end4-f3 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end5: + .size main, .Lfunc_end5-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20021118-3.c.s b/src/binaryen/test/torture-s/20021118-3.c.s new file mode 100644 index 0000000000..d9204c0220 --- /dev/null +++ b/src/binaryen/test/torture-s/20021118-3.c.s @@ -0,0 +1,49 @@ + .text + .file "20021118-3.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push2=, -2 + i32.eq $push3=, $0, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %entry + i32.const $push1=, -100 + i32.sub $push0=, $pop1, $0 + i32.const $push5=, 0 + i32.ge_s $push4=, $pop0, $pop5 + br_if 0, $pop4 # 0: down to label0 +# BB#2: # %if.end + i32.const $push6=, 0 + return $pop6 +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20021119-1.c.s b/src/binaryen/test/torture-s/20021119-1.c.s new file mode 100644 index 0000000000..c7ad81f8a3 --- /dev/null +++ b/src/binaryen/test/torture-s/20021119-1.c.s @@ -0,0 +1,36 @@ + .text + .file "20021119-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 80 + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.sub $push3=, $pop2, $pop1 + i32.const $push4=, 20 + i32.div_s $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20021120-1.c.s b/src/binaryen/test/torture-s/20021120-1.c.s new file mode 100644 index 0000000000..f59762eaf1 --- /dev/null +++ b/src/binaryen/test/torture-s/20021120-1.c.s @@ -0,0 +1,674 @@ + .text + .file "20021120-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .local f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64, f64 +# BB#0: # %entry + i32.const $push97=, 0 + f64.load $160=, gd($pop97) + i32.const $push96=, 0 + f64.load $159=, gd+8($pop96) + i32.const $push95=, 0 + f64.load $158=, gd+16($pop95) + i32.const $push94=, 0 + f64.load $157=, gd+24($pop94) + i32.const $push93=, 0 + f64.load $156=, gd+32($pop93) + i32.const $push92=, 0 + f64.load $155=, gd+40($pop92) + i32.const $push91=, 0 + f64.load $154=, gd+48($pop91) + i32.const $push90=, 0 + f64.load $153=, gd+56($pop90) + i32.const $push89=, 0 + f64.load $152=, gd+64($pop89) + i32.const $push88=, 0 + f64.load $151=, gd+72($pop88) + i32.const $push87=, 0 + f64.load $150=, gd+80($pop87) + i32.const $push86=, 0 + f64.load $149=, gd+88($pop86) + i32.const $push85=, 0 + f64.load $148=, gd+96($pop85) + i32.const $push84=, 0 + f64.load $147=, gd+104($pop84) + i32.const $push83=, 0 + f64.load $146=, gd+112($pop83) + i32.const $push82=, 0 + f64.load $145=, gd+120($pop82) + i32.const $push81=, 0 + f64.load $144=, gd+128($pop81) + i32.const $push80=, 0 + f64.load $143=, gd+136($pop80) + i32.const $push79=, 0 + f64.load $142=, gd+144($pop79) + i32.const $push78=, 0 + f64.load $141=, gd+152($pop78) + i32.const $push77=, 0 + f64.load $140=, gd+160($pop77) + i32.const $push76=, 0 + f64.load $139=, gd+168($pop76) + i32.const $push75=, 0 + f64.load $138=, gd+176($pop75) + i32.const $push74=, 0 + f64.load $137=, gd+184($pop74) + i32.const $push73=, 0 + f64.load $136=, gd+192($pop73) + i32.const $push72=, 0 + f64.load $135=, gd+200($pop72) + i32.const $push71=, 0 + f64.load $134=, gd+208($pop71) + i32.const $push70=, 0 + f64.load $133=, gd+216($pop70) + i32.const $push69=, 0 + f64.load $132=, gd+224($pop69) + i32.const $push68=, 0 + f64.load $131=, gd+232($pop68) + i32.const $push67=, 0 + f64.load $130=, gd+240($pop67) + i32.const $push66=, 0 + f64.load $129=, gd+248($pop66) + block + i32.const $push0=, 1 + i32.lt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %for.body.preheader +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push260=, 0 + f32.load $1=, gf($pop260) + i32.const $push259=, 0 + f32.load $2=, gf+4($pop259) + i32.const $push258=, 0 + f32.load $3=, gf+8($pop258) + i32.const $push257=, 0 + f32.load $4=, gf+12($pop257) + i32.const $push256=, 0 + f32.load $5=, gf+16($pop256) + i32.const $push255=, 0 + f32.load $6=, gf+20($pop255) + i32.const $push254=, 0 + f32.load $7=, gf+24($pop254) + i32.const $push253=, 0 + f32.load $8=, gf+28($pop253) + i32.const $push252=, 0 + f32.load $9=, gf+32($pop252) + i32.const $push251=, 0 + f32.load $10=, gf+36($pop251) + i32.const $push250=, 0 + f32.load $11=, gf+40($pop250) + i32.const $push249=, 0 + f32.load $12=, gf+44($pop249) + i32.const $push248=, 0 + f32.load $13=, gf+48($pop248) + i32.const $push247=, 0 + f32.load $14=, gf+52($pop247) + i32.const $push246=, 0 + f32.load $15=, gf+56($pop246) + i32.const $push245=, 0 + f32.load $16=, gf+60($pop245) + i32.const $push244=, 0 + f32.load $17=, gf+64($pop244) + i32.const $push243=, 0 + f32.load $18=, gf+68($pop243) + i32.const $push242=, 0 + f32.load $19=, gf+72($pop242) + i32.const $push241=, 0 + f32.load $20=, gf+76($pop241) + i32.const $push240=, 0 + f32.load $21=, gf+80($pop240) + i32.const $push239=, 0 + f32.load $22=, gf+84($pop239) + i32.const $push238=, 0 + f32.load $23=, gf+88($pop238) + i32.const $push237=, 0 + f32.load $24=, gf+92($pop237) + i32.const $push236=, 0 + f32.load $25=, gf+96($pop236) + i32.const $push235=, 0 + f32.load $26=, gf+100($pop235) + i32.const $push234=, 0 + f32.load $27=, gf+104($pop234) + i32.const $push233=, 0 + f32.load $28=, gf+108($pop233) + i32.const $push232=, 0 + f32.load $29=, gf+112($pop232) + i32.const $push231=, 0 + f32.load $30=, gf+116($pop231) + i32.const $push230=, 0 + f32.load $31=, gf+120($pop230) + i32.const $push229=, 0 + f32.load $32=, gf+124($pop229) + i32.const $push228=, 0 + f64.load $33=, gd($pop228) + i32.const $push227=, 0 + f64.load $34=, gd+8($pop227) + i32.const $push226=, 0 + f64.load $35=, gd+16($pop226) + i32.const $push225=, 0 + f64.load $36=, gd+24($pop225) + i32.const $push224=, 0 + f64.load $37=, gd+32($pop224) + i32.const $push223=, 0 + f64.load $38=, gd+40($pop223) + i32.const $push222=, 0 + f64.load $39=, gd+48($pop222) + i32.const $push221=, 0 + f64.load $40=, gd+56($pop221) + i32.const $push220=, 0 + f64.load $41=, gd+64($pop220) + i32.const $push219=, 0 + f64.load $42=, gd+72($pop219) + i32.const $push218=, 0 + f64.load $43=, gd+80($pop218) + i32.const $push217=, 0 + f64.load $44=, gd+88($pop217) + i32.const $push216=, 0 + f64.load $45=, gd+96($pop216) + i32.const $push215=, 0 + f64.load $46=, gd+104($pop215) + i32.const $push214=, 0 + f64.load $47=, gd+112($pop214) + i32.const $push213=, 0 + f64.load $48=, gd+120($pop213) + i32.const $push212=, 0 + f64.load $49=, gd+128($pop212) + i32.const $push211=, 0 + f64.load $50=, gd+136($pop211) + i32.const $push210=, 0 + f64.load $51=, gd+144($pop210) + i32.const $push209=, 0 + f64.load $52=, gd+152($pop209) + i32.const $push208=, 0 + f64.load $53=, gd+160($pop208) + i32.const $push207=, 0 + f64.load $54=, gd+168($pop207) + i32.const $push206=, 0 + f64.load $55=, gd+176($pop206) + i32.const $push205=, 0 + f64.load $56=, gd+184($pop205) + i32.const $push204=, 0 + f64.load $57=, gd+192($pop204) + i32.const $push203=, 0 + f64.load $58=, gd+200($pop203) + i32.const $push202=, 0 + f64.load $59=, gd+208($pop202) + i32.const $push201=, 0 + f64.load $60=, gd+216($pop201) + i32.const $push200=, 0 + f64.load $61=, gd+224($pop200) + i32.const $push199=, 0 + f64.load $62=, gd+232($pop199) + i32.const $push198=, 0 + f64.load $63=, gd+240($pop198) + i32.const $push197=, 0 + f64.load $64=, gd+248($pop197) + i32.const $push196=, 0 + f64.load $65=, gd($pop196) + i32.const $push195=, 0 + f64.load $66=, gd+8($pop195) + i32.const $push194=, 0 + f64.load $67=, gd+16($pop194) + i32.const $push193=, 0 + f64.load $68=, gd+24($pop193) + i32.const $push192=, 0 + f64.load $69=, gd+32($pop192) + i32.const $push191=, 0 + f64.load $70=, gd+40($pop191) + i32.const $push190=, 0 + f64.load $71=, gd+48($pop190) + i32.const $push189=, 0 + f64.load $72=, gd+56($pop189) + i32.const $push188=, 0 + f64.load $73=, gd+64($pop188) + i32.const $push187=, 0 + f64.load $74=, gd+72($pop187) + i32.const $push186=, 0 + f64.load $75=, gd+80($pop186) + i32.const $push185=, 0 + f64.load $76=, gd+88($pop185) + i32.const $push184=, 0 + f64.load $77=, gd+96($pop184) + i32.const $push183=, 0 + f64.load $78=, gd+104($pop183) + i32.const $push182=, 0 + f64.load $79=, gd+112($pop182) + i32.const $push181=, 0 + f64.load $80=, gd+120($pop181) + i32.const $push180=, 0 + f64.load $81=, gd+128($pop180) + i32.const $push179=, 0 + f64.load $82=, gd+136($pop179) + i32.const $push178=, 0 + f64.load $83=, gd+144($pop178) + i32.const $push177=, 0 + f64.load $84=, gd+152($pop177) + i32.const $push176=, 0 + f64.load $85=, gd+160($pop176) + i32.const $push175=, 0 + f64.load $86=, gd+168($pop175) + i32.const $push174=, 0 + f64.load $87=, gd+176($pop174) + i32.const $push173=, 0 + f64.load $88=, gd+184($pop173) + i32.const $push172=, 0 + f64.load $89=, gd+192($pop172) + i32.const $push171=, 0 + f64.load $90=, gd+200($pop171) + i32.const $push170=, 0 + f64.load $91=, gd+208($pop170) + i32.const $push169=, 0 + f64.load $92=, gd+216($pop169) + i32.const $push168=, 0 + f64.load $93=, gd+224($pop168) + i32.const $push167=, 0 + f64.load $94=, gd+232($pop167) + i32.const $push166=, 0 + f64.load $95=, gd+240($pop166) + i32.const $push165=, 0 + f64.load $96=, gd+248($pop165) + i32.const $push164=, 0 + f64.load $97=, gd($pop164) + i32.const $push163=, 0 + f64.load $98=, gd+8($pop163) + i32.const $push162=, 0 + f64.load $99=, gd+16($pop162) + i32.const $push161=, 0 + f64.load $100=, gd+24($pop161) + i32.const $push160=, 0 + f64.load $101=, gd+32($pop160) + i32.const $push159=, 0 + f64.load $102=, gd+40($pop159) + i32.const $push158=, 0 + f64.load $103=, gd+48($pop158) + i32.const $push157=, 0 + f64.load $104=, gd+56($pop157) + i32.const $push156=, 0 + f64.load $105=, gd+64($pop156) + i32.const $push155=, 0 + f64.load $106=, gd+72($pop155) + i32.const $push154=, 0 + f64.load $107=, gd+80($pop154) + i32.const $push153=, 0 + f64.load $108=, gd+88($pop153) + i32.const $push152=, 0 + f64.load $109=, gd+96($pop152) + i32.const $push151=, 0 + f64.load $110=, gd+104($pop151) + i32.const $push150=, 0 + f64.load $111=, gd+112($pop150) + i32.const $push149=, 0 + f64.load $112=, gd+120($pop149) + i32.const $push148=, 0 + f64.load $113=, gd+128($pop148) + i32.const $push147=, 0 + f64.load $114=, gd+136($pop147) + i32.const $push146=, 0 + f64.load $115=, gd+144($pop146) + i32.const $push145=, 0 + f64.load $116=, gd+152($pop145) + i32.const $push144=, 0 + f64.load $117=, gd+160($pop144) + i32.const $push143=, 0 + f64.load $118=, gd+168($pop143) + i32.const $push142=, 0 + f64.load $119=, gd+176($pop142) + i32.const $push141=, 0 + f64.load $120=, gd+184($pop141) + i32.const $push140=, 0 + f64.load $121=, gd+192($pop140) + i32.const $push139=, 0 + f64.load $122=, gd+200($pop139) + i32.const $push138=, 0 + f64.load $123=, gd+208($pop138) + i32.const $push137=, 0 + f64.load $124=, gd+216($pop137) + i32.const $push136=, 0 + f64.load $125=, gd+224($pop136) + i32.const $push135=, 0 + f64.load $126=, gd+232($pop135) + i32.const $push134=, 0 + f64.load $127=, gd+240($pop134) + i32.const $push133=, 0 + f64.load $128=, gd+248($pop133) + i32.const $push132=, 0 + f32.store gf($pop132), $1 + i32.const $push131=, 0 + f32.store gf+4($pop131), $2 + i32.const $push130=, 0 + f32.store gf+8($pop130), $3 + i32.const $push129=, 0 + f32.store gf+12($pop129), $4 + i32.const $push128=, 0 + f32.store gf+16($pop128), $5 + i32.const $push127=, 0 + f32.store gf+20($pop127), $6 + i32.const $push126=, 0 + f32.store gf+24($pop126), $7 + i32.const $push125=, 0 + f32.store gf+28($pop125), $8 + i32.const $push124=, 0 + f32.store gf+32($pop124), $9 + i32.const $push123=, 0 + f32.store gf+36($pop123), $10 + i32.const $push122=, 0 + f32.store gf+40($pop122), $11 + i32.const $push121=, 0 + f32.store gf+44($pop121), $12 + i32.const $push120=, 0 + f32.store gf+48($pop120), $13 + i32.const $push119=, 0 + f32.store gf+52($pop119), $14 + i32.const $push118=, 0 + f32.store gf+56($pop118), $15 + i32.const $push117=, 0 + f32.store gf+60($pop117), $16 + i32.const $push116=, 0 + f32.store gf+64($pop116), $17 + i32.const $push115=, 0 + f32.store gf+68($pop115), $18 + i32.const $push114=, 0 + f32.store gf+72($pop114), $19 + i32.const $push113=, 0 + f32.store gf+76($pop113), $20 + i32.const $push112=, 0 + f32.store gf+80($pop112), $21 + i32.const $push111=, 0 + f32.store gf+84($pop111), $22 + i32.const $push110=, 0 + f32.store gf+88($pop110), $23 + i32.const $push109=, 0 + f32.store gf+92($pop109), $24 + i32.const $push108=, 0 + f32.store gf+96($pop108), $25 + i32.const $push107=, 0 + f32.store gf+100($pop107), $26 + i32.const $push106=, 0 + f32.store gf+104($pop106), $27 + i32.const $push105=, 0 + f32.store gf+108($pop105), $28 + i32.const $push104=, 0 + f32.store gf+112($pop104), $29 + i32.const $push103=, 0 + f32.store gf+116($pop103), $30 + i32.const $push102=, 0 + f32.store gf+120($pop102), $31 + i32.const $push101=, 0 + f32.store gf+124($pop101), $32 + f64.add $push2=, $160, $33 + f64.add $push3=, $65, $pop2 + f64.add $160=, $97, $pop3 + f64.add $push4=, $159, $34 + f64.add $push5=, $66, $pop4 + f64.add $159=, $98, $pop5 + f64.add $push6=, $158, $35 + f64.add $push7=, $67, $pop6 + f64.add $158=, $99, $pop7 + f64.add $push8=, $157, $36 + f64.add $push9=, $68, $pop8 + f64.add $157=, $100, $pop9 + f64.add $push10=, $156, $37 + f64.add $push11=, $69, $pop10 + f64.add $156=, $101, $pop11 + f64.add $push12=, $155, $38 + f64.add $push13=, $70, $pop12 + f64.add $155=, $102, $pop13 + f64.add $push14=, $154, $39 + f64.add $push15=, $71, $pop14 + f64.add $154=, $103, $pop15 + f64.add $push16=, $153, $40 + f64.add $push17=, $72, $pop16 + f64.add $153=, $104, $pop17 + f64.add $push18=, $152, $41 + f64.add $push19=, $73, $pop18 + f64.add $152=, $105, $pop19 + f64.add $push20=, $151, $42 + f64.add $push21=, $74, $pop20 + f64.add $151=, $106, $pop21 + f64.add $push22=, $150, $43 + f64.add $push23=, $75, $pop22 + f64.add $150=, $107, $pop23 + f64.add $push24=, $149, $44 + f64.add $push25=, $76, $pop24 + f64.add $149=, $108, $pop25 + f64.add $push26=, $148, $45 + f64.add $push27=, $77, $pop26 + f64.add $148=, $109, $pop27 + f64.add $push28=, $147, $46 + f64.add $push29=, $78, $pop28 + f64.add $147=, $110, $pop29 + f64.add $push30=, $146, $47 + f64.add $push31=, $79, $pop30 + f64.add $146=, $111, $pop31 + f64.add $push32=, $145, $48 + f64.add $push33=, $80, $pop32 + f64.add $145=, $112, $pop33 + f64.add $push34=, $144, $49 + f64.add $push35=, $81, $pop34 + f64.add $144=, $113, $pop35 + f64.add $push36=, $143, $50 + f64.add $push37=, $82, $pop36 + f64.add $143=, $114, $pop37 + f64.add $push38=, $142, $51 + f64.add $push39=, $83, $pop38 + f64.add $142=, $115, $pop39 + f64.add $push40=, $141, $52 + f64.add $push41=, $84, $pop40 + f64.add $141=, $116, $pop41 + f64.add $push42=, $140, $53 + f64.add $push43=, $85, $pop42 + f64.add $140=, $117, $pop43 + f64.add $push44=, $139, $54 + f64.add $push45=, $86, $pop44 + f64.add $139=, $118, $pop45 + f64.add $push46=, $138, $55 + f64.add $push47=, $87, $pop46 + f64.add $138=, $119, $pop47 + f64.add $push48=, $137, $56 + f64.add $push49=, $88, $pop48 + f64.add $137=, $120, $pop49 + f64.add $push50=, $136, $57 + f64.add $push51=, $89, $pop50 + f64.add $136=, $121, $pop51 + f64.add $push52=, $135, $58 + f64.add $push53=, $90, $pop52 + f64.add $135=, $122, $pop53 + f64.add $push54=, $134, $59 + f64.add $push55=, $91, $pop54 + f64.add $134=, $123, $pop55 + f64.add $push56=, $133, $60 + f64.add $push57=, $92, $pop56 + f64.add $133=, $124, $pop57 + f64.add $push58=, $132, $61 + f64.add $push59=, $93, $pop58 + f64.add $132=, $125, $pop59 + f64.add $push60=, $131, $62 + f64.add $push61=, $94, $pop60 + f64.add $131=, $126, $pop61 + f64.add $push62=, $130, $63 + f64.add $push63=, $95, $pop62 + f64.add $130=, $127, $pop63 + f64.add $push64=, $129, $64 + f64.add $push65=, $96, $pop64 + f64.add $129=, $128, $pop65 + i32.const $push100=, -1 + i32.add $push99=, $0, $pop100 + tee_local $push98=, $0=, $pop99 + br_if 0, $pop98 # 0: up to label1 +.LBB0_3: # %for.end + end_loop + end_block # label0: + i32.const $push292=, 0 + f64.store gd($pop292), $160 + i32.const $push291=, 0 + f64.store gd+8($pop291), $159 + i32.const $push290=, 0 + f64.store gd+16($pop290), $158 + i32.const $push289=, 0 + f64.store gd+24($pop289), $157 + i32.const $push288=, 0 + f64.store gd+32($pop288), $156 + i32.const $push287=, 0 + f64.store gd+40($pop287), $155 + i32.const $push286=, 0 + f64.store gd+48($pop286), $154 + i32.const $push285=, 0 + f64.store gd+56($pop285), $153 + i32.const $push284=, 0 + f64.store gd+64($pop284), $152 + i32.const $push283=, 0 + f64.store gd+72($pop283), $151 + i32.const $push282=, 0 + f64.store gd+80($pop282), $150 + i32.const $push281=, 0 + f64.store gd+88($pop281), $149 + i32.const $push280=, 0 + f64.store gd+96($pop280), $148 + i32.const $push279=, 0 + f64.store gd+104($pop279), $147 + i32.const $push278=, 0 + f64.store gd+112($pop278), $146 + i32.const $push277=, 0 + f64.store gd+120($pop277), $145 + i32.const $push276=, 0 + f64.store gd+128($pop276), $144 + i32.const $push275=, 0 + f64.store gd+136($pop275), $143 + i32.const $push274=, 0 + f64.store gd+144($pop274), $142 + i32.const $push273=, 0 + f64.store gd+152($pop273), $141 + i32.const $push272=, 0 + f64.store gd+160($pop272), $140 + i32.const $push271=, 0 + f64.store gd+168($pop271), $139 + i32.const $push270=, 0 + f64.store gd+176($pop270), $138 + i32.const $push269=, 0 + f64.store gd+184($pop269), $137 + i32.const $push268=, 0 + f64.store gd+192($pop268), $136 + i32.const $push267=, 0 + f64.store gd+200($pop267), $135 + i32.const $push266=, 0 + f64.store gd+208($pop266), $134 + i32.const $push265=, 0 + f64.store gd+216($pop265), $133 + i32.const $push264=, 0 + f64.store gd+224($pop264), $132 + i32.const $push263=, 0 + f64.store gd+232($pop263), $131 + i32.const $push262=, 0 + f64.store gd+240($pop262), $130 + i32.const $push261=, 0 + f64.store gd+248($pop261), $129 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local f64, i32, i32, i32 +# BB#0: # %entry + i32.const $1=, 0 + f64.const $0=, 0x0p0 + i32.const $3=, gd + i32.const $2=, gf +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + f64.store 0($3), $0 + f32.convert_s/i32 $push0=, $1 + f32.store 0($2), $pop0 + i32.const $push17=, 4 + i32.add $2=, $2, $pop17 + i32.const $push16=, 8 + i32.add $3=, $3, $pop16 + f64.const $push15=, 0x1p0 + f64.add $0=, $0, $pop15 + i32.const $push14=, 1 + i32.add $push13=, $1, $pop14 + tee_local $push12=, $1=, $pop13 + i32.const $push11=, 32 + i32.ne $push1=, $pop12, $pop11 + br_if 0, $pop1 # 0: up to label2 +# BB#2: # %for.end + end_loop + i32.const $push18=, 1 + call foo@FUNCTION, $pop18 + i32.const $3=, -1 + i32.const $2=, gd + i32.const $1=, 0 +.LBB1_3: # %for.body6 + # =>This Inner Loop Header: Depth=1 + block + loop # label4: + f64.load $push3=, 0($2) + f64.convert_s/i32 $push2=, $1 + f64.ne $push4=, $pop3, $pop2 + br_if 1, $pop4 # 1: down to label3 +# BB#4: # %lor.lhs.false + # in Loop: Header=BB1_3 Depth=1 + i32.const $push22=, gf + i32.add $push5=, $1, $pop22 + f32.load $push6=, 0($pop5) + i32.const $push21=, 1 + i32.add $push20=, $3, $pop21 + tee_local $push19=, $3=, $pop20 + f32.convert_s/i32 $push7=, $pop19 + f32.ne $push8=, $pop6, $pop7 + br_if 1, $pop8 # 1: down to label3 +# BB#5: # %for.cond3 + # in Loop: Header=BB1_3 Depth=1 + i32.const $push25=, 4 + i32.add $1=, $1, $pop25 + i32.const $push24=, 8 + i32.add $2=, $2, $pop24 + i32.const $push23=, 30 + i32.le_u $push9=, $3, $pop23 + br_if 0, $pop9 # 0: up to label4 +# BB#6: # %for.end17 + end_loop + i32.const $push10=, 0 + call exit@FUNCTION, $pop10 + unreachable +.LBB1_7: # %if.then + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden gd # @gd + .type gd,@object + .section .bss.gd,"aw",@nobits + .globl gd + .p2align 4 +gd: + .skip 256 + .size gd, 256 + + .hidden gf # @gf + .type gf,@object + .section .bss.gf,"aw",@nobits + .globl gf + .p2align 4 +gf: + .skip 128 + .size gf, 128 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20021120-2.c.s b/src/binaryen/test/torture-s/20021120-2.c.s new file mode 100644 index 0000000000..ae3d1b7168 --- /dev/null +++ b/src/binaryen/test/torture-s/20021120-2.c.s @@ -0,0 +1,62 @@ + .text + .file "20021120-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 10 + i32.store g1($pop1), $pop0 + i32.const $push4=, 0 + i32.const $push2=, 7930 + i32.div_s $push3=, $pop2, $0 + i32.store g2($pop4), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, 10 + i32.store g2($pop1), $pop0 + i32.const $push4=, 0 + i32.const $push3=, 10 + i32.store g1($pop4), $pop3 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden g1 # @g1 + .type g1,@object + .section .bss.g1,"aw",@nobits + .globl g1 + .p2align 2 +g1: + .int32 0 # 0x0 + .size g1, 4 + + .hidden g2 # @g2 + .type g2,@object + .section .bss.g2,"aw",@nobits + .globl g2 + .p2align 2 +g2: + .int32 0 # 0x0 + .size g2, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20021120-3.c.s b/src/binaryen/test/torture-s/20021120-3.c.s new file mode 100644 index 0000000000..99209767a2 --- /dev/null +++ b/src/binaryen/test/torture-s/20021120-3.c.s @@ -0,0 +1,74 @@ + .text + .file "20021120-3.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 16 + i32.sub $push15=, $pop6, $pop8 + tee_local $push14=, $3=, $pop15 + i32.store __stack_pointer($pop9), $pop14 + i32.div_u $push0=, $1, $2 + i32.store 0($3), $pop0 + i32.const $push1=, .L.str + i32.call $drop=, sprintf@FUNCTION, $0, $pop1, $3 + i32.const $push12=, 0 + i32.const $push10=, 16 + i32.add $push11=, $3, $pop10 + i32.store __stack_pointer($pop12), $pop11 + i32.const $push2=, 1 + i32.add $push4=, $1, $pop2 + i32.const $push13=, 1 + i32.add $push3=, $2, $pop13 + i32.div_u $push5=, $pop4, $pop3 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %if.end + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 32 + i32.sub $push10=, $pop3, $pop5 + tee_local $push9=, $0=, $pop10 + i32.store __stack_pointer($pop6), $pop9 + i32.const $push0=, 1073741823 + i32.store 0($0), $pop0 + i32.const $push7=, 16 + i32.add $push8=, $0, $pop7 + i32.const $push1=, .L.str + i32.call $drop=, sprintf@FUNCTION, $pop8, $pop1, $0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "%d" + .size .L.str, 3 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype sprintf, i32, i32, i32 + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20021127-1.c.s b/src/binaryen/test/torture-s/20021127-1.c.s new file mode 100644 index 0000000000..8608859769 --- /dev/null +++ b/src/binaryen/test/torture-s/20021127-1.c.s @@ -0,0 +1,41 @@ + .text + .file "20021127-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.llabs,"ax",@progbits + .hidden llabs # -- Begin function llabs + .globl llabs + .type llabs,@function +llabs: # @llabs + .param i64 + .result i64 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size llabs, .Lfunc_end1-llabs + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 3 +a: + .int64 -1 # 0xffffffffffffffff + .size a, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20021204-1.c.s b/src/binaryen/test/torture-s/20021204-1.c.s new file mode 100644 index 0000000000..c869705564 --- /dev/null +++ b/src/binaryen/test/torture-s/20021204-1.c.s @@ -0,0 +1,59 @@ + .text + .file "20021204-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push4=, 2 + i32.const $push3=, 1 + i32.const $push0=, 0 + i32.load $push1=, z($pop0) + i32.const $push7=, 0 + i32.gt_s $push2=, $pop1, $pop7 + i32.select $push5=, $pop4, $pop3, $pop2 + call foo@FUNCTION, $pop5 + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden z # @z + .type z,@object + .section .bss.z,"aw",@nobits + .globl z + .p2align 2 +z: + .int32 0 # 0x0 + .size z, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20021219-1.c.s b/src/binaryen/test/torture-s/20021219-1.c.s new file mode 100644 index 0000000000..cf115635f0 --- /dev/null +++ b/src/binaryen/test/torture-s/20021219-1.c.s @@ -0,0 +1,84 @@ + .text + .file "20021219-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push14=, 0 + i32.load $push13=, __stack_pointer($pop14) + i32.const $push15=, 16 + i32.sub $push19=, $pop13, $pop15 + tee_local $push18=, $0=, $pop19 + i32.const $push3=, 10 + i32.add $push4=, $pop18, $pop3 + i32.const $push1=, 0 + i32.load8_u $push2=, .Lmain.str+10($pop1) + i32.store8 0($pop4), $pop2 + i32.const $push6=, 8 + i32.add $push7=, $0, $pop6 + i32.const $push17=, 0 + i32.load16_u $push5=, .Lmain.str+8($pop17):p2align=0 + i32.store16 0($pop7), $pop5 + i32.const $push16=, 0 + i64.load $push8=, .Lmain.str($pop16):p2align=0 + i64.store 0($0), $pop8 + i32.const $push9=, 6 + i32.or $0=, $0, $pop9 + i32.const $1=, 32 +.LBB1_1: # %while.cond + # =>This Inner Loop Header: Depth=1 + block + loop # label1: + block + i32.const $push24=, 255 + i32.and $push23=, $1, $pop24 + tee_local $push22=, $1=, $pop23 + i32.const $push21=, 32 + i32.eq $push10=, $pop22, $pop21 + br_if 0, $pop10 # 0: down to label2 +# BB#2: # %while.cond + # in Loop: Header=BB1_1 Depth=1 + i32.const $push25=, 13 + i32.ne $push11=, $1, $pop25 + br_if 2, $pop11 # 2: down to label0 +.LBB1_3: # %while.body + # in Loop: Header=BB1_1 Depth=1 + end_block # label2: + i32.load8_u $1=, 0($0) + i32.const $push20=, 1 + i32.add $push0=, $0, $pop20 + copy_local $0=, $pop0 + br 0 # 0: up to label1 +.LBB1_4: # %while.end + end_loop + end_block # label0: + i32.const $push12=, 0 + # fallthrough-return: $pop12 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .Lmain.str,@object # @main.str + .section .rodata.str1.1,"aMS",@progbits,1 +.Lmain.str: + .asciz "foo { xx }" + .size .Lmain.str, 11 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20030105-1.c.s b/src/binaryen/test/torture-s/20030105-1.c.s new file mode 100644 index 0000000000..b4de9fa727 --- /dev/null +++ b/src/binaryen/test/torture-s/20030105-1.c.s @@ -0,0 +1,43 @@ + .text + .file "20030105-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 28 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.call $push1=, foo@FUNCTION + i32.const $push0=, 28 + i32.ne $push2=, $pop1, $pop0 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20030109-1.c.s b/src/binaryen/test/torture-s/20030109-1.c.s new file mode 100644 index 0000000000..882d64f6e6 --- /dev/null +++ b/src/binaryen/test/torture-s/20030109-1.c.s @@ -0,0 +1,39 @@ + .text + .file "20030109-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load $push0=, x+4($pop3) + i32.const $push1=, 40 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 2 +x: + .int32 0 # 0x0 + .int32 40 # 0x28 + .size x, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20030117-1.c.s b/src/binaryen/test/torture-s/20030117-1.c.s new file mode 100644 index 0000000000..04a437c51f --- /dev/null +++ b/src/binaryen/test/torture-s/20030117-1.c.s @@ -0,0 +1,56 @@ + .text + .file "20030117-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end4 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + i32.add $push0=, $1, $0 + i32.add $push1=, $pop0, $2 + i32.const $push2=, 3 + i32.div_s $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + i32.mul $push1=, $1, $1 + i32.mul $push0=, $0, $0 + i32.add $push2=, $pop1, $pop0 + i32.mul $push3=, $2, $2 + i32.add $push4=, $pop2, $pop3 + i32.const $push5=, 3 + i32.div_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end2: + .size bar, .Lfunc_end2-bar + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20030120-1.c.s b/src/binaryen/test/torture-s/20030120-1.c.s new file mode 100644 index 0000000000..056b2e70a5 --- /dev/null +++ b/src/binaryen/test/torture-s/20030120-1.c.s @@ -0,0 +1,64 @@ + .text + .file "20030120-1.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.select $push1=, $0, $pop0, $0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.select $push1=, $0, $pop0, $0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size test2, .Lfunc_end1-test2 + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.ne $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size test3, .Lfunc_end2-test3 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end11 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20030120-2.c.s b/src/binaryen/test/torture-s/20030120-2.c.s new file mode 100644 index 0000000000..efac761ed1 --- /dev/null +++ b/src/binaryen/test/torture-s/20030120-2.c.s @@ -0,0 +1,40 @@ + .text + .file "20030120-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push5=, 4 + i32.const $push0=, 3 + i32.const $push2=, 1 + i32.eq $push3=, $0, $pop2 + i32.const $push9=, 3 + i32.eq $push1=, $0, $pop9 + i32.select $push4=, $pop0, $pop3, $pop1 + i32.const $push8=, 4 + i32.eq $push6=, $0, $pop8 + i32.select $push7=, $pop5, $pop4, $pop6 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20030125-1.c.s b/src/binaryen/test/torture-s/20030125-1.c.s new file mode 100644 index 0000000000..80f863422a --- /dev/null +++ b/src/binaryen/test/torture-s/20030125-1.c.s @@ -0,0 +1,120 @@ + .text + .file "20030125-1.c" + .section .text.t,"ax",@progbits + .hidden t # -- Begin function t + .globl t + .type t,@function +t: # @t + .param f32 + .result f32 +# BB#0: # %entry + f64.promote/f32 $push0=, $0 + f64.call $push1=, sin@FUNCTION, $pop0 + f32.demote/f64 $push2=, $pop1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size t, .Lfunc_end0-t + # -- End function + .section .text.sin,"ax",@progbits + .hidden sin # -- Begin function sin + .globl sin + .type sin,@function +sin: # @sin + .param f64 + .result f64 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size sin, .Lfunc_end1-sin + # -- End function + .section .text.q,"ax",@progbits + .hidden q # -- Begin function q + .globl q + .type q,@function +q: # @q + .param f32 + .result f32 + .local f32 +# BB#0: # %entry + copy_local $push0=, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size q, .Lfunc_end2-q + # -- End function + .section .text.floor,"ax",@progbits + .hidden floor # -- Begin function floor + .globl floor + .type floor,@function +floor: # @floor + .param f64 + .result f64 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size floor, .Lfunc_end3-floor + # -- End function + .section .text.q1,"ax",@progbits + .hidden q1 # -- Begin function q1 + .globl q1 + .type q1,@function +q1: # @q1 + .param f32 + .result f64 + .local f64 +# BB#0: # %entry + copy_local $push0=, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size q1, .Lfunc_end4-q1 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end5: + .size main, .Lfunc_end5-main + # -- End function + .section .text.floorf,"ax",@progbits + .hidden floorf # -- Begin function floorf + .globl floorf + .type floorf,@function +floorf: # @floorf + .param f32 + .result f32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end6: + .size floorf, .Lfunc_end6-floorf + # -- End function + .section .text.sinf,"ax",@progbits + .hidden sinf # -- Begin function sinf + .globl sinf + .type sinf,@function +sinf: # @sinf + .param f32 + .result f32 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end7: + .size sinf, .Lfunc_end7-sinf + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20030128-1.c.s b/src/binaryen/test/torture-s/20030128-1.c.s new file mode 100644 index 0000000000..fc8ae58426 --- /dev/null +++ b/src/binaryen/test/torture-s/20030128-1.c.s @@ -0,0 +1,57 @@ + .text + .file "20030128-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.load16_s $0=, y($pop9) + i32.const $push8=, 0 + i32.const $push7=, 0 + i32.load8_u $push0=, x($pop7) + i32.div_s $push6=, $pop0, $0 + tee_local $push5=, $0=, $pop6 + i32.store8 x($pop8), $pop5 + block + i32.const $push1=, 255 + i32.and $push2=, $0, $pop1 + i32.const $push3=, 246 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + i32.const $push10=, 0 + call exit@FUNCTION, $pop10 + unreachable +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x +x: + .int8 50 # 0x32 + .size x, 1 + + .hidden y # @y + .type y,@object + .section .data.y,"aw",@progbits + .globl y + .p2align 1 +y: + .int16 65531 # 0xfffb + .size y, 2 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20030203-1.c.s b/src/binaryen/test/torture-s/20030203-1.c.s new file mode 100644 index 0000000000..79c5113445 --- /dev/null +++ b/src/binaryen/test/torture-s/20030203-1.c.s @@ -0,0 +1,46 @@ + .text + .file "20030203-1.c" + .section .text.do_layer3,"ax",@progbits + .hidden do_layer3 # -- Begin function do_layer3 + .globl do_layer3 + .type do_layer3,@function +do_layer3: # @do_layer3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.shr_u $push1=, $0, $pop0 + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size do_layer3, .Lfunc_end0-do_layer3 + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20030209-1.c.s b/src/binaryen/test/torture-s/20030209-1.c.s new file mode 100644 index 0000000000..b67066055f --- /dev/null +++ b/src/binaryen/test/torture-s/20030209-1.c.s @@ -0,0 +1,31 @@ + .text + .file "20030209-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i64.const $push0=, 4631107791820423168 + i64.store x+79200($pop1), $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 4 +x: + .skip 80000 + .size x, 80000 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20030216-1.c.s b/src/binaryen/test/torture-s/20030216-1.c.s new file mode 100644 index 0000000000..58a6fb6820 --- /dev/null +++ b/src/binaryen/test/torture-s/20030216-1.c.s @@ -0,0 +1,26 @@ + .text + .file "20030216-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden one # @one + .type one,@object + .section .rodata.one,"a",@progbits + .globl one + .p2align 3 +one: + .int64 4607182418800017408 # double 1 + .size one, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20030218-1.c.s b/src/binaryen/test/torture-s/20030218-1.c.s new file mode 100644 index 0000000000..430ae62756 --- /dev/null +++ b/src/binaryen/test/torture-s/20030218-1.c.s @@ -0,0 +1,60 @@ + .text + .file "20030218-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push0=, 2 + i32.add $push1=, $0, $pop0 + i32.store q($pop2), $pop1 + i32.load16_s $push3=, 0($0) + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %if.end + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push10=, $pop4, $pop6 + tee_local $push9=, $0=, $pop10 + i32.store __stack_pointer($pop7), $pop9 + i32.const $push2=, 0 + i32.const $push0=, 16 + i32.add $push1=, $0, $pop0 + i32.store q($pop2), $pop1 + i32.const $push3=, 65280 + i32.store16 14($0), $pop3 + i32.const $push8=, 0 + call exit@FUNCTION, $pop8 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden q # @q + .type q,@object + .section .bss.q,"aw",@nobits + .globl q + .p2align 2 +q: + .int32 0 + .size q, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20030221-1.c.s b/src/binaryen/test/torture-s/20030221-1.c.s new file mode 100644 index 0000000000..49363f0448 --- /dev/null +++ b/src/binaryen/test/torture-s/20030221-1.c.s @@ -0,0 +1,58 @@ + .text + .file "20030221-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 16 + i32.sub $push18=, $pop6, $pop8 + tee_local $push17=, $1=, $pop18 + i32.store __stack_pointer($pop9), $pop17 + i32.const $push16=, 0 + i64.load $push0=, .Lmain.buf+8($pop16) + i64.store 8($1), $pop0 + i32.const $push15=, 0 + i64.load $push1=, .Lmain.buf($pop15) + i64.store 0($1), $pop1 + i32.call $push14=, strlen@FUNCTION, $1 + tee_local $push13=, $0=, $pop14 + i32.store8 0($1), $pop13 + block + i32.const $push2=, 255 + i32.and $push3=, $0, $pop2 + i32.const $push4=, 10 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %if.end + i32.const $push12=, 0 + i32.const $push10=, 16 + i32.add $push11=, $1, $pop10 + i32.store __stack_pointer($pop12), $pop11 + i32.const $push19=, 0 + return $pop19 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type .Lmain.buf,@object # @main.buf + .section .rodata.cst16,"aM",@progbits,16 + .p2align 4 +.Lmain.buf: + .asciz "1234567890\000\000\000\000\000" + .size .Lmain.buf, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strlen, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20030222-1.c.s b/src/binaryen/test/torture-s/20030222-1.c.s new file mode 100644 index 0000000000..20bee4dd43 --- /dev/null +++ b/src/binaryen/test/torture-s/20030222-1.c.s @@ -0,0 +1,68 @@ + .text + .file "20030222-1.c" + .section .text.ll_to_int,"ax",@progbits + .hidden ll_to_int # -- Begin function ll_to_int + .globl ll_to_int + .type ll_to_int,@function +ll_to_int: # @ll_to_int + .param i64, i32 +# BB#0: # %entry + #APP + #NO_APP + i64.store32 0($1), $0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size ll_to_int, .Lfunc_end0-ll_to_int + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64, i32, i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push10=, $pop2, $pop4 + tee_local $push9=, $2=, $pop10 + i32.store __stack_pointer($pop5), $pop9 + i32.const $push8=, 0 + i32.load $push7=, val($pop8) + tee_local $push6=, $1=, $pop7 + i64.extend_s/i32 $0=, $pop6 + #APP + #NO_APP + i64.store32 12($2), $0 + block + i32.load $push0=, 12($2) + i32.ne $push1=, $1, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push11=, 0 + call exit@FUNCTION, $pop11 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden val # @val + .type val,@object + .section .data.val,"aw",@progbits + .globl val + .p2align 2 +val: + .int32 2147483649 # 0x80000001 + .size val, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20030224-2.c.s b/src/binaryen/test/torture-s/20030224-2.c.s new file mode 100644 index 0000000000..0bf5da478d --- /dev/null +++ b/src/binaryen/test/torture-s/20030224-2.c.s @@ -0,0 +1,35 @@ + .text + .file "20030224-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden node # @node + .type node,@object + .section .bss.node,"aw",@nobits + .globl node + .p2align 2 +node: + .skip 8 + .size node, 8 + + .hidden node_p # @node_p + .type node_p,@object + .section .data.node_p,"aw",@progbits + .globl node_p + .p2align 2 +node_p: + .int32 node + .size node_p, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20030307-1.c.s b/src/binaryen/test/torture-s/20030307-1.c.s new file mode 100644 index 0000000000..f6e4c1611b --- /dev/null +++ b/src/binaryen/test/torture-s/20030307-1.c.s @@ -0,0 +1,45 @@ + .text + .file "20030307-1.c" + .section .text.vfswrap_lock,"ax",@progbits + .hidden vfswrap_lock # -- Begin function vfswrap_lock + .globl vfswrap_lock + .type vfswrap_lock,@function +vfswrap_lock: # @vfswrap_lock + .param i32, i32, i32, i64, i64, i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $5 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size vfswrap_lock, .Lfunc_end0-vfswrap_lock + # -- End function + .section .text.fcntl_lock,"ax",@progbits + .hidden fcntl_lock # -- Begin function fcntl_lock + .globl fcntl_lock + .type fcntl_lock,@function +fcntl_lock: # @fcntl_lock + .param i32, i32, i64, i64, i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $4 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size fcntl_lock, .Lfunc_end1-fcntl_lock + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20030313-1.c.s b/src/binaryen/test/torture-s/20030313-1.c.s new file mode 100644 index 0000000000..3dd1c75cb4 --- /dev/null +++ b/src/binaryen/test/torture-s/20030313-1.c.s @@ -0,0 +1,147 @@ + .text + .file "20030313-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + block + i32.const $push0=, 12 + i32.ne $push1=, $1, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.load $push2=, 0($0) + i32.const $push3=, 1 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#2: # %lor.lhs.false + i32.load $push5=, 4($0) + i32.const $push6=, 11 + i32.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#3: # %if.end5 + i32.load $push8=, 8($0) + i32.const $push9=, 2 + i32.ne $push10=, $pop8, $pop9 + br_if 0, $pop10 # 0: down to label0 +# BB#4: # %lor.lhs.false8 + i32.load $push11=, 12($0) + i32.const $push12=, 12 + i32.ne $push13=, $pop11, $pop12 + br_if 0, $pop13 # 0: down to label0 +# BB#5: # %if.end12 + i32.load $push14=, 16($0) + i32.const $push15=, 3 + i32.ne $push16=, $pop14, $pop15 + br_if 0, $pop16 # 0: down to label0 +# BB#6: # %lor.lhs.false15 + i32.load $push17=, 20($0) + i32.const $push18=, 13 + i32.ne $push19=, $pop17, $pop18 + br_if 0, $pop19 # 0: down to label0 +# BB#7: # %if.end19 + i32.load $push20=, 24($0) + i32.const $push21=, 4 + i32.ne $push22=, $pop20, $pop21 + br_if 0, $pop22 # 0: down to label0 +# BB#8: # %lor.lhs.false22 + i32.load $push23=, 28($0) + i32.const $push24=, 14 + i32.ne $push25=, $pop23, $pop24 + br_if 0, $pop25 # 0: down to label0 +# BB#9: # %if.end26 + i32.load $push26=, 32($0) + i32.const $push27=, 5 + i32.ne $push28=, $pop26, $pop27 + br_if 0, $pop28 # 0: down to label0 +# BB#10: # %lor.lhs.false29 + i32.load $push29=, 36($0) + i32.const $push30=, 15 + i32.ne $push31=, $pop29, $pop30 + br_if 0, $pop31 # 0: down to label0 +# BB#11: # %if.end33 + i32.load $push32=, 40($0) + i32.const $push33=, 6 + i32.ne $push34=, $pop32, $pop33 + br_if 0, $pop34 # 0: down to label0 +# BB#12: # %lor.lhs.false36 + i32.load $push35=, 44($0) + i32.const $push36=, 16 + i32.ne $push37=, $pop35, $pop36 + br_if 0, $pop37 # 0: down to label0 +# BB#13: # %if.end40 + return +.LBB0_14: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push15=, 0 + i32.const $push13=, 0 + i32.load $push12=, __stack_pointer($pop13) + i32.const $push14=, 160 + i32.sub $push21=, $pop12, $pop14 + tee_local $push20=, $0=, $pop21 + i32.store __stack_pointer($pop15), $pop20 + i64.const $push0=, 47244640257 + i64.store 0($0), $pop0 + i64.const $push1=, 51539607554 + i64.store 8($0), $pop1 + i32.const $push2=, 3 + i32.store 16($0), $pop2 + i32.const $push3=, 4 + i32.store 24($0), $pop3 + i32.const $push4=, 5 + i32.store 32($0), $pop4 + i32.const $push5=, 6 + i32.store 40($0), $pop5 + i32.const $push6=, 0 + i32.load $push7=, x($pop6) + i32.store 20($0), $pop7 + i32.const $push19=, 0 + i32.load $push8=, x+4($pop19) + i32.store 28($0), $pop8 + i32.const $push18=, 0 + i32.load $push9=, x+8($pop18) + i32.store 36($0), $pop9 + i32.const $push17=, 0 + i32.load $push10=, x+12($pop17) + i32.store 44($0), $pop10 + i32.const $push11=, 12 + call foo@FUNCTION, $0, $pop11 + i32.const $push16=, 0 + call exit@FUNCTION, $pop16 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 2 +x: + .int32 13 # 0xd + .int32 14 # 0xe + .int32 15 # 0xf + .int32 16 # 0x10 + .size x, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20030316-1.c.s b/src/binaryen/test/torture-s/20030316-1.c.s new file mode 100644 index 0000000000..c4cb5cc039 --- /dev/null +++ b/src/binaryen/test/torture-s/20030316-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20030316-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20030330-1.c.s b/src/binaryen/test/torture-s/20030330-1.c.s new file mode 100644 index 0000000000..566531cab7 --- /dev/null +++ b/src/binaryen/test/torture-s/20030330-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20030330-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20030401-1.c.s b/src/binaryen/test/torture-s/20030401-1.c.s new file mode 100644 index 0000000000..b580fd9f5a --- /dev/null +++ b/src/binaryen/test/torture-s/20030401-1.c.s @@ -0,0 +1,42 @@ + .text + .file "20030401-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20030403-1.c.s b/src/binaryen/test/torture-s/20030403-1.c.s new file mode 100644 index 0000000000..ce1defe2ee --- /dev/null +++ b/src/binaryen/test/torture-s/20030403-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20030403-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20030404-1.c.s b/src/binaryen/test/torture-s/20030404-1.c.s new file mode 100644 index 0000000000..32f2db5dbb --- /dev/null +++ b/src/binaryen/test/torture-s/20030404-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20030404-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end4 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20030408-1.c.s b/src/binaryen/test/torture-s/20030408-1.c.s new file mode 100644 index 0000000000..fc300361cf --- /dev/null +++ b/src/binaryen/test/torture-s/20030408-1.c.s @@ -0,0 +1,69 @@ + .text + .file "20030408-1.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size test2, .Lfunc_end1-test2 + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size test3, .Lfunc_end2-test3 + # -- End function + .section .text.test4,"ax",@progbits + .hidden test4 # -- Begin function test4 + .globl test4 + .type test4,@function +test4: # @test4 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size test4, .Lfunc_end3-test4 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20030606-1.c.s b/src/binaryen/test/torture-s/20030606-1.c.s new file mode 100644 index 0000000000..02f9fb604e --- /dev/null +++ b/src/binaryen/test/torture-s/20030606-1.c.s @@ -0,0 +1,48 @@ + .text + .file "20030606-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 55 + i32.store 0($0), $pop0 + block + i32.eqz $push7=, $1 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %if.then + i32.const $push5=, 4 + i32.add $push1=, $0, $pop5 + i32.store 0($pop1), $1 + i32.const $push2=, 8 + i32.add $push3=, $0, $pop2 + return $pop3 +.LBB0_2: + end_block # label0: + i32.const $push6=, 4 + i32.add $push4=, $0, $pop6 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20030613-1.c.s b/src/binaryen/test/torture-s/20030613-1.c.s new file mode 100644 index 0000000000..aef6a1ed03 --- /dev/null +++ b/src/binaryen/test/torture-s/20030613-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20030613-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20030626-1.c.s b/src/binaryen/test/torture-s/20030626-1.c.s new file mode 100644 index 0000000000..073087308e --- /dev/null +++ b/src/binaryen/test/torture-s/20030626-1.c.s @@ -0,0 +1,29 @@ + .text + .file "20030626-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 7303014 + i32.store buf($pop1), $pop0 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden buf # @buf + .type buf,@object + .section .bss.buf,"aw",@nobits + .globl buf + .p2align 2 +buf: + .skip 10 + .size buf, 10 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20030626-2.c.s b/src/binaryen/test/torture-s/20030626-2.c.s new file mode 100644 index 0000000000..85e8098094 --- /dev/null +++ b/src/binaryen/test/torture-s/20030626-2.c.s @@ -0,0 +1,40 @@ + .text + .file "20030626-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i64.load $push1=, .L.str.2+5($pop6):p2align=0 + i64.store buf+5($pop0):p2align=0, $pop1 + i32.const $push5=, 0 + i32.const $push4=, 0 + i64.load $push2=, .L.str.2($pop4):p2align=0 + i64.store buf($pop5), $pop2 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden buf # @buf + .type buf,@object + .section .bss.buf,"aw",@nobits + .globl buf + .p2align 4 +buf: + .skip 40 + .size buf, 40 + + .type .L.str.2,@object # @.str.2 + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str.2: + .asciz "other string" + .size .L.str.2, 13 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20030714-1.c.s b/src/binaryen/test/torture-s/20030714-1.c.s new file mode 100644 index 0000000000..13989588a5 --- /dev/null +++ b/src/binaryen/test/torture-s/20030714-1.c.s @@ -0,0 +1,183 @@ + .text + .file "20030714-1.c" + .section .text.RenderBox_setStyle,"ax",@progbits + .hidden RenderBox_setStyle # -- Begin function RenderBox_setStyle + .globl RenderBox_setStyle + .type RenderBox_setStyle,@function +RenderBox_setStyle: # @RenderBox_setStyle + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $3=, 16 + block + block + i32.const $push0=, 2 + i32.add $push1=, $1, $pop0 + i32.load8_u $push2=, 0($pop1) + i32.const $push3=, 4 + i32.and $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label1 +# BB#1: # %sw.default + block + i32.load16_u $push26=, 26($0) + tee_local $push25=, $3=, $pop26 + i32.const $push24=, 16 + i32.and $push5=, $pop25, $pop24 + i32.eqz $push32=, $pop5 + br_if 0, $pop32 # 0: down to label2 +# BB#2: # %if.then + i32.const $push6=, 26 + i32.add $push7=, $0, $pop6 + i32.const $push29=, 16 + i32.or $push28=, $3, $pop29 + tee_local $push27=, $3=, $pop28 + i32.store16 0($pop7), $pop27 +.LBB0_3: # %if.end + end_block # label2: + i32.const $push11=, 26 + i32.add $push12=, $0, $pop11 + i32.const $push9=, 65519 + i32.and $push10=, $3, $pop9 + i32.store16 0($pop12), $pop10 + i32.load $2=, 0($1) + block + i32.load $push14=, 28($0) + i32.call_indirect $push15=, $0, $pop14 + br_if 0, $pop15 # 0: down to label3 +# BB#4: # %if.end + i32.const $3=, 8 + i32.const $push13=, 1572864 + i32.and $push8=, $2, $pop13 + br_if 1, $pop8 # 1: down to label1 +.LBB0_5: # %if.else + end_block # label3: + i32.const $3=, 64 + i32.load $push16=, 0($1) + i32.const $push17=, 393216 + i32.and $push18=, $pop16, $pop17 + i32.const $push19=, 131072 + i32.ne $push20=, $pop18, $pop19 + br_if 1, $pop20 # 1: down to label0 +.LBB0_6: # %sw.epilog.sink.split + end_block # label1: + i32.const $push21=, 26 + i32.add $push31=, $0, $pop21 + tee_local $push30=, $0=, $pop31 + i32.load16_u $push22=, 0($0) + i32.or $push23=, $pop22, $3 + i32.store16 0($pop30), $pop23 +.LBB0_7: # %sw.epilog + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size RenderBox_setStyle, .Lfunc_end0-RenderBox_setStyle + # -- End function + .section .text.RenderObject_setStyle,"ax",@progbits + .hidden RenderObject_setStyle # -- Begin function RenderObject_setStyle + .globl RenderObject_setStyle + .type RenderObject_setStyle,@function +RenderObject_setStyle: # @RenderObject_setStyle + .param i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end1: + .size RenderObject_setStyle, .Lfunc_end1-RenderObject_setStyle + # -- End function + .section .text.removeFromSpecialObjects,"ax",@progbits + .hidden removeFromSpecialObjects # -- Begin function removeFromSpecialObjects + .globl removeFromSpecialObjects + .type removeFromSpecialObjects,@function +removeFromSpecialObjects: # @removeFromSpecialObjects + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end2: + .size removeFromSpecialObjects, .Lfunc_end2-removeFromSpecialObjects + # -- End function + .section .text.RenderBox_isTableCell,"ax",@progbits + .hidden RenderBox_isTableCell # -- Begin function RenderBox_isTableCell + .globl RenderBox_isTableCell + .type RenderBox_isTableCell,@function +RenderBox_isTableCell: # @RenderBox_isTableCell + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size RenderBox_isTableCell, .Lfunc_end3-RenderBox_isTableCell + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %RenderBox_setStyle.exit + i32.const $push1=, 0 + i32.const $push0=, RenderBox_isTableCell@FUNCTION + i32.store g_this+28($pop1), $pop0 + i32.const $push16=, 0 + i32.const $push15=, 0 + i32.load $push2=, g__style($pop15) + i32.const $push3=, -1966081 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 393216 + i32.or $push6=, $pop4, $pop5 + i32.store g__style($pop16), $pop6 + i32.const $push14=, 0 + i32.const $push13=, 0 + i32.load16_u $push7=, g_this+26($pop13) + i32.const $push8=, 65447 + i32.and $push9=, $pop7, $pop8 + i32.const $push10=, 16 + i32.or $push11=, $pop9, $pop10 + i32.store16 g_this+26($pop14), $pop11 + i32.const $push12=, 0 + call exit@FUNCTION, $pop12 + unreachable + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + .hidden false # @false + .type false,@object + .section .rodata.false,"a",@progbits + .globl false +false: + .int8 0 # 0x0 + .size false, 1 + + .hidden true # @true + .type true,@object + .section .rodata.true,"a",@progbits + .globl true +true: + .int8 1 # 0x1 + .size true, 1 + + .hidden g_this # @g_this + .type g_this,@object + .section .bss.g_this,"aw",@nobits + .globl g_this + .p2align 2 +g_this: + .skip 32 + .size g_this, 32 + + .hidden g__style # @g__style + .type g__style,@object + .section .bss.g__style,"aw",@nobits + .globl g__style + .p2align 2 +g__style: + .skip 4 + .size g__style, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20030715-1.c.s b/src/binaryen/test/torture-s/20030715-1.c.s new file mode 100644 index 0000000000..60e2cde85c --- /dev/null +++ b/src/binaryen/test/torture-s/20030715-1.c.s @@ -0,0 +1,98 @@ + .text + .file "20030715-1.c" + .section .text.ap_check_cmd_context,"ax",@progbits + .hidden ap_check_cmd_context # -- Begin function ap_check_cmd_context + .globl ap_check_cmd_context + .type ap_check_cmd_context,@function +ap_check_cmd_context: # @ap_check_cmd_context + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size ap_check_cmd_context, .Lfunc_end0-ap_check_cmd_context + # -- End function + .section .text.server_type,"ax",@progbits + .hidden server_type # -- Begin function server_type + .globl server_type + .type server_type,@function +server_type: # @server_type + .param i32, i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $3=, 0 + block + i32.const $push0=, .L.str + i32.call $push1=, strcmp@FUNCTION, $2, $pop0 + i32.eqz $push7=, $pop1 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %if.else + block + i32.const $push2=, .L.str.1 + i32.call $push3=, strcmp@FUNCTION, $2, $pop2 + i32.eqz $push8=, $pop3 + br_if 0, $pop8 # 0: down to label1 +# BB#2: # %cleanup + i32.const $push5=, .L.str.2 + return $pop5 +.LBB1_3: + end_block # label1: + i32.const $3=, 1 +.LBB1_4: # %if.end9 + end_block # label0: + i32.const $push6=, 0 + i32.store ap_standalone($pop6), $3 + i32.const $push4=, 0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end1: + .size server_type, .Lfunc_end1-server_type + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store ap_standalone($pop1), $pop0 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "inetd" + .size .L.str, 6 + + .hidden ap_standalone # @ap_standalone + .type ap_standalone,@object + .section .bss.ap_standalone,"aw",@nobits + .globl ap_standalone + .p2align 2 +ap_standalone: + .int32 0 # 0x0 + .size ap_standalone, 4 + + .type .L.str.1,@object # @.str.1 + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str.1: + .asciz "standalone" + .size .L.str.1, 11 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "ServerType must be either 'inetd' or 'standalone'" + .size .L.str.2, 50 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strcmp, i32, i32, i32 diff --git a/src/binaryen/test/torture-s/20030717-1.c.s b/src/binaryen/test/torture-s/20030717-1.c.s new file mode 100644 index 0000000000..2899e1f1a0 --- /dev/null +++ b/src/binaryen/test/torture-s/20030717-1.c.s @@ -0,0 +1,92 @@ + .text + .file "20030717-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 + .result i32 + .local i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.load $push28=, 4($1) + tee_local $push27=, $4=, $pop28 + i32.load $push26=, 24($0) + tee_local $push25=, $2=, $pop26 + i32.const $push24=, 20 + i32.mul $push0=, $pop25, $pop24 + i32.add $push1=, $0, $pop0 + i32.load $push2=, 12($pop1) + i32.sub $push23=, $pop27, $pop2 + tee_local $push22=, $7=, $pop23 + i32.const $push21=, 31 + i32.shr_s $push20=, $7, $pop21 + tee_local $push19=, $7=, $pop20 + i32.add $push3=, $pop22, $pop19 + i32.xor $5=, $pop3, $7 + i32.load16_u $3=, 0($1) + copy_local $1=, $2 + copy_local $7=, $2 +.LBB0_1: # %do.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + block + i32.const $push29=, 0 + i32.gt_s $push4=, $1, $pop29 + br_if 0, $pop4 # 0: down to label1 +# BB#2: # %if.then + # in Loop: Header=BB0_1 Depth=1 + i32.const $push30=, 20 + i32.add $push5=, $0, $pop30 + i32.load $1=, 0($pop5) +.LBB0_3: # %if.end + # in Loop: Header=BB0_1 Depth=1 + end_block # label1: + i32.const $push39=, -1 + i32.add $push38=, $1, $pop39 + tee_local $push37=, $1=, $pop38 + i32.const $push36=, 20 + i32.mul $push6=, $1, $pop36 + i32.add $push7=, $0, $pop6 + i32.load $push8=, 12($pop7) + i32.sub $push35=, $4, $pop8 + tee_local $push34=, $6=, $pop35 + i32.const $push33=, 31 + i32.shr_s $push32=, $6, $pop33 + tee_local $push31=, $6=, $pop32 + i32.add $push9=, $pop34, $pop31 + i32.xor $push10=, $pop9, $6 + i32.lt_u $push11=, $pop10, $5 + i32.select $7=, $pop37, $7, $pop11 + i32.ne $push12=, $1, $2 + br_if 0, $pop12 # 0: up to label0 +# BB#4: # %do.end + end_loop + i32.const $push16=, 20 + i32.mul $push17=, $7, $pop16 + i32.add $push18=, $0, $pop17 + i32.const $push13=, 9 + i32.shr_u $push14=, $3, $pop13 + i32.add $push15=, $pop14, $4 + i32.store 12($pop18), $pop15 + copy_local $push40=, $7 + # fallthrough-return: $pop40 + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %bar.exit + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20030718-1.c.s b/src/binaryen/test/torture-s/20030718-1.c.s new file mode 100644 index 0000000000..e5fa53236d --- /dev/null +++ b/src/binaryen/test/torture-s/20030718-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20030718-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20030821-1.c.s b/src/binaryen/test/torture-s/20030821-1.c.s new file mode 100644 index 0000000000..373c406f08 --- /dev/null +++ b/src/binaryen/test/torture-s/20030821-1.c.s @@ -0,0 +1,43 @@ + .text + .file "20030821-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, -2130706433 + i32.and $push1=, $0, $pop0 + i32.const $push2=, -2147418114 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20030828-1.c.s b/src/binaryen/test/torture-s/20030828-1.c.s new file mode 100644 index 0000000000..20e5fd5c35 --- /dev/null +++ b/src/binaryen/test/torture-s/20030828-1.c.s @@ -0,0 +1,59 @@ + .text + .file "20030828-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, p($pop0) + i32.load $push2=, 0($pop1) + i32.const $push3=, 1 + i32.add $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %if.end + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push10=, $pop2, $pop4 + tee_local $push9=, $0=, $pop10 + i32.store __stack_pointer($pop5), $pop9 + i32.const $push0=, 0 + i32.const $push6=, 12 + i32.add $push7=, $0, $pop6 + i32.store p($pop0), $pop7 + i32.const $push1=, 5 + i32.store 12($0), $pop1 + i32.const $push8=, 0 + call exit@FUNCTION, $pop8 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden p # @p + .type p,@object + .section .bss.p,"aw",@nobits + .globl p + .p2align 2 +p: + .int32 0 + .size p, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20030828-2.c.s b/src/binaryen/test/torture-s/20030828-2.c.s new file mode 100644 index 0000000000..27086df3b5 --- /dev/null +++ b/src/binaryen/test/torture-s/20030828-2.c.s @@ -0,0 +1,19 @@ + .text + .file "20030828-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20030903-1.c.s b/src/binaryen/test/torture-s/20030903-1.c.s new file mode 100644 index 0000000000..6c2fcef6fa --- /dev/null +++ b/src/binaryen/test/torture-s/20030903-1.c.s @@ -0,0 +1,54 @@ + .text + .file "20030903-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push6=, 0 + i32.load $push0=, test($pop6) + i32.const $push1=, -1 + i32.add $push5=, $pop0, $pop1 + tee_local $push4=, $0=, $pop5 + i32.const $push2=, 3 + i32.le_u $push3=, $pop4, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %sw.epilog + i32.const $push7=, 0 + return $pop7 +.LBB0_2: # %entry + end_block # label0: + block + br_table $0, 0, 0, 0, 0, 0 # 0: down to label1 +.LBB0_3: # %sw.bb + end_block # label1: + call y@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.y,"ax",@progbits + .type y,@function # -- Begin function y +y: # @y +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size y, .Lfunc_end1-y + # -- End function + .type test,@object # @test + .section .bss.test,"aw",@nobits + .p2align 2 +test: + .int32 0 # 0x0 + .size test, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20030909-1.c.s b/src/binaryen/test/torture-s/20030909-1.c.s new file mode 100644 index 0000000000..39f69131cb --- /dev/null +++ b/src/binaryen/test/torture-s/20030909-1.c.s @@ -0,0 +1,52 @@ + .text + .file "20030909-1.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32, i32 +# BB#0: # %entry + block + i32.eq $push0=, $0, $1 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20030910-1.c.s b/src/binaryen/test/torture-s/20030910-1.c.s new file mode 100644 index 0000000000..b827f627ae --- /dev/null +++ b/src/binaryen/test/torture-s/20030910-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20030910-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20030913-1.c.s b/src/binaryen/test/torture-s/20030913-1.c.s new file mode 100644 index 0000000000..1c605fbe33 --- /dev/null +++ b/src/binaryen/test/torture-s/20030913-1.c.s @@ -0,0 +1,59 @@ + .text + .file "20030913-1.c" + .section .text.fn2,"ax",@progbits + .hidden fn2 # -- Begin function fn2 + .globl fn2 + .type fn2,@function +fn2: # @fn2 + .param i32 +# BB#0: # %entry + i32.const $push0=, glob + i32.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size fn2, .Lfunc_end0-fn2 + # -- End function + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 42 + i32.store glob($pop1), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size test, .Lfunc_end1-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, 42 + i32.store glob($pop1), $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden glob # @glob + .type glob,@object + .section .bss.glob,"aw",@nobits + .globl glob + .p2align 2 +glob: + .int32 0 # 0x0 + .size glob, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20030914-1.c.s b/src/binaryen/test/torture-s/20030914-1.c.s new file mode 100644 index 0000000000..a02f0d2bde --- /dev/null +++ b/src/binaryen/test/torture-s/20030914-1.c.s @@ -0,0 +1,347 @@ + .text + .file "20030914-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32, i64, i64 + .local i32 +# BB#0: # %entry + i32.const $push117=, 0 + i32.const $push115=, 0 + i32.load $push114=, __stack_pointer($pop115) + i32.const $push116=, 512 + i32.sub $push278=, $pop114, $pop116 + tee_local $push277=, $5=, $pop278 + i32.store __stack_pointer($pop117), $pop277 + i32.const $push121=, 496 + i32.add $push122=, $5, $pop121 + i32.load $push0=, 0($2) + call __floatsitf@FUNCTION, $pop122, $pop0 + i32.const $push125=, 480 + i32.add $push126=, $5, $pop125 + i64.load $push4=, 496($5) + i32.const $push123=, 496 + i32.add $push124=, $5, $pop123 + i32.const $push1=, 8 + i32.add $push2=, $pop124, $pop1 + i64.load $push3=, 0($pop2) + call __addtf3@FUNCTION, $pop126, $pop4, $pop3, $3, $4 + i32.const $push127=, 464 + i32.add $push128=, $5, $pop127 + i32.load $push5=, 4($2) + call __floatsitf@FUNCTION, $pop128, $pop5 + i32.const $push133=, 448 + i32.add $push134=, $5, $pop133 + i64.load $push11=, 480($5) + i32.const $push131=, 480 + i32.add $push132=, $5, $pop131 + i32.const $push276=, 8 + i32.add $push8=, $pop132, $pop276 + i64.load $push9=, 0($pop8) + i64.load $push10=, 464($5) + i32.const $push129=, 464 + i32.add $push130=, $5, $pop129 + i32.const $push275=, 8 + i32.add $push6=, $pop130, $pop275 + i64.load $push7=, 0($pop6) + call __addtf3@FUNCTION, $pop134, $pop11, $pop9, $pop10, $pop7 + i32.const $push135=, 432 + i32.add $push136=, $5, $pop135 + i32.load $push12=, 8($2) + call __floatsitf@FUNCTION, $pop136, $pop12 + i32.const $push141=, 416 + i32.add $push142=, $5, $pop141 + i64.load $push18=, 448($5) + i32.const $push139=, 448 + i32.add $push140=, $5, $pop139 + i32.const $push274=, 8 + i32.add $push15=, $pop140, $pop274 + i64.load $push16=, 0($pop15) + i64.load $push17=, 432($5) + i32.const $push137=, 432 + i32.add $push138=, $5, $pop137 + i32.const $push273=, 8 + i32.add $push13=, $pop138, $pop273 + i64.load $push14=, 0($pop13) + call __addtf3@FUNCTION, $pop142, $pop18, $pop16, $pop17, $pop14 + i32.const $push143=, 400 + i32.add $push144=, $5, $pop143 + i32.load $push19=, 12($2) + call __floatsitf@FUNCTION, $pop144, $pop19 + i32.const $push149=, 384 + i32.add $push150=, $5, $pop149 + i64.load $push25=, 416($5) + i32.const $push147=, 416 + i32.add $push148=, $5, $pop147 + i32.const $push272=, 8 + i32.add $push22=, $pop148, $pop272 + i64.load $push23=, 0($pop22) + i64.load $push24=, 400($5) + i32.const $push145=, 400 + i32.add $push146=, $5, $pop145 + i32.const $push271=, 8 + i32.add $push20=, $pop146, $pop271 + i64.load $push21=, 0($pop20) + call __addtf3@FUNCTION, $pop150, $pop25, $pop23, $pop24, $pop21 + i32.const $push151=, 368 + i32.add $push152=, $5, $pop151 + i32.load $push26=, 16($2) + call __floatsitf@FUNCTION, $pop152, $pop26 + i32.const $push157=, 352 + i32.add $push158=, $5, $pop157 + i64.load $push32=, 384($5) + i32.const $push155=, 384 + i32.add $push156=, $5, $pop155 + i32.const $push270=, 8 + i32.add $push29=, $pop156, $pop270 + i64.load $push30=, 0($pop29) + i64.load $push31=, 368($5) + i32.const $push153=, 368 + i32.add $push154=, $5, $pop153 + i32.const $push269=, 8 + i32.add $push27=, $pop154, $pop269 + i64.load $push28=, 0($pop27) + call __addtf3@FUNCTION, $pop158, $pop32, $pop30, $pop31, $pop28 + i32.const $push159=, 336 + i32.add $push160=, $5, $pop159 + i32.load $push33=, 20($2) + call __floatsitf@FUNCTION, $pop160, $pop33 + i32.const $push165=, 320 + i32.add $push166=, $5, $pop165 + i64.load $push39=, 352($5) + i32.const $push163=, 352 + i32.add $push164=, $5, $pop163 + i32.const $push268=, 8 + i32.add $push36=, $pop164, $pop268 + i64.load $push37=, 0($pop36) + i64.load $push38=, 336($5) + i32.const $push161=, 336 + i32.add $push162=, $5, $pop161 + i32.const $push267=, 8 + i32.add $push34=, $pop162, $pop267 + i64.load $push35=, 0($pop34) + call __addtf3@FUNCTION, $pop166, $pop39, $pop37, $pop38, $pop35 + i32.const $push167=, 304 + i32.add $push168=, $5, $pop167 + i32.load $push40=, 24($2) + call __floatsitf@FUNCTION, $pop168, $pop40 + i32.const $push173=, 288 + i32.add $push174=, $5, $pop173 + i64.load $push46=, 320($5) + i32.const $push171=, 320 + i32.add $push172=, $5, $pop171 + i32.const $push266=, 8 + i32.add $push43=, $pop172, $pop266 + i64.load $push44=, 0($pop43) + i64.load $push45=, 304($5) + i32.const $push169=, 304 + i32.add $push170=, $5, $pop169 + i32.const $push265=, 8 + i32.add $push41=, $pop170, $pop265 + i64.load $push42=, 0($pop41) + call __addtf3@FUNCTION, $pop174, $pop46, $pop44, $pop45, $pop42 + i32.const $push175=, 272 + i32.add $push176=, $5, $pop175 + i32.load $push47=, 28($2) + call __floatsitf@FUNCTION, $pop176, $pop47 + i32.const $push181=, 256 + i32.add $push182=, $5, $pop181 + i64.load $push53=, 288($5) + i32.const $push179=, 288 + i32.add $push180=, $5, $pop179 + i32.const $push264=, 8 + i32.add $push50=, $pop180, $pop264 + i64.load $push51=, 0($pop50) + i64.load $push52=, 272($5) + i32.const $push177=, 272 + i32.add $push178=, $5, $pop177 + i32.const $push263=, 8 + i32.add $push48=, $pop178, $pop263 + i64.load $push49=, 0($pop48) + call __addtf3@FUNCTION, $pop182, $pop53, $pop51, $pop52, $pop49 + i32.const $push183=, 240 + i32.add $push184=, $5, $pop183 + i32.load $push54=, 32($2) + call __floatsitf@FUNCTION, $pop184, $pop54 + i32.const $push189=, 224 + i32.add $push190=, $5, $pop189 + i64.load $push60=, 256($5) + i32.const $push187=, 256 + i32.add $push188=, $5, $pop187 + i32.const $push262=, 8 + i32.add $push57=, $pop188, $pop262 + i64.load $push58=, 0($pop57) + i64.load $push59=, 240($5) + i32.const $push185=, 240 + i32.add $push186=, $5, $pop185 + i32.const $push261=, 8 + i32.add $push55=, $pop186, $pop261 + i64.load $push56=, 0($pop55) + call __addtf3@FUNCTION, $pop190, $pop60, $pop58, $pop59, $pop56 + i32.const $push191=, 208 + i32.add $push192=, $5, $pop191 + i32.load $push61=, 36($2) + call __floatsitf@FUNCTION, $pop192, $pop61 + i32.const $push197=, 192 + i32.add $push198=, $5, $pop197 + i64.load $push67=, 224($5) + i32.const $push195=, 224 + i32.add $push196=, $5, $pop195 + i32.const $push260=, 8 + i32.add $push64=, $pop196, $pop260 + i64.load $push65=, 0($pop64) + i64.load $push66=, 208($5) + i32.const $push193=, 208 + i32.add $push194=, $5, $pop193 + i32.const $push259=, 8 + i32.add $push62=, $pop194, $pop259 + i64.load $push63=, 0($pop62) + call __addtf3@FUNCTION, $pop198, $pop67, $pop65, $pop66, $pop63 + i32.const $push199=, 176 + i32.add $push200=, $5, $pop199 + i32.load $push68=, 40($2) + call __floatsitf@FUNCTION, $pop200, $pop68 + i32.const $push205=, 160 + i32.add $push206=, $5, $pop205 + i64.load $push74=, 192($5) + i32.const $push203=, 192 + i32.add $push204=, $5, $pop203 + i32.const $push258=, 8 + i32.add $push71=, $pop204, $pop258 + i64.load $push72=, 0($pop71) + i64.load $push73=, 176($5) + i32.const $push201=, 176 + i32.add $push202=, $5, $pop201 + i32.const $push257=, 8 + i32.add $push69=, $pop202, $pop257 + i64.load $push70=, 0($pop69) + call __addtf3@FUNCTION, $pop206, $pop74, $pop72, $pop73, $pop70 + i32.const $push207=, 144 + i32.add $push208=, $5, $pop207 + i32.load $push75=, 44($2) + call __floatsitf@FUNCTION, $pop208, $pop75 + i32.const $push213=, 128 + i32.add $push214=, $5, $pop213 + i64.load $push81=, 160($5) + i32.const $push211=, 160 + i32.add $push212=, $5, $pop211 + i32.const $push256=, 8 + i32.add $push78=, $pop212, $pop256 + i64.load $push79=, 0($pop78) + i64.load $push80=, 144($5) + i32.const $push209=, 144 + i32.add $push210=, $5, $pop209 + i32.const $push255=, 8 + i32.add $push76=, $pop210, $pop255 + i64.load $push77=, 0($pop76) + call __addtf3@FUNCTION, $pop214, $pop81, $pop79, $pop80, $pop77 + i32.const $push215=, 112 + i32.add $push216=, $5, $pop215 + i32.load $push82=, 48($2) + call __floatsitf@FUNCTION, $pop216, $pop82 + i32.const $push221=, 96 + i32.add $push222=, $5, $pop221 + i64.load $push88=, 128($5) + i32.const $push219=, 128 + i32.add $push220=, $5, $pop219 + i32.const $push254=, 8 + i32.add $push85=, $pop220, $pop254 + i64.load $push86=, 0($pop85) + i64.load $push87=, 112($5) + i32.const $push217=, 112 + i32.add $push218=, $5, $pop217 + i32.const $push253=, 8 + i32.add $push83=, $pop218, $pop253 + i64.load $push84=, 0($pop83) + call __addtf3@FUNCTION, $pop222, $pop88, $pop86, $pop87, $pop84 + i32.const $push223=, 80 + i32.add $push224=, $5, $pop223 + i32.load $push89=, 52($2) + call __floatsitf@FUNCTION, $pop224, $pop89 + i32.const $push229=, 64 + i32.add $push230=, $5, $pop229 + i64.load $push95=, 96($5) + i32.const $push227=, 96 + i32.add $push228=, $5, $pop227 + i32.const $push252=, 8 + i32.add $push92=, $pop228, $pop252 + i64.load $push93=, 0($pop92) + i64.load $push94=, 80($5) + i32.const $push225=, 80 + i32.add $push226=, $5, $pop225 + i32.const $push251=, 8 + i32.add $push90=, $pop226, $pop251 + i64.load $push91=, 0($pop90) + call __addtf3@FUNCTION, $pop230, $pop95, $pop93, $pop94, $pop91 + i32.const $push231=, 48 + i32.add $push232=, $5, $pop231 + i32.load $push96=, 56($2) + call __floatsitf@FUNCTION, $pop232, $pop96 + i32.const $push237=, 32 + i32.add $push238=, $5, $pop237 + i64.load $push102=, 64($5) + i32.const $push235=, 64 + i32.add $push236=, $5, $pop235 + i32.const $push250=, 8 + i32.add $push99=, $pop236, $pop250 + i64.load $push100=, 0($pop99) + i64.load $push101=, 48($5) + i32.const $push233=, 48 + i32.add $push234=, $5, $pop233 + i32.const $push249=, 8 + i32.add $push97=, $pop234, $pop249 + i64.load $push98=, 0($pop97) + call __addtf3@FUNCTION, $pop238, $pop102, $pop100, $pop101, $pop98 + i32.const $push239=, 16 + i32.add $push240=, $5, $pop239 + i32.load $push103=, 60($2) + call __floatsitf@FUNCTION, $pop240, $pop103 + i64.load $push109=, 32($5) + i32.const $push243=, 32 + i32.add $push244=, $5, $pop243 + i32.const $push248=, 8 + i32.add $push106=, $pop244, $pop248 + i64.load $push107=, 0($pop106) + i64.load $push108=, 16($5) + i32.const $push241=, 16 + i32.add $push242=, $5, $pop241 + i32.const $push247=, 8 + i32.add $push104=, $pop242, $pop247 + i64.load $push105=, 0($pop104) + call __addtf3@FUNCTION, $5, $pop109, $pop107, $pop108, $pop105 + i32.const $push246=, 8 + i32.add $push110=, $0, $pop246 + i32.const $push245=, 8 + i32.add $push111=, $5, $pop245 + i64.load $push112=, 0($pop111) + i64.store 0($pop110), $pop112 + i64.load $push113=, 0($5) + i64.store 0($0), $pop113 + i32.const $push120=, 0 + i32.const $push118=, 512 + i32.add $push119=, $5, $pop118 + i32.store __stack_pointer($pop120), $pop119 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20030914-2.c.s b/src/binaryen/test/torture-s/20030914-2.c.s new file mode 100644 index 0000000000..309e3a294b --- /dev/null +++ b/src/binaryen/test/torture-s/20030914-2.c.s @@ -0,0 +1,42 @@ + .text + .file "20030914-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden gs # @gs + .type gs,@object + .section .bss.gs,"aw",@nobits + .globl gs + .p2align 2 +gs: + .skip 72 + .size gs, 72 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20030916-1.c.s b/src/binaryen/test/torture-s/20030916-1.c.s new file mode 100644 index 0000000000..a9c9a8f756 --- /dev/null +++ b/src/binaryen/test/torture-s/20030916-1.c.s @@ -0,0 +1,138 @@ + .text + .file "20030916-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 +# BB#0: # %entry + i64.const $push0=, 0 + i64.store 0($0):p2align=2, $pop0 + i64.const $push19=, 0 + i64.store 992($0):p2align=2, $pop19 + i32.const $push1=, 24 + i32.add $push2=, $0, $pop1 + i64.const $push18=, 0 + i64.store 0($pop2):p2align=2, $pop18 + i32.const $push3=, 16 + i32.add $push4=, $0, $pop3 + i64.const $push17=, 0 + i64.store 0($pop4):p2align=2, $pop17 + i32.const $push5=, 8 + i32.add $push6=, $0, $pop5 + i64.const $push16=, 0 + i64.store 0($pop6):p2align=2, $pop16 + i32.const $push7=, 1016 + i32.add $push8=, $0, $pop7 + i64.const $push15=, 0 + i64.store 0($pop8):p2align=2, $pop15 + i32.const $push9=, 1008 + i32.add $push10=, $0, $pop9 + i64.const $push14=, 0 + i64.store 0($pop10):p2align=2, $pop14 + i32.const $push11=, 1000 + i32.add $push12=, $0, $pop11 + i64.const $push13=, 0 + i64.store 0($pop12):p2align=2, $pop13 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push22=, 0 + i32.const $push20=, 0 + i32.load $push19=, __stack_pointer($pop20) + i32.const $push21=, 1024 + i32.sub $push24=, $pop19, $pop21 + tee_local $push23=, $0=, $pop24 + i32.store __stack_pointer($pop22), $pop23 + i32.const $1=, 0 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.add $push0=, $0, $1 + i32.const $push29=, 1 + i32.store 0($pop0), $pop29 + i32.const $push28=, 4 + i32.add $push27=, $1, $pop28 + tee_local $push26=, $1=, $pop27 + i32.const $push25=, 1024 + i32.ne $push1=, $pop26, $pop25 + br_if 0, $pop1 # 0: up to label0 +# BB#2: # %for.end + end_loop + i32.const $push2=, 24 + i32.add $push3=, $0, $pop2 + i64.const $push4=, 0 + i64.store 0($pop3), $pop4 + i32.const $push5=, 16 + i32.add $push6=, $0, $pop5 + i64.const $push36=, 0 + i64.store 0($pop6), $pop36 + i32.const $push7=, 1016 + i32.add $push8=, $0, $pop7 + i64.const $push35=, 0 + i64.store 0($pop8), $pop35 + i32.const $push9=, 1008 + i32.add $push10=, $0, $pop9 + i64.const $push34=, 0 + i64.store 0($pop10), $pop34 + i32.const $push11=, 1000 + i32.add $push12=, $0, $pop11 + i64.const $push33=, 0 + i64.store 0($pop12), $pop33 + i64.const $push32=, 0 + i64.store 8($0), $pop32 + i64.const $push31=, 0 + i64.store 0($0), $pop31 + i64.const $push30=, 0 + i64.store 992($0), $pop30 + i32.const $1=, -1 + copy_local $0=, $0 +.LBB1_3: # %for.body3 + # =>This Inner Loop Header: Depth=1 + block + loop # label2: + i32.load $push15=, 0($0) + i32.const $push38=, -7 + i32.add $push13=, $1, $pop38 + i32.const $push37=, 240 + i32.lt_u $push14=, $pop13, $pop37 + i32.ne $push16=, $pop15, $pop14 + br_if 1, $pop16 # 1: down to label1 +# BB#4: # %for.cond1 + # in Loop: Header=BB1_3 Depth=1 + i32.const $push43=, 4 + i32.add $0=, $0, $pop43 + i32.const $push42=, 1 + i32.add $push41=, $1, $pop42 + tee_local $push40=, $1=, $pop41 + i32.const $push39=, 254 + i32.le_u $push17=, $pop40, $pop39 + br_if 0, $pop17 # 0: up to label2 +# BB#5: # %for.end10 + end_loop + i32.const $push18=, 0 + call exit@FUNCTION, $pop18 + unreachable +.LBB1_6: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20030920-1.c.s b/src/binaryen/test/torture-s/20030920-1.c.s new file mode 100644 index 0000000000..e3bf1f4092 --- /dev/null +++ b/src/binaryen/test/torture-s/20030920-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20030920-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end5 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20030928-1.c.s b/src/binaryen/test/torture-s/20030928-1.c.s new file mode 100644 index 0000000000..bcf297e6fd --- /dev/null +++ b/src/binaryen/test/torture-s/20030928-1.c.s @@ -0,0 +1,120 @@ + .text + .file "20030928-1.c" + .section .text.get_addrs,"ax",@progbits + .hidden get_addrs # -- Begin function get_addrs + .globl get_addrs + .type get_addrs,@function +get_addrs: # @get_addrs + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 1 + i32.shl $push2=, $pop0, $pop1 + i32.const $push3=, .L.str-131072 + i32.add $push4=, $pop2, $pop3 + i32.store 0($0), $pop4 + i32.load $push5=, 4($1) + i32.const $push39=, 1 + i32.shl $push6=, $pop5, $pop39 + i32.const $push7=, .L.str.1-262144 + i32.add $push8=, $pop6, $pop7 + i32.store 4($0), $pop8 + i32.load $push9=, 8($1) + i32.const $push38=, 1 + i32.shl $push10=, $pop9, $pop38 + i32.const $push11=, .L.str.2-393216 + i32.add $push12=, $pop10, $pop11 + i32.store 8($0), $pop12 + i32.load $push13=, 12($1) + i32.const $push37=, 1 + i32.shl $push14=, $pop13, $pop37 + i32.const $push15=, .L.str.3-524288 + i32.add $push16=, $pop14, $pop15 + i32.store 12($0), $pop16 + i32.load $push17=, 16($1) + i32.const $push36=, 1 + i32.shl $push18=, $pop17, $pop36 + i32.const $push19=, .L.str.4-655360 + i32.add $push20=, $pop18, $pop19 + i32.store 16($0), $pop20 + i32.load $push21=, 20($1) + i32.const $push35=, 1 + i32.shl $push22=, $pop21, $pop35 + i32.const $push23=, .L.str.5-786432 + i32.add $push24=, $pop22, $pop23 + i32.store 20($0), $pop24 + i32.load $push25=, 24($1) + i32.const $push34=, 1 + i32.shl $push26=, $pop25, $pop34 + i32.const $push27=, .L.str.6-917504 + i32.add $push28=, $pop26, $pop27 + i32.store 24($0), $pop28 + i32.load $push29=, 28($1) + i32.const $push33=, 1 + i32.shl $push30=, $pop29, $pop33 + i32.const $push31=, .L.str.7-1048576 + i32.add $push32=, $pop30, $pop31 + i32.store 28($0), $pop32 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size get_addrs, .Lfunc_end0-get_addrs + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %for.cond2.7 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "a1111" + .size .L.str, 6 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "a1112" + .size .L.str.1, 6 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "a1113" + .size .L.str.2, 6 + + .type .L.str.3,@object # @.str.3 +.L.str.3: + .asciz "a1114" + .size .L.str.3, 6 + + .type .L.str.4,@object # @.str.4 +.L.str.4: + .asciz "a1115" + .size .L.str.4, 6 + + .type .L.str.5,@object # @.str.5 +.L.str.5: + .asciz "a1116" + .size .L.str.5, 6 + + .type .L.str.6,@object # @.str.6 +.L.str.6: + .asciz "a1117" + .size .L.str.6, 6 + + .type .L.str.7,@object # @.str.7 +.L.str.7: + .asciz "a1118" + .size .L.str.7, 6 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20031003-1.c.s b/src/binaryen/test/torture-s/20031003-1.c.s new file mode 100644 index 0000000000..7fd4caf25e --- /dev/null +++ b/src/binaryen/test/torture-s/20031003-1.c.s @@ -0,0 +1,45 @@ + .text + .file "20031003-1.c" + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size f2, .Lfunc_end1-f2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20031010-1.c.s b/src/binaryen/test/torture-s/20031010-1.c.s new file mode 100644 index 0000000000..bfe451e303 --- /dev/null +++ b/src/binaryen/test/torture-s/20031010-1.c.s @@ -0,0 +1,64 @@ + .text + .file "20031010-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.eqz $push4=, $2 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.then + block + i32.eqz $push5=, $3 + br_if 0, $pop5 # 0: down to label1 +# BB#2: # %if.then4 + i32.select $push1=, $1, $0, $4 + i32.select $push0=, $0, $1, $4 + i32.sub $push2=, $pop1, $pop0 + return $pop2 +.LBB0_3: + end_block # label1: + i32.sub $push3=, $0, $1 + return $pop3 +.LBB0_4: # %if.end9 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push2=, 2 + i32.const $push1=, 3 + i32.const $push0=, 1 + i32.const $push6=, 1 + i32.const $push5=, 1 + i32.call $push3=, foo@FUNCTION, $pop2, $pop1, $pop0, $pop6, $pop5 + i32.eqz $push7=, $pop3 + br_if 0, $pop7 # 0: down to label2 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB1_2: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20031011-1.c.s b/src/binaryen/test/torture-s/20031011-1.c.s new file mode 100644 index 0000000000..48995f7e51 --- /dev/null +++ b/src/binaryen/test/torture-s/20031011-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20031011-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20031012-1.c.s b/src/binaryen/test/torture-s/20031012-1.c.s new file mode 100644 index 0000000000..bcbe169522 --- /dev/null +++ b/src/binaryen/test/torture-s/20031012-1.c.s @@ -0,0 +1,48 @@ + .text + .file "20031012-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 15008 + i32.sub $push16=, $pop4, $pop6 + tee_local $push15=, $2=, $pop16 + i32.store __stack_pointer($pop7), $pop15 + i32.const $push1=, 205 + i32.const $push0=, 13371 + i32.call $push14=, memset@FUNCTION, $2, $pop1, $pop0 + tee_local $push13=, $2=, $pop14 + i32.const $push12=, 0 + i32.store8 13371($pop13), $pop12 + block + i32.call $push2=, strlen@FUNCTION, $2 + i32.const $push11=, 13371 + i32.ne $push3=, $pop2, $pop11 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %foo.exit + i32.const $push10=, 0 + i32.const $push8=, 15008 + i32.add $push9=, $2, $pop8 + i32.store __stack_pointer($pop10), $pop9 + i32.const $push17=, 0 + return $pop17 +.LBB0_2: # %if.then.i + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strlen, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20031020-1.c.s b/src/binaryen/test/torture-s/20031020-1.c.s new file mode 100644 index 0000000000..21f46c15b1 --- /dev/null +++ b/src/binaryen/test/torture-s/20031020-1.c.s @@ -0,0 +1,43 @@ + .text + .file "20031020-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 1024 + i32.ge_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + call foo@FUNCTION, $pop0 + i32.const $push1=, -2147473648 + call foo@FUNCTION, $pop1 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20031201-1.c.s b/src/binaryen/test/torture-s/20031201-1.c.s new file mode 100644 index 0000000000..c9aa9fa693 --- /dev/null +++ b/src/binaryen/test/torture-s/20031201-1.c.s @@ -0,0 +1,142 @@ + .text + .file "20031201-1.c" + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store i($pop0), $0 + i32.const $push1=, 32 + i32.store 4($0), $pop1 + i32.const $push7=, 32 + i32.store 0($0), $pop7 + call f0@FUNCTION + i32.const $push6=, 0 + i32.load $push5=, i($pop6) + tee_local $push4=, $0=, $pop5 + i32.const $push2=, 8 + i32.store 4($pop4), $pop2 + i32.const $push3=, 8 + i32.store 0($0), $pop3 + call test@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + # -- End function + .section .text.f0,"ax",@progbits + .hidden f0 # -- Begin function f0 + .globl f0 + .type f0,@function +f0: # @f0 + .local i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.const $push8=, 0 + i32.load $push7=, f0.washere($pop8) + tee_local $push6=, $0=, $pop7 + i32.const $push0=, 1 + i32.add $push1=, $pop6, $pop0 + i32.store f0.washere($pop9), $pop1 + block + br_if 0, $0 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.const $push13=, 0 + i32.load $push12=, i($pop13) + tee_local $push11=, $0=, $pop12 + i32.load16_u $push2=, 0($pop11) + i32.const $push10=, 32 + i32.ne $push3=, $pop2, $pop10 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %lor.lhs.false1 + i32.load16_u $push4=, 4($0) + i32.const $push14=, 32 + i32.ne $push5=, $pop4, $pop14 + br_if 0, $pop5 # 0: down to label0 +# BB#3: # %if.end + return +.LBB1_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size f0, .Lfunc_end1-f0 + # -- End function + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .local i32 +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.load $push8=, i($pop0) + tee_local $push7=, $0=, $pop8 + i32.load16_u $push1=, 0($pop7) + i32.const $push6=, 8 + i32.ne $push2=, $pop1, $pop6 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %lor.lhs.false + i32.load16_u $push3=, 4($0) + i32.const $push9=, 8 + i32.ne $push4=, $pop3, $pop9 + br_if 0, $pop4 # 0: down to label1 +# BB#2: # %if.end + i32.const $push5=, 0 + call exit@FUNCTION, $pop5 + unreachable +.LBB2_3: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size test, .Lfunc_end2-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push3=, 0 + i32.const $push1=, 0 + i32.load $push0=, __stack_pointer($pop1) + i32.const $push2=, 16 + i32.sub $push7=, $pop0, $pop2 + tee_local $push6=, $0=, $pop7 + i32.store __stack_pointer($pop3), $pop6 + i32.const $push4=, 8 + i32.add $push5=, $0, $pop4 + i32.call $drop=, f1@FUNCTION, $pop5 + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .type i,@object # @i + .section .bss.i,"aw",@nobits + .p2align 2 +i: + .int32 0 + .size i, 4 + + .type f0.washere,@object # @f0.washere + .section .bss.f0.washere,"aw",@nobits + .p2align 2 +f0.washere: + .int32 0 # 0x0 + .size f0.washere, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20031204-1.c.s b/src/binaryen/test/torture-s/20031204-1.c.s new file mode 100644 index 0000000000..e79dce1722 --- /dev/null +++ b/src/binaryen/test/torture-s/20031204-1.c.s @@ -0,0 +1,263 @@ + .text + .file "20031204-1.c" + .section .text.in_aton,"ax",@progbits + .hidden in_aton # -- Begin function in_aton + .globl in_aton + .type in_aton,@function +in_aton: # @in_aton + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 168496141 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size in_aton, .Lfunc_end0-in_aton + # -- End function + .section .text.root_nfs_parse_addr,"ax",@progbits + .hidden root_nfs_parse_addr # -- Begin function root_nfs_parse_addr + .globl root_nfs_parse_addr + .type root_nfs_parse_addr,@function +root_nfs_parse_addr: # @root_nfs_parse_addr + .param i32 + .result i32 + .local i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $1=, 0 + copy_local $4=, $0 +.LBB1_1: # %while.body + # =>This Loop Header: Depth=1 + # Child Loop BB1_2 Depth 2 + block + block + loop # label2: + i32.const $5=, 0 + copy_local $6=, $4 +.LBB1_2: # %while.cond1 + # Parent Loop BB1_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label3: + copy_local $push30=, $6 + tee_local $push29=, $7=, $pop30 + i32.const $push28=, 1 + i32.add $6=, $pop29, $pop28 + i32.add $3=, $4, $5 + i32.const $push27=, 1 + i32.add $push26=, $5, $pop27 + tee_local $push25=, $2=, $pop26 + copy_local $5=, $pop25 + i32.load8_u $push24=, 0($3) + tee_local $push23=, $3=, $pop24 + i32.const $push22=, -48 + i32.add $push1=, $pop23, $pop22 + i32.const $push21=, 255 + i32.and $push2=, $pop1, $pop21 + i32.const $push20=, 10 + i32.lt_u $push3=, $pop2, $pop20 + br_if 0, $pop3 # 0: up to label3 +# BB#3: # %while.end + # in Loop: Header=BB1_1 Depth=1 + end_loop + block + i32.const $push31=, 1 + i32.eq $push4=, $2, $pop31 + br_if 0, $pop4 # 0: down to label4 +# BB#4: # %lor.lhs.false + # in Loop: Header=BB1_1 Depth=1 + i32.add $push35=, $4, $2 + tee_local $push34=, $5=, $pop35 + i32.const $push33=, -1 + i32.add $push0=, $pop34, $pop33 + i32.sub $push5=, $pop0, $4 + i32.const $push32=, 4 + i32.ge_s $push6=, $pop5, $pop32 + br_if 2, $pop6 # 2: down to label1 +# BB#5: # %if.end + # in Loop: Header=BB1_1 Depth=1 + copy_local $4=, $5 + i32.const $push41=, 3 + i32.eq $push7=, $1, $pop41 + i32.const $push40=, 255 + i32.and $push8=, $3, $pop40 + i32.const $push39=, 46 + i32.eq $push9=, $pop8, $pop39 + i32.or $push10=, $pop7, $pop9 + i32.add $push38=, $1, $pop10 + tee_local $push37=, $1=, $pop38 + i32.const $push36=, 4 + i32.lt_s $push11=, $pop37, $pop36 + br_if 1, $pop11 # 1: up to label2 + br 3 # 3: down to label0 +.LBB1_6: + end_block # label4: + end_loop + copy_local $7=, $4 + br 1 # 1: down to label0 +.LBB1_7: # %lor.lhs.false.while.end25_crit_edge + end_block # label1: + i32.add $push12=, $4, $2 + i32.const $push13=, -1 + i32.add $7=, $pop12, $pop13 +.LBB1_8: # %while.end25 + end_block # label0: + i32.const $5=, -1 + block + i32.const $push14=, 4 + i32.ne $push15=, $1, $pop14 + br_if 0, $pop15 # 0: down to label5 +# BB#9: # %land.lhs.true + block + i32.load8_u $push43=, 0($7) + tee_local $push42=, $6=, $pop43 + i32.eqz $push44=, $pop42 + br_if 0, $pop44 # 0: down to label6 +# BB#10: # %land.lhs.true + i32.const $push16=, 58 + i32.ne $push17=, $6, $pop16 + br_if 1, $pop17 # 1: down to label5 +# BB#11: # %if.then39 + i32.const $push18=, 0 + i32.store8 0($7), $pop18 + i32.const $push19=, 1 + i32.add $7=, $7, $pop19 +.LBB1_12: # %if.end41 + end_block # label6: + i32.call $drop=, strcpy@FUNCTION, $0, $7 + i32.const $5=, 168496141 +.LBB1_13: # %if.end43 + end_block # label5: + copy_local $push45=, $5 + # fallthrough-return: $pop45 + .endfunc +.Lfunc_end1: + .size root_nfs_parse_addr, .Lfunc_end1-root_nfs_parse_addr + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $0=, 0 + i32.const $3=, main.addr +.LBB2_1: # %while.body.i + # =>This Loop Header: Depth=1 + # Child Loop BB2_2 Depth 2 + block + block + loop # label9: + i32.const $4=, 0 + copy_local $5=, $3 +.LBB2_2: # %while.cond1.i + # Parent Loop BB2_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label10: + copy_local $push32=, $5 + tee_local $push31=, $6=, $pop32 + i32.const $push30=, 1 + i32.add $5=, $pop31, $pop30 + i32.add $2=, $3, $4 + i32.const $push29=, 1 + i32.add $push28=, $4, $pop29 + tee_local $push27=, $1=, $pop28 + copy_local $4=, $pop27 + i32.load8_u $push26=, 0($2) + tee_local $push25=, $2=, $pop26 + i32.const $push24=, -48 + i32.add $push1=, $pop25, $pop24 + i32.const $push23=, 255 + i32.and $push2=, $pop1, $pop23 + i32.const $push22=, 10 + i32.lt_u $push3=, $pop2, $pop22 + br_if 0, $pop3 # 0: up to label10 +# BB#3: # %while.end.i + # in Loop: Header=BB2_1 Depth=1 + end_loop + block + i32.const $push33=, 1 + i32.eq $push4=, $1, $pop33 + br_if 0, $pop4 # 0: down to label11 +# BB#4: # %lor.lhs.false.i + # in Loop: Header=BB2_1 Depth=1 + i32.add $push37=, $3, $1 + tee_local $push36=, $4=, $pop37 + i32.const $push35=, -1 + i32.add $push0=, $pop36, $pop35 + i32.sub $push5=, $pop0, $3 + i32.const $push34=, 4 + i32.ge_s $push6=, $pop5, $pop34 + br_if 2, $pop6 # 2: down to label8 +# BB#5: # %if.end.i + # in Loop: Header=BB2_1 Depth=1 + copy_local $3=, $4 + i32.const $push43=, 3 + i32.eq $push7=, $0, $pop43 + i32.const $push42=, 255 + i32.and $push8=, $2, $pop42 + i32.const $push41=, 46 + i32.eq $push9=, $pop8, $pop41 + i32.or $push10=, $pop7, $pop9 + i32.add $push40=, $0, $pop10 + tee_local $push39=, $0=, $pop40 + i32.const $push38=, 4 + i32.lt_s $push11=, $pop39, $pop38 + br_if 1, $pop11 # 1: up to label9 + br 3 # 3: down to label7 +.LBB2_6: + end_block # label11: + end_loop + copy_local $6=, $3 + br 1 # 1: down to label7 +.LBB2_7: # %lor.lhs.false.i.while.end25.i_crit_edge + end_block # label8: + i32.add $push12=, $3, $1 + i32.const $push13=, -1 + i32.add $6=, $pop12, $pop13 +.LBB2_8: # %while.end25.i + end_block # label7: + block + i32.const $push14=, 4 + i32.ne $push15=, $0, $pop14 + br_if 0, $pop15 # 0: down to label12 +# BB#9: # %land.lhs.true.i + block + i32.load8_u $push45=, 0($6) + tee_local $push44=, $4=, $pop45 + i32.eqz $push46=, $pop44 + br_if 0, $pop46 # 0: down to label13 +# BB#10: # %land.lhs.true.i + i32.const $push16=, 58 + i32.ne $push17=, $4, $pop16 + br_if 1, $pop17 # 1: down to label12 +# BB#11: # %if.then39.i + i32.const $push18=, 0 + i32.store8 0($6), $pop18 + i32.const $push19=, 1 + i32.add $6=, $6, $pop19 +.LBB2_12: # %if.end + end_block # label13: + i32.const $push20=, main.addr + i32.call $drop=, strcpy@FUNCTION, $pop20, $6 + i32.const $push21=, 0 + return $pop21 +.LBB2_13: # %if.then + end_block # label12: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type main.addr,@object # @main.addr + .section .data.main.addr,"aw",@progbits + .p2align 4 +main.addr: + .asciz "10.11.12.13:/hello" + .size main.addr, 19 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strcpy, i32, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20031211-1.c.s b/src/binaryen/test/torture-s/20031211-1.c.s new file mode 100644 index 0000000000..f3a3817544 --- /dev/null +++ b/src/binaryen/test/torture-s/20031211-1.c.s @@ -0,0 +1,31 @@ + .text + .file "20031211-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 48879 + i32.store x($pop1), $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 2 +x: + .int32 0 # 0x0 + .size x, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20031211-2.c.s b/src/binaryen/test/torture-s/20031211-2.c.s new file mode 100644 index 0000000000..937179a7cb --- /dev/null +++ b/src/binaryen/test/torture-s/20031211-2.c.s @@ -0,0 +1,42 @@ + .text + .file "20031211-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 3 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return $0 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20031214-1.c.s b/src/binaryen/test/torture-s/20031214-1.c.s new file mode 100644 index 0000000000..60583fbab8 --- /dev/null +++ b/src/binaryen/test/torture-s/20031214-1.c.s @@ -0,0 +1,68 @@ + .text + .file "20031214-1.c" + .section .text.b,"ax",@progbits + .hidden b # -- Begin function b + .globl b + .type b,@function +b: # @b + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size b, .Lfunc_end0-b + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push17=, 0 + i32.load $push16=, k($pop17) + tee_local $push15=, $1=, $pop16 + i32.const $push14=, 0 + i32.load $push13=, g+8($pop14) + tee_local $push12=, $0=, $pop13 + i32.gt_s $push1=, $1, $0 + i32.select $push11=, $pop15, $pop12, $pop1 + tee_local $push10=, $1=, $pop11 + i32.const $push9=, 0 + i32.load $push8=, g+12($pop9) + tee_local $push7=, $0=, $pop8 + i32.gt_s $push2=, $1, $0 + i32.select $push3=, $pop10, $pop7, $pop2 + i32.const $push4=, 1 + i32.add $push5=, $pop3, $pop4 + i32.store k($pop0), $pop5 + i32.const $push6=, 0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden g # @g + .type g,@object + .section .data.g,"aw",@progbits + .globl g + .p2align 3 +g: + .int64 0 # double 0 + .int32 1 # 0x1 + .int32 2 # 0x2 + .size g, 16 + + .hidden k # @k + .type k,@object + .section .bss.k,"aw",@nobits + .globl k + .p2align 2 +k: + .int32 0 # 0x0 + .size k, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20031215-1.c.s b/src/binaryen/test/torture-s/20031215-1.c.s new file mode 100644 index 0000000000..bf3c8a7b75 --- /dev/null +++ b/src/binaryen/test/torture-s/20031215-1.c.s @@ -0,0 +1,71 @@ + .text + .file "20031215-1.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end1: + .size test2, .Lfunc_end1-test2 + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end2: + .size test3, .Lfunc_end2-test3 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden ao # @ao + .type ao,@object + .section .rodata.ao,"a",@progbits + .globl ao + .p2align 2 +ao: + .int32 2 # 0x2 + .int32 2 # 0x2 + .asciz "OK" + .skip 1 + .size ao, 12 + + .hidden a # @a + .type a,@object + .section .rodata.a,"a",@progbits + .globl a + .p2align 2 +a: + .int32 ao + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20031216-1.c.s b/src/binaryen/test/torture-s/20031216-1.c.s new file mode 100644 index 0000000000..730d386d7e --- /dev/null +++ b/src/binaryen/test/torture-s/20031216-1.c.s @@ -0,0 +1,52 @@ + .text + .file "20031216-1.c" + .section .text.DisplayNumber,"ax",@progbits + .hidden DisplayNumber # -- Begin function DisplayNumber + .globl DisplayNumber + .type DisplayNumber,@function +DisplayNumber: # @DisplayNumber + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 154 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size DisplayNumber, .Lfunc_end0-DisplayNumber + # -- End function + .section .text.ReadNumber,"ax",@progbits + .hidden ReadNumber # -- Begin function ReadNumber + .globl ReadNumber + .type ReadNumber,@function +ReadNumber: # @ReadNumber + .result i32 +# BB#0: # %entry + i32.const $push0=, 10092544 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size ReadNumber, .Lfunc_end1-ReadNumber + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20040208-1.c.s b/src/binaryen/test/torture-s/20040208-1.c.s new file mode 100644 index 0000000000..5a4a44e8b2 --- /dev/null +++ b/src/binaryen/test/torture-s/20040208-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20040208-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20040218-1.c.s b/src/binaryen/test/torture-s/20040218-1.c.s new file mode 100644 index 0000000000..45ae2cff2e --- /dev/null +++ b/src/binaryen/test/torture-s/20040218-1.c.s @@ -0,0 +1,110 @@ + .text + .file "20040218-1.c" + .section .text.xb,"ax",@progbits + .hidden xb # -- Begin function xb + .globl xb + .type xb,@function +xb: # @xb + .param i32 + .result i32 +# BB#0: # %entry + i32.load8_u $push1=, 0($0) + i32.load $push0=, 4($0) + i32.add $push2=, $pop1, $pop0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size xb, .Lfunc_end0-xb + # -- End function + .section .text.xw,"ax",@progbits + .hidden xw # -- Begin function xw + .globl xw + .type xw,@function +xw: # @xw + .param i32 + .result i32 +# BB#0: # %entry + i32.load16_u $push1=, 0($0) + i32.load $push0=, 4($0) + i32.add $push2=, $pop1, $pop0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size xw, .Lfunc_end1-xw + # -- End function + .section .text.yb,"ax",@progbits + .hidden yb # -- Begin function yb + .globl yb + .type yb,@function +yb: # @yb + .param i32 + .result i32 +# BB#0: # %entry + i32.load8_u $push1=, 0($0) + i32.load16_u $push0=, 2($0) + i32.add $push2=, $pop1, $pop0 + i32.const $push3=, 16 + i32.shl $push4=, $pop2, $pop3 + i32.const $push6=, 16 + i32.shr_s $push5=, $pop4, $pop6 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end2: + .size yb, .Lfunc_end2-yb + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push15=, 0 + i32.const $push13=, 0 + i32.load $push12=, __stack_pointer($pop13) + i32.const $push14=, 16 + i32.sub $push23=, $pop12, $pop14 + tee_local $push22=, $0=, $pop23 + i32.store __stack_pointer($pop15), $pop22 + i64.const $push0=, 68723771703295 + i64.store 8($0), $pop0 + i32.const $push1=, 1048641535 + i32.store 4($0), $pop1 + block + i32.const $push16=, 8 + i32.add $push17=, $0, $pop16 + i32.call $push3=, xb@FUNCTION, $pop17 + i32.const $push2=, 16255 + i32.ne $push4=, $pop3, $pop2 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.const $push18=, 8 + i32.add $push19=, $0, $pop18 + i32.call $push6=, xw@FUNCTION, $pop19 + i32.const $push5=, 81535 + i32.ne $push7=, $pop6, $pop5 + br_if 0, $pop7 # 0: down to label0 +# BB#2: # %lor.lhs.false4 + i32.const $push20=, 4 + i32.add $push21=, $0, $pop20 + i32.call $push9=, yb@FUNCTION, $pop21 + i32.const $push8=, 16255 + i32.ne $push10=, $pop9, $pop8 + br_if 0, $pop10 # 0: down to label0 +# BB#3: # %if.end + i32.const $push11=, 0 + call exit@FUNCTION, $pop11 + unreachable +.LBB3_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20040223-1.c.s b/src/binaryen/test/torture-s/20040223-1.c.s new file mode 100644 index 0000000000..7f5cea4e89 --- /dev/null +++ b/src/binaryen/test/torture-s/20040223-1.c.s @@ -0,0 +1,39 @@ + .text + .file "20040223-1.c" + .section .text.a,"ax",@progbits + .hidden a # -- Begin function a + .globl a + .type a,@function +a: # @a + .param i32, i32 +# BB#0: # %entry + block + i32.const $push0=, 1234 + i32.ne $push1=, $1, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size a, .Lfunc_end0-a + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20040307-1.c.s b/src/binaryen/test/torture-s/20040307-1.c.s new file mode 100644 index 0000000000..79161e9714 --- /dev/null +++ b/src/binaryen/test/torture-s/20040307-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20040307-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end6 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20040309-1.c.s b/src/binaryen/test/torture-s/20040309-1.c.s new file mode 100644 index 0000000000..09e55059a9 --- /dev/null +++ b/src/binaryen/test/torture-s/20040309-1.c.s @@ -0,0 +1,37 @@ + .text + .file "20040309-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 16 + i32.shl $push3=, $0, $pop2 + i32.const $push4=, 31 + i32.shr_s $push5=, $pop3, $pop4 + i32.const $push0=, 32768 + i32.xor $push1=, $0, $pop0 + i32.and $push6=, $pop5, $pop1 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end16 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20040311-1.c.s b/src/binaryen/test/torture-s/20040311-1.c.s new file mode 100644 index 0000000000..3276104e6b --- /dev/null +++ b/src/binaryen/test/torture-s/20040311-1.c.s @@ -0,0 +1,77 @@ + .text + .file "20040311-1.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size test2, .Lfunc_end1-test2 + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size test3, .Lfunc_end2-test3 + # -- End function + .section .text.test4,"ax",@progbits + .hidden test4 # -- Begin function test4 + .globl test4 + .type test4,@function +test4: # @test4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end3: + .size test4, .Lfunc_end3-test4 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end44 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20040313-1.c.s b/src/binaryen/test/torture-s/20040313-1.c.s new file mode 100644 index 0000000000..497bddb233 --- /dev/null +++ b/src/binaryen/test/torture-s/20040313-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20040313-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20040319-1.c.s b/src/binaryen/test/torture-s/20040319-1.c.s new file mode 100644 index 0000000000..66da61b824 --- /dev/null +++ b/src/binaryen/test/torture-s/20040319-1.c.s @@ -0,0 +1,38 @@ + .text + .file "20040319-1.c" + .section .text.blah,"ax",@progbits + .hidden blah # -- Begin function blah + .globl blah + .type blah,@function +blah: # @blah + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push4=, 1 + i32.const $push2=, 0 + i32.sub $push3=, $pop2, $0 + i32.const $push0=, -1 + i32.gt_s $push1=, $0, $pop0 + i32.select $push5=, $pop4, $pop3, $pop1 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size blah, .Lfunc_end0-blah + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.else + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20040331-1.c.s b/src/binaryen/test/torture-s/20040331-1.c.s new file mode 100644 index 0000000000..256f74ed2d --- /dev/null +++ b/src/binaryen/test/torture-s/20040331-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20040331-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20040409-1.c.s b/src/binaryen/test/torture-s/20040409-1.c.s new file mode 100644 index 0000000000..083a5f07b0 --- /dev/null +++ b/src/binaryen/test/torture-s/20040409-1.c.s @@ -0,0 +1,247 @@ + .text + .file "20040409-1.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test1u,"ax",@progbits + .hidden test1u # -- Begin function test1u + .globl test1u + .type test1u,@function +test1u: # @test1u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size test1u, .Lfunc_end1-test1u + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + i32.or $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size test2, .Lfunc_end2-test2 + # -- End function + .section .text.test2u,"ax",@progbits + .hidden test2u # -- Begin function test2u + .globl test2u + .type test2u,@function +test2u: # @test2u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end3: + .size test2u, .Lfunc_end3-test2u + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end4: + .size test3, .Lfunc_end4-test3 + # -- End function + .section .text.test3u,"ax",@progbits + .hidden test3u # -- Begin function test3u + .globl test3u + .type test3u,@function +test3u: # @test3u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end5: + .size test3u, .Lfunc_end5-test3u + # -- End function + .section .text.test4,"ax",@progbits + .hidden test4 # -- Begin function test4 + .globl test4 + .type test4,@function +test4: # @test4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end6: + .size test4, .Lfunc_end6-test4 + # -- End function + .section .text.test4u,"ax",@progbits + .hidden test4u # -- Begin function test4u + .globl test4u + .type test4u,@function +test4u: # @test4u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end7: + .size test4u, .Lfunc_end7-test4u + # -- End function + .section .text.test5,"ax",@progbits + .hidden test5 # -- Begin function test5 + .globl test5 + .type test5,@function +test5: # @test5 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + i32.or $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end8: + .size test5, .Lfunc_end8-test5 + # -- End function + .section .text.test5u,"ax",@progbits + .hidden test5u # -- Begin function test5u + .globl test5u + .type test5u,@function +test5u: # @test5u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end9: + .size test5u, .Lfunc_end9-test5u + # -- End function + .section .text.test6,"ax",@progbits + .hidden test6 # -- Begin function test6 + .globl test6 + .type test6,@function +test6: # @test6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end10: + .size test6, .Lfunc_end10-test6 + # -- End function + .section .text.test6u,"ax",@progbits + .hidden test6u # -- Begin function test6u + .globl test6u + .type test6u,@function +test6u: # @test6u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end11: + .size test6u, .Lfunc_end11-test6u + # -- End function + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32, i32 +# BB#0: # %entry + block + i32.const $push4=, -2147483648 + i32.xor $push0=, $0, $pop4 + i32.ne $push1=, $pop0, $1 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push5=, -2147483648 + i32.or $push2=, $0, $pop5 + i32.ne $push3=, $pop2, $1 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %if.end20 + return +.LBB12_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end12: + .size test, .Lfunc_end12-test + # -- End function + .section .text.testu,"ax",@progbits + .hidden testu # -- Begin function testu + .globl testu + .type testu,@function +testu: # @testu + .param i32, i32 +# BB#0: # %entry + block + i32.const $push0=, -2147483648 + i32.xor $push1=, $0, $pop0 + i32.ne $push2=, $pop1, $1 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %if.end20 + return +.LBB13_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end13: + .size testu, .Lfunc_end13-testu + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end14: + .size main, .Lfunc_end14-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20040409-2.c.s b/src/binaryen/test/torture-s/20040409-2.c.s new file mode 100644 index 0000000000..be57483f64 --- /dev/null +++ b/src/binaryen/test/torture-s/20040409-2.c.s @@ -0,0 +1,437 @@ + .text + .file "20040409-2.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test1u,"ax",@progbits + .hidden test1u # -- Begin function test1u + .globl test1u + .type test1u,@function +test1u: # @test1u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size test1u, .Lfunc_end1-test1u + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size test2, .Lfunc_end2-test2 + # -- End function + .section .text.test2u,"ax",@progbits + .hidden test2u # -- Begin function test2u + .globl test2u + .type test2u,@function +test2u: # @test2u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end3: + .size test2u, .Lfunc_end3-test2u + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + i32.or $push1=, $0, $pop0 + i32.const $push2=, 4660 + i32.xor $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end4: + .size test3, .Lfunc_end4-test3 + # -- End function + .section .text.test3u,"ax",@progbits + .hidden test3u # -- Begin function test3u + .globl test3u + .type test3u,@function +test3u: # @test3u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end5: + .size test3u, .Lfunc_end5-test3u + # -- End function + .section .text.test4,"ax",@progbits + .hidden test4 # -- Begin function test4 + .globl test4 + .type test4,@function +test4: # @test4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + i32.or $push1=, $0, $pop0 + i32.const $push2=, 4660 + i32.xor $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end6: + .size test4, .Lfunc_end6-test4 + # -- End function + .section .text.test4u,"ax",@progbits + .hidden test4u # -- Begin function test4u + .globl test4u + .type test4u,@function +test4u: # @test4u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end7: + .size test4u, .Lfunc_end7-test4u + # -- End function + .section .text.test5,"ax",@progbits + .hidden test5 # -- Begin function test5 + .globl test5 + .type test5,@function +test5: # @test5 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end8: + .size test5, .Lfunc_end8-test5 + # -- End function + .section .text.test5u,"ax",@progbits + .hidden test5u # -- Begin function test5u + .globl test5u + .type test5u,@function +test5u: # @test5u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end9: + .size test5u, .Lfunc_end9-test5u + # -- End function + .section .text.test6,"ax",@progbits + .hidden test6 # -- Begin function test6 + .globl test6 + .type test6,@function +test6: # @test6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end10: + .size test6, .Lfunc_end10-test6 + # -- End function + .section .text.test6u,"ax",@progbits + .hidden test6u # -- Begin function test6u + .globl test6u + .type test6u,@function +test6u: # @test6u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end11: + .size test6u, .Lfunc_end11-test6u + # -- End function + .section .text.test7,"ax",@progbits + .hidden test7 # -- Begin function test7 + .globl test7 + .type test7,@function +test7: # @test7 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end12: + .size test7, .Lfunc_end12-test7 + # -- End function + .section .text.test7u,"ax",@progbits + .hidden test7u # -- Begin function test7u + .globl test7u + .type test7u,@function +test7u: # @test7u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end13: + .size test7u, .Lfunc_end13-test7u + # -- End function + .section .text.test8,"ax",@progbits + .hidden test8 # -- Begin function test8 + .globl test8 + .type test8,@function +test8: # @test8 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end14: + .size test8, .Lfunc_end14-test8 + # -- End function + .section .text.test8u,"ax",@progbits + .hidden test8u # -- Begin function test8u + .globl test8u + .type test8u,@function +test8u: # @test8u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end15: + .size test8u, .Lfunc_end15-test8u + # -- End function + .section .text.test9,"ax",@progbits + .hidden test9 # -- Begin function test9 + .globl test9 + .type test9,@function +test9: # @test9 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + i32.or $push1=, $0, $pop0 + i32.const $push2=, 4660 + i32.xor $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end16: + .size test9, .Lfunc_end16-test9 + # -- End function + .section .text.test9u,"ax",@progbits + .hidden test9u # -- Begin function test9u + .globl test9u + .type test9u,@function +test9u: # @test9u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end17: + .size test9u, .Lfunc_end17-test9u + # -- End function + .section .text.test10,"ax",@progbits + .hidden test10 # -- Begin function test10 + .globl test10 + .type test10,@function +test10: # @test10 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + i32.or $push1=, $0, $pop0 + i32.const $push2=, 4660 + i32.xor $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end18: + .size test10, .Lfunc_end18-test10 + # -- End function + .section .text.test10u,"ax",@progbits + .hidden test10u # -- Begin function test10u + .globl test10u + .type test10u,@function +test10u: # @test10u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end19: + .size test10u, .Lfunc_end19-test10u + # -- End function + .section .text.test11,"ax",@progbits + .hidden test11 # -- Begin function test11 + .globl test11 + .type test11,@function +test11: # @test11 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end20: + .size test11, .Lfunc_end20-test11 + # -- End function + .section .text.test11u,"ax",@progbits + .hidden test11u # -- Begin function test11u + .globl test11u + .type test11u,@function +test11u: # @test11u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end21: + .size test11u, .Lfunc_end21-test11u + # -- End function + .section .text.test12,"ax",@progbits + .hidden test12 # -- Begin function test12 + .globl test12 + .type test12,@function +test12: # @test12 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end22: + .size test12, .Lfunc_end22-test12 + # -- End function + .section .text.test12u,"ax",@progbits + .hidden test12u # -- Begin function test12u + .globl test12u + .type test12u,@function +test12u: # @test12u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end23: + .size test12u, .Lfunc_end23-test12u + # -- End function + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32, i32 +# BB#0: # %entry + block + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + i32.ne $push2=, $pop1, $1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end4 + i32.const $push3=, -2147483648 + i32.or $push4=, $0, $pop3 + i32.const $push5=, 4660 + i32.xor $push6=, $pop4, $pop5 + i32.ne $push7=, $pop6, $1 + br_if 0, $pop7 # 0: down to label0 +# BB#2: # %if.end44 + return +.LBB24_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end24: + .size test, .Lfunc_end24-test + # -- End function + .section .text.testu,"ax",@progbits + .hidden testu # -- Begin function testu + .globl testu + .type testu,@function +testu: # @testu + .param i32, i32 +# BB#0: # %entry + block + i32.const $push0=, -2147478988 + i32.xor $push1=, $0, $pop0 + i32.ne $push2=, $pop1, $1 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %if.end44 + return +.LBB25_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end25: + .size testu, .Lfunc_end25-testu + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end26: + .size main, .Lfunc_end26-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20040409-3.c.s b/src/binaryen/test/torture-s/20040409-3.c.s new file mode 100644 index 0000000000..8a6c346ca0 --- /dev/null +++ b/src/binaryen/test/torture-s/20040409-3.c.s @@ -0,0 +1,253 @@ + .text + .file "20040409-3.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2147483647 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test1u,"ax",@progbits + .hidden test1u # -- Begin function test1u + .globl test1u + .type test1u,@function +test1u: # @test1u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2147483647 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size test1u, .Lfunc_end1-test1u + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -1 + i32.xor $push1=, $0, $pop0 + i32.const $push2=, 2147483647 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size test2, .Lfunc_end2-test2 + # -- End function + .section .text.test2u,"ax",@progbits + .hidden test2u # -- Begin function test2u + .globl test2u + .type test2u,@function +test2u: # @test2u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2147483647 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end3: + .size test2u, .Lfunc_end3-test2u + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2147483647 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end4: + .size test3, .Lfunc_end4-test3 + # -- End function + .section .text.test3u,"ax",@progbits + .hidden test3u # -- Begin function test3u + .globl test3u + .type test3u,@function +test3u: # @test3u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2147483647 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end5: + .size test3u, .Lfunc_end5-test3u + # -- End function + .section .text.test4,"ax",@progbits + .hidden test4 # -- Begin function test4 + .globl test4 + .type test4,@function +test4: # @test4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2147483647 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end6: + .size test4, .Lfunc_end6-test4 + # -- End function + .section .text.test4u,"ax",@progbits + .hidden test4u # -- Begin function test4u + .globl test4u + .type test4u,@function +test4u: # @test4u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2147483647 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end7: + .size test4u, .Lfunc_end7-test4u + # -- End function + .section .text.test5,"ax",@progbits + .hidden test5 # -- Begin function test5 + .globl test5 + .type test5,@function +test5: # @test5 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -1 + i32.xor $push1=, $0, $pop0 + i32.const $push2=, 2147483647 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end8: + .size test5, .Lfunc_end8-test5 + # -- End function + .section .text.test5u,"ax",@progbits + .hidden test5u # -- Begin function test5u + .globl test5u + .type test5u,@function +test5u: # @test5u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2147483647 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end9: + .size test5u, .Lfunc_end9-test5u + # -- End function + .section .text.test6,"ax",@progbits + .hidden test6 # -- Begin function test6 + .globl test6 + .type test6,@function +test6: # @test6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2147483647 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end10: + .size test6, .Lfunc_end10-test6 + # -- End function + .section .text.test6u,"ax",@progbits + .hidden test6u # -- Begin function test6u + .globl test6u + .type test6u,@function +test6u: # @test6u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2147483647 + i32.xor $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end11: + .size test6u, .Lfunc_end11-test6u + # -- End function + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32, i32 +# BB#0: # %entry + block + i32.const $push6=, 2147483647 + i32.xor $push0=, $0, $pop6 + i32.ne $push1=, $pop0, $1 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push2=, -1 + i32.xor $push3=, $0, $pop2 + i32.const $push7=, 2147483647 + i32.and $push4=, $pop3, $pop7 + i32.ne $push5=, $pop4, $1 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end20 + return +.LBB12_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end12: + .size test, .Lfunc_end12-test + # -- End function + .section .text.testu,"ax",@progbits + .hidden testu # -- Begin function testu + .globl testu + .type testu,@function +testu: # @testu + .param i32, i32 +# BB#0: # %entry + block + i32.const $push0=, 2147483647 + i32.xor $push1=, $0, $pop0 + i32.ne $push2=, $pop1, $1 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %if.end20 + return +.LBB13_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end13: + .size testu, .Lfunc_end13-testu + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end14: + .size main, .Lfunc_end14-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20040411-1.c.s b/src/binaryen/test/torture-s/20040411-1.c.s new file mode 100644 index 0000000000..3a4eeffca5 --- /dev/null +++ b/src/binaryen/test/torture-s/20040411-1.c.s @@ -0,0 +1,40 @@ + .text + .file "20040411-1.c" + .section .text.sub1,"ax",@progbits + .hidden sub1 # -- Begin function sub1 + .globl sub1 + .type sub1,@function +sub1: # @sub1 + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.add $push9=, $0, $pop0 + tee_local $push8=, $0=, $pop9 + i32.const $push7=, 2 + i32.shl $push4=, $pop8, $pop7 + i32.const $push2=, 12 + i32.mul $push3=, $0, $pop2 + i32.const $push6=, 2 + i32.eq $push1=, $1, $pop6 + i32.select $push5=, $pop4, $pop3, $pop1 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size sub1, .Lfunc_end0-sub1 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20040625-1.c.s b/src/binaryen/test/torture-s/20040625-1.c.s new file mode 100644 index 0000000000..e8b91b0867 --- /dev/null +++ b/src/binaryen/test/torture-s/20040625-1.c.s @@ -0,0 +1,62 @@ + .text + .file "20040625-1.c" + .section .text.maybe_next,"ax",@progbits + .hidden maybe_next # -- Begin function maybe_next + .globl maybe_next + .type maybe_next,@function +maybe_next: # @maybe_next + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.eqz $push0=, $1 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.then + i32.load $0=, 0($0):p2align=0 +.LBB0_2: # %if.end + end_block # label0: + copy_local $push1=, $0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size maybe_next, .Lfunc_end0-maybe_next + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push11=, $pop4, $pop6 + tee_local $push10=, $0=, $pop11 + i32.store __stack_pointer($pop7), $pop10 + i32.store 8($0), $0 + block + i32.const $push8=, 8 + i32.add $push9=, $0, $pop8 + i32.const $push0=, 1 + i32.call $push1=, maybe_next@FUNCTION, $pop9, $pop0 + i32.ne $push2=, $pop1, $0 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %if.end + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable +.LBB1_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20040629-1.c.s b/src/binaryen/test/torture-s/20040629-1.c.s new file mode 100644 index 0000000000..43ee1e38c5 --- /dev/null +++ b/src/binaryen/test/torture-s/20040629-1.c.s @@ -0,0 +1,3574 @@ + .text + .file "20040629-1.c" + .section .text.ret1,"ax",@progbits + .hidden ret1 # -- Begin function ret1 + .globl ret1 + .type ret1,@function +ret1: # @ret1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, b($pop0) + i32.const $push2=, 63 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size ret1, .Lfunc_end0-ret1 + # -- End function + .section .text.ret2,"ax",@progbits + .hidden ret2 # -- Begin function ret2 + .globl ret2 + .type ret2,@function +ret2: # @ret2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, b($pop0) + i32.const $push2=, 6 + i32.shr_u $push3=, $pop1, $pop2 + i32.const $push4=, 2047 + i32.and $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end1: + .size ret2, .Lfunc_end1-ret2 + # -- End function + .section .text.ret3,"ax",@progbits + .hidden ret3 # -- Begin function ret3 + .globl ret3 + .type ret3,@function +ret3: # @ret3 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, b($pop0) + i32.const $push2=, 17 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size ret3, .Lfunc_end2-ret3 + # -- End function + .section .text.ret4,"ax",@progbits + .hidden ret4 # -- Begin function ret4 + .globl ret4 + .type ret4,@function +ret4: # @ret4 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, c($pop0) + i32.const $push2=, 31 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end3: + .size ret4, .Lfunc_end3-ret4 + # -- End function + .section .text.ret5,"ax",@progbits + .hidden ret5 # -- Begin function ret5 + .globl ret5 + .type ret5,@function +ret5: # @ret5 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, c($pop0) + i32.const $push2=, 5 + i32.shr_u $push3=, $pop1, $pop2 + i32.const $push4=, 1 + i32.and $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end4: + .size ret5, .Lfunc_end4-ret5 + # -- End function + .section .text.ret6,"ax",@progbits + .hidden ret6 # -- Begin function ret6 + .globl ret6 + .type ret6,@function +ret6: # @ret6 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, c($pop0) + i32.const $push2=, 6 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end5: + .size ret6, .Lfunc_end5-ret6 + # -- End function + .section .text.ret7,"ax",@progbits + .hidden ret7 # -- Begin function ret7 + .globl ret7 + .type ret7,@function +ret7: # @ret7 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, d($pop0) + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end6: + .size ret7, .Lfunc_end6-ret7 + # -- End function + .section .text.ret8,"ax",@progbits + .hidden ret8 # -- Begin function ret8 + .globl ret8 + .type ret8,@function +ret8: # @ret8 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, d+2($pop0) + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end7: + .size ret8, .Lfunc_end7-ret8 + # -- End function + .section .text.ret9,"ax",@progbits + .hidden ret9 # -- Begin function ret9 + .globl ret9 + .type ret9,@function +ret9: # @ret9 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, d+3($pop0) + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end8: + .size ret9, .Lfunc_end8-ret9 + # -- End function + .section .text.fn1_1,"ax",@progbits + .hidden fn1_1 # -- Begin function fn1_1 + .globl fn1_1 + .type fn1_1,@function +fn1_1: # @fn1_1 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, b($pop9) + tee_local $push7=, $1=, $pop8 + i32.add $push3=, $pop7, $0 + i32.const $push4=, 63 + i32.and $push5=, $pop3, $pop4 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end9: + .size fn1_1, .Lfunc_end9-fn1_1 + # -- End function + .section .text.fn2_1,"ax",@progbits + .hidden fn2_1 # -- Begin function fn2_1 + .globl fn2_1 + .type fn2_1,@function +fn2_1: # @fn2_1 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, b($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 6 + i32.shl $push4=, $0, $pop3 + i32.add $push5=, $pop9, $pop4 + i32.const $push6=, 131008 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store b($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end10: + .size fn2_1, .Lfunc_end10-fn2_1 + # -- End function + .section .text.fn3_1,"ax",@progbits + .hidden fn3_1 # -- Begin function fn3_1 + .globl fn3_1 + .type fn3_1,@function +fn3_1: # @fn3_1 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, b($pop5) + i32.const $push0=, 17 + i32.shl $push1=, $0, $pop0 + i32.add $push4=, $pop3, $pop1 + i32.store b($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end11: + .size fn3_1, .Lfunc_end11-fn3_1 + # -- End function + .section .text.fn4_1,"ax",@progbits + .hidden fn4_1 # -- Begin function fn4_1 + .globl fn4_1 + .type fn4_1,@function +fn4_1: # @fn4_1 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, c($pop9) + tee_local $push7=, $1=, $pop8 + i32.add $push3=, $pop7, $0 + i32.const $push4=, 31 + i32.and $push5=, $pop3, $pop4 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store c($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end12: + .size fn4_1, .Lfunc_end12-fn4_1 + # -- End function + .section .text.fn5_1,"ax",@progbits + .hidden fn5_1 # -- Begin function fn5_1 + .globl fn5_1 + .type fn5_1,@function +fn5_1: # @fn5_1 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, c($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 5 + i32.shl $push4=, $0, $pop3 + i32.add $push5=, $pop9, $pop4 + i32.const $push6=, 32 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, -33 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store c($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end13: + .size fn5_1, .Lfunc_end13-fn5_1 + # -- End function + .section .text.fn6_1,"ax",@progbits + .hidden fn6_1 # -- Begin function fn6_1 + .globl fn6_1 + .type fn6_1,@function +fn6_1: # @fn6_1 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, c($pop5) + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.add $push4=, $pop3, $pop1 + i32.store c($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end14: + .size fn6_1, .Lfunc_end14-fn6_1 + # -- End function + .section .text.fn7_1,"ax",@progbits + .hidden fn7_1 # -- Begin function fn7_1 + .globl fn7_1 + .type fn7_1,@function +fn7_1: # @fn7_1 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load $push1=, d($pop3) + i32.add $push2=, $pop1, $0 + i32.store16 d($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end15: + .size fn7_1, .Lfunc_end15-fn7_1 + # -- End function + .section .text.fn8_1,"ax",@progbits + .hidden fn8_1 # -- Begin function fn8_1 + .globl fn8_1 + .type fn8_1,@function +fn8_1: # @fn8_1 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push7=, 0 + i32.load $push3=, d($pop7) + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + i32.add $push4=, $pop3, $pop1 + i32.const $push6=, 16 + i32.shr_u $push5=, $pop4, $pop6 + i32.store8 d+2($pop2), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end16: + .size fn8_1, .Lfunc_end16-fn8_1 + # -- End function + .section .text.fn9_1,"ax",@progbits + .hidden fn9_1 # -- Begin function fn9_1 + .globl fn9_1 + .type fn9_1,@function +fn9_1: # @fn9_1 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, d($pop5) + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.add $push4=, $pop3, $pop1 + i32.store d($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end17: + .size fn9_1, .Lfunc_end17-fn9_1 + # -- End function + .section .text.fn1_2,"ax",@progbits + .hidden fn1_2 # -- Begin function fn1_2 + .globl fn1_2 + .type fn1_2,@function +fn1_2: # @fn1_2 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 1 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 63 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end18: + .size fn1_2, .Lfunc_end18-fn1_2 + # -- End function + .section .text.fn2_2,"ax",@progbits + .hidden fn2_2 # -- Begin function fn2_2 + .globl fn2_2 + .type fn2_2,@function +fn2_2: # @fn2_2 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 64 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 131008 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end19: + .size fn2_2, .Lfunc_end19-fn2_2 + # -- End function + .section .text.fn3_2,"ax",@progbits + .hidden fn3_2 # -- Begin function fn3_2 + .globl fn3_2 + .type fn3_2,@function +fn3_2: # @fn3_2 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 131072 + i32.add $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end20: + .size fn3_2, .Lfunc_end20-fn3_2 + # -- End function + .section .text.fn4_2,"ax",@progbits + .hidden fn4_2 # -- Begin function fn4_2 + .globl fn4_2 + .type fn4_2,@function +fn4_2: # @fn4_2 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 1 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 31 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end21: + .size fn4_2, .Lfunc_end21-fn4_2 + # -- End function + .section .text.fn5_2,"ax",@progbits + .hidden fn5_2 # -- Begin function fn5_2 + .globl fn5_2 + .type fn5_2,@function +fn5_2: # @fn5_2 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end22: + .size fn5_2, .Lfunc_end22-fn5_2 + # -- End function + .section .text.fn6_2,"ax",@progbits + .hidden fn6_2 # -- Begin function fn6_2 + .globl fn6_2 + .type fn6_2,@function +fn6_2: # @fn6_2 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 64 + i32.add $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end23: + .size fn6_2, .Lfunc_end23-fn6_2 + # -- End function + .section .text.fn7_2,"ax",@progbits + .hidden fn7_2 # -- Begin function fn7_2 + .globl fn7_2 + .type fn7_2,@function +fn7_2: # @fn7_2 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store16 d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end24: + .size fn7_2, .Lfunc_end24-fn7_2 + # -- End function + .section .text.fn8_2,"ax",@progbits + .hidden fn8_2 # -- Begin function fn8_2 + .globl fn8_2 + .type fn8_2,@function +fn8_2: # @fn8_2 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, d($pop6) + i32.const $push2=, 65536 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 16 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 d+2($pop0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end25: + .size fn8_2, .Lfunc_end25-fn8_2 + # -- End function + .section .text.fn9_2,"ax",@progbits + .hidden fn9_2 # -- Begin function fn9_2 + .globl fn9_2 + .type fn9_2,@function +fn9_2: # @fn9_2 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 16777216 + i32.add $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end26: + .size fn9_2, .Lfunc_end26-fn9_2 + # -- End function + .section .text.fn1_3,"ax",@progbits + .hidden fn1_3 # -- Begin function fn1_3 + .globl fn1_3 + .type fn1_3,@function +fn1_3: # @fn1_3 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 1 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 63 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end27: + .size fn1_3, .Lfunc_end27-fn1_3 + # -- End function + .section .text.fn2_3,"ax",@progbits + .hidden fn2_3 # -- Begin function fn2_3 + .globl fn2_3 + .type fn2_3,@function +fn2_3: # @fn2_3 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 64 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 131008 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end28: + .size fn2_3, .Lfunc_end28-fn2_3 + # -- End function + .section .text.fn3_3,"ax",@progbits + .hidden fn3_3 # -- Begin function fn3_3 + .globl fn3_3 + .type fn3_3,@function +fn3_3: # @fn3_3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 131072 + i32.add $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end29: + .size fn3_3, .Lfunc_end29-fn3_3 + # -- End function + .section .text.fn4_3,"ax",@progbits + .hidden fn4_3 # -- Begin function fn4_3 + .globl fn4_3 + .type fn4_3,@function +fn4_3: # @fn4_3 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 1 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 31 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end30: + .size fn4_3, .Lfunc_end30-fn4_3 + # -- End function + .section .text.fn5_3,"ax",@progbits + .hidden fn5_3 # -- Begin function fn5_3 + .globl fn5_3 + .type fn5_3,@function +fn5_3: # @fn5_3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end31: + .size fn5_3, .Lfunc_end31-fn5_3 + # -- End function + .section .text.fn6_3,"ax",@progbits + .hidden fn6_3 # -- Begin function fn6_3 + .globl fn6_3 + .type fn6_3,@function +fn6_3: # @fn6_3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 64 + i32.add $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end32: + .size fn6_3, .Lfunc_end32-fn6_3 + # -- End function + .section .text.fn7_3,"ax",@progbits + .hidden fn7_3 # -- Begin function fn7_3 + .globl fn7_3 + .type fn7_3,@function +fn7_3: # @fn7_3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store16 d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end33: + .size fn7_3, .Lfunc_end33-fn7_3 + # -- End function + .section .text.fn8_3,"ax",@progbits + .hidden fn8_3 # -- Begin function fn8_3 + .globl fn8_3 + .type fn8_3,@function +fn8_3: # @fn8_3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, d($pop6) + i32.const $push2=, 65536 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 16 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 d+2($pop0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end34: + .size fn8_3, .Lfunc_end34-fn8_3 + # -- End function + .section .text.fn9_3,"ax",@progbits + .hidden fn9_3 # -- Begin function fn9_3 + .globl fn9_3 + .type fn9_3,@function +fn9_3: # @fn9_3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 16777216 + i32.add $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end35: + .size fn9_3, .Lfunc_end35-fn9_3 + # -- End function + .section .text.fn1_4,"ax",@progbits + .hidden fn1_4 # -- Begin function fn1_4 + .globl fn1_4 + .type fn1_4,@function +fn1_4: # @fn1_4 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, b($pop9) + tee_local $push7=, $1=, $pop8 + i32.sub $push3=, $pop7, $0 + i32.const $push4=, 63 + i32.and $push5=, $pop3, $pop4 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end36: + .size fn1_4, .Lfunc_end36-fn1_4 + # -- End function + .section .text.fn2_4,"ax",@progbits + .hidden fn2_4 # -- Begin function fn2_4 + .globl fn2_4 + .type fn2_4,@function +fn2_4: # @fn2_4 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, b($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 6 + i32.shl $push4=, $0, $pop3 + i32.sub $push5=, $pop9, $pop4 + i32.const $push6=, 131008 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store b($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end37: + .size fn2_4, .Lfunc_end37-fn2_4 + # -- End function + .section .text.fn3_4,"ax",@progbits + .hidden fn3_4 # -- Begin function fn3_4 + .globl fn3_4 + .type fn3_4,@function +fn3_4: # @fn3_4 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, b($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 17 + i32.shl $push4=, $0, $pop3 + i32.sub $push5=, $pop9, $pop4 + i32.const $push6=, -131072 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, 131071 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store b($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end38: + .size fn3_4, .Lfunc_end38-fn3_4 + # -- End function + .section .text.fn4_4,"ax",@progbits + .hidden fn4_4 # -- Begin function fn4_4 + .globl fn4_4 + .type fn4_4,@function +fn4_4: # @fn4_4 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, c($pop9) + tee_local $push7=, $1=, $pop8 + i32.sub $push3=, $pop7, $0 + i32.const $push4=, 31 + i32.and $push5=, $pop3, $pop4 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store c($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end39: + .size fn4_4, .Lfunc_end39-fn4_4 + # -- End function + .section .text.fn5_4,"ax",@progbits + .hidden fn5_4 # -- Begin function fn5_4 + .globl fn5_4 + .type fn5_4,@function +fn5_4: # @fn5_4 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, c($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 5 + i32.shl $push4=, $0, $pop3 + i32.sub $push5=, $pop9, $pop4 + i32.const $push6=, 32 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, -33 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store c($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end40: + .size fn5_4, .Lfunc_end40-fn5_4 + # -- End function + .section .text.fn6_4,"ax",@progbits + .hidden fn6_4 # -- Begin function fn6_4 + .globl fn6_4 + .type fn6_4,@function +fn6_4: # @fn6_4 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, c($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 6 + i32.shl $push4=, $0, $pop3 + i32.sub $push5=, $pop9, $pop4 + i32.const $push6=, -64 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, 63 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store c($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end41: + .size fn6_4, .Lfunc_end41-fn6_4 + # -- End function + .section .text.fn7_4,"ax",@progbits + .hidden fn7_4 # -- Begin function fn7_4 + .globl fn7_4 + .type fn7_4,@function +fn7_4: # @fn7_4 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load $push1=, d($pop3) + i32.sub $push2=, $pop1, $0 + i32.store16 d($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end42: + .size fn7_4, .Lfunc_end42-fn7_4 + # -- End function + .section .text.fn8_4,"ax",@progbits + .hidden fn8_4 # -- Begin function fn8_4 + .globl fn8_4 + .type fn8_4,@function +fn8_4: # @fn8_4 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push7=, 0 + i32.load $push3=, d($pop7) + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + i32.sub $push4=, $pop3, $pop1 + i32.const $push6=, 16 + i32.shr_u $push5=, $pop4, $pop6 + i32.store8 d+2($pop2), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end43: + .size fn8_4, .Lfunc_end43-fn8_4 + # -- End function + .section .text.fn9_4,"ax",@progbits + .hidden fn9_4 # -- Begin function fn9_4 + .globl fn9_4 + .type fn9_4,@function +fn9_4: # @fn9_4 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push7=, 0 + i32.load $push3=, d($pop7) + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.sub $push4=, $pop3, $pop1 + i32.const $push6=, 24 + i32.shr_u $push5=, $pop4, $pop6 + i32.store8 d+3($pop2), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end44: + .size fn9_4, .Lfunc_end44-fn9_4 + # -- End function + .section .text.fn1_5,"ax",@progbits + .hidden fn1_5 # -- Begin function fn1_5 + .globl fn1_5 + .type fn1_5,@function +fn1_5: # @fn1_5 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 63 + i32.add $push4=, $pop8, $pop3 + i32.const $push7=, 63 + i32.and $push5=, $pop4, $pop7 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end45: + .size fn1_5, .Lfunc_end45-fn1_5 + # -- End function + .section .text.fn2_5,"ax",@progbits + .hidden fn2_5 # -- Begin function fn2_5 + .globl fn2_5 + .type fn2_5,@function +fn2_5: # @fn2_5 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 131008 + i32.add $push4=, $pop8, $pop3 + i32.const $push7=, 131008 + i32.and $push5=, $pop4, $pop7 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end46: + .size fn2_5, .Lfunc_end46-fn2_5 + # -- End function + .section .text.fn3_5,"ax",@progbits + .hidden fn3_5 # -- Begin function fn3_5 + .globl fn3_5 + .type fn3_5,@function +fn3_5: # @fn3_5 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, -131072 + i32.add $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end47: + .size fn3_5, .Lfunc_end47-fn3_5 + # -- End function + .section .text.fn4_5,"ax",@progbits + .hidden fn4_5 # -- Begin function fn4_5 + .globl fn4_5 + .type fn4_5,@function +fn4_5: # @fn4_5 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 31 + i32.add $push4=, $pop8, $pop3 + i32.const $push7=, 31 + i32.and $push5=, $pop4, $pop7 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store c($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end48: + .size fn4_5, .Lfunc_end48-fn4_5 + # -- End function + .section .text.fn5_5,"ax",@progbits + .hidden fn5_5 # -- Begin function fn5_5 + .globl fn5_5 + .type fn5_5,@function +fn5_5: # @fn5_5 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end49: + .size fn5_5, .Lfunc_end49-fn5_5 + # -- End function + .section .text.fn6_5,"ax",@progbits + .hidden fn6_5 # -- Begin function fn6_5 + .globl fn6_5 + .type fn6_5,@function +fn6_5: # @fn6_5 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, -64 + i32.add $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end50: + .size fn6_5, .Lfunc_end50-fn6_5 + # -- End function + .section .text.fn7_5,"ax",@progbits + .hidden fn7_5 # -- Begin function fn7_5 + .globl fn7_5 + .type fn7_5,@function +fn7_5: # @fn7_5 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 65535 + i32.add $push3=, $pop1, $pop2 + i32.store16 d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end51: + .size fn7_5, .Lfunc_end51-fn7_5 + # -- End function + .section .text.fn8_5,"ax",@progbits + .hidden fn8_5 # -- Begin function fn8_5 + .globl fn8_5 + .type fn8_5,@function +fn8_5: # @fn8_5 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, d($pop6) + i32.const $push2=, 16711680 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 16 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 d+2($pop0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end52: + .size fn8_5, .Lfunc_end52-fn8_5 + # -- End function + .section .text.fn9_5,"ax",@progbits + .hidden fn9_5 # -- Begin function fn9_5 + .globl fn9_5 + .type fn9_5,@function +fn9_5: # @fn9_5 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, -16777216 + i32.add $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end53: + .size fn9_5, .Lfunc_end53-fn9_5 + # -- End function + .section .text.fn1_6,"ax",@progbits + .hidden fn1_6 # -- Begin function fn1_6 + .globl fn1_6 + .type fn1_6,@function +fn1_6: # @fn1_6 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 63 + i32.add $push4=, $pop8, $pop3 + i32.const $push7=, 63 + i32.and $push5=, $pop4, $pop7 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end54: + .size fn1_6, .Lfunc_end54-fn1_6 + # -- End function + .section .text.fn2_6,"ax",@progbits + .hidden fn2_6 # -- Begin function fn2_6 + .globl fn2_6 + .type fn2_6,@function +fn2_6: # @fn2_6 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 131008 + i32.add $push4=, $pop8, $pop3 + i32.const $push7=, 131008 + i32.and $push5=, $pop4, $pop7 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end55: + .size fn2_6, .Lfunc_end55-fn2_6 + # -- End function + .section .text.fn3_6,"ax",@progbits + .hidden fn3_6 # -- Begin function fn3_6 + .globl fn3_6 + .type fn3_6,@function +fn3_6: # @fn3_6 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, -131072 + i32.add $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end56: + .size fn3_6, .Lfunc_end56-fn3_6 + # -- End function + .section .text.fn4_6,"ax",@progbits + .hidden fn4_6 # -- Begin function fn4_6 + .globl fn4_6 + .type fn4_6,@function +fn4_6: # @fn4_6 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 31 + i32.add $push4=, $pop8, $pop3 + i32.const $push7=, 31 + i32.and $push5=, $pop4, $pop7 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store c($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end57: + .size fn4_6, .Lfunc_end57-fn4_6 + # -- End function + .section .text.fn5_6,"ax",@progbits + .hidden fn5_6 # -- Begin function fn5_6 + .globl fn5_6 + .type fn5_6,@function +fn5_6: # @fn5_6 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end58: + .size fn5_6, .Lfunc_end58-fn5_6 + # -- End function + .section .text.fn6_6,"ax",@progbits + .hidden fn6_6 # -- Begin function fn6_6 + .globl fn6_6 + .type fn6_6,@function +fn6_6: # @fn6_6 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, -64 + i32.add $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end59: + .size fn6_6, .Lfunc_end59-fn6_6 + # -- End function + .section .text.fn7_6,"ax",@progbits + .hidden fn7_6 # -- Begin function fn7_6 + .globl fn7_6 + .type fn7_6,@function +fn7_6: # @fn7_6 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 65535 + i32.add $push3=, $pop1, $pop2 + i32.store16 d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end60: + .size fn7_6, .Lfunc_end60-fn7_6 + # -- End function + .section .text.fn8_6,"ax",@progbits + .hidden fn8_6 # -- Begin function fn8_6 + .globl fn8_6 + .type fn8_6,@function +fn8_6: # @fn8_6 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, d($pop6) + i32.const $push2=, 16711680 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 16 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 d+2($pop0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end61: + .size fn8_6, .Lfunc_end61-fn8_6 + # -- End function + .section .text.fn9_6,"ax",@progbits + .hidden fn9_6 # -- Begin function fn9_6 + .globl fn9_6 + .type fn9_6,@function +fn9_6: # @fn9_6 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, -16777216 + i32.add $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end62: + .size fn9_6, .Lfunc_end62-fn9_6 + # -- End function + .section .text.fn1_7,"ax",@progbits + .hidden fn1_7 # -- Begin function fn1_7 + .globl fn1_7 + .type fn1_7,@function +fn1_7: # @fn1_7 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push0=, -64 + i32.or $push1=, $0, $pop0 + i32.const $push5=, 0 + i32.load $push3=, b($pop5) + i32.and $push4=, $pop1, $pop3 + i32.store b($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end63: + .size fn1_7, .Lfunc_end63-fn1_7 + # -- End function + .section .text.fn2_7,"ax",@progbits + .hidden fn2_7 # -- Begin function fn2_7 + .globl fn2_7 + .type fn2_7,@function +fn2_7: # @fn2_7 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, -131009 + i32.or $push3=, $pop1, $pop2 + i32.const $push7=, 0 + i32.load $push5=, b($pop7) + i32.and $push6=, $pop3, $pop5 + i32.store b($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end64: + .size fn2_7, .Lfunc_end64-fn2_7 + # -- End function + .section .text.fn3_7,"ax",@progbits + .hidden fn3_7 # -- Begin function fn3_7 + .globl fn3_7 + .type fn3_7,@function +fn3_7: # @fn3_7 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, b($pop7) + i32.const $push0=, 17 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 131071 + i32.or $push3=, $pop1, $pop2 + i32.and $push6=, $pop5, $pop3 + i32.store b($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end65: + .size fn3_7, .Lfunc_end65-fn3_7 + # -- End function + .section .text.fn4_7,"ax",@progbits + .hidden fn4_7 # -- Begin function fn4_7 + .globl fn4_7 + .type fn4_7,@function +fn4_7: # @fn4_7 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push0=, -32 + i32.or $push1=, $0, $pop0 + i32.const $push5=, 0 + i32.load $push3=, c($pop5) + i32.and $push4=, $pop1, $pop3 + i32.store c($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end66: + .size fn4_7, .Lfunc_end66-fn4_7 + # -- End function + .section .text.fn5_7,"ax",@progbits + .hidden fn5_7 # -- Begin function fn5_7 + .globl fn5_7 + .type fn5_7,@function +fn5_7: # @fn5_7 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push0=, 5 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, -33 + i32.or $push3=, $pop1, $pop2 + i32.const $push7=, 0 + i32.load $push5=, c($pop7) + i32.and $push6=, $pop3, $pop5 + i32.store c($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end67: + .size fn5_7, .Lfunc_end67-fn5_7 + # -- End function + .section .text.fn6_7,"ax",@progbits + .hidden fn6_7 # -- Begin function fn6_7 + .globl fn6_7 + .type fn6_7,@function +fn6_7: # @fn6_7 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, c($pop7) + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 63 + i32.or $push3=, $pop1, $pop2 + i32.and $push6=, $pop5, $pop3 + i32.store c($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end68: + .size fn6_7, .Lfunc_end68-fn6_7 + # -- End function + .section .text.fn7_7,"ax",@progbits + .hidden fn7_7 # -- Begin function fn7_7 + .globl fn7_7 + .type fn7_7,@function +fn7_7: # @fn7_7 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push0=, -65536 + i32.or $push1=, $0, $pop0 + i32.const $push5=, 0 + i32.load $push3=, d($pop5) + i32.and $push4=, $pop1, $pop3 + i32.store d($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end69: + .size fn7_7, .Lfunc_end69-fn7_7 + # -- End function + .section .text.fn8_7,"ax",@progbits + .hidden fn8_7 # -- Begin function fn8_7 + .globl fn8_7 + .type fn8_7,@function +fn8_7: # @fn8_7 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, -16711681 + i32.or $push3=, $pop1, $pop2 + i32.const $push7=, 0 + i32.load $push5=, d($pop7) + i32.and $push6=, $pop3, $pop5 + i32.store d($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end70: + .size fn8_7, .Lfunc_end70-fn8_7 + # -- End function + .section .text.fn9_7,"ax",@progbits + .hidden fn9_7 # -- Begin function fn9_7 + .globl fn9_7 + .type fn9_7,@function +fn9_7: # @fn9_7 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, d($pop7) + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 16777215 + i32.or $push3=, $pop1, $pop2 + i32.and $push6=, $pop5, $pop3 + i32.store d($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end71: + .size fn9_7, .Lfunc_end71-fn9_7 + # -- End function + .section .text.fn1_8,"ax",@progbits + .hidden fn1_8 # -- Begin function fn1_8 + .globl fn1_8 + .type fn1_8,@function +fn1_8: # @fn1_8 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, b($pop5) + i32.const $push0=, 63 + i32.and $push1=, $0, $pop0 + i32.or $push4=, $pop3, $pop1 + i32.store b($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end72: + .size fn1_8, .Lfunc_end72-fn1_8 + # -- End function + .section .text.fn2_8,"ax",@progbits + .hidden fn2_8 # -- Begin function fn2_8 + .globl fn2_8 + .type fn2_8,@function +fn2_8: # @fn2_8 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, b($pop7) + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 131008 + i32.and $push3=, $pop1, $pop2 + i32.or $push6=, $pop5, $pop3 + i32.store b($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end73: + .size fn2_8, .Lfunc_end73-fn2_8 + # -- End function + .section .text.fn3_8,"ax",@progbits + .hidden fn3_8 # -- Begin function fn3_8 + .globl fn3_8 + .type fn3_8,@function +fn3_8: # @fn3_8 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push11=, 0 + i32.load $push10=, b($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, -131072 + i32.and $push4=, $pop9, $pop3 + i32.const $push0=, 17 + i32.shl $push1=, $0, $pop0 + i32.or $push5=, $pop4, $pop1 + i32.const $push6=, 131071 + i32.and $push7=, $1, $pop6 + i32.or $push8=, $pop5, $pop7 + i32.store b($pop2), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end74: + .size fn3_8, .Lfunc_end74-fn3_8 + # -- End function + .section .text.fn4_8,"ax",@progbits + .hidden fn4_8 # -- Begin function fn4_8 + .globl fn4_8 + .type fn4_8,@function +fn4_8: # @fn4_8 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, c($pop5) + i32.const $push0=, 31 + i32.and $push1=, $0, $pop0 + i32.or $push4=, $pop3, $pop1 + i32.store c($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end75: + .size fn4_8, .Lfunc_end75-fn4_8 + # -- End function + .section .text.fn5_8,"ax",@progbits + .hidden fn5_8 # -- Begin function fn5_8 + .globl fn5_8 + .type fn5_8,@function +fn5_8: # @fn5_8 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, c($pop7) + i32.const $push0=, 5 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 32 + i32.and $push3=, $pop1, $pop2 + i32.or $push6=, $pop5, $pop3 + i32.store c($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end76: + .size fn5_8, .Lfunc_end76-fn5_8 + # -- End function + .section .text.fn6_8,"ax",@progbits + .hidden fn6_8 # -- Begin function fn6_8 + .globl fn6_8 + .type fn6_8,@function +fn6_8: # @fn6_8 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push11=, 0 + i32.load $push10=, c($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, -64 + i32.and $push4=, $pop9, $pop3 + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.or $push5=, $pop4, $pop1 + i32.const $push6=, 63 + i32.and $push7=, $1, $pop6 + i32.or $push8=, $pop5, $pop7 + i32.store c($pop2), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end77: + .size fn6_8, .Lfunc_end77-fn6_8 + # -- End function + .section .text.fn7_8,"ax",@progbits + .hidden fn7_8 # -- Begin function fn7_8 + .globl fn7_8 + .type fn7_8,@function +fn7_8: # @fn7_8 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, d($pop5) + i32.const $push0=, 65535 + i32.and $push1=, $0, $pop0 + i32.or $push4=, $pop3, $pop1 + i32.store d($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end78: + .size fn7_8, .Lfunc_end78-fn7_8 + # -- End function + .section .text.fn8_8,"ax",@progbits + .hidden fn8_8 # -- Begin function fn8_8 + .globl fn8_8 + .type fn8_8,@function +fn8_8: # @fn8_8 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, d($pop7) + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 16711680 + i32.and $push3=, $pop1, $pop2 + i32.or $push6=, $pop5, $pop3 + i32.store d($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end79: + .size fn8_8, .Lfunc_end79-fn8_8 + # -- End function + .section .text.fn9_8,"ax",@progbits + .hidden fn9_8 # -- Begin function fn9_8 + .globl fn9_8 + .type fn9_8,@function +fn9_8: # @fn9_8 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push7=, 0 + i32.load $push3=, d($pop7) + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.or $push4=, $pop3, $pop1 + i32.const $push6=, 24 + i32.shr_u $push5=, $pop4, $pop6 + i32.store8 d+3($pop2), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end80: + .size fn9_8, .Lfunc_end80-fn9_8 + # -- End function + .section .text.fn1_9,"ax",@progbits + .hidden fn1_9 # -- Begin function fn1_9 + .globl fn1_9 + .type fn1_9,@function +fn1_9: # @fn1_9 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, b($pop5) + i32.const $push0=, 63 + i32.and $push1=, $0, $pop0 + i32.xor $push4=, $pop3, $pop1 + i32.store b($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end81: + .size fn1_9, .Lfunc_end81-fn1_9 + # -- End function + .section .text.fn2_9,"ax",@progbits + .hidden fn2_9 # -- Begin function fn2_9 + .globl fn2_9 + .type fn2_9,@function +fn2_9: # @fn2_9 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, b($pop7) + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 131008 + i32.and $push3=, $pop1, $pop2 + i32.xor $push6=, $pop5, $pop3 + i32.store b($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end82: + .size fn2_9, .Lfunc_end82-fn2_9 + # -- End function + .section .text.fn3_9,"ax",@progbits + .hidden fn3_9 # -- Begin function fn3_9 + .globl fn3_9 + .type fn3_9,@function +fn3_9: # @fn3_9 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push11=, 0 + i32.load $push10=, b($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, -131072 + i32.and $push4=, $pop9, $pop3 + i32.const $push0=, 17 + i32.shl $push1=, $0, $pop0 + i32.xor $push5=, $pop4, $pop1 + i32.const $push6=, 131071 + i32.and $push7=, $1, $pop6 + i32.or $push8=, $pop5, $pop7 + i32.store b($pop2), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end83: + .size fn3_9, .Lfunc_end83-fn3_9 + # -- End function + .section .text.fn4_9,"ax",@progbits + .hidden fn4_9 # -- Begin function fn4_9 + .globl fn4_9 + .type fn4_9,@function +fn4_9: # @fn4_9 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, c($pop5) + i32.const $push0=, 31 + i32.and $push1=, $0, $pop0 + i32.xor $push4=, $pop3, $pop1 + i32.store c($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end84: + .size fn4_9, .Lfunc_end84-fn4_9 + # -- End function + .section .text.fn5_9,"ax",@progbits + .hidden fn5_9 # -- Begin function fn5_9 + .globl fn5_9 + .type fn5_9,@function +fn5_9: # @fn5_9 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, c($pop7) + i32.const $push0=, 5 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 32 + i32.and $push3=, $pop1, $pop2 + i32.xor $push6=, $pop5, $pop3 + i32.store c($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end85: + .size fn5_9, .Lfunc_end85-fn5_9 + # -- End function + .section .text.fn6_9,"ax",@progbits + .hidden fn6_9 # -- Begin function fn6_9 + .globl fn6_9 + .type fn6_9,@function +fn6_9: # @fn6_9 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push11=, 0 + i32.load $push10=, c($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, -64 + i32.and $push4=, $pop9, $pop3 + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.xor $push5=, $pop4, $pop1 + i32.const $push6=, 63 + i32.and $push7=, $1, $pop6 + i32.or $push8=, $pop5, $pop7 + i32.store c($pop2), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end86: + .size fn6_9, .Lfunc_end86-fn6_9 + # -- End function + .section .text.fn7_9,"ax",@progbits + .hidden fn7_9 # -- Begin function fn7_9 + .globl fn7_9 + .type fn7_9,@function +fn7_9: # @fn7_9 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, d($pop5) + i32.const $push0=, 65535 + i32.and $push1=, $0, $pop0 + i32.xor $push4=, $pop3, $pop1 + i32.store d($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end87: + .size fn7_9, .Lfunc_end87-fn7_9 + # -- End function + .section .text.fn8_9,"ax",@progbits + .hidden fn8_9 # -- Begin function fn8_9 + .globl fn8_9 + .type fn8_9,@function +fn8_9: # @fn8_9 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, d($pop7) + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 16711680 + i32.and $push3=, $pop1, $pop2 + i32.xor $push6=, $pop5, $pop3 + i32.store d($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end88: + .size fn8_9, .Lfunc_end88-fn8_9 + # -- End function + .section .text.fn9_9,"ax",@progbits + .hidden fn9_9 # -- Begin function fn9_9 + .globl fn9_9 + .type fn9_9,@function +fn9_9: # @fn9_9 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push7=, 0 + i32.load $push3=, d($pop7) + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.xor $push4=, $pop3, $pop1 + i32.const $push6=, 24 + i32.shr_u $push5=, $pop4, $pop6 + i32.store8 d+3($pop2), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end89: + .size fn9_9, .Lfunc_end89-fn9_9 + # -- End function + .section .text.fn1_a,"ax",@progbits + .hidden fn1_a # -- Begin function fn1_a + .globl fn1_a + .type fn1_a,@function +fn1_a: # @fn1_a + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, b($pop9) + tee_local $push7=, $1=, $pop8 + i32.const $push1=, -64 + i32.and $push2=, $pop7, $pop1 + i32.const $push3=, 63 + i32.and $push4=, $1, $pop3 + i32.div_u $push5=, $pop4, $0 + i32.or $push6=, $pop2, $pop5 + i32.store b($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end90: + .size fn1_a, .Lfunc_end90-fn1_a + # -- End function + .section .text.fn2_a,"ax",@progbits + .hidden fn2_a # -- Begin function fn2_a + .globl fn2_a + .type fn2_a,@function +fn2_a: # @fn2_a + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push13=, 0 + i32.load $push12=, b($pop13) + tee_local $push11=, $1=, $pop12 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop11, $pop3 + i32.const $push5=, 2047 + i32.and $push6=, $pop4, $pop5 + i32.div_u $push7=, $pop6, $0 + i32.const $push10=, 6 + i32.shl $push8=, $pop7, $pop10 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push9=, $pop8, $pop2 + i32.store b($pop0), $pop9 + # fallthrough-return + .endfunc +.Lfunc_end91: + .size fn2_a, .Lfunc_end91-fn2_a + # -- End function + .section .text.fn3_a,"ax",@progbits + .hidden fn3_a # -- Begin function fn3_a + .globl fn3_a + .type fn3_a,@function +fn3_a: # @fn3_a + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, b($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 17 + i32.shr_u $push4=, $pop9, $pop3 + i32.div_u $push5=, $pop4, $0 + i32.const $push8=, 17 + i32.shl $push6=, $pop5, $pop8 + i32.const $push1=, 131071 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end92: + .size fn3_a, .Lfunc_end92-fn3_a + # -- End function + .section .text.fn4_a,"ax",@progbits + .hidden fn4_a # -- Begin function fn4_a + .globl fn4_a + .type fn4_a,@function +fn4_a: # @fn4_a + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, c($pop9) + tee_local $push7=, $1=, $pop8 + i32.const $push1=, -32 + i32.and $push2=, $pop7, $pop1 + i32.const $push3=, 31 + i32.and $push4=, $1, $pop3 + i32.div_u $push5=, $pop4, $0 + i32.or $push6=, $pop2, $pop5 + i32.store c($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end93: + .size fn4_a, .Lfunc_end93-fn4_a + # -- End function + .section .text.fn5_a,"ax",@progbits + .hidden fn5_a # -- Begin function fn5_a + .globl fn5_a + .type fn5_a,@function +fn5_a: # @fn5_a + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push13=, 0 + i32.load $push12=, c($pop13) + tee_local $push11=, $1=, $pop12 + i32.const $push3=, 5 + i32.shr_u $push4=, $pop11, $pop3 + i32.const $push5=, 1 + i32.and $push6=, $pop4, $pop5 + i32.div_u $push7=, $pop6, $0 + i32.const $push10=, 5 + i32.shl $push8=, $pop7, $pop10 + i32.const $push1=, -33 + i32.and $push2=, $1, $pop1 + i32.or $push9=, $pop8, $pop2 + i32.store c($pop0), $pop9 + # fallthrough-return + .endfunc +.Lfunc_end94: + .size fn5_a, .Lfunc_end94-fn5_a + # -- End function + .section .text.fn6_a,"ax",@progbits + .hidden fn6_a # -- Begin function fn6_a + .globl fn6_a + .type fn6_a,@function +fn6_a: # @fn6_a + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, c($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop9, $pop3 + i32.div_u $push5=, $pop4, $0 + i32.const $push8=, 6 + i32.shl $push6=, $pop5, $pop8 + i32.const $push1=, 63 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end95: + .size fn6_a, .Lfunc_end95-fn6_a + # -- End function + .section .text.fn7_a,"ax",@progbits + .hidden fn7_a # -- Begin function fn7_a + .globl fn7_a + .type fn7_a,@function +fn7_a: # @fn7_a + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load16_u $push1=, d($pop3) + i32.div_u $push2=, $pop1, $0 + i32.store16 d($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end96: + .size fn7_a, .Lfunc_end96-fn7_a + # -- End function + .section .text.fn8_a,"ax",@progbits + .hidden fn8_a # -- Begin function fn8_a + .globl fn8_a + .type fn8_a,@function +fn8_a: # @fn8_a + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load8_u $push1=, d+2($pop3) + i32.div_u $push2=, $pop1, $0 + i32.store8 d+2($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end97: + .size fn8_a, .Lfunc_end97-fn8_a + # -- End function + .section .text.fn9_a,"ax",@progbits + .hidden fn9_a # -- Begin function fn9_a + .globl fn9_a + .type fn9_a,@function +fn9_a: # @fn9_a + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load8_u $push1=, d+3($pop3) + i32.div_u $push2=, $pop1, $0 + i32.store8 d+3($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end98: + .size fn9_a, .Lfunc_end98-fn9_a + # -- End function + .section .text.fn1_b,"ax",@progbits + .hidden fn1_b # -- Begin function fn1_b + .globl fn1_b + .type fn1_b,@function +fn1_b: # @fn1_b + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, b($pop9) + tee_local $push7=, $1=, $pop8 + i32.const $push3=, 63 + i32.and $push4=, $pop7, $pop3 + i32.rem_u $push5=, $pop4, $0 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end99: + .size fn1_b, .Lfunc_end99-fn1_b + # -- End function + .section .text.fn2_b,"ax",@progbits + .hidden fn2_b # -- Begin function fn2_b + .globl fn2_b + .type fn2_b,@function +fn2_b: # @fn2_b + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push13=, 0 + i32.load $push12=, b($pop13) + tee_local $push11=, $1=, $pop12 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop11, $pop3 + i32.const $push5=, 2047 + i32.and $push6=, $pop4, $pop5 + i32.rem_u $push7=, $pop6, $0 + i32.const $push10=, 6 + i32.shl $push8=, $pop7, $pop10 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push9=, $pop8, $pop2 + i32.store b($pop0), $pop9 + # fallthrough-return + .endfunc +.Lfunc_end100: + .size fn2_b, .Lfunc_end100-fn2_b + # -- End function + .section .text.fn3_b,"ax",@progbits + .hidden fn3_b # -- Begin function fn3_b + .globl fn3_b + .type fn3_b,@function +fn3_b: # @fn3_b + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, b($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 17 + i32.shr_u $push4=, $pop9, $pop3 + i32.rem_u $push5=, $pop4, $0 + i32.const $push8=, 17 + i32.shl $push6=, $pop5, $pop8 + i32.const $push1=, 131071 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end101: + .size fn3_b, .Lfunc_end101-fn3_b + # -- End function + .section .text.fn4_b,"ax",@progbits + .hidden fn4_b # -- Begin function fn4_b + .globl fn4_b + .type fn4_b,@function +fn4_b: # @fn4_b + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, c($pop9) + tee_local $push7=, $1=, $pop8 + i32.const $push3=, 31 + i32.and $push4=, $pop7, $pop3 + i32.rem_u $push5=, $pop4, $0 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store c($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end102: + .size fn4_b, .Lfunc_end102-fn4_b + # -- End function + .section .text.fn5_b,"ax",@progbits + .hidden fn5_b # -- Begin function fn5_b + .globl fn5_b + .type fn5_b,@function +fn5_b: # @fn5_b + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push13=, 0 + i32.load $push12=, c($pop13) + tee_local $push11=, $1=, $pop12 + i32.const $push3=, 5 + i32.shr_u $push4=, $pop11, $pop3 + i32.const $push5=, 1 + i32.and $push6=, $pop4, $pop5 + i32.rem_u $push7=, $pop6, $0 + i32.const $push10=, 5 + i32.shl $push8=, $pop7, $pop10 + i32.const $push1=, -33 + i32.and $push2=, $1, $pop1 + i32.or $push9=, $pop8, $pop2 + i32.store c($pop0), $pop9 + # fallthrough-return + .endfunc +.Lfunc_end103: + .size fn5_b, .Lfunc_end103-fn5_b + # -- End function + .section .text.fn6_b,"ax",@progbits + .hidden fn6_b # -- Begin function fn6_b + .globl fn6_b + .type fn6_b,@function +fn6_b: # @fn6_b + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, c($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop9, $pop3 + i32.rem_u $push5=, $pop4, $0 + i32.const $push8=, 6 + i32.shl $push6=, $pop5, $pop8 + i32.const $push1=, 63 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end104: + .size fn6_b, .Lfunc_end104-fn6_b + # -- End function + .section .text.fn7_b,"ax",@progbits + .hidden fn7_b # -- Begin function fn7_b + .globl fn7_b + .type fn7_b,@function +fn7_b: # @fn7_b + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load16_u $push1=, d($pop3) + i32.rem_u $push2=, $pop1, $0 + i32.store16 d($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end105: + .size fn7_b, .Lfunc_end105-fn7_b + # -- End function + .section .text.fn8_b,"ax",@progbits + .hidden fn8_b # -- Begin function fn8_b + .globl fn8_b + .type fn8_b,@function +fn8_b: # @fn8_b + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load8_u $push1=, d+2($pop3) + i32.rem_u $push2=, $pop1, $0 + i32.store8 d+2($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end106: + .size fn8_b, .Lfunc_end106-fn8_b + # -- End function + .section .text.fn9_b,"ax",@progbits + .hidden fn9_b # -- Begin function fn9_b + .globl fn9_b + .type fn9_b,@function +fn9_b: # @fn9_b + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load8_u $push1=, d+3($pop3) + i32.rem_u $push2=, $pop1, $0 + i32.store8 d+3($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end107: + .size fn9_b, .Lfunc_end107-fn9_b + # -- End function + .section .text.fn1_c,"ax",@progbits + .hidden fn1_c # -- Begin function fn1_c + .globl fn1_c + .type fn1_c,@function +fn1_c: # @fn1_c + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 3 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 63 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end108: + .size fn1_c, .Lfunc_end108-fn1_c + # -- End function + .section .text.fn2_c,"ax",@progbits + .hidden fn2_c # -- Begin function fn2_c + .globl fn2_c + .type fn2_c,@function +fn2_c: # @fn2_c + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 192 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 131008 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end109: + .size fn2_c, .Lfunc_end109-fn2_c + # -- End function + .section .text.fn3_c,"ax",@progbits + .hidden fn3_c # -- Begin function fn3_c + .globl fn3_c + .type fn3_c,@function +fn3_c: # @fn3_c + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 393216 + i32.add $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end110: + .size fn3_c, .Lfunc_end110-fn3_c + # -- End function + .section .text.fn4_c,"ax",@progbits + .hidden fn4_c # -- Begin function fn4_c + .globl fn4_c + .type fn4_c,@function +fn4_c: # @fn4_c + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 3 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 31 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end111: + .size fn4_c, .Lfunc_end111-fn4_c + # -- End function + .section .text.fn5_c,"ax",@progbits + .hidden fn5_c # -- Begin function fn5_c + .globl fn5_c + .type fn5_c,@function +fn5_c: # @fn5_c + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end112: + .size fn5_c, .Lfunc_end112-fn5_c + # -- End function + .section .text.fn6_c,"ax",@progbits + .hidden fn6_c # -- Begin function fn6_c + .globl fn6_c + .type fn6_c,@function +fn6_c: # @fn6_c + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 192 + i32.add $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end113: + .size fn6_c, .Lfunc_end113-fn6_c + # -- End function + .section .text.fn7_c,"ax",@progbits + .hidden fn7_c # -- Begin function fn7_c + .globl fn7_c + .type fn7_c,@function +fn7_c: # @fn7_c + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 3 + i32.add $push3=, $pop1, $pop2 + i32.store16 d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end114: + .size fn7_c, .Lfunc_end114-fn7_c + # -- End function + .section .text.fn8_c,"ax",@progbits + .hidden fn8_c # -- Begin function fn8_c + .globl fn8_c + .type fn8_c,@function +fn8_c: # @fn8_c + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, d($pop6) + i32.const $push2=, 196608 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 16 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 d+2($pop0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end115: + .size fn8_c, .Lfunc_end115-fn8_c + # -- End function + .section .text.fn9_c,"ax",@progbits + .hidden fn9_c # -- Begin function fn9_c + .globl fn9_c + .type fn9_c,@function +fn9_c: # @fn9_c + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 50331648 + i32.add $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end116: + .size fn9_c, .Lfunc_end116-fn9_c + # -- End function + .section .text.fn1_d,"ax",@progbits + .hidden fn1_d # -- Begin function fn1_d + .globl fn1_d + .type fn1_d,@function +fn1_d: # @fn1_d + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 57 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 63 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end117: + .size fn1_d, .Lfunc_end117-fn1_d + # -- End function + .section .text.fn2_d,"ax",@progbits + .hidden fn2_d # -- Begin function fn2_d + .globl fn2_d + .type fn2_d,@function +fn2_d: # @fn2_d + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 130624 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 131008 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end118: + .size fn2_d, .Lfunc_end118-fn2_d + # -- End function + .section .text.fn3_d,"ax",@progbits + .hidden fn3_d # -- Begin function fn3_d + .globl fn3_d + .type fn3_d,@function +fn3_d: # @fn3_d + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, -917504 + i32.add $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end119: + .size fn3_d, .Lfunc_end119-fn3_d + # -- End function + .section .text.fn4_d,"ax",@progbits + .hidden fn4_d # -- Begin function fn4_d + .globl fn4_d + .type fn4_d,@function +fn4_d: # @fn4_d + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 25 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 31 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end120: + .size fn4_d, .Lfunc_end120-fn4_d + # -- End function + .section .text.fn5_d,"ax",@progbits + .hidden fn5_d # -- Begin function fn5_d + .globl fn5_d + .type fn5_d,@function +fn5_d: # @fn5_d + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end121: + .size fn5_d, .Lfunc_end121-fn5_d + # -- End function + .section .text.fn6_d,"ax",@progbits + .hidden fn6_d # -- Begin function fn6_d + .globl fn6_d + .type fn6_d,@function +fn6_d: # @fn6_d + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, -448 + i32.add $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end122: + .size fn6_d, .Lfunc_end122-fn6_d + # -- End function + .section .text.fn7_d,"ax",@progbits + .hidden fn7_d # -- Begin function fn7_d + .globl fn7_d + .type fn7_d,@function +fn7_d: # @fn7_d + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 65529 + i32.add $push3=, $pop1, $pop2 + i32.store16 d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end123: + .size fn7_d, .Lfunc_end123-fn7_d + # -- End function + .section .text.fn8_d,"ax",@progbits + .hidden fn8_d # -- Begin function fn8_d + .globl fn8_d + .type fn8_d,@function +fn8_d: # @fn8_d + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, d($pop6) + i32.const $push2=, 16318464 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 16 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 d+2($pop0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end124: + .size fn8_d, .Lfunc_end124-fn8_d + # -- End function + .section .text.fn9_d,"ax",@progbits + .hidden fn9_d # -- Begin function fn9_d + .globl fn9_d + .type fn9_d,@function +fn9_d: # @fn9_d + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, -117440512 + i32.add $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end125: + .size fn9_d, .Lfunc_end125-fn9_d + # -- End function + .section .text.fn1_e,"ax",@progbits + .hidden fn1_e # -- Begin function fn1_e + .globl fn1_e + .type fn1_e,@function +fn1_e: # @fn1_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, -43 + i32.and $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end126: + .size fn1_e, .Lfunc_end126-fn1_e + # -- End function + .section .text.fn2_e,"ax",@progbits + .hidden fn2_e # -- Begin function fn2_e + .globl fn2_e + .type fn2_e,@function +fn2_e: # @fn2_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, -129665 + i32.and $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end127: + .size fn2_e, .Lfunc_end127-fn2_e + # -- End function + .section .text.fn3_e,"ax",@progbits + .hidden fn3_e # -- Begin function fn3_e + .globl fn3_e + .type fn3_e,@function +fn3_e: # @fn3_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 2883583 + i32.and $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end128: + .size fn3_e, .Lfunc_end128-fn3_e + # -- End function + .section .text.fn4_e,"ax",@progbits + .hidden fn4_e # -- Begin function fn4_e + .globl fn4_e + .type fn4_e,@function +fn4_e: # @fn4_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, -11 + i32.and $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end129: + .size fn4_e, .Lfunc_end129-fn4_e + # -- End function + .section .text.fn5_e,"ax",@progbits + .hidden fn5_e # -- Begin function fn5_e + .globl fn5_e + .type fn5_e,@function +fn5_e: # @fn5_e + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end130: + .size fn5_e, .Lfunc_end130-fn5_e + # -- End function + .section .text.fn6_e,"ax",@progbits + .hidden fn6_e # -- Begin function fn6_e + .globl fn6_e + .type fn6_e,@function +fn6_e: # @fn6_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 1407 + i32.and $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end131: + .size fn6_e, .Lfunc_end131-fn6_e + # -- End function + .section .text.fn7_e,"ax",@progbits + .hidden fn7_e # -- Begin function fn7_e + .globl fn7_e + .type fn7_e,@function +fn7_e: # @fn7_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, -65515 + i32.and $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end132: + .size fn7_e, .Lfunc_end132-fn7_e + # -- End function + .section .text.fn8_e,"ax",@progbits + .hidden fn8_e # -- Begin function fn8_e + .globl fn8_e + .type fn8_e,@function +fn8_e: # @fn8_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, -15335425 + i32.and $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end133: + .size fn8_e, .Lfunc_end133-fn8_e + # -- End function + .section .text.fn9_e,"ax",@progbits + .hidden fn9_e # -- Begin function fn9_e + .globl fn9_e + .type fn9_e,@function +fn9_e: # @fn9_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 369098751 + i32.and $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end134: + .size fn9_e, .Lfunc_end134-fn9_e + # -- End function + .section .text.fn1_f,"ax",@progbits + .hidden fn1_f # -- Begin function fn1_f + .globl fn1_f + .type fn1_f,@function +fn1_f: # @fn1_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 19 + i32.or $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end135: + .size fn1_f, .Lfunc_end135-fn1_f + # -- End function + .section .text.fn2_f,"ax",@progbits + .hidden fn2_f # -- Begin function fn2_f + .globl fn2_f + .type fn2_f,@function +fn2_f: # @fn2_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 1216 + i32.or $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end136: + .size fn2_f, .Lfunc_end136-fn2_f + # -- End function + .section .text.fn3_f,"ax",@progbits + .hidden fn3_f # -- Begin function fn3_f + .globl fn3_f + .type fn3_f,@function +fn3_f: # @fn3_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 2490368 + i32.or $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end137: + .size fn3_f, .Lfunc_end137-fn3_f + # -- End function + .section .text.fn4_f,"ax",@progbits + .hidden fn4_f # -- Begin function fn4_f + .globl fn4_f + .type fn4_f,@function +fn4_f: # @fn4_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 19 + i32.or $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end138: + .size fn4_f, .Lfunc_end138-fn4_f + # -- End function + .section .text.fn5_f,"ax",@progbits + .hidden fn5_f # -- Begin function fn5_f + .globl fn5_f + .type fn5_f,@function +fn5_f: # @fn5_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 32 + i32.or $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end139: + .size fn5_f, .Lfunc_end139-fn5_f + # -- End function + .section .text.fn6_f,"ax",@progbits + .hidden fn6_f # -- Begin function fn6_f + .globl fn6_f + .type fn6_f,@function +fn6_f: # @fn6_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 1216 + i32.or $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end140: + .size fn6_f, .Lfunc_end140-fn6_f + # -- End function + .section .text.fn7_f,"ax",@progbits + .hidden fn7_f # -- Begin function fn7_f + .globl fn7_f + .type fn7_f,@function +fn7_f: # @fn7_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 19 + i32.or $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end141: + .size fn7_f, .Lfunc_end141-fn7_f + # -- End function + .section .text.fn8_f,"ax",@progbits + .hidden fn8_f # -- Begin function fn8_f + .globl fn8_f + .type fn8_f,@function +fn8_f: # @fn8_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 1245184 + i32.or $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end142: + .size fn8_f, .Lfunc_end142-fn8_f + # -- End function + .section .text.fn9_f,"ax",@progbits + .hidden fn9_f # -- Begin function fn9_f + .globl fn9_f + .type fn9_f,@function +fn9_f: # @fn9_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 318767104 + i32.or $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end143: + .size fn9_f, .Lfunc_end143-fn9_f + # -- End function + .section .text.fn1_g,"ax",@progbits + .hidden fn1_g # -- Begin function fn1_g + .globl fn1_g + .type fn1_g,@function +fn1_g: # @fn1_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 37 + i32.xor $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end144: + .size fn1_g, .Lfunc_end144-fn1_g + # -- End function + .section .text.fn2_g,"ax",@progbits + .hidden fn2_g # -- Begin function fn2_g + .globl fn2_g + .type fn2_g,@function +fn2_g: # @fn2_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 2368 + i32.xor $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end145: + .size fn2_g, .Lfunc_end145-fn2_g + # -- End function + .section .text.fn3_g,"ax",@progbits + .hidden fn3_g # -- Begin function fn3_g + .globl fn3_g + .type fn3_g,@function +fn3_g: # @fn3_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 4849664 + i32.xor $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end146: + .size fn3_g, .Lfunc_end146-fn3_g + # -- End function + .section .text.fn4_g,"ax",@progbits + .hidden fn4_g # -- Begin function fn4_g + .globl fn4_g + .type fn4_g,@function +fn4_g: # @fn4_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 5 + i32.xor $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end147: + .size fn4_g, .Lfunc_end147-fn4_g + # -- End function + .section .text.fn5_g,"ax",@progbits + .hidden fn5_g # -- Begin function fn5_g + .globl fn5_g + .type fn5_g,@function +fn5_g: # @fn5_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end148: + .size fn5_g, .Lfunc_end148-fn5_g + # -- End function + .section .text.fn6_g,"ax",@progbits + .hidden fn6_g # -- Begin function fn6_g + .globl fn6_g + .type fn6_g,@function +fn6_g: # @fn6_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 2368 + i32.xor $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end149: + .size fn6_g, .Lfunc_end149-fn6_g + # -- End function + .section .text.fn7_g,"ax",@progbits + .hidden fn7_g # -- Begin function fn7_g + .globl fn7_g + .type fn7_g,@function +fn7_g: # @fn7_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 37 + i32.xor $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end150: + .size fn7_g, .Lfunc_end150-fn7_g + # -- End function + .section .text.fn8_g,"ax",@progbits + .hidden fn8_g # -- Begin function fn8_g + .globl fn8_g + .type fn8_g,@function +fn8_g: # @fn8_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 2424832 + i32.xor $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end151: + .size fn8_g, .Lfunc_end151-fn8_g + # -- End function + .section .text.fn9_g,"ax",@progbits + .hidden fn9_g # -- Begin function fn9_g + .globl fn9_g + .type fn9_g,@function +fn9_g: # @fn9_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 620756992 + i32.xor $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end152: + .size fn9_g, .Lfunc_end152-fn9_g + # -- End function + .section .text.fn1_h,"ax",@progbits + .hidden fn1_h # -- Begin function fn1_h + .globl fn1_h + .type fn1_h,@function +fn1_h: # @fn1_h + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 63 + i32.and $push4=, $pop8, $pop3 + i32.const $push5=, 17 + i32.div_u $push6=, $pop4, $pop5 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end153: + .size fn1_h, .Lfunc_end153-fn1_h + # -- End function + .section .text.fn2_h,"ax",@progbits + .hidden fn2_h # -- Begin function fn2_h + .globl fn2_h + .type fn2_h,@function +fn2_h: # @fn2_h + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push14=, 0 + i32.load $push13=, b($pop14) + tee_local $push12=, $1=, $pop13 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop12, $pop3 + i32.const $push5=, 2047 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 17 + i32.div_u $push8=, $pop6, $pop7 + i32.const $push11=, 6 + i32.shl $push9=, $pop8, $pop11 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push10=, $pop9, $pop2 + i32.store b($pop0), $pop10 + # fallthrough-return + .endfunc +.Lfunc_end154: + .size fn2_h, .Lfunc_end154-fn2_h + # -- End function + .section .text.fn3_h,"ax",@progbits + .hidden fn3_h # -- Begin function fn3_h + .globl fn3_h + .type fn3_h,@function +fn3_h: # @fn3_h + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 2228224 + i32.div_u $push4=, $pop8, $pop3 + i32.const $push5=, 17 + i32.shl $push6=, $pop4, $pop5 + i32.const $push1=, 131071 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end155: + .size fn3_h, .Lfunc_end155-fn3_h + # -- End function + .section .text.fn4_h,"ax",@progbits + .hidden fn4_h # -- Begin function fn4_h + .globl fn4_h + .type fn4_h,@function +fn4_h: # @fn4_h + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 31 + i32.and $push4=, $pop8, $pop3 + i32.const $push5=, 17 + i32.div_u $push6=, $pop4, $pop5 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end156: + .size fn4_h, .Lfunc_end156-fn4_h + # -- End function + .section .text.fn5_h,"ax",@progbits + .hidden fn5_h # -- Begin function fn5_h + .globl fn5_h + .type fn5_h,@function +fn5_h: # @fn5_h + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, -33 + i32.and $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end157: + .size fn5_h, .Lfunc_end157-fn5_h + # -- End function + .section .text.fn6_h,"ax",@progbits + .hidden fn6_h # -- Begin function fn6_h + .globl fn6_h + .type fn6_h,@function +fn6_h: # @fn6_h + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 1088 + i32.div_u $push4=, $pop8, $pop3 + i32.const $push5=, 6 + i32.shl $push6=, $pop4, $pop5 + i32.const $push1=, 63 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end158: + .size fn6_h, .Lfunc_end158-fn6_h + # -- End function + .section .text.fn7_h,"ax",@progbits + .hidden fn7_h # -- Begin function fn7_h + .globl fn7_h + .type fn7_h,@function +fn7_h: # @fn7_h + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load16_u $push1=, d($pop4) + i32.const $push2=, 17 + i32.div_u $push3=, $pop1, $pop2 + i32.store16 d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end159: + .size fn7_h, .Lfunc_end159-fn7_h + # -- End function + .section .text.fn8_h,"ax",@progbits + .hidden fn8_h # -- Begin function fn8_h + .globl fn8_h + .type fn8_h,@function +fn8_h: # @fn8_h + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load8_u $push1=, d+2($pop4) + i32.const $push2=, 17 + i32.div_u $push3=, $pop1, $pop2 + i32.store8 d+2($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end160: + .size fn8_h, .Lfunc_end160-fn8_h + # -- End function + .section .text.fn9_h,"ax",@progbits + .hidden fn9_h # -- Begin function fn9_h + .globl fn9_h + .type fn9_h,@function +fn9_h: # @fn9_h + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 285212672 + i32.div_u $push3=, $pop1, $pop2 + i32.store8 d+3($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end161: + .size fn9_h, .Lfunc_end161-fn9_h + # -- End function + .section .text.fn1_i,"ax",@progbits + .hidden fn1_i # -- Begin function fn1_i + .globl fn1_i + .type fn1_i,@function +fn1_i: # @fn1_i + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 63 + i32.and $push4=, $pop8, $pop3 + i32.const $push5=, 19 + i32.rem_u $push6=, $pop4, $pop5 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end162: + .size fn1_i, .Lfunc_end162-fn1_i + # -- End function + .section .text.fn2_i,"ax",@progbits + .hidden fn2_i # -- Begin function fn2_i + .globl fn2_i + .type fn2_i,@function +fn2_i: # @fn2_i + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push14=, 0 + i32.load $push13=, b($pop14) + tee_local $push12=, $1=, $pop13 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop12, $pop3 + i32.const $push5=, 2047 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 19 + i32.rem_u $push8=, $pop6, $pop7 + i32.const $push11=, 6 + i32.shl $push9=, $pop8, $pop11 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push10=, $pop9, $pop2 + i32.store b($pop0), $pop10 + # fallthrough-return + .endfunc +.Lfunc_end163: + .size fn2_i, .Lfunc_end163-fn2_i + # -- End function + .section .text.fn3_i,"ax",@progbits + .hidden fn3_i # -- Begin function fn3_i + .globl fn3_i + .type fn3_i,@function +fn3_i: # @fn3_i + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push12=, 0 + i32.load $push11=, b($pop12) + tee_local $push10=, $1=, $pop11 + i32.const $push3=, 17 + i32.shr_u $push4=, $pop10, $pop3 + i32.const $push5=, 19 + i32.rem_u $push6=, $pop4, $pop5 + i32.const $push9=, 17 + i32.shl $push7=, $pop6, $pop9 + i32.const $push1=, 131071 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store b($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end164: + .size fn3_i, .Lfunc_end164-fn3_i + # -- End function + .section .text.fn4_i,"ax",@progbits + .hidden fn4_i # -- Begin function fn4_i + .globl fn4_i + .type fn4_i,@function +fn4_i: # @fn4_i + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 31 + i32.and $push4=, $pop8, $pop3 + i32.const $push5=, 19 + i32.rem_u $push6=, $pop4, $pop5 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end165: + .size fn4_i, .Lfunc_end165-fn4_i + # -- End function + .section .text.fn5_i,"ax",@progbits + .hidden fn5_i # -- Begin function fn5_i + .globl fn5_i + .type fn5_i,@function +fn5_i: # @fn5_i + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end166: + .size fn5_i, .Lfunc_end166-fn5_i + # -- End function + .section .text.fn6_i,"ax",@progbits + .hidden fn6_i # -- Begin function fn6_i + .globl fn6_i + .type fn6_i,@function +fn6_i: # @fn6_i + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push12=, 0 + i32.load $push11=, c($pop12) + tee_local $push10=, $1=, $pop11 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop10, $pop3 + i32.const $push5=, 19 + i32.rem_u $push6=, $pop4, $pop5 + i32.const $push9=, 6 + i32.shl $push7=, $pop6, $pop9 + i32.const $push1=, 63 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store c($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end167: + .size fn6_i, .Lfunc_end167-fn6_i + # -- End function + .section .text.fn7_i,"ax",@progbits + .hidden fn7_i # -- Begin function fn7_i + .globl fn7_i + .type fn7_i,@function +fn7_i: # @fn7_i + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load16_u $push1=, d($pop4) + i32.const $push2=, 19 + i32.rem_u $push3=, $pop1, $pop2 + i32.store16 d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end168: + .size fn7_i, .Lfunc_end168-fn7_i + # -- End function + .section .text.fn8_i,"ax",@progbits + .hidden fn8_i # -- Begin function fn8_i + .globl fn8_i + .type fn8_i,@function +fn8_i: # @fn8_i + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load8_u $push1=, d+2($pop4) + i32.const $push2=, 19 + i32.rem_u $push3=, $pop1, $pop2 + i32.store8 d+2($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end169: + .size fn8_i, .Lfunc_end169-fn8_i + # -- End function + .section .text.fn9_i,"ax",@progbits + .hidden fn9_i # -- Begin function fn9_i + .globl fn9_i + .type fn9_i,@function +fn9_i: # @fn9_i + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load8_u $push1=, d+3($pop4) + i32.const $push2=, 19 + i32.rem_u $push3=, $pop1, $pop2 + i32.store8 d+3($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end170: + .size fn9_i, .Lfunc_end170-fn9_i + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end1610 + i32.const $push1=, 0 + i32.const $push0=, -2147483595 + i32.store c($pop1), $pop0 + i32.const $push6=, 0 + i32.const $push2=, 560051 + i32.store b($pop6), $pop2 + i32.const $push5=, 0 + i32.const $push3=, -1147377476 + i32.store d($pop5), $pop3 + i32.const $push4=, 0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end171: + .size main, .Lfunc_end171-main + # -- End function + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .skip 4 + .size b, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .skip 4 + .size c, 4 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .skip 4 + .size d, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20040703-1.c.s b/src/binaryen/test/torture-s/20040703-1.c.s new file mode 100644 index 0000000000..f0f95910cf --- /dev/null +++ b/src/binaryen/test/torture-s/20040703-1.c.s @@ -0,0 +1,368 @@ + .text + .file "20040703-1.c" + .section .text.num_lshift,"ax",@progbits + .hidden num_lshift # -- Begin function num_lshift + .globl num_lshift + .type num_lshift,@function +num_lshift: # @num_lshift + .param i32, i32, i32, i32 + .local i32, i32, i64, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push94=, 0 + i32.load $push93=, __stack_pointer($pop94) + i32.const $push95=, 16 + i32.sub $12=, $pop93, $pop95 + block + block + block + block + block + block + block + i32.ge_u $push0=, $3, $2 + br_if 0, $pop0 # 0: down to label6 +# BB#1: # %if.else + i32.load $push103=, 4($1) + tee_local $push102=, $5=, $pop103 + copy_local $7=, $pop102 + i32.load $push101=, 0($1) + tee_local $push100=, $4=, $pop101 + copy_local $9=, $pop100 + copy_local $8=, $3 + block + i32.const $push9=, 32 + i32.lt_u $push10=, $3, $pop9 + br_if 0, $pop10 # 0: down to label7 +# BB#2: # %if.then5 + i32.store 0($1), $5 + i32.const $7=, 0 + i32.const $push11=, 4 + i32.add $push12=, $1, $pop11 + i32.const $push104=, 0 + i32.store 0($pop12), $pop104 + i32.const $push13=, -32 + i32.add $8=, $3, $pop13 + copy_local $9=, $5 +.LBB0_3: # %if.end + end_block # label7: + i32.eqz $push125=, $8 + br_if 1, $pop125 # 1: down to label5 +# BB#4: # %if.then10 + i32.const $push14=, 4 + i32.add $push15=, $1, $pop14 + i32.shl $push108=, $7, $8 + tee_local $push107=, $10=, $pop108 + i32.store 0($pop15), $pop107 + i32.const $push17=, 32 + i32.sub $push18=, $pop17, $8 + i32.shr_u $push19=, $7, $pop18 + i32.shl $push16=, $9, $8 + i32.or $push106=, $pop19, $pop16 + tee_local $push105=, $9=, $pop106 + i32.store 0($1), $pop105 + br 2 # 2: down to label4 +.LBB0_5: # %if.then + end_block # label6: + i32.load $push1=, 8($1) + i32.eqz $push126=, $pop1 + br_if 2, $pop126 # 2: down to label3 +# BB#6: # %if.then.land.end_crit_edge + i32.const $2=, 0 + br 3 # 3: down to label2 +.LBB0_7: + end_block # label5: + copy_local $10=, $7 +.LBB0_8: # %if.end18 + end_block # label4: + i32.const $push22=, 8 + i32.add $push23=, $1, $pop22 + i64.load $6=, 0($pop23):p2align=2 + block + block + i32.const $push20=, 33 + i32.lt_u $push21=, $2, $pop20 + br_if 0, $pop21 # 0: down to label9 +# BB#9: # %if.then.i + i32.const $push30=, -32 + i32.add $push110=, $2, $pop30 + tee_local $push109=, $8=, $pop110 + i32.const $push31=, 31 + i32.gt_u $push32=, $pop109, $pop31 + br_if 1, $pop32 # 1: down to label8 +# BB#10: # %if.then2.i + i32.const $push33=, 1 + i32.shl $push34=, $pop33, $8 + i32.const $push35=, -1 + i32.add $push36=, $pop34, $pop35 + i32.and $9=, $9, $pop36 + br 1 # 1: down to label8 +.LBB0_11: # %if.else.i + end_block # label9: + i32.const $9=, 0 + i32.const $push24=, 32 + i32.eq $push25=, $2, $pop24 + br_if 0, $pop25 # 0: down to label8 +# BB#12: # %if.then5.i + i32.const $push26=, 1 + i32.shl $push27=, $pop26, $2 + i32.const $push28=, -1 + i32.add $push29=, $pop27, $pop28 + i32.and $10=, $10, $pop29 +.LBB0_13: # %num_trim.exit + end_block # label8: + i32.store 0($1), $9 + i32.const $push37=, 4 + i32.add $push38=, $1, $pop37 + i32.store 0($pop38), $10 + i32.wrap/i64 $push39=, $6 + i32.eqz $push127=, $pop39 + br_if 2, $pop127 # 2: down to label1 +# BB#14: # %if.then21 + i32.const $push40=, 0 + i32.store 12($1), $pop40 + br 3 # 3: down to label0 +.LBB0_15: # %land.rhs + end_block # label3: + i32.load $push5=, 0($1) + i32.const $push2=, 4 + i32.add $push3=, $1, $pop2 + i32.load $push4=, 0($pop3) + i32.or $push6=, $pop5, $pop4 + i32.const $push7=, 0 + i32.ne $2=, $pop6, $pop7 +.LBB0_16: # %land.end + end_block # label2: + i32.store 12($1), $2 + i64.const $push8=, 0 + i64.store 0($1):p2align=2, $pop8 + br 1 # 1: down to label0 +.LBB0_17: # %if.else3.i + end_block # label1: + i32.store 8($12), $9 + i32.store 4($12), $10 + i32.const $push43=, -1 + i32.const $push50=, 0 + i32.const $push41=, 32 + i32.gt_u $push113=, $2, $pop41 + tee_local $push112=, $8=, $pop113 + i32.select $push42=, $9, $10, $pop112 + i32.const $push47=, 1 + i32.const $push44=, -33 + i32.const $push111=, -1 + i32.select $push45=, $pop44, $pop111, $8 + i32.add $push46=, $pop45, $2 + i32.shl $push48=, $pop47, $pop46 + i32.and $push49=, $pop42, $pop48 + i32.select $8=, $pop43, $pop50, $pop49 + block + block + block + i32.const $push51=, 31 + i32.gt_u $push52=, $2, $pop51 + br_if 0, $pop52 # 0: down to label12 +# BB#18: # %if.then5.i61 + i32.store 8($12), $8 + i32.const $push96=, 4 + i32.add $push97=, $12, $pop96 + copy_local $7=, $pop97 + copy_local $11=, $2 + br 1 # 1: down to label11 +.LBB0_19: # %if.else8.i + end_block # label12: + i32.const $push53=, 63 + i32.gt_u $push54=, $2, $pop53 + br_if 1, $pop54 # 1: down to label10 +# BB#20: # %if.then10.i + i32.const $push55=, -32 + i32.add $11=, $2, $pop55 + i32.const $push98=, 8 + i32.add $push99=, $12, $pop98 + copy_local $7=, $pop99 + copy_local $10=, $9 +.LBB0_21: # %if.end15.sink.split.i + end_block # label11: + i32.shl $push56=, $8, $11 + i32.or $push57=, $10, $pop56 + i32.store 0($7), $pop57 +.LBB0_22: # %if.end15.i + end_block # label10: + block + i32.const $push58=, 32 + i32.lt_u $push59=, $3, $pop58 + br_if 0, $pop59 # 0: down to label13 +# BB#23: # %if.then17.i + i32.load $push60=, 8($12) + i32.store 4($12), $pop60 + i32.store 8($12), $8 + i32.const $push61=, -32 + i32.add $3=, $3, $pop61 +.LBB0_24: # %if.end22.i + end_block # label13: + block + block + i32.eqz $push128=, $3 + br_if 0, $pop128 # 0: down to label15 +# BB#25: # %if.end38.sink.split.i + i32.load $push121=, 8($12) + tee_local $push120=, $10=, $pop121 + i32.const $push64=, 32 + i32.sub $push119=, $pop64, $3 + tee_local $push118=, $7=, $pop119 + i32.shl $push65=, $pop120, $pop118 + i32.load $push62=, 4($12) + i32.shr_u $push63=, $pop62, $3 + i32.or $push117=, $pop65, $pop63 + tee_local $push116=, $9=, $pop117 + i32.store 4($12), $pop116 + i32.shr_u $push66=, $10, $3 + i32.shl $push67=, $8, $7 + i32.or $push115=, $pop66, $pop67 + tee_local $push114=, $3=, $pop115 + i32.store 8($12), $pop114 + br 1 # 1: down to label14 +.LBB0_26: # %if.end22.if.end38_crit_edge.i + end_block # label15: + i32.load $9=, 4($12) + i32.load $3=, 8($12) +.LBB0_27: # %if.end38.i + end_block # label14: + block + block + i32.const $push68=, 33 + i32.lt_u $push69=, $2, $pop68 + br_if 0, $pop69 # 0: down to label17 +# BB#28: # %if.then.i.i + i32.const $push76=, -32 + i32.add $push123=, $2, $pop76 + tee_local $push122=, $2=, $pop123 + i32.const $push77=, 31 + i32.gt_u $push78=, $pop122, $pop77 + br_if 1, $pop78 # 1: down to label16 +# BB#29: # %if.then2.i.i + i32.const $push79=, 1 + i32.shl $push80=, $pop79, $2 + i32.const $push81=, -1 + i32.add $push82=, $pop80, $pop81 + i32.and $3=, $3, $pop82 + br 1 # 1: down to label16 +.LBB0_30: # %if.else.i.i + end_block # label17: + i32.const $3=, 0 + i32.const $push70=, 32 + i32.eq $push71=, $2, $pop70 + br_if 0, $pop71 # 0: down to label16 +# BB#31: # %if.then5.i.i + i32.const $push72=, 1 + i32.shl $push73=, $pop72, $2 + i32.const $push74=, -1 + i32.add $push75=, $pop73, $pop74 + i32.and $9=, $9, $pop75 +.LBB0_32: # %num_rshift.exit + end_block # label16: + i32.const $push86=, 12 + i32.add $push87=, $1, $pop86 + i32.ne $push84=, $5, $9 + i32.ne $push83=, $4, $3 + i32.or $push85=, $pop84, $pop83 + i32.store 0($pop87), $pop85 +.LBB0_33: # %if.end36 + end_block # label0: + i64.load $push88=, 0($1):p2align=2 + i64.store 0($0):p2align=2, $pop88 + i32.const $push89=, 8 + i32.add $push90=, $0, $pop89 + i32.const $push124=, 8 + i32.add $push91=, $1, $pop124 + i64.load $push92=, 0($pop91):p2align=2 + i64.store 0($pop90):p2align=2, $pop92 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size num_lshift, .Lfunc_end0-num_lshift + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push16=, 0 + i32.const $push14=, 0 + i32.load $push13=, __stack_pointer($pop14) + i32.const $push15=, 32 + i32.sub $push22=, $pop13, $pop15 + tee_local $push21=, $0=, $pop22 + i32.store __stack_pointer($pop16), $pop21 + i32.const $push2=, 8 + i32.add $push3=, $0, $pop2 + i32.const $push0=, 0 + i64.load $push1=, num+8($pop0):p2align=2 + i64.store 0($pop3), $pop1 + i32.const $push20=, 0 + i64.load $push4=, num($pop20):p2align=2 + i64.store 0($0), $pop4 + i32.const $push17=, 16 + i32.add $push18=, $0, $pop17 + i32.const $push6=, 64 + i32.const $push19=, 0 + i32.load $push5=, n($pop19) + call num_lshift@FUNCTION, $pop18, $0, $pop6, $pop5 + block + i32.load $push8=, 20($0) + i32.const $push7=, 196608 + i32.ne $push9=, $pop8, $pop7 + br_if 0, $pop9 # 0: down to label18 +# BB#1: # %if.end + i32.load $push10=, 16($0) + br_if 0, $pop10 # 0: down to label18 +# BB#2: # %if.end3 + i32.load $push11=, 28($0) + br_if 0, $pop11 # 0: down to label18 +# BB#3: # %if.end6 + i32.const $push12=, 0 + call exit@FUNCTION, $pop12 + unreachable +.LBB1_4: # %if.then + end_block # label18: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden precision # @precision + .type precision,@object + .section .data.precision,"aw",@progbits + .globl precision + .p2align 2 +precision: + .int32 64 # 0x40 + .size precision, 4 + + .hidden n # @n + .type n,@object + .section .data.n,"aw",@progbits + .globl n + .p2align 2 +n: + .int32 16 # 0x10 + .size n, 4 + + .hidden num # @num + .type num,@object + .section .data.num,"aw",@progbits + .globl num + .p2align 2 +num: + .int32 0 # 0x0 + .int32 3 # 0x3 + .int32 0 # 0x0 + .int32 0 # 0x0 + .size num, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20040704-1.c.s b/src/binaryen/test/torture-s/20040704-1.c.s new file mode 100644 index 0000000000..2e782ad274 --- /dev/null +++ b/src/binaryen/test/torture-s/20040704-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20040704-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20040705-1.c.s b/src/binaryen/test/torture-s/20040705-1.c.s new file mode 100644 index 0000000000..2ca53549ba --- /dev/null +++ b/src/binaryen/test/torture-s/20040705-1.c.s @@ -0,0 +1,3574 @@ + .text + .file "20040705-1.c" + .section .text.ret1,"ax",@progbits + .hidden ret1 # -- Begin function ret1 + .globl ret1 + .type ret1,@function +ret1: # @ret1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, b+8($pop0) + i32.const $push2=, 63 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size ret1, .Lfunc_end0-ret1 + # -- End function + .section .text.ret2,"ax",@progbits + .hidden ret2 # -- Begin function ret2 + .globl ret2 + .type ret2,@function +ret2: # @ret2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, b+8($pop0) + i32.const $push2=, 6 + i32.shr_u $push3=, $pop1, $pop2 + i32.const $push4=, 2047 + i32.and $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end1: + .size ret2, .Lfunc_end1-ret2 + # -- End function + .section .text.ret3,"ax",@progbits + .hidden ret3 # -- Begin function ret3 + .globl ret3 + .type ret3,@function +ret3: # @ret3 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, b+8($pop0) + i32.const $push2=, 17 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size ret3, .Lfunc_end2-ret3 + # -- End function + .section .text.ret4,"ax",@progbits + .hidden ret4 # -- Begin function ret4 + .globl ret4 + .type ret4,@function +ret4: # @ret4 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, c+8($pop0) + i32.const $push2=, 31 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end3: + .size ret4, .Lfunc_end3-ret4 + # -- End function + .section .text.ret5,"ax",@progbits + .hidden ret5 # -- Begin function ret5 + .globl ret5 + .type ret5,@function +ret5: # @ret5 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, c+8($pop0) + i32.const $push2=, 5 + i32.shr_u $push3=, $pop1, $pop2 + i32.const $push4=, 1 + i32.and $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end4: + .size ret5, .Lfunc_end4-ret5 + # -- End function + .section .text.ret6,"ax",@progbits + .hidden ret6 # -- Begin function ret6 + .globl ret6 + .type ret6,@function +ret6: # @ret6 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, c+8($pop0) + i32.const $push2=, 6 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end5: + .size ret6, .Lfunc_end5-ret6 + # -- End function + .section .text.ret7,"ax",@progbits + .hidden ret7 # -- Begin function ret7 + .globl ret7 + .type ret7,@function +ret7: # @ret7 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, d+8($pop0) + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end6: + .size ret7, .Lfunc_end6-ret7 + # -- End function + .section .text.ret8,"ax",@progbits + .hidden ret8 # -- Begin function ret8 + .globl ret8 + .type ret8,@function +ret8: # @ret8 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, d+10($pop0) + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end7: + .size ret8, .Lfunc_end7-ret8 + # -- End function + .section .text.ret9,"ax",@progbits + .hidden ret9 # -- Begin function ret9 + .globl ret9 + .type ret9,@function +ret9: # @ret9 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, d+11($pop0) + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end8: + .size ret9, .Lfunc_end8-ret9 + # -- End function + .section .text.fn1_1,"ax",@progbits + .hidden fn1_1 # -- Begin function fn1_1 + .globl fn1_1 + .type fn1_1,@function +fn1_1: # @fn1_1 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, b+8($pop9) + tee_local $push7=, $1=, $pop8 + i32.add $push3=, $pop7, $0 + i32.const $push4=, 63 + i32.and $push5=, $pop3, $pop4 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b+8($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end9: + .size fn1_1, .Lfunc_end9-fn1_1 + # -- End function + .section .text.fn2_1,"ax",@progbits + .hidden fn2_1 # -- Begin function fn2_1 + .globl fn2_1 + .type fn2_1,@function +fn2_1: # @fn2_1 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, b+8($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 6 + i32.shl $push4=, $0, $pop3 + i32.add $push5=, $pop9, $pop4 + i32.const $push6=, 131008 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store b+8($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end10: + .size fn2_1, .Lfunc_end10-fn2_1 + # -- End function + .section .text.fn3_1,"ax",@progbits + .hidden fn3_1 # -- Begin function fn3_1 + .globl fn3_1 + .type fn3_1,@function +fn3_1: # @fn3_1 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, b+8($pop5) + i32.const $push0=, 17 + i32.shl $push1=, $0, $pop0 + i32.add $push4=, $pop3, $pop1 + i32.store b+8($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end11: + .size fn3_1, .Lfunc_end11-fn3_1 + # -- End function + .section .text.fn4_1,"ax",@progbits + .hidden fn4_1 # -- Begin function fn4_1 + .globl fn4_1 + .type fn4_1,@function +fn4_1: # @fn4_1 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, c+8($pop9) + tee_local $push7=, $1=, $pop8 + i32.add $push3=, $pop7, $0 + i32.const $push4=, 31 + i32.and $push5=, $pop3, $pop4 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store c+8($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end12: + .size fn4_1, .Lfunc_end12-fn4_1 + # -- End function + .section .text.fn5_1,"ax",@progbits + .hidden fn5_1 # -- Begin function fn5_1 + .globl fn5_1 + .type fn5_1,@function +fn5_1: # @fn5_1 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, c+8($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 5 + i32.shl $push4=, $0, $pop3 + i32.add $push5=, $pop9, $pop4 + i32.const $push6=, 32 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, -33 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store c+8($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end13: + .size fn5_1, .Lfunc_end13-fn5_1 + # -- End function + .section .text.fn6_1,"ax",@progbits + .hidden fn6_1 # -- Begin function fn6_1 + .globl fn6_1 + .type fn6_1,@function +fn6_1: # @fn6_1 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, c+8($pop5) + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.add $push4=, $pop3, $pop1 + i32.store c+8($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end14: + .size fn6_1, .Lfunc_end14-fn6_1 + # -- End function + .section .text.fn7_1,"ax",@progbits + .hidden fn7_1 # -- Begin function fn7_1 + .globl fn7_1 + .type fn7_1,@function +fn7_1: # @fn7_1 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load $push1=, d+8($pop3) + i32.add $push2=, $pop1, $0 + i32.store16 d+8($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end15: + .size fn7_1, .Lfunc_end15-fn7_1 + # -- End function + .section .text.fn8_1,"ax",@progbits + .hidden fn8_1 # -- Begin function fn8_1 + .globl fn8_1 + .type fn8_1,@function +fn8_1: # @fn8_1 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push7=, 0 + i32.load $push3=, d+8($pop7) + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + i32.add $push4=, $pop3, $pop1 + i32.const $push6=, 16 + i32.shr_u $push5=, $pop4, $pop6 + i32.store8 d+10($pop2), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end16: + .size fn8_1, .Lfunc_end16-fn8_1 + # -- End function + .section .text.fn9_1,"ax",@progbits + .hidden fn9_1 # -- Begin function fn9_1 + .globl fn9_1 + .type fn9_1,@function +fn9_1: # @fn9_1 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, d+8($pop5) + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.add $push4=, $pop3, $pop1 + i32.store d+8($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end17: + .size fn9_1, .Lfunc_end17-fn9_1 + # -- End function + .section .text.fn1_2,"ax",@progbits + .hidden fn1_2 # -- Begin function fn1_2 + .globl fn1_2 + .type fn1_2,@function +fn1_2: # @fn1_2 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 1 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 63 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end18: + .size fn1_2, .Lfunc_end18-fn1_2 + # -- End function + .section .text.fn2_2,"ax",@progbits + .hidden fn2_2 # -- Begin function fn2_2 + .globl fn2_2 + .type fn2_2,@function +fn2_2: # @fn2_2 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 64 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 131008 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end19: + .size fn2_2, .Lfunc_end19-fn2_2 + # -- End function + .section .text.fn3_2,"ax",@progbits + .hidden fn3_2 # -- Begin function fn3_2 + .globl fn3_2 + .type fn3_2,@function +fn3_2: # @fn3_2 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b+8($pop4) + i32.const $push2=, 131072 + i32.add $push3=, $pop1, $pop2 + i32.store b+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end20: + .size fn3_2, .Lfunc_end20-fn3_2 + # -- End function + .section .text.fn4_2,"ax",@progbits + .hidden fn4_2 # -- Begin function fn4_2 + .globl fn4_2 + .type fn4_2,@function +fn4_2: # @fn4_2 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 1 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 31 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end21: + .size fn4_2, .Lfunc_end21-fn4_2 + # -- End function + .section .text.fn5_2,"ax",@progbits + .hidden fn5_2 # -- Begin function fn5_2 + .globl fn5_2 + .type fn5_2,@function +fn5_2: # @fn5_2 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end22: + .size fn5_2, .Lfunc_end22-fn5_2 + # -- End function + .section .text.fn6_2,"ax",@progbits + .hidden fn6_2 # -- Begin function fn6_2 + .globl fn6_2 + .type fn6_2,@function +fn6_2: # @fn6_2 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, 64 + i32.add $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end23: + .size fn6_2, .Lfunc_end23-fn6_2 + # -- End function + .section .text.fn7_2,"ax",@progbits + .hidden fn7_2 # -- Begin function fn7_2 + .globl fn7_2 + .type fn7_2,@function +fn7_2: # @fn7_2 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store16 d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end24: + .size fn7_2, .Lfunc_end24-fn7_2 + # -- End function + .section .text.fn8_2,"ax",@progbits + .hidden fn8_2 # -- Begin function fn8_2 + .globl fn8_2 + .type fn8_2,@function +fn8_2: # @fn8_2 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, d+8($pop6) + i32.const $push2=, 65536 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 16 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 d+10($pop0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end25: + .size fn8_2, .Lfunc_end25-fn8_2 + # -- End function + .section .text.fn9_2,"ax",@progbits + .hidden fn9_2 # -- Begin function fn9_2 + .globl fn9_2 + .type fn9_2,@function +fn9_2: # @fn9_2 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, 16777216 + i32.add $push3=, $pop1, $pop2 + i32.store d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end26: + .size fn9_2, .Lfunc_end26-fn9_2 + # -- End function + .section .text.fn1_3,"ax",@progbits + .hidden fn1_3 # -- Begin function fn1_3 + .globl fn1_3 + .type fn1_3,@function +fn1_3: # @fn1_3 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 1 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 63 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end27: + .size fn1_3, .Lfunc_end27-fn1_3 + # -- End function + .section .text.fn2_3,"ax",@progbits + .hidden fn2_3 # -- Begin function fn2_3 + .globl fn2_3 + .type fn2_3,@function +fn2_3: # @fn2_3 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 64 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 131008 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end28: + .size fn2_3, .Lfunc_end28-fn2_3 + # -- End function + .section .text.fn3_3,"ax",@progbits + .hidden fn3_3 # -- Begin function fn3_3 + .globl fn3_3 + .type fn3_3,@function +fn3_3: # @fn3_3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b+8($pop4) + i32.const $push2=, 131072 + i32.add $push3=, $pop1, $pop2 + i32.store b+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end29: + .size fn3_3, .Lfunc_end29-fn3_3 + # -- End function + .section .text.fn4_3,"ax",@progbits + .hidden fn4_3 # -- Begin function fn4_3 + .globl fn4_3 + .type fn4_3,@function +fn4_3: # @fn4_3 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 1 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 31 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end30: + .size fn4_3, .Lfunc_end30-fn4_3 + # -- End function + .section .text.fn5_3,"ax",@progbits + .hidden fn5_3 # -- Begin function fn5_3 + .globl fn5_3 + .type fn5_3,@function +fn5_3: # @fn5_3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end31: + .size fn5_3, .Lfunc_end31-fn5_3 + # -- End function + .section .text.fn6_3,"ax",@progbits + .hidden fn6_3 # -- Begin function fn6_3 + .globl fn6_3 + .type fn6_3,@function +fn6_3: # @fn6_3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, 64 + i32.add $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end32: + .size fn6_3, .Lfunc_end32-fn6_3 + # -- End function + .section .text.fn7_3,"ax",@progbits + .hidden fn7_3 # -- Begin function fn7_3 + .globl fn7_3 + .type fn7_3,@function +fn7_3: # @fn7_3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store16 d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end33: + .size fn7_3, .Lfunc_end33-fn7_3 + # -- End function + .section .text.fn8_3,"ax",@progbits + .hidden fn8_3 # -- Begin function fn8_3 + .globl fn8_3 + .type fn8_3,@function +fn8_3: # @fn8_3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, d+8($pop6) + i32.const $push2=, 65536 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 16 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 d+10($pop0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end34: + .size fn8_3, .Lfunc_end34-fn8_3 + # -- End function + .section .text.fn9_3,"ax",@progbits + .hidden fn9_3 # -- Begin function fn9_3 + .globl fn9_3 + .type fn9_3,@function +fn9_3: # @fn9_3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, 16777216 + i32.add $push3=, $pop1, $pop2 + i32.store d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end35: + .size fn9_3, .Lfunc_end35-fn9_3 + # -- End function + .section .text.fn1_4,"ax",@progbits + .hidden fn1_4 # -- Begin function fn1_4 + .globl fn1_4 + .type fn1_4,@function +fn1_4: # @fn1_4 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, b+8($pop9) + tee_local $push7=, $1=, $pop8 + i32.sub $push3=, $pop7, $0 + i32.const $push4=, 63 + i32.and $push5=, $pop3, $pop4 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b+8($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end36: + .size fn1_4, .Lfunc_end36-fn1_4 + # -- End function + .section .text.fn2_4,"ax",@progbits + .hidden fn2_4 # -- Begin function fn2_4 + .globl fn2_4 + .type fn2_4,@function +fn2_4: # @fn2_4 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, b+8($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 6 + i32.shl $push4=, $0, $pop3 + i32.sub $push5=, $pop9, $pop4 + i32.const $push6=, 131008 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store b+8($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end37: + .size fn2_4, .Lfunc_end37-fn2_4 + # -- End function + .section .text.fn3_4,"ax",@progbits + .hidden fn3_4 # -- Begin function fn3_4 + .globl fn3_4 + .type fn3_4,@function +fn3_4: # @fn3_4 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, b+8($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 17 + i32.shl $push4=, $0, $pop3 + i32.sub $push5=, $pop9, $pop4 + i32.const $push6=, -131072 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, 131071 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store b+8($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end38: + .size fn3_4, .Lfunc_end38-fn3_4 + # -- End function + .section .text.fn4_4,"ax",@progbits + .hidden fn4_4 # -- Begin function fn4_4 + .globl fn4_4 + .type fn4_4,@function +fn4_4: # @fn4_4 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, c+8($pop9) + tee_local $push7=, $1=, $pop8 + i32.sub $push3=, $pop7, $0 + i32.const $push4=, 31 + i32.and $push5=, $pop3, $pop4 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store c+8($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end39: + .size fn4_4, .Lfunc_end39-fn4_4 + # -- End function + .section .text.fn5_4,"ax",@progbits + .hidden fn5_4 # -- Begin function fn5_4 + .globl fn5_4 + .type fn5_4,@function +fn5_4: # @fn5_4 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, c+8($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 5 + i32.shl $push4=, $0, $pop3 + i32.sub $push5=, $pop9, $pop4 + i32.const $push6=, 32 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, -33 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store c+8($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end40: + .size fn5_4, .Lfunc_end40-fn5_4 + # -- End function + .section .text.fn6_4,"ax",@progbits + .hidden fn6_4 # -- Begin function fn6_4 + .globl fn6_4 + .type fn6_4,@function +fn6_4: # @fn6_4 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, c+8($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 6 + i32.shl $push4=, $0, $pop3 + i32.sub $push5=, $pop9, $pop4 + i32.const $push6=, -64 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, 63 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store c+8($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end41: + .size fn6_4, .Lfunc_end41-fn6_4 + # -- End function + .section .text.fn7_4,"ax",@progbits + .hidden fn7_4 # -- Begin function fn7_4 + .globl fn7_4 + .type fn7_4,@function +fn7_4: # @fn7_4 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load $push1=, d+8($pop3) + i32.sub $push2=, $pop1, $0 + i32.store16 d+8($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end42: + .size fn7_4, .Lfunc_end42-fn7_4 + # -- End function + .section .text.fn8_4,"ax",@progbits + .hidden fn8_4 # -- Begin function fn8_4 + .globl fn8_4 + .type fn8_4,@function +fn8_4: # @fn8_4 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push7=, 0 + i32.load $push3=, d+8($pop7) + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + i32.sub $push4=, $pop3, $pop1 + i32.const $push6=, 16 + i32.shr_u $push5=, $pop4, $pop6 + i32.store8 d+10($pop2), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end43: + .size fn8_4, .Lfunc_end43-fn8_4 + # -- End function + .section .text.fn9_4,"ax",@progbits + .hidden fn9_4 # -- Begin function fn9_4 + .globl fn9_4 + .type fn9_4,@function +fn9_4: # @fn9_4 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push7=, 0 + i32.load $push3=, d+8($pop7) + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.sub $push4=, $pop3, $pop1 + i32.const $push6=, 24 + i32.shr_u $push5=, $pop4, $pop6 + i32.store8 d+11($pop2), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end44: + .size fn9_4, .Lfunc_end44-fn9_4 + # -- End function + .section .text.fn1_5,"ax",@progbits + .hidden fn1_5 # -- Begin function fn1_5 + .globl fn1_5 + .type fn1_5,@function +fn1_5: # @fn1_5 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 63 + i32.add $push4=, $pop8, $pop3 + i32.const $push7=, 63 + i32.and $push5=, $pop4, $pop7 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b+8($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end45: + .size fn1_5, .Lfunc_end45-fn1_5 + # -- End function + .section .text.fn2_5,"ax",@progbits + .hidden fn2_5 # -- Begin function fn2_5 + .globl fn2_5 + .type fn2_5,@function +fn2_5: # @fn2_5 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 131008 + i32.add $push4=, $pop8, $pop3 + i32.const $push7=, 131008 + i32.and $push5=, $pop4, $pop7 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b+8($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end46: + .size fn2_5, .Lfunc_end46-fn2_5 + # -- End function + .section .text.fn3_5,"ax",@progbits + .hidden fn3_5 # -- Begin function fn3_5 + .globl fn3_5 + .type fn3_5,@function +fn3_5: # @fn3_5 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b+8($pop4) + i32.const $push2=, -131072 + i32.add $push3=, $pop1, $pop2 + i32.store b+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end47: + .size fn3_5, .Lfunc_end47-fn3_5 + # -- End function + .section .text.fn4_5,"ax",@progbits + .hidden fn4_5 # -- Begin function fn4_5 + .globl fn4_5 + .type fn4_5,@function +fn4_5: # @fn4_5 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 31 + i32.add $push4=, $pop8, $pop3 + i32.const $push7=, 31 + i32.and $push5=, $pop4, $pop7 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store c+8($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end48: + .size fn4_5, .Lfunc_end48-fn4_5 + # -- End function + .section .text.fn5_5,"ax",@progbits + .hidden fn5_5 # -- Begin function fn5_5 + .globl fn5_5 + .type fn5_5,@function +fn5_5: # @fn5_5 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end49: + .size fn5_5, .Lfunc_end49-fn5_5 + # -- End function + .section .text.fn6_5,"ax",@progbits + .hidden fn6_5 # -- Begin function fn6_5 + .globl fn6_5 + .type fn6_5,@function +fn6_5: # @fn6_5 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, -64 + i32.add $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end50: + .size fn6_5, .Lfunc_end50-fn6_5 + # -- End function + .section .text.fn7_5,"ax",@progbits + .hidden fn7_5 # -- Begin function fn7_5 + .globl fn7_5 + .type fn7_5,@function +fn7_5: # @fn7_5 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, 65535 + i32.add $push3=, $pop1, $pop2 + i32.store16 d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end51: + .size fn7_5, .Lfunc_end51-fn7_5 + # -- End function + .section .text.fn8_5,"ax",@progbits + .hidden fn8_5 # -- Begin function fn8_5 + .globl fn8_5 + .type fn8_5,@function +fn8_5: # @fn8_5 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, d+8($pop6) + i32.const $push2=, 16711680 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 16 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 d+10($pop0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end52: + .size fn8_5, .Lfunc_end52-fn8_5 + # -- End function + .section .text.fn9_5,"ax",@progbits + .hidden fn9_5 # -- Begin function fn9_5 + .globl fn9_5 + .type fn9_5,@function +fn9_5: # @fn9_5 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, -16777216 + i32.add $push3=, $pop1, $pop2 + i32.store d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end53: + .size fn9_5, .Lfunc_end53-fn9_5 + # -- End function + .section .text.fn1_6,"ax",@progbits + .hidden fn1_6 # -- Begin function fn1_6 + .globl fn1_6 + .type fn1_6,@function +fn1_6: # @fn1_6 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 63 + i32.add $push4=, $pop8, $pop3 + i32.const $push7=, 63 + i32.and $push5=, $pop4, $pop7 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b+8($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end54: + .size fn1_6, .Lfunc_end54-fn1_6 + # -- End function + .section .text.fn2_6,"ax",@progbits + .hidden fn2_6 # -- Begin function fn2_6 + .globl fn2_6 + .type fn2_6,@function +fn2_6: # @fn2_6 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 131008 + i32.add $push4=, $pop8, $pop3 + i32.const $push7=, 131008 + i32.and $push5=, $pop4, $pop7 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b+8($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end55: + .size fn2_6, .Lfunc_end55-fn2_6 + # -- End function + .section .text.fn3_6,"ax",@progbits + .hidden fn3_6 # -- Begin function fn3_6 + .globl fn3_6 + .type fn3_6,@function +fn3_6: # @fn3_6 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b+8($pop4) + i32.const $push2=, -131072 + i32.add $push3=, $pop1, $pop2 + i32.store b+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end56: + .size fn3_6, .Lfunc_end56-fn3_6 + # -- End function + .section .text.fn4_6,"ax",@progbits + .hidden fn4_6 # -- Begin function fn4_6 + .globl fn4_6 + .type fn4_6,@function +fn4_6: # @fn4_6 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 31 + i32.add $push4=, $pop8, $pop3 + i32.const $push7=, 31 + i32.and $push5=, $pop4, $pop7 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store c+8($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end57: + .size fn4_6, .Lfunc_end57-fn4_6 + # -- End function + .section .text.fn5_6,"ax",@progbits + .hidden fn5_6 # -- Begin function fn5_6 + .globl fn5_6 + .type fn5_6,@function +fn5_6: # @fn5_6 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end58: + .size fn5_6, .Lfunc_end58-fn5_6 + # -- End function + .section .text.fn6_6,"ax",@progbits + .hidden fn6_6 # -- Begin function fn6_6 + .globl fn6_6 + .type fn6_6,@function +fn6_6: # @fn6_6 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, -64 + i32.add $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end59: + .size fn6_6, .Lfunc_end59-fn6_6 + # -- End function + .section .text.fn7_6,"ax",@progbits + .hidden fn7_6 # -- Begin function fn7_6 + .globl fn7_6 + .type fn7_6,@function +fn7_6: # @fn7_6 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, 65535 + i32.add $push3=, $pop1, $pop2 + i32.store16 d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end60: + .size fn7_6, .Lfunc_end60-fn7_6 + # -- End function + .section .text.fn8_6,"ax",@progbits + .hidden fn8_6 # -- Begin function fn8_6 + .globl fn8_6 + .type fn8_6,@function +fn8_6: # @fn8_6 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, d+8($pop6) + i32.const $push2=, 16711680 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 16 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 d+10($pop0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end61: + .size fn8_6, .Lfunc_end61-fn8_6 + # -- End function + .section .text.fn9_6,"ax",@progbits + .hidden fn9_6 # -- Begin function fn9_6 + .globl fn9_6 + .type fn9_6,@function +fn9_6: # @fn9_6 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, -16777216 + i32.add $push3=, $pop1, $pop2 + i32.store d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end62: + .size fn9_6, .Lfunc_end62-fn9_6 + # -- End function + .section .text.fn1_7,"ax",@progbits + .hidden fn1_7 # -- Begin function fn1_7 + .globl fn1_7 + .type fn1_7,@function +fn1_7: # @fn1_7 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push0=, -64 + i32.or $push1=, $0, $pop0 + i32.const $push5=, 0 + i32.load $push3=, b+8($pop5) + i32.and $push4=, $pop1, $pop3 + i32.store b+8($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end63: + .size fn1_7, .Lfunc_end63-fn1_7 + # -- End function + .section .text.fn2_7,"ax",@progbits + .hidden fn2_7 # -- Begin function fn2_7 + .globl fn2_7 + .type fn2_7,@function +fn2_7: # @fn2_7 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, -131009 + i32.or $push3=, $pop1, $pop2 + i32.const $push7=, 0 + i32.load $push5=, b+8($pop7) + i32.and $push6=, $pop3, $pop5 + i32.store b+8($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end64: + .size fn2_7, .Lfunc_end64-fn2_7 + # -- End function + .section .text.fn3_7,"ax",@progbits + .hidden fn3_7 # -- Begin function fn3_7 + .globl fn3_7 + .type fn3_7,@function +fn3_7: # @fn3_7 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, b+8($pop7) + i32.const $push0=, 17 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 131071 + i32.or $push3=, $pop1, $pop2 + i32.and $push6=, $pop5, $pop3 + i32.store b+8($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end65: + .size fn3_7, .Lfunc_end65-fn3_7 + # -- End function + .section .text.fn4_7,"ax",@progbits + .hidden fn4_7 # -- Begin function fn4_7 + .globl fn4_7 + .type fn4_7,@function +fn4_7: # @fn4_7 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push0=, -32 + i32.or $push1=, $0, $pop0 + i32.const $push5=, 0 + i32.load $push3=, c+8($pop5) + i32.and $push4=, $pop1, $pop3 + i32.store c+8($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end66: + .size fn4_7, .Lfunc_end66-fn4_7 + # -- End function + .section .text.fn5_7,"ax",@progbits + .hidden fn5_7 # -- Begin function fn5_7 + .globl fn5_7 + .type fn5_7,@function +fn5_7: # @fn5_7 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push0=, 5 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, -33 + i32.or $push3=, $pop1, $pop2 + i32.const $push7=, 0 + i32.load $push5=, c+8($pop7) + i32.and $push6=, $pop3, $pop5 + i32.store c+8($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end67: + .size fn5_7, .Lfunc_end67-fn5_7 + # -- End function + .section .text.fn6_7,"ax",@progbits + .hidden fn6_7 # -- Begin function fn6_7 + .globl fn6_7 + .type fn6_7,@function +fn6_7: # @fn6_7 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, c+8($pop7) + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 63 + i32.or $push3=, $pop1, $pop2 + i32.and $push6=, $pop5, $pop3 + i32.store c+8($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end68: + .size fn6_7, .Lfunc_end68-fn6_7 + # -- End function + .section .text.fn7_7,"ax",@progbits + .hidden fn7_7 # -- Begin function fn7_7 + .globl fn7_7 + .type fn7_7,@function +fn7_7: # @fn7_7 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push0=, -65536 + i32.or $push1=, $0, $pop0 + i32.const $push5=, 0 + i32.load $push3=, d+8($pop5) + i32.and $push4=, $pop1, $pop3 + i32.store d+8($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end69: + .size fn7_7, .Lfunc_end69-fn7_7 + # -- End function + .section .text.fn8_7,"ax",@progbits + .hidden fn8_7 # -- Begin function fn8_7 + .globl fn8_7 + .type fn8_7,@function +fn8_7: # @fn8_7 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, -16711681 + i32.or $push3=, $pop1, $pop2 + i32.const $push7=, 0 + i32.load $push5=, d+8($pop7) + i32.and $push6=, $pop3, $pop5 + i32.store d+8($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end70: + .size fn8_7, .Lfunc_end70-fn8_7 + # -- End function + .section .text.fn9_7,"ax",@progbits + .hidden fn9_7 # -- Begin function fn9_7 + .globl fn9_7 + .type fn9_7,@function +fn9_7: # @fn9_7 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, d+8($pop7) + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 16777215 + i32.or $push3=, $pop1, $pop2 + i32.and $push6=, $pop5, $pop3 + i32.store d+8($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end71: + .size fn9_7, .Lfunc_end71-fn9_7 + # -- End function + .section .text.fn1_8,"ax",@progbits + .hidden fn1_8 # -- Begin function fn1_8 + .globl fn1_8 + .type fn1_8,@function +fn1_8: # @fn1_8 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, b+8($pop5) + i32.const $push0=, 63 + i32.and $push1=, $0, $pop0 + i32.or $push4=, $pop3, $pop1 + i32.store b+8($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end72: + .size fn1_8, .Lfunc_end72-fn1_8 + # -- End function + .section .text.fn2_8,"ax",@progbits + .hidden fn2_8 # -- Begin function fn2_8 + .globl fn2_8 + .type fn2_8,@function +fn2_8: # @fn2_8 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, b+8($pop7) + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 131008 + i32.and $push3=, $pop1, $pop2 + i32.or $push6=, $pop5, $pop3 + i32.store b+8($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end73: + .size fn2_8, .Lfunc_end73-fn2_8 + # -- End function + .section .text.fn3_8,"ax",@progbits + .hidden fn3_8 # -- Begin function fn3_8 + .globl fn3_8 + .type fn3_8,@function +fn3_8: # @fn3_8 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push11=, 0 + i32.load $push10=, b+8($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, -131072 + i32.and $push4=, $pop9, $pop3 + i32.const $push0=, 17 + i32.shl $push1=, $0, $pop0 + i32.or $push5=, $pop4, $pop1 + i32.const $push6=, 131071 + i32.and $push7=, $1, $pop6 + i32.or $push8=, $pop5, $pop7 + i32.store b+8($pop2), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end74: + .size fn3_8, .Lfunc_end74-fn3_8 + # -- End function + .section .text.fn4_8,"ax",@progbits + .hidden fn4_8 # -- Begin function fn4_8 + .globl fn4_8 + .type fn4_8,@function +fn4_8: # @fn4_8 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, c+8($pop5) + i32.const $push0=, 31 + i32.and $push1=, $0, $pop0 + i32.or $push4=, $pop3, $pop1 + i32.store c+8($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end75: + .size fn4_8, .Lfunc_end75-fn4_8 + # -- End function + .section .text.fn5_8,"ax",@progbits + .hidden fn5_8 # -- Begin function fn5_8 + .globl fn5_8 + .type fn5_8,@function +fn5_8: # @fn5_8 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, c+8($pop7) + i32.const $push0=, 5 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 32 + i32.and $push3=, $pop1, $pop2 + i32.or $push6=, $pop5, $pop3 + i32.store c+8($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end76: + .size fn5_8, .Lfunc_end76-fn5_8 + # -- End function + .section .text.fn6_8,"ax",@progbits + .hidden fn6_8 # -- Begin function fn6_8 + .globl fn6_8 + .type fn6_8,@function +fn6_8: # @fn6_8 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push11=, 0 + i32.load $push10=, c+8($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, -64 + i32.and $push4=, $pop9, $pop3 + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.or $push5=, $pop4, $pop1 + i32.const $push6=, 63 + i32.and $push7=, $1, $pop6 + i32.or $push8=, $pop5, $pop7 + i32.store c+8($pop2), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end77: + .size fn6_8, .Lfunc_end77-fn6_8 + # -- End function + .section .text.fn7_8,"ax",@progbits + .hidden fn7_8 # -- Begin function fn7_8 + .globl fn7_8 + .type fn7_8,@function +fn7_8: # @fn7_8 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, d+8($pop5) + i32.const $push0=, 65535 + i32.and $push1=, $0, $pop0 + i32.or $push4=, $pop3, $pop1 + i32.store d+8($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end78: + .size fn7_8, .Lfunc_end78-fn7_8 + # -- End function + .section .text.fn8_8,"ax",@progbits + .hidden fn8_8 # -- Begin function fn8_8 + .globl fn8_8 + .type fn8_8,@function +fn8_8: # @fn8_8 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, d+8($pop7) + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 16711680 + i32.and $push3=, $pop1, $pop2 + i32.or $push6=, $pop5, $pop3 + i32.store d+8($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end79: + .size fn8_8, .Lfunc_end79-fn8_8 + # -- End function + .section .text.fn9_8,"ax",@progbits + .hidden fn9_8 # -- Begin function fn9_8 + .globl fn9_8 + .type fn9_8,@function +fn9_8: # @fn9_8 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push7=, 0 + i32.load $push3=, d+8($pop7) + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.or $push4=, $pop3, $pop1 + i32.const $push6=, 24 + i32.shr_u $push5=, $pop4, $pop6 + i32.store8 d+11($pop2), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end80: + .size fn9_8, .Lfunc_end80-fn9_8 + # -- End function + .section .text.fn1_9,"ax",@progbits + .hidden fn1_9 # -- Begin function fn1_9 + .globl fn1_9 + .type fn1_9,@function +fn1_9: # @fn1_9 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, b+8($pop5) + i32.const $push0=, 63 + i32.and $push1=, $0, $pop0 + i32.xor $push4=, $pop3, $pop1 + i32.store b+8($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end81: + .size fn1_9, .Lfunc_end81-fn1_9 + # -- End function + .section .text.fn2_9,"ax",@progbits + .hidden fn2_9 # -- Begin function fn2_9 + .globl fn2_9 + .type fn2_9,@function +fn2_9: # @fn2_9 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, b+8($pop7) + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 131008 + i32.and $push3=, $pop1, $pop2 + i32.xor $push6=, $pop5, $pop3 + i32.store b+8($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end82: + .size fn2_9, .Lfunc_end82-fn2_9 + # -- End function + .section .text.fn3_9,"ax",@progbits + .hidden fn3_9 # -- Begin function fn3_9 + .globl fn3_9 + .type fn3_9,@function +fn3_9: # @fn3_9 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push11=, 0 + i32.load $push10=, b+8($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, -131072 + i32.and $push4=, $pop9, $pop3 + i32.const $push0=, 17 + i32.shl $push1=, $0, $pop0 + i32.xor $push5=, $pop4, $pop1 + i32.const $push6=, 131071 + i32.and $push7=, $1, $pop6 + i32.or $push8=, $pop5, $pop7 + i32.store b+8($pop2), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end83: + .size fn3_9, .Lfunc_end83-fn3_9 + # -- End function + .section .text.fn4_9,"ax",@progbits + .hidden fn4_9 # -- Begin function fn4_9 + .globl fn4_9 + .type fn4_9,@function +fn4_9: # @fn4_9 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, c+8($pop5) + i32.const $push0=, 31 + i32.and $push1=, $0, $pop0 + i32.xor $push4=, $pop3, $pop1 + i32.store c+8($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end84: + .size fn4_9, .Lfunc_end84-fn4_9 + # -- End function + .section .text.fn5_9,"ax",@progbits + .hidden fn5_9 # -- Begin function fn5_9 + .globl fn5_9 + .type fn5_9,@function +fn5_9: # @fn5_9 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, c+8($pop7) + i32.const $push0=, 5 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 32 + i32.and $push3=, $pop1, $pop2 + i32.xor $push6=, $pop5, $pop3 + i32.store c+8($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end85: + .size fn5_9, .Lfunc_end85-fn5_9 + # -- End function + .section .text.fn6_9,"ax",@progbits + .hidden fn6_9 # -- Begin function fn6_9 + .globl fn6_9 + .type fn6_9,@function +fn6_9: # @fn6_9 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push11=, 0 + i32.load $push10=, c+8($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, -64 + i32.and $push4=, $pop9, $pop3 + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.xor $push5=, $pop4, $pop1 + i32.const $push6=, 63 + i32.and $push7=, $1, $pop6 + i32.or $push8=, $pop5, $pop7 + i32.store c+8($pop2), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end86: + .size fn6_9, .Lfunc_end86-fn6_9 + # -- End function + .section .text.fn7_9,"ax",@progbits + .hidden fn7_9 # -- Begin function fn7_9 + .globl fn7_9 + .type fn7_9,@function +fn7_9: # @fn7_9 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, d+8($pop5) + i32.const $push0=, 65535 + i32.and $push1=, $0, $pop0 + i32.xor $push4=, $pop3, $pop1 + i32.store d+8($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end87: + .size fn7_9, .Lfunc_end87-fn7_9 + # -- End function + .section .text.fn8_9,"ax",@progbits + .hidden fn8_9 # -- Begin function fn8_9 + .globl fn8_9 + .type fn8_9,@function +fn8_9: # @fn8_9 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, d+8($pop7) + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 16711680 + i32.and $push3=, $pop1, $pop2 + i32.xor $push6=, $pop5, $pop3 + i32.store d+8($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end88: + .size fn8_9, .Lfunc_end88-fn8_9 + # -- End function + .section .text.fn9_9,"ax",@progbits + .hidden fn9_9 # -- Begin function fn9_9 + .globl fn9_9 + .type fn9_9,@function +fn9_9: # @fn9_9 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push7=, 0 + i32.load $push3=, d+8($pop7) + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.xor $push4=, $pop3, $pop1 + i32.const $push6=, 24 + i32.shr_u $push5=, $pop4, $pop6 + i32.store8 d+11($pop2), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end89: + .size fn9_9, .Lfunc_end89-fn9_9 + # -- End function + .section .text.fn1_a,"ax",@progbits + .hidden fn1_a # -- Begin function fn1_a + .globl fn1_a + .type fn1_a,@function +fn1_a: # @fn1_a + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, b+8($pop9) + tee_local $push7=, $1=, $pop8 + i32.const $push1=, -64 + i32.and $push2=, $pop7, $pop1 + i32.const $push3=, 63 + i32.and $push4=, $1, $pop3 + i32.div_u $push5=, $pop4, $0 + i32.or $push6=, $pop2, $pop5 + i32.store b+8($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end90: + .size fn1_a, .Lfunc_end90-fn1_a + # -- End function + .section .text.fn2_a,"ax",@progbits + .hidden fn2_a # -- Begin function fn2_a + .globl fn2_a + .type fn2_a,@function +fn2_a: # @fn2_a + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push13=, 0 + i32.load $push12=, b+8($pop13) + tee_local $push11=, $1=, $pop12 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop11, $pop3 + i32.const $push5=, 2047 + i32.and $push6=, $pop4, $pop5 + i32.div_u $push7=, $pop6, $0 + i32.const $push10=, 6 + i32.shl $push8=, $pop7, $pop10 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push9=, $pop8, $pop2 + i32.store b+8($pop0), $pop9 + # fallthrough-return + .endfunc +.Lfunc_end91: + .size fn2_a, .Lfunc_end91-fn2_a + # -- End function + .section .text.fn3_a,"ax",@progbits + .hidden fn3_a # -- Begin function fn3_a + .globl fn3_a + .type fn3_a,@function +fn3_a: # @fn3_a + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, b+8($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 17 + i32.shr_u $push4=, $pop9, $pop3 + i32.div_u $push5=, $pop4, $0 + i32.const $push8=, 17 + i32.shl $push6=, $pop5, $pop8 + i32.const $push1=, 131071 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end92: + .size fn3_a, .Lfunc_end92-fn3_a + # -- End function + .section .text.fn4_a,"ax",@progbits + .hidden fn4_a # -- Begin function fn4_a + .globl fn4_a + .type fn4_a,@function +fn4_a: # @fn4_a + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, c+8($pop9) + tee_local $push7=, $1=, $pop8 + i32.const $push1=, -32 + i32.and $push2=, $pop7, $pop1 + i32.const $push3=, 31 + i32.and $push4=, $1, $pop3 + i32.div_u $push5=, $pop4, $0 + i32.or $push6=, $pop2, $pop5 + i32.store c+8($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end93: + .size fn4_a, .Lfunc_end93-fn4_a + # -- End function + .section .text.fn5_a,"ax",@progbits + .hidden fn5_a # -- Begin function fn5_a + .globl fn5_a + .type fn5_a,@function +fn5_a: # @fn5_a + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push13=, 0 + i32.load $push12=, c+8($pop13) + tee_local $push11=, $1=, $pop12 + i32.const $push3=, 5 + i32.shr_u $push4=, $pop11, $pop3 + i32.const $push5=, 1 + i32.and $push6=, $pop4, $pop5 + i32.div_u $push7=, $pop6, $0 + i32.const $push10=, 5 + i32.shl $push8=, $pop7, $pop10 + i32.const $push1=, -33 + i32.and $push2=, $1, $pop1 + i32.or $push9=, $pop8, $pop2 + i32.store c+8($pop0), $pop9 + # fallthrough-return + .endfunc +.Lfunc_end94: + .size fn5_a, .Lfunc_end94-fn5_a + # -- End function + .section .text.fn6_a,"ax",@progbits + .hidden fn6_a # -- Begin function fn6_a + .globl fn6_a + .type fn6_a,@function +fn6_a: # @fn6_a + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, c+8($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop9, $pop3 + i32.div_u $push5=, $pop4, $0 + i32.const $push8=, 6 + i32.shl $push6=, $pop5, $pop8 + i32.const $push1=, 63 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end95: + .size fn6_a, .Lfunc_end95-fn6_a + # -- End function + .section .text.fn7_a,"ax",@progbits + .hidden fn7_a # -- Begin function fn7_a + .globl fn7_a + .type fn7_a,@function +fn7_a: # @fn7_a + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load16_u $push1=, d+8($pop3) + i32.div_u $push2=, $pop1, $0 + i32.store16 d+8($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end96: + .size fn7_a, .Lfunc_end96-fn7_a + # -- End function + .section .text.fn8_a,"ax",@progbits + .hidden fn8_a # -- Begin function fn8_a + .globl fn8_a + .type fn8_a,@function +fn8_a: # @fn8_a + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load8_u $push1=, d+10($pop3) + i32.div_u $push2=, $pop1, $0 + i32.store8 d+10($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end97: + .size fn8_a, .Lfunc_end97-fn8_a + # -- End function + .section .text.fn9_a,"ax",@progbits + .hidden fn9_a # -- Begin function fn9_a + .globl fn9_a + .type fn9_a,@function +fn9_a: # @fn9_a + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load8_u $push1=, d+11($pop3) + i32.div_u $push2=, $pop1, $0 + i32.store8 d+11($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end98: + .size fn9_a, .Lfunc_end98-fn9_a + # -- End function + .section .text.fn1_b,"ax",@progbits + .hidden fn1_b # -- Begin function fn1_b + .globl fn1_b + .type fn1_b,@function +fn1_b: # @fn1_b + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, b+8($pop9) + tee_local $push7=, $1=, $pop8 + i32.const $push3=, 63 + i32.and $push4=, $pop7, $pop3 + i32.rem_u $push5=, $pop4, $0 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b+8($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end99: + .size fn1_b, .Lfunc_end99-fn1_b + # -- End function + .section .text.fn2_b,"ax",@progbits + .hidden fn2_b # -- Begin function fn2_b + .globl fn2_b + .type fn2_b,@function +fn2_b: # @fn2_b + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push13=, 0 + i32.load $push12=, b+8($pop13) + tee_local $push11=, $1=, $pop12 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop11, $pop3 + i32.const $push5=, 2047 + i32.and $push6=, $pop4, $pop5 + i32.rem_u $push7=, $pop6, $0 + i32.const $push10=, 6 + i32.shl $push8=, $pop7, $pop10 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push9=, $pop8, $pop2 + i32.store b+8($pop0), $pop9 + # fallthrough-return + .endfunc +.Lfunc_end100: + .size fn2_b, .Lfunc_end100-fn2_b + # -- End function + .section .text.fn3_b,"ax",@progbits + .hidden fn3_b # -- Begin function fn3_b + .globl fn3_b + .type fn3_b,@function +fn3_b: # @fn3_b + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, b+8($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 17 + i32.shr_u $push4=, $pop9, $pop3 + i32.rem_u $push5=, $pop4, $0 + i32.const $push8=, 17 + i32.shl $push6=, $pop5, $pop8 + i32.const $push1=, 131071 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end101: + .size fn3_b, .Lfunc_end101-fn3_b + # -- End function + .section .text.fn4_b,"ax",@progbits + .hidden fn4_b # -- Begin function fn4_b + .globl fn4_b + .type fn4_b,@function +fn4_b: # @fn4_b + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, c+8($pop9) + tee_local $push7=, $1=, $pop8 + i32.const $push3=, 31 + i32.and $push4=, $pop7, $pop3 + i32.rem_u $push5=, $pop4, $0 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store c+8($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end102: + .size fn4_b, .Lfunc_end102-fn4_b + # -- End function + .section .text.fn5_b,"ax",@progbits + .hidden fn5_b # -- Begin function fn5_b + .globl fn5_b + .type fn5_b,@function +fn5_b: # @fn5_b + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push13=, 0 + i32.load $push12=, c+8($pop13) + tee_local $push11=, $1=, $pop12 + i32.const $push3=, 5 + i32.shr_u $push4=, $pop11, $pop3 + i32.const $push5=, 1 + i32.and $push6=, $pop4, $pop5 + i32.rem_u $push7=, $pop6, $0 + i32.const $push10=, 5 + i32.shl $push8=, $pop7, $pop10 + i32.const $push1=, -33 + i32.and $push2=, $1, $pop1 + i32.or $push9=, $pop8, $pop2 + i32.store c+8($pop0), $pop9 + # fallthrough-return + .endfunc +.Lfunc_end103: + .size fn5_b, .Lfunc_end103-fn5_b + # -- End function + .section .text.fn6_b,"ax",@progbits + .hidden fn6_b # -- Begin function fn6_b + .globl fn6_b + .type fn6_b,@function +fn6_b: # @fn6_b + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, c+8($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop9, $pop3 + i32.rem_u $push5=, $pop4, $0 + i32.const $push8=, 6 + i32.shl $push6=, $pop5, $pop8 + i32.const $push1=, 63 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end104: + .size fn6_b, .Lfunc_end104-fn6_b + # -- End function + .section .text.fn7_b,"ax",@progbits + .hidden fn7_b # -- Begin function fn7_b + .globl fn7_b + .type fn7_b,@function +fn7_b: # @fn7_b + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load16_u $push1=, d+8($pop3) + i32.rem_u $push2=, $pop1, $0 + i32.store16 d+8($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end105: + .size fn7_b, .Lfunc_end105-fn7_b + # -- End function + .section .text.fn8_b,"ax",@progbits + .hidden fn8_b # -- Begin function fn8_b + .globl fn8_b + .type fn8_b,@function +fn8_b: # @fn8_b + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load8_u $push1=, d+10($pop3) + i32.rem_u $push2=, $pop1, $0 + i32.store8 d+10($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end106: + .size fn8_b, .Lfunc_end106-fn8_b + # -- End function + .section .text.fn9_b,"ax",@progbits + .hidden fn9_b # -- Begin function fn9_b + .globl fn9_b + .type fn9_b,@function +fn9_b: # @fn9_b + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load8_u $push1=, d+11($pop3) + i32.rem_u $push2=, $pop1, $0 + i32.store8 d+11($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end107: + .size fn9_b, .Lfunc_end107-fn9_b + # -- End function + .section .text.fn1_c,"ax",@progbits + .hidden fn1_c # -- Begin function fn1_c + .globl fn1_c + .type fn1_c,@function +fn1_c: # @fn1_c + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 3 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 63 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end108: + .size fn1_c, .Lfunc_end108-fn1_c + # -- End function + .section .text.fn2_c,"ax",@progbits + .hidden fn2_c # -- Begin function fn2_c + .globl fn2_c + .type fn2_c,@function +fn2_c: # @fn2_c + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 192 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 131008 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end109: + .size fn2_c, .Lfunc_end109-fn2_c + # -- End function + .section .text.fn3_c,"ax",@progbits + .hidden fn3_c # -- Begin function fn3_c + .globl fn3_c + .type fn3_c,@function +fn3_c: # @fn3_c + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b+8($pop4) + i32.const $push2=, 393216 + i32.add $push3=, $pop1, $pop2 + i32.store b+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end110: + .size fn3_c, .Lfunc_end110-fn3_c + # -- End function + .section .text.fn4_c,"ax",@progbits + .hidden fn4_c # -- Begin function fn4_c + .globl fn4_c + .type fn4_c,@function +fn4_c: # @fn4_c + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 3 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 31 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end111: + .size fn4_c, .Lfunc_end111-fn4_c + # -- End function + .section .text.fn5_c,"ax",@progbits + .hidden fn5_c # -- Begin function fn5_c + .globl fn5_c + .type fn5_c,@function +fn5_c: # @fn5_c + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end112: + .size fn5_c, .Lfunc_end112-fn5_c + # -- End function + .section .text.fn6_c,"ax",@progbits + .hidden fn6_c # -- Begin function fn6_c + .globl fn6_c + .type fn6_c,@function +fn6_c: # @fn6_c + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, 192 + i32.add $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end113: + .size fn6_c, .Lfunc_end113-fn6_c + # -- End function + .section .text.fn7_c,"ax",@progbits + .hidden fn7_c # -- Begin function fn7_c + .globl fn7_c + .type fn7_c,@function +fn7_c: # @fn7_c + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, 3 + i32.add $push3=, $pop1, $pop2 + i32.store16 d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end114: + .size fn7_c, .Lfunc_end114-fn7_c + # -- End function + .section .text.fn8_c,"ax",@progbits + .hidden fn8_c # -- Begin function fn8_c + .globl fn8_c + .type fn8_c,@function +fn8_c: # @fn8_c + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, d+8($pop6) + i32.const $push2=, 196608 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 16 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 d+10($pop0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end115: + .size fn8_c, .Lfunc_end115-fn8_c + # -- End function + .section .text.fn9_c,"ax",@progbits + .hidden fn9_c # -- Begin function fn9_c + .globl fn9_c + .type fn9_c,@function +fn9_c: # @fn9_c + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, 50331648 + i32.add $push3=, $pop1, $pop2 + i32.store d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end116: + .size fn9_c, .Lfunc_end116-fn9_c + # -- End function + .section .text.fn1_d,"ax",@progbits + .hidden fn1_d # -- Begin function fn1_d + .globl fn1_d + .type fn1_d,@function +fn1_d: # @fn1_d + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 57 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 63 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end117: + .size fn1_d, .Lfunc_end117-fn1_d + # -- End function + .section .text.fn2_d,"ax",@progbits + .hidden fn2_d # -- Begin function fn2_d + .globl fn2_d + .type fn2_d,@function +fn2_d: # @fn2_d + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 130624 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 131008 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end118: + .size fn2_d, .Lfunc_end118-fn2_d + # -- End function + .section .text.fn3_d,"ax",@progbits + .hidden fn3_d # -- Begin function fn3_d + .globl fn3_d + .type fn3_d,@function +fn3_d: # @fn3_d + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b+8($pop4) + i32.const $push2=, -917504 + i32.add $push3=, $pop1, $pop2 + i32.store b+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end119: + .size fn3_d, .Lfunc_end119-fn3_d + # -- End function + .section .text.fn4_d,"ax",@progbits + .hidden fn4_d # -- Begin function fn4_d + .globl fn4_d + .type fn4_d,@function +fn4_d: # @fn4_d + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 25 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 31 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end120: + .size fn4_d, .Lfunc_end120-fn4_d + # -- End function + .section .text.fn5_d,"ax",@progbits + .hidden fn5_d # -- Begin function fn5_d + .globl fn5_d + .type fn5_d,@function +fn5_d: # @fn5_d + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end121: + .size fn5_d, .Lfunc_end121-fn5_d + # -- End function + .section .text.fn6_d,"ax",@progbits + .hidden fn6_d # -- Begin function fn6_d + .globl fn6_d + .type fn6_d,@function +fn6_d: # @fn6_d + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, -448 + i32.add $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end122: + .size fn6_d, .Lfunc_end122-fn6_d + # -- End function + .section .text.fn7_d,"ax",@progbits + .hidden fn7_d # -- Begin function fn7_d + .globl fn7_d + .type fn7_d,@function +fn7_d: # @fn7_d + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, 65529 + i32.add $push3=, $pop1, $pop2 + i32.store16 d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end123: + .size fn7_d, .Lfunc_end123-fn7_d + # -- End function + .section .text.fn8_d,"ax",@progbits + .hidden fn8_d # -- Begin function fn8_d + .globl fn8_d + .type fn8_d,@function +fn8_d: # @fn8_d + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, d+8($pop6) + i32.const $push2=, 16318464 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 16 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 d+10($pop0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end124: + .size fn8_d, .Lfunc_end124-fn8_d + # -- End function + .section .text.fn9_d,"ax",@progbits + .hidden fn9_d # -- Begin function fn9_d + .globl fn9_d + .type fn9_d,@function +fn9_d: # @fn9_d + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, -117440512 + i32.add $push3=, $pop1, $pop2 + i32.store d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end125: + .size fn9_d, .Lfunc_end125-fn9_d + # -- End function + .section .text.fn1_e,"ax",@progbits + .hidden fn1_e # -- Begin function fn1_e + .globl fn1_e + .type fn1_e,@function +fn1_e: # @fn1_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b+8($pop4) + i32.const $push2=, -43 + i32.and $push3=, $pop1, $pop2 + i32.store b+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end126: + .size fn1_e, .Lfunc_end126-fn1_e + # -- End function + .section .text.fn2_e,"ax",@progbits + .hidden fn2_e # -- Begin function fn2_e + .globl fn2_e + .type fn2_e,@function +fn2_e: # @fn2_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b+8($pop4) + i32.const $push2=, -129665 + i32.and $push3=, $pop1, $pop2 + i32.store b+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end127: + .size fn2_e, .Lfunc_end127-fn2_e + # -- End function + .section .text.fn3_e,"ax",@progbits + .hidden fn3_e # -- Begin function fn3_e + .globl fn3_e + .type fn3_e,@function +fn3_e: # @fn3_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b+8($pop4) + i32.const $push2=, 2883583 + i32.and $push3=, $pop1, $pop2 + i32.store b+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end128: + .size fn3_e, .Lfunc_end128-fn3_e + # -- End function + .section .text.fn4_e,"ax",@progbits + .hidden fn4_e # -- Begin function fn4_e + .globl fn4_e + .type fn4_e,@function +fn4_e: # @fn4_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, -11 + i32.and $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end129: + .size fn4_e, .Lfunc_end129-fn4_e + # -- End function + .section .text.fn5_e,"ax",@progbits + .hidden fn5_e # -- Begin function fn5_e + .globl fn5_e + .type fn5_e,@function +fn5_e: # @fn5_e + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end130: + .size fn5_e, .Lfunc_end130-fn5_e + # -- End function + .section .text.fn6_e,"ax",@progbits + .hidden fn6_e # -- Begin function fn6_e + .globl fn6_e + .type fn6_e,@function +fn6_e: # @fn6_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, 1407 + i32.and $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end131: + .size fn6_e, .Lfunc_end131-fn6_e + # -- End function + .section .text.fn7_e,"ax",@progbits + .hidden fn7_e # -- Begin function fn7_e + .globl fn7_e + .type fn7_e,@function +fn7_e: # @fn7_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, -65515 + i32.and $push3=, $pop1, $pop2 + i32.store d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end132: + .size fn7_e, .Lfunc_end132-fn7_e + # -- End function + .section .text.fn8_e,"ax",@progbits + .hidden fn8_e # -- Begin function fn8_e + .globl fn8_e + .type fn8_e,@function +fn8_e: # @fn8_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, -15335425 + i32.and $push3=, $pop1, $pop2 + i32.store d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end133: + .size fn8_e, .Lfunc_end133-fn8_e + # -- End function + .section .text.fn9_e,"ax",@progbits + .hidden fn9_e # -- Begin function fn9_e + .globl fn9_e + .type fn9_e,@function +fn9_e: # @fn9_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, 369098751 + i32.and $push3=, $pop1, $pop2 + i32.store d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end134: + .size fn9_e, .Lfunc_end134-fn9_e + # -- End function + .section .text.fn1_f,"ax",@progbits + .hidden fn1_f # -- Begin function fn1_f + .globl fn1_f + .type fn1_f,@function +fn1_f: # @fn1_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b+8($pop4) + i32.const $push2=, 19 + i32.or $push3=, $pop1, $pop2 + i32.store b+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end135: + .size fn1_f, .Lfunc_end135-fn1_f + # -- End function + .section .text.fn2_f,"ax",@progbits + .hidden fn2_f # -- Begin function fn2_f + .globl fn2_f + .type fn2_f,@function +fn2_f: # @fn2_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b+8($pop4) + i32.const $push2=, 1216 + i32.or $push3=, $pop1, $pop2 + i32.store b+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end136: + .size fn2_f, .Lfunc_end136-fn2_f + # -- End function + .section .text.fn3_f,"ax",@progbits + .hidden fn3_f # -- Begin function fn3_f + .globl fn3_f + .type fn3_f,@function +fn3_f: # @fn3_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b+8($pop4) + i32.const $push2=, 2490368 + i32.or $push3=, $pop1, $pop2 + i32.store b+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end137: + .size fn3_f, .Lfunc_end137-fn3_f + # -- End function + .section .text.fn4_f,"ax",@progbits + .hidden fn4_f # -- Begin function fn4_f + .globl fn4_f + .type fn4_f,@function +fn4_f: # @fn4_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, 19 + i32.or $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end138: + .size fn4_f, .Lfunc_end138-fn4_f + # -- End function + .section .text.fn5_f,"ax",@progbits + .hidden fn5_f # -- Begin function fn5_f + .globl fn5_f + .type fn5_f,@function +fn5_f: # @fn5_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, 32 + i32.or $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end139: + .size fn5_f, .Lfunc_end139-fn5_f + # -- End function + .section .text.fn6_f,"ax",@progbits + .hidden fn6_f # -- Begin function fn6_f + .globl fn6_f + .type fn6_f,@function +fn6_f: # @fn6_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, 1216 + i32.or $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end140: + .size fn6_f, .Lfunc_end140-fn6_f + # -- End function + .section .text.fn7_f,"ax",@progbits + .hidden fn7_f # -- Begin function fn7_f + .globl fn7_f + .type fn7_f,@function +fn7_f: # @fn7_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, 19 + i32.or $push3=, $pop1, $pop2 + i32.store d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end141: + .size fn7_f, .Lfunc_end141-fn7_f + # -- End function + .section .text.fn8_f,"ax",@progbits + .hidden fn8_f # -- Begin function fn8_f + .globl fn8_f + .type fn8_f,@function +fn8_f: # @fn8_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, 1245184 + i32.or $push3=, $pop1, $pop2 + i32.store d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end142: + .size fn8_f, .Lfunc_end142-fn8_f + # -- End function + .section .text.fn9_f,"ax",@progbits + .hidden fn9_f # -- Begin function fn9_f + .globl fn9_f + .type fn9_f,@function +fn9_f: # @fn9_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, 318767104 + i32.or $push3=, $pop1, $pop2 + i32.store d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end143: + .size fn9_f, .Lfunc_end143-fn9_f + # -- End function + .section .text.fn1_g,"ax",@progbits + .hidden fn1_g # -- Begin function fn1_g + .globl fn1_g + .type fn1_g,@function +fn1_g: # @fn1_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b+8($pop4) + i32.const $push2=, 37 + i32.xor $push3=, $pop1, $pop2 + i32.store b+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end144: + .size fn1_g, .Lfunc_end144-fn1_g + # -- End function + .section .text.fn2_g,"ax",@progbits + .hidden fn2_g # -- Begin function fn2_g + .globl fn2_g + .type fn2_g,@function +fn2_g: # @fn2_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b+8($pop4) + i32.const $push2=, 2368 + i32.xor $push3=, $pop1, $pop2 + i32.store b+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end145: + .size fn2_g, .Lfunc_end145-fn2_g + # -- End function + .section .text.fn3_g,"ax",@progbits + .hidden fn3_g # -- Begin function fn3_g + .globl fn3_g + .type fn3_g,@function +fn3_g: # @fn3_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b+8($pop4) + i32.const $push2=, 4849664 + i32.xor $push3=, $pop1, $pop2 + i32.store b+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end146: + .size fn3_g, .Lfunc_end146-fn3_g + # -- End function + .section .text.fn4_g,"ax",@progbits + .hidden fn4_g # -- Begin function fn4_g + .globl fn4_g + .type fn4_g,@function +fn4_g: # @fn4_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, 5 + i32.xor $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end147: + .size fn4_g, .Lfunc_end147-fn4_g + # -- End function + .section .text.fn5_g,"ax",@progbits + .hidden fn5_g # -- Begin function fn5_g + .globl fn5_g + .type fn5_g,@function +fn5_g: # @fn5_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end148: + .size fn5_g, .Lfunc_end148-fn5_g + # -- End function + .section .text.fn6_g,"ax",@progbits + .hidden fn6_g # -- Begin function fn6_g + .globl fn6_g + .type fn6_g,@function +fn6_g: # @fn6_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, 2368 + i32.xor $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end149: + .size fn6_g, .Lfunc_end149-fn6_g + # -- End function + .section .text.fn7_g,"ax",@progbits + .hidden fn7_g # -- Begin function fn7_g + .globl fn7_g + .type fn7_g,@function +fn7_g: # @fn7_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, 37 + i32.xor $push3=, $pop1, $pop2 + i32.store d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end150: + .size fn7_g, .Lfunc_end150-fn7_g + # -- End function + .section .text.fn8_g,"ax",@progbits + .hidden fn8_g # -- Begin function fn8_g + .globl fn8_g + .type fn8_g,@function +fn8_g: # @fn8_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, 2424832 + i32.xor $push3=, $pop1, $pop2 + i32.store d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end151: + .size fn8_g, .Lfunc_end151-fn8_g + # -- End function + .section .text.fn9_g,"ax",@progbits + .hidden fn9_g # -- Begin function fn9_g + .globl fn9_g + .type fn9_g,@function +fn9_g: # @fn9_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, 620756992 + i32.xor $push3=, $pop1, $pop2 + i32.store d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end152: + .size fn9_g, .Lfunc_end152-fn9_g + # -- End function + .section .text.fn1_h,"ax",@progbits + .hidden fn1_h # -- Begin function fn1_h + .globl fn1_h + .type fn1_h,@function +fn1_h: # @fn1_h + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 63 + i32.and $push4=, $pop8, $pop3 + i32.const $push5=, 17 + i32.div_u $push6=, $pop4, $pop5 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end153: + .size fn1_h, .Lfunc_end153-fn1_h + # -- End function + .section .text.fn2_h,"ax",@progbits + .hidden fn2_h # -- Begin function fn2_h + .globl fn2_h + .type fn2_h,@function +fn2_h: # @fn2_h + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push14=, 0 + i32.load $push13=, b+8($pop14) + tee_local $push12=, $1=, $pop13 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop12, $pop3 + i32.const $push5=, 2047 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 17 + i32.div_u $push8=, $pop6, $pop7 + i32.const $push11=, 6 + i32.shl $push9=, $pop8, $pop11 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push10=, $pop9, $pop2 + i32.store b+8($pop0), $pop10 + # fallthrough-return + .endfunc +.Lfunc_end154: + .size fn2_h, .Lfunc_end154-fn2_h + # -- End function + .section .text.fn3_h,"ax",@progbits + .hidden fn3_h # -- Begin function fn3_h + .globl fn3_h + .type fn3_h,@function +fn3_h: # @fn3_h + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 2228224 + i32.div_u $push4=, $pop8, $pop3 + i32.const $push5=, 17 + i32.shl $push6=, $pop4, $pop5 + i32.const $push1=, 131071 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end155: + .size fn3_h, .Lfunc_end155-fn3_h + # -- End function + .section .text.fn4_h,"ax",@progbits + .hidden fn4_h # -- Begin function fn4_h + .globl fn4_h + .type fn4_h,@function +fn4_h: # @fn4_h + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 31 + i32.and $push4=, $pop8, $pop3 + i32.const $push5=, 17 + i32.div_u $push6=, $pop4, $pop5 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end156: + .size fn4_h, .Lfunc_end156-fn4_h + # -- End function + .section .text.fn5_h,"ax",@progbits + .hidden fn5_h # -- Begin function fn5_h + .globl fn5_h + .type fn5_h,@function +fn5_h: # @fn5_h + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c+8($pop4) + i32.const $push2=, -33 + i32.and $push3=, $pop1, $pop2 + i32.store c+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end157: + .size fn5_h, .Lfunc_end157-fn5_h + # -- End function + .section .text.fn6_h,"ax",@progbits + .hidden fn6_h # -- Begin function fn6_h + .globl fn6_h + .type fn6_h,@function +fn6_h: # @fn6_h + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 1088 + i32.div_u $push4=, $pop8, $pop3 + i32.const $push5=, 6 + i32.shl $push6=, $pop4, $pop5 + i32.const $push1=, 63 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end158: + .size fn6_h, .Lfunc_end158-fn6_h + # -- End function + .section .text.fn7_h,"ax",@progbits + .hidden fn7_h # -- Begin function fn7_h + .globl fn7_h + .type fn7_h,@function +fn7_h: # @fn7_h + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load16_u $push1=, d+8($pop4) + i32.const $push2=, 17 + i32.div_u $push3=, $pop1, $pop2 + i32.store16 d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end159: + .size fn7_h, .Lfunc_end159-fn7_h + # -- End function + .section .text.fn8_h,"ax",@progbits + .hidden fn8_h # -- Begin function fn8_h + .globl fn8_h + .type fn8_h,@function +fn8_h: # @fn8_h + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load8_u $push1=, d+10($pop4) + i32.const $push2=, 17 + i32.div_u $push3=, $pop1, $pop2 + i32.store8 d+10($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end160: + .size fn8_h, .Lfunc_end160-fn8_h + # -- End function + .section .text.fn9_h,"ax",@progbits + .hidden fn9_h # -- Begin function fn9_h + .globl fn9_h + .type fn9_h,@function +fn9_h: # @fn9_h + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d+8($pop4) + i32.const $push2=, 285212672 + i32.div_u $push3=, $pop1, $pop2 + i32.store8 d+11($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end161: + .size fn9_h, .Lfunc_end161-fn9_h + # -- End function + .section .text.fn1_i,"ax",@progbits + .hidden fn1_i # -- Begin function fn1_i + .globl fn1_i + .type fn1_i,@function +fn1_i: # @fn1_i + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 63 + i32.and $push4=, $pop8, $pop3 + i32.const $push5=, 19 + i32.rem_u $push6=, $pop4, $pop5 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end162: + .size fn1_i, .Lfunc_end162-fn1_i + # -- End function + .section .text.fn2_i,"ax",@progbits + .hidden fn2_i # -- Begin function fn2_i + .globl fn2_i + .type fn2_i,@function +fn2_i: # @fn2_i + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push14=, 0 + i32.load $push13=, b+8($pop14) + tee_local $push12=, $1=, $pop13 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop12, $pop3 + i32.const $push5=, 2047 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 19 + i32.rem_u $push8=, $pop6, $pop7 + i32.const $push11=, 6 + i32.shl $push9=, $pop8, $pop11 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push10=, $pop9, $pop2 + i32.store b+8($pop0), $pop10 + # fallthrough-return + .endfunc +.Lfunc_end163: + .size fn2_i, .Lfunc_end163-fn2_i + # -- End function + .section .text.fn3_i,"ax",@progbits + .hidden fn3_i # -- Begin function fn3_i + .globl fn3_i + .type fn3_i,@function +fn3_i: # @fn3_i + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push12=, 0 + i32.load $push11=, b+8($pop12) + tee_local $push10=, $1=, $pop11 + i32.const $push3=, 17 + i32.shr_u $push4=, $pop10, $pop3 + i32.const $push5=, 19 + i32.rem_u $push6=, $pop4, $pop5 + i32.const $push9=, 17 + i32.shl $push7=, $pop6, $pop9 + i32.const $push1=, 131071 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store b+8($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end164: + .size fn3_i, .Lfunc_end164-fn3_i + # -- End function + .section .text.fn4_i,"ax",@progbits + .hidden fn4_i # -- Begin function fn4_i + .globl fn4_i + .type fn4_i,@function +fn4_i: # @fn4_i + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c+8($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 31 + i32.and $push4=, $pop8, $pop3 + i32.const $push5=, 19 + i32.rem_u $push6=, $pop4, $pop5 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c+8($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end165: + .size fn4_i, .Lfunc_end165-fn4_i + # -- End function + .section .text.fn5_i,"ax",@progbits + .hidden fn5_i # -- Begin function fn5_i + .globl fn5_i + .type fn5_i,@function +fn5_i: # @fn5_i + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end166: + .size fn5_i, .Lfunc_end166-fn5_i + # -- End function + .section .text.fn6_i,"ax",@progbits + .hidden fn6_i # -- Begin function fn6_i + .globl fn6_i + .type fn6_i,@function +fn6_i: # @fn6_i + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push12=, 0 + i32.load $push11=, c+8($pop12) + tee_local $push10=, $1=, $pop11 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop10, $pop3 + i32.const $push5=, 19 + i32.rem_u $push6=, $pop4, $pop5 + i32.const $push9=, 6 + i32.shl $push7=, $pop6, $pop9 + i32.const $push1=, 63 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store c+8($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end167: + .size fn6_i, .Lfunc_end167-fn6_i + # -- End function + .section .text.fn7_i,"ax",@progbits + .hidden fn7_i # -- Begin function fn7_i + .globl fn7_i + .type fn7_i,@function +fn7_i: # @fn7_i + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load16_u $push1=, d+8($pop4) + i32.const $push2=, 19 + i32.rem_u $push3=, $pop1, $pop2 + i32.store16 d+8($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end168: + .size fn7_i, .Lfunc_end168-fn7_i + # -- End function + .section .text.fn8_i,"ax",@progbits + .hidden fn8_i # -- Begin function fn8_i + .globl fn8_i + .type fn8_i,@function +fn8_i: # @fn8_i + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load8_u $push1=, d+10($pop4) + i32.const $push2=, 19 + i32.rem_u $push3=, $pop1, $pop2 + i32.store8 d+10($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end169: + .size fn8_i, .Lfunc_end169-fn8_i + # -- End function + .section .text.fn9_i,"ax",@progbits + .hidden fn9_i # -- Begin function fn9_i + .globl fn9_i + .type fn9_i,@function +fn9_i: # @fn9_i + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load8_u $push1=, d+11($pop4) + i32.const $push2=, 19 + i32.rem_u $push3=, $pop1, $pop2 + i32.store8 d+11($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end170: + .size fn9_i, .Lfunc_end170-fn9_i + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end1610 + i32.const $push1=, 0 + i32.const $push0=, -2147483595 + i32.store c+8($pop1), $pop0 + i32.const $push6=, 0 + i32.const $push2=, 560051 + i32.store b+8($pop6), $pop2 + i32.const $push5=, 0 + i32.const $push3=, -1147377476 + i32.store d+8($pop5), $pop3 + i32.const $push4=, 0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end171: + .size main, .Lfunc_end171-main + # -- End function + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 3 +b: + .skip 16 + .size b, 16 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 3 +c: + .skip 16 + .size c, 16 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 3 +d: + .skip 16 + .size d, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20040705-2.c.s b/src/binaryen/test/torture-s/20040705-2.c.s new file mode 100644 index 0000000000..541891d112 --- /dev/null +++ b/src/binaryen/test/torture-s/20040705-2.c.s @@ -0,0 +1,3574 @@ + .text + .file "20040705-2.c" + .section .text.ret1,"ax",@progbits + .hidden ret1 # -- Begin function ret1 + .globl ret1 + .type ret1,@function +ret1: # @ret1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, b($pop0) + i32.const $push2=, 63 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size ret1, .Lfunc_end0-ret1 + # -- End function + .section .text.ret2,"ax",@progbits + .hidden ret2 # -- Begin function ret2 + .globl ret2 + .type ret2,@function +ret2: # @ret2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, b($pop0) + i32.const $push2=, 6 + i32.shr_u $push3=, $pop1, $pop2 + i32.const $push4=, 2047 + i32.and $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end1: + .size ret2, .Lfunc_end1-ret2 + # -- End function + .section .text.ret3,"ax",@progbits + .hidden ret3 # -- Begin function ret3 + .globl ret3 + .type ret3,@function +ret3: # @ret3 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, b($pop0) + i32.const $push2=, 17 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size ret3, .Lfunc_end2-ret3 + # -- End function + .section .text.ret4,"ax",@progbits + .hidden ret4 # -- Begin function ret4 + .globl ret4 + .type ret4,@function +ret4: # @ret4 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, c($pop0) + i32.const $push2=, 31 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end3: + .size ret4, .Lfunc_end3-ret4 + # -- End function + .section .text.ret5,"ax",@progbits + .hidden ret5 # -- Begin function ret5 + .globl ret5 + .type ret5,@function +ret5: # @ret5 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, c($pop0) + i32.const $push2=, 5 + i32.shr_u $push3=, $pop1, $pop2 + i32.const $push4=, 1 + i32.and $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end4: + .size ret5, .Lfunc_end4-ret5 + # -- End function + .section .text.ret6,"ax",@progbits + .hidden ret6 # -- Begin function ret6 + .globl ret6 + .type ret6,@function +ret6: # @ret6 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, c($pop0) + i32.const $push2=, 6 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end5: + .size ret6, .Lfunc_end5-ret6 + # -- End function + .section .text.ret7,"ax",@progbits + .hidden ret7 # -- Begin function ret7 + .globl ret7 + .type ret7,@function +ret7: # @ret7 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, d($pop0) + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end6: + .size ret7, .Lfunc_end6-ret7 + # -- End function + .section .text.ret8,"ax",@progbits + .hidden ret8 # -- Begin function ret8 + .globl ret8 + .type ret8,@function +ret8: # @ret8 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, d+2($pop0) + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end7: + .size ret8, .Lfunc_end7-ret8 + # -- End function + .section .text.ret9,"ax",@progbits + .hidden ret9 # -- Begin function ret9 + .globl ret9 + .type ret9,@function +ret9: # @ret9 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, d+3($pop0) + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end8: + .size ret9, .Lfunc_end8-ret9 + # -- End function + .section .text.fn1_1,"ax",@progbits + .hidden fn1_1 # -- Begin function fn1_1 + .globl fn1_1 + .type fn1_1,@function +fn1_1: # @fn1_1 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, b($pop9) + tee_local $push7=, $1=, $pop8 + i32.add $push3=, $pop7, $0 + i32.const $push4=, 63 + i32.and $push5=, $pop3, $pop4 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end9: + .size fn1_1, .Lfunc_end9-fn1_1 + # -- End function + .section .text.fn2_1,"ax",@progbits + .hidden fn2_1 # -- Begin function fn2_1 + .globl fn2_1 + .type fn2_1,@function +fn2_1: # @fn2_1 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, b($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 6 + i32.shl $push4=, $0, $pop3 + i32.add $push5=, $pop9, $pop4 + i32.const $push6=, 131008 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store b($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end10: + .size fn2_1, .Lfunc_end10-fn2_1 + # -- End function + .section .text.fn3_1,"ax",@progbits + .hidden fn3_1 # -- Begin function fn3_1 + .globl fn3_1 + .type fn3_1,@function +fn3_1: # @fn3_1 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, b($pop5) + i32.const $push0=, 17 + i32.shl $push1=, $0, $pop0 + i32.add $push4=, $pop3, $pop1 + i32.store b($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end11: + .size fn3_1, .Lfunc_end11-fn3_1 + # -- End function + .section .text.fn4_1,"ax",@progbits + .hidden fn4_1 # -- Begin function fn4_1 + .globl fn4_1 + .type fn4_1,@function +fn4_1: # @fn4_1 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, c($pop9) + tee_local $push7=, $1=, $pop8 + i32.add $push3=, $pop7, $0 + i32.const $push4=, 31 + i32.and $push5=, $pop3, $pop4 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store c($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end12: + .size fn4_1, .Lfunc_end12-fn4_1 + # -- End function + .section .text.fn5_1,"ax",@progbits + .hidden fn5_1 # -- Begin function fn5_1 + .globl fn5_1 + .type fn5_1,@function +fn5_1: # @fn5_1 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, c($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 5 + i32.shl $push4=, $0, $pop3 + i32.add $push5=, $pop9, $pop4 + i32.const $push6=, 32 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, -33 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store c($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end13: + .size fn5_1, .Lfunc_end13-fn5_1 + # -- End function + .section .text.fn6_1,"ax",@progbits + .hidden fn6_1 # -- Begin function fn6_1 + .globl fn6_1 + .type fn6_1,@function +fn6_1: # @fn6_1 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, c($pop5) + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.add $push4=, $pop3, $pop1 + i32.store c($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end14: + .size fn6_1, .Lfunc_end14-fn6_1 + # -- End function + .section .text.fn7_1,"ax",@progbits + .hidden fn7_1 # -- Begin function fn7_1 + .globl fn7_1 + .type fn7_1,@function +fn7_1: # @fn7_1 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load $push1=, d($pop3) + i32.add $push2=, $pop1, $0 + i32.store16 d($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end15: + .size fn7_1, .Lfunc_end15-fn7_1 + # -- End function + .section .text.fn8_1,"ax",@progbits + .hidden fn8_1 # -- Begin function fn8_1 + .globl fn8_1 + .type fn8_1,@function +fn8_1: # @fn8_1 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push7=, 0 + i32.load $push3=, d($pop7) + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + i32.add $push4=, $pop3, $pop1 + i32.const $push6=, 16 + i32.shr_u $push5=, $pop4, $pop6 + i32.store8 d+2($pop2), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end16: + .size fn8_1, .Lfunc_end16-fn8_1 + # -- End function + .section .text.fn9_1,"ax",@progbits + .hidden fn9_1 # -- Begin function fn9_1 + .globl fn9_1 + .type fn9_1,@function +fn9_1: # @fn9_1 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, d($pop5) + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.add $push4=, $pop3, $pop1 + i32.store d($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end17: + .size fn9_1, .Lfunc_end17-fn9_1 + # -- End function + .section .text.fn1_2,"ax",@progbits + .hidden fn1_2 # -- Begin function fn1_2 + .globl fn1_2 + .type fn1_2,@function +fn1_2: # @fn1_2 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 1 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 63 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end18: + .size fn1_2, .Lfunc_end18-fn1_2 + # -- End function + .section .text.fn2_2,"ax",@progbits + .hidden fn2_2 # -- Begin function fn2_2 + .globl fn2_2 + .type fn2_2,@function +fn2_2: # @fn2_2 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 64 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 131008 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end19: + .size fn2_2, .Lfunc_end19-fn2_2 + # -- End function + .section .text.fn3_2,"ax",@progbits + .hidden fn3_2 # -- Begin function fn3_2 + .globl fn3_2 + .type fn3_2,@function +fn3_2: # @fn3_2 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 131072 + i32.add $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end20: + .size fn3_2, .Lfunc_end20-fn3_2 + # -- End function + .section .text.fn4_2,"ax",@progbits + .hidden fn4_2 # -- Begin function fn4_2 + .globl fn4_2 + .type fn4_2,@function +fn4_2: # @fn4_2 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 1 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 31 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end21: + .size fn4_2, .Lfunc_end21-fn4_2 + # -- End function + .section .text.fn5_2,"ax",@progbits + .hidden fn5_2 # -- Begin function fn5_2 + .globl fn5_2 + .type fn5_2,@function +fn5_2: # @fn5_2 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end22: + .size fn5_2, .Lfunc_end22-fn5_2 + # -- End function + .section .text.fn6_2,"ax",@progbits + .hidden fn6_2 # -- Begin function fn6_2 + .globl fn6_2 + .type fn6_2,@function +fn6_2: # @fn6_2 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 64 + i32.add $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end23: + .size fn6_2, .Lfunc_end23-fn6_2 + # -- End function + .section .text.fn7_2,"ax",@progbits + .hidden fn7_2 # -- Begin function fn7_2 + .globl fn7_2 + .type fn7_2,@function +fn7_2: # @fn7_2 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store16 d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end24: + .size fn7_2, .Lfunc_end24-fn7_2 + # -- End function + .section .text.fn8_2,"ax",@progbits + .hidden fn8_2 # -- Begin function fn8_2 + .globl fn8_2 + .type fn8_2,@function +fn8_2: # @fn8_2 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, d($pop6) + i32.const $push2=, 65536 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 16 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 d+2($pop0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end25: + .size fn8_2, .Lfunc_end25-fn8_2 + # -- End function + .section .text.fn9_2,"ax",@progbits + .hidden fn9_2 # -- Begin function fn9_2 + .globl fn9_2 + .type fn9_2,@function +fn9_2: # @fn9_2 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 16777216 + i32.add $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end26: + .size fn9_2, .Lfunc_end26-fn9_2 + # -- End function + .section .text.fn1_3,"ax",@progbits + .hidden fn1_3 # -- Begin function fn1_3 + .globl fn1_3 + .type fn1_3,@function +fn1_3: # @fn1_3 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 1 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 63 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end27: + .size fn1_3, .Lfunc_end27-fn1_3 + # -- End function + .section .text.fn2_3,"ax",@progbits + .hidden fn2_3 # -- Begin function fn2_3 + .globl fn2_3 + .type fn2_3,@function +fn2_3: # @fn2_3 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 64 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 131008 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end28: + .size fn2_3, .Lfunc_end28-fn2_3 + # -- End function + .section .text.fn3_3,"ax",@progbits + .hidden fn3_3 # -- Begin function fn3_3 + .globl fn3_3 + .type fn3_3,@function +fn3_3: # @fn3_3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 131072 + i32.add $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end29: + .size fn3_3, .Lfunc_end29-fn3_3 + # -- End function + .section .text.fn4_3,"ax",@progbits + .hidden fn4_3 # -- Begin function fn4_3 + .globl fn4_3 + .type fn4_3,@function +fn4_3: # @fn4_3 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 1 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 31 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end30: + .size fn4_3, .Lfunc_end30-fn4_3 + # -- End function + .section .text.fn5_3,"ax",@progbits + .hidden fn5_3 # -- Begin function fn5_3 + .globl fn5_3 + .type fn5_3,@function +fn5_3: # @fn5_3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end31: + .size fn5_3, .Lfunc_end31-fn5_3 + # -- End function + .section .text.fn6_3,"ax",@progbits + .hidden fn6_3 # -- Begin function fn6_3 + .globl fn6_3 + .type fn6_3,@function +fn6_3: # @fn6_3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 64 + i32.add $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end32: + .size fn6_3, .Lfunc_end32-fn6_3 + # -- End function + .section .text.fn7_3,"ax",@progbits + .hidden fn7_3 # -- Begin function fn7_3 + .globl fn7_3 + .type fn7_3,@function +fn7_3: # @fn7_3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store16 d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end33: + .size fn7_3, .Lfunc_end33-fn7_3 + # -- End function + .section .text.fn8_3,"ax",@progbits + .hidden fn8_3 # -- Begin function fn8_3 + .globl fn8_3 + .type fn8_3,@function +fn8_3: # @fn8_3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, d($pop6) + i32.const $push2=, 65536 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 16 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 d+2($pop0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end34: + .size fn8_3, .Lfunc_end34-fn8_3 + # -- End function + .section .text.fn9_3,"ax",@progbits + .hidden fn9_3 # -- Begin function fn9_3 + .globl fn9_3 + .type fn9_3,@function +fn9_3: # @fn9_3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 16777216 + i32.add $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end35: + .size fn9_3, .Lfunc_end35-fn9_3 + # -- End function + .section .text.fn1_4,"ax",@progbits + .hidden fn1_4 # -- Begin function fn1_4 + .globl fn1_4 + .type fn1_4,@function +fn1_4: # @fn1_4 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, b($pop9) + tee_local $push7=, $1=, $pop8 + i32.sub $push3=, $pop7, $0 + i32.const $push4=, 63 + i32.and $push5=, $pop3, $pop4 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end36: + .size fn1_4, .Lfunc_end36-fn1_4 + # -- End function + .section .text.fn2_4,"ax",@progbits + .hidden fn2_4 # -- Begin function fn2_4 + .globl fn2_4 + .type fn2_4,@function +fn2_4: # @fn2_4 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, b($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 6 + i32.shl $push4=, $0, $pop3 + i32.sub $push5=, $pop9, $pop4 + i32.const $push6=, 131008 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store b($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end37: + .size fn2_4, .Lfunc_end37-fn2_4 + # -- End function + .section .text.fn3_4,"ax",@progbits + .hidden fn3_4 # -- Begin function fn3_4 + .globl fn3_4 + .type fn3_4,@function +fn3_4: # @fn3_4 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, b($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 17 + i32.shl $push4=, $0, $pop3 + i32.sub $push5=, $pop9, $pop4 + i32.const $push6=, -131072 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, 131071 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store b($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end38: + .size fn3_4, .Lfunc_end38-fn3_4 + # -- End function + .section .text.fn4_4,"ax",@progbits + .hidden fn4_4 # -- Begin function fn4_4 + .globl fn4_4 + .type fn4_4,@function +fn4_4: # @fn4_4 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, c($pop9) + tee_local $push7=, $1=, $pop8 + i32.sub $push3=, $pop7, $0 + i32.const $push4=, 31 + i32.and $push5=, $pop3, $pop4 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store c($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end39: + .size fn4_4, .Lfunc_end39-fn4_4 + # -- End function + .section .text.fn5_4,"ax",@progbits + .hidden fn5_4 # -- Begin function fn5_4 + .globl fn5_4 + .type fn5_4,@function +fn5_4: # @fn5_4 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, c($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 5 + i32.shl $push4=, $0, $pop3 + i32.sub $push5=, $pop9, $pop4 + i32.const $push6=, 32 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, -33 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store c($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end40: + .size fn5_4, .Lfunc_end40-fn5_4 + # -- End function + .section .text.fn6_4,"ax",@progbits + .hidden fn6_4 # -- Begin function fn6_4 + .globl fn6_4 + .type fn6_4,@function +fn6_4: # @fn6_4 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, c($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 6 + i32.shl $push4=, $0, $pop3 + i32.sub $push5=, $pop9, $pop4 + i32.const $push6=, -64 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, 63 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store c($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end41: + .size fn6_4, .Lfunc_end41-fn6_4 + # -- End function + .section .text.fn7_4,"ax",@progbits + .hidden fn7_4 # -- Begin function fn7_4 + .globl fn7_4 + .type fn7_4,@function +fn7_4: # @fn7_4 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load $push1=, d($pop3) + i32.sub $push2=, $pop1, $0 + i32.store16 d($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end42: + .size fn7_4, .Lfunc_end42-fn7_4 + # -- End function + .section .text.fn8_4,"ax",@progbits + .hidden fn8_4 # -- Begin function fn8_4 + .globl fn8_4 + .type fn8_4,@function +fn8_4: # @fn8_4 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push7=, 0 + i32.load $push3=, d($pop7) + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + i32.sub $push4=, $pop3, $pop1 + i32.const $push6=, 16 + i32.shr_u $push5=, $pop4, $pop6 + i32.store8 d+2($pop2), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end43: + .size fn8_4, .Lfunc_end43-fn8_4 + # -- End function + .section .text.fn9_4,"ax",@progbits + .hidden fn9_4 # -- Begin function fn9_4 + .globl fn9_4 + .type fn9_4,@function +fn9_4: # @fn9_4 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push7=, 0 + i32.load $push3=, d($pop7) + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.sub $push4=, $pop3, $pop1 + i32.const $push6=, 24 + i32.shr_u $push5=, $pop4, $pop6 + i32.store8 d+3($pop2), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end44: + .size fn9_4, .Lfunc_end44-fn9_4 + # -- End function + .section .text.fn1_5,"ax",@progbits + .hidden fn1_5 # -- Begin function fn1_5 + .globl fn1_5 + .type fn1_5,@function +fn1_5: # @fn1_5 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 63 + i32.add $push4=, $pop8, $pop3 + i32.const $push7=, 63 + i32.and $push5=, $pop4, $pop7 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end45: + .size fn1_5, .Lfunc_end45-fn1_5 + # -- End function + .section .text.fn2_5,"ax",@progbits + .hidden fn2_5 # -- Begin function fn2_5 + .globl fn2_5 + .type fn2_5,@function +fn2_5: # @fn2_5 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 131008 + i32.add $push4=, $pop8, $pop3 + i32.const $push7=, 131008 + i32.and $push5=, $pop4, $pop7 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end46: + .size fn2_5, .Lfunc_end46-fn2_5 + # -- End function + .section .text.fn3_5,"ax",@progbits + .hidden fn3_5 # -- Begin function fn3_5 + .globl fn3_5 + .type fn3_5,@function +fn3_5: # @fn3_5 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, -131072 + i32.add $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end47: + .size fn3_5, .Lfunc_end47-fn3_5 + # -- End function + .section .text.fn4_5,"ax",@progbits + .hidden fn4_5 # -- Begin function fn4_5 + .globl fn4_5 + .type fn4_5,@function +fn4_5: # @fn4_5 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 31 + i32.add $push4=, $pop8, $pop3 + i32.const $push7=, 31 + i32.and $push5=, $pop4, $pop7 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store c($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end48: + .size fn4_5, .Lfunc_end48-fn4_5 + # -- End function + .section .text.fn5_5,"ax",@progbits + .hidden fn5_5 # -- Begin function fn5_5 + .globl fn5_5 + .type fn5_5,@function +fn5_5: # @fn5_5 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end49: + .size fn5_5, .Lfunc_end49-fn5_5 + # -- End function + .section .text.fn6_5,"ax",@progbits + .hidden fn6_5 # -- Begin function fn6_5 + .globl fn6_5 + .type fn6_5,@function +fn6_5: # @fn6_5 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, -64 + i32.add $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end50: + .size fn6_5, .Lfunc_end50-fn6_5 + # -- End function + .section .text.fn7_5,"ax",@progbits + .hidden fn7_5 # -- Begin function fn7_5 + .globl fn7_5 + .type fn7_5,@function +fn7_5: # @fn7_5 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 65535 + i32.add $push3=, $pop1, $pop2 + i32.store16 d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end51: + .size fn7_5, .Lfunc_end51-fn7_5 + # -- End function + .section .text.fn8_5,"ax",@progbits + .hidden fn8_5 # -- Begin function fn8_5 + .globl fn8_5 + .type fn8_5,@function +fn8_5: # @fn8_5 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, d($pop6) + i32.const $push2=, 16711680 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 16 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 d+2($pop0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end52: + .size fn8_5, .Lfunc_end52-fn8_5 + # -- End function + .section .text.fn9_5,"ax",@progbits + .hidden fn9_5 # -- Begin function fn9_5 + .globl fn9_5 + .type fn9_5,@function +fn9_5: # @fn9_5 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, -16777216 + i32.add $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end53: + .size fn9_5, .Lfunc_end53-fn9_5 + # -- End function + .section .text.fn1_6,"ax",@progbits + .hidden fn1_6 # -- Begin function fn1_6 + .globl fn1_6 + .type fn1_6,@function +fn1_6: # @fn1_6 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 63 + i32.add $push4=, $pop8, $pop3 + i32.const $push7=, 63 + i32.and $push5=, $pop4, $pop7 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end54: + .size fn1_6, .Lfunc_end54-fn1_6 + # -- End function + .section .text.fn2_6,"ax",@progbits + .hidden fn2_6 # -- Begin function fn2_6 + .globl fn2_6 + .type fn2_6,@function +fn2_6: # @fn2_6 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 131008 + i32.add $push4=, $pop8, $pop3 + i32.const $push7=, 131008 + i32.and $push5=, $pop4, $pop7 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end55: + .size fn2_6, .Lfunc_end55-fn2_6 + # -- End function + .section .text.fn3_6,"ax",@progbits + .hidden fn3_6 # -- Begin function fn3_6 + .globl fn3_6 + .type fn3_6,@function +fn3_6: # @fn3_6 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, -131072 + i32.add $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end56: + .size fn3_6, .Lfunc_end56-fn3_6 + # -- End function + .section .text.fn4_6,"ax",@progbits + .hidden fn4_6 # -- Begin function fn4_6 + .globl fn4_6 + .type fn4_6,@function +fn4_6: # @fn4_6 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 31 + i32.add $push4=, $pop8, $pop3 + i32.const $push7=, 31 + i32.and $push5=, $pop4, $pop7 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store c($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end57: + .size fn4_6, .Lfunc_end57-fn4_6 + # -- End function + .section .text.fn5_6,"ax",@progbits + .hidden fn5_6 # -- Begin function fn5_6 + .globl fn5_6 + .type fn5_6,@function +fn5_6: # @fn5_6 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end58: + .size fn5_6, .Lfunc_end58-fn5_6 + # -- End function + .section .text.fn6_6,"ax",@progbits + .hidden fn6_6 # -- Begin function fn6_6 + .globl fn6_6 + .type fn6_6,@function +fn6_6: # @fn6_6 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, -64 + i32.add $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end59: + .size fn6_6, .Lfunc_end59-fn6_6 + # -- End function + .section .text.fn7_6,"ax",@progbits + .hidden fn7_6 # -- Begin function fn7_6 + .globl fn7_6 + .type fn7_6,@function +fn7_6: # @fn7_6 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 65535 + i32.add $push3=, $pop1, $pop2 + i32.store16 d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end60: + .size fn7_6, .Lfunc_end60-fn7_6 + # -- End function + .section .text.fn8_6,"ax",@progbits + .hidden fn8_6 # -- Begin function fn8_6 + .globl fn8_6 + .type fn8_6,@function +fn8_6: # @fn8_6 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, d($pop6) + i32.const $push2=, 16711680 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 16 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 d+2($pop0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end61: + .size fn8_6, .Lfunc_end61-fn8_6 + # -- End function + .section .text.fn9_6,"ax",@progbits + .hidden fn9_6 # -- Begin function fn9_6 + .globl fn9_6 + .type fn9_6,@function +fn9_6: # @fn9_6 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, -16777216 + i32.add $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end62: + .size fn9_6, .Lfunc_end62-fn9_6 + # -- End function + .section .text.fn1_7,"ax",@progbits + .hidden fn1_7 # -- Begin function fn1_7 + .globl fn1_7 + .type fn1_7,@function +fn1_7: # @fn1_7 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push0=, -64 + i32.or $push1=, $0, $pop0 + i32.const $push5=, 0 + i32.load $push3=, b($pop5) + i32.and $push4=, $pop1, $pop3 + i32.store b($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end63: + .size fn1_7, .Lfunc_end63-fn1_7 + # -- End function + .section .text.fn2_7,"ax",@progbits + .hidden fn2_7 # -- Begin function fn2_7 + .globl fn2_7 + .type fn2_7,@function +fn2_7: # @fn2_7 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, -131009 + i32.or $push3=, $pop1, $pop2 + i32.const $push7=, 0 + i32.load $push5=, b($pop7) + i32.and $push6=, $pop3, $pop5 + i32.store b($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end64: + .size fn2_7, .Lfunc_end64-fn2_7 + # -- End function + .section .text.fn3_7,"ax",@progbits + .hidden fn3_7 # -- Begin function fn3_7 + .globl fn3_7 + .type fn3_7,@function +fn3_7: # @fn3_7 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, b($pop7) + i32.const $push0=, 17 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 131071 + i32.or $push3=, $pop1, $pop2 + i32.and $push6=, $pop5, $pop3 + i32.store b($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end65: + .size fn3_7, .Lfunc_end65-fn3_7 + # -- End function + .section .text.fn4_7,"ax",@progbits + .hidden fn4_7 # -- Begin function fn4_7 + .globl fn4_7 + .type fn4_7,@function +fn4_7: # @fn4_7 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push0=, -32 + i32.or $push1=, $0, $pop0 + i32.const $push5=, 0 + i32.load $push3=, c($pop5) + i32.and $push4=, $pop1, $pop3 + i32.store c($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end66: + .size fn4_7, .Lfunc_end66-fn4_7 + # -- End function + .section .text.fn5_7,"ax",@progbits + .hidden fn5_7 # -- Begin function fn5_7 + .globl fn5_7 + .type fn5_7,@function +fn5_7: # @fn5_7 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push0=, 5 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, -33 + i32.or $push3=, $pop1, $pop2 + i32.const $push7=, 0 + i32.load $push5=, c($pop7) + i32.and $push6=, $pop3, $pop5 + i32.store c($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end67: + .size fn5_7, .Lfunc_end67-fn5_7 + # -- End function + .section .text.fn6_7,"ax",@progbits + .hidden fn6_7 # -- Begin function fn6_7 + .globl fn6_7 + .type fn6_7,@function +fn6_7: # @fn6_7 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, c($pop7) + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 63 + i32.or $push3=, $pop1, $pop2 + i32.and $push6=, $pop5, $pop3 + i32.store c($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end68: + .size fn6_7, .Lfunc_end68-fn6_7 + # -- End function + .section .text.fn7_7,"ax",@progbits + .hidden fn7_7 # -- Begin function fn7_7 + .globl fn7_7 + .type fn7_7,@function +fn7_7: # @fn7_7 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push0=, -65536 + i32.or $push1=, $0, $pop0 + i32.const $push5=, 0 + i32.load $push3=, d($pop5) + i32.and $push4=, $pop1, $pop3 + i32.store d($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end69: + .size fn7_7, .Lfunc_end69-fn7_7 + # -- End function + .section .text.fn8_7,"ax",@progbits + .hidden fn8_7 # -- Begin function fn8_7 + .globl fn8_7 + .type fn8_7,@function +fn8_7: # @fn8_7 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, -16711681 + i32.or $push3=, $pop1, $pop2 + i32.const $push7=, 0 + i32.load $push5=, d($pop7) + i32.and $push6=, $pop3, $pop5 + i32.store d($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end70: + .size fn8_7, .Lfunc_end70-fn8_7 + # -- End function + .section .text.fn9_7,"ax",@progbits + .hidden fn9_7 # -- Begin function fn9_7 + .globl fn9_7 + .type fn9_7,@function +fn9_7: # @fn9_7 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, d($pop7) + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 16777215 + i32.or $push3=, $pop1, $pop2 + i32.and $push6=, $pop5, $pop3 + i32.store d($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end71: + .size fn9_7, .Lfunc_end71-fn9_7 + # -- End function + .section .text.fn1_8,"ax",@progbits + .hidden fn1_8 # -- Begin function fn1_8 + .globl fn1_8 + .type fn1_8,@function +fn1_8: # @fn1_8 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, b($pop5) + i32.const $push0=, 63 + i32.and $push1=, $0, $pop0 + i32.or $push4=, $pop3, $pop1 + i32.store b($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end72: + .size fn1_8, .Lfunc_end72-fn1_8 + # -- End function + .section .text.fn2_8,"ax",@progbits + .hidden fn2_8 # -- Begin function fn2_8 + .globl fn2_8 + .type fn2_8,@function +fn2_8: # @fn2_8 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, b($pop7) + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 131008 + i32.and $push3=, $pop1, $pop2 + i32.or $push6=, $pop5, $pop3 + i32.store b($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end73: + .size fn2_8, .Lfunc_end73-fn2_8 + # -- End function + .section .text.fn3_8,"ax",@progbits + .hidden fn3_8 # -- Begin function fn3_8 + .globl fn3_8 + .type fn3_8,@function +fn3_8: # @fn3_8 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push11=, 0 + i32.load $push10=, b($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, -131072 + i32.and $push4=, $pop9, $pop3 + i32.const $push0=, 17 + i32.shl $push1=, $0, $pop0 + i32.or $push5=, $pop4, $pop1 + i32.const $push6=, 131071 + i32.and $push7=, $1, $pop6 + i32.or $push8=, $pop5, $pop7 + i32.store b($pop2), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end74: + .size fn3_8, .Lfunc_end74-fn3_8 + # -- End function + .section .text.fn4_8,"ax",@progbits + .hidden fn4_8 # -- Begin function fn4_8 + .globl fn4_8 + .type fn4_8,@function +fn4_8: # @fn4_8 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, c($pop5) + i32.const $push0=, 31 + i32.and $push1=, $0, $pop0 + i32.or $push4=, $pop3, $pop1 + i32.store c($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end75: + .size fn4_8, .Lfunc_end75-fn4_8 + # -- End function + .section .text.fn5_8,"ax",@progbits + .hidden fn5_8 # -- Begin function fn5_8 + .globl fn5_8 + .type fn5_8,@function +fn5_8: # @fn5_8 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, c($pop7) + i32.const $push0=, 5 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 32 + i32.and $push3=, $pop1, $pop2 + i32.or $push6=, $pop5, $pop3 + i32.store c($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end76: + .size fn5_8, .Lfunc_end76-fn5_8 + # -- End function + .section .text.fn6_8,"ax",@progbits + .hidden fn6_8 # -- Begin function fn6_8 + .globl fn6_8 + .type fn6_8,@function +fn6_8: # @fn6_8 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push11=, 0 + i32.load $push10=, c($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, -64 + i32.and $push4=, $pop9, $pop3 + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.or $push5=, $pop4, $pop1 + i32.const $push6=, 63 + i32.and $push7=, $1, $pop6 + i32.or $push8=, $pop5, $pop7 + i32.store c($pop2), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end77: + .size fn6_8, .Lfunc_end77-fn6_8 + # -- End function + .section .text.fn7_8,"ax",@progbits + .hidden fn7_8 # -- Begin function fn7_8 + .globl fn7_8 + .type fn7_8,@function +fn7_8: # @fn7_8 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, d($pop5) + i32.const $push0=, 65535 + i32.and $push1=, $0, $pop0 + i32.or $push4=, $pop3, $pop1 + i32.store d($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end78: + .size fn7_8, .Lfunc_end78-fn7_8 + # -- End function + .section .text.fn8_8,"ax",@progbits + .hidden fn8_8 # -- Begin function fn8_8 + .globl fn8_8 + .type fn8_8,@function +fn8_8: # @fn8_8 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, d($pop7) + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 16711680 + i32.and $push3=, $pop1, $pop2 + i32.or $push6=, $pop5, $pop3 + i32.store d($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end79: + .size fn8_8, .Lfunc_end79-fn8_8 + # -- End function + .section .text.fn9_8,"ax",@progbits + .hidden fn9_8 # -- Begin function fn9_8 + .globl fn9_8 + .type fn9_8,@function +fn9_8: # @fn9_8 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push7=, 0 + i32.load $push3=, d($pop7) + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.or $push4=, $pop3, $pop1 + i32.const $push6=, 24 + i32.shr_u $push5=, $pop4, $pop6 + i32.store8 d+3($pop2), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end80: + .size fn9_8, .Lfunc_end80-fn9_8 + # -- End function + .section .text.fn1_9,"ax",@progbits + .hidden fn1_9 # -- Begin function fn1_9 + .globl fn1_9 + .type fn1_9,@function +fn1_9: # @fn1_9 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, b($pop5) + i32.const $push0=, 63 + i32.and $push1=, $0, $pop0 + i32.xor $push4=, $pop3, $pop1 + i32.store b($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end81: + .size fn1_9, .Lfunc_end81-fn1_9 + # -- End function + .section .text.fn2_9,"ax",@progbits + .hidden fn2_9 # -- Begin function fn2_9 + .globl fn2_9 + .type fn2_9,@function +fn2_9: # @fn2_9 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, b($pop7) + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 131008 + i32.and $push3=, $pop1, $pop2 + i32.xor $push6=, $pop5, $pop3 + i32.store b($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end82: + .size fn2_9, .Lfunc_end82-fn2_9 + # -- End function + .section .text.fn3_9,"ax",@progbits + .hidden fn3_9 # -- Begin function fn3_9 + .globl fn3_9 + .type fn3_9,@function +fn3_9: # @fn3_9 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push11=, 0 + i32.load $push10=, b($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, -131072 + i32.and $push4=, $pop9, $pop3 + i32.const $push0=, 17 + i32.shl $push1=, $0, $pop0 + i32.xor $push5=, $pop4, $pop1 + i32.const $push6=, 131071 + i32.and $push7=, $1, $pop6 + i32.or $push8=, $pop5, $pop7 + i32.store b($pop2), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end83: + .size fn3_9, .Lfunc_end83-fn3_9 + # -- End function + .section .text.fn4_9,"ax",@progbits + .hidden fn4_9 # -- Begin function fn4_9 + .globl fn4_9 + .type fn4_9,@function +fn4_9: # @fn4_9 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, c($pop5) + i32.const $push0=, 31 + i32.and $push1=, $0, $pop0 + i32.xor $push4=, $pop3, $pop1 + i32.store c($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end84: + .size fn4_9, .Lfunc_end84-fn4_9 + # -- End function + .section .text.fn5_9,"ax",@progbits + .hidden fn5_9 # -- Begin function fn5_9 + .globl fn5_9 + .type fn5_9,@function +fn5_9: # @fn5_9 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, c($pop7) + i32.const $push0=, 5 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 32 + i32.and $push3=, $pop1, $pop2 + i32.xor $push6=, $pop5, $pop3 + i32.store c($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end85: + .size fn5_9, .Lfunc_end85-fn5_9 + # -- End function + .section .text.fn6_9,"ax",@progbits + .hidden fn6_9 # -- Begin function fn6_9 + .globl fn6_9 + .type fn6_9,@function +fn6_9: # @fn6_9 + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push11=, 0 + i32.load $push10=, c($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, -64 + i32.and $push4=, $pop9, $pop3 + i32.const $push0=, 6 + i32.shl $push1=, $0, $pop0 + i32.xor $push5=, $pop4, $pop1 + i32.const $push6=, 63 + i32.and $push7=, $1, $pop6 + i32.or $push8=, $pop5, $pop7 + i32.store c($pop2), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end86: + .size fn6_9, .Lfunc_end86-fn6_9 + # -- End function + .section .text.fn7_9,"ax",@progbits + .hidden fn7_9 # -- Begin function fn7_9 + .globl fn7_9 + .type fn7_9,@function +fn7_9: # @fn7_9 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push5=, 0 + i32.load $push3=, d($pop5) + i32.const $push0=, 65535 + i32.and $push1=, $0, $pop0 + i32.xor $push4=, $pop3, $pop1 + i32.store d($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end87: + .size fn7_9, .Lfunc_end87-fn7_9 + # -- End function + .section .text.fn8_9,"ax",@progbits + .hidden fn8_9 # -- Begin function fn8_9 + .globl fn8_9 + .type fn8_9,@function +fn8_9: # @fn8_9 + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push7=, 0 + i32.load $push5=, d($pop7) + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 16711680 + i32.and $push3=, $pop1, $pop2 + i32.xor $push6=, $pop5, $pop3 + i32.store d($pop4), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end88: + .size fn8_9, .Lfunc_end88-fn8_9 + # -- End function + .section .text.fn9_9,"ax",@progbits + .hidden fn9_9 # -- Begin function fn9_9 + .globl fn9_9 + .type fn9_9,@function +fn9_9: # @fn9_9 + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push7=, 0 + i32.load $push3=, d($pop7) + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.xor $push4=, $pop3, $pop1 + i32.const $push6=, 24 + i32.shr_u $push5=, $pop4, $pop6 + i32.store8 d+3($pop2), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end89: + .size fn9_9, .Lfunc_end89-fn9_9 + # -- End function + .section .text.fn1_a,"ax",@progbits + .hidden fn1_a # -- Begin function fn1_a + .globl fn1_a + .type fn1_a,@function +fn1_a: # @fn1_a + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, b($pop9) + tee_local $push7=, $1=, $pop8 + i32.const $push1=, -64 + i32.and $push2=, $pop7, $pop1 + i32.const $push3=, 63 + i32.and $push4=, $1, $pop3 + i32.div_u $push5=, $pop4, $0 + i32.or $push6=, $pop2, $pop5 + i32.store b($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end90: + .size fn1_a, .Lfunc_end90-fn1_a + # -- End function + .section .text.fn2_a,"ax",@progbits + .hidden fn2_a # -- Begin function fn2_a + .globl fn2_a + .type fn2_a,@function +fn2_a: # @fn2_a + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push13=, 0 + i32.load $push12=, b($pop13) + tee_local $push11=, $1=, $pop12 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop11, $pop3 + i32.const $push5=, 2047 + i32.and $push6=, $pop4, $pop5 + i32.div_u $push7=, $pop6, $0 + i32.const $push10=, 6 + i32.shl $push8=, $pop7, $pop10 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push9=, $pop8, $pop2 + i32.store b($pop0), $pop9 + # fallthrough-return + .endfunc +.Lfunc_end91: + .size fn2_a, .Lfunc_end91-fn2_a + # -- End function + .section .text.fn3_a,"ax",@progbits + .hidden fn3_a # -- Begin function fn3_a + .globl fn3_a + .type fn3_a,@function +fn3_a: # @fn3_a + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, b($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 17 + i32.shr_u $push4=, $pop9, $pop3 + i32.div_u $push5=, $pop4, $0 + i32.const $push8=, 17 + i32.shl $push6=, $pop5, $pop8 + i32.const $push1=, 131071 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end92: + .size fn3_a, .Lfunc_end92-fn3_a + # -- End function + .section .text.fn4_a,"ax",@progbits + .hidden fn4_a # -- Begin function fn4_a + .globl fn4_a + .type fn4_a,@function +fn4_a: # @fn4_a + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, c($pop9) + tee_local $push7=, $1=, $pop8 + i32.const $push1=, -32 + i32.and $push2=, $pop7, $pop1 + i32.const $push3=, 31 + i32.and $push4=, $1, $pop3 + i32.div_u $push5=, $pop4, $0 + i32.or $push6=, $pop2, $pop5 + i32.store c($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end93: + .size fn4_a, .Lfunc_end93-fn4_a + # -- End function + .section .text.fn5_a,"ax",@progbits + .hidden fn5_a # -- Begin function fn5_a + .globl fn5_a + .type fn5_a,@function +fn5_a: # @fn5_a + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push13=, 0 + i32.load $push12=, c($pop13) + tee_local $push11=, $1=, $pop12 + i32.const $push3=, 5 + i32.shr_u $push4=, $pop11, $pop3 + i32.const $push5=, 1 + i32.and $push6=, $pop4, $pop5 + i32.div_u $push7=, $pop6, $0 + i32.const $push10=, 5 + i32.shl $push8=, $pop7, $pop10 + i32.const $push1=, -33 + i32.and $push2=, $1, $pop1 + i32.or $push9=, $pop8, $pop2 + i32.store c($pop0), $pop9 + # fallthrough-return + .endfunc +.Lfunc_end94: + .size fn5_a, .Lfunc_end94-fn5_a + # -- End function + .section .text.fn6_a,"ax",@progbits + .hidden fn6_a # -- Begin function fn6_a + .globl fn6_a + .type fn6_a,@function +fn6_a: # @fn6_a + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, c($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop9, $pop3 + i32.div_u $push5=, $pop4, $0 + i32.const $push8=, 6 + i32.shl $push6=, $pop5, $pop8 + i32.const $push1=, 63 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end95: + .size fn6_a, .Lfunc_end95-fn6_a + # -- End function + .section .text.fn7_a,"ax",@progbits + .hidden fn7_a # -- Begin function fn7_a + .globl fn7_a + .type fn7_a,@function +fn7_a: # @fn7_a + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load16_u $push1=, d($pop3) + i32.div_u $push2=, $pop1, $0 + i32.store16 d($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end96: + .size fn7_a, .Lfunc_end96-fn7_a + # -- End function + .section .text.fn8_a,"ax",@progbits + .hidden fn8_a # -- Begin function fn8_a + .globl fn8_a + .type fn8_a,@function +fn8_a: # @fn8_a + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load8_u $push1=, d+2($pop3) + i32.div_u $push2=, $pop1, $0 + i32.store8 d+2($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end97: + .size fn8_a, .Lfunc_end97-fn8_a + # -- End function + .section .text.fn9_a,"ax",@progbits + .hidden fn9_a # -- Begin function fn9_a + .globl fn9_a + .type fn9_a,@function +fn9_a: # @fn9_a + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load8_u $push1=, d+3($pop3) + i32.div_u $push2=, $pop1, $0 + i32.store8 d+3($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end98: + .size fn9_a, .Lfunc_end98-fn9_a + # -- End function + .section .text.fn1_b,"ax",@progbits + .hidden fn1_b # -- Begin function fn1_b + .globl fn1_b + .type fn1_b,@function +fn1_b: # @fn1_b + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, b($pop9) + tee_local $push7=, $1=, $pop8 + i32.const $push3=, 63 + i32.and $push4=, $pop7, $pop3 + i32.rem_u $push5=, $pop4, $0 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store b($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end99: + .size fn1_b, .Lfunc_end99-fn1_b + # -- End function + .section .text.fn2_b,"ax",@progbits + .hidden fn2_b # -- Begin function fn2_b + .globl fn2_b + .type fn2_b,@function +fn2_b: # @fn2_b + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push13=, 0 + i32.load $push12=, b($pop13) + tee_local $push11=, $1=, $pop12 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop11, $pop3 + i32.const $push5=, 2047 + i32.and $push6=, $pop4, $pop5 + i32.rem_u $push7=, $pop6, $0 + i32.const $push10=, 6 + i32.shl $push8=, $pop7, $pop10 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push9=, $pop8, $pop2 + i32.store b($pop0), $pop9 + # fallthrough-return + .endfunc +.Lfunc_end100: + .size fn2_b, .Lfunc_end100-fn2_b + # -- End function + .section .text.fn3_b,"ax",@progbits + .hidden fn3_b # -- Begin function fn3_b + .globl fn3_b + .type fn3_b,@function +fn3_b: # @fn3_b + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, b($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 17 + i32.shr_u $push4=, $pop9, $pop3 + i32.rem_u $push5=, $pop4, $0 + i32.const $push8=, 17 + i32.shl $push6=, $pop5, $pop8 + i32.const $push1=, 131071 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end101: + .size fn3_b, .Lfunc_end101-fn3_b + # -- End function + .section .text.fn4_b,"ax",@progbits + .hidden fn4_b # -- Begin function fn4_b + .globl fn4_b + .type fn4_b,@function +fn4_b: # @fn4_b + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push8=, c($pop9) + tee_local $push7=, $1=, $pop8 + i32.const $push3=, 31 + i32.and $push4=, $pop7, $pop3 + i32.rem_u $push5=, $pop4, $0 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store c($pop0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end102: + .size fn4_b, .Lfunc_end102-fn4_b + # -- End function + .section .text.fn5_b,"ax",@progbits + .hidden fn5_b # -- Begin function fn5_b + .globl fn5_b + .type fn5_b,@function +fn5_b: # @fn5_b + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push13=, 0 + i32.load $push12=, c($pop13) + tee_local $push11=, $1=, $pop12 + i32.const $push3=, 5 + i32.shr_u $push4=, $pop11, $pop3 + i32.const $push5=, 1 + i32.and $push6=, $pop4, $pop5 + i32.rem_u $push7=, $pop6, $0 + i32.const $push10=, 5 + i32.shl $push8=, $pop7, $pop10 + i32.const $push1=, -33 + i32.and $push2=, $1, $pop1 + i32.or $push9=, $pop8, $pop2 + i32.store c($pop0), $pop9 + # fallthrough-return + .endfunc +.Lfunc_end103: + .size fn5_b, .Lfunc_end103-fn5_b + # -- End function + .section .text.fn6_b,"ax",@progbits + .hidden fn6_b # -- Begin function fn6_b + .globl fn6_b + .type fn6_b,@function +fn6_b: # @fn6_b + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, c($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop9, $pop3 + i32.rem_u $push5=, $pop4, $0 + i32.const $push8=, 6 + i32.shl $push6=, $pop5, $pop8 + i32.const $push1=, 63 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end104: + .size fn6_b, .Lfunc_end104-fn6_b + # -- End function + .section .text.fn7_b,"ax",@progbits + .hidden fn7_b # -- Begin function fn7_b + .globl fn7_b + .type fn7_b,@function +fn7_b: # @fn7_b + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load16_u $push1=, d($pop3) + i32.rem_u $push2=, $pop1, $0 + i32.store16 d($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end105: + .size fn7_b, .Lfunc_end105-fn7_b + # -- End function + .section .text.fn8_b,"ax",@progbits + .hidden fn8_b # -- Begin function fn8_b + .globl fn8_b + .type fn8_b,@function +fn8_b: # @fn8_b + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load8_u $push1=, d+2($pop3) + i32.rem_u $push2=, $pop1, $0 + i32.store8 d+2($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end106: + .size fn8_b, .Lfunc_end106-fn8_b + # -- End function + .section .text.fn9_b,"ax",@progbits + .hidden fn9_b # -- Begin function fn9_b + .globl fn9_b + .type fn9_b,@function +fn9_b: # @fn9_b + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load8_u $push1=, d+3($pop3) + i32.rem_u $push2=, $pop1, $0 + i32.store8 d+3($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end107: + .size fn9_b, .Lfunc_end107-fn9_b + # -- End function + .section .text.fn1_c,"ax",@progbits + .hidden fn1_c # -- Begin function fn1_c + .globl fn1_c + .type fn1_c,@function +fn1_c: # @fn1_c + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 3 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 63 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end108: + .size fn1_c, .Lfunc_end108-fn1_c + # -- End function + .section .text.fn2_c,"ax",@progbits + .hidden fn2_c # -- Begin function fn2_c + .globl fn2_c + .type fn2_c,@function +fn2_c: # @fn2_c + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 192 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 131008 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end109: + .size fn2_c, .Lfunc_end109-fn2_c + # -- End function + .section .text.fn3_c,"ax",@progbits + .hidden fn3_c # -- Begin function fn3_c + .globl fn3_c + .type fn3_c,@function +fn3_c: # @fn3_c + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 393216 + i32.add $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end110: + .size fn3_c, .Lfunc_end110-fn3_c + # -- End function + .section .text.fn4_c,"ax",@progbits + .hidden fn4_c # -- Begin function fn4_c + .globl fn4_c + .type fn4_c,@function +fn4_c: # @fn4_c + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 3 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 31 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end111: + .size fn4_c, .Lfunc_end111-fn4_c + # -- End function + .section .text.fn5_c,"ax",@progbits + .hidden fn5_c # -- Begin function fn5_c + .globl fn5_c + .type fn5_c,@function +fn5_c: # @fn5_c + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end112: + .size fn5_c, .Lfunc_end112-fn5_c + # -- End function + .section .text.fn6_c,"ax",@progbits + .hidden fn6_c # -- Begin function fn6_c + .globl fn6_c + .type fn6_c,@function +fn6_c: # @fn6_c + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 192 + i32.add $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end113: + .size fn6_c, .Lfunc_end113-fn6_c + # -- End function + .section .text.fn7_c,"ax",@progbits + .hidden fn7_c # -- Begin function fn7_c + .globl fn7_c + .type fn7_c,@function +fn7_c: # @fn7_c + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 3 + i32.add $push3=, $pop1, $pop2 + i32.store16 d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end114: + .size fn7_c, .Lfunc_end114-fn7_c + # -- End function + .section .text.fn8_c,"ax",@progbits + .hidden fn8_c # -- Begin function fn8_c + .globl fn8_c + .type fn8_c,@function +fn8_c: # @fn8_c + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, d($pop6) + i32.const $push2=, 196608 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 16 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 d+2($pop0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end115: + .size fn8_c, .Lfunc_end115-fn8_c + # -- End function + .section .text.fn9_c,"ax",@progbits + .hidden fn9_c # -- Begin function fn9_c + .globl fn9_c + .type fn9_c,@function +fn9_c: # @fn9_c + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 50331648 + i32.add $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end116: + .size fn9_c, .Lfunc_end116-fn9_c + # -- End function + .section .text.fn1_d,"ax",@progbits + .hidden fn1_d # -- Begin function fn1_d + .globl fn1_d + .type fn1_d,@function +fn1_d: # @fn1_d + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 57 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 63 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end117: + .size fn1_d, .Lfunc_end117-fn1_d + # -- End function + .section .text.fn2_d,"ax",@progbits + .hidden fn2_d # -- Begin function fn2_d + .globl fn2_d + .type fn2_d,@function +fn2_d: # @fn2_d + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 130624 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 131008 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end118: + .size fn2_d, .Lfunc_end118-fn2_d + # -- End function + .section .text.fn3_d,"ax",@progbits + .hidden fn3_d # -- Begin function fn3_d + .globl fn3_d + .type fn3_d,@function +fn3_d: # @fn3_d + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, -917504 + i32.add $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end119: + .size fn3_d, .Lfunc_end119-fn3_d + # -- End function + .section .text.fn4_d,"ax",@progbits + .hidden fn4_d # -- Begin function fn4_d + .globl fn4_d + .type fn4_d,@function +fn4_d: # @fn4_d + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 25 + i32.add $push4=, $pop8, $pop3 + i32.const $push5=, 31 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end120: + .size fn4_d, .Lfunc_end120-fn4_d + # -- End function + .section .text.fn5_d,"ax",@progbits + .hidden fn5_d # -- Begin function fn5_d + .globl fn5_d + .type fn5_d,@function +fn5_d: # @fn5_d + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end121: + .size fn5_d, .Lfunc_end121-fn5_d + # -- End function + .section .text.fn6_d,"ax",@progbits + .hidden fn6_d # -- Begin function fn6_d + .globl fn6_d + .type fn6_d,@function +fn6_d: # @fn6_d + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, -448 + i32.add $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end122: + .size fn6_d, .Lfunc_end122-fn6_d + # -- End function + .section .text.fn7_d,"ax",@progbits + .hidden fn7_d # -- Begin function fn7_d + .globl fn7_d + .type fn7_d,@function +fn7_d: # @fn7_d + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 65529 + i32.add $push3=, $pop1, $pop2 + i32.store16 d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end123: + .size fn7_d, .Lfunc_end123-fn7_d + # -- End function + .section .text.fn8_d,"ax",@progbits + .hidden fn8_d # -- Begin function fn8_d + .globl fn8_d + .type fn8_d,@function +fn8_d: # @fn8_d + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, d($pop6) + i32.const $push2=, 16318464 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 16 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 d+2($pop0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end124: + .size fn8_d, .Lfunc_end124-fn8_d + # -- End function + .section .text.fn9_d,"ax",@progbits + .hidden fn9_d # -- Begin function fn9_d + .globl fn9_d + .type fn9_d,@function +fn9_d: # @fn9_d + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, -117440512 + i32.add $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end125: + .size fn9_d, .Lfunc_end125-fn9_d + # -- End function + .section .text.fn1_e,"ax",@progbits + .hidden fn1_e # -- Begin function fn1_e + .globl fn1_e + .type fn1_e,@function +fn1_e: # @fn1_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, -43 + i32.and $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end126: + .size fn1_e, .Lfunc_end126-fn1_e + # -- End function + .section .text.fn2_e,"ax",@progbits + .hidden fn2_e # -- Begin function fn2_e + .globl fn2_e + .type fn2_e,@function +fn2_e: # @fn2_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, -129665 + i32.and $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end127: + .size fn2_e, .Lfunc_end127-fn2_e + # -- End function + .section .text.fn3_e,"ax",@progbits + .hidden fn3_e # -- Begin function fn3_e + .globl fn3_e + .type fn3_e,@function +fn3_e: # @fn3_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 2883583 + i32.and $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end128: + .size fn3_e, .Lfunc_end128-fn3_e + # -- End function + .section .text.fn4_e,"ax",@progbits + .hidden fn4_e # -- Begin function fn4_e + .globl fn4_e + .type fn4_e,@function +fn4_e: # @fn4_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, -11 + i32.and $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end129: + .size fn4_e, .Lfunc_end129-fn4_e + # -- End function + .section .text.fn5_e,"ax",@progbits + .hidden fn5_e # -- Begin function fn5_e + .globl fn5_e + .type fn5_e,@function +fn5_e: # @fn5_e + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end130: + .size fn5_e, .Lfunc_end130-fn5_e + # -- End function + .section .text.fn6_e,"ax",@progbits + .hidden fn6_e # -- Begin function fn6_e + .globl fn6_e + .type fn6_e,@function +fn6_e: # @fn6_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 1407 + i32.and $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end131: + .size fn6_e, .Lfunc_end131-fn6_e + # -- End function + .section .text.fn7_e,"ax",@progbits + .hidden fn7_e # -- Begin function fn7_e + .globl fn7_e + .type fn7_e,@function +fn7_e: # @fn7_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, -65515 + i32.and $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end132: + .size fn7_e, .Lfunc_end132-fn7_e + # -- End function + .section .text.fn8_e,"ax",@progbits + .hidden fn8_e # -- Begin function fn8_e + .globl fn8_e + .type fn8_e,@function +fn8_e: # @fn8_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, -15335425 + i32.and $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end133: + .size fn8_e, .Lfunc_end133-fn8_e + # -- End function + .section .text.fn9_e,"ax",@progbits + .hidden fn9_e # -- Begin function fn9_e + .globl fn9_e + .type fn9_e,@function +fn9_e: # @fn9_e + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 369098751 + i32.and $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end134: + .size fn9_e, .Lfunc_end134-fn9_e + # -- End function + .section .text.fn1_f,"ax",@progbits + .hidden fn1_f # -- Begin function fn1_f + .globl fn1_f + .type fn1_f,@function +fn1_f: # @fn1_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 19 + i32.or $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end135: + .size fn1_f, .Lfunc_end135-fn1_f + # -- End function + .section .text.fn2_f,"ax",@progbits + .hidden fn2_f # -- Begin function fn2_f + .globl fn2_f + .type fn2_f,@function +fn2_f: # @fn2_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 1216 + i32.or $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end136: + .size fn2_f, .Lfunc_end136-fn2_f + # -- End function + .section .text.fn3_f,"ax",@progbits + .hidden fn3_f # -- Begin function fn3_f + .globl fn3_f + .type fn3_f,@function +fn3_f: # @fn3_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 2490368 + i32.or $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end137: + .size fn3_f, .Lfunc_end137-fn3_f + # -- End function + .section .text.fn4_f,"ax",@progbits + .hidden fn4_f # -- Begin function fn4_f + .globl fn4_f + .type fn4_f,@function +fn4_f: # @fn4_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 19 + i32.or $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end138: + .size fn4_f, .Lfunc_end138-fn4_f + # -- End function + .section .text.fn5_f,"ax",@progbits + .hidden fn5_f # -- Begin function fn5_f + .globl fn5_f + .type fn5_f,@function +fn5_f: # @fn5_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 32 + i32.or $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end139: + .size fn5_f, .Lfunc_end139-fn5_f + # -- End function + .section .text.fn6_f,"ax",@progbits + .hidden fn6_f # -- Begin function fn6_f + .globl fn6_f + .type fn6_f,@function +fn6_f: # @fn6_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 1216 + i32.or $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end140: + .size fn6_f, .Lfunc_end140-fn6_f + # -- End function + .section .text.fn7_f,"ax",@progbits + .hidden fn7_f # -- Begin function fn7_f + .globl fn7_f + .type fn7_f,@function +fn7_f: # @fn7_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 19 + i32.or $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end141: + .size fn7_f, .Lfunc_end141-fn7_f + # -- End function + .section .text.fn8_f,"ax",@progbits + .hidden fn8_f # -- Begin function fn8_f + .globl fn8_f + .type fn8_f,@function +fn8_f: # @fn8_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 1245184 + i32.or $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end142: + .size fn8_f, .Lfunc_end142-fn8_f + # -- End function + .section .text.fn9_f,"ax",@progbits + .hidden fn9_f # -- Begin function fn9_f + .globl fn9_f + .type fn9_f,@function +fn9_f: # @fn9_f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 318767104 + i32.or $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end143: + .size fn9_f, .Lfunc_end143-fn9_f + # -- End function + .section .text.fn1_g,"ax",@progbits + .hidden fn1_g # -- Begin function fn1_g + .globl fn1_g + .type fn1_g,@function +fn1_g: # @fn1_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 37 + i32.xor $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end144: + .size fn1_g, .Lfunc_end144-fn1_g + # -- End function + .section .text.fn2_g,"ax",@progbits + .hidden fn2_g # -- Begin function fn2_g + .globl fn2_g + .type fn2_g,@function +fn2_g: # @fn2_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 2368 + i32.xor $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end145: + .size fn2_g, .Lfunc_end145-fn2_g + # -- End function + .section .text.fn3_g,"ax",@progbits + .hidden fn3_g # -- Begin function fn3_g + .globl fn3_g + .type fn3_g,@function +fn3_g: # @fn3_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, b($pop4) + i32.const $push2=, 4849664 + i32.xor $push3=, $pop1, $pop2 + i32.store b($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end146: + .size fn3_g, .Lfunc_end146-fn3_g + # -- End function + .section .text.fn4_g,"ax",@progbits + .hidden fn4_g # -- Begin function fn4_g + .globl fn4_g + .type fn4_g,@function +fn4_g: # @fn4_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 5 + i32.xor $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end147: + .size fn4_g, .Lfunc_end147-fn4_g + # -- End function + .section .text.fn5_g,"ax",@progbits + .hidden fn5_g # -- Begin function fn5_g + .globl fn5_g + .type fn5_g,@function +fn5_g: # @fn5_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 32 + i32.xor $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end148: + .size fn5_g, .Lfunc_end148-fn5_g + # -- End function + .section .text.fn6_g,"ax",@progbits + .hidden fn6_g # -- Begin function fn6_g + .globl fn6_g + .type fn6_g,@function +fn6_g: # @fn6_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, 2368 + i32.xor $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end149: + .size fn6_g, .Lfunc_end149-fn6_g + # -- End function + .section .text.fn7_g,"ax",@progbits + .hidden fn7_g # -- Begin function fn7_g + .globl fn7_g + .type fn7_g,@function +fn7_g: # @fn7_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 37 + i32.xor $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end150: + .size fn7_g, .Lfunc_end150-fn7_g + # -- End function + .section .text.fn8_g,"ax",@progbits + .hidden fn8_g # -- Begin function fn8_g + .globl fn8_g + .type fn8_g,@function +fn8_g: # @fn8_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 2424832 + i32.xor $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end151: + .size fn8_g, .Lfunc_end151-fn8_g + # -- End function + .section .text.fn9_g,"ax",@progbits + .hidden fn9_g # -- Begin function fn9_g + .globl fn9_g + .type fn9_g,@function +fn9_g: # @fn9_g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 620756992 + i32.xor $push3=, $pop1, $pop2 + i32.store d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end152: + .size fn9_g, .Lfunc_end152-fn9_g + # -- End function + .section .text.fn1_h,"ax",@progbits + .hidden fn1_h # -- Begin function fn1_h + .globl fn1_h + .type fn1_h,@function +fn1_h: # @fn1_h + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 63 + i32.and $push4=, $pop8, $pop3 + i32.const $push5=, 17 + i32.div_u $push6=, $pop4, $pop5 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end153: + .size fn1_h, .Lfunc_end153-fn1_h + # -- End function + .section .text.fn2_h,"ax",@progbits + .hidden fn2_h # -- Begin function fn2_h + .globl fn2_h + .type fn2_h,@function +fn2_h: # @fn2_h + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push14=, 0 + i32.load $push13=, b($pop14) + tee_local $push12=, $1=, $pop13 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop12, $pop3 + i32.const $push5=, 2047 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 17 + i32.div_u $push8=, $pop6, $pop7 + i32.const $push11=, 6 + i32.shl $push9=, $pop8, $pop11 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push10=, $pop9, $pop2 + i32.store b($pop0), $pop10 + # fallthrough-return + .endfunc +.Lfunc_end154: + .size fn2_h, .Lfunc_end154-fn2_h + # -- End function + .section .text.fn3_h,"ax",@progbits + .hidden fn3_h # -- Begin function fn3_h + .globl fn3_h + .type fn3_h,@function +fn3_h: # @fn3_h + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 2228224 + i32.div_u $push4=, $pop8, $pop3 + i32.const $push5=, 17 + i32.shl $push6=, $pop4, $pop5 + i32.const $push1=, 131071 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end155: + .size fn3_h, .Lfunc_end155-fn3_h + # -- End function + .section .text.fn4_h,"ax",@progbits + .hidden fn4_h # -- Begin function fn4_h + .globl fn4_h + .type fn4_h,@function +fn4_h: # @fn4_h + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 31 + i32.and $push4=, $pop8, $pop3 + i32.const $push5=, 17 + i32.div_u $push6=, $pop4, $pop5 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end156: + .size fn4_h, .Lfunc_end156-fn4_h + # -- End function + .section .text.fn5_h,"ax",@progbits + .hidden fn5_h # -- Begin function fn5_h + .globl fn5_h + .type fn5_h,@function +fn5_h: # @fn5_h + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push2=, -33 + i32.and $push3=, $pop1, $pop2 + i32.store c($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end157: + .size fn5_h, .Lfunc_end157-fn5_h + # -- End function + .section .text.fn6_h,"ax",@progbits + .hidden fn6_h # -- Begin function fn6_h + .globl fn6_h + .type fn6_h,@function +fn6_h: # @fn6_h + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 1088 + i32.div_u $push4=, $pop8, $pop3 + i32.const $push5=, 6 + i32.shl $push6=, $pop4, $pop5 + i32.const $push1=, 63 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end158: + .size fn6_h, .Lfunc_end158-fn6_h + # -- End function + .section .text.fn7_h,"ax",@progbits + .hidden fn7_h # -- Begin function fn7_h + .globl fn7_h + .type fn7_h,@function +fn7_h: # @fn7_h + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load16_u $push1=, d($pop4) + i32.const $push2=, 17 + i32.div_u $push3=, $pop1, $pop2 + i32.store16 d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end159: + .size fn7_h, .Lfunc_end159-fn7_h + # -- End function + .section .text.fn8_h,"ax",@progbits + .hidden fn8_h # -- Begin function fn8_h + .globl fn8_h + .type fn8_h,@function +fn8_h: # @fn8_h + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load8_u $push1=, d+2($pop4) + i32.const $push2=, 17 + i32.div_u $push3=, $pop1, $pop2 + i32.store8 d+2($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end160: + .size fn8_h, .Lfunc_end160-fn8_h + # -- End function + .section .text.fn9_h,"ax",@progbits + .hidden fn9_h # -- Begin function fn9_h + .globl fn9_h + .type fn9_h,@function +fn9_h: # @fn9_h + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, d($pop4) + i32.const $push2=, 285212672 + i32.div_u $push3=, $pop1, $pop2 + i32.store8 d+3($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end161: + .size fn9_h, .Lfunc_end161-fn9_h + # -- End function + .section .text.fn1_i,"ax",@progbits + .hidden fn1_i # -- Begin function fn1_i + .globl fn1_i + .type fn1_i,@function +fn1_i: # @fn1_i + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 63 + i32.and $push4=, $pop8, $pop3 + i32.const $push5=, 19 + i32.rem_u $push6=, $pop4, $pop5 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store b($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end162: + .size fn1_i, .Lfunc_end162-fn1_i + # -- End function + .section .text.fn2_i,"ax",@progbits + .hidden fn2_i # -- Begin function fn2_i + .globl fn2_i + .type fn2_i,@function +fn2_i: # @fn2_i + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push14=, 0 + i32.load $push13=, b($pop14) + tee_local $push12=, $1=, $pop13 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop12, $pop3 + i32.const $push5=, 2047 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 19 + i32.rem_u $push8=, $pop6, $pop7 + i32.const $push11=, 6 + i32.shl $push9=, $pop8, $pop11 + i32.const $push1=, -131009 + i32.and $push2=, $1, $pop1 + i32.or $push10=, $pop9, $pop2 + i32.store b($pop0), $pop10 + # fallthrough-return + .endfunc +.Lfunc_end163: + .size fn2_i, .Lfunc_end163-fn2_i + # -- End function + .section .text.fn3_i,"ax",@progbits + .hidden fn3_i # -- Begin function fn3_i + .globl fn3_i + .type fn3_i,@function +fn3_i: # @fn3_i + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push12=, 0 + i32.load $push11=, b($pop12) + tee_local $push10=, $1=, $pop11 + i32.const $push3=, 17 + i32.shr_u $push4=, $pop10, $pop3 + i32.const $push5=, 19 + i32.rem_u $push6=, $pop4, $pop5 + i32.const $push9=, 17 + i32.shl $push7=, $pop6, $pop9 + i32.const $push1=, 131071 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store b($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end164: + .size fn3_i, .Lfunc_end164-fn3_i + # -- End function + .section .text.fn4_i,"ax",@progbits + .hidden fn4_i # -- Begin function fn4_i + .globl fn4_i + .type fn4_i,@function +fn4_i: # @fn4_i + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, c($pop10) + tee_local $push8=, $1=, $pop9 + i32.const $push3=, 31 + i32.and $push4=, $pop8, $pop3 + i32.const $push5=, 19 + i32.rem_u $push6=, $pop4, $pop5 + i32.const $push1=, -32 + i32.and $push2=, $1, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store c($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end165: + .size fn4_i, .Lfunc_end165-fn4_i + # -- End function + .section .text.fn5_i,"ax",@progbits + .hidden fn5_i # -- Begin function fn5_i + .globl fn5_i + .type fn5_i,@function +fn5_i: # @fn5_i + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end166: + .size fn5_i, .Lfunc_end166-fn5_i + # -- End function + .section .text.fn6_i,"ax",@progbits + .hidden fn6_i # -- Begin function fn6_i + .globl fn6_i + .type fn6_i,@function +fn6_i: # @fn6_i + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push12=, 0 + i32.load $push11=, c($pop12) + tee_local $push10=, $1=, $pop11 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop10, $pop3 + i32.const $push5=, 19 + i32.rem_u $push6=, $pop4, $pop5 + i32.const $push9=, 6 + i32.shl $push7=, $pop6, $pop9 + i32.const $push1=, 63 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store c($pop0), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end167: + .size fn6_i, .Lfunc_end167-fn6_i + # -- End function + .section .text.fn7_i,"ax",@progbits + .hidden fn7_i # -- Begin function fn7_i + .globl fn7_i + .type fn7_i,@function +fn7_i: # @fn7_i + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load16_u $push1=, d($pop4) + i32.const $push2=, 19 + i32.rem_u $push3=, $pop1, $pop2 + i32.store16 d($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end168: + .size fn7_i, .Lfunc_end168-fn7_i + # -- End function + .section .text.fn8_i,"ax",@progbits + .hidden fn8_i # -- Begin function fn8_i + .globl fn8_i + .type fn8_i,@function +fn8_i: # @fn8_i + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load8_u $push1=, d+2($pop4) + i32.const $push2=, 19 + i32.rem_u $push3=, $pop1, $pop2 + i32.store8 d+2($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end169: + .size fn8_i, .Lfunc_end169-fn8_i + # -- End function + .section .text.fn9_i,"ax",@progbits + .hidden fn9_i # -- Begin function fn9_i + .globl fn9_i + .type fn9_i,@function +fn9_i: # @fn9_i + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load8_u $push1=, d+3($pop4) + i32.const $push2=, 19 + i32.rem_u $push3=, $pop1, $pop2 + i32.store8 d+3($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end170: + .size fn9_i, .Lfunc_end170-fn9_i + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end1610 + i32.const $push1=, 0 + i32.const $push0=, -2147483595 + i32.store c($pop1), $pop0 + i32.const $push6=, 0 + i32.const $push2=, 560051 + i32.store b($pop6), $pop2 + i32.const $push5=, 0 + i32.const $push3=, -1147377476 + i32.store d($pop5), $pop3 + i32.const $push4=, 0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end171: + .size main, .Lfunc_end171-main + # -- End function + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 3 +b: + .skip 16 + .size b, 16 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 3 +c: + .skip 16 + .size c, 16 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 3 +d: + .skip 16 + .size d, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20040706-1.c.s b/src/binaryen/test/torture-s/20040706-1.c.s new file mode 100644 index 0000000000..dcdb345b36 --- /dev/null +++ b/src/binaryen/test/torture-s/20040706-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20040706-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20040707-1.c.s b/src/binaryen/test/torture-s/20040707-1.c.s new file mode 100644 index 0000000000..e9e2c3718b --- /dev/null +++ b/src/binaryen/test/torture-s/20040707-1.c.s @@ -0,0 +1,31 @@ + .text + .file "20040707-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20040709-1.c.s b/src/binaryen/test/torture-s/20040709-1.c.s new file mode 100644 index 0000000000..d448de3d00 --- /dev/null +++ b/src/binaryen/test/torture-s/20040709-1.c.s @@ -0,0 +1,7509 @@ + .text + .file "20040709-1.c" + .section .text.myrnd,"ax",@progbits + .hidden myrnd # -- Begin function myrnd + .globl myrnd + .type myrnd,@function +myrnd: # @myrnd + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push1=, myrnd.s($pop11) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push10=, $pop3, $pop4 + tee_local $push9=, $0=, $pop10 + i32.store myrnd.s($pop0), $pop9 + i32.const $push5=, 16 + i32.shr_u $push6=, $0, $pop5 + i32.const $push7=, 2047 + i32.and $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end0: + .size myrnd, .Lfunc_end0-myrnd + # -- End function + .section .text.retmeA,"ax",@progbits + .hidden retmeA # -- Begin function retmeA + .globl retmeA + .type retmeA,@function +retmeA: # @retmeA + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size retmeA, .Lfunc_end1-retmeA + # -- End function + .section .text.fn1A,"ax",@progbits + .hidden fn1A # -- Begin function fn1A + .globl fn1A + .type fn1A,@function +fn1A: # @fn1A + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.load $push3=, sA($pop2) + i32.const $push0=, 17 + i32.shl $push1=, $0, $pop0 + i32.add $push4=, $pop3, $pop1 + i32.const $push6=, 17 + i32.shr_u $push5=, $pop4, $pop6 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end2: + .size fn1A, .Lfunc_end2-fn1A + # -- End function + .section .text.fn2A,"ax",@progbits + .hidden fn2A # -- Begin function fn2A + .globl fn2A + .type fn2A,@function +fn2A: # @fn2A + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sA($pop0) + i32.const $push2=, 17 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 32767 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 15 + i32.rem_u $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end3: + .size fn2A, .Lfunc_end3-fn2A + # -- End function + .section .text.retitA,"ax",@progbits + .hidden retitA # -- Begin function retitA + .globl retitA + .type retitA,@function +retitA: # @retitA + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sA($pop0) + i32.const $push2=, 17 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end4: + .size retitA, .Lfunc_end4-retitA + # -- End function + .section .text.fn3A,"ax",@progbits + .hidden fn3A # -- Begin function fn3A + .globl fn3A + .type fn3A,@function +fn3A: # @fn3A + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push8=, 0 + i32.load $push3=, sA($pop8) + i32.const $push0=, 17 + i32.shl $push1=, $0, $pop0 + i32.add $push7=, $pop3, $pop1 + tee_local $push6=, $0=, $pop7 + i32.store sA($pop2), $pop6 + i32.const $push5=, 17 + i32.shr_u $push4=, $0, $pop5 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end5: + .size fn3A, .Lfunc_end5-fn3A + # -- End function + .section .text.testA,"ax",@progbits + .hidden testA # -- Begin function testA + .globl testA + .type testA,@function +testA: # @testA + .local i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push87=, 0 + i32.const $push86=, 0 + i32.load $push0=, myrnd.s($pop86) + i32.const $push85=, 1103515245 + i32.mul $push1=, $pop0, $pop85 + i32.const $push84=, 12345 + i32.add $push83=, $pop1, $pop84 + tee_local $push82=, $1=, $pop83 + i32.const $push81=, 16 + i32.shr_u $push2=, $pop82, $pop81 + i32.store8 sA($pop87), $pop2 + i32.const $push80=, 0 + i32.const $push79=, 1103515245 + i32.mul $push3=, $1, $pop79 + i32.const $push78=, 12345 + i32.add $push77=, $pop3, $pop78 + tee_local $push76=, $1=, $pop77 + i32.const $push75=, 16 + i32.shr_u $push4=, $pop76, $pop75 + i32.store8 sA+1($pop80), $pop4 + i32.const $push74=, 0 + i32.const $push73=, 1103515245 + i32.mul $push5=, $1, $pop73 + i32.const $push72=, 12345 + i32.add $push71=, $pop5, $pop72 + tee_local $push70=, $1=, $pop71 + i32.const $push69=, 16 + i32.shr_u $push6=, $pop70, $pop69 + i32.store8 sA+2($pop74), $pop6 + i32.const $push68=, 0 + i32.const $push67=, 1103515245 + i32.mul $push7=, $1, $pop67 + i32.const $push66=, 12345 + i32.add $push65=, $pop7, $pop66 + tee_local $push64=, $1=, $pop65 + i32.const $push63=, 16 + i32.shr_u $push8=, $pop64, $pop63 + i32.store8 sA+3($pop68), $pop8 + i32.const $push62=, 0 + i32.const $push61=, 1103515245 + i32.mul $push9=, $1, $pop61 + i32.const $push60=, 12345 + i32.add $push59=, $pop9, $pop60 + tee_local $push58=, $3=, $pop59 + i32.const $push57=, 1103515245 + i32.mul $push10=, $pop58, $pop57 + i32.const $push56=, 12345 + i32.add $push55=, $pop10, $pop56 + tee_local $push54=, $1=, $pop55 + i32.store myrnd.s($pop62), $pop54 + i32.const $push53=, 0 + i32.const $push52=, 16 + i32.shr_u $push11=, $3, $pop52 + i32.const $push51=, 2047 + i32.and $push50=, $pop11, $pop51 + tee_local $push49=, $3=, $pop50 + i32.const $push48=, 17 + i32.shl $push12=, $pop49, $pop48 + i32.const $push47=, 0 + i32.load $push46=, sA($pop47) + tee_local $push45=, $0=, $pop46 + i32.const $push44=, 131071 + i32.and $push43=, $pop45, $pop44 + tee_local $push42=, $2=, $pop43 + i32.or $push41=, $pop12, $pop42 + tee_local $push40=, $4=, $pop41 + i32.store sA($pop53), $pop40 + block + i32.const $push39=, 16 + i32.shr_u $push13=, $1, $pop39 + i32.const $push38=, 2047 + i32.and $push37=, $pop13, $pop38 + tee_local $push36=, $5=, $pop37 + i32.add $push14=, $pop36, $3 + i32.const $push35=, 17 + i32.shl $push15=, $5, $pop35 + i32.add $push16=, $pop15, $4 + i32.const $push34=, 17 + i32.shr_u $push17=, $pop16, $pop34 + i32.ne $push18=, $pop14, $pop17 + br_if 0, $pop18 # 0: down to label0 +# BB#1: # %if.end87 + i32.const $push108=, 0 + i32.const $push19=, -2139243339 + i32.mul $push20=, $1, $pop19 + i32.const $push21=, -1492899873 + i32.add $push107=, $pop20, $pop21 + tee_local $push106=, $1=, $pop107 + i32.const $push105=, 1103515245 + i32.mul $push22=, $pop106, $pop105 + i32.const $push104=, 12345 + i32.add $push103=, $pop22, $pop104 + tee_local $push102=, $3=, $pop103 + i32.store myrnd.s($pop108), $pop102 + i32.const $push101=, 0 + i32.const $push100=, 16 + i32.shr_u $push26=, $3, $pop100 + i32.const $push99=, 2047 + i32.and $push98=, $pop26, $pop99 + tee_local $push97=, $3=, $pop98 + i32.const $push96=, 17 + i32.shl $push27=, $pop97, $pop96 + i32.const $push95=, 16 + i32.shr_u $push23=, $1, $pop95 + i32.const $push94=, 2047 + i32.and $push93=, $pop23, $pop94 + tee_local $push92=, $4=, $pop93 + i32.const $push91=, 17 + i32.shl $push24=, $pop92, $pop91 + i32.or $push25=, $pop24, $2 + i32.add $push90=, $pop27, $pop25 + tee_local $push89=, $1=, $pop90 + i32.store sA($pop101), $pop89 + i32.xor $push28=, $1, $0 + i32.const $push88=, 131071 + i32.and $push29=, $pop28, $pop88 + br_if 0, $pop29 # 0: down to label0 +# BB#2: # %lor.lhs.false125 + i32.add $push32=, $3, $4 + i32.const $push30=, 17 + i32.shr_u $push31=, $1, $pop30 + i32.ne $push33=, $pop32, $pop31 + br_if 0, $pop33 # 0: down to label0 +# BB#3: # %if.end131 + return +.LBB6_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end6: + .size testA, .Lfunc_end6-testA + # -- End function + .section .text.retmeB,"ax",@progbits + .hidden retmeB # -- Begin function retmeB + .globl retmeB + .type retmeB,@function +retmeB: # @retmeB + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=2 + i64.store 0($0):p2align=2, $pop0 + # fallthrough-return + .endfunc +.Lfunc_end7: + .size retmeB, .Lfunc_end7-retmeB + # -- End function + .section .text.fn1B,"ax",@progbits + .hidden fn1B # -- Begin function fn1B + .globl fn1B + .type fn1B,@function +fn1B: # @fn1B + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 17 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 0 + i32.load $push3=, sB($pop2) + i32.add $push4=, $pop1, $pop3 + i32.const $push6=, 17 + i32.shr_u $push5=, $pop4, $pop6 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end8: + .size fn1B, .Lfunc_end8-fn1B + # -- End function + .section .text.fn2B,"ax",@progbits + .hidden fn2B # -- Begin function fn2B + .globl fn2B + .type fn2B,@function +fn2B: # @fn2B + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sB($pop0) + i32.const $push2=, 17 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 32767 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 15 + i32.rem_u $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end9: + .size fn2B, .Lfunc_end9-fn2B + # -- End function + .section .text.retitB,"ax",@progbits + .hidden retitB # -- Begin function retitB + .globl retitB + .type retitB,@function +retitB: # @retitB + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sB($pop0) + i32.const $push2=, 17 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end10: + .size retitB, .Lfunc_end10-retitB + # -- End function + .section .text.fn3B,"ax",@progbits + .hidden fn3B # -- Begin function fn3B + .globl fn3B + .type fn3B,@function +fn3B: # @fn3B + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push8=, 0 + i32.load $push3=, sB($pop8) + i32.const $push0=, 17 + i32.shl $push1=, $0, $pop0 + i32.add $push7=, $pop3, $pop1 + tee_local $push6=, $0=, $pop7 + i32.store sB($pop2), $pop6 + i32.const $push5=, 17 + i32.shr_u $push4=, $0, $pop5 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end11: + .size fn3B, .Lfunc_end11-fn3B + # -- End function + .section .text.testB,"ax",@progbits + .hidden testB # -- Begin function testB + .globl testB + .type testB,@function +testB: # @testB + .local i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push119=, 0 + i32.const $push118=, 0 + i32.load $push0=, myrnd.s($pop118) + i32.const $push117=, 1103515245 + i32.mul $push1=, $pop0, $pop117 + i32.const $push116=, 12345 + i32.add $push115=, $pop1, $pop116 + tee_local $push114=, $1=, $pop115 + i32.const $push113=, 16 + i32.shr_u $push2=, $pop114, $pop113 + i32.store8 sB($pop119), $pop2 + i32.const $push112=, 0 + i32.const $push111=, 1103515245 + i32.mul $push3=, $1, $pop111 + i32.const $push110=, 12345 + i32.add $push109=, $pop3, $pop110 + tee_local $push108=, $1=, $pop109 + i32.const $push107=, 16 + i32.shr_u $push4=, $pop108, $pop107 + i32.store8 sB+1($pop112), $pop4 + i32.const $push106=, 0 + i32.const $push105=, 1103515245 + i32.mul $push5=, $1, $pop105 + i32.const $push104=, 12345 + i32.add $push103=, $pop5, $pop104 + tee_local $push102=, $1=, $pop103 + i32.const $push101=, 16 + i32.shr_u $push6=, $pop102, $pop101 + i32.store8 sB+2($pop106), $pop6 + i32.const $push100=, 0 + i32.const $push99=, 1103515245 + i32.mul $push7=, $1, $pop99 + i32.const $push98=, 12345 + i32.add $push97=, $pop7, $pop98 + tee_local $push96=, $1=, $pop97 + i32.const $push95=, 16 + i32.shr_u $push8=, $pop96, $pop95 + i32.store8 sB+3($pop100), $pop8 + i32.const $push94=, 0 + i32.const $push93=, 1103515245 + i32.mul $push9=, $1, $pop93 + i32.const $push92=, 12345 + i32.add $push91=, $pop9, $pop92 + tee_local $push90=, $1=, $pop91 + i32.const $push89=, 16 + i32.shr_u $push10=, $pop90, $pop89 + i32.store8 sB+4($pop94), $pop10 + i32.const $push88=, 0 + i32.const $push87=, 1103515245 + i32.mul $push11=, $1, $pop87 + i32.const $push86=, 12345 + i32.add $push85=, $pop11, $pop86 + tee_local $push84=, $1=, $pop85 + i32.const $push83=, 16 + i32.shr_u $push12=, $pop84, $pop83 + i32.store8 sB+5($pop88), $pop12 + i32.const $push82=, 0 + i32.const $push81=, 1103515245 + i32.mul $push13=, $1, $pop81 + i32.const $push80=, 12345 + i32.add $push79=, $pop13, $pop80 + tee_local $push78=, $1=, $pop79 + i32.const $push77=, 16 + i32.shr_u $push14=, $pop78, $pop77 + i32.store8 sB+6($pop82), $pop14 + i32.const $push76=, 0 + i32.const $push75=, 1103515245 + i32.mul $push15=, $1, $pop75 + i32.const $push74=, 12345 + i32.add $push73=, $pop15, $pop74 + tee_local $push72=, $1=, $pop73 + i32.const $push71=, 16 + i32.shr_u $push16=, $pop72, $pop71 + i32.store8 sB+7($pop76), $pop16 + i32.const $push70=, 0 + i32.const $push69=, 1103515245 + i32.mul $push17=, $1, $pop69 + i32.const $push68=, 12345 + i32.add $push67=, $pop17, $pop68 + tee_local $push66=, $3=, $pop67 + i32.const $push65=, 1103515245 + i32.mul $push18=, $pop66, $pop65 + i32.const $push64=, 12345 + i32.add $push63=, $pop18, $pop64 + tee_local $push62=, $1=, $pop63 + i32.store myrnd.s($pop70), $pop62 + i32.const $push61=, 0 + i32.const $push60=, 16 + i32.shr_u $push19=, $3, $pop60 + i32.const $push59=, 2047 + i32.and $push58=, $pop19, $pop59 + tee_local $push57=, $3=, $pop58 + i32.const $push56=, 17 + i32.shl $push20=, $pop57, $pop56 + i32.const $push55=, 0 + i32.load $push54=, sB($pop55) + tee_local $push53=, $0=, $pop54 + i32.const $push52=, 131071 + i32.and $push51=, $pop53, $pop52 + tee_local $push50=, $2=, $pop51 + i32.or $push49=, $pop20, $pop50 + tee_local $push48=, $4=, $pop49 + i32.store sB($pop61), $pop48 + block + i32.const $push47=, 16 + i32.shr_u $push21=, $1, $pop47 + i32.const $push46=, 2047 + i32.and $push45=, $pop21, $pop46 + tee_local $push44=, $5=, $pop45 + i32.add $push22=, $pop44, $3 + i32.const $push43=, 17 + i32.shl $push23=, $5, $pop43 + i32.add $push24=, $pop23, $4 + i32.const $push42=, 17 + i32.shr_u $push25=, $pop24, $pop42 + i32.ne $push26=, $pop22, $pop25 + br_if 0, $pop26 # 0: down to label1 +# BB#1: # %if.end76 + i32.const $push140=, 0 + i32.const $push27=, -2139243339 + i32.mul $push28=, $1, $pop27 + i32.const $push29=, -1492899873 + i32.add $push139=, $pop28, $pop29 + tee_local $push138=, $1=, $pop139 + i32.const $push137=, 1103515245 + i32.mul $push30=, $pop138, $pop137 + i32.const $push136=, 12345 + i32.add $push135=, $pop30, $pop136 + tee_local $push134=, $3=, $pop135 + i32.store myrnd.s($pop140), $pop134 + i32.const $push133=, 0 + i32.const $push132=, 16 + i32.shr_u $push34=, $3, $pop132 + i32.const $push131=, 2047 + i32.and $push130=, $pop34, $pop131 + tee_local $push129=, $3=, $pop130 + i32.const $push128=, 17 + i32.shl $push35=, $pop129, $pop128 + i32.const $push127=, 16 + i32.shr_u $push31=, $1, $pop127 + i32.const $push126=, 2047 + i32.and $push125=, $pop31, $pop126 + tee_local $push124=, $4=, $pop125 + i32.const $push123=, 17 + i32.shl $push32=, $pop124, $pop123 + i32.or $push33=, $pop32, $2 + i32.add $push122=, $pop35, $pop33 + tee_local $push121=, $1=, $pop122 + i32.store sB($pop133), $pop121 + i32.xor $push36=, $1, $0 + i32.const $push120=, 131071 + i32.and $push37=, $pop36, $pop120 + br_if 0, $pop37 # 0: down to label1 +# BB#2: # %lor.lhs.false109 + i32.add $push40=, $3, $4 + i32.const $push38=, 17 + i32.shr_u $push39=, $1, $pop38 + i32.ne $push41=, $pop40, $pop39 + br_if 0, $pop41 # 0: down to label1 +# BB#3: # %if.end115 + return +.LBB12_4: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end12: + .size testB, .Lfunc_end12-testB + # -- End function + .section .text.retmeC,"ax",@progbits + .hidden retmeC # -- Begin function retmeC + .globl retmeC + .type retmeC,@function +retmeC: # @retmeC + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=2 + i64.store 0($0):p2align=2, $pop0 + # fallthrough-return + .endfunc +.Lfunc_end13: + .size retmeC, .Lfunc_end13-retmeC + # -- End function + .section .text.fn1C,"ax",@progbits + .hidden fn1C # -- Begin function fn1C + .globl fn1C + .type fn1C,@function +fn1C: # @fn1C + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 17 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 0 + i32.load $push3=, sC+4($pop2) + i32.add $push4=, $pop1, $pop3 + i32.const $push6=, 17 + i32.shr_u $push5=, $pop4, $pop6 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end14: + .size fn1C, .Lfunc_end14-fn1C + # -- End function + .section .text.fn2C,"ax",@progbits + .hidden fn2C # -- Begin function fn2C + .globl fn2C + .type fn2C,@function +fn2C: # @fn2C + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sC+4($pop0) + i32.const $push2=, 17 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 32767 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 15 + i32.rem_u $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end15: + .size fn2C, .Lfunc_end15-fn2C + # -- End function + .section .text.retitC,"ax",@progbits + .hidden retitC # -- Begin function retitC + .globl retitC + .type retitC,@function +retitC: # @retitC + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sC+4($pop0) + i32.const $push2=, 17 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end16: + .size retitC, .Lfunc_end16-retitC + # -- End function + .section .text.fn3C,"ax",@progbits + .hidden fn3C # -- Begin function fn3C + .globl fn3C + .type fn3C,@function +fn3C: # @fn3C + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push8=, 0 + i32.load $push3=, sC+4($pop8) + i32.const $push0=, 17 + i32.shl $push1=, $0, $pop0 + i32.add $push7=, $pop3, $pop1 + tee_local $push6=, $0=, $pop7 + i32.store sC+4($pop2), $pop6 + i32.const $push5=, 17 + i32.shr_u $push4=, $0, $pop5 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end17: + .size fn3C, .Lfunc_end17-fn3C + # -- End function + .section .text.testC,"ax",@progbits + .hidden testC # -- Begin function testC + .globl testC + .type testC,@function +testC: # @testC + .local i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push119=, 0 + i32.const $push118=, 0 + i32.load $push0=, myrnd.s($pop118) + i32.const $push117=, 1103515245 + i32.mul $push1=, $pop0, $pop117 + i32.const $push116=, 12345 + i32.add $push115=, $pop1, $pop116 + tee_local $push114=, $0=, $pop115 + i32.const $push113=, 1103515245 + i32.mul $push2=, $pop114, $pop113 + i32.const $push112=, 12345 + i32.add $push111=, $pop2, $pop112 + tee_local $push110=, $1=, $pop111 + i32.const $push109=, 1103515245 + i32.mul $push3=, $pop110, $pop109 + i32.const $push108=, 12345 + i32.add $push107=, $pop3, $pop108 + tee_local $push106=, $2=, $pop107 + i32.const $push105=, 1103515245 + i32.mul $push4=, $pop106, $pop105 + i32.const $push104=, 12345 + i32.add $push103=, $pop4, $pop104 + tee_local $push102=, $3=, $pop103 + i32.const $push101=, 1103515245 + i32.mul $push5=, $pop102, $pop101 + i32.const $push100=, 12345 + i32.add $push99=, $pop5, $pop100 + tee_local $push98=, $4=, $pop99 + i32.const $push97=, 16 + i32.shr_u $push6=, $pop98, $pop97 + i32.store8 sC+4($pop119), $pop6 + i32.const $push96=, 0 + i32.const $push95=, 1103515245 + i32.mul $push7=, $4, $pop95 + i32.const $push94=, 12345 + i32.add $push93=, $pop7, $pop94 + tee_local $push92=, $4=, $pop93 + i32.const $push91=, 16 + i32.shr_u $push8=, $pop92, $pop91 + i32.store8 sC+5($pop96), $pop8 + i32.const $push90=, 0 + i32.const $push89=, 1103515245 + i32.mul $push9=, $4, $pop89 + i32.const $push88=, 12345 + i32.add $push87=, $pop9, $pop88 + tee_local $push86=, $4=, $pop87 + i32.const $push85=, 16 + i32.shr_u $push10=, $pop86, $pop85 + i32.store8 sC+6($pop90), $pop10 + i32.const $push84=, 0 + i32.const $push83=, 1103515245 + i32.mul $push11=, $4, $pop83 + i32.const $push82=, 12345 + i32.add $push81=, $pop11, $pop82 + tee_local $push80=, $4=, $pop81 + i32.const $push79=, 16 + i32.shr_u $push12=, $pop80, $pop79 + i32.store8 sC+7($pop84), $pop12 + i32.const $push78=, 0 + i32.const $push77=, 16 + i32.shr_u $push13=, $0, $pop77 + i32.store8 sC($pop78), $pop13 + i32.const $push76=, 0 + i32.const $push75=, 16 + i32.shr_u $push14=, $1, $pop75 + i32.store8 sC+1($pop76), $pop14 + i32.const $push74=, 0 + i32.const $push73=, 16 + i32.shr_u $push15=, $2, $pop73 + i32.store8 sC+2($pop74), $pop15 + i32.const $push72=, 0 + i32.const $push71=, 16 + i32.shr_u $push16=, $3, $pop71 + i32.store8 sC+3($pop72), $pop16 + i32.const $push70=, 0 + i32.const $push69=, 1103515245 + i32.mul $push17=, $4, $pop69 + i32.const $push68=, 12345 + i32.add $push67=, $pop17, $pop68 + tee_local $push66=, $1=, $pop67 + i32.const $push65=, 1103515245 + i32.mul $push18=, $pop66, $pop65 + i32.const $push64=, 12345 + i32.add $push63=, $pop18, $pop64 + tee_local $push62=, $0=, $pop63 + i32.store myrnd.s($pop70), $pop62 + i32.const $push61=, 0 + i32.const $push60=, 16 + i32.shr_u $push19=, $1, $pop60 + i32.const $push59=, 2047 + i32.and $push58=, $pop19, $pop59 + tee_local $push57=, $1=, $pop58 + i32.const $push56=, 17 + i32.shl $push20=, $pop57, $pop56 + i32.const $push55=, 0 + i32.load $push54=, sC+4($pop55) + tee_local $push53=, $2=, $pop54 + i32.const $push52=, 131071 + i32.and $push51=, $pop53, $pop52 + tee_local $push50=, $3=, $pop51 + i32.or $push49=, $pop20, $pop50 + tee_local $push48=, $4=, $pop49 + i32.store sC+4($pop61), $pop48 + block + i32.const $push47=, 16 + i32.shr_u $push21=, $0, $pop47 + i32.const $push46=, 2047 + i32.and $push45=, $pop21, $pop46 + tee_local $push44=, $5=, $pop45 + i32.add $push22=, $pop44, $1 + i32.const $push43=, 17 + i32.shl $push23=, $5, $pop43 + i32.add $push24=, $pop23, $4 + i32.const $push42=, 17 + i32.shr_u $push25=, $pop24, $pop42 + i32.ne $push26=, $pop22, $pop25 + br_if 0, $pop26 # 0: down to label2 +# BB#1: # %if.end80 + i32.const $push140=, 0 + i32.const $push27=, -2139243339 + i32.mul $push28=, $0, $pop27 + i32.const $push29=, -1492899873 + i32.add $push139=, $pop28, $pop29 + tee_local $push138=, $0=, $pop139 + i32.const $push137=, 1103515245 + i32.mul $push30=, $pop138, $pop137 + i32.const $push136=, 12345 + i32.add $push135=, $pop30, $pop136 + tee_local $push134=, $1=, $pop135 + i32.store myrnd.s($pop140), $pop134 + i32.const $push133=, 0 + i32.const $push132=, 16 + i32.shr_u $push34=, $1, $pop132 + i32.const $push131=, 2047 + i32.and $push130=, $pop34, $pop131 + tee_local $push129=, $1=, $pop130 + i32.const $push128=, 17 + i32.shl $push35=, $pop129, $pop128 + i32.const $push127=, 16 + i32.shr_u $push31=, $0, $pop127 + i32.const $push126=, 2047 + i32.and $push125=, $pop31, $pop126 + tee_local $push124=, $4=, $pop125 + i32.const $push123=, 17 + i32.shl $push32=, $pop124, $pop123 + i32.or $push33=, $pop32, $3 + i32.add $push122=, $pop35, $pop33 + tee_local $push121=, $0=, $pop122 + i32.store sC+4($pop133), $pop121 + i32.xor $push36=, $0, $2 + i32.const $push120=, 131071 + i32.and $push37=, $pop36, $pop120 + br_if 0, $pop37 # 0: down to label2 +# BB#2: # %lor.lhs.false115 + i32.add $push40=, $1, $4 + i32.const $push38=, 17 + i32.shr_u $push39=, $0, $pop38 + i32.ne $push41=, $pop40, $pop39 + br_if 0, $pop41 # 0: down to label2 +# BB#3: # %if.end121 + return +.LBB18_4: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end18: + .size testC, .Lfunc_end18-testC + # -- End function + .section .text.retmeD,"ax",@progbits + .hidden retmeD # -- Begin function retmeD + .globl retmeD + .type retmeD,@function +retmeD: # @retmeD + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end19: + .size retmeD, .Lfunc_end19-retmeD + # -- End function + .section .text.fn1D,"ax",@progbits + .hidden fn1D # -- Begin function fn1D + .globl fn1D + .type fn1D,@function +fn1D: # @fn1D + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, sD($pop0) + i64.const $push2=, 35 + i64.shr_u $push3=, $pop1, $pop2 + i32.wrap/i64 $push4=, $pop3 + i32.add $push5=, $pop4, $0 + i32.const $push6=, 536870911 + i32.and $push7=, $pop5, $pop6 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end20: + .size fn1D, .Lfunc_end20-fn1D + # -- End function + .section .text.fn2D,"ax",@progbits + .hidden fn2D # -- Begin function fn2D + .globl fn2D + .type fn2D,@function +fn2D: # @fn2D + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, sD($pop0) + i64.const $push2=, 35 + i64.shr_u $push3=, $pop1, $pop2 + i32.wrap/i64 $push4=, $pop3 + i32.add $push5=, $pop4, $0 + i32.const $push6=, 536870911 + i32.and $push7=, $pop5, $pop6 + i32.const $push8=, 15 + i32.rem_u $push9=, $pop7, $pop8 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end21: + .size fn2D, .Lfunc_end21-fn2D + # -- End function + .section .text.retitD,"ax",@progbits + .hidden retitD # -- Begin function retitD + .globl retitD + .type retitD,@function +retitD: # @retitD + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, sD($pop0) + i64.const $push2=, 35 + i64.shr_u $push3=, $pop1, $pop2 + i32.wrap/i64 $push4=, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end22: + .size retitD, .Lfunc_end22-retitD + # -- End function + .section .text.fn3D,"ax",@progbits + .hidden fn3D # -- Begin function fn3D + .globl fn3D + .type fn3D,@function +fn3D: # @fn3D + .param i32 + .result i32 + .local i64 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push16=, 0 + i64.load $push15=, sD($pop16) + tee_local $push14=, $1=, $pop15 + i64.const $push3=, 35 + i64.shr_u $push4=, $pop14, $pop3 + i32.wrap/i64 $push5=, $pop4 + i32.add $push13=, $pop5, $0 + tee_local $push12=, $0=, $pop13 + i64.extend_u/i32 $push6=, $pop12 + i64.const $push11=, 35 + i64.shl $push7=, $pop6, $pop11 + i64.const $push1=, 34359738367 + i64.and $push2=, $1, $pop1 + i64.or $push8=, $pop7, $pop2 + i64.store sD($pop0), $pop8 + i32.const $push9=, 536870911 + i32.and $push10=, $0, $pop9 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end23: + .size fn3D, .Lfunc_end23-fn3D + # -- End function + .section .text.testD,"ax",@progbits + .hidden testD # -- Begin function testD + .globl testD + .type testD,@function +testD: # @testD + .local i32, i32 +# BB#0: # %if.end158 + i32.const $push0=, 0 + i32.const $push94=, 0 + i32.load $push1=, myrnd.s($pop94) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push93=, $pop3, $pop4 + tee_local $push92=, $0=, $pop93 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop92, $pop5 + i32.store8 sD($pop0), $pop6 + i32.const $push91=, 0 + i32.const $push90=, 1103515245 + i32.mul $push7=, $0, $pop90 + i32.const $push89=, 12345 + i32.add $push88=, $pop7, $pop89 + tee_local $push87=, $0=, $pop88 + i32.const $push86=, 16 + i32.shr_u $push8=, $pop87, $pop86 + i32.store8 sD+1($pop91), $pop8 + i32.const $push85=, 0 + i32.const $push84=, 1103515245 + i32.mul $push9=, $0, $pop84 + i32.const $push83=, 12345 + i32.add $push82=, $pop9, $pop83 + tee_local $push81=, $0=, $pop82 + i32.const $push80=, 16 + i32.shr_u $push10=, $pop81, $pop80 + i32.store8 sD+2($pop85), $pop10 + i32.const $push79=, 0 + i32.const $push78=, 1103515245 + i32.mul $push11=, $0, $pop78 + i32.const $push77=, 12345 + i32.add $push76=, $pop11, $pop77 + tee_local $push75=, $0=, $pop76 + i32.const $push74=, 16 + i32.shr_u $push12=, $pop75, $pop74 + i32.store8 sD+3($pop79), $pop12 + i32.const $push73=, 0 + i32.const $push72=, 1103515245 + i32.mul $push13=, $0, $pop72 + i32.const $push71=, 12345 + i32.add $push70=, $pop13, $pop71 + tee_local $push69=, $0=, $pop70 + i32.const $push68=, 16 + i32.shr_u $push14=, $pop69, $pop68 + i32.store8 sD+4($pop73), $pop14 + i32.const $push67=, 0 + i32.const $push66=, 1103515245 + i32.mul $push15=, $0, $pop66 + i32.const $push65=, 12345 + i32.add $push64=, $pop15, $pop65 + tee_local $push63=, $0=, $pop64 + i32.const $push62=, 16 + i32.shr_u $push16=, $pop63, $pop62 + i32.store8 sD+5($pop67), $pop16 + i32.const $push61=, 0 + i32.const $push60=, 1103515245 + i32.mul $push17=, $0, $pop60 + i32.const $push59=, 12345 + i32.add $push58=, $pop17, $pop59 + tee_local $push57=, $0=, $pop58 + i32.const $push56=, 16 + i32.shr_u $push18=, $pop57, $pop56 + i32.store8 sD+6($pop61), $pop18 + i32.const $push55=, 0 + i32.const $push54=, 1103515245 + i32.mul $push19=, $0, $pop54 + i32.const $push53=, 12345 + i32.add $push52=, $pop19, $pop53 + tee_local $push51=, $0=, $pop52 + i32.const $push50=, 16 + i32.shr_u $push20=, $pop51, $pop50 + i32.store8 sD+7($pop55), $pop20 + i32.const $push49=, 0 + i32.const $push21=, -341751747 + i32.mul $push22=, $0, $pop21 + i32.const $push23=, 229283573 + i32.add $push48=, $pop22, $pop23 + tee_local $push47=, $0=, $pop48 + i32.const $push46=, 1103515245 + i32.mul $push24=, $pop47, $pop46 + i32.const $push45=, 12345 + i32.add $push44=, $pop24, $pop45 + tee_local $push43=, $1=, $pop44 + i32.store myrnd.s($pop49), $pop43 + i32.const $push42=, 0 + i32.const $push41=, 16 + i32.shr_u $push28=, $1, $pop41 + i32.const $push26=, 2047 + i32.and $push29=, $pop28, $pop26 + i32.const $push40=, 16 + i32.shr_u $push25=, $0, $pop40 + i32.const $push39=, 2047 + i32.and $push27=, $pop25, $pop39 + i32.add $push30=, $pop29, $pop27 + i64.extend_u/i32 $push31=, $pop30 + i64.const $push32=, 35 + i64.shl $push33=, $pop31, $pop32 + i32.const $push38=, 0 + i64.load $push34=, sD($pop38) + i64.const $push35=, 34359738367 + i64.and $push36=, $pop34, $pop35 + i64.or $push37=, $pop33, $pop36 + i64.store sD($pop42), $pop37 + # fallthrough-return + .endfunc +.Lfunc_end24: + .size testD, .Lfunc_end24-testD + # -- End function + .section .text.retmeE,"ax",@progbits + .hidden retmeE # -- Begin function retmeE + .globl retmeE + .type retmeE,@function +retmeE: # @retmeE + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 0($0), $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i64.load $push4=, 0($pop3) + i64.store 0($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end25: + .size retmeE, .Lfunc_end25-retmeE + # -- End function + .section .text.fn1E,"ax",@progbits + .hidden fn1E # -- Begin function fn1E + .globl fn1E + .type fn1E,@function +fn1E: # @fn1E + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, sE+8($pop0) + i64.const $push2=, 35 + i64.shr_u $push3=, $pop1, $pop2 + i32.wrap/i64 $push4=, $pop3 + i32.add $push5=, $pop4, $0 + i32.const $push6=, 536870911 + i32.and $push7=, $pop5, $pop6 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end26: + .size fn1E, .Lfunc_end26-fn1E + # -- End function + .section .text.fn2E,"ax",@progbits + .hidden fn2E # -- Begin function fn2E + .globl fn2E + .type fn2E,@function +fn2E: # @fn2E + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, sE+8($pop0) + i64.const $push2=, 35 + i64.shr_u $push3=, $pop1, $pop2 + i32.wrap/i64 $push4=, $pop3 + i32.add $push5=, $pop4, $0 + i32.const $push6=, 536870911 + i32.and $push7=, $pop5, $pop6 + i32.const $push8=, 15 + i32.rem_u $push9=, $pop7, $pop8 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end27: + .size fn2E, .Lfunc_end27-fn2E + # -- End function + .section .text.retitE,"ax",@progbits + .hidden retitE # -- Begin function retitE + .globl retitE + .type retitE,@function +retitE: # @retitE + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, sE+8($pop0) + i64.const $push2=, 35 + i64.shr_u $push3=, $pop1, $pop2 + i32.wrap/i64 $push4=, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end28: + .size retitE, .Lfunc_end28-retitE + # -- End function + .section .text.fn3E,"ax",@progbits + .hidden fn3E # -- Begin function fn3E + .globl fn3E + .type fn3E,@function +fn3E: # @fn3E + .param i32 + .result i32 + .local i64 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push16=, 0 + i64.load $push15=, sE+8($pop16) + tee_local $push14=, $1=, $pop15 + i64.const $push3=, 35 + i64.shr_u $push4=, $pop14, $pop3 + i32.wrap/i64 $push5=, $pop4 + i32.add $push13=, $pop5, $0 + tee_local $push12=, $0=, $pop13 + i64.extend_u/i32 $push6=, $pop12 + i64.const $push11=, 35 + i64.shl $push7=, $pop6, $pop11 + i64.const $push1=, 34359738367 + i64.and $push2=, $1, $pop1 + i64.or $push8=, $pop7, $pop2 + i64.store sE+8($pop0), $pop8 + i32.const $push9=, 536870911 + i32.and $push10=, $0, $pop9 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end29: + .size fn3E, .Lfunc_end29-fn3E + # -- End function + .section .text.testE,"ax",@progbits + .hidden testE # -- Begin function testE + .globl testE + .type testE,@function +testE: # @testE + .local i32, i32 +# BB#0: # %if.end95 + i32.const $push0=, 0 + i32.const $push158=, 0 + i32.load $push1=, myrnd.s($pop158) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push157=, $pop3, $pop4 + tee_local $push156=, $0=, $pop157 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop156, $pop5 + i32.store8 sE($pop0), $pop6 + i32.const $push155=, 0 + i32.const $push154=, 1103515245 + i32.mul $push7=, $0, $pop154 + i32.const $push153=, 12345 + i32.add $push152=, $pop7, $pop153 + tee_local $push151=, $0=, $pop152 + i32.const $push150=, 16 + i32.shr_u $push8=, $pop151, $pop150 + i32.store8 sE+1($pop155), $pop8 + i32.const $push149=, 0 + i32.const $push148=, 1103515245 + i32.mul $push9=, $0, $pop148 + i32.const $push147=, 12345 + i32.add $push146=, $pop9, $pop147 + tee_local $push145=, $0=, $pop146 + i32.const $push144=, 16 + i32.shr_u $push10=, $pop145, $pop144 + i32.store8 sE+2($pop149), $pop10 + i32.const $push143=, 0 + i32.const $push142=, 1103515245 + i32.mul $push11=, $0, $pop142 + i32.const $push141=, 12345 + i32.add $push140=, $pop11, $pop141 + tee_local $push139=, $0=, $pop140 + i32.const $push138=, 16 + i32.shr_u $push12=, $pop139, $pop138 + i32.store8 sE+3($pop143), $pop12 + i32.const $push137=, 0 + i32.const $push136=, 1103515245 + i32.mul $push13=, $0, $pop136 + i32.const $push135=, 12345 + i32.add $push134=, $pop13, $pop135 + tee_local $push133=, $0=, $pop134 + i32.const $push132=, 16 + i32.shr_u $push14=, $pop133, $pop132 + i32.store8 sE+4($pop137), $pop14 + i32.const $push131=, 0 + i32.const $push130=, 1103515245 + i32.mul $push15=, $0, $pop130 + i32.const $push129=, 12345 + i32.add $push128=, $pop15, $pop129 + tee_local $push127=, $0=, $pop128 + i32.const $push126=, 16 + i32.shr_u $push16=, $pop127, $pop126 + i32.store8 sE+5($pop131), $pop16 + i32.const $push125=, 0 + i32.const $push124=, 1103515245 + i32.mul $push17=, $0, $pop124 + i32.const $push123=, 12345 + i32.add $push122=, $pop17, $pop123 + tee_local $push121=, $0=, $pop122 + i32.const $push120=, 16 + i32.shr_u $push18=, $pop121, $pop120 + i32.store8 sE+6($pop125), $pop18 + i32.const $push119=, 0 + i32.const $push118=, 1103515245 + i32.mul $push19=, $0, $pop118 + i32.const $push117=, 12345 + i32.add $push116=, $pop19, $pop117 + tee_local $push115=, $0=, $pop116 + i32.const $push114=, 16 + i32.shr_u $push20=, $pop115, $pop114 + i32.store8 sE+7($pop119), $pop20 + i32.const $push113=, 0 + i32.const $push112=, 1103515245 + i32.mul $push21=, $0, $pop112 + i32.const $push111=, 12345 + i32.add $push110=, $pop21, $pop111 + tee_local $push109=, $0=, $pop110 + i32.const $push108=, 16 + i32.shr_u $push22=, $pop109, $pop108 + i32.store8 sE+8($pop113), $pop22 + i32.const $push107=, 0 + i32.const $push106=, 1103515245 + i32.mul $push23=, $0, $pop106 + i32.const $push105=, 12345 + i32.add $push104=, $pop23, $pop105 + tee_local $push103=, $0=, $pop104 + i32.const $push102=, 16 + i32.shr_u $push24=, $pop103, $pop102 + i32.store8 sE+9($pop107), $pop24 + i32.const $push101=, 0 + i32.const $push100=, 1103515245 + i32.mul $push25=, $0, $pop100 + i32.const $push99=, 12345 + i32.add $push98=, $pop25, $pop99 + tee_local $push97=, $0=, $pop98 + i32.const $push96=, 16 + i32.shr_u $push26=, $pop97, $pop96 + i32.store8 sE+10($pop101), $pop26 + i32.const $push95=, 0 + i32.const $push94=, 1103515245 + i32.mul $push27=, $0, $pop94 + i32.const $push93=, 12345 + i32.add $push92=, $pop27, $pop93 + tee_local $push91=, $0=, $pop92 + i32.const $push90=, 16 + i32.shr_u $push28=, $pop91, $pop90 + i32.store8 sE+11($pop95), $pop28 + i32.const $push89=, 0 + i32.const $push88=, 1103515245 + i32.mul $push29=, $0, $pop88 + i32.const $push87=, 12345 + i32.add $push86=, $pop29, $pop87 + tee_local $push85=, $0=, $pop86 + i32.const $push84=, 16 + i32.shr_u $push30=, $pop85, $pop84 + i32.store8 sE+12($pop89), $pop30 + i32.const $push83=, 0 + i32.const $push82=, 1103515245 + i32.mul $push31=, $0, $pop82 + i32.const $push81=, 12345 + i32.add $push80=, $pop31, $pop81 + tee_local $push79=, $0=, $pop80 + i32.const $push78=, 16 + i32.shr_u $push32=, $pop79, $pop78 + i32.store8 sE+13($pop83), $pop32 + i32.const $push77=, 0 + i32.const $push76=, 1103515245 + i32.mul $push33=, $0, $pop76 + i32.const $push75=, 12345 + i32.add $push74=, $pop33, $pop75 + tee_local $push73=, $0=, $pop74 + i32.const $push72=, 16 + i32.shr_u $push34=, $pop73, $pop72 + i32.store8 sE+14($pop77), $pop34 + i32.const $push71=, 0 + i32.const $push70=, 1103515245 + i32.mul $push35=, $0, $pop70 + i32.const $push69=, 12345 + i32.add $push68=, $pop35, $pop69 + tee_local $push67=, $0=, $pop68 + i32.const $push66=, 16 + i32.shr_u $push36=, $pop67, $pop66 + i32.store8 sE+15($pop71), $pop36 + i32.const $push65=, 0 + i32.const $push37=, -341751747 + i32.mul $push38=, $0, $pop37 + i32.const $push39=, 229283573 + i32.add $push64=, $pop38, $pop39 + tee_local $push63=, $0=, $pop64 + i32.const $push62=, 1103515245 + i32.mul $push40=, $pop63, $pop62 + i32.const $push61=, 12345 + i32.add $push60=, $pop40, $pop61 + tee_local $push59=, $1=, $pop60 + i32.store myrnd.s($pop65), $pop59 + i32.const $push58=, 0 + i32.const $push57=, 16 + i32.shr_u $push44=, $1, $pop57 + i32.const $push42=, 2047 + i32.and $push45=, $pop44, $pop42 + i32.const $push56=, 16 + i32.shr_u $push41=, $0, $pop56 + i32.const $push55=, 2047 + i32.and $push43=, $pop41, $pop55 + i32.add $push46=, $pop45, $pop43 + i64.extend_u/i32 $push47=, $pop46 + i64.const $push48=, 35 + i64.shl $push49=, $pop47, $pop48 + i32.const $push54=, 0 + i64.load $push50=, sE+8($pop54) + i64.const $push51=, 34359738367 + i64.and $push52=, $pop50, $pop51 + i64.or $push53=, $pop49, $pop52 + i64.store sE+8($pop58), $pop53 + # fallthrough-return + .endfunc +.Lfunc_end30: + .size testE, .Lfunc_end30-testE + # -- End function + .section .text.retmeF,"ax",@progbits + .hidden retmeF # -- Begin function retmeF + .globl retmeF + .type retmeF,@function +retmeF: # @retmeF + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 0($0), $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i64.load $push4=, 0($pop3) + i64.store 0($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end31: + .size retmeF, .Lfunc_end31-retmeF + # -- End function + .section .text.fn1F,"ax",@progbits + .hidden fn1F # -- Begin function fn1F + .globl fn1F + .type fn1F,@function +fn1F: # @fn1F + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, sF($pop0) + i64.const $push2=, 35 + i64.shr_u $push3=, $pop1, $pop2 + i32.wrap/i64 $push4=, $pop3 + i32.add $push5=, $pop4, $0 + i32.const $push6=, 536870911 + i32.and $push7=, $pop5, $pop6 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end32: + .size fn1F, .Lfunc_end32-fn1F + # -- End function + .section .text.fn2F,"ax",@progbits + .hidden fn2F # -- Begin function fn2F + .globl fn2F + .type fn2F,@function +fn2F: # @fn2F + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, sF($pop0) + i64.const $push2=, 35 + i64.shr_u $push3=, $pop1, $pop2 + i32.wrap/i64 $push4=, $pop3 + i32.add $push5=, $pop4, $0 + i32.const $push6=, 536870911 + i32.and $push7=, $pop5, $pop6 + i32.const $push8=, 15 + i32.rem_u $push9=, $pop7, $pop8 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end33: + .size fn2F, .Lfunc_end33-fn2F + # -- End function + .section .text.retitF,"ax",@progbits + .hidden retitF # -- Begin function retitF + .globl retitF + .type retitF,@function +retitF: # @retitF + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, sF($pop0) + i64.const $push2=, 35 + i64.shr_u $push3=, $pop1, $pop2 + i32.wrap/i64 $push4=, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end34: + .size retitF, .Lfunc_end34-retitF + # -- End function + .section .text.fn3F,"ax",@progbits + .hidden fn3F # -- Begin function fn3F + .globl fn3F + .type fn3F,@function +fn3F: # @fn3F + .param i32 + .result i32 + .local i64 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push16=, 0 + i64.load $push15=, sF($pop16) + tee_local $push14=, $1=, $pop15 + i64.const $push3=, 35 + i64.shr_u $push4=, $pop14, $pop3 + i32.wrap/i64 $push5=, $pop4 + i32.add $push13=, $pop5, $0 + tee_local $push12=, $0=, $pop13 + i64.extend_u/i32 $push6=, $pop12 + i64.const $push11=, 35 + i64.shl $push7=, $pop6, $pop11 + i64.const $push1=, 34359738367 + i64.and $push2=, $1, $pop1 + i64.or $push8=, $pop7, $pop2 + i64.store sF($pop0), $pop8 + i32.const $push9=, 536870911 + i32.and $push10=, $0, $pop9 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end35: + .size fn3F, .Lfunc_end35-fn3F + # -- End function + .section .text.testF,"ax",@progbits + .hidden testF # -- Begin function testF + .globl testF + .type testF,@function +testF: # @testF + .local i32, i32 +# BB#0: # %if.end91 + i32.const $push0=, 0 + i32.const $push158=, 0 + i32.load $push1=, myrnd.s($pop158) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push157=, $pop3, $pop4 + tee_local $push156=, $0=, $pop157 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop156, $pop5 + i32.store8 sF($pop0), $pop6 + i32.const $push155=, 0 + i32.const $push154=, 1103515245 + i32.mul $push7=, $0, $pop154 + i32.const $push153=, 12345 + i32.add $push152=, $pop7, $pop153 + tee_local $push151=, $0=, $pop152 + i32.const $push150=, 16 + i32.shr_u $push8=, $pop151, $pop150 + i32.store8 sF+1($pop155), $pop8 + i32.const $push149=, 0 + i32.const $push148=, 1103515245 + i32.mul $push9=, $0, $pop148 + i32.const $push147=, 12345 + i32.add $push146=, $pop9, $pop147 + tee_local $push145=, $0=, $pop146 + i32.const $push144=, 16 + i32.shr_u $push10=, $pop145, $pop144 + i32.store8 sF+2($pop149), $pop10 + i32.const $push143=, 0 + i32.const $push142=, 1103515245 + i32.mul $push11=, $0, $pop142 + i32.const $push141=, 12345 + i32.add $push140=, $pop11, $pop141 + tee_local $push139=, $0=, $pop140 + i32.const $push138=, 16 + i32.shr_u $push12=, $pop139, $pop138 + i32.store8 sF+3($pop143), $pop12 + i32.const $push137=, 0 + i32.const $push136=, 1103515245 + i32.mul $push13=, $0, $pop136 + i32.const $push135=, 12345 + i32.add $push134=, $pop13, $pop135 + tee_local $push133=, $0=, $pop134 + i32.const $push132=, 16 + i32.shr_u $push14=, $pop133, $pop132 + i32.store8 sF+4($pop137), $pop14 + i32.const $push131=, 0 + i32.const $push130=, 1103515245 + i32.mul $push15=, $0, $pop130 + i32.const $push129=, 12345 + i32.add $push128=, $pop15, $pop129 + tee_local $push127=, $0=, $pop128 + i32.const $push126=, 16 + i32.shr_u $push16=, $pop127, $pop126 + i32.store8 sF+5($pop131), $pop16 + i32.const $push125=, 0 + i32.const $push124=, 1103515245 + i32.mul $push17=, $0, $pop124 + i32.const $push123=, 12345 + i32.add $push122=, $pop17, $pop123 + tee_local $push121=, $0=, $pop122 + i32.const $push120=, 16 + i32.shr_u $push18=, $pop121, $pop120 + i32.store8 sF+6($pop125), $pop18 + i32.const $push119=, 0 + i32.const $push118=, 1103515245 + i32.mul $push19=, $0, $pop118 + i32.const $push117=, 12345 + i32.add $push116=, $pop19, $pop117 + tee_local $push115=, $0=, $pop116 + i32.const $push114=, 16 + i32.shr_u $push20=, $pop115, $pop114 + i32.store8 sF+7($pop119), $pop20 + i32.const $push113=, 0 + i32.const $push112=, 1103515245 + i32.mul $push21=, $0, $pop112 + i32.const $push111=, 12345 + i32.add $push110=, $pop21, $pop111 + tee_local $push109=, $0=, $pop110 + i32.const $push108=, 16 + i32.shr_u $push22=, $pop109, $pop108 + i32.store8 sF+8($pop113), $pop22 + i32.const $push107=, 0 + i32.const $push106=, 1103515245 + i32.mul $push23=, $0, $pop106 + i32.const $push105=, 12345 + i32.add $push104=, $pop23, $pop105 + tee_local $push103=, $0=, $pop104 + i32.const $push102=, 16 + i32.shr_u $push24=, $pop103, $pop102 + i32.store8 sF+9($pop107), $pop24 + i32.const $push101=, 0 + i32.const $push100=, 1103515245 + i32.mul $push25=, $0, $pop100 + i32.const $push99=, 12345 + i32.add $push98=, $pop25, $pop99 + tee_local $push97=, $0=, $pop98 + i32.const $push96=, 16 + i32.shr_u $push26=, $pop97, $pop96 + i32.store8 sF+10($pop101), $pop26 + i32.const $push95=, 0 + i32.const $push94=, 1103515245 + i32.mul $push27=, $0, $pop94 + i32.const $push93=, 12345 + i32.add $push92=, $pop27, $pop93 + tee_local $push91=, $0=, $pop92 + i32.const $push90=, 16 + i32.shr_u $push28=, $pop91, $pop90 + i32.store8 sF+11($pop95), $pop28 + i32.const $push89=, 0 + i32.const $push88=, 1103515245 + i32.mul $push29=, $0, $pop88 + i32.const $push87=, 12345 + i32.add $push86=, $pop29, $pop87 + tee_local $push85=, $0=, $pop86 + i32.const $push84=, 16 + i32.shr_u $push30=, $pop85, $pop84 + i32.store8 sF+12($pop89), $pop30 + i32.const $push83=, 0 + i32.const $push82=, 1103515245 + i32.mul $push31=, $0, $pop82 + i32.const $push81=, 12345 + i32.add $push80=, $pop31, $pop81 + tee_local $push79=, $0=, $pop80 + i32.const $push78=, 16 + i32.shr_u $push32=, $pop79, $pop78 + i32.store8 sF+13($pop83), $pop32 + i32.const $push77=, 0 + i32.const $push76=, 1103515245 + i32.mul $push33=, $0, $pop76 + i32.const $push75=, 12345 + i32.add $push74=, $pop33, $pop75 + tee_local $push73=, $0=, $pop74 + i32.const $push72=, 16 + i32.shr_u $push34=, $pop73, $pop72 + i32.store8 sF+14($pop77), $pop34 + i32.const $push71=, 0 + i32.const $push70=, 1103515245 + i32.mul $push35=, $0, $pop70 + i32.const $push69=, 12345 + i32.add $push68=, $pop35, $pop69 + tee_local $push67=, $0=, $pop68 + i32.const $push66=, 16 + i32.shr_u $push36=, $pop67, $pop66 + i32.store8 sF+15($pop71), $pop36 + i32.const $push65=, 0 + i32.const $push37=, -341751747 + i32.mul $push38=, $0, $pop37 + i32.const $push39=, 229283573 + i32.add $push64=, $pop38, $pop39 + tee_local $push63=, $0=, $pop64 + i32.const $push62=, 1103515245 + i32.mul $push40=, $pop63, $pop62 + i32.const $push61=, 12345 + i32.add $push60=, $pop40, $pop61 + tee_local $push59=, $1=, $pop60 + i32.store myrnd.s($pop65), $pop59 + i32.const $push58=, 0 + i32.const $push57=, 16 + i32.shr_u $push44=, $1, $pop57 + i32.const $push42=, 2047 + i32.and $push45=, $pop44, $pop42 + i32.const $push56=, 16 + i32.shr_u $push41=, $0, $pop56 + i32.const $push55=, 2047 + i32.and $push43=, $pop41, $pop55 + i32.add $push46=, $pop45, $pop43 + i64.extend_u/i32 $push47=, $pop46 + i64.const $push48=, 35 + i64.shl $push49=, $pop47, $pop48 + i32.const $push54=, 0 + i64.load $push50=, sF($pop54) + i64.const $push51=, 34359738367 + i64.and $push52=, $pop50, $pop51 + i64.or $push53=, $pop49, $pop52 + i64.store sF($pop58), $pop53 + # fallthrough-return + .endfunc +.Lfunc_end36: + .size testF, .Lfunc_end36-testF + # -- End function + .section .text.retmeG,"ax",@progbits + .hidden retmeG # -- Begin function retmeG + .globl retmeG + .type retmeG,@function +retmeG: # @retmeG + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 0($0), $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i64.load $push4=, 0($pop3) + i64.store 0($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end37: + .size retmeG, .Lfunc_end37-retmeG + # -- End function + .section .text.fn1G,"ax",@progbits + .hidden fn1G # -- Begin function fn1G + .globl fn1G + .type fn1G,@function +fn1G: # @fn1G + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.load $push3=, sG($pop2) + i32.const $push0=, 25 + i32.shl $push1=, $0, $pop0 + i32.add $push4=, $pop3, $pop1 + i32.const $push6=, 25 + i32.shr_u $push5=, $pop4, $pop6 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end38: + .size fn1G, .Lfunc_end38-fn1G + # -- End function + .section .text.fn2G,"ax",@progbits + .hidden fn2G # -- Begin function fn2G + .globl fn2G + .type fn2G,@function +fn2G: # @fn2G + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sG($pop0) + i32.const $push2=, 25 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 127 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 15 + i32.rem_u $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end39: + .size fn2G, .Lfunc_end39-fn2G + # -- End function + .section .text.retitG,"ax",@progbits + .hidden retitG # -- Begin function retitG + .globl retitG + .type retitG,@function +retitG: # @retitG + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sG($pop0) + i32.const $push2=, 25 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end40: + .size retitG, .Lfunc_end40-retitG + # -- End function + .section .text.fn3G,"ax",@progbits + .hidden fn3G # -- Begin function fn3G + .globl fn3G + .type fn3G,@function +fn3G: # @fn3G + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push8=, 0 + i32.load $push3=, sG($pop8) + i32.const $push0=, 25 + i32.shl $push1=, $0, $pop0 + i32.add $push7=, $pop3, $pop1 + tee_local $push6=, $0=, $pop7 + i32.store sG($pop2), $pop6 + i32.const $push5=, 25 + i32.shr_u $push4=, $0, $pop5 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end41: + .size fn3G, .Lfunc_end41-fn3G + # -- End function + .section .text.testG,"ax",@progbits + .hidden testG # -- Begin function testG + .globl testG + .type testG,@function +testG: # @testG + .local i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push181=, 0 + i32.const $push180=, 0 + i32.load $push0=, myrnd.s($pop180) + i32.const $push179=, 1103515245 + i32.mul $push1=, $pop0, $pop179 + i32.const $push178=, 12345 + i32.add $push177=, $pop1, $pop178 + tee_local $push176=, $1=, $pop177 + i32.const $push175=, 16 + i32.shr_u $push2=, $pop176, $pop175 + i32.store8 sG($pop181), $pop2 + i32.const $push174=, 0 + i32.const $push173=, 1103515245 + i32.mul $push3=, $1, $pop173 + i32.const $push172=, 12345 + i32.add $push171=, $pop3, $pop172 + tee_local $push170=, $1=, $pop171 + i32.const $push169=, 16 + i32.shr_u $push4=, $pop170, $pop169 + i32.store8 sG+1($pop174), $pop4 + i32.const $push168=, 0 + i32.const $push167=, 1103515245 + i32.mul $push5=, $1, $pop167 + i32.const $push166=, 12345 + i32.add $push165=, $pop5, $pop166 + tee_local $push164=, $1=, $pop165 + i32.const $push163=, 16 + i32.shr_u $push6=, $pop164, $pop163 + i32.store8 sG+2($pop168), $pop6 + i32.const $push162=, 0 + i32.const $push161=, 1103515245 + i32.mul $push7=, $1, $pop161 + i32.const $push160=, 12345 + i32.add $push159=, $pop7, $pop160 + tee_local $push158=, $1=, $pop159 + i32.const $push157=, 16 + i32.shr_u $push8=, $pop158, $pop157 + i32.store8 sG+3($pop162), $pop8 + i32.const $push156=, 0 + i32.const $push155=, 1103515245 + i32.mul $push9=, $1, $pop155 + i32.const $push154=, 12345 + i32.add $push153=, $pop9, $pop154 + tee_local $push152=, $1=, $pop153 + i32.const $push151=, 16 + i32.shr_u $push10=, $pop152, $pop151 + i32.store8 sG+4($pop156), $pop10 + i32.const $push150=, 0 + i32.const $push149=, 1103515245 + i32.mul $push11=, $1, $pop149 + i32.const $push148=, 12345 + i32.add $push147=, $pop11, $pop148 + tee_local $push146=, $1=, $pop147 + i32.const $push145=, 16 + i32.shr_u $push12=, $pop146, $pop145 + i32.store8 sG+5($pop150), $pop12 + i32.const $push144=, 0 + i32.const $push143=, 1103515245 + i32.mul $push13=, $1, $pop143 + i32.const $push142=, 12345 + i32.add $push141=, $pop13, $pop142 + tee_local $push140=, $1=, $pop141 + i32.const $push139=, 16 + i32.shr_u $push14=, $pop140, $pop139 + i32.store8 sG+6($pop144), $pop14 + i32.const $push138=, 0 + i32.const $push137=, 1103515245 + i32.mul $push15=, $1, $pop137 + i32.const $push136=, 12345 + i32.add $push135=, $pop15, $pop136 + tee_local $push134=, $1=, $pop135 + i32.const $push133=, 16 + i32.shr_u $push16=, $pop134, $pop133 + i32.store8 sG+7($pop138), $pop16 + i32.const $push132=, 0 + i32.const $push131=, 1103515245 + i32.mul $push17=, $1, $pop131 + i32.const $push130=, 12345 + i32.add $push129=, $pop17, $pop130 + tee_local $push128=, $1=, $pop129 + i32.const $push127=, 16 + i32.shr_u $push18=, $pop128, $pop127 + i32.store8 sG+8($pop132), $pop18 + i32.const $push126=, 0 + i32.const $push125=, 1103515245 + i32.mul $push19=, $1, $pop125 + i32.const $push124=, 12345 + i32.add $push123=, $pop19, $pop124 + tee_local $push122=, $1=, $pop123 + i32.const $push121=, 16 + i32.shr_u $push20=, $pop122, $pop121 + i32.store8 sG+9($pop126), $pop20 + i32.const $push120=, 0 + i32.const $push119=, 1103515245 + i32.mul $push21=, $1, $pop119 + i32.const $push118=, 12345 + i32.add $push117=, $pop21, $pop118 + tee_local $push116=, $1=, $pop117 + i32.const $push115=, 16 + i32.shr_u $push22=, $pop116, $pop115 + i32.store8 sG+10($pop120), $pop22 + i32.const $push114=, 0 + i32.const $push113=, 1103515245 + i32.mul $push23=, $1, $pop113 + i32.const $push112=, 12345 + i32.add $push111=, $pop23, $pop112 + tee_local $push110=, $1=, $pop111 + i32.const $push109=, 16 + i32.shr_u $push24=, $pop110, $pop109 + i32.store8 sG+11($pop114), $pop24 + i32.const $push108=, 0 + i32.const $push107=, 1103515245 + i32.mul $push25=, $1, $pop107 + i32.const $push106=, 12345 + i32.add $push105=, $pop25, $pop106 + tee_local $push104=, $1=, $pop105 + i32.const $push103=, 16 + i32.shr_u $push26=, $pop104, $pop103 + i32.store8 sG+12($pop108), $pop26 + i32.const $push102=, 0 + i32.const $push101=, 1103515245 + i32.mul $push27=, $1, $pop101 + i32.const $push100=, 12345 + i32.add $push99=, $pop27, $pop100 + tee_local $push98=, $1=, $pop99 + i32.const $push97=, 16 + i32.shr_u $push28=, $pop98, $pop97 + i32.store8 sG+13($pop102), $pop28 + i32.const $push96=, 0 + i32.const $push95=, 1103515245 + i32.mul $push29=, $1, $pop95 + i32.const $push94=, 12345 + i32.add $push93=, $pop29, $pop94 + tee_local $push92=, $1=, $pop93 + i32.const $push91=, 16 + i32.shr_u $push30=, $pop92, $pop91 + i32.store8 sG+14($pop96), $pop30 + i32.const $push90=, 0 + i32.const $push89=, 1103515245 + i32.mul $push31=, $1, $pop89 + i32.const $push88=, 12345 + i32.add $push87=, $pop31, $pop88 + tee_local $push86=, $1=, $pop87 + i32.const $push85=, 16 + i32.shr_u $push32=, $pop86, $pop85 + i32.store8 sG+15($pop90), $pop32 + i32.const $push84=, 0 + i32.const $push83=, 1103515245 + i32.mul $push33=, $1, $pop83 + i32.const $push82=, 12345 + i32.add $push81=, $pop33, $pop82 + tee_local $push80=, $3=, $pop81 + i32.const $push79=, 1103515245 + i32.mul $push34=, $pop80, $pop79 + i32.const $push78=, 12345 + i32.add $push77=, $pop34, $pop78 + tee_local $push76=, $1=, $pop77 + i32.store myrnd.s($pop84), $pop76 + i32.const $push75=, 0 + i32.const $push74=, 16 + i32.shr_u $push73=, $3, $pop74 + tee_local $push72=, $3=, $pop73 + i32.const $push71=, 25 + i32.shl $push35=, $pop72, $pop71 + i32.const $push70=, 0 + i32.load $push69=, sG($pop70) + tee_local $push68=, $0=, $pop69 + i32.const $push67=, 33554431 + i32.and $push66=, $pop68, $pop67 + tee_local $push65=, $2=, $pop66 + i32.or $push64=, $pop35, $pop65 + tee_local $push63=, $4=, $pop64 + i32.store sG($pop75), $pop63 + block + i32.const $push62=, 16 + i32.shr_u $push61=, $1, $pop62 + tee_local $push60=, $5=, $pop61 + i32.add $push36=, $pop60, $3 + i32.const $push37=, 127 + i32.and $push38=, $pop36, $pop37 + i32.const $push59=, 25 + i32.shl $push39=, $5, $pop59 + i32.add $push40=, $pop39, $4 + i32.const $push58=, 25 + i32.shr_u $push41=, $pop40, $pop58 + i32.ne $push42=, $pop38, $pop41 + br_if 0, $pop42 # 0: down to label3 +# BB#1: # %if.end76 + i32.const $push200=, 0 + i32.const $push43=, -2139243339 + i32.mul $push44=, $1, $pop43 + i32.const $push45=, -1492899873 + i32.add $push199=, $pop44, $pop45 + tee_local $push198=, $1=, $pop199 + i32.const $push197=, 1103515245 + i32.mul $push46=, $pop198, $pop197 + i32.const $push196=, 12345 + i32.add $push195=, $pop46, $pop196 + tee_local $push194=, $3=, $pop195 + i32.store myrnd.s($pop200), $pop194 + i32.const $push193=, 0 + i32.const $push192=, 16 + i32.shr_u $push191=, $3, $pop192 + tee_local $push190=, $3=, $pop191 + i32.const $push189=, 25 + i32.shl $push49=, $pop190, $pop189 + i32.const $push188=, 16 + i32.shr_u $push187=, $1, $pop188 + tee_local $push186=, $4=, $pop187 + i32.const $push185=, 25 + i32.shl $push47=, $pop186, $pop185 + i32.or $push48=, $pop47, $2 + i32.add $push184=, $pop49, $pop48 + tee_local $push183=, $1=, $pop184 + i32.store sG($pop193), $pop183 + i32.xor $push50=, $1, $0 + i32.const $push182=, 33554431 + i32.and $push51=, $pop50, $pop182 + br_if 0, $pop51 # 0: down to label3 +# BB#2: # %lor.lhs.false109 + i32.add $push54=, $3, $4 + i32.const $push55=, 127 + i32.and $push56=, $pop54, $pop55 + i32.const $push52=, 25 + i32.shr_u $push53=, $1, $pop52 + i32.ne $push57=, $pop56, $pop53 + br_if 0, $pop57 # 0: down to label3 +# BB#3: # %if.end115 + return +.LBB42_4: # %if.then + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end42: + .size testG, .Lfunc_end42-testG + # -- End function + .section .text.retmeH,"ax",@progbits + .hidden retmeH # -- Begin function retmeH + .globl retmeH + .type retmeH,@function +retmeH: # @retmeH + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 0($0), $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i64.load $push4=, 0($pop3) + i64.store 0($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end43: + .size retmeH, .Lfunc_end43-retmeH + # -- End function + .section .text.fn1H,"ax",@progbits + .hidden fn1H # -- Begin function fn1H + .globl fn1H + .type fn1H,@function +fn1H: # @fn1H + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.load $push3=, sH($pop2) + i32.const $push0=, 23 + i32.shl $push1=, $0, $pop0 + i32.add $push4=, $pop3, $pop1 + i32.const $push6=, 23 + i32.shr_u $push5=, $pop4, $pop6 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end44: + .size fn1H, .Lfunc_end44-fn1H + # -- End function + .section .text.fn2H,"ax",@progbits + .hidden fn2H # -- Begin function fn2H + .globl fn2H + .type fn2H,@function +fn2H: # @fn2H + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sH($pop0) + i32.const $push2=, 23 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 511 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 15 + i32.rem_u $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end45: + .size fn2H, .Lfunc_end45-fn2H + # -- End function + .section .text.retitH,"ax",@progbits + .hidden retitH # -- Begin function retitH + .globl retitH + .type retitH,@function +retitH: # @retitH + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sH($pop0) + i32.const $push2=, 23 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end46: + .size retitH, .Lfunc_end46-retitH + # -- End function + .section .text.fn3H,"ax",@progbits + .hidden fn3H # -- Begin function fn3H + .globl fn3H + .type fn3H,@function +fn3H: # @fn3H + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push8=, 0 + i32.load $push3=, sH($pop8) + i32.const $push0=, 23 + i32.shl $push1=, $0, $pop0 + i32.add $push7=, $pop3, $pop1 + tee_local $push6=, $0=, $pop7 + i32.store sH($pop2), $pop6 + i32.const $push5=, 23 + i32.shr_u $push4=, $0, $pop5 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end47: + .size fn3H, .Lfunc_end47-fn3H + # -- End function + .section .text.testH,"ax",@progbits + .hidden testH # -- Begin function testH + .globl testH + .type testH,@function +testH: # @testH + .local i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push181=, 0 + i32.const $push180=, 0 + i32.load $push0=, myrnd.s($pop180) + i32.const $push179=, 1103515245 + i32.mul $push1=, $pop0, $pop179 + i32.const $push178=, 12345 + i32.add $push177=, $pop1, $pop178 + tee_local $push176=, $1=, $pop177 + i32.const $push175=, 16 + i32.shr_u $push2=, $pop176, $pop175 + i32.store8 sH($pop181), $pop2 + i32.const $push174=, 0 + i32.const $push173=, 1103515245 + i32.mul $push3=, $1, $pop173 + i32.const $push172=, 12345 + i32.add $push171=, $pop3, $pop172 + tee_local $push170=, $1=, $pop171 + i32.const $push169=, 16 + i32.shr_u $push4=, $pop170, $pop169 + i32.store8 sH+1($pop174), $pop4 + i32.const $push168=, 0 + i32.const $push167=, 1103515245 + i32.mul $push5=, $1, $pop167 + i32.const $push166=, 12345 + i32.add $push165=, $pop5, $pop166 + tee_local $push164=, $1=, $pop165 + i32.const $push163=, 16 + i32.shr_u $push6=, $pop164, $pop163 + i32.store8 sH+2($pop168), $pop6 + i32.const $push162=, 0 + i32.const $push161=, 1103515245 + i32.mul $push7=, $1, $pop161 + i32.const $push160=, 12345 + i32.add $push159=, $pop7, $pop160 + tee_local $push158=, $1=, $pop159 + i32.const $push157=, 16 + i32.shr_u $push8=, $pop158, $pop157 + i32.store8 sH+3($pop162), $pop8 + i32.const $push156=, 0 + i32.const $push155=, 1103515245 + i32.mul $push9=, $1, $pop155 + i32.const $push154=, 12345 + i32.add $push153=, $pop9, $pop154 + tee_local $push152=, $1=, $pop153 + i32.const $push151=, 16 + i32.shr_u $push10=, $pop152, $pop151 + i32.store8 sH+4($pop156), $pop10 + i32.const $push150=, 0 + i32.const $push149=, 1103515245 + i32.mul $push11=, $1, $pop149 + i32.const $push148=, 12345 + i32.add $push147=, $pop11, $pop148 + tee_local $push146=, $1=, $pop147 + i32.const $push145=, 16 + i32.shr_u $push12=, $pop146, $pop145 + i32.store8 sH+5($pop150), $pop12 + i32.const $push144=, 0 + i32.const $push143=, 1103515245 + i32.mul $push13=, $1, $pop143 + i32.const $push142=, 12345 + i32.add $push141=, $pop13, $pop142 + tee_local $push140=, $1=, $pop141 + i32.const $push139=, 16 + i32.shr_u $push14=, $pop140, $pop139 + i32.store8 sH+6($pop144), $pop14 + i32.const $push138=, 0 + i32.const $push137=, 1103515245 + i32.mul $push15=, $1, $pop137 + i32.const $push136=, 12345 + i32.add $push135=, $pop15, $pop136 + tee_local $push134=, $1=, $pop135 + i32.const $push133=, 16 + i32.shr_u $push16=, $pop134, $pop133 + i32.store8 sH+7($pop138), $pop16 + i32.const $push132=, 0 + i32.const $push131=, 1103515245 + i32.mul $push17=, $1, $pop131 + i32.const $push130=, 12345 + i32.add $push129=, $pop17, $pop130 + tee_local $push128=, $1=, $pop129 + i32.const $push127=, 16 + i32.shr_u $push18=, $pop128, $pop127 + i32.store8 sH+8($pop132), $pop18 + i32.const $push126=, 0 + i32.const $push125=, 1103515245 + i32.mul $push19=, $1, $pop125 + i32.const $push124=, 12345 + i32.add $push123=, $pop19, $pop124 + tee_local $push122=, $1=, $pop123 + i32.const $push121=, 16 + i32.shr_u $push20=, $pop122, $pop121 + i32.store8 sH+9($pop126), $pop20 + i32.const $push120=, 0 + i32.const $push119=, 1103515245 + i32.mul $push21=, $1, $pop119 + i32.const $push118=, 12345 + i32.add $push117=, $pop21, $pop118 + tee_local $push116=, $1=, $pop117 + i32.const $push115=, 16 + i32.shr_u $push22=, $pop116, $pop115 + i32.store8 sH+10($pop120), $pop22 + i32.const $push114=, 0 + i32.const $push113=, 1103515245 + i32.mul $push23=, $1, $pop113 + i32.const $push112=, 12345 + i32.add $push111=, $pop23, $pop112 + tee_local $push110=, $1=, $pop111 + i32.const $push109=, 16 + i32.shr_u $push24=, $pop110, $pop109 + i32.store8 sH+11($pop114), $pop24 + i32.const $push108=, 0 + i32.const $push107=, 1103515245 + i32.mul $push25=, $1, $pop107 + i32.const $push106=, 12345 + i32.add $push105=, $pop25, $pop106 + tee_local $push104=, $1=, $pop105 + i32.const $push103=, 16 + i32.shr_u $push26=, $pop104, $pop103 + i32.store8 sH+12($pop108), $pop26 + i32.const $push102=, 0 + i32.const $push101=, 1103515245 + i32.mul $push27=, $1, $pop101 + i32.const $push100=, 12345 + i32.add $push99=, $pop27, $pop100 + tee_local $push98=, $1=, $pop99 + i32.const $push97=, 16 + i32.shr_u $push28=, $pop98, $pop97 + i32.store8 sH+13($pop102), $pop28 + i32.const $push96=, 0 + i32.const $push95=, 1103515245 + i32.mul $push29=, $1, $pop95 + i32.const $push94=, 12345 + i32.add $push93=, $pop29, $pop94 + tee_local $push92=, $1=, $pop93 + i32.const $push91=, 16 + i32.shr_u $push30=, $pop92, $pop91 + i32.store8 sH+14($pop96), $pop30 + i32.const $push90=, 0 + i32.const $push89=, 1103515245 + i32.mul $push31=, $1, $pop89 + i32.const $push88=, 12345 + i32.add $push87=, $pop31, $pop88 + tee_local $push86=, $1=, $pop87 + i32.const $push85=, 16 + i32.shr_u $push32=, $pop86, $pop85 + i32.store8 sH+15($pop90), $pop32 + i32.const $push84=, 0 + i32.const $push83=, 1103515245 + i32.mul $push33=, $1, $pop83 + i32.const $push82=, 12345 + i32.add $push81=, $pop33, $pop82 + tee_local $push80=, $3=, $pop81 + i32.const $push79=, 1103515245 + i32.mul $push34=, $pop80, $pop79 + i32.const $push78=, 12345 + i32.add $push77=, $pop34, $pop78 + tee_local $push76=, $1=, $pop77 + i32.store myrnd.s($pop84), $pop76 + i32.const $push75=, 0 + i32.const $push74=, 16 + i32.shr_u $push73=, $3, $pop74 + tee_local $push72=, $3=, $pop73 + i32.const $push71=, 23 + i32.shl $push35=, $pop72, $pop71 + i32.const $push70=, 0 + i32.load $push69=, sH($pop70) + tee_local $push68=, $0=, $pop69 + i32.const $push67=, 8388607 + i32.and $push66=, $pop68, $pop67 + tee_local $push65=, $2=, $pop66 + i32.or $push64=, $pop35, $pop65 + tee_local $push63=, $4=, $pop64 + i32.store sH($pop75), $pop63 + block + i32.const $push62=, 16 + i32.shr_u $push61=, $1, $pop62 + tee_local $push60=, $5=, $pop61 + i32.add $push36=, $pop60, $3 + i32.const $push37=, 511 + i32.and $push38=, $pop36, $pop37 + i32.const $push59=, 23 + i32.shl $push39=, $5, $pop59 + i32.add $push40=, $pop39, $4 + i32.const $push58=, 23 + i32.shr_u $push41=, $pop40, $pop58 + i32.ne $push42=, $pop38, $pop41 + br_if 0, $pop42 # 0: down to label4 +# BB#1: # %if.end76 + i32.const $push200=, 0 + i32.const $push43=, -2139243339 + i32.mul $push44=, $1, $pop43 + i32.const $push45=, -1492899873 + i32.add $push199=, $pop44, $pop45 + tee_local $push198=, $1=, $pop199 + i32.const $push197=, 1103515245 + i32.mul $push46=, $pop198, $pop197 + i32.const $push196=, 12345 + i32.add $push195=, $pop46, $pop196 + tee_local $push194=, $3=, $pop195 + i32.store myrnd.s($pop200), $pop194 + i32.const $push193=, 0 + i32.const $push192=, 16 + i32.shr_u $push191=, $3, $pop192 + tee_local $push190=, $3=, $pop191 + i32.const $push189=, 23 + i32.shl $push49=, $pop190, $pop189 + i32.const $push188=, 16 + i32.shr_u $push187=, $1, $pop188 + tee_local $push186=, $4=, $pop187 + i32.const $push185=, 23 + i32.shl $push47=, $pop186, $pop185 + i32.or $push48=, $pop47, $2 + i32.add $push184=, $pop49, $pop48 + tee_local $push183=, $1=, $pop184 + i32.store sH($pop193), $pop183 + i32.xor $push50=, $1, $0 + i32.const $push182=, 8388607 + i32.and $push51=, $pop50, $pop182 + br_if 0, $pop51 # 0: down to label4 +# BB#2: # %lor.lhs.false109 + i32.add $push54=, $3, $4 + i32.const $push55=, 511 + i32.and $push56=, $pop54, $pop55 + i32.const $push52=, 23 + i32.shr_u $push53=, $1, $pop52 + i32.ne $push57=, $pop56, $pop53 + br_if 0, $pop57 # 0: down to label4 +# BB#3: # %if.end115 + return +.LBB48_4: # %if.then + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end48: + .size testH, .Lfunc_end48-testH + # -- End function + .section .text.retmeI,"ax",@progbits + .hidden retmeI # -- Begin function retmeI + .globl retmeI + .type retmeI,@function +retmeI: # @retmeI + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 0($0), $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i64.load $push4=, 0($pop3) + i64.store 0($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end49: + .size retmeI, .Lfunc_end49-retmeI + # -- End function + .section .text.fn1I,"ax",@progbits + .hidden fn1I # -- Begin function fn1I + .globl fn1I + .type fn1I,@function +fn1I: # @fn1I + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sI($pop0) + i32.const $push2=, 7 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 511 + i32.and $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end50: + .size fn1I, .Lfunc_end50-fn1I + # -- End function + .section .text.fn2I,"ax",@progbits + .hidden fn2I # -- Begin function fn2I + .globl fn2I + .type fn2I,@function +fn2I: # @fn2I + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sI($pop0) + i32.const $push2=, 7 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 511 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 15 + i32.rem_u $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end51: + .size fn2I, .Lfunc_end51-fn2I + # -- End function + .section .text.retitI,"ax",@progbits + .hidden retitI # -- Begin function retitI + .globl retitI + .type retitI,@function +retitI: # @retitI + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sI($pop0) + i32.const $push2=, 7 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end52: + .size retitI, .Lfunc_end52-retitI + # -- End function + .section .text.fn3I,"ax",@progbits + .hidden fn3I # -- Begin function fn3I + .globl fn3I + .type fn3I,@function +fn3I: # @fn3I + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push14=, 0 + i32.load16_u $push13=, sI($pop14) + tee_local $push12=, $1=, $pop13 + i32.const $push3=, 7 + i32.shr_u $push4=, $pop12, $pop3 + i32.add $push11=, $pop4, $0 + tee_local $push10=, $0=, $pop11 + i32.const $push9=, 7 + i32.shl $push5=, $pop10, $pop9 + i32.const $push1=, 127 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store16 sI($pop0), $pop6 + i32.const $push7=, 511 + i32.and $push8=, $0, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end53: + .size fn3I, .Lfunc_end53-fn3I + # -- End function + .section .text.testI,"ax",@progbits + .hidden testI # -- Begin function testI + .globl testI + .type testI,@function +testI: # @testI + .local i32, i32, i32 +# BB#0: # %lor.lhs.false130 + i32.const $push0=, 0 + i32.const $push164=, 0 + i32.load $push1=, myrnd.s($pop164) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push163=, $pop3, $pop4 + tee_local $push162=, $0=, $pop163 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop162, $pop5 + i32.store8 sI($pop0), $pop6 + i32.const $push161=, 0 + i32.const $push160=, 1103515245 + i32.mul $push7=, $0, $pop160 + i32.const $push159=, 12345 + i32.add $push158=, $pop7, $pop159 + tee_local $push157=, $0=, $pop158 + i32.const $push156=, 16 + i32.shr_u $push8=, $pop157, $pop156 + i32.store8 sI+1($pop161), $pop8 + i32.const $push155=, 0 + i32.const $push154=, 1103515245 + i32.mul $push9=, $0, $pop154 + i32.const $push153=, 12345 + i32.add $push152=, $pop9, $pop153 + tee_local $push151=, $0=, $pop152 + i32.const $push150=, 16 + i32.shr_u $push10=, $pop151, $pop150 + i32.store8 sI+2($pop155), $pop10 + i32.const $push149=, 0 + i32.const $push148=, 1103515245 + i32.mul $push11=, $0, $pop148 + i32.const $push147=, 12345 + i32.add $push146=, $pop11, $pop147 + tee_local $push145=, $0=, $pop146 + i32.const $push144=, 16 + i32.shr_u $push12=, $pop145, $pop144 + i32.store8 sI+3($pop149), $pop12 + i32.const $push143=, 0 + i32.const $push142=, 1103515245 + i32.mul $push13=, $0, $pop142 + i32.const $push141=, 12345 + i32.add $push140=, $pop13, $pop141 + tee_local $push139=, $0=, $pop140 + i32.const $push138=, 16 + i32.shr_u $push14=, $pop139, $pop138 + i32.store8 sI+4($pop143), $pop14 + i32.const $push137=, 0 + i32.const $push136=, 1103515245 + i32.mul $push15=, $0, $pop136 + i32.const $push135=, 12345 + i32.add $push134=, $pop15, $pop135 + tee_local $push133=, $0=, $pop134 + i32.const $push132=, 16 + i32.shr_u $push16=, $pop133, $pop132 + i32.store8 sI+5($pop137), $pop16 + i32.const $push131=, 0 + i32.const $push130=, 1103515245 + i32.mul $push17=, $0, $pop130 + i32.const $push129=, 12345 + i32.add $push128=, $pop17, $pop129 + tee_local $push127=, $0=, $pop128 + i32.const $push126=, 16 + i32.shr_u $push18=, $pop127, $pop126 + i32.store8 sI+6($pop131), $pop18 + i32.const $push125=, 0 + i32.const $push124=, 1103515245 + i32.mul $push19=, $0, $pop124 + i32.const $push123=, 12345 + i32.add $push122=, $pop19, $pop123 + tee_local $push121=, $0=, $pop122 + i32.const $push120=, 16 + i32.shr_u $push20=, $pop121, $pop120 + i32.store8 sI+7($pop125), $pop20 + i32.const $push119=, 0 + i32.const $push118=, 1103515245 + i32.mul $push21=, $0, $pop118 + i32.const $push117=, 12345 + i32.add $push116=, $pop21, $pop117 + tee_local $push115=, $0=, $pop116 + i32.const $push114=, 16 + i32.shr_u $push22=, $pop115, $pop114 + i32.store8 sI+8($pop119), $pop22 + i32.const $push113=, 0 + i32.const $push112=, 1103515245 + i32.mul $push23=, $0, $pop112 + i32.const $push111=, 12345 + i32.add $push110=, $pop23, $pop111 + tee_local $push109=, $0=, $pop110 + i32.const $push108=, 16 + i32.shr_u $push24=, $pop109, $pop108 + i32.store8 sI+9($pop113), $pop24 + i32.const $push107=, 0 + i32.const $push106=, 1103515245 + i32.mul $push25=, $0, $pop106 + i32.const $push105=, 12345 + i32.add $push104=, $pop25, $pop105 + tee_local $push103=, $0=, $pop104 + i32.const $push102=, 16 + i32.shr_u $push26=, $pop103, $pop102 + i32.store8 sI+10($pop107), $pop26 + i32.const $push101=, 0 + i32.const $push100=, 1103515245 + i32.mul $push27=, $0, $pop100 + i32.const $push99=, 12345 + i32.add $push98=, $pop27, $pop99 + tee_local $push97=, $0=, $pop98 + i32.const $push96=, 16 + i32.shr_u $push28=, $pop97, $pop96 + i32.store8 sI+11($pop101), $pop28 + i32.const $push95=, 0 + i32.const $push94=, 1103515245 + i32.mul $push29=, $0, $pop94 + i32.const $push93=, 12345 + i32.add $push92=, $pop29, $pop93 + tee_local $push91=, $0=, $pop92 + i32.const $push90=, 16 + i32.shr_u $push30=, $pop91, $pop90 + i32.store8 sI+12($pop95), $pop30 + i32.const $push89=, 0 + i32.const $push88=, 1103515245 + i32.mul $push31=, $0, $pop88 + i32.const $push87=, 12345 + i32.add $push86=, $pop31, $pop87 + tee_local $push85=, $0=, $pop86 + i32.const $push84=, 16 + i32.shr_u $push32=, $pop85, $pop84 + i32.store8 sI+13($pop89), $pop32 + i32.const $push83=, 0 + i32.const $push82=, 1103515245 + i32.mul $push33=, $0, $pop82 + i32.const $push81=, 12345 + i32.add $push80=, $pop33, $pop81 + tee_local $push79=, $0=, $pop80 + i32.const $push78=, 16 + i32.shr_u $push34=, $pop79, $pop78 + i32.store8 sI+14($pop83), $pop34 + i32.const $push77=, 0 + i32.const $push76=, 1103515245 + i32.mul $push35=, $0, $pop76 + i32.const $push75=, 12345 + i32.add $push74=, $pop35, $pop75 + tee_local $push73=, $0=, $pop74 + i32.const $push72=, 16 + i32.shr_u $push36=, $pop73, $pop72 + i32.store8 sI+15($pop77), $pop36 + i32.const $push71=, 0 + i32.const $push37=, -341751747 + i32.mul $push38=, $0, $pop37 + i32.const $push39=, 229283573 + i32.add $push70=, $pop38, $pop39 + tee_local $push69=, $0=, $pop70 + i32.const $push68=, 1103515245 + i32.mul $push40=, $pop69, $pop68 + i32.const $push67=, 12345 + i32.add $push66=, $pop40, $pop67 + tee_local $push65=, $1=, $pop66 + i32.store myrnd.s($pop71), $pop65 + i32.const $push64=, 0 + i32.const $push63=, 16 + i32.shr_u $push62=, $1, $pop63 + tee_local $push61=, $1=, $pop62 + i32.const $push43=, 2047 + i32.and $push44=, $pop61, $pop43 + i32.const $push60=, 16 + i32.shr_u $push59=, $0, $pop60 + tee_local $push58=, $0=, $pop59 + i32.const $push41=, 511 + i32.and $push42=, $pop58, $pop41 + i32.add $push57=, $pop44, $pop42 + tee_local $push56=, $2=, $pop57 + i32.const $push45=, 7 + i32.shl $push46=, $pop56, $pop45 + i32.const $push55=, 0 + i32.load16_u $push47=, sI($pop55) + i32.const $push48=, 127 + i32.and $push49=, $pop47, $pop48 + i32.or $push50=, $pop46, $pop49 + i32.store16 sI($pop64), $pop50 + block + i32.add $push51=, $1, $0 + i32.xor $push52=, $pop51, $2 + i32.const $push54=, 511 + i32.and $push53=, $pop52, $pop54 + br_if 0, $pop53 # 0: down to label5 +# BB#1: # %if.end136 + return +.LBB54_2: # %if.then135 + end_block # label5: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end54: + .size testI, .Lfunc_end54-testI + # -- End function + .section .text.retmeJ,"ax",@progbits + .hidden retmeJ # -- Begin function retmeJ + .globl retmeJ + .type retmeJ,@function +retmeJ: # @retmeJ + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1):p2align=1 + i32.store 0($0):p2align=1, $pop0 + # fallthrough-return + .endfunc +.Lfunc_end55: + .size retmeJ, .Lfunc_end55-retmeJ + # -- End function + .section .text.fn1J,"ax",@progbits + .hidden fn1J # -- Begin function fn1J + .globl fn1J + .type fn1J,@function +fn1J: # @fn1J + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sJ($pop0) + i32.const $push2=, 9 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 127 + i32.and $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end56: + .size fn1J, .Lfunc_end56-fn1J + # -- End function + .section .text.fn2J,"ax",@progbits + .hidden fn2J # -- Begin function fn2J + .globl fn2J + .type fn2J,@function +fn2J: # @fn2J + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sJ($pop0) + i32.const $push2=, 9 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 127 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 15 + i32.rem_u $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end57: + .size fn2J, .Lfunc_end57-fn2J + # -- End function + .section .text.retitJ,"ax",@progbits + .hidden retitJ # -- Begin function retitJ + .globl retitJ + .type retitJ,@function +retitJ: # @retitJ + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sJ($pop0) + i32.const $push2=, 9 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end58: + .size retitJ, .Lfunc_end58-retitJ + # -- End function + .section .text.fn3J,"ax",@progbits + .hidden fn3J # -- Begin function fn3J + .globl fn3J + .type fn3J,@function +fn3J: # @fn3J + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push14=, 0 + i32.load16_u $push13=, sJ($pop14) + tee_local $push12=, $1=, $pop13 + i32.const $push3=, 9 + i32.shr_u $push4=, $pop12, $pop3 + i32.add $push11=, $pop4, $0 + tee_local $push10=, $0=, $pop11 + i32.const $push9=, 9 + i32.shl $push5=, $pop10, $pop9 + i32.const $push1=, 511 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store16 sJ($pop0), $pop6 + i32.const $push7=, 127 + i32.and $push8=, $0, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end59: + .size fn3J, .Lfunc_end59-fn3J + # -- End function + .section .text.testJ,"ax",@progbits + .hidden testJ # -- Begin function testJ + .globl testJ + .type testJ,@function +testJ: # @testJ + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push80=, 0 + i32.const $push79=, 0 + i32.load $push0=, myrnd.s($pop79) + i32.const $push78=, 1103515245 + i32.mul $push1=, $pop0, $pop78 + i32.const $push77=, 12345 + i32.add $push76=, $pop1, $pop77 + tee_local $push75=, $0=, $pop76 + i32.const $push74=, 16 + i32.shr_u $push2=, $pop75, $pop74 + i32.store8 sJ($pop80), $pop2 + i32.const $push73=, 0 + i32.const $push72=, 1103515245 + i32.mul $push3=, $0, $pop72 + i32.const $push71=, 12345 + i32.add $push70=, $pop3, $pop71 + tee_local $push69=, $0=, $pop70 + i32.const $push68=, 16 + i32.shr_u $push4=, $pop69, $pop68 + i32.store8 sJ+1($pop73), $pop4 + i32.const $push67=, 0 + i32.const $push66=, 1103515245 + i32.mul $push5=, $0, $pop66 + i32.const $push65=, 12345 + i32.add $push64=, $pop5, $pop65 + tee_local $push63=, $0=, $pop64 + i32.const $push62=, 16 + i32.shr_u $push6=, $pop63, $pop62 + i32.store8 sJ+2($pop67), $pop6 + i32.const $push61=, 0 + i32.const $push60=, 1103515245 + i32.mul $push7=, $0, $pop60 + i32.const $push59=, 12345 + i32.add $push58=, $pop7, $pop59 + tee_local $push57=, $0=, $pop58 + i32.const $push56=, 16 + i32.shr_u $push8=, $pop57, $pop56 + i32.store8 sJ+3($pop61), $pop8 + i32.const $push55=, 0 + i32.const $push54=, 0 + i32.load16_u $push9=, sJ($pop54) + i32.const $push10=, 511 + i32.and $push53=, $pop9, $pop10 + tee_local $push52=, $1=, $pop53 + i32.const $push51=, 1103515245 + i32.mul $push11=, $0, $pop51 + i32.const $push50=, 12345 + i32.add $push49=, $pop11, $pop50 + tee_local $push48=, $0=, $pop49 + i32.const $push47=, 16 + i32.shr_u $push46=, $pop48, $pop47 + tee_local $push45=, $2=, $pop46 + i32.const $push44=, 9 + i32.shl $push12=, $pop45, $pop44 + i32.or $push13=, $pop52, $pop12 + i32.store16 sJ($pop55), $pop13 + i32.const $push43=, 0 + i32.const $push42=, 1103515245 + i32.mul $push14=, $0, $pop42 + i32.const $push41=, 12345 + i32.add $push40=, $pop14, $pop41 + tee_local $push39=, $0=, $pop40 + i32.store myrnd.s($pop43), $pop39 + block + i32.const $push38=, 16 + i32.shr_u $push37=, $0, $pop38 + tee_local $push36=, $3=, $pop37 + i32.add $push15=, $pop36, $2 + i32.const $push35=, 0 + i32.load $push16=, sJ($pop35) + i32.const $push34=, 9 + i32.shr_u $push17=, $pop16, $pop34 + i32.add $push18=, $3, $pop17 + i32.xor $push19=, $pop15, $pop18 + i32.const $push33=, 127 + i32.and $push20=, $pop19, $pop33 + br_if 0, $pop20 # 0: down to label6 +# BB#1: # %lor.lhs.false136 + i32.const $push99=, 0 + i32.const $push21=, -2139243339 + i32.mul $push22=, $0, $pop21 + i32.const $push23=, -1492899873 + i32.add $push98=, $pop22, $pop23 + tee_local $push97=, $0=, $pop98 + i32.const $push96=, 1103515245 + i32.mul $push24=, $pop97, $pop96 + i32.const $push95=, 12345 + i32.add $push94=, $pop24, $pop95 + tee_local $push93=, $2=, $pop94 + i32.store myrnd.s($pop99), $pop93 + i32.const $push92=, 0 + i32.const $push91=, 16 + i32.shr_u $push90=, $2, $pop91 + tee_local $push89=, $2=, $pop90 + i32.const $push26=, 2047 + i32.and $push27=, $pop89, $pop26 + i32.const $push88=, 16 + i32.shr_u $push87=, $0, $pop88 + tee_local $push86=, $0=, $pop87 + i32.const $push85=, 127 + i32.and $push25=, $pop86, $pop85 + i32.add $push84=, $pop27, $pop25 + tee_local $push83=, $3=, $pop84 + i32.const $push82=, 9 + i32.shl $push28=, $pop83, $pop82 + i32.or $push29=, $pop28, $1 + i32.store16 sJ($pop92), $pop29 + i32.add $push30=, $2, $0 + i32.xor $push31=, $pop30, $3 + i32.const $push81=, 127 + i32.and $push32=, $pop31, $pop81 + br_if 0, $pop32 # 0: down to label6 +# BB#2: # %if.end142 + return +.LBB60_3: # %if.then + end_block # label6: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end60: + .size testJ, .Lfunc_end60-testJ + # -- End function + .section .text.retmeK,"ax",@progbits + .hidden retmeK # -- Begin function retmeK + .globl retmeK + .type retmeK,@function +retmeK: # @retmeK + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end61: + .size retmeK, .Lfunc_end61-retmeK + # -- End function + .section .text.fn1K,"ax",@progbits + .hidden fn1K # -- Begin function fn1K + .globl fn1K + .type fn1K,@function +fn1K: # @fn1K + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sK($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 63 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end62: + .size fn1K, .Lfunc_end62-fn1K + # -- End function + .section .text.fn2K,"ax",@progbits + .hidden fn2K # -- Begin function fn2K + .globl fn2K + .type fn2K,@function +fn2K: # @fn2K + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sK($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 63 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end63: + .size fn2K, .Lfunc_end63-fn2K + # -- End function + .section .text.retitK,"ax",@progbits + .hidden retitK # -- Begin function retitK + .globl retitK + .type retitK,@function +retitK: # @retitK + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sK($pop0) + i32.const $push2=, 63 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end64: + .size retitK, .Lfunc_end64-retitK + # -- End function + .section .text.fn3K,"ax",@progbits + .hidden fn3K # -- Begin function fn3K + .globl fn3K + .type fn3K,@function +fn3K: # @fn3K + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, sK($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 63 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store sK($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end65: + .size fn3K, .Lfunc_end65-fn3K + # -- End function + .section .text.testK,"ax",@progbits + .hidden testK # -- Begin function testK + .globl testK + .type testK,@function +testK: # @testK + .local i32, i32 +# BB#0: # %if.end129 + i32.const $push0=, 0 + i32.const $push57=, 0 + i32.load $push1=, myrnd.s($pop57) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push56=, $pop3, $pop4 + tee_local $push55=, $0=, $pop56 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop55, $pop5 + i32.store8 sK($pop0), $pop6 + i32.const $push54=, 0 + i32.const $push53=, 1103515245 + i32.mul $push7=, $0, $pop53 + i32.const $push52=, 12345 + i32.add $push51=, $pop7, $pop52 + tee_local $push50=, $0=, $pop51 + i32.const $push49=, 16 + i32.shr_u $push8=, $pop50, $pop49 + i32.store8 sK+1($pop54), $pop8 + i32.const $push48=, 0 + i32.const $push47=, 1103515245 + i32.mul $push9=, $0, $pop47 + i32.const $push46=, 12345 + i32.add $push45=, $pop9, $pop46 + tee_local $push44=, $0=, $pop45 + i32.const $push43=, 16 + i32.shr_u $push10=, $pop44, $pop43 + i32.store8 sK+2($pop48), $pop10 + i32.const $push42=, 0 + i32.const $push41=, 1103515245 + i32.mul $push11=, $0, $pop41 + i32.const $push40=, 12345 + i32.add $push39=, $pop11, $pop40 + tee_local $push38=, $0=, $pop39 + i32.const $push37=, 16 + i32.shr_u $push12=, $pop38, $pop37 + i32.store8 sK+3($pop42), $pop12 + i32.const $push36=, 0 + i32.const $push13=, -341751747 + i32.mul $push14=, $0, $pop13 + i32.const $push15=, 229283573 + i32.add $push35=, $pop14, $pop15 + tee_local $push34=, $0=, $pop35 + i32.const $push33=, 1103515245 + i32.mul $push16=, $pop34, $pop33 + i32.const $push32=, 12345 + i32.add $push31=, $pop16, $pop32 + tee_local $push30=, $1=, $pop31 + i32.store myrnd.s($pop36), $pop30 + i32.const $push29=, 0 + i32.const $push28=, 16 + i32.shr_u $push18=, $1, $pop28 + i32.const $push27=, 16 + i32.shr_u $push17=, $0, $pop27 + i32.add $push19=, $pop18, $pop17 + i32.const $push20=, 63 + i32.and $push21=, $pop19, $pop20 + i32.const $push26=, 0 + i32.load $push22=, sK($pop26) + i32.const $push23=, -64 + i32.and $push24=, $pop22, $pop23 + i32.or $push25=, $pop21, $pop24 + i32.store sK($pop29), $pop25 + # fallthrough-return + .endfunc +.Lfunc_end66: + .size testK, .Lfunc_end66-testK + # -- End function + .section .text.retmeL,"ax",@progbits + .hidden retmeL # -- Begin function retmeL + .globl retmeL + .type retmeL,@function +retmeL: # @retmeL + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=2 + i64.store 0($0):p2align=2, $pop0 + # fallthrough-return + .endfunc +.Lfunc_end67: + .size retmeL, .Lfunc_end67-retmeL + # -- End function + .section .text.fn1L,"ax",@progbits + .hidden fn1L # -- Begin function fn1L + .globl fn1L + .type fn1L,@function +fn1L: # @fn1L + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sL($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 63 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end68: + .size fn1L, .Lfunc_end68-fn1L + # -- End function + .section .text.fn2L,"ax",@progbits + .hidden fn2L # -- Begin function fn2L + .globl fn2L + .type fn2L,@function +fn2L: # @fn2L + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sL($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 63 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end69: + .size fn2L, .Lfunc_end69-fn2L + # -- End function + .section .text.retitL,"ax",@progbits + .hidden retitL # -- Begin function retitL + .globl retitL + .type retitL,@function +retitL: # @retitL + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sL($pop0) + i32.const $push2=, 63 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end70: + .size retitL, .Lfunc_end70-retitL + # -- End function + .section .text.fn3L,"ax",@progbits + .hidden fn3L # -- Begin function fn3L + .globl fn3L + .type fn3L,@function +fn3L: # @fn3L + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, sL($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 63 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store sL($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end71: + .size fn3L, .Lfunc_end71-fn3L + # -- End function + .section .text.testL,"ax",@progbits + .hidden testL # -- Begin function testL + .globl testL + .type testL,@function +testL: # @testL + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push106=, 0 + i32.const $push105=, 0 + i32.load $push0=, myrnd.s($pop105) + i32.const $push104=, 1103515245 + i32.mul $push1=, $pop0, $pop104 + i32.const $push103=, 12345 + i32.add $push102=, $pop1, $pop103 + tee_local $push101=, $0=, $pop102 + i32.const $push100=, 16 + i32.shr_u $push2=, $pop101, $pop100 + i32.store8 sL($pop106), $pop2 + i32.const $push99=, 0 + i32.const $push98=, 1103515245 + i32.mul $push3=, $0, $pop98 + i32.const $push97=, 12345 + i32.add $push96=, $pop3, $pop97 + tee_local $push95=, $0=, $pop96 + i32.const $push94=, 16 + i32.shr_u $push4=, $pop95, $pop94 + i32.store8 sL+1($pop99), $pop4 + i32.const $push93=, 0 + i32.const $push92=, 1103515245 + i32.mul $push5=, $0, $pop92 + i32.const $push91=, 12345 + i32.add $push90=, $pop5, $pop91 + tee_local $push89=, $0=, $pop90 + i32.const $push88=, 16 + i32.shr_u $push6=, $pop89, $pop88 + i32.store8 sL+2($pop93), $pop6 + i32.const $push87=, 0 + i32.const $push86=, 1103515245 + i32.mul $push7=, $0, $pop86 + i32.const $push85=, 12345 + i32.add $push84=, $pop7, $pop85 + tee_local $push83=, $0=, $pop84 + i32.const $push82=, 16 + i32.shr_u $push8=, $pop83, $pop82 + i32.store8 sL+3($pop87), $pop8 + i32.const $push81=, 0 + i32.const $push80=, 1103515245 + i32.mul $push9=, $0, $pop80 + i32.const $push79=, 12345 + i32.add $push78=, $pop9, $pop79 + tee_local $push77=, $0=, $pop78 + i32.const $push76=, 16 + i32.shr_u $push10=, $pop77, $pop76 + i32.store8 sL+4($pop81), $pop10 + i32.const $push75=, 0 + i32.const $push74=, 1103515245 + i32.mul $push11=, $0, $pop74 + i32.const $push73=, 12345 + i32.add $push72=, $pop11, $pop73 + tee_local $push71=, $0=, $pop72 + i32.const $push70=, 16 + i32.shr_u $push12=, $pop71, $pop70 + i32.store8 sL+5($pop75), $pop12 + i32.const $push69=, 0 + i32.const $push68=, 1103515245 + i32.mul $push13=, $0, $pop68 + i32.const $push67=, 12345 + i32.add $push66=, $pop13, $pop67 + tee_local $push65=, $0=, $pop66 + i32.const $push64=, 16 + i32.shr_u $push14=, $pop65, $pop64 + i32.store8 sL+6($pop69), $pop14 + i32.const $push63=, 0 + i32.const $push62=, 1103515245 + i32.mul $push15=, $0, $pop62 + i32.const $push61=, 12345 + i32.add $push60=, $pop15, $pop61 + tee_local $push59=, $0=, $pop60 + i32.const $push58=, 16 + i32.shr_u $push16=, $pop59, $pop58 + i32.store8 sL+7($pop63), $pop16 + i32.const $push57=, 0 + i32.const $push56=, 1103515245 + i32.mul $push17=, $0, $pop56 + i32.const $push55=, 12345 + i32.add $push54=, $pop17, $pop55 + tee_local $push53=, $2=, $pop54 + i32.const $push52=, 1103515245 + i32.mul $push18=, $pop53, $pop52 + i32.const $push51=, 12345 + i32.add $push50=, $pop18, $pop51 + tee_local $push49=, $0=, $pop50 + i32.store myrnd.s($pop57), $pop49 + i32.const $push48=, 0 + i32.const $push47=, 16 + i32.shr_u $push46=, $2, $pop47 + tee_local $push45=, $2=, $pop46 + i32.const $push44=, 63 + i32.and $push21=, $pop45, $pop44 + i32.const $push43=, 0 + i32.load $push19=, sL($pop43) + i32.const $push20=, -64 + i32.and $push42=, $pop19, $pop20 + tee_local $push41=, $1=, $pop42 + i32.or $push40=, $pop21, $pop41 + tee_local $push39=, $3=, $pop40 + i32.store sL($pop48), $pop39 + block + i32.const $push38=, 16 + i32.shr_u $push37=, $0, $pop38 + tee_local $push36=, $4=, $pop37 + i32.add $push23=, $pop36, $2 + i32.add $push22=, $4, $3 + i32.xor $push24=, $pop23, $pop22 + i32.const $push35=, 63 + i32.and $push25=, $pop24, $pop35 + br_if 0, $pop25 # 0: down to label7 +# BB#1: # %if.end113 + i32.const $push117=, 0 + i32.const $push26=, -2139243339 + i32.mul $push27=, $0, $pop26 + i32.const $push28=, -1492899873 + i32.add $push116=, $pop27, $pop28 + tee_local $push115=, $0=, $pop116 + i32.const $push114=, 1103515245 + i32.mul $push29=, $pop115, $pop114 + i32.const $push113=, 12345 + i32.add $push112=, $pop29, $pop113 + tee_local $push111=, $2=, $pop112 + i32.store myrnd.s($pop117), $pop111 + i32.const $push110=, 0 + i32.const $push109=, 16 + i32.shr_u $push31=, $2, $pop109 + i32.const $push108=, 16 + i32.shr_u $push30=, $0, $pop108 + i32.add $push32=, $pop31, $pop30 + i32.const $push107=, 63 + i32.and $push33=, $pop32, $pop107 + i32.or $push34=, $pop33, $1 + i32.store sL($pop110), $pop34 + return +.LBB72_2: # %if.then + end_block # label7: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end72: + .size testL, .Lfunc_end72-testL + # -- End function + .section .text.retmeM,"ax",@progbits + .hidden retmeM # -- Begin function retmeM + .globl retmeM + .type retmeM,@function +retmeM: # @retmeM + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=2 + i64.store 0($0):p2align=2, $pop0 + # fallthrough-return + .endfunc +.Lfunc_end73: + .size retmeM, .Lfunc_end73-retmeM + # -- End function + .section .text.fn1M,"ax",@progbits + .hidden fn1M # -- Begin function fn1M + .globl fn1M + .type fn1M,@function +fn1M: # @fn1M + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sM+4($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 63 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end74: + .size fn1M, .Lfunc_end74-fn1M + # -- End function + .section .text.fn2M,"ax",@progbits + .hidden fn2M # -- Begin function fn2M + .globl fn2M + .type fn2M,@function +fn2M: # @fn2M + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sM+4($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 63 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end75: + .size fn2M, .Lfunc_end75-fn2M + # -- End function + .section .text.retitM,"ax",@progbits + .hidden retitM # -- Begin function retitM + .globl retitM + .type retitM,@function +retitM: # @retitM + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sM+4($pop0) + i32.const $push2=, 63 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end76: + .size retitM, .Lfunc_end76-retitM + # -- End function + .section .text.fn3M,"ax",@progbits + .hidden fn3M # -- Begin function fn3M + .globl fn3M + .type fn3M,@function +fn3M: # @fn3M + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, sM+4($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 63 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store sM+4($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end77: + .size fn3M, .Lfunc_end77-fn3M + # -- End function + .section .text.testM,"ax",@progbits + .hidden testM # -- Begin function testM + .globl testM + .type testM,@function +testM: # @testM + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push106=, 0 + i32.const $push105=, 0 + i32.load $push0=, myrnd.s($pop105) + i32.const $push104=, 1103515245 + i32.mul $push1=, $pop0, $pop104 + i32.const $push103=, 12345 + i32.add $push102=, $pop1, $pop103 + tee_local $push101=, $0=, $pop102 + i32.const $push100=, 1103515245 + i32.mul $push2=, $pop101, $pop100 + i32.const $push99=, 12345 + i32.add $push98=, $pop2, $pop99 + tee_local $push97=, $1=, $pop98 + i32.const $push96=, 1103515245 + i32.mul $push3=, $pop97, $pop96 + i32.const $push95=, 12345 + i32.add $push94=, $pop3, $pop95 + tee_local $push93=, $2=, $pop94 + i32.const $push92=, 1103515245 + i32.mul $push4=, $pop93, $pop92 + i32.const $push91=, 12345 + i32.add $push90=, $pop4, $pop91 + tee_local $push89=, $3=, $pop90 + i32.const $push88=, 1103515245 + i32.mul $push5=, $pop89, $pop88 + i32.const $push87=, 12345 + i32.add $push86=, $pop5, $pop87 + tee_local $push85=, $4=, $pop86 + i32.const $push84=, 16 + i32.shr_u $push6=, $pop85, $pop84 + i32.store8 sM+4($pop106), $pop6 + i32.const $push83=, 0 + i32.const $push82=, 1103515245 + i32.mul $push7=, $4, $pop82 + i32.const $push81=, 12345 + i32.add $push80=, $pop7, $pop81 + tee_local $push79=, $4=, $pop80 + i32.const $push78=, 16 + i32.shr_u $push8=, $pop79, $pop78 + i32.store8 sM+5($pop83), $pop8 + i32.const $push77=, 0 + i32.const $push76=, 1103515245 + i32.mul $push9=, $4, $pop76 + i32.const $push75=, 12345 + i32.add $push74=, $pop9, $pop75 + tee_local $push73=, $4=, $pop74 + i32.const $push72=, 16 + i32.shr_u $push10=, $pop73, $pop72 + i32.store8 sM+6($pop77), $pop10 + i32.const $push71=, 0 + i32.const $push70=, 1103515245 + i32.mul $push11=, $4, $pop70 + i32.const $push69=, 12345 + i32.add $push68=, $pop11, $pop69 + tee_local $push67=, $4=, $pop68 + i32.const $push66=, 16 + i32.shr_u $push12=, $pop67, $pop66 + i32.store8 sM+7($pop71), $pop12 + i32.const $push65=, 0 + i32.const $push64=, 16 + i32.shr_u $push13=, $0, $pop64 + i32.store8 sM($pop65), $pop13 + i32.const $push63=, 0 + i32.const $push62=, 16 + i32.shr_u $push14=, $1, $pop62 + i32.store8 sM+1($pop63), $pop14 + i32.const $push61=, 0 + i32.const $push60=, 16 + i32.shr_u $push15=, $2, $pop60 + i32.store8 sM+2($pop61), $pop15 + i32.const $push59=, 0 + i32.const $push58=, 16 + i32.shr_u $push16=, $3, $pop58 + i32.store8 sM+3($pop59), $pop16 + i32.const $push57=, 0 + i32.const $push56=, 1103515245 + i32.mul $push17=, $4, $pop56 + i32.const $push55=, 12345 + i32.add $push54=, $pop17, $pop55 + tee_local $push53=, $1=, $pop54 + i32.const $push52=, 1103515245 + i32.mul $push18=, $pop53, $pop52 + i32.const $push51=, 12345 + i32.add $push50=, $pop18, $pop51 + tee_local $push49=, $0=, $pop50 + i32.store myrnd.s($pop57), $pop49 + i32.const $push48=, 0 + i32.const $push47=, 16 + i32.shr_u $push46=, $1, $pop47 + tee_local $push45=, $1=, $pop46 + i32.const $push44=, 63 + i32.and $push21=, $pop45, $pop44 + i32.const $push43=, 0 + i32.load $push19=, sM+4($pop43) + i32.const $push20=, -64 + i32.and $push42=, $pop19, $pop20 + tee_local $push41=, $2=, $pop42 + i32.or $push40=, $pop21, $pop41 + tee_local $push39=, $3=, $pop40 + i32.store sM+4($pop48), $pop39 + block + i32.const $push38=, 16 + i32.shr_u $push37=, $0, $pop38 + tee_local $push36=, $4=, $pop37 + i32.add $push23=, $pop36, $1 + i32.add $push22=, $4, $3 + i32.xor $push24=, $pop23, $pop22 + i32.const $push35=, 63 + i32.and $push25=, $pop24, $pop35 + br_if 0, $pop25 # 0: down to label8 +# BB#1: # %if.end119 + i32.const $push117=, 0 + i32.const $push26=, -2139243339 + i32.mul $push27=, $0, $pop26 + i32.const $push28=, -1492899873 + i32.add $push116=, $pop27, $pop28 + tee_local $push115=, $0=, $pop116 + i32.const $push114=, 1103515245 + i32.mul $push29=, $pop115, $pop114 + i32.const $push113=, 12345 + i32.add $push112=, $pop29, $pop113 + tee_local $push111=, $1=, $pop112 + i32.store myrnd.s($pop117), $pop111 + i32.const $push110=, 0 + i32.const $push109=, 16 + i32.shr_u $push31=, $1, $pop109 + i32.const $push108=, 16 + i32.shr_u $push30=, $0, $pop108 + i32.add $push32=, $pop31, $pop30 + i32.const $push107=, 63 + i32.and $push33=, $pop32, $pop107 + i32.or $push34=, $pop33, $2 + i32.store sM+4($pop110), $pop34 + return +.LBB78_2: # %if.then + end_block # label8: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end78: + .size testM, .Lfunc_end78-testM + # -- End function + .section .text.retmeN,"ax",@progbits + .hidden retmeN # -- Begin function retmeN + .globl retmeN + .type retmeN,@function +retmeN: # @retmeN + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end79: + .size retmeN, .Lfunc_end79-retmeN + # -- End function + .section .text.fn1N,"ax",@progbits + .hidden fn1N # -- Begin function fn1N + .globl fn1N + .type fn1N,@function +fn1N: # @fn1N + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sN($pop0) + i32.const $push2=, 6 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 63 + i32.and $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end80: + .size fn1N, .Lfunc_end80-fn1N + # -- End function + .section .text.fn2N,"ax",@progbits + .hidden fn2N # -- Begin function fn2N + .globl fn2N + .type fn2N,@function +fn2N: # @fn2N + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sN($pop0) + i32.const $push2=, 6 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 63 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 15 + i32.rem_u $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end81: + .size fn2N, .Lfunc_end81-fn2N + # -- End function + .section .text.retitN,"ax",@progbits + .hidden retitN # -- Begin function retitN + .globl retitN + .type retitN,@function +retitN: # @retitN + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sN($pop0) + i32.const $push2=, 6 + i32.shr_u $push3=, $pop1, $pop2 + i32.const $push4=, 63 + i32.and $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end82: + .size retitN, .Lfunc_end82-retitN + # -- End function + .section .text.fn3N,"ax",@progbits + .hidden fn3N # -- Begin function fn3N + .globl fn3N + .type fn3N,@function +fn3N: # @fn3N + .param i32 + .result i32 + .local i64 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push18=, 0 + i64.load $push17=, sN($pop18) + tee_local $push16=, $1=, $pop17 + i64.const $push1=, -4033 + i64.and $push2=, $pop16, $pop1 + i64.const $push3=, 6 + i64.shr_u $push4=, $1, $pop3 + i32.wrap/i64 $push5=, $pop4 + i32.add $push15=, $pop5, $0 + tee_local $push14=, $0=, $pop15 + i32.const $push6=, 6 + i32.shl $push7=, $pop14, $pop6 + i32.const $push8=, 4032 + i32.and $push9=, $pop7, $pop8 + i64.extend_u/i32 $push10=, $pop9 + i64.or $push11=, $pop2, $pop10 + i64.store sN($pop0), $pop11 + i32.const $push12=, 63 + i32.and $push13=, $0, $pop12 + # fallthrough-return: $pop13 + .endfunc +.Lfunc_end83: + .size fn3N, .Lfunc_end83-fn3N + # -- End function + .section .text.testN,"ax",@progbits + .hidden testN # -- Begin function testN + .globl testN + .type testN,@function +testN: # @testN + .local i64, i32, i32, i32, i64, i64, i32, i32, i32, i64 +# BB#0: # %lor.lhs.false + i32.const $push3=, 0 + i32.const $push173=, 0 + i32.load $push4=, myrnd.s($pop173) + i32.const $push5=, 1103515245 + i32.mul $push6=, $pop4, $pop5 + i32.const $push7=, 12345 + i32.add $push172=, $pop6, $pop7 + tee_local $push171=, $8=, $pop172 + i32.const $push170=, 16 + i32.shr_u $push8=, $pop171, $pop170 + i32.store8 sN($pop3), $pop8 + i32.const $push169=, 0 + i32.const $push168=, 1103515245 + i32.mul $push9=, $8, $pop168 + i32.const $push167=, 12345 + i32.add $push166=, $pop9, $pop167 + tee_local $push165=, $8=, $pop166 + i32.const $push164=, 16 + i32.shr_u $push10=, $pop165, $pop164 + i32.store8 sN+1($pop169), $pop10 + i32.const $push163=, 0 + i32.const $push162=, 1103515245 + i32.mul $push11=, $8, $pop162 + i32.const $push161=, 12345 + i32.add $push160=, $pop11, $pop161 + tee_local $push159=, $8=, $pop160 + i32.const $push158=, 16 + i32.shr_u $push12=, $pop159, $pop158 + i32.store8 sN+2($pop163), $pop12 + i32.const $push157=, 0 + i32.const $push156=, 1103515245 + i32.mul $push13=, $8, $pop156 + i32.const $push155=, 12345 + i32.add $push154=, $pop13, $pop155 + tee_local $push153=, $8=, $pop154 + i32.const $push152=, 16 + i32.shr_u $push14=, $pop153, $pop152 + i32.store8 sN+3($pop157), $pop14 + i32.const $push151=, 0 + i32.const $push150=, 1103515245 + i32.mul $push15=, $8, $pop150 + i32.const $push149=, 12345 + i32.add $push148=, $pop15, $pop149 + tee_local $push147=, $8=, $pop148 + i32.const $push146=, 16 + i32.shr_u $push16=, $pop147, $pop146 + i32.store8 sN+4($pop151), $pop16 + i32.const $push145=, 0 + i32.const $push144=, 1103515245 + i32.mul $push17=, $8, $pop144 + i32.const $push143=, 12345 + i32.add $push142=, $pop17, $pop143 + tee_local $push141=, $8=, $pop142 + i32.const $push140=, 16 + i32.shr_u $push18=, $pop141, $pop140 + i32.store8 sN+5($pop145), $pop18 + i32.const $push139=, 0 + i32.const $push138=, 1103515245 + i32.mul $push19=, $8, $pop138 + i32.const $push137=, 12345 + i32.add $push136=, $pop19, $pop137 + tee_local $push135=, $8=, $pop136 + i32.const $push134=, 16 + i32.shr_u $push20=, $pop135, $pop134 + i32.store8 sN+6($pop139), $pop20 + i32.const $push133=, 0 + i32.const $push132=, 1103515245 + i32.mul $push21=, $8, $pop132 + i32.const $push131=, 12345 + i32.add $push130=, $pop21, $pop131 + tee_local $push129=, $8=, $pop130 + i32.const $push128=, 16 + i32.shr_u $push22=, $pop129, $pop128 + i32.store8 sN+7($pop133), $pop22 + i32.const $push127=, 0 + i32.const $push126=, 1103515245 + i32.mul $push23=, $8, $pop126 + i32.const $push125=, 12345 + i32.add $push124=, $pop23, $pop125 + tee_local $push123=, $8=, $pop124 + i32.const $push122=, 1103515245 + i32.mul $push24=, $pop123, $pop122 + i32.const $push121=, 12345 + i32.add $push120=, $pop24, $pop121 + tee_local $push119=, $1=, $pop120 + i32.store myrnd.s($pop127), $pop119 + i32.const $push118=, 0 + i32.const $push117=, 0 + i64.load $push116=, sN($pop117) + tee_local $push115=, $0=, $pop116 + i64.const $push25=, -4033 + i64.and $push114=, $pop115, $pop25 + tee_local $push113=, $4=, $pop114 + i32.const $push26=, 10 + i32.shr_u $push27=, $8, $pop26 + i32.const $push28=, 4032 + i32.and $push112=, $pop27, $pop28 + tee_local $push111=, $3=, $pop112 + i64.extend_u/i32 $push29=, $pop111 + i64.or $push110=, $pop113, $pop29 + tee_local $push109=, $5=, $pop110 + i64.store sN($pop118), $pop109 + block + i64.const $push32=, 4032 + i64.or $push33=, $0, $pop32 + i64.xor $push108=, $5, $pop33 + tee_local $push107=, $9=, $pop108 + i64.const $push34=, 34359734272 + i64.and $push35=, $pop107, $pop34 + i64.const $push106=, 0 + i64.ne $push36=, $pop35, $pop106 + br_if 0, $pop36 # 0: down to label9 +# BB#1: # %lor.lhs.false29 + i64.const $push41=, 63 + i64.and $push42=, $9, $pop41 + i64.const $push174=, 0 + i64.ne $push43=, $pop42, $pop174 + br_if 0, $pop43 # 0: down to label9 +# BB#2: # %lor.lhs.false29 + i32.const $push40=, 6 + i32.shr_u $push37=, $3, $pop40 + i64.const $push30=, 6 + i64.shr_u $push31=, $5, $pop30 + i32.wrap/i64 $push176=, $pop31 + tee_local $push175=, $3=, $pop176 + i32.const $push39=, 63 + i32.and $push38=, $pop175, $pop39 + i32.ne $push44=, $pop37, $pop38 + br_if 0, $pop44 # 0: down to label9 +# BB#3: # %lor.lhs.false49 + i32.const $push181=, 16 + i32.shr_u $push180=, $1, $pop181 + tee_local $push179=, $2=, $pop180 + i32.add $push1=, $pop179, $3 + i32.const $push178=, 16 + i32.shr_u $push0=, $8, $pop178 + i32.add $push45=, $2, $pop0 + i32.xor $push46=, $pop1, $pop45 + i32.const $push177=, 63 + i32.and $push47=, $pop46, $pop177 + br_if 0, $pop47 # 0: down to label9 +# BB#4: # %lor.lhs.false69 + i32.const $push52=, 0 + i32.const $push48=, 1103515245 + i32.mul $push49=, $1, $pop48 + i32.const $push50=, 12345 + i32.add $push201=, $pop49, $pop50 + tee_local $push200=, $8=, $pop201 + i32.const $push199=, 1103515245 + i32.mul $push51=, $pop200, $pop199 + i32.const $push198=, 12345 + i32.add $push197=, $pop51, $pop198 + tee_local $push196=, $1=, $pop197 + i32.store myrnd.s($pop52), $pop196 + i32.const $push195=, 0 + i32.const $push53=, 10 + i32.shr_u $push54=, $8, $pop53 + i32.const $push55=, 4032 + i32.and $push194=, $pop54, $pop55 + tee_local $push193=, $3=, $pop194 + i64.extend_u/i32 $push56=, $pop193 + i64.or $push192=, $4, $pop56 + tee_local $push191=, $9=, $pop192 + i64.store sN($pop195), $pop191 + i32.const $push190=, 16 + i32.shr_u $push189=, $1, $pop190 + tee_local $push188=, $2=, $pop189 + i64.const $push57=, 6 + i64.shr_u $push58=, $9, $pop57 + i32.wrap/i64 $push187=, $pop58 + tee_local $push186=, $6=, $pop187 + i32.add $push59=, $pop188, $pop186 + i32.const $push185=, 63 + i32.and $push60=, $pop59, $pop185 + i32.const $push61=, 15 + i32.rem_u $7=, $pop60, $pop61 + i64.xor $push184=, $9, $5 + tee_local $push183=, $5=, $pop184 + i64.const $push62=, 34359734272 + i64.and $push63=, $pop183, $pop62 + i64.const $push182=, 0 + i64.ne $push64=, $pop63, $pop182 + br_if 0, $pop64 # 0: down to label9 +# BB#5: # %lor.lhs.false80 + i64.const $push69=, 63 + i64.and $push70=, $5, $pop69 + i64.const $push202=, 0 + i64.ne $push71=, $pop70, $pop202 + br_if 0, $pop71 # 0: down to label9 +# BB#6: # %lor.lhs.false80 + i32.const $push68=, 6 + i32.shr_u $push65=, $3, $pop68 + i32.const $push67=, 63 + i32.and $push66=, $6, $pop67 + i32.ne $push72=, $pop65, $pop66 + br_if 0, $pop72 # 0: down to label9 +# BB#7: # %lor.lhs.false100 + i32.const $push204=, 16 + i32.shr_u $push2=, $8, $pop204 + i32.add $push73=, $2, $pop2 + i32.const $push203=, 63 + i32.and $push74=, $pop73, $pop203 + i32.const $push75=, 15 + i32.rem_u $push76=, $pop74, $pop75 + i32.ne $push77=, $pop76, $7 + br_if 0, $pop77 # 0: down to label9 +# BB#8: # %lor.lhs.false125 + i32.const $push82=, 0 + i32.const $push78=, 1103515245 + i32.mul $push79=, $1, $pop78 + i32.const $push80=, 12345 + i32.add $push218=, $pop79, $pop80 + tee_local $push217=, $8=, $pop218 + i32.const $push216=, 1103515245 + i32.mul $push81=, $pop217, $pop216 + i32.const $push215=, 12345 + i32.add $push214=, $pop81, $pop215 + tee_local $push213=, $1=, $pop214 + i32.store myrnd.s($pop82), $pop213 + i32.const $push212=, 0 + i32.const $push94=, 16 + i32.shr_u $push211=, $1, $pop94 + tee_local $push210=, $1=, $pop211 + i32.const $push95=, 2047 + i32.and $push96=, $pop210, $pop95 + i64.const $push83=, 274877902848 + i64.and $push84=, $0, $pop83 + i32.const $push85=, 10 + i32.shr_u $push86=, $8, $pop85 + i32.const $push87=, 4032 + i32.and $push88=, $pop86, $pop87 + i64.extend_u/i32 $push89=, $pop88 + i64.or $push90=, $pop84, $pop89 + i64.const $push91=, 6 + i64.shr_u $push92=, $pop90, $pop91 + i32.wrap/i64 $push93=, $pop92 + i32.add $push209=, $pop96, $pop93 + tee_local $push208=, $3=, $pop209 + i32.const $push97=, 6 + i32.shl $push98=, $pop208, $pop97 + i32.const $push207=, 4032 + i32.and $push99=, $pop98, $pop207 + i64.extend_u/i32 $push100=, $pop99 + i64.or $push101=, $4, $pop100 + i64.store sN($pop212), $pop101 + i32.const $push206=, 16 + i32.shr_u $push102=, $8, $pop206 + i32.add $push103=, $1, $pop102 + i32.xor $push104=, $pop103, $3 + i32.const $push205=, 63 + i32.and $push105=, $pop104, $pop205 + br_if 0, $pop105 # 0: down to label9 +# BB#9: # %if.end158 + return +.LBB84_10: # %if.then + end_block # label9: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end84: + .size testN, .Lfunc_end84-testN + # -- End function + .section .text.retmeO,"ax",@progbits + .hidden retmeO # -- Begin function retmeO + .globl retmeO + .type retmeO,@function +retmeO: # @retmeO + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 0($0), $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i64.load $push4=, 0($pop3) + i64.store 0($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end85: + .size retmeO, .Lfunc_end85-retmeO + # -- End function + .section .text.fn1O,"ax",@progbits + .hidden fn1O # -- Begin function fn1O + .globl fn1O + .type fn1O,@function +fn1O: # @fn1O + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sO+8($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end86: + .size fn1O, .Lfunc_end86-fn1O + # -- End function + .section .text.fn2O,"ax",@progbits + .hidden fn2O # -- Begin function fn2O + .globl fn2O + .type fn2O,@function +fn2O: # @fn2O + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sO+8($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end87: + .size fn2O, .Lfunc_end87-fn2O + # -- End function + .section .text.retitO,"ax",@progbits + .hidden retitO # -- Begin function retitO + .globl retitO + .type retitO,@function +retitO: # @retitO + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sO+8($pop0) + i32.const $push2=, 4095 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end88: + .size retitO, .Lfunc_end88-retitO + # -- End function + .section .text.fn3O,"ax",@progbits + .hidden fn3O # -- Begin function fn3O + .globl fn3O + .type fn3O,@function +fn3O: # @fn3O + .param i32 + .result i32 + .local i64 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push12=, 0 + i64.load $push11=, sO+8($pop12) + tee_local $push10=, $1=, $pop11 + i64.const $push1=, -4096 + i64.and $push2=, $pop10, $pop1 + i32.wrap/i64 $push3=, $1 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 4095 + i32.and $push9=, $pop4, $pop5 + tee_local $push8=, $0=, $pop9 + i64.extend_u/i32 $push6=, $pop8 + i64.or $push7=, $pop2, $pop6 + i64.store sO+8($pop0), $pop7 + copy_local $push13=, $0 + # fallthrough-return: $pop13 + .endfunc +.Lfunc_end89: + .size fn3O, .Lfunc_end89-fn3O + # -- End function + .section .text.testO,"ax",@progbits + .hidden testO # -- Begin function testO + .globl testO + .type testO,@function +testO: # @testO + .local i32, i64, i32, i64, i32, i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push197=, 0 + i32.load $push3=, myrnd.s($pop197) + i32.const $push4=, 1103515245 + i32.mul $push5=, $pop3, $pop4 + i32.const $push6=, 12345 + i32.add $push196=, $pop5, $pop6 + tee_local $push195=, $0=, $pop196 + i32.const $push194=, 16 + i32.shr_u $push7=, $pop195, $pop194 + i32.store8 sO($pop2), $pop7 + i32.const $push193=, 0 + i32.const $push192=, 1103515245 + i32.mul $push8=, $0, $pop192 + i32.const $push191=, 12345 + i32.add $push190=, $pop8, $pop191 + tee_local $push189=, $0=, $pop190 + i32.const $push188=, 16 + i32.shr_u $push9=, $pop189, $pop188 + i32.store8 sO+1($pop193), $pop9 + i32.const $push187=, 0 + i32.const $push186=, 1103515245 + i32.mul $push10=, $0, $pop186 + i32.const $push185=, 12345 + i32.add $push184=, $pop10, $pop185 + tee_local $push183=, $0=, $pop184 + i32.const $push182=, 16 + i32.shr_u $push11=, $pop183, $pop182 + i32.store8 sO+2($pop187), $pop11 + i32.const $push181=, 0 + i32.const $push180=, 1103515245 + i32.mul $push12=, $0, $pop180 + i32.const $push179=, 12345 + i32.add $push178=, $pop12, $pop179 + tee_local $push177=, $0=, $pop178 + i32.const $push176=, 16 + i32.shr_u $push13=, $pop177, $pop176 + i32.store8 sO+3($pop181), $pop13 + i32.const $push175=, 0 + i32.const $push174=, 1103515245 + i32.mul $push14=, $0, $pop174 + i32.const $push173=, 12345 + i32.add $push172=, $pop14, $pop173 + tee_local $push171=, $0=, $pop172 + i32.const $push170=, 16 + i32.shr_u $push15=, $pop171, $pop170 + i32.store8 sO+4($pop175), $pop15 + i32.const $push169=, 0 + i32.const $push168=, 1103515245 + i32.mul $push16=, $0, $pop168 + i32.const $push167=, 12345 + i32.add $push166=, $pop16, $pop167 + tee_local $push165=, $0=, $pop166 + i32.const $push164=, 16 + i32.shr_u $push17=, $pop165, $pop164 + i32.store8 sO+5($pop169), $pop17 + i32.const $push163=, 0 + i32.const $push162=, 1103515245 + i32.mul $push18=, $0, $pop162 + i32.const $push161=, 12345 + i32.add $push160=, $pop18, $pop161 + tee_local $push159=, $0=, $pop160 + i32.const $push158=, 16 + i32.shr_u $push19=, $pop159, $pop158 + i32.store8 sO+6($pop163), $pop19 + i32.const $push157=, 0 + i32.const $push156=, 1103515245 + i32.mul $push20=, $0, $pop156 + i32.const $push155=, 12345 + i32.add $push154=, $pop20, $pop155 + tee_local $push153=, $0=, $pop154 + i32.const $push152=, 16 + i32.shr_u $push21=, $pop153, $pop152 + i32.store8 sO+7($pop157), $pop21 + i32.const $push151=, 0 + i32.const $push150=, 1103515245 + i32.mul $push22=, $0, $pop150 + i32.const $push149=, 12345 + i32.add $push148=, $pop22, $pop149 + tee_local $push147=, $0=, $pop148 + i32.const $push146=, 16 + i32.shr_u $push23=, $pop147, $pop146 + i32.store8 sO+8($pop151), $pop23 + i32.const $push145=, 0 + i32.const $push144=, 1103515245 + i32.mul $push24=, $0, $pop144 + i32.const $push143=, 12345 + i32.add $push142=, $pop24, $pop143 + tee_local $push141=, $0=, $pop142 + i32.const $push140=, 16 + i32.shr_u $push25=, $pop141, $pop140 + i32.store8 sO+9($pop145), $pop25 + i32.const $push139=, 0 + i32.const $push138=, 1103515245 + i32.mul $push26=, $0, $pop138 + i32.const $push137=, 12345 + i32.add $push136=, $pop26, $pop137 + tee_local $push135=, $0=, $pop136 + i32.const $push134=, 16 + i32.shr_u $push27=, $pop135, $pop134 + i32.store8 sO+10($pop139), $pop27 + i32.const $push133=, 0 + i32.const $push132=, 1103515245 + i32.mul $push28=, $0, $pop132 + i32.const $push131=, 12345 + i32.add $push130=, $pop28, $pop131 + tee_local $push129=, $0=, $pop130 + i32.const $push128=, 16 + i32.shr_u $push29=, $pop129, $pop128 + i32.store8 sO+11($pop133), $pop29 + i32.const $push127=, 0 + i32.const $push126=, 1103515245 + i32.mul $push30=, $0, $pop126 + i32.const $push125=, 12345 + i32.add $push124=, $pop30, $pop125 + tee_local $push123=, $0=, $pop124 + i32.const $push122=, 16 + i32.shr_u $push31=, $pop123, $pop122 + i32.store8 sO+12($pop127), $pop31 + i32.const $push121=, 0 + i32.const $push120=, 1103515245 + i32.mul $push32=, $0, $pop120 + i32.const $push119=, 12345 + i32.add $push118=, $pop32, $pop119 + tee_local $push117=, $0=, $pop118 + i32.const $push116=, 16 + i32.shr_u $push33=, $pop117, $pop116 + i32.store8 sO+13($pop121), $pop33 + i32.const $push115=, 0 + i32.const $push114=, 1103515245 + i32.mul $push34=, $0, $pop114 + i32.const $push113=, 12345 + i32.add $push112=, $pop34, $pop113 + tee_local $push111=, $0=, $pop112 + i32.const $push110=, 16 + i32.shr_u $push35=, $pop111, $pop110 + i32.store8 sO+14($pop115), $pop35 + i32.const $push109=, 0 + i32.const $push108=, 1103515245 + i32.mul $push36=, $0, $pop108 + i32.const $push107=, 12345 + i32.add $push106=, $pop36, $pop107 + tee_local $push105=, $0=, $pop106 + i32.const $push104=, 16 + i32.shr_u $push37=, $pop105, $pop104 + i32.store8 sO+15($pop109), $pop37 + i32.const $push103=, 0 + i32.const $push102=, 1103515245 + i32.mul $push38=, $0, $pop102 + i32.const $push101=, 12345 + i32.add $push100=, $pop38, $pop101 + tee_local $push99=, $2=, $pop100 + i32.const $push98=, 1103515245 + i32.mul $push39=, $pop99, $pop98 + i32.const $push97=, 12345 + i32.add $push96=, $pop39, $pop97 + tee_local $push95=, $0=, $pop96 + i32.store myrnd.s($pop103), $pop95 + i32.const $push94=, 0 + i32.const $push93=, 0 + i64.load $push40=, sO+8($pop93) + i64.const $push41=, -4096 + i64.and $push92=, $pop40, $pop41 + tee_local $push91=, $1=, $pop92 + i32.const $push90=, 16 + i32.shr_u $push42=, $2, $pop90 + i32.const $push89=, 2047 + i32.and $push88=, $pop42, $pop89 + tee_local $push87=, $2=, $pop88 + i64.extend_u/i32 $push43=, $pop87 + i64.or $push86=, $pop91, $pop43 + tee_local $push85=, $3=, $pop86 + i64.store sO+8($pop94), $pop85 + block + i32.wrap/i64 $push84=, $3 + tee_local $push83=, $5=, $pop84 + i32.const $push82=, 2047 + i32.and $push47=, $pop83, $pop82 + i32.ne $push48=, $2, $pop47 + br_if 0, $pop48 # 0: down to label10 +# BB#1: # %entry + i32.const $push201=, 16 + i32.shr_u $push44=, $0, $pop201 + i32.const $push200=, 2047 + i32.and $push199=, $pop44, $pop200 + tee_local $push198=, $4=, $pop199 + i32.add $push0=, $pop198, $2 + i32.add $push45=, $4, $5 + i32.const $push46=, 4095 + i32.and $push1=, $pop45, $pop46 + i32.ne $push49=, $pop0, $pop1 + br_if 0, $pop49 # 0: down to label10 +# BB#2: # %if.end + i32.const $push54=, 0 + i32.const $push50=, 1103515245 + i32.mul $push51=, $0, $pop50 + i32.const $push52=, 12345 + i32.add $push217=, $pop51, $pop52 + tee_local $push216=, $2=, $pop217 + i32.const $push215=, 1103515245 + i32.mul $push53=, $pop216, $pop215 + i32.const $push214=, 12345 + i32.add $push213=, $pop53, $pop214 + tee_local $push212=, $0=, $pop213 + i32.store myrnd.s($pop54), $pop212 + i32.const $push211=, 0 + i32.const $push210=, 16 + i32.shr_u $push55=, $2, $pop210 + i32.const $push209=, 2047 + i32.and $push208=, $pop55, $pop209 + tee_local $push207=, $2=, $pop208 + i64.extend_u/i32 $push56=, $pop207 + i64.or $push206=, $1, $pop56 + tee_local $push205=, $3=, $pop206 + i64.store sO+8($pop211), $pop205 + i32.wrap/i64 $push204=, $3 + tee_local $push203=, $5=, $pop204 + i32.const $push202=, 2047 + i32.and $push57=, $pop203, $pop202 + i32.ne $push58=, $2, $pop57 + br_if 0, $pop58 # 0: down to label10 +# BB#3: # %lor.lhs.false87 + i32.const $push222=, 16 + i32.shr_u $push59=, $0, $pop222 + i32.const $push221=, 2047 + i32.and $push220=, $pop59, $pop221 + tee_local $push219=, $4=, $pop220 + i32.add $push60=, $pop219, $2 + i32.const $push61=, 15 + i32.rem_u $push62=, $pop60, $pop61 + i32.add $push63=, $4, $5 + i32.const $push64=, 4095 + i32.and $push65=, $pop63, $pop64 + i32.const $push218=, 15 + i32.rem_u $push66=, $pop65, $pop218 + i32.ne $push67=, $pop62, $pop66 + br_if 0, $pop67 # 0: down to label10 +# BB#4: # %if.end140 + i32.const $push72=, 0 + i32.const $push68=, 1103515245 + i32.mul $push69=, $0, $pop68 + i32.const $push70=, 12345 + i32.add $push231=, $pop69, $pop70 + tee_local $push230=, $0=, $pop231 + i32.const $push229=, 1103515245 + i32.mul $push71=, $pop230, $pop229 + i32.const $push228=, 12345 + i32.add $push227=, $pop71, $pop228 + tee_local $push226=, $2=, $pop227 + i32.store myrnd.s($pop72), $pop226 + i32.const $push225=, 0 + i32.const $push73=, 16 + i32.shr_u $push77=, $2, $pop73 + i32.const $push75=, 2047 + i32.and $push78=, $pop77, $pop75 + i32.const $push224=, 16 + i32.shr_u $push74=, $0, $pop224 + i32.const $push223=, 2047 + i32.and $push76=, $pop74, $pop223 + i32.add $push79=, $pop78, $pop76 + i64.extend_u/i32 $push80=, $pop79 + i64.or $push81=, $1, $pop80 + i64.store sO+8($pop225), $pop81 + return +.LBB90_5: # %if.then + end_block # label10: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end90: + .size testO, .Lfunc_end90-testO + # -- End function + .section .text.retmeP,"ax",@progbits + .hidden retmeP # -- Begin function retmeP + .globl retmeP + .type retmeP,@function +retmeP: # @retmeP + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 0($0), $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i64.load $push4=, 0($pop3) + i64.store 0($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end91: + .size retmeP, .Lfunc_end91-retmeP + # -- End function + .section .text.fn1P,"ax",@progbits + .hidden fn1P # -- Begin function fn1P + .globl fn1P + .type fn1P,@function +fn1P: # @fn1P + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sP($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end92: + .size fn1P, .Lfunc_end92-fn1P + # -- End function + .section .text.fn2P,"ax",@progbits + .hidden fn2P # -- Begin function fn2P + .globl fn2P + .type fn2P,@function +fn2P: # @fn2P + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sP($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end93: + .size fn2P, .Lfunc_end93-fn2P + # -- End function + .section .text.retitP,"ax",@progbits + .hidden retitP # -- Begin function retitP + .globl retitP + .type retitP,@function +retitP: # @retitP + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sP($pop0) + i32.const $push2=, 4095 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end94: + .size retitP, .Lfunc_end94-retitP + # -- End function + .section .text.fn3P,"ax",@progbits + .hidden fn3P # -- Begin function fn3P + .globl fn3P + .type fn3P,@function +fn3P: # @fn3P + .param i32 + .result i32 + .local i64 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push12=, 0 + i64.load $push11=, sP($pop12) + tee_local $push10=, $1=, $pop11 + i64.const $push1=, -4096 + i64.and $push2=, $pop10, $pop1 + i32.wrap/i64 $push3=, $1 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 4095 + i32.and $push9=, $pop4, $pop5 + tee_local $push8=, $0=, $pop9 + i64.extend_u/i32 $push6=, $pop8 + i64.or $push7=, $pop2, $pop6 + i64.store sP($pop0), $pop7 + copy_local $push13=, $0 + # fallthrough-return: $pop13 + .endfunc +.Lfunc_end95: + .size fn3P, .Lfunc_end95-fn3P + # -- End function + .section .text.testP,"ax",@progbits + .hidden testP # -- Begin function testP + .globl testP + .type testP,@function +testP: # @testP + .local i32, i64, i32, i64, i32, i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push197=, 0 + i32.load $push3=, myrnd.s($pop197) + i32.const $push4=, 1103515245 + i32.mul $push5=, $pop3, $pop4 + i32.const $push6=, 12345 + i32.add $push196=, $pop5, $pop6 + tee_local $push195=, $0=, $pop196 + i32.const $push194=, 16 + i32.shr_u $push7=, $pop195, $pop194 + i32.store8 sP($pop2), $pop7 + i32.const $push193=, 0 + i32.const $push192=, 1103515245 + i32.mul $push8=, $0, $pop192 + i32.const $push191=, 12345 + i32.add $push190=, $pop8, $pop191 + tee_local $push189=, $0=, $pop190 + i32.const $push188=, 16 + i32.shr_u $push9=, $pop189, $pop188 + i32.store8 sP+1($pop193), $pop9 + i32.const $push187=, 0 + i32.const $push186=, 1103515245 + i32.mul $push10=, $0, $pop186 + i32.const $push185=, 12345 + i32.add $push184=, $pop10, $pop185 + tee_local $push183=, $0=, $pop184 + i32.const $push182=, 16 + i32.shr_u $push11=, $pop183, $pop182 + i32.store8 sP+2($pop187), $pop11 + i32.const $push181=, 0 + i32.const $push180=, 1103515245 + i32.mul $push12=, $0, $pop180 + i32.const $push179=, 12345 + i32.add $push178=, $pop12, $pop179 + tee_local $push177=, $0=, $pop178 + i32.const $push176=, 16 + i32.shr_u $push13=, $pop177, $pop176 + i32.store8 sP+3($pop181), $pop13 + i32.const $push175=, 0 + i32.const $push174=, 1103515245 + i32.mul $push14=, $0, $pop174 + i32.const $push173=, 12345 + i32.add $push172=, $pop14, $pop173 + tee_local $push171=, $0=, $pop172 + i32.const $push170=, 16 + i32.shr_u $push15=, $pop171, $pop170 + i32.store8 sP+4($pop175), $pop15 + i32.const $push169=, 0 + i32.const $push168=, 1103515245 + i32.mul $push16=, $0, $pop168 + i32.const $push167=, 12345 + i32.add $push166=, $pop16, $pop167 + tee_local $push165=, $0=, $pop166 + i32.const $push164=, 16 + i32.shr_u $push17=, $pop165, $pop164 + i32.store8 sP+5($pop169), $pop17 + i32.const $push163=, 0 + i32.const $push162=, 1103515245 + i32.mul $push18=, $0, $pop162 + i32.const $push161=, 12345 + i32.add $push160=, $pop18, $pop161 + tee_local $push159=, $0=, $pop160 + i32.const $push158=, 16 + i32.shr_u $push19=, $pop159, $pop158 + i32.store8 sP+6($pop163), $pop19 + i32.const $push157=, 0 + i32.const $push156=, 1103515245 + i32.mul $push20=, $0, $pop156 + i32.const $push155=, 12345 + i32.add $push154=, $pop20, $pop155 + tee_local $push153=, $0=, $pop154 + i32.const $push152=, 16 + i32.shr_u $push21=, $pop153, $pop152 + i32.store8 sP+7($pop157), $pop21 + i32.const $push151=, 0 + i32.const $push150=, 1103515245 + i32.mul $push22=, $0, $pop150 + i32.const $push149=, 12345 + i32.add $push148=, $pop22, $pop149 + tee_local $push147=, $0=, $pop148 + i32.const $push146=, 16 + i32.shr_u $push23=, $pop147, $pop146 + i32.store8 sP+8($pop151), $pop23 + i32.const $push145=, 0 + i32.const $push144=, 1103515245 + i32.mul $push24=, $0, $pop144 + i32.const $push143=, 12345 + i32.add $push142=, $pop24, $pop143 + tee_local $push141=, $0=, $pop142 + i32.const $push140=, 16 + i32.shr_u $push25=, $pop141, $pop140 + i32.store8 sP+9($pop145), $pop25 + i32.const $push139=, 0 + i32.const $push138=, 1103515245 + i32.mul $push26=, $0, $pop138 + i32.const $push137=, 12345 + i32.add $push136=, $pop26, $pop137 + tee_local $push135=, $0=, $pop136 + i32.const $push134=, 16 + i32.shr_u $push27=, $pop135, $pop134 + i32.store8 sP+10($pop139), $pop27 + i32.const $push133=, 0 + i32.const $push132=, 1103515245 + i32.mul $push28=, $0, $pop132 + i32.const $push131=, 12345 + i32.add $push130=, $pop28, $pop131 + tee_local $push129=, $0=, $pop130 + i32.const $push128=, 16 + i32.shr_u $push29=, $pop129, $pop128 + i32.store8 sP+11($pop133), $pop29 + i32.const $push127=, 0 + i32.const $push126=, 1103515245 + i32.mul $push30=, $0, $pop126 + i32.const $push125=, 12345 + i32.add $push124=, $pop30, $pop125 + tee_local $push123=, $0=, $pop124 + i32.const $push122=, 16 + i32.shr_u $push31=, $pop123, $pop122 + i32.store8 sP+12($pop127), $pop31 + i32.const $push121=, 0 + i32.const $push120=, 1103515245 + i32.mul $push32=, $0, $pop120 + i32.const $push119=, 12345 + i32.add $push118=, $pop32, $pop119 + tee_local $push117=, $0=, $pop118 + i32.const $push116=, 16 + i32.shr_u $push33=, $pop117, $pop116 + i32.store8 sP+13($pop121), $pop33 + i32.const $push115=, 0 + i32.const $push114=, 1103515245 + i32.mul $push34=, $0, $pop114 + i32.const $push113=, 12345 + i32.add $push112=, $pop34, $pop113 + tee_local $push111=, $0=, $pop112 + i32.const $push110=, 16 + i32.shr_u $push35=, $pop111, $pop110 + i32.store8 sP+14($pop115), $pop35 + i32.const $push109=, 0 + i32.const $push108=, 1103515245 + i32.mul $push36=, $0, $pop108 + i32.const $push107=, 12345 + i32.add $push106=, $pop36, $pop107 + tee_local $push105=, $0=, $pop106 + i32.const $push104=, 16 + i32.shr_u $push37=, $pop105, $pop104 + i32.store8 sP+15($pop109), $pop37 + i32.const $push103=, 0 + i32.const $push102=, 1103515245 + i32.mul $push38=, $0, $pop102 + i32.const $push101=, 12345 + i32.add $push100=, $pop38, $pop101 + tee_local $push99=, $2=, $pop100 + i32.const $push98=, 1103515245 + i32.mul $push39=, $pop99, $pop98 + i32.const $push97=, 12345 + i32.add $push96=, $pop39, $pop97 + tee_local $push95=, $0=, $pop96 + i32.store myrnd.s($pop103), $pop95 + i32.const $push94=, 0 + i32.const $push93=, 0 + i64.load $push40=, sP($pop93) + i64.const $push41=, -4096 + i64.and $push92=, $pop40, $pop41 + tee_local $push91=, $1=, $pop92 + i32.const $push90=, 16 + i32.shr_u $push42=, $2, $pop90 + i32.const $push89=, 2047 + i32.and $push88=, $pop42, $pop89 + tee_local $push87=, $2=, $pop88 + i64.extend_u/i32 $push43=, $pop87 + i64.or $push86=, $pop91, $pop43 + tee_local $push85=, $3=, $pop86 + i64.store sP($pop94), $pop85 + block + i32.wrap/i64 $push84=, $3 + tee_local $push83=, $5=, $pop84 + i32.const $push82=, 2047 + i32.and $push47=, $pop83, $pop82 + i32.ne $push48=, $2, $pop47 + br_if 0, $pop48 # 0: down to label11 +# BB#1: # %entry + i32.const $push201=, 16 + i32.shr_u $push44=, $0, $pop201 + i32.const $push200=, 2047 + i32.and $push199=, $pop44, $pop200 + tee_local $push198=, $4=, $pop199 + i32.add $push0=, $pop198, $2 + i32.add $push45=, $4, $5 + i32.const $push46=, 4095 + i32.and $push1=, $pop45, $pop46 + i32.ne $push49=, $pop0, $pop1 + br_if 0, $pop49 # 0: down to label11 +# BB#2: # %if.end + i32.const $push54=, 0 + i32.const $push50=, 1103515245 + i32.mul $push51=, $0, $pop50 + i32.const $push52=, 12345 + i32.add $push217=, $pop51, $pop52 + tee_local $push216=, $2=, $pop217 + i32.const $push215=, 1103515245 + i32.mul $push53=, $pop216, $pop215 + i32.const $push214=, 12345 + i32.add $push213=, $pop53, $pop214 + tee_local $push212=, $0=, $pop213 + i32.store myrnd.s($pop54), $pop212 + i32.const $push211=, 0 + i32.const $push210=, 16 + i32.shr_u $push55=, $2, $pop210 + i32.const $push209=, 2047 + i32.and $push208=, $pop55, $pop209 + tee_local $push207=, $2=, $pop208 + i64.extend_u/i32 $push56=, $pop207 + i64.or $push206=, $1, $pop56 + tee_local $push205=, $3=, $pop206 + i64.store sP($pop211), $pop205 + i32.wrap/i64 $push204=, $3 + tee_local $push203=, $5=, $pop204 + i32.const $push202=, 2047 + i32.and $push57=, $pop203, $pop202 + i32.ne $push58=, $2, $pop57 + br_if 0, $pop58 # 0: down to label11 +# BB#3: # %lor.lhs.false83 + i32.const $push222=, 16 + i32.shr_u $push59=, $0, $pop222 + i32.const $push221=, 2047 + i32.and $push220=, $pop59, $pop221 + tee_local $push219=, $4=, $pop220 + i32.add $push60=, $pop219, $2 + i32.const $push61=, 15 + i32.rem_u $push62=, $pop60, $pop61 + i32.add $push63=, $4, $5 + i32.const $push64=, 4095 + i32.and $push65=, $pop63, $pop64 + i32.const $push218=, 15 + i32.rem_u $push66=, $pop65, $pop218 + i32.ne $push67=, $pop62, $pop66 + br_if 0, $pop67 # 0: down to label11 +# BB#4: # %if.end134 + i32.const $push72=, 0 + i32.const $push68=, 1103515245 + i32.mul $push69=, $0, $pop68 + i32.const $push70=, 12345 + i32.add $push231=, $pop69, $pop70 + tee_local $push230=, $0=, $pop231 + i32.const $push229=, 1103515245 + i32.mul $push71=, $pop230, $pop229 + i32.const $push228=, 12345 + i32.add $push227=, $pop71, $pop228 + tee_local $push226=, $2=, $pop227 + i32.store myrnd.s($pop72), $pop226 + i32.const $push225=, 0 + i32.const $push73=, 16 + i32.shr_u $push77=, $2, $pop73 + i32.const $push75=, 2047 + i32.and $push78=, $pop77, $pop75 + i32.const $push224=, 16 + i32.shr_u $push74=, $0, $pop224 + i32.const $push223=, 2047 + i32.and $push76=, $pop74, $pop223 + i32.add $push79=, $pop78, $pop76 + i64.extend_u/i32 $push80=, $pop79 + i64.or $push81=, $1, $pop80 + i64.store sP($pop225), $pop81 + return +.LBB96_5: # %if.then + end_block # label11: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end96: + .size testP, .Lfunc_end96-testP + # -- End function + .section .text.retmeQ,"ax",@progbits + .hidden retmeQ # -- Begin function retmeQ + .globl retmeQ + .type retmeQ,@function +retmeQ: # @retmeQ + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 0($0), $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i64.load $push4=, 0($pop3) + i64.store 0($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end97: + .size retmeQ, .Lfunc_end97-retmeQ + # -- End function + .section .text.fn1Q,"ax",@progbits + .hidden fn1Q # -- Begin function fn1Q + .globl fn1Q + .type fn1Q,@function +fn1Q: # @fn1Q + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sQ($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end98: + .size fn1Q, .Lfunc_end98-fn1Q + # -- End function + .section .text.fn2Q,"ax",@progbits + .hidden fn2Q # -- Begin function fn2Q + .globl fn2Q + .type fn2Q,@function +fn2Q: # @fn2Q + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sQ($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end99: + .size fn2Q, .Lfunc_end99-fn2Q + # -- End function + .section .text.retitQ,"ax",@progbits + .hidden retitQ # -- Begin function retitQ + .globl retitQ + .type retitQ,@function +retitQ: # @retitQ + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sQ($pop0) + i32.const $push2=, 4095 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end100: + .size retitQ, .Lfunc_end100-retitQ + # -- End function + .section .text.fn3Q,"ax",@progbits + .hidden fn3Q # -- Begin function fn3Q + .globl fn3Q + .type fn3Q,@function +fn3Q: # @fn3Q + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, sQ($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 4095 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, -4096 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store sQ($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end101: + .size fn3Q, .Lfunc_end101-fn3Q + # -- End function + .section .text.testQ,"ax",@progbits + .hidden testQ # -- Begin function testQ + .globl testQ + .type testQ,@function +testQ: # @testQ + .local i32, i32 +# BB#0: # %if.end75 + i32.const $push0=, 0 + i32.const $push155=, 0 + i32.load $push1=, myrnd.s($pop155) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push154=, $pop3, $pop4 + tee_local $push153=, $0=, $pop154 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop153, $pop5 + i32.store8 sQ($pop0), $pop6 + i32.const $push152=, 0 + i32.const $push151=, 1103515245 + i32.mul $push7=, $0, $pop151 + i32.const $push150=, 12345 + i32.add $push149=, $pop7, $pop150 + tee_local $push148=, $0=, $pop149 + i32.const $push147=, 16 + i32.shr_u $push8=, $pop148, $pop147 + i32.store8 sQ+1($pop152), $pop8 + i32.const $push146=, 0 + i32.const $push145=, 1103515245 + i32.mul $push9=, $0, $pop145 + i32.const $push144=, 12345 + i32.add $push143=, $pop9, $pop144 + tee_local $push142=, $0=, $pop143 + i32.const $push141=, 16 + i32.shr_u $push10=, $pop142, $pop141 + i32.store8 sQ+2($pop146), $pop10 + i32.const $push140=, 0 + i32.const $push139=, 1103515245 + i32.mul $push11=, $0, $pop139 + i32.const $push138=, 12345 + i32.add $push137=, $pop11, $pop138 + tee_local $push136=, $0=, $pop137 + i32.const $push135=, 16 + i32.shr_u $push12=, $pop136, $pop135 + i32.store8 sQ+3($pop140), $pop12 + i32.const $push134=, 0 + i32.const $push133=, 1103515245 + i32.mul $push13=, $0, $pop133 + i32.const $push132=, 12345 + i32.add $push131=, $pop13, $pop132 + tee_local $push130=, $0=, $pop131 + i32.const $push129=, 16 + i32.shr_u $push14=, $pop130, $pop129 + i32.store8 sQ+4($pop134), $pop14 + i32.const $push128=, 0 + i32.const $push127=, 1103515245 + i32.mul $push15=, $0, $pop127 + i32.const $push126=, 12345 + i32.add $push125=, $pop15, $pop126 + tee_local $push124=, $0=, $pop125 + i32.const $push123=, 16 + i32.shr_u $push16=, $pop124, $pop123 + i32.store8 sQ+5($pop128), $pop16 + i32.const $push122=, 0 + i32.const $push121=, 1103515245 + i32.mul $push17=, $0, $pop121 + i32.const $push120=, 12345 + i32.add $push119=, $pop17, $pop120 + tee_local $push118=, $0=, $pop119 + i32.const $push117=, 16 + i32.shr_u $push18=, $pop118, $pop117 + i32.store8 sQ+6($pop122), $pop18 + i32.const $push116=, 0 + i32.const $push115=, 1103515245 + i32.mul $push19=, $0, $pop115 + i32.const $push114=, 12345 + i32.add $push113=, $pop19, $pop114 + tee_local $push112=, $0=, $pop113 + i32.const $push111=, 16 + i32.shr_u $push20=, $pop112, $pop111 + i32.store8 sQ+7($pop116), $pop20 + i32.const $push110=, 0 + i32.const $push109=, 1103515245 + i32.mul $push21=, $0, $pop109 + i32.const $push108=, 12345 + i32.add $push107=, $pop21, $pop108 + tee_local $push106=, $0=, $pop107 + i32.const $push105=, 16 + i32.shr_u $push22=, $pop106, $pop105 + i32.store8 sQ+8($pop110), $pop22 + i32.const $push104=, 0 + i32.const $push103=, 1103515245 + i32.mul $push23=, $0, $pop103 + i32.const $push102=, 12345 + i32.add $push101=, $pop23, $pop102 + tee_local $push100=, $0=, $pop101 + i32.const $push99=, 16 + i32.shr_u $push24=, $pop100, $pop99 + i32.store8 sQ+9($pop104), $pop24 + i32.const $push98=, 0 + i32.const $push97=, 1103515245 + i32.mul $push25=, $0, $pop97 + i32.const $push96=, 12345 + i32.add $push95=, $pop25, $pop96 + tee_local $push94=, $0=, $pop95 + i32.const $push93=, 16 + i32.shr_u $push26=, $pop94, $pop93 + i32.store8 sQ+10($pop98), $pop26 + i32.const $push92=, 0 + i32.const $push91=, 1103515245 + i32.mul $push27=, $0, $pop91 + i32.const $push90=, 12345 + i32.add $push89=, $pop27, $pop90 + tee_local $push88=, $0=, $pop89 + i32.const $push87=, 16 + i32.shr_u $push28=, $pop88, $pop87 + i32.store8 sQ+11($pop92), $pop28 + i32.const $push86=, 0 + i32.const $push85=, 1103515245 + i32.mul $push29=, $0, $pop85 + i32.const $push84=, 12345 + i32.add $push83=, $pop29, $pop84 + tee_local $push82=, $0=, $pop83 + i32.const $push81=, 16 + i32.shr_u $push30=, $pop82, $pop81 + i32.store8 sQ+12($pop86), $pop30 + i32.const $push80=, 0 + i32.const $push79=, 1103515245 + i32.mul $push31=, $0, $pop79 + i32.const $push78=, 12345 + i32.add $push77=, $pop31, $pop78 + tee_local $push76=, $0=, $pop77 + i32.const $push75=, 16 + i32.shr_u $push32=, $pop76, $pop75 + i32.store8 sQ+13($pop80), $pop32 + i32.const $push74=, 0 + i32.const $push73=, 1103515245 + i32.mul $push33=, $0, $pop73 + i32.const $push72=, 12345 + i32.add $push71=, $pop33, $pop72 + tee_local $push70=, $0=, $pop71 + i32.const $push69=, 16 + i32.shr_u $push34=, $pop70, $pop69 + i32.store8 sQ+14($pop74), $pop34 + i32.const $push68=, 0 + i32.const $push67=, 1103515245 + i32.mul $push35=, $0, $pop67 + i32.const $push66=, 12345 + i32.add $push65=, $pop35, $pop66 + tee_local $push64=, $0=, $pop65 + i32.const $push63=, 16 + i32.shr_u $push36=, $pop64, $pop63 + i32.store8 sQ+15($pop68), $pop36 + i32.const $push62=, 0 + i32.const $push37=, -341751747 + i32.mul $push38=, $0, $pop37 + i32.const $push39=, 229283573 + i32.add $push61=, $pop38, $pop39 + tee_local $push60=, $0=, $pop61 + i32.const $push59=, 1103515245 + i32.mul $push40=, $pop60, $pop59 + i32.const $push58=, 12345 + i32.add $push57=, $pop40, $pop58 + tee_local $push56=, $1=, $pop57 + i32.store myrnd.s($pop62), $pop56 + i32.const $push55=, 0 + i32.const $push54=, 16 + i32.shr_u $push44=, $1, $pop54 + i32.const $push42=, 2047 + i32.and $push45=, $pop44, $pop42 + i32.const $push53=, 16 + i32.shr_u $push41=, $0, $pop53 + i32.const $push52=, 2047 + i32.and $push43=, $pop41, $pop52 + i32.add $push46=, $pop45, $pop43 + i32.const $push51=, 0 + i32.load $push47=, sQ($pop51) + i32.const $push48=, -4096 + i32.and $push49=, $pop47, $pop48 + i32.or $push50=, $pop46, $pop49 + i32.store sQ($pop55), $pop50 + # fallthrough-return + .endfunc +.Lfunc_end102: + .size testQ, .Lfunc_end102-testQ + # -- End function + .section .text.retmeR,"ax",@progbits + .hidden retmeR # -- Begin function retmeR + .globl retmeR + .type retmeR,@function +retmeR: # @retmeR + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 0($0), $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i64.load $push4=, 0($pop3) + i64.store 0($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end103: + .size retmeR, .Lfunc_end103-retmeR + # -- End function + .section .text.fn1R,"ax",@progbits + .hidden fn1R # -- Begin function fn1R + .globl fn1R + .type fn1R,@function +fn1R: # @fn1R + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sR($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end104: + .size fn1R, .Lfunc_end104-fn1R + # -- End function + .section .text.fn2R,"ax",@progbits + .hidden fn2R # -- Begin function fn2R + .globl fn2R + .type fn2R,@function +fn2R: # @fn2R + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sR($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end105: + .size fn2R, .Lfunc_end105-fn2R + # -- End function + .section .text.retitR,"ax",@progbits + .hidden retitR # -- Begin function retitR + .globl retitR + .type retitR,@function +retitR: # @retitR + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sR($pop0) + i32.const $push2=, 4095 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end106: + .size retitR, .Lfunc_end106-retitR + # -- End function + .section .text.fn3R,"ax",@progbits + .hidden fn3R # -- Begin function fn3R + .globl fn3R + .type fn3R,@function +fn3R: # @fn3R + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, sR($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 4095 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, -4096 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store sR($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end107: + .size fn3R, .Lfunc_end107-fn3R + # -- End function + .section .text.testR,"ax",@progbits + .hidden testR # -- Begin function testR + .globl testR + .type testR,@function +testR: # @testR + .local i32, i32 +# BB#0: # %if.end75 + i32.const $push0=, 0 + i32.const $push155=, 0 + i32.load $push1=, myrnd.s($pop155) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push154=, $pop3, $pop4 + tee_local $push153=, $0=, $pop154 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop153, $pop5 + i32.store8 sR($pop0), $pop6 + i32.const $push152=, 0 + i32.const $push151=, 1103515245 + i32.mul $push7=, $0, $pop151 + i32.const $push150=, 12345 + i32.add $push149=, $pop7, $pop150 + tee_local $push148=, $0=, $pop149 + i32.const $push147=, 16 + i32.shr_u $push8=, $pop148, $pop147 + i32.store8 sR+1($pop152), $pop8 + i32.const $push146=, 0 + i32.const $push145=, 1103515245 + i32.mul $push9=, $0, $pop145 + i32.const $push144=, 12345 + i32.add $push143=, $pop9, $pop144 + tee_local $push142=, $0=, $pop143 + i32.const $push141=, 16 + i32.shr_u $push10=, $pop142, $pop141 + i32.store8 sR+2($pop146), $pop10 + i32.const $push140=, 0 + i32.const $push139=, 1103515245 + i32.mul $push11=, $0, $pop139 + i32.const $push138=, 12345 + i32.add $push137=, $pop11, $pop138 + tee_local $push136=, $0=, $pop137 + i32.const $push135=, 16 + i32.shr_u $push12=, $pop136, $pop135 + i32.store8 sR+3($pop140), $pop12 + i32.const $push134=, 0 + i32.const $push133=, 1103515245 + i32.mul $push13=, $0, $pop133 + i32.const $push132=, 12345 + i32.add $push131=, $pop13, $pop132 + tee_local $push130=, $0=, $pop131 + i32.const $push129=, 16 + i32.shr_u $push14=, $pop130, $pop129 + i32.store8 sR+4($pop134), $pop14 + i32.const $push128=, 0 + i32.const $push127=, 1103515245 + i32.mul $push15=, $0, $pop127 + i32.const $push126=, 12345 + i32.add $push125=, $pop15, $pop126 + tee_local $push124=, $0=, $pop125 + i32.const $push123=, 16 + i32.shr_u $push16=, $pop124, $pop123 + i32.store8 sR+5($pop128), $pop16 + i32.const $push122=, 0 + i32.const $push121=, 1103515245 + i32.mul $push17=, $0, $pop121 + i32.const $push120=, 12345 + i32.add $push119=, $pop17, $pop120 + tee_local $push118=, $0=, $pop119 + i32.const $push117=, 16 + i32.shr_u $push18=, $pop118, $pop117 + i32.store8 sR+6($pop122), $pop18 + i32.const $push116=, 0 + i32.const $push115=, 1103515245 + i32.mul $push19=, $0, $pop115 + i32.const $push114=, 12345 + i32.add $push113=, $pop19, $pop114 + tee_local $push112=, $0=, $pop113 + i32.const $push111=, 16 + i32.shr_u $push20=, $pop112, $pop111 + i32.store8 sR+7($pop116), $pop20 + i32.const $push110=, 0 + i32.const $push109=, 1103515245 + i32.mul $push21=, $0, $pop109 + i32.const $push108=, 12345 + i32.add $push107=, $pop21, $pop108 + tee_local $push106=, $0=, $pop107 + i32.const $push105=, 16 + i32.shr_u $push22=, $pop106, $pop105 + i32.store8 sR+8($pop110), $pop22 + i32.const $push104=, 0 + i32.const $push103=, 1103515245 + i32.mul $push23=, $0, $pop103 + i32.const $push102=, 12345 + i32.add $push101=, $pop23, $pop102 + tee_local $push100=, $0=, $pop101 + i32.const $push99=, 16 + i32.shr_u $push24=, $pop100, $pop99 + i32.store8 sR+9($pop104), $pop24 + i32.const $push98=, 0 + i32.const $push97=, 1103515245 + i32.mul $push25=, $0, $pop97 + i32.const $push96=, 12345 + i32.add $push95=, $pop25, $pop96 + tee_local $push94=, $0=, $pop95 + i32.const $push93=, 16 + i32.shr_u $push26=, $pop94, $pop93 + i32.store8 sR+10($pop98), $pop26 + i32.const $push92=, 0 + i32.const $push91=, 1103515245 + i32.mul $push27=, $0, $pop91 + i32.const $push90=, 12345 + i32.add $push89=, $pop27, $pop90 + tee_local $push88=, $0=, $pop89 + i32.const $push87=, 16 + i32.shr_u $push28=, $pop88, $pop87 + i32.store8 sR+11($pop92), $pop28 + i32.const $push86=, 0 + i32.const $push85=, 1103515245 + i32.mul $push29=, $0, $pop85 + i32.const $push84=, 12345 + i32.add $push83=, $pop29, $pop84 + tee_local $push82=, $0=, $pop83 + i32.const $push81=, 16 + i32.shr_u $push30=, $pop82, $pop81 + i32.store8 sR+12($pop86), $pop30 + i32.const $push80=, 0 + i32.const $push79=, 1103515245 + i32.mul $push31=, $0, $pop79 + i32.const $push78=, 12345 + i32.add $push77=, $pop31, $pop78 + tee_local $push76=, $0=, $pop77 + i32.const $push75=, 16 + i32.shr_u $push32=, $pop76, $pop75 + i32.store8 sR+13($pop80), $pop32 + i32.const $push74=, 0 + i32.const $push73=, 1103515245 + i32.mul $push33=, $0, $pop73 + i32.const $push72=, 12345 + i32.add $push71=, $pop33, $pop72 + tee_local $push70=, $0=, $pop71 + i32.const $push69=, 16 + i32.shr_u $push34=, $pop70, $pop69 + i32.store8 sR+14($pop74), $pop34 + i32.const $push68=, 0 + i32.const $push67=, 1103515245 + i32.mul $push35=, $0, $pop67 + i32.const $push66=, 12345 + i32.add $push65=, $pop35, $pop66 + tee_local $push64=, $0=, $pop65 + i32.const $push63=, 16 + i32.shr_u $push36=, $pop64, $pop63 + i32.store8 sR+15($pop68), $pop36 + i32.const $push62=, 0 + i32.const $push37=, -341751747 + i32.mul $push38=, $0, $pop37 + i32.const $push39=, 229283573 + i32.add $push61=, $pop38, $pop39 + tee_local $push60=, $0=, $pop61 + i32.const $push59=, 1103515245 + i32.mul $push40=, $pop60, $pop59 + i32.const $push58=, 12345 + i32.add $push57=, $pop40, $pop58 + tee_local $push56=, $1=, $pop57 + i32.store myrnd.s($pop62), $pop56 + i32.const $push55=, 0 + i32.const $push54=, 16 + i32.shr_u $push44=, $1, $pop54 + i32.const $push42=, 2047 + i32.and $push45=, $pop44, $pop42 + i32.const $push53=, 16 + i32.shr_u $push41=, $0, $pop53 + i32.const $push52=, 2047 + i32.and $push43=, $pop41, $pop52 + i32.add $push46=, $pop45, $pop43 + i32.const $push51=, 0 + i32.load $push47=, sR($pop51) + i32.const $push48=, -4096 + i32.and $push49=, $pop47, $pop48 + i32.or $push50=, $pop46, $pop49 + i32.store sR($pop55), $pop50 + # fallthrough-return + .endfunc +.Lfunc_end108: + .size testR, .Lfunc_end108-testR + # -- End function + .section .text.retmeS,"ax",@progbits + .hidden retmeS # -- Begin function retmeS + .globl retmeS + .type retmeS,@function +retmeS: # @retmeS + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 0($0), $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i64.load $push4=, 0($pop3) + i64.store 0($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end109: + .size retmeS, .Lfunc_end109-retmeS + # -- End function + .section .text.fn1S,"ax",@progbits + .hidden fn1S # -- Begin function fn1S + .globl fn1S + .type fn1S,@function +fn1S: # @fn1S + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sS($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 1 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end110: + .size fn1S, .Lfunc_end110-fn1S + # -- End function + .section .text.fn2S,"ax",@progbits + .hidden fn2S # -- Begin function fn2S + .globl fn2S + .type fn2S,@function +fn2S: # @fn2S + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sS($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 1 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end111: + .size fn2S, .Lfunc_end111-fn2S + # -- End function + .section .text.retitS,"ax",@progbits + .hidden retitS # -- Begin function retitS + .globl retitS + .type retitS,@function +retitS: # @retitS + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sS($pop0) + i32.const $push2=, 1 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end112: + .size retitS, .Lfunc_end112-retitS + # -- End function + .section .text.fn3S,"ax",@progbits + .hidden fn3S # -- Begin function fn3S + .globl fn3S + .type fn3S,@function +fn3S: # @fn3S + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load16_u $push9=, sS($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 1 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, 65534 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store16 sS($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end113: + .size fn3S, .Lfunc_end113-fn3S + # -- End function + .section .text.testS,"ax",@progbits + .hidden testS # -- Begin function testS + .globl testS + .type testS,@function +testS: # @testS + .local i32, i32 +# BB#0: # %if.end90 + i32.const $push0=, 0 + i32.const $push154=, 0 + i32.load $push1=, myrnd.s($pop154) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push153=, $pop3, $pop4 + tee_local $push152=, $0=, $pop153 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop152, $pop5 + i32.store8 sS($pop0), $pop6 + i32.const $push151=, 0 + i32.const $push150=, 1103515245 + i32.mul $push7=, $0, $pop150 + i32.const $push149=, 12345 + i32.add $push148=, $pop7, $pop149 + tee_local $push147=, $0=, $pop148 + i32.const $push146=, 16 + i32.shr_u $push8=, $pop147, $pop146 + i32.store8 sS+1($pop151), $pop8 + i32.const $push145=, 0 + i32.const $push144=, 1103515245 + i32.mul $push9=, $0, $pop144 + i32.const $push143=, 12345 + i32.add $push142=, $pop9, $pop143 + tee_local $push141=, $0=, $pop142 + i32.const $push140=, 16 + i32.shr_u $push10=, $pop141, $pop140 + i32.store8 sS+2($pop145), $pop10 + i32.const $push139=, 0 + i32.const $push138=, 1103515245 + i32.mul $push11=, $0, $pop138 + i32.const $push137=, 12345 + i32.add $push136=, $pop11, $pop137 + tee_local $push135=, $0=, $pop136 + i32.const $push134=, 16 + i32.shr_u $push12=, $pop135, $pop134 + i32.store8 sS+3($pop139), $pop12 + i32.const $push133=, 0 + i32.const $push132=, 1103515245 + i32.mul $push13=, $0, $pop132 + i32.const $push131=, 12345 + i32.add $push130=, $pop13, $pop131 + tee_local $push129=, $0=, $pop130 + i32.const $push128=, 16 + i32.shr_u $push14=, $pop129, $pop128 + i32.store8 sS+4($pop133), $pop14 + i32.const $push127=, 0 + i32.const $push126=, 1103515245 + i32.mul $push15=, $0, $pop126 + i32.const $push125=, 12345 + i32.add $push124=, $pop15, $pop125 + tee_local $push123=, $0=, $pop124 + i32.const $push122=, 16 + i32.shr_u $push16=, $pop123, $pop122 + i32.store8 sS+5($pop127), $pop16 + i32.const $push121=, 0 + i32.const $push120=, 1103515245 + i32.mul $push17=, $0, $pop120 + i32.const $push119=, 12345 + i32.add $push118=, $pop17, $pop119 + tee_local $push117=, $0=, $pop118 + i32.const $push116=, 16 + i32.shr_u $push18=, $pop117, $pop116 + i32.store8 sS+6($pop121), $pop18 + i32.const $push115=, 0 + i32.const $push114=, 1103515245 + i32.mul $push19=, $0, $pop114 + i32.const $push113=, 12345 + i32.add $push112=, $pop19, $pop113 + tee_local $push111=, $0=, $pop112 + i32.const $push110=, 16 + i32.shr_u $push20=, $pop111, $pop110 + i32.store8 sS+7($pop115), $pop20 + i32.const $push109=, 0 + i32.const $push108=, 1103515245 + i32.mul $push21=, $0, $pop108 + i32.const $push107=, 12345 + i32.add $push106=, $pop21, $pop107 + tee_local $push105=, $0=, $pop106 + i32.const $push104=, 16 + i32.shr_u $push22=, $pop105, $pop104 + i32.store8 sS+8($pop109), $pop22 + i32.const $push103=, 0 + i32.const $push102=, 1103515245 + i32.mul $push23=, $0, $pop102 + i32.const $push101=, 12345 + i32.add $push100=, $pop23, $pop101 + tee_local $push99=, $0=, $pop100 + i32.const $push98=, 16 + i32.shr_u $push24=, $pop99, $pop98 + i32.store8 sS+9($pop103), $pop24 + i32.const $push97=, 0 + i32.const $push96=, 1103515245 + i32.mul $push25=, $0, $pop96 + i32.const $push95=, 12345 + i32.add $push94=, $pop25, $pop95 + tee_local $push93=, $0=, $pop94 + i32.const $push92=, 16 + i32.shr_u $push26=, $pop93, $pop92 + i32.store8 sS+10($pop97), $pop26 + i32.const $push91=, 0 + i32.const $push90=, 1103515245 + i32.mul $push27=, $0, $pop90 + i32.const $push89=, 12345 + i32.add $push88=, $pop27, $pop89 + tee_local $push87=, $0=, $pop88 + i32.const $push86=, 16 + i32.shr_u $push28=, $pop87, $pop86 + i32.store8 sS+11($pop91), $pop28 + i32.const $push85=, 0 + i32.const $push84=, 1103515245 + i32.mul $push29=, $0, $pop84 + i32.const $push83=, 12345 + i32.add $push82=, $pop29, $pop83 + tee_local $push81=, $0=, $pop82 + i32.const $push80=, 16 + i32.shr_u $push30=, $pop81, $pop80 + i32.store8 sS+12($pop85), $pop30 + i32.const $push79=, 0 + i32.const $push78=, 1103515245 + i32.mul $push31=, $0, $pop78 + i32.const $push77=, 12345 + i32.add $push76=, $pop31, $pop77 + tee_local $push75=, $0=, $pop76 + i32.const $push74=, 16 + i32.shr_u $push32=, $pop75, $pop74 + i32.store8 sS+13($pop79), $pop32 + i32.const $push73=, 0 + i32.const $push72=, 1103515245 + i32.mul $push33=, $0, $pop72 + i32.const $push71=, 12345 + i32.add $push70=, $pop33, $pop71 + tee_local $push69=, $0=, $pop70 + i32.const $push68=, 16 + i32.shr_u $push34=, $pop69, $pop68 + i32.store8 sS+14($pop73), $pop34 + i32.const $push67=, 0 + i32.const $push66=, 1103515245 + i32.mul $push35=, $0, $pop66 + i32.const $push65=, 12345 + i32.add $push64=, $pop35, $pop65 + tee_local $push63=, $0=, $pop64 + i32.const $push62=, 16 + i32.shr_u $push36=, $pop63, $pop62 + i32.store8 sS+15($pop67), $pop36 + i32.const $push61=, 0 + i32.const $push37=, -341751747 + i32.mul $push38=, $0, $pop37 + i32.const $push39=, 229283573 + i32.add $push60=, $pop38, $pop39 + tee_local $push59=, $0=, $pop60 + i32.const $push58=, 1103515245 + i32.mul $push40=, $pop59, $pop58 + i32.const $push57=, 12345 + i32.add $push56=, $pop40, $pop57 + tee_local $push55=, $1=, $pop56 + i32.store myrnd.s($pop61), $pop55 + i32.const $push54=, 0 + i32.const $push53=, 16 + i32.shr_u $push42=, $1, $pop53 + i32.const $push52=, 16 + i32.shr_u $push41=, $0, $pop52 + i32.add $push43=, $pop42, $pop41 + i32.const $push44=, 1 + i32.and $push45=, $pop43, $pop44 + i32.const $push51=, 0 + i32.load16_u $push46=, sS($pop51) + i32.const $push47=, 65534 + i32.and $push48=, $pop46, $pop47 + i32.or $push49=, $pop45, $pop48 + i32.store16 sS($pop54), $pop49 + block + i32.const $push50=, 1 + i32.eqz $push155=, $pop50 + br_if 0, $pop155 # 0: down to label12 +# BB#1: # %if.end134 + return +.LBB114_2: # %if.then133 + end_block # label12: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end114: + .size testS, .Lfunc_end114-testS + # -- End function + .section .text.retmeT,"ax",@progbits + .hidden retmeT # -- Begin function retmeT + .globl retmeT + .type retmeT,@function +retmeT: # @retmeT + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1):p2align=1 + i32.store 0($0):p2align=1, $pop0 + # fallthrough-return + .endfunc +.Lfunc_end115: + .size retmeT, .Lfunc_end115-retmeT + # -- End function + .section .text.fn1T,"ax",@progbits + .hidden fn1T # -- Begin function fn1T + .globl fn1T + .type fn1T,@function +fn1T: # @fn1T + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sT($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 1 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end116: + .size fn1T, .Lfunc_end116-fn1T + # -- End function + .section .text.fn2T,"ax",@progbits + .hidden fn2T # -- Begin function fn2T + .globl fn2T + .type fn2T,@function +fn2T: # @fn2T + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sT($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 1 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end117: + .size fn2T, .Lfunc_end117-fn2T + # -- End function + .section .text.retitT,"ax",@progbits + .hidden retitT # -- Begin function retitT + .globl retitT + .type retitT,@function +retitT: # @retitT + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sT($pop0) + i32.const $push2=, 1 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end118: + .size retitT, .Lfunc_end118-retitT + # -- End function + .section .text.fn3T,"ax",@progbits + .hidden fn3T # -- Begin function fn3T + .globl fn3T + .type fn3T,@function +fn3T: # @fn3T + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load16_u $push9=, sT($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 1 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, 65534 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store16 sT($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end119: + .size fn3T, .Lfunc_end119-fn3T + # -- End function + .section .text.testT,"ax",@progbits + .hidden testT # -- Begin function testT + .globl testT + .type testT,@function +testT: # @testT + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push75=, 0 + i32.const $push74=, 0 + i32.load $push0=, myrnd.s($pop74) + i32.const $push73=, 1103515245 + i32.mul $push1=, $pop0, $pop73 + i32.const $push72=, 12345 + i32.add $push71=, $pop1, $pop72 + tee_local $push70=, $0=, $pop71 + i32.const $push69=, 16 + i32.shr_u $push2=, $pop70, $pop69 + i32.store8 sT($pop75), $pop2 + i32.const $push68=, 0 + i32.const $push67=, 1103515245 + i32.mul $push3=, $0, $pop67 + i32.const $push66=, 12345 + i32.add $push65=, $pop3, $pop66 + tee_local $push64=, $0=, $pop65 + i32.const $push63=, 16 + i32.shr_u $push4=, $pop64, $pop63 + i32.store8 sT+1($pop68), $pop4 + i32.const $push62=, 0 + i32.const $push61=, 1103515245 + i32.mul $push5=, $0, $pop61 + i32.const $push60=, 12345 + i32.add $push59=, $pop5, $pop60 + tee_local $push58=, $0=, $pop59 + i32.const $push57=, 16 + i32.shr_u $push6=, $pop58, $pop57 + i32.store8 sT+2($pop62), $pop6 + i32.const $push56=, 0 + i32.const $push55=, 1103515245 + i32.mul $push7=, $0, $pop55 + i32.const $push54=, 12345 + i32.add $push53=, $pop7, $pop54 + tee_local $push52=, $0=, $pop53 + i32.const $push51=, 16 + i32.shr_u $push8=, $pop52, $pop51 + i32.store8 sT+3($pop56), $pop8 + i32.const $push50=, 0 + i32.const $push49=, 1103515245 + i32.mul $push11=, $0, $pop49 + i32.const $push48=, 12345 + i32.add $push47=, $pop11, $pop48 + tee_local $push46=, $0=, $pop47 + i32.const $push45=, 16 + i32.shr_u $push44=, $pop46, $pop45 + tee_local $push43=, $2=, $pop44 + i32.const $push42=, 1 + i32.and $push12=, $pop43, $pop42 + i32.const $push41=, 0 + i32.load16_u $push9=, sT($pop41) + i32.const $push10=, -2 + i32.and $push40=, $pop9, $pop10 + tee_local $push39=, $1=, $pop40 + i32.or $push13=, $pop12, $pop39 + i32.store16 sT($pop50), $pop13 + i32.const $push38=, 0 + i32.const $push37=, 1103515245 + i32.mul $push14=, $0, $pop37 + i32.const $push36=, 12345 + i32.add $push35=, $pop14, $pop36 + tee_local $push34=, $0=, $pop35 + i32.store myrnd.s($pop38), $pop34 + block + i32.const $push33=, 16 + i32.shr_u $push32=, $0, $pop33 + tee_local $push31=, $3=, $pop32 + i32.add $push15=, $pop31, $2 + i32.const $push30=, 0 + i32.load $push16=, sT($pop30) + i32.add $push17=, $3, $pop16 + i32.xor $push18=, $pop15, $pop17 + i32.const $push29=, 1 + i32.and $push19=, $pop18, $pop29 + br_if 0, $pop19 # 0: down to label13 +# BB#1: # %if.end94 + i32.const $push87=, 0 + i32.const $push20=, -2139243339 + i32.mul $push21=, $0, $pop20 + i32.const $push22=, -1492899873 + i32.add $push86=, $pop21, $pop22 + tee_local $push85=, $0=, $pop86 + i32.const $push84=, 1103515245 + i32.mul $push23=, $pop85, $pop84 + i32.const $push83=, 12345 + i32.add $push82=, $pop23, $pop83 + tee_local $push81=, $2=, $pop82 + i32.store myrnd.s($pop87), $pop81 + i32.const $push80=, 0 + i32.const $push79=, 16 + i32.shr_u $push25=, $2, $pop79 + i32.const $push78=, 16 + i32.shr_u $push24=, $0, $pop78 + i32.add $push26=, $pop25, $pop24 + i32.const $push77=, 1 + i32.and $push27=, $pop26, $pop77 + i32.or $push28=, $pop27, $1 + i32.store16 sT($pop80), $pop28 + i32.const $push76=, 1 + i32.eqz $push88=, $pop76 + br_if 0, $pop88 # 0: down to label13 +# BB#2: # %if.end140 + return +.LBB120_3: # %if.then + end_block # label13: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end120: + .size testT, .Lfunc_end120-testT + # -- End function + .section .text.retmeU,"ax",@progbits + .hidden retmeU # -- Begin function retmeU + .globl retmeU + .type retmeU,@function +retmeU: # @retmeU + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 0($0), $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i64.load $push4=, 0($pop3) + i64.store 0($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end121: + .size retmeU, .Lfunc_end121-retmeU + # -- End function + .section .text.fn1U,"ax",@progbits + .hidden fn1U # -- Begin function fn1U + .globl fn1U + .type fn1U,@function +fn1U: # @fn1U + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sU($pop0) + i32.const $push2=, 6 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 1 + i32.and $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end122: + .size fn1U, .Lfunc_end122-fn1U + # -- End function + .section .text.fn2U,"ax",@progbits + .hidden fn2U # -- Begin function fn2U + .globl fn2U + .type fn2U,@function +fn2U: # @fn2U + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sU($pop0) + i32.const $push2=, 6 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 1 + i32.and $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end123: + .size fn2U, .Lfunc_end123-fn2U + # -- End function + .section .text.retitU,"ax",@progbits + .hidden retitU # -- Begin function retitU + .globl retitU + .type retitU,@function +retitU: # @retitU + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sU($pop0) + i32.const $push2=, 6 + i32.shr_u $push3=, $pop1, $pop2 + i32.const $push4=, 1 + i32.and $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end124: + .size retitU, .Lfunc_end124-retitU + # -- End function + .section .text.fn3U,"ax",@progbits + .hidden fn3U # -- Begin function fn3U + .globl fn3U + .type fn3U,@function +fn3U: # @fn3U + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push16=, 0 + i32.load16_u $push15=, sU($pop16) + tee_local $push14=, $1=, $pop15 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop14, $pop3 + i32.add $push13=, $pop4, $0 + tee_local $push12=, $0=, $pop13 + i32.const $push11=, 6 + i32.shl $push5=, $pop12, $pop11 + i32.const $push6=, 64 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, 65471 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store16 sU($pop0), $pop8 + i32.const $push9=, 1 + i32.and $push10=, $0, $pop9 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end125: + .size fn3U, .Lfunc_end125-fn3U + # -- End function + .section .text.testU,"ax",@progbits + .hidden testU # -- Begin function testU + .globl testU + .type testU,@function +testU: # @testU + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push213=, 0 + i32.load $push1=, myrnd.s($pop213) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push212=, $pop3, $pop4 + tee_local $push211=, $2=, $pop212 + i32.const $push210=, 16 + i32.shr_u $push5=, $pop211, $pop210 + i32.store8 sU($pop0), $pop5 + i32.const $push209=, 0 + i32.const $push208=, 1103515245 + i32.mul $push6=, $2, $pop208 + i32.const $push207=, 12345 + i32.add $push206=, $pop6, $pop207 + tee_local $push205=, $2=, $pop206 + i32.const $push204=, 16 + i32.shr_u $push7=, $pop205, $pop204 + i32.store8 sU+1($pop209), $pop7 + i32.const $push203=, 0 + i32.const $push202=, 1103515245 + i32.mul $push8=, $2, $pop202 + i32.const $push201=, 12345 + i32.add $push200=, $pop8, $pop201 + tee_local $push199=, $2=, $pop200 + i32.const $push198=, 16 + i32.shr_u $push9=, $pop199, $pop198 + i32.store8 sU+2($pop203), $pop9 + i32.const $push197=, 0 + i32.const $push196=, 1103515245 + i32.mul $push10=, $2, $pop196 + i32.const $push195=, 12345 + i32.add $push194=, $pop10, $pop195 + tee_local $push193=, $2=, $pop194 + i32.const $push192=, 16 + i32.shr_u $push11=, $pop193, $pop192 + i32.store8 sU+3($pop197), $pop11 + i32.const $push191=, 0 + i32.const $push190=, 1103515245 + i32.mul $push12=, $2, $pop190 + i32.const $push189=, 12345 + i32.add $push188=, $pop12, $pop189 + tee_local $push187=, $2=, $pop188 + i32.const $push186=, 16 + i32.shr_u $push13=, $pop187, $pop186 + i32.store8 sU+4($pop191), $pop13 + i32.const $push185=, 0 + i32.const $push184=, 1103515245 + i32.mul $push14=, $2, $pop184 + i32.const $push183=, 12345 + i32.add $push182=, $pop14, $pop183 + tee_local $push181=, $2=, $pop182 + i32.const $push180=, 16 + i32.shr_u $push15=, $pop181, $pop180 + i32.store8 sU+5($pop185), $pop15 + i32.const $push179=, 0 + i32.const $push178=, 1103515245 + i32.mul $push16=, $2, $pop178 + i32.const $push177=, 12345 + i32.add $push176=, $pop16, $pop177 + tee_local $push175=, $2=, $pop176 + i32.const $push174=, 16 + i32.shr_u $push17=, $pop175, $pop174 + i32.store8 sU+6($pop179), $pop17 + i32.const $push173=, 0 + i32.const $push172=, 1103515245 + i32.mul $push18=, $2, $pop172 + i32.const $push171=, 12345 + i32.add $push170=, $pop18, $pop171 + tee_local $push169=, $2=, $pop170 + i32.const $push168=, 16 + i32.shr_u $push19=, $pop169, $pop168 + i32.store8 sU+7($pop173), $pop19 + i32.const $push167=, 0 + i32.const $push166=, 1103515245 + i32.mul $push20=, $2, $pop166 + i32.const $push165=, 12345 + i32.add $push164=, $pop20, $pop165 + tee_local $push163=, $2=, $pop164 + i32.const $push162=, 16 + i32.shr_u $push21=, $pop163, $pop162 + i32.store8 sU+8($pop167), $pop21 + i32.const $push161=, 0 + i32.const $push160=, 1103515245 + i32.mul $push22=, $2, $pop160 + i32.const $push159=, 12345 + i32.add $push158=, $pop22, $pop159 + tee_local $push157=, $2=, $pop158 + i32.const $push156=, 16 + i32.shr_u $push23=, $pop157, $pop156 + i32.store8 sU+9($pop161), $pop23 + i32.const $push155=, 0 + i32.const $push154=, 1103515245 + i32.mul $push24=, $2, $pop154 + i32.const $push153=, 12345 + i32.add $push152=, $pop24, $pop153 + tee_local $push151=, $2=, $pop152 + i32.const $push150=, 16 + i32.shr_u $push25=, $pop151, $pop150 + i32.store8 sU+10($pop155), $pop25 + i32.const $push149=, 0 + i32.const $push148=, 1103515245 + i32.mul $push26=, $2, $pop148 + i32.const $push147=, 12345 + i32.add $push146=, $pop26, $pop147 + tee_local $push145=, $2=, $pop146 + i32.const $push144=, 16 + i32.shr_u $push27=, $pop145, $pop144 + i32.store8 sU+11($pop149), $pop27 + i32.const $push143=, 0 + i32.const $push142=, 1103515245 + i32.mul $push28=, $2, $pop142 + i32.const $push141=, 12345 + i32.add $push140=, $pop28, $pop141 + tee_local $push139=, $2=, $pop140 + i32.const $push138=, 16 + i32.shr_u $push29=, $pop139, $pop138 + i32.store8 sU+12($pop143), $pop29 + i32.const $push137=, 0 + i32.const $push136=, 1103515245 + i32.mul $push30=, $2, $pop136 + i32.const $push135=, 12345 + i32.add $push134=, $pop30, $pop135 + tee_local $push133=, $2=, $pop134 + i32.const $push132=, 16 + i32.shr_u $push31=, $pop133, $pop132 + i32.store8 sU+13($pop137), $pop31 + i32.const $push131=, 0 + i32.const $push130=, 1103515245 + i32.mul $push32=, $2, $pop130 + i32.const $push129=, 12345 + i32.add $push128=, $pop32, $pop129 + tee_local $push127=, $2=, $pop128 + i32.const $push126=, 16 + i32.shr_u $push33=, $pop127, $pop126 + i32.store8 sU+14($pop131), $pop33 + i32.const $push125=, 0 + i32.const $push124=, 1103515245 + i32.mul $push34=, $2, $pop124 + i32.const $push123=, 12345 + i32.add $push122=, $pop34, $pop123 + tee_local $push121=, $2=, $pop122 + i32.const $push120=, 16 + i32.shr_u $push35=, $pop121, $pop120 + i32.store8 sU+15($pop125), $pop35 + i32.const $push119=, 0 + i32.const $push118=, 1103515245 + i32.mul $push36=, $2, $pop118 + i32.const $push117=, 12345 + i32.add $push116=, $pop36, $pop117 + tee_local $push115=, $2=, $pop116 + i32.const $push114=, 1103515245 + i32.mul $push37=, $pop115, $pop114 + i32.const $push113=, 12345 + i32.add $push112=, $pop37, $pop113 + tee_local $push111=, $1=, $pop112 + i32.store myrnd.s($pop119), $pop111 + i32.const $push110=, 0 + i32.const $push109=, 16 + i32.shr_u $push108=, $2, $pop109 + tee_local $push107=, $0=, $pop108 + i32.const $push40=, 2047 + i32.and $push106=, $pop107, $pop40 + tee_local $push105=, $3=, $pop106 + i32.const $push41=, 6 + i32.shl $push42=, $pop105, $pop41 + i32.const $push43=, 64 + i32.and $push44=, $pop42, $pop43 + i32.const $push104=, 0 + i32.load16_u $push38=, sU($pop104) + i32.const $push39=, -65 + i32.and $push103=, $pop38, $pop39 + tee_local $push102=, $2=, $pop103 + i32.or $push101=, $pop44, $pop102 + tee_local $push100=, $4=, $pop101 + i32.store16 sU($pop110), $pop100 + block + i32.const $push45=, 65472 + i32.and $push46=, $4, $pop45 + i32.const $push99=, 6 + i32.shr_u $push98=, $pop46, $pop99 + tee_local $push97=, $4=, $pop98 + i32.xor $push47=, $pop97, $3 + i32.const $push96=, 1 + i32.and $push48=, $pop47, $pop96 + br_if 0, $pop48 # 0: down to label14 +# BB#1: # %lor.lhs.false41 + i32.const $push217=, 16 + i32.shr_u $push216=, $1, $pop217 + tee_local $push215=, $3=, $pop216 + i32.add $push50=, $pop215, $4 + i32.add $push49=, $3, $0 + i32.xor $push51=, $pop50, $pop49 + i32.const $push214=, 1 + i32.and $push52=, $pop51, $pop214 + br_if 0, $pop52 # 0: down to label14 +# BB#2: # %if.end + i32.const $push57=, 0 + i32.const $push53=, 1103515245 + i32.mul $push54=, $1, $pop53 + i32.const $push55=, 12345 + i32.add $push235=, $pop54, $pop55 + tee_local $push234=, $0=, $pop235 + i32.const $push233=, 1103515245 + i32.mul $push56=, $pop234, $pop233 + i32.const $push232=, 12345 + i32.add $push231=, $pop56, $pop232 + tee_local $push230=, $1=, $pop231 + i32.store myrnd.s($pop57), $pop230 + i32.const $push229=, 0 + i32.const $push228=, 16 + i32.shr_u $push227=, $0, $pop228 + tee_local $push226=, $0=, $pop227 + i32.const $push58=, 2047 + i32.and $push225=, $pop226, $pop58 + tee_local $push224=, $3=, $pop225 + i32.const $push59=, 6 + i32.shl $push60=, $pop224, $pop59 + i32.const $push61=, 64 + i32.and $push62=, $pop60, $pop61 + i32.or $push223=, $pop62, $2 + tee_local $push222=, $4=, $pop223 + i32.store16 sU($pop229), $pop222 + i32.const $push63=, 65472 + i32.and $push64=, $4, $pop63 + i32.const $push221=, 6 + i32.shr_u $push220=, $pop64, $pop221 + tee_local $push219=, $4=, $pop220 + i32.xor $push65=, $pop219, $3 + i32.const $push218=, 1 + i32.and $push66=, $pop65, $pop218 + br_if 0, $pop66 # 0: down to label14 +# BB#3: # %lor.lhs.false85 + i32.const $push239=, 16 + i32.shr_u $push238=, $1, $pop239 + tee_local $push237=, $3=, $pop238 + i32.add $push68=, $pop237, $4 + i32.add $push67=, $3, $0 + i32.xor $push69=, $pop68, $pop67 + i32.const $push236=, 1 + i32.and $push70=, $pop69, $pop236 + br_if 0, $pop70 # 0: down to label14 +# BB#4: # %lor.lhs.false130 + i32.const $push75=, 0 + i32.const $push71=, 1103515245 + i32.mul $push72=, $1, $pop71 + i32.const $push73=, 12345 + i32.add $push253=, $pop72, $pop73 + tee_local $push252=, $1=, $pop253 + i32.const $push251=, 1103515245 + i32.mul $push74=, $pop252, $pop251 + i32.const $push250=, 12345 + i32.add $push249=, $pop74, $pop250 + tee_local $push248=, $0=, $pop249 + i32.store myrnd.s($pop75), $pop248 + i32.const $push247=, 0 + i32.const $push76=, 16 + i32.shr_u $push246=, $0, $pop76 + tee_local $push245=, $0=, $pop246 + i32.const $push77=, 2047 + i32.and $push78=, $pop245, $pop77 + i32.const $push79=, 10 + i32.shr_u $push80=, $1, $pop79 + i32.const $push81=, 64 + i32.and $push82=, $pop80, $pop81 + i32.or $push83=, $pop82, $2 + i32.const $push84=, 65472 + i32.and $push85=, $pop83, $pop84 + i32.const $push86=, 6 + i32.shr_u $push87=, $pop85, $pop86 + i32.add $push244=, $pop78, $pop87 + tee_local $push243=, $3=, $pop244 + i32.const $push242=, 6 + i32.shl $push88=, $pop243, $pop242 + i32.const $push241=, 64 + i32.and $push89=, $pop88, $pop241 + i32.or $push90=, $pop89, $2 + i32.store16 sU($pop247), $pop90 + i32.const $push240=, 16 + i32.shr_u $push91=, $1, $pop240 + i32.add $push92=, $0, $pop91 + i32.xor $push93=, $pop92, $3 + i32.const $push94=, 1 + i32.and $push95=, $pop93, $pop94 + br_if 0, $pop95 # 0: down to label14 +# BB#5: # %if.end136 + return +.LBB126_6: # %if.then + end_block # label14: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end126: + .size testU, .Lfunc_end126-testU + # -- End function + .section .text.retmeV,"ax",@progbits + .hidden retmeV # -- Begin function retmeV + .globl retmeV + .type retmeV,@function +retmeV: # @retmeV + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1):p2align=1 + i32.store 0($0):p2align=1, $pop0 + # fallthrough-return + .endfunc +.Lfunc_end127: + .size retmeV, .Lfunc_end127-retmeV + # -- End function + .section .text.fn1V,"ax",@progbits + .hidden fn1V # -- Begin function fn1V + .globl fn1V + .type fn1V,@function +fn1V: # @fn1V + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sV($pop0) + i32.const $push2=, 8 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 1 + i32.and $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end128: + .size fn1V, .Lfunc_end128-fn1V + # -- End function + .section .text.fn2V,"ax",@progbits + .hidden fn2V # -- Begin function fn2V + .globl fn2V + .type fn2V,@function +fn2V: # @fn2V + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, sV+1($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 1 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end129: + .size fn2V, .Lfunc_end129-fn2V + # -- End function + .section .text.retitV,"ax",@progbits + .hidden retitV # -- Begin function retitV + .globl retitV + .type retitV,@function +retitV: # @retitV + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, sV+1($pop0) + i32.const $push2=, 1 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end130: + .size retitV, .Lfunc_end130-retitV + # -- End function + .section .text.fn3V,"ax",@progbits + .hidden fn3V # -- Begin function fn3V + .globl fn3V + .type fn3V,@function +fn3V: # @fn3V + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push16=, 0 + i32.load16_u $push15=, sV($pop16) + tee_local $push14=, $1=, $pop15 + i32.const $push3=, 8 + i32.shr_u $push4=, $pop14, $pop3 + i32.add $push13=, $pop4, $0 + tee_local $push12=, $0=, $pop13 + i32.const $push11=, 8 + i32.shl $push5=, $pop12, $pop11 + i32.const $push6=, 256 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, 65279 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store16 sV($pop0), $pop8 + i32.const $push9=, 1 + i32.and $push10=, $0, $pop9 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end131: + .size fn3V, .Lfunc_end131-fn3V + # -- End function + .section .text.testV,"ax",@progbits + .hidden testV # -- Begin function testV + .globl testV + .type testV,@function +testV: # @testV + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push105=, 0 + i32.const $push104=, 0 + i32.load $push0=, myrnd.s($pop104) + i32.const $push103=, 1103515245 + i32.mul $push1=, $pop0, $pop103 + i32.const $push102=, 12345 + i32.add $push101=, $pop1, $pop102 + tee_local $push100=, $1=, $pop101 + i32.const $push99=, 16 + i32.shr_u $push2=, $pop100, $pop99 + i32.store8 sV($pop105), $pop2 + i32.const $push98=, 0 + i32.const $push97=, 1103515245 + i32.mul $push3=, $1, $pop97 + i32.const $push96=, 12345 + i32.add $push95=, $pop3, $pop96 + tee_local $push94=, $1=, $pop95 + i32.const $push93=, 16 + i32.shr_u $push4=, $pop94, $pop93 + i32.store8 sV+1($pop98), $pop4 + i32.const $push92=, 0 + i32.const $push91=, 1103515245 + i32.mul $push5=, $1, $pop91 + i32.const $push90=, 12345 + i32.add $push89=, $pop5, $pop90 + tee_local $push88=, $1=, $pop89 + i32.const $push87=, 16 + i32.shr_u $push6=, $pop88, $pop87 + i32.store8 sV+2($pop92), $pop6 + i32.const $push86=, 0 + i32.const $push85=, 1103515245 + i32.mul $push7=, $1, $pop85 + i32.const $push84=, 12345 + i32.add $push83=, $pop7, $pop84 + tee_local $push82=, $1=, $pop83 + i32.const $push81=, 16 + i32.shr_u $push8=, $pop82, $pop81 + i32.store8 sV+3($pop86), $pop8 + i32.const $push80=, 0 + i32.const $push79=, 1103515245 + i32.mul $push11=, $1, $pop79 + i32.const $push78=, 12345 + i32.add $push77=, $pop11, $pop78 + tee_local $push76=, $2=, $pop77 + i32.const $push75=, 8 + i32.shr_u $push12=, $pop76, $pop75 + i32.const $push74=, 256 + i32.and $push13=, $pop12, $pop74 + i32.const $push73=, 0 + i32.load16_u $push9=, sV($pop73) + i32.const $push10=, -257 + i32.and $push72=, $pop9, $pop10 + tee_local $push71=, $1=, $pop72 + i32.or $push14=, $pop13, $pop71 + i32.store16 sV($pop80), $pop14 + i32.const $push70=, 0 + i32.const $push69=, 1103515245 + i32.mul $push15=, $2, $pop69 + i32.const $push68=, 12345 + i32.add $push67=, $pop15, $pop68 + tee_local $push66=, $0=, $pop67 + i32.store myrnd.s($pop70), $pop66 + block + i32.const $push65=, 16 + i32.shr_u $push64=, $0, $pop65 + tee_local $push63=, $3=, $pop64 + i32.const $push62=, 16 + i32.shr_u $push16=, $2, $pop62 + i32.add $push17=, $pop63, $pop16 + i32.const $push61=, 0 + i32.load $push18=, sV($pop61) + i32.const $push60=, 8 + i32.shr_u $push19=, $pop18, $pop60 + i32.add $push20=, $3, $pop19 + i32.xor $push21=, $pop17, $pop20 + i32.const $push59=, 1 + i32.and $push22=, $pop21, $pop59 + br_if 0, $pop22 # 0: down to label15 +# BB#1: # %if.end + i32.const $push128=, 0 + i32.const $push127=, 1103515245 + i32.mul $push23=, $0, $pop127 + i32.const $push126=, 12345 + i32.add $push125=, $pop23, $pop126 + tee_local $push124=, $0=, $pop125 + i32.const $push123=, 1103515245 + i32.mul $push24=, $pop124, $pop123 + i32.const $push122=, 12345 + i32.add $push121=, $pop24, $pop122 + tee_local $push120=, $2=, $pop121 + i32.store myrnd.s($pop128), $pop120 + i32.const $push119=, 0 + i32.const $push118=, 16 + i32.shr_u $push117=, $0, $pop118 + tee_local $push116=, $0=, $pop117 + i32.const $push25=, 2047 + i32.and $push115=, $pop116, $pop25 + tee_local $push114=, $3=, $pop115 + i32.const $push113=, 8 + i32.shl $push26=, $pop114, $pop113 + i32.const $push112=, 256 + i32.and $push27=, $pop26, $pop112 + i32.or $push111=, $pop27, $1 + tee_local $push110=, $4=, $pop111 + i32.store16 sV($pop119), $pop110 + i32.const $push28=, 65280 + i32.and $push29=, $4, $pop28 + i32.const $push109=, 8 + i32.shr_u $push108=, $pop29, $pop109 + tee_local $push107=, $4=, $pop108 + i32.xor $push30=, $pop107, $3 + i32.const $push106=, 1 + i32.and $push31=, $pop30, $pop106 + br_if 0, $pop31 # 0: down to label15 +# BB#2: # %lor.lhs.false89 + i32.const $push132=, 16 + i32.shr_u $push131=, $2, $pop132 + tee_local $push130=, $3=, $pop131 + i32.add $push33=, $pop130, $4 + i32.add $push32=, $3, $0 + i32.xor $push34=, $pop33, $pop32 + i32.const $push129=, 1 + i32.and $push35=, $pop34, $pop129 + br_if 0, $pop35 # 0: down to label15 +# BB#3: # %lor.lhs.false136 + i32.const $push40=, 0 + i32.const $push36=, 1103515245 + i32.mul $push37=, $2, $pop36 + i32.const $push38=, 12345 + i32.add $push148=, $pop37, $pop38 + tee_local $push147=, $2=, $pop148 + i32.const $push146=, 1103515245 + i32.mul $push39=, $pop147, $pop146 + i32.const $push145=, 12345 + i32.add $push144=, $pop39, $pop145 + tee_local $push143=, $0=, $pop144 + i32.store myrnd.s($pop40), $pop143 + i32.const $push142=, 0 + i32.const $push41=, 16 + i32.shr_u $push141=, $0, $pop41 + tee_local $push140=, $0=, $pop141 + i32.const $push42=, 2047 + i32.and $push43=, $pop140, $pop42 + i32.const $push44=, 8 + i32.shr_u $push45=, $2, $pop44 + i32.const $push46=, 256 + i32.and $push47=, $pop45, $pop46 + i32.or $push48=, $pop47, $1 + i32.const $push49=, 65280 + i32.and $push50=, $pop48, $pop49 + i32.const $push139=, 8 + i32.shr_u $push51=, $pop50, $pop139 + i32.add $push138=, $pop43, $pop51 + tee_local $push137=, $3=, $pop138 + i32.const $push136=, 8 + i32.shl $push52=, $pop137, $pop136 + i32.const $push135=, 256 + i32.and $push53=, $pop52, $pop135 + i32.or $push54=, $pop53, $1 + i32.store16 sV($pop142), $pop54 + i32.const $push134=, 16 + i32.shr_u $push55=, $2, $pop134 + i32.add $push56=, $0, $pop55 + i32.xor $push57=, $pop56, $3 + i32.const $push133=, 1 + i32.and $push58=, $pop57, $pop133 + br_if 0, $pop58 # 0: down to label15 +# BB#4: # %if.end142 + return +.LBB132_5: # %if.then + end_block # label15: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end132: + .size testV, .Lfunc_end132-testV + # -- End function + .section .text.retmeW,"ax",@progbits + .hidden retmeW # -- Begin function retmeW + .globl retmeW + .type retmeW,@function +retmeW: # @retmeW + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 0($0), $pop0 + i32.const $push1=, 24 + i32.add $push2=, $0, $pop1 + i32.const $push15=, 24 + i32.add $push3=, $1, $pop15 + i64.load $push4=, 0($pop3) + i64.store 0($pop2), $pop4 + i32.const $push5=, 16 + i32.add $push6=, $0, $pop5 + i32.const $push14=, 16 + i32.add $push7=, $1, $pop14 + i64.load $push8=, 0($pop7) + i64.store 0($pop6), $pop8 + i32.const $push9=, 8 + i32.add $push10=, $0, $pop9 + i32.const $push13=, 8 + i32.add $push11=, $1, $pop13 + i64.load $push12=, 0($pop11) + i64.store 0($pop10), $pop12 + # fallthrough-return + .endfunc +.Lfunc_end133: + .size retmeW, .Lfunc_end133-retmeW + # -- End function + .section .text.fn1W,"ax",@progbits + .hidden fn1W # -- Begin function fn1W + .globl fn1W + .type fn1W,@function +fn1W: # @fn1W + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sW+16($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end134: + .size fn1W, .Lfunc_end134-fn1W + # -- End function + .section .text.fn2W,"ax",@progbits + .hidden fn2W # -- Begin function fn2W + .globl fn2W + .type fn2W,@function +fn2W: # @fn2W + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sW+16($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end135: + .size fn2W, .Lfunc_end135-fn2W + # -- End function + .section .text.retitW,"ax",@progbits + .hidden retitW # -- Begin function retitW + .globl retitW + .type retitW,@function +retitW: # @retitW + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sW+16($pop0) + i32.const $push2=, 4095 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end136: + .size retitW, .Lfunc_end136-retitW + # -- End function + .section .text.fn3W,"ax",@progbits + .hidden fn3W # -- Begin function fn3W + .globl fn3W + .type fn3W,@function +fn3W: # @fn3W + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, sW+16($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 4095 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, -4096 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store sW+16($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end137: + .size fn3W, .Lfunc_end137-fn3W + # -- End function + .section .text.testW,"ax",@progbits + .hidden testW # -- Begin function testW + .globl testW + .type testW,@function +testW: # @testW + .local i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $1=, myrnd.s($pop0) + i32.const $0=, -32 +.LBB138_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label16: + i32.const $push32=, sW+32 + i32.add $push1=, $0, $pop32 + i32.const $push31=, 1103515245 + i32.mul $push2=, $1, $pop31 + i32.const $push30=, 12345 + i32.add $push29=, $pop2, $pop30 + tee_local $push28=, $1=, $pop29 + i32.const $push27=, 16 + i32.shr_u $push3=, $pop28, $pop27 + i32.store8 0($pop1), $pop3 + i32.const $push26=, 1 + i32.add $push25=, $0, $pop26 + tee_local $push24=, $0=, $pop25 + br_if 0, $pop24 # 0: up to label16 +# BB#2: # %if.end119 + end_loop + i32.const $push5=, 0 + i64.const $push4=, 4612055454334320640 + i64.store sW+8($pop5), $pop4 + i32.const $push42=, 0 + i64.const $push6=, 0 + i64.store sW($pop42), $pop6 + i32.const $push41=, 0 + i32.const $push7=, -341751747 + i32.mul $push8=, $1, $pop7 + i32.const $push9=, 229283573 + i32.add $push40=, $pop8, $pop9 + tee_local $push39=, $0=, $pop40 + i32.const $push10=, 1103515245 + i32.mul $push11=, $pop39, $pop10 + i32.const $push12=, 12345 + i32.add $push38=, $pop11, $pop12 + tee_local $push37=, $1=, $pop38 + i32.store myrnd.s($pop41), $pop37 + i32.const $push36=, 0 + i32.const $push13=, 16 + i32.shr_u $push17=, $1, $pop13 + i32.const $push15=, 2047 + i32.and $push18=, $pop17, $pop15 + i32.const $push35=, 16 + i32.shr_u $push14=, $0, $pop35 + i32.const $push34=, 2047 + i32.and $push16=, $pop14, $pop34 + i32.add $push19=, $pop18, $pop16 + i32.const $push33=, 0 + i32.load $push20=, sW+16($pop33) + i32.const $push21=, -4096 + i32.and $push22=, $pop20, $pop21 + i32.or $push23=, $pop19, $pop22 + i32.store sW+16($pop36), $pop23 + # fallthrough-return + .endfunc +.Lfunc_end138: + .size testW, .Lfunc_end138-testW + # -- End function + .section .text.retmeX,"ax",@progbits + .hidden retmeX # -- Begin function retmeX + .globl retmeX + .type retmeX,@function +retmeX: # @retmeX + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 0($0), $pop0 + i32.const $push1=, 24 + i32.add $push2=, $0, $pop1 + i32.const $push15=, 24 + i32.add $push3=, $1, $pop15 + i64.load $push4=, 0($pop3) + i64.store 0($pop2), $pop4 + i32.const $push5=, 16 + i32.add $push6=, $0, $pop5 + i32.const $push14=, 16 + i32.add $push7=, $1, $pop14 + i64.load $push8=, 0($pop7) + i64.store 0($pop6), $pop8 + i32.const $push9=, 8 + i32.add $push10=, $0, $pop9 + i32.const $push13=, 8 + i32.add $push11=, $1, $pop13 + i64.load $push12=, 0($pop11) + i64.store 0($pop10), $pop12 + # fallthrough-return + .endfunc +.Lfunc_end139: + .size retmeX, .Lfunc_end139-retmeX + # -- End function + .section .text.fn1X,"ax",@progbits + .hidden fn1X # -- Begin function fn1X + .globl fn1X + .type fn1X,@function +fn1X: # @fn1X + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sX($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end140: + .size fn1X, .Lfunc_end140-fn1X + # -- End function + .section .text.fn2X,"ax",@progbits + .hidden fn2X # -- Begin function fn2X + .globl fn2X + .type fn2X,@function +fn2X: # @fn2X + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sX($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end141: + .size fn2X, .Lfunc_end141-fn2X + # -- End function + .section .text.retitX,"ax",@progbits + .hidden retitX # -- Begin function retitX + .globl retitX + .type retitX,@function +retitX: # @retitX + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sX($pop0) + i32.const $push2=, 4095 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end142: + .size retitX, .Lfunc_end142-retitX + # -- End function + .section .text.fn3X,"ax",@progbits + .hidden fn3X # -- Begin function fn3X + .globl fn3X + .type fn3X,@function +fn3X: # @fn3X + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, sX($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 4095 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, -4096 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store sX($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end143: + .size fn3X, .Lfunc_end143-fn3X + # -- End function + .section .text.testX,"ax",@progbits + .hidden testX # -- Begin function testX + .globl testX + .type testX,@function +testX: # @testX + .local i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $1=, myrnd.s($pop0) + i32.const $0=, -32 +.LBB144_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label17: + i32.const $push32=, sX+32 + i32.add $push1=, $0, $pop32 + i32.const $push31=, 1103515245 + i32.mul $push2=, $1, $pop31 + i32.const $push30=, 12345 + i32.add $push29=, $pop2, $pop30 + tee_local $push28=, $1=, $pop29 + i32.const $push27=, 16 + i32.shr_u $push3=, $pop28, $pop27 + i32.store8 0($pop1), $pop3 + i32.const $push26=, 1 + i32.add $push25=, $0, $pop26 + tee_local $push24=, $0=, $pop25 + br_if 0, $pop24 # 0: up to label17 +# BB#2: # %if.end113 + end_loop + i32.const $push5=, 0 + i64.const $push4=, 4612055454334320640 + i64.store sX+24($pop5), $pop4 + i32.const $push42=, 0 + i64.const $push6=, 0 + i64.store sX+16($pop42), $pop6 + i32.const $push41=, 0 + i32.const $push7=, -341751747 + i32.mul $push8=, $1, $pop7 + i32.const $push9=, 229283573 + i32.add $push40=, $pop8, $pop9 + tee_local $push39=, $0=, $pop40 + i32.const $push10=, 1103515245 + i32.mul $push11=, $pop39, $pop10 + i32.const $push12=, 12345 + i32.add $push38=, $pop11, $pop12 + tee_local $push37=, $1=, $pop38 + i32.store myrnd.s($pop41), $pop37 + i32.const $push36=, 0 + i32.const $push13=, 16 + i32.shr_u $push17=, $1, $pop13 + i32.const $push15=, 2047 + i32.and $push18=, $pop17, $pop15 + i32.const $push35=, 16 + i32.shr_u $push14=, $0, $pop35 + i32.const $push34=, 2047 + i32.and $push16=, $pop14, $pop34 + i32.add $push19=, $pop18, $pop16 + i32.const $push33=, 0 + i32.load $push20=, sX($pop33) + i32.const $push21=, -4096 + i32.and $push22=, $pop20, $pop21 + i32.or $push23=, $pop19, $pop22 + i32.store sX($pop36), $pop23 + # fallthrough-return + .endfunc +.Lfunc_end144: + .size testX, .Lfunc_end144-testX + # -- End function + .section .text.retmeY,"ax",@progbits + .hidden retmeY # -- Begin function retmeY + .globl retmeY + .type retmeY,@function +retmeY: # @retmeY + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 0($0), $pop0 + i32.const $push1=, 24 + i32.add $push2=, $0, $pop1 + i32.const $push15=, 24 + i32.add $push3=, $1, $pop15 + i64.load $push4=, 0($pop3) + i64.store 0($pop2), $pop4 + i32.const $push5=, 16 + i32.add $push6=, $0, $pop5 + i32.const $push14=, 16 + i32.add $push7=, $1, $pop14 + i64.load $push8=, 0($pop7) + i64.store 0($pop6), $pop8 + i32.const $push9=, 8 + i32.add $push10=, $0, $pop9 + i32.const $push13=, 8 + i32.add $push11=, $1, $pop13 + i64.load $push12=, 0($pop11) + i64.store 0($pop10), $pop12 + # fallthrough-return + .endfunc +.Lfunc_end145: + .size retmeY, .Lfunc_end145-retmeY + # -- End function + .section .text.fn1Y,"ax",@progbits + .hidden fn1Y # -- Begin function fn1Y + .globl fn1Y + .type fn1Y,@function +fn1Y: # @fn1Y + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sY($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end146: + .size fn1Y, .Lfunc_end146-fn1Y + # -- End function + .section .text.fn2Y,"ax",@progbits + .hidden fn2Y # -- Begin function fn2Y + .globl fn2Y + .type fn2Y,@function +fn2Y: # @fn2Y + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sY($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end147: + .size fn2Y, .Lfunc_end147-fn2Y + # -- End function + .section .text.retitY,"ax",@progbits + .hidden retitY # -- Begin function retitY + .globl retitY + .type retitY,@function +retitY: # @retitY + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sY($pop0) + i32.const $push2=, 4095 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end148: + .size retitY, .Lfunc_end148-retitY + # -- End function + .section .text.fn3Y,"ax",@progbits + .hidden fn3Y # -- Begin function fn3Y + .globl fn3Y + .type fn3Y,@function +fn3Y: # @fn3Y + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, sY($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 4095 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, -4096 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store sY($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end149: + .size fn3Y, .Lfunc_end149-fn3Y + # -- End function + .section .text.testY,"ax",@progbits + .hidden testY # -- Begin function testY + .globl testY + .type testY,@function +testY: # @testY + .local i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $1=, myrnd.s($pop0) + i32.const $0=, -32 +.LBB150_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label18: + i32.const $push32=, sY+32 + i32.add $push1=, $0, $pop32 + i32.const $push31=, 1103515245 + i32.mul $push2=, $1, $pop31 + i32.const $push30=, 12345 + i32.add $push29=, $pop2, $pop30 + tee_local $push28=, $1=, $pop29 + i32.const $push27=, 16 + i32.shr_u $push3=, $pop28, $pop27 + i32.store8 0($pop1), $pop3 + i32.const $push26=, 1 + i32.add $push25=, $0, $pop26 + tee_local $push24=, $0=, $pop25 + br_if 0, $pop24 # 0: up to label18 +# BB#2: # %if.end113 + end_loop + i32.const $push5=, 0 + i64.const $push4=, 4612055454334320640 + i64.store sY+24($pop5), $pop4 + i32.const $push42=, 0 + i64.const $push6=, 0 + i64.store sY+16($pop42), $pop6 + i32.const $push41=, 0 + i32.const $push7=, -341751747 + i32.mul $push8=, $1, $pop7 + i32.const $push9=, 229283573 + i32.add $push40=, $pop8, $pop9 + tee_local $push39=, $0=, $pop40 + i32.const $push10=, 1103515245 + i32.mul $push11=, $pop39, $pop10 + i32.const $push12=, 12345 + i32.add $push38=, $pop11, $pop12 + tee_local $push37=, $1=, $pop38 + i32.store myrnd.s($pop41), $pop37 + i32.const $push36=, 0 + i32.const $push13=, 16 + i32.shr_u $push17=, $1, $pop13 + i32.const $push15=, 2047 + i32.and $push18=, $pop17, $pop15 + i32.const $push35=, 16 + i32.shr_u $push14=, $0, $pop35 + i32.const $push34=, 2047 + i32.and $push16=, $pop14, $pop34 + i32.add $push19=, $pop18, $pop16 + i32.const $push33=, 0 + i32.load $push20=, sY($pop33) + i32.const $push21=, -4096 + i32.and $push22=, $pop20, $pop21 + i32.or $push23=, $pop19, $pop22 + i32.store sY($pop36), $pop23 + # fallthrough-return + .endfunc +.Lfunc_end150: + .size testY, .Lfunc_end150-testY + # -- End function + .section .text.retmeZ,"ax",@progbits + .hidden retmeZ # -- Begin function retmeZ + .globl retmeZ + .type retmeZ,@function +retmeZ: # @retmeZ + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 0($0), $pop0 + i32.const $push1=, 24 + i32.add $push2=, $0, $pop1 + i32.const $push15=, 24 + i32.add $push3=, $1, $pop15 + i64.load $push4=, 0($pop3) + i64.store 0($pop2), $pop4 + i32.const $push5=, 16 + i32.add $push6=, $0, $pop5 + i32.const $push14=, 16 + i32.add $push7=, $1, $pop14 + i64.load $push8=, 0($pop7) + i64.store 0($pop6), $pop8 + i32.const $push9=, 8 + i32.add $push10=, $0, $pop9 + i32.const $push13=, 8 + i32.add $push11=, $1, $pop13 + i64.load $push12=, 0($pop11) + i64.store 0($pop10), $pop12 + # fallthrough-return + .endfunc +.Lfunc_end151: + .size retmeZ, .Lfunc_end151-retmeZ + # -- End function + .section .text.fn1Z,"ax",@progbits + .hidden fn1Z # -- Begin function fn1Z + .globl fn1Z + .type fn1Z,@function +fn1Z: # @fn1Z + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.load $push3=, sZ+16($pop2) + i32.const $push0=, 20 + i32.shl $push1=, $0, $pop0 + i32.add $push4=, $pop3, $pop1 + i32.const $push6=, 20 + i32.shr_u $push5=, $pop4, $pop6 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end152: + .size fn1Z, .Lfunc_end152-fn1Z + # -- End function + .section .text.fn2Z,"ax",@progbits + .hidden fn2Z # -- Begin function fn2Z + .globl fn2Z + .type fn2Z,@function +fn2Z: # @fn2Z + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sZ+16($pop0) + i32.const $push2=, 20 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 4095 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 15 + i32.rem_u $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end153: + .size fn2Z, .Lfunc_end153-fn2Z + # -- End function + .section .text.retitZ,"ax",@progbits + .hidden retitZ # -- Begin function retitZ + .globl retitZ + .type retitZ,@function +retitZ: # @retitZ + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sZ+16($pop0) + i32.const $push2=, 20 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end154: + .size retitZ, .Lfunc_end154-retitZ + # -- End function + .section .text.fn3Z,"ax",@progbits + .hidden fn3Z # -- Begin function fn3Z + .globl fn3Z + .type fn3Z,@function +fn3Z: # @fn3Z + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push8=, 0 + i32.load $push3=, sZ+16($pop8) + i32.const $push0=, 20 + i32.shl $push1=, $0, $pop0 + i32.add $push7=, $pop3, $pop1 + tee_local $push6=, $0=, $pop7 + i32.store sZ+16($pop2), $pop6 + i32.const $push5=, 20 + i32.shr_u $push4=, $0, $pop5 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end155: + .size fn3Z, .Lfunc_end155-fn3Z + # -- End function + .section .text.testZ,"ax",@progbits + .hidden testZ # -- Begin function testZ + .globl testZ + .type testZ,@function +testZ: # @testZ + .local i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $5=, myrnd.s($pop0) + i32.const $4=, -32 +.LBB156_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label19: + i32.const $push38=, sZ+32 + i32.add $push1=, $4, $pop38 + i32.const $push37=, 1103515245 + i32.mul $push2=, $5, $pop37 + i32.const $push36=, 12345 + i32.add $push35=, $pop2, $pop36 + tee_local $push34=, $5=, $pop35 + i32.const $push33=, 16 + i32.shr_u $push3=, $pop34, $pop33 + i32.store8 0($pop1), $pop3 + i32.const $push32=, 1 + i32.add $push31=, $4, $pop32 + tee_local $push30=, $4=, $pop31 + br_if 0, $pop30 # 0: up to label19 +# BB#2: # %for.end + end_loop + i32.const $push69=, 0 + i64.const $push4=, 4612055454334320640 + i64.store sZ+8($pop69), $pop4 + i32.const $push68=, 0 + i64.const $push5=, 0 + i64.store sZ($pop68), $pop5 + i32.const $push67=, 0 + i32.const $push66=, 1103515245 + i32.mul $push6=, $5, $pop66 + i32.const $push65=, 12345 + i32.add $push64=, $pop6, $pop65 + tee_local $push63=, $5=, $pop64 + i32.const $push62=, 1103515245 + i32.mul $push7=, $pop63, $pop62 + i32.const $push61=, 12345 + i32.add $push60=, $pop7, $pop61 + tee_local $push59=, $4=, $pop60 + i32.store myrnd.s($pop67), $pop59 + i32.const $push58=, 0 + i32.const $push57=, 16 + i32.shr_u $push8=, $5, $pop57 + i32.const $push56=, 2047 + i32.and $push55=, $pop8, $pop56 + tee_local $push54=, $5=, $pop55 + i32.const $push53=, 20 + i32.shl $push9=, $pop54, $pop53 + i32.const $push52=, 0 + i32.load $push51=, sZ+16($pop52) + tee_local $push50=, $0=, $pop51 + i32.const $push49=, 1048575 + i32.and $push48=, $pop50, $pop49 + tee_local $push47=, $1=, $pop48 + i32.or $push46=, $pop9, $pop47 + tee_local $push45=, $2=, $pop46 + i32.store sZ+16($pop58), $pop45 + block + i32.const $push44=, 16 + i32.shr_u $push10=, $4, $pop44 + i32.const $push43=, 2047 + i32.and $push42=, $pop10, $pop43 + tee_local $push41=, $3=, $pop42 + i32.add $push11=, $pop41, $5 + i32.const $push40=, 20 + i32.shl $push12=, $3, $pop40 + i32.add $push13=, $pop12, $2 + i32.const $push39=, 20 + i32.shr_u $push14=, $pop13, $pop39 + i32.ne $push15=, $pop11, $pop14 + br_if 0, $pop15 # 0: down to label20 +# BB#3: # %if.end80 + i32.const $push90=, 0 + i32.const $push17=, -2139243339 + i32.mul $push18=, $4, $pop17 + i32.const $push19=, -1492899873 + i32.add $push89=, $pop18, $pop19 + tee_local $push88=, $4=, $pop89 + i32.const $push87=, 1103515245 + i32.mul $push20=, $pop88, $pop87 + i32.const $push86=, 12345 + i32.add $push85=, $pop20, $pop86 + tee_local $push84=, $5=, $pop85 + i32.store myrnd.s($pop90), $pop84 + i32.const $push83=, 0 + i32.const $push82=, 16 + i32.shr_u $push24=, $5, $pop82 + i32.const $push81=, 2047 + i32.and $push80=, $pop24, $pop81 + tee_local $push79=, $5=, $pop80 + i32.const $push78=, 20 + i32.shl $push25=, $pop79, $pop78 + i32.const $push77=, 16 + i32.shr_u $push21=, $4, $pop77 + i32.const $push76=, 2047 + i32.and $push75=, $pop21, $pop76 + tee_local $push74=, $2=, $pop75 + i32.const $push73=, 20 + i32.shl $push22=, $pop74, $pop73 + i32.or $push23=, $pop22, $1 + i32.add $push72=, $pop25, $pop23 + tee_local $push71=, $4=, $pop72 + i32.store sZ+16($pop83), $pop71 + i32.add $push26=, $5, $2 + i32.const $push70=, 20 + i32.shr_u $push27=, $4, $pop70 + i32.ne $push28=, $pop26, $pop27 + br_if 0, $pop28 # 0: down to label20 +# BB#4: # %if.end80 + i32.xor $push29=, $4, $0 + i32.const $push91=, 1048575 + i32.and $push16=, $pop29, $pop91 + br_if 0, $pop16 # 0: down to label20 +# BB#5: # %if.end121 + return +.LBB156_6: # %if.then + end_block # label20: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end156: + .size testZ, .Lfunc_end156-testZ + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call testA@FUNCTION + call testB@FUNCTION + call testC@FUNCTION + call testD@FUNCTION + call testE@FUNCTION + call testF@FUNCTION + call testG@FUNCTION + call testH@FUNCTION + call testI@FUNCTION + call testJ@FUNCTION + call testK@FUNCTION + call testL@FUNCTION + call testM@FUNCTION + call testN@FUNCTION + call testO@FUNCTION + call testP@FUNCTION + call testQ@FUNCTION + call testR@FUNCTION + call testS@FUNCTION + call testT@FUNCTION + call testU@FUNCTION + call testV@FUNCTION + call testW@FUNCTION + call testX@FUNCTION + call testY@FUNCTION + call testZ@FUNCTION + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end157: + .size main, .Lfunc_end157-main + # -- End function + .type myrnd.s,@object # @myrnd.s + .section .data.myrnd.s,"aw",@progbits + .p2align 2 +myrnd.s: + .int32 1388815473 # 0x52c7a471 + .size myrnd.s, 4 + + .hidden sA # @sA + .type sA,@object + .section .bss.sA,"aw",@nobits + .globl sA + .p2align 2 +sA: + .skip 4 + .size sA, 4 + + .hidden sB # @sB + .type sB,@object + .section .bss.sB,"aw",@nobits + .globl sB + .p2align 3 +sB: + .skip 8 + .size sB, 8 + + .hidden sC # @sC + .type sC,@object + .section .bss.sC,"aw",@nobits + .globl sC + .p2align 3 +sC: + .skip 8 + .size sC, 8 + + .hidden sD # @sD + .type sD,@object + .section .bss.sD,"aw",@nobits + .globl sD + .p2align 3 +sD: + .skip 8 + .size sD, 8 + + .hidden sE # @sE + .type sE,@object + .section .bss.sE,"aw",@nobits + .globl sE + .p2align 3 +sE: + .skip 16 + .size sE, 16 + + .hidden sF # @sF + .type sF,@object + .section .bss.sF,"aw",@nobits + .globl sF + .p2align 3 +sF: + .skip 16 + .size sF, 16 + + .hidden sG # @sG + .type sG,@object + .section .bss.sG,"aw",@nobits + .globl sG + .p2align 3 +sG: + .skip 16 + .size sG, 16 + + .hidden sH # @sH + .type sH,@object + .section .bss.sH,"aw",@nobits + .globl sH + .p2align 3 +sH: + .skip 16 + .size sH, 16 + + .hidden sI # @sI + .type sI,@object + .section .bss.sI,"aw",@nobits + .globl sI + .p2align 3 +sI: + .skip 16 + .size sI, 16 + + .hidden sJ # @sJ + .type sJ,@object + .section .bss.sJ,"aw",@nobits + .globl sJ + .p2align 2 +sJ: + .skip 4 + .size sJ, 4 + + .hidden sK # @sK + .type sK,@object + .section .bss.sK,"aw",@nobits + .globl sK + .p2align 2 +sK: + .skip 4 + .size sK, 4 + + .hidden sL # @sL + .type sL,@object + .section .bss.sL,"aw",@nobits + .globl sL + .p2align 3 +sL: + .skip 8 + .size sL, 8 + + .hidden sM # @sM + .type sM,@object + .section .bss.sM,"aw",@nobits + .globl sM + .p2align 3 +sM: + .skip 8 + .size sM, 8 + + .hidden sN # @sN + .type sN,@object + .section .bss.sN,"aw",@nobits + .globl sN + .p2align 3 +sN: + .skip 8 + .size sN, 8 + + .hidden sO # @sO + .type sO,@object + .section .bss.sO,"aw",@nobits + .globl sO + .p2align 3 +sO: + .skip 16 + .size sO, 16 + + .hidden sP # @sP + .type sP,@object + .section .bss.sP,"aw",@nobits + .globl sP + .p2align 3 +sP: + .skip 16 + .size sP, 16 + + .hidden sQ # @sQ + .type sQ,@object + .section .bss.sQ,"aw",@nobits + .globl sQ + .p2align 3 +sQ: + .skip 16 + .size sQ, 16 + + .hidden sR # @sR + .type sR,@object + .section .bss.sR,"aw",@nobits + .globl sR + .p2align 3 +sR: + .skip 16 + .size sR, 16 + + .hidden sS # @sS + .type sS,@object + .section .bss.sS,"aw",@nobits + .globl sS + .p2align 3 +sS: + .skip 16 + .size sS, 16 + + .hidden sT # @sT + .type sT,@object + .section .bss.sT,"aw",@nobits + .globl sT + .p2align 2 +sT: + .skip 4 + .size sT, 4 + + .hidden sU # @sU + .type sU,@object + .section .bss.sU,"aw",@nobits + .globl sU + .p2align 3 +sU: + .skip 16 + .size sU, 16 + + .hidden sV # @sV + .type sV,@object + .section .bss.sV,"aw",@nobits + .globl sV + .p2align 2 +sV: + .skip 4 + .size sV, 4 + + .hidden sW # @sW + .type sW,@object + .section .bss.sW,"aw",@nobits + .globl sW + .p2align 4 +sW: + .skip 32 + .size sW, 32 + + .hidden sX # @sX + .type sX,@object + .section .bss.sX,"aw",@nobits + .globl sX + .p2align 4 +sX: + .skip 32 + .size sX, 32 + + .hidden sY # @sY + .type sY,@object + .section .bss.sY,"aw",@nobits + .globl sY + .p2align 4 +sY: + .skip 32 + .size sY, 32 + + .hidden sZ # @sZ + .type sZ,@object + .section .bss.sZ,"aw",@nobits + .globl sZ + .p2align 4 +sZ: + .skip 32 + .size sZ, 32 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20040709-2.c.s b/src/binaryen/test/torture-s/20040709-2.c.s new file mode 100644 index 0000000000..26d60e208b --- /dev/null +++ b/src/binaryen/test/torture-s/20040709-2.c.s @@ -0,0 +1,6938 @@ + .text + .file "20040709-2.c" + .section .text.myrnd,"ax",@progbits + .hidden myrnd # -- Begin function myrnd + .globl myrnd + .type myrnd,@function +myrnd: # @myrnd + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push1=, myrnd.s($pop11) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push10=, $pop3, $pop4 + tee_local $push9=, $0=, $pop10 + i32.store myrnd.s($pop0), $pop9 + i32.const $push5=, 16 + i32.shr_u $push6=, $0, $pop5 + i32.const $push7=, 2047 + i32.and $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end0: + .size myrnd, .Lfunc_end0-myrnd + # -- End function + .section .text.retmeA,"ax",@progbits + .hidden retmeA # -- Begin function retmeA + .globl retmeA + .type retmeA,@function +retmeA: # @retmeA + .param i32, i32 +# BB#0: # %entry + i32.load16_u $push0=, 0($1):p2align=0 + i32.store16 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size retmeA, .Lfunc_end1-retmeA + # -- End function + .section .text.fn1A,"ax",@progbits + .hidden fn1A # -- Begin function fn1A + .globl fn1A + .type fn1A,@function +fn1A: # @fn1A + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sA($pop0) + i32.const $push2=, 5 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 2047 + i32.and $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end2: + .size fn1A, .Lfunc_end2-fn1A + # -- End function + .section .text.fn2A,"ax",@progbits + .hidden fn2A # -- Begin function fn2A + .globl fn2A + .type fn2A,@function +fn2A: # @fn2A + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sA($pop0) + i32.const $push2=, 5 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 2047 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 15 + i32.rem_u $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end3: + .size fn2A, .Lfunc_end3-fn2A + # -- End function + .section .text.retitA,"ax",@progbits + .hidden retitA # -- Begin function retitA + .globl retitA + .type retitA,@function +retitA: # @retitA + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sA($pop0) + i32.const $push2=, 5 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end4: + .size retitA, .Lfunc_end4-retitA + # -- End function + .section .text.fn3A,"ax",@progbits + .hidden fn3A # -- Begin function fn3A + .globl fn3A + .type fn3A,@function +fn3A: # @fn3A + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push14=, 0 + i32.load16_u $push13=, sA($pop14) + tee_local $push12=, $1=, $pop13 + i32.const $push3=, 5 + i32.shr_u $push4=, $pop12, $pop3 + i32.add $push11=, $pop4, $0 + tee_local $push10=, $0=, $pop11 + i32.const $push9=, 5 + i32.shl $push5=, $pop10, $pop9 + i32.const $push1=, 31 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store16 sA($pop0), $pop6 + i32.const $push7=, 2047 + i32.and $push8=, $0, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end5: + .size fn3A, .Lfunc_end5-fn3A + # -- End function + .section .text.testA,"ax",@progbits + .hidden testA # -- Begin function testA + .globl testA + .type testA,@function +testA: # @testA + .local i32, i32, i32 +# BB#0: # %if.end106 + i32.const $push0=, 0 + i32.const $push52=, 0 + i32.load $push1=, myrnd.s($pop52) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push51=, $pop3, $pop4 + tee_local $push50=, $0=, $pop51 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop50, $pop5 + i32.store8 sA($pop0), $pop6 + i32.const $push49=, 0 + i32.const $push48=, 1103515245 + i32.mul $push7=, $0, $pop48 + i32.const $push47=, 12345 + i32.add $push46=, $pop7, $pop47 + tee_local $push45=, $0=, $pop46 + i32.const $push44=, 16 + i32.shr_u $push8=, $pop45, $pop44 + i32.store8 sA+1($pop49), $pop8 + i32.const $push43=, 0 + i32.const $push9=, -341751747 + i32.mul $push10=, $0, $pop9 + i32.const $push11=, 229283573 + i32.add $push42=, $pop10, $pop11 + tee_local $push41=, $0=, $pop42 + i32.const $push40=, 1103515245 + i32.mul $push12=, $pop41, $pop40 + i32.const $push39=, 12345 + i32.add $push38=, $pop12, $pop39 + tee_local $push37=, $1=, $pop38 + i32.store myrnd.s($pop43), $pop37 + i32.const $push36=, 0 + i32.const $push35=, 16 + i32.shr_u $push34=, $1, $pop35 + tee_local $push33=, $1=, $pop34 + i32.const $push13=, 2047 + i32.and $push15=, $pop33, $pop13 + i32.const $push32=, 16 + i32.shr_u $push31=, $0, $pop32 + tee_local $push30=, $0=, $pop31 + i32.const $push29=, 2047 + i32.and $push14=, $pop30, $pop29 + i32.add $push28=, $pop15, $pop14 + tee_local $push27=, $2=, $pop28 + i32.const $push16=, 5 + i32.shl $push17=, $pop27, $pop16 + i32.const $push26=, 0 + i32.load16_u $push18=, sA($pop26) + i32.const $push19=, 31 + i32.and $push20=, $pop18, $pop19 + i32.or $push21=, $pop17, $pop20 + i32.store16 sA($pop36), $pop21 + block + i32.add $push22=, $1, $0 + i32.xor $push23=, $pop22, $2 + i32.const $push25=, 2047 + i32.and $push24=, $pop23, $pop25 + br_if 0, $pop24 # 0: down to label0 +# BB#1: # %if.end158 + return +.LBB6_2: # %if.then157 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end6: + .size testA, .Lfunc_end6-testA + # -- End function + .section .text.retmeB,"ax",@progbits + .hidden retmeB # -- Begin function retmeB + .globl retmeB + .type retmeB,@function +retmeB: # @retmeB + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1):p2align=0 + i32.store 0($0):p2align=0, $pop0 + i32.const $push1=, 4 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 4 + i32.add $push3=, $1, $pop5 + i32.load16_u $push4=, 0($pop3):p2align=0 + i32.store16 0($pop2):p2align=0, $pop4 + # fallthrough-return + .endfunc +.Lfunc_end7: + .size retmeB, .Lfunc_end7-retmeB + # -- End function + .section .text.fn1B,"ax",@progbits + .hidden fn1B # -- Begin function fn1B + .globl fn1B + .type fn1B,@function +fn1B: # @fn1B + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sB($pop0) + i32.const $push2=, 5 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 2047 + i32.and $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end8: + .size fn1B, .Lfunc_end8-fn1B + # -- End function + .section .text.fn2B,"ax",@progbits + .hidden fn2B # -- Begin function fn2B + .globl fn2B + .type fn2B,@function +fn2B: # @fn2B + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sB($pop0) + i32.const $push2=, 5 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 2047 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 15 + i32.rem_u $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end9: + .size fn2B, .Lfunc_end9-fn2B + # -- End function + .section .text.retitB,"ax",@progbits + .hidden retitB # -- Begin function retitB + .globl retitB + .type retitB,@function +retitB: # @retitB + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sB($pop0) + i32.const $push2=, 5 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end10: + .size retitB, .Lfunc_end10-retitB + # -- End function + .section .text.fn3B,"ax",@progbits + .hidden fn3B # -- Begin function fn3B + .globl fn3B + .type fn3B,@function +fn3B: # @fn3B + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push14=, 0 + i32.load16_u $push13=, sB($pop14) + tee_local $push12=, $1=, $pop13 + i32.const $push3=, 5 + i32.shr_u $push4=, $pop12, $pop3 + i32.add $push11=, $pop4, $0 + tee_local $push10=, $0=, $pop11 + i32.const $push9=, 5 + i32.shl $push5=, $pop10, $pop9 + i32.const $push1=, 31 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store16 sB($pop0), $pop6 + i32.const $push7=, 2047 + i32.and $push8=, $0, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end11: + .size fn3B, .Lfunc_end11-fn3B + # -- End function + .section .text.testB,"ax",@progbits + .hidden testB # -- Begin function testB + .globl testB + .type testB,@function +testB: # @testB + .local i32, i32, i32 +# BB#0: # %lor.lhs.false130 + i32.const $push0=, 0 + i32.const $push84=, 0 + i32.load $push1=, myrnd.s($pop84) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push83=, $pop3, $pop4 + tee_local $push82=, $0=, $pop83 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop82, $pop5 + i32.store8 sB($pop0), $pop6 + i32.const $push81=, 0 + i32.const $push80=, 1103515245 + i32.mul $push7=, $0, $pop80 + i32.const $push79=, 12345 + i32.add $push78=, $pop7, $pop79 + tee_local $push77=, $0=, $pop78 + i32.const $push76=, 16 + i32.shr_u $push8=, $pop77, $pop76 + i32.store8 sB+1($pop81), $pop8 + i32.const $push75=, 0 + i32.const $push74=, 1103515245 + i32.mul $push9=, $0, $pop74 + i32.const $push73=, 12345 + i32.add $push72=, $pop9, $pop73 + tee_local $push71=, $0=, $pop72 + i32.const $push70=, 16 + i32.shr_u $push10=, $pop71, $pop70 + i32.store8 sB+2($pop75), $pop10 + i32.const $push69=, 0 + i32.const $push68=, 1103515245 + i32.mul $push11=, $0, $pop68 + i32.const $push67=, 12345 + i32.add $push66=, $pop11, $pop67 + tee_local $push65=, $0=, $pop66 + i32.const $push64=, 16 + i32.shr_u $push12=, $pop65, $pop64 + i32.store8 sB+3($pop69), $pop12 + i32.const $push63=, 0 + i32.const $push62=, 1103515245 + i32.mul $push13=, $0, $pop62 + i32.const $push61=, 12345 + i32.add $push60=, $pop13, $pop61 + tee_local $push59=, $0=, $pop60 + i32.const $push58=, 16 + i32.shr_u $push14=, $pop59, $pop58 + i32.store8 sB+4($pop63), $pop14 + i32.const $push57=, 0 + i32.const $push56=, 1103515245 + i32.mul $push15=, $0, $pop56 + i32.const $push55=, 12345 + i32.add $push54=, $pop15, $pop55 + tee_local $push53=, $0=, $pop54 + i32.const $push52=, 16 + i32.shr_u $push16=, $pop53, $pop52 + i32.store8 sB+5($pop57), $pop16 + i32.const $push51=, 0 + i32.const $push17=, -341751747 + i32.mul $push18=, $0, $pop17 + i32.const $push19=, 229283573 + i32.add $push50=, $pop18, $pop19 + tee_local $push49=, $0=, $pop50 + i32.const $push48=, 1103515245 + i32.mul $push20=, $pop49, $pop48 + i32.const $push47=, 12345 + i32.add $push46=, $pop20, $pop47 + tee_local $push45=, $1=, $pop46 + i32.store myrnd.s($pop51), $pop45 + i32.const $push44=, 0 + i32.const $push43=, 16 + i32.shr_u $push42=, $1, $pop43 + tee_local $push41=, $1=, $pop42 + i32.const $push21=, 2047 + i32.and $push23=, $pop41, $pop21 + i32.const $push40=, 16 + i32.shr_u $push39=, $0, $pop40 + tee_local $push38=, $0=, $pop39 + i32.const $push37=, 2047 + i32.and $push22=, $pop38, $pop37 + i32.add $push36=, $pop23, $pop22 + tee_local $push35=, $2=, $pop36 + i32.const $push24=, 5 + i32.shl $push25=, $pop35, $pop24 + i32.const $push34=, 0 + i32.load16_u $push26=, sB($pop34) + i32.const $push27=, 31 + i32.and $push28=, $pop26, $pop27 + i32.or $push29=, $pop25, $pop28 + i32.store16 sB($pop44), $pop29 + block + i32.add $push30=, $1, $0 + i32.xor $push31=, $pop30, $2 + i32.const $push33=, 2047 + i32.and $push32=, $pop31, $pop33 + br_if 0, $pop32 # 0: down to label1 +# BB#1: # %if.end136 + return +.LBB12_2: # %if.then135 + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end12: + .size testB, .Lfunc_end12-testB + # -- End function + .section .text.retmeC,"ax",@progbits + .hidden retmeC # -- Begin function retmeC + .globl retmeC + .type retmeC,@function +retmeC: # @retmeC + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1):p2align=0 + i32.store 0($0):p2align=0, $pop0 + i32.const $push1=, 4 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 4 + i32.add $push3=, $1, $pop5 + i32.load16_u $push4=, 0($pop3):p2align=0 + i32.store16 0($pop2):p2align=0, $pop4 + # fallthrough-return + .endfunc +.Lfunc_end13: + .size retmeC, .Lfunc_end13-retmeC + # -- End function + .section .text.fn1C,"ax",@progbits + .hidden fn1C # -- Begin function fn1C + .globl fn1C + .type fn1C,@function +fn1C: # @fn1C + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sC+4($pop0) + i32.const $push2=, 5 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 2047 + i32.and $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end14: + .size fn1C, .Lfunc_end14-fn1C + # -- End function + .section .text.fn2C,"ax",@progbits + .hidden fn2C # -- Begin function fn2C + .globl fn2C + .type fn2C,@function +fn2C: # @fn2C + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sC+4($pop0) + i32.const $push2=, 5 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 2047 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 15 + i32.rem_u $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end15: + .size fn2C, .Lfunc_end15-fn2C + # -- End function + .section .text.retitC,"ax",@progbits + .hidden retitC # -- Begin function retitC + .globl retitC + .type retitC,@function +retitC: # @retitC + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sC+4($pop0) + i32.const $push2=, 5 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end16: + .size retitC, .Lfunc_end16-retitC + # -- End function + .section .text.fn3C,"ax",@progbits + .hidden fn3C # -- Begin function fn3C + .globl fn3C + .type fn3C,@function +fn3C: # @fn3C + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push14=, 0 + i32.load16_u $push13=, sC+4($pop14) + tee_local $push12=, $1=, $pop13 + i32.const $push3=, 5 + i32.shr_u $push4=, $pop12, $pop3 + i32.add $push11=, $pop4, $0 + tee_local $push10=, $0=, $pop11 + i32.const $push9=, 5 + i32.shl $push5=, $pop10, $pop9 + i32.const $push1=, 31 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store16 sC+4($pop0), $pop6 + i32.const $push7=, 2047 + i32.and $push8=, $0, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end17: + .size fn3C, .Lfunc_end17-fn3C + # -- End function + .section .text.testC,"ax",@progbits + .hidden testC # -- Begin function testC + .globl testC + .type testC,@function +testC: # @testC + .local i32, i32, i32, i32, i32 +# BB#0: # %lor.lhs.false136 + i32.const $push0=, 0 + i32.const $push84=, 0 + i32.load $push1=, myrnd.s($pop84) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push83=, $pop3, $pop4 + tee_local $push82=, $0=, $pop83 + i32.const $push81=, 1103515245 + i32.mul $push5=, $pop82, $pop81 + i32.const $push80=, 12345 + i32.add $push79=, $pop5, $pop80 + tee_local $push78=, $1=, $pop79 + i32.const $push77=, 1103515245 + i32.mul $push6=, $pop78, $pop77 + i32.const $push76=, 12345 + i32.add $push75=, $pop6, $pop76 + tee_local $push74=, $2=, $pop75 + i32.const $push73=, 1103515245 + i32.mul $push7=, $pop74, $pop73 + i32.const $push72=, 12345 + i32.add $push71=, $pop7, $pop72 + tee_local $push70=, $3=, $pop71 + i32.const $push69=, 1103515245 + i32.mul $push8=, $pop70, $pop69 + i32.const $push68=, 12345 + i32.add $push67=, $pop8, $pop68 + tee_local $push66=, $4=, $pop67 + i32.const $push9=, 16 + i32.shr_u $push10=, $pop66, $pop9 + i32.store8 sC+4($pop0), $pop10 + i32.const $push65=, 0 + i32.const $push64=, 1103515245 + i32.mul $push11=, $4, $pop64 + i32.const $push63=, 12345 + i32.add $push62=, $pop11, $pop63 + tee_local $push61=, $4=, $pop62 + i32.const $push60=, 16 + i32.shr_u $push12=, $pop61, $pop60 + i32.store8 sC+5($pop65), $pop12 + i32.const $push59=, 0 + i32.const $push58=, 16 + i32.shr_u $push13=, $0, $pop58 + i32.store8 sC($pop59), $pop13 + i32.const $push57=, 0 + i32.const $push56=, 16 + i32.shr_u $push14=, $1, $pop56 + i32.store8 sC+1($pop57), $pop14 + i32.const $push55=, 0 + i32.const $push54=, 16 + i32.shr_u $push15=, $2, $pop54 + i32.store8 sC+2($pop55), $pop15 + i32.const $push53=, 0 + i32.const $push52=, 16 + i32.shr_u $push16=, $3, $pop52 + i32.store8 sC+3($pop53), $pop16 + i32.const $push51=, 0 + i32.const $push17=, -341751747 + i32.mul $push18=, $4, $pop17 + i32.const $push19=, 229283573 + i32.add $push50=, $pop18, $pop19 + tee_local $push49=, $0=, $pop50 + i32.const $push48=, 1103515245 + i32.mul $push20=, $pop49, $pop48 + i32.const $push47=, 12345 + i32.add $push46=, $pop20, $pop47 + tee_local $push45=, $1=, $pop46 + i32.store myrnd.s($pop51), $pop45 + i32.const $push44=, 0 + i32.const $push43=, 16 + i32.shr_u $push42=, $1, $pop43 + tee_local $push41=, $1=, $pop42 + i32.const $push21=, 2047 + i32.and $push23=, $pop41, $pop21 + i32.const $push40=, 16 + i32.shr_u $push39=, $0, $pop40 + tee_local $push38=, $0=, $pop39 + i32.const $push37=, 2047 + i32.and $push22=, $pop38, $pop37 + i32.add $push36=, $pop23, $pop22 + tee_local $push35=, $2=, $pop36 + i32.const $push24=, 5 + i32.shl $push25=, $pop35, $pop24 + i32.const $push34=, 0 + i32.load16_u $push26=, sC+4($pop34) + i32.const $push27=, 31 + i32.and $push28=, $pop26, $pop27 + i32.or $push29=, $pop25, $pop28 + i32.store16 sC+4($pop44), $pop29 + block + i32.add $push30=, $1, $0 + i32.xor $push31=, $pop30, $2 + i32.const $push33=, 2047 + i32.and $push32=, $pop31, $pop33 + br_if 0, $pop32 # 0: down to label2 +# BB#1: # %if.end142 + return +.LBB18_2: # %if.then141 + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end18: + .size testC, .Lfunc_end18-testC + # -- End function + .section .text.retmeD,"ax",@progbits + .hidden retmeD # -- Begin function retmeD + .globl retmeD + .type retmeD,@function +retmeD: # @retmeD + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=0 + i64.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end19: + .size retmeD, .Lfunc_end19-retmeD + # -- End function + .section .text.fn1D,"ax",@progbits + .hidden fn1D # -- Begin function fn1D + .globl fn1D + .type fn1D,@function +fn1D: # @fn1D + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, sD($pop0) + i64.const $push2=, 35 + i64.shr_u $push3=, $pop1, $pop2 + i32.wrap/i64 $push4=, $pop3 + i32.add $push5=, $pop4, $0 + i32.const $push6=, 536870911 + i32.and $push7=, $pop5, $pop6 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end20: + .size fn1D, .Lfunc_end20-fn1D + # -- End function + .section .text.fn2D,"ax",@progbits + .hidden fn2D # -- Begin function fn2D + .globl fn2D + .type fn2D,@function +fn2D: # @fn2D + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, sD($pop0) + i64.const $push2=, 35 + i64.shr_u $push3=, $pop1, $pop2 + i32.wrap/i64 $push4=, $pop3 + i32.add $push5=, $pop4, $0 + i32.const $push6=, 536870911 + i32.and $push7=, $pop5, $pop6 + i32.const $push8=, 15 + i32.rem_u $push9=, $pop7, $pop8 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end21: + .size fn2D, .Lfunc_end21-fn2D + # -- End function + .section .text.retitD,"ax",@progbits + .hidden retitD # -- Begin function retitD + .globl retitD + .type retitD,@function +retitD: # @retitD + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, sD($pop0) + i64.const $push2=, 35 + i64.shr_u $push3=, $pop1, $pop2 + i32.wrap/i64 $push4=, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end22: + .size retitD, .Lfunc_end22-retitD + # -- End function + .section .text.fn3D,"ax",@progbits + .hidden fn3D # -- Begin function fn3D + .globl fn3D + .type fn3D,@function +fn3D: # @fn3D + .param i32 + .result i32 + .local i64 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push16=, 0 + i64.load $push15=, sD($pop16) + tee_local $push14=, $1=, $pop15 + i64.const $push3=, 35 + i64.shr_u $push4=, $pop14, $pop3 + i32.wrap/i64 $push5=, $pop4 + i32.add $push13=, $pop5, $0 + tee_local $push12=, $0=, $pop13 + i64.extend_u/i32 $push6=, $pop12 + i64.const $push11=, 35 + i64.shl $push7=, $pop6, $pop11 + i64.const $push1=, 34359738367 + i64.and $push2=, $1, $pop1 + i64.or $push8=, $pop7, $pop2 + i64.store sD($pop0), $pop8 + i32.const $push9=, 536870911 + i32.and $push10=, $0, $pop9 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end23: + .size fn3D, .Lfunc_end23-fn3D + # -- End function + .section .text.testD,"ax",@progbits + .hidden testD # -- Begin function testD + .globl testD + .type testD,@function +testD: # @testD + .local i32, i32 +# BB#0: # %if.end158 + i32.const $push0=, 0 + i32.const $push94=, 0 + i32.load $push1=, myrnd.s($pop94) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push93=, $pop3, $pop4 + tee_local $push92=, $0=, $pop93 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop92, $pop5 + i32.store8 sD($pop0), $pop6 + i32.const $push91=, 0 + i32.const $push90=, 1103515245 + i32.mul $push7=, $0, $pop90 + i32.const $push89=, 12345 + i32.add $push88=, $pop7, $pop89 + tee_local $push87=, $0=, $pop88 + i32.const $push86=, 16 + i32.shr_u $push8=, $pop87, $pop86 + i32.store8 sD+1($pop91), $pop8 + i32.const $push85=, 0 + i32.const $push84=, 1103515245 + i32.mul $push9=, $0, $pop84 + i32.const $push83=, 12345 + i32.add $push82=, $pop9, $pop83 + tee_local $push81=, $0=, $pop82 + i32.const $push80=, 16 + i32.shr_u $push10=, $pop81, $pop80 + i32.store8 sD+2($pop85), $pop10 + i32.const $push79=, 0 + i32.const $push78=, 1103515245 + i32.mul $push11=, $0, $pop78 + i32.const $push77=, 12345 + i32.add $push76=, $pop11, $pop77 + tee_local $push75=, $0=, $pop76 + i32.const $push74=, 16 + i32.shr_u $push12=, $pop75, $pop74 + i32.store8 sD+3($pop79), $pop12 + i32.const $push73=, 0 + i32.const $push72=, 1103515245 + i32.mul $push13=, $0, $pop72 + i32.const $push71=, 12345 + i32.add $push70=, $pop13, $pop71 + tee_local $push69=, $0=, $pop70 + i32.const $push68=, 16 + i32.shr_u $push14=, $pop69, $pop68 + i32.store8 sD+4($pop73), $pop14 + i32.const $push67=, 0 + i32.const $push66=, 1103515245 + i32.mul $push15=, $0, $pop66 + i32.const $push65=, 12345 + i32.add $push64=, $pop15, $pop65 + tee_local $push63=, $0=, $pop64 + i32.const $push62=, 16 + i32.shr_u $push16=, $pop63, $pop62 + i32.store8 sD+5($pop67), $pop16 + i32.const $push61=, 0 + i32.const $push60=, 1103515245 + i32.mul $push17=, $0, $pop60 + i32.const $push59=, 12345 + i32.add $push58=, $pop17, $pop59 + tee_local $push57=, $0=, $pop58 + i32.const $push56=, 16 + i32.shr_u $push18=, $pop57, $pop56 + i32.store8 sD+6($pop61), $pop18 + i32.const $push55=, 0 + i32.const $push54=, 1103515245 + i32.mul $push19=, $0, $pop54 + i32.const $push53=, 12345 + i32.add $push52=, $pop19, $pop53 + tee_local $push51=, $0=, $pop52 + i32.const $push50=, 16 + i32.shr_u $push20=, $pop51, $pop50 + i32.store8 sD+7($pop55), $pop20 + i32.const $push49=, 0 + i32.const $push21=, -341751747 + i32.mul $push22=, $0, $pop21 + i32.const $push23=, 229283573 + i32.add $push48=, $pop22, $pop23 + tee_local $push47=, $0=, $pop48 + i32.const $push46=, 1103515245 + i32.mul $push24=, $pop47, $pop46 + i32.const $push45=, 12345 + i32.add $push44=, $pop24, $pop45 + tee_local $push43=, $1=, $pop44 + i32.store myrnd.s($pop49), $pop43 + i32.const $push42=, 0 + i32.const $push41=, 16 + i32.shr_u $push28=, $1, $pop41 + i32.const $push26=, 2047 + i32.and $push29=, $pop28, $pop26 + i32.const $push40=, 16 + i32.shr_u $push25=, $0, $pop40 + i32.const $push39=, 2047 + i32.and $push27=, $pop25, $pop39 + i32.add $push30=, $pop29, $pop27 + i64.extend_u/i32 $push31=, $pop30 + i64.const $push32=, 35 + i64.shl $push33=, $pop31, $pop32 + i32.const $push38=, 0 + i64.load $push34=, sD($pop38) + i64.const $push35=, 34359738367 + i64.and $push36=, $pop34, $pop35 + i64.or $push37=, $pop33, $pop36 + i64.store sD($pop42), $pop37 + # fallthrough-return + .endfunc +.Lfunc_end24: + .size testD, .Lfunc_end24-testD + # -- End function + .section .text.retmeE,"ax",@progbits + .hidden retmeE # -- Begin function retmeE + .globl retmeE + .type retmeE,@function +retmeE: # @retmeE + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=0 + i64.store 0($0):p2align=0, $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i64.load $push4=, 0($pop3):p2align=0 + i64.store 0($pop2):p2align=0, $pop4 + # fallthrough-return + .endfunc +.Lfunc_end25: + .size retmeE, .Lfunc_end25-retmeE + # -- End function + .section .text.fn1E,"ax",@progbits + .hidden fn1E # -- Begin function fn1E + .globl fn1E + .type fn1E,@function +fn1E: # @fn1E + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, sE+8($pop0) + i64.const $push2=, 35 + i64.shr_u $push3=, $pop1, $pop2 + i32.wrap/i64 $push4=, $pop3 + i32.add $push5=, $pop4, $0 + i32.const $push6=, 536870911 + i32.and $push7=, $pop5, $pop6 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end26: + .size fn1E, .Lfunc_end26-fn1E + # -- End function + .section .text.fn2E,"ax",@progbits + .hidden fn2E # -- Begin function fn2E + .globl fn2E + .type fn2E,@function +fn2E: # @fn2E + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, sE+8($pop0) + i64.const $push2=, 35 + i64.shr_u $push3=, $pop1, $pop2 + i32.wrap/i64 $push4=, $pop3 + i32.add $push5=, $pop4, $0 + i32.const $push6=, 536870911 + i32.and $push7=, $pop5, $pop6 + i32.const $push8=, 15 + i32.rem_u $push9=, $pop7, $pop8 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end27: + .size fn2E, .Lfunc_end27-fn2E + # -- End function + .section .text.retitE,"ax",@progbits + .hidden retitE # -- Begin function retitE + .globl retitE + .type retitE,@function +retitE: # @retitE + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, sE+8($pop0) + i64.const $push2=, 35 + i64.shr_u $push3=, $pop1, $pop2 + i32.wrap/i64 $push4=, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end28: + .size retitE, .Lfunc_end28-retitE + # -- End function + .section .text.fn3E,"ax",@progbits + .hidden fn3E # -- Begin function fn3E + .globl fn3E + .type fn3E,@function +fn3E: # @fn3E + .param i32 + .result i32 + .local i64 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push16=, 0 + i64.load $push15=, sE+8($pop16) + tee_local $push14=, $1=, $pop15 + i64.const $push3=, 35 + i64.shr_u $push4=, $pop14, $pop3 + i32.wrap/i64 $push5=, $pop4 + i32.add $push13=, $pop5, $0 + tee_local $push12=, $0=, $pop13 + i64.extend_u/i32 $push6=, $pop12 + i64.const $push11=, 35 + i64.shl $push7=, $pop6, $pop11 + i64.const $push1=, 34359738367 + i64.and $push2=, $1, $pop1 + i64.or $push8=, $pop7, $pop2 + i64.store sE+8($pop0), $pop8 + i32.const $push9=, 536870911 + i32.and $push10=, $0, $pop9 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end29: + .size fn3E, .Lfunc_end29-fn3E + # -- End function + .section .text.testE,"ax",@progbits + .hidden testE # -- Begin function testE + .globl testE + .type testE,@function +testE: # @testE + .local i32, i32 +# BB#0: # %if.end95 + i32.const $push0=, 0 + i32.const $push158=, 0 + i32.load $push1=, myrnd.s($pop158) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push157=, $pop3, $pop4 + tee_local $push156=, $0=, $pop157 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop156, $pop5 + i32.store8 sE($pop0), $pop6 + i32.const $push155=, 0 + i32.const $push154=, 1103515245 + i32.mul $push7=, $0, $pop154 + i32.const $push153=, 12345 + i32.add $push152=, $pop7, $pop153 + tee_local $push151=, $0=, $pop152 + i32.const $push150=, 16 + i32.shr_u $push8=, $pop151, $pop150 + i32.store8 sE+1($pop155), $pop8 + i32.const $push149=, 0 + i32.const $push148=, 1103515245 + i32.mul $push9=, $0, $pop148 + i32.const $push147=, 12345 + i32.add $push146=, $pop9, $pop147 + tee_local $push145=, $0=, $pop146 + i32.const $push144=, 16 + i32.shr_u $push10=, $pop145, $pop144 + i32.store8 sE+2($pop149), $pop10 + i32.const $push143=, 0 + i32.const $push142=, 1103515245 + i32.mul $push11=, $0, $pop142 + i32.const $push141=, 12345 + i32.add $push140=, $pop11, $pop141 + tee_local $push139=, $0=, $pop140 + i32.const $push138=, 16 + i32.shr_u $push12=, $pop139, $pop138 + i32.store8 sE+3($pop143), $pop12 + i32.const $push137=, 0 + i32.const $push136=, 1103515245 + i32.mul $push13=, $0, $pop136 + i32.const $push135=, 12345 + i32.add $push134=, $pop13, $pop135 + tee_local $push133=, $0=, $pop134 + i32.const $push132=, 16 + i32.shr_u $push14=, $pop133, $pop132 + i32.store8 sE+4($pop137), $pop14 + i32.const $push131=, 0 + i32.const $push130=, 1103515245 + i32.mul $push15=, $0, $pop130 + i32.const $push129=, 12345 + i32.add $push128=, $pop15, $pop129 + tee_local $push127=, $0=, $pop128 + i32.const $push126=, 16 + i32.shr_u $push16=, $pop127, $pop126 + i32.store8 sE+5($pop131), $pop16 + i32.const $push125=, 0 + i32.const $push124=, 1103515245 + i32.mul $push17=, $0, $pop124 + i32.const $push123=, 12345 + i32.add $push122=, $pop17, $pop123 + tee_local $push121=, $0=, $pop122 + i32.const $push120=, 16 + i32.shr_u $push18=, $pop121, $pop120 + i32.store8 sE+6($pop125), $pop18 + i32.const $push119=, 0 + i32.const $push118=, 1103515245 + i32.mul $push19=, $0, $pop118 + i32.const $push117=, 12345 + i32.add $push116=, $pop19, $pop117 + tee_local $push115=, $0=, $pop116 + i32.const $push114=, 16 + i32.shr_u $push20=, $pop115, $pop114 + i32.store8 sE+7($pop119), $pop20 + i32.const $push113=, 0 + i32.const $push112=, 1103515245 + i32.mul $push21=, $0, $pop112 + i32.const $push111=, 12345 + i32.add $push110=, $pop21, $pop111 + tee_local $push109=, $0=, $pop110 + i32.const $push108=, 16 + i32.shr_u $push22=, $pop109, $pop108 + i32.store8 sE+8($pop113), $pop22 + i32.const $push107=, 0 + i32.const $push106=, 1103515245 + i32.mul $push23=, $0, $pop106 + i32.const $push105=, 12345 + i32.add $push104=, $pop23, $pop105 + tee_local $push103=, $0=, $pop104 + i32.const $push102=, 16 + i32.shr_u $push24=, $pop103, $pop102 + i32.store8 sE+9($pop107), $pop24 + i32.const $push101=, 0 + i32.const $push100=, 1103515245 + i32.mul $push25=, $0, $pop100 + i32.const $push99=, 12345 + i32.add $push98=, $pop25, $pop99 + tee_local $push97=, $0=, $pop98 + i32.const $push96=, 16 + i32.shr_u $push26=, $pop97, $pop96 + i32.store8 sE+10($pop101), $pop26 + i32.const $push95=, 0 + i32.const $push94=, 1103515245 + i32.mul $push27=, $0, $pop94 + i32.const $push93=, 12345 + i32.add $push92=, $pop27, $pop93 + tee_local $push91=, $0=, $pop92 + i32.const $push90=, 16 + i32.shr_u $push28=, $pop91, $pop90 + i32.store8 sE+11($pop95), $pop28 + i32.const $push89=, 0 + i32.const $push88=, 1103515245 + i32.mul $push29=, $0, $pop88 + i32.const $push87=, 12345 + i32.add $push86=, $pop29, $pop87 + tee_local $push85=, $0=, $pop86 + i32.const $push84=, 16 + i32.shr_u $push30=, $pop85, $pop84 + i32.store8 sE+12($pop89), $pop30 + i32.const $push83=, 0 + i32.const $push82=, 1103515245 + i32.mul $push31=, $0, $pop82 + i32.const $push81=, 12345 + i32.add $push80=, $pop31, $pop81 + tee_local $push79=, $0=, $pop80 + i32.const $push78=, 16 + i32.shr_u $push32=, $pop79, $pop78 + i32.store8 sE+13($pop83), $pop32 + i32.const $push77=, 0 + i32.const $push76=, 1103515245 + i32.mul $push33=, $0, $pop76 + i32.const $push75=, 12345 + i32.add $push74=, $pop33, $pop75 + tee_local $push73=, $0=, $pop74 + i32.const $push72=, 16 + i32.shr_u $push34=, $pop73, $pop72 + i32.store8 sE+14($pop77), $pop34 + i32.const $push71=, 0 + i32.const $push70=, 1103515245 + i32.mul $push35=, $0, $pop70 + i32.const $push69=, 12345 + i32.add $push68=, $pop35, $pop69 + tee_local $push67=, $0=, $pop68 + i32.const $push66=, 16 + i32.shr_u $push36=, $pop67, $pop66 + i32.store8 sE+15($pop71), $pop36 + i32.const $push65=, 0 + i32.const $push37=, -341751747 + i32.mul $push38=, $0, $pop37 + i32.const $push39=, 229283573 + i32.add $push64=, $pop38, $pop39 + tee_local $push63=, $0=, $pop64 + i32.const $push62=, 1103515245 + i32.mul $push40=, $pop63, $pop62 + i32.const $push61=, 12345 + i32.add $push60=, $pop40, $pop61 + tee_local $push59=, $1=, $pop60 + i32.store myrnd.s($pop65), $pop59 + i32.const $push58=, 0 + i32.const $push57=, 16 + i32.shr_u $push44=, $1, $pop57 + i32.const $push42=, 2047 + i32.and $push45=, $pop44, $pop42 + i32.const $push56=, 16 + i32.shr_u $push41=, $0, $pop56 + i32.const $push55=, 2047 + i32.and $push43=, $pop41, $pop55 + i32.add $push46=, $pop45, $pop43 + i64.extend_u/i32 $push47=, $pop46 + i64.const $push48=, 35 + i64.shl $push49=, $pop47, $pop48 + i32.const $push54=, 0 + i64.load $push50=, sE+8($pop54) + i64.const $push51=, 34359738367 + i64.and $push52=, $pop50, $pop51 + i64.or $push53=, $pop49, $pop52 + i64.store sE+8($pop58), $pop53 + # fallthrough-return + .endfunc +.Lfunc_end30: + .size testE, .Lfunc_end30-testE + # -- End function + .section .text.retmeF,"ax",@progbits + .hidden retmeF # -- Begin function retmeF + .globl retmeF + .type retmeF,@function +retmeF: # @retmeF + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=0 + i64.store 0($0):p2align=0, $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i64.load $push4=, 0($pop3):p2align=0 + i64.store 0($pop2):p2align=0, $pop4 + # fallthrough-return + .endfunc +.Lfunc_end31: + .size retmeF, .Lfunc_end31-retmeF + # -- End function + .section .text.fn1F,"ax",@progbits + .hidden fn1F # -- Begin function fn1F + .globl fn1F + .type fn1F,@function +fn1F: # @fn1F + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, sF($pop0) + i64.const $push2=, 35 + i64.shr_u $push3=, $pop1, $pop2 + i32.wrap/i64 $push4=, $pop3 + i32.add $push5=, $pop4, $0 + i32.const $push6=, 536870911 + i32.and $push7=, $pop5, $pop6 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end32: + .size fn1F, .Lfunc_end32-fn1F + # -- End function + .section .text.fn2F,"ax",@progbits + .hidden fn2F # -- Begin function fn2F + .globl fn2F + .type fn2F,@function +fn2F: # @fn2F + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, sF($pop0) + i64.const $push2=, 35 + i64.shr_u $push3=, $pop1, $pop2 + i32.wrap/i64 $push4=, $pop3 + i32.add $push5=, $pop4, $0 + i32.const $push6=, 536870911 + i32.and $push7=, $pop5, $pop6 + i32.const $push8=, 15 + i32.rem_u $push9=, $pop7, $pop8 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end33: + .size fn2F, .Lfunc_end33-fn2F + # -- End function + .section .text.retitF,"ax",@progbits + .hidden retitF # -- Begin function retitF + .globl retitF + .type retitF,@function +retitF: # @retitF + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, sF($pop0) + i64.const $push2=, 35 + i64.shr_u $push3=, $pop1, $pop2 + i32.wrap/i64 $push4=, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end34: + .size retitF, .Lfunc_end34-retitF + # -- End function + .section .text.fn3F,"ax",@progbits + .hidden fn3F # -- Begin function fn3F + .globl fn3F + .type fn3F,@function +fn3F: # @fn3F + .param i32 + .result i32 + .local i64 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push16=, 0 + i64.load $push15=, sF($pop16) + tee_local $push14=, $1=, $pop15 + i64.const $push3=, 35 + i64.shr_u $push4=, $pop14, $pop3 + i32.wrap/i64 $push5=, $pop4 + i32.add $push13=, $pop5, $0 + tee_local $push12=, $0=, $pop13 + i64.extend_u/i32 $push6=, $pop12 + i64.const $push11=, 35 + i64.shl $push7=, $pop6, $pop11 + i64.const $push1=, 34359738367 + i64.and $push2=, $1, $pop1 + i64.or $push8=, $pop7, $pop2 + i64.store sF($pop0), $pop8 + i32.const $push9=, 536870911 + i32.and $push10=, $0, $pop9 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end35: + .size fn3F, .Lfunc_end35-fn3F + # -- End function + .section .text.testF,"ax",@progbits + .hidden testF # -- Begin function testF + .globl testF + .type testF,@function +testF: # @testF + .local i32, i32 +# BB#0: # %if.end91 + i32.const $push0=, 0 + i32.const $push158=, 0 + i32.load $push1=, myrnd.s($pop158) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push157=, $pop3, $pop4 + tee_local $push156=, $0=, $pop157 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop156, $pop5 + i32.store8 sF($pop0), $pop6 + i32.const $push155=, 0 + i32.const $push154=, 1103515245 + i32.mul $push7=, $0, $pop154 + i32.const $push153=, 12345 + i32.add $push152=, $pop7, $pop153 + tee_local $push151=, $0=, $pop152 + i32.const $push150=, 16 + i32.shr_u $push8=, $pop151, $pop150 + i32.store8 sF+1($pop155), $pop8 + i32.const $push149=, 0 + i32.const $push148=, 1103515245 + i32.mul $push9=, $0, $pop148 + i32.const $push147=, 12345 + i32.add $push146=, $pop9, $pop147 + tee_local $push145=, $0=, $pop146 + i32.const $push144=, 16 + i32.shr_u $push10=, $pop145, $pop144 + i32.store8 sF+2($pop149), $pop10 + i32.const $push143=, 0 + i32.const $push142=, 1103515245 + i32.mul $push11=, $0, $pop142 + i32.const $push141=, 12345 + i32.add $push140=, $pop11, $pop141 + tee_local $push139=, $0=, $pop140 + i32.const $push138=, 16 + i32.shr_u $push12=, $pop139, $pop138 + i32.store8 sF+3($pop143), $pop12 + i32.const $push137=, 0 + i32.const $push136=, 1103515245 + i32.mul $push13=, $0, $pop136 + i32.const $push135=, 12345 + i32.add $push134=, $pop13, $pop135 + tee_local $push133=, $0=, $pop134 + i32.const $push132=, 16 + i32.shr_u $push14=, $pop133, $pop132 + i32.store8 sF+4($pop137), $pop14 + i32.const $push131=, 0 + i32.const $push130=, 1103515245 + i32.mul $push15=, $0, $pop130 + i32.const $push129=, 12345 + i32.add $push128=, $pop15, $pop129 + tee_local $push127=, $0=, $pop128 + i32.const $push126=, 16 + i32.shr_u $push16=, $pop127, $pop126 + i32.store8 sF+5($pop131), $pop16 + i32.const $push125=, 0 + i32.const $push124=, 1103515245 + i32.mul $push17=, $0, $pop124 + i32.const $push123=, 12345 + i32.add $push122=, $pop17, $pop123 + tee_local $push121=, $0=, $pop122 + i32.const $push120=, 16 + i32.shr_u $push18=, $pop121, $pop120 + i32.store8 sF+6($pop125), $pop18 + i32.const $push119=, 0 + i32.const $push118=, 1103515245 + i32.mul $push19=, $0, $pop118 + i32.const $push117=, 12345 + i32.add $push116=, $pop19, $pop117 + tee_local $push115=, $0=, $pop116 + i32.const $push114=, 16 + i32.shr_u $push20=, $pop115, $pop114 + i32.store8 sF+7($pop119), $pop20 + i32.const $push113=, 0 + i32.const $push112=, 1103515245 + i32.mul $push21=, $0, $pop112 + i32.const $push111=, 12345 + i32.add $push110=, $pop21, $pop111 + tee_local $push109=, $0=, $pop110 + i32.const $push108=, 16 + i32.shr_u $push22=, $pop109, $pop108 + i32.store8 sF+8($pop113), $pop22 + i32.const $push107=, 0 + i32.const $push106=, 1103515245 + i32.mul $push23=, $0, $pop106 + i32.const $push105=, 12345 + i32.add $push104=, $pop23, $pop105 + tee_local $push103=, $0=, $pop104 + i32.const $push102=, 16 + i32.shr_u $push24=, $pop103, $pop102 + i32.store8 sF+9($pop107), $pop24 + i32.const $push101=, 0 + i32.const $push100=, 1103515245 + i32.mul $push25=, $0, $pop100 + i32.const $push99=, 12345 + i32.add $push98=, $pop25, $pop99 + tee_local $push97=, $0=, $pop98 + i32.const $push96=, 16 + i32.shr_u $push26=, $pop97, $pop96 + i32.store8 sF+10($pop101), $pop26 + i32.const $push95=, 0 + i32.const $push94=, 1103515245 + i32.mul $push27=, $0, $pop94 + i32.const $push93=, 12345 + i32.add $push92=, $pop27, $pop93 + tee_local $push91=, $0=, $pop92 + i32.const $push90=, 16 + i32.shr_u $push28=, $pop91, $pop90 + i32.store8 sF+11($pop95), $pop28 + i32.const $push89=, 0 + i32.const $push88=, 1103515245 + i32.mul $push29=, $0, $pop88 + i32.const $push87=, 12345 + i32.add $push86=, $pop29, $pop87 + tee_local $push85=, $0=, $pop86 + i32.const $push84=, 16 + i32.shr_u $push30=, $pop85, $pop84 + i32.store8 sF+12($pop89), $pop30 + i32.const $push83=, 0 + i32.const $push82=, 1103515245 + i32.mul $push31=, $0, $pop82 + i32.const $push81=, 12345 + i32.add $push80=, $pop31, $pop81 + tee_local $push79=, $0=, $pop80 + i32.const $push78=, 16 + i32.shr_u $push32=, $pop79, $pop78 + i32.store8 sF+13($pop83), $pop32 + i32.const $push77=, 0 + i32.const $push76=, 1103515245 + i32.mul $push33=, $0, $pop76 + i32.const $push75=, 12345 + i32.add $push74=, $pop33, $pop75 + tee_local $push73=, $0=, $pop74 + i32.const $push72=, 16 + i32.shr_u $push34=, $pop73, $pop72 + i32.store8 sF+14($pop77), $pop34 + i32.const $push71=, 0 + i32.const $push70=, 1103515245 + i32.mul $push35=, $0, $pop70 + i32.const $push69=, 12345 + i32.add $push68=, $pop35, $pop69 + tee_local $push67=, $0=, $pop68 + i32.const $push66=, 16 + i32.shr_u $push36=, $pop67, $pop66 + i32.store8 sF+15($pop71), $pop36 + i32.const $push65=, 0 + i32.const $push37=, -341751747 + i32.mul $push38=, $0, $pop37 + i32.const $push39=, 229283573 + i32.add $push64=, $pop38, $pop39 + tee_local $push63=, $0=, $pop64 + i32.const $push62=, 1103515245 + i32.mul $push40=, $pop63, $pop62 + i32.const $push61=, 12345 + i32.add $push60=, $pop40, $pop61 + tee_local $push59=, $1=, $pop60 + i32.store myrnd.s($pop65), $pop59 + i32.const $push58=, 0 + i32.const $push57=, 16 + i32.shr_u $push44=, $1, $pop57 + i32.const $push42=, 2047 + i32.and $push45=, $pop44, $pop42 + i32.const $push56=, 16 + i32.shr_u $push41=, $0, $pop56 + i32.const $push55=, 2047 + i32.and $push43=, $pop41, $pop55 + i32.add $push46=, $pop45, $pop43 + i64.extend_u/i32 $push47=, $pop46 + i64.const $push48=, 35 + i64.shl $push49=, $pop47, $pop48 + i32.const $push54=, 0 + i64.load $push50=, sF($pop54) + i64.const $push51=, 34359738367 + i64.and $push52=, $pop50, $pop51 + i64.or $push53=, $pop49, $pop52 + i64.store sF($pop58), $pop53 + # fallthrough-return + .endfunc +.Lfunc_end36: + .size testF, .Lfunc_end36-testF + # -- End function + .section .text.retmeG,"ax",@progbits + .hidden retmeG # -- Begin function retmeG + .globl retmeG + .type retmeG,@function +retmeG: # @retmeG + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=0 + i64.store 0($0):p2align=0, $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i32.load8_u $push4=, 0($pop3) + i32.store8 0($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end37: + .size retmeG, .Lfunc_end37-retmeG + # -- End function + .section .text.fn1G,"ax",@progbits + .hidden fn1G # -- Begin function fn1G + .globl fn1G + .type fn1G,@function +fn1G: # @fn1G + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, sG($pop0) + i32.const $push2=, 2 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 63 + i32.and $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end38: + .size fn1G, .Lfunc_end38-fn1G + # -- End function + .section .text.fn2G,"ax",@progbits + .hidden fn2G # -- Begin function fn2G + .globl fn2G + .type fn2G,@function +fn2G: # @fn2G + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, sG($pop0) + i32.const $push2=, 2 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 63 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 15 + i32.rem_u $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end39: + .size fn2G, .Lfunc_end39-fn2G + # -- End function + .section .text.retitG,"ax",@progbits + .hidden retitG # -- Begin function retitG + .globl retitG + .type retitG,@function +retitG: # @retitG + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, sG($pop0) + i32.const $push2=, 2 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end40: + .size retitG, .Lfunc_end40-retitG + # -- End function + .section .text.fn3G,"ax",@progbits + .hidden fn3G # -- Begin function fn3G + .globl fn3G + .type fn3G,@function +fn3G: # @fn3G + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push14=, 0 + i32.load8_u $push13=, sG($pop14) + tee_local $push12=, $1=, $pop13 + i32.const $push3=, 2 + i32.shr_u $push4=, $pop12, $pop3 + i32.add $push11=, $pop4, $0 + tee_local $push10=, $0=, $pop11 + i32.const $push9=, 2 + i32.shl $push5=, $pop10, $pop9 + i32.const $push1=, 3 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store8 sG($pop0), $pop6 + i32.const $push7=, 63 + i32.and $push8=, $0, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end41: + .size fn3G, .Lfunc_end41-fn3G + # -- End function + .section .text.testG,"ax",@progbits + .hidden testG # -- Begin function testG + .globl testG + .type testG,@function +testG: # @testG + .local i32, i32, i32, i32 +# BB#0: # %lor.lhs.false149 + i32.const $push0=, 0 + i32.const $push105=, 0 + i32.load $push1=, myrnd.s($pop105) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push104=, $pop3, $pop4 + tee_local $push103=, $0=, $pop104 + i32.const $push102=, 1103515245 + i32.mul $push5=, $pop103, $pop102 + i32.const $push101=, 12345 + i32.add $push100=, $pop5, $pop101 + tee_local $push99=, $1=, $pop100 + i32.const $push6=, 16 + i32.shr_u $push7=, $pop99, $pop6 + i32.store8 sG+1($pop0), $pop7 + i32.const $push98=, 0 + i32.const $push97=, 1103515245 + i32.mul $push8=, $1, $pop97 + i32.const $push96=, 12345 + i32.add $push95=, $pop8, $pop96 + tee_local $push94=, $1=, $pop95 + i32.const $push93=, 16 + i32.shr_u $push9=, $pop94, $pop93 + i32.store8 sG+2($pop98), $pop9 + i32.const $push92=, 0 + i32.const $push91=, 1103515245 + i32.mul $push10=, $1, $pop91 + i32.const $push90=, 12345 + i32.add $push89=, $pop10, $pop90 + tee_local $push88=, $1=, $pop89 + i32.const $push87=, 16 + i32.shr_u $push11=, $pop88, $pop87 + i32.store8 sG+3($pop92), $pop11 + i32.const $push86=, 0 + i32.const $push85=, 1103515245 + i32.mul $push12=, $1, $pop85 + i32.const $push84=, 12345 + i32.add $push83=, $pop12, $pop84 + tee_local $push82=, $1=, $pop83 + i32.const $push81=, 16 + i32.shr_u $push13=, $pop82, $pop81 + i32.store8 sG+4($pop86), $pop13 + i32.const $push80=, 0 + i32.const $push79=, 1103515245 + i32.mul $push14=, $1, $pop79 + i32.const $push78=, 12345 + i32.add $push77=, $pop14, $pop78 + tee_local $push76=, $1=, $pop77 + i32.const $push75=, 16 + i32.shr_u $push15=, $pop76, $pop75 + i32.store8 sG+5($pop80), $pop15 + i32.const $push74=, 0 + i32.const $push73=, 1103515245 + i32.mul $push16=, $1, $pop73 + i32.const $push72=, 12345 + i32.add $push71=, $pop16, $pop72 + tee_local $push70=, $1=, $pop71 + i32.const $push69=, 16 + i32.shr_u $push17=, $pop70, $pop69 + i32.store8 sG+6($pop74), $pop17 + i32.const $push68=, 0 + i32.const $push67=, 1103515245 + i32.mul $push18=, $1, $pop67 + i32.const $push66=, 12345 + i32.add $push65=, $pop18, $pop66 + tee_local $push64=, $1=, $pop65 + i32.const $push63=, 16 + i32.shr_u $push19=, $pop64, $pop63 + i32.store8 sG+7($pop68), $pop19 + i32.const $push62=, 0 + i32.const $push61=, 1103515245 + i32.mul $push20=, $1, $pop61 + i32.const $push60=, 12345 + i32.add $push59=, $pop20, $pop60 + tee_local $push58=, $1=, $pop59 + i32.const $push57=, 16 + i32.shr_u $push21=, $pop58, $pop57 + i32.store8 sG+8($pop62), $pop21 + i32.const $push56=, 0 + i32.const $push22=, -341751747 + i32.mul $push23=, $1, $pop22 + i32.const $push24=, 229283573 + i32.add $push55=, $pop23, $pop24 + tee_local $push54=, $1=, $pop55 + i32.const $push53=, 1103515245 + i32.mul $push25=, $pop54, $pop53 + i32.const $push52=, 12345 + i32.add $push51=, $pop25, $pop52 + tee_local $push50=, $2=, $pop51 + i32.store myrnd.s($pop56), $pop50 + i32.const $push49=, 0 + i32.const $push48=, 16 + i32.shr_u $push47=, $2, $pop48 + tee_local $push46=, $2=, $pop47 + i32.const $push28=, 2047 + i32.and $push29=, $pop46, $pop28 + i32.const $push45=, 16 + i32.shr_u $push44=, $1, $pop45 + tee_local $push43=, $1=, $pop44 + i32.const $push26=, 63 + i32.and $push27=, $pop43, $pop26 + i32.add $push42=, $pop29, $pop27 + tee_local $push41=, $3=, $pop42 + i32.const $push30=, 2 + i32.shl $push31=, $pop41, $pop30 + i32.const $push40=, 16 + i32.shr_u $push32=, $0, $pop40 + i32.const $push33=, 3 + i32.and $push34=, $pop32, $pop33 + i32.or $push35=, $pop31, $pop34 + i32.store8 sG($pop49), $pop35 + block + i32.add $push36=, $2, $1 + i32.xor $push37=, $pop36, $3 + i32.const $push39=, 63 + i32.and $push38=, $pop37, $pop39 + br_if 0, $pop38 # 0: down to label3 +# BB#1: # %if.end155 + return +.LBB42_2: # %if.then154 + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end42: + .size testG, .Lfunc_end42-testG + # -- End function + .section .text.retmeH,"ax",@progbits + .hidden retmeH # -- Begin function retmeH + .globl retmeH + .type retmeH,@function +retmeH: # @retmeH + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=0 + i64.store 0($0):p2align=0, $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i32.load16_u $push4=, 0($pop3):p2align=0 + i32.store16 0($pop2):p2align=0, $pop4 + # fallthrough-return + .endfunc +.Lfunc_end43: + .size retmeH, .Lfunc_end43-retmeH + # -- End function + .section .text.fn1H,"ax",@progbits + .hidden fn1H # -- Begin function fn1H + .globl fn1H + .type fn1H,@function +fn1H: # @fn1H + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, sH+1($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 255 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end44: + .size fn1H, .Lfunc_end44-fn1H + # -- End function + .section .text.fn2H,"ax",@progbits + .hidden fn2H # -- Begin function fn2H + .globl fn2H + .type fn2H,@function +fn2H: # @fn2H + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, sH+1($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 255 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end45: + .size fn2H, .Lfunc_end45-fn2H + # -- End function + .section .text.retitH,"ax",@progbits + .hidden retitH # -- Begin function retitH + .globl retitH + .type retitH,@function +retitH: # @retitH + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, sH+1($pop0) + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end46: + .size retitH, .Lfunc_end46-retitH + # -- End function + .section .text.fn3H,"ax",@progbits + .hidden fn3H # -- Begin function fn3H + .globl fn3H + .type fn3H,@function +fn3H: # @fn3H + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load8_u $push1=, sH+1($pop6) + i32.add $push5=, $pop1, $0 + tee_local $push4=, $0=, $pop5 + i32.store8 sH+1($pop0), $pop4 + i32.const $push2=, 255 + i32.and $push3=, $0, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end47: + .size fn3H, .Lfunc_end47-fn3H + # -- End function + .section .text.testH,"ax",@progbits + .hidden testH # -- Begin function testH + .globl testH + .type testH,@function +testH: # @testH + .local i32, i32, i32 +# BB#0: # %lor.lhs.false130 + i32.const $push0=, 0 + i32.const $push101=, 0 + i32.load $push1=, myrnd.s($pop101) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push100=, $pop3, $pop4 + tee_local $push99=, $0=, $pop100 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop99, $pop5 + i32.store8 sH($pop0), $pop6 + i32.const $push98=, 0 + i32.const $push7=, -1029531031 + i32.mul $push8=, $0, $pop7 + i32.const $push9=, -740551042 + i32.add $push97=, $pop8, $pop9 + tee_local $push96=, $0=, $pop97 + i32.const $push95=, 16 + i32.shr_u $push10=, $pop96, $pop95 + i32.store8 sH+2($pop98), $pop10 + i32.const $push94=, 0 + i32.const $push93=, 1103515245 + i32.mul $push11=, $0, $pop93 + i32.const $push92=, 12345 + i32.add $push91=, $pop11, $pop92 + tee_local $push90=, $0=, $pop91 + i32.const $push89=, 16 + i32.shr_u $push12=, $pop90, $pop89 + i32.store8 sH+3($pop94), $pop12 + i32.const $push88=, 0 + i32.const $push87=, 1103515245 + i32.mul $push13=, $0, $pop87 + i32.const $push86=, 12345 + i32.add $push85=, $pop13, $pop86 + tee_local $push84=, $0=, $pop85 + i32.const $push83=, 16 + i32.shr_u $push14=, $pop84, $pop83 + i32.store8 sH+4($pop88), $pop14 + i32.const $push82=, 0 + i32.const $push81=, 1103515245 + i32.mul $push15=, $0, $pop81 + i32.const $push80=, 12345 + i32.add $push79=, $pop15, $pop80 + tee_local $push78=, $0=, $pop79 + i32.const $push77=, 16 + i32.shr_u $push16=, $pop78, $pop77 + i32.store8 sH+5($pop82), $pop16 + i32.const $push76=, 0 + i32.const $push75=, 1103515245 + i32.mul $push17=, $0, $pop75 + i32.const $push74=, 12345 + i32.add $push73=, $pop17, $pop74 + tee_local $push72=, $0=, $pop73 + i32.const $push71=, 16 + i32.shr_u $push18=, $pop72, $pop71 + i32.store8 sH+6($pop76), $pop18 + i32.const $push70=, 0 + i32.const $push69=, 1103515245 + i32.mul $push19=, $0, $pop69 + i32.const $push68=, 12345 + i32.add $push67=, $pop19, $pop68 + tee_local $push66=, $0=, $pop67 + i32.const $push65=, 16 + i32.shr_u $push20=, $pop66, $pop65 + i32.store8 sH+7($pop70), $pop20 + i32.const $push64=, 0 + i32.const $push63=, 1103515245 + i32.mul $push21=, $0, $pop63 + i32.const $push62=, 12345 + i32.add $push61=, $pop21, $pop62 + tee_local $push60=, $0=, $pop61 + i32.const $push59=, 16 + i32.shr_u $push22=, $pop60, $pop59 + i32.store8 sH+8($pop64), $pop22 + i32.const $push58=, 0 + i32.const $push57=, 1103515245 + i32.mul $push23=, $0, $pop57 + i32.const $push56=, 12345 + i32.add $push55=, $pop23, $pop56 + tee_local $push54=, $0=, $pop55 + i32.const $push53=, 16 + i32.shr_u $push24=, $pop54, $pop53 + i32.store8 sH+9($pop58), $pop24 + i32.const $push52=, 0 + i32.const $push25=, -341751747 + i32.mul $push26=, $0, $pop25 + i32.const $push27=, 229283573 + i32.add $push51=, $pop26, $pop27 + tee_local $push50=, $0=, $pop51 + i32.const $push49=, 1103515245 + i32.mul $push28=, $pop50, $pop49 + i32.const $push48=, 12345 + i32.add $push47=, $pop28, $pop48 + tee_local $push46=, $1=, $pop47 + i32.store myrnd.s($pop52), $pop46 + i32.const $push45=, 0 + i32.const $push44=, 16 + i32.shr_u $push43=, $1, $pop44 + tee_local $push42=, $1=, $pop43 + i32.const $push31=, 2047 + i32.and $push32=, $pop42, $pop31 + i32.const $push41=, 16 + i32.shr_u $push40=, $0, $pop41 + tee_local $push39=, $0=, $pop40 + i32.const $push29=, 255 + i32.and $push30=, $pop39, $pop29 + i32.add $push38=, $pop32, $pop30 + tee_local $push37=, $2=, $pop38 + i32.store8 sH+1($pop45), $pop37 + block + i32.add $push33=, $1, $0 + i32.xor $push34=, $pop33, $2 + i32.const $push36=, 255 + i32.and $push35=, $pop34, $pop36 + br_if 0, $pop35 # 0: down to label4 +# BB#1: # %if.end136 + return +.LBB48_2: # %if.then135 + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end48: + .size testH, .Lfunc_end48-testH + # -- End function + .section .text.retmeI,"ax",@progbits + .hidden retmeI # -- Begin function retmeI + .globl retmeI + .type retmeI,@function +retmeI: # @retmeI + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=0 + i64.store 0($0):p2align=0, $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i32.load8_u $push4=, 0($pop3) + i32.store8 0($pop2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end49: + .size retmeI, .Lfunc_end49-retmeI + # -- End function + .section .text.fn1I,"ax",@progbits + .hidden fn1I # -- Begin function fn1I + .globl fn1I + .type fn1I,@function +fn1I: # @fn1I + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, sI($pop0) + i32.const $push2=, 7 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 1 + i32.and $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end50: + .size fn1I, .Lfunc_end50-fn1I + # -- End function + .section .text.fn2I,"ax",@progbits + .hidden fn2I # -- Begin function fn2I + .globl fn2I + .type fn2I,@function +fn2I: # @fn2I + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, sI($pop0) + i32.const $push2=, 7 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 1 + i32.and $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end51: + .size fn2I, .Lfunc_end51-fn2I + # -- End function + .section .text.retitI,"ax",@progbits + .hidden retitI # -- Begin function retitI + .globl retitI + .type retitI,@function +retitI: # @retitI + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, sI($pop0) + i32.const $push2=, 7 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end52: + .size retitI, .Lfunc_end52-retitI + # -- End function + .section .text.fn3I,"ax",@progbits + .hidden fn3I # -- Begin function fn3I + .globl fn3I + .type fn3I,@function +fn3I: # @fn3I + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push14=, 0 + i32.load8_u $push13=, sI($pop14) + tee_local $push12=, $1=, $pop13 + i32.const $push3=, 7 + i32.shr_u $push4=, $pop12, $pop3 + i32.add $push11=, $pop4, $0 + tee_local $push10=, $0=, $pop11 + i32.const $push9=, 7 + i32.shl $push5=, $pop10, $pop9 + i32.const $push1=, 127 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store8 sI($pop0), $pop6 + i32.const $push7=, 1 + i32.and $push8=, $0, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end53: + .size fn3I, .Lfunc_end53-fn3I + # -- End function + .section .text.testI,"ax",@progbits + .hidden testI # -- Begin function testI + .globl testI + .type testI,@function +testI: # @testI + .local i32, i32, i32, i32 +# BB#0: # %lor.lhs.false149 + i32.const $push0=, 0 + i32.const $push105=, 0 + i32.load $push1=, myrnd.s($pop105) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push104=, $pop3, $pop4 + tee_local $push103=, $0=, $pop104 + i32.const $push102=, 1103515245 + i32.mul $push5=, $pop103, $pop102 + i32.const $push101=, 12345 + i32.add $push100=, $pop5, $pop101 + tee_local $push99=, $1=, $pop100 + i32.const $push6=, 16 + i32.shr_u $push7=, $pop99, $pop6 + i32.store8 sI+1($pop0), $pop7 + i32.const $push98=, 0 + i32.const $push97=, 1103515245 + i32.mul $push8=, $1, $pop97 + i32.const $push96=, 12345 + i32.add $push95=, $pop8, $pop96 + tee_local $push94=, $1=, $pop95 + i32.const $push93=, 16 + i32.shr_u $push9=, $pop94, $pop93 + i32.store8 sI+2($pop98), $pop9 + i32.const $push92=, 0 + i32.const $push91=, 1103515245 + i32.mul $push10=, $1, $pop91 + i32.const $push90=, 12345 + i32.add $push89=, $pop10, $pop90 + tee_local $push88=, $1=, $pop89 + i32.const $push87=, 16 + i32.shr_u $push11=, $pop88, $pop87 + i32.store8 sI+3($pop92), $pop11 + i32.const $push86=, 0 + i32.const $push85=, 1103515245 + i32.mul $push12=, $1, $pop85 + i32.const $push84=, 12345 + i32.add $push83=, $pop12, $pop84 + tee_local $push82=, $1=, $pop83 + i32.const $push81=, 16 + i32.shr_u $push13=, $pop82, $pop81 + i32.store8 sI+4($pop86), $pop13 + i32.const $push80=, 0 + i32.const $push79=, 1103515245 + i32.mul $push14=, $1, $pop79 + i32.const $push78=, 12345 + i32.add $push77=, $pop14, $pop78 + tee_local $push76=, $1=, $pop77 + i32.const $push75=, 16 + i32.shr_u $push15=, $pop76, $pop75 + i32.store8 sI+5($pop80), $pop15 + i32.const $push74=, 0 + i32.const $push73=, 1103515245 + i32.mul $push16=, $1, $pop73 + i32.const $push72=, 12345 + i32.add $push71=, $pop16, $pop72 + tee_local $push70=, $1=, $pop71 + i32.const $push69=, 16 + i32.shr_u $push17=, $pop70, $pop69 + i32.store8 sI+6($pop74), $pop17 + i32.const $push68=, 0 + i32.const $push67=, 1103515245 + i32.mul $push18=, $1, $pop67 + i32.const $push66=, 12345 + i32.add $push65=, $pop18, $pop66 + tee_local $push64=, $1=, $pop65 + i32.const $push63=, 16 + i32.shr_u $push19=, $pop64, $pop63 + i32.store8 sI+7($pop68), $pop19 + i32.const $push62=, 0 + i32.const $push61=, 1103515245 + i32.mul $push20=, $1, $pop61 + i32.const $push60=, 12345 + i32.add $push59=, $pop20, $pop60 + tee_local $push58=, $1=, $pop59 + i32.const $push57=, 16 + i32.shr_u $push21=, $pop58, $pop57 + i32.store8 sI+8($pop62), $pop21 + i32.const $push56=, 0 + i32.const $push22=, -341751747 + i32.mul $push23=, $1, $pop22 + i32.const $push24=, 229283573 + i32.add $push55=, $pop23, $pop24 + tee_local $push54=, $1=, $pop55 + i32.const $push53=, 1103515245 + i32.mul $push25=, $pop54, $pop53 + i32.const $push52=, 12345 + i32.add $push51=, $pop25, $pop52 + tee_local $push50=, $2=, $pop51 + i32.store myrnd.s($pop56), $pop50 + i32.const $push49=, 0 + i32.const $push48=, 16 + i32.shr_u $push47=, $2, $pop48 + tee_local $push46=, $2=, $pop47 + i32.const $push28=, 2047 + i32.and $push29=, $pop46, $pop28 + i32.const $push45=, 16 + i32.shr_u $push44=, $1, $pop45 + tee_local $push43=, $1=, $pop44 + i32.const $push26=, 1 + i32.and $push27=, $pop43, $pop26 + i32.add $push42=, $pop29, $pop27 + tee_local $push41=, $3=, $pop42 + i32.const $push30=, 7 + i32.shl $push31=, $pop41, $pop30 + i32.const $push40=, 16 + i32.shr_u $push32=, $0, $pop40 + i32.const $push33=, 127 + i32.and $push34=, $pop32, $pop33 + i32.or $push35=, $pop31, $pop34 + i32.store8 sI($pop49), $pop35 + block + i32.add $push36=, $2, $1 + i32.xor $push37=, $pop36, $3 + i32.const $push39=, 1 + i32.and $push38=, $pop37, $pop39 + br_if 0, $pop38 # 0: down to label5 +# BB#1: # %if.end155 + return +.LBB54_2: # %if.then154 + end_block # label5: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end54: + .size testI, .Lfunc_end54-testI + # -- End function + .section .text.retmeJ,"ax",@progbits + .hidden retmeJ # -- Begin function retmeJ + .globl retmeJ + .type retmeJ,@function +retmeJ: # @retmeJ + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1):p2align=0 + i32.store 0($0):p2align=1, $pop0 + # fallthrough-return + .endfunc +.Lfunc_end55: + .size retmeJ, .Lfunc_end55-retmeJ + # -- End function + .section .text.fn1J,"ax",@progbits + .hidden fn1J # -- Begin function fn1J + .globl fn1J + .type fn1J,@function +fn1J: # @fn1J + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sJ($pop0) + i32.const $push2=, 9 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 127 + i32.and $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end56: + .size fn1J, .Lfunc_end56-fn1J + # -- End function + .section .text.fn2J,"ax",@progbits + .hidden fn2J # -- Begin function fn2J + .globl fn2J + .type fn2J,@function +fn2J: # @fn2J + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sJ($pop0) + i32.const $push2=, 9 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 127 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 15 + i32.rem_u $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end57: + .size fn2J, .Lfunc_end57-fn2J + # -- End function + .section .text.retitJ,"ax",@progbits + .hidden retitJ # -- Begin function retitJ + .globl retitJ + .type retitJ,@function +retitJ: # @retitJ + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sJ($pop0) + i32.const $push2=, 9 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end58: + .size retitJ, .Lfunc_end58-retitJ + # -- End function + .section .text.fn3J,"ax",@progbits + .hidden fn3J # -- Begin function fn3J + .globl fn3J + .type fn3J,@function +fn3J: # @fn3J + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push14=, 0 + i32.load16_u $push13=, sJ($pop14) + tee_local $push12=, $1=, $pop13 + i32.const $push3=, 9 + i32.shr_u $push4=, $pop12, $pop3 + i32.add $push11=, $pop4, $0 + tee_local $push10=, $0=, $pop11 + i32.const $push9=, 9 + i32.shl $push5=, $pop10, $pop9 + i32.const $push1=, 511 + i32.and $push2=, $1, $pop1 + i32.or $push6=, $pop5, $pop2 + i32.store16 sJ($pop0), $pop6 + i32.const $push7=, 127 + i32.and $push8=, $0, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end59: + .size fn3J, .Lfunc_end59-fn3J + # -- End function + .section .text.testJ,"ax",@progbits + .hidden testJ # -- Begin function testJ + .globl testJ + .type testJ,@function +testJ: # @testJ + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push80=, 0 + i32.const $push79=, 0 + i32.load $push0=, myrnd.s($pop79) + i32.const $push78=, 1103515245 + i32.mul $push1=, $pop0, $pop78 + i32.const $push77=, 12345 + i32.add $push76=, $pop1, $pop77 + tee_local $push75=, $0=, $pop76 + i32.const $push74=, 16 + i32.shr_u $push2=, $pop75, $pop74 + i32.store8 sJ($pop80), $pop2 + i32.const $push73=, 0 + i32.const $push72=, 1103515245 + i32.mul $push3=, $0, $pop72 + i32.const $push71=, 12345 + i32.add $push70=, $pop3, $pop71 + tee_local $push69=, $0=, $pop70 + i32.const $push68=, 16 + i32.shr_u $push4=, $pop69, $pop68 + i32.store8 sJ+1($pop73), $pop4 + i32.const $push67=, 0 + i32.const $push66=, 1103515245 + i32.mul $push5=, $0, $pop66 + i32.const $push65=, 12345 + i32.add $push64=, $pop5, $pop65 + tee_local $push63=, $0=, $pop64 + i32.const $push62=, 16 + i32.shr_u $push6=, $pop63, $pop62 + i32.store8 sJ+2($pop67), $pop6 + i32.const $push61=, 0 + i32.const $push60=, 1103515245 + i32.mul $push7=, $0, $pop60 + i32.const $push59=, 12345 + i32.add $push58=, $pop7, $pop59 + tee_local $push57=, $0=, $pop58 + i32.const $push56=, 16 + i32.shr_u $push8=, $pop57, $pop56 + i32.store8 sJ+3($pop61), $pop8 + i32.const $push55=, 0 + i32.const $push54=, 0 + i32.load16_u $push9=, sJ($pop54) + i32.const $push10=, 511 + i32.and $push53=, $pop9, $pop10 + tee_local $push52=, $1=, $pop53 + i32.const $push51=, 1103515245 + i32.mul $push11=, $0, $pop51 + i32.const $push50=, 12345 + i32.add $push49=, $pop11, $pop50 + tee_local $push48=, $0=, $pop49 + i32.const $push47=, 16 + i32.shr_u $push46=, $pop48, $pop47 + tee_local $push45=, $2=, $pop46 + i32.const $push44=, 9 + i32.shl $push12=, $pop45, $pop44 + i32.or $push13=, $pop52, $pop12 + i32.store16 sJ($pop55), $pop13 + i32.const $push43=, 0 + i32.const $push42=, 1103515245 + i32.mul $push14=, $0, $pop42 + i32.const $push41=, 12345 + i32.add $push40=, $pop14, $pop41 + tee_local $push39=, $0=, $pop40 + i32.store myrnd.s($pop43), $pop39 + block + i32.const $push38=, 16 + i32.shr_u $push37=, $0, $pop38 + tee_local $push36=, $3=, $pop37 + i32.add $push15=, $pop36, $2 + i32.const $push35=, 0 + i32.load $push16=, sJ($pop35) + i32.const $push34=, 9 + i32.shr_u $push17=, $pop16, $pop34 + i32.add $push18=, $3, $pop17 + i32.xor $push19=, $pop15, $pop18 + i32.const $push33=, 127 + i32.and $push20=, $pop19, $pop33 + br_if 0, $pop20 # 0: down to label6 +# BB#1: # %lor.lhs.false136 + i32.const $push99=, 0 + i32.const $push21=, -2139243339 + i32.mul $push22=, $0, $pop21 + i32.const $push23=, -1492899873 + i32.add $push98=, $pop22, $pop23 + tee_local $push97=, $0=, $pop98 + i32.const $push96=, 1103515245 + i32.mul $push24=, $pop97, $pop96 + i32.const $push95=, 12345 + i32.add $push94=, $pop24, $pop95 + tee_local $push93=, $2=, $pop94 + i32.store myrnd.s($pop99), $pop93 + i32.const $push92=, 0 + i32.const $push91=, 16 + i32.shr_u $push90=, $2, $pop91 + tee_local $push89=, $2=, $pop90 + i32.const $push26=, 2047 + i32.and $push27=, $pop89, $pop26 + i32.const $push88=, 16 + i32.shr_u $push87=, $0, $pop88 + tee_local $push86=, $0=, $pop87 + i32.const $push85=, 127 + i32.and $push25=, $pop86, $pop85 + i32.add $push84=, $pop27, $pop25 + tee_local $push83=, $3=, $pop84 + i32.const $push82=, 9 + i32.shl $push28=, $pop83, $pop82 + i32.or $push29=, $pop28, $1 + i32.store16 sJ($pop92), $pop29 + i32.add $push30=, $2, $0 + i32.xor $push31=, $pop30, $3 + i32.const $push81=, 127 + i32.and $push32=, $pop31, $pop81 + br_if 0, $pop32 # 0: down to label6 +# BB#2: # %if.end142 + return +.LBB60_3: # %if.then + end_block # label6: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end60: + .size testJ, .Lfunc_end60-testJ + # -- End function + .section .text.retmeK,"ax",@progbits + .hidden retmeK # -- Begin function retmeK + .globl retmeK + .type retmeK,@function +retmeK: # @retmeK + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1):p2align=0 + i32.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end61: + .size retmeK, .Lfunc_end61-retmeK + # -- End function + .section .text.fn1K,"ax",@progbits + .hidden fn1K # -- Begin function fn1K + .globl fn1K + .type fn1K,@function +fn1K: # @fn1K + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sK($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 63 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end62: + .size fn1K, .Lfunc_end62-fn1K + # -- End function + .section .text.fn2K,"ax",@progbits + .hidden fn2K # -- Begin function fn2K + .globl fn2K + .type fn2K,@function +fn2K: # @fn2K + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sK($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 63 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end63: + .size fn2K, .Lfunc_end63-fn2K + # -- End function + .section .text.retitK,"ax",@progbits + .hidden retitK # -- Begin function retitK + .globl retitK + .type retitK,@function +retitK: # @retitK + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sK($pop0) + i32.const $push2=, 63 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end64: + .size retitK, .Lfunc_end64-retitK + # -- End function + .section .text.fn3K,"ax",@progbits + .hidden fn3K # -- Begin function fn3K + .globl fn3K + .type fn3K,@function +fn3K: # @fn3K + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, sK($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 63 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store sK($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end65: + .size fn3K, .Lfunc_end65-fn3K + # -- End function + .section .text.testK,"ax",@progbits + .hidden testK # -- Begin function testK + .globl testK + .type testK,@function +testK: # @testK + .local i32, i32 +# BB#0: # %if.end129 + i32.const $push0=, 0 + i32.const $push57=, 0 + i32.load $push1=, myrnd.s($pop57) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push56=, $pop3, $pop4 + tee_local $push55=, $0=, $pop56 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop55, $pop5 + i32.store8 sK($pop0), $pop6 + i32.const $push54=, 0 + i32.const $push53=, 1103515245 + i32.mul $push7=, $0, $pop53 + i32.const $push52=, 12345 + i32.add $push51=, $pop7, $pop52 + tee_local $push50=, $0=, $pop51 + i32.const $push49=, 16 + i32.shr_u $push8=, $pop50, $pop49 + i32.store8 sK+1($pop54), $pop8 + i32.const $push48=, 0 + i32.const $push47=, 1103515245 + i32.mul $push9=, $0, $pop47 + i32.const $push46=, 12345 + i32.add $push45=, $pop9, $pop46 + tee_local $push44=, $0=, $pop45 + i32.const $push43=, 16 + i32.shr_u $push10=, $pop44, $pop43 + i32.store8 sK+2($pop48), $pop10 + i32.const $push42=, 0 + i32.const $push41=, 1103515245 + i32.mul $push11=, $0, $pop41 + i32.const $push40=, 12345 + i32.add $push39=, $pop11, $pop40 + tee_local $push38=, $0=, $pop39 + i32.const $push37=, 16 + i32.shr_u $push12=, $pop38, $pop37 + i32.store8 sK+3($pop42), $pop12 + i32.const $push36=, 0 + i32.const $push13=, -341751747 + i32.mul $push14=, $0, $pop13 + i32.const $push15=, 229283573 + i32.add $push35=, $pop14, $pop15 + tee_local $push34=, $0=, $pop35 + i32.const $push33=, 1103515245 + i32.mul $push16=, $pop34, $pop33 + i32.const $push32=, 12345 + i32.add $push31=, $pop16, $pop32 + tee_local $push30=, $1=, $pop31 + i32.store myrnd.s($pop36), $pop30 + i32.const $push29=, 0 + i32.const $push28=, 16 + i32.shr_u $push18=, $1, $pop28 + i32.const $push27=, 16 + i32.shr_u $push17=, $0, $pop27 + i32.add $push19=, $pop18, $pop17 + i32.const $push20=, 63 + i32.and $push21=, $pop19, $pop20 + i32.const $push26=, 0 + i32.load $push22=, sK($pop26) + i32.const $push23=, -64 + i32.and $push24=, $pop22, $pop23 + i32.or $push25=, $pop21, $pop24 + i32.store sK($pop29), $pop25 + # fallthrough-return + .endfunc +.Lfunc_end66: + .size testK, .Lfunc_end66-testK + # -- End function + .section .text.retmeL,"ax",@progbits + .hidden retmeL # -- Begin function retmeL + .globl retmeL + .type retmeL,@function +retmeL: # @retmeL + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=0 + i64.store 0($0):p2align=2, $pop0 + # fallthrough-return + .endfunc +.Lfunc_end67: + .size retmeL, .Lfunc_end67-retmeL + # -- End function + .section .text.fn1L,"ax",@progbits + .hidden fn1L # -- Begin function fn1L + .globl fn1L + .type fn1L,@function +fn1L: # @fn1L + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sL($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 63 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end68: + .size fn1L, .Lfunc_end68-fn1L + # -- End function + .section .text.fn2L,"ax",@progbits + .hidden fn2L # -- Begin function fn2L + .globl fn2L + .type fn2L,@function +fn2L: # @fn2L + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sL($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 63 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end69: + .size fn2L, .Lfunc_end69-fn2L + # -- End function + .section .text.retitL,"ax",@progbits + .hidden retitL # -- Begin function retitL + .globl retitL + .type retitL,@function +retitL: # @retitL + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sL($pop0) + i32.const $push2=, 63 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end70: + .size retitL, .Lfunc_end70-retitL + # -- End function + .section .text.fn3L,"ax",@progbits + .hidden fn3L # -- Begin function fn3L + .globl fn3L + .type fn3L,@function +fn3L: # @fn3L + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, sL($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 63 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store sL($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end71: + .size fn3L, .Lfunc_end71-fn3L + # -- End function + .section .text.testL,"ax",@progbits + .hidden testL # -- Begin function testL + .globl testL + .type testL,@function +testL: # @testL + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push106=, 0 + i32.const $push105=, 0 + i32.load $push0=, myrnd.s($pop105) + i32.const $push104=, 1103515245 + i32.mul $push1=, $pop0, $pop104 + i32.const $push103=, 12345 + i32.add $push102=, $pop1, $pop103 + tee_local $push101=, $0=, $pop102 + i32.const $push100=, 16 + i32.shr_u $push2=, $pop101, $pop100 + i32.store8 sL($pop106), $pop2 + i32.const $push99=, 0 + i32.const $push98=, 1103515245 + i32.mul $push3=, $0, $pop98 + i32.const $push97=, 12345 + i32.add $push96=, $pop3, $pop97 + tee_local $push95=, $0=, $pop96 + i32.const $push94=, 16 + i32.shr_u $push4=, $pop95, $pop94 + i32.store8 sL+1($pop99), $pop4 + i32.const $push93=, 0 + i32.const $push92=, 1103515245 + i32.mul $push5=, $0, $pop92 + i32.const $push91=, 12345 + i32.add $push90=, $pop5, $pop91 + tee_local $push89=, $0=, $pop90 + i32.const $push88=, 16 + i32.shr_u $push6=, $pop89, $pop88 + i32.store8 sL+2($pop93), $pop6 + i32.const $push87=, 0 + i32.const $push86=, 1103515245 + i32.mul $push7=, $0, $pop86 + i32.const $push85=, 12345 + i32.add $push84=, $pop7, $pop85 + tee_local $push83=, $0=, $pop84 + i32.const $push82=, 16 + i32.shr_u $push8=, $pop83, $pop82 + i32.store8 sL+3($pop87), $pop8 + i32.const $push81=, 0 + i32.const $push80=, 1103515245 + i32.mul $push9=, $0, $pop80 + i32.const $push79=, 12345 + i32.add $push78=, $pop9, $pop79 + tee_local $push77=, $0=, $pop78 + i32.const $push76=, 16 + i32.shr_u $push10=, $pop77, $pop76 + i32.store8 sL+4($pop81), $pop10 + i32.const $push75=, 0 + i32.const $push74=, 1103515245 + i32.mul $push11=, $0, $pop74 + i32.const $push73=, 12345 + i32.add $push72=, $pop11, $pop73 + tee_local $push71=, $0=, $pop72 + i32.const $push70=, 16 + i32.shr_u $push12=, $pop71, $pop70 + i32.store8 sL+5($pop75), $pop12 + i32.const $push69=, 0 + i32.const $push68=, 1103515245 + i32.mul $push13=, $0, $pop68 + i32.const $push67=, 12345 + i32.add $push66=, $pop13, $pop67 + tee_local $push65=, $0=, $pop66 + i32.const $push64=, 16 + i32.shr_u $push14=, $pop65, $pop64 + i32.store8 sL+6($pop69), $pop14 + i32.const $push63=, 0 + i32.const $push62=, 1103515245 + i32.mul $push15=, $0, $pop62 + i32.const $push61=, 12345 + i32.add $push60=, $pop15, $pop61 + tee_local $push59=, $0=, $pop60 + i32.const $push58=, 16 + i32.shr_u $push16=, $pop59, $pop58 + i32.store8 sL+7($pop63), $pop16 + i32.const $push57=, 0 + i32.const $push56=, 1103515245 + i32.mul $push17=, $0, $pop56 + i32.const $push55=, 12345 + i32.add $push54=, $pop17, $pop55 + tee_local $push53=, $2=, $pop54 + i32.const $push52=, 1103515245 + i32.mul $push18=, $pop53, $pop52 + i32.const $push51=, 12345 + i32.add $push50=, $pop18, $pop51 + tee_local $push49=, $0=, $pop50 + i32.store myrnd.s($pop57), $pop49 + i32.const $push48=, 0 + i32.const $push47=, 16 + i32.shr_u $push46=, $2, $pop47 + tee_local $push45=, $2=, $pop46 + i32.const $push44=, 63 + i32.and $push21=, $pop45, $pop44 + i32.const $push43=, 0 + i32.load $push19=, sL($pop43) + i32.const $push20=, -64 + i32.and $push42=, $pop19, $pop20 + tee_local $push41=, $1=, $pop42 + i32.or $push40=, $pop21, $pop41 + tee_local $push39=, $3=, $pop40 + i32.store sL($pop48), $pop39 + block + i32.const $push38=, 16 + i32.shr_u $push37=, $0, $pop38 + tee_local $push36=, $4=, $pop37 + i32.add $push23=, $pop36, $2 + i32.add $push22=, $4, $3 + i32.xor $push24=, $pop23, $pop22 + i32.const $push35=, 63 + i32.and $push25=, $pop24, $pop35 + br_if 0, $pop25 # 0: down to label7 +# BB#1: # %if.end113 + i32.const $push117=, 0 + i32.const $push26=, -2139243339 + i32.mul $push27=, $0, $pop26 + i32.const $push28=, -1492899873 + i32.add $push116=, $pop27, $pop28 + tee_local $push115=, $0=, $pop116 + i32.const $push114=, 1103515245 + i32.mul $push29=, $pop115, $pop114 + i32.const $push113=, 12345 + i32.add $push112=, $pop29, $pop113 + tee_local $push111=, $2=, $pop112 + i32.store myrnd.s($pop117), $pop111 + i32.const $push110=, 0 + i32.const $push109=, 16 + i32.shr_u $push31=, $2, $pop109 + i32.const $push108=, 16 + i32.shr_u $push30=, $0, $pop108 + i32.add $push32=, $pop31, $pop30 + i32.const $push107=, 63 + i32.and $push33=, $pop32, $pop107 + i32.or $push34=, $pop33, $1 + i32.store sL($pop110), $pop34 + return +.LBB72_2: # %if.then + end_block # label7: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end72: + .size testL, .Lfunc_end72-testL + # -- End function + .section .text.retmeM,"ax",@progbits + .hidden retmeM # -- Begin function retmeM + .globl retmeM + .type retmeM,@function +retmeM: # @retmeM + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=0 + i64.store 0($0):p2align=2, $pop0 + # fallthrough-return + .endfunc +.Lfunc_end73: + .size retmeM, .Lfunc_end73-retmeM + # -- End function + .section .text.fn1M,"ax",@progbits + .hidden fn1M # -- Begin function fn1M + .globl fn1M + .type fn1M,@function +fn1M: # @fn1M + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sM+4($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 63 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end74: + .size fn1M, .Lfunc_end74-fn1M + # -- End function + .section .text.fn2M,"ax",@progbits + .hidden fn2M # -- Begin function fn2M + .globl fn2M + .type fn2M,@function +fn2M: # @fn2M + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sM+4($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 63 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end75: + .size fn2M, .Lfunc_end75-fn2M + # -- End function + .section .text.retitM,"ax",@progbits + .hidden retitM # -- Begin function retitM + .globl retitM + .type retitM,@function +retitM: # @retitM + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sM+4($pop0) + i32.const $push2=, 63 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end76: + .size retitM, .Lfunc_end76-retitM + # -- End function + .section .text.fn3M,"ax",@progbits + .hidden fn3M # -- Begin function fn3M + .globl fn3M + .type fn3M,@function +fn3M: # @fn3M + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, sM+4($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 63 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, -64 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store sM+4($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end77: + .size fn3M, .Lfunc_end77-fn3M + # -- End function + .section .text.testM,"ax",@progbits + .hidden testM # -- Begin function testM + .globl testM + .type testM,@function +testM: # @testM + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push106=, 0 + i32.const $push105=, 0 + i32.load $push0=, myrnd.s($pop105) + i32.const $push104=, 1103515245 + i32.mul $push1=, $pop0, $pop104 + i32.const $push103=, 12345 + i32.add $push102=, $pop1, $pop103 + tee_local $push101=, $0=, $pop102 + i32.const $push100=, 1103515245 + i32.mul $push2=, $pop101, $pop100 + i32.const $push99=, 12345 + i32.add $push98=, $pop2, $pop99 + tee_local $push97=, $1=, $pop98 + i32.const $push96=, 1103515245 + i32.mul $push3=, $pop97, $pop96 + i32.const $push95=, 12345 + i32.add $push94=, $pop3, $pop95 + tee_local $push93=, $2=, $pop94 + i32.const $push92=, 1103515245 + i32.mul $push4=, $pop93, $pop92 + i32.const $push91=, 12345 + i32.add $push90=, $pop4, $pop91 + tee_local $push89=, $3=, $pop90 + i32.const $push88=, 1103515245 + i32.mul $push5=, $pop89, $pop88 + i32.const $push87=, 12345 + i32.add $push86=, $pop5, $pop87 + tee_local $push85=, $4=, $pop86 + i32.const $push84=, 16 + i32.shr_u $push6=, $pop85, $pop84 + i32.store8 sM+4($pop106), $pop6 + i32.const $push83=, 0 + i32.const $push82=, 1103515245 + i32.mul $push7=, $4, $pop82 + i32.const $push81=, 12345 + i32.add $push80=, $pop7, $pop81 + tee_local $push79=, $4=, $pop80 + i32.const $push78=, 16 + i32.shr_u $push8=, $pop79, $pop78 + i32.store8 sM+5($pop83), $pop8 + i32.const $push77=, 0 + i32.const $push76=, 1103515245 + i32.mul $push9=, $4, $pop76 + i32.const $push75=, 12345 + i32.add $push74=, $pop9, $pop75 + tee_local $push73=, $4=, $pop74 + i32.const $push72=, 16 + i32.shr_u $push10=, $pop73, $pop72 + i32.store8 sM+6($pop77), $pop10 + i32.const $push71=, 0 + i32.const $push70=, 1103515245 + i32.mul $push11=, $4, $pop70 + i32.const $push69=, 12345 + i32.add $push68=, $pop11, $pop69 + tee_local $push67=, $4=, $pop68 + i32.const $push66=, 16 + i32.shr_u $push12=, $pop67, $pop66 + i32.store8 sM+7($pop71), $pop12 + i32.const $push65=, 0 + i32.const $push64=, 16 + i32.shr_u $push13=, $0, $pop64 + i32.store8 sM($pop65), $pop13 + i32.const $push63=, 0 + i32.const $push62=, 16 + i32.shr_u $push14=, $1, $pop62 + i32.store8 sM+1($pop63), $pop14 + i32.const $push61=, 0 + i32.const $push60=, 16 + i32.shr_u $push15=, $2, $pop60 + i32.store8 sM+2($pop61), $pop15 + i32.const $push59=, 0 + i32.const $push58=, 16 + i32.shr_u $push16=, $3, $pop58 + i32.store8 sM+3($pop59), $pop16 + i32.const $push57=, 0 + i32.const $push56=, 1103515245 + i32.mul $push17=, $4, $pop56 + i32.const $push55=, 12345 + i32.add $push54=, $pop17, $pop55 + tee_local $push53=, $1=, $pop54 + i32.const $push52=, 1103515245 + i32.mul $push18=, $pop53, $pop52 + i32.const $push51=, 12345 + i32.add $push50=, $pop18, $pop51 + tee_local $push49=, $0=, $pop50 + i32.store myrnd.s($pop57), $pop49 + i32.const $push48=, 0 + i32.const $push47=, 16 + i32.shr_u $push46=, $1, $pop47 + tee_local $push45=, $1=, $pop46 + i32.const $push44=, 63 + i32.and $push21=, $pop45, $pop44 + i32.const $push43=, 0 + i32.load $push19=, sM+4($pop43) + i32.const $push20=, -64 + i32.and $push42=, $pop19, $pop20 + tee_local $push41=, $2=, $pop42 + i32.or $push40=, $pop21, $pop41 + tee_local $push39=, $3=, $pop40 + i32.store sM+4($pop48), $pop39 + block + i32.const $push38=, 16 + i32.shr_u $push37=, $0, $pop38 + tee_local $push36=, $4=, $pop37 + i32.add $push23=, $pop36, $1 + i32.add $push22=, $4, $3 + i32.xor $push24=, $pop23, $pop22 + i32.const $push35=, 63 + i32.and $push25=, $pop24, $pop35 + br_if 0, $pop25 # 0: down to label8 +# BB#1: # %if.end159 + i32.const $push117=, 0 + i32.const $push26=, -2139243339 + i32.mul $push27=, $0, $pop26 + i32.const $push28=, -1492899873 + i32.add $push116=, $pop27, $pop28 + tee_local $push115=, $0=, $pop116 + i32.const $push114=, 1103515245 + i32.mul $push29=, $pop115, $pop114 + i32.const $push113=, 12345 + i32.add $push112=, $pop29, $pop113 + tee_local $push111=, $1=, $pop112 + i32.store myrnd.s($pop117), $pop111 + i32.const $push110=, 0 + i32.const $push109=, 16 + i32.shr_u $push31=, $1, $pop109 + i32.const $push108=, 16 + i32.shr_u $push30=, $0, $pop108 + i32.add $push32=, $pop31, $pop30 + i32.const $push107=, 63 + i32.and $push33=, $pop32, $pop107 + i32.or $push34=, $pop33, $2 + i32.store sM+4($pop110), $pop34 + return +.LBB78_2: # %if.then + end_block # label8: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end78: + .size testM, .Lfunc_end78-testM + # -- End function + .section .text.retmeN,"ax",@progbits + .hidden retmeN # -- Begin function retmeN + .globl retmeN + .type retmeN,@function +retmeN: # @retmeN + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=0 + i64.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end79: + .size retmeN, .Lfunc_end79-retmeN + # -- End function + .section .text.fn1N,"ax",@progbits + .hidden fn1N # -- Begin function fn1N + .globl fn1N + .type fn1N,@function +fn1N: # @fn1N + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sN($pop0) + i32.const $push2=, 6 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 63 + i32.and $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end80: + .size fn1N, .Lfunc_end80-fn1N + # -- End function + .section .text.fn2N,"ax",@progbits + .hidden fn2N # -- Begin function fn2N + .globl fn2N + .type fn2N,@function +fn2N: # @fn2N + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sN($pop0) + i32.const $push2=, 6 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 63 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 15 + i32.rem_u $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end81: + .size fn2N, .Lfunc_end81-fn2N + # -- End function + .section .text.retitN,"ax",@progbits + .hidden retitN # -- Begin function retitN + .globl retitN + .type retitN,@function +retitN: # @retitN + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sN($pop0) + i32.const $push2=, 6 + i32.shr_u $push3=, $pop1, $pop2 + i32.const $push4=, 63 + i32.and $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end82: + .size retitN, .Lfunc_end82-retitN + # -- End function + .section .text.fn3N,"ax",@progbits + .hidden fn3N # -- Begin function fn3N + .globl fn3N + .type fn3N,@function +fn3N: # @fn3N + .param i32 + .result i32 + .local i64 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push18=, 0 + i64.load $push17=, sN($pop18) + tee_local $push16=, $1=, $pop17 + i64.const $push1=, -4033 + i64.and $push2=, $pop16, $pop1 + i64.const $push3=, 6 + i64.shr_u $push4=, $1, $pop3 + i32.wrap/i64 $push5=, $pop4 + i32.add $push15=, $pop5, $0 + tee_local $push14=, $0=, $pop15 + i32.const $push6=, 6 + i32.shl $push7=, $pop14, $pop6 + i32.const $push8=, 4032 + i32.and $push9=, $pop7, $pop8 + i64.extend_u/i32 $push10=, $pop9 + i64.or $push11=, $pop2, $pop10 + i64.store sN($pop0), $pop11 + i32.const $push12=, 63 + i32.and $push13=, $0, $pop12 + # fallthrough-return: $pop13 + .endfunc +.Lfunc_end83: + .size fn3N, .Lfunc_end83-fn3N + # -- End function + .section .text.testN,"ax",@progbits + .hidden testN # -- Begin function testN + .globl testN + .type testN,@function +testN: # @testN + .local i64, i32, i32, i32, i64, i64, i32, i32, i32, i64 +# BB#0: # %lor.lhs.false + i32.const $push3=, 0 + i32.const $push173=, 0 + i32.load $push4=, myrnd.s($pop173) + i32.const $push5=, 1103515245 + i32.mul $push6=, $pop4, $pop5 + i32.const $push7=, 12345 + i32.add $push172=, $pop6, $pop7 + tee_local $push171=, $8=, $pop172 + i32.const $push170=, 16 + i32.shr_u $push8=, $pop171, $pop170 + i32.store8 sN($pop3), $pop8 + i32.const $push169=, 0 + i32.const $push168=, 1103515245 + i32.mul $push9=, $8, $pop168 + i32.const $push167=, 12345 + i32.add $push166=, $pop9, $pop167 + tee_local $push165=, $8=, $pop166 + i32.const $push164=, 16 + i32.shr_u $push10=, $pop165, $pop164 + i32.store8 sN+1($pop169), $pop10 + i32.const $push163=, 0 + i32.const $push162=, 1103515245 + i32.mul $push11=, $8, $pop162 + i32.const $push161=, 12345 + i32.add $push160=, $pop11, $pop161 + tee_local $push159=, $8=, $pop160 + i32.const $push158=, 16 + i32.shr_u $push12=, $pop159, $pop158 + i32.store8 sN+2($pop163), $pop12 + i32.const $push157=, 0 + i32.const $push156=, 1103515245 + i32.mul $push13=, $8, $pop156 + i32.const $push155=, 12345 + i32.add $push154=, $pop13, $pop155 + tee_local $push153=, $8=, $pop154 + i32.const $push152=, 16 + i32.shr_u $push14=, $pop153, $pop152 + i32.store8 sN+3($pop157), $pop14 + i32.const $push151=, 0 + i32.const $push150=, 1103515245 + i32.mul $push15=, $8, $pop150 + i32.const $push149=, 12345 + i32.add $push148=, $pop15, $pop149 + tee_local $push147=, $8=, $pop148 + i32.const $push146=, 16 + i32.shr_u $push16=, $pop147, $pop146 + i32.store8 sN+4($pop151), $pop16 + i32.const $push145=, 0 + i32.const $push144=, 1103515245 + i32.mul $push17=, $8, $pop144 + i32.const $push143=, 12345 + i32.add $push142=, $pop17, $pop143 + tee_local $push141=, $8=, $pop142 + i32.const $push140=, 16 + i32.shr_u $push18=, $pop141, $pop140 + i32.store8 sN+5($pop145), $pop18 + i32.const $push139=, 0 + i32.const $push138=, 1103515245 + i32.mul $push19=, $8, $pop138 + i32.const $push137=, 12345 + i32.add $push136=, $pop19, $pop137 + tee_local $push135=, $8=, $pop136 + i32.const $push134=, 16 + i32.shr_u $push20=, $pop135, $pop134 + i32.store8 sN+6($pop139), $pop20 + i32.const $push133=, 0 + i32.const $push132=, 1103515245 + i32.mul $push21=, $8, $pop132 + i32.const $push131=, 12345 + i32.add $push130=, $pop21, $pop131 + tee_local $push129=, $8=, $pop130 + i32.const $push128=, 16 + i32.shr_u $push22=, $pop129, $pop128 + i32.store8 sN+7($pop133), $pop22 + i32.const $push127=, 0 + i32.const $push126=, 1103515245 + i32.mul $push23=, $8, $pop126 + i32.const $push125=, 12345 + i32.add $push124=, $pop23, $pop125 + tee_local $push123=, $8=, $pop124 + i32.const $push122=, 1103515245 + i32.mul $push24=, $pop123, $pop122 + i32.const $push121=, 12345 + i32.add $push120=, $pop24, $pop121 + tee_local $push119=, $1=, $pop120 + i32.store myrnd.s($pop127), $pop119 + i32.const $push118=, 0 + i32.const $push117=, 0 + i64.load $push116=, sN($pop117) + tee_local $push115=, $0=, $pop116 + i64.const $push25=, -4033 + i64.and $push114=, $pop115, $pop25 + tee_local $push113=, $4=, $pop114 + i32.const $push26=, 10 + i32.shr_u $push27=, $8, $pop26 + i32.const $push28=, 4032 + i32.and $push112=, $pop27, $pop28 + tee_local $push111=, $3=, $pop112 + i64.extend_u/i32 $push29=, $pop111 + i64.or $push110=, $pop113, $pop29 + tee_local $push109=, $5=, $pop110 + i64.store sN($pop118), $pop109 + block + i64.const $push32=, 4032 + i64.or $push33=, $0, $pop32 + i64.xor $push108=, $5, $pop33 + tee_local $push107=, $9=, $pop108 + i64.const $push34=, 34359734272 + i64.and $push35=, $pop107, $pop34 + i64.const $push106=, 0 + i64.ne $push36=, $pop35, $pop106 + br_if 0, $pop36 # 0: down to label9 +# BB#1: # %lor.lhs.false29 + i64.const $push41=, 63 + i64.and $push42=, $9, $pop41 + i64.const $push174=, 0 + i64.ne $push43=, $pop42, $pop174 + br_if 0, $pop43 # 0: down to label9 +# BB#2: # %lor.lhs.false29 + i32.const $push40=, 6 + i32.shr_u $push37=, $3, $pop40 + i64.const $push30=, 6 + i64.shr_u $push31=, $5, $pop30 + i32.wrap/i64 $push176=, $pop31 + tee_local $push175=, $3=, $pop176 + i32.const $push39=, 63 + i32.and $push38=, $pop175, $pop39 + i32.ne $push44=, $pop37, $pop38 + br_if 0, $pop44 # 0: down to label9 +# BB#3: # %lor.lhs.false49 + i32.const $push181=, 16 + i32.shr_u $push180=, $1, $pop181 + tee_local $push179=, $2=, $pop180 + i32.add $push1=, $pop179, $3 + i32.const $push178=, 16 + i32.shr_u $push0=, $8, $pop178 + i32.add $push45=, $2, $pop0 + i32.xor $push46=, $pop1, $pop45 + i32.const $push177=, 63 + i32.and $push47=, $pop46, $pop177 + br_if 0, $pop47 # 0: down to label9 +# BB#4: # %lor.lhs.false69 + i32.const $push52=, 0 + i32.const $push48=, 1103515245 + i32.mul $push49=, $1, $pop48 + i32.const $push50=, 12345 + i32.add $push201=, $pop49, $pop50 + tee_local $push200=, $8=, $pop201 + i32.const $push199=, 1103515245 + i32.mul $push51=, $pop200, $pop199 + i32.const $push198=, 12345 + i32.add $push197=, $pop51, $pop198 + tee_local $push196=, $1=, $pop197 + i32.store myrnd.s($pop52), $pop196 + i32.const $push195=, 0 + i32.const $push53=, 10 + i32.shr_u $push54=, $8, $pop53 + i32.const $push55=, 4032 + i32.and $push194=, $pop54, $pop55 + tee_local $push193=, $3=, $pop194 + i64.extend_u/i32 $push56=, $pop193 + i64.or $push192=, $4, $pop56 + tee_local $push191=, $9=, $pop192 + i64.store sN($pop195), $pop191 + i32.const $push190=, 16 + i32.shr_u $push189=, $1, $pop190 + tee_local $push188=, $2=, $pop189 + i64.const $push57=, 6 + i64.shr_u $push58=, $9, $pop57 + i32.wrap/i64 $push187=, $pop58 + tee_local $push186=, $6=, $pop187 + i32.add $push59=, $pop188, $pop186 + i32.const $push185=, 63 + i32.and $push60=, $pop59, $pop185 + i32.const $push61=, 15 + i32.rem_u $7=, $pop60, $pop61 + i64.xor $push184=, $9, $5 + tee_local $push183=, $5=, $pop184 + i64.const $push62=, 34359734272 + i64.and $push63=, $pop183, $pop62 + i64.const $push182=, 0 + i64.ne $push64=, $pop63, $pop182 + br_if 0, $pop64 # 0: down to label9 +# BB#5: # %lor.lhs.false80 + i64.const $push69=, 63 + i64.and $push70=, $5, $pop69 + i64.const $push202=, 0 + i64.ne $push71=, $pop70, $pop202 + br_if 0, $pop71 # 0: down to label9 +# BB#6: # %lor.lhs.false80 + i32.const $push68=, 6 + i32.shr_u $push65=, $3, $pop68 + i32.const $push67=, 63 + i32.and $push66=, $6, $pop67 + i32.ne $push72=, $pop65, $pop66 + br_if 0, $pop72 # 0: down to label9 +# BB#7: # %lor.lhs.false100 + i32.const $push204=, 16 + i32.shr_u $push2=, $8, $pop204 + i32.add $push73=, $2, $pop2 + i32.const $push203=, 63 + i32.and $push74=, $pop73, $pop203 + i32.const $push75=, 15 + i32.rem_u $push76=, $pop74, $pop75 + i32.ne $push77=, $pop76, $7 + br_if 0, $pop77 # 0: down to label9 +# BB#8: # %lor.lhs.false125 + i32.const $push82=, 0 + i32.const $push78=, 1103515245 + i32.mul $push79=, $1, $pop78 + i32.const $push80=, 12345 + i32.add $push218=, $pop79, $pop80 + tee_local $push217=, $8=, $pop218 + i32.const $push216=, 1103515245 + i32.mul $push81=, $pop217, $pop216 + i32.const $push215=, 12345 + i32.add $push214=, $pop81, $pop215 + tee_local $push213=, $1=, $pop214 + i32.store myrnd.s($pop82), $pop213 + i32.const $push212=, 0 + i32.const $push94=, 16 + i32.shr_u $push211=, $1, $pop94 + tee_local $push210=, $1=, $pop211 + i32.const $push95=, 2047 + i32.and $push96=, $pop210, $pop95 + i64.const $push83=, 274877902848 + i64.and $push84=, $0, $pop83 + i32.const $push85=, 10 + i32.shr_u $push86=, $8, $pop85 + i32.const $push87=, 4032 + i32.and $push88=, $pop86, $pop87 + i64.extend_u/i32 $push89=, $pop88 + i64.or $push90=, $pop84, $pop89 + i64.const $push91=, 6 + i64.shr_u $push92=, $pop90, $pop91 + i32.wrap/i64 $push93=, $pop92 + i32.add $push209=, $pop96, $pop93 + tee_local $push208=, $3=, $pop209 + i32.const $push97=, 6 + i32.shl $push98=, $pop208, $pop97 + i32.const $push207=, 4032 + i32.and $push99=, $pop98, $pop207 + i64.extend_u/i32 $push100=, $pop99 + i64.or $push101=, $4, $pop100 + i64.store sN($pop212), $pop101 + i32.const $push206=, 16 + i32.shr_u $push102=, $8, $pop206 + i32.add $push103=, $1, $pop102 + i32.xor $push104=, $pop103, $3 + i32.const $push205=, 63 + i32.and $push105=, $pop104, $pop205 + br_if 0, $pop105 # 0: down to label9 +# BB#9: # %if.end158 + return +.LBB84_10: # %if.then + end_block # label9: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end84: + .size testN, .Lfunc_end84-testN + # -- End function + .section .text.retmeO,"ax",@progbits + .hidden retmeO # -- Begin function retmeO + .globl retmeO + .type retmeO,@function +retmeO: # @retmeO + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=0 + i64.store 0($0):p2align=0, $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i64.load $push4=, 0($pop3):p2align=0 + i64.store 0($pop2):p2align=0, $pop4 + # fallthrough-return + .endfunc +.Lfunc_end85: + .size retmeO, .Lfunc_end85-retmeO + # -- End function + .section .text.fn1O,"ax",@progbits + .hidden fn1O # -- Begin function fn1O + .globl fn1O + .type fn1O,@function +fn1O: # @fn1O + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sO+8($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end86: + .size fn1O, .Lfunc_end86-fn1O + # -- End function + .section .text.fn2O,"ax",@progbits + .hidden fn2O # -- Begin function fn2O + .globl fn2O + .type fn2O,@function +fn2O: # @fn2O + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sO+8($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end87: + .size fn2O, .Lfunc_end87-fn2O + # -- End function + .section .text.retitO,"ax",@progbits + .hidden retitO # -- Begin function retitO + .globl retitO + .type retitO,@function +retitO: # @retitO + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sO+8($pop0) + i32.const $push2=, 4095 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end88: + .size retitO, .Lfunc_end88-retitO + # -- End function + .section .text.fn3O,"ax",@progbits + .hidden fn3O # -- Begin function fn3O + .globl fn3O + .type fn3O,@function +fn3O: # @fn3O + .param i32 + .result i32 + .local i64 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push12=, 0 + i64.load $push11=, sO+8($pop12) + tee_local $push10=, $1=, $pop11 + i64.const $push1=, -4096 + i64.and $push2=, $pop10, $pop1 + i32.wrap/i64 $push3=, $1 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 4095 + i32.and $push9=, $pop4, $pop5 + tee_local $push8=, $0=, $pop9 + i64.extend_u/i32 $push6=, $pop8 + i64.or $push7=, $pop2, $pop6 + i64.store sO+8($pop0), $pop7 + copy_local $push13=, $0 + # fallthrough-return: $pop13 + .endfunc +.Lfunc_end89: + .size fn3O, .Lfunc_end89-fn3O + # -- End function + .section .text.testO,"ax",@progbits + .hidden testO # -- Begin function testO + .globl testO + .type testO,@function +testO: # @testO + .local i32, i64, i32, i64, i32, i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push197=, 0 + i32.load $push3=, myrnd.s($pop197) + i32.const $push4=, 1103515245 + i32.mul $push5=, $pop3, $pop4 + i32.const $push6=, 12345 + i32.add $push196=, $pop5, $pop6 + tee_local $push195=, $0=, $pop196 + i32.const $push194=, 16 + i32.shr_u $push7=, $pop195, $pop194 + i32.store8 sO($pop2), $pop7 + i32.const $push193=, 0 + i32.const $push192=, 1103515245 + i32.mul $push8=, $0, $pop192 + i32.const $push191=, 12345 + i32.add $push190=, $pop8, $pop191 + tee_local $push189=, $0=, $pop190 + i32.const $push188=, 16 + i32.shr_u $push9=, $pop189, $pop188 + i32.store8 sO+1($pop193), $pop9 + i32.const $push187=, 0 + i32.const $push186=, 1103515245 + i32.mul $push10=, $0, $pop186 + i32.const $push185=, 12345 + i32.add $push184=, $pop10, $pop185 + tee_local $push183=, $0=, $pop184 + i32.const $push182=, 16 + i32.shr_u $push11=, $pop183, $pop182 + i32.store8 sO+2($pop187), $pop11 + i32.const $push181=, 0 + i32.const $push180=, 1103515245 + i32.mul $push12=, $0, $pop180 + i32.const $push179=, 12345 + i32.add $push178=, $pop12, $pop179 + tee_local $push177=, $0=, $pop178 + i32.const $push176=, 16 + i32.shr_u $push13=, $pop177, $pop176 + i32.store8 sO+3($pop181), $pop13 + i32.const $push175=, 0 + i32.const $push174=, 1103515245 + i32.mul $push14=, $0, $pop174 + i32.const $push173=, 12345 + i32.add $push172=, $pop14, $pop173 + tee_local $push171=, $0=, $pop172 + i32.const $push170=, 16 + i32.shr_u $push15=, $pop171, $pop170 + i32.store8 sO+4($pop175), $pop15 + i32.const $push169=, 0 + i32.const $push168=, 1103515245 + i32.mul $push16=, $0, $pop168 + i32.const $push167=, 12345 + i32.add $push166=, $pop16, $pop167 + tee_local $push165=, $0=, $pop166 + i32.const $push164=, 16 + i32.shr_u $push17=, $pop165, $pop164 + i32.store8 sO+5($pop169), $pop17 + i32.const $push163=, 0 + i32.const $push162=, 1103515245 + i32.mul $push18=, $0, $pop162 + i32.const $push161=, 12345 + i32.add $push160=, $pop18, $pop161 + tee_local $push159=, $0=, $pop160 + i32.const $push158=, 16 + i32.shr_u $push19=, $pop159, $pop158 + i32.store8 sO+6($pop163), $pop19 + i32.const $push157=, 0 + i32.const $push156=, 1103515245 + i32.mul $push20=, $0, $pop156 + i32.const $push155=, 12345 + i32.add $push154=, $pop20, $pop155 + tee_local $push153=, $0=, $pop154 + i32.const $push152=, 16 + i32.shr_u $push21=, $pop153, $pop152 + i32.store8 sO+7($pop157), $pop21 + i32.const $push151=, 0 + i32.const $push150=, 1103515245 + i32.mul $push22=, $0, $pop150 + i32.const $push149=, 12345 + i32.add $push148=, $pop22, $pop149 + tee_local $push147=, $0=, $pop148 + i32.const $push146=, 16 + i32.shr_u $push23=, $pop147, $pop146 + i32.store8 sO+8($pop151), $pop23 + i32.const $push145=, 0 + i32.const $push144=, 1103515245 + i32.mul $push24=, $0, $pop144 + i32.const $push143=, 12345 + i32.add $push142=, $pop24, $pop143 + tee_local $push141=, $0=, $pop142 + i32.const $push140=, 16 + i32.shr_u $push25=, $pop141, $pop140 + i32.store8 sO+9($pop145), $pop25 + i32.const $push139=, 0 + i32.const $push138=, 1103515245 + i32.mul $push26=, $0, $pop138 + i32.const $push137=, 12345 + i32.add $push136=, $pop26, $pop137 + tee_local $push135=, $0=, $pop136 + i32.const $push134=, 16 + i32.shr_u $push27=, $pop135, $pop134 + i32.store8 sO+10($pop139), $pop27 + i32.const $push133=, 0 + i32.const $push132=, 1103515245 + i32.mul $push28=, $0, $pop132 + i32.const $push131=, 12345 + i32.add $push130=, $pop28, $pop131 + tee_local $push129=, $0=, $pop130 + i32.const $push128=, 16 + i32.shr_u $push29=, $pop129, $pop128 + i32.store8 sO+11($pop133), $pop29 + i32.const $push127=, 0 + i32.const $push126=, 1103515245 + i32.mul $push30=, $0, $pop126 + i32.const $push125=, 12345 + i32.add $push124=, $pop30, $pop125 + tee_local $push123=, $0=, $pop124 + i32.const $push122=, 16 + i32.shr_u $push31=, $pop123, $pop122 + i32.store8 sO+12($pop127), $pop31 + i32.const $push121=, 0 + i32.const $push120=, 1103515245 + i32.mul $push32=, $0, $pop120 + i32.const $push119=, 12345 + i32.add $push118=, $pop32, $pop119 + tee_local $push117=, $0=, $pop118 + i32.const $push116=, 16 + i32.shr_u $push33=, $pop117, $pop116 + i32.store8 sO+13($pop121), $pop33 + i32.const $push115=, 0 + i32.const $push114=, 1103515245 + i32.mul $push34=, $0, $pop114 + i32.const $push113=, 12345 + i32.add $push112=, $pop34, $pop113 + tee_local $push111=, $0=, $pop112 + i32.const $push110=, 16 + i32.shr_u $push35=, $pop111, $pop110 + i32.store8 sO+14($pop115), $pop35 + i32.const $push109=, 0 + i32.const $push108=, 1103515245 + i32.mul $push36=, $0, $pop108 + i32.const $push107=, 12345 + i32.add $push106=, $pop36, $pop107 + tee_local $push105=, $0=, $pop106 + i32.const $push104=, 16 + i32.shr_u $push37=, $pop105, $pop104 + i32.store8 sO+15($pop109), $pop37 + i32.const $push103=, 0 + i32.const $push102=, 1103515245 + i32.mul $push38=, $0, $pop102 + i32.const $push101=, 12345 + i32.add $push100=, $pop38, $pop101 + tee_local $push99=, $2=, $pop100 + i32.const $push98=, 1103515245 + i32.mul $push39=, $pop99, $pop98 + i32.const $push97=, 12345 + i32.add $push96=, $pop39, $pop97 + tee_local $push95=, $0=, $pop96 + i32.store myrnd.s($pop103), $pop95 + i32.const $push94=, 0 + i32.const $push93=, 0 + i64.load $push40=, sO+8($pop93) + i64.const $push41=, -4096 + i64.and $push92=, $pop40, $pop41 + tee_local $push91=, $1=, $pop92 + i32.const $push90=, 16 + i32.shr_u $push42=, $2, $pop90 + i32.const $push89=, 2047 + i32.and $push88=, $pop42, $pop89 + tee_local $push87=, $2=, $pop88 + i64.extend_u/i32 $push43=, $pop87 + i64.or $push86=, $pop91, $pop43 + tee_local $push85=, $3=, $pop86 + i64.store sO+8($pop94), $pop85 + block + i32.wrap/i64 $push84=, $3 + tee_local $push83=, $5=, $pop84 + i32.const $push82=, 2047 + i32.and $push47=, $pop83, $pop82 + i32.ne $push48=, $2, $pop47 + br_if 0, $pop48 # 0: down to label10 +# BB#1: # %entry + i32.const $push201=, 16 + i32.shr_u $push44=, $0, $pop201 + i32.const $push200=, 2047 + i32.and $push199=, $pop44, $pop200 + tee_local $push198=, $4=, $pop199 + i32.add $push0=, $pop198, $2 + i32.add $push45=, $4, $5 + i32.const $push46=, 4095 + i32.and $push1=, $pop45, $pop46 + i32.ne $push49=, $pop0, $pop1 + br_if 0, $pop49 # 0: down to label10 +# BB#2: # %if.end + i32.const $push54=, 0 + i32.const $push50=, 1103515245 + i32.mul $push51=, $0, $pop50 + i32.const $push52=, 12345 + i32.add $push217=, $pop51, $pop52 + tee_local $push216=, $2=, $pop217 + i32.const $push215=, 1103515245 + i32.mul $push53=, $pop216, $pop215 + i32.const $push214=, 12345 + i32.add $push213=, $pop53, $pop214 + tee_local $push212=, $0=, $pop213 + i32.store myrnd.s($pop54), $pop212 + i32.const $push211=, 0 + i32.const $push210=, 16 + i32.shr_u $push55=, $2, $pop210 + i32.const $push209=, 2047 + i32.and $push208=, $pop55, $pop209 + tee_local $push207=, $2=, $pop208 + i64.extend_u/i32 $push56=, $pop207 + i64.or $push206=, $1, $pop56 + tee_local $push205=, $3=, $pop206 + i64.store sO+8($pop211), $pop205 + i32.wrap/i64 $push204=, $3 + tee_local $push203=, $5=, $pop204 + i32.const $push202=, 2047 + i32.and $push57=, $pop203, $pop202 + i32.ne $push58=, $2, $pop57 + br_if 0, $pop58 # 0: down to label10 +# BB#3: # %lor.lhs.false87 + i32.const $push222=, 16 + i32.shr_u $push59=, $0, $pop222 + i32.const $push221=, 2047 + i32.and $push220=, $pop59, $pop221 + tee_local $push219=, $4=, $pop220 + i32.add $push60=, $pop219, $2 + i32.const $push61=, 15 + i32.rem_u $push62=, $pop60, $pop61 + i32.add $push63=, $4, $5 + i32.const $push64=, 4095 + i32.and $push65=, $pop63, $pop64 + i32.const $push218=, 15 + i32.rem_u $push66=, $pop65, $pop218 + i32.ne $push67=, $pop62, $pop66 + br_if 0, $pop67 # 0: down to label10 +# BB#4: # %if.end140 + i32.const $push72=, 0 + i32.const $push68=, 1103515245 + i32.mul $push69=, $0, $pop68 + i32.const $push70=, 12345 + i32.add $push231=, $pop69, $pop70 + tee_local $push230=, $0=, $pop231 + i32.const $push229=, 1103515245 + i32.mul $push71=, $pop230, $pop229 + i32.const $push228=, 12345 + i32.add $push227=, $pop71, $pop228 + tee_local $push226=, $2=, $pop227 + i32.store myrnd.s($pop72), $pop226 + i32.const $push225=, 0 + i32.const $push73=, 16 + i32.shr_u $push77=, $2, $pop73 + i32.const $push75=, 2047 + i32.and $push78=, $pop77, $pop75 + i32.const $push224=, 16 + i32.shr_u $push74=, $0, $pop224 + i32.const $push223=, 2047 + i32.and $push76=, $pop74, $pop223 + i32.add $push79=, $pop78, $pop76 + i64.extend_u/i32 $push80=, $pop79 + i64.or $push81=, $1, $pop80 + i64.store sO+8($pop225), $pop81 + return +.LBB90_5: # %if.then + end_block # label10: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end90: + .size testO, .Lfunc_end90-testO + # -- End function + .section .text.retmeP,"ax",@progbits + .hidden retmeP # -- Begin function retmeP + .globl retmeP + .type retmeP,@function +retmeP: # @retmeP + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=0 + i64.store 0($0):p2align=0, $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i64.load $push4=, 0($pop3):p2align=0 + i64.store 0($pop2):p2align=0, $pop4 + # fallthrough-return + .endfunc +.Lfunc_end91: + .size retmeP, .Lfunc_end91-retmeP + # -- End function + .section .text.fn1P,"ax",@progbits + .hidden fn1P # -- Begin function fn1P + .globl fn1P + .type fn1P,@function +fn1P: # @fn1P + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sP($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end92: + .size fn1P, .Lfunc_end92-fn1P + # -- End function + .section .text.fn2P,"ax",@progbits + .hidden fn2P # -- Begin function fn2P + .globl fn2P + .type fn2P,@function +fn2P: # @fn2P + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sP($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end93: + .size fn2P, .Lfunc_end93-fn2P + # -- End function + .section .text.retitP,"ax",@progbits + .hidden retitP # -- Begin function retitP + .globl retitP + .type retitP,@function +retitP: # @retitP + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sP($pop0) + i32.const $push2=, 4095 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end94: + .size retitP, .Lfunc_end94-retitP + # -- End function + .section .text.fn3P,"ax",@progbits + .hidden fn3P # -- Begin function fn3P + .globl fn3P + .type fn3P,@function +fn3P: # @fn3P + .param i32 + .result i32 + .local i64 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push12=, 0 + i64.load $push11=, sP($pop12) + tee_local $push10=, $1=, $pop11 + i64.const $push1=, -4096 + i64.and $push2=, $pop10, $pop1 + i32.wrap/i64 $push3=, $1 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 4095 + i32.and $push9=, $pop4, $pop5 + tee_local $push8=, $0=, $pop9 + i64.extend_u/i32 $push6=, $pop8 + i64.or $push7=, $pop2, $pop6 + i64.store sP($pop0), $pop7 + copy_local $push13=, $0 + # fallthrough-return: $pop13 + .endfunc +.Lfunc_end95: + .size fn3P, .Lfunc_end95-fn3P + # -- End function + .section .text.testP,"ax",@progbits + .hidden testP # -- Begin function testP + .globl testP + .type testP,@function +testP: # @testP + .local i32, i64, i32, i64, i32, i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push197=, 0 + i32.load $push3=, myrnd.s($pop197) + i32.const $push4=, 1103515245 + i32.mul $push5=, $pop3, $pop4 + i32.const $push6=, 12345 + i32.add $push196=, $pop5, $pop6 + tee_local $push195=, $0=, $pop196 + i32.const $push194=, 16 + i32.shr_u $push7=, $pop195, $pop194 + i32.store8 sP($pop2), $pop7 + i32.const $push193=, 0 + i32.const $push192=, 1103515245 + i32.mul $push8=, $0, $pop192 + i32.const $push191=, 12345 + i32.add $push190=, $pop8, $pop191 + tee_local $push189=, $0=, $pop190 + i32.const $push188=, 16 + i32.shr_u $push9=, $pop189, $pop188 + i32.store8 sP+1($pop193), $pop9 + i32.const $push187=, 0 + i32.const $push186=, 1103515245 + i32.mul $push10=, $0, $pop186 + i32.const $push185=, 12345 + i32.add $push184=, $pop10, $pop185 + tee_local $push183=, $0=, $pop184 + i32.const $push182=, 16 + i32.shr_u $push11=, $pop183, $pop182 + i32.store8 sP+2($pop187), $pop11 + i32.const $push181=, 0 + i32.const $push180=, 1103515245 + i32.mul $push12=, $0, $pop180 + i32.const $push179=, 12345 + i32.add $push178=, $pop12, $pop179 + tee_local $push177=, $0=, $pop178 + i32.const $push176=, 16 + i32.shr_u $push13=, $pop177, $pop176 + i32.store8 sP+3($pop181), $pop13 + i32.const $push175=, 0 + i32.const $push174=, 1103515245 + i32.mul $push14=, $0, $pop174 + i32.const $push173=, 12345 + i32.add $push172=, $pop14, $pop173 + tee_local $push171=, $0=, $pop172 + i32.const $push170=, 16 + i32.shr_u $push15=, $pop171, $pop170 + i32.store8 sP+4($pop175), $pop15 + i32.const $push169=, 0 + i32.const $push168=, 1103515245 + i32.mul $push16=, $0, $pop168 + i32.const $push167=, 12345 + i32.add $push166=, $pop16, $pop167 + tee_local $push165=, $0=, $pop166 + i32.const $push164=, 16 + i32.shr_u $push17=, $pop165, $pop164 + i32.store8 sP+5($pop169), $pop17 + i32.const $push163=, 0 + i32.const $push162=, 1103515245 + i32.mul $push18=, $0, $pop162 + i32.const $push161=, 12345 + i32.add $push160=, $pop18, $pop161 + tee_local $push159=, $0=, $pop160 + i32.const $push158=, 16 + i32.shr_u $push19=, $pop159, $pop158 + i32.store8 sP+6($pop163), $pop19 + i32.const $push157=, 0 + i32.const $push156=, 1103515245 + i32.mul $push20=, $0, $pop156 + i32.const $push155=, 12345 + i32.add $push154=, $pop20, $pop155 + tee_local $push153=, $0=, $pop154 + i32.const $push152=, 16 + i32.shr_u $push21=, $pop153, $pop152 + i32.store8 sP+7($pop157), $pop21 + i32.const $push151=, 0 + i32.const $push150=, 1103515245 + i32.mul $push22=, $0, $pop150 + i32.const $push149=, 12345 + i32.add $push148=, $pop22, $pop149 + tee_local $push147=, $0=, $pop148 + i32.const $push146=, 16 + i32.shr_u $push23=, $pop147, $pop146 + i32.store8 sP+8($pop151), $pop23 + i32.const $push145=, 0 + i32.const $push144=, 1103515245 + i32.mul $push24=, $0, $pop144 + i32.const $push143=, 12345 + i32.add $push142=, $pop24, $pop143 + tee_local $push141=, $0=, $pop142 + i32.const $push140=, 16 + i32.shr_u $push25=, $pop141, $pop140 + i32.store8 sP+9($pop145), $pop25 + i32.const $push139=, 0 + i32.const $push138=, 1103515245 + i32.mul $push26=, $0, $pop138 + i32.const $push137=, 12345 + i32.add $push136=, $pop26, $pop137 + tee_local $push135=, $0=, $pop136 + i32.const $push134=, 16 + i32.shr_u $push27=, $pop135, $pop134 + i32.store8 sP+10($pop139), $pop27 + i32.const $push133=, 0 + i32.const $push132=, 1103515245 + i32.mul $push28=, $0, $pop132 + i32.const $push131=, 12345 + i32.add $push130=, $pop28, $pop131 + tee_local $push129=, $0=, $pop130 + i32.const $push128=, 16 + i32.shr_u $push29=, $pop129, $pop128 + i32.store8 sP+11($pop133), $pop29 + i32.const $push127=, 0 + i32.const $push126=, 1103515245 + i32.mul $push30=, $0, $pop126 + i32.const $push125=, 12345 + i32.add $push124=, $pop30, $pop125 + tee_local $push123=, $0=, $pop124 + i32.const $push122=, 16 + i32.shr_u $push31=, $pop123, $pop122 + i32.store8 sP+12($pop127), $pop31 + i32.const $push121=, 0 + i32.const $push120=, 1103515245 + i32.mul $push32=, $0, $pop120 + i32.const $push119=, 12345 + i32.add $push118=, $pop32, $pop119 + tee_local $push117=, $0=, $pop118 + i32.const $push116=, 16 + i32.shr_u $push33=, $pop117, $pop116 + i32.store8 sP+13($pop121), $pop33 + i32.const $push115=, 0 + i32.const $push114=, 1103515245 + i32.mul $push34=, $0, $pop114 + i32.const $push113=, 12345 + i32.add $push112=, $pop34, $pop113 + tee_local $push111=, $0=, $pop112 + i32.const $push110=, 16 + i32.shr_u $push35=, $pop111, $pop110 + i32.store8 sP+14($pop115), $pop35 + i32.const $push109=, 0 + i32.const $push108=, 1103515245 + i32.mul $push36=, $0, $pop108 + i32.const $push107=, 12345 + i32.add $push106=, $pop36, $pop107 + tee_local $push105=, $0=, $pop106 + i32.const $push104=, 16 + i32.shr_u $push37=, $pop105, $pop104 + i32.store8 sP+15($pop109), $pop37 + i32.const $push103=, 0 + i32.const $push102=, 1103515245 + i32.mul $push38=, $0, $pop102 + i32.const $push101=, 12345 + i32.add $push100=, $pop38, $pop101 + tee_local $push99=, $2=, $pop100 + i32.const $push98=, 1103515245 + i32.mul $push39=, $pop99, $pop98 + i32.const $push97=, 12345 + i32.add $push96=, $pop39, $pop97 + tee_local $push95=, $0=, $pop96 + i32.store myrnd.s($pop103), $pop95 + i32.const $push94=, 0 + i32.const $push93=, 0 + i64.load $push40=, sP($pop93) + i64.const $push41=, -4096 + i64.and $push92=, $pop40, $pop41 + tee_local $push91=, $1=, $pop92 + i32.const $push90=, 16 + i32.shr_u $push42=, $2, $pop90 + i32.const $push89=, 2047 + i32.and $push88=, $pop42, $pop89 + tee_local $push87=, $2=, $pop88 + i64.extend_u/i32 $push43=, $pop87 + i64.or $push86=, $pop91, $pop43 + tee_local $push85=, $3=, $pop86 + i64.store sP($pop94), $pop85 + block + i32.wrap/i64 $push84=, $3 + tee_local $push83=, $5=, $pop84 + i32.const $push82=, 2047 + i32.and $push47=, $pop83, $pop82 + i32.ne $push48=, $2, $pop47 + br_if 0, $pop48 # 0: down to label11 +# BB#1: # %entry + i32.const $push201=, 16 + i32.shr_u $push44=, $0, $pop201 + i32.const $push200=, 2047 + i32.and $push199=, $pop44, $pop200 + tee_local $push198=, $4=, $pop199 + i32.add $push0=, $pop198, $2 + i32.add $push45=, $4, $5 + i32.const $push46=, 4095 + i32.and $push1=, $pop45, $pop46 + i32.ne $push49=, $pop0, $pop1 + br_if 0, $pop49 # 0: down to label11 +# BB#2: # %if.end + i32.const $push54=, 0 + i32.const $push50=, 1103515245 + i32.mul $push51=, $0, $pop50 + i32.const $push52=, 12345 + i32.add $push217=, $pop51, $pop52 + tee_local $push216=, $2=, $pop217 + i32.const $push215=, 1103515245 + i32.mul $push53=, $pop216, $pop215 + i32.const $push214=, 12345 + i32.add $push213=, $pop53, $pop214 + tee_local $push212=, $0=, $pop213 + i32.store myrnd.s($pop54), $pop212 + i32.const $push211=, 0 + i32.const $push210=, 16 + i32.shr_u $push55=, $2, $pop210 + i32.const $push209=, 2047 + i32.and $push208=, $pop55, $pop209 + tee_local $push207=, $2=, $pop208 + i64.extend_u/i32 $push56=, $pop207 + i64.or $push206=, $1, $pop56 + tee_local $push205=, $3=, $pop206 + i64.store sP($pop211), $pop205 + i32.wrap/i64 $push204=, $3 + tee_local $push203=, $5=, $pop204 + i32.const $push202=, 2047 + i32.and $push57=, $pop203, $pop202 + i32.ne $push58=, $2, $pop57 + br_if 0, $pop58 # 0: down to label11 +# BB#3: # %lor.lhs.false83 + i32.const $push222=, 16 + i32.shr_u $push59=, $0, $pop222 + i32.const $push221=, 2047 + i32.and $push220=, $pop59, $pop221 + tee_local $push219=, $4=, $pop220 + i32.add $push60=, $pop219, $2 + i32.const $push61=, 15 + i32.rem_u $push62=, $pop60, $pop61 + i32.add $push63=, $4, $5 + i32.const $push64=, 4095 + i32.and $push65=, $pop63, $pop64 + i32.const $push218=, 15 + i32.rem_u $push66=, $pop65, $pop218 + i32.ne $push67=, $pop62, $pop66 + br_if 0, $pop67 # 0: down to label11 +# BB#4: # %if.end134 + i32.const $push72=, 0 + i32.const $push68=, 1103515245 + i32.mul $push69=, $0, $pop68 + i32.const $push70=, 12345 + i32.add $push231=, $pop69, $pop70 + tee_local $push230=, $0=, $pop231 + i32.const $push229=, 1103515245 + i32.mul $push71=, $pop230, $pop229 + i32.const $push228=, 12345 + i32.add $push227=, $pop71, $pop228 + tee_local $push226=, $2=, $pop227 + i32.store myrnd.s($pop72), $pop226 + i32.const $push225=, 0 + i32.const $push73=, 16 + i32.shr_u $push77=, $2, $pop73 + i32.const $push75=, 2047 + i32.and $push78=, $pop77, $pop75 + i32.const $push224=, 16 + i32.shr_u $push74=, $0, $pop224 + i32.const $push223=, 2047 + i32.and $push76=, $pop74, $pop223 + i32.add $push79=, $pop78, $pop76 + i64.extend_u/i32 $push80=, $pop79 + i64.or $push81=, $1, $pop80 + i64.store sP($pop225), $pop81 + return +.LBB96_5: # %if.then + end_block # label11: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end96: + .size testP, .Lfunc_end96-testP + # -- End function + .section .text.retmeQ,"ax",@progbits + .hidden retmeQ # -- Begin function retmeQ + .globl retmeQ + .type retmeQ,@function +retmeQ: # @retmeQ + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=0 + i64.store 0($0):p2align=0, $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i32.load16_u $push4=, 0($pop3):p2align=0 + i32.store16 0($pop2):p2align=0, $pop4 + # fallthrough-return + .endfunc +.Lfunc_end97: + .size retmeQ, .Lfunc_end97-retmeQ + # -- End function + .section .text.fn1Q,"ax",@progbits + .hidden fn1Q # -- Begin function fn1Q + .globl fn1Q + .type fn1Q,@function +fn1Q: # @fn1Q + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sQ($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end98: + .size fn1Q, .Lfunc_end98-fn1Q + # -- End function + .section .text.fn2Q,"ax",@progbits + .hidden fn2Q # -- Begin function fn2Q + .globl fn2Q + .type fn2Q,@function +fn2Q: # @fn2Q + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sQ($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end99: + .size fn2Q, .Lfunc_end99-fn2Q + # -- End function + .section .text.retitQ,"ax",@progbits + .hidden retitQ # -- Begin function retitQ + .globl retitQ + .type retitQ,@function +retitQ: # @retitQ + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sQ($pop0) + i32.const $push2=, 4095 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end100: + .size retitQ, .Lfunc_end100-retitQ + # -- End function + .section .text.fn3Q,"ax",@progbits + .hidden fn3Q # -- Begin function fn3Q + .globl fn3Q + .type fn3Q,@function +fn3Q: # @fn3Q + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load16_u $push9=, sQ($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 4095 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, 61440 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store16 sQ($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end101: + .size fn3Q, .Lfunc_end101-fn3Q + # -- End function + .section .text.testQ,"ax",@progbits + .hidden testQ # -- Begin function testQ + .globl testQ + .type testQ,@function +testQ: # @testQ + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push122=, 0 + i32.const $push121=, 0 + i32.load $push0=, myrnd.s($pop121) + i32.const $push120=, 1103515245 + i32.mul $push1=, $pop0, $pop120 + i32.const $push119=, 12345 + i32.add $push118=, $pop1, $pop119 + tee_local $push117=, $1=, $pop118 + i32.const $push116=, 16 + i32.shr_u $push2=, $pop117, $pop116 + i32.store8 sQ($pop122), $pop2 + i32.const $push115=, 0 + i32.const $push114=, 1103515245 + i32.mul $push3=, $1, $pop114 + i32.const $push113=, 12345 + i32.add $push112=, $pop3, $pop113 + tee_local $push111=, $1=, $pop112 + i32.const $push110=, 16 + i32.shr_u $push4=, $pop111, $pop110 + i32.store8 sQ+1($pop115), $pop4 + i32.const $push109=, 0 + i32.const $push108=, 1103515245 + i32.mul $push5=, $1, $pop108 + i32.const $push107=, 12345 + i32.add $push106=, $pop5, $pop107 + tee_local $push105=, $1=, $pop106 + i32.const $push104=, 16 + i32.shr_u $push6=, $pop105, $pop104 + i32.store8 sQ+2($pop109), $pop6 + i32.const $push103=, 0 + i32.const $push102=, 1103515245 + i32.mul $push7=, $1, $pop102 + i32.const $push101=, 12345 + i32.add $push100=, $pop7, $pop101 + tee_local $push99=, $1=, $pop100 + i32.const $push98=, 16 + i32.shr_u $push8=, $pop99, $pop98 + i32.store8 sQ+3($pop103), $pop8 + i32.const $push97=, 0 + i32.const $push96=, 1103515245 + i32.mul $push9=, $1, $pop96 + i32.const $push95=, 12345 + i32.add $push94=, $pop9, $pop95 + tee_local $push93=, $1=, $pop94 + i32.const $push92=, 16 + i32.shr_u $push10=, $pop93, $pop92 + i32.store8 sQ+4($pop97), $pop10 + i32.const $push91=, 0 + i32.const $push90=, 1103515245 + i32.mul $push11=, $1, $pop90 + i32.const $push89=, 12345 + i32.add $push88=, $pop11, $pop89 + tee_local $push87=, $1=, $pop88 + i32.const $push86=, 16 + i32.shr_u $push12=, $pop87, $pop86 + i32.store8 sQ+5($pop91), $pop12 + i32.const $push85=, 0 + i32.const $push84=, 1103515245 + i32.mul $push13=, $1, $pop84 + i32.const $push83=, 12345 + i32.add $push82=, $pop13, $pop83 + tee_local $push81=, $1=, $pop82 + i32.const $push80=, 16 + i32.shr_u $push14=, $pop81, $pop80 + i32.store8 sQ+6($pop85), $pop14 + i32.const $push79=, 0 + i32.const $push78=, 1103515245 + i32.mul $push15=, $1, $pop78 + i32.const $push77=, 12345 + i32.add $push76=, $pop15, $pop77 + tee_local $push75=, $1=, $pop76 + i32.const $push74=, 16 + i32.shr_u $push16=, $pop75, $pop74 + i32.store8 sQ+7($pop79), $pop16 + i32.const $push73=, 0 + i32.const $push72=, 1103515245 + i32.mul $push17=, $1, $pop72 + i32.const $push71=, 12345 + i32.add $push70=, $pop17, $pop71 + tee_local $push69=, $1=, $pop70 + i32.const $push68=, 16 + i32.shr_u $push18=, $pop69, $pop68 + i32.store8 sQ+8($pop73), $pop18 + i32.const $push67=, 0 + i32.const $push66=, 1103515245 + i32.mul $push19=, $1, $pop66 + i32.const $push65=, 12345 + i32.add $push64=, $pop19, $pop65 + tee_local $push63=, $1=, $pop64 + i32.const $push62=, 16 + i32.shr_u $push20=, $pop63, $pop62 + i32.store8 sQ+9($pop67), $pop20 + i32.const $push61=, 0 + i32.const $push60=, 1103515245 + i32.mul $push21=, $1, $pop60 + i32.const $push59=, 12345 + i32.add $push58=, $pop21, $pop59 + tee_local $push57=, $1=, $pop58 + i32.const $push56=, 1103515245 + i32.mul $push22=, $pop57, $pop56 + i32.const $push55=, 12345 + i32.add $push54=, $pop22, $pop55 + tee_local $push53=, $0=, $pop54 + i32.store myrnd.s($pop61), $pop53 + i32.const $push52=, 0 + i32.const $push51=, 16 + i32.shr_u $push25=, $1, $pop51 + i32.const $push50=, 2047 + i32.and $push26=, $pop25, $pop50 + i32.const $push49=, 0 + i32.load16_u $push23=, sQ($pop49) + i32.const $push24=, -4096 + i32.and $push48=, $pop23, $pop24 + tee_local $push47=, $1=, $pop48 + i32.or $push27=, $pop26, $pop47 + i32.store16 sQ($pop52), $pop27 + block + i32.const $push46=, 1 + i32.eqz $push145=, $pop46 + br_if 0, $pop145 # 0: down to label12 +# BB#1: # %if.end + i32.const $push135=, 0 + i32.const $push134=, 1103515245 + i32.mul $push28=, $0, $pop134 + i32.const $push133=, 12345 + i32.add $push132=, $pop28, $pop133 + tee_local $push131=, $0=, $pop132 + i32.const $push130=, 1103515245 + i32.mul $push29=, $pop131, $pop130 + i32.const $push129=, 12345 + i32.add $push128=, $pop29, $pop129 + tee_local $push127=, $2=, $pop128 + i32.store myrnd.s($pop135), $pop127 + i32.const $push126=, 0 + i32.const $push125=, 16 + i32.shr_u $push30=, $0, $pop125 + i32.const $push124=, 2047 + i32.and $push31=, $pop30, $pop124 + i32.or $push32=, $pop31, $1 + i32.store16 sQ($pop126), $pop32 + i32.const $push123=, 1 + i32.eqz $push146=, $pop123 + br_if 0, $pop146 # 0: down to label12 +# BB#2: # %if.end134 + i32.const $push37=, 0 + i32.const $push33=, 1103515245 + i32.mul $push34=, $2, $pop33 + i32.const $push35=, 12345 + i32.add $push144=, $pop34, $pop35 + tee_local $push143=, $0=, $pop144 + i32.const $push142=, 1103515245 + i32.mul $push36=, $pop143, $pop142 + i32.const $push141=, 12345 + i32.add $push140=, $pop36, $pop141 + tee_local $push139=, $2=, $pop140 + i32.store myrnd.s($pop37), $pop139 + i32.const $push138=, 0 + i32.const $push38=, 16 + i32.shr_u $push42=, $2, $pop38 + i32.const $push40=, 2047 + i32.and $push43=, $pop42, $pop40 + i32.const $push137=, 16 + i32.shr_u $push39=, $0, $pop137 + i32.const $push136=, 2047 + i32.and $push41=, $pop39, $pop136 + i32.add $push44=, $pop43, $pop41 + i32.or $push45=, $1, $pop44 + i32.store16 sQ($pop138), $pop45 + return +.LBB102_3: # %if.then + end_block # label12: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end102: + .size testQ, .Lfunc_end102-testQ + # -- End function + .section .text.retmeR,"ax",@progbits + .hidden retmeR # -- Begin function retmeR + .globl retmeR + .type retmeR,@function +retmeR: # @retmeR + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=0 + i64.store 0($0):p2align=0, $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i32.load16_u $push4=, 0($pop3):p2align=0 + i32.store16 0($pop2):p2align=0, $pop4 + # fallthrough-return + .endfunc +.Lfunc_end103: + .size retmeR, .Lfunc_end103-retmeR + # -- End function + .section .text.fn1R,"ax",@progbits + .hidden fn1R # -- Begin function fn1R + .globl fn1R + .type fn1R,@function +fn1R: # @fn1R + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sR($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 3 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end104: + .size fn1R, .Lfunc_end104-fn1R + # -- End function + .section .text.fn2R,"ax",@progbits + .hidden fn2R # -- Begin function fn2R + .globl fn2R + .type fn2R,@function +fn2R: # @fn2R + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sR($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 3 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end105: + .size fn2R, .Lfunc_end105-fn2R + # -- End function + .section .text.retitR,"ax",@progbits + .hidden retitR # -- Begin function retitR + .globl retitR + .type retitR,@function +retitR: # @retitR + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sR($pop0) + i32.const $push2=, 3 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end106: + .size retitR, .Lfunc_end106-retitR + # -- End function + .section .text.fn3R,"ax",@progbits + .hidden fn3R # -- Begin function fn3R + .globl fn3R + .type fn3R,@function +fn3R: # @fn3R + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load16_u $push9=, sR($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 3 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, 65532 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store16 sR($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end107: + .size fn3R, .Lfunc_end107-fn3R + # -- End function + .section .text.testR,"ax",@progbits + .hidden testR # -- Begin function testR + .globl testR + .type testR,@function +testR: # @testR + .local i32, i32 +# BB#0: # %if.end90 + i32.const $push0=, 0 + i32.const $push106=, 0 + i32.load $push1=, myrnd.s($pop106) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push105=, $pop3, $pop4 + tee_local $push104=, $0=, $pop105 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop104, $pop5 + i32.store8 sR($pop0), $pop6 + i32.const $push103=, 0 + i32.const $push102=, 1103515245 + i32.mul $push7=, $0, $pop102 + i32.const $push101=, 12345 + i32.add $push100=, $pop7, $pop101 + tee_local $push99=, $0=, $pop100 + i32.const $push98=, 16 + i32.shr_u $push8=, $pop99, $pop98 + i32.store8 sR+1($pop103), $pop8 + i32.const $push97=, 0 + i32.const $push96=, 1103515245 + i32.mul $push9=, $0, $pop96 + i32.const $push95=, 12345 + i32.add $push94=, $pop9, $pop95 + tee_local $push93=, $0=, $pop94 + i32.const $push92=, 16 + i32.shr_u $push10=, $pop93, $pop92 + i32.store8 sR+2($pop97), $pop10 + i32.const $push91=, 0 + i32.const $push90=, 1103515245 + i32.mul $push11=, $0, $pop90 + i32.const $push89=, 12345 + i32.add $push88=, $pop11, $pop89 + tee_local $push87=, $0=, $pop88 + i32.const $push86=, 16 + i32.shr_u $push12=, $pop87, $pop86 + i32.store8 sR+3($pop91), $pop12 + i32.const $push85=, 0 + i32.const $push84=, 1103515245 + i32.mul $push13=, $0, $pop84 + i32.const $push83=, 12345 + i32.add $push82=, $pop13, $pop83 + tee_local $push81=, $0=, $pop82 + i32.const $push80=, 16 + i32.shr_u $push14=, $pop81, $pop80 + i32.store8 sR+4($pop85), $pop14 + i32.const $push79=, 0 + i32.const $push78=, 1103515245 + i32.mul $push15=, $0, $pop78 + i32.const $push77=, 12345 + i32.add $push76=, $pop15, $pop77 + tee_local $push75=, $0=, $pop76 + i32.const $push74=, 16 + i32.shr_u $push16=, $pop75, $pop74 + i32.store8 sR+5($pop79), $pop16 + i32.const $push73=, 0 + i32.const $push72=, 1103515245 + i32.mul $push17=, $0, $pop72 + i32.const $push71=, 12345 + i32.add $push70=, $pop17, $pop71 + tee_local $push69=, $0=, $pop70 + i32.const $push68=, 16 + i32.shr_u $push18=, $pop69, $pop68 + i32.store8 sR+6($pop73), $pop18 + i32.const $push67=, 0 + i32.const $push66=, 1103515245 + i32.mul $push19=, $0, $pop66 + i32.const $push65=, 12345 + i32.add $push64=, $pop19, $pop65 + tee_local $push63=, $0=, $pop64 + i32.const $push62=, 16 + i32.shr_u $push20=, $pop63, $pop62 + i32.store8 sR+7($pop67), $pop20 + i32.const $push61=, 0 + i32.const $push60=, 1103515245 + i32.mul $push21=, $0, $pop60 + i32.const $push59=, 12345 + i32.add $push58=, $pop21, $pop59 + tee_local $push57=, $0=, $pop58 + i32.const $push56=, 16 + i32.shr_u $push22=, $pop57, $pop56 + i32.store8 sR+8($pop61), $pop22 + i32.const $push55=, 0 + i32.const $push54=, 1103515245 + i32.mul $push23=, $0, $pop54 + i32.const $push53=, 12345 + i32.add $push52=, $pop23, $pop53 + tee_local $push51=, $0=, $pop52 + i32.const $push50=, 16 + i32.shr_u $push24=, $pop51, $pop50 + i32.store8 sR+9($pop55), $pop24 + i32.const $push49=, 0 + i32.const $push25=, -341751747 + i32.mul $push26=, $0, $pop25 + i32.const $push27=, 229283573 + i32.add $push48=, $pop26, $pop27 + tee_local $push47=, $0=, $pop48 + i32.const $push46=, 1103515245 + i32.mul $push28=, $pop47, $pop46 + i32.const $push45=, 12345 + i32.add $push44=, $pop28, $pop45 + tee_local $push43=, $1=, $pop44 + i32.store myrnd.s($pop49), $pop43 + i32.const $push42=, 0 + i32.const $push41=, 16 + i32.shr_u $push30=, $1, $pop41 + i32.const $push40=, 16 + i32.shr_u $push29=, $0, $pop40 + i32.add $push31=, $pop30, $pop29 + i32.const $push32=, 3 + i32.and $push33=, $pop31, $pop32 + i32.const $push39=, 0 + i32.load16_u $push34=, sR($pop39) + i32.const $push35=, 65532 + i32.and $push36=, $pop34, $pop35 + i32.or $push37=, $pop33, $pop36 + i32.store16 sR($pop42), $pop37 + block + i32.const $push38=, 1 + i32.eqz $push107=, $pop38 + br_if 0, $pop107 # 0: down to label13 +# BB#1: # %if.end134 + return +.LBB108_2: # %if.then133 + end_block # label13: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end108: + .size testR, .Lfunc_end108-testR + # -- End function + .section .text.retmeS,"ax",@progbits + .hidden retmeS # -- Begin function retmeS + .globl retmeS + .type retmeS,@function +retmeS: # @retmeS + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=0 + i64.store 0($0):p2align=0, $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i32.load16_u $push4=, 0($pop3):p2align=0 + i32.store16 0($pop2):p2align=0, $pop4 + # fallthrough-return + .endfunc +.Lfunc_end109: + .size retmeS, .Lfunc_end109-retmeS + # -- End function + .section .text.fn1S,"ax",@progbits + .hidden fn1S # -- Begin function fn1S + .globl fn1S + .type fn1S,@function +fn1S: # @fn1S + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sS($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 1 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end110: + .size fn1S, .Lfunc_end110-fn1S + # -- End function + .section .text.fn2S,"ax",@progbits + .hidden fn2S # -- Begin function fn2S + .globl fn2S + .type fn2S,@function +fn2S: # @fn2S + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sS($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 1 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end111: + .size fn2S, .Lfunc_end111-fn2S + # -- End function + .section .text.retitS,"ax",@progbits + .hidden retitS # -- Begin function retitS + .globl retitS + .type retitS,@function +retitS: # @retitS + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sS($pop0) + i32.const $push2=, 1 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end112: + .size retitS, .Lfunc_end112-retitS + # -- End function + .section .text.fn3S,"ax",@progbits + .hidden fn3S # -- Begin function fn3S + .globl fn3S + .type fn3S,@function +fn3S: # @fn3S + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load16_u $push9=, sS($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 1 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, 65534 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store16 sS($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end113: + .size fn3S, .Lfunc_end113-fn3S + # -- End function + .section .text.testS,"ax",@progbits + .hidden testS # -- Begin function testS + .globl testS + .type testS,@function +testS: # @testS + .local i32, i32 +# BB#0: # %if.end90 + i32.const $push0=, 0 + i32.const $push106=, 0 + i32.load $push1=, myrnd.s($pop106) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push105=, $pop3, $pop4 + tee_local $push104=, $0=, $pop105 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop104, $pop5 + i32.store8 sS($pop0), $pop6 + i32.const $push103=, 0 + i32.const $push102=, 1103515245 + i32.mul $push7=, $0, $pop102 + i32.const $push101=, 12345 + i32.add $push100=, $pop7, $pop101 + tee_local $push99=, $0=, $pop100 + i32.const $push98=, 16 + i32.shr_u $push8=, $pop99, $pop98 + i32.store8 sS+1($pop103), $pop8 + i32.const $push97=, 0 + i32.const $push96=, 1103515245 + i32.mul $push9=, $0, $pop96 + i32.const $push95=, 12345 + i32.add $push94=, $pop9, $pop95 + tee_local $push93=, $0=, $pop94 + i32.const $push92=, 16 + i32.shr_u $push10=, $pop93, $pop92 + i32.store8 sS+2($pop97), $pop10 + i32.const $push91=, 0 + i32.const $push90=, 1103515245 + i32.mul $push11=, $0, $pop90 + i32.const $push89=, 12345 + i32.add $push88=, $pop11, $pop89 + tee_local $push87=, $0=, $pop88 + i32.const $push86=, 16 + i32.shr_u $push12=, $pop87, $pop86 + i32.store8 sS+3($pop91), $pop12 + i32.const $push85=, 0 + i32.const $push84=, 1103515245 + i32.mul $push13=, $0, $pop84 + i32.const $push83=, 12345 + i32.add $push82=, $pop13, $pop83 + tee_local $push81=, $0=, $pop82 + i32.const $push80=, 16 + i32.shr_u $push14=, $pop81, $pop80 + i32.store8 sS+4($pop85), $pop14 + i32.const $push79=, 0 + i32.const $push78=, 1103515245 + i32.mul $push15=, $0, $pop78 + i32.const $push77=, 12345 + i32.add $push76=, $pop15, $pop77 + tee_local $push75=, $0=, $pop76 + i32.const $push74=, 16 + i32.shr_u $push16=, $pop75, $pop74 + i32.store8 sS+5($pop79), $pop16 + i32.const $push73=, 0 + i32.const $push72=, 1103515245 + i32.mul $push17=, $0, $pop72 + i32.const $push71=, 12345 + i32.add $push70=, $pop17, $pop71 + tee_local $push69=, $0=, $pop70 + i32.const $push68=, 16 + i32.shr_u $push18=, $pop69, $pop68 + i32.store8 sS+6($pop73), $pop18 + i32.const $push67=, 0 + i32.const $push66=, 1103515245 + i32.mul $push19=, $0, $pop66 + i32.const $push65=, 12345 + i32.add $push64=, $pop19, $pop65 + tee_local $push63=, $0=, $pop64 + i32.const $push62=, 16 + i32.shr_u $push20=, $pop63, $pop62 + i32.store8 sS+7($pop67), $pop20 + i32.const $push61=, 0 + i32.const $push60=, 1103515245 + i32.mul $push21=, $0, $pop60 + i32.const $push59=, 12345 + i32.add $push58=, $pop21, $pop59 + tee_local $push57=, $0=, $pop58 + i32.const $push56=, 16 + i32.shr_u $push22=, $pop57, $pop56 + i32.store8 sS+8($pop61), $pop22 + i32.const $push55=, 0 + i32.const $push54=, 1103515245 + i32.mul $push23=, $0, $pop54 + i32.const $push53=, 12345 + i32.add $push52=, $pop23, $pop53 + tee_local $push51=, $0=, $pop52 + i32.const $push50=, 16 + i32.shr_u $push24=, $pop51, $pop50 + i32.store8 sS+9($pop55), $pop24 + i32.const $push49=, 0 + i32.const $push25=, -341751747 + i32.mul $push26=, $0, $pop25 + i32.const $push27=, 229283573 + i32.add $push48=, $pop26, $pop27 + tee_local $push47=, $0=, $pop48 + i32.const $push46=, 1103515245 + i32.mul $push28=, $pop47, $pop46 + i32.const $push45=, 12345 + i32.add $push44=, $pop28, $pop45 + tee_local $push43=, $1=, $pop44 + i32.store myrnd.s($pop49), $pop43 + i32.const $push42=, 0 + i32.const $push41=, 16 + i32.shr_u $push30=, $1, $pop41 + i32.const $push40=, 16 + i32.shr_u $push29=, $0, $pop40 + i32.add $push31=, $pop30, $pop29 + i32.const $push32=, 1 + i32.and $push33=, $pop31, $pop32 + i32.const $push39=, 0 + i32.load16_u $push34=, sS($pop39) + i32.const $push35=, 65534 + i32.and $push36=, $pop34, $pop35 + i32.or $push37=, $pop33, $pop36 + i32.store16 sS($pop42), $pop37 + block + i32.const $push38=, 1 + i32.eqz $push107=, $pop38 + br_if 0, $pop107 # 0: down to label14 +# BB#1: # %if.end134 + return +.LBB114_2: # %if.then133 + end_block # label14: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end114: + .size testS, .Lfunc_end114-testS + # -- End function + .section .text.retmeT,"ax",@progbits + .hidden retmeT # -- Begin function retmeT + .globl retmeT + .type retmeT,@function +retmeT: # @retmeT + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1):p2align=0 + i32.store 0($0):p2align=1, $pop0 + # fallthrough-return + .endfunc +.Lfunc_end115: + .size retmeT, .Lfunc_end115-retmeT + # -- End function + .section .text.fn1T,"ax",@progbits + .hidden fn1T # -- Begin function fn1T + .globl fn1T + .type fn1T,@function +fn1T: # @fn1T + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sT($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 1 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end116: + .size fn1T, .Lfunc_end116-fn1T + # -- End function + .section .text.fn2T,"ax",@progbits + .hidden fn2T # -- Begin function fn2T + .globl fn2T + .type fn2T,@function +fn2T: # @fn2T + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sT($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 1 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end117: + .size fn2T, .Lfunc_end117-fn2T + # -- End function + .section .text.retitT,"ax",@progbits + .hidden retitT # -- Begin function retitT + .globl retitT + .type retitT,@function +retitT: # @retitT + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sT($pop0) + i32.const $push2=, 1 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end118: + .size retitT, .Lfunc_end118-retitT + # -- End function + .section .text.fn3T,"ax",@progbits + .hidden fn3T # -- Begin function fn3T + .globl fn3T + .type fn3T,@function +fn3T: # @fn3T + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load16_u $push9=, sT($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 1 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, 65534 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store16 sT($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end119: + .size fn3T, .Lfunc_end119-fn3T + # -- End function + .section .text.testT,"ax",@progbits + .hidden testT # -- Begin function testT + .globl testT + .type testT,@function +testT: # @testT + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push75=, 0 + i32.const $push74=, 0 + i32.load $push0=, myrnd.s($pop74) + i32.const $push73=, 1103515245 + i32.mul $push1=, $pop0, $pop73 + i32.const $push72=, 12345 + i32.add $push71=, $pop1, $pop72 + tee_local $push70=, $0=, $pop71 + i32.const $push69=, 16 + i32.shr_u $push2=, $pop70, $pop69 + i32.store8 sT($pop75), $pop2 + i32.const $push68=, 0 + i32.const $push67=, 1103515245 + i32.mul $push3=, $0, $pop67 + i32.const $push66=, 12345 + i32.add $push65=, $pop3, $pop66 + tee_local $push64=, $0=, $pop65 + i32.const $push63=, 16 + i32.shr_u $push4=, $pop64, $pop63 + i32.store8 sT+1($pop68), $pop4 + i32.const $push62=, 0 + i32.const $push61=, 1103515245 + i32.mul $push5=, $0, $pop61 + i32.const $push60=, 12345 + i32.add $push59=, $pop5, $pop60 + tee_local $push58=, $0=, $pop59 + i32.const $push57=, 16 + i32.shr_u $push6=, $pop58, $pop57 + i32.store8 sT+2($pop62), $pop6 + i32.const $push56=, 0 + i32.const $push55=, 1103515245 + i32.mul $push7=, $0, $pop55 + i32.const $push54=, 12345 + i32.add $push53=, $pop7, $pop54 + tee_local $push52=, $0=, $pop53 + i32.const $push51=, 16 + i32.shr_u $push8=, $pop52, $pop51 + i32.store8 sT+3($pop56), $pop8 + i32.const $push50=, 0 + i32.const $push49=, 1103515245 + i32.mul $push11=, $0, $pop49 + i32.const $push48=, 12345 + i32.add $push47=, $pop11, $pop48 + tee_local $push46=, $0=, $pop47 + i32.const $push45=, 16 + i32.shr_u $push44=, $pop46, $pop45 + tee_local $push43=, $2=, $pop44 + i32.const $push42=, 1 + i32.and $push12=, $pop43, $pop42 + i32.const $push41=, 0 + i32.load16_u $push9=, sT($pop41) + i32.const $push10=, -2 + i32.and $push40=, $pop9, $pop10 + tee_local $push39=, $1=, $pop40 + i32.or $push13=, $pop12, $pop39 + i32.store16 sT($pop50), $pop13 + i32.const $push38=, 0 + i32.const $push37=, 1103515245 + i32.mul $push14=, $0, $pop37 + i32.const $push36=, 12345 + i32.add $push35=, $pop14, $pop36 + tee_local $push34=, $0=, $pop35 + i32.store myrnd.s($pop38), $pop34 + block + i32.const $push33=, 16 + i32.shr_u $push32=, $0, $pop33 + tee_local $push31=, $3=, $pop32 + i32.add $push15=, $pop31, $2 + i32.const $push30=, 0 + i32.load $push16=, sT($pop30) + i32.add $push17=, $3, $pop16 + i32.xor $push18=, $pop15, $pop17 + i32.const $push29=, 1 + i32.and $push19=, $pop18, $pop29 + br_if 0, $pop19 # 0: down to label15 +# BB#1: # %if.end94 + i32.const $push87=, 0 + i32.const $push20=, -2139243339 + i32.mul $push21=, $0, $pop20 + i32.const $push22=, -1492899873 + i32.add $push86=, $pop21, $pop22 + tee_local $push85=, $0=, $pop86 + i32.const $push84=, 1103515245 + i32.mul $push23=, $pop85, $pop84 + i32.const $push83=, 12345 + i32.add $push82=, $pop23, $pop83 + tee_local $push81=, $2=, $pop82 + i32.store myrnd.s($pop87), $pop81 + i32.const $push80=, 0 + i32.const $push79=, 16 + i32.shr_u $push25=, $2, $pop79 + i32.const $push78=, 16 + i32.shr_u $push24=, $0, $pop78 + i32.add $push26=, $pop25, $pop24 + i32.const $push77=, 1 + i32.and $push27=, $pop26, $pop77 + i32.or $push28=, $pop27, $1 + i32.store16 sT($pop80), $pop28 + i32.const $push76=, 1 + i32.eqz $push88=, $pop76 + br_if 0, $pop88 # 0: down to label15 +# BB#2: # %if.end140 + return +.LBB120_3: # %if.then + end_block # label15: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end120: + .size testT, .Lfunc_end120-testT + # -- End function + .section .text.retmeU,"ax",@progbits + .hidden retmeU # -- Begin function retmeU + .globl retmeU + .type retmeU,@function +retmeU: # @retmeU + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=0 + i64.store 0($0):p2align=0, $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i32.const $push5=, 8 + i32.add $push3=, $1, $pop5 + i32.load16_u $push4=, 0($pop3):p2align=0 + i32.store16 0($pop2):p2align=0, $pop4 + # fallthrough-return + .endfunc +.Lfunc_end121: + .size retmeU, .Lfunc_end121-retmeU + # -- End function + .section .text.fn1U,"ax",@progbits + .hidden fn1U # -- Begin function fn1U + .globl fn1U + .type fn1U,@function +fn1U: # @fn1U + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sU($pop0) + i32.const $push2=, 6 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 1 + i32.and $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end122: + .size fn1U, .Lfunc_end122-fn1U + # -- End function + .section .text.fn2U,"ax",@progbits + .hidden fn2U # -- Begin function fn2U + .globl fn2U + .type fn2U,@function +fn2U: # @fn2U + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sU($pop0) + i32.const $push2=, 6 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 1 + i32.and $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end123: + .size fn2U, .Lfunc_end123-fn2U + # -- End function + .section .text.retitU,"ax",@progbits + .hidden retitU # -- Begin function retitU + .globl retitU + .type retitU,@function +retitU: # @retitU + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, sU($pop0) + i32.const $push2=, 6 + i32.shr_u $push3=, $pop1, $pop2 + i32.const $push4=, 1 + i32.and $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end124: + .size retitU, .Lfunc_end124-retitU + # -- End function + .section .text.fn3U,"ax",@progbits + .hidden fn3U # -- Begin function fn3U + .globl fn3U + .type fn3U,@function +fn3U: # @fn3U + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push16=, 0 + i32.load16_u $push15=, sU($pop16) + tee_local $push14=, $1=, $pop15 + i32.const $push3=, 6 + i32.shr_u $push4=, $pop14, $pop3 + i32.add $push13=, $pop4, $0 + tee_local $push12=, $0=, $pop13 + i32.const $push11=, 6 + i32.shl $push5=, $pop12, $pop11 + i32.const $push6=, 64 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, 65471 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store16 sU($pop0), $pop8 + i32.const $push9=, 1 + i32.and $push10=, $0, $pop9 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end125: + .size fn3U, .Lfunc_end125-fn3U + # -- End function + .section .text.testU,"ax",@progbits + .hidden testU # -- Begin function testU + .globl testU + .type testU,@function +testU: # @testU + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push165=, 0 + i32.load $push1=, myrnd.s($pop165) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push164=, $pop3, $pop4 + tee_local $push163=, $2=, $pop164 + i32.const $push162=, 16 + i32.shr_u $push5=, $pop163, $pop162 + i32.store8 sU($pop0), $pop5 + i32.const $push161=, 0 + i32.const $push160=, 1103515245 + i32.mul $push6=, $2, $pop160 + i32.const $push159=, 12345 + i32.add $push158=, $pop6, $pop159 + tee_local $push157=, $2=, $pop158 + i32.const $push156=, 16 + i32.shr_u $push7=, $pop157, $pop156 + i32.store8 sU+1($pop161), $pop7 + i32.const $push155=, 0 + i32.const $push154=, 1103515245 + i32.mul $push8=, $2, $pop154 + i32.const $push153=, 12345 + i32.add $push152=, $pop8, $pop153 + tee_local $push151=, $2=, $pop152 + i32.const $push150=, 16 + i32.shr_u $push9=, $pop151, $pop150 + i32.store8 sU+2($pop155), $pop9 + i32.const $push149=, 0 + i32.const $push148=, 1103515245 + i32.mul $push10=, $2, $pop148 + i32.const $push147=, 12345 + i32.add $push146=, $pop10, $pop147 + tee_local $push145=, $2=, $pop146 + i32.const $push144=, 16 + i32.shr_u $push11=, $pop145, $pop144 + i32.store8 sU+3($pop149), $pop11 + i32.const $push143=, 0 + i32.const $push142=, 1103515245 + i32.mul $push12=, $2, $pop142 + i32.const $push141=, 12345 + i32.add $push140=, $pop12, $pop141 + tee_local $push139=, $2=, $pop140 + i32.const $push138=, 16 + i32.shr_u $push13=, $pop139, $pop138 + i32.store8 sU+4($pop143), $pop13 + i32.const $push137=, 0 + i32.const $push136=, 1103515245 + i32.mul $push14=, $2, $pop136 + i32.const $push135=, 12345 + i32.add $push134=, $pop14, $pop135 + tee_local $push133=, $2=, $pop134 + i32.const $push132=, 16 + i32.shr_u $push15=, $pop133, $pop132 + i32.store8 sU+5($pop137), $pop15 + i32.const $push131=, 0 + i32.const $push130=, 1103515245 + i32.mul $push16=, $2, $pop130 + i32.const $push129=, 12345 + i32.add $push128=, $pop16, $pop129 + tee_local $push127=, $2=, $pop128 + i32.const $push126=, 16 + i32.shr_u $push17=, $pop127, $pop126 + i32.store8 sU+6($pop131), $pop17 + i32.const $push125=, 0 + i32.const $push124=, 1103515245 + i32.mul $push18=, $2, $pop124 + i32.const $push123=, 12345 + i32.add $push122=, $pop18, $pop123 + tee_local $push121=, $2=, $pop122 + i32.const $push120=, 16 + i32.shr_u $push19=, $pop121, $pop120 + i32.store8 sU+7($pop125), $pop19 + i32.const $push119=, 0 + i32.const $push118=, 1103515245 + i32.mul $push20=, $2, $pop118 + i32.const $push117=, 12345 + i32.add $push116=, $pop20, $pop117 + tee_local $push115=, $2=, $pop116 + i32.const $push114=, 16 + i32.shr_u $push21=, $pop115, $pop114 + i32.store8 sU+8($pop119), $pop21 + i32.const $push113=, 0 + i32.const $push112=, 1103515245 + i32.mul $push22=, $2, $pop112 + i32.const $push111=, 12345 + i32.add $push110=, $pop22, $pop111 + tee_local $push109=, $2=, $pop110 + i32.const $push108=, 16 + i32.shr_u $push23=, $pop109, $pop108 + i32.store8 sU+9($pop113), $pop23 + i32.const $push107=, 0 + i32.const $push106=, 1103515245 + i32.mul $push24=, $2, $pop106 + i32.const $push105=, 12345 + i32.add $push104=, $pop24, $pop105 + tee_local $push103=, $2=, $pop104 + i32.const $push102=, 1103515245 + i32.mul $push25=, $pop103, $pop102 + i32.const $push101=, 12345 + i32.add $push100=, $pop25, $pop101 + tee_local $push99=, $1=, $pop100 + i32.store myrnd.s($pop107), $pop99 + i32.const $push98=, 0 + i32.const $push97=, 16 + i32.shr_u $push96=, $2, $pop97 + tee_local $push95=, $0=, $pop96 + i32.const $push28=, 2047 + i32.and $push94=, $pop95, $pop28 + tee_local $push93=, $3=, $pop94 + i32.const $push29=, 6 + i32.shl $push30=, $pop93, $pop29 + i32.const $push31=, 64 + i32.and $push32=, $pop30, $pop31 + i32.const $push92=, 0 + i32.load16_u $push26=, sU($pop92) + i32.const $push27=, -65 + i32.and $push91=, $pop26, $pop27 + tee_local $push90=, $2=, $pop91 + i32.or $push89=, $pop32, $pop90 + tee_local $push88=, $4=, $pop89 + i32.store16 sU($pop98), $pop88 + block + i32.const $push33=, 65472 + i32.and $push34=, $4, $pop33 + i32.const $push87=, 6 + i32.shr_u $push86=, $pop34, $pop87 + tee_local $push85=, $4=, $pop86 + i32.xor $push35=, $pop85, $3 + i32.const $push84=, 1 + i32.and $push36=, $pop35, $pop84 + br_if 0, $pop36 # 0: down to label16 +# BB#1: # %lor.lhs.false41 + i32.const $push169=, 16 + i32.shr_u $push168=, $1, $pop169 + tee_local $push167=, $3=, $pop168 + i32.add $push38=, $pop167, $4 + i32.add $push37=, $3, $0 + i32.xor $push39=, $pop38, $pop37 + i32.const $push166=, 1 + i32.and $push40=, $pop39, $pop166 + br_if 0, $pop40 # 0: down to label16 +# BB#2: # %if.end + i32.const $push45=, 0 + i32.const $push41=, 1103515245 + i32.mul $push42=, $1, $pop41 + i32.const $push43=, 12345 + i32.add $push187=, $pop42, $pop43 + tee_local $push186=, $0=, $pop187 + i32.const $push185=, 1103515245 + i32.mul $push44=, $pop186, $pop185 + i32.const $push184=, 12345 + i32.add $push183=, $pop44, $pop184 + tee_local $push182=, $1=, $pop183 + i32.store myrnd.s($pop45), $pop182 + i32.const $push181=, 0 + i32.const $push180=, 16 + i32.shr_u $push179=, $0, $pop180 + tee_local $push178=, $0=, $pop179 + i32.const $push46=, 2047 + i32.and $push177=, $pop178, $pop46 + tee_local $push176=, $3=, $pop177 + i32.const $push47=, 6 + i32.shl $push48=, $pop176, $pop47 + i32.const $push49=, 64 + i32.and $push50=, $pop48, $pop49 + i32.or $push175=, $pop50, $2 + tee_local $push174=, $4=, $pop175 + i32.store16 sU($pop181), $pop174 + i32.const $push51=, 65472 + i32.and $push52=, $4, $pop51 + i32.const $push173=, 6 + i32.shr_u $push172=, $pop52, $pop173 + tee_local $push171=, $4=, $pop172 + i32.xor $push53=, $pop171, $3 + i32.const $push170=, 1 + i32.and $push54=, $pop53, $pop170 + br_if 0, $pop54 # 0: down to label16 +# BB#3: # %lor.lhs.false85 + i32.const $push191=, 16 + i32.shr_u $push190=, $1, $pop191 + tee_local $push189=, $3=, $pop190 + i32.add $push56=, $pop189, $4 + i32.add $push55=, $3, $0 + i32.xor $push57=, $pop56, $pop55 + i32.const $push188=, 1 + i32.and $push58=, $pop57, $pop188 + br_if 0, $pop58 # 0: down to label16 +# BB#4: # %lor.lhs.false130 + i32.const $push63=, 0 + i32.const $push59=, 1103515245 + i32.mul $push60=, $1, $pop59 + i32.const $push61=, 12345 + i32.add $push205=, $pop60, $pop61 + tee_local $push204=, $1=, $pop205 + i32.const $push203=, 1103515245 + i32.mul $push62=, $pop204, $pop203 + i32.const $push202=, 12345 + i32.add $push201=, $pop62, $pop202 + tee_local $push200=, $0=, $pop201 + i32.store myrnd.s($pop63), $pop200 + i32.const $push199=, 0 + i32.const $push64=, 16 + i32.shr_u $push198=, $0, $pop64 + tee_local $push197=, $0=, $pop198 + i32.const $push65=, 2047 + i32.and $push66=, $pop197, $pop65 + i32.const $push67=, 10 + i32.shr_u $push68=, $1, $pop67 + i32.const $push69=, 64 + i32.and $push70=, $pop68, $pop69 + i32.or $push71=, $pop70, $2 + i32.const $push72=, 65472 + i32.and $push73=, $pop71, $pop72 + i32.const $push74=, 6 + i32.shr_u $push75=, $pop73, $pop74 + i32.add $push196=, $pop66, $pop75 + tee_local $push195=, $3=, $pop196 + i32.const $push194=, 6 + i32.shl $push76=, $pop195, $pop194 + i32.const $push193=, 64 + i32.and $push77=, $pop76, $pop193 + i32.or $push78=, $pop77, $2 + i32.store16 sU($pop199), $pop78 + i32.const $push192=, 16 + i32.shr_u $push79=, $1, $pop192 + i32.add $push80=, $0, $pop79 + i32.xor $push81=, $pop80, $3 + i32.const $push82=, 1 + i32.and $push83=, $pop81, $pop82 + br_if 0, $pop83 # 0: down to label16 +# BB#5: # %if.end136 + return +.LBB126_6: # %if.then + end_block # label16: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end126: + .size testU, .Lfunc_end126-testU + # -- End function + .section .text.retmeV,"ax",@progbits + .hidden retmeV # -- Begin function retmeV + .globl retmeV + .type retmeV,@function +retmeV: # @retmeV + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1):p2align=0 + i32.store 0($0):p2align=1, $pop0 + # fallthrough-return + .endfunc +.Lfunc_end127: + .size retmeV, .Lfunc_end127-retmeV + # -- End function + .section .text.fn1V,"ax",@progbits + .hidden fn1V # -- Begin function fn1V + .globl fn1V + .type fn1V,@function +fn1V: # @fn1V + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sV($pop0) + i32.const $push2=, 8 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 1 + i32.and $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end128: + .size fn1V, .Lfunc_end128-fn1V + # -- End function + .section .text.fn2V,"ax",@progbits + .hidden fn2V # -- Begin function fn2V + .globl fn2V + .type fn2V,@function +fn2V: # @fn2V + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, sV+1($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 1 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end129: + .size fn2V, .Lfunc_end129-fn2V + # -- End function + .section .text.retitV,"ax",@progbits + .hidden retitV # -- Begin function retitV + .globl retitV + .type retitV,@function +retitV: # @retitV + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, sV+1($pop0) + i32.const $push2=, 1 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end130: + .size retitV, .Lfunc_end130-retitV + # -- End function + .section .text.fn3V,"ax",@progbits + .hidden fn3V # -- Begin function fn3V + .globl fn3V + .type fn3V,@function +fn3V: # @fn3V + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push16=, 0 + i32.load16_u $push15=, sV($pop16) + tee_local $push14=, $1=, $pop15 + i32.const $push3=, 8 + i32.shr_u $push4=, $pop14, $pop3 + i32.add $push13=, $pop4, $0 + tee_local $push12=, $0=, $pop13 + i32.const $push11=, 8 + i32.shl $push5=, $pop12, $pop11 + i32.const $push6=, 256 + i32.and $push7=, $pop5, $pop6 + i32.const $push1=, 65279 + i32.and $push2=, $1, $pop1 + i32.or $push8=, $pop7, $pop2 + i32.store16 sV($pop0), $pop8 + i32.const $push9=, 1 + i32.and $push10=, $0, $pop9 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end131: + .size fn3V, .Lfunc_end131-fn3V + # -- End function + .section .text.testV,"ax",@progbits + .hidden testV # -- Begin function testV + .globl testV + .type testV,@function +testV: # @testV + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push105=, 0 + i32.const $push104=, 0 + i32.load $push0=, myrnd.s($pop104) + i32.const $push103=, 1103515245 + i32.mul $push1=, $pop0, $pop103 + i32.const $push102=, 12345 + i32.add $push101=, $pop1, $pop102 + tee_local $push100=, $1=, $pop101 + i32.const $push99=, 16 + i32.shr_u $push2=, $pop100, $pop99 + i32.store8 sV($pop105), $pop2 + i32.const $push98=, 0 + i32.const $push97=, 1103515245 + i32.mul $push3=, $1, $pop97 + i32.const $push96=, 12345 + i32.add $push95=, $pop3, $pop96 + tee_local $push94=, $1=, $pop95 + i32.const $push93=, 16 + i32.shr_u $push4=, $pop94, $pop93 + i32.store8 sV+1($pop98), $pop4 + i32.const $push92=, 0 + i32.const $push91=, 1103515245 + i32.mul $push5=, $1, $pop91 + i32.const $push90=, 12345 + i32.add $push89=, $pop5, $pop90 + tee_local $push88=, $1=, $pop89 + i32.const $push87=, 16 + i32.shr_u $push6=, $pop88, $pop87 + i32.store8 sV+2($pop92), $pop6 + i32.const $push86=, 0 + i32.const $push85=, 1103515245 + i32.mul $push7=, $1, $pop85 + i32.const $push84=, 12345 + i32.add $push83=, $pop7, $pop84 + tee_local $push82=, $1=, $pop83 + i32.const $push81=, 16 + i32.shr_u $push8=, $pop82, $pop81 + i32.store8 sV+3($pop86), $pop8 + i32.const $push80=, 0 + i32.const $push79=, 1103515245 + i32.mul $push11=, $1, $pop79 + i32.const $push78=, 12345 + i32.add $push77=, $pop11, $pop78 + tee_local $push76=, $2=, $pop77 + i32.const $push75=, 8 + i32.shr_u $push12=, $pop76, $pop75 + i32.const $push74=, 256 + i32.and $push13=, $pop12, $pop74 + i32.const $push73=, 0 + i32.load16_u $push9=, sV($pop73) + i32.const $push10=, -257 + i32.and $push72=, $pop9, $pop10 + tee_local $push71=, $1=, $pop72 + i32.or $push14=, $pop13, $pop71 + i32.store16 sV($pop80), $pop14 + i32.const $push70=, 0 + i32.const $push69=, 1103515245 + i32.mul $push15=, $2, $pop69 + i32.const $push68=, 12345 + i32.add $push67=, $pop15, $pop68 + tee_local $push66=, $0=, $pop67 + i32.store myrnd.s($pop70), $pop66 + block + i32.const $push65=, 16 + i32.shr_u $push64=, $0, $pop65 + tee_local $push63=, $3=, $pop64 + i32.const $push62=, 16 + i32.shr_u $push16=, $2, $pop62 + i32.add $push17=, $pop63, $pop16 + i32.const $push61=, 0 + i32.load $push18=, sV($pop61) + i32.const $push60=, 8 + i32.shr_u $push19=, $pop18, $pop60 + i32.add $push20=, $3, $pop19 + i32.xor $push21=, $pop17, $pop20 + i32.const $push59=, 1 + i32.and $push22=, $pop21, $pop59 + br_if 0, $pop22 # 0: down to label17 +# BB#1: # %if.end + i32.const $push128=, 0 + i32.const $push127=, 1103515245 + i32.mul $push23=, $0, $pop127 + i32.const $push126=, 12345 + i32.add $push125=, $pop23, $pop126 + tee_local $push124=, $0=, $pop125 + i32.const $push123=, 1103515245 + i32.mul $push24=, $pop124, $pop123 + i32.const $push122=, 12345 + i32.add $push121=, $pop24, $pop122 + tee_local $push120=, $2=, $pop121 + i32.store myrnd.s($pop128), $pop120 + i32.const $push119=, 0 + i32.const $push118=, 16 + i32.shr_u $push117=, $0, $pop118 + tee_local $push116=, $0=, $pop117 + i32.const $push25=, 2047 + i32.and $push115=, $pop116, $pop25 + tee_local $push114=, $3=, $pop115 + i32.const $push113=, 8 + i32.shl $push26=, $pop114, $pop113 + i32.const $push112=, 256 + i32.and $push27=, $pop26, $pop112 + i32.or $push111=, $pop27, $1 + tee_local $push110=, $4=, $pop111 + i32.store16 sV($pop119), $pop110 + i32.const $push28=, 65280 + i32.and $push29=, $4, $pop28 + i32.const $push109=, 8 + i32.shr_u $push108=, $pop29, $pop109 + tee_local $push107=, $4=, $pop108 + i32.xor $push30=, $pop107, $3 + i32.const $push106=, 1 + i32.and $push31=, $pop30, $pop106 + br_if 0, $pop31 # 0: down to label17 +# BB#2: # %lor.lhs.false89 + i32.const $push132=, 16 + i32.shr_u $push131=, $2, $pop132 + tee_local $push130=, $3=, $pop131 + i32.add $push33=, $pop130, $4 + i32.add $push32=, $3, $0 + i32.xor $push34=, $pop33, $pop32 + i32.const $push129=, 1 + i32.and $push35=, $pop34, $pop129 + br_if 0, $pop35 # 0: down to label17 +# BB#3: # %lor.lhs.false136 + i32.const $push40=, 0 + i32.const $push36=, 1103515245 + i32.mul $push37=, $2, $pop36 + i32.const $push38=, 12345 + i32.add $push148=, $pop37, $pop38 + tee_local $push147=, $2=, $pop148 + i32.const $push146=, 1103515245 + i32.mul $push39=, $pop147, $pop146 + i32.const $push145=, 12345 + i32.add $push144=, $pop39, $pop145 + tee_local $push143=, $0=, $pop144 + i32.store myrnd.s($pop40), $pop143 + i32.const $push142=, 0 + i32.const $push41=, 16 + i32.shr_u $push141=, $0, $pop41 + tee_local $push140=, $0=, $pop141 + i32.const $push42=, 2047 + i32.and $push43=, $pop140, $pop42 + i32.const $push44=, 8 + i32.shr_u $push45=, $2, $pop44 + i32.const $push46=, 256 + i32.and $push47=, $pop45, $pop46 + i32.or $push48=, $pop47, $1 + i32.const $push49=, 65280 + i32.and $push50=, $pop48, $pop49 + i32.const $push139=, 8 + i32.shr_u $push51=, $pop50, $pop139 + i32.add $push138=, $pop43, $pop51 + tee_local $push137=, $3=, $pop138 + i32.const $push136=, 8 + i32.shl $push52=, $pop137, $pop136 + i32.const $push135=, 256 + i32.and $push53=, $pop52, $pop135 + i32.or $push54=, $pop53, $1 + i32.store16 sV($pop142), $pop54 + i32.const $push134=, 16 + i32.shr_u $push55=, $2, $pop134 + i32.add $push56=, $0, $pop55 + i32.xor $push57=, $pop56, $3 + i32.const $push133=, 1 + i32.and $push58=, $pop57, $pop133 + br_if 0, $pop58 # 0: down to label17 +# BB#4: # %if.end142 + return +.LBB132_5: # %if.then + end_block # label17: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end132: + .size testV, .Lfunc_end132-testV + # -- End function + .section .text.retmeW,"ax",@progbits + .hidden retmeW # -- Begin function retmeW + .globl retmeW + .type retmeW,@function +retmeW: # @retmeW + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=0 + i64.store 0($0):p2align=0, $pop0 + i32.const $push1=, 16 + i32.add $push2=, $0, $pop1 + i32.const $push10=, 16 + i32.add $push3=, $1, $pop10 + i32.load $push4=, 0($pop3):p2align=0 + i32.store 0($pop2):p2align=0, $pop4 + i32.const $push5=, 8 + i32.add $push6=, $0, $pop5 + i32.const $push9=, 8 + i32.add $push7=, $1, $pop9 + i64.load $push8=, 0($pop7):p2align=0 + i64.store 0($pop6):p2align=0, $pop8 + # fallthrough-return + .endfunc +.Lfunc_end133: + .size retmeW, .Lfunc_end133-retmeW + # -- End function + .section .text.fn1W,"ax",@progbits + .hidden fn1W # -- Begin function fn1W + .globl fn1W + .type fn1W,@function +fn1W: # @fn1W + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sW+16($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end134: + .size fn1W, .Lfunc_end134-fn1W + # -- End function + .section .text.fn2W,"ax",@progbits + .hidden fn2W # -- Begin function fn2W + .globl fn2W + .type fn2W,@function +fn2W: # @fn2W + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sW+16($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end135: + .size fn2W, .Lfunc_end135-fn2W + # -- End function + .section .text.retitW,"ax",@progbits + .hidden retitW # -- Begin function retitW + .globl retitW + .type retitW,@function +retitW: # @retitW + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sW+16($pop0) + i32.const $push2=, 4095 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end136: + .size retitW, .Lfunc_end136-retitW + # -- End function + .section .text.fn3W,"ax",@progbits + .hidden fn3W # -- Begin function fn3W + .globl fn3W + .type fn3W,@function +fn3W: # @fn3W + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, sW+16($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 4095 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, -4096 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store sW+16($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end137: + .size fn3W, .Lfunc_end137-fn3W + # -- End function + .section .text.testW,"ax",@progbits + .hidden testW # -- Begin function testW + .globl testW + .type testW,@function +testW: # @testW + .local i32, i32 +# BB#0: # %if.end119 + i32.const $push0=, 0 + i32.const $push63=, 0 + i32.load $push1=, myrnd.s($pop63) + i32.const $push2=, 1670464429 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 2121308585 + i32.add $push62=, $pop3, $pop4 + tee_local $push61=, $0=, $pop62 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop61, $pop5 + i32.store8 sW+16($pop0), $pop6 + i32.const $push60=, 0 + i32.const $push7=, 1103515245 + i32.mul $push8=, $0, $pop7 + i32.const $push9=, 12345 + i32.add $push59=, $pop8, $pop9 + tee_local $push58=, $0=, $pop59 + i32.const $push57=, 16 + i32.shr_u $push10=, $pop58, $pop57 + i32.store8 sW+17($pop60), $pop10 + i32.const $push56=, 0 + i32.const $push55=, 1103515245 + i32.mul $push11=, $0, $pop55 + i32.const $push54=, 12345 + i32.add $push53=, $pop11, $pop54 + tee_local $push52=, $0=, $pop53 + i32.const $push51=, 16 + i32.shr_u $push12=, $pop52, $pop51 + i32.store8 sW+18($pop56), $pop12 + i32.const $push50=, 0 + i32.const $push49=, 1103515245 + i32.mul $push13=, $0, $pop49 + i32.const $push48=, 12345 + i32.add $push47=, $pop13, $pop48 + tee_local $push46=, $0=, $pop47 + i32.const $push45=, 16 + i32.shr_u $push14=, $pop46, $pop45 + i32.store8 sW+19($pop50), $pop14 + i32.const $push44=, 0 + i64.const $push15=, 4612055454334320640 + i64.store sW+8($pop44), $pop15 + i32.const $push43=, 0 + i64.const $push16=, 0 + i64.store sW($pop43), $pop16 + i32.const $push42=, 0 + i32.const $push17=, -341751747 + i32.mul $push18=, $0, $pop17 + i32.const $push19=, 229283573 + i32.add $push41=, $pop18, $pop19 + tee_local $push40=, $0=, $pop41 + i32.const $push39=, 1103515245 + i32.mul $push20=, $pop40, $pop39 + i32.const $push38=, 12345 + i32.add $push37=, $pop20, $pop38 + tee_local $push36=, $1=, $pop37 + i32.store myrnd.s($pop42), $pop36 + i32.const $push35=, 0 + i32.const $push34=, 16 + i32.shr_u $push24=, $1, $pop34 + i32.const $push22=, 2047 + i32.and $push25=, $pop24, $pop22 + i32.const $push33=, 16 + i32.shr_u $push21=, $0, $pop33 + i32.const $push32=, 2047 + i32.and $push23=, $pop21, $pop32 + i32.add $push26=, $pop25, $pop23 + i32.const $push31=, 0 + i32.load $push27=, sW+16($pop31) + i32.const $push28=, -4096 + i32.and $push29=, $pop27, $pop28 + i32.or $push30=, $pop26, $pop29 + i32.store sW+16($pop35), $pop30 + # fallthrough-return + .endfunc +.Lfunc_end138: + .size testW, .Lfunc_end138-testW + # -- End function + .section .text.retmeX,"ax",@progbits + .hidden retmeX # -- Begin function retmeX + .globl retmeX + .type retmeX,@function +retmeX: # @retmeX + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=0 + i64.store 0($0):p2align=0, $pop0 + i32.const $push1=, 16 + i32.add $push2=, $0, $pop1 + i32.const $push10=, 16 + i32.add $push3=, $1, $pop10 + i32.load $push4=, 0($pop3):p2align=0 + i32.store 0($pop2):p2align=0, $pop4 + i32.const $push5=, 8 + i32.add $push6=, $0, $pop5 + i32.const $push9=, 8 + i32.add $push7=, $1, $pop9 + i64.load $push8=, 0($pop7):p2align=0 + i64.store 0($pop6):p2align=0, $pop8 + # fallthrough-return + .endfunc +.Lfunc_end139: + .size retmeX, .Lfunc_end139-retmeX + # -- End function + .section .text.fn1X,"ax",@progbits + .hidden fn1X # -- Begin function fn1X + .globl fn1X + .type fn1X,@function +fn1X: # @fn1X + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sX($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end140: + .size fn1X, .Lfunc_end140-fn1X + # -- End function + .section .text.fn2X,"ax",@progbits + .hidden fn2X # -- Begin function fn2X + .globl fn2X + .type fn2X,@function +fn2X: # @fn2X + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sX($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end141: + .size fn2X, .Lfunc_end141-fn2X + # -- End function + .section .text.retitX,"ax",@progbits + .hidden retitX # -- Begin function retitX + .globl retitX + .type retitX,@function +retitX: # @retitX + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sX($pop0) + i32.const $push2=, 4095 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end142: + .size retitX, .Lfunc_end142-retitX + # -- End function + .section .text.fn3X,"ax",@progbits + .hidden fn3X # -- Begin function fn3X + .globl fn3X + .type fn3X,@function +fn3X: # @fn3X + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, sX($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 4095 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, -4096 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store sX($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end143: + .size fn3X, .Lfunc_end143-fn3X + # -- End function + .section .text.testX,"ax",@progbits + .hidden testX # -- Begin function testX + .globl testX + .type testX,@function +testX: # @testX + .local i32, i32 +# BB#0: # %if.end113 + i32.const $push0=, 0 + i32.const $push63=, 0 + i32.load $push1=, myrnd.s($pop63) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push62=, $pop3, $pop4 + tee_local $push61=, $0=, $pop62 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop61, $pop5 + i32.store8 sX($pop0), $pop6 + i32.const $push60=, 0 + i32.const $push59=, 1103515245 + i32.mul $push7=, $0, $pop59 + i32.const $push58=, 12345 + i32.add $push57=, $pop7, $pop58 + tee_local $push56=, $0=, $pop57 + i32.const $push55=, 16 + i32.shr_u $push8=, $pop56, $pop55 + i32.store8 sX+1($pop60), $pop8 + i32.const $push54=, 0 + i32.const $push53=, 1103515245 + i32.mul $push9=, $0, $pop53 + i32.const $push52=, 12345 + i32.add $push51=, $pop9, $pop52 + tee_local $push50=, $0=, $pop51 + i32.const $push49=, 16 + i32.shr_u $push10=, $pop50, $pop49 + i32.store8 sX+2($pop54), $pop10 + i32.const $push48=, 0 + i32.const $push47=, 1103515245 + i32.mul $push11=, $0, $pop47 + i32.const $push46=, 12345 + i32.add $push45=, $pop11, $pop46 + tee_local $push44=, $0=, $pop45 + i32.const $push43=, 16 + i32.shr_u $push12=, $pop44, $pop43 + i32.store8 sX+3($pop48), $pop12 + i32.const $push42=, 0 + i64.const $push13=, 4612055454334320640 + i64.store sX+12($pop42):p2align=2, $pop13 + i32.const $push41=, 0 + i64.const $push14=, 0 + i64.store sX+4($pop41):p2align=2, $pop14 + i32.const $push40=, 0 + i32.const $push15=, 424038781 + i32.mul $push16=, $0, $pop15 + i32.const $push17=, -804247707 + i32.add $push39=, $pop16, $pop17 + tee_local $push38=, $0=, $pop39 + i32.const $push37=, 1103515245 + i32.mul $push18=, $pop38, $pop37 + i32.const $push36=, 12345 + i32.add $push35=, $pop18, $pop36 + tee_local $push34=, $1=, $pop35 + i32.store myrnd.s($pop40), $pop34 + i32.const $push33=, 0 + i32.const $push32=, 16 + i32.shr_u $push22=, $1, $pop32 + i32.const $push20=, 2047 + i32.and $push23=, $pop22, $pop20 + i32.const $push31=, 16 + i32.shr_u $push19=, $0, $pop31 + i32.const $push30=, 2047 + i32.and $push21=, $pop19, $pop30 + i32.add $push24=, $pop23, $pop21 + i32.const $push29=, 0 + i32.load $push25=, sX($pop29) + i32.const $push26=, -4096 + i32.and $push27=, $pop25, $pop26 + i32.or $push28=, $pop24, $pop27 + i32.store sX($pop33), $pop28 + # fallthrough-return + .endfunc +.Lfunc_end144: + .size testX, .Lfunc_end144-testX + # -- End function + .section .text.retmeY,"ax",@progbits + .hidden retmeY # -- Begin function retmeY + .globl retmeY + .type retmeY,@function +retmeY: # @retmeY + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=0 + i64.store 0($0):p2align=0, $pop0 + i32.const $push1=, 16 + i32.add $push2=, $0, $pop1 + i32.const $push10=, 16 + i32.add $push3=, $1, $pop10 + i32.load $push4=, 0($pop3):p2align=0 + i32.store 0($pop2):p2align=0, $pop4 + i32.const $push5=, 8 + i32.add $push6=, $0, $pop5 + i32.const $push9=, 8 + i32.add $push7=, $1, $pop9 + i64.load $push8=, 0($pop7):p2align=0 + i64.store 0($pop6):p2align=0, $pop8 + # fallthrough-return + .endfunc +.Lfunc_end145: + .size retmeY, .Lfunc_end145-retmeY + # -- End function + .section .text.fn1Y,"ax",@progbits + .hidden fn1Y # -- Begin function fn1Y + .globl fn1Y + .type fn1Y,@function +fn1Y: # @fn1Y + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sY($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end146: + .size fn1Y, .Lfunc_end146-fn1Y + # -- End function + .section .text.fn2Y,"ax",@progbits + .hidden fn2Y # -- Begin function fn2Y + .globl fn2Y + .type fn2Y,@function +fn2Y: # @fn2Y + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sY($pop0) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 4095 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.rem_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end147: + .size fn2Y, .Lfunc_end147-fn2Y + # -- End function + .section .text.retitY,"ax",@progbits + .hidden retitY # -- Begin function retitY + .globl retitY + .type retitY,@function +retitY: # @retitY + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sY($pop0) + i32.const $push2=, 4095 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end148: + .size retitY, .Lfunc_end148-retitY + # -- End function + .section .text.fn3Y,"ax",@progbits + .hidden fn3Y # -- Begin function fn3Y + .globl fn3Y + .type fn3Y,@function +fn3Y: # @fn3Y + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, sY($pop10) + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop8, $0 + i32.const $push4=, 4095 + i32.and $push7=, $pop3, $pop4 + tee_local $push6=, $0=, $pop7 + i32.const $push1=, -4096 + i32.and $push2=, $1, $pop1 + i32.or $push5=, $pop6, $pop2 + i32.store sY($pop0), $pop5 + copy_local $push11=, $0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end149: + .size fn3Y, .Lfunc_end149-fn3Y + # -- End function + .section .text.testY,"ax",@progbits + .hidden testY # -- Begin function testY + .globl testY + .type testY,@function +testY: # @testY + .local i32, i32 +# BB#0: # %if.end113 + i32.const $push0=, 0 + i32.const $push63=, 0 + i32.load $push1=, myrnd.s($pop63) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push62=, $pop3, $pop4 + tee_local $push61=, $0=, $pop62 + i32.const $push5=, 16 + i32.shr_u $push6=, $pop61, $pop5 + i32.store8 sY($pop0), $pop6 + i32.const $push60=, 0 + i32.const $push59=, 1103515245 + i32.mul $push7=, $0, $pop59 + i32.const $push58=, 12345 + i32.add $push57=, $pop7, $pop58 + tee_local $push56=, $0=, $pop57 + i32.const $push55=, 16 + i32.shr_u $push8=, $pop56, $pop55 + i32.store8 sY+1($pop60), $pop8 + i32.const $push54=, 0 + i32.const $push53=, 1103515245 + i32.mul $push9=, $0, $pop53 + i32.const $push52=, 12345 + i32.add $push51=, $pop9, $pop52 + tee_local $push50=, $0=, $pop51 + i32.const $push49=, 16 + i32.shr_u $push10=, $pop50, $pop49 + i32.store8 sY+2($pop54), $pop10 + i32.const $push48=, 0 + i32.const $push47=, 1103515245 + i32.mul $push11=, $0, $pop47 + i32.const $push46=, 12345 + i32.add $push45=, $pop11, $pop46 + tee_local $push44=, $0=, $pop45 + i32.const $push43=, 16 + i32.shr_u $push12=, $pop44, $pop43 + i32.store8 sY+3($pop48), $pop12 + i32.const $push42=, 0 + i64.const $push13=, 4612055454334320640 + i64.store sY+12($pop42):p2align=2, $pop13 + i32.const $push41=, 0 + i64.const $push14=, 0 + i64.store sY+4($pop41):p2align=2, $pop14 + i32.const $push40=, 0 + i32.const $push15=, 424038781 + i32.mul $push16=, $0, $pop15 + i32.const $push17=, -804247707 + i32.add $push39=, $pop16, $pop17 + tee_local $push38=, $0=, $pop39 + i32.const $push37=, 1103515245 + i32.mul $push18=, $pop38, $pop37 + i32.const $push36=, 12345 + i32.add $push35=, $pop18, $pop36 + tee_local $push34=, $1=, $pop35 + i32.store myrnd.s($pop40), $pop34 + i32.const $push33=, 0 + i32.const $push32=, 16 + i32.shr_u $push22=, $1, $pop32 + i32.const $push20=, 2047 + i32.and $push23=, $pop22, $pop20 + i32.const $push31=, 16 + i32.shr_u $push19=, $0, $pop31 + i32.const $push30=, 2047 + i32.and $push21=, $pop19, $pop30 + i32.add $push24=, $pop23, $pop21 + i32.const $push29=, 0 + i32.load $push25=, sY($pop29) + i32.const $push26=, -4096 + i32.and $push27=, $pop25, $pop26 + i32.or $push28=, $pop24, $pop27 + i32.store sY($pop33), $pop28 + # fallthrough-return + .endfunc +.Lfunc_end150: + .size testY, .Lfunc_end150-testY + # -- End function + .section .text.retmeZ,"ax",@progbits + .hidden retmeZ # -- Begin function retmeZ + .globl retmeZ + .type retmeZ,@function +retmeZ: # @retmeZ + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=0 + i64.store 0($0):p2align=0, $pop0 + i32.const $push1=, 16 + i32.add $push2=, $0, $pop1 + i32.const $push10=, 16 + i32.add $push3=, $1, $pop10 + i32.load $push4=, 0($pop3):p2align=0 + i32.store 0($pop2):p2align=0, $pop4 + i32.const $push5=, 8 + i32.add $push6=, $0, $pop5 + i32.const $push9=, 8 + i32.add $push7=, $1, $pop9 + i64.load $push8=, 0($pop7):p2align=0 + i64.store 0($pop6):p2align=0, $pop8 + # fallthrough-return + .endfunc +.Lfunc_end151: + .size retmeZ, .Lfunc_end151-retmeZ + # -- End function + .section .text.fn1Z,"ax",@progbits + .hidden fn1Z # -- Begin function fn1Z + .globl fn1Z + .type fn1Z,@function +fn1Z: # @fn1Z + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.load $push3=, sZ+16($pop2) + i32.const $push0=, 20 + i32.shl $push1=, $0, $pop0 + i32.add $push4=, $pop3, $pop1 + i32.const $push6=, 20 + i32.shr_u $push5=, $pop4, $pop6 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end152: + .size fn1Z, .Lfunc_end152-fn1Z + # -- End function + .section .text.fn2Z,"ax",@progbits + .hidden fn2Z # -- Begin function fn2Z + .globl fn2Z + .type fn2Z,@function +fn2Z: # @fn2Z + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sZ+16($pop0) + i32.const $push2=, 20 + i32.shr_u $push3=, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 4095 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 15 + i32.rem_u $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end153: + .size fn2Z, .Lfunc_end153-fn2Z + # -- End function + .section .text.retitZ,"ax",@progbits + .hidden retitZ # -- Begin function retitZ + .globl retitZ + .type retitZ,@function +retitZ: # @retitZ + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, sZ+16($pop0) + i32.const $push2=, 20 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end154: + .size retitZ, .Lfunc_end154-retitZ + # -- End function + .section .text.fn3Z,"ax",@progbits + .hidden fn3Z # -- Begin function fn3Z + .globl fn3Z + .type fn3Z,@function +fn3Z: # @fn3Z + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push8=, 0 + i32.load $push3=, sZ+16($pop8) + i32.const $push0=, 20 + i32.shl $push1=, $0, $pop0 + i32.add $push7=, $pop3, $pop1 + tee_local $push6=, $0=, $pop7 + i32.store sZ+16($pop2), $pop6 + i32.const $push5=, 20 + i32.shr_u $push4=, $0, $pop5 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end155: + .size fn3Z, .Lfunc_end155-fn3Z + # -- End function + .section .text.testZ,"ax",@progbits + .hidden testZ # -- Begin function testZ + .globl testZ + .type testZ,@function +testZ: # @testZ + .local i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push90=, 0 + i32.const $push89=, 0 + i32.load $push0=, myrnd.s($pop89) + i32.const $push1=, 1670464429 + i32.mul $push2=, $pop0, $pop1 + i32.const $push3=, 2121308585 + i32.add $push88=, $pop2, $pop3 + tee_local $push87=, $1=, $pop88 + i32.const $push86=, 16 + i32.shr_u $push4=, $pop87, $pop86 + i32.store8 sZ+16($pop90), $pop4 + i32.const $push85=, 0 + i32.const $push84=, 1103515245 + i32.mul $push5=, $1, $pop84 + i32.const $push83=, 12345 + i32.add $push82=, $pop5, $pop83 + tee_local $push81=, $1=, $pop82 + i32.const $push80=, 16 + i32.shr_u $push6=, $pop81, $pop80 + i32.store8 sZ+17($pop85), $pop6 + i32.const $push79=, 0 + i32.const $push78=, 1103515245 + i32.mul $push7=, $1, $pop78 + i32.const $push77=, 12345 + i32.add $push76=, $pop7, $pop77 + tee_local $push75=, $1=, $pop76 + i32.const $push74=, 16 + i32.shr_u $push8=, $pop75, $pop74 + i32.store8 sZ+18($pop79), $pop8 + i32.const $push73=, 0 + i32.const $push72=, 1103515245 + i32.mul $push9=, $1, $pop72 + i32.const $push71=, 12345 + i32.add $push70=, $pop9, $pop71 + tee_local $push69=, $1=, $pop70 + i32.const $push68=, 16 + i32.shr_u $push10=, $pop69, $pop68 + i32.store8 sZ+19($pop73), $pop10 + i32.const $push67=, 0 + i64.const $push11=, 4612055454334320640 + i64.store sZ+8($pop67), $pop11 + i32.const $push66=, 0 + i64.const $push12=, 0 + i64.store sZ($pop66), $pop12 + i32.const $push65=, 0 + i32.const $push64=, 1103515245 + i32.mul $push13=, $1, $pop64 + i32.const $push63=, 12345 + i32.add $push62=, $pop13, $pop63 + tee_local $push61=, $3=, $pop62 + i32.const $push60=, 1103515245 + i32.mul $push14=, $pop61, $pop60 + i32.const $push59=, 12345 + i32.add $push58=, $pop14, $pop59 + tee_local $push57=, $1=, $pop58 + i32.store myrnd.s($pop65), $pop57 + i32.const $push56=, 0 + i32.const $push55=, 16 + i32.shr_u $push15=, $3, $pop55 + i32.const $push54=, 2047 + i32.and $push53=, $pop15, $pop54 + tee_local $push52=, $3=, $pop53 + i32.const $push51=, 20 + i32.shl $push16=, $pop52, $pop51 + i32.const $push50=, 0 + i32.load $push49=, sZ+16($pop50) + tee_local $push48=, $0=, $pop49 + i32.const $push47=, 1048575 + i32.and $push46=, $pop48, $pop47 + tee_local $push45=, $2=, $pop46 + i32.or $push44=, $pop16, $pop45 + tee_local $push43=, $4=, $pop44 + i32.store sZ+16($pop56), $pop43 + block + i32.const $push42=, 16 + i32.shr_u $push17=, $1, $pop42 + i32.const $push41=, 2047 + i32.and $push40=, $pop17, $pop41 + tee_local $push39=, $5=, $pop40 + i32.add $push18=, $pop39, $3 + i32.const $push38=, 20 + i32.shl $push19=, $5, $pop38 + i32.add $push20=, $pop19, $4 + i32.const $push37=, 20 + i32.shr_u $push21=, $pop20, $pop37 + i32.ne $push22=, $pop18, $pop21 + br_if 0, $pop22 # 0: down to label18 +# BB#1: # %if.end80 + i32.const $push111=, 0 + i32.const $push24=, -2139243339 + i32.mul $push25=, $1, $pop24 + i32.const $push26=, -1492899873 + i32.add $push110=, $pop25, $pop26 + tee_local $push109=, $1=, $pop110 + i32.const $push108=, 1103515245 + i32.mul $push27=, $pop109, $pop108 + i32.const $push107=, 12345 + i32.add $push106=, $pop27, $pop107 + tee_local $push105=, $3=, $pop106 + i32.store myrnd.s($pop111), $pop105 + i32.const $push104=, 0 + i32.const $push103=, 16 + i32.shr_u $push31=, $3, $pop103 + i32.const $push102=, 2047 + i32.and $push101=, $pop31, $pop102 + tee_local $push100=, $3=, $pop101 + i32.const $push99=, 20 + i32.shl $push32=, $pop100, $pop99 + i32.const $push98=, 16 + i32.shr_u $push28=, $1, $pop98 + i32.const $push97=, 2047 + i32.and $push96=, $pop28, $pop97 + tee_local $push95=, $4=, $pop96 + i32.const $push94=, 20 + i32.shl $push29=, $pop95, $pop94 + i32.or $push30=, $pop29, $2 + i32.add $push93=, $pop32, $pop30 + tee_local $push92=, $1=, $pop93 + i32.store sZ+16($pop104), $pop92 + i32.add $push33=, $3, $4 + i32.const $push91=, 20 + i32.shr_u $push34=, $1, $pop91 + i32.ne $push35=, $pop33, $pop34 + br_if 0, $pop35 # 0: down to label18 +# BB#2: # %if.end80 + i32.xor $push36=, $1, $0 + i32.const $push112=, 1048575 + i32.and $push23=, $pop36, $pop112 + br_if 0, $pop23 # 0: down to label18 +# BB#3: # %if.end121 + return +.LBB156_4: # %if.then + end_block # label18: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end156: + .size testZ, .Lfunc_end156-testZ + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call testA@FUNCTION + call testB@FUNCTION + call testC@FUNCTION + call testD@FUNCTION + call testE@FUNCTION + call testF@FUNCTION + call testG@FUNCTION + call testH@FUNCTION + call testI@FUNCTION + call testJ@FUNCTION + call testK@FUNCTION + call testL@FUNCTION + call testM@FUNCTION + call testN@FUNCTION + call testO@FUNCTION + call testP@FUNCTION + call testQ@FUNCTION + call testR@FUNCTION + call testS@FUNCTION + call testT@FUNCTION + call testU@FUNCTION + call testV@FUNCTION + call testW@FUNCTION + call testX@FUNCTION + call testY@FUNCTION + call testZ@FUNCTION + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end157: + .size main, .Lfunc_end157-main + # -- End function + .type myrnd.s,@object # @myrnd.s + .section .data.myrnd.s,"aw",@progbits + .p2align 2 +myrnd.s: + .int32 1388815473 # 0x52c7a471 + .size myrnd.s, 4 + + .hidden sA # @sA + .type sA,@object + .section .bss.sA,"aw",@nobits + .globl sA + .p2align 1 +sA: + .skip 2 + .size sA, 2 + + .hidden sB # @sB + .type sB,@object + .section .bss.sB,"aw",@nobits + .globl sB + .p2align 1 +sB: + .skip 6 + .size sB, 6 + + .hidden sC # @sC + .type sC,@object + .section .bss.sC,"aw",@nobits + .globl sC + .p2align 2 +sC: + .skip 6 + .size sC, 6 + + .hidden sD # @sD + .type sD,@object + .section .bss.sD,"aw",@nobits + .globl sD + .p2align 3 +sD: + .skip 8 + .size sD, 8 + + .hidden sE # @sE + .type sE,@object + .section .bss.sE,"aw",@nobits + .globl sE + .p2align 3 +sE: + .skip 16 + .size sE, 16 + + .hidden sF # @sF + .type sF,@object + .section .bss.sF,"aw",@nobits + .globl sF + .p2align 3 +sF: + .skip 16 + .size sF, 16 + + .hidden sG # @sG + .type sG,@object + .section .bss.sG,"aw",@nobits + .globl sG +sG: + .skip 9 + .size sG, 9 + + .hidden sH # @sH + .type sH,@object + .section .bss.sH,"aw",@nobits + .globl sH + .p2align 1 +sH: + .skip 10 + .size sH, 10 + + .hidden sI # @sI + .type sI,@object + .section .bss.sI,"aw",@nobits + .globl sI +sI: + .skip 9 + .size sI, 9 + + .hidden sJ # @sJ + .type sJ,@object + .section .bss.sJ,"aw",@nobits + .globl sJ + .p2align 2 +sJ: + .skip 4 + .size sJ, 4 + + .hidden sK # @sK + .type sK,@object + .section .bss.sK,"aw",@nobits + .globl sK + .p2align 2 +sK: + .skip 4 + .size sK, 4 + + .hidden sL # @sL + .type sL,@object + .section .bss.sL,"aw",@nobits + .globl sL + .p2align 3 +sL: + .skip 8 + .size sL, 8 + + .hidden sM # @sM + .type sM,@object + .section .bss.sM,"aw",@nobits + .globl sM + .p2align 3 +sM: + .skip 8 + .size sM, 8 + + .hidden sN # @sN + .type sN,@object + .section .bss.sN,"aw",@nobits + .globl sN + .p2align 3 +sN: + .skip 8 + .size sN, 8 + + .hidden sO # @sO + .type sO,@object + .section .bss.sO,"aw",@nobits + .globl sO + .p2align 3 +sO: + .skip 16 + .size sO, 16 + + .hidden sP # @sP + .type sP,@object + .section .bss.sP,"aw",@nobits + .globl sP + .p2align 3 +sP: + .skip 16 + .size sP, 16 + + .hidden sQ # @sQ + .type sQ,@object + .section .bss.sQ,"aw",@nobits + .globl sQ + .p2align 1 +sQ: + .skip 10 + .size sQ, 10 + + .hidden sR # @sR + .type sR,@object + .section .bss.sR,"aw",@nobits + .globl sR + .p2align 1 +sR: + .skip 10 + .size sR, 10 + + .hidden sS # @sS + .type sS,@object + .section .bss.sS,"aw",@nobits + .globl sS + .p2align 1 +sS: + .skip 10 + .size sS, 10 + + .hidden sT # @sT + .type sT,@object + .section .bss.sT,"aw",@nobits + .globl sT + .p2align 2 +sT: + .skip 4 + .size sT, 4 + + .hidden sU # @sU + .type sU,@object + .section .bss.sU,"aw",@nobits + .globl sU + .p2align 1 +sU: + .skip 10 + .size sU, 10 + + .hidden sV # @sV + .type sV,@object + .section .bss.sV,"aw",@nobits + .globl sV + .p2align 2 +sV: + .skip 4 + .size sV, 4 + + .hidden sW # @sW + .type sW,@object + .section .bss.sW,"aw",@nobits + .globl sW + .p2align 4 +sW: + .skip 20 + .size sW, 20 + + .hidden sX # @sX + .type sX,@object + .section .bss.sX,"aw",@nobits + .globl sX + .p2align 2 +sX: + .skip 20 + .size sX, 20 + + .hidden sY # @sY + .type sY,@object + .section .bss.sY,"aw",@nobits + .globl sY + .p2align 2 +sY: + .skip 20 + .size sY, 20 + + .hidden sZ # @sZ + .type sZ,@object + .section .bss.sZ,"aw",@nobits + .globl sZ + .p2align 4 +sZ: + .skip 20 + .size sZ, 20 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20040805-1.c.s b/src/binaryen/test/torture-s/20040805-1.c.s new file mode 100644 index 0000000000..35ccc3a35a --- /dev/null +++ b/src/binaryen/test/torture-s/20040805-1.c.s @@ -0,0 +1,79 @@ + .text + .file "20040805-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.call $push1=, foo@FUNCTION + i32.const $push0=, 102 + i32.ne $push2=, $pop1, $pop0 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.foo,"ax",@progbits + .type foo,@function # -- Begin function foo +foo: # @foo + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push7=, 0 + i32.load $push6=, a($pop7) + tee_local $push5=, $0=, $pop6 + i32.store a+4($pop0), $pop5 + i32.const $push1=, 100 + i32.call $drop=, bar@FUNCTION, $pop1 + i32.call $push2=, bar@FUNCTION, $0 + i32.const $push4=, 100 + i32.add $push3=, $pop2, $pop4 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.bar,"ax",@progbits + .type bar,@function # -- Begin function bar +bar: # @bar + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, a($pop4) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store a($pop0), $pop3 + copy_local $push5=, $0 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end2: + .size bar, .Lfunc_end2-bar + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 2 # 0x2 + .int32 3 # 0x3 + .size a, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20040811-1.c.s b/src/binaryen/test/torture-s/20040811-1.c.s new file mode 100644 index 0000000000..7b2b881f7a --- /dev/null +++ b/src/binaryen/test/torture-s/20040811-1.c.s @@ -0,0 +1,64 @@ + .text + .file "20040811-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.load $push9=, __stack_pointer($pop7) + tee_local $push8=, $3=, $pop9 + copy_local $drop=, $pop8 + i32.const $2=, 0 +.LBB0_1: # %lab + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push24=, 1000 + i32.rem_s $push0=, $2, $pop24 + i32.const $push23=, 2 + i32.shl $push22=, $pop0, $pop23 + tee_local $push21=, $0=, $pop22 + i32.const $push20=, 19 + i32.add $push1=, $pop21, $pop20 + i32.const $push19=, -16 + i32.and $push2=, $pop1, $pop19 + i32.sub $push18=, $3, $pop2 + tee_local $push17=, $1=, $pop18 + copy_local $drop=, $pop17 + i32.const $push16=, 1 + i32.store 0($1), $pop16 + i32.const $push15=, 0 + i32.store p($pop15), $1 + i32.add $push4=, $1, $0 + i32.const $push14=, 2 + i32.store 0($pop4), $pop14 + copy_local $push3=, $3 + copy_local $3=, $pop3 + i32.const $push13=, 1 + i32.add $push12=, $2, $pop13 + tee_local $push11=, $2=, $pop12 + i32.const $push10=, 1000000 + i32.ne $push5=, $pop11, $pop10 + br_if 0, $pop5 # 0: up to label0 +# BB#2: # %cleanup3 + end_loop + i32.const $push6=, 0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden p # @p + .type p,@object + .section .bss.p,"aw",@nobits + .globl p + .p2align 2 +p: + .int32 0 + .size p, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20040820-1.c.s b/src/binaryen/test/torture-s/20040820-1.c.s new file mode 100644 index 0000000000..be364d1635 --- /dev/null +++ b/src/binaryen/test/torture-s/20040820-1.c.s @@ -0,0 +1,71 @@ + .text + .file "20040820-1.c" + .section .text.check,"ax",@progbits + .hidden check # -- Begin function check + .globl check + .type check,@function +check: # @check + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size check, .Lfunc_end0-check + # -- End function + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32, i32 +# BB#0: # %entry + block + i32.const $push1=, 2 + i32.const $push0=, 0 + i32.select $push2=, $pop1, $pop0, $1 + i32.const $push7=, 0 + i32.ne $push3=, $0, $pop7 + i32.or $push4=, $pop2, $pop3 + i32.const $push5=, 1 + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label1 +# BB#1: # %check.exit + return +.LBB1_2: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size test, .Lfunc_end1-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 1 + i32.const $push0=, 0 + call test@FUNCTION, $pop1, $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20040823-1.c.s b/src/binaryen/test/torture-s/20040823-1.c.s new file mode 100644 index 0000000000..3c6b31b430 --- /dev/null +++ b/src/binaryen/test/torture-s/20040823-1.c.s @@ -0,0 +1,65 @@ + .text + .file "20040823-1.c" + .section .text.bla,"ax",@progbits + .hidden bla # -- Begin function bla + .globl bla + .type bla,@function +bla: # @bla +# BB#0: # %entry + block + i32.const $push2=, 0 + i32.load $push0=, pwarn($pop2) + i32.load $push1=, 0($pop0) + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.then + call abort@FUNCTION + unreachable +.LBB0_2: # %if.end + end_block # label0: + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable + .endfunc +.Lfunc_end0: + .size bla, .Lfunc_end0-bla + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push9=, $pop2, $pop4 + tee_local $push8=, $0=, $pop9 + i32.store __stack_pointer($pop5), $pop8 + i32.const $push0=, 1 + i32.store 12($0), $pop0 + i32.const $push1=, 0 + i32.const $push6=, 12 + i32.add $push7=, $0, $pop6 + i32.store pwarn($pop1), $pop7 + call bla@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden pwarn # @pwarn + .type pwarn,@object + .section .bss.pwarn,"aw",@nobits + .globl pwarn + .p2align 2 +pwarn: + .int32 0 + .size pwarn, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20040831-1.c.s b/src/binaryen/test/torture-s/20040831-1.c.s new file mode 100644 index 0000000000..15e48615da --- /dev/null +++ b/src/binaryen/test/torture-s/20040831-1.c.s @@ -0,0 +1,19 @@ + .text + .file "20040831-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20040917-1.c.s b/src/binaryen/test/torture-s/20040917-1.c.s new file mode 100644 index 0000000000..68a8bdaea2 --- /dev/null +++ b/src/binaryen/test/torture-s/20040917-1.c.s @@ -0,0 +1,54 @@ + .text + .file "20040917-1.c" + .section .text.not_inlinable,"ax",@progbits + .hidden not_inlinable # -- Begin function not_inlinable + .globl not_inlinable + .type not_inlinable,@function +not_inlinable: # @not_inlinable +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, -10 + i32.store test_var($pop1), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size not_inlinable, .Lfunc_end0-not_inlinable + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push0=, 10 + i32.store test_var($pop5), $pop0 + call not_inlinable@FUNCTION + block + i32.const $push4=, 0 + i32.load $push1=, test_var($pop4) + i32.const $push3=, 10 + i32.eq $push2=, $pop1, $pop3 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 0 + return $pop6 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type test_var,@object # @test_var + .section .bss.test_var,"aw",@nobits + .p2align 2 +test_var: + .int32 0 # 0x0 + .size test_var, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20041011-1.c.s b/src/binaryen/test/torture-s/20041011-1.c.s new file mode 100644 index 0000000000..94fc8b5997 --- /dev/null +++ b/src/binaryen/test/torture-s/20041011-1.c.s @@ -0,0 +1,1977 @@ + .text + .file "20041011-1.c" + .section .text.t1,"ax",@progbits + .hidden t1 # -- Begin function t1 + .globl t1 + .type t1,@function +t1: # @t1 + .param i32, i64 + .result i64 + .local i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.eqz $push69=, $0 + br_if 0, $pop69 # 0: down to label0 +# BB#1: # %while.body.lr.ph + i32.const $push5=, -1 + i32.add $push0=, $0, $pop5 + i64.extend_u/i32 $push1=, $pop0 + i64.const $push2=, 11 + i64.shl $2=, $pop1, $pop2 +.LBB0_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push68=, 0 + i32.load $3=, gvol+4($pop68) + i32.const $push67=, 0 + i32.load $4=, gvol+8($pop67) + i32.const $push66=, 0 + i32.load $5=, gvol+12($pop66) + i32.const $push65=, 0 + i32.load $6=, gvol+16($pop65) + i32.const $push64=, 0 + i32.load $7=, gvol+20($pop64) + i32.const $push63=, 0 + i32.load $8=, gvol+24($pop63) + i32.const $push62=, 0 + i32.load $9=, gvol+28($pop62) + i32.const $push61=, 0 + i32.load $10=, gvol+32($pop61) + i32.const $push60=, 0 + i32.load $11=, gvol+36($pop60) + i32.const $push59=, 0 + i32.load $12=, gvol+40($pop59) + i32.const $push58=, 0 + i32.load $13=, gvol+44($pop58) + i32.const $push57=, 0 + i32.load $14=, gvol+48($pop57) + i32.const $push56=, 0 + i32.load $15=, gvol+52($pop56) + i32.const $push55=, 0 + i32.load $16=, gvol+56($pop55) + i32.const $push54=, 0 + i32.load $17=, gvol+60($pop54) + i32.const $push53=, 0 + i32.load $18=, gvol+64($pop53) + i32.const $push52=, 0 + i32.load $19=, gvol+68($pop52) + i32.const $push51=, 0 + i32.load $20=, gvol+72($pop51) + i32.const $push50=, 0 + i32.load $21=, gvol+76($pop50) + i32.const $push49=, 0 + i32.load $22=, gvol+80($pop49) + i32.const $push48=, 0 + i32.load $23=, gvol+84($pop48) + i32.const $push47=, 0 + i32.load $24=, gvol+88($pop47) + i32.const $push46=, 0 + i32.load $25=, gvol+92($pop46) + i32.const $push45=, 0 + i32.load $26=, gvol+96($pop45) + i32.const $push44=, 0 + i32.load $27=, gvol+100($pop44) + i32.const $push43=, 0 + i32.load $28=, gvol+104($pop43) + i32.const $push42=, 0 + i32.load $29=, gvol+108($pop42) + i32.const $push41=, 0 + i32.load $30=, gvol+112($pop41) + i32.const $push40=, 0 + i32.load $31=, gvol+116($pop40) + i32.const $push39=, 0 + i32.load $32=, gvol+120($pop39) + i32.const $push38=, 0 + i32.store gvol+4($pop38), $3 + i32.const $push37=, 0 + i32.store gvol+8($pop37), $4 + i32.const $push36=, 0 + i32.store gvol+12($pop36), $5 + i32.const $push35=, 0 + i32.store gvol+16($pop35), $6 + i32.const $push34=, 0 + i32.store gvol+20($pop34), $7 + i32.const $push33=, 0 + i32.store gvol+24($pop33), $8 + i32.const $push32=, 0 + i32.store gvol+28($pop32), $9 + i32.const $push31=, 0 + i32.store gvol+32($pop31), $10 + i32.const $push30=, 0 + i32.store gvol+36($pop30), $11 + i32.const $push29=, 0 + i32.store gvol+40($pop29), $12 + i32.const $push28=, 0 + i32.store gvol+44($pop28), $13 + i32.const $push27=, 0 + i32.store gvol+48($pop27), $14 + i32.const $push26=, 0 + i32.store gvol+52($pop26), $15 + i32.const $push25=, 0 + i32.store gvol+56($pop25), $16 + i32.const $push24=, 0 + i32.store gvol+60($pop24), $17 + i32.const $push23=, 0 + i32.store gvol+64($pop23), $18 + i32.const $push22=, 0 + i32.store gvol+68($pop22), $19 + i32.const $push21=, 0 + i32.store gvol+72($pop21), $20 + i32.const $push20=, 0 + i32.store gvol+76($pop20), $21 + i32.const $push19=, 0 + i32.store gvol+80($pop19), $22 + i32.const $push18=, 0 + i32.store gvol+84($pop18), $23 + i32.const $push17=, 0 + i32.store gvol+88($pop17), $24 + i32.const $push16=, 0 + i32.store gvol+92($pop16), $25 + i32.const $push15=, 0 + i32.store gvol+96($pop15), $26 + i32.const $push14=, 0 + i32.store gvol+100($pop14), $27 + i32.const $push13=, 0 + i32.store gvol+104($pop13), $28 + i32.const $push12=, 0 + i32.store gvol+108($pop12), $29 + i32.const $push11=, 0 + i32.store gvol+112($pop11), $30 + i32.const $push10=, 0 + i32.store gvol+116($pop10), $31 + i32.const $push9=, 0 + i32.store gvol+120($pop9), $32 + i32.const $push8=, -1 + i32.add $push7=, $0, $pop8 + tee_local $push6=, $0=, $pop7 + br_if 0, $pop6 # 0: up to label1 +# BB#3: # %while.end.loopexit + end_loop + i64.const $push3=, -2048 + i64.add $push4=, $1, $pop3 + i64.sub $1=, $pop4, $2 +.LBB0_4: # %while.end + end_block # label0: + copy_local $push70=, $1 + # fallthrough-return: $pop70 + .endfunc +.Lfunc_end0: + .size t1, .Lfunc_end0-t1 + # -- End function + .section .text.t2,"ax",@progbits + .hidden t2 # -- Begin function t2 + .globl t2 + .type t2,@function +t2: # @t2 + .param i32, i64 + .result i64 + .local i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.eqz $push69=, $0 + br_if 0, $pop69 # 0: down to label2 +# BB#1: # %while.body.lr.ph + i32.const $push4=, -1 + i32.add $push0=, $0, $pop4 + i64.extend_u/i32 $2=, $pop0 +.LBB1_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.const $push67=, 0 + i32.load $3=, gvol+4($pop67) + i32.const $push66=, 0 + i32.load $4=, gvol+8($pop66) + i32.const $push65=, 0 + i32.load $5=, gvol+12($pop65) + i32.const $push64=, 0 + i32.load $6=, gvol+16($pop64) + i32.const $push63=, 0 + i32.load $7=, gvol+20($pop63) + i32.const $push62=, 0 + i32.load $8=, gvol+24($pop62) + i32.const $push61=, 0 + i32.load $9=, gvol+28($pop61) + i32.const $push60=, 0 + i32.load $10=, gvol+32($pop60) + i32.const $push59=, 0 + i32.load $11=, gvol+36($pop59) + i32.const $push58=, 0 + i32.load $12=, gvol+40($pop58) + i32.const $push57=, 0 + i32.load $13=, gvol+44($pop57) + i32.const $push56=, 0 + i32.load $14=, gvol+48($pop56) + i32.const $push55=, 0 + i32.load $15=, gvol+52($pop55) + i32.const $push54=, 0 + i32.load $16=, gvol+56($pop54) + i32.const $push53=, 0 + i32.load $17=, gvol+60($pop53) + i32.const $push52=, 0 + i32.load $18=, gvol+64($pop52) + i32.const $push51=, 0 + i32.load $19=, gvol+68($pop51) + i32.const $push50=, 0 + i32.load $20=, gvol+72($pop50) + i32.const $push49=, 0 + i32.load $21=, gvol+76($pop49) + i32.const $push48=, 0 + i32.load $22=, gvol+80($pop48) + i32.const $push47=, 0 + i32.load $23=, gvol+84($pop47) + i32.const $push46=, 0 + i32.load $24=, gvol+88($pop46) + i32.const $push45=, 0 + i32.load $25=, gvol+92($pop45) + i32.const $push44=, 0 + i32.load $26=, gvol+96($pop44) + i32.const $push43=, 0 + i32.load $27=, gvol+100($pop43) + i32.const $push42=, 0 + i32.load $28=, gvol+104($pop42) + i32.const $push41=, 0 + i32.load $29=, gvol+108($pop41) + i32.const $push40=, 0 + i32.load $30=, gvol+112($pop40) + i32.const $push39=, 0 + i32.load $31=, gvol+116($pop39) + i32.const $push38=, 0 + i32.load $32=, gvol+120($pop38) + i32.const $push37=, 0 + i32.store gvol+4($pop37), $3 + i32.const $push36=, 0 + i32.store gvol+8($pop36), $4 + i32.const $push35=, 0 + i32.store gvol+12($pop35), $5 + i32.const $push34=, 0 + i32.store gvol+16($pop34), $6 + i32.const $push33=, 0 + i32.store gvol+20($pop33), $7 + i32.const $push32=, 0 + i32.store gvol+24($pop32), $8 + i32.const $push31=, 0 + i32.store gvol+28($pop31), $9 + i32.const $push30=, 0 + i32.store gvol+32($pop30), $10 + i32.const $push29=, 0 + i32.store gvol+36($pop29), $11 + i32.const $push28=, 0 + i32.store gvol+40($pop28), $12 + i32.const $push27=, 0 + i32.store gvol+44($pop27), $13 + i32.const $push26=, 0 + i32.store gvol+48($pop26), $14 + i32.const $push25=, 0 + i32.store gvol+52($pop25), $15 + i32.const $push24=, 0 + i32.store gvol+56($pop24), $16 + i32.const $push23=, 0 + i32.store gvol+60($pop23), $17 + i32.const $push22=, 0 + i32.store gvol+64($pop22), $18 + i32.const $push21=, 0 + i32.store gvol+68($pop21), $19 + i32.const $push20=, 0 + i32.store gvol+72($pop20), $20 + i32.const $push19=, 0 + i32.store gvol+76($pop19), $21 + i32.const $push18=, 0 + i32.store gvol+80($pop18), $22 + i32.const $push17=, 0 + i32.store gvol+84($pop17), $23 + i32.const $push16=, 0 + i32.store gvol+88($pop16), $24 + i32.const $push15=, 0 + i32.store gvol+92($pop15), $25 + i32.const $push14=, 0 + i32.store gvol+96($pop14), $26 + i32.const $push13=, 0 + i32.store gvol+100($pop13), $27 + i32.const $push12=, 0 + i32.store gvol+104($pop12), $28 + i32.const $push11=, 0 + i32.store gvol+108($pop11), $29 + i32.const $push10=, 0 + i32.store gvol+112($pop10), $30 + i32.const $push9=, 0 + i32.store gvol+116($pop9), $31 + i32.const $push8=, 0 + i32.store gvol+120($pop8), $32 + i32.const $push7=, -1 + i32.add $push6=, $0, $pop7 + tee_local $push5=, $0=, $pop6 + br_if 0, $pop5 # 0: up to label3 +# BB#3: # %while.end.loopexit + end_loop + i64.const $push1=, -513 + i64.mul $push2=, $2, $pop1 + i64.add $push3=, $1, $pop2 + i64.const $push68=, -513 + i64.add $1=, $pop3, $pop68 +.LBB1_4: # %while.end + end_block # label2: + copy_local $push70=, $1 + # fallthrough-return: $pop70 + .endfunc +.Lfunc_end1: + .size t2, .Lfunc_end1-t2 + # -- End function + .section .text.t3,"ax",@progbits + .hidden t3 # -- Begin function t3 + .globl t3 + .type t3,@function +t3: # @t3 + .param i32, i64 + .result i64 + .local i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.eqz $push69=, $0 + br_if 0, $pop69 # 0: down to label4 +# BB#1: # %while.body.lr.ph + i32.const $push5=, -1 + i32.add $push0=, $0, $pop5 + i64.extend_u/i32 $push1=, $pop0 + i64.const $push2=, 9 + i64.shl $2=, $pop1, $pop2 +.LBB2_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label5: + i32.const $push68=, 0 + i32.load $3=, gvol+4($pop68) + i32.const $push67=, 0 + i32.load $4=, gvol+8($pop67) + i32.const $push66=, 0 + i32.load $5=, gvol+12($pop66) + i32.const $push65=, 0 + i32.load $6=, gvol+16($pop65) + i32.const $push64=, 0 + i32.load $7=, gvol+20($pop64) + i32.const $push63=, 0 + i32.load $8=, gvol+24($pop63) + i32.const $push62=, 0 + i32.load $9=, gvol+28($pop62) + i32.const $push61=, 0 + i32.load $10=, gvol+32($pop61) + i32.const $push60=, 0 + i32.load $11=, gvol+36($pop60) + i32.const $push59=, 0 + i32.load $12=, gvol+40($pop59) + i32.const $push58=, 0 + i32.load $13=, gvol+44($pop58) + i32.const $push57=, 0 + i32.load $14=, gvol+48($pop57) + i32.const $push56=, 0 + i32.load $15=, gvol+52($pop56) + i32.const $push55=, 0 + i32.load $16=, gvol+56($pop55) + i32.const $push54=, 0 + i32.load $17=, gvol+60($pop54) + i32.const $push53=, 0 + i32.load $18=, gvol+64($pop53) + i32.const $push52=, 0 + i32.load $19=, gvol+68($pop52) + i32.const $push51=, 0 + i32.load $20=, gvol+72($pop51) + i32.const $push50=, 0 + i32.load $21=, gvol+76($pop50) + i32.const $push49=, 0 + i32.load $22=, gvol+80($pop49) + i32.const $push48=, 0 + i32.load $23=, gvol+84($pop48) + i32.const $push47=, 0 + i32.load $24=, gvol+88($pop47) + i32.const $push46=, 0 + i32.load $25=, gvol+92($pop46) + i32.const $push45=, 0 + i32.load $26=, gvol+96($pop45) + i32.const $push44=, 0 + i32.load $27=, gvol+100($pop44) + i32.const $push43=, 0 + i32.load $28=, gvol+104($pop43) + i32.const $push42=, 0 + i32.load $29=, gvol+108($pop42) + i32.const $push41=, 0 + i32.load $30=, gvol+112($pop41) + i32.const $push40=, 0 + i32.load $31=, gvol+116($pop40) + i32.const $push39=, 0 + i32.load $32=, gvol+120($pop39) + i32.const $push38=, 0 + i32.store gvol+4($pop38), $3 + i32.const $push37=, 0 + i32.store gvol+8($pop37), $4 + i32.const $push36=, 0 + i32.store gvol+12($pop36), $5 + i32.const $push35=, 0 + i32.store gvol+16($pop35), $6 + i32.const $push34=, 0 + i32.store gvol+20($pop34), $7 + i32.const $push33=, 0 + i32.store gvol+24($pop33), $8 + i32.const $push32=, 0 + i32.store gvol+28($pop32), $9 + i32.const $push31=, 0 + i32.store gvol+32($pop31), $10 + i32.const $push30=, 0 + i32.store gvol+36($pop30), $11 + i32.const $push29=, 0 + i32.store gvol+40($pop29), $12 + i32.const $push28=, 0 + i32.store gvol+44($pop28), $13 + i32.const $push27=, 0 + i32.store gvol+48($pop27), $14 + i32.const $push26=, 0 + i32.store gvol+52($pop26), $15 + i32.const $push25=, 0 + i32.store gvol+56($pop25), $16 + i32.const $push24=, 0 + i32.store gvol+60($pop24), $17 + i32.const $push23=, 0 + i32.store gvol+64($pop23), $18 + i32.const $push22=, 0 + i32.store gvol+68($pop22), $19 + i32.const $push21=, 0 + i32.store gvol+72($pop21), $20 + i32.const $push20=, 0 + i32.store gvol+76($pop20), $21 + i32.const $push19=, 0 + i32.store gvol+80($pop19), $22 + i32.const $push18=, 0 + i32.store gvol+84($pop18), $23 + i32.const $push17=, 0 + i32.store gvol+88($pop17), $24 + i32.const $push16=, 0 + i32.store gvol+92($pop16), $25 + i32.const $push15=, 0 + i32.store gvol+96($pop15), $26 + i32.const $push14=, 0 + i32.store gvol+100($pop14), $27 + i32.const $push13=, 0 + i32.store gvol+104($pop13), $28 + i32.const $push12=, 0 + i32.store gvol+108($pop12), $29 + i32.const $push11=, 0 + i32.store gvol+112($pop11), $30 + i32.const $push10=, 0 + i32.store gvol+116($pop10), $31 + i32.const $push9=, 0 + i32.store gvol+120($pop9), $32 + i32.const $push8=, -1 + i32.add $push7=, $0, $pop8 + tee_local $push6=, $0=, $pop7 + br_if 0, $pop6 # 0: up to label5 +# BB#3: # %while.end.loopexit + end_loop + i64.const $push3=, -512 + i64.add $push4=, $1, $pop3 + i64.sub $1=, $pop4, $2 +.LBB2_4: # %while.end + end_block # label4: + copy_local $push70=, $1 + # fallthrough-return: $pop70 + .endfunc +.Lfunc_end2: + .size t3, .Lfunc_end2-t3 + # -- End function + .section .text.t4,"ax",@progbits + .hidden t4 # -- Begin function t4 + .globl t4 + .type t4,@function +t4: # @t4 + .param i32, i64 + .result i64 + .local i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.eqz $push69=, $0 + br_if 0, $pop69 # 0: down to label6 +# BB#1: # %while.body.lr.ph + i32.const $push4=, -1 + i32.add $push0=, $0, $pop4 + i64.extend_u/i32 $2=, $pop0 +.LBB3_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label7: + i32.const $push67=, 0 + i32.load $3=, gvol+4($pop67) + i32.const $push66=, 0 + i32.load $4=, gvol+8($pop66) + i32.const $push65=, 0 + i32.load $5=, gvol+12($pop65) + i32.const $push64=, 0 + i32.load $6=, gvol+16($pop64) + i32.const $push63=, 0 + i32.load $7=, gvol+20($pop63) + i32.const $push62=, 0 + i32.load $8=, gvol+24($pop62) + i32.const $push61=, 0 + i32.load $9=, gvol+28($pop61) + i32.const $push60=, 0 + i32.load $10=, gvol+32($pop60) + i32.const $push59=, 0 + i32.load $11=, gvol+36($pop59) + i32.const $push58=, 0 + i32.load $12=, gvol+40($pop58) + i32.const $push57=, 0 + i32.load $13=, gvol+44($pop57) + i32.const $push56=, 0 + i32.load $14=, gvol+48($pop56) + i32.const $push55=, 0 + i32.load $15=, gvol+52($pop55) + i32.const $push54=, 0 + i32.load $16=, gvol+56($pop54) + i32.const $push53=, 0 + i32.load $17=, gvol+60($pop53) + i32.const $push52=, 0 + i32.load $18=, gvol+64($pop52) + i32.const $push51=, 0 + i32.load $19=, gvol+68($pop51) + i32.const $push50=, 0 + i32.load $20=, gvol+72($pop50) + i32.const $push49=, 0 + i32.load $21=, gvol+76($pop49) + i32.const $push48=, 0 + i32.load $22=, gvol+80($pop48) + i32.const $push47=, 0 + i32.load $23=, gvol+84($pop47) + i32.const $push46=, 0 + i32.load $24=, gvol+88($pop46) + i32.const $push45=, 0 + i32.load $25=, gvol+92($pop45) + i32.const $push44=, 0 + i32.load $26=, gvol+96($pop44) + i32.const $push43=, 0 + i32.load $27=, gvol+100($pop43) + i32.const $push42=, 0 + i32.load $28=, gvol+104($pop42) + i32.const $push41=, 0 + i32.load $29=, gvol+108($pop41) + i32.const $push40=, 0 + i32.load $30=, gvol+112($pop40) + i32.const $push39=, 0 + i32.load $31=, gvol+116($pop39) + i32.const $push38=, 0 + i32.load $32=, gvol+120($pop38) + i32.const $push37=, 0 + i32.store gvol+4($pop37), $3 + i32.const $push36=, 0 + i32.store gvol+8($pop36), $4 + i32.const $push35=, 0 + i32.store gvol+12($pop35), $5 + i32.const $push34=, 0 + i32.store gvol+16($pop34), $6 + i32.const $push33=, 0 + i32.store gvol+20($pop33), $7 + i32.const $push32=, 0 + i32.store gvol+24($pop32), $8 + i32.const $push31=, 0 + i32.store gvol+28($pop31), $9 + i32.const $push30=, 0 + i32.store gvol+32($pop30), $10 + i32.const $push29=, 0 + i32.store gvol+36($pop29), $11 + i32.const $push28=, 0 + i32.store gvol+40($pop28), $12 + i32.const $push27=, 0 + i32.store gvol+44($pop27), $13 + i32.const $push26=, 0 + i32.store gvol+48($pop26), $14 + i32.const $push25=, 0 + i32.store gvol+52($pop25), $15 + i32.const $push24=, 0 + i32.store gvol+56($pop24), $16 + i32.const $push23=, 0 + i32.store gvol+60($pop23), $17 + i32.const $push22=, 0 + i32.store gvol+64($pop22), $18 + i32.const $push21=, 0 + i32.store gvol+68($pop21), $19 + i32.const $push20=, 0 + i32.store gvol+72($pop20), $20 + i32.const $push19=, 0 + i32.store gvol+76($pop19), $21 + i32.const $push18=, 0 + i32.store gvol+80($pop18), $22 + i32.const $push17=, 0 + i32.store gvol+84($pop17), $23 + i32.const $push16=, 0 + i32.store gvol+88($pop16), $24 + i32.const $push15=, 0 + i32.store gvol+92($pop15), $25 + i32.const $push14=, 0 + i32.store gvol+96($pop14), $26 + i32.const $push13=, 0 + i32.store gvol+100($pop13), $27 + i32.const $push12=, 0 + i32.store gvol+104($pop12), $28 + i32.const $push11=, 0 + i32.store gvol+108($pop11), $29 + i32.const $push10=, 0 + i32.store gvol+112($pop10), $30 + i32.const $push9=, 0 + i32.store gvol+116($pop9), $31 + i32.const $push8=, 0 + i32.store gvol+120($pop8), $32 + i32.const $push7=, -1 + i32.add $push6=, $0, $pop7 + tee_local $push5=, $0=, $pop6 + br_if 0, $pop5 # 0: up to label7 +# BB#3: # %while.end.loopexit + end_loop + i64.const $push1=, -511 + i64.mul $push2=, $2, $pop1 + i64.add $push3=, $1, $pop2 + i64.const $push68=, -511 + i64.add $1=, $pop3, $pop68 +.LBB3_4: # %while.end + end_block # label6: + copy_local $push70=, $1 + # fallthrough-return: $pop70 + .endfunc +.Lfunc_end3: + .size t4, .Lfunc_end3-t4 + # -- End function + .section .text.t5,"ax",@progbits + .hidden t5 # -- Begin function t5 + .globl t5 + .type t5,@function +t5: # @t5 + .param i32, i64 + .result i64 + .local i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.eqz $push67=, $0 + br_if 0, $pop67 # 0: down to label8 +# BB#1: # %while.body.lr.ph + i32.const $push3=, -1 + i32.add $push0=, $0, $pop3 + i64.extend_u/i32 $2=, $pop0 +.LBB4_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label9: + i32.const $push66=, 0 + i32.load $3=, gvol+4($pop66) + i32.const $push65=, 0 + i32.load $4=, gvol+8($pop65) + i32.const $push64=, 0 + i32.load $5=, gvol+12($pop64) + i32.const $push63=, 0 + i32.load $6=, gvol+16($pop63) + i32.const $push62=, 0 + i32.load $7=, gvol+20($pop62) + i32.const $push61=, 0 + i32.load $8=, gvol+24($pop61) + i32.const $push60=, 0 + i32.load $9=, gvol+28($pop60) + i32.const $push59=, 0 + i32.load $10=, gvol+32($pop59) + i32.const $push58=, 0 + i32.load $11=, gvol+36($pop58) + i32.const $push57=, 0 + i32.load $12=, gvol+40($pop57) + i32.const $push56=, 0 + i32.load $13=, gvol+44($pop56) + i32.const $push55=, 0 + i32.load $14=, gvol+48($pop55) + i32.const $push54=, 0 + i32.load $15=, gvol+52($pop54) + i32.const $push53=, 0 + i32.load $16=, gvol+56($pop53) + i32.const $push52=, 0 + i32.load $17=, gvol+60($pop52) + i32.const $push51=, 0 + i32.load $18=, gvol+64($pop51) + i32.const $push50=, 0 + i32.load $19=, gvol+68($pop50) + i32.const $push49=, 0 + i32.load $20=, gvol+72($pop49) + i32.const $push48=, 0 + i32.load $21=, gvol+76($pop48) + i32.const $push47=, 0 + i32.load $22=, gvol+80($pop47) + i32.const $push46=, 0 + i32.load $23=, gvol+84($pop46) + i32.const $push45=, 0 + i32.load $24=, gvol+88($pop45) + i32.const $push44=, 0 + i32.load $25=, gvol+92($pop44) + i32.const $push43=, 0 + i32.load $26=, gvol+96($pop43) + i32.const $push42=, 0 + i32.load $27=, gvol+100($pop42) + i32.const $push41=, 0 + i32.load $28=, gvol+104($pop41) + i32.const $push40=, 0 + i32.load $29=, gvol+108($pop40) + i32.const $push39=, 0 + i32.load $30=, gvol+112($pop39) + i32.const $push38=, 0 + i32.load $31=, gvol+116($pop38) + i32.const $push37=, 0 + i32.load $32=, gvol+120($pop37) + i32.const $push36=, 0 + i32.store gvol+4($pop36), $3 + i32.const $push35=, 0 + i32.store gvol+8($pop35), $4 + i32.const $push34=, 0 + i32.store gvol+12($pop34), $5 + i32.const $push33=, 0 + i32.store gvol+16($pop33), $6 + i32.const $push32=, 0 + i32.store gvol+20($pop32), $7 + i32.const $push31=, 0 + i32.store gvol+24($pop31), $8 + i32.const $push30=, 0 + i32.store gvol+28($pop30), $9 + i32.const $push29=, 0 + i32.store gvol+32($pop29), $10 + i32.const $push28=, 0 + i32.store gvol+36($pop28), $11 + i32.const $push27=, 0 + i32.store gvol+40($pop27), $12 + i32.const $push26=, 0 + i32.store gvol+44($pop26), $13 + i32.const $push25=, 0 + i32.store gvol+48($pop25), $14 + i32.const $push24=, 0 + i32.store gvol+52($pop24), $15 + i32.const $push23=, 0 + i32.store gvol+56($pop23), $16 + i32.const $push22=, 0 + i32.store gvol+60($pop22), $17 + i32.const $push21=, 0 + i32.store gvol+64($pop21), $18 + i32.const $push20=, 0 + i32.store gvol+68($pop20), $19 + i32.const $push19=, 0 + i32.store gvol+72($pop19), $20 + i32.const $push18=, 0 + i32.store gvol+76($pop18), $21 + i32.const $push17=, 0 + i32.store gvol+80($pop17), $22 + i32.const $push16=, 0 + i32.store gvol+84($pop16), $23 + i32.const $push15=, 0 + i32.store gvol+88($pop15), $24 + i32.const $push14=, 0 + i32.store gvol+92($pop14), $25 + i32.const $push13=, 0 + i32.store gvol+96($pop13), $26 + i32.const $push12=, 0 + i32.store gvol+100($pop12), $27 + i32.const $push11=, 0 + i32.store gvol+104($pop11), $28 + i32.const $push10=, 0 + i32.store gvol+108($pop10), $29 + i32.const $push9=, 0 + i32.store gvol+112($pop9), $30 + i32.const $push8=, 0 + i32.store gvol+116($pop8), $31 + i32.const $push7=, 0 + i32.store gvol+120($pop7), $32 + i32.const $push6=, -1 + i32.add $push5=, $0, $pop6 + tee_local $push4=, $0=, $pop5 + br_if 0, $pop4 # 0: up to label9 +# BB#3: # %while.end.loopexit + end_loop + i64.const $push1=, -1 + i64.add $push2=, $1, $pop1 + i64.sub $1=, $pop2, $2 +.LBB4_4: # %while.end + end_block # label8: + copy_local $push68=, $1 + # fallthrough-return: $pop68 + .endfunc +.Lfunc_end4: + .size t5, .Lfunc_end4-t5 + # -- End function + .section .text.t6,"ax",@progbits + .hidden t6 # -- Begin function t6 + .globl t6 + .type t6,@function +t6: # @t6 + .param i32, i64 + .result i64 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.eqz $push67=, $0 + br_if 0, $pop67 # 0: down to label10 +# BB#1: # %while.body.lr.ph + i32.const $push3=, -1 + i32.add $push0=, $0, $pop3 + i64.extend_u/i32 $push1=, $pop0 + i64.add $1=, $pop1, $1 +.LBB5_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label11: + i32.const $push66=, 0 + i32.load $2=, gvol+4($pop66) + i32.const $push65=, 0 + i32.load $3=, gvol+8($pop65) + i32.const $push64=, 0 + i32.load $4=, gvol+12($pop64) + i32.const $push63=, 0 + i32.load $5=, gvol+16($pop63) + i32.const $push62=, 0 + i32.load $6=, gvol+20($pop62) + i32.const $push61=, 0 + i32.load $7=, gvol+24($pop61) + i32.const $push60=, 0 + i32.load $8=, gvol+28($pop60) + i32.const $push59=, 0 + i32.load $9=, gvol+32($pop59) + i32.const $push58=, 0 + i32.load $10=, gvol+36($pop58) + i32.const $push57=, 0 + i32.load $11=, gvol+40($pop57) + i32.const $push56=, 0 + i32.load $12=, gvol+44($pop56) + i32.const $push55=, 0 + i32.load $13=, gvol+48($pop55) + i32.const $push54=, 0 + i32.load $14=, gvol+52($pop54) + i32.const $push53=, 0 + i32.load $15=, gvol+56($pop53) + i32.const $push52=, 0 + i32.load $16=, gvol+60($pop52) + i32.const $push51=, 0 + i32.load $17=, gvol+64($pop51) + i32.const $push50=, 0 + i32.load $18=, gvol+68($pop50) + i32.const $push49=, 0 + i32.load $19=, gvol+72($pop49) + i32.const $push48=, 0 + i32.load $20=, gvol+76($pop48) + i32.const $push47=, 0 + i32.load $21=, gvol+80($pop47) + i32.const $push46=, 0 + i32.load $22=, gvol+84($pop46) + i32.const $push45=, 0 + i32.load $23=, gvol+88($pop45) + i32.const $push44=, 0 + i32.load $24=, gvol+92($pop44) + i32.const $push43=, 0 + i32.load $25=, gvol+96($pop43) + i32.const $push42=, 0 + i32.load $26=, gvol+100($pop42) + i32.const $push41=, 0 + i32.load $27=, gvol+104($pop41) + i32.const $push40=, 0 + i32.load $28=, gvol+108($pop40) + i32.const $push39=, 0 + i32.load $29=, gvol+112($pop39) + i32.const $push38=, 0 + i32.load $30=, gvol+116($pop38) + i32.const $push37=, 0 + i32.load $31=, gvol+120($pop37) + i32.const $push36=, 0 + i32.store gvol+4($pop36), $2 + i32.const $push35=, 0 + i32.store gvol+8($pop35), $3 + i32.const $push34=, 0 + i32.store gvol+12($pop34), $4 + i32.const $push33=, 0 + i32.store gvol+16($pop33), $5 + i32.const $push32=, 0 + i32.store gvol+20($pop32), $6 + i32.const $push31=, 0 + i32.store gvol+24($pop31), $7 + i32.const $push30=, 0 + i32.store gvol+28($pop30), $8 + i32.const $push29=, 0 + i32.store gvol+32($pop29), $9 + i32.const $push28=, 0 + i32.store gvol+36($pop28), $10 + i32.const $push27=, 0 + i32.store gvol+40($pop27), $11 + i32.const $push26=, 0 + i32.store gvol+44($pop26), $12 + i32.const $push25=, 0 + i32.store gvol+48($pop25), $13 + i32.const $push24=, 0 + i32.store gvol+52($pop24), $14 + i32.const $push23=, 0 + i32.store gvol+56($pop23), $15 + i32.const $push22=, 0 + i32.store gvol+60($pop22), $16 + i32.const $push21=, 0 + i32.store gvol+64($pop21), $17 + i32.const $push20=, 0 + i32.store gvol+68($pop20), $18 + i32.const $push19=, 0 + i32.store gvol+72($pop19), $19 + i32.const $push18=, 0 + i32.store gvol+76($pop18), $20 + i32.const $push17=, 0 + i32.store gvol+80($pop17), $21 + i32.const $push16=, 0 + i32.store gvol+84($pop16), $22 + i32.const $push15=, 0 + i32.store gvol+88($pop15), $23 + i32.const $push14=, 0 + i32.store gvol+92($pop14), $24 + i32.const $push13=, 0 + i32.store gvol+96($pop13), $25 + i32.const $push12=, 0 + i32.store gvol+100($pop12), $26 + i32.const $push11=, 0 + i32.store gvol+104($pop11), $27 + i32.const $push10=, 0 + i32.store gvol+108($pop10), $28 + i32.const $push9=, 0 + i32.store gvol+112($pop9), $29 + i32.const $push8=, 0 + i32.store gvol+116($pop8), $30 + i32.const $push7=, 0 + i32.store gvol+120($pop7), $31 + i32.const $push6=, -1 + i32.add $push5=, $0, $pop6 + tee_local $push4=, $0=, $pop5 + br_if 0, $pop4 # 0: up to label11 +# BB#3: # %while.end.loopexit + end_loop + i64.const $push2=, 1 + i64.add $1=, $1, $pop2 +.LBB5_4: # %while.end + end_block # label10: + copy_local $push68=, $1 + # fallthrough-return: $pop68 + .endfunc +.Lfunc_end5: + .size t6, .Lfunc_end5-t6 + # -- End function + .section .text.t7,"ax",@progbits + .hidden t7 # -- Begin function t7 + .globl t7 + .type t7,@function +t7: # @t7 + .param i32, i64 + .result i64 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.eqz $push69=, $0 + br_if 0, $pop69 # 0: down to label12 +# BB#1: # %while.body.lr.ph + i32.const $push5=, -1 + i32.add $push0=, $0, $pop5 + i64.extend_u/i32 $push1=, $pop0 + i64.const $push2=, 511 + i64.mul $push3=, $pop1, $pop2 + i64.add $1=, $pop3, $1 +.LBB6_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label13: + i32.const $push68=, 0 + i32.load $2=, gvol+4($pop68) + i32.const $push67=, 0 + i32.load $3=, gvol+8($pop67) + i32.const $push66=, 0 + i32.load $4=, gvol+12($pop66) + i32.const $push65=, 0 + i32.load $5=, gvol+16($pop65) + i32.const $push64=, 0 + i32.load $6=, gvol+20($pop64) + i32.const $push63=, 0 + i32.load $7=, gvol+24($pop63) + i32.const $push62=, 0 + i32.load $8=, gvol+28($pop62) + i32.const $push61=, 0 + i32.load $9=, gvol+32($pop61) + i32.const $push60=, 0 + i32.load $10=, gvol+36($pop60) + i32.const $push59=, 0 + i32.load $11=, gvol+40($pop59) + i32.const $push58=, 0 + i32.load $12=, gvol+44($pop58) + i32.const $push57=, 0 + i32.load $13=, gvol+48($pop57) + i32.const $push56=, 0 + i32.load $14=, gvol+52($pop56) + i32.const $push55=, 0 + i32.load $15=, gvol+56($pop55) + i32.const $push54=, 0 + i32.load $16=, gvol+60($pop54) + i32.const $push53=, 0 + i32.load $17=, gvol+64($pop53) + i32.const $push52=, 0 + i32.load $18=, gvol+68($pop52) + i32.const $push51=, 0 + i32.load $19=, gvol+72($pop51) + i32.const $push50=, 0 + i32.load $20=, gvol+76($pop50) + i32.const $push49=, 0 + i32.load $21=, gvol+80($pop49) + i32.const $push48=, 0 + i32.load $22=, gvol+84($pop48) + i32.const $push47=, 0 + i32.load $23=, gvol+88($pop47) + i32.const $push46=, 0 + i32.load $24=, gvol+92($pop46) + i32.const $push45=, 0 + i32.load $25=, gvol+96($pop45) + i32.const $push44=, 0 + i32.load $26=, gvol+100($pop44) + i32.const $push43=, 0 + i32.load $27=, gvol+104($pop43) + i32.const $push42=, 0 + i32.load $28=, gvol+108($pop42) + i32.const $push41=, 0 + i32.load $29=, gvol+112($pop41) + i32.const $push40=, 0 + i32.load $30=, gvol+116($pop40) + i32.const $push39=, 0 + i32.load $31=, gvol+120($pop39) + i32.const $push38=, 0 + i32.store gvol+4($pop38), $2 + i32.const $push37=, 0 + i32.store gvol+8($pop37), $3 + i32.const $push36=, 0 + i32.store gvol+12($pop36), $4 + i32.const $push35=, 0 + i32.store gvol+16($pop35), $5 + i32.const $push34=, 0 + i32.store gvol+20($pop34), $6 + i32.const $push33=, 0 + i32.store gvol+24($pop33), $7 + i32.const $push32=, 0 + i32.store gvol+28($pop32), $8 + i32.const $push31=, 0 + i32.store gvol+32($pop31), $9 + i32.const $push30=, 0 + i32.store gvol+36($pop30), $10 + i32.const $push29=, 0 + i32.store gvol+40($pop29), $11 + i32.const $push28=, 0 + i32.store gvol+44($pop28), $12 + i32.const $push27=, 0 + i32.store gvol+48($pop27), $13 + i32.const $push26=, 0 + i32.store gvol+52($pop26), $14 + i32.const $push25=, 0 + i32.store gvol+56($pop25), $15 + i32.const $push24=, 0 + i32.store gvol+60($pop24), $16 + i32.const $push23=, 0 + i32.store gvol+64($pop23), $17 + i32.const $push22=, 0 + i32.store gvol+68($pop22), $18 + i32.const $push21=, 0 + i32.store gvol+72($pop21), $19 + i32.const $push20=, 0 + i32.store gvol+76($pop20), $20 + i32.const $push19=, 0 + i32.store gvol+80($pop19), $21 + i32.const $push18=, 0 + i32.store gvol+84($pop18), $22 + i32.const $push17=, 0 + i32.store gvol+88($pop17), $23 + i32.const $push16=, 0 + i32.store gvol+92($pop16), $24 + i32.const $push15=, 0 + i32.store gvol+96($pop15), $25 + i32.const $push14=, 0 + i32.store gvol+100($pop14), $26 + i32.const $push13=, 0 + i32.store gvol+104($pop13), $27 + i32.const $push12=, 0 + i32.store gvol+108($pop12), $28 + i32.const $push11=, 0 + i32.store gvol+112($pop11), $29 + i32.const $push10=, 0 + i32.store gvol+116($pop10), $30 + i32.const $push9=, 0 + i32.store gvol+120($pop9), $31 + i32.const $push8=, -1 + i32.add $push7=, $0, $pop8 + tee_local $push6=, $0=, $pop7 + br_if 0, $pop6 # 0: up to label13 +# BB#3: # %while.end.loopexit + end_loop + i64.const $push4=, 511 + i64.add $1=, $1, $pop4 +.LBB6_4: # %while.end + end_block # label12: + copy_local $push70=, $1 + # fallthrough-return: $pop70 + .endfunc +.Lfunc_end6: + .size t7, .Lfunc_end6-t7 + # -- End function + .section .text.t8,"ax",@progbits + .hidden t8 # -- Begin function t8 + .globl t8 + .type t8,@function +t8: # @t8 + .param i32, i64 + .result i64 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.eqz $push69=, $0 + br_if 0, $pop69 # 0: down to label14 +# BB#1: # %while.body.lr.ph + i32.const $push5=, -1 + i32.add $push0=, $0, $pop5 + i64.extend_u/i32 $push1=, $pop0 + i64.const $push2=, 9 + i64.shl $push3=, $pop1, $pop2 + i64.add $1=, $pop3, $1 +.LBB7_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label15: + i32.const $push68=, 0 + i32.load $2=, gvol+4($pop68) + i32.const $push67=, 0 + i32.load $3=, gvol+8($pop67) + i32.const $push66=, 0 + i32.load $4=, gvol+12($pop66) + i32.const $push65=, 0 + i32.load $5=, gvol+16($pop65) + i32.const $push64=, 0 + i32.load $6=, gvol+20($pop64) + i32.const $push63=, 0 + i32.load $7=, gvol+24($pop63) + i32.const $push62=, 0 + i32.load $8=, gvol+28($pop62) + i32.const $push61=, 0 + i32.load $9=, gvol+32($pop61) + i32.const $push60=, 0 + i32.load $10=, gvol+36($pop60) + i32.const $push59=, 0 + i32.load $11=, gvol+40($pop59) + i32.const $push58=, 0 + i32.load $12=, gvol+44($pop58) + i32.const $push57=, 0 + i32.load $13=, gvol+48($pop57) + i32.const $push56=, 0 + i32.load $14=, gvol+52($pop56) + i32.const $push55=, 0 + i32.load $15=, gvol+56($pop55) + i32.const $push54=, 0 + i32.load $16=, gvol+60($pop54) + i32.const $push53=, 0 + i32.load $17=, gvol+64($pop53) + i32.const $push52=, 0 + i32.load $18=, gvol+68($pop52) + i32.const $push51=, 0 + i32.load $19=, gvol+72($pop51) + i32.const $push50=, 0 + i32.load $20=, gvol+76($pop50) + i32.const $push49=, 0 + i32.load $21=, gvol+80($pop49) + i32.const $push48=, 0 + i32.load $22=, gvol+84($pop48) + i32.const $push47=, 0 + i32.load $23=, gvol+88($pop47) + i32.const $push46=, 0 + i32.load $24=, gvol+92($pop46) + i32.const $push45=, 0 + i32.load $25=, gvol+96($pop45) + i32.const $push44=, 0 + i32.load $26=, gvol+100($pop44) + i32.const $push43=, 0 + i32.load $27=, gvol+104($pop43) + i32.const $push42=, 0 + i32.load $28=, gvol+108($pop42) + i32.const $push41=, 0 + i32.load $29=, gvol+112($pop41) + i32.const $push40=, 0 + i32.load $30=, gvol+116($pop40) + i32.const $push39=, 0 + i32.load $31=, gvol+120($pop39) + i32.const $push38=, 0 + i32.store gvol+4($pop38), $2 + i32.const $push37=, 0 + i32.store gvol+8($pop37), $3 + i32.const $push36=, 0 + i32.store gvol+12($pop36), $4 + i32.const $push35=, 0 + i32.store gvol+16($pop35), $5 + i32.const $push34=, 0 + i32.store gvol+20($pop34), $6 + i32.const $push33=, 0 + i32.store gvol+24($pop33), $7 + i32.const $push32=, 0 + i32.store gvol+28($pop32), $8 + i32.const $push31=, 0 + i32.store gvol+32($pop31), $9 + i32.const $push30=, 0 + i32.store gvol+36($pop30), $10 + i32.const $push29=, 0 + i32.store gvol+40($pop29), $11 + i32.const $push28=, 0 + i32.store gvol+44($pop28), $12 + i32.const $push27=, 0 + i32.store gvol+48($pop27), $13 + i32.const $push26=, 0 + i32.store gvol+52($pop26), $14 + i32.const $push25=, 0 + i32.store gvol+56($pop25), $15 + i32.const $push24=, 0 + i32.store gvol+60($pop24), $16 + i32.const $push23=, 0 + i32.store gvol+64($pop23), $17 + i32.const $push22=, 0 + i32.store gvol+68($pop22), $18 + i32.const $push21=, 0 + i32.store gvol+72($pop21), $19 + i32.const $push20=, 0 + i32.store gvol+76($pop20), $20 + i32.const $push19=, 0 + i32.store gvol+80($pop19), $21 + i32.const $push18=, 0 + i32.store gvol+84($pop18), $22 + i32.const $push17=, 0 + i32.store gvol+88($pop17), $23 + i32.const $push16=, 0 + i32.store gvol+92($pop16), $24 + i32.const $push15=, 0 + i32.store gvol+96($pop15), $25 + i32.const $push14=, 0 + i32.store gvol+100($pop14), $26 + i32.const $push13=, 0 + i32.store gvol+104($pop13), $27 + i32.const $push12=, 0 + i32.store gvol+108($pop12), $28 + i32.const $push11=, 0 + i32.store gvol+112($pop11), $29 + i32.const $push10=, 0 + i32.store gvol+116($pop10), $30 + i32.const $push9=, 0 + i32.store gvol+120($pop9), $31 + i32.const $push8=, -1 + i32.add $push7=, $0, $pop8 + tee_local $push6=, $0=, $pop7 + br_if 0, $pop6 # 0: up to label15 +# BB#3: # %while.end.loopexit + end_loop + i64.const $push4=, 512 + i64.add $1=, $1, $pop4 +.LBB7_4: # %while.end + end_block # label14: + copy_local $push70=, $1 + # fallthrough-return: $pop70 + .endfunc +.Lfunc_end7: + .size t8, .Lfunc_end7-t8 + # -- End function + .section .text.t9,"ax",@progbits + .hidden t9 # -- Begin function t9 + .globl t9 + .type t9,@function +t9: # @t9 + .param i32, i64 + .result i64 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.eqz $push69=, $0 + br_if 0, $pop69 # 0: down to label16 +# BB#1: # %while.body.lr.ph + i32.const $push5=, -1 + i32.add $push0=, $0, $pop5 + i64.extend_u/i32 $push1=, $pop0 + i64.const $push2=, 513 + i64.mul $push3=, $pop1, $pop2 + i64.add $1=, $pop3, $1 +.LBB8_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label17: + i32.const $push68=, 0 + i32.load $2=, gvol+4($pop68) + i32.const $push67=, 0 + i32.load $3=, gvol+8($pop67) + i32.const $push66=, 0 + i32.load $4=, gvol+12($pop66) + i32.const $push65=, 0 + i32.load $5=, gvol+16($pop65) + i32.const $push64=, 0 + i32.load $6=, gvol+20($pop64) + i32.const $push63=, 0 + i32.load $7=, gvol+24($pop63) + i32.const $push62=, 0 + i32.load $8=, gvol+28($pop62) + i32.const $push61=, 0 + i32.load $9=, gvol+32($pop61) + i32.const $push60=, 0 + i32.load $10=, gvol+36($pop60) + i32.const $push59=, 0 + i32.load $11=, gvol+40($pop59) + i32.const $push58=, 0 + i32.load $12=, gvol+44($pop58) + i32.const $push57=, 0 + i32.load $13=, gvol+48($pop57) + i32.const $push56=, 0 + i32.load $14=, gvol+52($pop56) + i32.const $push55=, 0 + i32.load $15=, gvol+56($pop55) + i32.const $push54=, 0 + i32.load $16=, gvol+60($pop54) + i32.const $push53=, 0 + i32.load $17=, gvol+64($pop53) + i32.const $push52=, 0 + i32.load $18=, gvol+68($pop52) + i32.const $push51=, 0 + i32.load $19=, gvol+72($pop51) + i32.const $push50=, 0 + i32.load $20=, gvol+76($pop50) + i32.const $push49=, 0 + i32.load $21=, gvol+80($pop49) + i32.const $push48=, 0 + i32.load $22=, gvol+84($pop48) + i32.const $push47=, 0 + i32.load $23=, gvol+88($pop47) + i32.const $push46=, 0 + i32.load $24=, gvol+92($pop46) + i32.const $push45=, 0 + i32.load $25=, gvol+96($pop45) + i32.const $push44=, 0 + i32.load $26=, gvol+100($pop44) + i32.const $push43=, 0 + i32.load $27=, gvol+104($pop43) + i32.const $push42=, 0 + i32.load $28=, gvol+108($pop42) + i32.const $push41=, 0 + i32.load $29=, gvol+112($pop41) + i32.const $push40=, 0 + i32.load $30=, gvol+116($pop40) + i32.const $push39=, 0 + i32.load $31=, gvol+120($pop39) + i32.const $push38=, 0 + i32.store gvol+4($pop38), $2 + i32.const $push37=, 0 + i32.store gvol+8($pop37), $3 + i32.const $push36=, 0 + i32.store gvol+12($pop36), $4 + i32.const $push35=, 0 + i32.store gvol+16($pop35), $5 + i32.const $push34=, 0 + i32.store gvol+20($pop34), $6 + i32.const $push33=, 0 + i32.store gvol+24($pop33), $7 + i32.const $push32=, 0 + i32.store gvol+28($pop32), $8 + i32.const $push31=, 0 + i32.store gvol+32($pop31), $9 + i32.const $push30=, 0 + i32.store gvol+36($pop30), $10 + i32.const $push29=, 0 + i32.store gvol+40($pop29), $11 + i32.const $push28=, 0 + i32.store gvol+44($pop28), $12 + i32.const $push27=, 0 + i32.store gvol+48($pop27), $13 + i32.const $push26=, 0 + i32.store gvol+52($pop26), $14 + i32.const $push25=, 0 + i32.store gvol+56($pop25), $15 + i32.const $push24=, 0 + i32.store gvol+60($pop24), $16 + i32.const $push23=, 0 + i32.store gvol+64($pop23), $17 + i32.const $push22=, 0 + i32.store gvol+68($pop22), $18 + i32.const $push21=, 0 + i32.store gvol+72($pop21), $19 + i32.const $push20=, 0 + i32.store gvol+76($pop20), $20 + i32.const $push19=, 0 + i32.store gvol+80($pop19), $21 + i32.const $push18=, 0 + i32.store gvol+84($pop18), $22 + i32.const $push17=, 0 + i32.store gvol+88($pop17), $23 + i32.const $push16=, 0 + i32.store gvol+92($pop16), $24 + i32.const $push15=, 0 + i32.store gvol+96($pop15), $25 + i32.const $push14=, 0 + i32.store gvol+100($pop14), $26 + i32.const $push13=, 0 + i32.store gvol+104($pop13), $27 + i32.const $push12=, 0 + i32.store gvol+108($pop12), $28 + i32.const $push11=, 0 + i32.store gvol+112($pop11), $29 + i32.const $push10=, 0 + i32.store gvol+116($pop10), $30 + i32.const $push9=, 0 + i32.store gvol+120($pop9), $31 + i32.const $push8=, -1 + i32.add $push7=, $0, $pop8 + tee_local $push6=, $0=, $pop7 + br_if 0, $pop6 # 0: up to label17 +# BB#3: # %while.end.loopexit + end_loop + i64.const $push4=, 513 + i64.add $1=, $1, $pop4 +.LBB8_4: # %while.end + end_block # label16: + copy_local $push70=, $1 + # fallthrough-return: $pop70 + .endfunc +.Lfunc_end8: + .size t9, .Lfunc_end8-t9 + # -- End function + .section .text.t10,"ax",@progbits + .hidden t10 # -- Begin function t10 + .globl t10 + .type t10,@function +t10: # @t10 + .param i32, i64 + .result i64 + .local i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.eqz $push70=, $0 + br_if 0, $pop70 # 0: down to label18 +# BB#1: # %while.body.lr.ph + i32.const $push6=, 0 + i64.load $push4=, gull($pop6) + i32.const $push5=, -1 + i32.add $push0=, $0, $pop5 + i64.extend_u/i32 $push1=, $pop0 + i64.const $push2=, 1 + i64.add $push3=, $pop1, $pop2 + i64.mul $2=, $pop4, $pop3 +.LBB9_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label19: + i32.const $push69=, 0 + i32.load $3=, gvol+4($pop69) + i32.const $push68=, 0 + i32.load $4=, gvol+8($pop68) + i32.const $push67=, 0 + i32.load $5=, gvol+12($pop67) + i32.const $push66=, 0 + i32.load $6=, gvol+16($pop66) + i32.const $push65=, 0 + i32.load $7=, gvol+20($pop65) + i32.const $push64=, 0 + i32.load $8=, gvol+24($pop64) + i32.const $push63=, 0 + i32.load $9=, gvol+28($pop63) + i32.const $push62=, 0 + i32.load $10=, gvol+32($pop62) + i32.const $push61=, 0 + i32.load $11=, gvol+36($pop61) + i32.const $push60=, 0 + i32.load $12=, gvol+40($pop60) + i32.const $push59=, 0 + i32.load $13=, gvol+44($pop59) + i32.const $push58=, 0 + i32.load $14=, gvol+48($pop58) + i32.const $push57=, 0 + i32.load $15=, gvol+52($pop57) + i32.const $push56=, 0 + i32.load $16=, gvol+56($pop56) + i32.const $push55=, 0 + i32.load $17=, gvol+60($pop55) + i32.const $push54=, 0 + i32.load $18=, gvol+64($pop54) + i32.const $push53=, 0 + i32.load $19=, gvol+68($pop53) + i32.const $push52=, 0 + i32.load $20=, gvol+72($pop52) + i32.const $push51=, 0 + i32.load $21=, gvol+76($pop51) + i32.const $push50=, 0 + i32.load $22=, gvol+80($pop50) + i32.const $push49=, 0 + i32.load $23=, gvol+84($pop49) + i32.const $push48=, 0 + i32.load $24=, gvol+88($pop48) + i32.const $push47=, 0 + i32.load $25=, gvol+92($pop47) + i32.const $push46=, 0 + i32.load $26=, gvol+96($pop46) + i32.const $push45=, 0 + i32.load $27=, gvol+100($pop45) + i32.const $push44=, 0 + i32.load $28=, gvol+104($pop44) + i32.const $push43=, 0 + i32.load $29=, gvol+108($pop43) + i32.const $push42=, 0 + i32.load $30=, gvol+112($pop42) + i32.const $push41=, 0 + i32.load $31=, gvol+116($pop41) + i32.const $push40=, 0 + i32.load $32=, gvol+120($pop40) + i32.const $push39=, 0 + i32.store gvol+4($pop39), $3 + i32.const $push38=, 0 + i32.store gvol+8($pop38), $4 + i32.const $push37=, 0 + i32.store gvol+12($pop37), $5 + i32.const $push36=, 0 + i32.store gvol+16($pop36), $6 + i32.const $push35=, 0 + i32.store gvol+20($pop35), $7 + i32.const $push34=, 0 + i32.store gvol+24($pop34), $8 + i32.const $push33=, 0 + i32.store gvol+28($pop33), $9 + i32.const $push32=, 0 + i32.store gvol+32($pop32), $10 + i32.const $push31=, 0 + i32.store gvol+36($pop31), $11 + i32.const $push30=, 0 + i32.store gvol+40($pop30), $12 + i32.const $push29=, 0 + i32.store gvol+44($pop29), $13 + i32.const $push28=, 0 + i32.store gvol+48($pop28), $14 + i32.const $push27=, 0 + i32.store gvol+52($pop27), $15 + i32.const $push26=, 0 + i32.store gvol+56($pop26), $16 + i32.const $push25=, 0 + i32.store gvol+60($pop25), $17 + i32.const $push24=, 0 + i32.store gvol+64($pop24), $18 + i32.const $push23=, 0 + i32.store gvol+68($pop23), $19 + i32.const $push22=, 0 + i32.store gvol+72($pop22), $20 + i32.const $push21=, 0 + i32.store gvol+76($pop21), $21 + i32.const $push20=, 0 + i32.store gvol+80($pop20), $22 + i32.const $push19=, 0 + i32.store gvol+84($pop19), $23 + i32.const $push18=, 0 + i32.store gvol+88($pop18), $24 + i32.const $push17=, 0 + i32.store gvol+92($pop17), $25 + i32.const $push16=, 0 + i32.store gvol+96($pop16), $26 + i32.const $push15=, 0 + i32.store gvol+100($pop15), $27 + i32.const $push14=, 0 + i32.store gvol+104($pop14), $28 + i32.const $push13=, 0 + i32.store gvol+108($pop13), $29 + i32.const $push12=, 0 + i32.store gvol+112($pop12), $30 + i32.const $push11=, 0 + i32.store gvol+116($pop11), $31 + i32.const $push10=, 0 + i32.store gvol+120($pop10), $32 + i32.const $push9=, -1 + i32.add $push8=, $0, $pop9 + tee_local $push7=, $0=, $pop8 + br_if 0, $pop7 # 0: up to label19 +# BB#3: # %while.end.loopexit + end_loop + i64.add $1=, $2, $1 +.LBB9_4: # %while.end + end_block # label18: + copy_local $push71=, $1 + # fallthrough-return: $pop71 + .endfunc +.Lfunc_end9: + .size t10, .Lfunc_end9-t10 + # -- End function + .section .text.t11,"ax",@progbits + .hidden t11 # -- Begin function t11 + .globl t11 + .type t11,@function +t11: # @t11 + .param i32, i64 + .result i64 + .local i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.eqz $push70=, $0 + br_if 0, $pop70 # 0: down to label20 +# BB#1: # %while.body.lr.ph + i32.const $push6=, 0 + i64.load $push4=, gull($pop6) + i32.const $push5=, -1 + i32.add $push0=, $0, $pop5 + i64.extend_u/i32 $push1=, $pop0 + i64.const $push2=, -1 + i64.xor $push3=, $pop1, $pop2 + i64.mul $2=, $pop4, $pop3 +.LBB10_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label21: + i32.const $push69=, 0 + i32.load $3=, gvol+4($pop69) + i32.const $push68=, 0 + i32.load $4=, gvol+8($pop68) + i32.const $push67=, 0 + i32.load $5=, gvol+12($pop67) + i32.const $push66=, 0 + i32.load $6=, gvol+16($pop66) + i32.const $push65=, 0 + i32.load $7=, gvol+20($pop65) + i32.const $push64=, 0 + i32.load $8=, gvol+24($pop64) + i32.const $push63=, 0 + i32.load $9=, gvol+28($pop63) + i32.const $push62=, 0 + i32.load $10=, gvol+32($pop62) + i32.const $push61=, 0 + i32.load $11=, gvol+36($pop61) + i32.const $push60=, 0 + i32.load $12=, gvol+40($pop60) + i32.const $push59=, 0 + i32.load $13=, gvol+44($pop59) + i32.const $push58=, 0 + i32.load $14=, gvol+48($pop58) + i32.const $push57=, 0 + i32.load $15=, gvol+52($pop57) + i32.const $push56=, 0 + i32.load $16=, gvol+56($pop56) + i32.const $push55=, 0 + i32.load $17=, gvol+60($pop55) + i32.const $push54=, 0 + i32.load $18=, gvol+64($pop54) + i32.const $push53=, 0 + i32.load $19=, gvol+68($pop53) + i32.const $push52=, 0 + i32.load $20=, gvol+72($pop52) + i32.const $push51=, 0 + i32.load $21=, gvol+76($pop51) + i32.const $push50=, 0 + i32.load $22=, gvol+80($pop50) + i32.const $push49=, 0 + i32.load $23=, gvol+84($pop49) + i32.const $push48=, 0 + i32.load $24=, gvol+88($pop48) + i32.const $push47=, 0 + i32.load $25=, gvol+92($pop47) + i32.const $push46=, 0 + i32.load $26=, gvol+96($pop46) + i32.const $push45=, 0 + i32.load $27=, gvol+100($pop45) + i32.const $push44=, 0 + i32.load $28=, gvol+104($pop44) + i32.const $push43=, 0 + i32.load $29=, gvol+108($pop43) + i32.const $push42=, 0 + i32.load $30=, gvol+112($pop42) + i32.const $push41=, 0 + i32.load $31=, gvol+116($pop41) + i32.const $push40=, 0 + i32.load $32=, gvol+120($pop40) + i32.const $push39=, 0 + i32.store gvol+4($pop39), $3 + i32.const $push38=, 0 + i32.store gvol+8($pop38), $4 + i32.const $push37=, 0 + i32.store gvol+12($pop37), $5 + i32.const $push36=, 0 + i32.store gvol+16($pop36), $6 + i32.const $push35=, 0 + i32.store gvol+20($pop35), $7 + i32.const $push34=, 0 + i32.store gvol+24($pop34), $8 + i32.const $push33=, 0 + i32.store gvol+28($pop33), $9 + i32.const $push32=, 0 + i32.store gvol+32($pop32), $10 + i32.const $push31=, 0 + i32.store gvol+36($pop31), $11 + i32.const $push30=, 0 + i32.store gvol+40($pop30), $12 + i32.const $push29=, 0 + i32.store gvol+44($pop29), $13 + i32.const $push28=, 0 + i32.store gvol+48($pop28), $14 + i32.const $push27=, 0 + i32.store gvol+52($pop27), $15 + i32.const $push26=, 0 + i32.store gvol+56($pop26), $16 + i32.const $push25=, 0 + i32.store gvol+60($pop25), $17 + i32.const $push24=, 0 + i32.store gvol+64($pop24), $18 + i32.const $push23=, 0 + i32.store gvol+68($pop23), $19 + i32.const $push22=, 0 + i32.store gvol+72($pop22), $20 + i32.const $push21=, 0 + i32.store gvol+76($pop21), $21 + i32.const $push20=, 0 + i32.store gvol+80($pop20), $22 + i32.const $push19=, 0 + i32.store gvol+84($pop19), $23 + i32.const $push18=, 0 + i32.store gvol+88($pop18), $24 + i32.const $push17=, 0 + i32.store gvol+92($pop17), $25 + i32.const $push16=, 0 + i32.store gvol+96($pop16), $26 + i32.const $push15=, 0 + i32.store gvol+100($pop15), $27 + i32.const $push14=, 0 + i32.store gvol+104($pop14), $28 + i32.const $push13=, 0 + i32.store gvol+108($pop13), $29 + i32.const $push12=, 0 + i32.store gvol+112($pop12), $30 + i32.const $push11=, 0 + i32.store gvol+116($pop11), $31 + i32.const $push10=, 0 + i32.store gvol+120($pop10), $32 + i32.const $push9=, -1 + i32.add $push8=, $0, $pop9 + tee_local $push7=, $0=, $pop8 + br_if 0, $pop7 # 0: up to label21 +# BB#3: # %while.end.loopexit + end_loop + i64.add $1=, $2, $1 +.LBB10_4: # %while.end + end_block # label20: + copy_local $push71=, $1 + # fallthrough-return: $pop71 + .endfunc +.Lfunc_end10: + .size t11, .Lfunc_end10-t11 + # -- End function + .section .text.neg,"ax",@progbits + .hidden neg # -- Begin function neg + .globl neg + .type neg,@function +neg: # @neg + .param i64 + .result i64 +# BB#0: # %entry + i64.const $push0=, 0 + i64.sub $push1=, $pop0, $0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end11: + .size neg, .Lfunc_end11-neg + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64 +# BB#0: # %entry + i32.const $push1=, 0 + i64.const $push0=, 100 + i64.store gull($pop1), $pop0 + block + i32.const $push100=, 3 + i64.const $push2=, -1 + i64.call $push3=, t1@FUNCTION, $pop100, $pop2 + i64.const $push4=, -6145 + i64.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label22 +# BB#1: # %if.end + i32.const $push101=, 3 + i64.const $push6=, 4294967295 + i64.call $push7=, t1@FUNCTION, $pop101, $pop6 + i64.const $push8=, 4294961151 + i64.ne $push9=, $pop7, $pop8 + br_if 0, $pop9 # 0: down to label22 +# BB#2: # %if.end4 + i32.const $push102=, 3 + i64.const $push10=, -1 + i64.call $push11=, t2@FUNCTION, $pop102, $pop10 + i64.const $push12=, -1540 + i64.ne $push13=, $pop11, $pop12 + br_if 0, $pop13 # 0: down to label22 +# BB#3: # %if.end8 + i32.const $push103=, 3 + i64.const $push14=, 4294967295 + i64.call $push15=, t2@FUNCTION, $pop103, $pop14 + i64.const $push16=, 4294965756 + i64.ne $push17=, $pop15, $pop16 + br_if 0, $pop17 # 0: down to label22 +# BB#4: # %if.end12 + i32.const $push104=, 3 + i64.const $push18=, -1 + i64.call $push19=, t3@FUNCTION, $pop104, $pop18 + i64.const $push20=, -1537 + i64.ne $push21=, $pop19, $pop20 + br_if 0, $pop21 # 0: down to label22 +# BB#5: # %if.end16 + i32.const $push105=, 3 + i64.const $push22=, 4294967295 + i64.call $push23=, t3@FUNCTION, $pop105, $pop22 + i64.const $push24=, 4294965759 + i64.ne $push25=, $pop23, $pop24 + br_if 0, $pop25 # 0: down to label22 +# BB#6: # %if.end20 + i32.const $push106=, 3 + i64.const $push26=, -1 + i64.call $push27=, t4@FUNCTION, $pop106, $pop26 + i64.const $push28=, -1534 + i64.ne $push29=, $pop27, $pop28 + br_if 0, $pop29 # 0: down to label22 +# BB#7: # %if.end24 + i32.const $push107=, 3 + i64.const $push30=, 4294967295 + i64.call $push31=, t4@FUNCTION, $pop107, $pop30 + i64.const $push32=, 4294965762 + i64.ne $push33=, $pop31, $pop32 + br_if 0, $pop33 # 0: down to label22 +# BB#8: # %if.end28 + i32.const $push108=, 3 + i64.const $push34=, -1 + i64.call $push35=, t5@FUNCTION, $pop108, $pop34 + i64.const $push36=, -4 + i64.ne $push37=, $pop35, $pop36 + br_if 0, $pop37 # 0: down to label22 +# BB#9: # %if.end32 + i32.const $push109=, 3 + i64.const $push38=, 4294967295 + i64.call $push39=, t5@FUNCTION, $pop109, $pop38 + i64.const $push40=, 4294967292 + i64.ne $push41=, $pop39, $pop40 + br_if 0, $pop41 # 0: down to label22 +# BB#10: # %if.end36 + i32.const $push110=, 3 + i64.const $push42=, -1 + i64.call $push43=, t6@FUNCTION, $pop110, $pop42 + i64.const $push44=, 2 + i64.ne $push45=, $pop43, $pop44 + br_if 0, $pop45 # 0: down to label22 +# BB#11: # %if.end40 + i32.const $push111=, 3 + i64.const $push46=, 4294967295 + i64.call $push47=, t6@FUNCTION, $pop111, $pop46 + i64.const $push48=, 4294967298 + i64.ne $push49=, $pop47, $pop48 + br_if 0, $pop49 # 0: down to label22 +# BB#12: # %if.end44 + i32.const $push112=, 3 + i64.const $push50=, -1 + i64.call $push51=, t7@FUNCTION, $pop112, $pop50 + i64.const $push52=, 1532 + i64.ne $push53=, $pop51, $pop52 + br_if 0, $pop53 # 0: down to label22 +# BB#13: # %if.end48 + i32.const $push113=, 3 + i64.const $push54=, 4294967295 + i64.call $push55=, t7@FUNCTION, $pop113, $pop54 + i64.const $push56=, 4294968828 + i64.ne $push57=, $pop55, $pop56 + br_if 0, $pop57 # 0: down to label22 +# BB#14: # %if.end52 + i32.const $push114=, 3 + i64.const $push58=, -1 + i64.call $push59=, t8@FUNCTION, $pop114, $pop58 + i64.const $push60=, 1535 + i64.ne $push61=, $pop59, $pop60 + br_if 0, $pop61 # 0: down to label22 +# BB#15: # %if.end56 + i32.const $push115=, 3 + i64.const $push62=, 4294967295 + i64.call $push63=, t8@FUNCTION, $pop115, $pop62 + i64.const $push64=, 4294968831 + i64.ne $push65=, $pop63, $pop64 + br_if 0, $pop65 # 0: down to label22 +# BB#16: # %if.end60 + i32.const $push116=, 3 + i64.const $push66=, -1 + i64.call $push67=, t9@FUNCTION, $pop116, $pop66 + i64.const $push68=, 1538 + i64.ne $push69=, $pop67, $pop68 + br_if 0, $pop69 # 0: down to label22 +# BB#17: # %if.end64 + i32.const $push117=, 3 + i64.const $push70=, 4294967295 + i64.call $push71=, t9@FUNCTION, $pop117, $pop70 + i64.const $push72=, 4294968834 + i64.ne $push73=, $pop71, $pop72 + br_if 0, $pop73 # 0: down to label22 +# BB#18: # %if.end68 + i32.const $push121=, 3 + i64.const $push74=, -1 + i64.call $push75=, t10@FUNCTION, $pop121, $pop74 + i32.const $push120=, 0 + i64.load $push76=, gull($pop120) + i64.const $push119=, 3 + i64.mul $push77=, $pop76, $pop119 + i64.const $push118=, -1 + i64.add $push78=, $pop77, $pop118 + i64.ne $push79=, $pop75, $pop78 + br_if 0, $pop79 # 0: down to label22 +# BB#19: # %if.end72 + i32.const $push125=, 3 + i64.const $push80=, 4294967295 + i64.call $push81=, t10@FUNCTION, $pop125, $pop80 + i32.const $push124=, 0 + i64.load $push82=, gull($pop124) + i64.const $push123=, 3 + i64.mul $push83=, $pop82, $pop123 + i64.const $push122=, 4294967295 + i64.add $push84=, $pop83, $pop122 + i64.ne $push85=, $pop81, $pop84 + br_if 0, $pop85 # 0: down to label22 +# BB#20: # %if.end77 + i32.const $push129=, 3 + i64.const $push86=, -1 + i64.call $push87=, t11@FUNCTION, $pop129, $pop86 + i32.const $push128=, 0 + i64.load $push88=, gull($pop128) + i64.const $push127=, -3 + i64.mul $push89=, $pop88, $pop127 + i64.const $push126=, -1 + i64.add $push90=, $pop89, $pop126 + i64.ne $push91=, $pop87, $pop90 + br_if 0, $pop91 # 0: down to label22 +# BB#21: # %if.end84 + i32.const $push135=, 3 + i64.const $push92=, 4294967295 + i64.call $push93=, t11@FUNCTION, $pop135, $pop92 + i32.const $push134=, 0 + i64.load $push133=, gull($pop134) + tee_local $push132=, $0=, $pop133 + i64.const $push131=, -3 + i64.mul $push94=, $pop132, $pop131 + i64.const $push130=, 4294967295 + i64.add $push95=, $pop94, $pop130 + i64.ne $push96=, $pop93, $pop95 + br_if 0, $pop96 # 0: down to label22 +# BB#22: # %if.end91 + i64.const $push97=, 100 + i64.ne $push98=, $0, $pop97 + br_if 0, $pop98 # 0: down to label22 +# BB#23: # %if.end95 + i32.const $push99=, 0 + call exit@FUNCTION, $pop99 + unreachable +.LBB12_24: # %if.then + end_block # label22: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end12: + .size main, .Lfunc_end12-main + # -- End function + .hidden gvol # @gvol + .type gvol,@object + .section .bss.gvol,"aw",@nobits + .globl gvol + .p2align 4 +gvol: + .skip 128 + .size gvol, 128 + + .hidden gull # @gull + .type gull,@object + .section .bss.gull,"aw",@nobits + .globl gull + .p2align 3 +gull: + .int64 0 # 0x0 + .size gull, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20041019-1.c.s b/src/binaryen/test/torture-s/20041019-1.c.s new file mode 100644 index 0000000000..d1a8edc5e7 --- /dev/null +++ b/src/binaryen/test/torture-s/20041019-1.c.s @@ -0,0 +1,93 @@ + .text + .file "20041019-1.c" + .section .text.test_store_ccp,"ax",@progbits + .hidden test_store_ccp # -- Begin function test_store_ccp + .globl test_store_ccp + .type test_store_ccp,@function +test_store_ccp: # @test_store_ccp + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push11=, 0 + i32.load $push10=, __stack_pointer($pop11) + i32.const $push12=, 16 + i32.sub $push22=, $pop10, $pop12 + tee_local $push21=, $1=, $pop22 + i32.const $push17=, 12 + i32.add $push18=, $pop21, $pop17 + i32.const $push13=, 8 + i32.add $push14=, $1, $pop13 + i32.const $push15=, 4 + i32.add $push16=, $1, $pop15 + i32.const $push2=, 8 + i32.gt_s $push3=, $0, $pop2 + i32.select $push4=, $pop14, $pop16, $pop3 + i32.const $push0=, 5 + i32.lt_s $push1=, $0, $pop0 + i32.select $push20=, $pop18, $pop4, $pop1 + tee_local $push19=, $0=, $pop20 + i32.const $push5=, 10 + i32.store 0($pop19), $pop5 + i32.const $push6=, 3 + i32.store 8($1), $pop6 + i32.load $push7=, 0($0) + i32.const $push8=, 2 + i32.add $push9=, $pop7, $pop8 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end0: + .size test_store_ccp, .Lfunc_end0-test_store_ccp + # -- End function + .section .text.test_store_copy_prop,"ax",@progbits + .hidden test_store_copy_prop # -- Begin function test_store_copy_prop + .globl test_store_copy_prop + .type test_store_copy_prop,@function +test_store_copy_prop: # @test_store_copy_prop + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.load $push8=, __stack_pointer($pop9) + i32.const $push10=, 16 + i32.sub $push20=, $pop8, $pop10 + tee_local $push19=, $2=, $pop20 + i32.const $push15=, 12 + i32.add $push16=, $pop19, $pop15 + i32.const $push11=, 8 + i32.add $push12=, $2, $pop11 + i32.const $push13=, 4 + i32.add $push14=, $2, $pop13 + i32.const $push2=, 8 + i32.gt_s $push3=, $0, $pop2 + i32.select $push4=, $pop12, $pop14, $pop3 + i32.const $push0=, 5 + i32.lt_s $push1=, $0, $pop0 + i32.select $push18=, $pop16, $pop4, $pop1 + tee_local $push17=, $1=, $pop18 + i32.store 0($pop17), $0 + i32.const $push5=, 1 + i32.add $push6=, $0, $pop5 + i32.store 8($2), $pop6 + i32.load $push7=, 0($1) + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end1: + .size test_store_copy_prop, .Lfunc_end1-test_store_copy_prop + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end4 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20041112-1.c.s b/src/binaryen/test/torture-s/20041112-1.c.s new file mode 100644 index 0000000000..8177d70f27 --- /dev/null +++ b/src/binaryen/test/torture-s/20041112-1.c.s @@ -0,0 +1,63 @@ + .text + .file "20041112-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push19=, 0 + i32.load $push18=, global($pop19) + tee_local $push17=, $0=, $pop18 + i32.const $push1=, 1 + i32.add $push2=, $pop17, $pop1 + i32.const $push3=, 2 + i32.select $push16=, $pop2, $pop3, $0 + tee_local $push15=, $1=, $pop16 + i32.const $push14=, 1 + i32.const $push5=, global + i32.const $push4=, -1 + i32.eq $push6=, $pop5, $pop4 + i32.select $push7=, $1, $pop14, $pop6 + i32.select $push8=, $pop15, $pop7, $0 + i32.store global($pop0), $pop8 + i32.eqz $push10=, $0 + i32.const $push13=, global + i32.const $push12=, -1 + i32.ne $push9=, $pop13, $pop12 + i32.and $push11=, $pop10, $pop9 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, 2 + i32.store global($pop1), $pop0 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden global # @global + .type global,@object + .section .bss.global,"aw",@nobits + .globl global + .p2align 2 +global: + .int32 0 # 0x0 + .size global, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20041113-1.c.s b/src/binaryen/test/torture-s/20041113-1.c.s new file mode 100644 index 0000000000..a84909e470 --- /dev/null +++ b/src/binaryen/test/torture-s/20041113-1.c.s @@ -0,0 +1,113 @@ + .text + .file "20041113-1.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push20=, 0 + i32.const $push18=, 0 + i32.load $push17=, __stack_pointer($pop18) + i32.const $push19=, 16 + i32.sub $push27=, $pop17, $pop19 + tee_local $push26=, $4=, $pop27 + i32.store __stack_pointer($pop20), $pop26 + i32.const $push0=, 4 + i32.add $push25=, $1, $pop0 + tee_local $push24=, $2=, $pop25 + i32.store 12($4), $pop24 + block + i32.load $push1=, 0($1) + i32.const $push2=, 1 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 8 + i32.add $push29=, $1, $pop4 + tee_local $push28=, $3=, $pop29 + i32.store 12($4), $pop28 + i32.load $push5=, 0($2) + i32.const $push6=, 2 + i32.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#2: # %if.end6 + i32.const $push8=, 12 + i32.add $push31=, $1, $pop8 + tee_local $push30=, $2=, $pop31 + i32.store 12($4), $pop30 + i32.load $push9=, 0($3) + i32.const $push10=, 3 + i32.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#3: # %if.end11 + i32.const $push12=, 16 + i32.add $push13=, $1, $pop12 + i32.store 12($4), $pop13 + i32.load $push14=, 0($2) + i32.const $push15=, 4 + i32.ne $push16=, $pop14, $pop15 + br_if 0, $pop16 # 0: down to label0 +# BB#4: # %if.end16 + i32.const $push23=, 0 + i32.const $push21=, 16 + i32.add $push22=, $4, $pop21 + i32.store __stack_pointer($pop23), $pop22 + return +.LBB0_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push10=, 0 + i32.const $push8=, 0 + i32.load $push7=, __stack_pointer($pop8) + i32.const $push9=, 16 + i32.sub $push13=, $pop7, $pop9 + tee_local $push12=, $2=, $pop13 + i32.store __stack_pointer($pop10), $pop12 + i64.const $push0=, 12884901890 + i64.store 4($2):p2align=2, $pop0 + i32.const $push1=, 1 + i32.store 0($2), $pop1 + i32.const $push2=, 0 + f64.load $push3=, a($pop2) + f64.const $push4=, 0x1.4p3 + f64.div $push5=, $pop3, $pop4 + i32.trunc_s/f64 $push6=, $pop5 + i32.store 12($2), $pop6 + call test@FUNCTION, $2, $2 + i32.const $push11=, 0 + call exit@FUNCTION, $pop11 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 3 +a: + .int64 4630826316843712512 # double 40 + .size a, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20041114-1.c.s b/src/binaryen/test/torture-s/20041114-1.c.s new file mode 100644 index 0000000000..b8300cca36 --- /dev/null +++ b/src/binaryen/test/torture-s/20041114-1.c.s @@ -0,0 +1,41 @@ + .text + .file "20041114-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $drop=, v($pop0) + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden v # @v + .type v,@object + .section .bss.v,"aw",@nobits + .globl v + .p2align 2 +v: + .int32 0 # 0x0 + .size v, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20041124-1.c.s b/src/binaryen/test/torture-s/20041124-1.c.s new file mode 100644 index 0000000000..ca807d733f --- /dev/null +++ b/src/binaryen/test/torture-s/20041124-1.c.s @@ -0,0 +1,77 @@ + .text + .file "20041124-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, gs($pop0) + i32.store 0($0):p2align=1, $pop1 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push13=, 0 + i32.const $push11=, 0 + i32.load $push10=, __stack_pointer($pop11) + i32.const $push12=, 16 + i32.sub $push18=, $pop10, $pop12 + tee_local $push17=, $0=, $pop18 + i32.store __stack_pointer($pop13), $pop17 + i32.const $push14=, 8 + i32.add $push15=, $0, $pop14 + call foo@FUNCTION, $pop15 + block + i32.load16_u $push3=, 8($0) + i32.const $push16=, 0 + i32.load16_u $push2=, gs($pop16) + i32.ne $push4=, $pop3, $pop2 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %entry + i32.load16_u $push0=, 10($0) + i32.const $push5=, 65535 + i32.and $push7=, $pop0, $pop5 + i32.const $push20=, 0 + i32.load16_u $push1=, gs+2($pop20) + i32.const $push19=, 65535 + i32.and $push6=, $pop1, $pop19 + i32.ne $push8=, $pop7, $pop6 + br_if 0, $pop8 # 0: down to label0 +# BB#2: # %if.end + i32.const $push9=, 0 + call exit@FUNCTION, $pop9 + unreachable +.LBB1_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden gs # @gs + .type gs,@object + .section .data.gs,"aw",@progbits + .globl gs + .p2align 2 +gs: + .int16 100 # 0x64 + .int16 200 # 0xc8 + .size gs, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20041126-1.c.s b/src/binaryen/test/torture-s/20041126-1.c.s new file mode 100644 index 0000000000..1fe0ed4b29 --- /dev/null +++ b/src/binaryen/test/torture-s/20041126-1.c.s @@ -0,0 +1,150 @@ + .text + .file "20041126-1.c" + .section .text.check,"ax",@progbits + .hidden check # -- Begin function check + .globl check + .type check,@function +check: # @check + .param i32 + .local i32, i32, i32 +# BB#0: # %entry + block + i32.load $push0=, 0($0) + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %for.inc + i32.load $push1=, 4($0) + br_if 0, $pop1 # 0: down to label0 +# BB#2: # %for.inc.1 + i32.load $push2=, 8($0) + br_if 0, $pop2 # 0: down to label0 +# BB#3: # %for.inc.2 + i32.load $push3=, 12($0) + br_if 0, $pop3 # 0: down to label0 +# BB#4: # %for.inc.3 + i32.load $push4=, 16($0) + br_if 0, $pop4 # 0: down to label0 +# BB#5: # %for.body3.preheader + i32.const $3=, 5 +.LBB0_6: # %for.body3 + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push12=, 2 + i32.shl $push6=, $3, $pop12 + i32.add $push7=, $0, $pop6 + i32.load $push11=, 0($pop7) + tee_local $push10=, $1=, $pop11 + i32.const $push9=, 1 + i32.add $push5=, $3, $pop9 + i32.ne $push8=, $pop10, $pop5 + br_if 1, $pop8 # 1: down to label0 +# BB#7: # %for.cond1 + # in Loop: Header=BB0_6 Depth=1 + i32.const $push13=, 8 + i32.gt_s $2=, $3, $pop13 + copy_local $3=, $1 + i32.eqz $push14=, $2 + br_if 0, $pop14 # 0: up to label1 +# BB#8: # %for.end10 + end_loop + return +.LBB0_9: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size check, .Lfunc_end0-check + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %for.body3.lr.ph.i + i32.const $push18=, 0 + i32.const $push16=, 0 + i32.load $push15=, __stack_pointer($pop16) + i32.const $push17=, 48 + i32.sub $push29=, $pop15, $pop17 + tee_local $push28=, $3=, $pop29 + i32.store __stack_pointer($pop18), $pop28 + i32.const $push2=, 16 + i32.add $push27=, $3, $pop2 + tee_local $push26=, $2=, $pop27 + i32.const $push0=, 0 + i64.load $push1=, .Lmain.a+16($pop0) + i64.store 0($pop26), $pop1 + i32.const $push4=, 32 + i32.add $push5=, $3, $pop4 + i32.const $push25=, 0 + i64.load $push3=, .Lmain.a+32($pop25) + i64.store 0($pop5), $pop3 + i32.const $push7=, 24 + i32.add $push8=, $3, $pop7 + i32.const $push24=, 0 + i64.load $push6=, .Lmain.a+24($pop24) + i64.store 0($pop8), $pop6 + i32.const $push23=, 0 + i32.store 0($2), $pop23 + i64.const $push9=, 0 + i64.store 8($3), $pop9 + i64.const $push22=, 0 + i64.store 0($3), $pop22 + i32.const $2=, 5 +.LBB1_1: # %for.body3.i + # =>This Inner Loop Header: Depth=1 + block + loop # label3: + i32.const $push33=, 2 + i32.shl $push11=, $2, $pop33 + i32.add $push12=, $3, $pop11 + i32.load $push32=, 0($pop12) + tee_local $push31=, $0=, $pop32 + i32.const $push30=, 1 + i32.add $push10=, $2, $pop30 + i32.ne $push13=, $pop31, $pop10 + br_if 1, $pop13 # 1: down to label2 +# BB#2: # %for.cond1.i + # in Loop: Header=BB1_1 Depth=1 + i32.const $push34=, 8 + i32.gt_s $1=, $2, $pop34 + copy_local $2=, $0 + i32.eqz $push35=, $1 + br_if 0, $pop35 # 0: up to label3 +# BB#3: # %check.exit + end_loop + i32.const $push21=, 0 + i32.const $push19=, 48 + i32.add $push20=, $3, $pop19 + i32.store __stack_pointer($pop21), $pop20 + i32.const $push14=, 0 + return $pop14 +.LBB1_4: # %if.then6.i + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .Lmain.a,@object # @main.a + .section .rodata..Lmain.a,"a",@progbits + .p2align 4 +.Lmain.a: + .int32 1 # 0x1 + .int32 2 # 0x2 + .int32 3 # 0x3 + .int32 4 # 0x4 + .int32 5 # 0x5 + .int32 6 # 0x6 + .int32 7 # 0x7 + .int32 8 # 0x8 + .int32 9 # 0x9 + .int32 10 # 0xa + .size .Lmain.a, 40 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20041201-1.c.s b/src/binaryen/test/torture-s/20041201-1.c.s new file mode 100644 index 0000000000..c2b793747f --- /dev/null +++ b/src/binaryen/test/torture-s/20041201-1.c.s @@ -0,0 +1,96 @@ + .text + .file "20041201-1.c" + .section .text.checkScc2,"ax",@progbits + .hidden checkScc2 # -- Begin function checkScc2 + .globl checkScc2 + .type checkScc2,@function +checkScc2: # @checkScc2 + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $1=, 1 + block + i32.load8_u $push1=, 0($0) + i32.const $push14=, 1 + i32.ne $push2=, $pop1, $pop14 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %entry + i32.load8_u $push0=, 1($0) + i32.const $push3=, 255 + i32.and $push4=, $pop0, $pop3 + i32.const $push5=, 2 + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#2: # %lor.rhs + i32.load8_u $push7=, 2($0) + i32.const $push8=, 3 + i32.ne $push9=, $pop7, $pop8 + i32.const $push15=, 3 + i32.add $push10=, $0, $pop15 + i32.load8_u $push11=, 0($pop10) + i32.const $push12=, 4 + i32.ne $push13=, $pop11, $pop12 + i32.or $1=, $pop9, $pop13 +.LBB0_3: # %lor.end + end_block # label0: + copy_local $push16=, $1 + # fallthrough-return: $pop16 + .endfunc +.Lfunc_end0: + .size checkScc2, .Lfunc_end0-checkScc2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $0=, 1 + block + i32.const $push15=, 0 + i32.load8_u $push1=, s($pop15) + i32.const $push14=, 1 + i32.ne $push2=, $pop1, $pop14 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %entry + i32.const $push16=, 0 + i32.load8_u $push0=, s+1($pop16) + i32.const $push3=, 255 + i32.and $push4=, $pop0, $pop3 + i32.const $push5=, 2 + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label1 +# BB#2: # %lor.rhs.i + i32.const $push7=, 0 + i32.load8_u $push11=, s+2($pop7) + i32.const $push12=, 3 + i32.ne $push13=, $pop11, $pop12 + i32.const $push17=, 0 + i32.load8_u $push8=, s+3($pop17) + i32.const $push9=, 4 + i32.ne $push10=, $pop8, $pop9 + i32.or $0=, $pop13, $pop10 +.LBB1_3: # %checkScc2.exit + end_block # label1: + copy_local $push18=, $0 + # fallthrough-return: $pop18 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden s # @s + .type s,@object + .section .data.s,"aw",@progbits + .globl s +s: + .int8 1 # 0x1 + .int8 2 # 0x2 + .int8 3 # 0x3 + .int8 4 # 0x4 + .size s, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20041210-1.c.s b/src/binaryen/test/torture-s/20041210-1.c.s new file mode 100644 index 0000000000..55bd20b21b --- /dev/null +++ b/src/binaryen/test/torture-s/20041210-1.c.s @@ -0,0 +1,53 @@ + .text + .file "20041210-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push9=, 0 + i32.load $push1=, x($pop9) + i32.const $push8=, 0 + i32.load $push0=, x+4($pop8) + i32.ge_s $push2=, $pop1, $pop0 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.then + i32.const $push11=, 0 + i32.load $push4=, x+12($pop11) + i32.const $push10=, 0 + i32.load $push3=, x+8($pop10) + i32.and $push5=, $pop4, $pop3 + i32.const $push6=, -1 + i32.gt_s $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#2: # %if.then2 + call abort@FUNCTION + unreachable +.LBB0_3: # %if.end3 + end_block # label0: + i32.const $push12=, 0 + call exit@FUNCTION, $pop12 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 4 +x: + .int32 3221225472 # 0xc0000000 + .int32 2147483647 # 0x7fffffff + .int32 2 # 0x2 + .int32 4 # 0x4 + .size x, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20041212-1.c.s b/src/binaryen/test/torture-s/20041212-1.c.s new file mode 100644 index 0000000000..b64ee7d4b2 --- /dev/null +++ b/src/binaryen/test/torture-s/20041212-1.c.s @@ -0,0 +1,32 @@ + .text + .file "20041212-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, f@FUNCTION + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20041213-2.c.s b/src/binaryen/test/torture-s/20041213-2.c.s new file mode 100644 index 0000000000..dafd96d5e2 --- /dev/null +++ b/src/binaryen/test/torture-s/20041213-2.c.s @@ -0,0 +1,78 @@ + .text + .file "20041213-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .local i32, i32, i32 +# BB#0: # %entry + block + block + i32.eqz $push9=, $0 + br_if 0, $pop9 # 0: down to label1 +# BB#1: # %for.body.preheader + i32.const $2=, 0 + i32.const $3=, 1 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + block + block + copy_local $push4=, $3 + tee_local $push3=, $1=, $pop4 + i32.ge_s $push0=, $2, $pop3 + br_if 0, $pop0 # 0: down to label4 +# BB#3: # %for.end.thread + # in Loop: Header=BB0_2 Depth=1 + i32.const $push5=, 1 + i32.shl $push2=, $1, $pop5 + i32.sub $3=, $pop2, $2 + br 1 # 1: down to label3 +.LBB0_4: # %for.end + # in Loop: Header=BB0_2 Depth=1 + end_block # label4: + copy_local $3=, $1 + i32.ne $push1=, $2, $1 + br_if 3, $pop1 # 3: down to label0 +.LBB0_5: # %for.cond + # in Loop: Header=BB0_2 Depth=1 + end_block # label3: + copy_local $2=, $1 + i32.const $push8=, -1 + i32.add $push7=, $0, $pop8 + tee_local $push6=, $0=, $pop7 + br_if 0, $pop6 # 0: up to label2 +.LBB0_6: # %for.end7 + end_loop + end_block # label1: + return +.LBB0_7: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + call foo@FUNCTION, $pop0 + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20041214-1.c.s b/src/binaryen/test/torture-s/20041214-1.c.s new file mode 100644 index 0000000000..cec0adc085 --- /dev/null +++ b/src/binaryen/test/torture-s/20041214-1.c.s @@ -0,0 +1,147 @@ + .text + .file "20041214-1.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32, i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + block + i32.load8_u $push1=, 0($1) + i32.eqz $push7=, $pop1 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %do.body.preheader + i32.const $push4=, 2 + i32.add $1=, $1, $pop4 +.LBB0_2: # %do.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.load $push2=, 0($2) + i32.call $drop=, strcpy@FUNCTION, $0, $pop2 + i32.const $push6=, 4 + i32.add $2=, $2, $pop6 + i32.load8_u $3=, 0($1) + i32.const $push5=, 2 + i32.add $push0=, $1, $pop5 + copy_local $1=, $pop0 + br_if 0, $3 # 0: up to label1 +.LBB0_3: # %all_done + end_loop + end_block # label0: + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push11=, $pop3, $pop5 + tee_local $push10=, $4=, $pop11 + i32.store __stack_pointer($pop6), $pop10 + i32.store 12($4), $2 + block + i32.load8_u $push1=, 0($1) + i32.eqz $push15=, $pop1 + br_if 0, $pop15 # 0: down to label2 +# BB#1: # %if.end.i + i32.const $push12=, 2 + i32.add $1=, $1, $pop12 + i32.load $2=, 12($4) +.LBB1_2: # %do.body.i + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.load $push2=, 0($2) + i32.call $drop=, strcpy@FUNCTION, $0, $pop2 + i32.const $push14=, 4 + i32.add $2=, $2, $pop14 + i32.load8_u $3=, 0($1) + i32.const $push13=, 2 + i32.add $push0=, $1, $pop13 + copy_local $1=, $pop0 + br_if 0, $3 # 0: up to label3 +.LBB1_3: # %g.exit + end_loop + end_block # label2: + i32.const $push9=, 0 + i32.const $push7=, 16 + i32.add $push8=, $4, $pop7 + i32.store __stack_pointer($pop9), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 32 + i32.sub $push17=, $pop3, $pop5 + tee_local $push16=, $0=, $pop17 + i32.store __stack_pointer($pop6), $pop16 + i32.const $push15=, 0 + i32.store 4($0), $pop15 + i32.const $push0=, .L.str.1 + i32.store 0($0), $pop0 + i32.const $push10=, 22 + i32.add $push11=, $0, $pop10 + i32.const $push1=, .L.str + call f@FUNCTION, $pop11, $pop1, $0 + block + i32.const $push12=, 22 + i32.add $push13=, $0, $pop12 + i32.const $push14=, .L.str.1 + i32.call $push2=, strcmp@FUNCTION, $pop13, $pop14 + br_if 0, $pop2 # 0: down to label4 +# BB#1: # %if.end + i32.const $push9=, 0 + i32.const $push7=, 32 + i32.add $push8=, $0, $pop7 + i32.store __stack_pointer($pop9), $pop8 + i32.const $push18=, 0 + return $pop18 +.LBB2_2: # %if.then + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "%s" + .size .L.str, 3 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "asdf" + .size .L.str.1, 5 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strcpy, i32, i32, i32 + .functype strcmp, i32, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20041218-1.c.s b/src/binaryen/test/torture-s/20041218-1.c.s new file mode 100644 index 0000000000..5df6eef95f --- /dev/null +++ b/src/binaryen/test/torture-s/20041218-1.c.s @@ -0,0 +1,204 @@ + .text + .file "20041218-1.c" + .section .text.dummy1,"ax",@progbits + .hidden dummy1 # -- Begin function dummy1 + .globl dummy1 + .type dummy1,@function +dummy1: # @dummy1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, .L.str + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size dummy1, .Lfunc_end0-dummy1 + # -- End function + .section .text.dummy2,"ax",@progbits + .hidden dummy2 # -- Begin function dummy2 + .globl dummy2 + .type dummy2,@function +dummy2: # @dummy2 + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size dummy2, .Lfunc_end1-dummy2 + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1431655765 + i32.store baz.v+40($pop1), $pop0 + i32.const $push12=, 0 + i64.const $push2=, 6148914691236517205 + i64.store baz.v+32($pop12):p2align=2, $pop2 + i32.const $push11=, 0 + i64.const $push10=, 6148914691236517205 + i64.store baz.v+24($pop11):p2align=2, $pop10 + i32.const $push9=, 0 + i64.const $push8=, 6148914691236517205 + i64.store baz.v+16($pop9):p2align=2, $pop8 + i32.const $push7=, 0 + i64.const $push6=, 6148914691236517205 + i64.store baz.v+8($pop7):p2align=2, $pop6 + i32.const $push5=, 0 + i64.const $push4=, 6148914691236517205 + i64.store baz.v($pop5):p2align=2, $pop4 + i32.const $push3=, baz.v + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size baz, .Lfunc_end2-baz + # -- End function + .section .text.check,"ax",@progbits + .hidden check # -- Begin function check + .globl check + .type check,@function +check: # @check + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.load $push0=, 0($1) + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load $push1=, 4($1) + br_if 0, $pop1 # 0: down to label0 +# BB#2: # %lor.lhs.false2 + i32.const $push2=, 8 + i32.add $push3=, $1, $pop2 + i32.load $push4=, 0($pop3) + br_if 0, $pop4 # 0: down to label0 +# BB#3: # %lor.lhs.false5 + i32.const $push5=, 12 + i32.add $push6=, $1, $pop5 + i32.load $push7=, 0($pop6) + br_if 0, $pop7 # 0: down to label0 +# BB#4: # %lor.lhs.false8 + i32.const $push8=, 16 + i32.add $push9=, $1, $pop8 + i32.load8_u $push10=, 0($pop9) + br_if 0, $pop10 # 0: down to label0 +# BB#5: # %if.end + i32.const $push11=, 1 + return $pop11 +.LBB3_6: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size check, .Lfunc_end3-check + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 + .result i32 +# BB#0: # %for.cond + i32.const $push5=, 0 + i32.store 0($2), $pop5 + block + block + i32.eqz $push20=, $1 + br_if 0, $pop20 # 0: down to label2 +# BB#1: # %for.body + i32.load $push0=, 0($0) + i32.const $push6=, 1 + i32.eq $push1=, $pop0, $pop6 + br_if 1, $pop1 # 1: down to label1 +# BB#2: # %cleanup2 + i32.const $push7=, 1 + return $pop7 +.LBB4_3: # %for.end + end_block # label2: + i32.const $push9=, 0 + i32.store 0($2), $pop9 + i32.const $push8=, 0 + return $pop8 +.LBB4_4: # %sw.bb + end_block # label1: + i32.const $push3=, 0 + i64.const $push2=, 0 + i64.store baz.v+36($pop3):p2align=2, $pop2 + i32.const $push19=, 0 + i64.const $push18=, 0 + i64.store baz.v+28($pop19):p2align=2, $pop18 + i32.const $push17=, 0 + i64.const $push16=, 0 + i64.store baz.v+20($pop17):p2align=2, $pop16 + i32.const $push15=, 0 + i64.const $push14=, 0 + i64.store baz.v+12($pop15):p2align=2, $pop14 + i32.const $push13=, 0 + i64.const $push12=, 0 + i64.store baz.v+4($pop13):p2align=2, $pop12 + i32.const $push11=, 0 + i32.const $push4=, 1 + i32.store baz.v($pop11), $pop4 + i32.const $push10=, 0 + call exit@FUNCTION, $pop10 + unreachable + .endfunc +.Lfunc_end4: + .size foo, .Lfunc_end4-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push11=, $pop1, $pop3 + tee_local $push10=, $0=, $pop11 + i32.store __stack_pointer($pop4), $pop10 + i32.const $push0=, 1 + i32.store 12($0), $pop0 + i32.const $push5=, 12 + i32.add $push6=, $0, $pop5 + i32.const $push9=, 1 + i32.const $push7=, 8 + i32.add $push8=, $0, $pop7 + i32.call $drop=, foo@FUNCTION, $pop6, $pop9, $pop8 + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end5: + .size main, .Lfunc_end5-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .skip 1 + .size .L.str, 1 + + .type baz.v,@object # @baz.v + .section .bss.baz.v,"aw",@nobits + .p2align 2 +baz.v: + .skip 44 + .size baz.v, 44 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20050104-1.c.s b/src/binaryen/test/torture-s/20050104-1.c.s new file mode 100644 index 0000000000..9b48b5341d --- /dev/null +++ b/src/binaryen/test/torture-s/20050104-1.c.s @@ -0,0 +1,39 @@ + .text + .file "20050104-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i64 +# BB#0: # %entry + block + i64.const $push0=, 10 + i64.gt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %lor.lhs.false + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20050106-1.c.s b/src/binaryen/test/torture-s/20050106-1.c.s new file mode 100644 index 0000000000..7a7795bd30 --- /dev/null +++ b/src/binaryen/test/torture-s/20050106-1.c.s @@ -0,0 +1,38 @@ + .text + .file "20050106-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load16_s $push0=, u($pop3) + i32.const $push1=, -1 + i32.le_s $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden u # @u + .type u,@object + .section .bss.u,"aw",@nobits + .globl u + .p2align 2 +u: + .int32 0 # 0x0 + .size u, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20050107-1.c.s b/src/binaryen/test/torture-s/20050107-1.c.s new file mode 100644 index 0000000000..a718c46e01 --- /dev/null +++ b/src/binaryen/test/torture-s/20050107-1.c.s @@ -0,0 +1,45 @@ + .text + .file "20050107-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.load8_u $push0=, 0($0) + i32.const $push1=, 1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load8_u $push3=, 1($0) + i32.const $push4=, 2 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end + return +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %foo.exit + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20050111-1.c.s b/src/binaryen/test/torture-s/20050111-1.c.s new file mode 100644 index 0000000000..384bcca9c7 --- /dev/null +++ b/src/binaryen/test/torture-s/20050111-1.c.s @@ -0,0 +1,52 @@ + .text + .file "20050111-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i64 + .result i32 +# BB#0: # %entry + i32.const $push4=, 0 + i64.const $push0=, 32 + i64.shr_u $push1=, $0, $pop0 + i32.wrap/i64 $push2=, $pop1 + i64.eqz $push3=, $0 + i32.select $push5=, $pop4, $pop2, $pop3 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .result i64 +# BB#0: # %entry + i64.extend_u/i32 $push0=, $0 + i64.const $push1=, 32 + i64.shl $push2=, $pop0, $pop1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end16 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20050119-1.c.s b/src/binaryen/test/torture-s/20050119-1.c.s new file mode 100644 index 0000000000..a2f6d1e349 --- /dev/null +++ b/src/binaryen/test/torture-s/20050119-1.c.s @@ -0,0 +1,60 @@ + .text + .file "20050119-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.load8_u $push1=, 0($0) + i32.load8_u $push0=, 1($0) + i32.ne $push2=, $pop1, $pop0 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.load8_u $push3=, 2($0) + i32.const $push4=, 2 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end7 + return +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push9=, $pop2, $pop4 + tee_local $push8=, $0=, $pop9 + i32.store __stack_pointer($pop5), $pop8 + i64.const $push0=, 283686935331073 + i64.store 8($0), $pop0 + i32.const $push6=, 8 + i32.add $push7=, $0, $pop6 + call foo@FUNCTION, $pop7 + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20050119-2.c.s b/src/binaryen/test/torture-s/20050119-2.c.s new file mode 100644 index 0000000000..a1cf759313 --- /dev/null +++ b/src/binaryen/test/torture-s/20050119-2.c.s @@ -0,0 +1,49 @@ + .text + .file "20050119-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + block + i32.load8_u $push1=, 0($0) + i32.load8_u $push0=, 1($0) + i32.ne $push2=, $pop1, $pop0 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.load8_u $push3=, 2($0) + i32.const $push4=, 2 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end7 + i32.load8_u $push6=, 3($0) + return $pop6 +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20050121-1.c.s b/src/binaryen/test/torture-s/20050121-1.c.s new file mode 100644 index 0000000000..3e12f49708 --- /dev/null +++ b/src/binaryen/test/torture-s/20050121-1.c.s @@ -0,0 +1,431 @@ + .text + .file "20050121-1.c" + .section .text.foo_float,"ax",@progbits + .hidden foo_float # -- Begin function foo_float + .globl foo_float + .type foo_float,@function +foo_float: # @foo_float + .param i32, i32 +# BB#0: # %entry + i32.const $push0=, -1 + i32.add $push1=, $1, $pop0 + f32.convert_s/i32 $push2=, $pop1 + f32.store 4($0), $pop2 + i32.const $push3=, 1 + i32.add $push4=, $1, $pop3 + f32.convert_s/i32 $push5=, $pop4 + f32.store 0($0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo_float, .Lfunc_end0-foo_float + # -- End function + .section .text.bar_float,"ax",@progbits + .hidden bar_float # -- Begin function bar_float + .globl bar_float + .type bar_float,@function +bar_float: # @bar_float + .param i32 +# BB#0: # %entry + i32.const $push0=, 1086324736 + i32.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar_float, .Lfunc_end1-bar_float + # -- End function + .section .text.baz_float,"ax",@progbits + .hidden baz_float # -- Begin function baz_float + .globl baz_float + .type baz_float,@function +baz_float: # @baz_float + .param i32 +# BB#0: # %entry + i32.const $push0=, 1082130432 + i32.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size baz_float, .Lfunc_end2-baz_float + # -- End function + .section .text.foo_double,"ax",@progbits + .hidden foo_double # -- Begin function foo_double + .globl foo_double + .type foo_double,@function +foo_double: # @foo_double + .param i32, i32 +# BB#0: # %entry + i32.const $push0=, -1 + i32.add $push1=, $1, $pop0 + f64.convert_s/i32 $push2=, $pop1 + f64.store 8($0), $pop2 + i32.const $push3=, 1 + i32.add $push4=, $1, $pop3 + f64.convert_s/i32 $push5=, $pop4 + f64.store 0($0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end3: + .size foo_double, .Lfunc_end3-foo_double + # -- End function + .section .text.bar_double,"ax",@progbits + .hidden bar_double # -- Begin function bar_double + .globl bar_double + .type bar_double,@function +bar_double: # @bar_double + .param i32 +# BB#0: # %entry + i64.const $push0=, 4618441417868443648 + i64.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end4: + .size bar_double, .Lfunc_end4-bar_double + # -- End function + .section .text.baz_double,"ax",@progbits + .hidden baz_double # -- Begin function baz_double + .globl baz_double + .type baz_double,@function +baz_double: # @baz_double + .param i32 +# BB#0: # %entry + i64.const $push0=, 4616189618054758400 + i64.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end5: + .size baz_double, .Lfunc_end5-baz_double + # -- End function + .section .text.foo_ldouble_t,"ax",@progbits + .hidden foo_ldouble_t # -- Begin function foo_ldouble_t + .globl foo_ldouble_t + .type foo_ldouble_t,@function +foo_ldouble_t: # @foo_ldouble_t + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push17=, 0 + i32.const $push15=, 0 + i32.load $push14=, __stack_pointer($pop15) + i32.const $push16=, 32 + i32.sub $push28=, $pop14, $pop16 + tee_local $push27=, $2=, $pop28 + i32.store __stack_pointer($pop17), $pop27 + i32.const $push0=, -1 + i32.add $push1=, $1, $pop0 + call __floatsitf@FUNCTION, $2, $pop1 + i32.const $push2=, 24 + i32.add $push3=, $0, $pop2 + i32.const $push4=, 8 + i32.add $push5=, $2, $pop4 + i64.load $push6=, 0($pop5) + i64.store 0($pop3), $pop6 + i64.load $push7=, 0($2) + i64.store 16($0), $pop7 + i32.const $push21=, 16 + i32.add $push22=, $2, $pop21 + i32.const $push8=, 1 + i32.add $push9=, $1, $pop8 + call __floatsitf@FUNCTION, $pop22, $pop9 + i32.const $push26=, 8 + i32.add $push10=, $0, $pop26 + i32.const $push23=, 16 + i32.add $push24=, $2, $pop23 + i32.const $push25=, 8 + i32.add $push11=, $pop24, $pop25 + i64.load $push12=, 0($pop11) + i64.store 0($pop10), $pop12 + i64.load $push13=, 16($2) + i64.store 0($0), $pop13 + i32.const $push20=, 0 + i32.const $push18=, 32 + i32.add $push19=, $2, $pop18 + i32.store __stack_pointer($pop20), $pop19 + # fallthrough-return + .endfunc +.Lfunc_end6: + .size foo_ldouble_t, .Lfunc_end6-foo_ldouble_t + # -- End function + .section .text.bar_ldouble_t,"ax",@progbits + .hidden bar_ldouble_t # -- Begin function bar_ldouble_t + .globl bar_ldouble_t + .type bar_ldouble_t,@function +bar_ldouble_t: # @bar_ldouble_t + .param i32 +# BB#0: # %entry + i64.const $push0=, 0 + i64.store 0($0), $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i64.const $push3=, 4612108230892453888 + i64.store 0($pop2), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end7: + .size bar_ldouble_t, .Lfunc_end7-bar_ldouble_t + # -- End function + .section .text.baz_ldouble_t,"ax",@progbits + .hidden baz_ldouble_t # -- Begin function baz_ldouble_t + .globl baz_ldouble_t + .type baz_ldouble_t,@function +baz_ldouble_t: # @baz_ldouble_t + .param i32 +# BB#0: # %entry + i64.const $push0=, 0 + i64.store 0($0), $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i64.const $push3=, 4611967493404098560 + i64.store 0($pop2), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end8: + .size baz_ldouble_t, .Lfunc_end8-baz_ldouble_t + # -- End function + .section .text.foo_char,"ax",@progbits + .hidden foo_char # -- Begin function foo_char + .globl foo_char + .type foo_char,@function +foo_char: # @foo_char + .param i32, i32 +# BB#0: # %entry + i32.const $push0=, 255 + i32.add $push1=, $1, $pop0 + i32.store8 1($0), $pop1 + i32.const $push2=, 1 + i32.add $push3=, $1, $pop2 + i32.store8 0($0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end9: + .size foo_char, .Lfunc_end9-foo_char + # -- End function + .section .text.bar_char,"ax",@progbits + .hidden bar_char # -- Begin function bar_char + .globl bar_char + .type bar_char,@function +bar_char: # @bar_char + .param i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.store8 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end10: + .size bar_char, .Lfunc_end10-bar_char + # -- End function + .section .text.baz_char,"ax",@progbits + .hidden baz_char # -- Begin function baz_char + .globl baz_char + .type baz_char,@function +baz_char: # @baz_char + .param i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.store8 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end11: + .size baz_char, .Lfunc_end11-baz_char + # -- End function + .section .text.foo_short,"ax",@progbits + .hidden foo_short # -- Begin function foo_short + .globl foo_short + .type foo_short,@function +foo_short: # @foo_short + .param i32, i32 +# BB#0: # %entry + i32.const $push0=, 65535 + i32.add $push1=, $1, $pop0 + i32.store16 2($0), $pop1 + i32.const $push2=, 1 + i32.add $push3=, $1, $pop2 + i32.store16 0($0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end12: + .size foo_short, .Lfunc_end12-foo_short + # -- End function + .section .text.bar_short,"ax",@progbits + .hidden bar_short # -- Begin function bar_short + .globl bar_short + .type bar_short,@function +bar_short: # @bar_short + .param i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.store16 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end13: + .size bar_short, .Lfunc_end13-bar_short + # -- End function + .section .text.baz_short,"ax",@progbits + .hidden baz_short # -- Begin function baz_short + .globl baz_short + .type baz_short,@function +baz_short: # @baz_short + .param i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.store16 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end14: + .size baz_short, .Lfunc_end14-baz_short + # -- End function + .section .text.foo_int,"ax",@progbits + .hidden foo_int # -- Begin function foo_int + .globl foo_int + .type foo_int,@function +foo_int: # @foo_int + .param i32, i32 +# BB#0: # %entry + i32.const $push0=, -1 + i32.add $push1=, $1, $pop0 + i32.store 4($0), $pop1 + i32.const $push2=, 1 + i32.add $push3=, $1, $pop2 + i32.store 0($0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end15: + .size foo_int, .Lfunc_end15-foo_int + # -- End function + .section .text.bar_int,"ax",@progbits + .hidden bar_int # -- Begin function bar_int + .globl bar_int + .type bar_int,@function +bar_int: # @bar_int + .param i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end16: + .size bar_int, .Lfunc_end16-bar_int + # -- End function + .section .text.baz_int,"ax",@progbits + .hidden baz_int # -- Begin function baz_int + .globl baz_int + .type baz_int,@function +baz_int: # @baz_int + .param i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end17: + .size baz_int, .Lfunc_end17-baz_int + # -- End function + .section .text.foo_long,"ax",@progbits + .hidden foo_long # -- Begin function foo_long + .globl foo_long + .type foo_long,@function +foo_long: # @foo_long + .param i32, i32 +# BB#0: # %entry + i32.const $push0=, -1 + i32.add $push1=, $1, $pop0 + i32.store 4($0), $pop1 + i32.const $push2=, 1 + i32.add $push3=, $1, $pop2 + i32.store 0($0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end18: + .size foo_long, .Lfunc_end18-foo_long + # -- End function + .section .text.bar_long,"ax",@progbits + .hidden bar_long # -- Begin function bar_long + .globl bar_long + .type bar_long,@function +bar_long: # @bar_long + .param i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end19: + .size bar_long, .Lfunc_end19-bar_long + # -- End function + .section .text.baz_long,"ax",@progbits + .hidden baz_long # -- Begin function baz_long + .globl baz_long + .type baz_long,@function +baz_long: # @baz_long + .param i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end20: + .size baz_long, .Lfunc_end20-baz_long + # -- End function + .section .text.foo_llong,"ax",@progbits + .hidden foo_llong # -- Begin function foo_llong + .globl foo_llong + .type foo_llong,@function +foo_llong: # @foo_llong + .param i32, i32 +# BB#0: # %entry + i32.const $push0=, -1 + i32.add $push1=, $1, $pop0 + i64.extend_s/i32 $push2=, $pop1 + i64.store 8($0), $pop2 + i32.const $push3=, 1 + i32.add $push4=, $1, $pop3 + i64.extend_s/i32 $push5=, $pop4 + i64.store 0($0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end21: + .size foo_llong, .Lfunc_end21-foo_llong + # -- End function + .section .text.bar_llong,"ax",@progbits + .hidden bar_llong # -- Begin function bar_llong + .globl bar_llong + .type bar_llong,@function +bar_llong: # @bar_llong + .param i32 +# BB#0: # %entry + i64.const $push0=, 6 + i64.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end22: + .size bar_llong, .Lfunc_end22-bar_llong + # -- End function + .section .text.baz_llong,"ax",@progbits + .hidden baz_llong # -- Begin function baz_llong + .globl baz_llong + .type baz_llong,@function +baz_llong: # @baz_llong + .param i32 +# BB#0: # %entry + i64.const $push0=, 4 + i64.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end23: + .size baz_llong, .Lfunc_end23-baz_llong + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end65 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end24: + .size main, .Lfunc_end24-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20050124-1.c.s b/src/binaryen/test/torture-s/20050124-1.c.s new file mode 100644 index 0000000000..9142a27ea5 --- /dev/null +++ b/src/binaryen/test/torture-s/20050124-1.c.s @@ -0,0 +1,52 @@ + .text + .file "20050124-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.add $2=, $0, $pop0 + block + block + i32.eqz $push7=, $1 + br_if 0, $pop7 # 0: down to label1 +# BB#1: # %if.then + i32.const $push1=, 0 + i32.lt_s $push2=, $0, $pop1 + br_if 1, $pop2 # 1: down to label0 +# BB#2: # %if.then1 + i32.const $push6=, 2 + i32.add $2=, $0, $pop6 +.LBB0_3: # %if.end5 + end_block # label1: + return $2 +.LBB0_4: # %if.else + end_block # label0: + i32.const $push3=, -1 + i32.eq $push4=, $0, $pop3 + i32.select $push5=, $2, $0, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end28 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20050125-1.c.s b/src/binaryen/test/torture-s/20050125-1.c.s new file mode 100644 index 0000000000..a116e417ff --- /dev/null +++ b/src/binaryen/test/torture-s/20050125-1.c.s @@ -0,0 +1,67 @@ + .text + .file "20050125-1.c" + .section .text.seterr,"ax",@progbits + .hidden seterr # -- Begin function seterr + .globl seterr + .type seterr,@function +seterr: # @seterr + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.store 8($0), $1 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size seterr, .Lfunc_end0-seterr + # -- End function + .section .text.bracket_empty,"ax",@progbits + .hidden bracket_empty # -- Begin function bracket_empty + .globl bracket_empty + .type bracket_empty,@function +bracket_empty: # @bracket_empty + .param i32 + .local i32 +# BB#0: # %entry + block + block + i32.load $push9=, 0($0) + tee_local $push8=, $1=, $pop9 + i32.load $push0=, 4($0) + i32.ge_u $push1=, $pop8, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %land.lhs.true + i32.const $push2=, 1 + i32.add $push3=, $1, $pop2 + i32.store 0($0), $pop3 + i32.load8_u $push4=, 0($1) + i32.const $push5=, 93 + i32.eq $push6=, $pop4, $pop5 + br_if 1, $pop6 # 1: down to label0 +.LBB1_2: # %lor.lhs.false + end_block # label1: + i32.const $push7=, 7 + i32.store 8($0), $pop7 +.LBB1_3: # %if.end + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bracket_empty, .Lfunc_end1-bracket_empty + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20050131-1.c.s b/src/binaryen/test/torture-s/20050131-1.c.s new file mode 100644 index 0000000000..effe27a1c7 --- /dev/null +++ b/src/binaryen/test/torture-s/20050131-1.c.s @@ -0,0 +1,34 @@ + .text + .file "20050131-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.add $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20050203-1.c.s b/src/binaryen/test/torture-s/20050203-1.c.s new file mode 100644 index 0000000000..a027df4808 --- /dev/null +++ b/src/binaryen/test/torture-s/20050203-1.c.s @@ -0,0 +1,65 @@ + .text + .file "20050203-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push10=, $pop3, $pop5 + tee_local $push9=, $0=, $pop10 + i32.store __stack_pointer($pop6), $pop9 + i32.const $push7=, 15 + i32.add $push8=, $0, $pop7 + call foo@FUNCTION, $pop8 + i32.load8_s $0=, 15($0) + call bar@FUNCTION + block + i32.const $push0=, -1 + i32.gt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.then + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable +.LBB0_2: # %if.else + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.foo,"ax",@progbits + .type foo,@function # -- Begin function foo +foo: # @foo + .param i32 +# BB#0: # %entry + i32.const $push0=, 129 + i32.store8 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.bar,"ax",@progbits + .type bar,@function # -- Begin function bar +bar: # @bar +# BB#0: # %entry + #APP + #NO_APP + # fallthrough-return + .endfunc +.Lfunc_end2: + .size bar, .Lfunc_end2-bar + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20050215-1.c.s b/src/binaryen/test/torture-s/20050215-1.c.s new file mode 100644 index 0000000000..939ddad3c4 --- /dev/null +++ b/src/binaryen/test/torture-s/20050215-1.c.s @@ -0,0 +1,60 @@ + .text + .file "20050215-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + block + block + i32.const $push13=, v + i32.const $push0=, 4 + i32.and $push1=, $pop13, $pop0 + i32.eqz $push17=, $pop1 + br_if 0, $pop17 # 0: down to label2 +# BB#1: # %if.then + i32.const $push14=, v + i32.const $push10=, 7 + i32.and $push11=, $pop14, $pop10 + i32.eqz $push18=, $pop11 + br_if 1, $pop18 # 1: down to label1 + br 2 # 2: down to label0 +.LBB0_2: # %lor.lhs.false + end_block # label2: + i32.const $push16=, v + i32.const $push6=, 1 + i32.and $push7=, $pop16, $pop6 + i32.eqz $push8=, $pop7 + i32.const $push15=, v + i32.const $push2=, 7 + i32.and $push3=, $pop15, $pop2 + i32.const $push4=, 0 + i32.ne $push5=, $pop3, $pop4 + i32.or $push9=, $pop8, $pop5 + br_if 1, $pop9 # 1: down to label0 +.LBB0_3: # %if.then2 + end_block # label1: + call abort@FUNCTION + unreachable +.LBB0_4: # %if.end3 + end_block # label0: + i32.const $push12=, 0 + # fallthrough-return: $pop12 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden v # @v + .type v,@object + .section .bss.v,"aw",@nobits + .globl v +v: + .skip 8 + .size v, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20050218-1.c.s b/src/binaryen/test/torture-s/20050218-1.c.s new file mode 100644 index 0000000000..88e221871e --- /dev/null +++ b/src/binaryen/test/torture-s/20050218-1.c.s @@ -0,0 +1,166 @@ + .text + .file "20050218-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + block + block + i32.eqz $push14=, $2 + br_if 0, $pop14 # 0: down to label1 +# BB#1: # %for.body.lr.ph + i32.const $5=, 0 + i32.const $4=, a + i32.const $6=, 0 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.add $push0=, $0, $5 + i32.load $push9=, 0($4) + tee_local $push8=, $3=, $pop9 + i32.call $push7=, strlen@FUNCTION, $3 + tee_local $push6=, $3=, $pop7 + i32.call $push1=, strncmp@FUNCTION, $pop0, $pop8, $pop6 + br_if 2, $pop1 # 2: down to label0 +# BB#3: # %if.end + # in Loop: Header=BB0_2 Depth=1 + i32.add $5=, $3, $5 + block + i32.eqz $push15=, $1 + br_if 0, $pop15 # 0: down to label3 +# BB#4: # %if.then6 + # in Loop: Header=BB0_2 Depth=1 + i32.call $push2=, strlen@FUNCTION, $1 + i32.add $5=, $pop2, $5 +.LBB0_5: # %for.inc + # in Loop: Header=BB0_2 Depth=1 + end_block # label3: + i32.const $push13=, 4 + i32.add $4=, $4, $pop13 + i32.const $push12=, 1 + i32.add $push11=, $6, $pop12 + tee_local $push10=, $6=, $pop11 + i32.lt_u $push3=, $pop10, $2 + br_if 0, $pop3 # 0: up to label2 +.LBB0_6: + end_loop + end_block # label1: + i32.const $push4=, 0 + return $pop4 +.LBB0_7: + end_block # label0: + i32.const $push5=, 2 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + block + i32.const $push13=, .L.str.4 + i32.const $push12=, 0 + i32.load $push11=, a($pop12) + tee_local $push10=, $0=, $pop11 + i32.call $push9=, strlen@FUNCTION, $0 + tee_local $push8=, $0=, $pop9 + i32.call $push0=, strncmp@FUNCTION, $pop13, $pop10, $pop8 + br_if 0, $pop0 # 0: down to label4 +# BB#1: # %if.end.i + i32.const $push19=, .L.str.4 + i32.add $push1=, $0, $pop19 + i32.const $push18=, 0 + i32.load $push17=, a+4($pop18) + tee_local $push16=, $1=, $pop17 + i32.call $push15=, strlen@FUNCTION, $1 + tee_local $push14=, $1=, $pop15 + i32.call $push2=, strncmp@FUNCTION, $pop1, $pop16, $pop14 + br_if 0, $pop2 # 0: down to label4 +# BB#2: # %if.end.i.1 + i32.add $push3=, $1, $0 + i32.const $push4=, .L.str.4 + i32.add $push5=, $pop3, $pop4 + i32.const $push22=, 0 + i32.load $push21=, a+8($pop22) + tee_local $push20=, $0=, $pop21 + i32.call $push6=, strlen@FUNCTION, $0 + i32.call $push7=, strncmp@FUNCTION, $pop5, $pop20, $pop6 + br_if 0, $pop7 # 0: down to label4 +# BB#3: # %if.end.i.2 + i32.const $push23=, 0 + return $pop23 +.LBB1_4: # %if.then + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "a" + .size .L.str, 2 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "bc" + .size .L.str.1, 3 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "de" + .size .L.str.2, 3 + + .type .L.str.3,@object # @.str.3 +.L.str.3: + .asciz "fgh" + .size .L.str.3, 4 + + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 4 +a: + .int32 .L.str + .int32 .L.str.1 + .int32 .L.str.2 + .int32 .L.str.3 + .int32 0 + .int32 0 + .int32 0 + .int32 0 + .int32 0 + .int32 0 + .int32 0 + .int32 0 + .int32 0 + .int32 0 + .int32 0 + .int32 0 + .size a, 64 + + .type .L.str.4,@object # @.str.4 + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str.4: + .asciz "abcde" + .size .L.str.4, 6 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strncmp, i32, i32, i32, i32 + .functype strlen, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20050224-1.c.s b/src/binaryen/test/torture-s/20050224-1.c.s new file mode 100644 index 0000000000..8e6791858d --- /dev/null +++ b/src/binaryen/test/torture-s/20050224-1.c.s @@ -0,0 +1,181 @@ + .text + .file "20050224-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 +# BB#0: # %entry + block + i32.const $push0=, 245 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %entry + i32.const $push2=, 36 + i32.ne $push3=, $1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %entry + i32.const $push4=, 444 + i32.ne $push5=, $2, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#3: # %if.end + return +.LBB0_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $8=, 0 + block + i32.const $push18=, 0 + i32.load $push17=, a($pop18) + tee_local $push16=, $5=, $pop17 + i32.const $push15=, 0 + i32.load $push14=, b($pop15) + tee_local $push13=, $0=, $pop14 + i32.ge_u $push0=, $pop16, $pop13 + br_if 0, $pop0 # 0: down to label1 +# BB#1: # %for.body.lr.ph + i32.const $push22=, 0 + i32.load $4=, f($pop22) + i32.const $push21=, 0 + i32.load $3=, e($pop21) + i32.const $push20=, 0 + i32.load $2=, d($pop20) + i32.const $push19=, 0 + i32.load $1=, c($pop19) + i32.const $7=, 0 + i32.const $6=, 0 +.LBB1_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + block + block + i32.ge_u $push1=, $5, $1 + br_if 0, $pop1 # 0: down to label4 +# BB#3: # %if.then + # in Loop: Header=BB1_2 Depth=1 + i32.const $push23=, 1 + i32.add $6=, $6, $pop23 + br 1 # 1: down to label3 +.LBB1_4: # %if.else + # in Loop: Header=BB1_2 Depth=1 + end_block # label4: + block + i32.lt_u $push2=, $5, $2 + br_if 0, $pop2 # 0: down to label5 +# BB#5: # %if.else + # in Loop: Header=BB1_2 Depth=1 + i32.ge_u $push3=, $5, $3 + br_if 0, $pop3 # 0: down to label5 +# BB#6: # %if.then4 + # in Loop: Header=BB1_2 Depth=1 + i32.const $push24=, 1 + i32.add $8=, $8, $pop24 + br 1 # 1: down to label3 +.LBB1_7: # %if.else6 + # in Loop: Header=BB1_2 Depth=1 + end_block # label5: + i32.lt_u $push4=, $5, $4 + i32.add $7=, $7, $pop4 +.LBB1_8: # %for.inc + # in Loop: Header=BB1_2 Depth=1 + end_block # label3: + i32.const $push27=, 4096 + i32.add $push26=, $5, $pop27 + tee_local $push25=, $5=, $pop26 + i32.lt_u $push5=, $pop25, $0 + br_if 0, $pop5 # 0: up to label2 +# BB#9: # %for.end + end_loop + i32.const $push6=, 444 + i32.ne $push7=, $6, $pop6 + br_if 0, $pop7 # 0: down to label1 +# BB#10: # %for.end + i32.const $push8=, 245 + i32.ne $push9=, $7, $pop8 + br_if 0, $pop9 # 0: down to label1 +# BB#11: # %for.end + i32.const $push10=, 36 + i32.ne $push11=, $8, $pop10 + br_if 0, $pop11 # 0: down to label1 +# BB#12: # %foo.exit + i32.const $push12=, 0 + return $pop12 +.LBB1_13: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 3221225472 # 0xc0000000 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .data.b,"aw",@progbits + .globl b + .p2align 2 +b: + .int32 3489660928 # 0xd0000000 + .size b, 4 + + .hidden c # @c + .type c,@object + .section .data.c,"aw",@progbits + .globl c + .p2align 2 +c: + .int32 3223042392 # 0xc01bb958 + .size c, 4 + + .hidden d # @d + .type d,@object + .section .data.d,"aw",@progbits + .globl d + .p2align 2 +d: + .int32 3223732224 # 0xc0264000 + .size d, 4 + + .hidden e # @e + .type e,@object + .section .data.e,"aw",@progbits + .globl e + .p2align 2 +e: + .int32 3223879680 # 0xc0288000 + .size e, 4 + + .hidden f # @f + .type f,@object + .section .data.f,"aw",@progbits + .globl f + .p2align 2 +f: + .int32 3224191864 # 0xc02d4378 + .size f, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20050316-1.c.s b/src/binaryen/test/torture-s/20050316-1.c.s new file mode 100644 index 0000000000..c900f563c2 --- /dev/null +++ b/src/binaryen/test/torture-s/20050316-1.c.s @@ -0,0 +1,97 @@ + .text + .file "20050316-1.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param i32, i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size test2, .Lfunc_end1-test2 + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 0 + i32.store 0($pop1), $pop2 + i32.const $push3=, 0 + i32.store 0($0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size test3, .Lfunc_end2-test3 + # -- End function + .section .text.test4,"ax",@progbits + .hidden test4 # -- Begin function test4 + .globl test4 + .type test4,@function +test4: # @test4 + .param i32, i32, i32 +# BB#0: # %entry + i32.const $push2=, 65535 + i32.and $push3=, $1, $pop2 + i32.const $push0=, 16 + i32.shl $push1=, $2, $pop0 + i32.or $push4=, $pop3, $pop1 + i64.extend_s/i32 $push5=, $pop4 + i64.store 0($0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end3: + .size test4, .Lfunc_end3-test4 + # -- End function + .section .text.test5,"ax",@progbits + .hidden test5 # -- Begin function test5 + .globl test5 + .type test5,@function +test5: # @test5 + .param i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.add $push1=, $0, $pop0 + i32.store 0($pop1), $2 + i32.store 0($0), $1 + # fallthrough-return + .endfunc +.Lfunc_end4: + .size test5, .Lfunc_end4-test5 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end30 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end5: + .size main, .Lfunc_end5-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20050316-2.c.s b/src/binaryen/test/torture-s/20050316-2.c.s new file mode 100644 index 0000000000..614abc3f6c --- /dev/null +++ b/src/binaryen/test/torture-s/20050316-2.c.s @@ -0,0 +1,75 @@ + .text + .file "20050316-2.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param f32, f32 + .result i64 +# BB#0: # %entry + i32.reinterpret/f32 $push4=, $0 + i64.extend_u/i32 $push5=, $pop4 + i32.reinterpret/f32 $push0=, $1 + i64.extend_u/i32 $push1=, $pop0 + i64.const $push2=, 32 + i64.shl $push3=, $pop1, $pop2 + i64.or $push6=, $pop5, $pop3 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param f32, f32 + .result i64 +# BB#0: # %entry + i32.reinterpret/f32 $push4=, $0 + i64.extend_u/i32 $push5=, $pop4 + i32.reinterpret/f32 $push0=, $1 + i64.extend_u/i32 $push1=, $pop0 + i64.const $push2=, 32 + i64.shl $push3=, $pop1, $pop2 + i64.or $push6=, $pop5, $pop3 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end1: + .size test2, .Lfunc_end1-test2 + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .param i32, i32 + .result i64 +# BB#0: # %entry + i64.extend_u/i32 $push3=, $0 + i64.extend_u/i32 $push0=, $1 + i64.const $push1=, 32 + i64.shl $push2=, $pop0, $pop1 + i64.or $push4=, $pop3, $pop2 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end2: + .size test3, .Lfunc_end2-test3 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end33 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20050316-3.c.s b/src/binaryen/test/torture-s/20050316-3.c.s new file mode 100644 index 0000000000..dea6387ed2 --- /dev/null +++ b/src/binaryen/test/torture-s/20050316-3.c.s @@ -0,0 +1,51 @@ + .text + .file "20050316-3.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.add $push1=, $0, $pop0 + i32.store 0($pop1), $2 + i32.store 0($0), $1 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param i32, i32 + .result i64 +# BB#0: # %entry + i64.extend_u/i32 $push3=, $0 + i64.extend_u/i32 $push0=, $1 + i64.const $push1=, 32 + i64.shl $push2=, $pop0, $pop1 + i64.or $push4=, $pop3, $pop2 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end1: + .size test2, .Lfunc_end1-test2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end13 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20050410-1.c.s b/src/binaryen/test/torture-s/20050410-1.c.s new file mode 100644 index 0000000000..c1e6327f3b --- /dev/null +++ b/src/binaryen/test/torture-s/20050410-1.c.s @@ -0,0 +1,61 @@ + .text + .file "20050410-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, s($pop0) + i32.const $push2=, 24 + i32.shl $push3=, $pop1, $pop2 + i32.const $push4=, -1677721600 + i32.add $push5=, $pop3, $pop4 + i32.const $push9=, 24 + i32.shr_s $push6=, $pop5, $pop9 + i32.const $push7=, -5 + i32.add $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.call $push1=, foo@FUNCTION + i32.const $push0=, 95 + i32.ne $push2=, $pop1, $pop0 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden s # @s + .type s,@object + .section .data.s,"aw",@progbits + .globl s + .p2align 2 +s: + .int32 200 # 0xc8 + .size s, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20050502-1.c.s b/src/binaryen/test/torture-s/20050502-1.c.s new file mode 100644 index 0000000000..11d1c0b49c --- /dev/null +++ b/src/binaryen/test/torture-s/20050502-1.c.s @@ -0,0 +1,324 @@ + .text + .file "20050502-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.load $push4=, 0($0) + tee_local $push3=, $1=, $pop4 + i32.const $push0=, 1 + i32.add $push1=, $pop3, $pop0 + i32.store 0($0), $pop1 + i32.load8_s $push2=, 0($1) + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 64 + i32.ne $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size baz, .Lfunc_end1-baz + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32, i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.call $push1=, bar@FUNCTION, $0 + i32.store8 0($1), $pop1 + i32.const $7=, 1 + block + i32.call $push21=, bar@FUNCTION, $0 + tee_local $push20=, $6=, $pop21 + i32.const $push2=, 255 + i32.and $push19=, $pop20, $pop2 + tee_local $push18=, $5=, $pop19 + i32.const $push5=, 39 + i32.eq $push6=, $pop18, $pop5 + i32.and $push7=, $pop6, $2 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %entry + i32.const $push3=, 34 + i32.eq $push4=, $5, $pop3 + i32.and $push0=, $pop4, $3 + br_if 0, $pop0 # 0: down to label0 +# BB#2: # %if.end14.lr.ph + i32.or $4=, $2, $3 + i32.const $7=, 1 +.LBB2_3: # %if.end14 + # =>This Inner Loop Header: Depth=1 + loop # label1: + block + br_if 0, $4 # 0: down to label2 +# BB#4: # %land.lhs.true18 + # in Loop: Header=BB2_3 Depth=1 + i32.const $push23=, 24 + i32.shl $push8=, $6, $pop23 + i32.const $push22=, 24 + i32.shr_s $push9=, $pop8, $pop22 + i32.call $push10=, baz@FUNCTION, $pop9 + i32.eqz $push32=, $pop10 + br_if 2, $pop32 # 2: down to label0 +.LBB2_5: # %if.end23 + # in Loop: Header=BB2_3 Depth=1 + end_block # label2: + i32.add $push12=, $1, $7 + i32.store8 0($pop12), $6 + i32.const $push30=, 1 + i32.add $7=, $7, $pop30 + i32.call $push29=, bar@FUNCTION, $0 + tee_local $push28=, $6=, $pop29 + i32.const $push27=, 255 + i32.and $push26=, $pop28, $pop27 + tee_local $push25=, $5=, $pop26 + i32.const $push24=, 39 + i32.eq $push14=, $pop25, $pop24 + i32.and $push15=, $pop14, $2 + br_if 1, $pop15 # 1: down to label0 +# BB#6: # %if.end23 + # in Loop: Header=BB2_3 Depth=1 + i32.const $push31=, 34 + i32.eq $push13=, $5, $pop31 + i32.and $push11=, $pop13, $3 + i32.eqz $push33=, $pop11 + br_if 0, $pop33 # 0: up to label1 +.LBB2_7: # %while.end + end_loop + end_block # label0: + i32.add $push16=, $1, $7 + i32.const $push17=, 0 + i32.store8 0($pop16), $pop17 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size foo, .Lfunc_end2-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push41=, 0 + i32.const $push39=, 0 + i32.load $push38=, __stack_pointer($pop39) + i32.const $push40=, 80 + i32.sub $push76=, $pop38, $pop40 + tee_local $push75=, $0=, $pop76 + i32.store __stack_pointer($pop41), $pop75 + i32.const $push0=, .L.str + i32.store 12($0), $pop0 + i32.const $push45=, 12 + i32.add $push46=, $0, $pop45 + i32.const $push47=, 16 + i32.add $push48=, $0, $pop47 + i32.const $push2=, 1 + i32.const $push1=, 0 + call foo@FUNCTION, $pop46, $pop48, $pop2, $pop1 + block + i32.load $push4=, 12($0) + i32.const $push3=, .L.str.1 + i32.call $push5=, strcmp@FUNCTION, $pop4, $pop3 + br_if 0, $pop5 # 0: down to label3 +# BB#1: # %lor.lhs.false + i32.const $push49=, 16 + i32.add $push50=, $0, $pop49 + i32.const $push6=, .L.str.2 + i32.call $push7=, strcmp@FUNCTION, $pop50, $pop6 + br_if 0, $pop7 # 0: down to label3 +# BB#2: # %if.end + i32.const $push8=, .L.str.3 + i32.store 12($0), $pop8 + i32.const $push51=, 12 + i32.add $push52=, $0, $pop51 + i32.const $push53=, 16 + i32.add $push54=, $0, $pop53 + i32.const $push10=, 0 + i32.const $push9=, 1 + call foo@FUNCTION, $pop52, $pop54, $pop10, $pop9 + i32.load $push12=, 12($0) + i32.const $push11=, .L.str.4 + i32.call $push13=, strcmp@FUNCTION, $pop12, $pop11 + br_if 0, $pop13 # 0: down to label3 +# BB#3: # %lor.lhs.false7 + i32.const $push55=, 16 + i32.add $push56=, $0, $pop55 + i32.const $push14=, .L.str.5 + i32.call $push15=, strcmp@FUNCTION, $pop56, $pop14 + br_if 0, $pop15 # 0: down to label3 +# BB#4: # %if.end12 + i32.const $push16=, .L.str.6 + i32.store 12($0), $pop16 + i32.const $push57=, 12 + i32.add $push58=, $0, $pop57 + i32.const $push59=, 16 + i32.add $push60=, $0, $pop59 + i32.const $push17=, 1 + i32.const $push77=, 1 + call foo@FUNCTION, $pop58, $pop60, $pop17, $pop77 + i32.load $push19=, 12($0) + i32.const $push18=, .L.str.7 + i32.call $push20=, strcmp@FUNCTION, $pop19, $pop18 + br_if 0, $pop20 # 0: down to label3 +# BB#5: # %lor.lhs.false16 + i32.const $push61=, 16 + i32.add $push62=, $0, $pop61 + i32.const $push21=, .L.str.8 + i32.call $push22=, strcmp@FUNCTION, $pop62, $pop21 + br_if 0, $pop22 # 0: down to label3 +# BB#6: # %if.end21 + i32.const $push23=, .L.str.9 + i32.store 12($0), $pop23 + i32.const $push63=, 12 + i32.add $push64=, $0, $pop63 + i32.const $push65=, 16 + i32.add $push66=, $0, $pop65 + i32.const $push24=, 1 + i32.const $push78=, 1 + call foo@FUNCTION, $pop64, $pop66, $pop24, $pop78 + i32.load $push26=, 12($0) + i32.const $push25=, .L.str.10 + i32.call $push27=, strcmp@FUNCTION, $pop26, $pop25 + br_if 0, $pop27 # 0: down to label3 +# BB#7: # %lor.lhs.false25 + i32.const $push67=, 16 + i32.add $push68=, $0, $pop67 + i32.const $push28=, .L.str.11 + i32.call $push29=, strcmp@FUNCTION, $pop68, $pop28 + br_if 0, $pop29 # 0: down to label3 +# BB#8: # %if.end30 + i32.const $push30=, .L.str.12 + i32.store 12($0), $pop30 + i32.const $push69=, 12 + i32.add $push70=, $0, $pop69 + i32.const $push71=, 16 + i32.add $push72=, $0, $pop71 + i32.const $push31=, 0 + i32.const $push79=, 0 + call foo@FUNCTION, $pop70, $pop72, $pop31, $pop79 + i32.load $push33=, 12($0) + i32.const $push32=, .L.str.13 + i32.call $push34=, strcmp@FUNCTION, $pop33, $pop32 + br_if 0, $pop34 # 0: down to label3 +# BB#9: # %lor.lhs.false34 + i32.const $push73=, 16 + i32.add $push74=, $0, $pop73 + i32.const $push35=, .L.str.14 + i32.call $push36=, strcmp@FUNCTION, $pop74, $pop35 + br_if 0, $pop36 # 0: down to label3 +# BB#10: # %if.end39 + i32.const $push44=, 0 + i32.const $push42=, 80 + i32.add $push43=, $0, $pop42 + i32.store __stack_pointer($pop44), $pop43 + i32.const $push37=, 0 + return $pop37 +.LBB3_11: # %if.then + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "abcde'fgh" + .size .L.str, 10 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "fgh" + .size .L.str.1, 4 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "abcde" + .size .L.str.2, 6 + + .type .L.str.3,@object # @.str.3 +.L.str.3: + .asciz "ABCDEFG\"HI" + .size .L.str.3, 11 + + .type .L.str.4,@object # @.str.4 +.L.str.4: + .asciz "HI" + .size .L.str.4, 3 + + .type .L.str.5,@object # @.str.5 +.L.str.5: + .asciz "ABCDEFG" + .size .L.str.5, 8 + + .type .L.str.6,@object # @.str.6 +.L.str.6: + .asciz "abcd\"e'fgh" + .size .L.str.6, 11 + + .type .L.str.7,@object # @.str.7 +.L.str.7: + .asciz "e'fgh" + .size .L.str.7, 6 + + .type .L.str.8,@object # @.str.8 +.L.str.8: + .asciz "abcd" + .size .L.str.8, 5 + + .type .L.str.9,@object # @.str.9 +.L.str.9: + .asciz "ABCDEF'G\"HI" + .size .L.str.9, 12 + + .type .L.str.10,@object # @.str.10 +.L.str.10: + .asciz "G\"HI" + .size .L.str.10, 5 + + .type .L.str.11,@object # @.str.11 +.L.str.11: + .asciz "ABCDEF" + .size .L.str.11, 7 + + .type .L.str.12,@object # @.str.12 +.L.str.12: + .asciz "abcdef@gh" + .size .L.str.12, 10 + + .type .L.str.13,@object # @.str.13 +.L.str.13: + .asciz "gh" + .size .L.str.13, 3 + + .type .L.str.14,@object # @.str.14 +.L.str.14: + .asciz "abcdef" + .size .L.str.14, 7 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strcmp, i32, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20050502-2.c.s b/src/binaryen/test/torture-s/20050502-2.c.s new file mode 100644 index 0000000000..9e726d5c29 --- /dev/null +++ b/src/binaryen/test/torture-s/20050502-2.c.s @@ -0,0 +1,111 @@ + .text + .file "20050502-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store8 4($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store8 8($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push16=, 0 + i32.const $push14=, 0 + i32.load $push13=, __stack_pointer($pop14) + i32.const $push15=, 16 + i32.sub $push26=, $pop13, $pop15 + tee_local $push25=, $0=, $pop26 + i32.store __stack_pointer($pop16), $pop25 + i32.const $push1=, 10 + i32.add $push2=, $0, $pop1 + i32.const $push24=, 0 + i32.load8_u $push0=, .Lmain.x+10($pop24) + i32.store8 0($pop2), $pop0 + i32.const $push4=, 8 + i32.add $push5=, $0, $pop4 + i32.const $push23=, 0 + i32.load16_u $push3=, .Lmain.x+8($pop23):p2align=0 + i32.store16 0($pop5), $pop3 + i32.const $push22=, 0 + i64.load $push6=, .Lmain.x($pop22):p2align=0 + i64.store 0($0), $pop6 + i32.const $push21=, 0 + i32.store8 4($0), $pop21 + block + i32.const $push7=, .L.str + i32.const $push20=, 11 + i32.call $push8=, memcmp@FUNCTION, $0, $pop7, $pop20 + br_if 0, $pop8 # 0: down to label0 +# BB#1: # %if.end + i32.const $push28=, 0 + i32.store8 8($0), $pop28 + i32.const $push9=, 77 + i32.store8 4($0), $pop9 + i32.const $push10=, .L.str.1 + i32.const $push27=, 11 + i32.call $push11=, memcmp@FUNCTION, $0, $pop10, $pop27 + br_if 0, $pop11 # 0: down to label0 +# BB#2: # %if.end7 + i32.const $push19=, 0 + i32.const $push17=, 16 + i32.add $push18=, $0, $pop17 + i32.store __stack_pointer($pop19), $pop18 + i32.const $push12=, 0 + return $pop12 +.LBB2_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type .Lmain.x,@object # @main.x + .section .rodata.str1.1,"aMS",@progbits,1 +.Lmain.x: + .asciz "IJKLMNOPQR" + .size .Lmain.x, 11 + + .type .L.str,@object # @.str + .section .rodata..L.str,"a",@progbits +.L.str: + .asciz "IJKL\000NOPQR" + .size .L.str, 11 + + .type .L.str.1,@object # @.str.1 + .section .rodata..L.str.1,"a",@progbits +.L.str.1: + .asciz "IJKLMNOP\000R" + .size .L.str.1, 11 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype memcmp, i32, i32, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20050604-1.c.s b/src/binaryen/test/torture-s/20050604-1.c.s new file mode 100644 index 0000000000..42a6da1334 --- /dev/null +++ b/src/binaryen/test/torture-s/20050604-1.c.s @@ -0,0 +1,184 @@ + .text + .file "20050604-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push37=, 0 + i32.load16_u $push1=, u+2($pop37) + i32.const $push2=, 28 + i32.add $push3=, $pop1, $pop2 + i32.store16 u+2($pop0), $pop3 + i32.const $push36=, 0 + i32.const $push35=, 0 + i32.load16_u $push4=, u($pop35) + i32.const $push5=, 24 + i32.add $push6=, $pop4, $pop5 + i32.store16 u($pop36), $pop6 + i32.const $push34=, 0 + i32.const $push33=, 0 + f32.load $push7=, v+12($pop33) + f32.const $push8=, 0x0p0 + f32.add $push9=, $pop7, $pop8 + f32.const $push32=, 0x0p0 + f32.add $push10=, $pop9, $pop32 + f32.store v+12($pop34), $pop10 + i32.const $push31=, 0 + i32.const $push30=, 0 + f32.load $push11=, v+8($pop30) + f32.const $push12=, 0x1.6p4 + f32.add $push13=, $pop11, $pop12 + f32.const $push29=, 0x1.6p4 + f32.add $push14=, $pop13, $pop29 + f32.store v+8($pop31), $pop14 + i32.const $push28=, 0 + i32.const $push27=, 0 + f32.load $push15=, v+4($pop27) + f32.const $push16=, 0x1.4p4 + f32.add $push17=, $pop15, $pop16 + f32.const $push26=, 0x1.4p4 + f32.add $push18=, $pop17, $pop26 + f32.store v+4($pop28), $pop18 + i32.const $push25=, 0 + i32.const $push24=, 0 + f32.load $push19=, v($pop24) + f32.const $push20=, 0x1.2p4 + f32.add $push21=, $pop19, $pop20 + f32.const $push23=, 0x1.2p4 + f32.add $push22=, $pop21, $pop23 + f32.store v($pop25), $pop22 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local f32, f32, f32, f32, i32, i32 +# BB#0: # %entry + i32.const $push63=, 0 + i32.const $push62=, 0 + i32.load16_u $push1=, u+2($pop62) + i32.const $push61=, 28 + i32.add $push60=, $pop1, $pop61 + tee_local $push59=, $4=, $pop60 + i32.store16 u+2($pop63), $pop59 + i32.const $push58=, 0 + i32.const $push57=, 0 + i32.load16_u $push2=, u($pop57) + i32.const $push3=, 24 + i32.add $push56=, $pop2, $pop3 + tee_local $push55=, $5=, $pop56 + i32.store16 u($pop58), $pop55 + i32.const $push54=, 0 + i32.const $push53=, 0 + f32.load $push4=, v+12($pop53) + f32.const $push5=, 0x0p0 + f32.add $push6=, $pop4, $pop5 + f32.const $push52=, 0x0p0 + f32.add $push51=, $pop6, $pop52 + tee_local $push50=, $3=, $pop51 + f32.store v+12($pop54), $pop50 + i32.const $push49=, 0 + i32.const $push48=, 0 + f32.load $push7=, v+8($pop48) + f32.const $push8=, 0x1.6p4 + f32.add $push9=, $pop7, $pop8 + f32.const $push47=, 0x1.6p4 + f32.add $push46=, $pop9, $pop47 + tee_local $push45=, $2=, $pop46 + f32.store v+8($pop49), $pop45 + i32.const $push44=, 0 + i32.const $push43=, 0 + f32.load $push10=, v+4($pop43) + f32.const $push11=, 0x1.4p4 + f32.add $push12=, $pop10, $pop11 + f32.const $push42=, 0x1.4p4 + f32.add $push41=, $pop12, $pop42 + tee_local $push40=, $1=, $pop41 + f32.store v+4($pop44), $pop40 + i32.const $push39=, 0 + i32.const $push38=, 0 + f32.load $push13=, v($pop38) + f32.const $push14=, 0x1.2p4 + f32.add $push15=, $pop13, $pop14 + f32.const $push37=, 0x1.2p4 + f32.add $push36=, $pop15, $pop37 + tee_local $push35=, $0=, $pop36 + f32.store v($pop39), $pop35 + block + i32.const $push34=, 65535 + i32.and $push18=, $5, $pop34 + i32.const $push33=, 24 + i32.ne $push19=, $pop18, $pop33 + br_if 0, $pop19 # 0: down to label0 +# BB#1: # %entry + i32.const $push65=, 65535 + i32.and $push20=, $4, $pop65 + i32.const $push64=, 28 + i32.ne $push21=, $pop20, $pop64 + br_if 0, $pop21 # 0: down to label0 +# BB#2: # %entry + i32.const $push67=, 0 + i32.load16_u $push17=, u+6($pop67) + i32.const $push66=, 0 + i32.load16_u $push16=, u+4($pop66) + i32.or $push0=, $pop17, $pop16 + i32.const $push22=, 65535 + i32.and $push23=, $pop0, $pop22 + br_if 0, $pop23 # 0: down to label0 +# BB#3: # %if.end + f32.const $push24=, 0x1.2p5 + f32.ne $push25=, $0, $pop24 + br_if 0, $pop25 # 0: down to label0 +# BB#4: # %if.end + f32.const $push26=, 0x1.4p5 + f32.ne $push27=, $1, $pop26 + br_if 0, $pop27 # 0: down to label0 +# BB#5: # %if.end + f32.const $push28=, 0x1.6p5 + f32.ne $push29=, $2, $pop28 + br_if 0, $pop29 # 0: down to label0 +# BB#6: # %if.end + f32.const $push30=, 0x0p0 + f32.ne $push31=, $3, $pop30 + br_if 0, $pop31 # 0: down to label0 +# BB#7: # %if.end26 + i32.const $push32=, 0 + return $pop32 +.LBB1_8: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden u # @u + .type u,@object + .section .bss.u,"aw",@nobits + .globl u + .p2align 3 +u: + .skip 8 + .size u, 8 + + .hidden v # @v + .type v,@object + .section .bss.v,"aw",@nobits + .globl v + .p2align 4 +v: + .skip 16 + .size v, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20050607-1.c.s b/src/binaryen/test/torture-s/20050607-1.c.s new file mode 100644 index 0000000000..494930d2d2 --- /dev/null +++ b/src/binaryen/test/torture-s/20050607-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20050607-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20050613-1.c.s b/src/binaryen/test/torture-s/20050613-1.c.s new file mode 100644 index 0000000000..e4607a4885 --- /dev/null +++ b/src/binaryen/test/torture-s/20050613-1.c.s @@ -0,0 +1,49 @@ + .text + .file "20050613-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.load $push0=, 0($0) + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load $push1=, 4($0) + i32.const $push2=, 5 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %lor.lhs.false2 + i32.load $push4=, 8($0) + br_if 0, $pop4 # 0: down to label0 +# BB#3: # %lor.lhs.false4 + i32.load $push5=, 12($0) + br_if 0, $pop5 # 0: down to label0 +# BB#4: # %if.end + return +.LBB0_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %foo.exit28 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20050713-1.c.s b/src/binaryen/test/torture-s/20050713-1.c.s new file mode 100644 index 0000000000..15f9b6f9e8 --- /dev/null +++ b/src/binaryen/test/torture-s/20050713-1.c.s @@ -0,0 +1,308 @@ + .text + .file "20050713-1.c" + .section .text.foo2,"ax",@progbits + .hidden foo2 # -- Begin function foo2 + .globl foo2 + .type foo2,@function +foo2: # @foo2 + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.load $push0=, 0($0) + i32.const $push1=, 3 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load $push3=, 4($0) + i32.const $push4=, 4 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %lor.lhs.false2 + i32.load $push6=, 8($0) + i32.const $push7=, 5 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %if.end + i32.load $push9=, 0($1) + i32.const $push10=, 6 + i32.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#4: # %lor.lhs.false6 + i32.load $push12=, 4($1) + i32.const $push13=, 7 + i32.ne $push14=, $pop12, $pop13 + br_if 0, $pop14 # 0: down to label0 +# BB#5: # %lor.lhs.false9 + i32.load $push15=, 8($1) + i32.const $push16=, 8 + i32.ne $push17=, $pop15, $pop16 + br_if 0, $pop17 # 0: down to label0 +# BB#6: # %if.end13 + i32.const $push18=, 0 + return $pop18 +.LBB0_7: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo2, .Lfunc_end0-foo2 + # -- End function + .section .text.foo3,"ax",@progbits + .hidden foo3 # -- Begin function foo3 + .globl foo3 + .type foo3,@function +foo3: # @foo3 + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.load $push2=, 0($0) + i32.const $push3=, 3 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label1 +# BB#1: # %entry + i32.load $push0=, 4($0) + i32.const $push5=, 4 + i32.ne $push6=, $pop0, $pop5 + br_if 0, $pop6 # 0: down to label1 +# BB#2: # %entry + i32.load $push1=, 8($0) + i32.const $push7=, 5 + i32.ne $push8=, $pop1, $pop7 + br_if 0, $pop8 # 0: down to label1 +# BB#3: # %if.end.i + i32.load $push11=, 8($1) + i32.const $push12=, 8 + i32.ne $push13=, $pop11, $pop12 + br_if 0, $pop13 # 0: down to label1 +# BB#4: # %if.end.i + i32.load $push9=, 4($1) + i32.const $push14=, 7 + i32.ne $push15=, $pop9, $pop14 + br_if 0, $pop15 # 0: down to label1 +# BB#5: # %if.end.i + i32.load $push10=, 0($1) + i32.const $push16=, 6 + i32.ne $push17=, $pop10, $pop16 + br_if 0, $pop17 # 0: down to label1 +# BB#6: # %foo2.exit + i32.load $push18=, 0($2) + i32.const $push19=, 9 + i32.ne $push20=, $pop18, $pop19 + br_if 0, $pop20 # 0: down to label1 +# BB#7: # %lor.lhs.false + i32.load $push21=, 4($2) + i32.const $push22=, 10 + i32.ne $push23=, $pop21, $pop22 + br_if 0, $pop23 # 0: down to label1 +# BB#8: # %lor.lhs.false2 + i32.load $push24=, 8($2) + i32.const $push25=, 11 + i32.ne $push26=, $pop24, $pop25 + br_if 0, $pop26 # 0: down to label1 +# BB#9: # %if.end + i32.const $push27=, 0 + return $pop27 +.LBB1_10: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size foo3, .Lfunc_end1-foo3 + # -- End function + .section .text.bar2,"ax",@progbits + .hidden bar2 # -- Begin function bar2 + .globl bar2 + .type bar2,@function +bar2: # @bar2 + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.load $push2=, 0($1) + i32.const $push3=, 3 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label2 +# BB#1: # %entry + i32.load $push0=, 4($1) + i32.const $push5=, 4 + i32.ne $push6=, $pop0, $pop5 + br_if 0, $pop6 # 0: down to label2 +# BB#2: # %entry + i32.load $push1=, 8($1) + i32.const $push7=, 5 + i32.ne $push8=, $pop1, $pop7 + br_if 0, $pop8 # 0: down to label2 +# BB#3: # %if.end.i + i32.load $push11=, 8($0) + i32.const $push12=, 8 + i32.ne $push13=, $pop11, $pop12 + br_if 0, $pop13 # 0: down to label2 +# BB#4: # %if.end.i + i32.load $push9=, 4($0) + i32.const $push14=, 7 + i32.ne $push15=, $pop9, $pop14 + br_if 0, $pop15 # 0: down to label2 +# BB#5: # %if.end.i + i32.load $push10=, 0($0) + i32.const $push16=, 6 + i32.ne $push17=, $pop10, $pop16 + br_if 0, $pop17 # 0: down to label2 +# BB#6: # %foo2.exit + i32.const $push18=, 0 + return $pop18 +.LBB2_7: # %if.then.i + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size bar2, .Lfunc_end2-bar2 + # -- End function + .section .text.bar3,"ax",@progbits + .hidden bar3 # -- Begin function bar3 + .globl bar3 + .type bar3,@function +bar3: # @bar3 + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.load $push5=, 0($1) + i32.const $push6=, 3 + i32.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label3 +# BB#1: # %entry + i32.load $push3=, 4($1) + i32.const $push8=, 4 + i32.ne $push9=, $pop3, $pop8 + br_if 0, $pop9 # 0: down to label3 +# BB#2: # %entry + i32.load $push4=, 8($1) + i32.const $push10=, 5 + i32.ne $push11=, $pop4, $pop10 + br_if 0, $pop11 # 0: down to label3 +# BB#3: # %if.end.i.i + i32.load $push14=, 8($0) + i32.const $push15=, 8 + i32.ne $push16=, $pop14, $pop15 + br_if 0, $pop16 # 0: down to label3 +# BB#4: # %if.end.i.i + i32.load $push12=, 4($0) + i32.const $push17=, 7 + i32.ne $push18=, $pop12, $pop17 + br_if 0, $pop18 # 0: down to label3 +# BB#5: # %if.end.i.i + i32.load $push13=, 0($0) + i32.const $push19=, 6 + i32.ne $push20=, $pop13, $pop19 + br_if 0, $pop20 # 0: down to label3 +# BB#6: # %foo2.exit.i + i32.load $push0=, 0($2) + i32.const $push21=, 9 + i32.ne $push22=, $pop0, $pop21 + br_if 0, $pop22 # 0: down to label3 +# BB#7: # %foo2.exit.i + i32.load $push1=, 4($2) + i32.const $push23=, 10 + i32.ne $push24=, $pop1, $pop23 + br_if 0, $pop24 # 0: down to label3 +# BB#8: # %foo2.exit.i + i32.load $push2=, 8($2) + i32.const $push25=, 11 + i32.ne $push26=, $pop2, $pop25 + br_if 0, $pop26 # 0: down to label3 +# BB#9: # %foo3.exit + i32.const $push27=, 0 + return $pop27 +.LBB3_10: # %if.then.i.i + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size bar3, .Lfunc_end3-bar3 + # -- End function + .section .text.baz3,"ax",@progbits + .hidden baz3 # -- Begin function baz3 + .globl baz3 + .type baz3,@function +baz3: # @baz3 + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.load $push5=, 0($1) + i32.const $push6=, 3 + i32.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label4 +# BB#1: # %entry + i32.load $push3=, 4($1) + i32.const $push8=, 4 + i32.ne $push9=, $pop3, $pop8 + br_if 0, $pop9 # 0: down to label4 +# BB#2: # %entry + i32.load $push4=, 8($1) + i32.const $push10=, 5 + i32.ne $push11=, $pop4, $pop10 + br_if 0, $pop11 # 0: down to label4 +# BB#3: # %if.end.i.i + i32.load $push14=, 8($2) + i32.const $push15=, 8 + i32.ne $push16=, $pop14, $pop15 + br_if 0, $pop16 # 0: down to label4 +# BB#4: # %if.end.i.i + i32.load $push12=, 4($2) + i32.const $push17=, 7 + i32.ne $push18=, $pop12, $pop17 + br_if 0, $pop18 # 0: down to label4 +# BB#5: # %if.end.i.i + i32.load $push13=, 0($2) + i32.const $push19=, 6 + i32.ne $push20=, $pop13, $pop19 + br_if 0, $pop20 # 0: down to label4 +# BB#6: # %foo2.exit.i + i32.load $push0=, 0($0) + i32.const $push21=, 9 + i32.ne $push22=, $pop0, $pop21 + br_if 0, $pop22 # 0: down to label4 +# BB#7: # %foo2.exit.i + i32.load $push1=, 4($0) + i32.const $push23=, 10 + i32.ne $push24=, $pop1, $pop23 + br_if 0, $pop24 # 0: down to label4 +# BB#8: # %foo2.exit.i + i32.load $push2=, 8($0) + i32.const $push25=, 11 + i32.ne $push26=, $pop2, $pop25 + br_if 0, $pop26 # 0: down to label4 +# BB#9: # %foo3.exit + i32.const $push27=, 0 + return $pop27 +.LBB4_10: # %if.then.i.i + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end4: + .size baz3, .Lfunc_end4-baz3 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %baz3.exit + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end5: + .size main, .Lfunc_end5-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20050826-1.c.s b/src/binaryen/test/torture-s/20050826-1.c.s new file mode 100644 index 0000000000..74df6f0d65 --- /dev/null +++ b/src/binaryen/test/torture-s/20050826-1.c.s @@ -0,0 +1,200 @@ + .text + .file "20050826-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .local i32 +# BB#0: # %entry + block + i64.load $push0=, 0($0):p2align=0 + i64.const $push1=, 368664092428289 + i64.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %for.body.preheader + i32.const $push3=, 7 + i32.add $1=, $0, $pop3 + i32.const $0=, 0 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.add $push4=, $1, $0 + i32.load8_u $push5=, 0($pop4) + br_if 1, $pop5 # 1: down to label0 +# BB#3: # %for.cond + # in Loop: Header=BB0_2 Depth=1 + i32.const $push10=, 1 + i32.add $push9=, $0, $pop10 + tee_local $push8=, $0=, $pop9 + i32.const $push7=, 2040 + i32.le_u $push6=, $pop8, $pop7 + br_if 0, $pop6 # 0: up to label1 +# BB#4: # %for.end + end_loop + return +.LBB0_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push3=, a+7 + i32.const $push2=, 0 + i32.const $push1=, 2041 + i32.call $drop=, memset@FUNCTION, $pop3, $pop2, $pop1 + i32.const $push21=, 0 + i32.const $push20=, 1 + i32.store8 a($pop21), $pop20 + i32.const $push19=, 0 + i32.const $push18=, 1 + i32.store8 a+6($pop19), $pop18 + i32.const $push17=, 0 + i32.const $push16=, 0 + i32.load8_u $push4=, .L.str.1+4($pop16) + i32.store8 a+5($pop17), $pop4 + i32.const $push15=, 0 + i32.const $push14=, 0 + i32.load $push5=, .L.str.1($pop14):p2align=0 + i32.store a+1($pop15):p2align=0, $pop5 + block + block + i32.const $push13=, 0 + i64.load $push6=, a($pop13):p2align=0 + i64.const $push7=, 368664092428289 + i64.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label3 +# BB#1: # %for.cond.i.preheader + i32.const $1=, 8 +.LBB1_2: # %for.cond.i + # =>This Inner Loop Header: Depth=1 + loop # label4: + i32.const $push23=, -7 + i32.add $push9=, $1, $pop23 + i32.const $push22=, 2040 + i32.gt_u $push10=, $pop9, $pop22 + br_if 2, $pop10 # 2: down to label2 +# BB#3: # %for.cond.i.for.body.i_crit_edge + # in Loop: Header=BB1_2 Depth=1 + i32.const $push25=, a + i32.add $0=, $1, $pop25 + i32.const $push24=, 1 + i32.add $push0=, $1, $pop24 + copy_local $1=, $pop0 + i32.load8_u $push12=, 0($0) + i32.eqz $push26=, $pop12 + br_if 0, $pop26 # 0: up to label4 +.LBB1_4: # %if.then.i + end_loop + end_block # label3: + call abort@FUNCTION + unreachable +.LBB1_5: # %bar.exit + end_block # label2: + i32.const $push11=, 0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push3=, a+7 + i32.const $push2=, 0 + i32.const $push1=, 2041 + i32.call $drop=, memset@FUNCTION, $pop3, $pop2, $pop1 + i32.const $push21=, 0 + i32.const $push20=, 1 + i32.store8 a($pop21), $pop20 + i32.const $push19=, 0 + i32.const $push18=, 1 + i32.store8 a+6($pop19), $pop18 + i32.const $push17=, 0 + i32.const $push16=, 0 + i32.load8_u $push4=, .L.str.1+4($pop16) + i32.store8 a+5($pop17), $pop4 + i32.const $push15=, 0 + i32.const $push14=, 0 + i32.load $push5=, .L.str.1($pop14):p2align=0 + i32.store a+1($pop15):p2align=0, $pop5 + block + block + i32.const $push13=, 0 + i64.load $push6=, a($pop13):p2align=0 + i64.const $push7=, 368664092428289 + i64.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label6 +# BB#1: # %for.cond.i.i.preheader + i32.const $1=, 8 +.LBB2_2: # %for.cond.i.i + # =>This Inner Loop Header: Depth=1 + loop # label7: + i32.const $push23=, -7 + i32.add $push9=, $1, $pop23 + i32.const $push22=, 2040 + i32.gt_u $push10=, $pop9, $pop22 + br_if 2, $pop10 # 2: down to label5 +# BB#3: # %for.cond.i.for.body.i_crit_edge.i + # in Loop: Header=BB2_2 Depth=1 + i32.const $push25=, a + i32.add $0=, $1, $pop25 + i32.const $push24=, 1 + i32.add $push0=, $1, $pop24 + copy_local $1=, $pop0 + i32.load8_u $push12=, 0($0) + i32.eqz $push26=, $pop12 + br_if 0, $pop26 # 0: up to label7 +.LBB2_4: # %if.then.i.i + end_loop + end_block # label6: + call abort@FUNCTION + unreachable +.LBB2_5: # %foo.exit + end_block # label5: + i32.const $push11=, 0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "\001HELLO\001" + .size .L.str, 8 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a +a: + .skip 2048 + .size a, 2048 + + .type .L.str.1,@object # @.str.1 + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str.1: + .asciz "HELLO" + .size .L.str.1, 6 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype memcmp, i32, i32, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20050826-2.c.s b/src/binaryen/test/torture-s/20050826-2.c.s new file mode 100644 index 0000000000..e208536a22 --- /dev/null +++ b/src/binaryen/test/torture-s/20050826-2.c.s @@ -0,0 +1,508 @@ + .text + .file "20050826-2.c" + .section .text.inet_check_attr,"ax",@progbits + .hidden inet_check_attr # -- Begin function inet_check_attr + .globl inet_check_attr + .type inet_check_attr,@function +inet_check_attr: # @inet_check_attr + .param i32, i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $3=, 0 +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label1: + i32.const $push11=, 1 + i32.add $3=, $3, $pop11 + block + i32.load $push10=, 0($1) + tee_local $push9=, $2=, $pop10 + i32.eqz $push19=, $pop9 + br_if 0, $pop19 # 0: down to label2 +# BB#2: # %if.then + # in Loop: Header=BB0_1 Depth=1 + i32.load16_u $push0=, 0($2) + i32.const $push13=, 65532 + i32.and $push1=, $pop0, $pop13 + i32.const $push12=, 4 + i32.eq $push2=, $pop1, $pop12 + br_if 2, $pop2 # 2: down to label0 +# BB#3: # %if.end + # in Loop: Header=BB0_1 Depth=1 + i32.const $push15=, 1 + i32.or $push3=, $3, $pop15 + i32.const $push14=, 9 + i32.eq $push4=, $pop3, $pop14 + br_if 0, $pop4 # 0: down to label2 +# BB#4: # %if.then9 + # in Loop: Header=BB0_1 Depth=1 + i32.const $push16=, 4 + i32.add $push5=, $2, $pop16 + i32.store 0($1), $pop5 +.LBB0_5: # %for.inc + # in Loop: Header=BB0_1 Depth=1 + end_block # label2: + i32.const $push18=, 4 + i32.add $1=, $1, $pop18 + i32.const $push17=, 14 + i32.lt_u $push6=, $3, $pop17 + br_if 0, $pop6 # 0: up to label1 +# BB#6: + end_loop + i32.const $push7=, 0 + return $pop7 +.LBB0_7: + end_block # label0: + i32.const $push8=, -22 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end0: + .size inet_check_attr, .Lfunc_end0-inet_check_attr + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push87=, 0 + i32.const $push85=, 0 + i32.load $push84=, __stack_pointer($pop85) + i32.const $push86=, 64 + i32.sub $push150=, $pop84, $pop86 + tee_local $push149=, $5=, $pop150 + i32.store __stack_pointer($pop87), $pop149 + i64.const $push0=, 51539607564 + i64.store 56($5), $pop0 + i32.const $push91=, 56 + i32.add $push92=, $5, $pop91 + i32.store 0($5), $pop92 + i32.const $push93=, 56 + i32.add $push94=, $5, $pop93 + i32.store 4($5), $pop94 + i32.const $push95=, 56 + i32.add $push96=, $5, $pop95 + i32.store 8($5), $pop96 + i32.const $push97=, 56 + i32.add $push98=, $5, $pop97 + i32.store 12($5), $pop98 + i32.const $push99=, 56 + i32.add $push100=, $5, $pop99 + i32.store 16($5), $pop100 + i32.const $push101=, 56 + i32.add $push102=, $5, $pop101 + i32.store 20($5), $pop102 + i32.const $push103=, 56 + i32.add $push104=, $5, $pop103 + i32.store 24($5), $pop104 + i32.const $push105=, 56 + i32.add $push106=, $5, $pop105 + i32.store 28($5), $pop106 + i32.const $push107=, 56 + i32.add $push108=, $5, $pop107 + i32.store 32($5), $pop108 + i32.const $push109=, 56 + i32.add $push110=, $5, $pop109 + i32.store 36($5), $pop110 + i32.const $push111=, 56 + i32.add $push112=, $5, $pop111 + i32.store 40($5), $pop112 + i32.const $push113=, 56 + i32.add $push114=, $5, $pop113 + i32.store 44($5), $pop114 + i32.const $push115=, 56 + i32.add $push116=, $5, $pop115 + i32.store 48($5), $pop116 + i32.const $push117=, 56 + i32.add $push118=, $5, $pop117 + i32.store 52($5), $pop118 + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + i32.call $push2=, inet_check_attr@FUNCTION, $3, $5 + br_if 0, $pop2 # 0: down to label19 +# BB#1: # %if.end + i32.load $push16=, 0($5) + i32.const $push119=, 56 + i32.add $push120=, $5, $pop119 + i32.const $push1=, 4 + i32.or $push152=, $pop120, $pop1 + tee_local $push151=, $0=, $pop152 + i32.ne $push17=, $pop16, $pop151 + br_if 1, $pop17 # 1: down to label18 +# BB#2: # %if.end + i32.load $push3=, 4($5) + i32.ne $push38=, $pop3, $0 + br_if 2, $pop38 # 2: down to label17 +# BB#3: # %if.end + i32.load $push4=, 8($5) + i32.ne $push39=, $pop4, $0 + br_if 3, $pop39 # 3: down to label16 +# BB#4: # %if.end + i32.load $push5=, 12($5) + i32.ne $push40=, $pop5, $0 + br_if 4, $pop40 # 4: down to label15 +# BB#5: # %if.end + i32.const $push36=, 16 + i32.add $push37=, $5, $pop36 + i32.load $push6=, 0($pop37) + i32.ne $push41=, $pop6, $0 + br_if 5, $pop41 # 5: down to label14 +# BB#6: # %if.end + i32.const $push34=, 20 + i32.add $push35=, $5, $pop34 + i32.load $push7=, 0($pop35) + i32.ne $push42=, $pop7, $0 + br_if 6, $pop42 # 6: down to label13 +# BB#7: # %if.end + i32.const $push32=, 24 + i32.add $push33=, $5, $pop32 + i32.load $push8=, 0($pop33) + i32.ne $push43=, $pop8, $0 + br_if 7, $pop43 # 7: down to label12 +# BB#8: # %if.end + i32.const $push30=, 28 + i32.add $push31=, $5, $pop30 + i32.load $push9=, 0($pop31) + i32.const $push121=, 56 + i32.add $push122=, $5, $pop121 + copy_local $push154=, $pop122 + tee_local $push153=, $3=, $pop154 + i32.ne $push44=, $pop9, $pop153 + br_if 8, $pop44 # 8: down to label11 +# BB#9: # %if.end + i32.const $push28=, 32 + i32.add $push29=, $5, $pop28 + i32.load $push10=, 0($pop29) + i32.ne $push45=, $pop10, $3 + br_if 9, $pop45 # 9: down to label10 +# BB#10: # %if.end + i32.const $push26=, 36 + i32.add $push27=, $5, $pop26 + i32.load $push11=, 0($pop27) + i32.ne $push46=, $pop11, $0 + br_if 10, $pop46 # 10: down to label9 +# BB#11: # %if.end + i32.const $push24=, 40 + i32.add $push25=, $5, $pop24 + i32.load $push12=, 0($pop25) + i32.ne $push47=, $pop12, $0 + br_if 11, $pop47 # 11: down to label8 +# BB#12: # %if.end + i32.const $push22=, 44 + i32.add $push23=, $5, $pop22 + i32.load $push13=, 0($pop23) + i32.ne $push48=, $pop13, $0 + br_if 12, $pop48 # 12: down to label7 +# BB#13: # %if.end + i32.const $push20=, 48 + i32.add $push21=, $5, $pop20 + i32.load $push14=, 0($pop21) + i32.ne $push49=, $pop14, $0 + br_if 13, $pop49 # 13: down to label6 +# BB#14: # %if.end + i32.const $push18=, 52 + i32.add $push19=, $5, $pop18 + i32.load $push15=, 0($pop19) + i32.ne $push50=, $pop15, $0 + br_if 14, $pop50 # 14: down to label5 +# BB#15: # %for.cond7.13 + i32.const $push51=, 20 + i32.add $push52=, $5, $pop51 + i32.store 0($pop52), $0 + i32.const $3=, 0 + i32.const $push155=, 0 + i32.store 4($5), $pop155 + i32.const $push53=, 16 + i32.add $push54=, $5, $pop53 + i32.const $push123=, 56 + i32.add $push124=, $5, $pop123 + i32.store 0($pop54), $pop124 + i32.const $push55=, 24 + i32.add $push56=, $5, $pop55 + i32.const $push125=, 56 + i32.add $push126=, $5, $pop125 + i32.store 0($pop56), $pop126 + i32.const $push57=, 28 + i32.add $push58=, $5, $pop57 + i32.const $push127=, 56 + i32.add $push128=, $5, $pop127 + i32.store 0($pop58), $pop128 + i32.const $push59=, 32 + i32.add $push60=, $5, $pop59 + i32.const $push129=, 56 + i32.add $push130=, $5, $pop129 + i32.store 0($pop60), $pop130 + i32.const $push61=, 36 + i32.add $push62=, $5, $pop61 + i32.const $push131=, 56 + i32.add $push132=, $5, $pop131 + i32.store 0($pop62), $pop132 + i32.const $push63=, 40 + i32.add $push64=, $5, $pop63 + i32.const $push133=, 56 + i32.add $push134=, $5, $pop133 + i32.store 0($pop64), $pop134 + i32.const $push65=, 44 + i32.add $push66=, $5, $pop65 + i32.const $push135=, 56 + i32.add $push136=, $5, $pop135 + i32.store 0($pop66), $pop136 + i32.const $push67=, 48 + i32.add $push68=, $5, $pop67 + i32.const $push137=, 56 + i32.add $push138=, $5, $pop137 + i32.store 0($pop68), $pop138 + i32.const $push69=, 52 + i32.add $push70=, $5, $pop69 + i32.const $push139=, 56 + i32.add $push140=, $5, $pop139 + i32.store 0($pop70), $pop140 + i32.load16_u $push72=, 60($5) + i32.const $push71=, 65528 + i32.add $push73=, $pop72, $pop71 + i32.store16 60($5), $pop73 + i32.const $push141=, 56 + i32.add $push142=, $5, $pop141 + i32.store 8($5), $pop142 + i32.const $push143=, 56 + i32.add $push144=, $5, $pop143 + i32.store 0($5), $pop144 + i32.const $push145=, 56 + i32.add $push146=, $5, $pop145 + i32.store 12($5), $pop146 + i32.call $push74=, inet_check_attr@FUNCTION, $3, $5 + i32.const $push75=, -22 + i32.ne $push76=, $pop74, $pop75 + br_if 15, $pop76 # 15: down to label4 +# BB#16: # %if.end39 + copy_local $2=, $5 + i32.load $1=, 4($5) + block + i32.const $push157=, 0 + i32.const $push156=, 1 + i32.ne $push77=, $pop157, $pop156 + br_if 0, $pop77 # 0: down to label20 +# BB#17: + i32.const $6=, 7 + br 17 # 17: down to label3 +.LBB1_18: + end_block # label20: + i32.const $6=, 3 + br 16 # 16: down to label3 +.LBB1_19: + end_block # label19: + i32.const $6=, 5 + br 15 # 15: down to label3 +.LBB1_20: + end_block # label18: + i32.const $6=, 5 + br 14 # 14: down to label3 +.LBB1_21: + end_block # label17: + i32.const $6=, 5 + br 13 # 13: down to label3 +.LBB1_22: + end_block # label16: + i32.const $6=, 5 + br 12 # 12: down to label3 +.LBB1_23: + end_block # label15: + i32.const $6=, 5 + br 11 # 11: down to label3 +.LBB1_24: + end_block # label14: + i32.const $6=, 5 + br 10 # 10: down to label3 +.LBB1_25: + end_block # label13: + i32.const $6=, 5 + br 9 # 9: down to label3 +.LBB1_26: + end_block # label12: + i32.const $6=, 5 + br 8 # 8: down to label3 +.LBB1_27: + end_block # label11: + i32.const $6=, 5 + br 7 # 7: down to label3 +.LBB1_28: + end_block # label10: + i32.const $6=, 5 + br 6 # 6: down to label3 +.LBB1_29: + end_block # label9: + i32.const $6=, 5 + br 5 # 5: down to label3 +.LBB1_30: + end_block # label8: + i32.const $6=, 5 + br 4 # 4: down to label3 +.LBB1_31: + end_block # label7: + i32.const $6=, 5 + br 3 # 3: down to label3 +.LBB1_32: + end_block # label6: + i32.const $6=, 5 + br 2 # 2: down to label3 +.LBB1_33: + end_block # label5: + i32.const $6=, 5 + br 1 # 1: down to label3 +.LBB1_34: + end_block # label4: + i32.const $6=, 5 +.LBB1_35: # =>This Inner Loop Header: Depth=1 + end_block # label3: + loop i32 # label21: + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + br_table $6, 5, 6, 0, 2, 4, 7, 3, 1, 1 # 5: down to label32 + # 6: down to label31 + # 0: down to label37 + # 2: down to label35 + # 4: down to label33 + # 7: down to label30 + # 3: down to label34 + # 1: down to label36 +.LBB1_36: # %for.body43.backedge + # in Loop: Header=BB1_35 Depth=1 + end_block # label37: + i32.const $push162=, 4 + i32.add $2=, $2, $pop162 + i32.const $push161=, 1 + i32.add $push160=, $3, $pop161 + tee_local $push159=, $3=, $pop160 + i32.const $push158=, 1 + i32.ne $push78=, $pop159, $pop158 + br_if 7, $pop78 # 7: down to label29 +# BB#37: # in Loop: Header=BB1_35 Depth=1 + i32.const $6=, 7 + br 15 # 15: up to label21 +.LBB1_38: # %land.lhs.true + # in Loop: Header=BB1_35 Depth=1 + end_block # label36: + i32.eqz $push165=, $1 + br_if 11, $pop165 # 11: down to label24 + br 12 # 12: down to label23 +.LBB1_39: # %if.else + # in Loop: Header=BB1_35 Depth=1 + end_block # label35: + i32.load $4=, 0($2) + i32.const $push163=, 5 + i32.gt_u $push79=, $3, $pop163 + br_if 12, $pop79 # 12: down to label22 +# BB#40: # in Loop: Header=BB1_35 Depth=1 + i32.const $6=, 6 + br 13 # 13: up to label21 +.LBB1_41: # %land.lhs.true55 + # in Loop: Header=BB1_35 Depth=1 + end_block # label34: + i32.eq $push83=, $4, $0 + br_if 5, $pop83 # 5: down to label28 + br 6 # 6: down to label27 +.LBB1_42: # %land.lhs.true64 + # in Loop: Header=BB1_35 Depth=1 + end_block # label33: + i32.const $push147=, 56 + i32.add $push148=, $5, $pop147 + i32.ne $push80=, $4, $pop148 + br_if 7, $pop80 # 7: down to label25 +# BB#43: # in Loop: Header=BB1_35 Depth=1 + i32.const $6=, 0 + br 11 # 11: up to label21 +.LBB1_44: # %for.inc73 + # in Loop: Header=BB1_35 Depth=1 + end_block # label32: + i32.const $push164=, 12 + i32.le_u $push81=, $3, $pop164 + br_if 5, $pop81 # 5: down to label26 +# BB#45: # in Loop: Header=BB1_35 Depth=1 + i32.const $6=, 1 + br 10 # 10: up to label21 +.LBB1_46: # %for.end75 + end_block # label31: + i32.const $push90=, 0 + i32.const $push88=, 64 + i32.add $push89=, $5, $pop88 + i32.store __stack_pointer($pop90), $pop89 + i32.const $push82=, 0 + return $pop82 +.LBB1_47: # %if.then + end_block # label30: + call abort@FUNCTION + unreachable +.LBB1_48: # in Loop: Header=BB1_35 Depth=1 + end_block # label29: + i32.const $6=, 3 + br 7 # 7: up to label21 +.LBB1_49: # in Loop: Header=BB1_35 Depth=1 + end_block # label28: + i32.const $6=, 2 + br 6 # 6: up to label21 +.LBB1_50: # in Loop: Header=BB1_35 Depth=1 + end_block # label27: + i32.const $6=, 5 + br 5 # 5: up to label21 +.LBB1_51: # in Loop: Header=BB1_35 Depth=1 + end_block # label26: + i32.const $6=, 2 + br 4 # 4: up to label21 +.LBB1_52: # in Loop: Header=BB1_35 Depth=1 + end_block # label25: + i32.const $6=, 5 + br 3 # 3: up to label21 +.LBB1_53: # in Loop: Header=BB1_35 Depth=1 + end_block # label24: + i32.const $6=, 2 + br 2 # 2: up to label21 +.LBB1_54: # in Loop: Header=BB1_35 Depth=1 + end_block # label23: + i32.const $6=, 5 + br 1 # 1: up to label21 +.LBB1_55: # in Loop: Header=BB1_35 Depth=1 + end_block # label22: + i32.const $6=, 4 + br 0 # 0: up to label21 +.LBB1_56: + end_loop + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20050929-1.c.s b/src/binaryen/test/torture-s/20050929-1.c.s new file mode 100644 index 0000000000..bfa5f377ba --- /dev/null +++ b/src/binaryen/test/torture-s/20050929-1.c.s @@ -0,0 +1,106 @@ + .text + .file "20050929-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.load $push24=, e($pop0) + tee_local $push23=, $0=, $pop24 + i32.load $push22=, 0($pop23) + tee_local $push21=, $1=, $pop22 + i32.load $push1=, 0($pop21) + i32.const $push2=, 1 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load $push4=, 4($1) + i32.const $push5=, 2 + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#2: # %if.end + i32.load $push26=, 4($0) + tee_local $push25=, $0=, $pop26 + i32.load $push7=, 0($pop25) + i32.const $push8=, 3 + i32.ne $push9=, $pop7, $pop8 + br_if 0, $pop9 # 0: down to label0 +# BB#3: # %lor.lhs.false5 + i32.load $push10=, 4($0) + i32.const $push11=, 4 + i32.ne $push12=, $pop10, $pop11 + br_if 0, $pop12 # 0: down to label0 +# BB#4: # %if.end10 + i32.const $push13=, 0 + i32.load $push28=, e+4($pop13) + tee_local $push27=, $0=, $pop28 + i32.load $push14=, 0($pop27) + i32.const $push15=, 5 + i32.ne $push16=, $pop14, $pop15 + br_if 0, $pop16 # 0: down to label0 +# BB#5: # %lor.lhs.false13 + i32.load $push17=, 4($0) + i32.const $push18=, 6 + i32.ne $push19=, $pop17, $pop18 + br_if 0, $pop19 # 0: down to label0 +# BB#6: # %if.end17 + i32.const $push20=, 0 + return $pop20 +.LBB0_7: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type .compoundliteral,@object # @.compoundliteral + .section .data..compoundliteral,"aw",@progbits + .p2align 2 +.compoundliteral: + .int32 1 # 0x1 + .int32 2 # 0x2 + .size .compoundliteral, 8 + + .type .compoundliteral.1,@object # @.compoundliteral.1 + .section .data..compoundliteral.1,"aw",@progbits + .p2align 2 +.compoundliteral.1: + .int32 3 # 0x3 + .int32 4 # 0x4 + .size .compoundliteral.1, 8 + + .type .compoundliteral.2,@object # @.compoundliteral.2 + .section .data..compoundliteral.2,"aw",@progbits + .p2align 2 +.compoundliteral.2: + .int32 .compoundliteral + .int32 .compoundliteral.1 + .size .compoundliteral.2, 8 + + .type .compoundliteral.3,@object # @.compoundliteral.3 + .section .data..compoundliteral.3,"aw",@progbits + .p2align 2 +.compoundliteral.3: + .int32 5 # 0x5 + .int32 6 # 0x6 + .size .compoundliteral.3, 8 + + .hidden e # @e + .type e,@object + .section .data.e,"aw",@progbits + .globl e + .p2align 2 +e: + .int32 .compoundliteral.2 + .int32 .compoundliteral.3 + .size e, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20051012-1.c.s b/src/binaryen/test/torture-s/20051012-1.c.s new file mode 100644 index 0000000000..4e941631c8 --- /dev/null +++ b/src/binaryen/test/torture-s/20051012-1.c.s @@ -0,0 +1,50 @@ + .text + .file "20051012-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, t+6($pop0) + i32.const $push2=, 511 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + i32.const $push7=, 0 + i32.load $push1=, t+4($pop7) + i32.const $push2=, -33488897 + i32.and $push3=, $pop1, $pop2 + i32.const $push4=, 524288 + i32.or $push5=, $pop3, $pop4 + i32.store t+4($pop0), $pop5 + i32.const $push6=, 0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden t # @t + .type t,@object + .section .bss.t,"aw",@nobits + .globl t + .p2align 2 +t: + .skip 8 + .size t, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20051021-1.c.s b/src/binaryen/test/torture-s/20051021-1.c.s new file mode 100644 index 0000000000..4c2279b8b8 --- /dev/null +++ b/src/binaryen/test/torture-s/20051021-1.c.s @@ -0,0 +1,80 @@ + .text + .file "20051021-1.c" + .section .text.foo1,"ax",@progbits + .hidden foo1 # -- Begin function foo1 + .globl foo1 + .type foo1,@function +foo1: # @foo1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load $push1=, count($pop5) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store count($pop0), $pop3 + i32.const $push4=, 0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size foo1, .Lfunc_end0-foo1 + # -- End function + .section .text.foo2,"ax",@progbits + .hidden foo2 # -- Begin function foo2 + .globl foo2 + .type foo2,@function +foo2: # @foo2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load $push1=, count($pop5) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store count($pop0), $pop3 + i32.const $push4=, 0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end1: + .size foo2, .Lfunc_end1-foo2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push4=, 0 + i32.load $push3=, count($pop4) + tee_local $push2=, $0=, $pop3 + i32.const $push0=, 2 + i32.add $push1=, $pop2, $pop0 + i32.store count($pop5), $pop1 + block + br_if 0, $0 # 0: down to label0 +# BB#1: # %if.end7 + i32.const $push6=, 0 + return $pop6 +.LBB2_2: # %if.then6 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden count # @count + .type count,@object + .section .bss.count,"aw",@nobits + .globl count + .p2align 2 +count: + .int32 0 # 0x0 + .size count, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20051104-1.c.s b/src/binaryen/test/torture-s/20051104-1.c.s new file mode 100644 index 0000000000..1897c5edae --- /dev/null +++ b/src/binaryen/test/torture-s/20051104-1.c.s @@ -0,0 +1,38 @@ + .text + .file "20051104-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, .L.str + i32.store s+4($pop1), $pop0 + i32.const $push4=, 0 + i32.const $push3=, 0 + i32.store s($pop4), $pop3 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 2 +s: + .skip 8 + .size s, 8 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .skip 1 + .size .L.str, 1 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20051110-1.c.s b/src/binaryen/test/torture-s/20051110-1.c.s new file mode 100644 index 0000000000..2ba8ab085c --- /dev/null +++ b/src/binaryen/test/torture-s/20051110-1.c.s @@ -0,0 +1,70 @@ + .text + .file "20051110-1.c" + .section .text.add_unwind_adjustsp,"ax",@progbits + .hidden add_unwind_adjustsp # -- Begin function add_unwind_adjustsp + .globl add_unwind_adjustsp + .type add_unwind_adjustsp,@function +add_unwind_adjustsp: # @add_unwind_adjustsp + .param i32 + .local i32, i32 +# BB#0: # %entry + block + i32.const $push0=, -516 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 2 + i32.shr_s $push7=, $pop1, $pop2 + tee_local $push6=, $0=, $pop7 + i32.eqz $push14=, $pop6 + br_if 0, $pop14 # 0: down to label0 +# BB#1: # %while.body.preheader + i32.const $2=, bytes +.LBB0_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push13=, 128 + i32.or $push4=, $0, $pop13 + i32.const $push12=, 127 + i32.and $push3=, $0, $pop12 + i32.const $push11=, 7 + i32.shr_u $push10=, $0, $pop11 + tee_local $push9=, $1=, $pop10 + i32.select $push5=, $pop4, $pop3, $pop9 + i32.store8 0($2), $pop5 + i32.const $push8=, 1 + i32.add $2=, $2, $pop8 + copy_local $0=, $1 + br_if 0, $1 # 0: up to label1 +.LBB0_3: # %while.end + end_loop + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size add_unwind_adjustsp, .Lfunc_end0-add_unwind_adjustsp + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, 1928 + i32.store16 bytes($pop1):p2align=0, $pop0 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden bytes # @bytes + .type bytes,@object + .section .bss.bytes,"aw",@nobits + .globl bytes +bytes: + .skip 5 + .size bytes, 5 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20051110-2.c.s b/src/binaryen/test/torture-s/20051110-2.c.s new file mode 100644 index 0000000000..9762ca4bd0 --- /dev/null +++ b/src/binaryen/test/torture-s/20051110-2.c.s @@ -0,0 +1,138 @@ + .text + .file "20051110-2.c" + .section .text.add_unwind_adjustsp,"ax",@progbits + .hidden add_unwind_adjustsp # -- Begin function add_unwind_adjustsp + .globl add_unwind_adjustsp + .type add_unwind_adjustsp,@function +add_unwind_adjustsp: # @add_unwind_adjustsp + .param i32 + .local i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $6=, 0 + i32.const $push14=, 0 + i32.const $push0=, -516 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 2 + i32.shr_s $push13=, $pop1, $pop2 + tee_local $push12=, $5=, $pop13 + i32.const $push11=, 127 + i32.and $push3=, $pop12, $pop11 + i32.store8 bytes($pop14), $pop3 + block + i32.const $push10=, 7 + i32.shr_u $push9=, $5, $pop10 + tee_local $push8=, $0=, $pop9 + i32.eqz $push30=, $pop8 + br_if 0, $pop30 # 0: down to label0 +# BB#1: # %if.then.lr.ph.lr.ph + i32.const $push15=, 0 + i32.load $1=, flag($pop15) + i32.const $4=, bytes +.LBB0_2: # %if.then.lr.ph + # =>This Loop Header: Depth=1 + # Child Loop BB0_3 Depth 2 + loop # label1: + copy_local $push17=, $0 + tee_local $push16=, $2=, $pop17 + copy_local $0=, $pop16 +.LBB0_3: # %if.then + # Parent Loop BB0_2 Depth=1 + # => This Inner Loop Header: Depth=2 + block + block + loop # label4: + copy_local $3=, $0 + i32.eqz $push31=, $1 + br_if 1, $pop31 # 1: down to label3 +# BB#4: # %a + # in Loop: Header=BB0_3 Depth=2 + i32.const $push20=, 7 + i32.shr_u $push19=, $3, $pop20 + tee_local $push18=, $0=, $pop19 + br_if 0, $pop18 # 0: up to label4 + br 2 # 2: down to label2 +.LBB0_5: # %if.end7.thread + # in Loop: Header=BB0_2 Depth=1 + end_loop + end_block # label3: + i32.const $push29=, 128 + i32.or $push6=, $5, $pop29 + i32.store8 0($4), $pop6 + i32.const $push28=, bytes+1 + i32.add $push27=, $6, $pop28 + tee_local $push26=, $4=, $pop27 + i32.const $push25=, 127 + i32.and $push7=, $2, $pop25 + i32.store8 0($pop26), $pop7 + i32.const $push24=, 1 + i32.add $6=, $6, $pop24 + copy_local $5=, $2 + i32.const $push23=, 7 + i32.shr_u $push22=, $2, $pop23 + tee_local $push21=, $0=, $pop22 + br_if 1, $pop21 # 1: up to label1 + br 2 # 2: down to label0 +.LBB0_6: # %a.do.end_crit_edge + end_block # label2: + end_loop + i32.const $push4=, 127 + i32.and $push5=, $3, $pop4 + i32.store8 0($4), $pop5 +.LBB0_7: # %do.end + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size add_unwind_adjustsp, .Lfunc_end0-add_unwind_adjustsp + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push0=, 8 + i32.store8 bytes($pop5), $pop0 + block + i32.const $push4=, 0 + i32.load $push1=, flag($pop4) + br_if 0, $pop1 # 0: down to label5 +# BB#1: # %if.end + i32.const $push7=, 0 + i32.const $push3=, 1928 + i32.store16 bytes($pop7):p2align=0, $pop3 + i32.const $push6=, 0 + return $pop6 +.LBB1_2: # %if.then + end_block # label5: + i32.const $push8=, 0 + i32.const $push2=, 7 + i32.store8 bytes($pop8), $pop2 + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden bytes # @bytes + .type bytes,@object + .section .bss.bytes,"aw",@nobits + .globl bytes +bytes: + .skip 5 + .size bytes, 5 + + .hidden flag # @flag + .type flag,@object + .section .bss.flag,"aw",@nobits + .globl flag + .p2align 2 +flag: + .int32 0 # 0x0 + .size flag, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20051113-1.c.s b/src/binaryen/test/torture-s/20051113-1.c.s new file mode 100644 index 0000000000..7f3f1238c5 --- /dev/null +++ b/src/binaryen/test/torture-s/20051113-1.c.s @@ -0,0 +1,145 @@ + .text + .file "20051113-1.c" + .section .text.Sum,"ax",@progbits + .hidden Sum # -- Begin function Sum + .globl Sum + .type Sum,@function +Sum: # @Sum + .param i32 + .result i64 + .local i32, i32, i64 +# BB#0: # %entry + block + i32.load $push8=, 0($0):p2align=0 + tee_local $push7=, $1=, $pop8 + i32.const $push6=, 1 + i32.lt_s $push1=, $pop7, $pop6 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %for.body.preheader + i32.const $push2=, 10 + i32.add $0=, $0, $pop2 + i64.const $3=, 0 + i32.const $2=, 0 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i64.load $push3=, 0($0):p2align=0 + i64.add $3=, $pop3, $3 + i32.const $push12=, 30 + i32.add $push0=, $0, $pop12 + copy_local $0=, $pop0 + i32.const $push11=, 1 + i32.add $push10=, $2, $pop11 + tee_local $push9=, $2=, $pop10 + i32.lt_s $push4=, $pop9, $1 + br_if 0, $pop4 # 0: up to label1 +# BB#3: # %for.end + end_loop + return $3 +.LBB0_4: + end_block # label0: + i64.const $push5=, 0 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size Sum, .Lfunc_end0-Sum + # -- End function + .section .text.Sum2,"ax",@progbits + .hidden Sum2 # -- Begin function Sum2 + .globl Sum2 + .type Sum2,@function +Sum2: # @Sum2 + .param i32 + .result i64 + .local i32, i32, i64 +# BB#0: # %entry + block + i32.load $push8=, 0($0):p2align=0 + tee_local $push7=, $1=, $pop8 + i32.const $push6=, 1 + i32.lt_s $push1=, $pop7, $pop6 + br_if 0, $pop1 # 0: down to label2 +# BB#1: # %for.body.preheader + i32.const $push2=, 18 + i32.add $0=, $0, $pop2 + i64.const $3=, 0 + i32.const $2=, 0 +.LBB1_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label3: + i64.load $push3=, 0($0):p2align=0 + i64.add $3=, $pop3, $3 + i32.const $push12=, 30 + i32.add $push0=, $0, $pop12 + copy_local $0=, $pop0 + i32.const $push11=, 1 + i32.add $push10=, $2, $pop11 + tee_local $push9=, $2=, $pop10 + i32.lt_s $push4=, $pop9, $1 + br_if 0, $pop4 # 0: up to label3 +# BB#3: # %for.end + end_loop + return $3 +.LBB1_4: + end_block # label2: + i64.const $push5=, 0 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end1: + .size Sum2, .Lfunc_end1-Sum2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 94 + i32.call $push19=, malloc@FUNCTION, $pop0 + tee_local $push18=, $0=, $pop19 + i32.const $push1=, 4 + i32.add $push2=, $pop18, $pop1 + i32.const $push4=, 0 + i32.const $push3=, 90 + i32.call $drop=, memset@FUNCTION, $pop2, $pop4, $pop3 + i64.const $push5=, 555 + i64.store 10($0):p2align=0, $pop5 + i32.const $push6=, 3 + i32.store 0($0):p2align=0, $pop6 + i64.const $push7=, 999 + i64.store 40($0):p2align=0, $pop7 + i64.const $push8=, 4311810305 + i64.store 70($0):p2align=0, $pop8 + i64.const $push17=, 555 + i64.store 18($0):p2align=0, $pop17 + i64.const $push16=, 999 + i64.store 48($0):p2align=0, $pop16 + i64.const $push15=, 4311810305 + i64.store 78($0):p2align=0, $pop15 + block + i64.call $push9=, Sum@FUNCTION, $0 + i64.const $push14=, 4311811859 + i64.ne $push10=, $pop9, $pop14 + br_if 0, $pop10 # 0: down to label4 +# BB#1: # %if.end + i64.call $push11=, Sum2@FUNCTION, $0 + i64.const $push20=, 4311811859 + i64.ne $push12=, $pop11, $pop20 + br_if 0, $pop12 # 0: down to label4 +# BB#2: # %if.end25 + i32.const $push13=, 0 + return $pop13 +.LBB2_3: # %if.then + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype malloc, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20051215-1.c.s b/src/binaryen/test/torture-s/20051215-1.c.s new file mode 100644 index 0000000000..45e068a502 --- /dev/null +++ b/src/binaryen/test/torture-s/20051215-1.c.s @@ -0,0 +1,81 @@ + .text + .file "20051215-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + block + i32.const $push7=, 1 + i32.lt_s $push0=, $1, $pop7 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %for.body.lr.ph + i32.const $3=, 0 + i32.const $4=, 0 + i32.const $5=, 0 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + block + i32.eqz $push13=, $2 + br_if 0, $pop13 # 0: down to label2 +# BB#3: # %if.then + # in Loop: Header=BB0_2 Depth=1 + i32.load $push1=, 0($2) + i32.mul $4=, $pop1, $3 +.LBB0_4: # %if.end + # in Loop: Header=BB0_2 Depth=1 + end_block # label2: + i32.mul $push3=, $4, $0 + i32.const $push12=, 0 + i32.const $push11=, 0 + i32.gt_s $push2=, $0, $pop11 + i32.select $push4=, $pop3, $pop12, $pop2 + i32.add $5=, $5, $pop4 + i32.const $push10=, 1 + i32.add $push9=, $3, $pop10 + tee_local $push8=, $3=, $pop9 + i32.ne $push5=, $1, $pop8 + br_if 0, $pop5 # 0: up to label1 +# BB#5: # %for.end6 + end_loop + return $5 +.LBB0_6: + end_block # label0: + i32.const $push6=, 0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push1=, 3 + i32.const $push0=, 2 + i32.const $push3=, 0 + i32.call $push2=, foo@FUNCTION, $pop1, $pop0, $pop3 + br_if 0, $pop2 # 0: down to label3 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB1_2: # %if.then + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20060102-1.c.s b/src/binaryen/test/torture-s/20060102-1.c.s new file mode 100644 index 0000000000..d46ddfdde5 --- /dev/null +++ b/src/binaryen/test/torture-s/20060102-1.c.s @@ -0,0 +1,66 @@ + .text + .file "20060102-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.shr_s $push1=, $0, $pop0 + i32.const $push2=, 1 + i32.or $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push14=, 0 + i32.load $push0=, one($pop14) + i32.const $push1=, 31 + i32.shr_s $push2=, $pop0, $pop1 + i32.const $push3=, 1 + i32.or $push4=, $pop2, $pop3 + i32.const $push13=, 0 + i32.const $push12=, 0 + i32.load $push5=, one($pop12) + i32.sub $push6=, $pop13, $pop5 + i32.const $push11=, 31 + i32.shr_s $push7=, $pop6, $pop11 + i32.const $push10=, 1 + i32.or $push8=, $pop7, $pop10 + i32.eq $push9=, $pop4, $pop8 + br_if 0, $pop9 # 0: down to label0 +# BB#1: # %if.end + i32.const $push15=, 0 + return $pop15 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden one # @one + .type one,@object + .section .data.one,"aw",@progbits + .globl one + .p2align 2 +one: + .int32 1 # 0x1 + .size one, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20060110-1.c.s b/src/binaryen/test/torture-s/20060110-1.c.s new file mode 100644 index 0000000000..762cc34094 --- /dev/null +++ b/src/binaryen/test/torture-s/20060110-1.c.s @@ -0,0 +1,65 @@ + .text + .file "20060110-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i64 + .result i64 +# BB#0: # %entry + i64.const $push0=, 32 + i64.shl $push1=, $0, $pop0 + i64.const $push3=, 32 + i64.shr_s $push2=, $pop1, $pop3 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push4=, 0 + i64.load32_s $push1=, a($pop4) + i32.const $push3=, 0 + i64.load $push0=, b($pop3) + i64.ne $push2=, $pop1, $pop0 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push5=, 0 + return $pop5 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 3 +a: + .int64 1311768466852950544 # 0x1234567876543210 + .size a, 8 + + .hidden b # @b + .type b,@object + .section .data.b,"aw",@progbits + .globl b + .p2align 3 +b: + .int64 1985229328 # 0x76543210 + .size b, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20060110-2.c.s b/src/binaryen/test/torture-s/20060110-2.c.s new file mode 100644 index 0000000000..eda0560998 --- /dev/null +++ b/src/binaryen/test/torture-s/20060110-2.c.s @@ -0,0 +1,82 @@ + .text + .file "20060110-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i64, i64 + .result i64 +# BB#0: # %entry + i64.add $push0=, $1, $0 + i64.const $push1=, 32 + i64.shl $push2=, $pop0, $pop1 + i64.const $push4=, 32 + i64.shr_s $push3=, $pop2, $pop4 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push11=, 0 + i64.load $push1=, b($pop11) + i32.const $push10=, 0 + i64.load $push0=, a($pop10) + i64.add $push2=, $pop1, $pop0 + i64.const $push3=, 32 + i64.shl $push4=, $pop2, $pop3 + i64.const $push9=, 32 + i64.shr_s $push5=, $pop4, $pop9 + i32.const $push8=, 0 + i64.load $push6=, c($pop8) + i64.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %if.end + i32.const $push12=, 0 + return $pop12 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 3 +a: + .int64 1311768466852950544 # 0x1234567876543210 + .size a, 8 + + .hidden b # @b + .type b,@object + .section .data.b,"aw",@progbits + .globl b + .p2align 3 +b: + .int64 2541551395937657089 # 0x2345678765432101 + .size b, 8 + + .hidden c # @c + .type c,@object + .section .data.c,"aw",@progbits + .globl c + .p2align 3 +c: + .int64 -610839791 # 0xffffffffdb975311 + .size c, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20060127-1.c.s b/src/binaryen/test/torture-s/20060127-1.c.s new file mode 100644 index 0000000000..7efd8f86f9 --- /dev/null +++ b/src/binaryen/test/torture-s/20060127-1.c.s @@ -0,0 +1,56 @@ + .text + .file "20060127-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i64 +# BB#0: # %entry + block + i32.wrap/i64 $push0=, $0 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push1=, 0 + i32.load $push0=, a($pop1) + br_if 0, $pop0 # 0: down to label1 +# BB#1: # %f.exit + i32.const $push2=, 0 + return $pop2 +.LBB1_2: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 3 +a: + .int64 1311768464867721216 # 0x1234567800000000 + .size a, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20060412-1.c.s b/src/binaryen/test/torture-s/20060412-1.c.s new file mode 100644 index 0000000000..92a34e8a66 --- /dev/null +++ b/src/binaryen/test/torture-s/20060412-1.c.s @@ -0,0 +1,33 @@ + .text + .file "20060412-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end5 + i32.const $push2=, t+8 + i32.const $push1=, 255 + i32.const $push0=, 324 + i32.call $drop=, memset@FUNCTION, $pop2, $pop1, $pop0 + i32.const $push3=, 0 + i32.const $push5=, 0 + i32.store t+4($pop3), $pop5 + i32.const $push4=, 0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden t # @t + .type t,@object + .section .bss.t,"aw",@nobits + .globl t + .p2align 2 +t: + .skip 332 + .size t, 332 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20060420-1.c.s b/src/binaryen/test/torture-s/20060420-1.c.s new file mode 100644 index 0000000000..024a1a83f1 --- /dev/null +++ b/src/binaryen/test/torture-s/20060420-1.c.s @@ -0,0 +1,463 @@ + .text + .file "20060420-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32, i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32 +# BB#0: # %entry + block + block + i32.const $push85=, 1 + i32.lt_s $push3=, $3, $pop85 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %land.rhs.lr.ph + i32.const $push87=, -1 + i32.add $8=, $2, $pop87 + i32.const $push86=, 4 + i32.add $4=, $1, $pop86 + i32.const $10=, 0 +.LBB0_2: # %land.rhs + # =>This Loop Header: Depth=1 + # Child Loop BB0_5 Depth 2 + loop # label2: + i32.add $push4=, $10, $0 + i32.const $push88=, 15 + i32.and $push5=, $pop4, $pop88 + i32.eqz $push171=, $pop5 + br_if 2, $pop171 # 2: down to label0 +# BB#3: # %for.body + # in Loop: Header=BB0_2 Depth=1 + i32.load $push7=, 0($1) + i32.const $push92=, 2 + i32.shl $push91=, $10, $pop92 + tee_local $push90=, $11=, $pop91 + i32.add $push8=, $pop7, $pop90 + f32.load $25=, 0($pop8) + block + i32.const $push89=, 2 + i32.lt_s $push6=, $2, $pop89 + br_if 0, $pop6 # 0: down to label3 +# BB#4: # %for.body4.preheader + # in Loop: Header=BB0_2 Depth=1 + copy_local $12=, $8 + copy_local $9=, $4 +.LBB0_5: # %for.body4 + # Parent Loop BB0_2 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label4: + i32.load $push9=, 0($9) + i32.add $push10=, $pop9, $11 + f32.load $push11=, 0($pop10) + f32.add $25=, $25, $pop11 + i32.const $push96=, 4 + i32.add $push0=, $9, $pop96 + copy_local $9=, $pop0 + i32.const $push95=, -1 + i32.add $push94=, $12, $pop95 + tee_local $push93=, $12=, $pop94 + br_if 0, $pop93 # 0: up to label4 +.LBB0_6: # %for.end + # in Loop: Header=BB0_2 Depth=1 + end_loop + end_block # label3: + i32.add $push12=, $0, $11 + f32.store 0($pop12), $25 + i32.const $push99=, 1 + i32.add $push98=, $10, $pop99 + tee_local $push97=, $10=, $pop98 + i32.lt_s $push13=, $pop97, $3 + br_if 0, $pop13 # 0: up to label2 + br 2 # 2: down to label0 +.LBB0_7: + end_loop + end_block # label1: + i32.const $10=, 0 +.LBB0_8: # %for.end11 + end_block # label0: + block + i32.const $push14=, -15 + i32.add $push101=, $3, $pop14 + tee_local $push100=, $4=, $pop101 + i32.ge_s $push15=, $10, $pop100 + br_if 0, $pop15 # 0: down to label5 +# BB#9: # %for.body15.lr.ph + i32.const $push104=, -1 + i32.add $7=, $2, $pop104 + i32.const $push103=, 4 + i32.add $6=, $1, $pop103 + i32.const $push16=, -16 + i32.add $push17=, $3, $pop16 + i32.sub $push18=, $pop17, $10 + i32.const $push102=, -16 + i32.and $push19=, $pop18, $pop102 + i32.add $5=, $10, $pop19 +.LBB0_10: # %for.body15 + # =>This Loop Header: Depth=1 + # Child Loop BB0_12 Depth 2 + loop # label6: + i32.load $push21=, 0($1) + i32.const $push122=, 2 + i32.shl $push121=, $10, $pop122 + tee_local $push120=, $8=, $pop121 + i32.add $push119=, $pop21, $pop120 + tee_local $push118=, $9=, $pop119 + f32.load $25=, 48($pop118) + f32.load $21=, 32($9) + f32.load $17=, 16($9) + f32.load $13=, 0($9) + i32.const $push117=, 60 + i32.add $push22=, $9, $pop117 + f32.load $28=, 0($pop22) + i32.const $push116=, 56 + i32.add $push23=, $9, $pop116 + f32.load $27=, 0($pop23) + i32.const $push115=, 52 + i32.add $push24=, $9, $pop115 + f32.load $26=, 0($pop24) + i32.const $push114=, 44 + i32.add $push25=, $9, $pop114 + f32.load $24=, 0($pop25) + i32.const $push113=, 40 + i32.add $push26=, $9, $pop113 + f32.load $23=, 0($pop26) + i32.const $push112=, 36 + i32.add $push27=, $9, $pop112 + f32.load $22=, 0($pop27) + i32.const $push111=, 28 + i32.add $push28=, $9, $pop111 + f32.load $20=, 0($pop28) + i32.const $push110=, 24 + i32.add $push29=, $9, $pop110 + f32.load $19=, 0($pop29) + i32.const $push109=, 20 + i32.add $push30=, $9, $pop109 + f32.load $18=, 0($pop30) + i32.const $push108=, 12 + i32.add $push31=, $9, $pop108 + f32.load $16=, 0($pop31) + i32.const $push107=, 8 + i32.add $push32=, $9, $pop107 + f32.load $15=, 0($pop32) + i32.const $push106=, 4 + i32.add $push33=, $9, $pop106 + f32.load $14=, 0($pop33) + block + i32.const $push105=, 2 + i32.lt_s $push20=, $2, $pop105 + br_if 0, $pop20 # 0: down to label7 +# BB#11: # %for.body33.preheader + # in Loop: Header=BB0_10 Depth=1 + copy_local $11=, $7 + copy_local $12=, $6 +.LBB0_12: # %for.body33 + # Parent Loop BB0_10 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label8: + i32.load $push34=, 0($12) + i32.add $push140=, $pop34, $8 + tee_local $push139=, $9=, $pop140 + f32.load $push35=, 48($pop139) + f32.add $25=, $25, $pop35 + f32.load $push36=, 32($9) + f32.add $21=, $21, $pop36 + f32.load $push37=, 16($9) + f32.add $17=, $17, $pop37 + f32.load $push38=, 0($9) + f32.add $13=, $13, $pop38 + i32.const $push138=, 60 + i32.add $push39=, $9, $pop138 + f32.load $push40=, 0($pop39) + f32.add $28=, $28, $pop40 + i32.const $push137=, 56 + i32.add $push41=, $9, $pop137 + f32.load $push42=, 0($pop41) + f32.add $27=, $27, $pop42 + i32.const $push136=, 52 + i32.add $push43=, $9, $pop136 + f32.load $push44=, 0($pop43) + f32.add $26=, $26, $pop44 + i32.const $push135=, 44 + i32.add $push45=, $9, $pop135 + f32.load $push46=, 0($pop45) + f32.add $24=, $24, $pop46 + i32.const $push134=, 40 + i32.add $push47=, $9, $pop134 + f32.load $push48=, 0($pop47) + f32.add $23=, $23, $pop48 + i32.const $push133=, 36 + i32.add $push49=, $9, $pop133 + f32.load $push50=, 0($pop49) + f32.add $22=, $22, $pop50 + i32.const $push132=, 28 + i32.add $push51=, $9, $pop132 + f32.load $push52=, 0($pop51) + f32.add $20=, $20, $pop52 + i32.const $push131=, 24 + i32.add $push53=, $9, $pop131 + f32.load $push54=, 0($pop53) + f32.add $19=, $19, $pop54 + i32.const $push130=, 20 + i32.add $push55=, $9, $pop130 + f32.load $push56=, 0($pop55) + f32.add $18=, $18, $pop56 + i32.const $push129=, 12 + i32.add $push57=, $9, $pop129 + f32.load $push58=, 0($pop57) + f32.add $16=, $16, $pop58 + i32.const $push128=, 8 + i32.add $push59=, $9, $pop128 + f32.load $push60=, 0($pop59) + f32.add $15=, $15, $pop60 + i32.const $push127=, 4 + i32.add $push61=, $9, $pop127 + f32.load $push62=, 0($pop61) + f32.add $14=, $14, $pop62 + i32.const $push126=, 4 + i32.add $push1=, $12, $pop126 + copy_local $12=, $pop1 + i32.const $push125=, -1 + i32.add $push124=, $11, $pop125 + tee_local $push123=, $11=, $pop124 + br_if 0, $pop123 # 0: up to label8 +.LBB0_13: # %for.end56 + # in Loop: Header=BB0_10 Depth=1 + end_loop + end_block # label7: + i32.add $push157=, $0, $8 + tee_local $push156=, $9=, $pop157 + f32.store 16($pop156), $17 + f32.store 0($9), $13 + f32.store 32($9), $21 + f32.store 48($9), $25 + i32.const $push155=, 28 + i32.add $push63=, $9, $pop155 + f32.store 0($pop63), $20 + i32.const $push154=, 24 + i32.add $push64=, $9, $pop154 + f32.store 0($pop64), $19 + i32.const $push153=, 20 + i32.add $push65=, $9, $pop153 + f32.store 0($pop65), $18 + i32.const $push152=, 12 + i32.add $push66=, $9, $pop152 + f32.store 0($pop66), $16 + i32.const $push151=, 8 + i32.add $push67=, $9, $pop151 + f32.store 0($pop67), $15 + i32.const $push150=, 4 + i32.add $push68=, $9, $pop150 + f32.store 0($pop68), $14 + i32.const $push149=, 44 + i32.add $push69=, $9, $pop149 + f32.store 0($pop69), $24 + i32.const $push148=, 40 + i32.add $push70=, $9, $pop148 + f32.store 0($pop70), $23 + i32.const $push147=, 36 + i32.add $push71=, $9, $pop147 + f32.store 0($pop71), $22 + i32.const $push146=, 60 + i32.add $push72=, $9, $pop146 + f32.store 0($pop72), $28 + i32.const $push145=, 56 + i32.add $push73=, $9, $pop145 + f32.store 0($pop73), $27 + i32.const $push144=, 52 + i32.add $push74=, $9, $pop144 + f32.store 0($pop74), $26 + i32.const $push143=, 16 + i32.add $push142=, $10, $pop143 + tee_local $push141=, $10=, $pop142 + i32.lt_s $push75=, $pop141, $4 + br_if 0, $pop75 # 0: up to label6 +# BB#14: # %for.end72.loopexit + end_loop + i32.const $push76=, 16 + i32.add $10=, $5, $pop76 +.LBB0_15: # %for.end72 + end_block # label5: + block + i32.ge_s $push77=, $10, $3 + br_if 0, $pop77 # 0: down to label9 +# BB#16: # %for.body75.lr.ph + i32.const $push159=, -1 + i32.add $4=, $2, $pop159 + i32.const $push158=, 4 + i32.add $7=, $1, $pop158 + i32.load $8=, 0($1) +.LBB0_17: # %for.body75 + # =>This Loop Header: Depth=1 + # Child Loop BB0_19 Depth 2 + loop # label10: + i32.const $push163=, 2 + i32.shl $push162=, $10, $pop163 + tee_local $push161=, $11=, $pop162 + i32.add $push79=, $8, $pop161 + f32.load $25=, 0($pop79) + block + i32.const $push160=, 2 + i32.lt_s $push78=, $2, $pop160 + br_if 0, $pop78 # 0: down to label11 +# BB#18: # %for.body81.preheader + # in Loop: Header=BB0_17 Depth=1 + copy_local $12=, $4 + copy_local $9=, $7 +.LBB0_19: # %for.body81 + # Parent Loop BB0_17 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label12: + i32.load $push80=, 0($9) + i32.add $push81=, $pop80, $11 + f32.load $push82=, 0($pop81) + f32.add $25=, $25, $pop82 + i32.const $push167=, 4 + i32.add $push2=, $9, $pop167 + copy_local $9=, $pop2 + i32.const $push166=, -1 + i32.add $push165=, $12, $pop166 + tee_local $push164=, $12=, $pop165 + br_if 0, $pop164 # 0: up to label12 +.LBB0_20: # %for.end87 + # in Loop: Header=BB0_17 Depth=1 + end_loop + end_block # label11: + i32.add $push83=, $0, $11 + f32.store 0($pop83), $25 + i32.const $push170=, 1 + i32.add $push169=, $10, $pop170 + tee_local $push168=, $10=, $pop169 + i32.ne $push84=, $pop168, $3 + br_if 0, $pop84 # 0: up to label10 +.LBB0_21: # %for.end91 + end_loop + end_block # label9: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local f32, i32, i32, i32 +# BB#0: # %entry + i32.const $push31=, 0 + i32.const $push29=, 0 + i32.load $push28=, __stack_pointer($pop29) + i32.const $push30=, 16 + i32.sub $push43=, $pop28, $pop30 + tee_local $push42=, $3=, $pop43 + i32.store __stack_pointer($pop31), $pop42 + i32.const $2=, 0 + i32.const $push41=, 0 + i32.const $push0=, buffer + i32.sub $push1=, $pop41, $pop0 + i32.const $push2=, 63 + i32.and $push40=, $pop1, $pop2 + tee_local $push39=, $1=, $pop40 + i32.const $push3=, buffer+128 + i32.add $push4=, $pop39, $pop3 + i32.store 12($3), $pop4 + i32.const $push5=, buffer+64 + i32.add $push38=, $1, $pop5 + tee_local $push37=, $1=, $pop38 + i32.store 8($3), $pop37 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label13: + i32.const $push53=, 64 + i32.add $push6=, $1, $pop53 + f32.convert_s/i32 $push52=, $2 + tee_local $push51=, $0=, $pop52 + f32.const $push50=, 0x1.8p3 + f32.mul $push7=, $pop51, $pop50 + f32.add $push8=, $pop7, $0 + f32.store 0($pop6), $pop8 + f32.const $push49=, 0x1.6p3 + f32.mul $push9=, $0, $pop49 + f32.add $push10=, $pop9, $0 + f32.store 0($1), $pop10 + i32.const $push48=, 4 + i32.add $1=, $1, $pop48 + i32.const $push47=, 1 + i32.add $push46=, $2, $pop47 + tee_local $push45=, $2=, $pop46 + i32.const $push44=, 16 + i32.ne $push11=, $pop45, $pop44 + br_if 0, $pop11 # 0: up to label13 +# BB#2: # %for.end + end_loop + i32.const $push13=, 0 + i32.const $push12=, buffer + i32.sub $push14=, $pop13, $pop12 + i32.const $push15=, 63 + i32.and $push16=, $pop14, $pop15 + i32.const $push56=, buffer + i32.add $push55=, $pop16, $pop56 + tee_local $push54=, $1=, $pop55 + i32.const $push35=, 8 + i32.add $push36=, $3, $pop35 + i32.const $push18=, 2 + i32.const $push17=, 16 + call foo@FUNCTION, $pop54, $pop36, $pop18, $pop17 + i32.const $2=, -1 +.LBB1_3: # %for.body16 + # =>This Inner Loop Header: Depth=1 + block + loop # label15: + f32.load $push24=, 0($1) + i32.const $push63=, 1 + i32.add $push62=, $2, $pop63 + tee_local $push61=, $2=, $pop62 + f32.convert_s/i32 $push60=, $pop61 + tee_local $push59=, $0=, $pop60 + f32.const $push58=, 0x1.8p3 + f32.mul $push22=, $pop59, $pop58 + f32.const $push57=, 0x1.6p3 + f32.mul $push19=, $0, $pop57 + f32.add $push20=, $pop19, $0 + f32.add $push21=, $pop20, $0 + f32.add $push23=, $pop22, $pop21 + f32.ne $push25=, $pop24, $pop23 + br_if 1, $pop25 # 1: down to label14 +# BB#4: # %for.cond13 + # in Loop: Header=BB1_3 Depth=1 + i32.const $push65=, 4 + i32.add $1=, $1, $pop65 + i32.const $push64=, 14 + i32.le_u $push26=, $2, $pop64 + br_if 0, $pop26 # 0: up to label15 +# BB#5: # %for.end31 + end_loop + i32.const $push34=, 0 + i32.const $push32=, 16 + i32.add $push33=, $3, $pop32 + i32.store __stack_pointer($pop34), $pop33 + i32.const $push27=, 0 + return $pop27 +.LBB1_6: # %if.then + end_block # label14: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden buffer # @buffer + .type buffer,@object + .section .bss.buffer,"aw",@nobits + .globl buffer + .p2align 4 +buffer: + .skip 256 + .size buffer, 256 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20060905-1.c.s b/src/binaryen/test/torture-s/20060905-1.c.s new file mode 100644 index 0000000000..327a3a665e --- /dev/null +++ b/src/binaryen/test/torture-s/20060905-1.c.s @@ -0,0 +1,70 @@ + .text + .file "20060905-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $0=, 128 + i32.const $1=, 0 +.LBB0_1: # %for.body.outer.i + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push17=, 0 + i32.const $push16=, 128 + i32.const $push15=, 128 + i32.gt_u $push0=, $1, $pop15 + i32.select $push14=, $1, $pop16, $pop0 + tee_local $push13=, $1=, $pop14 + i32.const $push12=, 3 + i32.mul $push1=, $pop13, $pop12 + i32.const $push11=, s-384 + i32.add $push2=, $pop1, $pop11 + i32.load8_u $push3=, 0($pop2) + i32.store8 g($pop17), $pop3 + i32.const $push10=, -1 + i32.add $0=, $0, $pop10 + i32.const $push9=, 1 + i32.add $push8=, $1, $pop9 + tee_local $push7=, $1=, $pop8 + i32.const $push6=, 256 + i32.ne $push4=, $pop7, $pop6 + br_if 0, $pop4 # 0: up to label0 +# BB#2: # %foo.exit + end_loop + block + br_if 0, $0 # 0: down to label1 +# BB#3: # %if.end + i32.const $push5=, 0 + return $pop5 +.LBB0_4: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 4 +s: + .skip 768 + .size s, 768 + + .hidden g # @g + .type g,@object + .section .bss.g,"aw",@nobits + .globl g +g: + .int8 0 # 0x0 + .size g, 1 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20060910-1.c.s b/src/binaryen/test/torture-s/20060910-1.c.s new file mode 100644 index 0000000000..6a60d43521 --- /dev/null +++ b/src/binaryen/test/torture-s/20060910-1.c.s @@ -0,0 +1,125 @@ + .text + .file "20060910-1.c" + .section .text.input_getc_complicated,"ax",@progbits + .hidden input_getc_complicated # -- Begin function input_getc_complicated + .globl input_getc_complicated + .type input_getc_complicated,@function +input_getc_complicated: # @input_getc_complicated + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size input_getc_complicated, .Lfunc_end0-input_getc_complicated + # -- End function + .section .text.check_header,"ax",@progbits + .hidden check_header # -- Begin function check_header + .globl check_header + .type check_header,@function +check_header: # @check_header + .param i32 + .result i32 + .local i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.load $push37=, 0($0) + tee_local $push36=, $2=, $pop37 + i32.const $push35=, 1 + i32.add $push0=, $pop36, $pop35 + i32.load $push34=, 4($0) + tee_local $push33=, $1=, $pop34 + i32.lt_u $push32=, $2, $pop33 + tee_local $push31=, $3=, $pop32 + i32.select $push30=, $pop0, $2, $pop31 + tee_local $push29=, $2=, $pop30 + i32.const $push28=, 1 + i32.add $push1=, $pop29, $pop28 + i32.lt_u $push27=, $2, $1 + tee_local $push26=, $4=, $pop27 + i32.select $push25=, $pop1, $2, $pop26 + tee_local $push24=, $2=, $pop25 + i32.const $push23=, 1 + i32.add $push2=, $pop24, $pop23 + i32.lt_u $push22=, $2, $1 + tee_local $push21=, $5=, $pop22 + i32.select $push20=, $pop2, $2, $pop21 + tee_local $push19=, $2=, $pop20 + i32.const $push18=, 1 + i32.add $push3=, $pop19, $pop18 + i32.lt_u $push17=, $2, $1 + tee_local $push16=, $6=, $pop17 + i32.select $push15=, $pop3, $2, $pop16 + tee_local $push14=, $2=, $pop15 + i32.const $push13=, 1 + i32.add $push4=, $pop14, $pop13 + i32.lt_u $push12=, $2, $1 + tee_local $push11=, $7=, $pop12 + i32.select $2=, $pop4, $2, $pop11 + block + br_if 0, $3 # 0: down to label0 +# BB#1: # %entry + br_if 0, $4 # 0: down to label0 +# BB#2: # %entry + br_if 0, $5 # 0: down to label0 +# BB#3: # %entry + br_if 0, $6 # 0: down to label0 +# BB#4: # %entry + br_if 0, $7 # 0: down to label0 +# BB#5: # %entry + i32.lt_u $push5=, $2, $1 + br_if 0, $pop5 # 0: down to label0 +# BB#6: + i32.const $push10=, 1 + return $pop10 +.LBB1_7: + end_block # label0: + i32.const $push38=, 1 + i32.add $push7=, $2, $pop38 + i32.lt_u $push6=, $2, $1 + i32.select $push8=, $pop7, $2, $pop6 + i32.store 0($0), $pop8 + i32.const $push9=, 1 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end1: + .size check_header, .Lfunc_end1-check_header + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end2 + i32.const $push1=, 0 + i32.const $push0=, b+6 + i32.store s($pop1), $pop0 + i32.const $push4=, 0 + i32.const $push3=, b+6 + i32.store s+4($pop4), $pop3 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b +b: + .skip 6 + .size b, 6 + + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 2 +s: + .skip 8 + .size s, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20060929-1.c.s b/src/binaryen/test/torture-s/20060929-1.c.s new file mode 100644 index 0000000000..bc333efdbf --- /dev/null +++ b/src/binaryen/test/torture-s/20060929-1.c.s @@ -0,0 +1,77 @@ + .text + .file "20060929-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.load $push4=, 0($0) + tee_local $push3=, $2=, $pop4 + i32.load $push0=, 0($1) + i32.store 0($pop3), $pop0 + i32.const $push1=, 4 + i32.add $push2=, $2, $pop1 + i32.store 0($0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.load $push4=, 0($0) + tee_local $push3=, $2=, $pop4 + i32.load $push0=, 0($1) + i32.store 0($pop3), $pop0 + i32.const $push1=, 4 + i32.add $push2=, $2, $pop1 + i32.store 0($0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.load $push4=, 0($0) + tee_local $push3=, $2=, $pop4 + i32.load $push0=, 0($1) + i32.store 0($pop3), $pop0 + i32.const $push1=, 4 + i32.add $push2=, $2, $pop1 + i32.store 0($0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size baz, .Lfunc_end2-baz + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end19 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20060930-1.c.s b/src/binaryen/test/torture-s/20060930-1.c.s new file mode 100644 index 0000000000..dade2ac24d --- /dev/null +++ b/src/binaryen/test/torture-s/20060930-1.c.s @@ -0,0 +1,83 @@ + .text + .file "20060930-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.ne $push1=, $1, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return $1 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + block + i32.const $push3=, 1 + i32.lt_s $push4=, $1, $pop3 + br_if 0, $pop4 # 0: down to label1 +# BB#1: # %for.body.lr.ph + i32.const $push0=, 0 + i32.const $push12=, 0 + i32.const $push11=, 0 + i32.sub $push2=, $pop11, $0 + i32.const $push10=, 0 + i32.gt_s $push1=, $0, $pop10 + i32.select $push9=, $pop2, $0, $pop1 + tee_local $push8=, $0=, $pop9 + i32.sub $push6=, $pop12, $pop8 + i32.const $push7=, -1 + i32.gt_s $push5=, $0, $pop7 + i32.select $0=, $pop0, $pop6, $pop5 +.LBB1_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.call $drop=, bar@FUNCTION, $1, $0 + i32.const $push15=, -1 + i32.add $push14=, $1, $pop15 + tee_local $push13=, $1=, $pop14 + br_if 0, $pop13 # 0: up to label2 +.LBB1_3: # %for.end + end_loop + end_block # label1: + # fallthrough-return + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.const $push2=, 1 + call foo@FUNCTION, $pop0, $pop2 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20060930-2.c.s b/src/binaryen/test/torture-s/20060930-2.c.s new file mode 100644 index 0000000000..2ce25e2fdd --- /dev/null +++ b/src/binaryen/test/torture-s/20060930-2.c.s @@ -0,0 +1,70 @@ + .text + .file "20060930-2.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, s + i32.store 0($1), $pop0 + i32.const $push1=, 0 + i32.load $push2=, t($pop1) + i32.store 0($0), $pop2 + i32.load $push3=, 0($1) + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push0=, t + i32.store t($pop6), $pop0 + block + i32.const $push1=, s + i32.const $push5=, s + i32.call $push2=, bar@FUNCTION, $pop1, $pop5 + i32.const $push4=, t + i32.ne $push3=, $pop2, $pop4 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push7=, 0 + return $pop7 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 2 +s: + .skip 4 + .size s, 4 + + .hidden t # @t + .type t,@object + .section .bss.t,"aw",@nobits + .globl t + .p2align 2 +t: + .skip 4 + .size t, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20061031-1.c.s b/src/binaryen/test/torture-s/20061031-1.c.s new file mode 100644 index 0000000000..ea5d722676 --- /dev/null +++ b/src/binaryen/test/torture-s/20061031-1.c.s @@ -0,0 +1,80 @@ + .text + .file "20061031-1.c" + .section .text.ff,"ax",@progbits + .hidden ff # -- Begin function ff + .globl ff + .type ff,@function +ff: # @ff + .param i32 +# BB#0: # %entry + #APP + #NO_APP + # fallthrough-return + .endfunc +.Lfunc_end0: + .size ff, .Lfunc_end0-ff + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .local i32 +# BB#0: # %entry + call ff@FUNCTION, $0 + block + i32.const $push0=, 2 + i32.add $push6=, $0, $pop0 + tee_local $push5=, $1=, $pop6 + i32.const $push4=, 65535 + i32.and $push1=, $pop5, $pop4 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.then + #APP + #NO_APP +.LBB1_2: # %for.inc + end_block # label0: + call ff@FUNCTION, $0 + block + i32.add $push2=, $1, $0 + i32.const $push7=, 65535 + i32.and $push3=, $pop2, $pop7 + i32.eqz $push8=, $pop3 + br_if 0, $pop8 # 0: down to label1 +# BB#3: # %for.inc.1 + return +.LBB1_4: # %if.then.1 + end_block # label1: + #APP + #NO_APP + # fallthrough-return + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, -1 + call f@FUNCTION, $pop0 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden nunmap # @nunmap + .type nunmap,@object + .section .rodata.nunmap,"a",@progbits + .globl nunmap +nunmap: + .ascii "\021\377\001" + .size nunmap, 3 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20061101-1.c.s b/src/binaryen/test/torture-s/20061101-1.c.s new file mode 100644 index 0000000000..f2d52d7b00 --- /dev/null +++ b/src/binaryen/test/torture-s/20061101-1.c.s @@ -0,0 +1,69 @@ + .text + .file "20061101-1.c" + .section .text.tar,"ax",@progbits + .hidden tar # -- Begin function tar + .globl tar + .type tar,@function +tar: # @tar + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 36863 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push2=, -1 + return $pop2 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size tar, .Lfunc_end0-tar + # -- End function + .section .text.bug,"ax",@progbits + .hidden bug # -- Begin function bug + .globl bug + .type bug,@function +bug: # @bug + .param i32, i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.const $push2=, -1 + i32.add $push3=, $0, $pop2 + i32.const $push8=, 1 + i32.gt_s $push1=, $0, $pop8 + i32.select $push4=, $pop0, $pop3, $pop1 + i32.mul $push5=, $pop4, $1 + i32.const $push6=, 36863 + i32.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label1 +# BB#1: # %while.end + return +.LBB1_2: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size bug, .Lfunc_end1-bug + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20061101-2.c.s b/src/binaryen/test/torture-s/20061101-2.c.s new file mode 100644 index 0000000000..cfb25950cd --- /dev/null +++ b/src/binaryen/test/torture-s/20061101-2.c.s @@ -0,0 +1,69 @@ + .text + .file "20061101-2.c" + .section .text.tar,"ax",@progbits + .hidden tar # -- Begin function tar + .globl tar + .type tar,@function +tar: # @tar + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 36863 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push2=, -1 + return $pop2 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size tar, .Lfunc_end0-tar + # -- End function + .section .text.bug,"ax",@progbits + .hidden bug # -- Begin function bug + .globl bug + .type bug,@function +bug: # @bug + .param i32, i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.const $push2=, -1 + i32.add $push3=, $0, $pop2 + i32.const $push8=, 1 + i32.gt_s $push1=, $0, $pop8 + i32.select $push4=, $pop0, $pop3, $pop1 + i32.mul $push5=, $pop4, $1 + i32.const $push6=, 36863 + i32.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label1 +# BB#1: # %while.end + return +.LBB1_2: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size bug, .Lfunc_end1-bug + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20070201-1.c.s b/src/binaryen/test/torture-s/20070201-1.c.s new file mode 100644 index 0000000000..376ab5b7f9 --- /dev/null +++ b/src/binaryen/test/torture-s/20070201-1.c.s @@ -0,0 +1,73 @@ + .text + .file "20070201-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push11=, $pop3, $pop5 + tee_local $push10=, $2=, $pop11 + i32.store __stack_pointer($pop6), $pop10 + i32.store 0($2), $1 + i32.const $push0=, .L.str + i32.call $drop=, sprintf@FUNCTION, $0, $pop0, $2 + i32.const $push9=, 0 + i32.const $push7=, 16 + i32.add $push8=, $2, $pop7 + i32.store __stack_pointer($pop9), $pop8 + i32.const $push1=, 1 + i32.add $push2=, $1, $pop1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %if.end + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push14=, $pop4, $pop6 + tee_local $push13=, $0=, $pop14 + i32.store __stack_pointer($pop7), $pop13 + i32.const $push0=, 12 + i32.add $push1=, $0, $pop0 + i32.store 0($0), $pop1 + i32.const $push11=, 10 + i32.add $push12=, $0, $pop11 + i32.const $push2=, .L.str + i32.call $drop=, sprintf@FUNCTION, $pop12, $pop2, $0 + i32.const $push10=, 0 + i32.const $push8=, 16 + i32.add $push9=, $0, $pop8 + i32.store __stack_pointer($pop10), $pop9 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "abcde" + .size .L.str, 6 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype sprintf, i32, i32, i32 diff --git a/src/binaryen/test/torture-s/20070212-1.c.s b/src/binaryen/test/torture-s/20070212-1.c.s new file mode 100644 index 0000000000..f2be8e7bf4 --- /dev/null +++ b/src/binaryen/test/torture-s/20070212-1.c.s @@ -0,0 +1,43 @@ + .text + .file "20070212-1.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32, i32, i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push3=, 0 + i32.load $4=, __stack_pointer($pop3) + i32.const $push0=, 0 + i32.store 0($3), $pop0 + i32.const $push4=, 16 + i32.sub $push8=, $4, $pop4 + tee_local $push7=, $3=, $pop8 + i32.store 12($pop7), $0 + i32.const $push5=, 12 + i32.add $push6=, $3, $pop5 + i32.select $push1=, $pop6, $2, $1 + i32.load $push2=, 0($pop1) + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20070212-2.c.s b/src/binaryen/test/torture-s/20070212-2.c.s new file mode 100644 index 0000000000..abc22d8fcc --- /dev/null +++ b/src/binaryen/test/torture-s/20070212-2.c.s @@ -0,0 +1,32 @@ + .text + .file "20070212-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.select $push1=, $pop0, $2, $0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20070212-3.c.s b/src/binaryen/test/torture-s/20070212-3.c.s new file mode 100644 index 0000000000..e5512c264a --- /dev/null +++ b/src/binaryen/test/torture-s/20070212-3.c.s @@ -0,0 +1,46 @@ + .text + .file "20070212-3.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32, i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.add $push1=, $0, $pop0 + i32.select $push5=, $0, $pop1, $2 + tee_local $push4=, $4=, $pop5 + i32.load $2=, 0($pop4) + i32.const $push2=, 1 + i32.store 0($0), $pop2 + block + i32.eqz $push6=, $3 + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %if.then3 + i32.load $1=, 0($4) +.LBB0_2: # %if.end5 + end_block # label0: + i32.add $push3=, $1, $2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20070424-1.c.s b/src/binaryen/test/torture-s/20070424-1.c.s new file mode 100644 index 0000000000..502de556e1 --- /dev/null +++ b/src/binaryen/test/torture-s/20070424-1.c.s @@ -0,0 +1,65 @@ + .text + .file "20070424-1.c" + .section .text.do_exit,"ax",@progbits + .hidden do_exit # -- Begin function do_exit + .globl do_exit + .type do_exit,@function +do_exit: # @do_exit +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size do_exit, .Lfunc_end0-do_exit + # -- End function + .section .text.do_abort,"ax",@progbits + .hidden do_abort # -- Begin function do_abort + .globl do_abort + .type do_abort,@function +do_abort: # @do_abort +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size do_abort, .Lfunc_end1-do_abort + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + block + i32.ge_s $push0=, $0, $1 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %doit + call do_abort@FUNCTION + unreachable +.LBB2_2: # %if.end + end_block # label0: + call do_exit@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size foo, .Lfunc_end2-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call do_exit@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20070517-1.c.s b/src/binaryen/test/torture-s/20070517-1.c.s new file mode 100644 index 0000000000..30d6531897 --- /dev/null +++ b/src/binaryen/test/torture-s/20070517-1.c.s @@ -0,0 +1,64 @@ + .text + .file "20070517-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + block + block + i32.call $push12=, get_kind@FUNCTION + tee_local $push11=, $0=, $pop12 + i32.const $push0=, 10 + i32.gt_u $push1=, $pop11, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %entry + i32.const $push2=, 1 + i32.shl $push3=, $pop2, $0 + i32.const $push4=, 1568 + i32.and $push5=, $pop3, $pop4 + i32.eqz $push13=, $pop5 + br_if 0, $pop13 # 0: down to label1 +# BB#2: # %if.then.i + i32.const $push6=, -9 + i32.add $push7=, $0, $pop6 + i32.const $push8=, 2 + i32.ge_u $push9=, $pop7, $pop8 + br_if 1, $pop9 # 1: down to label0 +.LBB0_3: # %example.exit + end_block # label1: + i32.const $push10=, 0 + return $pop10 +.LBB0_4: # %if.else.i + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.get_kind,"ax",@progbits + .type get_kind,@function # -- Begin function get_kind +get_kind: # @get_kind + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push6=, $pop2, $pop4 + tee_local $push5=, $0=, $pop6 + i32.const $push0=, 10 + i32.store 12($pop5), $pop0 + i32.load $push1=, 12($0) + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size get_kind, .Lfunc_end1-get_kind + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20070614-1.c.s b/src/binaryen/test/torture-s/20070614-1.c.s new file mode 100644 index 0000000000..5c596b4a05 --- /dev/null +++ b/src/binaryen/test/torture-s/20070614-1.c.s @@ -0,0 +1,123 @@ + .text + .file "20070614-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + block + f64.load $push3=, 0($0) + i32.const $push6=, 0 + f64.load $push2=, v($pop6) + f64.ne $push4=, $pop3, $pop2 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %entry + f64.load $push0=, 8($0) + i32.const $push7=, 0 + f64.load $push1=, v+8($pop7) + f64.ne $push5=, $pop0, $pop1 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end + return +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, v($pop0) + i64.store 0($0), $pop1 + i32.const $push3=, 0 + i64.load $push2=, v+8($pop3) + i64.store 8($0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .result i32 + .local f64 +# BB#0: # %entry + block + i32.const $push8=, 0 + f64.load $push7=, v($pop8) + tee_local $push6=, $0=, $pop7 + f64.ne $push1=, $pop6, $0 + i32.const $push5=, 0 + f64.load $push4=, v+8($pop5) + tee_local $push3=, $0=, $pop4 + f64.ne $push0=, $pop3, $0 + i32.or $push2=, $pop1, $pop0 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %entry.split + i32.const $push9=, 0 + return $pop9 +.LBB2_2: # %if.then.i.split + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size baz, .Lfunc_end2-baz + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local f64 +# BB#0: # %entry + block + i32.const $push8=, 0 + f64.load $push7=, v($pop8) + tee_local $push6=, $0=, $pop7 + f64.eq $push1=, $pop6, $0 + i32.const $push5=, 0 + f64.load $push4=, v+8($pop5) + tee_local $push3=, $0=, $pop4 + f64.eq $push0=, $pop3, $0 + i32.and $push2=, $pop1, $pop0 + i32.eqz $push10=, $pop2 + br_if 0, $pop10 # 0: down to label2 +# BB#1: # %baz.exit + i32.const $push9=, 0 + return $pop9 +.LBB3_2: # %if.then.i.split.i + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden v # @v + .type v,@object + .section .data.v,"aw",@progbits + .globl v + .p2align 3 +v: + .int64 4613937818241073152 # double 3 + .int64 4607182418800017408 # double 1 + .size v, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20070623-1.c.s b/src/binaryen/test/torture-s/20070623-1.c.s new file mode 100644 index 0000000000..9f27c10bae --- /dev/null +++ b/src/binaryen/test/torture-s/20070623-1.c.s @@ -0,0 +1,315 @@ + .text + .file "20070623-1.c" + .section .text.nge,"ax",@progbits + .hidden nge # -- Begin function nge + .globl nge + .type nge,@function +nge: # @nge + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, -1 + i32.const $push1=, 0 + i32.ge_s $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size nge, .Lfunc_end0-nge + # -- End function + .section .text.ngt,"ax",@progbits + .hidden ngt # -- Begin function ngt + .globl ngt + .type ngt,@function +ngt: # @ngt + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, -1 + i32.const $push1=, 0 + i32.gt_s $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size ngt, .Lfunc_end1-ngt + # -- End function + .section .text.nle,"ax",@progbits + .hidden nle # -- Begin function nle + .globl nle + .type nle,@function +nle: # @nle + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, -1 + i32.const $push1=, 0 + i32.le_s $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size nle, .Lfunc_end2-nle + # -- End function + .section .text.nlt,"ax",@progbits + .hidden nlt # -- Begin function nlt + .globl nlt + .type nlt,@function +nlt: # @nlt + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, -1 + i32.const $push1=, 0 + i32.lt_s $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end3: + .size nlt, .Lfunc_end3-nlt + # -- End function + .section .text.neq,"ax",@progbits + .hidden neq # -- Begin function neq + .globl neq + .type neq,@function +neq: # @neq + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, -1 + i32.const $push1=, 0 + i32.eq $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end4: + .size neq, .Lfunc_end4-neq + # -- End function + .section .text.nne,"ax",@progbits + .hidden nne # -- Begin function nne + .globl nne + .type nne,@function +nne: # @nne + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, -1 + i32.const $push1=, 0 + i32.ne $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end5: + .size nne, .Lfunc_end5-nne + # -- End function + .section .text.ngeu,"ax",@progbits + .hidden ngeu # -- Begin function ngeu + .globl ngeu + .type ngeu,@function +ngeu: # @ngeu + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, -1 + i32.const $push1=, 0 + i32.ge_u $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end6: + .size ngeu, .Lfunc_end6-ngeu + # -- End function + .section .text.ngtu,"ax",@progbits + .hidden ngtu # -- Begin function ngtu + .globl ngtu + .type ngtu,@function +ngtu: # @ngtu + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, -1 + i32.const $push1=, 0 + i32.gt_u $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end7: + .size ngtu, .Lfunc_end7-ngtu + # -- End function + .section .text.nleu,"ax",@progbits + .hidden nleu # -- Begin function nleu + .globl nleu + .type nleu,@function +nleu: # @nleu + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, -1 + i32.const $push1=, 0 + i32.le_u $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end8: + .size nleu, .Lfunc_end8-nleu + # -- End function + .section .text.nltu,"ax",@progbits + .hidden nltu # -- Begin function nltu + .globl nltu + .type nltu,@function +nltu: # @nltu + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, -1 + i32.const $push1=, 0 + i32.lt_u $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end9: + .size nltu, .Lfunc_end9-nltu + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push34=, -2147483648 + i32.const $push33=, 2147483647 + i32.call $push0=, nge@FUNCTION, $pop34, $pop33 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push36=, 2147483647 + i32.const $push35=, -2147483648 + i32.call $push1=, nge@FUNCTION, $pop36, $pop35 + i32.const $push2=, -1 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %if.end4 + i32.const $push38=, -2147483648 + i32.const $push37=, 2147483647 + i32.call $push4=, ngt@FUNCTION, $pop38, $pop37 + br_if 0, $pop4 # 0: down to label0 +# BB#3: # %if.end8 + i32.const $push41=, 2147483647 + i32.const $push40=, -2147483648 + i32.call $push5=, ngt@FUNCTION, $pop41, $pop40 + i32.const $push39=, -1 + i32.ne $push6=, $pop5, $pop39 + br_if 0, $pop6 # 0: down to label0 +# BB#4: # %if.end12 + i32.const $push44=, -2147483648 + i32.const $push43=, 2147483647 + i32.call $push7=, nle@FUNCTION, $pop44, $pop43 + i32.const $push42=, -1 + i32.ne $push8=, $pop7, $pop42 + br_if 0, $pop8 # 0: down to label0 +# BB#5: # %if.end16 + i32.const $push46=, 2147483647 + i32.const $push45=, -2147483648 + i32.call $push9=, nle@FUNCTION, $pop46, $pop45 + br_if 0, $pop9 # 0: down to label0 +# BB#6: # %if.end20 + i32.const $push48=, -2147483648 + i32.const $push47=, 2147483647 + i32.call $push10=, nlt@FUNCTION, $pop48, $pop47 + i32.const $push11=, -1 + i32.ne $push12=, $pop10, $pop11 + br_if 0, $pop12 # 0: down to label0 +# BB#7: # %if.end24 + i32.const $push50=, 2147483647 + i32.const $push49=, -2147483648 + i32.call $push13=, nlt@FUNCTION, $pop50, $pop49 + br_if 0, $pop13 # 0: down to label0 +# BB#8: # %if.end28 + i32.const $push52=, -2147483648 + i32.const $push51=, 2147483647 + i32.call $push14=, neq@FUNCTION, $pop52, $pop51 + br_if 0, $pop14 # 0: down to label0 +# BB#9: # %if.end32 + i32.const $push54=, 2147483647 + i32.const $push53=, -2147483648 + i32.call $push15=, neq@FUNCTION, $pop54, $pop53 + br_if 0, $pop15 # 0: down to label0 +# BB#10: # %if.end36 + i32.const $push57=, -2147483648 + i32.const $push56=, 2147483647 + i32.call $push16=, nne@FUNCTION, $pop57, $pop56 + i32.const $push55=, -1 + i32.ne $push17=, $pop16, $pop55 + br_if 0, $pop17 # 0: down to label0 +# BB#11: # %if.end40 + i32.const $push60=, 2147483647 + i32.const $push59=, -2147483648 + i32.call $push18=, nne@FUNCTION, $pop60, $pop59 + i32.const $push58=, -1 + i32.ne $push19=, $pop18, $pop58 + br_if 0, $pop19 # 0: down to label0 +# BB#12: # %if.end44 + i32.const $push62=, 0 + i32.const $push61=, -1 + i32.call $push20=, ngeu@FUNCTION, $pop62, $pop61 + br_if 0, $pop20 # 0: down to label0 +# BB#13: # %if.end48 + i32.const $push65=, -1 + i32.const $push64=, 0 + i32.call $push21=, ngeu@FUNCTION, $pop65, $pop64 + i32.const $push63=, -1 + i32.ne $push22=, $pop21, $pop63 + br_if 0, $pop22 # 0: down to label0 +# BB#14: # %if.end52 + i32.const $push67=, 0 + i32.const $push66=, -1 + i32.call $push23=, ngtu@FUNCTION, $pop67, $pop66 + br_if 0, $pop23 # 0: down to label0 +# BB#15: # %if.end56 + i32.const $push70=, -1 + i32.const $push69=, 0 + i32.call $push24=, ngtu@FUNCTION, $pop70, $pop69 + i32.const $push68=, -1 + i32.ne $push25=, $pop24, $pop68 + br_if 0, $pop25 # 0: down to label0 +# BB#16: # %if.end60 + i32.const $push73=, 0 + i32.const $push72=, -1 + i32.call $push26=, nleu@FUNCTION, $pop73, $pop72 + i32.const $push71=, -1 + i32.ne $push27=, $pop26, $pop71 + br_if 0, $pop27 # 0: down to label0 +# BB#17: # %if.end64 + i32.const $push75=, -1 + i32.const $push74=, 0 + i32.call $push28=, nleu@FUNCTION, $pop75, $pop74 + br_if 0, $pop28 # 0: down to label0 +# BB#18: # %if.end68 + i32.const $push78=, 0 + i32.const $push77=, -1 + i32.call $push29=, nltu@FUNCTION, $pop78, $pop77 + i32.const $push76=, -1 + i32.ne $push30=, $pop29, $pop76 + br_if 0, $pop30 # 0: down to label0 +# BB#19: # %if.end72 + i32.const $push80=, -1 + i32.const $push79=, 0 + i32.call $push31=, nltu@FUNCTION, $pop80, $pop79 + br_if 0, $pop31 # 0: down to label0 +# BB#20: # %if.end76 + i32.const $push32=, 0 + call exit@FUNCTION, $pop32 + unreachable +.LBB10_21: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end10: + .size main, .Lfunc_end10-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20070724-1.c.s b/src/binaryen/test/torture-s/20070724-1.c.s new file mode 100644 index 0000000000..9346149805 --- /dev/null +++ b/src/binaryen/test/torture-s/20070724-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20070724-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20070824-1.c.s b/src/binaryen/test/torture-s/20070824-1.c.s new file mode 100644 index 0000000000..08b62d5b12 --- /dev/null +++ b/src/binaryen/test/torture-s/20070824-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20070824-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20071011-1.c.s b/src/binaryen/test/torture-s/20071011-1.c.s new file mode 100644 index 0000000000..b0abe6a1c3 --- /dev/null +++ b/src/binaryen/test/torture-s/20071011-1.c.s @@ -0,0 +1,42 @@ + .text + .file "20071011-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .local i32 +# BB#0: # %entry + i32.load $1=, 0($0) + i32.const $push0=, 0 + i32.store 0($0), $pop0 + block + i32.eqz $push1=, $1 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.then + return +.LBB0_2: # %if.end + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %foo.exit + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20071018-1.c.s b/src/binaryen/test/torture-s/20071018-1.c.s new file mode 100644 index 0000000000..87c7160ef8 --- /dev/null +++ b/src/binaryen/test/torture-s/20071018-1.c.s @@ -0,0 +1,69 @@ + .text + .file "20071018-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + i32.const $push0=, 8 + i32.call $push1=, __builtin_malloc@FUNCTION, $pop0 + i32.store 0($0), $pop1 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 16 + i32.call $push3=, __builtin_malloc@FUNCTION, $pop2 + i32.const $push0=, 5 + i32.shl $push1=, $0, $pop0 + i32.add $push4=, $pop3, $pop1 + i32.const $push5=, -20 + i32.add $push9=, $pop4, $pop5 + tee_local $push8=, $0=, $pop9 + i32.const $push6=, 0 + i32.store 0($pop8), $pop6 + call bar@FUNCTION, $0 + i32.load $push7=, 0($0) + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.call $push1=, foo@FUNCTION, $pop0 + i32.eqz $push3=, $pop1 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push2=, 0 + return $pop2 +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype __builtin_malloc, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20071029-1.c.s b/src/binaryen/test/torture-s/20071029-1.c.s new file mode 100644 index 0000000000..9c2f1d5b60 --- /dev/null +++ b/src/binaryen/test/torture-s/20071029-1.c.s @@ -0,0 +1,161 @@ + .text + .file "20071029-1.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.load $3=, 0($0) + i32.const $push0=, 0 + i32.const $push20=, 0 + i32.load $push19=, test.i($pop20) + tee_local $push18=, $2=, $pop19 + i32.const $push1=, 1 + i32.add $push17=, $pop18, $pop1 + tee_local $push16=, $1=, $pop17 + i32.store test.i($pop0), $pop16 + block + block + i32.ne $push2=, $3, $2 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %if.end + i32.load $push3=, 4($0) + br_if 0, $pop3 # 0: down to label1 +# BB#2: # %lor.lhs.false + i32.load $push4=, 8($0) + br_if 0, $pop4 # 0: down to label1 +# BB#3: # %lor.lhs.false6 + i32.load $push5=, 12($0) + br_if 0, $pop5 # 0: down to label1 +# BB#4: # %lor.lhs.false10 + i32.load $push6=, 16($0) + br_if 0, $pop6 # 0: down to label1 +# BB#5: # %lor.lhs.false13 + i32.load $push7=, 20($0) + br_if 0, $pop7 # 0: down to label1 +# BB#6: # %lor.lhs.false16 + i32.load $push8=, 24($0) + br_if 0, $pop8 # 0: down to label1 +# BB#7: # %lor.lhs.false20 + i32.load $push9=, 28($0) + br_if 0, $pop9 # 0: down to label1 +# BB#8: # %lor.lhs.false23 + i32.load $push10=, 32($0) + br_if 0, $pop10 # 0: down to label1 +# BB#9: # %lor.lhs.false26 + i32.load $push11=, 36($0) + br_if 0, $pop11 # 0: down to label1 +# BB#10: # %lor.lhs.false29 + i32.load $push12=, 40($0) + br_if 0, $pop12 # 0: down to label1 +# BB#11: # %if.end34 + i32.const $push13=, 20 + i32.eq $push14=, $1, $pop13 + br_if 1, $pop14 # 1: down to label0 +# BB#12: # %if.end37 + return +.LBB0_13: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable +.LBB0_14: # %if.then36 + end_block # label0: + i32.const $push15=, 0 + call exit@FUNCTION, $pop15 + unreachable + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .local i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push10=, 0 + i32.const $push8=, 0 + i32.load $push7=, __stack_pointer($pop8) + i32.const $push9=, 64 + i32.sub $push19=, $pop7, $pop9 + tee_local $push18=, $8=, $pop19 + i32.store __stack_pointer($pop10), $pop18 + i32.const $push17=, 1 + i32.add $0=, $0, $pop17 + i32.const $push11=, 8 + i32.add $push12=, $8, $pop11 + i32.const $push0=, 4 + i32.or $push16=, $pop12, $pop0 + tee_local $push15=, $1=, $pop16 + i32.const $push1=, 48 + i32.add $2=, $pop15, $pop1 + i32.const $push2=, 40 + i32.add $3=, $1, $pop2 + i32.const $push3=, 32 + i32.add $4=, $1, $pop3 + i32.const $push4=, 24 + i32.add $5=, $1, $pop4 + i32.const $push5=, 16 + i32.add $6=, $1, $pop5 + i32.const $push6=, 8 + i32.add $7=, $1, $pop6 +.LBB1_1: # %again + # =>This Inner Loop Header: Depth=1 + loop # label2: + i64.const $push27=, 0 + i64.store 0($1):p2align=2, $pop27 + i32.const $push26=, 0 + i32.store 0($2), $pop26 + i64.const $push25=, 0 + i64.store 0($3):p2align=2, $pop25 + i64.const $push24=, 0 + i64.store 0($4):p2align=2, $pop24 + i64.const $push23=, 0 + i64.store 0($5):p2align=2, $pop23 + i64.const $push22=, 0 + i64.store 0($6):p2align=2, $pop22 + i64.const $push21=, 0 + i64.store 0($7):p2align=2, $pop21 + i32.store 8($8), $0 + i32.const $push20=, 1 + i32.add $0=, $0, $pop20 + i32.const $push13=, 8 + i32.add $push14=, $8, $pop13 + call test@FUNCTION, $pop14 + br 0 # 0: up to label2 +.LBB1_2: + end_loop + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end6 + i32.const $push0=, 10 + call foo@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type test.i,@object # @test.i + .section .data.test.i,"aw",@progbits + .p2align 2 +test.i: + .int32 11 # 0xb + .size test.i, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20071030-1.c.s b/src/binaryen/test/torture-s/20071030-1.c.s new file mode 100644 index 0000000000..ed02d31f34 --- /dev/null +++ b/src/binaryen/test/torture-s/20071030-1.c.s @@ -0,0 +1,143 @@ + .text + .file "20071030-1.c" + .section .text.CalcPing,"ax",@progbits + .hidden CalcPing # -- Begin function CalcPing + .globl CalcPing + .type CalcPing,@function +CalcPing: # @CalcPing + .param i32 + .result i32 + .local f32, i32, i32, i32, f32 +# BB#0: # %entry + block + i32.load $push0=, 0($0) + i32.const $push1=, 1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.then + i32.load $push12=, 4($0) + return $pop12 +.LBB0_2: # %if.end + end_block # label0: + i32.const $4=, 0 + i32.const $3=, 16 + f32.const $5=, 0x0p0 +.LBB0_3: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.add $push3=, $0, $3 + f32.load $push21=, 0($pop3) + tee_local $push20=, $1=, $pop21 + f32.add $push4=, $5, $pop20 + f32.const $push19=, 0x0p0 + f32.gt $push18=, $1, $pop19 + tee_local $push17=, $2=, $pop18 + f32.select $5=, $pop4, $5, $pop17 + i32.add $4=, $4, $2 + i32.const $push16=, 24 + i32.add $push15=, $3, $pop16 + tee_local $push14=, $3=, $pop15 + i32.const $push13=, 1552 + i32.ne $push5=, $pop14, $pop13 + br_if 0, $pop5 # 0: up to label1 +# BB#4: # %for.end + end_loop + block + i32.eqz $push22=, $4 + br_if 0, $pop22 # 0: down to label2 +# BB#5: # %if.end9 + f32.convert_s/i32 $push6=, $4 + f32.div $push7=, $5, $pop6 + f32.const $push8=, 0x1.f4p9 + f32.mul $push9=, $pop7, $pop8 + i32.trunc_s/f32 $push10=, $pop9 + return $pop10 +.LBB0_6: + end_block # label2: + i32.const $push11=, 9999 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end0: + .size CalcPing, .Lfunc_end0-CalcPing + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local f32, i32, i32, i32, f32, i32 +# BB#0: # %if.end.i + i32.const $push17=, 0 + i32.const $push15=, 0 + i32.load $push14=, __stack_pointer($pop15) + i32.const $push16=, 1552 + i32.sub $push30=, $pop14, $pop16 + tee_local $push29=, $5=, $pop30 + i32.store __stack_pointer($pop17), $pop29 + i32.const $3=, 0 + i32.const $push21=, 8 + i32.add $push22=, $5, $pop21 + i32.const $push28=, 0 + i32.const $push0=, 1544 + i32.call $drop=, memset@FUNCTION, $pop22, $pop28, $pop0 + i32.const $2=, 16 + i32.const $push23=, 8 + i32.add $push24=, $5, $pop23 + i32.const $push27=, 16 + i32.add $push1=, $pop24, $pop27 + i32.const $push2=, 1065353216 + i32.store 0($pop1), $pop2 + f32.const $4=, 0x0p0 +.LBB1_1: # %for.body.i + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.const $push25=, 8 + i32.add $push26=, $5, $pop25 + i32.add $push3=, $pop26, $2 + f32.load $push39=, 0($pop3) + tee_local $push38=, $0=, $pop39 + f32.add $push4=, $4, $pop38 + f32.const $push37=, 0x0p0 + f32.gt $push36=, $0, $pop37 + tee_local $push35=, $1=, $pop36 + f32.select $4=, $pop4, $4, $pop35 + i32.add $3=, $3, $1 + i32.const $push34=, 24 + i32.add $push33=, $2, $pop34 + tee_local $push32=, $2=, $pop33 + i32.const $push31=, 1552 + i32.ne $push5=, $pop32, $pop31 + br_if 0, $pop5 # 0: up to label3 +# BB#2: # %for.end.i + end_loop + block + i32.eqz $push40=, $3 + br_if 0, $pop40 # 0: down to label4 +# BB#3: # %CalcPing.exit + f32.convert_s/i32 $push6=, $3 + f32.div $push7=, $4, $pop6 + f32.const $push8=, 0x1.f4p9 + f32.mul $push9=, $pop7, $pop8 + i32.trunc_s/f32 $push10=, $pop9 + i32.const $push11=, 1000 + i32.ne $push12=, $pop10, $pop11 + br_if 0, $pop12 # 0: down to label4 +# BB#4: # %if.end + i32.const $push20=, 0 + i32.const $push18=, 1552 + i32.add $push19=, $5, $pop18 + i32.store __stack_pointer($pop20), $pop19 + i32.const $push13=, 0 + return $pop13 +.LBB1_5: # %if.then + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20071108-1.c.s b/src/binaryen/test/torture-s/20071108-1.c.s new file mode 100644 index 0000000000..ae9ef8d8c5 --- /dev/null +++ b/src/binaryen/test/torture-s/20071108-1.c.s @@ -0,0 +1,110 @@ + .text + .file "20071108-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, foo.s + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store foo.s+4($pop0), $1 + i32.const $push2=, 0 + i32.store foo.s($pop2), $0 + i32.const $push1=, foo.s + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size test, .Lfunc_end2-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %lor.lhs.false + i32.const $push10=, 0 + i32.const $push8=, 0 + i32.load $push7=, __stack_pointer($pop8) + i32.const $push9=, 16 + i32.sub $push25=, $pop7, $pop9 + tee_local $push24=, $1=, $pop25 + i32.store __stack_pointer($pop10), $pop24 + block + i32.const $push14=, 12 + i32.add $push15=, $1, $pop14 + i32.const $push16=, 8 + i32.add $push17=, $1, $pop16 + i32.call $push23=, test@FUNCTION, $pop15, $pop17 + tee_local $push22=, $0=, $pop23 + i32.load $push0=, 0($pop22) + i32.const $push18=, 12 + i32.add $push19=, $1, $pop18 + i32.ne $push1=, $pop0, $pop19 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %lor.lhs.false2 + i32.load $push2=, 4($0) + i32.const $push20=, 8 + i32.add $push21=, $1, $pop20 + i32.ne $push3=, $pop2, $pop21 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %lor.lhs.false4 + i32.load8_u $push4=, 8($0) + br_if 0, $pop4 # 0: down to label0 +# BB#3: # %lor.lhs.false5 + i32.load8_u $push5=, 9($0) + br_if 0, $pop5 # 0: down to label0 +# BB#4: # %if.end + i32.const $push13=, 0 + i32.const $push11=, 16 + i32.add $push12=, $1, $pop11 + i32.store __stack_pointer($pop13), $pop12 + i32.const $push6=, 0 + return $pop6 +.LBB3_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .type foo.s,@object # @foo.s + .section .bss.foo.s,"aw",@nobits + .p2align 2 +foo.s: + .skip 12 + .size foo.s, 12 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20071120-1.c.s b/src/binaryen/test/torture-s/20071120-1.c.s new file mode 100644 index 0000000000..4dd571df71 --- /dev/null +++ b/src/binaryen/test/torture-s/20071120-1.c.s @@ -0,0 +1,143 @@ + .text + .file "20071120-1.c" + .section .text.vec_assert_fail,"ax",@progbits + .hidden vec_assert_fail # -- Begin function vec_assert_fail + .globl vec_assert_fail + .type vec_assert_fail,@function +vec_assert_fail: # @vec_assert_fail +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size vec_assert_fail, .Lfunc_end0-vec_assert_fail + # -- End function + .section .text.perform_access_checks,"ax",@progbits + .hidden perform_access_checks # -- Begin function perform_access_checks + .globl perform_access_checks + .type perform_access_checks,@function +perform_access_checks: # @perform_access_checks + .param i32 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size perform_access_checks, .Lfunc_end1-perform_access_checks + # -- End function + .section .text.pop_to_parent_deferring_access_checks,"ax",@progbits + .hidden pop_to_parent_deferring_access_checks # -- Begin function pop_to_parent_deferring_access_checks + .globl pop_to_parent_deferring_access_checks + .type pop_to_parent_deferring_access_checks,@function +pop_to_parent_deferring_access_checks: # @pop_to_parent_deferring_access_checks + .local i32, i32, i32 +# BB#0: # %entry + block + i32.const $push11=, 0 + i32.load $push10=, deferred_access_no_check($pop11) + tee_local $push9=, $0=, $pop10 + i32.eqz $push20=, $pop9 + br_if 0, $pop20 # 0: down to label0 +# BB#1: # %if.then + i32.const $push12=, 0 + i32.const $push0=, -1 + i32.add $push1=, $0, $pop0 + i32.store deferred_access_no_check($pop12), $pop1 + return +.LBB2_2: # %if.else + end_block # label0: + block + block + i32.const $push15=, 0 + i32.load $push14=, deferred_access_stack($pop15) + tee_local $push13=, $0=, $pop14 + i32.eqz $push21=, $pop13 + br_if 0, $pop21 # 0: down to label2 +# BB#3: # %land.lhs.true.i + i32.load $push17=, 0($0) + tee_local $push16=, $1=, $pop17 + i32.eqz $push22=, $pop16 + br_if 0, $pop22 # 0: down to label2 +# BB#4: # %land.lhs.true.i25 + i32.const $push2=, -1 + i32.add $push19=, $1, $pop2 + tee_local $push18=, $2=, $pop19 + i32.store 0($0), $pop18 + i32.eqz $push23=, $2 + br_if 0, $pop23 # 0: down to label2 +# BB#5: # %VEC_deferred_access_base_last.exit29 + i32.const $push3=, 3 + i32.shl $push4=, $1, $pop3 + i32.add $push5=, $0, $pop4 + i32.const $push6=, -8 + i32.add $push7=, $pop5, $pop6 + i32.load $push8=, 0($pop7) + i32.eqz $push24=, $pop8 + br_if 1, $pop24 # 1: down to label1 +# BB#6: # %if.end16 + return +.LBB2_7: # %cond.false.i + end_block # label2: + call vec_assert_fail@FUNCTION + unreachable +.LBB2_8: # %if.then15 + end_block # label1: + call perform_access_checks@FUNCTION, $0 + unreachable + .endfunc +.Lfunc_end2: + .size pop_to_parent_deferring_access_checks, .Lfunc_end2-pop_to_parent_deferring_access_checks + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 76 + i32.call $push8=, __builtin_malloc@FUNCTION, $pop0 + tee_local $push7=, $0=, $pop8 + i32.const $push1=, 2 + i32.store 0($pop7), $pop1 + i32.const $push2=, 0 + i32.store deferred_access_stack($pop2), $0 + i32.const $push3=, 8 + i32.add $push4=, $0, $pop3 + i32.const $push5=, 1 + i32.store 0($pop4), $pop5 + call pop_to_parent_deferring_access_checks@FUNCTION + i32.const $push6=, 0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .type deferred_access_no_check,@object # @deferred_access_no_check + .section .bss.deferred_access_no_check,"aw",@nobits + .p2align 2 +deferred_access_no_check: + .int32 0 # 0x0 + .size deferred_access_no_check, 4 + + .hidden gt_pch_rs_gt_cp_semantics_h # @gt_pch_rs_gt_cp_semantics_h + .type gt_pch_rs_gt_cp_semantics_h,@object + .section .rodata.gt_pch_rs_gt_cp_semantics_h,"a",@progbits + .globl gt_pch_rs_gt_cp_semantics_h + .p2align 2 +gt_pch_rs_gt_cp_semantics_h: + .int32 deferred_access_no_check + .size gt_pch_rs_gt_cp_semantics_h, 4 + + .type deferred_access_stack,@object # @deferred_access_stack + .section .bss.deferred_access_stack,"aw",@nobits + .p2align 2 +deferred_access_stack: + .int32 0 + .size deferred_access_stack, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype __builtin_malloc, i32 diff --git a/src/binaryen/test/torture-s/20071202-1.c.s b/src/binaryen/test/torture-s/20071202-1.c.s new file mode 100644 index 0000000000..cddc439776 --- /dev/null +++ b/src/binaryen/test/torture-s/20071202-1.c.s @@ -0,0 +1,192 @@ + .text + .file "20071202-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .local i32 +# BB#0: # %entry + i64.const $push0=, 0 + i64.store 8($0):p2align=2, $pop0 + i32.load $1=, 0($0) + i32.load $push1=, 4($0) + i32.store 0($0), $pop1 + i32.store 4($0), $1 + i32.const $push2=, 24 + i32.add $push3=, $0, $pop2 + i64.const $push7=, 0 + i64.store 0($pop3):p2align=2, $pop7 + i32.const $push4=, 16 + i32.add $push5=, $0, $pop4 + i64.const $push6=, 0 + i64.store 0($pop5):p2align=2, $pop6 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push71=, 0 + i32.const $push69=, 0 + i32.load $push68=, __stack_pointer($pop69) + i32.const $push70=, 80 + i32.sub $push80=, $pop68, $pop70 + tee_local $push79=, $0=, $pop80 + i32.store __stack_pointer($pop71), $pop79 + i32.const $push75=, 8 + i32.add $push76=, $0, $pop75 + i32.const $push1=, .Lmain.s + i32.const $push0=, 68 + i32.call $drop=, memcpy@FUNCTION, $pop76, $pop1, $pop0 + i32.const $push77=, 8 + i32.add $push78=, $0, $pop77 + call foo@FUNCTION, $pop78 + block + i32.load $push3=, 8($0) + i32.const $push2=, 12 + i32.ne $push4=, $pop3, $pop2 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load $push6=, 12($0) + i32.const $push5=, 6 + i32.ne $push7=, $pop6, $pop5 + br_if 0, $pop7 # 0: down to label0 +# BB#2: # %lor.lhs.false2 + i32.load $push8=, 16($0) + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %lor.lhs.false3 + i32.const $push9=, 20 + i32.add $push10=, $0, $pop9 + i32.load $push11=, 0($pop10) + br_if 0, $pop11 # 0: down to label0 +# BB#4: # %lor.lhs.false7 + i32.const $push12=, 24 + i32.add $push13=, $0, $pop12 + i32.load $push14=, 0($pop13) + br_if 0, $pop14 # 0: down to label0 +# BB#5: # %lor.lhs.false11 + i32.const $push15=, 28 + i32.add $push16=, $0, $pop15 + i32.load $push17=, 0($pop16) + br_if 0, $pop17 # 0: down to label0 +# BB#6: # %lor.lhs.false15 + i32.const $push18=, 32 + i32.add $push19=, $0, $pop18 + i32.load $push20=, 0($pop19) + br_if 0, $pop20 # 0: down to label0 +# BB#7: # %lor.lhs.false19 + i32.const $push21=, 36 + i32.add $push22=, $0, $pop21 + i32.load $push23=, 0($pop22) + br_if 0, $pop23 # 0: down to label0 +# BB#8: # %if.end + i32.load $push25=, 40($0) + i32.const $push24=, 7 + i32.ne $push26=, $pop25, $pop24 + br_if 0, $pop26 # 0: down to label0 +# BB#9: # %lor.lhs.false24 + i32.const $push27=, 44 + i32.add $push28=, $0, $pop27 + i32.load $push29=, 0($pop28) + i32.const $push30=, 8 + i32.ne $push31=, $pop29, $pop30 + br_if 0, $pop31 # 0: down to label0 +# BB#10: # %lor.lhs.false28 + i32.const $push32=, 48 + i32.add $push33=, $0, $pop32 + i32.load $push34=, 0($pop33) + i32.const $push35=, 9 + i32.ne $push36=, $pop34, $pop35 + br_if 0, $pop36 # 0: down to label0 +# BB#11: # %lor.lhs.false33 + i32.const $push37=, 52 + i32.add $push38=, $0, $pop37 + i32.load $push39=, 0($pop38) + i32.const $push40=, 10 + i32.ne $push41=, $pop39, $pop40 + br_if 0, $pop41 # 0: down to label0 +# BB#12: # %lor.lhs.false38 + i32.const $push42=, 56 + i32.add $push43=, $0, $pop42 + i32.load $push44=, 0($pop43) + i32.const $push45=, 11 + i32.ne $push46=, $pop44, $pop45 + br_if 0, $pop46 # 0: down to label0 +# BB#13: # %lor.lhs.false43 + i32.const $push47=, 60 + i32.add $push48=, $0, $pop47 + i32.load $push49=, 0($pop48) + i32.const $push50=, 12 + i32.ne $push51=, $pop49, $pop50 + br_if 0, $pop51 # 0: down to label0 +# BB#14: # %lor.lhs.false48 + i32.const $push52=, 64 + i32.add $push53=, $0, $pop52 + i32.load $push54=, 0($pop53) + i32.const $push55=, 13 + i32.ne $push56=, $pop54, $pop55 + br_if 0, $pop56 # 0: down to label0 +# BB#15: # %lor.lhs.false53 + i32.const $push57=, 68 + i32.add $push58=, $0, $pop57 + i32.load $push59=, 0($pop58) + i32.const $push60=, 14 + i32.ne $push61=, $pop59, $pop60 + br_if 0, $pop61 # 0: down to label0 +# BB#16: # %lor.lhs.false58 + i32.const $push62=, 72 + i32.add $push63=, $0, $pop62 + i32.load $push64=, 0($pop63) + i32.const $push65=, 15 + i32.ne $push66=, $pop64, $pop65 + br_if 0, $pop66 # 0: down to label0 +# BB#17: # %if.end64 + i32.const $push74=, 0 + i32.const $push72=, 80 + i32.add $push73=, $0, $pop72 + i32.store __stack_pointer($pop74), $pop73 + i32.const $push67=, 0 + return $pop67 +.LBB1_18: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .Lmain.s,@object # @main.s + .section .rodata..Lmain.s,"a",@progbits + .p2align 2 +.Lmain.s: + .int32 6 # 0x6 + .int32 12 # 0xc + .int32 1 # 0x1 + .int32 2 # 0x2 + .int32 3 # 0x3 + .int32 4 # 0x4 + .int32 5 # 0x5 + .int32 6 # 0x6 + .int32 7 # 0x7 + .int32 8 # 0x8 + .int32 9 # 0x9 + .int32 10 # 0xa + .int32 11 # 0xb + .int32 12 # 0xc + .int32 13 # 0xd + .int32 14 # 0xe + .int32 15 # 0xf + .size .Lmain.s, 68 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20071205-1.c.s b/src/binaryen/test/torture-s/20071205-1.c.s new file mode 100644 index 0000000000..44e9fa5340 --- /dev/null +++ b/src/binaryen/test/torture-s/20071205-1.c.s @@ -0,0 +1,36 @@ + .text + .file "20071205-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 8 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 65280 + i32.and $push3=, $pop1, $pop2 + i32.const $push4=, 255 + i32.or $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20071211-1.c.s b/src/binaryen/test/torture-s/20071211-1.c.s new file mode 100644 index 0000000000..0d18f2beac --- /dev/null +++ b/src/binaryen/test/torture-s/20071211-1.c.s @@ -0,0 +1,62 @@ + .text + .file "20071211-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64, i64 +# BB#0: # %entry + i32.const $push21=, 0 + i32.const $push20=, 0 + i64.load $push0=, sv($pop20) + i64.const $push1=, -1099511627776 + i64.or $push2=, $pop0, $pop1 + i64.store sv($pop21), $pop2 + #APP + #NO_APP + i32.const $push19=, 0 + i32.const $push18=, 0 + i64.load $push17=, sv($pop18) + tee_local $push16=, $0=, $pop17 + i64.const $push5=, 40 + i64.shr_u $push6=, $pop16, $pop5 + i64.const $push7=, 1 + i64.add $push15=, $pop6, $pop7 + tee_local $push14=, $1=, $pop15 + i64.const $push13=, 40 + i64.shl $push8=, $pop14, $pop13 + i64.const $push3=, 1099511627775 + i64.and $push4=, $0, $pop3 + i64.or $push9=, $pop8, $pop4 + i64.store sv($pop19), $pop9 + block + i64.const $push10=, 16777215 + i64.and $push11=, $1, $pop10 + i64.eqz $push12=, $pop11 + i32.eqz $push23=, $pop12 + br_if 0, $pop23 # 0: down to label0 +# BB#1: # %if.end + i32.const $push22=, 0 + return $pop22 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden sv # @sv + .type sv,@object + .section .bss.sv,"aw",@nobits + .globl sv + .p2align 3 +sv: + .skip 8 + .size sv, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20071213-1.c.s b/src/binaryen/test/torture-s/20071213-1.c.s new file mode 100644 index 0000000000..117a6c6588 --- /dev/null +++ b/src/binaryen/test/torture-s/20071213-1.c.s @@ -0,0 +1,236 @@ + .text + .file "20071213-1.c" + .section .text.h,"ax",@progbits + .hidden h # -- Begin function h + .globl h + .type h,@function +h: # @h + .param i32, i32 +# BB#0: # %entry + block + block + block + i32.const $push0=, 5 + i32.eq $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label2 +# BB#1: # %entry + i32.const $push2=, 1 + i32.ne $push3=, $0, $pop2 + br_if 1, $pop3 # 1: down to label1 +# BB#2: # %sw.bb + i32.load $push10=, 0($1) + i32.const $push11=, 3 + i32.ne $push12=, $pop10, $pop11 + br_if 1, $pop12 # 1: down to label1 +# BB#3: # %lor.lhs.false + i32.load $push13=, 4($1) + i32.const $push14=, 4 + i32.ne $push15=, $pop13, $pop14 + br_if 1, $pop15 # 1: down to label1 + br 2 # 2: down to label0 +.LBB0_4: # %sw.bb4 + end_block # label2: + i32.load $push4=, 0($1) + i32.const $push5=, 9 + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label1 +# BB#5: # %lor.lhs.false8 + i32.load $push7=, 4($1) + i32.const $push8=, 10 + i32.eq $push9=, $pop7, $pop8 + br_if 1, $pop9 # 1: down to label0 +.LBB0_6: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable +.LBB0_7: # %return + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size h, .Lfunc_end0-h + # -- End function + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32, i64, i32 + .local i32 +# BB#0: # %entry + i32.const $push20=, 0 + i32.const $push18=, 0 + i32.load $push17=, __stack_pointer($pop18) + i32.const $push19=, 16 + i32.sub $push25=, $pop17, $pop19 + tee_local $push24=, $3=, $pop25 + i32.store __stack_pointer($pop20), $pop24 + i32.store 12($3), $2 + block + block + i32.const $push0=, 1 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label4 +# BB#1: # %sw.bb.i + i32.load $push9=, 0($2) + i32.const $push10=, 3 + i32.ne $push11=, $pop9, $pop10 + br_if 1, $pop11 # 1: down to label3 +# BB#2: # %lor.lhs.false.i + i32.load $push12=, 4($2) + i32.const $push13=, 4 + i32.ne $push14=, $pop12, $pop13 + br_if 1, $pop14 # 1: down to label3 +# BB#3: # %h.exit + i64.const $push15=, 2 + i64.ne $push16=, $1, $pop15 + br_if 1, $pop16 # 1: down to label3 +# BB#4: # %if.end + i32.const $push23=, 0 + i32.const $push21=, 16 + i32.add $push22=, $3, $pop21 + i32.store __stack_pointer($pop23), $pop22 + return +.LBB1_5: # %entry + end_block # label4: + i32.const $push2=, 5 + i32.ne $push3=, $0, $pop2 + br_if 0, $pop3 # 0: down to label3 +# BB#6: # %sw.bb4.i + i32.load $push4=, 0($2) + i32.const $push5=, 9 + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label3 +# BB#7: # %lor.lhs.false8.i + i32.load $push7=, 4($2) + i32.const $push8=, 10 + i32.eq $drop=, $pop7, $pop8 +.LBB1_8: # %if.then.i + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size f1, .Lfunc_end1-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param i32, i32, i32, i64, i32 + .local i32 +# BB#0: # %entry + i32.const $push27=, 0 + i32.const $push25=, 0 + i32.load $push24=, __stack_pointer($pop25) + i32.const $push26=, 16 + i32.sub $push32=, $pop24, $pop26 + tee_local $push31=, $5=, $pop32 + i32.store __stack_pointer($pop27), $pop31 + i32.store 12($5), $4 + block + block + block + i32.const $push0=, 5 + i32.eq $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label7 +# BB#1: # %entry + i32.const $push2=, 1 + i32.ne $push3=, $0, $pop2 + br_if 2, $pop3 # 2: down to label5 +# BB#2: # %sw.bb.i + i32.load $push10=, 0($4) + i32.const $push11=, 3 + i32.ne $push12=, $pop10, $pop11 + br_if 2, $pop12 # 2: down to label5 +# BB#3: # %lor.lhs.false.i + i32.load $push13=, 4($4) + i32.const $push14=, 4 + i32.eq $push15=, $pop13, $pop14 + br_if 1, $pop15 # 1: down to label6 + br 2 # 2: down to label5 +.LBB2_4: # %sw.bb4.i + end_block # label7: + i32.load $push4=, 0($4) + i32.const $push5=, 9 + i32.ne $push6=, $pop4, $pop5 + br_if 1, $pop6 # 1: down to label5 +# BB#5: # %lor.lhs.false8.i + i32.load $push7=, 4($4) + i32.const $push8=, 10 + i32.ne $push9=, $pop7, $pop8 + br_if 1, $pop9 # 1: down to label5 +.LBB2_6: # %h.exit + end_block # label6: + i32.const $push16=, 5 + i32.ne $push17=, $0, $pop16 + br_if 0, $pop17 # 0: down to label5 +# BB#7: # %h.exit + i32.const $push18=, 6 + i32.ne $push19=, $1, $pop18 + br_if 0, $pop19 # 0: down to label5 +# BB#8: # %h.exit + i32.const $push20=, 7 + i32.ne $push21=, $2, $pop20 + br_if 0, $pop21 # 0: down to label5 +# BB#9: # %h.exit + i64.const $push22=, 8 + i64.ne $push23=, $3, $pop22 + br_if 0, $pop23 # 0: down to label5 +# BB#10: # %if.end + i32.const $push30=, 0 + i32.const $push28=, 16 + i32.add $push29=, $5, $pop28 + i32.store __stack_pointer($pop30), $pop29 + return +.LBB2_11: # %if.then.i + end_block # label5: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size f2, .Lfunc_end2-f2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 32 + i32.sub $push19=, $pop9, $pop11 + tee_local $push18=, $0=, $pop19 + i32.store __stack_pointer($pop12), $pop18 + i64.const $push0=, 17179869187 + i64.store 16($0), $pop0 + i32.const $push2=, 1 + i64.const $push1=, 2 + i32.const $push16=, 16 + i32.add $push17=, $0, $pop16 + call f1@FUNCTION, $pop2, $pop1, $pop17 + i64.const $push3=, 42949672969 + i64.store 0($0), $pop3 + i32.const $push7=, 5 + i32.const $push6=, 6 + i32.const $push5=, 7 + i64.const $push4=, 8 + call f2@FUNCTION, $pop7, $pop6, $pop5, $pop4, $0 + i32.const $push15=, 0 + i32.const $push13=, 32 + i32.add $push14=, $0, $pop13 + i32.store __stack_pointer($pop15), $pop14 + i32.const $push8=, 0 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20071216-1.c.s b/src/binaryen/test/torture-s/20071216-1.c.s new file mode 100644 index 0000000000..269d178dee --- /dev/null +++ b/src/binaryen/test/torture-s/20071216-1.c.s @@ -0,0 +1,119 @@ + .text + .file "20071216-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, x($pop0) + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 + .local i32 +# BB#0: # %entry + i32.call $push9=, bar@FUNCTION + tee_local $push8=, $0=, $pop9 + i32.const $push3=, -37 + i32.const $push2=, -1 + i32.const $push0=, -38 + i32.eq $push1=, $0, $pop0 + i32.select $push4=, $pop3, $pop2, $pop1 + i32.const $push5=, -4095 + i32.lt_u $push6=, $0, $pop5 + i32.select $push7=, $pop8, $pop4, $pop6 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push28=, 0 + i32.const $push0=, 26 + i32.store x($pop28), $pop0 + block + i32.call $push27=, bar@FUNCTION + tee_local $push26=, $0=, $pop27 + i32.const $push25=, -37 + i32.const $push24=, -1 + i32.const $push23=, -38 + i32.eq $push1=, $0, $pop23 + i32.select $push2=, $pop25, $pop24, $pop1 + i32.const $push22=, -4095 + i32.lt_u $push3=, $0, $pop22 + i32.select $push4=, $pop26, $pop2, $pop3 + i32.const $push21=, 26 + i32.ne $push5=, $pop4, $pop21 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %if.end + i32.const $push36=, 0 + i32.const $push6=, -39 + i32.store x($pop36), $pop6 + i32.call $push35=, bar@FUNCTION + tee_local $push34=, $0=, $pop35 + i32.const $push33=, -37 + i32.const $push32=, -1 + i32.const $push31=, -38 + i32.eq $push7=, $0, $pop31 + i32.select $push8=, $pop33, $pop32, $pop7 + i32.const $push30=, -4095 + i32.lt_u $push9=, $0, $pop30 + i32.select $push10=, $pop34, $pop8, $pop9 + i32.const $push29=, -1 + i32.ne $push11=, $pop10, $pop29 + br_if 0, $pop11 # 0: down to label0 +# BB#2: # %if.end4 + i32.const $push41=, 0 + i32.const $push12=, -38 + i32.store x($pop41), $pop12 + i32.call $push40=, bar@FUNCTION + tee_local $push39=, $0=, $pop40 + i32.const $push15=, -37 + i32.const $push14=, -1 + i32.const $push38=, -38 + i32.eq $push13=, $0, $pop38 + i32.select $push16=, $pop15, $pop14, $pop13 + i32.const $push17=, -4095 + i32.lt_u $push18=, $0, $pop17 + i32.select $push19=, $pop39, $pop16, $pop18 + i32.const $push37=, -37 + i32.ne $push20=, $pop19, $pop37 + br_if 0, $pop20 # 0: down to label0 +# BB#3: # %if.end8 + i32.const $push42=, 0 + return $pop42 +.LBB2_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type x,@object # @x + .section .bss.x,"aw",@nobits + .p2align 2 +x: + .int32 0 # 0x0 + .size x, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20071219-1.c.s b/src/binaryen/test/torture-s/20071219-1.c.s new file mode 100644 index 0000000000..ea1f7ceec7 --- /dev/null +++ b/src/binaryen/test/torture-s/20071219-1.c.s @@ -0,0 +1,351 @@ + .text + .file "20071219-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $3=, 0 +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label1: + i32.add $push4=, $0, $3 + tee_local $push3=, $2=, $pop4 + i32.load8_u $push0=, 0($pop3) + br_if 1, $pop0 # 1: down to label0 +# BB#2: # %if.else + # in Loop: Header=BB0_1 Depth=1 + block + i32.eqz $push9=, $1 + br_if 0, $pop9 # 0: down to label2 +# BB#3: # %if.then3 + # in Loop: Header=BB0_1 Depth=1 + i32.store8 0($2), $1 +.LBB0_4: # %for.inc + # in Loop: Header=BB0_1 Depth=1 + end_block # label2: + i32.const $push8=, 1 + i32.add $push7=, $3, $pop8 + tee_local $push6=, $3=, $pop7 + i32.const $push5=, 25 + i32.lt_u $push1=, $pop6, $pop5 + br_if 0, $pop1 # 0: up to label1 +# BB#5: # %for.end + end_loop + i32.const $push2=, 0 + i32.store p($pop2), $0 + return +.LBB0_6: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .local i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push17=, 0 + i32.const $push15=, 0 + i32.load $push14=, __stack_pointer($pop15) + i32.const $push16=, 64 + i32.sub $push49=, $pop14, $pop16 + tee_local $push48=, $6=, $pop49 + i32.store __stack_pointer($pop17), $pop48 + i32.const $push21=, 32 + i32.add $push22=, $6, $pop21 + i32.const $push0=, 24 + i32.add $push47=, $pop22, $pop0 + tee_local $push46=, $0=, $pop47 + i32.const $push1=, 0 + i32.store8 0($pop46), $pop1 + i32.const $push23=, 32 + i32.add $push24=, $6, $pop23 + i32.const $push2=, 16 + i32.add $push45=, $pop24, $pop2 + tee_local $push44=, $1=, $pop45 + i64.const $push3=, 0 + i64.store 0($pop44), $pop3 + i32.const $push25=, 32 + i32.add $push26=, $6, $pop25 + i32.const $push4=, 8 + i32.add $push43=, $pop26, $pop4 + tee_local $push42=, $2=, $pop43 + i64.const $push41=, 0 + i64.store 0($pop42), $pop41 + i64.const $push40=, 0 + i64.store 32($6), $pop40 + i32.const $push27=, 32 + i32.add $push28=, $6, $pop27 + i32.const $push39=, 0 + call foo@FUNCTION, $pop28, $pop39 + i32.const $push38=, 24 + i32.add $push37=, $6, $pop38 + tee_local $push36=, $3=, $pop37 + i32.load8_u $push5=, 0($0) + i32.store8 0($pop36), $pop5 + i32.const $push35=, 16 + i32.add $push34=, $6, $pop35 + tee_local $push33=, $4=, $pop34 + i64.load $push6=, 0($1) + i64.store 0($pop33), $pop6 + i32.const $push32=, 8 + i32.add $push31=, $6, $pop32 + tee_local $push30=, $5=, $pop31 + i64.load $push7=, 0($2) + i64.store 0($pop30), $pop7 + i64.load $push8=, 32($6) + i64.store 0($6), $pop8 + i32.const $push9=, 1 + call foo@FUNCTION, $6, $pop9 + i32.load8_u $push10=, 0($0) + i32.store8 0($3), $pop10 + i64.load $push11=, 0($1) + i64.store 0($4), $pop11 + i64.load $push12=, 0($2) + i64.store 0($5), $pop12 + i64.load $push13=, 32($6) + i64.store 0($6), $pop13 + i32.const $push29=, 0 + call foo@FUNCTION, $6, $pop29 + i32.const $push20=, 0 + i32.const $push18=, 64 + i32.add $push19=, $6, $pop18 + i32.store __stack_pointer($pop20), $pop19 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size test1, .Lfunc_end1-test1 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .local i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push24=, 0 + i32.const $push22=, 0 + i32.load $push21=, __stack_pointer($pop22) + i32.const $push23=, 64 + i32.sub $push62=, $pop21, $pop23 + tee_local $push61=, $6=, $pop62 + i32.store __stack_pointer($pop24), $pop61 + i32.const $push28=, 32 + i32.add $push29=, $6, $pop28 + i32.const $push0=, 24 + i32.add $push60=, $pop29, $pop0 + tee_local $push59=, $5=, $pop60 + i32.const $push1=, 0 + i32.store8 0($pop59), $pop1 + i32.const $push30=, 32 + i32.add $push31=, $6, $pop30 + i32.const $push2=, 16 + i32.add $push58=, $pop31, $pop2 + tee_local $push57=, $0=, $pop58 + i64.const $push3=, 0 + i64.store 0($pop57), $pop3 + i32.const $push32=, 32 + i32.add $push33=, $6, $pop32 + i32.const $push4=, 8 + i32.add $push56=, $pop33, $pop4 + tee_local $push55=, $1=, $pop56 + i64.const $push54=, 0 + i64.store 0($pop55), $pop54 + i64.const $push53=, 0 + i64.store 32($6), $pop53 + i32.const $push34=, 32 + i32.add $push35=, $6, $pop34 + i32.const $push52=, 0 + call foo@FUNCTION, $pop35, $pop52 + i32.const $push51=, 24 + i32.add $push50=, $6, $pop51 + tee_local $push49=, $2=, $pop50 + i32.load8_u $push5=, 0($5) + i32.store8 0($pop49), $pop5 + i32.const $push48=, 16 + i32.add $push47=, $6, $pop48 + tee_local $push46=, $3=, $pop47 + i64.load $push6=, 0($0) + i64.store 0($pop46), $pop6 + i32.const $push45=, 8 + i32.add $push44=, $6, $pop45 + tee_local $push43=, $4=, $pop44 + i64.load $push7=, 0($1) + i64.store 0($pop43), $pop7 + i64.load $push8=, 32($6) + i64.store 0($6), $pop8 + i32.const $push9=, 1 + call foo@FUNCTION, $6, $pop9 + i32.load8_u $push10=, 0($5) + i32.store8 0($2), $pop10 + i64.load $push11=, 0($0) + i64.store 0($3), $pop11 + i64.load $push12=, 0($1) + i64.store 0($4), $pop12 + i64.load $push13=, 32($6) + i64.store 0($6), $pop13 + i32.const $push42=, 0 + i32.load $push41=, p($pop42) + tee_local $push40=, $5=, $pop41 + i32.const $push39=, 8 + i32.add $push14=, $pop40, $pop39 + i64.load $push15=, 0($pop14):p2align=0 + i64.store 0($4), $pop15 + i32.const $push38=, 16 + i32.add $push16=, $5, $pop38 + i64.load $push17=, 0($pop16):p2align=0 + i64.store 0($3), $pop17 + i32.const $push37=, 24 + i32.add $push18=, $5, $pop37 + i32.load8_u $push19=, 0($pop18) + i32.store8 0($2), $pop19 + i64.load $push20=, 0($5):p2align=0 + i64.store 0($6), $pop20 + i32.const $push36=, 0 + call foo@FUNCTION, $6, $pop36 + i32.const $push27=, 0 + i32.const $push25=, 64 + i32.add $push26=, $6, $pop25 + i32.store __stack_pointer($pop27), $pop26 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size test2, .Lfunc_end2-test2 + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push21=, 0 + i32.const $push19=, 0 + i32.load $push18=, __stack_pointer($pop19) + i32.const $push20=, 64 + i32.sub $push65=, $pop18, $pop20 + tee_local $push64=, $8=, $pop65 + i32.store __stack_pointer($pop21), $pop64 + i32.const $push25=, 32 + i32.add $push26=, $8, $pop25 + i32.const $push0=, 24 + i32.add $push63=, $pop26, $pop0 + tee_local $push62=, $0=, $pop63 + i32.const $push1=, 0 + i32.store8 0($pop62), $pop1 + i32.const $push27=, 32 + i32.add $push28=, $8, $pop27 + i32.const $push2=, 16 + i32.add $push61=, $pop28, $pop2 + tee_local $push60=, $1=, $pop61 + i64.const $push3=, 0 + i64.store 0($pop60), $pop3 + i32.const $push29=, 32 + i32.add $push30=, $8, $pop29 + i32.const $push4=, 8 + i32.add $push59=, $pop30, $pop4 + tee_local $push58=, $2=, $pop59 + i64.const $push57=, 0 + i64.store 0($pop58), $pop57 + i64.const $push56=, 0 + i64.store 32($8), $pop56 + i32.const $push31=, 32 + i32.add $push32=, $8, $pop31 + i32.const $push55=, 0 + call foo@FUNCTION, $pop32, $pop55 + i32.const $push54=, 24 + i32.add $push53=, $8, $pop54 + tee_local $push52=, $3=, $pop53 + i32.load8_u $push5=, 0($0) + i32.store8 0($pop52), $pop5 + i32.const $push51=, 16 + i32.add $push50=, $8, $pop51 + tee_local $push49=, $4=, $pop50 + i64.load $push6=, 0($1) + i64.store 0($pop49), $pop6 + i32.const $push48=, 8 + i32.add $push47=, $8, $pop48 + tee_local $push46=, $5=, $pop47 + i64.load $push7=, 0($2) + i64.store 0($pop46), $pop7 + i64.load $push8=, 32($8) + i64.store 0($8), $pop8 + i32.const $push9=, 1 + call foo@FUNCTION, $8, $pop9 + i32.const $push45=, 0 + i32.load $push44=, p($pop45) + tee_local $push43=, $6=, $pop44 + i64.load $push10=, 32($8) + i64.store 0($pop43):p2align=0, $pop10 + i32.const $push42=, 16 + i32.add $push41=, $6, $pop42 + tee_local $push40=, $7=, $pop41 + i64.load $push11=, 0($1) + i64.store 0($pop40):p2align=0, $pop11 + i32.const $push39=, 8 + i32.add $push38=, $6, $pop39 + tee_local $push37=, $1=, $pop38 + i64.load $push12=, 0($2) + i64.store 0($pop37):p2align=0, $pop12 + i32.const $push36=, 24 + i32.add $push35=, $6, $pop36 + tee_local $push34=, $2=, $pop35 + i32.load8_u $push13=, 0($0) + i32.store8 0($pop34), $pop13 + i64.load $push14=, 0($8) + i64.store 0($6):p2align=0, $pop14 + i32.load8_u $push15=, 0($3) + i32.store8 0($2), $pop15 + i64.load $push16=, 0($4) + i64.store 0($7):p2align=0, $pop16 + i64.load $push17=, 0($5) + i64.store 0($1):p2align=0, $pop17 + i32.const $push33=, 0 + call foo@FUNCTION, $8, $pop33 + i32.const $push24=, 0 + i32.const $push22=, 64 + i32.add $push23=, $8, $pop22 + i32.store __stack_pointer($pop24), $pop23 + # fallthrough-return + .endfunc +.Lfunc_end3: + .size test3, .Lfunc_end3-test3 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call test1@FUNCTION + call test2@FUNCTION + call test3@FUNCTION + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + .hidden p # @p + .type p,@object + .section .bss.p,"aw",@nobits + .globl p + .p2align 2 +p: + .int32 0 + .size p, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20071220-1.c.s b/src/binaryen/test/torture-s/20071220-1.c.s new file mode 100644 index 0000000000..3b57398579 --- /dev/null +++ b/src/binaryen/test/torture-s/20071220-1.c.s @@ -0,0 +1,88 @@ + .text + .file "20071220-1.c" + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .param i32 + .result i32 +# BB#0: # %entry + #APP + #NO_APP + i32.load $push0=, 0($0) + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size baz, .Lfunc_end0-baz + # -- End function + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .result i32 +# BB#0: # %entry + i32.call $drop=, bar@FUNCTION + i32.const $push0=, 17 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size f1, .Lfunc_end1-f1 + # -- End function + .section .text.bar,"ax",@progbits + .type bar,@function # -- Begin function bar +bar: # @bar + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, bar.b + i32.call $drop=, baz@FUNCTION, $pop0 +.Ltmp0: # Block address taken +# BB#1: # %addr + copy_local $push1=, $0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size bar, .Lfunc_end2-bar + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .result i32 +# BB#0: # %entry + i32.call $drop=, bar@FUNCTION + i32.const $push0=, 17 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size f2, .Lfunc_end3-f2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.call $drop=, f1@FUNCTION + i32.call $drop=, f1@FUNCTION + i32.call $drop=, f2@FUNCTION + i32.call $drop=, f2@FUNCTION + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + .type bar.b,@object # @bar.b + .section .data.bar.b,"aw",@progbits + .p2align 2 +bar.b: + .int32 .Ltmp0 + .size bar.b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20071220-2.c.s b/src/binaryen/test/torture-s/20071220-2.c.s new file mode 100644 index 0000000000..2d9c27e216 --- /dev/null +++ b/src/binaryen/test/torture-s/20071220-2.c.s @@ -0,0 +1,88 @@ + .text + .file "20071220-2.c" + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .param i32 + .result i32 +# BB#0: # %entry + #APP + #NO_APP + i32.load $push0=, 0($0) + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size baz, .Lfunc_end0-baz + # -- End function + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .result i32 +# BB#0: # %entry + i32.call $drop=, bar@FUNCTION + i32.const $push0=, 17 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size f1, .Lfunc_end1-f1 + # -- End function + .section .text.bar,"ax",@progbits + .type bar,@function # -- Begin function bar +bar: # @bar + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, bar.b + i32.call $drop=, baz@FUNCTION, $pop0 +.Ltmp0: # Block address taken +# BB#1: # %addr + copy_local $push1=, $0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size bar, .Lfunc_end2-bar + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .result i32 +# BB#0: # %entry + i32.call $drop=, bar@FUNCTION + i32.const $push0=, 17 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size f2, .Lfunc_end3-f2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.call $drop=, f1@FUNCTION + i32.call $drop=, f1@FUNCTION + i32.call $drop=, f2@FUNCTION + i32.call $drop=, f2@FUNCTION + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + .type bar.b,@object # @bar.b + .section .data.bar.b,"aw",@progbits + .p2align 2 +bar.b: + .int32 .Ltmp0 + .size bar.b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20080117-1.c.s b/src/binaryen/test/torture-s/20080117-1.c.s new file mode 100644 index 0000000000..2b5b8a4e5f --- /dev/null +++ b/src/binaryen/test/torture-s/20080117-1.c.s @@ -0,0 +1,59 @@ + .text + .file "20080117-1.c" + .section .text.gstate_path_memory,"ax",@progbits + .hidden gstate_path_memory # -- Begin function gstate_path_memory + .globl gstate_path_memory + .type gstate_path_memory,@function +gstate_path_memory: # @gstate_path_memory + .param i32 +# BB#0: # %entry + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 0 + i32.load $push3=, gstate_initial+8($pop2) + i32.store 0($pop1), $pop3 + i32.const $push5=, 0 + i64.load $push4=, gstate_initial($pop5):p2align=2 + i64.store 0($0):p2align=2, $pop4 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size gstate_path_memory, .Lfunc_end0-gstate_path_memory + # -- End function + .section .text.gs_state_update_overprint,"ax",@progbits + .hidden gs_state_update_overprint # -- Begin function gs_state_update_overprint + .globl gs_state_update_overprint + .type gs_state_update_overprint,@function +gs_state_update_overprint: # @gs_state_update_overprint + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size gs_state_update_overprint, .Lfunc_end1-gs_state_update_overprint + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type gstate_initial,@object # @gstate_initial + .section .rodata.gstate_initial,"a",@progbits + .p2align 2 +gstate_initial: + .int32 1 # 0x1 + .int32 0 # 0x0 + .int32 0 # float 0 + .size gstate_initial, 12 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20080122-1.c.s b/src/binaryen/test/torture-s/20080122-1.c.s new file mode 100644 index 0000000000..5f61af1d5e --- /dev/null +++ b/src/binaryen/test/torture-s/20080122-1.c.s @@ -0,0 +1,94 @@ + .text + .file "20080122-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %entry + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + #APP + #NO_APP + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20080222-1.c.s b/src/binaryen/test/torture-s/20080222-1.c.s new file mode 100644 index 0000000000..f6b2757530 --- /dev/null +++ b/src/binaryen/test/torture-s/20080222-1.c.s @@ -0,0 +1,51 @@ + .text + .file "20080222-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.load8_u $push0=, 4($0) + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load8_u $push0=, space+4($pop3) + i32.const $push1=, 5 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden space # @space + .type space,@object + .section .data.space,"aw",@progbits + .globl space +space: + .ascii "\001\002\003\004\005\006" + .size space, 6 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20080408-1.c.s b/src/binaryen/test/torture-s/20080408-1.c.s new file mode 100644 index 0000000000..a81a2bce71 --- /dev/null +++ b/src/binaryen/test/torture-s/20080408-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20080408-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20080424-1.c.s b/src/binaryen/test/torture-s/20080424-1.c.s new file mode 100644 index 0000000000..8d1ef6a86b --- /dev/null +++ b/src/binaryen/test/torture-s/20080424-1.c.s @@ -0,0 +1,96 @@ + .text + .file "20080424-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + block + i32.const $push13=, 0 + i32.load $push12=, bar.i($pop13) + tee_local $push11=, $2=, $pop12 + i32.const $push0=, 36 + i32.mul $push10=, $pop11, $pop0 + tee_local $push9=, $3=, $pop10 + i32.const $push1=, g+288 + i32.add $push2=, $pop9, $pop1 + i32.ne $push3=, $pop2, $0 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.const $push14=, 0 + i32.const $push4=, 1 + i32.add $push5=, $2, $pop4 + i32.store bar.i($pop14), $pop5 + i32.const $push6=, g + i32.add $push7=, $3, $pop6 + i32.ne $push8=, $pop7, $1 + br_if 0, $pop8 # 0: down to label0 +# BB#2: # %if.end + return +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, g+288 + i32.const $push0=, g + call bar@FUNCTION, $pop1, $pop0 + i32.const $push3=, g+324 + i32.const $push2=, g+36 + call bar@FUNCTION, $pop3, $pop2 + i32.const $push5=, g+360 + i32.const $push4=, g+72 + call bar@FUNCTION, $pop5, $pop4 + i32.const $push7=, g+396 + i32.const $push6=, g+108 + call bar@FUNCTION, $pop7, $pop6 + i32.const $push9=, g+432 + i32.const $push8=, g+144 + call bar@FUNCTION, $pop9, $pop8 + i32.const $push11=, g+468 + i32.const $push10=, g+180 + call bar@FUNCTION, $pop11, $pop10 + i32.const $push13=, g+504 + i32.const $push12=, g+216 + call bar@FUNCTION, $pop13, $pop12 + i32.const $push15=, g+540 + i32.const $push14=, g+252 + call bar@FUNCTION, $pop15, $pop14 + i32.const $push16=, 0 + # fallthrough-return: $pop16 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type bar.i,@object # @bar.i + .section .bss.bar.i,"aw",@nobits + .p2align 2 +bar.i: + .int32 0 # 0x0 + .size bar.i, 4 + + .hidden g # @g + .type g,@object + .section .bss.g,"aw",@nobits + .globl g + .p2align 4 +g: + .skip 1728 + .size g, 1728 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20080502-1.c.s b/src/binaryen/test/torture-s/20080502-1.c.s new file mode 100644 index 0000000000..2f49cf5b2d --- /dev/null +++ b/src/binaryen/test/torture-s/20080502-1.c.s @@ -0,0 +1,68 @@ + .text + .file "20080502-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i64, i64 +# BB#0: # %entry + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i64.const $push2=, 63 + i64.shr_s $push8=, $2, $pop2 + tee_local $push7=, $2=, $pop8 + i64.const $push3=, 4611846683310179025 + i64.and $push4=, $pop7, $pop3 + i64.store 0($pop1), $pop4 + i64.const $push5=, -8905435550453399112 + i64.and $push6=, $2, $pop5 + i64.store 0($0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push11=, 0 + i32.const $push9=, 0 + i32.load $push8=, __stack_pointer($pop9) + i32.const $push10=, 16 + i32.sub $push16=, $pop8, $pop10 + tee_local $push15=, $0=, $pop16 + i32.store __stack_pointer($pop11), $pop15 + i64.const $push1=, 0 + i64.const $push0=, -4611967493404098560 + call foo@FUNCTION, $0, $pop1, $pop0 + block + i64.load $push5=, 0($0) + i64.load $push4=, 8($0) + i64.const $push3=, -8905435550453399112 + i64.const $push2=, 4611846683310179025 + i32.call $push6=, __eqtf2@FUNCTION, $pop5, $pop4, $pop3, $pop2 + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %if.end + i32.const $push14=, 0 + i32.const $push12=, 16 + i32.add $push13=, $0, $pop12 + i32.store __stack_pointer($pop14), $pop13 + i32.const $push7=, 0 + return $pop7 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20080506-1.c.s b/src/binaryen/test/torture-s/20080506-1.c.s new file mode 100644 index 0000000000..55490909dc --- /dev/null +++ b/src/binaryen/test/torture-s/20080506-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20080506-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20080506-2.c.s b/src/binaryen/test/torture-s/20080506-2.c.s new file mode 100644 index 0000000000..64f3a88b59 --- /dev/null +++ b/src/binaryen/test/torture-s/20080506-2.c.s @@ -0,0 +1,70 @@ + .text + .file "20080506-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + i32.load $push7=, 0($0) + tee_local $push6=, $0=, $pop7 + i32.const $push0=, 1 + i32.store 0($pop6), $pop0 + i32.load $push1=, 0($1) + i32.const $push2=, 2 + i32.store 0($pop1), $pop2 + block + i32.load $push3=, 0($0) + i32.const $push5=, 2 + i32.ne $push4=, $pop3, $pop5 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push17=, $pop1, $pop3 + tee_local $push16=, $0=, $pop17 + i32.store __stack_pointer($pop4), $pop16 + i32.const $push8=, 12 + i32.add $push9=, $0, $pop8 + i32.store 8($0), $pop9 + i32.const $push10=, 12 + i32.add $push11=, $0, $pop10 + i32.store 4($0), $pop11 + i32.const $push12=, 8 + i32.add $push13=, $0, $pop12 + i32.const $push14=, 4 + i32.add $push15=, $0, $pop14 + call foo@FUNCTION, $pop13, $pop15 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $0, $pop5 + i32.store __stack_pointer($pop7), $pop6 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20080519-1.c.s b/src/binaryen/test/torture-s/20080519-1.c.s new file mode 100644 index 0000000000..167a6114e2 --- /dev/null +++ b/src/binaryen/test/torture-s/20080519-1.c.s @@ -0,0 +1,176 @@ + .text + .file "20080519-1.c" + .section .text.merge_overlapping_regs,"ax",@progbits + .hidden merge_overlapping_regs # -- Begin function merge_overlapping_regs + .globl merge_overlapping_regs + .type merge_overlapping_regs,@function +merge_overlapping_regs: # @merge_overlapping_regs + .param i32 +# BB#0: # %entry + block + i32.load $push0=, 0($0) + i32.const $push4=, -1 + i32.ne $push1=, $pop0, $pop4 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load $push2=, 4($0) + i32.const $push5=, -1 + i32.ne $push3=, $pop2, $pop5 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %if.end + return +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size merge_overlapping_regs, .Lfunc_end0-merge_overlapping_regs + # -- End function + .section .text.regrename_optimize,"ax",@progbits + .hidden regrename_optimize # -- Begin function regrename_optimize + .globl regrename_optimize + .type regrename_optimize,@function +regrename_optimize: # @regrename_optimize + .param i32 + .local i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push27=, 0 + i32.const $push25=, 0 + i32.load $push24=, __stack_pointer($pop25) + i32.const $push26=, 16 + i32.sub $push36=, $pop24, $pop26 + tee_local $push35=, $6=, $pop36 + i32.store __stack_pointer($pop27), $pop35 + i64.const $push0=, 0 + i64.store 8($6):p2align=2, $pop0 + block + i32.load $push34=, 0($0) + tee_local $push33=, $5=, $pop34 + i32.eqz $push54=, $pop33 + br_if 0, $pop54 # 0: down to label1 +# BB#1: # %for.body.preheader + i32.const $3=, 0 + i32.const $2=, -1 + i32.const $4=, 0 +.LBB1_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push48=, 1 + i32.add $2=, $2, $pop48 + i32.load $push1=, 4($0) + i32.const $push47=, 3 + i32.shl $push46=, $pop1, $pop47 + tee_local $push45=, $0=, $pop46 + i32.const $push44=, reg_class_contents+4 + i32.add $push2=, $pop45, $pop44 + i32.load $push3=, 0($pop2) + i32.const $push43=, -1 + i32.xor $push4=, $pop3, $pop43 + i32.or $3=, $3, $pop4 + i32.const $push42=, reg_class_contents + i32.add $push5=, $0, $pop42 + i32.load $push6=, 0($pop5) + i32.const $push41=, -1 + i32.xor $push7=, $pop6, $pop41 + i32.or $4=, $4, $pop7 + copy_local $push40=, $5 + tee_local $push39=, $1=, $pop40 + copy_local $0=, $pop39 + i32.load $push38=, 0($1) + tee_local $push37=, $5=, $pop38 + br_if 0, $pop37 # 0: up to label2 +# BB#3: # %for.end + end_loop + i32.const $push8=, 12 + i32.add $push50=, $6, $pop8 + tee_local $push49=, $0=, $pop50 + i32.store 0($pop49), $3 + i32.store 8($6), $4 + i32.const $push9=, 0 + i32.lt_s $push10=, $2, $pop9 + br_if 0, $pop10 # 0: down to label1 +# BB#4: # %if.end + i32.load $push11=, 4($1) + i32.const $push12=, 3 + i32.shl $push53=, $pop11, $pop12 + tee_local $push52=, $2=, $pop53 + i32.const $push13=, reg_class_contents+4 + i32.add $push14=, $pop52, $pop13 + i32.load $push15=, 0($pop14) + i32.const $push16=, -1 + i32.xor $push17=, $pop15, $pop16 + i32.or $push18=, $3, $pop17 + i32.store 0($0), $pop18 + i32.const $push19=, reg_class_contents + i32.add $push20=, $2, $pop19 + i32.load $push21=, 0($pop20) + i32.const $push51=, -1 + i32.xor $push22=, $pop21, $pop51 + i32.or $push23=, $4, $pop22 + i32.store 8($6), $pop23 + i32.const $push31=, 8 + i32.add $push32=, $6, $pop31 + call merge_overlapping_regs@FUNCTION, $pop32 +.LBB1_5: # %cleanup + end_block # label1: + i32.const $push30=, 0 + i32.const $push28=, 16 + i32.add $push29=, $6, $pop28 + i32.store __stack_pointer($pop30), $pop29 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size regrename_optimize, .Lfunc_end1-regrename_optimize + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push17=, $pop4, $pop6 + tee_local $push16=, $0=, $pop17 + i32.store __stack_pointer($pop7), $pop16 + i64.const $push0=, 0 + i64.store 8($0), $pop0 + i32.const $push2=, 0 + i64.const $push1=, -1 + i64.store reg_class_contents($pop2), $pop1 + i32.const $push15=, 0 + i64.const $push14=, 0 + i64.store reg_class_contents+8($pop15), $pop14 + i32.const $push3=, 1 + i32.store 4($0), $pop3 + i32.const $push11=, 8 + i32.add $push12=, $0, $pop11 + i32.store 0($0), $pop12 + call regrename_optimize@FUNCTION, $0 + i32.const $push10=, 0 + i32.const $push8=, 16 + i32.add $push9=, $0, $pop8 + i32.store __stack_pointer($pop10), $pop9 + i32.const $push13=, 0 + # fallthrough-return: $pop13 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden reg_class_contents # @reg_class_contents + .type reg_class_contents,@object + .section .bss.reg_class_contents,"aw",@nobits + .globl reg_class_contents + .p2align 4 +reg_class_contents: + .skip 16 + .size reg_class_contents, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20080522-1.c.s b/src/binaryen/test/torture-s/20080522-1.c.s new file mode 100644 index 0000000000..51689d2af9 --- /dev/null +++ b/src/binaryen/test/torture-s/20080522-1.c.s @@ -0,0 +1,119 @@ + .text + .file "20080522-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store i($pop1), $pop0 + i32.const $push2=, 2 + i32.store 0($0), $pop2 + i32.const $push4=, 0 + i32.load $push3=, i($pop4) + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.store 0($0), $pop0 + i32.const $push2=, 0 + i32.const $push1=, 1 + i32.store i($pop2), $pop1 + i32.load $push3=, 0($0) + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push19=, 0 + i32.const $push17=, 0 + i32.load $push16=, __stack_pointer($pop17) + i32.const $push18=, 16 + i32.sub $push29=, $pop16, $pop18 + tee_local $push28=, $0=, $pop29 + i32.store __stack_pointer($pop19), $pop28 + i32.const $push0=, 0 + i32.store 12($0), $pop0 + block + i32.const $push27=, i + i32.call $push1=, foo@FUNCTION, $pop27 + i32.const $push2=, 2 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push31=, i + i32.call $push4=, bar@FUNCTION, $pop31 + i32.const $push30=, 1 + i32.ne $push5=, $pop4, $pop30 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end4 + i32.const $push23=, 12 + i32.add $push24=, $0, $pop23 + i32.call $push6=, foo@FUNCTION, $pop24 + i32.const $push32=, 1 + i32.ne $push7=, $pop6, $pop32 + br_if 0, $pop7 # 0: down to label0 +# BB#3: # %if.end8 + i32.load $push8=, 12($0) + i32.const $push33=, 2 + i32.ne $push9=, $pop8, $pop33 + br_if 0, $pop9 # 0: down to label0 +# BB#4: # %if.end11 + i32.const $push25=, 12 + i32.add $push26=, $0, $pop25 + i32.call $push10=, bar@FUNCTION, $pop26 + i32.const $push34=, 2 + i32.ne $push11=, $pop10, $pop34 + br_if 0, $pop11 # 0: down to label0 +# BB#5: # %if.end15 + i32.load $push13=, 12($0) + i32.const $push12=, 2 + i32.ne $push14=, $pop13, $pop12 + br_if 0, $pop14 # 0: down to label0 +# BB#6: # %if.end18 + i32.const $push22=, 0 + i32.const $push20=, 16 + i32.add $push21=, $0, $pop20 + i32.store __stack_pointer($pop22), $pop21 + i32.const $push15=, 0 + return $pop15 +.LBB2_7: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type i,@object # @i + .section .bss.i,"aw",@nobits + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20080529-1.c.s b/src/binaryen/test/torture-s/20080529-1.c.s new file mode 100644 index 0000000000..89f1808dbc --- /dev/null +++ b/src/binaryen/test/torture-s/20080529-1.c.s @@ -0,0 +1,32 @@ + .text + .file "20080529-1.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param f32 + .result i32 +# BB#0: # %entry + f32.const $push0=, 0x0p0 + f32.eq $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20080604-1.c.s b/src/binaryen/test/torture-s/20080604-1.c.s new file mode 100644 index 0000000000..d56aa6ab67 --- /dev/null +++ b/src/binaryen/test/torture-s/20080604-1.c.s @@ -0,0 +1,95 @@ + .text + .file "20080604-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.load $push1=, x($pop0) + i32.eqz $push2=, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push15=, $pop2, $pop4 + tee_local $push14=, $1=, $pop15 + i32.store __stack_pointer($pop5), $pop14 + i32.const $push9=, 12 + i32.add $push10=, $1, $pop9 + i32.const $push0=, x + i32.select $push13=, $pop10, $pop0, $0 + tee_local $push12=, $0=, $pop13 + i32.const $push1=, .L.str + i32.store 0($pop12), $pop1 + call foo@FUNCTION + i32.const $push11=, .L.str + i32.store 0($0), $pop11 + i32.const $push8=, 0 + i32.const $push6=, 16 + i32.add $push7=, $1, $pop6 + i32.store __stack_pointer($pop8), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size baz, .Lfunc_end1-baz + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, .L.str + i32.store x($pop1), $pop0 + call foo@FUNCTION + i32.const $push4=, 0 + i32.const $push3=, .L.str + i32.store x($pop4), $pop3 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 2 +x: + .skip 4 + .size x, 4 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "Everything OK" + .size .L.str, 14 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20080719-1.c.s b/src/binaryen/test/torture-s/20080719-1.c.s new file mode 100644 index 0000000000..cf346dd894 --- /dev/null +++ b/src/binaryen/test/torture-s/20080719-1.c.s @@ -0,0 +1,79 @@ + .text + .file "20080719-1.c" + .section .text.xxx,"ax",@progbits + .hidden xxx # -- Begin function xxx + .globl xxx + .type xxx,@function +xxx: # @xxx + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push7=, cfb_tab8_be + i32.const $push3=, cfb_tab16_be + i32.const $push2=, cfb_tab32 + i32.const $push0=, 16 + i32.eq $push1=, $0, $pop0 + i32.select $push4=, $pop3, $pop2, $pop1 + i32.const $push5=, 8 + i32.eq $push6=, $0, $pop5 + i32.select $push8=, $pop7, $pop4, $pop6 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end0: + .size xxx, .Lfunc_end0-xxx + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type cfb_tab8_be,@object # @cfb_tab8_be + .section .rodata.cfb_tab8_be,"a",@progbits + .p2align 4 +cfb_tab8_be: + .int32 0 # 0x0 + .int32 255 # 0xff + .int32 65280 # 0xff00 + .int32 65535 # 0xffff + .int32 16711680 # 0xff0000 + .int32 16711935 # 0xff00ff + .int32 16776960 # 0xffff00 + .int32 16777215 # 0xffffff + .int32 4278190080 # 0xff000000 + .int32 4278190335 # 0xff0000ff + .int32 4278255360 # 0xff00ff00 + .int32 4278255615 # 0xff00ffff + .int32 4294901760 # 0xffff0000 + .int32 4294902015 # 0xffff00ff + .int32 4294967040 # 0xffffff00 + .int32 4294967295 # 0xffffffff + .size cfb_tab8_be, 64 + + .type cfb_tab16_be,@object # @cfb_tab16_be + .section .rodata.cfb_tab16_be,"a",@progbits + .p2align 4 +cfb_tab16_be: + .int32 0 # 0x0 + .int32 65535 # 0xffff + .int32 4294901760 # 0xffff0000 + .int32 4294967295 # 0xffffffff + .size cfb_tab16_be, 16 + + .type cfb_tab32,@object # @cfb_tab32 + .section .rodata.cfb_tab32,"a",@progbits + .p2align 2 +cfb_tab32: + .int32 0 # 0x0 + .int32 4294967295 # 0xffffffff + .size cfb_tab32, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20080813-1.c.s b/src/binaryen/test/torture-s/20080813-1.c.s new file mode 100644 index 0000000000..7879644ca6 --- /dev/null +++ b/src/binaryen/test/torture-s/20080813-1.c.s @@ -0,0 +1,51 @@ + .text + .file "20080813-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 255 + i32.eq $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20081103-1.c.s b/src/binaryen/test/torture-s/20081103-1.c.s new file mode 100644 index 0000000000..1420f0b575 --- /dev/null +++ b/src/binaryen/test/torture-s/20081103-1.c.s @@ -0,0 +1,77 @@ + .text + .file "20081103-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.load $push2=, 1($0):p2align=0 + i32.const $push0=, 0 + i32.load $push1=, A($pop0) + i32.ne $push3=, $pop2, $pop1 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push14=, $pop2, $pop4 + tee_local $push13=, $1=, $pop14 + i32.store __stack_pointer($pop5), $pop13 + i32.const $push12=, 0 + i32.load $push11=, A($pop12) + tee_local $push10=, $0=, $pop11 + i32.store 1($1):p2align=0, $pop10 + block + i32.const $push9=, 0 + i32.load $push0=, A($pop9) + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %foo.exit + i32.const $push8=, 0 + i32.const $push6=, 16 + i32.add $push7=, $1, $pop6 + i32.store __stack_pointer($pop8), $pop7 + i32.const $push15=, 0 + return $pop15 +.LBB1_2: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden A # @A + .type A,@object + .section .data.A,"aw",@progbits + .globl A + .p2align 2 +A: + .ascii "1234" + .size A, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype memcmp, i32, i32, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20081112-1.c.s b/src/binaryen/test/torture-s/20081112-1.c.s new file mode 100644 index 0000000000..2de9c8c931 --- /dev/null +++ b/src/binaryen/test/torture-s/20081112-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20081112-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20081117-1.c.s b/src/binaryen/test/torture-s/20081117-1.c.s new file mode 100644 index 0000000000..a52280764e --- /dev/null +++ b/src/binaryen/test/torture-s/20081117-1.c.s @@ -0,0 +1,79 @@ + .text + .file "20081117-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 +# BB#0: # %entry + i64.load $push0=, 0($0) + i64.const $push1=, 16 + i64.shr_u $push2=, $pop0, $pop1 + i32.wrap/i64 $push3=, $pop2 + i32.eq $push4=, $pop3, $1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push14=, $pop3, $pop5 + tee_local $push13=, $0=, $pop14 + i32.store __stack_pointer($pop6), $pop13 + i32.const $push12=, 0 + i64.load $push0=, s($pop12) + i64.store 8($0), $pop0 + block + i32.const $push10=, 8 + i32.add $push11=, $0, $pop10 + i32.const $push1=, -2023406815 + i32.call $push2=, f@FUNCTION, $pop11, $pop1 + i32.eqz $push16=, $pop2 + br_if 0, $pop16 # 0: down to label0 +# BB#1: # %if.end + i32.const $push9=, 0 + i32.const $push7=, 16 + i32.add $push8=, $0, $pop7 + i32.store __stack_pointer($pop9), $pop8 + i32.const $push15=, 0 + return $pop15 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden s # @s + .type s,@object + .section .data.s,"aw",@progbits + .globl s + .p2align 3 +s: + .int8 1 # 0x1 + .int8 0 # 0x0 + .int8 33 # 0x21 + .int8 67 # 0x43 + .int8 101 # 0x65 + .int8 135 # 0x87 + .int8 2 # 0x2 + .int8 0 # 0x0 + .size s, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20081218-1.c.s b/src/binaryen/test/torture-s/20081218-1.c.s new file mode 100644 index 0000000000..31f2d39563 --- /dev/null +++ b/src/binaryen/test/torture-s/20081218-1.c.s @@ -0,0 +1,123 @@ + .text + .file "20081218-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push2=, a + i32.const $push1=, 38 + i32.const $push0=, 520 + i32.call $drop=, memset@FUNCTION, $pop2, $pop1, $pop0 + i32.const $push3=, 640034342 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar +# BB#0: # %entry + i32.const $push2=, a + i32.const $push1=, 54 + i32.const $push0=, 520 + i32.call $drop=, memset@FUNCTION, $pop2, $pop1, $pop0 + i32.const $push4=, 0 + i32.const $push3=, 909588022 + i32.store a+4($pop4), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + block + i32.call $push1=, foo@FUNCTION + i32.const $push0=, 640034342 + i32.ne $push2=, $pop1, $pop0 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %for.body.preheader + i32.const $0=, 0 +.LBB2_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push17=, a + i32.add $push3=, $0, $pop17 + i32.load8_u $push4=, 0($pop3) + i32.const $push16=, 38 + i32.ne $push5=, $pop4, $pop16 + br_if 1, $pop5 # 1: down to label0 +# BB#3: # %for.cond + # in Loop: Header=BB2_2 Depth=1 + i32.const $push21=, 1 + i32.add $push20=, $0, $pop21 + tee_local $push19=, $0=, $pop20 + i32.const $push18=, 519 + i32.le_u $push6=, $pop19, $pop18 + br_if 0, $pop6 # 0: up to label1 +# BB#4: # %for.end + end_loop + call bar@FUNCTION + i32.const $0=, 0 + i32.const $push22=, 0 + i32.load $push7=, a+4($pop22) + i32.const $push8=, 909588022 + i32.ne $push9=, $pop7, $pop8 + br_if 0, $pop9 # 0: down to label0 +# BB#5: # %if.end9 + i32.const $push23=, 0 + i32.const $push10=, 909522486 + i32.store a+4($pop23), $pop10 +.LBB2_6: # %for.body13 + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push25=, a + i32.add $push11=, $0, $pop25 + i32.load8_u $push12=, 0($pop11) + i32.const $push24=, 54 + i32.ne $push13=, $pop12, $pop24 + br_if 1, $pop13 # 1: down to label0 +# BB#7: # %for.cond10 + # in Loop: Header=BB2_6 Depth=1 + i32.const $push29=, 1 + i32.add $push28=, $0, $pop29 + tee_local $push27=, $0=, $pop28 + i32.const $push26=, 519 + i32.le_u $push14=, $pop27, $pop26 + br_if 0, $pop14 # 0: up to label2 +# BB#8: # %for.end22 + end_loop + i32.const $push15=, 0 + return $pop15 +.LBB2_9: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .skip 520 + .size a, 520 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20090113-1.c.s b/src/binaryen/test/torture-s/20090113-1.c.s new file mode 100644 index 0000000000..d820f4a917 --- /dev/null +++ b/src/binaryen/test/torture-s/20090113-1.c.s @@ -0,0 +1,152 @@ + .text + .file "20090113-1.c" + .section .text.msum_i4,"ax",@progbits + .hidden msum_i4 # -- Begin function msum_i4 + .globl msum_i4 + .type msum_i4,@function +msum_i4: # @msum_i4 + .param i32, i32, i32 + .local i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push23=, 0 + i32.const $push21=, 0 + i32.load $push20=, __stack_pointer($pop21) + i32.const $push22=, 64 + i32.sub $push42=, $pop20, $pop22 + tee_local $push41=, $8=, $pop42 + i32.store __stack_pointer($pop23), $pop41 + i32.load $push40=, 0($2) + tee_local $push39=, $2=, $pop40 + i32.const $push38=, -1 + i32.add $push37=, $pop39, $pop38 + tee_local $push36=, $6=, $pop37 + i32.const $push35=, 12 + i32.mul $push1=, $pop36, $pop35 + i32.add $push34=, $1, $pop1 + tee_local $push33=, $7=, $pop34 + i32.const $push32=, 16 + i32.add $push2=, $pop33, $pop32 + i32.load $push3=, 0($pop2) + i32.const $push31=, 1 + i32.add $push4=, $pop3, $pop31 + i32.const $push30=, 12 + i32.add $push5=, $7, $pop30 + i32.load $push6=, 0($pop5) + i32.sub $3=, $pop4, $pop6 + block + i32.const $push29=, 2 + i32.lt_s $push7=, $2, $pop29 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %for.body.lr.ph + i32.const $push27=, 32 + i32.add $push28=, $8, $pop27 + i32.const $push10=, 0 + i32.const $push45=, 2 + i32.shl $push8=, $2, $pop45 + i32.const $push44=, -4 + i32.add $push9=, $pop8, $pop44 + i32.call $drop=, memset@FUNCTION, $pop28, $pop10, $pop9 + i32.const $push43=, 16 + i32.add $2=, $1, $pop43 + copy_local $7=, $8 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.load $push11=, 0($2) + i32.const $push52=, 1 + i32.add $push12=, $pop11, $pop52 + i32.const $push51=, -4 + i32.add $push13=, $2, $pop51 + i32.load $push14=, 0($pop13) + i32.sub $push15=, $pop12, $pop14 + i32.store 0($7), $pop15 + i32.const $push50=, 12 + i32.add $2=, $2, $pop50 + i32.const $push49=, 4 + i32.add $7=, $7, $pop49 + i32.const $push48=, -1 + i32.add $push47=, $6, $pop48 + tee_local $push46=, $6=, $pop47 + br_if 0, $pop46 # 0: up to label1 +.LBB0_3: # %for.end + end_loop + end_block # label0: + i32.load $5=, 0($1) + i32.load $1=, 0($0) + i32.const $push54=, 1 + i32.lt_s $0=, $3, $pop54 + i32.const $push53=, 2 + i32.shl $4=, $3, $pop53 +.LBB0_4: # %do.body + # =>This Loop Header: Depth=1 + # Child Loop BB0_6 Depth 2 + loop # label2: + block + block + br_if 0, $0 # 0: down to label4 +# BB#5: # %for.body18.preheader + # in Loop: Header=BB0_4 Depth=1 + i32.const $7=, 0 + copy_local $6=, $3 + copy_local $2=, $5 +.LBB0_6: # %for.body18 + # Parent Loop BB0_4 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label5: + i32.load $push16=, 0($2) + i32.add $7=, $pop16, $7 + i32.const $push58=, 4 + i32.add $push0=, $2, $pop58 + copy_local $2=, $pop0 + i32.const $push57=, -1 + i32.add $push56=, $6, $pop57 + tee_local $push55=, $6=, $pop56 + br_if 0, $pop55 # 0: up to label5 +# BB#7: # %for.end22.loopexit + # in Loop: Header=BB0_4 Depth=1 + end_loop + i32.add $5=, $5, $4 + br 1 # 1: down to label3 +.LBB0_8: # in Loop: Header=BB0_4 Depth=1 + end_block # label4: + i32.const $7=, 0 +.LBB0_9: # %for.end22 + # in Loop: Header=BB0_4 Depth=1 + end_block # label3: + i32.store 0($1), $7 + i32.const $push62=, 4 + i32.add $1=, $1, $pop62 + i32.load $push17=, 32($8) + i32.const $push61=, 1 + i32.add $push60=, $pop17, $pop61 + tee_local $push59=, $2=, $pop60 + i32.store 32($8), $pop59 + i32.load $push18=, 0($8) + i32.ne $push19=, $2, $pop18 + br_if 0, $pop19 # 0: up to label2 +# BB#10: # %do.end + end_loop + i32.const $push26=, 0 + i32.const $push24=, 64 + i32.add $push25=, $8, $pop24 + i32.store __stack_pointer($pop26), $pop25 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size msum_i4, .Lfunc_end0-msum_i4 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20090113-2.c.s b/src/binaryen/test/torture-s/20090113-2.c.s new file mode 100644 index 0000000000..bbc18a7bef --- /dev/null +++ b/src/binaryen/test/torture-s/20090113-2.c.s @@ -0,0 +1,415 @@ + .text + .file "20090113-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 48 + i32.sub $push26=, $pop9, $pop11 + tee_local $push25=, $0=, $pop26 + i32.store __stack_pointer($pop12), $pop25 + i32.const $push2=, 40 + i32.add $push3=, $0, $pop2 + i32.const $push0=, 0 + i32.load $push1=, .Lmain.elem+16($pop0) + i32.store 0($pop3), $pop1 + i32.const $push5=, 32 + i32.add $push6=, $0, $pop5 + i32.const $push24=, 0 + i64.load $push4=, .Lmain.elem+8($pop24):p2align=2 + i64.store 0($pop6), $pop4 + i32.const $push23=, 0 + i64.load $push7=, .Lmain.elem($pop23):p2align=2 + i64.store 24($0), $pop7 + i64.const $push8=, 0 + i64.store 16($0), $pop8 + i32.const $push16=, 24 + i32.add $push17=, $0, $pop16 + i32.store 12($0), $pop17 + i32.const $push18=, 24 + i32.add $push19=, $0, $pop18 + i32.store 8($0), $pop19 + i32.const $push20=, 8 + i32.add $push21=, $0, $pop20 + call foobar@FUNCTION, $pop21 + i32.const $push15=, 0 + i32.const $push13=, 48 + i32.add $push14=, $0, $pop13 + i32.store __stack_pointer($pop15), $pop14 + i32.const $push22=, 0 + # fallthrough-return: $pop22 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.foobar,"ax",@progbits + .type foobar,@function # -- Begin function foobar +foobar: # @foobar + .param i32 + .local i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push14=, 0 + i32.const $push12=, 0 + i32.load $push11=, __stack_pointer($pop12) + i32.const $push13=, 32 + i32.sub $push34=, $pop11, $pop13 + tee_local $push33=, $7=, $pop34 + i32.store __stack_pointer($pop14), $pop33 + i32.const $push18=, 16 + i32.add $push19=, $7, $pop18 + i32.const $push20=, 12 + i32.add $push21=, $7, $pop20 + call bmp_iter_set_init@FUNCTION, $pop19, $0, $pop21 + i32.const $push22=, 16 + i32.add $push23=, $7, $pop22 + i32.const $push32=, 12 + i32.add $2=, $pop23, $pop32 + i32.const $push2=, 24 + i32.add $3=, $7, $pop2 +.LBB1_1: # %for.cond + # =>This Loop Header: Depth=1 + # Child Loop BB1_3 Depth 2 + # Child Loop BB1_9 Depth 2 + loop # label0: + i32.load $0=, 12($7) + block + block + block + block + i32.load $push36=, 0($2) + tee_local $push35=, $5=, $pop36 + i32.eqz $push66=, $pop35 + br_if 0, $pop66 # 0: down to label4 +# BB#2: # %if.then.i + # in Loop: Header=BB1_1 Depth=1 + block + i32.const $push37=, 1 + i32.and $push0=, $5, $pop37 + br_if 0, $pop0 # 0: down to label5 +.LBB1_3: # %while.body.i + # Parent Loop BB1_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label6: + i32.const $push42=, 1 + i32.add $0=, $0, $pop42 + i32.const $push41=, 1 + i32.shr_u $push40=, $5, $pop41 + tee_local $push39=, $5=, $pop40 + i32.const $push38=, 1 + i32.and $push1=, $pop39, $pop38 + i32.eqz $push67=, $pop1 + br_if 0, $pop67 # 0: up to label6 +.LBB1_4: # %while.end.i + # in Loop: Header=BB1_1 Depth=1 + end_loop + end_block # label5: + i32.store 12($7), $0 + br 1 # 1: down to label3 +.LBB1_5: # %if.end.i + # in Loop: Header=BB1_1 Depth=1 + end_block # label4: + i32.load $push3=, 0($3) + i32.const $push50=, 1 + i32.add $push49=, $pop3, $pop50 + tee_local $push48=, $5=, $pop49 + i32.store 0($3), $pop48 + i32.const $push47=, 63 + i32.add $push4=, $0, $pop47 + i32.const $push46=, -64 + i32.and $push45=, $pop4, $pop46 + tee_local $push44=, $6=, $pop45 + i32.store 12($7), $pop44 + i32.load $4=, 16($7) + i32.const $push43=, 2 + i32.ne $push5=, $5, $pop43 + br_if 1, $pop5 # 1: down to label2 +# BB#6: # in Loop: Header=BB1_1 Depth=1 + i32.const $8=, 4 + br 2 # 2: down to label1 +.LBB1_7: # in Loop: Header=BB1_1 Depth=1 + end_block # label3: + i32.const $8=, 2 + br 1 # 1: down to label1 +.LBB1_8: # in Loop: Header=BB1_1 Depth=1 + end_block # label2: + i32.const $8=, 6 +.LBB1_9: # Parent Loop BB1_1 Depth=1 + # => This Inner Loop Header: Depth=2 + end_block # label1: + loop # label7: + block + block + block + block + block + block + block + block + block + block + block + block + br_table $8, 5, 0, 1, 6, 2, 3, 4, 4 # 5: down to label14 + # 0: down to label19 + # 1: down to label18 + # 6: down to label13 + # 2: down to label17 + # 3: down to label16 + # 4: down to label15 +.LBB1_10: # %if.then15.i + # in Loop: Header=BB1_9 Depth=2 + end_block # label19: + i32.store 0($2), $1 + i32.store 0($3), $5 + i32.store 12($7), $6 + i32.store 16($7), $4 + i32.const $push24=, 16 + i32.add $push25=, $7, $pop24 + i32.const $push26=, 12 + i32.add $push27=, $7, $pop26 + call bmp_iter_set_tail@FUNCTION, $pop25, $pop27 + i32.load $0=, 12($7) +# BB#11: # in Loop: Header=BB1_9 Depth=2 + i32.const $8=, 2 + br 11 # 11: up to label7 +.LBB1_12: # %for.body + # in Loop: Header=BB1_1 Depth=1 + end_block # label18: + call catchme@FUNCTION, $0 + i32.const $push28=, 16 + i32.add $push29=, $7, $pop28 + i32.const $push30=, 12 + i32.add $push31=, $7, $pop30 + call bmp_iter_next@FUNCTION, $pop29, $pop31 + br 11 # 11: up to label0 +.LBB1_13: # %while.end21.i + # in Loop: Header=BB1_9 Depth=2 + end_block # label17: + i32.load $push52=, 0($4) + tee_local $push51=, $4=, $pop52 + i32.eqz $push68=, $pop51 + br_if 4, $pop68 # 4: down to label12 +# BB#14: # in Loop: Header=BB1_9 Depth=2 + i32.const $8=, 5 + br 9 # 9: up to label7 +.LBB1_15: # %if.end25.i + # in Loop: Header=BB1_9 Depth=2 + end_block # label16: + i32.load $push10=, 8($4) + i32.const $push55=, 7 + i32.shl $6=, $pop10, $pop55 + i32.const $5=, 0 + i32.const $push54=, 0 + i32.const $push53=, 2 + i32.eq $push6=, $pop54, $pop53 + br_if 7, $pop6 # 7: down to label8 +# BB#16: # in Loop: Header=BB1_9 Depth=2 + i32.const $8=, 6 + br 8 # 8: up to label7 +.LBB1_17: # %while.body9.i.preheader + # in Loop: Header=BB1_9 Depth=2 + end_block # label15: + i32.const $push57=, 2 + i32.shl $push7=, $5, $pop57 + i32.add $push8=, $4, $pop7 + i32.const $push56=, 12 + i32.add $0=, $pop8, $pop56 +# BB#18: # in Loop: Header=BB1_9 Depth=2 + i32.const $8=, 0 + br 7 # 7: up to label7 +.LBB1_19: # %while.body9.i + # in Loop: Header=BB1_9 Depth=2 + end_block # label14: + i32.load $push59=, 0($0) + tee_local $push58=, $1=, $pop59 + br_if 2, $pop58 # 2: down to label11 +# BB#20: # in Loop: Header=BB1_9 Depth=2 + i32.const $8=, 3 + br 6 # 6: up to label7 +.LBB1_21: # %if.end17.i + # in Loop: Header=BB1_9 Depth=2 + end_block # label13: + i32.const $push65=, 4 + i32.add $0=, $0, $pop65 + i32.const $push64=, 64 + i32.add $6=, $6, $pop64 + i32.const $push63=, 1 + i32.add $push62=, $5, $pop63 + tee_local $push61=, $5=, $pop62 + i32.const $push60=, 2 + i32.ne $push9=, $pop61, $pop60 + br_if 3, $pop9 # 3: down to label9 + br 2 # 2: down to label10 +.LBB1_22: # %for.end + end_block # label12: + i32.const $push17=, 0 + i32.const $push15=, 32 + i32.add $push16=, $7, $pop15 + i32.store __stack_pointer($pop17), $pop16 + return +.LBB1_23: # in Loop: Header=BB1_9 Depth=2 + end_block # label11: + i32.const $8=, 1 + br 3 # 3: up to label7 +.LBB1_24: # in Loop: Header=BB1_9 Depth=2 + end_block # label10: + i32.const $8=, 4 + br 2 # 2: up to label7 +.LBB1_25: # in Loop: Header=BB1_9 Depth=2 + end_block # label9: + i32.const $8=, 0 + br 1 # 1: up to label7 +.LBB1_26: # in Loop: Header=BB1_9 Depth=2 + end_block # label8: + i32.const $8=, 4 + br 0 # 0: up to label7 +.LBB1_27: + end_loop + end_loop + .endfunc +.Lfunc_end1: + .size foobar, .Lfunc_end1-foobar + # -- End function + .section .text.bmp_iter_set_init,"ax",@progbits + .type bmp_iter_set_init,@function # -- Begin function bmp_iter_set_init +bmp_iter_set_init: # @bmp_iter_set_init + .param i32, i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.store 4($0), $pop7 + i32.load $push6=, 0($1) + tee_local $push5=, $1=, $pop6 + i32.store 0($0), $pop5 + block + br_if 0, $1 # 0: down to label20 +# BB#1: # %if.then + i32.const $1=, bitmap_zero_bits + i32.const $push8=, bitmap_zero_bits + i32.store 0($0), $pop8 +.LBB2_2: # %while.end + end_block # label20: + i32.const $push11=, 0 + i32.store 8($0), $pop11 + i32.load $push10=, 12($1) + tee_local $push9=, $3=, $pop10 + i32.store 12($0), $pop9 + i32.load $push0=, 8($1) + i32.const $push1=, 7 + i32.shl $push2=, $pop0, $pop1 + i32.eqz $push3=, $3 + i32.or $push4=, $pop2, $pop3 + i32.store 0($2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size bmp_iter_set_init, .Lfunc_end2-bmp_iter_set_init + # -- End function + .section .text.catchme,"ax",@progbits + .type catchme,@function # -- Begin function catchme +catchme: # @catchme + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 64 + i32.or $push1=, $0, $pop0 + i32.const $push3=, 64 + i32.ne $push2=, $pop1, $pop3 + br_if 0, $pop2 # 0: down to label21 +# BB#1: # %if.end + return +.LBB3_2: # %if.then + end_block # label21: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size catchme, .Lfunc_end3-catchme + # -- End function + .section .text.bmp_iter_next,"ax",@progbits + .type bmp_iter_next,@function # -- Begin function bmp_iter_next +bmp_iter_next: # @bmp_iter_next + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 12($0) + i32.const $push1=, 1 + i32.shr_u $push2=, $pop0, $pop1 + i32.store 12($0), $pop2 + i32.load $push3=, 0($1) + i32.const $push5=, 1 + i32.add $push4=, $pop3, $pop5 + i32.store 0($1), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end4: + .size bmp_iter_next, .Lfunc_end4-bmp_iter_next + # -- End function + .section .text.bmp_iter_set_tail,"ax",@progbits + .type bmp_iter_set_tail,@function # -- Begin function bmp_iter_set_tail +bmp_iter_set_tail: # @bmp_iter_set_tail + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + block + i32.load $push6=, 12($0) + tee_local $push5=, $3=, $pop6 + i32.const $push4=, 1 + i32.and $push0=, $pop5, $pop4 + br_if 0, $pop0 # 0: down to label22 +# BB#1: # %while.body.lr.ph + i32.load $2=, 0($1) +.LBB5_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label23: + i32.const $push11=, 1 + i32.add $2=, $2, $pop11 + i32.const $push10=, 1 + i32.shr_u $push9=, $3, $pop10 + tee_local $push8=, $3=, $pop9 + i32.const $push7=, 1 + i32.and $push1=, $pop8, $pop7 + i32.eqz $push12=, $pop1 + br_if 0, $pop12 # 0: up to label23 +# BB#3: # %while.cond.while.end_crit_edge + end_loop + i32.store 0($1), $2 + i32.const $push2=, 12 + i32.add $push3=, $0, $pop2 + i32.store 0($pop3), $3 +.LBB5_4: # %while.end + end_block # label22: + # fallthrough-return + .endfunc +.Lfunc_end5: + .size bmp_iter_set_tail, .Lfunc_end5-bmp_iter_set_tail + # -- End function + .type .Lmain.elem,@object # @main.elem + .section .rodata..Lmain.elem,"a",@progbits + .p2align 2 +.Lmain.elem: + .int32 0 + .int32 0 + .int32 0 # 0x0 + .int32 1 # 0x1 + .int32 1 # 0x1 + .size .Lmain.elem, 20 + + .hidden bitmap_zero_bits # @bitmap_zero_bits + .type bitmap_zero_bits,@object + .section .bss.bitmap_zero_bits,"aw",@nobits + .globl bitmap_zero_bits + .p2align 2 +bitmap_zero_bits: + .skip 20 + .size bitmap_zero_bits, 20 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20090113-3.c.s b/src/binaryen/test/torture-s/20090113-3.c.s new file mode 100644 index 0000000000..1628a4bfe0 --- /dev/null +++ b/src/binaryen/test/torture-s/20090113-3.c.s @@ -0,0 +1,349 @@ + .text + .file "20090113-3.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 48 + i32.sub $push26=, $pop9, $pop11 + tee_local $push25=, $0=, $pop26 + i32.store __stack_pointer($pop12), $pop25 + i32.const $push2=, 40 + i32.add $push3=, $0, $pop2 + i32.const $push0=, 0 + i32.load $push1=, .Lmain.elem+16($pop0) + i32.store 0($pop3), $pop1 + i32.const $push5=, 32 + i32.add $push6=, $0, $pop5 + i32.const $push24=, 0 + i64.load $push4=, .Lmain.elem+8($pop24):p2align=2 + i64.store 0($pop6), $pop4 + i32.const $push23=, 0 + i64.load $push7=, .Lmain.elem($pop23):p2align=2 + i64.store 24($0), $pop7 + i64.const $push8=, 0 + i64.store 16($0), $pop8 + i32.const $push16=, 24 + i32.add $push17=, $0, $pop16 + i32.store 12($0), $pop17 + i32.const $push18=, 24 + i32.add $push19=, $0, $pop18 + i32.store 8($0), $pop19 + i32.const $push20=, 8 + i32.add $push21=, $0, $pop20 + call foobar@FUNCTION, $pop21 + i32.const $push15=, 0 + i32.const $push13=, 48 + i32.add $push14=, $0, $pop13 + i32.store __stack_pointer($pop15), $pop14 + i32.const $push22=, 0 + # fallthrough-return: $pop22 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.foobar,"ax",@progbits + .type foobar,@function # -- Begin function foobar +foobar: # @foobar + .param i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push11=, 0 + i32.const $push9=, 0 + i32.load $push8=, __stack_pointer($pop9) + i32.const $push10=, 32 + i32.sub $push22=, $pop8, $pop10 + tee_local $push21=, $4=, $pop22 + i32.store __stack_pointer($pop11), $pop21 + i32.const $push15=, 16 + i32.add $push16=, $4, $pop15 + i32.const $push17=, 12 + i32.add $push18=, $4, $pop17 + call bmp_iter_set_init@FUNCTION, $pop16, $0, $pop18 + i32.load $1=, 16($4) + i32.load $2=, 24($4) + block + block + i32.load $push20=, 28($4) + tee_local $push19=, $0=, $pop20 + br_if 0, $pop19 # 0: down to label1 +# BB#1: + i32.const $5=, 2 + br 1 # 1: down to label0 +.LBB1_2: + end_block # label1: + i32.const $5=, 0 +.LBB1_3: # =>This Inner Loop Header: Depth=1 + end_block # label0: + loop # label2: + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + br_table $5, 1, 0, 3, 4, 5, 6, 9, 10, 7, 8, 11, 2, 2 # 1: down to label25 + # 0: down to label26 + # 3: down to label23 + # 4: down to label22 + # 5: down to label21 + # 6: down to label20 + # 9: down to label17 + # 10: down to label16 + # 7: down to label19 + # 8: down to label18 + # 11: down to label15 + # 2: down to label24 +.LBB1_4: # %for.inc + # in Loop: Header=BB1_3 Depth=1 + end_block # label26: + i32.const $push25=, 1 + i32.shr_u $push24=, $0, $pop25 + tee_local $push23=, $0=, $pop24 + i32.eqz $push49=, $pop23 + br_if 11, $pop49 # 11: down to label14 +# BB#5: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 0 + br 23 # 23: up to label2 +.LBB1_6: # %if.then.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label25: + i32.const $push26=, 1 + i32.and $push0=, $0, $pop26 + br_if 13, $pop0 # 13: down to label11 +# BB#7: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 11 + br 22 # 22: up to label2 +.LBB1_8: # %while.body.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label24: + i32.const $push30=, 1 + i32.shr_u $push29=, $0, $pop30 + tee_local $push28=, $0=, $pop29 + i32.const $push27=, 1 + i32.and $push1=, $pop28, $pop27 + i32.eqz $push50=, $pop1 + br_if 10, $pop50 # 10: down to label13 + br 11 # 11: down to label12 +.LBB1_9: # %if.end.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label23: + i32.const $push31=, 1 + i32.add $2=, $2, $pop31 +# BB#10: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 3 + br 20 # 20: up to label2 +.LBB1_11: # %while.body6.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label22: + i32.const $push32=, 2 + i32.eq $push2=, $2, $pop32 + br_if 16, $pop2 # 16: down to label5 +# BB#12: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 4 + br 19 # 19: up to label2 +.LBB1_13: # %while.body9.i.preheader + # in Loop: Header=BB1_3 Depth=1 + end_block # label21: + i32.const $push34=, 2 + i32.shl $push3=, $2, $pop34 + i32.add $push4=, $1, $pop3 + i32.const $push33=, 12 + i32.add $3=, $pop4, $pop33 +# BB#14: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 5 + br 18 # 18: up to label2 +.LBB1_15: # %while.body9.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label20: + i32.load $push36=, 0($3) + tee_local $push35=, $0=, $pop36 + br_if 16, $pop35 # 16: down to label3 +# BB#16: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 8 + br 17 # 17: up to label2 +.LBB1_17: # %if.end26.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label19: + i32.const $push41=, 4 + i32.add $3=, $3, $pop41 + i32.const $push40=, 1 + i32.add $push39=, $2, $pop40 + tee_local $push38=, $2=, $pop39 + i32.const $push37=, 2 + i32.ne $push7=, $pop38, $pop37 + br_if 14, $pop7 # 14: down to label4 +# BB#18: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 9 + br 16 # 16: up to label2 +.LBB1_19: # %while.end30.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label18: + i32.const $2=, 0 + i32.load $push43=, 0($1) + tee_local $push42=, $1=, $pop43 + br_if 11, $pop42 # 11: down to label6 + br 10 # 10: down to label7 +.LBB1_20: # %if.then15.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label17: + i32.const $push44=, 1 + i32.and $push5=, $0, $pop44 + br_if 6, $pop5 # 6: down to label10 +# BB#21: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 7 + br 14 # 14: up to label2 +.LBB1_22: # %while.body21.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label16: + i32.const $push48=, 1 + i32.shr_u $push47=, $0, $pop48 + tee_local $push46=, $0=, $pop47 + i32.const $push45=, 1 + i32.and $push6=, $pop46, $pop45 + i32.eqz $push51=, $pop6 + br_if 6, $pop51 # 6: down to label9 + br 7 # 7: down to label8 +.LBB1_23: # %for.end + end_block # label15: + i32.const $push14=, 0 + i32.const $push12=, 32 + i32.add $push13=, $4, $pop12 + i32.store __stack_pointer($pop14), $pop13 + return +.LBB1_24: # in Loop: Header=BB1_3 Depth=1 + end_block # label14: + i32.const $5=, 2 + br 11 # 11: up to label2 +.LBB1_25: # in Loop: Header=BB1_3 Depth=1 + end_block # label13: + i32.const $5=, 11 + br 10 # 10: up to label2 +.LBB1_26: # in Loop: Header=BB1_3 Depth=1 + end_block # label12: + i32.const $5=, 1 + br 9 # 9: up to label2 +.LBB1_27: # in Loop: Header=BB1_3 Depth=1 + end_block # label11: + i32.const $5=, 1 + br 8 # 8: up to label2 +.LBB1_28: # in Loop: Header=BB1_3 Depth=1 + end_block # label10: + i32.const $5=, 1 + br 7 # 7: up to label2 +.LBB1_29: # in Loop: Header=BB1_3 Depth=1 + end_block # label9: + i32.const $5=, 7 + br 6 # 6: up to label2 +.LBB1_30: # in Loop: Header=BB1_3 Depth=1 + end_block # label8: + i32.const $5=, 1 + br 5 # 5: up to label2 +.LBB1_31: # in Loop: Header=BB1_3 Depth=1 + end_block # label7: + i32.const $5=, 10 + br 4 # 4: up to label2 +.LBB1_32: # in Loop: Header=BB1_3 Depth=1 + end_block # label6: + i32.const $5=, 3 + br 3 # 3: up to label2 +.LBB1_33: # in Loop: Header=BB1_3 Depth=1 + end_block # label5: + i32.const $5=, 9 + br 2 # 2: up to label2 +.LBB1_34: # in Loop: Header=BB1_3 Depth=1 + end_block # label4: + i32.const $5=, 5 + br 1 # 1: up to label2 +.LBB1_35: # in Loop: Header=BB1_3 Depth=1 + end_block # label3: + i32.const $5=, 6 + br 0 # 0: up to label2 +.LBB1_36: + end_loop + .endfunc +.Lfunc_end1: + .size foobar, .Lfunc_end1-foobar + # -- End function + .section .text.bmp_iter_set_init,"ax",@progbits + .type bmp_iter_set_init,@function # -- Begin function bmp_iter_set_init +bmp_iter_set_init: # @bmp_iter_set_init + .param i32, i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.store 4($0), $pop7 + i32.load $push6=, 0($1) + tee_local $push5=, $1=, $pop6 + i32.store 0($0), $pop5 + block + br_if 0, $1 # 0: down to label27 +# BB#1: # %if.then + i32.const $1=, bitmap_zero_bits + i32.const $push8=, bitmap_zero_bits + i32.store 0($0), $pop8 +.LBB2_2: # %while.end + end_block # label27: + i32.const $push11=, 0 + i32.store 8($0), $pop11 + i32.load $push10=, 12($1) + tee_local $push9=, $3=, $pop10 + i32.store 12($0), $pop9 + i32.load $push0=, 8($1) + i32.const $push1=, 7 + i32.shl $push2=, $pop0, $pop1 + i32.eqz $push3=, $3 + i32.or $push4=, $pop2, $pop3 + i32.store 0($2), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size bmp_iter_set_init, .Lfunc_end2-bmp_iter_set_init + # -- End function + .type .Lmain.elem,@object # @main.elem + .section .rodata..Lmain.elem,"a",@progbits + .p2align 2 +.Lmain.elem: + .int32 0 + .int32 0 + .int32 0 # 0x0 + .int32 1 # 0x1 + .int32 1 # 0x1 + .size .Lmain.elem, 20 + + .hidden bitmap_zero_bits # @bitmap_zero_bits + .type bitmap_zero_bits,@object + .section .bss.bitmap_zero_bits,"aw",@nobits + .globl bitmap_zero_bits + .p2align 2 +bitmap_zero_bits: + .skip 20 + .size bitmap_zero_bits, 20 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20090207-1.c.s b/src/binaryen/test/torture-s/20090207-1.c.s new file mode 100644 index 0000000000..87449e8d56 --- /dev/null +++ b/src/binaryen/test/torture-s/20090207-1.c.s @@ -0,0 +1,44 @@ + .text + .file "20090207-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 128 + i32.sub $push10=, $pop5, $pop7 + tee_local $push9=, $1=, $pop10 + i64.const $push0=, 12884901889 + i64.store 0($pop9), $pop0 + i32.const $push1=, 2 + i32.shl $push2=, $0, $pop1 + i32.add $push3=, $1, $pop2 + i32.const $push8=, 2 + i32.store 0($pop3), $pop8 + i32.load $push4=, 0($1) + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20090527-1.c.s b/src/binaryen/test/torture-s/20090527-1.c.s new file mode 100644 index 0000000000..cea569e99d --- /dev/null +++ b/src/binaryen/test/torture-s/20090527-1.c.s @@ -0,0 +1,62 @@ + .text + .file "20090527-1.c" + .section .text.new_unit,"ax",@progbits + .hidden new_unit # -- Begin function new_unit + .globl new_unit + .type new_unit,@function +new_unit: # @new_unit + .param i32 + .local i32 +# BB#0: # %entry + block + i32.load $push8=, 4($0) + tee_local $push7=, $1=, $pop8 + i32.const $push6=, 1 + i32.ne $push0=, $pop7, $pop6 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.then + i32.const $1=, 0 + i32.const $push1=, 4 + i32.add $push2=, $0, $pop1 + i32.const $push9=, 0 + i32.store 0($pop2), $pop9 +.LBB0_2: # %if.end + end_block # label0: + block + i32.load $push3=, 0($0) + i32.const $push10=, 1 + i32.ne $push4=, $pop3, $pop10 + br_if 0, $pop4 # 0: down to label1 +# BB#3: # %if.then3 + i32.const $push5=, 0 + i32.store 0($0), $pop5 +.LBB0_4: # %if.end5 + end_block # label1: + block + br_if 0, $1 # 0: down to label2 +# BB#5: # %sw.epilog + return +.LBB0_6: # %sw.default + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size new_unit, .Lfunc_end0-new_unit + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %new_unit.exit + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20090623-1.c.s b/src/binaryen/test/torture-s/20090623-1.c.s new file mode 100644 index 0000000000..c633614256 --- /dev/null +++ b/src/binaryen/test/torture-s/20090623-1.c.s @@ -0,0 +1,51 @@ + .text + .file "20090623-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, x($pop0) + i32.store 0($pop1), $0 + copy_local $push2=, $0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push6=, $pop1, $pop3 + i32.const $push4=, 12 + i32.add $push5=, $pop6, $pop4 + i32.store x($pop0), $pop5 + i32.const $push7=, 0 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 2 +x: + .int32 0 + .size x, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20090711-1.c.s b/src/binaryen/test/torture-s/20090711-1.c.s new file mode 100644 index 0000000000..2f5c32bbea --- /dev/null +++ b/src/binaryen/test/torture-s/20090711-1.c.s @@ -0,0 +1,44 @@ + .text + .file "20090711-1.c" + .section .text.div,"ax",@progbits + .hidden div # -- Begin function div + .globl div + .type div,@function +div: # @div + .param i64 + .result i64 +# BB#0: # %entry + i64.const $push0=, 32768 + i64.div_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size div, .Lfunc_end0-div + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i64.const $push0=, -990000000 + i64.call $push1=, div@FUNCTION, $pop0 + i64.const $push2=, -30212 + i64.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20090814-1.c.s b/src/binaryen/test/torture-s/20090814-1.c.s new file mode 100644 index 0000000000..77200bbb38 --- /dev/null +++ b/src/binaryen/test/torture-s/20090814-1.c.s @@ -0,0 +1,86 @@ + .text + .file "20090814-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .result i32 +# BB#0: # %entry + i32.load $push0=, 0($0) + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, i($pop0) + i32.const $push2=, 2 + i32.shl $push3=, $pop1, $pop2 + i32.add $push4=, $0, $pop3 + i32.call $push5=, bar@FUNCTION, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push0=, 1 + i32.store i($pop7), $pop0 + i32.const $push6=, 0 + i64.const $push1=, 184683593727 + i64.store a($pop6):p2align=2, $pop1 + block + i32.const $push2=, a + i32.call $push3=, foo@FUNCTION, $pop2 + i32.const $push4=, 42 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %if.end + i32.const $push8=, 0 + return $pop8 +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .skip 8 + .size a, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20091229-1.c.s b/src/binaryen/test/torture-s/20091229-1.c.s new file mode 100644 index 0000000000..d0ddd4b579 --- /dev/null +++ b/src/binaryen/test/torture-s/20091229-1.c.s @@ -0,0 +1,33 @@ + .text + .file "20091229-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i64 + .result i64 +# BB#0: # %entry + i64.const $push0=, -2147483648 + i64.div_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20100209-1.c.s b/src/binaryen/test/torture-s/20100209-1.c.s new file mode 100644 index 0000000000..8308a1ebe8 --- /dev/null +++ b/src/binaryen/test/torture-s/20100209-1.c.s @@ -0,0 +1,32 @@ + .text + .file "20100209-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20100316-1.c.s b/src/binaryen/test/torture-s/20100316-1.c.s new file mode 100644 index 0000000000..1544870cbf --- /dev/null +++ b/src/binaryen/test/torture-s/20100316-1.c.s @@ -0,0 +1,63 @@ + .text + .file "20100316-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.load16_u $push0=, 4($0) + i32.const $push1=, 1023 + i32.and $push2=, $pop0, $pop1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push10=, 0 + i32.const $push0=, -1 + i32.store f($pop10), $pop0 + i32.const $push9=, 0 + i32.const $push8=, 0 + i32.load16_u $push1=, f+4($pop8) + i32.const $push2=, 57344 + i32.and $push3=, $pop1, $pop2 + i32.const $push4=, 7168 + i32.or $push5=, $pop3, $pop4 + i32.store16 f+4($pop9), $pop5 + block + i32.const $push6=, f + i32.call $push7=, foo@FUNCTION, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %if.end + i32.const $push11=, 0 + return $pop11 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden f # @f + .type f,@object + .section .bss.f,"aw",@nobits + .globl f + .p2align 2 +f: + .skip 8 + .size f, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20100416-1.c.s b/src/binaryen/test/torture-s/20100416-1.c.s new file mode 100644 index 0000000000..06cf4e7cce --- /dev/null +++ b/src/binaryen/test/torture-s/20100416-1.c.s @@ -0,0 +1,126 @@ + .text + .file "20100416-1.c" + .section .text.movegt,"ax",@progbits + .hidden movegt # -- Begin function movegt + .globl movegt + .type movegt,@function +movegt: # @movegt + .param i32, i32, i64 + .result i32 +# BB#0: # %entry + i64.const $push0=, -1152921504606846977 + i64.gt_s $push1=, $2, $pop0 + i32.select $push2=, $0, $1, $pop1 + i32.const $push3=, 0 + i32.const $push6=, 0 + i32.gt_s $push4=, $1, $pop6 + i32.select $push5=, $pop2, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size movegt, .Lfunc_end0-movegt + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push32=, -1 + i32.const $push31=, 1 + i32.const $push30=, 0 + i64.load $push0=, tests($pop30) + i64.const $push29=, -1152921504606846977 + i64.gt_s $push1=, $pop0, $pop29 + i32.select $push2=, $pop32, $pop31, $pop1 + i32.const $push28=, 0 + i32.load $push3=, tests+8($pop28) + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %for.cond + i32.const $push37=, -1 + i32.const $push36=, 1 + i32.const $push35=, 0 + i64.load $push5=, tests+16($pop35) + i64.const $push34=, -1152921504606846977 + i64.gt_s $push6=, $pop5, $pop34 + i32.select $push7=, $pop37, $pop36, $pop6 + i32.const $push33=, 0 + i32.load $push8=, tests+24($pop33) + i32.ne $push9=, $pop7, $pop8 + br_if 0, $pop9 # 0: down to label0 +# BB#2: # %for.cond.1 + i32.const $push42=, -1 + i32.const $push41=, 1 + i32.const $push40=, 0 + i64.load $push10=, tests+32($pop40) + i64.const $push39=, -1152921504606846977 + i64.gt_s $push11=, $pop10, $pop39 + i32.select $push12=, $pop42, $pop41, $pop11 + i32.const $push38=, 0 + i32.load $push13=, tests+40($pop38) + i32.ne $push14=, $pop12, $pop13 + br_if 0, $pop14 # 0: down to label0 +# BB#3: # %for.cond.2 + i32.const $push47=, -1 + i32.const $push46=, 1 + i32.const $push45=, 0 + i64.load $push15=, tests+48($pop45) + i64.const $push44=, -1152921504606846977 + i64.gt_s $push16=, $pop15, $pop44 + i32.select $push17=, $pop47, $pop46, $pop16 + i32.const $push43=, 0 + i32.load $push18=, tests+56($pop43) + i32.ne $push19=, $pop17, $pop18 + br_if 0, $pop19 # 0: down to label0 +# BB#4: # %for.cond.3 + i32.const $push24=, -1 + i32.const $push23=, 1 + i32.const $push49=, 0 + i64.load $push20=, tests+64($pop49) + i64.const $push21=, -1152921504606846977 + i64.gt_s $push22=, $pop20, $pop21 + i32.select $push25=, $pop24, $pop23, $pop22 + i32.const $push48=, 0 + i32.load $push26=, tests+72($pop48) + i32.ne $push27=, $pop25, $pop26 + br_if 0, $pop27 # 0: down to label0 +# BB#5: # %for.cond.4 + i32.const $push50=, 0 + return $pop50 +.LBB1_6: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden tests # @tests + .type tests,@object + .section .data.tests,"aw",@progbits + .globl tests + .p2align 4 +tests: + .int64 -1152921504606846976 # 0xf000000000000000 + .int32 4294967295 # 0xffffffff + .skip 4 + .int64 -1152921504606846977 # 0xefffffffffffffff + .int32 1 # 0x1 + .skip 4 + .int64 -1152921504606846975 # 0xf000000000000001 + .int32 4294967295 # 0xffffffff + .skip 4 + .int64 0 # 0x0 + .int32 4294967295 # 0xffffffff + .skip 4 + .int64 -9223372036854775808 # 0x8000000000000000 + .int32 1 # 0x1 + .skip 4 + .size tests, 80 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20100430-1.c.s b/src/binaryen/test/torture-s/20100430-1.c.s new file mode 100644 index 0000000000..7b0de98c55 --- /dev/null +++ b/src/binaryen/test/torture-s/20100430-1.c.s @@ -0,0 +1,17 @@ + .text + .file "20100430-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20100708-1.c.s b/src/binaryen/test/torture-s/20100708-1.c.s new file mode 100644 index 0000000000..50fd2d3136 --- /dev/null +++ b/src/binaryen/test/torture-s/20100708-1.c.s @@ -0,0 +1,49 @@ + .text + .file "20100708-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 +# BB#0: # %entry + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i32.const $push3=, 0 + i32.const $push2=, 192 + i32.call $drop=, memset@FUNCTION, $pop1, $pop3, $pop2 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 208 + i32.sub $push11=, $pop1, $pop3 + tee_local $push10=, $0=, $pop11 + i32.store __stack_pointer($pop4), $pop10 + i32.const $push8=, 8 + i32.add $push9=, $0, $pop8 + call f@FUNCTION, $pop9 + i32.const $push7=, 0 + i32.const $push5=, 208 + i32.add $push6=, $0, $pop5 + i32.store __stack_pointer($pop7), $pop6 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20100805-1.c.s b/src/binaryen/test/torture-s/20100805-1.c.s new file mode 100644 index 0000000000..81f80cac03 --- /dev/null +++ b/src/binaryen/test/torture-s/20100805-1.c.s @@ -0,0 +1,49 @@ + .text + .file "20100805-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.and $0=, $0, $pop0 + block + i32.eqz $push5=, $1 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %for.body.preheader +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push4=, 1 + i32.rotl $0=, $0, $pop4 + i32.const $push3=, -1 + i32.add $push2=, $1, $pop3 + tee_local $push1=, $1=, $pop2 + br_if 0, $pop1 # 0: up to label1 +.LBB0_3: # %for.end + end_loop + end_block # label0: + copy_local $push6=, $0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20100827-1.c.s b/src/binaryen/test/torture-s/20100827-1.c.s new file mode 100644 index 0000000000..b33075c97c --- /dev/null +++ b/src/binaryen/test/torture-s/20100827-1.c.s @@ -0,0 +1,81 @@ + .text + .file "20100827-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + block + block + i32.load8_u $push0=, 0($0) + i32.eqz $push8=, $pop0 + br_if 0, $pop8 # 0: down to label1 +# BB#1: # %if.end.preheader + i32.const $2=, 0 +.LBB0_2: # %if.end + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.add $push5=, $0, $2 + tee_local $push4=, $1=, $pop5 + i32.eqz $push9=, $pop4 + br_if 2, $pop9 # 2: down to label0 +# BB#3: # %if.end5 + # in Loop: Header=BB0_2 Depth=1 + i32.const $push7=, 1 + i32.add $2=, $2, $pop7 + i32.const $push6=, 1 + i32.add $push1=, $1, $pop6 + i32.load8_u $push2=, 0($pop1) + br_if 0, $pop2 # 0: up to label2 +# BB#4: # %do.end + end_loop + return $2 +.LBB0_5: + end_block # label1: + i32.const $push3=, 0 + return $pop3 +.LBB0_6: # %if.then4 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, .L.str + i32.call $push1=, foo@FUNCTION, $pop0 + i32.const $push2=, 1 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label3 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB1_2: # %if.then + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "a" + .size .L.str, 2 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20101011-1.c.s b/src/binaryen/test/torture-s/20101011-1.c.s new file mode 100644 index 0000000000..8ed79eb992 --- /dev/null +++ b/src/binaryen/test/torture-s/20101011-1.c.s @@ -0,0 +1,46 @@ + .text + .file "20101011-1.c" + .section .text.sigfpe,"ax",@progbits + .hidden sigfpe # -- Begin function sigfpe + .globl sigfpe + .type sigfpe,@function +sigfpe: # @sigfpe + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size sigfpe, .Lfunc_end0-sigfpe + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 8 + i32.const $push0=, sigfpe@FUNCTION + i32.call $drop=, signal@FUNCTION, $pop1, $pop0 + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden k # @k + .type k,@object + .section .bss.k,"aw",@nobits + .globl k + .p2align 2 +k: + .int32 0 # 0x0 + .size k, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype signal, i32, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/20101013-1.c.s b/src/binaryen/test/torture-s/20101013-1.c.s new file mode 100644 index 0000000000..f1b345ff43 --- /dev/null +++ b/src/binaryen/test/torture-s/20101013-1.c.s @@ -0,0 +1,78 @@ + .text + .file "20101013-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call build_ref_for_offset@FUNCTION + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.build_ref_for_offset,"ax",@progbits + .type build_ref_for_offset,@function # -- Begin function build_ref_for_offset +build_ref_for_offset: # @build_ref_for_offset + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push13=, $pop3, $pop5 + tee_local $push12=, $0=, $pop13 + i32.store __stack_pointer($pop6), $pop12 + i32.const $push10=, 8 + i32.add $push11=, $0, $pop10 + call get_addr_base_and_unit_offset@FUNCTION, $pop11 + i64.load $push1=, 8($0) + i64.const $push0=, 4 + i64.add $push2=, $pop1, $pop0 + call build_int_cst@FUNCTION, $pop2 + i32.const $push9=, 0 + i32.const $push7=, 16 + i32.add $push8=, $0, $pop7 + i32.store __stack_pointer($pop9), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size build_ref_for_offset, .Lfunc_end1-build_ref_for_offset + # -- End function + .section .text.get_addr_base_and_unit_offset,"ax",@progbits + .type get_addr_base_and_unit_offset,@function # -- Begin function get_addr_base_and_unit_offset +get_addr_base_and_unit_offset: # @get_addr_base_and_unit_offset + .param i32 +# BB#0: # %entry + i64.const $push0=, 0 + i64.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size get_addr_base_and_unit_offset, .Lfunc_end2-get_addr_base_and_unit_offset + # -- End function + .section .text.build_int_cst,"ax",@progbits + .type build_int_cst,@function # -- Begin function build_int_cst +build_int_cst: # @build_int_cst + .param i64 +# BB#0: # %entry + block + i64.const $push0=, 4 + i64.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB3_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size build_int_cst, .Lfunc_end3-build_int_cst + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20101025-1.c.s b/src/binaryen/test/torture-s/20101025-1.c.s new file mode 100644 index 0000000000..f2a2a8ce5d --- /dev/null +++ b/src/binaryen/test/torture-s/20101025-1.c.s @@ -0,0 +1,89 @@ + .text + .file "20101025-1.c" + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store g_3($pop0), $0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f2, .Lfunc_end0-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, g_6($pop0) + i32.const $push2=, 1 + i32.store 0($pop1), $pop2 + i32.const $push5=, 0 + i32.load $push3=, g_7($pop5) + call f2@FUNCTION, $pop3 + i32.const $push4=, 0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end1: + .size f3, .Lfunc_end1-f3 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.call $drop=, f3@FUNCTION + block + i32.const $push3=, 0 + i32.load $push0=, g_3($pop3) + i32.const $push1=, 1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden g_3 # @g_3 + .type g_3,@object + .section .bss.g_3,"aw",@nobits + .globl g_3 + .p2align 2 +g_3: + .int32 0 # 0x0 + .size g_3, 4 + + .type g_6,@object # @g_6 + .section .data.g_6,"aw",@progbits + .p2align 2 +g_6: + .int32 g_7 + .size g_6, 4 + + .type g_7,@object # @g_7 + .section .bss.g_7,"aw",@nobits + .p2align 2 +g_7: + .int32 0 # 0x0 + .size g_7, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20111208-1.c.s b/src/binaryen/test/torture-s/20111208-1.c.s new file mode 100644 index 0000000000..b318fd551f --- /dev/null +++ b/src/binaryen/test/torture-s/20111208-1.c.s @@ -0,0 +1,109 @@ + .text + .file "20111208-1.c" + .section .text.pack_unpack,"ax",@progbits + .hidden pack_unpack # -- Begin function pack_unpack + .globl pack_unpack + .type pack_unpack,@function +pack_unpack: # @pack_unpack + .param i32, i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + block + i32.call $push10=, strlen@FUNCTION, $1 + tee_local $push9=, $3=, $pop10 + i32.const $push8=, 1 + i32.lt_s $push0=, $pop9, $pop8 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %while.body.preheader + i32.add $2=, $1, $3 +.LBB0_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + copy_local $push16=, $1 + tee_local $push15=, $3=, $pop16 + i32.const $push14=, 1 + i32.add $1=, $pop15, $pop14 + block + i32.load8_s $push13=, 0($3) + tee_local $push12=, $3=, $pop13 + i32.const $push11=, 108 + i32.eq $push1=, $pop12, $pop11 + br_if 0, $pop1 # 0: down to label2 +# BB#3: # %while.body + # in Loop: Header=BB0_2 Depth=1 + block + i32.const $push17=, 115 + i32.ne $push2=, $3, $pop17 + br_if 0, $pop2 # 0: down to label3 +# BB#4: # %sw.bb4 + # in Loop: Header=BB0_2 Depth=1 + i32.load16_s $push4=, 0($0):p2align=0 + call do_something@FUNCTION, $pop4 + i32.const $push18=, 2 + i32.add $0=, $0, $pop18 +.LBB0_5: # %sw.epilog13 + # in Loop: Header=BB0_2 Depth=1 + end_block # label3: + i32.lt_u $push6=, $1, $2 + br_if 1, $pop6 # 1: up to label1 + br 2 # 2: down to label0 +.LBB0_6: # %sw.bb7 + # in Loop: Header=BB0_2 Depth=1 + end_block # label2: + i32.load $push3=, 0($0):p2align=0 + call do_something@FUNCTION, $pop3 + i32.const $push19=, 4 + i32.add $0=, $0, $pop19 + i32.lt_u $push5=, $1, $2 + br_if 0, $pop5 # 0: up to label1 +.LBB0_7: # %while.end + end_loop + end_block # label0: + i32.load8_s $push7=, 0($0) + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end0: + .size pack_unpack, .Lfunc_end0-pack_unpack + # -- End function + .section .text.do_something,"ax",@progbits + .type do_something,@function # -- Begin function do_something +do_something: # @do_something + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store a($pop0), $0 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size do_something, .Lfunc_end1-do_something + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 384 + call do_something@FUNCTION, $pop0 + i32.const $push1=, -1071776001 + call do_something@FUNCTION, $pop1 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strlen, i32, i32 diff --git a/src/binaryen/test/torture-s/20111212-1.c.s b/src/binaryen/test/torture-s/20111212-1.c.s new file mode 100644 index 0000000000..24fd4e49b4 --- /dev/null +++ b/src/binaryen/test/torture-s/20111212-1.c.s @@ -0,0 +1,58 @@ + .text + .file "20111212-1.c" + .section .text.frob_entry,"ax",@progbits + .hidden frob_entry # -- Begin function frob_entry + .globl frob_entry + .type frob_entry,@function +frob_entry: # @frob_entry + .param i32 +# BB#0: # %entry + block + i32.load $push0=, 0($0):p2align=0 + i32.const $push1=, 63 + i32.gt_u $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.then + i32.const $push3=, -1 + i32.store 0($0):p2align=0, $pop3 +.LBB0_2: # %if.end + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size frob_entry, .Lfunc_end0-frob_entry + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push14=, $pop4, $pop6 + tee_local $push13=, $0=, $pop14 + i32.store __stack_pointer($pop7), $pop13 + i64.const $push0=, 0 + i64.store 8($0), $pop0 + i32.const $push11=, 8 + i32.add $push12=, $0, $pop11 + i32.const $push1=, 1 + i32.or $push2=, $pop12, $pop1 + call frob_entry@FUNCTION, $pop2 + i32.const $push10=, 0 + i32.const $push8=, 16 + i32.add $push9=, $0, $pop8 + i32.store __stack_pointer($pop10), $pop9 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20111227-1.c.s b/src/binaryen/test/torture-s/20111227-1.c.s new file mode 100644 index 0000000000..9ef6a5c021 --- /dev/null +++ b/src/binaryen/test/torture-s/20111227-1.c.s @@ -0,0 +1,77 @@ + .text + .file "20111227-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + block + i32.const $push0=, -1 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + i32.load16_u $0=, 0($0) + block + i32.eqz $push4=, $1 + br_if 0, $pop4 # 0: down to label1 +# BB#1: # %if.then + call bar@FUNCTION, $0 + return +.LBB1_2: # %if.else + end_block # label1: + i32.const $push1=, 16 + i32.shl $push2=, $0, $pop1 + i32.const $push3=, 16 + i32.shr_s $push0=, $pop2, $pop3 + call bar@FUNCTION, $pop0 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, v + i32.const $push0=, 0 + call foo@FUNCTION, $pop1, $pop0 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden v # @v + .type v,@object + .section .data.v,"aw",@progbits + .globl v + .p2align 1 +v: + .int16 65535 # 0xffff + .size v, 2 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20111227-2.c.s b/src/binaryen/test/torture-s/20111227-2.c.s new file mode 100644 index 0000000000..ac4fedd196 --- /dev/null +++ b/src/binaryen/test/torture-s/20111227-2.c.s @@ -0,0 +1,159 @@ + .text + .file "20111227-2.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + block + block + i32.const $push1=, 2 + i32.ne $push2=, $0, $pop1 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %entry + i32.const $push16=, 0 + i32.load16_u $push0=, s($pop16) + i32.const $push3=, 65535 + i32.and $push4=, $pop0, $pop3 + i32.const $push5=, 255 + i32.ne $push6=, $pop4, $pop5 + br_if 1, $pop6 # 1: down to label0 +.LBB0_2: # %if.end + end_block # label1: + block + i32.const $push8=, 1 + i32.ne $push9=, $0, $pop8 + br_if 0, $pop9 # 0: down to label2 +# BB#3: # %if.end + i32.const $push17=, 0 + i32.load $push7=, i($pop17) + i32.const $push10=, 255 + i32.ne $push11=, $pop7, $pop10 + br_if 1, $pop11 # 1: down to label0 +.LBB0_4: # %if.end9 + end_block # label2: + block + br_if 0, $0 # 0: down to label3 +# BB#5: # %if.end9 + i32.const $push13=, 0 + i32.load $push12=, l($pop13) + i32.const $push14=, 255 + i32.ne $push15=, $pop12, $pop14 + br_if 1, $pop15 # 1: down to label0 +.LBB0_6: # %if.end16 + end_block # label3: + return +.LBB0_7: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.load8_u $2=, v($pop6) + block + block + block + i32.eqz $push8=, $1 + br_if 0, $pop8 # 0: down to label6 +# BB#1: # %entry + i32.const $push0=, 1 + i32.eq $push1=, $1, $pop0 + br_if 2, $pop1 # 2: down to label4 +# BB#2: # %entry + i32.const $push2=, 2 + i32.ne $push3=, $1, $pop2 + br_if 1, $pop3 # 1: down to label5 +# BB#3: # %if.then + i32.const $push5=, 0 + i32.store16 s($pop5), $2 + call bar@FUNCTION, $1 + return +.LBB1_4: # %if.then8 + end_block # label6: + i32.const $push7=, 0 + i32.store l($pop7), $2 +.LBB1_5: # %if.end11 + end_block # label5: + call bar@FUNCTION, $1 + return +.LBB1_6: # %if.then3 + end_block # label4: + i32.const $push4=, 0 + i32.store i($pop4), $2 + call bar@FUNCTION, $1 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + call foo@FUNCTION, $0, $pop0 + i32.const $push1=, 1 + call foo@FUNCTION, $0, $pop1 + i32.const $push2=, 2 + call foo@FUNCTION, $0, $pop2 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden v # @v + .type v,@object + .section .data.v,"aw",@progbits + .globl v +v: + .int8 255 # 0xff + .size v, 1 + + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 1 +s: + .int16 0 # 0x0 + .size s, 2 + + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + .hidden l # @l + .type l,@object + .section .bss.l,"aw",@nobits + .globl l + .p2align 2 +l: + .int32 0 # 0x0 + .size l, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20111227-3.c.s b/src/binaryen/test/torture-s/20111227-3.c.s new file mode 100644 index 0000000000..cff3e52e7c --- /dev/null +++ b/src/binaryen/test/torture-s/20111227-3.c.s @@ -0,0 +1,159 @@ + .text + .file "20111227-3.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + block + block + i32.const $push1=, 2 + i32.ne $push2=, $0, $pop1 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %entry + i32.const $push16=, 0 + i32.load16_u $push0=, s($pop16) + i32.const $push3=, 65535 + i32.and $push4=, $pop0, $pop3 + i32.const $push15=, 65535 + i32.ne $push5=, $pop4, $pop15 + br_if 1, $pop5 # 1: down to label0 +.LBB0_2: # %if.end + end_block # label1: + block + i32.const $push7=, 1 + i32.ne $push8=, $0, $pop7 + br_if 0, $pop8 # 0: down to label2 +# BB#3: # %if.end + i32.const $push17=, 0 + i32.load $push6=, i($pop17) + i32.const $push9=, -1 + i32.ne $push10=, $pop6, $pop9 + br_if 1, $pop10 # 1: down to label0 +.LBB0_4: # %if.end9 + end_block # label2: + block + br_if 0, $0 # 0: down to label3 +# BB#5: # %if.end9 + i32.const $push12=, 0 + i32.load $push11=, l($pop12) + i32.const $push13=, -1 + i32.ne $push14=, $pop11, $pop13 + br_if 1, $pop14 # 1: down to label0 +.LBB0_6: # %if.end16 + end_block # label3: + return +.LBB0_7: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.load8_s $2=, v($pop6) + block + block + block + i32.eqz $push8=, $1 + br_if 0, $pop8 # 0: down to label6 +# BB#1: # %entry + i32.const $push0=, 1 + i32.eq $push1=, $1, $pop0 + br_if 2, $pop1 # 2: down to label4 +# BB#2: # %entry + i32.const $push2=, 2 + i32.ne $push3=, $1, $pop2 + br_if 1, $pop3 # 1: down to label5 +# BB#3: # %if.then + i32.const $push5=, 0 + i32.store16 s($pop5), $2 + call bar@FUNCTION, $1 + return +.LBB1_4: # %if.then8 + end_block # label6: + i32.const $push7=, 0 + i32.store l($pop7), $2 +.LBB1_5: # %if.end11 + end_block # label5: + call bar@FUNCTION, $1 + return +.LBB1_6: # %if.then3 + end_block # label4: + i32.const $push4=, 0 + i32.store i($pop4), $2 + call bar@FUNCTION, $1 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + call foo@FUNCTION, $0, $pop0 + i32.const $push1=, 1 + call foo@FUNCTION, $0, $pop1 + i32.const $push2=, 2 + call foo@FUNCTION, $0, $pop2 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden v # @v + .type v,@object + .section .data.v,"aw",@progbits + .globl v +v: + .int8 255 # 0xff + .size v, 1 + + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 1 +s: + .int16 0 # 0x0 + .size s, 2 + + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + .hidden l # @l + .type l,@object + .section .bss.l,"aw",@nobits + .globl l + .p2align 2 +l: + .int32 0 # 0x0 + .size l, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20120105-1.c.s b/src/binaryen/test/torture-s/20120105-1.c.s new file mode 100644 index 0000000000..9b4a34e7ba --- /dev/null +++ b/src/binaryen/test/torture-s/20120105-1.c.s @@ -0,0 +1,59 @@ + .text + .file "20120105-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push15=, $pop5, $pop7 + tee_local $push14=, $0=, $pop15 + i32.store __stack_pointer($pop8), $pop14 + i64.const $push0=, 0 + i64.store 5($0):p2align=0, $pop0 + i64.const $push13=, 0 + i64.store 0($0), $pop13 + i32.const $push4=, 0 + i32.const $push1=, 1 + i32.or $push2=, $0, $pop1 + i32.call $push3=, extract@FUNCTION, $pop2 + i32.store i($pop4), $pop3 + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $0, $pop9 + i32.store __stack_pointer($pop11), $pop10 + i32.const $push12=, 0 + # fallthrough-return: $pop12 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.extract,"ax",@progbits + .type extract,@function # -- Begin function extract +extract: # @extract + .param i32 + .result i32 +# BB#0: # %entry + i32.load $push0=, 0($0):p2align=0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size extract, .Lfunc_end1-extract + # -- End function + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20120111-1.c.s b/src/binaryen/test/torture-s/20120111-1.c.s new file mode 100644 index 0000000000..beb262771e --- /dev/null +++ b/src/binaryen/test/torture-s/20120111-1.c.s @@ -0,0 +1,46 @@ + .text + .file "20120111-1.c" + .section .text.f0a,"ax",@progbits + .hidden f0a # -- Begin function f0a + .globl f0a + .type f0a,@function +f0a: # @f0a + .param i64 + .result i32 +# BB#0: # %entry + i64.const $push0=, -3 + i64.gt_u $push1=, $0, $pop0 + i32.const $push2=, -1 + i32.xor $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size f0a, .Lfunc_end0-f0a + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i64.const $push0=, -6352373499721454287 + i32.call $push1=, f0a@FUNCTION, $pop0 + i32.const $push2=, -1 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20120207-1.c.s b/src/binaryen/test/torture-s/20120207-1.c.s new file mode 100644 index 0000000000..5f6c635c13 --- /dev/null +++ b/src/binaryen/test/torture-s/20120207-1.c.s @@ -0,0 +1,68 @@ + .text + .file "20120207-1.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.load $push8=, __stack_pointer($pop9) + i32.const $push10=, 16 + i32.sub $push14=, $pop8, $pop10 + tee_local $push13=, $1=, $pop14 + i32.const $push0=, 0 + i32.load8_u $push1=, .L.str+10($pop0) + i32.store8 10($pop13), $pop1 + i32.const $push12=, 0 + i32.load16_u $push2=, .L.str+8($pop12) + i32.store16 8($1), $pop2 + i32.const $push11=, 0 + i64.load $push3=, .L.str($pop11) + i64.store 0($1), $pop3 + i32.add $push4=, $1, $0 + i32.const $push5=, -1 + i32.add $push6=, $pop4, $pop5 + i32.load8_s $push7=, 0($pop6) + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 2 + i32.call $push1=, test@FUNCTION, $pop0 + i32.const $push2=, 49 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.16,"aMS",@progbits,1 + .p2align 4 +.L.str: + .asciz "0123456789" + .size .L.str, 11 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20120427-1.c.s b/src/binaryen/test/torture-s/20120427-1.c.s new file mode 100644 index 0000000000..9f5f467854 --- /dev/null +++ b/src/binaryen/test/torture-s/20120427-1.c.s @@ -0,0 +1,270 @@ + .text + .file "20120427-1.c" + .section .text.sreal_compare,"ax",@progbits + .hidden sreal_compare # -- Begin function sreal_compare + .globl sreal_compare + .type sreal_compare,@function +sreal_compare: # @sreal_compare + .param i32, i32 + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $4=, 1 + block + i32.load $push9=, 4($0) + tee_local $push8=, $2=, $pop9 + i32.load $push7=, 4($1) + tee_local $push6=, $3=, $pop7 + i32.gt_s $push0=, $pop8, $pop6 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + i32.const $4=, -1 + i32.lt_s $push1=, $2, $3 + br_if 0, $pop1 # 0: down to label0 +# BB#2: # %if.end6 + i32.const $4=, 1 + i32.load $push13=, 0($0) + tee_local $push12=, $0=, $pop13 + i32.load $push11=, 0($1) + tee_local $push10=, $1=, $pop11 + i32.gt_u $push2=, $pop12, $pop10 + br_if 0, $pop2 # 0: down to label0 +# BB#3: # %if.end10 + i32.const $push5=, -1 + i32.const $push4=, 0 + i32.lt_u $push3=, $0, $1 + i32.select $4=, $pop5, $pop4, $pop3 +.LBB0_4: # %return + end_block # label0: + copy_local $push14=, $4 + # fallthrough-return: $pop14 + .endfunc +.Lfunc_end0: + .size sreal_compare, .Lfunc_end0-sreal_compare + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %land.lhs.true.1 + block + i32.const $push0=, 0 + i32.load $push60=, a+4($pop0) + tee_local $push59=, $0=, $pop60 + i32.const $push58=, 0 + i32.load $push57=, a+12($pop58) + tee_local $push56=, $1=, $pop57 + i32.gt_s $push1=, $pop59, $pop56 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %if.end.i.1 + block + i32.lt_s $push2=, $0, $1 + br_if 0, $pop2 # 0: down to label2 +# BB#2: # %if.end6.i.1 + i32.const $push3=, 0 + i32.load $push5=, a($pop3) + i32.const $push61=, 0 + i32.load $push4=, a+8($pop61) + i32.ge_u $push6=, $pop5, $pop4 + br_if 1, $pop6 # 1: down to label1 +.LBB1_3: # %land.lhs.true.2 + end_block # label2: + i32.const $push7=, 0 + i32.load $push66=, a+4($pop7) + tee_local $push65=, $0=, $pop66 + i32.const $push64=, 0 + i32.load $push63=, a+20($pop64) + tee_local $push62=, $1=, $pop63 + i32.gt_s $push8=, $pop65, $pop62 + br_if 0, $pop8 # 0: down to label1 +# BB#4: # %if.end.i.2 + block + i32.lt_s $push9=, $0, $1 + br_if 0, $pop9 # 0: down to label3 +# BB#5: # %if.end6.i.2 + i32.const $push10=, 0 + i32.load $push12=, a($pop10) + i32.const $push67=, 0 + i32.load $push11=, a+16($pop67) + i32.ge_u $push13=, $pop12, $pop11 + br_if 1, $pop13 # 1: down to label1 +.LBB1_6: # %land.lhs.true16.190 + end_block # label3: + block + i32.const $push73=, 0 + i32.load $push72=, a+12($pop73) + tee_local $push71=, $0=, $pop72 + i32.const $push70=, 0 + i32.load $push69=, a+4($pop70) + tee_local $push68=, $1=, $pop69 + i32.gt_s $push14=, $pop71, $pop68 + br_if 0, $pop14 # 0: down to label4 +# BB#7: # %if.end.i45.192 + i32.lt_s $push15=, $0, $1 + br_if 1, $pop15 # 1: down to label1 +# BB#8: # %if.end6.i49.194 + i32.const $push16=, 0 + i32.load $push18=, a+8($pop16) + i32.const $push74=, 0 + i32.load $push17=, a($pop74) + i32.le_u $push19=, $pop18, $pop17 + br_if 1, $pop19 # 1: down to label1 +.LBB1_9: # %land.lhs.true.2.1 + end_block # label4: + i32.const $push80=, 0 + i32.load $push79=, a+12($pop80) + tee_local $push78=, $0=, $pop79 + i32.const $push77=, 0 + i32.load $push76=, a+20($pop77) + tee_local $push75=, $1=, $pop76 + i32.gt_s $push20=, $pop78, $pop75 + br_if 0, $pop20 # 0: down to label1 +# BB#10: # %if.end.i.2.1 + block + i32.lt_s $push21=, $0, $1 + br_if 0, $pop21 # 0: down to label5 +# BB#11: # %if.end6.i.2.1 + i32.const $push22=, 0 + i32.load $push24=, a+8($pop22) + i32.const $push81=, 0 + i32.load $push23=, a+16($pop81) + i32.ge_u $push25=, $pop24, $pop23 + br_if 1, $pop25 # 1: down to label1 +.LBB1_12: # %land.lhs.true16.2109 + end_block # label5: + block + i32.const $push87=, 0 + i32.load $push86=, a+20($pop87) + tee_local $push85=, $0=, $pop86 + i32.const $push84=, 0 + i32.load $push83=, a+4($pop84) + tee_local $push82=, $1=, $pop83 + i32.gt_s $push26=, $pop85, $pop82 + br_if 0, $pop26 # 0: down to label6 +# BB#13: # %if.end.i45.2111 + i32.lt_s $push27=, $0, $1 + br_if 1, $pop27 # 1: down to label1 +# BB#14: # %if.end6.i49.2113 + i32.const $push28=, 0 + i32.load $push30=, a+16($pop28) + i32.const $push88=, 0 + i32.load $push29=, a($pop88) + i32.le_u $push31=, $pop30, $pop29 + br_if 1, $pop31 # 1: down to label1 +.LBB1_15: # %land.lhs.true16.1.2 + end_block # label6: + block + i32.const $push94=, 0 + i32.load $push93=, a+20($pop94) + tee_local $push92=, $0=, $pop93 + i32.const $push91=, 0 + i32.load $push90=, a+12($pop91) + tee_local $push89=, $1=, $pop90 + i32.gt_s $push32=, $pop92, $pop89 + br_if 0, $pop32 # 0: down to label7 +# BB#16: # %if.end.i45.1.2 + i32.lt_s $push33=, $0, $1 + br_if 1, $pop33 # 1: down to label1 +# BB#17: # %if.end6.i49.1.2 + i32.const $push34=, 0 + i32.load $push36=, a+16($pop34) + i32.const $push95=, 0 + i32.load $push35=, a+8($pop95) + i32.le_u $push37=, $pop36, $pop35 + br_if 1, $pop37 # 1: down to label1 +.LBB1_18: # %land.lhs.true16.3 + end_block # label7: + block + i32.const $push101=, 0 + i32.load $push100=, a+28($pop101) + tee_local $push99=, $0=, $pop100 + i32.const $push98=, 0 + i32.load $push97=, a+4($pop98) + tee_local $push96=, $1=, $pop97 + i32.gt_s $push38=, $pop99, $pop96 + br_if 0, $pop38 # 0: down to label8 +# BB#19: # %if.end.i45.3 + i32.lt_s $push39=, $0, $1 + br_if 1, $pop39 # 1: down to label1 +# BB#20: # %if.end6.i49.3 + i32.const $push40=, 0 + i32.load $push42=, a+24($pop40) + i32.const $push102=, 0 + i32.load $push41=, a($pop102) + i32.le_u $push43=, $pop42, $pop41 + br_if 1, $pop43 # 1: down to label1 +.LBB1_21: # %land.lhs.true16.1.3 + end_block # label8: + block + i32.const $push108=, 0 + i32.load $push107=, a+28($pop108) + tee_local $push106=, $0=, $pop107 + i32.const $push105=, 0 + i32.load $push104=, a+12($pop105) + tee_local $push103=, $1=, $pop104 + i32.gt_s $push44=, $pop106, $pop103 + br_if 0, $pop44 # 0: down to label9 +# BB#22: # %if.end.i45.1.3 + i32.lt_s $push45=, $0, $1 + br_if 1, $pop45 # 1: down to label1 +# BB#23: # %if.end6.i49.1.3 + i32.const $push46=, 0 + i32.load $push48=, a+24($pop46) + i32.const $push109=, 0 + i32.load $push47=, a+8($pop109) + i32.le_u $push49=, $pop48, $pop47 + br_if 1, $pop49 # 1: down to label1 +.LBB1_24: # %land.lhs.true16.2.3 + end_block # label9: + block + i32.const $push115=, 0 + i32.load $push114=, a+28($pop115) + tee_local $push113=, $0=, $pop114 + i32.const $push112=, 0 + i32.load $push111=, a+20($pop112) + tee_local $push110=, $1=, $pop111 + i32.gt_s $push50=, $pop113, $pop110 + br_if 0, $pop50 # 0: down to label10 +# BB#25: # %if.end.i45.2.3 + i32.lt_s $push51=, $0, $1 + br_if 1, $pop51 # 1: down to label1 +# BB#26: # %if.end6.i49.2.3 + i32.const $push52=, 0 + i32.load $push54=, a+24($pop52) + i32.const $push116=, 0 + i32.load $push53=, a+16($pop116) + i32.le_u $push55=, $pop54, $pop53 + br_if 1, $pop55 # 1: down to label1 +.LBB1_27: # %for.inc.2.3 + end_block # label10: + i32.const $push117=, 0 + return $pop117 +.LBB1_28: # %if.then21 + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 4 +a: + .skip 8 + .int32 1 # 0x1 + .int32 0 # 0x0 + .int32 0 # 0x0 + .int32 1 # 0x1 + .int32 1 # 0x1 + .int32 1 # 0x1 + .size a, 32 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20120427-2.c.s b/src/binaryen/test/torture-s/20120427-2.c.s new file mode 100644 index 0000000000..259ffc3b3a --- /dev/null +++ b/src/binaryen/test/torture-s/20120427-2.c.s @@ -0,0 +1,270 @@ + .text + .file "20120427-2.c" + .section .text.sreal_compare,"ax",@progbits + .hidden sreal_compare # -- Begin function sreal_compare + .globl sreal_compare + .type sreal_compare,@function +sreal_compare: # @sreal_compare + .param i32, i32 + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $4=, 1 + block + i32.load $push9=, 4($0) + tee_local $push8=, $2=, $pop9 + i32.load $push7=, 4($1) + tee_local $push6=, $3=, $pop7 + i32.gt_s $push0=, $pop8, $pop6 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + i32.const $4=, -1 + i32.lt_s $push1=, $2, $3 + br_if 0, $pop1 # 0: down to label0 +# BB#2: # %if.end6 + i32.const $4=, 1 + i32.load $push13=, 0($0) + tee_local $push12=, $0=, $pop13 + i32.load $push11=, 0($1) + tee_local $push10=, $1=, $pop11 + i32.gt_u $push2=, $pop12, $pop10 + br_if 0, $pop2 # 0: down to label0 +# BB#3: # %if.end10 + i32.const $push5=, -1 + i32.const $push4=, 0 + i32.lt_u $push3=, $0, $1 + i32.select $4=, $pop5, $pop4, $pop3 +.LBB0_4: # %return + end_block # label0: + copy_local $push14=, $4 + # fallthrough-return: $pop14 + .endfunc +.Lfunc_end0: + .size sreal_compare, .Lfunc_end0-sreal_compare + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %land.lhs.true.1 + block + i32.const $push0=, 0 + i32.load $push60=, a+4($pop0) + tee_local $push59=, $0=, $pop60 + i32.const $push58=, 0 + i32.load $push57=, a+12($pop58) + tee_local $push56=, $1=, $pop57 + i32.gt_s $push1=, $pop59, $pop56 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %if.end.i.1 + block + i32.lt_s $push2=, $0, $1 + br_if 0, $pop2 # 0: down to label2 +# BB#2: # %if.end6.i.1 + i32.const $push3=, 0 + i32.load $push5=, a($pop3) + i32.const $push61=, 0 + i32.load $push4=, a+8($pop61) + i32.ge_u $push6=, $pop5, $pop4 + br_if 1, $pop6 # 1: down to label1 +.LBB1_3: # %land.lhs.true.2 + end_block # label2: + i32.const $push7=, 0 + i32.load $push66=, a+4($pop7) + tee_local $push65=, $0=, $pop66 + i32.const $push64=, 0 + i32.load $push63=, a+20($pop64) + tee_local $push62=, $1=, $pop63 + i32.gt_s $push8=, $pop65, $pop62 + br_if 0, $pop8 # 0: down to label1 +# BB#4: # %if.end.i.2 + block + i32.lt_s $push9=, $0, $1 + br_if 0, $pop9 # 0: down to label3 +# BB#5: # %if.end6.i.2 + i32.const $push10=, 0 + i32.load $push12=, a($pop10) + i32.const $push67=, 0 + i32.load $push11=, a+16($pop67) + i32.ge_u $push13=, $pop12, $pop11 + br_if 1, $pop13 # 1: down to label1 +.LBB1_6: # %land.lhs.true16.190 + end_block # label3: + block + i32.const $push73=, 0 + i32.load $push72=, a+12($pop73) + tee_local $push71=, $0=, $pop72 + i32.const $push70=, 0 + i32.load $push69=, a+4($pop70) + tee_local $push68=, $1=, $pop69 + i32.gt_s $push14=, $pop71, $pop68 + br_if 0, $pop14 # 0: down to label4 +# BB#7: # %if.end.i45.192 + i32.lt_s $push15=, $0, $1 + br_if 1, $pop15 # 1: down to label1 +# BB#8: # %if.end6.i49.194 + i32.const $push16=, 0 + i32.load $push18=, a+8($pop16) + i32.const $push74=, 0 + i32.load $push17=, a($pop74) + i32.le_u $push19=, $pop18, $pop17 + br_if 1, $pop19 # 1: down to label1 +.LBB1_9: # %land.lhs.true.2.1 + end_block # label4: + i32.const $push80=, 0 + i32.load $push79=, a+12($pop80) + tee_local $push78=, $0=, $pop79 + i32.const $push77=, 0 + i32.load $push76=, a+20($pop77) + tee_local $push75=, $1=, $pop76 + i32.gt_s $push20=, $pop78, $pop75 + br_if 0, $pop20 # 0: down to label1 +# BB#10: # %if.end.i.2.1 + block + i32.lt_s $push21=, $0, $1 + br_if 0, $pop21 # 0: down to label5 +# BB#11: # %if.end6.i.2.1 + i32.const $push22=, 0 + i32.load $push24=, a+8($pop22) + i32.const $push81=, 0 + i32.load $push23=, a+16($pop81) + i32.ge_u $push25=, $pop24, $pop23 + br_if 1, $pop25 # 1: down to label1 +.LBB1_12: # %land.lhs.true16.2109 + end_block # label5: + block + i32.const $push87=, 0 + i32.load $push86=, a+20($pop87) + tee_local $push85=, $0=, $pop86 + i32.const $push84=, 0 + i32.load $push83=, a+4($pop84) + tee_local $push82=, $1=, $pop83 + i32.gt_s $push26=, $pop85, $pop82 + br_if 0, $pop26 # 0: down to label6 +# BB#13: # %if.end.i45.2111 + i32.lt_s $push27=, $0, $1 + br_if 1, $pop27 # 1: down to label1 +# BB#14: # %if.end6.i49.2113 + i32.const $push28=, 0 + i32.load $push30=, a+16($pop28) + i32.const $push88=, 0 + i32.load $push29=, a($pop88) + i32.le_u $push31=, $pop30, $pop29 + br_if 1, $pop31 # 1: down to label1 +.LBB1_15: # %land.lhs.true16.1.2 + end_block # label6: + block + i32.const $push94=, 0 + i32.load $push93=, a+20($pop94) + tee_local $push92=, $0=, $pop93 + i32.const $push91=, 0 + i32.load $push90=, a+12($pop91) + tee_local $push89=, $1=, $pop90 + i32.gt_s $push32=, $pop92, $pop89 + br_if 0, $pop32 # 0: down to label7 +# BB#16: # %if.end.i45.1.2 + i32.lt_s $push33=, $0, $1 + br_if 1, $pop33 # 1: down to label1 +# BB#17: # %if.end6.i49.1.2 + i32.const $push34=, 0 + i32.load $push36=, a+16($pop34) + i32.const $push95=, 0 + i32.load $push35=, a+8($pop95) + i32.le_u $push37=, $pop36, $pop35 + br_if 1, $pop37 # 1: down to label1 +.LBB1_18: # %land.lhs.true16.3 + end_block # label7: + block + i32.const $push101=, 0 + i32.load $push100=, a+28($pop101) + tee_local $push99=, $0=, $pop100 + i32.const $push98=, 0 + i32.load $push97=, a+4($pop98) + tee_local $push96=, $1=, $pop97 + i32.gt_s $push38=, $pop99, $pop96 + br_if 0, $pop38 # 0: down to label8 +# BB#19: # %if.end.i45.3 + i32.lt_s $push39=, $0, $1 + br_if 1, $pop39 # 1: down to label1 +# BB#20: # %if.end6.i49.3 + i32.const $push40=, 0 + i32.load $push42=, a+24($pop40) + i32.const $push102=, 0 + i32.load $push41=, a($pop102) + i32.le_u $push43=, $pop42, $pop41 + br_if 1, $pop43 # 1: down to label1 +.LBB1_21: # %land.lhs.true16.1.3 + end_block # label8: + block + i32.const $push108=, 0 + i32.load $push107=, a+28($pop108) + tee_local $push106=, $0=, $pop107 + i32.const $push105=, 0 + i32.load $push104=, a+12($pop105) + tee_local $push103=, $1=, $pop104 + i32.gt_s $push44=, $pop106, $pop103 + br_if 0, $pop44 # 0: down to label9 +# BB#22: # %if.end.i45.1.3 + i32.lt_s $push45=, $0, $1 + br_if 1, $pop45 # 1: down to label1 +# BB#23: # %if.end6.i49.1.3 + i32.const $push46=, 0 + i32.load $push48=, a+24($pop46) + i32.const $push109=, 0 + i32.load $push47=, a+8($pop109) + i32.le_u $push49=, $pop48, $pop47 + br_if 1, $pop49 # 1: down to label1 +.LBB1_24: # %land.lhs.true16.2.3 + end_block # label9: + block + i32.const $push115=, 0 + i32.load $push114=, a+28($pop115) + tee_local $push113=, $0=, $pop114 + i32.const $push112=, 0 + i32.load $push111=, a+20($pop112) + tee_local $push110=, $1=, $pop111 + i32.gt_s $push50=, $pop113, $pop110 + br_if 0, $pop50 # 0: down to label10 +# BB#25: # %if.end.i45.2.3 + i32.lt_s $push51=, $0, $1 + br_if 1, $pop51 # 1: down to label1 +# BB#26: # %if.end6.i49.2.3 + i32.const $push52=, 0 + i32.load $push54=, a+24($pop52) + i32.const $push116=, 0 + i32.load $push53=, a+16($pop116) + i32.le_u $push55=, $pop54, $pop53 + br_if 1, $pop55 # 1: down to label1 +.LBB1_27: # %for.inc.2.3 + end_block # label10: + i32.const $push117=, 0 + return $pop117 +.LBB1_28: # %if.then21 + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 4 +a: + .skip 8 + .int32 1 # 0x1 + .int32 0 # 0x0 + .int32 0 # 0x0 + .int32 1 # 0x1 + .int32 1 # 0x1 + .int32 1 # 0x1 + .size a, 32 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20120615-1.c.s b/src/binaryen/test/torture-s/20120615-1.c.s new file mode 100644 index 0000000000..7f61e95e7d --- /dev/null +++ b/src/binaryen/test/torture-s/20120615-1.c.s @@ -0,0 +1,48 @@ + .text + .file "20120615-1.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 17 + i32.gt_u $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %entry + i32.const $push2=, 1 + i32.shl $push3=, $pop2, $0 + i32.const $push4=, 167936 + i32.and $push5=, $pop3, $pop4 + i32.eqz $push6=, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#2: # %if.end6 + return +.LBB0_3: # %if.end5 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 15 + call test1@FUNCTION, $pop0 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20120808-1.c.s b/src/binaryen/test/torture-s/20120808-1.c.s new file mode 100644 index 0000000000..7f9fd516fb --- /dev/null +++ b/src/binaryen/test/torture-s/20120808-1.c.s @@ -0,0 +1,165 @@ + .text + .file "20120808-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push35=, 0 + i32.const $push33=, 0 + i32.load $push32=, __stack_pointer($pop33) + i32.const $push34=, 32 + i32.sub $push41=, $pop32, $pop34 + tee_local $push40=, $5=, $pop41 + i32.store __stack_pointer($pop35), $pop40 + i32.const $push0=, 24 + i32.add $push1=, $5, $pop0 + i64.const $push2=, 0 + i64.store 0($pop1), $pop2 + i32.const $push3=, 16 + i32.add $push4=, $5, $pop3 + i64.const $push39=, 0 + i64.store 0($pop4), $pop39 + i64.const $push38=, 0 + i64.store 8($5), $pop38 + i64.const $push37=, 0 + i64.store 0($5), $pop37 + i32.const $push36=, 0 + i32.load $push5=, i($pop36) + i32.const $push6=, d+1 + i32.add $0=, $pop5, $pop6 + i32.const $3=, 0 +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.add $push44=, $0, $3 + tee_local $push43=, $1=, $pop44 + i32.load8_u $2=, 0($pop43) + block + block + i32.const $push42=, 25 + i32.eq $push7=, $3, $pop42 + br_if 0, $pop7 # 0: down to label2 +# BB#2: # %for.body + # in Loop: Header=BB0_1 Depth=1 + block + i32.const $push45=, 2 + i32.eq $push8=, $3, $pop45 + br_if 0, $pop8 # 0: down to label3 +# BB#3: # %for.body + # in Loop: Header=BB0_1 Depth=1 + i32.const $4=, 255 + i32.const $push46=, 1 + i32.ne $push9=, $3, $pop46 + br_if 2, $pop9 # 2: down to label1 +# BB#4: # %sw.bb + # in Loop: Header=BB0_1 Depth=1 + i32.const $4=, 253 + br 2 # 2: down to label1 +.LBB0_5: # %sw.bb1 + # in Loop: Header=BB0_1 Depth=1 + end_block # label3: + i32.const $4=, 251 + br 1 # 1: down to label1 +.LBB0_6: # %sw.bb3 + # in Loop: Header=BB0_1 Depth=1 + end_block # label2: + i32.const $4=, 254 +.LBB0_7: # %sw.epilog + # in Loop: Header=BB0_1 Depth=1 + end_block # label1: + i32.const $push51=, 0 + i32.store cp($pop51), $1 + i32.add $push11=, $5, $3 + i32.or $push10=, $4, $2 + i32.store8 0($pop11), $pop10 + i32.const $push50=, 1 + i32.add $push49=, $3, $pop50 + tee_local $push48=, $3=, $pop49 + i32.const $push47=, 30 + i32.ne $push12=, $pop48, $pop47 + br_if 0, $pop12 # 0: up to label0 +# BB#8: # %for.end + end_loop + block + i32.load8_u $push14=, 0($5) + i32.const $push13=, 255 + i32.ne $push15=, $pop14, $pop13 + br_if 0, $pop15 # 0: down to label4 +# BB#9: # %lor.lhs.false + i32.load8_u $push17=, 1($5) + i32.const $push16=, 253 + i32.ne $push18=, $pop17, $pop16 + br_if 0, $pop18 # 0: down to label4 +# BB#10: # %lor.lhs.false14 + i32.load8_u $push20=, 2($5) + i32.const $push19=, 251 + i32.ne $push21=, $pop20, $pop19 + br_if 0, $pop21 # 0: down to label4 +# BB#11: # %lor.lhs.false19 + i32.load8_u $push22=, 3($5) + i32.const $push52=, 255 + i32.ne $push23=, $pop22, $pop52 + br_if 0, $pop23 # 0: down to label4 +# BB#12: # %lor.lhs.false24 + i32.load8_u $push24=, 4($5) + i32.const $push53=, 255 + i32.ne $push25=, $pop24, $pop53 + br_if 0, $pop25 # 0: down to label4 +# BB#13: # %lor.lhs.false29 + i32.load8_u $push27=, 25($5) + i32.const $push26=, 254 + i32.ne $push28=, $pop27, $pop26 + br_if 0, $pop28 # 0: down to label4 +# BB#14: # %lor.lhs.false34 + i32.const $push54=, 0 + i32.load $push29=, cp($pop54) + i32.const $push30=, d+30 + i32.ne $push31=, $pop29, $pop30 + br_if 0, $pop31 # 0: down to label4 +# BB#15: # %if.end + i32.const $push55=, 0 + call exit@FUNCTION, $pop55 + unreachable +.LBB0_16: # %if.then + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 4 +d: + .skip 32 + .size d, 32 + + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + .hidden cp # @cp + .type cp,@object + .section .bss.cp,"aw",@nobits + .globl cp + .p2align 2 +cp: + .int32 0 + .size cp, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20120817-1.c.s b/src/binaryen/test/torture-s/20120817-1.c.s new file mode 100644 index 0000000000..42d62c39c8 --- /dev/null +++ b/src/binaryen/test/torture-s/20120817-1.c.s @@ -0,0 +1,60 @@ + .text + .file "20120817-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i64 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, foo($pop0) + i32.const $push2=, -1 + i32.add $push3=, $pop1, $pop2 + i64.extend_s/i32 $push4=, $pop3 + i64.const $push5=, 24 + i64.mul $push6=, $pop4, $pop5 + i64.const $push7=, 40 + i64.add $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i64.call $push1=, f@FUNCTION + i64.const $push0=, 16 + i64.ne $push2=, $pop1, $pop0 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden foo # @foo + .type foo,@object + .section .bss.foo,"aw",@nobits + .globl foo + .p2align 2 +foo: + .int32 0 # 0x0 + .size foo, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/20120919-1.c.s b/src/binaryen/test/torture-s/20120919-1.c.s new file mode 100644 index 0000000000..d24c9d7336 --- /dev/null +++ b/src/binaryen/test/torture-s/20120919-1.c.s @@ -0,0 +1,155 @@ + .text + .file "20120919-1.c" + .section .text.init,"ax",@progbits + .hidden init # -- Begin function init + .globl init + .type init,@function +init: # @init + .param i32, i32 +# BB#0: # %entry + block + i32.eqz $push1=, $0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + i32.const $push0=, 0 + i32.store 0($1), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size init, .Lfunc_end0-init + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, f64, i32, i32 +# BB#0: # %entry + i32.const $push14=, 0 + i32.const $push12=, 0 + i32.load $push11=, __stack_pointer($pop12) + i32.const $push13=, 6144 + i32.sub $push27=, $pop11, $pop13 + tee_local $push26=, $7=, $pop27 + i32.store __stack_pointer($pop14), $pop26 + i32.const $push25=, 1 + i32.store 12($7), $pop25 + i32.const $push18=, 12 + i32.add $push19=, $7, $pop18 + i32.const $push20=, 16 + i32.add $push21=, $7, $pop20 + call init@FUNCTION, $pop19, $pop21 + block + i32.load $push24=, 12($7) + tee_local $push23=, $0=, $pop24 + i32.const $push22=, 0 + i32.lt_s $push0=, $pop23, $pop22 + br_if 0, $pop0 # 0: down to label1 +# BB#1: # %while.body.lr.ph + i32.const $push29=, 0 + i32.load $2=, pi($pop29) + i32.const $push28=, 0 + i32.load $1=, pd($pop28) + i32.const $6=, -1 + i32.const $3=, 0 +.LBB1_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + block + br_if 0, $6 # 0: down to label3 +# BB#3: # %if.then + # in Loop: Header=BB1_2 Depth=1 + i32.load $4=, 0($2) + block + f64.load $push32=, 0($1) + tee_local $push31=, $5=, $pop32 + f64.const $push30=, 0x0p0 + f64.le $push1=, $pop31, $pop30 + f64.ne $push2=, $5, $5 + i32.or $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label4 +# BB#4: # %if.then3 + # in Loop: Header=BB1_2 Depth=1 + i32.const $push34=, 0 + i32.const $push33=, 0 + i32.gt_s $push4=, $4, $pop33 + i32.select $push5=, $4, $pop34, $pop4 + i32.add $3=, $pop5, $3 +.LBB1_5: # %if.end8 + # in Loop: Header=BB1_2 Depth=1 + end_block # label4: + f64.convert_s/i32 $push6=, $4 + f64.store 0($1), $pop6 +.LBB1_6: # %if.end11 + # in Loop: Header=BB1_2 Depth=1 + end_block # label3: + i32.const $push37=, 1 + i32.add $push36=, $6, $pop37 + tee_local $push35=, $6=, $pop36 + i32.lt_s $push7=, $pop35, $0 + br_if 0, $pop7 # 0: up to label2 +# BB#7: # %while.end + end_loop + i32.const $push8=, 1234567890 + i32.ne $push9=, $3, $pop8 + br_if 0, $pop9 # 0: down to label1 +# BB#8: # %if.end15 + i32.const $push17=, 0 + i32.const $push15=, 6144 + i32.add $push16=, $7, $pop15 + i32.store __stack_pointer($pop17), $pop16 + i32.const $push10=, 0 + return $pop10 +.LBB1_9: # %if.then14 + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden vd # @vd + .type vd,@object + .section .data.vd,"aw",@progbits + .globl vd + .p2align 4 +vd: + .int64 4607182418800017408 # double 1 + .int64 0 # double 0 + .size vd, 16 + + .hidden vi # @vi + .type vi,@object + .section .data.vi,"aw",@progbits + .globl vi + .p2align 2 +vi: + .int32 1234567890 # 0x499602d2 + .int32 0 # 0x0 + .size vi, 8 + + .hidden pd # @pd + .type pd,@object + .section .data.pd,"aw",@progbits + .globl pd + .p2align 2 +pd: + .int32 vd + .size pd, 4 + + .hidden pi # @pi + .type pi,@object + .section .data.pi,"aw",@progbits + .globl pi + .p2align 2 +pi: + .int32 vi + .size pi, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20121108-1.c.s b/src/binaryen/test/torture-s/20121108-1.c.s new file mode 100644 index 0000000000..606c46f889 --- /dev/null +++ b/src/binaryen/test/torture-s/20121108-1.c.s @@ -0,0 +1,246 @@ + .text + .file "20121108-1.c" + .section .text.strtoul1,"ax",@progbits + .hidden strtoul1 # -- Begin function strtoul1 + .globl strtoul1 + .type strtoul1,@function +strtoul1: # @strtoul1 + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + i32.add $push1=, $0, $pop0 + i32.store 0($1), $pop1 + block + block + block + block + i32.const $push2=, temp + i32.eq $push3=, $0, $pop2 + br_if 0, $pop3 # 0: down to label3 +# BB#1: # %if.else + i32.const $push4=, temp+4 + i32.eq $push5=, $0, $pop4 + br_if 1, $pop5 # 1: down to label2 +# BB#2: # %if.else3 + i32.const $push6=, temp+8 + i32.eq $push7=, $0, $pop6 + br_if 2, $pop7 # 2: down to label1 +# BB#3: # %if.else6 + i32.const $push8=, temp+12 + i32.ne $push9=, $0, $pop8 + br_if 3, $pop9 # 3: down to label0 +# BB#4: # %return + i32.const $push13=, 160 + return $pop13 +.LBB0_5: + end_block # label3: + i32.const $push12=, 192 + return $pop12 +.LBB0_6: + end_block # label2: + i32.const $push11=, 168 + return $pop11 +.LBB0_7: + end_block # label1: + i32.const $push10=, 190 + return $pop10 +.LBB0_8: # %if.end11 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size strtoul1, .Lfunc_end0-strtoul1 + # -- End function + .section .text.string_to_ip,"ax",@progbits + .hidden string_to_ip # -- Begin function string_to_ip + .globl string_to_ip + .type string_to_ip,@function +string_to_ip: # @string_to_ip + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push23=, 0 + i32.const $push21=, 0 + i32.load $push20=, __stack_pointer($pop21) + i32.const $push22=, 16 + i32.sub $push36=, $pop20, $pop22 + tee_local $push35=, $2=, $pop36 + i32.store __stack_pointer($pop23), $pop35 + block + block + block + block + i32.eqz $push57=, $0 + br_if 0, $pop57 # 0: down to label7 +# BB#1: # %if.end9 + i32.const $push27=, 12 + i32.add $push28=, $2, $pop27 + i32.call $push0=, strtoul1@FUNCTION, $0, $pop28, $2 + i32.const $push42=, 8 + i32.shl $push3=, $pop0, $pop42 + i32.const $push4=, 65280 + i32.and $0=, $pop3, $pop4 + i32.load $push41=, 12($2) + tee_local $push40=, $1=, $pop41 + i32.const $push39=, 1 + i32.add $push1=, $pop40, $pop39 + i32.load8_u $push2=, 0($1) + i32.select $push38=, $pop1, $1, $pop2 + tee_local $push37=, $1=, $pop38 + i32.eqz $push58=, $pop37 + br_if 1, $pop58 # 1: down to label6 +# BB#2: # %if.end9.1 + i32.const $push29=, 12 + i32.add $push30=, $2, $pop29 + i32.call $push5=, strtoul1@FUNCTION, $1, $pop30, $2 + i32.const $push48=, 255 + i32.and $push8=, $pop5, $pop48 + i32.or $0=, $pop8, $0 + i32.load $push47=, 12($2) + tee_local $push46=, $1=, $pop47 + i32.const $push45=, 1 + i32.add $push6=, $pop46, $pop45 + i32.load8_u $push7=, 0($1) + i32.select $push44=, $pop6, $1, $pop7 + tee_local $push43=, $1=, $pop44 + i32.eqz $push59=, $pop43 + br_if 1, $pop59 # 1: down to label6 +# BB#3: # %if.end9.2 + i32.const $push31=, 12 + i32.add $push32=, $2, $pop31 + i32.call $push10=, strtoul1@FUNCTION, $1, $pop32, $2 + i32.const $push54=, 255 + i32.and $push11=, $pop10, $pop54 + i32.const $push53=, 8 + i32.shl $push9=, $0, $pop53 + i32.or $0=, $pop11, $pop9 + i32.load $push52=, 12($2) + tee_local $push51=, $1=, $pop52 + i32.const $push12=, 1 + i32.add $push13=, $pop51, $pop12 + i32.load8_u $push14=, 0($1) + i32.select $push50=, $pop13, $1, $pop14 + tee_local $push49=, $1=, $pop50 + i32.eqz $push60=, $pop49 + br_if 2, $pop60 # 2: down to label5 +# BB#4: # %if.then3.3 + i32.const $push33=, 12 + i32.add $push34=, $2, $pop33 + i32.call $push16=, strtoul1@FUNCTION, $1, $pop34, $2 + i32.const $push17=, 255 + i32.and $push18=, $pop16, $pop17 + i32.const $push55=, 8 + i32.shl $push15=, $0, $pop55 + i32.or $0=, $pop18, $pop15 + br 3 # 3: down to label4 +.LBB1_5: + end_block # label7: + i32.const $0=, 0 + br 2 # 2: down to label4 +.LBB1_6: # %if.end9.2.thread + end_block # label6: + i32.const $push56=, 8 + i32.shl $0=, $0, $pop56 +.LBB1_7: # %cond.end.3 + end_block # label5: + i32.const $push19=, 8 + i32.shl $0=, $0, $pop19 +.LBB1_8: # %cleanup + end_block # label4: + i32.const $push26=, 0 + i32.const $push24=, 16 + i32.add $push25=, $2, $pop24 + i32.store __stack_pointer($pop26), $pop25 + copy_local $push61=, $0 + # fallthrough-return: $pop61 + .endfunc +.Lfunc_end1: + .size string_to_ip, .Lfunc_end1-string_to_ip + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 32 + i32.sub $push21=, $pop6, $pop8 + tee_local $push20=, $1=, $pop21 + i32.store __stack_pointer($pop9), $pop20 + i32.const $push0=, temp + i32.call $push19=, string_to_ip@FUNCTION, $pop0 + tee_local $push18=, $0=, $pop19 + i32.store 16($1), $pop18 + i32.const $push1=, .L.str + i32.const $push13=, 16 + i32.add $push14=, $1, $pop13 + i32.call $drop=, printf@FUNCTION, $pop1, $pop14 + i32.const $push17=, 0 + i32.load $push2=, result($pop17) + i32.store 0($1), $pop2 + i32.const $push16=, .L.str + i32.call $drop=, printf@FUNCTION, $pop16, $1 + block + i32.const $push15=, 0 + i32.load $push3=, result($pop15) + i32.ne $push4=, $0, $pop3 + br_if 0, $pop4 # 0: down to label8 +# BB#1: # %if.end + i32.const $push5=, .Lstr + i32.call $drop=, puts@FUNCTION, $pop5 + i32.const $push12=, 0 + i32.const $push10=, 32 + i32.add $push11=, $1, $pop10 + i32.store __stack_pointer($pop12), $pop11 + i32.const $push22=, 0 + return $pop22 +.LBB2_2: # %if.then + end_block # label8: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden temp # @temp + .type temp,@object + .section .data.temp,"aw",@progbits + .globl temp + .p2align 4 +temp: + .asciz "192.168.190.160" + .size temp, 16 + + .hidden result # @result + .type result,@object + .section .data.result,"aw",@progbits + .globl result + .p2align 2 +result: + .int32 3232284320 # 0xc0a8bea0 + .size result, 4 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "%x\n" + .size .L.str, 4 + + .type .Lstr,@object # @str +.Lstr: + .asciz "WORKS." + .size .Lstr, 7 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype printf, i32, i32 + .functype puts, i32, i32 diff --git a/src/binaryen/test/torture-s/20131127-1.c.s b/src/binaryen/test/torture-s/20131127-1.c.s new file mode 100644 index 0000000000..ddd481d0dd --- /dev/null +++ b/src/binaryen/test/torture-s/20131127-1.c.s @@ -0,0 +1,130 @@ + .text + .file "20131127-1.c" + .section .text.fn1,"ax",@progbits + .hidden fn1 # -- Begin function fn1 + .globl fn1 + .type fn1,@function +fn1: # @fn1 + .param i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 0 + i64.load $push3=, c+6($pop2):p2align=0 + i64.store 0($pop1):p2align=0, $pop3 + i32.const $push5=, 0 + i64.load $push4=, c($pop5):p2align=0 + i64.store 0($0):p2align=0, $pop4 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size fn1, .Lfunc_end0-fn1 + # -- End function + .section .text.fn2,"ax",@progbits + .hidden fn2 # -- Begin function fn2 + .globl fn2 + .type fn2,@function +fn2: # @fn2 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push13=, 0 + i64.load $push1=, c+6($pop13):p2align=0 + i64.store b+6($pop0):p2align=0, $pop1 + i32.const $push12=, 0 + i32.const $push11=, 0 + i64.load $push2=, c($pop11):p2align=0 + i64.store b($pop12):p2align=0, $pop2 + i32.const $push10=, 0 + i32.const $push9=, 0 + i64.load $push3=, e($pop9):p2align=0 + i64.store d($pop10):p2align=0, $pop3 + i32.const $push8=, 0 + i32.const $push7=, 0 + i64.load $push4=, e+6($pop7):p2align=0 + i64.store d+6($pop8):p2align=0, $pop4 + i32.const $push6=, 0 + i32.const $push5=, 0 + i32.store16 a($pop6), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size fn2, .Lfunc_end1-fn2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + i32.const $push14=, 0 + i64.load $push1=, c+6($pop14):p2align=0 + i64.store b+6($pop0):p2align=0, $pop1 + i32.const $push13=, 0 + i32.const $push12=, 0 + i64.load $push2=, c($pop12):p2align=0 + i64.store b($pop13):p2align=0, $pop2 + i32.const $push11=, 0 + i32.const $push10=, 0 + i64.load $push3=, e($pop10):p2align=0 + i64.store d($pop11):p2align=0, $pop3 + i32.const $push9=, 0 + i32.const $push8=, 0 + i64.load $push4=, e+6($pop8):p2align=0 + i64.store d+6($pop9):p2align=0, $pop4 + i32.const $push7=, 0 + i32.const $push6=, 0 + i32.store16 a($pop7), $pop6 + i32.const $push5=, 0 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 1 +a: + .int16 1 # 0x1 + .size a, 2 + + .hidden b # @b + .type b,@object + .section .data.b,"aw",@progbits + .globl b +b: + .int32 1 # 0x1 + .int32 0 # 0x0 + .int32 0 # 0x0 + .int16 0 # 0x0 + .size b, 14 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c +c: + .skip 14 + .size c, 14 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d +d: + .skip 14 + .size d, 14 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e +e: + .skip 14 + .size e, 14 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20140212-1.c.s b/src/binaryen/test/torture-s/20140212-1.c.s new file mode 100644 index 0000000000..25049a5ba0 --- /dev/null +++ b/src/binaryen/test/torture-s/20140212-1.c.s @@ -0,0 +1,260 @@ + .text + .file "20140212-1.c" + .section .text.fn1,"ax",@progbits + .hidden fn1 # -- Begin function fn1 + .globl fn1 + .type fn1,@function +fn1: # @fn1 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push21=, 0 + i32.const $push20=, 0 + i32.store c($pop21), $pop20 + i32.const $push19=, 0 + i32.const $push18=, 0 + i32.store e($pop19), $pop18 + i32.const $push4=, 54 + i32.const $push17=, 0 + i32.const $push16=, 0 + i32.load $push2=, a($pop16) + i32.const $push15=, 0 + i32.ne $push3=, $pop2, $pop15 + i32.const $push14=, 0 + i32.load $push0=, b($pop14) + i32.const $push13=, 0 + i32.ne $push1=, $pop0, $pop13 + i32.and $push12=, $pop3, $pop1 + tee_local $push11=, $0=, $pop12 + i32.select $push10=, $pop4, $pop17, $pop11 + tee_local $push9=, $1=, $pop10 + i32.const $push5=, 147 + i32.mul $2=, $pop9, $pop5 + i32.const $push8=, 0 + i32.load $4=, f($pop8) + i32.const $push7=, 0 + i32.load $3=, d($pop7) +.LBB0_1: # %for.cond + # =>This Inner Loop Header: Depth=1 + block + loop # label1: + block + i32.eqz $push30=, $3 + br_if 0, $pop30 # 0: down to label2 +# BB#2: # %if.then + # in Loop: Header=BB0_1 Depth=1 + i32.const $push23=, 0 + i32.const $push22=, 1 + i32.store c($pop23), $pop22 + i32.eqz $push31=, $4 + br_if 1, $pop31 # 1: up to label1 + br 2 # 2: down to label0 +.LBB0_3: # %if.else + # in Loop: Header=BB0_1 Depth=1 + end_block # label2: + i32.const $push27=, 0 + i32.const $push26=, 9 + i32.store h($pop27), $pop26 + i32.const $push25=, 0 + i32.const $push24=, 9 + i32.store i($pop25), $pop24 + i32.eqz $push32=, $4 + br_if 0, $pop32 # 0: up to label1 +.LBB0_4: # %if.then15 + end_loop + end_block # label0: + i32.const $push6=, 0 + i32.store8 j($pop6), $1 + i32.const $push29=, 0 + i32.store k($pop29), $0 + i32.const $push28=, 0 + i32.store8 g($pop28), $2 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size fn1, .Lfunc_end0-fn1 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push21=, 0 + i32.const $push20=, 0 + i32.store c($pop21), $pop20 + i32.const $push19=, 0 + i32.const $push18=, 0 + i32.store e($pop19), $pop18 + i32.const $push4=, 54 + i32.const $push17=, 0 + i32.const $push16=, 0 + i32.load $push2=, a($pop16) + i32.const $push15=, 0 + i32.ne $push3=, $pop2, $pop15 + i32.const $push14=, 0 + i32.load $push0=, b($pop14) + i32.const $push13=, 0 + i32.ne $push1=, $pop0, $pop13 + i32.and $push12=, $pop3, $pop1 + tee_local $push11=, $0=, $pop12 + i32.select $1=, $pop4, $pop17, $pop11 + i32.const $push10=, 0 + i32.load $3=, f($pop10) + i32.const $push9=, 0 + i32.load $2=, d($pop9) + i32.const $4=, 0 +.LBB1_1: # %for.cond.i + # =>This Inner Loop Header: Depth=1 + block + loop # label4: + block + i32.eqz $push32=, $2 + br_if 0, $pop32 # 0: down to label5 +# BB#2: # %if.then.i + # in Loop: Header=BB1_1 Depth=1 + i32.const $4=, 1 + i32.const $push23=, 0 + i32.const $push22=, 1 + i32.store c($pop23), $pop22 + i32.eqz $push33=, $3 + br_if 1, $pop33 # 1: up to label4 + br 2 # 2: down to label3 +.LBB1_3: # %if.else.i + # in Loop: Header=BB1_1 Depth=1 + end_block # label5: + i32.const $push27=, 0 + i32.const $push26=, 9 + i32.store h($pop27), $pop26 + i32.const $push25=, 0 + i32.const $push24=, 9 + i32.store i($pop25), $pop24 + i32.eqz $push34=, $3 + br_if 0, $pop34 # 0: up to label4 +.LBB1_4: # %fn1.exit + end_loop + end_block # label3: + i32.const $push30=, 0 + i32.store8 j($pop30), $1 + i32.const $push29=, 0 + i32.store k($pop29), $0 + i32.const $push28=, 0 + i32.const $push5=, 147 + i32.mul $push6=, $1, $pop5 + i32.store8 g($pop28), $pop6 + block + i32.const $push7=, 1 + i32.ne $push8=, $4, $pop7 + br_if 0, $pop8 # 0: down to label6 +# BB#5: # %if.end + i32.const $push31=, 0 + return $pop31 +.LBB1_6: # %if.then + end_block # label6: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden d # @d + .type d,@object + .section .data.d,"aw",@progbits + .globl d + .p2align 2 +d: + .int32 1 # 0x1 + .size d, 4 + + .hidden f # @f + .type f,@object + .section .data.f,"aw",@progbits + .globl f + .p2align 2 +f: + .int32 1 # 0x1 + .size f, 4 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e + .p2align 2 +e: + .int32 0 # 0x0 + .size e, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + .hidden k # @k + .type k,@object + .section .bss.k,"aw",@nobits + .globl k + .p2align 2 +k: + .int32 0 # 0x0 + .size k, 4 + + .hidden j # @j + .type j,@object + .section .bss.j,"aw",@nobits + .globl j +j: + .int8 0 # 0x0 + .size j, 1 + + .hidden g # @g + .type g,@object + .section .bss.g,"aw",@nobits + .globl g +g: + .int8 0 # 0x0 + .size g, 1 + + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + .hidden h # @h + .type h,@object + .section .bss.h,"aw",@nobits + .globl h + .p2align 2 +h: + .int32 0 # 0x0 + .size h, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/20140326-1.c.s b/src/binaryen/test/torture-s/20140326-1.c.s new file mode 100644 index 0000000000..bb0f92ca57 --- /dev/null +++ b/src/binaryen/test/torture-s/20140326-1.c.s @@ -0,0 +1,26 @@ + .text + .file "20140326-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/20140425-1.c.s b/src/binaryen/test/torture-s/20140425-1.c.s new file mode 100644 index 0000000000..ad29d91dee --- /dev/null +++ b/src/binaryen/test/torture-s/20140425-1.c.s @@ -0,0 +1,59 @@ + .text + .file "20140425-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push17=, $pop5, $pop7 + tee_local $push16=, $1=, $pop17 + i32.store __stack_pointer($pop8), $pop16 + i32.const $push12=, 12 + i32.add $push13=, $1, $pop12 + call set@FUNCTION, $pop13 + i32.const $push0=, 2 + i32.load $push15=, 12($1) + tee_local $push14=, $0=, $pop15 + i32.shl $push1=, $pop0, $pop14 + i32.store 12($1), $pop1 + block + i32.const $push2=, 30 + i32.le_u $push3=, $0, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $1, $pop9 + i32.store __stack_pointer($pop11), $pop10 + i32.const $push4=, 0 + return $pop4 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.set,"ax",@progbits + .type set,@function # -- Begin function set +set: # @set + .param i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size set, .Lfunc_end1-set + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/900409-1.c.s b/src/binaryen/test/torture-s/900409-1.c.s new file mode 100644 index 0000000000..e9f451df73 --- /dev/null +++ b/src/binaryen/test/torture-s/900409-1.c.s @@ -0,0 +1,109 @@ + .text + .file "900409-1.c" + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -16777216 + i32.and $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 16777215 + i32.and $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size f2, .Lfunc_end1-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 255 + i32.and $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size f3, .Lfunc_end2-f3 + # -- End function + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -256 + i32.and $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end3: + .size f4, .Lfunc_end3-f4 + # -- End function + .section .text.f5,"ax",@progbits + .hidden f5 # -- Begin function f5 + .globl f5 + .type f5,@function +f5: # @f5 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 65535 + i32.and $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end4: + .size f5, .Lfunc_end4-f5 + # -- End function + .section .text.f6,"ax",@progbits + .hidden f6 # -- Begin function f6 + .globl f6 + .type f6,@function +f6: # @f6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -65536 + i32.and $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end5: + .size f6, .Lfunc_end5-f6 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end6: + .size main, .Lfunc_end6-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920202-1.c.s b/src/binaryen/test/torture-s/920202-1.c.s new file mode 100644 index 0000000000..efa89b56d3 --- /dev/null +++ b/src/binaryen/test/torture-s/920202-1.c.s @@ -0,0 +1,32 @@ + .text + .file "920202-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920409-1.c.s b/src/binaryen/test/torture-s/920409-1.c.s new file mode 100644 index 0000000000..15f7a63f59 --- /dev/null +++ b/src/binaryen/test/torture-s/920409-1.c.s @@ -0,0 +1,32 @@ + .text + .file "920409-1.c" + .section .text.x,"ax",@progbits + .hidden x # -- Begin function x + .globl x + .type x,@function +x: # @x + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size x, .Lfunc_end0-x + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920410-1.c.s b/src/binaryen/test/torture-s/920410-1.c.s new file mode 100644 index 0000000000..ded4877575 --- /dev/null +++ b/src/binaryen/test/torture-s/920410-1.c.s @@ -0,0 +1,19 @@ + .text + .file "920410-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920411-1.c.s b/src/binaryen/test/torture-s/920411-1.c.s new file mode 100644 index 0000000000..0db42b63ef --- /dev/null +++ b/src/binaryen/test/torture-s/920411-1.c.s @@ -0,0 +1,33 @@ + .text + .file "920411-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.load $push0=, 0($0):p2align=0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920428-1.c.s b/src/binaryen/test/torture-s/920428-1.c.s new file mode 100644 index 0000000000..68a5432dde --- /dev/null +++ b/src/binaryen/test/torture-s/920428-1.c.s @@ -0,0 +1,49 @@ + .text + .file "920428-1.c" + .section .text.x,"ax",@progbits + .hidden x # -- Begin function x + .globl x + .type x,@function +x: # @x + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size x, .Lfunc_end0-x + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.eqz $push2=, $pop0 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .skip 1 + .size .L.str, 1 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920429-1.c.s b/src/binaryen/test/torture-s/920429-1.c.s new file mode 100644 index 0000000000..3d41ff3221 --- /dev/null +++ b/src/binaryen/test/torture-s/920429-1.c.s @@ -0,0 +1,73 @@ + .text + .file "920429-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.load8_u $push13=, 0($0) + tee_local $push12=, $1=, $pop13 + i32.const $push0=, 7 + i32.and $push1=, $pop12, $pop0 + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store j($pop4), $pop3 + i32.const $push11=, 0 + i32.const $push10=, 1 + i32.shr_u $push5=, $1, $pop10 + i32.const $push9=, 1 + i32.and $push6=, $pop5, $pop9 + i32.store i($pop11), $pop6 + i32.const $push8=, 1 + i32.add $push7=, $0, $pop8 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, 2 + i32.store j($pop1), $pop0 + i32.const $push4=, 0 + i32.const $push3=, 0 + i32.store i($pop4), $pop3 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + .hidden j # @j + .type j,@object + .section .bss.j,"aw",@nobits + .globl j + .p2align 2 +j: + .int32 0 # 0x0 + .size j, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920501-1.c.s b/src/binaryen/test/torture-s/920501-1.c.s new file mode 100644 index 0000000000..e9e693a873 --- /dev/null +++ b/src/binaryen/test/torture-s/920501-1.c.s @@ -0,0 +1,63 @@ + .text + .file "920501-1.c" + .section .text.x,"ax",@progbits + .hidden x # -- Begin function x + .globl x + .type x,@function +x: # @x + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push7=, 0 + i32.load $push0=, s($pop7) + i32.eqz $push11=, $pop0 + br_if 0, $pop11 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 1 + return $pop6 +.LBB0_2: # %if.then + end_block # label0: + i32.const $push10=, 0 + i32.load $push9=, s+4($pop10) + tee_local $push8=, $0=, $pop9 + i32.const $push1=, 2 + i32.shl $push2=, $pop8, $pop1 + i32.const $push3=, s+4 + i32.add $push4=, $pop2, $pop3 + i32.store 0($pop4), $0 + i32.const $push5=, 1 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size x, .Lfunc_end0-x + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i64.const $push0=, 0 + i64.store s($pop1), $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 3 +s: + .skip 8 + .size s, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920501-2.c.s b/src/binaryen/test/torture-s/920501-2.c.s new file mode 100644 index 0000000000..3f51b0e7f2 --- /dev/null +++ b/src/binaryen/test/torture-s/920501-2.c.s @@ -0,0 +1,486 @@ + .text + .file "920501-2.c" + .section .text.gcd_ll,"ax",@progbits + .hidden gcd_ll # -- Begin function gcd_ll + .globl gcd_ll + .type gcd_ll,@function +gcd_ll: # @gcd_ll + .param i64, i64 + .result i32 +# BB#0: # %entry + block + block + i64.eqz $push0=, $1 + br_if 0, $pop0 # 0: down to label1 +# BB#1: # %if.end.preheader +.LBB0_2: # %if.end + # =>This Inner Loop Header: Depth=1 + loop # label2: + i64.rem_u $push7=, $0, $1 + tee_local $push6=, $0=, $pop7 + i64.eqz $push1=, $pop6 + br_if 2, $pop1 # 2: down to label0 +# BB#3: # %if.end5 + # in Loop: Header=BB0_2 Depth=1 + i64.rem_u $push10=, $1, $0 + tee_local $push9=, $1=, $pop10 + i64.const $push8=, 0 + i64.ne $push2=, $pop9, $pop8 + br_if 0, $pop2 # 0: up to label2 +.LBB0_4: # %return + end_loop + end_block # label1: + i32.wrap/i64 $push4=, $0 + return $pop4 +.LBB0_5: + end_block # label0: + copy_local $push5=, $1 + i32.wrap/i64 $push3=, $pop5 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size gcd_ll, .Lfunc_end0-gcd_ll + # -- End function + .section .text.powmod_ll,"ax",@progbits + .hidden powmod_ll # -- Begin function powmod_ll + .globl powmod_ll + .type powmod_ll,@function +powmod_ll: # @powmod_ll + .param i64, i32, i64 + .result i64 + .local i32, i32, i64 +# BB#0: # %entry + block + block + i32.eqz $push22=, $1 + br_if 0, $pop22 # 0: down to label4 +# BB#1: # %for.body.preheader + i32.const $3=, 0 + copy_local $4=, $1 +.LBB1_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label5: + i32.const $push13=, 1 + i32.add $3=, $3, $pop13 + i32.const $push12=, 1 + i32.shr_u $push11=, $4, $pop12 + tee_local $push10=, $4=, $pop11 + br_if 0, $pop10 # 0: up to label5 +# BB#3: # %for.end + end_loop + i32.const $push15=, -1 + i32.add $push0=, $3, $pop15 + i32.const $push14=, 1 + i32.lt_s $push1=, $pop0, $pop14 + br_if 1, $pop1 # 1: down to label3 +# BB#4: # %for.body4.preheader + copy_local $5=, $0 +.LBB1_5: # %for.body4 + # =>This Inner Loop Header: Depth=1 + loop # label6: + i64.mul $push2=, $5, $5 + i64.rem_u $5=, $pop2, $2 + block + i32.const $push17=, 1 + i32.const $push16=, -2 + i32.add $push3=, $3, $pop16 + i32.shl $push4=, $pop17, $pop3 + i32.and $push5=, $pop4, $1 + i32.eqz $push23=, $pop5 + br_if 0, $pop23 # 0: down to label7 +# BB#6: # %if.then5 + # in Loop: Header=BB1_5 Depth=1 + i64.mul $push6=, $5, $0 + i64.rem_u $5=, $pop6, $2 +.LBB1_7: # %for.inc9 + # in Loop: Header=BB1_5 Depth=1 + end_block # label7: + i32.const $push21=, -1 + i32.add $push20=, $3, $pop21 + tee_local $push19=, $3=, $pop20 + i32.const $push18=, 1 + i32.gt_s $push7=, $pop19, $pop18 + br_if 0, $pop7 # 0: up to label6 +# BB#8: # %cleanup + end_loop + return $5 +.LBB1_9: + end_block # label4: + i64.const $push9=, 1 + return $pop9 +.LBB1_10: + end_block # label3: + copy_local $push8=, $0 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end1: + .size powmod_ll, .Lfunc_end1-powmod_ll + # -- End function + .section .text.facts,"ax",@progbits + .hidden facts # -- Begin function facts + .globl facts + .type facts,@function +facts: # @facts + .param i64, i32, i32, i32 + .local i64, i64, i32, i64, i64, i64, i32, i32, i64, i64, i64, i32, i32, i32 +# BB#0: # %entry + i64.extend_s/i32 $push40=, $1 + tee_local $push39=, $4=, $pop40 + i64.const $push38=, 1 + i64.add $5=, $pop39, $pop38 + i32.const $15=, factab + i32.const $17=, 0 + i32.const $16=, 1 + i32.const $1=, 1 + i64.const $8=, 1 + i64.extend_s/i32 $push37=, $2 + tee_local $push36=, $9=, $pop37 + copy_local $13=, $pop36 +.LBB2_1: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB2_3 Depth 2 + # Child Loop BB2_6 Depth 2 + # Child Loop BB2_11 Depth 2 + # Child Loop BB2_14 Depth 2 + # Child Loop BB2_19 Depth 2 + # Child Loop BB2_22 Depth 2 + # Child Loop BB2_29 Depth 2 + loop # label8: + copy_local $7=, $13 + copy_local $6=, $1 + copy_local $13=, $5 + i64.const $14=, 1 + block + i32.eqz $push104=, $3 + br_if 0, $pop104 # 0: down to label9 +# BB#2: # %for.body.i.preheader + # in Loop: Header=BB2_1 Depth=1 + i32.const $2=, -1 + i32.const $10=, 1 + copy_local $11=, $3 +.LBB2_3: # %for.body.i + # Parent Loop BB2_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label10: + copy_local $push47=, $10 + tee_local $push46=, $1=, $pop47 + i32.const $push45=, 1 + i32.add $10=, $pop46, $pop45 + i32.const $push44=, 1 + i32.add $2=, $2, $pop44 + i32.const $push43=, 1 + i32.shr_u $push42=, $11, $pop43 + tee_local $push41=, $11=, $pop42 + br_if 0, $pop41 # 0: up to label10 +# BB#4: # %for.end.i + # in Loop: Header=BB2_1 Depth=1 + end_loop + block + block + i32.const $push48=, 1 + i32.lt_s $push0=, $2, $pop48 + br_if 0, $pop0 # 0: down to label12 +# BB#5: # %for.body4.i.preheader + # in Loop: Header=BB2_1 Depth=1 + copy_local $12=, $7 +.LBB2_6: # %for.body4.i + # Parent Loop BB2_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label13: + i64.mul $push1=, $12, $12 + i64.rem_u $12=, $pop1, $0 + block + i32.const $push50=, 1 + i32.const $push49=, -2 + i32.add $push2=, $1, $pop49 + i32.shl $push3=, $pop50, $pop2 + i32.and $push4=, $pop3, $3 + i32.eqz $push105=, $pop4 + br_if 0, $pop105 # 0: down to label14 +# BB#7: # %if.then5.i + # in Loop: Header=BB2_6 Depth=2 + i64.mul $push5=, $12, $7 + i64.rem_u $12=, $pop5, $0 +.LBB2_8: # %for.inc9.i + # in Loop: Header=BB2_6 Depth=2 + end_block # label14: + i32.const $push54=, -1 + i32.add $push53=, $1, $pop54 + tee_local $push52=, $1=, $pop53 + i32.const $push51=, 1 + i32.gt_s $push6=, $pop52, $pop51 + br_if 0, $pop6 # 0: up to label13 + br 2 # 2: down to label11 +.LBB2_9: # in Loop: Header=BB2_1 Depth=1 + end_loop + end_block # label12: + copy_local $12=, $7 +.LBB2_10: # %for.body.lr.ph.i110 + # in Loop: Header=BB2_1 Depth=1 + end_block # label11: + i64.add $13=, $12, $4 + i32.const $2=, -1 + i32.const $10=, 1 + copy_local $11=, $3 +.LBB2_11: # %for.body.i116 + # Parent Loop BB2_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label15: + copy_local $push61=, $10 + tee_local $push60=, $1=, $pop61 + i32.const $push59=, 1 + i32.add $10=, $pop60, $pop59 + i32.const $push58=, 1 + i32.add $2=, $2, $pop58 + i32.const $push57=, 1 + i32.shr_u $push56=, $11, $pop57 + tee_local $push55=, $11=, $pop56 + br_if 0, $pop55 # 0: up to label15 +# BB#12: # %for.end.i118 + # in Loop: Header=BB2_1 Depth=1 + end_loop + block + block + i32.const $push62=, 1 + i32.lt_s $push7=, $2, $pop62 + br_if 0, $pop7 # 0: down to label17 +# BB#13: # %for.body4.i128.preheader + # in Loop: Header=BB2_1 Depth=1 + copy_local $12=, $9 +.LBB2_14: # %for.body4.i128 + # Parent Loop BB2_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label18: + i64.mul $push8=, $12, $12 + i64.rem_u $12=, $pop8, $0 + block + i32.const $push64=, 1 + i32.const $push63=, -2 + i32.add $push9=, $1, $pop63 + i32.shl $push10=, $pop64, $pop9 + i32.and $push11=, $pop10, $3 + i32.eqz $push106=, $pop11 + br_if 0, $pop106 # 0: down to label19 +# BB#15: # %if.then5.i131 + # in Loop: Header=BB2_14 Depth=2 + i64.mul $push12=, $12, $9 + i64.rem_u $12=, $pop12, $0 +.LBB2_16: # %for.inc9.i134 + # in Loop: Header=BB2_14 Depth=2 + end_block # label19: + i32.const $push68=, -1 + i32.add $push67=, $1, $pop68 + tee_local $push66=, $1=, $pop67 + i32.const $push65=, 1 + i32.gt_s $push13=, $pop66, $pop65 + br_if 0, $pop13 # 0: up to label18 + br 2 # 2: down to label16 +.LBB2_17: # in Loop: Header=BB2_1 Depth=1 + end_loop + end_block # label17: + copy_local $12=, $9 +.LBB2_18: # %for.body.lr.ph.i82 + # in Loop: Header=BB2_1 Depth=1 + end_block # label16: + i64.add $14=, $12, $4 + i32.const $2=, -1 + i32.const $10=, 1 + copy_local $11=, $3 +.LBB2_19: # %for.body.i88 + # Parent Loop BB2_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label20: + copy_local $push75=, $10 + tee_local $push74=, $1=, $pop75 + i32.const $push73=, 1 + i32.add $10=, $pop74, $pop73 + i32.const $push72=, 1 + i32.add $2=, $2, $pop72 + i32.const $push71=, 1 + i32.shr_u $push70=, $11, $pop71 + tee_local $push69=, $11=, $pop70 + br_if 0, $pop69 # 0: up to label20 +# BB#20: # %for.end.i90 + # in Loop: Header=BB2_1 Depth=1 + end_loop + i32.const $push76=, 1 + i32.lt_s $push14=, $2, $pop76 + br_if 0, $pop14 # 0: down to label9 +# BB#21: # %for.body4.i100.preheader + # in Loop: Header=BB2_1 Depth=1 + copy_local $12=, $14 +.LBB2_22: # %for.body4.i100 + # Parent Loop BB2_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label21: + i64.mul $push15=, $12, $12 + i64.rem_u $12=, $pop15, $0 + block + i32.const $push78=, 1 + i32.const $push77=, -2 + i32.add $push16=, $1, $pop77 + i32.shl $push17=, $pop78, $pop16 + i32.and $push18=, $pop17, $3 + i32.eqz $push107=, $pop18 + br_if 0, $pop107 # 0: down to label22 +# BB#23: # %if.then5.i103 + # in Loop: Header=BB2_22 Depth=2 + i64.mul $push19=, $12, $14 + i64.rem_u $12=, $pop19, $0 +.LBB2_24: # %for.inc9.i106 + # in Loop: Header=BB2_22 Depth=2 + end_block # label22: + i32.const $push82=, -1 + i32.add $push81=, $1, $pop82 + tee_local $push80=, $1=, $pop81 + i32.const $push79=, 1 + i32.gt_s $push20=, $pop80, $pop79 + br_if 0, $pop20 # 0: up to label21 +# BB#25: # in Loop: Header=BB2_1 Depth=1 + end_loop + copy_local $14=, $12 +.LBB2_26: # %powmod_ll.exit108 + # in Loop: Header=BB2_1 Depth=1 + end_block # label9: + block + i64.add $push86=, $14, $4 + tee_local $push85=, $9=, $pop86 + i64.sub $push23=, $13, $pop85 + i64.sub $push22=, $9, $13 + i64.gt_u $push21=, $13, $9 + i64.select $push24=, $pop23, $pop22, $pop21 + i64.const $push84=, 4294967295 + i64.and $push25=, $pop24, $pop84 + i64.const $push83=, 4294967295 + i64.and $push26=, $8, $pop83 + i64.mul $push27=, $pop25, $pop26 + i64.rem_u $8=, $pop27, $0 + block + i32.ne $push28=, $6, $16 + br_if 0, $pop28 # 0: down to label24 +# BB#27: # %if.then18 + # in Loop: Header=BB2_1 Depth=1 + i64.const $push88=, 4294967295 + i64.and $12=, $8, $pop88 + i32.const $push87=, 1 + i32.add $17=, $17, $pop87 + block + i64.eqz $push29=, $0 + br_if 0, $pop29 # 0: down to label25 +# BB#28: # %if.end.i.preheader + # in Loop: Header=BB2_1 Depth=1 + copy_local $14=, $0 +.LBB2_29: # %if.end.i + # Parent Loop BB2_1 Depth=1 + # => This Inner Loop Header: Depth=2 + block + loop # label27: + i64.rem_u $push90=, $12, $14 + tee_local $push89=, $12=, $pop90 + i64.eqz $push30=, $pop89 + br_if 1, $pop30 # 1: down to label26 +# BB#30: # %if.end5.i + # in Loop: Header=BB2_29 Depth=2 + i64.rem_u $push93=, $14, $12 + tee_local $push92=, $14=, $pop93 + i64.const $push91=, 0 + i64.ne $push31=, $pop92, $pop91 + br_if 0, $pop31 # 0: up to label27 + br 2 # 2: down to label25 +.LBB2_31: # in Loop: Header=BB2_1 Depth=1 + end_loop + end_block # label26: + copy_local $12=, $14 +.LBB2_32: # %gcd_ll.exit + # in Loop: Header=BB2_1 Depth=1 + end_block # label25: + i32.add $16=, $17, $16 + i32.wrap/i64 $push96=, $12 + tee_local $push95=, $1=, $pop96 + i32.const $push94=, 1 + i32.eq $push32=, $pop95, $pop94 + br_if 0, $pop32 # 0: down to label24 +# BB#33: # %if.then25 + # in Loop: Header=BB2_1 Depth=1 + i32.store 0($15), $1 + i64.const $push100=, 4294967295 + i64.and $push33=, $12, $pop100 + i64.div_u $push99=, $0, $pop33 + tee_local $push98=, $0=, $pop99 + i64.const $push97=, 1 + i64.eq $push34=, $pop98, $pop97 + br_if 1, $pop34 # 1: down to label23 +# BB#34: # in Loop: Header=BB2_1 Depth=1 + i32.const $push101=, 4 + i32.add $15=, $15, $pop101 +.LBB2_35: # %for.inc + # in Loop: Header=BB2_1 Depth=1 + end_block # label24: + i32.const $push103=, 1 + i32.add $1=, $6, $pop103 + i32.const $push102=, 9999 + i32.lt_u $push35=, $6, $pop102 + br_if 1, $pop35 # 1: up to label8 +.LBB2_36: # %cleanup + end_block # label23: + end_loop + # fallthrough-return + .endfunc +.Lfunc_end2: + .size facts, .Lfunc_end2-facts + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i64.const $push5=, 134217727 + i32.const $push4=, -1 + i32.const $push3=, 3 + i32.const $push2=, 27 + call facts@FUNCTION, $pop5, $pop4, $pop3, $pop2 + block + i32.const $push14=, 0 + i32.load $push6=, factab($pop14) + i32.const $push7=, 7 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label28 +# BB#1: # %entry + i32.const $push15=, 0 + i32.load $push0=, factab+4($pop15) + i32.const $push9=, 73 + i32.ne $push10=, $pop0, $pop9 + br_if 0, $pop10 # 0: down to label28 +# BB#2: # %entry + i32.const $push16=, 0 + i32.load $push1=, factab+8($pop16) + i32.const $push11=, 262657 + i32.ne $push12=, $pop1, $pop11 + br_if 0, $pop12 # 0: down to label28 +# BB#3: # %if.end + i32.const $push13=, 0 + call exit@FUNCTION, $pop13 + unreachable +.LBB3_4: # %if.then + end_block # label28: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden factab # @factab + .type factab,@object + .section .bss.factab,"aw",@nobits + .globl factab + .p2align 4 +factab: + .skip 40 + .size factab, 40 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920501-6.c.s b/src/binaryen/test/torture-s/920501-6.c.s new file mode 100644 index 0000000000..5ab254caba --- /dev/null +++ b/src/binaryen/test/torture-s/920501-6.c.s @@ -0,0 +1,374 @@ + .text + .file "920501-6.c" + .section .text.str2llu,"ax",@progbits + .hidden str2llu # -- Begin function str2llu + .globl str2llu + .type str2llu,@function +str2llu: # @str2llu + .param i32 + .result i64 + .local i32, i64 +# BB#0: # %entry + i64.load8_s $push1=, 0($0) + i64.const $push10=, -48 + i64.add $2=, $pop1, $pop10 + block + i32.load8_u $push9=, 1($0) + tee_local $push8=, $1=, $pop9 + i32.eqz $push16=, $pop8 + br_if 0, $pop16 # 0: down to label0 +# BB#1: # %if.end.preheader + i32.const $push2=, 2 + i32.add $0=, $0, $pop2 +.LBB0_2: # %if.end + # =>This Inner Loop Header: Depth=1 + loop # label1: + i64.const $push15=, 10 + i64.mul $push3=, $2, $pop15 + i64.extend_u/i32 $push4=, $1 + i64.const $push14=, 56 + i64.shl $push5=, $pop4, $pop14 + i64.const $push13=, 56 + i64.shr_s $push6=, $pop5, $pop13 + i64.add $push7=, $pop3, $pop6 + i64.const $push12=, -48 + i64.add $2=, $pop7, $pop12 + i32.load8_u $1=, 0($0) + i32.const $push11=, 1 + i32.add $push0=, $0, $pop11 + copy_local $0=, $pop0 + br_if 0, $1 # 0: up to label1 +.LBB0_3: # %for.end + end_loop + end_block # label0: + copy_local $push17=, $2 + # fallthrough-return: $pop17 + .endfunc +.Lfunc_end0: + .size str2llu, .Lfunc_end0-str2llu + # -- End function + .section .text.sqrtllu,"ax",@progbits + .hidden sqrtllu # -- Begin function sqrtllu + .globl sqrtllu + .type sqrtllu,@function +sqrtllu: # @sqrtllu + .param i64 + .result i32 + .local i64, i64 +# BB#0: # %entry + copy_local $1=, $0 + i64.const $2=, 0 +.LBB1_1: # %for.cond + # =>This Inner Loop Header: Depth=1 + loop # label2: + i64.const $push14=, 1 + i64.add $2=, $2, $pop14 + i64.const $push13=, 1 + i64.shr_u $push12=, $1, $pop13 + tee_local $push11=, $1=, $pop12 + i64.const $push10=, 0 + i64.ne $push0=, $pop11, $pop10 + br_if 0, $pop0 # 0: up to label2 +# BB#2: # %for.end + end_loop + i64.const $push2=, 0 + i64.const $push20=, 1 + i64.and $push1=, $2, $pop20 + i64.sub $push3=, $pop2, $pop1 + i64.const $push19=, 1 + i64.const $push18=, 1 + i64.shr_u $push4=, $2, $pop18 + i64.shl $push17=, $pop19, $pop4 + tee_local $push16=, $2=, $pop17 + i64.const $push15=, 1 + i64.shr_u $push5=, $pop16, $pop15 + i64.and $push6=, $pop3, $pop5 + i64.add $2=, $pop6, $2 +.LBB1_3: # %do.body + # =>This Inner Loop Header: Depth=1 + loop # label3: + i64.div_u $push25=, $0, $2 + tee_local $push24=, $1=, $pop25 + i64.add $push7=, $1, $2 + i64.const $push23=, 1 + i64.shr_u $push22=, $pop7, $pop23 + tee_local $push21=, $2=, $pop22 + i64.lt_u $push8=, $pop24, $pop21 + br_if 0, $pop8 # 0: up to label3 +# BB#4: # %do.end + end_loop + i32.wrap/i64 $push9=, $2 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end1: + .size sqrtllu, .Lfunc_end1-sqrtllu + # -- End function + .section .text.plist,"ax",@progbits + .hidden plist # -- Begin function plist + .globl plist + .type plist,@function +plist: # @plist + .param i64, i64, i32 + .result i32 + .local i32, i32, i64, i64, i32 +# BB#0: # %entry + copy_local $4=, $2 + block + i64.gt_u $push0=, $0, $1 + br_if 0, $pop0 # 0: down to label4 +# BB#1: # %for.body.preheader + copy_local $4=, $2 +.LBB2_2: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB2_3 Depth 2 + # Child Loop BB2_5 Depth 2 + # Child Loop BB2_8 Depth 2 + loop # label5: + copy_local $5=, $0 + i64.const $6=, 0 +.LBB2_3: # %for.cond.i + # Parent Loop BB2_2 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label6: + i64.const $push23=, 1 + i64.add $6=, $6, $pop23 + i64.const $push22=, 1 + i64.shr_u $push21=, $5, $pop22 + tee_local $push20=, $5=, $pop21 + i64.const $push19=, 0 + i64.ne $push1=, $pop20, $pop19 + br_if 0, $pop1 # 0: up to label6 +# BB#4: # %for.end.i + # in Loop: Header=BB2_2 Depth=1 + end_loop + i64.const $push30=, 0 + i64.const $push29=, 1 + i64.and $push2=, $6, $pop29 + i64.sub $push3=, $pop30, $pop2 + i64.const $push28=, 1 + i64.const $push27=, 1 + i64.shr_u $push4=, $6, $pop27 + i64.shl $push26=, $pop28, $pop4 + tee_local $push25=, $6=, $pop26 + i64.const $push24=, 1 + i64.shr_u $push5=, $pop25, $pop24 + i64.and $push6=, $pop3, $pop5 + i64.add $6=, $pop6, $6 +.LBB2_5: # %do.body.i + # Parent Loop BB2_2 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label7: + i64.div_u $push35=, $0, $6 + tee_local $push34=, $5=, $pop35 + i64.add $push7=, $5, $6 + i64.const $push33=, 1 + i64.shr_u $push32=, $pop7, $pop33 + tee_local $push31=, $6=, $pop32 + i64.lt_u $push8=, $pop34, $pop31 + br_if 0, $pop8 # 0: up to label7 +# BB#6: # %sqrtllu.exit + # in Loop: Header=BB2_2 Depth=1 + end_loop + block + block + i32.wrap/i64 $push38=, $6 + tee_local $push37=, $3=, $pop38 + i32.const $push36=, 3 + i32.lt_u $push9=, $pop37, $pop36 + br_if 0, $pop9 # 0: down to label9 +# BB#7: # %for.body3.preheader + # in Loop: Header=BB2_2 Depth=1 + i32.const $7=, 3 +.LBB2_8: # %for.body3 + # Parent Loop BB2_2 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label10: + i64.extend_u/i32 $push10=, $7 + i64.rem_u $push11=, $0, $pop10 + i64.eqz $push12=, $pop11 + br_if 2, $pop12 # 2: down to label8 +# BB#9: # %for.cond1 + # in Loop: Header=BB2_8 Depth=2 + i32.const $push41=, 2 + i32.add $push40=, $7, $pop41 + tee_local $push39=, $7=, $pop40 + i32.le_u $push13=, $pop39, $3 + br_if 0, $pop13 # 0: up to label10 +.LBB2_10: # %for.end + # in Loop: Header=BB2_2 Depth=1 + end_loop + end_block # label9: + i64.store 0($4), $0 + i32.const $push42=, 8 + i32.add $4=, $4, $pop42 +.LBB2_11: # %for.inc6 + # in Loop: Header=BB2_2 Depth=1 + end_block # label8: + i64.const $push45=, 2 + i64.add $push44=, $0, $pop45 + tee_local $push43=, $0=, $pop44 + i64.le_u $push14=, $pop43, $1 + br_if 0, $pop14 # 0: up to label5 +.LBB2_12: # %for.end8 + end_loop + end_block # label4: + i64.const $push15=, 0 + i64.store 0($4), $pop15 + i32.sub $push16=, $4, $2 + i32.const $push17=, 3 + i32.shr_s $push18=, $pop16, $pop17 + # fallthrough-return: $pop18 + .endfunc +.Lfunc_end2: + .size plist, .Lfunc_end2-plist + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 + .local i32, i32, i64, i64, i64, i32, i32 +# BB#0: # %for.body.lr.ph.i + i32.const $push30=, 0 + i32.const $push28=, 0 + i32.load $push27=, __stack_pointer($pop28) + i32.const $push29=, 80 + i32.sub $push32=, $pop27, $pop29 + tee_local $push31=, $8=, $pop32 + i32.store __stack_pointer($pop30), $pop31 + i64.const $4=, 1234111111 + copy_local $3=, $8 +.LBB3_1: # %for.body.i + # =>This Loop Header: Depth=1 + # Child Loop BB3_2 Depth 2 + # Child Loop BB3_4 Depth 2 + # Child Loop BB3_7 Depth 2 + loop # label11: + copy_local $5=, $4 + i64.const $6=, 0 +.LBB3_2: # %for.cond.i.i + # Parent Loop BB3_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label12: + i64.const $push37=, 1 + i64.add $6=, $6, $pop37 + i64.const $push36=, 1 + i64.shr_u $push35=, $5, $pop36 + tee_local $push34=, $5=, $pop35 + i64.const $push33=, 0 + i64.ne $push0=, $pop34, $pop33 + br_if 0, $pop0 # 0: up to label12 +# BB#3: # %for.end.i.i + # in Loop: Header=BB3_1 Depth=1 + end_loop + i64.const $push44=, 0 + i64.const $push43=, 1 + i64.and $push1=, $6, $pop43 + i64.sub $push2=, $pop44, $pop1 + i64.const $push42=, 1 + i64.const $push41=, 1 + i64.shr_u $push3=, $6, $pop41 + i64.shl $push40=, $pop42, $pop3 + tee_local $push39=, $6=, $pop40 + i64.const $push38=, 1 + i64.shr_u $push4=, $pop39, $pop38 + i64.and $push5=, $pop2, $pop4 + i64.add $6=, $pop5, $6 +.LBB3_4: # %do.body.i.i + # Parent Loop BB3_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label13: + i64.div_u $push49=, $4, $6 + tee_local $push48=, $5=, $pop49 + i64.add $push6=, $5, $6 + i64.const $push47=, 1 + i64.shr_u $push46=, $pop6, $pop47 + tee_local $push45=, $6=, $pop46 + i64.lt_u $push7=, $pop48, $pop45 + br_if 0, $pop7 # 0: up to label13 +# BB#5: # %sqrtllu.exit.i + # in Loop: Header=BB3_1 Depth=1 + end_loop + block + block + i32.wrap/i64 $push52=, $6 + tee_local $push51=, $2=, $pop52 + i32.const $push50=, 3 + i32.lt_u $push8=, $pop51, $pop50 + br_if 0, $pop8 # 0: down to label15 +# BB#6: # %for.body3.i.preheader + # in Loop: Header=BB3_1 Depth=1 + i32.const $7=, 3 +.LBB3_7: # %for.body3.i + # Parent Loop BB3_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label16: + i64.extend_u/i32 $push9=, $7 + i64.rem_u $push10=, $4, $pop9 + i64.eqz $push11=, $pop10 + br_if 2, $pop11 # 2: down to label14 +# BB#8: # %for.cond1.i + # in Loop: Header=BB3_7 Depth=2 + i32.const $push55=, 2 + i32.add $push54=, $7, $pop55 + tee_local $push53=, $7=, $pop54 + i32.le_u $push12=, $pop53, $2 + br_if 0, $pop12 # 0: up to label16 +.LBB3_9: # %for.end.i + # in Loop: Header=BB3_1 Depth=1 + end_loop + end_block # label15: + i64.store 0($3), $4 + i32.const $push56=, 8 + i32.add $3=, $3, $pop56 +.LBB3_10: # %for.inc6.i + # in Loop: Header=BB3_1 Depth=1 + end_block # label14: + i64.const $push60=, 2 + i64.add $push59=, $4, $pop60 + tee_local $push58=, $4=, $pop59 + i64.const $push57=, 1234111128 + i64.lt_u $push13=, $pop58, $pop57 + br_if 0, $pop13 # 0: up to label11 +# BB#11: # %plist.exit + end_loop + i64.const $push14=, 0 + i64.store 0($3), $pop14 + block + i64.load $push16=, 0($8) + i64.const $push15=, 1234111117 + i64.ne $push17=, $pop16, $pop15 + br_if 0, $pop17 # 0: down to label17 +# BB#12: # %lor.lhs.false + i64.load $push19=, 8($8) + i64.const $push18=, 1234111121 + i64.ne $push20=, $pop19, $pop18 + br_if 0, $pop20 # 0: down to label17 +# BB#13: # %lor.lhs.false5 + i64.load $push22=, 16($8) + i64.const $push21=, 1234111127 + i64.ne $push23=, $pop22, $pop21 + br_if 0, $pop23 # 0: down to label17 +# BB#14: # %lor.lhs.false8 + i64.load $push24=, 24($8) + i64.eqz $push25=, $pop24 + i32.eqz $push61=, $pop25 + br_if 0, $pop61 # 0: down to label17 +# BB#15: # %if.end + i32.const $push26=, 0 + call exit@FUNCTION, $pop26 + unreachable +.LBB3_16: # %if.then + end_block # label17: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920501-8.c.s b/src/binaryen/test/torture-s/920501-8.c.s new file mode 100644 index 0000000000..5679cb2b29 --- /dev/null +++ b/src/binaryen/test/torture-s/920501-8.c.s @@ -0,0 +1,154 @@ + .text + .file "920501-8.c" + .section .text.va,"ax",@progbits + .hidden va # -- Begin function va + .globl va + .type va,@function +va: # @va + .param i32, f64, i32, i32 + .result i32 + .local i32, i64, i64, i64, i64, i64, i32 +# BB#0: # %entry + i32.const $push23=, 0 + i32.const $push21=, 0 + i32.load $push20=, __stack_pointer($pop21) + i32.const $push22=, 80 + i32.sub $push29=, $pop20, $pop22 + tee_local $push28=, $10=, $pop29 + i32.store __stack_pointer($pop23), $pop28 + i32.store 76($10), $3 + i32.load $4=, 48($3) + i64.load $5=, 8($3):p2align=2 + i64.load $6=, 16($3):p2align=2 + i64.load $7=, 24($3):p2align=2 + i64.load $8=, 32($3):p2align=2 + i64.load $9=, 40($3):p2align=2 + i32.const $push1=, 20 + i32.add $push2=, $10, $pop1 + i64.load $push0=, 0($3):p2align=2 + i64.store 0($pop2):p2align=2, $pop0 + i32.const $push3=, 60 + i32.add $push4=, $10, $pop3 + i64.store 0($pop4):p2align=2, $9 + i32.const $push5=, 52 + i32.add $push6=, $10, $pop5 + i64.store 0($pop6):p2align=2, $8 + i32.const $push7=, 44 + i32.add $push8=, $10, $pop7 + i64.store 0($pop8):p2align=2, $7 + i32.const $push9=, 36 + i32.add $push10=, $10, $pop9 + i64.store 0($pop10):p2align=2, $6 + i32.const $push11=, 28 + i32.add $push12=, $10, $pop11 + i64.store 0($pop12):p2align=2, $5 + i32.const $push13=, 16 + i32.add $push14=, $10, $pop13 + i32.store 0($pop14), $2 + i32.const $push15=, 68 + i32.add $push16=, $10, $pop15 + i32.store 0($pop16), $4 + f64.store 8($10), $1 + i32.store 0($10), $0 + i32.const $push27=, 52 + i32.add $push17=, $3, $pop27 + i32.store 76($10), $pop17 + i32.const $push19=, buf + i32.const $push18=, .L.str + i32.call $drop=, sprintf@FUNCTION, $pop19, $pop18, $10 + i32.const $push26=, 0 + i32.const $push24=, 80 + i32.add $push25=, $10, $pop24 + i32.store __stack_pointer($pop26), $pop25 + copy_local $push30=, $10 + # fallthrough-return: $pop30 + .endfunc +.Lfunc_end0: + .size va, .Lfunc_end0-va + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push27=, 0 + i32.const $push25=, 0 + i32.load $push24=, __stack_pointer($pop25) + i32.const $push26=, 64 + i32.sub $push29=, $pop24, $pop26 + tee_local $push28=, $0=, $pop29 + i32.store __stack_pointer($pop27), $pop28 + i32.const $push0=, 48 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 15 + i32.store 0($pop1), $pop2 + i32.const $push3=, 40 + i32.add $push4=, $0, $pop3 + i64.const $push5=, 60129542157 + i64.store 0($pop4), $pop5 + i32.const $push6=, 32 + i32.add $push7=, $0, $pop6 + i64.const $push8=, 51539607563 + i64.store 0($pop7), $pop8 + i32.const $push9=, 24 + i32.add $push10=, $0, $pop9 + i64.const $push11=, 42949672969 + i64.store 0($pop10), $pop11 + i32.const $push12=, 16 + i32.add $push13=, $0, $pop12 + i64.const $push14=, 34359738375 + i64.store 0($pop13), $pop14 + i64.const $push15=, 25769803781 + i64.store 8($0), $pop15 + i64.const $push16=, 17179869187 + i64.store 0($0), $pop16 + i32.const $push19=, 1 + f64.const $push18=, 0x1p0 + i32.const $push17=, 2 + i32.call $drop=, va@FUNCTION, $pop19, $pop18, $pop17, $0 + block + i32.const $push21=, .L.str.1 + i32.const $push20=, buf + i32.call $push22=, strcmp@FUNCTION, $pop21, $pop20 + br_if 0, $pop22 # 0: down to label0 +# BB#1: # %if.end + i32.const $push23=, 0 + call exit@FUNCTION, $pop23 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden buf # @buf + .type buf,@object + .section .bss.buf,"aw",@nobits + .globl buf + .p2align 4 +buf: + .skip 50 + .size buf, 50 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "%d,%f,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d" + .size .L.str, 48 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "1,1.000000,2,3,4,5,6,7,8,9,10,11,12,13,14,15" + .size .L.str.1, 45 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype sprintf, i32, i32, i32 + .functype strcmp, i32, i32, i32 + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920501-9.c.s b/src/binaryen/test/torture-s/920501-9.c.s new file mode 100644 index 0000000000..d82709b022 --- /dev/null +++ b/src/binaryen/test/torture-s/920501-9.c.s @@ -0,0 +1,254 @@ + .text + .file "920501-9.c" + .section .text.proc1,"ax",@progbits + .hidden proc1 # -- Begin function proc1 + .globl proc1 + .type proc1,@function +proc1: # @proc1 + .result i64 +# BB#0: # %entry + i64.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size proc1, .Lfunc_end0-proc1 + # -- End function + .section .text.proc2,"ax",@progbits + .hidden proc2 # -- Begin function proc2 + .globl proc2 + .type proc2,@function +proc2: # @proc2 + .result i64 +# BB#0: # %entry + i64.const $push0=, 305419896 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size proc2, .Lfunc_end1-proc2 + # -- End function + .section .text.proc3,"ax",@progbits + .hidden proc3 # -- Begin function proc3 + .globl proc3 + .type proc3,@function +proc3: # @proc3 + .result i64 +# BB#0: # %entry + i64.const $push0=, -6144092016751651208 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size proc3, .Lfunc_end2-proc3 + # -- End function + .section .text.proc4,"ax",@progbits + .hidden proc4 # -- Begin function proc4 + .globl proc4 + .type proc4,@function +proc4: # @proc4 + .result i64 +# BB#0: # %entry + i64.const $push0=, -1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size proc4, .Lfunc_end3-proc4 + # -- End function + .section .text.proc5,"ax",@progbits + .hidden proc5 # -- Begin function proc5 + .globl proc5 + .type proc5,@function +proc5: # @proc5 + .result i64 +# BB#0: # %entry + i64.const $push0=, 2864434397 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size proc5, .Lfunc_end4-proc5 + # -- End function + .section .text.print_longlong,"ax",@progbits + .hidden print_longlong # -- Begin function print_longlong + .globl print_longlong + .type print_longlong,@function +print_longlong: # @print_longlong + .param i64, i32 + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 32 + i32.sub $push16=, $pop4, $pop6 + tee_local $push15=, $4=, $pop16 + i32.store __stack_pointer($pop7), $pop15 + i32.wrap/i64 $3=, $0 + block + block + i64.const $push0=, 32 + i64.shr_u $push1=, $0, $pop0 + i32.wrap/i64 $push14=, $pop1 + tee_local $push13=, $2=, $pop14 + i32.eqz $push17=, $pop13 + br_if 0, $pop17 # 0: down to label1 +# BB#1: # %if.then + i32.store 20($4), $3 + i32.store 16($4), $2 + i32.const $push2=, .L.str + i32.const $push11=, 16 + i32.add $push12=, $4, $pop11 + i32.call $drop=, sprintf@FUNCTION, $1, $pop2, $pop12 + br 1 # 1: down to label0 +.LBB5_2: # %if.else + end_block # label1: + i32.store 0($4), $3 + i32.const $push3=, .L.str.1 + i32.call $drop=, sprintf@FUNCTION, $1, $pop3, $4 +.LBB5_3: # %if.end + end_block # label0: + i32.const $push10=, 0 + i32.const $push8=, 32 + i32.add $push9=, $4, $pop8 + i32.store __stack_pointer($pop10), $pop9 + copy_local $push18=, $4 + # fallthrough-return: $pop18 + .endfunc +.Lfunc_end5: + .size print_longlong, .Lfunc_end5-print_longlong + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push20=, 0 + i32.const $push18=, 0 + i32.load $push17=, __stack_pointer($pop18) + i32.const $push19=, 192 + i32.sub $push51=, $pop17, $pop19 + tee_local $push50=, $0=, $pop51 + i32.store __stack_pointer($pop20), $pop50 + i32.const $push0=, 1 + i32.store 64($0), $pop0 + i32.const $push21=, 80 + i32.add $push22=, $0, $pop21 + i32.const $push49=, .L.str.1 + i32.const $push23=, 64 + i32.add $push24=, $0, $pop23 + i32.call $drop=, sprintf@FUNCTION, $pop22, $pop49, $pop24 + block + i32.const $push1=, .L.str.2 + i32.const $push25=, 80 + i32.add $push26=, $0, $pop25 + i32.call $push2=, strcmp@FUNCTION, $pop1, $pop26 + br_if 0, $pop2 # 0: down to label2 +# BB#1: # %if.end + i32.const $push3=, 305419896 + i32.store 48($0), $pop3 + i32.const $push27=, 80 + i32.add $push28=, $0, $pop27 + i32.const $push52=, .L.str.1 + i32.const $push29=, 48 + i32.add $push30=, $0, $pop29 + i32.call $drop=, sprintf@FUNCTION, $pop28, $pop52, $pop30 + i32.const $push4=, .L.str.3 + i32.const $push31=, 80 + i32.add $push32=, $0, $pop31 + i32.call $push5=, strcmp@FUNCTION, $pop4, $pop32 + br_if 0, $pop5 # 0: down to label2 +# BB#2: # %if.end11 + i64.const $push6=, 1311768467732155613 + i64.store 32($0), $pop6 + i32.const $push33=, 80 + i32.add $push34=, $0, $pop33 + i32.const $push53=, .L.str + i32.const $push35=, 32 + i32.add $push36=, $0, $pop35 + i32.call $drop=, sprintf@FUNCTION, $pop34, $pop53, $pop36 + i32.const $push7=, .L.str.4 + i32.const $push37=, 80 + i32.add $push38=, $0, $pop37 + i32.call $push8=, strcmp@FUNCTION, $pop7, $pop38 + br_if 0, $pop8 # 0: down to label2 +# BB#3: # %if.end19 + i64.const $push9=, -1 + i64.store 16($0), $pop9 + i32.const $push39=, 80 + i32.add $push40=, $0, $pop39 + i32.const $push54=, .L.str + i32.const $push41=, 16 + i32.add $push42=, $0, $pop41 + i32.call $drop=, sprintf@FUNCTION, $pop40, $pop54, $pop42 + i32.const $push10=, .L.str.5 + i32.const $push43=, 80 + i32.add $push44=, $0, $pop43 + i32.call $push11=, strcmp@FUNCTION, $pop10, $pop44 + br_if 0, $pop11 # 0: down to label2 +# BB#4: # %if.end27 + i32.const $push12=, -1430532899 + i32.store 0($0), $pop12 + i32.const $push45=, 80 + i32.add $push46=, $0, $pop45 + i32.const $push13=, .L.str.1 + i32.call $drop=, sprintf@FUNCTION, $pop46, $pop13, $0 + i32.const $push14=, .L.str.6 + i32.const $push47=, 80 + i32.add $push48=, $0, $pop47 + i32.call $push15=, strcmp@FUNCTION, $pop14, $pop48 + br_if 0, $pop15 # 0: down to label2 +# BB#5: # %if.end35 + i32.const $push16=, 0 + call exit@FUNCTION, $pop16 + unreachable +.LBB6_6: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end6: + .size main, .Lfunc_end6-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "%lx%08.lx" + .size .L.str, 10 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "%lx" + .size .L.str.1, 4 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "1" + .size .L.str.2, 2 + + .type .L.str.3,@object # @.str.3 +.L.str.3: + .asciz "12345678" + .size .L.str.3, 9 + + .type .L.str.4,@object # @.str.4 +.L.str.4: + .asciz "aabbccdd12345678" + .size .L.str.4, 17 + + .type .L.str.5,@object # @.str.5 +.L.str.5: + .asciz "ffffffffffffffff" + .size .L.str.5, 17 + + .type .L.str.6,@object # @.str.6 +.L.str.6: + .asciz "aabbccdd" + .size .L.str.6, 9 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype sprintf, i32, i32, i32 + .functype strcmp, i32, i32, i32 + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920506-1.c.s b/src/binaryen/test/torture-s/920506-1.c.s new file mode 100644 index 0000000000..bf228a3d98 --- /dev/null +++ b/src/binaryen/test/torture-s/920506-1.c.s @@ -0,0 +1,39 @@ + .text + .file "920506-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push1=, 0 + i32.load $push0=, l($pop1) + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %sw.bb + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable +.LBB0_2: # %sw.epilog + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden l # @l + .type l,@object + .section .data.l,"aw",@progbits + .globl l + .p2align 2 +l: + .int32 0 # 0x0 + .int32 1 # 0x1 + .size l, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/920520-1.c.s b/src/binaryen/test/torture-s/920520-1.c.s new file mode 100644 index 0000000000..796d590dcf --- /dev/null +++ b/src/binaryen/test/torture-s/920520-1.c.s @@ -0,0 +1,48 @@ + .text + .file "920520-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 8 + i32.store 0($0), $pop0 + copy_local $push1=, $0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bugger,"ax",@progbits + .hidden bugger # -- Begin function bugger + .globl bugger + .type bugger,@function +bugger: # @bugger + .result i32 +# BB#0: # %sw.epilog + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size bugger, .Lfunc_end1-bugger + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920603-1.c.s b/src/binaryen/test/torture-s/920603-1.c.s new file mode 100644 index 0000000000..9ae38eb736 --- /dev/null +++ b/src/binaryen/test/torture-s/920603-1.c.s @@ -0,0 +1,42 @@ + .text + .file "920603-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 65535 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return $0 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920604-1.c.s b/src/binaryen/test/torture-s/920604-1.c.s new file mode 100644 index 0000000000..f6a597811b --- /dev/null +++ b/src/binaryen/test/torture-s/920604-1.c.s @@ -0,0 +1,33 @@ + .text + .file "920604-1.c" + .section .text.mod,"ax",@progbits + .hidden mod # -- Begin function mod + .globl mod + .type mod,@function +mod: # @mod + .param i64, i64 + .result i64 +# BB#0: # %entry + i64.rem_s $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size mod, .Lfunc_end0-mod + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920612-1.c.s b/src/binaryen/test/torture-s/920612-1.c.s new file mode 100644 index 0000000000..7dc8a6fe1a --- /dev/null +++ b/src/binaryen/test/torture-s/920612-1.c.s @@ -0,0 +1,35 @@ + .text + .file "920612-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.shr_u $push1=, $0, $pop0 + i32.const $push2=, 1 + i32.xor $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.then + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/920618-1.c.s b/src/binaryen/test/torture-s/920618-1.c.s new file mode 100644 index 0000000000..04062f4fe0 --- /dev/null +++ b/src/binaryen/test/torture-s/920618-1.c.s @@ -0,0 +1,19 @@ + .text + .file "920618-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920625-1.c.s b/src/binaryen/test/torture-s/920625-1.c.s new file mode 100644 index 0000000000..4192ec9a84 --- /dev/null +++ b/src/binaryen/test/torture-s/920625-1.c.s @@ -0,0 +1,333 @@ + .text + .file "920625-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push21=, 0 + i32.const $push19=, 0 + i32.load $push18=, __stack_pointer($pop19) + i32.const $push20=, 128 + i32.sub $push64=, $pop18, $pop20 + tee_local $push63=, $0=, $pop64 + i32.store __stack_pointer($pop21), $pop63 + i32.const $push22=, 112 + i32.add $push23=, $0, $pop22 + i32.const $push2=, 8 + i32.add $push3=, $pop23, $pop2 + i32.const $push0=, 0 + i64.load $push1=, pts+8($pop0) + i64.store 0($pop3), $pop1 + i32.const $push24=, 96 + i32.add $push25=, $0, $pop24 + i32.const $push62=, 8 + i32.add $push5=, $pop25, $pop62 + i32.const $push61=, 0 + i64.load $push4=, pts+24($pop61) + i64.store 0($pop5), $pop4 + i32.const $push26=, 80 + i32.add $push27=, $0, $pop26 + i32.const $push60=, 8 + i32.add $push7=, $pop27, $pop60 + i32.const $push59=, 0 + i64.load $push6=, pts+40($pop59) + i64.store 0($pop7), $pop6 + i32.const $push28=, 64 + i32.add $push29=, $0, $pop28 + i32.const $push58=, 8 + i32.add $push9=, $pop29, $pop58 + i32.const $push57=, 0 + i64.load $push8=, pts+56($pop57) + i64.store 0($pop9), $pop8 + i32.const $push56=, 0 + i64.load $push10=, pts($pop56) + i64.store 112($0), $pop10 + i32.const $push55=, 0 + i64.load $push11=, pts+16($pop55) + i64.store 96($0), $pop11 + i32.const $push54=, 0 + i64.load $push12=, pts+32($pop54) + i64.store 80($0), $pop12 + i32.const $push53=, 0 + i64.load $push13=, pts+48($pop53) + i64.store 64($0), $pop13 + i32.const $push30=, 64 + i32.add $push31=, $0, $pop30 + i32.store 60($0), $pop31 + i32.const $push32=, 80 + i32.add $push33=, $0, $pop32 + i32.store 56($0), $pop33 + i32.const $push34=, 96 + i32.add $push35=, $0, $pop34 + i32.store 52($0), $pop35 + i32.const $push36=, 112 + i32.add $push37=, $0, $pop36 + i32.store 48($0), $pop37 + i32.const $push38=, 48 + i32.add $push39=, $0, $pop38 + call va1@FUNCTION, $0, $pop39 + i32.const $push52=, 0 + i64.load $push14=, ipts($pop52) + i64.store 40($0), $pop14 + i32.const $push51=, 0 + i64.load $push15=, ipts+8($pop51) + i64.store 32($0), $pop15 + i32.const $push50=, 0 + i64.load $push16=, ipts+16($pop50) + i64.store 24($0), $pop16 + i32.const $push49=, 0 + i64.load $push17=, ipts+24($pop49) + i64.store 16($0), $pop17 + i32.const $push40=, 16 + i32.add $push41=, $0, $pop40 + i32.store 12($0), $pop41 + i32.const $push42=, 24 + i32.add $push43=, $0, $pop42 + i32.store 8($0), $pop43 + i32.const $push44=, 32 + i32.add $push45=, $0, $pop44 + i32.store 4($0), $pop45 + i32.const $push46=, 40 + i32.add $push47=, $0, $pop46 + i32.store 0($0), $pop47 + call va2@FUNCTION, $0, $0 + i32.const $push48=, 0 + call exit@FUNCTION, $pop48 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.va1,"ax",@progbits + .type va1,@function # -- Begin function va1 +va1: # @va1 + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push44=, 0 + i32.const $push42=, 0 + i32.load $push41=, __stack_pointer($pop42) + i32.const $push43=, 16 + i32.sub $push52=, $pop41, $pop43 + tee_local $push51=, $2=, $pop52 + i32.store __stack_pointer($pop44), $pop51 + i32.store 12($2), $1 + i32.const $push0=, 7 + i32.add $push1=, $1, $pop0 + i32.const $push2=, -8 + i32.and $push50=, $pop1, $pop2 + tee_local $push49=, $1=, $pop50 + i32.const $push3=, 16 + i32.add $push4=, $pop49, $pop3 + i32.store 12($2), $pop4 + block + i32.const $push48=, 0 + f64.load $push6=, pts($pop48) + f64.load $push5=, 0($1) + f64.ne $push7=, $pop6, $pop5 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.const $push53=, 0 + f64.load $push9=, pts+8($pop53) + f64.load $push8=, 8($1) + f64.ne $push10=, $pop9, $pop8 + br_if 0, $pop10 # 0: down to label0 +# BB#2: # %for.cond + i32.const $push11=, 32 + i32.add $push12=, $1, $pop11 + i32.store 12($2), $pop12 + i32.const $push54=, 0 + f64.load $push16=, pts+16($pop54) + i32.const $push13=, 16 + i32.add $push14=, $1, $pop13 + f64.load $push15=, 0($pop14) + f64.ne $push17=, $pop16, $pop15 + br_if 0, $pop17 # 0: down to label0 +# BB#3: # %lor.lhs.false.1 + i32.const $push55=, 0 + f64.load $push19=, pts+24($pop55) + f64.load $push18=, 24($1) + f64.ne $push20=, $pop19, $pop18 + br_if 0, $pop20 # 0: down to label0 +# BB#4: # %for.cond.1 + i32.const $push21=, 48 + i32.add $push22=, $1, $pop21 + i32.store 12($2), $pop22 + i32.const $push56=, 0 + f64.load $push26=, pts+32($pop56) + i32.const $push23=, 32 + i32.add $push24=, $1, $pop23 + f64.load $push25=, 0($pop24) + f64.ne $push27=, $pop26, $pop25 + br_if 0, $pop27 # 0: down to label0 +# BB#5: # %lor.lhs.false.2 + i32.const $push57=, 0 + f64.load $push29=, pts+40($pop57) + f64.load $push28=, 40($1) + f64.ne $push30=, $pop29, $pop28 + br_if 0, $pop30 # 0: down to label0 +# BB#6: # %for.cond.2 + i32.const $push31=, 64 + i32.add $push32=, $1, $pop31 + i32.store 12($2), $pop32 + i32.const $push58=, 0 + f64.load $push36=, pts+48($pop58) + i32.const $push33=, 48 + i32.add $push34=, $1, $pop33 + f64.load $push35=, 0($pop34) + f64.ne $push37=, $pop36, $pop35 + br_if 0, $pop37 # 0: down to label0 +# BB#7: # %lor.lhs.false.3 + i32.const $push59=, 0 + f64.load $push39=, pts+56($pop59) + f64.load $push38=, 56($1) + f64.ne $push40=, $pop39, $pop38 + br_if 0, $pop40 # 0: down to label0 +# BB#8: # %for.cond.3 + i32.const $push47=, 0 + i32.const $push45=, 16 + i32.add $push46=, $2, $pop45 + i32.store __stack_pointer($pop47), $pop46 + return +.LBB1_9: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size va1, .Lfunc_end1-va1 + # -- End function + .section .text.va2,"ax",@progbits + .type va2,@function # -- Begin function va2 +va2: # @va2 + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push41=, 0 + i32.const $push39=, 0 + i32.load $push38=, __stack_pointer($pop39) + i32.const $push40=, 16 + i32.sub $push47=, $pop38, $pop40 + tee_local $push46=, $2=, $pop47 + i32.store __stack_pointer($pop41), $pop46 + i32.store 12($2), $1 + i32.const $push0=, 8 + i32.add $push1=, $1, $pop0 + i32.store 12($2), $pop1 + block + i32.const $push45=, 0 + i32.load $push2=, ipts($pop45) + i32.load $push3=, 0($1) + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label1 +# BB#1: # %lor.lhs.false + i32.const $push48=, 0 + i32.load $push6=, ipts+4($pop48) + i32.load $push5=, 4($1) + i32.ne $push7=, $pop6, $pop5 + br_if 0, $pop7 # 0: down to label1 +# BB#2: # %for.cond + i32.const $push8=, 16 + i32.add $push9=, $1, $pop8 + i32.store 12($2), $pop9 + i32.const $push49=, 0 + i32.load $push13=, ipts+8($pop49) + i32.const $push10=, 8 + i32.add $push11=, $1, $pop10 + i32.load $push12=, 0($pop11) + i32.ne $push14=, $pop13, $pop12 + br_if 0, $pop14 # 0: down to label1 +# BB#3: # %lor.lhs.false.1 + i32.const $push50=, 0 + i32.load $push16=, ipts+12($pop50) + i32.load $push15=, 12($1) + i32.ne $push17=, $pop16, $pop15 + br_if 0, $pop17 # 0: down to label1 +# BB#4: # %for.cond.1 + i32.const $push18=, 24 + i32.add $push19=, $1, $pop18 + i32.store 12($2), $pop19 + i32.const $push51=, 0 + i32.load $push23=, ipts+16($pop51) + i32.const $push20=, 16 + i32.add $push21=, $1, $pop20 + i32.load $push22=, 0($pop21) + i32.ne $push24=, $pop23, $pop22 + br_if 0, $pop24 # 0: down to label1 +# BB#5: # %lor.lhs.false.2 + i32.const $push52=, 0 + i32.load $push26=, ipts+20($pop52) + i32.load $push25=, 20($1) + i32.ne $push27=, $pop26, $pop25 + br_if 0, $pop27 # 0: down to label1 +# BB#6: # %for.cond.2 + i32.const $push28=, 32 + i32.add $push29=, $1, $pop28 + i32.store 12($2), $pop29 + i32.const $push53=, 0 + i32.load $push33=, ipts+24($pop53) + i32.const $push30=, 24 + i32.add $push31=, $1, $pop30 + i32.load $push32=, 0($pop31) + i32.ne $push34=, $pop33, $pop32 + br_if 0, $pop34 # 0: down to label1 +# BB#7: # %lor.lhs.false.3 + i32.const $push54=, 0 + i32.load $push36=, ipts+28($pop54) + i32.load $push35=, 28($1) + i32.ne $push37=, $pop36, $pop35 + br_if 0, $pop37 # 0: down to label1 +# BB#8: # %for.cond.3 + i32.const $push44=, 0 + i32.const $push42=, 16 + i32.add $push43=, $2, $pop42 + i32.store __stack_pointer($pop44), $pop43 + return +.LBB2_9: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size va2, .Lfunc_end2-va2 + # -- End function + .hidden pts # @pts + .type pts,@object + .section .data.pts,"aw",@progbits + .globl pts + .p2align 4 +pts: + .int64 4607182418800017408 # double 1 + .int64 4611686018427387904 # double 2 + .int64 4613937818241073152 # double 3 + .int64 4616189618054758400 # double 4 + .int64 4617315517961601024 # double 5 + .int64 4618441417868443648 # double 6 + .int64 4619567317775286272 # double 7 + .int64 4620693217682128896 # double 8 + .size pts, 64 + + .hidden ipts # @ipts + .type ipts,@object + .section .data.ipts,"aw",@progbits + .globl ipts + .p2align 4 +ipts: + .int32 1 # 0x1 + .int32 2 # 0x2 + .int32 3 # 0x3 + .int32 4 # 0x4 + .int32 5 # 0x5 + .int32 6 # 0x6 + .int32 7 # 0x7 + .int32 8 # 0x8 + .size ipts, 32 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/920710-1.c.s b/src/binaryen/test/torture-s/920710-1.c.s new file mode 100644 index 0000000000..7ac085b41c --- /dev/null +++ b/src/binaryen/test/torture-s/920710-1.c.s @@ -0,0 +1,19 @@ + .text + .file "920710-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920711-1.c.s b/src/binaryen/test/torture-s/920711-1.c.s new file mode 100644 index 0000000000..3cded62e42 --- /dev/null +++ b/src/binaryen/test/torture-s/920711-1.c.s @@ -0,0 +1,33 @@ + .text + .file "920711-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.gt_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.then + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/920721-1.c.s b/src/binaryen/test/torture-s/920721-1.c.s new file mode 100644 index 0000000000..08e7dc6403 --- /dev/null +++ b/src/binaryen/test/torture-s/920721-1.c.s @@ -0,0 +1,33 @@ + .text + .file "920721-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.div_s $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.else + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920721-2.c.s b/src/binaryen/test/torture-s/920721-2.c.s new file mode 100644 index 0000000000..9d704d8a73 --- /dev/null +++ b/src/binaryen/test/torture-s/920721-2.c.s @@ -0,0 +1,33 @@ + .text + .file "920721-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920721-3.c.s b/src/binaryen/test/torture-s/920721-3.c.s new file mode 100644 index 0000000000..3707b20703 --- /dev/null +++ b/src/binaryen/test/torture-s/920721-3.c.s @@ -0,0 +1,76 @@ + .text + .file "920721-3.c" + .section .text.ru,"ax",@progbits + .hidden ru # -- Begin function ru + .globl ru + .type ru,@function +ru: # @ru + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push8=, 65535 + i32.and $push0=, $0, $pop8 + i32.const $push1=, 5 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push3=, 2 + i32.add $push4=, $0, $pop3 + i32.const $push9=, 65535 + i32.and $push5=, $pop4, $pop9 + i32.const $push6=, 7 + i32.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#2: # %if.end8 + return $0 +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size ru, .Lfunc_end0-ru + # -- End function + .section .text.rs,"ax",@progbits + .hidden rs # -- Begin function rs + .globl rs + .type rs,@function +rs: # @rs + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 65535 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 5 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %if.end8 + return $0 +.LBB1_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size rs, .Lfunc_end1-rs + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920726-1.c.s b/src/binaryen/test/torture-s/920726-1.c.s new file mode 100644 index 0000000000..80bdbbfe14 --- /dev/null +++ b/src/binaryen/test/torture-s/920726-1.c.s @@ -0,0 +1,220 @@ + .text + .file "920726-1.c" + .section .text.first,"ax",@progbits + .hidden first # -- Begin function first + .globl first + .type first,@function +first: # @first + .param i32, i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push13=, $pop5, $pop7 + tee_local $push12=, $3=, $pop13 + i32.store __stack_pointer($pop8), $pop12 + i32.store 12($3), $2 +.LBB0_1: # %for.cond + # =>This Inner Loop Header: Depth=1 + loop # label0: + block + i32.load8_u $push21=, 0($1) + tee_local $push20=, $2=, $pop21 + i32.const $push19=, 105 + i32.ne $push0=, $pop20, $pop19 + br_if 0, $pop0 # 0: down to label1 +# BB#2: # %if.then + # in Loop: Header=BB0_1 Depth=1 + i32.load $push18=, 12($3) + tee_local $push17=, $2=, $pop18 + i32.const $push16=, 4 + i32.add $push1=, $pop17, $pop16 + i32.store 12($3), $pop1 + i32.load $push2=, 0($2) + i32.store 0($3), $pop2 + i32.const $push15=, .L.str + i32.call $drop=, sprintf@FUNCTION, $0, $pop15, $3 + i32.call $push3=, strlen@FUNCTION, $0 + i32.add $0=, $0, $pop3 + i32.const $push14=, 1 + i32.add $1=, $1, $pop14 + br 1 # 1: up to label0 +.LBB0_3: # %for.cond + # in Loop: Header=BB0_1 Depth=1 + end_block # label1: + block + i32.eqz $push24=, $2 + br_if 0, $pop24 # 0: down to label2 +# BB#4: # %if.else + # in Loop: Header=BB0_1 Depth=1 + i32.store8 0($0), $2 + i32.const $push23=, 1 + i32.add $0=, $0, $pop23 + i32.const $push22=, 1 + i32.add $1=, $1, $pop22 + br 1 # 1: up to label0 +.LBB0_5: # %for.end + end_block # label2: + end_loop + i32.const $push4=, 0 + i32.store8 0($0), $pop4 + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $3, $pop9 + i32.store __stack_pointer($pop11), $pop10 + copy_local $push25=, $0 + # fallthrough-return: $pop25 + .endfunc +.Lfunc_end0: + .size first, .Lfunc_end0-first + # -- End function + .section .text.second,"ax",@progbits + .hidden second # -- Begin function second + .globl second + .type second,@function +second: # @second + .param i32, i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push13=, $pop5, $pop7 + tee_local $push12=, $3=, $pop13 + i32.store __stack_pointer($pop8), $pop12 + i32.store 12($3), $2 +.LBB1_1: # %for.cond + # =>This Inner Loop Header: Depth=1 + loop # label3: + block + i32.load8_u $push21=, 0($1) + tee_local $push20=, $2=, $pop21 + i32.const $push19=, 105 + i32.ne $push0=, $pop20, $pop19 + br_if 0, $pop0 # 0: down to label4 +# BB#2: # %if.then + # in Loop: Header=BB1_1 Depth=1 + i32.load $push18=, 12($3) + tee_local $push17=, $2=, $pop18 + i32.const $push16=, 4 + i32.add $push1=, $pop17, $pop16 + i32.store 12($3), $pop1 + i32.load $push2=, 0($2) + i32.store 0($3), $pop2 + i32.const $push15=, .L.str + i32.call $drop=, sprintf@FUNCTION, $0, $pop15, $3 + i32.call $push3=, strlen@FUNCTION, $0 + i32.add $0=, $0, $pop3 + i32.const $push14=, 1 + i32.add $1=, $1, $pop14 + br 1 # 1: up to label3 +.LBB1_3: # %for.cond + # in Loop: Header=BB1_1 Depth=1 + end_block # label4: + block + i32.eqz $push24=, $2 + br_if 0, $pop24 # 0: down to label5 +# BB#4: # %if.else + # in Loop: Header=BB1_1 Depth=1 + i32.store8 0($0), $2 + i32.const $push23=, 1 + i32.add $0=, $0, $pop23 + i32.const $push22=, 1 + i32.add $1=, $1, $pop22 + br 1 # 1: up to label3 +.LBB1_5: # %for.end + end_block # label5: + end_loop + i32.const $push4=, 0 + i32.store8 0($0), $pop4 + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $3, $pop9 + i32.store __stack_pointer($pop11), $pop10 + copy_local $push25=, $0 + # fallthrough-return: $pop25 + .endfunc +.Lfunc_end1: + .size second, .Lfunc_end1-second + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 256 + i32.sub $push23=, $pop5, $pop7 + tee_local $push22=, $0=, $pop23 + i32.store __stack_pointer($pop8), $pop22 + i64.const $push0=, 85899345925 + i64.store 16($0), $pop0 + i32.const $push9=, 144 + i32.add $push10=, $0, $pop9 + i32.const $push1=, .L.str.1 + i32.const $push11=, 16 + i32.add $push12=, $0, $pop11 + i32.call $drop=, first@FUNCTION, $pop10, $pop1, $pop12 + i64.const $push21=, 85899345925 + i64.store 0($0), $pop21 + i32.const $push13=, 32 + i32.add $push14=, $0, $pop13 + i32.const $push20=, .L.str.1 + i32.call $drop=, second@FUNCTION, $pop14, $pop20, $0 + block + i32.const $push19=, .L.str.2 + i32.const $push15=, 144 + i32.add $push16=, $0, $pop15 + i32.call $push2=, strcmp@FUNCTION, $pop19, $pop16 + br_if 0, $pop2 # 0: down to label6 +# BB#1: # %lor.lhs.false + i32.const $push24=, .L.str.2 + i32.const $push17=, 32 + i32.add $push18=, $0, $pop17 + i32.call $push3=, strcmp@FUNCTION, $pop24, $pop18 + br_if 0, $pop3 # 0: down to label6 +# BB#2: # %if.end + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable +.LBB2_3: # %if.then + end_block # label6: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "%d" + .size .L.str, 3 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "i i " + .size .L.str.1, 5 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "5 20 " + .size .L.str.2, 6 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype sprintf, i32, i32, i32 + .functype strlen, i32, i32 + .functype strcmp, i32, i32, i32 + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920730-1.c.s b/src/binaryen/test/torture-s/920730-1.c.s new file mode 100644 index 0000000000..f6d893cb83 --- /dev/null +++ b/src/binaryen/test/torture-s/920730-1.c.s @@ -0,0 +1,71 @@ + .text + .file "920730-1.c" + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size f2, .Lfunc_end1-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size f3, .Lfunc_end2-f3 + # -- End function + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size f4, .Lfunc_end3-f4 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920731-1.c.s b/src/binaryen/test/torture-s/920731-1.c.s new file mode 100644 index 0000000000..0fa9390f06 --- /dev/null +++ b/src/binaryen/test/torture-s/920731-1.c.s @@ -0,0 +1,62 @@ + .text + .file "920731-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $2=, 0 + block + i32.const $push3=, 1 + i32.and $push0=, $0, $pop3 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %for.inc.preheader + i32.const $1=, 0 +.LBB0_2: # %for.inc + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push5=, 1 + i32.add $2=, $1, $pop5 + i32.const $push4=, 6 + i32.gt_u $push2=, $1, $pop4 + br_if 1, $pop2 # 1: down to label0 +# BB#3: # %for.inc + # in Loop: Header=BB0_2 Depth=1 + copy_local $1=, $2 + i32.const $push9=, 1 + i32.shr_s $push8=, $0, $pop9 + tee_local $push7=, $0=, $pop8 + i32.const $push6=, 1 + i32.and $push1=, $pop7, $pop6 + i32.eqz $push10=, $pop1 + br_if 0, $pop10 # 0: up to label1 +.LBB0_4: # %for.end + end_loop + end_block # label0: + copy_local $push11=, $2 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920810-1.c.s b/src/binaryen/test/torture-s/920810-1.c.s new file mode 100644 index 0000000000..9c7ca8a246 --- /dev/null +++ b/src/binaryen/test/torture-s/920810-1.c.s @@ -0,0 +1,43 @@ + .text + .file "920810-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.call $push0=, malloc@FUNCTION, $1 + i32.load $push1=, 8($0) + i32.call $push4=, memcpy@FUNCTION, $pop0, $0, $pop1 + tee_local $push3=, $2=, $pop4 + i32.const $push2=, 0 + i32.store 4($pop3), $pop2 + i32.store 0($2), $0 + i32.store 8($2), $1 + copy_local $push5=, $2 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype malloc, i32, i32 + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920812-1.c.s b/src/binaryen/test/torture-s/920812-1.c.s new file mode 100644 index 0000000000..8a1fa10805 --- /dev/null +++ b/src/binaryen/test/torture-s/920812-1.c.s @@ -0,0 +1,34 @@ + .text + .file "920812-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.eq $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920829-1.c.s b/src/binaryen/test/torture-s/920829-1.c.s new file mode 100644 index 0000000000..ff772b21e2 --- /dev/null +++ b/src/binaryen/test/torture-s/920829-1.c.s @@ -0,0 +1,52 @@ + .text + .file "920829-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push6=, 0 + i64.load $push0=, c($pop6) + i64.const $push1=, 3 + i64.mul $push2=, $pop0, $pop1 + i32.const $push5=, 0 + i64.load $push3=, c3($pop5) + i64.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + i32.const $push7=, 0 + call exit@FUNCTION, $pop7 + unreachable +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden c # @c + .type c,@object + .section .data.c,"aw",@progbits + .globl c + .p2align 3 +c: + .int64 2863311530 # 0xaaaaaaaa + .size c, 8 + + .hidden c3 # @c3 + .type c3,@object + .section .data.c3,"aw",@progbits + .globl c3 + .p2align 3 +c3: + .int64 8589934590 # 0x1fffffffe + .size c3, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920908-1.c.s b/src/binaryen/test/torture-s/920908-1.c.s new file mode 100644 index 0000000000..e0f211cf02 --- /dev/null +++ b/src/binaryen/test/torture-s/920908-1.c.s @@ -0,0 +1,79 @@ + .text + .file "920908-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push11=, 0 + i32.const $push9=, 0 + i32.load $push8=, __stack_pointer($pop9) + i32.const $push10=, 16 + i32.sub $push18=, $pop8, $pop10 + tee_local $push17=, $3=, $pop18 + i32.store __stack_pointer($pop11), $pop17 + i32.const $push0=, 4 + i32.add $push16=, $1, $pop0 + tee_local $push15=, $2=, $pop16 + i32.store 12($3), $pop15 + block + i32.load $push1=, 0($1) + i32.const $push2=, 10 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 8 + i32.add $push5=, $1, $pop4 + i32.store 12($3), $pop5 + i32.load $push6=, 0($2) + i32.const $push19=, 20 + i32.ne $push7=, $pop6, $pop19 + br_if 0, $pop7 # 0: down to label0 +# BB#2: # %if.end7 + i32.const $push14=, 0 + i32.const $push12=, 16 + i32.add $push13=, $3, $pop12 + i32.store __stack_pointer($pop14), $pop13 + i32.const $push20=, 20 + return $pop20 +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push7=, $pop2, $pop4 + tee_local $push6=, $0=, $pop7 + i32.store __stack_pointer($pop5), $pop6 + i64.const $push0=, 85899345930 + i64.store 0($0), $pop0 + i32.call $drop=, f@FUNCTION, $0, $0 + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920908-2.c.s b/src/binaryen/test/torture-s/920908-2.c.s new file mode 100644 index 0000000000..147d9e50e7 --- /dev/null +++ b/src/binaryen/test/torture-s/920908-2.c.s @@ -0,0 +1,37 @@ + .text + .file "920908-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.load $push0=, 0($0) + i32.const $push1=, 16 + i32.shl $push2=, $pop0, $pop1 + i32.const $push3=, 24 + i32.shr_s $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920909-1.c.s b/src/binaryen/test/torture-s/920909-1.c.s new file mode 100644 index 0000000000..8dccba5b44 --- /dev/null +++ b/src/binaryen/test/torture-s/920909-1.c.s @@ -0,0 +1,61 @@ + .text + .file "920909-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, -1026 + i32.add $push10=, $0, $pop0 + tee_local $push9=, $0=, $pop10 + i32.const $push1=, 5 + i32.gt_u $push2=, $pop9, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %switch.lookup + i32.const $push4=, 2 + i32.shl $push5=, $0, $pop4 + i32.const $push6=, .Lswitch.table.f + i32.add $push7=, $pop5, $pop6 + i32.load $push8=, 0($pop7) + return $pop8 +.LBB0_2: # %return + end_block # label0: + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .Lswitch.table.f,@object # @switch.table.f + .section .rodata..Lswitch.table.f,"a",@progbits + .p2align 4 +.Lswitch.table.f: + .int32 1027 # 0x403 + .int32 1029 # 0x405 + .int32 1031 # 0x407 + .int32 1033 # 0x409 + .int32 1 # 0x1 + .int32 4 # 0x4 + .size .Lswitch.table.f, 24 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920922-1.c.s b/src/binaryen/test/torture-s/920922-1.c.s new file mode 100644 index 0000000000..de515e6021 --- /dev/null +++ b/src/binaryen/test/torture-s/920922-1.c.s @@ -0,0 +1,40 @@ + .text + .file "920922-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.load $push0=, 0($0) + i32.const $push1=, 22 + i32.shr_u $push2=, $pop0, $pop1 + i32.const $push3=, 1020 + i32.and $push4=, $pop2, $pop3 + i32.add $push5=, $0, $pop4 + i32.const $push6=, 4 + i32.add $push7=, $pop5, $pop6 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/920929-1.c.s b/src/binaryen/test/torture-s/920929-1.c.s new file mode 100644 index 0000000000..ea8e0a4b9a --- /dev/null +++ b/src/binaryen/test/torture-s/920929-1.c.s @@ -0,0 +1,34 @@ + .text + .file "920929-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921006-1.c.s b/src/binaryen/test/torture-s/921006-1.c.s new file mode 100644 index 0000000000..09fee2f011 --- /dev/null +++ b/src/binaryen/test/torture-s/921006-1.c.s @@ -0,0 +1,19 @@ + .text + .file "921006-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921007-1.c.s b/src/binaryen/test/torture-s/921007-1.c.s new file mode 100644 index 0000000000..e776017d44 --- /dev/null +++ b/src/binaryen/test/torture-s/921007-1.c.s @@ -0,0 +1,19 @@ + .text + .file "921007-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921013-1.c.s b/src/binaryen/test/torture-s/921013-1.c.s new file mode 100644 index 0000000000..37762dad53 --- /dev/null +++ b/src/binaryen/test/torture-s/921013-1.c.s @@ -0,0 +1,57 @@ + .text + .file "921013-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.eqz $push9=, $3 + br_if 0, $pop9 # 0: down to label0 +# BB#1: # %while.body.preheader +.LBB0_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + f32.load $push1=, 0($1) + f32.load $push0=, 0($2) + f32.eq $push2=, $pop1, $pop0 + i32.store 0($0), $pop2 + i32.const $push8=, 4 + i32.add $0=, $0, $pop8 + i32.const $push7=, 4 + i32.add $2=, $2, $pop7 + i32.const $push6=, 4 + i32.add $1=, $1, $pop6 + i32.const $push5=, -1 + i32.add $push4=, $3, $pop5 + tee_local $push3=, $3=, $pop4 + br_if 0, $pop3 # 0: up to label1 +.LBB0_3: # %while.end + end_loop + end_block # label0: + copy_local $push10=, $0 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %for.cond.3 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921016-1.c.s b/src/binaryen/test/torture-s/921016-1.c.s new file mode 100644 index 0000000000..2a7d1f767c --- /dev/null +++ b/src/binaryen/test/torture-s/921016-1.c.s @@ -0,0 +1,19 @@ + .text + .file "921016-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921019-1.c.s b/src/binaryen/test/torture-s/921019-1.c.s new file mode 100644 index 0000000000..89e4a58629 --- /dev/null +++ b/src/binaryen/test/torture-s/921019-1.c.s @@ -0,0 +1,47 @@ + .text + .file "921019-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push4=, 0 + i32.load $push0=, foo($pop4) + i32.load8_u $push1=, 0($pop0) + i32.const $push2=, 88 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push5=, 0 + call exit@FUNCTION, $pop5 + unreachable +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "X" + .size .L.str, 2 + + .hidden foo # @foo + .type foo,@object + .section .data.foo,"aw",@progbits + .globl foo + .p2align 2 +foo: + .int32 .L.str + .size foo, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921019-2.c.s b/src/binaryen/test/torture-s/921019-2.c.s new file mode 100644 index 0000000000..876856d65d --- /dev/null +++ b/src/binaryen/test/torture-s/921019-2.c.s @@ -0,0 +1,19 @@ + .text + .file "921019-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921029-1.c.s b/src/binaryen/test/torture-s/921029-1.c.s new file mode 100644 index 0000000000..54778a250c --- /dev/null +++ b/src/binaryen/test/torture-s/921029-1.c.s @@ -0,0 +1,84 @@ + .text + .file "921029-1.c" + .section .text.build,"ax",@progbits + .hidden build # -- Begin function build + .globl build + .type build,@function +build: # @build + .param i32, i32 + .result i64 + .local i64, i64 +# BB#0: # %entry + i32.const $push0=, 0 + i64.extend_u/i32 $push10=, $1 + tee_local $push9=, $2=, $pop10 + i64.store lpart($pop0), $pop9 + i32.const $push8=, 0 + i64.extend_u/i32 $push1=, $0 + i64.const $push2=, 32 + i64.shl $push7=, $pop1, $pop2 + tee_local $push6=, $3=, $pop7 + i64.store hpart($pop8), $pop6 + i32.const $push5=, 0 + i64.or $push4=, $3, $2 + tee_local $push3=, $2=, $pop4 + i64.store back($pop5), $pop3 + copy_local $push11=, $2 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end0: + .size build, .Lfunc_end0-build + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end44 + i32.const $push1=, 0 + i64.const $push0=, 4294967294 + i64.store lpart($pop1), $pop0 + i32.const $push6=, 0 + i64.const $push2=, -4294967296 + i64.store hpart($pop6), $pop2 + i32.const $push5=, 0 + i64.const $push3=, -2 + i64.store back($pop5), $pop3 + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden hpart # @hpart + .type hpart,@object + .section .bss.hpart,"aw",@nobits + .globl hpart + .p2align 3 +hpart: + .int64 0 # 0x0 + .size hpart, 8 + + .hidden lpart # @lpart + .type lpart,@object + .section .bss.lpart,"aw",@nobits + .globl lpart + .p2align 3 +lpart: + .int64 0 # 0x0 + .size lpart, 8 + + .hidden back # @back + .type back,@object + .section .bss.back,"aw",@nobits + .globl back + .p2align 3 +back: + .int64 0 # 0x0 + .size back, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921104-1.c.s b/src/binaryen/test/torture-s/921104-1.c.s new file mode 100644 index 0000000000..6d1f004d23 --- /dev/null +++ b/src/binaryen/test/torture-s/921104-1.c.s @@ -0,0 +1,19 @@ + .text + .file "921104-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921110-1.c.s b/src/binaryen/test/torture-s/921110-1.c.s new file mode 100644 index 0000000000..8dc1d1769b --- /dev/null +++ b/src/binaryen/test/torture-s/921110-1.c.s @@ -0,0 +1,29 @@ + .text + .file "921110-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden f # @f + .type f,@object + .section .data.f,"aw",@progbits + .globl f + .p2align 2 +f: + .int32 abort@FUNCTION + .size f, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, i32 + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921112-1.c.s b/src/binaryen/test/torture-s/921112-1.c.s new file mode 100644 index 0000000000..c372047b41 --- /dev/null +++ b/src/binaryen/test/torture-s/921112-1.c.s @@ -0,0 +1,73 @@ + .text + .file "921112-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 8($0), $pop0 + copy_local $push1=, $0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push2=, 0 + i64.const $push1=, 8589934593 + i64.store x+8($pop2), $pop1 + i32.const $push7=, 0 + i64.const $push6=, 8589934593 + i64.store v($pop7), $pop6 + block + i32.const $push5=, 0 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %entry + i64.const $push0=, 8589934592 + i64.const $push8=, 8589934592 + i64.ne $push3=, $pop0, $pop8 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %if.end + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable +.LBB1_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 4 +x: + .skip 16 + .size x, 16 + + .hidden v # @v + .type v,@object + .section .bss.v,"aw",@nobits + .globl v + .p2align 3 +v: + .skip 8 + .size v, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921113-1.c.s b/src/binaryen/test/torture-s/921113-1.c.s new file mode 100644 index 0000000000..e2a597729f --- /dev/null +++ b/src/binaryen/test/torture-s/921113-1.c.s @@ -0,0 +1,194 @@ + .text + .file "921113-1.c" + .section .text.w,"ax",@progbits + .hidden w # -- Begin function w + .globl w + .type w,@function +w: # @w + .param f32, f32 + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $2 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size w, .Lfunc_end0-w + # -- End function + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param f32, f32 + .result i32 + .local i32 +# BB#0: # %entry + block + f32.const $push2=, 0x0p0 + f32.ne $push0=, $0, $pop2 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %entry + f32.const $push3=, 0x0p0 + f32.ne $push1=, $1, $pop3 + br_if 0, $pop1 # 0: down to label0 +# BB#2: # %if.end + return $2 +.LBB1_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size f1, .Lfunc_end1-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param f32, f32 + .result i32 + .local i32 +# BB#0: # %entry + block + f32.const $push2=, 0x1p0 + f32.ne $push0=, $0, $pop2 + br_if 0, $pop0 # 0: down to label1 +# BB#1: # %entry + f32.const $push3=, 0x1p0 + f32.ne $push1=, $1, $pop3 + br_if 0, $pop1 # 0: down to label1 +# BB#2: # %if.end + return $2 +.LBB2_3: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size f2, .Lfunc_end2-f2 + # -- End function + .section .text.gitter,"ax",@progbits + .hidden gitter # -- Begin function gitter + .globl gitter + .type gitter,@function +gitter: # @gitter + .param i32, i32, i32, i32, i32, f32 + .result i32 + .local f32, f64, f64 +# BB#0: # %entry + block + f32.load $push1=, 0($4) + f32.const $push23=, 0x0p0 + f32.ne $push2=, $pop1, $pop23 + br_if 0, $pop2 # 0: down to label2 +# BB#1: # %entry + f32.load $push0=, 4($4) + f32.const $push24=, 0x0p0 + f32.ne $push3=, $pop0, $pop24 + br_if 0, $pop3 # 0: down to label2 +# BB#2: # %f1.exit + f32.load $push5=, 8($4) + f32.const $push25=, 0x1p0 + f32.ne $push6=, $pop5, $pop25 + br_if 0, $pop6 # 0: down to label2 +# BB#3: # %f1.exit + i32.const $push7=, 12 + i32.add $push8=, $4, $pop7 + f32.load $push4=, 0($pop8) + f32.const $push26=, 0x1p0 + f32.ne $push9=, $pop4, $pop26 + br_if 0, $pop9 # 0: down to label2 +# BB#4: # %f2.exit + i32.const $push10=, 0 + i32.store 0($3), $pop10 + block + f32.load $push28=, 0($1) + tee_local $push27=, $6=, $pop28 + f32.const $push11=, 0x0p0 + f32.gt $push12=, $pop27, $pop11 + f32.ne $push13=, $6, $6 + i32.or $push14=, $pop12, $pop13 + br_if 0, $pop14 # 0: down to label3 +# BB#5: # %if.then + f64.promote/f32 $push15=, $5 + f64.const $push16=, 0x1p-1 + f64.mul $push32=, $pop15, $pop16 + tee_local $push31=, $7=, $pop32 + f64.promote/f32 $push30=, $6 + tee_local $push29=, $8=, $pop30 + f64.lt $push17=, $pop31, $pop29 + f64.ne $push18=, $7, $7 + f64.ne $push19=, $8, $8 + i32.or $push20=, $pop18, $pop19 + i32.or $push21=, $pop17, $pop20 + br_if 0, $pop21 # 0: down to label3 +# BB#6: # %if.then15 + i32.const $push22=, 1065353216 + i32.store 0($2), $pop22 +.LBB3_7: # %if.end18 + end_block # label3: + return $4 +.LBB3_8: # %if.then.i + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size gitter, .Lfunc_end3-gitter + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push13=, $pop4, $pop6 + tee_local $push12=, $0=, $pop13 + i32.store __stack_pointer($pop7), $pop12 + i32.const $push2=, pos + i32.const $push8=, 8 + i32.add $push9=, $0, $pop8 + i32.const $push10=, 12 + i32.add $push11=, $0, $pop10 + i32.const $push1=, limit + f32.const $push0=, 0x1p0 + i32.call $drop=, gitter@FUNCTION, $0, $pop2, $pop9, $pop11, $pop1, $pop0 + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + .hidden pos # @pos + .type pos,@object + .section .bss.pos,"aw",@nobits + .globl pos + .p2align 2 +pos: + .skip 8 + .size pos, 8 + + .hidden limit # @limit + .type limit,@object + .section .data.limit,"aw",@progbits + .globl limit + .p2align 4 +limit: + .skip 8 + .int32 1065353216 # float 1 + .int32 1065353216 # float 1 + .size limit, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921117-1.c.s b/src/binaryen/test/torture-s/921117-1.c.s new file mode 100644 index 0000000000..45737f6239 --- /dev/null +++ b/src/binaryen/test/torture-s/921117-1.c.s @@ -0,0 +1,87 @@ + .text + .file "921117-1.c" + .section .text.check,"ax",@progbits + .hidden check # -- Begin function check + .globl check + .type check,@function +check: # @check + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $1=, 1 + block + i32.load $push0=, 12($0) + i32.const $push1=, 99 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push3=, .L.str + i32.call $1=, strcmp@FUNCTION, $0, $pop3 +.LBB0_2: # %return + end_block # label0: + copy_local $push4=, $1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size check, .Lfunc_end0-check + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %check.exit + i32.const $push13=, 0 + i32.const $push0=, 99 + i32.store cell+12($pop13), $pop0 + i32.const $push12=, 0 + i32.const $push11=, 0 + i64.load $push1=, .L.str($pop11):p2align=0 + i64.store cell($pop12):p2align=2, $pop1 + i32.const $push10=, 0 + i32.const $push9=, 0 + i32.load16_u $push2=, .L.str+8($pop9):p2align=0 + i32.store16 cell+8($pop10), $pop2 + i32.const $push8=, 0 + i32.const $push7=, 0 + i32.load8_u $push3=, .L.str+10($pop7) + i32.store8 cell+10($pop8), $pop3 + block + i32.const $push5=, cell + i32.const $push4=, .L.str + i32.call $push6=, strcmp@FUNCTION, $pop5, $pop4 + br_if 0, $pop6 # 0: down to label1 +# BB#1: # %if.end + i32.const $push14=, 0 + call exit@FUNCTION, $pop14 + unreachable +.LBB1_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "0123456789" + .size .L.str, 11 + + .hidden cell # @cell + .type cell,@object + .section .bss.cell,"aw",@nobits + .globl cell + .p2align 2 +cell: + .skip 16 + .size cell, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strcmp, i32, i32, i32 + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921123-1.c.s b/src/binaryen/test/torture-s/921123-1.c.s new file mode 100644 index 0000000000..d94fab15dc --- /dev/null +++ b/src/binaryen/test/torture-s/921123-1.c.s @@ -0,0 +1,39 @@ + .text + .file "921123-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.load16_u $push0=, 0($0) + i32.const $push1=, -1 + i32.add $push2=, $pop0, $pop1 + i32.const $push3=, 32768 + i32.and $push4=, $pop2, $pop3 + i32.const $push5=, 15 + i32.shr_u $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921123-2.c.s b/src/binaryen/test/torture-s/921123-2.c.s new file mode 100644 index 0000000000..002a9713fb --- /dev/null +++ b/src/binaryen/test/torture-s/921123-2.c.s @@ -0,0 +1,70 @@ + .text + .file "921123-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.load16_u $push0=, 4($0) + i32.store b($pop1), $pop0 + i32.const $push3=, 0 + i32.load16_u $push2=, 6($0) + i32.store a($pop3), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, 38 + i32.store a($pop1), $pop0 + i32.const $push4=, 0 + i32.const $push3=, 0 + i32.store b($pop4), $pop3 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 1 +x: + .skip 8 + .size x, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921124-1.c.s b/src/binaryen/test/torture-s/921124-1.c.s new file mode 100644 index 0000000000..4d5c8fb18b --- /dev/null +++ b/src/binaryen/test/torture-s/921124-1.c.s @@ -0,0 +1,68 @@ + .text + .file "921124-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, f64, f64, f64 + .result i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32, i32, f64, f64, i32, i32 + .result i32 +# BB#0: # %entry + block + f64.const $push0=, 0x1p0 + f64.ne $push1=, $2, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %entry + f64.const $push2=, 0x1p1 + f64.ne $push3=, $3, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %entry + i32.const $push4=, 3 + i32.ne $push5=, $4, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#3: # %entry + i32.const $push6=, 4 + i32.ne $push7=, $5, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#4: # %if.end + return $4 +.LBB1_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size g, .Lfunc_end1-g + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %g.exit + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921202-1.c.s b/src/binaryen/test/torture-s/921202-1.c.s new file mode 100644 index 0000000000..0bfbd9ef4e --- /dev/null +++ b/src/binaryen/test/torture-s/921202-1.c.s @@ -0,0 +1,102 @@ + .text + .file "921202-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %for.cond + i32.call $drop=, exxit@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.mpn_mul_1,"ax",@progbits + .hidden mpn_mul_1 # -- Begin function mpn_mul_1 + .globl mpn_mul_1 + .type mpn_mul_1,@function +mpn_mul_1: # @mpn_mul_1 + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size mpn_mul_1, .Lfunc_end2-mpn_mul_1 + # -- End function + .section .text.mpn_print,"ax",@progbits + .hidden mpn_print # -- Begin function mpn_print + .globl mpn_print + .type mpn_print,@function +mpn_print: # @mpn_print + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size mpn_print, .Lfunc_end3-mpn_print + # -- End function + .section .text.mpn_random2,"ax",@progbits + .hidden mpn_random2 # -- Begin function mpn_random2 + .globl mpn_random2 + .type mpn_random2,@function +mpn_random2: # @mpn_random2 + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size mpn_random2, .Lfunc_end4-mpn_random2 + # -- End function + .section .text.mpn_cmp,"ax",@progbits + .hidden mpn_cmp # -- Begin function mpn_cmp + .globl mpn_cmp + .type mpn_cmp,@function +mpn_cmp: # @mpn_cmp + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end5: + .size mpn_cmp, .Lfunc_end5-mpn_cmp + # -- End function + .section .text.exxit,"ax",@progbits + .hidden exxit # -- Begin function exxit + .globl exxit + .type exxit,@function +exxit: # @exxit + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end6: + .size exxit, .Lfunc_end6-exxit + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921202-2.c.s b/src/binaryen/test/torture-s/921202-2.c.s new file mode 100644 index 0000000000..c1b9a783db --- /dev/null +++ b/src/binaryen/test/torture-s/921202-2.c.s @@ -0,0 +1,37 @@ + .text + .file "921202-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i64 + .result i32 +# BB#0: # %entry + i32.wrap/i64 $push0=, $0 + i32.const $push1=, 8 + i32.shr_u $push2=, $pop0, $pop1 + i32.const $push3=, 255 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921204-1.c.s b/src/binaryen/test/torture-s/921204-1.c.s new file mode 100644 index 0000000000..3d1ae8b92f --- /dev/null +++ b/src/binaryen/test/torture-s/921204-1.c.s @@ -0,0 +1,41 @@ + .text + .file "921204-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 +# BB#0: # %entry + i32.load $push8=, 0($1) + tee_local $push7=, $1=, $pop8 + i32.const $push4=, 1310720 + i32.or $push5=, $pop7, $pop4 + i32.const $push2=, -1310721 + i32.and $push3=, $1, $pop2 + i32.const $push0=, 1 + i32.and $push1=, $1, $pop0 + i32.select $push6=, $pop5, $pop3, $pop1 + i32.store 0($0), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921207-1.c.s b/src/binaryen/test/torture-s/921207-1.c.s new file mode 100644 index 0000000000..09b0455f36 --- /dev/null +++ b/src/binaryen/test/torture-s/921207-1.c.s @@ -0,0 +1,32 @@ + .text + .file "921207-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921208-1.c.s b/src/binaryen/test/torture-s/921208-1.c.s new file mode 100644 index 0000000000..024c21c3cb --- /dev/null +++ b/src/binaryen/test/torture-s/921208-1.c.s @@ -0,0 +1,47 @@ + .text + .file "921208-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param f64 + .result f64 +# BB#0: # %entry + f64.mul $push0=, $0, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.Int,"ax",@progbits + .hidden Int # -- Begin function Int + .globl Int + .type Int,@function +Int: # @Int + .param i32, f64 + .result f64 +# BB#0: # %entry + f64.call_indirect $push0=, $1, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size Int, .Lfunc_end1-Int + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921208-2.c.s b/src/binaryen/test/torture-s/921208-2.c.s new file mode 100644 index 0000000000..f5f8964976 --- /dev/null +++ b/src/binaryen/test/torture-s/921208-2.c.s @@ -0,0 +1,47 @@ + .text + .file "921208-2.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921218-1.c.s b/src/binaryen/test/torture-s/921218-1.c.s new file mode 100644 index 0000000000..a78a80a195 --- /dev/null +++ b/src/binaryen/test/torture-s/921218-1.c.s @@ -0,0 +1,32 @@ + .text + .file "921218-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, 255 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/921218-2.c.s b/src/binaryen/test/torture-s/921218-2.c.s new file mode 100644 index 0000000000..d86b7ccfc0 --- /dev/null +++ b/src/binaryen/test/torture-s/921218-2.c.s @@ -0,0 +1,32 @@ + .text + .file "921218-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, 65535 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930106-1.c.s b/src/binaryen/test/torture-s/930106-1.c.s new file mode 100644 index 0000000000..2e808200d1 --- /dev/null +++ b/src/binaryen/test/torture-s/930106-1.c.s @@ -0,0 +1,45 @@ + .text + .file "930106-1.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .result f64 +# BB#0: # %entry + f64.const $push0=, 0x1p0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930111-1.c.s b/src/binaryen/test/torture-s/930111-1.c.s new file mode 100644 index 0000000000..3b8c318550 --- /dev/null +++ b/src/binaryen/test/torture-s/930111-1.c.s @@ -0,0 +1,51 @@ + .text + .file "930111-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.wwrite,"ax",@progbits + .hidden wwrite # -- Begin function wwrite + .globl wwrite + .type wwrite,@function +wwrite: # @wwrite + .param i64 + .result i32 +# BB#0: # %entry + block + i64.const $push1=, -3 + i64.add $push6=, $0, $pop1 + tee_local $push5=, $0=, $pop6 + i64.const $push2=, 44 + i64.gt_u $push3=, $pop5, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %entry + block + i32.wrap/i64 $push0=, $0 + br_table $pop0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 # 0: down to label1 + # 1: down to label0 +.LBB1_2: # %return + end_block # label1: + i32.const $push7=, 0 + return $pop7 +.LBB1_3: # %sw.default + end_block # label0: + i32.const $push4=, 123 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end1: + .size wwrite, .Lfunc_end1-wwrite + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930123-1.c.s b/src/binaryen/test/torture-s/930123-1.c.s new file mode 100644 index 0000000000..50055aa4b2 --- /dev/null +++ b/src/binaryen/test/torture-s/930123-1.c.s @@ -0,0 +1,35 @@ + .text + .file "930123-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store 0($0), $pop0 + copy_local $push1=, $0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930126-1.c.s b/src/binaryen/test/torture-s/930126-1.c.s new file mode 100644 index 0000000000..2ae241c14d --- /dev/null +++ b/src/binaryen/test/torture-s/930126-1.c.s @@ -0,0 +1,52 @@ + .text + .file "930126-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.const $push1=, -1099511627521 + i64.and $push2=, $pop0, $pop1 + i64.const $push3=, 884479243264 + i64.or $push4=, $pop2, $pop3 + i64.store 0($0), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + i32.const $push7=, 0 + i64.load $push1=, main.i($pop7) + i64.const $push2=, -1099511627776 + i64.and $push3=, $pop1, $pop2 + i64.const $push4=, 884479243276 + i64.or $push5=, $pop3, $pop4 + i64.store main.i($pop0), $pop5 + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type main.i,@object # @main.i + .section .bss.main.i,"aw",@nobits + .p2align 3 +main.i: + .skip 8 + .size main.i, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930208-1.c.s b/src/binaryen/test/torture-s/930208-1.c.s new file mode 100644 index 0000000000..54484d5fae --- /dev/null +++ b/src/binaryen/test/torture-s/930208-1.c.s @@ -0,0 +1,47 @@ + .text + .file "930208-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.load8_u $push0=, 3($0) + i32.const $push1=, 1 + i32.add $push2=, $pop0, $pop1 + i32.store8 3($0), $pop2 + i32.load8_u $push3=, 0($0) + i32.const $push12=, 1 + i32.add $push4=, $pop3, $pop12 + i32.store8 0($0), $pop4 + i32.load8_u $push8=, 2($0) + i32.const $push6=, 2 + i32.ne $push9=, $pop8, $pop6 + i32.load8_u $push5=, 1($0) + i32.const $push11=, 2 + i32.ne $push7=, $pop5, $pop11 + i32.or $push10=, $pop9, $pop7 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930406-1.c.s b/src/binaryen/test/torture-s/930406-1.c.s new file mode 100644 index 0000000000..c5e513e11d --- /dev/null +++ b/src/binaryen/test/torture-s/930406-1.c.s @@ -0,0 +1,32 @@ + .text + .file "930406-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.call $drop=, f@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930408-1.c.s b/src/binaryen/test/torture-s/930408-1.c.s new file mode 100644 index 0000000000..2a6b653512 --- /dev/null +++ b/src/binaryen/test/torture-s/930408-1.c.s @@ -0,0 +1,69 @@ + .text + .file "930408-1.c" + .section .text.p,"ax",@progbits + .hidden p # -- Begin function p + .globl p + .type p,@function +p: # @p + .result i32 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size p, .Lfunc_end0-p + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.load $push1=, s($pop0) + i32.eqz $push2=, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %sw.epilog + return $0 +.LBB1_2: # %sw.bb + end_block # label0: + i32.call $drop=, p@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store s($pop1), $pop0 + i32.call $drop=, f@FUNCTION + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 2 +s: + .skip 4 + .size s, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930429-1.c.s b/src/binaryen/test/torture-s/930429-1.c.s new file mode 100644 index 0000000000..935fabe883 --- /dev/null +++ b/src/binaryen/test/torture-s/930429-1.c.s @@ -0,0 +1,34 @@ + .text + .file "930429-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.add $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930429-2.c.s b/src/binaryen/test/torture-s/930429-2.c.s new file mode 100644 index 0000000000..32e063fe2f --- /dev/null +++ b/src/binaryen/test/torture-s/930429-2.c.s @@ -0,0 +1,36 @@ + .text + .file "930429-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.shr_s $push1=, $0, $pop0 + i32.const $push2=, 0 + i32.gt_s $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end4 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930513-1.c.s b/src/binaryen/test/torture-s/930513-1.c.s new file mode 100644 index 0000000000..714a0df07e --- /dev/null +++ b/src/binaryen/test/torture-s/930513-1.c.s @@ -0,0 +1,96 @@ + .text + .file "930513-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push11=, $pop3, $pop5 + tee_local $push10=, $1=, $pop11 + i32.store __stack_pointer($pop6), $pop10 + i64.const $push0=, 4617315517961601024 + i64.store 0($1), $pop0 + i32.const $push2=, buf + i32.const $push1=, .L.str + i32.call_indirect $drop=, $pop2, $pop1, $1, $0 + i32.const $push9=, 0 + i32.const $push7=, 16 + i32.add $push8=, $1, $pop7 + i32.store __stack_pointer($pop9), $pop8 + copy_local $push12=, $1 + # fallthrough-return: $pop12 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push13=, 0 + i32.const $push11=, 0 + i32.load $push10=, __stack_pointer($pop11) + i32.const $push12=, 16 + i32.sub $push16=, $pop10, $pop12 + tee_local $push15=, $0=, $pop16 + i32.store __stack_pointer($pop13), $pop15 + i64.const $push1=, 4617315517961601024 + i64.store 0($0), $pop1 + i32.const $push3=, buf + i32.const $push2=, .L.str + i32.call $drop=, sprintf@FUNCTION, $pop3, $pop2, $0 + block + i32.const $push14=, 0 + i32.load8_u $push4=, buf($pop14) + i32.const $push5=, 53 + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %entry + i32.const $push17=, 0 + i32.load8_u $push0=, buf+1($pop17) + i32.const $push7=, 255 + i32.and $push8=, $pop0, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#2: # %if.end + i32.const $push9=, 0 + call exit@FUNCTION, $pop9 + unreachable +.LBB1_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden buf # @buf + .type buf,@object + .section .bss.buf,"aw",@nobits + .globl buf +buf: + .skip 2 + .size buf, 2 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "%.0f" + .size .L.str, 5 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype sprintf, i32, i32, i32 + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930513-2.c.s b/src/binaryen/test/torture-s/930513-2.c.s new file mode 100644 index 0000000000..dc2e60d339 --- /dev/null +++ b/src/binaryen/test/torture-s/930513-2.c.s @@ -0,0 +1,81 @@ + .text + .file "930513-2.c" + .section .text.sub3,"ax",@progbits + .hidden sub3 # -- Begin function sub3 + .globl sub3 + .type sub3,@function +sub3: # @sub3 + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size sub3, .Lfunc_end0-sub3 + # -- End function + .section .text.eq,"ax",@progbits + .hidden eq # -- Begin function eq + .globl eq + .type eq,@function +eq: # @eq + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push4=, 0 + i32.load $push0=, eq.i($pop4) + i32.ne $push1=, $pop0, $0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push5=, 0 + i32.const $push2=, 1 + i32.add $push3=, $0, $pop2 + i32.store eq.i($pop5), $pop3 + return $0 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size eq, .Lfunc_end1-eq + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push2=, 0 + i32.load $push0=, eq.i($pop2) + br_if 0, $pop0 # 0: down to label1 +# BB#1: # %eq.exit.3 + i32.const $push4=, 0 + i32.const $push1=, 4 + i32.store eq.i($pop4), $pop1 + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable +.LBB2_2: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type eq.i,@object # @eq.i + .section .bss.eq.i,"aw",@nobits + .p2align 2 +eq.i: + .int32 0 # 0x0 + .size eq.i, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930518-1.c.s b/src/binaryen/test/torture-s/930518-1.c.s new file mode 100644 index 0000000000..b7076d5ee7 --- /dev/null +++ b/src/binaryen/test/torture-s/930518-1.c.s @@ -0,0 +1,155 @@ + .text + .file "930518-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + block + i32.const $push10=, 0 + i32.load $push9=, bar($pop10) + tee_local $push8=, $2=, $pop9 + i32.const $push7=, 1 + i32.gt_s $push0=, $pop8, $pop7 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %while.body.lr.ph + i32.const $push16=, 2 + i32.sub $push15=, $pop16, $2 + tee_local $push14=, $1=, $pop15 + i32.store 0($0), $pop14 + i32.const $push13=, 0 + i32.const $push12=, 1 + i32.store bar($pop13), $pop12 + i32.const $push11=, 2 + i32.lt_s $push1=, $1, $pop11 + br_if 0, $pop1 # 0: down to label0 +# BB#2: # %while.body.preheader + i32.const $push17=, 4 + i32.add $0=, $0, $pop17 + i32.const $push2=, 3 + i32.sub $2=, $pop2, $2 +.LBB0_3: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push23=, -2 + i32.add $push3=, $2, $pop23 + i32.store 0($0), $pop3 + i32.const $push22=, 4 + i32.add $0=, $0, $pop22 + i32.const $push21=, -1 + i32.add $push20=, $2, $pop21 + tee_local $push19=, $2=, $pop20 + i32.const $push18=, 2 + i32.gt_s $push4=, $pop19, $pop18 + br_if 0, $pop4 # 0: up to label1 +# BB#4: # %while.end.loopexit + end_loop + i32.const $push6=, 0 + i32.const $push5=, 1 + i32.store bar($pop6), $pop5 +.LBB0_5: # %while.end + end_block # label0: + copy_local $push24=, $0 + # fallthrough-return: $pop24 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push15=, 0 + i32.const $push13=, 0 + i32.load $push12=, __stack_pointer($pop13) + i32.const $push14=, 16 + i32.sub $push23=, $pop12, $pop14 + tee_local $push22=, $3=, $pop23 + i32.store __stack_pointer($pop15), $pop22 + i64.const $push0=, 0 + i64.store 8($3):p2align=2, $pop0 + block + i32.const $push21=, 0 + i32.load $push20=, bar($pop21) + tee_local $push19=, $0=, $pop20 + i32.const $push18=, 1 + i32.gt_s $push1=, $pop19, $pop18 + br_if 0, $pop1 # 0: down to label2 +# BB#1: # %while.body.lr.ph.i + i32.const $push29=, 0 + i32.const $push28=, 1 + i32.store bar($pop29), $pop28 + i32.const $push27=, 2 + i32.sub $push26=, $pop27, $0 + tee_local $push25=, $2=, $pop26 + i32.store 8($3), $pop25 + i32.const $push24=, 2 + i32.lt_s $push2=, $2, $pop24 + br_if 0, $pop2 # 0: down to label2 +# BB#2: # %while.body.i.preheader + i32.const $push3=, 3 + i32.sub $2=, $pop3, $0 + i32.const $push16=, 8 + i32.add $push17=, $3, $pop16 + i32.const $push30=, 4 + i32.add $1=, $pop17, $pop30 +.LBB1_3: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.const $push36=, -2 + i32.add $push4=, $2, $pop36 + i32.store 0($1), $pop4 + i32.const $push35=, 4 + i32.add $1=, $1, $pop35 + i32.const $push34=, -1 + i32.add $push33=, $2, $pop34 + tee_local $push32=, $2=, $pop33 + i32.const $push31=, 2 + i32.gt_s $push5=, $pop32, $pop31 + br_if 0, $pop5 # 0: up to label3 +# BB#4: # %f.exit + end_loop + i32.const $push7=, 0 + i32.const $push37=, 1 + i32.store bar($pop7), $pop37 + br_if 0, $0 # 0: down to label2 +# BB#5: # %f.exit + i32.const $push8=, 12 + i32.add $push9=, $3, $pop8 + i32.load $push6=, 0($pop9) + i32.const $push38=, 1 + i32.ne $push10=, $pop6, $pop38 + br_if 0, $pop10 # 0: down to label2 +# BB#6: # %if.end + i32.const $push11=, 0 + call exit@FUNCTION, $pop11 + unreachable +.LBB1_7: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden bar # @bar + .type bar,@object + .section .bss.bar,"aw",@nobits + .globl bar + .p2align 2 +bar: + .int32 0 # 0x0 + .size bar, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930526-1.c.s b/src/binaryen/test/torture-s/930526-1.c.s new file mode 100644 index 0000000000..8b73030cf2 --- /dev/null +++ b/src/binaryen/test/torture-s/930526-1.c.s @@ -0,0 +1,34 @@ + .text + .file "930526-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930527-1.c.s b/src/binaryen/test/torture-s/930527-1.c.s new file mode 100644 index 0000000000..cb26a51266 --- /dev/null +++ b/src/binaryen/test/torture-s/930527-1.c.s @@ -0,0 +1,36 @@ + .text + .file "930527-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.shr_u $push1=, $0, $pop0 + i32.const $push2=, 175 + i32.xor $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930529-1.c.s b/src/binaryen/test/torture-s/930529-1.c.s new file mode 100644 index 0000000000..808d27f1cf --- /dev/null +++ b/src/binaryen/test/torture-s/930529-1.c.s @@ -0,0 +1,33 @@ + .text + .file "930529-1.c" + .section .text.dd,"ax",@progbits + .hidden dd # -- Begin function dd + .globl dd + .type dd,@function +dd: # @dd + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.div_s $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size dd, .Lfunc_end0-dd + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930603-1.c.s b/src/binaryen/test/torture-s/930603-1.c.s new file mode 100644 index 0000000000..a7425cd5d6 --- /dev/null +++ b/src/binaryen/test/torture-s/930603-1.c.s @@ -0,0 +1,81 @@ + .text + .file "930603-1.c" + .section .text.fx,"ax",@progbits + .hidden fx # -- Begin function fx + .globl fx + .type fx,@function +fx: # @fx + .param f64 + .result f32 +# BB#0: # %entry + f64.const $push4=, 0x1.8p1 + f32.demote/f64 $push0=, $0 + f64.promote/f32 $push1=, $pop0 + f64.const $push2=, 0x1.26bb1bbb58975p1 + f64.mul $push3=, $pop1, $pop2 + f64.div $push5=, $pop4, $pop3 + f64.const $push6=, 0x1p0 + f64.add $push7=, $pop5, $pop6 + f32.demote/f64 $push8=, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end0: + .size fx, .Lfunc_end0-fx + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .section .text.inita,"ax",@progbits + .hidden inita # -- Begin function inita + .globl inita + .type inita,@function +inita: # @inita + .result f32 +# BB#0: # %entry + f32.const $push0=, 0x1.8p1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size inita, .Lfunc_end2-inita + # -- End function + .section .text.initc,"ax",@progbits + .hidden initc # -- Begin function initc + .globl initc + .type initc,@function +initc: # @initc + .result f32 +# BB#0: # %entry + f32.const $push0=, 0x1p2 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size initc, .Lfunc_end3-initc + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size f, .Lfunc_end4-f + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930603-2.c.s b/src/binaryen/test/torture-s/930603-2.c.s new file mode 100644 index 0000000000..ddb66a2ef9 --- /dev/null +++ b/src/binaryen/test/torture-s/930603-2.c.s @@ -0,0 +1,67 @@ + .text + .file "930603-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 + .local i32 +# BB#0: # %for.inc.1.1 + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store w+12($pop1), $pop0 + i32.const $push3=, 0 + i32.const $push2=, 1 + i32.store w($pop3), $pop2 + copy_local $push4=, $0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push0=, 1 + i32.store w+12($pop8), $pop0 + i32.const $push7=, 0 + i32.const $push6=, 1 + i32.store w($pop7), $pop6 + block + i32.const $push5=, 0 + i32.load $push2=, w+4($pop5) + i32.const $push4=, 0 + i32.load $push1=, w+8($pop4) + i32.or $push3=, $pop2, $pop1 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push9=, 0 + call exit@FUNCTION, $pop9 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden w # @w + .type w,@object + .section .bss.w,"aw",@nobits + .globl w + .p2align 4 +w: + .skip 16 + .size w, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930603-3.c.s b/src/binaryen/test/torture-s/930603-3.c.s new file mode 100644 index 0000000000..355021fafd --- /dev/null +++ b/src/binaryen/test/torture-s/930603-3.c.s @@ -0,0 +1,56 @@ + .text + .file "930603-3.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $2=, 1 + block + block + i32.const $push0=, 100 + i32.eq $push1=, $1, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %entry + i32.const $push2=, 107 + i32.ne $push3=, $1, $pop2 + br_if 1, $pop3 # 1: down to label0 +# BB#2: # %sw.bb3 + i32.const $push4=, 3 + i32.add $0=, $0, $pop4 + i32.const $2=, 4 +.LBB0_3: # %sw.epilog + end_block # label1: + i32.load8_u $push5=, 0($0) + i32.shr_u $push6=, $pop5, $2 + return $pop6 +.LBB0_4: # %sw.default + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930608-1.c.s b/src/binaryen/test/torture-s/930608-1.c.s new file mode 100644 index 0000000000..58a361b34f --- /dev/null +++ b/src/binaryen/test/torture-s/930608-1.c.s @@ -0,0 +1,43 @@ + .text + .file "930608-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param f64 + .result f64 + .local f64 +# BB#0: # %entry + copy_local $push0=, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .rodata.a,"a",@progbits + .globl a + .p2align 2 +a: + .int32 f@FUNCTION + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930614-1.c.s b/src/binaryen/test/torture-s/930614-1.c.s new file mode 100644 index 0000000000..9f1fffd1dd --- /dev/null +++ b/src/binaryen/test/torture-s/930614-1.c.s @@ -0,0 +1,35 @@ + .text + .file "930614-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i64.const $push0=, -4616189618054758400 + i64.store 0($0), $pop0 + copy_local $push1=, $0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930614-2.c.s b/src/binaryen/test/torture-s/930614-2.c.s new file mode 100644 index 0000000000..8d701a9263 --- /dev/null +++ b/src/binaryen/test/torture-s/930614-2.c.s @@ -0,0 +1,19 @@ + .text + .file "930614-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930621-1.c.s b/src/binaryen/test/torture-s/930621-1.c.s new file mode 100644 index 0000000000..cee5048832 --- /dev/null +++ b/src/binaryen/test/torture-s/930621-1.c.s @@ -0,0 +1,32 @@ + .text + .file "930621-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, 20 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930622-1.c.s b/src/binaryen/test/torture-s/930622-1.c.s new file mode 100644 index 0000000000..b01c75bb49 --- /dev/null +++ b/src/binaryen/test/torture-s/930622-1.c.s @@ -0,0 +1,84 @@ + .text + .file "930622-1.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.h,"ax",@progbits + .hidden h # -- Begin function h + .globl h + .type h,@function +h: # @h + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size h, .Lfunc_end1-h + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push2=, 0 + i32.store a($pop0), $pop2 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size f, .Lfunc_end2-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + i32.const $push2=, 0 + i32.store a($pop0), $pop2 + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 1 # 0x1 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930622-2.c.s b/src/binaryen/test/torture-s/930622-2.c.s new file mode 100644 index 0000000000..8e295ce4d2 --- /dev/null +++ b/src/binaryen/test/torture-s/930622-2.c.s @@ -0,0 +1,66 @@ + .text + .file "930622-2.c" + .section .text.ll_to_ld,"ax",@progbits + .hidden ll_to_ld # -- Begin function ll_to_ld + .globl ll_to_ld + .type ll_to_ld,@function +ll_to_ld: # @ll_to_ld + .param i32, i64 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push14=, $pop5, $pop7 + tee_local $push13=, $2=, $pop14 + i32.store __stack_pointer($pop8), $pop13 + call __floatditf@FUNCTION, $2, $1 + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i32.const $push12=, 8 + i32.add $push2=, $2, $pop12 + i64.load $push3=, 0($pop2) + i64.store 0($pop1), $pop3 + i64.load $push4=, 0($2) + i64.store 0($0), $pop4 + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $2, $pop9 + i32.store __stack_pointer($pop11), $pop10 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size ll_to_ld, .Lfunc_end0-ll_to_ld + # -- End function + .section .text.ld_to_ll,"ax",@progbits + .hidden ld_to_ll # -- Begin function ld_to_ll + .globl ld_to_ll + .type ld_to_ll,@function +ld_to_ll: # @ld_to_ll + .param i64, i64 + .result i64 +# BB#0: # %entry + i64.call $push0=, __fixtfdi@FUNCTION, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size ld_to_ll, .Lfunc_end1-ld_to_ll + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end4 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930628-1.c.s b/src/binaryen/test/torture-s/930628-1.c.s new file mode 100644 index 0000000000..7f04299c83 --- /dev/null +++ b/src/binaryen/test/torture-s/930628-1.c.s @@ -0,0 +1,147 @@ + .text + .file "930628-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.eq $push0=, $0, $1 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + return $0 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, -1 + i32.const $0=, 0 +.LBB1_1: # %for.body3 + # =>This Inner Loop Header: Depth=1 + block + loop # label2: + block + i32.eqz $push25=, $0 + br_if 0, $pop25 # 0: down to label3 +# BB#2: # %if.else + # in Loop: Header=BB1_1 Depth=1 + i32.eqz $push26=, $0 + br_if 2, $pop26 # 2: down to label1 +.LBB1_3: # %if.end.1.1 + # in Loop: Header=BB1_1 Depth=1 + end_block # label3: + i32.const $push9=, -64 + i32.add $0=, $0, $pop9 + i32.const $push8=, 1 + i32.add $push7=, $1, $pop8 + tee_local $push6=, $1=, $pop7 + i32.const $push5=, 3 + i32.lt_u $push0=, $pop6, $pop5 + br_if 0, $pop0 # 0: up to label2 +# BB#4: # %for.inc45 + end_loop + i32.const $0=, 0 + i32.const $1=, 0 +.LBB1_5: # %for.body3.1 + # =>This Inner Loop Header: Depth=1 + loop # label4: + block + i32.eqz $push27=, $0 + br_if 0, $pop27 # 0: down to label5 +# BB#6: # %if.else.1 + # in Loop: Header=BB1_5 Depth=1 + i32.eqz $push28=, $0 + br_if 2, $pop28 # 2: down to label1 +.LBB1_7: # %if.end.1.1.1 + # in Loop: Header=BB1_5 Depth=1 + end_block # label5: + i32.const $push14=, -64 + i32.add $0=, $0, $pop14 + i32.const $push13=, 1 + i32.add $push12=, $1, $pop13 + tee_local $push11=, $1=, $pop12 + i32.const $push10=, 3 + i32.lt_u $push1=, $pop11, $pop10 + br_if 0, $pop1 # 0: up to label4 +# BB#8: # %for.inc45.1 + end_loop + i32.const $0=, 0 + i32.const $1=, 1 +.LBB1_9: # %for.body3.2 + # =>This Inner Loop Header: Depth=1 + loop # label6: + block + i32.eqz $push29=, $0 + br_if 0, $pop29 # 0: down to label7 +# BB#10: # %if.else.2 + # in Loop: Header=BB1_9 Depth=1 + i32.eqz $push30=, $0 + br_if 2, $pop30 # 2: down to label1 +.LBB1_11: # %if.end.1.1.2 + # in Loop: Header=BB1_9 Depth=1 + end_block # label7: + i32.const $push19=, -64 + i32.add $0=, $0, $pop19 + i32.const $push18=, 1 + i32.add $push17=, $1, $pop18 + tee_local $push16=, $1=, $pop17 + i32.const $push15=, 3 + i32.lt_u $push2=, $pop16, $pop15 + br_if 0, $pop2 # 0: up to label6 +# BB#12: # %for.inc45.2 + end_loop + i32.const $1=, 2 + i32.const $0=, 0 +.LBB1_13: # %for.body3.3 + # =>This Inner Loop Header: Depth=1 + loop # label8: + block + i32.eqz $push31=, $0 + br_if 0, $pop31 # 0: down to label9 +# BB#14: # %if.else.3 + # in Loop: Header=BB1_13 Depth=1 + i32.eqz $push32=, $0 + br_if 2, $pop32 # 2: down to label1 +.LBB1_15: # %if.end.1.1.3 + # in Loop: Header=BB1_13 Depth=1 + end_block # label9: + i32.const $push24=, -64 + i32.add $0=, $0, $pop24 + i32.const $push23=, 1 + i32.add $push22=, $1, $pop23 + tee_local $push21=, $1=, $pop22 + i32.const $push20=, 3 + i32.lt_u $push3=, $pop21, $pop20 + br_if 0, $pop3 # 0: up to label8 +# BB#16: # %for.inc45.3 + end_loop + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable +.LBB1_17: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930630-1.c.s b/src/binaryen/test/torture-s/930630-1.c.s new file mode 100644 index 0000000000..c2c870bb2a --- /dev/null +++ b/src/binaryen/test/torture-s/930630-1.c.s @@ -0,0 +1,42 @@ + .text + .file "930630-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 7 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return $0 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/930702-1.c.s b/src/binaryen/test/torture-s/930702-1.c.s new file mode 100644 index 0000000000..153e0446db --- /dev/null +++ b/src/binaryen/test/torture-s/930702-1.c.s @@ -0,0 +1,46 @@ + .text + .file "930702-1.c" + .section .text.fp,"ax",@progbits + .hidden fp # -- Begin function fp + .globl fp + .type fp,@function +fp: # @fp + .param f64, i32 + .result i32 +# BB#0: # %entry + block + f64.const $push0=, 0x1.08p5 + f64.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %entry + i32.const $push2=, 11 + i32.ne $push3=, $1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %if.end + return $1 +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size fp, .Lfunc_end0-fp + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930713-1.c.s b/src/binaryen/test/torture-s/930713-1.c.s new file mode 100644 index 0000000000..470315739d --- /dev/null +++ b/src/binaryen/test/torture-s/930713-1.c.s @@ -0,0 +1,33 @@ + .text + .file "930713-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 17 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930718-1.c.s b/src/binaryen/test/torture-s/930718-1.c.s new file mode 100644 index 0000000000..9bae59cde8 --- /dev/null +++ b/src/binaryen/test/torture-s/930718-1.c.s @@ -0,0 +1,32 @@ + .text + .file "930718-1.c" + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f2, .Lfunc_end0-f2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %lor.lhs.false + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930719-1.c.s b/src/binaryen/test/torture-s/930719-1.c.s new file mode 100644 index 0000000000..eea024e304 --- /dev/null +++ b/src/binaryen/test/torture-s/930719-1.c.s @@ -0,0 +1,56 @@ + .text + .file "930719-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + block + block + block + br_if 0, $0 # 0: down to label2 +# BB#1: # %if.end + i32.const $push0=, 1 + i32.ne $push1=, $1, $pop0 + br_if 1, $pop1 # 1: down to label1 +# BB#2: # %sw.bb.split + i32.eqz $push3=, $2 + br_if 2, $pop3 # 2: down to label0 +.LBB0_3: # %cleanup + end_block # label2: + i32.const $push2=, 0 + return $pop2 +.LBB0_4: # %while.cond + # =>This Inner Loop Header: Depth=1 + end_block # label1: + loop # label3: + br 0 # 0: up to label3 +.LBB0_5: # %if.end2 + end_loop + end_block # label0: + unreachable + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930725-1.c.s b/src/binaryen/test/torture-s/930725-1.c.s new file mode 100644 index 0000000000..19e707cdee --- /dev/null +++ b/src/binaryen/test/torture-s/930725-1.c.s @@ -0,0 +1,73 @@ + .text + .file "930725-1.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .result i32 +# BB#0: # %entry + i32.const $push0=, .L.str + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push3=, .L.str.1 + i32.const $push2=, .L.str + i32.const $push0=, 0 + i32.load $push1=, v($pop0) + i32.select $push4=, $pop3, $pop2, $pop1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store v($pop1), $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .skip 1 + .size .L.str, 1 + + .hidden v # @v + .type v,@object + .section .bss.v,"aw",@nobits + .globl v + .p2align 2 +v: + .int32 0 # 0x0 + .size v, 4 + + .type .L.str.1,@object # @.str.1 + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str.1: + .asciz "abc" + .size .L.str.1, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930818-1.c.s b/src/binaryen/test/torture-s/930818-1.c.s new file mode 100644 index 0000000000..2b4aaf562e --- /dev/null +++ b/src/binaryen/test/torture-s/930818-1.c.s @@ -0,0 +1,32 @@ + .text + .file "930818-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930916-1.c.s b/src/binaryen/test/torture-s/930916-1.c.s new file mode 100644 index 0000000000..783de51950 --- /dev/null +++ b/src/binaryen/test/torture-s/930916-1.c.s @@ -0,0 +1,42 @@ + .text + .file "930916-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.ge_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return $0 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930921-1.c.s b/src/binaryen/test/torture-s/930921-1.c.s new file mode 100644 index 0000000000..fa776d7f90 --- /dev/null +++ b/src/binaryen/test/torture-s/930921-1.c.s @@ -0,0 +1,69 @@ + .text + .file "930921-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i64.extend_u/i32 $push0=, $0 + i64.const $push1=, 2863311531 + i64.mul $push2=, $pop0, $pop1 + i64.const $push3=, 33 + i64.shr_u $push4=, $pop2, $pop3 + i32.wrap/i64 $push5=, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64, i32 +# BB#0: # %entry + i32.const $1=, 0 + i64.const $0=, 0 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label1: + i32.const $push7=, 3 + i32.div_u $push0=, $1, $pop7 + i64.const $push6=, 33 + i64.shr_u $push1=, $0, $pop6 + i32.wrap/i64 $push2=, $pop1 + i32.ne $push3=, $pop0, $pop2 + br_if 1, $pop3 # 1: down to label0 +# BB#2: # %for.cond + # in Loop: Header=BB1_1 Depth=1 + i64.const $push12=, 2863311531 + i64.add $0=, $0, $pop12 + i32.const $push11=, 1 + i32.add $push10=, $1, $pop11 + tee_local $push9=, $1=, $pop10 + i32.const $push8=, 9999 + i32.le_u $push4=, $pop9, $pop8 + br_if 0, $pop4 # 0: up to label1 +# BB#3: # %for.end + end_loop + i32.const $push5=, 0 + call exit@FUNCTION, $pop5 + unreachable +.LBB1_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930929-1.c.s b/src/binaryen/test/torture-s/930929-1.c.s new file mode 100644 index 0000000000..993e6977f1 --- /dev/null +++ b/src/binaryen/test/torture-s/930929-1.c.s @@ -0,0 +1,81 @@ + .text + .file "930929-1.c" + .section .text.sub1,"ax",@progbits + .hidden sub1 # -- Begin function sub1 + .globl sub1 + .type sub1,@function +sub1: # @sub1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, -5 + i32.add $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size sub1, .Lfunc_end0-sub1 + # -- End function + .section .text.sub2,"ax",@progbits + .hidden sub2 # -- Begin function sub2 + .globl sub2 + .type sub2,@function +sub2: # @sub2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 5 + i32.add $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size sub2, .Lfunc_end1-sub2 + # -- End function + .section .text.sub3,"ax",@progbits + .hidden sub3 # -- Begin function sub3 + .globl sub3 + .type sub3,@function +sub3: # @sub3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -5 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size sub3, .Lfunc_end2-sub3 + # -- End function + .section .text.sub4,"ax",@progbits + .hidden sub4 # -- Begin function sub4 + .globl sub4 + .type sub4,@function +sub4: # @sub4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 5 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size sub4, .Lfunc_end3-sub4 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end4 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930930-1.c.s b/src/binaryen/test/torture-s/930930-1.c.s new file mode 100644 index 0000000000..ac62e3fdc0 --- /dev/null +++ b/src/binaryen/test/torture-s/930930-1.c.s @@ -0,0 +1,121 @@ + .text + .file "930930-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32, i32, i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + block + block + i32.lt_u $push0=, $3, $4 + br_if 0, $pop0 # 0: down to label1 +# BB#1: # %if.end.preheader + copy_local $6=, $0 +.LBB0_2: # %if.end + # =>This Inner Loop Header: Depth=1 + loop # label2: + block + i32.load $push6=, 0($3) + tee_local $push5=, $5=, $pop6 + i32.ge_u $push1=, $pop5, $2 + br_if 0, $pop1 # 0: down to label3 +# BB#3: # %if.end + # in Loop: Header=BB0_2 Depth=1 + i32.lt_u $push2=, $5, $1 + br_if 0, $pop2 # 0: down to label3 +# BB#4: # %if.then3 + # in Loop: Header=BB0_2 Depth=1 + i32.const $push9=, -4 + i32.add $push8=, $6, $pop9 + tee_local $push7=, $6=, $pop8 + i32.store 0($pop7), $5 +.LBB0_5: # %if.end4 + # in Loop: Header=BB0_2 Depth=1 + end_block # label3: + i32.const $push12=, -4 + i32.add $push11=, $3, $pop12 + tee_local $push10=, $3=, $pop11 + i32.ge_u $push3=, $pop10, $4 + br_if 0, $pop3 # 0: up to label2 +# BB#6: # %out + end_loop + i32.ne $push4=, $6, $0 + br_if 1, $pop4 # 1: down to label0 +.LBB0_7: # %if.end8 + end_block # label1: + return $3 +.LBB0_8: # %if.then7 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, mem + i32.store mem+396($pop1), $pop0 + i32.const $push5=, mem+400 + i32.const $push4=, mem+24 + i32.const $push3=, mem+32 + i32.const $push2=, mem+396 + i32.const $push7=, mem+396 + i32.call $drop=, f@FUNCTION, $pop5, $pop4, $pop3, $pop2, $pop7 + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden mem # @mem + .type mem,@object + .section .bss.mem,"aw",@nobits + .globl mem + .p2align 4 +mem: + .skip 400 + .size mem, 400 + + .hidden wm_TR # @wm_TR + .type wm_TR,@object + .section .bss.wm_TR,"aw",@nobits + .globl wm_TR + .p2align 2 +wm_TR: + .int32 0 + .size wm_TR, 4 + + .hidden wm_HB # @wm_HB + .type wm_HB,@object + .section .bss.wm_HB,"aw",@nobits + .globl wm_HB + .p2align 2 +wm_HB: + .int32 0 + .size wm_HB, 4 + + .hidden wm_SPB # @wm_SPB + .type wm_SPB,@object + .section .bss.wm_SPB,"aw",@nobits + .globl wm_SPB + .p2align 2 +wm_SPB: + .int32 0 + .size wm_SPB, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/930930-2.c.s b/src/binaryen/test/torture-s/930930-2.c.s new file mode 100644 index 0000000000..d1289e52ba --- /dev/null +++ b/src/binaryen/test/torture-s/930930-2.c.s @@ -0,0 +1,74 @@ + .text + .file "930930-2.c" + .section .text.test_endianness,"ax",@progbits + .hidden test_endianness # -- Begin function test_endianness + .globl test_endianness + .type test_endianness,@function +test_endianness: # @test_endianness + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size test_endianness, .Lfunc_end0-test_endianness + # -- End function + .section .text.test_endianness_vol,"ax",@progbits + .hidden test_endianness_vol # -- Begin function test_endianness_vol + .globl test_endianness_vol + .type test_endianness_vol,@function +test_endianness_vol: # @test_endianness_vol + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push8=, $pop4, $pop6 + tee_local $push7=, $0=, $pop8 + i64.const $push0=, 4621819117588971520 + i64.store 8($pop7), $pop0 + i32.load $push2=, 8($0) + i32.const $push1=, 0 + i32.ne $push3=, $pop2, $pop1 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size test_endianness_vol, .Lfunc_end1-test_endianness_vol + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push8=, $pop3, $pop5 + tee_local $push7=, $0=, $pop8 + i32.store __stack_pointer($pop6), $pop7 + i64.const $push0=, 4621819117588971520 + i64.store 8($0), $pop0 + block + i32.load $push1=, 8($0) + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931004-1.c.s b/src/binaryen/test/torture-s/931004-1.c.s new file mode 100644 index 0000000000..271f51f2fe --- /dev/null +++ b/src/binaryen/test/torture-s/931004-1.c.s @@ -0,0 +1,54 @@ + .text + .file "931004-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 10 + i32.ne $push1=, $1, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push2=, 11 + i32.ne $push3=, $2, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %if.end6 + i32.const $push4=, 12 + i32.ne $push5=, $3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#3: # %if.end10 + i32.const $push6=, 123 + i32.ne $push7=, $4, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#4: # %if.end13 + return $2 +.LBB0_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931004-10.c.s b/src/binaryen/test/torture-s/931004-10.c.s new file mode 100644 index 0000000000..e0cde6274f --- /dev/null +++ b/src/binaryen/test/torture-s/931004-10.c.s @@ -0,0 +1,127 @@ + .text + .file "931004-10.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push17=, 0 + i32.const $push15=, 0 + i32.load $push14=, __stack_pointer($pop15) + i32.const $push16=, 16 + i32.sub $push24=, $pop14, $pop16 + tee_local $push23=, $4=, $pop24 + i32.store __stack_pointer($pop17), $pop23 + i32.const $push22=, 4 + i32.add $push1=, $1, $pop22 + i32.store 12($4), $pop1 + block + block + i32.const $push21=, 1 + i32.lt_s $push2=, $0, $pop21 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %for.body.preheader + i32.const $2=, 10 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.load8_s $push3=, 0($1) + i32.ne $push4=, $2, $pop3 + br_if 2, $pop4 # 2: down to label0 +# BB#3: # %if.end + # in Loop: Header=BB0_2 Depth=1 + i32.const $push26=, 10 + i32.add $push5=, $2, $pop26 + i32.const $push25=, 1 + i32.add $push6=, $1, $pop25 + i32.load8_s $push7=, 0($pop6) + i32.ne $push8=, $pop5, $pop7 + br_if 2, $pop8 # 2: down to label0 +# BB#4: # %for.cond + # in Loop: Header=BB0_2 Depth=1 + i32.const $push30=, 8 + i32.add $push9=, $1, $pop30 + i32.store 12($4), $pop9 + i32.const $push29=, 4 + i32.add $1=, $1, $pop29 + i32.const $push28=, -9 + i32.add $3=, $2, $pop28 + i32.const $push27=, 1 + i32.add $push0=, $2, $pop27 + copy_local $2=, $pop0 + i32.lt_s $push10=, $3, $0 + br_if 0, $pop10 # 0: up to label2 +.LBB0_5: # %for.end + end_loop + end_block # label1: + i32.load $push11=, 0($1) + i32.const $push12=, 123 + i32.ne $push13=, $pop11, $pop12 + br_if 0, $pop13 # 0: down to label0 +# BB#6: # %if.end16 + i32.const $push20=, 0 + i32.const $push18=, 16 + i32.add $push19=, $4, $pop18 + i32.store __stack_pointer($pop20), $pop19 + return $1 +.LBB0_7: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push11=, 0 + i32.const $push9=, 0 + i32.load $push8=, __stack_pointer($pop9) + i32.const $push10=, 32 + i32.sub $push19=, $pop8, $pop10 + tee_local $push18=, $0=, $pop19 + i32.store __stack_pointer($pop11), $pop18 + i32.const $push0=, 5130 + i32.store16 24($0), $pop0 + i32.const $push1=, 369890571 + i32.store 26($0):p2align=1, $pop1 + i32.const $push2=, 123 + i32.store 12($0), $pop2 + i32.load16_u $push3=, 24($0) + i32.store16 22($0), $pop3 + i32.load16_u $push4=, 26($0) + i32.store16 20($0), $pop4 + i32.load16_u $push5=, 28($0) + i32.store16 18($0), $pop5 + i32.const $push12=, 18 + i32.add $push13=, $0, $pop12 + i32.store 8($0), $pop13 + i32.const $push14=, 20 + i32.add $push15=, $0, $pop14 + i32.store 4($0), $pop15 + i32.const $push16=, 22 + i32.add $push17=, $0, $pop16 + i32.store 0($0), $pop17 + i32.const $push6=, 3 + i32.call $drop=, f@FUNCTION, $pop6, $0 + i32.const $push7=, 0 + call exit@FUNCTION, $pop7 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931004-11.c.s b/src/binaryen/test/torture-s/931004-11.c.s new file mode 100644 index 0000000000..87a1077935 --- /dev/null +++ b/src/binaryen/test/torture-s/931004-11.c.s @@ -0,0 +1,137 @@ + .text + .file "931004-11.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.load8_u $push0=, 0($1) + i32.const $push1=, 10 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.load8_u $push3=, 1($1) + i32.const $push4=, 20 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end6 + i32.load8_u $push6=, 2($1) + i32.const $push7=, 30 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %if.end11 + i32.load8_u $push9=, 0($2) + i32.const $push10=, 11 + i32.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#4: # %if.end17 + i32.load8_u $push12=, 1($2) + i32.const $push13=, 21 + i32.ne $push14=, $pop12, $pop13 + br_if 0, $pop14 # 0: down to label0 +# BB#5: # %if.end23 + i32.load8_u $push15=, 2($2) + i32.const $push16=, 31 + i32.ne $push17=, $pop15, $pop16 + br_if 0, $pop17 # 0: down to label0 +# BB#6: # %if.end29 + i32.load8_u $push18=, 0($3) + i32.const $push19=, 12 + i32.ne $push20=, $pop18, $pop19 + br_if 0, $pop20 # 0: down to label0 +# BB#7: # %if.end35 + i32.load8_u $push21=, 1($3) + i32.const $push22=, 22 + i32.ne $push23=, $pop21, $pop22 + br_if 0, $pop23 # 0: down to label0 +# BB#8: # %if.end41 + i32.load8_u $push24=, 2($3) + i32.const $push25=, 32 + i32.ne $push26=, $pop24, $pop25 + br_if 0, $pop26 # 0: down to label0 +# BB#9: # %if.end47 + i32.const $push27=, 123 + i32.ne $push28=, $4, $pop27 + br_if 0, $pop28 # 0: down to label0 +# BB#10: # %if.end51 + return $2 +.LBB0_11: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push21=, 0 + i32.const $push19=, 0 + i32.load $push18=, __stack_pointer($pop19) + i32.const $push20=, 32 + i32.sub $push37=, $pop18, $pop20 + tee_local $push36=, $0=, $pop37 + i32.store __stack_pointer($pop21), $pop36 + i32.const $push0=, 186520586 + i32.store 16($0), $pop0 + i32.const $push22=, 12 + i32.add $push23=, $0, $pop22 + i32.const $push1=, 2 + i32.add $push2=, $pop23, $pop1 + i32.load8_u $push3=, 18($0) + i32.store8 0($pop2), $pop3 + i32.const $push4=, 7957 + i32.store16 20($0), $pop4 + i32.const $push24=, 8 + i32.add $push25=, $0, $pop24 + i32.const $push35=, 2 + i32.add $push5=, $pop25, $pop35 + i32.load8_u $push6=, 21($0) + i32.store8 0($pop5), $pop6 + i32.const $push7=, 8214 + i32.store16 23($0):p2align=0, $pop7 + i32.const $push26=, 4 + i32.add $push27=, $0, $pop26 + i32.const $push34=, 2 + i32.add $push8=, $pop27, $pop34 + i32.const $push9=, 24 + i32.add $push10=, $0, $pop9 + i32.load8_u $push11=, 0($pop10) + i32.store8 0($pop8), $pop11 + i32.const $push12=, 12 + i32.store8 22($0), $pop12 + i32.load16_u $push13=, 16($0) + i32.store16 12($0), $pop13 + i32.load16_u $push14=, 19($0):p2align=0 + i32.store16 8($0), $pop14 + i32.load16_u $push15=, 22($0) + i32.store16 4($0), $pop15 + i32.const $push28=, 12 + i32.add $push29=, $0, $pop28 + i32.const $push30=, 8 + i32.add $push31=, $0, $pop30 + i32.const $push32=, 4 + i32.add $push33=, $0, $pop32 + i32.const $push16=, 123 + i32.call $drop=, f@FUNCTION, $0, $pop29, $pop31, $pop33, $pop16 + i32.const $push17=, 0 + call exit@FUNCTION, $pop17 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931004-12.c.s b/src/binaryen/test/torture-s/931004-12.c.s new file mode 100644 index 0000000000..48bfc73207 --- /dev/null +++ b/src/binaryen/test/torture-s/931004-12.c.s @@ -0,0 +1,160 @@ + .text + .file "931004-12.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push21=, 0 + i32.const $push19=, 0 + i32.load $push18=, __stack_pointer($pop19) + i32.const $push20=, 16 + i32.sub $push28=, $pop18, $pop20 + tee_local $push27=, $3=, $pop28 + i32.store __stack_pointer($pop21), $pop27 + i32.const $push26=, 4 + i32.add $push1=, $1, $pop26 + i32.store 12($3), $pop1 + block + block + i32.const $push25=, 1 + i32.lt_s $push2=, $0, $pop25 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %for.body.preheader + i32.const $2=, 0 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push29=, 10 + i32.add $push3=, $2, $pop29 + i32.load8_s $push4=, 0($1) + i32.ne $push5=, $pop3, $pop4 + br_if 2, $pop5 # 2: down to label0 +# BB#3: # %if.end + # in Loop: Header=BB0_2 Depth=1 + i32.const $push31=, 20 + i32.add $push7=, $2, $pop31 + i32.const $push30=, 1 + i32.add $push8=, $1, $pop30 + i32.load8_s $push9=, 0($pop8) + i32.ne $push10=, $pop7, $pop9 + br_if 2, $pop10 # 2: down to label0 +# BB#4: # %if.end9 + # in Loop: Header=BB0_2 Depth=1 + i32.const $push33=, 30 + i32.add $push11=, $2, $pop33 + i32.const $push32=, 2 + i32.add $push6=, $1, $pop32 + i32.load8_s $push0=, 0($pop6) + i32.ne $push12=, $pop11, $pop0 + br_if 2, $pop12 # 2: down to label0 +# BB#5: # %for.cond + # in Loop: Header=BB0_2 Depth=1 + i32.const $push38=, 8 + i32.add $push13=, $1, $pop38 + i32.store 12($3), $pop13 + i32.const $push37=, 4 + i32.add $1=, $1, $pop37 + i32.const $push36=, 1 + i32.add $push35=, $2, $pop36 + tee_local $push34=, $2=, $pop35 + i32.lt_s $push14=, $pop34, $0 + br_if 0, $pop14 # 0: up to label2 +.LBB0_6: # %for.end + end_loop + end_block # label1: + i32.load $push15=, 0($1) + i32.const $push16=, 123 + i32.ne $push17=, $pop15, $pop16 + br_if 0, $pop17 # 0: down to label0 +# BB#7: # %if.end22 + i32.const $push24=, 0 + i32.const $push22=, 16 + i32.add $push23=, $3, $pop22 + i32.store __stack_pointer($pop24), $pop23 + return $1 +.LBB0_8: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push22=, 0 + i32.const $push20=, 0 + i32.load $push19=, __stack_pointer($pop20) + i32.const $push21=, 48 + i32.sub $push38=, $pop19, $pop21 + tee_local $push37=, $0=, $pop38 + i32.store __stack_pointer($pop22), $pop37 + i32.const $push0=, 186520586 + i32.store 32($0), $pop0 + i32.const $push23=, 28 + i32.add $push24=, $0, $pop23 + i32.const $push1=, 2 + i32.add $push2=, $pop24, $pop1 + i32.load8_u $push3=, 34($0) + i32.store8 0($pop2), $pop3 + i32.const $push4=, 7957 + i32.store16 36($0), $pop4 + i32.const $push25=, 24 + i32.add $push26=, $0, $pop25 + i32.const $push36=, 2 + i32.add $push5=, $pop26, $pop36 + i32.load8_u $push6=, 37($0) + i32.store8 0($pop5), $pop6 + i32.const $push7=, 8214 + i32.store16 39($0):p2align=0, $pop7 + i32.const $push27=, 20 + i32.add $push28=, $0, $pop27 + i32.const $push35=, 2 + i32.add $push8=, $pop28, $pop35 + i32.const $push9=, 40 + i32.add $push10=, $0, $pop9 + i32.load8_u $push11=, 0($pop10) + i32.store8 0($pop8), $pop11 + i32.const $push12=, 12 + i32.store8 38($0), $pop12 + i32.load16_u $push13=, 32($0) + i32.store16 28($0), $pop13 + i32.load16_u $push14=, 35($0):p2align=0 + i32.store16 24($0), $pop14 + i32.load16_u $push15=, 38($0) + i32.store16 20($0), $pop15 + i32.const $push16=, 123 + i32.store 12($0), $pop16 + i32.const $push29=, 20 + i32.add $push30=, $0, $pop29 + i32.store 8($0), $pop30 + i32.const $push31=, 24 + i32.add $push32=, $0, $pop31 + i32.store 4($0), $pop32 + i32.const $push33=, 28 + i32.add $push34=, $0, $pop33 + i32.store 0($0), $pop34 + i32.const $push17=, 3 + i32.call $drop=, f@FUNCTION, $pop17, $0 + i32.const $push18=, 0 + call exit@FUNCTION, $pop18 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931004-13.c.s b/src/binaryen/test/torture-s/931004-13.c.s new file mode 100644 index 0000000000..1bd14a12de --- /dev/null +++ b/src/binaryen/test/torture-s/931004-13.c.s @@ -0,0 +1,128 @@ + .text + .file "931004-13.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.load8_u $push0=, 0($1) + i32.const $push1=, 10 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.load8_u $push3=, 1($1) + i32.const $push4=, 20 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end6 + i32.load8_u $push6=, 2($1) + i32.const $push7=, 30 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %if.end11 + i32.load8_u $push9=, 3($1) + i32.const $push10=, 40 + i32.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#4: # %if.end16 + i32.load8_u $push12=, 0($2) + i32.const $push13=, 11 + i32.ne $push14=, $pop12, $pop13 + br_if 0, $pop14 # 0: down to label0 +# BB#5: # %if.end22 + i32.load8_u $push15=, 1($2) + i32.const $push16=, 21 + i32.ne $push17=, $pop15, $pop16 + br_if 0, $pop17 # 0: down to label0 +# BB#6: # %if.end28 + i32.load8_u $push18=, 2($2) + i32.const $push19=, 31 + i32.ne $push20=, $pop18, $pop19 + br_if 0, $pop20 # 0: down to label0 +# BB#7: # %if.end34 + i32.load8_u $push21=, 3($2) + i32.const $push22=, 41 + i32.ne $push23=, $pop21, $pop22 + br_if 0, $pop23 # 0: down to label0 +# BB#8: # %if.end40 + i32.load8_u $push24=, 0($3) + i32.const $push25=, 12 + i32.ne $push26=, $pop24, $pop25 + br_if 0, $pop26 # 0: down to label0 +# BB#9: # %if.end46 + i32.load8_u $push27=, 1($3) + i32.const $push28=, 22 + i32.ne $push29=, $pop27, $pop28 + br_if 0, $pop29 # 0: down to label0 +# BB#10: # %if.end52 + i32.load8_u $push30=, 2($3) + i32.const $push31=, 32 + i32.ne $push32=, $pop30, $pop31 + br_if 0, $pop32 # 0: down to label0 +# BB#11: # %if.end58 + i32.load8_u $push33=, 3($3) + i32.const $push34=, 42 + i32.ne $push35=, $pop33, $pop34 + br_if 0, $pop35 # 0: down to label0 +# BB#12: # %if.end64 + i32.const $push36=, 123 + i32.ne $push37=, $4, $pop36 + br_if 0, $pop37 # 0: down to label0 +# BB#13: # %if.end68 + return $2 +.LBB0_14: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 32 + i32.sub $push18=, $pop6, $pop8 + tee_local $push17=, $0=, $pop18 + i32.store __stack_pointer($pop9), $pop17 + i64.const $push0=, 2963110217494959114 + i64.store 16($0), $pop0 + i32.const $push1=, 706745868 + i32.store 24($0), $pop1 + i32.const $push16=, 706745868 + i32.store 4($0), $pop16 + i32.load $push2=, 16($0) + i32.store 12($0), $pop2 + i32.load $push3=, 20($0) + i32.store 8($0), $pop3 + i32.const $push10=, 12 + i32.add $push11=, $0, $pop10 + i32.const $push12=, 8 + i32.add $push13=, $0, $pop12 + i32.const $push14=, 4 + i32.add $push15=, $0, $pop14 + i32.const $push4=, 123 + i32.call $drop=, f@FUNCTION, $0, $pop11, $pop13, $pop15, $pop4 + i32.const $push5=, 0 + call exit@FUNCTION, $pop5 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931004-14.c.s b/src/binaryen/test/torture-s/931004-14.c.s new file mode 100644 index 0000000000..9be722a36e --- /dev/null +++ b/src/binaryen/test/torture-s/931004-14.c.s @@ -0,0 +1,145 @@ + .text + .file "931004-14.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push25=, 0 + i32.const $push23=, 0 + i32.load $push22=, __stack_pointer($pop23) + i32.const $push24=, 16 + i32.sub $push32=, $pop22, $pop24 + tee_local $push31=, $3=, $pop32 + i32.store __stack_pointer($pop25), $pop31 + i32.const $push30=, 4 + i32.add $push2=, $1, $pop30 + i32.store 12($3), $pop2 + block + block + i32.const $push29=, 1 + i32.lt_s $push3=, $0, $pop29 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %for.body.preheader + i32.const $2=, 0 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push33=, 10 + i32.add $push4=, $2, $pop33 + i32.load8_s $push5=, 0($1) + i32.ne $push6=, $pop4, $pop5 + br_if 2, $pop6 # 2: down to label0 +# BB#3: # %if.end + # in Loop: Header=BB0_2 Depth=1 + i32.const $push35=, 20 + i32.add $push9=, $2, $pop35 + i32.const $push34=, 1 + i32.add $push10=, $1, $pop34 + i32.load8_s $push11=, 0($pop10) + i32.ne $push12=, $pop9, $pop11 + br_if 2, $pop12 # 2: down to label0 +# BB#4: # %if.end9 + # in Loop: Header=BB0_2 Depth=1 + i32.const $push37=, 30 + i32.add $push13=, $2, $pop37 + i32.const $push36=, 2 + i32.add $push8=, $1, $pop36 + i32.load8_s $push0=, 0($pop8) + i32.ne $push14=, $pop13, $pop0 + br_if 2, $pop14 # 2: down to label0 +# BB#5: # %if.end15 + # in Loop: Header=BB0_2 Depth=1 + i32.const $push39=, 40 + i32.add $push15=, $2, $pop39 + i32.const $push38=, 3 + i32.add $push7=, $1, $pop38 + i32.load8_s $push1=, 0($pop7) + i32.ne $push16=, $pop15, $pop1 + br_if 2, $pop16 # 2: down to label0 +# BB#6: # %for.cond + # in Loop: Header=BB0_2 Depth=1 + i32.const $push44=, 8 + i32.add $push17=, $1, $pop44 + i32.store 12($3), $pop17 + i32.const $push43=, 4 + i32.add $1=, $1, $pop43 + i32.const $push42=, 1 + i32.add $push41=, $2, $pop42 + tee_local $push40=, $2=, $pop41 + i32.lt_s $push18=, $pop40, $0 + br_if 0, $pop18 # 0: up to label2 +.LBB0_7: # %for.end + end_loop + end_block # label1: + i32.load $push19=, 0($1) + i32.const $push20=, 123 + i32.ne $push21=, $pop19, $pop20 + br_if 0, $pop21 # 0: down to label0 +# BB#8: # %if.end28 + i32.const $push28=, 0 + i32.const $push26=, 16 + i32.add $push27=, $3, $pop26 + i32.store __stack_pointer($pop28), $pop27 + return $1 +.LBB0_9: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push10=, 0 + i32.const $push8=, 0 + i32.load $push7=, __stack_pointer($pop8) + i32.const $push9=, 48 + i32.sub $push19=, $pop7, $pop9 + tee_local $push18=, $0=, $pop19 + i32.store __stack_pointer($pop10), $pop18 + i64.const $push0=, 2963110217494959114 + i64.store 32($0), $pop0 + i32.const $push1=, 706745868 + i32.store 40($0), $pop1 + i32.const $push17=, 706745868 + i32.store 20($0), $pop17 + i32.const $push2=, 123 + i32.store 12($0), $pop2 + i32.load $push3=, 32($0) + i32.store 28($0), $pop3 + i32.load $push4=, 36($0) + i32.store 24($0), $pop4 + i32.const $push11=, 20 + i32.add $push12=, $0, $pop11 + i32.store 8($0), $pop12 + i32.const $push13=, 24 + i32.add $push14=, $0, $pop13 + i32.store 4($0), $pop14 + i32.const $push15=, 28 + i32.add $push16=, $0, $pop15 + i32.store 0($0), $pop16 + i32.const $push5=, 3 + i32.call $drop=, f@FUNCTION, $pop5, $0 + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931004-2.c.s b/src/binaryen/test/torture-s/931004-2.c.s new file mode 100644 index 0000000000..9e4a5d8d56 --- /dev/null +++ b/src/binaryen/test/torture-s/931004-2.c.s @@ -0,0 +1,104 @@ + .text + .file "931004-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push13=, 0 + i32.const $push11=, 0 + i32.load $push10=, __stack_pointer($pop11) + i32.const $push12=, 16 + i32.sub $push20=, $pop10, $pop12 + tee_local $push19=, $5=, $pop20 + i32.store __stack_pointer($pop13), $pop19 + i32.const $push18=, 4 + i32.add $push2=, $1, $pop18 + i32.store 12($5), $pop2 + i32.load $4=, 0($1) + block + block + i32.const $push17=, 1 + i32.lt_s $push3=, $0, $pop17 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %for.body.preheader + i32.const $push4=, 8 + i32.add $1=, $1, $pop4 + i32.const $3=, 10 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.ne $push5=, $3, $4 + br_if 2, $pop5 # 2: down to label0 +# BB#3: # %for.cond + # in Loop: Header=BB0_2 Depth=1 + i32.store 12($5), $1 + i32.const $push24=, -9 + i32.add $2=, $3, $pop24 + i32.const $push23=, -4 + i32.add $push7=, $1, $pop23 + i32.load $4=, 0($pop7) + i32.const $push22=, 1 + i32.add $push1=, $3, $pop22 + copy_local $3=, $pop1 + i32.const $push21=, 4 + i32.add $push0=, $1, $pop21 + copy_local $1=, $pop0 + i32.lt_s $push6=, $2, $0 + br_if 0, $pop6 # 0: up to label2 +.LBB0_4: # %for.end + end_loop + end_block # label1: + i32.const $push8=, 123 + i32.ne $push9=, $4, $pop8 + br_if 0, $pop9 # 0: down to label0 +# BB#5: # %if.end8 + i32.const $push16=, 0 + i32.const $push14=, 16 + i32.add $push15=, $5, $pop14 + i32.store __stack_pointer($pop16), $pop15 + return $1 +.LBB0_6: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push9=, $pop4, $pop6 + tee_local $push8=, $0=, $pop9 + i32.store __stack_pointer($pop7), $pop8 + i64.const $push0=, 528280977420 + i64.store 8($0), $pop0 + i64.const $push1=, 47244640266 + i64.store 0($0), $pop1 + i32.const $push2=, 3 + i32.call $drop=, f@FUNCTION, $pop2, $0 + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931004-3.c.s b/src/binaryen/test/torture-s/931004-3.c.s new file mode 100644 index 0000000000..eee2597494 --- /dev/null +++ b/src/binaryen/test/torture-s/931004-3.c.s @@ -0,0 +1,60 @@ + .text + .file "931004-3.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push12=, 65535 + i32.and $push0=, $1, $pop12 + i32.const $push1=, 10 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push13=, 65535 + i32.and $push3=, $2, $pop13 + i32.const $push4=, 11 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end9 + i32.const $push6=, 65535 + i32.and $push7=, $3, $pop6 + i32.const $push8=, 12 + i32.ne $push9=, $pop7, $pop8 + br_if 0, $pop9 # 0: down to label0 +# BB#3: # %if.end15 + i32.const $push10=, 123 + i32.ne $push11=, $4, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#4: # %if.end19 + return $2 +.LBB0_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931004-4.c.s b/src/binaryen/test/torture-s/931004-4.c.s new file mode 100644 index 0000000000..68ed0c5693 --- /dev/null +++ b/src/binaryen/test/torture-s/931004-4.c.s @@ -0,0 +1,101 @@ + .text + .file "931004-4.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push13=, 0 + i32.const $push11=, 0 + i32.load $push10=, __stack_pointer($pop11) + i32.const $push12=, 16 + i32.sub $push20=, $pop10, $pop12 + tee_local $push19=, $4=, $pop20 + i32.store __stack_pointer($pop13), $pop19 + i32.const $push18=, 4 + i32.add $push1=, $1, $pop18 + i32.store 12($4), $pop1 + block + block + i32.const $push17=, 1 + i32.lt_s $push2=, $0, $pop17 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %for.body.preheader + i32.const $3=, 10 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.load16_s $push3=, 0($1) + i32.ne $push4=, $3, $pop3 + br_if 2, $pop4 # 2: down to label0 +# BB#3: # %for.cond + # in Loop: Header=BB0_2 Depth=1 + i32.const $push24=, 8 + i32.add $push5=, $1, $pop24 + i32.store 12($4), $pop5 + i32.const $push23=, 4 + i32.add $1=, $1, $pop23 + i32.const $push22=, -9 + i32.add $2=, $3, $pop22 + i32.const $push21=, 1 + i32.add $push0=, $3, $pop21 + copy_local $3=, $pop0 + i32.lt_s $push6=, $2, $0 + br_if 0, $pop6 # 0: up to label2 +.LBB0_4: # %for.end + end_loop + end_block # label1: + i32.load $push7=, 0($1) + i32.const $push8=, 123 + i32.ne $push9=, $pop7, $pop8 + br_if 0, $pop9 # 0: down to label0 +# BB#5: # %if.end10 + i32.const $push16=, 0 + i32.const $push14=, 16 + i32.add $push15=, $4, $pop14 + i32.store __stack_pointer($pop16), $pop15 + return $1 +.LBB0_6: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push9=, $pop4, $pop6 + tee_local $push8=, $0=, $pop9 + i32.store __stack_pointer($pop7), $pop8 + i64.const $push0=, 528280977420 + i64.store 8($0), $pop0 + i64.const $push1=, 47244640266 + i64.store 0($0), $pop1 + i32.const $push2=, 3 + i32.call $drop=, f@FUNCTION, $pop2, $0 + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931004-5.c.s b/src/binaryen/test/torture-s/931004-5.c.s new file mode 100644 index 0000000000..be32c8598a --- /dev/null +++ b/src/binaryen/test/torture-s/931004-5.c.s @@ -0,0 +1,98 @@ + .text + .file "931004-5.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.load16_u $push0=, 0($1) + i32.const $push1=, 10 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.load16_u $push3=, 2($1) + i32.const $push4=, 20 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end6 + i32.load16_u $push6=, 0($2) + i32.const $push7=, 11 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %if.end12 + i32.load16_u $push9=, 2($2) + i32.const $push10=, 21 + i32.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#4: # %if.end18 + i32.load16_u $push12=, 0($3) + i32.const $push13=, 12 + i32.ne $push14=, $pop12, $pop13 + br_if 0, $pop14 # 0: down to label0 +# BB#5: # %if.end24 + i32.load16_u $push15=, 2($3) + i32.const $push16=, 22 + i32.ne $push17=, $pop15, $pop16 + br_if 0, $pop17 # 0: down to label0 +# BB#6: # %if.end30 + i32.const $push18=, 123 + i32.ne $push19=, $4, $pop18 + br_if 0, $pop19 # 0: down to label0 +# BB#7: # %if.end34 + return $2 +.LBB0_8: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 32 + i32.sub $push18=, $pop6, $pop8 + tee_local $push17=, $0=, $pop18 + i32.store __stack_pointer($pop9), $pop17 + i64.const $push0=, 6192501028618251 + i64.store 20($0):p2align=2, $pop0 + i32.const $push1=, 1310730 + i32.store 16($0), $pop1 + i32.const $push16=, 1310730 + i32.store 12($0), $pop16 + i32.load $push2=, 20($0) + i32.store 8($0), $pop2 + i32.load $push3=, 24($0) + i32.store 4($0), $pop3 + i32.const $push10=, 12 + i32.add $push11=, $0, $pop10 + i32.const $push12=, 8 + i32.add $push13=, $0, $pop12 + i32.const $push14=, 4 + i32.add $push15=, $0, $pop14 + i32.const $push4=, 123 + i32.call $drop=, f@FUNCTION, $0, $pop11, $pop13, $pop15, $pop4 + i32.const $push5=, 0 + call exit@FUNCTION, $pop5 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931004-6.c.s b/src/binaryen/test/torture-s/931004-6.c.s new file mode 100644 index 0000000000..3d325f7ecd --- /dev/null +++ b/src/binaryen/test/torture-s/931004-6.c.s @@ -0,0 +1,127 @@ + .text + .file "931004-6.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push17=, 0 + i32.const $push15=, 0 + i32.load $push14=, __stack_pointer($pop15) + i32.const $push16=, 16 + i32.sub $push24=, $pop14, $pop16 + tee_local $push23=, $4=, $pop24 + i32.store __stack_pointer($pop17), $pop23 + i32.const $push22=, 4 + i32.add $push1=, $1, $pop22 + i32.store 12($4), $pop1 + block + block + i32.const $push21=, 1 + i32.lt_s $push2=, $0, $pop21 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %for.body.preheader + i32.const $2=, 10 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.load16_s $push3=, 0($1) + i32.ne $push4=, $2, $pop3 + br_if 2, $pop4 # 2: down to label0 +# BB#3: # %if.end + # in Loop: Header=BB0_2 Depth=1 + i32.const $push26=, 10 + i32.add $push5=, $2, $pop26 + i32.const $push25=, 2 + i32.add $push6=, $1, $pop25 + i32.load16_s $push7=, 0($pop6) + i32.ne $push8=, $pop5, $pop7 + br_if 2, $pop8 # 2: down to label0 +# BB#4: # %for.cond + # in Loop: Header=BB0_2 Depth=1 + i32.const $push30=, 8 + i32.add $push9=, $1, $pop30 + i32.store 12($4), $pop9 + i32.const $push29=, 4 + i32.add $1=, $1, $pop29 + i32.const $push28=, -9 + i32.add $3=, $2, $pop28 + i32.const $push27=, 1 + i32.add $push0=, $2, $pop27 + copy_local $2=, $pop0 + i32.lt_s $push10=, $3, $0 + br_if 0, $pop10 # 0: up to label2 +.LBB0_5: # %for.end + end_loop + end_block # label1: + i32.load $push11=, 0($1) + i32.const $push12=, 123 + i32.ne $push13=, $pop11, $pop12 + br_if 0, $pop13 # 0: down to label0 +# BB#6: # %if.end16 + i32.const $push20=, 0 + i32.const $push18=, 16 + i32.add $push19=, $4, $pop18 + i32.store __stack_pointer($pop20), $pop19 + return $1 +.LBB0_7: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push10=, 0 + i32.const $push8=, 0 + i32.load $push7=, __stack_pointer($pop8) + i32.const $push9=, 48 + i32.sub $push19=, $pop7, $pop9 + tee_local $push18=, $0=, $pop19 + i32.store __stack_pointer($pop10), $pop18 + i64.const $push0=, 6192501028618251 + i64.store 36($0):p2align=2, $pop0 + i32.const $push1=, 1310730 + i32.store 32($0), $pop1 + i32.const $push17=, 1310730 + i32.store 28($0), $pop17 + i32.const $push2=, 123 + i32.store 12($0), $pop2 + i32.load $push3=, 36($0) + i32.store 24($0), $pop3 + i32.load $push4=, 40($0) + i32.store 20($0), $pop4 + i32.const $push11=, 20 + i32.add $push12=, $0, $pop11 + i32.store 8($0), $pop12 + i32.const $push13=, 24 + i32.add $push14=, $0, $pop13 + i32.store 4($0), $pop14 + i32.const $push15=, 28 + i32.add $push16=, $0, $pop15 + i32.store 0($0), $pop16 + i32.const $push5=, 3 + i32.call $drop=, f@FUNCTION, $pop5, $0 + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931004-7.c.s b/src/binaryen/test/torture-s/931004-7.c.s new file mode 100644 index 0000000000..c6a0a77645 --- /dev/null +++ b/src/binaryen/test/torture-s/931004-7.c.s @@ -0,0 +1,60 @@ + .text + .file "931004-7.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push12=, 255 + i32.and $push0=, $1, $pop12 + i32.const $push1=, 10 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push13=, 255 + i32.and $push3=, $2, $pop13 + i32.const $push4=, 11 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end9 + i32.const $push6=, 255 + i32.and $push7=, $3, $pop6 + i32.const $push8=, 12 + i32.ne $push9=, $pop7, $pop8 + br_if 0, $pop9 # 0: down to label0 +# BB#3: # %if.end15 + i32.const $push10=, 123 + i32.ne $push11=, $4, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#4: # %if.end19 + return $2 +.LBB0_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931004-8.c.s b/src/binaryen/test/torture-s/931004-8.c.s new file mode 100644 index 0000000000..b4b339291c --- /dev/null +++ b/src/binaryen/test/torture-s/931004-8.c.s @@ -0,0 +1,101 @@ + .text + .file "931004-8.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push13=, 0 + i32.const $push11=, 0 + i32.load $push10=, __stack_pointer($pop11) + i32.const $push12=, 16 + i32.sub $push20=, $pop10, $pop12 + tee_local $push19=, $4=, $pop20 + i32.store __stack_pointer($pop13), $pop19 + i32.const $push18=, 4 + i32.add $push1=, $1, $pop18 + i32.store 12($4), $pop1 + block + block + i32.const $push17=, 1 + i32.lt_s $push2=, $0, $pop17 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %for.body.preheader + i32.const $3=, 10 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.load8_s $push3=, 0($1) + i32.ne $push4=, $3, $pop3 + br_if 2, $pop4 # 2: down to label0 +# BB#3: # %for.cond + # in Loop: Header=BB0_2 Depth=1 + i32.const $push24=, 8 + i32.add $push5=, $1, $pop24 + i32.store 12($4), $pop5 + i32.const $push23=, 4 + i32.add $1=, $1, $pop23 + i32.const $push22=, -9 + i32.add $2=, $3, $pop22 + i32.const $push21=, 1 + i32.add $push0=, $3, $pop21 + copy_local $3=, $pop0 + i32.lt_s $push6=, $2, $0 + br_if 0, $pop6 # 0: up to label2 +.LBB0_4: # %for.end + end_loop + end_block # label1: + i32.load $push7=, 0($1) + i32.const $push8=, 123 + i32.ne $push9=, $pop7, $pop8 + br_if 0, $pop9 # 0: down to label0 +# BB#5: # %if.end10 + i32.const $push16=, 0 + i32.const $push14=, 16 + i32.add $push15=, $4, $pop14 + i32.store __stack_pointer($pop16), $pop15 + return $1 +.LBB0_6: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push9=, $pop4, $pop6 + tee_local $push8=, $0=, $pop9 + i32.store __stack_pointer($pop7), $pop8 + i64.const $push0=, 528280977420 + i64.store 8($0), $pop0 + i64.const $push1=, 47244640266 + i64.store 0($0), $pop1 + i32.const $push2=, 3 + i32.call $drop=, f@FUNCTION, $pop2, $0 + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931004-9.c.s b/src/binaryen/test/torture-s/931004-9.c.s new file mode 100644 index 0000000000..9ac6a53131 --- /dev/null +++ b/src/binaryen/test/torture-s/931004-9.c.s @@ -0,0 +1,98 @@ + .text + .file "931004-9.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.load8_u $push0=, 0($1) + i32.const $push1=, 10 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.load8_u $push3=, 1($1) + i32.const $push4=, 20 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end6 + i32.load8_u $push6=, 0($2) + i32.const $push7=, 11 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %if.end12 + i32.load8_u $push9=, 1($2) + i32.const $push10=, 21 + i32.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#4: # %if.end18 + i32.load8_u $push12=, 0($3) + i32.const $push13=, 12 + i32.ne $push14=, $pop12, $pop13 + br_if 0, $pop14 # 0: down to label0 +# BB#5: # %if.end24 + i32.load8_u $push15=, 1($3) + i32.const $push16=, 22 + i32.ne $push17=, $pop15, $pop16 + br_if 0, $pop17 # 0: down to label0 +# BB#6: # %if.end30 + i32.const $push18=, 123 + i32.ne $push19=, $4, $pop18 + br_if 0, $pop19 # 0: down to label0 +# BB#7: # %if.end34 + return $2 +.LBB0_8: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push10=, 0 + i32.const $push8=, 0 + i32.load $push7=, __stack_pointer($pop8) + i32.const $push9=, 16 + i32.sub $push18=, $pop7, $pop9 + tee_local $push17=, $0=, $pop18 + i32.store __stack_pointer($pop10), $pop17 + i32.const $push0=, 5130 + i32.store16 8($0), $pop0 + i32.const $push1=, 369890571 + i32.store 10($0):p2align=1, $pop1 + i32.load16_u $push2=, 8($0) + i32.store16 6($0), $pop2 + i32.load16_u $push3=, 10($0) + i32.store16 4($0), $pop3 + i32.load16_u $push4=, 12($0) + i32.store16 2($0), $pop4 + i32.const $push11=, 6 + i32.add $push12=, $0, $pop11 + i32.const $push13=, 4 + i32.add $push14=, $0, $pop13 + i32.const $push15=, 2 + i32.add $push16=, $0, $pop15 + i32.const $push5=, 123 + i32.call $drop=, f@FUNCTION, $0, $pop12, $pop14, $pop16, $pop5 + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931005-1.c.s b/src/binaryen/test/torture-s/931005-1.c.s new file mode 100644 index 0000000000..fce2ae08d5 --- /dev/null +++ b/src/binaryen/test/torture-s/931005-1.c.s @@ -0,0 +1,33 @@ + .text + .file "931005-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931009-1.c.s b/src/binaryen/test/torture-s/931009-1.c.s new file mode 100644 index 0000000000..b0bf3356b8 --- /dev/null +++ b/src/binaryen/test/torture-s/931009-1.c.s @@ -0,0 +1,33 @@ + .text + .file "931009-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 + .local i32 +# BB#0: # %if.end + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931012-1.c.s b/src/binaryen/test/torture-s/931012-1.c.s new file mode 100644 index 0000000000..aa12e3196c --- /dev/null +++ b/src/binaryen/test/torture-s/931012-1.c.s @@ -0,0 +1,37 @@ + .text + .file "931012-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.select $push1=, $pop0, $0, $1 + i32.const $push2=, 1 + i32.gt_u $push3=, $0, $pop2 + i32.select $push4=, $pop1, $0, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931017-1.c.s b/src/binaryen/test/torture-s/931017-1.c.s new file mode 100644 index 0000000000..050a83d9b8 --- /dev/null +++ b/src/binaryen/test/torture-s/931017-1.c.s @@ -0,0 +1,93 @@ + .text + .file "931017-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.h1,"ax",@progbits + .hidden h1 # -- Begin function h1 + .globl h1 + .type h1,@function +h1: # @h1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size h1, .Lfunc_end1-h1 + # -- End function + .section .text.h2,"ax",@progbits + .hidden h2 # -- Begin function h2 + .globl h2 + .type h2,@function +h2: # @h2 + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, v + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push2=, 0 + return $pop2 +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size h2, .Lfunc_end2-h2 + # -- End function + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size g, .Lfunc_end3-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size f, .Lfunc_end4-f + # -- End function + .hidden v # @v + .type v,@object + .section .bss.v,"aw",@nobits + .globl v + .p2align 2 +v: + .int32 0 # 0x0 + .size v, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/931018-1.c.s b/src/binaryen/test/torture-s/931018-1.c.s new file mode 100644 index 0000000000..05c8a251b4 --- /dev/null +++ b/src/binaryen/test/torture-s/931018-1.c.s @@ -0,0 +1,60 @@ + .text + .file "931018-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, -559038737 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return $0 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .hidden v # @v + .type v,@object + .section .rodata.v,"a",@progbits + .globl v + .p2align 2 +v: + .int32 3735928559 # 0xdeadbeef + .size v, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 4 +a: + .skip 16384 + .size a, 16384 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/931031-1.c.s b/src/binaryen/test/torture-s/931031-1.c.s new file mode 100644 index 0000000000..936678a969 --- /dev/null +++ b/src/binaryen/test/torture-s/931031-1.c.s @@ -0,0 +1,40 @@ + .text + .file "931031-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 1 + i32.load $push7=, 4($0) + tee_local $push6=, $0=, $pop7 + i32.const $push5=, 1 + i32.add $push3=, $pop6, $pop5 + i32.const $push0=, 0 + i32.lt_s $push1=, $0, $pop0 + i32.select $push4=, $pop2, $pop3, $pop1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931102-1.c.s b/src/binaryen/test/torture-s/931102-1.c.s new file mode 100644 index 0000000000..06a0076209 --- /dev/null +++ b/src/binaryen/test/torture-s/931102-1.c.s @@ -0,0 +1,58 @@ + .text + .file "931102-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $1=, 0 + block + i32.const $push3=, 1 + i32.and $push0=, $0, $pop3 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %while.body.preheader + i32.const $1=, 0 +.LBB0_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push9=, 1 + i32.add $1=, $1, $pop9 + i32.const $push8=, 24 + i32.shl $push1=, $0, $pop8 + i32.const $push7=, 25 + i32.shr_s $push6=, $pop1, $pop7 + tee_local $push5=, $0=, $pop6 + i32.const $push4=, 1 + i32.and $push2=, $pop5, $pop4 + i32.eqz $push10=, $pop2 + br_if 0, $pop10 # 0: up to label1 +.LBB0_3: # %while.end + end_loop + end_block # label0: + copy_local $push11=, $1 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931102-2.c.s b/src/binaryen/test/torture-s/931102-2.c.s new file mode 100644 index 0000000000..a5dde0c3ca --- /dev/null +++ b/src/binaryen/test/torture-s/931102-2.c.s @@ -0,0 +1,58 @@ + .text + .file "931102-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $1=, 0 + block + i32.const $push3=, 1 + i32.and $push0=, $0, $pop3 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %while.body.preheader + i32.const $1=, 0 +.LBB0_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push9=, 1 + i32.add $1=, $1, $pop9 + i32.const $push8=, 16 + i32.shl $push1=, $0, $pop8 + i32.const $push7=, 17 + i32.shr_s $push6=, $pop1, $pop7 + tee_local $push5=, $0=, $pop6 + i32.const $push4=, 1 + i32.and $push2=, $pop5, $pop4 + i32.eqz $push10=, $pop2 + br_if 0, $pop10 # 0: up to label1 +.LBB0_3: # %while.end + end_loop + end_block # label0: + copy_local $push11=, $1 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931110-1.c.s b/src/binaryen/test/torture-s/931110-1.c.s new file mode 100644 index 0000000000..288ff52b44 --- /dev/null +++ b/src/binaryen/test/torture-s/931110-1.c.s @@ -0,0 +1,88 @@ + .text + .file "931110-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push50=, 0 + i32.load16_u $push1=, x+4($pop50) + i32.const $push2=, 65528 + i32.and $push3=, $pop1, $pop2 + i32.store16 x+4($pop0), $pop3 + i32.const $push49=, 0 + i32.const $push48=, 0 + i32.load16_u $push4=, x+6($pop48) + i32.const $push47=, 65528 + i32.and $push5=, $pop4, $pop47 + i32.store16 x+6($pop49), $pop5 + i32.const $push46=, 0 + i32.const $push45=, 0 + i32.load16_u $push6=, x+8($pop45) + i32.const $push44=, 65528 + i32.and $push7=, $pop6, $pop44 + i32.store16 x+8($pop46), $pop7 + i32.const $push43=, 0 + i32.const $push42=, 0 + i32.load16_u $push8=, x+10($pop42) + i32.const $push41=, 65528 + i32.and $push9=, $pop8, $pop41 + i32.store16 x+10($pop43), $pop9 + i32.const $push40=, 0 + i32.const $push39=, 0 + i32.load16_u $push10=, x+12($pop39) + i32.const $push38=, 65528 + i32.and $push11=, $pop10, $pop38 + i32.store16 x+12($pop40), $pop11 + i32.const $push37=, 0 + i32.const $push36=, 0 + i32.load16_u $push12=, x+14($pop36) + i32.const $push35=, 65528 + i32.and $push13=, $pop12, $pop35 + i32.store16 x+14($pop37), $pop13 + i32.const $push34=, 0 + i32.const $push33=, 0 + i32.load16_u $push14=, x+16($pop33) + i32.const $push32=, 65528 + i32.and $push15=, $pop14, $pop32 + i32.store16 x+16($pop34), $pop15 + i32.const $push31=, 0 + i32.const $push30=, 0 + i32.load16_u $push16=, x+18($pop30) + i32.const $push29=, 65528 + i32.and $push17=, $pop16, $pop29 + i32.store16 x+18($pop31), $pop17 + i32.const $push28=, 0 + i32.const $push27=, 0 + i32.load16_u $push18=, x+20($pop27) + i32.const $push26=, 65528 + i32.and $push19=, $pop18, $pop26 + i32.store16 x+20($pop28), $pop19 + i32.const $push25=, 0 + i32.const $push24=, 0 + i32.load16_u $push20=, x+22($pop24) + i32.const $push23=, 65528 + i32.and $push21=, $pop20, $pop23 + i32.store16 x+22($pop25), $pop21 + i32.const $push22=, 0 + call exit@FUNCTION, $pop22 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 2 +x: + .skip 24 + .size x, 24 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931110-2.c.s b/src/binaryen/test/torture-s/931110-2.c.s new file mode 100644 index 0000000000..d572f847db --- /dev/null +++ b/src/binaryen/test/torture-s/931110-2.c.s @@ -0,0 +1,19 @@ + .text + .file "931110-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931208-1.c.s b/src/binaryen/test/torture-s/931208-1.c.s new file mode 100644 index 0000000000..43de2e6436 --- /dev/null +++ b/src/binaryen/test/torture-s/931208-1.c.s @@ -0,0 +1,32 @@ + .text + .file "931208-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, 498 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/931228-1.c.s b/src/binaryen/test/torture-s/931228-1.c.s new file mode 100644 index 0000000000..6b10f20056 --- /dev/null +++ b/src/binaryen/test/torture-s/931228-1.c.s @@ -0,0 +1,33 @@ + .text + .file "931228-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 8184 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/940115-1.c.s b/src/binaryen/test/torture-s/940115-1.c.s new file mode 100644 index 0000000000..d7ed7a084a --- /dev/null +++ b/src/binaryen/test/torture-s/940115-1.c.s @@ -0,0 +1,33 @@ + .text + .file "940115-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.lt_u $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/940122-1.c.s b/src/binaryen/test/torture-s/940122-1.c.s new file mode 100644 index 0000000000..92f841f961 --- /dev/null +++ b/src/binaryen/test/torture-s/940122-1.c.s @@ -0,0 +1,100 @@ + .text + .file "940122-1.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.load $push3=, a($pop0) + i32.const $push8=, 0 + i32.ne $push4=, $pop3, $pop8 + i32.const $push7=, 0 + i32.load $push1=, b($pop7) + i32.const $push6=, 0 + i32.ne $push2=, $pop1, $pop6 + i32.ne $push5=, $pop4, $pop2 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %if.end + return $1 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.load $push3=, a($pop0) + i32.const $push8=, 0 + i32.ne $push4=, $pop3, $pop8 + i32.const $push7=, 0 + i32.load $push1=, b($pop7) + i32.const $push6=, 0 + i32.ne $push2=, $pop1, $pop6 + i32.ne $push5=, $pop4, $pop2 + br_if 0, $pop5 # 0: down to label1 +# BB#1: # %g.exit + return $1 +.LBB1_2: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 100 + i32.call $drop=, f@FUNCTION, $pop0 + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/941014-1.c.s b/src/binaryen/test/torture-s/941014-1.c.s new file mode 100644 index 0000000000..4c5b445958 --- /dev/null +++ b/src/binaryen/test/torture-s/941014-1.c.s @@ -0,0 +1,34 @@ + .text + .file "941014-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $2 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/941014-2.c.s b/src/binaryen/test/torture-s/941014-2.c.s new file mode 100644 index 0000000000..8cceaa8d5a --- /dev/null +++ b/src/binaryen/test/torture-s/941014-2.c.s @@ -0,0 +1,117 @@ + .text + .file "941014-2.c" + .section .text.a1,"ax",@progbits + .hidden a1 # -- Begin function a1 + .globl a1 + .type a1,@function +a1: # @a1 + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size a1, .Lfunc_end0-a1 + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push10=, 0 + i32.const $push8=, 0 + i32.load $push7=, __stack_pointer($pop8) + i32.const $push9=, 16 + i32.sub $push17=, $pop7, $pop9 + tee_local $push16=, $1=, $pop17 + i32.store __stack_pointer($pop10), $pop16 + block + i32.const $push0=, 4 + i32.call $push15=, malloc@FUNCTION, $pop0 + tee_local $push14=, $0=, $pop15 + i32.load16_u $push1=, 0($pop14) + i32.const $push2=, 4096 + i32.lt_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.then + i32.load16_u $push4=, 0($0) + i32.store 0($1), $pop4 + i32.const $push5=, .L.str + i32.call $drop=, printf@FUNCTION, $pop5, $1 +.LBB1_2: # %if.end + end_block # label0: + i32.const $push6=, 256 + i32.store16 2($0), $pop6 + i32.const $push13=, 0 + i32.const $push11=, 16 + i32.add $push12=, $1, $pop11 + i32.store __stack_pointer($pop13), $pop12 + copy_local $push18=, $0 + # fallthrough-return: $pop18 + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push13=, 0 + i32.const $push11=, 0 + i32.load $push10=, __stack_pointer($pop11) + i32.const $push12=, 16 + i32.sub $push17=, $pop10, $pop12 + tee_local $push16=, $1=, $pop17 + i32.store __stack_pointer($pop13), $pop16 + block + i32.const $push0=, 4 + i32.call $push15=, malloc@FUNCTION, $pop0 + tee_local $push14=, $0=, $pop15 + i32.load16_u $push1=, 0($pop14) + i32.const $push2=, 4096 + i32.lt_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %if.then.i + i32.load16_u $push4=, 0($0) + i32.store 0($1), $pop4 + i32.const $push5=, .L.str + i32.call $drop=, printf@FUNCTION, $pop5, $1 +.LBB2_2: # %f.exit + end_block # label1: + i32.const $push6=, 256 + i32.store16 2($0), $pop6 + block + i32.load16_u $push7=, 2($0) + i32.const $push18=, 256 + i32.ne $push8=, $pop7, $pop18 + br_if 0, $pop8 # 0: down to label2 +# BB#3: # %if.end + i32.const $push9=, 0 + call exit@FUNCTION, $pop9 + unreachable +.LBB2_4: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "%d\n" + .size .L.str, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype malloc, i32, i32 + .functype printf, i32, i32 + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/941015-1.c.s b/src/binaryen/test/torture-s/941015-1.c.s new file mode 100644 index 0000000000..7f9178f520 --- /dev/null +++ b/src/binaryen/test/torture-s/941015-1.c.s @@ -0,0 +1,55 @@ + .text + .file "941015-1.c" + .section .text.foo1,"ax",@progbits + .hidden foo1 # -- Begin function foo1 + .globl foo1 + .type foo1,@function +foo1: # @foo1 + .param i64 + .result i32 +# BB#0: # %entry + i32.const $push3=, 1 + i32.const $push2=, 2 + i64.const $push0=, -4611686016279904256 + i64.lt_s $push1=, $0, $pop0 + i32.select $push4=, $pop3, $pop2, $pop1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size foo1, .Lfunc_end0-foo1 + # -- End function + .section .text.foo2,"ax",@progbits + .hidden foo2 # -- Begin function foo2 + .globl foo2 + .type foo2,@function +foo2: # @foo2 + .param i64 + .result i32 +# BB#0: # %entry + i32.const $push3=, 1 + i32.const $push2=, 2 + i64.const $push0=, -4611686016279904256 + i64.lt_u $push1=, $0, $pop0 + i32.select $push4=, $pop3, $pop2, $pop1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end1: + .size foo2, .Lfunc_end1-foo2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/941021-1.c.s b/src/binaryen/test/torture-s/941021-1.c.s new file mode 100644 index 0000000000..da5732c4e4 --- /dev/null +++ b/src/binaryen/test/torture-s/941021-1.c.s @@ -0,0 +1,48 @@ + .text + .file "941021-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, f64 + .result i32 +# BB#0: # %entry + i32.const $push0=, glob_dbl + i32.select $push1=, $0, $pop0, $0 + f64.store 0($pop1), $1 + copy_local $push2=, $0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i64.const $push0=, 4632951452917877965 + i64.store glob_dbl($pop1), $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden glob_dbl # @glob_dbl + .type glob_dbl,@object + .section .bss.glob_dbl,"aw",@nobits + .globl glob_dbl + .p2align 3 +glob_dbl: + .int64 0 # double 0 + .size glob_dbl, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/941025-1.c.s b/src/binaryen/test/torture-s/941025-1.c.s new file mode 100644 index 0000000000..5c2752cb58 --- /dev/null +++ b/src/binaryen/test/torture-s/941025-1.c.s @@ -0,0 +1,37 @@ + .text + .file "941025-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.and $push2=, $1, $pop0 + i32.const $push4=, 1 + i32.gt_s $push1=, $0, $pop4 + i32.select $push3=, $1, $pop2, $pop1 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/941031-1.c.s b/src/binaryen/test/torture-s/941031-1.c.s new file mode 100644 index 0000000000..7027cb7c99 --- /dev/null +++ b/src/binaryen/test/torture-s/941031-1.c.s @@ -0,0 +1,38 @@ + .text + .file "941031-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.shr_s $push4=, $1, $pop0 + tee_local $push3=, $2=, $pop4 + i32.add $push1=, $1, $pop3 + i32.xor $push2=, $pop1, $2 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/941101-1.c.s b/src/binaryen/test/torture-s/941101-1.c.s new file mode 100644 index 0000000000..3051386a7a --- /dev/null +++ b/src/binaryen/test/torture-s/941101-1.c.s @@ -0,0 +1,32 @@ + .text + .file "941101-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/941110-1.c.s b/src/binaryen/test/torture-s/941110-1.c.s new file mode 100644 index 0000000000..244a115e39 --- /dev/null +++ b/src/binaryen/test/torture-s/941110-1.c.s @@ -0,0 +1,33 @@ + .text + .file "941110-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/941202-1.c.s b/src/binaryen/test/torture-s/941202-1.c.s new file mode 100644 index 0000000000..3624b14dee --- /dev/null +++ b/src/binaryen/test/torture-s/941202-1.c.s @@ -0,0 +1,42 @@ + .text + .file "941202-1.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 3 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return $0 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950221-1.c.s b/src/binaryen/test/torture-s/950221-1.c.s new file mode 100644 index 0000000000..78ee488171 --- /dev/null +++ b/src/binaryen/test/torture-s/950221-1.c.s @@ -0,0 +1,131 @@ + .text + .file "950221-1.c" + .section .text.g1,"ax",@progbits + .hidden g1 # -- Begin function g1 + .globl g1 + .type g1,@function +g1: # @g1 + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $2 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size g1, .Lfunc_end0-g1 + # -- End function + .section .text.g2,"ax",@progbits + .hidden g2 # -- Begin function g2 + .globl g2 + .type g2,@function +g2: # @g2 + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, -559038737 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size g2, .Lfunc_end1-g2 + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push4=, 0 + i32.load $push1=, parsefile($pop4) + i32.load $push3=, 0($pop1) + tee_local $push2=, $0=, $pop3 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %entry + i32.const $push5=, 0 + i32.load $push0=, el($pop5) + i32.eqz $push6=, $pop0 + br_if 0, $pop6 # 0: down to label1 +# BB#2: # %if.end + return $0 +.LBB2_3: # %alabel + end_block # label1: + i32.call $drop=, g2@FUNCTION, $0 + unreachable + .endfunc +.Lfunc_end2: + .size f, .Lfunc_end2-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %alabel.i + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.store el($pop0), $pop5 + i32.const $push4=, 0 + i32.load $push1=, parsefile($pop4) + i32.const $push2=, -559038737 + i32.store 0($pop1), $pop2 + i32.const $push3=, -559038737 + i32.call $drop=, g2@FUNCTION, $pop3 + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden basepf # @basepf + .type basepf,@object + .section .bss.basepf,"aw",@nobits + .globl basepf + .p2align 2 +basepf: + .skip 8 + .size basepf, 8 + + .hidden parsefile # @parsefile + .type parsefile,@object + .section .data.parsefile,"aw",@progbits + .globl parsefile + .p2align 2 +parsefile: + .int32 basepf + .size parsefile, 4 + + .hidden el # @el + .type el,@object + .section .bss.el,"aw",@nobits + .globl el + .p2align 2 +el: + .int32 0 # 0x0 + .size el, 4 + + .hidden filler # @filler + .type filler,@object + .section .bss.filler,"aw",@nobits + .globl filler + .p2align 4 +filler: + .skip 522240 + .size filler, 522240 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950322-1.c.s b/src/binaryen/test/torture-s/950322-1.c.s new file mode 100644 index 0000000000..b06442ef21 --- /dev/null +++ b/src/binaryen/test/torture-s/950322-1.c.s @@ -0,0 +1,45 @@ + .text + .file "950322-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.load8_u $push1=, 0($0) + i32.load8_u $push0=, 1($0) + i32.sub $push11=, $pop1, $pop0 + tee_local $push10=, $0=, $pop11 + i32.const $push2=, 31 + i32.shr_s $push9=, $0, $pop2 + tee_local $push8=, $1=, $pop9 + i32.add $push3=, $pop10, $pop8 + i32.xor $push4=, $pop3, $1 + i32.const $push7=, 31 + i32.shr_u $push5=, $0, $pop7 + i32.add $push6=, $pop4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950426-1.c.s b/src/binaryen/test/torture-s/950426-1.c.s new file mode 100644 index 0000000000..d389e79bd0 --- /dev/null +++ b/src/binaryen/test/torture-s/950426-1.c.s @@ -0,0 +1,93 @@ + .text + .file "950426-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.then + i32.const $push1=, 0 + i32.const $push0=, s1 + i32.store p1($pop1), $pop0 + i32.const $push8=, 0 + i32.const $push2=, -1 + i32.store s1($pop8), $pop2 + i32.const $push7=, 0 + i32.const $push3=, 3 + i32.store i($pop7), $pop3 + i32.const $push6=, 0 + i32.const $push4=, .L.str.1+1 + i32.store s1+16($pop6), $pop4 + i32.const $push5=, 0 + call exit@FUNCTION, $pop5 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.func1,"ax",@progbits + .hidden func1 # -- Begin function func1 + .globl func1 + .type func1,@function +func1: # @func1 + .param i32 + .result i32 +# BB#0: # %entry + i32.load $push0=, 0($0) + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size func1, .Lfunc_end1-func1 + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size foo, .Lfunc_end2-foo + # -- End function + .hidden s1 # @s1 + .type s1,@object + .section .bss.s1,"aw",@nobits + .globl s1 + .p2align 2 +s1: + .skip 24 + .size s1, 24 + + .hidden p1 # @p1 + .type p1,@object + .section .bss.p1,"aw",@nobits + .globl p1 + .p2align 2 +p1: + .int32 0 + .size p1, 4 + + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + .type .L.str.1,@object # @.str.1 + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str.1: + .asciz "123" + .size .L.str.1, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950426-2.c.s b/src/binaryen/test/torture-s/950426-2.c.s new file mode 100644 index 0000000000..03975e7ffd --- /dev/null +++ b/src/binaryen/test/torture-s/950426-2.c.s @@ -0,0 +1,19 @@ + .text + .file "950426-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950503-1.c.s b/src/binaryen/test/torture-s/950503-1.c.s new file mode 100644 index 0000000000..5fac3c0a59 --- /dev/null +++ b/src/binaryen/test/torture-s/950503-1.c.s @@ -0,0 +1,19 @@ + .text + .file "950503-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950511-1.c.s b/src/binaryen/test/torture-s/950511-1.c.s new file mode 100644 index 0000000000..beea4980bc --- /dev/null +++ b/src/binaryen/test/torture-s/950511-1.c.s @@ -0,0 +1,19 @@ + .text + .file "950511-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950512-1.c.s b/src/binaryen/test/torture-s/950512-1.c.s new file mode 100644 index 0000000000..88399d3dc6 --- /dev/null +++ b/src/binaryen/test/torture-s/950512-1.c.s @@ -0,0 +1,51 @@ + .text + .file "950512-1.c" + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push1=, 2147483647 + i32.const $push0=, 2147483646 + i32.select $push2=, $pop1, $pop0, $0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param i32 + .result i64 +# BB#0: # %entry + i64.const $push1=, 9223372036854775807 + i64.const $push0=, 9223372036854775806 + i64.select $push2=, $pop1, $pop0, $0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size f2, .Lfunc_end1-f2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end12 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950605-1.c.s b/src/binaryen/test/torture-s/950605-1.c.s new file mode 100644 index 0000000000..cd4ed79a15 --- /dev/null +++ b/src/binaryen/test/torture-s/950605-1.c.s @@ -0,0 +1,44 @@ + .text + .file "950605-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 255 + i32.and $push1=, $0, $pop0 + i32.const $push3=, 255 + i32.ne $push2=, $pop1, $pop3 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + return $0 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950607-1.c.s b/src/binaryen/test/torture-s/950607-1.c.s new file mode 100644 index 0000000000..0ceebe9bd4 --- /dev/null +++ b/src/binaryen/test/torture-s/950607-1.c.s @@ -0,0 +1,19 @@ + .text + .file "950607-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950607-2.c.s b/src/binaryen/test/torture-s/950607-2.c.s new file mode 100644 index 0000000000..178e1eb2a6 --- /dev/null +++ b/src/binaryen/test/torture-s/950607-2.c.s @@ -0,0 +1,62 @@ + .text + .file "950607-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32 + .result i32 + .local i32, i64 +# BB#0: # %entry + i32.const $push21=, 0 + i32.const $push19=, 2 + i32.load $push10=, 4($2) + i32.load $push28=, 4($0) + tee_local $push27=, $3=, $pop28 + i32.sub $push11=, $pop10, $pop27 + i64.extend_s/i32 $push12=, $pop11 + i32.load $push7=, 0($1) + i32.load $push26=, 0($0) + tee_local $push25=, $0=, $pop26 + i32.sub $push8=, $pop7, $pop25 + i64.extend_s/i32 $push9=, $pop8 + i64.mul $push13=, $pop12, $pop9 + i32.load $push3=, 0($2) + i32.sub $push4=, $pop3, $0 + i64.extend_s/i32 $push5=, $pop4 + i32.load $push0=, 4($1) + i32.sub $push1=, $pop0, $3 + i64.extend_s/i32 $push2=, $pop1 + i64.mul $push6=, $pop5, $pop2 + i64.sub $push24=, $pop13, $pop6 + tee_local $push23=, $4=, $pop24 + i64.const $push16=, 63 + i64.shr_u $push17=, $pop23, $pop16 + i32.wrap/i64 $push18=, $pop17 + i32.sub $push20=, $pop19, $pop18 + i64.const $push14=, 0 + i64.gt_s $push15=, $4, $pop14 + i32.select $push22=, $pop21, $pop20, $pop15 + # fallthrough-return: $pop22 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950612-1.c.s b/src/binaryen/test/torture-s/950612-1.c.s new file mode 100644 index 0000000000..a12e366cc1 --- /dev/null +++ b/src/binaryen/test/torture-s/950612-1.c.s @@ -0,0 +1,95 @@ + .text + .file "950612-1.c" + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.shr_s $push4=, $0, $pop0 + tee_local $push3=, $1=, $pop4 + i32.add $push1=, $0, $pop3 + i32.xor $push2=, $pop1, $1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.shr_s $push4=, $0, $pop0 + tee_local $push3=, $1=, $pop4 + i32.add $push1=, $0, $pop3 + i32.xor $push2=, $pop1, $1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size f2, .Lfunc_end1-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .param i64 + .result i64 + .local i64 +# BB#0: # %entry + i64.const $push0=, 63 + i64.shr_s $push4=, $0, $pop0 + tee_local $push3=, $1=, $pop4 + i64.add $push1=, $0, $pop3 + i64.xor $push2=, $pop1, $1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end2: + .size f3, .Lfunc_end2-f3 + # -- End function + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 + .param i64 + .result i64 + .local i64 +# BB#0: # %entry + i64.const $push0=, 63 + i64.shr_s $push4=, $0, $pop0 + tee_local $push3=, $1=, $pop4 + i64.add $push1=, $0, $pop3 + i64.xor $push2=, $pop1, $1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end3: + .size f4, .Lfunc_end3-f4 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950621-1.c.s b/src/binaryen/test/torture-s/950621-1.c.s new file mode 100644 index 0000000000..905af4a60c --- /dev/null +++ b/src/binaryen/test/torture-s/950621-1.c.s @@ -0,0 +1,50 @@ + .text + .file "950621-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + block + block + i32.eqz $push7=, $0 + br_if 0, $pop7 # 0: down to label1 +# BB#1: # %land.lhs.true + i32.load $push0=, 0($0) + i32.const $push4=, -1 + i32.eq $push1=, $pop0, $pop4 + br_if 1, $pop1 # 1: down to label0 +.LBB0_2: # %land.end + end_block # label1: + i32.const $push5=, 0 + return $pop5 +.LBB0_3: # %land.rhs + end_block # label0: + i32.load $push2=, 4($0) + i32.const $push6=, -1 + i32.eq $push3=, $pop2, $pop6 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950628-1.c.s b/src/binaryen/test/torture-s/950628-1.c.s new file mode 100644 index 0000000000..08ac3dacd6 --- /dev/null +++ b/src/binaryen/test/torture-s/950628-1.c.s @@ -0,0 +1,55 @@ + .text + .file "950628-1.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32 +# BB#0: # %entry + i32.const $push0=, 3 + i32.store8 2($0), $pop0 + i32.const $push1=, 513 + i32.store16 0($0), $pop1 + i32.const $push2=, 4 + i32.store16 4($0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 +# BB#0: # %entry + i32.const $push0=, 3 + i32.store8 2($0), $pop0 + i32.const $push1=, 513 + i32.store16 0($0), $pop1 + i32.const $push2=, 4 + i32.store16 4($0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950704-1.c.s b/src/binaryen/test/torture-s/950704-1.c.s new file mode 100644 index 0000000000..d0f73dffc1 --- /dev/null +++ b/src/binaryen/test/torture-s/950704-1.c.s @@ -0,0 +1,82 @@ + .text + .file "950704-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i64, i64 + .result i64 + .local i64 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.store errflag($pop0), $pop11 + i64.add $2=, $1, $0 + block + block + block + i64.const $push10=, 0 + i64.lt_s $push1=, $0, $pop10 + br_if 0, $pop1 # 0: down to label2 +# BB#1: # %if.then + i64.const $push12=, 0 + i64.lt_s $push5=, $1, $pop12 + br_if 2, $pop5 # 2: down to label0 +# BB#2: # %if.then + i64.const $push6=, -1 + i64.le_s $push7=, $2, $pop6 + br_if 1, $pop7 # 1: down to label1 + br 2 # 2: down to label0 +.LBB0_3: # %if.else + end_block # label2: + i64.const $push13=, 0 + i64.gt_s $push2=, $1, $pop13 + br_if 1, $pop2 # 1: down to label0 +# BB#4: # %if.else + i64.const $push3=, 0 + i64.lt_s $push4=, $2, $pop3 + br_if 1, $pop4 # 1: down to label0 +.LBB0_5: # %if.end9 + end_block # label1: + i32.const $push9=, 0 + i32.const $push8=, 1 + i32.store errflag($pop9), $pop8 + i64.const $2=, 0 +.LBB0_6: # %cleanup + end_block # label0: + copy_local $push14=, $2 + # fallthrough-return: $pop14 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end28 + i32.const $push0=, 0 + i32.const $push2=, 0 + i32.store errflag($pop0), $pop2 + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden errflag # @errflag + .type errflag,@object + .section .bss.errflag,"aw",@nobits + .globl errflag + .p2align 2 +errflag: + .int32 0 # 0x0 + .size errflag, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950706-1.c.s b/src/binaryen/test/torture-s/950706-1.c.s new file mode 100644 index 0000000000..73dc02270c --- /dev/null +++ b/src/binaryen/test/torture-s/950706-1.c.s @@ -0,0 +1,37 @@ + .text + .file "950706-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.gt_s $push3=, $0, $pop2 + i32.const $push0=, 31 + i32.shr_u $push1=, $0, $pop0 + i32.sub $push4=, $pop3, $pop1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end8 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950710-1.c.s b/src/binaryen/test/torture-s/950710-1.c.s new file mode 100644 index 0000000000..adeafcee1d --- /dev/null +++ b/src/binaryen/test/torture-s/950710-1.c.s @@ -0,0 +1,72 @@ + .text + .file "950710-1.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call f@FUNCTION + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .section .text.f,"ax",@progbits + .type f,@function # -- Begin function f +f: # @f + .local i32, i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 32 + i32.sub $push19=, $pop5, $pop7 + tee_local $push18=, $1=, $pop19 + i32.store __stack_pointer($pop8), $pop18 + block + i32.const $push12=, 16 + i32.add $push13=, $1, $pop12 + i32.sub $push17=, $1, $pop13 + tee_local $push16=, $0=, $pop17 + i32.const $push0=, 31 + i32.shr_s $push15=, $0, $pop0 + tee_local $push14=, $0=, $pop15 + i32.add $push1=, $pop16, $pop14 + i32.xor $push2=, $pop1, $0 + i32.const $push3=, 11 + i32.le_u $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + i32.const $push11=, 0 + i32.const $push9=, 32 + i32.add $push10=, $1, $pop9 + i32.store __stack_pointer($pop11), $pop10 + return +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size f, .Lfunc_end2-f + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/950714-1.c.s b/src/binaryen/test/torture-s/950714-1.c.s new file mode 100644 index 0000000000..338d88e2aa --- /dev/null +++ b/src/binaryen/test/torture-s/950714-1.c.s @@ -0,0 +1,151 @@ + .text + .file "950714-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push46=, 0 + i32.load $push1=, array($pop46) + i32.sub $8=, $pop0, $pop1 + i32.const $push45=, 0 + i32.const $push44=, 0 + i32.load $push2=, array+4($pop44) + i32.sub $7=, $pop45, $pop2 + i32.const $push43=, 0 + i32.const $push42=, 0 + i32.load $push3=, array+8($pop42) + i32.sub $6=, $pop43, $pop3 + i32.const $push41=, 0 + i32.const $push40=, 0 + i32.load $push4=, array+12($pop40) + i32.sub $5=, $pop41, $pop4 + i32.const $push39=, 0 + i32.const $push38=, 0 + i32.load $push5=, array+16($pop38) + i32.sub $4=, $pop39, $pop5 + i32.const $push37=, 0 + i32.const $push36=, 0 + i32.load $push6=, array+20($pop36) + i32.sub $3=, $pop37, $pop6 + i32.const $push35=, 0 + i32.const $push34=, 0 + i32.load $push7=, array+24($pop34) + i32.sub $2=, $pop35, $pop7 + i32.const $push33=, 0 + i32.const $push32=, 0 + i32.load $push8=, array+28($pop32) + i32.sub $1=, $pop33, $pop8 + i32.const $push31=, 0 + i32.const $push30=, 0 + i32.load $push9=, array+32($pop30) + i32.sub $0=, $pop31, $pop9 + i32.const $9=, -1 +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + block + loop # label2: + i32.add $push18=, $8, $9 + i32.const $push47=, -1 + i32.eq $push19=, $pop18, $pop47 + br_if 1, $pop19 # 1: down to label1 +# BB#2: # %for.body + # in Loop: Header=BB0_1 Depth=1 + i32.add $push10=, $7, $9 + i32.const $push48=, -1 + i32.eq $push20=, $pop10, $pop48 + br_if 1, $pop20 # 1: down to label1 +# BB#3: # %for.body + # in Loop: Header=BB0_1 Depth=1 + i32.add $push11=, $6, $9 + i32.const $push49=, -1 + i32.eq $push21=, $pop11, $pop49 + br_if 1, $pop21 # 1: down to label1 +# BB#4: # %for.body + # in Loop: Header=BB0_1 Depth=1 + i32.add $push12=, $5, $9 + i32.const $push50=, -1 + i32.eq $push22=, $pop12, $pop50 + br_if 1, $pop22 # 1: down to label1 +# BB#5: # %for.body + # in Loop: Header=BB0_1 Depth=1 + i32.add $push13=, $4, $9 + i32.const $push51=, -1 + i32.eq $push23=, $pop13, $pop51 + br_if 1, $pop23 # 1: down to label1 +# BB#6: # %for.body + # in Loop: Header=BB0_1 Depth=1 + i32.add $push14=, $3, $9 + i32.const $push52=, -1 + i32.eq $push24=, $pop14, $pop52 + br_if 1, $pop24 # 1: down to label1 +# BB#7: # %for.body + # in Loop: Header=BB0_1 Depth=1 + i32.add $push15=, $2, $9 + i32.const $push53=, -1 + i32.eq $push25=, $pop15, $pop53 + br_if 1, $pop25 # 1: down to label1 +# BB#8: # %for.body + # in Loop: Header=BB0_1 Depth=1 + i32.add $push16=, $1, $9 + i32.const $push54=, -1 + i32.eq $push26=, $pop16, $pop54 + br_if 1, $pop26 # 1: down to label1 +# BB#9: # %for.body + # in Loop: Header=BB0_1 Depth=1 + i32.add $push17=, $0, $9 + i32.const $push55=, -1 + i32.eq $push27=, $pop17, $pop55 + br_if 1, $pop27 # 1: down to label1 +# BB#10: # %for.cond1.8 + # in Loop: Header=BB0_1 Depth=1 + i32.const $push59=, 1 + i32.add $push58=, $9, $pop59 + tee_local $push57=, $9=, $pop58 + i32.const $push56=, 9 + i32.lt_u $push28=, $pop57, $pop56 + br_if 0, $pop28 # 0: up to label2 + br 2 # 2: down to label0 +.LBB0_11: # %label + end_loop + end_block # label1: + br_if 0, $9 # 0: down to label0 +# BB#12: # %if.end9 + i32.const $push29=, 0 + call exit@FUNCTION, $pop29 + unreachable +.LBB0_13: # %if.then8 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden array # @array + .type array,@object + .section .data.array,"aw",@progbits + .globl array + .p2align 4 +array: + .int32 1 # 0x1 + .int32 1 # 0x1 + .int32 1 # 0x1 + .int32 1 # 0x1 + .int32 1 # 0x1 + .int32 1 # 0x1 + .int32 1 # 0x1 + .int32 1 # 0x1 + .int32 1 # 0x1 + .int32 1 # 0x1 + .size array, 40 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950809-1.c.s b/src/binaryen/test/torture-s/950809-1.c.s new file mode 100644 index 0000000000..d2f255bdad --- /dev/null +++ b/src/binaryen/test/torture-s/950809-1.c.s @@ -0,0 +1,78 @@ + .text + .file "950809-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 16 + i32.add $push5=, $0, $pop0 + tee_local $push4=, $1=, $pop5 + i32.load $2=, 0($pop4) + i32.load $3=, 12($0) + i32.load $push3=, 8($0) + tee_local $push2=, $4=, $pop3 + i32.load $5=, 8($pop2) + i32.load $push1=, 0($4) + i32.store 8($4), $pop1 + i32.store 0($4), $2 + i32.store 0($0), $4 + i32.load $4=, 4($4) + i32.store 12($0), $5 + i32.store 0($1), $3 + i32.store 4($0), $4 + copy_local $push6=, $0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push6=, 0 + i32.load $push5=, main.sc($pop6) + tee_local $push4=, $0=, $pop5 + i32.store main.sc+8($pop7), $pop4 + i32.const $push3=, 0 + i32.const $push0=, 11 + i32.store main.sc($pop3), $pop0 + block + i32.const $push1=, 2 + i32.ne $push2=, $0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push8=, 0 + call exit@FUNCTION, $pop8 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type main.sc,@object # @main.sc + .section .data.main.sc,"aw",@progbits + .p2align 2 +main.sc: + .int32 2 # 0x2 + .int32 3 # 0x3 + .int32 4 # 0x4 + .size main.sc, 12 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950906-1.c.s b/src/binaryen/test/torture-s/950906-1.c.s new file mode 100644 index 0000000000..00c4b48121 --- /dev/null +++ b/src/binaryen/test/torture-s/950906-1.c.s @@ -0,0 +1,49 @@ + .text + .file "950906-1.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950915-1.c.s b/src/binaryen/test/torture-s/950915-1.c.s new file mode 100644 index 0000000000..422e1de734 --- /dev/null +++ b/src/binaryen/test/torture-s/950915-1.c.s @@ -0,0 +1,75 @@ + .text + .file "950915-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load32_s $push2=, b($pop0) + i32.const $push7=, 0 + i64.load32_s $push1=, a($pop7) + i64.mul $push3=, $pop2, $pop1 + i64.const $push4=, 16 + i64.shr_u $push5=, $pop3, $pop4 + i32.wrap/i64 $push6=, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push9=, 0 + i64.load32_s $push1=, b($pop9) + i32.const $push8=, 0 + i64.load32_s $push0=, a($pop8) + i64.mul $push2=, $pop1, $pop0 + i64.const $push3=, 16 + i64.shr_u $push4=, $pop2, $pop3 + i32.wrap/i64 $push5=, $pop4 + i32.const $push6=, -1 + i32.gt_s $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %if.then + call abort@FUNCTION + unreachable +.LBB1_2: # %if.end + end_block # label0: + i32.const $push10=, 0 + call exit@FUNCTION, $pop10 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 100000 # 0x186a0 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .data.b,"aw",@progbits + .globl b + .p2align 2 +b: + .int32 21475 # 0x53e3 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/950929-1.c.s b/src/binaryen/test/torture-s/950929-1.c.s new file mode 100644 index 0000000000..5623d4722c --- /dev/null +++ b/src/binaryen/test/torture-s/950929-1.c.s @@ -0,0 +1,34 @@ + .text + .file "950929-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/951003-1.c.s b/src/binaryen/test/torture-s/951003-1.c.s new file mode 100644 index 0000000000..5548cb60f6 --- /dev/null +++ b/src/binaryen/test/torture-s/951003-1.c.s @@ -0,0 +1,46 @@ + .text + .file "951003-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 12 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size g, .Lfunc_end1-g + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/951115-1.c.s b/src/binaryen/test/torture-s/951115-1.c.s new file mode 100644 index 0000000000..88a9691a8f --- /dev/null +++ b/src/binaryen/test/torture-s/951115-1.c.s @@ -0,0 +1,65 @@ + .text + .file "951115-1.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store var($pop1), $pop0 + copy_local $push2=, $0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store var($pop1), $pop0 + copy_local $push2=, $0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store var($pop1), $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden var # @var + .type var,@object + .section .bss.var,"aw",@nobits + .globl var + .p2align 2 +var: + .int32 0 # 0x0 + .size var, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/951204-1.c.s b/src/binaryen/test/torture-s/951204-1.c.s new file mode 100644 index 0000000000..9e3e0e6779 --- /dev/null +++ b/src/binaryen/test/torture-s/951204-1.c.s @@ -0,0 +1,35 @@ + .text + .file "951204-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 120 + i32.store8 0($0), $pop0 + copy_local $push1=, $0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960116-1.c.s b/src/binaryen/test/torture-s/960116-1.c.s new file mode 100644 index 0000000000..64e6f859e6 --- /dev/null +++ b/src/binaryen/test/torture-s/960116-1.c.s @@ -0,0 +1,46 @@ + .text + .file "960116-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 1 + i32.and $push0=, $0, $pop3 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %land.lhs.true + i32.load $push1=, 0($0) + i32.eqz $push5=, $pop1 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %return + i32.const $push4=, 1 + return $pop4 +.LBB0_3: # %if.end + end_block # label0: + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960117-1.c.s b/src/binaryen/test/torture-s/960117-1.c.s new file mode 100644 index 0000000000..b6c09114ba --- /dev/null +++ b/src/binaryen/test/torture-s/960117-1.c.s @@ -0,0 +1,83 @@ + .text + .file "960117-1.c" + .section .text.get_id,"ax",@progbits + .hidden get_id # -- Begin function get_id + .globl get_id + .type get_id,@function +get_id: # @get_id + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, curval+2($pop0):p2align=1 + i32.store8 0($pop1), $0 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size get_id, .Lfunc_end0-get_id + # -- End function + .section .text.get_tok,"ax",@progbits + .hidden get_tok # -- Begin function get_tok + .globl get_tok + .type get_tok,@function +get_tok: # @get_tok + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, id_space + i32.store curval+2($pop1):p2align=1, $pop0 + i32.const $push6=, 0 + i32.const $push2=, 99 + i32.store8 id_space($pop6), $pop2 + i32.const $push5=, 0 + i32.const $push4=, 0 + i32.store16 curval($pop5), $pop4 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size get_tok, .Lfunc_end1-get_tok + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, id_space + i32.store curval+2($pop1):p2align=1, $pop0 + i32.const $push6=, 0 + i32.const $push2=, 99 + i32.store8 id_space($pop6), $pop2 + i32.const $push5=, 0 + i32.const $push4=, 0 + i32.store16 curval($pop5), $pop4 + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden curval # @curval + .type curval,@object + .section .bss.curval,"aw",@nobits + .globl curval + .p2align 1 +curval: + .skip 6 + .size curval, 6 + + .type id_space,@object # @id_space + .section .bss.id_space,"aw",@nobits + .p2align 4 +id_space: + .skip 66 + .size id_space, 66 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960209-1.c.s b/src/binaryen/test/torture-s/960209-1.c.s new file mode 100644 index 0000000000..5c661cfe55 --- /dev/null +++ b/src/binaryen/test/torture-s/960209-1.c.s @@ -0,0 +1,87 @@ + .text + .file "960209-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -1 + i32.const $push7=, 0 + i32.select $1=, $pop0, $pop7, $1 + block + i32.const $push6=, 0 + i32.load $push1=, yabba($pop6) + i32.eqz $push9=, $pop1 + br_if 0, $pop9 # 0: down to label0 +# BB#1: # %cleanup + return $1 +.LBB0_2: # %if.end24 + end_block # label0: + i32.const $push8=, 0 + i32.const $push2=, 255 + i32.and $push3=, $0, $pop2 + i32.const $push4=, an_array + i32.add $push5=, $pop3, $pop4 + i32.store a_ptr($pop8), $pop5 + copy_local $push10=, $1 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push2=, 0 + i32.load $push0=, yabba($pop2) + br_if 0, $pop0 # 0: down to label1 +# BB#1: # %if.end24.i + i32.const $push3=, 0 + i32.const $push1=, an_array+1 + i32.store a_ptr($pop3), $pop1 +.LBB1_2: # %if.end + end_block # label1: + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden yabba # @yabba + .type yabba,@object + .section .data.yabba,"aw",@progbits + .globl yabba + .p2align 2 +yabba: + .int32 1 # 0x1 + .size yabba, 4 + + .hidden an_array # @an_array + .type an_array,@object + .section .bss.an_array,"aw",@nobits + .globl an_array +an_array: + .skip 5 + .size an_array, 5 + + .hidden a_ptr # @a_ptr + .type a_ptr,@object + .section .bss.a_ptr,"aw",@nobits + .globl a_ptr + .p2align 2 +a_ptr: + .int32 0 + .size a_ptr, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960215-1.c.s b/src/binaryen/test/torture-s/960215-1.c.s new file mode 100644 index 0000000000..dbb8b16802 --- /dev/null +++ b/src/binaryen/test/torture-s/960215-1.c.s @@ -0,0 +1,383 @@ + .text + .file "960215-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i32 +# BB#0: # %entry + i32.const $push54=, 0 + i32.const $push52=, 0 + i32.load $push51=, __stack_pointer($pop52) + i32.const $push53=, 320 + i32.sub $push218=, $pop51, $pop53 + tee_local $push217=, $12=, $pop218 + i32.store __stack_pointer($pop54), $pop217 + i32.const $push55=, 304 + i32.add $push56=, $12, $pop55 + i32.const $push216=, 0 + i64.load $push215=, C($pop216) + tee_local $push214=, $3=, $pop215 + i32.const $push213=, 0 + i64.load $push212=, C+8($pop213) + tee_local $push211=, $2=, $pop212 + i32.const $push210=, 0 + i64.load $push209=, U($pop210) + tee_local $push208=, $1=, $pop209 + i32.const $push207=, 0 + i64.load $push206=, U+8($pop207) + tee_local $push205=, $0=, $pop206 + call __addtf3@FUNCTION, $pop56, $pop214, $pop211, $pop208, $pop205 + i32.const $push57=, 240 + i32.add $push58=, $12, $pop57 + call __subtf3@FUNCTION, $pop58, $3, $2, $1, $0 + i32.const $push61=, 288 + i32.add $push62=, $12, $pop61 + i64.load $push204=, 304($12) + tee_local $push203=, $11=, $pop204 + i32.const $push59=, 304 + i32.add $push60=, $12, $pop59 + i32.const $push0=, 8 + i32.add $push1=, $pop60, $pop0 + i64.load $push202=, 0($pop1) + tee_local $push201=, $10=, $pop202 + call __addtf3@FUNCTION, $pop62, $1, $0, $pop203, $pop201 + i32.const $push63=, 128 + i32.add $push64=, $12, $pop63 + i32.const $push200=, 0 + i64.load $push199=, Y2($pop200) + tee_local $push198=, $3=, $pop199 + i32.const $push197=, 0 + i64.load $push196=, Y2+8($pop197) + tee_local $push195=, $2=, $pop196 + call __addtf3@FUNCTION, $pop64, $1, $0, $pop198, $pop195 + i32.const $push67=, 224 + i32.add $push68=, $12, $pop67 + i64.load $push194=, 240($12) + tee_local $push193=, $5=, $pop194 + i32.const $push65=, 240 + i32.add $push66=, $12, $pop65 + i32.const $push192=, 8 + i32.add $push2=, $pop66, $pop192 + i64.load $push191=, 0($pop2) + tee_local $push190=, $4=, $pop191 + call __subtf3@FUNCTION, $pop68, $pop193, $pop190, $1, $0 + i32.const $push71=, 272 + i32.add $push72=, $12, $pop71 + i64.load $push189=, 288($12) + tee_local $push188=, $7=, $pop189 + i32.const $push69=, 288 + i32.add $push70=, $12, $pop69 + i32.const $push187=, 8 + i32.add $push3=, $pop70, $pop187 + i64.load $push186=, 0($pop3) + tee_local $push185=, $6=, $pop186 + call __addtf3@FUNCTION, $pop72, $1, $0, $pop188, $pop185 + i32.const $push73=, 16 + i32.add $push74=, $12, $pop73 + i32.const $push184=, 0 + i64.load $push183=, Y1($pop184) + tee_local $push182=, $9=, $pop183 + i32.const $push181=, 0 + i64.load $push180=, Y1+8($pop181) + tee_local $push179=, $8=, $pop180 + call __multf3@FUNCTION, $pop74, $3, $2, $pop182, $pop179 + i32.const $push75=, 112 + i32.add $push76=, $12, $pop75 + call __multf3@FUNCTION, $pop76, $5, $4, $9, $8 + i32.const $push79=, 48 + i32.add $push80=, $12, $pop79 + i64.load $push6=, 128($12) + i32.const $push77=, 128 + i32.add $push78=, $12, $pop77 + i32.const $push178=, 8 + i32.add $push4=, $pop78, $pop178 + i64.load $push5=, 0($pop4) + call __multf3@FUNCTION, $pop80, $pop6, $pop5, $9, $8 + i32.const $push81=, 192 + i32.add $push82=, $12, $pop81 + call __multf3@FUNCTION, $pop82, $11, $10, $3, $2 + i32.const $push85=, 80 + i32.add $push86=, $12, $pop85 + i64.load $push177=, 224($12) + tee_local $push176=, $11=, $pop177 + i32.const $push83=, 224 + i32.add $push84=, $12, $pop83 + i32.const $push175=, 8 + i32.add $push7=, $pop84, $pop175 + i64.load $push174=, 0($pop7) + tee_local $push173=, $10=, $pop174 + call __multf3@FUNCTION, $pop86, $pop176, $pop173, $9, $8 + i32.const $push87=, 208 + i32.add $push88=, $12, $pop87 + call __subtf3@FUNCTION, $pop88, $1, $0, $11, $10 + i32.const $push89=, 160 + i32.add $push90=, $12, $pop89 + call __multf3@FUNCTION, $pop90, $3, $2, $7, $6 + i32.const $push93=, 256 + i32.add $push94=, $12, $pop93 + i64.load $push172=, 272($12) + tee_local $push171=, $9=, $pop172 + i32.const $push91=, 272 + i32.add $push92=, $12, $pop91 + i32.const $push170=, 8 + i32.add $push8=, $pop92, $pop170 + i64.load $push169=, 0($pop8) + tee_local $push168=, $8=, $pop169 + call __addtf3@FUNCTION, $pop94, $1, $0, $pop171, $pop168 + i64.load $push13=, 16($12) + i32.const $push95=, 16 + i32.add $push96=, $12, $pop95 + i32.const $push167=, 8 + i32.add $push9=, $pop96, $pop167 + i64.load $push10=, 0($pop9) + i64.const $push12=, 0 + i64.const $push11=, -4612248968380809216 + call __addtf3@FUNCTION, $12, $pop13, $pop10, $pop12, $pop11 + i32.const $push99=, 96 + i32.add $push100=, $12, $pop99 + i64.load $push16=, 112($12) + i32.const $push97=, 112 + i32.add $push98=, $12, $pop97 + i32.const $push166=, 8 + i32.add $push14=, $pop98, $pop166 + i64.load $push15=, 0($pop14) + call __subtf3@FUNCTION, $pop100, $pop16, $pop15, $11, $10 + i32.const $push103=, 32 + i32.add $push104=, $12, $pop103 + i64.load $push19=, 48($12) + i32.const $push101=, 48 + i32.add $push102=, $12, $pop101 + i32.const $push165=, 8 + i32.add $push17=, $pop102, $pop165 + i64.load $push18=, 0($pop17) + call __subtf3@FUNCTION, $pop104, $pop19, $pop18, $3, $2 + i32.const $push107=, 176 + i32.add $push108=, $12, $pop107 + i64.load $push22=, 192($12) + i32.const $push105=, 192 + i32.add $push106=, $12, $pop105 + i32.const $push164=, 8 + i32.add $push20=, $pop106, $pop164 + i64.load $push21=, 0($pop20) + call __subtf3@FUNCTION, $pop108, $pop22, $pop21, $9, $8 + i32.const $push113=, 64 + i32.add $push114=, $12, $pop113 + i64.load $push28=, 208($12) + i32.const $push111=, 208 + i32.add $push112=, $12, $pop111 + i32.const $push163=, 8 + i32.add $push25=, $pop112, $pop163 + i64.load $push26=, 0($pop25) + i64.load $push27=, 80($12) + i32.const $push109=, 80 + i32.add $push110=, $12, $pop109 + i32.const $push162=, 8 + i32.add $push23=, $pop110, $pop162 + i64.load $push24=, 0($pop23) + call __addtf3@FUNCTION, $pop114, $pop28, $pop26, $pop27, $pop24 + i32.const $push119=, 144 + i32.add $push120=, $12, $pop119 + i64.load $push161=, 160($12) + tee_local $push160=, $1=, $pop161 + i32.const $push115=, 160 + i32.add $push116=, $12, $pop115 + i32.const $push159=, 8 + i32.add $push29=, $pop116, $pop159 + i64.load $push158=, 0($pop29) + tee_local $push157=, $0=, $pop158 + i64.load $push32=, 256($12) + i32.const $push117=, 256 + i32.add $push118=, $12, $pop117 + i32.const $push156=, 8 + i32.add $push30=, $pop118, $pop156 + i64.load $push31=, 0($pop30) + call __subtf3@FUNCTION, $pop120, $pop160, $pop157, $pop32, $pop31 + i32.const $push155=, 0 + i32.const $push154=, 8 + i32.add $push33=, $12, $pop154 + i64.load $push34=, 0($pop33) + i64.store Y1+8($pop155), $pop34 + i32.const $push153=, 0 + i64.load $push35=, 0($12) + i64.store Y1($pop153), $pop35 + i32.const $push152=, 0 + i64.store S+8($pop152), $0 + i32.const $push151=, 0 + i64.store S($pop151), $1 + i32.const $push150=, 0 + i32.const $push121=, 96 + i32.add $push122=, $12, $pop121 + i32.const $push149=, 8 + i32.add $push36=, $pop122, $pop149 + i64.load $push37=, 0($pop36) + i64.store T+8($pop150), $pop37 + i32.const $push148=, 0 + i64.load $push38=, 96($12) + i64.store T($pop148), $pop38 + i32.const $push147=, 0 + i32.const $push123=, 32 + i32.add $push124=, $12, $pop123 + i32.const $push146=, 8 + i32.add $push39=, $pop124, $pop146 + i64.load $push40=, 0($pop39) + i64.store R+8($pop147), $pop40 + i32.const $push145=, 0 + i64.load $push41=, 32($12) + i64.store R($pop145), $pop41 + i32.const $push144=, 0 + i32.const $push125=, 176 + i32.add $push126=, $12, $pop125 + i32.const $push143=, 8 + i32.add $push42=, $pop126, $pop143 + i64.load $push43=, 0($pop42) + i64.store X+8($pop144), $pop43 + i32.const $push142=, 0 + i64.load $push44=, 176($12) + i64.store X($pop142), $pop44 + i32.const $push141=, 0 + i32.const $push127=, 64 + i32.add $push128=, $12, $pop127 + i32.const $push140=, 8 + i32.add $push45=, $pop128, $pop140 + i64.load $push46=, 0($pop45) + i64.store Y+8($pop141), $pop46 + i32.const $push139=, 0 + i64.load $push47=, 64($12) + i64.store Y($pop139), $pop47 + i32.const $push138=, 0 + i32.const $push129=, 144 + i32.add $push130=, $12, $pop129 + i32.const $push137=, 8 + i32.add $push48=, $pop130, $pop137 + i64.load $push136=, 0($pop48) + tee_local $push135=, $1=, $pop136 + i64.store Z+8($pop138), $pop135 + i32.const $push134=, 0 + i64.load $push133=, 144($12) + tee_local $push132=, $0=, $pop133 + i64.store Z($pop134), $pop132 + block + i64.const $push131=, 0 + i64.const $push49=, 4612108230892453888 + i32.call $push50=, __eqtf2@FUNCTION, $0, $1, $pop131, $pop49 + i32.eqz $push220=, $pop50 + br_if 0, $pop220 # 0: down to label0 +# BB#1: # %if.then + call abort@FUNCTION + unreachable +.LBB0_2: # %if.end + end_block # label0: + i32.const $push219=, 0 + call exit@FUNCTION, $pop219 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden C # @C + .type C,@object + .section .data.C,"aw",@progbits + .globl C + .p2align 4 +C: + .int64 0 # fp128 2 + .int64 4611686018427387904 + .size C, 16 + + .hidden U # @U + .type U,@object + .section .data.U,"aw",@progbits + .globl U + .p2align 4 +U: + .int64 0 # fp128 1 + .int64 4611404543450677248 + .size U, 16 + + .hidden Y2 # @Y2 + .type Y2,@object + .section .data.Y2,"aw",@progbits + .globl Y2 + .p2align 4 +Y2: + .int64 0 # fp128 3 + .int64 4611826755915743232 + .size Y2, 16 + + .hidden Y1 # @Y1 + .type Y1,@object + .section .data.Y1,"aw",@progbits + .globl Y1 + .p2align 4 +Y1: + .int64 0 # fp128 1 + .int64 4611404543450677248 + .size Y1, 16 + + .hidden X # @X + .type X,@object + .section .bss.X,"aw",@nobits + .globl X + .p2align 4 +X: + .int64 0 # fp128 0 + .int64 0 + .size X, 16 + + .hidden Y # @Y + .type Y,@object + .section .bss.Y,"aw",@nobits + .globl Y + .p2align 4 +Y: + .int64 0 # fp128 0 + .int64 0 + .size Y, 16 + + .hidden Z # @Z + .type Z,@object + .section .bss.Z,"aw",@nobits + .globl Z + .p2align 4 +Z: + .int64 0 # fp128 0 + .int64 0 + .size Z, 16 + + .hidden T # @T + .type T,@object + .section .bss.T,"aw",@nobits + .globl T + .p2align 4 +T: + .int64 0 # fp128 0 + .int64 0 + .size T, 16 + + .hidden R # @R + .type R,@object + .section .bss.R,"aw",@nobits + .globl R + .p2align 4 +R: + .int64 0 # fp128 0 + .int64 0 + .size R, 16 + + .hidden S # @S + .type S,@object + .section .bss.S,"aw",@nobits + .globl S + .p2align 4 +S: + .int64 0 # fp128 0 + .int64 0 + .size S, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960218-1.c.s b/src/binaryen/test/torture-s/960218-1.c.s new file mode 100644 index 0000000000..6a6d8a06ae --- /dev/null +++ b/src/binaryen/test/torture-s/960218-1.c.s @@ -0,0 +1,72 @@ + .text + .file "960218-1.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store glob($pop0), $0 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push3=, -1 + i32.eq $push0=, $0, $pop3 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %while.cond.while.end_crit_edge + i32.const $push2=, 0 + i32.const $push4=, -1 + i32.xor $push1=, $0, $pop4 + i32.store glob($pop2), $pop1 +.LBB1_2: # %while.end + end_block # label0: + copy_local $push5=, $0 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, -4 + i32.store glob($pop1), $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden glob # @glob + .type glob,@object + .section .bss.glob,"aw",@nobits + .globl glob + .p2align 2 +glob: + .int32 0 # 0x0 + .size glob, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960219-1.c.s b/src/binaryen/test/torture-s/960219-1.c.s new file mode 100644 index 0000000000..ee8754ae1a --- /dev/null +++ b/src/binaryen/test/torture-s/960219-1.c.s @@ -0,0 +1,40 @@ + .text + .file "960219-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + block + br_if 0, $0 # 0: down to label0 +# BB#1: # %if.end + return $0 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960301-1.c.s b/src/binaryen/test/torture-s/960301-1.c.s new file mode 100644 index 0000000000..d2c406f05c --- /dev/null +++ b/src/binaryen/test/torture-s/960301-1.c.s @@ -0,0 +1,82 @@ + .text + .file "960301-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push14=, 0 + i32.load16_u $push13=, foo($pop14) + tee_local $push12=, $1=, $pop13 + i32.const $push1=, 12 + i32.shr_u $push2=, $pop12, $pop1 + i32.store oldfoo($pop0), $pop2 + i32.const $push11=, 0 + i32.const $push4=, 4095 + i32.and $push5=, $1, $pop4 + i32.const $push10=, 12 + i32.shl $push3=, $0, $pop10 + i32.or $push6=, $pop5, $pop3 + i32.store16 foo($pop11), $pop6 + i32.const $push8=, 1 + i32.const $push7=, 2 + i32.select $push9=, $pop8, $pop7, $0 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %if.end + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load16_u $push10=, foo($pop11) + tee_local $push9=, $0=, $pop10 + i32.const $push1=, 12 + i32.shr_u $push2=, $pop9, $pop1 + i32.store oldfoo($pop0), $pop2 + i32.const $push8=, 0 + i32.const $push3=, 4095 + i32.and $push4=, $0, $pop3 + i32.const $push5=, 4096 + i32.or $push6=, $pop4, $pop5 + i32.store16 foo($pop8), $pop6 + i32.const $push7=, 0 + call exit@FUNCTION, $pop7 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden foo # @foo + .type foo,@object + .section .bss.foo,"aw",@nobits + .globl foo + .p2align 2 +foo: + .skip 4 + .size foo, 4 + + .hidden oldfoo # @oldfoo + .type oldfoo,@object + .section .bss.oldfoo,"aw",@nobits + .globl oldfoo + .p2align 2 +oldfoo: + .int32 0 # 0x0 + .size oldfoo, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960302-1.c.s b/src/binaryen/test/torture-s/960302-1.c.s new file mode 100644 index 0000000000..714fdf51fd --- /dev/null +++ b/src/binaryen/test/torture-s/960302-1.c.s @@ -0,0 +1,67 @@ + .text + .file "960302-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push3=, 1 + i32.const $push5=, -1 + i32.const $push0=, 0 + i32.load $push1=, a($pop0) + i32.const $push2=, 2 + i32.rem_s $push11=, $pop1, $pop2 + tee_local $push10=, $0=, $pop11 + i32.const $push9=, 1 + i32.eq $push4=, $pop10, $pop9 + i32.select $push6=, $pop3, $pop5, $pop4 + i32.const $push8=, 0 + i32.select $push7=, $pop6, $pop8, $0 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push5=, 0 + i32.load $push0=, a($pop5) + i32.const $push1=, 2 + i32.rem_s $push2=, $pop0, $pop1 + i32.const $push3=, 1 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 1 # 0x1 + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960311-1.c.s b/src/binaryen/test/torture-s/960311-1.c.s new file mode 100644 index 0000000000..942f414899 --- /dev/null +++ b/src/binaryen/test/torture-s/960311-1.c.s @@ -0,0 +1,102 @@ + .text + .file "960311-1.c" + .section .text.a1,"ax",@progbits + .hidden a1 # -- Begin function a1 + .globl a1 + .type a1,@function +a1: # @a1 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, count($pop4) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store count($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size a1, .Lfunc_end0-a1 + # -- End function + .section .text.b,"ax",@progbits + .hidden b # -- Begin function b + .globl b + .type b,@function +b: # @b + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 128 + i32.and $push1=, $0, $pop0 + i32.eqz $push21=, $pop1 + br_if 0, $pop21 # 0: down to label0 +# BB#1: # %if.then + i32.const $push2=, 0 + i32.const $push18=, 0 + i32.load $push3=, count($pop18) + i32.const $push4=, 1 + i32.add $push5=, $pop3, $pop4 + i32.store count($pop2), $pop5 +.LBB1_2: # %if.end + end_block # label0: + block + i32.const $push6=, 64 + i32.and $push7=, $0, $pop6 + i32.eqz $push22=, $pop7 + br_if 0, $pop22 # 0: down to label1 +# BB#3: # %if.then6 + i32.const $push8=, 0 + i32.const $push19=, 0 + i32.load $push9=, count($pop19) + i32.const $push10=, 1 + i32.add $push11=, $pop9, $pop10 + i32.store count($pop8), $pop11 +.LBB1_4: # %if.end7 + end_block # label1: + block + i32.const $push12=, 32 + i32.and $push13=, $0, $pop12 + i32.eqz $push23=, $pop13 + br_if 0, $pop23 # 0: down to label2 +# BB#5: # %if.then14 + i32.const $push14=, 0 + i32.const $push20=, 0 + i32.load $push15=, count($pop20) + i32.const $push16=, 1 + i32.add $push17=, $pop15, $pop16 + i32.store count($pop14), $pop17 +.LBB1_6: # %if.end15 + end_block # label2: + # fallthrough-return + .endfunc +.Lfunc_end1: + .size b, .Lfunc_end1-b + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end21 + i32.const $push1=, 0 + i32.const $push0=, 3 + i32.store count($pop1), $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden count # @count + .type count,@object + .section .bss.count,"aw",@nobits + .globl count + .p2align 2 +count: + .int32 0 # 0x0 + .size count, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960311-2.c.s b/src/binaryen/test/torture-s/960311-2.c.s new file mode 100644 index 0000000000..60c57fea1f --- /dev/null +++ b/src/binaryen/test/torture-s/960311-2.c.s @@ -0,0 +1,102 @@ + .text + .file "960311-2.c" + .section .text.a1,"ax",@progbits + .hidden a1 # -- Begin function a1 + .globl a1 + .type a1,@function +a1: # @a1 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, count($pop4) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store count($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size a1, .Lfunc_end0-a1 + # -- End function + .section .text.b,"ax",@progbits + .hidden b # -- Begin function b + .globl b + .type b,@function +b: # @b + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 32768 + i32.and $push1=, $0, $pop0 + i32.eqz $push21=, $pop1 + br_if 0, $pop21 # 0: down to label0 +# BB#1: # %if.then + i32.const $push2=, 0 + i32.const $push18=, 0 + i32.load $push3=, count($pop18) + i32.const $push4=, 1 + i32.add $push5=, $pop3, $pop4 + i32.store count($pop2), $pop5 +.LBB1_2: # %if.end + end_block # label0: + block + i32.const $push6=, 16384 + i32.and $push7=, $0, $pop6 + i32.eqz $push22=, $pop7 + br_if 0, $pop22 # 0: down to label1 +# BB#3: # %if.then6 + i32.const $push8=, 0 + i32.const $push19=, 0 + i32.load $push9=, count($pop19) + i32.const $push10=, 1 + i32.add $push11=, $pop9, $pop10 + i32.store count($pop8), $pop11 +.LBB1_4: # %if.end7 + end_block # label1: + block + i32.const $push12=, 8192 + i32.and $push13=, $0, $pop12 + i32.eqz $push23=, $pop13 + br_if 0, $pop23 # 0: down to label2 +# BB#5: # %if.then14 + i32.const $push14=, 0 + i32.const $push20=, 0 + i32.load $push15=, count($pop20) + i32.const $push16=, 1 + i32.add $push17=, $pop15, $pop16 + i32.store count($pop14), $pop17 +.LBB1_6: # %if.end15 + end_block # label2: + # fallthrough-return + .endfunc +.Lfunc_end1: + .size b, .Lfunc_end1-b + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end21 + i32.const $push1=, 0 + i32.const $push0=, 3 + i32.store count($pop1), $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden count # @count + .type count,@object + .section .bss.count,"aw",@nobits + .globl count + .p2align 2 +count: + .int32 0 # 0x0 + .size count, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960311-3.c.s b/src/binaryen/test/torture-s/960311-3.c.s new file mode 100644 index 0000000000..9af250f0d0 --- /dev/null +++ b/src/binaryen/test/torture-s/960311-3.c.s @@ -0,0 +1,101 @@ + .text + .file "960311-3.c" + .section .text.a1,"ax",@progbits + .hidden a1 # -- Begin function a1 + .globl a1 + .type a1,@function +a1: # @a1 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, count($pop4) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store count($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size a1, .Lfunc_end0-a1 + # -- End function + .section .text.b,"ax",@progbits + .hidden b # -- Begin function b + .globl b + .type b,@function +b: # @b + .param i32 +# BB#0: # %entry + block + i32.const $push0=, -1 + i32.gt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.then + i32.const $push2=, 0 + i32.const $push18=, 0 + i32.load $push3=, count($pop18) + i32.const $push4=, 1 + i32.add $push5=, $pop3, $pop4 + i32.store count($pop2), $pop5 +.LBB1_2: # %if.end + end_block # label0: + block + i32.const $push6=, 1073741824 + i32.and $push7=, $0, $pop6 + i32.eqz $push21=, $pop7 + br_if 0, $pop21 # 0: down to label1 +# BB#3: # %if.then3 + i32.const $push8=, 0 + i32.const $push19=, 0 + i32.load $push9=, count($pop19) + i32.const $push10=, 1 + i32.add $push11=, $pop9, $pop10 + i32.store count($pop8), $pop11 +.LBB1_4: # %if.end4 + end_block # label1: + block + i32.const $push12=, 536870912 + i32.and $push13=, $0, $pop12 + i32.eqz $push22=, $pop13 + br_if 0, $pop22 # 0: down to label2 +# BB#5: # %if.then8 + i32.const $push14=, 0 + i32.const $push20=, 0 + i32.load $push15=, count($pop20) + i32.const $push16=, 1 + i32.add $push17=, $pop15, $pop16 + i32.store count($pop14), $pop17 +.LBB1_6: # %if.end9 + end_block # label2: + # fallthrough-return + .endfunc +.Lfunc_end1: + .size b, .Lfunc_end1-b + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end21 + i32.const $push1=, 0 + i32.const $push0=, 3 + i32.store count($pop1), $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden count # @count + .type count,@object + .section .bss.count,"aw",@nobits + .globl count + .p2align 2 +count: + .int32 0 # 0x0 + .size count, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960312-1.c.s b/src/binaryen/test/torture-s/960312-1.c.s new file mode 100644 index 0000000000..a4346b896e --- /dev/null +++ b/src/binaryen/test/torture-s/960312-1.c.s @@ -0,0 +1,85 @@ + .text + .file "960312-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 16 + i32.add $push4=, $0, $pop0 + tee_local $push3=, $3=, $pop4 + i32.load $4=, 0($pop3) + i32.load $5=, 12($0) + i32.load $push2=, 8($0) + tee_local $push1=, $6=, $pop2 + i32.load $7=, 0($pop1) + i32.load $2=, 8($6) + i32.load $1=, 4($6) + #APP + #NO_APP + i32.store 0($6), $4 + i32.store 8($6), $7 + i32.store 0($0), $6 + i32.store 12($0), $2 + i32.store 0($3), $5 + i32.store 4($0), $1 + copy_local $push5=, $0 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.load $2=, main.sc($pop7) + i32.const $push6=, 0 + i32.load $1=, main.sc+8($pop6) + i32.const $push5=, 0 + i32.load $0=, main.sc+4($pop5) + #APP + #NO_APP + i32.const $push4=, 0 + i32.const $push0=, 11 + i32.store main.sc($pop4), $pop0 + i32.const $push3=, 0 + i32.store main.sc+8($pop3), $2 + block + i32.const $push1=, 2 + i32.ne $push2=, $2, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push8=, 0 + call exit@FUNCTION, $pop8 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type main.sc,@object # @main.sc + .section .data.main.sc,"aw",@progbits + .p2align 2 +main.sc: + .int32 2 # 0x2 + .int32 3 # 0x3 + .int32 4 # 0x4 + .size main.sc, 12 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960317-1.c.s b/src/binaryen/test/torture-s/960317-1.c.s new file mode 100644 index 0000000000..489825282a --- /dev/null +++ b/src/binaryen/test/torture-s/960317-1.c.s @@ -0,0 +1,51 @@ + .text + .file "960317-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push8=, 0 + i32.const $push7=, -1 + i32.shl $push6=, $pop7, $0 + tee_local $push5=, $0=, $pop6 + i32.sub $push0=, $pop8, $pop5 + i32.and $push1=, $pop0, $1 + i32.eqz $push12=, $pop1 + br_if 0, $pop12 # 0: down to label0 +# BB#1: # %if.end + i32.const $push10=, -1 + i32.xor $push2=, $0, $pop10 + i32.and $push3=, $pop2, $1 + i32.const $push9=, 0 + i32.ne $push4=, $pop3, $pop9 + return $pop4 +.LBB0_2: # %cleanup + end_block # label0: + i32.const $push11=, 0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960321-1.c.s b/src/binaryen/test/torture-s/960321-1.c.s new file mode 100644 index 0000000000..5456cbd07b --- /dev/null +++ b/src/binaryen/test/torture-s/960321-1.c.s @@ -0,0 +1,55 @@ + .text + .file "960321-1.c" + .section .text.acc_a,"ax",@progbits + .hidden acc_a # -- Begin function acc_a + .globl acc_a + .type acc_a,@function +acc_a: # @acc_a + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, a-2000000000 + i32.add $push1=, $0, $pop0 + i32.load8_s $push2=, 0($pop1) + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size acc_a, .Lfunc_end0-acc_a + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load8_u $push0=, a($pop3) + i32.const $push1=, 100 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a +a: + .asciz "deadbeef\000" + .size a, 10 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960326-1.c.s b/src/binaryen/test/torture-s/960326-1.c.s new file mode 100644 index 0000000000..710539e269 --- /dev/null +++ b/src/binaryen/test/torture-s/960326-1.c.s @@ -0,0 +1,46 @@ + .text + .file "960326-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load $push0=, s+4($pop3) + i32.const $push1=, 3 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden s # @s + .type s,@object + .section .data.s,"aw",@progbits + .globl s + .p2align 2 +s: + .int32 0 # 0x0 + .int32 3 # 0x3 + .int16 0 # 0x0 + .skip 2 + .int32 2 # 0x2 + .int32 0 # 0x0 + .int32 0 # 0x0 + .size s, 24 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960327-1.c.s b/src/binaryen/test/torture-s/960327-1.c.s new file mode 100644 index 0000000000..e0d1f3578b --- /dev/null +++ b/src/binaryen/test/torture-s/960327-1.c.s @@ -0,0 +1,101 @@ + .text + .file "960327-1.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .result i32 +# BB#0: # %entry + i32.const $push0=, 10 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push14=, 0 + i32.const $push12=, 0 + i32.load $push11=, __stack_pointer($pop12) + i32.const $push13=, 16 + i32.sub $push20=, $pop11, $pop13 + tee_local $push19=, $3=, $pop20 + i32.store __stack_pointer($pop14), $pop19 + i32.const $push0=, 0 + i64.load $push1=, .Lf.s+6($pop0):p2align=0 + i64.store 6($3):p2align=1, $pop1 + i32.const $push18=, 0 + i64.load $push2=, .Lf.s($pop18):p2align=0 + i64.store 0($3), $pop2 + i32.const $push3=, 13 + i32.add $2=, $3, $pop3 +.LBB1_1: # %while.cond + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push25=, -2 + i32.add $1=, $2, $pop25 + i32.const $push24=, -1 + i32.add $push23=, $2, $pop24 + tee_local $push22=, $0=, $pop23 + copy_local $2=, $pop22 + i32.load8_u $push4=, 0($1) + i32.const $push21=, 48 + i32.eq $push5=, $pop4, $pop21 + br_if 0, $pop5 # 0: up to label0 +# BB#2: # %while.end + end_loop + i32.const $push6=, 88 + i32.store16 0($0):p2align=0, $pop6 + block + i32.const $push7=, 12 + i32.add $push8=, $3, $pop7 + i32.load8_u $push9=, 0($pop8) + i32.const $push26=, 88 + i32.ne $push10=, $pop9, $pop26 + br_if 0, $pop10 # 0: down to label1 +# BB#3: # %if.end + i32.const $push17=, 0 + i32.const $push15=, 16 + i32.add $push16=, $3, $pop15 + i32.store __stack_pointer($pop17), $pop16 + return $2 +.LBB1_4: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.call $drop=, f@FUNCTION + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type .Lf.s,@object # @f.s + .section .rodata.str1.1,"aMS",@progbits,1 +.Lf.s: + .asciz "abcedfg012345" + .size .Lf.s, 14 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960402-1.c.s b/src/binaryen/test/torture-s/960402-1.c.s new file mode 100644 index 0000000000..8e527a4d0b --- /dev/null +++ b/src/binaryen/test/torture-s/960402-1.c.s @@ -0,0 +1,36 @@ + .text + .file "960402-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i64 + .result i32 +# BB#0: # %entry + i64.const $push0=, 2147483648 + i64.add $push1=, $0, $pop0 + i64.const $push2=, 6442450943 + i64.gt_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960405-1.c.s b/src/binaryen/test/torture-s/960405-1.c.s new file mode 100644 index 0000000000..649fb53a1b --- /dev/null +++ b/src/binaryen/test/torture-s/960405-1.c.s @@ -0,0 +1,57 @@ + .text + .file "960405-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push8=, 0 + i64.load $push3=, x($pop8) + i32.const $push7=, 0 + i64.load $push2=, x+8($pop7) + i32.const $push6=, 0 + i64.load $push1=, y($pop6) + i32.const $push5=, 0 + i64.load $push0=, y+8($pop5) + i32.call $push4=, __eqtf2@FUNCTION, $pop3, $pop2, $pop1, $pop0 + i32.eqz $push10=, $pop4 + br_if 0, $pop10 # 0: down to label0 +# BB#1: # %if.then + call abort@FUNCTION + unreachable +.LBB0_2: # %if.end + end_block # label0: + i32.const $push9=, 0 + call exit@FUNCTION, $pop9 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 4 +x: + .int64 0 # fp128 +Inf + .int64 9223090561878065152 + .size x, 16 + + .hidden y # @y + .type y,@object + .section .data.y,"aw",@progbits + .globl y + .p2align 4 +y: + .int64 0 # fp128 +Inf + .int64 9223090561878065152 + .size y, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960416-1.c.s b/src/binaryen/test/torture-s/960416-1.c.s new file mode 100644 index 0000000000..6e857b7458 --- /dev/null +++ b/src/binaryen/test/torture-s/960416-1.c.s @@ -0,0 +1,153 @@ + .text + .file "960416-1.c" + .section .text.f_le,"ax",@progbits + .hidden f_le # -- Begin function f_le + .globl f_le + .type f_le,@function +f_le: # @f_le + .param i32, i32 + .result i32 + .local i32, i32, i32, i64, i64, i64, i64 +# BB#0: # %entry + i32.load $push47=, 0($1) + tee_local $push46=, $2=, $pop47 + i64.extend_u/i32 $push11=, $pop46 + i32.load $push45=, 0($0) + tee_local $push44=, $3=, $pop45 + i64.extend_u/i32 $push10=, $pop44 + i64.mul $push43=, $pop11, $pop10 + tee_local $push42=, $6=, $pop43 + i64.const $push15=, 32 + i64.shr_u $push41=, $pop42, $pop15 + tee_local $push40=, $8=, $pop41 + i32.load $push39=, 4($1) + tee_local $push38=, $1=, $pop39 + i64.extend_u/i32 $push13=, $pop38 + i32.load $push37=, 4($0) + tee_local $push36=, $4=, $pop37 + i64.extend_u/i32 $push12=, $pop36 + i64.mul $push35=, $pop13, $pop12 + tee_local $push34=, $7=, $pop35 + i64.add $push20=, $pop40, $pop34 + i64.const $push33=, 32 + i64.shr_u $push21=, $7, $pop33 + i64.add $push22=, $pop20, $pop21 + i32.const $push0=, 0 + i32.sub $push32=, $2, $1 + tee_local $push31=, $0=, $pop32 + i32.sub $push1=, $pop0, $pop31 + i32.gt_u $push30=, $0, $2 + tee_local $push29=, $1=, $pop30 + i32.select $push2=, $pop1, $0, $pop29 + i64.extend_u/i32 $push3=, $pop2 + i32.sub $push4=, $4, $3 + i64.extend_u/i32 $push5=, $pop4 + i64.mul $push6=, $pop3, $pop5 + i64.const $push8=, -1 + i64.const $push7=, 0 + i64.select $push9=, $pop8, $pop7, $1 + i64.xor $push28=, $pop6, $pop9 + tee_local $push27=, $5=, $pop28 + i64.const $push26=, 32 + i64.shr_u $push19=, $pop27, $pop26 + i64.add $push23=, $pop22, $pop19 + i32.wrap/i64 $push24=, $pop23 + i64.add $push14=, $7, $6 + i64.add $push16=, $pop14, $8 + i64.add $push17=, $pop16, $5 + i32.wrap/i64 $push18=, $pop17 + i32.add $push25=, $pop24, $pop18 + # fallthrough-return: $pop25 + .endfunc +.Lfunc_end0: + .size f_le, .Lfunc_end0-f_le + # -- End function + .section .text.f_be,"ax",@progbits + .hidden f_be # -- Begin function f_be + .globl f_be + .type f_be,@function +f_be: # @f_be + .param i32, i32 + .result i32 + .local i32, i32, i32, i64, i64, i64, i64 +# BB#0: # %entry + i32.load $push57=, 4($1) + tee_local $push56=, $2=, $pop57 + i64.extend_u/i32 $push13=, $pop56 + i32.load $push55=, 4($0) + tee_local $push54=, $3=, $pop55 + i64.extend_u/i32 $push12=, $pop54 + i64.mul $push53=, $pop13, $pop12 + tee_local $push52=, $6=, $pop53 + i64.const $push14=, 4294967295 + i64.and $push51=, $pop52, $pop14 + tee_local $push50=, $7=, $pop51 + i32.load $push49=, 0($1) + tee_local $push48=, $1=, $pop49 + i64.extend_u/i32 $push18=, $pop48 + i32.load $push47=, 0($0) + tee_local $push46=, $4=, $pop47 + i64.extend_u/i32 $push17=, $pop46 + i64.mul $push45=, $pop18, $pop17 + tee_local $push44=, $8=, $pop45 + i64.add $push25=, $pop50, $pop44 + i64.const $push43=, 4294967295 + i64.and $push26=, $8, $pop43 + i64.add $push27=, $pop25, $pop26 + i32.const $push0=, 0 + i32.sub $push42=, $2, $1 + tee_local $push41=, $0=, $pop42 + i32.sub $push1=, $pop0, $pop41 + i32.gt_u $push40=, $0, $2 + tee_local $push39=, $1=, $pop40 + i32.select $push2=, $pop1, $0, $pop39 + i64.extend_u/i32 $push3=, $pop2 + i32.sub $push4=, $4, $3 + i64.extend_u/i32 $push5=, $pop4 + i64.mul $push6=, $pop3, $pop5 + i64.const $push8=, -1 + i64.const $push7=, 0 + i64.select $push9=, $pop8, $pop7, $1 + i64.xor $push38=, $pop6, $pop9 + tee_local $push37=, $5=, $pop38 + i64.const $push36=, 4294967295 + i64.and $push24=, $pop37, $pop36 + i64.add $push28=, $pop27, $pop24 + i64.const $push10=, 32 + i64.shr_u $push29=, $pop28, $pop10 + i32.wrap/i64 $push30=, $pop29 + i64.const $push35=, 32 + i64.shr_u $push15=, $6, $pop35 + i64.add $push16=, $pop15, $7 + i64.const $push34=, 32 + i64.shr_u $push19=, $8, $pop34 + i64.add $push20=, $pop16, $pop19 + i64.const $push33=, 32 + i64.shr_u $push11=, $5, $pop33 + i64.add $push21=, $pop20, $pop11 + i64.const $push32=, 32 + i64.shr_u $push22=, $pop21, $pop32 + i32.wrap/i64 $push23=, $pop22 + i32.add $push31=, $pop30, $pop23 + # fallthrough-return: $pop31 + .endfunc +.Lfunc_end1: + .size f_be, .Lfunc_end1-f_be + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end12 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960419-1.c.s b/src/binaryen/test/torture-s/960419-1.c.s new file mode 100644 index 0000000000..e2deb25a70 --- /dev/null +++ b/src/binaryen/test/torture-s/960419-1.c.s @@ -0,0 +1,40 @@ + .text + .file "960419-1.c" + .section .text.check,"ax",@progbits + .hidden check # -- Begin function check + .globl check + .type check,@function +check: # @check + .param i32 +# BB#0: # %entry + block + i32.eqz $push0=, $0 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size check, .Lfunc_end0-check + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960419-2.c.s b/src/binaryen/test/torture-s/960419-2.c.s new file mode 100644 index 0000000000..f9d0de5356 --- /dev/null +++ b/src/binaryen/test/torture-s/960419-2.c.s @@ -0,0 +1,19 @@ + .text + .file "960419-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960512-1.c.s b/src/binaryen/test/torture-s/960512-1.c.s new file mode 100644 index 0000000000..f3bc073250 --- /dev/null +++ b/src/binaryen/test/torture-s/960512-1.c.s @@ -0,0 +1,37 @@ + .text + .file "960512-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 +# BB#0: # %entry + i64.const $push0=, 0 + i64.store 0($0), $pop0 + i32.const $push1=, 8 + i32.add $push2=, $0, $pop1 + i64.const $push3=, 0 + i64.store 0($pop2), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960513-1.c.s b/src/binaryen/test/torture-s/960513-1.c.s new file mode 100644 index 0000000000..a0cc264d14 --- /dev/null +++ b/src/binaryen/test/torture-s/960513-1.c.s @@ -0,0 +1,170 @@ + .text + .file "960513-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i64, i64, i32 + .local i64, i64, i32 +# BB#0: # %entry + i32.const $push37=, 0 + i32.const $push35=, 0 + i32.load $push34=, __stack_pointer($pop35) + i32.const $push36=, 192 + i32.sub $push121=, $pop34, $pop36 + tee_local $push120=, $6=, $pop121 + i32.store __stack_pointer($pop37), $pop120 + i32.const $push41=, 176 + i32.add $push42=, $6, $pop41 + i64.const $push1=, 0 + i64.const $push0=, -9223372036854775808 + call __subtf3@FUNCTION, $pop42, $pop1, $pop0, $1, $2 + i32.const $push43=, 160 + i32.add $push44=, $6, $pop43 + i64.const $push119=, 0 + i64.const $push2=, -4611686018427387904 + call __multf3@FUNCTION, $pop44, $1, $2, $pop119, $pop2 + i32.const $push49=, 144 + i32.add $push50=, $6, $pop49 + i64.load $push10=, 160($6) + i64.load $push9=, 176($6) + i32.const $push3=, 1 + i32.eq $push118=, $3, $pop3 + tee_local $push117=, $3=, $pop118 + i64.select $push116=, $pop10, $pop9, $pop117 + tee_local $push115=, $5=, $pop116 + i32.const $push47=, 160 + i32.add $push48=, $6, $pop47 + i32.const $push4=, 8 + i32.add $push7=, $pop48, $pop4 + i64.load $push8=, 0($pop7) + i32.const $push45=, 176 + i32.add $push46=, $6, $pop45 + i32.const $push114=, 8 + i32.add $push5=, $pop46, $pop114 + i64.load $push6=, 0($pop5) + i64.select $push113=, $pop8, $pop6, $3 + tee_local $push112=, $4=, $pop113 + call __multf3@FUNCTION, $pop50, $pop115, $pop112, $1, $2 + i32.const $push53=, 128 + i32.add $push54=, $6, $pop53 + i64.load $push13=, 144($6) + i32.const $push51=, 144 + i32.add $push52=, $6, $pop51 + i32.const $push111=, 8 + i32.add $push11=, $pop52, $pop111 + i64.load $push12=, 0($pop11) + call __addtf3@FUNCTION, $pop54, $5, $4, $pop13, $pop12 + i32.const $push57=, 112 + i32.add $push58=, $6, $pop57 + i64.load $push110=, 128($6) + tee_local $push109=, $5=, $pop110 + i32.const $push55=, 128 + i32.add $push56=, $6, $pop55 + i32.const $push108=, 8 + i32.add $push14=, $pop56, $pop108 + i64.load $push107=, 0($pop14) + tee_local $push106=, $4=, $pop107 + call __multf3@FUNCTION, $pop58, $pop109, $pop106, $1, $2 + i32.const $push61=, 96 + i32.add $push62=, $6, $pop61 + i64.load $push17=, 112($6) + i32.const $push59=, 112 + i32.add $push60=, $6, $pop59 + i32.const $push105=, 8 + i32.add $push15=, $pop60, $pop105 + i64.load $push16=, 0($pop15) + call __addtf3@FUNCTION, $pop62, $5, $4, $pop17, $pop16 + i32.const $push65=, 80 + i32.add $push66=, $6, $pop65 + i64.load $push104=, 96($6) + tee_local $push103=, $5=, $pop104 + i32.const $push63=, 96 + i32.add $push64=, $6, $pop63 + i32.const $push102=, 8 + i32.add $push18=, $pop64, $pop102 + i64.load $push101=, 0($pop18) + tee_local $push100=, $4=, $pop101 + call __multf3@FUNCTION, $pop66, $pop103, $pop100, $1, $2 + i32.const $push69=, 64 + i32.add $push70=, $6, $pop69 + i64.load $push21=, 80($6) + i32.const $push67=, 80 + i32.add $push68=, $6, $pop67 + i32.const $push99=, 8 + i32.add $push19=, $pop68, $pop99 + i64.load $push20=, 0($pop19) + call __addtf3@FUNCTION, $pop70, $5, $4, $pop21, $pop20 + i32.const $push73=, 48 + i32.add $push74=, $6, $pop73 + i64.load $push98=, 64($6) + tee_local $push97=, $5=, $pop98 + i32.const $push71=, 64 + i32.add $push72=, $6, $pop71 + i32.const $push96=, 8 + i32.add $push22=, $pop72, $pop96 + i64.load $push95=, 0($pop22) + tee_local $push94=, $4=, $pop95 + call __multf3@FUNCTION, $pop74, $pop97, $pop94, $1, $2 + i32.const $push77=, 32 + i32.add $push78=, $6, $pop77 + i64.load $push25=, 48($6) + i32.const $push75=, 48 + i32.add $push76=, $6, $pop75 + i32.const $push93=, 8 + i32.add $push23=, $pop76, $pop93 + i64.load $push24=, 0($pop23) + call __addtf3@FUNCTION, $pop78, $5, $4, $pop25, $pop24 + i32.const $push81=, 16 + i32.add $push82=, $6, $pop81 + i64.load $push92=, 32($6) + tee_local $push91=, $5=, $pop92 + i32.const $push79=, 32 + i32.add $push80=, $6, $pop79 + i32.const $push90=, 8 + i32.add $push26=, $pop80, $pop90 + i64.load $push89=, 0($pop26) + tee_local $push88=, $4=, $pop89 + call __multf3@FUNCTION, $pop82, $pop91, $pop88, $1, $2 + i64.load $push29=, 16($6) + i32.const $push83=, 16 + i32.add $push84=, $6, $pop83 + i32.const $push87=, 8 + i32.add $push27=, $pop84, $pop87 + i64.load $push28=, 0($pop27) + call __addtf3@FUNCTION, $6, $5, $4, $pop29, $pop28 + i32.const $push86=, 8 + i32.add $push30=, $0, $pop86 + i32.const $push85=, 8 + i32.add $push31=, $6, $pop85 + i64.load $push32=, 0($pop31) + i64.store 0($pop30), $pop32 + i64.load $push33=, 0($6) + i64.store 0($0), $pop33 + i32.const $push40=, 0 + i32.const $push38=, 192 + i32.add $push39=, $6, $pop38 + i32.store __stack_pointer($pop40), $pop39 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960521-1.c.s b/src/binaryen/test/torture-s/960521-1.c.s new file mode 100644 index 0000000000..bc68eb416d --- /dev/null +++ b/src/binaryen/test/torture-s/960521-1.c.s @@ -0,0 +1,118 @@ + .text + .file "960521-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 + .local i32, i32 +# BB#0: # %entry + block + i32.const $push8=, 0 + i32.load $push0=, n($pop8) + i32.const $push7=, 1 + i32.lt_s $push1=, $pop0, $pop7 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %for.body.lr.ph + i32.const $push9=, 0 + i32.load $0=, a($pop9) + i32.const $1=, 0 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push15=, -1 + i32.store 0($0), $pop15 + i32.const $push14=, 4 + i32.add $0=, $0, $pop14 + i32.const $push13=, 1 + i32.add $push12=, $1, $pop13 + tee_local $push11=, $1=, $pop12 + i32.const $push10=, 0 + i32.load $push2=, n($pop10) + i32.lt_s $push3=, $pop11, $pop2 + br_if 0, $pop3 # 0: up to label1 +.LBB0_3: # %for.end + end_loop + end_block # label0: + i32.const $push16=, 0 + i32.load $push4=, b($pop16) + i32.const $push6=, 255 + i32.const $push5=, 522236 + i32.call $drop=, memset@FUNCTION, $pop4, $pop6, $pop5 + copy_local $push17=, $0 + # fallthrough-return: $pop17 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, 130560 + i32.store n($pop1), $pop0 + i32.const $push18=, 0 + i32.const $push2=, 522240 + i32.call $push17=, malloc@FUNCTION, $pop2 + tee_local $push16=, $0=, $pop17 + i32.store a($pop18), $pop16 + i32.const $push15=, 522240 + i32.call $push14=, malloc@FUNCTION, $pop15 + tee_local $push13=, $1=, $pop14 + i32.const $push12=, 0 + i32.store 0($pop13), $pop12 + i32.const $push11=, 0 + i32.const $push3=, 4 + i32.add $push10=, $1, $pop3 + tee_local $push9=, $1=, $pop10 + i32.store b($pop11), $pop9 + i32.const $push4=, 255 + i32.const $push8=, 522240 + i32.call $drop=, memset@FUNCTION, $0, $pop4, $pop8 + i32.const $push7=, 255 + i32.const $push5=, 522236 + i32.call $drop=, memset@FUNCTION, $1, $pop7, $pop5 + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden n # @n + .type n,@object + .section .bss.n,"aw",@nobits + .globl n + .p2align 2 +n: + .int32 0 # 0x0 + .size n, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype malloc, i32, i32 + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960608-1.c.s b/src/binaryen/test/torture-s/960608-1.c.s new file mode 100644 index 0000000000..32b445c9d4 --- /dev/null +++ b/src/binaryen/test/torture-s/960608-1.c.s @@ -0,0 +1,35 @@ + .text + .file "960608-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.load8_u $push0=, 0($0) + i32.const $push1=, 206 + i32.ne $push2=, $pop0, $pop1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.else + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960801-1.c.s b/src/binaryen/test/torture-s/960801-1.c.s new file mode 100644 index 0000000000..fce54152a0 --- /dev/null +++ b/src/binaryen/test/torture-s/960801-1.c.s @@ -0,0 +1,45 @@ + .text + .file "960801-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, 65535 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .result i64 +# BB#0: # %entry + i64.const $push0=, 65535 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size g, .Lfunc_end1-g + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960802-1.c.s b/src/binaryen/test/torture-s/960802-1.c.s new file mode 100644 index 0000000000..e1b5d4bbae --- /dev/null +++ b/src/binaryen/test/torture-s/960802-1.c.s @@ -0,0 +1,85 @@ + .text + .file "960802-1.c" + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 306 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1577058304 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size f2, .Lfunc_end1-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store val($pop0), $0 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size f3, .Lfunc_end2-f3 + # -- End function + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1577058610 + i32.store val($pop1), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end3: + .size f4, .Lfunc_end3-f4 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, 1577058610 + i32.store val($pop1), $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + .hidden val # @val + .type val,@object + .section .data.val,"aw",@progbits + .globl val + .p2align 2 +val: + .int32 1577058304 # 0x5e000000 + .size val, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960830-1.c.s b/src/binaryen/test/torture-s/960830-1.c.s new file mode 100644 index 0000000000..caf851b965 --- /dev/null +++ b/src/binaryen/test/torture-s/960830-1.c.s @@ -0,0 +1,19 @@ + .text + .file "960830-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/960909-1.c.s b/src/binaryen/test/torture-s/960909-1.c.s new file mode 100644 index 0000000000..681ec661fa --- /dev/null +++ b/src/binaryen/test/torture-s/960909-1.c.s @@ -0,0 +1,85 @@ + .text + .file "960909-1.c" + .section .text.ffs,"ax",@progbits + .hidden ffs # -- Begin function ffs + .globl ffs + .type ffs,@function +ffs: # @ffs + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + block + i32.eqz $push8=, $0 + br_if 0, $pop8 # 0: down to label0 +# BB#1: # %if.end + i32.const $2=, 1 + block + i32.const $push3=, 1 + i32.and $push0=, $0, $pop3 + br_if 0, $pop0 # 0: down to label1 +# BB#2: # %for.inc.preheader + i32.const $1=, 1 + i32.const $2=, 1 +.LBB0_3: # %for.inc + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push7=, 1 + i32.add $2=, $2, $pop7 + i32.const $push6=, 1 + i32.shl $push5=, $1, $pop6 + tee_local $push4=, $1=, $pop5 + i32.and $push1=, $pop4, $0 + i32.eqz $push9=, $pop1 + br_if 0, $pop9 # 0: up to label2 +.LBB0_4: # %cleanup + end_loop + end_block # label1: + return $2 +.LBB0_5: + end_block # label0: + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size ffs, .Lfunc_end0-ffs + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + block + i32.eqz $push0=, $0 + br_if 0, $pop0 # 0: down to label3 +# BB#1: # %if.end + return $0 +.LBB1_2: # %if.then + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/961004-1.c.s b/src/binaryen/test/torture-s/961004-1.c.s new file mode 100644 index 0000000000..84e5bf6769 --- /dev/null +++ b/src/binaryen/test/torture-s/961004-1.c.s @@ -0,0 +1,38 @@ + .text + .file "961004-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push2=, 0 + i32.load $push0=, k($pop2) + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.else + i32.const $push3=, 0 + i32.const $push1=, 1 + i32.store k($pop3), $pop1 +.LBB0_2: # %for.inc.1 + end_block # label0: + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden k # @k + .type k,@object + .section .bss.k,"aw",@nobits + .globl k + .p2align 2 +k: + .int32 0 # 0x0 + .size k, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/961017-1.c.s b/src/binaryen/test/torture-s/961017-1.c.s new file mode 100644 index 0000000000..28b77508ca --- /dev/null +++ b/src/binaryen/test/torture-s/961017-1.c.s @@ -0,0 +1,19 @@ + .text + .file "961017-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/961017-2.c.s b/src/binaryen/test/torture-s/961017-2.c.s new file mode 100644 index 0000000000..15698081c9 --- /dev/null +++ b/src/binaryen/test/torture-s/961017-2.c.s @@ -0,0 +1,30 @@ + .text + .file "961017-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $0=, 0 +.LBB0_1: # %do.cond + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push3=, 16384 + i32.add $push2=, $0, $pop3 + tee_local $push1=, $0=, $pop2 + br_if 0, $pop1 # 0: up to label0 +# BB#2: # %do.end + end_loop + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/961026-1.c.s b/src/binaryen/test/torture-s/961026-1.c.s new file mode 100644 index 0000000000..ff80c96321 --- /dev/null +++ b/src/binaryen/test/torture-s/961026-1.c.s @@ -0,0 +1,34 @@ + .text + .file "961026-1.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.shr_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end4 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/961112-1.c.s b/src/binaryen/test/torture-s/961112-1.c.s new file mode 100644 index 0000000000..6ce868da33 --- /dev/null +++ b/src/binaryen/test/torture-s/961112-1.c.s @@ -0,0 +1,33 @@ + .text + .file "961112-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/961122-1.c.s b/src/binaryen/test/torture-s/961122-1.c.s new file mode 100644 index 0000000000..98dd5a4219 --- /dev/null +++ b/src/binaryen/test/torture-s/961122-1.c.s @@ -0,0 +1,75 @@ + .text + .file "961122-1.c" + .section .text.addhi,"ax",@progbits + .hidden addhi # -- Begin function addhi + .globl addhi + .type addhi,@function +addhi: # @addhi + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push3=, 0 + i32.const $push6=, 0 + i64.load $push4=, acc($pop6) + i64.extend_u/i32 $push0=, $0 + i64.const $push1=, 32 + i64.shl $push2=, $pop0, $pop1 + i64.add $push5=, $pop4, $pop2 + i64.store acc($pop3), $pop5 + copy_local $push7=, $0 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end0: + .size addhi, .Lfunc_end0-addhi + # -- End function + .section .text.subhi,"ax",@progbits + .hidden subhi # -- Begin function subhi + .globl subhi + .type subhi,@function +subhi: # @subhi + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push3=, 0 + i32.const $push6=, 0 + i64.load $push4=, acc($pop6) + i64.extend_u/i32 $push0=, $0 + i64.const $push1=, 32 + i64.shl $push2=, $pop0, $pop1 + i64.sub $push5=, $pop4, $pop2 + i64.store acc($pop3), $pop5 + copy_local $push7=, $0 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end1: + .size subhi, .Lfunc_end1-subhi + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end4 + i32.const $push1=, 0 + i64.const $push0=, 281470681743360 + i64.store acc($pop1), $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden acc # @acc + .type acc,@object + .section .bss.acc,"aw",@nobits + .globl acc + .p2align 3 +acc: + .int64 0 # 0x0 + .size acc, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/961122-2.c.s b/src/binaryen/test/torture-s/961122-2.c.s new file mode 100644 index 0000000000..e4b0a823f5 --- /dev/null +++ b/src/binaryen/test/torture-s/961122-2.c.s @@ -0,0 +1,33 @@ + .text + .file "961122-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/961125-1.c.s b/src/binaryen/test/torture-s/961125-1.c.s new file mode 100644 index 0000000000..2b851cf8fc --- /dev/null +++ b/src/binaryen/test/torture-s/961125-1.c.s @@ -0,0 +1,88 @@ + .text + .file "961125-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $0=, .L.str + i32.const $1=, 1 +.LBB0_1: # %land.rhs.i + # =>This Loop Header: Depth=1 + # Child Loop BB0_4 Depth 2 + block + loop # label1: + i32.eqz $push20=, $1 + br_if 1, $pop20 # 1: down to label0 +# BB#2: # %while.body.i + # in Loop: Header=BB0_1 Depth=1 + block + i32.const $push12=, .L.str+3 + i32.ge_u $push0=, $0, $pop12 + br_if 0, $pop0 # 0: down to label2 +# BB#3: # %land.rhs4.i.preheader + # in Loop: Header=BB0_1 Depth=1 + copy_local $2=, $0 +.LBB0_4: # %land.rhs4.i + # Parent Loop BB0_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label3: + i32.const $push14=, 1 + i32.add $0=, $2, $pop14 + i32.load8_u $push1=, 0($2) + i32.const $push13=, 58 + i32.eq $push2=, $pop1, $pop13 + br_if 1, $pop2 # 1: down to label2 +# BB#5: # %land.rhs4.i + # in Loop: Header=BB0_4 Depth=2 + copy_local $2=, $0 + i32.const $push15=, .L.str+3 + i32.lt_u $push3=, $0, $pop15 + br_if 0, $pop3 # 0: up to label3 +.LBB0_6: # %while.end.thread.i + # in Loop: Header=BB0_1 Depth=1 + end_loop + end_block # label2: + i32.const $push17=, -1 + i32.add $1=, $1, $pop17 + i32.const $push16=, .L.str+3 + i32.lt_u $push4=, $0, $pop16 + br_if 0, $pop4 # 0: up to label1 +.LBB0_7: # %begfield.exit + end_loop + end_block # label0: + block + i32.const $push5=, 1 + i32.add $push19=, $0, $pop5 + tee_local $push18=, $2=, $pop19 + i32.const $push6=, .L.str+3 + i32.gt_u $push7=, $2, $pop6 + i32.select $push8=, $0, $pop18, $pop7 + i32.const $push9=, .L.str+2 + i32.ne $push10=, $pop8, $pop9 + br_if 0, $pop10 # 0: down to label4 +# BB#8: # %if.end + i32.const $push11=, 0 + call exit@FUNCTION, $pop11 + unreachable +.LBB0_9: # %if.then + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz ":ab" + .size .L.str, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/961206-1.c.s b/src/binaryen/test/torture-s/961206-1.c.s new file mode 100644 index 0000000000..b8add29780 --- /dev/null +++ b/src/binaryen/test/torture-s/961206-1.c.s @@ -0,0 +1,79 @@ + .text + .file "961206-1.c" + .section .text.sub1,"ax",@progbits + .hidden sub1 # -- Begin function sub1 + .globl sub1 + .type sub1,@function +sub1: # @sub1 + .param i64 + .result i32 +# BB#0: # %entry + i64.const $push0=, 2147483648 + i64.lt_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size sub1, .Lfunc_end0-sub1 + # -- End function + .section .text.sub2,"ax",@progbits + .hidden sub2 # -- Begin function sub2 + .globl sub2 + .type sub2,@function +sub2: # @sub2 + .param i64 + .result i32 +# BB#0: # %entry + i64.const $push0=, 2147483648 + i64.lt_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size sub2, .Lfunc_end1-sub2 + # -- End function + .section .text.sub3,"ax",@progbits + .hidden sub3 # -- Begin function sub3 + .globl sub3 + .type sub3,@function +sub3: # @sub3 + .param i64 + .result i32 +# BB#0: # %entry + i64.const $push0=, 2147483648 + i64.lt_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size sub3, .Lfunc_end2-sub3 + # -- End function + .section .text.sub4,"ax",@progbits + .hidden sub4 # -- Begin function sub4 + .globl sub4 + .type sub4,@function +sub4: # @sub4 + .param i64 + .result i32 +# BB#0: # %entry + i64.const $push0=, 2147483648 + i64.lt_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end3: + .size sub4, .Lfunc_end3-sub4 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end12 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/961213-1.c.s b/src/binaryen/test/torture-s/961213-1.c.s new file mode 100644 index 0000000000..a89be0f96e --- /dev/null +++ b/src/binaryen/test/torture-s/961213-1.c.s @@ -0,0 +1,62 @@ + .text + .file "961213-1.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32, i32, i32, i32 + .result i32 + .local i64, i64 +# BB#0: # %entry + i64.const $5=, 0 + i64.const $push5=, 0 + i64.store 0($0), $pop5 + block + i32.const $push1=, 1 + i32.lt_s $push2=, $1, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %for.body.lr.ph + i64.extend_s/i32 $4=, $3 + copy_local $3=, $1 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i64.mul $push3=, $5, $4 + i64.load32_u $push4=, 0($2) + i64.add $5=, $pop3, $pop4 + i32.const $push9=, 4 + i32.add $push0=, $2, $pop9 + copy_local $2=, $pop0 + i32.const $push8=, -1 + i32.add $push7=, $3, $pop8 + tee_local $push6=, $3=, $pop7 + br_if 0, $pop6 # 0: up to label1 +# BB#3: # %for.cond.for.end_crit_edge + end_loop + i64.store 0($0), $5 +.LBB0_4: # %for.end + end_block # label0: + copy_local $push10=, $1 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/961223-1.c.s b/src/binaryen/test/torture-s/961223-1.c.s new file mode 100644 index 0000000000..fd2d882451 --- /dev/null +++ b/src/binaryen/test/torture-s/961223-1.c.s @@ -0,0 +1,34 @@ + .text + .file "961223-1.c" + .section .text.sub,"ax",@progbits + .hidden sub # -- Begin function sub + .globl sub + .type sub,@function +sub: # @sub + .param f64 + .result f64 +# BB#0: # %entry + f64.const $push0=, 0x1p0 + f64.add $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size sub, .Lfunc_end0-sub + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/970214-1.c.s b/src/binaryen/test/torture-s/970214-1.c.s new file mode 100644 index 0000000000..793a90c592 --- /dev/null +++ b/src/binaryen/test/torture-s/970214-1.c.s @@ -0,0 +1,19 @@ + .text + .file "970214-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/970214-2.c.s b/src/binaryen/test/torture-s/970214-2.c.s new file mode 100644 index 0000000000..ec7c80814f --- /dev/null +++ b/src/binaryen/test/torture-s/970214-2.c.s @@ -0,0 +1,19 @@ + .text + .file "970214-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/970217-1.c.s b/src/binaryen/test/torture-s/970217-1.c.s new file mode 100644 index 0000000000..bf1571a865 --- /dev/null +++ b/src/binaryen/test/torture-s/970217-1.c.s @@ -0,0 +1,34 @@ + .text + .file "970217-1.c" + .section .text.sub,"ax",@progbits + .hidden sub # -- Begin function sub + .globl sub + .type sub,@function +sub: # @sub + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.add $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size sub, .Lfunc_end0-sub + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/970923-1.c.s b/src/binaryen/test/torture-s/970923-1.c.s new file mode 100644 index 0000000000..00a4faf79b --- /dev/null +++ b/src/binaryen/test/torture-s/970923-1.c.s @@ -0,0 +1,47 @@ + .text + .file "970923-1.c" + .section .text.ts,"ax",@progbits + .hidden ts # -- Begin function ts + .globl ts + .type ts,@function +ts: # @ts + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size ts, .Lfunc_end0-ts + # -- End function + .section .text.tu,"ax",@progbits + .hidden tu # -- Begin function tu + .globl tu + .type tu,@function +tu: # @tu + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size tu, .Lfunc_end1-tu + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/980205.c.s b/src/binaryen/test/torture-s/980205.c.s new file mode 100644 index 0000000000..24e8664325 --- /dev/null +++ b/src/binaryen/test/torture-s/980205.c.s @@ -0,0 +1,78 @@ + .text + .file "980205.c" + .section .text.fdouble,"ax",@progbits + .hidden fdouble # -- Begin function fdouble + .globl fdouble + .type fdouble,@function +fdouble: # @fdouble + .param f64, i32 + .local i32 +# BB#0: # %entry + i32.const $push13=, 0 + i32.const $push11=, 0 + i32.load $push10=, __stack_pointer($pop11) + i32.const $push12=, 16 + i32.sub $push20=, $pop10, $pop12 + tee_local $push19=, $2=, $pop20 + i32.store __stack_pointer($pop13), $pop19 + i32.const $push1=, 7 + i32.add $push2=, $1, $pop1 + i32.const $push3=, -8 + i32.and $push18=, $pop2, $pop3 + tee_local $push17=, $1=, $pop18 + i32.const $push4=, 8 + i32.add $push5=, $pop17, $pop4 + i32.store 12($2), $pop5 + block + f64.const $push6=, 0x1p0 + f64.ne $push7=, $0, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %entry + f64.load $push0=, 0($1) + f64.const $push8=, 0x1p1 + f64.ne $push9=, $pop0, $pop8 + br_if 0, $pop9 # 0: down to label0 +# BB#2: # %if.end + i32.const $push16=, 0 + i32.const $push14=, 16 + i32.add $push15=, $2, $pop14 + i32.store __stack_pointer($pop16), $pop15 + return +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size fdouble, .Lfunc_end0-fdouble + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push8=, $pop3, $pop5 + tee_local $push7=, $0=, $pop8 + i32.store __stack_pointer($pop6), $pop7 + i64.const $push0=, 4611686018427387904 + i64.store 0($0), $pop0 + f64.const $push1=, 0x1p0 + call fdouble@FUNCTION, $pop1, $0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/980223.c.s b/src/binaryen/test/torture-s/980223.c.s new file mode 100644 index 0000000000..ab80035aff --- /dev/null +++ b/src/binaryen/test/torture-s/980223.c.s @@ -0,0 +1,127 @@ + .text + .file "980223.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 + .local i64 +# BB#0: # %entry + block + i32.load $push7=, 0($1) + tee_local $push6=, $1=, $pop7 + i32.load8_u $push0=, 4($pop6) + i32.const $push5=, 64 + i32.and $push1=, $pop0, $pop5 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %entry.if.end7_crit_edge + i64.load $push4=, 0($2):p2align=2 + i64.store 0($0):p2align=2, $pop4 + return +.LBB1_2: # %if.then + end_block # label0: + i32.load $push12=, 0($1) + tee_local $push11=, $1=, $pop12 + i64.load $push10=, 8($pop11):p2align=2 + tee_local $push9=, $3=, $pop10 + i64.store 0($2):p2align=2, $pop9 + block + i32.load8_u $push2=, 4($1) + i32.const $push8=, 64 + i32.and $push3=, $pop2, $pop8 + br_if 0, $pop3 # 0: down to label1 +# BB#3: # %if.end7 + i64.store 0($0):p2align=2, $3 + return +.LBB1_4: # %if.then6 + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + block + i32.const $push6=, 0 + i32.load8_u $push0=, cons2+4($pop6) + i32.const $push5=, 64 + i32.and $push1=, $pop0, $pop5 + i32.eqz $push10=, $pop1 + br_if 0, $pop10 # 0: down to label3 +# BB#1: # %if.then.i + i32.const $push8=, 0 + i32.load $push2=, cons2($pop8) + i32.load8_u $push3=, 4($pop2) + i32.const $push7=, 64 + i32.and $push4=, $pop3, $pop7 + br_if 1, $pop4 # 1: down to label2 +.LBB2_2: # %foo.exit + end_block # label3: + i32.const $push9=, 0 + return $pop9 +.LBB2_3: # %if.then6.i + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden nil # @nil + .type nil,@object + .section .bss.nil,"aw",@nobits + .globl nil + .p2align 2 +nil: + .int32 0 # 0x0 + .size nil, 4 + + .hidden cons1 # @cons1 + .type cons1,@object + .section .data.cons1,"aw",@progbits + .globl cons1 + .p2align 4 +cons1: + .int32 nil + .int32 0 # 0x0 + .int32 nil + .int32 0 # 0x0 + .size cons1, 16 + + .hidden cons2 # @cons2 + .type cons2,@object + .section .data.cons2,"aw",@progbits + .globl cons2 + .p2align 4 +cons2: + .int32 cons1 + .int32 64 # 0x40 + .int32 nil + .int32 0 # 0x0 + .size cons2, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/980424-1.c.s b/src/binaryen/test/torture-s/980424-1.c.s new file mode 100644 index 0000000000..350128111c --- /dev/null +++ b/src/binaryen/test/torture-s/980424-1.c.s @@ -0,0 +1,95 @@ + .text + .file "980424-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.load $push1=, i($pop0) + i32.const $push2=, 63 + i32.and $push3=, $pop1, $pop2 + i32.const $push4=, 2 + i32.shl $push5=, $pop3, $pop4 + i32.const $push6=, a + i32.add $push7=, $pop5, $pop6 + i32.load $push8=, 0($pop7) + i32.const $push9=, 1 + i32.ne $push10=, $pop8, $pop9 + br_if 0, $pop10 # 0: down to label1 +# BB#1: # %f.exit + return +.LBB1_2: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size g, .Lfunc_end1-g + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 64 + i32.store i($pop1), $pop0 + i32.const $push4=, 0 + i32.const $push2=, 1 + i32.store a($pop4), $pop2 + call g@FUNCTION + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 4 +a: + .skip 396 + .size a, 396 + + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/980505-1.c.s b/src/binaryen/test/torture-s/980505-1.c.s new file mode 100644 index 0000000000..d3276c4105 --- /dev/null +++ b/src/binaryen/test/torture-s/980505-1.c.s @@ -0,0 +1,19 @@ + .text + .file "980505-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/980505-2.c.s b/src/binaryen/test/torture-s/980505-2.c.s new file mode 100644 index 0000000000..bd792f5074 --- /dev/null +++ b/src/binaryen/test/torture-s/980505-2.c.s @@ -0,0 +1,32 @@ + .text + .file "980505-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, 147 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/980506-1.c.s b/src/binaryen/test/torture-s/980506-1.c.s new file mode 100644 index 0000000000..1fe3b1617b --- /dev/null +++ b/src/binaryen/test/torture-s/980506-1.c.s @@ -0,0 +1,19 @@ + .text + .file "980506-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/980506-2.c.s b/src/binaryen/test/torture-s/980506-2.c.s new file mode 100644 index 0000000000..f844bc3328 --- /dev/null +++ b/src/binaryen/test/torture-s/980506-2.c.s @@ -0,0 +1,32 @@ + .text + .file "980506-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.else + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/980506-3.c.s b/src/binaryen/test/torture-s/980506-3.c.s new file mode 100644 index 0000000000..7778c98c37 --- /dev/null +++ b/src/binaryen/test/torture-s/980506-3.c.s @@ -0,0 +1,33 @@ + .text + .file "980506-3.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, lookup_table + i32.const $push1=, 4 + i32.const $push0=, 257 + i32.call $drop=, memset@FUNCTION, $pop2, $pop1, $pop0 + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden lookup_table # @lookup_table + .type lookup_table,@object + .section .bss.lookup_table,"aw",@nobits + .globl lookup_table + .p2align 4 +lookup_table: + .skip 257 + .size lookup_table, 257 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/980526-2.c.s b/src/binaryen/test/torture-s/980526-2.c.s new file mode 100644 index 0000000000..d8bdad3b2f --- /dev/null +++ b/src/binaryen/test/torture-s/980526-2.c.s @@ -0,0 +1,129 @@ + .text + .file "980526-2.c" + .section .text.do_mknod,"ax",@progbits + .hidden do_mknod # -- Begin function do_mknod + .globl do_mknod + .type do_mknod,@function +do_mknod: # @do_mknod + .param i32, i32, i32 +# BB#0: # %entry + block + i32.const $push0=, 360710264 + i32.ne $push1=, $2, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.then + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable +.LBB0_2: # %if.else + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size do_mknod, .Lfunc_end0-do_mknod + # -- End function + .section .text.getname,"ax",@progbits + .hidden getname # -- Begin function getname + .globl getname + .type getname,@function +getname: # @getname + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push17=, 13 + i32.mul $push18=, $0, $pop17 + i32.const $push13=, 7 + i32.mul $push14=, $0, $pop13 + i32.const $push9=, 3 + i32.add $push15=, $pop14, $pop9 + i32.const $push43=, 3 + i32.shl $push10=, $0, $pop43 + i32.const $push11=, 4 + i32.or $push12=, $pop10, $pop11 + i32.mul $push16=, $pop15, $pop12 + i32.add $push19=, $pop18, $pop16 + i32.const $push4=, 5 + i32.mul $push5=, $0, $pop4 + i32.const $push6=, 1 + i32.add $push7=, $pop5, $pop6 + i32.const $push0=, 6 + i32.mul $push1=, $0, $pop0 + i32.const $push2=, 2 + i32.add $push3=, $pop1, $pop2 + i32.mul $push8=, $pop7, $pop3 + i32.add $push20=, $pop19, $pop8 + i32.const $push24=, 9 + i32.mul $push25=, $0, $pop24 + i32.const $push42=, 5 + i32.add $push26=, $pop25, $pop42 + i32.const $push21=, 10 + i32.mul $push22=, $0, $pop21 + i32.const $push41=, 5 + i32.add $push23=, $pop22, $pop41 + i32.mul $push27=, $pop26, $pop23 + i32.add $push28=, $pop20, $pop27 + i32.const $push32=, 11 + i32.mul $push33=, $0, $pop32 + i32.const $push40=, 5 + i32.add $push34=, $pop33, $pop40 + i32.const $push29=, 12 + i32.mul $push30=, $0, $pop29 + i32.const $push39=, 5 + i32.add $push31=, $pop30, $pop39 + i32.mul $push35=, $pop34, $pop31 + i32.add $push36=, $pop28, $pop35 + i32.const $push38=, 5 + i32.add $push37=, $pop36, $pop38 + # fallthrough-return: $pop37 + .endfunc +.Lfunc_end1: + .size getname, .Lfunc_end1-getname + # -- End function + .section .text.sys_mknod,"ax",@progbits + .hidden sys_mknod # -- Begin function sys_mknod + .globl sys_mknod + .type sys_mknod,@function +sys_mknod: # @sys_mknod + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 14 + i32.shl $push3=, $2, $pop2 + i32.const $push4=, -4194304 + i32.and $push5=, $pop3, $pop4 + i32.const $push0=, 255 + i32.and $push1=, $2, $pop0 + i32.or $push6=, $pop5, $pop1 + call do_mknod@FUNCTION, $2, $2, $pop6 + unreachable + .endfunc +.Lfunc_end2: + .size sys_mknod, .Lfunc_end2-sys_mknod + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push1=, .L.str + i32.const $push0=, 305419896 + i32.call $drop=, sys_mknod@FUNCTION, $pop1, $0, $pop0 + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "test" + .size .L.str, 5 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/980526-3.c.s b/src/binaryen/test/torture-s/980526-3.c.s new file mode 100644 index 0000000000..edb1eae09a --- /dev/null +++ b/src/binaryen/test/torture-s/980526-3.c.s @@ -0,0 +1,33 @@ + .text + .file "980526-3.c" + .section .text.compare,"ax",@progbits + .hidden compare # -- Begin function compare + .globl compare + .type compare,@function +compare: # @compare + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.ne $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size compare, .Lfunc_end0-compare + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.else + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/980602-1.c.s b/src/binaryen/test/torture-s/980602-1.c.s new file mode 100644 index 0000000000..a9f2a99541 --- /dev/null +++ b/src/binaryen/test/torture-s/980602-1.c.s @@ -0,0 +1,19 @@ + .text + .file "980602-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.then + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/980602-2.c.s b/src/binaryen/test/torture-s/980602-2.c.s new file mode 100644 index 0000000000..bfa42bf849 --- /dev/null +++ b/src/binaryen/test/torture-s/980602-2.c.s @@ -0,0 +1,51 @@ + .text + .file "980602-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push11=, 0 + i32.load $push10=, t($pop11) + tee_local $push9=, $0=, $pop10 + i32.const $push2=, 1 + i32.add $push3=, $pop9, $pop2 + i32.const $push4=, 1073741823 + i32.and $push5=, $pop3, $pop4 + i32.const $push0=, -1073741824 + i32.and $push1=, $0, $pop0 + i32.or $push6=, $pop5, $pop1 + i32.store t($pop12), $pop6 + block + i32.const $push8=, 1073741823 + i32.and $push7=, $0, $pop8 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %if.then + i32.const $push13=, 0 + call exit@FUNCTION, $pop13 + unreachable +.LBB0_2: # %if.else + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden t # @t + .type t,@object + .section .bss.t,"aw",@nobits + .globl t + .p2align 2 +t: + .skip 4 + .size t, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/980604-1.c.s b/src/binaryen/test/torture-s/980604-1.c.s new file mode 100644 index 0000000000..bbdf69dffc --- /dev/null +++ b/src/binaryen/test/torture-s/980604-1.c.s @@ -0,0 +1,72 @@ + .text + .file "980604-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push4=, c + i32.const $push3=, d + i32.const $push8=, 0 + i32.load $push1=, a($pop8) + i32.const $push7=, 0 + i32.load $push0=, b($pop7) + i32.lt_s $push2=, $pop1, $pop0 + i32.select $push5=, $pop4, $pop3, $pop2 + i32.load $push6=, 0($pop5) + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %if.end + i32.const $push9=, 0 + call exit@FUNCTION, $pop9 + unreachable +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 1 # 0x1 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .data.b,"aw",@progbits + .globl b + .p2align 2 +b: + .int32 4294967295 # 0xffffffff + .size b, 4 + + .hidden c # @c + .type c,@object + .section .data.c,"aw",@progbits + .globl c + .p2align 2 +c: + .int32 1 # 0x1 + .size c, 4 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .int32 0 # 0x0 + .size d, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/980605-1.c.s b/src/binaryen/test/torture-s/980605-1.c.s new file mode 100644 index 0000000000..fda0dd6314 --- /dev/null +++ b/src/binaryen/test/torture-s/980605-1.c.s @@ -0,0 +1,141 @@ + .text + .file "980605-1.c" + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param f64 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, x($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push1=, 10 + i32.add $push2=, $pop9, $pop1 + i32.store x($pop0), $pop2 + i32.trunc_u/f64 $push4=, $0 + i32.const $push8=, 10 + i32.mul $push3=, $1, $pop8 + i32.add $push5=, $pop4, $pop3 + i32.const $push6=, 45 + i32.add $push7=, $pop5, $pop6 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end0: + .size f2, .Lfunc_end0-f2 + # -- End function + .section .text.getval,"ax",@progbits + .hidden getval # -- Begin function getval + .globl getval + .type getval,@function +getval: # @getval + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load $push4=, x($pop5) + tee_local $push3=, $0=, $pop4 + i32.const $push1=, 1 + i32.add $push2=, $pop3, $pop1 + i32.store x($pop0), $pop2 + copy_local $push6=, $0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end1: + .size getval, .Lfunc_end1-getval + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .local i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push23=, $pop9, $pop11 + tee_local $push22=, $1=, $pop23 + i32.store __stack_pointer($pop12), $pop22 + i32.const $push0=, 0 + i32.const $push21=, 0 + i32.load $push20=, x($pop21) + tee_local $push19=, $0=, $pop20 + i32.const $push1=, 20 + i32.add $push2=, $pop19, $pop1 + i32.store x($pop0), $pop2 + i32.const $push18=, 20 + i32.mul $push3=, $0, $pop18 + i32.const $push4=, 207 + i32.add $push17=, $pop3, $pop4 + tee_local $push16=, $0=, $pop17 + i32.store 0($1), $pop16 + i32.const $push6=, buf + i32.const $push5=, .L.str + i32.call $drop=, sprintf@FUNCTION, $pop6, $pop5, $1 + block + i32.const $push7=, 227 + i32.ne $push8=, $0, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#1: # %if.end + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $1, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size f, .Lfunc_end2-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call f@FUNCTION + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 2 +x: + .int32 1 # 0x1 + .size x, 4 + + .hidden buf # @buf + .type buf,@object + .section .bss.buf,"aw",@nobits + .globl buf +buf: + .skip 10 + .size buf, 10 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "%d\n" + .size .L.str, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype sprintf, i32, i32, i32 + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/980608-1.c.s b/src/binaryen/test/torture-s/980608-1.c.s new file mode 100644 index 0000000000..79b4ffbcfb --- /dev/null +++ b/src/binaryen/test/torture-s/980608-1.c.s @@ -0,0 +1,131 @@ + .text + .file "980608-1.c" + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + # -- End function + .section .text.debug,"ax",@progbits + .hidden debug # -- Begin function debug + .globl debug + .type debug,@function +debug: # @debug + .param i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push28=, 0 + i32.const $push26=, 0 + i32.load $push25=, __stack_pointer($pop26) + i32.const $push27=, 16 + i32.sub $push35=, $pop25, $pop27 + tee_local $push34=, $4=, $pop35 + i32.store __stack_pointer($pop28), $pop34 + i32.const $push0=, 4 + i32.add $push33=, $1, $pop0 + tee_local $push32=, $2=, $pop33 + i32.store 12($4), $pop32 + block + i32.load $push1=, 0($1) + i32.const $push2=, 101 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 8 + i32.add $push37=, $1, $pop4 + tee_local $push36=, $3=, $pop37 + i32.store 12($4), $pop36 + i32.load $push5=, 0($2) + i32.const $push6=, 102 + i32.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#2: # %if.end6 + i32.const $push8=, 12 + i32.add $push39=, $1, $pop8 + tee_local $push38=, $2=, $pop39 + i32.store 12($4), $pop38 + i32.load $push9=, 0($3) + i32.const $push10=, 103 + i32.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#3: # %if.end11 + i32.const $push12=, 16 + i32.add $push41=, $1, $pop12 + tee_local $push40=, $3=, $pop41 + i32.store 12($4), $pop40 + i32.load $push13=, 0($2) + i32.const $push14=, 104 + i32.ne $push15=, $pop13, $pop14 + br_if 0, $pop15 # 0: down to label0 +# BB#4: # %if.end16 + i32.const $push16=, 20 + i32.add $push43=, $1, $pop16 + tee_local $push42=, $2=, $pop43 + i32.store 12($4), $pop42 + i32.load $push17=, 0($3) + i32.const $push18=, 105 + i32.ne $push19=, $pop17, $pop18 + br_if 0, $pop19 # 0: down to label0 +# BB#5: # %if.end21 + i32.const $push20=, 24 + i32.add $push21=, $1, $pop20 + i32.store 12($4), $pop21 + i32.load $push22=, 0($2) + i32.const $push23=, 106 + i32.ne $push24=, $pop22, $pop23 + br_if 0, $pop24 # 0: down to label0 +# BB#6: # %if.end26 + i32.const $push31=, 0 + i32.const $push29=, 16 + i32.add $push30=, $4, $pop29 + i32.store __stack_pointer($pop31), $pop30 + return +.LBB1_7: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size debug, .Lfunc_end1-debug + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 32 + i32.sub $push11=, $pop6, $pop8 + tee_local $push10=, $0=, $pop11 + i32.store __stack_pointer($pop9), $pop10 + i32.const $push0=, 16 + i32.add $push1=, $0, $pop0 + i64.const $push2=, 455266533481 + i64.store 0($pop1), $pop2 + i64.const $push3=, 446676598887 + i64.store 8($0), $pop3 + i64.const $push4=, 438086664293 + i64.store 0($0), $pop4 + call debug@FUNCTION, $0, $0 + i32.const $push5=, 0 + call exit@FUNCTION, $pop5 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/980612-1.c.s b/src/binaryen/test/torture-s/980612-1.c.s new file mode 100644 index 0000000000..c1f0f81003 --- /dev/null +++ b/src/binaryen/test/torture-s/980612-1.c.s @@ -0,0 +1,71 @@ + .text + .file "980612-1.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .result i32 +# BB#0: # %entry + i32.const $push0=, f + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.h,"ax",@progbits + .hidden h # -- Begin function h + .globl h + .type h,@function +h: # @h + .result i32 +# BB#0: # %entry + i32.const $push0=, -1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size h, .Lfunc_end1-h + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push0=, 255 + i32.store8 f+1($pop7), $pop0 + block + i32.const $push6=, 0 + i32.load8_u $push1=, f($pop6) + i32.const $push2=, 111 + i32.and $push3=, $pop1, $pop2 + i32.const $push4=, 2 + i32.gt_u $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %if.then + call abort@FUNCTION + unreachable +.LBB2_2: # %if.end + end_block # label0: + i32.const $push8=, 0 + call exit@FUNCTION, $pop8 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden f # @f + .type f,@object + .section .data.f,"aw",@progbits + .globl f +f: + .int8 5 # 0x5 + .int8 0 # 0x0 + .size f, 2 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/980617-1.c.s b/src/binaryen/test/torture-s/980617-1.c.s new file mode 100644 index 0000000000..fac3b470e9 --- /dev/null +++ b/src/binaryen/test/torture-s/980617-1.c.s @@ -0,0 +1,57 @@ + .text + .file "980617-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.load8_s $push0=, 0($0) + i32.const $push1=, -17 + i32.add $push2=, $pop0, $pop1 + i32.const $push3=, 1 + i32.gt_u $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.then + return +.LBB0_2: # %if.else + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push9=, $pop2, $pop4 + tee_local $push8=, $0=, $pop9 + i32.store __stack_pointer($pop5), $pop8 + i32.const $push0=, 196625 + i32.store 12($0), $pop0 + i32.const $push6=, 12 + i32.add $push7=, $0, $pop6 + call foo@FUNCTION, $pop7 + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/980618-1.c.s b/src/binaryen/test/torture-s/980618-1.c.s new file mode 100644 index 0000000000..5cda6d5e0c --- /dev/null +++ b/src/binaryen/test/torture-s/980618-1.c.s @@ -0,0 +1,40 @@ + .text + .file "980618-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.func,"ax",@progbits + .hidden func # -- Begin function func + .globl func + .type func,@function +func: # @func + .param i32, i32 +# BB#0: # %entry + block + i32.ne $push0=, $0, $1 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.then + return +.LBB1_2: # %if.else + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size func, .Lfunc_end1-func + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/980701-1.c.s b/src/binaryen/test/torture-s/980701-1.c.s new file mode 100644 index 0000000000..e37d0443f0 --- /dev/null +++ b/src/binaryen/test/torture-s/980701-1.c.s @@ -0,0 +1,67 @@ + .text + .file "980701-1.c" + .section .text.ns_name_skip,"ax",@progbits + .hidden ns_name_skip # -- Begin function ns_name_skip + .globl ns_name_skip + .type ns_name_skip,@function +ns_name_skip: # @ns_name_skip + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store 0($0), $pop0 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size ns_name_skip, .Lfunc_end0-ns_name_skip + # -- End function + .section .text.dn_skipname,"ax",@progbits + .hidden dn_skipname # -- Begin function dn_skipname + .globl dn_skipname + .type dn_skipname,@function +dn_skipname: # @dn_skipname + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.sub $push1=, $pop0, $0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size dn_skipname, .Lfunc_end1-dn_skipname + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, a + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.then + call abort@FUNCTION + unreachable +.LBB2_2: # %if.end + end_block # label0: + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a +a: + .skip 2 + .size a, 2 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/980707-1.c.s b/src/binaryen/test/torture-s/980707-1.c.s new file mode 100644 index 0000000000..660eea0b93 --- /dev/null +++ b/src/binaryen/test/torture-s/980707-1.c.s @@ -0,0 +1,237 @@ + .text + .file "980707-1.c" + .section .text.buildargv,"ax",@progbits + .hidden buildargv # -- Begin function buildargv + .globl buildargv + .type buildargv,@function +buildargv: # @buildargv + .param i32 + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $3=, 0 +.LBB0_1: # %while.cond1 + # =>This Loop Header: Depth=1 + # Child Loop BB0_5 Depth 2 + loop # label0: + block + i32.load8_u $push16=, 0($0) + tee_local $push15=, $2=, $pop16 + i32.const $push14=, 32 + i32.ne $push1=, $pop15, $pop14 + br_if 0, $pop1 # 0: down to label1 +# BB#2: # %while.body3 + # in Loop: Header=BB0_1 Depth=1 + i32.const $push13=, 1 + i32.add $0=, $0, $pop13 + br 1 # 1: up to label0 +.LBB0_3: # %while.cond1 + # in Loop: Header=BB0_1 Depth=1 + end_block # label1: + block + i32.eqz $push30=, $2 + br_if 0, $pop30 # 0: down to label2 +# BB#4: # %if.end + # in Loop: Header=BB0_1 Depth=1 + i32.const $push18=, 2 + i32.shl $push2=, $3, $pop18 + i32.const $push17=, buildargv.arglist + i32.add $push3=, $pop2, $pop17 + i32.store 0($pop3), $0 +.LBB0_5: # %while.cond7 + # Parent Loop BB0_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label3: + i32.load8_u $2=, 0($0) + i32.const $push24=, 1 + i32.add $push23=, $0, $pop24 + tee_local $push22=, $1=, $pop23 + copy_local $0=, $pop22 + i32.const $push21=, 32 + i32.or $push4=, $2, $pop21 + i32.const $push20=, 255 + i32.and $push5=, $pop4, $pop20 + i32.const $push19=, 32 + i32.ne $push6=, $pop5, $pop19 + br_if 0, $pop6 # 0: up to label3 +# BB#6: # %while.end16 + # in Loop: Header=BB0_1 Depth=1 + end_loop + i32.const $push26=, 1 + i32.add $3=, $3, $pop26 + i32.const $push25=, 255 + i32.and $push7=, $2, $pop25 + i32.eqz $push31=, $pop7 + br_if 0, $pop31 # 0: down to label2 +# BB#7: # %if.end21 + # in Loop: Header=BB0_1 Depth=1 + i32.const $push28=, -1 + i32.add $push0=, $1, $pop28 + i32.const $push27=, 0 + i32.store8 0($pop0), $pop27 + copy_local $0=, $1 + br 1 # 1: up to label0 +.LBB0_8: # %while.end23 + end_block # label2: + end_loop + i32.const $push8=, 2 + i32.shl $push9=, $3, $pop8 + i32.const $push10=, buildargv.arglist + i32.add $push11=, $pop9, $pop10 + i32.const $push12=, 0 + i32.store 0($pop11), $pop12 + i32.const $push29=, buildargv.arglist + # fallthrough-return: $pop29 + .endfunc +.Lfunc_end0: + .size buildargv, .Lfunc_end0-buildargv + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push24=, 0 + i32.const $push22=, 0 + i32.load $push21=, __stack_pointer($pop22) + i32.const $push23=, 256 + i32.sub $push28=, $pop21, $pop23 + tee_local $push27=, $3=, $pop28 + i32.store __stack_pointer($pop24), $pop27 + i32.const $push26=, 0 + i32.load8_u $push1=, .L.str+4($pop26) + i32.store8 4($3), $pop1 + i32.const $push25=, 0 + i32.load $push2=, .L.str($pop25):p2align=0 + i32.store 0($3), $pop2 + copy_local $3=, $3 + i32.const $2=, 0 +.LBB1_1: # %while.cond1.i + # =>This Loop Header: Depth=1 + # Child Loop BB1_4 Depth 2 + block + loop # label5: + block + i32.load8_u $push33=, 0($3) + tee_local $push32=, $0=, $pop33 + i32.const $push31=, 32 + i32.eq $push3=, $pop32, $pop31 + br_if 0, $pop3 # 0: down to label6 +# BB#2: # %while.cond1.i + # in Loop: Header=BB1_1 Depth=1 + i32.eqz $push50=, $0 + br_if 2, $pop50 # 2: down to label4 +# BB#3: # %if.end.i + # in Loop: Header=BB1_1 Depth=1 + i32.const $push35=, 2 + i32.shl $push4=, $2, $pop35 + i32.const $push34=, buildargv.arglist + i32.add $push5=, $pop4, $pop34 + i32.store 0($pop5), $3 +.LBB1_4: # %while.cond7.i + # Parent Loop BB1_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label7: + i32.load8_u $0=, 0($3) + i32.const $push41=, 1 + i32.add $push40=, $3, $pop41 + tee_local $push39=, $1=, $pop40 + copy_local $3=, $pop39 + i32.const $push38=, 32 + i32.or $push6=, $0, $pop38 + i32.const $push37=, 255 + i32.and $push7=, $pop6, $pop37 + i32.const $push36=, 32 + i32.ne $push8=, $pop7, $pop36 + br_if 0, $pop8 # 0: up to label7 +# BB#5: # %while.end16.i + # in Loop: Header=BB1_1 Depth=1 + end_loop + i32.const $push43=, 1 + i32.add $2=, $2, $pop43 + i32.const $push42=, 255 + i32.and $push9=, $0, $pop42 + i32.eqz $push51=, $pop9 + br_if 2, $pop51 # 2: down to label4 +# BB#6: # %if.end21.i + # in Loop: Header=BB1_1 Depth=1 + i32.const $push30=, -1 + i32.add $push0=, $1, $pop30 + i32.const $push29=, 0 + i32.store8 0($pop0), $pop29 + copy_local $3=, $1 + br 1 # 1: up to label5 +.LBB1_7: # %while.body3.i + # in Loop: Header=BB1_1 Depth=1 + end_block # label6: + i32.const $push44=, 1 + i32.add $3=, $3, $pop44 + br 0 # 0: up to label5 +.LBB1_8: # %buildargv.exit + end_loop + end_block # label4: + i32.const $push10=, 2 + i32.shl $push11=, $2, $pop10 + i32.const $push12=, buildargv.arglist + i32.add $push13=, $pop11, $pop12 + i32.const $push46=, 0 + i32.store 0($pop13), $pop46 + block + i32.const $push45=, 0 + i32.load $push14=, buildargv.arglist($pop45) + i32.const $push15=, .L.str.1 + i32.call $push16=, strcmp@FUNCTION, $pop14, $pop15 + br_if 0, $pop16 # 0: down to label8 +# BB#9: # %if.end + i32.const $push47=, 0 + i32.load $push17=, buildargv.arglist+4($pop47) + i32.const $push18=, .L.str.2 + i32.call $push19=, strcmp@FUNCTION, $pop17, $pop18 + br_if 0, $pop19 # 0: down to label8 +# BB#10: # %if.end8 + i32.const $push48=, 0 + i32.load $push20=, buildargv.arglist+8($pop48) + br_if 0, $pop20 # 0: down to label8 +# BB#11: # %if.end11 + i32.const $push49=, 0 + call exit@FUNCTION, $pop49 + unreachable +.LBB1_12: # %if.then + end_block # label8: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type buildargv.arglist,@object # @buildargv.arglist + .section .bss.buildargv.arglist,"aw",@nobits + .p2align 4 +buildargv.arglist: + .skip 1024 + .size buildargv.arglist, 1024 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz " a b" + .size .L.str, 5 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "a" + .size .L.str.1, 2 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "b" + .size .L.str.2, 2 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strcmp, i32, i32, i32 + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/980709-1.c.s b/src/binaryen/test/torture-s/980709-1.c.s new file mode 100644 index 0000000000..7432b13f95 --- /dev/null +++ b/src/binaryen/test/torture-s/980709-1.c.s @@ -0,0 +1,57 @@ + .text + .file "980709-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local f64, f64, i32 +# BB#0: # %entry + i32.const $push15=, 0 + i32.const $push13=, 0 + i32.load $push12=, __stack_pointer($pop13) + i32.const $push14=, 16 + i32.sub $push22=, $pop12, $pop14 + tee_local $push21=, $2=, $pop22 + i32.store __stack_pointer($pop15), $pop21 + i64.const $push0=, 4629700416936869888 + i64.store 8($2), $pop0 + block + f64.load $push2=, 8($2) + f64.const $push1=, 0x1.5555555555555p-2 + f64.call $push20=, pow@FUNCTION, $pop2, $pop1 + tee_local $push19=, $0=, $pop20 + f64.const $push3=, 0x1.999999999999ap-4 + f64.add $push18=, $pop19, $pop3 + tee_local $push17=, $1=, $pop18 + f64.const $push16=, 0x1.965fe974a3401p1 + f64.le $push4=, $pop17, $pop16 + f64.ne $push5=, $1, $1 + i32.or $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %entry + f64.const $push7=, -0x1.999999999999ap-4 + f64.add $push25=, $0, $pop7 + tee_local $push24=, $1=, $pop25 + f64.const $push23=, 0x1.965fe974a3401p1 + f64.ge $push8=, $pop24, $pop23 + f64.ne $push9=, $1, $1 + i32.or $push10=, $pop8, $pop9 + br_if 0, $pop10 # 0: down to label0 +# BB#2: # %if.then + i32.const $push11=, 0 + call exit@FUNCTION, $pop11 + unreachable +.LBB0_3: # %if.else + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/980716-1.c.s b/src/binaryen/test/torture-s/980716-1.c.s new file mode 100644 index 0000000000..6011c0b07b --- /dev/null +++ b/src/binaryen/test/torture-s/980716-1.c.s @@ -0,0 +1,97 @@ + .text + .file "980716-1.c" + .section .text.stub,"ax",@progbits + .hidden stub # -- Begin function stub + .globl stub + .type stub,@function +stub: # @stub + .param i32, i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.load $push0=, __stack_pointer($pop1) + i32.const $push2=, 16 + i32.sub $push4=, $pop0, $pop2 + tee_local $push3=, $5=, $pop4 + i32.store 12($pop3), $1 + copy_local $4=, $1 +.LBB0_1: # %while.cond + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push7=, 4 + i32.add $push6=, $4, $pop7 + tee_local $push5=, $2=, $pop6 + i32.store 12($5), $pop5 + i32.load $3=, 0($4) + copy_local $4=, $2 + br_if 0, $3 # 0: up to label0 +# BB#2: # %while.end + end_loop + i32.store 12($5), $1 +.LBB0_3: # %while.cond.1 + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push10=, 4 + i32.add $push9=, $1, $pop10 + tee_local $push8=, $4=, $pop9 + i32.store 12($5), $pop8 + i32.load $2=, 0($1) + copy_local $1=, $4 + br_if 0, $2 # 0: up to label1 +# BB#4: # %while.end.1 + end_loop + # fallthrough-return + .endfunc +.Lfunc_end0: + .size stub, .Lfunc_end0-stub + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push10=, $pop4, $pop6 + tee_local $push9=, $0=, $pop10 + i32.store __stack_pointer($pop7), $pop9 + i32.const $push0=, 0 + i32.store 12($0), $pop0 + i32.const $push1=, .L.str.2 + i32.store 8($0), $pop1 + i32.const $push2=, .L.str.1 + i32.store 4($0), $pop2 + i32.const $push3=, .L.str + i32.store 0($0), $pop3 + call stub@FUNCTION, $0, $0 + i32.const $push8=, 0 + call exit@FUNCTION, $pop8 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "ab" + .size .L.str, 3 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "bc" + .size .L.str.1, 3 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "cx" + .size .L.str.2, 3 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/980929-1.c.s b/src/binaryen/test/torture-s/980929-1.c.s new file mode 100644 index 0000000000..0b5d381102 --- /dev/null +++ b/src/binaryen/test/torture-s/980929-1.c.s @@ -0,0 +1,41 @@ + .text + .file "980929-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 1000 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %for.cond + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/981001-1.c.s b/src/binaryen/test/torture-s/981001-1.c.s new file mode 100644 index 0000000000..c8ecb96855 --- /dev/null +++ b/src/binaryen/test/torture-s/981001-1.c.s @@ -0,0 +1,103 @@ + .text + .file "981001-1.c" + .section .text.sub,"ax",@progbits + .hidden sub # -- Begin function sub + .globl sub + .type sub,@function +sub: # @sub + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + block + block + i32.const $push0=, 2 + i32.lt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %if.then + i32.const $push14=, 1 + i32.shr_u $1=, $0, $pop14 + i32.const $push13=, 1 + i32.and $push2=, $0, $pop13 + br_if 1, $pop2 # 1: down to label0 +# BB#2: # %if.then2 + i32.call $push17=, sub@FUNCTION, $1 + tee_local $push16=, $0=, $pop17 + i32.const $push7=, -1 + i32.add $push8=, $1, $pop7 + i32.call $push9=, sub@FUNCTION, $pop8 + i32.const $push15=, 1 + i32.shl $push10=, $pop9, $pop15 + i32.add $push11=, $0, $pop10 + i32.mul $push12=, $pop16, $pop11 + return $pop12 +.LBB0_3: # %cleanup + end_block # label1: + return $0 +.LBB0_4: # %if.else + end_block # label0: + i32.const $push20=, 1 + i32.add $push3=, $1, $pop20 + i32.call $0=, sub@FUNCTION, $pop3 + i32.call $push19=, sub@FUNCTION, $1 + tee_local $push18=, $1=, $pop19 + i32.mul $push5=, $pop18, $1 + i32.mul $push4=, $0, $0 + i32.add $push6=, $pop5, $pop4 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size sub, .Lfunc_end0-sub + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.load $0=, flg($pop7) + block + block + i32.const $push0=, 30 + i32.call $push1=, sub@FUNCTION, $pop0 + i32.const $push2=, 832040 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label3 +# BB#1: # %if.end + br_if 1, $0 # 1: down to label2 +# BB#2: # %if.end2 + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable +.LBB1_3: # %if.end.thread + end_block # label3: + i32.const $push8=, 0 + i32.const $push4=, 256 + i32.or $push5=, $0, $pop4 + i32.store flg($pop8), $pop5 + call abort@FUNCTION + unreachable +.LBB1_4: # %if.then1 + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden flg # @flg + .type flg,@object + .section .bss.flg,"aw",@nobits + .globl flg + .p2align 2 +flg: + .int32 0 # 0x0 + .size flg, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/981019-1.c.s b/src/binaryen/test/torture-s/981019-1.c.s new file mode 100644 index 0000000000..77461bb0a5 --- /dev/null +++ b/src/binaryen/test/torture-s/981019-1.c.s @@ -0,0 +1,125 @@ + .text + .file "981019-1.c" + .section .text.ff,"ax",@progbits + .hidden ff # -- Begin function ff + .globl ff + .type ff,@function +ff: # @ff + .param i32, i32, i32 + .local i32 +# BB#0: # %entry + block + block + block + i32.eqz $push9=, $0 + br_if 0, $pop9 # 0: down to label2 +# BB#1: # %entry + br_if 1, $2 # 1: down to label1 +.LBB0_2: # %if.end3 + end_block # label2: + i32.const $push0=, 0 + i32.const $push8=, 0 + i32.load $push7=, f3.x($pop8) + tee_local $push6=, $0=, $pop7 + i32.eqz $push5=, $pop6 + tee_local $push4=, $3=, $pop5 + i32.store f3.x($pop0), $pop4 + block + i32.eqz $push10=, $0 + br_if 0, $pop10 # 0: down to label3 +# BB#3: # %while.end + br_if 1, $2 # 1: down to label1 +# BB#4: # %if.end16 + return +.LBB0_5: # %while.body.lr.ph + end_block # label3: + br_if 1, $2 # 1: down to label0 +# BB#6: # %while.end.thread + i32.const $push3=, 0 + i32.const $push1=, 1 + i32.xor $push2=, $3, $pop1 + i32.store f3.x($pop3), $pop2 + return +.LBB0_7: # %if.then2 + end_block # label1: + call f1@FUNCTION + unreachable +.LBB0_8: # %land.lhs.true.split + end_block # label0: + i32.call $drop=, f2@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size ff, .Lfunc_end0-ff + # -- End function + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size f1, .Lfunc_end1-f1 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, f3.x($pop4) + i32.eqz $push3=, $pop1 + tee_local $push2=, $0=, $pop3 + i32.store f3.x($pop0), $pop2 + copy_local $push5=, $0 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end2: + .size f3, .Lfunc_end2-f3 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .result i32 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size f2, .Lfunc_end3-f2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push2=, 0 + i32.store f3.x($pop0), $pop2 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + .type f3.x,@object # @f3.x + .section .bss.f3.x,"aw",@nobits + .p2align 2 +f3.x: + .int32 0 # 0x0 + .size f3.x, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/981130-1.c.s b/src/binaryen/test/torture-s/981130-1.c.s new file mode 100644 index 0000000000..84f91d1805 --- /dev/null +++ b/src/binaryen/test/torture-s/981130-1.c.s @@ -0,0 +1,68 @@ + .text + .file "981130-1.c" + .section .text.check,"ax",@progbits + .hidden check # -- Begin function check + .globl check + .type check,@function +check: # @check + .param i32, i32 +# BB#0: # %entry + block + i32.ne $push0=, $0, $1 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.then + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable +.LBB0_2: # %if.else + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size check, .Lfunc_end0-check + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i64.load $push4=, s2($pop5) + tee_local $push3=, $0=, $pop4 + i64.store s1($pop0), $pop3 + i32.wrap/i64 $push1=, $0 + i32.const $push2=, 1 + call check@FUNCTION, $pop1, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden s2 # @s2 + .type s2,@object + .section .data.s2,"aw",@progbits + .globl s2 + .p2align 3 +s2: + .int32 1 # 0x1 + .int32 2 # 0x2 + .size s2, 8 + + .hidden s1 # @s1 + .type s1,@object + .section .bss.s1,"aw",@nobits + .globl s1 + .p2align 3 +s1: + .skip 8 + .size s1, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/981206-1.c.s b/src/binaryen/test/torture-s/981206-1.c.s new file mode 100644 index 0000000000..f93f9d1601 --- /dev/null +++ b/src/binaryen/test/torture-s/981206-1.c.s @@ -0,0 +1,56 @@ + .text + .file "981206-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store8 y($pop1), $pop0 + i32.const $push3=, 0 + i32.const $push2=, 1 + i32.store8 x($pop3), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store8 y($pop1), $pop0 + i32.const $push4=, 0 + i32.const $push3=, 1 + i32.store8 x($pop4), $pop3 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type x,@object # @x + .section .bss.x,"aw",@nobits + .p2align 1 +x: + .int8 0 # 0x0 + .size x, 1 + + .type y,@object # @y + .section .bss.y,"aw",@nobits + .p2align 1 +y: + .int8 0 # 0x0 + .size y, 1 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990106-1.c.s b/src/binaryen/test/torture-s/990106-1.c.s new file mode 100644 index 0000000000..0446c07385 --- /dev/null +++ b/src/binaryen/test/torture-s/990106-1.c.s @@ -0,0 +1,35 @@ + .text + .file "990106-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 97 + i32.store8 0($0), $pop0 + i32.const $push1=, 97 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990106-2.c.s b/src/binaryen/test/torture-s/990106-2.c.s new file mode 100644 index 0000000000..2a58150a81 --- /dev/null +++ b/src/binaryen/test/torture-s/990106-2.c.s @@ -0,0 +1,43 @@ + .text + .file "990106-2.c" + .section .text.calc_mp,"ax",@progbits + .hidden calc_mp # -- Begin function calc_mp + .globl calc_mp + .type calc_mp,@function +calc_mp: # @calc_mp + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, -1 + i32.rem_u $push1=, $pop0, $0 + i32.const $push2=, 1 + i32.add $push8=, $pop1, $pop2 + tee_local $push7=, $1=, $pop8 + i32.const $push4=, 0 + i32.gt_u $push3=, $1, $0 + i32.select $push5=, $0, $pop4, $pop3 + i32.sub $push6=, $pop7, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size calc_mp, .Lfunc_end0-calc_mp + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990117-1.c.s b/src/binaryen/test/torture-s/990117-1.c.s new file mode 100644 index 0000000000..d3c490bd1c --- /dev/null +++ b/src/binaryen/test/torture-s/990117-1.c.s @@ -0,0 +1,37 @@ + .text + .file "990117-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + f64.convert_s/i32 $push4=, $0 + f64.convert_s/i32 $push3=, $1 + f64.div $push5=, $pop4, $pop3 + f64.convert_s/i32 $push1=, $2 + f64.convert_s/i32 $push0=, $3 + f64.div $push2=, $pop1, $pop0 + f64.lt $push6=, $pop5, $pop2 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/990127-1.c.s b/src/binaryen/test/torture-s/990127-1.c.s new file mode 100644 index 0000000000..4da9346ad7 --- /dev/null +++ b/src/binaryen/test/torture-s/990127-1.c.s @@ -0,0 +1,111 @@ + .text + .file "990127-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push15=, 0 + i32.const $push13=, 0 + i32.load $push12=, __stack_pointer($pop13) + i32.const $push14=, 16 + i32.sub $push28=, $pop12, $pop14 + tee_local $push27=, $4=, $pop28 + i32.store __stack_pointer($pop15), $pop27 + i32.const $push0=, 20 + i32.store 8($4), $pop0 + i32.const $push26=, 10 + i32.store 12($4), $pop26 + i32.const $push16=, 12 + i32.add $push17=, $4, $pop16 + copy_local $2=, $pop17 + i32.const $0=, 0 + i32.const $3=, 0 +.LBB0_1: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB0_3 Depth 2 + loop # label0: + i32.const $push20=, 8 + i32.add $push21=, $4, $pop20 + i32.const $push22=, 12 + i32.add $push23=, $4, $pop22 + i32.const $push18=, 12 + i32.add $push19=, $4, $pop18 + i32.eq $push1=, $2, $pop19 + i32.select $push33=, $pop21, $pop23, $pop1 + tee_local $push32=, $2=, $pop33 + i32.load $push31=, 0($2) + tee_local $push30=, $2=, $pop31 + i32.const $push29=, -1 + i32.add $push2=, $pop30, $pop29 + i32.store 0($pop32), $pop2 + block + i32.eqz $push45=, $2 + br_if 0, $pop45 # 0: down to label1 +# BB#2: # %while.body.preheader + # in Loop: Header=BB0_1 Depth=1 + i32.const $push34=, 1 + i32.add $1=, $3, $pop34 +.LBB0_3: # %while.body + # Parent Loop BB0_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label2: + copy_local $3=, $1 + i32.const $push35=, 3 + i32.le_s $push3=, $2, $pop35 + br_if 1, $pop3 # 1: down to label1 +# BB#4: # %while.cond + # in Loop: Header=BB0_3 Depth=2 + i32.load $push39=, 8($4) + tee_local $push38=, $2=, $pop39 + i32.const $push37=, -1 + i32.add $push4=, $pop38, $pop37 + i32.store 8($4), $pop4 + i32.const $push36=, 1 + i32.add $1=, $3, $pop36 + br_if 0, $2 # 0: up to label2 +.LBB0_5: # %while.end + # in Loop: Header=BB0_1 Depth=1 + end_loop + end_block # label1: + i32.const $push44=, 1 + i32.add $3=, $3, $pop44 + i32.const $push24=, 8 + i32.add $push25=, $4, $pop24 + copy_local $2=, $pop25 + i32.const $push43=, 1 + i32.add $push42=, $0, $pop43 + tee_local $push41=, $0=, $pop42 + i32.const $push40=, 10 + i32.ne $push5=, $pop41, $pop40 + br_if 0, $pop5 # 0: up to label0 +# BB#6: # %for.end + end_loop + block + i32.load $push7=, 8($4) + i32.const $push6=, -5 + i32.ne $push8=, $pop7, $pop6 + br_if 0, $pop8 # 0: down to label3 +# BB#7: # %for.end + i32.const $push9=, 43 + i32.ne $push10=, $3, $pop9 + br_if 0, $pop10 # 0: down to label3 +# BB#8: # %if.end13 + i32.const $push11=, 0 + call exit@FUNCTION, $pop11 + unreachable +.LBB0_9: # %if.then12 + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990127-2.c.s b/src/binaryen/test/torture-s/990127-2.c.s new file mode 100644 index 0000000000..ec18e13593 --- /dev/null +++ b/src/binaryen/test/torture-s/990127-2.c.s @@ -0,0 +1,64 @@ + .text + .file "990127-2.c" + .section .text.fpEq,"ax",@progbits + .hidden fpEq # -- Begin function fpEq + .globl fpEq + .type fpEq,@function +fpEq: # @fpEq + .param f64, f64 +# BB#0: # %entry + block + f64.ne $push0=, $0, $1 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size fpEq, .Lfunc_end0-fpEq + # -- End function + .section .text.fpTest,"ax",@progbits + .hidden fpTest # -- Begin function fpTest + .globl fpTest + .type fpTest,@function +fpTest: # @fpTest + .param f64, f64 +# BB#0: # %entry + block + f64.const $push0=, 0x1.9p6 + f64.mul $push1=, $0, $pop0 + f64.div $push2=, $pop1, $1 + f64.const $push3=, 0x1.3d55555555556p6 + f64.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label1 +# BB#1: # %fpEq.exit + return +.LBB1_2: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size fpTest, .Lfunc_end1-fpTest + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990128-1.c.s b/src/binaryen/test/torture-s/990128-1.c.s new file mode 100644 index 0000000000..7a0060af9c --- /dev/null +++ b/src/binaryen/test/torture-s/990128-1.c.s @@ -0,0 +1,220 @@ + .text + .file "990128-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, sss + i32.store ss($pop1), $pop0 + i32.const $1=, ss + i32.const $push27=, 0 + i32.const $push26=, ss + i32.store p($pop27), $pop26 + i32.const $push25=, 0 + i32.const $push2=, sss+4 + i32.store sss($pop25), $pop2 + i32.const $push24=, 0 + i32.const $push3=, sss+8 + i32.store sss+4($pop24), $pop3 + i32.const $push23=, 0 + i32.const $push4=, sss+12 + i32.store sss+8($pop23), $pop4 + i32.const $push22=, 0 + i32.const $push5=, sss+16 + i32.store sss+12($pop22), $pop5 + i32.const $push21=, 0 + i32.const $push6=, sss+20 + i32.store sss+16($pop21), $pop6 + i32.const $push20=, 0 + i32.const $push7=, sss+24 + i32.store sss+20($pop20), $pop7 + i32.const $push19=, 0 + i32.const $push8=, sss+28 + i32.store sss+24($pop19), $pop8 + i32.const $push18=, 0 + i32.const $push9=, sss+32 + i32.store sss+28($pop18), $pop9 + i32.const $push17=, 0 + i32.const $push10=, sss+36 + i32.store sss+32($pop17), $pop10 + i32.const $push16=, 0 + i32.const $push15=, 0 + i32.store sss+36($pop16), $pop15 + i32.const $push14=, 0 + i32.load $2=, count($pop14) +.LBB0_1: # %for.inc.lr.ph.i.i + # =>This Loop Header: Depth=1 + # Child Loop BB0_2 Depth 2 + loop # label0: + copy_local $0=, $2 + copy_local $2=, $1 +.LBB0_2: # %for.inc.i.i + # Parent Loop BB0_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label1: + i32.load $push29=, 0($2) + tee_local $push28=, $2=, $pop29 + br_if 0, $pop28 # 0: up to label1 +# BB#3: # %if.then.i + # in Loop: Header=BB0_1 Depth=1 + end_loop + i32.const $push32=, 1 + i32.add $2=, $0, $pop32 + i32.load $push31=, 0($1) + tee_local $push30=, $1=, $pop31 + br_if 0, $pop30 # 0: up to label0 +# BB#4: # %sub.exit + end_loop + i32.const $push35=, 0 + i32.const $push11=, 2 + i32.add $push34=, $0, $pop11 + tee_local $push33=, $2=, $pop34 + i32.store count($pop35), $pop33 + block + i32.const $push12=, 12 + i32.ne $push13=, $2, $pop12 + br_if 0, $pop13 # 0: down to label2 +# BB#5: # %if.end + i32.const $push36=, 0 + call exit@FUNCTION, $pop36 + unreachable +.LBB0_6: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.sub,"ax",@progbits + .hidden sub # -- Begin function sub + .globl sub + .type sub,@function +sub: # @sub + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push3=, 0 + i32.load $2=, count($pop3) + block + i32.eqz $push12=, $0 + br_if 0, $pop12 # 0: down to label3 +# BB#1: +.LBB1_2: # %for.inc.lr.ph.i + # =>This Loop Header: Depth=1 + # Child Loop BB1_3 Depth 2 + loop # label4: + copy_local $3=, $0 +.LBB1_3: # %for.inc.i + # Parent Loop BB1_2 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label5: + i32.load $push5=, 0($3) + tee_local $push4=, $3=, $pop5 + br_if 0, $pop4 # 0: up to label5 +# BB#4: # %if.then + # in Loop: Header=BB1_2 Depth=1 + end_loop + i32.const $push9=, 0 + i32.store 0($1), $pop9 + i32.const $push8=, 1 + i32.add $2=, $2, $pop8 + i32.load $push7=, 0($0) + tee_local $push6=, $0=, $pop7 + br_if 0, $pop6 # 0: up to label4 +# BB#5: # %for.cond.look.exit.thread_crit_edge + end_loop + i32.const $push0=, 0 + i32.store count($pop0), $2 +.LBB1_6: # %for.end + end_block # label3: + i32.const $push11=, 0 + i32.store 0($1), $pop11 + i32.const $push10=, 0 + i32.const $push1=, 1 + i32.add $push2=, $2, $pop1 + i32.store count($pop10), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size sub, .Lfunc_end1-sub + # -- End function + .section .text.look,"ax",@progbits + .hidden look # -- Begin function look + .globl look + .type look,@function +look: # @look + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.eqz $push9=, $0 + br_if 0, $pop9 # 0: down to label6 +.LBB2_1: # %for.inc + # =>This Inner Loop Header: Depth=1 + loop # label7: + i32.load $push5=, 0($0) + tee_local $push4=, $0=, $pop5 + br_if 0, $pop4 # 0: up to label7 +.LBB2_2: # %for.end + end_loop + end_block # label6: + i32.const $push0=, 0 + i32.store 0($1), $pop0 + i32.const $push8=, 0 + i32.const $push7=, 0 + i32.load $push1=, count($pop7) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store count($pop8), $pop3 + i32.const $push6=, 1 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end2: + .size look, .Lfunc_end2-look + # -- End function + .hidden count # @count + .type count,@object + .section .bss.count,"aw",@nobits + .globl count + .p2align 2 +count: + .int32 0 # 0x0 + .size count, 4 + + .hidden ss # @ss + .type ss,@object + .section .bss.ss,"aw",@nobits + .globl ss + .p2align 2 +ss: + .skip 4 + .size ss, 4 + + .hidden p # @p + .type p,@object + .section .bss.p,"aw",@nobits + .globl p + .p2align 2 +p: + .int32 0 + .size p, 4 + + .hidden sss # @sss + .type sss,@object + .section .bss.sss,"aw",@nobits + .globl sss + .p2align 4 +sss: + .skip 40 + .size sss, 40 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990130-1.c.s b/src/binaryen/test/torture-s/990130-1.c.s new file mode 100644 index 0000000000..0390eaa924 --- /dev/null +++ b/src/binaryen/test/torture-s/990130-1.c.s @@ -0,0 +1,59 @@ + .text + .file "990130-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push6=, 0 + i32.load $push5=, count($pop6) + tee_local $push4=, $1=, $pop5 + i32.const $push0=, 1 + i32.add $push1=, $pop4, $pop0 + i32.store count($pop7), $pop1 + i32.const $push3=, 0 + i32.load $0=, dummy($pop3) + #APP + #NO_APP + i32.const $push2=, 0 + i32.store dummy($pop2), $0 + block + br_if 0, $1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push8=, 0 + call exit@FUNCTION, $pop8 + unreachable +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden count # @count + .type count,@object + .section .bss.count,"aw",@nobits + .globl count + .p2align 2 +count: + .int32 0 # 0x0 + .size count, 4 + + .hidden dummy # @dummy + .type dummy,@object + .section .bss.dummy,"aw",@nobits + .globl dummy + .p2align 2 +dummy: + .int32 0 # 0x0 + .size dummy, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990211-1.c.s b/src/binaryen/test/torture-s/990211-1.c.s new file mode 100644 index 0000000000..fc6374b137 --- /dev/null +++ b/src/binaryen/test/torture-s/990211-1.c.s @@ -0,0 +1,29 @@ + .text + .file "990211-1.c" + .section .text.func,"ax",@progbits + .hidden func # -- Begin function func + .globl func + .type func,@function +func: # @func + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size func, .Lfunc_end0-func + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/990222-1.c.s b/src/binaryen/test/torture-s/990222-1.c.s new file mode 100644 index 0000000000..3c9f26344b --- /dev/null +++ b/src/binaryen/test/torture-s/990222-1.c.s @@ -0,0 +1,92 @@ + .text + .file "990222-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push23=, 0 + i32.const $push22=, 0 + i32.load8_u $push0=, line+2($pop22) + i32.const $push21=, 1 + i32.add $push20=, $pop0, $pop21 + tee_local $push19=, $1=, $pop20 + i32.store8 line+2($pop23), $pop19 + block + i32.const $push18=, 24 + i32.shl $push1=, $1, $pop18 + i32.const $push2=, 956301313 + i32.lt_s $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %while.body.preheader + i32.const $1=, line+1 +.LBB0_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push31=, 1 + i32.add $push4=, $1, $pop31 + i32.const $push30=, 48 + i32.store8 0($pop4), $pop30 + i32.load8_u $push5=, 0($1) + i32.const $push29=, 1 + i32.add $push28=, $pop5, $pop29 + tee_local $push27=, $0=, $pop28 + i32.store8 0($1), $pop27 + i32.const $push26=, -1 + i32.add $1=, $1, $pop26 + i32.const $push25=, 24 + i32.shl $push6=, $0, $pop25 + i32.const $push24=, 956301312 + i32.gt_s $push7=, $pop6, $pop24 + br_if 0, $pop7 # 0: up to label1 +# BB#3: # %while.end.loopexit + end_loop + i32.const $push8=, 0 + i32.load8_u $1=, line+2($pop8) +.LBB0_4: # %while.end + end_block # label0: + block + i32.const $push32=, 0 + i32.load8_u $push10=, line($pop32) + i32.const $push11=, 50 + i32.ne $push12=, $pop10, $pop11 + br_if 0, $pop12 # 0: down to label2 +# BB#5: # %while.end + i32.const $push35=, 0 + i32.load8_u $push9=, line+1($pop35) + i32.const $push34=, 255 + i32.and $push13=, $pop9, $pop34 + i32.const $push33=, 48 + i32.ne $push14=, $pop13, $pop33 + br_if 0, $pop14 # 0: down to label2 +# BB#6: # %while.end + i32.const $push37=, 255 + i32.and $push15=, $1, $pop37 + i32.const $push36=, 48 + i32.ne $push16=, $pop15, $pop36 + br_if 0, $pop16 # 0: down to label2 +# BB#7: # %if.end + i32.const $push17=, 0 + return $pop17 +.LBB0_8: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden line # @line + .type line,@object + .section .data.line,"aw",@progbits + .globl line +line: + .asciz "199" + .size line, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/990324-1.c.s b/src/binaryen/test/torture-s/990324-1.c.s new file mode 100644 index 0000000000..ccc654d74f --- /dev/null +++ b/src/binaryen/test/torture-s/990324-1.c.s @@ -0,0 +1,45 @@ + .text + .file "990324-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.const $push3=, 0 + i32.gt_s $push2=, $pop1, $pop3 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.then + call abort@FUNCTION + unreachable +.LBB0_2: # %if.else + end_block # label0: + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, -255 + call f@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990326-1.c.s b/src/binaryen/test/torture-s/990326-1.c.s new file mode 100644 index 0000000000..52f63c2791 --- /dev/null +++ b/src/binaryen/test/torture-s/990326-1.c.s @@ -0,0 +1,461 @@ + .text + .file "990326-1.c" + .section .text.a1,"ax",@progbits + .hidden a1 # -- Begin function a1 + .globl a1 + .type a1,@function +a1: # @a1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size a1, .Lfunc_end0-a1 + # -- End function + .section .text.a2,"ax",@progbits + .hidden a2 # -- Begin function a2 + .globl a2 + .type a2,@function +a2: # @a2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size a2, .Lfunc_end1-a2 + # -- End function + .section .text.a3,"ax",@progbits + .hidden a3 # -- Begin function a3 + .globl a3 + .type a3,@function +a3: # @a3 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size a3, .Lfunc_end2-a3 + # -- End function + .section .text.b1,"ax",@progbits + .hidden b1 # -- Begin function b1 + .globl b1 + .type b1,@function +b1: # @b1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size b1, .Lfunc_end3-b1 + # -- End function + .section .text.b2,"ax",@progbits + .hidden b2 # -- Begin function b2 + .globl b2 + .type b2,@function +b2: # @b2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size b2, .Lfunc_end4-b2 + # -- End function + .section .text.b3,"ax",@progbits + .hidden b3 # -- Begin function b3 + .globl b3 + .type b3,@function +b3: # @b3 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end5: + .size b3, .Lfunc_end5-b3 + # -- End function + .section .text.c1,"ax",@progbits + .hidden c1 # -- Begin function c1 + .globl c1 + .type c1,@function +c1: # @c1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end6: + .size c1, .Lfunc_end6-c1 + # -- End function + .section .text.c2,"ax",@progbits + .hidden c2 # -- Begin function c2 + .globl c2 + .type c2,@function +c2: # @c2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end7: + .size c2, .Lfunc_end7-c2 + # -- End function + .section .text.c3,"ax",@progbits + .hidden c3 # -- Begin function c3 + .globl c3 + .type c3,@function +c3: # @c3 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end8: + .size c3, .Lfunc_end8-c3 + # -- End function + .section .text.d1,"ax",@progbits + .hidden d1 # -- Begin function d1 + .globl d1 + .type d1,@function +d1: # @d1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end9: + .size d1, .Lfunc_end9-d1 + # -- End function + .section .text.d2,"ax",@progbits + .hidden d2 # -- Begin function d2 + .globl d2 + .type d2,@function +d2: # @d2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end10: + .size d2, .Lfunc_end10-d2 + # -- End function + .section .text.d3,"ax",@progbits + .hidden d3 # -- Begin function d3 + .globl d3 + .type d3,@function +d3: # @d3 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end11: + .size d3, .Lfunc_end11-d3 + # -- End function + .section .text.e1,"ax",@progbits + .hidden e1 # -- Begin function e1 + .globl e1 + .type e1,@function +e1: # @e1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end12: + .size e1, .Lfunc_end12-e1 + # -- End function + .section .text.e2,"ax",@progbits + .hidden e2 # -- Begin function e2 + .globl e2 + .type e2,@function +e2: # @e2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end13: + .size e2, .Lfunc_end13-e2 + # -- End function + .section .text.e3,"ax",@progbits + .hidden e3 # -- Begin function e3 + .globl e3 + .type e3,@function +e3: # @e3 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end14: + .size e3, .Lfunc_end14-e3 + # -- End function + .section .text.e4,"ax",@progbits + .hidden e4 # -- Begin function e4 + .globl e4 + .type e4,@function +e4: # @e4 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end15: + .size e4, .Lfunc_end15-e4 + # -- End function + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end16: + .size f1, .Lfunc_end16-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end17: + .size f2, .Lfunc_end17-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end18: + .size f3, .Lfunc_end18-f3 + # -- End function + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end19: + .size f4, .Lfunc_end19-f4 + # -- End function + .section .text.g1,"ax",@progbits + .hidden g1 # -- Begin function g1 + .globl g1 + .type g1,@function +g1: # @g1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end20: + .size g1, .Lfunc_end20-g1 + # -- End function + .section .text.g2,"ax",@progbits + .hidden g2 # -- Begin function g2 + .globl g2 + .type g2,@function +g2: # @g2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end21: + .size g2, .Lfunc_end21-g2 + # -- End function + .section .text.g3,"ax",@progbits + .hidden g3 # -- Begin function g3 + .globl g3 + .type g3,@function +g3: # @g3 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end22: + .size g3, .Lfunc_end22-g3 + # -- End function + .section .text.g4,"ax",@progbits + .hidden g4 # -- Begin function g4 + .globl g4 + .type g4,@function +g4: # @g4 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end23: + .size g4, .Lfunc_end23-g4 + # -- End function + .section .text.g5,"ax",@progbits + .hidden g5 # -- Begin function g5 + .globl g5 + .type g5,@function +g5: # @g5 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end24: + .size g5, .Lfunc_end24-g5 + # -- End function + .section .text.g6,"ax",@progbits + .hidden g6 # -- Begin function g6 + .globl g6 + .type g6,@function +g6: # @g6 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end25: + .size g6, .Lfunc_end25-g6 + # -- End function + .section .text.g7,"ax",@progbits + .hidden g7 # -- Begin function g7 + .globl g7 + .type g7,@function +g7: # @g7 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end26: + .size g7, .Lfunc_end26-g7 + # -- End function + .section .text.h1,"ax",@progbits + .hidden h1 # -- Begin function h1 + .globl h1 + .type h1,@function +h1: # @h1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end27: + .size h1, .Lfunc_end27-h1 + # -- End function + .section .text.h2,"ax",@progbits + .hidden h2 # -- Begin function h2 + .globl h2 + .type h2,@function +h2: # @h2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end28: + .size h2, .Lfunc_end28-h2 + # -- End function + .section .text.h3,"ax",@progbits + .hidden h3 # -- Begin function h3 + .globl h3 + .type h3,@function +h3: # @h3 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end29: + .size h3, .Lfunc_end29-h3 + # -- End function + .section .text.h4,"ax",@progbits + .hidden h4 # -- Begin function h4 + .globl h4 + .type h4,@function +h4: # @h4 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end30: + .size h4, .Lfunc_end30-h4 + # -- End function + .section .text.h5,"ax",@progbits + .hidden h5 # -- Begin function h5 + .globl h5 + .type h5,@function +h5: # @h5 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end31: + .size h5, .Lfunc_end31-h5 + # -- End function + .section .text.h6,"ax",@progbits + .hidden h6 # -- Begin function h6 + .globl h6 + .type h6,@function +h6: # @h6 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end32: + .size h6, .Lfunc_end32-h6 + # -- End function + .section .text.h7,"ax",@progbits + .hidden h7 # -- Begin function h7 + .globl h7 + .type h7,@function +h7: # @h7 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end33: + .size h7, .Lfunc_end33-h7 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end132 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end34: + .size main, .Lfunc_end34-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990404-1.c.s b/src/binaryen/test/torture-s/990404-1.c.s new file mode 100644 index 0000000000..885b682fe0 --- /dev/null +++ b/src/binaryen/test/torture-s/990404-1.c.s @@ -0,0 +1,159 @@ + .text + .file "990404-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $11=, -1 + # implicit-def: %vreg122 +.LBB0_1: # %for.cond + # =>This Inner Loop Header: Depth=1 + block + loop # label1: + i32.const $push83=, 0 + i32.load $push82=, x+36($pop83) + tee_local $push81=, $10=, $pop82 + i32.const $push80=, 0 + i32.load $push79=, x+32($pop80) + tee_local $push78=, $9=, $pop79 + i32.const $push77=, 0 + i32.load $push76=, x+28($pop77) + tee_local $push75=, $8=, $pop76 + i32.const $push74=, 0 + i32.load $push73=, x+24($pop74) + tee_local $push72=, $7=, $pop73 + i32.const $push71=, 0 + i32.load $push70=, x+20($pop71) + tee_local $push69=, $6=, $pop70 + i32.const $push68=, 0 + i32.load $push67=, x+16($pop68) + tee_local $push66=, $5=, $pop67 + i32.const $push65=, 0 + i32.load $push64=, x+12($pop65) + tee_local $push63=, $4=, $pop64 + i32.const $push62=, 0 + i32.load $push61=, x+8($pop62) + tee_local $push60=, $3=, $pop61 + i32.const $push59=, 0 + i32.load $push58=, x+4($pop59) + tee_local $push57=, $2=, $pop58 + i32.const $push56=, 0 + i32.load $push55=, x($pop56) + tee_local $push54=, $0=, $pop55 + i32.const $push53=, 0 + i32.const $push52=, 0 + i32.gt_s $push51=, $0, $pop52 + tee_local $push50=, $0=, $pop51 + i32.select $push49=, $pop54, $pop53, $pop50 + tee_local $push48=, $1=, $pop49 + i32.gt_s $push47=, $2, $1 + tee_local $push46=, $2=, $pop47 + i32.select $push45=, $pop57, $pop48, $pop46 + tee_local $push44=, $1=, $pop45 + i32.gt_s $push43=, $3, $1 + tee_local $push42=, $3=, $pop43 + i32.select $push41=, $pop60, $pop44, $pop42 + tee_local $push40=, $1=, $pop41 + i32.gt_s $push39=, $4, $1 + tee_local $push38=, $4=, $pop39 + i32.select $push37=, $pop63, $pop40, $pop38 + tee_local $push36=, $1=, $pop37 + i32.gt_s $push35=, $5, $1 + tee_local $push34=, $5=, $pop35 + i32.select $push33=, $pop66, $pop36, $pop34 + tee_local $push32=, $1=, $pop33 + i32.gt_s $push31=, $6, $1 + tee_local $push30=, $6=, $pop31 + i32.select $push29=, $pop69, $pop32, $pop30 + tee_local $push28=, $1=, $pop29 + i32.gt_s $push27=, $7, $1 + tee_local $push26=, $7=, $pop27 + i32.select $push25=, $pop72, $pop28, $pop26 + tee_local $push24=, $1=, $pop25 + i32.gt_s $push23=, $8, $1 + tee_local $push22=, $8=, $pop23 + i32.select $push21=, $pop75, $pop24, $pop22 + tee_local $push20=, $1=, $pop21 + i32.gt_s $push19=, $9, $1 + tee_local $push18=, $9=, $pop19 + i32.select $push17=, $pop78, $pop20, $pop18 + tee_local $push16=, $1=, $pop17 + i32.gt_s $push15=, $10, $1 + tee_local $push14=, $10=, $pop15 + i32.select $push9=, $pop81, $pop16, $pop14 + i32.eqz $push103=, $pop9 + br_if 1, $pop103 # 1: down to label0 +# BB#2: # %if.end7 + # in Loop: Header=BB0_1 Depth=1 + i32.const $push102=, 9 + i32.const $push101=, 8 + i32.const $push100=, 7 + i32.const $push99=, 6 + i32.const $push98=, 5 + i32.const $push97=, 4 + i32.const $push96=, 3 + i32.const $push95=, 2 + i32.const $push94=, 1 + i32.const $push93=, 0 + i32.select $push0=, $pop93, $12, $0 + i32.select $push1=, $pop94, $pop0, $2 + i32.select $push2=, $pop95, $pop1, $3 + i32.select $push3=, $pop96, $pop2, $4 + i32.select $push4=, $pop97, $pop3, $5 + i32.select $push5=, $pop98, $pop4, $6 + i32.select $push6=, $pop99, $pop5, $7 + i32.select $push7=, $pop100, $pop6, $8 + i32.select $push8=, $pop101, $pop7, $9 + i32.select $push92=, $pop102, $pop8, $10 + tee_local $push91=, $12=, $pop92 + i32.const $push90=, 2 + i32.shl $push10=, $pop91, $pop90 + i32.const $push89=, x + i32.add $push11=, $pop10, $pop89 + i32.const $push88=, 0 + i32.store 0($pop11), $pop88 + i32.const $push87=, 1 + i32.add $push86=, $11, $pop87 + tee_local $push85=, $11=, $pop86 + i32.const $push84=, 10 + i32.lt_u $push12=, $pop85, $pop84 + br_if 0, $pop12 # 0: up to label1 +# BB#3: # %if.then11 + end_loop + call abort@FUNCTION + unreachable +.LBB0_4: # %for.end15 + end_block # label0: + i32.const $push13=, 0 + call exit@FUNCTION, $pop13 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 4 +x: + .int32 0 # 0x0 + .int32 1 # 0x1 + .int32 2 # 0x2 + .int32 3 # 0x3 + .int32 4 # 0x4 + .int32 5 # 0x5 + .int32 6 # 0x6 + .int32 7 # 0x7 + .int32 8 # 0x8 + .int32 9 # 0x9 + .size x, 40 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990513-1.c.s b/src/binaryen/test/torture-s/990513-1.c.s new file mode 100644 index 0000000000..2e2442d2a5 --- /dev/null +++ b/src/binaryen/test/torture-s/990513-1.c.s @@ -0,0 +1,100 @@ + .text + .file "990513-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $3=, 1024 +.LBB0_1: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.add $push12=, $0, $3 + tee_local $push11=, $2=, $pop12 + i32.const $push10=, -8 + i32.add $push0=, $pop11, $pop10 + i32.store 0($pop0), $1 + i32.const $push9=, -4 + i32.add $push1=, $2, $pop9 + i32.store 0($pop1), $1 + i32.const $push8=, -12 + i32.add $push2=, $2, $pop8 + i32.store 0($pop2), $1 + i32.const $push7=, -16 + i32.add $push3=, $2, $pop7 + i32.store 0($pop3), $1 + i32.const $push6=, -16 + i32.add $push5=, $3, $pop6 + tee_local $push4=, $3=, $pop5 + br_if 0, $pop4 # 0: up to label0 +# BB#2: # %while.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push10=, 0 + i32.const $push8=, 0 + i32.load $push7=, __stack_pointer($pop8) + i32.const $push9=, 1024 + i32.sub $push16=, $pop7, $pop9 + tee_local $push15=, $1=, $pop16 + i32.store __stack_pointer($pop10), $pop15 + i32.const $2=, 1024 + i32.const $push0=, 0 + i32.const $push14=, 1024 + i32.call $0=, memset@FUNCTION, $1, $pop0, $pop14 +.LBB1_1: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.add $push25=, $0, $2 + tee_local $push24=, $1=, $pop25 + i32.const $push23=, -8 + i32.add $push1=, $pop24, $pop23 + i64.const $push22=, 25769803782 + i64.store 0($pop1):p2align=2, $pop22 + i32.const $push21=, -16 + i32.add $push2=, $1, $pop21 + i64.const $push20=, 25769803782 + i64.store 0($pop2):p2align=2, $pop20 + i32.const $push19=, -16 + i32.add $push18=, $2, $pop19 + tee_local $push17=, $2=, $pop18 + br_if 0, $pop17 # 0: up to label1 +# BB#2: # %foo.exit + end_loop + block + i32.load $push4=, 0($0) + i32.const $push3=, 6 + i32.ne $push5=, $pop4, $pop3 + br_if 0, $pop5 # 0: down to label2 +# BB#3: # %if.end + i32.const $push13=, 0 + i32.const $push11=, 1024 + i32.add $push12=, $0, $pop11 + i32.store __stack_pointer($pop13), $pop12 + i32.const $push6=, 0 + return $pop6 +.LBB1_4: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/990524-1.c.s b/src/binaryen/test/torture-s/990524-1.c.s new file mode 100644 index 0000000000..df88509333 --- /dev/null +++ b/src/binaryen/test/torture-s/990524-1.c.s @@ -0,0 +1,110 @@ + .text + .file "990524-1.c" + .section .text.loop,"ax",@progbits + .hidden loop # -- Begin function loop + .globl loop + .type loop,@function +loop: # @loop + .param i32, i32 + .local i32, i32, i32 +# BB#0: # %entry +.LBB0_1: # %for.cond + # =>This Inner Loop Header: Depth=1 + loop # label0: + copy_local $push22=, $1 + tee_local $push21=, $2=, $pop22 + i32.load8_u $push20=, 0($pop21) + tee_local $push19=, $4=, $pop20 + i32.store8 0($0), $pop19 + i32.const $push18=, 1 + i32.add $1=, $2, $pop18 + i32.const $push17=, 24 + i32.shl $push0=, $4, $pop17 + i32.const $push16=, 24 + i32.shr_s $3=, $pop0, $pop16 + block + block + i32.const $push15=, 34 + i32.eq $push1=, $4, $pop15 + br_if 0, $pop1 # 0: down to label2 +# BB#2: # %for.cond + # in Loop: Header=BB0_1 Depth=1 + i32.const $push23=, 92 + i32.ne $push2=, $3, $pop23 + br_if 1, $pop2 # 1: down to label1 +.LBB0_3: # %sw.bb2 + # in Loop: Header=BB0_1 Depth=1 + end_block # label2: + i32.const $push14=, 92 + i32.store8 0($0), $pop14 + i32.const $push13=, 1 + i32.add $push3=, $0, $pop13 + i32.load8_u $push4=, 0($2) + i32.store8 0($pop3), $pop4 + i32.const $push12=, 2 + i32.add $0=, $0, $pop12 + br 1 # 1: up to label0 +.LBB0_4: # %for.cond + # in Loop: Header=BB0_1 Depth=1 + end_block # label1: + i32.const $push24=, 1 + i32.add $0=, $0, $pop24 + br_if 0, $3 # 0: up to label0 +# BB#5: # %loopDone2 + end_loop + block + i32.const $push5=, a + i32.sub $push6=, $pop5, $0 + i32.const $push9=, b + i32.const $push7=, 1 + i32.add $push8=, $2, $pop7 + i32.sub $push10=, $pop9, $pop8 + i32.ne $push11=, $pop6, $pop10 + br_if 0, $pop11 # 0: down to label3 +# BB#6: # %if.end + return +.LBB0_7: # %if.then + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size loop, .Lfunc_end0-loop + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, a + i32.const $push0=, b + call loop@FUNCTION, $pop1, $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a +a: + .asciz "12345" + .size a, 6 + + .hidden b # @b + .type b,@object + .section .data.b,"aw",@progbits + .globl b +b: + .asciz "12345" + .size b, 6 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990525-1.c.s b/src/binaryen/test/torture-s/990525-1.c.s new file mode 100644 index 0000000000..4d4d62a27b --- /dev/null +++ b/src/binaryen/test/torture-s/990525-1.c.s @@ -0,0 +1,64 @@ + .text + .file "990525-1.c" + .section .text.die,"ax",@progbits + .hidden die # -- Begin function die + .globl die + .type die,@function +die: # @die + .param i32 +# BB#0: # %entry + block + i32.load $push0=, 0($0) + i32.const $push1=, 1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size die, .Lfunc_end0-die + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push10=, $pop2, $pop4 + tee_local $push9=, $0=, $pop10 + i32.store __stack_pointer($pop5), $pop9 + i32.const $push0=, 0 + i64.load $push1=, .Lmain.s($pop0):p2align=2 + i64.store 8($0), $pop1 + i32.const $push6=, 8 + i32.add $push7=, $0, $pop6 + call die@FUNCTION, $pop7 + i32.const $push8=, 0 + call exit@FUNCTION, $pop8 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .Lmain.s,@object # @main.s + .section .rodata.cst8,"aM",@progbits,8 + .p2align 2 +.Lmain.s: + .int32 1 # 0x1 + .int32 2 # 0x2 + .size .Lmain.s, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990525-2.c.s b/src/binaryen/test/torture-s/990525-2.c.s new file mode 100644 index 0000000000..cc7bbf23c4 --- /dev/null +++ b/src/binaryen/test/torture-s/990525-2.c.s @@ -0,0 +1,49 @@ + .text + .file "990525-2.c" + .section .text.func1,"ax",@progbits + .hidden func1 # -- Begin function func1 + .globl func1 + .type func1,@function +func1: # @func1 + .result i32 + .local i32 +# BB#0: # %if.end15 + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size func1, .Lfunc_end0-func1 + # -- End function + .section .text.func2,"ax",@progbits + .hidden func2 # -- Begin function func2 + .globl func2 + .type func2,@function +func2: # @func2 + .param i32 +# BB#0: # %entry + i64.const $push0=, 85899345930 + i64.store 0($0):p2align=2, $pop0 + i64.const $push1=, 171798691870 + i64.store 8($0):p2align=2, $pop1 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size func2, .Lfunc_end1-func2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990527-1.c.s b/src/binaryen/test/torture-s/990527-1.c.s new file mode 100644 index 0000000000..f20056312f --- /dev/null +++ b/src/binaryen/test/torture-s/990527-1.c.s @@ -0,0 +1,80 @@ + .text + .file "990527-1.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.load $push1=, sum($pop3) + i32.add $push2=, $pop1, $0 + i32.store sum($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load $push1=, sum($pop5) + i32.add $push2=, $pop1, $0 + i32.const $push3=, 81 + i32.add $push4=, $pop2, $pop3 + i32.store sum($pop0), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push4=, 0 + i32.load $push3=, sum($pop4) + tee_local $push2=, $0=, $pop3 + i32.const $push0=, 81 + i32.add $push1=, $pop2, $pop0 + i32.store sum($pop5), $pop1 + block + br_if 0, $0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden sum # @sum + .type sum,@object + .section .bss.sum,"aw",@nobits + .globl sum + .p2align 2 +sum: + .int32 0 # 0x0 + .size sum, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990531-1.c.s b/src/binaryen/test/torture-s/990531-1.c.s new file mode 100644 index 0000000000..d2a6b7f7d2 --- /dev/null +++ b/src/binaryen/test/torture-s/990531-1.c.s @@ -0,0 +1,45 @@ + .text + .file "990531-1.c" + .section .text.bad,"ax",@progbits + .hidden bad # -- Begin function bad + .globl bad + .type bad,@function +bad: # @bad + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push9=, $pop3, $pop5 + tee_local $push8=, $2=, $pop9 + i32.store 8($pop8), $1 + i32.const $push6=, 8 + i32.add $push7=, $2, $pop6 + i32.add $push0=, $pop7, $0 + i32.const $push1=, 0 + i32.store8 0($pop0), $pop1 + i32.load $push2=, 8($2) + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size bad, .Lfunc_end0-bad + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990604-1.c.s b/src/binaryen/test/torture-s/990604-1.c.s new file mode 100644 index 0000000000..2e8548b3c5 --- /dev/null +++ b/src/binaryen/test/torture-s/990604-1.c.s @@ -0,0 +1,71 @@ + .text + .file "990604-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f +# BB#0: # %entry + block + i32.const $push2=, 0 + i32.load $push0=, b($pop2) + i32.eqz $push4=, $pop0 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + i32.const $push3=, 0 + i32.const $push1=, 9 + i32.store b($pop3), $pop1 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + block + block + i32.const $push6=, 0 + i32.load $push5=, b($pop6) + tee_local $push4=, $0=, $pop5 + i32.const $push0=, 9 + i32.eq $push1=, $pop4, $pop0 + br_if 0, $pop1 # 0: down to label2 +# BB#1: # %entry + br_if 1, $0 # 1: down to label1 +# BB#2: # %f.exit.thread + i32.const $push3=, 0 + i32.const $push2=, 9 + i32.store b($pop3), $pop2 +.LBB1_3: # %if.end + end_block # label2: + i32.const $push7=, 0 + return $pop7 +.LBB1_4: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/990628-1.c.s b/src/binaryen/test/torture-s/990628-1.c.s new file mode 100644 index 0000000000..3a320aa16f --- /dev/null +++ b/src/binaryen/test/torture-s/990628-1.c.s @@ -0,0 +1,233 @@ + .text + .file "990628-1.c" + .section .text.num_records,"ax",@progbits + .hidden num_records # -- Begin function num_records + .globl num_records + .type num_records,@function +num_records: # @num_records + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size num_records, .Lfunc_end0-num_records + # -- End function + .section .text.fetch,"ax",@progbits + .hidden fetch # -- Begin function fetch + .globl fetch + .type fetch,@function +fetch: # @fetch + .local i32 +# BB#0: # %entry + i32.const $push2=, data_tmp + i32.const $push1=, 85 + i32.const $push0=, 404 + i32.call $drop=, memset@FUNCTION, $pop2, $pop1, $pop0 + i32.const $push3=, 0 + i32.const $push14=, 0 + i32.load $push13=, fetch.fetch_count($pop14) + tee_local $push12=, $0=, $pop13 + i32.const $push4=, 1 + i32.add $push5=, $pop12, $pop4 + i32.store fetch.fetch_count($pop3), $pop5 + i32.const $push11=, 0 + i32.const $push7=, 100 + i32.const $push10=, 0 + i32.const $push9=, 0 + i32.gt_s $push6=, $0, $pop9 + i32.select $push8=, $pop7, $pop10, $pop6 + i32.store sqlca($pop11), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size fetch, .Lfunc_end1-fetch + # -- End function + .section .text.load_data,"ax",@progbits + .hidden load_data # -- Begin function load_data + .globl load_data + .type load_data,@function +load_data: # @load_data + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push26=, 404 + i32.call $push25=, malloc@FUNCTION, $pop26 + tee_local $push24=, $3=, $pop25 + i32.store data_ptr($pop0), $pop24 + i32.const $push1=, 170 + i32.const $push23=, 404 + i32.call $drop=, memset@FUNCTION, $3, $pop1, $pop23 + i32.const $push2=, data_tmp + i32.const $push22=, 85 + i32.const $push21=, 404 + i32.call $0=, memset@FUNCTION, $pop2, $pop22, $pop21 + i32.const $push20=, 0 + i32.const $push19=, 0 + i32.load $push18=, fetch.fetch_count($pop19) + tee_local $push17=, $2=, $pop18 + i32.const $push16=, 1 + i32.add $push3=, $pop17, $pop16 + i32.store fetch.fetch_count($pop20), $pop3 + i32.const $push15=, 0 + i32.const $push4=, 100 + i32.const $push14=, 0 + i32.const $push13=, 0 + i32.gt_s $push12=, $2, $pop13 + tee_local $push11=, $1=, $pop12 + i32.select $push5=, $pop4, $pop14, $pop11 + i32.store sqlca($pop15), $pop5 + block + i32.eqz $push36=, $1 + br_if 0, $pop36 # 0: down to label0 +# BB#1: # %while.end + return +.LBB2_2: # %while.body + # =>This Inner Loop Header: Depth=1 + end_block # label0: + loop # label1: + i32.const $push34=, 404 + i32.call $drop=, memcpy@FUNCTION, $3, $0, $pop34 + i32.const $push33=, 85 + i32.const $push32=, 404 + i32.call $drop=, memset@FUNCTION, $0, $pop33, $pop32 + i32.const $push31=, 404 + i32.add $3=, $3, $pop31 + i32.const $push30=, 1 + i32.add $push29=, $2, $pop30 + tee_local $push28=, $2=, $pop29 + i32.const $push27=, 1 + i32.lt_s $push6=, $pop28, $pop27 + br_if 0, $pop6 # 0: up to label1 +# BB#3: # %while.cond.while.end_crit_edge + end_loop + i32.const $push8=, 0 + i32.const $push7=, 100 + i32.store sqlca($pop8), $pop7 + i32.const $push35=, 0 + i32.const $push9=, 1 + i32.add $push10=, $2, $pop9 + i32.store fetch.fetch_count($pop35), $pop10 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size load_data, .Lfunc_end2-load_data + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push27=, 404 + i32.call $push26=, malloc@FUNCTION, $pop27 + tee_local $push25=, $1=, $pop26 + i32.store data_ptr($pop0), $pop25 + i32.const $push1=, 170 + i32.const $push24=, 404 + i32.call $0=, memset@FUNCTION, $1, $pop1, $pop24 + i32.const $push2=, data_tmp + i32.const $push23=, 85 + i32.const $push22=, 404 + i32.call $1=, memset@FUNCTION, $pop2, $pop23, $pop22 + i32.const $push21=, 0 + i32.const $push20=, 0 + i32.load $push19=, fetch.fetch_count($pop20) + tee_local $push18=, $2=, $pop19 + i32.const $push17=, 1 + i32.add $push3=, $pop18, $pop17 + i32.store fetch.fetch_count($pop21), $pop3 + i32.const $push16=, 0 + i32.const $push4=, 100 + i32.const $push15=, 0 + i32.const $push14=, 0 + i32.gt_s $push13=, $2, $pop14 + tee_local $push12=, $3=, $pop13 + i32.select $push5=, $pop4, $pop15, $pop12 + i32.store sqlca($pop16), $pop5 + block + br_if 0, $3 # 0: down to label2 +# BB#1: # %while.body.lr.ph.i + copy_local $3=, $0 +.LBB3_2: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.const $push35=, 404 + i32.call $drop=, memcpy@FUNCTION, $3, $1, $pop35 + i32.const $push34=, 85 + i32.const $push33=, 404 + i32.call $drop=, memset@FUNCTION, $1, $pop34, $pop33 + i32.const $push32=, 404 + i32.add $3=, $3, $pop32 + i32.const $push31=, 1 + i32.add $push30=, $2, $pop31 + tee_local $push29=, $2=, $pop30 + i32.const $push28=, 1 + i32.lt_s $push6=, $pop29, $pop28 + br_if 0, $pop6 # 0: up to label3 +# BB#3: # %load_data.exit + end_loop + i32.const $push37=, 0 + i32.const $push7=, 100 + i32.store sqlca($pop37), $pop7 + i32.const $push36=, 0 + i32.const $push8=, 2 + i32.store fetch.fetch_count($pop36), $pop8 + i32.load $push9=, 0($0) + i32.const $push10=, 1431655765 + i32.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label2 +# BB#4: # %if.end + i32.const $push38=, 0 + call exit@FUNCTION, $pop38 + unreachable +.LBB3_5: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .type fetch.fetch_count,@object # @fetch.fetch_count + .section .bss.fetch.fetch_count,"aw",@nobits + .p2align 2 +fetch.fetch_count: + .int32 0 # 0x0 + .size fetch.fetch_count, 4 + + .hidden data_tmp # @data_tmp + .type data_tmp,@object + .section .bss.data_tmp,"aw",@nobits + .globl data_tmp + .p2align 2 +data_tmp: + .skip 404 + .size data_tmp, 404 + + .hidden sqlca # @sqlca + .type sqlca,@object + .section .bss.sqlca,"aw",@nobits + .globl sqlca + .p2align 2 +sqlca: + .skip 4 + .size sqlca, 4 + + .hidden data_ptr # @data_ptr + .type data_ptr,@object + .section .bss.data_ptr,"aw",@nobits + .globl data_ptr + .p2align 2 +data_ptr: + .int32 0 + .size data_ptr, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype malloc, i32, i32 + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990804-1.c.s b/src/binaryen/test/torture-s/990804-1.c.s new file mode 100644 index 0000000000..4835a9af82 --- /dev/null +++ b/src/binaryen/test/torture-s/990804-1.c.s @@ -0,0 +1,32 @@ + .text + .file "990804-1.c" + .section .text.gfbyte,"ax",@progbits + .hidden gfbyte # -- Begin function gfbyte + .globl gfbyte + .type gfbyte,@function +gfbyte: # @gfbyte + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size gfbyte, .Lfunc_end0-gfbyte + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990811-1.c.s b/src/binaryen/test/torture-s/990811-1.c.s new file mode 100644 index 0000000000..76b6d633d7 --- /dev/null +++ b/src/binaryen/test/torture-s/990811-1.c.s @@ -0,0 +1,59 @@ + .text + .file "990811-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + block + block + i32.const $push0=, 2 + i32.eq $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %entry + block + i32.const $push2=, 1 + i32.eq $push3=, $0, $pop2 + br_if 0, $pop3 # 0: down to label2 +# BB#2: # %entry + br_if 2, $0 # 2: down to label0 +# BB#3: # %sw.bb + i32.load $push6=, 0($1) + return $pop6 +.LBB0_4: # %sw.bb1 + end_block # label2: + i32.load8_s $push5=, 0($1) + return $pop5 +.LBB0_5: # %sw.bb2 + end_block # label1: + i32.load16_s $push4=, 0($1) + return $pop4 +.LBB0_6: # %sw.epilog + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end16 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990826-0.c.s b/src/binaryen/test/torture-s/990826-0.c.s new file mode 100644 index 0000000000..0550c01cdc --- /dev/null +++ b/src/binaryen/test/torture-s/990826-0.c.s @@ -0,0 +1,17 @@ + .text + .file "990826-0.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/990827-1.c.s b/src/binaryen/test/torture-s/990827-1.c.s new file mode 100644 index 0000000000..98faf3cab2 --- /dev/null +++ b/src/binaryen/test/torture-s/990827-1.c.s @@ -0,0 +1,41 @@ + .text + .file "990827-1.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.and $push2=, $1, $pop0 + i32.const $push8=, 1 + i32.add $push3=, $pop2, $pop8 + i32.const $push7=, 1 + i32.shr_u $push4=, $pop3, $pop7 + i32.const $push6=, 1 + i32.shr_u $push1=, $0, $pop6 + i32.add $push5=, $pop4, $pop1 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end8 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990829-1.c.s b/src/binaryen/test/torture-s/990829-1.c.s new file mode 100644 index 0000000000..adfa573476 --- /dev/null +++ b/src/binaryen/test/torture-s/990829-1.c.s @@ -0,0 +1,37 @@ + .text + .file "990829-1.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param f64, f64 + .result f64 +# BB#0: # %entry + f64.sub $push0=, $1, $0 + f64.const $push1=, 0x1p0 + f64.add $push2=, $0, $pop1 + f64.mul $push3=, $pop2, $1 + f64.div $push4=, $pop0, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/990923-1.c.s b/src/binaryen/test/torture-s/990923-1.c.s new file mode 100644 index 0000000000..6e0bcfbfe3 --- /dev/null +++ b/src/binaryen/test/torture-s/990923-1.c.s @@ -0,0 +1,40 @@ + .text + .file "990923-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 65535 + i32.and $push1=, $0, $pop0 + i32.const $push6=, 1 + i32.const $push2=, -65536 + i32.and $push3=, $0, $pop2 + i32.const $push4=, -1412628480 + i32.eq $push5=, $pop3, $pop4 + i32.select $push7=, $pop1, $pop6, $pop5 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/991014-1.c.s b/src/binaryen/test/torture-s/991014-1.c.s new file mode 100644 index 0000000000..ef29c68303 --- /dev/null +++ b/src/binaryen/test/torture-s/991014-1.c.s @@ -0,0 +1,56 @@ + .text + .file "991014-1.c" + .section .text.union_size,"ax",@progbits + .hidden union_size # -- Begin function union_size + .globl union_size + .type union_size,@function +union_size: # @union_size + .result i32 +# BB#0: # %entry + i32.const $push0=, 1073741568 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size union_size, .Lfunc_end0-union_size + # -- End function + .section .text.struct_size,"ax",@progbits + .hidden struct_size # -- Begin function struct_size + .globl struct_size + .type struct_size,@function +struct_size: # @struct_size + .result i32 +# BB#0: # %entry + i32.const $push0=, 2147483152 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size struct_size, .Lfunc_end1-struct_size + # -- End function + .section .text.struct_a_offset,"ax",@progbits + .hidden struct_a_offset # -- Begin function struct_a_offset + .globl struct_a_offset + .type struct_a_offset,@function +struct_a_offset: # @struct_a_offset + .result i32 +# BB#0: # %entry + i32.const $push0=, 2147483136 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size struct_a_offset, .Lfunc_end2-struct_a_offset + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/991016-1.c.s b/src/binaryen/test/torture-s/991016-1.c.s new file mode 100644 index 0000000000..3a9283b81f --- /dev/null +++ b/src/binaryen/test/torture-s/991016-1.c.s @@ -0,0 +1,105 @@ + .text + .file "991016-1.c" + .section .text.doit,"ax",@progbits + .hidden doit # -- Begin function doit + .globl doit + .type doit,@function +doit: # @doit + .param i32, i32, i32 + .result i32 + .local i32, i64, i64 +# BB#0: # %entry + block + block + i32.const $push0=, 2 + i32.eq $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %entry + block + i32.const $push6=, 1 + i32.eq $push2=, $0, $pop6 + br_if 0, $pop2 # 0: down to label2 +# BB#2: # %entry + br_if 2, $0 # 2: down to label0 +# BB#3: # %sw.bb + i32.load $0=, 0($2) +.LBB0_4: # %do.body + # =>This Inner Loop Header: Depth=1 + loop # label3: + copy_local $push12=, $0 + tee_local $push11=, $3=, $pop12 + i32.const $push10=, 1 + i32.shl $0=, $pop11, $pop10 + i32.const $push9=, -1 + i32.add $push8=, $1, $pop9 + tee_local $push7=, $1=, $pop8 + br_if 0, $pop7 # 0: up to label3 +# BB#5: # %do.end + end_loop + i32.store 0($2), $0 + i32.eqz $push5=, $3 + return $pop5 +.LBB0_6: # %sw.bb1 + end_block # label2: + i32.load $0=, 0($2) +.LBB0_7: # %do.body2 + # =>This Inner Loop Header: Depth=1 + loop # label4: + copy_local $push18=, $0 + tee_local $push17=, $3=, $pop18 + i32.const $push16=, 1 + i32.shl $0=, $pop17, $pop16 + i32.const $push15=, -1 + i32.add $push14=, $1, $pop15 + tee_local $push13=, $1=, $pop14 + br_if 0, $pop13 # 0: up to label4 +# BB#8: # %do.end7 + end_loop + i32.store 0($2), $0 + i32.eqz $push4=, $3 + return $pop4 +.LBB0_9: # %sw.bb10 + end_block # label1: + i64.load $5=, 0($2) +.LBB0_10: # %do.body11 + # =>This Inner Loop Header: Depth=1 + loop # label5: + copy_local $push24=, $5 + tee_local $push23=, $4=, $pop24 + i64.const $push22=, 1 + i64.shl $5=, $pop23, $pop22 + i32.const $push21=, -1 + i32.add $push20=, $1, $pop21 + tee_local $push19=, $1=, $pop20 + br_if 0, $pop19 # 0: up to label5 +# BB#11: # %do.end16 + end_loop + i64.store 0($2), $5 + i64.eqz $push3=, $4 + return $pop3 +.LBB0_12: # %sw.default + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size doit, .Lfunc_end0-doit + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end8 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/991019-1.c.s b/src/binaryen/test/torture-s/991019-1.c.s new file mode 100644 index 0000000000..06ef324a83 --- /dev/null +++ b/src/binaryen/test/torture-s/991019-1.c.s @@ -0,0 +1,34 @@ + .text + .file "991019-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param f64 + .result f64 +# BB#0: # %entry + f64.const $push0=, 0x1p0 + f64.add $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/991023-1.c.s b/src/binaryen/test/torture-s/991023-1.c.s new file mode 100644 index 0000000000..ce274d99f1 --- /dev/null +++ b/src/binaryen/test/torture-s/991023-1.c.s @@ -0,0 +1,47 @@ + .text + .file "991023-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 4044 + i32.store blah($pop1), $pop0 + i32.const $push2=, 4044 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, 4044 + i32.store blah($pop1), $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden blah # @blah + .type blah,@object + .section .bss.blah,"aw",@nobits + .globl blah + .p2align 2 +blah: + .int32 0 # 0x0 + .size blah, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/991030-1.c.s b/src/binaryen/test/torture-s/991030-1.c.s new file mode 100644 index 0000000000..fb57fda064 --- /dev/null +++ b/src/binaryen/test/torture-s/991030-1.c.s @@ -0,0 +1,40 @@ + .text + .file "991030-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + f64.load $push0=, x($pop3) + f64.const $push1=, 0x1.fp1 + f64.eq $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.then + call abort@FUNCTION + unreachable +.LBB0_2: # %if.end + end_block # label0: + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 3 +x: + .int64 4615908143078047744 # double 3.875 + .size x, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/991112-1.c.s b/src/binaryen/test/torture-s/991112-1.c.s new file mode 100644 index 0000000000..6c5b4536ab --- /dev/null +++ b/src/binaryen/test/torture-s/991112-1.c.s @@ -0,0 +1,64 @@ + .text + .file "991112-1.c" + .section .text.rl_show_char,"ax",@progbits + .hidden rl_show_char # -- Begin function rl_show_char + .globl rl_show_char + .type rl_show_char,@function +rl_show_char: # @rl_show_char + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size rl_show_char, .Lfunc_end0-rl_show_char + # -- End function + .section .text.rl_character_len,"ax",@progbits + .hidden rl_character_len # -- Begin function rl_character_len + .globl rl_character_len + .type rl_character_len,@function +rl_character_len: # @rl_character_len + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 1 + i32.const $push1=, 2 + i32.call $push0=, isprint@FUNCTION, $0 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size rl_character_len, .Lfunc_end1-rl_character_len + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 97 + i32.call $push1=, isprint@FUNCTION, $pop0 + i32.eqz $push5=, $pop1 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %if.end + i32.const $push2=, 2 + i32.call $push3=, isprint@FUNCTION, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %if.end4 + i32.const $push4=, 0 + return $pop4 +.LBB2_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype isprint, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/991118-1.c.s b/src/binaryen/test/torture-s/991118-1.c.s new file mode 100644 index 0000000000..9fca4861ab --- /dev/null +++ b/src/binaryen/test/torture-s/991118-1.c.s @@ -0,0 +1,242 @@ + .text + .file "991118-1.c" + .section .text.sub,"ax",@progbits + .hidden sub # -- Begin function sub + .globl sub + .type sub,@function +sub: # @sub + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.const $push1=, -8690468286197432320 + i64.xor $push2=, $pop0, $pop1 + i64.store 0($0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size sub, .Lfunc_end0-sub + # -- End function + .section .text.sub2,"ax",@progbits + .hidden sub2 # -- Begin function sub2 + .globl sub2 + .type sub2,@function +sub2: # @sub2 + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.const $push1=, 2381903268435576 + i64.xor $push2=, $pop0, $pop1 + i64.store 0($0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size sub2, .Lfunc_end1-sub2 + # -- End function + .section .text.sub3,"ax",@progbits + .hidden sub3 # -- Begin function sub3 + .globl sub3 + .type sub3,@function +sub3: # @sub3 + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.const $push1=, -4345234143098716160 + i64.xor $push2=, $pop0, $pop1 + i64.store 0($0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size sub3, .Lfunc_end2-sub3 + # -- End function + .section .text.sub4,"ax",@progbits + .hidden sub4 # -- Begin function sub4 + .globl sub4 + .type sub4,@function +sub4: # @sub4 + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.const $push1=, 6885502895806072 + i64.xor $push2=, $pop0, $pop1 + i64.store 0($0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end3: + .size sub4, .Lfunc_end3-sub4 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64, i64, i64, i64 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push51=, 0 + i64.load $push50=, tmp($pop51) + tee_local $push49=, $2=, $pop50 + i64.const $push2=, -8690468286197432320 + i64.xor $push48=, $pop49, $pop2 + tee_local $push47=, $3=, $pop48 + i64.store tmp($pop1), $pop47 + i32.const $push46=, 0 + i32.const $push45=, 0 + i64.load $push44=, tmp2($pop45) + tee_local $push43=, $0=, $pop44 + i64.const $push3=, 2381903268435576 + i64.xor $push42=, $pop43, $pop3 + tee_local $push41=, $1=, $pop42 + i64.store tmp2($pop46), $pop41 + block + i64.const $push4=, -4096 + i64.and $push5=, $3, $pop4 + i64.const $push6=, -7687337405579571200 + i64.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %entry + i64.const $push8=, 52 + i64.shl $push9=, $2, $pop8 + i64.const $push53=, 52 + i64.shr_s $push10=, $pop9, $pop53 + i32.wrap/i64 $push0=, $pop10 + i32.const $push52=, 291 + i32.ne $push11=, $pop0, $pop52 + br_if 0, $pop11 # 0: down to label0 +# BB#2: # %if.end + i64.const $push14=, 52 + i64.shr_s $push15=, $0, $pop14 + i32.wrap/i64 $push16=, $pop15 + i32.const $push54=, 291 + i32.ne $push17=, $pop16, $pop54 + br_if 0, $pop17 # 0: down to label0 +# BB#3: # %if.end + i64.const $push13=, 4503599627370495 + i64.and $push12=, $1, $pop13 + i64.const $push18=, 2626808268586421 + i64.ne $push19=, $pop12, $pop18 + br_if 0, $pop19 # 0: down to label0 +# BB#4: # %if.end19 + i32.const $push21=, 0 + i32.const $push65=, 0 + i64.load $push64=, tmp3($pop65) + tee_local $push63=, $2=, $pop64 + i64.const $push22=, -4345234143098716160 + i64.xor $push62=, $pop63, $pop22 + tee_local $push61=, $3=, $pop62 + i64.store tmp3($pop21), $pop61 + i32.const $push60=, 0 + i32.const $push59=, 0 + i64.load $push58=, tmp4($pop59) + tee_local $push57=, $0=, $pop58 + i64.const $push23=, 6885502895806072 + i64.xor $push56=, $pop57, $pop23 + tee_local $push55=, $1=, $pop56 + i64.store tmp4($pop60), $pop55 + i64.const $push24=, -2048 + i64.and $push25=, $3, $pop24 + i64.const $push26=, -3725223934242340864 + i64.ne $push27=, $pop25, $pop26 + br_if 0, $pop27 # 0: down to label0 +# BB#5: # %if.end19 + i64.const $push28=, 53 + i64.shl $push29=, $2, $pop28 + i64.const $push67=, 53 + i64.shr_s $push30=, $pop29, $pop67 + i32.wrap/i64 $push20=, $pop30 + i32.const $push66=, 291 + i32.ne $push31=, $pop20, $pop66 + br_if 0, $pop31 # 0: down to label0 +# BB#6: # %if.end34 + i64.const $push34=, 53 + i64.shr_s $push35=, $0, $pop34 + i32.wrap/i64 $push36=, $pop35 + i32.const $push68=, 291 + i32.ne $push37=, $pop36, $pop68 + br_if 0, $pop37 # 0: down to label0 +# BB#7: # %if.end34 + i64.const $push33=, 9007199254740991 + i64.and $push32=, $1, $pop33 + i64.const $push38=, 7188242255599224 + i64.ne $push39=, $pop32, $pop38 + br_if 0, $pop39 # 0: down to label0 +# BB#8: # %if.end47 + i32.const $push40=, 0 + call exit@FUNCTION, $pop40 + unreachable +.LBB4_9: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + .hidden tmp # @tmp + .type tmp,@object + .section .data.tmp,"aw",@progbits + .globl tmp + .p2align 3 +tmp: + .int8 35 # 0x23 + .int8 209 # 0xd1 + .int8 188 # 0xbc + .int8 154 # 0x9a + .int8 120 # 0x78 + .int8 86 # 0x56 + .int8 52 # 0x34 + .int8 18 # 0x12 + .size tmp, 8 + + .hidden tmp2 # @tmp2 + .type tmp2,@object + .section .data.tmp2,"aw",@progbits + .globl tmp2 + .p2align 3 +tmp2: + .int8 205 # 0xcd + .int8 171 # 0xab + .int8 137 # 0x89 + .int8 103 # 0x67 + .int8 69 # 0x45 + .int8 35 # 0x23 + .int8 49 # 0x31 + .int8 18 # 0x12 + .size tmp2, 8 + + .hidden tmp3 # @tmp3 + .type tmp3,@object + .section .data.tmp3,"aw",@progbits + .globl tmp3 + .p2align 3 +tmp3: + .int8 35 # 0x23 + .int8 1 # 0x1 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 248 # 0xf8 + .int8 255 # 0xff + .int8 15 # 0xf + .size tmp3, 8 + + .hidden tmp4 # @tmp4 + .type tmp4,@object + .section .data.tmp4,"aw",@progbits + .globl tmp4 + .p2align 3 +tmp4: + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 255 # 0xff + .int8 255 # 0xff + .int8 97 # 0x61 + .int8 36 # 0x24 + .size tmp4, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/991201-1.c.s b/src/binaryen/test/torture-s/991201-1.c.s new file mode 100644 index 0000000000..6f5f50678b --- /dev/null +++ b/src/binaryen/test/torture-s/991201-1.c.s @@ -0,0 +1,202 @@ + .text + .file "991201-1.c" + .section .text.reset_palette,"ax",@progbits + .hidden reset_palette # -- Begin function reset_palette + .globl reset_palette + .type reset_palette,@function +reset_palette: # @reset_palette + .param i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, vc_cons + i32.add $1=, $pop1, $pop2 + i32.const $0=, 6 + i32.const $2=, -64 +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.load $push3=, 0($1) + i32.add $push4=, $pop3, $0 + i32.const $push25=, -2 + i32.add $push5=, $pop4, $pop25 + i32.const $push24=, default_red+64 + i32.add $push6=, $2, $pop24 + i32.load $push7=, 0($pop6) + i32.store8 0($pop5), $pop7 + i32.load $push8=, 0($1) + i32.add $push9=, $pop8, $0 + i32.const $push23=, -1 + i32.add $push10=, $pop9, $pop23 + i32.const $push22=, default_grn+64 + i32.add $push11=, $2, $pop22 + i32.load $push12=, 0($pop11) + i32.store8 0($pop10), $pop12 + i32.load $push13=, 0($1) + i32.add $push14=, $pop13, $0 + i32.const $push21=, default_blu+64 + i32.add $push15=, $2, $pop21 + i32.load $push16=, 0($pop15) + i32.store8 0($pop14), $pop16 + i32.const $push20=, 3 + i32.add $0=, $0, $pop20 + i32.const $push19=, 4 + i32.add $push18=, $2, $pop19 + tee_local $push17=, $2=, $pop18 + br_if 0, $pop17 # 0: up to label0 +# BB#2: # %bar.exit + end_loop + # fallthrough-return + .endfunc +.Lfunc_end0: + .size reset_palette, .Lfunc_end0-reset_palette + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 48 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %if.end + return +.LBB1_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call reset_palette@FUNCTION, $pop0 + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden a_con # @a_con + .type a_con,@object + .section .bss.a_con,"aw",@nobits + .globl a_con + .p2align 2 +a_con: + .skip 52 + .size a_con, 52 + + .hidden vc_cons # @vc_cons + .type vc_cons,@object + .section .data.vc_cons,"aw",@progbits + .globl vc_cons + .p2align 4 +vc_cons: + .int32 a_con + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .skip 4 + .size vc_cons, 252 + + .hidden default_red # @default_red + .type default_red,@object + .section .bss.default_red,"aw",@nobits + .globl default_red + .p2align 4 +default_red: + .skip 64 + .size default_red, 64 + + .hidden default_grn # @default_grn + .type default_grn,@object + .section .bss.default_grn,"aw",@nobits + .globl default_grn + .p2align 4 +default_grn: + .skip 64 + .size default_grn, 64 + + .hidden default_blu # @default_blu + .type default_blu,@object + .section .bss.default_blu,"aw",@nobits + .globl default_blu + .p2align 4 +default_blu: + .skip 64 + .size default_blu, 64 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/991202-1.c.s b/src/binaryen/test/torture-s/991202-1.c.s new file mode 100644 index 0000000000..9d1bffaab3 --- /dev/null +++ b/src/binaryen/test/torture-s/991202-1.c.s @@ -0,0 +1,43 @@ + .text + .file "991202-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 64 + i32.store y($pop1), $pop0 + i32.const $push4=, 0 + i32.const $push2=, 32 + i32.store x($pop4), $pop2 + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 2 +x: + .int32 0 # 0x0 + .size x, 4 + + .hidden y # @y + .type y,@object + .section .bss.y,"aw",@nobits + .globl y + .p2align 2 +y: + .int32 0 # 0x0 + .size y, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/991202-2.c.s b/src/binaryen/test/torture-s/991202-2.c.s new file mode 100644 index 0000000000..b732d724cb --- /dev/null +++ b/src/binaryen/test/torture-s/991202-2.c.s @@ -0,0 +1,32 @@ + .text + .file "991202-2.c" + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 8 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/991202-3.c.s b/src/binaryen/test/torture-s/991202-3.c.s new file mode 100644 index 0000000000..bee60f04b5 --- /dev/null +++ b/src/binaryen/test/torture-s/991202-3.c.s @@ -0,0 +1,66 @@ + .text + .file "991202-3.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 13 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 536862720 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size g, .Lfunc_end1-g + # -- End function + .section .text.h,"ax",@progbits + .hidden h # -- Begin function h + .globl h + .type h,@function +h: # @h + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + i32.shr_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size h, .Lfunc_end2-h + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/991216-1.c.s b/src/binaryen/test/torture-s/991216-1.c.s new file mode 100644 index 0000000000..8d66dfe16e --- /dev/null +++ b/src/binaryen/test/torture-s/991216-1.c.s @@ -0,0 +1,364 @@ + .text + .file "991216-1.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i32, i64, i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %entry + i64.const $push2=, 81985529216486895 + i64.ne $push3=, $1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %entry + i32.const $push4=, 85 + i32.ne $push5=, $2, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#3: # %if.end + return +.LBB0_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param i32, i32, i64, i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %entry + i32.const $push2=, 2 + i32.ne $push3=, $1, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#2: # %entry + i64.const $push4=, 81985529216486895 + i64.ne $push5=, $2, $pop4 + br_if 0, $pop5 # 0: down to label1 +# BB#3: # %entry + i32.const $push6=, 85 + i32.ne $push7=, $3, $pop6 + br_if 0, $pop7 # 0: down to label1 +# BB#4: # %if.end + return +.LBB1_5: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size test2, .Lfunc_end1-test2 + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .param i32, i32, i32, i64, i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label2 +# BB#1: # %entry + i32.const $push2=, 2 + i32.ne $push3=, $1, $pop2 + br_if 0, $pop3 # 0: down to label2 +# BB#2: # %entry + i32.const $push4=, 3 + i32.ne $push5=, $2, $pop4 + br_if 0, $pop5 # 0: down to label2 +# BB#3: # %entry + i64.const $push6=, 81985529216486895 + i64.ne $push7=, $3, $pop6 + br_if 0, $pop7 # 0: down to label2 +# BB#4: # %entry + i32.const $push8=, 85 + i32.ne $push9=, $4, $pop8 + br_if 0, $pop9 # 0: down to label2 +# BB#5: # %if.end + return +.LBB2_6: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size test3, .Lfunc_end2-test3 + # -- End function + .section .text.test4,"ax",@progbits + .hidden test4 # -- Begin function test4 + .globl test4 + .type test4,@function +test4: # @test4 + .param i32, i32, i32, i32, i64, i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label3 +# BB#1: # %entry + i32.const $push2=, 2 + i32.ne $push3=, $1, $pop2 + br_if 0, $pop3 # 0: down to label3 +# BB#2: # %entry + i32.const $push4=, 3 + i32.ne $push5=, $2, $pop4 + br_if 0, $pop5 # 0: down to label3 +# BB#3: # %entry + i32.const $push6=, 4 + i32.ne $push7=, $3, $pop6 + br_if 0, $pop7 # 0: down to label3 +# BB#4: # %entry + i64.const $push8=, 81985529216486895 + i64.ne $push9=, $4, $pop8 + br_if 0, $pop9 # 0: down to label3 +# BB#5: # %entry + i32.const $push10=, 85 + i32.ne $push11=, $5, $pop10 + br_if 0, $pop11 # 0: down to label3 +# BB#6: # %if.end + return +.LBB3_7: # %if.then + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size test4, .Lfunc_end3-test4 + # -- End function + .section .text.test5,"ax",@progbits + .hidden test5 # -- Begin function test5 + .globl test5 + .type test5,@function +test5: # @test5 + .param i32, i32, i32, i32, i32, i64, i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label4 +# BB#1: # %entry + i32.const $push2=, 2 + i32.ne $push3=, $1, $pop2 + br_if 0, $pop3 # 0: down to label4 +# BB#2: # %entry + i32.const $push4=, 3 + i32.ne $push5=, $2, $pop4 + br_if 0, $pop5 # 0: down to label4 +# BB#3: # %entry + i32.const $push6=, 4 + i32.ne $push7=, $3, $pop6 + br_if 0, $pop7 # 0: down to label4 +# BB#4: # %entry + i32.const $push8=, 5 + i32.ne $push9=, $4, $pop8 + br_if 0, $pop9 # 0: down to label4 +# BB#5: # %entry + i64.const $push10=, 81985529216486895 + i64.ne $push11=, $5, $pop10 + br_if 0, $pop11 # 0: down to label4 +# BB#6: # %entry + i32.const $push12=, 85 + i32.ne $push13=, $6, $pop12 + br_if 0, $pop13 # 0: down to label4 +# BB#7: # %if.end + return +.LBB4_8: # %if.then + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end4: + .size test5, .Lfunc_end4-test5 + # -- End function + .section .text.test6,"ax",@progbits + .hidden test6 # -- Begin function test6 + .globl test6 + .type test6,@function +test6: # @test6 + .param i32, i32, i32, i32, i32, i32, i64, i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label5 +# BB#1: # %entry + i32.const $push2=, 2 + i32.ne $push3=, $1, $pop2 + br_if 0, $pop3 # 0: down to label5 +# BB#2: # %entry + i32.const $push4=, 3 + i32.ne $push5=, $2, $pop4 + br_if 0, $pop5 # 0: down to label5 +# BB#3: # %entry + i32.const $push6=, 4 + i32.ne $push7=, $3, $pop6 + br_if 0, $pop7 # 0: down to label5 +# BB#4: # %entry + i32.const $push8=, 5 + i32.ne $push9=, $4, $pop8 + br_if 0, $pop9 # 0: down to label5 +# BB#5: # %entry + i32.const $push10=, 6 + i32.ne $push11=, $5, $pop10 + br_if 0, $pop11 # 0: down to label5 +# BB#6: # %entry + i64.const $push12=, 81985529216486895 + i64.ne $push13=, $6, $pop12 + br_if 0, $pop13 # 0: down to label5 +# BB#7: # %entry + i32.const $push14=, 85 + i32.ne $push15=, $7, $pop14 + br_if 0, $pop15 # 0: down to label5 +# BB#8: # %if.end + return +.LBB5_9: # %if.then + end_block # label5: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end5: + .size test6, .Lfunc_end5-test6 + # -- End function + .section .text.test7,"ax",@progbits + .hidden test7 # -- Begin function test7 + .globl test7 + .type test7,@function +test7: # @test7 + .param i32, i32, i32, i32, i32, i32, i32, i64, i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label6 +# BB#1: # %entry + i32.const $push2=, 2 + i32.ne $push3=, $1, $pop2 + br_if 0, $pop3 # 0: down to label6 +# BB#2: # %entry + i32.const $push4=, 3 + i32.ne $push5=, $2, $pop4 + br_if 0, $pop5 # 0: down to label6 +# BB#3: # %entry + i32.const $push6=, 4 + i32.ne $push7=, $3, $pop6 + br_if 0, $pop7 # 0: down to label6 +# BB#4: # %entry + i32.const $push8=, 5 + i32.ne $push9=, $4, $pop8 + br_if 0, $pop9 # 0: down to label6 +# BB#5: # %entry + i32.const $push10=, 6 + i32.ne $push11=, $5, $pop10 + br_if 0, $pop11 # 0: down to label6 +# BB#6: # %entry + i32.const $push12=, 7 + i32.ne $push13=, $6, $pop12 + br_if 0, $pop13 # 0: down to label6 +# BB#7: # %entry + i64.const $push14=, 81985529216486895 + i64.ne $push15=, $7, $pop14 + br_if 0, $pop15 # 0: down to label6 +# BB#8: # %entry + i32.const $push16=, 85 + i32.ne $push17=, $8, $pop16 + br_if 0, $pop17 # 0: down to label6 +# BB#9: # %if.end + return +.LBB6_10: # %if.then + end_block # label6: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end6: + .size test7, .Lfunc_end6-test7 + # -- End function + .section .text.test8,"ax",@progbits + .hidden test8 # -- Begin function test8 + .globl test8 + .type test8,@function +test8: # @test8 + .param i32, i32, i32, i32, i32, i32, i32, i32, i64, i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label7 +# BB#1: # %entry + i32.const $push2=, 2 + i32.ne $push3=, $1, $pop2 + br_if 0, $pop3 # 0: down to label7 +# BB#2: # %entry + i32.const $push4=, 3 + i32.ne $push5=, $2, $pop4 + br_if 0, $pop5 # 0: down to label7 +# BB#3: # %entry + i32.const $push6=, 4 + i32.ne $push7=, $3, $pop6 + br_if 0, $pop7 # 0: down to label7 +# BB#4: # %entry + i32.const $push8=, 5 + i32.ne $push9=, $4, $pop8 + br_if 0, $pop9 # 0: down to label7 +# BB#5: # %entry + i32.const $push10=, 6 + i32.ne $push11=, $5, $pop10 + br_if 0, $pop11 # 0: down to label7 +# BB#6: # %entry + i32.const $push12=, 7 + i32.ne $push13=, $6, $pop12 + br_if 0, $pop13 # 0: down to label7 +# BB#7: # %entry + i32.const $push14=, 8 + i32.ne $push15=, $7, $pop14 + br_if 0, $pop15 # 0: down to label7 +# BB#8: # %entry + i64.const $push16=, 81985529216486895 + i64.ne $push17=, $8, $pop16 + br_if 0, $pop17 # 0: down to label7 +# BB#9: # %entry + i32.const $push18=, 85 + i32.ne $push19=, $9, $pop18 + br_if 0, $pop19 # 0: down to label7 +# BB#10: # %if.end + return +.LBB7_11: # %if.then + end_block # label7: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end7: + .size test8, .Lfunc_end7-test8 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end8: + .size main, .Lfunc_end8-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/991216-2.c.s b/src/binaryen/test/torture-s/991216-2.c.s new file mode 100644 index 0000000000..2ce2d48a64 --- /dev/null +++ b/src/binaryen/test/torture-s/991216-2.c.s @@ -0,0 +1,262 @@ + .text + .file "991216-2.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push20=, 0 + i32.const $push18=, 0 + i32.load $push17=, __stack_pointer($pop18) + i32.const $push19=, 16 + i32.sub $push25=, $pop17, $pop19 + tee_local $push24=, $4=, $pop25 + i32.store __stack_pointer($pop20), $pop24 + i32.store 12($4), $1 + block + block + block + i32.const $push0=, 2 + i32.ge_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label2 +# BB#1: + copy_local $3=, $1 + br 1 # 1: down to label1 +.LBB0_2: # %for.body.preheader + end_block # label2: + i32.const $2=, 1 +.LBB0_3: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.const $push31=, 4 + i32.add $push30=, $1, $pop31 + tee_local $push29=, $3=, $pop30 + i32.store 12($4), $pop29 + i32.const $push28=, 1 + i32.add $push27=, $2, $pop28 + tee_local $push26=, $2=, $pop27 + i32.load $push2=, 0($1) + i32.ne $push3=, $pop26, $pop2 + br_if 2, $pop3 # 2: down to label0 +# BB#4: # %for.cond + # in Loop: Header=BB0_3 Depth=1 + copy_local $1=, $3 + i32.lt_s $push4=, $2, $0 + br_if 0, $pop4 # 0: up to label3 +.LBB0_5: # %for.end + end_loop + end_block # label1: + i32.const $push5=, 7 + i32.add $push6=, $3, $pop5 + i32.const $push7=, -8 + i32.and $push35=, $pop6, $pop7 + tee_local $push34=, $1=, $pop35 + i32.const $push8=, 8 + i32.add $push33=, $pop34, $pop8 + tee_local $push32=, $2=, $pop33 + i32.store 12($4), $pop32 + i64.load $push9=, 0($1) + i64.const $push10=, 81985529216486895 + i64.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#6: # %if.end7 + i32.const $push12=, 12 + i32.add $push13=, $1, $pop12 + i32.store 12($4), $pop13 + i32.load $push14=, 0($2) + i32.const $push15=, 85 + i32.ne $push16=, $pop14, $pop15 + br_if 0, $pop16 # 0: down to label0 +# BB#7: # %if.end12 + i32.const $push23=, 0 + i32.const $push21=, 16 + i32.add $push22=, $4, $pop21 + i32.store __stack_pointer($pop23), $pop22 + return +.LBB0_8: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push37=, 0 + i32.const $push35=, 0 + i32.load $push34=, __stack_pointer($pop35) + i32.const $push36=, 288 + i32.sub $push116=, $pop34, $pop36 + tee_local $push115=, $0=, $pop116 + i32.store __stack_pointer($pop37), $pop115 + i32.const $push0=, 85 + i32.store 280($0), $pop0 + i64.const $push1=, 81985529216486895 + i64.store 272($0), $pop1 + i32.const $push2=, 1 + i32.const $push38=, 272 + i32.add $push39=, $0, $pop38 + call test@FUNCTION, $pop2, $pop39 + i32.const $push40=, 240 + i32.add $push41=, $0, $pop40 + i32.const $push3=, 16 + i32.add $push4=, $pop41, $pop3 + i32.const $push114=, 85 + i32.store 0($pop4), $pop114 + i64.const $push113=, 81985529216486895 + i64.store 248($0), $pop113 + i32.const $push5=, 2 + i32.store 240($0), $pop5 + i32.const $push112=, 2 + i32.const $push42=, 240 + i32.add $push43=, $0, $pop42 + call test@FUNCTION, $pop112, $pop43 + i32.const $push44=, 208 + i32.add $push45=, $0, $pop44 + i32.const $push111=, 16 + i32.add $push6=, $pop45, $pop111 + i32.const $push110=, 85 + i32.store 0($pop6), $pop110 + i64.const $push109=, 81985529216486895 + i64.store 216($0), $pop109 + i64.const $push7=, 12884901890 + i64.store 208($0), $pop7 + i32.const $push8=, 3 + i32.const $push46=, 208 + i32.add $push47=, $0, $pop46 + call test@FUNCTION, $pop8, $pop47 + i32.const $push48=, 176 + i32.add $push49=, $0, $pop48 + i32.const $push9=, 24 + i32.add $push10=, $pop49, $pop9 + i32.const $push108=, 85 + i32.store 0($pop10), $pop108 + i32.const $push50=, 176 + i32.add $push51=, $0, $pop50 + i32.const $push107=, 16 + i32.add $push11=, $pop51, $pop107 + i64.const $push106=, 81985529216486895 + i64.store 0($pop11), $pop106 + i32.const $push12=, 4 + i32.store 184($0), $pop12 + i64.const $push105=, 12884901890 + i64.store 176($0), $pop105 + i32.const $push104=, 4 + i32.const $push52=, 176 + i32.add $push53=, $0, $pop52 + call test@FUNCTION, $pop104, $pop53 + i32.const $push54=, 144 + i32.add $push55=, $0, $pop54 + i32.const $push103=, 24 + i32.add $push13=, $pop55, $pop103 + i32.const $push102=, 85 + i32.store 0($pop13), $pop102 + i32.const $push56=, 144 + i32.add $push57=, $0, $pop56 + i32.const $push101=, 16 + i32.add $push14=, $pop57, $pop101 + i64.const $push100=, 81985529216486895 + i64.store 0($pop14), $pop100 + i64.const $push15=, 21474836484 + i64.store 152($0), $pop15 + i64.const $push99=, 12884901890 + i64.store 144($0), $pop99 + i32.const $push16=, 5 + i32.const $push58=, 144 + i32.add $push59=, $0, $pop58 + call test@FUNCTION, $pop16, $pop59 + i32.const $push60=, 96 + i32.add $push61=, $0, $pop60 + i32.const $push17=, 32 + i32.add $push18=, $pop61, $pop17 + i32.const $push98=, 85 + i32.store 0($pop18), $pop98 + i32.const $push62=, 96 + i32.add $push63=, $0, $pop62 + i32.const $push97=, 24 + i32.add $push19=, $pop63, $pop97 + i64.const $push96=, 81985529216486895 + i64.store 0($pop19), $pop96 + i32.const $push64=, 96 + i32.add $push65=, $0, $pop64 + i32.const $push95=, 16 + i32.add $push20=, $pop65, $pop95 + i32.const $push21=, 6 + i32.store 0($pop20), $pop21 + i64.const $push94=, 21474836484 + i64.store 104($0), $pop94 + i64.const $push93=, 12884901890 + i64.store 96($0), $pop93 + i32.const $push92=, 6 + i32.const $push66=, 96 + i32.add $push67=, $0, $pop66 + call test@FUNCTION, $pop92, $pop67 + i32.const $push68=, 48 + i32.add $push69=, $0, $pop68 + i32.const $push91=, 32 + i32.add $push22=, $pop69, $pop91 + i32.const $push90=, 85 + i32.store 0($pop22), $pop90 + i32.const $push70=, 48 + i32.add $push71=, $0, $pop70 + i32.const $push89=, 24 + i32.add $push23=, $pop71, $pop89 + i64.const $push88=, 81985529216486895 + i64.store 0($pop23), $pop88 + i32.const $push72=, 48 + i32.add $push73=, $0, $pop72 + i32.const $push87=, 16 + i32.add $push24=, $pop73, $pop87 + i64.const $push25=, 30064771078 + i64.store 0($pop24), $pop25 + i64.const $push86=, 21474836484 + i64.store 56($0), $pop86 + i64.const $push85=, 12884901890 + i64.store 48($0), $pop85 + i32.const $push26=, 7 + i32.const $push74=, 48 + i32.add $push75=, $0, $pop74 + call test@FUNCTION, $pop26, $pop75 + i32.const $push27=, 40 + i32.add $push28=, $0, $pop27 + i32.const $push84=, 85 + i32.store 0($pop28), $pop84 + i32.const $push83=, 32 + i32.add $push29=, $0, $pop83 + i64.const $push82=, 81985529216486895 + i64.store 0($pop29), $pop82 + i32.const $push81=, 24 + i32.add $push30=, $0, $pop81 + i32.const $push31=, 8 + i32.store 0($pop30), $pop31 + i32.const $push80=, 16 + i32.add $push32=, $0, $pop80 + i64.const $push79=, 30064771078 + i64.store 0($pop32), $pop79 + i64.const $push78=, 21474836484 + i64.store 8($0), $pop78 + i64.const $push77=, 12884901890 + i64.store 0($0), $pop77 + i32.const $push76=, 8 + call test@FUNCTION, $pop76, $0 + i32.const $push33=, 0 + call exit@FUNCTION, $pop33 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/991216-4.c.s b/src/binaryen/test/torture-s/991216-4.c.s new file mode 100644 index 0000000000..c65042ef65 --- /dev/null +++ b/src/binaryen/test/torture-s/991216-4.c.s @@ -0,0 +1,19 @@ + .text + .file "991216-4.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/991221-1.c.s b/src/binaryen/test/torture-s/991221-1.c.s new file mode 100644 index 0000000000..d2627ba102 --- /dev/null +++ b/src/binaryen/test/torture-s/991221-1.c.s @@ -0,0 +1,19 @@ + .text + .file "991221-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/991227-1.c.s b/src/binaryen/test/torture-s/991227-1.c.s new file mode 100644 index 0000000000..d0559b6086 --- /dev/null +++ b/src/binaryen/test/torture-s/991227-1.c.s @@ -0,0 +1,48 @@ + .text + .file "991227-1.c" + .section .text.doit,"ax",@progbits + .hidden doit # -- Begin function doit + .globl doit + .type doit,@function +doit: # @doit + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push1=, .L.str + i32.const $push0=, .L.str.1 + i32.select $push2=, $pop1, $pop0, $0 + i32.const $push3=, 1 + i32.add $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size doit, .Lfunc_end0-doit + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.then + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.cst8,"aM",@progbits,8 +.L.str: + .asciz "\000wrong\n" + .size .L.str, 8 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "\000right\n" + .size .L.str.1, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/991228-1.c.s b/src/binaryen/test/torture-s/991228-1.c.s new file mode 100644 index 0000000000..bde74f1cc9 --- /dev/null +++ b/src/binaryen/test/torture-s/991228-1.c.s @@ -0,0 +1,109 @@ + .text + .file "991228-1.c" + .section .text.signbit,"ax",@progbits + .hidden signbit # -- Begin function signbit + .globl signbit + .type signbit,@function +signbit: # @signbit + .param f64 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.load $push8=, __stack_pointer($pop9) + i32.const $push10=, 16 + i32.sub $push14=, $pop8, $pop10 + tee_local $push13=, $1=, $pop14 + f64.store 8($pop13), $0 + i32.const $push11=, 8 + i32.add $push12=, $1, $pop11 + i32.const $push0=, 0 + i32.load $push1=, endianness_test($pop0) + i32.const $push2=, 2 + i32.shl $push3=, $pop1, $pop2 + i32.add $push4=, $pop12, $pop3 + i32.load $push5=, 0($pop4) + i32.const $push6=, 31 + i32.shr_u $push7=, $pop5, $pop6 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end0: + .size signbit, .Lfunc_end0-signbit + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push14=, 0 + i32.const $push12=, 0 + i32.load $push11=, __stack_pointer($pop12) + i32.const $push13=, 16 + i32.sub $push22=, $pop11, $pop13 + tee_local $push21=, $1=, $pop22 + i32.store __stack_pointer($pop14), $pop21 + block + i32.const $push20=, 0 + i32.load $push0=, endianness_test($pop20) + i32.const $push1=, 2 + i32.shl $push19=, $pop0, $pop1 + tee_local $push18=, $0=, $pop19 + i32.const $push2=, u + i32.add $push3=, $pop18, $pop2 + i32.load $push4=, 0($pop3) + i32.const $push17=, 0 + i32.lt_s $push5=, $pop4, $pop17 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %if.then + i32.const $push23=, 0 + call exit@FUNCTION, $pop23 + unreachable +.LBB1_2: # %if.end + end_block # label0: + i64.const $push6=, -4625196817309499392 + i64.store 8($1), $pop6 + block + i32.const $push15=, 8 + i32.add $push16=, $1, $pop15 + i32.add $push7=, $pop16, $0 + i32.load $push8=, 0($pop7) + i32.const $push24=, 0 + i32.lt_s $push9=, $pop8, $pop24 + br_if 0, $pop9 # 0: down to label1 +# BB#3: # %if.then1 + call abort@FUNCTION + unreachable +.LBB1_4: # %if.end2 + end_block # label1: + i32.const $push10=, 0 + call exit@FUNCTION, $pop10 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden u # @u + .type u,@object + .section .data.u,"aw",@progbits + .globl u + .p2align 3 +u: + .int64 -4625196817309499392 # double -0.25 + .size u, 8 + + .hidden endianness_test # @endianness_test + .type endianness_test,@object + .section .data.endianness_test,"aw",@progbits + .globl endianness_test + .p2align 3 +endianness_test: + .int64 1 # 0x1 + .size endianness_test, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/align-1.c.s b/src/binaryen/test/torture-s/align-1.c.s new file mode 100644 index 0000000000..8a4e170f0d --- /dev/null +++ b/src/binaryen/test/torture-s/align-1.c.s @@ -0,0 +1,17 @@ + .text + .file "align-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/align-2.c.s b/src/binaryen/test/torture-s/align-2.c.s new file mode 100644 index 0000000000..57bebd0988 --- /dev/null +++ b/src/binaryen/test/torture-s/align-2.c.s @@ -0,0 +1,365 @@ + .text + .file "align-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push95=, 0 + i32.load8_u $push0=, s_c_s($pop95) + i32.const $push1=, 97 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push96=, 0 + i32.load16_u $push3=, s_c_s+2($pop96) + i32.const $push4=, 13 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end6 + i32.const $push97=, 0 + i32.load8_u $push6=, s_c_i($pop97) + i32.const $push7=, 98 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %if.end11 + i32.const $push98=, 0 + i32.load $push9=, s_c_i+4($pop98) + i32.const $push10=, 14 + i32.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#4: # %if.end15 + i32.const $push99=, 0 + i32.load16_u $push12=, s_s_i($pop99) + i32.const $push13=, 15 + i32.ne $push14=, $pop12, $pop13 + br_if 0, $pop14 # 0: down to label0 +# BB#5: # %if.end20 + i32.const $push100=, 0 + i32.load $push15=, s_s_i+4($pop100) + i32.const $push16=, 16 + i32.ne $push17=, $pop15, $pop16 + br_if 0, $pop17 # 0: down to label0 +# BB#6: # %if.end24 + i32.const $push101=, 0 + i32.load8_u $push18=, s_c_f($pop101) + i32.const $push19=, 99 + i32.ne $push20=, $pop18, $pop19 + br_if 0, $pop20 # 0: down to label0 +# BB#7: # %if.end29 + i32.const $push102=, 0 + f32.load $push21=, s_c_f+4($pop102) + f32.const $push22=, 0x1.1p4 + f32.ne $push23=, $pop21, $pop22 + br_if 0, $pop23 # 0: down to label0 +# BB#8: # %if.end34 + i32.const $push103=, 0 + i32.load16_u $push24=, s_s_f($pop103) + i32.const $push25=, 18 + i32.ne $push26=, $pop24, $pop25 + br_if 0, $pop26 # 0: down to label0 +# BB#9: # %if.end39 + i32.const $push104=, 0 + f32.load $push27=, s_s_f+4($pop104) + f32.const $push28=, 0x1.3p4 + f32.ne $push29=, $pop27, $pop28 + br_if 0, $pop29 # 0: down to label0 +# BB#10: # %if.end44 + i32.const $push105=, 0 + i32.load8_u $push30=, s_c_d($pop105) + i32.const $push31=, 100 + i32.ne $push32=, $pop30, $pop31 + br_if 0, $pop32 # 0: down to label0 +# BB#11: # %if.end49 + i32.const $push106=, 0 + f64.load $push33=, s_c_d+8($pop106) + f64.const $push34=, 0x1.4p4 + f64.ne $push35=, $pop33, $pop34 + br_if 0, $pop35 # 0: down to label0 +# BB#12: # %if.end53 + i32.const $push107=, 0 + i32.load16_u $push36=, s_s_d($pop107) + i32.const $push37=, 21 + i32.ne $push38=, $pop36, $pop37 + br_if 0, $pop38 # 0: down to label0 +# BB#13: # %if.end58 + i32.const $push108=, 0 + f64.load $push39=, s_s_d+8($pop108) + f64.const $push40=, 0x1.6p4 + f64.ne $push41=, $pop39, $pop40 + br_if 0, $pop41 # 0: down to label0 +# BB#14: # %if.end62 + i32.const $push109=, 0 + i32.load $push42=, s_i_d($pop109) + i32.const $push43=, 23 + i32.ne $push44=, $pop42, $pop43 + br_if 0, $pop44 # 0: down to label0 +# BB#15: # %if.end66 + i32.const $push110=, 0 + f64.load $push45=, s_i_d+8($pop110) + f64.const $push46=, 0x1.8p4 + f64.ne $push47=, $pop45, $pop46 + br_if 0, $pop47 # 0: down to label0 +# BB#16: # %if.end70 + i32.const $push111=, 0 + f32.load $push48=, s_f_d($pop111) + f32.const $push49=, 0x1.9p4 + f32.ne $push50=, $pop48, $pop49 + br_if 0, $pop50 # 0: down to label0 +# BB#17: # %if.end75 + i32.const $push112=, 0 + f64.load $push51=, s_f_d+8($pop112) + f64.const $push52=, 0x1.ap4 + f64.ne $push53=, $pop51, $pop52 + br_if 0, $pop53 # 0: down to label0 +# BB#18: # %if.end79 + i32.const $push113=, 0 + i32.load8_u $push54=, s_c_ld($pop113) + i32.const $push55=, 101 + i32.ne $push56=, $pop54, $pop55 + br_if 0, $pop56 # 0: down to label0 +# BB#19: # %if.end84 + i32.const $push115=, 0 + i64.load $push58=, s_c_ld+16($pop115) + i32.const $push114=, 0 + i64.load $push57=, s_c_ld+24($pop114) + i64.const $push60=, 0 + i64.const $push59=, 4612723957404008448 + i32.call $push61=, __eqtf2@FUNCTION, $pop58, $pop57, $pop60, $pop59 + br_if 0, $pop61 # 0: down to label0 +# BB#20: # %if.end88 + i32.const $push116=, 0 + i32.load16_u $push62=, s_s_ld($pop116) + i32.const $push63=, 28 + i32.ne $push64=, $pop62, $pop63 + br_if 0, $pop64 # 0: down to label0 +# BB#21: # %if.end93 + i32.const $push118=, 0 + i64.load $push66=, s_s_ld+16($pop118) + i32.const $push117=, 0 + i64.load $push65=, s_s_ld+24($pop117) + i64.const $push68=, 0 + i64.const $push67=, 4612759141776097280 + i32.call $push69=, __eqtf2@FUNCTION, $pop66, $pop65, $pop68, $pop67 + br_if 0, $pop69 # 0: down to label0 +# BB#22: # %if.end97 + i32.const $push119=, 0 + i32.load $push70=, s_i_ld($pop119) + i32.const $push71=, 30 + i32.ne $push72=, $pop70, $pop71 + br_if 0, $pop72 # 0: down to label0 +# BB#23: # %if.end101 + i32.const $push121=, 0 + i64.load $push74=, s_i_ld+16($pop121) + i32.const $push120=, 0 + i64.load $push73=, s_i_ld+24($pop120) + i64.const $push76=, 0 + i64.const $push75=, 4612794326148186112 + i32.call $push77=, __eqtf2@FUNCTION, $pop74, $pop73, $pop76, $pop75 + br_if 0, $pop77 # 0: down to label0 +# BB#24: # %if.end105 + i32.const $push122=, 0 + f32.load $push78=, s_f_ld($pop122) + f32.const $push79=, 0x1p5 + f32.ne $push80=, $pop78, $pop79 + br_if 0, $pop80 # 0: down to label0 +# BB#25: # %if.end110 + i32.const $push124=, 0 + i64.load $push82=, s_f_ld+16($pop124) + i32.const $push123=, 0 + i64.load $push81=, s_f_ld+24($pop123) + i64.const $push84=, 0 + i64.const $push83=, 4612820714427252736 + i32.call $push85=, __eqtf2@FUNCTION, $pop82, $pop81, $pop84, $pop83 + br_if 0, $pop85 # 0: down to label0 +# BB#26: # %if.end114 + i32.const $push125=, 0 + f64.load $push86=, s_d_ld($pop125) + f64.const $push87=, 0x1.1p5 + f64.ne $push88=, $pop86, $pop87 + br_if 0, $pop88 # 0: down to label0 +# BB#27: # %if.end118 + i32.const $push127=, 0 + i64.load $push90=, s_d_ld+16($pop127) + i32.const $push126=, 0 + i64.load $push89=, s_d_ld+24($pop126) + i64.const $push92=, 0 + i64.const $push91=, 4612838306613297152 + i32.call $push93=, __eqtf2@FUNCTION, $pop90, $pop89, $pop92, $pop91 + br_if 0, $pop93 # 0: down to label0 +# BB#28: # %if.end122 + i32.const $push94=, 0 + return $pop94 +.LBB0_29: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden s_c_s # @s_c_s + .type s_c_s,@object + .section .data.s_c_s,"aw",@progbits + .globl s_c_s + .p2align 1 +s_c_s: + .int8 97 # 0x61 + .skip 1 + .int16 13 # 0xd + .size s_c_s, 4 + + .hidden s_c_i # @s_c_i + .type s_c_i,@object + .section .data.s_c_i,"aw",@progbits + .globl s_c_i + .p2align 2 +s_c_i: + .int8 98 # 0x62 + .skip 3 + .int32 14 # 0xe + .size s_c_i, 8 + + .hidden s_s_i # @s_s_i + .type s_s_i,@object + .section .data.s_s_i,"aw",@progbits + .globl s_s_i + .p2align 2 +s_s_i: + .int16 15 # 0xf + .skip 2 + .int32 16 # 0x10 + .size s_s_i, 8 + + .hidden s_c_f # @s_c_f + .type s_c_f,@object + .section .data.s_c_f,"aw",@progbits + .globl s_c_f + .p2align 2 +s_c_f: + .int8 99 # 0x63 + .skip 3 + .int32 1099431936 # float 17 + .size s_c_f, 8 + + .hidden s_s_f # @s_s_f + .type s_s_f,@object + .section .data.s_s_f,"aw",@progbits + .globl s_s_f + .p2align 2 +s_s_f: + .int16 18 # 0x12 + .skip 2 + .int32 1100480512 # float 19 + .size s_s_f, 8 + + .hidden s_c_d # @s_c_d + .type s_c_d,@object + .section .data.s_c_d,"aw",@progbits + .globl s_c_d + .p2align 3 +s_c_d: + .int8 100 # 0x64 + .skip 7 + .int64 4626322717216342016 # double 20 + .size s_c_d, 16 + + .hidden s_s_d # @s_s_d + .type s_s_d,@object + .section .data.s_s_d,"aw",@progbits + .globl s_s_d + .p2align 3 +s_s_d: + .int16 21 # 0x15 + .skip 6 + .int64 4626885667169763328 # double 22 + .size s_s_d, 16 + + .hidden s_i_d # @s_i_d + .type s_i_d,@object + .section .data.s_i_d,"aw",@progbits + .globl s_i_d + .p2align 3 +s_i_d: + .int32 23 # 0x17 + .skip 4 + .int64 4627448617123184640 # double 24 + .size s_i_d, 16 + + .hidden s_f_d # @s_f_d + .type s_f_d,@object + .section .data.s_f_d,"aw",@progbits + .globl s_f_d + .p2align 3 +s_f_d: + .int32 1103626240 # float 25 + .skip 4 + .int64 4628011567076605952 # double 26 + .size s_f_d, 16 + + .hidden s_c_ld # @s_c_ld + .type s_c_ld,@object + .section .data.s_c_ld,"aw",@progbits + .globl s_c_ld + .p2align 4 +s_c_ld: + .int8 101 # 0x65 + .skip 15 + .int64 0 # fp128 27 + .int64 4612723957404008448 + .size s_c_ld, 32 + + .hidden s_s_ld # @s_s_ld + .type s_s_ld,@object + .section .data.s_s_ld,"aw",@progbits + .globl s_s_ld + .p2align 4 +s_s_ld: + .int16 28 # 0x1c + .skip 14 + .int64 0 # fp128 29 + .int64 4612759141776097280 + .size s_s_ld, 32 + + .hidden s_i_ld # @s_i_ld + .type s_i_ld,@object + .section .data.s_i_ld,"aw",@progbits + .globl s_i_ld + .p2align 4 +s_i_ld: + .int32 30 # 0x1e + .skip 12 + .int64 0 # fp128 31 + .int64 4612794326148186112 + .size s_i_ld, 32 + + .hidden s_f_ld # @s_f_ld + .type s_f_ld,@object + .section .data.s_f_ld,"aw",@progbits + .globl s_f_ld + .p2align 4 +s_f_ld: + .int32 1107296256 # float 32 + .skip 12 + .int64 0 # fp128 33 + .int64 4612820714427252736 + .size s_f_ld, 32 + + .hidden s_d_ld # @s_d_ld + .type s_d_ld,@object + .section .data.s_d_ld,"aw",@progbits + .globl s_d_ld + .p2align 4 +s_d_ld: + .int64 4629981891913580544 # double 34 + .skip 8 + .int64 0 # fp128 35 + .int64 4612838306613297152 + .size s_d_ld, 32 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/align-3.c.s b/src/binaryen/test/torture-s/align-3.c.s new file mode 100644 index 0000000000..b3d4e3bf52 --- /dev/null +++ b/src/binaryen/test/torture-s/align-3.c.s @@ -0,0 +1,29 @@ + .text + .file "align-3.c" + .section .text.func,"ax",@progbits + .hidden func # -- Begin function func + .globl func + .p2align 8 + .type func,@function +func: # @func +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size func, .Lfunc_end0-func + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/alloca-1.c.s b/src/binaryen/test/torture-s/alloca-1.c.s new file mode 100644 index 0000000000..887fae75a2 --- /dev/null +++ b/src/binaryen/test/torture-s/alloca-1.c.s @@ -0,0 +1,30 @@ + .text + .file "alloca-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/anon-1.c.s b/src/binaryen/test/torture-s/anon-1.c.s new file mode 100644 index 0000000000..63f32bfc85 --- /dev/null +++ b/src/binaryen/test/torture-s/anon-1.c.s @@ -0,0 +1,30 @@ + .text + .file "anon-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i64.const $push0=, 25769803781 + i64.store foo+4($pop1):p2align=2, $pop0 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden foo # @foo + .type foo,@object + .section .bss.foo,"aw",@nobits + .globl foo + .p2align 2 +foo: + .skip 12 + .size foo, 12 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/arith-1.c.s b/src/binaryen/test/torture-s/arith-1.c.s new file mode 100644 index 0000000000..998379c5bb --- /dev/null +++ b/src/binaryen/test/torture-s/arith-1.c.s @@ -0,0 +1,38 @@ + .text + .file "arith-1.c" + .section .text.sat_add,"ax",@progbits + .hidden sat_add # -- Begin function sat_add + .globl sat_add + .type sat_add,@function +sat_add: # @sat_add + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -1 + i32.const $push2=, 1 + i32.add $push3=, $0, $pop2 + i32.const $push5=, -1 + i32.eq $push1=, $0, $pop5 + i32.select $push4=, $pop0, $pop3, $pop1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size sat_add, .Lfunc_end0-sat_add + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/arith-rand-ll.c.s b/src/binaryen/test/torture-s/arith-rand-ll.c.s new file mode 100644 index 0000000000..39d9e0dc9b --- /dev/null +++ b/src/binaryen/test/torture-s/arith-rand-ll.c.s @@ -0,0 +1,501 @@ + .text + .file "arith-rand-ll.c" + .section .text.simple_rand,"ax",@progbits + .hidden simple_rand # -- Begin function simple_rand + .globl simple_rand + .type simple_rand,@function +simple_rand: # @simple_rand + .result i64 + .local i64 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i64.load $push1=, simple_rand.seed($pop9) + i64.const $push2=, 1103515245 + i64.mul $push3=, $pop1, $pop2 + i64.const $push4=, 12345 + i64.add $push8=, $pop3, $pop4 + tee_local $push7=, $0=, $pop8 + i64.store simple_rand.seed($pop0), $pop7 + i64.const $push5=, 8 + i64.shr_u $push6=, $0, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size simple_rand, .Lfunc_end0-simple_rand + # -- End function + .section .text.random_bitstring,"ax",@progbits + .hidden random_bitstring # -- Begin function random_bitstring + .globl random_bitstring + .type random_bitstring,@function +random_bitstring: # @random_bitstring + .result i64 + .local i32, i32, i64, i64, i64 +# BB#0: # %entry + i32.const $push23=, 0 + i32.const $push22=, 0 + i64.load $push0=, simple_rand.seed($pop22) + i64.const $push21=, 1103515245 + i64.mul $push1=, $pop0, $pop21 + i64.const $push20=, 12345 + i64.add $push19=, $pop1, $pop20 + tee_local $push18=, $3=, $pop19 + i64.store simple_rand.seed($pop23), $pop18 + i64.const $4=, 0 + block + i64.const $push17=, 9 + i64.shr_u $push16=, $3, $pop17 + tee_local $push15=, $2=, $pop16 + i32.wrap/i64 $push2=, $pop15 + i32.const $push14=, 15 + i32.and $push13=, $pop2, $pop14 + tee_local $push12=, $0=, $pop13 + i32.eqz $push40=, $pop12 + br_if 0, $pop40 # 0: down to label0 +# BB#1: # %if.else.preheader + copy_local $1=, $0 +.LBB1_2: # %if.else + # =>This Inner Loop Header: Depth=1 + loop # label1: + i64.const $push25=, 15 + i64.and $push3=, $2, $pop25 + i64.shl $4=, $4, $pop3 + block + i64.const $push24=, 256 + i64.and $push4=, $3, $pop24 + i64.eqz $push5=, $pop4 + br_if 0, $pop5 # 0: down to label2 +# BB#3: # %if.then2 + # in Loop: Header=BB1_2 Depth=1 + i32.const $push27=, 1 + i32.shl $push6=, $pop27, $1 + i32.const $push26=, -1 + i32.add $push7=, $pop6, $pop26 + i64.extend_s/i32 $push8=, $pop7 + i64.or $4=, $4, $pop8 +.LBB1_4: # %if.end + # in Loop: Header=BB1_2 Depth=1 + end_block # label2: + i32.const $push28=, 71 + i32.ge_u $push9=, $0, $pop28 + br_if 1, $pop9 # 1: down to label0 +# BB#5: # %for.cond + # in Loop: Header=BB1_2 Depth=1 + i32.const $push39=, 0 + i64.const $push38=, 1103515245 + i64.mul $push10=, $3, $pop38 + i64.const $push37=, 12345 + i64.add $push36=, $pop10, $pop37 + tee_local $push35=, $3=, $pop36 + i64.store simple_rand.seed($pop39), $pop35 + i64.const $push34=, 9 + i64.shr_u $push33=, $3, $pop34 + tee_local $push32=, $2=, $pop33 + i32.wrap/i64 $push11=, $pop32 + i32.const $push31=, 15 + i32.and $push30=, $pop11, $pop31 + tee_local $push29=, $1=, $pop30 + i32.add $0=, $pop29, $0 + br_if 0, $1 # 0: up to label1 +.LBB1_6: # %cleanup + end_loop + end_block # label0: + copy_local $push41=, $4 + # fallthrough-return: $pop41 + .endfunc +.Lfunc_end1: + .size random_bitstring, .Lfunc_end1-random_bitstring + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64, i64, i64, i32, i32, i32, i32, i32, i32, i32, i64, i64 +# BB#0: # %entry + i32.const $push80=, 0 + i64.load $2=, simple_rand.seed($pop80) + i64.const $1=, 0 +.LBB2_1: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB2_3 Depth 2 + # Child Loop BB2_10 Depth 2 + block + block + block + block + loop # label7: + copy_local $0=, $1 + block + block + i64.const $push90=, 1103515245 + i64.mul $push0=, $2, $pop90 + i64.const $push89=, 12345 + i64.add $push88=, $pop0, $pop89 + tee_local $push87=, $1=, $pop88 + i64.const $push86=, 9 + i64.shr_u $push85=, $pop87, $pop86 + tee_local $push84=, $2=, $pop85 + i32.wrap/i64 $push1=, $pop84 + i32.const $push83=, 15 + i32.and $push82=, $pop1, $pop83 + tee_local $push81=, $8=, $pop82 + i32.eqz $push208=, $pop81 + br_if 0, $pop208 # 0: down to label9 +# BB#2: # %if.else.i.preheader + # in Loop: Header=BB2_1 Depth=1 + i64.const $10=, 0 + copy_local $9=, $8 +.LBB2_3: # %if.else.i + # Parent Loop BB2_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label10: + i64.const $push92=, 15 + i64.and $push2=, $2, $pop92 + i64.shl $10=, $10, $pop2 + block + i64.const $push91=, 256 + i64.and $push3=, $1, $pop91 + i64.eqz $push4=, $pop3 + br_if 0, $pop4 # 0: down to label11 +# BB#4: # %if.then2.i + # in Loop: Header=BB2_3 Depth=2 + i32.const $push94=, 1 + i32.shl $push5=, $pop94, $9 + i32.const $push93=, -1 + i32.add $push6=, $pop5, $pop93 + i64.extend_s/i32 $push7=, $pop6 + i64.or $10=, $10, $pop7 +.LBB2_5: # %if.end.i + # in Loop: Header=BB2_3 Depth=2 + end_block # label11: + i32.const $push95=, 71 + i32.ge_u $push8=, $8, $pop95 + br_if 2, $pop8 # 2: down to label8 +# BB#6: # %for.cond.i + # in Loop: Header=BB2_3 Depth=2 + i64.const $push105=, 1103515245 + i64.mul $push9=, $1, $pop105 + i64.const $push104=, 12345 + i64.add $push103=, $pop9, $pop104 + tee_local $push102=, $1=, $pop103 + i64.const $push101=, 9 + i64.shr_u $push100=, $pop102, $pop101 + tee_local $push99=, $2=, $pop100 + i32.wrap/i64 $push10=, $pop99 + i32.const $push98=, 15 + i32.and $push97=, $pop10, $pop98 + tee_local $push96=, $9=, $pop97 + i32.add $8=, $pop96, $8 + br_if 0, $9 # 0: up to label10 + br 2 # 2: down to label8 +.LBB2_7: # in Loop: Header=BB2_1 Depth=1 + end_loop + end_block # label9: + i64.const $10=, 0 +.LBB2_8: # %random_bitstring.exit + # in Loop: Header=BB2_1 Depth=1 + end_block # label8: + block + i64.const $push115=, 1103515245 + i64.mul $push11=, $1, $pop115 + i64.const $push114=, 12345 + i64.add $push113=, $pop11, $pop114 + tee_local $push112=, $2=, $pop113 + i64.const $push111=, 9 + i64.shr_u $push110=, $pop112, $pop111 + tee_local $push109=, $11=, $pop110 + i32.wrap/i64 $push12=, $pop109 + i32.const $push108=, 15 + i32.and $push107=, $pop12, $pop108 + tee_local $push106=, $8=, $pop107 + i32.eqz $push209=, $pop106 + br_if 0, $pop209 # 0: down to label12 +# BB#9: # %if.else.i459.preheader + # in Loop: Header=BB2_1 Depth=1 + i64.const $1=, 0 + copy_local $9=, $8 +.LBB2_10: # %if.else.i459 + # Parent Loop BB2_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label13: + i64.const $push117=, 15 + i64.and $push13=, $11, $pop117 + i64.shl $1=, $1, $pop13 + block + i64.const $push116=, 256 + i64.and $push14=, $2, $pop116 + i64.eqz $push15=, $pop14 + br_if 0, $pop15 # 0: down to label14 +# BB#11: # %if.then2.i464 + # in Loop: Header=BB2_10 Depth=2 + i32.const $push119=, 1 + i32.shl $push16=, $pop119, $9 + i32.const $push118=, -1 + i32.add $push17=, $pop16, $pop118 + i64.extend_s/i32 $push18=, $pop17 + i64.or $1=, $1, $pop18 +.LBB2_12: # %if.end.i467 + # in Loop: Header=BB2_10 Depth=2 + end_block # label14: + block + i32.const $push120=, 71 + i32.ge_u $push19=, $8, $pop120 + br_if 0, $pop19 # 0: down to label15 +# BB#13: # %for.cond.i451 + # in Loop: Header=BB2_10 Depth=2 + i64.const $push130=, 1103515245 + i64.mul $push20=, $2, $pop130 + i64.const $push129=, 12345 + i64.add $push128=, $pop20, $pop129 + tee_local $push127=, $2=, $pop128 + i64.const $push126=, 9 + i64.shr_u $push125=, $pop127, $pop126 + tee_local $push124=, $11=, $pop125 + i32.wrap/i64 $push21=, $pop124 + i32.const $push123=, 15 + i32.and $push122=, $pop21, $pop123 + tee_local $push121=, $9=, $pop122 + i32.add $8=, $pop121, $8 + br_if 1, $9 # 1: up to label13 +.LBB2_14: # %random_bitstring.exit469 + # in Loop: Header=BB2_1 Depth=1 + end_block # label15: + end_loop + i64.eqz $push22=, $1 + br_if 0, $pop22 # 0: down to label12 +# BB#15: # %cleanup.cont + # in Loop: Header=BB2_1 Depth=1 + block + i64.const $push132=, 9223372036854775807 + i64.and $push23=, $10, $pop132 + i64.const $push131=, 0 + i64.ne $push24=, $pop23, $pop131 + br_if 0, $pop24 # 0: down to label16 +# BB#16: # %cleanup.cont + # in Loop: Header=BB2_1 Depth=1 + i64.const $push133=, -1 + i64.eq $push25=, $1, $pop133 + br_if 1, $pop25 # 1: down to label12 +.LBB2_17: # %if.end17 + # in Loop: Header=BB2_1 Depth=1 + end_block # label16: + i64.rem_s $push141=, $10, $1 + tee_local $push140=, $11=, $pop141 + i64.const $push139=, 63 + i64.shr_s $push138=, $11, $pop139 + tee_local $push137=, $11=, $pop138 + i64.add $push28=, $pop140, $pop137 + i64.xor $push29=, $pop28, $11 + i64.const $push136=, 63 + i64.shr_s $push135=, $1, $pop136 + tee_local $push134=, $11=, $pop135 + i64.add $push26=, $1, $pop134 + i64.xor $push27=, $pop26, $11 + i64.ge_u $push30=, $pop29, $pop27 + br_if 2, $pop30 # 2: down to label6 +# BB#18: # %save_time + # in Loop: Header=BB2_1 Depth=1 + i32.wrap/i64 $push143=, $1 + tee_local $push142=, $8=, $pop143 + i32.eqz $push210=, $pop142 + br_if 0, $pop210 # 0: down to label12 +# BB#19: # %cleanup.cont65 + # in Loop: Header=BB2_1 Depth=1 + block + i32.wrap/i64 $push146=, $10 + tee_local $push145=, $9=, $pop146 + i32.const $push144=, 2147483647 + i32.and $push32=, $pop145, $pop144 + br_if 0, $pop32 # 0: down to label17 +# BB#20: # %cleanup.cont65 + # in Loop: Header=BB2_1 Depth=1 + i32.const $push147=, -1 + i32.eq $push33=, $8, $pop147 + br_if 1, $pop33 # 1: down to label12 +.LBB2_21: # %if.end79 + # in Loop: Header=BB2_1 Depth=1 + end_block # label17: + i32.rem_s $push155=, $9, $8 + tee_local $push154=, $3=, $pop155 + i32.const $push153=, 31 + i32.shr_s $push152=, $3, $pop153 + tee_local $push151=, $5=, $pop152 + i32.add $push36=, $pop154, $pop151 + i32.xor $push37=, $pop36, $5 + i32.const $push150=, 31 + i32.shr_s $push149=, $8, $pop150 + tee_local $push148=, $5=, $pop149 + i32.add $push34=, $8, $pop148 + i32.xor $push35=, $pop34, $5 + i32.ge_u $push38=, $pop37, $pop35 + br_if 3, $pop38 # 3: down to label5 +# BB#22: # %lor.lhs.false103 + # in Loop: Header=BB2_1 Depth=1 + block + i32.eqz $push211=, $3 + br_if 0, $pop211 # 0: down to label18 +# BB#23: # %lor.lhs.false103 + # in Loop: Header=BB2_1 Depth=1 + i32.xor $push39=, $3, $9 + i32.const $push156=, -1 + i32.le_s $push40=, $pop39, $pop156 + br_if 4, $pop40 # 4: down to label5 +.LBB2_24: # %cleanup.cont118 + # in Loop: Header=BB2_1 Depth=1 + end_block # label18: + i32.const $push157=, 65535 + i32.and $push41=, $8, $pop157 + i32.eqz $push212=, $pop41 + br_if 0, $pop212 # 0: down to label12 +# BB#25: # %cleanup.cont158 + # in Loop: Header=BB2_1 Depth=1 + i32.const $push178=, 16 + i32.shl $push42=, $9, $pop178 + i32.const $push177=, 16 + i32.shr_s $push176=, $pop42, $pop177 + tee_local $push175=, $5=, $pop176 + i32.const $push174=, 16 + i32.shl $push173=, $8, $pop174 + tee_local $push172=, $6=, $pop173 + i32.const $push171=, 16 + i32.shr_s $push170=, $pop172, $pop171 + tee_local $push169=, $3=, $pop170 + i32.rem_s $push43=, $pop175, $pop169 + i32.const $push168=, 16 + i32.shl $push167=, $pop43, $pop168 + tee_local $push166=, $7=, $pop167 + i32.const $push165=, 16 + i32.shr_s $push164=, $pop166, $pop165 + tee_local $push163=, $4=, $pop164 + i32.const $push162=, 0 + i32.sub $push45=, $pop162, $4 + i32.const $push161=, -65536 + i32.gt_s $push44=, $7, $pop161 + i32.select $push46=, $pop163, $pop45, $pop44 + i32.const $push160=, 0 + i32.sub $push48=, $pop160, $3 + i32.const $push159=, -65536 + i32.gt_s $push47=, $6, $pop159 + i32.select $push49=, $3, $pop48, $pop47 + i32.const $push158=, 65535 + i32.and $push50=, $pop49, $pop158 + i32.ge_s $push51=, $pop46, $pop50 + br_if 4, $pop51 # 4: down to label4 +# BB#26: # %lor.lhs.false197 + # in Loop: Header=BB2_1 Depth=1 + i32.div_s $push52=, $5, $3 + i32.mul $push53=, $pop52, $3 + i32.add $push54=, $pop53, $4 + i32.const $push180=, 16 + i32.shl $push55=, $pop54, $pop180 + i32.const $push179=, 16 + i32.shr_s $push56=, $pop55, $pop179 + i32.ne $push57=, $pop56, $5 + br_if 4, $pop57 # 4: down to label4 +# BB#27: # %if.end209 + # in Loop: Header=BB2_1 Depth=1 + i32.const $push181=, 255 + i32.and $push59=, $8, $pop181 + i32.eqz $push213=, $pop59 + br_if 0, $pop213 # 0: down to label12 +# BB#28: # %cleanup.cont249 + # in Loop: Header=BB2_1 Depth=1 + i32.const $push202=, 24 + i32.shl $push60=, $9, $pop202 + i32.const $push201=, 24 + i32.shr_s $push200=, $pop60, $pop201 + tee_local $push199=, $9=, $pop200 + i32.const $push198=, 24 + i32.shl $push197=, $8, $pop198 + tee_local $push196=, $5=, $pop197 + i32.const $push195=, 24 + i32.shr_s $push194=, $pop196, $pop195 + tee_local $push193=, $8=, $pop194 + i32.rem_s $push61=, $pop199, $pop193 + i32.const $push192=, 24 + i32.shl $push191=, $pop61, $pop192 + tee_local $push190=, $4=, $pop191 + i32.const $push189=, 24 + i32.shr_s $push188=, $pop190, $pop189 + tee_local $push187=, $3=, $pop188 + i32.const $push186=, 0 + i32.sub $push63=, $pop186, $3 + i32.const $push185=, -16777216 + i32.gt_s $push62=, $4, $pop185 + i32.select $push64=, $pop187, $pop63, $pop62 + i32.const $push184=, 0 + i32.sub $push66=, $pop184, $8 + i32.const $push183=, -16777216 + i32.gt_s $push65=, $5, $pop183 + i32.select $push67=, $8, $pop66, $pop65 + i32.const $push182=, 255 + i32.and $push68=, $pop67, $pop182 + i32.ge_s $push69=, $pop64, $pop68 + br_if 5, $pop69 # 5: down to label3 +# BB#29: # %lor.lhs.false288 + # in Loop: Header=BB2_1 Depth=1 + i32.div_s $push70=, $9, $8 + i32.mul $push71=, $pop70, $8 + i32.add $push72=, $pop71, $3 + i32.const $push204=, 24 + i32.shl $push73=, $pop72, $pop204 + i32.const $push203=, 24 + i32.shr_s $push74=, $pop73, $pop203 + i32.ne $push75=, $pop74, $9 + br_if 5, $pop75 # 5: down to label3 +.LBB2_30: # %cleanup301 + # in Loop: Header=BB2_1 Depth=1 + end_block # label12: + i64.const $push206=, 1 + i64.add $1=, $0, $pop206 + i64.const $push205=, 9999 + i64.lt_u $push78=, $0, $pop205 + br_if 0, $pop78 # 0: up to label7 +# BB#31: # %for.end + end_loop + i32.const $push79=, 0 + i64.store simple_rand.seed($pop79), $2 + i32.const $push207=, 0 + call exit@FUNCTION, $pop207 + unreachable +.LBB2_32: # %if.then32 + end_block # label6: + i32.const $push31=, 0 + i64.store simple_rand.seed($pop31), $2 + call abort@FUNCTION + unreachable +.LBB2_33: # %if.then111 + end_block # label5: + i32.const $push77=, 0 + i64.store simple_rand.seed($pop77), $2 + call abort@FUNCTION + unreachable +.LBB2_34: # %if.then208 + end_block # label4: + i32.const $push58=, 0 + i64.store simple_rand.seed($pop58), $2 + call abort@FUNCTION + unreachable +.LBB2_35: # %if.then299 + end_block # label3: + i32.const $push76=, 0 + i64.store simple_rand.seed($pop76), $2 + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type simple_rand.seed,@object # @simple_rand.seed + .section .data.simple_rand.seed,"aw",@progbits + .p2align 3 +simple_rand.seed: + .int64 47114711 # 0x2cee9d7 + .size simple_rand.seed, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/arith-rand.c.s b/src/binaryen/test/torture-s/arith-rand.c.s new file mode 100644 index 0000000000..291b11f80b --- /dev/null +++ b/src/binaryen/test/torture-s/arith-rand.c.s @@ -0,0 +1,424 @@ + .text + .file "arith-rand.c" + .section .text.simple_rand,"ax",@progbits + .hidden simple_rand # -- Begin function simple_rand + .globl simple_rand + .type simple_rand,@function +simple_rand: # @simple_rand + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push1=, simple_rand.seed($pop9) + i32.const $push2=, 1103515245 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, 12345 + i32.add $push8=, $pop3, $pop4 + tee_local $push7=, $0=, $pop8 + i32.store simple_rand.seed($pop0), $pop7 + i32.const $push5=, 8 + i32.shr_u $push6=, $0, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size simple_rand, .Lfunc_end0-simple_rand + # -- End function + .section .text.random_bitstring,"ax",@progbits + .hidden random_bitstring # -- Begin function random_bitstring + .globl random_bitstring + .type random_bitstring,@function +random_bitstring: # @random_bitstring + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $3=, 0 + i32.const $push18=, 0 + i32.const $push17=, 0 + i32.load $push0=, simple_rand.seed($pop17) + i32.const $push16=, 1103515245 + i32.mul $push1=, $pop0, $pop16 + i32.const $push15=, 12345 + i32.add $push14=, $pop1, $pop15 + tee_local $push13=, $2=, $pop14 + i32.store simple_rand.seed($pop18), $pop13 + block + i32.const $push12=, 9 + i32.shr_u $push2=, $2, $pop12 + i32.const $push11=, 15 + i32.and $push10=, $pop2, $pop11 + tee_local $push9=, $0=, $pop10 + i32.eqz $push32=, $pop9 + br_if 0, $pop32 # 0: down to label0 +# BB#1: # %if.else.preheader + copy_local $1=, $0 + i32.const $3=, 0 +.LBB1_2: # %if.else + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.shl $3=, $3, $1 + block + i32.const $push19=, 256 + i32.and $push3=, $2, $pop19 + i32.eqz $push33=, $pop3 + br_if 0, $pop33 # 0: down to label2 +# BB#3: # %if.then1 + # in Loop: Header=BB1_2 Depth=1 + i32.const $push21=, 1 + i32.shl $push4=, $pop21, $1 + i32.const $push20=, -1 + i32.add $push5=, $pop4, $pop20 + i32.or $3=, $pop5, $3 +.LBB1_4: # %if.end + # in Loop: Header=BB1_2 Depth=1 + end_block # label2: + i32.const $push22=, 39 + i32.ge_u $push6=, $0, $pop22 + br_if 1, $pop6 # 1: down to label0 +# BB#5: # %for.cond + # in Loop: Header=BB1_2 Depth=1 + i32.const $push31=, 0 + i32.const $push30=, 1103515245 + i32.mul $push7=, $2, $pop30 + i32.const $push29=, 12345 + i32.add $push28=, $pop7, $pop29 + tee_local $push27=, $2=, $pop28 + i32.store simple_rand.seed($pop31), $pop27 + i32.const $push26=, 9 + i32.shr_u $push8=, $2, $pop26 + i32.const $push25=, 15 + i32.and $push24=, $pop8, $pop25 + tee_local $push23=, $1=, $pop24 + i32.add $0=, $pop23, $0 + br_if 0, $1 # 0: up to label1 +.LBB1_6: # %cleanup + end_loop + end_block # label0: + copy_local $push34=, $3 + # fallthrough-return: $pop34 + .endfunc +.Lfunc_end1: + .size random_bitstring, .Lfunc_end1-random_bitstring + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push62=, 0 + i32.load $3=, simple_rand.seed($pop62) + i32.const $7=, 0 +.LBB2_1: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB2_3 Depth 2 + # Child Loop BB2_10 Depth 2 + block + block + block + loop # label6: + copy_local $0=, $7 + block + block + i32.const $push70=, 1103515245 + i32.mul $push0=, $3, $pop70 + i32.const $push69=, 12345 + i32.add $push68=, $pop0, $pop69 + tee_local $push67=, $2=, $pop68 + i32.const $push66=, 9 + i32.shr_u $push1=, $pop67, $pop66 + i32.const $push65=, 15 + i32.and $push64=, $pop1, $pop65 + tee_local $push63=, $3=, $pop64 + i32.eqz $push164=, $pop63 + br_if 0, $pop164 # 0: down to label8 +# BB#2: # %if.else.i.preheader + # in Loop: Header=BB2_1 Depth=1 + i32.const $1=, 0 + copy_local $7=, $3 +.LBB2_3: # %if.else.i + # Parent Loop BB2_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label9: + i32.shl $1=, $1, $7 + block + i32.const $push71=, 256 + i32.and $push2=, $2, $pop71 + i32.eqz $push165=, $pop2 + br_if 0, $pop165 # 0: down to label10 +# BB#4: # %if.then1.i + # in Loop: Header=BB2_3 Depth=2 + i32.const $push73=, 1 + i32.shl $push3=, $pop73, $7 + i32.const $push72=, -1 + i32.add $push4=, $pop3, $pop72 + i32.or $1=, $1, $pop4 +.LBB2_5: # %if.end.i + # in Loop: Header=BB2_3 Depth=2 + end_block # label10: + i32.const $push74=, 39 + i32.ge_u $push5=, $3, $pop74 + br_if 2, $pop5 # 2: down to label7 +# BB#6: # %for.cond.i + # in Loop: Header=BB2_3 Depth=2 + i32.const $push82=, 1103515245 + i32.mul $push6=, $2, $pop82 + i32.const $push81=, 12345 + i32.add $push80=, $pop6, $pop81 + tee_local $push79=, $2=, $pop80 + i32.const $push78=, 9 + i32.shr_u $push7=, $pop79, $pop78 + i32.const $push77=, 15 + i32.and $push76=, $pop7, $pop77 + tee_local $push75=, $7=, $pop76 + i32.add $3=, $pop75, $3 + br_if 0, $7 # 0: up to label9 + br 2 # 2: down to label7 +.LBB2_7: # in Loop: Header=BB2_1 Depth=1 + end_loop + end_block # label8: + i32.const $1=, 0 +.LBB2_8: # %random_bitstring.exit + # in Loop: Header=BB2_1 Depth=1 + end_block # label7: + block + i32.const $push90=, 1103515245 + i32.mul $push8=, $2, $pop90 + i32.const $push89=, 12345 + i32.add $push88=, $pop8, $pop89 + tee_local $push87=, $3=, $pop88 + i32.const $push86=, 9 + i32.shr_u $push9=, $pop87, $pop86 + i32.const $push85=, 15 + i32.and $push84=, $pop9, $pop85 + tee_local $push83=, $8=, $pop84 + i32.eqz $push166=, $pop83 + br_if 0, $pop166 # 0: down to label11 +# BB#9: # %if.else.i346.preheader + # in Loop: Header=BB2_1 Depth=1 + i32.const $2=, 0 + copy_local $7=, $8 +.LBB2_10: # %if.else.i346 + # Parent Loop BB2_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label12: + i32.shl $2=, $2, $7 + block + i32.const $push91=, 256 + i32.and $push10=, $3, $pop91 + i32.eqz $push167=, $pop10 + br_if 0, $pop167 # 0: down to label13 +# BB#11: # %if.then1.i350 + # in Loop: Header=BB2_10 Depth=2 + i32.const $push93=, 1 + i32.shl $push11=, $pop93, $7 + i32.const $push92=, -1 + i32.add $push12=, $pop11, $pop92 + i32.or $2=, $2, $pop12 +.LBB2_12: # %if.end.i353 + # in Loop: Header=BB2_10 Depth=2 + end_block # label13: + block + i32.const $push94=, 39 + i32.ge_u $push13=, $8, $pop94 + br_if 0, $pop13 # 0: down to label14 +# BB#13: # %for.cond.i339 + # in Loop: Header=BB2_10 Depth=2 + i32.const $push102=, 1103515245 + i32.mul $push14=, $3, $pop102 + i32.const $push101=, 12345 + i32.add $push100=, $pop14, $pop101 + tee_local $push99=, $3=, $pop100 + i32.const $push98=, 9 + i32.shr_u $push15=, $pop99, $pop98 + i32.const $push97=, 15 + i32.and $push96=, $pop15, $pop97 + tee_local $push95=, $7=, $pop96 + i32.add $8=, $pop95, $8 + br_if 1, $7 # 1: up to label12 +.LBB2_14: # %random_bitstring.exit355 + # in Loop: Header=BB2_1 Depth=1 + end_block # label14: + end_loop + i32.eqz $push168=, $2 + br_if 0, $pop168 # 0: down to label11 +# BB#15: # %cleanup.cont + # in Loop: Header=BB2_1 Depth=1 + block + i32.const $push103=, 2147483647 + i32.and $push16=, $1, $pop103 + br_if 0, $pop16 # 0: down to label15 +# BB#16: # %cleanup.cont + # in Loop: Header=BB2_1 Depth=1 + i32.const $push104=, -1 + i32.eq $push17=, $2, $pop104 + br_if 1, $pop17 # 1: down to label11 +.LBB2_17: # %if.end25 + # in Loop: Header=BB2_1 Depth=1 + end_block # label15: + i32.rem_s $push112=, $1, $2 + tee_local $push111=, $7=, $pop112 + i32.const $push110=, 31 + i32.shr_s $push109=, $7, $pop110 + tee_local $push108=, $7=, $pop109 + i32.add $push20=, $pop111, $pop108 + i32.xor $push21=, $pop20, $7 + i32.const $push107=, 31 + i32.shr_s $push106=, $2, $pop107 + tee_local $push105=, $7=, $pop106 + i32.add $push18=, $2, $pop105 + i32.xor $push19=, $pop18, $7 + i32.ge_u $push22=, $pop21, $pop19 + br_if 3, $pop22 # 3: down to label4 +# BB#18: # %cleanup.cont47 + # in Loop: Header=BB2_1 Depth=1 + i32.const $push113=, 65535 + i32.and $push24=, $2, $pop113 + i32.eqz $push169=, $pop24 + br_if 0, $pop169 # 0: down to label11 +# BB#19: # %cleanup.cont86 + # in Loop: Header=BB2_1 Depth=1 + i32.const $push134=, 16 + i32.shl $push25=, $1, $pop134 + i32.const $push133=, 16 + i32.shr_s $push132=, $pop25, $pop133 + tee_local $push131=, $8=, $pop132 + i32.const $push130=, 16 + i32.shl $push129=, $2, $pop130 + tee_local $push128=, $5=, $pop129 + i32.const $push127=, 16 + i32.shr_s $push126=, $pop128, $pop127 + tee_local $push125=, $7=, $pop126 + i32.rem_s $push26=, $pop131, $pop125 + i32.const $push124=, 16 + i32.shl $push123=, $pop26, $pop124 + tee_local $push122=, $6=, $pop123 + i32.const $push121=, 16 + i32.shr_s $push120=, $pop122, $pop121 + tee_local $push119=, $4=, $pop120 + i32.const $push118=, 0 + i32.sub $push28=, $pop118, $4 + i32.const $push117=, -65536 + i32.gt_s $push27=, $6, $pop117 + i32.select $push29=, $pop119, $pop28, $pop27 + i32.const $push116=, 0 + i32.sub $push31=, $pop116, $7 + i32.const $push115=, -65536 + i32.gt_s $push30=, $5, $pop115 + i32.select $push32=, $7, $pop31, $pop30 + i32.const $push114=, 65535 + i32.and $push33=, $pop32, $pop114 + i32.ge_s $push34=, $pop29, $pop33 + br_if 2, $pop34 # 2: down to label5 +# BB#20: # %lor.lhs.false125 + # in Loop: Header=BB2_1 Depth=1 + i32.div_s $push35=, $8, $7 + i32.mul $push36=, $pop35, $7 + i32.add $push37=, $pop36, $4 + i32.const $push136=, 16 + i32.shl $push38=, $pop37, $pop136 + i32.const $push135=, 16 + i32.shr_s $push39=, $pop38, $pop135 + i32.ne $push40=, $pop39, $8 + br_if 2, $pop40 # 2: down to label5 +# BB#21: # %if.end137 + # in Loop: Header=BB2_1 Depth=1 + i32.const $push137=, 255 + i32.and $push42=, $2, $pop137 + i32.eqz $push170=, $pop42 + br_if 0, $pop170 # 0: down to label11 +# BB#22: # %cleanup.cont177 + # in Loop: Header=BB2_1 Depth=1 + i32.const $push158=, 24 + i32.shl $push43=, $1, $pop158 + i32.const $push157=, 24 + i32.shr_s $push156=, $pop43, $pop157 + tee_local $push155=, $1=, $pop156 + i32.const $push154=, 24 + i32.shl $push153=, $2, $pop154 + tee_local $push152=, $8=, $pop153 + i32.const $push151=, 24 + i32.shr_s $push150=, $pop152, $pop151 + tee_local $push149=, $7=, $pop150 + i32.rem_s $push44=, $pop155, $pop149 + i32.const $push148=, 24 + i32.shl $push147=, $pop44, $pop148 + tee_local $push146=, $4=, $pop147 + i32.const $push145=, 24 + i32.shr_s $push144=, $pop146, $pop145 + tee_local $push143=, $2=, $pop144 + i32.const $push142=, 0 + i32.sub $push46=, $pop142, $2 + i32.const $push141=, -16777216 + i32.gt_s $push45=, $4, $pop141 + i32.select $push47=, $pop143, $pop46, $pop45 + i32.const $push140=, 0 + i32.sub $push49=, $pop140, $7 + i32.const $push139=, -16777216 + i32.gt_s $push48=, $8, $pop139 + i32.select $push50=, $7, $pop49, $pop48 + i32.const $push138=, 255 + i32.and $push51=, $pop50, $pop138 + i32.ge_s $push52=, $pop47, $pop51 + br_if 4, $pop52 # 4: down to label3 +# BB#23: # %lor.lhs.false216 + # in Loop: Header=BB2_1 Depth=1 + i32.div_s $push53=, $1, $7 + i32.mul $push54=, $pop53, $7 + i32.add $push55=, $pop54, $2 + i32.const $push160=, 24 + i32.shl $push56=, $pop55, $pop160 + i32.const $push159=, 24 + i32.shr_s $push57=, $pop56, $pop159 + i32.ne $push58=, $pop57, $1 + br_if 4, $pop58 # 4: down to label3 +.LBB2_24: # %cleanup229 + # in Loop: Header=BB2_1 Depth=1 + end_block # label11: + i32.const $push162=, 1 + i32.add $7=, $0, $pop162 + i32.const $push161=, 999 + i32.lt_u $push60=, $0, $pop161 + br_if 0, $pop60 # 0: up to label6 +# BB#25: # %for.end + end_loop + i32.const $push61=, 0 + i32.store simple_rand.seed($pop61), $3 + i32.const $push163=, 0 + call exit@FUNCTION, $pop163 + unreachable +.LBB2_26: # %if.then136 + end_block # label5: + i32.const $push41=, 0 + i32.store simple_rand.seed($pop41), $3 + call abort@FUNCTION + unreachable +.LBB2_27: # %if.then40 + end_block # label4: + i32.const $push23=, 0 + i32.store simple_rand.seed($pop23), $3 + call abort@FUNCTION + unreachable +.LBB2_28: # %if.then227 + end_block # label3: + i32.const $push59=, 0 + i32.store simple_rand.seed($pop59), $3 + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type simple_rand.seed,@object # @simple_rand.seed + .section .data.simple_rand.seed,"aw",@progbits + .p2align 2 +simple_rand.seed: + .int32 47114711 # 0x2cee9d7 + .size simple_rand.seed, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/ashldi-1.c.s b/src/binaryen/test/torture-s/ashldi-1.c.s new file mode 100644 index 0000000000..2a06d40b8d --- /dev/null +++ b/src/binaryen/test/torture-s/ashldi-1.c.s @@ -0,0 +1,144 @@ + .text + .file "ashldi-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i64 +# BB#0: # %entry + i64.const $3=, -1 + i32.const $1=, .Lswitch.table.main +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label1: + i64.const $push10=, 81985529216486895 + i64.const $push9=, 1 + i64.add $push8=, $3, $pop9 + tee_local $push7=, $3=, $pop8 + i64.shl $push1=, $pop10, $pop7 + i64.load $push2=, 0($1) + i64.ne $push3=, $pop1, $pop2 + br_if 1, $pop3 # 1: down to label0 +# BB#2: # %for.cond + # in Loop: Header=BB0_1 Depth=1 + i32.const $push12=, 8 + i32.add $1=, $1, $pop12 + i64.const $push11=, 63 + i64.lt_u $push4=, $3, $pop11 + br_if 0, $pop4 # 0: up to label1 +# BB#3: # %for.body4.preheader + end_loop + i32.const $1=, 0 + i32.const $0=, .Lswitch.table.main +.LBB0_4: # %for.body4 + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push13=, 64 + i32.ge_u $push5=, $1, $pop13 + br_if 1, $pop5 # 1: down to label0 +# BB#5: # %switch.lookup + # in Loop: Header=BB0_4 Depth=1 + i32.const $push14=, 1 + i32.eqz $push18=, $pop14 + br_if 1, $pop18 # 1: down to label0 +# BB#6: # %for.cond2 + # in Loop: Header=BB0_4 Depth=1 + i32.const $push17=, 8 + i32.add $0=, $0, $pop17 + i32.const $push16=, 62 + i32.gt_u $2=, $1, $pop16 + i32.const $push15=, 1 + i32.add $push0=, $1, $pop15 + copy_local $1=, $pop0 + i32.eqz $push19=, $2 + br_if 0, $pop19 # 0: up to label2 +# BB#7: # %for.end13 + end_loop + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable +.LBB0_8: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type .Lswitch.table.main,@object # @switch.table.main + .section .rodata..Lswitch.table.main,"a",@progbits + .p2align 4 +.Lswitch.table.main: + .int64 81985529216486895 # 0x123456789abcdef + .int64 163971058432973790 # 0x2468acf13579bde + .int64 327942116865947580 # 0x48d159e26af37bc + .int64 655884233731895160 # 0x91a2b3c4d5e6f78 + .int64 1311768467463790320 # 0x123456789abcdef0 + .int64 2623536934927580640 # 0x2468acf13579bde0 + .int64 5247073869855161280 # 0x48d159e26af37bc0 + .int64 -7952596333999229056 # 0x91a2b3c4d5e6f780 + .int64 2541551405711093504 # 0x23456789abcdef00 + .int64 5083102811422187008 # 0x468acf13579bde00 + .int64 -8280538450865177600 # 0x8d159e26af37bc00 + .int64 1885667171979196416 # 0x1a2b3c4d5e6f7800 + .int64 3771334343958392832 # 0x3456789abcdef000 + .int64 7542668687916785664 # 0x68acf13579bde000 + .int64 -3361406697875980288 # 0xd159e26af37bc000 + .int64 -6722813395751960576 # 0xa2b3c4d5e6f78000 + .int64 5001117282205630464 # 0x456789abcdef0000 + .int64 -8444509509298290688 # 0x8acf13579bde0000 + .int64 1557725055112970240 # 0x159e26af37bc0000 + .int64 3115450110225940480 # 0x2b3c4d5e6f780000 + .int64 6230900220451880960 # 0x56789abcdef00000 + .int64 -5984943632805789696 # 0xacf13579bde00000 + .int64 6476856808097972224 # 0x59e26af37bc00000 + .int64 -5493030457513607168 # 0xb3c4d5e6f7800000 + .int64 7460683158682337280 # 0x6789abcdef000000 + .int64 -3525377756344877056 # 0xcf13579bde000000 + .int64 -7050755512689754112 # 0x9e26af37bc000000 + .int64 4345233048330043392 # 0x3c4d5e6f78000000 + .int64 8690466096660086784 # 0x789abcdef0000000 + .int64 -1065811880389378048 # 0xf13579bde0000000 + .int64 -2131623760778756096 # 0xe26af37bc0000000 + .int64 -4263247521557512192 # 0xc4d5e6f780000000 + .int64 -8526495043115024384 # 0x89abcdef00000000 + .int64 1393753987479502848 # 0x13579bde00000000 + .int64 2787507974959005696 # 0x26af37bc00000000 + .int64 5575015949918011392 # 0x4d5e6f7800000000 + .int64 -7296712173873528832 # 0x9abcdef000000000 + .int64 3853319725962493952 # 0x3579bde000000000 + .int64 7706639451924987904 # 0x6af37bc000000000 + .int64 -3033465169859575808 # 0xd5e6f78000000000 + .int64 -6066930339719151616 # 0xabcdef0000000000 + .int64 6312883394271248384 # 0x579bde0000000000 + .int64 -5820977285167054848 # 0xaf37bc0000000000 + .int64 6804789503375441920 # 0x5e6f780000000000 + .int64 -4837165066958667776 # 0xbcdef00000000000 + .int64 8772413939792216064 # 0x79bde00000000000 + .int64 -901916194125119488 # 0xf37bc00000000000 + .int64 -1803832388250238976 # 0xe6f7800000000000 + .int64 -3607664776500477952 # 0xcdef000000000000 + .int64 -7215329553000955904 # 0x9bde000000000000 + .int64 4016084967707639808 # 0x37bc000000000000 + .int64 8032169935415279616 # 0x6f78000000000000 + .int64 -2382404202878992384 # 0xdef0000000000000 + .int64 -4764808405757984768 # 0xbde0000000000000 + .int64 8917127262193582080 # 0x7bc0000000000000 + .int64 -612489549322387456 # 0xf780000000000000 + .int64 -1224979098644774912 # 0xef00000000000000 + .int64 -2449958197289549824 # 0xde00000000000000 + .int64 -4899916394579099648 # 0xbc00000000000000 + .int64 8646911284551352320 # 0x7800000000000000 + .int64 -1152921504606846976 # 0xf000000000000000 + .int64 -2305843009213693952 # 0xe000000000000000 + .int64 -4611686018427387904 # 0xc000000000000000 + .int64 -9223372036854775808 # 0x8000000000000000 + .size .Lswitch.table.main, 512 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/ashrdi-1.c.s b/src/binaryen/test/torture-s/ashrdi-1.c.s new file mode 100644 index 0000000000..c73b459973 --- /dev/null +++ b/src/binaryen/test/torture-s/ashrdi-1.c.s @@ -0,0 +1,718 @@ + .text + .file "ashrdi-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64, i32, i32 +# BB#0: # %entry + i64.const $0=, -1 + i32.const $2=, zext +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label1: + i64.const $push20=, 8526495107234113920 + i64.const $push19=, 1 + i64.add $push18=, $0, $pop19 + tee_local $push17=, $0=, $pop18 + i64.shr_u $push0=, $pop20, $pop17 + i64.load $push1=, 0($2) + i64.ne $push2=, $pop0, $pop1 + br_if 1, $pop2 # 1: down to label0 +# BB#2: # %for.cond + # in Loop: Header=BB0_1 Depth=1 + i32.const $push22=, 8 + i32.add $2=, $2, $pop22 + i64.const $push21=, 63 + i64.lt_u $push3=, $0, $pop21 + br_if 0, $pop3 # 0: up to label1 +# BB#3: # %for.body4.preheader + end_loop + i64.const $0=, -1 + i32.const $2=, sext +.LBB0_4: # %for.body4 + # =>This Inner Loop Header: Depth=1 + loop # label2: + i64.const $push26=, -8152436031399644656 + i64.const $push25=, 1 + i64.add $push24=, $0, $pop25 + tee_local $push23=, $0=, $pop24 + i64.shr_s $push4=, $pop26, $pop23 + i64.load $push5=, 0($2) + i64.ne $push6=, $pop4, $pop5 + br_if 1, $pop6 # 1: down to label0 +# BB#5: # %for.cond2 + # in Loop: Header=BB0_4 Depth=1 + i32.const $push28=, 8 + i32.add $2=, $2, $pop28 + i64.const $push27=, 63 + i64.lt_u $push7=, $0, $pop27 + br_if 0, $pop7 # 0: up to label2 +# BB#6: # %for.body16.preheader + end_loop + i32.const $2=, -1 + i32.const $1=, zext +.LBB0_7: # %for.body16 + # =>This Inner Loop Header: Depth=1 + loop # label3: + i64.const $push32=, 8526495107234113920 + i32.const $push31=, 1 + i32.add $push30=, $2, $pop31 + tee_local $push29=, $2=, $pop30 + i64.call $push8=, constant_shift@FUNCTION, $pop32, $pop29 + i64.load $push9=, 0($1) + i64.ne $push10=, $pop8, $pop9 + br_if 1, $pop10 # 1: down to label0 +# BB#8: # %for.cond14 + # in Loop: Header=BB0_7 Depth=1 + i32.const $push34=, 8 + i32.add $1=, $1, $pop34 + i32.const $push33=, 63 + i32.lt_u $push11=, $2, $pop33 + br_if 0, $pop11 # 0: up to label3 +# BB#9: # %for.body28.preheader + end_loop + i32.const $2=, -1 + i32.const $1=, sext +.LBB0_10: # %for.body28 + # =>This Inner Loop Header: Depth=1 + loop # label4: + i64.const $push38=, -8152436031399644656 + i32.const $push37=, 1 + i32.add $push36=, $2, $pop37 + tee_local $push35=, $2=, $pop36 + i64.call $push12=, constant_shift@FUNCTION, $pop38, $pop35 + i64.load $push13=, 0($1) + i64.ne $push14=, $pop12, $pop13 + br_if 1, $pop14 # 1: down to label0 +# BB#11: # %for.cond26 + # in Loop: Header=BB0_10 Depth=1 + i32.const $push40=, 8 + i32.add $1=, $1, $pop40 + i32.const $push39=, 62 + i32.le_u $push15=, $2, $pop39 + br_if 0, $pop15 # 0: up to label4 +# BB#12: # %for.end37 + end_loop + i32.const $push16=, 0 + call exit@FUNCTION, $pop16 + unreachable +.LBB0_13: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.constant_shift,"ax",@progbits + .type constant_shift,@function # -- Begin function constant_shift +constant_shift: # @constant_shift + .param i64, i32 + .result i64 +# BB#0: # %entry + block + i32.const $push0=, 63 + i32.gt_u $push1=, $1, $pop0 + br_if 0, $pop1 # 0: down to label5 +# BB#1: # %entry + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + br_table $1, 1, 0, 27, 28, 12, 29, 30, 31, 32, 13, 33, 14, 15, 34, 16, 35, 17, 36, 37, 49, 38, 39, 40, 50, 18, 19, 51, 4, 52, 53, 41, 42, 43, 20, 5, 6, 7, 8, 54, 55, 21, 44, 56, 3, 22, 45, 60, 9, 23, 24, 2, 63, 61, 10, 57, 62, 11, 58, 25, 59, 26, 46, 47, 48, 1 # 1: down to label68 + # 0: down to label69 + # 27: down to label42 + # 28: down to label41 + # 12: down to label57 + # 29: down to label40 + # 30: down to label39 + # 31: down to label38 + # 32: down to label37 + # 13: down to label56 + # 33: down to label36 + # 14: down to label55 + # 15: down to label54 + # 34: down to label35 + # 16: down to label53 + # 35: down to label34 + # 17: down to label52 + # 36: down to label33 + # 37: down to label32 + # 49: down to label20 + # 38: down to label31 + # 39: down to label30 + # 40: down to label29 + # 50: down to label19 + # 18: down to label51 + # 19: down to label50 + # 51: down to label18 + # 4: down to label65 + # 52: down to label17 + # 53: down to label16 + # 41: down to label28 + # 42: down to label27 + # 43: down to label26 + # 20: down to label49 + # 5: down to label64 + # 6: down to label63 + # 7: down to label62 + # 8: down to label61 + # 54: down to label15 + # 55: down to label14 + # 21: down to label48 + # 44: down to label25 + # 56: down to label13 + # 3: down to label66 + # 22: down to label47 + # 45: down to label24 + # 60: down to label9 + # 9: down to label60 + # 23: down to label46 + # 24: down to label45 + # 2: down to label67 + # 63: down to label6 + # 61: down to label8 + # 10: down to label59 + # 57: down to label12 + # 62: down to label7 + # 11: down to label58 + # 58: down to label11 + # 25: down to label44 + # 59: down to label10 + # 26: down to label43 + # 46: down to label23 + # 47: down to label22 + # 48: down to label21 +.LBB1_2: # %sw.bb1 + end_block # label69: + i64.const $push64=, 1 + i64.shr_s $0=, $0, $pop64 +.LBB1_3: # %sw.epilog + end_block # label68: + return $0 +.LBB1_4: # %sw.bb99 + end_block # label67: + i64.const $push15=, 50 + i64.shr_s $push65=, $0, $pop15 + return $pop65 +.LBB1_5: # %sw.bb85 + end_block # label66: + i64.const $push22=, 43 + i64.shr_s $push66=, $0, $pop22 + return $pop66 +.LBB1_6: # %sw.bb53 + end_block # label65: + i64.const $push38=, 27 + i64.shr_s $push67=, $0, $pop38 + return $pop67 +.LBB1_7: # %sw.bb67 + end_block # label64: + i64.const $push31=, 34 + i64.shr_s $push68=, $0, $pop31 + return $pop68 +.LBB1_8: # %sw.bb69 + end_block # label63: + i64.const $push30=, 35 + i64.shr_s $push69=, $0, $pop30 + return $pop69 +.LBB1_9: # %sw.bb71 + end_block # label62: + i64.const $push29=, 36 + i64.shr_s $push70=, $0, $pop29 + return $pop70 +.LBB1_10: # %sw.bb73 + end_block # label61: + i64.const $push28=, 37 + i64.shr_s $push71=, $0, $pop28 + return $pop71 +.LBB1_11: # %sw.bb93 + end_block # label60: + i64.const $push18=, 47 + i64.shr_s $push72=, $0, $pop18 + return $pop72 +.LBB1_12: # %sw.bb105 + end_block # label59: + i64.const $push12=, 53 + i64.shr_s $push73=, $0, $pop12 + return $pop73 +.LBB1_13: # %sw.bb111 + end_block # label58: + i64.const $push9=, 56 + i64.shr_s $push74=, $0, $pop9 + return $pop74 +.LBB1_14: # %sw.bb7 + end_block # label57: + i64.const $push61=, 4 + i64.shr_s $push75=, $0, $pop61 + return $pop75 +.LBB1_15: # %sw.bb17 + end_block # label56: + i64.const $push56=, 9 + i64.shr_s $push76=, $0, $pop56 + return $pop76 +.LBB1_16: # %sw.bb21 + end_block # label55: + i64.const $push54=, 11 + i64.shr_s $push77=, $0, $pop54 + return $pop77 +.LBB1_17: # %sw.bb23 + end_block # label54: + i64.const $push53=, 12 + i64.shr_s $push78=, $0, $pop53 + return $pop78 +.LBB1_18: # %sw.bb27 + end_block # label53: + i64.const $push51=, 14 + i64.shr_s $push79=, $0, $pop51 + return $pop79 +.LBB1_19: # %sw.bb31 + end_block # label52: + i64.const $push49=, 16 + i64.shr_s $push80=, $0, $pop49 + return $pop80 +.LBB1_20: # %sw.bb47 + end_block # label51: + i64.const $push41=, 24 + i64.shr_s $push81=, $0, $pop41 + return $pop81 +.LBB1_21: # %sw.bb49 + end_block # label50: + i64.const $push40=, 25 + i64.shr_s $push82=, $0, $pop40 + return $pop82 +.LBB1_22: # %sw.bb65 + end_block # label49: + i64.const $push32=, 33 + i64.shr_s $push83=, $0, $pop32 + return $pop83 +.LBB1_23: # %sw.bb79 + end_block # label48: + i64.const $push25=, 40 + i64.shr_s $push84=, $0, $pop25 + return $pop84 +.LBB1_24: # %sw.bb87 + end_block # label47: + i64.const $push21=, 44 + i64.shr_s $push85=, $0, $pop21 + return $pop85 +.LBB1_25: # %sw.bb95 + end_block # label46: + i64.const $push17=, 48 + i64.shr_s $push86=, $0, $pop17 + return $pop86 +.LBB1_26: # %sw.bb97 + end_block # label45: + i64.const $push16=, 49 + i64.shr_s $push87=, $0, $pop16 + return $pop87 +.LBB1_27: # %sw.bb115 + end_block # label44: + i64.const $push7=, 58 + i64.shr_s $push88=, $0, $pop7 + return $pop88 +.LBB1_28: # %sw.bb119 + end_block # label43: + i64.const $push5=, 60 + i64.shr_s $push89=, $0, $pop5 + return $pop89 +.LBB1_29: # %sw.bb3 + end_block # label42: + i64.const $push63=, 2 + i64.shr_s $push90=, $0, $pop63 + return $pop90 +.LBB1_30: # %sw.bb5 + end_block # label41: + i64.const $push62=, 3 + i64.shr_s $push91=, $0, $pop62 + return $pop91 +.LBB1_31: # %sw.bb9 + end_block # label40: + i64.const $push60=, 5 + i64.shr_s $push92=, $0, $pop60 + return $pop92 +.LBB1_32: # %sw.bb11 + end_block # label39: + i64.const $push59=, 6 + i64.shr_s $push93=, $0, $pop59 + return $pop93 +.LBB1_33: # %sw.bb13 + end_block # label38: + i64.const $push58=, 7 + i64.shr_s $push94=, $0, $pop58 + return $pop94 +.LBB1_34: # %sw.bb15 + end_block # label37: + i64.const $push57=, 8 + i64.shr_s $push95=, $0, $pop57 + return $pop95 +.LBB1_35: # %sw.bb19 + end_block # label36: + i64.const $push55=, 10 + i64.shr_s $push96=, $0, $pop55 + return $pop96 +.LBB1_36: # %sw.bb25 + end_block # label35: + i64.const $push52=, 13 + i64.shr_s $push97=, $0, $pop52 + return $pop97 +.LBB1_37: # %sw.bb29 + end_block # label34: + i64.const $push50=, 15 + i64.shr_s $push98=, $0, $pop50 + return $pop98 +.LBB1_38: # %sw.bb33 + end_block # label33: + i64.const $push48=, 17 + i64.shr_s $push99=, $0, $pop48 + return $pop99 +.LBB1_39: # %sw.bb35 + end_block # label32: + i64.const $push47=, 18 + i64.shr_s $push100=, $0, $pop47 + return $pop100 +.LBB1_40: # %sw.bb39 + end_block # label31: + i64.const $push45=, 20 + i64.shr_s $push101=, $0, $pop45 + return $pop101 +.LBB1_41: # %sw.bb41 + end_block # label30: + i64.const $push44=, 21 + i64.shr_s $push102=, $0, $pop44 + return $pop102 +.LBB1_42: # %sw.bb43 + end_block # label29: + i64.const $push43=, 22 + i64.shr_s $push103=, $0, $pop43 + return $pop103 +.LBB1_43: # %sw.bb59 + end_block # label28: + i64.const $push35=, 30 + i64.shr_s $push104=, $0, $pop35 + return $pop104 +.LBB1_44: # %sw.bb61 + end_block # label27: + i64.const $push34=, 31 + i64.shr_s $push105=, $0, $pop34 + return $pop105 +.LBB1_45: # %sw.bb63 + end_block # label26: + i64.const $push33=, 32 + i64.shr_s $push106=, $0, $pop33 + return $pop106 +.LBB1_46: # %sw.bb81 + end_block # label25: + i64.const $push24=, 41 + i64.shr_s $push107=, $0, $pop24 + return $pop107 +.LBB1_47: # %sw.bb89 + end_block # label24: + i64.const $push20=, 45 + i64.shr_s $push108=, $0, $pop20 + return $pop108 +.LBB1_48: # %sw.bb121 + end_block # label23: + i64.const $push4=, 61 + i64.shr_s $push109=, $0, $pop4 + return $pop109 +.LBB1_49: # %sw.bb123 + end_block # label22: + i64.const $push3=, 62 + i64.shr_s $push110=, $0, $pop3 + return $pop110 +.LBB1_50: # %sw.bb125 + end_block # label21: + i64.const $push2=, 63 + i64.shr_s $push111=, $0, $pop2 + return $pop111 +.LBB1_51: # %sw.bb37 + end_block # label20: + i64.const $push46=, 19 + i64.shr_s $push112=, $0, $pop46 + return $pop112 +.LBB1_52: # %sw.bb45 + end_block # label19: + i64.const $push42=, 23 + i64.shr_s $push113=, $0, $pop42 + return $pop113 +.LBB1_53: # %sw.bb51 + end_block # label18: + i64.const $push39=, 26 + i64.shr_s $push114=, $0, $pop39 + return $pop114 +.LBB1_54: # %sw.bb55 + end_block # label17: + i64.const $push37=, 28 + i64.shr_s $push115=, $0, $pop37 + return $pop115 +.LBB1_55: # %sw.bb57 + end_block # label16: + i64.const $push36=, 29 + i64.shr_s $push116=, $0, $pop36 + return $pop116 +.LBB1_56: # %sw.bb75 + end_block # label15: + i64.const $push27=, 38 + i64.shr_s $push117=, $0, $pop27 + return $pop117 +.LBB1_57: # %sw.bb77 + end_block # label14: + i64.const $push26=, 39 + i64.shr_s $push118=, $0, $pop26 + return $pop118 +.LBB1_58: # %sw.bb83 + end_block # label13: + i64.const $push23=, 42 + i64.shr_s $push119=, $0, $pop23 + return $pop119 +.LBB1_59: # %sw.bb107 + end_block # label12: + i64.const $push11=, 54 + i64.shr_s $push120=, $0, $pop11 + return $pop120 +.LBB1_60: # %sw.bb113 + end_block # label11: + i64.const $push8=, 57 + i64.shr_s $push121=, $0, $pop8 + return $pop121 +.LBB1_61: # %sw.bb117 + end_block # label10: + i64.const $push6=, 59 + i64.shr_s $push122=, $0, $pop6 + return $pop122 +.LBB1_62: # %sw.bb91 + end_block # label9: + i64.const $push19=, 46 + i64.shr_s $push123=, $0, $pop19 + return $pop123 +.LBB1_63: # %sw.bb103 + end_block # label8: + i64.const $push13=, 52 + i64.shr_s $push124=, $0, $pop13 + return $pop124 +.LBB1_64: # %sw.bb109 + end_block # label7: + i64.const $push10=, 55 + i64.shr_s $push125=, $0, $pop10 + return $pop125 +.LBB1_65: # %sw.bb101 + end_block # label6: + i64.const $push14=, 51 + i64.shr_s $push126=, $0, $pop14 + return $pop126 +.LBB1_66: # %sw.default + end_block # label5: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size constant_shift, .Lfunc_end1-constant_shift + # -- End function + .type zext,@object # @zext + .section .rodata.zext,"a",@progbits + .p2align 4 +zext: + .int64 8526495107234113920 # 0x7654321fedcba980 + .int64 4263247553617056960 # 0x3b2a190ff6e5d4c0 + .int64 2131623776808528480 # 0x1d950c87fb72ea60 + .int64 1065811888404264240 # 0xeca8643fdb97530 + .int64 532905944202132120 # 0x7654321fedcba98 + .int64 266452972101066060 # 0x3b2a190ff6e5d4c + .int64 133226486050533030 # 0x1d950c87fb72ea6 + .int64 66613243025266515 # 0xeca8643fdb9753 + .int64 33306621512633257 # 0x7654321fedcba9 + .int64 16653310756316628 # 0x3b2a190ff6e5d4 + .int64 8326655378158314 # 0x1d950c87fb72ea + .int64 4163327689079157 # 0xeca8643fdb975 + .int64 2081663844539578 # 0x7654321fedcba + .int64 1040831922269789 # 0x3b2a190ff6e5d + .int64 520415961134894 # 0x1d950c87fb72e + .int64 260207980567447 # 0xeca8643fdb97 + .int64 130103990283723 # 0x7654321fedcb + .int64 65051995141861 # 0x3b2a190ff6e5 + .int64 32525997570930 # 0x1d950c87fb72 + .int64 16262998785465 # 0xeca8643fdb9 + .int64 8131499392732 # 0x7654321fedc + .int64 4065749696366 # 0x3b2a190ff6e + .int64 2032874848183 # 0x1d950c87fb7 + .int64 1016437424091 # 0xeca8643fdb + .int64 508218712045 # 0x7654321fed + .int64 254109356022 # 0x3b2a190ff6 + .int64 127054678011 # 0x1d950c87fb + .int64 63527339005 # 0xeca8643fd + .int64 31763669502 # 0x7654321fe + .int64 15881834751 # 0x3b2a190ff + .int64 7940917375 # 0x1d950c87f + .int64 3970458687 # 0xeca8643f + .int64 1985229343 # 0x7654321f + .int64 992614671 # 0x3b2a190f + .int64 496307335 # 0x1d950c87 + .int64 248153667 # 0xeca8643 + .int64 124076833 # 0x7654321 + .int64 62038416 # 0x3b2a190 + .int64 31019208 # 0x1d950c8 + .int64 15509604 # 0xeca864 + .int64 7754802 # 0x765432 + .int64 3877401 # 0x3b2a19 + .int64 1938700 # 0x1d950c + .int64 969350 # 0xeca86 + .int64 484675 # 0x76543 + .int64 242337 # 0x3b2a1 + .int64 121168 # 0x1d950 + .int64 60584 # 0xeca8 + .int64 30292 # 0x7654 + .int64 15146 # 0x3b2a + .int64 7573 # 0x1d95 + .int64 3786 # 0xeca + .int64 1893 # 0x765 + .int64 946 # 0x3b2 + .int64 473 # 0x1d9 + .int64 236 # 0xec + .int64 118 # 0x76 + .int64 59 # 0x3b + .int64 29 # 0x1d + .int64 14 # 0xe + .int64 7 # 0x7 + .int64 3 # 0x3 + .int64 1 # 0x1 + .int64 0 # 0x0 + .size zext, 512 + + .type sext,@object # @sext + .section .rodata.sext,"a",@progbits + .p2align 4 +sext: + .int64 -8152436031399644656 # 0x8edcba9f76543210 + .int64 -4076218015699822328 # 0xc76e5d4fbb2a1908 + .int64 -2038109007849911164 # 0xe3b72ea7dd950c84 + .int64 -1019054503924955582 # 0xf1db9753eeca8642 + .int64 -509527251962477791 # 0xf8edcba9f7654321 + .int64 -254763625981238896 # 0xfc76e5d4fbb2a190 + .int64 -127381812990619448 # 0xfe3b72ea7dd950c8 + .int64 -63690906495309724 # 0xff1db9753eeca864 + .int64 -31845453247654862 # 0xff8edcba9f765432 + .int64 -15922726623827431 # 0xffc76e5d4fbb2a19 + .int64 -7961363311913716 # 0xffe3b72ea7dd950c + .int64 -3980681655956858 # 0xfff1db9753eeca86 + .int64 -1990340827978429 # 0xfff8edcba9f76543 + .int64 -995170413989215 # 0xfffc76e5d4fbb2a1 + .int64 -497585206994608 # 0xfffe3b72ea7dd950 + .int64 -248792603497304 # 0xffff1db9753eeca8 + .int64 -124396301748652 # 0xffff8edcba9f7654 + .int64 -62198150874326 # 0xffffc76e5d4fbb2a + .int64 -31099075437163 # 0xffffe3b72ea7dd95 + .int64 -15549537718582 # 0xfffff1db9753eeca + .int64 -7774768859291 # 0xfffff8edcba9f765 + .int64 -3887384429646 # 0xfffffc76e5d4fbb2 + .int64 -1943692214823 # 0xfffffe3b72ea7dd9 + .int64 -971846107412 # 0xffffff1db9753eec + .int64 -485923053706 # 0xffffff8edcba9f76 + .int64 -242961526853 # 0xffffffc76e5d4fbb + .int64 -121480763427 # 0xffffffe3b72ea7dd + .int64 -60740381714 # 0xfffffff1db9753ee + .int64 -30370190857 # 0xfffffff8edcba9f7 + .int64 -15185095429 # 0xfffffffc76e5d4fb + .int64 -7592547715 # 0xfffffffe3b72ea7d + .int64 -3796273858 # 0xffffffff1db9753e + .int64 -1898136929 # 0xffffffff8edcba9f + .int64 -949068465 # 0xffffffffc76e5d4f + .int64 -474534233 # 0xffffffffe3b72ea7 + .int64 -237267117 # 0xfffffffff1db9753 + .int64 -118633559 # 0xfffffffff8edcba9 + .int64 -59316780 # 0xfffffffffc76e5d4 + .int64 -29658390 # 0xfffffffffe3b72ea + .int64 -14829195 # 0xffffffffff1db975 + .int64 -7414598 # 0xffffffffff8edcba + .int64 -3707299 # 0xffffffffffc76e5d + .int64 -1853650 # 0xffffffffffe3b72e + .int64 -926825 # 0xfffffffffff1db97 + .int64 -463413 # 0xfffffffffff8edcb + .int64 -231707 # 0xfffffffffffc76e5 + .int64 -115854 # 0xfffffffffffe3b72 + .int64 -57927 # 0xffffffffffff1db9 + .int64 -28964 # 0xffffffffffff8edc + .int64 -14482 # 0xffffffffffffc76e + .int64 -7241 # 0xffffffffffffe3b7 + .int64 -3621 # 0xfffffffffffff1db + .int64 -1811 # 0xfffffffffffff8ed + .int64 -906 # 0xfffffffffffffc76 + .int64 -453 # 0xfffffffffffffe3b + .int64 -227 # 0xffffffffffffff1d + .int64 -114 # 0xffffffffffffff8e + .int64 -57 # 0xffffffffffffffc7 + .int64 -29 # 0xffffffffffffffe3 + .int64 -15 # 0xfffffffffffffff1 + .int64 -8 # 0xfffffffffffffff8 + .int64 -4 # 0xfffffffffffffffc + .int64 -2 # 0xfffffffffffffffe + .int64 -1 # 0xffffffffffffffff + .size sext, 512 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/bcp-1.c.s b/src/binaryen/test/torture-s/bcp-1.c.s new file mode 100644 index 0000000000..ee2eb4cb0c --- /dev/null +++ b/src/binaryen/test/torture-s/bcp-1.c.s @@ -0,0 +1,420 @@ + .text + .file "bcp-1.c" + .section .text.bad0,"ax",@progbits + .hidden bad0 # -- Begin function bad0 + .globl bad0 + .type bad0,@function +bad0: # @bad0 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size bad0, .Lfunc_end0-bad0 + # -- End function + .section .text.bad1,"ax",@progbits + .hidden bad1 # -- Begin function bad1 + .globl bad1 + .type bad1,@function +bad1: # @bad1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size bad1, .Lfunc_end1-bad1 + # -- End function + .section .text.bad2,"ax",@progbits + .hidden bad2 # -- Begin function bad2 + .globl bad2 + .type bad2,@function +bad2: # @bad2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size bad2, .Lfunc_end2-bad2 + # -- End function + .section .text.bad3,"ax",@progbits + .hidden bad3 # -- Begin function bad3 + .globl bad3 + .type bad3,@function +bad3: # @bad3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size bad3, .Lfunc_end3-bad3 + # -- End function + .section .text.bad4,"ax",@progbits + .hidden bad4 # -- Begin function bad4 + .globl bad4 + .type bad4,@function +bad4: # @bad4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size bad4, .Lfunc_end4-bad4 + # -- End function + .section .text.bad5,"ax",@progbits + .hidden bad5 # -- Begin function bad5 + .globl bad5 + .type bad5,@function +bad5: # @bad5 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end5: + .size bad5, .Lfunc_end5-bad5 + # -- End function + .section .text.bad6,"ax",@progbits + .hidden bad6 # -- Begin function bad6 + .globl bad6 + .type bad6,@function +bad6: # @bad6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end6: + .size bad6, .Lfunc_end6-bad6 + # -- End function + .section .text.bad7,"ax",@progbits + .hidden bad7 # -- Begin function bad7 + .globl bad7 + .type bad7,@function +bad7: # @bad7 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end7: + .size bad7, .Lfunc_end7-bad7 + # -- End function + .section .text.bad8,"ax",@progbits + .hidden bad8 # -- Begin function bad8 + .globl bad8 + .type bad8,@function +bad8: # @bad8 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end8: + .size bad8, .Lfunc_end8-bad8 + # -- End function + .section .text.bad9,"ax",@progbits + .hidden bad9 # -- Begin function bad9 + .globl bad9 + .type bad9,@function +bad9: # @bad9 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end9: + .size bad9, .Lfunc_end9-bad9 + # -- End function + .section .text.bad10,"ax",@progbits + .hidden bad10 # -- Begin function bad10 + .globl bad10 + .type bad10,@function +bad10: # @bad10 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end10: + .size bad10, .Lfunc_end10-bad10 + # -- End function + .section .text.good0,"ax",@progbits + .hidden good0 # -- Begin function good0 + .globl good0 + .type good0,@function +good0: # @good0 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end11: + .size good0, .Lfunc_end11-good0 + # -- End function + .section .text.good1,"ax",@progbits + .hidden good1 # -- Begin function good1 + .globl good1 + .type good1,@function +good1: # @good1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end12: + .size good1, .Lfunc_end12-good1 + # -- End function + .section .text.good2,"ax",@progbits + .hidden good2 # -- Begin function good2 + .globl good2 + .type good2,@function +good2: # @good2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end13: + .size good2, .Lfunc_end13-good2 + # -- End function + .section .text.opt0,"ax",@progbits + .hidden opt0 # -- Begin function opt0 + .globl opt0 + .type opt0,@function +opt0: # @opt0 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end14: + .size opt0, .Lfunc_end14-opt0 + # -- End function + .section .text.opt1,"ax",@progbits + .hidden opt1 # -- Begin function opt1 + .globl opt1 + .type opt1,@function +opt1: # @opt1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end15: + .size opt1, .Lfunc_end15-opt1 + # -- End function + .section .text.opt2,"ax",@progbits + .hidden opt2 # -- Begin function opt2 + .globl opt2 + .type opt2,@function +opt2: # @opt2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end16: + .size opt2, .Lfunc_end16-opt2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + block + i32.const $push35=, 0 + i32.load $push0=, bad_t0($pop35) + i32.call_indirect $push1=, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %for.cond + i32.const $push36=, 0 + i32.load $push2=, bad_t0+4($pop36) + i32.call_indirect $push3=, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#2: # %for.cond.1 + i32.const $push37=, 0 + i32.load $push4=, bad_t0+8($pop37) + i32.call_indirect $push5=, $pop4 + br_if 0, $pop5 # 0: down to label1 +# BB#3: # %for.cond.2 + i32.const $push38=, 0 + i32.load $push6=, bad_t0+12($pop38) + i32.call_indirect $push7=, $pop6 + br_if 0, $pop7 # 0: down to label1 +# BB#4: # %for.cond.3 + i32.const $push39=, 0 + i32.load $push8=, bad_t0+16($pop39) + i32.call_indirect $push9=, $pop8 + br_if 0, $pop9 # 0: down to label1 +# BB#5: # %for.cond.4 + i32.const $push40=, 0 + i32.load $push10=, bad_t0+20($pop40) + i32.call_indirect $push11=, $pop10 + br_if 0, $pop11 # 0: down to label1 +# BB#6: # %for.cond.5 + i32.const $push42=, 1 + i32.const $push41=, 0 + i32.load $push12=, bad_t1($pop41) + i32.call_indirect $push13=, $pop42, $pop12 + br_if 0, $pop13 # 0: down to label1 +# BB#7: # %for.cond1 + i32.const $push44=, 1 + i32.const $push43=, 0 + i32.load $push14=, bad_t1+4($pop43) + i32.call_indirect $push15=, $pop44, $pop14 + br_if 0, $pop15 # 0: down to label1 +# BB#8: # %for.cond1.1 + i32.const $push17=, 1 + i32.const $push45=, 0 + i32.load $push16=, bad_t1+8($pop45) + i32.call_indirect $push18=, $pop17, $pop16 + br_if 0, $pop18 # 0: down to label1 +# BB#9: # %for.cond1.2 + i32.const $push47=, .L.str + i32.const $push46=, 0 + i32.load $push19=, bad_t2($pop46) + i32.call_indirect $push20=, $pop47, $pop19 + br_if 0, $pop20 # 0: down to label1 +# BB#10: # %for.cond12 + i32.const $push49=, .L.str + i32.const $push48=, 0 + i32.load $push21=, bad_t2+4($pop48) + i32.call_indirect $push22=, $pop49, $pop21 + br_if 0, $pop22 # 0: down to label1 +# BB#11: # %for.cond12.1 + i32.const $push50=, 0 + i32.load $push23=, good_t0($pop50) + i32.call_indirect $push24=, $pop23 + i32.eqz $push57=, $pop24 + br_if 0, $pop57 # 0: down to label1 +# BB#12: # %for.cond23 + i32.const $push51=, 0 + i32.load $push25=, good_t0+4($pop51) + i32.call_indirect $push26=, $pop25 + i32.eqz $push58=, $pop26 + br_if 0, $pop58 # 0: down to label1 +# BB#13: # %for.cond23.1 + i32.const $push52=, 0 + i32.load $push27=, good_t0+8($pop52) + i32.call_indirect $push28=, $pop27 + i32.eqz $push59=, $pop28 + br_if 0, $pop59 # 0: down to label1 +# BB#14: # %for.cond23.2 + i32.const $push53=, 0 + i32.load $push29=, opt_t0($pop53) + i32.call_indirect $push30=, $pop29 + i32.eqz $push60=, $pop30 + br_if 0, $pop60 # 0: down to label1 +# BB#15: # %for.cond34 + i32.const $push54=, 0 + i32.load $push31=, opt_t0+4($pop54) + i32.call_indirect $push32=, $pop31 + i32.eqz $push61=, $pop32 + br_if 0, $pop61 # 0: down to label1 +# BB#16: # %for.cond34.1 + i32.const $push55=, 0 + i32.load $push33=, opt_t0+8($pop55) + i32.call_indirect $push34=, $pop33 + br_if 1, $pop34 # 1: down to label0 +.LBB17_17: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable +.LBB17_18: # %for.cond34.2 + end_block # label0: + i32.const $push56=, 0 + call exit@FUNCTION, $pop56 + unreachable + .endfunc +.Lfunc_end17: + .size main, .Lfunc_end17-main + # -- End function + .hidden bad_t0 # @bad_t0 + .type bad_t0,@object + .section .data.bad_t0,"aw",@progbits + .globl bad_t0 + .p2align 4 +bad_t0: + .int32 bad0@FUNCTION + .int32 bad1@FUNCTION + .int32 bad5@FUNCTION + .int32 bad7@FUNCTION + .int32 bad8@FUNCTION + .int32 bad10@FUNCTION + .size bad_t0, 24 + + .hidden bad_t1 # @bad_t1 + .type bad_t1,@object + .section .data.bad_t1,"aw",@progbits + .globl bad_t1 + .p2align 2 +bad_t1: + .int32 bad2@FUNCTION + .int32 bad3@FUNCTION + .int32 bad6@FUNCTION + .size bad_t1, 12 + + .hidden bad_t2 # @bad_t2 + .type bad_t2,@object + .section .data.bad_t2,"aw",@progbits + .globl bad_t2 + .p2align 2 +bad_t2: + .int32 bad4@FUNCTION + .int32 bad9@FUNCTION + .size bad_t2, 8 + + .hidden good_t0 # @good_t0 + .type good_t0,@object + .section .data.good_t0,"aw",@progbits + .globl good_t0 + .p2align 2 +good_t0: + .int32 good0@FUNCTION + .int32 good1@FUNCTION + .int32 good2@FUNCTION + .size good_t0, 12 + + .hidden opt_t0 # @opt_t0 + .type opt_t0,@object + .section .data.opt_t0,"aw",@progbits + .globl opt_t0 + .p2align 2 +opt_t0: + .int32 opt0@FUNCTION + .int32 opt1@FUNCTION + .int32 opt2@FUNCTION + .size opt_t0, 12 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "hi" + .size .L.str, 3 + + .hidden global # @global + .type global,@object + .section .bss.global,"aw",@nobits + .globl global + .p2align 2 +global: + .int32 0 # 0x0 + .size global, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/bf-layout-1.c.s b/src/binaryen/test/torture-s/bf-layout-1.c.s new file mode 100644 index 0000000000..b512aabe7c --- /dev/null +++ b/src/binaryen/test/torture-s/bf-layout-1.c.s @@ -0,0 +1,37 @@ + .text + .file "bf-layout-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .skip 4 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .skip 4 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/bf-pack-1.c.s b/src/binaryen/test/torture-s/bf-pack-1.c.s new file mode 100644 index 0000000000..43e06711b4 --- /dev/null +++ b/src/binaryen/test/torture-s/bf-pack-1.c.s @@ -0,0 +1,66 @@ + .text + .file "bf-pack-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i64 +# BB#0: # %entry + block + i64.load $push9=, 0($0):p2align=2 + tee_local $push8=, $1=, $pop9 + i64.const $push0=, 65535 + i64.and $push1=, $pop8, $pop0 + i64.const $push2=, 4660 + i64.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i64.const $push4=, 281474976645120 + i64.and $push5=, $1, $pop4 + i64.const $push6=, 95075992076288 + i64.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#2: # %if.end6 + return $0 +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push9=, $pop2, $pop4 + tee_local $push8=, $0=, $pop9 + i32.store __stack_pointer($pop5), $pop8 + i64.const $push0=, 95075992080948 + i64.store 8($0), $pop0 + i32.const $push6=, 8 + i32.add $push7=, $0, $pop6 + i32.call $drop=, f@FUNCTION, $pop7 + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/bf-sign-1.c.s b/src/binaryen/test/torture-s/bf-sign-1.c.s new file mode 100644 index 0000000000..c8bb0dc38e --- /dev/null +++ b/src/binaryen/test/torture-s/bf-sign-1.c.s @@ -0,0 +1,19 @@ + .text + .file "bf-sign-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/bf-sign-2.c.s b/src/binaryen/test/torture-s/bf-sign-2.c.s new file mode 100644 index 0000000000..7f9b678b87 --- /dev/null +++ b/src/binaryen/test/torture-s/bf-sign-2.c.s @@ -0,0 +1,75 @@ + .text + .file "bf-sign-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64 +# BB#0: # %entry + block + i32.const $push21=, 0 + i32.load8_u $push0=, x($pop21) + i32.const $push1=, 6 + i32.and $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push22=, 0 + i32.load $push3=, x+4($pop22) + i32.const $push4=, 1 + i32.shl $push5=, $pop3, $pop4 + i32.const $push6=, 3 + i32.ge_s $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#2: # %if.end5 + i32.const $push25=, 0 + i64.load $push24=, x+8($pop25) + tee_local $push23=, $0=, $pop24 + i32.wrap/i64 $push8=, $pop23 + i32.const $push9=, 2 + i32.ge_s $push10=, $pop8, $pop9 + br_if 0, $pop10 # 0: down to label0 +# BB#3: # %if.end13 + i32.const $push26=, 0 + i32.load $push11=, x+28($pop26) + i32.const $push12=, 262128 + i32.and $push13=, $pop11, $pop12 + br_if 0, $pop13 # 0: down to label0 +# BB#4: # %if.end20 + i64.const $push14=, 9223372028264841216 + i64.and $push15=, $0, $pop14 + i64.const $push16=, 4294967297 + i64.ge_u $push17=, $pop15, $pop16 + br_if 0, $pop17 # 0: down to label0 +# BB#5: # %if.end35 + i32.const $push27=, 0 + i32.load8_u $push18=, x+20($pop27) + i32.const $push19=, 6 + i32.and $push20=, $pop18, $pop19 + br_if 0, $pop20 # 0: down to label0 +# BB#6: # %if.end50 + i32.const $push28=, 0 + call exit@FUNCTION, $pop28 + unreachable +.LBB0_7: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 3 +x: + .skip 32 + .size x, 32 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/bf64-1.c.s b/src/binaryen/test/torture-s/bf64-1.c.s new file mode 100644 index 0000000000..a1bace9f97 --- /dev/null +++ b/src/binaryen/test/torture-s/bf64-1.c.s @@ -0,0 +1,51 @@ + .text + .file "bf64-1.c" + .section .text.sub,"ax",@progbits + .hidden sub # -- Begin function sub + .globl sub + .type sub,@function +sub: # @sub + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.const $push1=, -8690468286197432320 + i64.or $push2=, $pop0, $pop1 + i64.store 0($0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size sub, .Lfunc_end0-sub + # -- End function + .section .text.sub2,"ax",@progbits + .hidden sub2 # -- Begin function sub2 + .globl sub2 + .type sub2,@function +sub2: # @sub2 + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.const $push1=, 2381903268435576 + i64.or $push2=, $pop0, $pop1 + i64.store 0($0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size sub2, .Lfunc_end1-sub2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end21 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/bitfld-1.c.s b/src/binaryen/test/torture-s/bitfld-1.c.s new file mode 100644 index 0000000000..36b603bdc3 --- /dev/null +++ b/src/binaryen/test/torture-s/bitfld-1.c.s @@ -0,0 +1,18 @@ + .text + .file "bitfld-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/bitfld-2.c.s b/src/binaryen/test/torture-s/bitfld-2.c.s new file mode 100644 index 0000000000..6b44e47210 --- /dev/null +++ b/src/binaryen/test/torture-s/bitfld-2.c.s @@ -0,0 +1,19 @@ + .text + .file "bitfld-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/bitfld-3.c.s b/src/binaryen/test/torture-s/bitfld-3.c.s new file mode 100644 index 0000000000..1dfc055e2a --- /dev/null +++ b/src/binaryen/test/torture-s/bitfld-3.c.s @@ -0,0 +1,122 @@ + .text + .file "bitfld-3.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64, i64 +# BB#0: # %entry + block + i32.const $push12=, 0 + i64.load $push0=, a($pop12) + i64.const $push1=, 8589934591 + i64.and $push11=, $pop0, $pop1 + tee_local $push10=, $0=, $pop11 + i64.mul $push2=, $pop10, $0 + i64.const $push3=, 0 + i64.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.const $push15=, 0 + i64.load $push5=, a+8($pop15) + i64.const $push6=, 1099511627775 + i64.and $push14=, $pop5, $pop6 + tee_local $push13=, $1=, $pop14 + i64.mul $push7=, $pop13, $0 + i64.mul $push8=, $1, $1 + i64.or $push9=, $pop7, $pop8 + i64.eqz $drop=, $pop9 +.LBB0_2: # %if.end + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 3 +a: + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 16 # 0x10 + .int8 0 # 0x0 + .int8 0 # 0x0 + .skip 3 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 16 # 0x10 + .int8 0 # 0x0 + .int8 0 # 0x0 + .skip 3 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 16 # 0x10 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .skip 2 + .size a, 24 + + .hidden b # @b + .type b,@object + .section .data.b,"aw",@progbits + .globl b + .p2align 3 +b: + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 1 # 0x1 + .skip 3 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 1 # 0x1 + .skip 3 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 1 # 0x1 + .int8 0 # 0x0 + .skip 2 + .size b, 24 + + .hidden c # @c + .type c,@object + .section .data.c,"aw",@progbits + .globl c + .p2align 3 +c: + .int8 255 # 0xff + .int8 255 # 0xff + .int8 255 # 0xff + .int8 255 # 0xff + .int8 1 # 0x1 + .skip 3 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .skip 3 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .skip 2 + .size c, 24 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/bitfld-4.c.s b/src/binaryen/test/torture-s/bitfld-4.c.s new file mode 100644 index 0000000000..8d0bd3e7d4 --- /dev/null +++ b/src/binaryen/test/torture-s/bitfld-4.c.s @@ -0,0 +1,41 @@ + .text + .file "bitfld-4.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load $push0=, x($pop3) + i32.const $push1=, -1863803 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 2 +x: + .int8 133 # 0x85 + .int8 143 # 0x8f + .int8 227 # 0xe3 + .int8 255 # 0xff + .size x, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/bitfld-5.c.s b/src/binaryen/test/torture-s/bitfld-5.c.s new file mode 100644 index 0000000000..ba1d043d1a --- /dev/null +++ b/src/binaryen/test/torture-s/bitfld-5.c.s @@ -0,0 +1,111 @@ + .text + .file "bitfld-5.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i64, i64 +# BB#0: # %entry + #APP + #NO_APP + block + i64.ne $push0=, $0, $1 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i64 +# BB#0: # %entry + #APP + #NO_APP + i64.load $push0=, 0($0) + i64.const $push1=, 2 + i64.shr_u $push2=, $pop0, $pop1 + i64.const $push3=, 1099511627775 + i64.and $push4=, $pop2, $pop3 + call g@FUNCTION, $pop4, $1 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push17=, $pop5, $pop7 + tee_local $push16=, $0=, $pop17 + i32.store __stack_pointer($pop8), $pop16 + i32.const $push0=, 0 + i64.load $push1=, .Lmain.s($pop0) + i64.store 8($0), $pop1 + i32.const $push12=, 8 + i32.add $push13=, $0, $pop12 + i64.const $push2=, 10 + call f@FUNCTION, $pop13, $pop2 + i32.const $push15=, 0 + i64.load $push3=, .Lmain.t($pop15) + i64.store 0($0), $pop3 + i64.const $push4=, 1099511627778 + call f@FUNCTION, $0, $pop4 + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $0, $pop9 + i32.store __stack_pointer($pop11), $pop10 + i32.const $push14=, 0 + # fallthrough-return: $pop14 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type .Lmain.s,@object # @main.s + .section .rodata.cst8,"aM",@progbits,8 + .p2align 3 +.Lmain.s: + .int8 41 # 0x29 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 12 # 0xc + .int8 0 # 0x0 + .int8 0 # 0x0 + .size .Lmain.s, 8 + + .type .Lmain.t,@object # @main.t + .p2align 3 +.Lmain.t: + .int8 9 # 0x9 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 12 # 0xc + .int8 0 # 0x0 + .int8 0 # 0x0 + .size .Lmain.t, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/bitfld-6.c.s b/src/binaryen/test/torture-s/bitfld-6.c.s new file mode 100644 index 0000000000..109ff6a165 --- /dev/null +++ b/src/binaryen/test/torture-s/bitfld-6.c.s @@ -0,0 +1,17 @@ + .text + .file "bitfld-6.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/bswap-1.c.s b/src/binaryen/test/torture-s/bswap-1.c.s new file mode 100644 index 0000000000..129241950c --- /dev/null +++ b/src/binaryen/test/torture-s/bswap-1.c.s @@ -0,0 +1,167 @@ + .text + .file "bswap-1.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i64 + .result i64 +# BB#0: # %entry + i64.const $push0=, 56 + i64.shl $push24=, $0, $pop0 + i64.const $push2=, 40 + i64.shl $push25=, $0, $pop2 + i64.const $push26=, 71776119061217280 + i64.and $push27=, $pop25, $pop26 + i64.or $push28=, $pop24, $pop27 + i64.const $push7=, 24 + i64.shl $push20=, $0, $pop7 + i64.const $push21=, 280375465082880 + i64.and $push22=, $pop20, $pop21 + i64.const $push11=, 8 + i64.shl $push17=, $0, $pop11 + i64.const $push18=, 1095216660480 + i64.and $push19=, $pop17, $pop18 + i64.or $push23=, $pop22, $pop19 + i64.or $push29=, $pop28, $pop23 + i64.const $push34=, 8 + i64.shr_u $push12=, $0, $pop34 + i64.const $push13=, 4278190080 + i64.and $push14=, $pop12, $pop13 + i64.const $push33=, 24 + i64.shr_u $push8=, $0, $pop33 + i64.const $push9=, 16711680 + i64.and $push10=, $pop8, $pop9 + i64.or $push15=, $pop14, $pop10 + i64.const $push32=, 40 + i64.shr_u $push3=, $0, $pop32 + i64.const $push4=, 65280 + i64.and $push5=, $pop3, $pop4 + i64.const $push31=, 56 + i64.shr_u $push1=, $0, $pop31 + i64.or $push6=, $pop5, $pop1 + i64.or $push16=, $pop15, $pop6 + i64.or $push30=, $pop29, $pop16 + # fallthrough-return: $pop30 + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i64 + .result i64 +# BB#0: # %entry + i64.const $push0=, 56 + i64.shl $push24=, $0, $pop0 + i64.const $push2=, 40 + i64.shl $push25=, $0, $pop2 + i64.const $push26=, 71776119061217280 + i64.and $push27=, $pop25, $pop26 + i64.or $push28=, $pop24, $pop27 + i64.const $push7=, 24 + i64.shl $push20=, $0, $pop7 + i64.const $push21=, 280375465082880 + i64.and $push22=, $pop20, $pop21 + i64.const $push11=, 8 + i64.shl $push17=, $0, $pop11 + i64.const $push18=, 1095216660480 + i64.and $push19=, $pop17, $pop18 + i64.or $push23=, $pop22, $pop19 + i64.or $push29=, $pop28, $pop23 + i64.const $push34=, 8 + i64.shr_u $push12=, $0, $pop34 + i64.const $push13=, 4278190080 + i64.and $push14=, $pop12, $pop13 + i64.const $push33=, 24 + i64.shr_u $push8=, $0, $pop33 + i64.const $push9=, 16711680 + i64.and $push10=, $pop8, $pop9 + i64.or $push15=, $pop14, $pop10 + i64.const $push32=, 40 + i64.shr_u $push3=, $0, $pop32 + i64.const $push4=, 65280 + i64.and $push5=, $pop3, $pop4 + i64.const $push31=, 56 + i64.shr_u $push1=, $0, $pop31 + i64.or $push6=, $pop5, $pop1 + i64.or $push16=, $pop15, $pop6 + i64.or $push30=, $pop29, $pop16 + # fallthrough-return: $pop30 + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i64.const $push0=, 18 + i64.call $push1=, g@FUNCTION, $pop0 + i64.const $push2=, 1297036692682702848 + i64.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i64.const $push4=, 4660 + i64.call $push5=, g@FUNCTION, $pop4 + i64.const $push6=, 3752061439553044480 + i64.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#2: # %if.end6 + i64.const $push8=, 1193046 + i64.call $push9=, g@FUNCTION, $pop8 + i64.const $push10=, 6211609577260056576 + i64.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#3: # %if.end11 + i64.const $push12=, 305419896 + i64.call $push13=, g@FUNCTION, $pop12 + i64.const $push14=, 8671175384462524416 + i64.ne $push15=, $pop13, $pop14 + br_if 0, $pop15 # 0: down to label0 +# BB#4: # %if.end16 + i64.const $push16=, 78187493520 + i64.call $push17=, g@FUNCTION, $pop16 + i64.const $push18=, -8036578753402372096 + i64.ne $push19=, $pop17, $pop18 + br_if 0, $pop19 # 0: down to label0 +# BB#5: # %if.end21 + i64.const $push20=, 20015998341138 + i64.call $push21=, g@FUNCTION, $pop20 + i64.const $push22=, 1337701400965152768 + i64.ne $push23=, $pop21, $pop22 + br_if 0, $pop23 # 0: down to label0 +# BB#6: # %if.end26 + i64.const $push24=, 5124095575331380 + i64.call $push25=, g@FUNCTION, $pop24 + i64.const $push26=, 3752220286069772800 + i64.ne $push27=, $pop25, $pop26 + br_if 0, $pop27 # 0: down to label0 +# BB#7: # %if.end31 + i64.const $push28=, 1311768467284833366 + i64.call $push29=, g@FUNCTION, $pop28 + i64.const $push30=, 6211610197754262546 + i64.ne $push31=, $pop29, $pop30 + br_if 0, $pop31 # 0: down to label0 +# BB#8: # %if.end36 + i32.const $push32=, 0 + return $pop32 +.LBB2_9: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/builtin-bitops-1.c.s b/src/binaryen/test/torture-s/builtin-bitops-1.c.s new file mode 100644 index 0000000000..622bfca14c --- /dev/null +++ b/src/binaryen/test/torture-s/builtin-bitops-1.c.s @@ -0,0 +1,1730 @@ + .text + .file "builtin-bitops-1.c" + .section .text.my_ffs,"ax",@progbits + .hidden my_ffs # -- Begin function my_ffs + .globl my_ffs + .type my_ffs,@function +my_ffs: # @my_ffs + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + block + i32.eqz $push11=, $0 + br_if 0, $pop11 # 0: down to label0 +# BB#1: # %for.body.preheader + i32.const $1=, 0 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label2: + i32.const $push6=, 1 + i32.shl $push0=, $pop6, $1 + i32.and $push1=, $pop0, $0 + br_if 1, $pop1 # 1: down to label1 +# BB#3: # %for.inc + # in Loop: Header=BB0_2 Depth=1 + i32.const $push10=, 1 + i32.add $push9=, $1, $pop10 + tee_local $push8=, $1=, $pop9 + i32.const $push7=, 32 + i32.lt_u $push2=, $pop8, $pop7 + br_if 0, $pop2 # 0: up to label2 +.LBB0_4: # %for.end + end_loop + end_block # label1: + i32.const $push3=, 1 + i32.add $push5=, $1, $pop3 + return $pop5 +.LBB0_5: + end_block # label0: + i32.const $push4=, 0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size my_ffs, .Lfunc_end0-my_ffs + # -- End function + .section .text.my_ctz,"ax",@progbits + .hidden my_ctz # -- Begin function my_ctz + .globl my_ctz + .type my_ctz,@function +my_ctz: # @my_ctz + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $1=, 0 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label4: + i32.const $push4=, 1 + i32.shl $push0=, $pop4, $1 + i32.and $push1=, $pop0, $0 + br_if 1, $pop1 # 1: down to label3 +# BB#2: # %for.inc + # in Loop: Header=BB1_1 Depth=1 + i32.const $push8=, 1 + i32.add $push7=, $1, $pop8 + tee_local $push6=, $1=, $pop7 + i32.const $push5=, 32 + i32.lt_u $push2=, $pop6, $pop5 + br_if 0, $pop2 # 0: up to label4 +# BB#3: # %for.end + end_loop + i32.const $push9=, 32 + return $pop9 +.LBB1_4: + end_block # label3: + copy_local $push3=, $1 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size my_ctz, .Lfunc_end1-my_ctz + # -- End function + .section .text.my_clz,"ax",@progbits + .hidden my_clz # -- Begin function my_clz + .globl my_clz + .type my_clz,@function +my_clz: # @my_clz + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $2=, 0 + i32.const $1=, 31 +.LBB2_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label6: + i32.const $push4=, 1 + i32.shl $push0=, $pop4, $1 + i32.and $push1=, $pop0, $0 + br_if 1, $pop1 # 1: down to label5 +# BB#2: # %for.inc + # in Loop: Header=BB2_1 Depth=1 + i32.const $push9=, -1 + i32.add $1=, $1, $pop9 + i32.const $push8=, 1 + i32.add $push7=, $2, $pop8 + tee_local $push6=, $2=, $pop7 + i32.const $push5=, 32 + i32.lt_u $push2=, $pop6, $pop5 + br_if 0, $pop2 # 0: up to label6 +# BB#3: # %for.end + end_loop + i32.const $push10=, 32 + return $pop10 +.LBB2_4: + end_block # label5: + copy_local $push3=, $2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size my_clz, .Lfunc_end2-my_clz + # -- End function + .section .text.my_clrsb,"ax",@progbits + .hidden my_clrsb # -- Begin function my_clrsb + .globl my_clrsb + .type my_clrsb,@function +my_clrsb: # @my_clrsb + .param i32 + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.shr_u $1=, $0, $pop0 + i32.const $2=, 30 + i32.const $3=, 1 +.LBB3_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + block + loop # label9: + i32.shr_u $push1=, $0, $2 + i32.const $push7=, 1 + i32.and $push2=, $pop1, $pop7 + i32.ne $push3=, $pop2, $1 + br_if 1, $pop3 # 1: down to label8 +# BB#2: # %for.inc + # in Loop: Header=BB3_1 Depth=1 + i32.const $push12=, -1 + i32.add $2=, $2, $pop12 + i32.const $4=, 32 + i32.const $push11=, 1 + i32.add $push10=, $3, $pop11 + tee_local $push9=, $3=, $pop10 + i32.const $push8=, 32 + i32.lt_u $push4=, $pop9, $pop8 + br_if 0, $pop4 # 0: up to label9 + br 2 # 2: down to label7 +.LBB3_3: + end_loop + end_block # label8: + copy_local $4=, $3 +.LBB3_4: # %for.end + end_block # label7: + i32.const $push5=, -1 + i32.add $push6=, $4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end3: + .size my_clrsb, .Lfunc_end3-my_clrsb + # -- End function + .section .text.my_popcount,"ax",@progbits + .hidden my_popcount # -- Begin function my_popcount + .globl my_popcount + .type my_popcount,@function +my_popcount: # @my_popcount + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, 0 + i32.const $2=, 0 +.LBB4_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label10: + i32.const $push9=, 1 + i32.shl $push0=, $pop9, $2 + i32.and $push1=, $pop0, $0 + i32.const $push8=, 0 + i32.ne $push2=, $pop1, $pop8 + i32.add $1=, $1, $pop2 + i32.const $push7=, 1 + i32.add $push6=, $2, $pop7 + tee_local $push5=, $2=, $pop6 + i32.const $push4=, 32 + i32.ne $push3=, $pop5, $pop4 + br_if 0, $pop3 # 0: up to label10 +# BB#2: # %for.end + end_loop + copy_local $push10=, $1 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end4: + .size my_popcount, .Lfunc_end4-my_popcount + # -- End function + .section .text.my_parity,"ax",@progbits + .hidden my_parity # -- Begin function my_parity + .globl my_parity + .type my_parity,@function +my_parity: # @my_parity + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, 0 + i32.const $2=, 0 +.LBB5_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label11: + i32.const $push11=, 1 + i32.shl $push0=, $pop11, $2 + i32.and $push1=, $pop0, $0 + i32.const $push10=, 0 + i32.ne $push2=, $pop1, $pop10 + i32.add $1=, $1, $pop2 + i32.const $push9=, 1 + i32.add $push8=, $2, $pop9 + tee_local $push7=, $2=, $pop8 + i32.const $push6=, 32 + i32.ne $push3=, $pop7, $pop6 + br_if 0, $pop3 # 0: up to label11 +# BB#2: # %for.end + end_loop + i32.const $push4=, 1 + i32.and $push5=, $1, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end5: + .size my_parity, .Lfunc_end5-my_parity + # -- End function + .section .text.my_ffsl,"ax",@progbits + .hidden my_ffsl # -- Begin function my_ffsl + .globl my_ffsl + .type my_ffsl,@function +my_ffsl: # @my_ffsl + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + block + i32.eqz $push11=, $0 + br_if 0, $pop11 # 0: down to label12 +# BB#1: # %for.body.preheader + i32.const $1=, 0 +.LBB6_2: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label14: + i32.const $push6=, 1 + i32.shl $push0=, $pop6, $1 + i32.and $push1=, $pop0, $0 + br_if 1, $pop1 # 1: down to label13 +# BB#3: # %for.inc + # in Loop: Header=BB6_2 Depth=1 + i32.const $push10=, 1 + i32.add $push9=, $1, $pop10 + tee_local $push8=, $1=, $pop9 + i32.const $push7=, 32 + i32.lt_u $push2=, $pop8, $pop7 + br_if 0, $pop2 # 0: up to label14 +.LBB6_4: # %for.end + end_loop + end_block # label13: + i32.const $push3=, 1 + i32.add $push5=, $1, $pop3 + return $pop5 +.LBB6_5: + end_block # label12: + i32.const $push4=, 0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end6: + .size my_ffsl, .Lfunc_end6-my_ffsl + # -- End function + .section .text.my_ctzl,"ax",@progbits + .hidden my_ctzl # -- Begin function my_ctzl + .globl my_ctzl + .type my_ctzl,@function +my_ctzl: # @my_ctzl + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $1=, 0 +.LBB7_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label16: + i32.const $push4=, 1 + i32.shl $push0=, $pop4, $1 + i32.and $push1=, $pop0, $0 + br_if 1, $pop1 # 1: down to label15 +# BB#2: # %for.inc + # in Loop: Header=BB7_1 Depth=1 + i32.const $push8=, 1 + i32.add $push7=, $1, $pop8 + tee_local $push6=, $1=, $pop7 + i32.const $push5=, 32 + i32.lt_u $push2=, $pop6, $pop5 + br_if 0, $pop2 # 0: up to label16 +# BB#3: # %for.end + end_loop + i32.const $push9=, 32 + return $pop9 +.LBB7_4: + end_block # label15: + copy_local $push3=, $1 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end7: + .size my_ctzl, .Lfunc_end7-my_ctzl + # -- End function + .section .text.my_clzl,"ax",@progbits + .hidden my_clzl # -- Begin function my_clzl + .globl my_clzl + .type my_clzl,@function +my_clzl: # @my_clzl + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $2=, 0 + i32.const $1=, 31 +.LBB8_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label18: + i32.const $push4=, 1 + i32.shl $push0=, $pop4, $1 + i32.and $push1=, $pop0, $0 + br_if 1, $pop1 # 1: down to label17 +# BB#2: # %for.inc + # in Loop: Header=BB8_1 Depth=1 + i32.const $push9=, -1 + i32.add $1=, $1, $pop9 + i32.const $push8=, 1 + i32.add $push7=, $2, $pop8 + tee_local $push6=, $2=, $pop7 + i32.const $push5=, 32 + i32.lt_u $push2=, $pop6, $pop5 + br_if 0, $pop2 # 0: up to label18 +# BB#3: # %for.end + end_loop + i32.const $push10=, 32 + return $pop10 +.LBB8_4: + end_block # label17: + copy_local $push3=, $2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end8: + .size my_clzl, .Lfunc_end8-my_clzl + # -- End function + .section .text.my_clrsbl,"ax",@progbits + .hidden my_clrsbl # -- Begin function my_clrsbl + .globl my_clrsbl + .type my_clrsbl,@function +my_clrsbl: # @my_clrsbl + .param i32 + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.shr_u $1=, $0, $pop0 + i32.const $2=, 30 + i32.const $3=, 1 +.LBB9_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + block + loop # label21: + i32.shr_u $push1=, $0, $2 + i32.const $push7=, 1 + i32.and $push2=, $pop1, $pop7 + i32.ne $push3=, $pop2, $1 + br_if 1, $pop3 # 1: down to label20 +# BB#2: # %for.inc + # in Loop: Header=BB9_1 Depth=1 + i32.const $push12=, -1 + i32.add $2=, $2, $pop12 + i32.const $4=, 32 + i32.const $push11=, 1 + i32.add $push10=, $3, $pop11 + tee_local $push9=, $3=, $pop10 + i32.const $push8=, 32 + i32.lt_u $push4=, $pop9, $pop8 + br_if 0, $pop4 # 0: up to label21 + br 2 # 2: down to label19 +.LBB9_3: + end_loop + end_block # label20: + copy_local $4=, $3 +.LBB9_4: # %for.end + end_block # label19: + i32.const $push5=, -1 + i32.add $push6=, $4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end9: + .size my_clrsbl, .Lfunc_end9-my_clrsbl + # -- End function + .section .text.my_popcountl,"ax",@progbits + .hidden my_popcountl # -- Begin function my_popcountl + .globl my_popcountl + .type my_popcountl,@function +my_popcountl: # @my_popcountl + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, 0 + i32.const $2=, 0 +.LBB10_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label22: + i32.const $push9=, 1 + i32.shl $push0=, $pop9, $2 + i32.and $push1=, $pop0, $0 + i32.const $push8=, 0 + i32.ne $push2=, $pop1, $pop8 + i32.add $1=, $1, $pop2 + i32.const $push7=, 1 + i32.add $push6=, $2, $pop7 + tee_local $push5=, $2=, $pop6 + i32.const $push4=, 32 + i32.ne $push3=, $pop5, $pop4 + br_if 0, $pop3 # 0: up to label22 +# BB#2: # %for.end + end_loop + copy_local $push10=, $1 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end10: + .size my_popcountl, .Lfunc_end10-my_popcountl + # -- End function + .section .text.my_parityl,"ax",@progbits + .hidden my_parityl # -- Begin function my_parityl + .globl my_parityl + .type my_parityl,@function +my_parityl: # @my_parityl + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, 0 + i32.const $2=, 0 +.LBB11_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label23: + i32.const $push11=, 1 + i32.shl $push0=, $pop11, $2 + i32.and $push1=, $pop0, $0 + i32.const $push10=, 0 + i32.ne $push2=, $pop1, $pop10 + i32.add $1=, $1, $pop2 + i32.const $push9=, 1 + i32.add $push8=, $2, $pop9 + tee_local $push7=, $2=, $pop8 + i32.const $push6=, 32 + i32.ne $push3=, $pop7, $pop6 + br_if 0, $pop3 # 0: up to label23 +# BB#2: # %for.end + end_loop + i32.const $push4=, 1 + i32.and $push5=, $1, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end11: + .size my_parityl, .Lfunc_end11-my_parityl + # -- End function + .section .text.my_ffsll,"ax",@progbits + .hidden my_ffsll # -- Begin function my_ffsll + .globl my_ffsll + .type my_ffsll,@function +my_ffsll: # @my_ffsll + .param i64 + .result i32 + .local i64, i32 +# BB#0: # %entry + block + i64.eqz $push0=, $0 + br_if 0, $pop0 # 0: down to label24 +# BB#1: # %for.body.preheader + i32.const $2=, 0 + i64.const $1=, 0 +.LBB12_2: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label26: + i64.const $push9=, 1 + i64.shl $push1=, $pop9, $1 + i64.and $push2=, $pop1, $0 + i64.const $push8=, 0 + i64.ne $push3=, $pop2, $pop8 + br_if 1, $pop3 # 1: down to label25 +# BB#3: # %for.inc + # in Loop: Header=BB12_2 Depth=1 + i32.const $push14=, 1 + i32.add $2=, $2, $pop14 + i64.const $push13=, 1 + i64.add $push12=, $1, $pop13 + tee_local $push11=, $1=, $pop12 + i64.const $push10=, 64 + i64.lt_u $push4=, $pop11, $pop10 + br_if 0, $pop4 # 0: up to label26 +.LBB12_4: # %for.end + end_loop + end_block # label25: + i32.const $push5=, 1 + i32.add $push7=, $2, $pop5 + return $pop7 +.LBB12_5: + end_block # label24: + i32.const $push6=, 0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end12: + .size my_ffsll, .Lfunc_end12-my_ffsll + # -- End function + .section .text.my_ctzll,"ax",@progbits + .hidden my_ctzll # -- Begin function my_ctzll + .globl my_ctzll + .type my_ctzll,@function +my_ctzll: # @my_ctzll + .param i64 + .result i32 + .local i64, i32 +# BB#0: # %entry + i32.const $2=, 0 + i64.const $1=, 0 +.LBB13_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label28: + i64.const $push5=, 1 + i64.shl $push0=, $pop5, $1 + i64.and $push1=, $pop0, $0 + i64.const $push4=, 0 + i64.ne $push2=, $pop1, $pop4 + br_if 1, $pop2 # 1: down to label27 +# BB#2: # %for.inc + # in Loop: Header=BB13_1 Depth=1 + i32.const $push10=, 1 + i32.add $2=, $2, $pop10 + i64.const $push9=, 1 + i64.add $push8=, $1, $pop9 + tee_local $push7=, $1=, $pop8 + i64.const $push6=, 64 + i64.lt_u $push3=, $pop7, $pop6 + br_if 0, $pop3 # 0: up to label28 +.LBB13_3: # %for.end + end_loop + end_block # label27: + copy_local $push11=, $2 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end13: + .size my_ctzll, .Lfunc_end13-my_ctzll + # -- End function + .section .text.my_clzll,"ax",@progbits + .hidden my_clzll # -- Begin function my_clzll + .globl my_clzll + .type my_clzll,@function +my_clzll: # @my_clzll + .param i64 + .result i32 + .local i64, i64, i32 +# BB#0: # %entry + i32.const $3=, 0 + i64.const $1=, 63 + i64.const $2=, 0 +.LBB14_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label30: + i64.const $push5=, 1 + i64.shl $push0=, $pop5, $1 + i64.and $push1=, $pop0, $0 + i64.const $push4=, 0 + i64.ne $push2=, $pop1, $pop4 + br_if 1, $pop2 # 1: down to label29 +# BB#2: # %for.inc + # in Loop: Header=BB14_1 Depth=1 + i64.const $push11=, -1 + i64.add $1=, $1, $pop11 + i32.const $push10=, 1 + i32.add $3=, $3, $pop10 + i64.const $push9=, 1 + i64.add $push8=, $2, $pop9 + tee_local $push7=, $2=, $pop8 + i64.const $push6=, 64 + i64.lt_u $push3=, $pop7, $pop6 + br_if 0, $pop3 # 0: up to label30 +.LBB14_3: # %for.end + end_loop + end_block # label29: + copy_local $push12=, $3 + # fallthrough-return: $pop12 + .endfunc +.Lfunc_end14: + .size my_clzll, .Lfunc_end14-my_clzll + # -- End function + .section .text.my_clrsbll,"ax",@progbits + .hidden my_clrsbll # -- Begin function my_clrsbll + .globl my_clrsbll + .type my_clrsbll,@function +my_clrsbll: # @my_clrsbll + .param i64 + .result i32 + .local i64, i64, i64, i32 +# BB#0: # %entry + i64.const $push0=, 63 + i64.shr_u $1=, $0, $pop0 + i64.const $2=, 62 + i64.const $3=, 1 + i32.const $4=, 1 +.LBB15_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label32: + i64.shr_u $push1=, $0, $2 + i64.const $push7=, 1 + i64.and $push2=, $pop1, $pop7 + i64.ne $push3=, $pop2, $1 + br_if 1, $pop3 # 1: down to label31 +# BB#2: # %for.inc + # in Loop: Header=BB15_1 Depth=1 + i64.const $push13=, -1 + i64.add $2=, $2, $pop13 + i32.const $push12=, 1 + i32.add $4=, $4, $pop12 + i64.const $push11=, 1 + i64.add $push10=, $3, $pop11 + tee_local $push9=, $3=, $pop10 + i64.const $push8=, 64 + i64.lt_u $push4=, $pop9, $pop8 + br_if 0, $pop4 # 0: up to label32 +.LBB15_3: # %for.end + end_loop + end_block # label31: + i32.const $push5=, -1 + i32.add $push6=, $4, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end15: + .size my_clrsbll, .Lfunc_end15-my_clrsbll + # -- End function + .section .text.my_popcountll,"ax",@progbits + .hidden my_popcountll # -- Begin function my_popcountll + .globl my_popcountll + .type my_popcountll,@function +my_popcountll: # @my_popcountll + .param i64 + .result i32 + .local i64, i32 +# BB#0: # %entry + i32.const $2=, 0 + i64.const $1=, 0 +.LBB16_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label33: + i64.const $push9=, 1 + i64.shl $push0=, $pop9, $1 + i64.and $push1=, $pop0, $0 + i64.const $push8=, 0 + i64.ne $push2=, $pop1, $pop8 + i32.add $2=, $2, $pop2 + i64.const $push7=, 1 + i64.add $push6=, $1, $pop7 + tee_local $push5=, $1=, $pop6 + i64.const $push4=, 64 + i64.ne $push3=, $pop5, $pop4 + br_if 0, $pop3 # 0: up to label33 +# BB#2: # %for.end + end_loop + copy_local $push10=, $2 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end16: + .size my_popcountll, .Lfunc_end16-my_popcountll + # -- End function + .section .text.my_parityll,"ax",@progbits + .hidden my_parityll # -- Begin function my_parityll + .globl my_parityll + .type my_parityll,@function +my_parityll: # @my_parityll + .param i64 + .result i32 + .local i64, i32 +# BB#0: # %entry + i32.const $2=, 0 + i64.const $1=, 0 +.LBB17_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label34: + i64.const $push11=, 1 + i64.shl $push0=, $pop11, $1 + i64.and $push1=, $pop0, $0 + i64.const $push10=, 0 + i64.ne $push2=, $pop1, $pop10 + i32.add $2=, $2, $pop2 + i64.const $push9=, 1 + i64.add $push8=, $1, $pop9 + tee_local $push7=, $1=, $pop8 + i64.const $push6=, 64 + i64.ne $push3=, $pop7, $pop6 + br_if 0, $pop3 # 0: up to label34 +# BB#2: # %for.end + end_loop + i32.const $push4=, 1 + i32.and $push5=, $2, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end17: + .size my_parityll, .Lfunc_end17-my_parityll + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i64, i32, i32, i32, i64, i64, i64, i32 +# BB#0: # %entry + i32.const $0=, 0 +.LBB18_1: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB18_3 Depth 2 + # Child Loop BB18_9 Depth 2 + # Child Loop BB18_14 Depth 2 + # Child Loop BB18_19 Depth 2 + # Child Loop BB18_24 Depth 2 + # Child Loop BB18_27 Depth 2 + block + loop # label36: + i32.const $push203=, 2 + i32.shl $push0=, $0, $pop203 + i32.const $push202=, ints + i32.add $push201=, $pop0, $pop202 + tee_local $push200=, $5=, $pop201 + i32.load $push199=, 0($pop200) + tee_local $push198=, $11=, $pop199 + i32.ctz $push197=, $pop198 + tee_local $push196=, $2=, $pop197 + i32.const $push195=, 1 + i32.add $push1=, $pop196, $pop195 + i32.const $push194=, 0 + i32.select $6=, $pop1, $pop194, $11 + i32.const $3=, 0 + block + i32.eqz $push382=, $11 + br_if 0, $pop382 # 0: down to label37 +# BB#2: # %for.body.i.preheader + # in Loop: Header=BB18_1 Depth=1 + i32.const $3=, 0 +.LBB18_3: # %for.body.i + # Parent Loop BB18_1 Depth=1 + # => This Inner Loop Header: Depth=2 + block + loop # label39: + i32.const $push204=, 1 + i32.shl $push2=, $pop204, $3 + i32.and $push3=, $pop2, $11 + br_if 1, $pop3 # 1: down to label38 +# BB#4: # %for.inc.i + # in Loop: Header=BB18_3 Depth=2 + i32.const $push208=, 1 + i32.add $push207=, $3, $pop208 + tee_local $push206=, $3=, $pop207 + i32.const $push205=, 32 + i32.lt_u $push4=, $pop206, $pop205 + br_if 0, $pop4 # 0: up to label39 +.LBB18_5: # %for.end.i + # in Loop: Header=BB18_1 Depth=1 + end_loop + end_block # label38: + i32.const $push209=, 1 + i32.add $3=, $3, $pop209 +.LBB18_6: # %my_ffs.exit + # in Loop: Header=BB18_1 Depth=1 + end_block # label37: + i32.ne $push5=, $6, $3 + br_if 1, $pop5 # 1: down to label35 +# BB#7: # %if.end + # in Loop: Header=BB18_1 Depth=1 + block + i32.eqz $push383=, $11 + br_if 0, $pop383 # 0: down to label40 +# BB#8: # %land.lhs.true + # in Loop: Header=BB18_1 Depth=1 + i32.clz $1=, $11 + i32.const $6=, 0 + i32.const $3=, 31 +.LBB18_9: # %for.body.i822 + # Parent Loop BB18_1 Depth=1 + # => This Inner Loop Header: Depth=2 + block + block + loop # label43: + i32.const $push210=, 1 + i32.shl $push6=, $pop210, $3 + i32.and $push7=, $pop6, $11 + br_if 1, $pop7 # 1: down to label42 +# BB#10: # %for.inc.i825 + # in Loop: Header=BB18_9 Depth=2 + i32.const $push215=, -1 + i32.add $3=, $3, $pop215 + i32.const $7=, 32 + i32.const $push214=, 1 + i32.add $push213=, $6, $pop214 + tee_local $push212=, $6=, $pop213 + i32.const $push211=, 32 + i32.lt_u $push8=, $pop212, $pop211 + br_if 0, $pop8 # 0: up to label43 + br 2 # 2: down to label41 +.LBB18_11: # in Loop: Header=BB18_1 Depth=1 + end_loop + end_block # label42: + copy_local $7=, $6 +.LBB18_12: # %my_clz.exit + # in Loop: Header=BB18_1 Depth=1 + end_block # label41: + i32.ne $push9=, $1, $7 + br_if 2, $pop9 # 2: down to label35 +# BB#13: # %land.lhs.true13 + # in Loop: Header=BB18_1 Depth=1 + i32.const $3=, 0 +.LBB18_14: # %for.body.i890 + # Parent Loop BB18_1 Depth=1 + # => This Inner Loop Header: Depth=2 + block + block + loop # label46: + i32.const $push216=, 1 + i32.shl $push10=, $pop216, $3 + i32.and $push11=, $pop10, $11 + br_if 1, $pop11 # 1: down to label45 +# BB#15: # %for.inc.i893 + # in Loop: Header=BB18_14 Depth=2 + i32.const $6=, 32 + i32.const $push220=, 1 + i32.add $push219=, $3, $pop220 + tee_local $push218=, $3=, $pop219 + i32.const $push217=, 32 + i32.lt_u $push12=, $pop218, $pop217 + br_if 0, $pop12 # 0: up to label46 + br 2 # 2: down to label44 +.LBB18_16: # in Loop: Header=BB18_1 Depth=1 + end_loop + end_block # label45: + copy_local $6=, $3 +.LBB18_17: # %my_ctz.exit + # in Loop: Header=BB18_1 Depth=1 + end_block # label44: + i32.ne $push13=, $2, $6 + br_if 2, $pop13 # 2: down to label35 +.LBB18_18: # %if.end19 + # in Loop: Header=BB18_1 Depth=1 + end_block # label40: + i32.call $2=, __builtin_clrsb@FUNCTION, $11 + i32.load $push223=, 0($5) + tee_local $push222=, $3=, $pop223 + i32.const $push221=, 31 + i32.shr_u $7=, $pop222, $pop221 + i32.const $6=, 1 + i32.const $11=, 30 +.LBB18_19: # %for.body.i975 + # Parent Loop BB18_1 Depth=1 + # => This Inner Loop Header: Depth=2 + block + block + loop # label49: + i32.shr_u $push14=, $3, $11 + i32.const $push224=, 1 + i32.and $push15=, $pop14, $pop224 + i32.ne $push16=, $pop15, $7 + br_if 1, $pop16 # 1: down to label48 +# BB#20: # %for.inc.i978 + # in Loop: Header=BB18_19 Depth=2 + i32.const $push229=, -1 + i32.add $11=, $11, $pop229 + i32.const $5=, 32 + i32.const $push228=, 1 + i32.add $push227=, $6, $pop228 + tee_local $push226=, $6=, $pop227 + i32.const $push225=, 32 + i32.lt_u $push17=, $pop226, $pop225 + br_if 0, $pop17 # 0: up to label49 + br 2 # 2: down to label47 +.LBB18_21: # in Loop: Header=BB18_1 Depth=1 + end_loop + end_block # label48: + copy_local $5=, $6 +.LBB18_22: # %my_clrsb.exit + # in Loop: Header=BB18_1 Depth=1 + end_block # label47: + i32.const $push230=, -1 + i32.add $push18=, $5, $pop230 + i32.ne $push19=, $2, $pop18 + br_if 1, $pop19 # 1: down to label35 +# BB#23: # %for.body.i1069.preheader + # in Loop: Header=BB18_1 Depth=1 + i32.const $6=, 0 + i32.const $11=, 0 +.LBB18_24: # %for.body.i1069 + # Parent Loop BB18_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label50: + i32.const $push236=, 1 + i32.shl $push20=, $pop236, $11 + i32.and $push21=, $pop20, $3 + i32.const $push235=, 0 + i32.ne $push22=, $pop21, $pop235 + i32.add $6=, $6, $pop22 + i32.const $push234=, 1 + i32.add $push233=, $11, $pop234 + tee_local $push232=, $11=, $pop233 + i32.const $push231=, 32 + i32.ne $push23=, $pop232, $pop231 + br_if 0, $pop23 # 0: up to label50 +# BB#25: # %my_popcount.exit + # in Loop: Header=BB18_1 Depth=1 + end_loop + i32.popcnt $push24=, $3 + i32.ne $push25=, $pop24, $6 + br_if 1, $pop25 # 1: down to label35 +# BB#26: # %for.body.i1160.preheader + # in Loop: Header=BB18_1 Depth=1 + i32.const $7=, 0 + i32.const $11=, 0 +.LBB18_27: # %for.body.i1160 + # Parent Loop BB18_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label51: + i32.const $push242=, 1 + i32.shl $push26=, $pop242, $11 + i32.and $push27=, $pop26, $3 + i32.const $push241=, 0 + i32.ne $push28=, $pop27, $pop241 + i32.add $7=, $7, $pop28 + i32.const $push240=, 1 + i32.add $push239=, $11, $pop240 + tee_local $push238=, $11=, $pop239 + i32.const $push237=, 32 + i32.ne $push29=, $pop238, $pop237 + br_if 0, $pop29 # 0: up to label51 +# BB#28: # %my_parity.exit + # in Loop: Header=BB18_1 Depth=1 + end_loop + i32.xor $push30=, $7, $6 + i32.const $push243=, 1 + i32.and $push31=, $pop30, $pop243 + br_if 1, $pop31 # 1: down to label35 +# BB#29: # %for.cond + # in Loop: Header=BB18_1 Depth=1 + i32.const $push247=, 1 + i32.add $push246=, $0, $pop247 + tee_local $push245=, $0=, $pop246 + i32.const $push244=, 13 + i32.lt_u $push32=, $pop245, $pop244 + br_if 0, $pop32 # 0: up to label36 +# BB#30: # %for.body41.preheader + end_loop + i32.const $0=, 0 +.LBB18_31: # %for.body41 + # =>This Loop Header: Depth=1 + # Child Loop BB18_33 Depth 2 + # Child Loop BB18_39 Depth 2 + # Child Loop BB18_44 Depth 2 + # Child Loop BB18_49 Depth 2 + # Child Loop BB18_54 Depth 2 + # Child Loop BB18_57 Depth 2 + loop # label52: + i32.const $push257=, 2 + i32.shl $push33=, $0, $pop257 + i32.const $push256=, longs + i32.add $push255=, $pop33, $pop256 + tee_local $push254=, $5=, $pop255 + i32.load $push253=, 0($pop254) + tee_local $push252=, $11=, $pop253 + i32.ctz $push251=, $pop252 + tee_local $push250=, $2=, $pop251 + i32.const $push249=, 1 + i32.add $push34=, $pop250, $pop249 + i32.const $push248=, 0 + i32.select $6=, $pop34, $pop248, $11 + i32.const $3=, 0 + block + i32.eqz $push384=, $11 + br_if 0, $pop384 # 0: down to label53 +# BB#32: # %for.body.i1250.preheader + # in Loop: Header=BB18_31 Depth=1 + i32.const $3=, 0 +.LBB18_33: # %for.body.i1250 + # Parent Loop BB18_31 Depth=1 + # => This Inner Loop Header: Depth=2 + block + loop # label55: + i32.const $push258=, 1 + i32.shl $push35=, $pop258, $3 + i32.and $push36=, $pop35, $11 + br_if 1, $pop36 # 1: down to label54 +# BB#34: # %for.inc.i1253 + # in Loop: Header=BB18_33 Depth=2 + i32.const $push262=, 1 + i32.add $push261=, $3, $pop262 + tee_local $push260=, $3=, $pop261 + i32.const $push259=, 32 + i32.lt_u $push37=, $pop260, $pop259 + br_if 0, $pop37 # 0: up to label55 +.LBB18_35: # %for.end.i1256 + # in Loop: Header=BB18_31 Depth=1 + end_loop + end_block # label54: + i32.const $push263=, 1 + i32.add $3=, $3, $pop263 +.LBB18_36: # %my_ffsl.exit + # in Loop: Header=BB18_31 Depth=1 + end_block # label53: + i32.ne $push38=, $6, $3 + br_if 1, $pop38 # 1: down to label35 +# BB#37: # %if.end49 + # in Loop: Header=BB18_31 Depth=1 + block + i32.eqz $push385=, $11 + br_if 0, $pop385 # 0: down to label56 +# BB#38: # %land.lhs.true52 + # in Loop: Header=BB18_31 Depth=1 + i32.clz $1=, $11 + i32.const $6=, 0 + i32.const $3=, 31 +.LBB18_39: # %for.body.i1344 + # Parent Loop BB18_31 Depth=1 + # => This Inner Loop Header: Depth=2 + block + block + loop # label59: + i32.const $push264=, 1 + i32.shl $push39=, $pop264, $3 + i32.and $push40=, $pop39, $11 + br_if 1, $pop40 # 1: down to label58 +# BB#40: # %for.inc.i1347 + # in Loop: Header=BB18_39 Depth=2 + i32.const $push269=, -1 + i32.add $3=, $3, $pop269 + i32.const $7=, 32 + i32.const $push268=, 1 + i32.add $push267=, $6, $pop268 + tee_local $push266=, $6=, $pop267 + i32.const $push265=, 32 + i32.lt_u $push41=, $pop266, $pop265 + br_if 0, $pop41 # 0: up to label59 + br 2 # 2: down to label57 +.LBB18_41: # in Loop: Header=BB18_31 Depth=1 + end_loop + end_block # label58: + copy_local $7=, $6 +.LBB18_42: # %my_clzl.exit + # in Loop: Header=BB18_31 Depth=1 + end_block # label57: + i32.ne $push42=, $1, $7 + br_if 2, $pop42 # 2: down to label35 +# BB#43: # %land.lhs.true61 + # in Loop: Header=BB18_31 Depth=1 + i32.const $3=, 0 +.LBB18_44: # %for.body.i1435 + # Parent Loop BB18_31 Depth=1 + # => This Inner Loop Header: Depth=2 + block + block + loop # label62: + i32.const $push270=, 1 + i32.shl $push43=, $pop270, $3 + i32.and $push44=, $pop43, $11 + br_if 1, $pop44 # 1: down to label61 +# BB#45: # %for.inc.i1438 + # in Loop: Header=BB18_44 Depth=2 + i32.const $6=, 32 + i32.const $push274=, 1 + i32.add $push273=, $3, $pop274 + tee_local $push272=, $3=, $pop273 + i32.const $push271=, 32 + i32.lt_u $push45=, $pop272, $pop271 + br_if 0, $pop45 # 0: up to label62 + br 2 # 2: down to label60 +.LBB18_46: # in Loop: Header=BB18_31 Depth=1 + end_loop + end_block # label61: + copy_local $6=, $3 +.LBB18_47: # %my_ctzl.exit + # in Loop: Header=BB18_31 Depth=1 + end_block # label60: + i32.ne $push46=, $2, $6 + br_if 2, $pop46 # 2: down to label35 +.LBB18_48: # %if.end67 + # in Loop: Header=BB18_31 Depth=1 + end_block # label56: + i32.call $2=, __builtin_clrsbl@FUNCTION, $11 + i32.load $push277=, 0($5) + tee_local $push276=, $3=, $pop277 + i32.const $push275=, 31 + i32.shr_u $7=, $pop276, $pop275 + i32.const $6=, 1 + i32.const $11=, 30 +.LBB18_49: # %for.body.i1528 + # Parent Loop BB18_31 Depth=1 + # => This Inner Loop Header: Depth=2 + block + block + loop # label65: + i32.shr_u $push47=, $3, $11 + i32.const $push278=, 1 + i32.and $push48=, $pop47, $pop278 + i32.ne $push49=, $pop48, $7 + br_if 1, $pop49 # 1: down to label64 +# BB#50: # %for.inc.i1531 + # in Loop: Header=BB18_49 Depth=2 + i32.const $push283=, -1 + i32.add $11=, $11, $pop283 + i32.const $5=, 32 + i32.const $push282=, 1 + i32.add $push281=, $6, $pop282 + tee_local $push280=, $6=, $pop281 + i32.const $push279=, 32 + i32.lt_u $push50=, $pop280, $pop279 + br_if 0, $pop50 # 0: up to label65 + br 2 # 2: down to label63 +.LBB18_51: # in Loop: Header=BB18_31 Depth=1 + end_loop + end_block # label64: + copy_local $5=, $6 +.LBB18_52: # %my_clrsbl.exit + # in Loop: Header=BB18_31 Depth=1 + end_block # label63: + i32.const $push284=, -1 + i32.add $push51=, $5, $pop284 + i32.ne $push52=, $2, $pop51 + br_if 1, $pop52 # 1: down to label35 +# BB#53: # %for.body.i1625.preheader + # in Loop: Header=BB18_31 Depth=1 + i32.const $6=, 0 + i32.const $11=, 0 +.LBB18_54: # %for.body.i1625 + # Parent Loop BB18_31 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label66: + i32.const $push290=, 1 + i32.shl $push53=, $pop290, $11 + i32.and $push54=, $pop53, $3 + i32.const $push289=, 0 + i32.ne $push55=, $pop54, $pop289 + i32.add $6=, $6, $pop55 + i32.const $push288=, 1 + i32.add $push287=, $11, $pop288 + tee_local $push286=, $11=, $pop287 + i32.const $push285=, 32 + i32.ne $push56=, $pop286, $pop285 + br_if 0, $pop56 # 0: up to label66 +# BB#55: # %my_popcountl.exit + # in Loop: Header=BB18_31 Depth=1 + end_loop + i32.popcnt $push57=, $3 + i32.ne $push58=, $pop57, $6 + br_if 1, $pop58 # 1: down to label35 +# BB#56: # %for.body.i1717.preheader + # in Loop: Header=BB18_31 Depth=1 + i32.const $7=, 0 + i32.const $11=, 0 +.LBB18_57: # %for.body.i1717 + # Parent Loop BB18_31 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label67: + i32.const $push296=, 1 + i32.shl $push59=, $pop296, $11 + i32.and $push60=, $pop59, $3 + i32.const $push295=, 0 + i32.ne $push61=, $pop60, $pop295 + i32.add $7=, $7, $pop61 + i32.const $push294=, 1 + i32.add $push293=, $11, $pop294 + tee_local $push292=, $11=, $pop293 + i32.const $push291=, 32 + i32.ne $push62=, $pop292, $pop291 + br_if 0, $pop62 # 0: up to label67 +# BB#58: # %my_parityl.exit + # in Loop: Header=BB18_31 Depth=1 + end_loop + i32.xor $push63=, $7, $6 + i32.const $push297=, 1 + i32.and $push64=, $pop63, $pop297 + br_if 1, $pop64 # 1: down to label35 +# BB#59: # %for.cond39 + # in Loop: Header=BB18_31 Depth=1 + i32.const $push301=, 1 + i32.add $push300=, $0, $pop301 + tee_local $push299=, $0=, $pop300 + i32.const $push298=, 13 + i32.lt_u $push65=, $pop299, $pop298 + br_if 0, $pop65 # 0: up to label52 +# BB#60: # %for.body92.preheader + end_loop + i32.const $6=, 0 +.LBB18_61: # %for.body92 + # =>This Loop Header: Depth=1 + # Child Loop BB18_63 Depth 2 + # Child Loop BB18_69 Depth 2 + # Child Loop BB18_73 Depth 2 + # Child Loop BB18_77 Depth 2 + # Child Loop BB18_81 Depth 2 + # Child Loop BB18_84 Depth 2 + loop # label68: + i32.const $push313=, 0 + i32.const $push312=, 3 + i32.shl $push66=, $6, $pop312 + i32.const $push311=, longlongs + i32.add $push310=, $pop66, $pop311 + tee_local $push309=, $7=, $pop310 + i64.load $push308=, 0($pop309) + tee_local $push307=, $9=, $pop308 + i64.ctz $push67=, $pop307 + i32.wrap/i64 $push306=, $pop67 + tee_local $push305=, $0=, $pop306 + i32.const $push304=, 1 + i32.add $push68=, $pop305, $pop304 + i64.eqz $push303=, $9 + tee_local $push302=, $3=, $pop303 + i32.select $5=, $pop313, $pop68, $pop302 + i32.const $11=, 0 + block + br_if 0, $3 # 0: down to label69 +# BB#62: # %for.body.i1808.preheader + # in Loop: Header=BB18_61 Depth=1 + i32.const $11=, 0 + i64.const $10=, 0 +.LBB18_63: # %for.body.i1808 + # Parent Loop BB18_61 Depth=1 + # => This Inner Loop Header: Depth=2 + block + loop # label71: + i64.const $push315=, 1 + i64.shl $push69=, $pop315, $10 + i64.and $push70=, $pop69, $9 + i64.const $push314=, 0 + i64.ne $push71=, $pop70, $pop314 + br_if 1, $pop71 # 1: down to label70 +# BB#64: # %for.inc.i1812 + # in Loop: Header=BB18_63 Depth=2 + i32.const $push320=, 1 + i32.add $11=, $11, $pop320 + i64.const $push319=, 1 + i64.add $push318=, $10, $pop319 + tee_local $push317=, $10=, $pop318 + i64.const $push316=, 64 + i64.lt_u $push72=, $pop317, $pop316 + br_if 0, $pop72 # 0: up to label71 +.LBB18_65: # %for.end.i1815 + # in Loop: Header=BB18_61 Depth=1 + end_loop + end_block # label70: + i32.const $push321=, 1 + i32.add $11=, $11, $pop321 +.LBB18_66: # %my_ffsll.exit1817 + # in Loop: Header=BB18_61 Depth=1 + end_block # label69: + i32.ne $push73=, $5, $11 + br_if 1, $pop73 # 1: down to label35 +# BB#67: # %if.end100 + # in Loop: Header=BB18_61 Depth=1 + block + br_if 0, $3 # 0: down to label72 +# BB#68: # %land.lhs.true103 + # in Loop: Header=BB18_61 Depth=1 + i64.clz $push74=, $9 + i32.wrap/i64 $3=, $pop74 + i32.const $11=, 0 + i64.const $8=, 0 + i64.const $10=, 63 +.LBB18_69: # %for.body.i1893 + # Parent Loop BB18_61 Depth=1 + # => This Inner Loop Header: Depth=2 + block + loop # label74: + i64.const $push323=, 1 + i64.shl $push75=, $pop323, $10 + i64.and $push76=, $pop75, $9 + i64.const $push322=, 0 + i64.ne $push77=, $pop76, $pop322 + br_if 1, $pop77 # 1: down to label73 +# BB#70: # %for.inc.i1897 + # in Loop: Header=BB18_69 Depth=2 + i64.const $push329=, -1 + i64.add $10=, $10, $pop329 + i32.const $push328=, 1 + i32.add $11=, $11, $pop328 + i64.const $push327=, 1 + i64.add $push326=, $8, $pop327 + tee_local $push325=, $8=, $pop326 + i64.const $push324=, 64 + i64.lt_u $push78=, $pop325, $pop324 + br_if 0, $pop78 # 0: up to label74 +.LBB18_71: # %my_clzll.exit1900 + # in Loop: Header=BB18_61 Depth=1 + end_loop + end_block # label73: + i32.ne $push79=, $11, $3 + br_if 2, $pop79 # 2: down to label35 +# BB#72: # %land.lhs.true113 + # in Loop: Header=BB18_61 Depth=1 + i32.const $11=, 0 + i64.const $10=, 0 +.LBB18_73: # %for.body.i1939 + # Parent Loop BB18_61 Depth=1 + # => This Inner Loop Header: Depth=2 + block + loop # label76: + i64.const $push331=, 1 + i64.shl $push80=, $pop331, $10 + i64.and $push81=, $pop80, $9 + i64.const $push330=, 0 + i64.ne $push82=, $pop81, $pop330 + br_if 1, $pop82 # 1: down to label75 +# BB#74: # %for.inc.i1943 + # in Loop: Header=BB18_73 Depth=2 + i32.const $push336=, 1 + i32.add $11=, $11, $pop336 + i64.const $push335=, 1 + i64.add $push334=, $10, $pop335 + tee_local $push333=, $10=, $pop334 + i64.const $push332=, 64 + i64.lt_u $push83=, $pop333, $pop332 + br_if 0, $pop83 # 0: up to label76 +.LBB18_75: # %my_ctzll.exit1946 + # in Loop: Header=BB18_61 Depth=1 + end_loop + end_block # label75: + i32.ne $push84=, $11, $0 + br_if 2, $pop84 # 2: down to label35 +.LBB18_76: # %if.end120 + # in Loop: Header=BB18_61 Depth=1 + end_block # label72: + i32.call $3=, __builtin_clrsbll@FUNCTION, $9 + i64.load $push339=, 0($7) + tee_local $push338=, $10=, $pop339 + i64.const $push337=, 63 + i64.shr_u $4=, $pop338, $pop337 + i32.const $11=, 1 + i64.const $8=, 1 + i64.const $9=, 62 +.LBB18_77: # %for.body.i2010 + # Parent Loop BB18_61 Depth=1 + # => This Inner Loop Header: Depth=2 + block + loop # label78: + i64.shr_u $push85=, $10, $9 + i64.const $push340=, 1 + i64.and $push86=, $pop85, $pop340 + i64.ne $push87=, $pop86, $4 + br_if 1, $pop87 # 1: down to label77 +# BB#78: # %for.inc.i2014 + # in Loop: Header=BB18_77 Depth=2 + i64.const $push346=, -1 + i64.add $9=, $9, $pop346 + i32.const $push345=, 1 + i32.add $11=, $11, $pop345 + i64.const $push344=, 1 + i64.add $push343=, $8, $pop344 + tee_local $push342=, $8=, $pop343 + i64.const $push341=, 64 + i64.lt_u $push88=, $pop342, $pop341 + br_if 0, $pop88 # 0: up to label78 +.LBB18_79: # %my_clrsbll.exit2018 + # in Loop: Header=BB18_61 Depth=1 + end_loop + end_block # label77: + i32.const $push347=, -1 + i32.add $push89=, $11, $pop347 + i32.ne $push90=, $3, $pop89 + br_if 1, $pop90 # 1: down to label35 +# BB#80: # %if.end127 + # in Loop: Header=BB18_61 Depth=1 + i64.popcnt $8=, $10 + i32.const $11=, 0 + i64.const $9=, 0 +.LBB18_81: # %for.body.i2103 + # Parent Loop BB18_61 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label79: + i64.const $push353=, 1 + i64.shl $push91=, $pop353, $9 + i64.and $push92=, $pop91, $10 + i64.const $push352=, 0 + i64.ne $push93=, $pop92, $pop352 + i32.add $11=, $11, $pop93 + i64.const $push351=, 1 + i64.add $push350=, $9, $pop351 + tee_local $push349=, $9=, $pop350 + i64.const $push348=, 64 + i64.ne $push94=, $pop349, $pop348 + br_if 0, $pop94 # 0: up to label79 +# BB#82: # %my_popcountll.exit2105 + # in Loop: Header=BB18_61 Depth=1 + end_loop + i32.wrap/i64 $push95=, $8 + i32.ne $push96=, $11, $pop95 + br_if 1, $pop96 # 1: down to label35 +# BB#83: # %for.body.i2190.preheader + # in Loop: Header=BB18_61 Depth=1 + i32.const $3=, 0 + i64.const $9=, 0 +.LBB18_84: # %for.body.i2190 + # Parent Loop BB18_61 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label80: + i64.const $push359=, 1 + i64.shl $push97=, $pop359, $9 + i64.and $push98=, $pop97, $10 + i64.const $push358=, 0 + i64.ne $push99=, $pop98, $pop358 + i32.add $3=, $3, $pop99 + i64.const $push357=, 1 + i64.add $push356=, $9, $pop357 + tee_local $push355=, $9=, $pop356 + i64.const $push354=, 64 + i64.ne $push100=, $pop355, $pop354 + br_if 0, $pop100 # 0: up to label80 +# BB#85: # %my_parityll.exit2193 + # in Loop: Header=BB18_61 Depth=1 + end_loop + i32.xor $push101=, $3, $11 + i32.const $push360=, 1 + i32.and $push102=, $pop101, $pop360 + br_if 1, $pop102 # 1: down to label35 +# BB#86: # %for.cond90 + # in Loop: Header=BB18_61 Depth=1 + i32.const $push364=, 1 + i32.add $push363=, $6, $pop364 + tee_local $push362=, $6=, $pop363 + i32.const $push361=, 12 + i32.le_u $push103=, $pop362, $pop361 + br_if 0, $pop103 # 0: up to label68 +# BB#87: # %if.end148 + end_loop + i32.const $push104=, 0 + i32.call $push105=, __builtin_clrsb@FUNCTION, $pop104 + i32.const $push106=, 31 + i32.ne $push107=, $pop105, $pop106 + br_if 0, $pop107 # 0: down to label35 +# BB#88: # %my_clrsb.exit2772 + i32.const $push108=, 1 + i32.call $push109=, __builtin_clrsb@FUNCTION, $pop108 + i32.const $push110=, 30 + i32.ne $push111=, $pop109, $pop110 + br_if 0, $pop111 # 0: down to label35 +# BB#89: # %if.end198 + i32.const $push112=, -2147483648 + i32.call $push113=, __builtin_clrsb@FUNCTION, $pop112 + br_if 0, $pop113 # 0: down to label35 +# BB#90: # %my_clrsb.exit2596 + i32.const $push114=, 1073741824 + i32.call $push115=, __builtin_clrsb@FUNCTION, $pop114 + br_if 0, $pop115 # 0: down to label35 +# BB#91: # %my_clrsb.exit2512 + i32.const $push116=, 65536 + i32.call $push117=, __builtin_clrsb@FUNCTION, $pop116 + i32.const $push118=, 14 + i32.ne $push119=, $pop117, $pop118 + br_if 0, $pop119 # 0: down to label35 +# BB#92: # %my_clrsb.exit2429 + i32.const $push120=, 32768 + i32.call $push121=, __builtin_clrsb@FUNCTION, $pop120 + i32.const $push122=, 15 + i32.ne $push123=, $pop121, $pop122 + br_if 0, $pop123 # 0: down to label35 +# BB#93: # %my_clrsb.exit2344 + i32.const $push124=, -1515870811 + i32.call $push125=, __builtin_clrsb@FUNCTION, $pop124 + br_if 0, $pop125 # 0: down to label35 +# BB#94: # %my_clrsb.exit2268 + i32.const $push126=, 1515870810 + i32.call $push127=, __builtin_clrsb@FUNCTION, $pop126 + br_if 0, $pop127 # 0: down to label35 +# BB#95: # %if.end348 + i32.const $push128=, -889323520 + i32.call $push129=, __builtin_clrsb@FUNCTION, $pop128 + i32.const $push130=, 1 + i32.ne $push131=, $pop129, $pop130 + br_if 0, $pop131 # 0: down to label35 +# BB#96: # %if.end373 + i32.const $push132=, 13303296 + i32.call $push133=, __builtin_clrsb@FUNCTION, $pop132 + i32.const $push134=, 7 + i32.ne $push135=, $pop133, $pop134 + br_if 0, $pop135 # 0: down to label35 +# BB#97: # %if.end398 + i32.const $push136=, 51966 + i32.call $push137=, __builtin_clrsb@FUNCTION, $pop136 + i32.const $push138=, 15 + i32.ne $push139=, $pop137, $pop138 + br_if 0, $pop139 # 0: down to label35 +# BB#98: # %if.end423 + i32.const $push365=, -1 + i32.call $7=, __builtin_clrsb@FUNCTION, $pop365 + i32.const $11=, 30 + i32.const $3=, 1 +.LBB18_99: # %for.body.i1926 + # =>This Inner Loop Header: Depth=1 + block + block + loop # label83: + i32.const $push367=, -1 + i32.shr_u $push140=, $pop367, $11 + i32.const $push366=, 1 + i32.and $push141=, $pop140, $pop366 + i32.eqz $push386=, $pop141 + br_if 1, $pop386 # 1: down to label82 +# BB#100: # %for.inc.i1929 + # in Loop: Header=BB18_99 Depth=1 + i32.const $push372=, -1 + i32.add $11=, $11, $pop372 + i32.const $6=, 32 + i32.const $push371=, 1 + i32.add $push370=, $3, $pop371 + tee_local $push369=, $3=, $pop370 + i32.const $push368=, 32 + i32.lt_u $push142=, $pop369, $pop368 + br_if 0, $pop142 # 0: up to label83 + br 2 # 2: down to label81 +.LBB18_101: + end_loop + end_block # label82: + copy_local $6=, $3 +.LBB18_102: # %my_clrsb.exit1933 + end_block # label81: + i32.const $push143=, -1 + i32.add $push144=, $6, $pop143 + i32.ne $push145=, $7, $pop144 + br_if 0, $pop145 # 0: down to label35 +# BB#103: # %if.end440 + i64.const $push146=, 0 + i32.call $push147=, __builtin_clrsbll@FUNCTION, $pop146 + i32.const $push148=, 63 + i32.ne $push149=, $pop147, $pop148 + br_if 0, $pop149 # 0: down to label35 +# BB#104: # %for.body.i1836 + i64.const $push150=, 1 + i32.call $push151=, __builtin_clrsbll@FUNCTION, $pop150 + i32.const $push152=, 62 + i32.ne $push153=, $pop151, $pop152 + br_if 0, $pop153 # 0: down to label35 +# BB#105: # %for.body.i1725 + i64.const $push154=, -9223372036854775808 + i32.call $push155=, __builtin_clrsbll@FUNCTION, $pop154 + br_if 0, $pop155 # 0: down to label35 +# BB#106: # %for.body.i1632 + i64.const $push156=, 2 + i32.call $push157=, __builtin_clrsbll@FUNCTION, $pop156 + i32.const $push158=, 61 + i32.ne $push159=, $pop157, $pop158 + br_if 0, $pop159 # 0: down to label35 +# BB#107: # %for.body.i1540 + i64.const $push160=, 4611686018427387904 + i32.call $push161=, __builtin_clrsbll@FUNCTION, $pop160 + br_if 0, $pop161 # 0: down to label35 +# BB#108: # %for.body.i1446 + i64.const $push162=, 4294967296 + i32.call $push163=, __builtin_clrsbll@FUNCTION, $pop162 + i32.const $push164=, 30 + i32.ne $push165=, $pop163, $pop164 + br_if 0, $pop165 # 0: down to label35 +# BB#109: # %for.body.i1355 + i64.const $push166=, 2147483648 + i32.call $push167=, __builtin_clrsbll@FUNCTION, $pop166 + i32.const $push168=, 31 + i32.ne $push169=, $pop167, $pop168 + br_if 0, $pop169 # 0: down to label35 +# BB#110: # %my_clrsbll.exit1243 + i64.const $push170=, -6510615555426900571 + i32.call $push171=, __builtin_clrsbll@FUNCTION, $pop170 + br_if 0, $pop171 # 0: down to label35 +# BB#111: # %my_clrsbll.exit1151 + i64.const $push172=, 6510615555426900570 + i32.call $push173=, __builtin_clrsbll@FUNCTION, $pop172 + br_if 0, $pop173 # 0: down to label35 +# BB#112: # %if.end665 + i64.const $push174=, -3819392241693097984 + i32.call $push175=, __builtin_clrsbll@FUNCTION, $pop174 + i32.const $push176=, 1 + i32.ne $push177=, $pop175, $pop176 + br_if 0, $pop177 # 0: down to label35 +# BB#113: # %if.end690 + i64.const $push178=, 223195676147712 + i32.call $push179=, __builtin_clrsbll@FUNCTION, $pop178 + i32.const $push180=, 15 + i32.ne $push181=, $pop179, $pop180 + br_if 0, $pop181 # 0: down to label35 +# BB#114: # %if.end715 + i64.const $push182=, 3405695742 + i32.call $push183=, __builtin_clrsbll@FUNCTION, $pop182 + i32.const $push184=, 31 + i32.ne $push185=, $pop183, $pop184 + br_if 0, $pop185 # 0: down to label35 +# BB#115: # %if.end740 + i64.const $push373=, -1 + i32.call $3=, __builtin_clrsbll@FUNCTION, $pop373 + i64.const $9=, 62 + i64.const $10=, 1 + i32.const $11=, 1 +.LBB18_116: # %for.body.i812 + # =>This Inner Loop Header: Depth=1 + block + loop # label85: + i64.const $push375=, -1 + i64.shr_u $push186=, $pop375, $9 + i64.const $push374=, 1 + i64.and $push187=, $pop186, $pop374 + i64.eqz $push188=, $pop187 + br_if 1, $pop188 # 1: down to label84 +# BB#117: # %for.inc.i816 + # in Loop: Header=BB18_116 Depth=1 + i64.const $push381=, -1 + i64.add $9=, $9, $pop381 + i32.const $push380=, 1 + i32.add $11=, $11, $pop380 + i64.const $push379=, 1 + i64.add $push378=, $10, $pop379 + tee_local $push377=, $10=, $pop378 + i64.const $push376=, 64 + i64.lt_u $push189=, $pop377, $pop376 + br_if 0, $pop189 # 0: up to label85 +.LBB18_118: # %my_clrsbll.exit + end_loop + end_block # label84: + i32.const $push190=, -1 + i32.add $push191=, $11, $pop190 + i32.ne $push192=, $3, $pop191 + br_if 0, $pop192 # 0: down to label35 +# BB#119: # %if.end753 + i32.const $push193=, 0 + call exit@FUNCTION, $pop193 + unreachable +.LBB18_120: # %if.then + end_block # label35: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end18: + .size main, .Lfunc_end18-main + # -- End function + .hidden ints # @ints + .type ints,@object + .section .data.ints,"aw",@progbits + .globl ints + .p2align 4 +ints: + .int32 0 # 0x0 + .int32 1 # 0x1 + .int32 2147483648 # 0x80000000 + .int32 2 # 0x2 + .int32 1073741824 # 0x40000000 + .int32 65536 # 0x10000 + .int32 32768 # 0x8000 + .int32 2779096485 # 0xa5a5a5a5 + .int32 1515870810 # 0x5a5a5a5a + .int32 3405643776 # 0xcafe0000 + .int32 13303296 # 0xcafe00 + .int32 51966 # 0xcafe + .int32 4294967295 # 0xffffffff + .size ints, 52 + + .hidden longs # @longs + .type longs,@object + .section .data.longs,"aw",@progbits + .globl longs + .p2align 4 +longs: + .int32 0 # 0x0 + .int32 1 # 0x1 + .int32 2147483648 # 0x80000000 + .int32 2 # 0x2 + .int32 1073741824 # 0x40000000 + .int32 65536 # 0x10000 + .int32 32768 # 0x8000 + .int32 2779096485 # 0xa5a5a5a5 + .int32 1515870810 # 0x5a5a5a5a + .int32 3405643776 # 0xcafe0000 + .int32 13303296 # 0xcafe00 + .int32 51966 # 0xcafe + .int32 4294967295 # 0xffffffff + .size longs, 52 + + .hidden longlongs # @longlongs + .type longlongs,@object + .section .data.longlongs,"aw",@progbits + .globl longlongs + .p2align 4 +longlongs: + .int64 0 # 0x0 + .int64 1 # 0x1 + .int64 -9223372036854775808 # 0x8000000000000000 + .int64 2 # 0x2 + .int64 4611686018427387904 # 0x4000000000000000 + .int64 4294967296 # 0x100000000 + .int64 2147483648 # 0x80000000 + .int64 -6510615555426900571 # 0xa5a5a5a5a5a5a5a5 + .int64 6510615555426900570 # 0x5a5a5a5a5a5a5a5a + .int64 -3819392241693097984 # 0xcafecafe00000000 + .int64 223195676147712 # 0xcafecafe0000 + .int64 3405695742 # 0xcafecafe + .int64 -1 # 0xffffffffffffffff + .size longlongs, 104 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype __builtin_clrsb, i32 + .functype __builtin_clrsbl, i32 + .functype __builtin_clrsbll, i32 + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/builtin-constant.c.s b/src/binaryen/test/torture-s/builtin-constant.c.s new file mode 100644 index 0000000000..24be5e3a81 --- /dev/null +++ b/src/binaryen/test/torture-s/builtin-constant.c.s @@ -0,0 +1,52 @@ + .text + .file "builtin-constant.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.load8_u $push0=, 0($0) + i32.const $push1=, 48 + i32.eq $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, .L.str + call foo@FUNCTION, $pop0 + i32.const $push2=, .L.str + call foo@FUNCTION, $pop2 + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "0" + .size .L.str, 2 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/builtin-prefetch-1.c.s b/src/binaryen/test/torture-s/builtin-prefetch-1.c.s new file mode 100644 index 0000000000..b636c46e67 --- /dev/null +++ b/src/binaryen/test/torture-s/builtin-prefetch-1.c.s @@ -0,0 +1,80 @@ + .text + .file "builtin-prefetch-1.c" + .section .text.good_const,"ax",@progbits + .hidden good_const # -- Begin function good_const + .globl good_const + .type good_const,@function +good_const: # @good_const + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size good_const, .Lfunc_end0-good_const + # -- End function + .section .text.good_enum,"ax",@progbits + .hidden good_enum # -- Begin function good_enum + .globl good_enum + .type good_enum,@function +good_enum: # @good_enum + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end1: + .size good_enum, .Lfunc_end1-good_enum + # -- End function + .section .text.good_expr,"ax",@progbits + .hidden good_expr # -- Begin function good_expr + .globl good_expr + .type good_expr,@function +good_expr: # @good_expr + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end2: + .size good_expr, .Lfunc_end2-good_expr + # -- End function + .section .text.good_vararg,"ax",@progbits + .hidden good_vararg # -- Begin function good_vararg + .globl good_vararg + .type good_vararg,@function +good_vararg: # @good_vararg + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end3: + .size good_vararg, .Lfunc_end3-good_vararg + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, arr + call good_const@FUNCTION, $pop0 + i32.const $push2=, arr + call good_enum@FUNCTION, $pop2 + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + .hidden arr # @arr + .type arr,@object + .section .bss.arr,"aw",@nobits + .globl arr + .p2align 4 +arr: + .skip 40 + .size arr, 40 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/builtin-prefetch-2.c.s b/src/binaryen/test/torture-s/builtin-prefetch-2.c.s new file mode 100644 index 0000000000..0099a7ec87 --- /dev/null +++ b/src/binaryen/test/torture-s/builtin-prefetch-2.c.s @@ -0,0 +1,207 @@ + .text + .file "builtin-prefetch-2.c" + .section .text.simple_global,"ax",@progbits + .hidden simple_global # -- Begin function simple_global + .globl simple_global + .type simple_global,@function +simple_global: # @simple_global +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size simple_global, .Lfunc_end0-simple_global + # -- End function + .section .text.simple_file,"ax",@progbits + .hidden simple_file # -- Begin function simple_file + .globl simple_file + .type simple_file,@function +simple_file: # @simple_file +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end1: + .size simple_file, .Lfunc_end1-simple_file + # -- End function + .section .text.simple_static_local,"ax",@progbits + .hidden simple_static_local # -- Begin function simple_static_local + .globl simple_static_local + .type simple_static_local,@function +simple_static_local: # @simple_static_local +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end2: + .size simple_static_local, .Lfunc_end2-simple_static_local + # -- End function + .section .text.simple_local,"ax",@progbits + .hidden simple_local # -- Begin function simple_local + .globl simple_local + .type simple_local,@function +simple_local: # @simple_local + .local i32 +# BB#0: # %entry + i32.const $push3=, 0 + i32.const $push1=, 0 + i32.load $push0=, __stack_pointer($pop1) + i32.const $push2=, 416 + i32.sub $push8=, $pop0, $pop2 + tee_local $push7=, $0=, $pop8 + i32.store __stack_pointer($pop3), $pop7 + i32.const $push6=, 0 + i32.const $push4=, 416 + i32.add $push5=, $0, $pop4 + i32.store __stack_pointer($pop6), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end3: + .size simple_local, .Lfunc_end3-simple_local + # -- End function + .section .text.simple_arg,"ax",@progbits + .hidden simple_arg # -- Begin function simple_arg + .globl simple_arg + .type simple_arg,@function +simple_arg: # @simple_arg + .param i32, i32, i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.load $push0=, __stack_pointer($pop1) + i32.const $push2=, 16 + i32.sub $push3=, $pop0, $pop2 + i32.store 12($pop3), $2 + # fallthrough-return + .endfunc +.Lfunc_end4: + .size simple_arg, .Lfunc_end4-simple_arg + # -- End function + .section .text.expr_global,"ax",@progbits + .hidden expr_global # -- Begin function expr_global + .globl expr_global + .type expr_global,@function +expr_global: # @expr_global +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end5: + .size expr_global, .Lfunc_end5-expr_global + # -- End function + .section .text.expr_local,"ax",@progbits + .hidden expr_local # -- Begin function expr_local + .globl expr_local + .type expr_local,@function +expr_local: # @expr_local +# BB#0: # %entry + i32.const $push1=, 0 + i32.load $push0=, __stack_pointer($pop1) + i32.const $push2=, 80 + i32.sub $drop=, $pop0, $pop2 + # fallthrough-return + .endfunc +.Lfunc_end6: + .size expr_local, .Lfunc_end6-expr_local + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 416 + i32.sub $push10=, $pop3, $pop5 + tee_local $push9=, $0=, $pop10 + i32.store __stack_pointer($pop6), $pop9 + i32.const $push0=, 0 + i32.load $push1=, glob_int($pop0) + i32.store 8($0), $pop1 + i32.const $push8=, 0 + i32.const $push2=, str + i32.store str+16($pop8), $pop2 + call expr_global@FUNCTION + call expr_local@FUNCTION + i32.const $push7=, 0 + call exit@FUNCTION, $pop7 + unreachable + .endfunc +.Lfunc_end7: + .size main, .Lfunc_end7-main + # -- End function + .hidden glob_int_arr # @glob_int_arr + .type glob_int_arr,@object + .section .bss.glob_int_arr,"aw",@nobits + .globl glob_int_arr + .p2align 4 +glob_int_arr: + .skip 400 + .size glob_int_arr, 400 + + .hidden glob_ptr_int # @glob_ptr_int + .type glob_ptr_int,@object + .section .data.glob_ptr_int,"aw",@progbits + .globl glob_ptr_int + .p2align 2 +glob_ptr_int: + .int32 glob_int_arr + .size glob_ptr_int, 4 + + .hidden glob_int # @glob_int + .type glob_int,@object + .section .data.glob_int,"aw",@progbits + .globl glob_int + .p2align 2 +glob_int: + .int32 4 # 0x4 + .size glob_int, 4 + + .hidden str # @str + .type str,@object + .section .bss.str,"aw",@nobits + .globl str + .p2align 2 +str: + .skip 20 + .size str, 20 + + .hidden ptr_str # @ptr_str + .type ptr_str,@object + .section .data.ptr_str,"aw",@progbits + .globl ptr_str + .p2align 2 +ptr_str: + .int32 str + .size ptr_str, 4 + + .type stat_int_arr,@object # @stat_int_arr + .section .bss.stat_int_arr,"aw",@nobits + .p2align 4 +stat_int_arr: + .skip 400 + .size stat_int_arr, 400 + + .type stat_int,@object # @stat_int + .section .bss.stat_int,"aw",@nobits + .p2align 2 +stat_int: + .int32 0 # 0x0 + .size stat_int, 4 + + .type simple_static_local.gx,@object # @simple_static_local.gx + .section .bss.simple_static_local.gx,"aw",@nobits + .p2align 4 +simple_static_local.gx: + .skip 400 + .size simple_static_local.gx, 400 + + .type simple_static_local.ix,@object # @simple_static_local.ix + .section .bss.simple_static_local.ix,"aw",@nobits + .p2align 2 +simple_static_local.ix: + .int32 0 # 0x0 + .size simple_static_local.ix, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/builtin-prefetch-3.c.s b/src/binaryen/test/torture-s/builtin-prefetch-3.c.s new file mode 100644 index 0000000000..c76f2428eb --- /dev/null +++ b/src/binaryen/test/torture-s/builtin-prefetch-3.c.s @@ -0,0 +1,268 @@ + .text + .file "builtin-prefetch-3.c" + .section .text.simple_vol_global,"ax",@progbits + .hidden simple_vol_global # -- Begin function simple_vol_global + .globl simple_vol_global + .type simple_vol_global,@function +simple_vol_global: # @simple_vol_global +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $drop=, glob_vol_ptr_int($pop0) + i32.const $push1=, 0 + i32.load $drop=, glob_vol_ptr_vol_int($pop1) + # fallthrough-return + .endfunc +.Lfunc_end0: + .size simple_vol_global, .Lfunc_end0-simple_vol_global + # -- End function + .section .text.simple_vol_file,"ax",@progbits + .hidden simple_vol_file # -- Begin function simple_vol_file + .globl simple_vol_file + .type simple_vol_file,@function +simple_vol_file: # @simple_vol_file +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $drop=, stat_vol_ptr_int($pop0) + i32.const $push1=, 0 + i32.load $drop=, stat_vol_ptr_vol_int($pop1) + # fallthrough-return + .endfunc +.Lfunc_end1: + .size simple_vol_file, .Lfunc_end1-simple_vol_file + # -- End function + .section .text.expr_vol_global,"ax",@progbits + .hidden expr_vol_global # -- Begin function expr_vol_global + .globl expr_vol_global + .type expr_vol_global,@function +expr_vol_global: # @expr_vol_global + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $drop=, vol_ptr_str($pop0) + i32.const $push28=, 0 + i32.load $drop=, vol_ptr_vol_str($pop28) + i32.const $push27=, 0 + i32.load $drop=, vol_ptr_str($pop27) + i32.const $push26=, 0 + i32.load $drop=, vol_ptr_vol_str($pop26) + i32.const $push25=, 0 + i32.load $drop=, vol_ptr_str($pop25) + i32.const $push24=, 0 + i32.load $drop=, vol_ptr_vol_str($pop24) + i32.const $push23=, 0 + i32.load $drop=, vol_str+16($pop23) + i32.const $push22=, 0 + i32.load $drop=, vol_ptr_str($pop22) + i32.const $push21=, 0 + i32.load $push20=, ptr_vol_str($pop21) + tee_local $push19=, $0=, $pop20 + i32.load $drop=, 16($pop19) + i32.const $push18=, 0 + i32.load $push1=, vol_ptr_vol_str($pop18) + i32.load $drop=, 16($pop1) + i32.const $push17=, 0 + i32.load $drop=, vol_str+16($pop17) + i32.const $push16=, 0 + i32.load $drop=, vol_ptr_str($pop16) + i32.load $drop=, 16($0) + i32.const $push15=, 0 + i32.load $push2=, vol_ptr_vol_str($pop15) + i32.load $drop=, 16($pop2) + i32.const $push14=, 0 + i32.load $drop=, glob_vol_ptr_int($pop14) + i32.const $push13=, 0 + i32.load $drop=, glob_vol_ptr_vol_int($pop13) + i32.const $push12=, 0 + i32.load $drop=, glob_vol_ptr_int($pop12) + i32.const $push11=, 0 + i32.load $drop=, glob_vol_ptr_vol_int($pop11) + i32.const $push10=, 0 + i32.load $drop=, glob_vol_int($pop10) + i32.const $push9=, 0 + i32.load $drop=, glob_vol_ptr_int($pop9) + i32.const $push8=, 0 + i32.load $drop=, glob_vol_ptr_vol_int($pop8) + i32.const $push7=, 0 + i32.load $drop=, glob_vol_ptr_int($pop7) + i32.const $push6=, 0 + i32.load $drop=, glob_vol_int($pop6) + i32.const $push5=, 0 + i32.load $drop=, glob_vol_int($pop5) + i32.const $push4=, 0 + i32.load $drop=, glob_vol_ptr_vol_int($pop4) + i32.const $push3=, 0 + i32.load $drop=, glob_vol_int($pop3) + # fallthrough-return + .endfunc +.Lfunc_end2: + .size expr_vol_global, .Lfunc_end2-expr_vol_global + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call simple_vol_global@FUNCTION + call simple_vol_file@FUNCTION + i32.const $push1=, 0 + i32.const $push0=, str + i32.store vol_str+16($pop1), $pop0 + i32.const $push4=, 0 + i32.const $push3=, str + i32.store str+16($pop4), $pop3 + call expr_vol_global@FUNCTION + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden glob_int # @glob_int + .type glob_int,@object + .section .data.glob_int,"aw",@progbits + .globl glob_int + .p2align 2 +glob_int: + .int32 4 # 0x4 + .size glob_int, 4 + + .hidden glob_int_arr # @glob_int_arr + .type glob_int_arr,@object + .section .bss.glob_int_arr,"aw",@nobits + .globl glob_int_arr + .p2align 4 +glob_int_arr: + .skip 400 + .size glob_int_arr, 400 + + .hidden glob_vol_ptr_int # @glob_vol_ptr_int + .type glob_vol_ptr_int,@object + .section .data.glob_vol_ptr_int,"aw",@progbits + .globl glob_vol_ptr_int + .p2align 2 +glob_vol_ptr_int: + .int32 glob_int_arr + .size glob_vol_ptr_int, 4 + + .hidden glob_vol_int_arr # @glob_vol_int_arr + .type glob_vol_int_arr,@object + .section .bss.glob_vol_int_arr,"aw",@nobits + .globl glob_vol_int_arr + .p2align 4 +glob_vol_int_arr: + .skip 400 + .size glob_vol_int_arr, 400 + + .hidden glob_ptr_vol_int # @glob_ptr_vol_int + .type glob_ptr_vol_int,@object + .section .data.glob_ptr_vol_int,"aw",@progbits + .globl glob_ptr_vol_int + .p2align 2 +glob_ptr_vol_int: + .int32 glob_vol_int_arr + .size glob_ptr_vol_int, 4 + + .hidden glob_vol_ptr_vol_int # @glob_vol_ptr_vol_int + .type glob_vol_ptr_vol_int,@object + .section .data.glob_vol_ptr_vol_int,"aw",@progbits + .globl glob_vol_ptr_vol_int + .p2align 2 +glob_vol_ptr_vol_int: + .int32 glob_vol_int_arr + .size glob_vol_ptr_vol_int, 4 + + .hidden str # @str + .type str,@object + .section .bss.str,"aw",@nobits + .globl str + .p2align 2 +str: + .skip 20 + .size str, 20 + + .hidden vol_ptr_str # @vol_ptr_str + .type vol_ptr_str,@object + .section .data.vol_ptr_str,"aw",@progbits + .globl vol_ptr_str + .p2align 2 +vol_ptr_str: + .int32 str + .size vol_ptr_str, 4 + + .hidden vol_str # @vol_str + .type vol_str,@object + .section .bss.vol_str,"aw",@nobits + .globl vol_str + .p2align 2 +vol_str: + .skip 20 + .size vol_str, 20 + + .hidden ptr_vol_str # @ptr_vol_str + .type ptr_vol_str,@object + .section .data.ptr_vol_str,"aw",@progbits + .globl ptr_vol_str + .p2align 2 +ptr_vol_str: + .int32 vol_str + .size ptr_vol_str, 4 + + .hidden vol_ptr_vol_str # @vol_ptr_vol_str + .type vol_ptr_vol_str,@object + .section .data.vol_ptr_vol_str,"aw",@progbits + .globl vol_ptr_vol_str + .p2align 2 +vol_ptr_vol_str: + .int32 vol_str + .size vol_ptr_vol_str, 4 + + .hidden glob_vol_int # @glob_vol_int + .type glob_vol_int,@object + .section .bss.glob_vol_int,"aw",@nobits + .globl glob_vol_int + .p2align 2 +glob_vol_int: + .int32 0 # 0x0 + .size glob_vol_int, 4 + + .type stat_vol_int_arr,@object # @stat_vol_int_arr + .section .bss.stat_vol_int_arr,"aw",@nobits + .p2align 4 +stat_vol_int_arr: + .skip 400 + .size stat_vol_int_arr, 400 + + .type stat_vol_ptr_int,@object # @stat_vol_ptr_int + .section .data.stat_vol_ptr_int,"aw",@progbits + .p2align 2 +stat_vol_ptr_int: + .int32 stat_int_arr + .size stat_vol_ptr_int, 4 + + .type stat_vol_ptr_vol_int,@object # @stat_vol_ptr_vol_int + .section .data.stat_vol_ptr_vol_int,"aw",@progbits + .p2align 2 +stat_vol_ptr_vol_int: + .int32 stat_vol_int_arr + .size stat_vol_ptr_vol_int, 4 + + .type stat_vol_int,@object # @stat_vol_int + .section .bss.stat_vol_int,"aw",@nobits + .p2align 2 +stat_vol_int: + .int32 0 # 0x0 + .size stat_vol_int, 4 + + .type stat_int_arr,@object # @stat_int_arr + .section .bss.stat_int_arr,"aw",@nobits + .p2align 4 +stat_int_arr: + .skip 400 + .size stat_int_arr, 400 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/builtin-prefetch-4.c.s b/src/binaryen/test/torture-s/builtin-prefetch-4.c.s new file mode 100644 index 0000000000..aa96f7be78 --- /dev/null +++ b/src/binaryen/test/torture-s/builtin-prefetch-4.c.s @@ -0,0 +1,493 @@ + .text + .file "builtin-prefetch-4.c" + .section .text.assign_arg_ptr,"ax",@progbits + .hidden assign_arg_ptr # -- Begin function assign_arg_ptr + .globl assign_arg_ptr + .type assign_arg_ptr,@function +assign_arg_ptr: # @assign_arg_ptr + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size assign_arg_ptr, .Lfunc_end0-assign_arg_ptr + # -- End function + .section .text.assign_glob_ptr,"ax",@progbits + .hidden assign_glob_ptr # -- Begin function assign_glob_ptr + .globl assign_glob_ptr + .type assign_glob_ptr,@function +assign_glob_ptr: # @assign_glob_ptr + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size assign_glob_ptr, .Lfunc_end1-assign_glob_ptr + # -- End function + .section .text.assign_arg_idx,"ax",@progbits + .hidden assign_arg_idx # -- Begin function assign_arg_idx + .globl assign_arg_idx + .type assign_arg_idx,@function +assign_arg_idx: # @assign_arg_idx + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size assign_arg_idx, .Lfunc_end2-assign_arg_idx + # -- End function + .section .text.assign_glob_idx,"ax",@progbits + .hidden assign_glob_idx # -- Begin function assign_glob_idx + .globl assign_glob_idx + .type assign_glob_idx,@function +assign_glob_idx: # @assign_glob_idx + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size assign_glob_idx, .Lfunc_end3-assign_glob_idx + # -- End function + .section .text.preinc_arg_ptr,"ax",@progbits + .hidden preinc_arg_ptr # -- Begin function preinc_arg_ptr + .globl preinc_arg_ptr + .type preinc_arg_ptr,@function +preinc_arg_ptr: # @preinc_arg_ptr + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size preinc_arg_ptr, .Lfunc_end4-preinc_arg_ptr + # -- End function + .section .text.preinc_glob_ptr,"ax",@progbits + .hidden preinc_glob_ptr # -- Begin function preinc_glob_ptr + .globl preinc_glob_ptr + .type preinc_glob_ptr,@function +preinc_glob_ptr: # @preinc_glob_ptr + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load $push1=, ptr($pop5) + i32.const $push2=, 4 + i32.add $push3=, $pop1, $pop2 + i32.store ptr($pop0), $pop3 + i32.const $push4=, 1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end5: + .size preinc_glob_ptr, .Lfunc_end5-preinc_glob_ptr + # -- End function + .section .text.postinc_arg_ptr,"ax",@progbits + .hidden postinc_arg_ptr # -- Begin function postinc_arg_ptr + .globl postinc_arg_ptr + .type postinc_arg_ptr,@function +postinc_arg_ptr: # @postinc_arg_ptr + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end6: + .size postinc_arg_ptr, .Lfunc_end6-postinc_arg_ptr + # -- End function + .section .text.postinc_glob_ptr,"ax",@progbits + .hidden postinc_glob_ptr # -- Begin function postinc_glob_ptr + .globl postinc_glob_ptr + .type postinc_glob_ptr,@function +postinc_glob_ptr: # @postinc_glob_ptr + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load $push1=, ptr($pop5) + i32.const $push2=, 4 + i32.add $push3=, $pop1, $pop2 + i32.store ptr($pop0), $pop3 + i32.const $push4=, 1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end7: + .size postinc_glob_ptr, .Lfunc_end7-postinc_glob_ptr + # -- End function + .section .text.predec_arg_ptr,"ax",@progbits + .hidden predec_arg_ptr # -- Begin function predec_arg_ptr + .globl predec_arg_ptr + .type predec_arg_ptr,@function +predec_arg_ptr: # @predec_arg_ptr + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end8: + .size predec_arg_ptr, .Lfunc_end8-predec_arg_ptr + # -- End function + .section .text.predec_glob_ptr,"ax",@progbits + .hidden predec_glob_ptr # -- Begin function predec_glob_ptr + .globl predec_glob_ptr + .type predec_glob_ptr,@function +predec_glob_ptr: # @predec_glob_ptr + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load $push1=, ptr($pop5) + i32.const $push2=, -4 + i32.add $push3=, $pop1, $pop2 + i32.store ptr($pop0), $pop3 + i32.const $push4=, 1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end9: + .size predec_glob_ptr, .Lfunc_end9-predec_glob_ptr + # -- End function + .section .text.postdec_arg_ptr,"ax",@progbits + .hidden postdec_arg_ptr # -- Begin function postdec_arg_ptr + .globl postdec_arg_ptr + .type postdec_arg_ptr,@function +postdec_arg_ptr: # @postdec_arg_ptr + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end10: + .size postdec_arg_ptr, .Lfunc_end10-postdec_arg_ptr + # -- End function + .section .text.postdec_glob_ptr,"ax",@progbits + .hidden postdec_glob_ptr # -- Begin function postdec_glob_ptr + .globl postdec_glob_ptr + .type postdec_glob_ptr,@function +postdec_glob_ptr: # @postdec_glob_ptr + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load $push1=, ptr($pop5) + i32.const $push2=, -4 + i32.add $push3=, $pop1, $pop2 + i32.store ptr($pop0), $pop3 + i32.const $push4=, 1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end11: + .size postdec_glob_ptr, .Lfunc_end11-postdec_glob_ptr + # -- End function + .section .text.preinc_arg_idx,"ax",@progbits + .hidden preinc_arg_idx # -- Begin function preinc_arg_idx + .globl preinc_arg_idx + .type preinc_arg_idx,@function +preinc_arg_idx: # @preinc_arg_idx + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end12: + .size preinc_arg_idx, .Lfunc_end12-preinc_arg_idx + # -- End function + .section .text.preinc_glob_idx,"ax",@progbits + .hidden preinc_glob_idx # -- Begin function preinc_glob_idx + .globl preinc_glob_idx + .type preinc_glob_idx,@function +preinc_glob_idx: # @preinc_glob_idx + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load $push1=, arrindex($pop5) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store arrindex($pop0), $pop3 + i32.const $push4=, 1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end13: + .size preinc_glob_idx, .Lfunc_end13-preinc_glob_idx + # -- End function + .section .text.postinc_arg_idx,"ax",@progbits + .hidden postinc_arg_idx # -- Begin function postinc_arg_idx + .globl postinc_arg_idx + .type postinc_arg_idx,@function +postinc_arg_idx: # @postinc_arg_idx + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end14: + .size postinc_arg_idx, .Lfunc_end14-postinc_arg_idx + # -- End function + .section .text.postinc_glob_idx,"ax",@progbits + .hidden postinc_glob_idx # -- Begin function postinc_glob_idx + .globl postinc_glob_idx + .type postinc_glob_idx,@function +postinc_glob_idx: # @postinc_glob_idx + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load $push1=, arrindex($pop5) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store arrindex($pop0), $pop3 + i32.const $push4=, 1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end15: + .size postinc_glob_idx, .Lfunc_end15-postinc_glob_idx + # -- End function + .section .text.predec_arg_idx,"ax",@progbits + .hidden predec_arg_idx # -- Begin function predec_arg_idx + .globl predec_arg_idx + .type predec_arg_idx,@function +predec_arg_idx: # @predec_arg_idx + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end16: + .size predec_arg_idx, .Lfunc_end16-predec_arg_idx + # -- End function + .section .text.predec_glob_idx,"ax",@progbits + .hidden predec_glob_idx # -- Begin function predec_glob_idx + .globl predec_glob_idx + .type predec_glob_idx,@function +predec_glob_idx: # @predec_glob_idx + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load $push1=, arrindex($pop5) + i32.const $push2=, -1 + i32.add $push3=, $pop1, $pop2 + i32.store arrindex($pop0), $pop3 + i32.const $push4=, 1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end17: + .size predec_glob_idx, .Lfunc_end17-predec_glob_idx + # -- End function + .section .text.postdec_arg_idx,"ax",@progbits + .hidden postdec_arg_idx # -- Begin function postdec_arg_idx + .globl postdec_arg_idx + .type postdec_arg_idx,@function +postdec_arg_idx: # @postdec_arg_idx + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end18: + .size postdec_arg_idx, .Lfunc_end18-postdec_arg_idx + # -- End function + .section .text.postdec_glob_idx,"ax",@progbits + .hidden postdec_glob_idx # -- Begin function postdec_glob_idx + .globl postdec_glob_idx + .type postdec_glob_idx,@function +postdec_glob_idx: # @postdec_glob_idx + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load $push1=, arrindex($pop5) + i32.const $push2=, -1 + i32.add $push3=, $pop1, $pop2 + i32.store arrindex($pop0), $pop3 + i32.const $push4=, 1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end19: + .size postdec_glob_idx, .Lfunc_end19-postdec_glob_idx + # -- End function + .section .text.getptr,"ax",@progbits + .hidden getptr # -- Begin function getptr + .globl getptr + .type getptr,@function +getptr: # @getptr + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, getptrcnt($pop6) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store getptrcnt($pop0), $pop3 + i32.const $push4=, 4 + i32.add $push5=, $0, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end20: + .size getptr, .Lfunc_end20-getptr + # -- End function + .section .text.funccall_arg_ptr,"ax",@progbits + .hidden funccall_arg_ptr # -- Begin function funccall_arg_ptr + .globl funccall_arg_ptr + .type funccall_arg_ptr,@function +funccall_arg_ptr: # @funccall_arg_ptr + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push5=, getptrcnt($pop6) + tee_local $push4=, $1=, $pop5 + i32.const $push1=, 1 + i32.add $push2=, $pop4, $pop1 + i32.store getptrcnt($pop0), $pop2 + i32.eqz $push3=, $1 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end21: + .size funccall_arg_ptr, .Lfunc_end21-funccall_arg_ptr + # -- End function + .section .text.getint,"ax",@progbits + .hidden getint # -- Begin function getint + .globl getint + .type getint,@function +getint: # @getint + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push1=, getintcnt($pop6) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store getintcnt($pop0), $pop3 + i32.const $push5=, 1 + i32.add $push4=, $0, $pop5 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end22: + .size getint, .Lfunc_end22-getint + # -- End function + .section .text.funccall_arg_idx,"ax",@progbits + .hidden funccall_arg_idx # -- Begin function funccall_arg_idx + .globl funccall_arg_idx + .type funccall_arg_idx,@function +funccall_arg_idx: # @funccall_arg_idx + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push5=, getintcnt($pop6) + tee_local $push4=, $2=, $pop5 + i32.const $push1=, 1 + i32.add $push2=, $pop4, $pop1 + i32.store getintcnt($pop0), $pop2 + i32.eqz $push3=, $2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end23: + .size funccall_arg_idx, .Lfunc_end23-funccall_arg_idx + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %if.end76 + i32.const $push7=, 0 + i32.const $push6=, 0 + i32.load $push5=, getptrcnt($pop6) + tee_local $push4=, $0=, $pop5 + i32.const $push3=, 1 + i32.add $push0=, $pop4, $pop3 + i32.store getptrcnt($pop7), $pop0 + block + br_if 0, $0 # 0: down to label0 +# BB#1: # %if.end80 + i32.const $push12=, 0 + i32.const $push11=, 0 + i32.load $push10=, getintcnt($pop11) + tee_local $push9=, $0=, $pop10 + i32.const $push8=, 1 + i32.add $push1=, $pop9, $pop8 + i32.store getintcnt($pop12), $pop1 + br_if 0, $0 # 0: down to label0 +# BB#2: # %if.end84 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable +.LBB24_3: # %if.then79 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end24: + .size main, .Lfunc_end24-main + # -- End function + .hidden arr # @arr + .type arr,@object + .section .bss.arr,"aw",@nobits + .globl arr + .p2align 4 +arr: + .skip 400 + .size arr, 400 + + .hidden ptr # @ptr + .type ptr,@object + .section .data.ptr,"aw",@progbits + .globl ptr + .p2align 2 +ptr: + .int32 arr+80 + .size ptr, 4 + + .hidden arrindex # @arrindex + .type arrindex,@object + .section .data.arrindex,"aw",@progbits + .globl arrindex + .p2align 2 +arrindex: + .int32 4 # 0x4 + .size arrindex, 4 + + .hidden getptrcnt # @getptrcnt + .type getptrcnt,@object + .section .bss.getptrcnt,"aw",@nobits + .globl getptrcnt + .p2align 2 +getptrcnt: + .int32 0 # 0x0 + .size getptrcnt, 4 + + .hidden getintcnt # @getintcnt + .type getintcnt,@object + .section .bss.getintcnt,"aw",@nobits + .globl getintcnt + .p2align 2 +getintcnt: + .int32 0 # 0x0 + .size getintcnt, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/builtin-prefetch-5.c.s b/src/binaryen/test/torture-s/builtin-prefetch-5.c.s new file mode 100644 index 0000000000..27cb5e511a --- /dev/null +++ b/src/binaryen/test/torture-s/builtin-prefetch-5.c.s @@ -0,0 +1,113 @@ + .text + .file "builtin-prefetch-5.c" + .section .text.arg_ptr,"ax",@progbits + .hidden arg_ptr # -- Begin function arg_ptr + .globl arg_ptr + .type arg_ptr,@function +arg_ptr: # @arg_ptr + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size arg_ptr, .Lfunc_end0-arg_ptr + # -- End function + .section .text.arg_idx,"ax",@progbits + .hidden arg_idx # -- Begin function arg_idx + .globl arg_idx + .type arg_idx,@function +arg_idx: # @arg_idx + .param i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end1: + .size arg_idx, .Lfunc_end1-arg_idx + # -- End function + .section .text.glob_ptr,"ax",@progbits + .hidden glob_ptr # -- Begin function glob_ptr + .globl glob_ptr + .type glob_ptr,@function +glob_ptr: # @glob_ptr +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end2: + .size glob_ptr, .Lfunc_end2-glob_ptr + # -- End function + .section .text.glob_idx,"ax",@progbits + .hidden glob_idx # -- Begin function glob_idx + .globl glob_idx + .type glob_idx,@function +glob_idx: # @glob_idx +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end3: + .size glob_idx, .Lfunc_end3-glob_idx + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 3 + i32.store idx($pop1), $pop0 + i32.const $push9=, 0 + i32.const $push2=, 2 + i32.store idx($pop9), $pop2 + i32.const $push8=, 0 + i32.const $push7=, 0 + i32.load $push3=, ptr($pop7) + i32.const $push4=, 1 + i32.add $push5=, $pop3, $pop4 + i32.store ptr($pop8), $pop5 + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + .hidden arr # @arr + .type arr,@object + .section .bss.arr,"aw",@nobits + .globl arr + .p2align 4 +arr: + .skip 100 + .size arr, 100 + + .hidden ptr # @ptr + .type ptr,@object + .section .data.ptr,"aw",@progbits + .globl ptr + .p2align 2 +ptr: + .int32 arr + .size ptr, 4 + + .hidden idx # @idx + .type idx,@object + .section .data.idx,"aw",@progbits + .globl idx + .p2align 2 +idx: + .int32 3 # 0x3 + .size idx, 4 + + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 1 +s: + .skip 12 + .size s, 12 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/builtin-prefetch-6.c.s b/src/binaryen/test/torture-s/builtin-prefetch-6.c.s new file mode 100644 index 0000000000..befe5a6443 --- /dev/null +++ b/src/binaryen/test/torture-s/builtin-prefetch-6.c.s @@ -0,0 +1,146 @@ + .text + .file "builtin-prefetch-6.c" + .section .text.init_addrs,"ax",@progbits + .hidden init_addrs # -- Begin function init_addrs + .globl init_addrs + .type init_addrs,@function +init_addrs: # @init_addrs +# BB#0: # %entry + i32.const $push1=, 0 + i64.const $push0=, 8589934593 + i64.store bad_addr($pop1), $pop0 + i32.const $push33=, 0 + i64.const $push2=, 34359738372 + i64.store bad_addr+8($pop33), $pop2 + i32.const $push32=, 0 + i64.const $push3=, 137438953488 + i64.store bad_addr+16($pop32), $pop3 + i32.const $push31=, 0 + i64.const $push4=, 549755813952 + i64.store bad_addr+24($pop31), $pop4 + i32.const $push30=, 0 + i64.const $push5=, 2199023255808 + i64.store bad_addr+32($pop30), $pop5 + i32.const $push29=, 0 + i64.const $push6=, 8796093023232 + i64.store bad_addr+40($pop29), $pop6 + i32.const $push28=, 0 + i64.const $push7=, 35184372092928 + i64.store bad_addr+48($pop28), $pop7 + i32.const $push27=, 0 + i64.const $push8=, 140737488371712 + i64.store bad_addr+56($pop27), $pop8 + i32.const $push26=, 0 + i64.const $push9=, 562949953486848 + i64.store bad_addr+64($pop26), $pop9 + i32.const $push25=, 0 + i64.const $push10=, 2251799813947392 + i64.store bad_addr+72($pop25), $pop10 + i32.const $push24=, 0 + i64.const $push11=, 9007199255789568 + i64.store bad_addr+80($pop24), $pop11 + i32.const $push23=, 0 + i64.const $push12=, 36028797023158272 + i64.store bad_addr+88($pop23), $pop12 + i32.const $push22=, 0 + i64.const $push13=, 144115188092633088 + i64.store bad_addr+96($pop22), $pop13 + i32.const $push21=, 0 + i64.const $push14=, 576460752370532352 + i64.store bad_addr+104($pop21), $pop14 + i32.const $push20=, 0 + i64.const $push15=, 2305843009482129408 + i64.store bad_addr+112($pop20), $pop15 + i32.const $push19=, 0 + i64.const $push16=, -9223372035781033984 + i64.store bad_addr+120($pop19), $pop16 + i32.const $push18=, 0 + i32.const $push17=, 33 + i32.store arr_used($pop18), $pop17 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size init_addrs, .Lfunc_end0-init_addrs + # -- End function + .section .text.prefetch_for_read,"ax",@progbits + .hidden prefetch_for_read # -- Begin function prefetch_for_read + .globl prefetch_for_read + .type prefetch_for_read,@function +prefetch_for_read: # @prefetch_for_read + .local i32 +# BB#0: # %entry + i32.const $0=, -260 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push2=, 4 + i32.add $push1=, $0, $pop2 + tee_local $push0=, $0=, $pop1 + br_if 0, $pop0 # 0: up to label0 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end1: + .size prefetch_for_read, .Lfunc_end1-prefetch_for_read + # -- End function + .section .text.prefetch_for_write,"ax",@progbits + .hidden prefetch_for_write # -- Begin function prefetch_for_write + .globl prefetch_for_write + .type prefetch_for_write,@function +prefetch_for_write: # @prefetch_for_write + .local i32 +# BB#0: # %entry + i32.const $0=, -260 +.LBB2_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push2=, 4 + i32.add $push1=, $0, $pop2 + tee_local $push0=, $0=, $pop1 + br_if 0, $pop0 # 0: up to label1 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end2: + .size prefetch_for_write, .Lfunc_end2-prefetch_for_write + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call init_addrs@FUNCTION + call prefetch_for_read@FUNCTION + call prefetch_for_write@FUNCTION + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden bad_addr # @bad_addr + .type bad_addr,@object + .section .bss.bad_addr,"aw",@nobits + .globl bad_addr + .p2align 4 +bad_addr: + .skip 260 + .size bad_addr, 260 + + .hidden arr_used # @arr_used + .type arr_used,@object + .section .bss.arr_used,"aw",@nobits + .globl arr_used + .p2align 2 +arr_used: + .int32 0 # 0x0 + .size arr_used, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/builtin-types-compatible-p.c.s b/src/binaryen/test/torture-s/builtin-types-compatible-p.c.s new file mode 100644 index 0000000000..97d9992d68 --- /dev/null +++ b/src/binaryen/test/torture-s/builtin-types-compatible-p.c.s @@ -0,0 +1,46 @@ + .text + .file "builtin-types-compatible-p.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 3 +d: + .int64 0 # double 0 + .size d, 8 + + .hidden rootbeer # @rootbeer + .type rootbeer,@object + .section .bss.rootbeer,"aw",@nobits + .globl rootbeer + .p2align 2 +rootbeer: + .skip 4 + .size rootbeer, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/call-trap-1.c.s b/src/binaryen/test/torture-s/call-trap-1.c.s new file mode 100644 index 0000000000..9488aa1ce4 --- /dev/null +++ b/src/binaryen/test/torture-s/call-trap-1.c.s @@ -0,0 +1,43 @@ + .text + .file "call-trap-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.call $drop=, foo@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/cbrt.c.s b/src/binaryen/test/torture-s/cbrt.c.s new file mode 100644 index 0000000000..80c2cf23ae --- /dev/null +++ b/src/binaryen/test/torture-s/cbrt.c.s @@ -0,0 +1,159 @@ + .text + .file "cbrt.c" + .section .text.cbrtl,"ax",@progbits + .hidden cbrtl # -- Begin function cbrtl + .globl cbrtl + .type cbrtl,@function +cbrtl: # @cbrtl + .param f64 + .result f64 + .local i64, i32, i32, f64, f64, i32 +# BB#0: # %entry + i32.const $push59=, 0 + i32.load $push58=, __stack_pointer($pop59) + i32.const $push60=, 16 + i32.sub $push68=, $pop58, $pop60 + tee_local $push67=, $6=, $pop68 + f64.store 0($pop67), $0 + i64.const $push0=, 0 + i64.store 8($6), $pop0 + block + i64.reinterpret/f64 $push66=, $0 + tee_local $push65=, $1=, $pop66 + i64.const $push1=, 32 + i64.shr_u $push2=, $pop65, $pop1 + i32.wrap/i64 $push64=, $pop2 + tee_local $push63=, $3=, $pop64 + i32.const $push4=, 2147483647 + i32.and $push62=, $pop63, $pop4 + tee_local $push61=, $2=, $pop62 + i32.const $push5=, 2146435072 + i32.lt_u $push6=, $pop61, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %if.then + f64.add $push69=, $0, $0 + return $pop69 +.LBB0_2: # %if.end + end_block # label0: + block + i32.wrap/i64 $push7=, $1 + i32.or $push8=, $2, $pop7 + i32.eqz $push89=, $pop8 + br_if 0, $pop89 # 0: down to label1 +# BB#3: # %if.end13 + i32.const $push3=, -2147483648 + i32.and $3=, $3, $pop3 + i32.store 4($6), $2 + block + block + i32.const $push9=, 1048575 + i32.gt_u $push10=, $2, $pop9 + br_if 0, $pop10 # 0: down to label3 +# BB#4: # %if.then18 + i32.const $push14=, 1129316352 + i32.store 12($6), $pop14 + f64.load $push15=, 8($6) + f64.mul $push71=, $pop15, $0 + tee_local $push70=, $5=, $pop71 + f64.store 8($6), $pop70 + i64.reinterpret/f64 $push16=, $5 + i64.const $push17=, 32 + i64.shr_u $push18=, $pop16, $pop17 + i32.wrap/i64 $push19=, $pop18 + i32.const $push20=, 3 + i32.div_u $push21=, $pop19, $pop20 + i32.const $push22=, 696219795 + i32.add $2=, $pop21, $pop22 + br 1 # 1: down to label2 +.LBB0_5: # %if.else + end_block # label3: + i32.const $push11=, 3 + i32.div_u $push12=, $2, $pop11 + i32.const $push13=, 715094163 + i32.add $2=, $pop12, $pop13 +.LBB0_6: # %if.end31 + end_block # label2: + i32.store 12($6), $2 + f64.load $push88=, 8($6) + tee_local $push87=, $5=, $pop88 + f64.const $push32=, 0x1.9b6db6db6db6ep0 + f64.mul $push23=, $5, $5 + f64.load $push86=, 0($6) + tee_local $push85=, $4=, $pop86 + f64.div $push24=, $pop23, $pop85 + f64.mul $push25=, $5, $pop24 + f64.const $push26=, 0x1.15f15f15f15f1p-1 + f64.add $push84=, $pop25, $pop26 + tee_local $push83=, $5=, $pop84 + f64.const $push29=, 0x1.6a0ea0ea0ea0fp0 + f64.add $push30=, $pop83, $pop29 + f64.const $push27=, -0x1.691de2532c834p-1 + f64.div $push28=, $pop27, $5 + f64.add $push31=, $pop30, $pop28 + f64.div $push33=, $pop32, $pop31 + f64.const $push34=, 0x1.6db6db6db6db7p-2 + f64.add $push35=, $pop33, $pop34 + f64.mul $push82=, $pop87, $pop35 + tee_local $push81=, $5=, $pop82 + f64.store 8($6), $pop81 + i32.const $push36=, 0 + i32.store 8($6), $pop36 + i64.reinterpret/f64 $push37=, $5 + i64.const $push38=, 32 + i64.shr_u $push39=, $pop37, $pop38 + i32.wrap/i64 $push40=, $pop39 + i32.const $push41=, 1 + i32.add $push42=, $pop40, $pop41 + i32.store 12($6), $pop42 + f64.load $push80=, 8($6) + tee_local $push79=, $5=, $pop80 + f64.mul $push43=, $5, $5 + f64.div $push78=, $4, $pop43 + tee_local $push77=, $4=, $pop78 + f64.sub $push46=, $pop77, $5 + f64.add $push44=, $5, $5 + f64.add $push45=, $pop44, $4 + f64.div $push47=, $pop46, $pop45 + f64.mul $push48=, $5, $pop47 + f64.add $push76=, $pop79, $pop48 + tee_local $push75=, $5=, $pop76 + f64.store 8($6), $pop75 + i64.reinterpret/f64 $push49=, $5 + i64.const $push74=, 32 + i64.shr_u $push50=, $pop49, $pop74 + i32.wrap/i64 $push51=, $pop50 + i32.or $push52=, $3, $pop51 + i32.store 12($6), $pop52 + f64.load $push73=, 8($6) + tee_local $push72=, $5=, $pop73 + f64.mul $push53=, $5, $5 + f64.div $push54=, $0, $pop53 + f64.sub $push55=, $5, $pop54 + f64.const $push56=, -0x1.5555555555555p-2 + f64.mul $push57=, $pop55, $pop56 + f64.add $0=, $pop72, $pop57 +.LBB0_7: # %cleanup + end_block # label1: + copy_local $push90=, $0 + # fallthrough-return: $pop90 + .endfunc +.Lfunc_end0: + .size cbrtl, .Lfunc_end0-cbrtl + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/cmpdi-1.c.s b/src/binaryen/test/torture-s/cmpdi-1.c.s new file mode 100644 index 0000000000..cd5fb3ecda --- /dev/null +++ b/src/binaryen/test/torture-s/cmpdi-1.c.s @@ -0,0 +1,1008 @@ + .text + .file "cmpdi-1.c" + .section .text.feq,"ax",@progbits + .hidden feq # -- Begin function feq + .globl feq + .type feq,@function +feq: # @feq + .param i64, i64 + .result i32 +# BB#0: # %entry + i32.const $push2=, 13 + i32.const $push1=, 140 + i64.eq $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size feq, .Lfunc_end0-feq + # -- End function + .section .text.fne,"ax",@progbits + .hidden fne # -- Begin function fne + .globl fne + .type fne,@function +fne: # @fne + .param i64, i64 + .result i32 +# BB#0: # %entry + i32.const $push2=, 140 + i32.const $push1=, 13 + i64.eq $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size fne, .Lfunc_end1-fne + # -- End function + .section .text.flt,"ax",@progbits + .hidden flt # -- Begin function flt + .globl flt + .type flt,@function +flt: # @flt + .param i64, i64 + .result i32 +# BB#0: # %entry + i32.const $push2=, 13 + i32.const $push1=, 140 + i64.lt_s $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size flt, .Lfunc_end2-flt + # -- End function + .section .text.fge,"ax",@progbits + .hidden fge # -- Begin function fge + .globl fge + .type fge,@function +fge: # @fge + .param i64, i64 + .result i32 +# BB#0: # %entry + i32.const $push2=, 140 + i32.const $push1=, 13 + i64.lt_s $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end3: + .size fge, .Lfunc_end3-fge + # -- End function + .section .text.fgt,"ax",@progbits + .hidden fgt # -- Begin function fgt + .globl fgt + .type fgt,@function +fgt: # @fgt + .param i64, i64 + .result i32 +# BB#0: # %entry + i32.const $push2=, 13 + i32.const $push1=, 140 + i64.gt_s $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end4: + .size fgt, .Lfunc_end4-fgt + # -- End function + .section .text.fle,"ax",@progbits + .hidden fle # -- Begin function fle + .globl fle + .type fle,@function +fle: # @fle + .param i64, i64 + .result i32 +# BB#0: # %entry + i32.const $push2=, 140 + i32.const $push1=, 13 + i64.gt_s $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end5: + .size fle, .Lfunc_end5-fle + # -- End function + .section .text.fltu,"ax",@progbits + .hidden fltu # -- Begin function fltu + .globl fltu + .type fltu,@function +fltu: # @fltu + .param i64, i64 + .result i32 +# BB#0: # %entry + i32.const $push2=, 13 + i32.const $push1=, 140 + i64.lt_u $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end6: + .size fltu, .Lfunc_end6-fltu + # -- End function + .section .text.fgeu,"ax",@progbits + .hidden fgeu # -- Begin function fgeu + .globl fgeu + .type fgeu,@function +fgeu: # @fgeu + .param i64, i64 + .result i32 +# BB#0: # %entry + i32.const $push2=, 140 + i32.const $push1=, 13 + i64.lt_u $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end7: + .size fgeu, .Lfunc_end7-fgeu + # -- End function + .section .text.fgtu,"ax",@progbits + .hidden fgtu # -- Begin function fgtu + .globl fgtu + .type fgtu,@function +fgtu: # @fgtu + .param i64, i64 + .result i32 +# BB#0: # %entry + i32.const $push2=, 13 + i32.const $push1=, 140 + i64.gt_u $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end8: + .size fgtu, .Lfunc_end8-fgtu + # -- End function + .section .text.fleu,"ax",@progbits + .hidden fleu # -- Begin function fleu + .globl fleu + .type fleu,@function +fleu: # @fleu + .param i64, i64 + .result i32 +# BB#0: # %entry + i32.const $push2=, 140 + i32.const $push1=, 13 + i64.gt_u $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end9: + .size fleu, .Lfunc_end9-fleu + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i64, i32, i32, i32, i64, i32 +# BB#0: # %entry + i32.const $4=, correct_results + i32.const $0=, 0 +.LBB10_1: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB10_2 Depth 2 + block + loop # label1: + i32.const $2=, args + i32.const $push45=, 3 + i32.shl $push1=, $0, $pop45 + i32.const $push44=, args + i32.add $push2=, $pop1, $pop44 + i64.load $1=, 0($pop2) + i32.const $3=, -1 +.LBB10_2: # %for.body3 + # Parent Loop BB10_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label2: + i32.const $push51=, 13 + i32.const $push50=, 140 + i64.load $push49=, 0($2) + tee_local $push48=, $5=, $pop49 + i64.eq $push47=, $1, $pop48 + tee_local $push46=, $6=, $pop47 + i32.select $push3=, $pop51, $pop50, $pop46 + i32.load $push4=, 0($4) + i32.ne $push5=, $pop3, $pop4 + br_if 2, $pop5 # 2: down to label0 +# BB#3: # %if.end + # in Loop: Header=BB10_2 Depth=2 + i32.const $push54=, 140 + i32.const $push53=, 13 + i32.select $push6=, $pop54, $pop53, $6 + i32.const $push52=, 4 + i32.add $push7=, $4, $pop52 + i32.load $push8=, 0($pop7) + i32.ne $push9=, $pop6, $pop8 + br_if 2, $pop9 # 2: down to label0 +# BB#4: # %if.end10 + # in Loop: Header=BB10_2 Depth=2 + i32.const $push59=, 13 + i32.const $push58=, 140 + i64.lt_s $push57=, $1, $5 + tee_local $push56=, $6=, $pop57 + i32.select $push10=, $pop59, $pop58, $pop56 + i32.const $push55=, 8 + i32.add $push11=, $4, $pop55 + i32.load $push12=, 0($pop11) + i32.ne $push13=, $pop10, $pop12 + br_if 2, $pop13 # 2: down to label0 +# BB#5: # %if.end15 + # in Loop: Header=BB10_2 Depth=2 + i32.const $push62=, 140 + i32.const $push61=, 13 + i32.select $push14=, $pop62, $pop61, $6 + i32.const $push60=, 12 + i32.add $push15=, $4, $pop60 + i32.load $push16=, 0($pop15) + i32.ne $push17=, $pop14, $pop16 + br_if 2, $pop17 # 2: down to label0 +# BB#6: # %if.end20 + # in Loop: Header=BB10_2 Depth=2 + i32.const $push67=, 13 + i32.const $push66=, 140 + i64.gt_s $push65=, $1, $5 + tee_local $push64=, $6=, $pop65 + i32.select $push18=, $pop67, $pop66, $pop64 + i32.const $push63=, 16 + i32.add $push19=, $4, $pop63 + i32.load $push20=, 0($pop19) + i32.ne $push21=, $pop18, $pop20 + br_if 2, $pop21 # 2: down to label0 +# BB#7: # %if.end25 + # in Loop: Header=BB10_2 Depth=2 + i32.const $push70=, 140 + i32.const $push69=, 13 + i32.select $push22=, $pop70, $pop69, $6 + i32.const $push68=, 20 + i32.add $push23=, $4, $pop68 + i32.load $push24=, 0($pop23) + i32.ne $push25=, $pop22, $pop24 + br_if 2, $pop25 # 2: down to label0 +# BB#8: # %if.end30 + # in Loop: Header=BB10_2 Depth=2 + i32.const $push75=, 13 + i32.const $push74=, 140 + i64.lt_u $push73=, $1, $5 + tee_local $push72=, $6=, $pop73 + i32.select $push26=, $pop75, $pop74, $pop72 + i32.const $push71=, 24 + i32.add $push27=, $4, $pop71 + i32.load $push28=, 0($pop27) + i32.ne $push29=, $pop26, $pop28 + br_if 2, $pop29 # 2: down to label0 +# BB#9: # %if.end35 + # in Loop: Header=BB10_2 Depth=2 + i32.const $push78=, 140 + i32.const $push77=, 13 + i32.select $push30=, $pop78, $pop77, $6 + i32.const $push76=, 28 + i32.add $push31=, $4, $pop76 + i32.load $push32=, 0($pop31) + i32.ne $push33=, $pop30, $pop32 + br_if 2, $pop33 # 2: down to label0 +# BB#10: # %if.end40 + # in Loop: Header=BB10_2 Depth=2 + i32.const $push83=, 13 + i32.const $push82=, 140 + i64.gt_u $push81=, $1, $5 + tee_local $push80=, $6=, $pop81 + i32.select $push34=, $pop83, $pop82, $pop80 + i32.const $push79=, 32 + i32.add $push35=, $4, $pop79 + i32.load $push36=, 0($pop35) + i32.ne $push37=, $pop34, $pop36 + br_if 2, $pop37 # 2: down to label0 +# BB#11: # %if.end45 + # in Loop: Header=BB10_2 Depth=2 + i32.const $push86=, 140 + i32.const $push85=, 13 + i32.select $push38=, $pop86, $pop85, $6 + i32.const $push84=, 36 + i32.add $push39=, $4, $pop84 + i32.load $push40=, 0($pop39) + i32.ne $push41=, $pop38, $pop40 + br_if 2, $pop41 # 2: down to label0 +# BB#12: # %if.end50 + # in Loop: Header=BB10_2 Depth=2 + i32.const $push92=, 40 + i32.add $4=, $4, $pop92 + i32.const $push91=, 8 + i32.add $2=, $2, $pop91 + i32.const $push90=, 1 + i32.add $push89=, $3, $pop90 + tee_local $push88=, $3=, $pop89 + i32.const $push87=, 7 + i32.lt_u $push42=, $pop88, $pop87 + br_if 0, $pop42 # 0: up to label2 +# BB#13: # %for.end + # in Loop: Header=BB10_1 Depth=1 + end_loop + i32.const $push94=, 7 + i32.lt_u $2=, $0, $pop94 + i32.const $push93=, 1 + i32.add $push0=, $0, $pop93 + copy_local $0=, $pop0 + br_if 0, $2 # 0: up to label1 +# BB#14: # %for.end53 + end_loop + i32.const $push43=, 0 + call exit@FUNCTION, $pop43 + unreachable +.LBB10_15: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end10: + .size main, .Lfunc_end10-main + # -- End function + .hidden args # @args + .type args,@object + .section .data.args,"aw",@progbits + .globl args + .p2align 4 +args: + .int64 0 # 0x0 + .int64 1 # 0x1 + .int64 -1 # 0xffffffffffffffff + .int64 9223372036854775807 # 0x7fffffffffffffff + .int64 -9223372036854775808 # 0x8000000000000000 + .int64 -9223372036854775807 # 0x8000000000000001 + .int64 1891269347843992664 # 0x1a3f237394d36c58 + .int64 -7816825554603336956 # 0x93850e92caac1b04 + .size args, 64 + + .hidden correct_results # @correct_results + .type correct_results,@object + .section .data.correct_results,"aw",@progbits + .globl correct_results + .p2align 4 +correct_results: + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .size correct_results, 2560 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/cmpsf-1.c.s b/src/binaryen/test/torture-s/cmpsf-1.c.s new file mode 100644 index 0000000000..8f51123312 --- /dev/null +++ b/src/binaryen/test/torture-s/cmpsf-1.c.s @@ -0,0 +1,654 @@ + .text + .file "cmpsf-1.c" + .section .text.feq,"ax",@progbits + .hidden feq # -- Begin function feq + .globl feq + .type feq,@function +feq: # @feq + .param f32, f32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 13 + i32.const $push1=, 140 + f32.eq $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size feq, .Lfunc_end0-feq + # -- End function + .section .text.fne,"ax",@progbits + .hidden fne # -- Begin function fne + .globl fne + .type fne,@function +fne: # @fne + .param f32, f32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 13 + i32.const $push1=, 140 + f32.ne $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size fne, .Lfunc_end1-fne + # -- End function + .section .text.flt,"ax",@progbits + .hidden flt # -- Begin function flt + .globl flt + .type flt,@function +flt: # @flt + .param f32, f32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 13 + i32.const $push1=, 140 + f32.lt $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size flt, .Lfunc_end2-flt + # -- End function + .section .text.fge,"ax",@progbits + .hidden fge # -- Begin function fge + .globl fge + .type fge,@function +fge: # @fge + .param f32, f32 + .result i32 +# BB#0: # %entry + i32.const $push6=, 140 + i32.const $push5=, 13 + f32.lt $push0=, $0, $1 + f32.ne $push2=, $0, $0 + f32.ne $push1=, $1, $1 + i32.or $push3=, $pop2, $pop1 + i32.or $push4=, $pop0, $pop3 + i32.select $push7=, $pop6, $pop5, $pop4 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end3: + .size fge, .Lfunc_end3-fge + # -- End function + .section .text.fgt,"ax",@progbits + .hidden fgt # -- Begin function fgt + .globl fgt + .type fgt,@function +fgt: # @fgt + .param f32, f32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 13 + i32.const $push1=, 140 + f32.gt $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end4: + .size fgt, .Lfunc_end4-fgt + # -- End function + .section .text.fle,"ax",@progbits + .hidden fle # -- Begin function fle + .globl fle + .type fle,@function +fle: # @fle + .param f32, f32 + .result i32 +# BB#0: # %entry + i32.const $push6=, 140 + i32.const $push5=, 13 + f32.gt $push0=, $0, $1 + f32.ne $push2=, $0, $0 + f32.ne $push1=, $1, $1 + i32.or $push3=, $pop2, $pop1 + i32.or $push4=, $pop0, $pop3 + i32.select $push7=, $pop6, $pop5, $pop4 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end5: + .size fle, .Lfunc_end5-fle + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, f32, i32, i32, i32, f32, i32, i32 +# BB#0: # %entry + i32.const $4=, correct_results + i32.const $0=, 0 +.LBB6_1: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB6_2 Depth 2 + block + loop # label1: + i32.const $2=, args + i32.const $push35=, 2 + i32.shl $push1=, $0, $pop35 + i32.const $push34=, args + i32.add $push2=, $pop1, $pop34 + f32.load $1=, 0($pop2) + i32.const $3=, -1 +.LBB6_2: # %for.body3 + # Parent Loop BB6_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label2: + i32.const $push39=, 13 + i32.const $push38=, 140 + f32.load $push37=, 0($2) + tee_local $push36=, $5=, $pop37 + f32.eq $push3=, $1, $pop36 + i32.select $push4=, $pop39, $pop38, $pop3 + i32.load $push5=, 0($4) + i32.ne $push6=, $pop4, $pop5 + br_if 2, $pop6 # 2: down to label0 +# BB#3: # %if.end + # in Loop: Header=BB6_2 Depth=2 + i32.const $push42=, 13 + i32.const $push41=, 140 + f32.ne $push7=, $1, $5 + i32.select $push8=, $pop42, $pop41, $pop7 + i32.const $push40=, 4 + i32.add $push9=, $4, $pop40 + i32.load $push10=, 0($pop9) + i32.ne $push11=, $pop8, $pop10 + br_if 2, $pop11 # 2: down to label0 +# BB#4: # %if.end10 + # in Loop: Header=BB6_2 Depth=2 + i32.const $push47=, 13 + i32.const $push46=, 140 + f32.lt $push45=, $1, $5 + tee_local $push44=, $6=, $pop45 + i32.select $push12=, $pop47, $pop46, $pop44 + i32.const $push43=, 8 + i32.add $push13=, $4, $pop43 + i32.load $push14=, 0($pop13) + i32.ne $push15=, $pop12, $pop14 + br_if 2, $pop15 # 2: down to label0 +# BB#5: # %if.end15 + # in Loop: Header=BB6_2 Depth=2 + i32.const $push52=, 140 + i32.const $push51=, 13 + f32.ne $push17=, $1, $1 + f32.ne $push16=, $5, $5 + i32.or $push50=, $pop17, $pop16 + tee_local $push49=, $7=, $pop50 + i32.or $push18=, $6, $pop49 + i32.select $push19=, $pop52, $pop51, $pop18 + i32.const $push48=, 12 + i32.add $push20=, $4, $pop48 + i32.load $push21=, 0($pop20) + i32.ne $push22=, $pop19, $pop21 + br_if 2, $pop22 # 2: down to label0 +# BB#6: # %if.end20 + # in Loop: Header=BB6_2 Depth=2 + i32.const $push57=, 13 + i32.const $push56=, 140 + f32.gt $push55=, $1, $5 + tee_local $push54=, $6=, $pop55 + i32.select $push23=, $pop57, $pop56, $pop54 + i32.const $push53=, 16 + i32.add $push24=, $4, $pop53 + i32.load $push25=, 0($pop24) + i32.ne $push26=, $pop23, $pop25 + br_if 2, $pop26 # 2: down to label0 +# BB#7: # %if.end25 + # in Loop: Header=BB6_2 Depth=2 + i32.const $push60=, 140 + i32.const $push59=, 13 + i32.or $push27=, $6, $7 + i32.select $push28=, $pop60, $pop59, $pop27 + i32.const $push58=, 20 + i32.add $push29=, $4, $pop58 + i32.load $push30=, 0($pop29) + i32.ne $push31=, $pop28, $pop30 + br_if 2, $pop31 # 2: down to label0 +# BB#8: # %if.end30 + # in Loop: Header=BB6_2 Depth=2 + i32.const $push66=, 24 + i32.add $4=, $4, $pop66 + i32.const $push65=, 4 + i32.add $2=, $2, $pop65 + i32.const $push64=, 1 + i32.add $push63=, $3, $pop64 + tee_local $push62=, $3=, $pop63 + i32.const $push61=, 7 + i32.lt_u $push32=, $pop62, $pop61 + br_if 0, $pop32 # 0: up to label2 +# BB#9: # %for.end + # in Loop: Header=BB6_1 Depth=1 + end_loop + i32.const $push68=, 7 + i32.lt_u $2=, $0, $pop68 + i32.const $push67=, 1 + i32.add $push0=, $0, $pop67 + copy_local $0=, $pop0 + br_if 0, $2 # 0: up to label1 +# BB#10: # %for.end33 + end_loop + i32.const $push33=, 0 + call exit@FUNCTION, $pop33 + unreachable +.LBB6_11: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end6: + .size main, .Lfunc_end6-main + # -- End function + .hidden args # @args + .type args,@object + .section .data.args,"aw",@progbits + .globl args + .p2align 4 +args: + .int32 0 # float 0 + .int32 1065353216 # float 1 + .int32 3212836864 # float -1 + .int32 2139095039 # float 3.40282347E+38 + .int32 8388608 # float 1.17549435E-38 + .int32 702623251 # float 9.99999982E-14 + .int32 1290500515 # float 123456792 + .int32 3463149987 # float -987654336 + .size args, 32 + + .hidden correct_results # @correct_results + .type correct_results,@object + .section .data.correct_results,"aw",@progbits + .globl correct_results + .p2align 4 +correct_results: + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .size correct_results, 1536 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/cmpsi-1.c.s b/src/binaryen/test/torture-s/cmpsi-1.c.s new file mode 100644 index 0000000000..05795d2b2c --- /dev/null +++ b/src/binaryen/test/torture-s/cmpsi-1.c.s @@ -0,0 +1,82 @@ + .text + .file "cmpsi-1.c" + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.sub $push3=, $0, $1 + tee_local $push2=, $0=, $pop3 + i32.const $push0=, 0 + i32.ge_s $push1=, $pop2, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end3 + return $0 +.LBB0_2: # %if.then2 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.sub $push3=, $0, $1 + tee_local $push2=, $0=, $pop3 + i32.const $push0=, 0 + i32.ge_s $push1=, $pop2, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %if.end3 + return $0 +.LBB1_2: # %if.then2 + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size f2, .Lfunc_end1-f2 + # -- End function + .section .text.dummy,"ax",@progbits + .hidden dummy # -- Begin function dummy + .globl dummy + .type dummy,@function +dummy: # @dummy + .result i32 + .local i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size dummy, .Lfunc_end2-dummy + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/cmpsi-2.c.s b/src/binaryen/test/torture-s/cmpsi-2.c.s new file mode 100644 index 0000000000..9bdf4825ba --- /dev/null +++ b/src/binaryen/test/torture-s/cmpsi-2.c.s @@ -0,0 +1,1008 @@ + .text + .file "cmpsi-2.c" + .section .text.feq,"ax",@progbits + .hidden feq # -- Begin function feq + .globl feq + .type feq,@function +feq: # @feq + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 13 + i32.const $push1=, 140 + i32.eq $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size feq, .Lfunc_end0-feq + # -- End function + .section .text.fne,"ax",@progbits + .hidden fne # -- Begin function fne + .globl fne + .type fne,@function +fne: # @fne + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 140 + i32.const $push1=, 13 + i32.eq $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size fne, .Lfunc_end1-fne + # -- End function + .section .text.flt,"ax",@progbits + .hidden flt # -- Begin function flt + .globl flt + .type flt,@function +flt: # @flt + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 13 + i32.const $push1=, 140 + i32.lt_s $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size flt, .Lfunc_end2-flt + # -- End function + .section .text.fge,"ax",@progbits + .hidden fge # -- Begin function fge + .globl fge + .type fge,@function +fge: # @fge + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 140 + i32.const $push1=, 13 + i32.lt_s $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end3: + .size fge, .Lfunc_end3-fge + # -- End function + .section .text.fgt,"ax",@progbits + .hidden fgt # -- Begin function fgt + .globl fgt + .type fgt,@function +fgt: # @fgt + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 13 + i32.const $push1=, 140 + i32.gt_s $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end4: + .size fgt, .Lfunc_end4-fgt + # -- End function + .section .text.fle,"ax",@progbits + .hidden fle # -- Begin function fle + .globl fle + .type fle,@function +fle: # @fle + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 140 + i32.const $push1=, 13 + i32.gt_s $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end5: + .size fle, .Lfunc_end5-fle + # -- End function + .section .text.fltu,"ax",@progbits + .hidden fltu # -- Begin function fltu + .globl fltu + .type fltu,@function +fltu: # @fltu + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 13 + i32.const $push1=, 140 + i32.lt_u $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end6: + .size fltu, .Lfunc_end6-fltu + # -- End function + .section .text.fgeu,"ax",@progbits + .hidden fgeu # -- Begin function fgeu + .globl fgeu + .type fgeu,@function +fgeu: # @fgeu + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 140 + i32.const $push1=, 13 + i32.lt_u $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end7: + .size fgeu, .Lfunc_end7-fgeu + # -- End function + .section .text.fgtu,"ax",@progbits + .hidden fgtu # -- Begin function fgtu + .globl fgtu + .type fgtu,@function +fgtu: # @fgtu + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 13 + i32.const $push1=, 140 + i32.gt_u $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end8: + .size fgtu, .Lfunc_end8-fgtu + # -- End function + .section .text.fleu,"ax",@progbits + .hidden fleu # -- Begin function fleu + .globl fleu + .type fleu,@function +fleu: # @fleu + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 140 + i32.const $push1=, 13 + i32.gt_u $push0=, $0, $1 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end9: + .size fleu, .Lfunc_end9-fleu + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $4=, correct_results + i32.const $0=, 0 +.LBB10_1: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB10_2 Depth 2 + block + loop # label1: + i32.const $2=, args + i32.const $push45=, 2 + i32.shl $push1=, $0, $pop45 + i32.const $push44=, args + i32.add $push2=, $pop1, $pop44 + i32.load $1=, 0($pop2) + i32.const $3=, -1 +.LBB10_2: # %for.body3 + # Parent Loop BB10_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label2: + i32.const $push51=, 13 + i32.const $push50=, 140 + i32.load $push49=, 0($2) + tee_local $push48=, $5=, $pop49 + i32.eq $push47=, $1, $pop48 + tee_local $push46=, $6=, $pop47 + i32.select $push3=, $pop51, $pop50, $pop46 + i32.load $push4=, 0($4) + i32.ne $push5=, $pop3, $pop4 + br_if 2, $pop5 # 2: down to label0 +# BB#3: # %if.end + # in Loop: Header=BB10_2 Depth=2 + i32.const $push54=, 140 + i32.const $push53=, 13 + i32.select $push6=, $pop54, $pop53, $6 + i32.const $push52=, 4 + i32.add $push7=, $4, $pop52 + i32.load $push8=, 0($pop7) + i32.ne $push9=, $pop6, $pop8 + br_if 2, $pop9 # 2: down to label0 +# BB#4: # %if.end10 + # in Loop: Header=BB10_2 Depth=2 + i32.const $push59=, 13 + i32.const $push58=, 140 + i32.lt_s $push57=, $1, $5 + tee_local $push56=, $6=, $pop57 + i32.select $push10=, $pop59, $pop58, $pop56 + i32.const $push55=, 8 + i32.add $push11=, $4, $pop55 + i32.load $push12=, 0($pop11) + i32.ne $push13=, $pop10, $pop12 + br_if 2, $pop13 # 2: down to label0 +# BB#5: # %if.end15 + # in Loop: Header=BB10_2 Depth=2 + i32.const $push62=, 140 + i32.const $push61=, 13 + i32.select $push14=, $pop62, $pop61, $6 + i32.const $push60=, 12 + i32.add $push15=, $4, $pop60 + i32.load $push16=, 0($pop15) + i32.ne $push17=, $pop14, $pop16 + br_if 2, $pop17 # 2: down to label0 +# BB#6: # %if.end20 + # in Loop: Header=BB10_2 Depth=2 + i32.const $push67=, 13 + i32.const $push66=, 140 + i32.gt_s $push65=, $1, $5 + tee_local $push64=, $6=, $pop65 + i32.select $push18=, $pop67, $pop66, $pop64 + i32.const $push63=, 16 + i32.add $push19=, $4, $pop63 + i32.load $push20=, 0($pop19) + i32.ne $push21=, $pop18, $pop20 + br_if 2, $pop21 # 2: down to label0 +# BB#7: # %if.end25 + # in Loop: Header=BB10_2 Depth=2 + i32.const $push70=, 140 + i32.const $push69=, 13 + i32.select $push22=, $pop70, $pop69, $6 + i32.const $push68=, 20 + i32.add $push23=, $4, $pop68 + i32.load $push24=, 0($pop23) + i32.ne $push25=, $pop22, $pop24 + br_if 2, $pop25 # 2: down to label0 +# BB#8: # %if.end30 + # in Loop: Header=BB10_2 Depth=2 + i32.const $push75=, 13 + i32.const $push74=, 140 + i32.lt_u $push73=, $1, $5 + tee_local $push72=, $6=, $pop73 + i32.select $push26=, $pop75, $pop74, $pop72 + i32.const $push71=, 24 + i32.add $push27=, $4, $pop71 + i32.load $push28=, 0($pop27) + i32.ne $push29=, $pop26, $pop28 + br_if 2, $pop29 # 2: down to label0 +# BB#9: # %if.end35 + # in Loop: Header=BB10_2 Depth=2 + i32.const $push78=, 140 + i32.const $push77=, 13 + i32.select $push30=, $pop78, $pop77, $6 + i32.const $push76=, 28 + i32.add $push31=, $4, $pop76 + i32.load $push32=, 0($pop31) + i32.ne $push33=, $pop30, $pop32 + br_if 2, $pop33 # 2: down to label0 +# BB#10: # %if.end40 + # in Loop: Header=BB10_2 Depth=2 + i32.const $push83=, 13 + i32.const $push82=, 140 + i32.gt_u $push81=, $1, $5 + tee_local $push80=, $5=, $pop81 + i32.select $push34=, $pop83, $pop82, $pop80 + i32.const $push79=, 32 + i32.add $push35=, $4, $pop79 + i32.load $push36=, 0($pop35) + i32.ne $push37=, $pop34, $pop36 + br_if 2, $pop37 # 2: down to label0 +# BB#11: # %if.end45 + # in Loop: Header=BB10_2 Depth=2 + i32.const $push86=, 140 + i32.const $push85=, 13 + i32.select $push38=, $pop86, $pop85, $5 + i32.const $push84=, 36 + i32.add $push39=, $4, $pop84 + i32.load $push40=, 0($pop39) + i32.ne $push41=, $pop38, $pop40 + br_if 2, $pop41 # 2: down to label0 +# BB#12: # %if.end50 + # in Loop: Header=BB10_2 Depth=2 + i32.const $push92=, 40 + i32.add $4=, $4, $pop92 + i32.const $push91=, 4 + i32.add $2=, $2, $pop91 + i32.const $push90=, 1 + i32.add $push89=, $3, $pop90 + tee_local $push88=, $3=, $pop89 + i32.const $push87=, 7 + i32.lt_u $push42=, $pop88, $pop87 + br_if 0, $pop42 # 0: up to label2 +# BB#13: # %for.end + # in Loop: Header=BB10_1 Depth=1 + end_loop + i32.const $push94=, 7 + i32.lt_u $1=, $0, $pop94 + i32.const $push93=, 1 + i32.add $push0=, $0, $pop93 + copy_local $0=, $pop0 + br_if 0, $1 # 0: up to label1 +# BB#14: # %for.end53 + end_loop + i32.const $push43=, 0 + call exit@FUNCTION, $pop43 + unreachable +.LBB10_15: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end10: + .size main, .Lfunc_end10-main + # -- End function + .hidden args # @args + .type args,@object + .section .data.args,"aw",@progbits + .globl args + .p2align 4 +args: + .int32 0 # 0x0 + .int32 1 # 0x1 + .int32 4294967295 # 0xffffffff + .int32 2147483647 # 0x7fffffff + .int32 2147483648 # 0x80000000 + .int32 2147483649 # 0x80000001 + .int32 440345459 # 0x1a3f2373 + .int32 2474970770 # 0x93850e92 + .size args, 32 + + .hidden correct_results # @correct_results + .type correct_results,@object + .section .data.correct_results,"aw",@progbits + .globl correct_results + .p2align 4 +correct_results: + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .int32 140 # 0x8c + .int32 13 # 0xd + .size correct_results, 2560 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/compare-1.c.s b/src/binaryen/test/torture-s/compare-1.c.s new file mode 100644 index 0000000000..8ba7427c22 --- /dev/null +++ b/src/binaryen/test/torture-s/compare-1.c.s @@ -0,0 +1,246 @@ + .text + .file "compare-1.c" + .section .text.ieq,"ax",@progbits + .hidden ieq # -- Begin function ieq + .globl ieq + .type ieq,@function +ieq: # @ieq + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + block + block + block + block + i32.ne $push1=, $0, $1 + tee_local $push0=, $0=, $pop1 + i32.eqz $push2=, $pop0 + br_if 0, $pop2 # 0: down to label3 +# BB#1: # %if.else + br_if 2, $2 # 2: down to label1 + br 1 # 1: down to label2 +.LBB0_2: # %if.then + end_block # label3: + i32.eqz $push3=, $2 + br_if 1, $pop3 # 1: down to label1 +.LBB0_3: # %if.end6 + end_block # label2: + block + block + br_if 0, $0 # 0: down to label5 +# BB#4: # %if.then10 + i32.eqz $push4=, $2 + br_if 2, $pop4 # 2: down to label1 + br 1 # 1: down to label4 +.LBB0_5: # %if.else14 + end_block # label5: + br_if 1, $2 # 1: down to label1 +.LBB0_6: # %if.end18 + end_block # label4: + block + block + i32.eqz $push5=, $0 + br_if 0, $pop5 # 0: down to label7 +# BB#7: # %if.else26 + br_if 2, $2 # 2: down to label1 + br 1 # 1: down to label6 +.LBB0_8: # %if.then22 + end_block # label7: + i32.eqz $push6=, $2 + br_if 1, $pop6 # 1: down to label1 +.LBB0_9: # %if.end30 + end_block # label6: + block + br_if 0, $0 # 0: down to label8 +# BB#10: # %if.then34 + i32.eqz $push7=, $2 + br_if 1, $pop7 # 1: down to label1 + br 2 # 2: down to label0 +.LBB0_11: # %if.else38 + end_block # label8: + i32.eqz $push8=, $2 + br_if 1, $pop8 # 1: down to label0 +.LBB0_12: # %if.then2 + end_block # label1: + call abort@FUNCTION + unreachable +.LBB0_13: # %if.end42 + end_block # label0: + copy_local $push9=, $2 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end0: + .size ieq, .Lfunc_end0-ieq + # -- End function + .section .text.ine,"ax",@progbits + .hidden ine # -- Begin function ine + .globl ine + .type ine,@function +ine: # @ine + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + block + block + block + i32.ne $push0=, $0, $1 + br_if 0, $pop0 # 0: down to label11 +# BB#1: # %if.else + i32.eqz $push1=, $2 + br_if 1, $pop1 # 1: down to label10 + br 2 # 2: down to label9 +.LBB1_2: # %if.then + end_block # label11: + i32.eqz $push2=, $2 + br_if 1, $pop2 # 1: down to label9 +.LBB1_3: # %if.end6 + end_block # label10: + return $2 +.LBB1_4: # %if.then2 + end_block # label9: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size ine, .Lfunc_end1-ine + # -- End function + .section .text.ilt,"ax",@progbits + .hidden ilt # -- Begin function ilt + .globl ilt + .type ilt,@function +ilt: # @ilt + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + block + block + block + i32.ge_s $push0=, $0, $1 + br_if 0, $pop0 # 0: down to label14 +# BB#1: # %if.then + br_if 1, $2 # 1: down to label13 + br 2 # 2: down to label12 +.LBB2_2: # %if.else + end_block # label14: + br_if 1, $2 # 1: down to label12 +.LBB2_3: # %if.end6 + end_block # label13: + return $2 +.LBB2_4: # %if.then2 + end_block # label12: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size ilt, .Lfunc_end2-ilt + # -- End function + .section .text.ile,"ax",@progbits + .hidden ile # -- Begin function ile + .globl ile + .type ile,@function +ile: # @ile + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + block + block + block + i32.le_s $push0=, $0, $1 + br_if 0, $pop0 # 0: down to label17 +# BB#1: # %if.else + i32.eqz $push1=, $2 + br_if 1, $pop1 # 1: down to label16 + br 2 # 2: down to label15 +.LBB3_2: # %if.then + end_block # label17: + i32.eqz $push2=, $2 + br_if 1, $pop2 # 1: down to label15 +.LBB3_3: # %if.end6 + end_block # label16: + return $2 +.LBB3_4: # %if.then2 + end_block # label15: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size ile, .Lfunc_end3-ile + # -- End function + .section .text.igt,"ax",@progbits + .hidden igt # -- Begin function igt + .globl igt + .type igt,@function +igt: # @igt + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + block + block + block + i32.le_s $push0=, $0, $1 + br_if 0, $pop0 # 0: down to label20 +# BB#1: # %if.then + br_if 1, $2 # 1: down to label19 + br 2 # 2: down to label18 +.LBB4_2: # %if.else + end_block # label20: + br_if 1, $2 # 1: down to label18 +.LBB4_3: # %if.end6 + end_block # label19: + return $2 +.LBB4_4: # %if.then2 + end_block # label18: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end4: + .size igt, .Lfunc_end4-igt + # -- End function + .section .text.ige,"ax",@progbits + .hidden ige # -- Begin function ige + .globl ige + .type ige,@function +ige: # @ige + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + block + block + block + i32.ge_s $push0=, $0, $1 + br_if 0, $pop0 # 0: down to label23 +# BB#1: # %if.else + i32.eqz $push1=, $2 + br_if 1, $pop1 # 1: down to label22 + br 2 # 2: down to label21 +.LBB5_2: # %if.then + end_block # label23: + i32.eqz $push2=, $2 + br_if 1, $pop2 # 1: down to label21 +.LBB5_3: # %if.end6 + end_block # label22: + return $2 +.LBB5_4: # %if.then2 + end_block # label21: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end5: + .size ige, .Lfunc_end5-ige + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end6: + .size main, .Lfunc_end6-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/compare-2.c.s b/src/binaryen/test/torture-s/compare-2.c.s new file mode 100644 index 0000000000..6362c88a4c --- /dev/null +++ b/src/binaryen/test/torture-s/compare-2.c.s @@ -0,0 +1,33 @@ + .text + .file "compare-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.ge_u $push1=, $0, $1 + i32.le_s $push0=, $0, $1 + i32.and $push2=, $pop1, $pop0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/compare-3.c.s b/src/binaryen/test/torture-s/compare-3.c.s new file mode 100644 index 0000000000..76278182dc --- /dev/null +++ b/src/binaryen/test/torture-s/compare-3.c.s @@ -0,0 +1,101 @@ + .text + .file "compare-3.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end1: + .size test2, .Lfunc_end1-test2 + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .param i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end2: + .size test3, .Lfunc_end2-test3 + # -- End function + .section .text.test4,"ax",@progbits + .hidden test4 # -- Begin function test4 + .globl test4 + .type test4,@function +test4: # @test4 + .param i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end3: + .size test4, .Lfunc_end3-test4 + # -- End function + .section .text.test5,"ax",@progbits + .hidden test5 # -- Begin function test5 + .globl test5 + .type test5,@function +test5: # @test5 + .param i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end4: + .size test5, .Lfunc_end4-test5 + # -- End function + .section .text.test6,"ax",@progbits + .hidden test6 # -- Begin function test6 + .globl test6 + .type test6,@function +test6: # @test6 + .param i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end5: + .size test6, .Lfunc_end5-test6 + # -- End function + .section .text.all_tests,"ax",@progbits + .hidden all_tests # -- Begin function all_tests + .globl all_tests + .type all_tests,@function +all_tests: # @all_tests + .param i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end6: + .size all_tests, .Lfunc_end6-all_tests + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end7: + .size main, .Lfunc_end7-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/complex-1.c.s b/src/binaryen/test/torture-s/complex-1.c.s new file mode 100644 index 0000000000..814659fc27 --- /dev/null +++ b/src/binaryen/test/torture-s/complex-1.c.s @@ -0,0 +1,77 @@ + .text + .file "complex-1.c" + .section .text.g0,"ax",@progbits + .hidden g0 # -- Begin function g0 + .globl g0 + .type g0,@function +g0: # @g0 + .param f64 + .result f64 +# BB#0: # %entry + f64.const $push0=, 0x1p0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size g0, .Lfunc_end0-g0 + # -- End function + .section .text.g1,"ax",@progbits + .hidden g1 # -- Begin function g1 + .globl g1 + .type g1,@function +g1: # @g1 + .param f64 + .result f64 +# BB#0: # %entry + f64.const $push0=, -0x1p0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size g1, .Lfunc_end1-g1 + # -- End function + .section .text.g2,"ax",@progbits + .hidden g2 # -- Begin function g2 + .globl g2 + .type g2,@function +g2: # @g2 + .param f64 + .result f64 +# BB#0: # %entry + f64.const $push0=, 0x0p0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size g2, .Lfunc_end2-g2 + # -- End function + .section .text.xcexp,"ax",@progbits + .hidden xcexp # -- Begin function xcexp + .globl xcexp + .type xcexp,@function +xcexp: # @xcexp + .param i32, i32 +# BB#0: # %entry + i64.const $push0=, 0 + i64.store 8($0), $pop0 + i64.const $push1=, -4616189618054758400 + i64.store 0($0), $pop1 + # fallthrough-return + .endfunc +.Lfunc_end3: + .size xcexp, .Lfunc_end3-xcexp + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end5 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/complex-2.c.s b/src/binaryen/test/torture-s/complex-2.c.s new file mode 100644 index 0000000000..120891cc5f --- /dev/null +++ b/src/binaryen/test/torture-s/complex-2.c.s @@ -0,0 +1,77 @@ + .text + .file "complex-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32 +# BB#0: # %entry + f64.load $push1=, 0($2) + f64.load $push0=, 0($1) + f64.add $push2=, $pop1, $pop0 + f64.store 0($0), $pop2 + f64.load $push4=, 8($2) + f64.load $push3=, 8($1) + f64.add $push5=, $pop4, $pop3 + f64.store 8($0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push6=, 0 + f64.load $push1=, ag($pop6) + f64.const $push5=, 0x1p0 + f64.ne $push2=, $pop1, $pop5 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %entry + i32.const $push8=, 0 + f64.load $push0=, ag+8($pop8) + f64.const $push7=, 0x1p0 + f64.ne $push3=, $pop0, $pop7 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %if.end25 + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable +.LBB1_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden ag # @ag + .type ag,@object + .section .data.ag,"aw",@progbits + .globl ag + .p2align 3 +ag: + .int64 4607182418800017408 # double 1 + .int64 4607182418800017408 # double 1 + .size ag, 16 + + .hidden bg # @bg + .type bg,@object + .section .data.bg,"aw",@progbits + .globl bg + .p2align 3 +bg: + .int64 -4611686018427387904 # double -2 + .int64 4611686018427387904 # double 2 + .size bg, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/complex-3.c.s b/src/binaryen/test/torture-s/complex-3.c.s new file mode 100644 index 0000000000..68239cb1c1 --- /dev/null +++ b/src/binaryen/test/torture-s/complex-3.c.s @@ -0,0 +1,33 @@ + .text + .file "complex-3.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, f32, f32 +# BB#0: # %entry + f32.store 4($0), $2 + f32.store 0($0), $1 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/complex-4.c.s b/src/binaryen/test/torture-s/complex-4.c.s new file mode 100644 index 0000000000..d29b7ec912 --- /dev/null +++ b/src/binaryen/test/torture-s/complex-4.c.s @@ -0,0 +1,19 @@ + .text + .file "complex-4.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/complex-5.c.s b/src/binaryen/test/torture-s/complex-5.c.s new file mode 100644 index 0000000000..de353198f6 --- /dev/null +++ b/src/binaryen/test/torture-s/complex-5.c.s @@ -0,0 +1,138 @@ + .text + .file "complex-5.c" + .section .text.p,"ax",@progbits + .hidden p # -- Begin function p + .globl p + .type p,@function +p: # @p + .param i32, i32, i32 +# BB#0: # %entry + f32.load $push1=, 0($1) + f32.load $push0=, 0($2) + f32.add $push2=, $pop1, $pop0 + f32.store 0($0), $pop2 + f32.load $push4=, 4($1) + f32.load $push3=, 4($2) + f32.add $push5=, $pop4, $pop3 + f32.store 4($0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size p, .Lfunc_end0-p + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local f32, f32, f32, f32, i32 +# BB#0: # %entry + i32.const $push18=, 0 + i32.const $push16=, 0 + i32.load $push15=, __stack_pointer($pop16) + i32.const $push17=, 16 + i32.sub $push40=, $pop15, $pop17 + tee_local $push39=, $4=, $pop40 + i32.store __stack_pointer($pop18), $pop39 + i32.const $push38=, 0 + i32.const $push37=, 0 + f32.load $push36=, x($pop37) + tee_local $push35=, $0=, $pop36 + i32.const $push34=, 0 + f32.load $push2=, y($pop34) + f32.add $push33=, $pop35, $pop2 + tee_local $push32=, $1=, $pop33 + f32.store z($pop38), $pop32 + i32.const $push31=, 0 + i32.const $push30=, 0 + f32.load $push29=, x+4($pop30) + tee_local $push28=, $2=, $pop29 + i32.const $push27=, 0 + f32.load $push3=, y+4($pop27) + f32.add $push26=, $pop28, $pop3 + tee_local $push25=, $3=, $pop26 + f32.store z+4($pop31), $pop25 + i32.const $push19=, 8 + i32.add $push20=, $4, $pop19 + f32.const $push5=, 0x1p0 + f32.const $push4=, 0x0p0 + call __divsc3@FUNCTION, $pop20, $pop5, $pop4, $1, $3 + i32.const $push24=, 0 + f32.load $push6=, 8($4) + f32.add $push7=, $0, $pop6 + f32.store y($pop24), $pop7 + i32.const $push23=, 0 + f32.load $push8=, 12($4) + f32.add $push9=, $2, $pop8 + f32.store y+4($pop23), $pop9 + block + i32.const $push22=, 0 + f32.load $push11=, z($pop22) + i32.const $push21=, 0 + f32.load $push10=, w($pop21) + f32.ne $push12=, $pop11, $pop10 + br_if 0, $pop12 # 0: down to label0 +# BB#1: # %entry + i32.const $push42=, 0 + f32.load $push0=, z+4($pop42) + i32.const $push41=, 0 + f32.load $push1=, w+4($pop41) + f32.ne $push13=, $pop0, $pop1 + br_if 0, $pop13 # 0: down to label0 +# BB#2: # %if.end + i32.const $push14=, 0 + call exit@FUNCTION, $pop14 + unreachable +.LBB1_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 2 +x: + .int32 1065353216 # float 1 + .int32 1096810496 # float 14 + .size x, 8 + + .hidden y # @y + .type y,@object + .section .data.y,"aw",@progbits + .globl y + .p2align 2 +y: + .int32 1088421888 # float 7 + .int32 1084227584 # float 5 + .size y, 8 + + .hidden w # @w + .type w,@object + .section .data.w,"aw",@progbits + .globl w + .p2align 2 +w: + .int32 1090519040 # float 8 + .int32 1100480512 # float 19 + .size w, 8 + + .hidden z # @z + .type z,@object + .section .bss.z,"aw",@nobits + .globl z + .p2align 2 +z: + .skip 8 + .size z, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype __divsc3, void, i32, f32, f32, f32, f32 + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/complex-6.c.s b/src/binaryen/test/torture-s/complex-6.c.s new file mode 100644 index 0000000000..0589cb7709 --- /dev/null +++ b/src/binaryen/test/torture-s/complex-6.c.s @@ -0,0 +1,201 @@ + .text + .file "complex-6.c" + .section .text.ctest_float,"ax",@progbits + .hidden ctest_float # -- Begin function ctest_float + .globl ctest_float + .type ctest_float,@function +ctest_float: # @ctest_float + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.store 0($0), $pop0 + f32.load $push1=, 4($1) + f32.neg $push2=, $pop1 + f32.store 4($0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size ctest_float, .Lfunc_end0-ctest_float + # -- End function + .section .text.test_float,"ax",@progbits + .hidden test_float # -- Begin function test_float + .globl test_float + .type test_float,@function +test_float: # @test_float +# BB#0: # %if.end + # fallthrough-return + .endfunc +.Lfunc_end1: + .size test_float, .Lfunc_end1-test_float + # -- End function + .section .text.ctest_double,"ax",@progbits + .hidden ctest_double # -- Begin function ctest_double + .globl ctest_double + .type ctest_double,@function +ctest_double: # @ctest_double + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 0($0), $pop0 + f64.load $push1=, 8($1) + f64.neg $push2=, $pop1 + f64.store 8($0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size ctest_double, .Lfunc_end2-ctest_double + # -- End function + .section .text.test_double,"ax",@progbits + .hidden test_double # -- Begin function test_double + .globl test_double + .type test_double,@function +test_double: # @test_double +# BB#0: # %if.end + # fallthrough-return + .endfunc +.Lfunc_end3: + .size test_double, .Lfunc_end3-test_double + # -- End function + .section .text.ctest_long_double,"ax",@progbits + .hidden ctest_long_double # -- Begin function ctest_long_double + .globl ctest_long_double + .type ctest_long_double,@function +ctest_long_double: # @ctest_long_double + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push18=, 0 + i32.const $push16=, 0 + i32.load $push15=, __stack_pointer($pop16) + i32.const $push17=, 16 + i32.sub $push26=, $pop15, $pop17 + tee_local $push25=, $2=, $pop26 + i32.store __stack_pointer($pop18), $pop25 + i64.const $push5=, 0 + i64.const $push4=, -9223372036854775808 + i64.load $push3=, 16($1) + i32.const $push0=, 24 + i32.add $push1=, $1, $pop0 + i64.load $push2=, 0($pop1) + call __subtf3@FUNCTION, $2, $pop5, $pop4, $pop3, $pop2 + i64.load $push6=, 0($1) + i64.store 0($0), $pop6 + i32.const $push7=, 8 + i32.add $push8=, $0, $pop7 + i32.const $push24=, 8 + i32.add $push9=, $1, $pop24 + i64.load $push10=, 0($pop9) + i64.store 0($pop8), $pop10 + i32.const $push23=, 24 + i32.add $push11=, $0, $pop23 + i32.const $push22=, 8 + i32.add $push12=, $2, $pop22 + i64.load $push13=, 0($pop12) + i64.store 0($pop11), $pop13 + i64.load $push14=, 0($2) + i64.store 16($0), $pop14 + i32.const $push21=, 0 + i32.const $push19=, 16 + i32.add $push20=, $2, $pop19 + i32.store __stack_pointer($pop21), $pop20 + # fallthrough-return + .endfunc +.Lfunc_end4: + .size ctest_long_double, .Lfunc_end4-ctest_long_double + # -- End function + .section .text.test_long_double,"ax",@progbits + .hidden test_long_double # -- Begin function test_long_double + .globl test_long_double + .type test_long_double,@function +test_long_double: # @test_long_double +# BB#0: # %if.end + # fallthrough-return + .endfunc +.Lfunc_end5: + .size test_long_double, .Lfunc_end5-test_long_double + # -- End function + .section .text.ctest_int,"ax",@progbits + .hidden ctest_int # -- Begin function ctest_int + .globl ctest_int + .type ctest_int,@function +ctest_int: # @ctest_int + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.store 0($0), $pop0 + i32.const $push2=, 0 + i32.load $push1=, 4($1) + i32.sub $push3=, $pop2, $pop1 + i32.store 4($0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end6: + .size ctest_int, .Lfunc_end6-ctest_int + # -- End function + .section .text.test_int,"ax",@progbits + .hidden test_int # -- Begin function test_int + .globl test_int + .type test_int,@function +test_int: # @test_int +# BB#0: # %if.end + # fallthrough-return + .endfunc +.Lfunc_end7: + .size test_int, .Lfunc_end7-test_int + # -- End function + .section .text.ctest_long_int,"ax",@progbits + .hidden ctest_long_int # -- Begin function ctest_long_int + .globl ctest_long_int + .type ctest_long_int,@function +ctest_long_int: # @ctest_long_int + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.store 0($0), $pop0 + i32.const $push2=, 0 + i32.load $push1=, 4($1) + i32.sub $push3=, $pop2, $pop1 + i32.store 4($0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end8: + .size ctest_long_int, .Lfunc_end8-ctest_long_int + # -- End function + .section .text.test_long_int,"ax",@progbits + .hidden test_long_int # -- Begin function test_long_int + .globl test_long_int + .type test_long_int,@function +test_long_int: # @test_long_int +# BB#0: # %if.end + # fallthrough-return + .endfunc +.Lfunc_end9: + .size test_long_int, .Lfunc_end9-test_long_int + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + i32.const $push2=, 0 + i32.store err($pop0), $pop2 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end10: + .size main, .Lfunc_end10-main + # -- End function + .hidden err # @err + .type err,@object + .section .bss.err,"aw",@nobits + .globl err + .p2align 2 +err: + .int32 0 # 0x0 + .size err, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/complex-7.c.s b/src/binaryen/test/torture-s/complex-7.c.s new file mode 100644 index 0000000000..8164539f2c --- /dev/null +++ b/src/binaryen/test/torture-s/complex-7.c.s @@ -0,0 +1,774 @@ + .text + .file "complex-7.c" + .section .text.check_float,"ax",@progbits + .hidden check_float # -- Begin function check_float + .globl check_float + .type check_float,@function +check_float: # @check_float + .param i32, i32, i32, i32, i32, i32 + .local f32, f32, f32, f32 +# BB#0: # %entry + i32.const $push0=, 0 + f32.load $8=, f1($pop0) + f32.load $9=, 0($1) + f32.load $6=, 4($1) + i32.const $push15=, 0 + f32.load $7=, f1+4($pop15) + block + f32.ne $push1=, $9, $8 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %entry + f32.ne $push2=, $6, $7 + br_if 0, $pop2 # 0: down to label0 +# BB#2: # %lor.lhs.false + i32.const $push3=, 0 + f32.load $8=, f2($pop3) + f32.load $9=, 0($2) + f32.load $6=, 4($2) + i32.const $push16=, 0 + f32.load $7=, f2+4($pop16) + f32.ne $push4=, $9, $8 + br_if 0, $pop4 # 0: down to label0 +# BB#3: # %lor.lhs.false + f32.ne $push5=, $6, $7 + br_if 0, $pop5 # 0: down to label0 +# BB#4: # %lor.lhs.false4 + i32.const $push6=, 0 + f32.load $8=, f3($pop6) + f32.load $9=, 0($3) + f32.load $6=, 4($3) + i32.const $push17=, 0 + f32.load $7=, f3+4($pop17) + f32.ne $push7=, $9, $8 + br_if 0, $pop7 # 0: down to label0 +# BB#5: # %lor.lhs.false4 + f32.ne $push8=, $6, $7 + br_if 0, $pop8 # 0: down to label0 +# BB#6: # %lor.lhs.false8 + i32.const $push9=, 0 + f32.load $8=, f4($pop9) + f32.load $9=, 0($4) + f32.load $6=, 4($4) + i32.const $push18=, 0 + f32.load $7=, f4+4($pop18) + f32.ne $push10=, $9, $8 + br_if 0, $pop10 # 0: down to label0 +# BB#7: # %lor.lhs.false8 + f32.ne $push11=, $6, $7 + br_if 0, $pop11 # 0: down to label0 +# BB#8: # %lor.lhs.false12 + i32.const $push12=, 0 + f32.load $8=, f5($pop12) + f32.load $9=, 0($5) + f32.load $6=, 4($5) + i32.const $push19=, 0 + f32.load $7=, f5+4($pop19) + f32.ne $push13=, $9, $8 + br_if 0, $pop13 # 0: down to label0 +# BB#9: # %lor.lhs.false12 + f32.ne $push14=, $6, $7 + br_if 0, $pop14 # 0: down to label0 +# BB#10: # %if.end + return +.LBB0_11: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size check_float, .Lfunc_end0-check_float + # -- End function + .section .text.check_double,"ax",@progbits + .hidden check_double # -- Begin function check_double + .globl check_double + .type check_double,@function +check_double: # @check_double + .param i32, i32, i32, i32, i32, i32 + .local f64, f64, f64, f64 +# BB#0: # %entry + i32.const $push0=, 0 + f64.load $8=, d1($pop0) + f64.load $9=, 0($1) + f64.load $6=, 8($1) + i32.const $push15=, 0 + f64.load $7=, d1+8($pop15) + block + f64.ne $push1=, $9, $8 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %entry + f64.ne $push2=, $6, $7 + br_if 0, $pop2 # 0: down to label1 +# BB#2: # %lor.lhs.false + i32.const $push3=, 0 + f64.load $8=, d2($pop3) + f64.load $9=, 0($2) + f64.load $6=, 8($2) + i32.const $push16=, 0 + f64.load $7=, d2+8($pop16) + f64.ne $push4=, $9, $8 + br_if 0, $pop4 # 0: down to label1 +# BB#3: # %lor.lhs.false + f64.ne $push5=, $6, $7 + br_if 0, $pop5 # 0: down to label1 +# BB#4: # %lor.lhs.false4 + i32.const $push6=, 0 + f64.load $8=, d3($pop6) + f64.load $9=, 0($3) + f64.load $6=, 8($3) + i32.const $push17=, 0 + f64.load $7=, d3+8($pop17) + f64.ne $push7=, $9, $8 + br_if 0, $pop7 # 0: down to label1 +# BB#5: # %lor.lhs.false4 + f64.ne $push8=, $6, $7 + br_if 0, $pop8 # 0: down to label1 +# BB#6: # %lor.lhs.false8 + i32.const $push9=, 0 + f64.load $8=, d4($pop9) + f64.load $9=, 0($4) + f64.load $6=, 8($4) + i32.const $push18=, 0 + f64.load $7=, d4+8($pop18) + f64.ne $push10=, $9, $8 + br_if 0, $pop10 # 0: down to label1 +# BB#7: # %lor.lhs.false8 + f64.ne $push11=, $6, $7 + br_if 0, $pop11 # 0: down to label1 +# BB#8: # %lor.lhs.false12 + i32.const $push12=, 0 + f64.load $8=, d5($pop12) + f64.load $9=, 0($5) + f64.load $6=, 8($5) + i32.const $push19=, 0 + f64.load $7=, d5+8($pop19) + f64.ne $push13=, $9, $8 + br_if 0, $pop13 # 0: down to label1 +# BB#9: # %lor.lhs.false12 + f64.ne $push14=, $6, $7 + br_if 0, $pop14 # 0: down to label1 +# BB#10: # %if.end + return +.LBB1_11: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size check_double, .Lfunc_end1-check_double + # -- End function + .section .text.check_long_double,"ax",@progbits + .hidden check_long_double # -- Begin function check_long_double + .globl check_long_double + .type check_long_double,@function +check_long_double: # @check_long_double + .param i32, i32, i32, i32, i32, i32 + .local i64, i64, i64, i64, i32 +# BB#0: # %entry + i32.const $push0=, 8 + i32.add $push1=, $1, $pop0 + i64.load $7=, 0($pop1) + i32.const $push2=, 0 + i64.load $8=, ld1+8($pop2) + i32.const $push37=, 0 + i64.load $9=, ld1($pop37) + i64.load $push3=, 0($1) + i32.call $10=, __netf2@FUNCTION, $pop3, $7, $9, $8 + i32.const $push4=, 24 + i32.add $push5=, $1, $pop4 + i64.load $7=, 0($pop5) + i64.load $8=, 16($1) + i32.const $push36=, 0 + i64.load $9=, ld1+24($pop36) + i32.const $push35=, 0 + i64.load $6=, ld1+16($pop35) + block + br_if 0, $10 # 0: down to label2 +# BB#1: # %entry + i32.call $push6=, __netf2@FUNCTION, $8, $7, $6, $9 + br_if 0, $pop6 # 0: down to label2 +# BB#2: # %lor.lhs.false + i32.const $push7=, 8 + i32.add $push8=, $2, $pop7 + i64.load $7=, 0($pop8) + i32.const $push9=, 0 + i64.load $8=, ld2+8($pop9) + i32.const $push40=, 0 + i64.load $9=, ld2($pop40) + i64.load $push10=, 0($2) + i32.call $1=, __netf2@FUNCTION, $pop10, $7, $9, $8 + i32.const $push11=, 24 + i32.add $push12=, $2, $pop11 + i64.load $7=, 0($pop12) + i64.load $8=, 16($2) + i32.const $push39=, 0 + i64.load $9=, ld2+24($pop39) + i32.const $push38=, 0 + i64.load $6=, ld2+16($pop38) + br_if 0, $1 # 0: down to label2 +# BB#3: # %lor.lhs.false + i32.call $push13=, __netf2@FUNCTION, $8, $7, $6, $9 + br_if 0, $pop13 # 0: down to label2 +# BB#4: # %lor.lhs.false4 + i32.const $push14=, 8 + i32.add $push15=, $3, $pop14 + i64.load $7=, 0($pop15) + i32.const $push16=, 0 + i64.load $8=, ld3+8($pop16) + i32.const $push43=, 0 + i64.load $9=, ld3($pop43) + i64.load $push17=, 0($3) + i32.call $2=, __netf2@FUNCTION, $pop17, $7, $9, $8 + i32.const $push18=, 24 + i32.add $push19=, $3, $pop18 + i64.load $7=, 0($pop19) + i64.load $8=, 16($3) + i32.const $push42=, 0 + i64.load $9=, ld3+24($pop42) + i32.const $push41=, 0 + i64.load $6=, ld3+16($pop41) + br_if 0, $2 # 0: down to label2 +# BB#5: # %lor.lhs.false4 + i32.call $push20=, __netf2@FUNCTION, $8, $7, $6, $9 + br_if 0, $pop20 # 0: down to label2 +# BB#6: # %lor.lhs.false8 + i32.const $push21=, 8 + i32.add $push22=, $4, $pop21 + i64.load $7=, 0($pop22) + i32.const $push23=, 0 + i64.load $8=, ld4+8($pop23) + i32.const $push46=, 0 + i64.load $9=, ld4($pop46) + i64.load $push24=, 0($4) + i32.call $2=, __netf2@FUNCTION, $pop24, $7, $9, $8 + i32.const $push25=, 24 + i32.add $push26=, $4, $pop25 + i64.load $7=, 0($pop26) + i64.load $8=, 16($4) + i32.const $push45=, 0 + i64.load $9=, ld4+24($pop45) + i32.const $push44=, 0 + i64.load $6=, ld4+16($pop44) + br_if 0, $2 # 0: down to label2 +# BB#7: # %lor.lhs.false8 + i32.call $push27=, __netf2@FUNCTION, $8, $7, $6, $9 + br_if 0, $pop27 # 0: down to label2 +# BB#8: # %lor.lhs.false12 + i32.const $push28=, 8 + i32.add $push29=, $5, $pop28 + i64.load $7=, 0($pop29) + i32.const $push30=, 0 + i64.load $8=, ld5+8($pop30) + i32.const $push49=, 0 + i64.load $9=, ld5($pop49) + i64.load $push31=, 0($5) + i32.call $2=, __netf2@FUNCTION, $pop31, $7, $9, $8 + i32.const $push32=, 24 + i32.add $push33=, $5, $pop32 + i64.load $7=, 0($pop33) + i64.load $8=, 16($5) + i32.const $push48=, 0 + i64.load $9=, ld5+24($pop48) + i32.const $push47=, 0 + i64.load $6=, ld5+16($pop47) + br_if 0, $2 # 0: down to label2 +# BB#9: # %lor.lhs.false12 + i32.call $push34=, __eqtf2@FUNCTION, $8, $7, $6, $9 + br_if 0, $pop34 # 0: down to label2 +# BB#10: # %if.end + return +.LBB2_11: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size check_long_double, .Lfunc_end2-check_long_double + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local f32, f64, f64, f64, f64, f64, f64, f64, f64, f64, i64, i64, i32, i64, i64, i64, i32, i64, i64, i64, i32, i64, i64, i64, i32, i32, i32 +# BB#0: # %entry + i32.const $push75=, 0 + i32.const $push73=, 0 + i32.load $push72=, __stack_pointer($pop73) + i32.const $push74=, 576 + i32.sub $push208=, $pop72, $pop74 + tee_local $push207=, $26=, $pop208 + i32.store __stack_pointer($pop75), $pop207 + i32.const $push0=, 0 + f32.load $push1=, f1($pop0) + f32.store 568($26), $pop1 + i32.const $push206=, 0 + f32.load $push2=, f1+4($pop206) + f32.store 572($26), $pop2 + i32.const $push205=, 0 + f32.load $push3=, f2($pop205) + f32.store 560($26), $pop3 + i32.const $push204=, 0 + f32.load $push4=, f2+4($pop204) + f32.store 564($26), $pop4 + i32.const $push203=, 0 + f32.load $push5=, f3($pop203) + f32.store 552($26), $pop5 + i32.const $push202=, 0 + f32.load $push6=, f3+4($pop202) + f32.store 556($26), $pop6 + i32.const $push201=, 0 + f32.load $push7=, f4($pop201) + f32.store 544($26), $pop7 + i32.const $push200=, 0 + f32.load $push8=, f4+4($pop200) + f32.store 548($26), $pop8 + i32.const $push199=, 0 + f32.load $push9=, f5($pop199) + f32.store 536($26), $pop9 + i32.const $push198=, 0 + f32.load $0=, f5+4($pop198) + i64.load $push10=, 568($26) + i64.store 280($26), $pop10 + f32.store 540($26), $0 + i64.load $push11=, 560($26) + i64.store 272($26), $pop11 + i64.load $push12=, 552($26) + i64.store 264($26), $pop12 + i64.load $push13=, 544($26) + i64.store 256($26), $pop13 + i64.load $push14=, 536($26) + i64.store 248($26), $pop14 + i32.const $push76=, 280 + i32.add $push77=, $26, $pop76 + i32.const $push78=, 272 + i32.add $push79=, $26, $pop78 + i32.const $push80=, 264 + i32.add $push81=, $26, $pop80 + i32.const $push82=, 256 + i32.add $push83=, $26, $pop82 + i32.const $push84=, 248 + i32.add $push85=, $26, $pop84 + call check_float@FUNCTION, $26, $pop77, $pop79, $pop81, $pop83, $pop85 + i32.const $push197=, 0 + f64.load $1=, d1($pop197) + i32.const $push196=, 0 + f64.load $push15=, d1+8($pop196) + f64.store 528($26), $pop15 + i32.const $push195=, 0 + f64.load $2=, d2($pop195) + i32.const $push194=, 0 + f64.load $3=, d2+8($pop194) + i32.const $push193=, 0 + f64.load $4=, d3($pop193) + i32.const $push192=, 0 + f64.load $5=, d3+8($pop192) + i32.const $push191=, 0 + f64.load $6=, d4($pop191) + i32.const $push190=, 0 + f64.load $7=, d4+8($pop190) + i32.const $push189=, 0 + f64.load $8=, d5($pop189) + i32.const $push188=, 0 + f64.load $9=, d5+8($pop188) + i32.const $push86=, 232 + i32.add $push87=, $26, $pop86 + i32.const $push16=, 8 + i32.add $push17=, $pop87, $pop16 + i64.load $push18=, 528($26) + i64.store 0($pop17), $pop18 + f64.store 512($26), $3 + i32.const $push88=, 216 + i32.add $push89=, $26, $pop88 + i32.const $push187=, 8 + i32.add $push19=, $pop89, $pop187 + i64.load $push20=, 512($26) + i64.store 0($pop19), $pop20 + f64.store 520($26), $1 + f64.store 504($26), $2 + f64.store 488($26), $4 + f64.store 496($26), $5 + f64.store 472($26), $6 + f64.store 480($26), $7 + f64.store 456($26), $8 + f64.store 464($26), $9 + i64.load $push21=, 520($26) + i64.store 232($26), $pop21 + i64.load $push22=, 504($26) + i64.store 216($26), $pop22 + i32.const $push90=, 200 + i32.add $push91=, $26, $pop90 + i32.const $push186=, 8 + i32.add $push23=, $pop91, $pop186 + i64.load $push24=, 496($26) + i64.store 0($pop23), $pop24 + i64.load $push25=, 488($26) + i64.store 200($26), $pop25 + i32.const $push92=, 184 + i32.add $push93=, $26, $pop92 + i32.const $push185=, 8 + i32.add $push26=, $pop93, $pop185 + i64.load $push27=, 480($26) + i64.store 0($pop26), $pop27 + i64.load $push28=, 472($26) + i64.store 184($26), $pop28 + i32.const $push94=, 168 + i32.add $push95=, $26, $pop94 + i32.const $push184=, 8 + i32.add $push29=, $pop95, $pop184 + i64.load $push30=, 464($26) + i64.store 0($pop29), $pop30 + i64.load $push31=, 456($26) + i64.store 168($26), $pop31 + i32.const $push96=, 232 + i32.add $push97=, $26, $pop96 + i32.const $push98=, 216 + i32.add $push99=, $26, $pop98 + i32.const $push100=, 200 + i32.add $push101=, $26, $pop100 + i32.const $push102=, 184 + i32.add $push103=, $26, $pop102 + i32.const $push104=, 168 + i32.add $push105=, $26, $pop104 + call check_double@FUNCTION, $26, $pop97, $pop99, $pop101, $pop103, $pop105 + i32.const $push183=, 0 + i64.load $10=, ld1($pop183) + i32.const $push182=, 0 + i64.load $11=, ld1+8($pop182) + i32.const $push106=, 416 + i32.add $push107=, $26, $pop106 + i32.const $push32=, 24 + i32.add $push181=, $pop107, $pop32 + tee_local $push180=, $12=, $pop181 + i32.const $push179=, 0 + i64.load $push33=, ld1+24($pop179) + i64.store 0($pop180), $pop33 + i32.const $push178=, 0 + i64.load $13=, ld1+16($pop178) + i32.const $push177=, 0 + i64.load $14=, ld2($pop177) + i32.const $push176=, 0 + i64.load $15=, ld2+8($pop176) + i32.const $push108=, 384 + i32.add $push109=, $26, $pop108 + i32.const $push175=, 24 + i32.add $push174=, $pop109, $pop175 + tee_local $push173=, $16=, $pop174 + i32.const $push172=, 0 + i64.load $push34=, ld2+24($pop172) + i64.store 0($pop173), $pop34 + i32.const $push171=, 0 + i64.load $17=, ld2+16($pop171) + i32.const $push170=, 0 + i64.load $18=, ld3($pop170) + i32.const $push169=, 0 + i64.load $19=, ld3+8($pop169) + i32.const $push110=, 352 + i32.add $push111=, $26, $pop110 + i32.const $push168=, 24 + i32.add $push167=, $pop111, $pop168 + tee_local $push166=, $20=, $pop167 + i32.const $push165=, 0 + i64.load $push35=, ld3+24($pop165) + i64.store 0($pop166), $pop35 + i32.const $push164=, 0 + i64.load $21=, ld3+16($pop164) + i32.const $push163=, 0 + i64.load $22=, ld4($pop163) + i32.const $push162=, 0 + i64.load $23=, ld4+8($pop162) + i32.const $push112=, 320 + i32.add $push113=, $26, $pop112 + i32.const $push161=, 24 + i32.add $push160=, $pop113, $pop161 + tee_local $push159=, $24=, $pop160 + i32.const $push158=, 0 + i64.load $push36=, ld4+24($pop158) + i64.store 0($pop159), $pop36 + i64.store 424($26), $11 + i64.store 416($26), $10 + i64.store 432($26), $13 + i64.store 392($26), $15 + i64.store 384($26), $14 + i64.store 400($26), $17 + i64.store 360($26), $19 + i64.store 352($26), $18 + i64.store 368($26), $21 + i64.store 328($26), $23 + i64.store 320($26), $22 + i32.const $push157=, 0 + i64.load $push37=, ld4+16($pop157) + i64.store 336($26), $pop37 + i32.const $push156=, 0 + i64.load $push38=, ld5+8($pop156) + i64.store 296($26), $pop38 + i32.const $push155=, 0 + i64.load $push39=, ld5($pop155) + i64.store 288($26), $pop39 + i32.const $push154=, 0 + i64.load $10=, ld5+16($pop154) + i32.const $push114=, 288 + i32.add $push115=, $26, $pop114 + i32.const $push153=, 24 + i32.add $push152=, $pop115, $pop153 + tee_local $push151=, $25=, $pop152 + i32.const $push150=, 0 + i64.load $push40=, ld5+24($pop150) + i64.store 0($pop151), $pop40 + i32.const $push116=, 128 + i32.add $push117=, $26, $pop116 + i32.const $push149=, 24 + i32.add $push41=, $pop117, $pop149 + i64.load $push42=, 0($12) + i64.store 0($pop41), $pop42 + i32.const $push118=, 128 + i32.add $push119=, $26, $pop118 + i32.const $push43=, 16 + i32.add $push44=, $pop119, $pop43 + i64.load $push45=, 432($26) + i64.store 0($pop44), $pop45 + i64.store 304($26), $10 + i64.load $push46=, 416($26) + i64.store 128($26), $pop46 + i64.load $push47=, 424($26) + i64.store 136($26), $pop47 + i32.const $push120=, 96 + i32.add $push121=, $26, $pop120 + i32.const $push148=, 24 + i32.add $push48=, $pop121, $pop148 + i64.load $push49=, 0($16) + i64.store 0($pop48), $pop49 + i32.const $push122=, 96 + i32.add $push123=, $26, $pop122 + i32.const $push147=, 16 + i32.add $push50=, $pop123, $pop147 + i64.load $push51=, 400($26) + i64.store 0($pop50), $pop51 + i64.load $push52=, 392($26) + i64.store 104($26), $pop52 + i64.load $push53=, 384($26) + i64.store 96($26), $pop53 + i32.const $push124=, 64 + i32.add $push125=, $26, $pop124 + i32.const $push146=, 24 + i32.add $push54=, $pop125, $pop146 + i64.load $push55=, 0($20) + i64.store 0($pop54), $pop55 + i32.const $push126=, 64 + i32.add $push127=, $26, $pop126 + i32.const $push145=, 16 + i32.add $push56=, $pop127, $pop145 + i64.load $push57=, 368($26) + i64.store 0($pop56), $pop57 + i64.load $push58=, 360($26) + i64.store 72($26), $pop58 + i64.load $push59=, 352($26) + i64.store 64($26), $pop59 + i32.const $push128=, 32 + i32.add $push129=, $26, $pop128 + i32.const $push144=, 24 + i32.add $push60=, $pop129, $pop144 + i64.load $push61=, 0($24) + i64.store 0($pop60), $pop61 + i32.const $push130=, 32 + i32.add $push131=, $26, $pop130 + i32.const $push143=, 16 + i32.add $push62=, $pop131, $pop143 + i64.load $push63=, 336($26) + i64.store 0($pop62), $pop63 + i64.load $push64=, 328($26) + i64.store 40($26), $pop64 + i64.load $push65=, 320($26) + i64.store 32($26), $pop65 + i32.const $push142=, 24 + i32.add $push66=, $26, $pop142 + i64.load $push67=, 0($25) + i64.store 0($pop66), $pop67 + i32.const $push141=, 16 + i32.add $push68=, $26, $pop141 + i64.load $push69=, 304($26) + i64.store 0($pop68), $pop69 + i64.load $push70=, 296($26) + i64.store 8($26), $pop70 + i64.load $push71=, 288($26) + i64.store 0($26), $pop71 + i32.const $push132=, 128 + i32.add $push133=, $26, $pop132 + i32.const $push134=, 96 + i32.add $push135=, $26, $pop134 + i32.const $push136=, 64 + i32.add $push137=, $26, $pop136 + i32.const $push138=, 32 + i32.add $push139=, $26, $pop138 + call check_long_double@FUNCTION, $26, $pop133, $pop135, $pop137, $pop139, $26 + i32.const $push140=, 0 + call exit@FUNCTION, $pop140 + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden f1 # @f1 + .type f1,@object + .section .data.f1,"aw",@progbits + .globl f1 + .p2align 2 +f1: + .int32 1066192077 # float 1.10000002 + .int32 1074580685 # float 2.20000005 + .size f1, 8 + + .hidden f2 # @f2 + .type f2,@object + .section .data.f2,"aw",@progbits + .globl f2 + .p2align 2 +f2: + .int32 1079194419 # float 3.29999995 + .int32 1082969293 # float 4.4000001 + .size f2, 8 + + .hidden f3 # @f3 + .type f3,@object + .section .data.f3,"aw",@progbits + .globl f3 + .p2align 2 +f3: + .int32 1085276160 # float 5.5 + .int32 1087583027 # float 6.5999999 + .size f3, 8 + + .hidden f4 # @f4 + .type f4,@object + .section .data.f4,"aw",@progbits + .globl f4 + .p2align 2 +f4: + .int32 1089889894 # float 7.6999998 + .int32 1091357901 # float 8.80000019 + .size f4, 8 + + .hidden f5 # @f5 + .type f5,@object + .section .data.f5,"aw",@progbits + .globl f5 + .p2align 2 +f5: + .int32 1092511334 # float 9.89999961 + .int32 1092721050 # float 10.1000004 + .size f5, 8 + + .hidden d1 # @d1 + .type d1,@object + .section .data.d1,"aw",@progbits + .globl d1 + .p2align 3 +d1: + .int64 4607632778762754458 # double 1.1000000000000001 + .int64 4612136378390124954 # double 2.2000000000000002 + .size d1, 16 + + .hidden d2 # @d2 + .type d2,@object + .section .data.d2,"aw",@progbits + .globl d2 + .p2align 3 +d2: + .int64 4614613358185178726 # double 3.2999999999999998 + .int64 4616639978017495450 # double 4.4000000000000004 + .size d2, 16 + + .hidden d3 # @d3 + .type d3,@object + .section .data.d3,"aw",@progbits + .globl d3 + .p2align 3 +d3: + .int64 4617878467915022336 # double 5.5 + .int64 4619116957812549222 # double 6.5999999999999996 + .size d3, 16 + + .hidden d4 # @d4 + .type d4,@object + .section .data.d4,"aw",@progbits + .globl d4 + .p2align 3 +d4: + .int64 4620355447710076109 # double 7.7000000000000001 + .int64 4621143577644865946 # double 8.8000000000000007 + .size d4, 16 + + .hidden d5 # @d5 + .type d5,@object + .section .data.d5,"aw",@progbits + .globl d5 + .p2align 3 +d5: + .int64 4621762822593629389 # double 9.9000000000000003 + .int64 4621875412584313651 # double 10.1 + .size d5, 16 + + .hidden ld1 # @ld1 + .type ld1,@object + .section .data.ld1,"aw",@progbits + .globl ld1 + .p2align 4 +ld1: + .int64 -7378697629483820646 # fp128 1.10000000000000000000000000000000008 + .int64 4611432690948348313 + .int64 -7378697629483820646 # fp128 2.20000000000000000000000000000000015 + .int64 4611714165925058969 + .size ld1, 32 + + .hidden ld2 # @ld2 + .type ld2,@object + .section .data.ld2,"aw",@progbits + .globl ld2 + .p2align 4 +ld2: + .int64 7378697629483820646 # fp128 3.29999999999999999999999999999999985 + .int64 4611868977162249830 + .int64 -7378697629483820646 # fp128 4.40000000000000000000000000000000031 + .int64 4611995640901769625 + .size ld2, 32 + + .hidden ld3 # @ld3 + .type ld3,@object + .section .data.ld3,"aw",@progbits + .globl ld3 + .p2align 4 +ld3: + .int64 0 # fp128 5.5 + .int64 4612073046520365056 + .int64 7378697629483820646 # fp128 6.59999999999999999999999999999999969 + .int64 4612150452138960486 + .size ld3, 32 + + .hidden ld4 # @ld4 + .type ld4,@object + .section .data.ld4,"aw",@progbits + .globl ld4 + .p2align 4 +ld4: + .int64 -3689348814741910323 # fp128 7.70000000000000000000000000000000015 + .int64 4612227857757555916 + .int64 -7378697629483820646 # fp128 8.80000000000000000000000000000000062 + .int64 4612277115878480281 + .size ld4, 32 + + .hidden ld5 # @ld5 + .type ld5,@object + .section .data.ld5,"aw",@progbits + .globl ld5 + .p2align 4 +ld5: + .int64 -3689348814741910323 # fp128 9.9000000000000000000000000000000003 + .int64 4612315818687777996 + .int64 3689348814741910323 # fp128 10.0999999999999999999999999999999997 + .int64 4612322855562195763 + .size ld5, 32 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/compndlit-1.c.s b/src/binaryen/test/torture-s/compndlit-1.c.s new file mode 100644 index 0000000000..d881913db2 --- /dev/null +++ b/src/binaryen/test/torture-s/compndlit-1.c.s @@ -0,0 +1,53 @@ + .text + .file "compndlit-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push10=, 0 + i32.const $push5=, 160 + i32.const $push4=, 320 + i32.const $push9=, 0 + i32.load $push0=, x($pop9) + i32.const $push1=, 7 + i32.and $push2=, $pop0, $pop1 + i32.const $push3=, 1 + i32.eq $push8=, $pop2, $pop3 + tee_local $push7=, $0=, $pop8 + i32.select $push6=, $pop5, $pop4, $pop7 + i32.store x($pop10), $pop6 + block + i32.eqz $push12=, $0 + br_if 0, $pop12 # 0: down to label0 +# BB#1: # %if.end + i32.const $push11=, 0 + call exit@FUNCTION, $pop11 + unreachable +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 2 +x: + .int8 25 # 0x19 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .size x, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/const-addr-expr-1.c.s b/src/binaryen/test/torture-s/const-addr-expr-1.c.s new file mode 100644 index 0000000000..86ac2f3283 --- /dev/null +++ b/src/binaryen/test/torture-s/const-addr-expr-1.c.s @@ -0,0 +1,80 @@ + .text + .file "const-addr-expr-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push9=, 0 + i32.load $push0=, Upgd_minor_ID($pop9) + i32.load $push1=, 0($pop0) + i32.const $push2=, 2 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push10=, 0 + i32.load $push4=, Upgd_minor_ID1($pop10) + i32.load $push5=, 0($pop4) + i32.const $push6=, 1 + i32.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#2: # %if.end3 + i32.const $push8=, 0 + return $pop8 +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "1" + .size .L.str, 2 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "2" + .size .L.str.1, 2 + + .hidden Upgrade_items # @Upgrade_items + .type Upgrade_items,@object + .section .data.Upgrade_items,"aw",@progbits + .globl Upgrade_items + .p2align 4 +Upgrade_items: + .int32 1 # 0x1 + .int32 .L.str + .int32 2 # 0x2 + .int32 .L.str.1 + .skip 8 + .size Upgrade_items, 24 + + .hidden Upgd_minor_ID # @Upgd_minor_ID + .type Upgd_minor_ID,@object + .section .data.Upgd_minor_ID,"aw",@progbits + .globl Upgd_minor_ID + .p2align 2 +Upgd_minor_ID: + .int32 Upgrade_items+8 + .size Upgd_minor_ID, 4 + + .hidden Upgd_minor_ID1 # @Upgd_minor_ID1 + .type Upgd_minor_ID1,@object + .section .data.Upgd_minor_ID1,"aw",@progbits + .globl Upgd_minor_ID1 + .p2align 2 +Upgd_minor_ID1: + .int32 Upgrade_items + .size Upgd_minor_ID1, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/conversion.c.s b/src/binaryen/test/torture-s/conversion.c.s new file mode 100644 index 0000000000..a88d401b7e --- /dev/null +++ b/src/binaryen/test/torture-s/conversion.c.s @@ -0,0 +1,598 @@ + .text + .file "conversion.c" + .section .text.u2f,"ax",@progbits + .hidden u2f # -- Begin function u2f + .globl u2f + .type u2f,@function +u2f: # @u2f + .param i32 + .result f32 +# BB#0: # %entry + f32.convert_u/i32 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size u2f, .Lfunc_end0-u2f + # -- End function + .section .text.u2d,"ax",@progbits + .hidden u2d # -- Begin function u2d + .globl u2d + .type u2d,@function +u2d: # @u2d + .param i32 + .result f64 +# BB#0: # %entry + f64.convert_u/i32 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size u2d, .Lfunc_end1-u2d + # -- End function + .section .text.u2ld,"ax",@progbits + .hidden u2ld # -- Begin function u2ld + .globl u2ld + .type u2ld,@function +u2ld: # @u2ld + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push14=, $pop5, $pop7 + tee_local $push13=, $2=, $pop14 + i32.store __stack_pointer($pop8), $pop13 + call __floatunsitf@FUNCTION, $2, $1 + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i32.const $push12=, 8 + i32.add $push2=, $2, $pop12 + i64.load $push3=, 0($pop2) + i64.store 0($pop1), $pop3 + i64.load $push4=, 0($2) + i64.store 0($0), $pop4 + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $2, $pop9 + i32.store __stack_pointer($pop11), $pop10 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size u2ld, .Lfunc_end2-u2ld + # -- End function + .section .text.s2f,"ax",@progbits + .hidden s2f # -- Begin function s2f + .globl s2f + .type s2f,@function +s2f: # @s2f + .param i32 + .result f32 +# BB#0: # %entry + f32.convert_s/i32 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size s2f, .Lfunc_end3-s2f + # -- End function + .section .text.s2d,"ax",@progbits + .hidden s2d # -- Begin function s2d + .globl s2d + .type s2d,@function +s2d: # @s2d + .param i32 + .result f64 +# BB#0: # %entry + f64.convert_s/i32 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size s2d, .Lfunc_end4-s2d + # -- End function + .section .text.s2ld,"ax",@progbits + .hidden s2ld # -- Begin function s2ld + .globl s2ld + .type s2ld,@function +s2ld: # @s2ld + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push14=, $pop5, $pop7 + tee_local $push13=, $2=, $pop14 + i32.store __stack_pointer($pop8), $pop13 + call __floatsitf@FUNCTION, $2, $1 + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i32.const $push12=, 8 + i32.add $push2=, $2, $pop12 + i64.load $push3=, 0($pop2) + i64.store 0($pop1), $pop3 + i64.load $push4=, 0($2) + i64.store 0($0), $pop4 + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $2, $pop9 + i32.store __stack_pointer($pop11), $pop10 + # fallthrough-return + .endfunc +.Lfunc_end5: + .size s2ld, .Lfunc_end5-s2ld + # -- End function + .section .text.fnear,"ax",@progbits + .hidden fnear # -- Begin function fnear + .globl fnear + .type fnear,@function +fnear: # @fnear + .param f32, f32 + .result i32 +# BB#0: # %entry + block + f32.sub $push6=, $0, $1 + tee_local $push5=, $1=, $pop6 + f32.const $push0=, 0x0p0 + f32.ne $push1=, $pop5, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %lor.end + i32.const $push7=, 1 + return $pop7 +.LBB6_2: # %lor.rhs + end_block # label0: + f32.div $push2=, $0, $1 + f32.const $push3=, 0x1.e848p19 + f32.gt $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end6: + .size fnear, .Lfunc_end6-fnear + # -- End function + .section .text.dnear,"ax",@progbits + .hidden dnear # -- Begin function dnear + .globl dnear + .type dnear,@function +dnear: # @dnear + .param f64, f64 + .result i32 +# BB#0: # %entry + block + f64.sub $push6=, $0, $1 + tee_local $push5=, $1=, $pop6 + f64.const $push0=, 0x0p0 + f64.ne $push1=, $pop5, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %lor.end + i32.const $push7=, 1 + return $pop7 +.LBB7_2: # %lor.rhs + end_block # label1: + f64.div $push2=, $0, $1 + f64.const $push3=, 0x1.6bcc41e9p46 + f64.gt $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end7: + .size dnear, .Lfunc_end7-dnear + # -- End function + .section .text.ldnear,"ax",@progbits + .hidden ldnear # -- Begin function ldnear + .globl ldnear + .type ldnear,@function +ldnear: # @ldnear + .param i64, i64, i64, i64 + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push13=, 0 + i32.const $push11=, 0 + i32.load $push10=, __stack_pointer($pop11) + i32.const $push12=, 32 + i32.sub $push28=, $pop10, $pop12 + tee_local $push27=, $5=, $pop28 + i32.store __stack_pointer($pop13), $pop27 + i32.const $push17=, 16 + i32.add $push18=, $5, $pop17 + call __subtf3@FUNCTION, $pop18, $0, $1, $2, $3 + i32.const $4=, 1 + block + i64.load $push26=, 16($5) + tee_local $push25=, $2=, $pop26 + i32.const $push19=, 16 + i32.add $push20=, $5, $pop19 + i32.const $push24=, 8 + i32.add $push0=, $pop20, $pop24 + i64.load $push23=, 0($pop0) + tee_local $push22=, $3=, $pop23 + i64.const $push1=, 0 + i64.const $push21=, 0 + i32.call $push2=, __eqtf2@FUNCTION, $pop25, $pop22, $pop1, $pop21 + i32.eqz $push30=, $pop2 + br_if 0, $pop30 # 0: down to label2 +# BB#1: # %lor.rhs + call __divtf3@FUNCTION, $5, $0, $1, $2, $3 + i64.load $push7=, 0($5) + i32.const $push29=, 8 + i32.add $push3=, $5, $pop29 + i64.load $push4=, 0($pop3) + i64.const $push6=, 8070450532247928832 + i64.const $push5=, 4641306360700491489 + i32.call $push8=, __gttf2@FUNCTION, $pop7, $pop4, $pop6, $pop5 + i32.const $push9=, 0 + i32.gt_s $4=, $pop8, $pop9 +.LBB8_2: # %lor.end + end_block # label2: + i32.const $push16=, 0 + i32.const $push14=, 32 + i32.add $push15=, $5, $pop14 + i32.store __stack_pointer($pop16), $pop15 + copy_local $push31=, $4 + # fallthrough-return: $pop31 + .endfunc +.Lfunc_end8: + .size ldnear, .Lfunc_end8-ldnear + # -- End function + .section .text.test_integer_to_float,"ax",@progbits + .hidden test_integer_to_float # -- Begin function test_integer_to_float + .globl test_integer_to_float + .type test_integer_to_float,@function +test_integer_to_float: # @test_integer_to_float + .result i32 + .local i32 +# BB#0: # %if.end103 + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end9: + .size test_integer_to_float, .Lfunc_end9-test_integer_to_float + # -- End function + .section .text.ull2f,"ax",@progbits + .hidden ull2f # -- Begin function ull2f + .globl ull2f + .type ull2f,@function +ull2f: # @ull2f + .param i64 + .result f32 +# BB#0: # %entry + f32.convert_u/i64 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end10: + .size ull2f, .Lfunc_end10-ull2f + # -- End function + .section .text.ull2d,"ax",@progbits + .hidden ull2d # -- Begin function ull2d + .globl ull2d + .type ull2d,@function +ull2d: # @ull2d + .param i64 + .result f64 +# BB#0: # %entry + f64.convert_u/i64 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end11: + .size ull2d, .Lfunc_end11-ull2d + # -- End function + .section .text.ull2ld,"ax",@progbits + .hidden ull2ld # -- Begin function ull2ld + .globl ull2ld + .type ull2ld,@function +ull2ld: # @ull2ld + .param i32, i64 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push14=, $pop5, $pop7 + tee_local $push13=, $2=, $pop14 + i32.store __stack_pointer($pop8), $pop13 + call __floatunditf@FUNCTION, $2, $1 + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i32.const $push12=, 8 + i32.add $push2=, $2, $pop12 + i64.load $push3=, 0($pop2) + i64.store 0($pop1), $pop3 + i64.load $push4=, 0($2) + i64.store 0($0), $pop4 + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $2, $pop9 + i32.store __stack_pointer($pop11), $pop10 + # fallthrough-return + .endfunc +.Lfunc_end12: + .size ull2ld, .Lfunc_end12-ull2ld + # -- End function + .section .text.sll2f,"ax",@progbits + .hidden sll2f # -- Begin function sll2f + .globl sll2f + .type sll2f,@function +sll2f: # @sll2f + .param i64 + .result f32 +# BB#0: # %entry + f32.convert_s/i64 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end13: + .size sll2f, .Lfunc_end13-sll2f + # -- End function + .section .text.sll2d,"ax",@progbits + .hidden sll2d # -- Begin function sll2d + .globl sll2d + .type sll2d,@function +sll2d: # @sll2d + .param i64 + .result f64 +# BB#0: # %entry + f64.convert_s/i64 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end14: + .size sll2d, .Lfunc_end14-sll2d + # -- End function + .section .text.sll2ld,"ax",@progbits + .hidden sll2ld # -- Begin function sll2ld + .globl sll2ld + .type sll2ld,@function +sll2ld: # @sll2ld + .param i32, i64 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push14=, $pop5, $pop7 + tee_local $push13=, $2=, $pop14 + i32.store __stack_pointer($pop8), $pop13 + call __floatditf@FUNCTION, $2, $1 + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i32.const $push12=, 8 + i32.add $push2=, $2, $pop12 + i64.load $push3=, 0($pop2) + i64.store 0($pop1), $pop3 + i64.load $push4=, 0($2) + i64.store 0($0), $pop4 + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $2, $pop9 + i32.store __stack_pointer($pop11), $pop10 + # fallthrough-return + .endfunc +.Lfunc_end15: + .size sll2ld, .Lfunc_end15-sll2ld + # -- End function + .section .text.test_longlong_integer_to_float,"ax",@progbits + .hidden test_longlong_integer_to_float # -- Begin function test_longlong_integer_to_float + .globl test_longlong_integer_to_float + .type test_longlong_integer_to_float,@function +test_longlong_integer_to_float: # @test_longlong_integer_to_float + .result i32 + .local i32 +# BB#0: # %if.end96 + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end16: + .size test_longlong_integer_to_float, .Lfunc_end16-test_longlong_integer_to_float + # -- End function + .section .text.f2u,"ax",@progbits + .hidden f2u # -- Begin function f2u + .globl f2u + .type f2u,@function +f2u: # @f2u + .param f32 + .result i32 +# BB#0: # %entry + i32.trunc_u/f32 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end17: + .size f2u, .Lfunc_end17-f2u + # -- End function + .section .text.d2u,"ax",@progbits + .hidden d2u # -- Begin function d2u + .globl d2u + .type d2u,@function +d2u: # @d2u + .param f64 + .result i32 +# BB#0: # %entry + i32.trunc_u/f64 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end18: + .size d2u, .Lfunc_end18-d2u + # -- End function + .section .text.ld2u,"ax",@progbits + .hidden ld2u # -- Begin function ld2u + .globl ld2u + .type ld2u,@function +ld2u: # @ld2u + .param i64, i64 + .result i32 +# BB#0: # %entry + i32.call $push0=, __fixunstfsi@FUNCTION, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end19: + .size ld2u, .Lfunc_end19-ld2u + # -- End function + .section .text.f2s,"ax",@progbits + .hidden f2s # -- Begin function f2s + .globl f2s + .type f2s,@function +f2s: # @f2s + .param f32 + .result i32 +# BB#0: # %entry + i32.trunc_s/f32 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end20: + .size f2s, .Lfunc_end20-f2s + # -- End function + .section .text.d2s,"ax",@progbits + .hidden d2s # -- Begin function d2s + .globl d2s + .type d2s,@function +d2s: # @d2s + .param f64 + .result i32 +# BB#0: # %entry + i32.trunc_s/f64 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end21: + .size d2s, .Lfunc_end21-d2s + # -- End function + .section .text.ld2s,"ax",@progbits + .hidden ld2s # -- Begin function ld2s + .globl ld2s + .type ld2s,@function +ld2s: # @ld2s + .param i64, i64 + .result i32 +# BB#0: # %entry + i32.call $push0=, __fixtfsi@FUNCTION, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end22: + .size ld2s, .Lfunc_end22-ld2s + # -- End function + .section .text.test_float_to_integer,"ax",@progbits + .hidden test_float_to_integer # -- Begin function test_float_to_integer + .globl test_float_to_integer + .type test_float_to_integer,@function +test_float_to_integer: # @test_float_to_integer + .result i32 + .local i32 +# BB#0: # %if.end182 + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end23: + .size test_float_to_integer, .Lfunc_end23-test_float_to_integer + # -- End function + .section .text.f2ull,"ax",@progbits + .hidden f2ull # -- Begin function f2ull + .globl f2ull + .type f2ull,@function +f2ull: # @f2ull + .param f32 + .result i64 +# BB#0: # %entry + i64.trunc_u/f32 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end24: + .size f2ull, .Lfunc_end24-f2ull + # -- End function + .section .text.d2ull,"ax",@progbits + .hidden d2ull # -- Begin function d2ull + .globl d2ull + .type d2ull,@function +d2ull: # @d2ull + .param f64 + .result i64 +# BB#0: # %entry + i64.trunc_u/f64 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end25: + .size d2ull, .Lfunc_end25-d2ull + # -- End function + .section .text.ld2ull,"ax",@progbits + .hidden ld2ull # -- Begin function ld2ull + .globl ld2ull + .type ld2ull,@function +ld2ull: # @ld2ull + .param i64, i64 + .result i64 +# BB#0: # %entry + i64.call $push0=, __fixunstfdi@FUNCTION, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end26: + .size ld2ull, .Lfunc_end26-ld2ull + # -- End function + .section .text.f2sll,"ax",@progbits + .hidden f2sll # -- Begin function f2sll + .globl f2sll + .type f2sll,@function +f2sll: # @f2sll + .param f32 + .result i64 +# BB#0: # %entry + i64.trunc_s/f32 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end27: + .size f2sll, .Lfunc_end27-f2sll + # -- End function + .section .text.d2sll,"ax",@progbits + .hidden d2sll # -- Begin function d2sll + .globl d2sll + .type d2sll,@function +d2sll: # @d2sll + .param f64 + .result i64 +# BB#0: # %entry + i64.trunc_s/f64 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end28: + .size d2sll, .Lfunc_end28-d2sll + # -- End function + .section .text.ld2sll,"ax",@progbits + .hidden ld2sll # -- Begin function ld2sll + .globl ld2sll + .type ld2sll,@function +ld2sll: # @ld2sll + .param i64, i64 + .result i64 +# BB#0: # %entry + i64.call $push0=, __fixtfdi@FUNCTION, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end29: + .size ld2sll, .Lfunc_end29-ld2sll + # -- End function + .section .text.test_float_to_longlong_integer,"ax",@progbits + .hidden test_float_to_longlong_integer # -- Begin function test_float_to_longlong_integer + .globl test_float_to_longlong_integer + .type test_float_to_longlong_integer,@function +test_float_to_longlong_integer: # @test_float_to_longlong_integer + .result i32 + .local i32 +# BB#0: # %if.end172 + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end30: + .size test_float_to_longlong_integer, .Lfunc_end30-test_float_to_longlong_integer + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end31: + .size main, .Lfunc_end31-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/cvt-1.c.s b/src/binaryen/test/torture-s/cvt-1.c.s new file mode 100644 index 0000000000..cc55cd4e72 --- /dev/null +++ b/src/binaryen/test/torture-s/cvt-1.c.s @@ -0,0 +1,47 @@ + .text + .file "cvt-1.c" + .section .text.g2,"ax",@progbits + .hidden g2 # -- Begin function g2 + .globl g2 + .type g2,@function +g2: # @g2 + .param f64 + .result i32 +# BB#0: # %entry + i32.trunc_s/f64 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size g2, .Lfunc_end0-g2 + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result f64 +# BB#0: # %if.end + f64.convert_s/i32 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end6 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/dbra-1.c.s b/src/binaryen/test/torture-s/dbra-1.c.s new file mode 100644 index 0000000000..c2acb0fe24 --- /dev/null +++ b/src/binaryen/test/torture-s/dbra-1.c.s @@ -0,0 +1,124 @@ + .text + .file "dbra-1.c" + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, -1 + i32.const $push0=, 10 + i32.lt_u $push1=, $0, $pop0 + i32.select $push3=, $0, $pop2, $pop1 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param i32 + .result i32 +# BB#0: # %entry + i32.eqz $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size f2, .Lfunc_end1-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -1 + i32.add $push6=, $0, $pop0 + tee_local $push5=, $0=, $pop6 + i32.const $push4=, -1 + i32.const $push1=, 10 + i32.lt_u $push2=, $0, $pop1 + i32.select $push3=, $pop5, $pop4, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size f3, .Lfunc_end2-f3 + # -- End function + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.eq $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end3: + .size f4, .Lfunc_end3-f4 + # -- End function + .section .text.f5,"ax",@progbits + .hidden f5 # -- Begin function f5 + .globl f5 + .type f5,@function +f5: # @f5 + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, -10 + i32.lt_u $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %switch.lookup + i32.const $push3=, -1 + i32.xor $push4=, $0, $pop3 + return $pop4 +.LBB4_2: # %for.inc.9 + end_block # label0: + i32.const $push2=, -1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end4: + .size f5, .Lfunc_end4-f5 + # -- End function + .section .text.f6,"ax",@progbits + .hidden f6 # -- Begin function f6 + .globl f6 + .type f6,@function +f6: # @f6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -1 + i32.eq $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end5: + .size f6, .Lfunc_end5-f6 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end32 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end6: + .size main, .Lfunc_end6-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/divcmp-1.c.s b/src/binaryen/test/torture-s/divcmp-1.c.s new file mode 100644 index 0000000000..c33dfafd51 --- /dev/null +++ b/src/binaryen/test/torture-s/divcmp-1.c.s @@ -0,0 +1,359 @@ + .text + .file "divcmp-1.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -20 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 10 + i32.lt_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test1u,"ax",@progbits + .hidden test1u # -- Begin function test1u + .globl test1u + .type test1u,@function +test1u: # @test1u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -20 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 10 + i32.lt_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size test1u, .Lfunc_end1-test1u + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 9 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 19 + i32.lt_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size test2, .Lfunc_end2-test2 + # -- End function + .section .text.test2u,"ax",@progbits + .hidden test2u # -- Begin function test2u + .globl test2u + .type test2u,@function +test2u: # @test2u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 10 + i32.lt_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end3: + .size test2u, .Lfunc_end3-test2u + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -20 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 9 + i32.gt_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end4: + .size test3, .Lfunc_end4-test3 + # -- End function + .section .text.test3u,"ax",@progbits + .hidden test3u # -- Begin function test3u + .globl test3u + .type test3u,@function +test3u: # @test3u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -20 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 9 + i32.gt_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end5: + .size test3u, .Lfunc_end5-test3u + # -- End function + .section .text.test4,"ax",@progbits + .hidden test4 # -- Begin function test4 + .globl test4 + .type test4,@function +test4: # @test4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 9 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 18 + i32.gt_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end6: + .size test4, .Lfunc_end6-test4 + # -- End function + .section .text.test4u,"ax",@progbits + .hidden test4u # -- Begin function test4u + .globl test4u + .type test4u,@function +test4u: # @test4u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 9 + i32.gt_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end7: + .size test4u, .Lfunc_end7-test4u + # -- End function + .section .text.test5,"ax",@progbits + .hidden test5 # -- Begin function test5 + .globl test5 + .type test5,@function +test5: # @test5 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 20 + i32.lt_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end8: + .size test5, .Lfunc_end8-test5 + # -- End function + .section .text.test5u,"ax",@progbits + .hidden test5u # -- Begin function test5u + .globl test5u + .type test5u,@function +test5u: # @test5u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 20 + i32.lt_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end9: + .size test5u, .Lfunc_end9-test5u + # -- End function + .section .text.test6,"ax",@progbits + .hidden test6 # -- Begin function test6 + .globl test6 + .type test6,@function +test6: # @test6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -9 + i32.lt_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end10: + .size test6, .Lfunc_end10-test6 + # -- End function + .section .text.test7,"ax",@progbits + .hidden test7 # -- Begin function test7 + .globl test7 + .type test7,@function +test7: # @test7 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 30 + i32.lt_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end11: + .size test7, .Lfunc_end11-test7 + # -- End function + .section .text.test7u,"ax",@progbits + .hidden test7u # -- Begin function test7u + .globl test7u + .type test7u,@function +test7u: # @test7u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 30 + i32.lt_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end12: + .size test7u, .Lfunc_end12-test7u + # -- End function + .section .text.test8,"ax",@progbits + .hidden test8 # -- Begin function test8 + .globl test8 + .type test8,@function +test8: # @test8 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 10 + i32.lt_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end13: + .size test8, .Lfunc_end13-test8 + # -- End function + .section .text.test8u,"ax",@progbits + .hidden test8u # -- Begin function test8u + .globl test8u + .type test8u,@function +test8u: # @test8u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 10 + i32.lt_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end14: + .size test8u, .Lfunc_end14-test8u + # -- End function + .section .text.test9,"ax",@progbits + .hidden test9 # -- Begin function test9 + .globl test9 + .type test9,@function +test9: # @test9 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 29 + i32.gt_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end15: + .size test9, .Lfunc_end15-test9 + # -- End function + .section .text.test9u,"ax",@progbits + .hidden test9u # -- Begin function test9u + .globl test9u + .type test9u,@function +test9u: # @test9u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 29 + i32.gt_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end16: + .size test9u, .Lfunc_end16-test9u + # -- End function + .section .text.test10,"ax",@progbits + .hidden test10 # -- Begin function test10 + .globl test10 + .type test10,@function +test10: # @test10 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 9 + i32.gt_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end17: + .size test10, .Lfunc_end17-test10 + # -- End function + .section .text.test10u,"ax",@progbits + .hidden test10u # -- Begin function test10u + .globl test10u + .type test10u,@function +test10u: # @test10u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 9 + i32.gt_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end18: + .size test10u, .Lfunc_end18-test10u + # -- End function + .section .text.test11,"ax",@progbits + .hidden test11 # -- Begin function test11 + .globl test11 + .type test11,@function +test11: # @test11 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 19 + i32.gt_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end19: + .size test11, .Lfunc_end19-test11 + # -- End function + .section .text.test11u,"ax",@progbits + .hidden test11u # -- Begin function test11u + .globl test11u + .type test11u,@function +test11u: # @test11u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 19 + i32.gt_u $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end20: + .size test11u, .Lfunc_end20-test11u + # -- End function + .section .text.test12,"ax",@progbits + .hidden test12 # -- Begin function test12 + .globl test12 + .type test12,@function +test12: # @test12 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -10 + i32.gt_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end21: + .size test12, .Lfunc_end21-test12 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end428 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end22: + .size main, .Lfunc_end22-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/divcmp-2.c.s b/src/binaryen/test/torture-s/divcmp-2.c.s new file mode 100644 index 0000000000..47025a2984 --- /dev/null +++ b/src/binaryen/test/torture-s/divcmp-2.c.s @@ -0,0 +1,119 @@ + .text + .file "divcmp-2.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -20 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 10 + i32.lt_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 9 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 19 + i32.lt_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size test2, .Lfunc_end1-test2 + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 29 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 10 + i32.lt_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size test3, .Lfunc_end2-test3 + # -- End function + .section .text.test4,"ax",@progbits + .hidden test4 # -- Begin function test4 + .globl test4 + .type test4,@function +test4: # @test4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 29 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 10 + i32.lt_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end3: + .size test4, .Lfunc_end3-test4 + # -- End function + .section .text.test5,"ax",@progbits + .hidden test5 # -- Begin function test5 + .globl test5 + .type test5,@function +test5: # @test5 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 9 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 19 + i32.lt_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end4: + .size test5, .Lfunc_end4-test5 + # -- End function + .section .text.test6,"ax",@progbits + .hidden test6 # -- Begin function test6 + .globl test6 + .type test6,@function +test6: # @test6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -20 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 10 + i32.lt_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end5: + .size test6, .Lfunc_end5-test6 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end92 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end6: + .size main, .Lfunc_end6-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/divcmp-3.c.s b/src/binaryen/test/torture-s/divcmp-3.c.s new file mode 100644 index 0000000000..4d3265ef2d --- /dev/null +++ b/src/binaryen/test/torture-s/divcmp-3.c.s @@ -0,0 +1,185 @@ + .text + .file "divcmp-3.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test1u,"ax",@progbits + .hidden test1u # -- Begin function test1u + .globl test1u + .type test1u,@function +test1u: # @test1u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size test1u, .Lfunc_end1-test1u + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size test2, .Lfunc_end2-test2 + # -- End function + .section .text.test2u,"ax",@progbits + .hidden test2u # -- Begin function test2u + .globl test2u + .type test2u,@function +test2u: # @test2u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size test2u, .Lfunc_end3-test2u + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size test3, .Lfunc_end4-test3 + # -- End function + .section .text.test3u,"ax",@progbits + .hidden test3u # -- Begin function test3u + .globl test3u + .type test3u,@function +test3u: # @test3u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end5: + .size test3u, .Lfunc_end5-test3u + # -- End function + .section .text.test4,"ax",@progbits + .hidden test4 # -- Begin function test4 + .globl test4 + .type test4,@function +test4: # @test4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end6: + .size test4, .Lfunc_end6-test4 + # -- End function + .section .text.test4u,"ax",@progbits + .hidden test4u # -- Begin function test4u + .globl test4u + .type test4u,@function +test4u: # @test4u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end7: + .size test4u, .Lfunc_end7-test4u + # -- End function + .section .text.test5,"ax",@progbits + .hidden test5 # -- Begin function test5 + .globl test5 + .type test5,@function +test5: # @test5 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end8: + .size test5, .Lfunc_end8-test5 + # -- End function + .section .text.test5u,"ax",@progbits + .hidden test5u # -- Begin function test5u + .globl test5u + .type test5u,@function +test5u: # @test5u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end9: + .size test5u, .Lfunc_end9-test5u + # -- End function + .section .text.test6,"ax",@progbits + .hidden test6 # -- Begin function test6 + .globl test6 + .type test6,@function +test6: # @test6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end10: + .size test6, .Lfunc_end10-test6 + # -- End function + .section .text.test6u,"ax",@progbits + .hidden test6u # -- Begin function test6u + .globl test6u + .type test6u,@function +test6u: # @test6u + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end11: + .size test6u, .Lfunc_end11-test6u + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end12: + .size main, .Lfunc_end12-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/divcmp-4.c.s b/src/binaryen/test/torture-s/divcmp-4.c.s new file mode 100644 index 0000000000..bb0c7cb4d5 --- /dev/null +++ b/src/binaryen/test/torture-s/divcmp-4.c.s @@ -0,0 +1,205 @@ + .text + .file "divcmp-4.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 29 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 10 + i32.lt_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 9 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 19 + i32.lt_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size test2, .Lfunc_end1-test2 + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 29 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 9 + i32.gt_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size test3, .Lfunc_end2-test3 + # -- End function + .section .text.test4,"ax",@progbits + .hidden test4 # -- Begin function test4 + .globl test4 + .type test4,@function +test4: # @test4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 9 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 18 + i32.gt_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end3: + .size test4, .Lfunc_end3-test4 + # -- End function + .section .text.test5,"ax",@progbits + .hidden test5 # -- Begin function test5 + .globl test5 + .type test5,@function +test5: # @test5 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -20 + i32.gt_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end4: + .size test5, .Lfunc_end4-test5 + # -- End function + .section .text.test6,"ax",@progbits + .hidden test6 # -- Begin function test6 + .globl test6 + .type test6,@function +test6: # @test6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 9 + i32.gt_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end5: + .size test6, .Lfunc_end5-test6 + # -- End function + .section .text.test7,"ax",@progbits + .hidden test7 # -- Begin function test7 + .globl test7 + .type test7,@function +test7: # @test7 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -30 + i32.gt_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end6: + .size test7, .Lfunc_end6-test7 + # -- End function + .section .text.test8,"ax",@progbits + .hidden test8 # -- Begin function test8 + .globl test8 + .type test8,@function +test8: # @test8 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -10 + i32.gt_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end7: + .size test8, .Lfunc_end7-test8 + # -- End function + .section .text.test9,"ax",@progbits + .hidden test9 # -- Begin function test9 + .globl test9 + .type test9,@function +test9: # @test9 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -29 + i32.lt_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end8: + .size test9, .Lfunc_end8-test9 + # -- End function + .section .text.test10,"ax",@progbits + .hidden test10 # -- Begin function test10 + .globl test10 + .type test10,@function +test10: # @test10 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -9 + i32.lt_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end9: + .size test10, .Lfunc_end9-test10 + # -- End function + .section .text.test11,"ax",@progbits + .hidden test11 # -- Begin function test11 + .globl test11 + .type test11,@function +test11: # @test11 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -19 + i32.lt_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end10: + .size test11, .Lfunc_end10-test11 + # -- End function + .section .text.test12,"ax",@progbits + .hidden test12 # -- Begin function test12 + .globl test12 + .type test12,@function +test12: # @test12 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 10 + i32.lt_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end11: + .size test12, .Lfunc_end11-test12 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end236 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end12: + .size main, .Lfunc_end12-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/divcmp-5.c.s b/src/binaryen/test/torture-s/divcmp-5.c.s new file mode 100644 index 0000000000..79a7acc23d --- /dev/null +++ b/src/binaryen/test/torture-s/divcmp-5.c.s @@ -0,0 +1,45 @@ + .text + .file "divcmp-5.c" + .section .text.always_one_1,"ax",@progbits + .hidden always_one_1 # -- Begin function always_one_1 + .globl always_one_1 + .type always_one_1,@function +always_one_1: # @always_one_1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size always_one_1, .Lfunc_end0-always_one_1 + # -- End function + .section .text.always_one_2,"ax",@progbits + .hidden always_one_2 # -- Begin function always_one_2 + .globl always_one_2 + .type always_one_2,@function +always_one_2: # @always_one_2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size always_one_2, .Lfunc_end1-always_one_2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/divconst-1.c.s b/src/binaryen/test/torture-s/divconst-1.c.s new file mode 100644 index 0000000000..cb3fecf04d --- /dev/null +++ b/src/binaryen/test/torture-s/divconst-1.c.s @@ -0,0 +1,37 @@ + .text + .file "divconst-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i64.const $push0=, 14315126007568 + i64.store 0($0):p2align=2, $pop0 + i64.const $push1=, 14315126007568 + i64.store 8($0):p2align=2, $pop1 + copy_local $push2=, $0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/divconst-2.c.s b/src/binaryen/test/torture-s/divconst-2.c.s new file mode 100644 index 0000000000..c15919c4ed --- /dev/null +++ b/src/binaryen/test/torture-s/divconst-2.c.s @@ -0,0 +1,123 @@ + .text + .file "divconst-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + i32.eq $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.r,"ax",@progbits + .hidden r # -- Begin function r + .globl r + .type r,@function +r: # @r + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + i32.rem_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size r, .Lfunc_end1-r + # -- End function + .section .text.std_eqn,"ax",@progbits + .hidden std_eqn # -- Begin function std_eqn + .globl std_eqn + .type std_eqn,@function +std_eqn: # @std_eqn + .param i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.shl $push1=, $2, $pop0 + i32.add $push2=, $pop1, $3 + i32.eq $push3=, $pop2, $0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size std_eqn, .Lfunc_end2-std_eqn + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push22=, 0 + i32.load $push21=, nums($pop22) + tee_local $push20=, $0=, $pop21 + i32.const $push19=, -2147483648 + i32.eq $push1=, $pop20, $pop19 + i32.const $push18=, 31 + i32.shl $push2=, $pop1, $pop18 + i32.const $push17=, -2147483648 + i32.rem_s $push0=, $0, $pop17 + i32.add $push3=, $pop2, $pop0 + i32.ne $push4=, $pop3, $0 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %for.cond + i32.const $push28=, 0 + i32.load $push27=, nums+4($pop28) + tee_local $push26=, $0=, $pop27 + i32.const $push25=, -2147483648 + i32.eq $push6=, $pop26, $pop25 + i32.const $push24=, 31 + i32.shl $push7=, $pop6, $pop24 + i32.const $push23=, -2147483648 + i32.rem_s $push5=, $0, $pop23 + i32.add $push8=, $pop7, $pop5 + i32.ne $push9=, $pop8, $0 + br_if 0, $pop9 # 0: down to label0 +# BB#2: # %for.cond.1 + i32.const $push32=, 0 + i32.load $push31=, nums+8($pop32) + tee_local $push30=, $0=, $pop31 + i32.const $push10=, -2147483648 + i32.eq $push12=, $pop30, $pop10 + i32.const $push13=, 31 + i32.shl $push14=, $pop12, $pop13 + i32.const $push29=, -2147483648 + i32.rem_s $push11=, $0, $pop29 + i32.add $push15=, $pop14, $pop11 + i32.ne $push16=, $pop15, $0 + br_if 0, $pop16 # 0: down to label0 +# BB#3: # %for.cond.2 + i32.const $push33=, 0 + call exit@FUNCTION, $pop33 + unreachable +.LBB3_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden nums # @nums + .type nums,@object + .section .data.nums,"aw",@progbits + .globl nums + .p2align 2 +nums: + .int32 4294967295 # 0xffffffff + .int32 2147483647 # 0x7fffffff + .int32 2147483648 # 0x80000000 + .size nums, 12 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/divconst-3.c.s b/src/binaryen/test/torture-s/divconst-3.c.s new file mode 100644 index 0000000000..73ef6f687c --- /dev/null +++ b/src/binaryen/test/torture-s/divconst-3.c.s @@ -0,0 +1,34 @@ + .text + .file "divconst-3.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i64 + .result i64 +# BB#0: # %entry + i64.const $push0=, 10000000000 + i64.div_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/divmod-1.c.s b/src/binaryen/test/torture-s/divmod-1.c.s new file mode 100644 index 0000000000..49add23060 --- /dev/null +++ b/src/binaryen/test/torture-s/divmod-1.c.s @@ -0,0 +1,161 @@ + .text + .file "divmod-1.c" + .section .text.div1,"ax",@progbits + .hidden div1 # -- Begin function div1 + .globl div1 + .type div1,@function +div1: # @div1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.sub $push1=, $pop0, $0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size div1, .Lfunc_end0-div1 + # -- End function + .section .text.div2,"ax",@progbits + .hidden div2 # -- Begin function div2 + .globl div2 + .type div2,@function +div2: # @div2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.sub $push1=, $pop0, $0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size div2, .Lfunc_end1-div2 + # -- End function + .section .text.div3,"ax",@progbits + .hidden div3 # -- Begin function div3 + .globl div3 + .type div3,@function +div3: # @div3 + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.div_s $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size div3, .Lfunc_end2-div3 + # -- End function + .section .text.div4,"ax",@progbits + .hidden div4 # -- Begin function div4 + .globl div4 + .type div4,@function +div4: # @div4 + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.div_s $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size div4, .Lfunc_end3-div4 + # -- End function + .section .text.mod1,"ax",@progbits + .hidden mod1 # -- Begin function mod1 + .globl mod1 + .type mod1,@function +mod1: # @mod1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size mod1, .Lfunc_end4-mod1 + # -- End function + .section .text.mod2,"ax",@progbits + .hidden mod2 # -- Begin function mod2 + .globl mod2 + .type mod2,@function +mod2: # @mod2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end5: + .size mod2, .Lfunc_end5-mod2 + # -- End function + .section .text.mod3,"ax",@progbits + .hidden mod3 # -- Begin function mod3 + .globl mod3 + .type mod3,@function +mod3: # @mod3 + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.rem_s $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end6: + .size mod3, .Lfunc_end6-mod3 + # -- End function + .section .text.mod4,"ax",@progbits + .hidden mod4 # -- Begin function mod4 + .globl mod4 + .type mod4,@function +mod4: # @mod4 + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.rem_s $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end7: + .size mod4, .Lfunc_end7-mod4 + # -- End function + .section .text.mod5,"ax",@progbits + .hidden mod5 # -- Begin function mod5 + .globl mod5 + .type mod5,@function +mod5: # @mod5 + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.rem_s $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end8: + .size mod5, .Lfunc_end8-mod5 + # -- End function + .section .text.mod6,"ax",@progbits + .hidden mod6 # -- Begin function mod6 + .globl mod6 + .type mod6,@function +mod6: # @mod6 + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.rem_u $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end9: + .size mod6, .Lfunc_end9-mod6 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end36 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end10: + .size main, .Lfunc_end10-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/doloop-1.c.s b/src/binaryen/test/torture-s/doloop-1.c.s new file mode 100644 index 0000000000..a0ffe7cf91 --- /dev/null +++ b/src/binaryen/test/torture-s/doloop-1.c.s @@ -0,0 +1,59 @@ + .text + .file "doloop-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $0=, 0 +.LBB0_1: # %do.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push12=, 0 + i32.const $push11=, 0 + i32.load $push0=, i($pop11) + i32.const $push10=, 1 + i32.add $push1=, $pop0, $pop10 + i32.store i($pop12), $pop1 + i32.const $push9=, -1 + i32.add $push8=, $0, $pop9 + tee_local $push7=, $0=, $pop8 + i32.const $push6=, 255 + i32.and $push2=, $pop7, $pop6 + br_if 0, $pop2 # 0: up to label0 +# BB#2: # %do.end + end_loop + block + i32.const $push13=, 0 + i32.load $push3=, i($pop13) + i32.const $push4=, 256 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label1 +# BB#3: # %if.end + i32.const $push14=, 0 + call exit@FUNCTION, $pop14 + unreachable +.LBB0_4: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/doloop-2.c.s b/src/binaryen/test/torture-s/doloop-2.c.s new file mode 100644 index 0000000000..19b419b780 --- /dev/null +++ b/src/binaryen/test/torture-s/doloop-2.c.s @@ -0,0 +1,59 @@ + .text + .file "doloop-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $0=, 0 +.LBB0_1: # %do.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push12=, 0 + i32.const $push11=, 0 + i32.load $push0=, i($pop11) + i32.const $push10=, 1 + i32.add $push1=, $pop0, $pop10 + i32.store i($pop12), $pop1 + i32.const $push9=, -1 + i32.add $push8=, $0, $pop9 + tee_local $push7=, $0=, $pop8 + i32.const $push6=, 65535 + i32.and $push2=, $pop7, $pop6 + br_if 0, $pop2 # 0: up to label0 +# BB#2: # %do.end + end_loop + block + i32.const $push13=, 0 + i32.load $push3=, i($pop13) + i32.const $push4=, 65536 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label1 +# BB#3: # %if.end + i32.const $push14=, 0 + call exit@FUNCTION, $pop14 + unreachable +.LBB0_4: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/eeprof-1.c.s b/src/binaryen/test/torture-s/eeprof-1.c.s new file mode 100644 index 0000000000..ca51b4eedf --- /dev/null +++ b/src/binaryen/test/torture-s/eeprof-1.c.s @@ -0,0 +1,292 @@ + .text + .file "eeprof-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.load $push1=, last_fn_entered($pop0) + i32.const $push2=, foo@FUNCTION + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.nfoo,"ax",@progbits + .hidden nfoo # -- Begin function nfoo + .globl nfoo + .type nfoo,@function +nfoo: # @nfoo +# BB#0: # %entry + block + i32.const $push19=, 0 + i32.load $push1=, entry_calls($pop19) + i32.const $push18=, 2 + i32.ne $push2=, $pop1, $pop18 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %entry + i32.const $push21=, 0 + i32.load $push0=, exit_calls($pop21) + i32.const $push20=, 2 + i32.ne $push3=, $pop0, $pop20 + br_if 0, $pop3 # 0: down to label1 +# BB#2: # %if.end + i32.const $push22=, 0 + i32.load $push4=, last_fn_entered($pop22) + i32.const $push5=, foo@FUNCTION + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label1 +# BB#3: # %if.end4 + i32.const $push23=, 0 + i32.load $push7=, last_fn_exited($pop23) + i32.const $push8=, foo2@FUNCTION + i32.ne $push9=, $pop7, $pop8 + br_if 0, $pop9 # 0: down to label1 +# BB#4: # %if.end7 + call foo@FUNCTION + i32.const $push25=, 0 + i32.load $push11=, entry_calls($pop25) + i32.const $push24=, 3 + i32.ne $push12=, $pop11, $pop24 + br_if 0, $pop12 # 0: down to label1 +# BB#5: # %if.end7 + i32.const $push27=, 0 + i32.load $push10=, exit_calls($pop27) + i32.const $push26=, 3 + i32.ne $push13=, $pop10, $pop26 + br_if 0, $pop13 # 0: down to label1 +# BB#6: # %if.end12 + i32.const $push29=, 0 + i32.load $push14=, last_fn_entered($pop29) + i32.const $push28=, foo@FUNCTION + i32.ne $push15=, $pop14, $pop28 + br_if 0, $pop15 # 0: down to label1 +# BB#7: # %if.end15 + i32.const $push31=, 0 + i32.load $push16=, last_fn_exited($pop31) + i32.const $push30=, foo@FUNCTION + i32.ne $push17=, $pop16, $pop30 + br_if 0, $pop17 # 0: down to label1 +# BB#8: # %if.end18 + return +.LBB1_9: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size nfoo, .Lfunc_end1-nfoo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push21=, 0 + i32.load $push1=, exit_calls($pop21) + i32.const $push20=, 0 + i32.load $push0=, entry_calls($pop20) + i32.or $push2=, $pop1, $pop0 + br_if 0, $pop2 # 0: down to label2 +# BB#1: # %if.end + call foo2@FUNCTION + i32.const $push23=, 0 + i32.load $push4=, entry_calls($pop23) + i32.const $push22=, 2 + i32.ne $push5=, $pop4, $pop22 + br_if 0, $pop5 # 0: down to label2 +# BB#2: # %if.end + i32.const $push25=, 0 + i32.load $push3=, exit_calls($pop25) + i32.const $push24=, 2 + i32.ne $push6=, $pop3, $pop24 + br_if 0, $pop6 # 0: down to label2 +# BB#3: # %if.end6 + i32.const $push26=, 0 + i32.load $push7=, last_fn_entered($pop26) + i32.const $push8=, foo@FUNCTION + i32.ne $push9=, $pop7, $pop8 + br_if 0, $pop9 # 0: down to label2 +# BB#4: # %if.end9 + i32.const $push27=, 0 + i32.load $push10=, last_fn_exited($pop27) + i32.const $push11=, foo2@FUNCTION + i32.ne $push12=, $pop10, $pop11 + br_if 0, $pop12 # 0: down to label2 +# BB#5: # %if.end12 + call nfoo@FUNCTION + i32.const $push29=, 0 + i32.load $push14=, entry_calls($pop29) + i32.const $push28=, 3 + i32.ne $push15=, $pop14, $pop28 + br_if 0, $pop15 # 0: down to label2 +# BB#6: # %if.end12 + i32.const $push31=, 0 + i32.load $push13=, exit_calls($pop31) + i32.const $push30=, 3 + i32.ne $push16=, $pop13, $pop30 + br_if 0, $pop16 # 0: down to label2 +# BB#7: # %if.end17 + i32.const $push32=, 0 + i32.load $push17=, last_fn_entered($pop32) + i32.const $push18=, foo@FUNCTION + i32.ne $push19=, $pop17, $pop18 + br_if 0, $pop19 # 0: down to label2 +# BB#8: # %if.end20 + i32.const $push33=, 0 + return $pop33 +.LBB2_9: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .section .text.__cyg_profile_func_enter,"ax",@progbits + .hidden __cyg_profile_func_enter # -- Begin function __cyg_profile_func_enter + .globl __cyg_profile_func_enter + .type __cyg_profile_func_enter,@function +__cyg_profile_func_enter: # @__cyg_profile_func_enter + .param i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store last_fn_entered($pop0), $0 + i32.const $push5=, 0 + i32.const $push4=, 0 + i32.load $push1=, entry_calls($pop4) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store entry_calls($pop5), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end3: + .size __cyg_profile_func_enter, .Lfunc_end3-__cyg_profile_func_enter + # -- End function + .section .text.__cyg_profile_func_exit,"ax",@progbits + .hidden __cyg_profile_func_exit # -- Begin function __cyg_profile_func_exit + .globl __cyg_profile_func_exit + .type __cyg_profile_func_exit,@function +__cyg_profile_func_exit: # @__cyg_profile_func_exit + .param i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store last_fn_exited($pop0), $0 + i32.const $push5=, 0 + i32.const $push4=, 0 + i32.load $push1=, exit_calls($pop4) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store exit_calls($pop5), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end4: + .size __cyg_profile_func_exit, .Lfunc_end4-__cyg_profile_func_exit + # -- End function + .section .text.foo2,"ax",@progbits + .type foo2,@function # -- Begin function foo2 +foo2: # @foo2 +# BB#0: # %entry + block + i32.const $push17=, 0 + i32.load $push1=, entry_calls($pop17) + i32.const $push2=, 1 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label3 +# BB#1: # %entry + i32.const $push18=, 0 + i32.load $push0=, exit_calls($pop18) + br_if 0, $pop0 # 0: down to label3 +# BB#2: # %if.end + i32.const $push19=, 0 + i32.load $push4=, last_fn_entered($pop19) + i32.const $push5=, foo2@FUNCTION + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label3 +# BB#3: # %if.end4 + call foo@FUNCTION + i32.const $push20=, 0 + i32.load $push8=, entry_calls($pop20) + i32.const $push9=, 2 + i32.ne $push10=, $pop8, $pop9 + br_if 0, $pop10 # 0: down to label3 +# BB#4: # %if.end4 + i32.const $push21=, 0 + i32.load $push7=, exit_calls($pop21) + i32.const $push11=, 1 + i32.ne $push12=, $pop7, $pop11 + br_if 0, $pop12 # 0: down to label3 +# BB#5: # %if.end9 + i32.const $push23=, 0 + i32.load $push13=, last_fn_entered($pop23) + i32.const $push22=, foo@FUNCTION + i32.ne $push14=, $pop13, $pop22 + br_if 0, $pop14 # 0: down to label3 +# BB#6: # %if.end12 + i32.const $push25=, 0 + i32.load $push15=, last_fn_exited($pop25) + i32.const $push24=, foo@FUNCTION + i32.ne $push16=, $pop15, $pop24 + br_if 0, $pop16 # 0: down to label3 +# BB#7: # %if.end15 + return +.LBB5_8: # %if.then + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end5: + .size foo2, .Lfunc_end5-foo2 + # -- End function + .hidden last_fn_entered # @last_fn_entered + .type last_fn_entered,@object + .section .bss.last_fn_entered,"aw",@nobits + .globl last_fn_entered + .p2align 2 +last_fn_entered: + .int32 0 + .size last_fn_entered, 4 + + .hidden entry_calls # @entry_calls + .type entry_calls,@object + .section .bss.entry_calls,"aw",@nobits + .globl entry_calls + .p2align 2 +entry_calls: + .int32 0 # 0x0 + .size entry_calls, 4 + + .hidden exit_calls # @exit_calls + .type exit_calls,@object + .section .bss.exit_calls,"aw",@nobits + .globl exit_calls + .p2align 2 +exit_calls: + .int32 0 # 0x0 + .size exit_calls, 4 + + .hidden last_fn_exited # @last_fn_exited + .type last_fn_exited,@object + .section .bss.last_fn_exited,"aw",@nobits + .globl last_fn_exited + .p2align 2 +last_fn_exited: + .int32 0 + .size last_fn_exited, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/enum-1.c.s b/src/binaryen/test/torture-s/enum-1.c.s new file mode 100644 index 0000000000..0e351e0fab --- /dev/null +++ b/src/binaryen/test/torture-s/enum-1.c.s @@ -0,0 +1,19 @@ + .text + .file "enum-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/enum-2.c.s b/src/binaryen/test/torture-s/enum-2.c.s new file mode 100644 index 0000000000..55a94da91b --- /dev/null +++ b/src/binaryen/test/torture-s/enum-2.c.s @@ -0,0 +1,19 @@ + .text + .file "enum-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/enum-3.c.s b/src/binaryen/test/torture-s/enum-3.c.s new file mode 100644 index 0000000000..9a586926b0 --- /dev/null +++ b/src/binaryen/test/torture-s/enum-3.c.s @@ -0,0 +1,51 @@ + .text + .file "enum-3.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push10=, $pop2, $pop4 + tee_local $push9=, $0=, $pop10 + i32.store __stack_pointer($pop5), $pop9 + i32.const $push0=, 0 + i32.const $push6=, 12 + i32.add $push7=, $0, $pop6 + i32.store q($pop0), $pop7 + i32.const $push1=, -2147483648 + i32.store 12($0), $pop1 + i32.const $push8=, 0 + call exit@FUNCTION, $pop8 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden q # @q + .type q,@object + .section .bss.q,"aw",@nobits + .globl q + .p2align 2 +q: + .int32 0 + .size q, 4 + + .hidden p # @p + .type p,@object + .section .bss.p,"aw",@nobits + .globl p + .p2align 2 +p: + .int32 0 + .size p, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/extzvsi.c.s b/src/binaryen/test/torture-s/extzvsi.c.s new file mode 100644 index 0000000000..8cb7ab717d --- /dev/null +++ b/src/binaryen/test/torture-s/extzvsi.c.s @@ -0,0 +1,61 @@ + .text + .file "extzvsi.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 2 + i32.const $push13=, 0 + i32.load $push1=, x($pop13) + i32.const $push2=, 1 + i32.shr_u $push3=, $pop1, $pop2 + i32.const $push4=, 2047 + i32.and $push12=, $pop3, $pop4 + tee_local $push11=, $0=, $pop12 + i32.const $push10=, 1 + i32.eq $push5=, $pop11, $pop10 + i32.select $push7=, $pop0, $pop6, $pop5 + i32.const $push9=, 1 + i32.select $push8=, $pop7, $pop9, $0 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + i32.const $push7=, 0 + i64.load $push1=, x($pop7) + i64.const $push2=, -4095 + i64.and $push3=, $pop1, $pop2 + i64.const $push4=, 2 + i64.or $push5=, $pop3, $pop4 + i64.store x($pop0), $pop5 + i32.const $push6=, 0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 3 +x: + .skip 8 + .size x, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/ffs-1.c.s b/src/binaryen/test/torture-s/ffs-1.c.s new file mode 100644 index 0000000000..160a04f2f1 --- /dev/null +++ b/src/binaryen/test/torture-s/ffs-1.c.s @@ -0,0 +1,38 @@ + .text + .file "ffs-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push1=, 0 + i32.load $push0=, a($pop1) + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/ffs-2.c.s b/src/binaryen/test/torture-s/ffs-2.c.s new file mode 100644 index 0000000000..3918a4be83 --- /dev/null +++ b/src/binaryen/test/torture-s/ffs-2.c.s @@ -0,0 +1,154 @@ + .text + .file "ffs-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push46=, 0 + i32.load $push45=, ffstesttab($pop46) + tee_local $push44=, $0=, $pop45 + i32.ctz $push0=, $pop44 + i32.const $push43=, 1 + i32.add $push1=, $pop0, $pop43 + i32.const $push42=, 0 + i32.select $push2=, $pop1, $pop42, $0 + i32.const $push41=, 0 + i32.load $push3=, ffstesttab+4($pop41) + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %for.cond + i32.const $push52=, 0 + i32.load $push51=, ffstesttab+8($pop52) + tee_local $push50=, $0=, $pop51 + i32.ctz $push5=, $pop50 + i32.const $push49=, 1 + i32.add $push6=, $pop5, $pop49 + i32.const $push48=, 0 + i32.select $push7=, $pop6, $pop48, $0 + i32.const $push47=, 0 + i32.load $push8=, ffstesttab+12($pop47) + i32.ne $push9=, $pop7, $pop8 + br_if 0, $pop9 # 0: down to label0 +# BB#2: # %for.cond.1 + i32.const $push58=, 0 + i32.load $push57=, ffstesttab+16($pop58) + tee_local $push56=, $0=, $pop57 + i32.ctz $push10=, $pop56 + i32.const $push55=, 1 + i32.add $push11=, $pop10, $pop55 + i32.const $push54=, 0 + i32.select $push12=, $pop11, $pop54, $0 + i32.const $push53=, 0 + i32.load $push13=, ffstesttab+20($pop53) + i32.ne $push14=, $pop12, $pop13 + br_if 0, $pop14 # 0: down to label0 +# BB#3: # %for.cond.2 + i32.const $push64=, 0 + i32.load $push63=, ffstesttab+24($pop64) + tee_local $push62=, $0=, $pop63 + i32.ctz $push15=, $pop62 + i32.const $push61=, 1 + i32.add $push16=, $pop15, $pop61 + i32.const $push60=, 0 + i32.select $push17=, $pop16, $pop60, $0 + i32.const $push59=, 0 + i32.load $push18=, ffstesttab+28($pop59) + i32.ne $push19=, $pop17, $pop18 + br_if 0, $pop19 # 0: down to label0 +# BB#4: # %for.cond.3 + i32.const $push70=, 0 + i32.load $push69=, ffstesttab+32($pop70) + tee_local $push68=, $0=, $pop69 + i32.ctz $push20=, $pop68 + i32.const $push67=, 1 + i32.add $push21=, $pop20, $pop67 + i32.const $push66=, 0 + i32.select $push22=, $pop21, $pop66, $0 + i32.const $push65=, 0 + i32.load $push23=, ffstesttab+36($pop65) + i32.ne $push24=, $pop22, $pop23 + br_if 0, $pop24 # 0: down to label0 +# BB#5: # %for.cond.4 + i32.const $push76=, 0 + i32.load $push75=, ffstesttab+40($pop76) + tee_local $push74=, $0=, $pop75 + i32.ctz $push25=, $pop74 + i32.const $push73=, 1 + i32.add $push26=, $pop25, $pop73 + i32.const $push72=, 0 + i32.select $push27=, $pop26, $pop72, $0 + i32.const $push71=, 0 + i32.load $push28=, ffstesttab+44($pop71) + i32.ne $push29=, $pop27, $pop28 + br_if 0, $pop29 # 0: down to label0 +# BB#6: # %for.cond.5 + i32.const $push82=, 0 + i32.load $push81=, ffstesttab+48($pop82) + tee_local $push80=, $0=, $pop81 + i32.ctz $push30=, $pop80 + i32.const $push79=, 1 + i32.add $push31=, $pop30, $pop79 + i32.const $push78=, 0 + i32.select $push32=, $pop31, $pop78, $0 + i32.const $push77=, 0 + i32.load $push33=, ffstesttab+52($pop77) + i32.ne $push34=, $pop32, $pop33 + br_if 0, $pop34 # 0: down to label0 +# BB#7: # %for.cond.6 + i32.const $push88=, 0 + i32.load $push87=, ffstesttab+56($pop88) + tee_local $push86=, $0=, $pop87 + i32.ctz $push35=, $pop86 + i32.const $push85=, 1 + i32.add $push36=, $pop35, $pop85 + i32.const $push84=, 0 + i32.select $push37=, $pop36, $pop84, $0 + i32.const $push83=, 0 + i32.load $push38=, ffstesttab+60($pop83) + i32.ne $push39=, $pop37, $pop38 + br_if 0, $pop39 # 0: down to label0 +# BB#8: # %for.cond.7 + i32.const $push40=, 0 + call exit@FUNCTION, $pop40 + unreachable +.LBB0_9: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden ffstesttab # @ffstesttab + .type ffstesttab,@object + .section .data.ffstesttab,"aw",@progbits + .globl ffstesttab + .p2align 4 +ffstesttab: + .int32 2147483648 # 0x80000000 + .int32 32 # 0x20 + .int32 2779096485 # 0xa5a5a5a5 + .int32 1 # 0x1 + .int32 1515870810 # 0x5a5a5a5a + .int32 2 # 0x2 + .int32 3405643776 # 0xcafe0000 + .int32 18 # 0x12 + .int32 32768 # 0x8000 + .int32 16 # 0x10 + .int32 42405 # 0xa5a5 + .int32 1 # 0x1 + .int32 23130 # 0x5a5a + .int32 2 # 0x2 + .int32 3232 # 0xca0 + .int32 6 # 0x6 + .size ffstesttab, 64 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/float-floor.c.s b/src/binaryen/test/torture-s/float-floor.c.s new file mode 100644 index 0000000000..9eb55e579f --- /dev/null +++ b/src/binaryen/test/torture-s/float-floor.c.s @@ -0,0 +1,48 @@ + .text + .file "float-floor.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local f64 +# BB#0: # %entry + block + i32.const $push0=, 0 + f64.load $push1=, d($pop0) + f64.floor $push10=, $pop1 + tee_local $push9=, $0=, $pop10 + i32.trunc_s/f64 $push2=, $pop9 + i32.const $push8=, 1023 + i32.ne $push3=, $pop2, $pop8 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %lor.lhs.false + f32.demote/f64 $push4=, $0 + i32.trunc_s/f32 $push5=, $pop4 + i32.const $push11=, 1023 + i32.ne $push6=, $pop5, $pop11 + br_if 0, $pop6 # 0: down to label0 +# BB#2: # %if.end + i32.const $push7=, 0 + return $pop7 +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden d # @d + .type d,@object + .section .data.d,"aw",@progbits + .globl d + .p2align 3 +d: + .int64 4652218414805286912 # double 1023.9999694824219 + .size d, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/floatunsisf-1.c.s b/src/binaryen/test/torture-s/floatunsisf-1.c.s new file mode 100644 index 0000000000..a2ce577266 --- /dev/null +++ b/src/binaryen/test/torture-s/floatunsisf-1.c.s @@ -0,0 +1,67 @@ + .text + .file "floatunsisf-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push10=, 0 + i32.const $push9=, 0 + i32.load $push0=, u($pop9) + f32.convert_u/i32 $push1=, $pop0 + f32.store f1($pop10), $pop1 + i32.const $push8=, 0 + i32.const $push2=, 1325400065 + i32.store f2($pop8), $pop2 + block + i32.const $push7=, 0 + f32.load $push3=, f1($pop7) + i32.const $push6=, 0 + f32.load $push4=, f2($pop6) + f32.eq $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %if.then + call abort@FUNCTION + unreachable +.LBB0_2: # %if.end + end_block # label0: + i32.const $push11=, 0 + call exit@FUNCTION, $pop11 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden u # @u + .type u,@object + .section .data.u,"aw",@progbits + .globl u + .p2align 2 +u: + .int32 2147483777 # 0x80000081 + .size u, 4 + + .hidden f1 # @f1 + .type f1,@object + .section .bss.f1,"aw",@nobits + .globl f1 + .p2align 2 +f1: + .int32 0 # float 0 + .size f1, 4 + + .hidden f2 # @f2 + .type f2,@object + .section .bss.f2,"aw",@nobits + .globl f2 + .p2align 2 +f2: + .int32 0 # float 0 + .size f2, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/fprintf-1.c.s b/src/binaryen/test/torture-s/fprintf-1.c.s new file mode 100644 index 0000000000..fff4b53faa --- /dev/null +++ b/src/binaryen/test/torture-s/fprintf-1.c.s @@ -0,0 +1,210 @@ + .text + .file "fprintf-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push47=, 0 + i32.const $push45=, 0 + i32.load $push44=, __stack_pointer($pop45) + i32.const $push46=, 144 + i32.sub $push75=, $pop44, $pop46 + tee_local $push74=, $1=, $pop75 + i32.store __stack_pointer($pop47), $pop74 + i32.const $push1=, .L.str + i32.const $push0=, 5 + i32.const $push73=, 1 + i32.const $push72=, 0 + i32.load $push71=, stdout($pop72) + tee_local $push70=, $0=, $pop71 + i32.call $drop=, fwrite@FUNCTION, $pop1, $pop0, $pop73, $pop70 + block + i32.const $push69=, .L.str + i32.const $push68=, 0 + i32.call $push2=, fprintf@FUNCTION, $0, $pop69, $pop68 + i32.const $push67=, 5 + i32.ne $push3=, $pop2, $pop67 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push5=, .L.str.1 + i32.const $push4=, 6 + i32.const $push79=, 1 + i32.call $drop=, fwrite@FUNCTION, $pop5, $pop4, $pop79, $0 + i32.const $push78=, .L.str.1 + i32.const $push77=, 0 + i32.call $push6=, fprintf@FUNCTION, $0, $pop78, $pop77 + i32.const $push76=, 6 + i32.ne $push7=, $pop6, $pop76 + br_if 0, $pop7 # 0: down to label0 +# BB#2: # %if.end6 + i32.const $push8=, 97 + i32.call $drop=, fputc@FUNCTION, $pop8, $0 + i32.const $push9=, .L.str.2 + i32.const $push80=, 0 + i32.call $push10=, fprintf@FUNCTION, $0, $pop9, $pop80 + i32.const $push11=, 1 + i32.ne $push12=, $pop10, $pop11 + br_if 0, $pop12 # 0: down to label0 +# BB#3: # %if.end11 + i32.const $push13=, .L.str.3 + i32.const $push81=, 0 + i32.call $push14=, fprintf@FUNCTION, $0, $pop13, $pop81 + br_if 0, $pop14 # 0: down to label0 +# BB#4: # %if.end16 + i32.const $push16=, .L.str + i32.const $push15=, 5 + i32.const $push85=, 1 + i32.call $drop=, fwrite@FUNCTION, $pop16, $pop15, $pop85, $0 + i32.const $push84=, .L.str + i32.store 128($1), $pop84 + i32.const $push83=, .L.str.4 + i32.const $push51=, 128 + i32.add $push52=, $1, $pop51 + i32.call $push17=, fprintf@FUNCTION, $0, $pop83, $pop52 + i32.const $push82=, 5 + i32.ne $push18=, $pop17, $pop82 + br_if 0, $pop18 # 0: down to label0 +# BB#5: # %if.end21 + i32.const $push20=, .L.str.1 + i32.const $push19=, 6 + i32.const $push89=, 1 + i32.call $drop=, fwrite@FUNCTION, $pop20, $pop19, $pop89, $0 + i32.const $push88=, .L.str.1 + i32.store 112($1), $pop88 + i32.const $push87=, .L.str.4 + i32.const $push53=, 112 + i32.add $push54=, $1, $pop53 + i32.call $push21=, fprintf@FUNCTION, $0, $pop87, $pop54 + i32.const $push86=, 6 + i32.ne $push22=, $pop21, $pop86 + br_if 0, $pop22 # 0: down to label0 +# BB#6: # %if.end26 + i32.const $push23=, 97 + i32.call $drop=, fputc@FUNCTION, $pop23, $0 + i32.const $push24=, .L.str.2 + i32.store 96($1), $pop24 + i32.const $push90=, .L.str.4 + i32.const $push55=, 96 + i32.add $push56=, $1, $pop55 + i32.call $push25=, fprintf@FUNCTION, $0, $pop90, $pop56 + i32.const $push26=, 1 + i32.ne $push27=, $pop25, $pop26 + br_if 0, $pop27 # 0: down to label0 +# BB#7: # %if.end31 + i32.const $push28=, .L.str.3 + i32.store 80($1), $pop28 + i32.const $push91=, .L.str.4 + i32.const $push57=, 80 + i32.add $push58=, $1, $pop57 + i32.call $push29=, fprintf@FUNCTION, $0, $pop91, $pop58 + br_if 0, $pop29 # 0: down to label0 +# BB#8: # %if.end36 + i32.const $push30=, 120 + i32.call $drop=, fputc@FUNCTION, $pop30, $0 + i32.const $push92=, 120 + i32.store 64($1), $pop92 + i32.const $push31=, .L.str.5 + i32.const $push59=, 64 + i32.add $push60=, $1, $pop59 + i32.call $push32=, fprintf@FUNCTION, $0, $pop31, $pop60 + i32.const $push33=, 1 + i32.ne $push34=, $pop32, $pop33 + br_if 0, $pop34 # 0: down to label0 +# BB#9: # %if.end41 + i32.const $push35=, .L.str.1 + i32.store 48($1), $pop35 + i32.const $push36=, .L.str.6 + i32.const $push61=, 48 + i32.add $push62=, $1, $pop61 + i32.call $drop=, fprintf@FUNCTION, $0, $pop36, $pop62 + i32.const $push94=, .L.str.1 + i32.store 32($1), $pop94 + i32.const $push93=, .L.str.6 + i32.const $push63=, 32 + i32.add $push64=, $1, $pop63 + i32.call $push37=, fprintf@FUNCTION, $0, $pop93, $pop64 + i32.const $push38=, 7 + i32.ne $push39=, $pop37, $pop38 + br_if 0, $pop39 # 0: down to label0 +# BB#10: # %if.end46 + i32.const $push97=, 0 + i32.store 16($1), $pop97 + i32.const $push40=, .L.str.7 + i32.const $push65=, 16 + i32.add $push66=, $1, $pop65 + i32.call $drop=, fprintf@FUNCTION, $0, $pop40, $pop66 + i32.const $push96=, 0 + i32.store 0($1), $pop96 + i32.const $push95=, .L.str.7 + i32.call $push41=, fprintf@FUNCTION, $0, $pop95, $1 + i32.const $push42=, 2 + i32.ne $push43=, $pop41, $pop42 + br_if 0, $pop43 # 0: down to label0 +# BB#11: # %if.end51 + i32.const $push50=, 0 + i32.const $push48=, 144 + i32.add $push49=, $1, $pop48 + i32.store __stack_pointer($pop50), $pop49 + i32.const $push98=, 0 + return $pop98 +.LBB0_12: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "hello" + .size .L.str, 6 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "hello\n" + .size .L.str.1, 7 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "a" + .size .L.str.2, 2 + + .type .L.str.3,@object # @.str.3 +.L.str.3: + .skip 1 + .size .L.str.3, 1 + + .type .L.str.4,@object # @.str.4 +.L.str.4: + .asciz "%s" + .size .L.str.4, 3 + + .type .L.str.5,@object # @.str.5 +.L.str.5: + .asciz "%c" + .size .L.str.5, 3 + + .type .L.str.6,@object # @.str.6 +.L.str.6: + .asciz "%s\n" + .size .L.str.6, 4 + + .type .L.str.7,@object # @.str.7 +.L.str.7: + .asciz "%d\n" + .size .L.str.7, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype fprintf, i32, i32, i32 + .functype abort, void + .functype fwrite, i32, i32, i32, i32, i32 + .functype fputc, i32, i32, i32 + .import_global stdout + .size stdout, 4 diff --git a/src/binaryen/test/torture-s/fprintf-chk-1.c.s b/src/binaryen/test/torture-s/fprintf-chk-1.c.s new file mode 100644 index 0000000000..e1aaa68bcf --- /dev/null +++ b/src/binaryen/test/torture-s/fprintf-chk-1.c.s @@ -0,0 +1,452 @@ + .text + .file "fprintf-chk-1.c" + .section .text.__fprintf_chk,"ax",@progbits + .hidden __fprintf_chk # -- Begin function __fprintf_chk + .globl __fprintf_chk + .type __fprintf_chk,@function +__fprintf_chk: # @__fprintf_chk + .param i32, i32, i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push11=, $pop2, $pop4 + tee_local $push10=, $4=, $pop11 + i32.store __stack_pointer($pop5), $pop10 + block + i32.const $push9=, 0 + i32.load $push0=, should_optimize($pop9) + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push12=, 0 + i32.const $push1=, 1 + i32.store should_optimize($pop12), $pop1 + i32.store 12($4), $3 + i32.call $3=, vfprintf@FUNCTION, $0, $2, $3 + i32.const $push8=, 0 + i32.const $push6=, 16 + i32.add $push7=, $4, $pop6 + i32.store __stack_pointer($pop8), $pop7 + return $3 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size __fprintf_chk, .Lfunc_end0-__fprintf_chk + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push57=, 0 + i32.const $push55=, 0 + i32.load $push54=, __stack_pointer($pop55) + i32.const $push56=, 224 + i32.sub $push95=, $pop54, $pop56 + tee_local $push94=, $1=, $pop95 + i32.store __stack_pointer($pop57), $pop94 + i32.const $push93=, 0 + i32.const $push0=, 1 + i32.store should_optimize($pop93), $pop0 + i32.const $push92=, 0 + i32.load $push91=, stdout($pop92) + tee_local $push90=, $0=, $pop91 + i32.const $push89=, .L.str + i32.const $push88=, 0 + i32.call $drop=, __fprintf_chk@FUNCTION, $pop90, $1, $pop89, $pop88 + block + i32.const $push87=, 0 + i32.load $push1=, should_optimize($pop87) + i32.eqz $push200=, $pop1 + br_if 0, $pop200 # 0: down to label1 +# BB#1: # %if.end + i32.const $push99=, 0 + i32.const $push98=, 0 + i32.store should_optimize($pop99), $pop98 + i32.const $push97=, .L.str + i32.const $push96=, 0 + i32.call $push2=, __fprintf_chk@FUNCTION, $0, $1, $pop97, $pop96 + i32.const $push3=, 5 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label1 +# BB#2: # %if.end3 + i32.const $push100=, 0 + i32.load $push5=, should_optimize($pop100) + i32.eqz $push201=, $pop5 + br_if 0, $pop201 # 0: down to label1 +# BB#3: # %if.end6 + i32.const $push104=, 0 + i32.const $push6=, 1 + i32.store should_optimize($pop104), $pop6 + i32.const $push103=, .L.str.1 + i32.const $push102=, 0 + i32.call $drop=, __fprintf_chk@FUNCTION, $0, $1, $pop103, $pop102 + i32.const $push101=, 0 + i32.load $push7=, should_optimize($pop101) + i32.eqz $push202=, $pop7 + br_if 0, $pop202 # 0: down to label1 +# BB#4: # %if.end10 + i32.const $push108=, 0 + i32.const $push107=, 0 + i32.store should_optimize($pop108), $pop107 + i32.const $push106=, .L.str.1 + i32.const $push105=, 0 + i32.call $push8=, __fprintf_chk@FUNCTION, $0, $1, $pop106, $pop105 + i32.const $push9=, 6 + i32.ne $push10=, $pop8, $pop9 + br_if 0, $pop10 # 0: down to label1 +# BB#5: # %if.end14 + i32.const $push109=, 0 + i32.load $push11=, should_optimize($pop109) + i32.eqz $push203=, $pop11 + br_if 0, $pop203 # 0: down to label1 +# BB#6: # %if.end17 + i32.const $push114=, 0 + i32.const $push113=, 1 + i32.store should_optimize($pop114), $pop113 + i32.const $push112=, .L.str.2 + i32.const $push111=, 0 + i32.call $drop=, __fprintf_chk@FUNCTION, $0, $1, $pop112, $pop111 + i32.const $push110=, 0 + i32.load $push12=, should_optimize($pop110) + i32.eqz $push204=, $pop12 + br_if 0, $pop204 # 0: down to label1 +# BB#7: # %if.end21 + i32.const $push119=, 0 + i32.const $push118=, 0 + i32.store should_optimize($pop119), $pop118 + i32.const $push117=, .L.str.2 + i32.const $push116=, 0 + i32.call $push13=, __fprintf_chk@FUNCTION, $0, $1, $pop117, $pop116 + i32.const $push115=, 1 + i32.ne $push14=, $pop13, $pop115 + br_if 0, $pop14 # 0: down to label1 +# BB#8: # %if.end25 + i32.const $push120=, 0 + i32.load $push15=, should_optimize($pop120) + i32.eqz $push205=, $pop15 + br_if 0, $pop205 # 0: down to label1 +# BB#9: # %if.end28 + i32.const $push124=, 0 + i32.const $push16=, 1 + i32.store should_optimize($pop124), $pop16 + i32.const $push123=, .L.str.3 + i32.const $push122=, 0 + i32.call $drop=, __fprintf_chk@FUNCTION, $0, $1, $pop123, $pop122 + i32.const $push121=, 0 + i32.load $push17=, should_optimize($pop121) + i32.eqz $push206=, $pop17 + br_if 0, $pop206 # 0: down to label1 +# BB#10: # %if.end32 + i32.const $push128=, 0 + i32.const $push127=, 0 + i32.store should_optimize($pop128), $pop127 + i32.const $push126=, .L.str.3 + i32.const $push125=, 0 + i32.call $push18=, __fprintf_chk@FUNCTION, $0, $1, $pop126, $pop125 + br_if 0, $pop18 # 0: down to label1 +# BB#11: # %if.end36 + i32.const $push129=, 0 + i32.load $push19=, should_optimize($pop129) + i32.eqz $push207=, $pop19 + br_if 0, $pop207 # 0: down to label1 +# BB#12: # %if.end39 + i32.const $push133=, 0 + i32.const $push20=, 1 + i32.store should_optimize($pop133), $pop20 + i32.const $push132=, .L.str + i32.store 208($1), $pop132 + i32.const $push131=, .L.str.4 + i32.const $push61=, 208 + i32.add $push62=, $1, $pop61 + i32.call $drop=, __fprintf_chk@FUNCTION, $0, $1, $pop131, $pop62 + i32.const $push130=, 0 + i32.load $push21=, should_optimize($pop130) + i32.eqz $push208=, $pop21 + br_if 0, $pop208 # 0: down to label1 +# BB#13: # %if.end43 + i32.const $push137=, .L.str + i32.store 192($1), $pop137 + i32.const $push136=, 0 + i32.const $push135=, 0 + i32.store should_optimize($pop136), $pop135 + i32.const $push134=, .L.str.4 + i32.const $push63=, 192 + i32.add $push64=, $1, $pop63 + i32.call $push22=, __fprintf_chk@FUNCTION, $0, $1, $pop134, $pop64 + i32.const $push23=, 5 + i32.ne $push24=, $pop22, $pop23 + br_if 0, $pop24 # 0: down to label1 +# BB#14: # %if.end47 + i32.const $push138=, 0 + i32.load $push25=, should_optimize($pop138) + i32.eqz $push209=, $pop25 + br_if 0, $pop209 # 0: down to label1 +# BB#15: # %if.end50 + i32.const $push142=, 0 + i32.const $push26=, 1 + i32.store should_optimize($pop142), $pop26 + i32.const $push141=, .L.str.1 + i32.store 176($1), $pop141 + i32.const $push140=, .L.str.4 + i32.const $push65=, 176 + i32.add $push66=, $1, $pop65 + i32.call $drop=, __fprintf_chk@FUNCTION, $0, $1, $pop140, $pop66 + i32.const $push139=, 0 + i32.load $push27=, should_optimize($pop139) + i32.eqz $push210=, $pop27 + br_if 0, $pop210 # 0: down to label1 +# BB#16: # %if.end54 + i32.const $push146=, .L.str.1 + i32.store 160($1), $pop146 + i32.const $push145=, 0 + i32.const $push144=, 0 + i32.store should_optimize($pop145), $pop144 + i32.const $push143=, .L.str.4 + i32.const $push67=, 160 + i32.add $push68=, $1, $pop67 + i32.call $push28=, __fprintf_chk@FUNCTION, $0, $1, $pop143, $pop68 + i32.const $push29=, 6 + i32.ne $push30=, $pop28, $pop29 + br_if 0, $pop30 # 0: down to label1 +# BB#17: # %if.end58 + i32.const $push147=, 0 + i32.load $push31=, should_optimize($pop147) + i32.eqz $push211=, $pop31 + br_if 0, $pop211 # 0: down to label1 +# BB#18: # %if.end61 + i32.const $push152=, 0 + i32.const $push151=, 1 + i32.store should_optimize($pop152), $pop151 + i32.const $push150=, .L.str.2 + i32.store 144($1), $pop150 + i32.const $push149=, .L.str.4 + i32.const $push69=, 144 + i32.add $push70=, $1, $pop69 + i32.call $drop=, __fprintf_chk@FUNCTION, $0, $1, $pop149, $pop70 + i32.const $push148=, 0 + i32.load $push32=, should_optimize($pop148) + i32.eqz $push212=, $pop32 + br_if 0, $pop212 # 0: down to label1 +# BB#19: # %if.end65 + i32.const $push157=, .L.str.2 + i32.store 128($1), $pop157 + i32.const $push156=, 0 + i32.const $push155=, 0 + i32.store should_optimize($pop156), $pop155 + i32.const $push154=, .L.str.4 + i32.const $push71=, 128 + i32.add $push72=, $1, $pop71 + i32.call $push33=, __fprintf_chk@FUNCTION, $0, $1, $pop154, $pop72 + i32.const $push153=, 1 + i32.ne $push34=, $pop33, $pop153 + br_if 0, $pop34 # 0: down to label1 +# BB#20: # %if.end69 + i32.const $push158=, 0 + i32.load $push35=, should_optimize($pop158) + i32.eqz $push213=, $pop35 + br_if 0, $pop213 # 0: down to label1 +# BB#21: # %if.end72 + i32.const $push162=, 0 + i32.const $push36=, 1 + i32.store should_optimize($pop162), $pop36 + i32.const $push161=, .L.str.3 + i32.store 112($1), $pop161 + i32.const $push160=, .L.str.4 + i32.const $push73=, 112 + i32.add $push74=, $1, $pop73 + i32.call $drop=, __fprintf_chk@FUNCTION, $0, $1, $pop160, $pop74 + i32.const $push159=, 0 + i32.load $push37=, should_optimize($pop159) + i32.eqz $push214=, $pop37 + br_if 0, $pop214 # 0: down to label1 +# BB#22: # %if.end76 + i32.const $push166=, .L.str.3 + i32.store 96($1), $pop166 + i32.const $push165=, 0 + i32.const $push164=, 0 + i32.store should_optimize($pop165), $pop164 + i32.const $push163=, .L.str.4 + i32.const $push75=, 96 + i32.add $push76=, $1, $pop75 + i32.call $push38=, __fprintf_chk@FUNCTION, $0, $1, $pop163, $pop76 + br_if 0, $pop38 # 0: down to label1 +# BB#23: # %if.end80 + i32.const $push167=, 0 + i32.load $push39=, should_optimize($pop167) + i32.eqz $push215=, $pop39 + br_if 0, $pop215 # 0: down to label1 +# BB#24: # %if.end83 + i32.const $push172=, 0 + i32.const $push171=, 1 + i32.store should_optimize($pop172), $pop171 + i32.const $push170=, 120 + i32.store 80($1), $pop170 + i32.const $push169=, .L.str.5 + i32.const $push77=, 80 + i32.add $push78=, $1, $pop77 + i32.call $drop=, __fprintf_chk@FUNCTION, $0, $1, $pop169, $pop78 + i32.const $push168=, 0 + i32.load $push40=, should_optimize($pop168) + i32.eqz $push216=, $pop40 + br_if 0, $pop216 # 0: down to label1 +# BB#25: # %if.end87 + i32.const $push177=, 120 + i32.store 64($1), $pop177 + i32.const $push176=, 0 + i32.const $push175=, 0 + i32.store should_optimize($pop176), $pop175 + i32.const $push174=, .L.str.5 + i32.const $push79=, 64 + i32.add $push80=, $1, $pop79 + i32.call $push41=, __fprintf_chk@FUNCTION, $0, $1, $pop174, $pop80 + i32.const $push173=, 1 + i32.ne $push42=, $pop41, $pop173 + br_if 0, $pop42 # 0: down to label1 +# BB#26: # %if.end91 + i32.const $push178=, 0 + i32.load $push43=, should_optimize($pop178) + i32.eqz $push217=, $pop43 + br_if 0, $pop217 # 0: down to label1 +# BB#27: # %if.end94 + i32.const $push183=, .L.str.1 + i32.store 48($1), $pop183 + i32.const $push182=, 0 + i32.const $push181=, 0 + i32.store should_optimize($pop182), $pop181 + i32.const $push180=, .L.str.6 + i32.const $push81=, 48 + i32.add $push82=, $1, $pop81 + i32.call $drop=, __fprintf_chk@FUNCTION, $0, $1, $pop180, $pop82 + i32.const $push179=, 0 + i32.load $push44=, should_optimize($pop179) + i32.eqz $push218=, $pop44 + br_if 0, $pop218 # 0: down to label1 +# BB#28: # %if.end98 + i32.const $push187=, .L.str.1 + i32.store 32($1), $pop187 + i32.const $push186=, 0 + i32.const $push185=, 0 + i32.store should_optimize($pop186), $pop185 + i32.const $push184=, .L.str.6 + i32.const $push83=, 32 + i32.add $push84=, $1, $pop83 + i32.call $push45=, __fprintf_chk@FUNCTION, $0, $1, $pop184, $pop84 + i32.const $push46=, 7 + i32.ne $push47=, $pop45, $pop46 + br_if 0, $pop47 # 0: down to label1 +# BB#29: # %if.end102 + i32.const $push188=, 0 + i32.load $push48=, should_optimize($pop188) + i32.eqz $push219=, $pop48 + br_if 0, $pop219 # 0: down to label1 +# BB#30: # %if.end105 + i32.const $push193=, 0 + i32.store 16($1), $pop193 + i32.const $push192=, 0 + i32.const $push191=, 0 + i32.store should_optimize($pop192), $pop191 + i32.const $push190=, .L.str.7 + i32.const $push85=, 16 + i32.add $push86=, $1, $pop85 + i32.call $drop=, __fprintf_chk@FUNCTION, $0, $1, $pop190, $pop86 + i32.const $push189=, 0 + i32.load $push49=, should_optimize($pop189) + i32.eqz $push220=, $pop49 + br_if 0, $pop220 # 0: down to label1 +# BB#31: # %if.end109 + i32.const $push197=, 0 + i32.store 0($1), $pop197 + i32.const $push196=, 0 + i32.const $push195=, 0 + i32.store should_optimize($pop196), $pop195 + i32.const $push194=, .L.str.7 + i32.call $push50=, __fprintf_chk@FUNCTION, $0, $1, $pop194, $1 + i32.const $push51=, 2 + i32.ne $push52=, $pop50, $pop51 + br_if 0, $pop52 # 0: down to label1 +# BB#32: # %if.end113 + i32.const $push198=, 0 + i32.load $push53=, should_optimize($pop198) + i32.eqz $push221=, $pop53 + br_if 0, $pop221 # 0: down to label1 +# BB#33: # %if.end116 + i32.const $push60=, 0 + i32.const $push58=, 224 + i32.add $push59=, $1, $pop58 + i32.store __stack_pointer($pop60), $pop59 + i32.const $push199=, 0 + return $pop199 +.LBB1_34: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden should_optimize # @should_optimize + .type should_optimize,@object + .section .bss.should_optimize,"aw",@nobits + .globl should_optimize + .p2align 2 +should_optimize: + .int32 0 # 0x0 + .size should_optimize, 4 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "hello" + .size .L.str, 6 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "hello\n" + .size .L.str.1, 7 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "a" + .size .L.str.2, 2 + + .type .L.str.3,@object # @.str.3 +.L.str.3: + .skip 1 + .size .L.str.3, 1 + + .type .L.str.4,@object # @.str.4 +.L.str.4: + .asciz "%s" + .size .L.str.4, 3 + + .type .L.str.5,@object # @.str.5 +.L.str.5: + .asciz "%c" + .size .L.str.5, 3 + + .type .L.str.6,@object # @.str.6 +.L.str.6: + .asciz "%s\n" + .size .L.str.6, 4 + + .type .L.str.7,@object # @.str.7 +.L.str.7: + .asciz "%d\n" + .size .L.str.7, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype vfprintf, i32, i32, i32, i32 + .import_global stdout + .size stdout, 4 diff --git a/src/binaryen/test/torture-s/frame-address.c.s b/src/binaryen/test/torture-s/frame-address.c.s new file mode 100644 index 0000000000..33151d1057 --- /dev/null +++ b/src/binaryen/test/torture-s/frame-address.c.s @@ -0,0 +1,134 @@ + .text + .file "frame-address.c" + .section .text.check_fa_work,"ax",@progbits + .hidden check_fa_work # -- Begin function check_fa_work + .globl check_fa_work + .type check_fa_work,@function +check_fa_work: # @check_fa_work + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.load $push8=, __stack_pointer($pop9) + i32.const $push10=, 16 + i32.sub $push18=, $pop8, $pop10 + tee_local $push17=, $2=, $pop18 + i32.const $push0=, 0 + i32.store8 15($pop17), $pop0 + block + i32.const $push11=, 15 + i32.add $push12=, $2, $pop11 + i32.le_u $push1=, $pop12, $0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.else + i32.le_u $push4=, $0, $1 + i32.const $push13=, 15 + i32.add $push14=, $2, $pop13 + i32.ge_u $push5=, $pop14, $1 + i32.and $push6=, $pop4, $pop5 + return $pop6 +.LBB0_2: # %if.then + end_block # label0: + i32.ge_u $push2=, $0, $1 + i32.const $push15=, 15 + i32.add $push16=, $2, $pop15 + i32.le_u $push3=, $pop16, $1 + i32.and $push7=, $pop2, $pop3 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end0: + .size check_fa_work, .Lfunc_end0-check_fa_work + # -- End function + .section .text.check_fa_mid,"ax",@progbits + .hidden check_fa_mid # -- Begin function check_fa_mid + .globl check_fa_mid + .type check_fa_mid,@function +check_fa_mid: # @check_fa_mid + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.load $push4=, __stack_pointer($pop2) + copy_local $push6=, $pop4 + tee_local $push5=, $1=, $pop6 + i32.call $0=, check_fa_work@FUNCTION, $0, $pop5 + i32.const $push3=, 0 + i32.store __stack_pointer($pop3), $1 + i32.const $push0=, 0 + i32.ne $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size check_fa_mid, .Lfunc_end1-check_fa_mid + # -- End function + .section .text.check_fa,"ax",@progbits + .hidden check_fa # -- Begin function check_fa + .globl check_fa + .type check_fa,@function +check_fa: # @check_fa + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push12=, $pop2, $pop4 + tee_local $push11=, $2=, $pop12 + i32.store __stack_pointer($pop5), $pop11 + i32.const $push9=, 15 + i32.add $push10=, $2, $pop9 + i32.call $1=, check_fa_mid@FUNCTION, $pop10 + i32.const $push8=, 0 + i32.const $push6=, 16 + i32.add $push7=, $2, $pop6 + i32.store __stack_pointer($pop8), $pop7 + i32.const $push0=, 0 + i32.ne $push1=, $1, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size check_fa, .Lfunc_end2-check_fa + # -- End function + .section .text.how_much,"ax",@progbits + .hidden how_much # -- Begin function how_much + .globl how_much + .type how_much,@function +how_much: # @how_much + .result i32 +# BB#0: # %entry + i32.const $push0=, 8 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size how_much, .Lfunc_end3-how_much + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + block + i32.call $push0=, check_fa@FUNCTION, $0 + i32.eqz $push2=, $pop0 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %if.end + i32.const $push1=, 0 + return $pop1 +.LBB4_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/func-ptr-1.c.s b/src/binaryen/test/torture-s/func-ptr-1.c.s new file mode 100644 index 0000000000..4b5f13aa85 --- /dev/null +++ b/src/binaryen/test/torture-s/func-ptr-1.c.s @@ -0,0 +1,19 @@ + .text + .file "func-ptr-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/gofast.c.s b/src/binaryen/test/torture-s/gofast.c.s new file mode 100644 index 0000000000..c8b941a290 --- /dev/null +++ b/src/binaryen/test/torture-s/gofast.c.s @@ -0,0 +1,504 @@ + .text + .file "gofast.c" + .section .text.fp_add,"ax",@progbits + .hidden fp_add # -- Begin function fp_add + .globl fp_add + .type fp_add,@function +fp_add: # @fp_add + .param f32, f32 + .result f32 +# BB#0: # %entry + f32.add $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size fp_add, .Lfunc_end0-fp_add + # -- End function + .section .text.fp_sub,"ax",@progbits + .hidden fp_sub # -- Begin function fp_sub + .globl fp_sub + .type fp_sub,@function +fp_sub: # @fp_sub + .param f32, f32 + .result f32 +# BB#0: # %entry + f32.sub $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size fp_sub, .Lfunc_end1-fp_sub + # -- End function + .section .text.fp_mul,"ax",@progbits + .hidden fp_mul # -- Begin function fp_mul + .globl fp_mul + .type fp_mul,@function +fp_mul: # @fp_mul + .param f32, f32 + .result f32 +# BB#0: # %entry + f32.mul $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size fp_mul, .Lfunc_end2-fp_mul + # -- End function + .section .text.fp_div,"ax",@progbits + .hidden fp_div # -- Begin function fp_div + .globl fp_div + .type fp_div,@function +fp_div: # @fp_div + .param f32, f32 + .result f32 +# BB#0: # %entry + f32.div $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size fp_div, .Lfunc_end3-fp_div + # -- End function + .section .text.fp_neg,"ax",@progbits + .hidden fp_neg # -- Begin function fp_neg + .globl fp_neg + .type fp_neg,@function +fp_neg: # @fp_neg + .param f32 + .result f32 +# BB#0: # %entry + f32.neg $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size fp_neg, .Lfunc_end4-fp_neg + # -- End function + .section .text.dp_add,"ax",@progbits + .hidden dp_add # -- Begin function dp_add + .globl dp_add + .type dp_add,@function +dp_add: # @dp_add + .param f64, f64 + .result f64 +# BB#0: # %entry + f64.add $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end5: + .size dp_add, .Lfunc_end5-dp_add + # -- End function + .section .text.dp_sub,"ax",@progbits + .hidden dp_sub # -- Begin function dp_sub + .globl dp_sub + .type dp_sub,@function +dp_sub: # @dp_sub + .param f64, f64 + .result f64 +# BB#0: # %entry + f64.sub $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end6: + .size dp_sub, .Lfunc_end6-dp_sub + # -- End function + .section .text.dp_mul,"ax",@progbits + .hidden dp_mul # -- Begin function dp_mul + .globl dp_mul + .type dp_mul,@function +dp_mul: # @dp_mul + .param f64, f64 + .result f64 +# BB#0: # %entry + f64.mul $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end7: + .size dp_mul, .Lfunc_end7-dp_mul + # -- End function + .section .text.dp_div,"ax",@progbits + .hidden dp_div # -- Begin function dp_div + .globl dp_div + .type dp_div,@function +dp_div: # @dp_div + .param f64, f64 + .result f64 +# BB#0: # %entry + f64.div $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end8: + .size dp_div, .Lfunc_end8-dp_div + # -- End function + .section .text.dp_neg,"ax",@progbits + .hidden dp_neg # -- Begin function dp_neg + .globl dp_neg + .type dp_neg,@function +dp_neg: # @dp_neg + .param f64 + .result f64 +# BB#0: # %entry + f64.neg $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end9: + .size dp_neg, .Lfunc_end9-dp_neg + # -- End function + .section .text.fp_to_dp,"ax",@progbits + .hidden fp_to_dp # -- Begin function fp_to_dp + .globl fp_to_dp + .type fp_to_dp,@function +fp_to_dp: # @fp_to_dp + .param f32 + .result f64 +# BB#0: # %entry + f64.promote/f32 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end10: + .size fp_to_dp, .Lfunc_end10-fp_to_dp + # -- End function + .section .text.dp_to_fp,"ax",@progbits + .hidden dp_to_fp # -- Begin function dp_to_fp + .globl dp_to_fp + .type dp_to_fp,@function +dp_to_fp: # @dp_to_fp + .param f64 + .result f32 +# BB#0: # %entry + f32.demote/f64 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end11: + .size dp_to_fp, .Lfunc_end11-dp_to_fp + # -- End function + .section .text.eqsf2,"ax",@progbits + .hidden eqsf2 # -- Begin function eqsf2 + .globl eqsf2 + .type eqsf2,@function +eqsf2: # @eqsf2 + .param f32, f32 + .result i32 +# BB#0: # %entry + f32.eq $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end12: + .size eqsf2, .Lfunc_end12-eqsf2 + # -- End function + .section .text.nesf2,"ax",@progbits + .hidden nesf2 # -- Begin function nesf2 + .globl nesf2 + .type nesf2,@function +nesf2: # @nesf2 + .param f32, f32 + .result i32 +# BB#0: # %entry + f32.ne $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end13: + .size nesf2, .Lfunc_end13-nesf2 + # -- End function + .section .text.gtsf2,"ax",@progbits + .hidden gtsf2 # -- Begin function gtsf2 + .globl gtsf2 + .type gtsf2,@function +gtsf2: # @gtsf2 + .param f32, f32 + .result i32 +# BB#0: # %entry + f32.gt $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end14: + .size gtsf2, .Lfunc_end14-gtsf2 + # -- End function + .section .text.gesf2,"ax",@progbits + .hidden gesf2 # -- Begin function gesf2 + .globl gesf2 + .type gesf2,@function +gesf2: # @gesf2 + .param f32, f32 + .result i32 +# BB#0: # %entry + f32.ge $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end15: + .size gesf2, .Lfunc_end15-gesf2 + # -- End function + .section .text.ltsf2,"ax",@progbits + .hidden ltsf2 # -- Begin function ltsf2 + .globl ltsf2 + .type ltsf2,@function +ltsf2: # @ltsf2 + .param f32, f32 + .result i32 +# BB#0: # %entry + f32.lt $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end16: + .size ltsf2, .Lfunc_end16-ltsf2 + # -- End function + .section .text.lesf2,"ax",@progbits + .hidden lesf2 # -- Begin function lesf2 + .globl lesf2 + .type lesf2,@function +lesf2: # @lesf2 + .param f32, f32 + .result i32 +# BB#0: # %entry + f32.le $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end17: + .size lesf2, .Lfunc_end17-lesf2 + # -- End function + .section .text.eqdf2,"ax",@progbits + .hidden eqdf2 # -- Begin function eqdf2 + .globl eqdf2 + .type eqdf2,@function +eqdf2: # @eqdf2 + .param f64, f64 + .result i32 +# BB#0: # %entry + f64.eq $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end18: + .size eqdf2, .Lfunc_end18-eqdf2 + # -- End function + .section .text.nedf2,"ax",@progbits + .hidden nedf2 # -- Begin function nedf2 + .globl nedf2 + .type nedf2,@function +nedf2: # @nedf2 + .param f64, f64 + .result i32 +# BB#0: # %entry + f64.ne $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end19: + .size nedf2, .Lfunc_end19-nedf2 + # -- End function + .section .text.gtdf2,"ax",@progbits + .hidden gtdf2 # -- Begin function gtdf2 + .globl gtdf2 + .type gtdf2,@function +gtdf2: # @gtdf2 + .param f64, f64 + .result i32 +# BB#0: # %entry + f64.gt $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end20: + .size gtdf2, .Lfunc_end20-gtdf2 + # -- End function + .section .text.gedf2,"ax",@progbits + .hidden gedf2 # -- Begin function gedf2 + .globl gedf2 + .type gedf2,@function +gedf2: # @gedf2 + .param f64, f64 + .result i32 +# BB#0: # %entry + f64.ge $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end21: + .size gedf2, .Lfunc_end21-gedf2 + # -- End function + .section .text.ltdf2,"ax",@progbits + .hidden ltdf2 # -- Begin function ltdf2 + .globl ltdf2 + .type ltdf2,@function +ltdf2: # @ltdf2 + .param f64, f64 + .result i32 +# BB#0: # %entry + f64.lt $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end22: + .size ltdf2, .Lfunc_end22-ltdf2 + # -- End function + .section .text.ledf2,"ax",@progbits + .hidden ledf2 # -- Begin function ledf2 + .globl ledf2 + .type ledf2,@function +ledf2: # @ledf2 + .param f64, f64 + .result i32 +# BB#0: # %entry + f64.le $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end23: + .size ledf2, .Lfunc_end23-ledf2 + # -- End function + .section .text.floatsisf,"ax",@progbits + .hidden floatsisf # -- Begin function floatsisf + .globl floatsisf + .type floatsisf,@function +floatsisf: # @floatsisf + .param i32 + .result f32 +# BB#0: # %entry + f32.convert_s/i32 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end24: + .size floatsisf, .Lfunc_end24-floatsisf + # -- End function + .section .text.floatsidf,"ax",@progbits + .hidden floatsidf # -- Begin function floatsidf + .globl floatsidf + .type floatsidf,@function +floatsidf: # @floatsidf + .param i32 + .result f64 +# BB#0: # %entry + f64.convert_s/i32 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end25: + .size floatsidf, .Lfunc_end25-floatsidf + # -- End function + .section .text.fixsfsi,"ax",@progbits + .hidden fixsfsi # -- Begin function fixsfsi + .globl fixsfsi + .type fixsfsi,@function +fixsfsi: # @fixsfsi + .param f32 + .result i32 +# BB#0: # %entry + i32.trunc_s/f32 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end26: + .size fixsfsi, .Lfunc_end26-fixsfsi + # -- End function + .section .text.fixdfsi,"ax",@progbits + .hidden fixdfsi # -- Begin function fixdfsi + .globl fixdfsi + .type fixdfsi,@function +fixdfsi: # @fixdfsi + .param f64 + .result i32 +# BB#0: # %entry + i32.trunc_s/f64 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end27: + .size fixdfsi, .Lfunc_end27-fixdfsi + # -- End function + .section .text.fixunssfsi,"ax",@progbits + .hidden fixunssfsi # -- Begin function fixunssfsi + .globl fixunssfsi + .type fixunssfsi,@function +fixunssfsi: # @fixunssfsi + .param f32 + .result i32 +# BB#0: # %entry + i32.trunc_u/f32 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end28: + .size fixunssfsi, .Lfunc_end28-fixunssfsi + # -- End function + .section .text.fixunsdfsi,"ax",@progbits + .hidden fixunsdfsi # -- Begin function fixunsdfsi + .globl fixunsdfsi + .type fixunsdfsi,@function +fixunsdfsi: # @fixunsdfsi + .param f64 + .result i32 +# BB#0: # %entry + i32.trunc_u/f64 $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end29: + .size fixunsdfsi, .Lfunc_end29-fixunsdfsi + # -- End function + .section .text.fail,"ax",@progbits + .hidden fail # -- Begin function fail + .globl fail + .type fail,@function +fail: # @fail + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 16 + i32.sub $push16=, $pop6, $pop8 + tee_local $push15=, $1=, $pop16 + i32.store __stack_pointer($pop9), $pop15 + i32.const $push0=, 0 + i32.const $push14=, 0 + i32.load $push1=, fail_count($pop14) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store fail_count($pop0), $pop3 + i32.store 0($1), $0 + i32.const $push13=, 0 + i32.load $push4=, stderr($pop13) + i32.const $push5=, .L.str + i32.call $drop=, fprintf@FUNCTION, $pop4, $pop5, $1 + i32.const $push12=, 0 + i32.const $push10=, 16 + i32.add $push11=, $1, $pop10 + i32.store __stack_pointer($pop12), $pop11 + copy_local $push17=, $1 + # fallthrough-return: $pop17 + .endfunc +.Lfunc_end30: + .size fail, .Lfunc_end30-fail + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end198 + block + i32.const $push1=, 0 + i32.load $push0=, fail_count($pop1) + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end202 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable +.LBB31_2: # %if.then201 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end31: + .size main, .Lfunc_end31-main + # -- End function + .hidden fail_count # @fail_count + .type fail_count,@object + .section .bss.fail_count,"aw",@nobits + .globl fail_count + .p2align 2 +fail_count: + .int32 0 # 0x0 + .size fail_count, 4 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "Test failed: %s\n" + .size .L.str, 17 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype fprintf, i32, i32, i32 + .functype abort, void + .functype exit, void, i32 + .import_global stderr + .size stderr, 4 diff --git a/src/binaryen/test/torture-s/ifcvt-onecmpl-abs-1.c.s b/src/binaryen/test/torture-s/ifcvt-onecmpl-abs-1.c.s new file mode 100644 index 0000000000..e0c3738ec8 --- /dev/null +++ b/src/binaryen/test/torture-s/ifcvt-onecmpl-abs-1.c.s @@ -0,0 +1,43 @@ + .text + .file "ifcvt-onecmpl-abs-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 31 + i32.shr_s $push1=, $0, $pop0 + i32.xor $push2=, $pop1, $0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, -1 + i32.call $push1=, foo@FUNCTION, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push2=, 0 + return $pop2 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/index-1.c.s b/src/binaryen/test/torture-s/index-1.c.s new file mode 100644 index 0000000000..6138ec1dd8 --- /dev/null +++ b/src/binaryen/test/torture-s/index-1.c.s @@ -0,0 +1,97 @@ + .text + .file "index-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, a-400000 + i32.add $push3=, $pop1, $pop2 + i32.load $push4=, 0($pop3) + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load $push0=, a+120($pop3) + i32.const $push1=, 30 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 4 +a: + .int32 0 # 0x0 + .int32 1 # 0x1 + .int32 2 # 0x2 + .int32 3 # 0x3 + .int32 4 # 0x4 + .int32 5 # 0x5 + .int32 6 # 0x6 + .int32 7 # 0x7 + .int32 8 # 0x8 + .int32 9 # 0x9 + .int32 10 # 0xa + .int32 11 # 0xb + .int32 12 # 0xc + .int32 13 # 0xd + .int32 14 # 0xe + .int32 15 # 0xf + .int32 16 # 0x10 + .int32 17 # 0x11 + .int32 18 # 0x12 + .int32 19 # 0x13 + .int32 20 # 0x14 + .int32 21 # 0x15 + .int32 22 # 0x16 + .int32 23 # 0x17 + .int32 24 # 0x18 + .int32 25 # 0x19 + .int32 26 # 0x1a + .int32 27 # 0x1b + .int32 28 # 0x1c + .int32 29 # 0x1d + .int32 30 # 0x1e + .int32 31 # 0x1f + .int32 32 # 0x20 + .int32 33 # 0x21 + .int32 34 # 0x22 + .int32 35 # 0x23 + .int32 36 # 0x24 + .int32 37 # 0x25 + .int32 38 # 0x26 + .int32 39 # 0x27 + .size a, 160 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/inst-check.c.s b/src/binaryen/test/torture-s/inst-check.c.s new file mode 100644 index 0000000000..fdd89f2275 --- /dev/null +++ b/src/binaryen/test/torture-s/inst-check.c.s @@ -0,0 +1,54 @@ + .text + .file "inst-check.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.lt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %for.body.lr.ph + i32.const $push5=, -1 + i32.add $push6=, $0, $pop5 + i64.extend_u/i32 $push7=, $pop6 + i32.const $push2=, -2 + i32.add $push3=, $0, $pop2 + i64.extend_u/i32 $push4=, $pop3 + i64.mul $push8=, $pop7, $pop4 + i64.const $push9=, 1 + i64.shr_u $push10=, $pop8, $pop9 + i32.wrap/i64 $push11=, $pop10 + i32.add $push12=, $pop11, $0 + i32.const $push15=, -1 + i32.add $push13=, $pop12, $pop15 + return $pop13 +.LBB0_2: + end_block # label0: + i32.const $push14=, 0 + # fallthrough-return: $pop14 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/int-compare.c.s b/src/binaryen/test/torture-s/int-compare.c.s new file mode 100644 index 0000000000..e0d03560a0 --- /dev/null +++ b/src/binaryen/test/torture-s/int-compare.c.s @@ -0,0 +1,129 @@ + .text + .file "int-compare.c" + .section .text.gt,"ax",@progbits + .hidden gt # -- Begin function gt + .globl gt + .type gt,@function +gt: # @gt + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.gt_s $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size gt, .Lfunc_end0-gt + # -- End function + .section .text.ge,"ax",@progbits + .hidden ge # -- Begin function ge + .globl ge + .type ge,@function +ge: # @ge + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.ge_s $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size ge, .Lfunc_end1-ge + # -- End function + .section .text.lt,"ax",@progbits + .hidden lt # -- Begin function lt + .globl lt + .type lt,@function +lt: # @lt + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.lt_s $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size lt, .Lfunc_end2-lt + # -- End function + .section .text.le,"ax",@progbits + .hidden le # -- Begin function le + .globl le + .type le,@function +le: # @le + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.le_s $push0=, $0, $1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size le, .Lfunc_end3-le + # -- End function + .section .text.true,"ax",@progbits + .hidden true # -- Begin function true + .globl true + .type true,@function +true: # @true + .param i32 +# BB#0: # %entry + block + i32.eqz $push0=, $0 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + return +.LBB4_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end4: + .size true, .Lfunc_end4-true + # -- End function + .section .text.false,"ax",@progbits + .hidden false # -- Begin function false + .globl false + .type false,@function +false: # @false + .param i32 +# BB#0: # %entry + block + br_if 0, $0 # 0: down to label1 +# BB#1: # %if.end + return +.LBB5_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end5: + .size false, .Lfunc_end5-false + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 + .local i32 +# BB#0: # %true.exit + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end6: + .size f, .Lfunc_end6-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end7: + .size main, .Lfunc_end7-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/ipa-sra-1.c.s b/src/binaryen/test/torture-s/ipa-sra-1.c.s new file mode 100644 index 0000000000..34ca4f0e55 --- /dev/null +++ b/src/binaryen/test/torture-s/ipa-sra-1.c.s @@ -0,0 +1,18 @@ + .text + .file "ipa-sra-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/ipa-sra-2.c.s b/src/binaryen/test/torture-s/ipa-sra-2.c.s new file mode 100644 index 0000000000..4efebcd8c4 --- /dev/null +++ b/src/binaryen/test/torture-s/ipa-sra-2.c.s @@ -0,0 +1,44 @@ + .text + .file "ipa-sra-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push2=, 2000 + i32.gt_s $push3=, $0, $pop2 + i32.const $push1=, 1 + i32.const $push0=, 40 + i32.call $push5=, calloc@FUNCTION, $pop1, $pop0 + tee_local $push4=, $0=, $pop5 + i32.call $2=, foo@FUNCTION, $pop3, $pop4 + call free@FUNCTION, $0 + copy_local $push6=, $2 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.foo,"ax",@progbits + .type foo,@function # -- Begin function foo +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 3999996 + i32.add $push1=, $1, $pop0 + i32.select $push2=, $pop1, $1, $0 + i32.load $push3=, 0($pop2) + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype calloc, i32, i32, i32 + .functype free, void, i32 diff --git a/src/binaryen/test/torture-s/longlong.c.s b/src/binaryen/test/torture-s/longlong.c.s new file mode 100644 index 0000000000..a7f2573a3f --- /dev/null +++ b/src/binaryen/test/torture-s/longlong.c.s @@ -0,0 +1,132 @@ + .text + .file "longlong.c" + .section .text.alpha_ep_extbl_i_eq_0,"ax",@progbits + .hidden alpha_ep_extbl_i_eq_0 # -- Begin function alpha_ep_extbl_i_eq_0 + .globl alpha_ep_extbl_i_eq_0 + .type alpha_ep_extbl_i_eq_0,@function +alpha_ep_extbl_i_eq_0: # @alpha_ep_extbl_i_eq_0 + .local i32, i32, i32 +# BB#0: # %entry + block + i32.const $push28=, 0 + i32.load $push27=, pars($pop28) + tee_local $push26=, $0=, $pop27 + i32.const $push0=, 31 + i32.and $push25=, $pop26, $pop0 + tee_local $push24=, $1=, $pop25 + i32.const $push23=, 31 + i32.eq $push1=, $pop24, $pop23 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.then + i32.const $push32=, 0 + i32.load $push31=, r($pop32) + tee_local $push30=, $2=, $pop31 + i32.const $push20=, 3 + i32.shl $push21=, $1, $pop20 + i32.add $push22=, $pop30, $pop21 + i32.const $push12=, 2 + i32.shr_u $push13=, $0, $pop12 + i32.const $push4=, 248 + i32.and $push14=, $pop13, $pop4 + i32.add $push15=, $2, $pop14 + i64.load $push16=, 0($pop15) + i32.const $push2=, 24 + i32.shr_u $push3=, $0, $pop2 + i32.const $push29=, 248 + i32.and $push5=, $pop3, $pop29 + i32.add $push6=, $2, $pop5 + i64.load $push7=, 0($pop6) + i64.const $push8=, 3 + i64.shl $push9=, $pop7, $pop8 + i64.const $push10=, 56 + i64.and $push11=, $pop9, $pop10 + i64.shr_u $push17=, $pop16, $pop11 + i64.const $push18=, 255 + i64.and $push19=, $pop17, $pop18 + i64.store 0($pop22), $pop19 +.LBB0_2: # %if.end + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size alpha_ep_extbl_i_eq_0, .Lfunc_end0-alpha_ep_extbl_i_eq_0 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %alpha_ep_extbl_i_eq_0.exit + i32.const $push21=, 0 + i64.const $push0=, 3160194 + i64.store b+136($pop21), $pop0 + i32.const $push20=, 0 + i64.const $push1=, 6003104017374052362 + i64.store b+16($pop20), $pop1 + i32.const $push19=, 0 + i32.load $push18=, r($pop19) + tee_local $push17=, $0=, $pop18 + i64.load $push7=, 16($0) + i64.load $push2=, 136($0) + i64.const $push3=, 3 + i64.shl $push4=, $pop2, $pop3 + i64.const $push5=, 56 + i64.and $push6=, $pop4, $pop5 + i64.shr_u $push8=, $pop7, $pop6 + i64.const $push9=, 255 + i64.and $push10=, $pop8, $pop9 + i64.store 16($pop17), $pop10 + i32.const $push16=, 0 + i32.const $push11=, -2013265854 + i32.store pars($pop16), $pop11 + block + i32.const $push15=, 0 + i64.load $push12=, b+16($pop15) + i64.const $push13=, 77 + i64.ne $push14=, $pop12, $pop13 + br_if 0, $pop14 # 0: down to label1 +# BB#1: # %if.end + i32.const $push22=, 0 + call exit@FUNCTION, $pop22 + unreachable +.LBB1_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 4 +b: + .skip 256 + .size b, 256 + + .hidden r # @r + .type r,@object + .section .data.r,"aw",@progbits + .globl r + .p2align 2 +r: + .int32 b + .size r, 4 + + .hidden pars # @pars + .type pars,@object + .section .bss.pars,"aw",@nobits + .globl pars + .p2align 2 +pars: + .int32 0 # 0x0 + .size pars, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/loop-1.c.s b/src/binaryen/test/torture-s/loop-1.c.s new file mode 100644 index 0000000000..255d553d2f --- /dev/null +++ b/src/binaryen/test/torture-s/loop-1.c.s @@ -0,0 +1,19 @@ + .text + .file "loop-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %for.cond2.2 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/loop-10.c.s b/src/binaryen/test/torture-s/loop-10.c.s new file mode 100644 index 0000000000..69674abbc1 --- /dev/null +++ b/src/binaryen/test/torture-s/loop-10.c.s @@ -0,0 +1,40 @@ + .text + .file "loop-10.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %while.end + i32.const $push5=, 0 + i32.const $push4=, 0 + i32.load $push3=, count($pop4) + tee_local $push2=, $0=, $pop3 + i32.const $push0=, 2 + i32.add $push1=, $pop2, $pop0 + i32.store count($pop5), $pop1 + block + br_if 0, $0 # 0: down to label0 +# BB#1: # %if.end4 + i32.const $push6=, 0 + return $pop6 +.LBB0_2: # %if.then3 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type count,@object # @count + .section .bss.count,"aw",@nobits + .p2align 2 +count: + .int32 0 # 0x0 + .size count, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/loop-11.c.s b/src/binaryen/test/torture-s/loop-11.c.s new file mode 100644 index 0000000000..584c75d987 --- /dev/null +++ b/src/binaryen/test/torture-s/loop-11.c.s @@ -0,0 +1,67 @@ + .text + .file "loop-11.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, 198 + i32.const $0=, a+792 +.LBB0_1: # %for.body.i + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.store 0($0), $1 + i32.const $push9=, -4 + i32.add $0=, $0, $pop9 + i32.const $push8=, -1 + i32.add $push7=, $1, $pop8 + tee_local $push6=, $1=, $pop7 + i32.const $push5=, -1 + i32.ne $push0=, $pop6, $pop5 + br_if 0, $pop0 # 0: up to label0 +# BB#2: # %for.body.preheader + end_loop + i32.const $1=, -1 + i32.const $0=, a +.LBB0_3: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label2: + i32.const $push12=, 1 + i32.add $push11=, $1, $pop12 + tee_local $push10=, $1=, $pop11 + i32.load $push1=, 0($0) + i32.ne $push2=, $pop10, $pop1 + br_if 1, $pop2 # 1: down to label1 +# BB#4: # %for.cond + # in Loop: Header=BB0_3 Depth=1 + i32.const $push14=, 4 + i32.add $0=, $0, $pop14 + i32.const $push13=, 197 + i32.le_u $push3=, $1, $pop13 + br_if 0, $pop3 # 0: up to label2 +# BB#5: # %for.end + end_loop + i32.const $push4=, 0 + return $pop4 +.LBB0_6: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type a,@object # @a + .section .bss.a,"aw",@nobits + .p2align 4 +a: + .skip 796 + .size a, 796 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/loop-12.c.s b/src/binaryen/test/torture-s/loop-12.c.s new file mode 100644 index 0000000000..7464a450ae --- /dev/null +++ b/src/binaryen/test/torture-s/loop-12.c.s @@ -0,0 +1,107 @@ + .text + .file "loop-12.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .local i32, i32 +# BB#0: # %entry + i32.const $push3=, 0 + i32.load $1=, p($pop3) +.LBB0_1: # %while.cond + # =>This Inner Loop Header: Depth=1 + block + loop # label1: + i32.load8_u $push10=, 0($1) + tee_local $push9=, $0=, $pop10 + i32.const $push8=, 10 + i32.eq $push0=, $pop9, $pop8 + br_if 1, $pop0 # 1: down to label0 +# BB#2: # %while.cond + # in Loop: Header=BB0_1 Depth=1 + i32.const $push11=, 33 + i32.eq $push1=, $0, $pop11 + br_if 1, $pop1 # 1: down to label0 +# BB#3: # %while.cond + # in Loop: Header=BB0_1 Depth=1 + i32.const $push12=, 59 + i32.eq $push2=, $0, $pop12 + br_if 1, $pop2 # 1: down to label0 +# BB#4: # %while.body + # in Loop: Header=BB0_1 Depth=1 + i32.const $push7=, 0 + i32.const $push6=, 1 + i32.add $push5=, $1, $pop6 + tee_local $push4=, $1=, $pop5 + i32.store p($pop7), $pop4 + br 0 # 0: up to label1 +.LBB0_5: # %while.end + end_loop + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, .L.str +.LBB1_1: # %while.cond.i + # =>This Inner Loop Header: Depth=1 + block + loop # label3: + i32.const $push8=, 0 + i32.store p($pop8), $1 + i32.load8_u $push7=, 0($1) + tee_local $push6=, $0=, $pop7 + i32.const $push5=, 10 + i32.eq $push0=, $pop6, $pop5 + br_if 1, $pop0 # 1: down to label2 +# BB#2: # %while.cond.i + # in Loop: Header=BB1_1 Depth=1 + i32.const $push9=, 33 + i32.eq $push1=, $0, $pop9 + br_if 1, $pop1 # 1: down to label2 +# BB#3: # %while.cond.i + # in Loop: Header=BB1_1 Depth=1 + i32.const $push10=, 59 + i32.eq $push2=, $0, $pop10 + br_if 1, $pop2 # 1: down to label2 +# BB#4: # %while.body.i + # in Loop: Header=BB1_1 Depth=1 + i32.const $push4=, 1 + i32.add $1=, $1, $pop4 + br 0 # 0: up to label3 +.LBB1_5: # %foo.exit + end_loop + end_block # label2: + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden p # @p + .type p,@object + .section .bss.p,"aw",@nobits + .globl p + .p2align 2 +p: + .int32 0 + .size p, 4 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "abc\n" + .size .L.str, 5 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/loop-13.c.s b/src/binaryen/test/torture-s/loop-13.c.s new file mode 100644 index 0000000000..21464b8078 --- /dev/null +++ b/src/binaryen/test/torture-s/loop-13.c.s @@ -0,0 +1,78 @@ + .text + .file "loop-13.c" + .section .text.scale,"ax",@progbits + .hidden scale # -- Begin function scale + .globl scale + .type scale,@function +scale: # @scale + .param i32, i32, i32 + .local i32, i32 +# BB#0: # %entry + block + i32.load $push15=, 0($0) + tee_local $push14=, $3=, $pop15 + i32.const $push13=, 1 + i32.eq $push0=, $pop14, $pop13 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %entry + i32.const $push16=, 1 + i32.lt_s $push1=, $2, $pop16 + br_if 0, $pop1 # 0: down to label0 +# BB#2: # %for.body.lr.ph + i32.load $push2=, 0($1) + i32.mul $push3=, $pop2, $3 + i32.store 0($1), $pop3 + i32.load $push4=, 4($1) + i32.mul $push5=, $pop4, $3 + i32.store 4($1), $pop5 + i32.const $push6=, 1 + i32.eq $push7=, $2, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#3: # %for.body.for.body_crit_edge.preheader + i32.const $push8=, 12 + i32.add $1=, $1, $pop8 + i32.const $push17=, -1 + i32.add $2=, $2, $pop17 +.LBB0_4: # %for.body.for.body_crit_edge + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.load $push9=, 0($1) + i32.load $push26=, 0($0) + tee_local $push25=, $3=, $pop26 + i32.mul $push10=, $pop9, $pop25 + i32.store 0($1), $pop10 + i32.const $push24=, -4 + i32.add $push23=, $1, $pop24 + tee_local $push22=, $4=, $pop23 + i32.load $push11=, 0($4) + i32.mul $push12=, $3, $pop11 + i32.store 0($pop22), $pop12 + i32.const $push21=, 8 + i32.add $1=, $1, $pop21 + i32.const $push20=, -1 + i32.add $push19=, $2, $pop20 + tee_local $push18=, $2=, $pop19 + br_if 0, $pop18 # 0: up to label1 +.LBB0_5: # %if.end + end_loop + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size scale, .Lfunc_end0-scale + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/loop-14.c.s b/src/binaryen/test/torture-s/loop-14.c.s new file mode 100644 index 0000000000..d5084e128d --- /dev/null +++ b/src/binaryen/test/torture-s/loop-14.c.s @@ -0,0 +1,45 @@ + .text + .file "loop-14.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 +# BB#0: # %entry + i64.const $push0=, 90194313258 + i64.store 4($0):p2align=2, $pop0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i64.const $push0=, 90194313258 + i64.store a3+4($pop1):p2align=2, $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a3 # @a3 + .type a3,@object + .section .bss.a3,"aw",@nobits + .globl a3 + .p2align 2 +a3: + .skip 12 + .size a3, 12 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/loop-15.c.s b/src/binaryen/test/torture-s/loop-15.c.s new file mode 100644 index 0000000000..01c8e3c7e3 --- /dev/null +++ b/src/binaryen/test/torture-s/loop-15.c.s @@ -0,0 +1,224 @@ + .text + .file "loop-15.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .local i32 +# BB#0: # %entry + block + i32.le_u $push0=, $1, $0 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %while.body.preheader +.LBB0_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push5=, -4 + i32.add $push4=, $1, $pop5 + tee_local $push3=, $2=, $pop4 + i32.load $push1=, 0($pop3) + i32.store 0($1), $pop1 + copy_local $1=, $2 + i32.gt_u $push2=, $2, $0 + br_if 0, $pop2 # 0: up to label1 +.LBB0_3: # %while.end + end_loop + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push20=, 0 + i32.const $push18=, 0 + i32.load $push17=, __stack_pointer($pop18) + i32.const $push19=, 32 + i32.sub $push28=, $pop17, $pop19 + tee_local $push27=, $10=, $pop28 + i32.store __stack_pointer($pop20), $pop27 + i32.const $9=, 0 + i32.const $push1=, 16 + i32.add $6=, $10, $pop1 + i32.const $push26=, 4 + i32.or $push25=, $10, $pop26 + tee_local $push24=, $0=, $pop25 + copy_local $1=, $pop24 +.LBB1_1: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB1_2 Depth 2 + # Child Loop BB1_4 Depth 3 + # Child Loop BB1_6 Depth 3 + # Child Loop BB1_9 Depth 3 + # Child Loop BB1_13 Depth 3 + block + loop # label3: + copy_local $push31=, $9 + tee_local $push30=, $2=, $pop31 + i32.const $push29=, 2 + i32.shl $push0=, $pop30, $pop29 + i32.add $3=, $10, $pop0 + copy_local $4=, $0 + i32.const $5=, 0 +.LBB1_2: # %for.body3 + # Parent Loop BB1_1 Depth=1 + # => This Loop Header: Depth=2 + # Child Loop BB1_4 Depth 3 + # Child Loop BB1_6 Depth 3 + # Child Loop BB1_9 Depth 3 + # Child Loop BB1_13 Depth 3 + loop # label4: + i32.const $push36=, 4 + i32.store 0($6), $pop36 + i64.const $push35=, 4294967296 + i64.store 0($10), $pop35 + i64.const $push34=, 12884901890 + i64.store 8($10), $pop34 + block + i32.le_u $push33=, $5, $2 + tee_local $push32=, $7=, $pop33 + br_if 0, $pop32 # 0: down to label5 +# BB#3: # %while.body.lr.ph.i + # in Loop: Header=BB1_2 Depth=2 + i32.const $push37=, 2 + i32.shl $push2=, $5, $pop37 + i32.add $9=, $10, $pop2 +.LBB1_4: # %while.body.i + # Parent Loop BB1_1 Depth=1 + # Parent Loop BB1_2 Depth=2 + # => This Inner Loop Header: Depth=3 + loop # label6: + i32.const $push40=, -4 + i32.add $push39=, $9, $pop40 + tee_local $push38=, $8=, $pop39 + i32.load $push3=, 0($pop38) + i32.store 0($9), $pop3 + copy_local $9=, $8 + i32.gt_u $push4=, $8, $3 + br_if 0, $pop4 # 0: up to label6 +.LBB1_5: # %for.body11.preheader + # in Loop: Header=BB1_2 Depth=2 + end_loop + end_block # label5: + i32.const $9=, -1 + copy_local $8=, $10 +.LBB1_6: # %for.body11 + # Parent Loop BB1_1 Depth=1 + # Parent Loop BB1_2 Depth=2 + # => This Inner Loop Header: Depth=3 + loop # label7: + i32.const $push43=, 1 + i32.add $push42=, $9, $pop43 + tee_local $push41=, $9=, $pop42 + i32.load $push5=, 0($8) + i32.ne $push6=, $pop41, $pop5 + br_if 3, $pop6 # 3: down to label2 +# BB#7: # %for.cond9 + # in Loop: Header=BB1_6 Depth=3 + i32.const $push44=, 4 + i32.add $8=, $8, $pop44 + i32.lt_u $push7=, $9, $2 + br_if 0, $pop7 # 0: up to label7 +# BB#8: # %for.end16 + # in Loop: Header=BB1_2 Depth=2 + end_loop + copy_local $9=, $1 + copy_local $8=, $2 + block + br_if 0, $7 # 0: down to label8 +.LBB1_9: # %for.body19 + # Parent Loop BB1_1 Depth=1 + # Parent Loop BB1_2 Depth=2 + # => This Inner Loop Header: Depth=3 + loop # label9: + i32.load $push8=, 0($9) + i32.ne $push9=, $8, $pop8 + br_if 4, $pop9 # 4: down to label2 +# BB#10: # %for.cond17 + # in Loop: Header=BB1_9 Depth=3 + i32.const $push48=, 4 + i32.add $9=, $9, $pop48 + i32.const $push47=, 1 + i32.add $push46=, $8, $pop47 + tee_local $push45=, $8=, $pop46 + i32.lt_u $push10=, $pop45, $5 + br_if 0, $pop10 # 0: up to label9 +.LBB1_11: # %for.end26 + # in Loop: Header=BB1_2 Depth=2 + end_loop + end_block # label8: + block + i32.const $push49=, 3 + i32.gt_u $push11=, $5, $pop49 + br_if 0, $pop11 # 0: down to label10 +# BB#12: # in Loop: Header=BB1_2 Depth=2 + i32.const $push50=, 1 + i32.add $7=, $5, $pop50 + copy_local $9=, $4 + copy_local $8=, $5 +.LBB1_13: # %for.body30 + # Parent Loop BB1_1 Depth=1 + # Parent Loop BB1_2 Depth=2 + # => This Inner Loop Header: Depth=3 + loop # label11: + i32.const $push53=, 1 + i32.add $push52=, $8, $pop53 + tee_local $push51=, $8=, $pop52 + i32.load $push12=, 0($9) + i32.ne $push13=, $pop51, $pop12 + br_if 4, $pop13 # 4: down to label2 +# BB#14: # %for.cond28 + # in Loop: Header=BB1_13 Depth=3 + i32.const $push55=, 4 + i32.add $9=, $9, $pop55 + i32.const $push54=, 3 + i32.le_u $push14=, $8, $pop54 + br_if 0, $pop14 # 0: up to label11 +# BB#15: # %for.inc38 + # in Loop: Header=BB1_2 Depth=2 + end_loop + i32.const $push57=, 4 + i32.add $4=, $4, $pop57 + i32.const $push56=, 4 + i32.lt_u $9=, $5, $pop56 + copy_local $5=, $7 + br_if 1, $9 # 1: up to label4 +.LBB1_16: # %for.inc41 + # in Loop: Header=BB1_1 Depth=1 + end_block # label10: + end_loop + i32.const $push60=, 4 + i32.add $1=, $1, $pop60 + i32.const $push59=, 1 + i32.add $9=, $2, $pop59 + i32.const $push58=, 4 + i32.lt_u $push15=, $2, $pop58 + br_if 0, $pop15 # 0: up to label3 +# BB#17: # %for.end43 + end_loop + i32.const $push23=, 0 + i32.const $push21=, 32 + i32.add $push22=, $10, $pop21 + i32.store __stack_pointer($pop23), $pop22 + i32.const $push16=, 0 + return $pop16 +.LBB1_18: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/loop-2.c.s b/src/binaryen/test/torture-s/loop-2.c.s new file mode 100644 index 0000000000..005d0e1ed0 --- /dev/null +++ b/src/binaryen/test/torture-s/loop-2.c.s @@ -0,0 +1,68 @@ + .text + .file "loop-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + block + i32.eqz $push7=, $0 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %for.body.preheader + i32.const $2=, 0 + i32.const $1=, a +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push6=, -2 + i32.add $push0=, $2, $pop6 + i32.store 0($1), $pop0 + i32.const $push5=, 4 + i32.add $1=, $1, $pop5 + i32.const $push4=, 1 + i32.add $push3=, $2, $pop4 + tee_local $push2=, $2=, $pop3 + i32.ne $push1=, $0, $pop2 + br_if 0, $pop1 # 0: up to label1 +.LBB0_3: # %for.end + end_loop + end_block # label0: + copy_local $push8=, $2 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i64.const $push0=, -2 + i64.store a($pop1):p2align=2, $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .skip 8 + .size a, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/loop-2b.c.s b/src/binaryen/test/torture-s/loop-2b.c.s new file mode 100644 index 0000000000..389ac9db10 --- /dev/null +++ b/src/binaryen/test/torture-s/loop-2b.c.s @@ -0,0 +1,77 @@ + .text + .file "loop-2b.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + block + i32.const $push0=, 2147483647 + i32.eq $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %for.body.preheader + i32.const $push2=, 2147483646 + i32.sub $2=, $pop2, $0 + i32.const $push3=, 2 + i32.shl $push4=, $0, $pop3 + i32.const $push5=, a + i32.add $0=, $pop4, $pop5 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push10=, -2 + i32.store 0($0), $pop10 + copy_local $push9=, $2 + tee_local $push8=, $1=, $pop9 + i32.const $push7=, 2147483645 + i32.eq $push6=, $pop8, $pop7 + br_if 1, $pop6 # 1: down to label0 +# BB#3: # %for.body + # in Loop: Header=BB0_2 Depth=1 + i32.const $push12=, -1 + i32.add $2=, $1, $pop12 + i32.const $push11=, 4 + i32.add $0=, $0, $pop11 + br_if 0, $1 # 0: up to label1 +.LBB0_4: # %for.end + end_loop + end_block # label0: + copy_local $push13=, $0 + # fallthrough-return: $pop13 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i64.const $push0=, -4294967298 + i64.store a($pop1):p2align=2, $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .skip 8 + .size a, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/loop-2c.c.s b/src/binaryen/test/torture-s/loop-2c.c.s new file mode 100644 index 0000000000..f5ea635358 --- /dev/null +++ b/src/binaryen/test/torture-s/loop-2c.c.s @@ -0,0 +1,119 @@ + .text + .file "loop-2c.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + block + i32.eqz $push12=, $0 + br_if 0, $pop12 # 0: down to label0 +# BB#1: # %for.body.lr.ph + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, a-4 + i32.add $2=, $pop1, $pop2 + i32.const $push3=, 3 + i32.mul $push4=, $0, $pop3 + i32.add $push5=, $1, $pop4 + i32.const $push6=, -3 + i32.add $1=, $pop5, $pop6 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.store 0($2), $1 + i32.const $push11=, -4 + i32.add $2=, $2, $pop11 + i32.const $push10=, -3 + i32.add $1=, $1, $pop10 + i32.const $push9=, -1 + i32.add $push8=, $0, $pop9 + tee_local $push7=, $0=, $pop8 + br_if 0, $pop7 # 0: up to label1 +.LBB0_3: # %for.end + end_loop + end_block # label0: + copy_local $push13=, $2 + # fallthrough-return: $pop13 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + block + i32.eqz $push11=, $0 + br_if 0, $pop11 # 0: down to label2 +# BB#1: # %for.body.lr.ph.i + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, a-4 + i32.add $1=, $pop1, $pop2 + i32.const $push3=, 3 + i32.mul $push4=, $0, $pop3 + i32.const $push5=, a-3 + i32.add $2=, $pop4, $pop5 +.LBB1_2: # %for.body.i + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.store 0($1), $2 + i32.const $push10=, -4 + i32.add $1=, $1, $pop10 + i32.const $push9=, -3 + i32.add $2=, $2, $pop9 + i32.const $push8=, -1 + i32.add $push7=, $0, $pop8 + tee_local $push6=, $0=, $pop7 + br_if 0, $pop6 # 0: up to label3 +.LBB1_3: # %f.exit + end_loop + end_block # label2: + copy_local $push12=, $1 + # fallthrough-return: $pop12 + .endfunc +.Lfunc_end1: + .size g, .Lfunc_end1-g + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, a + i32.store a($pop1), $pop0 + i32.const $push4=, 0 + i32.const $push2=, a+3 + i32.store a+4($pop4), $pop2 + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .skip 8 + .size a, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/loop-2d.c.s b/src/binaryen/test/torture-s/loop-2d.c.s new file mode 100644 index 0000000000..b2d36ef74f --- /dev/null +++ b/src/binaryen/test/torture-s/loop-2d.c.s @@ -0,0 +1,76 @@ + .text + .file "loop-2d.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + block + i32.eqz $push11=, $0 + br_if 0, $pop11 # 0: down to label0 +# BB#1: # %for.body.lr.ph + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, a-4 + i32.add $1=, $pop1, $pop2 + i32.const $push3=, 3 + i32.mul $push4=, $0, $pop3 + i32.const $push5=, a-3 + i32.add $2=, $pop4, $pop5 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.store 0($1), $2 + i32.const $push10=, -4 + i32.add $1=, $1, $pop10 + i32.const $push9=, -3 + i32.add $2=, $2, $pop9 + i32.const $push8=, -1 + i32.add $push7=, $0, $pop8 + tee_local $push6=, $0=, $pop7 + br_if 0, $pop6 # 0: up to label1 +.LBB0_3: # %for.end + end_loop + end_block # label0: + copy_local $push12=, $1 + # fallthrough-return: $pop12 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, a + i32.store a($pop1), $pop0 + i32.const $push4=, 0 + i32.const $push2=, a+3 + i32.store a+4($pop4), $pop2 + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .skip 8 + .size a, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/loop-2e.c.s b/src/binaryen/test/torture-s/loop-2e.c.s new file mode 100644 index 0000000000..bf242f86b3 --- /dev/null +++ b/src/binaryen/test/torture-s/loop-2e.c.s @@ -0,0 +1,147 @@ + .text + .file "loop-2e.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 +# BB#0: # %entry + i32.store 0($1), $0 + i32.const $push0=, 4 + i32.add $push1=, $0, $pop0 + i32.store 4($1), $pop1 + i32.const $push2=, 8 + i32.add $push3=, $0, $pop2 + i32.store 8($1), $pop3 + i32.const $push4=, 12 + i32.add $push5=, $0, $pop4 + i32.store 12($1), $pop5 + i32.const $push6=, 16 + i32.add $push7=, $0, $pop6 + i32.store 16($1), $pop7 + i32.const $push8=, 20 + i32.add $push9=, $0, $pop8 + i32.store 20($1), $pop9 + i32.const $push10=, 24 + i32.add $push11=, $0, $pop10 + i32.store 24($1), $pop11 + i32.const $push12=, 28 + i32.add $push13=, $0, $pop12 + i32.store 28($1), $pop13 + i32.const $push14=, 32 + i32.add $push15=, $0, $pop14 + i32.store 32($1), $pop15 + i32.const $push16=, 36 + i32.add $push17=, $0, $pop16 + i32.store 36($1), $pop17 + i32.const $push18=, 40 + i32.add $push19=, $0, $pop18 + i32.store 40($1), $pop19 + i32.const $push20=, 44 + i32.add $push21=, $0, $pop20 + i32.store 44($1), $pop21 + i32.const $push22=, 48 + i32.add $push23=, $0, $pop22 + i32.store 48($1), $pop23 + i32.const $push24=, 52 + i32.add $push25=, $0, $pop24 + i32.store 52($1), $pop25 + i32.const $push26=, 56 + i32.add $push27=, $0, $pop26 + i32.store 56($1), $pop27 + i32.const $push28=, 60 + i32.add $push29=, $0, $pop28 + i32.store 60($1), $pop29 + i32.const $push30=, 64 + i32.add $push31=, $0, $pop30 + i32.store 64($1), $pop31 + i32.const $push32=, 68 + i32.add $push33=, $0, $pop32 + i32.store 68($1), $pop33 + i32.const $push34=, 72 + i32.add $push35=, $0, $pop34 + i32.store 72($1), $pop35 + i32.const $push36=, 80 + i32.add $push37=, $0, $pop36 + i32.store 80($1), $pop37 + i32.const $push38=, 76 + i32.add $push39=, $0, $pop38 + i32.store 76($1), $pop39 + i32.const $push40=, 84 + i32.add $push41=, $0, $pop40 + i32.store 84($1), $pop41 + i32.const $push42=, 88 + i32.add $push43=, $0, $pop42 + i32.store 88($1), $pop43 + i32.const $push44=, 92 + i32.add $push45=, $0, $pop44 + i32.store 92($1), $pop45 + i32.const $push46=, 96 + i32.add $push47=, $0, $pop46 + i32.store 96($1), $pop47 + i32.const $push48=, 100 + i32.add $push49=, $0, $pop48 + i32.store 100($1), $pop49 + i32.const $push50=, 104 + i32.add $push51=, $0, $pop50 + i32.store 104($1), $pop51 + i32.const $push52=, 108 + i32.add $push53=, $0, $pop52 + i32.store 108($1), $pop53 + i32.const $push54=, 112 + i32.add $push55=, $0, $pop54 + i32.store 112($1), $pop55 + i32.const $push56=, 116 + i32.add $push57=, $0, $pop56 + i32.store 116($1), $pop57 + i32.const $push58=, 120 + i32.add $push59=, $0, $pop58 + i32.store 120($1), $pop59 + i32.const $push60=, 124 + i32.add $push61=, $0, $pop60 + i32.store 124($1), $pop61 + i32.const $push62=, 128 + i32.add $push63=, $0, $pop62 + i32.store 128($1), $pop63 + i32.const $push64=, 132 + i32.add $push65=, $0, $pop64 + i32.store 132($1), $pop65 + i32.const $push66=, 136 + i32.add $push67=, $0, $pop66 + i32.store 136($1), $pop67 + i32.const $push68=, 140 + i32.add $push69=, $0, $pop68 + i32.store 140($1), $pop69 + i32.const $push70=, 144 + i32.add $push71=, $0, $pop70 + i32.store 144($1), $pop71 + i32.const $push72=, 148 + i32.add $push73=, $0, $pop72 + i32.store 148($1), $pop73 + i32.const $push74=, 156 + i32.add $push75=, $0, $pop74 + i32.store 156($1), $pop75 + i32.const $push76=, 152 + i32.add $push77=, $0, $pop76 + i32.store 152($1), $pop77 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/loop-2f.c.s b/src/binaryen/test/torture-s/loop-2f.c.s new file mode 100644 index 0000000000..34ff254ffb --- /dev/null +++ b/src/binaryen/test/torture-s/loop-2f.c.s @@ -0,0 +1,92 @@ + .text + .file "loop-2f.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 39 + i32.gt_u $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %for.body.lr.ph + i32.add $push4=, $1, $0 + i32.const $push5=, 254 + i32.const $push2=, 40 + i32.sub $push3=, $pop2, $0 + i32.call $drop=, memset@FUNCTION, $pop4, $pop5, $pop3 +.LBB0_2: # %for.end + end_block # label0: + copy_local $push6=, $0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push6=, 2147450880 + i32.const $push5=, 65536 + i32.const $push4=, 3 + i32.const $push3=, 50 + i32.const $push0=, .L.str + i32.const $push21=, 0 + i32.const $push20=, 0 + i32.call $push1=, open@FUNCTION, $pop0, $pop21, $pop20 + i64.const $push2=, 0 + i32.call $push19=, mmap@FUNCTION, $pop6, $pop5, $pop4, $pop3, $pop1, $pop2 + tee_local $push18=, $0=, $pop19 + i32.const $push7=, -1 + i32.eq $push8=, $pop18, $pop7 + br_if 0, $pop8 # 0: down to label1 +# BB#1: # %if.end + i64.const $push9=, -72340172838076674 + i64.store 32766($0):p2align=0, $pop9 + i32.const $push26=, 0 + i32.store8 32805($0), $pop26 + i32.const $push10=, 32797 + i32.add $push11=, $0, $pop10 + i64.const $push25=, -72340172838076674 + i64.store 0($pop11):p2align=0, $pop25 + i32.const $push12=, 32790 + i32.add $push13=, $0, $pop12 + i64.const $push24=, -72340172838076674 + i64.store 0($pop13):p2align=0, $pop24 + i32.const $push14=, 32782 + i32.add $push15=, $0, $pop14 + i64.const $push23=, -72340172838076674 + i64.store 0($pop15):p2align=0, $pop23 + i32.const $push16=, 32774 + i32.add $push17=, $0, $pop16 + i64.const $push22=, -72340172838076674 + i64.store 0($pop17):p2align=0, $pop22 +.LBB1_2: # %if.end15 + end_block # label1: + i32.const $push27=, 0 + call exit@FUNCTION, $pop27 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "/dev/zero" + .size .L.str, 10 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype open, i32, i32, i32 + .functype mmap, i32, i32, i32, i32, i32, i32, i64 + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/loop-2g.c.s b/src/binaryen/test/torture-s/loop-2g.c.s new file mode 100644 index 0000000000..a7a1be8a52 --- /dev/null +++ b/src/binaryen/test/torture-s/loop-2g.c.s @@ -0,0 +1,92 @@ + .text + .file "loop-2g.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 39 + i32.gt_u $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %for.body.lr.ph + i32.add $push4=, $1, $0 + i32.const $push5=, 254 + i32.const $push2=, 40 + i32.sub $push3=, $pop2, $0 + i32.call $drop=, memset@FUNCTION, $pop4, $pop5, $pop3 +.LBB0_2: # %for.end + end_block # label0: + copy_local $push6=, $0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push6=, 2147450880 + i32.const $push5=, 65536 + i32.const $push4=, 3 + i32.const $push3=, 50 + i32.const $push0=, .L.str + i32.const $push21=, 0 + i32.const $push20=, 0 + i32.call $push1=, open@FUNCTION, $pop0, $pop21, $pop20 + i64.const $push2=, 0 + i32.call $push19=, mmap@FUNCTION, $pop6, $pop5, $pop4, $pop3, $pop1, $pop2 + tee_local $push18=, $0=, $pop19 + i32.const $push7=, -1 + i32.eq $push8=, $pop18, $pop7 + br_if 0, $pop8 # 0: down to label1 +# BB#1: # %if.end + i64.const $push9=, -72340172838076674 + i64.store 32766($0):p2align=0, $pop9 + i32.const $push26=, 0 + i32.store8 32805($0), $pop26 + i32.const $push10=, 32797 + i32.add $push11=, $0, $pop10 + i64.const $push25=, -72340172838076674 + i64.store 0($pop11):p2align=0, $pop25 + i32.const $push12=, 32790 + i32.add $push13=, $0, $pop12 + i64.const $push24=, -72340172838076674 + i64.store 0($pop13):p2align=0, $pop24 + i32.const $push14=, 32782 + i32.add $push15=, $0, $pop14 + i64.const $push23=, -72340172838076674 + i64.store 0($pop15):p2align=0, $pop23 + i32.const $push16=, 32774 + i32.add $push17=, $0, $pop16 + i64.const $push22=, -72340172838076674 + i64.store 0($pop17):p2align=0, $pop22 +.LBB1_2: # %if.end15 + end_block # label1: + i32.const $push27=, 0 + call exit@FUNCTION, $pop27 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "/dev/zero" + .size .L.str, 10 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype open, i32, i32, i32 + .functype mmap, i32, i32, i32, i32, i32, i32, i64 + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/loop-3.c.s b/src/binaryen/test/torture-s/loop-3.c.s new file mode 100644 index 0000000000..7341f795ce --- /dev/null +++ b/src/binaryen/test/torture-s/loop-3.c.s @@ -0,0 +1,94 @@ + .text + .file "loop-3.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, n($pop4) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store n($pop0), $pop3 + copy_local $push5=, $1 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push13=, 0 + i32.load $push5=, n($pop13) + i32.add $push6=, $pop5, $0 + i32.const $push0=, -1 + i32.xor $push12=, $0, $pop0 + tee_local $push11=, $0=, $pop12 + i32.const $push1=, -2 + i32.const $push10=, -2 + i32.gt_s $push2=, $0, $pop10 + i32.select $push3=, $pop11, $pop1, $pop2 + i32.add $push7=, $pop6, $pop3 + i32.const $push8=, 2 + i32.add $push9=, $pop7, $pop8 + i32.store n($pop4), $pop9 + copy_local $push14=, $0 + # fallthrough-return: $pop14 + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push4=, 0 + i32.load $push3=, n($pop4) + tee_local $push2=, $0=, $pop3 + i32.const $push0=, 4 + i32.add $push1=, $pop2, $pop0 + i32.store n($pop5), $pop1 + block + br_if 0, $0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden n # @n + .type n,@object + .section .bss.n,"aw",@nobits + .globl n + .p2align 2 +n: + .int32 0 # 0x0 + .size n, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/loop-3b.c.s b/src/binaryen/test/torture-s/loop-3b.c.s new file mode 100644 index 0000000000..b55235f375 --- /dev/null +++ b/src/binaryen/test/torture-s/loop-3b.c.s @@ -0,0 +1,99 @@ + .text + .file "loop-3b.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, n($pop4) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store n($pop0), $pop3 + copy_local $push5=, $1 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push17=, 0 + i32.load $push9=, n($pop17) + i32.const $push0=, -1 + i32.xor $push16=, $0, $pop0 + tee_local $push15=, $1=, $pop16 + i32.const $push1=, -268435456 + i32.const $push14=, -268435456 + i32.gt_s $push2=, $1, $pop14 + i32.select $push3=, $pop15, $pop1, $pop2 + i32.add $push4=, $pop3, $0 + i32.const $push5=, 268435455 + i32.add $push6=, $pop4, $pop5 + i32.const $push13=, 268435455 + i32.div_u $push7=, $pop6, $pop13 + i32.add $push10=, $pop9, $pop7 + i32.const $push11=, 1 + i32.add $push12=, $pop10, $pop11 + i32.store n($pop8), $pop12 + copy_local $push18=, $0 + # fallthrough-return: $pop18 + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push4=, 0 + i32.load $push3=, n($pop4) + tee_local $push2=, $0=, $pop3 + i32.const $push0=, 4 + i32.add $push1=, $pop2, $pop0 + i32.store n($pop5), $pop1 + block + br_if 0, $0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden n # @n + .type n,@object + .section .bss.n,"aw",@nobits + .globl n + .p2align 2 +n: + .int32 0 # 0x0 + .size n, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/loop-3c.c.s b/src/binaryen/test/torture-s/loop-3c.c.s new file mode 100644 index 0000000000..cf556067a8 --- /dev/null +++ b/src/binaryen/test/torture-s/loop-3c.c.s @@ -0,0 +1,86 @@ + .text + .file "loop-3c.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push0=, -4 + i32.add $1=, $0, $pop0 + i32.const $push1=, 3 + i32.shl $push2=, $0, $pop1 + i32.const $push6=, a + i32.add $0=, $pop2, $pop6 + i32.const $2=, 256 +.LBB0_1: # %do.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push16=, 1 + i32.shr_s $push15=, $2, $pop16 + tee_local $push14=, $2=, $pop15 + i32.const $push13=, 2 + i32.shl $push3=, $pop14, $pop13 + i32.const $push12=, a + i32.add $push4=, $pop3, $pop12 + i32.store 0($pop4), $0 + i32.const $push11=, 32 + i32.add $0=, $0, $pop11 + i32.const $push10=, 4 + i32.add $push9=, $1, $pop10 + tee_local $push8=, $1=, $pop9 + i32.const $push7=, 1073741836 + i32.lt_s $push5=, $pop8, $pop7 + br_if 0, $pop5 # 0: up to label0 +# BB#2: # %do.end + end_loop + copy_local $push17=, $0 + # fallthrough-return: $pop17 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end7 + i32.const $push1=, 0 + i32.const $push0=, a + i32.store a+512($pop1), $pop0 + i32.const $push10=, 0 + i32.const $push2=, a+32 + i32.store a+256($pop10), $pop2 + i32.const $push9=, 0 + i32.const $push3=, a+64 + i32.store a+128($pop9), $pop3 + i32.const $push8=, 0 + i32.const $push4=, a+96 + i32.store a+64($pop8), $pop4 + i32.const $push7=, 0 + i32.const $push6=, 0 + i32.store a+32($pop7), $pop6 + i32.const $push5=, 0 + call exit@FUNCTION, $pop5 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 4 +a: + .skip 1020 + .size a, 1020 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/loop-4.c.s b/src/binaryen/test/torture-s/loop-4.c.s new file mode 100644 index 0000000000..757653f41a --- /dev/null +++ b/src/binaryen/test/torture-s/loop-4.c.s @@ -0,0 +1,32 @@ + .text + .file "loop-4.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, 8192 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/loop-4b.c.s b/src/binaryen/test/torture-s/loop-4b.c.s new file mode 100644 index 0000000000..1f23f3e464 --- /dev/null +++ b/src/binaryen/test/torture-s/loop-4b.c.s @@ -0,0 +1,32 @@ + .text + .file "loop-4b.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/loop-5.c.s b/src/binaryen/test/torture-s/loop-5.c.s new file mode 100644 index 0000000000..48dc116069 --- /dev/null +++ b/src/binaryen/test/torture-s/loop-5.c.s @@ -0,0 +1,124 @@ + .text + .file "loop-5.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + block + i32.const $push29=, 0 + i32.load $push28=, t($pop29) + tee_local $push27=, $0=, $pop28 + i32.const $push0=, 4 + i32.ge_s $push1=, $pop27, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %ap.exit.i + i32.const $push37=, 0 + i32.const $push36=, 1 + i32.add $push35=, $0, $pop36 + tee_local $push34=, $1=, $pop35 + i32.store t($pop37), $pop34 + i32.const $push33=, 2 + i32.shl $push2=, $0, $pop33 + i32.const $push32=, a + i32.add $push3=, $pop2, $pop32 + i32.const $push31=, 0 + i32.store 0($pop3), $pop31 + i32.const $push30=, 3 + i32.eq $push4=, $0, $pop30 + br_if 0, $pop4 # 0: down to label0 +# BB#2: # %ap.exit.1.i + i32.const $push45=, 0 + i32.const $push44=, 2 + i32.add $push43=, $0, $pop44 + tee_local $push42=, $2=, $pop43 + i32.store t($pop45), $pop42 + i32.const $push41=, 2 + i32.shl $push5=, $1, $pop41 + i32.const $push40=, a + i32.add $push6=, $pop5, $pop40 + i32.const $push39=, 3 + i32.store 0($pop6), $pop39 + i32.const $push38=, 1 + i32.gt_s $push7=, $0, $pop38 + br_if 0, $pop7 # 0: down to label0 +# BB#3: # %ap.exit.2.i + i32.const $push52=, 0 + i32.const $push8=, 3 + i32.add $push51=, $0, $pop8 + tee_local $push50=, $1=, $pop51 + i32.store t($pop52), $pop50 + i32.const $push49=, 2 + i32.shl $push9=, $2, $pop49 + i32.const $push48=, a + i32.add $push10=, $pop9, $pop48 + i32.const $push47=, 2 + i32.store 0($pop10), $pop47 + i32.const $push46=, 1 + i32.eq $push11=, $0, $pop46 + br_if 0, $pop11 # 0: down to label0 +# BB#4: # %testit.exit + i32.const $push57=, 2 + i32.shl $push12=, $1, $pop57 + i32.const $push56=, a + i32.add $push13=, $pop12, $pop56 + i32.const $push55=, 1 + i32.store 0($pop13), $pop55 + i32.const $push54=, 0 + i32.const $push14=, 4 + i32.add $push15=, $0, $pop14 + i32.store t($pop54), $pop15 + i32.const $push53=, 0 + i32.load $push16=, a($pop53) + br_if 0, $pop16 # 0: down to label0 +# BB#5: # %if.end + i32.const $push58=, 0 + i32.load $push17=, a+4($pop58) + i32.const $push18=, 3 + i32.ne $push19=, $pop17, $pop18 + br_if 0, $pop19 # 0: down to label0 +# BB#6: # %if.end3 + i32.const $push59=, 0 + i32.load $push20=, a+8($pop59) + i32.const $push21=, 2 + i32.ne $push22=, $pop20, $pop21 + br_if 0, $pop22 # 0: down to label0 +# BB#7: # %if.end6 + i32.const $push60=, 0 + i32.load $push23=, a+12($pop60) + i32.const $push24=, 1 + i32.ne $push25=, $pop23, $pop24 + br_if 0, $pop25 # 0: down to label0 +# BB#8: # %if.end9 + i32.const $push26=, 0 + call exit@FUNCTION, $pop26 + unreachable +.LBB0_9: # %if.then.i.i + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type a,@object # @a + .section .bss.a,"aw",@nobits + .p2align 4 +a: + .skip 16 + .size a, 16 + + .type t,@object # @t + .section .bss.t,"aw",@nobits + .p2align 2 +t: + .int32 0 # 0x0 + .size t, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/loop-6.c.s b/src/binaryen/test/torture-s/loop-6.c.s new file mode 100644 index 0000000000..87f0a5ca82 --- /dev/null +++ b/src/binaryen/test/torture-s/loop-6.c.s @@ -0,0 +1,19 @@ + .text + .file "loop-6.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end8 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/loop-7.c.s b/src/binaryen/test/torture-s/loop-7.c.s new file mode 100644 index 0000000000..08b4b35b55 --- /dev/null +++ b/src/binaryen/test/torture-s/loop-7.c.s @@ -0,0 +1,67 @@ + .text + .file "loop-7.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, -1 + i32.const $2=, 0 +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label1: + i32.const $push7=, 1 + i32.shl $push0=, $pop7, $2 + i32.eq $push1=, $pop0, $0 + i32.select $1=, $2, $1, $pop1 + i32.const $push6=, 8 + i32.gt_u $push2=, $2, $pop6 + br_if 1, $pop2 # 1: down to label0 +# BB#2: # %for.body + # in Loop: Header=BB0_1 Depth=1 + i32.const $push9=, 1 + i32.add $2=, $2, $pop9 + i32.const $push8=, 0 + i32.lt_s $push3=, $1, $pop8 + br_if 0, $pop3 # 0: up to label1 +.LBB0_3: # %for.end + end_loop + end_block # label0: + block + i32.const $push4=, -1 + i32.le_s $push5=, $1, $pop4 + br_if 0, $pop5 # 0: down to label2 +# BB#4: # %if.end5 + return +.LBB0_5: # %if.then4 + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 64 + call foo@FUNCTION, $pop0 + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/loop-8.c.s b/src/binaryen/test/torture-s/loop-8.c.s new file mode 100644 index 0000000000..03b4425da2 --- /dev/null +++ b/src/binaryen/test/torture-s/loop-8.c.s @@ -0,0 +1,100 @@ + .text + .file "loop-8.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 +# BB#0: # %entry + block + br_if 0, $0 # 0: down to label0 +# BB#1: # %lor.lhs.false + f64.load $push0=, 0($1) + f64.const $push1=, 0x1p0 + f64.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#2: # %if.end + return +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local f64, i32 +# BB#0: # %entry + i32.const $push10=, 0 + i32.const $push8=, 0 + i32.load $push7=, __stack_pointer($pop8) + i32.const $push9=, 16 + i32.sub $push18=, $pop7, $pop9 + tee_local $push17=, $1=, $pop18 + i32.store __stack_pointer($pop10), $pop17 + block + block + i32.const $push16=, 0 + f64.load $push15=, a($pop16) + tee_local $push14=, $0=, $pop15 + f64.const $push13=, 0x0p0 + f64.gt $push0=, $pop14, $pop13 + br_if 0, $pop0 # 0: down to label2 +# BB#1: # %for.cond + i32.const $push22=, 0 + f64.load $push21=, a+8($pop22) + tee_local $push20=, $0=, $pop21 + f64.const $push19=, 0x0p0 + f64.le $push1=, $pop20, $pop19 + f64.ne $push2=, $0, $0 + i32.or $push3=, $pop1, $pop2 + i32.eqz $push27=, $pop3 + br_if 0, $pop27 # 0: down to label2 +# BB#2: # %for.cond.1 + i32.const $push4=, 0 + f64.load $push24=, a+16($pop4) + tee_local $push23=, $0=, $pop24 + f64.const $push5=, 0x0p0 + f64.gt $push6=, $pop23, $pop5 + i32.eqz $push28=, $pop6 + br_if 1, $pop28 # 1: down to label1 +.LBB1_3: # %e + end_block # label2: + f64.store 8($1), $0 + i32.const $push26=, 0 + i32.const $push11=, 8 + i32.add $push12=, $1, $pop11 + call bar@FUNCTION, $pop26, $pop12 + i32.const $push25=, 0 + call exit@FUNCTION, $pop25 + unreachable +.LBB1_4: # %for.cond.2 + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 4 +a: + .int64 0 # double 0 + .int64 4607182418800017408 # double 1 + .int64 4611686018427387904 # double 2 + .size a, 24 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/loop-9.c.s b/src/binaryen/test/torture-s/loop-9.c.s new file mode 100644 index 0000000000..1c2e7ce5d0 --- /dev/null +++ b/src/binaryen/test/torture-s/loop-9.c.s @@ -0,0 +1,31 @@ + .text + .file "loop-9.c" + .section .text.false,"ax",@progbits + .hidden false # -- Begin function false + .globl false + .type false,@function +false: # @false + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size false, .Lfunc_end0-false + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/loop-ivopts-1.c.s b/src/binaryen/test/torture-s/loop-ivopts-1.c.s new file mode 100644 index 0000000000..2151c0ccea --- /dev/null +++ b/src/binaryen/test/torture-s/loop-ivopts-1.c.s @@ -0,0 +1,58 @@ + .text + .file "loop-ivopts-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1126498304 + i32.store foo.tmp+8($pop1), $pop0 + i32.const $push4=, 0 + i64.const $push2=, 4803089003686395904 + i64.store foo.tmp($pop4), $pop2 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %for.inc9.3 + i32.const $push1=, 0 + i64.const $push0=, 4838273375797772288 + i64.store foo.tmp+4($pop1):p2align=2, $pop0 + i32.const $push9=, 0 + i32.const $push2=, 1095761920 + i32.store foo.tmp($pop9), $pop2 + i32.const $push3=, 1118306304 + i32.store 4($0), $pop3 + i32.const $push8=, 1095761920 + i32.store 0($0), $pop8 + i32.const $push7=, 0 + i32.load $push4=, foo.tmp+8($pop7) + i32.store 8($0), $pop4 + i32.const $push6=, 0 + i32.load $push5=, foo.tmp+12($pop6) + i32.store 12($0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .type foo.tmp,@object # @foo.tmp + .section .bss.foo.tmp,"aw",@nobits + .p2align 4 +foo.tmp: + .skip 16 + .size foo.tmp, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/loop-ivopts-2.c.s b/src/binaryen/test/torture-s/loop-ivopts-2.c.s new file mode 100644 index 0000000000..03fee66170 --- /dev/null +++ b/src/binaryen/test/torture-s/loop-ivopts-2.c.s @@ -0,0 +1,205 @@ + .text + .file "loop-ivopts-2.c" + .section .text.check,"ax",@progbits + .hidden check # -- Begin function check + .globl check + .type check,@function +check: # @check + .param i32 + .local i32 +# BB#0: # %entry + i32.const $1=, -1 +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label1: + i32.load $push6=, 0($0) + i32.const $push14=, 8 + i32.const $push13=, 7 + i32.const $push12=, -255 + i32.add $push0=, $1, $pop12 + i32.const $push11=, 23 + i32.gt_u $push1=, $pop0, $pop11 + i32.select $push2=, $pop14, $pop13, $pop1 + i32.const $push10=, -143 + i32.add $push3=, $1, $pop10 + i32.const $push9=, 112 + i32.lt_u $push4=, $pop3, $pop9 + i32.add $push5=, $pop2, $pop4 + i32.ne $push7=, $pop6, $pop5 + br_if 1, $pop7 # 1: down to label0 +# BB#2: # %for.cond + # in Loop: Header=BB0_1 Depth=1 + i32.const $push19=, 4 + i32.add $0=, $0, $pop19 + i32.const $push18=, 1 + i32.add $push17=, $1, $pop18 + tee_local $push16=, $1=, $pop17 + i32.const $push15=, 286 + i32.le_u $push8=, $pop16, $pop15 + br_if 0, $pop8 # 0: up to label1 +# BB#3: # %for.end + end_loop + return +.LBB0_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size check, .Lfunc_end0-check + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push26=, 0 + i32.const $push24=, 0 + i32.load $push23=, __stack_pointer($pop24) + i32.const $push25=, 1152 + i32.sub $push31=, $pop23, $pop25 + tee_local $push30=, $2=, $pop31 + i32.store __stack_pointer($pop26), $pop30 + i32.const $1=, 0 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.add $push0=, $2, $1 + i32.const $push36=, 8 + i32.store 0($pop0), $pop36 + i32.const $push35=, 4 + i32.add $push34=, $1, $pop35 + tee_local $push33=, $1=, $pop34 + i32.const $push32=, 576 + i32.ne $push1=, $pop33, $pop32 + br_if 0, $pop1 # 0: up to label2 +# BB#2: # %for.body3.preheader + end_loop + i32.const $push2=, 576 + i32.add $1=, $2, $pop2 + i32.const $0=, 143 +.LBB1_3: # %for.body3 + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.const $push42=, 9 + i32.store 0($1), $pop42 + i32.const $push41=, 4 + i32.add $1=, $1, $pop41 + i32.const $push40=, 1 + i32.add $push39=, $0, $pop40 + tee_local $push38=, $0=, $pop39 + i32.const $push37=, 255 + i32.lt_s $push3=, $pop38, $pop37 + br_if 0, $pop3 # 0: up to label3 +# BB#4: # %for.end7 + end_loop + block + block + i32.const $push4=, 278 + i32.gt_s $push5=, $0, $pop4 + br_if 0, $pop5 # 0: down to label5 +# BB#5: # %for.body10.preheader +.LBB1_6: # %for.body10 + # =>This Inner Loop Header: Depth=1 + loop # label6: + i32.const $push48=, 7 + i32.store 0($1), $pop48 + i32.const $push47=, 4 + i32.add $1=, $1, $pop47 + i32.const $push46=, 1 + i32.add $push45=, $0, $pop46 + tee_local $push44=, $0=, $pop45 + i32.const $push43=, 279 + i32.lt_s $push6=, $pop44, $pop43 + br_if 0, $pop6 # 0: up to label6 +# BB#7: # %for.end14.loopexit + end_loop + i32.const $push7=, 1 + i32.add $1=, $0, $pop7 + br 1 # 1: down to label4 +.LBB1_8: + end_block # label5: + i32.const $push49=, 1 + i32.add $1=, $0, $pop49 +.LBB1_9: # %for.end14 + end_block # label4: + block + i32.const $push50=, 287 + i32.gt_s $push8=, $1, $pop50 + br_if 0, $pop8 # 0: down to label7 +# BB#10: # %for.body17.preheader + i32.const $push9=, -1 + i32.add $0=, $1, $pop9 + i32.const $push10=, 2 + i32.shl $push11=, $1, $pop10 + i32.add $1=, $2, $pop11 +.LBB1_11: # %for.body17 + # =>This Inner Loop Header: Depth=1 + loop # label8: + i32.const $push56=, 8 + i32.store 0($1), $pop56 + i32.const $push55=, 4 + i32.add $1=, $1, $pop55 + i32.const $push54=, 1 + i32.add $push53=, $0, $pop54 + tee_local $push52=, $0=, $pop53 + i32.const $push51=, 287 + i32.lt_s $push12=, $pop52, $pop51 + br_if 0, $pop12 # 0: up to label8 +.LBB1_12: # %for.body.i.preheader + end_loop + end_block # label7: + copy_local $0=, $2 + i32.const $1=, -1 +.LBB1_13: # %for.body.i + # =>This Inner Loop Header: Depth=1 + block + loop # label10: + i32.load $push19=, 0($0) + i32.const $push62=, 8 + i32.const $push61=, 7 + i32.const $push60=, -255 + i32.add $push13=, $1, $pop60 + i32.const $push59=, 23 + i32.gt_u $push14=, $pop13, $pop59 + i32.select $push15=, $pop62, $pop61, $pop14 + i32.const $push58=, -143 + i32.add $push16=, $1, $pop58 + i32.const $push57=, 112 + i32.lt_u $push17=, $pop16, $pop57 + i32.add $push18=, $pop15, $pop17 + i32.ne $push20=, $pop19, $pop18 + br_if 1, $pop20 # 1: down to label9 +# BB#14: # %for.cond.i + # in Loop: Header=BB1_13 Depth=1 + i32.const $push67=, 4 + i32.add $0=, $0, $pop67 + i32.const $push66=, 1 + i32.add $push65=, $1, $pop66 + tee_local $push64=, $1=, $pop65 + i32.const $push63=, 286 + i32.le_u $push21=, $pop64, $pop63 + br_if 0, $pop21 # 0: up to label10 +# BB#15: # %check.exit + end_loop + i32.const $push29=, 0 + i32.const $push27=, 1152 + i32.add $push28=, $2, $pop27 + i32.store __stack_pointer($pop29), $pop28 + i32.const $push22=, 0 + return $pop22 +.LBB1_16: # %if.then.i + end_block # label9: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/lshrdi-1.c.s b/src/binaryen/test/torture-s/lshrdi-1.c.s new file mode 100644 index 0000000000..c4f8b3c556 --- /dev/null +++ b/src/binaryen/test/torture-s/lshrdi-1.c.s @@ -0,0 +1,144 @@ + .text + .file "lshrdi-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i64 +# BB#0: # %entry + i64.const $3=, -1 + i32.const $1=, .Lswitch.table.main +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label1: + i64.const $push10=, -8690466092652643696 + i64.const $push9=, 1 + i64.add $push8=, $3, $pop9 + tee_local $push7=, $3=, $pop8 + i64.shr_u $push1=, $pop10, $pop7 + i64.load $push2=, 0($1) + i64.ne $push3=, $pop1, $pop2 + br_if 1, $pop3 # 1: down to label0 +# BB#2: # %for.cond + # in Loop: Header=BB0_1 Depth=1 + i32.const $push12=, 8 + i32.add $1=, $1, $pop12 + i64.const $push11=, 63 + i64.lt_u $push4=, $3, $pop11 + br_if 0, $pop4 # 0: up to label1 +# BB#3: # %for.body4.preheader + end_loop + i32.const $1=, 0 + i32.const $0=, .Lswitch.table.main +.LBB0_4: # %for.body4 + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push13=, 64 + i32.ge_u $push5=, $1, $pop13 + br_if 1, $pop5 # 1: down to label0 +# BB#5: # %switch.lookup + # in Loop: Header=BB0_4 Depth=1 + i32.const $push14=, 1 + i32.eqz $push18=, $pop14 + br_if 1, $pop18 # 1: down to label0 +# BB#6: # %for.cond2 + # in Loop: Header=BB0_4 Depth=1 + i32.const $push17=, 8 + i32.add $0=, $0, $pop17 + i32.const $push16=, 62 + i32.gt_u $2=, $1, $pop16 + i32.const $push15=, 1 + i32.add $push0=, $1, $pop15 + copy_local $1=, $pop0 + i32.eqz $push19=, $2 + br_if 0, $pop19 # 0: up to label2 +# BB#7: # %for.end13 + end_loop + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable +.LBB0_8: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type .Lswitch.table.main,@object # @switch.table.main + .section .rodata..Lswitch.table.main,"a",@progbits + .p2align 4 +.Lswitch.table.main: + .int64 -8690466092652643696 # 0x87654321fedcba90 + .int64 4878138990528453960 # 0x43b2a190ff6e5d48 + .int64 2439069495264226980 # 0x21d950c87fb72ea4 + .int64 1219534747632113490 # 0x10eca8643fdb9752 + .int64 609767373816056745 # 0x87654321fedcba9 + .int64 304883686908028372 # 0x43b2a190ff6e5d4 + .int64 152441843454014186 # 0x21d950c87fb72ea + .int64 76220921727007093 # 0x10eca8643fdb975 + .int64 38110460863503546 # 0x87654321fedcba + .int64 19055230431751773 # 0x43b2a190ff6e5d + .int64 9527615215875886 # 0x21d950c87fb72e + .int64 4763807607937943 # 0x10eca8643fdb97 + .int64 2381903803968971 # 0x87654321fedcb + .int64 1190951901984485 # 0x43b2a190ff6e5 + .int64 595475950992242 # 0x21d950c87fb72 + .int64 297737975496121 # 0x10eca8643fdb9 + .int64 148868987748060 # 0x87654321fedc + .int64 74434493874030 # 0x43b2a190ff6e + .int64 37217246937015 # 0x21d950c87fb7 + .int64 18608623468507 # 0x10eca8643fdb + .int64 9304311734253 # 0x87654321fed + .int64 4652155867126 # 0x43b2a190ff6 + .int64 2326077933563 # 0x21d950c87fb + .int64 1163038966781 # 0x10eca8643fd + .int64 581519483390 # 0x87654321fe + .int64 290759741695 # 0x43b2a190ff + .int64 145379870847 # 0x21d950c87f + .int64 72689935423 # 0x10eca8643f + .int64 36344967711 # 0x87654321f + .int64 18172483855 # 0x43b2a190f + .int64 9086241927 # 0x21d950c87 + .int64 4543120963 # 0x10eca8643 + .int64 2271560481 # 0x87654321 + .int64 1135780240 # 0x43b2a190 + .int64 567890120 # 0x21d950c8 + .int64 283945060 # 0x10eca864 + .int64 141972530 # 0x8765432 + .int64 70986265 # 0x43b2a19 + .int64 35493132 # 0x21d950c + .int64 17746566 # 0x10eca86 + .int64 8873283 # 0x876543 + .int64 4436641 # 0x43b2a1 + .int64 2218320 # 0x21d950 + .int64 1109160 # 0x10eca8 + .int64 554580 # 0x87654 + .int64 277290 # 0x43b2a + .int64 138645 # 0x21d95 + .int64 69322 # 0x10eca + .int64 34661 # 0x8765 + .int64 17330 # 0x43b2 + .int64 8665 # 0x21d9 + .int64 4332 # 0x10ec + .int64 2166 # 0x876 + .int64 1083 # 0x43b + .int64 541 # 0x21d + .int64 270 # 0x10e + .int64 135 # 0x87 + .int64 67 # 0x43 + .int64 33 # 0x21 + .int64 16 # 0x10 + .int64 8 # 0x8 + .int64 4 # 0x4 + .int64 2 # 0x2 + .int64 1 # 0x1 + .size .Lswitch.table.main, 512 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/mayalias-1.c.s b/src/binaryen/test/torture-s/mayalias-1.c.s new file mode 100644 index 0000000000..ce058b3c4f --- /dev/null +++ b/src/binaryen/test/torture-s/mayalias-1.c.s @@ -0,0 +1,19 @@ + .text + .file "mayalias-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/mayalias-2.c.s b/src/binaryen/test/torture-s/mayalias-2.c.s new file mode 100644 index 0000000000..5d2eac86ea --- /dev/null +++ b/src/binaryen/test/torture-s/mayalias-2.c.s @@ -0,0 +1,30 @@ + .text + .file "mayalias-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/mayalias-3.c.s b/src/binaryen/test/torture-s/mayalias-3.c.s new file mode 100644 index 0000000000..8716a5467e --- /dev/null +++ b/src/binaryen/test/torture-s/mayalias-3.c.s @@ -0,0 +1,100 @@ + .text + .file "mayalias-3.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store p($pop0), $0 + copy_local $push1=, $0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push10=, $pop4, $pop6 + tee_local $push9=, $0=, $pop10 + i32.const $push0=, 10 + i32.store 12($pop9), $pop0 + i32.const $push1=, 1 + i32.store16 12($0), $pop1 + i32.const $push2=, 0 + i32.const $push7=, 12 + i32.add $push8=, $0, $pop7 + i32.store p($pop2), $pop8 + i32.load $push3=, 12($0) + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push16=, $pop4, $pop6 + tee_local $push15=, $0=, $pop16 + i32.store __stack_pointer($pop7), $pop15 + i32.const $push0=, 10 + i32.store 12($0), $pop0 + i32.const $push1=, 1 + i32.store16 12($0), $pop1 + i32.const $push14=, 0 + i32.const $push11=, 12 + i32.add $push12=, $0, $pop11 + i32.store p($pop14), $pop12 + block + i32.load $push2=, 12($0) + i32.const $push13=, 10 + i32.eq $push3=, $pop2, $pop13 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push10=, 0 + i32.const $push8=, 16 + i32.add $push9=, $0, $pop8 + i32.store __stack_pointer($pop10), $pop9 + i32.const $push17=, 0 + return $pop17 +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden p # @p + .type p,@object + .section .bss.p,"aw",@nobits + .globl p + .p2align 2 +p: + .int32 0 + .size p, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/medce-1.c.s b/src/binaryen/test/torture-s/medce-1.c.s new file mode 100644 index 0000000000..dbbd29cea4 --- /dev/null +++ b/src/binaryen/test/torture-s/medce-1.c.s @@ -0,0 +1,63 @@ + .text + .file "medce-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store8 ok($pop1), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.const $push2=, 1 + i32.ne $push0=, $0, $pop2 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %sw.bb1 + i32.const $push1=, 0 + i32.const $push3=, 1 + i32.store8 ok($pop1), $pop3 +.LBB1_2: # %sw.epilog + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store8 ok($pop1), $pop0 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type ok,@object # @ok + .section .bss.ok,"aw",@nobits + .p2align 2 +ok: + .int8 0 # 0x0 + .size ok, 1 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/memcpy-1.c.s b/src/binaryen/test/torture-s/memcpy-1.c.s new file mode 100644 index 0000000000..b669dc161f --- /dev/null +++ b/src/binaryen/test/torture-s/memcpy-1.c.s @@ -0,0 +1,211 @@ + .text + .file "memcpy-1.c" + .section .text.copy,"ax",@progbits + .hidden copy # -- Begin function copy + .globl copy + .type copy,@function +copy: # @copy + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + i32.call $push0=, memcpy@FUNCTION, $0, $1, $2 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size copy, .Lfunc_end0-copy + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push40=, 0 + i32.const $push38=, 0 + i32.load $push37=, __stack_pointer($pop38) + i32.const $push39=, 696320 + i32.sub $push54=, $pop37, $pop39 + tee_local $push53=, $1=, $pop54 + i32.store __stack_pointer($pop40), $pop53 + i32.const $2=, 0 + i32.const $push52=, 0 + i32.const $push51=, 348160 + i32.call $drop=, memset@FUNCTION, $1, $pop52, $pop51 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push41=, 348160 + i32.add $push42=, $1, $pop41 + i32.add $push2=, $pop42, $2 + i32.store8 0($pop2), $2 + i32.const $push58=, 1 + i32.add $push57=, $2, $pop58 + tee_local $push56=, $2=, $pop57 + i32.const $push55=, 348160 + i32.ne $push3=, $pop56, $pop55 + br_if 0, $pop3 # 0: up to label0 +# BB#2: # %for.end + end_loop + i32.const $push43=, 348160 + i32.add $push44=, $1, $pop43 + i32.const $push4=, 2720 + i32.call $drop=, memcpy@FUNCTION, $1, $pop44, $pop4 + i32.const $2=, 0 +.LBB1_3: # %for.body6 + # =>This Inner Loop Header: Depth=1 + block + loop # label2: + i32.add $push6=, $1, $2 + i32.load8_u $push7=, 0($pop6) + i32.const $push59=, 255 + i32.and $push5=, $2, $pop59 + i32.ne $push8=, $pop7, $pop5 + br_if 1, $pop8 # 1: down to label1 +# BB#4: # %for.cond3 + # in Loop: Header=BB1_3 Depth=1 + i32.const $push63=, 1 + i32.add $push62=, $2, $pop63 + tee_local $push61=, $2=, $pop62 + i32.const $push60=, 2719 + i32.le_u $push9=, $pop61, $pop60 + br_if 0, $pop9 # 0: up to label2 +# BB#5: # %for.end15 + end_loop + i32.const $push64=, 1 + i32.const $push10=, 2720 + i32.call $0=, memset@FUNCTION, $1, $pop64, $pop10 + i32.const $2=, 1 +.LBB1_6: # %for.cond17 + # =>This Inner Loop Header: Depth=1 + block + loop # label4: + i32.const $push65=, 2719 + i32.gt_u $push11=, $2, $pop65 + br_if 1, $pop11 # 1: down to label3 +# BB#7: # %for.cond17.for.body20_crit_edge + # in Loop: Header=BB1_6 Depth=1 + i32.add $1=, $0, $2 + i32.const $push67=, 1 + i32.add $push0=, $2, $pop67 + copy_local $2=, $pop0 + i32.load8_u $push35=, 0($1) + i32.const $push66=, 1 + i32.eq $push36=, $pop35, $pop66 + br_if 0, $pop36 # 0: up to label4 + br 2 # 2: down to label1 +.LBB1_8: # %for.end29 + end_loop + end_block # label3: + i32.const $push45=, 348160 + i32.add $push46=, $0, $pop45 + i32.const $push12=, 348160 + i32.call $1=, memcpy@FUNCTION, $0, $pop46, $pop12 + i32.const $2=, 0 +.LBB1_9: # %for.body35 + # =>This Inner Loop Header: Depth=1 + loop # label5: + i32.add $push14=, $1, $2 + i32.load8_u $push15=, 0($pop14) + i32.const $push68=, 255 + i32.and $push13=, $2, $pop68 + i32.ne $push16=, $pop15, $pop13 + br_if 1, $pop16 # 1: down to label1 +# BB#10: # %for.cond32 + # in Loop: Header=BB1_9 Depth=1 + i32.const $push72=, 1 + i32.add $push71=, $2, $pop72 + tee_local $push70=, $2=, $pop71 + i32.const $push69=, 348159 + i32.le_u $push17=, $pop70, $pop69 + br_if 0, $pop17 # 0: up to label5 +# BB#11: # %for.end46 + end_loop + i32.const $push19=, 0 + i32.const $push18=, 348160 + i32.call $0=, memset@FUNCTION, $1, $pop19, $pop18 + i32.const $2=, 1 +.LBB1_12: # %for.cond48 + # =>This Inner Loop Header: Depth=1 + block + loop # label7: + i32.const $push73=, 348159 + i32.gt_u $push20=, $2, $pop73 + br_if 1, $pop20 # 1: down to label6 +# BB#13: # %for.cond48.for.body51_crit_edge + # in Loop: Header=BB1_12 Depth=1 + i32.add $1=, $0, $2 + i32.const $push74=, 1 + i32.add $push1=, $2, $pop74 + copy_local $2=, $pop1 + i32.load8_u $push34=, 0($1) + i32.eqz $push85=, $pop34 + br_if 0, $pop85 # 0: up to label7 + br 2 # 2: down to label1 +.LBB1_14: # %for.end60 + end_loop + end_block # label6: + i32.const $push47=, 348160 + i32.add $push48=, $0, $pop47 + i32.const $push21=, 2720 + i32.call $1=, memcpy@FUNCTION, $0, $pop48, $pop21 + i32.const $2=, 0 +.LBB1_15: # %for.body66 + # =>This Inner Loop Header: Depth=1 + loop # label8: + i32.add $push23=, $1, $2 + i32.load8_u $push24=, 0($pop23) + i32.const $push75=, 255 + i32.and $push22=, $2, $pop75 + i32.ne $push25=, $pop24, $pop22 + br_if 1, $pop25 # 1: down to label1 +# BB#16: # %for.cond63 + # in Loop: Header=BB1_15 Depth=1 + i32.const $push79=, 1 + i32.add $push78=, $2, $pop79 + tee_local $push77=, $2=, $pop78 + i32.const $push76=, 2719 + i32.le_u $push26=, $pop77, $pop76 + br_if 0, $pop26 # 0: up to label8 +# BB#17: # %for.end77 + end_loop + i32.const $push49=, 348160 + i32.add $push50=, $1, $pop49 + i32.const $push27=, 348160 + i32.call $drop=, memcpy@FUNCTION, $1, $pop50, $pop27 + i32.const $2=, 0 +.LBB1_18: # %for.body85 + # =>This Inner Loop Header: Depth=1 + loop # label9: + i32.add $push29=, $1, $2 + i32.load8_u $push30=, 0($pop29) + i32.const $push80=, 255 + i32.and $push28=, $2, $pop80 + i32.ne $push31=, $pop30, $pop28 + br_if 1, $pop31 # 1: down to label1 +# BB#19: # %for.cond82 + # in Loop: Header=BB1_18 Depth=1 + i32.const $push84=, 1 + i32.add $push83=, $2, $pop84 + tee_local $push82=, $2=, $pop83 + i32.const $push81=, 348159 + i32.le_u $push32=, $pop82, $pop81 + br_if 0, $pop32 # 0: up to label9 +# BB#20: # %for.end96 + end_loop + i32.const $push33=, 0 + call exit@FUNCTION, $pop33 + unreachable +.LBB1_21: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/memcpy-2.c.s b/src/binaryen/test/torture-s/memcpy-2.c.s new file mode 100644 index 0000000000..6c49bce9f3 --- /dev/null +++ b/src/binaryen/test/torture-s/memcpy-2.c.s @@ -0,0 +1,268 @@ + .text + .file "memcpy-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $0=, 0 +.LBB0_1: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB0_2 Depth 2 + # Child Loop BB0_3 Depth 3 + # Child Loop BB0_4 Depth 4 + # Child Loop BB0_7 Depth 4 + # Child Loop BB0_12 Depth 4 + block + loop # label1: + i32.const $push43=, u1 + i32.add $1=, $0, $pop43 + i32.const $2=, 0 +.LBB0_2: # %for.body3 + # Parent Loop BB0_1 Depth=1 + # => This Loop Header: Depth=2 + # Child Loop BB0_3 Depth 3 + # Child Loop BB0_4 Depth 4 + # Child Loop BB0_7 Depth 4 + # Child Loop BB0_12 Depth 4 + loop # label2: + i32.const $push45=, 65 + i32.add $4=, $2, $pop45 + i32.const $push44=, u2 + i32.add $3=, $2, $pop44 + i32.const $5=, 1 +.LBB0_3: # %for.body6 + # Parent Loop BB0_1 Depth=1 + # Parent Loop BB0_2 Depth=2 + # => This Loop Header: Depth=3 + # Child Loop BB0_4 Depth 4 + # Child Loop BB0_7 Depth 4 + # Child Loop BB0_12 Depth 4 + loop # label3: + i32.const $push48=, u1 + i32.const $push47=, 97 + i32.const $push46=, 96 + i32.call $7=, memset@FUNCTION, $pop48, $pop47, $pop46 + i32.const $8=, 65 + i32.const $6=, -96 +.LBB0_4: # %for.body9 + # Parent Loop BB0_1 Depth=1 + # Parent Loop BB0_2 Depth=2 + # Parent Loop BB0_3 Depth=3 + # => This Inner Loop Header: Depth=4 + loop # label4: + i32.const $push59=, u2+96 + i32.add $push3=, $6, $pop59 + i32.const $push58=, 65 + i32.const $push57=, 24 + i32.shl $push0=, $8, $pop57 + i32.const $push56=, 24 + i32.shr_s $push1=, $pop0, $pop56 + i32.const $push55=, 95 + i32.gt_s $push2=, $pop1, $pop55 + i32.select $push54=, $pop58, $8, $pop2 + tee_local $push53=, $8=, $pop54 + i32.store8 0($pop3), $pop53 + i32.const $push52=, 1 + i32.add $8=, $8, $pop52 + i32.const $push51=, 1 + i32.add $push50=, $6, $pop51 + tee_local $push49=, $6=, $pop50 + br_if 0, $pop49 # 0: up to label4 +# BB#5: # %for.end + # in Loop: Header=BB0_3 Depth=3 + end_loop + i32.call $drop=, memcpy@FUNCTION, $1, $3, $5 + block + block + i32.eqz $push104=, $0 + br_if 0, $pop104 # 0: down to label6 +# BB#6: # %for.body23.preheader + # in Loop: Header=BB0_3 Depth=3 + i32.const $8=, 0 +.LBB0_7: # %for.body23 + # Parent Loop BB0_1 Depth=1 + # Parent Loop BB0_2 Depth=2 + # Parent Loop BB0_3 Depth=3 + # => This Inner Loop Header: Depth=4 + loop # label7: + i32.add $push4=, $8, $7 + i32.load8_u $push5=, 0($pop4) + i32.const $push60=, 97 + i32.ne $push6=, $pop5, $pop60 + br_if 6, $pop6 # 6: down to label0 +# BB#8: # %for.inc29 + # in Loop: Header=BB0_7 Depth=4 + i32.const $push63=, 1 + i32.add $push62=, $8, $pop63 + tee_local $push61=, $8=, $pop62 + i32.lt_u $push7=, $pop61, $0 + br_if 0, $pop7 # 0: up to label7 +# BB#9: # %for.body36.preheader.loopexit + # in Loop: Header=BB0_3 Depth=3 + end_loop + i32.add $7=, $8, $7 + br 1 # 1: down to label5 +.LBB0_10: # in Loop: Header=BB0_3 Depth=3 + end_block # label6: + i32.const $7=, u1 +.LBB0_11: # %for.body36.preheader + # in Loop: Header=BB0_3 Depth=3 + end_block # label5: + i32.const $8=, 0 + copy_local $6=, $4 +.LBB0_12: # %for.body36 + # Parent Loop BB0_1 Depth=1 + # Parent Loop BB0_2 Depth=2 + # Parent Loop BB0_3 Depth=3 + # => This Inner Loop Header: Depth=4 + loop # label8: + i32.add $push12=, $7, $8 + i32.load8_u $push13=, 0($pop12) + i32.const $push70=, 65 + i32.const $push69=, 24 + i32.shl $push8=, $6, $pop69 + i32.const $push68=, 24 + i32.shr_s $push9=, $pop8, $pop68 + i32.const $push67=, 95 + i32.gt_s $push10=, $pop9, $pop67 + i32.select $push66=, $pop70, $6, $pop10 + tee_local $push65=, $6=, $pop66 + i32.const $push64=, 255 + i32.and $push11=, $pop65, $pop64 + i32.ne $push14=, $pop13, $pop11 + br_if 4, $pop14 # 4: down to label0 +# BB#13: # %for.inc48 + # in Loop: Header=BB0_12 Depth=4 + i32.const $push74=, 1 + i32.add $6=, $6, $pop74 + i32.const $push73=, 1 + i32.add $push72=, $8, $pop73 + tee_local $push71=, $8=, $pop72 + i32.lt_u $push15=, $pop71, $5 + br_if 0, $pop15 # 0: up to label8 +# BB#14: # %for.end52 + # in Loop: Header=BB0_3 Depth=3 + end_loop + i32.add $push77=, $7, $8 + tee_local $push76=, $8=, $pop77 + i32.load8_u $push16=, 0($pop76) + i32.const $push75=, 97 + i32.ne $push17=, $pop16, $pop75 + br_if 3, $pop17 # 3: down to label0 +# BB#15: # %for.inc62 + # in Loop: Header=BB0_3 Depth=3 + i32.const $push79=, 1 + i32.add $push18=, $8, $pop79 + i32.load8_u $push19=, 0($pop18) + i32.const $push78=, 97 + i32.ne $push20=, $pop19, $pop78 + br_if 3, $pop20 # 3: down to label0 +# BB#16: # %for.inc62.1 + # in Loop: Header=BB0_3 Depth=3 + i32.const $push81=, 2 + i32.add $push21=, $8, $pop81 + i32.load8_u $push22=, 0($pop21) + i32.const $push80=, 97 + i32.ne $push23=, $pop22, $pop80 + br_if 3, $pop23 # 3: down to label0 +# BB#17: # %for.inc62.2 + # in Loop: Header=BB0_3 Depth=3 + i32.const $push83=, 3 + i32.add $push24=, $8, $pop83 + i32.load8_u $push25=, 0($pop24) + i32.const $push82=, 97 + i32.ne $push26=, $pop25, $pop82 + br_if 3, $pop26 # 3: down to label0 +# BB#18: # %for.inc62.3 + # in Loop: Header=BB0_3 Depth=3 + i32.const $push85=, 4 + i32.add $push27=, $8, $pop85 + i32.load8_u $push28=, 0($pop27) + i32.const $push84=, 97 + i32.ne $push29=, $pop28, $pop84 + br_if 3, $pop29 # 3: down to label0 +# BB#19: # %for.inc62.4 + # in Loop: Header=BB0_3 Depth=3 + i32.const $push87=, 5 + i32.add $push30=, $8, $pop87 + i32.load8_u $push31=, 0($pop30) + i32.const $push86=, 97 + i32.ne $push32=, $pop31, $pop86 + br_if 3, $pop32 # 3: down to label0 +# BB#20: # %for.inc62.5 + # in Loop: Header=BB0_3 Depth=3 + i32.const $push89=, 6 + i32.add $push33=, $8, $pop89 + i32.load8_u $push34=, 0($pop33) + i32.const $push88=, 97 + i32.ne $push35=, $pop34, $pop88 + br_if 3, $pop35 # 3: down to label0 +# BB#21: # %for.inc62.6 + # in Loop: Header=BB0_3 Depth=3 + i32.const $push91=, 7 + i32.add $push36=, $8, $pop91 + i32.load8_u $push37=, 0($pop36) + i32.const $push90=, 97 + i32.ne $push38=, $pop37, $pop90 + br_if 3, $pop38 # 3: down to label0 +# BB#22: # %for.inc62.7 + # in Loop: Header=BB0_3 Depth=3 + i32.const $push95=, 1 + i32.add $push94=, $5, $pop95 + tee_local $push93=, $5=, $pop94 + i32.const $push92=, 80 + i32.lt_u $push39=, $pop93, $pop92 + br_if 0, $pop39 # 0: up to label3 +# BB#23: # %for.inc69 + # in Loop: Header=BB0_2 Depth=2 + end_loop + i32.const $push99=, 1 + i32.add $push98=, $2, $pop99 + tee_local $push97=, $2=, $pop98 + i32.const $push96=, 8 + i32.lt_u $push40=, $pop97, $pop96 + br_if 0, $pop40 # 0: up to label2 +# BB#24: # %for.inc72 + # in Loop: Header=BB0_1 Depth=1 + end_loop + i32.const $push103=, 1 + i32.add $push102=, $0, $pop103 + tee_local $push101=, $0=, $pop102 + i32.const $push100=, 8 + i32.lt_u $push41=, $pop101, $pop100 + br_if 0, $pop41 # 0: up to label1 +# BB#25: # %for.end74 + end_loop + i32.const $push42=, 0 + call exit@FUNCTION, $pop42 + unreachable +.LBB0_26: # %if.then27 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type u1,@object # @u1 + .section .bss.u1,"aw",@nobits + .p2align 4 +u1: + .skip 96 + .size u1, 96 + + .type u2,@object # @u2 + .section .bss.u2,"aw",@nobits + .p2align 4 +u2: + .skip 96 + .size u2, 96 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/memcpy-bi.c.s b/src/binaryen/test/torture-s/memcpy-bi.c.s new file mode 100644 index 0000000000..3aa82b3061 --- /dev/null +++ b/src/binaryen/test/torture-s/memcpy-bi.c.s @@ -0,0 +1,1736 @@ + .text + .file "memcpy-bi.c" + .section .text.check,"ax",@progbits + .hidden check # -- Begin function check + .globl check + .type check,@function +check: # @check + .param i32, i32, i32 +# BB#0: # %entry + block + i32.call $push0=, memcmp@FUNCTION, $0, $1, $2 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size check, .Lfunc_end0-check + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $0=, 0 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push469=, src + i32.add $push8=, $0, $pop469 + i32.const $push468=, 26 + i32.rem_u $push9=, $0, $pop468 + i32.const $push467=, 97 + i32.add $push10=, $pop9, $pop467 + i32.store8 0($pop8), $pop10 + i32.const $push466=, 1 + i32.add $push465=, $0, $pop466 + tee_local $push464=, $0=, $pop465 + i32.const $push463=, 80 + i32.ne $push11=, $pop464, $pop463 + br_if 0, $pop11 # 0: up to label1 +# BB#2: # %check.exit + end_loop + i32.const $push473=, 0 + i32.const $push472=, 0 + i32.load16_u $push471=, src($pop472) + tee_local $push470=, $0=, $pop471 + i32.store16 dst($pop473), $pop470 + block + i32.ne $push12=, $0, $0 + br_if 0, $pop12 # 0: down to label2 +# BB#3: # %check.exit13 + i32.const $push479=, 0 + i32.const $push478=, 0 + i32.load8_u $push13=, src+2($pop478) + i32.store8 dst+2($pop479), $pop13 + i32.const $push477=, 0 + i32.const $push476=, 0 + i32.load16_u $push14=, src($pop476) + i32.store16 dst($pop477), $pop14 + i32.const $push475=, dst + i32.const $push474=, src + i32.const $push15=, 3 + i32.call $push16=, memcmp@FUNCTION, $pop475, $pop474, $pop15 + br_if 0, $pop16 # 0: down to label2 +# BB#4: # %check.exit17 + i32.const $push485=, 0 + i32.const $push484=, 0 + i32.load8_u $push17=, src+4($pop484) + i32.store8 dst+4($pop485), $pop17 + i32.const $push483=, 0 + i32.const $push482=, 0 + i32.load $push18=, src($pop482) + i32.store dst($pop483), $pop18 + i32.const $push481=, dst + i32.const $push480=, src + i32.const $push19=, 5 + i32.call $push20=, memcmp@FUNCTION, $pop481, $pop480, $pop19 + br_if 0, $pop20 # 0: down to label2 +# BB#5: # %check.exit25 + i32.const $push491=, 0 + i32.const $push490=, 0 + i32.load16_u $push21=, src+4($pop490) + i32.store16 dst+4($pop491), $pop21 + i32.const $push489=, 0 + i32.const $push488=, 0 + i32.load $push22=, src($pop488) + i32.store dst($pop489), $pop22 + i32.const $push487=, dst + i32.const $push486=, src + i32.const $push23=, 6 + i32.call $push24=, memcmp@FUNCTION, $pop487, $pop486, $pop23 + br_if 0, $pop24 # 0: down to label2 +# BB#6: # %check.exit29 + i32.const $push499=, 0 + i32.const $push498=, 0 + i32.load8_u $push25=, src+6($pop498) + i32.store8 dst+6($pop499), $pop25 + i32.const $push497=, 0 + i32.const $push496=, 0 + i32.load16_u $push26=, src+4($pop496) + i32.store16 dst+4($pop497), $pop26 + i32.const $push495=, 0 + i32.const $push494=, 0 + i32.load $push27=, src($pop494) + i32.store dst($pop495), $pop27 + i32.const $push493=, dst + i32.const $push492=, src + i32.const $push28=, 7 + i32.call $push29=, memcmp@FUNCTION, $pop493, $pop492, $pop28 + br_if 0, $pop29 # 0: down to label2 +# BB#7: # %check.exit33 + i32.const $push505=, 0 + i32.const $push504=, 0 + i32.load8_u $push30=, src+8($pop504) + i32.store8 dst+8($pop505), $pop30 + i32.const $push503=, 0 + i32.const $push502=, 0 + i64.load $push31=, src($pop502) + i64.store dst($pop503), $pop31 + i32.const $push501=, dst + i32.const $push500=, src + i32.const $push32=, 9 + i32.call $push33=, memcmp@FUNCTION, $pop501, $pop500, $pop32 + br_if 0, $pop33 # 0: down to label2 +# BB#8: # %check.exit41 + i32.const $push511=, 0 + i32.const $push510=, 0 + i32.load16_u $push34=, src+8($pop510) + i32.store16 dst+8($pop511), $pop34 + i32.const $push509=, 0 + i32.const $push508=, 0 + i64.load $push35=, src($pop508) + i64.store dst($pop509), $pop35 + i32.const $push507=, dst + i32.const $push506=, src + i32.const $push36=, 10 + i32.call $push37=, memcmp@FUNCTION, $pop507, $pop506, $pop36 + br_if 0, $pop37 # 0: down to label2 +# BB#9: # %check.exit45 + i32.const $push519=, 0 + i32.const $push518=, 0 + i32.load8_u $push38=, src+10($pop518) + i32.store8 dst+10($pop519), $pop38 + i32.const $push517=, 0 + i32.const $push516=, 0 + i32.load16_u $push39=, src+8($pop516) + i32.store16 dst+8($pop517), $pop39 + i32.const $push515=, 0 + i32.const $push514=, 0 + i64.load $push40=, src($pop514) + i64.store dst($pop515), $pop40 + i32.const $push513=, dst + i32.const $push512=, src + i32.const $push41=, 11 + i32.call $push42=, memcmp@FUNCTION, $pop513, $pop512, $pop41 + br_if 0, $pop42 # 0: down to label2 +# BB#10: # %check.exit49 + i32.const $push525=, 0 + i32.const $push524=, 0 + i32.load $push43=, src+8($pop524) + i32.store dst+8($pop525), $pop43 + i32.const $push523=, 0 + i32.const $push522=, 0 + i64.load $push44=, src($pop522) + i64.store dst($pop523), $pop44 + i32.const $push521=, dst + i32.const $push520=, src + i32.const $push45=, 12 + i32.call $push46=, memcmp@FUNCTION, $pop521, $pop520, $pop45 + br_if 0, $pop46 # 0: down to label2 +# BB#11: # %check.exit53 + i32.const $push531=, 0 + i32.const $push530=, 0 + i64.load $push47=, src+5($pop530):p2align=0 + i64.store dst+5($pop531):p2align=0, $pop47 + i32.const $push529=, 0 + i32.const $push528=, 0 + i64.load $push48=, src($pop528) + i64.store dst($pop529), $pop48 + i32.const $push527=, dst + i32.const $push526=, src + i32.const $push49=, 13 + i32.call $push50=, memcmp@FUNCTION, $pop527, $pop526, $pop49 + br_if 0, $pop50 # 0: down to label2 +# BB#12: # %check.exit57 + i32.const $push537=, 0 + i32.const $push536=, 0 + i64.load $push51=, src+6($pop536):p2align=1 + i64.store dst+6($pop537):p2align=1, $pop51 + i32.const $push535=, 0 + i32.const $push534=, 0 + i64.load $push52=, src($pop534) + i64.store dst($pop535), $pop52 + i32.const $push533=, dst + i32.const $push532=, src + i32.const $push53=, 14 + i32.call $push54=, memcmp@FUNCTION, $pop533, $pop532, $pop53 + br_if 0, $pop54 # 0: down to label2 +# BB#13: # %check.exit61 + i32.const $push543=, 0 + i32.const $push542=, 0 + i64.load $push55=, src+7($pop542):p2align=0 + i64.store dst+7($pop543):p2align=0, $pop55 + i32.const $push541=, 0 + i32.const $push540=, 0 + i64.load $push56=, src($pop540) + i64.store dst($pop541), $pop56 + i32.const $push539=, dst + i32.const $push538=, src + i32.const $push57=, 15 + i32.call $push58=, memcmp@FUNCTION, $pop539, $pop538, $pop57 + br_if 0, $pop58 # 0: down to label2 +# BB#14: # %check.exit65 + i32.const $push549=, 0 + i32.const $push548=, 0 + i64.load $push59=, src+8($pop548) + i64.store dst+8($pop549), $pop59 + i32.const $push547=, 0 + i32.const $push546=, 0 + i64.load $push60=, src($pop546) + i64.store dst($pop547), $pop60 + i32.const $push545=, dst + i32.const $push544=, src + i32.const $push61=, 16 + i32.call $push62=, memcmp@FUNCTION, $pop545, $pop544, $pop61 + br_if 0, $pop62 # 0: down to label2 +# BB#15: # %check.exit69 + i32.const $push557=, 0 + i32.const $push556=, 0 + i32.load8_u $push63=, src+16($pop556) + i32.store8 dst+16($pop557), $pop63 + i32.const $push555=, 0 + i32.const $push554=, 0 + i64.load $push64=, src+8($pop554) + i64.store dst+8($pop555), $pop64 + i32.const $push553=, 0 + i32.const $push552=, 0 + i64.load $push65=, src($pop552) + i64.store dst($pop553), $pop65 + i32.const $push551=, dst + i32.const $push550=, src + i32.const $push66=, 17 + i32.call $push67=, memcmp@FUNCTION, $pop551, $pop550, $pop66 + br_if 0, $pop67 # 0: down to label2 +# BB#16: # %check.exit73 + i32.const $push565=, 0 + i32.const $push564=, 0 + i32.load16_u $push68=, src+16($pop564) + i32.store16 dst+16($pop565), $pop68 + i32.const $push563=, 0 + i32.const $push562=, 0 + i64.load $push69=, src+8($pop562) + i64.store dst+8($pop563), $pop69 + i32.const $push561=, 0 + i32.const $push560=, 0 + i64.load $push70=, src($pop560) + i64.store dst($pop561), $pop70 + i32.const $push559=, dst + i32.const $push558=, src + i32.const $push71=, 18 + i32.call $push72=, memcmp@FUNCTION, $pop559, $pop558, $pop71 + br_if 0, $pop72 # 0: down to label2 +# BB#17: # %check.exit77 + i32.const $push575=, 0 + i32.const $push574=, 0 + i32.load8_u $push73=, src+18($pop574) + i32.store8 dst+18($pop575), $pop73 + i32.const $push573=, 0 + i32.const $push572=, 0 + i32.load16_u $push74=, src+16($pop572) + i32.store16 dst+16($pop573), $pop74 + i32.const $push571=, 0 + i32.const $push570=, 0 + i64.load $push75=, src+8($pop570) + i64.store dst+8($pop571), $pop75 + i32.const $push569=, 0 + i32.const $push568=, 0 + i64.load $push76=, src($pop568) + i64.store dst($pop569), $pop76 + i32.const $push567=, dst + i32.const $push566=, src + i32.const $push77=, 19 + i32.call $push78=, memcmp@FUNCTION, $pop567, $pop566, $pop77 + br_if 0, $pop78 # 0: down to label2 +# BB#18: # %check.exit81 + i32.const $push583=, 0 + i32.const $push582=, 0 + i32.load $push79=, src+16($pop582) + i32.store dst+16($pop583), $pop79 + i32.const $push581=, 0 + i32.const $push580=, 0 + i64.load $push80=, src+8($pop580) + i64.store dst+8($pop581), $pop80 + i32.const $push579=, 0 + i32.const $push578=, 0 + i64.load $push81=, src($pop578) + i64.store dst($pop579), $pop81 + i32.const $push577=, dst + i32.const $push576=, src + i32.const $push82=, 20 + i32.call $push83=, memcmp@FUNCTION, $pop577, $pop576, $pop82 + br_if 0, $pop83 # 0: down to label2 +# BB#19: # %check.exit85 + i32.const $push591=, 0 + i32.const $push590=, 0 + i64.load $push84=, src+13($pop590):p2align=0 + i64.store dst+13($pop591):p2align=0, $pop84 + i32.const $push589=, 0 + i32.const $push588=, 0 + i64.load $push85=, src+8($pop588) + i64.store dst+8($pop589), $pop85 + i32.const $push587=, 0 + i32.const $push586=, 0 + i64.load $push86=, src($pop586) + i64.store dst($pop587), $pop86 + i32.const $push585=, dst + i32.const $push584=, src + i32.const $push87=, 21 + i32.call $push88=, memcmp@FUNCTION, $pop585, $pop584, $pop87 + br_if 0, $pop88 # 0: down to label2 +# BB#20: # %check.exit89 + i32.const $push599=, 0 + i32.const $push598=, 0 + i64.load $push89=, src+14($pop598):p2align=1 + i64.store dst+14($pop599):p2align=1, $pop89 + i32.const $push597=, 0 + i32.const $push596=, 0 + i64.load $push90=, src+8($pop596) + i64.store dst+8($pop597), $pop90 + i32.const $push595=, 0 + i32.const $push594=, 0 + i64.load $push91=, src($pop594) + i64.store dst($pop595), $pop91 + i32.const $push593=, dst + i32.const $push592=, src + i32.const $push92=, 22 + i32.call $push93=, memcmp@FUNCTION, $pop593, $pop592, $pop92 + br_if 0, $pop93 # 0: down to label2 +# BB#21: # %check.exit93 + i32.const $push607=, 0 + i32.const $push606=, 0 + i64.load $push94=, src+15($pop606):p2align=0 + i64.store dst+15($pop607):p2align=0, $pop94 + i32.const $push605=, 0 + i32.const $push604=, 0 + i64.load $push95=, src+8($pop604) + i64.store dst+8($pop605), $pop95 + i32.const $push603=, 0 + i32.const $push602=, 0 + i64.load $push96=, src($pop602) + i64.store dst($pop603), $pop96 + i32.const $push601=, dst + i32.const $push600=, src + i32.const $push97=, 23 + i32.call $push98=, memcmp@FUNCTION, $pop601, $pop600, $pop97 + br_if 0, $pop98 # 0: down to label2 +# BB#22: # %check.exit97 + i32.const $push615=, 0 + i32.const $push614=, 0 + i64.load $push99=, src+16($pop614) + i64.store dst+16($pop615), $pop99 + i32.const $push613=, 0 + i32.const $push612=, 0 + i64.load $push100=, src+8($pop612) + i64.store dst+8($pop613), $pop100 + i32.const $push611=, 0 + i32.const $push610=, 0 + i64.load $push101=, src($pop610) + i64.store dst($pop611), $pop101 + i32.const $push609=, dst + i32.const $push608=, src + i32.const $push102=, 24 + i32.call $push103=, memcmp@FUNCTION, $pop609, $pop608, $pop102 + br_if 0, $pop103 # 0: down to label2 +# BB#23: # %check.exit101 + i32.const $push625=, 0 + i32.const $push624=, 0 + i32.load8_u $push104=, src+24($pop624) + i32.store8 dst+24($pop625), $pop104 + i32.const $push623=, 0 + i32.const $push622=, 0 + i64.load $push105=, src+16($pop622) + i64.store dst+16($pop623), $pop105 + i32.const $push621=, 0 + i32.const $push620=, 0 + i64.load $push106=, src+8($pop620) + i64.store dst+8($pop621), $pop106 + i32.const $push619=, 0 + i32.const $push618=, 0 + i64.load $push107=, src($pop618) + i64.store dst($pop619), $pop107 + i32.const $push617=, dst + i32.const $push616=, src + i32.const $push108=, 25 + i32.call $push109=, memcmp@FUNCTION, $pop617, $pop616, $pop108 + br_if 0, $pop109 # 0: down to label2 +# BB#24: # %check.exit105 + i32.const $push635=, 0 + i32.const $push634=, 0 + i32.load16_u $push110=, src+24($pop634) + i32.store16 dst+24($pop635), $pop110 + i32.const $push633=, 0 + i32.const $push632=, 0 + i64.load $push111=, src+16($pop632) + i64.store dst+16($pop633), $pop111 + i32.const $push631=, 0 + i32.const $push630=, 0 + i64.load $push112=, src+8($pop630) + i64.store dst+8($pop631), $pop112 + i32.const $push629=, 0 + i32.const $push628=, 0 + i64.load $push113=, src($pop628) + i64.store dst($pop629), $pop113 + i32.const $push627=, dst + i32.const $push626=, src + i32.const $push114=, 26 + i32.call $push115=, memcmp@FUNCTION, $pop627, $pop626, $pop114 + br_if 0, $pop115 # 0: down to label2 +# BB#25: # %check.exit109 + i32.const $push647=, 0 + i32.const $push646=, 0 + i32.load8_u $push116=, src+26($pop646) + i32.store8 dst+26($pop647), $pop116 + i32.const $push645=, 0 + i32.const $push644=, 0 + i32.load16_u $push117=, src+24($pop644) + i32.store16 dst+24($pop645), $pop117 + i32.const $push643=, 0 + i32.const $push642=, 0 + i64.load $push118=, src+16($pop642) + i64.store dst+16($pop643), $pop118 + i32.const $push641=, 0 + i32.const $push640=, 0 + i64.load $push119=, src+8($pop640) + i64.store dst+8($pop641), $pop119 + i32.const $push639=, 0 + i32.const $push638=, 0 + i64.load $push120=, src($pop638) + i64.store dst($pop639), $pop120 + i32.const $push637=, dst + i32.const $push636=, src + i32.const $push121=, 27 + i32.call $push122=, memcmp@FUNCTION, $pop637, $pop636, $pop121 + br_if 0, $pop122 # 0: down to label2 +# BB#26: # %check.exit113 + i32.const $push657=, 0 + i32.const $push656=, 0 + i32.load $push123=, src+24($pop656) + i32.store dst+24($pop657), $pop123 + i32.const $push655=, 0 + i32.const $push654=, 0 + i64.load $push124=, src+16($pop654) + i64.store dst+16($pop655), $pop124 + i32.const $push653=, 0 + i32.const $push652=, 0 + i64.load $push125=, src+8($pop652) + i64.store dst+8($pop653), $pop125 + i32.const $push651=, 0 + i32.const $push650=, 0 + i64.load $push126=, src($pop650) + i64.store dst($pop651), $pop126 + i32.const $push649=, dst + i32.const $push648=, src + i32.const $push127=, 28 + i32.call $push128=, memcmp@FUNCTION, $pop649, $pop648, $pop127 + br_if 0, $pop128 # 0: down to label2 +# BB#27: # %check.exit117 + i32.const $push667=, 0 + i32.const $push666=, 0 + i64.load $push129=, src+21($pop666):p2align=0 + i64.store dst+21($pop667):p2align=0, $pop129 + i32.const $push665=, 0 + i32.const $push664=, 0 + i64.load $push130=, src+16($pop664) + i64.store dst+16($pop665), $pop130 + i32.const $push663=, 0 + i32.const $push662=, 0 + i64.load $push131=, src+8($pop662) + i64.store dst+8($pop663), $pop131 + i32.const $push661=, 0 + i32.const $push660=, 0 + i64.load $push132=, src($pop660) + i64.store dst($pop661), $pop132 + i32.const $push659=, dst + i32.const $push658=, src + i32.const $push133=, 29 + i32.call $push134=, memcmp@FUNCTION, $pop659, $pop658, $pop133 + br_if 0, $pop134 # 0: down to label2 +# BB#28: # %check.exit121 + i32.const $push677=, 0 + i32.const $push676=, 0 + i64.load $push135=, src+22($pop676):p2align=1 + i64.store dst+22($pop677):p2align=1, $pop135 + i32.const $push675=, 0 + i32.const $push674=, 0 + i64.load $push136=, src+16($pop674) + i64.store dst+16($pop675), $pop136 + i32.const $push673=, 0 + i32.const $push672=, 0 + i64.load $push137=, src+8($pop672) + i64.store dst+8($pop673), $pop137 + i32.const $push671=, 0 + i32.const $push670=, 0 + i64.load $push138=, src($pop670) + i64.store dst($pop671), $pop138 + i32.const $push669=, dst + i32.const $push668=, src + i32.const $push139=, 30 + i32.call $push140=, memcmp@FUNCTION, $pop669, $pop668, $pop139 + br_if 0, $pop140 # 0: down to label2 +# BB#29: # %check.exit125 + i32.const $push687=, 0 + i32.const $push686=, 0 + i64.load $push141=, src+23($pop686):p2align=0 + i64.store dst+23($pop687):p2align=0, $pop141 + i32.const $push685=, 0 + i32.const $push684=, 0 + i64.load $push142=, src+16($pop684) + i64.store dst+16($pop685), $pop142 + i32.const $push683=, 0 + i32.const $push682=, 0 + i64.load $push143=, src+8($pop682) + i64.store dst+8($pop683), $pop143 + i32.const $push681=, 0 + i32.const $push680=, 0 + i64.load $push144=, src($pop680) + i64.store dst($pop681), $pop144 + i32.const $push679=, dst + i32.const $push678=, src + i32.const $push145=, 31 + i32.call $push146=, memcmp@FUNCTION, $pop679, $pop678, $pop145 + br_if 0, $pop146 # 0: down to label2 +# BB#30: # %check.exit129 + i32.const $push697=, 0 + i32.const $push696=, 0 + i64.load $push147=, src+24($pop696) + i64.store dst+24($pop697), $pop147 + i32.const $push695=, 0 + i32.const $push694=, 0 + i64.load $push148=, src+16($pop694) + i64.store dst+16($pop695), $pop148 + i32.const $push693=, 0 + i32.const $push692=, 0 + i64.load $push149=, src+8($pop692) + i64.store dst+8($pop693), $pop149 + i32.const $push691=, 0 + i32.const $push690=, 0 + i64.load $push150=, src($pop690) + i64.store dst($pop691), $pop150 + i32.const $push689=, dst + i32.const $push688=, src + i32.const $push151=, 32 + i32.call $push152=, memcmp@FUNCTION, $pop689, $pop688, $pop151 + br_if 0, $pop152 # 0: down to label2 +# BB#31: # %check.exit133 + i32.const $push709=, 0 + i32.const $push708=, 0 + i32.load8_u $push153=, src+32($pop708) + i32.store8 dst+32($pop709), $pop153 + i32.const $push707=, 0 + i32.const $push706=, 0 + i64.load $push154=, src+24($pop706) + i64.store dst+24($pop707), $pop154 + i32.const $push705=, 0 + i32.const $push704=, 0 + i64.load $push155=, src+16($pop704) + i64.store dst+16($pop705), $pop155 + i32.const $push703=, 0 + i32.const $push702=, 0 + i64.load $push156=, src+8($pop702) + i64.store dst+8($pop703), $pop156 + i32.const $push701=, 0 + i32.const $push700=, 0 + i64.load $push157=, src($pop700) + i64.store dst($pop701), $pop157 + i32.const $push699=, dst + i32.const $push698=, src + i32.const $push158=, 33 + i32.call $push159=, memcmp@FUNCTION, $pop699, $pop698, $pop158 + br_if 0, $pop159 # 0: down to label2 +# BB#32: # %check.exit137 + i32.const $push721=, 0 + i32.const $push720=, 0 + i32.load16_u $push160=, src+32($pop720) + i32.store16 dst+32($pop721), $pop160 + i32.const $push719=, 0 + i32.const $push718=, 0 + i64.load $push161=, src+24($pop718) + i64.store dst+24($pop719), $pop161 + i32.const $push717=, 0 + i32.const $push716=, 0 + i64.load $push162=, src+16($pop716) + i64.store dst+16($pop717), $pop162 + i32.const $push715=, 0 + i32.const $push714=, 0 + i64.load $push163=, src+8($pop714) + i64.store dst+8($pop715), $pop163 + i32.const $push713=, 0 + i32.const $push712=, 0 + i64.load $push164=, src($pop712) + i64.store dst($pop713), $pop164 + i32.const $push711=, dst + i32.const $push710=, src + i32.const $push165=, 34 + i32.call $push166=, memcmp@FUNCTION, $pop711, $pop710, $pop165 + br_if 0, $pop166 # 0: down to label2 +# BB#33: # %check.exit141 + i32.const $push735=, 0 + i32.const $push734=, 0 + i32.load8_u $push167=, src+34($pop734) + i32.store8 dst+34($pop735), $pop167 + i32.const $push733=, 0 + i32.const $push732=, 0 + i32.load16_u $push168=, src+32($pop732) + i32.store16 dst+32($pop733), $pop168 + i32.const $push731=, 0 + i32.const $push730=, 0 + i64.load $push169=, src+24($pop730) + i64.store dst+24($pop731), $pop169 + i32.const $push729=, 0 + i32.const $push728=, 0 + i64.load $push170=, src+16($pop728) + i64.store dst+16($pop729), $pop170 + i32.const $push727=, 0 + i32.const $push726=, 0 + i64.load $push171=, src+8($pop726) + i64.store dst+8($pop727), $pop171 + i32.const $push725=, 0 + i32.const $push724=, 0 + i64.load $push172=, src($pop724) + i64.store dst($pop725), $pop172 + i32.const $push723=, dst + i32.const $push722=, src + i32.const $push173=, 35 + i32.call $push174=, memcmp@FUNCTION, $pop723, $pop722, $pop173 + br_if 0, $pop174 # 0: down to label2 +# BB#34: # %check.exit145 + i32.const $push747=, 0 + i32.const $push746=, 0 + i32.load $push175=, src+32($pop746) + i32.store dst+32($pop747), $pop175 + i32.const $push745=, 0 + i32.const $push744=, 0 + i64.load $push176=, src+24($pop744) + i64.store dst+24($pop745), $pop176 + i32.const $push743=, 0 + i32.const $push742=, 0 + i64.load $push177=, src+16($pop742) + i64.store dst+16($pop743), $pop177 + i32.const $push741=, 0 + i32.const $push740=, 0 + i64.load $push178=, src+8($pop740) + i64.store dst+8($pop741), $pop178 + i32.const $push739=, 0 + i32.const $push738=, 0 + i64.load $push179=, src($pop738) + i64.store dst($pop739), $pop179 + i32.const $push737=, dst + i32.const $push736=, src + i32.const $push180=, 36 + i32.call $push181=, memcmp@FUNCTION, $pop737, $pop736, $pop180 + br_if 0, $pop181 # 0: down to label2 +# BB#35: # %check.exit149 + i32.const $push759=, 0 + i32.const $push758=, 0 + i64.load $push182=, src+29($pop758):p2align=0 + i64.store dst+29($pop759):p2align=0, $pop182 + i32.const $push757=, 0 + i32.const $push756=, 0 + i64.load $push183=, src+24($pop756) + i64.store dst+24($pop757), $pop183 + i32.const $push755=, 0 + i32.const $push754=, 0 + i64.load $push184=, src+16($pop754) + i64.store dst+16($pop755), $pop184 + i32.const $push753=, 0 + i32.const $push752=, 0 + i64.load $push185=, src+8($pop752) + i64.store dst+8($pop753), $pop185 + i32.const $push751=, 0 + i32.const $push750=, 0 + i64.load $push186=, src($pop750) + i64.store dst($pop751), $pop186 + i32.const $push749=, dst + i32.const $push748=, src + i32.const $push187=, 37 + i32.call $push188=, memcmp@FUNCTION, $pop749, $pop748, $pop187 + br_if 0, $pop188 # 0: down to label2 +# BB#36: # %check.exit153 + i32.const $push771=, 0 + i32.const $push770=, 0 + i64.load $push189=, src+30($pop770):p2align=1 + i64.store dst+30($pop771):p2align=1, $pop189 + i32.const $push769=, 0 + i32.const $push768=, 0 + i64.load $push190=, src+24($pop768) + i64.store dst+24($pop769), $pop190 + i32.const $push767=, 0 + i32.const $push766=, 0 + i64.load $push191=, src+16($pop766) + i64.store dst+16($pop767), $pop191 + i32.const $push765=, 0 + i32.const $push764=, 0 + i64.load $push192=, src+8($pop764) + i64.store dst+8($pop765), $pop192 + i32.const $push763=, 0 + i32.const $push762=, 0 + i64.load $push193=, src($pop762) + i64.store dst($pop763), $pop193 + i32.const $push761=, dst + i32.const $push760=, src + i32.const $push194=, 38 + i32.call $push195=, memcmp@FUNCTION, $pop761, $pop760, $pop194 + br_if 0, $pop195 # 0: down to label2 +# BB#37: # %check.exit157 + i32.const $push783=, 0 + i32.const $push782=, 0 + i64.load $push196=, src+31($pop782):p2align=0 + i64.store dst+31($pop783):p2align=0, $pop196 + i32.const $push781=, 0 + i32.const $push780=, 0 + i64.load $push197=, src+24($pop780) + i64.store dst+24($pop781), $pop197 + i32.const $push779=, 0 + i32.const $push778=, 0 + i64.load $push198=, src+16($pop778) + i64.store dst+16($pop779), $pop198 + i32.const $push777=, 0 + i32.const $push776=, 0 + i64.load $push199=, src+8($pop776) + i64.store dst+8($pop777), $pop199 + i32.const $push775=, 0 + i32.const $push774=, 0 + i64.load $push200=, src($pop774) + i64.store dst($pop775), $pop200 + i32.const $push773=, dst + i32.const $push772=, src + i32.const $push201=, 39 + i32.call $push202=, memcmp@FUNCTION, $pop773, $pop772, $pop201 + br_if 0, $pop202 # 0: down to label2 +# BB#38: # %check.exit161 + i32.const $push795=, 0 + i32.const $push794=, 0 + i64.load $push203=, src+32($pop794) + i64.store dst+32($pop795), $pop203 + i32.const $push793=, 0 + i32.const $push792=, 0 + i64.load $push204=, src+24($pop792) + i64.store dst+24($pop793), $pop204 + i32.const $push791=, 0 + i32.const $push790=, 0 + i64.load $push205=, src+16($pop790) + i64.store dst+16($pop791), $pop205 + i32.const $push789=, 0 + i32.const $push788=, 0 + i64.load $push206=, src+8($pop788) + i64.store dst+8($pop789), $pop206 + i32.const $push787=, 0 + i32.const $push786=, 0 + i64.load $push207=, src($pop786) + i64.store dst($pop787), $pop207 + i32.const $push785=, dst + i32.const $push784=, src + i32.const $push208=, 40 + i32.call $push209=, memcmp@FUNCTION, $pop785, $pop784, $pop208 + br_if 0, $pop209 # 0: down to label2 +# BB#39: # %check.exit165 + i32.const $push809=, 0 + i32.const $push808=, 0 + i32.load8_u $push210=, src+40($pop808) + i32.store8 dst+40($pop809), $pop210 + i32.const $push807=, 0 + i32.const $push806=, 0 + i64.load $push211=, src+32($pop806) + i64.store dst+32($pop807), $pop211 + i32.const $push805=, 0 + i32.const $push804=, 0 + i64.load $push212=, src+24($pop804) + i64.store dst+24($pop805), $pop212 + i32.const $push803=, 0 + i32.const $push802=, 0 + i64.load $push213=, src+16($pop802) + i64.store dst+16($pop803), $pop213 + i32.const $push801=, 0 + i32.const $push800=, 0 + i64.load $push214=, src+8($pop800) + i64.store dst+8($pop801), $pop214 + i32.const $push799=, 0 + i32.const $push798=, 0 + i64.load $push215=, src($pop798) + i64.store dst($pop799), $pop215 + i32.const $push797=, dst + i32.const $push796=, src + i32.const $push216=, 41 + i32.call $push217=, memcmp@FUNCTION, $pop797, $pop796, $pop216 + br_if 0, $pop217 # 0: down to label2 +# BB#40: # %check.exit169 + i32.const $push823=, 0 + i32.const $push822=, 0 + i32.load16_u $push218=, src+40($pop822) + i32.store16 dst+40($pop823), $pop218 + i32.const $push821=, 0 + i32.const $push820=, 0 + i64.load $push219=, src+32($pop820) + i64.store dst+32($pop821), $pop219 + i32.const $push819=, 0 + i32.const $push818=, 0 + i64.load $push220=, src+24($pop818) + i64.store dst+24($pop819), $pop220 + i32.const $push817=, 0 + i32.const $push816=, 0 + i64.load $push221=, src+16($pop816) + i64.store dst+16($pop817), $pop221 + i32.const $push815=, 0 + i32.const $push814=, 0 + i64.load $push222=, src+8($pop814) + i64.store dst+8($pop815), $pop222 + i32.const $push813=, 0 + i32.const $push812=, 0 + i64.load $push223=, src($pop812) + i64.store dst($pop813), $pop223 + i32.const $push811=, dst + i32.const $push810=, src + i32.const $push224=, 42 + i32.call $push225=, memcmp@FUNCTION, $pop811, $pop810, $pop224 + br_if 0, $pop225 # 0: down to label2 +# BB#41: # %check.exit173 + i32.const $push839=, 0 + i32.const $push838=, 0 + i32.load8_u $push226=, src+42($pop838) + i32.store8 dst+42($pop839), $pop226 + i32.const $push837=, 0 + i32.const $push836=, 0 + i32.load16_u $push227=, src+40($pop836) + i32.store16 dst+40($pop837), $pop227 + i32.const $push835=, 0 + i32.const $push834=, 0 + i64.load $push228=, src+32($pop834) + i64.store dst+32($pop835), $pop228 + i32.const $push833=, 0 + i32.const $push832=, 0 + i64.load $push229=, src+24($pop832) + i64.store dst+24($pop833), $pop229 + i32.const $push831=, 0 + i32.const $push830=, 0 + i64.load $push230=, src+16($pop830) + i64.store dst+16($pop831), $pop230 + i32.const $push829=, 0 + i32.const $push828=, 0 + i64.load $push231=, src+8($pop828) + i64.store dst+8($pop829), $pop231 + i32.const $push827=, 0 + i32.const $push826=, 0 + i64.load $push232=, src($pop826) + i64.store dst($pop827), $pop232 + i32.const $push825=, dst + i32.const $push824=, src + i32.const $push233=, 43 + i32.call $push234=, memcmp@FUNCTION, $pop825, $pop824, $pop233 + br_if 0, $pop234 # 0: down to label2 +# BB#42: # %check.exit177 + i32.const $push853=, 0 + i32.const $push852=, 0 + i32.load $push235=, src+40($pop852) + i32.store dst+40($pop853), $pop235 + i32.const $push851=, 0 + i32.const $push850=, 0 + i64.load $push236=, src+32($pop850) + i64.store dst+32($pop851), $pop236 + i32.const $push849=, 0 + i32.const $push848=, 0 + i64.load $push237=, src+24($pop848) + i64.store dst+24($pop849), $pop237 + i32.const $push847=, 0 + i32.const $push846=, 0 + i64.load $push238=, src+16($pop846) + i64.store dst+16($pop847), $pop238 + i32.const $push845=, 0 + i32.const $push844=, 0 + i64.load $push239=, src+8($pop844) + i64.store dst+8($pop845), $pop239 + i32.const $push843=, 0 + i32.const $push842=, 0 + i64.load $push240=, src($pop842) + i64.store dst($pop843), $pop240 + i32.const $push841=, dst + i32.const $push840=, src + i32.const $push241=, 44 + i32.call $push242=, memcmp@FUNCTION, $pop841, $pop840, $pop241 + br_if 0, $pop242 # 0: down to label2 +# BB#43: # %check.exit181 + i32.const $push867=, 0 + i32.const $push866=, 0 + i64.load $push243=, src+37($pop866):p2align=0 + i64.store dst+37($pop867):p2align=0, $pop243 + i32.const $push865=, 0 + i32.const $push864=, 0 + i64.load $push244=, src+32($pop864) + i64.store dst+32($pop865), $pop244 + i32.const $push863=, 0 + i32.const $push862=, 0 + i64.load $push245=, src+24($pop862) + i64.store dst+24($pop863), $pop245 + i32.const $push861=, 0 + i32.const $push860=, 0 + i64.load $push246=, src+16($pop860) + i64.store dst+16($pop861), $pop246 + i32.const $push859=, 0 + i32.const $push858=, 0 + i64.load $push247=, src+8($pop858) + i64.store dst+8($pop859), $pop247 + i32.const $push857=, 0 + i32.const $push856=, 0 + i64.load $push248=, src($pop856) + i64.store dst($pop857), $pop248 + i32.const $push855=, dst + i32.const $push854=, src + i32.const $push249=, 45 + i32.call $push250=, memcmp@FUNCTION, $pop855, $pop854, $pop249 + br_if 0, $pop250 # 0: down to label2 +# BB#44: # %check.exit185 + i32.const $push881=, 0 + i32.const $push880=, 0 + i64.load $push251=, src+38($pop880):p2align=1 + i64.store dst+38($pop881):p2align=1, $pop251 + i32.const $push879=, 0 + i32.const $push878=, 0 + i64.load $push252=, src+32($pop878) + i64.store dst+32($pop879), $pop252 + i32.const $push877=, 0 + i32.const $push876=, 0 + i64.load $push253=, src+24($pop876) + i64.store dst+24($pop877), $pop253 + i32.const $push875=, 0 + i32.const $push874=, 0 + i64.load $push254=, src+16($pop874) + i64.store dst+16($pop875), $pop254 + i32.const $push873=, 0 + i32.const $push872=, 0 + i64.load $push255=, src+8($pop872) + i64.store dst+8($pop873), $pop255 + i32.const $push871=, 0 + i32.const $push870=, 0 + i64.load $push256=, src($pop870) + i64.store dst($pop871), $pop256 + i32.const $push869=, dst + i32.const $push868=, src + i32.const $push257=, 46 + i32.call $push258=, memcmp@FUNCTION, $pop869, $pop868, $pop257 + br_if 0, $pop258 # 0: down to label2 +# BB#45: # %check.exit189 + i32.const $push895=, 0 + i32.const $push894=, 0 + i64.load $push259=, src+39($pop894):p2align=0 + i64.store dst+39($pop895):p2align=0, $pop259 + i32.const $push893=, 0 + i32.const $push892=, 0 + i64.load $push260=, src+32($pop892) + i64.store dst+32($pop893), $pop260 + i32.const $push891=, 0 + i32.const $push890=, 0 + i64.load $push261=, src+24($pop890) + i64.store dst+24($pop891), $pop261 + i32.const $push889=, 0 + i32.const $push888=, 0 + i64.load $push262=, src+16($pop888) + i64.store dst+16($pop889), $pop262 + i32.const $push887=, 0 + i32.const $push886=, 0 + i64.load $push263=, src+8($pop886) + i64.store dst+8($pop887), $pop263 + i32.const $push885=, 0 + i32.const $push884=, 0 + i64.load $push264=, src($pop884) + i64.store dst($pop885), $pop264 + i32.const $push883=, dst + i32.const $push882=, src + i32.const $push265=, 47 + i32.call $push266=, memcmp@FUNCTION, $pop883, $pop882, $pop265 + br_if 0, $pop266 # 0: down to label2 +# BB#46: # %check.exit193 + i32.const $push909=, 0 + i32.const $push908=, 0 + i64.load $push267=, src+40($pop908) + i64.store dst+40($pop909), $pop267 + i32.const $push907=, 0 + i32.const $push906=, 0 + i64.load $push268=, src+32($pop906) + i64.store dst+32($pop907), $pop268 + i32.const $push905=, 0 + i32.const $push904=, 0 + i64.load $push269=, src+24($pop904) + i64.store dst+24($pop905), $pop269 + i32.const $push903=, 0 + i32.const $push902=, 0 + i64.load $push270=, src+16($pop902) + i64.store dst+16($pop903), $pop270 + i32.const $push901=, 0 + i32.const $push900=, 0 + i64.load $push271=, src+8($pop900) + i64.store dst+8($pop901), $pop271 + i32.const $push899=, 0 + i32.const $push898=, 0 + i64.load $push272=, src($pop898) + i64.store dst($pop899), $pop272 + i32.const $push897=, dst + i32.const $push896=, src + i32.const $push273=, 48 + i32.call $push274=, memcmp@FUNCTION, $pop897, $pop896, $pop273 + br_if 0, $pop274 # 0: down to label2 +# BB#47: # %check.exit197 + i32.const $push925=, 0 + i32.const $push924=, 0 + i32.load8_u $push275=, src+48($pop924) + i32.store8 dst+48($pop925), $pop275 + i32.const $push923=, 0 + i32.const $push922=, 0 + i64.load $push276=, src+40($pop922) + i64.store dst+40($pop923), $pop276 + i32.const $push921=, 0 + i32.const $push920=, 0 + i64.load $push277=, src+32($pop920) + i64.store dst+32($pop921), $pop277 + i32.const $push919=, 0 + i32.const $push918=, 0 + i64.load $push278=, src+24($pop918) + i64.store dst+24($pop919), $pop278 + i32.const $push917=, 0 + i32.const $push916=, 0 + i64.load $push279=, src+16($pop916) + i64.store dst+16($pop917), $pop279 + i32.const $push915=, 0 + i32.const $push914=, 0 + i64.load $push280=, src+8($pop914) + i64.store dst+8($pop915), $pop280 + i32.const $push913=, 0 + i32.const $push912=, 0 + i64.load $push281=, src($pop912) + i64.store dst($pop913), $pop281 + i32.const $push911=, dst + i32.const $push910=, src + i32.const $push282=, 49 + i32.call $push283=, memcmp@FUNCTION, $pop911, $pop910, $pop282 + br_if 0, $pop283 # 0: down to label2 +# BB#48: # %check.exit201 + i32.const $push941=, 0 + i32.const $push940=, 0 + i32.load16_u $push284=, src+48($pop940) + i32.store16 dst+48($pop941), $pop284 + i32.const $push939=, 0 + i32.const $push938=, 0 + i64.load $push285=, src+40($pop938) + i64.store dst+40($pop939), $pop285 + i32.const $push937=, 0 + i32.const $push936=, 0 + i64.load $push286=, src+32($pop936) + i64.store dst+32($pop937), $pop286 + i32.const $push935=, 0 + i32.const $push934=, 0 + i64.load $push287=, src+24($pop934) + i64.store dst+24($pop935), $pop287 + i32.const $push933=, 0 + i32.const $push932=, 0 + i64.load $push288=, src+16($pop932) + i64.store dst+16($pop933), $pop288 + i32.const $push931=, 0 + i32.const $push930=, 0 + i64.load $push289=, src+8($pop930) + i64.store dst+8($pop931), $pop289 + i32.const $push929=, 0 + i32.const $push928=, 0 + i64.load $push290=, src($pop928) + i64.store dst($pop929), $pop290 + i32.const $push927=, dst + i32.const $push926=, src + i32.const $push291=, 50 + i32.call $push292=, memcmp@FUNCTION, $pop927, $pop926, $pop291 + br_if 0, $pop292 # 0: down to label2 +# BB#49: # %check.exit205 + i32.const $push959=, 0 + i32.const $push958=, 0 + i32.load8_u $push293=, src+50($pop958) + i32.store8 dst+50($pop959), $pop293 + i32.const $push957=, 0 + i32.const $push956=, 0 + i32.load16_u $push294=, src+48($pop956) + i32.store16 dst+48($pop957), $pop294 + i32.const $push955=, 0 + i32.const $push954=, 0 + i64.load $push295=, src+40($pop954) + i64.store dst+40($pop955), $pop295 + i32.const $push953=, 0 + i32.const $push952=, 0 + i64.load $push296=, src+32($pop952) + i64.store dst+32($pop953), $pop296 + i32.const $push951=, 0 + i32.const $push950=, 0 + i64.load $push297=, src+24($pop950) + i64.store dst+24($pop951), $pop297 + i32.const $push949=, 0 + i32.const $push948=, 0 + i64.load $push298=, src+16($pop948) + i64.store dst+16($pop949), $pop298 + i32.const $push947=, 0 + i32.const $push946=, 0 + i64.load $push299=, src+8($pop946) + i64.store dst+8($pop947), $pop299 + i32.const $push945=, 0 + i32.const $push944=, 0 + i64.load $push300=, src($pop944) + i64.store dst($pop945), $pop300 + i32.const $push943=, dst + i32.const $push942=, src + i32.const $push301=, 51 + i32.call $push302=, memcmp@FUNCTION, $pop943, $pop942, $pop301 + br_if 0, $pop302 # 0: down to label2 +# BB#50: # %check.exit209 + i32.const $push975=, 0 + i32.const $push974=, 0 + i32.load $push303=, src+48($pop974) + i32.store dst+48($pop975), $pop303 + i32.const $push973=, 0 + i32.const $push972=, 0 + i64.load $push304=, src+40($pop972) + i64.store dst+40($pop973), $pop304 + i32.const $push971=, 0 + i32.const $push970=, 0 + i64.load $push305=, src+32($pop970) + i64.store dst+32($pop971), $pop305 + i32.const $push969=, 0 + i32.const $push968=, 0 + i64.load $push306=, src+24($pop968) + i64.store dst+24($pop969), $pop306 + i32.const $push967=, 0 + i32.const $push966=, 0 + i64.load $push307=, src+16($pop966) + i64.store dst+16($pop967), $pop307 + i32.const $push965=, 0 + i32.const $push964=, 0 + i64.load $push308=, src+8($pop964) + i64.store dst+8($pop965), $pop308 + i32.const $push963=, 0 + i32.const $push962=, 0 + i64.load $push309=, src($pop962) + i64.store dst($pop963), $pop309 + i32.const $push961=, dst + i32.const $push960=, src + i32.const $push310=, 52 + i32.call $push311=, memcmp@FUNCTION, $pop961, $pop960, $pop310 + br_if 0, $pop311 # 0: down to label2 +# BB#51: # %check.exit213 + i32.const $push991=, 0 + i32.const $push990=, 0 + i64.load $push312=, src+45($pop990):p2align=0 + i64.store dst+45($pop991):p2align=0, $pop312 + i32.const $push989=, 0 + i32.const $push988=, 0 + i64.load $push313=, src+40($pop988) + i64.store dst+40($pop989), $pop313 + i32.const $push987=, 0 + i32.const $push986=, 0 + i64.load $push314=, src+32($pop986) + i64.store dst+32($pop987), $pop314 + i32.const $push985=, 0 + i32.const $push984=, 0 + i64.load $push315=, src+24($pop984) + i64.store dst+24($pop985), $pop315 + i32.const $push983=, 0 + i32.const $push982=, 0 + i64.load $push316=, src+16($pop982) + i64.store dst+16($pop983), $pop316 + i32.const $push981=, 0 + i32.const $push980=, 0 + i64.load $push317=, src+8($pop980) + i64.store dst+8($pop981), $pop317 + i32.const $push979=, 0 + i32.const $push978=, 0 + i64.load $push318=, src($pop978) + i64.store dst($pop979), $pop318 + i32.const $push977=, dst + i32.const $push976=, src + i32.const $push319=, 53 + i32.call $push320=, memcmp@FUNCTION, $pop977, $pop976, $pop319 + br_if 0, $pop320 # 0: down to label2 +# BB#52: # %check.exit217 + i32.const $push1007=, 0 + i32.const $push1006=, 0 + i64.load $push321=, src+46($pop1006):p2align=1 + i64.store dst+46($pop1007):p2align=1, $pop321 + i32.const $push1005=, 0 + i32.const $push1004=, 0 + i64.load $push322=, src+40($pop1004) + i64.store dst+40($pop1005), $pop322 + i32.const $push1003=, 0 + i32.const $push1002=, 0 + i64.load $push323=, src+32($pop1002) + i64.store dst+32($pop1003), $pop323 + i32.const $push1001=, 0 + i32.const $push1000=, 0 + i64.load $push324=, src+24($pop1000) + i64.store dst+24($pop1001), $pop324 + i32.const $push999=, 0 + i32.const $push998=, 0 + i64.load $push325=, src+16($pop998) + i64.store dst+16($pop999), $pop325 + i32.const $push997=, 0 + i32.const $push996=, 0 + i64.load $push326=, src+8($pop996) + i64.store dst+8($pop997), $pop326 + i32.const $push995=, 0 + i32.const $push994=, 0 + i64.load $push327=, src($pop994) + i64.store dst($pop995), $pop327 + i32.const $push993=, dst + i32.const $push992=, src + i32.const $push328=, 54 + i32.call $push329=, memcmp@FUNCTION, $pop993, $pop992, $pop328 + br_if 0, $pop329 # 0: down to label2 +# BB#53: # %check.exit221 + i32.const $push1023=, 0 + i32.const $push1022=, 0 + i64.load $push330=, src+47($pop1022):p2align=0 + i64.store dst+47($pop1023):p2align=0, $pop330 + i32.const $push1021=, 0 + i32.const $push1020=, 0 + i64.load $push331=, src+40($pop1020) + i64.store dst+40($pop1021), $pop331 + i32.const $push1019=, 0 + i32.const $push1018=, 0 + i64.load $push332=, src+32($pop1018) + i64.store dst+32($pop1019), $pop332 + i32.const $push1017=, 0 + i32.const $push1016=, 0 + i64.load $push333=, src+24($pop1016) + i64.store dst+24($pop1017), $pop333 + i32.const $push1015=, 0 + i32.const $push1014=, 0 + i64.load $push334=, src+16($pop1014) + i64.store dst+16($pop1015), $pop334 + i32.const $push1013=, 0 + i32.const $push1012=, 0 + i64.load $push335=, src+8($pop1012) + i64.store dst+8($pop1013), $pop335 + i32.const $push1011=, 0 + i32.const $push1010=, 0 + i64.load $push336=, src($pop1010) + i64.store dst($pop1011), $pop336 + i32.const $push1009=, dst + i32.const $push1008=, src + i32.const $push337=, 55 + i32.call $push338=, memcmp@FUNCTION, $pop1009, $pop1008, $pop337 + br_if 0, $pop338 # 0: down to label2 +# BB#54: # %check.exit225 + i32.const $push1039=, 0 + i32.const $push1038=, 0 + i64.load $push339=, src+48($pop1038) + i64.store dst+48($pop1039), $pop339 + i32.const $push1037=, 0 + i32.const $push1036=, 0 + i64.load $push340=, src+40($pop1036) + i64.store dst+40($pop1037), $pop340 + i32.const $push1035=, 0 + i32.const $push1034=, 0 + i64.load $push341=, src+32($pop1034) + i64.store dst+32($pop1035), $pop341 + i32.const $push1033=, 0 + i32.const $push1032=, 0 + i64.load $push342=, src+24($pop1032) + i64.store dst+24($pop1033), $pop342 + i32.const $push1031=, 0 + i32.const $push1030=, 0 + i64.load $push343=, src+16($pop1030) + i64.store dst+16($pop1031), $pop343 + i32.const $push1029=, 0 + i32.const $push1028=, 0 + i64.load $push344=, src+8($pop1028) + i64.store dst+8($pop1029), $pop344 + i32.const $push1027=, 0 + i32.const $push1026=, 0 + i64.load $push345=, src($pop1026) + i64.store dst($pop1027), $pop345 + i32.const $push1025=, dst + i32.const $push1024=, src + i32.const $push346=, 56 + i32.call $push347=, memcmp@FUNCTION, $pop1025, $pop1024, $pop346 + br_if 0, $pop347 # 0: down to label2 +# BB#55: # %check.exit229 + i32.const $push1057=, 0 + i32.const $push1056=, 0 + i32.load8_u $push348=, src+56($pop1056) + i32.store8 dst+56($pop1057), $pop348 + i32.const $push1055=, 0 + i32.const $push1054=, 0 + i64.load $push349=, src+48($pop1054) + i64.store dst+48($pop1055), $pop349 + i32.const $push1053=, 0 + i32.const $push1052=, 0 + i64.load $push350=, src+40($pop1052) + i64.store dst+40($pop1053), $pop350 + i32.const $push1051=, 0 + i32.const $push1050=, 0 + i64.load $push351=, src+32($pop1050) + i64.store dst+32($pop1051), $pop351 + i32.const $push1049=, 0 + i32.const $push1048=, 0 + i64.load $push352=, src+24($pop1048) + i64.store dst+24($pop1049), $pop352 + i32.const $push1047=, 0 + i32.const $push1046=, 0 + i64.load $push353=, src+16($pop1046) + i64.store dst+16($pop1047), $pop353 + i32.const $push1045=, 0 + i32.const $push1044=, 0 + i64.load $push354=, src+8($pop1044) + i64.store dst+8($pop1045), $pop354 + i32.const $push1043=, 0 + i32.const $push1042=, 0 + i64.load $push355=, src($pop1042) + i64.store dst($pop1043), $pop355 + i32.const $push1041=, dst + i32.const $push1040=, src + i32.const $push356=, 57 + i32.call $push357=, memcmp@FUNCTION, $pop1041, $pop1040, $pop356 + br_if 0, $pop357 # 0: down to label2 +# BB#56: # %check.exit233 + i32.const $push358=, 0 + i32.const $push1074=, 0 + i32.load16_u $push359=, src+56($pop1074) + i32.store16 dst+56($pop358), $pop359 + i32.const $push1073=, 0 + i32.const $push1072=, 0 + i64.load $push360=, src+48($pop1072) + i64.store dst+48($pop1073), $pop360 + i32.const $push1071=, 0 + i32.const $push1070=, 0 + i64.load $push361=, src+40($pop1070) + i64.store dst+40($pop1071), $pop361 + i32.const $push1069=, 0 + i32.const $push1068=, 0 + i64.load $push362=, src+32($pop1068) + i64.store dst+32($pop1069), $pop362 + i32.const $push1067=, 0 + i32.const $push1066=, 0 + i64.load $push363=, src+24($pop1066) + i64.store dst+24($pop1067), $pop363 + i32.const $push1065=, 0 + i32.const $push1064=, 0 + i64.load $push364=, src+16($pop1064) + i64.store dst+16($pop1065), $pop364 + i32.const $push1063=, 0 + i32.const $push1062=, 0 + i64.load $push365=, src+8($pop1062) + i64.store dst+8($pop1063), $pop365 + i32.const $push1061=, 0 + i32.const $push1060=, 0 + i64.load $push366=, src($pop1060) + i64.store dst($pop1061), $pop366 + i32.const $push1059=, dst + i32.const $push1058=, src + i32.const $push367=, 58 + i32.call $push368=, memcmp@FUNCTION, $pop1059, $pop1058, $pop367 + br_if 0, $pop368 # 0: down to label2 +# BB#57: # %check.exit237 + i32.const $push370=, dst + i32.const $push1079=, src + i32.const $push369=, 59 + i32.call $push1078=, memcpy@FUNCTION, $pop370, $pop1079, $pop369 + tee_local $push1077=, $0=, $pop1078 + i32.const $push1076=, src + i32.const $push1075=, 59 + i32.call $push371=, memcmp@FUNCTION, $pop1077, $pop1076, $pop1075 + br_if 0, $pop371 # 0: down to label2 +# BB#58: # %check.exit241 + i32.const $push1096=, 0 + i32.const $push1095=, 0 + i32.load $push372=, src+56($pop1095) + i32.store dst+56($pop1096), $pop372 + i32.const $push1094=, 0 + i32.const $push1093=, 0 + i64.load $push373=, src+48($pop1093) + i64.store dst+48($pop1094), $pop373 + i32.const $push1092=, 0 + i32.const $push1091=, 0 + i64.load $push374=, src+40($pop1091) + i64.store dst+40($pop1092), $pop374 + i32.const $push1090=, 0 + i32.const $push1089=, 0 + i64.load $push375=, src+32($pop1089) + i64.store dst+32($pop1090), $pop375 + i32.const $push1088=, 0 + i32.const $push1087=, 0 + i64.load $push376=, src+24($pop1087) + i64.store dst+24($pop1088), $pop376 + i32.const $push1086=, 0 + i32.const $push1085=, 0 + i64.load $push377=, src+16($pop1085) + i64.store dst+16($pop1086), $pop377 + i32.const $push1084=, 0 + i32.const $push1083=, 0 + i64.load $push378=, src+8($pop1083) + i64.store dst+8($pop1084), $pop378 + i32.const $push1082=, 0 + i32.const $push1081=, 0 + i64.load $push379=, src($pop1081) + i64.store dst($pop1082), $pop379 + i32.const $push1080=, src + i32.const $push380=, 60 + i32.call $push381=, memcmp@FUNCTION, $0, $pop1080, $pop380 + br_if 0, $pop381 # 0: down to label2 +# BB#59: # %check.exit245 + i32.const $push1114=, 0 + i32.const $push1113=, 0 + i64.load $push382=, src+53($pop1113):p2align=0 + i64.store dst+53($pop1114):p2align=0, $pop382 + i32.const $push1112=, 0 + i32.const $push1111=, 0 + i64.load $push383=, src+48($pop1111) + i64.store dst+48($pop1112), $pop383 + i32.const $push1110=, 0 + i32.const $push1109=, 0 + i64.load $push384=, src+40($pop1109) + i64.store dst+40($pop1110), $pop384 + i32.const $push1108=, 0 + i32.const $push1107=, 0 + i64.load $push385=, src+32($pop1107) + i64.store dst+32($pop1108), $pop385 + i32.const $push1106=, 0 + i32.const $push1105=, 0 + i64.load $push386=, src+24($pop1105) + i64.store dst+24($pop1106), $pop386 + i32.const $push1104=, 0 + i32.const $push1103=, 0 + i64.load $push387=, src+16($pop1103) + i64.store dst+16($pop1104), $pop387 + i32.const $push1102=, 0 + i32.const $push1101=, 0 + i64.load $push388=, src+8($pop1101) + i64.store dst+8($pop1102), $pop388 + i32.const $push1100=, 0 + i32.const $push1099=, 0 + i64.load $push389=, src($pop1099) + i64.store dst($pop1100), $pop389 + i32.const $push1098=, dst + i32.const $push1097=, src + i32.const $push390=, 61 + i32.call $push391=, memcmp@FUNCTION, $pop1098, $pop1097, $pop390 + br_if 0, $pop391 # 0: down to label2 +# BB#60: # %check.exit249 + i32.const $push1132=, 0 + i32.const $push1131=, 0 + i64.load $push392=, src+54($pop1131):p2align=1 + i64.store dst+54($pop1132):p2align=1, $pop392 + i32.const $push1130=, 0 + i32.const $push1129=, 0 + i64.load $push393=, src+48($pop1129) + i64.store dst+48($pop1130), $pop393 + i32.const $push1128=, 0 + i32.const $push1127=, 0 + i64.load $push394=, src+40($pop1127) + i64.store dst+40($pop1128), $pop394 + i32.const $push1126=, 0 + i32.const $push1125=, 0 + i64.load $push395=, src+32($pop1125) + i64.store dst+32($pop1126), $pop395 + i32.const $push1124=, 0 + i32.const $push1123=, 0 + i64.load $push396=, src+24($pop1123) + i64.store dst+24($pop1124), $pop396 + i32.const $push1122=, 0 + i32.const $push1121=, 0 + i64.load $push397=, src+16($pop1121) + i64.store dst+16($pop1122), $pop397 + i32.const $push1120=, 0 + i32.const $push1119=, 0 + i64.load $push398=, src+8($pop1119) + i64.store dst+8($pop1120), $pop398 + i32.const $push1118=, 0 + i32.const $push1117=, 0 + i64.load $push399=, src($pop1117) + i64.store dst($pop1118), $pop399 + i32.const $push1116=, dst + i32.const $push1115=, src + i32.const $push400=, 62 + i32.call $push401=, memcmp@FUNCTION, $pop1116, $pop1115, $pop400 + br_if 0, $pop401 # 0: down to label2 +# BB#61: # %check.exit253 + i32.const $push1150=, 0 + i32.const $push1149=, 0 + i64.load $push402=, src+55($pop1149):p2align=0 + i64.store dst+55($pop1150):p2align=0, $pop402 + i32.const $push1148=, 0 + i32.const $push1147=, 0 + i64.load $push403=, src+48($pop1147) + i64.store dst+48($pop1148), $pop403 + i32.const $push1146=, 0 + i32.const $push1145=, 0 + i64.load $push404=, src+40($pop1145) + i64.store dst+40($pop1146), $pop404 + i32.const $push1144=, 0 + i32.const $push1143=, 0 + i64.load $push405=, src+32($pop1143) + i64.store dst+32($pop1144), $pop405 + i32.const $push1142=, 0 + i32.const $push1141=, 0 + i64.load $push406=, src+24($pop1141) + i64.store dst+24($pop1142), $pop406 + i32.const $push1140=, 0 + i32.const $push1139=, 0 + i64.load $push407=, src+16($pop1139) + i64.store dst+16($pop1140), $pop407 + i32.const $push1138=, 0 + i32.const $push1137=, 0 + i64.load $push408=, src+8($pop1137) + i64.store dst+8($pop1138), $pop408 + i32.const $push1136=, 0 + i32.const $push1135=, 0 + i64.load $push409=, src($pop1135) + i64.store dst($pop1136), $pop409 + i32.const $push1134=, dst + i32.const $push1133=, src + i32.const $push410=, 63 + i32.call $push411=, memcmp@FUNCTION, $pop1134, $pop1133, $pop410 + br_if 0, $pop411 # 0: down to label2 +# BB#62: # %check.exit257 + i32.const $push412=, 0 + i32.const $push1167=, 0 + i64.load $push413=, src+56($pop1167) + i64.store dst+56($pop412), $pop413 + i32.const $push1166=, 0 + i32.const $push1165=, 0 + i64.load $push414=, src+48($pop1165) + i64.store dst+48($pop1166), $pop414 + i32.const $push1164=, 0 + i32.const $push1163=, 0 + i64.load $push415=, src+40($pop1163) + i64.store dst+40($pop1164), $pop415 + i32.const $push1162=, 0 + i32.const $push1161=, 0 + i64.load $push416=, src+32($pop1161) + i64.store dst+32($pop1162), $pop416 + i32.const $push1160=, 0 + i32.const $push1159=, 0 + i64.load $push417=, src+24($pop1159) + i64.store dst+24($pop1160), $pop417 + i32.const $push1158=, 0 + i32.const $push1157=, 0 + i64.load $push418=, src+16($pop1157) + i64.store dst+16($pop1158), $pop418 + i32.const $push1156=, 0 + i32.const $push1155=, 0 + i64.load $push419=, src+8($pop1155) + i64.store dst+8($pop1156), $pop419 + i32.const $push1154=, 0 + i32.const $push1153=, 0 + i64.load $push420=, src($pop1153) + i64.store dst($pop1154), $pop420 + i32.const $push1152=, dst + i32.const $push1151=, src + i32.const $push421=, 64 + i32.call $push422=, memcmp@FUNCTION, $pop1152, $pop1151, $pop421 + br_if 0, $pop422 # 0: down to label2 +# BB#63: # %check.exit261 + i32.const $push424=, dst + i32.const $push1172=, src + i32.const $push423=, 65 + i32.call $push1171=, memcpy@FUNCTION, $pop424, $pop1172, $pop423 + tee_local $push1170=, $0=, $pop1171 + i32.const $push1169=, src + i32.const $push1168=, 65 + i32.call $push425=, memcmp@FUNCTION, $pop1170, $pop1169, $pop1168 + br_if 0, $pop425 # 0: down to label2 +# BB#64: # %check.exit265 + i32.const $push1175=, src + i32.const $push426=, 66 + i32.call $push0=, memcpy@FUNCTION, $0, $pop1175, $pop426 + i32.const $push1174=, src + i32.const $push1173=, 66 + i32.call $push427=, memcmp@FUNCTION, $pop0, $pop1174, $pop1173 + br_if 0, $pop427 # 0: down to label2 +# BB#65: # %check.exit269 + i32.const $push429=, dst + i32.const $push1180=, src + i32.const $push428=, 67 + i32.call $push1179=, memcpy@FUNCTION, $pop429, $pop1180, $pop428 + tee_local $push1178=, $0=, $pop1179 + i32.const $push1177=, src + i32.const $push1176=, 67 + i32.call $push430=, memcmp@FUNCTION, $pop1178, $pop1177, $pop1176 + br_if 0, $pop430 # 0: down to label2 +# BB#66: # %check.exit273 + i32.const $push1183=, src + i32.const $push431=, 68 + i32.call $push1=, memcpy@FUNCTION, $0, $pop1183, $pop431 + i32.const $push1182=, src + i32.const $push1181=, 68 + i32.call $push432=, memcmp@FUNCTION, $pop1, $pop1182, $pop1181 + br_if 0, $pop432 # 0: down to label2 +# BB#67: # %check.exit277 + i32.const $push434=, dst + i32.const $push1188=, src + i32.const $push433=, 69 + i32.call $push1187=, memcpy@FUNCTION, $pop434, $pop1188, $pop433 + tee_local $push1186=, $0=, $pop1187 + i32.const $push1185=, src + i32.const $push1184=, 69 + i32.call $push435=, memcmp@FUNCTION, $pop1186, $pop1185, $pop1184 + br_if 0, $pop435 # 0: down to label2 +# BB#68: # %check.exit281 + i32.const $push1191=, src + i32.const $push436=, 70 + i32.call $push2=, memcpy@FUNCTION, $0, $pop1191, $pop436 + i32.const $push1190=, src + i32.const $push1189=, 70 + i32.call $push437=, memcmp@FUNCTION, $pop2, $pop1190, $pop1189 + br_if 0, $pop437 # 0: down to label2 +# BB#69: # %check.exit285 + i32.const $push439=, dst + i32.const $push1196=, src + i32.const $push438=, 71 + i32.call $push1195=, memcpy@FUNCTION, $pop439, $pop1196, $pop438 + tee_local $push1194=, $0=, $pop1195 + i32.const $push1193=, src + i32.const $push1192=, 71 + i32.call $push440=, memcmp@FUNCTION, $pop1194, $pop1193, $pop1192 + br_if 0, $pop440 # 0: down to label2 +# BB#70: # %check.exit289 + i32.const $push1199=, src + i32.const $push441=, 72 + i32.call $push3=, memcpy@FUNCTION, $0, $pop1199, $pop441 + i32.const $push1198=, src + i32.const $push1197=, 72 + i32.call $push442=, memcmp@FUNCTION, $pop3, $pop1198, $pop1197 + br_if 0, $pop442 # 0: down to label2 +# BB#71: # %check.exit293 + i32.const $push444=, dst + i32.const $push1204=, src + i32.const $push443=, 73 + i32.call $push1203=, memcpy@FUNCTION, $pop444, $pop1204, $pop443 + tee_local $push1202=, $0=, $pop1203 + i32.const $push1201=, src + i32.const $push1200=, 73 + i32.call $push445=, memcmp@FUNCTION, $pop1202, $pop1201, $pop1200 + br_if 0, $pop445 # 0: down to label2 +# BB#72: # %check.exit297 + i32.const $push1207=, src + i32.const $push446=, 74 + i32.call $push4=, memcpy@FUNCTION, $0, $pop1207, $pop446 + i32.const $push1206=, src + i32.const $push1205=, 74 + i32.call $push447=, memcmp@FUNCTION, $pop4, $pop1206, $pop1205 + br_if 0, $pop447 # 0: down to label2 +# BB#73: # %check.exit301 + i32.const $push449=, dst + i32.const $push1212=, src + i32.const $push448=, 75 + i32.call $push1211=, memcpy@FUNCTION, $pop449, $pop1212, $pop448 + tee_local $push1210=, $0=, $pop1211 + i32.const $push1209=, src + i32.const $push1208=, 75 + i32.call $push450=, memcmp@FUNCTION, $pop1210, $pop1209, $pop1208 + br_if 0, $pop450 # 0: down to label2 +# BB#74: # %check.exit305 + i32.const $push1215=, src + i32.const $push451=, 76 + i32.call $push5=, memcpy@FUNCTION, $0, $pop1215, $pop451 + i32.const $push1214=, src + i32.const $push1213=, 76 + i32.call $push452=, memcmp@FUNCTION, $pop5, $pop1214, $pop1213 + br_if 0, $pop452 # 0: down to label2 +# BB#75: # %check.exit309 + i32.const $push454=, dst + i32.const $push1220=, src + i32.const $push453=, 77 + i32.call $push1219=, memcpy@FUNCTION, $pop454, $pop1220, $pop453 + tee_local $push1218=, $0=, $pop1219 + i32.const $push1217=, src + i32.const $push1216=, 77 + i32.call $push455=, memcmp@FUNCTION, $pop1218, $pop1217, $pop1216 + br_if 0, $pop455 # 0: down to label2 +# BB#76: # %check.exit313 + i32.const $push1223=, src + i32.const $push456=, 78 + i32.call $push6=, memcpy@FUNCTION, $0, $pop1223, $pop456 + i32.const $push1222=, src + i32.const $push1221=, 78 + i32.call $push457=, memcmp@FUNCTION, $pop6, $pop1222, $pop1221 + br_if 0, $pop457 # 0: down to label2 +# BB#77: # %check.exit317 + i32.const $push460=, dst + i32.const $push459=, src + i32.const $push458=, 79 + i32.call $push7=, memcpy@FUNCTION, $pop460, $pop459, $pop458 + i32.const $push1225=, src + i32.const $push1224=, 79 + i32.call $push461=, memcmp@FUNCTION, $pop7, $pop1225, $pop1224 + br_if 0, $pop461 # 0: down to label2 +# BB#78: # %check.exit321 + i32.const $push462=, 0 + return $pop462 +.LBB1_79: # %if.then.i12 + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden src # @src + .type src,@object + .section .bss.src,"aw",@nobits + .globl src + .p2align 4 +src: + .skip 80 + .size src, 80 + + .hidden dst # @dst + .type dst,@object + .section .bss.dst,"aw",@nobits + .globl dst + .p2align 4 +dst: + .skip 80 + .size dst, 80 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype memcmp, i32, i32, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/memset-1.c.s b/src/binaryen/test/torture-s/memset-1.c.s new file mode 100644 index 0000000000..a992f7eb7d --- /dev/null +++ b/src/binaryen/test/torture-s/memset-1.c.s @@ -0,0 +1,453 @@ + .text + .file "memset-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $1=, 0 +.LBB0_1: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB0_2 Depth 2 + # Child Loop BB0_4 Depth 3 + # Child Loop BB0_8 Depth 3 + # Child Loop BB0_20 Depth 3 + # Child Loop BB0_25 Depth 3 + # Child Loop BB0_37 Depth 3 + # Child Loop BB0_42 Depth 3 + block + loop # label1: + i32.const $push96=, u + i32.add $2=, $1, $pop96 + i32.const $3=, 1 +.LBB0_2: # %for.body3 + # Parent Loop BB0_1 Depth=1 + # => This Loop Header: Depth=2 + # Child Loop BB0_4 Depth 3 + # Child Loop BB0_8 Depth 3 + # Child Loop BB0_20 Depth 3 + # Child Loop BB0_25 Depth 3 + # Child Loop BB0_37 Depth 3 + # Child Loop BB0_42 Depth 3 + loop # label2: + i32.const $4=, u + i32.const $push100=, u + i32.const $push99=, 97 + i32.const $push98=, 96 + i32.call $drop=, memset@FUNCTION, $pop100, $pop99, $pop98 + i32.const $push97=, 0 + i32.call $0=, memset@FUNCTION, $2, $pop97, $3 + block + i32.eqz $push191=, $1 + br_if 0, $pop191 # 0: down to label3 +# BB#3: # %for.body11.preheader + # in Loop: Header=BB0_2 Depth=2 + i32.const $5=, 0 +.LBB0_4: # %for.body11 + # Parent Loop BB0_1 Depth=1 + # Parent Loop BB0_2 Depth=2 + # => This Inner Loop Header: Depth=3 + loop # label4: + i32.const $push102=, u + i32.add $push0=, $5, $pop102 + i32.load8_u $push1=, 0($pop0) + i32.const $push101=, 97 + i32.ne $push2=, $pop1, $pop101 + br_if 4, $pop2 # 4: down to label0 +# BB#5: # %for.inc16 + # in Loop: Header=BB0_4 Depth=3 + i32.const $push105=, 1 + i32.add $push104=, $5, $pop105 + tee_local $push103=, $5=, $pop104 + i32.lt_u $push3=, $pop103, $1 + br_if 0, $pop3 # 0: up to label4 +# BB#6: # %for.body22.preheader.loopexit + # in Loop: Header=BB0_2 Depth=2 + end_loop + i32.const $push106=, u + i32.add $4=, $5, $pop106 +.LBB0_7: # %for.body22.preheader + # in Loop: Header=BB0_2 Depth=2 + end_block # label3: + i32.const $5=, 0 +.LBB0_8: # %for.body22 + # Parent Loop BB0_1 Depth=1 + # Parent Loop BB0_2 Depth=2 + # => This Inner Loop Header: Depth=3 + loop # label5: + i32.add $push4=, $4, $5 + i32.load8_u $push5=, 0($pop4) + br_if 3, $pop5 # 3: down to label0 +# BB#9: # %for.inc28 + # in Loop: Header=BB0_8 Depth=3 + i32.const $push109=, 1 + i32.add $push108=, $5, $pop109 + tee_local $push107=, $5=, $pop108 + i32.lt_u $push6=, $pop107, $3 + br_if 0, $pop6 # 0: up to label5 +# BB#10: # %for.end31 + # in Loop: Header=BB0_2 Depth=2 + end_loop + i32.add $push112=, $4, $5 + tee_local $push111=, $5=, $pop112 + i32.load8_u $push7=, 0($pop111) + i32.const $push110=, 97 + i32.ne $push8=, $pop7, $pop110 + br_if 2, $pop8 # 2: down to label0 +# BB#11: # %for.inc41 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push114=, 1 + i32.add $push9=, $5, $pop114 + i32.load8_u $push10=, 0($pop9) + i32.const $push113=, 97 + i32.ne $push11=, $pop10, $pop113 + br_if 2, $pop11 # 2: down to label0 +# BB#12: # %for.inc41.1 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push116=, 2 + i32.add $push12=, $5, $pop116 + i32.load8_u $push13=, 0($pop12) + i32.const $push115=, 97 + i32.ne $push14=, $pop13, $pop115 + br_if 2, $pop14 # 2: down to label0 +# BB#13: # %for.inc41.2 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push118=, 3 + i32.add $push15=, $5, $pop118 + i32.load8_u $push16=, 0($pop15) + i32.const $push117=, 97 + i32.ne $push17=, $pop16, $pop117 + br_if 2, $pop17 # 2: down to label0 +# BB#14: # %for.inc41.3 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push120=, 4 + i32.add $push18=, $5, $pop120 + i32.load8_u $push19=, 0($pop18) + i32.const $push119=, 97 + i32.ne $push20=, $pop19, $pop119 + br_if 2, $pop20 # 2: down to label0 +# BB#15: # %for.inc41.4 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push122=, 5 + i32.add $push21=, $5, $pop122 + i32.load8_u $push22=, 0($pop21) + i32.const $push121=, 97 + i32.ne $push23=, $pop22, $pop121 + br_if 2, $pop23 # 2: down to label0 +# BB#16: # %for.inc41.5 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push124=, 6 + i32.add $push24=, $5, $pop124 + i32.load8_u $push25=, 0($pop24) + i32.const $push123=, 97 + i32.ne $push26=, $pop25, $pop123 + br_if 2, $pop26 # 2: down to label0 +# BB#17: # %for.inc41.6 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push126=, 7 + i32.add $push27=, $5, $pop126 + i32.load8_u $push28=, 0($pop27) + i32.const $push125=, 97 + i32.ne $push29=, $pop28, $pop125 + br_if 2, $pop29 # 2: down to label0 +# BB#18: # %for.inc41.7 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push127=, 0 + i32.load8_u $push30=, A($pop127) + i32.call $drop=, memset@FUNCTION, $0, $pop30, $3 + block + block + i32.eqz $push192=, $1 + br_if 0, $pop192 # 0: down to label7 +# BB#19: # %for.body55.preheader + # in Loop: Header=BB0_2 Depth=2 + i32.const $5=, 0 +.LBB0_20: # %for.body55 + # Parent Loop BB0_1 Depth=1 + # Parent Loop BB0_2 Depth=2 + # => This Inner Loop Header: Depth=3 + loop # label8: + i32.const $push129=, u + i32.add $push31=, $5, $pop129 + i32.load8_u $push32=, 0($pop31) + i32.const $push128=, 97 + i32.ne $push33=, $pop32, $pop128 + br_if 5, $pop33 # 5: down to label0 +# BB#21: # %for.inc61 + # in Loop: Header=BB0_20 Depth=3 + i32.const $push132=, 1 + i32.add $push131=, $5, $pop132 + tee_local $push130=, $5=, $pop131 + i32.lt_u $push34=, $pop130, $1 + br_if 0, $pop34 # 0: up to label8 +# BB#22: # %for.body68.preheader.loopexit + # in Loop: Header=BB0_2 Depth=2 + end_loop + i32.const $push133=, u + i32.add $4=, $5, $pop133 + br 1 # 1: down to label6 +.LBB0_23: # in Loop: Header=BB0_2 Depth=2 + end_block # label7: + i32.const $4=, u +.LBB0_24: # %for.body68.preheader + # in Loop: Header=BB0_2 Depth=2 + end_block # label6: + i32.const $5=, 0 +.LBB0_25: # %for.body68 + # Parent Loop BB0_1 Depth=1 + # Parent Loop BB0_2 Depth=2 + # => This Inner Loop Header: Depth=3 + loop # label9: + i32.add $push35=, $4, $5 + i32.load8_u $push36=, 0($pop35) + i32.const $push134=, 65 + i32.ne $push37=, $pop36, $pop134 + br_if 3, $pop37 # 3: down to label0 +# BB#26: # %for.inc74 + # in Loop: Header=BB0_25 Depth=3 + i32.const $push137=, 1 + i32.add $push136=, $5, $pop137 + tee_local $push135=, $5=, $pop136 + i32.lt_u $push38=, $pop135, $3 + br_if 0, $pop38 # 0: up to label9 +# BB#27: # %for.end77 + # in Loop: Header=BB0_2 Depth=2 + end_loop + i32.add $push140=, $4, $5 + tee_local $push139=, $5=, $pop140 + i32.load8_u $push39=, 0($pop139) + i32.const $push138=, 97 + i32.ne $push40=, $pop39, $pop138 + br_if 2, $pop40 # 2: down to label0 +# BB#28: # %for.inc87 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push142=, 1 + i32.add $push41=, $5, $pop142 + i32.load8_u $push42=, 0($pop41) + i32.const $push141=, 97 + i32.ne $push43=, $pop42, $pop141 + br_if 2, $pop43 # 2: down to label0 +# BB#29: # %for.inc87.1 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push144=, 2 + i32.add $push44=, $5, $pop144 + i32.load8_u $push45=, 0($pop44) + i32.const $push143=, 97 + i32.ne $push46=, $pop45, $pop143 + br_if 2, $pop46 # 2: down to label0 +# BB#30: # %for.inc87.2 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push146=, 3 + i32.add $push47=, $5, $pop146 + i32.load8_u $push48=, 0($pop47) + i32.const $push145=, 97 + i32.ne $push49=, $pop48, $pop145 + br_if 2, $pop49 # 2: down to label0 +# BB#31: # %for.inc87.3 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push148=, 4 + i32.add $push50=, $5, $pop148 + i32.load8_u $push51=, 0($pop50) + i32.const $push147=, 97 + i32.ne $push52=, $pop51, $pop147 + br_if 2, $pop52 # 2: down to label0 +# BB#32: # %for.inc87.4 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push150=, 5 + i32.add $push53=, $5, $pop150 + i32.load8_u $push54=, 0($pop53) + i32.const $push149=, 97 + i32.ne $push55=, $pop54, $pop149 + br_if 2, $pop55 # 2: down to label0 +# BB#33: # %for.inc87.5 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push152=, 6 + i32.add $push56=, $5, $pop152 + i32.load8_u $push57=, 0($pop56) + i32.const $push151=, 97 + i32.ne $push58=, $pop57, $pop151 + br_if 2, $pop58 # 2: down to label0 +# BB#34: # %for.inc87.6 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push154=, 7 + i32.add $push59=, $5, $pop154 + i32.load8_u $push60=, 0($pop59) + i32.const $push153=, 97 + i32.ne $push61=, $pop60, $pop153 + br_if 2, $pop61 # 2: down to label0 +# BB#35: # %for.inc87.7 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push155=, 66 + i32.call $drop=, memset@FUNCTION, $0, $pop155, $3 + block + block + i32.eqz $push193=, $1 + br_if 0, $pop193 # 0: down to label11 +# BB#36: # %for.body100.preheader + # in Loop: Header=BB0_2 Depth=2 + i32.const $5=, 0 +.LBB0_37: # %for.body100 + # Parent Loop BB0_1 Depth=1 + # Parent Loop BB0_2 Depth=2 + # => This Inner Loop Header: Depth=3 + loop # label12: + i32.const $push157=, u + i32.add $push62=, $5, $pop157 + i32.load8_u $push63=, 0($pop62) + i32.const $push156=, 97 + i32.ne $push64=, $pop63, $pop156 + br_if 5, $pop64 # 5: down to label0 +# BB#38: # %for.inc106 + # in Loop: Header=BB0_37 Depth=3 + i32.const $push160=, 1 + i32.add $push159=, $5, $pop160 + tee_local $push158=, $5=, $pop159 + i32.lt_u $push65=, $pop158, $1 + br_if 0, $pop65 # 0: up to label12 +# BB#39: # %for.body113.preheader.loopexit + # in Loop: Header=BB0_2 Depth=2 + end_loop + i32.const $push161=, u + i32.add $4=, $5, $pop161 + br 1 # 1: down to label10 +.LBB0_40: # in Loop: Header=BB0_2 Depth=2 + end_block # label11: + i32.const $4=, u +.LBB0_41: # %for.body113.preheader + # in Loop: Header=BB0_2 Depth=2 + end_block # label10: + i32.const $5=, 0 +.LBB0_42: # %for.body113 + # Parent Loop BB0_1 Depth=1 + # Parent Loop BB0_2 Depth=2 + # => This Inner Loop Header: Depth=3 + loop # label13: + i32.add $push66=, $4, $5 + i32.load8_u $push67=, 0($pop66) + i32.const $push162=, 66 + i32.ne $push68=, $pop67, $pop162 + br_if 3, $pop68 # 3: down to label0 +# BB#43: # %for.inc119 + # in Loop: Header=BB0_42 Depth=3 + i32.const $push165=, 1 + i32.add $push164=, $5, $pop165 + tee_local $push163=, $5=, $pop164 + i32.lt_u $push69=, $pop163, $3 + br_if 0, $pop69 # 0: up to label13 +# BB#44: # %for.end122 + # in Loop: Header=BB0_2 Depth=2 + end_loop + i32.add $push168=, $4, $5 + tee_local $push167=, $5=, $pop168 + i32.load8_u $push70=, 0($pop167) + i32.const $push166=, 97 + i32.ne $push71=, $pop70, $pop166 + br_if 2, $pop71 # 2: down to label0 +# BB#45: # %for.inc132 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push170=, 1 + i32.add $push72=, $5, $pop170 + i32.load8_u $push73=, 0($pop72) + i32.const $push169=, 97 + i32.ne $push74=, $pop73, $pop169 + br_if 2, $pop74 # 2: down to label0 +# BB#46: # %for.inc132.1 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push172=, 2 + i32.add $push75=, $5, $pop172 + i32.load8_u $push76=, 0($pop75) + i32.const $push171=, 97 + i32.ne $push77=, $pop76, $pop171 + br_if 2, $pop77 # 2: down to label0 +# BB#47: # %for.inc132.2 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push174=, 3 + i32.add $push78=, $5, $pop174 + i32.load8_u $push79=, 0($pop78) + i32.const $push173=, 97 + i32.ne $push80=, $pop79, $pop173 + br_if 2, $pop80 # 2: down to label0 +# BB#48: # %for.inc132.3 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push176=, 4 + i32.add $push81=, $5, $pop176 + i32.load8_u $push82=, 0($pop81) + i32.const $push175=, 97 + i32.ne $push83=, $pop82, $pop175 + br_if 2, $pop83 # 2: down to label0 +# BB#49: # %for.inc132.4 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push178=, 5 + i32.add $push84=, $5, $pop178 + i32.load8_u $push85=, 0($pop84) + i32.const $push177=, 97 + i32.ne $push86=, $pop85, $pop177 + br_if 2, $pop86 # 2: down to label0 +# BB#50: # %for.inc132.5 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push180=, 6 + i32.add $push87=, $5, $pop180 + i32.load8_u $push88=, 0($pop87) + i32.const $push179=, 97 + i32.ne $push89=, $pop88, $pop179 + br_if 2, $pop89 # 2: down to label0 +# BB#51: # %for.inc132.6 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push182=, 7 + i32.add $push90=, $5, $pop182 + i32.load8_u $push91=, 0($pop90) + i32.const $push181=, 97 + i32.ne $push92=, $pop91, $pop181 + br_if 2, $pop92 # 2: down to label0 +# BB#52: # %for.inc132.7 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push186=, 1 + i32.add $push185=, $3, $pop186 + tee_local $push184=, $3=, $pop185 + i32.const $push183=, 80 + i32.lt_u $push93=, $pop184, $pop183 + br_if 0, $pop93 # 0: up to label2 +# BB#53: # %for.inc139 + # in Loop: Header=BB0_1 Depth=1 + end_loop + i32.const $push190=, 1 + i32.add $push189=, $1, $pop190 + tee_local $push188=, $1=, $pop189 + i32.const $push187=, 8 + i32.lt_u $push94=, $pop188, $pop187 + br_if 0, $pop94 # 0: up to label1 +# BB#54: # %for.end141 + end_loop + i32.const $push95=, 0 + call exit@FUNCTION, $pop95 + unreachable +.LBB0_55: # %if.then14 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden A # @A + .type A,@object + .section .data.A,"aw",@progbits + .globl A +A: + .int8 65 # 0x41 + .size A, 1 + + .type u,@object # @u + .section .bss.u,"aw",@nobits + .p2align 4 +u: + .skip 96 + .size u, 96 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/memset-2.c.s b/src/binaryen/test/torture-s/memset-2.c.s new file mode 100644 index 0000000000..0814883c2e --- /dev/null +++ b/src/binaryen/test/torture-s/memset-2.c.s @@ -0,0 +1,981 @@ + .text + .file "memset-2.c" + .section .text.reset,"ax",@progbits + .hidden reset # -- Begin function reset + .globl reset + .type reset,@function +reset: # @reset +# BB#0: # %entry + i32.const $push1=, 0 + i64.const $push0=, 7016996765293437281 + i64.store u+23($pop1):p2align=0, $pop0 + i32.const $push7=, 0 + i64.const $push6=, 7016996765293437281 + i64.store u+16($pop7), $pop6 + i32.const $push5=, 0 + i64.const $push4=, 7016996765293437281 + i64.store u+8($pop5), $pop4 + i32.const $push3=, 0 + i64.const $push2=, 7016996765293437281 + i64.store u($pop3), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size reset, .Lfunc_end0-reset + # -- End function + .section .text.check,"ax",@progbits + .hidden check # -- Begin function check + .globl check + .type check,@function +check: # @check + .param i32, i32, i32 + .local i32 +# BB#0: # %entry + block + block + block + block + i32.const $push28=, 1 + i32.lt_s $push0=, $0, $pop28 + br_if 0, $pop0 # 0: down to label3 +# BB#1: # %for.body.preheader + i32.const $3=, 0 +.LBB1_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label4: + i32.const $push30=, u + i32.add $push1=, $3, $pop30 + i32.load8_u $push2=, 0($pop1) + i32.const $push29=, 97 + i32.ne $push3=, $pop2, $pop29 + br_if 4, $pop3 # 4: down to label0 +# BB#3: # %for.inc + # in Loop: Header=BB1_2 Depth=1 + i32.const $push33=, 1 + i32.add $push32=, $3, $pop33 + tee_local $push31=, $3=, $pop32 + i32.lt_s $push4=, $pop31, $0 + br_if 0, $pop4 # 0: up to label4 +# BB#4: # %for.end.loopexit + end_loop + i32.const $push5=, u + i32.add $0=, $3, $pop5 + i32.const $push34=, 1 + i32.ge_s $push7=, $1, $pop34 + br_if 1, $pop7 # 1: down to label2 + br 2 # 2: down to label1 +.LBB1_5: + end_block # label3: + i32.const $0=, u + i32.const $push35=, 1 + i32.lt_s $push6=, $1, $pop35 + br_if 1, $pop6 # 1: down to label1 +.LBB1_6: # %for.body6.preheader + end_block # label2: + i32.const $3=, 0 +.LBB1_7: # %for.body6 + # =>This Inner Loop Header: Depth=1 + loop # label5: + i32.add $push8=, $0, $3 + i32.load8_s $push9=, 0($pop8) + i32.ne $push10=, $pop9, $2 + br_if 2, $pop10 # 2: down to label0 +# BB#8: # %for.inc12 + # in Loop: Header=BB1_7 Depth=1 + i32.const $push38=, 1 + i32.add $push37=, $3, $pop38 + tee_local $push36=, $3=, $pop37 + i32.lt_s $push11=, $pop36, $1 + br_if 0, $pop11 # 0: up to label5 +# BB#9: # %for.end15.loopexit + end_loop + i32.add $0=, $0, $3 +.LBB1_10: # %for.end15 + end_block # label1: + i32.load8_u $push12=, 0($0) + i32.const $push39=, 97 + i32.ne $push13=, $pop12, $pop39 + br_if 0, $pop13 # 0: down to label0 +# BB#11: # %for.inc25 + i32.load8_u $push14=, 1($0) + i32.const $push40=, 97 + i32.ne $push15=, $pop14, $pop40 + br_if 0, $pop15 # 0: down to label0 +# BB#12: # %for.inc25.1 + i32.load8_u $push16=, 2($0) + i32.const $push41=, 97 + i32.ne $push17=, $pop16, $pop41 + br_if 0, $pop17 # 0: down to label0 +# BB#13: # %for.inc25.2 + i32.load8_u $push18=, 3($0) + i32.const $push42=, 97 + i32.ne $push19=, $pop18, $pop42 + br_if 0, $pop19 # 0: down to label0 +# BB#14: # %for.inc25.3 + i32.load8_u $push20=, 4($0) + i32.const $push43=, 97 + i32.ne $push21=, $pop20, $pop43 + br_if 0, $pop21 # 0: down to label0 +# BB#15: # %for.inc25.4 + i32.load8_u $push22=, 5($0) + i32.const $push44=, 97 + i32.ne $push23=, $pop22, $pop44 + br_if 0, $pop23 # 0: down to label0 +# BB#16: # %for.inc25.5 + i32.load8_u $push24=, 6($0) + i32.const $push45=, 97 + i32.ne $push25=, $pop24, $pop45 + br_if 0, $pop25 # 0: down to label0 +# BB#17: # %for.inc25.6 + i32.load8_u $push26=, 7($0) + i32.const $push46=, 97 + i32.ne $push27=, $pop26, $pop46 + br_if 0, $pop27 # 0: down to label0 +# BB#18: # %for.inc25.7 + return +.LBB1_19: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size check, .Lfunc_end1-check + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i64, i32 +# BB#0: # %entry + i32.const $5=, 0 +.LBB2_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label6: + i32.const $push67=, 0 + i64.const $push66=, 7016996765293437281 + i64.store u+23($pop67):p2align=0, $pop66 + i32.const $push65=, 0 + i64.const $push64=, 7016996765293437281 + i64.store u+16($pop65), $pop64 + i32.const $push63=, 0 + i64.const $push62=, 7016996765293437281 + i64.store u+8($pop63), $pop62 + i32.const $push61=, 0 + i64.const $push60=, 7016996765293437281 + i64.store u($pop61), $pop60 + i32.const $push59=, u + i32.add $push58=, $5, $pop59 + tee_local $push57=, $2=, $pop58 + i32.const $push56=, 0 + i32.store8 0($pop57), $pop56 + i32.const $push55=, 1 + i32.const $push54=, 0 + call check@FUNCTION, $5, $pop55, $pop54 + i32.const $push53=, 0 + i32.load8_u $push0=, A($pop53) + i32.store8 0($2), $pop0 + i32.const $push52=, 1 + i32.const $push51=, 65 + call check@FUNCTION, $5, $pop52, $pop51 + i32.const $push50=, 66 + i32.store8 0($2), $pop50 + i32.const $push49=, 1 + i32.const $push48=, 66 + call check@FUNCTION, $5, $pop49, $pop48 + i32.const $push47=, 1 + i32.add $push46=, $5, $pop47 + tee_local $push45=, $5=, $pop46 + i32.const $push44=, 8 + i32.ne $push1=, $pop45, $pop44 + br_if 0, $pop1 # 0: up to label6 +# BB#2: # %for.body18.preheader + end_loop + i32.const $5=, 0 +.LBB2_3: # %for.body18 + # =>This Inner Loop Header: Depth=1 + loop # label7: + i32.const $push92=, 0 + i64.const $push91=, 7016996765293437281 + i64.store u+23($pop92):p2align=0, $pop91 + i32.const $push90=, 0 + i64.const $push89=, 7016996765293437281 + i64.store u+16($pop90), $pop89 + i32.const $push88=, 0 + i64.const $push87=, 7016996765293437281 + i64.store u+8($pop88), $pop87 + i32.const $push86=, 0 + i64.const $push85=, 7016996765293437281 + i64.store u($pop86), $pop85 + i32.const $push84=, u + i32.add $push83=, $5, $pop84 + tee_local $push82=, $2=, $pop83 + i32.const $push81=, 0 + i32.store16 0($pop82):p2align=0, $pop81 + i32.const $push80=, 2 + i32.const $push79=, 0 + call check@FUNCTION, $5, $pop80, $pop79 + i32.const $push78=, 0 + i32.load8_u $push2=, A($pop78) + i32.const $push77=, 257 + i32.mul $push3=, $pop2, $pop77 + i32.store16 0($2):p2align=0, $pop3 + i32.const $push76=, 2 + i32.const $push75=, 65 + call check@FUNCTION, $5, $pop76, $pop75 + i32.const $push74=, 16962 + i32.store16 0($2):p2align=0, $pop74 + i32.const $push73=, 2 + i32.const $push72=, 66 + call check@FUNCTION, $5, $pop73, $pop72 + i32.const $push71=, 1 + i32.add $push70=, $5, $pop71 + tee_local $push69=, $5=, $pop70 + i32.const $push68=, 8 + i32.ne $push4=, $pop69, $pop68 + br_if 0, $pop4 # 0: up to label7 +# BB#4: # %for.body44.preheader + end_loop + i32.const $5=, 0 +.LBB2_5: # %for.body44 + # =>This Inner Loop Header: Depth=1 + loop # label8: + i32.const $push124=, 0 + i64.const $push123=, 7016996765293437281 + i64.store u+23($pop124):p2align=0, $pop123 + i32.const $push122=, 0 + i64.const $push121=, 7016996765293437281 + i64.store u+16($pop122), $pop121 + i32.const $push120=, 0 + i64.const $push119=, 7016996765293437281 + i64.store u+8($pop120), $pop119 + i32.const $push118=, 0 + i64.const $push117=, 7016996765293437281 + i64.store u($pop118), $pop117 + i32.const $push116=, u+2 + i32.add $push115=, $5, $pop116 + tee_local $push114=, $2=, $pop115 + i32.const $push113=, 0 + i32.store8 0($pop114), $pop113 + i32.const $push112=, u + i32.add $push111=, $5, $pop112 + tee_local $push110=, $3=, $pop111 + i32.const $push109=, 0 + i32.store16 0($pop110):p2align=0, $pop109 + i32.const $push108=, 3 + i32.const $push107=, 0 + call check@FUNCTION, $5, $pop108, $pop107 + i32.const $push106=, 0 + i32.load8_u $push105=, A($pop106) + tee_local $push104=, $0=, $pop105 + i32.store8 0($2), $pop104 + i32.const $push103=, 257 + i32.mul $push5=, $0, $pop103 + i32.store16 0($3):p2align=0, $pop5 + i32.const $push102=, 3 + i32.const $push101=, 65 + call check@FUNCTION, $5, $pop102, $pop101 + i32.const $push100=, 66 + i32.store8 0($2), $pop100 + i32.const $push99=, 16962 + i32.store16 0($3):p2align=0, $pop99 + i32.const $push98=, 3 + i32.const $push97=, 66 + call check@FUNCTION, $5, $pop98, $pop97 + i32.const $push96=, 1 + i32.add $push95=, $5, $pop96 + tee_local $push94=, $5=, $pop95 + i32.const $push93=, 8 + i32.ne $push6=, $pop94, $pop93 + br_if 0, $pop6 # 0: up to label8 +# BB#6: # %for.body70.preheader + end_loop + i32.const $5=, 0 +.LBB2_7: # %for.body70 + # =>This Inner Loop Header: Depth=1 + loop # label9: + i32.const $push149=, 0 + i64.const $push148=, 7016996765293437281 + i64.store u+23($pop149):p2align=0, $pop148 + i32.const $push147=, 0 + i64.const $push146=, 7016996765293437281 + i64.store u+16($pop147), $pop146 + i32.const $push145=, 0 + i64.const $push144=, 7016996765293437281 + i64.store u+8($pop145), $pop144 + i32.const $push143=, 0 + i64.const $push142=, 7016996765293437281 + i64.store u($pop143), $pop142 + i32.const $push141=, u + i32.add $push140=, $5, $pop141 + tee_local $push139=, $2=, $pop140 + i32.const $push138=, 0 + i32.store 0($pop139):p2align=0, $pop138 + i32.const $push137=, 4 + i32.const $push136=, 0 + call check@FUNCTION, $5, $pop137, $pop136 + i32.const $push135=, 0 + i32.load8_u $push7=, A($pop135) + i32.const $push134=, 16843009 + i32.mul $push8=, $pop7, $pop134 + i32.store 0($2):p2align=0, $pop8 + i32.const $push133=, 4 + i32.const $push132=, 65 + call check@FUNCTION, $5, $pop133, $pop132 + i32.const $push131=, 1111638594 + i32.store 0($2):p2align=0, $pop131 + i32.const $push130=, 4 + i32.const $push129=, 66 + call check@FUNCTION, $5, $pop130, $pop129 + i32.const $push128=, 1 + i32.add $push127=, $5, $pop128 + tee_local $push126=, $5=, $pop127 + i32.const $push125=, 8 + i32.ne $push9=, $pop126, $pop125 + br_if 0, $pop9 # 0: up to label9 +# BB#8: # %for.body96.preheader + end_loop + i32.const $5=, 0 +.LBB2_9: # %for.body96 + # =>This Inner Loop Header: Depth=1 + loop # label10: + i32.const $push181=, 0 + i64.const $push180=, 7016996765293437281 + i64.store u+23($pop181):p2align=0, $pop180 + i32.const $push179=, 0 + i64.const $push178=, 7016996765293437281 + i64.store u+16($pop179), $pop178 + i32.const $push177=, 0 + i64.const $push176=, 7016996765293437281 + i64.store u+8($pop177), $pop176 + i32.const $push175=, 0 + i64.const $push174=, 7016996765293437281 + i64.store u($pop175), $pop174 + i32.const $push173=, u+4 + i32.add $push172=, $5, $pop173 + tee_local $push171=, $2=, $pop172 + i32.const $push170=, 0 + i32.store8 0($pop171), $pop170 + i32.const $push169=, u + i32.add $push168=, $5, $pop169 + tee_local $push167=, $3=, $pop168 + i32.const $push166=, 0 + i32.store 0($pop167):p2align=0, $pop166 + i32.const $push165=, 5 + i32.const $push164=, 0 + call check@FUNCTION, $5, $pop165, $pop164 + i32.const $push163=, 0 + i32.load8_u $push162=, A($pop163) + tee_local $push161=, $0=, $pop162 + i32.store8 0($2), $pop161 + i32.const $push160=, 16843009 + i32.mul $push10=, $0, $pop160 + i32.store 0($3):p2align=0, $pop10 + i32.const $push159=, 5 + i32.const $push158=, 65 + call check@FUNCTION, $5, $pop159, $pop158 + i32.const $push157=, 66 + i32.store8 0($2), $pop157 + i32.const $push156=, 1111638594 + i32.store 0($3):p2align=0, $pop156 + i32.const $push155=, 5 + i32.const $push154=, 66 + call check@FUNCTION, $5, $pop155, $pop154 + i32.const $push153=, 1 + i32.add $push152=, $5, $pop153 + tee_local $push151=, $5=, $pop152 + i32.const $push150=, 8 + i32.ne $push11=, $pop151, $pop150 + br_if 0, $pop11 # 0: up to label10 +# BB#10: # %for.body122.preheader + end_loop + i32.const $5=, 0 +.LBB2_11: # %for.body122 + # =>This Inner Loop Header: Depth=1 + loop # label11: + i32.const $push214=, 0 + i64.const $push213=, 7016996765293437281 + i64.store u+23($pop214):p2align=0, $pop213 + i32.const $push212=, 0 + i64.const $push211=, 7016996765293437281 + i64.store u+16($pop212), $pop211 + i32.const $push210=, 0 + i64.const $push209=, 7016996765293437281 + i64.store u+8($pop210), $pop209 + i32.const $push208=, 0 + i64.const $push207=, 7016996765293437281 + i64.store u($pop208), $pop207 + i32.const $push206=, u+4 + i32.add $push205=, $5, $pop206 + tee_local $push204=, $2=, $pop205 + i32.const $push203=, 0 + i32.store16 0($pop204):p2align=0, $pop203 + i32.const $push202=, u + i32.add $push201=, $5, $pop202 + tee_local $push200=, $3=, $pop201 + i32.const $push199=, 0 + i32.store 0($pop200):p2align=0, $pop199 + i32.const $push198=, 6 + i32.const $push197=, 0 + call check@FUNCTION, $5, $pop198, $pop197 + i32.const $push196=, 0 + i32.load8_u $push195=, A($pop196) + tee_local $push194=, $0=, $pop195 + i32.const $push193=, 257 + i32.mul $push12=, $pop194, $pop193 + i32.store16 0($2):p2align=0, $pop12 + i32.const $push192=, 16843009 + i32.mul $push13=, $0, $pop192 + i32.store 0($3):p2align=0, $pop13 + i32.const $push191=, 6 + i32.const $push190=, 65 + call check@FUNCTION, $5, $pop191, $pop190 + i32.const $push189=, 16962 + i32.store16 0($2):p2align=0, $pop189 + i32.const $push188=, 1111638594 + i32.store 0($3):p2align=0, $pop188 + i32.const $push187=, 6 + i32.const $push186=, 66 + call check@FUNCTION, $5, $pop187, $pop186 + i32.const $push185=, 1 + i32.add $push184=, $5, $pop185 + tee_local $push183=, $5=, $pop184 + i32.const $push182=, 8 + i32.ne $push14=, $pop183, $pop182 + br_if 0, $pop14 # 0: up to label11 +# BB#12: # %for.body148.preheader + end_loop + i32.const $5=, 0 +.LBB2_13: # %for.body148 + # =>This Inner Loop Header: Depth=1 + loop # label12: + i32.const $push252=, 0 + i64.const $push251=, 7016996765293437281 + i64.store u+23($pop252):p2align=0, $pop251 + i32.const $push250=, 0 + i64.const $push249=, 7016996765293437281 + i64.store u+16($pop250), $pop249 + i32.const $push248=, 0 + i64.const $push247=, 7016996765293437281 + i64.store u+8($pop248), $pop247 + i32.const $push246=, 0 + i64.const $push245=, 7016996765293437281 + i64.store u($pop246), $pop245 + i32.const $push244=, u+6 + i32.add $push243=, $5, $pop244 + tee_local $push242=, $2=, $pop243 + i32.const $push241=, 0 + i32.store8 0($pop242), $pop241 + i32.const $push240=, u+4 + i32.add $push239=, $5, $pop240 + tee_local $push238=, $3=, $pop239 + i32.const $push237=, 0 + i32.store16 0($pop238):p2align=0, $pop237 + i32.const $push236=, u + i32.add $push235=, $5, $pop236 + tee_local $push234=, $0=, $pop235 + i32.const $push233=, 0 + i32.store 0($pop234):p2align=0, $pop233 + i32.const $push232=, 7 + i32.const $push231=, 0 + call check@FUNCTION, $5, $pop232, $pop231 + i32.const $push230=, 0 + i32.load8_u $push229=, A($pop230) + tee_local $push228=, $1=, $pop229 + i32.store8 0($2), $pop228 + i32.const $push227=, 257 + i32.mul $push15=, $1, $pop227 + i32.store16 0($3):p2align=0, $pop15 + i32.const $push226=, 16843009 + i32.mul $push16=, $1, $pop226 + i32.store 0($0):p2align=0, $pop16 + i32.const $push225=, 7 + i32.const $push224=, 65 + call check@FUNCTION, $5, $pop225, $pop224 + i32.const $push223=, 66 + i32.store8 0($2), $pop223 + i32.const $push222=, 16962 + i32.store16 0($3):p2align=0, $pop222 + i32.const $push221=, 1111638594 + i32.store 0($0):p2align=0, $pop221 + i32.const $push220=, 7 + i32.const $push219=, 66 + call check@FUNCTION, $5, $pop220, $pop219 + i32.const $push218=, 1 + i32.add $push217=, $5, $pop218 + tee_local $push216=, $5=, $pop217 + i32.const $push215=, 8 + i32.ne $push17=, $pop216, $pop215 + br_if 0, $pop17 # 0: up to label12 +# BB#14: # %for.body174.preheader + end_loop + i32.const $5=, 0 +.LBB2_15: # %for.body174 + # =>This Inner Loop Header: Depth=1 + loop # label13: + i32.const $push277=, 0 + i64.const $push276=, 7016996765293437281 + i64.store u+23($pop277):p2align=0, $pop276 + i32.const $push275=, 0 + i64.const $push274=, 7016996765293437281 + i64.store u+16($pop275), $pop274 + i32.const $push273=, 0 + i64.const $push272=, 7016996765293437281 + i64.store u+8($pop273), $pop272 + i32.const $push271=, 0 + i64.const $push270=, 7016996765293437281 + i64.store u($pop271), $pop270 + i32.const $push269=, u + i32.add $push268=, $5, $pop269 + tee_local $push267=, $2=, $pop268 + i64.const $push266=, 0 + i64.store 0($pop267):p2align=0, $pop266 + i32.const $push265=, 8 + i32.const $push264=, 0 + call check@FUNCTION, $5, $pop265, $pop264 + i32.const $push263=, 0 + i64.load8_u $push18=, A($pop263) + i64.const $push262=, 72340172838076673 + i64.mul $push19=, $pop18, $pop262 + i64.store 0($2):p2align=0, $pop19 + i32.const $push261=, 8 + i32.const $push260=, 65 + call check@FUNCTION, $5, $pop261, $pop260 + i64.const $push259=, 4774451407313060418 + i64.store 0($2):p2align=0, $pop259 + i32.const $push258=, 8 + i32.const $push257=, 66 + call check@FUNCTION, $5, $pop258, $pop257 + i32.const $push256=, 1 + i32.add $push255=, $5, $pop256 + tee_local $push254=, $5=, $pop255 + i32.const $push253=, 8 + i32.ne $push20=, $pop254, $pop253 + br_if 0, $pop20 # 0: up to label13 +# BB#16: # %for.body200.preheader + end_loop + i32.const $5=, 0 +.LBB2_17: # %for.body200 + # =>This Inner Loop Header: Depth=1 + loop # label14: + i32.const $push310=, 0 + i64.const $push309=, 7016996765293437281 + i64.store u+23($pop310):p2align=0, $pop309 + i32.const $push308=, 0 + i64.const $push307=, 7016996765293437281 + i64.store u+16($pop308), $pop307 + i32.const $push306=, 0 + i64.const $push305=, 7016996765293437281 + i64.store u+8($pop306), $pop305 + i32.const $push304=, 0 + i64.const $push303=, 7016996765293437281 + i64.store u($pop304), $pop303 + i32.const $push302=, u+8 + i32.add $push301=, $5, $pop302 + tee_local $push300=, $2=, $pop301 + i32.const $push299=, 0 + i32.store8 0($pop300), $pop299 + i32.const $push298=, u + i32.add $push297=, $5, $pop298 + tee_local $push296=, $3=, $pop297 + i64.const $push295=, 0 + i64.store 0($pop296):p2align=0, $pop295 + i32.const $push294=, 9 + i32.const $push293=, 0 + call check@FUNCTION, $5, $pop294, $pop293 + i32.const $push292=, 0 + i32.load8_u $push291=, A($pop292) + tee_local $push290=, $0=, $pop291 + i32.store8 0($2), $pop290 + i64.extend_u/i32 $push21=, $0 + i64.const $push289=, 255 + i64.and $push22=, $pop21, $pop289 + i64.const $push288=, 72340172838076673 + i64.mul $push23=, $pop22, $pop288 + i64.store 0($3):p2align=0, $pop23 + i32.const $push287=, 9 + i32.const $push286=, 65 + call check@FUNCTION, $5, $pop287, $pop286 + i32.const $push285=, 66 + i32.store8 0($2), $pop285 + i64.const $push284=, 4774451407313060418 + i64.store 0($3):p2align=0, $pop284 + i32.const $push283=, 9 + i32.const $push282=, 66 + call check@FUNCTION, $5, $pop283, $pop282 + i32.const $push281=, 1 + i32.add $push280=, $5, $pop281 + tee_local $push279=, $5=, $pop280 + i32.const $push278=, 8 + i32.ne $push24=, $pop279, $pop278 + br_if 0, $pop24 # 0: up to label14 +# BB#18: # %for.body226.preheader + end_loop + i32.const $5=, 0 +.LBB2_19: # %for.body226 + # =>This Inner Loop Header: Depth=1 + loop # label15: + i32.const $push343=, 0 + i64.const $push342=, 7016996765293437281 + i64.store u+23($pop343):p2align=0, $pop342 + i32.const $push341=, 0 + i64.const $push340=, 7016996765293437281 + i64.store u+16($pop341), $pop340 + i32.const $push339=, 0 + i64.const $push338=, 7016996765293437281 + i64.store u+8($pop339), $pop338 + i32.const $push337=, 0 + i64.const $push336=, 7016996765293437281 + i64.store u($pop337), $pop336 + i32.const $push335=, u+8 + i32.add $push334=, $5, $pop335 + tee_local $push333=, $2=, $pop334 + i32.const $push332=, 0 + i32.store16 0($pop333):p2align=0, $pop332 + i32.const $push331=, u + i32.add $push330=, $5, $pop331 + tee_local $push329=, $3=, $pop330 + i64.const $push328=, 0 + i64.store 0($pop329):p2align=0, $pop328 + i32.const $push327=, 10 + i32.const $push326=, 0 + call check@FUNCTION, $5, $pop327, $pop326 + i32.const $push325=, 0 + i32.load8_u $push324=, A($pop325) + tee_local $push323=, $0=, $pop324 + i32.const $push322=, 257 + i32.mul $push25=, $pop323, $pop322 + i32.store16 0($2):p2align=0, $pop25 + i64.extend_u/i32 $push26=, $0 + i64.const $push321=, 72340172838076673 + i64.mul $push27=, $pop26, $pop321 + i64.store 0($3):p2align=0, $pop27 + i32.const $push320=, 10 + i32.const $push319=, 65 + call check@FUNCTION, $5, $pop320, $pop319 + i32.const $push318=, 16962 + i32.store16 0($2):p2align=0, $pop318 + i64.const $push317=, 4774451407313060418 + i64.store 0($3):p2align=0, $pop317 + i32.const $push316=, 10 + i32.const $push315=, 66 + call check@FUNCTION, $5, $pop316, $pop315 + i32.const $push314=, 1 + i32.add $push313=, $5, $pop314 + tee_local $push312=, $5=, $pop313 + i32.const $push311=, 8 + i32.ne $push28=, $pop312, $pop311 + br_if 0, $pop28 # 0: up to label15 +# BB#20: # %for.body252.preheader + end_loop + i32.const $5=, 0 +.LBB2_21: # %for.body252 + # =>This Inner Loop Header: Depth=1 + loop # label16: + i32.const $push381=, 0 + i64.const $push380=, 7016996765293437281 + i64.store u+23($pop381):p2align=0, $pop380 + i32.const $push379=, 0 + i64.const $push378=, 7016996765293437281 + i64.store u+16($pop379), $pop378 + i32.const $push377=, 0 + i64.const $push376=, 7016996765293437281 + i64.store u+8($pop377), $pop376 + i32.const $push375=, 0 + i64.const $push374=, 7016996765293437281 + i64.store u($pop375), $pop374 + i32.const $push373=, u+10 + i32.add $push372=, $5, $pop373 + tee_local $push371=, $2=, $pop372 + i32.const $push370=, 0 + i32.store8 0($pop371), $pop370 + i32.const $push369=, u+8 + i32.add $push368=, $5, $pop369 + tee_local $push367=, $3=, $pop368 + i32.const $push366=, 0 + i32.store16 0($pop367):p2align=0, $pop366 + i32.const $push365=, u + i32.add $push364=, $5, $pop365 + tee_local $push363=, $0=, $pop364 + i64.const $push362=, 0 + i64.store 0($pop363):p2align=0, $pop362 + i32.const $push361=, 11 + i32.const $push360=, 0 + call check@FUNCTION, $5, $pop361, $pop360 + i32.const $push359=, 0 + i32.load8_u $push358=, A($pop359) + tee_local $push357=, $1=, $pop358 + i32.store8 0($2), $pop357 + i32.const $push356=, 257 + i32.mul $push29=, $1, $pop356 + i32.store16 0($3):p2align=0, $pop29 + i64.extend_u/i32 $push30=, $1 + i64.const $push355=, 72340172838076673 + i64.mul $push31=, $pop30, $pop355 + i64.store 0($0):p2align=0, $pop31 + i32.const $push354=, 11 + i32.const $push353=, 65 + call check@FUNCTION, $5, $pop354, $pop353 + i32.const $push352=, 66 + i32.store8 0($2), $pop352 + i32.const $push351=, 16962 + i32.store16 0($3):p2align=0, $pop351 + i64.const $push350=, 4774451407313060418 + i64.store 0($0):p2align=0, $pop350 + i32.const $push349=, 11 + i32.const $push348=, 66 + call check@FUNCTION, $5, $pop349, $pop348 + i32.const $push347=, 1 + i32.add $push346=, $5, $pop347 + tee_local $push345=, $5=, $pop346 + i32.const $push344=, 8 + i32.ne $push32=, $pop345, $pop344 + br_if 0, $pop32 # 0: up to label16 +# BB#22: # %for.body278.preheader + end_loop + i32.const $5=, 0 +.LBB2_23: # %for.body278 + # =>This Inner Loop Header: Depth=1 + loop # label17: + i32.const $push414=, 0 + i64.const $push413=, 7016996765293437281 + i64.store u+23($pop414):p2align=0, $pop413 + i32.const $push412=, 0 + i64.const $push411=, 7016996765293437281 + i64.store u+16($pop412), $pop411 + i32.const $push410=, 0 + i64.const $push409=, 7016996765293437281 + i64.store u+8($pop410), $pop409 + i32.const $push408=, 0 + i64.const $push407=, 7016996765293437281 + i64.store u($pop408), $pop407 + i32.const $push406=, u+8 + i32.add $push405=, $5, $pop406 + tee_local $push404=, $2=, $pop405 + i32.const $push403=, 0 + i32.store 0($pop404):p2align=0, $pop403 + i32.const $push402=, u + i32.add $push401=, $5, $pop402 + tee_local $push400=, $3=, $pop401 + i64.const $push399=, 0 + i64.store 0($pop400):p2align=0, $pop399 + i32.const $push398=, 12 + i32.const $push397=, 0 + call check@FUNCTION, $5, $pop398, $pop397 + i32.const $push396=, 0 + i32.load8_u $push395=, A($pop396) + tee_local $push394=, $0=, $pop395 + i32.const $push393=, 16843009 + i32.mul $push33=, $pop394, $pop393 + i32.store 0($2):p2align=0, $pop33 + i64.extend_u/i32 $push34=, $0 + i64.const $push392=, 72340172838076673 + i64.mul $push35=, $pop34, $pop392 + i64.store 0($3):p2align=0, $pop35 + i32.const $push391=, 12 + i32.const $push390=, 65 + call check@FUNCTION, $5, $pop391, $pop390 + i32.const $push389=, 1111638594 + i32.store 0($2):p2align=0, $pop389 + i64.const $push388=, 4774451407313060418 + i64.store 0($3):p2align=0, $pop388 + i32.const $push387=, 12 + i32.const $push386=, 66 + call check@FUNCTION, $5, $pop387, $pop386 + i32.const $push385=, 1 + i32.add $push384=, $5, $pop385 + tee_local $push383=, $5=, $pop384 + i32.const $push382=, 8 + i32.ne $push36=, $pop383, $pop382 + br_if 0, $pop36 # 0: up to label17 +# BB#24: # %for.body304.preheader + end_loop + i32.const $5=, 0 +.LBB2_25: # %for.body304 + # =>This Inner Loop Header: Depth=1 + loop # label18: + i32.const $push446=, 0 + i64.const $push445=, 7016996765293437281 + i64.store u+23($pop446):p2align=0, $pop445 + i32.const $push444=, 0 + i64.const $push443=, 7016996765293437281 + i64.store u+16($pop444), $pop443 + i32.const $push442=, 0 + i64.const $push441=, 7016996765293437281 + i64.store u+8($pop442), $pop441 + i32.const $push440=, 0 + i64.const $push439=, 7016996765293437281 + i64.store u($pop440), $pop439 + i32.const $push438=, u+5 + i32.add $push437=, $5, $pop438 + tee_local $push436=, $2=, $pop437 + i64.const $push435=, 0 + i64.store 0($pop436):p2align=0, $pop435 + i32.const $push434=, u + i32.add $push433=, $5, $pop434 + tee_local $push432=, $3=, $pop433 + i64.const $push431=, 0 + i64.store 0($pop432):p2align=0, $pop431 + i32.const $push430=, 13 + i32.const $push429=, 0 + call check@FUNCTION, $5, $pop430, $pop429 + i32.const $push428=, 0 + i64.load8_u $push37=, A($pop428) + i64.const $push427=, 72340172838076673 + i64.mul $push426=, $pop37, $pop427 + tee_local $push425=, $4=, $pop426 + i64.store 0($2):p2align=0, $pop425 + i64.store 0($3):p2align=0, $4 + i32.const $push424=, 13 + i32.const $push423=, 65 + call check@FUNCTION, $5, $pop424, $pop423 + i64.const $push422=, 4774451407313060418 + i64.store 0($2):p2align=0, $pop422 + i64.const $push421=, 4774451407313060418 + i64.store 0($3):p2align=0, $pop421 + i32.const $push420=, 13 + i32.const $push419=, 66 + call check@FUNCTION, $5, $pop420, $pop419 + i32.const $push418=, 1 + i32.add $push417=, $5, $pop418 + tee_local $push416=, $5=, $pop417 + i32.const $push415=, 8 + i32.ne $push38=, $pop416, $pop415 + br_if 0, $pop38 # 0: up to label18 +# BB#26: # %for.body330.preheader + end_loop + i32.const $5=, 0 +.LBB2_27: # %for.body330 + # =>This Inner Loop Header: Depth=1 + loop # label19: + i32.const $push478=, 0 + i64.const $push477=, 7016996765293437281 + i64.store u+23($pop478):p2align=0, $pop477 + i32.const $push476=, 0 + i64.const $push475=, 7016996765293437281 + i64.store u+16($pop476), $pop475 + i32.const $push474=, 0 + i64.const $push473=, 7016996765293437281 + i64.store u+8($pop474), $pop473 + i32.const $push472=, 0 + i64.const $push471=, 7016996765293437281 + i64.store u($pop472), $pop471 + i32.const $push470=, u+6 + i32.add $push469=, $5, $pop470 + tee_local $push468=, $2=, $pop469 + i64.const $push467=, 0 + i64.store 0($pop468):p2align=0, $pop467 + i32.const $push466=, u + i32.add $push465=, $5, $pop466 + tee_local $push464=, $3=, $pop465 + i64.const $push463=, 0 + i64.store 0($pop464):p2align=0, $pop463 + i32.const $push462=, 14 + i32.const $push461=, 0 + call check@FUNCTION, $5, $pop462, $pop461 + i32.const $push460=, 0 + i64.load8_u $push39=, A($pop460) + i64.const $push459=, 72340172838076673 + i64.mul $push458=, $pop39, $pop459 + tee_local $push457=, $4=, $pop458 + i64.store 0($2):p2align=0, $pop457 + i64.store 0($3):p2align=0, $4 + i32.const $push456=, 14 + i32.const $push455=, 65 + call check@FUNCTION, $5, $pop456, $pop455 + i64.const $push454=, 4774451407313060418 + i64.store 0($2):p2align=0, $pop454 + i64.const $push453=, 4774451407313060418 + i64.store 0($3):p2align=0, $pop453 + i32.const $push452=, 14 + i32.const $push451=, 66 + call check@FUNCTION, $5, $pop452, $pop451 + i32.const $push450=, 1 + i32.add $push449=, $5, $pop450 + tee_local $push448=, $5=, $pop449 + i32.const $push447=, 8 + i32.ne $push40=, $pop448, $pop447 + br_if 0, $pop40 # 0: up to label19 +# BB#28: # %for.body356.preheader + end_loop + i32.const $5=, 0 +.LBB2_29: # %for.body356 + # =>This Inner Loop Header: Depth=1 + loop # label20: + i32.const $push510=, 0 + i64.const $push509=, 7016996765293437281 + i64.store u+23($pop510):p2align=0, $pop509 + i32.const $push508=, 0 + i64.const $push507=, 7016996765293437281 + i64.store u+16($pop508), $pop507 + i32.const $push506=, 0 + i64.const $push505=, 7016996765293437281 + i64.store u+8($pop506), $pop505 + i32.const $push504=, 0 + i64.const $push503=, 7016996765293437281 + i64.store u($pop504), $pop503 + i32.const $push502=, u+7 + i32.add $push501=, $5, $pop502 + tee_local $push500=, $2=, $pop501 + i64.const $push499=, 0 + i64.store 0($pop500):p2align=0, $pop499 + i32.const $push498=, u + i32.add $push497=, $5, $pop498 + tee_local $push496=, $3=, $pop497 + i64.const $push495=, 0 + i64.store 0($pop496):p2align=0, $pop495 + i32.const $push494=, 15 + i32.const $push493=, 0 + call check@FUNCTION, $5, $pop494, $pop493 + i32.const $push492=, 0 + i64.load8_u $push41=, A($pop492) + i64.const $push491=, 72340172838076673 + i64.mul $push490=, $pop41, $pop491 + tee_local $push489=, $4=, $pop490 + i64.store 0($2):p2align=0, $pop489 + i64.store 0($3):p2align=0, $4 + i32.const $push488=, 15 + i32.const $push487=, 65 + call check@FUNCTION, $5, $pop488, $pop487 + i64.const $push486=, 4774451407313060418 + i64.store 0($2):p2align=0, $pop486 + i64.const $push485=, 4774451407313060418 + i64.store 0($3):p2align=0, $pop485 + i32.const $push484=, 15 + i32.const $push483=, 66 + call check@FUNCTION, $5, $pop484, $pop483 + i32.const $push482=, 1 + i32.add $push481=, $5, $pop482 + tee_local $push480=, $5=, $pop481 + i32.const $push479=, 8 + i32.ne $push42=, $pop480, $pop479 + br_if 0, $pop42 # 0: up to label20 +# BB#30: # %for.end378 + end_loop + i32.const $push43=, 0 + call exit@FUNCTION, $pop43 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden A # @A + .type A,@object + .section .data.A,"aw",@progbits + .globl A +A: + .int8 65 # 0x41 + .size A, 1 + + .type u,@object # @u + .section .bss.u,"aw",@nobits + .p2align 4 +u: + .skip 32 + .size u, 32 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/memset-3.c.s b/src/binaryen/test/torture-s/memset-3.c.s new file mode 100644 index 0000000000..57e8166af2 --- /dev/null +++ b/src/binaryen/test/torture-s/memset-3.c.s @@ -0,0 +1,738 @@ + .text + .file "memset-3.c" + .section .text.reset,"ax",@progbits + .hidden reset # -- Begin function reset + .globl reset + .type reset,@function +reset: # @reset +# BB#0: # %entry + i32.const $push1=, 0 + i64.const $push0=, 7016996765293437281 + i64.store u+23($pop1):p2align=0, $pop0 + i32.const $push7=, 0 + i64.const $push6=, 7016996765293437281 + i64.store u+16($pop7), $pop6 + i32.const $push5=, 0 + i64.const $push4=, 7016996765293437281 + i64.store u+8($pop5), $pop4 + i32.const $push3=, 0 + i64.const $push2=, 7016996765293437281 + i64.store u($pop3), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size reset, .Lfunc_end0-reset + # -- End function + .section .text.check,"ax",@progbits + .hidden check # -- Begin function check + .globl check + .type check,@function +check: # @check + .param i32, i32, i32 + .local i32 +# BB#0: # %entry + block + block + block + block + i32.const $push28=, 1 + i32.lt_s $push0=, $0, $pop28 + br_if 0, $pop0 # 0: down to label3 +# BB#1: # %for.body.preheader + i32.const $3=, 0 +.LBB1_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label4: + i32.const $push30=, u + i32.add $push1=, $3, $pop30 + i32.load8_u $push2=, 0($pop1) + i32.const $push29=, 97 + i32.ne $push3=, $pop2, $pop29 + br_if 4, $pop3 # 4: down to label0 +# BB#3: # %for.inc + # in Loop: Header=BB1_2 Depth=1 + i32.const $push33=, 1 + i32.add $push32=, $3, $pop33 + tee_local $push31=, $3=, $pop32 + i32.lt_s $push4=, $pop31, $0 + br_if 0, $pop4 # 0: up to label4 +# BB#4: # %for.end.loopexit + end_loop + i32.const $push5=, u + i32.add $0=, $3, $pop5 + i32.const $push34=, 1 + i32.ge_s $push7=, $1, $pop34 + br_if 1, $pop7 # 1: down to label2 + br 2 # 2: down to label1 +.LBB1_5: + end_block # label3: + i32.const $0=, u + i32.const $push35=, 1 + i32.lt_s $push6=, $1, $pop35 + br_if 1, $pop6 # 1: down to label1 +.LBB1_6: # %for.body6.preheader + end_block # label2: + i32.const $3=, 0 +.LBB1_7: # %for.body6 + # =>This Inner Loop Header: Depth=1 + loop # label5: + i32.add $push8=, $0, $3 + i32.load8_s $push9=, 0($pop8) + i32.ne $push10=, $pop9, $2 + br_if 2, $pop10 # 2: down to label0 +# BB#8: # %for.inc12 + # in Loop: Header=BB1_7 Depth=1 + i32.const $push38=, 1 + i32.add $push37=, $3, $pop38 + tee_local $push36=, $3=, $pop37 + i32.lt_s $push11=, $pop36, $1 + br_if 0, $pop11 # 0: up to label5 +# BB#9: # %for.end15.loopexit + end_loop + i32.add $0=, $0, $3 +.LBB1_10: # %for.end15 + end_block # label1: + i32.load8_u $push12=, 0($0) + i32.const $push39=, 97 + i32.ne $push13=, $pop12, $pop39 + br_if 0, $pop13 # 0: down to label0 +# BB#11: # %for.inc25 + i32.load8_u $push14=, 1($0) + i32.const $push40=, 97 + i32.ne $push15=, $pop14, $pop40 + br_if 0, $pop15 # 0: down to label0 +# BB#12: # %for.inc25.1 + i32.load8_u $push16=, 2($0) + i32.const $push41=, 97 + i32.ne $push17=, $pop16, $pop41 + br_if 0, $pop17 # 0: down to label0 +# BB#13: # %for.inc25.2 + i32.load8_u $push18=, 3($0) + i32.const $push42=, 97 + i32.ne $push19=, $pop18, $pop42 + br_if 0, $pop19 # 0: down to label0 +# BB#14: # %for.inc25.3 + i32.load8_u $push20=, 4($0) + i32.const $push43=, 97 + i32.ne $push21=, $pop20, $pop43 + br_if 0, $pop21 # 0: down to label0 +# BB#15: # %for.inc25.4 + i32.load8_u $push22=, 5($0) + i32.const $push44=, 97 + i32.ne $push23=, $pop22, $pop44 + br_if 0, $pop23 # 0: down to label0 +# BB#16: # %for.inc25.5 + i32.load8_u $push24=, 6($0) + i32.const $push45=, 97 + i32.ne $push25=, $pop24, $pop45 + br_if 0, $pop25 # 0: down to label0 +# BB#17: # %for.inc25.6 + i32.load8_u $push26=, 7($0) + i32.const $push46=, 97 + i32.ne $push27=, $pop26, $pop46 + br_if 0, $pop27 # 0: down to label0 +# BB#18: # %for.inc25.7 + return +.LBB1_19: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size check, .Lfunc_end1-check + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $2=, 0 +.LBB2_1: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB2_3 Depth 2 + # Child Loop BB2_16 Depth 2 + # Child Loop BB2_29 Depth 2 + block + loop # label7: + i32.const $push85=, 0 + i64.const $push84=, 7016996765293437281 + i64.store u+23($pop85):p2align=0, $pop84 + i32.const $push83=, 0 + i64.const $push82=, 7016996765293437281 + i64.store u+16($pop83), $pop82 + i32.const $push81=, 0 + i64.const $push80=, 7016996765293437281 + i64.store u+8($pop81), $pop80 + i32.const $push79=, 0 + i64.const $push78=, 7016996765293437281 + i64.store u($pop79), $pop78 + i32.const $push77=, u + i32.const $push76=, 0 + i32.call $0=, memset@FUNCTION, $pop77, $pop76, $2 + i32.const $1=, u + block + i32.eqz $push281=, $2 + br_if 0, $pop281 # 0: down to label8 +# BB#2: # %for.body6.i.preheader + # in Loop: Header=BB2_1 Depth=1 + i32.const $1=, 0 +.LBB2_3: # %for.body6.i + # Parent Loop BB2_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label9: + i32.add $push1=, $1, $0 + i32.load8_u $push2=, 0($pop1) + br_if 3, $pop2 # 3: down to label6 +# BB#4: # %for.inc12.i + # in Loop: Header=BB2_3 Depth=2 + i32.const $push88=, 1 + i32.add $push87=, $1, $pop88 + tee_local $push86=, $1=, $pop87 + i32.lt_u $push3=, $pop86, $2 + br_if 0, $pop3 # 0: up to label9 +# BB#5: # %for.end15.i.loopexit + # in Loop: Header=BB2_1 Depth=1 + end_loop + i32.add $1=, $1, $0 +.LBB2_6: # %for.end15.i + # in Loop: Header=BB2_1 Depth=1 + end_block # label8: + i32.load8_u $push4=, 0($1) + i32.const $push89=, 97 + i32.ne $push5=, $pop4, $pop89 + br_if 1, $pop5 # 1: down to label6 +# BB#7: # %for.inc25.i + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push6=, 1($1) + i32.const $push90=, 97 + i32.ne $push7=, $pop6, $pop90 + br_if 1, $pop7 # 1: down to label6 +# BB#8: # %for.inc25.1.i + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push8=, 2($1) + i32.const $push91=, 97 + i32.ne $push9=, $pop8, $pop91 + br_if 1, $pop9 # 1: down to label6 +# BB#9: # %for.inc25.2.i + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push10=, 3($1) + i32.const $push92=, 97 + i32.ne $push11=, $pop10, $pop92 + br_if 1, $pop11 # 1: down to label6 +# BB#10: # %for.inc25.3.i + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push12=, 4($1) + i32.const $push93=, 97 + i32.ne $push13=, $pop12, $pop93 + br_if 1, $pop13 # 1: down to label6 +# BB#11: # %for.inc25.4.i + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push14=, 5($1) + i32.const $push94=, 97 + i32.ne $push15=, $pop14, $pop94 + br_if 1, $pop15 # 1: down to label6 +# BB#12: # %for.inc25.5.i + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push16=, 6($1) + i32.const $push95=, 97 + i32.ne $push17=, $pop16, $pop95 + br_if 1, $pop17 # 1: down to label6 +# BB#13: # %for.inc25.6.i + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push18=, 7($1) + i32.const $push96=, 97 + i32.ne $push19=, $pop18, $pop96 + br_if 1, $pop19 # 1: down to label6 +# BB#14: # %check.exit + # in Loop: Header=BB2_1 Depth=1 + i32.const $1=, u + i32.const $push98=, u + i32.const $push97=, 0 + i32.load8_u $push20=, A($pop97) + i32.call $drop=, memset@FUNCTION, $pop98, $pop20, $2 + block + i32.eqz $push282=, $2 + br_if 0, $pop282 # 0: down to label10 +# BB#15: # %for.body6.i242.preheader + # in Loop: Header=BB2_1 Depth=1 + i32.const $1=, 0 +.LBB2_16: # %for.body6.i242 + # Parent Loop BB2_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label11: + i32.add $push21=, $1, $0 + i32.load8_u $push22=, 0($pop21) + i32.const $push99=, 65 + i32.ne $push23=, $pop22, $pop99 + br_if 3, $pop23 # 3: down to label6 +# BB#17: # %for.inc12.i247 + # in Loop: Header=BB2_16 Depth=2 + i32.const $push102=, 1 + i32.add $push101=, $1, $pop102 + tee_local $push100=, $1=, $pop101 + i32.lt_u $push24=, $pop100, $2 + br_if 0, $pop24 # 0: up to label11 +# BB#18: # %for.end15.i250.loopexit + # in Loop: Header=BB2_1 Depth=1 + end_loop + i32.add $1=, $1, $0 +.LBB2_19: # %for.end15.i250 + # in Loop: Header=BB2_1 Depth=1 + end_block # label10: + i32.load8_u $push25=, 0($1) + i32.const $push103=, 97 + i32.ne $push26=, $pop25, $pop103 + br_if 1, $pop26 # 1: down to label6 +# BB#20: # %for.inc25.i254 + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push27=, 1($1) + i32.const $push104=, 97 + i32.ne $push28=, $pop27, $pop104 + br_if 1, $pop28 # 1: down to label6 +# BB#21: # %for.inc25.1.i257 + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push29=, 2($1) + i32.const $push105=, 97 + i32.ne $push30=, $pop29, $pop105 + br_if 1, $pop30 # 1: down to label6 +# BB#22: # %for.inc25.2.i260 + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push31=, 3($1) + i32.const $push106=, 97 + i32.ne $push32=, $pop31, $pop106 + br_if 1, $pop32 # 1: down to label6 +# BB#23: # %for.inc25.3.i263 + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push33=, 4($1) + i32.const $push107=, 97 + i32.ne $push34=, $pop33, $pop107 + br_if 1, $pop34 # 1: down to label6 +# BB#24: # %for.inc25.4.i266 + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push35=, 5($1) + i32.const $push108=, 97 + i32.ne $push36=, $pop35, $pop108 + br_if 1, $pop36 # 1: down to label6 +# BB#25: # %for.inc25.5.i269 + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push37=, 6($1) + i32.const $push109=, 97 + i32.ne $push38=, $pop37, $pop109 + br_if 1, $pop38 # 1: down to label6 +# BB#26: # %for.inc25.6.i272 + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push39=, 7($1) + i32.const $push110=, 97 + i32.ne $push40=, $pop39, $pop110 + br_if 1, $pop40 # 1: down to label6 +# BB#27: # %check.exit273 + # in Loop: Header=BB2_1 Depth=1 + i32.const $1=, u + i32.const $push112=, u + i32.const $push111=, 66 + i32.call $drop=, memset@FUNCTION, $pop112, $pop111, $2 + block + i32.eqz $push283=, $2 + br_if 0, $pop283 # 0: down to label12 +# BB#28: # %for.body6.i280.preheader + # in Loop: Header=BB2_1 Depth=1 + i32.const $1=, 0 +.LBB2_29: # %for.body6.i280 + # Parent Loop BB2_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label13: + i32.add $push41=, $1, $0 + i32.load8_u $push42=, 0($pop41) + i32.const $push113=, 66 + i32.ne $push43=, $pop42, $pop113 + br_if 3, $pop43 # 3: down to label6 +# BB#30: # %for.inc12.i285 + # in Loop: Header=BB2_29 Depth=2 + i32.const $push116=, 1 + i32.add $push115=, $1, $pop116 + tee_local $push114=, $1=, $pop115 + i32.lt_u $push44=, $pop114, $2 + br_if 0, $pop44 # 0: up to label13 +# BB#31: # %for.end15.i288.loopexit + # in Loop: Header=BB2_1 Depth=1 + end_loop + i32.add $1=, $1, $0 +.LBB2_32: # %for.end15.i288 + # in Loop: Header=BB2_1 Depth=1 + end_block # label12: + i32.load8_u $push45=, 0($1) + i32.const $push117=, 97 + i32.ne $push46=, $pop45, $pop117 + br_if 1, $pop46 # 1: down to label6 +# BB#33: # %for.inc25.i292 + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push47=, 1($1) + i32.const $push118=, 97 + i32.ne $push48=, $pop47, $pop118 + br_if 1, $pop48 # 1: down to label6 +# BB#34: # %for.inc25.1.i295 + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push49=, 2($1) + i32.const $push119=, 97 + i32.ne $push50=, $pop49, $pop119 + br_if 1, $pop50 # 1: down to label6 +# BB#35: # %for.inc25.2.i298 + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push51=, 3($1) + i32.const $push120=, 97 + i32.ne $push52=, $pop51, $pop120 + br_if 1, $pop52 # 1: down to label6 +# BB#36: # %for.inc25.3.i301 + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push53=, 4($1) + i32.const $push121=, 97 + i32.ne $push54=, $pop53, $pop121 + br_if 1, $pop54 # 1: down to label6 +# BB#37: # %for.inc25.4.i304 + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push55=, 5($1) + i32.const $push122=, 97 + i32.ne $push56=, $pop55, $pop122 + br_if 1, $pop56 # 1: down to label6 +# BB#38: # %for.inc25.5.i307 + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push57=, 6($1) + i32.const $push123=, 97 + i32.ne $push58=, $pop57, $pop123 + br_if 1, $pop58 # 1: down to label6 +# BB#39: # %for.inc25.6.i310 + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push59=, 7($1) + i32.const $push124=, 97 + i32.ne $push60=, $pop59, $pop124 + br_if 1, $pop60 # 1: down to label6 +# BB#40: # %for.cond + # in Loop: Header=BB2_1 Depth=1 + i32.const $push126=, 14 + i32.lt_u $0=, $2, $pop126 + i32.const $push125=, 1 + i32.add $push0=, $2, $pop125 + copy_local $2=, $pop0 + br_if 0, $0 # 0: up to label7 +# BB#41: # %for.body13.preheader + end_loop + i32.const $2=, 0 +.LBB2_42: # %for.body13 + # =>This Inner Loop Header: Depth=1 + loop # label14: + i32.const $push148=, 0 + i64.const $push147=, 7016996765293437281 + i64.store u+23($pop148):p2align=0, $pop147 + i32.const $push146=, 0 + i64.const $push145=, 7016996765293437281 + i64.store u+16($pop146), $pop145 + i32.const $push144=, 0 + i64.const $push143=, 7016996765293437281 + i64.store u+8($pop144), $pop143 + i32.const $push142=, 0 + i64.const $push141=, 7016996765293437281 + i64.store u($pop142), $pop141 + i32.const $push140=, u+1 + i32.const $push139=, 0 + i32.call $0=, memset@FUNCTION, $pop140, $pop139, $2 + i32.const $push138=, 1 + i32.const $push137=, 0 + call check@FUNCTION, $pop138, $2, $pop137 + i32.const $push136=, 0 + i32.load8_u $push61=, A($pop136) + i32.call $drop=, memset@FUNCTION, $0, $pop61, $2 + i32.const $push135=, 1 + i32.const $push134=, 65 + call check@FUNCTION, $pop135, $2, $pop134 + i32.const $push133=, 66 + i32.call $drop=, memset@FUNCTION, $0, $pop133, $2 + i32.const $push132=, 1 + i32.const $push131=, 66 + call check@FUNCTION, $pop132, $2, $pop131 + i32.const $push130=, 1 + i32.add $push129=, $2, $pop130 + tee_local $push128=, $2=, $pop129 + i32.const $push127=, 15 + i32.ne $push62=, $pop128, $pop127 + br_if 0, $pop62 # 0: up to label14 +# BB#43: # %for.body33.preheader + end_loop + i32.const $2=, 0 +.LBB2_44: # %for.body33 + # =>This Inner Loop Header: Depth=1 + loop # label15: + i32.const $push170=, 0 + i64.const $push169=, 7016996765293437281 + i64.store u+23($pop170):p2align=0, $pop169 + i32.const $push168=, 0 + i64.const $push167=, 7016996765293437281 + i64.store u+16($pop168), $pop167 + i32.const $push166=, 0 + i64.const $push165=, 7016996765293437281 + i64.store u+8($pop166), $pop165 + i32.const $push164=, 0 + i64.const $push163=, 7016996765293437281 + i64.store u($pop164), $pop163 + i32.const $push162=, u+2 + i32.const $push161=, 0 + i32.call $0=, memset@FUNCTION, $pop162, $pop161, $2 + i32.const $push160=, 2 + i32.const $push159=, 0 + call check@FUNCTION, $pop160, $2, $pop159 + i32.const $push158=, 0 + i32.load8_u $push63=, A($pop158) + i32.call $drop=, memset@FUNCTION, $0, $pop63, $2 + i32.const $push157=, 2 + i32.const $push156=, 65 + call check@FUNCTION, $pop157, $2, $pop156 + i32.const $push155=, 66 + i32.call $drop=, memset@FUNCTION, $0, $pop155, $2 + i32.const $push154=, 2 + i32.const $push153=, 66 + call check@FUNCTION, $pop154, $2, $pop153 + i32.const $push152=, 1 + i32.add $push151=, $2, $pop152 + tee_local $push150=, $2=, $pop151 + i32.const $push149=, 15 + i32.ne $push64=, $pop150, $pop149 + br_if 0, $pop64 # 0: up to label15 +# BB#45: # %for.body53.preheader + end_loop + i32.const $2=, 0 +.LBB2_46: # %for.body53 + # =>This Inner Loop Header: Depth=1 + loop # label16: + i32.const $push192=, 0 + i64.const $push191=, 7016996765293437281 + i64.store u+23($pop192):p2align=0, $pop191 + i32.const $push190=, 0 + i64.const $push189=, 7016996765293437281 + i64.store u+16($pop190), $pop189 + i32.const $push188=, 0 + i64.const $push187=, 7016996765293437281 + i64.store u+8($pop188), $pop187 + i32.const $push186=, 0 + i64.const $push185=, 7016996765293437281 + i64.store u($pop186), $pop185 + i32.const $push184=, u+3 + i32.const $push183=, 0 + i32.call $0=, memset@FUNCTION, $pop184, $pop183, $2 + i32.const $push182=, 3 + i32.const $push181=, 0 + call check@FUNCTION, $pop182, $2, $pop181 + i32.const $push180=, 0 + i32.load8_u $push65=, A($pop180) + i32.call $drop=, memset@FUNCTION, $0, $pop65, $2 + i32.const $push179=, 3 + i32.const $push178=, 65 + call check@FUNCTION, $pop179, $2, $pop178 + i32.const $push177=, 66 + i32.call $drop=, memset@FUNCTION, $0, $pop177, $2 + i32.const $push176=, 3 + i32.const $push175=, 66 + call check@FUNCTION, $pop176, $2, $pop175 + i32.const $push174=, 1 + i32.add $push173=, $2, $pop174 + tee_local $push172=, $2=, $pop173 + i32.const $push171=, 15 + i32.ne $push66=, $pop172, $pop171 + br_if 0, $pop66 # 0: up to label16 +# BB#47: # %for.body73.preheader + end_loop + i32.const $2=, 0 +.LBB2_48: # %for.body73 + # =>This Inner Loop Header: Depth=1 + loop # label17: + i32.const $push214=, 0 + i64.const $push213=, 7016996765293437281 + i64.store u+23($pop214):p2align=0, $pop213 + i32.const $push212=, 0 + i64.const $push211=, 7016996765293437281 + i64.store u+16($pop212), $pop211 + i32.const $push210=, 0 + i64.const $push209=, 7016996765293437281 + i64.store u+8($pop210), $pop209 + i32.const $push208=, 0 + i64.const $push207=, 7016996765293437281 + i64.store u($pop208), $pop207 + i32.const $push206=, u+4 + i32.const $push205=, 0 + i32.call $0=, memset@FUNCTION, $pop206, $pop205, $2 + i32.const $push204=, 4 + i32.const $push203=, 0 + call check@FUNCTION, $pop204, $2, $pop203 + i32.const $push202=, 0 + i32.load8_u $push67=, A($pop202) + i32.call $drop=, memset@FUNCTION, $0, $pop67, $2 + i32.const $push201=, 4 + i32.const $push200=, 65 + call check@FUNCTION, $pop201, $2, $pop200 + i32.const $push199=, 66 + i32.call $drop=, memset@FUNCTION, $0, $pop199, $2 + i32.const $push198=, 4 + i32.const $push197=, 66 + call check@FUNCTION, $pop198, $2, $pop197 + i32.const $push196=, 1 + i32.add $push195=, $2, $pop196 + tee_local $push194=, $2=, $pop195 + i32.const $push193=, 15 + i32.ne $push68=, $pop194, $pop193 + br_if 0, $pop68 # 0: up to label17 +# BB#49: # %for.body93.preheader + end_loop + i32.const $2=, 0 +.LBB2_50: # %for.body93 + # =>This Inner Loop Header: Depth=1 + loop # label18: + i32.const $push236=, 0 + i64.const $push235=, 7016996765293437281 + i64.store u+23($pop236):p2align=0, $pop235 + i32.const $push234=, 0 + i64.const $push233=, 7016996765293437281 + i64.store u+16($pop234), $pop233 + i32.const $push232=, 0 + i64.const $push231=, 7016996765293437281 + i64.store u+8($pop232), $pop231 + i32.const $push230=, 0 + i64.const $push229=, 7016996765293437281 + i64.store u($pop230), $pop229 + i32.const $push228=, u+5 + i32.const $push227=, 0 + i32.call $0=, memset@FUNCTION, $pop228, $pop227, $2 + i32.const $push226=, 5 + i32.const $push225=, 0 + call check@FUNCTION, $pop226, $2, $pop225 + i32.const $push224=, 0 + i32.load8_u $push69=, A($pop224) + i32.call $drop=, memset@FUNCTION, $0, $pop69, $2 + i32.const $push223=, 5 + i32.const $push222=, 65 + call check@FUNCTION, $pop223, $2, $pop222 + i32.const $push221=, 66 + i32.call $drop=, memset@FUNCTION, $0, $pop221, $2 + i32.const $push220=, 5 + i32.const $push219=, 66 + call check@FUNCTION, $pop220, $2, $pop219 + i32.const $push218=, 1 + i32.add $push217=, $2, $pop218 + tee_local $push216=, $2=, $pop217 + i32.const $push215=, 15 + i32.ne $push70=, $pop216, $pop215 + br_if 0, $pop70 # 0: up to label18 +# BB#51: # %for.body113.preheader + end_loop + i32.const $2=, 0 +.LBB2_52: # %for.body113 + # =>This Inner Loop Header: Depth=1 + loop # label19: + i32.const $push258=, 0 + i64.const $push257=, 7016996765293437281 + i64.store u+23($pop258):p2align=0, $pop257 + i32.const $push256=, 0 + i64.const $push255=, 7016996765293437281 + i64.store u+16($pop256), $pop255 + i32.const $push254=, 0 + i64.const $push253=, 7016996765293437281 + i64.store u+8($pop254), $pop253 + i32.const $push252=, 0 + i64.const $push251=, 7016996765293437281 + i64.store u($pop252), $pop251 + i32.const $push250=, u+6 + i32.const $push249=, 0 + i32.call $0=, memset@FUNCTION, $pop250, $pop249, $2 + i32.const $push248=, 6 + i32.const $push247=, 0 + call check@FUNCTION, $pop248, $2, $pop247 + i32.const $push246=, 0 + i32.load8_u $push71=, A($pop246) + i32.call $drop=, memset@FUNCTION, $0, $pop71, $2 + i32.const $push245=, 6 + i32.const $push244=, 65 + call check@FUNCTION, $pop245, $2, $pop244 + i32.const $push243=, 66 + i32.call $drop=, memset@FUNCTION, $0, $pop243, $2 + i32.const $push242=, 6 + i32.const $push241=, 66 + call check@FUNCTION, $pop242, $2, $pop241 + i32.const $push240=, 1 + i32.add $push239=, $2, $pop240 + tee_local $push238=, $2=, $pop239 + i32.const $push237=, 15 + i32.ne $push72=, $pop238, $pop237 + br_if 0, $pop72 # 0: up to label19 +# BB#53: # %for.body133.preheader + end_loop + i32.const $2=, 0 +.LBB2_54: # %for.body133 + # =>This Inner Loop Header: Depth=1 + loop # label20: + i32.const $push280=, 0 + i64.const $push279=, 7016996765293437281 + i64.store u+23($pop280):p2align=0, $pop279 + i32.const $push278=, 0 + i64.const $push277=, 7016996765293437281 + i64.store u+16($pop278), $pop277 + i32.const $push276=, 0 + i64.const $push275=, 7016996765293437281 + i64.store u+8($pop276), $pop275 + i32.const $push274=, 0 + i64.const $push273=, 7016996765293437281 + i64.store u($pop274), $pop273 + i32.const $push272=, u+7 + i32.const $push271=, 0 + i32.call $0=, memset@FUNCTION, $pop272, $pop271, $2 + i32.const $push270=, 7 + i32.const $push269=, 0 + call check@FUNCTION, $pop270, $2, $pop269 + i32.const $push268=, 0 + i32.load8_u $push73=, A($pop268) + i32.call $drop=, memset@FUNCTION, $0, $pop73, $2 + i32.const $push267=, 7 + i32.const $push266=, 65 + call check@FUNCTION, $pop267, $2, $pop266 + i32.const $push265=, 66 + i32.call $drop=, memset@FUNCTION, $0, $pop265, $2 + i32.const $push264=, 7 + i32.const $push263=, 66 + call check@FUNCTION, $pop264, $2, $pop263 + i32.const $push262=, 1 + i32.add $push261=, $2, $pop262 + tee_local $push260=, $2=, $pop261 + i32.const $push259=, 15 + i32.ne $push74=, $pop260, $pop259 + br_if 0, $pop74 # 0: up to label20 +# BB#55: # %for.end149 + end_loop + i32.const $push75=, 0 + call exit@FUNCTION, $pop75 + unreachable +.LBB2_56: # %if.then10.i + end_block # label6: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden A # @A + .type A,@object + .section .data.A,"aw",@progbits + .globl A +A: + .int8 65 # 0x41 + .size A, 1 + + .type u,@object # @u + .section .bss.u,"aw",@nobits + .p2align 4 +u: + .skip 32 + .size u, 32 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/mod-1.c.s b/src/binaryen/test/torture-s/mod-1.c.s new file mode 100644 index 0000000000..4af150eedf --- /dev/null +++ b/src/binaryen/test/torture-s/mod-1.c.s @@ -0,0 +1,41 @@ + .text + .file "mod-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.rem_s $push0=, $0, $1 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + return $0 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/mode-dependent-address.c.s b/src/binaryen/test/torture-s/mode-dependent-address.c.s new file mode 100644 index 0000000000..f965ca4eff --- /dev/null +++ b/src/binaryen/test/torture-s/mode-dependent-address.c.s @@ -0,0 +1,324 @@ + .text + .file "mode-dependent-address.c" + .section .text.f883b,"ax",@progbits + .hidden f883b # -- Begin function f883b + .globl f883b + .type f883b,@function +f883b: # @f883b + .param i32, i32, i32, i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $6=, 0 +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.add $push12=, $0, $6 + i64.load $push10=, 0($3) + i32.load16_s $push29=, 0($1) + tee_local $push28=, $5=, $pop29 + i32.const $push27=, 1 + i32.const $push26=, 1 + i32.lt_s $push0=, $5, $pop26 + i32.select $push1=, $pop28, $pop27, $pop0 + i32.load $push2=, 0($2) + i32.const $push25=, 31 + i32.and $push3=, $pop2, $pop25 + i32.shr_s $push4=, $pop1, $pop3 + i32.const $push24=, 1 + i32.xor $push5=, $pop4, $pop24 + i32.const $push23=, 32 + i32.add $push6=, $pop5, $pop23 + i32.const $push22=, 7 + i32.shr_u $push7=, $pop6, $pop22 + i32.const $push21=, 251 + i32.or $push8=, $pop7, $pop21 + i64.extend_u/i32 $push9=, $pop8 + i64.and $push11=, $pop10, $pop9 + i64.store8 0($pop12), $pop11 + i32.const $push20=, 8 + i32.add $3=, $3, $pop20 + i32.const $push19=, 4 + i32.add $2=, $2, $pop19 + i32.const $push18=, 2 + i32.add $1=, $1, $pop18 + i32.const $push17=, 1 + i32.add $push16=, $6, $pop17 + tee_local $push15=, $6=, $pop16 + i32.const $push14=, 96 + i32.ne $push13=, $pop15, $pop14 + br_if 0, $pop13 # 0: up to label0 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f883b, .Lfunc_end0-f883b + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $4=, 0 + i32.const $3=, arg1 + i32.const $2=, arg2 + i32.const $1=, arg3 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push34=, arg4 + i32.add $push0=, $4, $pop34 + i32.store8 0($pop0), $4 + i32.const $push33=, 255 + i32.and $push32=, $4, $pop33 + tee_local $push31=, $0=, $pop32 + i32.store 0($2), $pop31 + i32.store16 0($3), $0 + i64.extend_u/i32 $push1=, $4 + i64.const $push30=, 255 + i64.and $push2=, $pop1, $pop30 + i64.store 0($1), $pop2 + i32.const $push29=, 8 + i32.add $1=, $1, $pop29 + i32.const $push28=, 4 + i32.add $2=, $2, $pop28 + i32.const $push27=, 2 + i32.add $3=, $3, $pop27 + i32.const $push26=, 1 + i32.add $push25=, $4, $pop26 + tee_local $push24=, $4=, $pop25 + i32.const $push23=, 96 + i32.ne $push3=, $pop24, $pop23 + br_if 0, $pop3 # 0: up to label1 +# BB#2: # %for.body.i.preheader + end_loop + i32.const $4=, result + i32.const $3=, arg3 + i32.const $2=, arg2 + i32.const $1=, -192 +.LBB1_3: # %for.body.i + # =>This Inner Loop Header: Depth=1 + loop # label2: + i64.load $push15=, 0($3) + i32.const $push50=, arg1+192 + i32.add $push4=, $1, $pop50 + i32.load16_s $push49=, 0($pop4) + tee_local $push48=, $0=, $pop49 + i32.const $push47=, 1 + i32.const $push46=, 1 + i32.lt_s $push5=, $0, $pop46 + i32.select $push6=, $pop48, $pop47, $pop5 + i32.load $push7=, 0($2) + i32.const $push45=, 31 + i32.and $push8=, $pop7, $pop45 + i32.shr_s $push9=, $pop6, $pop8 + i32.const $push44=, 1 + i32.xor $push10=, $pop9, $pop44 + i32.const $push43=, 32 + i32.add $push11=, $pop10, $pop43 + i32.const $push42=, 7 + i32.shr_u $push12=, $pop11, $pop42 + i32.const $push41=, 251 + i32.or $push13=, $pop12, $pop41 + i64.extend_u/i32 $push14=, $pop13 + i64.and $push16=, $pop15, $pop14 + i64.store8 0($4), $pop16 + i32.const $push40=, 4 + i32.add $2=, $2, $pop40 + i32.const $push39=, 8 + i32.add $3=, $3, $pop39 + i32.const $push38=, 1 + i32.add $4=, $4, $pop38 + i32.const $push37=, 2 + i32.add $push36=, $1, $pop37 + tee_local $push35=, $1=, $pop36 + br_if 0, $pop35 # 0: up to label2 +# BB#4: # %for.body10.preheader + end_loop + i32.const $4=, -1 + i32.const $3=, .Lmain.correct +.LBB1_5: # %for.body10 + # =>This Inner Loop Header: Depth=1 + block + loop # label4: + i32.load $push19=, 0($3) + i32.const $push51=, result+1 + i32.add $push17=, $4, $pop51 + i32.load8_s $push18=, 0($pop17) + i32.ne $push20=, $pop19, $pop18 + br_if 1, $pop20 # 1: down to label3 +# BB#6: # %for.cond7 + # in Loop: Header=BB1_5 Depth=1 + i32.const $push56=, 4 + i32.add $3=, $3, $pop56 + i32.const $push55=, 1 + i32.add $push54=, $4, $pop55 + tee_local $push53=, $4=, $pop54 + i32.const $push52=, 94 + i32.le_u $push21=, $pop53, $pop52 + br_if 0, $pop21 # 0: up to label4 +# BB#7: # %for.end18 + end_loop + i32.const $push22=, 0 + return $pop22 +.LBB1_8: # %if.then + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .Lmain.correct,@object # @main.correct + .section .rodata..Lmain.correct,"a",@progbits + .p2align 4 +.Lmain.correct: + .int32 0 # 0x0 + .int32 1 # 0x1 + .int32 2 # 0x2 + .int32 3 # 0x3 + .int32 0 # 0x0 + .int32 1 # 0x1 + .int32 2 # 0x2 + .int32 3 # 0x3 + .int32 8 # 0x8 + .int32 9 # 0x9 + .int32 10 # 0xa + .int32 11 # 0xb + .int32 8 # 0x8 + .int32 9 # 0x9 + .int32 10 # 0xa + .int32 11 # 0xb + .int32 16 # 0x10 + .int32 17 # 0x11 + .int32 18 # 0x12 + .int32 19 # 0x13 + .int32 16 # 0x10 + .int32 17 # 0x11 + .int32 18 # 0x12 + .int32 19 # 0x13 + .int32 24 # 0x18 + .int32 25 # 0x19 + .int32 26 # 0x1a + .int32 27 # 0x1b + .int32 24 # 0x18 + .int32 25 # 0x19 + .int32 26 # 0x1a + .int32 27 # 0x1b + .int32 32 # 0x20 + .int32 33 # 0x21 + .int32 34 # 0x22 + .int32 35 # 0x23 + .int32 32 # 0x20 + .int32 33 # 0x21 + .int32 34 # 0x22 + .int32 35 # 0x23 + .int32 40 # 0x28 + .int32 41 # 0x29 + .int32 42 # 0x2a + .int32 43 # 0x2b + .int32 40 # 0x28 + .int32 41 # 0x29 + .int32 42 # 0x2a + .int32 43 # 0x2b + .int32 48 # 0x30 + .int32 49 # 0x31 + .int32 50 # 0x32 + .int32 51 # 0x33 + .int32 48 # 0x30 + .int32 49 # 0x31 + .int32 50 # 0x32 + .int32 51 # 0x33 + .int32 56 # 0x38 + .int32 57 # 0x39 + .int32 58 # 0x3a + .int32 59 # 0x3b + .int32 56 # 0x38 + .int32 57 # 0x39 + .int32 58 # 0x3a + .int32 59 # 0x3b + .int32 64 # 0x40 + .int32 65 # 0x41 + .int32 66 # 0x42 + .int32 67 # 0x43 + .int32 64 # 0x40 + .int32 65 # 0x41 + .int32 66 # 0x42 + .int32 67 # 0x43 + .int32 72 # 0x48 + .int32 73 # 0x49 + .int32 74 # 0x4a + .int32 75 # 0x4b + .int32 72 # 0x48 + .int32 73 # 0x49 + .int32 74 # 0x4a + .int32 75 # 0x4b + .int32 80 # 0x50 + .int32 81 # 0x51 + .int32 82 # 0x52 + .int32 83 # 0x53 + .int32 80 # 0x50 + .int32 81 # 0x51 + .int32 82 # 0x52 + .int32 83 # 0x53 + .int32 88 # 0x58 + .int32 89 # 0x59 + .int32 90 # 0x5a + .int32 91 # 0x5b + .int32 88 # 0x58 + .int32 89 # 0x59 + .int32 90 # 0x5a + .int32 91 # 0x5b + .size .Lmain.correct, 384 + + .hidden arg4 # @arg4 + .type arg4,@object + .section .bss.arg4,"aw",@nobits + .globl arg4 + .p2align 4 +arg4: + .skip 96 + .size arg4, 96 + + .hidden arg1 # @arg1 + .type arg1,@object + .section .bss.arg1,"aw",@nobits + .globl arg1 + .p2align 4 +arg1: + .skip 192 + .size arg1, 192 + + .hidden arg2 # @arg2 + .type arg2,@object + .section .bss.arg2,"aw",@nobits + .globl arg2 + .p2align 4 +arg2: + .skip 384 + .size arg2, 384 + + .hidden arg3 # @arg3 + .type arg3,@object + .section .bss.arg3,"aw",@nobits + .globl arg3 + .p2align 4 +arg3: + .skip 768 + .size arg3, 768 + + .hidden result # @result + .type result,@object + .section .bss.result,"aw",@nobits + .globl result + .p2align 4 +result: + .skip 96 + .size result, 96 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/multdi-1.c.s b/src/binaryen/test/torture-s/multdi-1.c.s new file mode 100644 index 0000000000..a4d5970e34 --- /dev/null +++ b/src/binaryen/test/torture-s/multdi-1.c.s @@ -0,0 +1,45 @@ + .text + .file "multdi-1.c" + .section .text.mpy,"ax",@progbits + .hidden mpy # -- Begin function mpy + .globl mpy + .type mpy,@function +mpy: # @mpy + .param i32, i32 + .result i64 +# BB#0: # %entry + i64.extend_s/i32 $push1=, $1 + i64.extend_s/i32 $push0=, $0 + i64.mul $push2=, $pop1, $pop0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size mpy, .Lfunc_end0-mpy + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i64.const $push0=, -1 + i64.store mpy_res($pop1), $pop0 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden mpy_res # @mpy_res + .type mpy_res,@object + .section .bss.mpy_res,"aw",@nobits + .globl mpy_res + .p2align 3 +mpy_res: + .int64 0 # 0x0 + .size mpy_res, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/multi-ix.c.s b/src/binaryen/test/torture-s/multi-ix.c.s new file mode 100644 index 0000000000..a710033322 --- /dev/null +++ b/src/binaryen/test/torture-s/multi-ix.c.s @@ -0,0 +1,1231 @@ + .text + .file "multi-ix.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push193=, 0 + i32.const $push191=, 0 + i32.load $push190=, __stack_pointer($pop191) + i32.const $push192=, 80480 + i32.sub $push666=, $pop190, $pop192 + tee_local $push665=, $41=, $pop666 + i32.store __stack_pointer($pop193), $pop665 + block + i32.const $push0=, 1 + i32.lt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %for.body.lr.ph +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push197=, 320 + i32.add $push198=, $41, $pop197 + i32.const $push820=, 156 + i32.add $push2=, $pop198, $pop820 + i32.const $push199=, 480 + i32.add $push200=, $41, $pop199 + i32.store 0($pop2), $pop200 + i32.const $push201=, 320 + i32.add $push202=, $41, $pop201 + i32.const $push819=, 152 + i32.add $push3=, $pop202, $pop819 + i32.const $push203=, 2480 + i32.add $push204=, $41, $pop203 + i32.store 0($pop3), $pop204 + i32.const $push205=, 320 + i32.add $push206=, $41, $pop205 + i32.const $push818=, 148 + i32.add $push4=, $pop206, $pop818 + i32.const $push207=, 4480 + i32.add $push208=, $41, $pop207 + i32.store 0($pop4), $pop208 + i32.const $push209=, 320 + i32.add $push210=, $41, $pop209 + i32.const $push817=, 144 + i32.add $push5=, $pop210, $pop817 + i32.const $push211=, 6480 + i32.add $push212=, $41, $pop211 + i32.store 0($pop5), $pop212 + i32.const $push213=, 320 + i32.add $push214=, $41, $pop213 + i32.const $push816=, 140 + i32.add $push6=, $pop214, $pop816 + i32.const $push215=, 8480 + i32.add $push216=, $41, $pop215 + i32.store 0($pop6), $pop216 + i32.const $push217=, 320 + i32.add $push218=, $41, $pop217 + i32.const $push815=, 136 + i32.add $push7=, $pop218, $pop815 + i32.const $push219=, 10480 + i32.add $push220=, $41, $pop219 + i32.store 0($pop7), $pop220 + i32.const $push221=, 320 + i32.add $push222=, $41, $pop221 + i32.const $push814=, 132 + i32.add $push8=, $pop222, $pop814 + i32.const $push223=, 12480 + i32.add $push224=, $41, $pop223 + i32.store 0($pop8), $pop224 + i32.const $push225=, 320 + i32.add $push226=, $41, $pop225 + i32.const $push813=, 128 + i32.add $push9=, $pop226, $pop813 + i32.const $push227=, 14480 + i32.add $push228=, $41, $pop227 + i32.store 0($pop9), $pop228 + i32.const $push229=, 320 + i32.add $push230=, $41, $pop229 + i32.const $push812=, 124 + i32.add $push10=, $pop230, $pop812 + i32.const $push231=, 16480 + i32.add $push232=, $41, $pop231 + i32.store 0($pop10), $pop232 + i32.const $push233=, 320 + i32.add $push234=, $41, $pop233 + i32.const $push811=, 120 + i32.add $push11=, $pop234, $pop811 + i32.const $push235=, 18480 + i32.add $push236=, $41, $pop235 + i32.store 0($pop11), $pop236 + i32.const $push237=, 320 + i32.add $push238=, $41, $pop237 + i32.const $push810=, 116 + i32.add $push12=, $pop238, $pop810 + i32.const $push239=, 20480 + i32.add $push240=, $41, $pop239 + i32.store 0($pop12), $pop240 + i32.const $push241=, 320 + i32.add $push242=, $41, $pop241 + i32.const $push809=, 112 + i32.add $push13=, $pop242, $pop809 + i32.const $push243=, 22480 + i32.add $push244=, $41, $pop243 + i32.store 0($pop13), $pop244 + i32.const $push245=, 320 + i32.add $push246=, $41, $pop245 + i32.const $push808=, 108 + i32.add $push14=, $pop246, $pop808 + i32.const $push247=, 24480 + i32.add $push248=, $41, $pop247 + i32.store 0($pop14), $pop248 + i32.const $push249=, 320 + i32.add $push250=, $41, $pop249 + i32.const $push807=, 104 + i32.add $push15=, $pop250, $pop807 + i32.const $push251=, 26480 + i32.add $push252=, $41, $pop251 + i32.store 0($pop15), $pop252 + i32.const $push253=, 320 + i32.add $push254=, $41, $pop253 + i32.const $push806=, 100 + i32.add $push16=, $pop254, $pop806 + i32.const $push255=, 28480 + i32.add $push256=, $41, $pop255 + i32.store 0($pop16), $pop256 + i32.const $push257=, 320 + i32.add $push258=, $41, $pop257 + i32.const $push805=, 96 + i32.add $push17=, $pop258, $pop805 + i32.const $push259=, 30480 + i32.add $push260=, $41, $pop259 + i32.store 0($pop17), $pop260 + i32.const $push261=, 320 + i32.add $push262=, $41, $pop261 + i32.const $push804=, 92 + i32.add $push18=, $pop262, $pop804 + i32.const $push263=, 32480 + i32.add $push264=, $41, $pop263 + i32.store 0($pop18), $pop264 + i32.const $push265=, 320 + i32.add $push266=, $41, $pop265 + i32.const $push803=, 88 + i32.add $push19=, $pop266, $pop803 + i32.const $push267=, 34480 + i32.add $push268=, $41, $pop267 + i32.store 0($pop19), $pop268 + i32.const $push269=, 320 + i32.add $push270=, $41, $pop269 + i32.const $push802=, 84 + i32.add $push20=, $pop270, $pop802 + i32.const $push271=, 36480 + i32.add $push272=, $41, $pop271 + i32.store 0($pop20), $pop272 + i32.const $push273=, 320 + i32.add $push274=, $41, $pop273 + i32.const $push801=, 80 + i32.add $push21=, $pop274, $pop801 + i32.const $push275=, 38480 + i32.add $push276=, $41, $pop275 + i32.store 0($pop21), $pop276 + i32.const $push277=, 320 + i32.add $push278=, $41, $pop277 + i32.const $push800=, 76 + i32.add $push22=, $pop278, $pop800 + i32.const $push279=, 40480 + i32.add $push280=, $41, $pop279 + i32.store 0($pop22), $pop280 + i32.const $push281=, 320 + i32.add $push282=, $41, $pop281 + i32.const $push799=, 72 + i32.add $push23=, $pop282, $pop799 + i32.const $push283=, 42480 + i32.add $push284=, $41, $pop283 + i32.store 0($pop23), $pop284 + i32.const $push285=, 320 + i32.add $push286=, $41, $pop285 + i32.const $push798=, 68 + i32.add $push24=, $pop286, $pop798 + i32.const $push287=, 44480 + i32.add $push288=, $41, $pop287 + i32.store 0($pop24), $pop288 + i32.const $push289=, 320 + i32.add $push290=, $41, $pop289 + i32.const $push797=, 64 + i32.add $push25=, $pop290, $pop797 + i32.const $push291=, 46480 + i32.add $push292=, $41, $pop291 + i32.store 0($pop25), $pop292 + i32.const $push293=, 320 + i32.add $push294=, $41, $pop293 + i32.const $push796=, 60 + i32.add $push26=, $pop294, $pop796 + i32.const $push295=, 48480 + i32.add $push296=, $41, $pop295 + i32.store 0($pop26), $pop296 + i32.const $push297=, 320 + i32.add $push298=, $41, $pop297 + i32.const $push795=, 56 + i32.add $push27=, $pop298, $pop795 + i32.const $push299=, 50480 + i32.add $push300=, $41, $pop299 + i32.store 0($pop27), $pop300 + i32.const $push301=, 320 + i32.add $push302=, $41, $pop301 + i32.const $push794=, 52 + i32.add $push28=, $pop302, $pop794 + i32.const $push303=, 52480 + i32.add $push304=, $41, $pop303 + i32.store 0($pop28), $pop304 + i32.const $push305=, 320 + i32.add $push306=, $41, $pop305 + i32.const $push793=, 48 + i32.add $push29=, $pop306, $pop793 + i32.const $push307=, 54480 + i32.add $push308=, $41, $pop307 + i32.store 0($pop29), $pop308 + i32.const $push309=, 320 + i32.add $push310=, $41, $pop309 + i32.const $push792=, 44 + i32.add $push30=, $pop310, $pop792 + i32.const $push311=, 56480 + i32.add $push312=, $41, $pop311 + i32.store 0($pop30), $pop312 + i32.const $push313=, 320 + i32.add $push314=, $41, $pop313 + i32.const $push791=, 40 + i32.add $push31=, $pop314, $pop791 + i32.const $push315=, 58480 + i32.add $push316=, $41, $pop315 + i32.store 0($pop31), $pop316 + i32.const $push317=, 320 + i32.add $push318=, $41, $pop317 + i32.const $push790=, 36 + i32.add $push32=, $pop318, $pop790 + i32.const $push319=, 60480 + i32.add $push320=, $41, $pop319 + i32.store 0($pop32), $pop320 + i32.const $push321=, 320 + i32.add $push322=, $41, $pop321 + i32.const $push789=, 32 + i32.add $push33=, $pop322, $pop789 + i32.const $push323=, 62480 + i32.add $push324=, $41, $pop323 + i32.store 0($pop33), $pop324 + i32.const $push325=, 320 + i32.add $push326=, $41, $pop325 + i32.const $push788=, 28 + i32.add $push34=, $pop326, $pop788 + i32.const $push327=, 64480 + i32.add $push328=, $41, $pop327 + i32.store 0($pop34), $pop328 + i32.const $push329=, 320 + i32.add $push330=, $41, $pop329 + i32.const $push787=, 24 + i32.add $push35=, $pop330, $pop787 + i32.const $push331=, 66480 + i32.add $push332=, $41, $pop331 + i32.store 0($pop35), $pop332 + i32.const $push333=, 320 + i32.add $push334=, $41, $pop333 + i32.const $push786=, 20 + i32.add $push36=, $pop334, $pop786 + i32.const $push335=, 68480 + i32.add $push336=, $41, $pop335 + i32.store 0($pop36), $pop336 + i32.const $push337=, 320 + i32.add $push338=, $41, $pop337 + i32.const $push785=, 16 + i32.add $push37=, $pop338, $pop785 + i32.const $push339=, 70480 + i32.add $push340=, $41, $pop339 + i32.store 0($pop37), $pop340 + i32.const $push341=, 72480 + i32.add $push342=, $41, $pop341 + i32.store 332($41), $pop342 + i32.const $push343=, 74480 + i32.add $push344=, $41, $pop343 + i32.store 328($41), $pop344 + i32.const $push345=, 76480 + i32.add $push346=, $41, $pop345 + i32.store 324($41), $pop346 + i32.const $push347=, 78480 + i32.add $push348=, $41, $pop347 + i32.store 320($41), $pop348 + i32.const $push784=, 40 + i32.const $push349=, 320 + i32.add $push350=, $41, $pop349 + call s@FUNCTION, $pop784, $pop350 + i32.load $1=, 2480($41) + i32.load $2=, 480($41) + i32.load $3=, 4480($41) + i32.load $4=, 6480($41) + i32.load $5=, 8480($41) + i32.load $6=, 10480($41) + i32.load $7=, 12480($41) + i32.load $8=, 14480($41) + i32.load $9=, 16480($41) + i32.load $10=, 18480($41) + i32.load $11=, 20480($41) + i32.load $12=, 22480($41) + i32.load $13=, 24480($41) + i32.load $14=, 26480($41) + i32.load $15=, 28480($41) + i32.load $16=, 30480($41) + i32.load $17=, 32480($41) + i32.load $18=, 34480($41) + i32.load $19=, 36480($41) + i32.load $20=, 40480($41) + i32.load $21=, 38480($41) + i32.load $22=, 42480($41) + i32.load $23=, 44480($41) + i32.load $24=, 46480($41) + i32.load $25=, 48480($41) + i32.load $26=, 50480($41) + i32.load $27=, 52480($41) + i32.load $28=, 54480($41) + i32.load $29=, 56480($41) + i32.load $30=, 58480($41) + i32.load $31=, 60480($41) + i32.load $32=, 62480($41) + i32.load $33=, 64480($41) + i32.load $34=, 66480($41) + i32.load $35=, 68480($41) + i32.load $36=, 70480($41) + i32.load $37=, 72480($41) + i32.load $38=, 74480($41) + i32.load $39=, 78480($41) + i32.load $40=, 76480($41) + i32.const $push351=, 160 + i32.add $push352=, $41, $pop351 + i32.const $push783=, 156 + i32.add $push38=, $pop352, $pop783 + i32.const $push353=, 480 + i32.add $push354=, $41, $pop353 + i32.store 0($pop38), $pop354 + i32.const $push355=, 160 + i32.add $push356=, $41, $pop355 + i32.const $push782=, 152 + i32.add $push39=, $pop356, $pop782 + i32.const $push357=, 2480 + i32.add $push358=, $41, $pop357 + i32.store 0($pop39), $pop358 + i32.const $push359=, 160 + i32.add $push360=, $41, $pop359 + i32.const $push781=, 148 + i32.add $push40=, $pop360, $pop781 + i32.const $push361=, 4480 + i32.add $push362=, $41, $pop361 + i32.store 0($pop40), $pop362 + i32.const $push363=, 160 + i32.add $push364=, $41, $pop363 + i32.const $push780=, 144 + i32.add $push41=, $pop364, $pop780 + i32.const $push365=, 6480 + i32.add $push366=, $41, $pop365 + i32.store 0($pop41), $pop366 + i32.const $push367=, 160 + i32.add $push368=, $41, $pop367 + i32.const $push779=, 140 + i32.add $push42=, $pop368, $pop779 + i32.const $push369=, 8480 + i32.add $push370=, $41, $pop369 + i32.store 0($pop42), $pop370 + i32.const $push371=, 160 + i32.add $push372=, $41, $pop371 + i32.const $push778=, 136 + i32.add $push43=, $pop372, $pop778 + i32.const $push373=, 10480 + i32.add $push374=, $41, $pop373 + i32.store 0($pop43), $pop374 + i32.const $push375=, 160 + i32.add $push376=, $41, $pop375 + i32.const $push777=, 132 + i32.add $push44=, $pop376, $pop777 + i32.const $push377=, 12480 + i32.add $push378=, $41, $pop377 + i32.store 0($pop44), $pop378 + i32.const $push379=, 160 + i32.add $push380=, $41, $pop379 + i32.const $push776=, 128 + i32.add $push45=, $pop380, $pop776 + i32.const $push381=, 14480 + i32.add $push382=, $41, $pop381 + i32.store 0($pop45), $pop382 + i32.const $push383=, 160 + i32.add $push384=, $41, $pop383 + i32.const $push775=, 124 + i32.add $push46=, $pop384, $pop775 + i32.const $push385=, 16480 + i32.add $push386=, $41, $pop385 + i32.store 0($pop46), $pop386 + i32.const $push387=, 160 + i32.add $push388=, $41, $pop387 + i32.const $push774=, 120 + i32.add $push47=, $pop388, $pop774 + i32.const $push389=, 18480 + i32.add $push390=, $41, $pop389 + i32.store 0($pop47), $pop390 + i32.const $push391=, 160 + i32.add $push392=, $41, $pop391 + i32.const $push773=, 116 + i32.add $push48=, $pop392, $pop773 + i32.const $push393=, 20480 + i32.add $push394=, $41, $pop393 + i32.store 0($pop48), $pop394 + i32.const $push395=, 160 + i32.add $push396=, $41, $pop395 + i32.const $push772=, 112 + i32.add $push49=, $pop396, $pop772 + i32.const $push397=, 22480 + i32.add $push398=, $41, $pop397 + i32.store 0($pop49), $pop398 + i32.const $push399=, 160 + i32.add $push400=, $41, $pop399 + i32.const $push771=, 108 + i32.add $push50=, $pop400, $pop771 + i32.const $push401=, 24480 + i32.add $push402=, $41, $pop401 + i32.store 0($pop50), $pop402 + i32.const $push403=, 160 + i32.add $push404=, $41, $pop403 + i32.const $push770=, 104 + i32.add $push51=, $pop404, $pop770 + i32.const $push405=, 26480 + i32.add $push406=, $41, $pop405 + i32.store 0($pop51), $pop406 + i32.const $push407=, 160 + i32.add $push408=, $41, $pop407 + i32.const $push769=, 100 + i32.add $push52=, $pop408, $pop769 + i32.const $push409=, 28480 + i32.add $push410=, $41, $pop409 + i32.store 0($pop52), $pop410 + i32.const $push411=, 160 + i32.add $push412=, $41, $pop411 + i32.const $push768=, 96 + i32.add $push53=, $pop412, $pop768 + i32.const $push413=, 30480 + i32.add $push414=, $41, $pop413 + i32.store 0($pop53), $pop414 + i32.const $push415=, 160 + i32.add $push416=, $41, $pop415 + i32.const $push767=, 92 + i32.add $push54=, $pop416, $pop767 + i32.const $push417=, 32480 + i32.add $push418=, $41, $pop417 + i32.store 0($pop54), $pop418 + i32.const $push419=, 160 + i32.add $push420=, $41, $pop419 + i32.const $push766=, 88 + i32.add $push55=, $pop420, $pop766 + i32.const $push421=, 34480 + i32.add $push422=, $41, $pop421 + i32.store 0($pop55), $pop422 + i32.const $push423=, 160 + i32.add $push424=, $41, $pop423 + i32.const $push765=, 84 + i32.add $push56=, $pop424, $pop765 + i32.const $push425=, 36480 + i32.add $push426=, $41, $pop425 + i32.store 0($pop56), $pop426 + i32.const $push427=, 160 + i32.add $push428=, $41, $pop427 + i32.const $push764=, 80 + i32.add $push57=, $pop428, $pop764 + i32.const $push429=, 38480 + i32.add $push430=, $41, $pop429 + i32.store 0($pop57), $pop430 + i32.const $push431=, 160 + i32.add $push432=, $41, $pop431 + i32.const $push763=, 76 + i32.add $push58=, $pop432, $pop763 + i32.const $push433=, 40480 + i32.add $push434=, $41, $pop433 + i32.store 0($pop58), $pop434 + i32.const $push435=, 160 + i32.add $push436=, $41, $pop435 + i32.const $push762=, 72 + i32.add $push59=, $pop436, $pop762 + i32.const $push437=, 42480 + i32.add $push438=, $41, $pop437 + i32.store 0($pop59), $pop438 + i32.const $push439=, 160 + i32.add $push440=, $41, $pop439 + i32.const $push761=, 68 + i32.add $push60=, $pop440, $pop761 + i32.const $push441=, 44480 + i32.add $push442=, $41, $pop441 + i32.store 0($pop60), $pop442 + i32.const $push443=, 160 + i32.add $push444=, $41, $pop443 + i32.const $push760=, 64 + i32.add $push61=, $pop444, $pop760 + i32.const $push445=, 46480 + i32.add $push446=, $41, $pop445 + i32.store 0($pop61), $pop446 + i32.const $push447=, 160 + i32.add $push448=, $41, $pop447 + i32.const $push759=, 60 + i32.add $push62=, $pop448, $pop759 + i32.const $push449=, 48480 + i32.add $push450=, $41, $pop449 + i32.store 0($pop62), $pop450 + i32.const $push451=, 160 + i32.add $push452=, $41, $pop451 + i32.const $push758=, 56 + i32.add $push63=, $pop452, $pop758 + i32.const $push453=, 50480 + i32.add $push454=, $41, $pop453 + i32.store 0($pop63), $pop454 + i32.const $push455=, 160 + i32.add $push456=, $41, $pop455 + i32.const $push757=, 52 + i32.add $push64=, $pop456, $pop757 + i32.const $push457=, 52480 + i32.add $push458=, $41, $pop457 + i32.store 0($pop64), $pop458 + i32.const $push459=, 160 + i32.add $push460=, $41, $pop459 + i32.const $push756=, 48 + i32.add $push65=, $pop460, $pop756 + i32.const $push461=, 54480 + i32.add $push462=, $41, $pop461 + i32.store 0($pop65), $pop462 + i32.const $push463=, 160 + i32.add $push464=, $41, $pop463 + i32.const $push755=, 44 + i32.add $push66=, $pop464, $pop755 + i32.const $push465=, 56480 + i32.add $push466=, $41, $pop465 + i32.store 0($pop66), $pop466 + i32.const $push467=, 160 + i32.add $push468=, $41, $pop467 + i32.const $push754=, 40 + i32.add $push67=, $pop468, $pop754 + i32.const $push469=, 58480 + i32.add $push470=, $41, $pop469 + i32.store 0($pop67), $pop470 + i32.const $push471=, 160 + i32.add $push472=, $41, $pop471 + i32.const $push753=, 36 + i32.add $push68=, $pop472, $pop753 + i32.const $push473=, 60480 + i32.add $push474=, $41, $pop473 + i32.store 0($pop68), $pop474 + i32.const $push475=, 160 + i32.add $push476=, $41, $pop475 + i32.const $push752=, 32 + i32.add $push69=, $pop476, $pop752 + i32.const $push477=, 62480 + i32.add $push478=, $41, $pop477 + i32.store 0($pop69), $pop478 + i32.const $push479=, 160 + i32.add $push480=, $41, $pop479 + i32.const $push751=, 28 + i32.add $push70=, $pop480, $pop751 + i32.const $push481=, 64480 + i32.add $push482=, $41, $pop481 + i32.store 0($pop70), $pop482 + i32.const $push483=, 160 + i32.add $push484=, $41, $pop483 + i32.const $push750=, 24 + i32.add $push71=, $pop484, $pop750 + i32.const $push485=, 66480 + i32.add $push486=, $41, $pop485 + i32.store 0($pop71), $pop486 + i32.const $push487=, 160 + i32.add $push488=, $41, $pop487 + i32.const $push749=, 20 + i32.add $push72=, $pop488, $pop749 + i32.const $push489=, 68480 + i32.add $push490=, $41, $pop489 + i32.store 0($pop72), $pop490 + i32.const $push491=, 160 + i32.add $push492=, $41, $pop491 + i32.const $push748=, 16 + i32.add $push73=, $pop492, $pop748 + i32.const $push493=, 70480 + i32.add $push494=, $41, $pop493 + i32.store 0($pop73), $pop494 + i32.const $push495=, 72480 + i32.add $push496=, $41, $pop495 + i32.store 172($41), $pop496 + i32.const $push497=, 74480 + i32.add $push498=, $41, $pop497 + i32.store 168($41), $pop498 + i32.const $push499=, 76480 + i32.add $push500=, $41, $pop499 + i32.store 164($41), $pop500 + i32.const $push501=, 78480 + i32.add $push502=, $41, $pop501 + i32.store 160($41), $pop502 + i32.const $push747=, 40 + i32.const $push503=, 160 + i32.add $push504=, $41, $pop503 + call z@FUNCTION, $pop747, $pop504 + i32.const $push505=, 76480 + i32.add $push506=, $41, $pop505 + i32.const $push746=, 2 + i32.shl $push74=, $40, $pop746 + i32.add $push75=, $pop506, $pop74 + i32.store 0($pop75), $40 + i32.const $push507=, 78480 + i32.add $push508=, $41, $pop507 + i32.const $push745=, 2 + i32.shl $push76=, $39, $pop745 + i32.add $push77=, $pop508, $pop76 + i32.store 0($pop77), $39 + i32.const $push509=, 74480 + i32.add $push510=, $41, $pop509 + i32.const $push744=, 2 + i32.shl $push78=, $38, $pop744 + i32.add $push79=, $pop510, $pop78 + i32.store 0($pop79), $38 + i32.const $push511=, 72480 + i32.add $push512=, $41, $pop511 + i32.const $push743=, 2 + i32.shl $push80=, $37, $pop743 + i32.add $push81=, $pop512, $pop80 + i32.store 0($pop81), $37 + i32.const $push513=, 70480 + i32.add $push514=, $41, $pop513 + i32.const $push742=, 2 + i32.shl $push82=, $36, $pop742 + i32.add $push83=, $pop514, $pop82 + i32.store 0($pop83), $36 + i32.const $push515=, 68480 + i32.add $push516=, $41, $pop515 + i32.const $push741=, 2 + i32.shl $push84=, $35, $pop741 + i32.add $push85=, $pop516, $pop84 + i32.store 0($pop85), $35 + i32.const $push517=, 66480 + i32.add $push518=, $41, $pop517 + i32.const $push740=, 2 + i32.shl $push86=, $34, $pop740 + i32.add $push87=, $pop518, $pop86 + i32.store 0($pop87), $34 + i32.const $push519=, 64480 + i32.add $push520=, $41, $pop519 + i32.const $push739=, 2 + i32.shl $push88=, $33, $pop739 + i32.add $push89=, $pop520, $pop88 + i32.store 0($pop89), $33 + i32.const $push521=, 62480 + i32.add $push522=, $41, $pop521 + i32.const $push738=, 2 + i32.shl $push90=, $32, $pop738 + i32.add $push91=, $pop522, $pop90 + i32.store 0($pop91), $32 + i32.const $push523=, 60480 + i32.add $push524=, $41, $pop523 + i32.const $push737=, 2 + i32.shl $push92=, $31, $pop737 + i32.add $push93=, $pop524, $pop92 + i32.store 0($pop93), $31 + i32.const $push525=, 58480 + i32.add $push526=, $41, $pop525 + i32.const $push736=, 2 + i32.shl $push94=, $30, $pop736 + i32.add $push95=, $pop526, $pop94 + i32.store 0($pop95), $30 + i32.const $push527=, 56480 + i32.add $push528=, $41, $pop527 + i32.const $push735=, 2 + i32.shl $push96=, $29, $pop735 + i32.add $push97=, $pop528, $pop96 + i32.store 0($pop97), $29 + i32.const $push529=, 54480 + i32.add $push530=, $41, $pop529 + i32.const $push734=, 2 + i32.shl $push98=, $28, $pop734 + i32.add $push99=, $pop530, $pop98 + i32.store 0($pop99), $28 + i32.const $push531=, 52480 + i32.add $push532=, $41, $pop531 + i32.const $push733=, 2 + i32.shl $push100=, $27, $pop733 + i32.add $push101=, $pop532, $pop100 + i32.store 0($pop101), $27 + i32.const $push533=, 50480 + i32.add $push534=, $41, $pop533 + i32.const $push732=, 2 + i32.shl $push102=, $26, $pop732 + i32.add $push103=, $pop534, $pop102 + i32.store 0($pop103), $26 + i32.const $push535=, 48480 + i32.add $push536=, $41, $pop535 + i32.const $push731=, 2 + i32.shl $push104=, $25, $pop731 + i32.add $push105=, $pop536, $pop104 + i32.store 0($pop105), $25 + i32.const $push537=, 46480 + i32.add $push538=, $41, $pop537 + i32.const $push730=, 2 + i32.shl $push106=, $24, $pop730 + i32.add $push107=, $pop538, $pop106 + i32.store 0($pop107), $24 + i32.const $push539=, 44480 + i32.add $push540=, $41, $pop539 + i32.const $push729=, 2 + i32.shl $push108=, $23, $pop729 + i32.add $push109=, $pop540, $pop108 + i32.store 0($pop109), $23 + i32.const $push541=, 42480 + i32.add $push542=, $41, $pop541 + i32.const $push728=, 2 + i32.shl $push110=, $22, $pop728 + i32.add $push111=, $pop542, $pop110 + i32.store 0($pop111), $22 + i32.const $push543=, 38480 + i32.add $push544=, $41, $pop543 + i32.const $push727=, 2 + i32.shl $push112=, $21, $pop727 + i32.add $push113=, $pop544, $pop112 + i32.store 0($pop113), $21 + i32.const $push545=, 40480 + i32.add $push546=, $41, $pop545 + i32.const $push726=, 2 + i32.shl $push114=, $20, $pop726 + i32.add $push115=, $pop546, $pop114 + i32.store 0($pop115), $20 + i32.const $push547=, 36480 + i32.add $push548=, $41, $pop547 + i32.const $push725=, 2 + i32.shl $push116=, $19, $pop725 + i32.add $push117=, $pop548, $pop116 + i32.store 0($pop117), $19 + i32.const $push549=, 34480 + i32.add $push550=, $41, $pop549 + i32.const $push724=, 2 + i32.shl $push118=, $18, $pop724 + i32.add $push119=, $pop550, $pop118 + i32.store 0($pop119), $18 + i32.const $push551=, 32480 + i32.add $push552=, $41, $pop551 + i32.const $push723=, 2 + i32.shl $push120=, $17, $pop723 + i32.add $push121=, $pop552, $pop120 + i32.store 0($pop121), $17 + i32.const $push553=, 30480 + i32.add $push554=, $41, $pop553 + i32.const $push722=, 2 + i32.shl $push122=, $16, $pop722 + i32.add $push123=, $pop554, $pop122 + i32.store 0($pop123), $16 + i32.const $push555=, 28480 + i32.add $push556=, $41, $pop555 + i32.const $push721=, 2 + i32.shl $push124=, $15, $pop721 + i32.add $push125=, $pop556, $pop124 + i32.store 0($pop125), $15 + i32.const $push557=, 26480 + i32.add $push558=, $41, $pop557 + i32.const $push720=, 2 + i32.shl $push126=, $14, $pop720 + i32.add $push127=, $pop558, $pop126 + i32.store 0($pop127), $14 + i32.const $push559=, 24480 + i32.add $push560=, $41, $pop559 + i32.const $push719=, 2 + i32.shl $push128=, $13, $pop719 + i32.add $push129=, $pop560, $pop128 + i32.store 0($pop129), $13 + i32.const $push561=, 22480 + i32.add $push562=, $41, $pop561 + i32.const $push718=, 2 + i32.shl $push130=, $12, $pop718 + i32.add $push131=, $pop562, $pop130 + i32.store 0($pop131), $12 + i32.const $push563=, 20480 + i32.add $push564=, $41, $pop563 + i32.const $push717=, 2 + i32.shl $push132=, $11, $pop717 + i32.add $push133=, $pop564, $pop132 + i32.store 0($pop133), $11 + i32.const $push565=, 18480 + i32.add $push566=, $41, $pop565 + i32.const $push716=, 2 + i32.shl $push134=, $10, $pop716 + i32.add $push135=, $pop566, $pop134 + i32.store 0($pop135), $10 + i32.const $push567=, 16480 + i32.add $push568=, $41, $pop567 + i32.const $push715=, 2 + i32.shl $push136=, $9, $pop715 + i32.add $push137=, $pop568, $pop136 + i32.store 0($pop137), $9 + i32.const $push569=, 14480 + i32.add $push570=, $41, $pop569 + i32.const $push714=, 2 + i32.shl $push138=, $8, $pop714 + i32.add $push139=, $pop570, $pop138 + i32.store 0($pop139), $8 + i32.const $push571=, 12480 + i32.add $push572=, $41, $pop571 + i32.const $push713=, 2 + i32.shl $push140=, $7, $pop713 + i32.add $push141=, $pop572, $pop140 + i32.store 0($pop141), $7 + i32.const $push573=, 10480 + i32.add $push574=, $41, $pop573 + i32.const $push712=, 2 + i32.shl $push142=, $6, $pop712 + i32.add $push143=, $pop574, $pop142 + i32.store 0($pop143), $6 + i32.const $push575=, 8480 + i32.add $push576=, $41, $pop575 + i32.const $push711=, 2 + i32.shl $push144=, $5, $pop711 + i32.add $push145=, $pop576, $pop144 + i32.store 0($pop145), $5 + i32.const $push577=, 6480 + i32.add $push578=, $41, $pop577 + i32.const $push710=, 2 + i32.shl $push146=, $4, $pop710 + i32.add $push147=, $pop578, $pop146 + i32.store 0($pop147), $4 + i32.const $push579=, 4480 + i32.add $push580=, $41, $pop579 + i32.const $push709=, 2 + i32.shl $push148=, $3, $pop709 + i32.add $push149=, $pop580, $pop148 + i32.store 0($pop149), $3 + i32.const $push581=, 480 + i32.add $push582=, $41, $pop581 + i32.const $push708=, 2 + i32.shl $push150=, $2, $pop708 + i32.add $push151=, $pop582, $pop150 + i32.store 0($pop151), $2 + i32.const $push583=, 2480 + i32.add $push584=, $41, $pop583 + i32.const $push707=, 2 + i32.shl $push152=, $1, $pop707 + i32.add $push153=, $pop584, $pop152 + i32.store 0($pop153), $1 + i32.const $push706=, 156 + i32.add $push154=, $41, $pop706 + i32.const $push585=, 480 + i32.add $push586=, $41, $pop585 + i32.store 0($pop154), $pop586 + i32.const $push705=, 152 + i32.add $push155=, $41, $pop705 + i32.const $push587=, 2480 + i32.add $push588=, $41, $pop587 + i32.store 0($pop155), $pop588 + i32.const $push704=, 148 + i32.add $push156=, $41, $pop704 + i32.const $push589=, 4480 + i32.add $push590=, $41, $pop589 + i32.store 0($pop156), $pop590 + i32.const $push703=, 144 + i32.add $push157=, $41, $pop703 + i32.const $push591=, 6480 + i32.add $push592=, $41, $pop591 + i32.store 0($pop157), $pop592 + i32.const $push702=, 140 + i32.add $push158=, $41, $pop702 + i32.const $push593=, 8480 + i32.add $push594=, $41, $pop593 + i32.store 0($pop158), $pop594 + i32.const $push701=, 136 + i32.add $push159=, $41, $pop701 + i32.const $push595=, 10480 + i32.add $push596=, $41, $pop595 + i32.store 0($pop159), $pop596 + i32.const $push700=, 132 + i32.add $push160=, $41, $pop700 + i32.const $push597=, 12480 + i32.add $push598=, $41, $pop597 + i32.store 0($pop160), $pop598 + i32.const $push699=, 128 + i32.add $push161=, $41, $pop699 + i32.const $push599=, 14480 + i32.add $push600=, $41, $pop599 + i32.store 0($pop161), $pop600 + i32.const $push698=, 124 + i32.add $push162=, $41, $pop698 + i32.const $push601=, 16480 + i32.add $push602=, $41, $pop601 + i32.store 0($pop162), $pop602 + i32.const $push697=, 120 + i32.add $push163=, $41, $pop697 + i32.const $push603=, 18480 + i32.add $push604=, $41, $pop603 + i32.store 0($pop163), $pop604 + i32.const $push696=, 116 + i32.add $push164=, $41, $pop696 + i32.const $push605=, 20480 + i32.add $push606=, $41, $pop605 + i32.store 0($pop164), $pop606 + i32.const $push695=, 112 + i32.add $push165=, $41, $pop695 + i32.const $push607=, 22480 + i32.add $push608=, $41, $pop607 + i32.store 0($pop165), $pop608 + i32.const $push694=, 108 + i32.add $push166=, $41, $pop694 + i32.const $push609=, 24480 + i32.add $push610=, $41, $pop609 + i32.store 0($pop166), $pop610 + i32.const $push693=, 104 + i32.add $push167=, $41, $pop693 + i32.const $push611=, 26480 + i32.add $push612=, $41, $pop611 + i32.store 0($pop167), $pop612 + i32.const $push692=, 100 + i32.add $push168=, $41, $pop692 + i32.const $push613=, 28480 + i32.add $push614=, $41, $pop613 + i32.store 0($pop168), $pop614 + i32.const $push691=, 96 + i32.add $push169=, $41, $pop691 + i32.const $push615=, 30480 + i32.add $push616=, $41, $pop615 + i32.store 0($pop169), $pop616 + i32.const $push690=, 92 + i32.add $push170=, $41, $pop690 + i32.const $push617=, 32480 + i32.add $push618=, $41, $pop617 + i32.store 0($pop170), $pop618 + i32.const $push689=, 88 + i32.add $push171=, $41, $pop689 + i32.const $push619=, 34480 + i32.add $push620=, $41, $pop619 + i32.store 0($pop171), $pop620 + i32.const $push688=, 84 + i32.add $push172=, $41, $pop688 + i32.const $push621=, 36480 + i32.add $push622=, $41, $pop621 + i32.store 0($pop172), $pop622 + i32.const $push687=, 80 + i32.add $push173=, $41, $pop687 + i32.const $push623=, 38480 + i32.add $push624=, $41, $pop623 + i32.store 0($pop173), $pop624 + i32.const $push686=, 76 + i32.add $push174=, $41, $pop686 + i32.const $push625=, 40480 + i32.add $push626=, $41, $pop625 + i32.store 0($pop174), $pop626 + i32.const $push685=, 72 + i32.add $push175=, $41, $pop685 + i32.const $push627=, 42480 + i32.add $push628=, $41, $pop627 + i32.store 0($pop175), $pop628 + i32.const $push684=, 68 + i32.add $push176=, $41, $pop684 + i32.const $push629=, 44480 + i32.add $push630=, $41, $pop629 + i32.store 0($pop176), $pop630 + i32.const $push683=, 64 + i32.add $push177=, $41, $pop683 + i32.const $push631=, 46480 + i32.add $push632=, $41, $pop631 + i32.store 0($pop177), $pop632 + i32.const $push682=, 60 + i32.add $push178=, $41, $pop682 + i32.const $push633=, 48480 + i32.add $push634=, $41, $pop633 + i32.store 0($pop178), $pop634 + i32.const $push681=, 56 + i32.add $push179=, $41, $pop681 + i32.const $push635=, 50480 + i32.add $push636=, $41, $pop635 + i32.store 0($pop179), $pop636 + i32.const $push680=, 52 + i32.add $push180=, $41, $pop680 + i32.const $push637=, 52480 + i32.add $push638=, $41, $pop637 + i32.store 0($pop180), $pop638 + i32.const $push679=, 48 + i32.add $push181=, $41, $pop679 + i32.const $push639=, 54480 + i32.add $push640=, $41, $pop639 + i32.store 0($pop181), $pop640 + i32.const $push678=, 44 + i32.add $push182=, $41, $pop678 + i32.const $push641=, 56480 + i32.add $push642=, $41, $pop641 + i32.store 0($pop182), $pop642 + i32.const $push677=, 40 + i32.add $push183=, $41, $pop677 + i32.const $push643=, 58480 + i32.add $push644=, $41, $pop643 + i32.store 0($pop183), $pop644 + i32.const $push676=, 36 + i32.add $push184=, $41, $pop676 + i32.const $push645=, 60480 + i32.add $push646=, $41, $pop645 + i32.store 0($pop184), $pop646 + i32.const $push675=, 32 + i32.add $push185=, $41, $pop675 + i32.const $push647=, 62480 + i32.add $push648=, $41, $pop647 + i32.store 0($pop185), $pop648 + i32.const $push674=, 28 + i32.add $push186=, $41, $pop674 + i32.const $push649=, 64480 + i32.add $push650=, $41, $pop649 + i32.store 0($pop186), $pop650 + i32.const $push673=, 24 + i32.add $push187=, $41, $pop673 + i32.const $push651=, 66480 + i32.add $push652=, $41, $pop651 + i32.store 0($pop187), $pop652 + i32.const $push672=, 20 + i32.add $push188=, $41, $pop672 + i32.const $push653=, 68480 + i32.add $push654=, $41, $pop653 + i32.store 0($pop188), $pop654 + i32.const $push671=, 16 + i32.add $push189=, $41, $pop671 + i32.const $push655=, 70480 + i32.add $push656=, $41, $pop655 + i32.store 0($pop189), $pop656 + i32.const $push657=, 72480 + i32.add $push658=, $41, $pop657 + i32.store 12($41), $pop658 + i32.const $push659=, 74480 + i32.add $push660=, $41, $pop659 + i32.store 8($41), $pop660 + i32.const $push661=, 76480 + i32.add $push662=, $41, $pop661 + i32.store 4($41), $pop662 + i32.const $push663=, 78480 + i32.add $push664=, $41, $pop663 + i32.store 0($41), $pop664 + i32.const $push670=, 40 + call c@FUNCTION, $pop670, $41 + i32.const $push669=, -1 + i32.add $push668=, $0, $pop669 + tee_local $push667=, $0=, $pop668 + br_if 0, $pop667 # 0: up to label1 +.LBB0_3: # %for.end + end_loop + end_block # label0: + i32.const $push196=, 0 + i32.const $push194=, 80480 + i32.add $push195=, $41, $pop194 + i32.store __stack_pointer($pop196), $pop195 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.s,"ax",@progbits + .hidden s # -- Begin function s + .globl s + .type s,@function +s: # @s + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push7=, $pop3, $pop5 + tee_local $push6=, $2=, $pop7 + i32.store 12($pop6), $1 + block + i32.eqz $push16=, $0 + br_if 0, $pop16 # 0: down to label2 +# BB#1: # %while.body.preheader + i32.const $push8=, -1 + i32.add $0=, $0, $pop8 +.LBB1_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.load $push15=, 12($2) + tee_local $push14=, $1=, $pop15 + i32.const $push13=, 4 + i32.add $push0=, $pop14, $pop13 + i32.store 12($2), $pop0 + i32.load $push1=, 0($1) + i32.store 0($pop1), $0 + i32.const $push12=, -1 + i32.add $push11=, $0, $pop12 + tee_local $push10=, $0=, $pop11 + i32.const $push9=, -1 + i32.ne $push2=, $pop10, $pop9 + br_if 0, $pop2 # 0: up to label3 +.LBB1_3: # %while.end + end_loop + end_block # label2: + # fallthrough-return + .endfunc +.Lfunc_end1: + .size s, .Lfunc_end1-s + # -- End function + .section .text.z,"ax",@progbits + .hidden z # -- Begin function z + .globl z + .type z,@function +z: # @z + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push9=, $pop1, $pop3 + tee_local $push8=, $3=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.store 12($3), $1 + block + i32.eqz $push18=, $0 + br_if 0, $pop18 # 0: down to label4 +# BB#1: # %while.body.lr.ph + i32.load $1=, 12($3) +.LBB2_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label5: + i32.const $push17=, 4 + i32.add $push16=, $1, $pop17 + tee_local $push15=, $2=, $pop16 + i32.store 12($3), $pop15 + i32.load $push0=, 0($1) + i32.const $push14=, 0 + i32.const $push13=, 2000 + i32.call $drop=, memset@FUNCTION, $pop0, $pop14, $pop13 + copy_local $1=, $2 + i32.const $push12=, -1 + i32.add $push11=, $0, $pop12 + tee_local $push10=, $0=, $pop11 + br_if 0, $pop10 # 0: up to label5 +.LBB2_3: # %while.end + end_loop + end_block # label4: + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $3, $pop5 + i32.store __stack_pointer($pop7), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size z, .Lfunc_end2-z + # -- End function + .section .text.c,"ax",@progbits + .hidden c # -- Begin function c + .globl c + .type c,@function +c: # @c + .param i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push10=, 0 + i32.const $push8=, 0 + i32.load $push7=, __stack_pointer($pop8) + i32.const $push9=, 16 + i32.sub $push15=, $pop7, $pop9 + tee_local $push14=, $4=, $pop15 + i32.store __stack_pointer($pop10), $pop14 + i32.store 12($4), $1 + block + block + i32.eqz $push26=, $0 + br_if 0, $pop26 # 0: down to label7 +# BB#1: # %while.body.lr.ph + i32.const $push17=, -1 + i32.add $1=, $0, $pop17 + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.const $push16=, -4 + i32.add $0=, $pop1, $pop16 + i32.load $3=, 12($4) +.LBB3_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label8: + i32.const $push20=, 4 + i32.add $push19=, $3, $pop20 + tee_local $push18=, $2=, $pop19 + i32.store 12($4), $pop18 + i32.load $push2=, 0($3) + i32.add $push3=, $pop2, $0 + i32.load $push4=, 0($pop3) + i32.ne $push5=, $1, $pop4 + br_if 2, $pop5 # 2: down to label6 +# BB#3: # %while.cond + # in Loop: Header=BB3_2 Depth=1 + i32.const $push25=, -4 + i32.add $0=, $0, $pop25 + copy_local $3=, $2 + i32.const $push24=, -1 + i32.add $push23=, $1, $pop24 + tee_local $push22=, $1=, $pop23 + i32.const $push21=, -1 + i32.ne $push6=, $pop22, $pop21 + br_if 0, $pop6 # 0: up to label8 +.LBB3_4: # %while.end + end_loop + end_block # label7: + i32.const $push13=, 0 + i32.const $push11=, 16 + i32.add $push12=, $4, $pop11 + i32.store __stack_pointer($pop13), $pop12 + return +.LBB3_5: # %if.then + end_block # label6: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size c, .Lfunc_end3-c + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + call f@FUNCTION, $pop0 + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/nestfunc-4.c.s b/src/binaryen/test/torture-s/nestfunc-4.c.s new file mode 100644 index 0000000000..2e1b2ce377 --- /dev/null +++ b/src/binaryen/test/torture-s/nestfunc-4.c.s @@ -0,0 +1,91 @@ + .text + .file "nestfunc-4.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %if.then + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, level($pop10) + tee_local $push8=, $0=, $pop9 + i32.const $push1=, 2040 + i32.const $push7=, 2040 + i32.gt_s $push2=, $0, $pop7 + i32.select $push3=, $pop8, $pop1, $pop2 + i32.const $push4=, 1 + i32.add $push5=, $pop3, $pop4 + i32.store level($pop0), $pop5 + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, level($pop10) + tee_local $push8=, $0=, $pop9 + i32.const $push1=, 2040 + i32.const $push7=, 2040 + i32.gt_s $push2=, $0, $pop7 + i32.select $push3=, $pop8, $pop1, $pop2 + i32.const $push4=, 1 + i32.add $push5=, $pop3, $pop4 + i32.store level($pop0), $pop5 + i32.const $push6=, -42 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, -42 + block + i32.const $push0=, 0 + i32.load $push5=, level($pop0) + tee_local $push4=, $0=, $pop5 + i32.const $push1=, 2040 + i32.gt_s $push2=, $pop4, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %cond.false + i32.call $1=, foo@FUNCTION +.LBB2_2: # %cond.end + end_block # label0: + i32.sub $push3=, $1, $0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size bar, .Lfunc_end2-bar + # -- End function + .hidden level # @level + .type level,@object + .section .bss.level,"aw",@nobits + .globl level + .p2align 2 +level: + .int32 0 # 0x0 + .size level, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/p18298.c.s b/src/binaryen/test/torture-s/p18298.c.s new file mode 100644 index 0000000000..b451802e04 --- /dev/null +++ b/src/binaryen/test/torture-s/p18298.c.s @@ -0,0 +1,54 @@ + .text + .file "p18298.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, s + i32.call $push1=, strcmp@FUNCTION, $pop0, $0 + i32.eqz $push2=, $pop1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push1=, 0 + i32.load8_u $push0=, s($pop1) + i32.eqz $push5=, $pop0 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %while.cond + i32.const $push3=, 0 + i32.const $push2=, 0 + i32.store8 s($pop3), $pop2 +.LBB1_2: # %while.end + end_block # label0: + i32.const $push4=, 0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden s # @s + .type s,@object + .section .data.s,"aw",@progbits + .globl s + .p2align 4 +s: + .asciz "a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + .size s, 2048 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strcmp, i32, i32, i32 diff --git a/src/binaryen/test/torture-s/packed-1.c.s b/src/binaryen/test/torture-s/packed-1.c.s new file mode 100644 index 0000000000..89877790ab --- /dev/null +++ b/src/binaryen/test/torture-s/packed-1.c.s @@ -0,0 +1,66 @@ + .text + .file "packed-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load16_u $push4=, x1($pop5) + tee_local $push3=, $0=, $pop4 + i32.store16 t($pop0), $pop3 + block + i32.const $push1=, 17 + i32.ne $push2=, $0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + return $0 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.call $drop=, f@FUNCTION + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden x1 # @x1 + .type x1,@object + .section .data.x1,"aw",@progbits + .globl x1 + .p2align 1 +x1: + .int16 17 # 0x11 + .size x1, 2 + + .hidden t # @t + .type t,@object + .section .bss.t,"aw",@nobits + .globl t + .p2align 1 +t: + .skip 2 + .size t, 2 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/packed-2.c.s b/src/binaryen/test/torture-s/packed-2.c.s new file mode 100644 index 0000000000..0376f2fdd8 --- /dev/null +++ b/src/binaryen/test/torture-s/packed-2.c.s @@ -0,0 +1,29 @@ + .text + .file "packed-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push2=, 0 + i32.store t+2($pop0):p2align=1, $pop2 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden t # @t + .type t,@object + .section .bss.t,"aw",@nobits + .globl t + .p2align 1 +t: + .skip 6 + .size t, 6 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pending-4.c.s b/src/binaryen/test/torture-s/pending-4.c.s new file mode 100644 index 0000000000..0215f0e58b --- /dev/null +++ b/src/binaryen/test/torture-s/pending-4.c.s @@ -0,0 +1,152 @@ + .text + .file "pending-4.c" + .section .text.dummy,"ax",@progbits + .hidden dummy # -- Begin function dummy + .globl dummy + .type dummy,@function +dummy: # @dummy + .param i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size dummy, .Lfunc_end0-dummy + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $4=, 8 + i32.const $2=, 0 + i32.const $3=, 0 + block + block + i32.const $push9=, 8 + i32.const $push8=, 1 + i32.ne $push1=, $pop9, $pop8 + br_if 0, $pop1 # 0: down to label1 +# BB#1: + i32.const $5=, 2 + br 1 # 1: down to label0 +.LBB1_2: + end_block # label1: + i32.const $5=, 0 +.LBB1_3: # =>This Inner Loop Header: Depth=1 + end_block # label0: + loop i32 # label2: + block + block + block + block + block + block + block + block + block + block + block + block + br_table $5, 2, 0, 1, 3, 4, 5, 6, 6 # 2: down to label12 + # 0: down to label14 + # 1: down to label13 + # 3: down to label11 + # 4: down to label10 + # 5: down to label9 + # 6: down to label8 +.LBB1_4: # %if.else + # in Loop: Header=BB1_3 Depth=1 + end_block # label14: + i32.const $push14=, 1 + i32.add $3=, $3, $pop14 + i32.const $push13=, -1 + i32.add $push12=, $4, $pop13 + tee_local $push11=, $4=, $pop12 + i32.const $push10=, 1 + i32.ne $push2=, $pop11, $pop10 + br_if 8, $pop2 # 8: down to label5 +# BB#5: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 2 + br 11 # 11: up to label2 +.LBB1_6: # %if.then + # in Loop: Header=BB1_3 Depth=1 + end_block # label13: + i32.const $push19=, 1 + i32.add $2=, $2, $pop19 + i32.const $push18=, -1 + i32.add $push17=, $4, $pop18 + tee_local $push16=, $4=, $pop17 + i32.const $push15=, 1 + i32.eq $push0=, $pop16, $pop15 + br_if 6, $pop0 # 6: down to label6 +# BB#7: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 0 + br 10 # 10: up to label2 +.LBB1_8: # %for.cond + # in Loop: Header=BB1_3 Depth=1 + end_block # label12: + br_if 4, $4 # 4: down to label7 +# BB#9: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 3 + br 9 # 9: up to label2 +.LBB1_10: # %for.end + # in Loop: Header=BB1_3 Depth=1 + end_block # label11: + i32.const $push3=, 1 + i32.ne $push4=, $2, $pop3 + br_if 6, $pop4 # 6: down to label4 +# BB#11: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 4 + br 8 # 8: up to label2 +.LBB1_12: # %for.end + # in Loop: Header=BB1_3 Depth=1 + end_block # label10: + i32.const $push5=, 7 + i32.ne $push6=, $3, $pop5 + br_if 6, $pop6 # 6: down to label3 +# BB#13: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 5 + br 7 # 7: up to label2 +.LBB1_14: # %if.end7 + end_block # label9: + i32.const $push7=, 0 + call exit@FUNCTION, $pop7 + unreachable +.LBB1_15: # %if.then6 + end_block # label8: + call abort@FUNCTION + unreachable +.LBB1_16: # in Loop: Header=BB1_3 Depth=1 + end_block # label7: + i32.const $5=, 1 + br 4 # 4: up to label2 +.LBB1_17: # in Loop: Header=BB1_3 Depth=1 + end_block # label6: + i32.const $5=, 2 + br 3 # 3: up to label2 +.LBB1_18: # in Loop: Header=BB1_3 Depth=1 + end_block # label5: + i32.const $5=, 0 + br 2 # 2: up to label2 +.LBB1_19: # in Loop: Header=BB1_3 Depth=1 + end_block # label4: + i32.const $5=, 6 + br 1 # 1: up to label2 +.LBB1_20: # in Loop: Header=BB1_3 Depth=1 + end_block # label3: + i32.const $5=, 6 + br 0 # 0: up to label2 +.LBB1_21: + end_loop + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/postmod-1.c.s b/src/binaryen/test/torture-s/postmod-1.c.s new file mode 100644 index 0000000000..1e7cc5972d --- /dev/null +++ b/src/binaryen/test/torture-s/postmod-1.c.s @@ -0,0 +1,594 @@ + .text + .file "postmod-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .local i32, i32, f32, f32, f32, f32, f32, f32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shl $2=, $0, $pop0 + i32.const $push1=, 3 + i32.shl $push2=, $0, $pop1 + i32.const $push140=, 12 + i32.add $1=, $pop2, $pop140 + i32.const $13=, 0 +.LBB0_1: # %do.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push293=, 0 + i32.add $push292=, $2, $13 + tee_local $push291=, $0=, $pop292 + i32.const $push290=, array0 + i32.add $push3=, $pop291, $pop290 + f32.load $push4=, 0($pop3) + i32.const $push289=, 0 + f32.load $push5=, counter0($pop289) + f32.add $push288=, $pop4, $pop5 + tee_local $push287=, $3=, $pop288 + f32.store counter0($pop293), $pop287 + i32.const $push286=, 0 + i32.const $push285=, array1 + i32.add $push6=, $0, $pop285 + f32.load $push7=, 0($pop6) + i32.const $push284=, 0 + f32.load $push8=, counter1($pop284) + f32.add $push283=, $pop7, $pop8 + tee_local $push282=, $4=, $pop283 + f32.store counter1($pop286), $pop282 + i32.const $push281=, 0 + i32.const $push280=, array2 + i32.add $push9=, $0, $pop280 + f32.load $push10=, 0($pop9) + i32.const $push279=, 0 + f32.load $push11=, counter2($pop279) + f32.add $push278=, $pop10, $pop11 + tee_local $push277=, $5=, $pop278 + f32.store counter2($pop281), $pop277 + i32.const $push276=, 0 + i32.const $push275=, array3 + i32.add $push12=, $0, $pop275 + f32.load $push13=, 0($pop12) + i32.const $push274=, 0 + f32.load $push14=, counter3($pop274) + f32.add $push273=, $pop13, $pop14 + tee_local $push272=, $6=, $pop273 + f32.store counter3($pop276), $pop272 + i32.const $push271=, 0 + i32.const $push270=, array4 + i32.add $push15=, $0, $pop270 + f32.load $push16=, 0($pop15) + i32.const $push269=, 0 + f32.load $push17=, counter4($pop269) + f32.add $push268=, $pop16, $pop17 + tee_local $push267=, $7=, $pop268 + f32.store counter4($pop271), $pop267 + i32.const $push266=, 0 + i32.const $push265=, array5 + i32.add $push18=, $0, $pop265 + f32.load $push19=, 0($pop18) + i32.const $push264=, 0 + f32.load $push20=, counter5($pop264) + f32.add $push263=, $pop19, $pop20 + tee_local $push262=, $8=, $pop263 + f32.store counter5($pop266), $pop262 + i32.const $push261=, 0 + i32.add $push260=, $1, $13 + tee_local $push259=, $0=, $pop260 + i32.const $push258=, array0 + i32.add $push21=, $pop259, $pop258 + f32.load $push22=, 0($pop21) + f32.add $push23=, $3, $pop22 + f32.store counter0($pop261), $pop23 + i32.const $push257=, 0 + i32.const $push256=, array1 + i32.add $push24=, $0, $pop256 + f32.load $push25=, 0($pop24) + f32.add $push26=, $4, $pop25 + f32.store counter1($pop257), $pop26 + i32.const $push255=, 0 + i32.const $push254=, array2 + i32.add $push27=, $0, $pop254 + f32.load $push28=, 0($pop27) + f32.add $push29=, $5, $pop28 + f32.store counter2($pop255), $pop29 + i32.const $push253=, 0 + i32.const $push252=, array3 + i32.add $push30=, $0, $pop252 + f32.load $push31=, 0($pop30) + f32.add $push32=, $6, $pop31 + f32.store counter3($pop253), $pop32 + i32.const $push251=, 0 + i32.const $push250=, array4 + i32.add $push33=, $0, $pop250 + f32.load $push34=, 0($pop33) + f32.add $push35=, $7, $pop34 + f32.store counter4($pop251), $pop35 + i32.const $push249=, 0 + i32.const $push248=, array5 + i32.add $push36=, $0, $pop248 + f32.load $push37=, 0($pop36) + f32.add $push38=, $8, $pop37 + f32.store counter5($pop249), $pop38 + i32.const $push247=, 0 + i32.load $0=, vol($pop247) + i32.const $push246=, 0 + i32.load $9=, vol($pop246) + i32.const $push245=, 0 + i32.load $10=, vol($pop245) + i32.const $push244=, 0 + i32.load $11=, vol($pop244) + i32.const $push243=, 0 + i32.load $12=, vol($pop243) + i32.const $push242=, 0 + i32.const $push241=, 0 + i32.load $push39=, vol($pop241) + i32.add $push40=, $0, $pop39 + i32.store vol($pop242), $pop40 + i32.const $push240=, 0 + i32.const $push239=, 0 + i32.load $push41=, vol($pop239) + i32.add $push42=, $9, $pop41 + i32.store vol($pop240), $pop42 + i32.const $push238=, 0 + i32.const $push237=, 0 + i32.load $push43=, vol($pop237) + i32.add $push44=, $10, $pop43 + i32.store vol($pop238), $pop44 + i32.const $push236=, 0 + i32.const $push235=, 0 + i32.load $push45=, vol($pop235) + i32.add $push46=, $11, $pop45 + i32.store vol($pop236), $pop46 + i32.const $push234=, 0 + i32.const $push233=, 0 + i32.load $push47=, vol($pop233) + i32.add $push48=, $12, $pop47 + i32.store vol($pop234), $pop48 + i32.const $push232=, 0 + i32.const $push231=, 0 + i32.load $push49=, vol($pop231) + i32.add $push50=, $0, $pop49 + i32.store vol($pop232), $pop50 + i32.const $push230=, 0 + i32.const $push229=, 0 + i32.load $push51=, vol($pop229) + i32.add $push52=, $9, $pop51 + i32.store vol($pop230), $pop52 + i32.const $push228=, 0 + i32.const $push227=, 0 + i32.load $push53=, vol($pop227) + i32.add $push54=, $10, $pop53 + i32.store vol($pop228), $pop54 + i32.const $push226=, 0 + i32.const $push225=, 0 + i32.load $push55=, vol($pop225) + i32.add $push56=, $11, $pop55 + i32.store vol($pop226), $pop56 + i32.const $push224=, 0 + i32.const $push223=, 0 + i32.load $push57=, vol($pop223) + i32.add $push58=, $12, $pop57 + i32.store vol($pop224), $pop58 + i32.const $push222=, 0 + i32.const $push221=, 0 + i32.load $push59=, vol($pop221) + i32.add $push60=, $0, $pop59 + i32.store vol($pop222), $pop60 + i32.const $push220=, 0 + i32.const $push219=, 0 + i32.load $push61=, vol($pop219) + i32.add $push62=, $9, $pop61 + i32.store vol($pop220), $pop62 + i32.const $push218=, 0 + i32.const $push217=, 0 + i32.load $push63=, vol($pop217) + i32.add $push64=, $10, $pop63 + i32.store vol($pop218), $pop64 + i32.const $push216=, 0 + i32.const $push215=, 0 + i32.load $push65=, vol($pop215) + i32.add $push66=, $11, $pop65 + i32.store vol($pop216), $pop66 + i32.const $push214=, 0 + i32.const $push213=, 0 + i32.load $push67=, vol($pop213) + i32.add $push68=, $12, $pop67 + i32.store vol($pop214), $pop68 + i32.const $push212=, 0 + i32.const $push211=, 0 + i32.load $push69=, vol($pop211) + i32.add $push70=, $0, $pop69 + i32.store vol($pop212), $pop70 + i32.const $push210=, 0 + i32.const $push209=, 0 + i32.load $push71=, vol($pop209) + i32.add $push72=, $9, $pop71 + i32.store vol($pop210), $pop72 + i32.const $push208=, 0 + i32.const $push207=, 0 + i32.load $push73=, vol($pop207) + i32.add $push74=, $10, $pop73 + i32.store vol($pop208), $pop74 + i32.const $push206=, 0 + i32.const $push205=, 0 + i32.load $push75=, vol($pop205) + i32.add $push76=, $11, $pop75 + i32.store vol($pop206), $pop76 + i32.const $push204=, 0 + i32.const $push203=, 0 + i32.load $push77=, vol($pop203) + i32.add $push78=, $12, $pop77 + i32.store vol($pop204), $pop78 + i32.const $push202=, 0 + i32.const $push201=, 0 + i32.load $push79=, vol($pop201) + i32.add $push80=, $0, $pop79 + i32.store vol($pop202), $pop80 + i32.const $push200=, 0 + i32.const $push199=, 0 + i32.load $push81=, vol($pop199) + i32.add $push82=, $9, $pop81 + i32.store vol($pop200), $pop82 + i32.const $push198=, 0 + i32.const $push197=, 0 + i32.load $push83=, vol($pop197) + i32.add $push84=, $10, $pop83 + i32.store vol($pop198), $pop84 + i32.const $push196=, 0 + i32.const $push195=, 0 + i32.load $push85=, vol($pop195) + i32.add $push86=, $11, $pop85 + i32.store vol($pop196), $pop86 + i32.const $push194=, 0 + i32.const $push193=, 0 + i32.load $push87=, vol($pop193) + i32.add $push88=, $12, $pop87 + i32.store vol($pop194), $pop88 + i32.const $push192=, 0 + i32.const $push191=, 0 + i32.load $push89=, vol($pop191) + i32.add $push90=, $0, $pop89 + i32.store vol($pop192), $pop90 + i32.const $push190=, 0 + i32.const $push189=, 0 + i32.load $push91=, vol($pop189) + i32.add $push92=, $9, $pop91 + i32.store vol($pop190), $pop92 + i32.const $push188=, 0 + i32.const $push187=, 0 + i32.load $push93=, vol($pop187) + i32.add $push94=, $10, $pop93 + i32.store vol($pop188), $pop94 + i32.const $push186=, 0 + i32.const $push185=, 0 + i32.load $push95=, vol($pop185) + i32.add $push96=, $11, $pop95 + i32.store vol($pop186), $pop96 + i32.const $push184=, 0 + i32.const $push183=, 0 + i32.load $push97=, vol($pop183) + i32.add $push98=, $12, $pop97 + i32.store vol($pop184), $pop98 + i32.const $push182=, 0 + i32.const $push181=, 0 + i32.load $push99=, vol($pop181) + i32.add $push100=, $0, $pop99 + i32.store vol($pop182), $pop100 + i32.const $push180=, 0 + i32.const $push179=, 0 + i32.load $push101=, vol($pop179) + i32.add $push102=, $9, $pop101 + i32.store vol($pop180), $pop102 + i32.const $push178=, 0 + i32.const $push177=, 0 + i32.load $push103=, vol($pop177) + i32.add $push104=, $10, $pop103 + i32.store vol($pop178), $pop104 + i32.const $push176=, 0 + i32.const $push175=, 0 + i32.load $push105=, vol($pop175) + i32.add $push106=, $11, $pop105 + i32.store vol($pop176), $pop106 + i32.const $push174=, 0 + i32.const $push173=, 0 + i32.load $push107=, vol($pop173) + i32.add $push108=, $12, $pop107 + i32.store vol($pop174), $pop108 + i32.const $push172=, 0 + i32.const $push171=, 0 + i32.load $push109=, vol($pop171) + i32.add $push110=, $0, $pop109 + i32.store vol($pop172), $pop110 + i32.const $push170=, 0 + i32.const $push169=, 0 + i32.load $push111=, vol($pop169) + i32.add $push112=, $9, $pop111 + i32.store vol($pop170), $pop112 + i32.const $push168=, 0 + i32.const $push167=, 0 + i32.load $push113=, vol($pop167) + i32.add $push114=, $10, $pop113 + i32.store vol($pop168), $pop114 + i32.const $push166=, 0 + i32.const $push165=, 0 + i32.load $push115=, vol($pop165) + i32.add $push116=, $11, $pop115 + i32.store vol($pop166), $pop116 + i32.const $push164=, 0 + i32.const $push163=, 0 + i32.load $push117=, vol($pop163) + i32.add $push118=, $12, $pop117 + i32.store vol($pop164), $pop118 + i32.const $push162=, 0 + i32.const $push161=, 0 + i32.load $push119=, vol($pop161) + i32.add $push120=, $0, $pop119 + i32.store vol($pop162), $pop120 + i32.const $push160=, 0 + i32.const $push159=, 0 + i32.load $push121=, vol($pop159) + i32.add $push122=, $9, $pop121 + i32.store vol($pop160), $pop122 + i32.const $push158=, 0 + i32.const $push157=, 0 + i32.load $push123=, vol($pop157) + i32.add $push124=, $10, $pop123 + i32.store vol($pop158), $pop124 + i32.const $push156=, 0 + i32.const $push155=, 0 + i32.load $push125=, vol($pop155) + i32.add $push126=, $11, $pop125 + i32.store vol($pop156), $pop126 + i32.const $push154=, 0 + i32.const $push153=, 0 + i32.load $push127=, vol($pop153) + i32.add $push128=, $12, $pop127 + i32.store vol($pop154), $pop128 + i32.const $push152=, 0 + i32.const $push151=, 0 + i32.load $push129=, vol($pop151) + i32.add $push130=, $0, $pop129 + i32.store vol($pop152), $pop130 + i32.const $push150=, 0 + i32.const $push149=, 0 + i32.load $push131=, vol($pop149) + i32.add $push132=, $9, $pop131 + i32.store vol($pop150), $pop132 + i32.const $push148=, 0 + i32.const $push147=, 0 + i32.load $push133=, vol($pop147) + i32.add $push134=, $10, $pop133 + i32.store vol($pop148), $pop134 + i32.const $push146=, 0 + i32.const $push145=, 0 + i32.load $push135=, vol($pop145) + i32.add $push136=, $11, $pop135 + i32.store vol($pop146), $pop136 + i32.const $push144=, 0 + i32.const $push143=, 0 + i32.load $push137=, vol($pop143) + i32.add $push138=, $12, $pop137 + i32.store vol($pop144), $pop138 + i32.const $push142=, 12 + i32.add $13=, $13, $pop142 + i32.const $push141=, 0 + i32.load $push139=, stop($pop141) + i32.eqz $push294=, $pop139 + br_if 0, $pop294 # 0: up to label0 +# BB#2: # %do.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1073741824 + i32.store array0+20($pop1), $pop0 + i32.const $push53=, 0 + i32.const $push2=, 1065353216 + i32.store array0+4($pop53), $pop2 + i32.const $push52=, 0 + i32.const $push51=, 1065353216 + i32.store array1+4($pop52), $pop51 + i32.const $push50=, 0 + i32.const $push49=, 1073741824 + i32.store array1+20($pop50), $pop49 + i32.const $push48=, 0 + i32.const $push47=, 1065353216 + i32.store array2+4($pop48), $pop47 + i32.const $push46=, 0 + i32.const $push45=, 1073741824 + i32.store array2+20($pop46), $pop45 + i32.const $push44=, 0 + i32.const $push43=, 1065353216 + i32.store array3+4($pop44), $pop43 + i32.const $push42=, 0 + i32.const $push41=, 1073741824 + i32.store array3+20($pop42), $pop41 + i32.const $push40=, 0 + i32.const $push39=, 1065353216 + i32.store array4+4($pop40), $pop39 + i32.const $push38=, 0 + i32.const $push37=, 1073741824 + i32.store array4+20($pop38), $pop37 + i32.const $push36=, 0 + i32.const $push35=, 1065353216 + i32.store array5+4($pop36), $pop35 + i32.const $push34=, 0 + i32.const $push33=, 1073741824 + i32.store array5+20($pop34), $pop33 + i32.const $push3=, 1 + call foo@FUNCTION, $pop3 + i32.const $push32=, 0 + f32.load $push7=, counter0($pop32) + f32.const $push5=, 0x1.8p1 + f32.ne $push8=, $pop7, $pop5 + i32.const $push31=, 0 + f32.load $push4=, counter1($pop31) + f32.const $push30=, 0x1.8p1 + f32.ne $push6=, $pop4, $pop30 + i32.or $push9=, $pop8, $pop6 + i32.const $push29=, 0 + f32.load $push10=, counter2($pop29) + f32.const $push28=, 0x1.8p1 + f32.ne $push11=, $pop10, $pop28 + i32.or $push12=, $pop9, $pop11 + i32.const $push27=, 0 + f32.load $push13=, counter3($pop27) + f32.const $push26=, 0x1.8p1 + f32.ne $push14=, $pop13, $pop26 + i32.or $push15=, $pop12, $pop14 + i32.const $push25=, 0 + f32.load $push16=, counter4($pop25) + f32.const $push24=, 0x1.8p1 + f32.ne $push17=, $pop16, $pop24 + i32.or $push18=, $pop15, $pop17 + i32.const $push23=, 0 + f32.load $push19=, counter5($pop23) + f32.const $push22=, 0x1.8p1 + f32.ne $push20=, $pop19, $pop22 + i32.or $push21=, $pop18, $pop20 + # fallthrough-return: $pop21 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden counter0 # @counter0 + .type counter0,@object + .section .bss.counter0,"aw",@nobits + .globl counter0 + .p2align 2 +counter0: + .int32 0 # float 0 + .size counter0, 4 + + .hidden counter1 # @counter1 + .type counter1,@object + .section .bss.counter1,"aw",@nobits + .globl counter1 + .p2align 2 +counter1: + .int32 0 # float 0 + .size counter1, 4 + + .hidden counter2 # @counter2 + .type counter2,@object + .section .bss.counter2,"aw",@nobits + .globl counter2 + .p2align 2 +counter2: + .int32 0 # float 0 + .size counter2, 4 + + .hidden counter3 # @counter3 + .type counter3,@object + .section .bss.counter3,"aw",@nobits + .globl counter3 + .p2align 2 +counter3: + .int32 0 # float 0 + .size counter3, 4 + + .hidden counter4 # @counter4 + .type counter4,@object + .section .bss.counter4,"aw",@nobits + .globl counter4 + .p2align 2 +counter4: + .int32 0 # float 0 + .size counter4, 4 + + .hidden counter5 # @counter5 + .type counter5,@object + .section .bss.counter5,"aw",@nobits + .globl counter5 + .p2align 2 +counter5: + .int32 0 # float 0 + .size counter5, 4 + + .hidden stop # @stop + .type stop,@object + .section .data.stop,"aw",@progbits + .globl stop + .p2align 2 +stop: + .int32 1 # 0x1 + .size stop, 4 + + .hidden array0 # @array0 + .type array0,@object + .section .bss.array0,"aw",@nobits + .globl array0 + .p2align 4 +array0: + .skip 64 + .size array0, 64 + + .hidden array1 # @array1 + .type array1,@object + .section .bss.array1,"aw",@nobits + .globl array1 + .p2align 4 +array1: + .skip 64 + .size array1, 64 + + .hidden array2 # @array2 + .type array2,@object + .section .bss.array2,"aw",@nobits + .globl array2 + .p2align 4 +array2: + .skip 64 + .size array2, 64 + + .hidden array3 # @array3 + .type array3,@object + .section .bss.array3,"aw",@nobits + .globl array3 + .p2align 4 +array3: + .skip 64 + .size array3, 64 + + .hidden array4 # @array4 + .type array4,@object + .section .bss.array4,"aw",@nobits + .globl array4 + .p2align 4 +array4: + .skip 64 + .size array4, 64 + + .hidden array5 # @array5 + .type array5,@object + .section .bss.array5,"aw",@nobits + .globl array5 + .p2align 4 +array5: + .skip 64 + .size array5, 64 + + .hidden vol # @vol + .type vol,@object + .section .bss.vol,"aw",@nobits + .globl vol + .p2align 2 +vol: + .int32 0 # 0x0 + .size vol, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr15262-1.c.s b/src/binaryen/test/torture-s/pr15262-1.c.s new file mode 100644 index 0000000000..94b85726a7 --- /dev/null +++ b/src/binaryen/test/torture-s/pr15262-1.c.s @@ -0,0 +1,30 @@ + .text + .file "pr15262-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr15262-2.c.s b/src/binaryen/test/torture-s/pr15262-2.c.s new file mode 100644 index 0000000000..67614715b8 --- /dev/null +++ b/src/binaryen/test/torture-s/pr15262-2.c.s @@ -0,0 +1,59 @@ + .text + .file "pr15262-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + i32.load $push9=, 0($0) + tee_local $push8=, $0=, $pop9 + i32.const $push0=, 3 + i32.store 0($pop8), $pop0 + i32.const $push1=, 2 + i32.store 0($1), $pop1 + i32.const $push2=, 0 + f32.load $push4=, 0($2) + i32.const $push7=, 0 + f32.load $push3=, X($pop7) + f32.add $push5=, $pop4, $pop3 + f32.store X($pop2), $pop5 + i32.load $push6=, 0($0) + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local f32 +# BB#0: # %if.end + i32.const $push0=, 0 + i32.const $push5=, 0 + f32.load $push4=, X($pop5) + tee_local $push3=, $0=, $pop4 + f32.add $push1=, $pop3, $0 + f32.store X($pop0), $pop1 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden X # @X + .type X,@object + .section .bss.X,"aw",@nobits + .globl X + .p2align 2 +X: + .int32 0 # float 0 + .size X, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr15262.c.s b/src/binaryen/test/torture-s/pr15262.c.s new file mode 100644 index 0000000000..a80b3982ad --- /dev/null +++ b/src/binaryen/test/torture-s/pr15262.c.s @@ -0,0 +1,60 @@ + .text + .file "pr15262.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + i32.const $push0=, 1084647014 + i32.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push3=, 0 + i32.load $3=, __stack_pointer($pop3) + i32.const $push0=, 1 + i32.store 4($0), $pop0 + i32.const $push4=, 16 + i32.sub $push11=, $3, $pop4 + tee_local $push10=, $0=, $pop11 + i32.const $push5=, 8 + i32.add $push6=, $pop10, $pop5 + i32.const $push7=, 12 + i32.add $push8=, $0, $pop7 + i32.select $push1=, $pop6, $pop8, $1 + i32.const $push2=, 1084647014 + i32.store 0($pop1), $pop2 + i32.const $push9=, 1 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr15296.c.s b/src/binaryen/test/torture-s/pr15296.c.s new file mode 100644 index 0000000000..b0a1f07f7e --- /dev/null +++ b/src/binaryen/test/torture-s/pr15296.c.s @@ -0,0 +1,212 @@ + .text + .file "pr15296.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.ge_s $push1=, $3, $4 + br_if 0, $pop1 # 0: down to label0 +.LBB0_1: # %l0 + # =>This Inner Loop Header: Depth=1 + loop # label1: + br 0 # 0: up to label1 +.LBB0_2: # %if.end.split + end_loop + end_block # label0: + block + block + block + i32.eqz $push16=, $3 + br_if 0, $pop16 # 0: down to label4 +# BB#3: # %if.end3 + br_if 1, $5 # 1: down to label3 +# BB#4: # %if.end6 + i32.const $push2=, 4 + i32.add $push3=, $1, $pop2 + i32.load $push0=, 0($1) + i32.load $push13=, 0($pop0) + tee_local $push12=, $5=, $pop13 + i32.store 0($pop3), $pop12 + br_if 2, $5 # 2: down to label2 +# BB#5: + i32.const $push10=, 12 + i32.const $push11=, -1 + i32.store 0($pop10), $pop11 + return +.LBB0_6: + end_block # label4: + i32.const $5=, 0 +.LBB0_7: # %l3 + end_block # label3: + i32.const $push4=, 4 + i32.add $push5=, $1, $pop4 + i32.store 0($pop5), $5 + block + block + i32.const $push6=, 8 + i32.add $push7=, $1, $pop6 + i32.load $push15=, 0($pop7) + tee_local $push14=, $3=, $pop15 + br_if 0, $pop14 # 0: down to label6 +# BB#8: # %if.end19 + i32.eqz $push17=, $5 + br_if 1, $pop17 # 1: down to label5 +# BB#9: # %if.end24 + i32.const $push8=, 8 + i32.add $push9=, $5, $pop8 + i32.store 0($pop9), $3 + return +.LBB0_10: # %if.then18 + end_block # label6: + call g@FUNCTION, $5, $5 + unreachable +.LBB0_11: # %if.then23 + end_block # label5: + call g@FUNCTION, $5, $5 + unreachable +.LBB0_12: # %if.then11 + end_block # label2: + call g@FUNCTION, $5, $5 + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32, i32 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size g, .Lfunc_end1-g + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push38=, 0 + i32.const $push36=, 0 + i32.load $push35=, __stack_pointer($pop36) + i32.const $push37=, 48 + i32.sub $push53=, $pop35, $pop37 + tee_local $push52=, $1=, $pop53 + i32.store __stack_pointer($pop38), $pop52 + i32.const $push0=, 0 + i64.load $push1=, .Lmain.uv+8($pop0) + i64.store 40($1), $pop1 + i32.const $push51=, 0 + i64.load $push2=, .Lmain.uv($pop51) + i64.store 32($1), $pop2 + i32.const $push3=, 24 + i32.add $push4=, $1, $pop3 + i32.const $push50=, 0 + i32.load $push5=, .Lmain.s+16($pop50) + i32.store 0($pop4), $pop5 + i32.const $push6=, 16 + i32.add $push49=, $1, $pop6 + tee_local $push48=, $0=, $pop49 + i32.const $push47=, 0 + i64.load $push7=, .Lmain.s+8($pop47):p2align=2 + i64.store 0($pop48), $pop7 + i32.const $push46=, 0 + i64.load $push8=, .Lmain.s($pop46):p2align=2 + i64.store 8($1), $pop8 + i32.const $push45=, 0 + i32.const $push39=, 8 + i32.add $push40=, $1, $pop39 + i32.const $push10=, 20000 + i32.const $push9=, 10000 + i32.const $push41=, 32 + i32.add $push42=, $1, $pop41 + call f@FUNCTION, $pop45, $pop40, $1, $pop10, $pop9, $pop42 + block + i32.load $push11=, 12($1) + i32.const $push43=, 32 + i32.add $push44=, $1, $pop43 + i32.ne $push12=, $pop11, $pop44 + br_if 0, $pop12 # 0: down to label7 +# BB#1: # %lor.lhs.false + i32.load $push13=, 0($0) + br_if 0, $pop13 # 0: down to label7 +# BB#2: # %lor.lhs.false6 + i32.const $push14=, 20 + i32.add $push15=, $1, $pop14 + i32.load $push16=, 0($pop15) + i32.const $push17=, 999 + i32.ne $push18=, $pop16, $pop17 + br_if 0, $pop18 # 0: down to label7 +# BB#3: # %lor.lhs.false11 + i32.const $push19=, 24 + i32.add $push20=, $1, $pop19 + i32.load $push21=, 0($pop20) + i32.const $push22=, 777 + i32.ne $push23=, $pop21, $pop22 + br_if 0, $pop23 # 0: down to label7 +# BB#4: # %lor.lhs.false16 + i32.load $push25=, 32($1) + i32.const $push24=, 111 + i32.ne $push26=, $pop25, $pop24 + br_if 0, $pop26 # 0: down to label7 +# BB#5: # %lor.lhs.false20 + i32.load $push28=, 36($1) + i32.const $push27=, 222 + i32.ne $push29=, $pop28, $pop27 + br_if 0, $pop29 # 0: down to label7 +# BB#6: # %lor.lhs.false24 + i32.load $push30=, 40($1) + br_if 0, $pop30 # 0: down to label7 +# BB#7: # %lor.lhs.false28 + i32.load $push32=, 44($1) + i32.const $push31=, 444 + i32.ne $push33=, $pop32, $pop31 + br_if 0, $pop33 # 0: down to label7 +# BB#8: # %if.end + i32.const $push34=, 0 + call exit@FUNCTION, $pop34 + unreachable +.LBB2_9: # %if.then + end_block # label7: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type .Lmain.uv,@object # @main.uv + .section .rodata.cst16,"aM",@progbits,16 + .p2align 4 +.Lmain.uv: + .int32 111 # 0x6f + .int32 222 # 0xde + .int32 333 # 0x14d + .int32 444 # 0x1bc + .size .Lmain.uv, 16 + + .type .Lmain.s,@object # @main.s + .section .rodata..Lmain.s,"a",@progbits + .p2align 2 +.Lmain.s: + .int32 0 + .int32 555 # 0x22b + .skip 4 + .int32 999 # 0x3e7 + .int32 777 # 0x309 + .size .Lmain.s, 20 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr16790-1.c.s b/src/binaryen/test/torture-s/pr16790-1.c.s new file mode 100644 index 0000000000..d12aefd2c4 --- /dev/null +++ b/src/binaryen/test/torture-s/pr16790-1.c.s @@ -0,0 +1,17 @@ + .text + .file "pr16790-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr17078-1.c.s b/src/binaryen/test/torture-s/pr17078-1.c.s new file mode 100644 index 0000000000..0ac3292cf7 --- /dev/null +++ b/src/binaryen/test/torture-s/pr17078-1.c.s @@ -0,0 +1,31 @@ + .text + .file "pr17078-1.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr17133.c.s b/src/binaryen/test/torture-s/pr17133.c.s new file mode 100644 index 0000000000..3578744cee --- /dev/null +++ b/src/binaryen/test/torture-s/pr17133.c.s @@ -0,0 +1,134 @@ + .text + .file "pr17133.c" + .section .text.pure_alloc,"ax",@progbits + .hidden pure_alloc # -- Begin function pure_alloc + .globl pure_alloc + .type pure_alloc,@function +pure_alloc: # @pure_alloc + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push15=, 0 + i32.load $push14=, foo($pop15) + tee_local $push13=, $3=, $pop14 + i32.const $push12=, 2 + i32.add $push11=, $pop13, $pop12 + tee_local $push10=, $2=, $pop11 + i32.store foo($pop0), $pop10 + i32.const $push9=, 0 + i32.load $0=, bar($pop9) + block + i32.const $push8=, 0 + i32.load $push7=, baz($pop8) + tee_local $push6=, $1=, $pop7 + i32.lt_u $push1=, $2, $pop6 + br_if 0, $pop1 # 0: down to label0 +# BB#1: + i32.const $push16=, 2 + i32.gt_u $3=, $1, $pop16 +.LBB0_2: # %if.end + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.eqz $push18=, $3 + br_if 0, $pop18 # 0: up to label1 +# BB#3: # %while.cond.if.then_crit_edge + end_loop + i32.const $3=, 0 + i32.const $push17=, 0 + i32.const $push2=, 2 + i32.store foo($pop17), $pop2 +.LBB0_4: # %if.then + end_block # label0: + i32.add $push3=, $0, $3 + i32.const $push4=, -2 + i32.and $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size pure_alloc, .Lfunc_end0-pure_alloc + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push14=, 0 + i32.load $push1=, foo($pop14) + i32.const $push13=, 2 + i32.add $push12=, $pop1, $pop13 + tee_local $push11=, $0=, $pop12 + i32.store foo($pop0), $pop11 + block + block + i32.const $push10=, 0 + i32.load $push9=, baz($pop10) + tee_local $push8=, $1=, $pop9 + i32.ge_u $push2=, $0, $pop8 + br_if 0, $pop2 # 0: down to label3 +# BB#1: # %pure_alloc.exit + i32.eqz $push16=, $0 + br_if 1, $pop16 # 1: down to label2 +# BB#2: # %if.end + i32.const $push7=, 0 + return $pop7 +.LBB1_3: # %if.end.lr.ph.i + end_block # label3: + block + i32.const $push15=, 2 + i32.le_u $push3=, $1, $pop15 + br_if 0, $pop3 # 0: down to label4 +# BB#4: # %pure_alloc.exit.thread.split + i32.const $push5=, 0 + i32.const $push4=, 2 + i32.store foo($pop5), $pop4 + i32.const $push6=, 0 + return $pop6 +.LBB1_5: # %if.end.i + # =>This Inner Loop Header: Depth=1 + end_block # label4: + loop # label5: + br 0 # 0: up to label5 +.LBB1_6: # %if.then + end_loop + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden foo # @foo + .type foo,@object + .section .bss.foo,"aw",@nobits + .globl foo + .p2align 2 +foo: + .int32 0 # 0x0 + .size foo, 4 + + .hidden bar # @bar + .type bar,@object + .section .bss.bar,"aw",@nobits + .globl bar + .p2align 2 +bar: + .int32 0 + .size bar, 4 + + .hidden baz # @baz + .type baz,@object + .section .data.baz,"aw",@progbits + .globl baz + .p2align 2 +baz: + .int32 100 # 0x64 + .size baz, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr17252.c.s b/src/binaryen/test/torture-s/pr17252.c.s new file mode 100644 index 0000000000..614de57513 --- /dev/null +++ b/src/binaryen/test/torture-s/pr17252.c.s @@ -0,0 +1,44 @@ + .text + .file "pr17252.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push0=, a + i32.store a($pop7), $pop0 + i32.const $push6=, 0 + i32.const $push1=, a+1 + i32.store8 a($pop6), $pop1 + block + i32.const $push5=, 0 + i32.load $push2=, a($pop5) + i32.const $push4=, a + i32.eq $push3=, $pop2, $pop4 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push8=, 0 + return $pop8 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr19005.c.s b/src/binaryen/test/torture-s/pr19005.c.s new file mode 100644 index 0000000000..5f8a6a6ce1 --- /dev/null +++ b/src/binaryen/test/torture-s/pr19005.c.s @@ -0,0 +1,217 @@ + .text + .file "pr19005.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push20=, v($pop0) + tee_local $push19=, $2=, $pop20 + i32.const $push18=, 255 + i32.and $4=, $pop19, $pop18 + block + block + block + i32.const $push17=, 0 + i32.load $push16=, s($pop17) + tee_local $push15=, $3=, $pop16 + i32.eqz $push22=, $pop15 + br_if 0, $pop22 # 0: down to label2 +# BB#1: # %if.else + i32.ne $push4=, $4, $1 + br_if 2, $pop4 # 2: down to label0 +# BB#2: # %if.else + i32.const $push2=, 1 + i32.add $push3=, $2, $pop2 + i32.const $push21=, 255 + i32.and $push1=, $pop3, $pop21 + i32.eq $push5=, $pop1, $0 + br_if 1, $pop5 # 1: down to label1 + br 2 # 2: down to label0 +.LBB0_3: # %if.then + end_block # label2: + i32.ne $push6=, $4, $0 + br_if 1, $pop6 # 1: down to label0 +# BB#4: # %lor.lhs.false + i32.const $push7=, 1 + i32.add $push8=, $2, $pop7 + i32.const $push9=, 255 + i32.and $push10=, $pop8, $pop9 + i32.ne $push11=, $pop10, $1 + br_if 1, $pop11 # 1: down to label0 +.LBB0_5: # %if.end21 + end_block # label1: + i32.const $push14=, 0 + i32.const $push12=, 1 + i32.xor $push13=, $3, $pop12 + i32.store s($pop14), $pop13 + return +.LBB0_6: # %if.then8 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push23=, 255 + i32.and $1=, $0, $pop23 + i32.const $push0=, 0 + i32.load $push22=, v($pop0) + tee_local $push21=, $2=, $pop22 + i32.const $push20=, 255 + i32.and $4=, $pop21, $pop20 + i32.const $push19=, 1 + i32.add $push1=, $0, $pop19 + i32.const $push18=, 255 + i32.and $0=, $pop1, $pop18 + block + block + block + block + i32.const $push17=, 0 + i32.load $push16=, s($pop17) + tee_local $push15=, $3=, $pop16 + i32.eqz $push35=, $pop15 + br_if 0, $pop35 # 0: down to label6 +# BB#1: # %if.else.i + i32.ne $push3=, $4, $0 + br_if 3, $pop3 # 3: down to label3 +# BB#2: # %if.else.i + i32.const $push27=, 1 + i32.add $push2=, $2, $pop27 + i32.const $push26=, 255 + i32.and $push25=, $pop2, $pop26 + tee_local $push24=, $2=, $pop25 + i32.ne $push4=, $pop24, $1 + br_if 3, $pop4 # 3: down to label3 +# BB#3: # %bar.exit + i32.const $push6=, 0 + i32.const $push5=, 1 + i32.xor $push29=, $3, $pop5 + tee_local $push28=, $5=, $pop29 + i32.store s($pop6), $pop28 + br_if 1, $5 # 1: down to label5 + br 2 # 2: down to label4 +.LBB1_4: # %if.then.i + end_block # label6: + i32.ne $push7=, $4, $1 + br_if 2, $pop7 # 2: down to label3 +# BB#5: # %lor.lhs.false.i + i32.const $push32=, 1 + i32.add $push8=, $2, $pop32 + i32.const $push9=, 255 + i32.and $push31=, $pop8, $pop9 + tee_local $push30=, $2=, $pop31 + i32.ne $push10=, $pop30, $0 + br_if 2, $pop10 # 2: down to label3 +# BB#6: # %bar.exit.thread + i32.const $push11=, 0 + i32.const $push33=, 1 + i32.store s($pop11), $pop33 +.LBB1_7: # %if.else.i40 + end_block # label5: + i32.ne $push12=, $4, $1 + br_if 1, $pop12 # 1: down to label3 +# BB#8: # %if.else.i40 + i32.ne $push13=, $2, $0 + br_if 1, $pop13 # 1: down to label3 +.LBB1_9: # %bar.exit43 + end_block # label4: + i32.const $push14=, 0 + i32.store s($pop14), $3 + i32.const $push34=, 0 + return $pop34 +.LBB1_10: # %if.then8.i + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push0=, -10 + i32.store v($pop6), $pop0 + i32.const $push5=, 0 + i32.load $0=, s($pop5) + i32.const $2=, -11 +.LBB2_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label8: + i32.const $push8=, 2 + i32.add $1=, $2, $pop8 + i32.const $push7=, 1 + i32.add $2=, $2, $pop7 + block + i32.eqz $push12=, $0 + br_if 0, $pop12 # 0: down to label9 +# BB#2: # %if.else.i.i + # in Loop: Header=BB2_1 Depth=1 + i32.xor $push1=, $1, $2 + i32.const $push9=, 255 + i32.and $push2=, $pop1, $pop9 + br_if 2, $pop2 # 2: down to label7 +.LBB2_3: # %foo.exit + # in Loop: Header=BB2_1 Depth=1 + end_block # label9: + i32.const $push11=, 0 + i32.store v($pop11), $1 + i32.const $push10=, 265 + i32.lt_s $push3=, $2, $pop10 + br_if 0, $pop3 # 0: up to label8 +# BB#4: # %for.end + end_loop + i32.const $push4=, 0 + return $pop4 +.LBB2_5: # %if.then19.i.i + end_block # label7: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden v # @v + .type v,@object + .section .bss.v,"aw",@nobits + .globl v + .p2align 2 +v: + .int32 0 # 0x0 + .size v, 4 + + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 2 +s: + .int32 0 # 0x0 + .size s, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr19449.c.s b/src/binaryen/test/torture-s/pr19449.c.s new file mode 100644 index 0000000000..428539e9ed --- /dev/null +++ b/src/binaryen/test/torture-s/pr19449.c.s @@ -0,0 +1,65 @@ + .text + .file "pr19449.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push5=, 0 + i32.load $push1=, y($pop5) + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %entry + i32.const $push6=, 0 + i32.load $push0=, z($pop6) + i32.const $push2=, 3 + i32.ne $push3=, $pop0, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %lor.lhs.false1 + i32.const $push4=, 0 + return $pop4 +.LBB1_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden z # @z + .type z,@object + .section .data.z,"aw",@progbits + .globl z + .p2align 2 +z: + .int32 3 # 0x3 + .size z, 4 + + .hidden y # @y + .type y,@object + .section .bss.y,"aw",@nobits + .globl y + .p2align 2 +y: + .int32 0 # 0x0 + .size y, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr19515.c.s b/src/binaryen/test/torture-s/pr19515.c.s new file mode 100644 index 0000000000..7cfe8e527b --- /dev/null +++ b/src/binaryen/test/torture-s/pr19515.c.s @@ -0,0 +1,17 @@ + .text + .file "pr19515.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr19606.c.s b/src/binaryen/test/torture-s/pr19606.c.s new file mode 100644 index 0000000000..c993c383a7 --- /dev/null +++ b/src/binaryen/test/torture-s/pr19606.c.s @@ -0,0 +1,81 @@ + .text + .file "pr19606.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_s $push1=, a($pop0) + i32.const $push2=, 1 + i32.shr_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_s $push1=, a($pop0) + i32.const $push2=, 5 + i32.rem_u $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.load8_s $push11=, a($pop0) + tee_local $push10=, $0=, $pop11 + i32.const $push1=, 1 + i32.shr_u $push2=, $pop10, $pop1 + i32.const $push3=, 2147483646 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + i32.const $push5=, 5 + i32.rem_u $push6=, $0, $pop5 + i32.const $push7=, 2 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#2: # %if.end7 + i32.const $push9=, 0 + call exit@FUNCTION, $pop9 + unreachable +.LBB2_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a +a: + .int8 252 # 0xfc + .size a, 1 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr19687.c.s b/src/binaryen/test/torture-s/pr19687.c.s new file mode 100644 index 0000000000..c9ce76410c --- /dev/null +++ b/src/binaryen/test/torture-s/pr19687.c.s @@ -0,0 +1,17 @@ + .text + .file "pr19687.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %for.cond.3 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr19689.c.s b/src/binaryen/test/torture-s/pr19689.c.s new file mode 100644 index 0000000000..37df17e044 --- /dev/null +++ b/src/binaryen/test/torture-s/pr19689.c.s @@ -0,0 +1,55 @@ + .text + .file "pr19689.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push7=, 0 + i32.load $push3=, f($pop7) + i32.const $push4=, -536870912 + i32.and $push5=, $pop3, $pop4 + i32.const $push0=, 536870911 + i32.and $push1=, $0, $pop0 + i32.or $push6=, $pop5, $pop1 + i32.store f($pop2), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + i32.const $push7=, 0 + i32.load $push1=, f($pop7) + i32.const $push2=, -536870912 + i32.and $push3=, $pop1, $pop2 + i32.const $push4=, 536870857 + i32.or $push5=, $pop3, $pop4 + i32.store f($pop0), $pop5 + i32.const $push6=, 0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden f # @f + .type f,@object + .section .bss.f,"aw",@nobits + .globl f + .p2align 2 +f: + .skip 4 + .size f, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr20100-1.c.s b/src/binaryen/test/torture-s/pr20100-1.c.s new file mode 100644 index 0000000000..3886e64108 --- /dev/null +++ b/src/binaryen/test/torture-s/pr20100-1.c.s @@ -0,0 +1,144 @@ + .text + .file "pr20100-1.c" + .section .text.frob,"ax",@progbits + .hidden frob # -- Begin function frob + .globl frob + .type frob,@function +frob: # @frob + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store16 p($pop0), $1 + i32.const $push14=, 0 + i32.const $push13=, 0 + i32.const $push1=, 1 + i32.add $push2=, $0, $pop1 + i32.const $push12=, 0 + i32.load8_u $push3=, e($pop12) + i32.const $push4=, -1 + i32.add $push5=, $pop3, $pop4 + i32.eq $push6=, $pop5, $0 + i32.select $push11=, $pop13, $pop2, $pop6 + tee_local $push10=, $0=, $pop11 + i32.store16 g($pop14), $pop10 + i32.const $push7=, 65535 + i32.and $push8=, $0, $pop7 + i32.eq $push9=, $pop8, $1 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end0: + .size frob, .Lfunc_end0-frob + # -- End function + .section .text.get_n,"ax",@progbits + .hidden get_n # -- Begin function get_n + .globl get_n + .type get_n,@function +get_n: # @get_n + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $3=, 0 + block + i32.const $push17=, 0 + i32.load16_u $push16=, p($pop17) + tee_local $push15=, $0=, $pop16 + i32.const $push14=, 0 + i32.load16_u $push13=, g($pop14) + tee_local $push12=, $2=, $pop13 + i32.eq $push0=, $pop15, $pop12 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %while.body.lr.ph + i32.const $push18=, 0 + i32.load8_u $push1=, e($pop18) + i32.const $push2=, -1 + i32.add $1=, $pop1, $pop2 + i32.const $3=, 0 +.LBB1_2: # %while.body + # =>This Inner Loop Header: Depth=1 + block + loop # label2: + i32.const $push28=, 0 + i32.const $push27=, 65535 + i32.and $push26=, $2, $pop27 + tee_local $push25=, $2=, $pop26 + i32.const $push24=, 1 + i32.add $push4=, $pop25, $pop24 + i32.eq $push3=, $1, $2 + i32.select $2=, $pop28, $pop4, $pop3 + i32.const $push23=, 1 + i32.add $push22=, $3, $pop23 + tee_local $push21=, $3=, $pop22 + i32.const $push20=, 65535 + i32.and $push5=, $pop21, $pop20 + i32.const $push19=, 4 + i32.gt_u $push6=, $pop5, $pop19 + br_if 1, $pop6 # 1: down to label1 +# BB#3: # %while.body + # in Loop: Header=BB1_2 Depth=1 + i32.const $push29=, 65535 + i32.and $push7=, $2, $pop29 + i32.ne $push8=, $0, $pop7 + br_if 0, $pop8 # 0: up to label2 +.LBB1_4: # %while.cond.while.end_crit_edge + end_loop + end_block # label1: + i32.const $push9=, 0 + i32.store16 g($pop9), $2 +.LBB1_5: # %while.end + end_block # label0: + i32.const $push10=, 65535 + i32.and $push11=, $3, $pop10 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end1: + .size get_n, .Lfunc_end1-get_n + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, 2 + i32.store16 p($pop1), $pop0 + i32.const $push6=, 0 + i32.const $push2=, 3 + i32.store8 e($pop6), $pop2 + i32.const $push5=, 0 + i32.const $push4=, 2 + i32.store16 g($pop5), $pop4 + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type g,@object # @g + .section .bss.g,"aw",@nobits + .p2align 1 +g: + .int16 0 # 0x0 + .size g, 2 + + .type p,@object # @p + .section .bss.p,"aw",@nobits + .p2align 1 +p: + .int16 0 # 0x0 + .size p, 2 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e +e: + .int8 0 # 0x0 + .size e, 1 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr20187-1.c.s b/src/binaryen/test/torture-s/pr20187-1.c.s new file mode 100644 index 0000000000..70c57bc558 --- /dev/null +++ b/src/binaryen/test/torture-s/pr20187-1.c.s @@ -0,0 +1,73 @@ + .text + .file "pr20187-1.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push3=, b($pop0) + i32.const $push11=, 0 + i32.load $push10=, a($pop11) + tee_local $push9=, $0=, $pop10 + i32.mul $push4=, $pop3, $pop9 + i32.const $push1=, 1 + i32.select $push2=, $0, $pop1, $0 + i32.and $push5=, $pop4, $pop2 + i32.const $push6=, 255 + i32.and $push7=, $pop5, $pop6 + i32.eqz $push8=, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push3=, b($pop0) + i32.const $push12=, 0 + i32.load $push11=, a($pop12) + tee_local $push10=, $0=, $pop11 + i32.mul $push4=, $pop3, $pop10 + i32.const $push1=, 1 + i32.select $push2=, $0, $pop1, $0 + i32.and $push5=, $pop4, $pop2 + i32.const $push6=, 255 + i32.and $push7=, $pop5, $pop6 + i32.const $push9=, 0 + i32.ne $push8=, $pop7, $pop9 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 257 # 0x101 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .data.b,"aw",@progbits + .globl b + .p2align 2 +b: + .int32 256 # 0x100 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr20466-1.c.s b/src/binaryen/test/torture-s/pr20466-1.c.s new file mode 100644 index 0000000000..7f2a249b17 --- /dev/null +++ b/src/binaryen/test/torture-s/pr20466-1.c.s @@ -0,0 +1,118 @@ + .text + .file "pr20466-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32, i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.load $5=, 0($0) + i32.store 0($0), $2 + i32.load $push0=, 0($4) + i32.store 0($3), $pop0 + i32.load $push1=, 0($1) + i32.store 0($5), $pop1 + i32.load $push2=, 0($0) + i32.const $push3=, 99 + i32.store 0($pop2), $pop3 + i32.const $push4=, 3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push25=, 0 + i32.const $push23=, 0 + i32.load $push22=, __stack_pointer($pop23) + i32.const $push24=, 32 + i32.sub $push46=, $pop22, $pop24 + tee_local $push45=, $0=, $pop46 + i32.store __stack_pointer($pop25), $pop45 + i32.const $push4=, 42 + i32.store 28($0), $pop4 + i32.const $push5=, 66 + i32.store 24($0), $pop5 + i32.const $push6=, 1 + i32.store 20($0), $pop6 + i32.const $push7=, -1 + i32.store 16($0), $pop7 + i32.const $push8=, 55 + i32.store 12($0), $pop8 + i32.const $push26=, 28 + i32.add $push27=, $0, $pop26 + i32.store 8($0), $pop27 + i32.const $push28=, 16 + i32.add $push29=, $0, $pop28 + i32.store 4($0), $pop29 + i32.const $push30=, 12 + i32.add $push31=, $0, $pop30 + i32.store 0($0), $pop31 + i32.const $push32=, 8 + i32.add $push33=, $0, $pop32 + i32.const $push34=, 24 + i32.add $push35=, $0, $pop34 + i32.const $push36=, 20 + i32.add $push37=, $0, $pop36 + i32.const $push38=, 4 + i32.add $push39=, $0, $pop38 + i32.call $drop=, f@FUNCTION, $pop33, $pop35, $pop37, $pop39, $0 + block + i32.load $push9=, 28($0) + i32.const $push44=, 66 + i32.ne $push10=, $pop9, $pop44 + br_if 0, $pop10 # 0: down to label0 +# BB#1: # %entry + i32.load $push0=, 8($0) + i32.const $push40=, 20 + i32.add $push41=, $0, $pop40 + copy_local $push1=, $pop41 + i32.ne $push11=, $pop0, $pop1 + br_if 0, $pop11 # 0: down to label0 +# BB#2: # %entry + i32.load $push2=, 20($0) + i32.const $push12=, 99 + i32.ne $push13=, $pop2, $pop12 + br_if 0, $pop13 # 0: down to label0 +# BB#3: # %entry + i32.load $push3=, 16($0) + i32.const $push14=, -1 + i32.ne $push15=, $pop3, $pop14 + br_if 0, $pop15 # 0: down to label0 +# BB#4: # %lor.lhs.false6 + i32.load $push17=, 4($0) + i32.const $push42=, 12 + i32.add $push43=, $0, $pop42 + i32.ne $push18=, $pop17, $pop43 + br_if 0, $pop18 # 0: down to label0 +# BB#5: # %lor.lhs.false6 + i32.load $push16=, 12($0) + i32.const $push19=, 55 + i32.ne $push20=, $pop16, $pop19 + br_if 0, $pop20 # 0: down to label0 +# BB#6: # %if.end + i32.const $push21=, 0 + call exit@FUNCTION, $pop21 + unreachable +.LBB1_7: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr20527-1.c.s b/src/binaryen/test/torture-s/pr20527-1.c.s new file mode 100644 index 0000000000..35ad86dbfa --- /dev/null +++ b/src/binaryen/test/torture-s/pr20527-1.c.s @@ -0,0 +1,118 @@ + .text + .file "pr20527-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32, i32 + .local i32 +# BB#0: # %entry + block + i32.gt_s $push0=, $2, $3 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %for.body.preheader + i32.const $push12=, -1 + i32.add $4=, $2, $pop12 + i32.const $push1=, 2 + i32.shl $push11=, $2, $pop1 + tee_local $push10=, $2=, $pop11 + i32.add $0=, $0, $pop10 + i32.add $push2=, $1, $2 + i32.const $push9=, 4 + i32.add $2=, $pop2, $pop9 + i32.const $1=, 0 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.load $push5=, 0($2) + i32.const $push21=, -4 + i32.add $push3=, $2, $pop21 + i32.load $push4=, 0($pop3) + i32.sub $push6=, $pop5, $pop4 + i32.add $push20=, $pop6, $1 + tee_local $push19=, $1=, $pop20 + i32.const $push18=, -1 + i32.add $push7=, $pop19, $pop18 + i32.store 0($0), $pop7 + i32.const $push17=, 4 + i32.add $0=, $0, $pop17 + i32.const $push16=, 4 + i32.add $2=, $2, $pop16 + i32.const $push15=, 1 + i32.add $push14=, $4, $pop15 + tee_local $push13=, $4=, $pop14 + i32.lt_s $push8=, $pop13, $3 + br_if 0, $pop8 # 0: up to label1 +.LBB0_3: # %for.end + end_loop + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push16=, 0 + i32.const $push14=, 0 + i32.load $push13=, __stack_pointer($pop14) + i32.const $push15=, 16 + i32.sub $push20=, $pop13, $pop15 + tee_local $push19=, $0=, $pop20 + i32.store __stack_pointer($pop16), $pop19 + i32.const $push17=, 4 + i32.add $push18=, $0, $pop17 + i32.const $push2=, b + i32.const $push1=, 0 + i32.const $push0=, 2 + call f@FUNCTION, $pop18, $pop2, $pop1, $pop0 + block + i32.load $push4=, 4($0) + i32.const $push3=, 3 + i32.ne $push5=, $pop4, $pop3 + br_if 0, $pop5 # 0: down to label2 +# BB#1: # %lor.lhs.false + i32.load $push7=, 8($0) + i32.const $push6=, 9 + i32.ne $push8=, $pop7, $pop6 + br_if 0, $pop8 # 0: down to label2 +# BB#2: # %lor.lhs.false3 + i32.load $push10=, 12($0) + i32.const $push9=, 21 + i32.ne $push11=, $pop10, $pop9 + br_if 0, $pop11 # 0: down to label2 +# BB#3: # %if.end + i32.const $push12=, 0 + call exit@FUNCTION, $pop12 + unreachable +.LBB1_4: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden b # @b + .type b,@object + .section .data.b,"aw",@progbits + .globl b + .p2align 4 +b: + .int32 1 # 0x1 + .int32 5 # 0x5 + .int32 11 # 0xb + .int32 23 # 0x17 + .size b, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr20601-1.c.s b/src/binaryen/test/torture-s/pr20601-1.c.s new file mode 100644 index 0000000000..32adc4fb02 --- /dev/null +++ b/src/binaryen/test/torture-s/pr20601-1.c.s @@ -0,0 +1,338 @@ + .text + .file "pr20601-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo +# BB#0: # %entry +.LBB0_1: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + br 0 # 0: up to label0 +.LBB0_2: + end_loop + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %land.rhs.lr.ph.i + i32.const $push35=, 0 + i32.const $push34=, 4 + i32.store b($pop35), $pop34 + i32.const $push33=, 0 + i32.const $push0=, g + i32.store c($pop33), $pop0 + i32.const $0=, g+4 + i32.const $push32=, 0 + i32.const $push31=, g+4 + i32.store e($pop32), $pop31 + i32.const $1=, 3 + i32.const $push30=, 0 + i32.const $push29=, 3 + i32.store d($pop30), $pop29 + i32.const $3=, 1 +.LBB2_1: # %land.rhs.i + # =>This Inner Loop Header: Depth=1 + block + block + block + block + block + loop # label6: + i32.load $push38=, 0($0) + tee_local $push37=, $2=, $pop38 + i32.load8_u $push1=, 0($pop37) + i32.const $push36=, 45 + i32.ne $push2=, $pop1, $pop36 + br_if 1, $pop2 # 1: down to label5 +# BB#2: # %while.body.i + # in Loop: Header=BB2_1 Depth=1 + block + i32.load8_s $push40=, 1($2) + tee_local $push39=, $4=, $pop40 + i32.eqz $push81=, $pop39 + br_if 0, $pop81 # 0: down to label7 +# BB#3: # %land.lhs.true.i + # in Loop: Header=BB2_1 Depth=1 + i32.load8_u $push5=, 2($2) + br_if 5, $pop5 # 5: down to label2 +.LBB2_4: # %if.end.i + # in Loop: Header=BB2_1 Depth=1 + end_block # label7: + block + block + block + block + i32.const $push41=, 80 + i32.eq $push6=, $4, $pop41 + br_if 0, $pop6 # 0: down to label11 +# BB#5: # %if.end.i + # in Loop: Header=BB2_1 Depth=1 + i32.const $push42=, 117 + i32.eq $push7=, $4, $pop42 + br_if 2, $pop7 # 2: down to label9 +# BB#6: # %if.end.i + # in Loop: Header=BB2_1 Depth=1 + i32.const $push43=, 45 + i32.ne $push8=, $4, $pop43 + br_if 1, $pop8 # 1: down to label10 + br 6 # 6: down to label4 +.LBB2_7: # %sw.bb21.i + # in Loop: Header=BB2_1 Depth=1 + end_block # label11: + i32.const $push44=, 4096 + i32.or $3=, $3, $pop44 +.LBB2_8: # %sw.epilog.i + # in Loop: Header=BB2_1 Depth=1 + end_block # label10: + copy_local $4=, $1 + br 1 # 1: down to label8 +.LBB2_9: # %sw.bb.i + # in Loop: Header=BB2_1 Depth=1 + end_block # label9: + i32.load $push16=, 4($0) + i32.eqz $push82=, $pop16 + br_if 5, $pop82 # 5: down to label2 +# BB#10: # %if.end19.i + # in Loop: Header=BB2_1 Depth=1 + i32.const $push53=, 0 + i32.const $push52=, 4 + i32.add $push51=, $0, $pop52 + tee_local $push50=, $0=, $pop51 + i32.store t+4100($pop53), $pop50 + i32.const $push49=, 0 + i32.store e($pop49), $0 + i32.const $push48=, 0 + i32.const $push47=, -1 + i32.add $push46=, $1, $pop47 + tee_local $push45=, $4=, $pop46 + i32.store d($pop48), $pop45 +.LBB2_11: # %sw.epilog.i + # in Loop: Header=BB2_1 Depth=1 + end_block # label8: + i32.const $push62=, 0 + i32.const $push61=, 4 + i32.add $push60=, $0, $pop61 + tee_local $push59=, $0=, $pop60 + i32.store e($pop62), $pop59 + i32.const $push58=, 0 + i32.const $push57=, -1 + i32.add $push56=, $4, $pop57 + tee_local $push55=, $1=, $pop56 + i32.store d($pop58), $pop55 + i32.const $push54=, 1 + i32.gt_s $push17=, $4, $pop54 + br_if 0, $pop17 # 0: up to label6 + br 3 # 3: down to label3 +.LBB2_12: # %while.end.i + end_loop + end_block # label5: + i32.const $push3=, 1 + i32.and $push4=, $3, $pop3 + br_if 1, $pop4 # 1: down to label3 + br 2 # 2: down to label2 +.LBB2_13: # %sw.bb22.i + end_block # label4: + i32.const $push10=, 0 + i32.const $push9=, 4 + i32.add $push67=, $0, $pop9 + tee_local $push66=, $0=, $pop67 + i32.store e($pop10), $pop66 + i32.const $push65=, 0 + i32.const $push11=, -1 + i32.add $push64=, $1, $pop11 + tee_local $push63=, $1=, $pop64 + i32.store d($pop65), $pop63 + i32.const $push14=, 1536 + i32.or $push15=, $3, $pop14 + i32.const $push12=, 1 + i32.eq $push13=, $3, $pop12 + i32.select $3=, $pop15, $3, $pop13 +.LBB2_14: # %setup2.exit + end_block # label3: + i32.const $push69=, 0 + i32.const $push68=, .L.str.4 + i32.store t($pop69), $pop68 + block + i32.const $push18=, 512 + i32.and $push19=, $3, $pop18 + i32.eqz $push83=, $pop19 + br_if 0, $pop83 # 0: down to label12 +# BB#15: # %if.then6.i + i32.const $push74=, 0 + i32.const $push73=, f + i32.store e($pop74), $pop73 + i32.const $push72=, 0 + i32.const $push71=, .L.str.4 + i32.store f($pop72), $pop71 + i32.const $push70=, 0 + i32.const $push20=, 1 + i32.add $push21=, $1, $pop20 + i32.store d($pop70), $pop21 + i32.const $4=, 4 +.LBB2_16: # %for.cond.i + # =>This Inner Loop Header: Depth=1 + loop # label13: + i32.const $push79=, f + i32.add $push22=, $4, $pop79 + i32.add $push23=, $0, $4 + i32.const $push78=, -4 + i32.add $push24=, $pop23, $pop78 + i32.load $push77=, 0($pop24) + tee_local $push76=, $2=, $pop77 + i32.store 0($pop22), $pop76 + i32.const $push75=, 4 + i32.add $4=, $4, $pop75 + br_if 0, $2 # 0: up to label13 +.LBB2_17: # %setup1.exit + end_loop + end_block # label12: + i32.const $push26=, 1024 + i32.and $push27=, $3, $pop26 + i32.eqz $push84=, $pop27 + br_if 1, $pop84 # 1: down to label1 +# BB#18: # %setup1.exit + i32.const $push80=, 0 + i32.load $push25=, a+16($pop80) + br_if 1, $pop25 # 1: down to label1 +.LBB2_19: # %if.then.i + end_block # label2: + call abort@FUNCTION + unreachable +.LBB2_20: # %if.end + end_block # label1: + i32.const $push28=, 0 + call exit@FUNCTION, $pop28 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "a" + .size .L.str, 2 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "-u" + .size .L.str.1, 3 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "b" + .size .L.str.2, 2 + + .type .L.str.3,@object # @.str.3 +.L.str.3: + .asciz "c" + .size .L.str.3, 2 + + .hidden g # @g + .type g,@object + .section .data.g,"aw",@progbits + .globl g + .p2align 4 +g: + .int32 .L.str + .int32 .L.str.1 + .int32 .L.str.2 + .int32 .L.str.3 + .size g, 16 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 + .size c, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + .type .L.str.4,@object # @.str.4 + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str.4: + .asciz "/bin/sh" + .size .L.str.4, 8 + + .hidden t # @t + .type t,@object + .section .bss.t,"aw",@nobits + .globl t + .p2align 2 +t: + .skip 4104 + .size t, 4104 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 4 +a: + .skip 20 + .size a, 20 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .int32 0 # 0x0 + .size d, 4 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e + .p2align 2 +e: + .int32 0 + .size e, 4 + + .hidden f # @f + .type f,@object + .section .bss.f,"aw",@nobits + .globl f + .p2align 4 +f: + .skip 64 + .size f, 64 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr20621-1.c.s b/src/binaryen/test/torture-s/pr20621-1.c.s new file mode 100644 index 0000000000..8664bfa45f --- /dev/null +++ b/src/binaryen/test/torture-s/pr20621-1.c.s @@ -0,0 +1,47 @@ + .text + .file "pr20621-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shl $push1=, $1, $pop0 + i32.add $push2=, $0, $pop1 + i32.load $push3=, 0($pop2) + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push2=, gb+4($pop0) + i32.const $push4=, 0 + i32.load $push1=, gb($pop4) + i32.add $push3=, $pop2, $pop1 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden gb # @gb + .type gb,@object + .section .bss.gb,"aw",@nobits + .globl gb + .p2align 2 +gb: + .skip 65536 + .size gb, 65536 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr21173.c.s b/src/binaryen/test/torture-s/pr21173.c.s new file mode 100644 index 0000000000..ae83d8d325 --- /dev/null +++ b/src/binaryen/test/torture-s/pr21173.c.s @@ -0,0 +1,72 @@ + .text + .file "pr21173.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push10=, 0 + i32.load $push2=, a($pop10) + i32.const $push0=, q + i32.sub $push9=, $0, $pop0 + tee_local $push8=, $0=, $pop9 + i32.add $push3=, $pop2, $pop8 + i32.store a($pop1), $pop3 + i32.const $push7=, 0 + i32.const $push6=, 0 + i32.load $push4=, a+4($pop6) + i32.add $push5=, $pop4, $0 + i32.store a+4($pop7), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push4=, 0 + i32.load $push1=, a($pop4) + i32.const $push3=, 0 + i32.load $push0=, a+4($pop3) + i32.or $push2=, $pop1, $pop0 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %for.cond.1 + i32.const $push5=, 0 + return $pop5 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden q # @q + .type q,@object + .section .bss.q,"aw",@nobits + .globl q +q: + .int8 0 # 0x0 + .size q, 1 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .skip 8 + .size a, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr21331.c.s b/src/binaryen/test/torture-s/pr21331.c.s new file mode 100644 index 0000000000..204f06f15f --- /dev/null +++ b/src/binaryen/test/torture-s/pr21331.c.s @@ -0,0 +1,43 @@ + .text + .file "pr21331.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .result i32 +# BB#0: # %entry + i32.const $push0=, -1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr21964-1.c.s b/src/binaryen/test/torture-s/pr21964-1.c.s new file mode 100644 index 0000000000..ab7f56fec1 --- /dev/null +++ b/src/binaryen/test/torture-s/pr21964-1.c.s @@ -0,0 +1,45 @@ + .text + .file "pr21964-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + block + i32.eqz $push1=, $1 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %entry + i32.eqz $push2=, $0 + br_if 0, $pop2 # 0: down to label0 +# BB#2: # %if.then2.split + call abort@FUNCTION + unreachable +.LBB0_3: # %if.then + end_block # label0: + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr22061-1.c.s b/src/binaryen/test/torture-s/pr22061-1.c.s new file mode 100644 index 0000000000..fb9845dd3b --- /dev/null +++ b/src/binaryen/test/torture-s/pr22061-1.c.s @@ -0,0 +1,60 @@ + .text + .file "pr22061-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push3=, N($pop0) + tee_local $push2=, $1=, $pop3 + i32.add $push1=, $0, $pop2 + i32.store8 0($pop1), $1 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, 4 + i32.store N($pop1), $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden N # @N + .type N,@object + .section .data.N,"aw",@progbits + .globl N + .p2align 2 +N: + .int32 1 # 0x1 + .size N, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr22061-2.c.s b/src/binaryen/test/torture-s/pr22061-2.c.s new file mode 100644 index 0000000000..822ffd9f2c --- /dev/null +++ b/src/binaryen/test/torture-s/pr22061-2.c.s @@ -0,0 +1,28 @@ + .text + .file "pr22061-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 2 +x: + .int32 0 + .size x, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr22098-1.c.s b/src/binaryen/test/torture-s/pr22098-1.c.s new file mode 100644 index 0000000000..e3d7764d8b --- /dev/null +++ b/src/binaryen/test/torture-s/pr22098-1.c.s @@ -0,0 +1,19 @@ + .text + .file "pr22098-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr22098-2.c.s b/src/binaryen/test/torture-s/pr22098-2.c.s new file mode 100644 index 0000000000..bcf8d5a7be --- /dev/null +++ b/src/binaryen/test/torture-s/pr22098-2.c.s @@ -0,0 +1,19 @@ + .text + .file "pr22098-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr22098-3.c.s b/src/binaryen/test/torture-s/pr22098-3.c.s new file mode 100644 index 0000000000..5adfa6c085 --- /dev/null +++ b/src/binaryen/test/torture-s/pr22098-3.c.s @@ -0,0 +1,65 @@ + .text + .file "pr22098-3.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load $push1=, n($pop5) + i32.const $push2=, 1 + i32.add $push4=, $pop1, $pop2 + tee_local $push3=, $0=, $pop4 + i32.store n($pop0), $pop3 + copy_local $push6=, $0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push4=, 0 + i32.load $push3=, n($pop4) + tee_local $push2=, $0=, $pop3 + i32.const $push0=, 1 + i32.add $push1=, $pop2, $pop0 + i32.store n($pop5), $pop1 + block + br_if 0, $0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden n # @n + .type n,@object + .section .bss.n,"aw",@nobits + .globl n + .p2align 2 +n: + .int32 0 # 0x0 + .size n, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr22348.c.s b/src/binaryen/test/torture-s/pr22348.c.s new file mode 100644 index 0000000000..62464db074 --- /dev/null +++ b/src/binaryen/test/torture-s/pr22348.c.s @@ -0,0 +1,39 @@ + .text + .file "pr22348.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 53 + i32.ge_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr22429.c.s b/src/binaryen/test/torture-s/pr22429.c.s new file mode 100644 index 0000000000..f2d0c9cf59 --- /dev/null +++ b/src/binaryen/test/torture-s/pr22429.c.s @@ -0,0 +1,36 @@ + .text + .file "pr22429.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1073741824 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 31 + i32.shr_u $push3=, $pop1, $pop2 + i32.const $push4=, 1 + i32.xor $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr22493-1.c.s b/src/binaryen/test/torture-s/pr22493-1.c.s new file mode 100644 index 0000000000..39331b40af --- /dev/null +++ b/src/binaryen/test/torture-s/pr22493-1.c.s @@ -0,0 +1,32 @@ + .text + .file "pr22493-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr22630.c.s b/src/binaryen/test/torture-s/pr22630.c.s new file mode 100644 index 0000000000..60f21ed052 --- /dev/null +++ b/src/binaryen/test/torture-s/pr22630.c.s @@ -0,0 +1,52 @@ + .text + .file "pr22630.c" + .section .text.bla,"ax",@progbits + .hidden bla # -- Begin function bla + .globl bla + .type bla,@function +bla: # @bla + .param i32 +# BB#0: # %entry + block + i32.const $push0=, j + i32.select $push1=, $0, $pop0, $0 + i32.eq $push2=, $pop1, $0 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.then1 + i32.const $push4=, 0 + i32.const $push3=, 1 + i32.store j($pop4), $pop3 +.LBB0_2: # %if.end2 + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size bla, .Lfunc_end0-bla + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store j($pop1), $pop0 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden j # @j + .type j,@object + .section .bss.j,"aw",@nobits + .globl j + .p2align 2 +j: + .int32 0 # 0x0 + .size j, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr23047.c.s b/src/binaryen/test/torture-s/pr23047.c.s new file mode 100644 index 0000000000..ed208d8853 --- /dev/null +++ b/src/binaryen/test/torture-s/pr23047.c.s @@ -0,0 +1,50 @@ + .text + .file "pr23047.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .local i32 +# BB#0: # %entry + block + i32.const $push0=, 31 + i32.shr_s $push6=, $0, $pop0 + tee_local $push5=, $1=, $pop6 + i32.add $push1=, $0, $pop5 + i32.xor $push2=, $pop1, $1 + i32.const $push3=, -1 + i32.gt_s $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.then + return +.LBB0_2: # %if.end + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2147483648 + call f@FUNCTION, $pop0 + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr23135.c.s b/src/binaryen/test/torture-s/pr23135.c.s new file mode 100644 index 0000000000..ed94e2c8c1 --- /dev/null +++ b/src/binaryen/test/torture-s/pr23135.c.s @@ -0,0 +1,318 @@ + .text + .file "pr23135.c" + .section .text.verify,"ax",@progbits + .hidden verify # -- Begin function verify + .globl verify + .type verify,@function +verify: # @verify + .param i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.ne $push0=, $0, $2 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %entry + i32.ne $push1=, $1, $3 + br_if 0, $pop1 # 0: down to label0 +# BB#2: # %if.end + return +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size verify, .Lfunc_end0-verify + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push100=, 0 + i32.const $push99=, 0 + i32.load $push98=, j+4($pop99) + tee_local $push97=, $5=, $pop98 + i32.const $push96=, 0 + i32.load $push95=, i+4($pop96) + tee_local $push94=, $1=, $pop95 + i32.add $push93=, $pop97, $pop94 + tee_local $push92=, $7=, $pop93 + i32.store res+4($pop100), $pop92 + i32.const $push91=, 0 + i32.const $push90=, 0 + i32.load $push89=, j($pop90) + tee_local $push88=, $4=, $pop89 + i32.const $push87=, 0 + i32.load $push86=, i($pop87) + tee_local $push85=, $0=, $pop86 + i32.add $push84=, $pop88, $pop85 + tee_local $push83=, $6=, $pop84 + i32.store res($pop91), $pop83 + block + i32.const $push0=, 160 + i32.ne $push1=, $6, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %entry + i32.const $push2=, 113 + i32.ne $push3=, $7, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#2: # %verify.exit + i32.const $push4=, 0 + i32.mul $push105=, $4, $0 + tee_local $push104=, $8=, $pop105 + i32.store res($pop4), $pop104 + i32.const $push103=, 0 + i32.mul $push102=, $5, $1 + tee_local $push101=, $9=, $pop102 + i32.store res+4($pop103), $pop101 + i32.const $push5=, 1500 + i32.ne $push6=, $8, $pop5 + br_if 0, $pop6 # 0: down to label1 +# BB#3: # %verify.exit + i32.const $push7=, 1300 + i32.ne $push8=, $9, $pop7 + br_if 0, $pop8 # 0: down to label1 +# BB#4: # %verify.exit48 + i32.const $push9=, 0 + i32.div_s $push110=, $0, $4 + tee_local $push109=, $10=, $pop110 + i32.store res($pop9), $pop109 + i32.const $push108=, 0 + i32.div_s $push107=, $1, $5 + tee_local $push106=, $11=, $pop107 + i32.store res+4($pop108), $pop106 + i32.const $push10=, 15 + i32.ne $push11=, $10, $pop10 + br_if 0, $pop11 # 0: down to label1 +# BB#5: # %verify.exit48 + i32.const $push12=, 7 + i32.ne $push13=, $11, $pop12 + br_if 0, $pop13 # 0: down to label1 +# BB#6: # %verify.exit54 + i32.const $push14=, 0 + i32.and $push115=, $4, $0 + tee_local $push114=, $12=, $pop115 + i32.store res($pop14), $pop114 + i32.const $push113=, 0 + i32.and $push112=, $5, $1 + tee_local $push111=, $13=, $pop112 + i32.store res+4($pop113), $pop111 + i32.const $push15=, 2 + i32.ne $push16=, $12, $pop15 + br_if 0, $pop16 # 0: down to label1 +# BB#7: # %verify.exit54 + i32.const $push17=, 4 + i32.ne $push18=, $13, $pop17 + br_if 0, $pop18 # 0: down to label1 +# BB#8: # %verify.exit60 + i32.const $push19=, 0 + i32.or $push120=, $4, $0 + tee_local $push119=, $14=, $pop120 + i32.store res($pop19), $pop119 + i32.const $push118=, 0 + i32.or $push117=, $5, $1 + tee_local $push116=, $15=, $pop117 + i32.store res+4($pop118), $pop116 + i32.const $push20=, 158 + i32.ne $push21=, $14, $pop20 + br_if 0, $pop21 # 0: down to label1 +# BB#9: # %verify.exit60 + i32.const $push22=, 109 + i32.ne $push23=, $15, $pop22 + br_if 0, $pop23 # 0: down to label1 +# BB#10: # %verify.exit66 + i32.const $push24=, 0 + i32.xor $push125=, $4, $0 + tee_local $push124=, $4=, $pop125 + i32.store res($pop24), $pop124 + i32.const $push123=, 0 + i32.xor $push122=, $5, $1 + tee_local $push121=, $5=, $pop122 + i32.store res+4($pop123), $pop121 + i32.const $push25=, 156 + i32.ne $push26=, $4, $pop25 + br_if 0, $pop26 # 0: down to label1 +# BB#11: # %verify.exit66 + i32.const $push27=, 105 + i32.ne $push28=, $5, $pop27 + br_if 0, $pop28 # 0: down to label1 +# BB#12: # %verify.exit72 + i32.const $push29=, 0 + i32.const $push132=, 0 + i32.sub $push131=, $pop132, $0 + tee_local $push130=, $2=, $pop131 + i32.store res($pop29), $pop130 + i32.const $push129=, 0 + i32.const $push128=, 0 + i32.sub $push127=, $pop128, $1 + tee_local $push126=, $3=, $pop127 + i32.store res+4($pop129), $pop126 + i32.const $push30=, -150 + i32.ne $push31=, $2, $pop30 + br_if 0, $pop31 # 0: down to label1 +# BB#13: # %verify.exit72 + i32.const $push32=, -100 + i32.ne $push33=, $3, $pop32 + br_if 0, $pop33 # 0: down to label1 +# BB#14: # %verify.exit78 + i32.const $push35=, 0 + i32.const $push34=, -1 + i32.xor $push138=, $0, $pop34 + tee_local $push137=, $16=, $pop138 + i32.store res($pop35), $pop137 + i32.const $push136=, 0 + i32.const $push135=, -1 + i32.xor $push134=, $1, $pop135 + tee_local $push133=, $17=, $pop134 + i32.store res+4($pop136), $pop133 + i32.const $push36=, 150 + i32.ne $push37=, $0, $pop36 + br_if 0, $pop37 # 0: down to label1 +# BB#15: # %verify.exit78 + i32.const $push38=, -101 + i32.ne $push39=, $17, $pop38 + br_if 0, $pop39 # 0: down to label1 +# BB#16: # %verify.exit84 + i32.const $push45=, 0 + i32.sub $push40=, $16, $0 + i32.add $push41=, $pop40, $8 + i32.add $push42=, $pop41, $6 + i32.add $push43=, $pop42, $12 + i32.add $push44=, $pop43, $14 + i32.add $push145=, $pop44, $4 + tee_local $push144=, $0=, $pop145 + i32.store res($pop45), $pop144 + i32.const $push143=, 0 + i32.store k($pop143), $0 + i32.const $push142=, 0 + i32.sub $push46=, $17, $1 + i32.add $push47=, $pop46, $9 + i32.add $push48=, $pop47, $7 + i32.add $push49=, $pop48, $13 + i32.add $push50=, $pop49, $15 + i32.add $push141=, $pop50, $5 + tee_local $push140=, $1=, $pop141 + i32.store res+4($pop142), $pop140 + i32.const $push139=, 0 + i32.store k+4($pop139), $1 + i32.const $push51=, 1675 + i32.ne $push52=, $0, $pop51 + br_if 0, $pop52 # 0: down to label1 +# BB#17: # %verify.exit84 + i32.const $push53=, 1430 + i32.ne $push54=, $1, $pop53 + br_if 0, $pop54 # 0: down to label1 +# BB#18: # %verify.exit90 + i32.const $push60=, 0 + i32.mul $push55=, $16, $2 + i32.mul $push56=, $pop55, $8 + i32.mul $push57=, $pop56, $6 + i32.mul $push58=, $pop57, $12 + i32.mul $push59=, $pop58, $14 + i32.mul $push152=, $pop59, $4 + tee_local $push151=, $0=, $pop152 + i32.store res($pop60), $pop151 + i32.const $push150=, 0 + i32.store k($pop150), $0 + i32.const $push149=, 0 + i32.mul $push61=, $17, $3 + i32.mul $push62=, $pop61, $9 + i32.mul $push63=, $pop62, $7 + i32.mul $push64=, $pop63, $13 + i32.mul $push65=, $pop64, $15 + i32.mul $push148=, $pop65, $5 + tee_local $push147=, $1=, $pop148 + i32.store res+4($pop149), $pop147 + i32.const $push146=, 0 + i32.store k+4($pop146), $1 + i32.const $push66=, 1456467968 + i32.ne $push67=, $0, $pop66 + br_if 0, $pop67 # 0: down to label1 +# BB#19: # %verify.exit90 + i32.const $push68=, -1579586240 + i32.ne $push69=, $1, $pop68 + br_if 0, $pop69 # 0: down to label1 +# BB#20: # %verify.exit96 + i32.const $push160=, 0 + i32.div_s $push70=, $6, $8 + i32.div_s $push71=, $pop70, $10 + i32.div_s $push72=, $pop71, $12 + i32.div_s $push73=, $pop72, $14 + i32.div_s $push74=, $pop73, $4 + i32.div_s $push75=, $pop74, $2 + i32.div_s $push159=, $pop75, $16 + tee_local $push158=, $6=, $pop159 + i32.store res($pop160), $pop158 + i32.const $push157=, 0 + i32.store k($pop157), $6 + i32.const $push156=, 0 + i32.div_s $push76=, $7, $9 + i32.div_s $push77=, $pop76, $11 + i32.div_s $push78=, $pop77, $13 + i32.div_s $push79=, $pop78, $15 + i32.div_s $push80=, $pop79, $5 + i32.div_s $push81=, $pop80, $3 + i32.div_s $push155=, $pop81, $17 + tee_local $push154=, $0=, $pop155 + i32.store res+4($pop156), $pop154 + i32.const $push153=, 0 + i32.store k+4($pop153), $0 + i32.or $push82=, $0, $6 + br_if 0, $pop82 # 0: down to label1 +# BB#21: # %verify.exit102 + i32.const $push161=, 0 + call exit@FUNCTION, $pop161 + unreachable +.LBB1_22: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden i # @i + .type i,@object + .section .data.i,"aw",@progbits + .globl i + .p2align 3 +i: + .int32 150 # 0x96 + .int32 100 # 0x64 + .size i, 8 + + .hidden j # @j + .type j,@object + .section .data.j,"aw",@progbits + .globl j + .p2align 3 +j: + .int32 10 # 0xa + .int32 13 # 0xd + .size j, 8 + + .hidden res # @res + .type res,@object + .section .bss.res,"aw",@nobits + .globl res + .p2align 3 +res: + .skip 8 + .size res, 8 + + .hidden k # @k + .type k,@object + .section .bss.k,"aw",@nobits + .globl k + .p2align 3 +k: + .skip 8 + .size k, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr23324.c.s b/src/binaryen/test/torture-s/pr23324.c.s new file mode 100644 index 0000000000..41b88d31ee --- /dev/null +++ b/src/binaryen/test/torture-s/pr23324.c.s @@ -0,0 +1,98 @@ + .text + .file "pr23324.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local f64, f32 +# BB#0: # %entry + block + i32.const $push9=, 0 + f64.load $push8=, wv6+32($pop9) + tee_local $push7=, $0=, $pop8 + f64.ne $push0=, $pop7, $0 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %caller_bf6.exit + i32.const $push12=, 0 + f32.load $push11=, yv7($pop12) + tee_local $push10=, $1=, $pop11 + f32.ne $push1=, $pop10, $1 + br_if 0, $pop1 # 0: down to label0 +# BB#2: # %if.end26.i.i + i32.const $push2=, 0 + f64.load $push14=, yv7+16($pop2) + tee_local $push13=, $0=, $pop14 + f64.ne $push3=, $pop13, $0 + br_if 0, $pop3 # 0: down to label0 +# BB#3: # %if.end30.i.i + i32.const $push17=, 0 + f32.load $push16=, yv7+24($pop17) + tee_local $push15=, $1=, $pop16 + f32.ne $push4=, $pop15, $1 + br_if 0, $pop4 # 0: down to label0 +# BB#4: # %if.end34.i.i + i32.const $push20=, 0 + f32.load $push19=, zv7($pop20) + tee_local $push18=, $1=, $pop19 + f32.ne $push5=, $pop18, $1 + br_if 0, $pop5 # 0: down to label0 +# BB#5: # %caller_bf7.exit + i32.const $push6=, 0 + return $pop6 +.LBB0_6: # %if.then109.i.i + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type wv6,@object # @wv6 + .section .data.wv6,"aw",@progbits + .p2align 3 +wv6: + .int8 72 # 0x48 + .int8 66 # 0x42 + .int8 32 # 0x20 + .int8 16 # 0x10 + .int32 67426805 # 0x404d9f5 + .int32 1047191860 # 0x3e6ae134 + .int32 1366022414 # 0x516bd90e + .int8 90 # 0x5a + .int8 147 # 0x93 + .int8 98 # 0x62 + .int8 2 # 0x2 + .int32 1069379046 # 0x3fbd6de6 + .int32 358273621 + .skip 4 + .int64 4659514866546242126 # double 3318.0419780000002 + .size wv6, 40 + + .type zv7,@object # @zv7 + .section .data.zv7,"aw",@progbits + .p2align 2 +zv7: + .int32 1167954387 # float 5042.22803 + .size zv7, 4 + + .type yv7,@object # @yv7 + .section .data.yv7,"aw",@progbits + .p2align 3 +yv7: + .int32 1189834750 # float 30135.9961 + .int16 42435 # 0xa5c3 + .skip 2 + .int8 170 # 0xaa + .int8 0 # 0x0 + .int16 22116 # 0x5664 + .skip 4 + .int64 4673007878717811523 # double 26479.628148 + .int32 1165963103 # float 4082.96069 + .skip 4 + .size yv7, 32 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr23467.c.s b/src/binaryen/test/torture-s/pr23467.c.s new file mode 100644 index 0000000000..7d6f9dc0d5 --- /dev/null +++ b/src/binaryen/test/torture-s/pr23467.c.s @@ -0,0 +1,28 @@ + .text + .file "pr23467.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden v # @v + .type v,@object + .section .bss.v,"aw",@nobits + .globl v + .p2align 3 +v: + .skip 16 + .size v, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr23604.c.s b/src/binaryen/test/torture-s/pr23604.c.s new file mode 100644 index 0000000000..60cc0f180f --- /dev/null +++ b/src/binaryen/test/torture-s/pr23604.c.s @@ -0,0 +1,46 @@ + .text + .file "pr23604.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.gt_u $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.then2 + i32.eq $push2=, $0, $1 + br_if 0, $pop2 # 0: down to label0 +# BB#2: # %if.then2 + i32.eqz $push5=, $1 + br_if 0, $pop5 # 0: down to label0 +# BB#3: # %return + i32.const $push4=, 0 + return $pop4 +.LBB0_4: # %if.end9 + end_block # label0: + i32.const $push3=, 1 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr23941.c.s b/src/binaryen/test/torture-s/pr23941.c.s new file mode 100644 index 0000000000..8f4a5404e2 --- /dev/null +++ b/src/binaryen/test/torture-s/pr23941.c.s @@ -0,0 +1,38 @@ + .text + .file "pr23941.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + f64.load $push0=, d($pop3) + f64.const $push1=, 0x1p-127 + f64.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden d # @d + .type d,@object + .section .data.d,"aw",@progbits + .globl d + .p2align 3 +d: + .int64 4035225266123964416 # double 5.8774717541114375E-39 + .size d, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr24141.c.s b/src/binaryen/test/torture-s/pr24141.c.s new file mode 100644 index 0000000000..6b9d9ea88c --- /dev/null +++ b/src/binaryen/test/torture-s/pr24141.c.s @@ -0,0 +1,66 @@ + .text + .file "pr24141.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store i($pop1), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 +# BB#0: # %entry + block + i32.eqz $push2=, $0 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %entry + br_if 0, $1 # 0: down to label0 +# BB#2: # %if.then10 + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store i($pop1), $pop0 +.LBB1_3: # %cleanup + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store i($pop1), $pop0 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr24142.c.s b/src/binaryen/test/torture-s/pr24142.c.s new file mode 100644 index 0000000000..b24678c1ec --- /dev/null +++ b/src/binaryen/test/torture-s/pr24142.c.s @@ -0,0 +1,35 @@ + .text + .file "pr24142.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 2 + i32.lt_u $push3=, $0, $pop2 + i32.const $push0=, 0 + i32.ne $push1=, $1, $pop0 + i32.and $push4=, $pop3, $pop1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr24716.c.s b/src/binaryen/test/torture-s/pr24716.c.s new file mode 100644 index 0000000000..b1182823f1 --- /dev/null +++ b/src/binaryen/test/torture-s/pr24716.c.s @@ -0,0 +1,581 @@ + .text + .file "pr24716.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $5=, 0 + i32.const $3=, 0 + block + block + i32.const $push16=, 0 + i32.const $push15=, 3 + i32.lt_s $push0=, $pop16, $pop15 + br_if 0, $pop0 # 0: down to label1 +# BB#1: + i32.const $6=, 12 + br 1 # 1: down to label0 +.LBB0_2: + end_block # label1: + i32.const $6=, 10 +.LBB0_3: # =>This Inner Loop Header: Depth=1 + end_block # label0: + loop i32 # label2: + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + br_table $6, 3, 6, 7, 8, 9, 10, 11, 15, 16, 0, 2, 18, 1, 4, 5, 12, 13, 14, 17, 17 # 3: down to label33 + # 6: down to label30 + # 7: down to label29 + # 8: down to label28 + # 9: down to label27 + # 10: down to label26 + # 11: down to label25 + # 15: down to label21 + # 16: down to label20 + # 0: down to label36 + # 2: down to label34 + # 18: down to label18 + # 1: down to label35 + # 4: down to label32 + # 5: down to label31 + # 12: down to label24 + # 13: down to label23 + # 14: down to label22 + # 17: down to label19 +.LBB0_4: # in Loop: Header=BB0_3 Depth=1 + end_block # label36: + i32.const $3=, 1 + i32.const $0=, -1 + i32.const $push17=, 3 + i32.lt_s $push1=, $5, $pop17 + br_if 18, $pop1 # 18: down to label17 +# BB#5: # in Loop: Header=BB0_3 Depth=1 + i32.const $6=, 12 + br 33 # 33: up to label2 +.LBB0_6: # %if.end.thread + # in Loop: Header=BB0_3 Depth=1 + end_block # label35: + i32.const $push21=, -1 + i32.add $4=, $3, $pop21 + i32.const $push20=, 1 + i32.add $push19=, $5, $pop20 + tee_local $push18=, $5=, $pop19 + i32.gt_s $push3=, $pop18, $1 + br_if 21, $pop3 # 21: down to label13 + br 22 # 22: down to label12 +.LBB0_7: # %if.end + # in Loop: Header=BB0_3 Depth=1 + end_block # label34: + i32.const $4=, 0 + i32.const $push22=, 1 + i32.eq $push2=, $3, $pop22 + br_if 18, $pop2 # 18: down to label15 +# BB#8: # in Loop: Header=BB0_3 Depth=1 + i32.const $6=, 0 + br 31 # 31: up to label2 +.LBB0_9: # %if.end4 + # in Loop: Header=BB0_3 Depth=1 + end_block # label33: + i32.le_s $push4=, $5, $1 + br_if 16, $pop4 # 16: down to label16 +# BB#10: # in Loop: Header=BB0_3 Depth=1 + i32.const $6=, 13 + br 30 # 30: up to label2 +.LBB0_11: # %while.body.lr.ph + # in Loop: Header=BB0_3 Depth=1 + end_block # label32: + i32.eq $3=, $4, $1 +# BB#12: # in Loop: Header=BB0_3 Depth=1 + i32.const $6=, 14 + br 29 # 29: up to label2 +.LBB0_13: # %while.body + # in Loop: Header=BB0_3 Depth=1 + end_block # label31: + i32.add $push24=, $5, $3 + tee_local $push23=, $5=, $pop24 + i32.gt_s $push5=, $pop23, $1 + br_if 16, $pop5 # 16: down to label14 +# BB#14: # in Loop: Header=BB0_3 Depth=1 + i32.const $6=, 1 + br 28 # 28: up to label2 +.LBB0_15: # %while.end + # in Loop: Header=BB0_3 Depth=1 + end_block # label30: + i32.const $push28=, 2 + i32.shl $push6=, $0, $pop28 + i32.const $push27=, W + i32.add $push26=, $pop6, $pop27 + tee_local $push25=, $2=, $pop26 + i32.load $3=, 0($pop25) +# BB#16: # in Loop: Header=BB0_3 Depth=1 + i32.const $6=, 2 + br 27 # 27: up to label2 +.LBB0_17: # %do.body10 + # in Loop: Header=BB0_3 Depth=1 + end_block # label29: + i32.eqz $push38=, $3 + br_if 18, $pop38 # 18: down to label10 +# BB#18: # in Loop: Header=BB0_3 Depth=1 + i32.const $6=, 3 + br 26 # 26: up to label2 +.LBB0_19: # %if.then13.peel + # in Loop: Header=BB0_3 Depth=1 + end_block # label28: + i32.const $push29=, 0 + i32.store 0($2), $pop29 + i32.const $5=, 1 +# BB#20: # in Loop: Header=BB0_3 Depth=1 + i32.const $6=, 4 + br 25 # 25: up to label2 +.LBB0_21: # %do.cond16.peel + # in Loop: Header=BB0_3 Depth=1 + end_block # label27: + i32.const $push30=, 0 + i32.le_s $push7=, $1, $pop30 + br_if 17, $pop7 # 17: down to label9 +# BB#22: # in Loop: Header=BB0_3 Depth=1 + i32.const $6=, 5 + br 24 # 24: up to label2 +.LBB0_23: # %do.cond19 + # in Loop: Header=BB0_3 Depth=1 + end_block # label26: + i32.const $3=, 0 + i32.const $push31=, 0 + i32.gt_s $push8=, $0, $pop31 + br_if 14, $pop8 # 14: down to label11 +# BB#24: # in Loop: Header=BB0_3 Depth=1 + i32.const $6=, 6 + br 23 # 23: up to label2 +.LBB0_25: # %do.body22 + # in Loop: Header=BB0_3 Depth=1 + end_block # label25: + i32.const $push34=, 2 + i32.shl $push10=, $0, $pop34 + i32.const $push33=, Link + i32.add $push11=, $pop10, $pop33 + i32.load $0=, 0($pop11) + i32.const $push32=, 1 + i32.lt_s $push9=, $4, $pop32 + br_if 18, $pop9 # 18: down to label6 +# BB#26: # in Loop: Header=BB0_3 Depth=1 + i32.const $6=, 15 + br 22 # 22: up to label2 +.LBB0_27: # %while.body26.lr.ph + # in Loop: Header=BB0_3 Depth=1 + end_block # label24: + i32.const $push35=, -1 + i32.ne $3=, $0, $pop35 + i32.const $1=, 0 +# BB#28: # in Loop: Header=BB0_3 Depth=1 + i32.const $6=, 16 + br 21 # 21: up to label2 +.LBB0_29: # %while.body26 + # in Loop: Header=BB0_3 Depth=1 + end_block # label23: + i32.add $push37=, $1, $3 + tee_local $push36=, $1=, $pop37 + i32.lt_s $push12=, $pop36, $4 + br_if 18, $pop12 # 18: down to label4 +# BB#30: # in Loop: Header=BB0_3 Depth=1 + i32.const $6=, 17 + br 20 # 20: up to label2 +.LBB0_31: # %do.cond33.loopexit + # in Loop: Header=BB0_3 Depth=1 + end_block # label22: + i32.add $5=, $5, $1 + br 16 # 16: down to label5 +.LBB0_32: # in Loop: Header=BB0_3 Depth=1 + end_block # label21: + i32.const $1=, 0 +# BB#33: # in Loop: Header=BB0_3 Depth=1 + i32.const $6=, 8 + br 18 # 18: up to label2 +.LBB0_34: # %do.cond33 + # in Loop: Header=BB0_3 Depth=1 + end_block # label20: + i32.const $push13=, -1 + i32.ne $push14=, $0, $pop13 + br_if 11, $pop14 # 11: down to label8 + br 12 # 12: down to label7 +.LBB0_35: # %do.cond16 + # in Loop: Header=BB0_3 Depth=1 + end_block # label19: + br 15 # 15: down to label3 +.LBB0_36: # %for.end + end_block # label18: + return $5 +.LBB0_37: # in Loop: Header=BB0_3 Depth=1 + end_block # label17: + i32.const $6=, 10 + br 14 # 14: up to label2 +.LBB0_38: # in Loop: Header=BB0_3 Depth=1 + end_block # label16: + i32.const $6=, 1 + br 13 # 13: up to label2 +.LBB0_39: # in Loop: Header=BB0_3 Depth=1 + end_block # label15: + i32.const $6=, 11 + br 12 # 12: up to label2 +.LBB0_40: # in Loop: Header=BB0_3 Depth=1 + end_block # label14: + i32.const $6=, 14 + br 11 # 11: up to label2 +.LBB0_41: # in Loop: Header=BB0_3 Depth=1 + end_block # label13: + i32.const $6=, 13 + br 10 # 10: up to label2 +.LBB0_42: # in Loop: Header=BB0_3 Depth=1 + end_block # label12: + i32.const $6=, 1 + br 9 # 9: up to label2 +.LBB0_43: # in Loop: Header=BB0_3 Depth=1 + end_block # label11: + i32.const $6=, 2 + br 8 # 8: up to label2 +.LBB0_44: # in Loop: Header=BB0_3 Depth=1 + end_block # label10: + i32.const $6=, 4 + br 7 # 7: up to label2 +.LBB0_45: # in Loop: Header=BB0_3 Depth=1 + end_block # label9: + i32.const $6=, 18 + br 6 # 6: up to label2 +.LBB0_46: # in Loop: Header=BB0_3 Depth=1 + end_block # label8: + i32.const $6=, 6 + br 5 # 5: up to label2 +.LBB0_47: # in Loop: Header=BB0_3 Depth=1 + end_block # label7: + i32.const $6=, 9 + br 4 # 4: up to label2 +.LBB0_48: # in Loop: Header=BB0_3 Depth=1 + end_block # label6: + i32.const $6=, 7 + br 3 # 3: up to label2 +.LBB0_49: # in Loop: Header=BB0_3 Depth=1 + end_block # label5: + i32.const $6=, 8 + br 2 # 2: up to label2 +.LBB0_50: # in Loop: Header=BB0_3 Depth=1 + end_block # label4: + i32.const $6=, 16 + br 1 # 1: up to label2 +.LBB0_51: # in Loop: Header=BB0_3 Depth=1 + end_block # label3: + i32.const $6=, 18 + br 0 # 0: up to label2 +.LBB0_52: + end_loop + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $2=, 0 + i32.const $1=, 2 + i32.const $4=, 0 + i32.const $0=, 0 + block + block + i32.const $push15=, 0 + i32.const $push14=, 3 + i32.lt_s $push0=, $pop15, $pop14 + br_if 0, $pop0 # 0: down to label38 +# BB#1: + i32.const $5=, 10 + br 1 # 1: down to label37 +.LBB1_2: + end_block # label38: + i32.const $5=, 6 +.LBB1_3: # =>This Inner Loop Header: Depth=1 + end_block # label37: + loop i32 # label39: + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + br_table $5, 3, 6, 7, 8, 9, 0, 2, 11, 12, 13, 1, 4, 5, 10, 10 # 3: down to label62 + # 6: down to label59 + # 7: down to label58 + # 8: down to label57 + # 9: down to label56 + # 0: down to label65 + # 2: down to label63 + # 11: down to label54 + # 12: down to label53 + # 13: down to label52 + # 1: down to label64 + # 4: down to label61 + # 5: down to label60 + # 10: down to label55 +.LBB1_4: # %do.end35.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label65: + i32.const $push12=, -1 + i32.ne $push13=, $2, $pop12 + i32.and $1=, $0, $pop13 + i32.const $0=, 1 + i32.const $2=, -1 + i32.const $push16=, 3 + i32.lt_s $push1=, $4, $pop16 + br_if 13, $pop1 # 13: down to label51 +# BB#5: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 10 + br 25 # 25: up to label39 +.LBB1_6: # %if.end.thread.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label64: + i32.const $push20=, -1 + i32.add $3=, $0, $pop20 + i32.const $push19=, 1 + i32.add $push18=, $4, $pop19 + tee_local $push17=, $4=, $pop18 + i32.gt_s $push4=, $pop17, $1 + br_if 16, $pop4 # 16: down to label47 + br 17 # 17: down to label46 +.LBB1_7: # %if.end.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label63: + i32.const $3=, 0 + i32.const $push21=, 1 + i32.eq $push2=, $0, $pop21 + br_if 13, $pop2 # 13: down to label49 +# BB#8: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 0 + br 23 # 23: up to label39 +.LBB1_9: # %if.end4.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label62: + i32.le_s $push5=, $4, $1 + br_if 11, $pop5 # 11: down to label50 +# BB#10: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 11 + br 22 # 22: up to label39 +.LBB1_11: # %while.body.lr.ph.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label61: + i32.eq $0=, $3, $1 +# BB#12: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 12 + br 21 # 21: up to label39 +.LBB1_13: # %while.body.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label60: + i32.add $push23=, $4, $0 + tee_local $push22=, $4=, $pop23 + i32.gt_s $push6=, $pop22, $1 + br_if 11, $pop6 # 11: down to label48 +# BB#14: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 1 + br 20 # 20: up to label39 +.LBB1_15: # %do.body10.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label59: + i32.const $push27=, 2 + i32.shl $push7=, $2, $pop27 + i32.const $push26=, W + i32.add $push25=, $pop7, $pop26 + tee_local $push24=, $0=, $pop25 + i32.load $push8=, 0($pop24) + i32.eqz $push39=, $pop8 + br_if 13, $pop39 # 13: down to label45 +# BB#16: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 2 + br 19 # 19: up to label39 +.LBB1_17: # %if.then13.peel.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label58: + i32.const $push28=, 0 + i32.store 0($0), $pop28 + i32.const $4=, 1 +# BB#18: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 3 + br 18 # 18: up to label39 +.LBB1_19: # %do.cond16.peel.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label57: + i32.eqz $push40=, $1 + br_if 14, $pop40 # 14: down to label42 +# BB#20: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 4 + br 17 # 17: up to label39 +.LBB1_21: # %do.body22.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label56: + i32.const $push38=, 0 + i32.gt_s $push37=, $3, $pop38 + tee_local $push36=, $0=, $pop37 + i32.const $push35=, 2 + i32.shl $push9=, $2, $pop35 + i32.const $push34=, Link + i32.add $push10=, $pop9, $pop34 + i32.load $push33=, 0($pop10) + tee_local $push32=, $2=, $pop33 + i32.const $push31=, -1 + i32.ne $push30=, $pop32, $pop31 + tee_local $push29=, $1=, $pop30 + i32.and $push11=, $pop36, $pop29 + i32.add $4=, $4, $pop11 + br_if 11, $1 # 11: down to label44 + br 12 # 12: down to label43 +.LBB1_22: # %do.cond16.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label55: + br 14 # 14: down to label40 +.LBB1_23: # %f.exit + # in Loop: Header=BB1_3 Depth=1 + end_block # label54: + i32.eqz $push41=, $4 + br_if 12, $pop41 # 12: down to label41 +# BB#24: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 8 + br 14 # 14: up to label39 +.LBB1_25: # %if.end + end_block # label53: + i32.const $push3=, 0 + return $pop3 +.LBB1_26: # %if.then + end_block # label52: + call abort@FUNCTION + unreachable +.LBB1_27: # in Loop: Header=BB1_3 Depth=1 + end_block # label51: + i32.const $5=, 6 + br 11 # 11: up to label39 +.LBB1_28: # in Loop: Header=BB1_3 Depth=1 + end_block # label50: + i32.const $5=, 1 + br 10 # 10: up to label39 +.LBB1_29: # in Loop: Header=BB1_3 Depth=1 + end_block # label49: + i32.const $5=, 7 + br 9 # 9: up to label39 +.LBB1_30: # in Loop: Header=BB1_3 Depth=1 + end_block # label48: + i32.const $5=, 12 + br 8 # 8: up to label39 +.LBB1_31: # in Loop: Header=BB1_3 Depth=1 + end_block # label47: + i32.const $5=, 11 + br 7 # 7: up to label39 +.LBB1_32: # in Loop: Header=BB1_3 Depth=1 + end_block # label46: + i32.const $5=, 1 + br 6 # 6: up to label39 +.LBB1_33: # in Loop: Header=BB1_3 Depth=1 + end_block # label45: + i32.const $5=, 3 + br 5 # 5: up to label39 +.LBB1_34: # in Loop: Header=BB1_3 Depth=1 + end_block # label44: + i32.const $5=, 4 + br 4 # 4: up to label39 +.LBB1_35: # in Loop: Header=BB1_3 Depth=1 + end_block # label43: + i32.const $5=, 5 + br 3 # 3: up to label39 +.LBB1_36: # in Loop: Header=BB1_3 Depth=1 + end_block # label42: + i32.const $5=, 13 + br 2 # 2: up to label39 +.LBB1_37: # in Loop: Header=BB1_3 Depth=1 + end_block # label41: + i32.const $5=, 9 + br 1 # 1: up to label39 +.LBB1_38: # in Loop: Header=BB1_3 Depth=1 + end_block # label40: + i32.const $5=, 13 + br 0 # 0: up to label39 +.LBB1_39: + end_loop + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden Link # @Link + .type Link,@object + .section .data.Link,"aw",@progbits + .globl Link + .p2align 2 +Link: + .skip 4,255 + .size Link, 4 + + .hidden W # @W + .type W,@object + .section .data.W,"aw",@progbits + .globl W + .p2align 2 +W: + .int32 2 # 0x2 + .size W, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr24851.c.s b/src/binaryen/test/torture-s/pr24851.c.s new file mode 100644 index 0000000000..dc24183156 --- /dev/null +++ b/src/binaryen/test/torture-s/pr24851.c.s @@ -0,0 +1,17 @@ + .text + .file "pr24851.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr25125.c.s b/src/binaryen/test/torture-s/pr25125.c.s new file mode 100644 index 0000000000..76c3652263 --- /dev/null +++ b/src/binaryen/test/torture-s/pr25125.c.s @@ -0,0 +1,59 @@ + .text + .file "pr25125.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $1=, 0 + block + i32.const $push6=, 0 + i32.gt_s $push0=, $0, $pop6 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push1=, 65535 + i32.and $push2=, $0, $pop1 + i32.const $push3=, 32768 + i32.add $1=, $pop2, $pop3 +.LBB0_2: # %cleanup + end_block # label0: + i32.const $push4=, 65535 + i32.and $push5=, $1, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, -32767 + i32.call $push1=, f@FUNCTION, $pop0 + i32.const $push2=, 1 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %if.end + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable +.LBB1_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr25737.c.s b/src/binaryen/test/torture-s/pr25737.c.s new file mode 100644 index 0000000000..a89071e9b5 --- /dev/null +++ b/src/binaryen/test/torture-s/pr25737.c.s @@ -0,0 +1,44 @@ + .text + .file "pr25737.c" + .section .text.time_enqueue,"ax",@progbits + .hidden time_enqueue # -- Begin function time_enqueue + .globl time_enqueue + .type time_enqueue,@function +time_enqueue: # @time_enqueue + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store 0($0), $pop0 + i32.const $push2=, 0 + i32.load $push1=, Timer_Queue($pop2) + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size time_enqueue, .Lfunc_end0-time_enqueue + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + i32.const $push2=, 0 + i32.store Timer_Queue($pop0), $pop2 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type Timer_Queue,@object # @Timer_Queue + .section .bss.Timer_Queue,"aw",@nobits + .p2align 2 +Timer_Queue: + .skip 4 + .size Timer_Queue, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr27073.c.s b/src/binaryen/test/torture-s/pr27073.c.s new file mode 100644 index 0000000000..3077079a15 --- /dev/null +++ b/src/binaryen/test/torture-s/pr27073.c.s @@ -0,0 +1,133 @@ + .text + .file "pr27073.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.eqz $push13=, $4 + br_if 0, $pop13 # 0: down to label0 +# BB#1: # %while.body.lr.ph + i32.const $push0=, 0 + i32.sub $4=, $pop0, $4 +.LBB0_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.store 0($0), $5 + i32.const $push12=, 4 + i32.add $push1=, $0, $pop12 + i32.store 0($pop1), $6 + i32.const $push11=, 8 + i32.add $push2=, $0, $pop11 + i32.store 0($pop2), $7 + i32.const $push10=, 12 + i32.add $push3=, $0, $pop10 + i32.store 0($pop3), $8 + i32.const $push9=, 16 + i32.add $push4=, $0, $pop9 + i32.store 0($pop4), $9 + i32.const $push8=, 20 + i32.add $0=, $0, $pop8 + i32.const $push7=, 1 + i32.add $push6=, $4, $pop7 + tee_local $push5=, $4=, $pop6 + br_if 0, $pop5 # 0: up to label1 +.LBB0_3: # %while.end + end_loop + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push37=, 0 + i32.const $push35=, 0 + i32.load $push34=, __stack_pointer($pop35) + i32.const $push36=, 48 + i32.sub $push41=, $pop34, $pop36 + tee_local $push40=, $0=, $pop41 + i32.store __stack_pointer($pop37), $pop40 + i32.const $push4=, 2 + i32.const $push3=, 100 + i32.const $push39=, 200 + i32.const $push2=, 300 + i32.const $push1=, 400 + i32.const $push0=, 500 + call foo@FUNCTION, $0, $0, $0, $0, $pop4, $pop3, $pop39, $pop2, $pop1, $pop0 + block + i32.load $push5=, 0($0) + i32.const $push38=, 100 + i32.ne $push6=, $pop5, $pop38 + br_if 0, $pop6 # 0: down to label2 +# BB#1: # %for.cond + i32.load $push7=, 4($0) + i32.const $push42=, 200 + i32.ne $push8=, $pop7, $pop42 + br_if 0, $pop8 # 0: down to label2 +# BB#2: # %for.cond.1 + i32.load $push10=, 8($0) + i32.const $push9=, 300 + i32.ne $push11=, $pop10, $pop9 + br_if 0, $pop11 # 0: down to label2 +# BB#3: # %for.cond.2 + i32.load $push13=, 12($0) + i32.const $push12=, 400 + i32.ne $push14=, $pop13, $pop12 + br_if 0, $pop14 # 0: down to label2 +# BB#4: # %for.cond.3 + i32.load $push16=, 16($0) + i32.const $push15=, 500 + i32.ne $push17=, $pop16, $pop15 + br_if 0, $pop17 # 0: down to label2 +# BB#5: # %for.cond.4 + i32.load $push19=, 20($0) + i32.const $push18=, 100 + i32.ne $push20=, $pop19, $pop18 + br_if 0, $pop20 # 0: down to label2 +# BB#6: # %for.cond.5 + i32.load $push22=, 24($0) + i32.const $push21=, 200 + i32.ne $push23=, $pop22, $pop21 + br_if 0, $pop23 # 0: down to label2 +# BB#7: # %for.cond.6 + i32.load $push25=, 28($0) + i32.const $push24=, 300 + i32.ne $push26=, $pop25, $pop24 + br_if 0, $pop26 # 0: down to label2 +# BB#8: # %for.cond.7 + i32.load $push28=, 32($0) + i32.const $push27=, 400 + i32.ne $push29=, $pop28, $pop27 + br_if 0, $pop29 # 0: down to label2 +# BB#9: # %for.cond.8 + i32.load $push31=, 36($0) + i32.const $push30=, 500 + i32.ne $push32=, $pop31, $pop30 + br_if 0, $pop32 # 0: down to label2 +# BB#10: # %for.cond.9 + i32.const $push33=, 0 + call exit@FUNCTION, $pop33 + unreachable +.LBB1_11: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr27260.c.s b/src/binaryen/test/torture-s/pr27260.c.s new file mode 100644 index 0000000000..77abbea6b8 --- /dev/null +++ b/src/binaryen/test/torture-s/pr27260.c.s @@ -0,0 +1,185 @@ + .text + .file "pr27260.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .local i64 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push0=, 2 + i32.ne $push1=, $0, $pop0 + i64.extend_u/i32 $push2=, $pop1 + i64.const $push3=, 72340172838076673 + i64.mul $push13=, $pop2, $pop3 + tee_local $push12=, $1=, $pop13 + i64.store buf+56($pop4), $pop12 + i32.const $push11=, 0 + i64.store buf+48($pop11), $1 + i32.const $push10=, 0 + i64.store buf+40($pop10), $1 + i32.const $push9=, 0 + i64.store buf+32($pop9), $1 + i32.const $push8=, 0 + i64.store buf+24($pop8), $1 + i32.const $push7=, 0 + i64.store buf+16($pop7), $1 + i32.const $push6=, 0 + i64.store buf+8($pop6), $1 + i32.const $push5=, 0 + i64.store buf($pop5), $1 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push3=, 0 + i32.const $push2=, 2 + i32.store8 buf+64($pop3), $pop2 + i32.const $1=, -1 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + block + loop # label2: + i32.const $push19=, buf+1 + i32.add $push4=, $1, $pop19 + i32.load8_u $push5=, 0($pop4) + br_if 1, $pop5 # 1: down to label1 +# BB#2: # %for.cond + # in Loop: Header=BB1_1 Depth=1 + i32.const $push23=, 1 + i32.add $push22=, $1, $pop23 + tee_local $push21=, $1=, $pop22 + i32.const $push20=, 62 + i32.le_u $push6=, $pop21, $pop20 + br_if 0, $pop6 # 0: up to label2 +# BB#3: # %for.end + end_loop + i32.const $push8=, 0 + i64.const $push7=, 72340172838076673 + i64.store buf+56($pop8), $pop7 + i32.const $push37=, 0 + i64.const $push36=, 72340172838076673 + i64.store buf+48($pop37), $pop36 + i32.const $push35=, 0 + i64.const $push34=, 72340172838076673 + i64.store buf+40($pop35), $pop34 + i32.const $push33=, 0 + i64.const $push32=, 72340172838076673 + i64.store buf+32($pop33), $pop32 + i32.const $push31=, 0 + i64.const $push30=, 72340172838076673 + i64.store buf+24($pop31), $pop30 + i32.const $push29=, 0 + i64.const $push28=, 72340172838076673 + i64.store buf+16($pop29), $pop28 + i32.const $push27=, 0 + i64.const $push26=, 72340172838076673 + i64.store buf+8($pop27), $pop26 + i32.const $push25=, 0 + i64.const $push24=, 72340172838076673 + i64.store buf($pop25), $pop24 + i32.const $1=, 1 +.LBB1_4: # %for.cond3 + # =>This Inner Loop Header: Depth=1 + block + loop # label4: + i32.const $push39=, -1 + i32.add $push9=, $1, $pop39 + i32.const $push38=, 62 + i32.gt_u $push10=, $pop9, $pop38 + br_if 1, $pop10 # 1: down to label3 +# BB#5: # %for.cond3.for.body6_crit_edge + # in Loop: Header=BB1_4 Depth=1 + i32.const $push42=, buf + i32.add $0=, $1, $pop42 + i32.const $push41=, 1 + i32.add $push0=, $1, $pop41 + copy_local $1=, $pop0 + i32.load8_u $push17=, 0($0) + i32.const $push40=, 1 + i32.eq $push18=, $pop17, $pop40 + br_if 0, $pop18 # 0: up to label4 + br 2 # 2: down to label1 +.LBB1_6: # %for.end15 + end_loop + end_block # label3: + i32.const $push12=, 0 + i64.const $push11=, 0 + i64.store buf+56($pop12), $pop11 + i32.const $push56=, 0 + i64.const $push55=, 0 + i64.store buf+48($pop56), $pop55 + i32.const $push54=, 0 + i64.const $push53=, 0 + i64.store buf+40($pop54), $pop53 + i32.const $push52=, 0 + i64.const $push51=, 0 + i64.store buf+32($pop52), $pop51 + i32.const $push50=, 0 + i64.const $push49=, 0 + i64.store buf+24($pop50), $pop49 + i32.const $push48=, 0 + i64.const $push47=, 0 + i64.store buf+16($pop48), $pop47 + i32.const $push46=, 0 + i64.const $push45=, 0 + i64.store buf+8($pop46), $pop45 + i32.const $push44=, 0 + i64.const $push43=, 0 + i64.store buf($pop44), $pop43 + i32.const $1=, 1 +.LBB1_7: # %for.cond16 + # =>This Inner Loop Header: Depth=1 + loop # label5: + i32.const $push58=, -1 + i32.add $push13=, $1, $pop58 + i32.const $push57=, 62 + i32.gt_u $push14=, $pop13, $pop57 + br_if 2, $pop14 # 2: down to label0 +# BB#8: # %for.cond16.for.body19_crit_edge + # in Loop: Header=BB1_7 Depth=1 + i32.const $push60=, buf + i32.add $0=, $1, $pop60 + i32.const $push59=, 1 + i32.add $push1=, $1, $pop59 + copy_local $1=, $pop1 + i32.load8_u $push16=, 0($0) + i32.eqz $push61=, $pop16 + br_if 0, $pop61 # 0: up to label5 +.LBB1_9: # %if.then + end_loop + end_block # label1: + call abort@FUNCTION + unreachable +.LBB1_10: # %if.end33 + end_block # label0: + i32.const $push15=, 0 + # fallthrough-return: $pop15 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden buf # @buf + .type buf,@object + .section .bss.buf,"aw",@nobits + .globl buf + .p2align 4 +buf: + .skip 65 + .size buf, 65 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr27285.c.s b/src/binaryen/test/torture-s/pr27285.c.s new file mode 100644 index 0000000000..92f3c50da1 --- /dev/null +++ b/src/binaryen/test/torture-s/pr27285.c.s @@ -0,0 +1,156 @@ + .text + .file "pr27285.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + block + i32.load8_u $push8=, 1($0) + tee_local $push7=, $3=, $pop8 + i32.eqz $push22=, $pop7 + br_if 0, $pop22 # 0: down to label0 +# BB#1: # %while.body.lr.ph + i32.const $push0=, 3 + i32.add $1=, $1, $pop0 + i32.const $push9=, 3 + i32.add $0=, $0, $pop9 +.LBB0_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push21=, 255 + i32.const $push20=, 255 + i32.const $push19=, 8 + i32.sub $push1=, $pop19, $3 + i32.shl $push2=, $pop20, $pop1 + i32.const $push18=, 7 + i32.gt_s $push17=, $3, $pop18 + tee_local $push16=, $2=, $pop17 + i32.select $push3=, $pop21, $pop2, $pop16 + i32.load8_u $push4=, 0($0) + i32.and $push5=, $pop3, $pop4 + i32.store8 0($1), $pop5 + i32.const $push15=, 1 + i32.add $1=, $1, $pop15 + i32.const $push14=, 1 + i32.add $0=, $0, $pop14 + i32.const $push13=, -8 + i32.add $push6=, $3, $pop13 + i32.const $push12=, 0 + i32.select $push11=, $pop6, $pop12, $2 + tee_local $push10=, $3=, $pop11 + br_if 0, $pop10 # 0: up to label1 +.LBB0_3: # %while.end + end_loop + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push31=, 0 + i32.const $push29=, 0 + i32.load $push28=, __stack_pointer($pop29) + i32.const $push30=, 48 + i32.sub $push53=, $pop28, $pop30 + tee_local $push52=, $0=, $pop53 + i32.store __stack_pointer($pop31), $pop52 + i32.const $push35=, 24 + i32.add $push36=, $0, $pop35 + i32.const $push2=, 18 + i32.add $push3=, $pop36, $pop2 + i32.const $push0=, 0 + i32.load8_u $push1=, .Lmain.x+18($pop0) + i32.store8 0($pop3), $pop1 + i32.const $push37=, 24 + i32.add $push38=, $0, $pop37 + i32.const $push5=, 16 + i32.add $push6=, $pop38, $pop5 + i32.const $push51=, 0 + i32.load16_u $push4=, .Lmain.x+16($pop51):p2align=0 + i32.store16 0($pop6), $pop4 + i32.const $push39=, 24 + i32.add $push40=, $0, $pop39 + i32.const $push8=, 8 + i32.add $push9=, $pop40, $pop8 + i32.const $push50=, 0 + i64.load $push7=, .Lmain.x+8($pop50):p2align=0 + i64.store 0($pop9), $pop7 + i32.const $push49=, 0 + i64.load $push10=, .Lmain.x($pop49):p2align=0 + i64.store 24($0), $pop10 + i32.const $push48=, 18 + i32.add $push11=, $0, $pop48 + i32.const $push47=, 0 + i32.store8 0($pop11), $pop47 + i32.const $push46=, 16 + i32.add $push12=, $0, $pop46 + i32.const $push45=, 0 + i32.store16 0($pop12), $pop45 + i32.const $push44=, 8 + i32.add $push13=, $0, $pop44 + i64.const $push14=, 0 + i64.store 0($pop13), $pop14 + i64.const $push43=, 0 + i64.store 0($0), $pop43 + i32.const $push41=, 24 + i32.add $push42=, $0, $pop41 + call foo@FUNCTION, $pop42, $0 + block + i32.load8_u $push16=, 3($0) + i32.const $push15=, 170 + i32.ne $push17=, $pop16, $pop15 + br_if 0, $pop17 # 0: down to label2 +# BB#1: # %lor.lhs.false + i32.load8_u $push19=, 4($0) + i32.const $push18=, 187 + i32.ne $push20=, $pop19, $pop18 + br_if 0, $pop20 # 0: down to label2 +# BB#2: # %lor.lhs.false13 + i32.load8_u $push22=, 5($0) + i32.const $push21=, 204 + i32.ne $push23=, $pop22, $pop21 + br_if 0, $pop23 # 0: down to label2 +# BB#3: # %lor.lhs.false22 + i32.load8_u $push25=, 6($0) + i32.const $push24=, 128 + i32.ne $push26=, $pop25, $pop24 + br_if 0, $pop26 # 0: down to label2 +# BB#4: # %if.end + i32.const $push34=, 0 + i32.const $push32=, 48 + i32.add $push33=, $0, $pop32 + i32.store __stack_pointer($pop34), $pop33 + i32.const $push27=, 0 + return $pop27 +.LBB1_5: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .Lmain.x,@object # @main.x + .section .rodata..Lmain.x,"a",@progbits +.Lmain.x: + .int8 0 # 0x0 + .int8 25 # 0x19 + .int8 0 # 0x0 + .asciz "\252\273\314\335\000\000\000\000\000\000\000\000\000\000\000" + .size .Lmain.x, 19 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr27364.c.s b/src/binaryen/test/torture-s/pr27364.c.s new file mode 100644 index 0000000000..61bf576738 --- /dev/null +++ b/src/binaryen/test/torture-s/pr27364.c.s @@ -0,0 +1,50 @@ + .text + .file "pr27364.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $1=, 0 + block + i32.const $push0=, 1294 + i32.gt_u $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push2=, 3321928 + i32.mul $push3=, $0, $pop2 + i32.const $push4=, 1000000 + i32.div_u $push5=, $pop3, $pop4 + i32.const $push6=, 1 + i32.add $push7=, $pop5, $pop6 + i32.const $push8=, 4 + i32.shr_u $1=, $pop7, $pop8 +.LBB0_2: # %return + end_block # label0: + copy_local $push9=, $1 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr27671-1.c.s b/src/binaryen/test/torture-s/pr27671-1.c.s new file mode 100644 index 0000000000..fe14c41810 --- /dev/null +++ b/src/binaryen/test/torture-s/pr27671-1.c.s @@ -0,0 +1,19 @@ + .text + .file "pr27671-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr28289.c.s b/src/binaryen/test/torture-s/pr28289.c.s new file mode 100644 index 0000000000..4c86272f26 --- /dev/null +++ b/src/binaryen/test/torture-s/pr28289.c.s @@ -0,0 +1,77 @@ + .text + .file "pr28289.c" + .section .text.ix86_split_ashr,"ax",@progbits + .hidden ix86_split_ashr # -- Begin function ix86_split_ashr + .globl ix86_split_ashr + .type ix86_split_ashr,@function +ix86_split_ashr: # @ix86_split_ashr + .param i32 +# BB#0: # %entry + i32.const $push3=, 0 + i32.const $push1=, ok@FUNCTION + i32.const $push0=, gen_x86_64_shrd@FUNCTION + i32.select $push2=, $pop1, $pop0, $0 + i32.call_indirect $drop=, $pop3, $pop2 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size ix86_split_ashr, .Lfunc_end0-ix86_split_ashr + # -- End function + .section .text.ok,"ax",@progbits + .hidden ok # -- Begin function ok + .globl ok + .type ok,@function +ok: # @ok + .param i32 + .result i32 +# BB#0: # %entry + call exit@FUNCTION, $0 + unreachable + .endfunc +.Lfunc_end1: + .size ok, .Lfunc_end1-ok + # -- End function + .section .text.gen_x86_64_shrd,"ax",@progbits + .type gen_x86_64_shrd,@function # -- Begin function gen_x86_64_shrd +gen_x86_64_shrd: # @gen_x86_64_shrd + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size gen_x86_64_shrd, .Lfunc_end2-gen_x86_64_shrd + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push3=, ok@FUNCTION + i32.const $push2=, gen_x86_64_shrd@FUNCTION + i32.const $push6=, 0 + i32.load $push1=, one($pop6) + i32.select $push4=, $pop3, $pop2, $pop1 + i32.call_indirect $drop=, $pop0, $pop4 + i32.const $push5=, 1 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden one # @one + .type one,@object + .section .data.one,"aw",@progbits + .globl one + .p2align 2 +one: + .int32 1 # 0x1 + .size one, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr28403.c.s b/src/binaryen/test/torture-s/pr28403.c.s new file mode 100644 index 0000000000..50860c224f --- /dev/null +++ b/src/binaryen/test/torture-s/pr28403.c.s @@ -0,0 +1,88 @@ + .text + .file "pr28403.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32, i32, i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.add $push0=, $1, $0 + i32.add $push1=, $pop0, $2 + i32.add $push2=, $pop1, $3 + i32.add $push3=, $pop2, $4 + i32.add $push4=, $pop3, $5 + i32.add $push5=, $pop4, $6 + i32.add $push6=, $pop5, $7 + i32.store global($pop7), $pop6 + copy_local $push8=, $7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i64 + .result i64 +# BB#0: # %entry + i32.const $push4=, 1 + i32.const $push3=, 2 + i32.const $push10=, 1 + i32.const $push2=, 3 + i32.const $push9=, 1 + i32.const $push1=, 4 + i32.const $push8=, 1 + i32.const $push0=, 5 + i32.call $drop=, foo@FUNCTION, $pop4, $pop3, $pop10, $pop2, $pop9, $pop1, $pop8, $pop0 + i32.const $push5=, 0 + i64.load32_u $push6=, global($pop5) + i64.shr_u $push7=, $0, $pop6 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i64.const $push0=, 81985529216486895 + i64.call $push1=, bar@FUNCTION, $pop0 + i64.const $push2=, 312749974122 + i64.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden global # @global + .type global,@object + .section .bss.global,"aw",@nobits + .globl global + .p2align 2 +global: + .int32 0 # 0x0 + .size global, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr28651.c.s b/src/binaryen/test/torture-s/pr28651.c.s new file mode 100644 index 0000000000..c27b1ce983 --- /dev/null +++ b/src/binaryen/test/torture-s/pr28651.c.s @@ -0,0 +1,44 @@ + .text + .file "pr28651.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2147483643 + i32.gt_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 2147483647 + i32.call $push1=, foo@FUNCTION, $pop0 + i32.eqz $push3=, $pop1 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push2=, 0 + return $pop2 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr28778.c.s b/src/binaryen/test/torture-s/pr28778.c.s new file mode 100644 index 0000000000..77f187a605 --- /dev/null +++ b/src/binaryen/test/torture-s/pr28778.c.s @@ -0,0 +1,82 @@ + .text + .file "pr28778.c" + .section .text.find,"ax",@progbits + .hidden find # -- Begin function find + .globl find + .type find,@function +find: # @find + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 128 + i32.sub $push12=, $pop4, $pop6 + tee_local $push11=, $1=, $pop12 + i32.store __stack_pointer($pop7), $pop11 + block + br_if 0, $0 # 0: down to label0 +# BB#1: # %if.else + i32.const $push0=, 42 + i32.store 12($1), $pop0 + copy_local $0=, $1 +.LBB0_2: # %if.end + end_block # label0: + block + i32.load $push1=, 12($0) + i32.const $push2=, 42 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#3: # %aglChoosePixelFormat.exit + i32.const $push10=, 0 + i32.const $push8=, 128 + i32.add $push9=, $1, $pop8 + i32.store __stack_pointer($pop10), $pop9 + return +.LBB0_4: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size find, .Lfunc_end0-find + # -- End function + .section .text.aglChoosePixelFormat,"ax",@progbits + .hidden aglChoosePixelFormat # -- Begin function aglChoosePixelFormat + .globl aglChoosePixelFormat + .type aglChoosePixelFormat,@function +aglChoosePixelFormat: # @aglChoosePixelFormat + .param i32 +# BB#0: # %entry + block + i32.load $push0=, 12($0) + i32.const $push1=, 42 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label2 +# BB#1: # %if.end + return +.LBB1_2: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size aglChoosePixelFormat, .Lfunc_end1-aglChoosePixelFormat + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %find.exit + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr28982a.c.s b/src/binaryen/test/torture-s/pr28982a.c.s new file mode 100644 index 0000000000..c152bd957c --- /dev/null +++ b/src/binaryen/test/torture-s/pr28982a.c.s @@ -0,0 +1,589 @@ + .text + .file "pr28982a.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32 +# BB#0: # %entry + block + block + i32.eqz $push143=, $0 + br_if 0, $pop143 # 0: down to label1 +# BB#1: # %while.body.lr.ph + i32.const $push119=, 0 + i32.load $push0=, incs($pop119) + i32.const $push40=, 2 + i32.shl $20=, $pop0, $pop40 + i32.const $push118=, 0 + i32.load $push1=, incs+4($pop118) + i32.const $push117=, 2 + i32.shl $19=, $pop1, $pop117 + i32.const $push116=, 0 + i32.load $push2=, incs+8($pop116) + i32.const $push115=, 2 + i32.shl $18=, $pop2, $pop115 + i32.const $push114=, 0 + i32.load $push3=, incs+12($pop114) + i32.const $push113=, 2 + i32.shl $17=, $pop3, $pop113 + i32.const $push112=, 0 + i32.load $push4=, incs+16($pop112) + i32.const $push111=, 2 + i32.shl $16=, $pop4, $pop111 + i32.const $push110=, 0 + i32.load $push5=, incs+20($pop110) + i32.const $push109=, 2 + i32.shl $15=, $pop5, $pop109 + i32.const $push108=, 0 + i32.load $push6=, incs+24($pop108) + i32.const $push107=, 2 + i32.shl $14=, $pop6, $pop107 + i32.const $push106=, 0 + i32.load $push7=, incs+28($pop106) + i32.const $push105=, 2 + i32.shl $13=, $pop7, $pop105 + i32.const $push104=, 0 + i32.load $push8=, incs+32($pop104) + i32.const $push103=, 2 + i32.shl $12=, $pop8, $pop103 + i32.const $push102=, 0 + i32.load $push9=, incs+36($pop102) + i32.const $push101=, 2 + i32.shl $11=, $pop9, $pop101 + i32.const $push100=, 0 + i32.load $push10=, incs+40($pop100) + i32.const $push99=, 2 + i32.shl $10=, $pop10, $pop99 + i32.const $push98=, 0 + i32.load $push11=, incs+44($pop98) + i32.const $push97=, 2 + i32.shl $9=, $pop11, $pop97 + i32.const $push96=, 0 + i32.load $push12=, incs+48($pop96) + i32.const $push95=, 2 + i32.shl $8=, $pop12, $pop95 + i32.const $push94=, 0 + i32.load $push13=, incs+52($pop94) + i32.const $push93=, 2 + i32.shl $7=, $pop13, $pop93 + i32.const $push92=, 0 + i32.load $push14=, incs+56($pop92) + i32.const $push91=, 2 + i32.shl $6=, $pop14, $pop91 + i32.const $push90=, 0 + i32.load $push15=, incs+60($pop90) + i32.const $push89=, 2 + i32.shl $5=, $pop15, $pop89 + i32.const $push88=, 0 + i32.load $push16=, incs+64($pop88) + i32.const $push87=, 2 + i32.shl $4=, $pop16, $pop87 + i32.const $push86=, 0 + i32.load $push17=, incs+68($pop86) + i32.const $push85=, 2 + i32.shl $3=, $pop17, $pop85 + i32.const $push84=, 0 + i32.load $push18=, incs+72($pop84) + i32.const $push83=, 2 + i32.shl $2=, $pop18, $pop83 + i32.const $push82=, 0 + i32.load $push19=, incs+76($pop82) + i32.const $push81=, 2 + i32.shl $1=, $pop19, $pop81 + i32.const $push80=, 0 + i32.load $21=, ptrs($pop80) + i32.const $push79=, 0 + i32.load $22=, ptrs+4($pop79) + i32.const $push78=, 0 + i32.load $23=, ptrs+8($pop78) + i32.const $push77=, 0 + i32.load $24=, ptrs+12($pop77) + i32.const $push76=, 0 + i32.load $25=, ptrs+16($pop76) + i32.const $push75=, 0 + i32.load $26=, ptrs+20($pop75) + i32.const $push74=, 0 + i32.load $27=, ptrs+24($pop74) + i32.const $push73=, 0 + i32.load $28=, ptrs+28($pop73) + i32.const $push72=, 0 + i32.load $29=, ptrs+32($pop72) + i32.const $push71=, 0 + i32.load $30=, ptrs+36($pop71) + i32.const $push70=, 0 + i32.load $31=, ptrs+40($pop70) + i32.const $push69=, 0 + i32.load $32=, ptrs+44($pop69) + i32.const $push68=, 0 + i32.load $33=, ptrs+48($pop68) + i32.const $push67=, 0 + i32.load $34=, ptrs+52($pop67) + i32.const $push66=, 0 + i32.load $35=, ptrs+56($pop66) + i32.const $push65=, 0 + i32.load $36=, ptrs+60($pop65) + i32.const $push64=, 0 + i32.load $37=, ptrs+64($pop64) + i32.const $push63=, 0 + i32.load $38=, ptrs+68($pop63) + i32.const $push62=, 0 + i32.load $39=, ptrs+72($pop62) + i32.const $push61=, 0 + i32.load $40=, ptrs+76($pop61) + f32.const $60=, 0x0p0 + f32.const $59=, 0x0p0 + f32.const $58=, 0x0p0 + f32.const $57=, 0x0p0 + f32.const $56=, 0x0p0 + f32.const $55=, 0x0p0 + f32.const $54=, 0x0p0 + f32.const $53=, 0x0p0 + f32.const $52=, 0x0p0 + f32.const $51=, 0x0p0 + f32.const $50=, 0x0p0 + f32.const $49=, 0x0p0 + f32.const $48=, 0x0p0 + f32.const $47=, 0x0p0 + f32.const $46=, 0x0p0 + f32.const $45=, 0x0p0 + f32.const $44=, 0x0p0 + f32.const $43=, 0x0p0 + f32.const $42=, 0x0p0 + f32.const $41=, 0x0p0 +.LBB0_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + f32.load $push41=, 0($40) + f32.add $60=, $60, $pop41 + f32.load $push42=, 0($39) + f32.add $59=, $59, $pop42 + f32.load $push43=, 0($38) + f32.add $58=, $58, $pop43 + f32.load $push44=, 0($37) + f32.add $57=, $57, $pop44 + f32.load $push45=, 0($36) + f32.add $56=, $56, $pop45 + f32.load $push46=, 0($35) + f32.add $55=, $55, $pop46 + f32.load $push47=, 0($34) + f32.add $54=, $54, $pop47 + f32.load $push48=, 0($33) + f32.add $53=, $53, $pop48 + f32.load $push49=, 0($32) + f32.add $52=, $52, $pop49 + f32.load $push50=, 0($31) + f32.add $51=, $51, $pop50 + f32.load $push51=, 0($30) + f32.add $50=, $50, $pop51 + f32.load $push52=, 0($29) + f32.add $49=, $49, $pop52 + f32.load $push53=, 0($28) + f32.add $48=, $48, $pop53 + f32.load $push54=, 0($27) + f32.add $47=, $47, $pop54 + f32.load $push55=, 0($26) + f32.add $46=, $46, $pop55 + f32.load $push56=, 0($25) + f32.add $45=, $45, $pop56 + f32.load $push57=, 0($24) + f32.add $44=, $44, $pop57 + f32.load $push58=, 0($23) + f32.add $43=, $43, $pop58 + f32.load $push59=, 0($22) + f32.add $42=, $42, $pop59 + f32.load $push60=, 0($21) + f32.add $41=, $41, $pop60 + i32.add $push39=, $21, $20 + copy_local $21=, $pop39 + i32.add $push38=, $22, $19 + copy_local $22=, $pop38 + i32.add $push37=, $23, $18 + copy_local $23=, $pop37 + i32.add $push36=, $24, $17 + copy_local $24=, $pop36 + i32.add $push35=, $25, $16 + copy_local $25=, $pop35 + i32.add $push34=, $26, $15 + copy_local $26=, $pop34 + i32.add $push33=, $27, $14 + copy_local $27=, $pop33 + i32.add $push32=, $28, $13 + copy_local $28=, $pop32 + i32.add $push31=, $29, $12 + copy_local $29=, $pop31 + i32.add $push30=, $30, $11 + copy_local $30=, $pop30 + i32.add $push29=, $31, $10 + copy_local $31=, $pop29 + i32.add $push28=, $32, $9 + copy_local $32=, $pop28 + i32.add $push27=, $33, $8 + copy_local $33=, $pop27 + i32.add $push26=, $34, $7 + copy_local $34=, $pop26 + i32.add $push25=, $35, $6 + copy_local $35=, $pop25 + i32.add $push24=, $36, $5 + copy_local $36=, $pop24 + i32.add $push23=, $37, $4 + copy_local $37=, $pop23 + i32.add $push22=, $38, $3 + copy_local $38=, $pop22 + i32.add $push21=, $39, $2 + copy_local $39=, $pop21 + i32.add $push20=, $40, $1 + copy_local $40=, $pop20 + i32.const $push122=, -1 + i32.add $push121=, $0, $pop122 + tee_local $push120=, $0=, $pop121 + br_if 0, $pop120 # 0: up to label2 + br 2 # 2: down to label0 +.LBB0_3: + end_loop + end_block # label1: + f32.const $41=, 0x0p0 + f32.const $42=, 0x0p0 + f32.const $43=, 0x0p0 + f32.const $44=, 0x0p0 + f32.const $45=, 0x0p0 + f32.const $46=, 0x0p0 + f32.const $47=, 0x0p0 + f32.const $48=, 0x0p0 + f32.const $49=, 0x0p0 + f32.const $50=, 0x0p0 + f32.const $51=, 0x0p0 + f32.const $52=, 0x0p0 + f32.const $53=, 0x0p0 + f32.const $54=, 0x0p0 + f32.const $55=, 0x0p0 + f32.const $56=, 0x0p0 + f32.const $57=, 0x0p0 + f32.const $58=, 0x0p0 + f32.const $59=, 0x0p0 + f32.const $60=, 0x0p0 +.LBB0_4: # %while.end + end_block # label0: + i32.const $push142=, 0 + f32.store results+4($pop142), $42 + i32.const $push141=, 0 + f32.store results($pop141), $41 + i32.const $push140=, 0 + f32.store results+8($pop140), $43 + i32.const $push139=, 0 + f32.store results+12($pop139), $44 + i32.const $push138=, 0 + f32.store results+16($pop138), $45 + i32.const $push137=, 0 + f32.store results+20($pop137), $46 + i32.const $push136=, 0 + f32.store results+24($pop136), $47 + i32.const $push135=, 0 + f32.store results+28($pop135), $48 + i32.const $push134=, 0 + f32.store results+32($pop134), $49 + i32.const $push133=, 0 + f32.store results+36($pop133), $50 + i32.const $push132=, 0 + f32.store results+40($pop132), $51 + i32.const $push131=, 0 + f32.store results+44($pop131), $52 + i32.const $push130=, 0 + f32.store results+48($pop130), $53 + i32.const $push129=, 0 + f32.store results+52($pop129), $54 + i32.const $push128=, 0 + f32.store results+56($pop128), $55 + i32.const $push127=, 0 + f32.store results+60($pop127), $56 + i32.const $push126=, 0 + f32.store results+64($pop126), $57 + i32.const $push125=, 0 + f32.store results+68($pop125), $58 + i32.const $push124=, 0 + f32.store results+72($pop124), $59 + i32.const $push123=, 0 + f32.store results+76($pop123), $60 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $0=, input + i32.const $1=, 0 + i32.const $push154=, 0 + i32.const $push153=, input + i32.store ptrs($pop154), $pop153 + i32.const $push152=, 0 + i32.const $push0=, input+4 + i32.store ptrs+4($pop152), $pop0 + i32.const $push151=, 0 + i32.const $push1=, input+8 + i32.store ptrs+8($pop151), $pop1 + i32.const $push150=, 0 + i64.const $push2=, 8589934593 + i64.store incs+4($pop150):p2align=2, $pop2 + i32.const $push149=, 0 + i32.const $push3=, input+12 + i32.store ptrs+12($pop149), $pop3 + i32.const $push148=, 0 + i32.const $push4=, input+16 + i32.store ptrs+16($pop148), $pop4 + i32.const $push147=, 0 + i64.const $push5=, 17179869187 + i64.store incs+12($pop147):p2align=2, $pop5 + i32.const $push146=, 0 + i32.const $push6=, input+20 + i32.store ptrs+20($pop146), $pop6 + i32.const $push145=, 0 + i32.const $push7=, input+24 + i32.store ptrs+24($pop145), $pop7 + i32.const $push144=, 0 + i64.const $push8=, 25769803781 + i64.store incs+20($pop144):p2align=2, $pop8 + i32.const $push143=, 0 + i32.const $push9=, input+28 + i32.store ptrs+28($pop143), $pop9 + i32.const $push142=, 0 + i32.const $push10=, input+32 + i32.store ptrs+32($pop142), $pop10 + i32.const $push141=, 0 + i64.const $push11=, 34359738375 + i64.store incs+28($pop141):p2align=2, $pop11 + i32.const $push140=, 0 + i32.const $push12=, input+36 + i32.store ptrs+36($pop140), $pop12 + i32.const $push139=, 0 + i32.const $push13=, input+40 + i32.store ptrs+40($pop139), $pop13 + i32.const $push138=, 0 + i64.const $push14=, 42949672969 + i64.store incs+36($pop138):p2align=2, $pop14 + i32.const $push137=, 0 + i32.const $push15=, input+44 + i32.store ptrs+44($pop137), $pop15 + i32.const $push136=, 0 + i32.const $push135=, 0 + i32.store incs($pop136), $pop135 + i32.const $push134=, 0 + i32.const $push16=, input+48 + i32.store ptrs+48($pop134), $pop16 + i32.const $push133=, 0 + i32.const $push17=, 11 + i32.store incs+44($pop133), $pop17 + i32.const $push132=, 0 + i32.const $push18=, 12 + i32.store incs+48($pop132), $pop18 + i32.const $push131=, 0 + i32.const $push19=, input+52 + i32.store ptrs+52($pop131), $pop19 + i32.const $push130=, 0 + i32.const $push20=, 13 + i32.store incs+52($pop130), $pop20 + i32.const $push129=, 0 + i32.const $push21=, input+56 + i32.store ptrs+56($pop129), $pop21 + i32.const $push128=, 0 + i32.const $push22=, 14 + i32.store incs+56($pop128), $pop22 + i32.const $push127=, 0 + i32.const $push23=, input+60 + i32.store ptrs+60($pop127), $pop23 + i32.const $push126=, 0 + i32.const $push24=, 15 + i32.store incs+60($pop126), $pop24 + i32.const $push125=, 0 + i32.const $push25=, input+64 + i32.store ptrs+64($pop125), $pop25 + i32.const $push124=, 0 + i32.const $push26=, 16 + i32.store incs+64($pop124), $pop26 + i32.const $push123=, 0 + i32.const $push27=, input+68 + i32.store ptrs+68($pop123), $pop27 + i32.const $push122=, 0 + i32.const $push28=, 17 + i32.store incs+68($pop122), $pop28 + i32.const $push121=, 0 + i32.const $push29=, input+72 + i32.store ptrs+72($pop121), $pop29 + i32.const $push120=, 0 + i32.const $push30=, 18 + i32.store incs+72($pop120), $pop30 + i32.const $push119=, 0 + i32.const $push31=, input+76 + i32.store ptrs+76($pop119), $pop31 + i32.const $push118=, 0 + i32.const $push32=, 19 + i32.store incs+76($pop118), $pop32 +.LBB1_1: # %for.body4 + # =>This Inner Loop Header: Depth=1 + loop # label3: + f32.convert_s/i32 $push33=, $1 + f32.store 0($0), $pop33 + i32.const $push159=, 4 + i32.add $0=, $0, $pop159 + i32.const $push158=, 1 + i32.add $push157=, $1, $pop158 + tee_local $push156=, $1=, $pop157 + i32.const $push155=, 80 + i32.ne $push34=, $pop156, $pop155 + br_if 0, $pop34 # 0: up to label3 +# BB#2: # %for.end8 + end_loop + i32.const $push35=, 4 + call foo@FUNCTION, $pop35 + i32.const $push36=, 0 + f32.load $push40=, results($pop36) + f32.const $push41=, 0x0p0 + f32.ne $push42=, $pop40, $pop41 + i32.const $push178=, 0 + f32.load $push37=, results+4($pop178) + f32.const $push38=, 0x1.4p3 + f32.ne $push39=, $pop37, $pop38 + i32.or $push43=, $pop42, $pop39 + i32.const $push177=, 0 + f32.load $push44=, results+8($pop177) + f32.const $push45=, 0x1.4p4 + f32.ne $push46=, $pop44, $pop45 + i32.or $push47=, $pop43, $pop46 + i32.const $push176=, 0 + f32.load $push48=, results+12($pop176) + f32.const $push49=, 0x1.ep4 + f32.ne $push50=, $pop48, $pop49 + i32.or $push51=, $pop47, $pop50 + i32.const $push175=, 0 + f32.load $push52=, results+16($pop175) + f32.const $push53=, 0x1.4p5 + f32.ne $push54=, $pop52, $pop53 + i32.or $push55=, $pop51, $pop54 + i32.const $push174=, 0 + f32.load $push56=, results+20($pop174) + f32.const $push57=, 0x1.9p5 + f32.ne $push58=, $pop56, $pop57 + i32.or $push59=, $pop55, $pop58 + i32.const $push173=, 0 + f32.load $push60=, results+24($pop173) + f32.const $push61=, 0x1.ep5 + f32.ne $push62=, $pop60, $pop61 + i32.or $push63=, $pop59, $pop62 + i32.const $push172=, 0 + f32.load $push64=, results+28($pop172) + f32.const $push65=, 0x1.18p6 + f32.ne $push66=, $pop64, $pop65 + i32.or $push67=, $pop63, $pop66 + i32.const $push171=, 0 + f32.load $push68=, results+32($pop171) + f32.const $push69=, 0x1.4p6 + f32.ne $push70=, $pop68, $pop69 + i32.or $push71=, $pop67, $pop70 + i32.const $push170=, 0 + f32.load $push72=, results+36($pop170) + f32.const $push73=, 0x1.68p6 + f32.ne $push74=, $pop72, $pop73 + i32.or $push75=, $pop71, $pop74 + i32.const $push169=, 0 + f32.load $push76=, results+40($pop169) + f32.const $push77=, 0x1.9p6 + f32.ne $push78=, $pop76, $pop77 + i32.or $push79=, $pop75, $pop78 + i32.const $push168=, 0 + f32.load $push80=, results+44($pop168) + f32.const $push81=, 0x1.b8p6 + f32.ne $push82=, $pop80, $pop81 + i32.or $push83=, $pop79, $pop82 + i32.const $push167=, 0 + f32.load $push84=, results+48($pop167) + f32.const $push85=, 0x1.ep6 + f32.ne $push86=, $pop84, $pop85 + i32.or $push87=, $pop83, $pop86 + i32.const $push166=, 0 + f32.load $push88=, results+52($pop166) + f32.const $push89=, 0x1.04p7 + f32.ne $push90=, $pop88, $pop89 + i32.or $push91=, $pop87, $pop90 + i32.const $push165=, 0 + f32.load $push92=, results+56($pop165) + f32.const $push93=, 0x1.18p7 + f32.ne $push94=, $pop92, $pop93 + i32.or $push95=, $pop91, $pop94 + i32.const $push164=, 0 + f32.load $push96=, results+60($pop164) + f32.const $push97=, 0x1.2cp7 + f32.ne $push98=, $pop96, $pop97 + i32.or $push99=, $pop95, $pop98 + i32.const $push163=, 0 + f32.load $push100=, results+64($pop163) + f32.const $push101=, 0x1.4p7 + f32.ne $push102=, $pop100, $pop101 + i32.or $push103=, $pop99, $pop102 + i32.const $push162=, 0 + f32.load $push104=, results+68($pop162) + f32.const $push105=, 0x1.54p7 + f32.ne $push106=, $pop104, $pop105 + i32.or $push107=, $pop103, $pop106 + i32.const $push161=, 0 + f32.load $push108=, results+72($pop161) + f32.const $push109=, 0x1.68p7 + f32.ne $push110=, $pop108, $pop109 + i32.or $push111=, $pop107, $pop110 + i32.const $push160=, 0 + f32.load $push112=, results+76($pop160) + f32.const $push113=, 0x1.7cp7 + f32.ne $push114=, $pop112, $pop113 + i32.or $push115=, $pop111, $pop114 + i32.const $push116=, 1 + i32.and $push117=, $pop115, $pop116 + # fallthrough-return: $pop117 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden incs # @incs + .type incs,@object + .section .bss.incs,"aw",@nobits + .globl incs + .p2align 4 +incs: + .skip 80 + .size incs, 80 + + .hidden ptrs # @ptrs + .type ptrs,@object + .section .bss.ptrs,"aw",@nobits + .globl ptrs + .p2align 4 +ptrs: + .skip 80 + .size ptrs, 80 + + .hidden results # @results + .type results,@object + .section .bss.results,"aw",@nobits + .globl results + .p2align 4 +results: + .skip 80 + .size results, 80 + + .hidden input # @input + .type input,@object + .section .bss.input,"aw",@nobits + .globl input + .p2align 4 +input: + .skip 320 + .size input, 320 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr28982b.c.s b/src/binaryen/test/torture-s/pr28982b.c.s new file mode 100644 index 0000000000..6c24d54db1 --- /dev/null +++ b/src/binaryen/test/torture-s/pr28982b.c.s @@ -0,0 +1,629 @@ + .text + .file "pr28982b.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push4=, 0 + i32.load $push2=, incs($pop4) + i32.load $push0=, 0($0) + i32.add $push3=, $pop2, $pop0 + i32.store incs($pop1), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, i32 +# BB#0: # %entry + i32.const $push64=, 0 + i32.const $push62=, 0 + i32.load $push61=, __stack_pointer($pop62) + i32.const $push63=, 524288 + i32.sub $push75=, $pop61, $pop63 + tee_local $push74=, $61=, $pop75 + i32.store __stack_pointer($pop64), $pop74 + i32.const $push68=, 262144 + i32.add $push69=, $61, $pop68 + i32.const $push73=, 0 + i32.const $push72=, 262144 + i32.call $drop=, memset@FUNCTION, $pop69, $pop73, $pop72 + block + block + i32.eqz $push161=, $0 + br_if 0, $pop161 # 0: down to label1 +# BB#1: # %while.body.lr.ph + i32.const $push134=, 0 + i32.load $push0=, incs($pop134) + i32.const $push40=, 2 + i32.shl $20=, $pop0, $pop40 + i32.const $push133=, 0 + i32.load $push1=, incs+4($pop133) + i32.const $push132=, 2 + i32.shl $19=, $pop1, $pop132 + i32.const $push131=, 0 + i32.load $push2=, incs+8($pop131) + i32.const $push130=, 2 + i32.shl $18=, $pop2, $pop130 + i32.const $push129=, 0 + i32.load $push3=, incs+12($pop129) + i32.const $push128=, 2 + i32.shl $17=, $pop3, $pop128 + i32.const $push127=, 0 + i32.load $push4=, incs+16($pop127) + i32.const $push126=, 2 + i32.shl $16=, $pop4, $pop126 + i32.const $push125=, 0 + i32.load $push5=, incs+20($pop125) + i32.const $push124=, 2 + i32.shl $15=, $pop5, $pop124 + i32.const $push123=, 0 + i32.load $push6=, incs+24($pop123) + i32.const $push122=, 2 + i32.shl $14=, $pop6, $pop122 + i32.const $push121=, 0 + i32.load $push7=, incs+28($pop121) + i32.const $push120=, 2 + i32.shl $13=, $pop7, $pop120 + i32.const $push119=, 0 + i32.load $push8=, incs+32($pop119) + i32.const $push118=, 2 + i32.shl $12=, $pop8, $pop118 + i32.const $push117=, 0 + i32.load $push9=, incs+36($pop117) + i32.const $push116=, 2 + i32.shl $11=, $pop9, $pop116 + i32.const $push115=, 0 + i32.load $push10=, incs+40($pop115) + i32.const $push114=, 2 + i32.shl $10=, $pop10, $pop114 + i32.const $push113=, 0 + i32.load $push11=, incs+44($pop113) + i32.const $push112=, 2 + i32.shl $9=, $pop11, $pop112 + i32.const $push111=, 0 + i32.load $push12=, incs+48($pop111) + i32.const $push110=, 2 + i32.shl $8=, $pop12, $pop110 + i32.const $push109=, 0 + i32.load $push13=, incs+52($pop109) + i32.const $push108=, 2 + i32.shl $7=, $pop13, $pop108 + i32.const $push107=, 0 + i32.load $push14=, incs+56($pop107) + i32.const $push106=, 2 + i32.shl $6=, $pop14, $pop106 + i32.const $push105=, 0 + i32.load $push15=, incs+60($pop105) + i32.const $push104=, 2 + i32.shl $5=, $pop15, $pop104 + i32.const $push103=, 0 + i32.load $push16=, incs+64($pop103) + i32.const $push102=, 2 + i32.shl $4=, $pop16, $pop102 + i32.const $push101=, 0 + i32.load $push17=, incs+68($pop101) + i32.const $push100=, 2 + i32.shl $3=, $pop17, $pop100 + i32.const $push99=, 0 + i32.load $push18=, incs+72($pop99) + i32.const $push98=, 2 + i32.shl $2=, $pop18, $pop98 + i32.const $push97=, 0 + i32.load $push19=, incs+76($pop97) + i32.const $push96=, 2 + i32.shl $1=, $pop19, $pop96 + i32.const $push95=, 0 + i32.load $21=, ptrs($pop95) + i32.const $push94=, 0 + i32.load $22=, ptrs+4($pop94) + i32.const $push93=, 0 + i32.load $23=, ptrs+8($pop93) + i32.const $push92=, 0 + i32.load $24=, ptrs+12($pop92) + i32.const $push91=, 0 + i32.load $25=, ptrs+16($pop91) + i32.const $push90=, 0 + i32.load $26=, ptrs+20($pop90) + i32.const $push89=, 0 + i32.load $27=, ptrs+24($pop89) + i32.const $push88=, 0 + i32.load $28=, ptrs+28($pop88) + i32.const $push87=, 0 + i32.load $29=, ptrs+32($pop87) + i32.const $push86=, 0 + i32.load $30=, ptrs+36($pop86) + i32.const $push85=, 0 + i32.load $31=, ptrs+40($pop85) + i32.const $push84=, 0 + i32.load $32=, ptrs+44($pop84) + i32.const $push83=, 0 + i32.load $33=, ptrs+48($pop83) + i32.const $push82=, 0 + i32.load $34=, ptrs+52($pop82) + i32.const $push81=, 0 + i32.load $35=, ptrs+56($pop81) + i32.const $push80=, 0 + i32.load $36=, ptrs+60($pop80) + i32.const $push79=, 0 + i32.load $37=, ptrs+64($pop79) + i32.const $push78=, 0 + i32.load $38=, ptrs+68($pop78) + i32.const $push77=, 0 + i32.load $39=, ptrs+72($pop77) + i32.const $push76=, 0 + i32.load $40=, ptrs+76($pop76) + f32.const $60=, 0x0p0 + f32.const $59=, 0x0p0 + f32.const $58=, 0x0p0 + f32.const $57=, 0x0p0 + f32.const $56=, 0x0p0 + f32.const $55=, 0x0p0 + f32.const $54=, 0x0p0 + f32.const $53=, 0x0p0 + f32.const $52=, 0x0p0 + f32.const $51=, 0x0p0 + f32.const $50=, 0x0p0 + f32.const $49=, 0x0p0 + f32.const $48=, 0x0p0 + f32.const $47=, 0x0p0 + f32.const $46=, 0x0p0 + f32.const $45=, 0x0p0 + f32.const $44=, 0x0p0 + f32.const $43=, 0x0p0 + f32.const $42=, 0x0p0 + f32.const $41=, 0x0p0 +.LBB1_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + f32.load $push41=, 0($40) + f32.add $60=, $60, $pop41 + f32.load $push42=, 0($39) + f32.add $59=, $59, $pop42 + f32.load $push43=, 0($38) + f32.add $58=, $58, $pop43 + f32.load $push44=, 0($37) + f32.add $57=, $57, $pop44 + f32.load $push45=, 0($36) + f32.add $56=, $56, $pop45 + f32.load $push46=, 0($35) + f32.add $55=, $55, $pop46 + f32.load $push47=, 0($34) + f32.add $54=, $54, $pop47 + f32.load $push48=, 0($33) + f32.add $53=, $53, $pop48 + f32.load $push49=, 0($32) + f32.add $52=, $52, $pop49 + f32.load $push50=, 0($31) + f32.add $51=, $51, $pop50 + f32.load $push51=, 0($30) + f32.add $50=, $50, $pop51 + f32.load $push52=, 0($29) + f32.add $49=, $49, $pop52 + f32.load $push53=, 0($28) + f32.add $48=, $48, $pop53 + f32.load $push54=, 0($27) + f32.add $47=, $47, $pop54 + f32.load $push55=, 0($26) + f32.add $46=, $46, $pop55 + f32.load $push56=, 0($25) + f32.add $45=, $45, $pop56 + f32.load $push57=, 0($24) + f32.add $44=, $44, $pop57 + f32.load $push58=, 0($23) + f32.add $43=, $43, $pop58 + f32.load $push59=, 0($22) + f32.add $42=, $42, $pop59 + f32.load $push60=, 0($21) + f32.add $41=, $41, $pop60 + i32.add $push39=, $21, $20 + copy_local $21=, $pop39 + i32.add $push38=, $22, $19 + copy_local $22=, $pop38 + i32.add $push37=, $23, $18 + copy_local $23=, $pop37 + i32.add $push36=, $24, $17 + copy_local $24=, $pop36 + i32.add $push35=, $25, $16 + copy_local $25=, $pop35 + i32.add $push34=, $26, $15 + copy_local $26=, $pop34 + i32.add $push33=, $27, $14 + copy_local $27=, $pop33 + i32.add $push32=, $28, $13 + copy_local $28=, $pop32 + i32.add $push31=, $29, $12 + copy_local $29=, $pop31 + i32.add $push30=, $30, $11 + copy_local $30=, $pop30 + i32.add $push29=, $31, $10 + copy_local $31=, $pop29 + i32.add $push28=, $32, $9 + copy_local $32=, $pop28 + i32.add $push27=, $33, $8 + copy_local $33=, $pop27 + i32.add $push26=, $34, $7 + copy_local $34=, $pop26 + i32.add $push25=, $35, $6 + copy_local $35=, $pop25 + i32.add $push24=, $36, $5 + copy_local $36=, $pop24 + i32.add $push23=, $37, $4 + copy_local $37=, $pop23 + i32.add $push22=, $38, $3 + copy_local $38=, $pop22 + i32.add $push21=, $39, $2 + copy_local $39=, $pop21 + i32.add $push20=, $40, $1 + copy_local $40=, $pop20 + i32.const $push137=, -1 + i32.add $push136=, $0, $pop137 + tee_local $push135=, $0=, $pop136 + br_if 0, $pop135 # 0: up to label2 + br 2 # 2: down to label0 +.LBB1_3: + end_loop + end_block # label1: + f32.const $41=, 0x0p0 + f32.const $42=, 0x0p0 + f32.const $43=, 0x0p0 + f32.const $44=, 0x0p0 + f32.const $45=, 0x0p0 + f32.const $46=, 0x0p0 + f32.const $47=, 0x0p0 + f32.const $48=, 0x0p0 + f32.const $49=, 0x0p0 + f32.const $50=, 0x0p0 + f32.const $51=, 0x0p0 + f32.const $52=, 0x0p0 + f32.const $53=, 0x0p0 + f32.const $54=, 0x0p0 + f32.const $55=, 0x0p0 + f32.const $56=, 0x0p0 + f32.const $57=, 0x0p0 + f32.const $58=, 0x0p0 + f32.const $59=, 0x0p0 + f32.const $60=, 0x0p0 +.LBB1_4: # %while.end + end_block # label0: + i32.const $push160=, 0 + f32.store results+4($pop160), $42 + i32.const $push159=, 0 + f32.store results($pop159), $41 + i32.const $push158=, 0 + f32.store results+8($pop158), $43 + i32.const $push157=, 0 + f32.store results+12($pop157), $44 + i32.const $push156=, 0 + f32.store results+16($pop156), $45 + i32.const $push155=, 0 + f32.store results+20($pop155), $46 + i32.const $push154=, 0 + f32.store results+24($pop154), $47 + i32.const $push153=, 0 + f32.store results+28($pop153), $48 + i32.const $push152=, 0 + f32.store results+32($pop152), $49 + i32.const $push151=, 0 + f32.store results+36($pop151), $50 + i32.const $push150=, 0 + f32.store results+40($pop150), $51 + i32.const $push149=, 0 + f32.store results+44($pop149), $52 + i32.const $push148=, 0 + f32.store results+48($pop148), $53 + i32.const $push147=, 0 + f32.store results+52($pop147), $54 + i32.const $push146=, 0 + f32.store results+56($pop146), $55 + i32.const $push145=, 0 + f32.store results+60($pop145), $56 + i32.const $push144=, 0 + f32.store results+64($pop144), $57 + i32.const $push143=, 0 + f32.store results+68($pop143), $58 + i32.const $push142=, 0 + f32.store results+72($pop142), $59 + i32.const $push141=, 0 + f32.store results+76($pop141), $60 + i32.const $push70=, 262144 + i32.add $push71=, $61, $pop70 + i32.const $push140=, 262144 + i32.call $push139=, memcpy@FUNCTION, $61, $pop71, $pop140 + tee_local $push138=, $21=, $pop139 + call bar@FUNCTION, $pop138 + i32.const $push67=, 0 + i32.const $push65=, 524288 + i32.add $push66=, $21, $pop65 + i32.store __stack_pointer($pop67), $pop66 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $0=, input + i32.const $1=, 0 + i32.const $push154=, 0 + i32.const $push153=, input + i32.store ptrs($pop154), $pop153 + i32.const $push152=, 0 + i32.const $push0=, input+4 + i32.store ptrs+4($pop152), $pop0 + i32.const $push151=, 0 + i32.const $push1=, input+8 + i32.store ptrs+8($pop151), $pop1 + i32.const $push150=, 0 + i64.const $push2=, 8589934593 + i64.store incs+4($pop150):p2align=2, $pop2 + i32.const $push149=, 0 + i32.const $push3=, input+12 + i32.store ptrs+12($pop149), $pop3 + i32.const $push148=, 0 + i32.const $push4=, input+16 + i32.store ptrs+16($pop148), $pop4 + i32.const $push147=, 0 + i64.const $push5=, 17179869187 + i64.store incs+12($pop147):p2align=2, $pop5 + i32.const $push146=, 0 + i32.const $push6=, input+20 + i32.store ptrs+20($pop146), $pop6 + i32.const $push145=, 0 + i32.const $push7=, input+24 + i32.store ptrs+24($pop145), $pop7 + i32.const $push144=, 0 + i64.const $push8=, 25769803781 + i64.store incs+20($pop144):p2align=2, $pop8 + i32.const $push143=, 0 + i32.const $push9=, input+28 + i32.store ptrs+28($pop143), $pop9 + i32.const $push142=, 0 + i32.const $push10=, input+32 + i32.store ptrs+32($pop142), $pop10 + i32.const $push141=, 0 + i64.const $push11=, 34359738375 + i64.store incs+28($pop141):p2align=2, $pop11 + i32.const $push140=, 0 + i32.const $push12=, input+36 + i32.store ptrs+36($pop140), $pop12 + i32.const $push139=, 0 + i32.const $push13=, input+40 + i32.store ptrs+40($pop139), $pop13 + i32.const $push138=, 0 + i64.const $push14=, 42949672969 + i64.store incs+36($pop138):p2align=2, $pop14 + i32.const $push137=, 0 + i32.const $push15=, input+44 + i32.store ptrs+44($pop137), $pop15 + i32.const $push136=, 0 + i32.const $push135=, 0 + i32.store incs($pop136), $pop135 + i32.const $push134=, 0 + i32.const $push16=, input+48 + i32.store ptrs+48($pop134), $pop16 + i32.const $push133=, 0 + i32.const $push17=, 11 + i32.store incs+44($pop133), $pop17 + i32.const $push132=, 0 + i32.const $push18=, 12 + i32.store incs+48($pop132), $pop18 + i32.const $push131=, 0 + i32.const $push19=, input+52 + i32.store ptrs+52($pop131), $pop19 + i32.const $push130=, 0 + i32.const $push20=, 13 + i32.store incs+52($pop130), $pop20 + i32.const $push129=, 0 + i32.const $push21=, input+56 + i32.store ptrs+56($pop129), $pop21 + i32.const $push128=, 0 + i32.const $push22=, 14 + i32.store incs+56($pop128), $pop22 + i32.const $push127=, 0 + i32.const $push23=, input+60 + i32.store ptrs+60($pop127), $pop23 + i32.const $push126=, 0 + i32.const $push24=, 15 + i32.store incs+60($pop126), $pop24 + i32.const $push125=, 0 + i32.const $push25=, input+64 + i32.store ptrs+64($pop125), $pop25 + i32.const $push124=, 0 + i32.const $push26=, 16 + i32.store incs+64($pop124), $pop26 + i32.const $push123=, 0 + i32.const $push27=, input+68 + i32.store ptrs+68($pop123), $pop27 + i32.const $push122=, 0 + i32.const $push28=, 17 + i32.store incs+68($pop122), $pop28 + i32.const $push121=, 0 + i32.const $push29=, input+72 + i32.store ptrs+72($pop121), $pop29 + i32.const $push120=, 0 + i32.const $push30=, 18 + i32.store incs+72($pop120), $pop30 + i32.const $push119=, 0 + i32.const $push31=, input+76 + i32.store ptrs+76($pop119), $pop31 + i32.const $push118=, 0 + i32.const $push32=, 19 + i32.store incs+76($pop118), $pop32 +.LBB2_1: # %for.body4 + # =>This Inner Loop Header: Depth=1 + loop # label3: + f32.convert_s/i32 $push33=, $1 + f32.store 0($0), $pop33 + i32.const $push159=, 4 + i32.add $0=, $0, $pop159 + i32.const $push158=, 1 + i32.add $push157=, $1, $pop158 + tee_local $push156=, $1=, $pop157 + i32.const $push155=, 80 + i32.ne $push34=, $pop156, $pop155 + br_if 0, $pop34 # 0: up to label3 +# BB#2: # %for.end8 + end_loop + i32.const $push35=, 4 + call foo@FUNCTION, $pop35 + i32.const $push36=, 0 + f32.load $push40=, results($pop36) + f32.const $push41=, 0x0p0 + f32.ne $push42=, $pop40, $pop41 + i32.const $push178=, 0 + f32.load $push37=, results+4($pop178) + f32.const $push38=, 0x1.4p3 + f32.ne $push39=, $pop37, $pop38 + i32.or $push43=, $pop42, $pop39 + i32.const $push177=, 0 + f32.load $push44=, results+8($pop177) + f32.const $push45=, 0x1.4p4 + f32.ne $push46=, $pop44, $pop45 + i32.or $push47=, $pop43, $pop46 + i32.const $push176=, 0 + f32.load $push48=, results+12($pop176) + f32.const $push49=, 0x1.ep4 + f32.ne $push50=, $pop48, $pop49 + i32.or $push51=, $pop47, $pop50 + i32.const $push175=, 0 + f32.load $push52=, results+16($pop175) + f32.const $push53=, 0x1.4p5 + f32.ne $push54=, $pop52, $pop53 + i32.or $push55=, $pop51, $pop54 + i32.const $push174=, 0 + f32.load $push56=, results+20($pop174) + f32.const $push57=, 0x1.9p5 + f32.ne $push58=, $pop56, $pop57 + i32.or $push59=, $pop55, $pop58 + i32.const $push173=, 0 + f32.load $push60=, results+24($pop173) + f32.const $push61=, 0x1.ep5 + f32.ne $push62=, $pop60, $pop61 + i32.or $push63=, $pop59, $pop62 + i32.const $push172=, 0 + f32.load $push64=, results+28($pop172) + f32.const $push65=, 0x1.18p6 + f32.ne $push66=, $pop64, $pop65 + i32.or $push67=, $pop63, $pop66 + i32.const $push171=, 0 + f32.load $push68=, results+32($pop171) + f32.const $push69=, 0x1.4p6 + f32.ne $push70=, $pop68, $pop69 + i32.or $push71=, $pop67, $pop70 + i32.const $push170=, 0 + f32.load $push72=, results+36($pop170) + f32.const $push73=, 0x1.68p6 + f32.ne $push74=, $pop72, $pop73 + i32.or $push75=, $pop71, $pop74 + i32.const $push169=, 0 + f32.load $push76=, results+40($pop169) + f32.const $push77=, 0x1.9p6 + f32.ne $push78=, $pop76, $pop77 + i32.or $push79=, $pop75, $pop78 + i32.const $push168=, 0 + f32.load $push80=, results+44($pop168) + f32.const $push81=, 0x1.b8p6 + f32.ne $push82=, $pop80, $pop81 + i32.or $push83=, $pop79, $pop82 + i32.const $push167=, 0 + f32.load $push84=, results+48($pop167) + f32.const $push85=, 0x1.ep6 + f32.ne $push86=, $pop84, $pop85 + i32.or $push87=, $pop83, $pop86 + i32.const $push166=, 0 + f32.load $push88=, results+52($pop166) + f32.const $push89=, 0x1.04p7 + f32.ne $push90=, $pop88, $pop89 + i32.or $push91=, $pop87, $pop90 + i32.const $push165=, 0 + f32.load $push92=, results+56($pop165) + f32.const $push93=, 0x1.18p7 + f32.ne $push94=, $pop92, $pop93 + i32.or $push95=, $pop91, $pop94 + i32.const $push164=, 0 + f32.load $push96=, results+60($pop164) + f32.const $push97=, 0x1.2cp7 + f32.ne $push98=, $pop96, $pop97 + i32.or $push99=, $pop95, $pop98 + i32.const $push163=, 0 + f32.load $push100=, results+64($pop163) + f32.const $push101=, 0x1.4p7 + f32.ne $push102=, $pop100, $pop101 + i32.or $push103=, $pop99, $pop102 + i32.const $push162=, 0 + f32.load $push104=, results+68($pop162) + f32.const $push105=, 0x1.54p7 + f32.ne $push106=, $pop104, $pop105 + i32.or $push107=, $pop103, $pop106 + i32.const $push161=, 0 + f32.load $push108=, results+72($pop161) + f32.const $push109=, 0x1.68p7 + f32.ne $push110=, $pop108, $pop109 + i32.or $push111=, $pop107, $pop110 + i32.const $push160=, 0 + f32.load $push112=, results+76($pop160) + f32.const $push113=, 0x1.7cp7 + f32.ne $push114=, $pop112, $pop113 + i32.or $push115=, $pop111, $pop114 + i32.const $push116=, 1 + i32.and $push117=, $pop115, $pop116 + # fallthrough-return: $pop117 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden incs # @incs + .type incs,@object + .section .bss.incs,"aw",@nobits + .globl incs + .p2align 4 +incs: + .skip 80 + .size incs, 80 + + .hidden ptrs # @ptrs + .type ptrs,@object + .section .bss.ptrs,"aw",@nobits + .globl ptrs + .p2align 4 +ptrs: + .skip 80 + .size ptrs, 80 + + .hidden results # @results + .type results,@object + .section .bss.results,"aw",@nobits + .globl results + .p2align 4 +results: + .skip 80 + .size results, 80 + + .hidden input # @input + .type input,@object + .section .bss.input,"aw",@nobits + .globl input + .p2align 4 +input: + .skip 320 + .size input, 320 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr29006.c.s b/src/binaryen/test/torture-s/pr29006.c.s new file mode 100644 index 0000000000..3f4564970b --- /dev/null +++ b/src/binaryen/test/torture-s/pr29006.c.s @@ -0,0 +1,61 @@ + .text + .file "pr29006.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + i64.const $push0=, 0 + i64.store 1($0):p2align=0, $pop0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64, i32 +# BB#0: # %entry + i32.const $push10=, 0 + i32.const $push8=, 0 + i32.load $push7=, __stack_pointer($pop8) + i32.const $push9=, 16 + i32.sub $push16=, $pop7, $pop9 + tee_local $push15=, $1=, $pop16 + i32.store __stack_pointer($pop10), $pop15 + i32.const $push2=, 8 + i32.add $push3=, $1, $pop2 + i32.const $push0=, 0 + i32.load8_u $push1=, .Lmain.s+8($pop0) + i32.store8 0($pop3), $pop1 + i32.const $push14=, 0 + i64.load $push4=, .Lmain.s($pop14):p2align=0 + i64.store 0($1), $pop4 + call foo@FUNCTION, $1 + i64.load $0=, 1($1):p2align=0 + i32.const $push13=, 0 + i32.const $push11=, 16 + i32.add $push12=, $1, $pop11 + i32.store __stack_pointer($pop13), $pop12 + i64.const $push5=, 0 + i64.ne $push6=, $0, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .Lmain.s,@object # @main.s + .section .rodata..Lmain.s,"a",@progbits +.Lmain.s: + .int8 1 # 0x1 + .int64 -1 # 0xffffffffffffffff + .size .Lmain.s, 9 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr29156.c.s b/src/binaryen/test/torture-s/pr29156.c.s new file mode 100644 index 0000000000..f5e7290cd4 --- /dev/null +++ b/src/binaryen/test/torture-s/pr29156.c.s @@ -0,0 +1,50 @@ + .text + .file "pr29156.c" + .section .text.bla,"ax",@progbits + .hidden bla # -- Begin function bla + .globl bla + .type bla,@function +bla: # @bla + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.store 4($1), $pop0 + i32.const $push1=, 0 + i32.const $push4=, 1 + i32.store global($pop1), $pop4 + i32.const $push2=, 8 + i32.store 0($0), $pop2 + i32.load $push3=, 4($1) + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size bla, .Lfunc_end0-bla + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store global($pop1), $pop0 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden global # @global + .type global,@object + .section .bss.global,"aw",@nobits + .globl global + .p2align 2 +global: + .int32 0 # 0x0 + .size global, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr29695-1.c.s b/src/binaryen/test/torture-s/pr29695-1.c.s new file mode 100644 index 0000000000..12ce8c3ebd --- /dev/null +++ b/src/binaryen/test/torture-s/pr29695-1.c.s @@ -0,0 +1,121 @@ + .text + .file "pr29695-1.c" + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 128 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 128 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size f2, .Lfunc_end1-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .result i32 +# BB#0: # %entry + i32.const $push0=, 896 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size f3, .Lfunc_end2-f3 + # -- End function + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 + .result i32 +# BB#0: # %entry + i32.const $push0=, -128 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size f4, .Lfunc_end3-f4 + # -- End function + .section .text.f5,"ax",@progbits + .hidden f5 # -- Begin function f5 + .globl f5 + .type f5,@function +f5: # @f5 + .result i64 +# BB#0: # %entry + i64.const $push0=, 2147483648 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size f5, .Lfunc_end4-f5 + # -- End function + .section .text.f6,"ax",@progbits + .hidden f6 # -- Begin function f6 + .globl f6 + .type f6,@function +f6: # @f6 + .result i64 +# BB#0: # %entry + i64.const $push0=, 2147483648 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end5: + .size f6, .Lfunc_end5-f6 + # -- End function + .section .text.f7,"ax",@progbits + .hidden f7 # -- Begin function f7 + .globl f7 + .type f7,@function +f7: # @f7 + .result i64 +# BB#0: # %entry + i64.const $push0=, 15032385536 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end6: + .size f7, .Lfunc_end6-f7 + # -- End function + .section .text.f8,"ax",@progbits + .hidden f8 # -- Begin function f8 + .globl f8 + .type f8,@function +f8: # @f8 + .result i64 +# BB#0: # %entry + i64.const $push0=, -2147483648 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end7: + .size f8, .Lfunc_end7-f8 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end8: + .size main, .Lfunc_end8-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr29695-2.c.s b/src/binaryen/test/torture-s/pr29695-2.c.s new file mode 100644 index 0000000000..73a6b0411e --- /dev/null +++ b/src/binaryen/test/torture-s/pr29695-2.c.s @@ -0,0 +1,221 @@ + .text + .file "pr29695-2.c" + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, a($pop0) + i32.const $push2=, 128 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_u $push1=, b($pop0) + i32.const $push2=, 128 + i32.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size f2, .Lfunc_end1-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_s $push1=, b($pop0) + i32.const $push2=, 31 + i32.shr_s $push3=, $pop1, $pop2 + i32.const $push4=, 896 + i32.and $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end2: + .size f3, .Lfunc_end2-f3 + # -- End function + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_s $push1=, b($pop0) + i32.const $push2=, 31 + i32.shr_s $push3=, $pop1, $pop2 + i32.const $push4=, -128 + i32.and $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end3: + .size f4, .Lfunc_end3-f4 + # -- End function + .section .text.f5,"ax",@progbits + .hidden f5 # -- Begin function f5 + .globl f5 + .type f5,@function +f5: # @f5 + .result i64 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load $push1=, c($pop0) + i64.const $push2=, 2147483648 + i64.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end4: + .size f5, .Lfunc_end4-f5 + # -- End function + .section .text.f6,"ax",@progbits + .hidden f6 # -- Begin function f6 + .globl f6 + .type f6,@function +f6: # @f6 + .result i64 +# BB#0: # %entry + i32.const $push0=, 0 + i64.load32_u $push1=, d($pop0) + i64.const $push2=, 2147483648 + i64.and $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end5: + .size f6, .Lfunc_end5-f6 + # -- End function + .section .text.f7,"ax",@progbits + .hidden f7 # -- Begin function f7 + .globl f7 + .type f7,@function +f7: # @f7 + .result i64 +# BB#0: # %entry + i64.const $push4=, 15032385536 + i64.const $push3=, 0 + i32.const $push0=, 0 + i32.load $push1=, d($pop0) + i32.const $push6=, 0 + i32.lt_s $push2=, $pop1, $pop6 + i64.select $push5=, $pop4, $pop3, $pop2 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end6: + .size f7, .Lfunc_end6-f7 + # -- End function + .section .text.f8,"ax",@progbits + .hidden f8 # -- Begin function f8 + .globl f8 + .type f8,@function +f8: # @f8 + .result i64 +# BB#0: # %entry + i64.const $push4=, -2147483648 + i64.const $push3=, 0 + i32.const $push0=, 0 + i32.load $push1=, d($pop0) + i32.const $push6=, 0 + i32.lt_s $push2=, $pop1, $pop6 + i64.select $push5=, $pop4, $pop3, $pop2 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end7: + .size f8, .Lfunc_end7-f8 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push10=, 0 + i32.load8_u $push0=, a($pop10) + i32.const $push1=, 7 + i32.shr_u $push2=, $pop0, $pop1 + i32.eqz $push17=, $pop2 + br_if 0, $pop17 # 0: down to label0 +# BB#1: # %if.end + i32.const $push12=, 0 + i32.load8_s $push3=, b($pop12) + i32.const $push11=, 0 + i32.ge_s $push4=, $pop3, $pop11 + br_if 0, $pop4 # 0: down to label0 +# BB#2: # %if.end12 + i32.const $push14=, 0 + i32.load $push5=, c($pop14) + i32.const $push13=, 0 + i32.ge_s $push6=, $pop5, $pop13 + br_if 0, $pop6 # 0: down to label0 +# BB#3: # %if.end16 + i32.const $push16=, 0 + i32.load $push7=, d($pop16) + i32.const $push15=, 0 + i32.ge_s $push8=, $pop7, $pop15 + br_if 0, $pop8 # 0: down to label0 +# BB#4: # %if.end28 + i32.const $push9=, 0 + return $pop9 +.LBB8_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end8: + .size main, .Lfunc_end8-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 128 # 0x80 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .data.b,"aw",@progbits + .globl b +b: + .int8 128 # 0x80 + .size b, 1 + + .hidden c # @c + .type c,@object + .section .data.c,"aw",@progbits + .globl c + .p2align 3 +c: + .int64 2147483648 # 0x80000000 + .size c, 8 + + .hidden d # @d + .type d,@object + .section .data.d,"aw",@progbits + .globl d + .p2align 2 +d: + .int32 2147483648 # 0x80000000 + .size d, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr29797-1.c.s b/src/binaryen/test/torture-s/pr29797-1.c.s new file mode 100644 index 0000000000..d3bd96e094 --- /dev/null +++ b/src/binaryen/test/torture-s/pr29797-1.c.s @@ -0,0 +1,30 @@ + .text + .file "pr29797-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .result i32 +# BB#0: # %entry + i32.const $push0=, 32768 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr29797-2.c.s b/src/binaryen/test/torture-s/pr29797-2.c.s new file mode 100644 index 0000000000..2b218c5459 --- /dev/null +++ b/src/binaryen/test/torture-s/pr29797-2.c.s @@ -0,0 +1,30 @@ + .text + .file "pr29797-2.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .result i32 +# BB#0: # %entry + i32.const $push0=, 32768 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr29798.c.s b/src/binaryen/test/torture-s/pr29798.c.s new file mode 100644 index 0000000000..2d74d98668 --- /dev/null +++ b/src/binaryen/test/torture-s/pr29798.c.s @@ -0,0 +1,17 @@ + .text + .file "pr29798.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end4.1 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr30185.c.s b/src/binaryen/test/torture-s/pr30185.c.s new file mode 100644 index 0000000000..9009600e2e --- /dev/null +++ b/src/binaryen/test/torture-s/pr30185.c.s @@ -0,0 +1,33 @@ + .text + .file "pr30185.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 +# BB#0: # %entry + i64.load $push1=, 8($1) + i64.load $push0=, 8($2) + i64.div_s $push2=, $pop1, $pop0 + i64.store 8($0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end10 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr30778.c.s b/src/binaryen/test/torture-s/pr30778.c.s new file mode 100644 index 0000000000..701a7dd4c6 --- /dev/null +++ b/src/binaryen/test/torture-s/pr30778.c.s @@ -0,0 +1,83 @@ + .text + .file "pr30778.c" + .section .text.init_reg_last,"ax",@progbits + .hidden init_reg_last # -- Begin function init_reg_last + .globl init_reg_last + .type init_reg_last,@function +init_reg_last: # @init_reg_last + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push12=, reg_stat($pop0) + tee_local $push11=, $0=, $pop12 + i64.const $push1=, 0 + i64.store 0($pop11):p2align=0, $pop1 + i32.const $push2=, 18 + i32.add $push3=, $0, $pop2 + i32.const $push10=, 0 + i32.store8 0($pop3), $pop10 + i32.const $push4=, 16 + i32.add $push5=, $0, $pop4 + i32.const $push9=, 0 + i32.store16 0($pop5):p2align=0, $pop9 + i32.const $push6=, 8 + i32.add $push7=, $0, $pop6 + i64.const $push8=, 0 + i64.store 0($pop7):p2align=0, $pop8 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size init_reg_last, .Lfunc_end0-init_reg_last + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 32 + i32.sub $push15=, $pop3, $pop5 + tee_local $push14=, $0=, $pop15 + i32.store __stack_pointer($pop6), $pop14 + i32.const $push13=, 0 + i32.const $push10=, 8 + i32.add $push11=, $0, $pop10 + i32.store reg_stat($pop13), $pop11 + i32.const $push0=, -1 + i32.store 28($0), $pop0 + call init_reg_last@FUNCTION + block + i32.load $push1=, 28($0) + i32.const $push12=, -1 + i32.ne $push2=, $pop1, $pop12 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push9=, 0 + i32.const $push7=, 32 + i32.add $push8=, $0, $pop7 + i32.store __stack_pointer($pop9), $pop8 + i32.const $push16=, 0 + return $pop16 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type reg_stat,@object # @reg_stat + .section .bss.reg_stat,"aw",@nobits + .p2align 2 +reg_stat: + .int32 0 + .size reg_stat, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr31072.c.s b/src/binaryen/test/torture-s/pr31072.c.s new file mode 100644 index 0000000000..dc6f093c97 --- /dev/null +++ b/src/binaryen/test/torture-s/pr31072.c.s @@ -0,0 +1,38 @@ + .text + .file "pr31072.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load $push0=, ReadyFlag_NotProperlyInitialized($pop3) + i32.const $push1=, 1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden ReadyFlag_NotProperlyInitialized # @ReadyFlag_NotProperlyInitialized + .type ReadyFlag_NotProperlyInitialized,@object + .section .data.ReadyFlag_NotProperlyInitialized,"aw",@progbits + .globl ReadyFlag_NotProperlyInitialized + .p2align 2 +ReadyFlag_NotProperlyInitialized: + .int32 1 # 0x1 + .size ReadyFlag_NotProperlyInitialized, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr31136.c.s b/src/binaryen/test/torture-s/pr31136.c.s new file mode 100644 index 0000000000..0c7c9c9d06 --- /dev/null +++ b/src/binaryen/test/torture-s/pr31136.c.s @@ -0,0 +1,34 @@ + .text + .file "pr31136.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push7=, 0 + i32.load16_u $push1=, s($pop7) + i32.const $push2=, 64512 + i32.and $push3=, $pop1, $pop2 + i32.const $push4=, 255 + i32.or $push5=, $pop3, $pop4 + i32.store16 s($pop0), $pop5 + i32.const $push6=, 0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 2 +s: + .skip 4 + .size s, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr31169.c.s b/src/binaryen/test/torture-s/pr31169.c.s new file mode 100644 index 0000000000..cc67be1aed --- /dev/null +++ b/src/binaryen/test/torture-s/pr31169.c.s @@ -0,0 +1,71 @@ + .text + .file "pr31169.c" + .section .text.sign_bit_p,"ax",@progbits + .hidden sign_bit_p # -- Begin function sign_bit_p + .globl sign_bit_p + .type sign_bit_p,@function +sign_bit_p: # @sign_bit_p + .param i32, i32, i32 + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + block + block + i32.load16_u $push0=, 0($0) + i32.const $push1=, 511 + i32.and $push20=, $pop0, $pop1 + tee_local $push19=, $0=, $pop20 + i32.const $push2=, 33 + i32.lt_u $push3=, $pop19, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %if.then + i32.const $3=, -1 + i32.const $push21=, -1 + i32.const $push9=, 64 + i32.sub $push10=, $pop9, $0 + i32.shr_u $5=, $pop21, $pop10 + i32.const $push13=, 1 + i32.const $push11=, -33 + i32.add $push12=, $0, $pop11 + i32.shl $0=, $pop13, $pop12 + i32.const $4=, 0 + br 1 # 1: down to label0 +.LBB0_2: # %if.else + end_block # label1: + i32.const $push6=, -1 + i32.const $push4=, 32 + i32.sub $push5=, $pop4, $0 + i32.shr_u $3=, $pop6, $pop5 + i32.const $push8=, 1 + i32.const $push22=, -1 + i32.add $push7=, $0, $pop22 + i32.shl $4=, $pop8, $pop7 + i32.const $5=, 0 + i32.const $0=, 0 +.LBB0_3: # %if.end + end_block # label0: + i32.and $push16=, $3, $2 + i32.eq $push17=, $pop16, $4 + i32.and $push14=, $5, $1 + i32.eq $push15=, $pop14, $0 + i32.and $push18=, $pop17, $pop15 + # fallthrough-return: $pop18 + .endfunc +.Lfunc_end0: + .size sign_bit_p, .Lfunc_end0-sign_bit_p + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %sign_bit_p.exit + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr31448-2.c.s b/src/binaryen/test/torture-s/pr31448-2.c.s new file mode 100644 index 0000000000..5dba895225 --- /dev/null +++ b/src/binaryen/test/torture-s/pr31448-2.c.s @@ -0,0 +1,76 @@ + .text + .file "pr31448-2.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g +# BB#0: # %entry + unreachable + unreachable + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push15=, next($pop0) + tee_local $push14=, $0=, $pop15 + i32.load $push1=, 0($0) + i32.const $push2=, -16777216 + i32.and $push3=, $pop1, $pop2 + i32.const $push4=, 16711422 + i32.or $push5=, $pop3, $pop4 + i32.store 0($pop14), $pop5 + i32.const $push13=, 0 + i32.load $push12=, next($pop13) + tee_local $push11=, $0=, $pop12 + i32.load $push6=, 4($0) + i32.const $push10=, -16777216 + i32.and $push7=, $pop6, $pop10 + i32.const $push9=, 16711422 + i32.or $push8=, $pop7, $pop9 + i32.store 4($pop11), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end6 + i32.const $push0=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push6=, $pop1, $pop3 + i32.const $push4=, 8 + i32.add $push5=, $pop6, $pop4 + i32.store next($pop0), $pop5 + i32.const $push7=, 0 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden next # @next + .type next,@object + .section .bss.next,"aw",@nobits + .globl next + .p2align 2 +next: + .int32 0 + .size next, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr31448.c.s b/src/binaryen/test/torture-s/pr31448.c.s new file mode 100644 index 0000000000..2c9a3ade70 --- /dev/null +++ b/src/binaryen/test/torture-s/pr31448.c.s @@ -0,0 +1,76 @@ + .text + .file "pr31448.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g +# BB#0: # %entry + unreachable + unreachable + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push15=, next($pop0) + tee_local $push14=, $0=, $pop15 + i32.load $push1=, 0($0) + i32.const $push2=, -16777216 + i32.and $push3=, $pop1, $pop2 + i32.const $push4=, 16711422 + i32.or $push5=, $pop3, $pop4 + i32.store 0($pop14), $pop5 + i32.const $push13=, 0 + i32.load $push12=, next($pop13) + tee_local $push11=, $0=, $pop12 + i32.load $push6=, 4($0) + i32.const $push10=, -16777216 + i32.and $push7=, $pop6, $pop10 + i32.const $push9=, 16711422 + i32.or $push8=, $pop7, $pop9 + i32.store 4($pop11), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end6 + i32.const $push0=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push6=, $pop1, $pop3 + i32.const $push4=, 8 + i32.add $push5=, $pop6, $pop4 + i32.store next($pop0), $pop5 + i32.const $push7=, 0 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden next # @next + .type next,@object + .section .bss.next,"aw",@nobits + .globl next + .p2align 2 +next: + .int32 0 + .size next, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr31605.c.s b/src/binaryen/test/torture-s/pr31605.c.s new file mode 100644 index 0000000000..32535939d3 --- /dev/null +++ b/src/binaryen/test/torture-s/pr31605.c.s @@ -0,0 +1,44 @@ + .text + .file "pr31605.c" + .section .text.put_field,"ax",@progbits + .hidden put_field # -- Begin function put_field + .globl put_field + .type put_field,@function +put_field: # @put_field + .param i32, i32 +# BB#0: # %entry + block + i32.add $push0=, $1, $0 + i32.const $push1=, -8 + i32.or $push2=, $pop0, $pop1 + i32.const $push5=, -8 + i32.ne $push3=, $pop2, $pop5 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable + .endfunc +.Lfunc_end0: + .size put_field, .Lfunc_end0-put_field + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr32244-1.c.s b/src/binaryen/test/torture-s/pr32244-1.c.s new file mode 100644 index 0000000000..80b448fd59 --- /dev/null +++ b/src/binaryen/test/torture-s/pr32244-1.c.s @@ -0,0 +1,59 @@ + .text + .file "pr32244-1.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i64 +# BB#0: # %entry + block + i32.const $push0=, 0 + i64.load $push1=, x($pop0) + i64.const $push2=, 32 + i64.shl $push3=, $pop1, $pop2 + i64.ne $push4=, $pop3, $0 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.then.i + i32.const $push0=, 0 + i32.const $push6=, 0 + i64.load $push1=, x($pop6) + i64.const $push2=, -1099511627776 + i64.and $push3=, $pop1, $pop2 + i64.const $push4=, 256 + i64.or $push5=, $pop3, $pop4 + i64.store x($pop0), $pop5 + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 3 +x: + .skip 8 + .size x, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr32500.c.s b/src/binaryen/test/torture-s/pr32500.c.s new file mode 100644 index 0000000000..63896dc66f --- /dev/null +++ b/src/binaryen/test/torture-s/pr32500.c.s @@ -0,0 +1,63 @@ + .text + .file "pr32500.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store x($pop0), $0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %if.then4 + i32.const $push0=, 57005 + call foo@FUNCTION, $pop0 + i32.const $push1=, 48879 + call foo@FUNCTION, $pop1 + i32.const $push2=, 4919 + call foo@FUNCTION, $pop2 + i32.const $push3=, 16962 + call foo@FUNCTION, $pop3 + call bar@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 2 +x: + .int32 0 # 0x0 + .size x, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr33142.c.s b/src/binaryen/test/torture-s/pr33142.c.s new file mode 100644 index 0000000000..ef8b4310aa --- /dev/null +++ b/src/binaryen/test/torture-s/pr33142.c.s @@ -0,0 +1,77 @@ + .text + .file "pr33142.c" + .section .text.lisp_atan2,"ax",@progbits + .hidden lisp_atan2 # -- Begin function lisp_atan2 + .globl lisp_atan2 + .type lisp_atan2,@function +lisp_atan2: # @lisp_atan2 + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $2=, 0 + block + i32.const $push0=, 1 + i32.lt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %entry + i32.const $push2=, 0 + i32.gt_s $push3=, $1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %if.then2 + i32.const $push4=, 31 + i32.shr_s $push8=, $1, $pop4 + tee_local $push7=, $2=, $pop8 + i32.add $push5=, $1, $pop7 + i32.xor $push6=, $pop5, $2 + i32.le_s $2=, $pop6, $0 +.LBB0_3: # %return + end_block # label0: + copy_local $push9=, $2 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end0: + .size lisp_atan2, .Lfunc_end0-lisp_atan2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 16 + i32.sub $push14=, $pop6, $pop8 + tee_local $push13=, $0=, $pop14 + i32.store __stack_pointer($pop9), $pop13 + i32.const $push0=, 63 + i32.store 12($0), $pop0 + i32.const $push1=, -77 + i32.store 8($0), $pop1 + block + i32.load $push2=, 12($0) + i32.load $push3=, 8($0) + i32.call $push4=, lisp_atan2@FUNCTION, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label1 +# BB#1: # %if.end + i32.const $push12=, 0 + i32.const $push10=, 16 + i32.add $push11=, $0, $pop10 + i32.store __stack_pointer($pop12), $pop11 + i32.const $push5=, 0 + return $pop5 +.LBB1_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr33382.c.s b/src/binaryen/test/torture-s/pr33382.c.s new file mode 100644 index 0000000000..1e65a66cb2 --- /dev/null +++ b/src/binaryen/test/torture-s/pr33382.c.s @@ -0,0 +1,60 @@ + .text + .file "pr33382.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store x+4($pop1), $pop0 + i32.const $push3=, 0 + i32.load $push2=, x+8($pop3) + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push3=, 0 + i32.const $push0=, 1 + i32.store x+4($pop3), $pop0 + block + i32.const $push2=, 0 + i32.load $push1=, x+8($pop2) + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 2 +x: + .int32 1 # 0x1 + .int32 2 # 0x2 + .int32 0 # 0x0 + .int32 2 # 0x2 + .int32 3 # 0x3 + .size x, 20 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr33631.c.s b/src/binaryen/test/torture-s/pr33631.c.s new file mode 100644 index 0000000000..faf8214585 --- /dev/null +++ b/src/binaryen/test/torture-s/pr33631.c.s @@ -0,0 +1,17 @@ + .text + .file "pr33631.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr33669.c.s b/src/binaryen/test/torture-s/pr33669.c.s new file mode 100644 index 0000000000..94c47d9ab0 --- /dev/null +++ b/src/binaryen/test/torture-s/pr33669.c.s @@ -0,0 +1,60 @@ + .text + .file "pr33669.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i64, i32 + .result i64 + .local i32, i64, i64 +# BB#0: # %entry + i64.const $5=, -1 + block + i32.load $push17=, 0($0) + tee_local $push16=, $3=, $pop17 + i32.add $push0=, $2, $3 + i64.extend_u/i32 $push1=, $3 + i64.rem_s $push15=, $1, $pop1 + tee_local $push14=, $4=, $pop15 + i32.wrap/i64 $push2=, $pop14 + i32.add $push3=, $pop0, $pop2 + i32.const $push4=, -1 + i32.add $push13=, $pop3, $pop4 + tee_local $push12=, $2=, $pop13 + i32.rem_u $push5=, $2, $3 + i32.sub $push6=, $pop12, $pop5 + i32.lt_u $push7=, $pop16, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %if.end + i64.sub $5=, $1, $4 + i32.load $push8=, 4($0) + i32.le_u $push9=, $pop8, $3 + br_if 0, $pop9 # 0: down to label0 +# BB#2: # %if.then13 + i32.const $push10=, 4 + i32.add $push11=, $0, $pop10 + i32.store 0($pop11), $3 +.LBB0_3: # %cleanup + end_block # label0: + copy_local $push18=, $5 + # fallthrough-return: $pop18 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr33779-1.c.s b/src/binaryen/test/torture-s/pr33779-1.c.s new file mode 100644 index 0000000000..c1524f2531 --- /dev/null +++ b/src/binaryen/test/torture-s/pr33779-1.c.s @@ -0,0 +1,34 @@ + .text + .file "pr33779-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1073741823 + i32.and $push1=, $0, $pop0 + i32.const $push3=, 1073741823 + i32.eq $push2=, $pop1, $pop3 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr33779-2.c.s b/src/binaryen/test/torture-s/pr33779-2.c.s new file mode 100644 index 0000000000..62c5a2880c --- /dev/null +++ b/src/binaryen/test/torture-s/pr33779-2.c.s @@ -0,0 +1,36 @@ + .text + .file "pr33779-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 4 + i32.add $push3=, $pop1, $pop2 + i32.const $push5=, 4 + i32.div_s $push4=, $pop3, $pop5 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr33870-1.c.s b/src/binaryen/test/torture-s/pr33870-1.c.s new file mode 100644 index 0000000000..2dec7d37be --- /dev/null +++ b/src/binaryen/test/torture-s/pr33870-1.c.s @@ -0,0 +1,489 @@ + .text + .file "pr33870-1.c" + .section .text.sort_pagelist,"ax",@progbits + .hidden sort_pagelist # -- Begin function sort_pagelist + .globl sort_pagelist + .type sort_pagelist,@function +sort_pagelist: # @sort_pagelist + .param i32 + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push42=, 0 + i32.const $push40=, 0 + i32.load $push39=, __stack_pointer($pop40) + i32.const $push41=, 160 + i32.sub $push66=, $pop39, $pop41 + tee_local $push65=, $4=, $pop66 + i32.store __stack_pointer($pop42), $pop65 + i32.const $push64=, 0 + i32.const $push0=, 100 + i32.call $1=, memset@FUNCTION, $4, $pop64, $pop0 + i32.const $4=, 0 + block + i32.eqz $push122=, $0 + br_if 0, $pop122 # 0: down to label0 +# BB#1: # %while.body.lr.ph + i32.const $push52=, 112 + i32.add $push53=, $1, $pop52 + i32.const $push68=, 32 + i32.add $3=, $pop53, $pop68 + i32.const $push54=, 112 + i32.add $push55=, $1, $pop54 + i32.const $push67=, 32 + i32.add $2=, $pop55, $pop67 + i32.const $push13=, 96 + i32.add $6=, $1, $pop13 +.LBB0_2: # %while.body + # =>This Loop Header: Depth=1 + # Child Loop BB0_3 Depth 2 + # Child Loop BB0_6 Depth 3 + # Child Loop BB0_19 Depth 2 + loop # label1: + copy_local $push74=, $0 + tee_local $push73=, $4=, $pop74 + i32.const $push72=, 32 + i32.add $push71=, $pop73, $pop72 + tee_local $push70=, $9=, $pop71 + i32.load $0=, 0($pop70) + i32.const $push69=, 0 + i32.store 0($9), $pop69 + i32.const $7=, 0 +.LBB0_3: # %for.body + # Parent Loop BB0_2 Depth=1 + # => This Loop Header: Depth=2 + # Child Loop BB0_6 Depth 3 + block + block + block + block + block + loop # label7: + i32.const $push79=, 2 + i32.shl $push1=, $7, $pop79 + i32.add $push78=, $1, $pop1 + tee_local $push77=, $5=, $pop78 + i32.load $push76=, 0($pop77) + tee_local $push75=, $9=, $pop76 + i32.eqz $push123=, $pop75 + br_if 1, $pop123 # 1: down to label6 +# BB#4: # %if.else + # in Loop: Header=BB0_3 Depth=2 + i32.const $push80=, 0 + i32.store xx($pop80), $2 + block + block + block + i32.eqz $push124=, $4 + br_if 0, $pop124 # 0: down to label10 +# BB#5: # %while.body.i.preheader + # in Loop: Header=BB0_3 Depth=2 + i32.const $push60=, 112 + i32.add $push61=, $1, $pop60 + copy_local $8=, $pop61 +.LBB0_6: # %while.body.i + # Parent Loop BB0_2 Depth=1 + # Parent Loop BB0_3 Depth=2 + # => This Inner Loop Header: Depth=3 + loop # label11: + block + block + i32.load $push3=, 4($9) + i32.load $push2=, 4($4) + i32.ge_u $push4=, $pop3, $pop2 + br_if 0, $pop4 # 0: down to label13 +# BB#7: # %if.then.i + # in Loop: Header=BB0_6 Depth=3 + i32.const $push82=, 32 + i32.add $push7=, $8, $pop82 + i32.store 0($pop7), $9 + i32.const $push81=, 32 + i32.add $push8=, $9, $pop81 + i32.load $10=, 0($pop8) + copy_local $11=, $4 + copy_local $8=, $9 + br 1 # 1: down to label12 +.LBB0_8: # %if.else.i + # in Loop: Header=BB0_6 Depth=3 + end_block # label13: + i32.const $push84=, 32 + i32.add $push5=, $8, $pop84 + i32.store 0($pop5), $4 + i32.const $push83=, 32 + i32.add $push6=, $4, $pop83 + i32.load $11=, 0($pop6) + copy_local $10=, $9 + copy_local $8=, $4 +.LBB0_9: # %if.end.i + # in Loop: Header=BB0_6 Depth=3 + end_block # label12: + block + i32.const $push86=, 0 + i32.const $push62=, 112 + i32.add $push63=, $1, $pop62 + i32.const $push85=, 32 + i32.add $push9=, $pop63, $pop85 + i32.load $push10=, 0($pop9) + i32.load $push11=, 0($pop10) + i32.store vx($pop86), $pop11 + i32.eqz $push125=, $10 + br_if 0, $pop125 # 0: down to label14 +# BB#10: # %if.end.i + # in Loop: Header=BB0_6 Depth=3 + copy_local $4=, $11 + copy_local $9=, $10 + br_if 1, $11 # 1: up to label11 +.LBB0_11: # %merge_pagelist.exit + # in Loop: Header=BB0_3 Depth=2 + end_block # label14: + end_loop + i32.const $push87=, 32 + i32.add $4=, $8, $pop87 + br_if 1, $10 # 1: down to label9 + br 2 # 2: down to label8 +.LBB0_12: # in Loop: Header=BB0_3 Depth=2 + end_block # label10: + copy_local $10=, $9 + copy_local $4=, $2 +.LBB0_13: # %merge_pagelist.exit.thread + # in Loop: Header=BB0_3 Depth=2 + end_block # label9: + copy_local $11=, $10 +.LBB0_14: # %for.cond + # in Loop: Header=BB0_3 Depth=2 + end_block # label8: + i32.store 0($4), $11 + i32.const $push56=, 112 + i32.add $push57=, $1, $pop56 + i32.const $push95=, 32 + i32.add $push94=, $pop57, $pop95 + tee_local $push93=, $10=, $pop94 + i32.load $4=, 0($pop93) + i32.const $push92=, 0 + i32.store 0($5), $pop92 + i32.const $push91=, 23 + i32.lt_u $9=, $7, $pop91 + i32.const $push90=, 1 + i32.add $push89=, $7, $pop90 + tee_local $push88=, $11=, $pop89 + copy_local $7=, $pop88 + br_if 0, $9 # 0: up to label7 +# BB#15: # %for.end + # in Loop: Header=BB0_2 Depth=1 + end_loop + i32.const $push96=, 24 + i32.ne $push12=, $11, $pop96 + br_if 1, $pop12 # 1: down to label5 +# BB#16: # %if.then9 + # in Loop: Header=BB0_2 Depth=1 + i32.load $9=, 0($6) + i32.const $push98=, 0 + i32.store xx($pop98), $3 + i32.const $push97=, 0 + i32.ne $5=, $9, $pop97 + i32.eqz $push126=, $4 + br_if 2, $pop126 # 2: down to label4 +# BB#17: # %if.then9 + # in Loop: Header=BB0_2 Depth=1 + i32.eqz $push127=, $9 + br_if 2, $pop127 # 2: down to label4 +# BB#18: # %while.body.i87.preheader + # in Loop: Header=BB0_2 Depth=1 + i32.const $push58=, 112 + i32.add $push59=, $1, $pop58 + copy_local $7=, $pop59 +.LBB0_19: # %while.body.i87 + # Parent Loop BB0_2 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label15: + block + block + i32.load $push15=, 4($9) + i32.load $push14=, 4($4) + i32.ge_u $push16=, $pop15, $pop14 + br_if 0, $pop16 # 0: down to label17 +# BB#20: # %if.then.i89 + # in Loop: Header=BB0_19 Depth=2 + i32.const $push100=, 32 + i32.add $push19=, $7, $pop100 + i32.store 0($pop19), $9 + i32.const $push99=, 32 + i32.add $push20=, $9, $pop99 + i32.load $11=, 0($pop20) + copy_local $8=, $4 + copy_local $7=, $9 + br 1 # 1: down to label16 +.LBB0_21: # %if.else.i91 + # in Loop: Header=BB0_19 Depth=2 + end_block # label17: + i32.const $push102=, 32 + i32.add $push17=, $7, $pop102 + i32.store 0($pop17), $4 + i32.const $push101=, 32 + i32.add $push18=, $4, $pop101 + i32.load $8=, 0($pop18) + copy_local $11=, $9 + copy_local $7=, $4 +.LBB0_22: # %if.end.i98 + # in Loop: Header=BB0_19 Depth=2 + end_block # label16: + block + i32.const $push103=, 0 + i32.load $push21=, 0($10) + i32.load $push22=, 0($pop21) + i32.store vx($pop103), $pop22 + i32.eqz $push128=, $11 + br_if 0, $pop128 # 0: down to label18 +# BB#23: # %if.end.i98 + # in Loop: Header=BB0_19 Depth=2 + copy_local $4=, $8 + copy_local $9=, $11 + br_if 1, $8 # 1: up to label15 +.LBB0_24: # %while.end.loopexit.i100 + # in Loop: Header=BB0_2 Depth=1 + end_block # label18: + end_loop + i32.const $push105=, 0 + i32.ne $5=, $11, $pop105 + i32.const $push104=, 32 + i32.add $7=, $7, $pop104 + br 3 # 3: down to label3 +.LBB0_25: # %for.end.thread + # in Loop: Header=BB0_2 Depth=1 + end_block # label6: + i32.store 0($5), $4 +.LBB0_26: # %if.end13 + # in Loop: Header=BB0_2 Depth=1 + end_block # label5: + br_if 3, $0 # 3: up to label1 + br 2 # 2: down to label2 +.LBB0_27: # in Loop: Header=BB0_2 Depth=1 + end_block # label4: + copy_local $7=, $3 + copy_local $11=, $9 + copy_local $8=, $4 +.LBB0_28: # %merge_pagelist.exit106 + # in Loop: Header=BB0_2 Depth=1 + end_block # label3: + i32.select $push23=, $11, $8, $5 + i32.store 0($7), $pop23 + i32.load $push24=, 0($10) + i32.store 0($6), $pop24 + br_if 1, $0 # 1: up to label1 +.LBB0_29: # %while.end.loopexit + end_block # label2: + end_loop + i32.load $4=, 0($1) +.LBB0_30: # %while.end + end_block # label0: + i32.const $push46=, 112 + i32.add $push47=, $1, $pop46 + i32.const $push106=, 32 + i32.add $5=, $pop47, $pop106 + i32.const $7=, 1 +.LBB0_31: # %for.body17 + # =>This Loop Header: Depth=1 + # Child Loop BB0_34 Depth 2 + loop # label19: + i32.const $push109=, 2 + i32.shl $push25=, $7, $pop109 + i32.add $push26=, $1, $pop25 + i32.load $9=, 0($pop26) + i32.const $push108=, 0 + i32.store xx($pop108), $5 + i32.const $push107=, 0 + i32.ne $2=, $4, $pop107 + block + block + i32.eqz $push129=, $4 + br_if 0, $pop129 # 0: down to label21 +# BB#32: # %for.body17 + # in Loop: Header=BB0_31 Depth=1 + i32.eqz $push130=, $9 + br_if 0, $pop130 # 0: down to label21 +# BB#33: # %while.body.i55.preheader + # in Loop: Header=BB0_31 Depth=1 + i32.const $push48=, 112 + i32.add $push49=, $1, $pop48 + copy_local $8=, $pop49 +.LBB0_34: # %while.body.i55 + # Parent Loop BB0_31 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label22: + block + block + i32.load $push28=, 4($4) + i32.load $push27=, 4($9) + i32.ge_u $push29=, $pop28, $pop27 + br_if 0, $pop29 # 0: down to label24 +# BB#35: # %if.then.i57 + # in Loop: Header=BB0_34 Depth=2 + i32.const $push111=, 32 + i32.add $push32=, $8, $pop111 + i32.store 0($pop32), $4 + i32.const $push110=, 32 + i32.add $push33=, $4, $pop110 + i32.load $10=, 0($pop33) + copy_local $11=, $9 + copy_local $8=, $4 + br 1 # 1: down to label23 +.LBB0_36: # %if.else.i59 + # in Loop: Header=BB0_34 Depth=2 + end_block # label24: + i32.const $push113=, 32 + i32.add $push30=, $8, $pop113 + i32.store 0($pop30), $9 + i32.const $push112=, 32 + i32.add $push31=, $9, $pop112 + i32.load $11=, 0($pop31) + copy_local $10=, $4 + copy_local $8=, $9 +.LBB0_37: # %if.end.i66 + # in Loop: Header=BB0_34 Depth=2 + end_block # label23: + block + i32.const $push115=, 0 + i32.const $push50=, 112 + i32.add $push51=, $1, $pop50 + i32.const $push114=, 32 + i32.add $push34=, $pop51, $pop114 + i32.load $push35=, 0($pop34) + i32.load $push36=, 0($pop35) + i32.store vx($pop115), $pop36 + i32.eqz $push131=, $10 + br_if 0, $pop131 # 0: down to label25 +# BB#38: # %if.end.i66 + # in Loop: Header=BB0_34 Depth=2 + copy_local $9=, $11 + copy_local $4=, $10 + br_if 1, $11 # 1: up to label22 +.LBB0_39: # %while.end.loopexit.i68 + # in Loop: Header=BB0_31 Depth=1 + end_block # label25: + end_loop + i32.const $push117=, 0 + i32.ne $2=, $10, $pop117 + i32.const $push116=, 32 + i32.add $8=, $8, $pop116 + br 1 # 1: down to label20 +.LBB0_40: # in Loop: Header=BB0_31 Depth=1 + end_block # label21: + copy_local $8=, $5 + copy_local $10=, $4 + copy_local $11=, $9 +.LBB0_41: # %merge_pagelist.exit74 + # in Loop: Header=BB0_31 Depth=1 + end_block # label20: + i32.select $push37=, $10, $11, $2 + i32.store 0($8), $pop37 + i32.load $4=, 0($5) + i32.const $push121=, 1 + i32.add $push120=, $7, $pop121 + tee_local $push119=, $7=, $pop120 + i32.const $push118=, 25 + i32.ne $push38=, $pop119, $pop118 + br_if 0, $pop38 # 0: up to label19 +# BB#42: # %for.end22 + end_loop + i32.const $push45=, 0 + i32.const $push43=, 160 + i32.add $push44=, $1, $pop43 + i32.store __stack_pointer($pop45), $pop44 + copy_local $push132=, $4 + # fallthrough-return: $pop132 + .endfunc +.Lfunc_end0: + .size sort_pagelist, .Lfunc_end0-sort_pagelist + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push30=, 0 + i32.const $push28=, 0 + i32.load $push27=, __stack_pointer($pop28) + i32.const $push29=, 224 + i32.sub $push39=, $pop27, $pop29 + tee_local $push38=, $1=, $pop39 + i32.store __stack_pointer($pop30), $pop38 + i32.const $push2=, 32 + i32.add $push3=, $1, $pop2 + i32.const $push0=, 44 + i32.add $push1=, $1, $pop0 + i32.store 0($pop3), $pop1 + i32.const $push4=, 48 + i32.add $push5=, $1, $pop4 + i32.const $push6=, 4 + i32.store 0($pop5), $pop6 + i32.const $push9=, 76 + i32.add $push10=, $1, $pop9 + i32.const $push7=, 88 + i32.add $push8=, $1, $pop7 + i32.store 0($pop10), $pop8 + i32.const $push11=, 92 + i32.add $push12=, $1, $pop11 + i32.const $push13=, 1 + i32.store 0($pop12), $pop13 + i32.const $push16=, 120 + i32.add $push17=, $1, $pop16 + i32.const $push14=, 132 + i32.add $push15=, $1, $pop14 + i32.store 0($pop17), $pop15 + i32.const $push18=, 136 + i32.add $push19=, $1, $pop18 + i32.const $push20=, 3 + i32.store 0($pop19), $pop20 + i32.const $push21=, 164 + i32.add $push22=, $1, $pop21 + i32.const $push37=, 0 + i32.store 0($pop22), $pop37 + i32.const $push23=, 5 + i32.store 4($1), $pop23 + block + i32.call $push36=, sort_pagelist@FUNCTION, $1 + tee_local $push35=, $0=, $pop36 + i32.const $push34=, 32 + i32.add $push24=, $0, $pop34 + i32.load $push25=, 0($pop24) + i32.eq $push26=, $pop35, $pop25 + br_if 0, $pop26 # 0: down to label26 +# BB#1: # %if.end + i32.const $push33=, 0 + i32.const $push31=, 224 + i32.add $push32=, $1, $pop31 + i32.store __stack_pointer($pop33), $pop32 + i32.const $push40=, 0 + return $pop40 +.LBB1_2: # %if.then + end_block # label26: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden xx # @xx + .type xx,@object + .section .bss.xx,"aw",@nobits + .globl xx + .p2align 2 +xx: + .int32 0 + .size xx, 4 + + .hidden vx # @vx + .type vx,@object + .section .bss.vx,"aw",@nobits + .globl vx + .p2align 2 +vx: + .int32 0 # 0x0 + .size vx, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr33870.c.s b/src/binaryen/test/torture-s/pr33870.c.s new file mode 100644 index 0000000000..bad2b18a08 --- /dev/null +++ b/src/binaryen/test/torture-s/pr33870.c.s @@ -0,0 +1,420 @@ + .text + .file "pr33870.c" + .section .text.sort_pagelist,"ax",@progbits + .hidden sort_pagelist # -- Begin function sort_pagelist + .globl sort_pagelist + .type sort_pagelist,@function +sort_pagelist: # @sort_pagelist + .param i32 + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push28=, 0 + i32.const $push26=, 0 + i32.load $push25=, __stack_pointer($pop26) + i32.const $push27=, 144 + i32.sub $push48=, $pop25, $pop27 + tee_local $push47=, $3=, $pop48 + i32.store __stack_pointer($pop28), $pop47 + i32.const $push46=, 0 + i32.const $push0=, 100 + i32.call $1=, memset@FUNCTION, $3, $pop46, $pop0 + i32.const $3=, 0 + block + i32.eqz $push99=, $0 + br_if 0, $pop99 # 0: down to label0 +# BB#1: # %while.body.lr.ph + i32.const $push36=, 104 + i32.add $push37=, $1, $pop36 + i32.const $push49=, 28 + i32.add $2=, $pop37, $pop49 + i32.const $push8=, 96 + i32.add $5=, $1, $pop8 +.LBB0_2: # %while.body + # =>This Loop Header: Depth=1 + # Child Loop BB0_3 Depth 2 + # Child Loop BB0_6 Depth 3 + # Child Loop BB0_18 Depth 2 + loop # label1: + copy_local $push52=, $0 + tee_local $push51=, $3=, $pop52 + i32.load $0=, 28($pop51) + i32.const $push50=, 0 + i32.store 28($3), $pop50 + i32.const $6=, 0 +.LBB0_3: # %for.body + # Parent Loop BB0_2 Depth=1 + # => This Loop Header: Depth=2 + # Child Loop BB0_6 Depth 3 + block + block + block + block + block + loop # label7: + i32.const $push57=, 2 + i32.shl $push1=, $6, $pop57 + i32.add $push56=, $1, $pop1 + tee_local $push55=, $4=, $pop56 + i32.load $push54=, 0($pop55) + tee_local $push53=, $9=, $pop54 + i32.eqz $push100=, $pop53 + br_if 1, $pop100 # 1: down to label6 +# BB#4: # %if.else + # in Loop: Header=BB0_3 Depth=2 + block + block + block + i32.eqz $push101=, $3 + br_if 0, $pop101 # 0: down to label10 +# BB#5: # %while.body.i.preheader + # in Loop: Header=BB0_3 Depth=2 + i32.const $push44=, 104 + i32.add $push45=, $1, $pop44 + copy_local $7=, $pop45 + copy_local $8=, $9 +.LBB0_6: # %while.body.i + # Parent Loop BB0_2 Depth=1 + # Parent Loop BB0_3 Depth=2 + # => This Inner Loop Header: Depth=3 + block + loop # label12: + block + block + i32.load $push3=, 0($8) + i32.load $push2=, 0($3) + i32.ge_u $push4=, $pop3, $pop2 + br_if 0, $pop4 # 0: down to label14 +# BB#7: # %if.then.i + # in Loop: Header=BB0_6 Depth=3 + i32.const $push60=, 28 + i32.add $push6=, $7, $pop60 + i32.store 0($pop6), $8 + copy_local $10=, $3 + copy_local $7=, $8 + i32.load $push59=, 28($8) + tee_local $push58=, $9=, $pop59 + br_if 1, $pop58 # 1: down to label13 + br 3 # 3: down to label11 +.LBB0_8: # %if.else.i + # in Loop: Header=BB0_6 Depth=3 + end_block # label14: + i32.const $push63=, 28 + i32.add $push5=, $7, $pop63 + i32.store 0($pop5), $3 + i32.load $10=, 28($3) + copy_local $7=, $3 + copy_local $push62=, $8 + tee_local $push61=, $9=, $pop62 + i32.eqz $push102=, $pop61 + br_if 2, $pop102 # 2: down to label11 +.LBB0_9: # %if.end.i + # in Loop: Header=BB0_6 Depth=3 + end_block # label13: + copy_local $3=, $10 + copy_local $8=, $9 + br_if 0, $10 # 0: up to label12 +.LBB0_10: # %merge_pagelist.exit + # in Loop: Header=BB0_3 Depth=2 + end_loop + end_block # label11: + br_if 1, $9 # 1: down to label9 + br 2 # 2: down to label8 +.LBB0_11: # in Loop: Header=BB0_3 Depth=2 + end_block # label10: + i32.const $push38=, 104 + i32.add $push39=, $1, $pop38 + copy_local $7=, $pop39 +.LBB0_12: # %merge_pagelist.exit.thread + # in Loop: Header=BB0_3 Depth=2 + end_block # label9: + copy_local $10=, $9 +.LBB0_13: # %for.cond + # in Loop: Header=BB0_3 Depth=2 + end_block # label8: + i32.store 28($7), $10 + i32.const $push40=, 104 + i32.add $push41=, $1, $pop40 + i32.const $push71=, 28 + i32.add $push70=, $pop41, $pop71 + tee_local $push69=, $9=, $pop70 + i32.load $3=, 0($pop69) + i32.const $push68=, 0 + i32.store 0($4), $pop68 + i32.const $push67=, 23 + i32.lt_u $8=, $6, $pop67 + i32.const $push66=, 1 + i32.add $push65=, $6, $pop66 + tee_local $push64=, $10=, $pop65 + copy_local $6=, $pop64 + br_if 0, $8 # 0: up to label7 +# BB#14: # %for.end + # in Loop: Header=BB0_2 Depth=1 + end_loop + i32.const $push72=, 24 + i32.ne $push7=, $10, $pop72 + br_if 1, $pop7 # 1: down to label5 +# BB#15: # %if.then7 + # in Loop: Header=BB0_2 Depth=1 + i32.load $push75=, 0($5) + tee_local $push74=, $8=, $pop75 + i32.const $push73=, 0 + i32.ne $4=, $pop74, $pop73 + i32.eqz $push103=, $3 + br_if 2, $pop103 # 2: down to label4 +# BB#16: # %if.then7 + # in Loop: Header=BB0_2 Depth=1 + i32.eqz $push104=, $8 + br_if 2, $pop104 # 2: down to label4 +# BB#17: # %while.body.i81.preheader + # in Loop: Header=BB0_2 Depth=1 + i32.const $push42=, 104 + i32.add $push43=, $1, $pop42 + copy_local $6=, $pop43 +.LBB0_18: # %while.body.i81 + # Parent Loop BB0_2 Depth=1 + # => This Inner Loop Header: Depth=2 + block + loop # label16: + block + block + i32.load $push10=, 0($8) + i32.load $push9=, 0($3) + i32.ge_u $push11=, $pop10, $pop9 + br_if 0, $pop11 # 0: down to label18 +# BB#19: # %if.then.i83 + # in Loop: Header=BB0_18 Depth=2 + i32.const $push78=, 28 + i32.add $push13=, $6, $pop78 + i32.store 0($pop13), $8 + copy_local $10=, $3 + copy_local $6=, $8 + i32.load $push77=, 28($8) + tee_local $push76=, $7=, $pop77 + br_if 1, $pop76 # 1: down to label17 + br 3 # 3: down to label15 +.LBB0_20: # %if.else.i85 + # in Loop: Header=BB0_18 Depth=2 + end_block # label18: + i32.const $push81=, 28 + i32.add $push12=, $6, $pop81 + i32.store 0($pop12), $3 + i32.load $10=, 28($3) + copy_local $6=, $3 + copy_local $push80=, $8 + tee_local $push79=, $7=, $pop80 + i32.eqz $push105=, $pop79 + br_if 2, $pop105 # 2: down to label15 +.LBB0_21: # %if.end.i91 + # in Loop: Header=BB0_18 Depth=2 + end_block # label17: + copy_local $3=, $10 + copy_local $8=, $7 + br_if 0, $10 # 0: up to label16 +.LBB0_22: # %merge_pagelist.exit99.loopexit + # in Loop: Header=BB0_2 Depth=1 + end_loop + end_block # label15: + i32.const $push83=, 0 + i32.ne $4=, $7, $pop83 + i32.const $push82=, 28 + i32.add $6=, $6, $pop82 + br 3 # 3: down to label3 +.LBB0_23: # %for.end.thread + # in Loop: Header=BB0_2 Depth=1 + end_block # label6: + i32.store 0($4), $3 +.LBB0_24: # %if.end11 + # in Loop: Header=BB0_2 Depth=1 + end_block # label5: + br_if 3, $0 # 3: up to label1 + br 2 # 2: down to label2 +.LBB0_25: # in Loop: Header=BB0_2 Depth=1 + end_block # label4: + copy_local $6=, $2 + copy_local $7=, $8 + copy_local $10=, $3 +.LBB0_26: # %merge_pagelist.exit99 + # in Loop: Header=BB0_2 Depth=1 + end_block # label3: + i32.select $push14=, $7, $10, $4 + i32.store 0($6), $pop14 + i32.load $push15=, 0($9) + i32.store 0($5), $pop15 + br_if 1, $0 # 1: up to label1 +.LBB0_27: # %while.end.loopexit + end_block # label2: + end_loop + i32.load $3=, 0($1) +.LBB0_28: # %while.end + end_block # label0: + i32.const $push32=, 104 + i32.add $push33=, $1, $pop32 + i32.const $push84=, 28 + i32.add $0=, $pop33, $pop84 + i32.const $6=, 1 +.LBB0_29: # %for.body15 + # =>This Loop Header: Depth=1 + # Child Loop BB0_32 Depth 2 + loop # label19: + i32.const $push86=, 0 + i32.ne $4=, $3, $pop86 + i32.const $push85=, 2 + i32.shl $push16=, $6, $pop85 + i32.add $push17=, $1, $pop16 + i32.load $8=, 0($pop17) + block + block + i32.eqz $push106=, $3 + br_if 0, $pop106 # 0: down to label21 +# BB#30: # %for.body15 + # in Loop: Header=BB0_29 Depth=1 + i32.eqz $push107=, $8 + br_if 0, $pop107 # 0: down to label21 +# BB#31: # %while.body.i51.preheader + # in Loop: Header=BB0_29 Depth=1 + i32.const $push34=, 104 + i32.add $push35=, $1, $pop34 + copy_local $7=, $pop35 +.LBB0_32: # %while.body.i51 + # Parent Loop BB0_29 Depth=1 + # => This Inner Loop Header: Depth=2 + block + loop # label23: + block + block + i32.load $push19=, 0($3) + i32.load $push18=, 0($8) + i32.ge_u $push20=, $pop19, $pop18 + br_if 0, $pop20 # 0: down to label25 +# BB#33: # %if.then.i53 + # in Loop: Header=BB0_32 Depth=2 + i32.const $push89=, 28 + i32.add $push22=, $7, $pop89 + i32.store 0($pop22), $3 + copy_local $10=, $8 + copy_local $7=, $3 + i32.load $push88=, 28($3) + tee_local $push87=, $9=, $pop88 + br_if 1, $pop87 # 1: down to label24 + br 3 # 3: down to label22 +.LBB0_34: # %if.else.i55 + # in Loop: Header=BB0_32 Depth=2 + end_block # label25: + i32.const $push92=, 28 + i32.add $push21=, $7, $pop92 + i32.store 0($pop21), $8 + i32.load $10=, 28($8) + copy_local $7=, $8 + copy_local $push91=, $3 + tee_local $push90=, $9=, $pop91 + i32.eqz $push108=, $pop90 + br_if 2, $pop108 # 2: down to label22 +.LBB0_35: # %if.end.i61 + # in Loop: Header=BB0_32 Depth=2 + end_block # label24: + copy_local $8=, $10 + copy_local $3=, $9 + br_if 0, $10 # 0: up to label23 +.LBB0_36: # %merge_pagelist.exit69.loopexit + # in Loop: Header=BB0_29 Depth=1 + end_loop + end_block # label22: + i32.const $push94=, 0 + i32.ne $4=, $9, $pop94 + i32.const $push93=, 28 + i32.add $7=, $7, $pop93 + br 1 # 1: down to label20 +.LBB0_37: # in Loop: Header=BB0_29 Depth=1 + end_block # label21: + copy_local $7=, $0 + copy_local $9=, $3 + copy_local $10=, $8 +.LBB0_38: # %merge_pagelist.exit69 + # in Loop: Header=BB0_29 Depth=1 + end_block # label20: + i32.select $push23=, $9, $10, $4 + i32.store 0($7), $pop23 + i32.load $3=, 0($0) + i32.const $push98=, 1 + i32.add $push97=, $6, $pop98 + tee_local $push96=, $6=, $pop97 + i32.const $push95=, 25 + i32.ne $push24=, $pop96, $pop95 + br_if 0, $pop24 # 0: up to label19 +# BB#39: # %for.end20 + end_loop + i32.const $push31=, 0 + i32.const $push29=, 144 + i32.add $push30=, $1, $pop29 + i32.store __stack_pointer($pop31), $pop30 + copy_local $push109=, $3 + # fallthrough-return: $pop109 + .endfunc +.Lfunc_end0: + .size sort_pagelist, .Lfunc_end0-sort_pagelist + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push21=, 0 + i32.const $push19=, 0 + i32.load $push18=, __stack_pointer($pop19) + i32.const $push20=, 208 + i32.sub $push29=, $pop18, $pop20 + tee_local $push28=, $1=, $pop29 + i32.store __stack_pointer($pop21), $pop28 + i32.const $push2=, 68 + i32.add $push3=, $1, $pop2 + i32.const $push0=, 80 + i32.add $push1=, $1, $pop0 + i32.store 0($pop3), $pop1 + i32.const $push6=, 108 + i32.add $push7=, $1, $pop6 + i32.const $push4=, 120 + i32.add $push5=, $1, $pop4 + i32.store 0($pop7), $pop5 + i32.const $push8=, 148 + i32.add $push9=, $1, $pop8 + i32.const $push27=, 0 + i32.store 0($pop9), $pop27 + i32.const $push10=, 5 + i32.store 0($1), $pop10 + i32.const $push11=, 4 + i32.store 40($1), $pop11 + i32.const $push12=, 1 + i32.store 80($1), $pop12 + i32.const $push13=, 3 + i32.store 120($1), $pop13 + i32.const $push14=, 40 + i32.add $push15=, $1, $pop14 + i32.store 28($1), $pop15 + block + i32.call $push26=, sort_pagelist@FUNCTION, $1 + tee_local $push25=, $0=, $pop26 + i32.load $push16=, 28($0) + i32.eq $push17=, $pop25, $pop16 + br_if 0, $pop17 # 0: down to label26 +# BB#1: # %if.end + i32.const $push24=, 0 + i32.const $push22=, 208 + i32.add $push23=, $1, $pop22 + i32.store __stack_pointer($pop24), $pop23 + i32.const $push30=, 0 + return $pop30 +.LBB1_2: # %if.then + end_block # label26: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr33992.c.s b/src/binaryen/test/torture-s/pr33992.c.s new file mode 100644 index 0000000000..41eb0e0776 --- /dev/null +++ b/src/binaryen/test/torture-s/pr33992.c.s @@ -0,0 +1,115 @@ + .text + .file "pr33992.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i64 +# BB#0: # %entry + block + i64.eqz $push0=, $0 + i32.eqz $push1=, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.do_test,"ax",@progbits + .hidden do_test # -- Begin function do_test + .globl do_test + .type do_test,@function +do_test: # @do_test + .param i32 + .local i64, i64, i64, i64 +# BB#0: # %entry + i64.load $1=, 0($0) + i64.const $4=, -4294967296 + i64.const $3=, 63 +.LBB1_1: # %for.cond.i + # =>This Inner Loop Header: Depth=1 + loop # label1: + i64.const $push15=, 4294967296 + i64.add $4=, $4, $pop15 + i64.const $push14=, 4294967295 + i64.and $2=, $3, $pop14 + i64.const $push13=, -1 + i64.add $push0=, $3, $pop13 + copy_local $3=, $pop0 + i64.const $push12=, 1 + i64.shl $push2=, $pop12, $2 + i64.and $push3=, $pop2, $1 + i64.eqz $push4=, $pop3 + br_if 0, $pop4 # 0: up to label1 +# BB#2: # %foo.exit + end_loop + i64.const $push5=, 32 + i64.shr_s $push6=, $4, $pop5 + call bar@FUNCTION, $pop6 + i64.load $1=, 0($0) + i64.const $4=, -4294967296 + i64.const $3=, 63 +.LBB1_3: # %for.cond.i.1 + # =>This Inner Loop Header: Depth=1 + loop # label2: + i64.const $push19=, 4294967296 + i64.add $4=, $4, $pop19 + i64.const $push18=, 4294967295 + i64.and $2=, $3, $pop18 + i64.const $push17=, -1 + i64.add $push1=, $3, $pop17 + copy_local $3=, $pop1 + i64.const $push16=, 1 + i64.shl $push7=, $pop16, $2 + i64.and $push8=, $pop7, $1 + i64.eqz $push9=, $pop8 + br_if 0, $pop9 # 0: up to label2 +# BB#4: # %foo.exit.1 + end_loop + i64.const $push10=, 32 + i64.shr_s $push11=, $4, $pop10 + call bar@FUNCTION, $pop11 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size do_test, .Lfunc_end1-do_test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push12=, $pop2, $pop4 + tee_local $push11=, $0=, $pop12 + i32.store __stack_pointer($pop5), $pop11 + i64.const $push0=, -9223372036854775807 + i64.store 8($0), $pop0 + i32.const $push9=, 8 + i32.add $push10=, $0, $pop9 + call do_test@FUNCTION, $pop10 + i32.const $push8=, 0 + i32.const $push6=, 16 + i32.add $push7=, $0, $pop6 + i32.store __stack_pointer($pop8), $pop7 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr34070-1.c.s b/src/binaryen/test/torture-s/pr34070-1.c.s new file mode 100644 index 0000000000..a30e6feffd --- /dev/null +++ b/src/binaryen/test/torture-s/pr34070-1.c.s @@ -0,0 +1,32 @@ + .text + .file "pr34070-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.rem_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr34070-2.c.s b/src/binaryen/test/torture-s/pr34070-2.c.s new file mode 100644 index 0000000000..35a52b1be3 --- /dev/null +++ b/src/binaryen/test/torture-s/pr34070-2.c.s @@ -0,0 +1,33 @@ + .text + .file "pr34070-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.shl $push1=, $pop0, $1 + i32.div_s $push2=, $0, $pop1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr34099-2.c.s b/src/binaryen/test/torture-s/pr34099-2.c.s new file mode 100644 index 0000000000..e67c3cdebd --- /dev/null +++ b/src/binaryen/test/torture-s/pr34099-2.c.s @@ -0,0 +1,75 @@ + .text + .file "pr34099-2.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.eqz $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.eqz $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size test2, .Lfunc_end1-test2 + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.eqz $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size test3, .Lfunc_end2-test3 + # -- End function + .section .text.test4,"ax",@progbits + .hidden test4 # -- Begin function test4 + .globl test4 + .type test4,@function +test4: # @test4 + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.eqz $push1=, $0 + i32.eqz $push0=, $1 + i32.or $push2=, $pop1, $pop0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end3: + .size test4, .Lfunc_end3-test4 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end12 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr34099.c.s b/src/binaryen/test/torture-s/pr34099.c.s new file mode 100644 index 0000000000..574610183f --- /dev/null +++ b/src/binaryen/test/torture-s/pr34099.c.s @@ -0,0 +1,31 @@ + .text + .file "pr34099.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.eqz $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr34130.c.s b/src/binaryen/test/torture-s/pr34130.c.s new file mode 100644 index 0000000000..27777c6783 --- /dev/null +++ b/src/binaryen/test/torture-s/pr34130.c.s @@ -0,0 +1,41 @@ + .text + .file "pr34130.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push4=, -2 + i32.add $push5=, $0, $pop4 + i32.const $push2=, 2 + i32.sub $push3=, $pop2, $0 + i32.const $push0=, 1 + i32.gt_s $push1=, $0, $pop0 + i32.select $push6=, $pop5, $pop3, $pop1 + i32.const $push10=, 1 + i32.shl $push7=, $pop6, $pop10 + i32.sub $push9=, $pop8, $pop7 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr34154.c.s b/src/binaryen/test/torture-s/pr34154.c.s new file mode 100644 index 0000000000..7cb4903c57 --- /dev/null +++ b/src/binaryen/test/torture-s/pr34154.c.s @@ -0,0 +1,37 @@ + .text + .file "pr34154.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i64 + .result i32 +# BB#0: # %entry + i32.const $push5=, 19 + i32.const $push4=, 20 + i64.const $push0=, -1000000000000000000 + i64.add $push1=, $0, $pop0 + i64.const $push2=, 9000000000000000000 + i64.lt_u $push3=, $pop1, $pop2 + i32.select $push6=, $pop5, $pop4, $pop3 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr34176.c.s b/src/binaryen/test/torture-s/pr34176.c.s new file mode 100644 index 0000000000..300c177e44 --- /dev/null +++ b/src/binaryen/test/torture-s/pr34176.c.s @@ -0,0 +1,118 @@ + .text + .file "pr34176.c" + .section .text.hash_find_entry,"ax",@progbits + .hidden hash_find_entry # -- Begin function hash_find_entry + .globl hash_find_entry + .type hash_find_entry,@function +hash_find_entry: # @hash_find_entry + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.store 0($0), $pop0 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size hash_find_entry, .Lfunc_end0-hash_find_entry + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push6=, 0 + i32.load $push5=, foo.count($pop6) + tee_local $push4=, $1=, $pop5 + i32.const $push0=, 1 + i32.add $push1=, $pop4, $pop0 + i32.store foo.count($pop7), $pop1 + block + i32.const $push3=, 1 + i32.ge_s $push2=, $1, $pop3 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push8=, 0 + return $pop8 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push13=, $pop1, $pop3 + tee_local $push12=, $2=, $pop13 + i32.store __stack_pointer($pop4), $pop12 + i32.const $push8=, 12 + i32.add $push9=, $2, $pop8 + i32.call $drop=, hash_find_entry@FUNCTION, $pop9 +.LBB2_1: # %if.end + # =>This Loop Header: Depth=1 + # Child Loop BB2_2 Depth 2 + loop # label1: + i32.load $0=, 12($2) + i32.call $drop=, foo@FUNCTION, $0 + i32.const $1=, 0 + block + i32.eqz $push18=, $0 + br_if 0, $pop18 # 0: down to label2 +.LBB2_2: # %while.body + # Parent Loop BB2_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label3: + i32.const $push17=, 8 + i32.add $1=, $1, $pop17 + i32.const $push16=, -1 + i32.add $push15=, $0, $pop16 + tee_local $push14=, $0=, $pop15 + br_if 0, $pop14 # 0: up to label3 +.LBB2_3: # %cleanup.cont7 + # in Loop: Header=BB2_1 Depth=1 + end_loop + end_block # label2: + i32.const $push10=, 12 + i32.add $push11=, $2, $pop10 + i32.call $drop=, hash_find_entry@FUNCTION, $pop11 + i32.eqz $push19=, $1 + br_if 0, $pop19 # 0: up to label1 +# BB#4: # %for.end + end_loop + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $2, $pop5 + i32.store __stack_pointer($pop7), $pop6 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type foo.count,@object # @foo.count + .section .bss.foo.count,"aw",@nobits + .p2align 2 +foo.count: + .int32 0 # 0x0 + .size foo.count, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr34415.c.s b/src/binaryen/test/torture-s/pr34415.c.s new file mode 100644 index 0000000000..89718ed5d8 --- /dev/null +++ b/src/binaryen/test/torture-s/pr34415.c.s @@ -0,0 +1,112 @@ + .text + .file "pr34415.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + # implicit-def: %vreg64 + i32.const $4=, 1 +.LBB0_1: # %for.cond + # =>This Loop Header: Depth=1 + # Child Loop BB0_4 Depth 2 + loop i32 # label0: + copy_local $push24=, $0 + tee_local $push23=, $1=, $pop24 + copy_local $5=, $pop23 + block + i32.load8_s $push22=, 0($1) + tee_local $push21=, $0=, $pop22 + i32.const $push20=, -32 + i32.add $push0=, $pop21, $pop20 + i32.const $push19=, -97 + i32.add $push1=, $0, $pop19 + i32.const $push18=, 255 + i32.and $push2=, $pop1, $pop18 + i32.const $push17=, 26 + i32.lt_u $push3=, $pop2, $pop17 + i32.select $push16=, $pop0, $0, $pop3 + tee_local $push15=, $2=, $pop16 + i32.const $push14=, 66 + i32.eq $push4=, $pop15, $pop14 + br_if 0, $pop4 # 0: down to label1 +# BB#2: # %for.cond + # in Loop: Header=BB0_1 Depth=1 + block + i32.const $push25=, 65 + i32.ne $push5=, $2, $pop25 + br_if 0, $pop5 # 0: down to label2 +# BB#3: # %do.body.preheader + # in Loop: Header=BB0_1 Depth=1 + copy_local $0=, $1 +.LBB0_4: # %do.body + # Parent Loop BB0_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label3: + i32.load8_u $2=, 1($0) + i32.const $push29=, 1 + i32.add $push28=, $0, $pop29 + tee_local $push27=, $5=, $pop28 + copy_local $0=, $pop27 + i32.const $push26=, 43 + i32.eq $push6=, $2, $pop26 + br_if 0, $pop6 # 0: up to label3 + br 2 # 2: down to label1 +.LBB0_5: # %for.end + end_loop + end_block # label2: + block + i32.const $push7=, 3 + i32.lt_s $push8=, $4, $pop7 + br_if 0, $pop8 # 0: down to label4 +# BB#6: # %land.lhs.true17 + i32.const $push9=, 58 + i32.eq $push10=, $0, $pop9 + i32.select $push11=, $3, $1, $pop10 + return $pop11 +.LBB0_7: # %if.end22 + end_block # label4: + return $1 +.LBB0_8: # %cleanup.cont + # in Loop: Header=BB0_1 Depth=1 + end_block # label1: + i32.const $push13=, 1 + i32.add $4=, $4, $pop13 + i32.const $push12=, 1 + i32.add $0=, $5, $pop12 + copy_local $3=, $1 + br 0 # 0: up to label0 +.LBB0_9: + end_loop + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, .L.str + i32.call $push1=, foo@FUNCTION, $pop0 + i32.const $push2=, .L.str+2 + i32.ne $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "Bbb:" + .size .L.str, 5 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr34456.c.s b/src/binaryen/test/torture-s/pr34456.c.s new file mode 100644 index 0000000000..aab58a093e --- /dev/null +++ b/src/binaryen/test/torture-s/pr34456.c.s @@ -0,0 +1,107 @@ + .text + .file "pr34456.c" + .section .text.debug,"ax",@progbits + .hidden debug # -- Begin function debug + .globl debug + .type debug,@function +debug: # @debug + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size debug, .Lfunc_end0-debug + # -- End function + .section .text.bad_compare,"ax",@progbits + .hidden bad_compare # -- Begin function bad_compare + .globl bad_compare + .type bad_compare,@function +bad_compare: # @bad_compare + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.sub $push1=, $pop0, $0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size bad_compare, .Lfunc_end1-bad_compare + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push3=, array + i32.const $push2=, 2 + i32.const $push1=, 8 + i32.const $push0=, compare@FUNCTION + call qsort@FUNCTION, $pop3, $pop2, $pop1, $pop0 + i32.const $push4=, 0 + i32.load $push5=, errors($pop4) + i32.eqz $push6=, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .section .text.compare,"ax",@progbits + .type compare,@function # -- Begin function compare +compare: # @compare + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.load $2=, 4($0) + block + i32.load $push8=, 0($1) + tee_local $push7=, $1=, $pop8 + i32.eqz $push10=, $pop7 + br_if 0, $pop10 # 0: down to label0 +# BB#1: # %land.lhs.true + i32.load $push0=, 0($0) + i32.call_indirect $push1=, $pop0, $2 + i32.eqz $push11=, $pop1 + br_if 0, $pop11 # 0: down to label0 +# BB#2: # %if.then + i32.const $push2=, 0 + i32.const $push9=, 0 + i32.load $push3=, errors($pop9) + i32.const $push4=, 1 + i32.add $push5=, $pop3, $pop4 + i32.store errors($pop2), $pop5 +.LBB3_3: # %if.end + end_block # label0: + i32.call_indirect $push6=, $1, $2 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end3: + .size compare, .Lfunc_end3-compare + # -- End function + .hidden array # @array + .type array,@object + .section .data.array,"aw",@progbits + .globl array + .p2align 4 +array: + .int32 1 # 0x1 + .int32 bad_compare@FUNCTION + .int32 4294967295 # 0xffffffff + .int32 bad_compare@FUNCTION + .size array, 16 + + .hidden errors # @errors + .type errors,@object + .section .bss.errors,"aw",@nobits + .globl errors + .p2align 2 +errors: + .int32 0 # 0x0 + .size errors, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype qsort, void, i32, i32, i32, i32 diff --git a/src/binaryen/test/torture-s/pr34768-1.c.s b/src/binaryen/test/torture-s/pr34768-1.c.s new file mode 100644 index 0000000000..5d5e75fb2d --- /dev/null +++ b/src/binaryen/test/torture-s/pr34768-1.c.s @@ -0,0 +1,90 @@ + .text + .file "pr34768-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.const $push3=, 0 + i32.load $push1=, x($pop3) + i32.sub $push2=, $pop4, $pop1 + i32.store x($pop0), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push3=, 0 + i32.load $1=, x($pop3) + i32.const $push1=, foo@FUNCTION + i32.const $push0=, bar@FUNCTION + i32.select $push2=, $pop1, $pop0, $0 + call_indirect $pop2 + i32.const $push6=, 0 + i32.load $push4=, x($pop6) + i32.add $push5=, $1, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end2: + .size test, .Lfunc_end2-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push3=, 0 + i32.const $push0=, 1 + i32.store x($pop3), $pop0 + block + i32.const $push2=, 1 + i32.call $push1=, test@FUNCTION, $pop2 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB3_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 2 +x: + .int32 0 # 0x0 + .size x, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr34768-2.c.s b/src/binaryen/test/torture-s/pr34768-2.c.s new file mode 100644 index 0000000000..c11c5c5aaf --- /dev/null +++ b/src/binaryen/test/torture-s/pr34768-2.c.s @@ -0,0 +1,94 @@ + .text + .file "pr34768-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.const $push4=, 0 + i32.load $push1=, x($pop4) + i32.sub $push2=, $pop5, $pop1 + i32.store x($pop0), $pop2 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push3=, 0 + i32.load $push4=, x($pop3) + i32.const $push1=, foo@FUNCTION + i32.const $push0=, bar@FUNCTION + i32.select $push2=, $pop1, $pop0, $0 + i32.call_indirect $push5=, $pop2 + i32.add $push6=, $pop4, $pop5 + i32.const $push9=, 0 + i32.load $push7=, x($pop9) + i32.add $push8=, $pop6, $pop7 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end2: + .size test, .Lfunc_end2-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push3=, 0 + i32.const $push0=, 1 + i32.store x($pop3), $pop0 + block + i32.const $push2=, 1 + i32.call $push1=, test@FUNCTION, $pop2 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB3_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 2 +x: + .int32 0 # 0x0 + .size x, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr34971.c.s b/src/binaryen/test/torture-s/pr34971.c.s new file mode 100644 index 0000000000..f5e7b761a1 --- /dev/null +++ b/src/binaryen/test/torture-s/pr34971.c.s @@ -0,0 +1,66 @@ + .text + .file "pr34971.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i64 + .local i64 +# BB#0: # %entry + block + i32.const $push0=, 0 + i64.load $push1=, x($pop0) + i64.const $push2=, 1099511627775 + i64.and $push10=, $pop1, $pop2 + tee_local $push9=, $1=, $pop10 + i64.const $push5=, 8 + i64.shl $push6=, $pop9, $pop5 + i64.const $push3=, 32 + i64.shr_u $push4=, $1, $pop3 + i64.or $push7=, $pop6, $pop4 + i64.ne $push8=, $pop7, $0 + br_if 0, $pop8 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.then.i + i32.const $push0=, 0 + i32.const $push6=, 0 + i64.load $push1=, x($pop6) + i64.const $push2=, -1099511627776 + i64.and $push3=, $pop1, $pop2 + i64.const $push4=, 4294967297 + i64.or $push5=, $pop3, $pop4 + i64.store x($pop0), $pop5 + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 3 +x: + .skip 8 + .size x, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr34982.c.s b/src/binaryen/test/torture-s/pr34982.c.s new file mode 100644 index 0000000000..be92ac5dae --- /dev/null +++ b/src/binaryen/test/torture-s/pr34982.c.s @@ -0,0 +1,17 @@ + .text + .file "pr34982.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr35163.c.s b/src/binaryen/test/torture-s/pr35163.c.s new file mode 100644 index 0000000000..36cc3588ea --- /dev/null +++ b/src/binaryen/test/torture-s/pr35163.c.s @@ -0,0 +1,17 @@ + .text + .file "pr35163.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr35231.c.s b/src/binaryen/test/torture-s/pr35231.c.s new file mode 100644 index 0000000000..b96b7436b5 --- /dev/null +++ b/src/binaryen/test/torture-s/pr35231.c.s @@ -0,0 +1,44 @@ + .text + .file "pr35231.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.or $push0=, $1, $0 + i32.const $push1=, 1 + i32.eq $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + return $0 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 2 + i32.const $push0=, 0 + i32.call $drop=, foo@FUNCTION, $pop1, $pop0 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr35390.c.s b/src/binaryen/test/torture-s/pr35390.c.s new file mode 100644 index 0000000000..63b2ec7ea8 --- /dev/null +++ b/src/binaryen/test/torture-s/pr35390.c.s @@ -0,0 +1,31 @@ + .text + .file "pr35390.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr35456.c.s b/src/binaryen/test/torture-s/pr35456.c.s new file mode 100644 index 0000000000..be477c0f9b --- /dev/null +++ b/src/binaryen/test/torture-s/pr35456.c.s @@ -0,0 +1,47 @@ + .text + .file "pr35456.c" + .section .text.not_fabs,"ax",@progbits + .hidden not_fabs # -- Begin function not_fabs + .globl not_fabs + .type not_fabs,@function +not_fabs: # @not_fabs + .param f64 + .result f64 +# BB#0: # %entry + f64.neg $push2=, $0 + f64.const $push0=, 0x0p0 + f64.ge $push1=, $0, $pop0 + f64.select $push3=, $0, $pop2, $pop1 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size not_fabs, .Lfunc_end0-not_fabs + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + f64.const $push0=, -0x0p0 + f64.call $push1=, not_fabs@FUNCTION, $pop0 + i64.reinterpret/f64 $push2=, $pop1 + i64.const $push3=, 0 + i64.ge_s $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + i32.const $push5=, 0 + return $pop5 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr35472.c.s b/src/binaryen/test/torture-s/pr35472.c.s new file mode 100644 index 0000000000..03ab73a107 --- /dev/null +++ b/src/binaryen/test/torture-s/pr35472.c.s @@ -0,0 +1,392 @@ + .text + .file "pr35472.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store p($pop0), $1 + i32.const $push1=, -1 + i32.store 0($0), $pop1 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push31=, 0 + i32.const $push29=, 0 + i32.load $push28=, __stack_pointer($pop29) + i32.const $push30=, 128 + i32.sub $push125=, $pop28, $pop30 + tee_local $push124=, $16=, $pop125 + i32.store __stack_pointer($pop31), $pop124 + i32.const $push35=, 64 + i32.add $push36=, $16, $pop35 + i32.const $push0=, 56 + i32.add $push123=, $pop36, $pop0 + tee_local $push122=, $0=, $pop123 + i64.const $push1=, 0 + i64.store 0($pop122), $pop1 + i32.const $push37=, 64 + i32.add $push38=, $16, $pop37 + i32.const $push2=, 48 + i32.add $push121=, $pop38, $pop2 + tee_local $push120=, $1=, $pop121 + i64.const $push119=, 0 + i64.store 0($pop120), $pop119 + i32.const $push39=, 64 + i32.add $push40=, $16, $pop39 + i32.const $push3=, 40 + i32.add $push118=, $pop40, $pop3 + tee_local $push117=, $2=, $pop118 + i64.const $push116=, 0 + i64.store 0($pop117), $pop116 + i32.const $push41=, 64 + i32.add $push42=, $16, $pop41 + i32.const $push4=, 32 + i32.add $push115=, $pop42, $pop4 + tee_local $push114=, $3=, $pop115 + i64.const $push113=, 0 + i64.store 0($pop114), $pop113 + i32.const $push43=, 64 + i32.add $push44=, $16, $pop43 + i32.const $push5=, 24 + i32.add $push112=, $pop44, $pop5 + tee_local $push111=, $4=, $pop112 + i64.const $push110=, 0 + i64.store 0($pop111), $pop110 + i32.const $push45=, 64 + i32.add $push46=, $16, $pop45 + i32.const $push6=, 16 + i32.add $push109=, $pop46, $pop6 + tee_local $push108=, $5=, $pop109 + i64.const $push107=, 0 + i64.store 0($pop108), $pop107 + i32.const $push47=, 64 + i32.add $push48=, $16, $pop47 + i32.const $push7=, 8 + i32.add $push106=, $pop48, $pop7 + tee_local $push105=, $6=, $pop106 + i64.const $push104=, 0 + i64.store 0($pop105), $pop104 + i32.const $push103=, 56 + i32.add $push102=, $16, $pop103 + tee_local $push101=, $7=, $pop102 + i64.const $push100=, 0 + i64.store 0($pop101), $pop100 + i32.const $push99=, 48 + i32.add $push98=, $16, $pop99 + tee_local $push97=, $8=, $pop98 + i64.const $push96=, 0 + i64.store 0($pop97), $pop96 + i32.const $push95=, 40 + i32.add $push94=, $16, $pop95 + tee_local $push93=, $9=, $pop94 + i64.const $push92=, 0 + i64.store 0($pop93), $pop92 + i32.const $push91=, 32 + i32.add $push90=, $16, $pop91 + tee_local $push89=, $10=, $pop90 + i64.const $push88=, 0 + i64.store 0($pop89), $pop88 + i32.const $push87=, 24 + i32.add $push86=, $16, $pop87 + tee_local $push85=, $11=, $pop86 + i64.const $push84=, 0 + i64.store 0($pop85), $pop84 + i32.const $push83=, 16 + i32.add $push82=, $16, $pop83 + tee_local $push81=, $12=, $pop82 + i64.const $push80=, 0 + i64.store 0($pop81), $pop80 + i32.const $push79=, 8 + i32.add $push78=, $16, $pop79 + tee_local $push77=, $13=, $pop78 + i64.const $push76=, 0 + i64.store 0($pop77), $pop76 + i64.const $push75=, 0 + i64.store 64($16), $pop75 + i64.const $push74=, 0 + i64.store 0($16), $pop74 + i32.const $push49=, 64 + i32.add $push50=, $16, $pop49 + call foo@FUNCTION, $pop50, $16 + i32.const $push8=, 0 + i32.load $push73=, p($pop8) + tee_local $push72=, $14=, $pop73 + i64.load $push9=, 64($16) + i64.store 0($pop72):p2align=2, $pop9 + i32.const $push71=, 56 + i32.add $push70=, $14, $pop71 + tee_local $push69=, $15=, $pop70 + i64.load $push10=, 0($0) + i64.store 0($pop69):p2align=2, $pop10 + i32.const $push68=, 48 + i32.add $push67=, $14, $pop68 + tee_local $push66=, $0=, $pop67 + i64.load $push11=, 0($1) + i64.store 0($pop66):p2align=2, $pop11 + i32.const $push65=, 40 + i32.add $push64=, $14, $pop65 + tee_local $push63=, $1=, $pop64 + i64.load $push12=, 0($2) + i64.store 0($pop63):p2align=2, $pop12 + i32.const $push62=, 32 + i32.add $push61=, $14, $pop62 + tee_local $push60=, $2=, $pop61 + i64.load $push13=, 0($3) + i64.store 0($pop60):p2align=2, $pop13 + i32.const $push59=, 24 + i32.add $push58=, $14, $pop59 + tee_local $push57=, $3=, $pop58 + i64.load $push14=, 0($4) + i64.store 0($pop57):p2align=2, $pop14 + i32.const $push56=, 16 + i32.add $push55=, $14, $pop56 + tee_local $push54=, $4=, $pop55 + i64.load $push15=, 0($5) + i64.store 0($pop54):p2align=2, $pop15 + i32.const $push53=, 8 + i32.add $push52=, $14, $pop53 + tee_local $push51=, $5=, $pop52 + i64.load $push16=, 0($6) + i64.store 0($pop51):p2align=2, $pop16 + i64.load $push17=, 0($16) + i64.store 0($14):p2align=2, $pop17 + i64.load $push18=, 0($13) + i64.store 0($5):p2align=2, $pop18 + i64.load $push19=, 0($12) + i64.store 0($4):p2align=2, $pop19 + i64.load $push20=, 0($11) + i64.store 0($3):p2align=2, $pop20 + i64.load $push21=, 0($10) + i64.store 0($2):p2align=2, $pop21 + i64.load $push22=, 0($9) + i64.store 0($1):p2align=2, $pop22 + i64.load $push23=, 0($8) + i64.store 0($0):p2align=2, $pop23 + i64.load $push24=, 0($7) + i64.store 0($15):p2align=2, $pop24 + block + i32.load $push26=, 0($16) + i32.const $push25=, -1 + i32.ne $push27=, $pop26, $pop25 + br_if 0, $pop27 # 0: down to label0 +# BB#1: # %if.end + i32.const $push34=, 0 + i32.const $push32=, 128 + i32.add $push33=, $16, $pop32 + i32.store __stack_pointer($pop34), $pop33 + return +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size test, .Lfunc_end1-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push30=, 0 + i32.const $push28=, 0 + i32.load $push27=, __stack_pointer($pop28) + i32.const $push29=, 128 + i32.sub $push125=, $pop27, $pop29 + tee_local $push124=, $16=, $pop125 + i32.store __stack_pointer($pop30), $pop124 + i32.const $push34=, 64 + i32.add $push35=, $16, $pop34 + i32.const $push0=, 56 + i32.add $push123=, $pop35, $pop0 + tee_local $push122=, $0=, $pop123 + i64.const $push1=, 0 + i64.store 0($pop122), $pop1 + i32.const $push36=, 64 + i32.add $push37=, $16, $pop36 + i32.const $push2=, 48 + i32.add $push121=, $pop37, $pop2 + tee_local $push120=, $1=, $pop121 + i64.const $push119=, 0 + i64.store 0($pop120), $pop119 + i32.const $push38=, 64 + i32.add $push39=, $16, $pop38 + i32.const $push3=, 40 + i32.add $push118=, $pop39, $pop3 + tee_local $push117=, $2=, $pop118 + i64.const $push116=, 0 + i64.store 0($pop117), $pop116 + i32.const $push40=, 64 + i32.add $push41=, $16, $pop40 + i32.const $push4=, 32 + i32.add $push115=, $pop41, $pop4 + tee_local $push114=, $3=, $pop115 + i64.const $push113=, 0 + i64.store 0($pop114), $pop113 + i32.const $push42=, 64 + i32.add $push43=, $16, $pop42 + i32.const $push5=, 24 + i32.add $push112=, $pop43, $pop5 + tee_local $push111=, $4=, $pop112 + i64.const $push110=, 0 + i64.store 0($pop111), $pop110 + i32.const $push44=, 64 + i32.add $push45=, $16, $pop44 + i32.const $push6=, 16 + i32.add $push109=, $pop45, $pop6 + tee_local $push108=, $5=, $pop109 + i64.const $push107=, 0 + i64.store 0($pop108), $pop107 + i32.const $push46=, 64 + i32.add $push47=, $16, $pop46 + i32.const $push7=, 8 + i32.add $push106=, $pop47, $pop7 + tee_local $push105=, $6=, $pop106 + i64.const $push104=, 0 + i64.store 0($pop105), $pop104 + i32.const $push103=, 56 + i32.add $push102=, $16, $pop103 + tee_local $push101=, $7=, $pop102 + i64.const $push100=, 0 + i64.store 0($pop101), $pop100 + i32.const $push99=, 48 + i32.add $push98=, $16, $pop99 + tee_local $push97=, $8=, $pop98 + i64.const $push96=, 0 + i64.store 0($pop97), $pop96 + i32.const $push95=, 40 + i32.add $push94=, $16, $pop95 + tee_local $push93=, $9=, $pop94 + i64.const $push92=, 0 + i64.store 0($pop93), $pop92 + i32.const $push91=, 32 + i32.add $push90=, $16, $pop91 + tee_local $push89=, $10=, $pop90 + i64.const $push88=, 0 + i64.store 0($pop89), $pop88 + i32.const $push87=, 24 + i32.add $push86=, $16, $pop87 + tee_local $push85=, $11=, $pop86 + i64.const $push84=, 0 + i64.store 0($pop85), $pop84 + i32.const $push83=, 16 + i32.add $push82=, $16, $pop83 + tee_local $push81=, $12=, $pop82 + i64.const $push80=, 0 + i64.store 0($pop81), $pop80 + i32.const $push79=, 8 + i32.add $push78=, $16, $pop79 + tee_local $push77=, $13=, $pop78 + i64.const $push76=, 0 + i64.store 0($pop77), $pop76 + i64.const $push75=, 0 + i64.store 64($16), $pop75 + i64.const $push74=, 0 + i64.store 0($16), $pop74 + i32.const $push48=, 64 + i32.add $push49=, $16, $pop48 + call foo@FUNCTION, $pop49, $16 + i32.const $push73=, 0 + i32.load $push72=, p($pop73) + tee_local $push71=, $14=, $pop72 + i64.load $push8=, 64($16) + i64.store 0($pop71):p2align=2, $pop8 + i32.const $push70=, 56 + i32.add $push69=, $14, $pop70 + tee_local $push68=, $15=, $pop69 + i64.load $push9=, 0($0) + i64.store 0($pop68):p2align=2, $pop9 + i32.const $push67=, 48 + i32.add $push66=, $14, $pop67 + tee_local $push65=, $0=, $pop66 + i64.load $push10=, 0($1) + i64.store 0($pop65):p2align=2, $pop10 + i32.const $push64=, 40 + i32.add $push63=, $14, $pop64 + tee_local $push62=, $1=, $pop63 + i64.load $push11=, 0($2) + i64.store 0($pop62):p2align=2, $pop11 + i32.const $push61=, 32 + i32.add $push60=, $14, $pop61 + tee_local $push59=, $2=, $pop60 + i64.load $push12=, 0($3) + i64.store 0($pop59):p2align=2, $pop12 + i32.const $push58=, 24 + i32.add $push57=, $14, $pop58 + tee_local $push56=, $3=, $pop57 + i64.load $push13=, 0($4) + i64.store 0($pop56):p2align=2, $pop13 + i32.const $push55=, 16 + i32.add $push54=, $14, $pop55 + tee_local $push53=, $4=, $pop54 + i64.load $push14=, 0($5) + i64.store 0($pop53):p2align=2, $pop14 + i32.const $push52=, 8 + i32.add $push51=, $14, $pop52 + tee_local $push50=, $5=, $pop51 + i64.load $push15=, 0($6) + i64.store 0($pop50):p2align=2, $pop15 + i64.load $push16=, 0($16) + i64.store 0($14):p2align=2, $pop16 + i64.load $push17=, 0($13) + i64.store 0($5):p2align=2, $pop17 + i64.load $push18=, 0($12) + i64.store 0($4):p2align=2, $pop18 + i64.load $push19=, 0($11) + i64.store 0($3):p2align=2, $pop19 + i64.load $push20=, 0($10) + i64.store 0($2):p2align=2, $pop20 + i64.load $push21=, 0($9) + i64.store 0($1):p2align=2, $pop21 + i64.load $push22=, 0($8) + i64.store 0($0):p2align=2, $pop22 + i64.load $push23=, 0($7) + i64.store 0($15):p2align=2, $pop23 + block + i32.load $push25=, 0($16) + i32.const $push24=, -1 + i32.ne $push26=, $pop25, $pop24 + br_if 0, $pop26 # 0: down to label1 +# BB#1: # %test.exit + i32.const $push33=, 0 + i32.const $push31=, 128 + i32.add $push32=, $16, $pop31 + i32.store __stack_pointer($pop33), $pop32 + i32.const $push126=, 0 + return $pop126 +.LBB2_2: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden p # @p + .type p,@object + .section .bss.p,"aw",@nobits + .globl p + .p2align 2 +p: + .int32 0 + .size p, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr35800.c.s b/src/binaryen/test/torture-s/pr35800.c.s new file mode 100644 index 0000000000..9f692be8ec --- /dev/null +++ b/src/binaryen/test/torture-s/pr35800.c.s @@ -0,0 +1,154 @@ + .text + .file "pr35800.c" + .section .text.stab_xcoff_builtin_type,"ax",@progbits + .hidden stab_xcoff_builtin_type # -- Begin function stab_xcoff_builtin_type + .globl stab_xcoff_builtin_type + .type stab_xcoff_builtin_type,@function +stab_xcoff_builtin_type: # @stab_xcoff_builtin_type + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $1=, 0 + block + i32.const $push0=, -34 + i32.lt_u $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $1=, .L.str + block + i32.const $push2=, -2 + i32.sub $push10=, $pop2, $0 + tee_local $push9=, $0=, $pop10 + i32.const $push3=, 32 + i32.gt_u $push4=, $pop9, $pop3 + br_if 0, $pop4 # 0: down to label1 +# BB#2: # %switch.lookup + i32.const $push5=, 2 + i32.shl $push6=, $0, $pop5 + i32.const $push7=, .Lswitch.table.main + i32.add $push8=, $pop6, $pop7 + i32.load $1=, 0($pop8) +.LBB0_3: # %sw.epilog + end_block # label1: + i32.load8_s $1=, 0($1) +.LBB0_4: # %cleanup + end_block # label0: + copy_local $push11=, $1 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end0: + .size stab_xcoff_builtin_type, .Lfunc_end0-stab_xcoff_builtin_type + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %if.end12 + i32.const $2=, .Lswitch.table.main+8 + i32.const $1=, 2 + i32.const $0=, -3 +.LBB1_1: # %if.end.i + # =>This Inner Loop Header: Depth=1 + block + loop # label3: + i32.const $3=, .L.str + block + i32.const $push5=, 32 + i32.gt_u $push0=, $1, $pop5 + br_if 0, $pop0 # 0: down to label4 +# BB#2: # %switch.lookup + # in Loop: Header=BB1_1 Depth=1 + i32.load $3=, 0($2) +.LBB1_3: # %stab_xcoff_builtin_type.exit + # in Loop: Header=BB1_1 Depth=1 + end_block # label4: + i32.load8_u $push1=, 0($3) + i32.const $push6=, 105 + i32.ne $push2=, $pop1, $pop6 + br_if 1, $pop2 # 1: down to label2 +# BB#4: # %for.cond + # in Loop: Header=BB1_1 Depth=1 + i32.const $push12=, 1 + i32.add $1=, $1, $pop12 + i32.const $push11=, 4 + i32.add $2=, $2, $pop11 + i32.const $push10=, -1 + i32.add $push9=, $0, $pop10 + tee_local $push8=, $0=, $pop9 + i32.const $push7=, -33 + i32.ge_s $push3=, $pop8, $pop7 + br_if 0, $pop3 # 0: up to label3 +# BB#5: # %if.end21 + end_loop + i32.const $push4=, 0 + return $pop4 +.LBB1_6: # %if.then16 + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "int" + .size .L.str, 4 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "short" + .size .L.str.2, 6 + + .type .L.str.33,@object # @.str.33 +.L.str.33: + .asciz "integer*8" + .size .L.str.33, 10 + + .type .Lswitch.table.main,@object # @switch.table.main + .section .rodata..Lswitch.table.main,"a",@progbits + .p2align 4 +.Lswitch.table.main: + .int32 .L.str.2 + .int32 .L.str.2 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .int32 .L.str.33 + .size .Lswitch.table.main, 132 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr36034-1.c.s b/src/binaryen/test/torture-s/pr36034-1.c.s new file mode 100644 index 0000000000..9a3488d996 --- /dev/null +++ b/src/binaryen/test/torture-s/pr36034-1.c.s @@ -0,0 +1,402 @@ + .text + .file "pr36034-1.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push89=, 0 + i64.load $push1=, x($pop89) + i64.store tmp($pop0), $pop1 + i32.const $push88=, 0 + i32.const $push87=, 0 + i64.load $push2=, x+8($pop87) + i64.store tmp+8($pop88), $pop2 + i32.const $push86=, 0 + i32.const $push85=, 0 + i64.load $push3=, x+16($pop85) + i64.store tmp+16($pop86), $pop3 + i32.const $push84=, 0 + i32.const $push83=, 0 + i64.load $push4=, x+24($pop83) + i64.store tmp+24($pop84), $pop4 + i32.const $push82=, 0 + i32.const $push81=, 0 + i64.load $push5=, x+32($pop81) + i64.store tmp+32($pop82), $pop5 + i32.const $push80=, 0 + i32.const $push79=, 0 + i64.load $push6=, x+40($pop79) + i64.store tmp+40($pop80), $pop6 + i32.const $push78=, 0 + i32.const $push77=, 0 + i64.load $push7=, x+80($pop77) + i64.store tmp+48($pop78), $pop7 + i32.const $push76=, 0 + i32.const $push75=, 0 + i64.load $push8=, x+88($pop75) + i64.store tmp+56($pop76), $pop8 + i32.const $push74=, 0 + i32.const $push73=, 0 + i64.load $push9=, x+96($pop73) + i64.store tmp+64($pop74), $pop9 + i32.const $push72=, 0 + i32.const $push71=, 0 + i64.load $push10=, x+104($pop71) + i64.store tmp+72($pop72), $pop10 + i32.const $push70=, 0 + i32.const $push69=, 0 + i64.load $push11=, x+112($pop69) + i64.store tmp+80($pop70), $pop11 + i32.const $push68=, 0 + i32.const $push67=, 0 + i64.load $push12=, x+120($pop67) + i64.store tmp+88($pop68), $pop12 + i32.const $push66=, 0 + i32.const $push65=, 0 + i64.load $push13=, x+160($pop65) + i64.store tmp+96($pop66), $pop13 + i32.const $push64=, 0 + i32.const $push63=, 0 + i64.load $push14=, x+168($pop63) + i64.store tmp+104($pop64), $pop14 + i32.const $push62=, 0 + i32.const $push61=, 0 + i64.load $push15=, x+176($pop61) + i64.store tmp+112($pop62), $pop15 + i32.const $push60=, 0 + i32.const $push59=, 0 + i64.load $push16=, x+184($pop59) + i64.store tmp+120($pop60), $pop16 + i32.const $push58=, 0 + i32.const $push57=, 0 + i64.load $push17=, x+192($pop57) + i64.store tmp+128($pop58), $pop17 + i32.const $push56=, 0 + i32.const $push55=, 0 + i64.load $push18=, x+200($pop55) + i64.store tmp+136($pop56), $pop18 + i32.const $push54=, 0 + i32.const $push53=, 0 + i64.load $push19=, x+240($pop53) + i64.store tmp+144($pop54), $pop19 + i32.const $push52=, 0 + i32.const $push51=, 0 + i64.load $push20=, x+248($pop51) + i64.store tmp+152($pop52), $pop20 + i32.const $push50=, 0 + i32.const $push49=, 0 + i64.load $push21=, x+256($pop49) + i64.store tmp+160($pop50), $pop21 + i32.const $push48=, 0 + i32.const $push47=, 0 + i64.load $push22=, x+264($pop47) + i64.store tmp+168($pop48), $pop22 + i32.const $push46=, 0 + i32.const $push45=, 0 + i64.load $push23=, x+272($pop45) + i64.store tmp+176($pop46), $pop23 + i32.const $push44=, 0 + i32.const $push43=, 0 + i64.load $push24=, x+280($pop43) + i64.store tmp+184($pop44), $pop24 + i32.const $push42=, 0 + i32.const $push41=, 0 + i64.load $push25=, x+320($pop41) + i64.store tmp+192($pop42), $pop25 + i32.const $push40=, 0 + i32.const $push39=, 0 + i64.load $push26=, x+328($pop39) + i64.store tmp+200($pop40), $pop26 + i32.const $push38=, 0 + i32.const $push37=, 0 + i64.load $push27=, x+336($pop37) + i64.store tmp+208($pop38), $pop27 + i32.const $push36=, 0 + i32.const $push35=, 0 + i64.load $push28=, x+344($pop35) + i64.store tmp+216($pop36), $pop28 + i32.const $push34=, 0 + i32.const $push33=, 0 + i64.load $push29=, x+352($pop33) + i64.store tmp+224($pop34), $pop29 + i32.const $push32=, 0 + i32.const $push31=, 0 + i64.load $push30=, x+360($pop31) + i64.store tmp+232($pop32), $pop30 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call test@FUNCTION + block + i32.const $push62=, 0 + f64.load $push29=, tmp($pop62) + f64.const $push61=, -0x1p0 + f64.eq $push30=, $pop29, $pop61 + br_if 0, $pop30 # 0: down to label0 +# BB#1: # %entry + i32.const $push64=, 0 + f64.load $push0=, tmp+8($pop64) + f64.const $push63=, -0x1p0 + f64.eq $push31=, $pop0, $pop63 + br_if 0, $pop31 # 0: down to label0 +# BB#2: # %entry + i32.const $push66=, 0 + f64.load $push1=, tmp+16($pop66) + f64.const $push65=, -0x1p0 + f64.eq $push32=, $pop1, $pop65 + br_if 0, $pop32 # 0: down to label0 +# BB#3: # %entry + i32.const $push68=, 0 + f64.load $push2=, tmp+24($pop68) + f64.const $push67=, -0x1p0 + f64.eq $push33=, $pop2, $pop67 + br_if 0, $pop33 # 0: down to label0 +# BB#4: # %entry + i32.const $push70=, 0 + f64.load $push3=, tmp+32($pop70) + f64.const $push69=, -0x1p0 + f64.eq $push34=, $pop3, $pop69 + br_if 0, $pop34 # 0: down to label0 +# BB#5: # %entry + i32.const $push72=, 0 + f64.load $push4=, tmp+40($pop72) + f64.const $push71=, -0x1p0 + f64.eq $push35=, $pop4, $pop71 + br_if 0, $pop35 # 0: down to label0 +# BB#6: # %entry + i32.const $push74=, 0 + f64.load $push5=, tmp+48($pop74) + f64.const $push73=, -0x1p0 + f64.eq $push36=, $pop5, $pop73 + br_if 0, $pop36 # 0: down to label0 +# BB#7: # %entry + i32.const $push76=, 0 + f64.load $push6=, tmp+56($pop76) + f64.const $push75=, -0x1p0 + f64.eq $push37=, $pop6, $pop75 + br_if 0, $pop37 # 0: down to label0 +# BB#8: # %entry + i32.const $push78=, 0 + f64.load $push7=, tmp+64($pop78) + f64.const $push77=, -0x1p0 + f64.eq $push38=, $pop7, $pop77 + br_if 0, $pop38 # 0: down to label0 +# BB#9: # %entry + i32.const $push80=, 0 + f64.load $push8=, tmp+72($pop80) + f64.const $push79=, -0x1p0 + f64.eq $push39=, $pop8, $pop79 + br_if 0, $pop39 # 0: down to label0 +# BB#10: # %entry + i32.const $push82=, 0 + f64.load $push9=, tmp+80($pop82) + f64.const $push81=, -0x1p0 + f64.eq $push40=, $pop9, $pop81 + br_if 0, $pop40 # 0: down to label0 +# BB#11: # %entry + i32.const $push84=, 0 + f64.load $push10=, tmp+88($pop84) + f64.const $push83=, -0x1p0 + f64.eq $push41=, $pop10, $pop83 + br_if 0, $pop41 # 0: down to label0 +# BB#12: # %entry + i32.const $push86=, 0 + f64.load $push11=, tmp+96($pop86) + f64.const $push85=, -0x1p0 + f64.eq $push42=, $pop11, $pop85 + br_if 0, $pop42 # 0: down to label0 +# BB#13: # %entry + i32.const $push88=, 0 + f64.load $push12=, tmp+104($pop88) + f64.const $push87=, -0x1p0 + f64.eq $push43=, $pop12, $pop87 + br_if 0, $pop43 # 0: down to label0 +# BB#14: # %entry + i32.const $push90=, 0 + f64.load $push13=, tmp+112($pop90) + f64.const $push89=, -0x1p0 + f64.eq $push44=, $pop13, $pop89 + br_if 0, $pop44 # 0: down to label0 +# BB#15: # %entry + i32.const $push92=, 0 + f64.load $push14=, tmp+120($pop92) + f64.const $push91=, -0x1p0 + f64.eq $push45=, $pop14, $pop91 + br_if 0, $pop45 # 0: down to label0 +# BB#16: # %entry + i32.const $push94=, 0 + f64.load $push15=, tmp+128($pop94) + f64.const $push93=, -0x1p0 + f64.eq $push46=, $pop15, $pop93 + br_if 0, $pop46 # 0: down to label0 +# BB#17: # %entry + i32.const $push96=, 0 + f64.load $push16=, tmp+136($pop96) + f64.const $push95=, -0x1p0 + f64.eq $push47=, $pop16, $pop95 + br_if 0, $pop47 # 0: down to label0 +# BB#18: # %entry + i32.const $push98=, 0 + f64.load $push17=, tmp+144($pop98) + f64.const $push97=, -0x1p0 + f64.eq $push48=, $pop17, $pop97 + br_if 0, $pop48 # 0: down to label0 +# BB#19: # %entry + i32.const $push100=, 0 + f64.load $push18=, tmp+152($pop100) + f64.const $push99=, -0x1p0 + f64.eq $push49=, $pop18, $pop99 + br_if 0, $pop49 # 0: down to label0 +# BB#20: # %entry + i32.const $push102=, 0 + f64.load $push19=, tmp+160($pop102) + f64.const $push101=, -0x1p0 + f64.eq $push50=, $pop19, $pop101 + br_if 0, $pop50 # 0: down to label0 +# BB#21: # %entry + i32.const $push104=, 0 + f64.load $push20=, tmp+168($pop104) + f64.const $push103=, -0x1p0 + f64.eq $push51=, $pop20, $pop103 + br_if 0, $pop51 # 0: down to label0 +# BB#22: # %entry + i32.const $push106=, 0 + f64.load $push21=, tmp+176($pop106) + f64.const $push105=, -0x1p0 + f64.eq $push52=, $pop21, $pop105 + br_if 0, $pop52 # 0: down to label0 +# BB#23: # %entry + i32.const $push108=, 0 + f64.load $push22=, tmp+184($pop108) + f64.const $push107=, -0x1p0 + f64.eq $push53=, $pop22, $pop107 + br_if 0, $pop53 # 0: down to label0 +# BB#24: # %entry + i32.const $push110=, 0 + f64.load $push23=, tmp+192($pop110) + f64.const $push109=, -0x1p0 + f64.eq $push54=, $pop23, $pop109 + br_if 0, $pop54 # 0: down to label0 +# BB#25: # %entry + i32.const $push112=, 0 + f64.load $push24=, tmp+200($pop112) + f64.const $push111=, -0x1p0 + f64.eq $push55=, $pop24, $pop111 + br_if 0, $pop55 # 0: down to label0 +# BB#26: # %entry + i32.const $push114=, 0 + f64.load $push25=, tmp+208($pop114) + f64.const $push113=, -0x1p0 + f64.eq $push56=, $pop25, $pop113 + br_if 0, $pop56 # 0: down to label0 +# BB#27: # %entry + i32.const $push116=, 0 + f64.load $push26=, tmp+216($pop116) + f64.const $push115=, -0x1p0 + f64.eq $push57=, $pop26, $pop115 + br_if 0, $pop57 # 0: down to label0 +# BB#28: # %entry + i32.const $push118=, 0 + f64.load $push27=, tmp+224($pop118) + f64.const $push117=, -0x1p0 + f64.eq $push58=, $pop27, $pop117 + br_if 0, $pop58 # 0: down to label0 +# BB#29: # %entry + i32.const $push120=, 0 + f64.load $push28=, tmp+232($pop120) + f64.const $push119=, -0x1p0 + f64.eq $push59=, $pop28, $pop119 + br_if 0, $pop59 # 0: down to label0 +# BB#30: # %for.cond1.5.4 + i32.const $push60=, 0 + return $pop60 +.LBB1_31: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 4 +x: + .int64 4621819117588971520 # double 10 + .int64 4622382067542392832 # double 11 + .int64 4622945017495814144 # double 12 + .int64 4623507967449235456 # double 13 + .int64 4624070917402656768 # double 14 + .int64 4624633867356078080 # double 15 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 4626604192193052672 # double 21 + .int64 4626885667169763328 # double 22 + .int64 4627167142146473984 # double 23 + .int64 4627448617123184640 # double 24 + .int64 4627730092099895296 # double 25 + .int64 4628011567076605952 # double 26 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 4629700416936869888 # double 32 + .int64 4629841154425225216 # double 33 + .int64 4629981891913580544 # double 34 + .int64 4630122629401935872 # double 35 + .int64 4630263366890291200 # double 36 + .int64 4630404104378646528 # double 37 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 4631248529308778496 # double 43 + .int64 4631389266797133824 # double 44 + .int64 4631530004285489152 # double 45 + .int64 4631670741773844480 # double 46 + .int64 4631811479262199808 # double 47 + .int64 4631952216750555136 # double 48 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 4632796641680687104 # double 54 + .int64 4632937379169042432 # double 55 + .int64 4633078116657397760 # double 56 + .int64 4633218854145753088 # double 57 + .int64 4633359591634108416 # double 58 + .int64 4633500329122463744 # double 59 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .size x, 400 + + .hidden tmp # @tmp + .type tmp,@object + .section .bss.tmp,"aw",@nobits + .globl tmp + .p2align 4 +tmp: + .skip 240 + .size tmp, 240 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr36034-2.c.s b/src/binaryen/test/torture-s/pr36034-2.c.s new file mode 100644 index 0000000000..2da2a0a25b --- /dev/null +++ b/src/binaryen/test/torture-s/pr36034-2.c.s @@ -0,0 +1,402 @@ + .text + .file "pr36034-2.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push89=, 0 + i64.load $push1=, x($pop89) + i64.store tmp($pop0), $pop1 + i32.const $push88=, 0 + i32.const $push87=, 0 + i64.load $push2=, x+8($pop87) + i64.store tmp+8($pop88), $pop2 + i32.const $push86=, 0 + i32.const $push85=, 0 + i64.load $push3=, x+16($pop85) + i64.store tmp+16($pop86), $pop3 + i32.const $push84=, 0 + i32.const $push83=, 0 + i64.load $push4=, x+24($pop83) + i64.store tmp+24($pop84), $pop4 + i32.const $push82=, 0 + i32.const $push81=, 0 + i64.load $push5=, x+32($pop81) + i64.store tmp+32($pop82), $pop5 + i32.const $push80=, 0 + i32.const $push79=, 0 + i64.load $push6=, x+40($pop79) + i64.store tmp+40($pop80), $pop6 + i32.const $push78=, 0 + i32.const $push77=, 0 + i64.load $push7=, x+80($pop77) + i64.store tmp+48($pop78), $pop7 + i32.const $push76=, 0 + i32.const $push75=, 0 + i64.load $push8=, x+88($pop75) + i64.store tmp+56($pop76), $pop8 + i32.const $push74=, 0 + i32.const $push73=, 0 + i64.load $push9=, x+96($pop73) + i64.store tmp+64($pop74), $pop9 + i32.const $push72=, 0 + i32.const $push71=, 0 + i64.load $push10=, x+104($pop71) + i64.store tmp+72($pop72), $pop10 + i32.const $push70=, 0 + i32.const $push69=, 0 + i64.load $push11=, x+112($pop69) + i64.store tmp+80($pop70), $pop11 + i32.const $push68=, 0 + i32.const $push67=, 0 + i64.load $push12=, x+120($pop67) + i64.store tmp+88($pop68), $pop12 + i32.const $push66=, 0 + i32.const $push65=, 0 + i64.load $push13=, x+160($pop65) + i64.store tmp+96($pop66), $pop13 + i32.const $push64=, 0 + i32.const $push63=, 0 + i64.load $push14=, x+168($pop63) + i64.store tmp+104($pop64), $pop14 + i32.const $push62=, 0 + i32.const $push61=, 0 + i64.load $push15=, x+176($pop61) + i64.store tmp+112($pop62), $pop15 + i32.const $push60=, 0 + i32.const $push59=, 0 + i64.load $push16=, x+184($pop59) + i64.store tmp+120($pop60), $pop16 + i32.const $push58=, 0 + i32.const $push57=, 0 + i64.load $push17=, x+192($pop57) + i64.store tmp+128($pop58), $pop17 + i32.const $push56=, 0 + i32.const $push55=, 0 + i64.load $push18=, x+200($pop55) + i64.store tmp+136($pop56), $pop18 + i32.const $push54=, 0 + i32.const $push53=, 0 + i64.load $push19=, x+240($pop53) + i64.store tmp+144($pop54), $pop19 + i32.const $push52=, 0 + i32.const $push51=, 0 + i64.load $push20=, x+248($pop51) + i64.store tmp+152($pop52), $pop20 + i32.const $push50=, 0 + i32.const $push49=, 0 + i64.load $push21=, x+256($pop49) + i64.store tmp+160($pop50), $pop21 + i32.const $push48=, 0 + i32.const $push47=, 0 + i64.load $push22=, x+264($pop47) + i64.store tmp+168($pop48), $pop22 + i32.const $push46=, 0 + i32.const $push45=, 0 + i64.load $push23=, x+272($pop45) + i64.store tmp+176($pop46), $pop23 + i32.const $push44=, 0 + i32.const $push43=, 0 + i64.load $push24=, x+280($pop43) + i64.store tmp+184($pop44), $pop24 + i32.const $push42=, 0 + i32.const $push41=, 0 + i64.load $push25=, x+320($pop41) + i64.store tmp+192($pop42), $pop25 + i32.const $push40=, 0 + i32.const $push39=, 0 + i64.load $push26=, x+328($pop39) + i64.store tmp+200($pop40), $pop26 + i32.const $push38=, 0 + i32.const $push37=, 0 + i64.load $push27=, x+336($pop37) + i64.store tmp+208($pop38), $pop27 + i32.const $push36=, 0 + i32.const $push35=, 0 + i64.load $push28=, x+344($pop35) + i64.store tmp+216($pop36), $pop28 + i32.const $push34=, 0 + i32.const $push33=, 0 + i64.load $push29=, x+352($pop33) + i64.store tmp+224($pop34), $pop29 + i32.const $push32=, 0 + i32.const $push31=, 0 + i64.load $push30=, x+360($pop31) + i64.store tmp+232($pop32), $pop30 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call test@FUNCTION + block + i32.const $push62=, 0 + f64.load $push29=, tmp($pop62) + f64.const $push61=, -0x1p0 + f64.eq $push30=, $pop29, $pop61 + br_if 0, $pop30 # 0: down to label0 +# BB#1: # %entry + i32.const $push64=, 0 + f64.load $push0=, tmp+8($pop64) + f64.const $push63=, -0x1p0 + f64.eq $push31=, $pop0, $pop63 + br_if 0, $pop31 # 0: down to label0 +# BB#2: # %entry + i32.const $push66=, 0 + f64.load $push1=, tmp+16($pop66) + f64.const $push65=, -0x1p0 + f64.eq $push32=, $pop1, $pop65 + br_if 0, $pop32 # 0: down to label0 +# BB#3: # %entry + i32.const $push68=, 0 + f64.load $push2=, tmp+24($pop68) + f64.const $push67=, -0x1p0 + f64.eq $push33=, $pop2, $pop67 + br_if 0, $pop33 # 0: down to label0 +# BB#4: # %entry + i32.const $push70=, 0 + f64.load $push3=, tmp+32($pop70) + f64.const $push69=, -0x1p0 + f64.eq $push34=, $pop3, $pop69 + br_if 0, $pop34 # 0: down to label0 +# BB#5: # %entry + i32.const $push72=, 0 + f64.load $push4=, tmp+40($pop72) + f64.const $push71=, -0x1p0 + f64.eq $push35=, $pop4, $pop71 + br_if 0, $pop35 # 0: down to label0 +# BB#6: # %entry + i32.const $push74=, 0 + f64.load $push5=, tmp+48($pop74) + f64.const $push73=, -0x1p0 + f64.eq $push36=, $pop5, $pop73 + br_if 0, $pop36 # 0: down to label0 +# BB#7: # %entry + i32.const $push76=, 0 + f64.load $push6=, tmp+56($pop76) + f64.const $push75=, -0x1p0 + f64.eq $push37=, $pop6, $pop75 + br_if 0, $pop37 # 0: down to label0 +# BB#8: # %entry + i32.const $push78=, 0 + f64.load $push7=, tmp+64($pop78) + f64.const $push77=, -0x1p0 + f64.eq $push38=, $pop7, $pop77 + br_if 0, $pop38 # 0: down to label0 +# BB#9: # %entry + i32.const $push80=, 0 + f64.load $push8=, tmp+72($pop80) + f64.const $push79=, -0x1p0 + f64.eq $push39=, $pop8, $pop79 + br_if 0, $pop39 # 0: down to label0 +# BB#10: # %entry + i32.const $push82=, 0 + f64.load $push9=, tmp+80($pop82) + f64.const $push81=, -0x1p0 + f64.eq $push40=, $pop9, $pop81 + br_if 0, $pop40 # 0: down to label0 +# BB#11: # %entry + i32.const $push84=, 0 + f64.load $push10=, tmp+88($pop84) + f64.const $push83=, -0x1p0 + f64.eq $push41=, $pop10, $pop83 + br_if 0, $pop41 # 0: down to label0 +# BB#12: # %entry + i32.const $push86=, 0 + f64.load $push11=, tmp+96($pop86) + f64.const $push85=, -0x1p0 + f64.eq $push42=, $pop11, $pop85 + br_if 0, $pop42 # 0: down to label0 +# BB#13: # %entry + i32.const $push88=, 0 + f64.load $push12=, tmp+104($pop88) + f64.const $push87=, -0x1p0 + f64.eq $push43=, $pop12, $pop87 + br_if 0, $pop43 # 0: down to label0 +# BB#14: # %entry + i32.const $push90=, 0 + f64.load $push13=, tmp+112($pop90) + f64.const $push89=, -0x1p0 + f64.eq $push44=, $pop13, $pop89 + br_if 0, $pop44 # 0: down to label0 +# BB#15: # %entry + i32.const $push92=, 0 + f64.load $push14=, tmp+120($pop92) + f64.const $push91=, -0x1p0 + f64.eq $push45=, $pop14, $pop91 + br_if 0, $pop45 # 0: down to label0 +# BB#16: # %entry + i32.const $push94=, 0 + f64.load $push15=, tmp+128($pop94) + f64.const $push93=, -0x1p0 + f64.eq $push46=, $pop15, $pop93 + br_if 0, $pop46 # 0: down to label0 +# BB#17: # %entry + i32.const $push96=, 0 + f64.load $push16=, tmp+136($pop96) + f64.const $push95=, -0x1p0 + f64.eq $push47=, $pop16, $pop95 + br_if 0, $pop47 # 0: down to label0 +# BB#18: # %entry + i32.const $push98=, 0 + f64.load $push17=, tmp+144($pop98) + f64.const $push97=, -0x1p0 + f64.eq $push48=, $pop17, $pop97 + br_if 0, $pop48 # 0: down to label0 +# BB#19: # %entry + i32.const $push100=, 0 + f64.load $push18=, tmp+152($pop100) + f64.const $push99=, -0x1p0 + f64.eq $push49=, $pop18, $pop99 + br_if 0, $pop49 # 0: down to label0 +# BB#20: # %entry + i32.const $push102=, 0 + f64.load $push19=, tmp+160($pop102) + f64.const $push101=, -0x1p0 + f64.eq $push50=, $pop19, $pop101 + br_if 0, $pop50 # 0: down to label0 +# BB#21: # %entry + i32.const $push104=, 0 + f64.load $push20=, tmp+168($pop104) + f64.const $push103=, -0x1p0 + f64.eq $push51=, $pop20, $pop103 + br_if 0, $pop51 # 0: down to label0 +# BB#22: # %entry + i32.const $push106=, 0 + f64.load $push21=, tmp+176($pop106) + f64.const $push105=, -0x1p0 + f64.eq $push52=, $pop21, $pop105 + br_if 0, $pop52 # 0: down to label0 +# BB#23: # %entry + i32.const $push108=, 0 + f64.load $push22=, tmp+184($pop108) + f64.const $push107=, -0x1p0 + f64.eq $push53=, $pop22, $pop107 + br_if 0, $pop53 # 0: down to label0 +# BB#24: # %entry + i32.const $push110=, 0 + f64.load $push23=, tmp+192($pop110) + f64.const $push109=, -0x1p0 + f64.eq $push54=, $pop23, $pop109 + br_if 0, $pop54 # 0: down to label0 +# BB#25: # %entry + i32.const $push112=, 0 + f64.load $push24=, tmp+200($pop112) + f64.const $push111=, -0x1p0 + f64.eq $push55=, $pop24, $pop111 + br_if 0, $pop55 # 0: down to label0 +# BB#26: # %entry + i32.const $push114=, 0 + f64.load $push25=, tmp+208($pop114) + f64.const $push113=, -0x1p0 + f64.eq $push56=, $pop25, $pop113 + br_if 0, $pop56 # 0: down to label0 +# BB#27: # %entry + i32.const $push116=, 0 + f64.load $push26=, tmp+216($pop116) + f64.const $push115=, -0x1p0 + f64.eq $push57=, $pop26, $pop115 + br_if 0, $pop57 # 0: down to label0 +# BB#28: # %entry + i32.const $push118=, 0 + f64.load $push27=, tmp+224($pop118) + f64.const $push117=, -0x1p0 + f64.eq $push58=, $pop27, $pop117 + br_if 0, $pop58 # 0: down to label0 +# BB#29: # %entry + i32.const $push120=, 0 + f64.load $push28=, tmp+232($pop120) + f64.const $push119=, -0x1p0 + f64.eq $push59=, $pop28, $pop119 + br_if 0, $pop59 # 0: down to label0 +# BB#30: # %for.cond1.5.4 + i32.const $push60=, 0 + return $pop60 +.LBB1_31: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 4 +x: + .int64 4621819117588971520 # double 10 + .int64 4622382067542392832 # double 11 + .int64 4622945017495814144 # double 12 + .int64 4623507967449235456 # double 13 + .int64 4624070917402656768 # double 14 + .int64 4624633867356078080 # double 15 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 4626604192193052672 # double 21 + .int64 4626885667169763328 # double 22 + .int64 4627167142146473984 # double 23 + .int64 4627448617123184640 # double 24 + .int64 4627730092099895296 # double 25 + .int64 4628011567076605952 # double 26 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 4629700416936869888 # double 32 + .int64 4629841154425225216 # double 33 + .int64 4629981891913580544 # double 34 + .int64 4630122629401935872 # double 35 + .int64 4630263366890291200 # double 36 + .int64 4630404104378646528 # double 37 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 4631248529308778496 # double 43 + .int64 4631389266797133824 # double 44 + .int64 4631530004285489152 # double 45 + .int64 4631670741773844480 # double 46 + .int64 4631811479262199808 # double 47 + .int64 4631952216750555136 # double 48 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 4632796641680687104 # double 54 + .int64 4632937379169042432 # double 55 + .int64 4633078116657397760 # double 56 + .int64 4633218854145753088 # double 57 + .int64 4633359591634108416 # double 58 + .int64 4633500329122463744 # double 59 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .int64 -4616189618054758400 # double -1 + .size x, 400 + + .hidden tmp # @tmp + .type tmp,@object + .section .bss.tmp,"aw",@nobits + .globl tmp + .p2align 4 +tmp: + .skip 240 + .size tmp, 240 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr36038.c.s b/src/binaryen/test/torture-s/pr36038.c.s new file mode 100644 index 0000000000..d3460ac045 --- /dev/null +++ b/src/binaryen/test/torture-s/pr36038.c.s @@ -0,0 +1,178 @@ + .text + .file "pr36038.c" + .section .text.doit,"ax",@progbits + .hidden doit # -- Begin function doit + .globl doit + .type doit,@function +doit: # @doit + .local i32, i32, i32 +# BB#0: # %entry + block + i32.const $push19=, 0 + i32.load $push18=, markstack_ptr($pop19) + tee_local $push17=, $0=, $pop18 + i32.const $push2=, -4 + i32.add $push3=, $pop17, $pop2 + i32.load $push16=, 0($pop3) + tee_local $push15=, $1=, $pop16 + i32.const $push4=, 6 + i32.eq $push5=, $pop15, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %while.body.lr.ph + i32.const $push22=, 0 + i32.load $push0=, stack_base($pop22) + i32.const $push1=, 40 + i32.add $2=, $pop0, $pop1 + i32.const $push21=, -8 + i32.add $push8=, $0, $pop21 + i32.load $push9=, 0($pop8) + i32.const $push6=, 3 + i32.shl $push10=, $pop9, $pop6 + i32.const $push20=, 3 + i32.shl $push7=, $1, $pop20 + i32.sub $0=, $pop10, $pop7 + i32.const $push11=, -6 + i32.add $1=, $1, $pop11 +.LBB0_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.add $push12=, $2, $0 + i32.const $push27=, 16 + i32.add $push13=, $pop12, $pop27 + i64.load $push14=, 0($2) + i64.store 0($pop13), $pop14 + i32.const $push26=, -8 + i32.add $2=, $2, $pop26 + i32.const $push25=, 1 + i32.add $push24=, $1, $pop25 + tee_local $push23=, $1=, $pop24 + br_if 0, $pop23 # 0: up to label1 +.LBB0_3: # %while.end + end_loop + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size doit, .Lfunc_end0-doit + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push29=, 0 + i64.const $push0=, 1 + i64.store list+8($pop29), $pop0 + i32.const $push28=, 0 + i64.const $push1=, 0 + i64.store list($pop28), $pop1 + i32.const $push27=, 0 + i64.const $push2=, 2 + i64.store list+16($pop27), $pop2 + i32.const $push26=, 0 + i64.const $push3=, 3 + i64.store list+24($pop26), $pop3 + i32.const $push25=, 0 + i64.const $push4=, 4 + i64.store list+32($pop25), $pop4 + i32.const $push24=, 0 + i64.const $push5=, 9 + i64.store list+72($pop24), $pop5 + i32.const $push23=, 0 + i32.const $push6=, indices+36 + i32.store markstack_ptr($pop23), $pop6 + i32.const $push22=, 0 + i64.const $push7=, 8589934593 + i64.store indices+28($pop22):p2align=2, $pop7 + i32.const $push21=, 0 + i32.const $push8=, list+16 + i32.store stack_base($pop21), $pop8 + i32.const $push20=, 0 + i64.const $push9=, 7 + i64.store list+64($pop20), $pop9 + i32.const $push19=, 0 + i64.const $push10=, 6 + i64.store list+56($pop19), $pop10 + i32.const $push18=, 0 + i64.const $push11=, 5 + i64.store list+48($pop18), $pop11 + i32.const $push17=, 0 + i64.const $push16=, 4 + i64.store list+40($pop17), $pop16 + block + i32.const $push14=, expect + i32.const $push13=, list + i32.const $push12=, 80 + i32.call $push15=, memcmp@FUNCTION, $pop14, $pop13, $pop12 + br_if 0, $pop15 # 0: down to label2 +# BB#1: # %if.end + i32.const $push30=, 0 + return $pop30 +.LBB1_2: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden expect # @expect + .type expect,@object + .section .data.expect,"aw",@progbits + .globl expect + .p2align 4 +expect: + .int64 0 # 0x0 + .int64 1 # 0x1 + .int64 2 # 0x2 + .int64 3 # 0x3 + .int64 4 # 0x4 + .int64 4 # 0x4 + .int64 5 # 0x5 + .int64 6 # 0x6 + .int64 7 # 0x7 + .int64 9 # 0x9 + .size expect, 80 + + .hidden stack_base # @stack_base + .type stack_base,@object + .section .bss.stack_base,"aw",@nobits + .globl stack_base + .p2align 2 +stack_base: + .int32 0 + .size stack_base, 4 + + .hidden markstack_ptr # @markstack_ptr + .type markstack_ptr,@object + .section .bss.markstack_ptr,"aw",@nobits + .globl markstack_ptr + .p2align 2 +markstack_ptr: + .int32 0 + .size markstack_ptr, 4 + + .hidden list # @list + .type list,@object + .section .bss.list,"aw",@nobits + .globl list + .p2align 4 +list: + .skip 80 + .size list, 80 + + .hidden indices # @indices + .type indices,@object + .section .bss.indices,"aw",@nobits + .globl indices + .p2align 4 +indices: + .skip 40 + .size indices, 40 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype memcmp, i32, i32, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr36077.c.s b/src/binaryen/test/torture-s/pr36077.c.s new file mode 100644 index 0000000000..74b145d268 --- /dev/null +++ b/src/binaryen/test/torture-s/pr36077.c.s @@ -0,0 +1,31 @@ + .text + .file "pr36077.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr36093.c.s b/src/binaryen/test/torture-s/pr36093.c.s new file mode 100644 index 0000000000..c0359489d8 --- /dev/null +++ b/src/binaryen/test/torture-s/pr36093.c.s @@ -0,0 +1,42 @@ + .text + .file "pr36093.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push2=, foo + i32.const $push1=, 97 + i32.const $push0=, 129 + i32.call $drop=, memset@FUNCTION, $pop2, $pop1, $pop0 + i32.const $push4=, foo+129 + i32.const $push3=, 98 + i32.const $push12=, 129 + i32.call $drop=, memset@FUNCTION, $pop4, $pop3, $pop12 + i32.const $push6=, foo+258 + i32.const $push5=, 99 + i32.const $push11=, 129 + i32.call $drop=, memset@FUNCTION, $pop6, $pop5, $pop11 + i32.const $push8=, foo+387 + i32.const $push7=, 100 + i32.const $push10=, 129 + i32.call $drop=, memset@FUNCTION, $pop8, $pop7, $pop10 + i32.const $push9=, 0 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden foo # @foo + .type foo,@object + .section .bss.foo,"aw",@nobits + .globl foo + .p2align 7 +foo: + .skip 2560 + .size foo, 2560 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr36321.c.s b/src/binaryen/test/torture-s/pr36321.c.s new file mode 100644 index 0000000000..3f7715618d --- /dev/null +++ b/src/binaryen/test/torture-s/pr36321.c.s @@ -0,0 +1,45 @@ + .text + .file "pr36321.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $drop=, argp($pop0) + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type argp,@object # @argp + .section .data.argp,"aw",@progbits + .p2align 2 +argp: + .int32 .L.str + .size argp, 4 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "pr36321.x" + .size .L.str, 10 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr36339.c.s b/src/binaryen/test/torture-s/pr36339.c.s new file mode 100644 index 0000000000..ee11dfba43 --- /dev/null +++ b/src/binaryen/test/torture-s/pr36339.c.s @@ -0,0 +1,95 @@ + .text + .file "pr36339.c" + .section .text.try_a,"ax",@progbits + .hidden try_a # -- Begin function try_a + .globl try_a + .type try_a,@function +try_a: # @try_a + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push13=, $pop3, $pop5 + tee_local $push12=, $1=, $pop13 + i32.store __stack_pointer($pop6), $pop12 + i32.const $push0=, 0 + i32.store 12($1), $pop0 + i32.store 8($1), $0 + i32.const $push10=, 8 + i32.add $push11=, $1, $pop10 + i32.const $push1=, 1 + i32.or $push2=, $pop11, $pop1 + i32.call $0=, check_a@FUNCTION, $pop2 + i32.const $push9=, 0 + i32.const $push7=, 16 + i32.add $push8=, $1, $pop7 + i32.store __stack_pointer($pop9), $pop8 + copy_local $push14=, $0 + # fallthrough-return: $pop14 + .endfunc +.Lfunc_end0: + .size try_a, .Lfunc_end0-try_a + # -- End function + .section .text.check_a,"ax",@progbits + .hidden check_a # -- Begin function check_a + .globl check_a + .type check_a,@function +check_a: # @check_a + .param i32 + .result i32 +# BB#0: # %entry + block + block + i32.const $push6=, -1 + i32.add $push0=, $0, $pop6 + i32.load $push1=, 0($pop0) + i32.const $push2=, 42 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %land.lhs.true + i32.load $push4=, 3($0) + i32.eqz $push8=, $pop4 + br_if 1, $pop8 # 1: down to label0 +.LBB1_2: # %cleanup + end_block # label1: + i32.const $push7=, -1 + return $pop7 +.LBB1_3: + end_block # label0: + i32.const $push5=, 0 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end1: + .size check_a, .Lfunc_end1-check_a + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 42 + i32.call $push1=, try_a@FUNCTION, $pop0 + i32.const $push2=, -1 + i32.le_s $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label2 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB2_2: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr36343.c.s b/src/binaryen/test/torture-s/pr36343.c.s new file mode 100644 index 0000000000..7929193c9f --- /dev/null +++ b/src/binaryen/test/torture-s/pr36343.c.s @@ -0,0 +1,94 @@ + .text + .file "pr36343.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result f32 + .local i32, f32, i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push18=, $pop4, $pop6 + tee_local $push17=, $3=, $pop18 + i32.store __stack_pointer($pop7), $pop17 + i32.const $push0=, 0 + i32.store 12($3), $pop0 + i32.const $push1=, 1065353216 + i32.store 8($3), $pop1 + i32.const $push11=, 12 + i32.add $push12=, $3, $pop11 + i32.const $push13=, 8 + i32.add $push14=, $3, $pop13 + i32.select $push16=, $pop12, $pop14, $0 + tee_local $push15=, $1=, $pop16 + call bar@FUNCTION, $pop15 + block + block + i32.eqz $push19=, $0 + br_if 0, $pop19 # 0: down to label1 +# BB#1: # %if.then2 + i32.load $push2=, 0($1) + i32.load $push3=, 0($pop2) + f32.convert_s/i32 $2=, $pop3 + br 1 # 1: down to label0 +.LBB1_2: # %if.end3 + end_block # label1: + f32.load $2=, 8($3) +.LBB1_3: # %cleanup + end_block # label0: + i32.const $push10=, 0 + i32.const $push8=, 16 + i32.add $push9=, $3, $pop8 + i32.store __stack_pointer($pop10), $pop9 + copy_local $push20=, $2 + # fallthrough-return: $pop20 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + f32.call $push0=, foo@FUNCTION, $pop3 + f32.const $push1=, 0x0p0 + f32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label2 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB2_2: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr36691.c.s b/src/binaryen/test/torture-s/pr36691.c.s new file mode 100644 index 0000000000..4b1f361c2e --- /dev/null +++ b/src/binaryen/test/torture-s/pr36691.c.s @@ -0,0 +1,42 @@ + .text + .file "pr36691.c" + .section .text.func_1,"ax",@progbits + .hidden func_1 # -- Begin function func_1 + .globl func_1 + .type func_1,@function +func_1: # @func_1 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push1=, 0 + i32.store8 g_5($pop0), $pop1 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size func_1, .Lfunc_end0-func_1 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + i32.const $push2=, 0 + i32.store8 g_5($pop0), $pop2 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden g_5 # @g_5 + .type g_5,@object + .section .bss.g_5,"aw",@nobits + .globl g_5 +g_5: + .int8 0 # 0x0 + .size g_5, 1 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr36765.c.s b/src/binaryen/test/torture-s/pr36765.c.s new file mode 100644 index 0000000000..dc45b565aa --- /dev/null +++ b/src/binaryen/test/torture-s/pr36765.c.s @@ -0,0 +1,55 @@ + .text + .file "pr36765.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 16 + i32.call $push8=, __builtin_malloc@FUNCTION, $pop0 + tee_local $push7=, $1=, $pop8 + i32.const $push1=, 0 + i32.store 0($pop7), $pop1 + i32.const $push2=, 2 + i32.shl $push3=, $0, $pop2 + i32.add $push4=, $1, $pop3 + i32.const $push5=, 1 + i32.store 0($pop4), $pop5 + i32.load $push6=, 0($1) + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.call $push0=, foo@FUNCTION, $pop3 + i32.const $push1=, 1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype __builtin_malloc, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr37102.c.s b/src/binaryen/test/torture-s/pr37102.c.s new file mode 100644 index 0000000000..4cd6203ffb --- /dev/null +++ b/src/binaryen/test/torture-s/pr37102.c.s @@ -0,0 +1,90 @@ + .text + .file "pr37102.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 5 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.load $0=, b($pop9) + block + i32.const $push8=, 0 + i32.load $push0=, c($pop8) + i32.eqz $push14=, $pop0 + br_if 0, $pop14 # 0: down to label1 +# BB#1: # %if.then.3 + i32.const $push10=, 0 + i32.store a($pop10), $0 +.LBB1_2: # %for.inc.3 + end_block # label1: + i32.const $push13=, 0 + i32.store a($pop13), $0 + i32.const $push3=, 2 + i32.shl $push4=, $0, $pop3 + i32.const $push5=, 1 + i32.or $push6=, $pop4, $pop5 + i32.const $push12=, 0 + i32.const $push1=, 2147483647 + i32.and $push2=, $0, $pop1 + i32.select $push7=, $pop6, $pop12, $pop2 + call foo@FUNCTION, $pop7 + i32.const $push11=, 0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden b # @b + .type b,@object + .section .data.b,"aw",@progbits + .globl b + .p2align 2 +b: + .int32 1 # 0x1 + .size b, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr37125.c.s b/src/binaryen/test/torture-s/pr37125.c.s new file mode 100644 index 0000000000..24f45f5d41 --- /dev/null +++ b/src/binaryen/test/torture-s/pr37125.c.s @@ -0,0 +1,46 @@ + .text + .file "pr37125.c" + .section .text.func_44,"ax",@progbits + .hidden func_44 # -- Begin function func_44 + .globl func_44 + .type func_44,@function +func_44: # @func_44 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, -9 + i32.mul $push7=, $0, $pop0 + tee_local $push6=, $0=, $pop7 + i32.const $push2=, 9 + i32.add $push3=, $0, $pop2 + i32.const $push5=, -9 + i32.lt_u $push1=, $0, $pop5 + i32.select $push4=, $pop6, $pop3, $pop1 + i32.eqz $push8=, $pop4 + br_if 0, $pop8 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size func_44, .Lfunc_end0-func_44 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr37573.c.s b/src/binaryen/test/torture-s/pr37573.c.s new file mode 100644 index 0000000000..a5294bdc86 --- /dev/null +++ b/src/binaryen/test/torture-s/pr37573.c.s @@ -0,0 +1,377 @@ + .text + .file "pr37573.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call bar@FUNCTION + block + i32.const $push2=, p + i32.const $push1=, q + i32.const $push0=, 23 + i32.call $push3=, memcmp@FUNCTION, $pop2, $pop1, $pop0 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.bar,"ax",@progbits + .type bar,@function # -- Begin function bar +bar: # @bar + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push79=, 0 + i32.const $push77=, 0 + i32.load $push76=, __stack_pointer($pop77) + i32.const $push78=, 2512 + i32.sub $push131=, $pop76, $pop78 + tee_local $push130=, $3=, $pop131 + i32.store __stack_pointer($pop79), $pop130 + i32.const $1=, 41589 + i32.const $push129=, 41589 + i32.store 16($3), $pop129 + i32.const $push0=, 20 + i32.add $0=, $3, $pop0 + i32.const $2=, 1 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push140=, 30 + i32.shr_u $push1=, $1, $pop140 + i32.xor $push2=, $pop1, $1 + i32.const $push139=, 1812433253 + i32.mul $push3=, $pop2, $pop139 + i32.add $push138=, $pop3, $2 + tee_local $push137=, $1=, $pop138 + i32.store 0($0), $pop137 + i32.const $push136=, 4 + i32.add $0=, $0, $pop136 + i32.const $push135=, 1 + i32.add $push134=, $2, $pop135 + tee_local $push133=, $2=, $pop134 + i32.const $push132=, 624 + i32.ne $push4=, $pop133, $pop132 + br_if 0, $pop4 # 0: up to label1 +# BB#2: # %for.end + end_loop + i32.const $push5=, 1 + i32.store 12($3), $pop5 + i32.const $push7=, 0 + i32.const $push83=, 8 + i32.add $push84=, $3, $pop83 + i32.call $push6=, foo@FUNCTION, $pop84 + i32.const $push185=, 0 + i32.load8_u $push8=, p($pop185) + i32.xor $push9=, $pop6, $pop8 + i32.store8 p($pop7), $pop9 + i32.const $push184=, 0 + i32.const $push85=, 8 + i32.add $push86=, $3, $pop85 + i32.call $push10=, foo@FUNCTION, $pop86 + i32.const $push183=, 0 + i32.load8_u $push11=, p+1($pop183) + i32.xor $push12=, $pop10, $pop11 + i32.store8 p+1($pop184), $pop12 + i32.const $push182=, 0 + i32.const $push87=, 8 + i32.add $push88=, $3, $pop87 + i32.call $push13=, foo@FUNCTION, $pop88 + i32.const $push181=, 0 + i32.load8_u $push14=, p+2($pop181) + i32.xor $push15=, $pop13, $pop14 + i32.store8 p+2($pop182), $pop15 + i32.const $push180=, 0 + i32.const $push89=, 8 + i32.add $push90=, $3, $pop89 + i32.call $push16=, foo@FUNCTION, $pop90 + i32.const $push179=, 0 + i32.load8_u $push17=, p+3($pop179) + i32.xor $push18=, $pop16, $pop17 + i32.store8 p+3($pop180), $pop18 + i32.const $push178=, 0 + i32.const $push91=, 8 + i32.add $push92=, $3, $pop91 + i32.call $push19=, foo@FUNCTION, $pop92 + i32.const $push177=, 0 + i32.load8_u $push20=, p+4($pop177) + i32.xor $push21=, $pop19, $pop20 + i32.store8 p+4($pop178), $pop21 + i32.const $push176=, 0 + i32.const $push93=, 8 + i32.add $push94=, $3, $pop93 + i32.call $push22=, foo@FUNCTION, $pop94 + i32.const $push175=, 0 + i32.load8_u $push23=, p+5($pop175) + i32.xor $push24=, $pop22, $pop23 + i32.store8 p+5($pop176), $pop24 + i32.const $push174=, 0 + i32.const $push95=, 8 + i32.add $push96=, $3, $pop95 + i32.call $push25=, foo@FUNCTION, $pop96 + i32.const $push173=, 0 + i32.load8_u $push26=, p+6($pop173) + i32.xor $push27=, $pop25, $pop26 + i32.store8 p+6($pop174), $pop27 + i32.const $push172=, 0 + i32.const $push97=, 8 + i32.add $push98=, $3, $pop97 + i32.call $push28=, foo@FUNCTION, $pop98 + i32.const $push171=, 0 + i32.load8_u $push29=, p+7($pop171) + i32.xor $push30=, $pop28, $pop29 + i32.store8 p+7($pop172), $pop30 + i32.const $push170=, 0 + i32.const $push99=, 8 + i32.add $push100=, $3, $pop99 + i32.call $push31=, foo@FUNCTION, $pop100 + i32.const $push169=, 0 + i32.load8_u $push32=, p+8($pop169) + i32.xor $push33=, $pop31, $pop32 + i32.store8 p+8($pop170), $pop33 + i32.const $push168=, 0 + i32.const $push101=, 8 + i32.add $push102=, $3, $pop101 + i32.call $push34=, foo@FUNCTION, $pop102 + i32.const $push167=, 0 + i32.load8_u $push35=, p+9($pop167) + i32.xor $push36=, $pop34, $pop35 + i32.store8 p+9($pop168), $pop36 + i32.const $push166=, 0 + i32.const $push103=, 8 + i32.add $push104=, $3, $pop103 + i32.call $push37=, foo@FUNCTION, $pop104 + i32.const $push165=, 0 + i32.load8_u $push38=, p+10($pop165) + i32.xor $push39=, $pop37, $pop38 + i32.store8 p+10($pop166), $pop39 + i32.const $push164=, 0 + i32.const $push105=, 8 + i32.add $push106=, $3, $pop105 + i32.call $push40=, foo@FUNCTION, $pop106 + i32.const $push163=, 0 + i32.load8_u $push41=, p+11($pop163) + i32.xor $push42=, $pop40, $pop41 + i32.store8 p+11($pop164), $pop42 + i32.const $push162=, 0 + i32.const $push107=, 8 + i32.add $push108=, $3, $pop107 + i32.call $push43=, foo@FUNCTION, $pop108 + i32.const $push161=, 0 + i32.load8_u $push44=, p+12($pop161) + i32.xor $push45=, $pop43, $pop44 + i32.store8 p+12($pop162), $pop45 + i32.const $push160=, 0 + i32.const $push109=, 8 + i32.add $push110=, $3, $pop109 + i32.call $push46=, foo@FUNCTION, $pop110 + i32.const $push159=, 0 + i32.load8_u $push47=, p+13($pop159) + i32.xor $push48=, $pop46, $pop47 + i32.store8 p+13($pop160), $pop48 + i32.const $push158=, 0 + i32.const $push111=, 8 + i32.add $push112=, $3, $pop111 + i32.call $push49=, foo@FUNCTION, $pop112 + i32.const $push157=, 0 + i32.load8_u $push50=, p+14($pop157) + i32.xor $push51=, $pop49, $pop50 + i32.store8 p+14($pop158), $pop51 + i32.const $push156=, 0 + i32.const $push113=, 8 + i32.add $push114=, $3, $pop113 + i32.call $push52=, foo@FUNCTION, $pop114 + i32.const $push155=, 0 + i32.load8_u $push53=, p+15($pop155) + i32.xor $push54=, $pop52, $pop53 + i32.store8 p+15($pop156), $pop54 + i32.const $push154=, 0 + i32.const $push115=, 8 + i32.add $push116=, $3, $pop115 + i32.call $push55=, foo@FUNCTION, $pop116 + i32.const $push153=, 0 + i32.load8_u $push56=, p+16($pop153) + i32.xor $push57=, $pop55, $pop56 + i32.store8 p+16($pop154), $pop57 + i32.const $push152=, 0 + i32.const $push117=, 8 + i32.add $push118=, $3, $pop117 + i32.call $push58=, foo@FUNCTION, $pop118 + i32.const $push151=, 0 + i32.load8_u $push59=, p+17($pop151) + i32.xor $push60=, $pop58, $pop59 + i32.store8 p+17($pop152), $pop60 + i32.const $push150=, 0 + i32.const $push119=, 8 + i32.add $push120=, $3, $pop119 + i32.call $push61=, foo@FUNCTION, $pop120 + i32.const $push149=, 0 + i32.load8_u $push62=, p+18($pop149) + i32.xor $push63=, $pop61, $pop62 + i32.store8 p+18($pop150), $pop63 + i32.const $push148=, 0 + i32.const $push121=, 8 + i32.add $push122=, $3, $pop121 + i32.call $push64=, foo@FUNCTION, $pop122 + i32.const $push147=, 0 + i32.load8_u $push65=, p+19($pop147) + i32.xor $push66=, $pop64, $pop65 + i32.store8 p+19($pop148), $pop66 + i32.const $push146=, 0 + i32.const $push123=, 8 + i32.add $push124=, $3, $pop123 + i32.call $push67=, foo@FUNCTION, $pop124 + i32.const $push145=, 0 + i32.load8_u $push68=, p+20($pop145) + i32.xor $push69=, $pop67, $pop68 + i32.store8 p+20($pop146), $pop69 + i32.const $push144=, 0 + i32.const $push125=, 8 + i32.add $push126=, $3, $pop125 + i32.call $push70=, foo@FUNCTION, $pop126 + i32.const $push143=, 0 + i32.load8_u $push71=, p+21($pop143) + i32.xor $push72=, $pop70, $pop71 + i32.store8 p+21($pop144), $pop72 + i32.const $push142=, 0 + i32.const $push127=, 8 + i32.add $push128=, $3, $pop127 + i32.call $push73=, foo@FUNCTION, $pop128 + i32.const $push141=, 0 + i32.load8_u $push74=, p+22($pop141) + i32.xor $push75=, $pop73, $pop74 + i32.store8 p+22($pop142), $pop75 + i32.const $push82=, 0 + i32.const $push80=, 2512 + i32.add $push81=, $3, $pop80 + i32.store __stack_pointer($pop82), $pop81 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.foo,"ax",@progbits + .type foo,@function # -- Begin function foo +foo: # @foo + .param i32 + .result i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.load $push0=, 4($0) + i32.const $push1=, -1 + i32.add $push37=, $pop0, $pop1 + tee_local $push36=, $4=, $pop37 + i32.store 4($0), $pop36 + block + block + i32.eqz $push63=, $4 + br_if 0, $pop63 # 0: down to label3 +# BB#1: # %entry.if.end_crit_edge + i32.load $5=, 0($0) + br 1 # 1: down to label2 +.LBB2_2: # %if.then + end_block # label3: + i32.const $push40=, 8 + i32.add $push39=, $0, $pop40 + tee_local $push38=, $5=, $pop39 + i32.store 0($0), $pop38 + i32.load $4=, 8($0) + i32.const $3=, 0 +.LBB2_3: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label4: + i32.add $push56=, $0, $3 + tee_local $push55=, $2=, $pop56 + i32.const $push54=, 8 + i32.add $push14=, $pop55, $pop54 + i32.const $push53=, 0 + i32.const $push52=, 12 + i32.add $push2=, $2, $pop52 + i32.load $push51=, 0($pop2) + tee_local $push50=, $1=, $pop51 + i32.const $push49=, 1 + i32.and $push3=, $pop50, $pop49 + i32.sub $push4=, $pop53, $pop3 + i32.const $push48=, -1727483681 + i32.and $push5=, $pop4, $pop48 + i32.const $push47=, 1596 + i32.add $push6=, $2, $pop47 + i32.load $push7=, 0($pop6) + i32.xor $push8=, $pop5, $pop7 + i32.xor $push9=, $1, $4 + i32.const $push46=, 2147483646 + i32.and $push10=, $pop9, $pop46 + i32.xor $push11=, $pop10, $4 + i32.const $push45=, 1 + i32.shr_u $push12=, $pop11, $pop45 + i32.xor $push13=, $pop8, $pop12 + i32.store 0($pop14), $pop13 + copy_local $4=, $1 + i32.const $push44=, 4 + i32.add $push43=, $3, $pop44 + tee_local $push42=, $3=, $pop43 + i32.const $push41=, 908 + i32.ne $push15=, $pop42, $pop41 + br_if 0, $pop15 # 0: up to label4 +.LBB2_4: # %if.end + end_loop + end_block # label2: + i32.const $push16=, 4 + i32.add $push17=, $5, $pop16 + i32.store 0($0), $pop17 + i32.load $push62=, 0($5) + tee_local $push61=, $4=, $pop62 + i32.const $push18=, 11 + i32.shr_u $push19=, $pop61, $pop18 + i32.xor $push60=, $pop19, $4 + tee_local $push59=, $4=, $pop60 + i32.const $push20=, 7 + i32.shl $push21=, $pop59, $pop20 + i32.const $push22=, -1658038656 + i32.and $push23=, $pop21, $pop22 + i32.xor $push58=, $pop23, $4 + tee_local $push57=, $4=, $pop58 + i32.const $push24=, 15 + i32.shl $push25=, $pop57, $pop24 + i32.const $push26=, 130023424 + i32.and $push27=, $pop25, $pop26 + i32.xor $push28=, $pop27, $4 + i32.const $push29=, 18 + i32.shr_u $push30=, $pop28, $pop29 + i32.xor $push31=, $pop30, $4 + i32.const $push32=, 1 + i32.shr_u $push33=, $pop31, $pop32 + i32.const $push34=, 255 + i32.and $push35=, $pop33, $pop34 + # fallthrough-return: $pop35 + .endfunc +.Lfunc_end2: + .size foo, .Lfunc_end2-foo + # -- End function + .type p,@object # @p + .section .data.p,"aw",@progbits + .p2align 4 +p: + .ascii "\300I\0272b\036.\325L\031(I\221\344r\203\221=\223\203\263a8" + .size p, 23 + + .type q,@object # @q + .section .data.q,"aw",@progbits + .p2align 4 +q: + .ascii ">AUTOIT UNICODE SCRIPT<" + .size q, 23 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype memcmp, i32, i32, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr37882.c.s b/src/binaryen/test/torture-s/pr37882.c.s new file mode 100644 index 0000000000..46aa7cb5fb --- /dev/null +++ b/src/binaryen/test/torture-s/pr37882.c.s @@ -0,0 +1,33 @@ + .text + .file "pr37882.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push7=, 0 + i32.load8_u $push1=, s($pop7) + i32.const $push2=, 248 + i32.and $push3=, $pop1, $pop2 + i32.const $push4=, 4 + i32.or $push5=, $pop3, $pop4 + i32.store8 s($pop0), $pop5 + i32.const $push6=, 0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s +s: + .skip 1 + .size s, 1 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr37924.c.s b/src/binaryen/test/torture-s/pr37924.c.s new file mode 100644 index 0000000000..b388254485 --- /dev/null +++ b/src/binaryen/test/torture-s/pr37924.c.s @@ -0,0 +1,70 @@ + .text + .file "pr37924.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_s $push1=, a($pop0) + i32.const $push2=, -1 + i32.xor $push3=, $pop1, $pop2 + i32.const $push4=, 9 + i32.shr_u $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .result i32 +# BB#0: # %entry + i32.const $push0=, 8388607 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size test2, .Lfunc_end1-test2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end21 + i32.const $push1=, 0 + i32.const $push0=, 255 + i32.store8 b($pop1), $pop0 + i32.const $push4=, 0 + i32.const $push3=, 255 + i32.store8 a($pop4), $pop3 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a +a: + .int8 0 # 0x0 + .size a, 1 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b +b: + .int8 0 # 0x0 + .size b, 1 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr37931.c.s b/src/binaryen/test/torture-s/pr37931.c.s new file mode 100644 index 0000000000..7989abac9e --- /dev/null +++ b/src/binaryen/test/torture-s/pr37931.c.s @@ -0,0 +1,33 @@ + .text + .file "pr37931.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.and $push0=, $1, $0 + i32.const $push1=, 1 + i32.or $push2=, $pop0, $pop1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end12 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr38048-1.c.s b/src/binaryen/test/torture-s/pr38048-1.c.s new file mode 100644 index 0000000000..4373bec0ab --- /dev/null +++ b/src/binaryen/test/torture-s/pr38048-1.c.s @@ -0,0 +1,30 @@ + .text + .file "pr38048-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr38048-2.c.s b/src/binaryen/test/torture-s/pr38048-2.c.s new file mode 100644 index 0000000000..03845759c4 --- /dev/null +++ b/src/binaryen/test/torture-s/pr38048-2.c.s @@ -0,0 +1,30 @@ + .text + .file "pr38048-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 15 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr38051.c.s b/src/binaryen/test/torture-s/pr38051.c.s new file mode 100644 index 0000000000..61d0a78604 --- /dev/null +++ b/src/binaryen/test/torture-s/pr38051.c.s @@ -0,0 +1,1014 @@ + .text + .file "pr38051.c" + .section .text.mymemcmp,"ax",@progbits + .hidden mymemcmp # -- Begin function mymemcmp + .globl mymemcmp + .type mymemcmp,@function +mymemcmp: # @mymemcmp + .param i32, i32, i32 + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push105=, 0 + i32.load $push104=, __stack_pointer($pop105) + i32.const $push106=, 16 + i32.sub $6=, $pop104, $pop106 + i32.const $push26=, 2 + i32.shr_u $2=, $2, $pop26 + block + block + block + block + block + block + block + block + block + block + block + block + block + block + i32.const $push147=, 3 + i32.and $push27=, $0, $pop147 + i32.eqz $push223=, $pop27 + br_if 0, $pop223 # 0: down to label13 +# BB#1: # %if.else + i32.const $push28=, -4 + i32.and $4=, $0, $pop28 + i32.const $push31=, 32 + i32.const $push153=, 3 + i32.shl $push29=, $0, $pop153 + i32.const $push30=, 24 + i32.and $push152=, $pop29, $pop30 + tee_local $push151=, $0=, $pop152 + i32.sub $3=, $pop31, $pop151 + i32.const $push150=, 3 + i32.and $push149=, $2, $pop150 + tee_local $push148=, $5=, $pop149 + i32.eqz $push224=, $pop148 + br_if 1, $pop224 # 1: down to label12 +# BB#2: # %if.else + i32.const $push32=, 1 + i32.eq $push33=, $5, $pop32 + br_if 2, $pop33 # 2: down to label11 +# BB#3: # %if.else + i32.const $push34=, 3 + i32.ne $push35=, $5, $pop34 + br_if 3, $pop35 # 3: down to label10 +# BB#4: # %sw.bb6.i + i32.const $push40=, 1 + i32.add $2=, $2, $pop40 + i32.const $push41=, -4 + i32.add $9=, $1, $pop41 + i32.load $8=, 0($4) + br 8 # 8: down to label5 +.LBB0_5: # %if.then + end_block # label13: + i32.const $push156=, 3 + i32.and $push155=, $2, $pop156 + tee_local $push154=, $4=, $pop155 + i32.eqz $push225=, $pop154 + br_if 10, $pop225 # 10: down to label2 +# BB#6: # %if.then + i32.const $push70=, 1 + i32.eq $push71=, $4, $pop70 + br_if 3, $pop71 # 3: down to label9 +# BB#7: # %if.then + i32.const $push72=, 3 + i32.ne $push73=, $4, $pop72 + br_if 4, $pop73 # 4: down to label8 +# BB#8: # %sw.bb3.i + i32.const $push76=, 1 + i32.add $2=, $2, $pop76 + i32.const $push77=, -4 + i32.add $4=, $1, $pop77 + i32.const $push157=, -4 + i32.add $3=, $0, $pop157 + br 11 # 11: down to label1 +.LBB0_9: # %sw.bb12.i18 + end_block # label12: + i32.const $push39=, 4 + i32.add $7=, $4, $pop39 + i32.load $5=, 0($4) + br 5 # 5: down to label6 +.LBB0_10: # %sw.bb17.i + end_block # label11: + i32.const $push36=, -1 + i32.add $2=, $2, $pop36 + i32.const $push38=, 8 + i32.add $7=, $4, $pop38 + i32.load $8=, 0($1) + i32.load $5=, 4($4) + i32.load $4=, 0($4) + i32.const $push37=, 4 + i32.add $push14=, $1, $pop37 + copy_local $1=, $pop14 + br 3 # 3: down to label7 +.LBB0_11: # %sw.bb.i16 + end_block # label10: + i32.const $push42=, 2 + i32.add $2=, $2, $pop42 + i32.const $push43=, -8 + i32.add $9=, $1, $pop43 + i32.const $push44=, -4 + i32.add $10=, $4, $pop44 + i32.const $push45=, 4 + i32.add $7=, $4, $pop45 + i32.load $5=, 0($4) + br 5 # 5: down to label4 +.LBB0_12: # %sw.bb12.i + end_block # label9: + i32.const $push74=, -1 + i32.add $2=, $2, $pop74 + i32.load $5=, 0($1) + i32.load $7=, 0($0) + i32.const $push75=, 4 + i32.add $push0=, $0, $pop75 + copy_local $0=, $pop0 + i32.const $push158=, 4 + i32.add $push1=, $1, $pop158 + copy_local $1=, $pop1 + i32.ne $push85=, $7, $5 + br_if 5, $pop85 # 5: down to label3 +# BB#13: + i32.const $11=, 29 + br 8 # 8: down to label0 +.LBB0_14: # %sw.bb.i + end_block # label8: + i32.const $push78=, 2 + i32.add $2=, $2, $pop78 + i32.const $push79=, -8 + i32.add $4=, $1, $pop79 + i32.const $push169=, -8 + i32.add $3=, $0, $pop169 +# BB#15: + i32.const $11=, 39 + br 7 # 7: down to label0 +.LBB0_16: + end_block # label7: + i32.const $11=, 0 + br 6 # 6: down to label0 +.LBB0_17: + end_block # label6: + i32.const $11=, 4 + br 5 # 5: down to label0 +.LBB0_18: + end_block # label5: + i32.const $11=, 9 + br 4 # 4: down to label0 +.LBB0_19: + end_block # label4: + i32.const $11=, 14 + br 3 # 3: down to label0 +.LBB0_20: + end_block # label3: + i32.const $11=, 26 + br 2 # 2: down to label0 +.LBB0_21: + end_block # label2: + i32.const $11=, 29 + br 1 # 1: down to label0 +.LBB0_22: + end_block # label1: + i32.const $11=, 34 +.LBB0_23: # =>This Inner Loop Header: Depth=1 + end_block # label0: + loop i32 # label14: + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + br_table $11, 23, 31, 32, 33, 24, 34, 35, 36, 25, 26, 37, 38, 39, 27, 28, 40, 41, 42, 29, 30, 43, 44, 45, 46, 47, 6, 7, 8, 9, 0, 10, 11, 12, 1, 2, 13, 14, 15, 3, 4, 16, 17, 18, 5, 19, 20, 21, 22, 22 # 23: down to label63 + # 31: down to label55 + # 32: down to label54 + # 33: down to label53 + # 24: down to label62 + # 34: down to label52 + # 35: down to label51 + # 36: down to label50 + # 25: down to label61 + # 26: down to label60 + # 37: down to label49 + # 38: down to label48 + # 39: down to label47 + # 27: down to label59 + # 28: down to label58 + # 40: down to label46 + # 41: down to label45 + # 42: down to label44 + # 29: down to label57 + # 30: down to label56 + # 43: down to label43 + # 44: down to label42 + # 45: down to label41 + # 46: down to label40 + # 47: down to label39 + # 6: down to label80 + # 7: down to label79 + # 8: down to label78 + # 9: down to label77 + # 0: down to label86 + # 10: down to label76 + # 11: down to label75 + # 12: down to label74 + # 1: down to label85 + # 2: down to label84 + # 13: down to label73 + # 14: down to label72 + # 15: down to label71 + # 3: down to label83 + # 4: down to label82 + # 16: down to label70 + # 17: down to label69 + # 18: down to label68 + # 5: down to label81 + # 19: down to label67 + # 20: down to label66 + # 21: down to label65 + # 22: down to label64 +.LBB0_24: # %do3.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label86: + i32.load $push162=, 0($0) + tee_local $push161=, $4=, $pop162 + i32.load $push160=, 0($1) + tee_local $push159=, $3=, $pop160 + i32.ne $push88=, $pop161, $pop159 + br_if 63, $pop88 # 63: down to label22 +# BB#25: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 33 + br 71 # 71: up to label14 +.LBB0_26: # in Loop: Header=BB0_23 Depth=1 + end_block # label85: + copy_local $3=, $0 + copy_local $4=, $1 + i32.const $push87=, 4 + i32.add $push4=, $0, $pop87 + copy_local $0=, $pop4 + i32.const $push163=, 4 + i32.add $push5=, $1, $pop163 + copy_local $1=, $pop5 +# BB#27: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 34 + br 70 # 70: up to label14 +.LBB0_28: # %do2.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label84: + i32.load $push167=, 0($0) + tee_local $push166=, $0=, $pop167 + i32.load $push165=, 0($1) + tee_local $push164=, $1=, $pop165 + i32.ne $push90=, $pop166, $pop164 + br_if 63, $pop90 # 63: down to label20 +# BB#29: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 38 + br 69 # 69: up to label14 +.LBB0_30: # %if.end31.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label83: + i32.const $push92=, 8 + i32.add $0=, $3, $pop92 + i32.const $push168=, 8 + i32.add $1=, $4, $pop168 + br 64 # 64: down to label18 +.LBB0_31: # %do1.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label82: + i32.load $push173=, 0($0) + tee_local $push172=, $0=, $pop173 + i32.load $push171=, 0($1) + tee_local $push170=, $1=, $pop171 + i32.ne $push80=, $pop172, $pop170 + br_if 64, $pop80 # 64: down to label17 +# BB#32: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 43 + br 67 # 67: up to label14 +.LBB0_33: # %if.end37.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label81: + i32.load $5=, 12($4) + i32.load $7=, 12($3) + i32.const $push82=, -4 + i32.add $push175=, $2, $pop82 + tee_local $push174=, $2=, $pop175 + i32.eqz $push226=, $pop174 + br_if 56, $pop226 # 56: down to label24 +# BB#34: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 25 + br 66 # 66: up to label14 +.LBB0_35: # in Loop: Header=BB0_23 Depth=1 + end_block # label80: + i32.const $push83=, 16 + i32.add $1=, $4, $pop83 + i32.const $push176=, 16 + i32.add $0=, $3, $pop176 + i32.eq $push84=, $7, $5 + br_if 41, $pop84 # 41: down to label38 +# BB#36: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 26 + br 65 # 65: up to label14 +.LBB0_37: # %if.then.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label79: + i32.store 8($6), $5 + i32.store 12($6), $7 + i32.const $push111=, 8 + i32.add $push112=, $6, $pop111 + copy_local $1=, $pop112 + i32.const $push113=, 12 + i32.add $push114=, $6, $pop113 + copy_local $6=, $pop114 +# BB#38: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 27 + br 64 # 64: up to label14 +.LBB0_39: # %do.body.i.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label78: + i32.load8_u $0=, 0($1) + i32.load8_u $2=, 0($6) + i32.const $push178=, 1 + i32.add $push3=, $1, $pop178 + copy_local $1=, $pop3 + i32.const $push177=, 1 + i32.add $push2=, $6, $pop177 + copy_local $6=, $pop2 + i32.eq $push86=, $2, $0 + br_if 54, $pop86 # 54: down to label23 +# BB#40: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 28 + br 63 # 63: up to label14 +.LBB0_41: # %mymemcmp1.exit.i + end_block # label77: + i32.sub $push103=, $2, $0 + return $pop103 +.LBB0_42: # %if.then23.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label76: + i32.store 8($6), $3 + i32.store 12($6), $4 + i32.const $push123=, 8 + i32.add $push124=, $6, $pop123 + copy_local $1=, $pop124 + i32.const $push125=, 12 + i32.add $push126=, $6, $pop125 + copy_local $6=, $pop126 +# BB#43: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 31 + br 61 # 61: up to label14 +.LBB0_44: # %do.body.i140.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label75: + i32.load8_u $0=, 0($1) + i32.load8_u $2=, 0($6) + i32.const $push180=, 1 + i32.add $push7=, $1, $pop180 + copy_local $1=, $pop7 + i32.const $push179=, 1 + i32.add $push6=, $6, $pop179 + copy_local $6=, $pop6 + i32.eq $push89=, $2, $0 + br_if 53, $pop89 # 53: down to label21 +# BB#45: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 32 + br 60 # 60: up to label14 +.LBB0_46: # %mymemcmp1.exit144.i + end_block # label74: + i32.sub $push102=, $2, $0 + return $pop102 +.LBB0_47: # %if.then29.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label73: + i32.store 8($6), $1 + i32.store 12($6), $0 + i32.const $push119=, 8 + i32.add $push120=, $6, $pop119 + copy_local $1=, $pop120 + i32.const $push121=, 12 + i32.add $push122=, $6, $pop121 + copy_local $6=, $pop122 +# BB#48: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 36 + br 58 # 58: up to label14 +.LBB0_49: # %do.body.i128.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label72: + i32.load8_u $0=, 0($1) + i32.load8_u $2=, 0($6) + i32.const $push182=, 1 + i32.add $push9=, $1, $pop182 + copy_local $1=, $pop9 + i32.const $push181=, 1 + i32.add $push8=, $6, $pop181 + copy_local $6=, $pop8 + i32.eq $push91=, $2, $0 + br_if 52, $pop91 # 52: down to label19 +# BB#50: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 37 + br 57 # 57: up to label14 +.LBB0_51: # %mymemcmp1.exit132.i + end_block # label71: + i32.sub $push101=, $2, $0 + return $pop101 +.LBB0_52: # %if.then35.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label70: + i32.store 8($6), $1 + i32.store 12($6), $0 + i32.const $push115=, 8 + i32.add $push116=, $6, $pop115 + copy_local $1=, $pop116 + i32.const $push117=, 12 + i32.add $push118=, $6, $pop117 + copy_local $6=, $pop118 +# BB#53: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 41 + br 55 # 55: up to label14 +.LBB0_54: # %do.body.i116.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label69: + i32.load8_u $0=, 0($1) + i32.load8_u $2=, 0($6) + i32.const $push184=, 1 + i32.add $push11=, $1, $pop184 + copy_local $1=, $pop11 + i32.const $push183=, 1 + i32.add $push10=, $6, $pop183 + copy_local $6=, $pop10 + i32.eq $push81=, $2, $0 + br_if 52, $pop81 # 52: down to label16 +# BB#55: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 42 + br 54 # 54: up to label14 +.LBB0_56: # %mymemcmp1.exit120.i + end_block # label68: + i32.sub $push100=, $2, $0 + return $pop100 +.LBB0_57: # %do0.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label67: + i32.const $1=, 0 + i32.eq $push93=, $7, $5 + br_if 41, $pop93 # 41: down to label25 +# BB#58: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 45 + br 52 # 52: up to label14 +.LBB0_59: # %if.then43.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label66: + i32.store 8($6), $5 + i32.store 12($6), $7 + i32.const $push107=, 8 + i32.add $push108=, $6, $pop107 + copy_local $1=, $pop108 + i32.const $push109=, 12 + i32.add $push110=, $6, $pop109 + copy_local $6=, $pop110 +# BB#60: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 46 + br 51 # 51: up to label14 +.LBB0_61: # %do.body.i104.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label65: + i32.load8_u $0=, 0($1) + i32.load8_u $2=, 0($6) + i32.const $push186=, 1 + i32.add $push13=, $1, $pop186 + copy_local $1=, $pop13 + i32.const $push185=, 1 + i32.add $push12=, $6, $pop185 + copy_local $6=, $pop12 + i32.eq $push94=, $2, $0 + br_if 49, $pop94 # 49: down to label15 +# BB#62: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 47 + br 50 # 50: up to label14 +.LBB0_63: # %mymemcmp1.exit108.i + end_block # label64: + i32.sub $push99=, $2, $0 + return $pop99 +.LBB0_64: # %do.body.i23 + # in Loop: Header=BB0_23 Depth=1 + end_block # label63: + i32.shl $push53=, $5, $3 + i32.shr_u $push52=, $4, $0 + i32.or $push188=, $pop53, $pop52 + tee_local $push187=, $4=, $pop188 + i32.ne $push54=, $pop187, $8 + br_if 25, $pop54 # 25: down to label37 +# BB#65: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 4 + br 48 # 48: up to label14 +.LBB0_66: # %do3.i42 + # in Loop: Header=BB0_23 Depth=1 + end_block # label62: + i32.load $push194=, 0($7) + tee_local $push193=, $8=, $pop194 + i32.shl $push57=, $pop193, $3 + i32.shr_u $push56=, $5, $0 + i32.or $push192=, $pop57, $pop56 + tee_local $push191=, $4=, $pop192 + i32.load $push190=, 0($1) + tee_local $push189=, $5=, $pop190 + i32.ne $push58=, $pop191, $pop189 + br_if 27, $pop58 # 27: down to label34 +# BB#67: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 8 + br 47 # 47: up to label14 +.LBB0_68: # in Loop: Header=BB0_23 Depth=1 + end_block # label61: + copy_local $9=, $1 + copy_local $4=, $7 + i32.const $push59=, 4 + i32.add $push17=, $1, $pop59 + copy_local $1=, $pop17 +# BB#69: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 9 + br 46 # 46: up to label14 +.LBB0_70: # %do2.i50 + # in Loop: Header=BB0_23 Depth=1 + end_block # label60: + i32.load $push200=, 4($4) + tee_local $push199=, $5=, $pop200 + i32.shl $push62=, $pop199, $3 + i32.shr_u $push61=, $8, $0 + i32.or $push198=, $pop62, $pop61 + tee_local $push197=, $7=, $pop198 + i32.load $push196=, 0($1) + tee_local $push195=, $1=, $pop196 + i32.ne $push63=, $pop197, $pop195 + br_if 27, $pop63 # 27: down to label32 +# BB#71: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 13 + br 45 # 45: up to label14 +.LBB0_72: # %if.end45.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label59: + i32.const $push65=, 8 + i32.add $7=, $4, $pop65 + i32.const $push201=, 8 + i32.add $1=, $9, $pop201 + copy_local $10=, $4 +# BB#73: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 14 + br 44 # 44: up to label14 +.LBB0_74: # %do1.i56 + # in Loop: Header=BB0_23 Depth=1 + end_block # label58: + i32.load $push207=, 0($7) + tee_local $push206=, $4=, $pop207 + i32.shl $push47=, $pop206, $3 + i32.shr_u $push46=, $5, $0 + i32.or $push205=, $pop47, $pop46 + tee_local $push204=, $5=, $pop205 + i32.load $push203=, 0($1) + tee_local $push202=, $1=, $pop203 + i32.ne $push48=, $pop204, $pop202 + br_if 27, $pop48 # 27: down to label30 +# BB#75: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 18 + br 43 # 43: up to label14 +.LBB0_76: # %if.end54.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label57: + i32.load $8=, 12($9) + i32.load $5=, 12($10) + i32.const $push50=, -4 + i32.add $push209=, $2, $pop50 + tee_local $push208=, $2=, $pop209 + i32.eqz $push227=, $pop208 + br_if 28, $pop227 # 28: down to label28 +# BB#77: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 19 + br 42 # 42: up to label14 +.LBB0_78: # in Loop: Header=BB0_23 Depth=1 + end_block # label56: + i32.const $push51=, 16 + i32.add $1=, $9, $pop51 + i32.const $push210=, 16 + i32.add $7=, $10, $pop210 + br 19 # 19: down to label36 +.LBB0_79: # %if.then.i24 + # in Loop: Header=BB0_23 Depth=1 + end_block # label55: + i32.store 8($6), $8 + i32.store 12($6), $4 + i32.const $push131=, 8 + i32.add $push132=, $6, $pop131 + copy_local $1=, $pop132 + i32.const $push133=, 12 + i32.add $push134=, $6, $pop133 + copy_local $6=, $pop134 +# BB#80: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 2 + br 40 # 40: up to label14 +.LBB0_81: # %do.body.i.i30 + # in Loop: Header=BB0_23 Depth=1 + end_block # label54: + i32.load8_u $0=, 0($1) + i32.load8_u $2=, 0($6) + i32.const $push212=, 1 + i32.add $push16=, $1, $pop212 + copy_local $1=, $pop16 + i32.const $push211=, 1 + i32.add $push15=, $6, $pop211 + copy_local $6=, $pop15 + i32.eq $push55=, $2, $0 + br_if 18, $pop55 # 18: down to label35 +# BB#82: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 3 + br 39 # 39: up to label14 +.LBB0_83: # %mymemcmp1.exit.i34 + end_block # label53: + i32.sub $push98=, $2, $0 + return $pop98 +.LBB0_84: # %if.then34.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label52: + i32.store 8($6), $5 + i32.store 12($6), $4 + i32.const $push143=, 8 + i32.add $push144=, $6, $pop143 + copy_local $1=, $pop144 + i32.const $push145=, 12 + i32.add $push146=, $6, $pop145 + copy_local $6=, $pop146 +# BB#85: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 6 + br 37 # 37: up to label14 +.LBB0_86: # %do.body.i194.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label51: + i32.load8_u $0=, 0($1) + i32.load8_u $2=, 0($6) + i32.const $push214=, 1 + i32.add $push19=, $1, $pop214 + copy_local $1=, $pop19 + i32.const $push213=, 1 + i32.add $push18=, $6, $pop213 + copy_local $6=, $pop18 + i32.eq $push60=, $2, $0 + br_if 17, $pop60 # 17: down to label33 +# BB#87: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 7 + br 36 # 36: up to label14 +.LBB0_88: # %mymemcmp1.exit198.i + end_block # label50: + i32.sub $push97=, $2, $0 + return $pop97 +.LBB0_89: # %if.then43.i51 + # in Loop: Header=BB0_23 Depth=1 + end_block # label49: + i32.store 8($6), $1 + i32.store 12($6), $7 + i32.const $push139=, 8 + i32.add $push140=, $6, $pop139 + copy_local $1=, $pop140 + i32.const $push141=, 12 + i32.add $push142=, $6, $pop141 + copy_local $6=, $pop142 +# BB#90: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 11 + br 34 # 34: up to label14 +.LBB0_91: # %do.body.i182.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label48: + i32.load8_u $0=, 0($1) + i32.load8_u $2=, 0($6) + i32.const $push216=, 1 + i32.add $push21=, $1, $pop216 + copy_local $1=, $pop21 + i32.const $push215=, 1 + i32.add $push20=, $6, $pop215 + copy_local $6=, $pop20 + i32.eq $push64=, $2, $0 + br_if 16, $pop64 # 16: down to label31 +# BB#92: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 12 + br 33 # 33: up to label14 +.LBB0_93: # %mymemcmp1.exit186.i + end_block # label47: + i32.sub $push96=, $2, $0 + return $pop96 +.LBB0_94: # %if.then52.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label46: + i32.store 8($6), $1 + i32.store 12($6), $5 + i32.const $push135=, 8 + i32.add $push136=, $6, $pop135 + copy_local $1=, $pop136 + i32.const $push137=, 12 + i32.add $push138=, $6, $pop137 + copy_local $6=, $pop138 +# BB#95: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 16 + br 31 # 31: up to label14 +.LBB0_96: # %do.body.i170.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label45: + i32.load8_u $0=, 0($1) + i32.load8_u $2=, 0($6) + i32.const $push218=, 1 + i32.add $push23=, $1, $pop218 + copy_local $1=, $pop23 + i32.const $push217=, 1 + i32.add $push22=, $6, $pop217 + copy_local $6=, $pop22 + i32.eq $push49=, $2, $0 + br_if 15, $pop49 # 15: down to label29 +# BB#97: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 17 + br 30 # 30: up to label14 +.LBB0_98: # %mymemcmp1.exit174.i + end_block # label44: + i32.sub $push95=, $2, $0 + return $pop95 +.LBB0_99: # %do0.i57 + # in Loop: Header=BB0_23 Depth=1 + end_block # label43: + i32.const $1=, 0 + i32.shl $push67=, $5, $3 + i32.shr_u $push66=, $4, $0 + i32.or $push220=, $pop67, $pop66 + tee_local $push219=, $0=, $pop220 + i32.eq $push68=, $pop219, $8 + br_if 15, $pop68 # 15: down to label27 +# BB#100: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 21 + br 28 # 28: up to label14 +.LBB0_101: # %if.then63.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label42: + i32.store 8($6), $8 + i32.store 12($6), $0 + i32.const $push127=, 8 + i32.add $push128=, $6, $pop127 + copy_local $1=, $pop128 + i32.const $push129=, 12 + i32.add $push130=, $6, $pop129 + copy_local $6=, $pop130 +# BB#102: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 22 + br 27 # 27: up to label14 +.LBB0_103: # %do.body.i158.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label41: + i32.load8_u $0=, 0($1) + i32.load8_u $2=, 0($6) + i32.const $push222=, 1 + i32.add $push25=, $1, $pop222 + copy_local $1=, $pop25 + i32.const $push221=, 1 + i32.add $push24=, $6, $pop221 + copy_local $6=, $pop24 + i32.eq $push69=, $2, $0 + br_if 14, $pop69 # 14: down to label26 +# BB#104: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 23 + br 26 # 26: up to label14 +.LBB0_105: # %mymemcmp1.exit162.i + # in Loop: Header=BB0_23 Depth=1 + end_block # label40: + i32.sub $1=, $2, $0 +# BB#106: # in Loop: Header=BB0_23 Depth=1 + i32.const $11=, 24 + br 25 # 25: up to label14 +.LBB0_107: # %cleanup + end_block # label39: + return $1 +.LBB0_108: # in Loop: Header=BB0_23 Depth=1 + end_block # label38: + i32.const $11=, 29 + br 23 # 23: up to label14 +.LBB0_109: # in Loop: Header=BB0_23 Depth=1 + end_block # label37: + i32.const $11=, 1 + br 22 # 22: up to label14 +.LBB0_110: # in Loop: Header=BB0_23 Depth=1 + end_block # label36: + i32.const $11=, 0 + br 21 # 21: up to label14 +.LBB0_111: # in Loop: Header=BB0_23 Depth=1 + end_block # label35: + i32.const $11=, 2 + br 20 # 20: up to label14 +.LBB0_112: # in Loop: Header=BB0_23 Depth=1 + end_block # label34: + i32.const $11=, 5 + br 19 # 19: up to label14 +.LBB0_113: # in Loop: Header=BB0_23 Depth=1 + end_block # label33: + i32.const $11=, 6 + br 18 # 18: up to label14 +.LBB0_114: # in Loop: Header=BB0_23 Depth=1 + end_block # label32: + i32.const $11=, 10 + br 17 # 17: up to label14 +.LBB0_115: # in Loop: Header=BB0_23 Depth=1 + end_block # label31: + i32.const $11=, 11 + br 16 # 16: up to label14 +.LBB0_116: # in Loop: Header=BB0_23 Depth=1 + end_block # label30: + i32.const $11=, 15 + br 15 # 15: up to label14 +.LBB0_117: # in Loop: Header=BB0_23 Depth=1 + end_block # label29: + i32.const $11=, 16 + br 14 # 14: up to label14 +.LBB0_118: # in Loop: Header=BB0_23 Depth=1 + end_block # label28: + i32.const $11=, 20 + br 13 # 13: up to label14 +.LBB0_119: # in Loop: Header=BB0_23 Depth=1 + end_block # label27: + i32.const $11=, 24 + br 12 # 12: up to label14 +.LBB0_120: # in Loop: Header=BB0_23 Depth=1 + end_block # label26: + i32.const $11=, 22 + br 11 # 11: up to label14 +.LBB0_121: # in Loop: Header=BB0_23 Depth=1 + end_block # label25: + i32.const $11=, 24 + br 10 # 10: up to label14 +.LBB0_122: # in Loop: Header=BB0_23 Depth=1 + end_block # label24: + i32.const $11=, 44 + br 9 # 9: up to label14 +.LBB0_123: # in Loop: Header=BB0_23 Depth=1 + end_block # label23: + i32.const $11=, 27 + br 8 # 8: up to label14 +.LBB0_124: # in Loop: Header=BB0_23 Depth=1 + end_block # label22: + i32.const $11=, 30 + br 7 # 7: up to label14 +.LBB0_125: # in Loop: Header=BB0_23 Depth=1 + end_block # label21: + i32.const $11=, 31 + br 6 # 6: up to label14 +.LBB0_126: # in Loop: Header=BB0_23 Depth=1 + end_block # label20: + i32.const $11=, 35 + br 5 # 5: up to label14 +.LBB0_127: # in Loop: Header=BB0_23 Depth=1 + end_block # label19: + i32.const $11=, 36 + br 4 # 4: up to label14 +.LBB0_128: # in Loop: Header=BB0_23 Depth=1 + end_block # label18: + i32.const $11=, 39 + br 3 # 3: up to label14 +.LBB0_129: # in Loop: Header=BB0_23 Depth=1 + end_block # label17: + i32.const $11=, 40 + br 2 # 2: up to label14 +.LBB0_130: # in Loop: Header=BB0_23 Depth=1 + end_block # label16: + i32.const $11=, 41 + br 1 # 1: up to label14 +.LBB0_131: # in Loop: Header=BB0_23 Depth=1 + end_block # label15: + i32.const $11=, 46 + br 0 # 0: up to label14 +.LBB0_132: + end_loop + .endfunc +.Lfunc_end0: + .size mymemcmp, .Lfunc_end0-mymemcmp + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push17=, 0 + i32.const $push16=, 0 + i64.load $push0=, .L.str+7($pop16):p2align=0 + i64.store buf+32($pop17):p2align=0, $pop0 + i32.const $push15=, 0 + i32.const $push14=, 0 + i64.load $push1=, .L.str($pop14):p2align=0 + i64.store buf+25($pop15):p2align=0, $pop1 + i32.const $push13=, 0 + i32.const $push12=, 0 + i64.load $push2=, .L.str.1($pop12):p2align=0 + i64.store buf+168($pop13), $pop2 + i32.const $push11=, 0 + i32.const $push10=, 0 + i64.load $push3=, .L.str.1+7($pop10):p2align=0 + i64.store buf+175($pop11):p2align=0, $pop3 + block + i32.const $push6=, buf+25 + i32.const $push5=, buf+168 + i32.const $push4=, 33 + i32.call $push7=, mymemcmp@FUNCTION, $pop6, $pop5, $pop4 + i32.const $push8=, -51 + i32.ne $push9=, $pop7, $pop8 + br_if 0, $pop9 # 0: down to label87 +# BB#1: # %cleanup + i32.const $push18=, 0 + return $pop18 +.LBB1_2: # %if.then26 + end_block # label87: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden buf # @buf + .type buf,@object + .section .bss.buf,"aw",@nobits + .globl buf + .p2align 4 +buf: + .skip 256 + .size buf, 256 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "\0017\202\247UI\235\277\370D\266U\027\216\371" + .size .L.str, 16 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "\0017\202\247UI\320\363\267*m#qIj" + .size .L.str.1, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr38151.c.s b/src/binaryen/test/torture-s/pr38151.c.s new file mode 100644 index 0000000000..6c437f564e --- /dev/null +++ b/src/binaryen/test/torture-s/pr38151.c.s @@ -0,0 +1,136 @@ + .text + .file "pr38151.c" + .section .text.check2848va,"ax",@progbits + .hidden check2848va # -- Begin function check2848va + .globl check2848va + .type check2848va,@function +check2848va: # @check2848va + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push20=, 0 + i32.load $push19=, __stack_pointer($pop20) + i32.const $push21=, 16 + i32.sub $push26=, $pop19, $pop21 + tee_local $push25=, $3=, $pop26 + i32.store 12($pop25), $1 + i32.const $push0=, 15 + i32.add $push1=, $1, $pop0 + i32.const $push2=, -16 + i32.and $push24=, $pop1, $pop2 + tee_local $push23=, $1=, $pop24 + i32.const $push3=, 16 + i32.add $push4=, $pop23, $pop3 + i32.store 12($3), $pop4 + i32.load $2=, 8($1) + i32.load $3=, 4($1) + block + i32.const $push22=, 0 + i32.load $push6=, s2848($pop22) + i32.load $push5=, 0($1) + i32.eq $push7=, $pop6, $pop5 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %if.then + i32.const $push28=, 0 + i32.const $push27=, 0 + i32.load $push8=, fails($pop27) + i32.const $push9=, 1 + i32.add $push10=, $pop8, $pop9 + i32.store fails($pop28), $pop10 +.LBB0_2: # %if.end + end_block # label0: + block + i32.const $push29=, 0 + i32.load $push12=, s2848+4($pop29) + i32.ne $push13=, $pop12, $3 + br_if 0, $pop13 # 0: down to label1 +# BB#3: # %if.end + i32.const $push30=, 0 + i32.load $push11=, s2848+8($pop30) + i32.ne $push14=, $pop11, $2 + br_if 0, $pop14 # 0: down to label1 +# BB#4: # %if.end4 + return +.LBB0_5: # %if.then2 + end_block # label1: + i32.const $push15=, 0 + i32.const $push31=, 0 + i32.load $push16=, fails($pop31) + i32.const $push17=, 1 + i32.add $push18=, $pop16, $pop17 + i32.store fails($pop15), $pop18 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size check2848va, .Lfunc_end0-check2848va + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 32 + i32.sub $push19=, $pop4, $pop6 + tee_local $push18=, $0=, $pop19 + i32.store __stack_pointer($pop7), $pop18 + i32.const $push17=, 0 + i32.const $push0=, -218144346 + i32.store s2848+8($pop17), $pop0 + i32.const $push16=, 0 + i64.const $push1=, 3107062874477850347 + i64.store s2848($pop16), $pop1 + i64.const $push15=, 3107062874477850347 + i64.store 16($0), $pop15 + i32.const $push14=, 0 + i64.load $push2=, s2848+8($pop14) + i64.store 24($0), $pop2 + i32.const $push11=, 16 + i32.add $push12=, $0, $pop11 + i32.store 0($0), $pop12 + call check2848va@FUNCTION, $0, $0 + block + i32.const $push13=, 0 + i32.load $push3=, fails($pop13) + br_if 0, $pop3 # 0: down to label2 +# BB#1: # %if.end + i32.const $push10=, 0 + i32.const $push8=, 32 + i32.add $push9=, $0, $pop8 + i32.store __stack_pointer($pop10), $pop9 + i32.const $push20=, 0 + return $pop20 +.LBB1_2: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden s2848 # @s2848 + .type s2848,@object + .section .bss.s2848,"aw",@nobits + .globl s2848 + .p2align 4 +s2848: + .skip 16 + .size s2848, 16 + + .hidden fails # @fails + .type fails,@object + .section .bss.fails,"aw",@nobits + .globl fails + .p2align 2 +fails: + .int32 0 # 0x0 + .size fails, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr38212.c.s b/src/binaryen/test/torture-s/pr38212.c.s new file mode 100644 index 0000000000..2370a364e5 --- /dev/null +++ b/src/binaryen/test/torture-s/pr38212.c.s @@ -0,0 +1,70 @@ + .text + .file "pr38212.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shl $push1=, $1, $pop0 + i32.sub $push2=, $0, $pop1 + i32.const $push3=, 4 + i32.add $push8=, $pop2, $pop3 + tee_local $push7=, $1=, $pop8 + i32.load $2=, 0($pop7) + i32.const $push4=, 1 + i32.store 0($0), $pop4 + i32.load $push5=, 0($1) + i32.add $push6=, $2, $pop5 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push15=, $pop3, $pop5 + tee_local $push14=, $0=, $pop15 + i32.store __stack_pointer($pop6), $pop14 + i32.const $push13=, 0 + i32.store 12($0), $pop13 + block + i32.const $push10=, 12 + i32.add $push11=, $0, $pop10 + i32.const $push0=, 1 + i32.call $push1=, foo@FUNCTION, $pop11, $pop0 + i32.const $push12=, 1 + i32.ne $push2=, $pop1, $pop12 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push9=, 0 + i32.const $push7=, 16 + i32.add $push8=, $0, $pop7 + i32.store __stack_pointer($pop9), $pop8 + i32.const $push16=, 0 + return $pop16 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr38236.c.s b/src/binaryen/test/torture-s/pr38236.c.s new file mode 100644 index 0000000000..166bc8080b --- /dev/null +++ b/src/binaryen/test/torture-s/pr38236.c.s @@ -0,0 +1,62 @@ + .text + .file "pr38236.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push14=, $pop4, $pop6 + tee_local $push13=, $4=, $pop14 + i32.const $push7=, 12 + i32.add $push8=, $pop13, $pop7 + i32.const $push9=, 8 + i32.add $push10=, $4, $pop9 + i32.select $push0=, $pop8, $pop10, $3 + i32.const $push1=, 1 + i32.store 0($pop0), $pop1 + i32.const $push11=, 12 + i32.add $push12=, $4, $pop11 + i32.select $push2=, $pop12, $0, $2 + i32.load $push3=, 0($pop2) + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push5=, 0 + i32.const $push0=, 1 + i32.const $push4=, 1 + i32.call $push1=, foo@FUNCTION, $pop5, $0, $pop0, $pop4 + i32.const $push3=, 1 + i32.ne $push2=, $pop1, $pop3 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 0 + return $pop6 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr38422.c.s b/src/binaryen/test/torture-s/pr38422.c.s new file mode 100644 index 0000000000..e85ccaef82 --- /dev/null +++ b/src/binaryen/test/torture-s/pr38422.c.s @@ -0,0 +1,58 @@ + .text + .file "pr38422.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push10=, 0 + i32.load $push9=, s($pop10) + tee_local $push8=, $0=, $pop9 + i32.const $push3=, 1 + i32.shl $push4=, $pop8, $pop3 + i32.const $push5=, 1073741822 + i32.and $push6=, $pop4, $pop5 + i32.const $push1=, -1073741824 + i32.and $push2=, $0, $pop1 + i32.or $push7=, $pop6, $pop2 + i32.store s($pop0), $pop7 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + i32.const $push7=, 0 + i32.load $push1=, s($pop7) + i32.const $push2=, -1073741824 + i32.and $push3=, $pop1, $pop2 + i32.const $push4=, 48 + i32.or $push5=, $pop3, $pop4 + i32.store s($pop0), $pop5 + i32.const $push6=, 0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 2 +s: + .skip 4 + .size s, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr38533.c.s b/src/binaryen/test/torture-s/pr38533.c.s new file mode 100644 index 0000000000..646c4346f9 --- /dev/null +++ b/src/binaryen/test/torture-s/pr38533.c.s @@ -0,0 +1,1250 @@ + .text + .file "pr38533.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $302=, 0 + i32.const $0=, 0 + #APP + #NO_APP + i32.const $1=, 0 + #APP + #NO_APP + i32.const $2=, 0 + #APP + #NO_APP + i32.const $3=, 0 + #APP + #NO_APP + i32.const $4=, 0 + #APP + #NO_APP + i32.const $5=, 0 + #APP + #NO_APP + i32.const $6=, 0 + #APP + #NO_APP + i32.const $7=, 0 + #APP + #NO_APP + i32.const $8=, 0 + #APP + #NO_APP + i32.const $9=, 0 + #APP + #NO_APP + i32.const $10=, 0 + #APP + #NO_APP + i32.const $11=, 0 + #APP + #NO_APP + i32.const $12=, 0 + #APP + #NO_APP + i32.const $13=, 0 + #APP + #NO_APP + i32.const $14=, 0 + #APP + #NO_APP + i32.const $15=, 0 + #APP + #NO_APP + i32.const $16=, 0 + #APP + #NO_APP + i32.const $17=, 0 + #APP + #NO_APP + i32.const $18=, 0 + #APP + #NO_APP + i32.const $19=, 0 + #APP + #NO_APP + i32.const $20=, 0 + #APP + #NO_APP + i32.const $21=, 0 + #APP + #NO_APP + i32.const $22=, 0 + #APP + #NO_APP + i32.const $23=, 0 + #APP + #NO_APP + i32.const $24=, 0 + #APP + #NO_APP + i32.const $25=, 0 + #APP + #NO_APP + i32.const $26=, 0 + #APP + #NO_APP + i32.const $27=, 0 + #APP + #NO_APP + i32.const $28=, 0 + #APP + #NO_APP + i32.const $29=, 0 + #APP + #NO_APP + i32.const $30=, 0 + #APP + #NO_APP + i32.const $31=, 0 + #APP + #NO_APP + i32.const $32=, 0 + #APP + #NO_APP + i32.const $33=, 0 + #APP + #NO_APP + i32.const $34=, 0 + #APP + #NO_APP + i32.const $35=, 0 + #APP + #NO_APP + i32.const $36=, 0 + #APP + #NO_APP + i32.const $37=, 0 + #APP + #NO_APP + i32.const $38=, 0 + #APP + #NO_APP + i32.const $39=, 0 + #APP + #NO_APP + i32.const $40=, 0 + #APP + #NO_APP + i32.const $41=, 0 + #APP + #NO_APP + i32.const $42=, 0 + #APP + #NO_APP + i32.const $43=, 0 + #APP + #NO_APP + i32.const $44=, 0 + #APP + #NO_APP + i32.const $45=, 0 + #APP + #NO_APP + i32.const $46=, 0 + #APP + #NO_APP + i32.const $47=, 0 + #APP + #NO_APP + i32.const $48=, 0 + #APP + #NO_APP + i32.const $49=, 0 + #APP + #NO_APP + i32.const $50=, 0 + #APP + #NO_APP + i32.const $51=, 0 + #APP + #NO_APP + i32.const $52=, 0 + #APP + #NO_APP + i32.const $53=, 0 + #APP + #NO_APP + i32.const $54=, 0 + #APP + #NO_APP + i32.const $55=, 0 + #APP + #NO_APP + i32.const $56=, 0 + #APP + #NO_APP + i32.const $57=, 0 + #APP + #NO_APP + i32.const $58=, 0 + #APP + #NO_APP + i32.const $59=, 0 + #APP + #NO_APP + i32.const $60=, 0 + #APP + #NO_APP + i32.const $61=, 0 + #APP + #NO_APP + i32.const $62=, 0 + #APP + #NO_APP + i32.const $63=, 0 + #APP + #NO_APP + i32.const $64=, 0 + #APP + #NO_APP + i32.const $65=, 0 + #APP + #NO_APP + i32.const $66=, 0 + #APP + #NO_APP + i32.const $67=, 0 + #APP + #NO_APP + i32.const $68=, 0 + #APP + #NO_APP + i32.const $69=, 0 + #APP + #NO_APP + i32.const $70=, 0 + #APP + #NO_APP + i32.const $71=, 0 + #APP + #NO_APP + i32.const $72=, 0 + #APP + #NO_APP + i32.const $73=, 0 + #APP + #NO_APP + i32.const $74=, 0 + #APP + #NO_APP + i32.const $75=, 0 + #APP + #NO_APP + i32.const $76=, 0 + #APP + #NO_APP + i32.const $77=, 0 + #APP + #NO_APP + i32.const $78=, 0 + #APP + #NO_APP + i32.const $79=, 0 + #APP + #NO_APP + i32.const $80=, 0 + #APP + #NO_APP + i32.const $81=, 0 + #APP + #NO_APP + i32.const $82=, 0 + #APP + #NO_APP + i32.const $83=, 0 + #APP + #NO_APP + i32.const $84=, 0 + #APP + #NO_APP + i32.const $85=, 0 + #APP + #NO_APP + i32.const $86=, 0 + #APP + #NO_APP + i32.const $87=, 0 + #APP + #NO_APP + i32.const $88=, 0 + #APP + #NO_APP + i32.const $89=, 0 + #APP + #NO_APP + i32.const $90=, 0 + #APP + #NO_APP + i32.const $91=, 0 + #APP + #NO_APP + i32.const $92=, 0 + #APP + #NO_APP + i32.const $93=, 0 + #APP + #NO_APP + i32.const $94=, 0 + #APP + #NO_APP + i32.const $95=, 0 + #APP + #NO_APP + i32.const $96=, 0 + #APP + #NO_APP + i32.const $97=, 0 + #APP + #NO_APP + i32.const $98=, 0 + #APP + #NO_APP + i32.const $99=, 0 + #APP + #NO_APP + i32.const $100=, 0 + #APP + #NO_APP + i32.const $101=, 0 + #APP + #NO_APP + i32.const $102=, 0 + #APP + #NO_APP + i32.const $103=, 0 + #APP + #NO_APP + i32.const $104=, 0 + #APP + #NO_APP + i32.const $105=, 0 + #APP + #NO_APP + i32.const $106=, 0 + #APP + #NO_APP + i32.const $107=, 0 + #APP + #NO_APP + i32.const $108=, 0 + #APP + #NO_APP + i32.const $109=, 0 + #APP + #NO_APP + i32.const $110=, 0 + #APP + #NO_APP + i32.const $111=, 0 + #APP + #NO_APP + i32.const $112=, 0 + #APP + #NO_APP + i32.const $113=, 0 + #APP + #NO_APP + i32.const $114=, 0 + #APP + #NO_APP + i32.const $115=, 0 + #APP + #NO_APP + i32.const $116=, 0 + #APP + #NO_APP + i32.const $117=, 0 + #APP + #NO_APP + i32.const $118=, 0 + #APP + #NO_APP + i32.const $119=, 0 + #APP + #NO_APP + i32.const $120=, 0 + #APP + #NO_APP + i32.const $121=, 0 + #APP + #NO_APP + i32.const $122=, 0 + #APP + #NO_APP + i32.const $123=, 0 + #APP + #NO_APP + i32.const $124=, 0 + #APP + #NO_APP + i32.const $125=, 0 + #APP + #NO_APP + i32.const $126=, 0 + #APP + #NO_APP + i32.const $127=, 0 + #APP + #NO_APP + i32.const $128=, 0 + #APP + #NO_APP + i32.const $129=, 0 + #APP + #NO_APP + i32.const $130=, 0 + #APP + #NO_APP + i32.const $131=, 0 + #APP + #NO_APP + i32.const $132=, 0 + #APP + #NO_APP + i32.const $133=, 0 + #APP + #NO_APP + i32.const $134=, 0 + #APP + #NO_APP + i32.const $135=, 0 + #APP + #NO_APP + i32.const $136=, 0 + #APP + #NO_APP + i32.const $137=, 0 + #APP + #NO_APP + i32.const $138=, 0 + #APP + #NO_APP + i32.const $139=, 0 + #APP + #NO_APP + i32.const $140=, 0 + #APP + #NO_APP + i32.const $141=, 0 + #APP + #NO_APP + i32.const $142=, 0 + #APP + #NO_APP + i32.const $143=, 0 + #APP + #NO_APP + i32.const $144=, 0 + #APP + #NO_APP + i32.const $145=, 0 + #APP + #NO_APP + i32.const $146=, 0 + #APP + #NO_APP + i32.const $147=, 0 + #APP + #NO_APP + i32.const $148=, 0 + #APP + #NO_APP + i32.const $149=, 0 + #APP + #NO_APP + i32.const $150=, 0 + #APP + #NO_APP + i32.const $151=, 0 + #APP + #NO_APP + i32.const $152=, 0 + #APP + #NO_APP + i32.const $153=, 0 + #APP + #NO_APP + i32.const $154=, 0 + #APP + #NO_APP + i32.const $155=, 0 + #APP + #NO_APP + i32.const $156=, 0 + #APP + #NO_APP + i32.const $157=, 0 + #APP + #NO_APP + i32.const $158=, 0 + #APP + #NO_APP + i32.const $159=, 0 + #APP + #NO_APP + i32.const $160=, 0 + #APP + #NO_APP + i32.const $161=, 0 + #APP + #NO_APP + i32.const $162=, 0 + #APP + #NO_APP + i32.const $163=, 0 + #APP + #NO_APP + i32.const $164=, 0 + #APP + #NO_APP + i32.const $165=, 0 + #APP + #NO_APP + i32.const $166=, 0 + #APP + #NO_APP + i32.const $167=, 0 + #APP + #NO_APP + i32.const $168=, 0 + #APP + #NO_APP + i32.const $169=, 0 + #APP + #NO_APP + i32.const $170=, 0 + #APP + #NO_APP + i32.const $171=, 0 + #APP + #NO_APP + i32.const $172=, 0 + #APP + #NO_APP + i32.const $173=, 0 + #APP + #NO_APP + i32.const $174=, 0 + #APP + #NO_APP + i32.const $175=, 0 + #APP + #NO_APP + i32.const $176=, 0 + #APP + #NO_APP + i32.const $177=, 0 + #APP + #NO_APP + i32.const $178=, 0 + #APP + #NO_APP + i32.const $179=, 0 + #APP + #NO_APP + i32.const $180=, 0 + #APP + #NO_APP + i32.const $181=, 0 + #APP + #NO_APP + i32.const $182=, 0 + #APP + #NO_APP + i32.const $183=, 0 + #APP + #NO_APP + i32.const $184=, 0 + #APP + #NO_APP + i32.const $185=, 0 + #APP + #NO_APP + i32.const $186=, 0 + #APP + #NO_APP + i32.const $187=, 0 + #APP + #NO_APP + i32.const $188=, 0 + #APP + #NO_APP + i32.const $189=, 0 + #APP + #NO_APP + i32.const $190=, 0 + #APP + #NO_APP + i32.const $191=, 0 + #APP + #NO_APP + i32.const $192=, 0 + #APP + #NO_APP + i32.const $193=, 0 + #APP + #NO_APP + i32.const $194=, 0 + #APP + #NO_APP + i32.const $195=, 0 + #APP + #NO_APP + i32.const $196=, 0 + #APP + #NO_APP + i32.const $197=, 0 + #APP + #NO_APP + i32.const $198=, 0 + #APP + #NO_APP + i32.const $199=, 0 + #APP + #NO_APP + i32.const $200=, 0 + #APP + #NO_APP + i32.const $201=, 0 + #APP + #NO_APP + i32.const $202=, 0 + #APP + #NO_APP + i32.const $203=, 0 + #APP + #NO_APP + i32.const $204=, 0 + #APP + #NO_APP + i32.const $205=, 0 + #APP + #NO_APP + i32.const $206=, 0 + #APP + #NO_APP + i32.const $207=, 0 + #APP + #NO_APP + i32.const $208=, 0 + #APP + #NO_APP + i32.const $209=, 0 + #APP + #NO_APP + i32.const $210=, 0 + #APP + #NO_APP + i32.const $211=, 0 + #APP + #NO_APP + i32.const $212=, 0 + #APP + #NO_APP + i32.const $213=, 0 + #APP + #NO_APP + i32.const $214=, 0 + #APP + #NO_APP + i32.const $215=, 0 + #APP + #NO_APP + i32.const $216=, 0 + #APP + #NO_APP + i32.const $217=, 0 + #APP + #NO_APP + i32.const $218=, 0 + #APP + #NO_APP + i32.const $219=, 0 + #APP + #NO_APP + i32.const $220=, 0 + #APP + #NO_APP + i32.const $221=, 0 + #APP + #NO_APP + i32.const $222=, 0 + #APP + #NO_APP + i32.const $223=, 0 + #APP + #NO_APP + i32.const $224=, 0 + #APP + #NO_APP + i32.const $225=, 0 + #APP + #NO_APP + i32.const $226=, 0 + #APP + #NO_APP + i32.const $227=, 0 + #APP + #NO_APP + i32.const $228=, 0 + #APP + #NO_APP + i32.const $229=, 0 + #APP + #NO_APP + i32.const $230=, 0 + #APP + #NO_APP + i32.const $231=, 0 + #APP + #NO_APP + i32.const $232=, 0 + #APP + #NO_APP + i32.const $233=, 0 + #APP + #NO_APP + i32.const $234=, 0 + #APP + #NO_APP + i32.const $235=, 0 + #APP + #NO_APP + i32.const $236=, 0 + #APP + #NO_APP + i32.const $237=, 0 + #APP + #NO_APP + i32.const $238=, 0 + #APP + #NO_APP + i32.const $239=, 0 + #APP + #NO_APP + i32.const $240=, 0 + #APP + #NO_APP + i32.const $241=, 0 + #APP + #NO_APP + i32.const $242=, 0 + #APP + #NO_APP + i32.const $243=, 0 + #APP + #NO_APP + i32.const $244=, 0 + #APP + #NO_APP + i32.const $245=, 0 + #APP + #NO_APP + i32.const $246=, 0 + #APP + #NO_APP + i32.const $247=, 0 + #APP + #NO_APP + i32.const $248=, 0 + #APP + #NO_APP + i32.const $249=, 0 + #APP + #NO_APP + i32.const $250=, 0 + #APP + #NO_APP + i32.const $251=, 0 + #APP + #NO_APP + i32.const $252=, 0 + #APP + #NO_APP + i32.const $253=, 0 + #APP + #NO_APP + i32.const $254=, 0 + #APP + #NO_APP + i32.const $255=, 0 + #APP + #NO_APP + i32.const $256=, 0 + #APP + #NO_APP + i32.const $257=, 0 + #APP + #NO_APP + i32.const $258=, 0 + #APP + #NO_APP + i32.const $259=, 0 + #APP + #NO_APP + i32.const $260=, 0 + #APP + #NO_APP + i32.const $261=, 0 + #APP + #NO_APP + i32.const $262=, 0 + #APP + #NO_APP + i32.const $263=, 0 + #APP + #NO_APP + i32.const $264=, 0 + #APP + #NO_APP + i32.const $265=, 0 + #APP + #NO_APP + i32.const $266=, 0 + #APP + #NO_APP + i32.const $267=, 0 + #APP + #NO_APP + i32.const $268=, 0 + #APP + #NO_APP + i32.const $269=, 0 + #APP + #NO_APP + i32.const $270=, 0 + #APP + #NO_APP + i32.const $271=, 0 + #APP + #NO_APP + i32.const $272=, 0 + #APP + #NO_APP + i32.const $273=, 0 + #APP + #NO_APP + i32.const $274=, 0 + #APP + #NO_APP + i32.const $275=, 0 + #APP + #NO_APP + i32.const $276=, 0 + #APP + #NO_APP + i32.const $277=, 0 + #APP + #NO_APP + i32.const $278=, 0 + #APP + #NO_APP + i32.const $279=, 0 + #APP + #NO_APP + i32.const $280=, 0 + #APP + #NO_APP + i32.const $281=, 0 + #APP + #NO_APP + i32.const $282=, 0 + #APP + #NO_APP + i32.const $283=, 0 + #APP + #NO_APP + i32.const $284=, 0 + #APP + #NO_APP + i32.const $285=, 0 + #APP + #NO_APP + i32.const $286=, 0 + #APP + #NO_APP + i32.const $287=, 0 + #APP + #NO_APP + i32.const $288=, 0 + #APP + #NO_APP + i32.const $289=, 0 + #APP + #NO_APP + i32.const $290=, 0 + #APP + #NO_APP + i32.const $291=, 0 + #APP + #NO_APP + i32.const $292=, 0 + #APP + #NO_APP + i32.const $293=, 0 + #APP + #NO_APP + i32.const $294=, 0 + #APP + #NO_APP + i32.const $295=, 0 + #APP + #NO_APP + i32.const $296=, 0 + #APP + #NO_APP + i32.const $297=, 0 + #APP + #NO_APP + i32.const $298=, 0 + #APP + #NO_APP + i32.const $299=, 0 + #APP + #NO_APP + i32.const $300=, 0 + #APP + #NO_APP + i32.const $301=, 0 + #APP + #NO_APP + #APP + #NO_APP + i32.or $push0=, $1, $0 + i32.or $push1=, $pop0, $2 + i32.or $push2=, $pop1, $3 + i32.or $push3=, $pop2, $4 + i32.or $push4=, $pop3, $5 + i32.or $push5=, $pop4, $6 + i32.or $push6=, $pop5, $7 + i32.or $push7=, $pop6, $8 + i32.or $push8=, $pop7, $9 + i32.or $push9=, $pop8, $10 + i32.or $push10=, $pop9, $11 + i32.or $push11=, $pop10, $12 + i32.or $push12=, $pop11, $13 + i32.or $push13=, $pop12, $14 + i32.or $push14=, $pop13, $15 + i32.or $push15=, $pop14, $16 + i32.or $push16=, $pop15, $17 + i32.or $push17=, $pop16, $18 + i32.or $push18=, $pop17, $19 + i32.or $push19=, $pop18, $20 + i32.or $push20=, $pop19, $21 + i32.or $push21=, $pop20, $22 + i32.or $push22=, $pop21, $23 + i32.or $push23=, $pop22, $24 + i32.or $push24=, $pop23, $25 + i32.or $push25=, $pop24, $26 + i32.or $push26=, $pop25, $27 + i32.or $push27=, $pop26, $28 + i32.or $push28=, $pop27, $29 + i32.or $push29=, $pop28, $30 + i32.or $push30=, $pop29, $31 + i32.or $push31=, $pop30, $32 + i32.or $push32=, $pop31, $33 + i32.or $push33=, $pop32, $34 + i32.or $push34=, $pop33, $35 + i32.or $push35=, $pop34, $36 + i32.or $push36=, $pop35, $37 + i32.or $push37=, $pop36, $38 + i32.or $push38=, $pop37, $39 + i32.or $push39=, $pop38, $40 + i32.or $push40=, $pop39, $41 + i32.or $push41=, $pop40, $42 + i32.or $push42=, $pop41, $43 + i32.or $push43=, $pop42, $44 + i32.or $push44=, $pop43, $45 + i32.or $push45=, $pop44, $46 + i32.or $push46=, $pop45, $47 + i32.or $push47=, $pop46, $48 + i32.or $push48=, $pop47, $49 + i32.or $push49=, $pop48, $50 + i32.or $push50=, $pop49, $51 + i32.or $push51=, $pop50, $52 + i32.or $push52=, $pop51, $53 + i32.or $push53=, $pop52, $54 + i32.or $push54=, $pop53, $55 + i32.or $push55=, $pop54, $56 + i32.or $push56=, $pop55, $57 + i32.or $push57=, $pop56, $58 + i32.or $push58=, $pop57, $59 + i32.or $push59=, $pop58, $60 + i32.or $push60=, $pop59, $61 + i32.or $push61=, $pop60, $62 + i32.or $push62=, $pop61, $63 + i32.or $push63=, $pop62, $64 + i32.or $push64=, $pop63, $65 + i32.or $push65=, $pop64, $66 + i32.or $push66=, $pop65, $67 + i32.or $push67=, $pop66, $68 + i32.or $push68=, $pop67, $69 + i32.or $push69=, $pop68, $70 + i32.or $push70=, $pop69, $71 + i32.or $push71=, $pop70, $72 + i32.or $push72=, $pop71, $73 + i32.or $push73=, $pop72, $74 + i32.or $push74=, $pop73, $75 + i32.or $push75=, $pop74, $76 + i32.or $push76=, $pop75, $77 + i32.or $push77=, $pop76, $78 + i32.or $push78=, $pop77, $79 + i32.or $push79=, $pop78, $80 + i32.or $push80=, $pop79, $81 + i32.or $push81=, $pop80, $82 + i32.or $push82=, $pop81, $83 + i32.or $push83=, $pop82, $84 + i32.or $push84=, $pop83, $85 + i32.or $push85=, $pop84, $86 + i32.or $push86=, $pop85, $87 + i32.or $push87=, $pop86, $88 + i32.or $push88=, $pop87, $89 + i32.or $push89=, $pop88, $90 + i32.or $push90=, $pop89, $91 + i32.or $push91=, $pop90, $92 + i32.or $push92=, $pop91, $93 + i32.or $push93=, $pop92, $94 + i32.or $push94=, $pop93, $95 + i32.or $push95=, $pop94, $96 + i32.or $push96=, $pop95, $97 + i32.or $push97=, $pop96, $98 + i32.or $push98=, $pop97, $99 + i32.or $push99=, $pop98, $100 + i32.or $push100=, $pop99, $101 + i32.or $push101=, $pop100, $102 + i32.or $push102=, $pop101, $103 + i32.or $push103=, $pop102, $104 + i32.or $push104=, $pop103, $105 + i32.or $push105=, $pop104, $106 + i32.or $push106=, $pop105, $107 + i32.or $push107=, $pop106, $108 + i32.or $push108=, $pop107, $109 + i32.or $push109=, $pop108, $110 + i32.or $push110=, $pop109, $111 + i32.or $push111=, $pop110, $112 + i32.or $push112=, $pop111, $113 + i32.or $push113=, $pop112, $114 + i32.or $push114=, $pop113, $115 + i32.or $push115=, $pop114, $116 + i32.or $push116=, $pop115, $117 + i32.or $push117=, $pop116, $118 + i32.or $push118=, $pop117, $119 + i32.or $push119=, $pop118, $120 + i32.or $push120=, $pop119, $121 + i32.or $push121=, $pop120, $122 + i32.or $push122=, $pop121, $123 + i32.or $push123=, $pop122, $124 + i32.or $push124=, $pop123, $125 + i32.or $push125=, $pop124, $126 + i32.or $push126=, $pop125, $127 + i32.or $push127=, $pop126, $128 + i32.or $push128=, $pop127, $129 + i32.or $push129=, $pop128, $130 + i32.or $push130=, $pop129, $131 + i32.or $push131=, $pop130, $132 + i32.or $push132=, $pop131, $133 + i32.or $push133=, $pop132, $134 + i32.or $push134=, $pop133, $135 + i32.or $push135=, $pop134, $136 + i32.or $push136=, $pop135, $137 + i32.or $push137=, $pop136, $138 + i32.or $push138=, $pop137, $139 + i32.or $push139=, $pop138, $140 + i32.or $push140=, $pop139, $141 + i32.or $push141=, $pop140, $142 + i32.or $push142=, $pop141, $143 + i32.or $push143=, $pop142, $144 + i32.or $push144=, $pop143, $145 + i32.or $push145=, $pop144, $146 + i32.or $push146=, $pop145, $147 + i32.or $push147=, $pop146, $148 + i32.or $push148=, $pop147, $149 + i32.or $push149=, $pop148, $150 + i32.or $push150=, $pop149, $151 + i32.or $push151=, $pop150, $152 + i32.or $push152=, $pop151, $153 + i32.or $push153=, $pop152, $154 + i32.or $push154=, $pop153, $155 + i32.or $push155=, $pop154, $156 + i32.or $push156=, $pop155, $157 + i32.or $push157=, $pop156, $158 + i32.or $push158=, $pop157, $159 + i32.or $push159=, $pop158, $160 + i32.or $push160=, $pop159, $161 + i32.or $push161=, $pop160, $162 + i32.or $push162=, $pop161, $163 + i32.or $push163=, $pop162, $164 + i32.or $push164=, $pop163, $165 + i32.or $push165=, $pop164, $166 + i32.or $push166=, $pop165, $167 + i32.or $push167=, $pop166, $168 + i32.or $push168=, $pop167, $169 + i32.or $push169=, $pop168, $170 + i32.or $push170=, $pop169, $171 + i32.or $push171=, $pop170, $172 + i32.or $push172=, $pop171, $173 + i32.or $push173=, $pop172, $174 + i32.or $push174=, $pop173, $175 + i32.or $push175=, $pop174, $176 + i32.or $push176=, $pop175, $177 + i32.or $push177=, $pop176, $178 + i32.or $push178=, $pop177, $179 + i32.or $push179=, $pop178, $180 + i32.or $push180=, $pop179, $181 + i32.or $push181=, $pop180, $182 + i32.or $push182=, $pop181, $183 + i32.or $push183=, $pop182, $184 + i32.or $push184=, $pop183, $185 + i32.or $push185=, $pop184, $186 + i32.or $push186=, $pop185, $187 + i32.or $push187=, $pop186, $188 + i32.or $push188=, $pop187, $189 + i32.or $push189=, $pop188, $190 + i32.or $push190=, $pop189, $191 + i32.or $push191=, $pop190, $192 + i32.or $push192=, $pop191, $193 + i32.or $push193=, $pop192, $194 + i32.or $push194=, $pop193, $195 + i32.or $push195=, $pop194, $196 + i32.or $push196=, $pop195, $197 + i32.or $push197=, $pop196, $198 + i32.or $push198=, $pop197, $199 + i32.or $push199=, $pop198, $200 + i32.or $push200=, $pop199, $201 + i32.or $push201=, $pop200, $202 + i32.or $push202=, $pop201, $203 + i32.or $push203=, $pop202, $204 + i32.or $push204=, $pop203, $205 + i32.or $push205=, $pop204, $206 + i32.or $push206=, $pop205, $207 + i32.or $push207=, $pop206, $208 + i32.or $push208=, $pop207, $209 + i32.or $push209=, $pop208, $210 + i32.or $push210=, $pop209, $211 + i32.or $push211=, $pop210, $212 + i32.or $push212=, $pop211, $213 + i32.or $push213=, $pop212, $214 + i32.or $push214=, $pop213, $215 + i32.or $push215=, $pop214, $216 + i32.or $push216=, $pop215, $217 + i32.or $push217=, $pop216, $218 + i32.or $push218=, $pop217, $219 + i32.or $push219=, $pop218, $220 + i32.or $push220=, $pop219, $221 + i32.or $push221=, $pop220, $222 + i32.or $push222=, $pop221, $223 + i32.or $push223=, $pop222, $224 + i32.or $push224=, $pop223, $225 + i32.or $push225=, $pop224, $226 + i32.or $push226=, $pop225, $227 + i32.or $push227=, $pop226, $228 + i32.or $push228=, $pop227, $229 + i32.or $push229=, $pop228, $230 + i32.or $push230=, $pop229, $231 + i32.or $push231=, $pop230, $232 + i32.or $push232=, $pop231, $233 + i32.or $push233=, $pop232, $234 + i32.or $push234=, $pop233, $235 + i32.or $push235=, $pop234, $236 + i32.or $push236=, $pop235, $237 + i32.or $push237=, $pop236, $238 + i32.or $push238=, $pop237, $239 + i32.or $push239=, $pop238, $240 + i32.or $push240=, $pop239, $241 + i32.or $push241=, $pop240, $242 + i32.or $push242=, $pop241, $243 + i32.or $push243=, $pop242, $244 + i32.or $push244=, $pop243, $245 + i32.or $push245=, $pop244, $246 + i32.or $push246=, $pop245, $247 + i32.or $push247=, $pop246, $248 + i32.or $push248=, $pop247, $249 + i32.or $push249=, $pop248, $250 + i32.or $push250=, $pop249, $251 + i32.or $push251=, $pop250, $252 + i32.or $push252=, $pop251, $253 + i32.or $push253=, $pop252, $254 + i32.or $push254=, $pop253, $255 + i32.or $push255=, $pop254, $256 + i32.or $push256=, $pop255, $257 + i32.or $push257=, $pop256, $258 + i32.or $push258=, $pop257, $259 + i32.or $push259=, $pop258, $260 + i32.or $push260=, $pop259, $261 + i32.or $push261=, $pop260, $262 + i32.or $push262=, $pop261, $263 + i32.or $push263=, $pop262, $264 + i32.or $push264=, $pop263, $265 + i32.or $push265=, $pop264, $266 + i32.or $push266=, $pop265, $267 + i32.or $push267=, $pop266, $268 + i32.or $push268=, $pop267, $269 + i32.or $push269=, $pop268, $270 + i32.or $push270=, $pop269, $271 + i32.or $push271=, $pop270, $272 + i32.or $push272=, $pop271, $273 + i32.or $push273=, $pop272, $274 + i32.or $push274=, $pop273, $275 + i32.or $push275=, $pop274, $276 + i32.or $push276=, $pop275, $277 + i32.or $push277=, $pop276, $278 + i32.or $push278=, $pop277, $279 + i32.or $push279=, $pop278, $280 + i32.or $push280=, $pop279, $281 + i32.or $push281=, $pop280, $282 + i32.or $push282=, $pop281, $283 + i32.or $push283=, $pop282, $284 + i32.or $push284=, $pop283, $285 + i32.or $push285=, $pop284, $286 + i32.or $push286=, $pop285, $287 + i32.or $push287=, $pop286, $288 + i32.or $push288=, $pop287, $289 + i32.or $push289=, $pop288, $290 + i32.or $push290=, $pop289, $291 + i32.or $push291=, $pop290, $292 + i32.or $push292=, $pop291, $293 + i32.or $push293=, $pop292, $294 + i32.or $push294=, $pop293, $295 + i32.or $push295=, $pop294, $296 + i32.or $push296=, $pop295, $297 + i32.or $push297=, $pop296, $298 + i32.or $push298=, $pop297, $299 + i32.or $push299=, $pop298, $300 + i32.or $push300=, $pop299, $301 + i32.or $push301=, $pop300, $302 + # fallthrough-return: $pop301 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.call $push0=, foo@FUNCTION + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push1=, 0 + return $pop1 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr38819.c.s b/src/binaryen/test/torture-s/pr38819.c.s new file mode 100644 index 0000000000..b15884b0aa --- /dev/null +++ b/src/binaryen/test/torture-s/pr38819.c.s @@ -0,0 +1,71 @@ + .text + .file "pr38819.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %for.body + i32.const $push0=, 0 + i32.load $drop=, a($pop0) + i32.const $push1=, 0 + i32.load $drop=, b($pop1) + call foo@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 1 # 0x1 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 2 +x: + .int32 2 # 0x2 + .size x, 4 + + .hidden r # @r + .type r,@object + .section .data.r,"aw",@progbits + .globl r + .p2align 2 +r: + .int32 8 # 0x8 + .size r, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr38969.c.s b/src/binaryen/test/torture-s/pr38969.c.s new file mode 100644 index 0000000000..a908864e39 --- /dev/null +++ b/src/binaryen/test/torture-s/pr38969.c.s @@ -0,0 +1,103 @@ + .text + .file "pr38969.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1):p2align=2 + i64.store 0($0):p2align=2, $pop0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 + .local i64, i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 32 + i32.sub $push15=, $pop1, $pop3 + tee_local $push14=, $3=, $pop15 + i32.store __stack_pointer($pop4), $pop14 + i64.load $push13=, 0($1):p2align=2 + tee_local $push12=, $2=, $pop13 + i64.store 8($3), $pop12 + i64.store 16($3), $2 + i32.const $push8=, 24 + i32.add $push9=, $3, $pop8 + i32.const $push10=, 8 + i32.add $push11=, $3, $pop10 + call foo@FUNCTION, $pop9, $pop11 + i64.load $push0=, 24($3) + i64.store 0($0):p2align=2, $pop0 + i32.const $push7=, 0 + i32.const $push5=, 32 + i32.add $push6=, $3, $pop5 + i32.store __stack_pointer($pop7), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push11=, 0 + i32.const $push9=, 0 + i32.load $push8=, __stack_pointer($pop9) + i32.const $push10=, 32 + i32.sub $push21=, $pop8, $pop10 + tee_local $push20=, $0=, $pop21 + i32.store __stack_pointer($pop11), $pop20 + i64.const $push1=, 4767060206663237632 + i64.store 8($0), $pop1 + i64.const $push19=, 4767060206663237632 + i64.store 16($0), $pop19 + i32.const $push15=, 24 + i32.add $push16=, $0, $pop15 + i32.const $push17=, 8 + i32.add $push18=, $0, $pop17 + call bar@FUNCTION, $pop16, $pop18 + block + f32.load $push3=, 24($0) + f32.const $push2=, 0x1.2p3 + f32.ne $push4=, $pop3, $pop2 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %entry + f32.load $push0=, 28($0) + f32.const $push5=, 0x1.5p5 + f32.ne $push6=, $pop0, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#2: # %if.end + i32.const $push14=, 0 + i32.const $push12=, 32 + i32.add $push13=, $0, $pop12 + i32.store __stack_pointer($pop14), $pop13 + i32.const $push7=, 0 + return $pop7 +.LBB2_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr39100.c.s b/src/binaryen/test/torture-s/pr39100.c.s new file mode 100644 index 0000000000..1a9d0774bd --- /dev/null +++ b/src/binaryen/test/torture-s/pr39100.c.s @@ -0,0 +1,166 @@ + .text + .file "pr39100.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 + .local i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.load $push8=, __stack_pointer($pop9) + i32.const $push10=, 16 + i32.sub $push22=, $pop8, $pop10 + tee_local $push21=, $8=, $pop22 + i32.const $push20=, 0 + i32.store 12($pop21), $pop20 + i32.const $push19=, 0 + i32.store 8($8), $pop19 + block + block + i32.eqz $push31=, $1 + br_if 0, $pop31 # 0: down to label1 +# BB#1: # %while.body.lr.ph + i32.const $push15=, 12 + i32.add $push16=, $8, $pop15 + copy_local $6=, $pop16 + i32.const $push17=, 8 + i32.add $push18=, $8, $pop17 + copy_local $5=, $pop18 + i32.const $push2=, 6 + i32.add $4=, $0, $pop2 +.LBB0_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push24=, 4 + i32.add $2=, $1, $pop24 + i32.load $3=, 4($1) + block + block + i32.load8_u $push0=, 0($1) + i32.const $push23=, 1 + i32.and $push1=, $pop0, $pop23 + br_if 0, $pop1 # 0: down to label4 +# BB#3: # %if.else + # in Loop: Header=BB0_2 Depth=1 + i32.const $push28=, 4 + i32.add $push27=, $0, $pop28 + tee_local $push26=, $7=, $pop27 + i32.load16_u $push5=, 0($7) + i32.const $push25=, 1 + i32.add $push6=, $pop5, $pop25 + i32.store16 0($pop26), $pop6 + copy_local $7=, $5 + copy_local $5=, $2 + br 1 # 1: down to label3 +.LBB0_4: # %if.then + # in Loop: Header=BB0_2 Depth=1 + end_block # label4: + i32.load16_u $push3=, 0($4) + i32.const $push29=, 1 + i32.add $push4=, $pop3, $pop29 + i32.store16 0($4), $pop4 + copy_local $7=, $6 + copy_local $6=, $2 +.LBB0_5: # %if.end + # in Loop: Header=BB0_2 Depth=1 + end_block # label3: + i32.store 0($7), $1 + copy_local $1=, $3 + br_if 0, $3 # 0: up to label2 +# BB#6: # %while.end.loopexit + end_loop + i32.load $1=, 8($8) + br 1 # 1: down to label0 +.LBB0_7: + end_block # label1: + i32.const $push11=, 8 + i32.add $push12=, $8, $pop11 + copy_local $5=, $pop12 + i32.const $push13=, 12 + i32.add $push14=, $8, $pop13 + copy_local $6=, $pop14 + i32.const $1=, 0 +.LBB0_8: # %while.end + end_block # label0: + i32.store 0($6), $1 + i32.const $push30=, 0 + i32.store 0($5), $pop30 + i32.load $push7=, 12($8) + i32.store 0($0), $pop7 + copy_local $push32=, $0 + # fallthrough-return: $pop32 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push17=, 0 + i32.const $push15=, 0 + i32.load $push14=, __stack_pointer($pop15) + i32.const $push16=, 32 + i32.sub $push29=, $pop14, $pop16 + tee_local $push28=, $2=, $pop29 + i32.store __stack_pointer($pop17), $pop28 + i64.const $push0=, 0 + i64.store 24($2), $pop0 + i32.const $push1=, 8 + i32.or $push27=, $2, $pop1 + tee_local $push26=, $0=, $pop27 + i32.store 4($2), $pop26 + i32.const $push2=, 0 + i32.store 0($2), $pop2 + i64.const $push3=, 1 + i64.store 8($2), $pop3 + block + i32.const $push21=, 24 + i32.add $push22=, $2, $pop21 + i32.call $push25=, foo@FUNCTION, $pop22, $2 + tee_local $push24=, $1=, $pop25 + i32.load16_u $push4=, 4($pop24) + i32.const $push23=, 1 + i32.ne $push5=, $pop4, $pop23 + br_if 0, $pop5 # 0: down to label5 +# BB#1: # %lor.lhs.false + i32.load16_u $push6=, 6($1) + i32.const $push30=, 1 + i32.ne $push7=, $pop6, $pop30 + br_if 0, $pop7 # 0: down to label5 +# BB#2: # %if.end + i32.load $push8=, 24($2) + i32.ne $push9=, $pop8, $0 + br_if 0, $pop9 # 0: down to label5 +# BB#3: # %if.end13 + i32.load $push10=, 12($2) + i32.ne $push11=, $pop10, $2 + br_if 0, $pop11 # 0: down to label5 +# BB#4: # %if.end20 + i32.load $push12=, 4($2) + br_if 0, $pop12 # 0: down to label5 +# BB#5: # %if.end24 + i32.const $push20=, 0 + i32.const $push18=, 32 + i32.add $push19=, $2, $pop18 + i32.store __stack_pointer($pop20), $pop19 + i32.const $push13=, 0 + return $pop13 +.LBB1_6: # %if.then + end_block # label5: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr39120.c.s b/src/binaryen/test/torture-s/pr39120.c.s new file mode 100644 index 0000000000..13b9e3b2d7 --- /dev/null +++ b/src/binaryen/test/torture-s/pr39120.c.s @@ -0,0 +1,87 @@ + .text + .file "pr39120.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, x($pop0) + i32.const $push2=, 1 + i32.store 0($pop1), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push17=, $pop3, $pop5 + tee_local $push16=, $1=, $pop17 + i32.store __stack_pointer($pop6), $pop16 + i32.const $push15=, 0 + i32.store 12($1), $pop15 + i32.const $push14=, 0 + i32.const $push10=, 12 + i32.add $push11=, $1, $pop10 + i32.call $push13=, foo@FUNCTION, $pop11 + tee_local $push12=, $0=, $pop13 + i32.store x($pop14), $pop12 + call bar@FUNCTION + block + i32.load $push0=, 0($0) + i32.const $push1=, 1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push9=, 0 + i32.const $push7=, 16 + i32.add $push8=, $1, $pop7 + i32.store __stack_pointer($pop9), $pop8 + i32.const $push18=, 0 + return $pop18 +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 2 +x: + .skip 4 + .size x, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr39228.c.s b/src/binaryen/test/torture-s/pr39228.c.s new file mode 100644 index 0000000000..dfe9b3c04c --- /dev/null +++ b/src/binaryen/test/torture-s/pr39228.c.s @@ -0,0 +1,38 @@ + .text + .file "pr39228.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + f64.const $push0=, infinity + i32.call $push1=, __builtin_isinff@FUNCTION, $pop0 + i32.const $push8=, 0 + i32.le_s $push2=, $pop1, $pop8 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end4 + i64.const $push4=, 0 + i64.const $push3=, 9223090561878065152 + i32.call $push5=, __builtin_isinfl@FUNCTION, $pop4, $pop3 + i32.const $push9=, 0 + i32.le_s $push6=, $pop5, $pop9 + br_if 0, $pop6 # 0: down to label0 +# BB#2: # %if.end8 + i32.const $push7=, 0 + return $pop7 +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype __builtin_isinff, i32 + .functype __builtin_isinfl, i32 diff --git a/src/binaryen/test/torture-s/pr39233.c.s b/src/binaryen/test/torture-s/pr39233.c.s new file mode 100644 index 0000000000..5bb1fa276d --- /dev/null +++ b/src/binaryen/test/torture-s/pr39233.c.s @@ -0,0 +1,57 @@ + .text + .file "pr39233.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.lt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %entry + i32.const $push2=, 7 + i32.ge_s $push3=, $0, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %if.end + return +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 6 + call foo@FUNCTION, $pop0 + i32.const $push1=, 5 + call foo@FUNCTION, $pop1 + i32.const $push2=, 4 + call foo@FUNCTION, $pop2 + i32.const $push3=, 3 + call foo@FUNCTION, $pop3 + i32.const $push4=, 2 + call foo@FUNCTION, $pop4 + i32.const $push5=, 1 + call foo@FUNCTION, $pop5 + i32.const $push6=, 0 + call foo@FUNCTION, $pop6 + i32.const $push7=, 0 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr39240.c.s b/src/binaryen/test/torture-s/pr39240.c.s new file mode 100644 index 0000000000..51dc453f1f --- /dev/null +++ b/src/binaryen/test/torture-s/pr39240.c.s @@ -0,0 +1,307 @@ + .text + .file "pr39240.c" + .section .text.bar1,"ax",@progbits + .hidden bar1 # -- Begin function bar1 + .globl bar1 + .type bar1,@function +bar1: # @bar1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.add $push1=, $0, $pop0 + i32.call $push2=, foo1@FUNCTION, $pop1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size bar1, .Lfunc_end0-bar1 + # -- End function + .section .text.foo1,"ax",@progbits + .type foo1,@function # -- Begin function foo1 +foo1: # @foo1 + .param i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size foo1, .Lfunc_end1-foo1 + # -- End function + .section .text.bar2,"ax",@progbits + .hidden bar2 # -- Begin function bar2 + .globl bar2 + .type bar2,@function +bar2: # @bar2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.add $push1=, $0, $pop0 + i32.call $push2=, foo2@FUNCTION, $pop1 + i32.const $push3=, 65535 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end2: + .size bar2, .Lfunc_end2-bar2 + # -- End function + .section .text.foo2,"ax",@progbits + .type foo2,@function # -- Begin function foo2 +foo2: # @foo2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + i32.const $push3=, 16 + i32.shr_s $push2=, $pop1, $pop3 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end3: + .size foo2, .Lfunc_end3-foo2 + # -- End function + .section .text.bar3,"ax",@progbits + .hidden bar3 # -- Begin function bar3 + .globl bar3 + .type bar3,@function +bar3: # @bar3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.add $push1=, $0, $pop0 + i32.call $push2=, foo3@FUNCTION, $pop1 + i32.const $push3=, 255 + i32.and $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end4: + .size bar3, .Lfunc_end4-bar3 + # -- End function + .section .text.foo3,"ax",@progbits + .type foo3,@function # -- Begin function foo3 +foo3: # @foo3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.const $push3=, 24 + i32.shr_s $push2=, $pop1, $pop3 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end5: + .size foo3, .Lfunc_end5-foo3 + # -- End function + .section .text.bar4,"ax",@progbits + .hidden bar4 # -- Begin function bar4 + .globl bar4 + .type bar4,@function +bar4: # @bar4 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.add $push1=, $0, $pop0 + i32.call $push2=, foo4@FUNCTION, $pop1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end6: + .size bar4, .Lfunc_end6-bar4 + # -- End function + .section .text.foo4,"ax",@progbits + .type foo4,@function # -- Begin function foo4 +foo4: # @foo4 + .param i32 + .result i32 +# BB#0: # %entry + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end7: + .size foo4, .Lfunc_end7-foo4 + # -- End function + .section .text.bar5,"ax",@progbits + .hidden bar5 # -- Begin function bar5 + .globl bar5 + .type bar5,@function +bar5: # @bar5 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.add $push1=, $0, $pop0 + i32.call $push2=, foo5@FUNCTION, $pop1 + i32.const $push3=, 16 + i32.shl $push4=, $pop2, $pop3 + i32.const $push6=, 16 + i32.shr_s $push5=, $pop4, $pop6 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end8: + .size bar5, .Lfunc_end8-bar5 + # -- End function + .section .text.foo5,"ax",@progbits + .type foo5,@function # -- Begin function foo5 +foo5: # @foo5 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 65535 + i32.and $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end9: + .size foo5, .Lfunc_end9-foo5 + # -- End function + .section .text.bar6,"ax",@progbits + .hidden bar6 # -- Begin function bar6 + .globl bar6 + .type bar6,@function +bar6: # @bar6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 6 + i32.add $push1=, $0, $pop0 + i32.call $push2=, foo6@FUNCTION, $pop1 + i32.const $push3=, 24 + i32.shl $push4=, $pop2, $pop3 + i32.const $push6=, 24 + i32.shr_s $push5=, $pop4, $pop6 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end10: + .size bar6, .Lfunc_end10-bar6 + # -- End function + .section .text.foo6,"ax",@progbits + .type foo6,@function # -- Begin function foo6 +foo6: # @foo6 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 255 + i32.and $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end11: + .size foo6, .Lfunc_end11-foo6 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push20=, -10 + i32.call $push0=, bar1@FUNCTION, $pop20 + i32.const $push19=, 0 + i32.load $push1=, l1($pop19) + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push22=, 0 + i32.load $push4=, l2($pop22) + i32.const $push21=, -10 + i32.call $push3=, bar2@FUNCTION, $pop21 + i32.ne $push5=, $pop4, $pop3 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end5 + i32.const $push24=, 0 + i32.load $push7=, l3($pop24) + i32.const $push23=, -10 + i32.call $push6=, bar3@FUNCTION, $pop23 + i32.ne $push8=, $pop7, $pop6 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %if.end11 + i32.const $push26=, -10 + i32.call $push9=, bar4@FUNCTION, $pop26 + i32.const $push25=, 0 + i32.load $push10=, l4($pop25) + i32.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#4: # %if.end16 + i32.const $push28=, 0 + i32.load $push13=, l5($pop28) + i32.const $push27=, -10 + i32.call $push12=, bar5@FUNCTION, $pop27 + i32.ne $push14=, $pop13, $pop12 + br_if 0, $pop14 # 0: down to label0 +# BB#5: # %if.end22 + i32.const $push30=, 0 + i32.load $push16=, l6($pop30) + i32.const $push29=, -10 + i32.call $push15=, bar6@FUNCTION, $pop29 + i32.ne $push17=, $pop16, $pop15 + br_if 0, $pop17 # 0: down to label0 +# BB#6: # %if.end28 + i32.const $push18=, 0 + return $pop18 +.LBB12_7: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end12: + .size main, .Lfunc_end12-main + # -- End function + .hidden l1 # @l1 + .type l1,@object + .section .data.l1,"aw",@progbits + .globl l1 + .p2align 2 +l1: + .int32 4294967292 # 0xfffffffc + .size l1, 4 + + .hidden l2 # @l2 + .type l2,@object + .section .data.l2,"aw",@progbits + .globl l2 + .p2align 2 +l2: + .int32 65532 # 0xfffc + .size l2, 4 + + .hidden l3 # @l3 + .type l3,@object + .section .data.l3,"aw",@progbits + .globl l3 + .p2align 2 +l3: + .int32 252 # 0xfc + .size l3, 4 + + .hidden l4 # @l4 + .type l4,@object + .section .data.l4,"aw",@progbits + .globl l4 + .p2align 2 +l4: + .int32 4294967292 # 0xfffffffc + .size l4, 4 + + .hidden l5 # @l5 + .type l5,@object + .section .data.l5,"aw",@progbits + .globl l5 + .p2align 2 +l5: + .int32 4294967292 # 0xfffffffc + .size l5, 4 + + .hidden l6 # @l6 + .type l6,@object + .section .data.l6,"aw",@progbits + .globl l6 + .p2align 2 +l6: + .int32 4294967292 # 0xfffffffc + .size l6, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr39339.c.s b/src/binaryen/test/torture-s/pr39339.c.s new file mode 100644 index 0000000000..3960f8b164 --- /dev/null +++ b/src/binaryen/test/torture-s/pr39339.c.s @@ -0,0 +1,156 @@ + .text + .file "pr39339.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push21=, 12 + i32.add $push1=, $0, $pop21 + i32.load $6=, 0($pop1) + i32.load $push3=, 0($3) + i32.load $push4=, 0($pop3) + i32.load $push0=, 4($0) + i32.const $push2=, 3 + i32.shl $push20=, $pop0, $pop2 + tee_local $push19=, $5=, $pop20 + i32.add $push18=, $pop4, $pop19 + tee_local $push17=, $0=, $pop18 + i32.store 0($pop17), $1 + i32.const $push7=, -16 + i32.and $push8=, $6, $pop7 + i32.const $push5=, 15 + i32.and $push6=, $2, $pop5 + i32.or $push16=, $pop8, $pop6 + tee_local $push15=, $6=, $pop16 + i32.store 4($0), $pop15 + block + i32.const $push10=, 2 + i32.lt_s $push11=, $2, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#1: # %for.body.preheader + i32.const $push9=, 4194304 + i32.or $4=, $6, $pop9 + i32.const $push23=, -1 + i32.add $0=, $2, $pop23 + i32.const $push22=, 12 + i32.add $2=, $5, $pop22 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.load $push12=, 0($3) + i32.load $push13=, 0($pop12) + i32.add $push30=, $pop13, $2 + tee_local $push29=, $6=, $pop30 + i32.store 0($pop29), $4 + i32.const $push28=, -4 + i32.add $push14=, $6, $pop28 + i32.store 0($pop14), $1 + i32.const $push27=, 8 + i32.add $2=, $2, $pop27 + i32.const $push26=, -1 + i32.add $push25=, $0, $pop26 + tee_local $push24=, $0=, $pop25 + br_if 0, $pop24 # 0: up to label1 +.LBB0_3: # %for.end + end_loop + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push22=, 0 + i32.const $push20=, 0 + i32.load $push19=, __stack_pointer($pop20) + i32.const $push21=, 64 + i32.sub $push38=, $pop19, $pop21 + tee_local $push37=, $0=, $pop38 + i32.store __stack_pointer($pop22), $pop37 + i32.const $push2=, 56 + i32.add $push3=, $0, $pop2 + i32.const $push0=, 0 + i64.load $push1=, .Lmain.e+8($pop0):p2align=2 + i64.store 0($pop3), $pop1 + i32.const $push36=, 0 + i64.load $push4=, .Lmain.e($pop36):p2align=2 + i64.store 48($0), $pop4 + i32.const $push5=, 4 + i32.store 12($0), $pop5 + i32.const $push26=, 16 + i32.add $push27=, $0, $pop26 + i32.store 8($0), $pop27 + i32.const $push6=, 40 + i32.add $push7=, $0, $pop6 + i64.const $push8=, 0 + i64.store 0($pop7), $pop8 + i32.const $push9=, 32 + i32.add $push10=, $0, $pop9 + i64.const $push35=, 0 + i64.store 0($pop10), $pop35 + i32.const $push11=, 255 + i32.store8 4($0), $pop11 + i64.const $push34=, 0 + i64.store 24($0), $pop34 + i64.const $push33=, 0 + i64.store 16($0), $pop33 + i32.const $push28=, 8 + i32.add $push29=, $0, $pop28 + i32.store 0($0), $pop29 + i32.const $push30=, 48 + i32.add $push31=, $0, $pop30 + i32.const $push13=, 65 + i32.const $push12=, 2 + call foo@FUNCTION, $pop31, $pop13, $pop12, $0 + block + i32.load $push14=, 20($0) + i32.const $push32=, 1434451954 + i32.ne $push15=, $pop14, $pop32 + br_if 0, $pop15 # 0: down to label2 +# BB#1: # %if.end + i32.load $push16=, 28($0) + i32.const $push39=, 1434451954 + i32.ne $push17=, $pop16, $pop39 + br_if 0, $pop17 # 0: down to label2 +# BB#2: # %if.end13 + i32.const $push25=, 0 + i32.const $push23=, 64 + i32.add $push24=, $0, $pop23 + i32.store __stack_pointer($pop25), $pop24 + i32.const $push18=, 0 + return $pop18 +.LBB1_3: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .Lmain.e,@object # @main.e + .section .rodata.cst16,"aM",@progbits,16 + .p2align 2 +.Lmain.e: + .int32 5 # 0x5 + .int32 0 # 0x0 + .int32 6 # 0x6 + .int8 255 # 0xff + .int8 255 # 0xff + .int8 127 # 0x7f + .int8 85 # 0x55 + .size .Lmain.e, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr39501.c.s b/src/binaryen/test/torture-s/pr39501.c.s new file mode 100644 index 0000000000..7fd03c10d9 --- /dev/null +++ b/src/binaryen/test/torture-s/pr39501.c.s @@ -0,0 +1,483 @@ + .text + .file "pr39501.c" + .section .text.float_min1,"ax",@progbits + .hidden float_min1 # -- Begin function float_min1 + .globl float_min1 + .type float_min1,@function +float_min1: # @float_min1 + .param f32, f32 + .result f32 +# BB#0: # %entry + f32.lt $push0=, $0, $1 + f32.select $push1=, $0, $1, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size float_min1, .Lfunc_end0-float_min1 + # -- End function + .section .text.float_min2,"ax",@progbits + .hidden float_min2 # -- Begin function float_min2 + .globl float_min2 + .type float_min2,@function +float_min2: # @float_min2 + .param f32, f32 + .result f32 +# BB#0: # %entry + f32.le $push0=, $0, $1 + f32.select $push1=, $0, $1, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size float_min2, .Lfunc_end1-float_min2 + # -- End function + .section .text.float_max1,"ax",@progbits + .hidden float_max1 # -- Begin function float_max1 + .globl float_max1 + .type float_max1,@function +float_max1: # @float_max1 + .param f32, f32 + .result f32 +# BB#0: # %entry + f32.gt $push0=, $0, $1 + f32.select $push1=, $0, $1, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size float_max1, .Lfunc_end2-float_max1 + # -- End function + .section .text.float_max2,"ax",@progbits + .hidden float_max2 # -- Begin function float_max2 + .globl float_max2 + .type float_max2,@function +float_max2: # @float_max2 + .param f32, f32 + .result f32 +# BB#0: # %entry + f32.ge $push0=, $0, $1 + f32.select $push1=, $0, $1, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end3: + .size float_max2, .Lfunc_end3-float_max2 + # -- End function + .section .text.double_min1,"ax",@progbits + .hidden double_min1 # -- Begin function double_min1 + .globl double_min1 + .type double_min1,@function +double_min1: # @double_min1 + .param f64, f64 + .result f64 +# BB#0: # %entry + f64.lt $push0=, $0, $1 + f64.select $push1=, $0, $1, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end4: + .size double_min1, .Lfunc_end4-double_min1 + # -- End function + .section .text.double_min2,"ax",@progbits + .hidden double_min2 # -- Begin function double_min2 + .globl double_min2 + .type double_min2,@function +double_min2: # @double_min2 + .param f64, f64 + .result f64 +# BB#0: # %entry + f64.le $push0=, $0, $1 + f64.select $push1=, $0, $1, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end5: + .size double_min2, .Lfunc_end5-double_min2 + # -- End function + .section .text.double_max1,"ax",@progbits + .hidden double_max1 # -- Begin function double_max1 + .globl double_max1 + .type double_max1,@function +double_max1: # @double_max1 + .param f64, f64 + .result f64 +# BB#0: # %entry + f64.gt $push0=, $0, $1 + f64.select $push1=, $0, $1, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end6: + .size double_max1, .Lfunc_end6-double_max1 + # -- End function + .section .text.double_max2,"ax",@progbits + .hidden double_max2 # -- Begin function double_max2 + .globl double_max2 + .type double_max2,@function +double_max2: # @double_max2 + .param f64, f64 + .result f64 +# BB#0: # %entry + f64.ge $push0=, $0, $1 + f64.select $push1=, $0, $1, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end7: + .size double_max2, .Lfunc_end7-double_max2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + block + f32.const $push99=, 0x0p0 + f32.const $push98=, -0x1p0 + f32.call $push0=, float_min1@FUNCTION, $pop99, $pop98 + f32.const $push97=, -0x1p0 + f32.ne $push1=, $pop0, $pop97 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %if.end + f32.const $push102=, -0x1p0 + f32.const $push101=, 0x0p0 + f32.call $push2=, float_min1@FUNCTION, $pop102, $pop101 + f32.const $push100=, -0x1p0 + f32.ne $push3=, $pop2, $pop100 + br_if 0, $pop3 # 0: down to label1 +# BB#2: # %if.end4 + f32.const $push105=, 0x0p0 + f32.const $push104=, 0x1p0 + f32.call $push4=, float_min1@FUNCTION, $pop105, $pop104 + f32.const $push103=, 0x0p0 + f32.ne $push5=, $pop4, $pop103 + br_if 0, $pop5 # 0: down to label1 +# BB#3: # %if.end8 + f32.const $push108=, 0x1p0 + f32.const $push107=, 0x0p0 + f32.call $push6=, float_min1@FUNCTION, $pop108, $pop107 + f32.const $push106=, 0x0p0 + f32.ne $push7=, $pop6, $pop106 + br_if 0, $pop7 # 0: down to label1 +# BB#4: # %if.end12 + f32.const $push111=, -0x1p0 + f32.const $push110=, 0x1p0 + f32.call $push8=, float_min1@FUNCTION, $pop111, $pop110 + f32.const $push109=, -0x1p0 + f32.ne $push9=, $pop8, $pop109 + br_if 0, $pop9 # 0: down to label1 +# BB#5: # %if.end16 + f32.const $push114=, 0x1p0 + f32.const $push113=, -0x1p0 + f32.call $push10=, float_min1@FUNCTION, $pop114, $pop113 + f32.const $push112=, -0x1p0 + f32.ne $push11=, $pop10, $pop112 + br_if 0, $pop11 # 0: down to label1 +# BB#6: # %if.end20 + f32.const $push117=, 0x0p0 + f32.const $push116=, -0x1p0 + f32.call $push12=, float_max1@FUNCTION, $pop117, $pop116 + f32.const $push115=, 0x0p0 + f32.ne $push13=, $pop12, $pop115 + br_if 0, $pop13 # 0: down to label1 +# BB#7: # %if.end24 + f32.const $push120=, -0x1p0 + f32.const $push119=, 0x0p0 + f32.call $push14=, float_max1@FUNCTION, $pop120, $pop119 + f32.const $push118=, 0x0p0 + f32.ne $push15=, $pop14, $pop118 + br_if 0, $pop15 # 0: down to label1 +# BB#8: # %if.end28 + f32.const $push123=, 0x0p0 + f32.const $push122=, 0x1p0 + f32.call $push16=, float_max1@FUNCTION, $pop123, $pop122 + f32.const $push121=, 0x1p0 + f32.ne $push17=, $pop16, $pop121 + br_if 0, $pop17 # 0: down to label1 +# BB#9: # %if.end32 + f32.const $push126=, 0x1p0 + f32.const $push125=, 0x0p0 + f32.call $push18=, float_max1@FUNCTION, $pop126, $pop125 + f32.const $push124=, 0x1p0 + f32.ne $push19=, $pop18, $pop124 + br_if 0, $pop19 # 0: down to label1 +# BB#10: # %if.end36 + f32.const $push129=, -0x1p0 + f32.const $push128=, 0x1p0 + f32.call $push20=, float_max1@FUNCTION, $pop129, $pop128 + f32.const $push127=, 0x1p0 + f32.ne $push21=, $pop20, $pop127 + br_if 0, $pop21 # 0: down to label1 +# BB#11: # %if.end40 + f32.const $push132=, 0x1p0 + f32.const $push131=, -0x1p0 + f32.call $push22=, float_max1@FUNCTION, $pop132, $pop131 + f32.const $push130=, 0x1p0 + f32.ne $push23=, $pop22, $pop130 + br_if 0, $pop23 # 0: down to label1 +# BB#12: # %if.end44 + f32.const $push135=, 0x0p0 + f32.const $push134=, -0x1p0 + f32.call $push24=, float_min2@FUNCTION, $pop135, $pop134 + f32.const $push133=, -0x1p0 + f32.ne $push25=, $pop24, $pop133 + br_if 0, $pop25 # 0: down to label1 +# BB#13: # %if.end48 + f32.const $push138=, -0x1p0 + f32.const $push137=, 0x0p0 + f32.call $push26=, float_min2@FUNCTION, $pop138, $pop137 + f32.const $push136=, -0x1p0 + f32.ne $push27=, $pop26, $pop136 + br_if 0, $pop27 # 0: down to label1 +# BB#14: # %if.end52 + f32.const $push141=, 0x0p0 + f32.const $push140=, 0x1p0 + f32.call $push28=, float_min2@FUNCTION, $pop141, $pop140 + f32.const $push139=, 0x0p0 + f32.ne $push29=, $pop28, $pop139 + br_if 0, $pop29 # 0: down to label1 +# BB#15: # %if.end56 + f32.const $push144=, 0x1p0 + f32.const $push143=, 0x0p0 + f32.call $push30=, float_min2@FUNCTION, $pop144, $pop143 + f32.const $push142=, 0x0p0 + f32.ne $push31=, $pop30, $pop142 + br_if 0, $pop31 # 0: down to label1 +# BB#16: # %if.end60 + f32.const $push147=, -0x1p0 + f32.const $push146=, 0x1p0 + f32.call $push32=, float_min2@FUNCTION, $pop147, $pop146 + f32.const $push145=, -0x1p0 + f32.ne $push33=, $pop32, $pop145 + br_if 0, $pop33 # 0: down to label1 +# BB#17: # %if.end64 + f32.const $push150=, 0x1p0 + f32.const $push149=, -0x1p0 + f32.call $push34=, float_min2@FUNCTION, $pop150, $pop149 + f32.const $push148=, -0x1p0 + f32.ne $push35=, $pop34, $pop148 + br_if 0, $pop35 # 0: down to label1 +# BB#18: # %if.end68 + f32.const $push153=, 0x0p0 + f32.const $push152=, -0x1p0 + f32.call $push36=, float_max2@FUNCTION, $pop153, $pop152 + f32.const $push151=, 0x0p0 + f32.ne $push37=, $pop36, $pop151 + br_if 0, $pop37 # 0: down to label1 +# BB#19: # %if.end72 + f32.const $push156=, -0x1p0 + f32.const $push155=, 0x0p0 + f32.call $push38=, float_max2@FUNCTION, $pop156, $pop155 + f32.const $push154=, 0x0p0 + f32.ne $push39=, $pop38, $pop154 + br_if 0, $pop39 # 0: down to label1 +# BB#20: # %if.end76 + f32.const $push159=, 0x0p0 + f32.const $push158=, 0x1p0 + f32.call $push40=, float_max2@FUNCTION, $pop159, $pop158 + f32.const $push157=, 0x1p0 + f32.ne $push41=, $pop40, $pop157 + br_if 0, $pop41 # 0: down to label1 +# BB#21: # %if.end80 + f32.const $push162=, 0x1p0 + f32.const $push161=, 0x0p0 + f32.call $push42=, float_max2@FUNCTION, $pop162, $pop161 + f32.const $push160=, 0x1p0 + f32.ne $push43=, $pop42, $pop160 + br_if 0, $pop43 # 0: down to label1 +# BB#22: # %if.end84 + f32.const $push165=, -0x1p0 + f32.const $push164=, 0x1p0 + f32.call $push44=, float_max2@FUNCTION, $pop165, $pop164 + f32.const $push163=, 0x1p0 + f32.ne $push45=, $pop44, $pop163 + br_if 0, $pop45 # 0: down to label1 +# BB#23: # %if.end88 + f32.const $push168=, 0x1p0 + f32.const $push167=, -0x1p0 + f32.call $push46=, float_max2@FUNCTION, $pop168, $pop167 + f32.const $push166=, 0x1p0 + f32.ne $push47=, $pop46, $pop166 + br_if 0, $pop47 # 0: down to label1 +# BB#24: # %if.end92 + f64.const $push171=, 0x0p0 + f64.const $push170=, -0x1p0 + f64.call $push48=, double_min1@FUNCTION, $pop171, $pop170 + f64.const $push169=, -0x1p0 + f64.ne $push49=, $pop48, $pop169 + br_if 0, $pop49 # 0: down to label1 +# BB#25: # %if.end96 + f64.const $push174=, -0x1p0 + f64.const $push173=, 0x0p0 + f64.call $push50=, double_min1@FUNCTION, $pop174, $pop173 + f64.const $push172=, -0x1p0 + f64.ne $push51=, $pop50, $pop172 + br_if 0, $pop51 # 0: down to label1 +# BB#26: # %if.end100 + f64.const $push177=, 0x0p0 + f64.const $push176=, 0x1p0 + f64.call $push52=, double_min1@FUNCTION, $pop177, $pop176 + f64.const $push175=, 0x0p0 + f64.ne $push53=, $pop52, $pop175 + br_if 0, $pop53 # 0: down to label1 +# BB#27: # %if.end104 + f64.const $push180=, 0x1p0 + f64.const $push179=, 0x0p0 + f64.call $push54=, double_min1@FUNCTION, $pop180, $pop179 + f64.const $push178=, 0x0p0 + f64.ne $push55=, $pop54, $pop178 + br_if 0, $pop55 # 0: down to label1 +# BB#28: # %if.end108 + f64.const $push183=, -0x1p0 + f64.const $push182=, 0x1p0 + f64.call $push56=, double_min1@FUNCTION, $pop183, $pop182 + f64.const $push181=, -0x1p0 + f64.ne $push57=, $pop56, $pop181 + br_if 0, $pop57 # 0: down to label1 +# BB#29: # %if.end112 + f64.const $push186=, 0x1p0 + f64.const $push185=, -0x1p0 + f64.call $push58=, double_min1@FUNCTION, $pop186, $pop185 + f64.const $push184=, -0x1p0 + f64.ne $push59=, $pop58, $pop184 + br_if 0, $pop59 # 0: down to label1 +# BB#30: # %if.end116 + f64.const $push189=, 0x0p0 + f64.const $push188=, -0x1p0 + f64.call $push60=, double_max1@FUNCTION, $pop189, $pop188 + f64.const $push187=, 0x0p0 + f64.ne $push61=, $pop60, $pop187 + br_if 0, $pop61 # 0: down to label1 +# BB#31: # %if.end120 + f64.const $push192=, -0x1p0 + f64.const $push191=, 0x0p0 + f64.call $push62=, double_max1@FUNCTION, $pop192, $pop191 + f64.const $push190=, 0x0p0 + f64.ne $push63=, $pop62, $pop190 + br_if 0, $pop63 # 0: down to label1 +# BB#32: # %if.end124 + f64.const $push195=, 0x0p0 + f64.const $push194=, 0x1p0 + f64.call $push64=, double_max1@FUNCTION, $pop195, $pop194 + f64.const $push193=, 0x1p0 + f64.ne $push65=, $pop64, $pop193 + br_if 0, $pop65 # 0: down to label1 +# BB#33: # %if.end128 + f64.const $push198=, 0x1p0 + f64.const $push197=, 0x0p0 + f64.call $push66=, double_max1@FUNCTION, $pop198, $pop197 + f64.const $push196=, 0x1p0 + f64.ne $push67=, $pop66, $pop196 + br_if 0, $pop67 # 0: down to label1 +# BB#34: # %if.end132 + f64.const $push201=, -0x1p0 + f64.const $push200=, 0x1p0 + f64.call $push68=, double_max1@FUNCTION, $pop201, $pop200 + f64.const $push199=, 0x1p0 + f64.ne $push69=, $pop68, $pop199 + br_if 0, $pop69 # 0: down to label1 +# BB#35: # %if.end136 + f64.const $push204=, 0x1p0 + f64.const $push203=, -0x1p0 + f64.call $push70=, double_max1@FUNCTION, $pop204, $pop203 + f64.const $push202=, 0x1p0 + f64.ne $push71=, $pop70, $pop202 + br_if 0, $pop71 # 0: down to label1 +# BB#36: # %if.end140 + f64.const $push207=, 0x0p0 + f64.const $push206=, -0x1p0 + f64.call $push72=, double_min2@FUNCTION, $pop207, $pop206 + f64.const $push205=, -0x1p0 + f64.ne $push73=, $pop72, $pop205 + br_if 0, $pop73 # 0: down to label1 +# BB#37: # %if.end144 + f64.const $push210=, -0x1p0 + f64.const $push209=, 0x0p0 + f64.call $push74=, double_min2@FUNCTION, $pop210, $pop209 + f64.const $push208=, -0x1p0 + f64.ne $push75=, $pop74, $pop208 + br_if 0, $pop75 # 0: down to label1 +# BB#38: # %if.end148 + f64.const $push213=, 0x0p0 + f64.const $push212=, 0x1p0 + f64.call $push76=, double_min2@FUNCTION, $pop213, $pop212 + f64.const $push211=, 0x0p0 + f64.ne $push77=, $pop76, $pop211 + br_if 0, $pop77 # 0: down to label1 +# BB#39: # %if.end152 + f64.const $push216=, 0x1p0 + f64.const $push215=, 0x0p0 + f64.call $push78=, double_min2@FUNCTION, $pop216, $pop215 + f64.const $push214=, 0x0p0 + f64.ne $push79=, $pop78, $pop214 + br_if 0, $pop79 # 0: down to label1 +# BB#40: # %if.end156 + f64.const $push219=, -0x1p0 + f64.const $push218=, 0x1p0 + f64.call $push80=, double_min2@FUNCTION, $pop219, $pop218 + f64.const $push217=, -0x1p0 + f64.ne $push81=, $pop80, $pop217 + br_if 0, $pop81 # 0: down to label1 +# BB#41: # %if.end160 + f64.const $push222=, 0x1p0 + f64.const $push221=, -0x1p0 + f64.call $push82=, double_min2@FUNCTION, $pop222, $pop221 + f64.const $push220=, -0x1p0 + f64.ne $push83=, $pop82, $pop220 + br_if 0, $pop83 # 0: down to label1 +# BB#42: # %if.end164 + f64.const $push225=, 0x0p0 + f64.const $push224=, -0x1p0 + f64.call $push84=, double_max2@FUNCTION, $pop225, $pop224 + f64.const $push223=, 0x0p0 + f64.ne $push85=, $pop84, $pop223 + br_if 0, $pop85 # 0: down to label1 +# BB#43: # %if.end168 + f64.const $push228=, -0x1p0 + f64.const $push227=, 0x0p0 + f64.call $push86=, double_max2@FUNCTION, $pop228, $pop227 + f64.const $push226=, 0x0p0 + f64.ne $push87=, $pop86, $pop226 + br_if 0, $pop87 # 0: down to label1 +# BB#44: # %if.end172 + f64.const $push231=, 0x0p0 + f64.const $push230=, 0x1p0 + f64.call $push88=, double_max2@FUNCTION, $pop231, $pop230 + f64.const $push229=, 0x1p0 + f64.ne $push89=, $pop88, $pop229 + br_if 0, $pop89 # 0: down to label1 +# BB#45: # %if.end176 + f64.const $push234=, 0x1p0 + f64.const $push233=, 0x0p0 + f64.call $push90=, double_max2@FUNCTION, $pop234, $pop233 + f64.const $push232=, 0x1p0 + f64.ne $push91=, $pop90, $pop232 + br_if 0, $pop91 # 0: down to label1 +# BB#46: # %if.end180 + f64.const $push237=, -0x1p0 + f64.const $push236=, 0x1p0 + f64.call $push92=, double_max2@FUNCTION, $pop237, $pop236 + f64.const $push235=, 0x1p0 + f64.ne $push93=, $pop92, $pop235 + br_if 0, $pop93 # 0: down to label1 +# BB#47: # %if.end184 + f64.const $push240=, 0x1p0 + f64.const $push239=, -0x1p0 + f64.call $push94=, double_max2@FUNCTION, $pop240, $pop239 + f64.const $push238=, 0x1p0 + f64.eq $push95=, $pop94, $pop238 + br_if 1, $pop95 # 1: down to label0 +.LBB8_48: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable +.LBB8_49: # %if.end188 + end_block # label0: + i32.const $push96=, 0 + call exit@FUNCTION, $pop96 + unreachable + .endfunc +.Lfunc_end8: + .size main, .Lfunc_end8-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr40022.c.s b/src/binaryen/test/torture-s/pr40022.c.s new file mode 100644 index 0000000000..d8bcf2ffb5 --- /dev/null +++ b/src/binaryen/test/torture-s/pr40022.c.s @@ -0,0 +1,158 @@ + .text + .file "pr40022.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.load $push0=, __stack_pointer($pop1) + i32.const $push2=, 16 + i32.sub $push4=, $pop0, $pop2 + tee_local $push3=, $1=, $pop4 + i32.store 12($pop3), $0 + #APP + #NO_APP + copy_local $push5=, $0 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32, i32, i32 +# BB#0: # %entry + i32.call $push2=, foo@FUNCTION, $1 + tee_local $push1=, $1=, $pop2 + i32.store 0($0), $pop1 + block + i32.eqz $push13=, $1 + br_if 0, $pop13 # 0: down to label0 +.LBB1_1: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + copy_local $push6=, $1 + tee_local $push5=, $0=, $pop6 + i32.load $push4=, 0($pop5) + tee_local $push3=, $1=, $pop4 + br_if 0, $pop3 # 0: up to label1 +.LBB1_2: # %while.end + end_loop + end_block # label0: + i32.call $push8=, foo@FUNCTION, $2 + tee_local $push7=, $1=, $pop8 + i32.store 0($0), $pop7 + block + i32.eqz $push14=, $1 + br_if 0, $pop14 # 0: down to label2 +.LBB1_3: # %while.body4 + # =>This Inner Loop Header: Depth=1 + loop # label3: + copy_local $push12=, $1 + tee_local $push11=, $0=, $pop12 + i32.load $push10=, 0($pop11) + tee_local $push9=, $1=, $pop10 + br_if 0, $pop9 # 0: up to label3 +.LBB1_4: # %while.end6 + end_loop + end_block # label2: + i32.call $push0=, foo@FUNCTION, $3 + i32.store 0($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, g + i32.store f($pop1), $pop0 + i32.const $push4=, d + i32.const $push3=, e + i32.const $push2=, f + i32.const $push10=, 0 + call bar@FUNCTION, $pop4, $pop3, $pop2, $pop10 + block + i32.const $push9=, 0 + i32.load $push8=, d($pop9) + tee_local $push7=, $0=, $pop8 + i32.eqz $push15=, $pop7 + br_if 0, $pop15 # 0: down to label4 +# BB#1: # %lor.lhs.false + i32.load $push12=, 0($0) + tee_local $push11=, $0=, $pop12 + i32.eqz $push16=, $pop11 + br_if 0, $pop16 # 0: down to label4 +# BB#2: # %lor.lhs.false2 + i32.load $push14=, 0($0) + tee_local $push13=, $0=, $pop14 + i32.eqz $push17=, $pop13 + br_if 0, $pop17 # 0: down to label4 +# BB#3: # %lor.lhs.false6 + i32.load $push5=, 0($0) + br_if 0, $pop5 # 0: down to label4 +# BB#4: # %if.end + i32.const $push6=, 0 + return $pop6 +.LBB2_5: # %if.then + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden g # @g + .type g,@object + .section .bss.g,"aw",@nobits + .globl g + .p2align 2 +g: + .skip 4 + .size g, 4 + + .hidden f # @f + .type f,@object + .section .bss.f,"aw",@nobits + .globl f + .p2align 2 +f: + .skip 4 + .size f, 4 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .skip 4 + .size d, 4 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e + .p2align 2 +e: + .skip 4 + .size e, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr40057.c.s b/src/binaryen/test/torture-s/pr40057.c.s new file mode 100644 index 0000000000..94027ca557 --- /dev/null +++ b/src/binaryen/test/torture-s/pr40057.c.s @@ -0,0 +1,73 @@ + .text + .file "pr40057.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i64 + .result i32 +# BB#0: # %entry + i32.wrap/i64 $push0=, $0 + i32.const $push1=, 31 + i32.shr_s $push2=, $pop0, $pop1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i64 + .result i32 +# BB#0: # %entry + i32.wrap/i64 $push0=, $0 + i32.const $push1=, 31 + i32.shr_s $push2=, $pop0, $pop1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i64.const $push0=, 6042589866 + i32.call $push1=, foo@FUNCTION, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i64.const $push2=, 6579460778 + i32.call $push3=, foo@FUNCTION, $pop2 + i32.eqz $push9=, $pop3 + br_if 0, $pop9 # 0: down to label0 +# BB#2: # %if.end4 + i64.const $push4=, 6042589866 + i32.call $push5=, bar@FUNCTION, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#3: # %if.end8 + i64.const $push6=, 6579460778 + i32.call $push7=, bar@FUNCTION, $pop6 + i32.eqz $push10=, $pop7 + br_if 0, $pop10 # 0: down to label0 +# BB#4: # %if.end12 + i32.const $push8=, 0 + return $pop8 +.LBB2_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr40386.c.s b/src/binaryen/test/torture-s/pr40386.c.s new file mode 100644 index 0000000000..595d62c943 --- /dev/null +++ b/src/binaryen/test/torture-s/pr40386.c.s @@ -0,0 +1,295 @@ + .text + .file "pr40386.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i32 +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.load8_s $push125=, c($pop0) + tee_local $push124=, $0=, $pop125 + i32.const $push2=, 8 + i32.const $push123=, 0 + i32.load $push122=, shift1($pop123) + tee_local $push121=, $1=, $pop122 + i32.sub $push120=, $pop2, $pop121 + tee_local $push119=, $2=, $pop120 + i32.shl $push3=, $pop124, $pop119 + i32.shr_s $push1=, $0, $1 + i32.or $push4=, $pop3, $pop1 + i32.const $push118=, 835 + i32.ne $push5=, $pop4, $pop118 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 4 + i32.shr_s $push8=, $0, $pop6 + i32.const $push127=, 4 + i32.shl $push7=, $0, $pop127 + i32.or $push9=, $pop8, $pop7 + i32.const $push126=, 835 + i32.ne $push10=, $pop9, $pop126 + br_if 0, $pop10 # 0: down to label0 +# BB#2: # %if.end11 + i32.const $push12=, 0 + i32.load16_s $push132=, s($pop12) + tee_local $push131=, $3=, $pop132 + i32.shr_s $push14=, $pop131, $1 + i32.const $push11=, 16 + i32.sub $push130=, $pop11, $1 + tee_local $push129=, $4=, $pop130 + i32.shl $push13=, $3, $pop129 + i32.or $push15=, $pop14, $pop13 + i32.const $push128=, -221 + i32.ne $push16=, $pop15, $pop128 + br_if 0, $pop16 # 0: down to label0 +# BB#3: # %if.end21 + i32.const $push19=, 4 + i32.shr_s $push20=, $3, $pop19 + i32.const $push17=, 12 + i32.shl $push18=, $3, $pop17 + i32.or $push21=, $pop20, $pop18 + i32.const $push133=, -221 + i32.ne $push22=, $pop21, $pop133 + br_if 0, $pop22 # 0: down to label0 +# BB#4: # %if.end30 + i32.const $push24=, 0 + i32.load $push138=, i($pop24) + tee_local $push137=, $5=, $pop138 + i32.shr_s $push26=, $pop137, $1 + i32.const $push23=, 32 + i32.sub $push136=, $pop23, $1 + tee_local $push135=, $6=, $pop136 + i32.shl $push25=, $5, $pop135 + i32.or $push27=, $pop26, $pop25 + i32.const $push134=, 1073745699 + i32.ne $push28=, $pop27, $pop134 + br_if 0, $pop28 # 0: down to label0 +# BB#5: # %if.end38 + i32.const $push31=, 4 + i32.shr_s $push32=, $5, $pop31 + i32.const $push29=, 28 + i32.shl $push30=, $5, $pop29 + i32.or $push33=, $pop32, $pop30 + i32.const $push139=, 1073745699 + i32.ne $push34=, $pop33, $pop139 + br_if 0, $pop34 # 0: down to label0 +# BB#6: # %if.end45 + i32.const $push35=, 0 + i32.load $push142=, l($pop35) + tee_local $push141=, $7=, $pop142 + i32.shr_s $push37=, $pop141, $1 + i32.shl $push36=, $7, $6 + i32.or $push38=, $pop37, $pop36 + i32.const $push140=, -14465689 + i32.ne $push39=, $pop38, $pop140 + br_if 0, $pop39 # 0: down to label0 +# BB#7: # %if.end53 + i32.const $push42=, 4 + i32.shr_s $push43=, $7, $pop42 + i32.const $push40=, 28 + i32.shl $push41=, $7, $pop40 + i32.or $push44=, $pop43, $pop41 + i32.const $push143=, -14465689 + i32.ne $push45=, $pop44, $pop143 + br_if 0, $pop45 # 0: down to label0 +# BB#8: # %if.end60 + i32.const $push46=, 0 + i64.load $push150=, ll($pop46) + tee_local $push149=, $8=, $pop150 + i64.extend_u/i32 $push148=, $1 + tee_local $push147=, $9=, $pop148 + i64.shr_s $push47=, $pop149, $pop147 + i32.const $push48=, 64 + i32.sub $push49=, $pop48, $1 + i64.extend_u/i32 $push146=, $pop49 + tee_local $push145=, $10=, $pop146 + i64.shl $push50=, $8, $pop145 + i64.or $push51=, $pop47, $pop50 + i64.const $push144=, 68174490360335855 + i64.ne $push52=, $pop51, $pop144 + br_if 0, $pop52 # 0: down to label0 +# BB#9: # %if.end69 + i64.const $push55=, 4 + i64.shr_s $push56=, $8, $pop55 + i64.const $push53=, 60 + i64.shl $push54=, $8, $pop53 + i64.or $push57=, $pop56, $pop54 + i64.const $push151=, 68174490360335855 + i64.ne $push58=, $pop57, $pop151 + br_if 0, $pop58 # 0: down to label0 +# BB#10: # %if.end76 + i32.const $push61=, 64 + i32.const $push59=, 0 + i32.load $push158=, shift2($pop59) + tee_local $push157=, $13=, $pop158 + i32.sub $push62=, $pop61, $pop157 + i64.extend_u/i32 $push156=, $pop62 + tee_local $push155=, $12=, $pop156 + i64.shl $push63=, $8, $pop155 + i64.extend_u/i32 $push154=, $13 + tee_local $push153=, $11=, $pop154 + i64.shr_s $push60=, $8, $pop153 + i64.or $push64=, $pop63, $pop60 + i64.const $push152=, -994074541463572736 + i64.ne $push65=, $pop64, $pop152 + br_if 0, $pop65 # 0: down to label0 +# BB#11: # %if.end86 + i64.const $push68=, 60 + i64.shr_s $push69=, $8, $pop68 + i64.const $push66=, 4 + i64.shl $push67=, $8, $pop66 + i64.or $push70=, $pop69, $pop67 + i64.const $push159=, -994074541463572736 + i64.ne $push71=, $pop70, $pop159 + br_if 0, $pop71 # 0: down to label0 +# BB#12: # %if.end93 + i32.shr_s $push73=, $0, $2 + i32.shl $push72=, $0, $1 + i32.or $push74=, $pop73, $pop72 + i32.const $push75=, 835 + i32.ne $push76=, $pop74, $pop75 + br_if 0, $pop76 # 0: down to label0 +# BB#13: # %if.end112 + i32.shl $push78=, $3, $1 + i32.shr_s $push77=, $3, $4 + i32.or $push79=, $pop78, $pop77 + i32.const $push160=, -1 + i32.ne $push80=, $pop79, $pop160 + br_if 0, $pop80 # 0: down to label0 +# BB#14: # %if.end122 + i32.const $push83=, 4 + i32.shl $push84=, $3, $pop83 + i32.const $push81=, 12 + i32.shr_s $push82=, $3, $pop81 + i32.or $push85=, $pop84, $pop82 + i32.const $push161=, -1 + i32.ne $push86=, $pop85, $pop161 + br_if 0, $pop86 # 0: down to label0 +# BB#15: # %if.end131 + i32.shl $push88=, $5, $1 + i32.shr_s $push87=, $5, $6 + i32.or $push89=, $pop88, $pop87 + i32.const $push162=, 992064 + i32.ne $push90=, $pop89, $pop162 + br_if 0, $pop90 # 0: down to label0 +# BB#16: # %if.end139 + i32.const $push93=, 4 + i32.shl $push94=, $5, $pop93 + i32.const $push91=, 28 + i32.shr_s $push92=, $5, $pop91 + i32.or $push95=, $pop94, $pop92 + i32.const $push163=, 992064 + i32.ne $push96=, $pop95, $pop163 + br_if 0, $pop96 # 0: down to label0 +# BB#17: # %if.end146 + i32.shl $push98=, $7, $1 + i32.shr_s $push97=, $7, $6 + i32.or $push99=, $pop98, $pop97 + i32.const $push164=, -1 + i32.ne $push100=, $pop99, $pop164 + br_if 0, $pop100 # 0: down to label0 +# BB#18: # %if.end154 + i32.const $push103=, 4 + i32.shl $push104=, $7, $pop103 + i32.const $push101=, 28 + i32.shr_s $push102=, $7, $pop101 + i32.or $push105=, $pop104, $pop102 + i32.const $push165=, -1 + i32.ne $push106=, $pop105, $pop165 + br_if 0, $pop106 # 0: down to label0 +# BB#19: # %if.end161 + i64.shl $push108=, $8, $9 + i64.shr_s $push107=, $8, $10 + i64.or $push109=, $pop108, $pop107 + i64.const $push110=, -994074541463572736 + i64.ne $push111=, $pop109, $pop110 + br_if 0, $pop111 # 0: down to label0 +# BB#20: # %if.end178 + i64.shr_s $push113=, $8, $12 + i64.shl $push112=, $8, $11 + i64.or $push114=, $pop113, $pop112 + i64.const $push115=, 68174490360335855 + i64.ne $push116=, $pop114, $pop115 + br_if 0, $pop116 # 0: down to label0 +# BB#21: # %if.end195 + i32.const $push117=, 0 + call exit@FUNCTION, $pop117 + unreachable +.LBB0_22: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden c # @c + .type c,@object + .section .data.c,"aw",@progbits + .globl c +c: + .int8 52 # 0x34 + .size c, 1 + + .hidden s # @s + .type s,@object + .section .data.s,"aw",@progbits + .globl s + .p2align 1 +s: + .int16 62004 # 0xf234 + .size s, 2 + + .hidden i # @i + .type i,@object + .section .data.i,"aw",@progbits + .globl i + .p2align 2 +i: + .int32 62004 # 0xf234 + .size i, 4 + + .hidden l # @l + .type l,@object + .section .data.l,"aw",@progbits + .globl l + .p2align 2 +l: + .int32 4063516280 # 0xf2345678 + .size l, 4 + + .hidden ll # @ll + .type ll,@object + .section .data.ll,"aw",@progbits + .globl ll + .p2align 3 +ll: + .int64 1090791845765373680 # 0xf2345678abcdef0 + .size ll, 8 + + .hidden shift1 # @shift1 + .type shift1,@object + .section .data.shift1,"aw",@progbits + .globl shift1 + .p2align 2 +shift1: + .int32 4 # 0x4 + .size shift1, 4 + + .hidden shift2 # @shift2 + .type shift2,@object + .section .data.shift2,"aw",@progbits + .globl shift2 + .p2align 2 +shift2: + .int32 60 # 0x3c + .size shift2, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr40404.c.s b/src/binaryen/test/torture-s/pr40404.c.s new file mode 100644 index 0000000000..31069acd53 --- /dev/null +++ b/src/binaryen/test/torture-s/pr40404.c.s @@ -0,0 +1,32 @@ + .text + .file "pr40404.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load $push1=, s($pop5) + i32.const $push2=, 131071 + i32.or $push3=, $pop1, $pop2 + i32.store s($pop0), $pop3 + i32.const $push4=, 0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 2 +s: + .skip 4 + .size s, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr40493.c.s b/src/binaryen/test/torture-s/pr40493.c.s new file mode 100644 index 0000000000..eeed901d6a --- /dev/null +++ b/src/binaryen/test/torture-s/pr40493.c.s @@ -0,0 +1,66 @@ + .text + .file "pr40493.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 22 + i32.store x01($pop1), $pop0 + i32.const $push8=, 0 + i32.const $push2=, 2 + i32.store x00($pop8), $pop2 + i32.const $push7=, 0 + i32.const $push6=, 2 + i32.store y00($pop7), $pop6 + i32.const $push5=, 0 + i32.const $push4=, 22 + i32.store y01($pop5), $pop4 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x00 # @x00 + .type x00,@object + .section .bss.x00,"aw",@nobits + .globl x00 + .p2align 2 +x00: + .int32 0 # 0x0 + .size x00, 4 + + .hidden x01 # @x01 + .type x01,@object + .section .bss.x01,"aw",@nobits + .globl x01 + .p2align 2 +x01: + .int32 0 # 0x0 + .size x01, 4 + + .hidden y00 # @y00 + .type y00,@object + .section .bss.y00,"aw",@nobits + .globl y00 + .p2align 2 +y00: + .int32 0 # 0x0 + .size y00, 4 + + .hidden y01 # @y01 + .type y01,@object + .section .bss.y01,"aw",@nobits + .globl y01 + .p2align 2 +y01: + .int32 0 # 0x0 + .size y01, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr40579.c.s b/src/binaryen/test/torture-s/pr40579.c.s new file mode 100644 index 0000000000..d3b29768ed --- /dev/null +++ b/src/binaryen/test/torture-s/pr40579.c.s @@ -0,0 +1,45 @@ + .text + .file "pr40579.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call foo@FUNCTION, $pop0 + i32.const $push1=, 1 + call foo@FUNCTION, $pop1 + i32.const $push2=, 2 + call foo@FUNCTION, $pop2 + i32.const $push3=, 3 + call foo@FUNCTION, $pop3 + i32.const $push4=, 0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.foo,"ax",@progbits + .type foo,@function # -- Begin function foo +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 4 + i32.ge_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr40657.c.s b/src/binaryen/test/torture-s/pr40657.c.s new file mode 100644 index 0000000000..d90699a484 --- /dev/null +++ b/src/binaryen/test/torture-s/pr40657.c.s @@ -0,0 +1,93 @@ + .text + .file "pr40657.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.load $push0=, __stack_pointer($pop1) + i32.const $push2=, 16 + i32.sub $push5=, $pop0, $pop2 + tee_local $push4=, $1=, $pop5 + i32.store 12($pop4), $0 + i32.const $push3=, 12 + i32.add $0=, $1, $pop3 + #APP + #NO_APP + # fallthrough-return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i64 + .local i64, i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push11=, $pop1, $pop3 + tee_local $push10=, $1=, $pop11 + i32.store __stack_pointer($pop4), $pop10 + i32.const $push8=, 12 + i32.add $push9=, $1, $pop8 + call bar@FUNCTION, $pop9 + i32.const $push0=, 0 + i64.load $0=, v($pop0) + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $1, $pop5 + i32.store __stack_pointer($pop7), $pop6 + copy_local $push12=, $0 + # fallthrough-return: $pop12 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i64.call $push0=, foo@FUNCTION + i32.const $push3=, 0 + i64.load $push1=, v($pop3) + i64.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden v # @v + .type v,@object + .section .data.v,"aw",@progbits + .globl v + .p2align 3 +v: + .int64 20015998343868 # 0x123456789abc + .size v, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr40668.c.s b/src/binaryen/test/torture-s/pr40668.c.s new file mode 100644 index 0000000000..7458e3b680 --- /dev/null +++ b/src/binaryen/test/torture-s/pr40668.c.s @@ -0,0 +1,69 @@ + .text + .file "pr40668.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 +# BB#0: # %entry + block + i32.const $push0=, -1 + i32.add $push15=, $0, $pop0 + tee_local $push14=, $0=, $pop15 + i32.const $push1=, 8 + i32.gt_u $push2=, $pop14, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %switch.hole_check + i32.const $push5=, 449 + i32.const $push3=, 65535 + i32.and $push4=, $0, $pop3 + i32.shr_u $push6=, $pop5, $pop4 + i32.const $push7=, 1 + i32.and $push8=, $pop6, $pop7 + i32.eqz $push16=, $pop8 + br_if 0, $pop16 # 0: down to label0 +# BB#2: # %switch.lookup + i32.const $push9=, 2 + i32.shl $push10=, $0, $pop9 + i32.const $push11=, .Lswitch.table.bar + i32.add $push12=, $pop10, $pop11 + i32.load $push13=, 0($pop12) + i32.store 0($1):p2align=0, $pop13 +.LBB0_3: # %sw.epilog + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .Lswitch.table.bar,@object # @switch.table.bar + .section .rodata..Lswitch.table.bar,"a",@progbits + .p2align 4 +.Lswitch.table.bar: + .int32 305419896 # 0x12345678 + .int32 305419896 # 0x12345678 + .int32 305419896 # 0x12345678 + .int32 305419896 # 0x12345678 + .int32 305419896 # 0x12345678 + .int32 305419896 # 0x12345678 + .int32 0 # 0x0 + .int32 0 # 0x0 + .int32 0 # 0x0 + .size .Lswitch.table.bar, 36 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr40747.c.s b/src/binaryen/test/torture-s/pr40747.c.s new file mode 100644 index 0000000000..457d2d1f81 --- /dev/null +++ b/src/binaryen/test/torture-s/pr40747.c.s @@ -0,0 +1,34 @@ + .text + .file "pr40747.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.const $push3=, 4 + i32.lt_u $push1=, $0, $pop3 + i32.select $push2=, $0, $pop0, $pop1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end24 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr41239.c.s b/src/binaryen/test/torture-s/pr41239.c.s new file mode 100644 index 0000000000..542518ae12 --- /dev/null +++ b/src/binaryen/test/torture-s/pr41239.c.s @@ -0,0 +1,189 @@ + .text + .file "pr41239.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32 + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push14=, 0 + i32.const $push12=, 0 + i32.load $push11=, __stack_pointer($pop12) + i32.const $push13=, 16 + i32.sub $push21=, $pop11, $pop13 + tee_local $push20=, $3=, $pop21 + i32.store __stack_pointer($pop14), $pop20 + i32.load $1=, 4($0) + block + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i32.load $push19=, 0($pop1) + tee_local $push18=, $0=, $pop19 + br_if 0, $pop18 # 0: down to label0 +# BB#1: # %if.then + i32.const $push5=, 20 + i32.const $push4=, .L.str + i32.const $push3=, 924 + i32.const $push2=, .L__func__.test + i32.const $push22=, 0 + i32.call $push6=, fn1@FUNCTION, $pop5, $pop4, $pop3, $pop2, $pop22 + i32.eqz $push24=, $pop6 + br_if 0, $pop24 # 0: down to label0 +# BB#2: # %cond.true + i32.const $push7=, 33816706 + i32.call $2=, fn3@FUNCTION, $pop7 + i32.const $push8=, .L.str.1 + i32.const $push23=, 0 + i32.call $push9=, fn4@FUNCTION, $pop8, $pop23 + i32.store 0($3), $pop9 + call fn2@FUNCTION, $2, $3 +.LBB0_3: # %if.end + end_block # label0: + i32.const $push17=, 0 + i32.const $push15=, 16 + i32.add $push16=, $3, $pop15 + i32.store __stack_pointer($pop17), $pop16 + i32.div_s $push10=, $1, $0 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.fn1,"ax",@progbits + .hidden fn1 # -- Begin function fn1 + .globl fn1 + .type fn1,@function +fn1: # @fn1 + .param i32, i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + #APP + #NO_APP + #APP + #NO_APP + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.const $push3=, 24 + i32.shr_s $push2=, $pop1, $pop3 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size fn1, .Lfunc_end1-fn1 + # -- End function + .section .text.fn2,"ax",@progbits + .hidden fn2 # -- Begin function fn2 + .globl fn2 + .type fn2,@function +fn2: # @fn2 + .param i32, i32 +# BB#0: # %entry + #APP + #NO_APP + block + br_if 0, $0 # 0: down to label1 +# BB#1: # %if.end + return +.LBB2_2: # %if.then + end_block # label1: + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size fn2, .Lfunc_end2-fn2 + # -- End function + .section .text.fn3,"ax",@progbits + .hidden fn3 # -- Begin function fn3 + .globl fn3 + .type fn3,@function +fn3: # @fn3 + .param i32 + .result i32 +# BB#0: # %entry + #APP + #NO_APP + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size fn3, .Lfunc_end3-fn3 + # -- End function + .section .text.fn4,"ax",@progbits + .hidden fn4 # -- Begin function fn4 + .globl fn4 + .type fn4,@function +fn4: # @fn4 + .param i32, i32 + .result i32 +# BB#0: # %entry + #APP + #NO_APP + i32.load8_s $push0=, 0($0) + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end4: + .size fn4, .Lfunc_end4-fn4 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push11=, $pop5, $pop7 + tee_local $push10=, $0=, $pop11 + i32.store __stack_pointer($pop8), $pop10 + i32.const $push2=, 8 + i32.add $push3=, $0, $pop2 + i32.const $push0=, 0 + i32.load $push1=, .Lmain.s+8($pop0) + i32.store 0($pop3), $pop1 + i32.const $push9=, 0 + i64.load $push4=, .Lmain.s($pop9):p2align=2 + i64.store 0($0), $pop4 + i32.call $drop=, test@FUNCTION, $0 + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end5: + .size main, .Lfunc_end5-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "foo" + .size .L.str, 4 + + .type .L__func__.test,@object # @__func__.test +.L__func__.test: + .asciz "test" + .size .L__func__.test, 5 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "division by zero" + .size .L.str.1, 17 + + .type .Lmain.s,@object # @main.s + .section .rodata..Lmain.s,"a",@progbits + .p2align 2 +.Lmain.s: + .int16 2 # 0x2 + .skip 2 + .int32 5 # 0x5 + .int32 0 # 0x0 + .size .Lmain.s, 12 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr41317.c.s b/src/binaryen/test/torture-s/pr41317.c.s new file mode 100644 index 0000000000..4e4fbe137b --- /dev/null +++ b/src/binaryen/test/torture-s/pr41317.c.s @@ -0,0 +1,17 @@ + .text + .file "pr41317.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr41395-1.c.s b/src/binaryen/test/torture-s/pr41395-1.c.s new file mode 100644 index 0000000000..9460802464 --- /dev/null +++ b/src/binaryen/test/torture-s/pr41395-1.c.s @@ -0,0 +1,58 @@ + .text + .file "pr41395-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.shl $push1=, $1, $pop0 + i32.add $push2=, $0, $pop1 + i32.const $push3=, 8 + i32.add $push10=, $pop2, $pop3 + tee_local $push9=, $1=, $pop10 + i32.const $push4=, 0 + i32.store16 0($pop9), $pop4 + i32.const $push5=, 24 + i32.add $push6=, $0, $pop5 + i32.const $push8=, 1 + i32.store16 0($pop6), $pop8 + i32.load16_s $push7=, 0($1) + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 268 + i32.call $push1=, malloc@FUNCTION, $pop0 + i32.const $push2=, 8 + i32.call $push3=, foo@FUNCTION, $pop1, $pop2 + i32.const $push4=, 1 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 0 + return $pop6 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype malloc, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr41395-2.c.s b/src/binaryen/test/torture-s/pr41395-2.c.s new file mode 100644 index 0000000000..101a2bb692 --- /dev/null +++ b/src/binaryen/test/torture-s/pr41395-2.c.s @@ -0,0 +1,58 @@ + .text + .file "pr41395-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.shl $push1=, $1, $pop0 + i32.add $push2=, $0, $pop1 + i32.const $push3=, 8 + i32.add $push10=, $pop2, $pop3 + tee_local $push9=, $1=, $pop10 + i32.const $push4=, 0 + i32.store16 0($pop9), $pop4 + i32.const $push5=, 40 + i32.add $push6=, $0, $pop5 + i32.const $push8=, 1 + i32.store16 0($pop6), $pop8 + i32.load16_s $push7=, 0($1) + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 276 + i32.call $push1=, malloc@FUNCTION, $pop0 + i32.const $push2=, 16 + i32.call $push3=, foo@FUNCTION, $pop1, $pop2 + i32.const $push4=, 1 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 0 + return $pop6 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype malloc, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr41463.c.s b/src/binaryen/test/torture-s/pr41463.c.s new file mode 100644 index 0000000000..ff66657c90 --- /dev/null +++ b/src/binaryen/test/torture-s/pr41463.c.s @@ -0,0 +1,67 @@ + .text + .file "pr41463.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shl $push1=, $1, $pop0 + i32.add $push2=, $0, $pop1 + i32.const $push3=, 24 + i32.add $push10=, $pop2, $pop3 + tee_local $push9=, $1=, $pop10 + i32.const $push4=, 0 + i32.store 0($pop9), $pop4 + i32.const $push5=, 28 + i32.add $push6=, $0, $pop5 + i32.const $push7=, global + i32.store 0($pop6), $pop7 + i32.load $push8=, 0($1) + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 76 + i32.call $push1=, malloc@FUNCTION, $pop0 + i32.const $push2=, 1 + i32.call $push3=, foo@FUNCTION, $pop1, $pop2 + i32.const $push4=, global + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 0 + return $pop6 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden global # @global + .type global,@object + .section .bss.global,"aw",@nobits + .globl global + .p2align 2 +global: + .skip 76 + .size global, 76 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype malloc, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr41750.c.s b/src/binaryen/test/torture-s/pr41750.c.s new file mode 100644 index 0000000000..fe4ed891da --- /dev/null +++ b/src/binaryen/test/torture-s/pr41750.c.s @@ -0,0 +1,116 @@ + .text + .file "pr41750.c" + .section .text.foo_create_got_section,"ax",@progbits + .hidden foo_create_got_section # -- Begin function foo_create_got_section + .globl foo_create_got_section + .type foo_create_got_section,@function +foo_create_got_section: # @foo_create_got_section + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.store 8($pop0), $0 + i32.const $push1=, 1 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo_create_got_section, .Lfunc_end0-foo_create_got_section + # -- End function + .section .text.elf64_ia64_check_relocs,"ax",@progbits + .hidden elf64_ia64_check_relocs # -- Begin function elf64_ia64_check_relocs + .globl elf64_ia64_check_relocs + .type elf64_ia64_check_relocs,@function +elf64_ia64_check_relocs: # @elf64_ia64_check_relocs + .param i32, i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + block + i32.load $push8=, 0($1) + tee_local $push7=, $2=, $pop8 + i32.load $push6=, 8($pop7) + tee_local $push5=, $3=, $pop6 + i32.eqz $push11=, $pop5 + br_if 0, $pop11 # 0: down to label0 +# BB#1: # %get_got.exit + return $3 +.LBB1_2: # %if.then.i + end_block # label0: + block + i32.load $push10=, 4($2) + tee_local $push9=, $3=, $pop10 + br_if 0, $pop9 # 0: down to label1 +# BB#3: # %if.then3.i + i32.const $push0=, 4 + i32.add $push1=, $2, $pop0 + i32.store 0($pop1), $0 + copy_local $3=, $0 +.LBB1_4: # %if.end.i + end_block # label1: + i32.call $drop=, foo_create_got_section@FUNCTION, $3, $1 + i32.const $push2=, 8 + i32.add $push3=, $2, $pop2 + i32.load $push4=, 0($pop3) + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end1: + .size elf64_ia64_check_relocs, .Lfunc_end1-elf64_ia64_check_relocs + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push0=, hash + i32.store link_info($pop6), $pop0 + block + i32.const $push2=, abfd + i32.const $push1=, link_info + i32.call $push3=, elf64_ia64_check_relocs@FUNCTION, $pop2, $pop1 + i32.const $push5=, abfd + i32.ne $push4=, $pop3, $pop5 + br_if 0, $pop4 # 0: down to label2 +# BB#1: # %if.end + i32.const $push7=, 0 + return $pop7 +.LBB2_2: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden hash # @hash + .type hash,@object + .section .bss.hash,"aw",@nobits + .globl hash + .p2align 2 +hash: + .skip 12 + .size hash, 12 + + .hidden link_info # @link_info + .type link_info,@object + .section .bss.link_info,"aw",@nobits + .globl link_info + .p2align 2 +link_info: + .skip 4 + .size link_info, 4 + + .hidden abfd # @abfd + .type abfd,@object + .section .bss.abfd,"aw",@nobits + .globl abfd + .p2align 2 +abfd: + .int32 0 # 0x0 + .size abfd, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr41917.c.s b/src/binaryen/test/torture-s/pr41917.c.s new file mode 100644 index 0000000000..bf592a462d --- /dev/null +++ b/src/binaryen/test/torture-s/pr41917.c.s @@ -0,0 +1,26 @@ + .text + .file "pr41917.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 1 # 0x1 + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr41919.c.s b/src/binaryen/test/torture-s/pr41919.c.s new file mode 100644 index 0000000000..5307ae6e10 --- /dev/null +++ b/src/binaryen/test/torture-s/pr41919.c.s @@ -0,0 +1,26 @@ + .text + .file "pr41919.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden g_23 # @g_23 + .type g_23,@object + .section .bss.g_23,"aw",@nobits + .globl g_23 + .p2align 2 +g_23: + .int32 0 # 0x0 + .size g_23, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr42006.c.s b/src/binaryen/test/torture-s/pr42006.c.s new file mode 100644 index 0000000000..63e6d43c81 --- /dev/null +++ b/src/binaryen/test/torture-s/pr42006.c.s @@ -0,0 +1,17 @@ + .text + .file "pr42006.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr42142.c.s b/src/binaryen/test/torture-s/pr42142.c.s new file mode 100644 index 0000000000..daef2e162c --- /dev/null +++ b/src/binaryen/test/torture-s/pr42142.c.s @@ -0,0 +1,51 @@ + .text + .file "pr42142.c" + .section .text.sort,"ax",@progbits + .hidden sort # -- Begin function sort + .globl sort + .type sort,@function +sort: # @sort + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 2 + i32.const $push0=, 1 + i32.const $push8=, 1 + i32.lt_s $push1=, $0, $pop8 + i32.select $push3=, $pop2, $pop0, $pop1 + i32.const $push6=, 0 + i32.const $push4=, 10 + i32.lt_s $push5=, $0, $pop4 + i32.select $push7=, $pop3, $pop6, $pop5 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end0: + .size sort, .Lfunc_end0-sort + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 5 + i32.call $push1=, sort@FUNCTION, $pop0 + i32.const $push2=, 1 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr42154.c.s b/src/binaryen/test/torture-s/pr42154.c.s new file mode 100644 index 0000000000..0ceeb873b4 --- /dev/null +++ b/src/binaryen/test/torture-s/pr42154.c.s @@ -0,0 +1,43 @@ + .text + .file "pr42154.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 255 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 97 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 97 + call foo@FUNCTION, $pop0 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr42231.c.s b/src/binaryen/test/torture-s/pr42231.c.s new file mode 100644 index 0000000000..c89ca4464f --- /dev/null +++ b/src/binaryen/test/torture-s/pr42231.c.s @@ -0,0 +1,100 @@ + .text + .file "pr42231.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.call $push1=, CallFunctionRec@FUNCTION, $pop0 + i32.eqz $push8=, $pop1 + br_if 0, $pop8 # 0: down to label0 +# BB#1: # %land.rhs.i + i32.const $push2=, 0 + call storemax@FUNCTION, $pop2 +.LBB0_2: # %CallFunction.exit + end_block # label0: + block + i32.const $push6=, 0 + i32.load $push3=, max($pop6) + i32.const $push4=, 10 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label1 +# BB#3: # %if.end + i32.const $push7=, 0 + return $pop7 +.LBB0_4: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.CallFunctionRec,"ax",@progbits + .type CallFunctionRec,@function # -- Begin function CallFunctionRec +CallFunctionRec: # @CallFunctionRec + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + call storemax@FUNCTION, $0 + block + block + i32.eqz $push5=, $0 + br_if 0, $pop5 # 0: down to label3 +# BB#1: # %if.end + i32.const $1=, 1 + i32.const $push0=, 9 + i32.gt_s $push1=, $0, $pop0 + br_if 1, $pop1 # 1: down to label2 +# BB#2: # %if.then1 + i32.const $push2=, 1 + i32.add $push3=, $0, $pop2 + i32.call $drop=, CallFunctionRec@FUNCTION, $pop3 + i32.const $push4=, 1 + return $pop4 +.LBB1_3: + end_block # label3: + i32.const $1=, 0 +.LBB1_4: # %return + end_block # label2: + copy_local $push6=, $1 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end1: + .size CallFunctionRec, .Lfunc_end1-CallFunctionRec + # -- End function + .section .text.storemax,"ax",@progbits + .type storemax,@function # -- Begin function storemax +storemax: # @storemax + .param i32 +# BB#0: # %entry + block + i32.const $push2=, 0 + i32.load $push0=, max($pop2) + i32.ge_s $push1=, $pop0, $0 + br_if 0, $pop1 # 0: down to label4 +# BB#1: # %if.then + i32.const $push3=, 0 + i32.store max($pop3), $0 +.LBB2_2: # %if.end + end_block # label4: + # fallthrough-return + .endfunc +.Lfunc_end2: + .size storemax, .Lfunc_end2-storemax + # -- End function + .type max,@object # @max + .section .bss.max,"aw",@nobits + .p2align 2 +max: + .int32 0 # 0x0 + .size max, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr42248.c.s b/src/binaryen/test/torture-s/pr42248.c.s new file mode 100644 index 0000000000..61cecfcc25 --- /dev/null +++ b/src/binaryen/test/torture-s/pr42248.c.s @@ -0,0 +1,76 @@ + .text + .file "pr42248.c" + .section .text.check,"ax",@progbits + .hidden check # -- Begin function check + .globl check + .type check,@function +check: # @check + .param i32, i32 +# BB#0: # %entry + block + f64.load $push3=, 0($0) + f64.load $push2=, 0($1) + f64.ne $push4=, $pop3, $pop2 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %entry + f64.load $push0=, 8($0) + f64.load $push1=, 8($1) + f64.ne $push5=, $pop0, $pop1 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end + return +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size check, .Lfunc_end0-check + # -- End function + .section .text.init,"ax",@progbits + .hidden init # -- Begin function init + .globl init + .type init,@function +init: # @init + .param i32, i32 +# BB#0: # %entry + i64.load $push0=, 0($1) + i64.store 0($0), $pop0 + i64.load $push1=, 8($1) + i64.store 8($0), $pop1 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size init, .Lfunc_end1-init + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i64.const $push0=, 0 + i64.store g1s+8($pop1), $pop0 + i32.const $push4=, 0 + i64.const $push2=, 4607182418800017408 + i64.store g1s($pop4), $pop2 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden g1s # @g1s + .type g1s,@object + .section .bss.g1s,"aw",@nobits + .globl g1s + .p2align 3 +g1s: + .skip 32 + .size g1s, 32 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr42269-2.c.s b/src/binaryen/test/torture-s/pr42269-2.c.s new file mode 100644 index 0000000000..ae9c5532fa --- /dev/null +++ b/src/binaryen/test/torture-s/pr42269-2.c.s @@ -0,0 +1,46 @@ + .text + .file "pr42269-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $push1=, s($pop0) + i64.call $push2=, foo@FUNCTION, $pop1 + i64.const $push3=, -1 + i64.ne $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.foo,"ax",@progbits + .type foo,@function # -- Begin function foo +foo: # @foo + .param i32 + .result i64 +# BB#0: # %entry + i64.extend_u/i32 $push0=, $0 + i64.const $push1=, 48 + i64.shl $push2=, $pop0, $pop1 + i64.const $push4=, 48 + i64.shr_s $push3=, $pop2, $pop4 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .hidden s # @s + .type s,@object + .section .data.s,"aw",@progbits + .globl s + .p2align 1 +s: + .int16 65535 # 0xffff + .size s, 2 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr42512.c.s b/src/binaryen/test/torture-s/pr42512.c.s new file mode 100644 index 0000000000..cec5461e41 --- /dev/null +++ b/src/binaryen/test/torture-s/pr42512.c.s @@ -0,0 +1,59 @@ + .text + .file "pr42512.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load16_u $2=, g_3($pop0) + i32.const $1=, -1 +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push10=, 65535 + i32.and $push2=, $2, $pop10 + i32.or $2=, $1, $pop2 + i32.const $push9=, 255 + i32.add $push1=, $1, $pop9 + i32.const $push8=, 255 + i32.and $push7=, $pop1, $pop8 + tee_local $push6=, $0=, $pop7 + copy_local $1=, $pop6 + br_if 0, $0 # 0: up to label0 +# BB#2: # %for.end + end_loop + i32.const $push12=, 0 + i32.store16 g_3($pop12), $2 + block + i32.const $push3=, 65535 + i32.and $push4=, $2, $pop3 + i32.const $push11=, 65535 + i32.ne $push5=, $pop4, $pop11 + br_if 0, $pop5 # 0: down to label1 +# BB#3: # %if.end + i32.const $push13=, 0 + return $pop13 +.LBB0_4: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden g_3 # @g_3 + .type g_3,@object + .section .bss.g_3,"aw",@nobits + .globl g_3 + .p2align 1 +g_3: + .int16 0 # 0x0 + .size g_3, 2 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr42544.c.s b/src/binaryen/test/torture-s/pr42544.c.s new file mode 100644 index 0000000000..e1bd754eba --- /dev/null +++ b/src/binaryen/test/torture-s/pr42544.c.s @@ -0,0 +1,17 @@ + .text + .file "pr42544.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr42570.c.s b/src/binaryen/test/torture-s/pr42570.c.s new file mode 100644 index 0000000000..27ec759774 --- /dev/null +++ b/src/binaryen/test/torture-s/pr42570.c.s @@ -0,0 +1,24 @@ + .text + .file "pr42570.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden foo # @foo + .type foo,@object + .section .bss.foo,"aw",@nobits + .globl foo +foo: + .size foo, 0 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr42614.c.s b/src/binaryen/test/torture-s/pr42614.c.s new file mode 100644 index 0000000000..5ddbf4519f --- /dev/null +++ b/src/binaryen/test/torture-s/pr42614.c.s @@ -0,0 +1,74 @@ + .text + .file "pr42614.c" + .section .text.init,"ax",@progbits + .hidden init # -- Begin function init + .globl init + .type init,@function +init: # @init + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.call $push1=, malloc@FUNCTION, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size init, .Lfunc_end0-init + # -- End function + .section .text.expect_func,"ax",@progbits + .hidden expect_func # -- Begin function expect_func + .globl expect_func + .type expect_func,@function +expect_func: # @expect_func + .param i32, i32 +# BB#0: # %entry + block + i32.eqz $push0=, $0 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + i32.eqz $push1=, $1 + br_if 0, $pop1 # 0: down to label0 +# BB#2: # %if.end6 + return +.LBB1_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size expect_func, .Lfunc_end1-expect_func + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push13=, $pop2, $pop4 + tee_local $push12=, $0=, $pop13 + i32.store __stack_pointer($pop5), $pop12 + i32.const $push0=, 0 + i32.store8 15($0), $pop0 + i32.const $push1=, 1 + i32.const $push9=, 15 + i32.add $push10=, $0, $pop9 + call expect_func@FUNCTION, $pop1, $pop10 + i32.const $push8=, 0 + i32.const $push6=, 16 + i32.add $push7=, $0, $pop6 + i32.store __stack_pointer($pop8), $pop7 + i32.const $push11=, 0 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype malloc, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr42691.c.s b/src/binaryen/test/torture-s/pr42691.c.s new file mode 100644 index 0000000000..a8f507e5aa --- /dev/null +++ b/src/binaryen/test/torture-s/pr42691.c.s @@ -0,0 +1,106 @@ + .text + .file "pr42691.c" + .section .text.add,"ax",@progbits + .hidden add # -- Begin function add + .globl add + .type add,@function +add: # @add + .param i32, i32 + .result i32 + .local f64, f64 +# BB#0: # %entry + block + block + f64.load $push8=, 0($1) + tee_local $push7=, $3=, $pop8 + f64.load $push6=, 0($0) + tee_local $push5=, $2=, $pop6 + f64.eq $push1=, $pop7, $pop5 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %if.end.preheader + i32.const $push9=, 8 + i32.add $1=, $1, $pop9 +.LBB0_2: # %if.end + # =>This Inner Loop Header: Depth=1 + loop # label2: + f64.const $push10=, infinity + f64.ne $push2=, $3, $pop10 + br_if 2, $pop2 # 2: down to label0 +# BB#3: # %while.cond + # in Loop: Header=BB0_2 Depth=1 + f64.load $3=, 0($1) + i32.const $push11=, 8 + i32.add $push0=, $1, $pop11 + copy_local $1=, $pop0 + f64.ne $push3=, $3, $2 + br_if 0, $pop3 # 0: up to label2 +.LBB0_4: # %if.end10 + end_loop + end_block # label1: + i32.const $push4=, 0 + return $pop4 +.LBB0_5: # %if.then3 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size add, .Lfunc_end0-add + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, f64, i32 +# BB#0: # %if.end.lr.ph.i + i32.const $push9=, 0 + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 16 + i32.sub $push15=, $pop6, $pop8 + tee_local $push14=, $2=, $pop15 + i32.store __stack_pointer($pop9), $pop14 + i64.const $push1=, 4627167142146473984 + i64.store 8($2), $pop1 + i64.const $push2=, 9218868437227405312 + i64.store 0($2), $pop2 + i32.const $push13=, 8 + i32.or $0=, $2, $pop13 + f64.const $1=, infinity +.LBB1_1: # %if.end.i + # =>This Inner Loop Header: Depth=1 + block + loop # label4: + f64.const $push16=, infinity + f64.ne $push3=, $1, $pop16 + br_if 1, $pop3 # 1: down to label3 +# BB#2: # %while.cond.i + # in Loop: Header=BB1_1 Depth=1 + f64.load $1=, 0($0) + i32.const $push18=, 8 + i32.add $push0=, $0, $pop18 + copy_local $0=, $pop0 + f64.const $push17=, 0x1.7p4 + f64.ne $push4=, $1, $pop17 + br_if 0, $pop4 # 0: up to label4 +# BB#3: # %add.exit + end_loop + i32.const $push12=, 0 + i32.const $push10=, 16 + i32.add $push11=, $2, $pop10 + i32.store __stack_pointer($pop12), $pop11 + i32.const $push5=, 0 + return $pop5 +.LBB1_4: # %if.then3.i + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr42721.c.s b/src/binaryen/test/torture-s/pr42721.c.s new file mode 100644 index 0000000000..b860977b44 --- /dev/null +++ b/src/binaryen/test/torture-s/pr42721.c.s @@ -0,0 +1,40 @@ + .text + .file "pr42721.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push4=, 0 + i32.load $push3=, b($pop4) + tee_local $push2=, $0=, $pop3 + i32.const $push0=, 1 + i32.xor $push1=, $pop2, $pop0 + i32.store b($pop5), $pop1 + block + br_if 0, $0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 0 + return $pop6 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type b,@object # @b + .section .bss.b,"aw",@nobits + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr42833.c.s b/src/binaryen/test/torture-s/pr42833.c.s new file mode 100644 index 0000000000..c86c40b97c --- /dev/null +++ b/src/binaryen/test/torture-s/pr42833.c.s @@ -0,0 +1,247 @@ + .text + .file "pr42833.c" + .section .text.helper_neon_rshl_s8,"ax",@progbits + .hidden helper_neon_rshl_s8 # -- Begin function helper_neon_rshl_s8 + .globl helper_neon_rshl_s8 + .type helper_neon_rshl_s8,@function +helper_neon_rshl_s8: # @helper_neon_rshl_s8 + .param i32, i32 + .result i32 + .local i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $5=, 0 + i32.const $4=, 0 + block + i32.const $push88=, 24 + i32.shl $push87=, $1, $pop88 + tee_local $push86=, $6=, $pop87 + i32.const $push1=, 117440512 + i32.gt_s $push2=, $pop86, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.else + block + i32.const $push3=, -134217729 + i32.gt_s $push4=, $6, $pop3 + br_if 0, $pop4 # 0: down to label1 +# BB#2: # %if.then13 + i32.const $push16=, 24 + i32.shl $push17=, $0, $pop16 + i32.const $push18=, 31 + i32.shr_s $4=, $pop17, $pop18 + br 1 # 1: down to label0 +.LBB0_3: # %if.else18 + end_block # label1: + i32.const $4=, 0 + i32.const $push91=, 24 + i32.shr_s $push90=, $6, $pop91 + tee_local $push89=, $7=, $pop90 + i32.const $push5=, -8 + i32.eq $push6=, $pop89, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#4: # %if.else34 + i32.const $push7=, 24 + i32.shl $push8=, $0, $pop7 + i32.const $push93=, 24 + i32.shr_s $4=, $pop8, $pop93 + block + i32.const $push92=, -1 + i32.le_s $push9=, $6, $pop92 + br_if 0, $pop9 # 0: down to label2 +# BB#5: # %if.else48 + i32.shl $4=, $4, $7 + br 1 # 1: down to label0 +.LBB0_6: # %if.then38 + end_block # label2: + i32.const $push13=, 1 + i32.const $push94=, -1 + i32.xor $push12=, $7, $pop94 + i32.shl $push14=, $pop13, $pop12 + i32.add $push15=, $pop14, $4 + i32.const $push10=, 0 + i32.sub $push11=, $pop10, $7 + i32.shr_s $4=, $pop15, $pop11 +.LBB0_7: # %if.end57 + end_block # label0: + block + i32.const $push99=, 16 + i32.shl $push19=, $1, $pop99 + i32.const $push98=, 24 + i32.shr_s $push97=, $pop19, $pop98 + tee_local $push96=, $6=, $pop97 + i32.const $push95=, 7 + i32.gt_s $push20=, $pop96, $pop95 + br_if 0, $pop20 # 0: down to label3 +# BB#8: # %if.else67 + i32.const $push0=, 8 + i32.shr_u $7=, $0, $pop0 + block + i32.const $push21=, -9 + i32.gt_s $push22=, $6, $pop21 + br_if 0, $pop22 # 0: down to label4 +# BB#9: # %if.then71 + i32.const $push34=, 24 + i32.shl $push35=, $7, $pop34 + i32.const $push36=, 31 + i32.shr_s $5=, $pop35, $pop36 + br 1 # 1: down to label3 +.LBB0_10: # %if.else77 + end_block # label4: + i32.const $push23=, -8 + i32.eq $push24=, $6, $pop23 + br_if 0, $pop24 # 0: down to label3 +# BB#11: # %if.else95 + i32.const $push25=, 24 + i32.shl $push26=, $7, $pop25 + i32.const $push101=, 24 + i32.shr_s $5=, $pop26, $pop101 + block + i32.const $push100=, -1 + i32.le_s $push27=, $6, $pop100 + br_if 0, $pop27 # 0: down to label5 +# BB#12: # %if.else111 + i32.shl $5=, $5, $6 + br 1 # 1: down to label3 +.LBB0_13: # %if.then99 + end_block # label5: + i32.const $push31=, 1 + i32.const $push102=, -1 + i32.xor $push30=, $6, $pop102 + i32.shl $push32=, $pop31, $pop30 + i32.add $push33=, $pop32, $5 + i32.const $push28=, 0 + i32.sub $push29=, $pop28, $6 + i32.shr_s $5=, $pop33, $pop29 +.LBB0_14: # %if.end121 + end_block # label3: + i32.const $7=, 0 + i32.const $6=, 0 + block + i32.const $push37=, 8 + i32.shl $push38=, $1, $pop37 + i32.const $push106=, 24 + i32.shr_s $push105=, $pop38, $pop106 + tee_local $push104=, $3=, $pop105 + i32.const $push103=, 7 + i32.gt_s $push39=, $pop104, $pop103 + br_if 0, $pop39 # 0: down to label6 +# BB#15: # %if.else131 + i32.const $push107=, 16 + i32.shr_u $2=, $0, $pop107 + block + i32.const $push40=, -9 + i32.gt_s $push41=, $3, $pop40 + br_if 0, $pop41 # 0: down to label7 +# BB#16: # %if.then135 + i32.const $push53=, 24 + i32.shl $push54=, $2, $pop53 + i32.const $push55=, 31 + i32.shr_s $6=, $pop54, $pop55 + br 1 # 1: down to label6 +.LBB0_17: # %if.else141 + end_block # label7: + i32.const $6=, 0 + i32.const $push42=, -8 + i32.eq $push43=, $3, $pop42 + br_if 0, $pop43 # 0: down to label6 +# BB#18: # %if.else159 + i32.const $push44=, 24 + i32.shl $push45=, $2, $pop44 + i32.const $push109=, 24 + i32.shr_s $6=, $pop45, $pop109 + block + i32.const $push108=, -1 + i32.le_s $push46=, $3, $pop108 + br_if 0, $pop46 # 0: down to label8 +# BB#19: # %if.else175 + i32.shl $6=, $6, $3 + br 1 # 1: down to label6 +.LBB0_20: # %if.then163 + end_block # label8: + i32.const $push50=, 1 + i32.const $push110=, -1 + i32.xor $push49=, $3, $pop110 + i32.shl $push51=, $pop50, $pop49 + i32.add $push52=, $pop51, $6 + i32.const $push47=, 0 + i32.sub $push48=, $pop47, $3 + i32.shr_s $6=, $pop52, $pop48 +.LBB0_21: # %if.end185 + end_block # label6: + block + i32.const $push113=, 24 + i32.shr_s $push112=, $1, $pop113 + tee_local $push111=, $1=, $pop112 + i32.const $push56=, 7 + i32.gt_s $push57=, $pop111, $pop56 + br_if 0, $pop57 # 0: down to label9 +# BB#22: # %if.else196 + block + i32.const $push58=, -9 + i32.gt_s $push59=, $1, $pop58 + br_if 0, $pop59 # 0: down to label10 +# BB#23: # %if.then200 + i32.const $push70=, 31 + i32.shr_s $7=, $0, $pop70 + br 1 # 1: down to label9 +.LBB0_24: # %if.else206 + end_block # label10: + i32.const $push60=, -8 + i32.eq $push61=, $1, $pop60 + br_if 0, $pop61 # 0: down to label9 +# BB#25: # %if.else224 + i32.const $push62=, 24 + i32.shr_s $0=, $0, $pop62 + block + i32.const $push114=, -1 + i32.le_s $push63=, $1, $pop114 + br_if 0, $pop63 # 0: down to label11 +# BB#26: # %if.else240 + i32.shl $7=, $0, $1 + br 1 # 1: down to label9 +.LBB0_27: # %if.then228 + end_block # label11: + i32.const $push67=, 1 + i32.const $push115=, -1 + i32.xor $push66=, $1, $pop115 + i32.shl $push68=, $pop67, $pop66 + i32.add $push69=, $pop68, $0 + i32.const $push64=, 0 + i32.sub $push65=, $pop64, $1 + i32.shr_s $7=, $pop69, $pop65 +.LBB0_28: # %if.end250 + end_block # label9: + i32.const $push73=, 8 + i32.shl $push74=, $5, $pop73 + i32.const $push75=, 65280 + i32.and $push76=, $pop74, $pop75 + i32.const $push71=, 255 + i32.and $push72=, $4, $pop71 + i32.or $push77=, $pop76, $pop72 + i32.const $push78=, 16 + i32.shl $push79=, $6, $pop78 + i32.const $push80=, 16711680 + i32.and $push81=, $pop79, $pop80 + i32.or $push82=, $pop77, $pop81 + i32.const $push83=, 24 + i32.shl $push84=, $7, $pop83 + i32.or $push85=, $pop82, $pop84 + # fallthrough-return: $pop85 + .endfunc +.Lfunc_end0: + .size helper_neon_rshl_s8, .Lfunc_end0-helper_neon_rshl_s8 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr43008.c.s b/src/binaryen/test/torture-s/pr43008.c.s new file mode 100644 index 0000000000..8b30f73229 --- /dev/null +++ b/src/binaryen/test/torture-s/pr43008.c.s @@ -0,0 +1,72 @@ + .text + .file "pr43008.c" + .section .text.my_alloc,"ax",@progbits + .hidden my_alloc # -- Begin function my_alloc + .globl my_alloc + .type my_alloc,@function +my_alloc: # @my_alloc + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.call $push3=, __builtin_malloc@FUNCTION, $pop0 + tee_local $push2=, $0=, $pop3 + i32.const $push1=, i + i32.store 0($pop2), $pop1 + copy_local $push4=, $0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size my_alloc, .Lfunc_end0-my_alloc + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.call $push12=, __builtin_malloc@FUNCTION, $pop0 + tee_local $push11=, $0=, $pop12 + i32.const $push1=, i + i32.store 0($pop11), $pop1 + i32.const $push10=, 4 + i32.call $push2=, __builtin_malloc@FUNCTION, $pop10 + i32.const $push9=, i + i32.store 0($pop2), $pop9 + i32.load $push8=, 0($0) + tee_local $push7=, $0=, $pop8 + i32.const $push3=, 1 + i32.store 0($pop7), $pop3 + i32.const $push6=, 0 + i32.const $push5=, 0 + i32.store i($pop6), $pop5 + block + i32.load $push4=, 0($0) + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + i32.const $push13=, 0 + return $pop13 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype __builtin_malloc, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr43220.c.s b/src/binaryen/test/torture-s/pr43220.c.s new file mode 100644 index 0000000000..7369bee1e6 --- /dev/null +++ b/src/binaryen/test/torture-s/pr43220.c.s @@ -0,0 +1,88 @@ + .text + .file "pr43220.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push13=, 0 + i32.load $push15=, __stack_pointer($pop13) + tee_local $push14=, $3=, $pop15 + copy_local $drop=, $pop14 + i32.const $2=, 0 +.LBB0_1: # %lab + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push42=, 1000 + i32.rem_s $push1=, $2, $pop42 + i32.const $push41=, 2 + i32.shl $push40=, $pop1, $pop41 + tee_local $push39=, $0=, $pop40 + i32.const $push38=, 19 + i32.add $push2=, $pop39, $pop38 + i32.const $push37=, -16 + i32.and $push3=, $pop2, $pop37 + i32.sub $push36=, $3, $pop3 + tee_local $push35=, $1=, $pop36 + copy_local $drop=, $pop35 + i32.const $push34=, 1 + i32.store 0($1), $pop34 + i32.const $push33=, 0 + i32.store p($pop33), $1 + i32.add $push5=, $1, $0 + i32.const $push32=, 2 + i32.store 0($pop5), $pop32 + copy_local $push4=, $3 + copy_local $push31=, $pop4 + tee_local $push30=, $3=, $pop31 + i32.const $push29=, 1 + i32.add $push6=, $2, $pop29 + i32.const $push28=, 1000 + i32.rem_s $push7=, $pop6, $pop28 + i32.const $push27=, 2 + i32.shl $push26=, $pop7, $pop27 + tee_local $push25=, $0=, $pop26 + i32.const $push24=, 19 + i32.add $push8=, $pop25, $pop24 + i32.const $push23=, -16 + i32.and $push9=, $pop8, $pop23 + i32.sub $push22=, $pop30, $pop9 + tee_local $push21=, $1=, $pop22 + copy_local $drop=, $pop21 + i32.const $push20=, 1 + i32.store 0($1), $pop20 + i32.const $push19=, 0 + i32.store p($pop19), $1 + i32.add $push11=, $1, $0 + i32.const $push18=, 2 + i32.store 0($pop11), $pop18 + i32.const $push17=, 999998 + i32.lt_u $1=, $2, $pop17 + copy_local $push10=, $3 + copy_local $3=, $pop10 + i32.const $push16=, 2 + i32.add $push0=, $2, $pop16 + copy_local $2=, $pop0 + br_if 0, $1 # 0: up to label0 +# BB#2: # %if.end + end_loop + i32.const $push12=, 0 + # fallthrough-return: $pop12 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden p # @p + .type p,@object + .section .bss.p,"aw",@nobits + .globl p + .p2align 2 +p: + .int32 0 + .size p, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr43236.c.s b/src/binaryen/test/torture-s/pr43236.c.s new file mode 100644 index 0000000000..834e122ae7 --- /dev/null +++ b/src/binaryen/test/torture-s/pr43236.c.s @@ -0,0 +1,114 @@ + .text + .file "pr43236.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push21=, 0 + i32.const $push19=, 0 + i32.load $push18=, __stack_pointer($pop19) + i32.const $push20=, 96 + i32.sub $push64=, $pop18, $pop20 + tee_local $push63=, $0=, $pop64 + i32.store __stack_pointer($pop21), $pop63 + i32.const $push25=, 64 + i32.add $push26=, $0, $pop25 + i32.const $push0=, 16 + i32.add $push1=, $pop26, $pop0 + i64.const $push2=, 72340172838076673 + i64.store 0($pop1), $pop2 + i32.const $push27=, 32 + i32.add $push28=, $0, $pop27 + i32.const $push62=, 16 + i32.add $push3=, $pop28, $pop62 + i64.const $push61=, 72340172838076673 + i64.store 0($pop3), $pop61 + i32.const $push60=, 16 + i32.add $push4=, $0, $pop60 + i64.const $push59=, 72340172838076673 + i64.store 0($pop4), $pop59 + i32.const $push29=, 64 + i32.add $push30=, $0, $pop29 + i32.const $push5=, 22 + i32.add $push6=, $pop30, $pop5 + i64.const $push58=, 72340172838076673 + i64.store 0($pop6):p2align=1, $pop58 + i32.const $push31=, 32 + i32.add $push32=, $0, $pop31 + i32.const $push57=, 22 + i32.add $push7=, $pop32, $pop57 + i64.const $push56=, 72340172838076673 + i64.store 0($pop7):p2align=1, $pop56 + i32.const $push55=, 22 + i32.add $push8=, $0, $pop55 + i64.const $push54=, 72340172838076673 + i64.store 0($pop8):p2align=1, $pop54 + i32.const $push33=, 64 + i32.add $push34=, $0, $pop33 + i32.const $push9=, 18 + i32.add $push10=, $pop34, $pop9 + i32.const $push11=, 0 + i32.store16 0($pop10), $pop11 + i32.const $push35=, 32 + i32.add $push36=, $0, $pop35 + i32.const $push53=, 18 + i32.add $push12=, $pop36, $pop53 + i32.const $push52=, 0 + i32.store16 0($pop12), $pop52 + i32.const $push51=, 18 + i32.add $push13=, $0, $pop51 + i32.const $push50=, 0 + i32.store16 0($pop13), $pop50 + i64.const $push49=, 72340172838076673 + i64.store 72($0), $pop49 + i64.const $push48=, 72340172838076673 + i64.store 40($0), $pop48 + i64.const $push47=, 72340172838076673 + i64.store 8($0), $pop47 + i64.const $push46=, 72340172838076673 + i64.store 64($0), $pop46 + i64.const $push45=, 72340172838076673 + i64.store 32($0), $pop45 + i64.const $push44=, 72340172838076673 + i64.store 0($0), $pop44 + i64.const $push14=, 0 + i64.store 74($0):p2align=1, $pop14 + i64.const $push43=, 0 + i64.store 42($0):p2align=1, $pop43 + i64.const $push42=, 0 + i64.store 10($0):p2align=1, $pop42 + block + i32.const $push37=, 64 + i32.add $push38=, $0, $pop37 + i32.const $push41=, 30 + i32.call $push15=, memcmp@FUNCTION, $pop38, $0, $pop41 + br_if 0, $pop15 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.const $push39=, 32 + i32.add $push40=, $0, $pop39 + i32.const $push65=, 30 + i32.call $push16=, memcmp@FUNCTION, $pop40, $0, $pop65 + br_if 0, $pop16 # 0: down to label0 +# BB#2: # %if.end + i32.const $push24=, 0 + i32.const $push22=, 96 + i32.add $push23=, $0, $pop22 + i32.store __stack_pointer($pop24), $pop23 + i32.const $push17=, 0 + return $pop17 +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype memcmp, i32, i32, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr43269.c.s b/src/binaryen/test/torture-s/pr43269.c.s new file mode 100644 index 0000000000..840ed9bf83 --- /dev/null +++ b/src/binaryen/test/torture-s/pr43269.c.s @@ -0,0 +1,83 @@ + .text + .file "pr43269.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call func_32@FUNCTION + block + i32.const $push3=, 0 + i32.load $push0=, g_261($pop3) + i32.const $push1=, -1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.func_32,"ax",@progbits + .type func_32,@function # -- Begin function func_32 +func_32: # @func_32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, -1 + i32.store g_261($pop1), $pop0 + block + i32.const $push5=, 0 + i32.load $push2=, g_211($pop5) + i32.const $push4=, -1 + i32.eq $push3=, $pop2, $pop4 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %for.end + return +.LBB1_2: # %if.else + # =>This Inner Loop Header: Depth=1 + end_block # label1: + loop # label2: + br 0 # 0: up to label2 +.LBB1_3: + end_loop + .endfunc +.Lfunc_end1: + .size func_32, .Lfunc_end1-func_32 + # -- End function + .hidden g_261 # @g_261 + .type g_261,@object + .section .bss.g_261,"aw",@nobits + .globl g_261 + .p2align 2 +g_261: + .int32 0 # 0x0 + .size g_261, 4 + + .hidden g_21 # @g_21 + .type g_21,@object + .section .bss.g_21,"aw",@nobits + .globl g_21 + .p2align 2 +g_21: + .int32 0 # 0x0 + .size g_21, 4 + + .hidden g_211 # @g_211 + .type g_211,@object + .section .bss.g_211,"aw",@nobits + .globl g_211 + .p2align 2 +g_211: + .int32 0 # 0x0 + .size g_211, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr43385.c.s b/src/binaryen/test/torture-s/pr43385.c.s new file mode 100644 index 0000000000..99168bdde2 --- /dev/null +++ b/src/binaryen/test/torture-s/pr43385.c.s @@ -0,0 +1,151 @@ + .text + .file "pr43385.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + block + i32.eqz $push5=, $0 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %entry + i32.eqz $push6=, $1 + br_if 0, $pop6 # 0: down to label0 +# BB#2: # %if.then + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, e($pop4) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store e($pop0), $pop3 +.LBB0_3: # %if.end + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.ne $push2=, $0, $pop0 + i32.const $push4=, 0 + i32.ne $push1=, $1, $pop4 + i32.and $push3=, $pop2, $pop1 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $0=, 0 + #APP + #NO_APP + i32.const $push0=, 2 + i32.add $push30=, $0, $pop0 + tee_local $push29=, $1=, $pop30 + i32.const $push28=, 1 + i32.add $push27=, $0, $pop28 + tee_local $push26=, $2=, $pop27 + call foo@FUNCTION, $pop29, $pop26 + block + i32.const $push25=, 0 + i32.load $push1=, e($pop25) + i32.const $push24=, 1 + i32.ne $push2=, $pop1, $pop24 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %if.end + call foo@FUNCTION, $1, $0 + i32.const $push32=, 0 + i32.load $push3=, e($pop32) + i32.const $push31=, 1 + i32.ne $push4=, $pop3, $pop31 + br_if 0, $pop4 # 0: down to label1 +# BB#2: # %if.end5 + call foo@FUNCTION, $2, $2 + i32.const $push34=, 0 + i32.load $push5=, e($pop34) + i32.const $push33=, 2 + i32.ne $push6=, $pop5, $pop33 + br_if 0, $pop6 # 0: down to label1 +# BB#3: # %if.end10 + call foo@FUNCTION, $2, $0 + i32.const $push36=, 0 + i32.load $push7=, e($pop36) + i32.const $push35=, 2 + i32.ne $push8=, $pop7, $pop35 + br_if 0, $pop8 # 0: down to label1 +# BB#4: # %if.end14 + call foo@FUNCTION, $0, $2 + i32.const $push38=, 0 + i32.load $push9=, e($pop38) + i32.const $push37=, 2 + i32.ne $push10=, $pop9, $pop37 + br_if 0, $pop10 # 0: down to label1 +# BB#5: # %if.end18 + call foo@FUNCTION, $0, $0 + i32.const $push40=, 0 + i32.load $push11=, e($pop40) + i32.const $push39=, 2 + i32.ne $push12=, $pop11, $pop39 + br_if 0, $pop12 # 0: down to label1 +# BB#6: # %if.end21 + i32.call $push13=, bar@FUNCTION, $1, $2 + i32.const $push14=, 1 + i32.ne $push15=, $pop13, $pop14 + br_if 0, $pop15 # 0: down to label1 +# BB#7: # %if.end26 + i32.call $push16=, bar@FUNCTION, $1, $0 + br_if 0, $pop16 # 0: down to label1 +# BB#8: # %if.end31 + i32.call $push17=, bar@FUNCTION, $2, $2 + i32.const $push18=, 1 + i32.ne $push19=, $pop17, $pop18 + br_if 0, $pop19 # 0: down to label1 +# BB#9: # %if.end37 + i32.call $push20=, bar@FUNCTION, $2, $0 + br_if 0, $pop20 # 0: down to label1 +# BB#10: # %if.end42 + i32.call $push21=, bar@FUNCTION, $0, $2 + br_if 0, $pop21 # 0: down to label1 +# BB#11: # %if.end47 + i32.call $push22=, bar@FUNCTION, $0, $0 + br_if 0, $pop22 # 0: down to label1 +# BB#12: # %if.end51 + i32.const $push23=, 0 + return $pop23 +.LBB2_13: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e + .p2align 2 +e: + .int32 0 # 0x0 + .size e, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr43438.c.s b/src/binaryen/test/torture-s/pr43438.c.s new file mode 100644 index 0000000000..7b187bc7b5 --- /dev/null +++ b/src/binaryen/test/torture-s/pr43438.c.s @@ -0,0 +1,27 @@ + .text + .file "pr43438.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store g_9($pop1), $pop0 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type g_9,@object # @g_9 + .section .bss.g_9,"aw",@nobits + .p2align 2 +g_9: + .int32 0 # 0x0 + .size g_9, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr43560.c.s b/src/binaryen/test/torture-s/pr43560.c.s new file mode 100644 index 0000000000..945cf2a7bb --- /dev/null +++ b/src/binaryen/test/torture-s/pr43560.c.s @@ -0,0 +1,80 @@ + .text + .file "pr43560.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32 + .local i32, i32, i32 +# BB#0: # %entry + block + i32.load $push8=, 4($0) + tee_local $push7=, $3=, $pop8 + i32.const $push0=, 2 + i32.lt_s $push1=, $pop7, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %land.rhs.preheader + i32.const $push5=, 4 + i32.add $2=, $0, $pop5 +.LBB0_2: # %land.rhs + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push15=, -1 + i32.add $push14=, $3, $pop15 + tee_local $push13=, $3=, $pop14 + i32.add $push2=, $0, $pop13 + i32.const $push12=, 8 + i32.add $push11=, $pop2, $pop12 + tee_local $push10=, $1=, $pop11 + i32.load8_u $push3=, 0($pop10) + i32.const $push9=, 47 + i32.ne $push4=, $pop3, $pop9 + br_if 1, $pop4 # 1: down to label0 +# BB#3: # %while.body + # in Loop: Header=BB0_2 Depth=1 + i32.store 0($2), $3 + i32.const $push19=, 0 + i32.store8 0($1), $pop19 + i32.load $push18=, 0($2) + tee_local $push17=, $3=, $pop18 + i32.const $push16=, 1 + i32.gt_s $push6=, $pop17, $pop16 + br_if 0, $pop6 # 0: up to label1 +.LBB0_4: # %while.end + end_loop + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $0=, s + #APP + #NO_APP + call test@FUNCTION, $0 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden s # @s + .type s,@object + .section .rodata.s,"a",@progbits + .globl s + .p2align 2 +s: + .skip 20 + .size s, 20 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr43629.c.s b/src/binaryen/test/torture-s/pr43629.c.s new file mode 100644 index 0000000000..cf22a33de3 --- /dev/null +++ b/src/binaryen/test/torture-s/pr43629.c.s @@ -0,0 +1,36 @@ + .text + .file "pr43629.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push1=, 0 + i32.load $push0=, flag($pop1) + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end4 + i32.const $push2=, 0 + return $pop2 +.LBB0_2: # %if.then3 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden flag # @flag + .type flag,@object + .section .bss.flag,"aw",@nobits + .globl flag + .p2align 2 +flag: + .int32 0 # 0x0 + .size flag, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr43783.c.s b/src/binaryen/test/torture-s/pr43783.c.s new file mode 100644 index 0000000000..3706ffe530 --- /dev/null +++ b/src/binaryen/test/torture-s/pr43783.c.s @@ -0,0 +1,122 @@ + .text + .file "pr43783.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i64.const $push0=, 1 + i64.store bid_Kx192+32($pop1), $pop0 + i32.const $push64=, 0 + i64.const $push2=, 0 + i64.store bid_Kx192+8($pop64), $pop2 + i32.const $push63=, 0 + i64.const $push62=, 0 + i64.store bid_Kx192+56($pop63), $pop62 + i32.const $push61=, 0 + i64.const $push60=, 0 + i64.store bid_Kx192+80($pop61), $pop60 + i32.const $push59=, 0 + i64.const $push58=, 0 + i64.store bid_Kx192+104($pop59), $pop58 + i32.const $push57=, 0 + i64.const $push56=, 0 + i64.store bid_Kx192+128($pop57), $pop56 + i32.const $push55=, 0 + i64.const $push54=, 0 + i64.store bid_Kx192+152($pop55), $pop54 + i32.const $push53=, 0 + i64.const $push52=, 0 + i64.store bid_Kx192+176($pop53), $pop52 + i32.const $push51=, 0 + i64.const $push50=, 0 + i64.store bid_Kx192+200($pop51), $pop50 + i32.const $push49=, 0 + i64.const $push48=, 0 + i64.store bid_Kx192+224($pop49), $pop48 + i32.const $push47=, 0 + i64.const $push46=, 0 + i64.store bid_Kx192+248($pop47), $pop46 + i32.const $push45=, 0 + i64.const $push44=, 0 + i64.store bid_Kx192+272($pop45), $pop44 + i32.const $push43=, 0 + i64.const $push42=, 0 + i64.store bid_Kx192+296($pop43), $pop42 + i32.const $push41=, 0 + i64.const $push40=, 0 + i64.store bid_Kx192+320($pop41), $pop40 + i32.const $push39=, 0 + i64.const $push38=, 0 + i64.store bid_Kx192+344($pop39), $pop38 + i32.const $push37=, 0 + i64.const $push36=, 0 + i64.store bid_Kx192+368($pop37), $pop36 + i32.const $push35=, 0 + i64.const $push34=, 0 + i64.store bid_Kx192+392($pop35), $pop34 + i32.const $push33=, 0 + i64.const $push32=, 0 + i64.store bid_Kx192+416($pop33), $pop32 + i32.const $push31=, 0 + i64.const $push30=, 0 + i64.store bid_Kx192+440($pop31), $pop30 + i32.const $push29=, 0 + i64.const $push28=, 0 + i64.store bid_Kx192+488($pop29), $pop28 + i32.const $push27=, 0 + i64.const $push26=, 0 + i64.store bid_Kx192+464($pop27), $pop26 + i32.const $push25=, 0 + i64.const $push24=, 0 + i64.store bid_Kx192+512($pop25), $pop24 + i32.const $push23=, 0 + i64.const $push22=, 0 + i64.store bid_Kx192+536($pop23), $pop22 + i32.const $push21=, 0 + i64.const $push20=, 0 + i64.store bid_Kx192+560($pop21), $pop20 + i32.const $push19=, 0 + i64.const $push18=, 0 + i64.store bid_Kx192+584($pop19), $pop18 + i32.const $push17=, 0 + i64.const $push16=, 0 + i64.store bid_Kx192+608($pop17), $pop16 + i32.const $push15=, 0 + i64.const $push14=, 0 + i64.store bid_Kx192+632($pop15), $pop14 + i32.const $push13=, 0 + i64.const $push12=, 0 + i64.store bid_Kx192+656($pop13), $pop12 + i32.const $push11=, 0 + i64.const $push10=, 0 + i64.store bid_Kx192+680($pop11), $pop10 + i32.const $push9=, 0 + i64.const $push8=, 0 + i64.store bid_Kx192+704($pop9), $pop8 + i32.const $push7=, 0 + i64.const $push6=, 0 + i64.store bid_Kx192+728($pop7), $pop6 + i32.const $push5=, 0 + i64.const $push4=, 0 + i64.store bid_Kx192+752($pop5), $pop4 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden bid_Kx192 # @bid_Kx192 + .type bid_Kx192,@object + .section .bss.bid_Kx192,"aw",@nobits + .globl bid_Kx192 + .p2align 4 +bid_Kx192: + .skip 768 + .size bid_Kx192, 768 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr43784.c.s b/src/binaryen/test/torture-s/pr43784.c.s new file mode 100644 index 0000000000..dc9d30bbe3 --- /dev/null +++ b/src/binaryen/test/torture-s/pr43784.c.s @@ -0,0 +1,94 @@ + .text + .file "pr43784.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 256 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $2=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.const $1=, 0 +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push22=, v + i32.add $push0=, $1, $pop22 + i32.store8 0($pop0), $1 + i32.const $push21=, 1 + i32.add $push20=, $1, $pop21 + tee_local $push19=, $1=, $pop20 + i32.const $push18=, 256 + i32.ne $push1=, $pop19, $pop18 + br_if 0, $pop1 # 0: up to label0 +# BB#2: # %for.end + end_loop + call rp@FUNCTION, $2 + i32.const $push3=, v+4 + i32.const $push2=, 256 + i32.call $drop=, memcpy@FUNCTION, $pop3, $2, $pop2 + i32.const $1=, -1 +.LBB0_3: # %for.body4 + # =>This Inner Loop Header: Depth=1 + block + loop # label2: + i32.const $push26=, 1 + i32.add $push25=, $1, $pop26 + tee_local $push24=, $0=, $pop25 + i32.const $push23=, v+5 + i32.add $push4=, $1, $pop23 + i32.load8_u $push5=, 0($pop4) + i32.ne $push6=, $pop24, $pop5 + br_if 1, $pop6 # 1: down to label1 +# BB#4: # %for.cond1 + # in Loop: Header=BB0_3 Depth=1 + copy_local $1=, $0 + i32.const $push27=, 254 + i32.le_u $push7=, $0, $pop27 + br_if 0, $pop7 # 0: up to label2 +# BB#5: # %for.end12 + end_loop + i32.const $push15=, 0 + i32.const $push13=, 256 + i32.add $push14=, $2, $pop13 + i32.store __stack_pointer($pop15), $pop14 + i32.const $push8=, 0 + return $pop8 +.LBB0_6: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.rp,"ax",@progbits + .type rp,@function # -- Begin function rp +rp: # @rp + .param i32 +# BB#0: # %entry + i32.const $push1=, v + i32.const $push0=, 256 + i32.call $drop=, memcpy@FUNCTION, $0, $pop1, $pop0 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size rp, .Lfunc_end1-rp + # -- End function + .type v,@object # @v + .section .bss.v,"aw",@nobits + .p2align 2 +v: + .skip 260 + .size v, 260 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr43835.c.s b/src/binaryen/test/torture-s/pr43835.c.s new file mode 100644 index 0000000000..5305996540 --- /dev/null +++ b/src/binaryen/test/torture-s/pr43835.c.s @@ -0,0 +1,98 @@ + .text + .file "pr43835.c" + .section .text.Parrot_gc_mark_PMC_alive_fun,"ax",@progbits + .hidden Parrot_gc_mark_PMC_alive_fun # -- Begin function Parrot_gc_mark_PMC_alive_fun + .globl Parrot_gc_mark_PMC_alive_fun + .type Parrot_gc_mark_PMC_alive_fun,@function +Parrot_gc_mark_PMC_alive_fun: # @Parrot_gc_mark_PMC_alive_fun + .param i32, i32 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size Parrot_gc_mark_PMC_alive_fun, .Lfunc_end0-Parrot_gc_mark_PMC_alive_fun + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + call mark_cell@FUNCTION, $0, $1 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.mark_cell,"ax",@progbits + .type mark_cell,@function # -- Begin function mark_cell +mark_cell: # @mark_cell + .param i32, i32 +# BB#0: # %entry + block + block + i32.load $push0=, 8($1) + i32.const $push1=, 4 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %land.lhs.true + i32.load $push9=, 0($1) + tee_local $push8=, $1=, $pop9 + i32.eqz $push10=, $pop8 + br_if 0, $pop10 # 0: down to label1 +# BB#2: # %land.lhs.true1 + i32.const $push3=, 2 + i32.add $push4=, $1, $pop3 + i32.load8_u $push5=, 0($pop4) + i32.const $push6=, 4 + i32.and $push7=, $pop5, $pop6 + i32.eqz $push11=, $pop7 + br_if 1, $pop11 # 1: down to label0 +.LBB2_3: # %if.end + end_block # label1: + return +.LBB2_4: # %if.then + end_block # label0: + call Parrot_gc_mark_PMC_alive_fun@FUNCTION, $1, $1 + unreachable + .endfunc +.Lfunc_end2: + .size mark_cell, .Lfunc_end2-mark_cell + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push13=, $pop3, $pop5 + tee_local $push12=, $0=, $pop13 + i32.store __stack_pointer($pop6), $pop12 + i32.const $push0=, 4 + i32.store 8($0), $pop0 + i64.const $push1=, 180388626432 + i64.store 0($0), $pop1 + i32.const $push10=, 12 + i32.add $push11=, $0, $pop10 + call mark_cell@FUNCTION, $pop11, $0 + i32.const $push9=, 0 + i32.const $push7=, 16 + i32.add $push8=, $0, $pop7 + i32.store __stack_pointer($pop9), $pop8 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr43987.c.s b/src/binaryen/test/torture-s/pr43987.c.s new file mode 100644 index 0000000000..870e7d0a1e --- /dev/null +++ b/src/binaryen/test/torture-s/pr43987.c.s @@ -0,0 +1,49 @@ + .text + .file "pr43987.c" + .section .text.add_input_file,"ax",@progbits + .hidden add_input_file # -- Begin function add_input_file + .globl add_input_file + .type add_input_file,@function +add_input_file: # @add_input_file + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, B+4($pop0) + i32.store 0($pop1), $0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size add_input_file, .Lfunc_end0-add_input_file + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push6=, $pop1, $pop3 + i32.const $push4=, 12 + i32.add $push5=, $pop6, $pop4 + i32.store B+4($pop0), $pop5 + i32.const $push7=, 0 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden B # @B + .type B,@object + .section .bss.B,"aw",@nobits + .globl B + .p2align 4 +B: + .skip 1024 + .size B, 1024 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr44164.c.s b/src/binaryen/test/torture-s/pr44164.c.s new file mode 100644 index 0000000000..139a457dfb --- /dev/null +++ b/src/binaryen/test/torture-s/pr44164.c.s @@ -0,0 +1,61 @@ + .text + .file "pr44164.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.load $1=, 0($0) + i32.const $push0=, 0 + i32.const $push3=, 0 + i32.store a($pop0), $pop3 + i32.load $push1=, 0($0) + i32.add $push2=, $1, $pop1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push0=, 1 + i32.store a($pop5), $pop0 + block + i32.const $push1=, a + i32.call $push2=, foo@FUNCTION, $pop1 + i32.const $push4=, 1 + i32.ne $push3=, $pop2, $pop4 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 0 + return $pop6 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .skip 4 + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr44202-1.c.s b/src/binaryen/test/torture-s/pr44202-1.c.s new file mode 100644 index 0000000000..a8da094a00 --- /dev/null +++ b/src/binaryen/test/torture-s/pr44202-1.c.s @@ -0,0 +1,110 @@ + .text + .file "pr44202-1.c" + .section .text.add512,"ax",@progbits + .hidden add512 # -- Begin function add512 + .globl add512 + .type add512,@function +add512: # @add512 + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push0=, 512 + i32.add $push2=, $0, $pop0 + tee_local $push1=, $2=, $pop2 + i32.eqz $push3=, $pop1 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.then + i32.store 0($1), $0 +.LBB0_2: # %if.end + end_block # label0: + copy_local $push4=, $2 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size add512, .Lfunc_end0-add512 + # -- End function + .section .text.add513,"ax",@progbits + .hidden add513 # -- Begin function add513 + .globl add513 + .type add513,@function +add513: # @add513 + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push0=, 513 + i32.add $push2=, $0, $pop0 + tee_local $push1=, $2=, $pop2 + i32.eqz $push3=, $pop1 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %if.end + return $2 +.LBB1_2: # %if.then + end_block # label1: + i32.store 0($1), $0 + copy_local $push4=, $2 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end1: + .size add513, .Lfunc_end1-add513 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push11=, 0 + i32.const $push9=, 0 + i32.load $push8=, __stack_pointer($pop9) + i32.const $push10=, 16 + i32.sub $push19=, $pop8, $pop10 + tee_local $push18=, $0=, $pop19 + i32.store __stack_pointer($pop11), $pop18 + i32.const $push17=, -1 + i32.store 12($0), $pop17 + i32.const $push16=, -1 + i32.store 8($0), $pop16 + block + i32.const $push1=, -512 + i32.const $push12=, 12 + i32.add $push13=, $0, $pop12 + i32.call $push2=, add512@FUNCTION, $pop1, $pop13 + br_if 0, $pop2 # 0: down to label2 +# BB#1: # %entry + i32.load $push0=, 12($0) + i32.const $push20=, -1 + i32.ne $push3=, $pop0, $pop20 + br_if 0, $pop3 # 0: down to label2 +# BB#2: # %lor.lhs.false2 + i32.const $push21=, -513 + i32.const $push14=, 8 + i32.add $push15=, $0, $pop14 + i32.call $push5=, add513@FUNCTION, $pop21, $pop15 + br_if 0, $pop5 # 0: down to label2 +# BB#3: # %lor.lhs.false2 + i32.load $push4=, 8($0) + i32.const $push22=, -513 + i32.ne $push6=, $pop4, $pop22 + br_if 0, $pop6 # 0: down to label2 +# BB#4: # %if.end + i32.const $push7=, 0 + call exit@FUNCTION, $pop7 + unreachable +.LBB2_5: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr44468.c.s b/src/binaryen/test/torture-s/pr44468.c.s new file mode 100644 index 0000000000..86fc81ce82 --- /dev/null +++ b/src/binaryen/test/torture-s/pr44468.c.s @@ -0,0 +1,119 @@ + .text + .file "pr44468.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.store s+4($pop0), $pop4 + i32.const $push1=, 3 + i32.store 4($0), $pop1 + i32.const $push3=, 0 + i32.load $push2=, s+4($pop3) + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.store s+4($pop0), $pop4 + i32.const $push1=, 3 + i32.store 4($0), $pop1 + i32.const $push3=, 0 + i32.load $push2=, s+4($pop3) + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size test2, .Lfunc_end1-test2 + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.store s+4($pop0), $pop4 + i32.const $push1=, 3 + i32.store 4($0), $pop1 + i32.const $push3=, 0 + i32.load $push2=, s+4($pop3) + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end2: + .size test3, .Lfunc_end2-test3 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push12=, 0 + i64.const $push11=, 8589934593 + i64.store s+4($pop12):p2align=2, $pop11 + block + i32.const $push10=, s + i32.call $push0=, test1@FUNCTION, $pop10 + i32.const $push9=, 3 + i32.ne $push1=, $pop0, $pop9 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push16=, 0 + i64.const $push15=, 8589934593 + i64.store s+4($pop16):p2align=2, $pop15 + i32.const $push14=, s + i32.call $push2=, test2@FUNCTION, $pop14 + i32.const $push13=, 3 + i32.ne $push3=, $pop2, $pop13 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %if.end4 + i32.const $push17=, 0 + i64.const $push4=, 8589934593 + i64.store s+4($pop17):p2align=2, $pop4 + i32.const $push5=, s + i32.call $push6=, test3@FUNCTION, $pop5 + i32.const $push7=, 3 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %if.end8 + i32.const $push18=, 0 + return $pop18 +.LBB3_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 2 +s: + .skip 12 + .size s, 12 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr44555.c.s b/src/binaryen/test/torture-s/pr44555.c.s new file mode 100644 index 0000000000..0dddacc832 --- /dev/null +++ b/src/binaryen/test/torture-s/pr44555.c.s @@ -0,0 +1,32 @@ + .text + .file "pr44555.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.ne $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr44575.c.s b/src/binaryen/test/torture-s/pr44575.c.s new file mode 100644 index 0000000000..8a13047e42 --- /dev/null +++ b/src/binaryen/test/torture-s/pr44575.c.s @@ -0,0 +1,166 @@ + .text + .file "pr44575.c" + .section .text.check,"ax",@progbits + .hidden check # -- Begin function check + .globl check + .type check,@function +check: # @check + .param i32, i32 + .local f32, i32, i32 +# BB#0: # %entry + i32.const $push20=, 0 + i32.load $push19=, __stack_pointer($pop20) + i32.const $push21=, 16 + i32.sub $push26=, $pop19, $pop21 + tee_local $push25=, $4=, $pop26 + i32.store 12($pop25), $1 + i32.const $push24=, 0 + f32.load $2=, a+32($pop24) + block + block + block + block + i32.const $push0=, 4 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 2 + i32.or $push23=, $pop1, $pop2 + tee_local $push22=, $1=, $pop23 + i32.const $push3=, 18 + i32.ne $push4=, $pop22, $pop3 + br_if 0, $pop4 # 0: down to label3 +# BB#1: # %land.lhs.true + i32.load $push29=, 12($4) + tee_local $push28=, $3=, $pop29 + i32.const $push5=, 12 + i32.add $push6=, $pop28, $pop5 + i32.store 12($4), $pop6 + i32.const $push27=, 0 + i32.load $0=, fails($pop27) + f32.load $push7=, 8($3) + f32.ne $push8=, $2, $pop7 + br_if 1, $pop8 # 1: down to label2 +# BB#2: # %if.end + br_if 3, $0 # 3: down to label0 + br 2 # 2: down to label1 +.LBB0_3: # %sw.epilog.thread + end_block # label3: + i32.const $push30=, 0 + i32.load $0=, fails($pop30) +.LBB0_4: # %if.end.sink.split + end_block # label2: + i32.const $push10=, 0 + i32.const $push9=, 1 + i32.add $push32=, $0, $pop9 + tee_local $push31=, $0=, $pop32 + i32.store fails($pop10), $pop31 + br_if 1, $0 # 1: down to label0 +.LBB0_5: # %for.cond + end_block # label1: + block + i32.const $push11=, 18 + i32.ne $push12=, $1, $pop11 + br_if 0, $pop12 # 0: down to label4 +# BB#6: # %land.lhs.true.1 + i32.load $push34=, 12($4) + tee_local $push33=, $0=, $pop34 + i32.const $push13=, 12 + i32.add $push14=, $pop33, $pop13 + i32.store 12($4), $pop14 + f32.load $push15=, 8($0) + f32.eq $push16=, $2, $pop15 + br_if 1, $pop16 # 1: down to label0 +.LBB0_7: # %if.end.1 + end_block # label4: + i32.const $push18=, 0 + i32.const $push17=, 1 + i32.store fails($pop18), $pop17 +.LBB0_8: # %for.end + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size check, .Lfunc_end0-check + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64, i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 48 + i32.sub $push30=, $pop6, $pop8 + tee_local $push29=, $1=, $pop30 + i32.store __stack_pointer($pop9), $pop29 + i32.const $push28=, 0 + i32.const $push0=, -952139264 + i32.store a+32($pop28), $pop0 + i32.const $push13=, 32 + i32.add $push14=, $1, $pop13 + i32.const $push1=, 8 + i32.add $push2=, $pop14, $pop1 + i32.const $push27=, -952139264 + i32.store 0($pop2), $pop27 + i32.const $push15=, 16 + i32.add $push16=, $1, $pop15 + i32.const $push26=, 8 + i32.add $push3=, $pop16, $pop26 + i32.const $push25=, -952139264 + i32.store 0($pop3), $pop25 + i32.const $push24=, 0 + i64.load $push23=, a+24($pop24) + tee_local $push22=, $0=, $pop23 + i64.store 32($1), $pop22 + i64.store 16($1), $0 + i32.const $push17=, 16 + i32.add $push18=, $1, $pop17 + i32.store 4($1), $pop18 + i32.const $push19=, 32 + i32.add $push20=, $1, $pop19 + i32.store 0($1), $pop20 + i32.const $push4=, 1 + call check@FUNCTION, $pop4, $1 + block + i32.const $push21=, 0 + i32.load $push5=, fails($pop21) + br_if 0, $pop5 # 0: down to label5 +# BB#1: # %if.end + i32.const $push12=, 0 + i32.const $push10=, 48 + i32.add $push11=, $1, $pop10 + i32.store __stack_pointer($pop12), $pop11 + i32.const $push31=, 0 + return $pop31 +.LBB1_2: # %if.then + end_block # label5: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden fails # @fails + .type fails,@object + .section .bss.fails,"aw",@nobits + .globl fails + .p2align 2 +fails: + .int32 0 # 0x0 + .size fails, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 4 +a: + .skip 60 + .size a, 60 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr44683.c.s b/src/binaryen/test/torture-s/pr44683.c.s new file mode 100644 index 0000000000..6d1880a9bc --- /dev/null +++ b/src/binaryen/test/torture-s/pr44683.c.s @@ -0,0 +1,63 @@ + .text + .file "pr44683.c" + .section .text.copysign_bug,"ax",@progbits + .hidden copysign_bug # -- Begin function copysign_bug + .globl copysign_bug + .type copysign_bug,@function +copysign_bug: # @copysign_bug + .param f64 + .result i32 +# BB#0: # %entry + block + f64.const $push10=, 0x0p0 + f64.eq $push2=, $0, $pop10 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %entry + f64.const $push1=, 0x1p-1 + f64.mul $push0=, $0, $pop1 + f64.ne $push3=, $pop0, $0 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %return + i32.const $push11=, 1 + return $pop11 +.LBB0_3: # %if.end + end_block # label0: + i32.const $push8=, 2 + i32.const $push7=, 3 + f64.const $push4=, 0x1p0 + f64.copysign $push5=, $pop4, $0 + f64.const $push12=, 0x0p0 + f64.lt $push6=, $pop5, $pop12 + i32.select $push9=, $pop8, $pop7, $pop6 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end0: + .size copysign_bug, .Lfunc_end0-copysign_bug + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + f64.const $push0=, -0x0p0 + i32.call $push1=, copysign_bug@FUNCTION, $pop0 + i32.const $push2=, 2 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB1_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr44828.c.s b/src/binaryen/test/torture-s/pr44828.c.s new file mode 100644 index 0000000000..c97130071a --- /dev/null +++ b/src/binaryen/test/torture-s/pr44828.c.s @@ -0,0 +1,42 @@ + .text + .file "pr44828.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push7=, 0 + i32.load8_u $push0=, a($pop7) + i32.const $push1=, -939524096 + i32.mul $push2=, $pop0, $pop1 + i32.const $push3=, 24 + i32.shr_s $push4=, $pop2, $pop3 + i32.const $push5=, 1 + i32.ge_s $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %if.end + i32.const $push8=, 0 + return $pop8 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 274686410 # 0x105f61ca + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr44852.c.s b/src/binaryen/test/torture-s/pr44852.c.s new file mode 100644 index 0000000000..72fd9f8d88 --- /dev/null +++ b/src/binaryen/test/torture-s/pr44852.c.s @@ -0,0 +1,143 @@ + .text + .file "pr44852.c" + .section .text.sf,"ax",@progbits + .hidden sf # -- Begin function sf + .globl sf + .type sf,@function +sf: # @sf + .param i32, i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + #APP + #NO_APP + block + block + block + i32.const $push12=, -1 + i32.add $push11=, $0, $pop12 + tee_local $push10=, $2=, $pop11 + i32.load8_u $push9=, 0($pop10) + tee_local $push8=, $3=, $pop9 + i32.const $push7=, 57 + i32.ne $push0=, $pop8, $pop7 + br_if 0, $pop0 # 0: down to label2 +.LBB0_1: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.eq $push1=, $1, $2 + br_if 2, $pop1 # 2: down to label1 +# BB#2: # %while.cond + # in Loop: Header=BB0_1 Depth=1 + i32.const $push18=, -1 + i32.add $push17=, $2, $pop18 + tee_local $push16=, $2=, $pop17 + i32.load8_u $push15=, 0($pop16) + tee_local $push14=, $3=, $pop15 + i32.const $push13=, 57 + i32.eq $push2=, $pop14, $pop13 + br_if 0, $pop2 # 0: up to label3 +# BB#3: # %while.end.loopexit + end_loop + i32.const $push3=, 1 + i32.add $0=, $2, $pop3 +.LBB0_4: # %while.end + end_block # label2: + copy_local $1=, $2 + br 1 # 1: down to label0 +.LBB0_5: # %if.then + end_block # label1: + i32.const $3=, 48 + i32.const $push19=, 48 + i32.store8 0($1), $pop19 + i32.const $push4=, 1 + i32.add $0=, $2, $pop4 +.LBB0_6: # %while.end + end_block # label0: + i32.const $push5=, 1 + i32.add $push6=, $3, $pop5 + i32.store8 0($1), $pop6 + copy_local $push20=, $0 + # fallthrough-return: $pop20 + .endfunc +.Lfunc_end0: + .size sf, .Lfunc_end0-sf + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push20=, 0 + i32.const $push18=, 0 + i32.load $push17=, __stack_pointer($pop18) + i32.const $push19=, 16 + i32.sub $push35=, $pop17, $pop19 + tee_local $push34=, $0=, $pop35 + i32.store __stack_pointer($pop20), $pop34 + i32.const $push2=, 14 + i32.add $push3=, $0, $pop2 + i32.const $push0=, 0 + i32.load8_u $push1=, .Lmain.s+6($pop0) + i32.store8 0($pop3), $pop1 + i32.const $push5=, 12 + i32.add $push6=, $0, $pop5 + i32.const $push33=, 0 + i32.load16_u $push4=, .Lmain.s+4($pop33):p2align=0 + i32.store16 0($pop6), $pop4 + i32.const $push32=, 0 + i32.load $push7=, .Lmain.s($pop32):p2align=0 + i32.store 8($0), $pop7 + block + i32.const $push26=, 8 + i32.add $push27=, $0, $pop26 + i32.const $push10=, 2 + i32.or $push11=, $pop27, $pop10 + i32.const $push28=, 8 + i32.add $push29=, $0, $pop28 + i32.call $push12=, sf@FUNCTION, $pop11, $pop29 + i32.const $push24=, 8 + i32.add $push25=, $0, $pop24 + i32.const $push8=, 1 + i32.or $push9=, $pop25, $pop8 + i32.ne $push13=, $pop12, $pop9 + br_if 0, $pop13 # 0: down to label4 +# BB#1: # %lor.lhs.false + i32.const $push30=, 8 + i32.add $push31=, $0, $pop30 + i32.const $push14=, .L.str + i32.call $push15=, strcmp@FUNCTION, $pop31, $pop14 + br_if 0, $pop15 # 0: down to label4 +# BB#2: # %if.end + i32.const $push23=, 0 + i32.const $push21=, 16 + i32.add $push22=, $0, $pop21 + i32.store __stack_pointer($pop23), $pop22 + i32.const $push16=, 0 + return $pop16 +.LBB1_3: # %if.then + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .Lmain.s,@object # @main.s + .section .rodata.str1.1,"aMS",@progbits,1 +.Lmain.s: + .asciz "999999" + .size .Lmain.s, 7 + + .type .L.str,@object # @.str +.L.str: + .asciz "199999" + .size .L.str, 7 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strcmp, i32, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr44858.c.s b/src/binaryen/test/torture-s/pr44858.c.s new file mode 100644 index 0000000000..472d98e1b0 --- /dev/null +++ b/src/binaryen/test/torture-s/pr44858.c.s @@ -0,0 +1,82 @@ + .text + .file "pr44858.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i64 +# BB#0: # %entry + i32.div_s $push0=, $0, $1 + i64.extend_s/i32 $push1=, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load $push1=, a($pop5) + i32.const $push4=, 0 + i32.ne $push2=, $pop1, $pop4 + i32.store b($pop0), $pop2 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.call $drop=, bar@FUNCTION + block + i32.const $push3=, 0 + i32.load $push0=, b($pop3) + i32.const $push1=, 1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 3 # 0x3 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .data.b,"aw",@progbits + .globl b + .p2align 2 +b: + .int32 1 # 0x1 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr44942.c.s b/src/binaryen/test/torture-s/pr44942.c.s new file mode 100644 index 0000000000..23ea3355fb --- /dev/null +++ b/src/binaryen/test/torture-s/pr44942.c.s @@ -0,0 +1,212 @@ + .text + .file "pr44942.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i32, i32, i32, i32, i32, i32, i32, i64, i64, i32 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push13=, $pop5, $pop7 + tee_local $push12=, $10=, $pop13 + i32.store __stack_pointer($pop8), $pop12 + i32.const $push0=, 4 + i32.add $push1=, $9, $pop0 + i32.store 12($10), $pop1 + block + i32.load $push2=, 0($9) + i32.const $push3=, 1234 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $10, $pop9 + i32.store __stack_pointer($pop11), $pop10 + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param i32, i32, i32, i32, i32, i32, i32, i64, i64, i32, i64, i64, i32, i64, i64, i32, i64, i64, i32 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push13=, $pop5, $pop7 + tee_local $push12=, $19=, $pop13 + i32.store __stack_pointer($pop8), $pop12 + i32.const $push0=, 4 + i32.add $push1=, $18, $pop0 + i32.store 12($19), $pop1 + block + i32.load $push2=, 0($18) + i32.const $push3=, 1234 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label1 +# BB#1: # %if.end + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $19, $pop9 + i32.store __stack_pointer($pop11), $pop10 + return +.LBB1_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size test2, .Lfunc_end1-test2 + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .param f64, f64, f64, f64, f64, f64, f64, i64, i64, i32 + .local i32 +# BB#0: # %entry + i32.const $push11=, 0 + i32.const $push9=, 0 + i32.load $push8=, __stack_pointer($pop9) + i32.const $push10=, 16 + i32.sub $push18=, $pop8, $pop10 + tee_local $push17=, $10=, $pop18 + i32.store __stack_pointer($pop11), $pop17 + i32.const $push0=, 7 + i32.add $push1=, $9, $pop0 + i32.const $push2=, -8 + i32.and $push16=, $pop1, $pop2 + tee_local $push15=, $9=, $pop16 + i32.const $push3=, 8 + i32.add $push4=, $pop15, $pop3 + i32.store 12($10), $pop4 + block + f64.load $push5=, 0($9) + f64.const $push6=, 0x1.348p10 + f64.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label2 +# BB#1: # %if.end + i32.const $push14=, 0 + i32.const $push12=, 16 + i32.add $push13=, $10, $pop12 + i32.store __stack_pointer($pop14), $pop13 + return +.LBB2_2: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size test3, .Lfunc_end2-test3 + # -- End function + .section .text.test4,"ax",@progbits + .hidden test4 # -- Begin function test4 + .globl test4 + .type test4,@function +test4: # @test4 + .param f64, f64, f64, f64, f64, f64, f64, i64, i64, f64, i64, i64, f64, i64, i64, f64, i64, i64, i32 + .local i32 +# BB#0: # %entry + i32.const $push11=, 0 + i32.const $push9=, 0 + i32.load $push8=, __stack_pointer($pop9) + i32.const $push10=, 16 + i32.sub $push18=, $pop8, $pop10 + tee_local $push17=, $19=, $pop18 + i32.store __stack_pointer($pop11), $pop17 + i32.const $push0=, 7 + i32.add $push1=, $18, $pop0 + i32.const $push2=, -8 + i32.and $push16=, $pop1, $pop2 + tee_local $push15=, $18=, $pop16 + i32.const $push3=, 8 + i32.add $push4=, $pop15, $pop3 + i32.store 12($19), $pop4 + block + f64.load $push5=, 0($18) + f64.const $push6=, 0x1.348p10 + f64.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label3 +# BB#1: # %if.end + i32.const $push14=, 0 + i32.const $push12=, 16 + i32.add $push13=, $19, $pop12 + i32.store __stack_pointer($pop14), $pop13 + return +.LBB3_2: # %if.then + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size test4, .Lfunc_end3-test4 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local f64, i64, i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 128 + i32.sub $push25=, $pop6, $pop8 + tee_local $push24=, $2=, $pop25 + i32.store __stack_pointer($pop9), $pop24 + i32.const $push0=, 1234 + i32.store 120($2), $pop0 + i32.const $push13=, 112 + i32.add $push14=, $2, $pop13 + call test1@FUNCTION, $2, $2, $2, $2, $2, $2, $2, $1, $pop14 + i32.const $push15=, 64 + i32.add $push16=, $2, $pop15 + i32.const $push1=, 32 + i32.add $push2=, $pop16, $pop1 + i32.const $push23=, 1234 + i32.store 0($pop2), $pop23 + i32.const $push17=, 64 + i32.add $push18=, $2, $pop17 + call test2@FUNCTION, $2, $2, $2, $2, $2, $2, $2, $1, $1, $2, $1, $1, $2, $1, $pop18 + i64.const $push3=, 4653142004841054208 + i64.store 56($2), $pop3 + i32.const $push19=, 48 + i32.add $push20=, $2, $pop19 + call test3@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $1, $pop20 + i32.const $push22=, 32 + i32.add $push4=, $2, $pop22 + i64.const $push21=, 4653142004841054208 + i64.store 0($pop4), $pop21 + call test4@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $1, $1, $0, $1, $1, $0, $1, $2 + i32.const $push12=, 0 + i32.const $push10=, 128 + i32.add $push11=, $2, $pop10 + i32.store __stack_pointer($pop12), $pop11 + i32.const $push5=, 0 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr45034.c.s b/src/binaryen/test/torture-s/pr45034.c.s new file mode 100644 index 0000000000..b4d431ea3d --- /dev/null +++ b/src/binaryen/test/torture-s/pr45034.c.s @@ -0,0 +1,124 @@ + .text + .file "pr45034.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 +# BB#0: # %entry + block + i32.const $push0=, 128 + i32.add $push1=, $1, $pop0 + i32.const $push2=, 256 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.test_neg,"ax",@progbits + .hidden test_neg # -- Begin function test_neg + .globl test_neg + .type test_neg,@function +test_neg: # @test_neg + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $1=, -128 + i32.const $0=, -2147483648 +.LBB1_1: # %for.cond + # =>This Inner Loop Header: Depth=1 + loop # label1: + block + i32.const $push10=, 0 + i32.sub $push0=, $pop10, $1 + i32.const $push9=, 24 + i32.shl $push1=, $pop0, $pop9 + i32.const $push8=, 24 + i32.shr_s $push7=, $pop1, $pop8 + tee_local $push6=, $2=, $pop7 + i32.const $push5=, 0 + i32.lt_s $push2=, $pop6, $pop5 + br_if 0, $pop2 # 0: down to label2 +# BB#2: # %cond.true.i + # in Loop: Header=BB1_1 Depth=1 + i32.const $push11=, 24 + i32.shr_s $2=, $0, $pop11 +.LBB1_3: # %fixnum_neg.exit + # in Loop: Header=BB1_1 Depth=1 + end_block # label2: + call foo@FUNCTION, $1, $2, $1 + i32.const $push16=, -16777216 + i32.add $0=, $0, $pop16 + i32.const $push15=, 1 + i32.add $push14=, $1, $pop15 + tee_local $push13=, $1=, $pop14 + i32.const $push12=, 128 + i32.ne $push3=, $pop13, $pop12 + br_if 0, $pop3 # 0: up to label1 +# BB#4: # %for.end + end_loop + i32.const $push4=, 0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end1: + .size test_neg, .Lfunc_end1-test_neg + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $1=, -128 + i32.const $0=, -2147483648 +.LBB2_1: # %for.cond.i + # =>This Inner Loop Header: Depth=1 + loop # label3: + block + i32.const $push10=, 0 + i32.sub $push0=, $pop10, $1 + i32.const $push9=, 24 + i32.shl $push1=, $pop0, $pop9 + i32.const $push8=, 24 + i32.shr_s $push7=, $pop1, $pop8 + tee_local $push6=, $2=, $pop7 + i32.const $push5=, 0 + i32.lt_s $push2=, $pop6, $pop5 + br_if 0, $pop2 # 0: down to label4 +# BB#2: # %cond.true.i.i + # in Loop: Header=BB2_1 Depth=1 + i32.const $push11=, 24 + i32.shr_s $2=, $0, $pop11 +.LBB2_3: # %fixnum_neg.exit.i + # in Loop: Header=BB2_1 Depth=1 + end_block # label4: + call foo@FUNCTION, $1, $2, $1 + i32.const $push16=, -16777216 + i32.add $0=, $0, $pop16 + i32.const $push15=, 1 + i32.add $push14=, $1, $pop15 + tee_local $push13=, $1=, $pop14 + i32.const $push12=, 128 + i32.ne $push3=, $pop13, $pop12 + br_if 0, $pop3 # 0: up to label3 +# BB#4: # %if.end + end_loop + i32.const $push4=, 0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr45070.c.s b/src/binaryen/test/torture-s/pr45070.c.s new file mode 100644 index 0000000000..2040eb22ca --- /dev/null +++ b/src/binaryen/test/torture-s/pr45070.c.s @@ -0,0 +1,141 @@ + .text + .file "pr45070.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $2=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.const $push0=, 0 + i32.store 8($2), $pop0 + i64.const $push1=, 0 + i64.store 0($2), $pop1 + i32.const $1=, -1 +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label1: + i32.call $0=, next@FUNCTION, $2 + block + i32.const $push18=, -1 + i32.ne $push2=, $1, $pop18 + br_if 0, $pop2 # 0: down to label2 +# BB#2: # %for.body + # in Loop: Header=BB0_1 Depth=1 + i32.const $push20=, 65535 + i32.and $push3=, $0, $pop20 + i32.const $push19=, 65535 + i32.ne $push4=, $pop3, $pop19 + br_if 2, $pop4 # 2: down to label0 +.LBB0_3: # %lor.lhs.false + # in Loop: Header=BB0_1 Depth=1 + end_block # label2: + block + i32.const $push21=, -1 + i32.eq $push5=, $1, $pop21 + br_if 0, $pop5 # 0: down to label3 +# BB#4: # %lor.lhs.false + # in Loop: Header=BB0_1 Depth=1 + i32.const $push22=, 65535 + i32.and $push6=, $0, $pop22 + br_if 2, $pop6 # 2: down to label0 +.LBB0_5: # %for.cond + # in Loop: Header=BB0_1 Depth=1 + end_block # label3: + i32.const $push26=, 1 + i32.add $push25=, $1, $pop26 + tee_local $push24=, $1=, $pop25 + i32.const $push23=, 14 + i32.le_u $push7=, $pop24, $pop23 + br_if 0, $pop7 # 0: up to label1 +# BB#6: # %for.end + end_loop + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $2, $pop13 + i32.store __stack_pointer($pop15), $pop14 + i32.const $push8=, 0 + return $pop8 +.LBB0_7: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.next,"ax",@progbits + .type next,@function # -- Begin function next +next: # @next + .param i32 + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $3=, 0 + block + block + i32.load $push1=, 0($0) + i32.load $push0=, 4($0) + i32.lt_s $push2=, $pop1, $pop0 + br_if 0, $pop2 # 0: down to label5 +# BB#1: # %if.then.lr.ph + i32.const $push3=, 8 + i32.add $1=, $0, $pop3 + i32.const $push5=, 4 + i32.add $2=, $0, $pop5 +.LBB1_2: # %if.then + # =>This Inner Loop Header: Depth=1 + loop # label6: + i32.load $push4=, 0($1) + i32.eqz $push14=, $pop4 + br_if 2, $pop14 # 2: down to label4 +# BB#3: # %if.then1 + # in Loop: Header=BB1_2 Depth=1 + i32.const $3=, 0 + i32.const $push13=, 0 + i32.store 0($1), $pop13 + call fetch@FUNCTION, $0 + i32.load $push7=, 0($0) + i32.load $push6=, 0($2) + i32.ge_s $push8=, $pop7, $pop6 + br_if 0, $pop8 # 0: up to label6 +.LBB1_4: # %cleanup + end_loop + end_block # label5: + return $3 +.LBB1_5: # %if.end + end_block # label4: + i32.const $push9=, 8 + i32.add $push10=, $0, $pop9 + i32.const $push11=, 1 + i32.store 0($pop10), $pop11 + i32.const $push12=, 65535 + # fallthrough-return: $pop12 + .endfunc +.Lfunc_end1: + .size next, .Lfunc_end1-next + # -- End function + .section .text.fetch,"ax",@progbits + .type fetch,@function # -- Begin function fetch +fetch: # @fetch + .param i32 +# BB#0: # %entry + i32.const $push0=, 128 + i32.store 4($0), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size fetch, .Lfunc_end2-fetch + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr45262.c.s b/src/binaryen/test/torture-s/pr45262.c.s new file mode 100644 index 0000000000..cd7ffc091d --- /dev/null +++ b/src/binaryen/test/torture-s/pr45262.c.s @@ -0,0 +1,59 @@ + .text + .file "pr45262.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push5=, 1 + i32.const $push0=, 0 + i32.sub $push2=, $pop0, $0 + i32.const $push3=, 31 + i32.shr_u $push4=, $pop2, $pop3 + i32.const $push7=, 0 + i32.lt_s $push1=, $0, $pop7 + i32.select $push6=, $pop5, $pop4, $pop1 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push5=, 1 + i32.const $push0=, 0 + i32.sub $push2=, $pop0, $0 + i32.const $push3=, 31 + i32.shr_u $push4=, $pop2, $pop3 + i32.const $push7=, 0 + i32.lt_s $push1=, $0, $pop7 + i32.select $push6=, $pop5, $pop4, $pop1 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end20 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr45695.c.s b/src/binaryen/test/torture-s/pr45695.c.s new file mode 100644 index 0000000000..fc3ca2ce1a --- /dev/null +++ b/src/binaryen/test/torture-s/pr45695.c.s @@ -0,0 +1,75 @@ + .text + .file "pr45695.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i32 +# BB#0: # %entry + #APP + #NO_APP + # fallthrough-return + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + i32.add $push0=, $2, $1 + call g@FUNCTION, $pop0 + i32.const $push2=, -1 + i32.eq $push1=, $2, $0 + i32.select $push3=, $1, $pop2, $pop1 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $2=, 0 + #APP + #NO_APP + block + i32.const $push11=, 1 + i32.add $push10=, $2, $pop11 + tee_local $push9=, $0=, $pop10 + i32.const $push0=, 4 + i32.add $push8=, $2, $pop0 + tee_local $push7=, $1=, $pop8 + i32.call $push1=, f@FUNCTION, $2, $pop9, $pop7 + i32.const $push2=, -1 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.call $push4=, f@FUNCTION, $1, $0, $1 + i32.const $push12=, 1 + i32.ne $push5=, $pop4, $pop12 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end9 + i32.const $push6=, 0 + return $pop6 +.LBB2_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr46019.c.s b/src/binaryen/test/torture-s/pr46019.c.s new file mode 100644 index 0000000000..fa03a56f99 --- /dev/null +++ b/src/binaryen/test/torture-s/pr46019.c.s @@ -0,0 +1,17 @@ + .text + .file "pr46019.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %for.cond.7 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr46309.c.s b/src/binaryen/test/torture-s/pr46309.c.s new file mode 100644 index 0000000000..7816e04bfa --- /dev/null +++ b/src/binaryen/test/torture-s/pr46309.c.s @@ -0,0 +1,107 @@ + .text + .file "pr46309.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + block + block + i32.load $push12=, 0($0) + tee_local $push11=, $0=, $pop12 + i32.const $push0=, -2 + i32.and $push1=, $pop11, $pop0 + i32.const $push2=, 2 + i32.eq $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %if.then + i32.const $push9=, 1 + i32.ne $push10=, $0, $pop9 + br_if 0, $pop10 # 0: down to label1 +# BB#2: # %if.then + i32.const $push5=, 0 + i32.load $push6=, q($pop5) + i32.load $push7=, 0($pop6) + i32.const $push8=, 263 + i32.and $push4=, $pop7, $pop8 + br_if 1, $pop4 # 1: down to label0 +.LBB0_3: # %if.end + end_block # label1: + return +.LBB0_4: # %cond.true + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push26=, $pop4, $pop6 + tee_local $push25=, $0=, $pop26 + i32.store __stack_pointer($pop7), $pop25 + #APP + #NO_APP + i32.const $push0=, 2 + i32.store 12($0), $pop0 + i32.const $push11=, 12 + i32.add $push12=, $0, $pop11 + call bar@FUNCTION, $pop12 + i32.const $push1=, 3 + i32.store 12($0), $pop1 + i32.const $push13=, 12 + i32.add $push14=, $0, $pop13 + call bar@FUNCTION, $pop14 + i32.const $push2=, 0 + i32.store 12($0), $pop2 + i32.const $push3=, 1 + i32.store 8($0), $pop3 + i32.const $push24=, 0 + i32.const $push15=, 8 + i32.add $push16=, $0, $pop15 + i32.store q($pop24), $pop16 + i32.const $push17=, 12 + i32.add $push18=, $0, $pop17 + call bar@FUNCTION, $pop18 + i32.const $push23=, 1 + i32.store 12($0), $pop23 + i32.const $push22=, 0 + i32.store 8($0), $pop22 + i32.const $push19=, 12 + i32.add $push20=, $0, $pop19 + call bar@FUNCTION, $pop20 + i32.const $push10=, 0 + i32.const $push8=, 16 + i32.add $push9=, $0, $pop8 + i32.store __stack_pointer($pop10), $pop9 + i32.const $push21=, 0 + # fallthrough-return: $pop21 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden q # @q + .type q,@object + .section .bss.q,"aw",@nobits + .globl q + .p2align 2 +q: + .int32 0 + .size q, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr46316.c.s b/src/binaryen/test/torture-s/pr46316.c.s new file mode 100644 index 0000000000..b30f4f27d8 --- /dev/null +++ b/src/binaryen/test/torture-s/pr46316.c.s @@ -0,0 +1,56 @@ + .text + .file "pr46316.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i64 + .result i64 + .local i64 +# BB#0: # %entry + i64.const $push0=, -1 + i64.xor $push12=, $0, $pop0 + tee_local $push11=, $1=, $pop12 + i64.const $push1=, 3 + i64.const $push10=, 3 + i64.gt_s $push2=, $1, $pop10 + i64.select $push3=, $pop11, $pop1, $pop2 + i64.add $push4=, $pop3, $0 + i64.const $push5=, 2 + i64.add $push6=, $pop4, $pop5 + i64.const $push7=, -2 + i64.and $push8=, $pop6, $pop7 + i64.sub $push9=, $0, $pop8 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i64.const $push0=, 0 + i64.call $push1=, foo@FUNCTION, $pop0 + i64.const $push2=, -4 + i64.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr46909-1.c.s b/src/binaryen/test/torture-s/pr46909-1.c.s new file mode 100644 index 0000000000..e63dd1ee42 --- /dev/null +++ b/src/binaryen/test/torture-s/pr46909-1.c.s @@ -0,0 +1,74 @@ + .text + .file "pr46909-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push5=, 1 + i32.const $push12=, 1 + i32.const $push4=, -1 + i32.const $push0=, 2 + i32.or $push1=, $0, $pop0 + i32.const $push2=, 6 + i32.ne $push3=, $pop1, $pop2 + i32.select $push6=, $pop12, $pop4, $pop3 + i32.const $push7=, 4 + i32.or $push8=, $0, $pop7 + i32.const $push11=, 6 + i32.eq $push9=, $pop8, $pop11 + i32.select $push10=, $pop5, $pop6, $pop9 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, -14 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label1: + i32.const $push11=, 4 + i32.add $push10=, $1, $pop11 + tee_local $push9=, $0=, $pop10 + i32.call $push3=, foo@FUNCTION, $pop9 + i32.const $push8=, 1 + i32.eqz $push0=, $1 + i32.const $push7=, 1 + i32.shl $push1=, $pop0, $pop7 + i32.sub $push2=, $pop8, $pop1 + i32.ne $push4=, $pop3, $pop2 + br_if 1, $pop4 # 1: down to label0 +# BB#2: # %for.cond + # in Loop: Header=BB1_1 Depth=1 + i32.const $push13=, 1 + i32.add $1=, $1, $pop13 + i32.const $push12=, 8 + i32.le_s $push5=, $0, $pop12 + br_if 0, $pop5 # 0: up to label1 +# BB#3: # %for.end + end_loop + i32.const $push6=, 0 + return $pop6 +.LBB1_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr46909-2.c.s b/src/binaryen/test/torture-s/pr46909-2.c.s new file mode 100644 index 0000000000..a9bfbc509a --- /dev/null +++ b/src/binaryen/test/torture-s/pr46909-2.c.s @@ -0,0 +1,80 @@ + .text + .file "pr46909-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + block + block + i32.const $push0=, 13 + i32.eq $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %entry + i32.const $1=, 1 + br_if 1, $0 # 1: down to label0 +.LBB0_2: # %if.end + end_block # label1: + i32.const $1=, -1 +.LBB0_3: # %return + end_block # label0: + copy_local $push2=, $1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $2=, -11 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label3: + i32.const $push15=, 12 + i32.eq $0=, $2, $pop15 + i32.const $push14=, -1 + i32.eq $1=, $2, $pop14 + i32.const $push13=, 1 + i32.add $push12=, $2, $pop13 + tee_local $push11=, $2=, $pop12 + i32.call $push4=, foo@FUNCTION, $pop11 + i32.const $push10=, 1 + i32.const $push9=, 1 + i32.shl $push1=, $1, $pop9 + i32.sub $push2=, $pop10, $pop1 + i32.const $push8=, 1 + i32.shl $push0=, $0, $pop8 + i32.sub $push3=, $pop2, $pop0 + i32.ne $push5=, $pop4, $pop3 + br_if 1, $pop5 # 1: down to label2 +# BB#2: # %for.cond + # in Loop: Header=BB1_1 Depth=1 + i32.const $push16=, 28 + i32.le_s $push6=, $2, $pop16 + br_if 0, $pop6 # 0: up to label3 +# BB#3: # %for.end + end_loop + i32.const $push7=, 0 + return $pop7 +.LBB1_4: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr47148.c.s b/src/binaryen/test/torture-s/pr47148.c.s new file mode 100644 index 0000000000..67d2c6acf2 --- /dev/null +++ b/src/binaryen/test/torture-s/pr47148.c.s @@ -0,0 +1,27 @@ + .text + .file "pr47148.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + i32.const $push2=, 0 + i32.store b($pop0), $pop2 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type b,@object # @b + .section .data.b,"aw",@progbits + .p2align 2 +b: + .int32 1 # 0x1 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr47155.c.s b/src/binaryen/test/torture-s/pr47155.c.s new file mode 100644 index 0000000000..9b7b637ca0 --- /dev/null +++ b/src/binaryen/test/torture-s/pr47155.c.s @@ -0,0 +1,38 @@ + .text + .file "pr47155.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store a($pop1), $pop0 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden c # @c + .type c,@object + .section .data.c,"aw",@progbits + .globl c + .p2align 2 +c: + .int32 1 # 0x1 + .size c, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr47237.c.s b/src/binaryen/test/torture-s/pr47237.c.s new file mode 100644 index 0000000000..0f9829a0d0 --- /dev/null +++ b/src/binaryen/test/torture-s/pr47237.c.s @@ -0,0 +1,43 @@ + .text + .file "pr47237.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push2=, foo@FUNCTION + i32.call $push0=, __builtin_apply_args@FUNCTION + i32.const $push1=, 16 + i32.call $drop=, __builtin_apply@FUNCTION, $pop2, $pop0, $pop1 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.foo,"ax",@progbits + .type foo,@function # -- Begin function foo +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 5 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype __builtin_apply, i32 + .functype __builtin_apply_args, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr47299.c.s b/src/binaryen/test/torture-s/pr47299.c.s new file mode 100644 index 0000000000..d093f8eba8 --- /dev/null +++ b/src/binaryen/test/torture-s/pr47299.c.s @@ -0,0 +1,44 @@ + .text + .file "pr47299.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 255 + i32.mul $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 64 + i32.call $push1=, foo@FUNCTION, $pop0 + i32.const $push2=, 16320 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr47337.c.s b/src/binaryen/test/torture-s/pr47337.c.s new file mode 100644 index 0000000000..a1a1030b4b --- /dev/null +++ b/src/binaryen/test/torture-s/pr47337.c.s @@ -0,0 +1,148 @@ + .text + .file "pr47337.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, w($pop0) + i32.const $push2=, .L.str.1 + i32.call $0=, strcmp@FUNCTION, $pop1, $pop2 + i32.const $1=, -1024 +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push44=, a+1024 + i32.add $push3=, $1, $pop44 + i32.const $push43=, 1 + i32.store 0($pop3), $pop43 + i32.const $push42=, 4 + i32.add $push41=, $1, $pop42 + tee_local $push40=, $1=, $pop41 + br_if 0, $pop40 # 0: up to label0 +# BB#2: # %for.end6 + end_loop + i32.const $push46=, 0 + i32.const $push45=, 0 + i32.store d($pop46), $pop45 + block + i32.eqz $push71=, $0 + br_if 0, $pop71 # 0: down to label1 +# BB#3: # %if.then.i + i32.const $push69=, 0 + i32.const $push68=, 0 + i32.load $push4=, b($pop68) + i32.const $push5=, 1 + i32.and $push6=, $pop4, $pop5 + i32.const $push7=, 2 + i32.shl $push8=, $pop6, $pop7 + i32.const $push9=, a + i32.add $push10=, $pop8, $pop9 + i32.load $push11=, 0($pop10) + i32.const $push67=, 1 + i32.and $push12=, $pop11, $pop67 + i32.const $push66=, 2 + i32.shl $push13=, $pop12, $pop66 + i32.const $push65=, a + i32.add $push14=, $pop13, $pop65 + i32.load $push15=, 0($pop14) + i32.const $push64=, 1 + i32.and $push16=, $pop15, $pop64 + i32.const $push63=, 2 + i32.shl $push17=, $pop16, $pop63 + i32.const $push62=, a + i32.add $push18=, $pop17, $pop62 + i32.load $push19=, 0($pop18) + i32.const $push61=, 1 + i32.and $push20=, $pop19, $pop61 + i32.const $push60=, 2 + i32.shl $push21=, $pop20, $pop60 + i32.const $push59=, a + i32.add $push22=, $pop21, $pop59 + i32.load $push23=, 0($pop22) + i32.const $push58=, 1 + i32.and $push24=, $pop23, $pop58 + i32.const $push57=, 2 + i32.shl $push25=, $pop24, $pop57 + i32.const $push56=, a + i32.add $push26=, $pop25, $pop56 + i32.load $push27=, 0($pop26) + i32.const $push55=, 1 + i32.and $push28=, $pop27, $pop55 + i32.const $push54=, 2 + i32.shl $push29=, $pop28, $pop54 + i32.const $push53=, a + i32.add $push30=, $pop29, $pop53 + i32.load $push31=, 0($pop30) + i32.const $push52=, 1 + i32.and $push32=, $pop31, $pop52 + i32.const $push51=, 2 + i32.shl $push33=, $pop32, $pop51 + i32.const $push50=, a + i32.add $push34=, $pop33, $pop50 + i32.load $push35=, 0($pop34) + i32.const $push49=, 1 + i32.and $push36=, $pop35, $pop49 + i32.const $push48=, 2 + i32.shl $push37=, $pop36, $pop48 + i32.const $push47=, a + i32.add $push38=, $pop37, $pop47 + i32.load $push39=, 0($pop38) + i32.store b($pop69), $pop39 +.LBB0_4: # %if.end25 + end_block # label1: + i32.const $push70=, 0 + # fallthrough-return: $pop70 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "2" + .size .L.str, 2 + + .hidden w # @w + .type w,@object + .section .data.w,"aw",@progbits + .globl w + .p2align 2 +w: + .int32 .L.str + .size w, 4 + + .type .L.str.1,@object # @.str.1 + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str.1: + .asciz "1" + .size .L.str.1, 2 + + .type a,@object # @a + .section .bss.a,"aw",@nobits + .p2align 4 +a: + .skip 1024 + .size a, 1024 + + .type d,@object # @d + .section .bss.d,"aw",@nobits + .p2align 2 +d: + .int32 0 # 0x0 + .size d, 4 + + .type b,@object # @b + .section .bss.b,"aw",@nobits + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strcmp, i32, i32, i32 diff --git a/src/binaryen/test/torture-s/pr47538.c.s b/src/binaryen/test/torture-s/pr47538.c.s new file mode 100644 index 0000000000..49f6923c49 --- /dev/null +++ b/src/binaryen/test/torture-s/pr47538.c.s @@ -0,0 +1,398 @@ + .text + .file "pr47538.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .local i32, i32, f64, i32, i32, i32, f64, i32, f64, f64 +# BB#0: # %entry + f64.load $push42=, 0($1) + tee_local $push41=, $11=, $pop42 + f64.store 0($0), $pop41 + f64.load $push40=, 8($1) + tee_local $push39=, $10=, $pop40 + f64.store 8($0), $pop39 + block + block + i32.load $push38=, 20($1) + tee_local $push37=, $2=, $pop38 + i32.eqz $push72=, $pop37 + br_if 0, $pop72 # 0: down to label1 +# BB#1: # %if.else + f64.sub $push1=, $10, $11 + f64.const $push2=, 0x1p-2 + f64.mul $4=, $pop1, $pop2 + i32.const $push0=, 1 + i32.add $push44=, $2, $pop0 + tee_local $push43=, $3=, $pop44 + i32.const $push3=, 2 + i32.ne $push4=, $pop43, $pop3 + br_if 1, $pop4 # 1: down to label0 +# BB#2: # %if.then6 + i32.load $push48=, 16($0) + tee_local $push47=, $0=, $pop48 + i32.load $push32=, 16($1) + f64.load $push33=, 0($pop32) + f64.mul $push46=, $4, $pop33 + tee_local $push45=, $11=, $pop46 + f64.store 8($pop47), $pop45 + f64.add $push34=, $11, $11 + f64.store 0($0), $pop34 + return +.LBB0_3: # %if.then + end_block # label1: + i32.load $push35=, 16($0) + i64.const $push36=, 0 + i64.store 0($pop35), $pop36 + return +.LBB0_4: # %for.body.lr.ph + end_block # label0: + i32.load $push57=, 16($0) + tee_local $push56=, $7=, $pop57 + i32.load $push55=, 16($1) + tee_local $push54=, $6=, $pop55 + f64.load $push6=, 0($pop54) + f64.load $push5=, 16($6) + f64.sub $push7=, $pop6, $pop5 + f64.mul $push53=, $4, $pop7 + tee_local $push52=, $11=, $pop53 + f64.store 8($pop56), $pop52 + f64.const $push8=, 0x0p0 + f64.add $10=, $11, $pop8 + block + block + i32.const $push9=, -1 + i32.add $push51=, $2, $pop9 + tee_local $push50=, $5=, $pop51 + i32.const $push49=, 1 + i32.ne $push10=, $pop50, $pop49 + br_if 0, $pop10 # 0: down to label3 +# BB#5: + f64.const $11=, -0x1p0 + br 1 # 1: down to label2 +.LBB0_6: # %for.body.preheader + end_block # label3: + i32.const $push11=, 16 + i32.add $0=, $7, $pop11 + i32.const $push12=, 24 + i32.add $1=, $6, $pop12 + f64.const $11=, -0x1p0 + i32.const $9=, 2 +.LBB0_7: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label4: + i32.const $push65=, -16 + i32.add $push13=, $1, $pop65 + f64.load $push14=, 0($pop13) + f64.load $push15=, 0($1) + f64.sub $push16=, $pop14, $pop15 + f64.mul $push17=, $4, $pop16 + f64.convert_u/i32 $push18=, $9 + f64.div $push64=, $pop17, $pop18 + tee_local $push63=, $8=, $pop64 + f64.store 0($0), $pop63 + i32.const $push62=, 8 + i32.add $0=, $0, $pop62 + i32.const $push61=, 8 + i32.add $1=, $1, $pop61 + f64.mul $push19=, $11, $8 + f64.add $10=, $10, $pop19 + f64.neg $11=, $11 + i32.const $push60=, 1 + i32.add $push59=, $9, $pop60 + tee_local $push58=, $9=, $pop59 + i32.le_u $push20=, $pop58, $5 + br_if 0, $pop20 # 0: up to label4 +.LBB0_8: # %for.end + end_loop + end_block # label2: + i32.const $push23=, 3 + i32.shl $push28=, $2, $pop23 + i32.add $push29=, $7, $pop28 + i32.const $push71=, 3 + i32.shl $push24=, $5, $pop71 + i32.add $push25=, $6, $pop24 + f64.load $push26=, 0($pop25) + f64.mul $push27=, $4, $pop26 + f64.convert_u/i32 $push21=, $3 + f64.const $push70=, -0x1p0 + f64.add $push22=, $pop21, $pop70 + f64.div $push69=, $pop27, $pop22 + tee_local $push68=, $8=, $pop69 + f64.store 0($pop29), $pop68 + f64.mul $push30=, $11, $8 + f64.add $push67=, $10, $pop30 + tee_local $push66=, $11=, $pop67 + f64.add $push31=, $pop66, $11 + f64.store 0($7), $pop31 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push95=, 0 + i32.const $push93=, 0 + i32.load $push92=, __stack_pointer($pop93) + i32.const $push94=, 112 + i32.sub $push131=, $pop92, $pop94 + tee_local $push130=, $2=, $pop131 + i32.store __stack_pointer($pop95), $pop130 + i32.const $push99=, 32 + i32.add $push100=, $2, $pop99 + i32.const $push0=, 24 + i32.add $push1=, $pop100, $pop0 + i32.const $push2=, 0 + i64.load $push3=, .Lmain.c+24($pop2) + i64.store 0($pop1), $pop3 + i32.const $push101=, 32 + i32.add $push102=, $2, $pop101 + i32.const $push4=, 16 + i32.add $push5=, $pop102, $pop4 + i32.const $push129=, 0 + i64.load $push6=, .Lmain.c+16($pop129) + i64.store 0($pop5), $pop6 + i32.const $push128=, 0 + i64.load $push7=, .Lmain.c+8($pop128) + i64.store 40($2), $pop7 + i32.const $push127=, 0 + i64.load $push8=, .Lmain.c($pop127) + i64.store 32($2), $pop8 + i32.const $push126=, 16 + i32.add $push9=, $2, $pop126 + i32.const $push125=, 0 + i64.load $push10=, .Lmain.e+16($pop125) + i64.store 0($pop9), $pop10 + i32.const $push124=, 24 + i32.add $push11=, $2, $pop124 + i32.const $push123=, 0 + i64.load $push12=, .Lmain.e+24($pop123) + i64.store 0($pop11), $pop12 + i64.const $push13=, 4618441417868443648 + i64.store 72($2), $pop13 + i64.const $push14=, 4621819117588971520 + i64.store 64($2), $pop14 + i32.const $push15=, 3 + i32.store 84($2), $pop15 + i32.const $push122=, 0 + i64.load $push16=, .Lmain.e($pop122) + i64.store 0($2), $pop16 + i32.const $push121=, 0 + i64.load $push17=, .Lmain.e+8($pop121) + i64.store 8($2), $pop17 + i32.const $push103=, 32 + i32.add $push104=, $2, $pop103 + i32.store 80($2), $pop104 + i32.store 104($2), $2 + i32.const $push105=, 88 + i32.add $push106=, $2, $pop105 + i32.const $push107=, 64 + i32.add $push108=, $2, $pop107 + call foo@FUNCTION, $pop106, $pop108 + block + f64.load $push19=, 0($2) + f64.const $push18=, 0x0p0 + f64.ne $push20=, $pop19, $pop18 + br_if 0, $pop20 # 0: down to label5 +# BB#1: # %lor.lhs.false + f64.load $push22=, 8($2) + f64.const $push21=, 0x1.4p4 + f64.ne $push23=, $pop22, $pop21 + br_if 0, $pop23 # 0: down to label5 +# BB#2: # %lor.lhs.false9 + f64.load $push25=, 16($2) + f64.const $push24=, 0x1.4p3 + f64.ne $push26=, $pop25, $pop24 + br_if 0, $pop26 # 0: down to label5 +# BB#3: # %lor.lhs.false12 + f64.load $push28=, 24($2) + f64.const $push27=, -0x1.4p3 + f64.ne $push29=, $pop28, $pop27 + br_if 0, $pop29 # 0: down to label5 +# BB#4: # %if.end + i32.const $push33=, 84 + i32.add $push34=, $2, $pop33 + i32.const $push35=, 2 + i32.store 0($pop34), $pop35 + i32.const $push38=, 16 + i32.add $push138=, $2, $pop38 + tee_local $push137=, $0=, $pop138 + i32.const $push36=, 0 + i64.load $push37=, .Lmain.e+16($pop36) + i64.store 0($pop137), $pop37 + i32.const $push40=, 24 + i32.add $push136=, $2, $pop40 + tee_local $push135=, $1=, $pop136 + i32.const $push134=, 0 + i64.load $push39=, .Lmain.e+24($pop134) + i64.store 0($pop135), $pop39 + i32.const $push133=, 0 + i64.load $push41=, .Lmain.e($pop133) + i64.store 0($2), $pop41 + i32.const $push132=, 0 + i64.load $push42=, .Lmain.e+8($pop132) + i64.store 8($2), $pop42 + i32.const $push109=, 88 + i32.add $push110=, $2, $pop109 + i32.const $push111=, 64 + i32.add $push112=, $2, $pop111 + call foo@FUNCTION, $pop110, $pop112 + f64.load $push44=, 0($2) + f64.const $push43=, 0x1.ep5 + f64.ne $push45=, $pop44, $pop43 + br_if 0, $pop45 # 0: down to label5 +# BB#5: # %if.end + f64.load $push30=, 8($2) + f64.const $push46=, 0x1.4p4 + f64.ne $push47=, $pop30, $pop46 + br_if 0, $pop47 # 0: down to label5 +# BB#6: # %if.end + f64.load $push31=, 0($0) + f64.const $push48=, -0x1.4p3 + f64.ne $push49=, $pop31, $pop48 + br_if 0, $pop49 # 0: down to label5 +# BB#7: # %if.end + f64.load $push32=, 0($1) + f64.const $push50=, 0x1.d8p6 + f64.ne $push51=, $pop32, $pop50 + br_if 0, $pop51 # 0: down to label5 +# BB#8: # %if.end30 + i32.const $push55=, 84 + i32.add $push56=, $2, $pop55 + i32.const $push57=, 1 + i32.store 0($pop56), $pop57 + i32.const $push60=, 16 + i32.add $push145=, $2, $pop60 + tee_local $push144=, $0=, $pop145 + i32.const $push58=, 0 + i64.load $push59=, .Lmain.e+16($pop58) + i64.store 0($pop144), $pop59 + i32.const $push62=, 24 + i32.add $push143=, $2, $pop62 + tee_local $push142=, $1=, $pop143 + i32.const $push141=, 0 + i64.load $push61=, .Lmain.e+24($pop141) + i64.store 0($pop142), $pop61 + i32.const $push140=, 0 + i64.load $push63=, .Lmain.e($pop140) + i64.store 0($2), $pop63 + i32.const $push139=, 0 + i64.load $push64=, .Lmain.e+8($pop139) + i64.store 8($2), $pop64 + i32.const $push113=, 88 + i32.add $push114=, $2, $pop113 + i32.const $push115=, 64 + i32.add $push116=, $2, $pop115 + call foo@FUNCTION, $pop114, $pop116 + f64.load $push66=, 0($2) + f64.const $push65=, -0x1.4p4 + f64.ne $push67=, $pop66, $pop65 + br_if 0, $pop67 # 0: down to label5 +# BB#9: # %if.end30 + f64.load $push52=, 8($2) + f64.const $push68=, -0x1.4p3 + f64.ne $push69=, $pop52, $pop68 + br_if 0, $pop69 # 0: down to label5 +# BB#10: # %if.end30 + f64.load $push53=, 0($0) + f64.const $push146=, 0x1.d8p6 + f64.ne $push70=, $pop53, $pop146 + br_if 0, $pop70 # 0: down to label5 +# BB#11: # %if.end30 + f64.load $push54=, 0($1) + f64.const $push147=, 0x1.d8p6 + f64.ne $push71=, $pop54, $pop147 + br_if 0, $pop71 # 0: down to label5 +# BB#12: # %if.end46 + i32.const $push75=, 84 + i32.add $push76=, $2, $pop75 + i32.const $push77=, 0 + i32.store 0($pop76), $pop77 + i32.const $push79=, 16 + i32.add $push155=, $2, $pop79 + tee_local $push154=, $0=, $pop155 + i32.const $push153=, 0 + i64.load $push78=, .Lmain.e+16($pop153) + i64.store 0($pop154), $pop78 + i32.const $push81=, 24 + i32.add $push152=, $2, $pop81 + tee_local $push151=, $1=, $pop152 + i32.const $push150=, 0 + i64.load $push80=, .Lmain.e+24($pop150) + i64.store 0($pop151), $pop80 + i32.const $push149=, 0 + i64.load $push82=, .Lmain.e($pop149) + i64.store 0($2), $pop82 + i32.const $push148=, 0 + i64.load $push83=, .Lmain.e+8($pop148) + i64.store 8($2), $pop83 + i32.const $push117=, 88 + i32.add $push118=, $2, $pop117 + i32.const $push119=, 64 + i32.add $push120=, $2, $pop119 + call foo@FUNCTION, $pop118, $pop120 + f64.load $push85=, 0($2) + f64.const $push84=, 0x0p0 + f64.ne $push86=, $pop85, $pop84 + br_if 0, $pop86 # 0: down to label5 +# BB#13: # %if.end46 + f64.load $push72=, 8($2) + f64.const $push156=, 0x1.d8p6 + f64.ne $push87=, $pop72, $pop156 + br_if 0, $pop87 # 0: down to label5 +# BB#14: # %if.end46 + f64.load $push73=, 0($0) + f64.const $push157=, 0x1.d8p6 + f64.ne $push88=, $pop73, $pop157 + br_if 0, $pop88 # 0: down to label5 +# BB#15: # %if.end46 + f64.load $push74=, 0($1) + f64.const $push89=, 0x1.d8p6 + f64.ne $push90=, $pop74, $pop89 + br_if 0, $pop90 # 0: down to label5 +# BB#16: # %if.end62 + i32.const $push98=, 0 + i32.const $push96=, 112 + i32.add $push97=, $2, $pop96 + i32.store __stack_pointer($pop98), $pop97 + i32.const $push91=, 0 + return $pop91 +.LBB1_17: # %if.then + end_block # label5: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .Lmain.c,@object # @main.c + .section .rodata.cst32,"aM",@progbits,32 + .p2align 4 +.Lmain.c: + .int64 4621819117588971520 # double 10 + .int64 4626322717216342016 # double 20 + .int64 4629137466983448576 # double 30 + .int64 4630826316843712512 # double 40 + .size .Lmain.c, 32 + + .type .Lmain.e,@object # @main.e + .p2align 4 +.Lmain.e: + .int64 4638003928749834240 # double 118 + .int64 4638003928749834240 # double 118 + .int64 4638003928749834240 # double 118 + .int64 4638003928749834240 # double 118 + .size .Lmain.e, 32 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr47925.c.s b/src/binaryen/test/torture-s/pr47925.c.s new file mode 100644 index 0000000000..872f6f6adc --- /dev/null +++ b/src/binaryen/test/torture-s/pr47925.c.s @@ -0,0 +1,81 @@ + .text + .file "pr47925.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 +# BB#0: # %entry + #APP + #NO_APP + # fallthrough-return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + call bar@FUNCTION, $1, $1 + block + i32.const $push0=, 1 + i32.lt_s $push1=, $1, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %for.body.preheader +.LBB1_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.load $0=, 0($0) + i32.const $push4=, -1 + i32.add $push3=, $1, $pop4 + tee_local $push2=, $1=, $pop3 + br_if 0, $pop2 # 0: up to label1 +.LBB1_3: # %for.end + end_loop + end_block # label0: + copy_local $push5=, $1 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push14=, $pop2, $pop4 + tee_local $push13=, $0=, $pop14 + i32.store __stack_pointer($pop5), $pop13 + i32.const $push9=, 8 + i32.add $push10=, $0, $pop9 + i32.store 8($0), $pop10 + i32.const $push11=, 8 + i32.add $push12=, $0, $pop11 + i32.const $push0=, 10 + i32.call $drop=, foo@FUNCTION, $pop12, $pop0 + i32.const $push8=, 0 + i32.const $push6=, 16 + i32.add $push7=, $0, $pop6 + i32.store __stack_pointer($pop8), $pop7 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr48197.c.s b/src/binaryen/test/torture-s/pr48197.c.s new file mode 100644 index 0000000000..1c3247719a --- /dev/null +++ b/src/binaryen/test/torture-s/pr48197.c.s @@ -0,0 +1,17 @@ + .text + .file "pr48197.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr48571-1.c.s b/src/binaryen/test/torture-s/pr48571-1.c.s new file mode 100644 index 0000000000..3b84465cc8 --- /dev/null +++ b/src/binaryen/test/torture-s/pr48571-1.c.s @@ -0,0 +1,103 @@ + .text + .file "pr48571-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .local i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $1=, c($pop0) + i32.const $0=, 4 +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push10=, c + i32.add $push1=, $0, $pop10 + i32.const $push9=, 1 + i32.shl $push8=, $1, $pop9 + tee_local $push7=, $1=, $pop8 + i32.store 0($pop1), $pop7 + i32.const $push6=, 4 + i32.add $push5=, $0, $pop6 + tee_local $push4=, $0=, $pop5 + i32.const $push3=, 2496 + i32.ne $push2=, $pop4, $pop3 + br_if 0, $pop2 # 0: up to label0 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $0=, -2496 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push9=, c+2496 + i32.add $push0=, $0, $pop9 + i32.const $push8=, 1 + i32.store 0($pop0), $pop8 + i32.const $push7=, 4 + i32.add $push6=, $0, $pop7 + tee_local $push5=, $0=, $pop6 + br_if 0, $pop5 # 0: up to label1 +# BB#2: # %for.end + end_loop + call bar@FUNCTION + i32.const $2=, 0 + i32.const $0=, c + i32.const $1=, 1 +.LBB1_3: # %for.body3 + # =>This Inner Loop Header: Depth=1 + block + loop # label3: + i32.load $push1=, 0($0) + i32.ne $push2=, $pop1, $1 + br_if 1, $pop2 # 1: down to label2 +# BB#4: # %if.end + # in Loop: Header=BB1_3 Depth=1 + i32.const $push15=, 4 + i32.add $0=, $0, $pop15 + i32.const $push14=, 1 + i32.shl $1=, $1, $pop14 + i32.const $push13=, 1 + i32.add $push12=, $2, $pop13 + tee_local $push11=, $2=, $pop12 + i32.const $push10=, 624 + i32.lt_u $push3=, $pop11, $pop10 + br_if 0, $pop3 # 0: up to label3 +# BB#5: # %for.end8 + end_loop + i32.const $push4=, 0 + return $pop4 +.LBB1_6: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 4 +c: + .skip 2496 + .size c, 2496 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr48717.c.s b/src/binaryen/test/torture-s/pr48717.c.s new file mode 100644 index 0000000000..e4c139b2ee --- /dev/null +++ b/src/binaryen/test/torture-s/pr48717.c.s @@ -0,0 +1,95 @@ + .text + .file "pr48717.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.add $push0=, $1, $0 + i32.const $push1=, 65535 + i32.and $push2=, $pop0, $pop1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push8=, 0 + i32.load $push7=, w($pop8) + tee_local $push6=, $0=, $pop7 + i32.const $push1=, -1 + i32.xor $push2=, $pop6, $pop1 + i32.add $push3=, $pop2, $0 + i32.const $push4=, 65535 + i32.and $push5=, $pop3, $pop4 + i32.store v($pop0), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push11=, 0 + i32.const $push10=, 0 + i32.load $push9=, w($pop10) + tee_local $push8=, $0=, $pop9 + i32.const $push0=, -1 + i32.xor $push1=, $pop8, $pop0 + i32.add $push2=, $pop1, $0 + i32.const $push3=, 65535 + i32.and $push7=, $pop2, $pop3 + tee_local $push6=, $0=, $pop7 + i32.store v($pop11), $pop6 + block + i32.const $push5=, 65535 + i32.ne $push4=, $0, $pop5 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + i32.const $push12=, 0 + return $pop12 +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden v # @v + .type v,@object + .section .data.v,"aw",@progbits + .globl v + .p2align 2 +v: + .int32 1 # 0x1 + .size v, 4 + + .hidden w # @w + .type w,@object + .section .bss.w,"aw",@nobits + .globl w + .p2align 2 +w: + .int32 0 # 0x0 + .size w, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr48809.c.s b/src/binaryen/test/torture-s/pr48809.c.s new file mode 100644 index 0000000000..17c2f09370 --- /dev/null +++ b/src/binaryen/test/torture-s/pr48809.c.s @@ -0,0 +1,246 @@ + .text + .file "pr48809.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $2=, 0 + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + i32.const $push0=, 62 + i32.add $push37=, $0, $pop0 + tee_local $push36=, $1=, $pop37 + i32.const $push1=, 160 + i32.gt_u $push2=, $pop36, $pop1 + br_if 0, $pop2 # 0: down to label33 +# BB#1: # %entry + block + br_table $1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 34, 0 # 0: down to label34 + # 1: down to label33 + # 2: down to label32 + # 3: down to label31 + # 4: down to label30 + # 5: down to label29 + # 6: down to label28 + # 7: down to label27 + # 8: down to label26 + # 9: down to label25 + # 10: down to label24 + # 11: down to label23 + # 12: down to label22 + # 13: down to label21 + # 14: down to label20 + # 15: down to label19 + # 16: down to label18 + # 17: down to label17 + # 18: down to label16 + # 19: down to label15 + # 20: down to label14 + # 21: down to label13 + # 22: down to label12 + # 23: down to label11 + # 24: down to label10 + # 25: down to label9 + # 26: down to label8 + # 27: down to label7 + # 28: down to label6 + # 29: down to label5 + # 30: down to label4 + # 31: down to label3 + # 32: down to label2 + # 33: down to label1 + # 34: down to label0 +.LBB0_2: # %sw.bb34 + end_block # label34: + i32.const $2=, 19 +.LBB0_3: # %sw.epilog + end_block # label33: + return $2 +.LBB0_4: # %sw.bb + end_block # label32: + i32.const $push35=, 1 + return $pop35 +.LBB0_5: # %sw.bb1 + end_block # label31: + i32.const $push34=, 7 + return $pop34 +.LBB0_6: # %sw.bb2 + end_block # label30: + copy_local $push4=, $0 + return $pop4 +.LBB0_7: # %sw.bb4 + end_block # label29: + i32.const $push33=, 5 + return $pop33 +.LBB0_8: # %sw.bb5 + end_block # label28: + i32.const $push32=, 17 + return $pop32 +.LBB0_9: # %sw.bb6 + end_block # label27: + i32.const $push31=, 31 + return $pop31 +.LBB0_10: # %sw.bb7 + end_block # label26: + i32.const $push30=, 8 + return $pop30 +.LBB0_11: # %sw.bb8 + end_block # label25: + i32.const $push29=, 28 + return $pop29 +.LBB0_12: # %sw.bb9 + end_block # label24: + i32.const $push28=, 16 + return $pop28 +.LBB0_13: # %sw.bb10 + end_block # label23: + i32.const $push27=, 31 + return $pop27 +.LBB0_14: # %sw.bb11 + end_block # label22: + i32.const $push26=, 12 + return $pop26 +.LBB0_15: # %sw.bb12 + end_block # label21: + i32.const $push25=, 15 + return $pop25 +.LBB0_16: # %sw.bb13 + end_block # label20: + i32.const $push24=, 111 + return $pop24 +.LBB0_17: # %sw.bb14 + end_block # label19: + i32.const $push23=, 17 + return $pop23 +.LBB0_18: # %sw.bb15 + end_block # label18: + i32.const $push22=, 10 + return $pop22 +.LBB0_19: # %sw.bb16 + end_block # label17: + i32.const $push21=, 31 + return $pop21 +.LBB0_20: # %sw.bb17 + end_block # label16: + i32.const $push20=, 7 + return $pop20 +.LBB0_21: # %sw.bb18 + end_block # label15: + i32.const $push19=, 2 + return $pop19 +.LBB0_22: # %sw.bb19 + end_block # label14: + copy_local $push3=, $0 + return $pop3 +.LBB0_23: # %sw.bb20 + end_block # label13: + i32.const $push18=, 5 + return $pop18 +.LBB0_24: # %sw.bb21 + end_block # label12: + i32.const $push17=, 107 + return $pop17 +.LBB0_25: # %sw.bb22 + end_block # label11: + i32.const $push16=, 31 + return $pop16 +.LBB0_26: # %sw.bb23 + end_block # label10: + i32.const $push15=, 8 + return $pop15 +.LBB0_27: # %sw.bb24 + end_block # label9: + i32.const $push14=, 28 + return $pop14 +.LBB0_28: # %sw.bb25 + end_block # label8: + i32.const $push13=, 106 + return $pop13 +.LBB0_29: # %sw.bb26 + end_block # label7: + i32.const $push12=, 31 + return $pop12 +.LBB0_30: # %sw.bb27 + end_block # label6: + i32.const $push11=, 102 + return $pop11 +.LBB0_31: # %sw.bb28 + end_block # label5: + i32.const $push10=, 105 + return $pop10 +.LBB0_32: # %sw.bb29 + end_block # label4: + i32.const $push9=, 111 + return $pop9 +.LBB0_33: # %sw.bb30 + end_block # label3: + i32.const $push8=, 17 + return $pop8 +.LBB0_34: # %sw.bb31 + end_block # label2: + i32.const $push7=, 10 + return $pop7 +.LBB0_35: # %sw.bb32 + end_block # label1: + i32.const $push6=, 31 + return $pop6 +.LBB0_36: # %sw.bb33 + end_block # label0: + i32.const $push5=, 18 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end25 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr48814-1.c.s b/src/binaryen/test/torture-s/pr48814-1.c.s new file mode 100644 index 0000000000..886ab0f634 --- /dev/null +++ b/src/binaryen/test/torture-s/pr48814-1.c.s @@ -0,0 +1,90 @@ + .text + .file "pr48814-1.c" + .section .text.incr,"ax",@progbits + .hidden incr # -- Begin function incr + .globl incr + .type incr,@function +incr: # @incr + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load $push1=, count($pop5) + i32.const $push2=, 1 + i32.add $push4=, $pop1, $pop2 + tee_local $push3=, $0=, $pop4 + i32.store count($pop0), $pop3 + copy_local $push6=, $0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size incr, .Lfunc_end0-incr + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.call $0=, incr@FUNCTION + i32.const $push16=, 0 + i32.load $push15=, count($pop16) + tee_local $push14=, $1=, $pop15 + i32.const $push1=, 2 + i32.shl $push2=, $pop14, $pop1 + i32.const $push3=, arr + i32.add $push4=, $pop2, $pop3 + i32.store 0($pop4), $0 + i32.const $push13=, 0 + i32.const $push5=, 1 + i32.add $push12=, $1, $pop5 + tee_local $push11=, $0=, $pop12 + i32.store count($pop13), $pop11 + block + i32.const $push10=, 2 + i32.ne $push6=, $0, $pop10 + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %entry + i32.const $push17=, 0 + i32.load $push0=, arr+8($pop17) + i32.const $push7=, 3 + i32.ne $push8=, $pop0, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#2: # %if.end + i32.const $push9=, 0 + return $pop9 +.LBB1_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden arr # @arr + .type arr,@object + .section .data.arr,"aw",@progbits + .globl arr + .p2align 4 +arr: + .int32 1 # 0x1 + .int32 2 # 0x2 + .int32 3 # 0x3 + .int32 4 # 0x4 + .size arr, 16 + + .hidden count # @count + .type count,@object + .section .bss.count,"aw",@nobits + .globl count + .p2align 2 +count: + .int32 0 # 0x0 + .size count, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr48814-2.c.s b/src/binaryen/test/torture-s/pr48814-2.c.s new file mode 100644 index 0000000000..fc5a1d07aa --- /dev/null +++ b/src/binaryen/test/torture-s/pr48814-2.c.s @@ -0,0 +1,93 @@ + .text + .file "pr48814-2.c" + .section .text.incr,"ax",@progbits + .hidden incr # -- Begin function incr + .globl incr + .type incr,@function +incr: # @incr + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load $push1=, count($pop5) + i32.const $push2=, 1 + i32.add $push4=, $pop1, $pop2 + tee_local $push3=, $0=, $pop4 + i32.store count($pop0), $pop3 + copy_local $push6=, $0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size incr, .Lfunc_end0-incr + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push19=, 0 + i32.load $push18=, count($pop19) + tee_local $push17=, $1=, $pop18 + i32.const $push16=, 2 + i32.add $push15=, $pop17, $pop16 + tee_local $push14=, $0=, $pop15 + i32.store count($pop0), $pop14 + i32.const $push1=, 1 + i32.add $push13=, $1, $pop1 + tee_local $push12=, $2=, $pop13 + i32.const $push11=, 2 + i32.shl $push2=, $pop12, $pop11 + i32.const $push10=, arr + i32.add $push3=, $pop2, $pop10 + i32.store 0($pop3), $2 + block + br_if 0, $1 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.const $push21=, 2 + i32.shl $push4=, $0, $pop21 + i32.const $push20=, arr + i32.add $push5=, $pop4, $pop20 + i32.load $push6=, 0($pop5) + i32.const $push7=, 3 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#2: # %if.end + i32.const $push9=, 0 + return $pop9 +.LBB1_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden arr # @arr + .type arr,@object + .section .data.arr,"aw",@progbits + .globl arr + .p2align 4 +arr: + .int32 1 # 0x1 + .int32 2 # 0x2 + .int32 3 # 0x3 + .int32 4 # 0x4 + .size arr, 16 + + .hidden count # @count + .type count,@object + .section .bss.count,"aw",@nobits + .globl count + .p2align 2 +count: + .int32 0 # 0x0 + .size count, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr48973-1.c.s b/src/binaryen/test/torture-s/pr48973-1.c.s new file mode 100644 index 0000000000..09c77f0d1c --- /dev/null +++ b/src/binaryen/test/torture-s/pr48973-1.c.s @@ -0,0 +1,78 @@ + .text + .file "pr48973-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.const $push0=, -1 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push10=, 0 + i32.const $push9=, 0 + i32.load8_u $push2=, s($pop9) + i32.const $push3=, 254 + i32.and $push4=, $pop2, $pop3 + i32.const $push8=, 0 + i32.load $push0=, v($pop8) + i32.const $push1=, 1 + i32.and $push7=, $pop0, $pop1 + tee_local $push6=, $0=, $pop7 + i32.or $push5=, $pop4, $pop6 + i32.store8 s($pop10), $pop5 + block + i32.eqz $push12=, $0 + br_if 0, $pop12 # 0: down to label1 +# BB#1: # %foo.exit + i32.const $push11=, 0 + return $pop11 +.LBB1_2: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden v # @v + .type v,@object + .section .data.v,"aw",@progbits + .globl v + .p2align 2 +v: + .int32 4294967295 # 0xffffffff + .size v, 4 + + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 2 +s: + .skip 4 + .size s, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr48973-2.c.s b/src/binaryen/test/torture-s/pr48973-2.c.s new file mode 100644 index 0000000000..5c52ec9a32 --- /dev/null +++ b/src/binaryen/test/torture-s/pr48973-2.c.s @@ -0,0 +1,58 @@ + .text + .file "pr48973-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push11=, 0 + i32.load8_u $push2=, s($pop11) + i32.const $push3=, 254 + i32.and $push4=, $pop2, $pop3 + i32.const $push10=, 0 + i32.load $push0=, v($pop10) + i32.const $push1=, 31 + i32.shr_u $push9=, $pop0, $pop1 + tee_local $push8=, $0=, $pop9 + i32.or $push5=, $pop4, $pop8 + i32.store8 s($pop12), $pop5 + block + i32.const $push6=, 1 + i32.ne $push7=, $0, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %if.end + i32.const $push13=, 0 + return $pop13 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden v # @v + .type v,@object + .section .data.v,"aw",@progbits + .globl v + .p2align 2 +v: + .int32 4294967295 # 0xffffffff + .size v, 4 + + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 2 +s: + .skip 4 + .size s, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr49039.c.s b/src/binaryen/test/torture-s/pr49039.c.s new file mode 100644 index 0000000000..88dcc87932 --- /dev/null +++ b/src/binaryen/test/torture-s/pr49039.c.s @@ -0,0 +1,92 @@ + .text + .file "pr49039.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .local i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.eq $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %entry + i32.const $push2=, -2 + i32.eq $push3=, $1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %if.end + i32.gt_u $push4=, $0, $1 + i32.select $2=, $0, $1, $pop4 + block + i32.lt_u $push5=, $0, $1 + i32.select $push6=, $0, $1, $pop5 + i32.const $push17=, 1 + i32.ne $push7=, $pop6, $pop17 + br_if 0, $pop7 # 0: down to label1 +# BB#3: # %if.then9 + i32.const $push8=, 0 + i32.const $push19=, 0 + i32.load $push9=, cnt($pop19) + i32.const $push18=, 1 + i32.add $push10=, $pop9, $pop18 + i32.store cnt($pop8), $pop10 +.LBB0_4: # %if.end10 + end_block # label1: + i32.const $push11=, -2 + i32.ne $push12=, $2, $pop11 + br_if 0, $pop12 # 0: down to label0 +# BB#5: # %if.then12 + i32.const $push13=, 0 + i32.const $push20=, 0 + i32.load $push14=, cnt($pop20) + i32.const $push15=, 1 + i32.add $push16=, $pop14, $pop15 + i32.store cnt($pop13), $pop16 +.LBB0_6: # %cleanup + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, -2 + i32.const $push0=, 1 + call foo@FUNCTION, $pop1, $pop0 + block + i32.const $push5=, 0 + i32.load $push2=, cnt($pop5) + i32.const $push3=, 2 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label2 +# BB#1: # %if.end + i32.const $push6=, 0 + return $pop6 +.LBB1_2: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden cnt # @cnt + .type cnt,@object + .section .bss.cnt,"aw",@nobits + .globl cnt + .p2align 2 +cnt: + .int32 0 # 0x0 + .size cnt, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr49073.c.s b/src/binaryen/test/torture-s/pr49073.c.s new file mode 100644 index 0000000000..6df203f135 --- /dev/null +++ b/src/binaryen/test/torture-s/pr49073.c.s @@ -0,0 +1,96 @@ + .text + .file "pr49073.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $2=, 0 + i32.const $1=, a+4 +.LBB0_1: # %do.body + # =>This Inner Loop Header: Depth=1 + block + block + loop # label2: + i32.load $0=, 0($1) + block + i32.const $push10=, 1 + i32.and $push0=, $2, $pop10 + i32.eqz $push18=, $pop0 + br_if 0, $pop18 # 0: down to label3 +# BB#2: # %do.body + # in Loop: Header=BB0_1 Depth=1 + i32.const $push11=, 4 + i32.eq $push1=, $0, $pop11 + br_if 2, $pop1 # 2: down to label1 +.LBB0_3: # %if.end + # in Loop: Header=BB0_1 Depth=1 + end_block # label3: + i32.const $push14=, 4 + i32.add $1=, $1, $pop14 + i32.const $push13=, 3 + i32.eq $2=, $0, $pop13 + i32.const $push12=, 7 + i32.lt_s $push2=, $0, $pop12 + br_if 0, $pop2 # 0: up to label2 +# BB#4: # %do.endthread-pre-split + end_loop + i32.const $push3=, 0 + i32.load $0=, c($pop3) + br 1 # 1: down to label0 +.LBB0_5: # %if.then + end_block # label1: + i32.const $push4=, 0 + i32.const $push17=, 0 + i32.load $push5=, c($pop17) + i32.const $push6=, 1 + i32.add $push16=, $pop5, $pop6 + tee_local $push15=, $0=, $pop16 + i32.store c($pop4), $pop15 +.LBB0_6: # %do.end + end_block # label0: + block + i32.const $push7=, 1 + i32.ne $push8=, $0, $pop7 + br_if 0, $pop8 # 0: down to label4 +# BB#7: # %if.end6 + i32.const $push9=, 0 + return $pop9 +.LBB0_8: # %if.then5 + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 4 +a: + .int32 1 # 0x1 + .int32 2 # 0x2 + .int32 3 # 0x3 + .int32 4 # 0x4 + .int32 5 # 0x5 + .int32 6 # 0x6 + .int32 7 # 0x7 + .size a, 28 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr49123.c.s b/src/binaryen/test/torture-s/pr49123.c.s new file mode 100644 index 0000000000..627f99f9f6 --- /dev/null +++ b/src/binaryen/test/torture-s/pr49123.c.s @@ -0,0 +1,30 @@ + .text + .file "pr49123.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load8_u $push1=, s.0($pop5) + i32.const $push2=, 1 + i32.or $push3=, $pop1, $pop2 + i32.store8 s.0($pop0), $pop3 + i32.const $push4=, 0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type s.0,@object # @s.0 + .section .bss.s.0,"aw",@nobits + .p2align 2 +s.0: + .int8 0 # 0x0 + .size s.0, 1 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr49161.c.s b/src/binaryen/test/torture-s/pr49161.c.s new file mode 100644 index 0000000000..7cbfd3be23 --- /dev/null +++ b/src/binaryen/test/torture-s/pr49161.c.s @@ -0,0 +1,121 @@ + .text + .file "pr49161.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push6=, 0 + i32.load $push5=, c($pop6) + tee_local $push4=, $1=, $pop5 + i32.const $push1=, 1 + i32.add $push2=, $pop4, $pop1 + i32.store c($pop0), $pop2 + block + i32.ne $push3=, $1, $0 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + block + block + block + i32.const $push0=, -3 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 2 + i32.ge_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label4 +# BB#1: # %l4 + i32.const $push9=, 0 + call bar@FUNCTION, $pop9 + i32.const $push10=, 4 + i32.eq $push11=, $0, $pop10 + br_if 1, $pop11 # 1: down to label3 +# BB#2: # %if.then.thread + i32.const $push12=, 1 + call bar@FUNCTION, $pop12 + br 2 # 2: down to label2 +.LBB1_3: # %entry + end_block # label4: + i32.const $push4=, 6 + i32.ne $push5=, $0, $pop4 + br_if 2, $pop5 # 2: down to label1 +# BB#4: # %if.then + i32.const $push6=, -1 + call bar@FUNCTION, $pop6 + i32.const $push7=, 0 + call bar@FUNCTION, $pop7 + i32.const $push8=, 1 + call bar@FUNCTION, $pop8 +.LBB1_5: # %if.then4 + end_block # label3: + i32.const $push13=, -1 + call bar@FUNCTION, $pop13 +.LBB1_6: # %if.end5 + end_block # label2: + i32.const $push14=, 2 + call bar@FUNCTION, $pop14 +.LBB1_7: # %return + end_block # label1: + # fallthrough-return + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + call foo@FUNCTION, $pop0 + block + i32.const $push4=, 0 + i32.load $push1=, c($pop4) + i32.const $push3=, 3 + i32.ne $push2=, $pop1, $pop3 + br_if 0, $pop2 # 0: down to label5 +# BB#1: # %if.end + i32.const $push5=, 0 + return $pop5 +.LBB2_2: # %if.then + end_block # label5: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr49186.c.s b/src/binaryen/test/torture-s/pr49186.c.s new file mode 100644 index 0000000000..96e2273929 --- /dev/null +++ b/src/binaryen/test/torture-s/pr49186.c.s @@ -0,0 +1,17 @@ + .text + .file "pr49186.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr49218.c.s b/src/binaryen/test/torture-s/pr49218.c.s new file mode 100644 index 0000000000..ec468b20ab --- /dev/null +++ b/src/binaryen/test/torture-s/pr49218.c.s @@ -0,0 +1,78 @@ + .text + .file "pr49218.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64, i32, i64, i64, i32 +# BB#0: # %entry + i32.const $push15=, 0 + i32.const $push13=, 0 + i32.load $push12=, __stack_pointer($pop13) + i32.const $push14=, 16 + i32.sub $push26=, $pop12, $pop14 + tee_local $push25=, $4=, $pop26 + i32.store __stack_pointer($pop15), $pop25 + i32.const $push24=, 0 + f32.load $push0=, f($pop24) + call __fixsfti@FUNCTION, $4, $pop0 + block + i64.load $push23=, 0($4) + tee_local $push22=, $2=, $pop23 + i64.const $push4=, 10 + i64.gt_u $push5=, $pop22, $pop4 + i32.const $push1=, 8 + i32.add $push2=, $4, $pop1 + i64.load $push21=, 0($pop2) + tee_local $push20=, $3=, $pop21 + i64.const $push19=, 0 + i64.gt_s $push3=, $pop20, $pop19 + i64.eqz $push6=, $3 + i32.select $push7=, $pop5, $pop3, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %do.body.preheader +.LBB0_2: # %do.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i64.const $push33=, 1 + i64.add $push32=, $2, $pop33 + tee_local $push31=, $0=, $pop32 + i64.lt_u $1=, $pop31, $2 + #APP + #NO_APP + copy_local $2=, $0 + i64.const $push30=, 11 + i64.xor $push8=, $0, $pop30 + i64.extend_u/i32 $push9=, $1 + i64.add $push29=, $3, $pop9 + tee_local $push28=, $3=, $pop29 + i64.or $push10=, $pop8, $pop28 + i64.const $push27=, 0 + i64.ne $push11=, $pop10, $pop27 + br_if 0, $pop11 # 0: up to label1 +.LBB0_3: # %if.end + end_loop + end_block # label0: + i32.const $push18=, 0 + i32.const $push16=, 16 + i32.add $push17=, $4, $pop16 + i32.store __stack_pointer($pop18), $pop17 + i32.const $push34=, 0 + # fallthrough-return: $pop34 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden f # @f + .type f,@object + .section .bss.f,"aw",@nobits + .globl f + .p2align 2 +f: + .int32 0 # float 0 + .size f, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr49279.c.s b/src/binaryen/test/torture-s/pr49279.c.s new file mode 100644 index 0000000000..34991167cb --- /dev/null +++ b/src/binaryen/test/torture-s/pr49279.c.s @@ -0,0 +1,100 @@ + .text + .file "pr49279.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .result i32 +# BB#0: # %entry + #APP + #NO_APP + copy_local $push0=, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push16=, $pop3, $pop5 + tee_local $push15=, $2=, $pop16 + i32.store __stack_pointer($pop6), $pop15 + i32.store 12($2), $0 + i32.const $push0=, 1 + i32.store 8($2), $pop0 + i32.const $push10=, 8 + i32.add $push11=, $2, $pop10 + i32.call $push1=, bar@FUNCTION, $pop11 + i32.store 4($pop1), $1 + i32.load $push14=, 12($2) + tee_local $push13=, $0=, $pop14 + i32.const $push2=, 0 + i32.store 0($pop13), $pop2 + i32.const $push12=, 1 + i32.store 0($1), $pop12 + i32.load $1=, 0($0) + i32.const $push9=, 0 + i32.const $push7=, 16 + i32.add $push8=, $2, $pop7 + i32.store __stack_pointer($pop9), $pop8 + copy_local $push17=, $1 + # fallthrough-return: $pop17 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push16=, $pop4, $pop6 + tee_local $push15=, $0=, $pop16 + i32.store __stack_pointer($pop7), $pop15 + block + i32.const $push11=, 12 + i32.add $push12=, $0, $pop11 + i32.const $push13=, 8 + i32.add $push14=, $0, $pop13 + i32.call $push1=, foo@FUNCTION, $pop12, $pop14 + i32.const $push0=, 1 + i32.ne $push2=, $pop1, $pop0 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push10=, 0 + i32.const $push8=, 16 + i32.add $push9=, $0, $pop8 + i32.store __stack_pointer($pop10), $pop9 + i32.const $push3=, 0 + return $pop3 +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr49281.c.s b/src/binaryen/test/torture-s/pr49281.c.s new file mode 100644 index 0000000000..e8c480799d --- /dev/null +++ b/src/binaryen/test/torture-s/pr49281.c.s @@ -0,0 +1,93 @@ + .text + .file "pr49281.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 4 + i32.or $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 3 + i32.or $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 43 + i32.call $push1=, foo@FUNCTION, $pop0 + i32.const $push2=, 172 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.const $push4=, 1 + i32.call $push5=, foo@FUNCTION, $pop4 + i32.const $push6=, 4 + i32.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#2: # %lor.lhs.false3 + i32.const $push8=, 2 + i32.call $push9=, foo@FUNCTION, $pop8 + i32.const $push10=, 12 + i32.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#3: # %if.end + i32.const $push12=, 43 + i32.call $push13=, bar@FUNCTION, $pop12 + i32.const $push14=, 175 + i32.ne $push15=, $pop13, $pop14 + br_if 0, $pop15 # 0: down to label0 +# BB#4: # %lor.lhs.false8 + i32.const $push16=, 1 + i32.call $push17=, bar@FUNCTION, $pop16 + i32.const $push18=, 7 + i32.ne $push19=, $pop17, $pop18 + br_if 0, $pop19 # 0: down to label0 +# BB#5: # %lor.lhs.false11 + i32.const $push20=, 2 + i32.call $push21=, bar@FUNCTION, $pop20 + i32.const $push22=, 11 + i32.ne $push23=, $pop21, $pop22 + br_if 0, $pop23 # 0: down to label0 +# BB#6: # %if.end15 + i32.const $push24=, 0 + return $pop24 +.LBB2_7: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr49390.c.s b/src/binaryen/test/torture-s/pr49390.c.s new file mode 100644 index 0000000000..e864f737be --- /dev/null +++ b/src/binaryen/test/torture-s/pr49390.c.s @@ -0,0 +1,314 @@ + .text + .file "pr49390.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32, i32 +# BB#0: # %entry + block + i32.const $push0=, 4 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %entry + i32.const $push2=, u+4 + i32.ne $push3=, $1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %if.end + i32.const $push5=, 0 + i32.add $push4=, $3, $2 + i32.store v($pop5), $pop4 + i32.const $push7=, 0 + i32.const $push6=, 16384 + i32.store v($pop7), $pop6 + return +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.load $push0=, 0($0) + i32.store v($pop1), $pop0 + i32.const $push3=, 0 + i32.load $push2=, 4($0) + i32.store v($pop3), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.load $push0=, 0($0) + i32.store v($pop1), $pop0 + i32.const $push9=, 0 + i32.load $push2=, 4($0) + i32.store v($pop9), $pop2 + i32.const $push8=, 0 + i32.const $push7=, 0 + i32.store v($pop8), $pop7 + i32.const $push6=, 0 + i32.load $push3=, v($pop6) + i32.const $push4=, 1 + i32.add $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end2: + .size baz, .Lfunc_end2-baz + # -- End function + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32 + .local i32, i32, i32, i32, i64, i32, i32 +# BB#0: # %entry + i32.const $push51=, 0 + i32.const $push49=, 0 + i32.load $push48=, __stack_pointer($pop49) + i32.const $push50=, 16 + i32.sub $push60=, $pop48, $pop50 + tee_local $push59=, $7=, $pop60 + i32.store __stack_pointer($pop51), $pop59 + i32.const $push1=, 0 + i64.load $push58=, a($pop1) + tee_local $push57=, $5=, $pop58 + i64.store 8($7), $pop57 + block + block + block + i32.eqz $push83=, $0 + br_if 0, $pop83 # 0: down to label3 +# BB#1: # %if.else + block + block + i32.load $push64=, 4($0) + tee_local $push63=, $6=, $pop64 + i32.const $push5=, 8191 + i32.and $push62=, $pop63, $pop5 + tee_local $push61=, $3=, $pop62 + i32.const $push7=, 16 + i32.lt_u $push8=, $pop61, $pop7 + br_if 0, $pop8 # 0: down to label5 +# BB#2: # %if.else + i32.const $push6=, 8192 + i32.sub $push4=, $pop6, $3 + i32.const $push9=, 31 + i32.gt_u $push10=, $pop4, $pop9 + br_if 1, $pop10 # 1: down to label4 +.LBB3_3: # %if.then5 + end_block # label5: + i32.const $push13=, 1 + i32.const $push12=, 0 + i32.load $push11=, 0($0) + call foo@FUNCTION, $pop13, $pop12, $pop11, $6 +.LBB3_4: # %if.end7 + end_block # label4: + i32.call $push15=, baz@FUNCTION, $0 + br_if 1, $pop15 # 1: down to label2 + br 2 # 2: down to label1 +.LBB3_5: + end_block # label3: + i32.const $push55=, 8 + i32.add $push56=, $7, $pop55 + copy_local $push66=, $pop56 + tee_local $push65=, $0=, $pop66 + i32.call $push14=, baz@FUNCTION, $pop65 + i32.eqz $push84=, $pop14 + br_if 1, $pop84 # 1: down to label1 +.LBB3_6: # %if.end9 + end_block # label2: + i32.const $push20=, 32 + i32.const $push19=, 4 + i32.const $push16=, 0 + i32.load $push74=, b($pop16) + tee_local $push73=, $1=, $pop74 + i32.load16_u $push72=, 2($pop73) + tee_local $push71=, $2=, $pop72 + i32.const $push17=, 2 + i32.and $push18=, $pop71, $pop17 + i32.select $3=, $pop20, $pop19, $pop18 + block + block + i32.load $push70=, 4($0) + tee_local $push69=, $4=, $pop70 + i32.const $push21=, 8191 + i32.and $push68=, $pop69, $pop21 + tee_local $push67=, $6=, $pop68 + i32.eqz $push85=, $pop67 + br_if 0, $pop85 # 0: down to label7 +# BB#7: # %if.else17 + i32.ge_u $push22=, $6, $3 + br_if 1, $pop22 # 1: down to label6 +# BB#8: # %if.then20 + i32.const $push25=, 2 + i32.const $push24=, 0 + i32.load $push23=, 0($0) + call foo@FUNCTION, $pop25, $pop24, $pop23, $4 + br 2 # 2: down to label1 +.LBB3_9: # %if.then15 + end_block # label7: + i64.const $push2=, 32 + i64.shr_u $push3=, $5, $pop2 + i32.wrap/i64 $push0=, $pop3 + i32.add $push26=, $3, $pop0 + i32.store 12($7), $pop26 + copy_local $6=, $3 +.LBB3_10: # %if.end24 + end_block # label6: + block + i32.const $push27=, 1 + i32.and $push28=, $2, $pop27 + i32.eqz $push86=, $pop28 + br_if 0, $pop86 # 0: down to label8 +# BB#11: # %if.end24 + i32.ne $push29=, $6, $3 + br_if 0, $pop29 # 0: down to label8 +# BB#12: # %if.then31 + i64.load $push41=, 0($0):p2align=2 + i64.store 0($7), $pop41 + call bar@FUNCTION, $7 + i32.const $push47=, 3 + i32.const $push46=, 0 + i32.load $push45=, 0($0) + i32.const $push42=, 4 + i32.add $push43=, $0, $pop42 + i32.load $push44=, 0($pop43) + call foo@FUNCTION, $pop47, $pop46, $pop45, $pop44 + br 1 # 1: down to label1 +.LBB3_13: # %if.end34 + end_block # label8: + i32.const $push30=, 4 + i32.add $push31=, $0, $pop30 + i32.load $push82=, 0($pop31) + tee_local $push81=, $3=, $pop82 + i32.const $push32=, 8191 + i32.and $push33=, $pop81, $pop32 + i32.add $push80=, $1, $pop33 + tee_local $push79=, $6=, $pop80 + i32.load $push78=, 4($pop79) + tee_local $push77=, $2=, $pop78 + i32.load $push76=, 0($0) + tee_local $push75=, $0=, $pop76 + i32.lt_u $push34=, $pop77, $pop75 + br_if 0, $pop34 # 0: down to label1 +# BB#14: # %land.lhs.true41 + block + i32.ne $push35=, $2, $0 + br_if 0, $pop35 # 0: down to label9 +# BB#15: # %lor.lhs.false47 + i32.const $push36=, 8 + i32.add $push37=, $6, $pop36 + i32.load $push38=, 0($pop37) + i32.lt_u $push39=, $pop38, $3 + br_if 1, $pop39 # 1: down to label1 +.LBB3_16: # %if.then53 + end_block # label9: + i32.const $push40=, 4 + call foo@FUNCTION, $pop40, $6, $0, $3 +.LBB3_17: # %cleanup + end_block # label1: + i32.const $push54=, 0 + i32.const $push52=, 16 + i32.add $push53=, $7, $pop52 + i32.store __stack_pointer($pop54), $pop53 + # fallthrough-return + .endfunc +.Lfunc_end3: + .size test, .Lfunc_end3-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push0=, u + i32.store b($pop7), $pop0 + i32.const $push6=, 0 + i32.const $push1=, 8192 + i32.store u+8($pop6), $pop1 + i32.const $1=, a + i32.const $0=, 0 + #APP + #NO_APP + call test@FUNCTION, $0 + block + i32.const $push5=, 0 + i32.load $push2=, v($pop5) + i32.const $push3=, 16384 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label10 +# BB#1: # %if.end + i32.const $push8=, 0 + return $pop8 +.LBB4_2: # %if.then + end_block # label10: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + .hidden u # @u + .type u,@object + .section .bss.u,"aw",@nobits + .globl u + .p2align 2 +u: + .skip 64 + .size u, 64 + + .hidden v # @v + .type v,@object + .section .bss.v,"aw",@nobits + .globl v + .p2align 2 +v: + .int32 0 # 0x0 + .size v, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 3 +a: + .skip 8 + .size a, 8 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr49419.c.s b/src/binaryen/test/torture-s/pr49419.c.s new file mode 100644 index 0000000000..511d703a6c --- /dev/null +++ b/src/binaryen/test/torture-s/pr49419.c.s @@ -0,0 +1,175 @@ + .text + .file "pr49419.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32, i32 + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + block + block + i32.const $push0=, -1 + i32.eq $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %if.end + i32.const $5=, 0 + i32.const $push34=, 0 + i32.load $4=, t($pop34) + block + i32.const $push3=, 1 + i32.lt_s $push4=, $3, $pop3 + br_if 0, $pop4 # 0: down to label2 +# BB#2: # %if.end + i32.const $push5=, 12 + i32.mul $push6=, $0, $pop5 + i32.add $push7=, $4, $pop6 + i32.load $push2=, 0($pop7) + i32.ne $push8=, $pop2, $1 + br_if 0, $pop8 # 0: down to label2 +# BB#3: # %for.body.lr.ph + i32.const $5=, 1 + i32.const $push10=, 2 + i32.lt_s $push11=, $3, $pop10 + br_if 0, $pop11 # 0: down to label2 +# BB#4: # %for.body.lr.ph + i32.const $push12=, 12 + i32.mul $push13=, $0, $pop12 + i32.add $push14=, $4, $pop13 + i32.load $push37=, 4($pop14) + tee_local $push36=, $6=, $pop37 + i32.const $push35=, 12 + i32.mul $push15=, $pop36, $pop35 + i32.add $push16=, $4, $pop15 + i32.load $push9=, 0($pop16) + i32.ne $push17=, $pop9, $1 + br_if 0, $pop17 # 0: down to label2 +# BB#5: # %for.body.preheader + i32.const $5=, 1 +.LBB0_6: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.const $push40=, 1 + i32.add $push39=, $5, $pop40 + tee_local $push38=, $5=, $pop39 + i32.ge_s $push19=, $pop38, $3 + br_if 1, $pop19 # 1: down to label2 +# BB#7: # %for.body + # in Loop: Header=BB0_6 Depth=1 + i32.const $push44=, 12 + i32.mul $push20=, $6, $pop44 + i32.add $push21=, $4, $pop20 + i32.load $push43=, 4($pop21) + tee_local $push42=, $6=, $pop43 + i32.const $push41=, 12 + i32.mul $push22=, $pop42, $pop41 + i32.add $push23=, $4, $pop22 + i32.load $push18=, 0($pop23) + i32.eq $push24=, $pop18, $1 + br_if 0, $pop24 # 0: up to label3 +.LBB0_8: # %for.end + end_loop + end_block # label2: + i32.eq $push25=, $5, $3 + br_if 1, $pop25 # 1: down to label0 +# BB#9: # %if.end7 + block + i32.const $push45=, 1 + i32.lt_s $push26=, $5, $pop45 + br_if 0, $pop26 # 0: down to label4 +# BB#10: # %for.body10.preheader + i32.const $push46=, 1 + i32.add $3=, $5, $pop46 + i32.const $push27=, 2 + i32.shl $push28=, $5, $pop27 + i32.add $6=, $2, $pop28 +.LBB0_11: # %for.body10 + # =>This Inner Loop Header: Depth=1 + loop # label5: + i32.const $push54=, 12 + i32.mul $push29=, $0, $pop54 + i32.add $push53=, $4, $pop29 + tee_local $push52=, $0=, $pop53 + i32.load $push30=, 8($pop52) + i32.store 0($6), $pop30 + i32.const $push51=, -4 + i32.add $6=, $6, $pop51 + i32.load $0=, 4($0) + i32.const $push50=, -1 + i32.add $push49=, $3, $pop50 + tee_local $push48=, $3=, $pop49 + i32.const $push47=, 1 + i32.gt_s $push31=, $pop48, $pop47 + br_if 0, $pop31 # 0: up to label5 +.LBB0_12: # %for.end16 + end_loop + end_block # label4: + i32.store 0($2), $0 + i32.const $push55=, 1 + i32.add $push33=, $5, $pop55 + return $pop33 +.LBB0_13: + end_block # label1: + i32.const $push32=, 0 + return $pop32 +.LBB0_14: # %if.then6 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %lor.lhs.false + i32.const $push11=, 0 + i32.load $push10=, __stack_pointer($pop11) + i32.const $push12=, 48 + i32.sub $push18=, $pop10, $pop12 + tee_local $push17=, $0=, $pop18 + i32.const $push0=, 32 + i32.add $push1=, $pop17, $pop0 + i32.const $push2=, 0 + i32.store 0($pop1), $pop2 + i32.const $push3=, 24 + i32.add $push4=, $0, $pop3 + i64.const $push5=, 0 + i64.store 0($pop4), $pop5 + i32.const $push6=, 16 + i32.add $push7=, $0, $pop6 + i64.const $push16=, 0 + i64.store 0($pop7), $pop16 + i64.const $push15=, 0 + i64.store 8($0), $pop15 + i64.const $push8=, 4294967297 + i64.store 0($0), $pop8 + i32.const $push14=, 0 + i32.store t($pop14), $0 + i32.const $push9=, 2 + i32.store 8($0), $pop9 + i32.const $push13=, 0 + # fallthrough-return: $pop13 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden t # @t + .type t,@object + .section .bss.t,"aw",@nobits + .globl t + .p2align 2 +t: + .int32 0 + .size t, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr49644.c.s b/src/binaryen/test/torture-s/pr49644.c.s new file mode 100644 index 0000000000..db5e256189 --- /dev/null +++ b/src/binaryen/test/torture-s/pr49644.c.s @@ -0,0 +1,17 @@ + .text + .file "pr49644.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr49712.c.s b/src/binaryen/test/torture-s/pr49712.c.s new file mode 100644 index 0000000000..b6308ef66a --- /dev/null +++ b/src/binaryen/test/torture-s/pr49712.c.s @@ -0,0 +1,130 @@ + .text + .file "pr49712.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .result i32 +# BB#0: # %entry + block + i32.const $push4=, 0 + i32.load $push0=, d($pop4) + i32.const $push3=, 0 + i32.le_s $push1=, $pop0, $pop3 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %for.end9 + i32.const $push5=, 0 + return $pop5 +.LBB1_2: # %for.body + end_block # label0: + i32.const $push9=, 0 + i32.const $push2=, 1 + i32.store d($pop9), $pop2 + i32.const $push8=, 0 + i32.const $push7=, 0 + i32.store e($pop8), $pop7 + i32.const $push6=, 0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push4=, 0 + i32.store b($pop5), $pop4 + block + i32.const $push3=, 0 + i32.load $push0=, c($pop3) + i32.eqz $push11=, $pop0 + br_if 0, $pop11 # 0: down to label1 +# BB#1: # %while.body.lr.ph + i32.const $push6=, 0 + i32.load $0=, d($pop6) +.LBB2_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push8=, 1 + i32.const $push7=, 1 + i32.gt_s $push1=, $0, $pop7 + i32.select $0=, $0, $pop8, $pop1 + br 0 # 0: up to label2 +.LBB2_3: # %for.inc.1 + end_loop + end_block # label1: + i32.const $push10=, 0 + i32.const $push2=, 2 + i32.store b($pop10), $pop2 + i32.const $push9=, 0 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .int32 0 # 0x0 + .size d, 4 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e + .p2align 2 +e: + .int32 0 # 0x0 + .size e, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .skip 8 + .size a, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr49768.c.s b/src/binaryen/test/torture-s/pr49768.c.s new file mode 100644 index 0000000000..a10da59b40 --- /dev/null +++ b/src/binaryen/test/torture-s/pr49768.c.s @@ -0,0 +1,17 @@ + .text + .file "pr49768.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr49886.c.s b/src/binaryen/test/torture-s/pr49886.c.s new file mode 100644 index 0000000000..75dc29744c --- /dev/null +++ b/src/binaryen/test/torture-s/pr49886.c.s @@ -0,0 +1,231 @@ + .text + .file "pr49886.c" + .section .text.never_ever,"ax",@progbits + .hidden never_ever # -- Begin function never_ever + .globl never_ever + .type never_ever,@function +never_ever: # @never_ever + .param i32, i32 +# BB#0: # %entry + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size never_ever, .Lfunc_end0-never_ever + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store cond($pop1), $pop0 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .section .text.bar_1,"ax",@progbits + .hidden bar_1 # -- Begin function bar_1 + .globl bar_1 + .type bar_1,@function +bar_1: # @bar_1 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 4($1) + i32.const $push1=, 1 + i32.add $push2=, $pop0, $pop1 + i32.store 4($1), $pop2 + call mark_cell@FUNCTION, $1 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size bar_1, .Lfunc_end2-bar_1 + # -- End function + .section .text.mark_cell,"ax",@progbits + .type mark_cell,@function # -- Begin function mark_cell +mark_cell: # @mark_cell + .param i32 + .local i32 +# BB#0: # %entry + block + block + block + block + block + block + block + block + block + block + i32.eqz $push49=, $0 + br_if 0, $pop49 # 0: down to label9 +# BB#1: # %entry + i32.const $push1=, 0 + i32.load $push0=, cond($pop1) + i32.eqz $push50=, $pop0 + br_if 0, $pop50 # 0: down to label9 +# BB#2: # %land.lhs.true + i32.load $push2=, 8($0) + i32.const $push3=, 4 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label9 +# BB#3: # %land.lhs.true2 + i32.load $push38=, 0($0) + tee_local $push37=, $0=, $pop38 + i32.eqz $push51=, $pop37 + br_if 0, $pop51 # 0: down to label9 +# BB#4: # %land.lhs.true4 + i32.const $push41=, 2 + i32.add $push40=, $0, $pop41 + tee_local $push39=, $1=, $pop40 + i32.load8_u $push5=, 0($pop39) + i32.const $push6=, 4 + i32.and $push7=, $pop5, $pop6 + i32.eqz $push52=, $pop7 + br_if 1, $pop52 # 1: down to label8 +# BB#5: # %land.lhs.true17 + i32.load8_u $push8=, 0($1) + i32.const $push42=, 2 + i32.and $push9=, $pop8, $pop42 + i32.eqz $push53=, $pop9 + br_if 2, $pop53 # 2: down to label7 +# BB#6: # %land.lhs.true33 + i32.const $push10=, 2 + i32.add $push11=, $0, $pop10 + i32.load8_u $push12=, 0($pop11) + i32.const $push43=, 1 + i32.and $push13=, $pop12, $pop43 + i32.eqz $push54=, $pop13 + br_if 3, $pop54 # 3: down to label6 +# BB#7: # %land.lhs.true49 + i32.const $push44=, 1 + i32.add $push14=, $0, $pop44 + i32.load8_u $push15=, 0($pop14) + i32.const $push16=, 7 + i32.shr_u $push17=, $pop15, $pop16 + i32.eqz $push55=, $pop17 + br_if 4, $pop55 # 4: down to label5 +# BB#8: # %land.lhs.true65 + i32.const $push18=, 1 + i32.add $push46=, $0, $pop18 + tee_local $push45=, $1=, $pop46 + i32.load8_u $push19=, 0($pop45) + i32.const $push20=, 64 + i32.and $push21=, $pop19, $pop20 + i32.eqz $push56=, $pop21 + br_if 5, $pop56 # 5: down to label4 +# BB#9: # %land.lhs.true81 + i32.load8_u $push22=, 0($1) + i32.const $push23=, 32 + i32.and $push24=, $pop22, $pop23 + i32.eqz $push57=, $pop24 + br_if 6, $pop57 # 6: down to label3 +# BB#10: # %land.lhs.true97 + i32.const $push25=, 1 + i32.add $push48=, $0, $pop25 + tee_local $push47=, $1=, $pop48 + i32.load8_u $push26=, 0($pop47) + i32.const $push27=, 16 + i32.and $push28=, $pop26, $pop27 + i32.eqz $push58=, $pop28 + br_if 7, $pop58 # 7: down to label2 +# BB#11: # %land.lhs.true113 + i32.load8_u $push29=, 0($1) + i32.const $push30=, 8 + i32.and $push31=, $pop29, $pop30 + i32.eqz $push59=, $pop31 + br_if 8, $pop59 # 8: down to label1 +# BB#12: # %land.lhs.true129 + i32.const $push32=, 1 + i32.add $push33=, $0, $pop32 + i32.load8_u $push34=, 0($pop33) + i32.const $push35=, 4 + i32.and $push36=, $pop34, $pop35 + i32.eqz $push60=, $pop36 + br_if 9, $pop60 # 9: down to label0 +.LBB3_13: # %if.end137 + end_block # label9: + return +.LBB3_14: # %if.then7 + end_block # label8: + call never_ever@FUNCTION, $0, $0 + unreachable +.LBB3_15: # %if.then22 + end_block # label7: + call never_ever@FUNCTION, $0, $0 + unreachable +.LBB3_16: # %if.then38 + end_block # label6: + call never_ever@FUNCTION, $0, $0 + unreachable +.LBB3_17: # %if.then54 + end_block # label5: + call never_ever@FUNCTION, $0, $0 + unreachable +.LBB3_18: # %if.then70 + end_block # label4: + call never_ever@FUNCTION, $0, $0 + unreachable +.LBB3_19: # %if.then86 + end_block # label3: + call never_ever@FUNCTION, $0, $0 + unreachable +.LBB3_20: # %if.then102 + end_block # label2: + call never_ever@FUNCTION, $0, $0 + unreachable +.LBB3_21: # %if.then118 + end_block # label1: + call never_ever@FUNCTION, $0, $0 + unreachable +.LBB3_22: # %if.then134 + end_block # label0: + call never_ever@FUNCTION, $0, $0 + unreachable + .endfunc +.Lfunc_end3: + .size mark_cell, .Lfunc_end3-mark_cell + # -- End function + .section .text.bar_2,"ax",@progbits + .hidden bar_2 # -- Begin function bar_2 + .globl bar_2 + .type bar_2,@function +bar_2: # @bar_2 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 4($1) + i32.const $push1=, 2 + i32.add $push2=, $pop0, $pop1 + i32.store 4($1), $pop2 + call mark_cell@FUNCTION, $1 + # fallthrough-return + .endfunc +.Lfunc_end4: + .size bar_2, .Lfunc_end4-bar_2 + # -- End function + .hidden cond # @cond + .type cond,@object + .section .bss.cond,"aw",@nobits + .globl cond + .p2align 2 +cond: + .int32 0 # 0x0 + .size cond, 4 + + .hidden gi # @gi + .type gi,@object + .section .bss.gi,"aw",@nobits + .globl gi + .p2align 2 +gi: + .int32 0 # 0x0 + .size gi, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr51023.c.s b/src/binaryen/test/torture-s/pr51023.c.s new file mode 100644 index 0000000000..07ea4c49a7 --- /dev/null +++ b/src/binaryen/test/torture-s/pr51023.c.s @@ -0,0 +1,34 @@ + .text + .file "pr51023.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 16 + i32.shl $push1=, $0, $pop0 + i32.const $push3=, 16 + i32.shr_s $push2=, $pop1, $pop3 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr51323.c.s b/src/binaryen/test/torture-s/pr51323.c.s new file mode 100644 index 0000000000..f54490d441 --- /dev/null +++ b/src/binaryen/test/torture-s/pr51323.c.s @@ -0,0 +1,116 @@ + .text + .file "pr51323.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 +# BB#0: # %entry + block + i32.const $push1=, 9 + i32.ne $push2=, $2, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %entry + br_if 0, $1 # 0: down to label0 +# BB#2: # %entry + i32.const $push3=, 0 + i32.load $push0=, v($pop3) + i32.ne $push4=, $pop0, $0 + br_if 0, $pop4 # 0: down to label0 +# BB#3: # %if.end + return +.LBB0_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 4($1) + i32.const $push1=, 0 + call foo@FUNCTION, $pop0, $pop1, $0 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push14=, 0 + i32.const $push12=, 0 + i32.load $push11=, __stack_pointer($pop12) + i32.const $push13=, 48 + i32.sub $push31=, $pop11, $pop13 + tee_local $push30=, $0=, $pop31 + i32.store __stack_pointer($pop14), $pop30 + i32.const $push1=, 0 + i32.const $push0=, 3 + i32.store v($pop1), $pop0 + i32.const $push18=, 16 + i32.add $push19=, $0, $pop18 + i32.const $push2=, 8 + i32.add $push3=, $pop19, $pop2 + i32.const $push4=, 4 + i32.store 0($pop3), $pop4 + i64.const $push5=, 12884901890 + i64.store 32($0), $pop5 + i32.const $push29=, 4 + i32.store 40($0), $pop29 + i64.const $push28=, 12884901890 + i64.store 16($0), $pop28 + i32.const $push6=, 9 + i32.const $push20=, 16 + i32.add $push21=, $0, $pop20 + call bar@FUNCTION, $pop6, $pop21 + i32.const $push27=, 0 + i32.const $push7=, 17 + i32.store v($pop27), $pop7 + i32.const $push26=, 8 + i32.add $push8=, $0, $pop26 + i32.const $push9=, 18 + i32.store 0($pop8), $pop9 + i64.const $push10=, 73014444048 + i64.store 32($0), $pop10 + i32.const $push25=, 18 + i32.store 40($0), $pop25 + i64.const $push24=, 73014444048 + i64.store 0($0), $pop24 + i32.const $push23=, 9 + call bar@FUNCTION, $pop23, $0 + i32.const $push17=, 0 + i32.const $push15=, 48 + i32.add $push16=, $0, $pop15 + i32.store __stack_pointer($pop17), $pop16 + i32.const $push22=, 0 + # fallthrough-return: $pop22 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden v # @v + .type v,@object + .section .bss.v,"aw",@nobits + .globl v + .p2align 2 +v: + .int32 0 # 0x0 + .size v, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr51466.c.s b/src/binaryen/test/torture-s/pr51466.c.s new file mode 100644 index 0000000000..33c08b4e18 --- /dev/null +++ b/src/binaryen/test/torture-s/pr51466.c.s @@ -0,0 +1,120 @@ + .text + .file "pr51466.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push7=, $pop4, $pop6 + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.add $push2=, $pop7, $pop1 + i32.const $push3=, 6 + i32.store 0($pop2), $pop3 + i32.const $push8=, 6 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push8=, $pop5, $pop7 + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.add $push10=, $pop8, $pop1 + tee_local $push9=, $0=, $pop10 + i32.const $push2=, 6 + i32.store 0($pop9), $pop2 + i32.const $push3=, 8 + i32.store 0($0), $pop3 + i32.load $push4=, 0($0) + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push11=, $pop5, $pop7 + tee_local $push10=, $1=, $pop11 + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.add $push9=, $pop10, $pop1 + tee_local $push8=, $0=, $pop9 + i32.const $push2=, 6 + i32.store 0($pop8), $pop2 + i32.const $push3=, 8 + i32.store 0($1), $pop3 + i32.load $push4=, 0($0) + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end2: + .size baz, .Lfunc_end2-baz + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 3 + i32.call $drop=, foo@FUNCTION, $pop0 + block + i32.const $push1=, 2 + i32.call $push2=, bar@FUNCTION, $pop1 + i32.const $push12=, 8 + i32.ne $push3=, $pop2, $pop12 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %lor.lhs.false3 + i32.const $push4=, 0 + i32.call $push5=, baz@FUNCTION, $pop4 + i32.const $push13=, 8 + i32.ne $push6=, $pop5, $pop13 + br_if 0, $pop6 # 0: down to label0 +# BB#2: # %lor.lhs.false6 + i32.const $push7=, 1 + i32.call $push8=, baz@FUNCTION, $pop7 + i32.const $push9=, 6 + i32.ne $push10=, $pop8, $pop9 + br_if 0, $pop10 # 0: down to label0 +# BB#3: # %if.end + i32.const $push11=, 0 + return $pop11 +.LBB3_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr51581-1.c.s b/src/binaryen/test/torture-s/pr51581-1.c.s new file mode 100644 index 0000000000..c75bb3dbac --- /dev/null +++ b/src/binaryen/test/torture-s/pr51581-1.c.s @@ -0,0 +1,738 @@ + .text + .file "pr51581-1.c" + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .local i32 +# BB#0: # %entry + i32.const $0=, -16384 +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push9=, c+16384 + i32.add $push0=, $0, $pop9 + i32.const $push8=, a+16384 + i32.add $push1=, $0, $pop8 + i32.load $push2=, 0($pop1) + i32.const $push7=, 3 + i32.div_s $push3=, $pop2, $pop7 + i32.store 0($pop0), $pop3 + i32.const $push6=, 4 + i32.add $push5=, $0, $pop6 + tee_local $push4=, $0=, $pop5 + br_if 0, $pop4 # 0: up to label0 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .local i32 +# BB#0: # %entry + i32.const $0=, -16384 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push9=, d+16384 + i32.add $push0=, $0, $pop9 + i32.const $push8=, b+16384 + i32.add $push1=, $0, $pop8 + i32.load $push2=, 0($pop1) + i32.const $push7=, 3 + i32.div_u $push3=, $pop2, $pop7 + i32.store 0($pop0), $pop3 + i32.const $push6=, 4 + i32.add $push5=, $0, $pop6 + tee_local $push4=, $0=, $pop5 + br_if 0, $pop4 # 0: up to label1 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end1: + .size f2, .Lfunc_end1-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .local i32 +# BB#0: # %entry + i32.const $0=, -16384 +.LBB2_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push9=, c+16384 + i32.add $push0=, $0, $pop9 + i32.const $push8=, a+16384 + i32.add $push1=, $0, $pop8 + i32.load $push2=, 0($pop1) + i32.const $push7=, 18 + i32.div_s $push3=, $pop2, $pop7 + i32.store 0($pop0), $pop3 + i32.const $push6=, 4 + i32.add $push5=, $0, $pop6 + tee_local $push4=, $0=, $pop5 + br_if 0, $pop4 # 0: up to label2 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end2: + .size f3, .Lfunc_end2-f3 + # -- End function + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 + .local i32 +# BB#0: # %entry + i32.const $0=, -16384 +.LBB3_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.const $push9=, d+16384 + i32.add $push0=, $0, $pop9 + i32.const $push8=, b+16384 + i32.add $push1=, $0, $pop8 + i32.load $push2=, 0($pop1) + i32.const $push7=, 18 + i32.div_u $push3=, $pop2, $pop7 + i32.store 0($pop0), $pop3 + i32.const $push6=, 4 + i32.add $push5=, $0, $pop6 + tee_local $push4=, $0=, $pop5 + br_if 0, $pop4 # 0: up to label3 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end3: + .size f4, .Lfunc_end3-f4 + # -- End function + .section .text.f5,"ax",@progbits + .hidden f5 # -- Begin function f5 + .globl f5 + .type f5,@function +f5: # @f5 + .local i32 +# BB#0: # %entry + i32.const $0=, -16384 +.LBB4_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label4: + i32.const $push9=, c+16384 + i32.add $push0=, $0, $pop9 + i32.const $push8=, a+16384 + i32.add $push1=, $0, $pop8 + i32.load $push2=, 0($pop1) + i32.const $push7=, 19 + i32.div_s $push3=, $pop2, $pop7 + i32.store 0($pop0), $pop3 + i32.const $push6=, 4 + i32.add $push5=, $0, $pop6 + tee_local $push4=, $0=, $pop5 + br_if 0, $pop4 # 0: up to label4 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end4: + .size f5, .Lfunc_end4-f5 + # -- End function + .section .text.f6,"ax",@progbits + .hidden f6 # -- Begin function f6 + .globl f6 + .type f6,@function +f6: # @f6 + .local i32 +# BB#0: # %entry + i32.const $0=, -16384 +.LBB5_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label5: + i32.const $push9=, d+16384 + i32.add $push0=, $0, $pop9 + i32.const $push8=, b+16384 + i32.add $push1=, $0, $pop8 + i32.load $push2=, 0($pop1) + i32.const $push7=, 19 + i32.div_u $push3=, $pop2, $pop7 + i32.store 0($pop0), $pop3 + i32.const $push6=, 4 + i32.add $push5=, $0, $pop6 + tee_local $push4=, $0=, $pop5 + br_if 0, $pop4 # 0: up to label5 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end5: + .size f6, .Lfunc_end5-f6 + # -- End function + .section .text.f7,"ax",@progbits + .hidden f7 # -- Begin function f7 + .globl f7 + .type f7,@function +f7: # @f7 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, -16384 +.LBB6_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label6: + i32.const $push17=, c+16384 + i32.add $push7=, $1, $pop17 + i32.const $push16=, a+16384 + i32.add $push0=, $1, $pop16 + i32.load $push15=, 0($pop0) + tee_local $push14=, $0=, $pop15 + i64.extend_s/i32 $push2=, $pop14 + i64.const $push13=, 1431655766 + i64.mul $push3=, $pop2, $pop13 + i64.const $push12=, 32 + i64.shr_u $push4=, $pop3, $pop12 + i32.wrap/i64 $push5=, $pop4 + i32.const $push11=, 31 + i32.shr_s $push1=, $0, $pop11 + i32.sub $push6=, $pop5, $pop1 + i32.store 0($pop7), $pop6 + i32.const $push10=, 4 + i32.add $push9=, $1, $pop10 + tee_local $push8=, $1=, $pop9 + br_if 0, $pop8 # 0: up to label6 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end6: + .size f7, .Lfunc_end6-f7 + # -- End function + .section .text.f8,"ax",@progbits + .hidden f8 # -- Begin function f8 + .globl f8 + .type f8,@function +f8: # @f8 + .local i32 +# BB#0: # %entry + i32.const $0=, -16384 +.LBB7_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label7: + i32.const $push11=, d+16384 + i32.add $push0=, $0, $pop11 + i32.const $push10=, b+16384 + i32.add $push1=, $0, $pop10 + i64.load32_u $push2=, 0($pop1) + i64.const $push9=, 2863311531 + i64.mul $push3=, $pop2, $pop9 + i64.const $push8=, 33 + i64.shr_u $push4=, $pop3, $pop8 + i64.store32 0($pop0), $pop4 + i32.const $push7=, 4 + i32.add $push6=, $0, $pop7 + tee_local $push5=, $0=, $pop6 + br_if 0, $pop5 # 0: up to label7 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end7: + .size f8, .Lfunc_end7-f8 + # -- End function + .section .text.f9,"ax",@progbits + .hidden f9 # -- Begin function f9 + .globl f9 + .type f9,@function +f9: # @f9 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, -16384 +.LBB8_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label8: + i32.const $push17=, c+16384 + i32.add $push7=, $1, $pop17 + i32.const $push16=, a+16384 + i32.add $push0=, $1, $pop16 + i32.load $push15=, 0($pop0) + tee_local $push14=, $0=, $pop15 + i64.extend_s/i32 $push2=, $pop14 + i64.const $push13=, 954437177 + i64.mul $push3=, $pop2, $pop13 + i64.const $push12=, 34 + i64.shr_s $push4=, $pop3, $pop12 + i32.wrap/i64 $push5=, $pop4 + i32.const $push11=, 31 + i32.shr_s $push1=, $0, $pop11 + i32.sub $push6=, $pop5, $pop1 + i32.store 0($pop7), $pop6 + i32.const $push10=, 4 + i32.add $push9=, $1, $pop10 + tee_local $push8=, $1=, $pop9 + br_if 0, $pop8 # 0: up to label8 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end8: + .size f9, .Lfunc_end8-f9 + # -- End function + .section .text.f10,"ax",@progbits + .hidden f10 # -- Begin function f10 + .globl f10 + .type f10,@function +f10: # @f10 + .local i32 +# BB#0: # %entry + i32.const $0=, -16384 +.LBB9_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label9: + i32.const $push11=, d+16384 + i32.add $push0=, $0, $pop11 + i32.const $push10=, b+16384 + i32.add $push1=, $0, $pop10 + i64.load32_u $push2=, 0($pop1) + i64.const $push9=, 954437177 + i64.mul $push3=, $pop2, $pop9 + i64.const $push8=, 34 + i64.shr_u $push4=, $pop3, $pop8 + i64.store32 0($pop0), $pop4 + i32.const $push7=, 4 + i32.add $push6=, $0, $pop7 + tee_local $push5=, $0=, $pop6 + br_if 0, $pop5 # 0: up to label9 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end9: + .size f10, .Lfunc_end9-f10 + # -- End function + .section .text.f11,"ax",@progbits + .hidden f11 # -- Begin function f11 + .globl f11 + .type f11,@function +f11: # @f11 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, -16384 +.LBB10_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label10: + i32.const $push17=, c+16384 + i32.add $push7=, $1, $pop17 + i32.const $push16=, a+16384 + i32.add $push0=, $1, $pop16 + i32.load $push15=, 0($pop0) + tee_local $push14=, $0=, $pop15 + i64.extend_s/i32 $push2=, $pop14 + i64.const $push13=, 1808407283 + i64.mul $push3=, $pop2, $pop13 + i64.const $push12=, 35 + i64.shr_s $push4=, $pop3, $pop12 + i32.wrap/i64 $push5=, $pop4 + i32.const $push11=, 31 + i32.shr_s $push1=, $0, $pop11 + i32.sub $push6=, $pop5, $pop1 + i32.store 0($pop7), $pop6 + i32.const $push10=, 4 + i32.add $push9=, $1, $pop10 + tee_local $push8=, $1=, $pop9 + br_if 0, $pop8 # 0: up to label10 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end10: + .size f11, .Lfunc_end10-f11 + # -- End function + .section .text.f12,"ax",@progbits + .hidden f12 # -- Begin function f12 + .globl f12 + .type f12,@function +f12: # @f12 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, -16384 +.LBB11_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label11: + i32.const $push21=, d+16384 + i32.add $push8=, $1, $pop21 + i32.const $push20=, b+16384 + i32.add $push0=, $1, $pop20 + i32.load $push19=, 0($pop0) + tee_local $push18=, $0=, $pop19 + i64.extend_u/i32 $push1=, $0 + i64.const $push17=, 2938661835 + i64.mul $push2=, $pop1, $pop17 + i64.const $push16=, 32 + i64.shr_u $push3=, $pop2, $pop16 + i32.wrap/i64 $push15=, $pop3 + tee_local $push14=, $0=, $pop15 + i32.sub $push4=, $pop18, $pop14 + i32.const $push13=, 1 + i32.shr_u $push5=, $pop4, $pop13 + i32.add $push6=, $pop5, $0 + i32.const $push12=, 4 + i32.shr_u $push7=, $pop6, $pop12 + i32.store 0($pop8), $pop7 + i32.const $push11=, 4 + i32.add $push10=, $1, $pop11 + tee_local $push9=, $1=, $pop10 + br_if 0, $pop9 # 0: up to label11 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end11: + .size f12, .Lfunc_end11-f12 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, 0 + i32.const $0=, -16384 +.LBB12_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label12: + #APP + #NO_APP + i32.const $push90=, b+16384 + i32.add $push0=, $0, $pop90 + i32.store 0($pop0), $1 + i32.const $push89=, a+16384 + i32.add $push2=, $0, $pop89 + i32.const $push88=, -2048 + i32.add $push1=, $1, $pop88 + i32.store 0($pop2), $pop1 + i32.const $push87=, 1 + i32.add $1=, $1, $pop87 + i32.const $push86=, 4 + i32.add $push85=, $0, $pop86 + tee_local $push84=, $0=, $pop85 + br_if 0, $pop84 # 0: up to label12 +# BB#2: # %for.end + end_loop + i32.const $1=, 0 + i32.const $push94=, 0 + i32.const $push3=, 2147483647 + i32.store a+16380($pop94), $pop3 + i32.const $push93=, 0 + i64.const $push4=, -9223372030412324864 + i64.store a($pop93), $pop4 + i32.const $0=, -1 + i32.const $push92=, 0 + i32.const $push91=, -1 + i32.store b+16380($pop92), $pop91 + call f1@FUNCTION + call f2@FUNCTION +.LBB12_3: # %for.body4 + # =>This Inner Loop Header: Depth=1 + block + loop # label14: + i32.const $push97=, c + i32.add $push8=, $1, $pop97 + i32.load $push9=, 0($pop8) + i32.const $push96=, a + i32.add $push5=, $1, $pop96 + i32.load $push6=, 0($pop5) + i32.const $push95=, 3 + i32.div_s $push7=, $pop6, $pop95 + i32.ne $push10=, $pop9, $pop7 + br_if 1, $pop10 # 1: down to label13 +# BB#4: # %lor.lhs.false + # in Loop: Header=BB12_3 Depth=1 + i32.const $push100=, d + i32.add $push14=, $1, $pop100 + i32.load $push15=, 0($pop14) + i32.const $push99=, b + i32.add $push11=, $1, $pop99 + i32.load $push12=, 0($pop11) + i32.const $push98=, 3 + i32.div_u $push13=, $pop12, $pop98 + i32.ne $push16=, $pop15, $pop13 + br_if 1, $pop16 # 1: down to label13 +# BB#5: # %for.cond2 + # in Loop: Header=BB12_3 Depth=1 + i32.const $push105=, 4 + i32.add $1=, $1, $pop105 + i32.const $push104=, 1 + i32.add $push103=, $0, $pop104 + tee_local $push102=, $0=, $pop103 + i32.const $push101=, 4094 + i32.le_u $push17=, $pop102, $pop101 + br_if 0, $pop17 # 0: up to label14 +# BB#6: # %for.end14 + end_loop + call f3@FUNCTION + call f4@FUNCTION + i32.const $0=, -1 + i32.const $1=, 0 +.LBB12_7: # %for.body17 + # =>This Inner Loop Header: Depth=1 + loop # label15: + i32.const $push108=, c + i32.add $push21=, $1, $pop108 + i32.load $push22=, 0($pop21) + i32.const $push107=, a + i32.add $push18=, $1, $pop107 + i32.load $push19=, 0($pop18) + i32.const $push106=, 18 + i32.div_s $push20=, $pop19, $pop106 + i32.ne $push23=, $pop22, $pop20 + br_if 1, $pop23 # 1: down to label13 +# BB#8: # %lor.lhs.false22 + # in Loop: Header=BB12_7 Depth=1 + i32.const $push111=, d + i32.add $push27=, $1, $pop111 + i32.load $push28=, 0($pop27) + i32.const $push110=, b + i32.add $push24=, $1, $pop110 + i32.load $push25=, 0($pop24) + i32.const $push109=, 18 + i32.div_u $push26=, $pop25, $pop109 + i32.ne $push29=, $pop28, $pop26 + br_if 1, $pop29 # 1: down to label13 +# BB#9: # %for.cond15 + # in Loop: Header=BB12_7 Depth=1 + i32.const $push116=, 4 + i32.add $1=, $1, $pop116 + i32.const $push115=, 1 + i32.add $push114=, $0, $pop115 + tee_local $push113=, $0=, $pop114 + i32.const $push112=, 4094 + i32.le_u $push30=, $pop113, $pop112 + br_if 0, $pop30 # 0: up to label15 +# BB#10: # %for.end31 + end_loop + call f5@FUNCTION + call f6@FUNCTION + i32.const $0=, -1 + i32.const $1=, 0 +.LBB12_11: # %for.body34 + # =>This Inner Loop Header: Depth=1 + loop # label16: + i32.const $push119=, c + i32.add $push34=, $1, $pop119 + i32.load $push35=, 0($pop34) + i32.const $push118=, a + i32.add $push31=, $1, $pop118 + i32.load $push32=, 0($pop31) + i32.const $push117=, 19 + i32.div_s $push33=, $pop32, $pop117 + i32.ne $push36=, $pop35, $pop33 + br_if 1, $pop36 # 1: down to label13 +# BB#12: # %lor.lhs.false39 + # in Loop: Header=BB12_11 Depth=1 + i32.const $push122=, d + i32.add $push40=, $1, $pop122 + i32.load $push41=, 0($pop40) + i32.const $push121=, b + i32.add $push37=, $1, $pop121 + i32.load $push38=, 0($pop37) + i32.const $push120=, 19 + i32.div_u $push39=, $pop38, $pop120 + i32.ne $push42=, $pop41, $pop39 + br_if 1, $pop42 # 1: down to label13 +# BB#13: # %for.cond32 + # in Loop: Header=BB12_11 Depth=1 + i32.const $push127=, 4 + i32.add $1=, $1, $pop127 + i32.const $push126=, 1 + i32.add $push125=, $0, $pop126 + tee_local $push124=, $0=, $pop125 + i32.const $push123=, 4094 + i32.le_u $push43=, $pop124, $pop123 + br_if 0, $pop43 # 0: up to label16 +# BB#14: # %for.end48 + end_loop + call f7@FUNCTION + call f8@FUNCTION + i32.const $0=, -1 + i32.const $1=, 0 +.LBB12_15: # %for.body51 + # =>This Inner Loop Header: Depth=1 + loop # label17: + i32.const $push130=, c + i32.add $push47=, $1, $pop130 + i32.load $push48=, 0($pop47) + i32.const $push129=, a + i32.add $push44=, $1, $pop129 + i32.load $push45=, 0($pop44) + i32.const $push128=, 3 + i32.div_s $push46=, $pop45, $pop128 + i32.ne $push49=, $pop48, $pop46 + br_if 1, $pop49 # 1: down to label13 +# BB#16: # %lor.lhs.false56 + # in Loop: Header=BB12_15 Depth=1 + i32.const $push133=, d + i32.add $push53=, $1, $pop133 + i32.load $push54=, 0($pop53) + i32.const $push132=, b + i32.add $push50=, $1, $pop132 + i32.load $push51=, 0($pop50) + i32.const $push131=, 3 + i32.div_u $push52=, $pop51, $pop131 + i32.ne $push55=, $pop54, $pop52 + br_if 1, $pop55 # 1: down to label13 +# BB#17: # %for.cond49 + # in Loop: Header=BB12_15 Depth=1 + i32.const $push138=, 4 + i32.add $1=, $1, $pop138 + i32.const $push137=, 1 + i32.add $push136=, $0, $pop137 + tee_local $push135=, $0=, $pop136 + i32.const $push134=, 4094 + i32.le_u $push56=, $pop135, $pop134 + br_if 0, $pop56 # 0: up to label17 +# BB#18: # %for.end65 + end_loop + call f9@FUNCTION + call f10@FUNCTION + i32.const $0=, -1 + i32.const $1=, 0 +.LBB12_19: # %for.body68 + # =>This Inner Loop Header: Depth=1 + loop # label18: + i32.const $push141=, c + i32.add $push60=, $1, $pop141 + i32.load $push61=, 0($pop60) + i32.const $push140=, a + i32.add $push57=, $1, $pop140 + i32.load $push58=, 0($pop57) + i32.const $push139=, 18 + i32.div_s $push59=, $pop58, $pop139 + i32.ne $push62=, $pop61, $pop59 + br_if 1, $pop62 # 1: down to label13 +# BB#20: # %lor.lhs.false73 + # in Loop: Header=BB12_19 Depth=1 + i32.const $push144=, d + i32.add $push66=, $1, $pop144 + i32.load $push67=, 0($pop66) + i32.const $push143=, b + i32.add $push63=, $1, $pop143 + i32.load $push64=, 0($pop63) + i32.const $push142=, 18 + i32.div_u $push65=, $pop64, $pop142 + i32.ne $push68=, $pop67, $pop65 + br_if 1, $pop68 # 1: down to label13 +# BB#21: # %for.cond66 + # in Loop: Header=BB12_19 Depth=1 + i32.const $push149=, 4 + i32.add $1=, $1, $pop149 + i32.const $push148=, 1 + i32.add $push147=, $0, $pop148 + tee_local $push146=, $0=, $pop147 + i32.const $push145=, 4094 + i32.le_u $push69=, $pop146, $pop145 + br_if 0, $pop69 # 0: up to label18 +# BB#22: # %for.end82 + end_loop + call f11@FUNCTION + call f12@FUNCTION + i32.const $0=, -1 + i32.const $1=, 0 +.LBB12_23: # %for.body85 + # =>This Inner Loop Header: Depth=1 + loop # label19: + i32.const $push152=, c + i32.add $push73=, $1, $pop152 + i32.load $push74=, 0($pop73) + i32.const $push151=, a + i32.add $push70=, $1, $pop151 + i32.load $push71=, 0($pop70) + i32.const $push150=, 19 + i32.div_s $push72=, $pop71, $pop150 + i32.ne $push75=, $pop74, $pop72 + br_if 1, $pop75 # 1: down to label13 +# BB#24: # %lor.lhs.false90 + # in Loop: Header=BB12_23 Depth=1 + i32.const $push155=, d + i32.add $push79=, $1, $pop155 + i32.load $push80=, 0($pop79) + i32.const $push154=, b + i32.add $push76=, $1, $pop154 + i32.load $push77=, 0($pop76) + i32.const $push153=, 19 + i32.div_u $push78=, $pop77, $pop153 + i32.ne $push81=, $pop80, $pop78 + br_if 1, $pop81 # 1: down to label13 +# BB#25: # %for.cond83 + # in Loop: Header=BB12_23 Depth=1 + i32.const $push160=, 4 + i32.add $1=, $1, $pop160 + i32.const $push159=, 1 + i32.add $push158=, $0, $pop159 + tee_local $push157=, $0=, $pop158 + i32.const $push156=, 4094 + i32.le_u $push82=, $pop157, $pop156 + br_if 0, $pop82 # 0: up to label19 +# BB#26: # %for.end99 + end_loop + i32.const $push83=, 0 + return $pop83 +.LBB12_27: # %if.then + end_block # label13: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end12: + .size main, .Lfunc_end12-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 4 +a: + .skip 16384 + .size a, 16384 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 4 +c: + .skip 16384 + .size c, 16384 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 4 +b: + .skip 16384 + .size b, 16384 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 4 +d: + .skip 16384 + .size d, 16384 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr51581-2.c.s b/src/binaryen/test/torture-s/pr51581-2.c.s new file mode 100644 index 0000000000..af293be3f8 --- /dev/null +++ b/src/binaryen/test/torture-s/pr51581-2.c.s @@ -0,0 +1,762 @@ + .text + .file "pr51581-2.c" + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .local i32 +# BB#0: # %entry + i32.const $0=, -16384 +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push9=, c+16384 + i32.add $push0=, $0, $pop9 + i32.const $push8=, a+16384 + i32.add $push1=, $0, $pop8 + i32.load $push2=, 0($pop1) + i32.const $push7=, 3 + i32.rem_s $push3=, $pop2, $pop7 + i32.store 0($pop0), $pop3 + i32.const $push6=, 4 + i32.add $push5=, $0, $pop6 + tee_local $push4=, $0=, $pop5 + br_if 0, $pop4 # 0: up to label0 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .local i32 +# BB#0: # %entry + i32.const $0=, -16384 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push9=, d+16384 + i32.add $push0=, $0, $pop9 + i32.const $push8=, b+16384 + i32.add $push1=, $0, $pop8 + i32.load $push2=, 0($pop1) + i32.const $push7=, 3 + i32.rem_u $push3=, $pop2, $pop7 + i32.store 0($pop0), $pop3 + i32.const $push6=, 4 + i32.add $push5=, $0, $pop6 + tee_local $push4=, $0=, $pop5 + br_if 0, $pop4 # 0: up to label1 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end1: + .size f2, .Lfunc_end1-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .local i32 +# BB#0: # %entry + i32.const $0=, -16384 +.LBB2_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push9=, c+16384 + i32.add $push0=, $0, $pop9 + i32.const $push8=, a+16384 + i32.add $push1=, $0, $pop8 + i32.load $push2=, 0($pop1) + i32.const $push7=, 18 + i32.rem_s $push3=, $pop2, $pop7 + i32.store 0($pop0), $pop3 + i32.const $push6=, 4 + i32.add $push5=, $0, $pop6 + tee_local $push4=, $0=, $pop5 + br_if 0, $pop4 # 0: up to label2 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end2: + .size f3, .Lfunc_end2-f3 + # -- End function + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 + .local i32 +# BB#0: # %entry + i32.const $0=, -16384 +.LBB3_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.const $push9=, d+16384 + i32.add $push0=, $0, $pop9 + i32.const $push8=, b+16384 + i32.add $push1=, $0, $pop8 + i32.load $push2=, 0($pop1) + i32.const $push7=, 18 + i32.rem_u $push3=, $pop2, $pop7 + i32.store 0($pop0), $pop3 + i32.const $push6=, 4 + i32.add $push5=, $0, $pop6 + tee_local $push4=, $0=, $pop5 + br_if 0, $pop4 # 0: up to label3 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end3: + .size f4, .Lfunc_end3-f4 + # -- End function + .section .text.f5,"ax",@progbits + .hidden f5 # -- Begin function f5 + .globl f5 + .type f5,@function +f5: # @f5 + .local i32 +# BB#0: # %entry + i32.const $0=, -16384 +.LBB4_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label4: + i32.const $push9=, c+16384 + i32.add $push0=, $0, $pop9 + i32.const $push8=, a+16384 + i32.add $push1=, $0, $pop8 + i32.load $push2=, 0($pop1) + i32.const $push7=, 19 + i32.rem_s $push3=, $pop2, $pop7 + i32.store 0($pop0), $pop3 + i32.const $push6=, 4 + i32.add $push5=, $0, $pop6 + tee_local $push4=, $0=, $pop5 + br_if 0, $pop4 # 0: up to label4 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end4: + .size f5, .Lfunc_end4-f5 + # -- End function + .section .text.f6,"ax",@progbits + .hidden f6 # -- Begin function f6 + .globl f6 + .type f6,@function +f6: # @f6 + .local i32 +# BB#0: # %entry + i32.const $0=, -16384 +.LBB5_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label5: + i32.const $push9=, d+16384 + i32.add $push0=, $0, $pop9 + i32.const $push8=, b+16384 + i32.add $push1=, $0, $pop8 + i32.load $push2=, 0($pop1) + i32.const $push7=, 19 + i32.rem_u $push3=, $pop2, $pop7 + i32.store 0($pop0), $pop3 + i32.const $push6=, 4 + i32.add $push5=, $0, $pop6 + tee_local $push4=, $0=, $pop5 + br_if 0, $pop4 # 0: up to label5 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end5: + .size f6, .Lfunc_end5-f6 + # -- End function + .section .text.f7,"ax",@progbits + .hidden f7 # -- Begin function f7 + .globl f7 + .type f7,@function +f7: # @f7 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, -16384 +.LBB6_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label6: + i32.const $push20=, c+16384 + i32.add $push9=, $1, $pop20 + i32.const $push19=, a+16384 + i32.add $push0=, $1, $pop19 + i32.load $push18=, 0($pop0) + tee_local $push17=, $0=, $pop18 + i64.extend_s/i32 $push2=, $pop17 + i64.const $push16=, 1431655766 + i64.mul $push3=, $pop2, $pop16 + i64.const $push15=, 32 + i64.shr_u $push4=, $pop3, $pop15 + i32.wrap/i64 $push5=, $pop4 + i32.const $push14=, 31 + i32.shr_s $push1=, $0, $pop14 + i32.sub $push6=, $pop5, $pop1 + i32.const $push13=, -3 + i32.mul $push7=, $pop6, $pop13 + i32.add $push8=, $pop7, $0 + i32.store 0($pop9), $pop8 + i32.const $push12=, 4 + i32.add $push11=, $1, $pop12 + tee_local $push10=, $1=, $pop11 + br_if 0, $pop10 # 0: up to label6 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end6: + .size f7, .Lfunc_end6-f7 + # -- End function + .section .text.f8,"ax",@progbits + .hidden f8 # -- Begin function f8 + .globl f8 + .type f8,@function +f8: # @f8 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, -16384 +.LBB7_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label7: + i32.const $push17=, d+16384 + i32.add $push7=, $1, $pop17 + i32.const $push16=, b+16384 + i32.add $push0=, $1, $pop16 + i32.load $push15=, 0($pop0) + tee_local $push14=, $0=, $pop15 + i64.extend_u/i32 $push1=, $pop14 + i64.const $push13=, 2863311531 + i64.mul $push2=, $pop1, $pop13 + i64.const $push12=, 33 + i64.shr_u $push3=, $pop2, $pop12 + i32.wrap/i64 $push4=, $pop3 + i32.const $push11=, -3 + i32.mul $push5=, $pop4, $pop11 + i32.add $push6=, $pop5, $0 + i32.store 0($pop7), $pop6 + i32.const $push10=, 4 + i32.add $push9=, $1, $pop10 + tee_local $push8=, $1=, $pop9 + br_if 0, $pop8 # 0: up to label7 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end7: + .size f8, .Lfunc_end7-f8 + # -- End function + .section .text.f9,"ax",@progbits + .hidden f9 # -- Begin function f9 + .globl f9 + .type f9,@function +f9: # @f9 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, -16384 +.LBB8_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label8: + i32.const $push20=, c+16384 + i32.add $push9=, $1, $pop20 + i32.const $push19=, a+16384 + i32.add $push0=, $1, $pop19 + i32.load $push18=, 0($pop0) + tee_local $push17=, $0=, $pop18 + i64.extend_s/i32 $push2=, $pop17 + i64.const $push16=, 954437177 + i64.mul $push3=, $pop2, $pop16 + i64.const $push15=, 34 + i64.shr_s $push4=, $pop3, $pop15 + i32.wrap/i64 $push5=, $pop4 + i32.const $push14=, 31 + i32.shr_s $push1=, $0, $pop14 + i32.sub $push6=, $pop5, $pop1 + i32.const $push13=, -18 + i32.mul $push7=, $pop6, $pop13 + i32.add $push8=, $pop7, $0 + i32.store 0($pop9), $pop8 + i32.const $push12=, 4 + i32.add $push11=, $1, $pop12 + tee_local $push10=, $1=, $pop11 + br_if 0, $pop10 # 0: up to label8 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end8: + .size f9, .Lfunc_end8-f9 + # -- End function + .section .text.f10,"ax",@progbits + .hidden f10 # -- Begin function f10 + .globl f10 + .type f10,@function +f10: # @f10 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, -16384 +.LBB9_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label9: + i32.const $push17=, d+16384 + i32.add $push7=, $1, $pop17 + i32.const $push16=, b+16384 + i32.add $push0=, $1, $pop16 + i32.load $push15=, 0($pop0) + tee_local $push14=, $0=, $pop15 + i64.extend_u/i32 $push1=, $pop14 + i64.const $push13=, 954437177 + i64.mul $push2=, $pop1, $pop13 + i64.const $push12=, 34 + i64.shr_u $push3=, $pop2, $pop12 + i32.wrap/i64 $push4=, $pop3 + i32.const $push11=, -18 + i32.mul $push5=, $pop4, $pop11 + i32.add $push6=, $pop5, $0 + i32.store 0($pop7), $pop6 + i32.const $push10=, 4 + i32.add $push9=, $1, $pop10 + tee_local $push8=, $1=, $pop9 + br_if 0, $pop8 # 0: up to label9 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end9: + .size f10, .Lfunc_end9-f10 + # -- End function + .section .text.f11,"ax",@progbits + .hidden f11 # -- Begin function f11 + .globl f11 + .type f11,@function +f11: # @f11 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, -16384 +.LBB10_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label10: + i32.const $push20=, c+16384 + i32.add $push9=, $1, $pop20 + i32.const $push19=, a+16384 + i32.add $push0=, $1, $pop19 + i32.load $push18=, 0($pop0) + tee_local $push17=, $0=, $pop18 + i64.extend_s/i32 $push2=, $pop17 + i64.const $push16=, 1808407283 + i64.mul $push3=, $pop2, $pop16 + i64.const $push15=, 35 + i64.shr_s $push4=, $pop3, $pop15 + i32.wrap/i64 $push5=, $pop4 + i32.const $push14=, 31 + i32.shr_s $push1=, $0, $pop14 + i32.sub $push6=, $pop5, $pop1 + i32.const $push13=, -19 + i32.mul $push7=, $pop6, $pop13 + i32.add $push8=, $pop7, $0 + i32.store 0($pop9), $pop8 + i32.const $push12=, 4 + i32.add $push11=, $1, $pop12 + tee_local $push10=, $1=, $pop11 + br_if 0, $pop10 # 0: up to label10 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end10: + .size f11, .Lfunc_end10-f11 + # -- End function + .section .text.f12,"ax",@progbits + .hidden f12 # -- Begin function f12 + .globl f12 + .type f12,@function +f12: # @f12 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $2=, -16384 +.LBB11_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label11: + i32.const $push24=, d+16384 + i32.add $push10=, $2, $pop24 + i32.const $push23=, b+16384 + i32.add $push0=, $2, $pop23 + i32.load $push22=, 0($pop0) + tee_local $push21=, $0=, $pop22 + i64.extend_u/i32 $push1=, $0 + i64.const $push20=, 2938661835 + i64.mul $push2=, $pop1, $pop20 + i64.const $push19=, 32 + i64.shr_u $push3=, $pop2, $pop19 + i32.wrap/i64 $push18=, $pop3 + tee_local $push17=, $1=, $pop18 + i32.sub $push4=, $pop21, $pop17 + i32.const $push16=, 1 + i32.shr_u $push5=, $pop4, $pop16 + i32.add $push6=, $pop5, $1 + i32.const $push15=, 4 + i32.shr_u $push7=, $pop6, $pop15 + i32.const $push14=, -19 + i32.mul $push8=, $pop7, $pop14 + i32.add $push9=, $pop8, $0 + i32.store 0($pop10), $pop9 + i32.const $push13=, 4 + i32.add $push12=, $2, $pop13 + tee_local $push11=, $2=, $pop12 + br_if 0, $pop11 # 0: up to label11 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end11: + .size f12, .Lfunc_end11-f12 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, 0 + i32.const $0=, -16384 +.LBB12_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label12: + #APP + #NO_APP + i32.const $push90=, b+16384 + i32.add $push0=, $0, $pop90 + i32.store 0($pop0), $1 + i32.const $push89=, a+16384 + i32.add $push2=, $0, $pop89 + i32.const $push88=, -2048 + i32.add $push1=, $1, $pop88 + i32.store 0($pop2), $pop1 + i32.const $push87=, 1 + i32.add $1=, $1, $pop87 + i32.const $push86=, 4 + i32.add $push85=, $0, $pop86 + tee_local $push84=, $0=, $pop85 + br_if 0, $pop84 # 0: up to label12 +# BB#2: # %for.end + end_loop + i32.const $1=, 0 + i32.const $push94=, 0 + i32.const $push3=, 2147483647 + i32.store a+16380($pop94), $pop3 + i32.const $push93=, 0 + i64.const $push4=, -9223372030412324864 + i64.store a($pop93), $pop4 + i32.const $0=, -1 + i32.const $push92=, 0 + i32.const $push91=, -1 + i32.store b+16380($pop92), $pop91 + call f1@FUNCTION + call f2@FUNCTION +.LBB12_3: # %for.body4 + # =>This Inner Loop Header: Depth=1 + block + loop # label14: + i32.const $push97=, c + i32.add $push8=, $1, $pop97 + i32.load $push9=, 0($pop8) + i32.const $push96=, a + i32.add $push5=, $1, $pop96 + i32.load $push6=, 0($pop5) + i32.const $push95=, 3 + i32.rem_s $push7=, $pop6, $pop95 + i32.ne $push10=, $pop9, $pop7 + br_if 1, $pop10 # 1: down to label13 +# BB#4: # %lor.lhs.false + # in Loop: Header=BB12_3 Depth=1 + i32.const $push100=, d + i32.add $push14=, $1, $pop100 + i32.load $push15=, 0($pop14) + i32.const $push99=, b + i32.add $push11=, $1, $pop99 + i32.load $push12=, 0($pop11) + i32.const $push98=, 3 + i32.rem_u $push13=, $pop12, $pop98 + i32.ne $push16=, $pop15, $pop13 + br_if 1, $pop16 # 1: down to label13 +# BB#5: # %for.cond2 + # in Loop: Header=BB12_3 Depth=1 + i32.const $push105=, 4 + i32.add $1=, $1, $pop105 + i32.const $push104=, 1 + i32.add $push103=, $0, $pop104 + tee_local $push102=, $0=, $pop103 + i32.const $push101=, 4094 + i32.le_u $push17=, $pop102, $pop101 + br_if 0, $pop17 # 0: up to label14 +# BB#6: # %for.end14 + end_loop + call f3@FUNCTION + call f4@FUNCTION + i32.const $0=, -1 + i32.const $1=, 0 +.LBB12_7: # %for.body17 + # =>This Inner Loop Header: Depth=1 + loop # label15: + i32.const $push108=, c + i32.add $push21=, $1, $pop108 + i32.load $push22=, 0($pop21) + i32.const $push107=, a + i32.add $push18=, $1, $pop107 + i32.load $push19=, 0($pop18) + i32.const $push106=, 18 + i32.rem_s $push20=, $pop19, $pop106 + i32.ne $push23=, $pop22, $pop20 + br_if 1, $pop23 # 1: down to label13 +# BB#8: # %lor.lhs.false22 + # in Loop: Header=BB12_7 Depth=1 + i32.const $push111=, d + i32.add $push27=, $1, $pop111 + i32.load $push28=, 0($pop27) + i32.const $push110=, b + i32.add $push24=, $1, $pop110 + i32.load $push25=, 0($pop24) + i32.const $push109=, 18 + i32.rem_u $push26=, $pop25, $pop109 + i32.ne $push29=, $pop28, $pop26 + br_if 1, $pop29 # 1: down to label13 +# BB#9: # %for.cond15 + # in Loop: Header=BB12_7 Depth=1 + i32.const $push116=, 4 + i32.add $1=, $1, $pop116 + i32.const $push115=, 1 + i32.add $push114=, $0, $pop115 + tee_local $push113=, $0=, $pop114 + i32.const $push112=, 4094 + i32.le_u $push30=, $pop113, $pop112 + br_if 0, $pop30 # 0: up to label15 +# BB#10: # %for.end31 + end_loop + call f5@FUNCTION + call f6@FUNCTION + i32.const $0=, -1 + i32.const $1=, 0 +.LBB12_11: # %for.body34 + # =>This Inner Loop Header: Depth=1 + loop # label16: + i32.const $push119=, c + i32.add $push34=, $1, $pop119 + i32.load $push35=, 0($pop34) + i32.const $push118=, a + i32.add $push31=, $1, $pop118 + i32.load $push32=, 0($pop31) + i32.const $push117=, 19 + i32.rem_s $push33=, $pop32, $pop117 + i32.ne $push36=, $pop35, $pop33 + br_if 1, $pop36 # 1: down to label13 +# BB#12: # %lor.lhs.false39 + # in Loop: Header=BB12_11 Depth=1 + i32.const $push122=, d + i32.add $push40=, $1, $pop122 + i32.load $push41=, 0($pop40) + i32.const $push121=, b + i32.add $push37=, $1, $pop121 + i32.load $push38=, 0($pop37) + i32.const $push120=, 19 + i32.rem_u $push39=, $pop38, $pop120 + i32.ne $push42=, $pop41, $pop39 + br_if 1, $pop42 # 1: down to label13 +# BB#13: # %for.cond32 + # in Loop: Header=BB12_11 Depth=1 + i32.const $push127=, 4 + i32.add $1=, $1, $pop127 + i32.const $push126=, 1 + i32.add $push125=, $0, $pop126 + tee_local $push124=, $0=, $pop125 + i32.const $push123=, 4094 + i32.le_u $push43=, $pop124, $pop123 + br_if 0, $pop43 # 0: up to label16 +# BB#14: # %for.end48 + end_loop + call f7@FUNCTION + call f8@FUNCTION + i32.const $0=, -1 + i32.const $1=, 0 +.LBB12_15: # %for.body51 + # =>This Inner Loop Header: Depth=1 + loop # label17: + i32.const $push130=, c + i32.add $push47=, $1, $pop130 + i32.load $push48=, 0($pop47) + i32.const $push129=, a + i32.add $push44=, $1, $pop129 + i32.load $push45=, 0($pop44) + i32.const $push128=, 3 + i32.rem_s $push46=, $pop45, $pop128 + i32.ne $push49=, $pop48, $pop46 + br_if 1, $pop49 # 1: down to label13 +# BB#16: # %lor.lhs.false56 + # in Loop: Header=BB12_15 Depth=1 + i32.const $push133=, d + i32.add $push53=, $1, $pop133 + i32.load $push54=, 0($pop53) + i32.const $push132=, b + i32.add $push50=, $1, $pop132 + i32.load $push51=, 0($pop50) + i32.const $push131=, 3 + i32.rem_u $push52=, $pop51, $pop131 + i32.ne $push55=, $pop54, $pop52 + br_if 1, $pop55 # 1: down to label13 +# BB#17: # %for.cond49 + # in Loop: Header=BB12_15 Depth=1 + i32.const $push138=, 4 + i32.add $1=, $1, $pop138 + i32.const $push137=, 1 + i32.add $push136=, $0, $pop137 + tee_local $push135=, $0=, $pop136 + i32.const $push134=, 4094 + i32.le_u $push56=, $pop135, $pop134 + br_if 0, $pop56 # 0: up to label17 +# BB#18: # %for.end65 + end_loop + call f9@FUNCTION + call f10@FUNCTION + i32.const $0=, -1 + i32.const $1=, 0 +.LBB12_19: # %for.body68 + # =>This Inner Loop Header: Depth=1 + loop # label18: + i32.const $push141=, c + i32.add $push60=, $1, $pop141 + i32.load $push61=, 0($pop60) + i32.const $push140=, a + i32.add $push57=, $1, $pop140 + i32.load $push58=, 0($pop57) + i32.const $push139=, 18 + i32.rem_s $push59=, $pop58, $pop139 + i32.ne $push62=, $pop61, $pop59 + br_if 1, $pop62 # 1: down to label13 +# BB#20: # %lor.lhs.false73 + # in Loop: Header=BB12_19 Depth=1 + i32.const $push144=, d + i32.add $push66=, $1, $pop144 + i32.load $push67=, 0($pop66) + i32.const $push143=, b + i32.add $push63=, $1, $pop143 + i32.load $push64=, 0($pop63) + i32.const $push142=, 18 + i32.rem_u $push65=, $pop64, $pop142 + i32.ne $push68=, $pop67, $pop65 + br_if 1, $pop68 # 1: down to label13 +# BB#21: # %for.cond66 + # in Loop: Header=BB12_19 Depth=1 + i32.const $push149=, 4 + i32.add $1=, $1, $pop149 + i32.const $push148=, 1 + i32.add $push147=, $0, $pop148 + tee_local $push146=, $0=, $pop147 + i32.const $push145=, 4094 + i32.le_u $push69=, $pop146, $pop145 + br_if 0, $pop69 # 0: up to label18 +# BB#22: # %for.end82 + end_loop + call f11@FUNCTION + call f12@FUNCTION + i32.const $0=, -1 + i32.const $1=, 0 +.LBB12_23: # %for.body85 + # =>This Inner Loop Header: Depth=1 + loop # label19: + i32.const $push152=, c + i32.add $push73=, $1, $pop152 + i32.load $push74=, 0($pop73) + i32.const $push151=, a + i32.add $push70=, $1, $pop151 + i32.load $push71=, 0($pop70) + i32.const $push150=, 19 + i32.rem_s $push72=, $pop71, $pop150 + i32.ne $push75=, $pop74, $pop72 + br_if 1, $pop75 # 1: down to label13 +# BB#24: # %lor.lhs.false90 + # in Loop: Header=BB12_23 Depth=1 + i32.const $push155=, d + i32.add $push79=, $1, $pop155 + i32.load $push80=, 0($pop79) + i32.const $push154=, b + i32.add $push76=, $1, $pop154 + i32.load $push77=, 0($pop76) + i32.const $push153=, 19 + i32.rem_u $push78=, $pop77, $pop153 + i32.ne $push81=, $pop80, $pop78 + br_if 1, $pop81 # 1: down to label13 +# BB#25: # %for.cond83 + # in Loop: Header=BB12_23 Depth=1 + i32.const $push160=, 4 + i32.add $1=, $1, $pop160 + i32.const $push159=, 1 + i32.add $push158=, $0, $pop159 + tee_local $push157=, $0=, $pop158 + i32.const $push156=, 4094 + i32.le_u $push82=, $pop157, $pop156 + br_if 0, $pop82 # 0: up to label19 +# BB#26: # %for.end99 + end_loop + i32.const $push83=, 0 + return $pop83 +.LBB12_27: # %if.then + end_block # label13: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end12: + .size main, .Lfunc_end12-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 4 +a: + .skip 16384 + .size a, 16384 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 4 +c: + .skip 16384 + .size c, 16384 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 4 +b: + .skip 16384 + .size b, 16384 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 4 +d: + .skip 16384 + .size d, 16384 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr51877.c.s b/src/binaryen/test/torture-s/pr51877.c.s new file mode 100644 index 0000000000..7a19293f82 --- /dev/null +++ b/src/binaryen/test/torture-s/pr51877.c.s @@ -0,0 +1,345 @@ + .text + .file "pr51877.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 +# BB#0: # %entry + i32.store8 4($0), $1 + i32.const $push0=, 28 + i32.add $push1=, $0, $pop0 + i64.const $push2=, 0 + i64.store 0($pop1):p2align=0, $pop2 + i32.const $push3=, 21 + i32.add $push4=, $0, $pop3 + i64.const $push17=, 0 + i64.store 0($pop4):p2align=0, $pop17 + i32.const $push5=, 13 + i32.add $push6=, $0, $pop5 + i64.const $push16=, 0 + i64.store 0($pop6):p2align=0, $pop16 + i32.const $push7=, 5 + i32.add $push8=, $0, $pop7 + i64.const $push15=, 0 + i64.store 0($pop8):p2align=0, $pop15 + i32.const $push9=, 0 + i32.load $push10=, bar.n($pop9) + i32.const $push11=, 1 + i32.add $push14=, $pop10, $pop11 + tee_local $push13=, $1=, $pop14 + i32.store 0($0), $pop13 + i32.const $push12=, 0 + i32.store bar.n($pop12), $1 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz +# BB#0: # %entry + #APP + #NO_APP + # fallthrough-return + .endfunc +.Lfunc_end1: + .size baz, .Lfunc_end1-baz + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push38=, 0 + i32.const $push36=, 0 + i32.load $push35=, __stack_pointer($pop36) + i32.const $push37=, 80 + i32.sub $push45=, $pop35, $pop37 + tee_local $push44=, $2=, $pop45 + i32.store __stack_pointer($pop38), $pop44 + block + block + i32.const $push0=, 6 + i32.ne $push1=, $1, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %if.then + i32.const $push42=, 40 + i32.add $push43=, $2, $pop42 + i32.const $push20=, 7 + call bar@FUNCTION, $pop43, $pop20 + i32.const $push24=, 0 + i32.const $push21=, 72 + i32.add $push22=, $2, $pop21 + i32.load $push23=, 0($pop22) + i32.store a+32($pop24), $pop23 + i32.const $push49=, 0 + i32.const $push25=, 64 + i32.add $push26=, $2, $pop25 + i64.load $push27=, 0($pop26) + i64.store a+24($pop49):p2align=2, $pop27 + i32.const $push48=, 0 + i32.const $push28=, 56 + i32.add $push29=, $2, $pop28 + i64.load $push30=, 0($pop29) + i64.store a+16($pop48):p2align=2, $pop30 + i32.const $push47=, 0 + i32.const $push31=, 48 + i32.add $push32=, $2, $pop31 + i64.load $push33=, 0($pop32) + i64.store a+8($pop47):p2align=2, $pop33 + i32.const $push46=, 0 + i64.load $push34=, 40($2) + i64.store a($pop46):p2align=2, $pop34 + br 1 # 1: down to label0 +.LBB2_2: # %if.else + end_block # label1: + i32.const $push2=, 7 + call bar@FUNCTION, $2, $pop2 + i32.const $push3=, 32 + i32.add $push4=, $0, $pop3 + i32.const $push53=, 32 + i32.add $push5=, $2, $pop53 + i32.load $push6=, 0($pop5) + i32.store 0($pop4), $pop6 + i32.const $push7=, 24 + i32.add $push8=, $0, $pop7 + i32.const $push52=, 24 + i32.add $push9=, $2, $pop52 + i64.load $push10=, 0($pop9) + i64.store 0($pop8):p2align=2, $pop10 + i32.const $push11=, 16 + i32.add $push12=, $0, $pop11 + i32.const $push51=, 16 + i32.add $push13=, $2, $pop51 + i64.load $push14=, 0($pop13) + i64.store 0($pop12):p2align=2, $pop14 + i32.const $push15=, 8 + i32.add $push16=, $0, $pop15 + i32.const $push50=, 8 + i32.add $push17=, $2, $pop50 + i64.load $push18=, 0($pop17) + i64.store 0($pop16):p2align=2, $pop18 + i64.load $push19=, 0($2) + i64.store 0($0):p2align=2, $pop19 +.LBB2_3: # %if.end + end_block # label0: + call baz@FUNCTION + i32.const $push41=, 0 + i32.const $push39=, 80 + i32.add $push40=, $2, $pop39 + i32.store __stack_pointer($pop41), $pop40 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size foo, .Lfunc_end2-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push69=, 0 + i32.const $push67=, 0 + i32.load $push66=, __stack_pointer($pop67) + i32.const $push68=, 80 + i32.sub $push100=, $pop66, $pop68 + tee_local $push99=, $0=, $pop100 + i32.store __stack_pointer($pop69), $pop99 + i32.const $push73=, 40 + i32.add $push74=, $0, $pop73 + i32.const $push98=, 3 + call bar@FUNCTION, $pop74, $pop98 + i32.const $push97=, 0 + i32.const $push75=, 40 + i32.add $push76=, $0, $pop75 + i32.const $push0=, 32 + i32.add $push1=, $pop76, $pop0 + i32.load $push2=, 0($pop1) + i32.store a+32($pop97), $pop2 + i32.const $push96=, 0 + i32.const $push77=, 40 + i32.add $push78=, $0, $pop77 + i32.const $push3=, 24 + i32.add $push4=, $pop78, $pop3 + i64.load $push5=, 0($pop4) + i64.store a+24($pop96):p2align=2, $pop5 + i32.const $push95=, 0 + i32.const $push79=, 40 + i32.add $push80=, $0, $pop79 + i32.const $push6=, 16 + i32.add $push7=, $pop80, $pop6 + i64.load $push8=, 0($pop7) + i64.store a+16($pop95):p2align=2, $pop8 + i32.const $push94=, 0 + i32.const $push81=, 40 + i32.add $push82=, $0, $pop81 + i32.const $push9=, 8 + i32.add $push10=, $pop82, $pop9 + i64.load $push11=, 0($pop10) + i64.store a+8($pop94):p2align=2, $pop11 + i32.const $push93=, 0 + i64.load $push12=, 40($0) + i64.store a($pop93):p2align=2, $pop12 + i32.const $push13=, 4 + call bar@FUNCTION, $0, $pop13 + i32.const $push92=, 0 + i32.const $push91=, 32 + i32.add $push14=, $0, $pop91 + i32.load $push15=, 0($pop14) + i32.store b+32($pop92), $pop15 + i32.const $push90=, 0 + i32.const $push89=, 24 + i32.add $push16=, $0, $pop89 + i64.load $push17=, 0($pop16) + i64.store b+24($pop90):p2align=2, $pop17 + i32.const $push88=, 0 + i32.const $push87=, 16 + i32.add $push18=, $0, $pop87 + i64.load $push19=, 0($pop18) + i64.store b+16($pop88):p2align=2, $pop19 + i32.const $push86=, 0 + i32.const $push85=, 8 + i32.add $push20=, $0, $pop85 + i64.load $push21=, 0($pop20) + i64.store b+8($pop86):p2align=2, $pop21 + i32.const $push84=, 0 + i64.load $push22=, 0($0) + i64.store b($pop84):p2align=2, $pop22 + block + i32.const $push83=, 0 + i32.load $push23=, a($pop83) + i32.const $push24=, 1 + i32.ne $push25=, $pop23, $pop24 + br_if 0, $pop25 # 0: down to label2 +# BB#1: # %lor.lhs.false + i32.const $push102=, 0 + i32.load8_u $push28=, a+4($pop102) + i32.const $push101=, 3 + i32.ne $push29=, $pop28, $pop101 + br_if 0, $pop29 # 0: down to label2 +# BB#2: # %lor.lhs.false + i32.const $push103=, 0 + i32.load $push26=, b($pop103) + i32.const $push30=, 2 + i32.ne $push31=, $pop26, $pop30 + br_if 0, $pop31 # 0: down to label2 +# BB#3: # %lor.lhs.false + i32.const $push104=, 0 + i32.load8_u $push27=, b+4($pop104) + i32.const $push32=, 255 + i32.and $push33=, $pop27, $pop32 + i32.const $push34=, 4 + i32.ne $push35=, $pop33, $pop34 + br_if 0, $pop35 # 0: down to label2 +# BB#4: # %if.end + i32.const $push36=, b + i32.const $push106=, 0 + call foo@FUNCTION, $pop36, $pop106 + i32.const $push105=, 0 + i32.load $push37=, a($pop105) + i32.const $push38=, 1 + i32.ne $push39=, $pop37, $pop38 + br_if 0, $pop39 # 0: down to label2 +# BB#5: # %lor.lhs.false13 + i32.const $push108=, 0 + i32.load8_u $push42=, a+4($pop108) + i32.const $push107=, 3 + i32.ne $push43=, $pop42, $pop107 + br_if 0, $pop43 # 0: down to label2 +# BB#6: # %lor.lhs.false13 + i32.const $push110=, 0 + i32.load $push40=, b($pop110) + i32.const $push109=, 3 + i32.ne $push44=, $pop40, $pop109 + br_if 0, $pop44 # 0: down to label2 +# BB#7: # %lor.lhs.false13 + i32.const $push111=, 0 + i32.load8_u $push41=, b+4($pop111) + i32.const $push45=, 255 + i32.and $push46=, $pop41, $pop45 + i32.const $push47=, 7 + i32.ne $push48=, $pop46, $pop47 + br_if 0, $pop48 # 0: down to label2 +# BB#8: # %if.end25 + i32.const $push50=, b + i32.const $push49=, 6 + call foo@FUNCTION, $pop50, $pop49 + i32.const $push112=, 0 + i32.load $push51=, a($pop112) + i32.const $push52=, 4 + i32.ne $push53=, $pop51, $pop52 + br_if 0, $pop53 # 0: down to label2 +# BB#9: # %lor.lhs.false28 + i32.const $push113=, 0 + i32.load8_u $push56=, a+4($pop113) + i32.const $push57=, 7 + i32.ne $push58=, $pop56, $pop57 + br_if 0, $pop58 # 0: down to label2 +# BB#10: # %lor.lhs.false28 + i32.const $push114=, 0 + i32.load $push54=, b($pop114) + i32.const $push59=, 3 + i32.ne $push60=, $pop54, $pop59 + br_if 0, $pop60 # 0: down to label2 +# BB#11: # %lor.lhs.false28 + i32.const $push115=, 0 + i32.load8_u $push55=, b+4($pop115) + i32.const $push61=, 255 + i32.and $push62=, $pop55, $pop61 + i32.const $push63=, 7 + i32.ne $push64=, $pop62, $pop63 + br_if 0, $pop64 # 0: down to label2 +# BB#12: # %if.end40 + i32.const $push72=, 0 + i32.const $push70=, 80 + i32.add $push71=, $0, $pop70 + i32.store __stack_pointer($pop72), $pop71 + i32.const $push65=, 0 + return $pop65 +.LBB3_13: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .type bar.n,@object # @bar.n + .section .bss.bar.n,"aw",@nobits + .p2align 2 +bar.n: + .int32 0 # 0x0 + .size bar.n, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .skip 36 + .size a, 36 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .skip 36 + .size b, 36 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr51933.c.s b/src/binaryen/test/torture-s/pr51933.c.s new file mode 100644 index 0000000000..62c6d8c5f6 --- /dev/null +++ b/src/binaryen/test/torture-s/pr51933.c.s @@ -0,0 +1,176 @@ + .text + .file "pr51933.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo +# BB#0: # %entry + #APP + #NO_APP + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32, i32 + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.load8_u $push1=, v1($pop0) + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.then + call foo@FUNCTION +.LBB1_2: # %if.end + end_block # label0: + block + i32.const $push11=, 1 + i32.lt_s $push2=, $0, $pop11 + br_if 0, $pop2 # 0: down to label1 +# BB#3: # %for.body.preheader + copy_local $4=, $0 + copy_local $5=, $2 +.LBB1_4: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.load16_u $push22=, 0($1) + tee_local $push21=, $3=, $pop22 + i32.const $push20=, v2 + i32.add $push4=, $pop21, $pop20 + i32.const $push19=, 255 + i32.and $push5=, $3, $pop19 + i32.const $push18=, v3 + i32.add $push6=, $pop5, $pop18 + i32.const $push17=, 256 + i32.lt_u $push3=, $3, $pop17 + i32.select $push7=, $pop4, $pop6, $pop3 + i32.load8_u $push8=, 0($pop7) + i32.store8 0($5), $pop8 + i32.const $push16=, 1 + i32.add $5=, $5, $pop16 + i32.const $push15=, 2 + i32.add $1=, $1, $pop15 + i32.const $push14=, -1 + i32.add $push13=, $4, $pop14 + tee_local $push12=, $4=, $pop13 + br_if 0, $pop12 # 0: up to label2 +.LBB1_5: # %for.end + end_loop + end_block # label1: + i32.add $push9=, $2, $0 + i32.const $push10=, 0 + i32.store8 0($pop9), $pop10 + copy_local $push23=, $0 + # fallthrough-return: $pop23 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push16=, 0 + i32.const $push14=, 0 + i32.load $push13=, __stack_pointer($pop14) + i32.const $push15=, 80 + i32.sub $push25=, $pop13, $pop15 + tee_local $push24=, $2=, $pop25 + i32.store __stack_pointer($pop16), $pop24 + i32.const $1=, 0 +.LBB2_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.const $push31=, v3 + i32.add $push0=, $1, $pop31 + i32.const $push30=, 1 + i32.add $push29=, $1, $pop30 + tee_local $push28=, $0=, $pop29 + i32.store8 0($pop0), $pop28 + i32.const $push27=, v2 + i32.add $push1=, $1, $pop27 + i32.store8 0($pop1), $1 + copy_local $1=, $0 + i32.const $push26=, 256 + i32.ne $push2=, $0, $pop26 + br_if 0, $pop2 # 0: up to label3 +# BB#2: # %for.end + end_loop + i64.const $push3=, 28147922879250529 + i64.store 0($2), $pop3 + i32.const $push4=, 113 + i32.store 32($2), $pop4 + i64.const $push5=, 29279337625026661 + i64.store 8($2), $pop5 + i64.const $push6=, 2336242766266892393 + i64.store 16($2), $pop6 + i64.const $push7=, 391813644329812077 + i64.store 24($2), $pop7 + call foo@FUNCTION + i32.const $push8=, 17 + i32.const $push20=, 48 + i32.add $push21=, $2, $pop20 + i32.call $drop=, bar@FUNCTION, $pop8, $2, $pop21 + block + i32.const $push22=, 48 + i32.add $push23=, $2, $pop22 + i32.const $push10=, .L.str + i32.const $push9=, 18 + i32.call $push11=, memcmp@FUNCTION, $pop23, $pop10, $pop9 + br_if 0, $pop11 # 0: down to label4 +# BB#3: # %if.end + i32.const $push19=, 0 + i32.const $push17=, 80 + i32.add $push18=, $2, $pop17 + i32.store __stack_pointer($pop19), $pop18 + i32.const $push12=, 0 + return $pop12 +.LBB2_4: # %if.then + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type v1,@object # @v1 + .section .bss.v1,"aw",@nobits +v1: + .int8 0 # 0x0 + .size v1, 1 + + .type v2,@object # @v2 + .section .bss.v2,"aw",@nobits + .p2align 4 +v2: + .skip 256 + .size v2, 256 + + .type v3,@object # @v3 + .section .bss.v3,"aw",@nobits + .p2align 4 +v3: + .skip 256 + .size v3, 256 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "abcdeghhijkmmnoqq" + .size .L.str, 18 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype memcmp, i32, i32, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr52129.c.s b/src/binaryen/test/torture-s/pr52129.c.s new file mode 100644 index 0000000000..8496969e3e --- /dev/null +++ b/src/binaryen/test/torture-s/pr52129.c.s @@ -0,0 +1,131 @@ + .text + .file "pr52129.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, t+2 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load $push2=, 0($1) + i32.const $push3=, t+69 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#2: # %lor.lhs.false2 + i32.const $push6=, t+81 + i32.ne $push7=, $3, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#3: # %lor.lhs.false2 + i32.const $push8=, t+17 + i32.ne $push9=, $2, $pop8 + br_if 0, $pop9 # 0: down to label0 +# BB#4: # %lor.lhs.false2 + i32.load $push5=, 4($1) + i32.const $push10=, 27 + i32.ne $push11=, $pop5, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#5: # %if.end + i32.const $push12=, 29 + return $pop12 +.LBB0_6: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32, i32, i32, i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push16=, $pop4, $pop6 + tee_local $push15=, $6=, $pop16 + i32.store __stack_pointer($pop7), $pop15 + i64.load $push0=, 0($3):p2align=2 + i64.store 8($6), $pop0 + i32.const $push11=, 8 + i32.add $push12=, $6, $pop11 + i32.add $push14=, $5, $4 + tee_local $push13=, $5=, $pop14 + i32.const $push1=, 64 + i32.add $push2=, $5, $pop1 + i32.call $drop=, foo@FUNCTION, $0, $pop12, $pop13, $pop2 + i32.const $push10=, 0 + i32.const $push8=, 16 + i32.add $push9=, $6, $pop8 + i32.store __stack_pointer($pop10), $pop9 + i32.const $push3=, 29 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push16=, $pop5, $pop7 + tee_local $push15=, $0=, $pop16 + i32.store __stack_pointer($pop8), $pop15 + i32.const $push0=, 0 + i64.load $push1=, .Lmain.s($pop0):p2align=2 + i64.store 8($0), $pop1 + i32.const $push4=, t+2 + i32.const $push12=, 8 + i32.add $push13=, $0, $pop12 + i32.const $push3=, 17 + i32.const $push2=, t + i32.call $drop=, bar@FUNCTION, $pop4, $0, $0, $pop13, $pop3, $pop2 + i32.const $push11=, 0 + i32.const $push9=, 16 + i32.add $push10=, $0, $pop9 + i32.store __stack_pointer($pop11), $pop10 + i32.const $push14=, 0 + # fallthrough-return: $pop14 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden t # @t + .type t,@object + .section .bss.t,"aw",@nobits + .globl t +t: + .skip 128 + .size t, 128 + + .type .Lmain.s,@object # @main.s + .section .rodata..Lmain.s,"a",@progbits + .p2align 2 +.Lmain.s: + .int32 t+69 + .int32 27 # 0x1b + .size .Lmain.s, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr52209.c.s b/src/binaryen/test/torture-s/pr52209.c.s new file mode 100644 index 0000000000..13c374a350 --- /dev/null +++ b/src/binaryen/test/torture-s/pr52209.c.s @@ -0,0 +1,55 @@ + .text + .file "pr52209.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.const $push8=, 0 + i32.const $push7=, 0 + i32.load8_u $push0=, c($pop7) + i32.const $push1=, 1 + i32.and $push6=, $pop0, $pop1 + tee_local $push5=, $0=, $pop6 + i32.sub $push2=, $pop8, $pop5 + i32.const $push3=, -1 + i32.xor $push4=, $pop2, $pop3 + i32.store b($pop9), $pop4 + block + br_if 0, $0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push10=, 0 + return $pop10 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .skip 4 + .size c, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr52286.c.s b/src/binaryen/test/torture-s/pr52286.c.s new file mode 100644 index 0000000000..ce9a705c14 --- /dev/null +++ b/src/binaryen/test/torture-s/pr52286.c.s @@ -0,0 +1,31 @@ + .text + .file "pr52286.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $0=, 0 + #APP + #NO_APP + block + i32.const $push0=, -1 + i32.le_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push2=, 0 + return $pop2 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr52760.c.s b/src/binaryen/test/torture-s/pr52760.c.s new file mode 100644 index 0000000000..a377975211 --- /dev/null +++ b/src/binaryen/test/torture-s/pr52760.c.s @@ -0,0 +1,148 @@ + .text + .file "pr52760.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .local i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.lt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %for.body.preheader +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.load16_u $push58=, 0($1) + tee_local $push57=, $2=, $pop58 + i32.const $push56=, 24 + i32.shl $push2=, $pop57, $pop56 + i32.const $push55=, 8 + i32.shl $push3=, $2, $pop55 + i32.const $push54=, 16711680 + i32.and $push4=, $pop3, $pop54 + i32.or $push5=, $pop2, $pop4 + i32.const $push53=, 16 + i32.shr_u $push6=, $pop5, $pop53 + i32.store16 0($1), $pop6 + i32.const $push52=, 2 + i32.add $push51=, $1, $pop52 + tee_local $push50=, $2=, $pop51 + i32.load16_u $push49=, 0($2) + tee_local $push48=, $2=, $pop49 + i32.const $push47=, 24 + i32.shl $push7=, $pop48, $pop47 + i32.const $push46=, 8 + i32.shl $push8=, $2, $pop46 + i32.const $push45=, 16711680 + i32.and $push9=, $pop8, $pop45 + i32.or $push10=, $pop7, $pop9 + i32.const $push44=, 16 + i32.shr_u $push11=, $pop10, $pop44 + i32.store16 0($pop50), $pop11 + i32.const $push43=, 4 + i32.add $push42=, $1, $pop43 + tee_local $push41=, $2=, $pop42 + i32.load16_u $push40=, 0($2) + tee_local $push39=, $2=, $pop40 + i32.const $push38=, 24 + i32.shl $push12=, $pop39, $pop38 + i32.const $push37=, 8 + i32.shl $push13=, $2, $pop37 + i32.const $push36=, 16711680 + i32.and $push14=, $pop13, $pop36 + i32.or $push15=, $pop12, $pop14 + i32.const $push35=, 16 + i32.shr_u $push16=, $pop15, $pop35 + i32.store16 0($pop41), $pop16 + i32.const $push34=, 6 + i32.add $push33=, $1, $pop34 + tee_local $push32=, $2=, $pop33 + i32.load16_u $push31=, 0($2) + tee_local $push30=, $2=, $pop31 + i32.const $push29=, 24 + i32.shl $push17=, $pop30, $pop29 + i32.const $push28=, 8 + i32.shl $push18=, $2, $pop28 + i32.const $push27=, 16711680 + i32.and $push19=, $pop18, $pop27 + i32.or $push20=, $pop17, $pop19 + i32.const $push26=, 16 + i32.shr_u $push21=, $pop20, $pop26 + i32.store16 0($pop32), $pop21 + i32.const $push25=, 8 + i32.add $1=, $1, $pop25 + i32.const $push24=, -1 + i32.add $push23=, $0, $pop24 + tee_local $push22=, $0=, $pop23 + br_if 0, $pop22 # 0: up to label1 +.LBB0_3: # %for.end + end_loop + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push18=, 0 + i32.const $push16=, 0 + i32.load $push15=, __stack_pointer($pop16) + i32.const $push17=, 16 + i32.sub $push25=, $pop15, $pop17 + tee_local $push24=, $0=, $pop25 + i32.store __stack_pointer($pop18), $pop24 + i64.const $push0=, 434320308619640833 + i64.store 8($0), $pop0 + i32.const $push1=, 1 + i32.const $push22=, 8 + i32.add $push23=, $0, $pop22 + call foo@FUNCTION, $pop1, $pop23 + block + i32.load16_u $push3=, 8($0) + i32.const $push2=, 256 + i32.ne $push4=, $pop3, $pop2 + br_if 0, $pop4 # 0: down to label2 +# BB#1: # %lor.lhs.false + i32.load16_u $push6=, 10($0) + i32.const $push5=, 770 + i32.ne $push7=, $pop6, $pop5 + br_if 0, $pop7 # 0: down to label2 +# BB#2: # %lor.lhs.false5 + i32.load16_u $push9=, 12($0) + i32.const $push8=, 1284 + i32.ne $push10=, $pop9, $pop8 + br_if 0, $pop10 # 0: down to label2 +# BB#3: # %lor.lhs.false9 + i32.load16_u $push12=, 14($0) + i32.const $push11=, 1798 + i32.ne $push13=, $pop12, $pop11 + br_if 0, $pop13 # 0: down to label2 +# BB#4: # %if.end + i32.const $push21=, 0 + i32.const $push19=, 16 + i32.add $push20=, $0, $pop19 + i32.store __stack_pointer($pop21), $pop20 + i32.const $push14=, 0 + return $pop14 +.LBB1_5: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr52979-1.c.s b/src/binaryen/test/torture-s/pr52979-1.c.s new file mode 100644 index 0000000000..55b5b5beec --- /dev/null +++ b/src/binaryen/test/torture-s/pr52979-1.c.s @@ -0,0 +1,260 @@ + .text + .file "pr52979-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .local i64, i64 +# BB#0: # %entry + i32.const $push27=, 0 + i32.const $push26=, 0 + i64.load32_u $push3=, a($pop26) + i32.const $push25=, 0 + i64.load8_u $push0=, a+4($pop25) + i64.const $push1=, 32 + i64.shl $push2=, $pop0, $pop1 + i64.or $push24=, $pop3, $pop2 + tee_local $push23=, $0=, $pop24 + i64.const $push4=, 964220157951 + i64.and $push22=, $pop23, $pop4 + tee_local $push21=, $1=, $pop22 + i64.const $push20=, 32 + i64.shr_u $push5=, $pop21, $pop20 + i64.store8 a+4($pop27), $pop5 + i32.const $push19=, 0 + i64.const $push6=, 2147483648 + i64.or $push7=, $1, $pop6 + i64.store32 a($pop19), $pop7 + i32.const $push18=, 0 + i32.const $push17=, 0 + i32.store8 b+4($pop18), $pop17 + i32.const $push16=, 0 + i32.const $push15=, 0 + i32.store b($pop16):p2align=0, $pop15 + i32.const $push14=, 0 + i32.const $push13=, 0 + i32.store e($pop14), $pop13 + block + i32.const $push12=, 0 + i32.load $push8=, d($pop12) + i32.eqz $push30=, $pop8 + br_if 0, $pop30 # 0: down to label0 +# BB#1: # %if.then + i32.const $push29=, 0 + i64.const $push9=, 33 + i64.shl $push10=, $0, $pop9 + i64.const $push28=, 33 + i64.shr_s $push11=, $pop10, $pop28 + i64.store32 c($pop29), $pop11 +.LBB1_2: # %if.end + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .local i64, i64 +# BB#0: # %entry + i32.const $push29=, 0 + i32.const $push28=, 0 + i64.load32_u $push3=, a($pop28) + i32.const $push27=, 0 + i64.load8_u $push0=, a+4($pop27) + i64.const $push1=, 32 + i64.shl $push2=, $pop0, $pop1 + i64.or $push26=, $pop3, $pop2 + tee_local $push25=, $0=, $pop26 + i64.const $push4=, 964220157951 + i64.and $push24=, $pop25, $pop4 + tee_local $push23=, $1=, $pop24 + i64.const $push22=, 32 + i64.shr_u $push5=, $pop23, $pop22 + i64.store8 a+4($pop29), $pop5 + i32.const $push21=, 0 + i64.const $push6=, 2147483648 + i64.or $push7=, $1, $pop6 + i64.store32 a($pop21), $pop7 + i32.const $push20=, 0 + i32.const $push19=, 0 + i32.store8 b+4($pop20), $pop19 + i32.const $push18=, 0 + i32.const $push17=, 0 + i32.store b($pop18):p2align=0, $pop17 + i32.const $push16=, 0 + i32.const $push15=, 0 + i32.store e($pop16), $pop15 + block + i32.const $push14=, 0 + i32.load $push8=, d($pop14) + i32.eqz $push36=, $pop8 + br_if 0, $pop36 # 0: down to label1 +# BB#1: # %if.then.i + i32.const $push31=, 0 + i64.const $push9=, 33 + i64.shl $push10=, $0, $pop9 + i64.const $push30=, 33 + i64.shr_s $push11=, $pop10, $pop30 + i64.store32 c($pop31), $pop11 +.LBB2_2: # %bar.exit + end_block # label1: + i32.const $push35=, 0 + i32.const $push34=, 0 + i32.load8_u $push12=, b+4($pop34) + i32.store8 a+4($pop35), $pop12 + i32.const $push33=, 0 + i32.const $push32=, 0 + i32.load $push13=, b($pop32):p2align=0 + i32.store a($pop33), $pop13 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size baz, .Lfunc_end2-baz + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64, i64 +# BB#0: # %entry + i32.const $push35=, 0 + i32.const $push34=, 0 + i64.load32_u $push3=, a($pop34) + i32.const $push33=, 0 + i64.load8_u $push0=, a+4($pop33) + i64.const $push1=, 32 + i64.shl $push2=, $pop0, $pop1 + i64.or $push32=, $pop3, $pop2 + tee_local $push31=, $0=, $pop32 + i64.const $push4=, 964220157951 + i64.and $push30=, $pop31, $pop4 + tee_local $push29=, $1=, $pop30 + i64.const $push28=, 32 + i64.shr_u $push5=, $pop29, $pop28 + i64.store8 a+4($pop35), $pop5 + i32.const $push27=, 0 + i64.const $push6=, 2147483648 + i64.or $push7=, $1, $pop6 + i64.store32 a($pop27), $pop7 + i32.const $push26=, 0 + i32.const $push25=, 0 + i32.store8 b+4($pop26), $pop25 + i32.const $push24=, 0 + i32.const $push23=, 0 + i32.store b($pop24):p2align=0, $pop23 + i32.const $push22=, 0 + i32.const $push21=, 0 + i32.store e($pop22), $pop21 + block + i32.const $push20=, 0 + i32.load $push8=, d($pop20) + i32.eqz $push44=, $pop8 + br_if 0, $pop44 # 0: down to label2 +# BB#1: # %if.then.i.i + i32.const $push37=, 0 + i64.const $push9=, 33 + i64.shl $push10=, $0, $pop9 + i64.const $push36=, 33 + i64.shr_s $push11=, $pop10, $pop36 + i64.store32 c($pop37), $pop11 +.LBB3_2: # %baz.exit + end_block # label2: + i32.const $push43=, 0 + i32.const $push42=, 0 + i32.load8_u $push12=, b+4($pop42) + i32.store8 a+4($pop43), $pop12 + i32.const $push41=, 0 + i32.const $push40=, 0 + i32.load $push13=, b($pop40):p2align=0 + i32.store a($pop41), $pop13 + block + i32.const $push39=, 0 + i64.load32_u $push14=, a($pop39) + i64.const $push15=, 33 + i64.shl $push16=, $pop14, $pop15 + i64.const $push38=, 33 + i64.shr_s $push17=, $pop16, $pop38 + i32.wrap/i64 $push18=, $pop17 + br_if 0, $pop18 # 0: down to label3 +# BB#3: # %if.end + i32.const $push19=, 0 + return $pop19 +.LBB3_4: # %if.then + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 3 +a: + .int8 1 # 0x1 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .size a, 5 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e + .p2align 2 +e: + .int32 0 # 0x0 + .size e, 4 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .int32 0 # 0x0 + .size d, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + .type b,@object # @b + .section .data.b,"aw",@progbits +b: + .int8 1 # 0x1 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .size b, 5 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr52979-2.c.s b/src/binaryen/test/torture-s/pr52979-2.c.s new file mode 100644 index 0000000000..76635a4704 --- /dev/null +++ b/src/binaryen/test/torture-s/pr52979-2.c.s @@ -0,0 +1,260 @@ + .text + .file "pr52979-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .local i64, i64 +# BB#0: # %entry + i32.const $push27=, 0 + i32.const $push26=, 0 + i64.load32_u $push3=, a($pop26) + i32.const $push25=, 0 + i64.load8_u $push0=, a+4($pop25) + i64.const $push1=, 32 + i64.shl $push2=, $pop0, $pop1 + i64.or $push24=, $pop3, $pop2 + tee_local $push23=, $0=, $pop24 + i64.const $push4=, 964220157951 + i64.and $push22=, $pop23, $pop4 + tee_local $push21=, $1=, $pop22 + i64.const $push20=, 32 + i64.shr_u $push5=, $pop21, $pop20 + i64.store8 a+4($pop27), $pop5 + i32.const $push19=, 0 + i64.const $push6=, 2147483648 + i64.or $push7=, $1, $pop6 + i64.store32 a($pop19), $pop7 + i32.const $push18=, 0 + i32.const $push17=, 0 + i32.store8 b+4($pop18), $pop17 + i32.const $push16=, 0 + i32.const $push15=, 0 + i32.store b($pop16):p2align=0, $pop15 + i32.const $push14=, 0 + i32.const $push13=, 0 + i32.store e($pop14), $pop13 + block + i32.const $push12=, 0 + i32.load $push8=, d($pop12) + i32.eqz $push30=, $pop8 + br_if 0, $pop30 # 0: down to label0 +# BB#1: # %if.then + i32.const $push29=, 0 + i64.const $push9=, 33 + i64.shl $push10=, $0, $pop9 + i64.const $push28=, 33 + i64.shr_s $push11=, $pop10, $pop28 + i64.store32 c($pop29), $pop11 +.LBB1_2: # %if.end + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .local i64, i64 +# BB#0: # %entry + i32.const $push29=, 0 + i32.const $push28=, 0 + i64.load32_u $push3=, a($pop28) + i32.const $push27=, 0 + i64.load8_u $push0=, a+4($pop27) + i64.const $push1=, 32 + i64.shl $push2=, $pop0, $pop1 + i64.or $push26=, $pop3, $pop2 + tee_local $push25=, $0=, $pop26 + i64.const $push4=, 964220157951 + i64.and $push24=, $pop25, $pop4 + tee_local $push23=, $1=, $pop24 + i64.const $push22=, 32 + i64.shr_u $push5=, $pop23, $pop22 + i64.store8 a+4($pop29), $pop5 + i32.const $push21=, 0 + i64.const $push6=, 2147483648 + i64.or $push7=, $1, $pop6 + i64.store32 a($pop21), $pop7 + i32.const $push20=, 0 + i32.const $push19=, 0 + i32.store8 b+4($pop20), $pop19 + i32.const $push18=, 0 + i32.const $push17=, 0 + i32.store b($pop18):p2align=0, $pop17 + i32.const $push16=, 0 + i32.const $push15=, 0 + i32.store e($pop16), $pop15 + block + i32.const $push14=, 0 + i32.load $push8=, d($pop14) + i32.eqz $push36=, $pop8 + br_if 0, $pop36 # 0: down to label1 +# BB#1: # %if.then.i + i32.const $push31=, 0 + i64.const $push9=, 33 + i64.shl $push10=, $0, $pop9 + i64.const $push30=, 33 + i64.shr_s $push11=, $pop10, $pop30 + i64.store32 c($pop31), $pop11 +.LBB2_2: # %bar.exit + end_block # label1: + i32.const $push35=, 0 + i32.const $push34=, 0 + i32.load8_u $push12=, b+4($pop34) + i32.store8 a+4($pop35), $pop12 + i32.const $push33=, 0 + i32.const $push32=, 0 + i32.load $push13=, b($pop32):p2align=0 + i32.store a($pop33), $pop13 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size baz, .Lfunc_end2-baz + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64, i64 +# BB#0: # %entry + i32.const $push35=, 0 + i32.const $push34=, 0 + i64.load32_u $push3=, a($pop34) + i32.const $push33=, 0 + i64.load8_u $push0=, a+4($pop33) + i64.const $push1=, 32 + i64.shl $push2=, $pop0, $pop1 + i64.or $push32=, $pop3, $pop2 + tee_local $push31=, $0=, $pop32 + i64.const $push4=, 964220157951 + i64.and $push30=, $pop31, $pop4 + tee_local $push29=, $1=, $pop30 + i64.const $push28=, 32 + i64.shr_u $push5=, $pop29, $pop28 + i64.store8 a+4($pop35), $pop5 + i32.const $push27=, 0 + i64.const $push6=, 2147483648 + i64.or $push7=, $1, $pop6 + i64.store32 a($pop27), $pop7 + i32.const $push26=, 0 + i32.const $push25=, 0 + i32.store8 b+4($pop26), $pop25 + i32.const $push24=, 0 + i32.const $push23=, 0 + i32.store b($pop24):p2align=0, $pop23 + i32.const $push22=, 0 + i32.const $push21=, 0 + i32.store e($pop22), $pop21 + block + i32.const $push20=, 0 + i32.load $push8=, d($pop20) + i32.eqz $push44=, $pop8 + br_if 0, $pop44 # 0: down to label2 +# BB#1: # %if.then.i.i + i32.const $push37=, 0 + i64.const $push9=, 33 + i64.shl $push10=, $0, $pop9 + i64.const $push36=, 33 + i64.shr_s $push11=, $pop10, $pop36 + i64.store32 c($pop37), $pop11 +.LBB3_2: # %baz.exit + end_block # label2: + i32.const $push43=, 0 + i32.const $push42=, 0 + i32.load8_u $push12=, b+4($pop42) + i32.store8 a+4($pop43), $pop12 + i32.const $push41=, 0 + i32.const $push40=, 0 + i32.load $push13=, b($pop40):p2align=0 + i32.store a($pop41), $pop13 + block + i32.const $push39=, 0 + i64.load32_u $push14=, a($pop39) + i64.const $push15=, 33 + i64.shl $push16=, $pop14, $pop15 + i64.const $push38=, 33 + i64.shr_s $push17=, $pop16, $pop38 + i32.wrap/i64 $push18=, $pop17 + br_if 0, $pop18 # 0: down to label3 +# BB#3: # %if.end + i32.const $push19=, 0 + return $pop19 +.LBB3_4: # %if.then + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 3 +a: + .int8 1 # 0x1 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .size a, 5 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e + .p2align 2 +e: + .int32 0 # 0x0 + .size e, 4 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .int32 0 # 0x0 + .size d, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + .type b,@object # @b + .section .data.b,"aw",@progbits +b: + .int8 1 # 0x1 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .size b, 5 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr53084.c.s b/src/binaryen/test/torture-s/pr53084.c.s new file mode 100644 index 0000000000..8e82ee5818 --- /dev/null +++ b/src/binaryen/test/torture-s/pr53084.c.s @@ -0,0 +1,56 @@ + .text + .file "pr53084.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + block + i32.load8_u $push0=, 0($0) + i32.const $push5=, 111 + i32.ne $push1=, $pop0, $pop5 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load8_u $push2=, 1($0) + i32.const $push6=, 111 + i32.ne $push3=, $pop2, $pop6 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %lor.lhs.false6 + i32.load8_u $push4=, 2($0) + br_if 0, $pop4 # 0: down to label0 +# BB#3: # %if.end + return +.LBB0_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, .L.str+1 + call bar@FUNCTION, $pop0 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "foo" + .size .L.str, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr53160.c.s b/src/binaryen/test/torture-s/pr53160.c.s new file mode 100644 index 0000000000..88ed0f2fa2 --- /dev/null +++ b/src/binaryen/test/torture-s/pr53160.c.s @@ -0,0 +1,150 @@ + .text + .file "pr53160.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push1=, 0 + i32.store e($pop0), $pop1 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push4=, 0 + i32.load $push0=, g($pop4) + i32.eqz $push19=, $pop0 + br_if 0, $pop19 # 0: down to label0 +# BB#1: # %if.then + i32.const $push5=, 0 + i32.load $drop=, b($pop5) +.LBB1_2: # %if.end + end_block # label0: + i32.const $push18=, 0 + i32.const $push1=, -1 + i32.store d($pop18), $pop1 + i32.const $push17=, 0 + i32.const $push16=, 0 + i32.load8_s $push15=, f($pop16) + tee_local $push14=, $0=, $pop15 + i32.store16 i($pop17), $pop14 + i32.const $push13=, 0 + i32.const $push12=, 0 + i32.const $push11=, 0 + i32.load $push2=, c($pop11) + i32.select $push10=, $0, $pop12, $pop2 + tee_local $push9=, $0=, $pop10 + i32.store h($pop13), $pop9 + i32.const $push8=, 0 + i32.store a($pop8), $0 + i32.const $push7=, 0 + i32.const $push6=, 0 + i32.store e($pop7), $pop6 + block + br_if 0, $0 # 0: down to label1 +# BB#3: # %if.end16 + i32.const $push3=, 0 + return $pop3 +.LBB1_4: # %if.then15 + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden c # @c + .type c,@object + .section .data.c,"aw",@progbits + .globl c + .p2align 2 +c: + .int32 1 # 0x1 + .size c, 4 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e + .p2align 2 +e: + .int32 0 # 0x0 + .size e, 4 + + .hidden g # @g + .type g,@object + .section .bss.g,"aw",@nobits + .globl g + .p2align 2 +g: + .int32 0 # 0x0 + .size g, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .int32 0 # 0x0 + .size d, 4 + + .hidden f # @f + .type f,@object + .section .bss.f,"aw",@nobits + .globl f +f: + .int8 0 # 0x0 + .size f, 1 + + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 1 +i: + .int16 0 # 0x0 + .size i, 2 + + .hidden h # @h + .type h,@object + .section .bss.h,"aw",@nobits + .globl h + .p2align 2 +h: + .int32 0 # 0x0 + .size h, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr53465.c.s b/src/binaryen/test/torture-s/pr53465.c.s new file mode 100644 index 0000000000..455af7eac9 --- /dev/null +++ b/src/binaryen/test/torture-s/pr53465.c.s @@ -0,0 +1,75 @@ + .text + .file "pr53465.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + block + block + i32.const $push3=, 1 + i32.lt_s $push0=, $1, $pop3 + br_if 0, $pop0 # 0: down to label1 +# BB#1: # %for.body.preheader + i32.const $3=, 0 + # implicit-def: %vreg29 + i32.const $5=, 0 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + copy_local $2=, $4 + i32.load $push5=, 0($0) + tee_local $push4=, $4=, $pop5 + i32.eqz $push10=, $pop4 + br_if 1, $pop10 # 1: down to label1 +# BB#3: # %if.end + # in Loop: Header=BB0_2 Depth=1 + block + i32.eqz $push11=, $5 + br_if 0, $pop11 # 0: down to label3 +# BB#4: # %if.end + # in Loop: Header=BB0_2 Depth=1 + i32.le_s $push1=, $4, $2 + br_if 3, $pop1 # 3: down to label0 +.LBB0_5: # %for.cond + # in Loop: Header=BB0_2 Depth=1 + end_block # label3: + i32.const $push9=, 4 + i32.add $0=, $0, $pop9 + i32.const $5=, 1 + i32.const $push8=, 1 + i32.add $push7=, $3, $pop8 + tee_local $push6=, $3=, $pop7 + i32.lt_s $push2=, $pop6, $1 + br_if 0, $pop2 # 0: up to label2 +.LBB0_6: # %for.end + end_loop + end_block # label1: + return +.LBB0_7: # %if.then3 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %for.cond.i.1 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr53645-2.c.s b/src/binaryen/test/torture-s/pr53645-2.c.s new file mode 100644 index 0000000000..4cf8881ee6 --- /dev/null +++ b/src/binaryen/test/torture-s/pr53645-2.c.s @@ -0,0 +1,4443 @@ + .text + .file "pr53645-2.c" + .section .text.uq44444444,"ax",@progbits + .hidden uq44444444 # -- Begin function uq44444444 + .globl uq44444444 + .type uq44444444,@function +uq44444444: # @uq44444444 + .param i32, i32 +# BB#0: # %entry + i32.load16_u $push0=, 0($1) + i32.const $push1=, 2 + i32.shr_u $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push3=, 14 + i32.add $push4=, $0, $pop3 + i32.const $push51=, 14 + i32.add $push5=, $1, $pop51 + i32.load16_u $push6=, 0($pop5) + i32.const $push50=, 2 + i32.shr_u $push7=, $pop6, $pop50 + i32.store16 0($pop4), $pop7 + i32.const $push8=, 12 + i32.add $push9=, $0, $pop8 + i32.const $push49=, 12 + i32.add $push10=, $1, $pop49 + i32.load16_u $push11=, 0($pop10) + i32.const $push48=, 2 + i32.shr_u $push12=, $pop11, $pop48 + i32.store16 0($pop9), $pop12 + i32.const $push13=, 10 + i32.add $push14=, $0, $pop13 + i32.const $push47=, 10 + i32.add $push15=, $1, $pop47 + i32.load16_u $push16=, 0($pop15) + i32.const $push46=, 2 + i32.shr_u $push17=, $pop16, $pop46 + i32.store16 0($pop14), $pop17 + i32.const $push18=, 8 + i32.add $push19=, $0, $pop18 + i32.const $push45=, 8 + i32.add $push20=, $1, $pop45 + i32.load16_u $push21=, 0($pop20) + i32.const $push44=, 2 + i32.shr_u $push22=, $pop21, $pop44 + i32.store16 0($pop19), $pop22 + i32.const $push23=, 6 + i32.add $push24=, $0, $pop23 + i32.const $push43=, 6 + i32.add $push25=, $1, $pop43 + i32.load16_u $push26=, 0($pop25) + i32.const $push42=, 2 + i32.shr_u $push27=, $pop26, $pop42 + i32.store16 0($pop24), $pop27 + i32.const $push28=, 4 + i32.add $push29=, $0, $pop28 + i32.const $push41=, 4 + i32.add $push30=, $1, $pop41 + i32.load16_u $push31=, 0($pop30) + i32.const $push40=, 2 + i32.shr_u $push32=, $pop31, $pop40 + i32.store16 0($pop29), $pop32 + i32.const $push39=, 2 + i32.add $push33=, $0, $pop39 + i32.const $push38=, 2 + i32.add $push34=, $1, $pop38 + i32.load16_u $push35=, 0($pop34) + i32.const $push37=, 2 + i32.shr_u $push36=, $pop35, $pop37 + i32.store16 0($pop33), $pop36 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size uq44444444, .Lfunc_end0-uq44444444 + # -- End function + .section .text.ur44444444,"ax",@progbits + .hidden ur44444444 # -- Begin function ur44444444 + .globl ur44444444 + .type ur44444444,@function +ur44444444: # @ur44444444 + .param i32, i32 +# BB#0: # %entry + i32.load16_u $push0=, 0($1) + i32.const $push1=, 3 + i32.and $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push3=, 14 + i32.add $push4=, $0, $pop3 + i32.const $push51=, 14 + i32.add $push5=, $1, $pop51 + i32.load16_u $push6=, 0($pop5) + i32.const $push50=, 3 + i32.and $push7=, $pop6, $pop50 + i32.store16 0($pop4), $pop7 + i32.const $push8=, 12 + i32.add $push9=, $0, $pop8 + i32.const $push49=, 12 + i32.add $push10=, $1, $pop49 + i32.load16_u $push11=, 0($pop10) + i32.const $push48=, 3 + i32.and $push12=, $pop11, $pop48 + i32.store16 0($pop9), $pop12 + i32.const $push13=, 10 + i32.add $push14=, $0, $pop13 + i32.const $push47=, 10 + i32.add $push15=, $1, $pop47 + i32.load16_u $push16=, 0($pop15) + i32.const $push46=, 3 + i32.and $push17=, $pop16, $pop46 + i32.store16 0($pop14), $pop17 + i32.const $push18=, 8 + i32.add $push19=, $0, $pop18 + i32.const $push45=, 8 + i32.add $push20=, $1, $pop45 + i32.load16_u $push21=, 0($pop20) + i32.const $push44=, 3 + i32.and $push22=, $pop21, $pop44 + i32.store16 0($pop19), $pop22 + i32.const $push23=, 6 + i32.add $push24=, $0, $pop23 + i32.const $push43=, 6 + i32.add $push25=, $1, $pop43 + i32.load16_u $push26=, 0($pop25) + i32.const $push42=, 3 + i32.and $push27=, $pop26, $pop42 + i32.store16 0($pop24), $pop27 + i32.const $push28=, 4 + i32.add $push29=, $0, $pop28 + i32.const $push41=, 4 + i32.add $push30=, $1, $pop41 + i32.load16_u $push31=, 0($pop30) + i32.const $push40=, 3 + i32.and $push32=, $pop31, $pop40 + i32.store16 0($pop29), $pop32 + i32.const $push33=, 2 + i32.add $push34=, $0, $pop33 + i32.const $push39=, 2 + i32.add $push35=, $1, $pop39 + i32.load16_u $push36=, 0($pop35) + i32.const $push38=, 3 + i32.and $push37=, $pop36, $pop38 + i32.store16 0($pop34), $pop37 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size ur44444444, .Lfunc_end1-ur44444444 + # -- End function + .section .text.sq44444444,"ax",@progbits + .hidden sq44444444 # -- Begin function sq44444444 + .globl sq44444444 + .type sq44444444,@function +sq44444444: # @sq44444444 + .param i32, i32 +# BB#0: # %entry + i32.load16_s $push0=, 0($1) + i32.const $push1=, 4 + i32.div_s $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push3=, 14 + i32.add $push4=, $0, $pop3 + i32.const $push51=, 14 + i32.add $push5=, $1, $pop51 + i32.load16_s $push6=, 0($pop5) + i32.const $push50=, 4 + i32.div_s $push7=, $pop6, $pop50 + i32.store16 0($pop4), $pop7 + i32.const $push8=, 12 + i32.add $push9=, $0, $pop8 + i32.const $push49=, 12 + i32.add $push10=, $1, $pop49 + i32.load16_s $push11=, 0($pop10) + i32.const $push48=, 4 + i32.div_s $push12=, $pop11, $pop48 + i32.store16 0($pop9), $pop12 + i32.const $push13=, 10 + i32.add $push14=, $0, $pop13 + i32.const $push47=, 10 + i32.add $push15=, $1, $pop47 + i32.load16_s $push16=, 0($pop15) + i32.const $push46=, 4 + i32.div_s $push17=, $pop16, $pop46 + i32.store16 0($pop14), $pop17 + i32.const $push18=, 8 + i32.add $push19=, $0, $pop18 + i32.const $push45=, 8 + i32.add $push20=, $1, $pop45 + i32.load16_s $push21=, 0($pop20) + i32.const $push44=, 4 + i32.div_s $push22=, $pop21, $pop44 + i32.store16 0($pop19), $pop22 + i32.const $push23=, 6 + i32.add $push24=, $0, $pop23 + i32.const $push43=, 6 + i32.add $push25=, $1, $pop43 + i32.load16_s $push26=, 0($pop25) + i32.const $push42=, 4 + i32.div_s $push27=, $pop26, $pop42 + i32.store16 0($pop24), $pop27 + i32.const $push41=, 4 + i32.add $push28=, $0, $pop41 + i32.const $push40=, 4 + i32.add $push29=, $1, $pop40 + i32.load16_s $push30=, 0($pop29) + i32.const $push39=, 4 + i32.div_s $push31=, $pop30, $pop39 + i32.store16 0($pop28), $pop31 + i32.const $push32=, 2 + i32.add $push33=, $0, $pop32 + i32.const $push38=, 2 + i32.add $push34=, $1, $pop38 + i32.load16_s $push35=, 0($pop34) + i32.const $push37=, 4 + i32.div_s $push36=, $pop35, $pop37 + i32.store16 0($pop33), $pop36 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size sq44444444, .Lfunc_end2-sq44444444 + # -- End function + .section .text.sr44444444,"ax",@progbits + .hidden sr44444444 # -- Begin function sr44444444 + .globl sr44444444 + .type sr44444444,@function +sr44444444: # @sr44444444 + .param i32, i32 +# BB#0: # %entry + i32.load16_s $push0=, 0($1) + i32.const $push1=, 4 + i32.rem_s $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push3=, 14 + i32.add $push4=, $0, $pop3 + i32.const $push51=, 14 + i32.add $push5=, $1, $pop51 + i32.load16_s $push6=, 0($pop5) + i32.const $push50=, 4 + i32.rem_s $push7=, $pop6, $pop50 + i32.store16 0($pop4), $pop7 + i32.const $push8=, 12 + i32.add $push9=, $0, $pop8 + i32.const $push49=, 12 + i32.add $push10=, $1, $pop49 + i32.load16_s $push11=, 0($pop10) + i32.const $push48=, 4 + i32.rem_s $push12=, $pop11, $pop48 + i32.store16 0($pop9), $pop12 + i32.const $push13=, 10 + i32.add $push14=, $0, $pop13 + i32.const $push47=, 10 + i32.add $push15=, $1, $pop47 + i32.load16_s $push16=, 0($pop15) + i32.const $push46=, 4 + i32.rem_s $push17=, $pop16, $pop46 + i32.store16 0($pop14), $pop17 + i32.const $push18=, 8 + i32.add $push19=, $0, $pop18 + i32.const $push45=, 8 + i32.add $push20=, $1, $pop45 + i32.load16_s $push21=, 0($pop20) + i32.const $push44=, 4 + i32.rem_s $push22=, $pop21, $pop44 + i32.store16 0($pop19), $pop22 + i32.const $push23=, 6 + i32.add $push24=, $0, $pop23 + i32.const $push43=, 6 + i32.add $push25=, $1, $pop43 + i32.load16_s $push26=, 0($pop25) + i32.const $push42=, 4 + i32.rem_s $push27=, $pop26, $pop42 + i32.store16 0($pop24), $pop27 + i32.const $push41=, 4 + i32.add $push28=, $0, $pop41 + i32.const $push40=, 4 + i32.add $push29=, $1, $pop40 + i32.load16_s $push30=, 0($pop29) + i32.const $push39=, 4 + i32.rem_s $push31=, $pop30, $pop39 + i32.store16 0($pop28), $pop31 + i32.const $push32=, 2 + i32.add $push33=, $0, $pop32 + i32.const $push38=, 2 + i32.add $push34=, $1, $pop38 + i32.load16_s $push35=, 0($pop34) + i32.const $push37=, 4 + i32.rem_s $push36=, $pop35, $pop37 + i32.store16 0($pop33), $pop36 + # fallthrough-return + .endfunc +.Lfunc_end3: + .size sr44444444, .Lfunc_end3-sr44444444 + # -- End function + .section .text.uq1428166432128,"ax",@progbits + .hidden uq1428166432128 # -- Begin function uq1428166432128 + .globl uq1428166432128 + .type uq1428166432128,@function +uq1428166432128: # @uq1428166432128 + .param i32, i32 +# BB#0: # %entry + i32.load16_u $push0=, 0($1) + i32.store16 0($0), $pop0 + i32.const $push1=, 14 + i32.add $push2=, $0, $pop1 + i32.const $push49=, 14 + i32.add $push3=, $1, $pop49 + i32.load16_u $push4=, 0($pop3) + i32.const $push5=, 7 + i32.shr_u $push6=, $pop4, $pop5 + i32.store16 0($pop2), $pop6 + i32.const $push7=, 12 + i32.add $push8=, $0, $pop7 + i32.const $push48=, 12 + i32.add $push9=, $1, $pop48 + i32.load16_u $push10=, 0($pop9) + i32.const $push11=, 5 + i32.shr_u $push12=, $pop10, $pop11 + i32.store16 0($pop8), $pop12 + i32.const $push13=, 10 + i32.add $push14=, $0, $pop13 + i32.const $push47=, 10 + i32.add $push15=, $1, $pop47 + i32.load16_u $push16=, 0($pop15) + i32.const $push17=, 6 + i32.shr_u $push18=, $pop16, $pop17 + i32.store16 0($pop14), $pop18 + i32.const $push19=, 8 + i32.add $push20=, $0, $pop19 + i32.const $push46=, 8 + i32.add $push21=, $1, $pop46 + i32.load16_u $push22=, 0($pop21) + i32.const $push23=, 4 + i32.shr_u $push24=, $pop22, $pop23 + i32.store16 0($pop20), $pop24 + i32.const $push45=, 6 + i32.add $push25=, $0, $pop45 + i32.const $push44=, 6 + i32.add $push26=, $1, $pop44 + i32.load16_u $push27=, 0($pop26) + i32.const $push28=, 3 + i32.shr_u $push29=, $pop27, $pop28 + i32.store16 0($pop25), $pop29 + i32.const $push43=, 4 + i32.add $push30=, $0, $pop43 + i32.const $push42=, 4 + i32.add $push31=, $1, $pop42 + i32.load16_u $push32=, 0($pop31) + i32.const $push33=, 1 + i32.shr_u $push34=, $pop32, $pop33 + i32.store16 0($pop30), $pop34 + i32.const $push35=, 2 + i32.add $push36=, $0, $pop35 + i32.const $push41=, 2 + i32.add $push37=, $1, $pop41 + i32.load16_u $push38=, 0($pop37) + i32.const $push40=, 2 + i32.shr_u $push39=, $pop38, $pop40 + i32.store16 0($pop36), $pop39 + # fallthrough-return + .endfunc +.Lfunc_end4: + .size uq1428166432128, .Lfunc_end4-uq1428166432128 + # -- End function + .section .text.ur1428166432128,"ax",@progbits + .hidden ur1428166432128 # -- Begin function ur1428166432128 + .globl ur1428166432128 + .type ur1428166432128,@function +ur1428166432128: # @ur1428166432128 + .param i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store16 0($0), $pop0 + i32.const $push1=, 14 + i32.add $push2=, $0, $pop1 + i32.const $push49=, 14 + i32.add $push3=, $1, $pop49 + i32.load16_u $push4=, 0($pop3) + i32.const $push5=, 127 + i32.and $push6=, $pop4, $pop5 + i32.store16 0($pop2), $pop6 + i32.const $push7=, 12 + i32.add $push8=, $0, $pop7 + i32.const $push48=, 12 + i32.add $push9=, $1, $pop48 + i32.load16_u $push10=, 0($pop9) + i32.const $push11=, 31 + i32.and $push12=, $pop10, $pop11 + i32.store16 0($pop8), $pop12 + i32.const $push13=, 10 + i32.add $push14=, $0, $pop13 + i32.const $push47=, 10 + i32.add $push15=, $1, $pop47 + i32.load16_u $push16=, 0($pop15) + i32.const $push17=, 63 + i32.and $push18=, $pop16, $pop17 + i32.store16 0($pop14), $pop18 + i32.const $push19=, 8 + i32.add $push20=, $0, $pop19 + i32.const $push46=, 8 + i32.add $push21=, $1, $pop46 + i32.load16_u $push22=, 0($pop21) + i32.const $push23=, 15 + i32.and $push24=, $pop22, $pop23 + i32.store16 0($pop20), $pop24 + i32.const $push25=, 6 + i32.add $push26=, $0, $pop25 + i32.const $push45=, 6 + i32.add $push27=, $1, $pop45 + i32.load16_u $push28=, 0($pop27) + i32.const $push29=, 7 + i32.and $push30=, $pop28, $pop29 + i32.store16 0($pop26), $pop30 + i32.const $push31=, 4 + i32.add $push32=, $0, $pop31 + i32.const $push44=, 4 + i32.add $push33=, $1, $pop44 + i32.load16_u $push34=, 0($pop33) + i32.const $push35=, 1 + i32.and $push36=, $pop34, $pop35 + i32.store16 0($pop32), $pop36 + i32.const $push37=, 2 + i32.add $push38=, $0, $pop37 + i32.const $push43=, 2 + i32.add $push39=, $1, $pop43 + i32.load16_u $push40=, 0($pop39) + i32.const $push41=, 3 + i32.and $push42=, $pop40, $pop41 + i32.store16 0($pop38), $pop42 + # fallthrough-return + .endfunc +.Lfunc_end5: + .size ur1428166432128, .Lfunc_end5-ur1428166432128 + # -- End function + .section .text.sq1428166432128,"ax",@progbits + .hidden sq1428166432128 # -- Begin function sq1428166432128 + .globl sq1428166432128 + .type sq1428166432128,@function +sq1428166432128: # @sq1428166432128 + .param i32, i32 +# BB#0: # %entry + i32.load16_u $push0=, 0($1) + i32.store16 0($0), $pop0 + i32.const $push1=, 14 + i32.add $push2=, $0, $pop1 + i32.const $push49=, 14 + i32.add $push3=, $1, $pop49 + i32.load16_s $push4=, 0($pop3) + i32.const $push5=, 128 + i32.div_s $push6=, $pop4, $pop5 + i32.store16 0($pop2), $pop6 + i32.const $push7=, 12 + i32.add $push8=, $0, $pop7 + i32.const $push48=, 12 + i32.add $push9=, $1, $pop48 + i32.load16_s $push10=, 0($pop9) + i32.const $push11=, 32 + i32.div_s $push12=, $pop10, $pop11 + i32.store16 0($pop8), $pop12 + i32.const $push13=, 10 + i32.add $push14=, $0, $pop13 + i32.const $push47=, 10 + i32.add $push15=, $1, $pop47 + i32.load16_s $push16=, 0($pop15) + i32.const $push17=, 64 + i32.div_s $push18=, $pop16, $pop17 + i32.store16 0($pop14), $pop18 + i32.const $push19=, 8 + i32.add $push20=, $0, $pop19 + i32.const $push46=, 8 + i32.add $push21=, $1, $pop46 + i32.load16_s $push22=, 0($pop21) + i32.const $push23=, 16 + i32.div_s $push24=, $pop22, $pop23 + i32.store16 0($pop20), $pop24 + i32.const $push25=, 6 + i32.add $push26=, $0, $pop25 + i32.const $push45=, 6 + i32.add $push27=, $1, $pop45 + i32.load16_s $push28=, 0($pop27) + i32.const $push44=, 8 + i32.div_s $push29=, $pop28, $pop44 + i32.store16 0($pop26), $pop29 + i32.const $push30=, 4 + i32.add $push31=, $0, $pop30 + i32.const $push43=, 4 + i32.add $push32=, $1, $pop43 + i32.load16_s $push33=, 0($pop32) + i32.const $push34=, 2 + i32.div_s $push35=, $pop33, $pop34 + i32.store16 0($pop31), $pop35 + i32.const $push42=, 2 + i32.add $push36=, $0, $pop42 + i32.const $push41=, 2 + i32.add $push37=, $1, $pop41 + i32.load16_s $push38=, 0($pop37) + i32.const $push40=, 4 + i32.div_s $push39=, $pop38, $pop40 + i32.store16 0($pop36), $pop39 + # fallthrough-return + .endfunc +.Lfunc_end6: + .size sq1428166432128, .Lfunc_end6-sq1428166432128 + # -- End function + .section .text.sr1428166432128,"ax",@progbits + .hidden sr1428166432128 # -- Begin function sr1428166432128 + .globl sr1428166432128 + .type sr1428166432128,@function +sr1428166432128: # @sr1428166432128 + .param i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store16 0($0), $pop0 + i32.const $push1=, 14 + i32.add $push2=, $0, $pop1 + i32.const $push49=, 14 + i32.add $push3=, $1, $pop49 + i32.load16_s $push4=, 0($pop3) + i32.const $push5=, 128 + i32.rem_s $push6=, $pop4, $pop5 + i32.store16 0($pop2), $pop6 + i32.const $push7=, 12 + i32.add $push8=, $0, $pop7 + i32.const $push48=, 12 + i32.add $push9=, $1, $pop48 + i32.load16_s $push10=, 0($pop9) + i32.const $push11=, 32 + i32.rem_s $push12=, $pop10, $pop11 + i32.store16 0($pop8), $pop12 + i32.const $push13=, 10 + i32.add $push14=, $0, $pop13 + i32.const $push47=, 10 + i32.add $push15=, $1, $pop47 + i32.load16_s $push16=, 0($pop15) + i32.const $push17=, 64 + i32.rem_s $push18=, $pop16, $pop17 + i32.store16 0($pop14), $pop18 + i32.const $push19=, 8 + i32.add $push20=, $0, $pop19 + i32.const $push46=, 8 + i32.add $push21=, $1, $pop46 + i32.load16_s $push22=, 0($pop21) + i32.const $push23=, 16 + i32.rem_s $push24=, $pop22, $pop23 + i32.store16 0($pop20), $pop24 + i32.const $push25=, 6 + i32.add $push26=, $0, $pop25 + i32.const $push45=, 6 + i32.add $push27=, $1, $pop45 + i32.load16_s $push28=, 0($pop27) + i32.const $push44=, 8 + i32.rem_s $push29=, $pop28, $pop44 + i32.store16 0($pop26), $pop29 + i32.const $push30=, 4 + i32.add $push31=, $0, $pop30 + i32.const $push43=, 4 + i32.add $push32=, $1, $pop43 + i32.load16_s $push33=, 0($pop32) + i32.const $push34=, 2 + i32.rem_s $push35=, $pop33, $pop34 + i32.store16 0($pop31), $pop35 + i32.const $push42=, 2 + i32.add $push36=, $0, $pop42 + i32.const $push41=, 2 + i32.add $push37=, $1, $pop41 + i32.load16_s $push38=, 0($pop37) + i32.const $push40=, 4 + i32.rem_s $push39=, $pop38, $pop40 + i32.store16 0($pop36), $pop39 + # fallthrough-return + .endfunc +.Lfunc_end7: + .size sr1428166432128, .Lfunc_end7-sr1428166432128 + # -- End function + .section .text.uq33333333,"ax",@progbits + .hidden uq33333333 # -- Begin function uq33333333 + .globl uq33333333 + .type uq33333333,@function +uq33333333: # @uq33333333 + .param i32, i32 +# BB#0: # %entry + i32.load16_u $push0=, 0($1) + i32.const $push1=, 3 + i32.div_u $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push3=, 14 + i32.add $push4=, $0, $pop3 + i32.const $push51=, 14 + i32.add $push5=, $1, $pop51 + i32.load16_u $push6=, 0($pop5) + i32.const $push50=, 3 + i32.div_u $push7=, $pop6, $pop50 + i32.store16 0($pop4), $pop7 + i32.const $push8=, 12 + i32.add $push9=, $0, $pop8 + i32.const $push49=, 12 + i32.add $push10=, $1, $pop49 + i32.load16_u $push11=, 0($pop10) + i32.const $push48=, 3 + i32.div_u $push12=, $pop11, $pop48 + i32.store16 0($pop9), $pop12 + i32.const $push13=, 10 + i32.add $push14=, $0, $pop13 + i32.const $push47=, 10 + i32.add $push15=, $1, $pop47 + i32.load16_u $push16=, 0($pop15) + i32.const $push46=, 3 + i32.div_u $push17=, $pop16, $pop46 + i32.store16 0($pop14), $pop17 + i32.const $push18=, 8 + i32.add $push19=, $0, $pop18 + i32.const $push45=, 8 + i32.add $push20=, $1, $pop45 + i32.load16_u $push21=, 0($pop20) + i32.const $push44=, 3 + i32.div_u $push22=, $pop21, $pop44 + i32.store16 0($pop19), $pop22 + i32.const $push23=, 6 + i32.add $push24=, $0, $pop23 + i32.const $push43=, 6 + i32.add $push25=, $1, $pop43 + i32.load16_u $push26=, 0($pop25) + i32.const $push42=, 3 + i32.div_u $push27=, $pop26, $pop42 + i32.store16 0($pop24), $pop27 + i32.const $push28=, 4 + i32.add $push29=, $0, $pop28 + i32.const $push41=, 4 + i32.add $push30=, $1, $pop41 + i32.load16_u $push31=, 0($pop30) + i32.const $push40=, 3 + i32.div_u $push32=, $pop31, $pop40 + i32.store16 0($pop29), $pop32 + i32.const $push33=, 2 + i32.add $push34=, $0, $pop33 + i32.const $push39=, 2 + i32.add $push35=, $1, $pop39 + i32.load16_u $push36=, 0($pop35) + i32.const $push38=, 3 + i32.div_u $push37=, $pop36, $pop38 + i32.store16 0($pop34), $pop37 + # fallthrough-return + .endfunc +.Lfunc_end8: + .size uq33333333, .Lfunc_end8-uq33333333 + # -- End function + .section .text.ur33333333,"ax",@progbits + .hidden ur33333333 # -- Begin function ur33333333 + .globl ur33333333 + .type ur33333333,@function +ur33333333: # @ur33333333 + .param i32, i32 +# BB#0: # %entry + i32.load16_u $push0=, 0($1) + i32.const $push1=, 3 + i32.rem_u $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push3=, 14 + i32.add $push4=, $0, $pop3 + i32.const $push51=, 14 + i32.add $push5=, $1, $pop51 + i32.load16_u $push6=, 0($pop5) + i32.const $push50=, 3 + i32.rem_u $push7=, $pop6, $pop50 + i32.store16 0($pop4), $pop7 + i32.const $push8=, 12 + i32.add $push9=, $0, $pop8 + i32.const $push49=, 12 + i32.add $push10=, $1, $pop49 + i32.load16_u $push11=, 0($pop10) + i32.const $push48=, 3 + i32.rem_u $push12=, $pop11, $pop48 + i32.store16 0($pop9), $pop12 + i32.const $push13=, 10 + i32.add $push14=, $0, $pop13 + i32.const $push47=, 10 + i32.add $push15=, $1, $pop47 + i32.load16_u $push16=, 0($pop15) + i32.const $push46=, 3 + i32.rem_u $push17=, $pop16, $pop46 + i32.store16 0($pop14), $pop17 + i32.const $push18=, 8 + i32.add $push19=, $0, $pop18 + i32.const $push45=, 8 + i32.add $push20=, $1, $pop45 + i32.load16_u $push21=, 0($pop20) + i32.const $push44=, 3 + i32.rem_u $push22=, $pop21, $pop44 + i32.store16 0($pop19), $pop22 + i32.const $push23=, 6 + i32.add $push24=, $0, $pop23 + i32.const $push43=, 6 + i32.add $push25=, $1, $pop43 + i32.load16_u $push26=, 0($pop25) + i32.const $push42=, 3 + i32.rem_u $push27=, $pop26, $pop42 + i32.store16 0($pop24), $pop27 + i32.const $push28=, 4 + i32.add $push29=, $0, $pop28 + i32.const $push41=, 4 + i32.add $push30=, $1, $pop41 + i32.load16_u $push31=, 0($pop30) + i32.const $push40=, 3 + i32.rem_u $push32=, $pop31, $pop40 + i32.store16 0($pop29), $pop32 + i32.const $push33=, 2 + i32.add $push34=, $0, $pop33 + i32.const $push39=, 2 + i32.add $push35=, $1, $pop39 + i32.load16_u $push36=, 0($pop35) + i32.const $push38=, 3 + i32.rem_u $push37=, $pop36, $pop38 + i32.store16 0($pop34), $pop37 + # fallthrough-return + .endfunc +.Lfunc_end9: + .size ur33333333, .Lfunc_end9-ur33333333 + # -- End function + .section .text.sq33333333,"ax",@progbits + .hidden sq33333333 # -- Begin function sq33333333 + .globl sq33333333 + .type sq33333333,@function +sq33333333: # @sq33333333 + .param i32, i32 +# BB#0: # %entry + i32.load16_s $push0=, 0($1) + i32.const $push1=, 3 + i32.div_s $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push3=, 14 + i32.add $push4=, $0, $pop3 + i32.const $push51=, 14 + i32.add $push5=, $1, $pop51 + i32.load16_s $push6=, 0($pop5) + i32.const $push50=, 3 + i32.div_s $push7=, $pop6, $pop50 + i32.store16 0($pop4), $pop7 + i32.const $push8=, 12 + i32.add $push9=, $0, $pop8 + i32.const $push49=, 12 + i32.add $push10=, $1, $pop49 + i32.load16_s $push11=, 0($pop10) + i32.const $push48=, 3 + i32.div_s $push12=, $pop11, $pop48 + i32.store16 0($pop9), $pop12 + i32.const $push13=, 10 + i32.add $push14=, $0, $pop13 + i32.const $push47=, 10 + i32.add $push15=, $1, $pop47 + i32.load16_s $push16=, 0($pop15) + i32.const $push46=, 3 + i32.div_s $push17=, $pop16, $pop46 + i32.store16 0($pop14), $pop17 + i32.const $push18=, 8 + i32.add $push19=, $0, $pop18 + i32.const $push45=, 8 + i32.add $push20=, $1, $pop45 + i32.load16_s $push21=, 0($pop20) + i32.const $push44=, 3 + i32.div_s $push22=, $pop21, $pop44 + i32.store16 0($pop19), $pop22 + i32.const $push23=, 6 + i32.add $push24=, $0, $pop23 + i32.const $push43=, 6 + i32.add $push25=, $1, $pop43 + i32.load16_s $push26=, 0($pop25) + i32.const $push42=, 3 + i32.div_s $push27=, $pop26, $pop42 + i32.store16 0($pop24), $pop27 + i32.const $push28=, 4 + i32.add $push29=, $0, $pop28 + i32.const $push41=, 4 + i32.add $push30=, $1, $pop41 + i32.load16_s $push31=, 0($pop30) + i32.const $push40=, 3 + i32.div_s $push32=, $pop31, $pop40 + i32.store16 0($pop29), $pop32 + i32.const $push33=, 2 + i32.add $push34=, $0, $pop33 + i32.const $push39=, 2 + i32.add $push35=, $1, $pop39 + i32.load16_s $push36=, 0($pop35) + i32.const $push38=, 3 + i32.div_s $push37=, $pop36, $pop38 + i32.store16 0($pop34), $pop37 + # fallthrough-return + .endfunc +.Lfunc_end10: + .size sq33333333, .Lfunc_end10-sq33333333 + # -- End function + .section .text.sr33333333,"ax",@progbits + .hidden sr33333333 # -- Begin function sr33333333 + .globl sr33333333 + .type sr33333333,@function +sr33333333: # @sr33333333 + .param i32, i32 +# BB#0: # %entry + i32.load16_s $push0=, 0($1) + i32.const $push1=, 3 + i32.rem_s $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push3=, 14 + i32.add $push4=, $0, $pop3 + i32.const $push51=, 14 + i32.add $push5=, $1, $pop51 + i32.load16_s $push6=, 0($pop5) + i32.const $push50=, 3 + i32.rem_s $push7=, $pop6, $pop50 + i32.store16 0($pop4), $pop7 + i32.const $push8=, 12 + i32.add $push9=, $0, $pop8 + i32.const $push49=, 12 + i32.add $push10=, $1, $pop49 + i32.load16_s $push11=, 0($pop10) + i32.const $push48=, 3 + i32.rem_s $push12=, $pop11, $pop48 + i32.store16 0($pop9), $pop12 + i32.const $push13=, 10 + i32.add $push14=, $0, $pop13 + i32.const $push47=, 10 + i32.add $push15=, $1, $pop47 + i32.load16_s $push16=, 0($pop15) + i32.const $push46=, 3 + i32.rem_s $push17=, $pop16, $pop46 + i32.store16 0($pop14), $pop17 + i32.const $push18=, 8 + i32.add $push19=, $0, $pop18 + i32.const $push45=, 8 + i32.add $push20=, $1, $pop45 + i32.load16_s $push21=, 0($pop20) + i32.const $push44=, 3 + i32.rem_s $push22=, $pop21, $pop44 + i32.store16 0($pop19), $pop22 + i32.const $push23=, 6 + i32.add $push24=, $0, $pop23 + i32.const $push43=, 6 + i32.add $push25=, $1, $pop43 + i32.load16_s $push26=, 0($pop25) + i32.const $push42=, 3 + i32.rem_s $push27=, $pop26, $pop42 + i32.store16 0($pop24), $pop27 + i32.const $push28=, 4 + i32.add $push29=, $0, $pop28 + i32.const $push41=, 4 + i32.add $push30=, $1, $pop41 + i32.load16_s $push31=, 0($pop30) + i32.const $push40=, 3 + i32.rem_s $push32=, $pop31, $pop40 + i32.store16 0($pop29), $pop32 + i32.const $push33=, 2 + i32.add $push34=, $0, $pop33 + i32.const $push39=, 2 + i32.add $push35=, $1, $pop39 + i32.load16_s $push36=, 0($pop35) + i32.const $push38=, 3 + i32.rem_s $push37=, $pop36, $pop38 + i32.store16 0($pop34), $pop37 + # fallthrough-return + .endfunc +.Lfunc_end11: + .size sr33333333, .Lfunc_end11-sr33333333 + # -- End function + .section .text.uq65656565,"ax",@progbits + .hidden uq65656565 # -- Begin function uq65656565 + .globl uq65656565 + .type uq65656565,@function +uq65656565: # @uq65656565 + .param i32, i32 +# BB#0: # %entry + i32.load16_u $push0=, 0($1) + i32.const $push1=, 6 + i32.div_u $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push3=, 14 + i32.add $push4=, $0, $pop3 + i32.const $push51=, 14 + i32.add $push5=, $1, $pop51 + i32.load16_u $push6=, 0($pop5) + i32.const $push7=, 5 + i32.div_u $push8=, $pop6, $pop7 + i32.store16 0($pop4), $pop8 + i32.const $push9=, 12 + i32.add $push10=, $0, $pop9 + i32.const $push50=, 12 + i32.add $push11=, $1, $pop50 + i32.load16_u $push12=, 0($pop11) + i32.const $push49=, 6 + i32.div_u $push13=, $pop12, $pop49 + i32.store16 0($pop10), $pop13 + i32.const $push14=, 10 + i32.add $push15=, $0, $pop14 + i32.const $push48=, 10 + i32.add $push16=, $1, $pop48 + i32.load16_u $push17=, 0($pop16) + i32.const $push47=, 5 + i32.div_u $push18=, $pop17, $pop47 + i32.store16 0($pop15), $pop18 + i32.const $push19=, 8 + i32.add $push20=, $0, $pop19 + i32.const $push46=, 8 + i32.add $push21=, $1, $pop46 + i32.load16_u $push22=, 0($pop21) + i32.const $push45=, 6 + i32.div_u $push23=, $pop22, $pop45 + i32.store16 0($pop20), $pop23 + i32.const $push44=, 6 + i32.add $push24=, $0, $pop44 + i32.const $push43=, 6 + i32.add $push25=, $1, $pop43 + i32.load16_u $push26=, 0($pop25) + i32.const $push42=, 5 + i32.div_u $push27=, $pop26, $pop42 + i32.store16 0($pop24), $pop27 + i32.const $push28=, 4 + i32.add $push29=, $0, $pop28 + i32.const $push41=, 4 + i32.add $push30=, $1, $pop41 + i32.load16_u $push31=, 0($pop30) + i32.const $push40=, 6 + i32.div_u $push32=, $pop31, $pop40 + i32.store16 0($pop29), $pop32 + i32.const $push33=, 2 + i32.add $push34=, $0, $pop33 + i32.const $push39=, 2 + i32.add $push35=, $1, $pop39 + i32.load16_u $push36=, 0($pop35) + i32.const $push38=, 5 + i32.div_u $push37=, $pop36, $pop38 + i32.store16 0($pop34), $pop37 + # fallthrough-return + .endfunc +.Lfunc_end12: + .size uq65656565, .Lfunc_end12-uq65656565 + # -- End function + .section .text.ur65656565,"ax",@progbits + .hidden ur65656565 # -- Begin function ur65656565 + .globl ur65656565 + .type ur65656565,@function +ur65656565: # @ur65656565 + .param i32, i32 +# BB#0: # %entry + i32.load16_u $push0=, 0($1) + i32.const $push1=, 6 + i32.rem_u $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push3=, 14 + i32.add $push4=, $0, $pop3 + i32.const $push51=, 14 + i32.add $push5=, $1, $pop51 + i32.load16_u $push6=, 0($pop5) + i32.const $push7=, 5 + i32.rem_u $push8=, $pop6, $pop7 + i32.store16 0($pop4), $pop8 + i32.const $push9=, 12 + i32.add $push10=, $0, $pop9 + i32.const $push50=, 12 + i32.add $push11=, $1, $pop50 + i32.load16_u $push12=, 0($pop11) + i32.const $push49=, 6 + i32.rem_u $push13=, $pop12, $pop49 + i32.store16 0($pop10), $pop13 + i32.const $push14=, 10 + i32.add $push15=, $0, $pop14 + i32.const $push48=, 10 + i32.add $push16=, $1, $pop48 + i32.load16_u $push17=, 0($pop16) + i32.const $push47=, 5 + i32.rem_u $push18=, $pop17, $pop47 + i32.store16 0($pop15), $pop18 + i32.const $push19=, 8 + i32.add $push20=, $0, $pop19 + i32.const $push46=, 8 + i32.add $push21=, $1, $pop46 + i32.load16_u $push22=, 0($pop21) + i32.const $push45=, 6 + i32.rem_u $push23=, $pop22, $pop45 + i32.store16 0($pop20), $pop23 + i32.const $push44=, 6 + i32.add $push24=, $0, $pop44 + i32.const $push43=, 6 + i32.add $push25=, $1, $pop43 + i32.load16_u $push26=, 0($pop25) + i32.const $push42=, 5 + i32.rem_u $push27=, $pop26, $pop42 + i32.store16 0($pop24), $pop27 + i32.const $push28=, 4 + i32.add $push29=, $0, $pop28 + i32.const $push41=, 4 + i32.add $push30=, $1, $pop41 + i32.load16_u $push31=, 0($pop30) + i32.const $push40=, 6 + i32.rem_u $push32=, $pop31, $pop40 + i32.store16 0($pop29), $pop32 + i32.const $push33=, 2 + i32.add $push34=, $0, $pop33 + i32.const $push39=, 2 + i32.add $push35=, $1, $pop39 + i32.load16_u $push36=, 0($pop35) + i32.const $push38=, 5 + i32.rem_u $push37=, $pop36, $pop38 + i32.store16 0($pop34), $pop37 + # fallthrough-return + .endfunc +.Lfunc_end13: + .size ur65656565, .Lfunc_end13-ur65656565 + # -- End function + .section .text.sq65656565,"ax",@progbits + .hidden sq65656565 # -- Begin function sq65656565 + .globl sq65656565 + .type sq65656565,@function +sq65656565: # @sq65656565 + .param i32, i32 +# BB#0: # %entry + i32.load16_s $push0=, 0($1) + i32.const $push1=, 6 + i32.div_s $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push3=, 14 + i32.add $push4=, $0, $pop3 + i32.const $push51=, 14 + i32.add $push5=, $1, $pop51 + i32.load16_s $push6=, 0($pop5) + i32.const $push7=, 5 + i32.div_s $push8=, $pop6, $pop7 + i32.store16 0($pop4), $pop8 + i32.const $push9=, 12 + i32.add $push10=, $0, $pop9 + i32.const $push50=, 12 + i32.add $push11=, $1, $pop50 + i32.load16_s $push12=, 0($pop11) + i32.const $push49=, 6 + i32.div_s $push13=, $pop12, $pop49 + i32.store16 0($pop10), $pop13 + i32.const $push14=, 10 + i32.add $push15=, $0, $pop14 + i32.const $push48=, 10 + i32.add $push16=, $1, $pop48 + i32.load16_s $push17=, 0($pop16) + i32.const $push47=, 5 + i32.div_s $push18=, $pop17, $pop47 + i32.store16 0($pop15), $pop18 + i32.const $push19=, 8 + i32.add $push20=, $0, $pop19 + i32.const $push46=, 8 + i32.add $push21=, $1, $pop46 + i32.load16_s $push22=, 0($pop21) + i32.const $push45=, 6 + i32.div_s $push23=, $pop22, $pop45 + i32.store16 0($pop20), $pop23 + i32.const $push44=, 6 + i32.add $push24=, $0, $pop44 + i32.const $push43=, 6 + i32.add $push25=, $1, $pop43 + i32.load16_s $push26=, 0($pop25) + i32.const $push42=, 5 + i32.div_s $push27=, $pop26, $pop42 + i32.store16 0($pop24), $pop27 + i32.const $push28=, 4 + i32.add $push29=, $0, $pop28 + i32.const $push41=, 4 + i32.add $push30=, $1, $pop41 + i32.load16_s $push31=, 0($pop30) + i32.const $push40=, 6 + i32.div_s $push32=, $pop31, $pop40 + i32.store16 0($pop29), $pop32 + i32.const $push33=, 2 + i32.add $push34=, $0, $pop33 + i32.const $push39=, 2 + i32.add $push35=, $1, $pop39 + i32.load16_s $push36=, 0($pop35) + i32.const $push38=, 5 + i32.div_s $push37=, $pop36, $pop38 + i32.store16 0($pop34), $pop37 + # fallthrough-return + .endfunc +.Lfunc_end14: + .size sq65656565, .Lfunc_end14-sq65656565 + # -- End function + .section .text.sr65656565,"ax",@progbits + .hidden sr65656565 # -- Begin function sr65656565 + .globl sr65656565 + .type sr65656565,@function +sr65656565: # @sr65656565 + .param i32, i32 +# BB#0: # %entry + i32.load16_s $push0=, 0($1) + i32.const $push1=, 6 + i32.rem_s $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push3=, 14 + i32.add $push4=, $0, $pop3 + i32.const $push51=, 14 + i32.add $push5=, $1, $pop51 + i32.load16_s $push6=, 0($pop5) + i32.const $push7=, 5 + i32.rem_s $push8=, $pop6, $pop7 + i32.store16 0($pop4), $pop8 + i32.const $push9=, 12 + i32.add $push10=, $0, $pop9 + i32.const $push50=, 12 + i32.add $push11=, $1, $pop50 + i32.load16_s $push12=, 0($pop11) + i32.const $push49=, 6 + i32.rem_s $push13=, $pop12, $pop49 + i32.store16 0($pop10), $pop13 + i32.const $push14=, 10 + i32.add $push15=, $0, $pop14 + i32.const $push48=, 10 + i32.add $push16=, $1, $pop48 + i32.load16_s $push17=, 0($pop16) + i32.const $push47=, 5 + i32.rem_s $push18=, $pop17, $pop47 + i32.store16 0($pop15), $pop18 + i32.const $push19=, 8 + i32.add $push20=, $0, $pop19 + i32.const $push46=, 8 + i32.add $push21=, $1, $pop46 + i32.load16_s $push22=, 0($pop21) + i32.const $push45=, 6 + i32.rem_s $push23=, $pop22, $pop45 + i32.store16 0($pop20), $pop23 + i32.const $push44=, 6 + i32.add $push24=, $0, $pop44 + i32.const $push43=, 6 + i32.add $push25=, $1, $pop43 + i32.load16_s $push26=, 0($pop25) + i32.const $push42=, 5 + i32.rem_s $push27=, $pop26, $pop42 + i32.store16 0($pop24), $pop27 + i32.const $push28=, 4 + i32.add $push29=, $0, $pop28 + i32.const $push41=, 4 + i32.add $push30=, $1, $pop41 + i32.load16_s $push31=, 0($pop30) + i32.const $push40=, 6 + i32.rem_s $push32=, $pop31, $pop40 + i32.store16 0($pop29), $pop32 + i32.const $push33=, 2 + i32.add $push34=, $0, $pop33 + i32.const $push39=, 2 + i32.add $push35=, $1, $pop39 + i32.load16_s $push36=, 0($pop35) + i32.const $push38=, 5 + i32.rem_s $push37=, $pop36, $pop38 + i32.store16 0($pop34), $pop37 + # fallthrough-return + .endfunc +.Lfunc_end15: + .size sr65656565, .Lfunc_end15-sr65656565 + # -- End function + .section .text.uq14141461461414,"ax",@progbits + .hidden uq14141461461414 # -- Begin function uq14141461461414 + .globl uq14141461461414 + .type uq14141461461414,@function +uq14141461461414: # @uq14141461461414 + .param i32, i32 +# BB#0: # %entry + i32.load16_u $push0=, 0($1) + i32.const $push1=, 14 + i32.div_u $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push51=, 14 + i32.add $push3=, $0, $pop51 + i32.const $push50=, 14 + i32.add $push4=, $1, $pop50 + i32.load16_u $push5=, 0($pop4) + i32.const $push49=, 14 + i32.div_u $push6=, $pop5, $pop49 + i32.store16 0($pop3), $pop6 + i32.const $push7=, 12 + i32.add $push8=, $0, $pop7 + i32.const $push48=, 12 + i32.add $push9=, $1, $pop48 + i32.load16_u $push10=, 0($pop9) + i32.const $push47=, 14 + i32.div_u $push11=, $pop10, $pop47 + i32.store16 0($pop8), $pop11 + i32.const $push12=, 10 + i32.add $push13=, $0, $pop12 + i32.const $push46=, 10 + i32.add $push14=, $1, $pop46 + i32.load16_u $push15=, 0($pop14) + i32.const $push16=, 6 + i32.div_u $push17=, $pop15, $pop16 + i32.store16 0($pop13), $pop17 + i32.const $push18=, 8 + i32.add $push19=, $0, $pop18 + i32.const $push45=, 8 + i32.add $push20=, $1, $pop45 + i32.load16_u $push21=, 0($pop20) + i32.const $push44=, 14 + i32.div_u $push22=, $pop21, $pop44 + i32.store16 0($pop19), $pop22 + i32.const $push43=, 6 + i32.add $push23=, $0, $pop43 + i32.const $push42=, 6 + i32.add $push24=, $1, $pop42 + i32.load16_u $push25=, 0($pop24) + i32.const $push41=, 6 + i32.div_u $push26=, $pop25, $pop41 + i32.store16 0($pop23), $pop26 + i32.const $push27=, 4 + i32.add $push28=, $0, $pop27 + i32.const $push40=, 4 + i32.add $push29=, $1, $pop40 + i32.load16_u $push30=, 0($pop29) + i32.const $push39=, 14 + i32.div_u $push31=, $pop30, $pop39 + i32.store16 0($pop28), $pop31 + i32.const $push32=, 2 + i32.add $push33=, $0, $pop32 + i32.const $push38=, 2 + i32.add $push34=, $1, $pop38 + i32.load16_u $push35=, 0($pop34) + i32.const $push37=, 14 + i32.div_u $push36=, $pop35, $pop37 + i32.store16 0($pop33), $pop36 + # fallthrough-return + .endfunc +.Lfunc_end16: + .size uq14141461461414, .Lfunc_end16-uq14141461461414 + # -- End function + .section .text.ur14141461461414,"ax",@progbits + .hidden ur14141461461414 # -- Begin function ur14141461461414 + .globl ur14141461461414 + .type ur14141461461414,@function +ur14141461461414: # @ur14141461461414 + .param i32, i32 +# BB#0: # %entry + i32.load16_u $push0=, 0($1) + i32.const $push1=, 14 + i32.rem_u $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push51=, 14 + i32.add $push3=, $0, $pop51 + i32.const $push50=, 14 + i32.add $push4=, $1, $pop50 + i32.load16_u $push5=, 0($pop4) + i32.const $push49=, 14 + i32.rem_u $push6=, $pop5, $pop49 + i32.store16 0($pop3), $pop6 + i32.const $push7=, 12 + i32.add $push8=, $0, $pop7 + i32.const $push48=, 12 + i32.add $push9=, $1, $pop48 + i32.load16_u $push10=, 0($pop9) + i32.const $push47=, 14 + i32.rem_u $push11=, $pop10, $pop47 + i32.store16 0($pop8), $pop11 + i32.const $push12=, 10 + i32.add $push13=, $0, $pop12 + i32.const $push46=, 10 + i32.add $push14=, $1, $pop46 + i32.load16_u $push15=, 0($pop14) + i32.const $push16=, 6 + i32.rem_u $push17=, $pop15, $pop16 + i32.store16 0($pop13), $pop17 + i32.const $push18=, 8 + i32.add $push19=, $0, $pop18 + i32.const $push45=, 8 + i32.add $push20=, $1, $pop45 + i32.load16_u $push21=, 0($pop20) + i32.const $push44=, 14 + i32.rem_u $push22=, $pop21, $pop44 + i32.store16 0($pop19), $pop22 + i32.const $push43=, 6 + i32.add $push23=, $0, $pop43 + i32.const $push42=, 6 + i32.add $push24=, $1, $pop42 + i32.load16_u $push25=, 0($pop24) + i32.const $push41=, 6 + i32.rem_u $push26=, $pop25, $pop41 + i32.store16 0($pop23), $pop26 + i32.const $push27=, 4 + i32.add $push28=, $0, $pop27 + i32.const $push40=, 4 + i32.add $push29=, $1, $pop40 + i32.load16_u $push30=, 0($pop29) + i32.const $push39=, 14 + i32.rem_u $push31=, $pop30, $pop39 + i32.store16 0($pop28), $pop31 + i32.const $push32=, 2 + i32.add $push33=, $0, $pop32 + i32.const $push38=, 2 + i32.add $push34=, $1, $pop38 + i32.load16_u $push35=, 0($pop34) + i32.const $push37=, 14 + i32.rem_u $push36=, $pop35, $pop37 + i32.store16 0($pop33), $pop36 + # fallthrough-return + .endfunc +.Lfunc_end17: + .size ur14141461461414, .Lfunc_end17-ur14141461461414 + # -- End function + .section .text.sq14141461461414,"ax",@progbits + .hidden sq14141461461414 # -- Begin function sq14141461461414 + .globl sq14141461461414 + .type sq14141461461414,@function +sq14141461461414: # @sq14141461461414 + .param i32, i32 +# BB#0: # %entry + i32.load16_s $push0=, 0($1) + i32.const $push1=, 14 + i32.div_s $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push51=, 14 + i32.add $push3=, $0, $pop51 + i32.const $push50=, 14 + i32.add $push4=, $1, $pop50 + i32.load16_s $push5=, 0($pop4) + i32.const $push49=, 14 + i32.div_s $push6=, $pop5, $pop49 + i32.store16 0($pop3), $pop6 + i32.const $push7=, 12 + i32.add $push8=, $0, $pop7 + i32.const $push48=, 12 + i32.add $push9=, $1, $pop48 + i32.load16_s $push10=, 0($pop9) + i32.const $push47=, 14 + i32.div_s $push11=, $pop10, $pop47 + i32.store16 0($pop8), $pop11 + i32.const $push12=, 10 + i32.add $push13=, $0, $pop12 + i32.const $push46=, 10 + i32.add $push14=, $1, $pop46 + i32.load16_s $push15=, 0($pop14) + i32.const $push16=, 6 + i32.div_s $push17=, $pop15, $pop16 + i32.store16 0($pop13), $pop17 + i32.const $push18=, 8 + i32.add $push19=, $0, $pop18 + i32.const $push45=, 8 + i32.add $push20=, $1, $pop45 + i32.load16_s $push21=, 0($pop20) + i32.const $push44=, 14 + i32.div_s $push22=, $pop21, $pop44 + i32.store16 0($pop19), $pop22 + i32.const $push43=, 6 + i32.add $push23=, $0, $pop43 + i32.const $push42=, 6 + i32.add $push24=, $1, $pop42 + i32.load16_s $push25=, 0($pop24) + i32.const $push41=, 6 + i32.div_s $push26=, $pop25, $pop41 + i32.store16 0($pop23), $pop26 + i32.const $push27=, 4 + i32.add $push28=, $0, $pop27 + i32.const $push40=, 4 + i32.add $push29=, $1, $pop40 + i32.load16_s $push30=, 0($pop29) + i32.const $push39=, 14 + i32.div_s $push31=, $pop30, $pop39 + i32.store16 0($pop28), $pop31 + i32.const $push32=, 2 + i32.add $push33=, $0, $pop32 + i32.const $push38=, 2 + i32.add $push34=, $1, $pop38 + i32.load16_s $push35=, 0($pop34) + i32.const $push37=, 14 + i32.div_s $push36=, $pop35, $pop37 + i32.store16 0($pop33), $pop36 + # fallthrough-return + .endfunc +.Lfunc_end18: + .size sq14141461461414, .Lfunc_end18-sq14141461461414 + # -- End function + .section .text.sr14141461461414,"ax",@progbits + .hidden sr14141461461414 # -- Begin function sr14141461461414 + .globl sr14141461461414 + .type sr14141461461414,@function +sr14141461461414: # @sr14141461461414 + .param i32, i32 +# BB#0: # %entry + i32.load16_s $push0=, 0($1) + i32.const $push1=, 14 + i32.rem_s $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push51=, 14 + i32.add $push3=, $0, $pop51 + i32.const $push50=, 14 + i32.add $push4=, $1, $pop50 + i32.load16_s $push5=, 0($pop4) + i32.const $push49=, 14 + i32.rem_s $push6=, $pop5, $pop49 + i32.store16 0($pop3), $pop6 + i32.const $push7=, 12 + i32.add $push8=, $0, $pop7 + i32.const $push48=, 12 + i32.add $push9=, $1, $pop48 + i32.load16_s $push10=, 0($pop9) + i32.const $push47=, 14 + i32.rem_s $push11=, $pop10, $pop47 + i32.store16 0($pop8), $pop11 + i32.const $push12=, 10 + i32.add $push13=, $0, $pop12 + i32.const $push46=, 10 + i32.add $push14=, $1, $pop46 + i32.load16_s $push15=, 0($pop14) + i32.const $push16=, 6 + i32.rem_s $push17=, $pop15, $pop16 + i32.store16 0($pop13), $pop17 + i32.const $push18=, 8 + i32.add $push19=, $0, $pop18 + i32.const $push45=, 8 + i32.add $push20=, $1, $pop45 + i32.load16_s $push21=, 0($pop20) + i32.const $push44=, 14 + i32.rem_s $push22=, $pop21, $pop44 + i32.store16 0($pop19), $pop22 + i32.const $push43=, 6 + i32.add $push23=, $0, $pop43 + i32.const $push42=, 6 + i32.add $push24=, $1, $pop42 + i32.load16_s $push25=, 0($pop24) + i32.const $push41=, 6 + i32.rem_s $push26=, $pop25, $pop41 + i32.store16 0($pop23), $pop26 + i32.const $push27=, 4 + i32.add $push28=, $0, $pop27 + i32.const $push40=, 4 + i32.add $push29=, $1, $pop40 + i32.load16_s $push30=, 0($pop29) + i32.const $push39=, 14 + i32.rem_s $push31=, $pop30, $pop39 + i32.store16 0($pop28), $pop31 + i32.const $push32=, 2 + i32.add $push33=, $0, $pop32 + i32.const $push38=, 2 + i32.add $push34=, $1, $pop38 + i32.load16_s $push35=, 0($pop34) + i32.const $push37=, 14 + i32.rem_s $push36=, $pop35, $pop37 + i32.store16 0($pop33), $pop36 + # fallthrough-return + .endfunc +.Lfunc_end19: + .size sr14141461461414, .Lfunc_end19-sr14141461461414 + # -- End function + .section .text.uq77777777,"ax",@progbits + .hidden uq77777777 # -- Begin function uq77777777 + .globl uq77777777 + .type uq77777777,@function +uq77777777: # @uq77777777 + .param i32, i32 +# BB#0: # %entry + i32.load16_u $push0=, 0($1) + i32.const $push1=, 7 + i32.div_u $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push3=, 14 + i32.add $push4=, $0, $pop3 + i32.const $push51=, 14 + i32.add $push5=, $1, $pop51 + i32.load16_u $push6=, 0($pop5) + i32.const $push50=, 7 + i32.div_u $push7=, $pop6, $pop50 + i32.store16 0($pop4), $pop7 + i32.const $push8=, 12 + i32.add $push9=, $0, $pop8 + i32.const $push49=, 12 + i32.add $push10=, $1, $pop49 + i32.load16_u $push11=, 0($pop10) + i32.const $push48=, 7 + i32.div_u $push12=, $pop11, $pop48 + i32.store16 0($pop9), $pop12 + i32.const $push13=, 10 + i32.add $push14=, $0, $pop13 + i32.const $push47=, 10 + i32.add $push15=, $1, $pop47 + i32.load16_u $push16=, 0($pop15) + i32.const $push46=, 7 + i32.div_u $push17=, $pop16, $pop46 + i32.store16 0($pop14), $pop17 + i32.const $push18=, 8 + i32.add $push19=, $0, $pop18 + i32.const $push45=, 8 + i32.add $push20=, $1, $pop45 + i32.load16_u $push21=, 0($pop20) + i32.const $push44=, 7 + i32.div_u $push22=, $pop21, $pop44 + i32.store16 0($pop19), $pop22 + i32.const $push23=, 6 + i32.add $push24=, $0, $pop23 + i32.const $push43=, 6 + i32.add $push25=, $1, $pop43 + i32.load16_u $push26=, 0($pop25) + i32.const $push42=, 7 + i32.div_u $push27=, $pop26, $pop42 + i32.store16 0($pop24), $pop27 + i32.const $push28=, 4 + i32.add $push29=, $0, $pop28 + i32.const $push41=, 4 + i32.add $push30=, $1, $pop41 + i32.load16_u $push31=, 0($pop30) + i32.const $push40=, 7 + i32.div_u $push32=, $pop31, $pop40 + i32.store16 0($pop29), $pop32 + i32.const $push33=, 2 + i32.add $push34=, $0, $pop33 + i32.const $push39=, 2 + i32.add $push35=, $1, $pop39 + i32.load16_u $push36=, 0($pop35) + i32.const $push38=, 7 + i32.div_u $push37=, $pop36, $pop38 + i32.store16 0($pop34), $pop37 + # fallthrough-return + .endfunc +.Lfunc_end20: + .size uq77777777, .Lfunc_end20-uq77777777 + # -- End function + .section .text.ur77777777,"ax",@progbits + .hidden ur77777777 # -- Begin function ur77777777 + .globl ur77777777 + .type ur77777777,@function +ur77777777: # @ur77777777 + .param i32, i32 +# BB#0: # %entry + i32.load16_u $push0=, 0($1) + i32.const $push1=, 7 + i32.rem_u $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push3=, 14 + i32.add $push4=, $0, $pop3 + i32.const $push51=, 14 + i32.add $push5=, $1, $pop51 + i32.load16_u $push6=, 0($pop5) + i32.const $push50=, 7 + i32.rem_u $push7=, $pop6, $pop50 + i32.store16 0($pop4), $pop7 + i32.const $push8=, 12 + i32.add $push9=, $0, $pop8 + i32.const $push49=, 12 + i32.add $push10=, $1, $pop49 + i32.load16_u $push11=, 0($pop10) + i32.const $push48=, 7 + i32.rem_u $push12=, $pop11, $pop48 + i32.store16 0($pop9), $pop12 + i32.const $push13=, 10 + i32.add $push14=, $0, $pop13 + i32.const $push47=, 10 + i32.add $push15=, $1, $pop47 + i32.load16_u $push16=, 0($pop15) + i32.const $push46=, 7 + i32.rem_u $push17=, $pop16, $pop46 + i32.store16 0($pop14), $pop17 + i32.const $push18=, 8 + i32.add $push19=, $0, $pop18 + i32.const $push45=, 8 + i32.add $push20=, $1, $pop45 + i32.load16_u $push21=, 0($pop20) + i32.const $push44=, 7 + i32.rem_u $push22=, $pop21, $pop44 + i32.store16 0($pop19), $pop22 + i32.const $push23=, 6 + i32.add $push24=, $0, $pop23 + i32.const $push43=, 6 + i32.add $push25=, $1, $pop43 + i32.load16_u $push26=, 0($pop25) + i32.const $push42=, 7 + i32.rem_u $push27=, $pop26, $pop42 + i32.store16 0($pop24), $pop27 + i32.const $push28=, 4 + i32.add $push29=, $0, $pop28 + i32.const $push41=, 4 + i32.add $push30=, $1, $pop41 + i32.load16_u $push31=, 0($pop30) + i32.const $push40=, 7 + i32.rem_u $push32=, $pop31, $pop40 + i32.store16 0($pop29), $pop32 + i32.const $push33=, 2 + i32.add $push34=, $0, $pop33 + i32.const $push39=, 2 + i32.add $push35=, $1, $pop39 + i32.load16_u $push36=, 0($pop35) + i32.const $push38=, 7 + i32.rem_u $push37=, $pop36, $pop38 + i32.store16 0($pop34), $pop37 + # fallthrough-return + .endfunc +.Lfunc_end21: + .size ur77777777, .Lfunc_end21-ur77777777 + # -- End function + .section .text.sq77777777,"ax",@progbits + .hidden sq77777777 # -- Begin function sq77777777 + .globl sq77777777 + .type sq77777777,@function +sq77777777: # @sq77777777 + .param i32, i32 +# BB#0: # %entry + i32.load16_s $push0=, 0($1) + i32.const $push1=, 7 + i32.div_s $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push3=, 14 + i32.add $push4=, $0, $pop3 + i32.const $push51=, 14 + i32.add $push5=, $1, $pop51 + i32.load16_s $push6=, 0($pop5) + i32.const $push50=, 7 + i32.div_s $push7=, $pop6, $pop50 + i32.store16 0($pop4), $pop7 + i32.const $push8=, 12 + i32.add $push9=, $0, $pop8 + i32.const $push49=, 12 + i32.add $push10=, $1, $pop49 + i32.load16_s $push11=, 0($pop10) + i32.const $push48=, 7 + i32.div_s $push12=, $pop11, $pop48 + i32.store16 0($pop9), $pop12 + i32.const $push13=, 10 + i32.add $push14=, $0, $pop13 + i32.const $push47=, 10 + i32.add $push15=, $1, $pop47 + i32.load16_s $push16=, 0($pop15) + i32.const $push46=, 7 + i32.div_s $push17=, $pop16, $pop46 + i32.store16 0($pop14), $pop17 + i32.const $push18=, 8 + i32.add $push19=, $0, $pop18 + i32.const $push45=, 8 + i32.add $push20=, $1, $pop45 + i32.load16_s $push21=, 0($pop20) + i32.const $push44=, 7 + i32.div_s $push22=, $pop21, $pop44 + i32.store16 0($pop19), $pop22 + i32.const $push23=, 6 + i32.add $push24=, $0, $pop23 + i32.const $push43=, 6 + i32.add $push25=, $1, $pop43 + i32.load16_s $push26=, 0($pop25) + i32.const $push42=, 7 + i32.div_s $push27=, $pop26, $pop42 + i32.store16 0($pop24), $pop27 + i32.const $push28=, 4 + i32.add $push29=, $0, $pop28 + i32.const $push41=, 4 + i32.add $push30=, $1, $pop41 + i32.load16_s $push31=, 0($pop30) + i32.const $push40=, 7 + i32.div_s $push32=, $pop31, $pop40 + i32.store16 0($pop29), $pop32 + i32.const $push33=, 2 + i32.add $push34=, $0, $pop33 + i32.const $push39=, 2 + i32.add $push35=, $1, $pop39 + i32.load16_s $push36=, 0($pop35) + i32.const $push38=, 7 + i32.div_s $push37=, $pop36, $pop38 + i32.store16 0($pop34), $pop37 + # fallthrough-return + .endfunc +.Lfunc_end22: + .size sq77777777, .Lfunc_end22-sq77777777 + # -- End function + .section .text.sr77777777,"ax",@progbits + .hidden sr77777777 # -- Begin function sr77777777 + .globl sr77777777 + .type sr77777777,@function +sr77777777: # @sr77777777 + .param i32, i32 +# BB#0: # %entry + i32.load16_s $push0=, 0($1) + i32.const $push1=, 7 + i32.rem_s $push2=, $pop0, $pop1 + i32.store16 0($0), $pop2 + i32.const $push3=, 14 + i32.add $push4=, $0, $pop3 + i32.const $push51=, 14 + i32.add $push5=, $1, $pop51 + i32.load16_s $push6=, 0($pop5) + i32.const $push50=, 7 + i32.rem_s $push7=, $pop6, $pop50 + i32.store16 0($pop4), $pop7 + i32.const $push8=, 12 + i32.add $push9=, $0, $pop8 + i32.const $push49=, 12 + i32.add $push10=, $1, $pop49 + i32.load16_s $push11=, 0($pop10) + i32.const $push48=, 7 + i32.rem_s $push12=, $pop11, $pop48 + i32.store16 0($pop9), $pop12 + i32.const $push13=, 10 + i32.add $push14=, $0, $pop13 + i32.const $push47=, 10 + i32.add $push15=, $1, $pop47 + i32.load16_s $push16=, 0($pop15) + i32.const $push46=, 7 + i32.rem_s $push17=, $pop16, $pop46 + i32.store16 0($pop14), $pop17 + i32.const $push18=, 8 + i32.add $push19=, $0, $pop18 + i32.const $push45=, 8 + i32.add $push20=, $1, $pop45 + i32.load16_s $push21=, 0($pop20) + i32.const $push44=, 7 + i32.rem_s $push22=, $pop21, $pop44 + i32.store16 0($pop19), $pop22 + i32.const $push23=, 6 + i32.add $push24=, $0, $pop23 + i32.const $push43=, 6 + i32.add $push25=, $1, $pop43 + i32.load16_s $push26=, 0($pop25) + i32.const $push42=, 7 + i32.rem_s $push27=, $pop26, $pop42 + i32.store16 0($pop24), $pop27 + i32.const $push28=, 4 + i32.add $push29=, $0, $pop28 + i32.const $push41=, 4 + i32.add $push30=, $1, $pop41 + i32.load16_s $push31=, 0($pop30) + i32.const $push40=, 7 + i32.rem_s $push32=, $pop31, $pop40 + i32.store16 0($pop29), $pop32 + i32.const $push33=, 2 + i32.add $push34=, $0, $pop33 + i32.const $push39=, 2 + i32.add $push35=, $1, $pop39 + i32.load16_s $push36=, 0($pop35) + i32.const $push38=, 7 + i32.rem_s $push37=, $pop36, $pop38 + i32.store16 0($pop34), $pop37 + # fallthrough-return + .endfunc +.Lfunc_end23: + .size sr77777777, .Lfunc_end23-sr77777777 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push1071=, 0 + i32.const $push1069=, 0 + i32.load $push1068=, __stack_pointer($pop1069) + i32.const $push1070=, 32 + i32.sub $push1196=, $pop1068, $pop1070 + tee_local $push1195=, $10=, $pop1196 + i32.store __stack_pointer($pop1071), $pop1195 + i32.const $0=, 0 +.LBB24_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label1: + i32.const $push1075=, 16 + i32.add $push1076=, $10, $pop1075 + i32.const $push1203=, 4 + i32.shl $push1202=, $0, $pop1203 + tee_local $push1201=, $2=, $pop1202 + i32.const $push1200=, u + i32.add $push1199=, $pop1201, $pop1200 + tee_local $push1198=, $1=, $pop1199 + call uq44444444@FUNCTION, $pop1076, $pop1198 + i32.load16_u $push0=, 16($10) + i32.load16_u $push2=, 0($1) + i32.const $push1197=, 2 + i32.shr_u $push380=, $pop2, $pop1197 + i32.ne $push381=, $pop0, $pop380 + br_if 1, $pop381 # 1: down to label0 +# BB#2: # %lor.lhs.false + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push1=, 22($10) + i32.const $push1207=, 65535 + i32.and $push383=, $pop1, $pop1207 + i32.const $push1206=, u+6 + i32.add $push382=, $2, $pop1206 + i32.load16_u $push3=, 0($pop382) + i32.const $push1205=, 65532 + i32.and $push384=, $pop3, $pop1205 + i32.const $push1204=, 2 + i32.shr_u $push385=, $pop384, $pop1204 + i32.ne $push386=, $pop383, $pop385 + br_if 1, $pop386 # 1: down to label0 +# BB#3: # %if.end + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1077=, 16 + i32.add $push1078=, $10, $pop1077 + copy_local $2=, $pop1078 + #APP + #NO_APP + i32.load16_u $push5=, 20($10) + i32.const $push1211=, 4 + i32.add $push1210=, $1, $pop1211 + tee_local $push1209=, $2=, $pop1210 + i32.load16_u $push7=, 0($pop1209) + i32.const $push1208=, 2 + i32.shr_u $push387=, $pop7, $pop1208 + i32.ne $push388=, $pop5, $pop387 + br_if 1, $pop388 # 1: down to label0 +# BB#4: # %lor.lhs.false21 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push4=, 18($10) + i32.const $push1217=, 65535 + i32.and $push389=, $pop4, $pop1217 + i32.const $push1216=, 2 + i32.add $push1215=, $1, $pop1216 + tee_local $push1214=, $3=, $pop1215 + i32.load16_u $push6=, 0($pop1214) + i32.const $push1213=, 65532 + i32.and $push390=, $pop6, $pop1213 + i32.const $push1212=, 2 + i32.shr_u $push391=, $pop390, $pop1212 + i32.ne $push392=, $pop389, $pop391 + br_if 1, $pop392 # 1: down to label0 +# BB#5: # %if.end31 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1079=, 16 + i32.add $push1080=, $10, $pop1079 + copy_local $4=, $pop1080 + #APP + #NO_APP + i32.load16_u $push8=, 24($10) + i32.const $push1221=, 8 + i32.add $push1220=, $1, $pop1221 + tee_local $push1219=, $4=, $pop1220 + i32.load16_u $push10=, 0($pop1219) + i32.const $push1218=, 2 + i32.shr_u $push393=, $pop10, $pop1218 + i32.ne $push394=, $pop8, $pop393 + br_if 1, $pop394 # 1: down to label0 +# BB#6: # %lor.lhs.false40 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push9=, 30($10) + i32.const $push1227=, 65535 + i32.and $push395=, $pop9, $pop1227 + i32.const $push1226=, 14 + i32.add $push1225=, $1, $pop1226 + tee_local $push1224=, $5=, $pop1225 + i32.load16_u $push11=, 0($pop1224) + i32.const $push1223=, 65532 + i32.and $push396=, $pop11, $pop1223 + i32.const $push1222=, 2 + i32.shr_u $push397=, $pop396, $pop1222 + i32.ne $push398=, $pop395, $pop397 + br_if 1, $pop398 # 1: down to label0 +# BB#7: # %if.end50 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1081=, 16 + i32.add $push1082=, $10, $pop1081 + copy_local $6=, $pop1082 + #APP + #NO_APP + i32.load16_u $push13=, 28($10) + i32.const $push1231=, 12 + i32.add $push1230=, $1, $pop1231 + tee_local $push1229=, $6=, $pop1230 + i32.load16_u $push15=, 0($pop1229) + i32.const $push1228=, 2 + i32.shr_u $push399=, $pop15, $pop1228 + i32.ne $push400=, $pop13, $pop399 + br_if 1, $pop400 # 1: down to label0 +# BB#8: # %lor.lhs.false59 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push12=, 26($10) + i32.const $push1237=, 65535 + i32.and $push401=, $pop12, $pop1237 + i32.const $push1236=, 10 + i32.add $push1235=, $1, $pop1236 + tee_local $push1234=, $7=, $pop1235 + i32.load16_u $push14=, 0($pop1234) + i32.const $push1233=, 65532 + i32.and $push402=, $pop14, $pop1233 + i32.const $push1232=, 2 + i32.shr_u $push403=, $pop402, $pop1232 + i32.ne $push404=, $pop401, $pop403 + br_if 1, $pop404 # 1: down to label0 +# BB#9: # %if.end69 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1083=, 16 + i32.add $push1084=, $10, $pop1083 + copy_local $8=, $pop1084 + #APP + #NO_APP + i32.const $push1085=, 16 + i32.add $push1086=, $10, $pop1085 + call ur44444444@FUNCTION, $pop1086, $1 + i32.load16_u $push16=, 16($10) + i32.load16_u $push18=, 0($1) + i32.const $push1238=, 3 + i32.and $push405=, $pop18, $pop1238 + i32.ne $push406=, $pop16, $pop405 + br_if 1, $pop406 # 1: down to label0 +# BB#10: # %lor.lhs.false78 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push17=, 22($10) + i32.const $push1243=, 65535 + i32.and $push408=, $pop17, $pop1243 + i32.const $push1242=, 6 + i32.add $push1241=, $1, $pop1242 + tee_local $push1240=, $8=, $pop1241 + i32.load16_u $push19=, 0($pop1240) + i32.const $push1239=, 3 + i32.and $push407=, $pop19, $pop1239 + i32.ne $push409=, $pop408, $pop407 + br_if 1, $pop409 # 1: down to label0 +# BB#11: # %if.end88 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1087=, 16 + i32.add $push1088=, $10, $pop1087 + copy_local $9=, $pop1088 + #APP + #NO_APP + i32.load16_u $push21=, 20($10) + i32.load16_u $push23=, 0($2) + i32.const $push1244=, 3 + i32.and $push410=, $pop23, $pop1244 + i32.ne $push411=, $pop21, $pop410 + br_if 1, $pop411 # 1: down to label0 +# BB#12: # %lor.lhs.false97 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push20=, 18($10) + i32.const $push1246=, 65535 + i32.and $push413=, $pop20, $pop1246 + i32.load16_u $push22=, 0($3) + i32.const $push1245=, 3 + i32.and $push412=, $pop22, $pop1245 + i32.ne $push414=, $pop413, $pop412 + br_if 1, $pop414 # 1: down to label0 +# BB#13: # %if.end107 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1089=, 16 + i32.add $push1090=, $10, $pop1089 + copy_local $9=, $pop1090 + #APP + #NO_APP + i32.load16_u $push24=, 24($10) + i32.load16_u $push26=, 0($4) + i32.const $push1247=, 3 + i32.and $push415=, $pop26, $pop1247 + i32.ne $push416=, $pop24, $pop415 + br_if 1, $pop416 # 1: down to label0 +# BB#14: # %lor.lhs.false116 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push25=, 30($10) + i32.const $push1249=, 65535 + i32.and $push418=, $pop25, $pop1249 + i32.load16_u $push27=, 0($5) + i32.const $push1248=, 3 + i32.and $push417=, $pop27, $pop1248 + i32.ne $push419=, $pop418, $pop417 + br_if 1, $pop419 # 1: down to label0 +# BB#15: # %if.end126 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1091=, 16 + i32.add $push1092=, $10, $pop1091 + copy_local $9=, $pop1092 + #APP + #NO_APP + i32.load16_u $push29=, 28($10) + i32.load16_u $push31=, 0($6) + i32.const $push1250=, 3 + i32.and $push420=, $pop31, $pop1250 + i32.ne $push421=, $pop29, $pop420 + br_if 1, $pop421 # 1: down to label0 +# BB#16: # %lor.lhs.false135 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push28=, 26($10) + i32.const $push1252=, 65535 + i32.and $push423=, $pop28, $pop1252 + i32.load16_u $push30=, 0($7) + i32.const $push1251=, 3 + i32.and $push422=, $pop30, $pop1251 + i32.ne $push424=, $pop423, $pop422 + br_if 1, $pop424 # 1: down to label0 +# BB#17: # %if.end145 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1093=, 16 + i32.add $push1094=, $10, $pop1093 + copy_local $9=, $pop1094 + #APP + #NO_APP + i32.const $push1095=, 16 + i32.add $push1096=, $10, $pop1095 + call uq1428166432128@FUNCTION, $pop1096, $1 + i32.load16_u $push32=, 16($10) + i32.load16_u $push34=, 0($1) + i32.ne $push425=, $pop32, $pop34 + br_if 1, $pop425 # 1: down to label0 +# BB#18: # %lor.lhs.false155 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push33=, 22($10) + i32.const $push1255=, 65535 + i32.and $push426=, $pop33, $pop1255 + i32.load16_u $push35=, 0($8) + i32.const $push1254=, 65528 + i32.and $push427=, $pop35, $pop1254 + i32.const $push1253=, 3 + i32.shr_u $push428=, $pop427, $pop1253 + i32.ne $push429=, $pop426, $pop428 + br_if 1, $pop429 # 1: down to label0 +# BB#19: # %if.end165 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1097=, 16 + i32.add $push1098=, $10, $pop1097 + copy_local $9=, $pop1098 + #APP + #NO_APP + i32.load16_u $push37=, 20($10) + i32.load16_u $push39=, 0($2) + i32.const $push1256=, 1 + i32.shr_u $push430=, $pop39, $pop1256 + i32.ne $push431=, $pop37, $pop430 + br_if 1, $pop431 # 1: down to label0 +# BB#20: # %lor.lhs.false174 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push36=, 18($10) + i32.const $push1259=, 65535 + i32.and $push432=, $pop36, $pop1259 + i32.load16_u $push38=, 0($3) + i32.const $push1258=, 65532 + i32.and $push433=, $pop38, $pop1258 + i32.const $push1257=, 2 + i32.shr_u $push434=, $pop433, $pop1257 + i32.ne $push435=, $pop432, $pop434 + br_if 1, $pop435 # 1: down to label0 +# BB#21: # %if.end184 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1099=, 16 + i32.add $push1100=, $10, $pop1099 + copy_local $9=, $pop1100 + #APP + #NO_APP + i32.load16_u $push40=, 24($10) + i32.load16_u $push42=, 0($4) + i32.const $push1260=, 4 + i32.shr_u $push436=, $pop42, $pop1260 + i32.ne $push437=, $pop40, $pop436 + br_if 1, $pop437 # 1: down to label0 +# BB#22: # %lor.lhs.false193 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push41=, 30($10) + i32.const $push1263=, 65535 + i32.and $push438=, $pop41, $pop1263 + i32.load16_u $push43=, 0($5) + i32.const $push1262=, 65408 + i32.and $push439=, $pop43, $pop1262 + i32.const $push1261=, 7 + i32.shr_u $push440=, $pop439, $pop1261 + i32.ne $push441=, $pop438, $pop440 + br_if 1, $pop441 # 1: down to label0 +# BB#23: # %if.end203 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1101=, 16 + i32.add $push1102=, $10, $pop1101 + copy_local $9=, $pop1102 + #APP + #NO_APP + i32.load16_u $push45=, 28($10) + i32.load16_u $push47=, 0($6) + i32.const $push1264=, 5 + i32.shr_u $push442=, $pop47, $pop1264 + i32.ne $push443=, $pop45, $pop442 + br_if 1, $pop443 # 1: down to label0 +# BB#24: # %lor.lhs.false212 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push44=, 26($10) + i32.const $push1267=, 65535 + i32.and $push444=, $pop44, $pop1267 + i32.load16_u $push46=, 0($7) + i32.const $push1266=, 65472 + i32.and $push445=, $pop46, $pop1266 + i32.const $push1265=, 6 + i32.shr_u $push446=, $pop445, $pop1265 + i32.ne $push447=, $pop444, $pop446 + br_if 1, $pop447 # 1: down to label0 +# BB#25: # %if.end222 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1103=, 16 + i32.add $push1104=, $10, $pop1103 + copy_local $9=, $pop1104 + #APP + #NO_APP + i32.const $push1105=, 16 + i32.add $push1106=, $10, $pop1105 + call ur1428166432128@FUNCTION, $pop1106, $1 + i32.load16_u $push48=, 16($10) + br_if 1, $pop48 # 1: down to label0 +# BB#26: # %lor.lhs.false232 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push49=, 22($10) + i32.const $push1269=, 65535 + i32.and $push450=, $pop49, $pop1269 + i32.load16_u $push448=, 0($8) + i32.const $push1268=, 7 + i32.and $push449=, $pop448, $pop1268 + i32.ne $push451=, $pop450, $pop449 + br_if 1, $pop451 # 1: down to label0 +# BB#27: # %if.end242 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1107=, 16 + i32.add $push1108=, $10, $pop1107 + copy_local $9=, $pop1108 + #APP + #NO_APP + i32.load16_u $push51=, 20($10) + i32.load16_u $push53=, 0($2) + i32.const $push1270=, 1 + i32.and $push452=, $pop53, $pop1270 + i32.ne $push453=, $pop51, $pop452 + br_if 1, $pop453 # 1: down to label0 +# BB#28: # %lor.lhs.false251 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push50=, 18($10) + i32.const $push1272=, 65535 + i32.and $push455=, $pop50, $pop1272 + i32.load16_u $push52=, 0($3) + i32.const $push1271=, 3 + i32.and $push454=, $pop52, $pop1271 + i32.ne $push456=, $pop455, $pop454 + br_if 1, $pop456 # 1: down to label0 +# BB#29: # %if.end261 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1109=, 16 + i32.add $push1110=, $10, $pop1109 + copy_local $9=, $pop1110 + #APP + #NO_APP + i32.load16_u $push54=, 24($10) + i32.load16_u $push56=, 0($4) + i32.const $push1273=, 15 + i32.and $push457=, $pop56, $pop1273 + i32.ne $push458=, $pop54, $pop457 + br_if 1, $pop458 # 1: down to label0 +# BB#30: # %lor.lhs.false270 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push55=, 30($10) + i32.const $push1275=, 65535 + i32.and $push460=, $pop55, $pop1275 + i32.load16_u $push57=, 0($5) + i32.const $push1274=, 127 + i32.and $push459=, $pop57, $pop1274 + i32.ne $push461=, $pop460, $pop459 + br_if 1, $pop461 # 1: down to label0 +# BB#31: # %if.end280 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1111=, 16 + i32.add $push1112=, $10, $pop1111 + copy_local $9=, $pop1112 + #APP + #NO_APP + i32.load16_u $push59=, 28($10) + i32.load16_u $push61=, 0($6) + i32.const $push1276=, 31 + i32.and $push462=, $pop61, $pop1276 + i32.ne $push463=, $pop59, $pop462 + br_if 1, $pop463 # 1: down to label0 +# BB#32: # %lor.lhs.false289 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push58=, 26($10) + i32.const $push1278=, 65535 + i32.and $push465=, $pop58, $pop1278 + i32.load16_u $push60=, 0($7) + i32.const $push1277=, 63 + i32.and $push464=, $pop60, $pop1277 + i32.ne $push466=, $pop465, $pop464 + br_if 1, $pop466 # 1: down to label0 +# BB#33: # %if.end299 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1113=, 16 + i32.add $push1114=, $10, $pop1113 + copy_local $9=, $pop1114 + #APP + #NO_APP + i32.const $push1115=, 16 + i32.add $push1116=, $10, $pop1115 + call uq33333333@FUNCTION, $pop1116, $1 + i32.load16_u $push62=, 16($10) + i32.load16_u $push64=, 0($1) + i32.const $push1279=, 3 + i32.div_u $push467=, $pop64, $pop1279 + i32.ne $push468=, $pop62, $pop467 + br_if 1, $pop468 # 1: down to label0 +# BB#34: # %lor.lhs.false309 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push63=, 22($10) + i32.const $push1282=, 65535 + i32.and $push469=, $pop63, $pop1282 + i32.load16_u $push65=, 0($8) + i32.const $push1281=, 65535 + i32.and $push470=, $pop65, $pop1281 + i32.const $push1280=, 3 + i32.div_u $push471=, $pop470, $pop1280 + i32.ne $push472=, $pop469, $pop471 + br_if 1, $pop472 # 1: down to label0 +# BB#35: # %if.end319 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1117=, 16 + i32.add $push1118=, $10, $pop1117 + copy_local $9=, $pop1118 + #APP + #NO_APP + i32.load16_u $push67=, 20($10) + i32.load16_u $push69=, 0($2) + i32.const $push1283=, 3 + i32.div_u $push473=, $pop69, $pop1283 + i32.ne $push474=, $pop67, $pop473 + br_if 1, $pop474 # 1: down to label0 +# BB#36: # %lor.lhs.false328 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push66=, 18($10) + i32.const $push1286=, 65535 + i32.and $push475=, $pop66, $pop1286 + i32.load16_u $push68=, 0($3) + i32.const $push1285=, 65535 + i32.and $push476=, $pop68, $pop1285 + i32.const $push1284=, 3 + i32.div_u $push477=, $pop476, $pop1284 + i32.ne $push478=, $pop475, $pop477 + br_if 1, $pop478 # 1: down to label0 +# BB#37: # %if.end338 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1119=, 16 + i32.add $push1120=, $10, $pop1119 + copy_local $9=, $pop1120 + #APP + #NO_APP + i32.load16_u $push70=, 24($10) + i32.load16_u $push72=, 0($4) + i32.const $push1287=, 3 + i32.div_u $push479=, $pop72, $pop1287 + i32.ne $push480=, $pop70, $pop479 + br_if 1, $pop480 # 1: down to label0 +# BB#38: # %lor.lhs.false347 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push71=, 30($10) + i32.const $push1290=, 65535 + i32.and $push481=, $pop71, $pop1290 + i32.load16_u $push73=, 0($5) + i32.const $push1289=, 65535 + i32.and $push482=, $pop73, $pop1289 + i32.const $push1288=, 3 + i32.div_u $push483=, $pop482, $pop1288 + i32.ne $push484=, $pop481, $pop483 + br_if 1, $pop484 # 1: down to label0 +# BB#39: # %if.end357 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1121=, 16 + i32.add $push1122=, $10, $pop1121 + copy_local $9=, $pop1122 + #APP + #NO_APP + i32.load16_u $push75=, 28($10) + i32.load16_u $push77=, 0($6) + i32.const $push1291=, 3 + i32.div_u $push485=, $pop77, $pop1291 + i32.ne $push486=, $pop75, $pop485 + br_if 1, $pop486 # 1: down to label0 +# BB#40: # %lor.lhs.false366 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push74=, 26($10) + i32.const $push1294=, 65535 + i32.and $push487=, $pop74, $pop1294 + i32.load16_u $push76=, 0($7) + i32.const $push1293=, 65535 + i32.and $push488=, $pop76, $pop1293 + i32.const $push1292=, 3 + i32.div_u $push489=, $pop488, $pop1292 + i32.ne $push490=, $pop487, $pop489 + br_if 1, $pop490 # 1: down to label0 +# BB#41: # %if.end376 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1123=, 16 + i32.add $push1124=, $10, $pop1123 + copy_local $9=, $pop1124 + #APP + #NO_APP + i32.const $push1125=, 16 + i32.add $push1126=, $10, $pop1125 + call ur33333333@FUNCTION, $pop1126, $1 + i32.load16_u $push78=, 16($10) + i32.load16_u $push80=, 0($1) + i32.const $push1295=, 3 + i32.rem_u $push491=, $pop80, $pop1295 + i32.ne $push492=, $pop78, $pop491 + br_if 1, $pop492 # 1: down to label0 +# BB#42: # %lor.lhs.false386 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push79=, 22($10) + i32.const $push1298=, 65535 + i32.and $push493=, $pop79, $pop1298 + i32.load16_u $push81=, 0($8) + i32.const $push1297=, 65535 + i32.and $push494=, $pop81, $pop1297 + i32.const $push1296=, 3 + i32.rem_u $push495=, $pop494, $pop1296 + i32.ne $push496=, $pop493, $pop495 + br_if 1, $pop496 # 1: down to label0 +# BB#43: # %if.end396 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1127=, 16 + i32.add $push1128=, $10, $pop1127 + copy_local $9=, $pop1128 + #APP + #NO_APP + i32.load16_u $push83=, 20($10) + i32.load16_u $push85=, 0($2) + i32.const $push1299=, 3 + i32.rem_u $push497=, $pop85, $pop1299 + i32.ne $push498=, $pop83, $pop497 + br_if 1, $pop498 # 1: down to label0 +# BB#44: # %lor.lhs.false405 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push82=, 18($10) + i32.const $push1302=, 65535 + i32.and $push499=, $pop82, $pop1302 + i32.load16_u $push84=, 0($3) + i32.const $push1301=, 65535 + i32.and $push500=, $pop84, $pop1301 + i32.const $push1300=, 3 + i32.rem_u $push501=, $pop500, $pop1300 + i32.ne $push502=, $pop499, $pop501 + br_if 1, $pop502 # 1: down to label0 +# BB#45: # %if.end415 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1129=, 16 + i32.add $push1130=, $10, $pop1129 + copy_local $9=, $pop1130 + #APP + #NO_APP + i32.load16_u $push86=, 24($10) + i32.load16_u $push88=, 0($4) + i32.const $push1303=, 3 + i32.rem_u $push503=, $pop88, $pop1303 + i32.ne $push504=, $pop86, $pop503 + br_if 1, $pop504 # 1: down to label0 +# BB#46: # %lor.lhs.false424 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push87=, 30($10) + i32.const $push1306=, 65535 + i32.and $push505=, $pop87, $pop1306 + i32.load16_u $push89=, 0($5) + i32.const $push1305=, 65535 + i32.and $push506=, $pop89, $pop1305 + i32.const $push1304=, 3 + i32.rem_u $push507=, $pop506, $pop1304 + i32.ne $push508=, $pop505, $pop507 + br_if 1, $pop508 # 1: down to label0 +# BB#47: # %if.end434 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1131=, 16 + i32.add $push1132=, $10, $pop1131 + copy_local $9=, $pop1132 + #APP + #NO_APP + i32.load16_u $push91=, 28($10) + i32.load16_u $push93=, 0($6) + i32.const $push1307=, 3 + i32.rem_u $push509=, $pop93, $pop1307 + i32.ne $push510=, $pop91, $pop509 + br_if 1, $pop510 # 1: down to label0 +# BB#48: # %lor.lhs.false443 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push90=, 26($10) + i32.const $push1310=, 65535 + i32.and $push511=, $pop90, $pop1310 + i32.load16_u $push92=, 0($7) + i32.const $push1309=, 65535 + i32.and $push512=, $pop92, $pop1309 + i32.const $push1308=, 3 + i32.rem_u $push513=, $pop512, $pop1308 + i32.ne $push514=, $pop511, $pop513 + br_if 1, $pop514 # 1: down to label0 +# BB#49: # %if.end453 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1133=, 16 + i32.add $push1134=, $10, $pop1133 + copy_local $9=, $pop1134 + #APP + #NO_APP + i32.const $push1135=, 16 + i32.add $push1136=, $10, $pop1135 + call uq65656565@FUNCTION, $pop1136, $1 + i32.load16_u $push94=, 16($10) + i32.load16_u $push96=, 0($1) + i32.const $push1311=, 6 + i32.div_u $push515=, $pop96, $pop1311 + i32.ne $push516=, $pop94, $pop515 + br_if 1, $pop516 # 1: down to label0 +# BB#50: # %lor.lhs.false463 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push95=, 22($10) + i32.const $push1314=, 65535 + i32.and $push517=, $pop95, $pop1314 + i32.load16_u $push97=, 0($8) + i32.const $push1313=, 65535 + i32.and $push518=, $pop97, $pop1313 + i32.const $push1312=, 5 + i32.div_u $push519=, $pop518, $pop1312 + i32.ne $push520=, $pop517, $pop519 + br_if 1, $pop520 # 1: down to label0 +# BB#51: # %if.end473 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1137=, 16 + i32.add $push1138=, $10, $pop1137 + copy_local $9=, $pop1138 + #APP + #NO_APP + i32.load16_u $push99=, 20($10) + i32.load16_u $push101=, 0($2) + i32.const $push1315=, 6 + i32.div_u $push521=, $pop101, $pop1315 + i32.ne $push522=, $pop99, $pop521 + br_if 1, $pop522 # 1: down to label0 +# BB#52: # %lor.lhs.false482 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push98=, 18($10) + i32.const $push1318=, 65535 + i32.and $push523=, $pop98, $pop1318 + i32.load16_u $push100=, 0($3) + i32.const $push1317=, 65535 + i32.and $push524=, $pop100, $pop1317 + i32.const $push1316=, 5 + i32.div_u $push525=, $pop524, $pop1316 + i32.ne $push526=, $pop523, $pop525 + br_if 1, $pop526 # 1: down to label0 +# BB#53: # %if.end492 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1139=, 16 + i32.add $push1140=, $10, $pop1139 + copy_local $9=, $pop1140 + #APP + #NO_APP + i32.load16_u $push102=, 24($10) + i32.load16_u $push104=, 0($4) + i32.const $push1319=, 6 + i32.div_u $push527=, $pop104, $pop1319 + i32.ne $push528=, $pop102, $pop527 + br_if 1, $pop528 # 1: down to label0 +# BB#54: # %lor.lhs.false501 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push103=, 30($10) + i32.const $push1322=, 65535 + i32.and $push529=, $pop103, $pop1322 + i32.load16_u $push105=, 0($5) + i32.const $push1321=, 65535 + i32.and $push530=, $pop105, $pop1321 + i32.const $push1320=, 5 + i32.div_u $push531=, $pop530, $pop1320 + i32.ne $push532=, $pop529, $pop531 + br_if 1, $pop532 # 1: down to label0 +# BB#55: # %if.end511 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1141=, 16 + i32.add $push1142=, $10, $pop1141 + copy_local $9=, $pop1142 + #APP + #NO_APP + i32.load16_u $push107=, 28($10) + i32.load16_u $push109=, 0($6) + i32.const $push1323=, 6 + i32.div_u $push533=, $pop109, $pop1323 + i32.ne $push534=, $pop107, $pop533 + br_if 1, $pop534 # 1: down to label0 +# BB#56: # %lor.lhs.false520 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push106=, 26($10) + i32.const $push1326=, 65535 + i32.and $push535=, $pop106, $pop1326 + i32.load16_u $push108=, 0($7) + i32.const $push1325=, 65535 + i32.and $push536=, $pop108, $pop1325 + i32.const $push1324=, 5 + i32.div_u $push537=, $pop536, $pop1324 + i32.ne $push538=, $pop535, $pop537 + br_if 1, $pop538 # 1: down to label0 +# BB#57: # %if.end530 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1143=, 16 + i32.add $push1144=, $10, $pop1143 + copy_local $9=, $pop1144 + #APP + #NO_APP + i32.const $push1145=, 16 + i32.add $push1146=, $10, $pop1145 + call ur65656565@FUNCTION, $pop1146, $1 + i32.load16_u $push110=, 16($10) + i32.load16_u $push112=, 0($1) + i32.const $push1327=, 6 + i32.rem_u $push539=, $pop112, $pop1327 + i32.ne $push540=, $pop110, $pop539 + br_if 1, $pop540 # 1: down to label0 +# BB#58: # %lor.lhs.false540 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push111=, 22($10) + i32.const $push1330=, 65535 + i32.and $push541=, $pop111, $pop1330 + i32.load16_u $push113=, 0($8) + i32.const $push1329=, 65535 + i32.and $push542=, $pop113, $pop1329 + i32.const $push1328=, 5 + i32.rem_u $push543=, $pop542, $pop1328 + i32.ne $push544=, $pop541, $pop543 + br_if 1, $pop544 # 1: down to label0 +# BB#59: # %if.end550 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1147=, 16 + i32.add $push1148=, $10, $pop1147 + copy_local $9=, $pop1148 + #APP + #NO_APP + i32.load16_u $push115=, 20($10) + i32.load16_u $push117=, 0($2) + i32.const $push1331=, 6 + i32.rem_u $push545=, $pop117, $pop1331 + i32.ne $push546=, $pop115, $pop545 + br_if 1, $pop546 # 1: down to label0 +# BB#60: # %lor.lhs.false559 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push114=, 18($10) + i32.const $push1334=, 65535 + i32.and $push547=, $pop114, $pop1334 + i32.load16_u $push116=, 0($3) + i32.const $push1333=, 65535 + i32.and $push548=, $pop116, $pop1333 + i32.const $push1332=, 5 + i32.rem_u $push549=, $pop548, $pop1332 + i32.ne $push550=, $pop547, $pop549 + br_if 1, $pop550 # 1: down to label0 +# BB#61: # %if.end569 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1149=, 16 + i32.add $push1150=, $10, $pop1149 + copy_local $9=, $pop1150 + #APP + #NO_APP + i32.load16_u $push118=, 24($10) + i32.load16_u $push120=, 0($4) + i32.const $push1335=, 6 + i32.rem_u $push551=, $pop120, $pop1335 + i32.ne $push552=, $pop118, $pop551 + br_if 1, $pop552 # 1: down to label0 +# BB#62: # %lor.lhs.false578 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push119=, 30($10) + i32.const $push1338=, 65535 + i32.and $push553=, $pop119, $pop1338 + i32.load16_u $push121=, 0($5) + i32.const $push1337=, 65535 + i32.and $push554=, $pop121, $pop1337 + i32.const $push1336=, 5 + i32.rem_u $push555=, $pop554, $pop1336 + i32.ne $push556=, $pop553, $pop555 + br_if 1, $pop556 # 1: down to label0 +# BB#63: # %if.end588 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1151=, 16 + i32.add $push1152=, $10, $pop1151 + copy_local $9=, $pop1152 + #APP + #NO_APP + i32.load16_u $push123=, 28($10) + i32.load16_u $push125=, 0($6) + i32.const $push1339=, 6 + i32.rem_u $push557=, $pop125, $pop1339 + i32.ne $push558=, $pop123, $pop557 + br_if 1, $pop558 # 1: down to label0 +# BB#64: # %lor.lhs.false597 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push122=, 26($10) + i32.const $push1342=, 65535 + i32.and $push559=, $pop122, $pop1342 + i32.load16_u $push124=, 0($7) + i32.const $push1341=, 65535 + i32.and $push560=, $pop124, $pop1341 + i32.const $push1340=, 5 + i32.rem_u $push561=, $pop560, $pop1340 + i32.ne $push562=, $pop559, $pop561 + br_if 1, $pop562 # 1: down to label0 +# BB#65: # %if.end607 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1153=, 16 + i32.add $push1154=, $10, $pop1153 + copy_local $9=, $pop1154 + #APP + #NO_APP + i32.const $push1155=, 16 + i32.add $push1156=, $10, $pop1155 + call uq14141461461414@FUNCTION, $pop1156, $1 + i32.load16_u $push126=, 16($10) + i32.load16_u $push128=, 0($1) + i32.const $push1343=, 14 + i32.div_u $push563=, $pop128, $pop1343 + i32.ne $push564=, $pop126, $pop563 + br_if 1, $pop564 # 1: down to label0 +# BB#66: # %lor.lhs.false617 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push127=, 22($10) + i32.const $push1346=, 65535 + i32.and $push565=, $pop127, $pop1346 + i32.load16_u $push129=, 0($8) + i32.const $push1345=, 65535 + i32.and $push566=, $pop129, $pop1345 + i32.const $push1344=, 6 + i32.div_u $push567=, $pop566, $pop1344 + i32.ne $push568=, $pop565, $pop567 + br_if 1, $pop568 # 1: down to label0 +# BB#67: # %if.end627 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1157=, 16 + i32.add $push1158=, $10, $pop1157 + copy_local $9=, $pop1158 + #APP + #NO_APP + i32.load16_u $push131=, 20($10) + i32.load16_u $push133=, 0($2) + i32.const $push1347=, 14 + i32.div_u $push569=, $pop133, $pop1347 + i32.ne $push570=, $pop131, $pop569 + br_if 1, $pop570 # 1: down to label0 +# BB#68: # %lor.lhs.false636 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push130=, 18($10) + i32.const $push1350=, 65535 + i32.and $push571=, $pop130, $pop1350 + i32.load16_u $push132=, 0($3) + i32.const $push1349=, 65535 + i32.and $push572=, $pop132, $pop1349 + i32.const $push1348=, 14 + i32.div_u $push573=, $pop572, $pop1348 + i32.ne $push574=, $pop571, $pop573 + br_if 1, $pop574 # 1: down to label0 +# BB#69: # %if.end646 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1159=, 16 + i32.add $push1160=, $10, $pop1159 + copy_local $9=, $pop1160 + #APP + #NO_APP + i32.load16_u $push134=, 24($10) + i32.load16_u $push136=, 0($4) + i32.const $push1351=, 14 + i32.div_u $push575=, $pop136, $pop1351 + i32.ne $push576=, $pop134, $pop575 + br_if 1, $pop576 # 1: down to label0 +# BB#70: # %lor.lhs.false655 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push135=, 30($10) + i32.const $push1354=, 65535 + i32.and $push577=, $pop135, $pop1354 + i32.load16_u $push137=, 0($5) + i32.const $push1353=, 65535 + i32.and $push578=, $pop137, $pop1353 + i32.const $push1352=, 14 + i32.div_u $push579=, $pop578, $pop1352 + i32.ne $push580=, $pop577, $pop579 + br_if 1, $pop580 # 1: down to label0 +# BB#71: # %if.end665 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1161=, 16 + i32.add $push1162=, $10, $pop1161 + copy_local $9=, $pop1162 + #APP + #NO_APP + i32.load16_u $push139=, 28($10) + i32.load16_u $push141=, 0($6) + i32.const $push1355=, 14 + i32.div_u $push581=, $pop141, $pop1355 + i32.ne $push582=, $pop139, $pop581 + br_if 1, $pop582 # 1: down to label0 +# BB#72: # %lor.lhs.false674 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push138=, 26($10) + i32.const $push1358=, 65535 + i32.and $push583=, $pop138, $pop1358 + i32.load16_u $push140=, 0($7) + i32.const $push1357=, 65535 + i32.and $push584=, $pop140, $pop1357 + i32.const $push1356=, 6 + i32.div_u $push585=, $pop584, $pop1356 + i32.ne $push586=, $pop583, $pop585 + br_if 1, $pop586 # 1: down to label0 +# BB#73: # %if.end684 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1163=, 16 + i32.add $push1164=, $10, $pop1163 + copy_local $9=, $pop1164 + #APP + #NO_APP + i32.const $push1165=, 16 + i32.add $push1166=, $10, $pop1165 + call ur14141461461414@FUNCTION, $pop1166, $1 + i32.load16_u $push142=, 16($10) + i32.load16_u $push144=, 0($1) + i32.const $push1359=, 14 + i32.rem_u $push587=, $pop144, $pop1359 + i32.ne $push588=, $pop142, $pop587 + br_if 1, $pop588 # 1: down to label0 +# BB#74: # %lor.lhs.false694 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push143=, 22($10) + i32.const $push1362=, 65535 + i32.and $push589=, $pop143, $pop1362 + i32.load16_u $push145=, 0($8) + i32.const $push1361=, 65535 + i32.and $push590=, $pop145, $pop1361 + i32.const $push1360=, 6 + i32.rem_u $push591=, $pop590, $pop1360 + i32.ne $push592=, $pop589, $pop591 + br_if 1, $pop592 # 1: down to label0 +# BB#75: # %if.end704 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1167=, 16 + i32.add $push1168=, $10, $pop1167 + copy_local $9=, $pop1168 + #APP + #NO_APP + i32.load16_u $push147=, 20($10) + i32.load16_u $push149=, 0($2) + i32.const $push1363=, 14 + i32.rem_u $push593=, $pop149, $pop1363 + i32.ne $push594=, $pop147, $pop593 + br_if 1, $pop594 # 1: down to label0 +# BB#76: # %lor.lhs.false713 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push146=, 18($10) + i32.const $push1366=, 65535 + i32.and $push595=, $pop146, $pop1366 + i32.load16_u $push148=, 0($3) + i32.const $push1365=, 65535 + i32.and $push596=, $pop148, $pop1365 + i32.const $push1364=, 14 + i32.rem_u $push597=, $pop596, $pop1364 + i32.ne $push598=, $pop595, $pop597 + br_if 1, $pop598 # 1: down to label0 +# BB#77: # %if.end723 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1169=, 16 + i32.add $push1170=, $10, $pop1169 + copy_local $9=, $pop1170 + #APP + #NO_APP + i32.load16_u $push150=, 24($10) + i32.load16_u $push152=, 0($4) + i32.const $push1367=, 14 + i32.rem_u $push599=, $pop152, $pop1367 + i32.ne $push600=, $pop150, $pop599 + br_if 1, $pop600 # 1: down to label0 +# BB#78: # %lor.lhs.false732 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push151=, 30($10) + i32.const $push1370=, 65535 + i32.and $push601=, $pop151, $pop1370 + i32.load16_u $push153=, 0($5) + i32.const $push1369=, 65535 + i32.and $push602=, $pop153, $pop1369 + i32.const $push1368=, 14 + i32.rem_u $push603=, $pop602, $pop1368 + i32.ne $push604=, $pop601, $pop603 + br_if 1, $pop604 # 1: down to label0 +# BB#79: # %if.end742 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1171=, 16 + i32.add $push1172=, $10, $pop1171 + copy_local $9=, $pop1172 + #APP + #NO_APP + i32.load16_u $push155=, 28($10) + i32.load16_u $push157=, 0($6) + i32.const $push1371=, 14 + i32.rem_u $push605=, $pop157, $pop1371 + i32.ne $push606=, $pop155, $pop605 + br_if 1, $pop606 # 1: down to label0 +# BB#80: # %lor.lhs.false751 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push154=, 26($10) + i32.const $push1374=, 65535 + i32.and $push607=, $pop154, $pop1374 + i32.load16_u $push156=, 0($7) + i32.const $push1373=, 65535 + i32.and $push608=, $pop156, $pop1373 + i32.const $push1372=, 6 + i32.rem_u $push609=, $pop608, $pop1372 + i32.ne $push610=, $pop607, $pop609 + br_if 1, $pop610 # 1: down to label0 +# BB#81: # %if.end761 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1173=, 16 + i32.add $push1174=, $10, $pop1173 + copy_local $9=, $pop1174 + #APP + #NO_APP + i32.const $push1175=, 16 + i32.add $push1176=, $10, $pop1175 + call uq77777777@FUNCTION, $pop1176, $1 + i32.load16_u $push158=, 16($10) + i32.load16_u $push160=, 0($1) + i32.const $push1375=, 7 + i32.div_u $push611=, $pop160, $pop1375 + i32.ne $push612=, $pop158, $pop611 + br_if 1, $pop612 # 1: down to label0 +# BB#82: # %lor.lhs.false771 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push159=, 22($10) + i32.const $push1378=, 65535 + i32.and $push613=, $pop159, $pop1378 + i32.load16_u $push161=, 0($8) + i32.const $push1377=, 65535 + i32.and $push614=, $pop161, $pop1377 + i32.const $push1376=, 7 + i32.div_u $push615=, $pop614, $pop1376 + i32.ne $push616=, $pop613, $pop615 + br_if 1, $pop616 # 1: down to label0 +# BB#83: # %if.end781 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1177=, 16 + i32.add $push1178=, $10, $pop1177 + copy_local $9=, $pop1178 + #APP + #NO_APP + i32.load16_u $push163=, 20($10) + i32.load16_u $push165=, 0($2) + i32.const $push1379=, 7 + i32.div_u $push617=, $pop165, $pop1379 + i32.ne $push618=, $pop163, $pop617 + br_if 1, $pop618 # 1: down to label0 +# BB#84: # %lor.lhs.false790 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push162=, 18($10) + i32.const $push1382=, 65535 + i32.and $push619=, $pop162, $pop1382 + i32.load16_u $push164=, 0($3) + i32.const $push1381=, 65535 + i32.and $push620=, $pop164, $pop1381 + i32.const $push1380=, 7 + i32.div_u $push621=, $pop620, $pop1380 + i32.ne $push622=, $pop619, $pop621 + br_if 1, $pop622 # 1: down to label0 +# BB#85: # %if.end800 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1179=, 16 + i32.add $push1180=, $10, $pop1179 + copy_local $9=, $pop1180 + #APP + #NO_APP + i32.load16_u $push166=, 24($10) + i32.load16_u $push168=, 0($4) + i32.const $push1383=, 7 + i32.div_u $push623=, $pop168, $pop1383 + i32.ne $push624=, $pop166, $pop623 + br_if 1, $pop624 # 1: down to label0 +# BB#86: # %lor.lhs.false809 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push167=, 30($10) + i32.const $push1386=, 65535 + i32.and $push625=, $pop167, $pop1386 + i32.load16_u $push169=, 0($5) + i32.const $push1385=, 65535 + i32.and $push626=, $pop169, $pop1385 + i32.const $push1384=, 7 + i32.div_u $push627=, $pop626, $pop1384 + i32.ne $push628=, $pop625, $pop627 + br_if 1, $pop628 # 1: down to label0 +# BB#87: # %if.end819 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1181=, 16 + i32.add $push1182=, $10, $pop1181 + copy_local $9=, $pop1182 + #APP + #NO_APP + i32.load16_u $push171=, 28($10) + i32.load16_u $push173=, 0($6) + i32.const $push1387=, 7 + i32.div_u $push629=, $pop173, $pop1387 + i32.ne $push630=, $pop171, $pop629 + br_if 1, $pop630 # 1: down to label0 +# BB#88: # %lor.lhs.false828 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push170=, 26($10) + i32.const $push1390=, 65535 + i32.and $push631=, $pop170, $pop1390 + i32.load16_u $push172=, 0($7) + i32.const $push1389=, 65535 + i32.and $push632=, $pop172, $pop1389 + i32.const $push1388=, 7 + i32.div_u $push633=, $pop632, $pop1388 + i32.ne $push634=, $pop631, $pop633 + br_if 1, $pop634 # 1: down to label0 +# BB#89: # %if.end838 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1183=, 16 + i32.add $push1184=, $10, $pop1183 + copy_local $9=, $pop1184 + #APP + #NO_APP + i32.const $push1185=, 16 + i32.add $push1186=, $10, $pop1185 + call ur77777777@FUNCTION, $pop1186, $1 + i32.load16_u $push174=, 16($10) + i32.load16_u $push176=, 0($1) + i32.const $push1391=, 7 + i32.rem_u $push635=, $pop176, $pop1391 + i32.ne $push636=, $pop174, $pop635 + br_if 1, $pop636 # 1: down to label0 +# BB#90: # %lor.lhs.false848 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push175=, 22($10) + i32.const $push1394=, 65535 + i32.and $push637=, $pop175, $pop1394 + i32.load16_u $push177=, 0($8) + i32.const $push1393=, 65535 + i32.and $push638=, $pop177, $pop1393 + i32.const $push1392=, 7 + i32.rem_u $push639=, $pop638, $pop1392 + i32.ne $push640=, $pop637, $pop639 + br_if 1, $pop640 # 1: down to label0 +# BB#91: # %if.end858 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1187=, 16 + i32.add $push1188=, $10, $pop1187 + copy_local $1=, $pop1188 + #APP + #NO_APP + i32.load16_u $push179=, 20($10) + i32.load16_u $push181=, 0($2) + i32.const $push1395=, 7 + i32.rem_u $push641=, $pop181, $pop1395 + i32.ne $push642=, $pop179, $pop641 + br_if 1, $pop642 # 1: down to label0 +# BB#92: # %lor.lhs.false867 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push178=, 18($10) + i32.const $push1398=, 65535 + i32.and $push643=, $pop178, $pop1398 + i32.load16_u $push180=, 0($3) + i32.const $push1397=, 65535 + i32.and $push644=, $pop180, $pop1397 + i32.const $push1396=, 7 + i32.rem_u $push645=, $pop644, $pop1396 + i32.ne $push646=, $pop643, $pop645 + br_if 1, $pop646 # 1: down to label0 +# BB#93: # %if.end877 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1189=, 16 + i32.add $push1190=, $10, $pop1189 + copy_local $1=, $pop1190 + #APP + #NO_APP + i32.load16_u $push182=, 24($10) + i32.load16_u $push184=, 0($4) + i32.const $push1399=, 7 + i32.rem_u $push647=, $pop184, $pop1399 + i32.ne $push648=, $pop182, $pop647 + br_if 1, $pop648 # 1: down to label0 +# BB#94: # %lor.lhs.false886 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push183=, 30($10) + i32.const $push1402=, 65535 + i32.and $push649=, $pop183, $pop1402 + i32.load16_u $push185=, 0($5) + i32.const $push1401=, 65535 + i32.and $push650=, $pop185, $pop1401 + i32.const $push1400=, 7 + i32.rem_u $push651=, $pop650, $pop1400 + i32.ne $push652=, $pop649, $pop651 + br_if 1, $pop652 # 1: down to label0 +# BB#95: # %if.end896 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1191=, 16 + i32.add $push1192=, $10, $pop1191 + copy_local $1=, $pop1192 + #APP + #NO_APP + i32.load16_u $push187=, 28($10) + i32.load16_u $push189=, 0($6) + i32.const $push1403=, 7 + i32.rem_u $push653=, $pop189, $pop1403 + i32.ne $push654=, $pop187, $pop653 + br_if 1, $pop654 # 1: down to label0 +# BB#96: # %lor.lhs.false905 + # in Loop: Header=BB24_1 Depth=1 + i32.load16_u $push186=, 26($10) + i32.const $push1406=, 65535 + i32.and $push655=, $pop186, $pop1406 + i32.load16_u $push188=, 0($7) + i32.const $push1405=, 65535 + i32.and $push656=, $pop188, $pop1405 + i32.const $push1404=, 7 + i32.rem_u $push657=, $pop656, $pop1404 + i32.ne $push658=, $pop655, $pop657 + br_if 1, $pop658 # 1: down to label0 +# BB#97: # %if.end915 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push1193=, 16 + i32.add $push1194=, $10, $pop1193 + copy_local $1=, $pop1194 + #APP + #NO_APP + i32.const $push659=, 1 + i32.add $1=, $0, $pop659 + i32.const $0=, 1 + i32.const $push1407=, 2 + i32.lt_u $push660=, $1, $pop1407 + br_if 0, $pop660 # 0: up to label1 +# BB#98: # %for.body919.preheader + end_loop + i32.const $0=, 0 +.LBB24_99: # %for.body919 + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push1415=, 4 + i32.shl $push1414=, $0, $pop1415 + tee_local $push1413=, $2=, $pop1414 + i32.const $push1412=, s + i32.add $push1411=, $pop1413, $pop1412 + tee_local $push1410=, $1=, $pop1411 + call sq44444444@FUNCTION, $10, $pop1410 + i32.load16_u $push190=, 0($10) + i32.load16_s $push192=, 0($1) + i32.const $push1409=, 4 + i32.div_s $push661=, $pop192, $pop1409 + i32.const $push1408=, 65535 + i32.and $push662=, $pop661, $pop1408 + i32.ne $push663=, $pop190, $pop662 + br_if 1, $pop663 # 1: down to label0 +# BB#100: # %lor.lhs.false929 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push191=, 6($10) + i32.const $push1421=, 65535 + i32.and $push665=, $pop191, $pop1421 + i32.const $push1420=, s+6 + i32.add $push664=, $2, $pop1420 + i32.load16_u $push193=, 0($pop664) + i32.const $push1419=, 16 + i32.shl $push666=, $pop193, $pop1419 + i32.const $push1418=, 16 + i32.shr_s $push667=, $pop666, $pop1418 + i32.const $push1417=, 4 + i32.div_s $push668=, $pop667, $pop1417 + i32.const $push1416=, 65535 + i32.and $push669=, $pop668, $pop1416 + i32.ne $push670=, $pop665, $pop669 + br_if 1, $pop670 # 1: down to label0 +# BB#101: # %if.end939 + # in Loop: Header=BB24_99 Depth=1 + copy_local $2=, $10 + #APP + #NO_APP + i32.load16_u $push195=, 4($10) + i32.const $push1426=, 4 + i32.add $push1425=, $1, $pop1426 + tee_local $push1424=, $2=, $pop1425 + i32.load16_s $push197=, 0($pop1424) + i32.const $push1423=, 4 + i32.div_s $push671=, $pop197, $pop1423 + i32.const $push1422=, 65535 + i32.and $push672=, $pop671, $pop1422 + i32.ne $push673=, $pop195, $pop672 + br_if 1, $pop673 # 1: down to label0 +# BB#102: # %lor.lhs.false948 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push194=, 2($10) + i32.const $push1434=, 65535 + i32.and $push674=, $pop194, $pop1434 + i32.const $push1433=, 2 + i32.add $push1432=, $1, $pop1433 + tee_local $push1431=, $3=, $pop1432 + i32.load16_u $push196=, 0($pop1431) + i32.const $push1430=, 16 + i32.shl $push675=, $pop196, $pop1430 + i32.const $push1429=, 16 + i32.shr_s $push676=, $pop675, $pop1429 + i32.const $push1428=, 4 + i32.div_s $push677=, $pop676, $pop1428 + i32.const $push1427=, 65535 + i32.and $push678=, $pop677, $pop1427 + i32.ne $push679=, $pop674, $pop678 + br_if 1, $pop679 # 1: down to label0 +# BB#103: # %if.end958 + # in Loop: Header=BB24_99 Depth=1 + copy_local $4=, $10 + #APP + #NO_APP + i32.load16_u $push198=, 8($10) + i32.const $push1439=, 8 + i32.add $push1438=, $1, $pop1439 + tee_local $push1437=, $4=, $pop1438 + i32.load16_s $push200=, 0($pop1437) + i32.const $push1436=, 4 + i32.div_s $push680=, $pop200, $pop1436 + i32.const $push1435=, 65535 + i32.and $push681=, $pop680, $pop1435 + i32.ne $push682=, $pop198, $pop681 + br_if 1, $pop682 # 1: down to label0 +# BB#104: # %lor.lhs.false967 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push199=, 14($10) + i32.const $push1447=, 65535 + i32.and $push683=, $pop199, $pop1447 + i32.const $push1446=, 14 + i32.add $push1445=, $1, $pop1446 + tee_local $push1444=, $5=, $pop1445 + i32.load16_u $push201=, 0($pop1444) + i32.const $push1443=, 16 + i32.shl $push684=, $pop201, $pop1443 + i32.const $push1442=, 16 + i32.shr_s $push685=, $pop684, $pop1442 + i32.const $push1441=, 4 + i32.div_s $push686=, $pop685, $pop1441 + i32.const $push1440=, 65535 + i32.and $push687=, $pop686, $pop1440 + i32.ne $push688=, $pop683, $pop687 + br_if 1, $pop688 # 1: down to label0 +# BB#105: # %if.end977 + # in Loop: Header=BB24_99 Depth=1 + copy_local $6=, $10 + #APP + #NO_APP + i32.load16_u $push203=, 12($10) + i32.const $push1452=, 12 + i32.add $push1451=, $1, $pop1452 + tee_local $push1450=, $6=, $pop1451 + i32.load16_s $push205=, 0($pop1450) + i32.const $push1449=, 4 + i32.div_s $push689=, $pop205, $pop1449 + i32.const $push1448=, 65535 + i32.and $push690=, $pop689, $pop1448 + i32.ne $push691=, $pop203, $pop690 + br_if 1, $pop691 # 1: down to label0 +# BB#106: # %lor.lhs.false986 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push202=, 10($10) + i32.const $push1460=, 65535 + i32.and $push692=, $pop202, $pop1460 + i32.const $push1459=, 10 + i32.add $push1458=, $1, $pop1459 + tee_local $push1457=, $7=, $pop1458 + i32.load16_u $push204=, 0($pop1457) + i32.const $push1456=, 16 + i32.shl $push693=, $pop204, $pop1456 + i32.const $push1455=, 16 + i32.shr_s $push694=, $pop693, $pop1455 + i32.const $push1454=, 4 + i32.div_s $push695=, $pop694, $pop1454 + i32.const $push1453=, 65535 + i32.and $push696=, $pop695, $pop1453 + i32.ne $push697=, $pop692, $pop696 + br_if 1, $pop697 # 1: down to label0 +# BB#107: # %if.end996 + # in Loop: Header=BB24_99 Depth=1 + copy_local $8=, $10 + #APP + #NO_APP + call sr44444444@FUNCTION, $10, $1 + i32.load16_s $push208=, 0($1) + i32.const $push1461=, 4 + i32.rem_s $push698=, $pop208, $pop1461 + i32.load16_s $push206=, 0($10) + i32.ne $push699=, $pop698, $pop206 + br_if 1, $pop699 # 1: down to label0 +# BB#108: # %lor.lhs.false1006 + # in Loop: Header=BB24_99 Depth=1 + i32.const $push1469=, 6 + i32.add $push1468=, $1, $pop1469 + tee_local $push1467=, $8=, $pop1468 + i32.load16_u $push209=, 0($pop1467) + i32.const $push1466=, 16 + i32.shl $push702=, $pop209, $pop1466 + i32.const $push1465=, 16 + i32.shr_s $push703=, $pop702, $pop1465 + i32.const $push1464=, 4 + i32.rem_s $push704=, $pop703, $pop1464 + i32.load16_u $push207=, 6($10) + i32.const $push1463=, 16 + i32.shl $push700=, $pop207, $pop1463 + i32.const $push1462=, 16 + i32.shr_s $push701=, $pop700, $pop1462 + i32.ne $push705=, $pop704, $pop701 + br_if 1, $pop705 # 1: down to label0 +# BB#109: # %if.end1016 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_s $push213=, 0($2) + i32.const $push1470=, 4 + i32.rem_s $push706=, $pop213, $pop1470 + i32.load16_s $push211=, 4($10) + i32.ne $push707=, $pop706, $pop211 + br_if 1, $pop707 # 1: down to label0 +# BB#110: # %lor.lhs.false1025 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push212=, 0($3) + i32.const $push1475=, 16 + i32.shl $push710=, $pop212, $pop1475 + i32.const $push1474=, 16 + i32.shr_s $push711=, $pop710, $pop1474 + i32.const $push1473=, 4 + i32.rem_s $push712=, $pop711, $pop1473 + i32.load16_u $push210=, 2($10) + i32.const $push1472=, 16 + i32.shl $push708=, $pop210, $pop1472 + i32.const $push1471=, 16 + i32.shr_s $push709=, $pop708, $pop1471 + i32.ne $push713=, $pop712, $pop709 + br_if 1, $pop713 # 1: down to label0 +# BB#111: # %if.end1035 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_s $push216=, 0($4) + i32.const $push1476=, 4 + i32.rem_s $push714=, $pop216, $pop1476 + i32.load16_s $push214=, 8($10) + i32.ne $push715=, $pop714, $pop214 + br_if 1, $pop715 # 1: down to label0 +# BB#112: # %lor.lhs.false1044 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push217=, 0($5) + i32.const $push1481=, 16 + i32.shl $push718=, $pop217, $pop1481 + i32.const $push1480=, 16 + i32.shr_s $push719=, $pop718, $pop1480 + i32.const $push1479=, 4 + i32.rem_s $push720=, $pop719, $pop1479 + i32.load16_u $push215=, 14($10) + i32.const $push1478=, 16 + i32.shl $push716=, $pop215, $pop1478 + i32.const $push1477=, 16 + i32.shr_s $push717=, $pop716, $pop1477 + i32.ne $push721=, $pop720, $pop717 + br_if 1, $pop721 # 1: down to label0 +# BB#113: # %if.end1054 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_s $push221=, 0($6) + i32.const $push1482=, 4 + i32.rem_s $push722=, $pop221, $pop1482 + i32.load16_s $push219=, 12($10) + i32.ne $push723=, $pop722, $pop219 + br_if 1, $pop723 # 1: down to label0 +# BB#114: # %lor.lhs.false1063 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push220=, 0($7) + i32.const $push1487=, 16 + i32.shl $push726=, $pop220, $pop1487 + i32.const $push1486=, 16 + i32.shr_s $push727=, $pop726, $pop1486 + i32.const $push1485=, 4 + i32.rem_s $push728=, $pop727, $pop1485 + i32.load16_u $push218=, 10($10) + i32.const $push1484=, 16 + i32.shl $push724=, $pop218, $pop1484 + i32.const $push1483=, 16 + i32.shr_s $push725=, $pop724, $pop1483 + i32.ne $push729=, $pop728, $pop725 + br_if 1, $pop729 # 1: down to label0 +# BB#115: # %if.end1073 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + call sq1428166432128@FUNCTION, $10, $1 + i32.load16_u $push222=, 0($10) + i32.load16_u $push224=, 0($1) + i32.ne $push730=, $pop222, $pop224 + br_if 1, $pop730 # 1: down to label0 +# BB#116: # %lor.lhs.false1083 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push223=, 6($10) + i32.const $push1492=, 65535 + i32.and $push731=, $pop223, $pop1492 + i32.load16_u $push225=, 0($8) + i32.const $push1491=, 16 + i32.shl $push732=, $pop225, $pop1491 + i32.const $push1490=, 16 + i32.shr_s $push733=, $pop732, $pop1490 + i32.const $push1489=, 8 + i32.div_s $push734=, $pop733, $pop1489 + i32.const $push1488=, 65535 + i32.and $push735=, $pop734, $pop1488 + i32.ne $push736=, $pop731, $pop735 + br_if 1, $pop736 # 1: down to label0 +# BB#117: # %if.end1093 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_u $push227=, 4($10) + i32.load16_s $push229=, 0($2) + i32.const $push1494=, 2 + i32.div_s $push737=, $pop229, $pop1494 + i32.const $push1493=, 65535 + i32.and $push738=, $pop737, $pop1493 + i32.ne $push739=, $pop227, $pop738 + br_if 1, $pop739 # 1: down to label0 +# BB#118: # %lor.lhs.false1102 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push226=, 2($10) + i32.const $push1499=, 65535 + i32.and $push740=, $pop226, $pop1499 + i32.load16_u $push228=, 0($3) + i32.const $push1498=, 16 + i32.shl $push741=, $pop228, $pop1498 + i32.const $push1497=, 16 + i32.shr_s $push742=, $pop741, $pop1497 + i32.const $push1496=, 4 + i32.div_s $push743=, $pop742, $pop1496 + i32.const $push1495=, 65535 + i32.and $push744=, $pop743, $pop1495 + i32.ne $push745=, $pop740, $pop744 + br_if 1, $pop745 # 1: down to label0 +# BB#119: # %if.end1112 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_u $push230=, 8($10) + i32.load16_s $push232=, 0($4) + i32.const $push1501=, 16 + i32.div_s $push746=, $pop232, $pop1501 + i32.const $push1500=, 65535 + i32.and $push747=, $pop746, $pop1500 + i32.ne $push748=, $pop230, $pop747 + br_if 1, $pop748 # 1: down to label0 +# BB#120: # %lor.lhs.false1121 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push231=, 14($10) + i32.const $push1506=, 65535 + i32.and $push749=, $pop231, $pop1506 + i32.load16_u $push233=, 0($5) + i32.const $push1505=, 16 + i32.shl $push750=, $pop233, $pop1505 + i32.const $push1504=, 16 + i32.shr_s $push751=, $pop750, $pop1504 + i32.const $push1503=, 128 + i32.div_s $push752=, $pop751, $pop1503 + i32.const $push1502=, 65535 + i32.and $push753=, $pop752, $pop1502 + i32.ne $push754=, $pop749, $pop753 + br_if 1, $pop754 # 1: down to label0 +# BB#121: # %if.end1131 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_u $push235=, 12($10) + i32.load16_s $push237=, 0($6) + i32.const $push1508=, 32 + i32.div_s $push755=, $pop237, $pop1508 + i32.const $push1507=, 65535 + i32.and $push756=, $pop755, $pop1507 + i32.ne $push757=, $pop235, $pop756 + br_if 1, $pop757 # 1: down to label0 +# BB#122: # %lor.lhs.false1140 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push234=, 10($10) + i32.const $push1513=, 65535 + i32.and $push758=, $pop234, $pop1513 + i32.load16_u $push236=, 0($7) + i32.const $push1512=, 16 + i32.shl $push759=, $pop236, $pop1512 + i32.const $push1511=, 16 + i32.shr_s $push760=, $pop759, $pop1511 + i32.const $push1510=, 64 + i32.div_s $push761=, $pop760, $pop1510 + i32.const $push1509=, 65535 + i32.and $push762=, $pop761, $pop1509 + i32.ne $push763=, $pop758, $pop762 + br_if 1, $pop763 # 1: down to label0 +# BB#123: # %if.end1150 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + call sr1428166432128@FUNCTION, $10, $1 + i32.load16_u $push238=, 0($10) + br_if 1, $pop238 # 1: down to label0 +# BB#124: # %lor.lhs.false1160 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_s $push764=, 0($8) + i32.const $push1516=, 8 + i32.rem_s $push765=, $pop764, $pop1516 + i32.load16_u $push239=, 6($10) + i32.const $push1515=, 16 + i32.shl $push766=, $pop239, $pop1515 + i32.const $push1514=, 16 + i32.shr_s $push767=, $pop766, $pop1514 + i32.ne $push768=, $pop765, $pop767 + br_if 1, $pop768 # 1: down to label0 +# BB#125: # %if.end1170 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_s $push243=, 0($2) + i32.const $push1517=, 2 + i32.rem_s $push769=, $pop243, $pop1517 + i32.load16_s $push241=, 4($10) + i32.ne $push770=, $pop769, $pop241 + br_if 1, $pop770 # 1: down to label0 +# BB#126: # %lor.lhs.false1179 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push242=, 0($3) + i32.const $push1522=, 16 + i32.shl $push773=, $pop242, $pop1522 + i32.const $push1521=, 16 + i32.shr_s $push774=, $pop773, $pop1521 + i32.const $push1520=, 4 + i32.rem_s $push775=, $pop774, $pop1520 + i32.load16_u $push240=, 2($10) + i32.const $push1519=, 16 + i32.shl $push771=, $pop240, $pop1519 + i32.const $push1518=, 16 + i32.shr_s $push772=, $pop771, $pop1518 + i32.ne $push776=, $pop775, $pop772 + br_if 1, $pop776 # 1: down to label0 +# BB#127: # %if.end1189 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_s $push246=, 0($4) + i32.const $push1523=, 16 + i32.rem_s $push777=, $pop246, $pop1523 + i32.load16_s $push244=, 8($10) + i32.ne $push778=, $pop777, $pop244 + br_if 1, $pop778 # 1: down to label0 +# BB#128: # %lor.lhs.false1198 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push247=, 0($5) + i32.const $push1528=, 16 + i32.shl $push781=, $pop247, $pop1528 + i32.const $push1527=, 16 + i32.shr_s $push782=, $pop781, $pop1527 + i32.const $push1526=, 128 + i32.rem_s $push783=, $pop782, $pop1526 + i32.load16_u $push245=, 14($10) + i32.const $push1525=, 16 + i32.shl $push779=, $pop245, $pop1525 + i32.const $push1524=, 16 + i32.shr_s $push780=, $pop779, $pop1524 + i32.ne $push784=, $pop783, $pop780 + br_if 1, $pop784 # 1: down to label0 +# BB#129: # %if.end1208 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_s $push251=, 0($6) + i32.const $push1529=, 32 + i32.rem_s $push785=, $pop251, $pop1529 + i32.load16_s $push249=, 12($10) + i32.ne $push786=, $pop785, $pop249 + br_if 1, $pop786 # 1: down to label0 +# BB#130: # %lor.lhs.false1217 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push250=, 0($7) + i32.const $push1534=, 16 + i32.shl $push789=, $pop250, $pop1534 + i32.const $push1533=, 16 + i32.shr_s $push790=, $pop789, $pop1533 + i32.const $push1532=, 64 + i32.rem_s $push791=, $pop790, $pop1532 + i32.load16_u $push248=, 10($10) + i32.const $push1531=, 16 + i32.shl $push787=, $pop248, $pop1531 + i32.const $push1530=, 16 + i32.shr_s $push788=, $pop787, $pop1530 + i32.ne $push792=, $pop791, $pop788 + br_if 1, $pop792 # 1: down to label0 +# BB#131: # %if.end1227 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + call sq33333333@FUNCTION, $10, $1 + i32.load16_u $push252=, 0($10) + i32.load16_s $push254=, 0($1) + i32.const $push1536=, 3 + i32.div_s $push793=, $pop254, $pop1536 + i32.const $push1535=, 65535 + i32.and $push794=, $pop793, $pop1535 + i32.ne $push795=, $pop252, $pop794 + br_if 1, $pop795 # 1: down to label0 +# BB#132: # %lor.lhs.false1237 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push253=, 6($10) + i32.const $push1541=, 65535 + i32.and $push796=, $pop253, $pop1541 + i32.load16_u $push255=, 0($8) + i32.const $push1540=, 16 + i32.shl $push797=, $pop255, $pop1540 + i32.const $push1539=, 16 + i32.shr_s $push798=, $pop797, $pop1539 + i32.const $push1538=, 3 + i32.div_s $push799=, $pop798, $pop1538 + i32.const $push1537=, 65535 + i32.and $push800=, $pop799, $pop1537 + i32.ne $push801=, $pop796, $pop800 + br_if 1, $pop801 # 1: down to label0 +# BB#133: # %if.end1247 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_u $push257=, 4($10) + i32.load16_s $push259=, 0($2) + i32.const $push1543=, 3 + i32.div_s $push802=, $pop259, $pop1543 + i32.const $push1542=, 65535 + i32.and $push803=, $pop802, $pop1542 + i32.ne $push804=, $pop257, $pop803 + br_if 1, $pop804 # 1: down to label0 +# BB#134: # %lor.lhs.false1256 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push256=, 2($10) + i32.const $push1548=, 65535 + i32.and $push805=, $pop256, $pop1548 + i32.load16_u $push258=, 0($3) + i32.const $push1547=, 16 + i32.shl $push806=, $pop258, $pop1547 + i32.const $push1546=, 16 + i32.shr_s $push807=, $pop806, $pop1546 + i32.const $push1545=, 3 + i32.div_s $push808=, $pop807, $pop1545 + i32.const $push1544=, 65535 + i32.and $push809=, $pop808, $pop1544 + i32.ne $push810=, $pop805, $pop809 + br_if 1, $pop810 # 1: down to label0 +# BB#135: # %if.end1266 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_u $push260=, 8($10) + i32.load16_s $push262=, 0($4) + i32.const $push1550=, 3 + i32.div_s $push811=, $pop262, $pop1550 + i32.const $push1549=, 65535 + i32.and $push812=, $pop811, $pop1549 + i32.ne $push813=, $pop260, $pop812 + br_if 1, $pop813 # 1: down to label0 +# BB#136: # %lor.lhs.false1275 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push261=, 14($10) + i32.const $push1555=, 65535 + i32.and $push814=, $pop261, $pop1555 + i32.load16_u $push263=, 0($5) + i32.const $push1554=, 16 + i32.shl $push815=, $pop263, $pop1554 + i32.const $push1553=, 16 + i32.shr_s $push816=, $pop815, $pop1553 + i32.const $push1552=, 3 + i32.div_s $push817=, $pop816, $pop1552 + i32.const $push1551=, 65535 + i32.and $push818=, $pop817, $pop1551 + i32.ne $push819=, $pop814, $pop818 + br_if 1, $pop819 # 1: down to label0 +# BB#137: # %if.end1285 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_u $push265=, 12($10) + i32.load16_s $push267=, 0($6) + i32.const $push1557=, 3 + i32.div_s $push820=, $pop267, $pop1557 + i32.const $push1556=, 65535 + i32.and $push821=, $pop820, $pop1556 + i32.ne $push822=, $pop265, $pop821 + br_if 1, $pop822 # 1: down to label0 +# BB#138: # %lor.lhs.false1294 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push264=, 10($10) + i32.const $push1562=, 65535 + i32.and $push823=, $pop264, $pop1562 + i32.load16_u $push266=, 0($7) + i32.const $push1561=, 16 + i32.shl $push824=, $pop266, $pop1561 + i32.const $push1560=, 16 + i32.shr_s $push825=, $pop824, $pop1560 + i32.const $push1559=, 3 + i32.div_s $push826=, $pop825, $pop1559 + i32.const $push1558=, 65535 + i32.and $push827=, $pop826, $pop1558 + i32.ne $push828=, $pop823, $pop827 + br_if 1, $pop828 # 1: down to label0 +# BB#139: # %if.end1304 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + call sr33333333@FUNCTION, $10, $1 + i32.load16_s $push270=, 0($1) + i32.const $push1563=, 3 + i32.rem_s $push829=, $pop270, $pop1563 + i32.load16_s $push268=, 0($10) + i32.ne $push830=, $pop829, $pop268 + br_if 1, $pop830 # 1: down to label0 +# BB#140: # %lor.lhs.false1314 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push271=, 0($8) + i32.const $push1568=, 16 + i32.shl $push833=, $pop271, $pop1568 + i32.const $push1567=, 16 + i32.shr_s $push834=, $pop833, $pop1567 + i32.const $push1566=, 3 + i32.rem_s $push835=, $pop834, $pop1566 + i32.load16_u $push269=, 6($10) + i32.const $push1565=, 16 + i32.shl $push831=, $pop269, $pop1565 + i32.const $push1564=, 16 + i32.shr_s $push832=, $pop831, $pop1564 + i32.ne $push836=, $pop835, $pop832 + br_if 1, $pop836 # 1: down to label0 +# BB#141: # %if.end1324 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_s $push275=, 0($2) + i32.const $push1569=, 3 + i32.rem_s $push837=, $pop275, $pop1569 + i32.load16_s $push273=, 4($10) + i32.ne $push838=, $pop837, $pop273 + br_if 1, $pop838 # 1: down to label0 +# BB#142: # %lor.lhs.false1333 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push274=, 0($3) + i32.const $push1574=, 16 + i32.shl $push841=, $pop274, $pop1574 + i32.const $push1573=, 16 + i32.shr_s $push842=, $pop841, $pop1573 + i32.const $push1572=, 3 + i32.rem_s $push843=, $pop842, $pop1572 + i32.load16_u $push272=, 2($10) + i32.const $push1571=, 16 + i32.shl $push839=, $pop272, $pop1571 + i32.const $push1570=, 16 + i32.shr_s $push840=, $pop839, $pop1570 + i32.ne $push844=, $pop843, $pop840 + br_if 1, $pop844 # 1: down to label0 +# BB#143: # %if.end1343 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_s $push278=, 0($4) + i32.const $push1575=, 3 + i32.rem_s $push845=, $pop278, $pop1575 + i32.load16_s $push276=, 8($10) + i32.ne $push846=, $pop845, $pop276 + br_if 1, $pop846 # 1: down to label0 +# BB#144: # %lor.lhs.false1352 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push279=, 0($5) + i32.const $push1580=, 16 + i32.shl $push849=, $pop279, $pop1580 + i32.const $push1579=, 16 + i32.shr_s $push850=, $pop849, $pop1579 + i32.const $push1578=, 3 + i32.rem_s $push851=, $pop850, $pop1578 + i32.load16_u $push277=, 14($10) + i32.const $push1577=, 16 + i32.shl $push847=, $pop277, $pop1577 + i32.const $push1576=, 16 + i32.shr_s $push848=, $pop847, $pop1576 + i32.ne $push852=, $pop851, $pop848 + br_if 1, $pop852 # 1: down to label0 +# BB#145: # %if.end1362 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_s $push283=, 0($6) + i32.const $push1581=, 3 + i32.rem_s $push853=, $pop283, $pop1581 + i32.load16_s $push281=, 12($10) + i32.ne $push854=, $pop853, $pop281 + br_if 1, $pop854 # 1: down to label0 +# BB#146: # %lor.lhs.false1371 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push282=, 0($7) + i32.const $push1586=, 16 + i32.shl $push857=, $pop282, $pop1586 + i32.const $push1585=, 16 + i32.shr_s $push858=, $pop857, $pop1585 + i32.const $push1584=, 3 + i32.rem_s $push859=, $pop858, $pop1584 + i32.load16_u $push280=, 10($10) + i32.const $push1583=, 16 + i32.shl $push855=, $pop280, $pop1583 + i32.const $push1582=, 16 + i32.shr_s $push856=, $pop855, $pop1582 + i32.ne $push860=, $pop859, $pop856 + br_if 1, $pop860 # 1: down to label0 +# BB#147: # %if.end1381 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + call sq65656565@FUNCTION, $10, $1 + i32.load16_u $push284=, 0($10) + i32.load16_s $push286=, 0($1) + i32.const $push1588=, 6 + i32.div_s $push861=, $pop286, $pop1588 + i32.const $push1587=, 65535 + i32.and $push862=, $pop861, $pop1587 + i32.ne $push863=, $pop284, $pop862 + br_if 1, $pop863 # 1: down to label0 +# BB#148: # %lor.lhs.false1391 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push285=, 6($10) + i32.const $push1593=, 65535 + i32.and $push864=, $pop285, $pop1593 + i32.load16_u $push287=, 0($8) + i32.const $push1592=, 16 + i32.shl $push865=, $pop287, $pop1592 + i32.const $push1591=, 16 + i32.shr_s $push866=, $pop865, $pop1591 + i32.const $push1590=, 5 + i32.div_s $push867=, $pop866, $pop1590 + i32.const $push1589=, 65535 + i32.and $push868=, $pop867, $pop1589 + i32.ne $push869=, $pop864, $pop868 + br_if 1, $pop869 # 1: down to label0 +# BB#149: # %if.end1401 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_u $push289=, 4($10) + i32.load16_s $push291=, 0($2) + i32.const $push1595=, 6 + i32.div_s $push870=, $pop291, $pop1595 + i32.const $push1594=, 65535 + i32.and $push871=, $pop870, $pop1594 + i32.ne $push872=, $pop289, $pop871 + br_if 1, $pop872 # 1: down to label0 +# BB#150: # %lor.lhs.false1410 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push288=, 2($10) + i32.const $push1600=, 65535 + i32.and $push873=, $pop288, $pop1600 + i32.load16_u $push290=, 0($3) + i32.const $push1599=, 16 + i32.shl $push874=, $pop290, $pop1599 + i32.const $push1598=, 16 + i32.shr_s $push875=, $pop874, $pop1598 + i32.const $push1597=, 5 + i32.div_s $push876=, $pop875, $pop1597 + i32.const $push1596=, 65535 + i32.and $push877=, $pop876, $pop1596 + i32.ne $push878=, $pop873, $pop877 + br_if 1, $pop878 # 1: down to label0 +# BB#151: # %if.end1420 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_u $push292=, 8($10) + i32.load16_s $push294=, 0($4) + i32.const $push1602=, 6 + i32.div_s $push879=, $pop294, $pop1602 + i32.const $push1601=, 65535 + i32.and $push880=, $pop879, $pop1601 + i32.ne $push881=, $pop292, $pop880 + br_if 1, $pop881 # 1: down to label0 +# BB#152: # %lor.lhs.false1429 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push293=, 14($10) + i32.const $push1607=, 65535 + i32.and $push882=, $pop293, $pop1607 + i32.load16_u $push295=, 0($5) + i32.const $push1606=, 16 + i32.shl $push883=, $pop295, $pop1606 + i32.const $push1605=, 16 + i32.shr_s $push884=, $pop883, $pop1605 + i32.const $push1604=, 5 + i32.div_s $push885=, $pop884, $pop1604 + i32.const $push1603=, 65535 + i32.and $push886=, $pop885, $pop1603 + i32.ne $push887=, $pop882, $pop886 + br_if 1, $pop887 # 1: down to label0 +# BB#153: # %if.end1439 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_u $push297=, 12($10) + i32.load16_s $push299=, 0($6) + i32.const $push1609=, 6 + i32.div_s $push888=, $pop299, $pop1609 + i32.const $push1608=, 65535 + i32.and $push889=, $pop888, $pop1608 + i32.ne $push890=, $pop297, $pop889 + br_if 1, $pop890 # 1: down to label0 +# BB#154: # %lor.lhs.false1448 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push296=, 10($10) + i32.const $push1614=, 65535 + i32.and $push891=, $pop296, $pop1614 + i32.load16_u $push298=, 0($7) + i32.const $push1613=, 16 + i32.shl $push892=, $pop298, $pop1613 + i32.const $push1612=, 16 + i32.shr_s $push893=, $pop892, $pop1612 + i32.const $push1611=, 5 + i32.div_s $push894=, $pop893, $pop1611 + i32.const $push1610=, 65535 + i32.and $push895=, $pop894, $pop1610 + i32.ne $push896=, $pop891, $pop895 + br_if 1, $pop896 # 1: down to label0 +# BB#155: # %if.end1458 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + call sr65656565@FUNCTION, $10, $1 + i32.load16_s $push302=, 0($1) + i32.const $push1615=, 6 + i32.rem_s $push897=, $pop302, $pop1615 + i32.load16_s $push300=, 0($10) + i32.ne $push898=, $pop897, $pop300 + br_if 1, $pop898 # 1: down to label0 +# BB#156: # %lor.lhs.false1468 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push303=, 0($8) + i32.const $push1620=, 16 + i32.shl $push901=, $pop303, $pop1620 + i32.const $push1619=, 16 + i32.shr_s $push902=, $pop901, $pop1619 + i32.const $push1618=, 5 + i32.rem_s $push903=, $pop902, $pop1618 + i32.load16_u $push301=, 6($10) + i32.const $push1617=, 16 + i32.shl $push899=, $pop301, $pop1617 + i32.const $push1616=, 16 + i32.shr_s $push900=, $pop899, $pop1616 + i32.ne $push904=, $pop903, $pop900 + br_if 1, $pop904 # 1: down to label0 +# BB#157: # %if.end1478 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_s $push307=, 0($2) + i32.const $push1621=, 6 + i32.rem_s $push905=, $pop307, $pop1621 + i32.load16_s $push305=, 4($10) + i32.ne $push906=, $pop905, $pop305 + br_if 1, $pop906 # 1: down to label0 +# BB#158: # %lor.lhs.false1487 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push306=, 0($3) + i32.const $push1626=, 16 + i32.shl $push909=, $pop306, $pop1626 + i32.const $push1625=, 16 + i32.shr_s $push910=, $pop909, $pop1625 + i32.const $push1624=, 5 + i32.rem_s $push911=, $pop910, $pop1624 + i32.load16_u $push304=, 2($10) + i32.const $push1623=, 16 + i32.shl $push907=, $pop304, $pop1623 + i32.const $push1622=, 16 + i32.shr_s $push908=, $pop907, $pop1622 + i32.ne $push912=, $pop911, $pop908 + br_if 1, $pop912 # 1: down to label0 +# BB#159: # %if.end1497 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_s $push310=, 0($4) + i32.const $push1627=, 6 + i32.rem_s $push913=, $pop310, $pop1627 + i32.load16_s $push308=, 8($10) + i32.ne $push914=, $pop913, $pop308 + br_if 1, $pop914 # 1: down to label0 +# BB#160: # %lor.lhs.false1506 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push311=, 0($5) + i32.const $push1632=, 16 + i32.shl $push917=, $pop311, $pop1632 + i32.const $push1631=, 16 + i32.shr_s $push918=, $pop917, $pop1631 + i32.const $push1630=, 5 + i32.rem_s $push919=, $pop918, $pop1630 + i32.load16_u $push309=, 14($10) + i32.const $push1629=, 16 + i32.shl $push915=, $pop309, $pop1629 + i32.const $push1628=, 16 + i32.shr_s $push916=, $pop915, $pop1628 + i32.ne $push920=, $pop919, $pop916 + br_if 1, $pop920 # 1: down to label0 +# BB#161: # %if.end1516 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_s $push315=, 0($6) + i32.const $push1633=, 6 + i32.rem_s $push921=, $pop315, $pop1633 + i32.load16_s $push313=, 12($10) + i32.ne $push922=, $pop921, $pop313 + br_if 1, $pop922 # 1: down to label0 +# BB#162: # %lor.lhs.false1525 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push314=, 0($7) + i32.const $push1638=, 16 + i32.shl $push925=, $pop314, $pop1638 + i32.const $push1637=, 16 + i32.shr_s $push926=, $pop925, $pop1637 + i32.const $push1636=, 5 + i32.rem_s $push927=, $pop926, $pop1636 + i32.load16_u $push312=, 10($10) + i32.const $push1635=, 16 + i32.shl $push923=, $pop312, $pop1635 + i32.const $push1634=, 16 + i32.shr_s $push924=, $pop923, $pop1634 + i32.ne $push928=, $pop927, $pop924 + br_if 1, $pop928 # 1: down to label0 +# BB#163: # %if.end1535 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + call sq14141461461414@FUNCTION, $10, $1 + i32.load16_u $push316=, 0($10) + i32.load16_s $push318=, 0($1) + i32.const $push1640=, 14 + i32.div_s $push929=, $pop318, $pop1640 + i32.const $push1639=, 65535 + i32.and $push930=, $pop929, $pop1639 + i32.ne $push931=, $pop316, $pop930 + br_if 1, $pop931 # 1: down to label0 +# BB#164: # %lor.lhs.false1545 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push317=, 6($10) + i32.const $push1645=, 65535 + i32.and $push932=, $pop317, $pop1645 + i32.load16_u $push319=, 0($8) + i32.const $push1644=, 16 + i32.shl $push933=, $pop319, $pop1644 + i32.const $push1643=, 16 + i32.shr_s $push934=, $pop933, $pop1643 + i32.const $push1642=, 6 + i32.div_s $push935=, $pop934, $pop1642 + i32.const $push1641=, 65535 + i32.and $push936=, $pop935, $pop1641 + i32.ne $push937=, $pop932, $pop936 + br_if 1, $pop937 # 1: down to label0 +# BB#165: # %if.end1555 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_u $push321=, 4($10) + i32.load16_s $push323=, 0($2) + i32.const $push1647=, 14 + i32.div_s $push938=, $pop323, $pop1647 + i32.const $push1646=, 65535 + i32.and $push939=, $pop938, $pop1646 + i32.ne $push940=, $pop321, $pop939 + br_if 1, $pop940 # 1: down to label0 +# BB#166: # %lor.lhs.false1564 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push320=, 2($10) + i32.const $push1652=, 65535 + i32.and $push941=, $pop320, $pop1652 + i32.load16_u $push322=, 0($3) + i32.const $push1651=, 16 + i32.shl $push942=, $pop322, $pop1651 + i32.const $push1650=, 16 + i32.shr_s $push943=, $pop942, $pop1650 + i32.const $push1649=, 14 + i32.div_s $push944=, $pop943, $pop1649 + i32.const $push1648=, 65535 + i32.and $push945=, $pop944, $pop1648 + i32.ne $push946=, $pop941, $pop945 + br_if 1, $pop946 # 1: down to label0 +# BB#167: # %if.end1574 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_u $push324=, 8($10) + i32.load16_s $push326=, 0($4) + i32.const $push1654=, 14 + i32.div_s $push947=, $pop326, $pop1654 + i32.const $push1653=, 65535 + i32.and $push948=, $pop947, $pop1653 + i32.ne $push949=, $pop324, $pop948 + br_if 1, $pop949 # 1: down to label0 +# BB#168: # %lor.lhs.false1583 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push325=, 14($10) + i32.const $push1659=, 65535 + i32.and $push950=, $pop325, $pop1659 + i32.load16_u $push327=, 0($5) + i32.const $push1658=, 16 + i32.shl $push951=, $pop327, $pop1658 + i32.const $push1657=, 16 + i32.shr_s $push952=, $pop951, $pop1657 + i32.const $push1656=, 14 + i32.div_s $push953=, $pop952, $pop1656 + i32.const $push1655=, 65535 + i32.and $push954=, $pop953, $pop1655 + i32.ne $push955=, $pop950, $pop954 + br_if 1, $pop955 # 1: down to label0 +# BB#169: # %if.end1593 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_u $push329=, 12($10) + i32.load16_s $push331=, 0($6) + i32.const $push1661=, 14 + i32.div_s $push956=, $pop331, $pop1661 + i32.const $push1660=, 65535 + i32.and $push957=, $pop956, $pop1660 + i32.ne $push958=, $pop329, $pop957 + br_if 1, $pop958 # 1: down to label0 +# BB#170: # %lor.lhs.false1602 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push328=, 10($10) + i32.const $push1666=, 65535 + i32.and $push959=, $pop328, $pop1666 + i32.load16_u $push330=, 0($7) + i32.const $push1665=, 16 + i32.shl $push960=, $pop330, $pop1665 + i32.const $push1664=, 16 + i32.shr_s $push961=, $pop960, $pop1664 + i32.const $push1663=, 6 + i32.div_s $push962=, $pop961, $pop1663 + i32.const $push1662=, 65535 + i32.and $push963=, $pop962, $pop1662 + i32.ne $push964=, $pop959, $pop963 + br_if 1, $pop964 # 1: down to label0 +# BB#171: # %if.end1612 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + call sr14141461461414@FUNCTION, $10, $1 + i32.load16_s $push334=, 0($1) + i32.const $push1667=, 14 + i32.rem_s $push965=, $pop334, $pop1667 + i32.load16_s $push332=, 0($10) + i32.ne $push966=, $pop965, $pop332 + br_if 1, $pop966 # 1: down to label0 +# BB#172: # %lor.lhs.false1622 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push335=, 0($8) + i32.const $push1672=, 16 + i32.shl $push969=, $pop335, $pop1672 + i32.const $push1671=, 16 + i32.shr_s $push970=, $pop969, $pop1671 + i32.const $push1670=, 6 + i32.rem_s $push971=, $pop970, $pop1670 + i32.load16_u $push333=, 6($10) + i32.const $push1669=, 16 + i32.shl $push967=, $pop333, $pop1669 + i32.const $push1668=, 16 + i32.shr_s $push968=, $pop967, $pop1668 + i32.ne $push972=, $pop971, $pop968 + br_if 1, $pop972 # 1: down to label0 +# BB#173: # %if.end1632 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_s $push339=, 0($2) + i32.const $push1673=, 14 + i32.rem_s $push973=, $pop339, $pop1673 + i32.load16_s $push337=, 4($10) + i32.ne $push974=, $pop973, $pop337 + br_if 1, $pop974 # 1: down to label0 +# BB#174: # %lor.lhs.false1641 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push338=, 0($3) + i32.const $push1678=, 16 + i32.shl $push977=, $pop338, $pop1678 + i32.const $push1677=, 16 + i32.shr_s $push978=, $pop977, $pop1677 + i32.const $push1676=, 14 + i32.rem_s $push979=, $pop978, $pop1676 + i32.load16_u $push336=, 2($10) + i32.const $push1675=, 16 + i32.shl $push975=, $pop336, $pop1675 + i32.const $push1674=, 16 + i32.shr_s $push976=, $pop975, $pop1674 + i32.ne $push980=, $pop979, $pop976 + br_if 1, $pop980 # 1: down to label0 +# BB#175: # %if.end1651 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_s $push342=, 0($4) + i32.const $push1679=, 14 + i32.rem_s $push981=, $pop342, $pop1679 + i32.load16_s $push340=, 8($10) + i32.ne $push982=, $pop981, $pop340 + br_if 1, $pop982 # 1: down to label0 +# BB#176: # %lor.lhs.false1660 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push343=, 0($5) + i32.const $push1684=, 16 + i32.shl $push985=, $pop343, $pop1684 + i32.const $push1683=, 16 + i32.shr_s $push986=, $pop985, $pop1683 + i32.const $push1682=, 14 + i32.rem_s $push987=, $pop986, $pop1682 + i32.load16_u $push341=, 14($10) + i32.const $push1681=, 16 + i32.shl $push983=, $pop341, $pop1681 + i32.const $push1680=, 16 + i32.shr_s $push984=, $pop983, $pop1680 + i32.ne $push988=, $pop987, $pop984 + br_if 1, $pop988 # 1: down to label0 +# BB#177: # %if.end1670 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_s $push347=, 0($6) + i32.const $push1685=, 14 + i32.rem_s $push989=, $pop347, $pop1685 + i32.load16_s $push345=, 12($10) + i32.ne $push990=, $pop989, $pop345 + br_if 1, $pop990 # 1: down to label0 +# BB#178: # %lor.lhs.false1679 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push346=, 0($7) + i32.const $push1690=, 16 + i32.shl $push993=, $pop346, $pop1690 + i32.const $push1689=, 16 + i32.shr_s $push994=, $pop993, $pop1689 + i32.const $push1688=, 6 + i32.rem_s $push995=, $pop994, $pop1688 + i32.load16_u $push344=, 10($10) + i32.const $push1687=, 16 + i32.shl $push991=, $pop344, $pop1687 + i32.const $push1686=, 16 + i32.shr_s $push992=, $pop991, $pop1686 + i32.ne $push996=, $pop995, $pop992 + br_if 1, $pop996 # 1: down to label0 +# BB#179: # %if.end1689 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + call sq77777777@FUNCTION, $10, $1 + i32.load16_u $push348=, 0($10) + i32.load16_s $push350=, 0($1) + i32.const $push1692=, 7 + i32.div_s $push997=, $pop350, $pop1692 + i32.const $push1691=, 65535 + i32.and $push998=, $pop997, $pop1691 + i32.ne $push999=, $pop348, $pop998 + br_if 1, $pop999 # 1: down to label0 +# BB#180: # %lor.lhs.false1699 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push349=, 6($10) + i32.const $push1697=, 65535 + i32.and $push1000=, $pop349, $pop1697 + i32.load16_u $push351=, 0($8) + i32.const $push1696=, 16 + i32.shl $push1001=, $pop351, $pop1696 + i32.const $push1695=, 16 + i32.shr_s $push1002=, $pop1001, $pop1695 + i32.const $push1694=, 7 + i32.div_s $push1003=, $pop1002, $pop1694 + i32.const $push1693=, 65535 + i32.and $push1004=, $pop1003, $pop1693 + i32.ne $push1005=, $pop1000, $pop1004 + br_if 1, $pop1005 # 1: down to label0 +# BB#181: # %if.end1709 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_u $push353=, 4($10) + i32.load16_s $push355=, 0($2) + i32.const $push1699=, 7 + i32.div_s $push1006=, $pop355, $pop1699 + i32.const $push1698=, 65535 + i32.and $push1007=, $pop1006, $pop1698 + i32.ne $push1008=, $pop353, $pop1007 + br_if 1, $pop1008 # 1: down to label0 +# BB#182: # %lor.lhs.false1718 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push352=, 2($10) + i32.const $push1704=, 65535 + i32.and $push1009=, $pop352, $pop1704 + i32.load16_u $push354=, 0($3) + i32.const $push1703=, 16 + i32.shl $push1010=, $pop354, $pop1703 + i32.const $push1702=, 16 + i32.shr_s $push1011=, $pop1010, $pop1702 + i32.const $push1701=, 7 + i32.div_s $push1012=, $pop1011, $pop1701 + i32.const $push1700=, 65535 + i32.and $push1013=, $pop1012, $pop1700 + i32.ne $push1014=, $pop1009, $pop1013 + br_if 1, $pop1014 # 1: down to label0 +# BB#183: # %if.end1728 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_u $push356=, 8($10) + i32.load16_s $push358=, 0($4) + i32.const $push1706=, 7 + i32.div_s $push1015=, $pop358, $pop1706 + i32.const $push1705=, 65535 + i32.and $push1016=, $pop1015, $pop1705 + i32.ne $push1017=, $pop356, $pop1016 + br_if 1, $pop1017 # 1: down to label0 +# BB#184: # %lor.lhs.false1737 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push357=, 14($10) + i32.const $push1711=, 65535 + i32.and $push1018=, $pop357, $pop1711 + i32.load16_u $push359=, 0($5) + i32.const $push1710=, 16 + i32.shl $push1019=, $pop359, $pop1710 + i32.const $push1709=, 16 + i32.shr_s $push1020=, $pop1019, $pop1709 + i32.const $push1708=, 7 + i32.div_s $push1021=, $pop1020, $pop1708 + i32.const $push1707=, 65535 + i32.and $push1022=, $pop1021, $pop1707 + i32.ne $push1023=, $pop1018, $pop1022 + br_if 1, $pop1023 # 1: down to label0 +# BB#185: # %if.end1747 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + i32.load16_u $push361=, 12($10) + i32.load16_s $push363=, 0($6) + i32.const $push1713=, 7 + i32.div_s $push1024=, $pop363, $pop1713 + i32.const $push1712=, 65535 + i32.and $push1025=, $pop1024, $pop1712 + i32.ne $push1026=, $pop361, $pop1025 + br_if 1, $pop1026 # 1: down to label0 +# BB#186: # %lor.lhs.false1756 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push360=, 10($10) + i32.const $push1718=, 65535 + i32.and $push1027=, $pop360, $pop1718 + i32.load16_u $push362=, 0($7) + i32.const $push1717=, 16 + i32.shl $push1028=, $pop362, $pop1717 + i32.const $push1716=, 16 + i32.shr_s $push1029=, $pop1028, $pop1716 + i32.const $push1715=, 7 + i32.div_s $push1030=, $pop1029, $pop1715 + i32.const $push1714=, 65535 + i32.and $push1031=, $pop1030, $pop1714 + i32.ne $push1032=, $pop1027, $pop1031 + br_if 1, $pop1032 # 1: down to label0 +# BB#187: # %if.end1766 + # in Loop: Header=BB24_99 Depth=1 + copy_local $9=, $10 + #APP + #NO_APP + call sr77777777@FUNCTION, $10, $1 + i32.load16_s $push366=, 0($1) + i32.const $push1719=, 7 + i32.rem_s $push1033=, $pop366, $pop1719 + i32.load16_s $push364=, 0($10) + i32.ne $push1034=, $pop1033, $pop364 + br_if 1, $pop1034 # 1: down to label0 +# BB#188: # %lor.lhs.false1776 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push367=, 0($8) + i32.const $push1724=, 16 + i32.shl $push1037=, $pop367, $pop1724 + i32.const $push1723=, 16 + i32.shr_s $push1038=, $pop1037, $pop1723 + i32.const $push1722=, 7 + i32.rem_s $push1039=, $pop1038, $pop1722 + i32.load16_u $push365=, 6($10) + i32.const $push1721=, 16 + i32.shl $push1035=, $pop365, $pop1721 + i32.const $push1720=, 16 + i32.shr_s $push1036=, $pop1035, $pop1720 + i32.ne $push1040=, $pop1039, $pop1036 + br_if 1, $pop1040 # 1: down to label0 +# BB#189: # %if.end1786 + # in Loop: Header=BB24_99 Depth=1 + copy_local $1=, $10 + #APP + #NO_APP + i32.load16_s $push371=, 0($2) + i32.const $push1725=, 7 + i32.rem_s $push1041=, $pop371, $pop1725 + i32.load16_s $push369=, 4($10) + i32.ne $push1042=, $pop1041, $pop369 + br_if 1, $pop1042 # 1: down to label0 +# BB#190: # %lor.lhs.false1795 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push370=, 0($3) + i32.const $push1730=, 16 + i32.shl $push1045=, $pop370, $pop1730 + i32.const $push1729=, 16 + i32.shr_s $push1046=, $pop1045, $pop1729 + i32.const $push1728=, 7 + i32.rem_s $push1047=, $pop1046, $pop1728 + i32.load16_u $push368=, 2($10) + i32.const $push1727=, 16 + i32.shl $push1043=, $pop368, $pop1727 + i32.const $push1726=, 16 + i32.shr_s $push1044=, $pop1043, $pop1726 + i32.ne $push1048=, $pop1047, $pop1044 + br_if 1, $pop1048 # 1: down to label0 +# BB#191: # %if.end1805 + # in Loop: Header=BB24_99 Depth=1 + copy_local $1=, $10 + #APP + #NO_APP + i32.load16_s $push374=, 0($4) + i32.const $push1731=, 7 + i32.rem_s $push1049=, $pop374, $pop1731 + i32.load16_s $push372=, 8($10) + i32.ne $push1050=, $pop1049, $pop372 + br_if 1, $pop1050 # 1: down to label0 +# BB#192: # %lor.lhs.false1814 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push375=, 0($5) + i32.const $push1736=, 16 + i32.shl $push1053=, $pop375, $pop1736 + i32.const $push1735=, 16 + i32.shr_s $push1054=, $pop1053, $pop1735 + i32.const $push1734=, 7 + i32.rem_s $push1055=, $pop1054, $pop1734 + i32.load16_u $push373=, 14($10) + i32.const $push1733=, 16 + i32.shl $push1051=, $pop373, $pop1733 + i32.const $push1732=, 16 + i32.shr_s $push1052=, $pop1051, $pop1732 + i32.ne $push1056=, $pop1055, $pop1052 + br_if 1, $pop1056 # 1: down to label0 +# BB#193: # %if.end1824 + # in Loop: Header=BB24_99 Depth=1 + copy_local $1=, $10 + #APP + #NO_APP + i32.load16_s $push379=, 0($6) + i32.const $push1737=, 7 + i32.rem_s $push1057=, $pop379, $pop1737 + i32.load16_s $push377=, 12($10) + i32.ne $push1058=, $pop1057, $pop377 + br_if 1, $pop1058 # 1: down to label0 +# BB#194: # %lor.lhs.false1833 + # in Loop: Header=BB24_99 Depth=1 + i32.load16_u $push378=, 0($7) + i32.const $push1742=, 16 + i32.shl $push1061=, $pop378, $pop1742 + i32.const $push1741=, 16 + i32.shr_s $push1062=, $pop1061, $pop1741 + i32.const $push1740=, 7 + i32.rem_s $push1063=, $pop1062, $pop1740 + i32.load16_u $push376=, 10($10) + i32.const $push1739=, 16 + i32.shl $push1059=, $pop376, $pop1739 + i32.const $push1738=, 16 + i32.shr_s $push1060=, $pop1059, $pop1738 + i32.ne $push1064=, $pop1063, $pop1060 + br_if 1, $pop1064 # 1: down to label0 +# BB#195: # %if.end1843 + # in Loop: Header=BB24_99 Depth=1 + copy_local $1=, $10 + #APP + #NO_APP + i32.const $push1065=, 1 + i32.add $1=, $0, $pop1065 + i32.const $0=, 1 + i32.const $push1743=, 2 + i32.lt_u $push1066=, $1, $pop1743 + br_if 0, $pop1066 # 0: up to label2 +# BB#196: # %for.end1846 + end_loop + i32.const $push1074=, 0 + i32.const $push1072=, 32 + i32.add $push1073=, $10, $pop1072 + i32.store __stack_pointer($pop1074), $pop1073 + i32.const $push1067=, 0 + return $pop1067 +.LBB24_197: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end24: + .size main, .Lfunc_end24-main + # -- End function + .hidden u # @u + .type u,@object + .section .data.u,"aw",@progbits + .globl u + .p2align 4 +u: + .int16 73 # 0x49 + .int16 65531 # 0xfffb + .int16 0 # 0x0 + .int16 174 # 0xae + .int16 921 # 0x399 + .int16 65535 # 0xffff + .int16 17 # 0x11 + .int16 178 # 0xb2 + .int16 1 # 0x1 + .int16 8173 # 0x1fed + .int16 65535 # 0xffff + .int16 65472 # 0xffc0 + .int16 12 # 0xc + .int16 29612 # 0x73ac + .int16 128 # 0x80 + .int16 8912 # 0x22d0 + .size u, 32 + + .hidden s # @s + .type s,@object + .section .data.s,"aw",@progbits + .globl s + .p2align 4 +s: + .int16 73 # 0x49 + .int16 56413 # 0xdc5d + .int16 32761 # 0x7ff9 + .int16 8191 # 0x1fff + .int16 16371 # 0x3ff3 + .int16 1201 # 0x4b1 + .int16 12701 # 0x319d + .int16 9999 # 0x270f + .int16 9903 # 0x26af + .int16 65535 # 0xffff + .int16 58213 # 0xe365 + .int16 0 # 0x0 + .int16 65529 # 0xfff9 + .int16 65213 # 0xfebd + .int16 9124 # 0x23a4 + .int16 56337 # 0xdc11 + .size s, 32 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr53645.c.s b/src/binaryen/test/torture-s/pr53645.c.s new file mode 100644 index 0000000000..88e89fa2be --- /dev/null +++ b/src/binaryen/test/torture-s/pr53645.c.s @@ -0,0 +1,2075 @@ + .text + .file "pr53645.c" + .section .text.uq4444,"ax",@progbits + .hidden uq4444 # -- Begin function uq4444 + .globl uq4444 + .type uq4444,@function +uq4444: # @uq4444 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 2 + i32.shr_u $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push22=, 2 + i32.shr_u $push7=, $pop6, $pop22 + i32.store 0($pop4), $pop7 + i32.const $push8=, 8 + i32.add $push9=, $0, $pop8 + i32.const $push21=, 8 + i32.add $push10=, $1, $pop21 + i32.load $push11=, 0($pop10) + i32.const $push20=, 2 + i32.shr_u $push12=, $pop11, $pop20 + i32.store 0($pop9), $pop12 + i32.const $push13=, 4 + i32.add $push14=, $0, $pop13 + i32.const $push19=, 4 + i32.add $push15=, $1, $pop19 + i32.load $push16=, 0($pop15) + i32.const $push18=, 2 + i32.shr_u $push17=, $pop16, $pop18 + i32.store 0($pop14), $pop17 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size uq4444, .Lfunc_end0-uq4444 + # -- End function + .section .text.ur4444,"ax",@progbits + .hidden ur4444 # -- Begin function ur4444 + .globl ur4444 + .type ur4444,@function +ur4444: # @ur4444 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 3 + i32.and $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push22=, 3 + i32.and $push7=, $pop6, $pop22 + i32.store 0($pop4), $pop7 + i32.const $push8=, 8 + i32.add $push9=, $0, $pop8 + i32.const $push21=, 8 + i32.add $push10=, $1, $pop21 + i32.load $push11=, 0($pop10) + i32.const $push20=, 3 + i32.and $push12=, $pop11, $pop20 + i32.store 0($pop9), $pop12 + i32.const $push13=, 4 + i32.add $push14=, $0, $pop13 + i32.const $push19=, 4 + i32.add $push15=, $1, $pop19 + i32.load $push16=, 0($pop15) + i32.const $push18=, 3 + i32.and $push17=, $pop16, $pop18 + i32.store 0($pop14), $pop17 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size ur4444, .Lfunc_end1-ur4444 + # -- End function + .section .text.sq4444,"ax",@progbits + .hidden sq4444 # -- Begin function sq4444 + .globl sq4444 + .type sq4444,@function +sq4444: # @sq4444 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 4 + i32.div_s $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push22=, 4 + i32.div_s $push7=, $pop6, $pop22 + i32.store 0($pop4), $pop7 + i32.const $push8=, 8 + i32.add $push9=, $0, $pop8 + i32.const $push21=, 8 + i32.add $push10=, $1, $pop21 + i32.load $push11=, 0($pop10) + i32.const $push20=, 4 + i32.div_s $push12=, $pop11, $pop20 + i32.store 0($pop9), $pop12 + i32.const $push19=, 4 + i32.add $push13=, $0, $pop19 + i32.const $push18=, 4 + i32.add $push14=, $1, $pop18 + i32.load $push15=, 0($pop14) + i32.const $push17=, 4 + i32.div_s $push16=, $pop15, $pop17 + i32.store 0($pop13), $pop16 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size sq4444, .Lfunc_end2-sq4444 + # -- End function + .section .text.sr4444,"ax",@progbits + .hidden sr4444 # -- Begin function sr4444 + .globl sr4444 + .type sr4444,@function +sr4444: # @sr4444 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 4 + i32.rem_s $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push22=, 4 + i32.rem_s $push7=, $pop6, $pop22 + i32.store 0($pop4), $pop7 + i32.const $push8=, 8 + i32.add $push9=, $0, $pop8 + i32.const $push21=, 8 + i32.add $push10=, $1, $pop21 + i32.load $push11=, 0($pop10) + i32.const $push20=, 4 + i32.rem_s $push12=, $pop11, $pop20 + i32.store 0($pop9), $pop12 + i32.const $push19=, 4 + i32.add $push13=, $0, $pop19 + i32.const $push18=, 4 + i32.add $push14=, $1, $pop18 + i32.load $push15=, 0($pop14) + i32.const $push17=, 4 + i32.rem_s $push16=, $pop15, $pop17 + i32.store 0($pop13), $pop16 + # fallthrough-return + .endfunc +.Lfunc_end3: + .size sr4444, .Lfunc_end3-sr4444 + # -- End function + .section .text.uq1428,"ax",@progbits + .hidden uq1428 # -- Begin function uq1428 + .globl uq1428 + .type uq1428,@function +uq1428: # @uq1428 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.store 0($0), $pop0 + i32.const $push1=, 12 + i32.add $push2=, $0, $pop1 + i32.const $push21=, 12 + i32.add $push3=, $1, $pop21 + i32.load $push4=, 0($pop3) + i32.const $push5=, 3 + i32.shr_u $push6=, $pop4, $pop5 + i32.store 0($pop2), $pop6 + i32.const $push7=, 8 + i32.add $push8=, $0, $pop7 + i32.const $push20=, 8 + i32.add $push9=, $1, $pop20 + i32.load $push10=, 0($pop9) + i32.const $push11=, 1 + i32.shr_u $push12=, $pop10, $pop11 + i32.store 0($pop8), $pop12 + i32.const $push13=, 4 + i32.add $push14=, $0, $pop13 + i32.const $push19=, 4 + i32.add $push15=, $1, $pop19 + i32.load $push16=, 0($pop15) + i32.const $push17=, 2 + i32.shr_u $push18=, $pop16, $pop17 + i32.store 0($pop14), $pop18 + # fallthrough-return + .endfunc +.Lfunc_end4: + .size uq1428, .Lfunc_end4-uq1428 + # -- End function + .section .text.ur1428,"ax",@progbits + .hidden ur1428 # -- Begin function ur1428 + .globl ur1428 + .type ur1428,@function +ur1428: # @ur1428 + .param i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store 0($0), $pop0 + i32.const $push1=, 12 + i32.add $push2=, $0, $pop1 + i32.const $push21=, 12 + i32.add $push3=, $1, $pop21 + i32.load $push4=, 0($pop3) + i32.const $push5=, 7 + i32.and $push6=, $pop4, $pop5 + i32.store 0($pop2), $pop6 + i32.const $push7=, 8 + i32.add $push8=, $0, $pop7 + i32.const $push20=, 8 + i32.add $push9=, $1, $pop20 + i32.load $push10=, 0($pop9) + i32.const $push11=, 1 + i32.and $push12=, $pop10, $pop11 + i32.store 0($pop8), $pop12 + i32.const $push13=, 4 + i32.add $push14=, $0, $pop13 + i32.const $push19=, 4 + i32.add $push15=, $1, $pop19 + i32.load $push16=, 0($pop15) + i32.const $push17=, 3 + i32.and $push18=, $pop16, $pop17 + i32.store 0($pop14), $pop18 + # fallthrough-return + .endfunc +.Lfunc_end5: + .size ur1428, .Lfunc_end5-ur1428 + # -- End function + .section .text.sq1428,"ax",@progbits + .hidden sq1428 # -- Begin function sq1428 + .globl sq1428 + .type sq1428,@function +sq1428: # @sq1428 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.store 0($0), $pop0 + i32.const $push1=, 12 + i32.add $push2=, $0, $pop1 + i32.const $push21=, 12 + i32.add $push3=, $1, $pop21 + i32.load $push4=, 0($pop3) + i32.const $push5=, 8 + i32.div_s $push6=, $pop4, $pop5 + i32.store 0($pop2), $pop6 + i32.const $push20=, 8 + i32.add $push7=, $0, $pop20 + i32.const $push19=, 8 + i32.add $push8=, $1, $pop19 + i32.load $push9=, 0($pop8) + i32.const $push10=, 2 + i32.div_s $push11=, $pop9, $pop10 + i32.store 0($pop7), $pop11 + i32.const $push12=, 4 + i32.add $push13=, $0, $pop12 + i32.const $push18=, 4 + i32.add $push14=, $1, $pop18 + i32.load $push15=, 0($pop14) + i32.const $push17=, 4 + i32.div_s $push16=, $pop15, $pop17 + i32.store 0($pop13), $pop16 + # fallthrough-return + .endfunc +.Lfunc_end6: + .size sq1428, .Lfunc_end6-sq1428 + # -- End function + .section .text.sr1428,"ax",@progbits + .hidden sr1428 # -- Begin function sr1428 + .globl sr1428 + .type sr1428,@function +sr1428: # @sr1428 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 1 + i32.rem_s $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push7=, 8 + i32.rem_s $push8=, $pop6, $pop7 + i32.store 0($pop4), $pop8 + i32.const $push22=, 8 + i32.add $push9=, $0, $pop22 + i32.const $push21=, 8 + i32.add $push10=, $1, $pop21 + i32.load $push11=, 0($pop10) + i32.const $push12=, 2 + i32.rem_s $push13=, $pop11, $pop12 + i32.store 0($pop9), $pop13 + i32.const $push14=, 4 + i32.add $push15=, $0, $pop14 + i32.const $push20=, 4 + i32.add $push16=, $1, $pop20 + i32.load $push17=, 0($pop16) + i32.const $push19=, 4 + i32.rem_s $push18=, $pop17, $pop19 + i32.store 0($pop15), $pop18 + # fallthrough-return + .endfunc +.Lfunc_end7: + .size sr1428, .Lfunc_end7-sr1428 + # -- End function + .section .text.uq3333,"ax",@progbits + .hidden uq3333 # -- Begin function uq3333 + .globl uq3333 + .type uq3333,@function +uq3333: # @uq3333 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 3 + i32.div_u $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push22=, 3 + i32.div_u $push7=, $pop6, $pop22 + i32.store 0($pop4), $pop7 + i32.const $push8=, 8 + i32.add $push9=, $0, $pop8 + i32.const $push21=, 8 + i32.add $push10=, $1, $pop21 + i32.load $push11=, 0($pop10) + i32.const $push20=, 3 + i32.div_u $push12=, $pop11, $pop20 + i32.store 0($pop9), $pop12 + i32.const $push13=, 4 + i32.add $push14=, $0, $pop13 + i32.const $push19=, 4 + i32.add $push15=, $1, $pop19 + i32.load $push16=, 0($pop15) + i32.const $push18=, 3 + i32.div_u $push17=, $pop16, $pop18 + i32.store 0($pop14), $pop17 + # fallthrough-return + .endfunc +.Lfunc_end8: + .size uq3333, .Lfunc_end8-uq3333 + # -- End function + .section .text.ur3333,"ax",@progbits + .hidden ur3333 # -- Begin function ur3333 + .globl ur3333 + .type ur3333,@function +ur3333: # @ur3333 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 3 + i32.rem_u $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push22=, 3 + i32.rem_u $push7=, $pop6, $pop22 + i32.store 0($pop4), $pop7 + i32.const $push8=, 8 + i32.add $push9=, $0, $pop8 + i32.const $push21=, 8 + i32.add $push10=, $1, $pop21 + i32.load $push11=, 0($pop10) + i32.const $push20=, 3 + i32.rem_u $push12=, $pop11, $pop20 + i32.store 0($pop9), $pop12 + i32.const $push13=, 4 + i32.add $push14=, $0, $pop13 + i32.const $push19=, 4 + i32.add $push15=, $1, $pop19 + i32.load $push16=, 0($pop15) + i32.const $push18=, 3 + i32.rem_u $push17=, $pop16, $pop18 + i32.store 0($pop14), $pop17 + # fallthrough-return + .endfunc +.Lfunc_end9: + .size ur3333, .Lfunc_end9-ur3333 + # -- End function + .section .text.sq3333,"ax",@progbits + .hidden sq3333 # -- Begin function sq3333 + .globl sq3333 + .type sq3333,@function +sq3333: # @sq3333 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 3 + i32.div_s $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push22=, 3 + i32.div_s $push7=, $pop6, $pop22 + i32.store 0($pop4), $pop7 + i32.const $push8=, 8 + i32.add $push9=, $0, $pop8 + i32.const $push21=, 8 + i32.add $push10=, $1, $pop21 + i32.load $push11=, 0($pop10) + i32.const $push20=, 3 + i32.div_s $push12=, $pop11, $pop20 + i32.store 0($pop9), $pop12 + i32.const $push13=, 4 + i32.add $push14=, $0, $pop13 + i32.const $push19=, 4 + i32.add $push15=, $1, $pop19 + i32.load $push16=, 0($pop15) + i32.const $push18=, 3 + i32.div_s $push17=, $pop16, $pop18 + i32.store 0($pop14), $pop17 + # fallthrough-return + .endfunc +.Lfunc_end10: + .size sq3333, .Lfunc_end10-sq3333 + # -- End function + .section .text.sr3333,"ax",@progbits + .hidden sr3333 # -- Begin function sr3333 + .globl sr3333 + .type sr3333,@function +sr3333: # @sr3333 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 3 + i32.rem_s $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push22=, 3 + i32.rem_s $push7=, $pop6, $pop22 + i32.store 0($pop4), $pop7 + i32.const $push8=, 8 + i32.add $push9=, $0, $pop8 + i32.const $push21=, 8 + i32.add $push10=, $1, $pop21 + i32.load $push11=, 0($pop10) + i32.const $push20=, 3 + i32.rem_s $push12=, $pop11, $pop20 + i32.store 0($pop9), $pop12 + i32.const $push13=, 4 + i32.add $push14=, $0, $pop13 + i32.const $push19=, 4 + i32.add $push15=, $1, $pop19 + i32.load $push16=, 0($pop15) + i32.const $push18=, 3 + i32.rem_s $push17=, $pop16, $pop18 + i32.store 0($pop14), $pop17 + # fallthrough-return + .endfunc +.Lfunc_end11: + .size sr3333, .Lfunc_end11-sr3333 + # -- End function + .section .text.uq6565,"ax",@progbits + .hidden uq6565 # -- Begin function uq6565 + .globl uq6565 + .type uq6565,@function +uq6565: # @uq6565 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 6 + i32.div_u $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push7=, 5 + i32.div_u $push8=, $pop6, $pop7 + i32.store 0($pop4), $pop8 + i32.const $push9=, 8 + i32.add $push10=, $0, $pop9 + i32.const $push22=, 8 + i32.add $push11=, $1, $pop22 + i32.load $push12=, 0($pop11) + i32.const $push21=, 6 + i32.div_u $push13=, $pop12, $pop21 + i32.store 0($pop10), $pop13 + i32.const $push14=, 4 + i32.add $push15=, $0, $pop14 + i32.const $push20=, 4 + i32.add $push16=, $1, $pop20 + i32.load $push17=, 0($pop16) + i32.const $push19=, 5 + i32.div_u $push18=, $pop17, $pop19 + i32.store 0($pop15), $pop18 + # fallthrough-return + .endfunc +.Lfunc_end12: + .size uq6565, .Lfunc_end12-uq6565 + # -- End function + .section .text.ur6565,"ax",@progbits + .hidden ur6565 # -- Begin function ur6565 + .globl ur6565 + .type ur6565,@function +ur6565: # @ur6565 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 6 + i32.rem_u $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push7=, 5 + i32.rem_u $push8=, $pop6, $pop7 + i32.store 0($pop4), $pop8 + i32.const $push9=, 8 + i32.add $push10=, $0, $pop9 + i32.const $push22=, 8 + i32.add $push11=, $1, $pop22 + i32.load $push12=, 0($pop11) + i32.const $push21=, 6 + i32.rem_u $push13=, $pop12, $pop21 + i32.store 0($pop10), $pop13 + i32.const $push14=, 4 + i32.add $push15=, $0, $pop14 + i32.const $push20=, 4 + i32.add $push16=, $1, $pop20 + i32.load $push17=, 0($pop16) + i32.const $push19=, 5 + i32.rem_u $push18=, $pop17, $pop19 + i32.store 0($pop15), $pop18 + # fallthrough-return + .endfunc +.Lfunc_end13: + .size ur6565, .Lfunc_end13-ur6565 + # -- End function + .section .text.sq6565,"ax",@progbits + .hidden sq6565 # -- Begin function sq6565 + .globl sq6565 + .type sq6565,@function +sq6565: # @sq6565 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 6 + i32.div_s $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push7=, 5 + i32.div_s $push8=, $pop6, $pop7 + i32.store 0($pop4), $pop8 + i32.const $push9=, 8 + i32.add $push10=, $0, $pop9 + i32.const $push22=, 8 + i32.add $push11=, $1, $pop22 + i32.load $push12=, 0($pop11) + i32.const $push21=, 6 + i32.div_s $push13=, $pop12, $pop21 + i32.store 0($pop10), $pop13 + i32.const $push14=, 4 + i32.add $push15=, $0, $pop14 + i32.const $push20=, 4 + i32.add $push16=, $1, $pop20 + i32.load $push17=, 0($pop16) + i32.const $push19=, 5 + i32.div_s $push18=, $pop17, $pop19 + i32.store 0($pop15), $pop18 + # fallthrough-return + .endfunc +.Lfunc_end14: + .size sq6565, .Lfunc_end14-sq6565 + # -- End function + .section .text.sr6565,"ax",@progbits + .hidden sr6565 # -- Begin function sr6565 + .globl sr6565 + .type sr6565,@function +sr6565: # @sr6565 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 6 + i32.rem_s $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push7=, 5 + i32.rem_s $push8=, $pop6, $pop7 + i32.store 0($pop4), $pop8 + i32.const $push9=, 8 + i32.add $push10=, $0, $pop9 + i32.const $push22=, 8 + i32.add $push11=, $1, $pop22 + i32.load $push12=, 0($pop11) + i32.const $push21=, 6 + i32.rem_s $push13=, $pop12, $pop21 + i32.store 0($pop10), $pop13 + i32.const $push14=, 4 + i32.add $push15=, $0, $pop14 + i32.const $push20=, 4 + i32.add $push16=, $1, $pop20 + i32.load $push17=, 0($pop16) + i32.const $push19=, 5 + i32.rem_s $push18=, $pop17, $pop19 + i32.store 0($pop15), $pop18 + # fallthrough-return + .endfunc +.Lfunc_end15: + .size sr6565, .Lfunc_end15-sr6565 + # -- End function + .section .text.uq1414146,"ax",@progbits + .hidden uq1414146 # -- Begin function uq1414146 + .globl uq1414146 + .type uq1414146,@function +uq1414146: # @uq1414146 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 14 + i32.div_u $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push7=, 6 + i32.div_u $push8=, $pop6, $pop7 + i32.store 0($pop4), $pop8 + i32.const $push9=, 8 + i32.add $push10=, $0, $pop9 + i32.const $push22=, 8 + i32.add $push11=, $1, $pop22 + i32.load $push12=, 0($pop11) + i32.const $push21=, 14 + i32.div_u $push13=, $pop12, $pop21 + i32.store 0($pop10), $pop13 + i32.const $push14=, 4 + i32.add $push15=, $0, $pop14 + i32.const $push20=, 4 + i32.add $push16=, $1, $pop20 + i32.load $push17=, 0($pop16) + i32.const $push19=, 14 + i32.div_u $push18=, $pop17, $pop19 + i32.store 0($pop15), $pop18 + # fallthrough-return + .endfunc +.Lfunc_end16: + .size uq1414146, .Lfunc_end16-uq1414146 + # -- End function + .section .text.ur1414146,"ax",@progbits + .hidden ur1414146 # -- Begin function ur1414146 + .globl ur1414146 + .type ur1414146,@function +ur1414146: # @ur1414146 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 14 + i32.rem_u $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push7=, 6 + i32.rem_u $push8=, $pop6, $pop7 + i32.store 0($pop4), $pop8 + i32.const $push9=, 8 + i32.add $push10=, $0, $pop9 + i32.const $push22=, 8 + i32.add $push11=, $1, $pop22 + i32.load $push12=, 0($pop11) + i32.const $push21=, 14 + i32.rem_u $push13=, $pop12, $pop21 + i32.store 0($pop10), $pop13 + i32.const $push14=, 4 + i32.add $push15=, $0, $pop14 + i32.const $push20=, 4 + i32.add $push16=, $1, $pop20 + i32.load $push17=, 0($pop16) + i32.const $push19=, 14 + i32.rem_u $push18=, $pop17, $pop19 + i32.store 0($pop15), $pop18 + # fallthrough-return + .endfunc +.Lfunc_end17: + .size ur1414146, .Lfunc_end17-ur1414146 + # -- End function + .section .text.sq1414146,"ax",@progbits + .hidden sq1414146 # -- Begin function sq1414146 + .globl sq1414146 + .type sq1414146,@function +sq1414146: # @sq1414146 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 14 + i32.div_s $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push7=, 6 + i32.div_s $push8=, $pop6, $pop7 + i32.store 0($pop4), $pop8 + i32.const $push9=, 8 + i32.add $push10=, $0, $pop9 + i32.const $push22=, 8 + i32.add $push11=, $1, $pop22 + i32.load $push12=, 0($pop11) + i32.const $push21=, 14 + i32.div_s $push13=, $pop12, $pop21 + i32.store 0($pop10), $pop13 + i32.const $push14=, 4 + i32.add $push15=, $0, $pop14 + i32.const $push20=, 4 + i32.add $push16=, $1, $pop20 + i32.load $push17=, 0($pop16) + i32.const $push19=, 14 + i32.div_s $push18=, $pop17, $pop19 + i32.store 0($pop15), $pop18 + # fallthrough-return + .endfunc +.Lfunc_end18: + .size sq1414146, .Lfunc_end18-sq1414146 + # -- End function + .section .text.sr1414146,"ax",@progbits + .hidden sr1414146 # -- Begin function sr1414146 + .globl sr1414146 + .type sr1414146,@function +sr1414146: # @sr1414146 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 14 + i32.rem_s $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push7=, 6 + i32.rem_s $push8=, $pop6, $pop7 + i32.store 0($pop4), $pop8 + i32.const $push9=, 8 + i32.add $push10=, $0, $pop9 + i32.const $push22=, 8 + i32.add $push11=, $1, $pop22 + i32.load $push12=, 0($pop11) + i32.const $push21=, 14 + i32.rem_s $push13=, $pop12, $pop21 + i32.store 0($pop10), $pop13 + i32.const $push14=, 4 + i32.add $push15=, $0, $pop14 + i32.const $push20=, 4 + i32.add $push16=, $1, $pop20 + i32.load $push17=, 0($pop16) + i32.const $push19=, 14 + i32.rem_s $push18=, $pop17, $pop19 + i32.store 0($pop15), $pop18 + # fallthrough-return + .endfunc +.Lfunc_end19: + .size sr1414146, .Lfunc_end19-sr1414146 + # -- End function + .section .text.uq7777,"ax",@progbits + .hidden uq7777 # -- Begin function uq7777 + .globl uq7777 + .type uq7777,@function +uq7777: # @uq7777 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 7 + i32.div_u $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push22=, 7 + i32.div_u $push7=, $pop6, $pop22 + i32.store 0($pop4), $pop7 + i32.const $push8=, 8 + i32.add $push9=, $0, $pop8 + i32.const $push21=, 8 + i32.add $push10=, $1, $pop21 + i32.load $push11=, 0($pop10) + i32.const $push20=, 7 + i32.div_u $push12=, $pop11, $pop20 + i32.store 0($pop9), $pop12 + i32.const $push13=, 4 + i32.add $push14=, $0, $pop13 + i32.const $push19=, 4 + i32.add $push15=, $1, $pop19 + i32.load $push16=, 0($pop15) + i32.const $push18=, 7 + i32.div_u $push17=, $pop16, $pop18 + i32.store 0($pop14), $pop17 + # fallthrough-return + .endfunc +.Lfunc_end20: + .size uq7777, .Lfunc_end20-uq7777 + # -- End function + .section .text.ur7777,"ax",@progbits + .hidden ur7777 # -- Begin function ur7777 + .globl ur7777 + .type ur7777,@function +ur7777: # @ur7777 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 7 + i32.rem_u $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push22=, 7 + i32.rem_u $push7=, $pop6, $pop22 + i32.store 0($pop4), $pop7 + i32.const $push8=, 8 + i32.add $push9=, $0, $pop8 + i32.const $push21=, 8 + i32.add $push10=, $1, $pop21 + i32.load $push11=, 0($pop10) + i32.const $push20=, 7 + i32.rem_u $push12=, $pop11, $pop20 + i32.store 0($pop9), $pop12 + i32.const $push13=, 4 + i32.add $push14=, $0, $pop13 + i32.const $push19=, 4 + i32.add $push15=, $1, $pop19 + i32.load $push16=, 0($pop15) + i32.const $push18=, 7 + i32.rem_u $push17=, $pop16, $pop18 + i32.store 0($pop14), $pop17 + # fallthrough-return + .endfunc +.Lfunc_end21: + .size ur7777, .Lfunc_end21-ur7777 + # -- End function + .section .text.sq7777,"ax",@progbits + .hidden sq7777 # -- Begin function sq7777 + .globl sq7777 + .type sq7777,@function +sq7777: # @sq7777 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 7 + i32.div_s $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push22=, 7 + i32.div_s $push7=, $pop6, $pop22 + i32.store 0($pop4), $pop7 + i32.const $push8=, 8 + i32.add $push9=, $0, $pop8 + i32.const $push21=, 8 + i32.add $push10=, $1, $pop21 + i32.load $push11=, 0($pop10) + i32.const $push20=, 7 + i32.div_s $push12=, $pop11, $pop20 + i32.store 0($pop9), $pop12 + i32.const $push13=, 4 + i32.add $push14=, $0, $pop13 + i32.const $push19=, 4 + i32.add $push15=, $1, $pop19 + i32.load $push16=, 0($pop15) + i32.const $push18=, 7 + i32.div_s $push17=, $pop16, $pop18 + i32.store 0($pop14), $pop17 + # fallthrough-return + .endfunc +.Lfunc_end22: + .size sq7777, .Lfunc_end22-sq7777 + # -- End function + .section .text.sr7777,"ax",@progbits + .hidden sr7777 # -- Begin function sr7777 + .globl sr7777 + .type sr7777,@function +sr7777: # @sr7777 + .param i32, i32 +# BB#0: # %entry + i32.load $push0=, 0($1) + i32.const $push1=, 7 + i32.rem_s $push2=, $pop0, $pop1 + i32.store 0($0), $pop2 + i32.const $push3=, 12 + i32.add $push4=, $0, $pop3 + i32.const $push23=, 12 + i32.add $push5=, $1, $pop23 + i32.load $push6=, 0($pop5) + i32.const $push22=, 7 + i32.rem_s $push7=, $pop6, $pop22 + i32.store 0($pop4), $pop7 + i32.const $push8=, 8 + i32.add $push9=, $0, $pop8 + i32.const $push21=, 8 + i32.add $push10=, $1, $pop21 + i32.load $push11=, 0($pop10) + i32.const $push20=, 7 + i32.rem_s $push12=, $pop11, $pop20 + i32.store 0($pop9), $pop12 + i32.const $push13=, 4 + i32.add $push14=, $0, $pop13 + i32.const $push19=, 4 + i32.add $push15=, $1, $pop19 + i32.load $push16=, 0($pop15) + i32.const $push18=, 7 + i32.rem_s $push17=, $pop16, $pop18 + i32.store 0($pop14), $pop17 + # fallthrough-return + .endfunc +.Lfunc_end23: + .size sr7777, .Lfunc_end23-sr7777 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push386=, 0 + i32.const $push384=, 0 + i32.load $push383=, __stack_pointer($pop384) + i32.const $push385=, 32 + i32.sub $push463=, $pop383, $pop385 + tee_local $push462=, $6=, $pop463 + i32.store __stack_pointer($pop386), $pop462 + i32.const $0=, 0 +.LBB24_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label1: + i32.const $push390=, 16 + i32.add $push391=, $6, $pop390 + i32.const $push470=, 4 + i32.shl $push469=, $0, $pop470 + tee_local $push468=, $2=, $pop469 + i32.const $push467=, u + i32.add $push466=, $pop468, $pop467 + tee_local $push465=, $1=, $pop466 + call uq4444@FUNCTION, $pop391, $pop465 + i32.load $push0=, 16($6) + i32.load $push2=, 0($1) + i32.const $push464=, 2 + i32.shr_u $push188=, $pop2, $pop464 + i32.ne $push189=, $pop0, $pop188 + br_if 1, $pop189 # 1: down to label0 +# BB#2: # %lor.lhs.false + # in Loop: Header=BB24_1 Depth=1 + i32.load $push1=, 28($6) + i32.const $push472=, u+12 + i32.add $push190=, $2, $pop472 + i32.load $push3=, 0($pop190) + i32.const $push471=, 2 + i32.shr_u $push191=, $pop3, $pop471 + i32.ne $push192=, $pop1, $pop191 + br_if 1, $pop192 # 1: down to label0 +# BB#3: # %if.end + # in Loop: Header=BB24_1 Depth=1 + i32.const $push392=, 16 + i32.add $push393=, $6, $pop392 + copy_local $2=, $pop393 + #APP + #NO_APP + i32.load $push5=, 24($6) + i32.const $push476=, 8 + i32.add $push475=, $1, $pop476 + tee_local $push474=, $2=, $pop475 + i32.load $push7=, 0($pop474) + i32.const $push473=, 2 + i32.shr_u $push193=, $pop7, $pop473 + i32.ne $push194=, $pop5, $pop193 + br_if 1, $pop194 # 1: down to label0 +# BB#4: # %lor.lhs.false13 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push4=, 20($6) + i32.const $push480=, 4 + i32.add $push479=, $1, $pop480 + tee_local $push478=, $3=, $pop479 + i32.load $push6=, 0($pop478) + i32.const $push477=, 2 + i32.shr_u $push195=, $pop6, $pop477 + i32.ne $push196=, $pop4, $pop195 + br_if 1, $pop196 # 1: down to label0 +# BB#5: # %if.end20 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push394=, 16 + i32.add $push395=, $6, $pop394 + copy_local $4=, $pop395 + #APP + #NO_APP + i32.const $push396=, 16 + i32.add $push397=, $6, $pop396 + call ur4444@FUNCTION, $pop397, $1 + i32.load $push8=, 16($6) + i32.load $push10=, 0($1) + i32.const $push481=, 3 + i32.and $push197=, $pop10, $pop481 + i32.ne $push198=, $pop8, $pop197 + br_if 1, $pop198 # 1: down to label0 +# BB#6: # %lor.lhs.false26 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push9=, 28($6) + i32.const $push485=, 12 + i32.add $push484=, $1, $pop485 + tee_local $push483=, $4=, $pop484 + i32.load $push11=, 0($pop483) + i32.const $push482=, 3 + i32.and $push199=, $pop11, $pop482 + i32.ne $push200=, $pop9, $pop199 + br_if 1, $pop200 # 1: down to label0 +# BB#7: # %if.end33 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push398=, 16 + i32.add $push399=, $6, $pop398 + copy_local $5=, $pop399 + #APP + #NO_APP + i32.load $push13=, 24($6) + i32.load $push15=, 0($2) + i32.const $push486=, 3 + i32.and $push201=, $pop15, $pop486 + i32.ne $push202=, $pop13, $pop201 + br_if 1, $pop202 # 1: down to label0 +# BB#8: # %lor.lhs.false39 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push12=, 20($6) + i32.load $push14=, 0($3) + i32.const $push487=, 3 + i32.and $push203=, $pop14, $pop487 + i32.ne $push204=, $pop12, $pop203 + br_if 1, $pop204 # 1: down to label0 +# BB#9: # %if.end46 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push400=, 16 + i32.add $push401=, $6, $pop400 + copy_local $5=, $pop401 + #APP + #NO_APP + i32.const $push402=, 16 + i32.add $push403=, $6, $pop402 + call uq1428@FUNCTION, $pop403, $1 + i32.load $push16=, 16($6) + i32.load $push18=, 0($1) + i32.ne $push205=, $pop16, $pop18 + br_if 1, $pop205 # 1: down to label0 +# BB#10: # %lor.lhs.false53 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push17=, 28($6) + i32.load $push19=, 0($4) + i32.const $push488=, 3 + i32.shr_u $push206=, $pop19, $pop488 + i32.ne $push207=, $pop17, $pop206 + br_if 1, $pop207 # 1: down to label0 +# BB#11: # %if.end60 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push404=, 16 + i32.add $push405=, $6, $pop404 + copy_local $5=, $pop405 + #APP + #NO_APP + i32.load $push21=, 24($6) + i32.load $push23=, 0($2) + i32.const $push489=, 1 + i32.shr_u $push208=, $pop23, $pop489 + i32.ne $push209=, $pop21, $pop208 + br_if 1, $pop209 # 1: down to label0 +# BB#12: # %lor.lhs.false66 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push20=, 20($6) + i32.load $push22=, 0($3) + i32.const $push490=, 2 + i32.shr_u $push210=, $pop22, $pop490 + i32.ne $push211=, $pop20, $pop210 + br_if 1, $pop211 # 1: down to label0 +# BB#13: # %if.end73 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push406=, 16 + i32.add $push407=, $6, $pop406 + copy_local $5=, $pop407 + #APP + #NO_APP + i32.const $push408=, 16 + i32.add $push409=, $6, $pop408 + call ur1428@FUNCTION, $pop409, $1 + i32.load $push24=, 16($6) + br_if 1, $pop24 # 1: down to label0 +# BB#14: # %lor.lhs.false80 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push25=, 28($6) + i32.load $push212=, 0($4) + i32.const $push491=, 7 + i32.and $push213=, $pop212, $pop491 + i32.ne $push214=, $pop25, $pop213 + br_if 1, $pop214 # 1: down to label0 +# BB#15: # %if.end87 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push410=, 16 + i32.add $push411=, $6, $pop410 + copy_local $5=, $pop411 + #APP + #NO_APP + i32.load $push27=, 24($6) + i32.load $push29=, 0($2) + i32.const $push492=, 1 + i32.and $push215=, $pop29, $pop492 + i32.ne $push216=, $pop27, $pop215 + br_if 1, $pop216 # 1: down to label0 +# BB#16: # %lor.lhs.false93 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push26=, 20($6) + i32.load $push28=, 0($3) + i32.const $push493=, 3 + i32.and $push217=, $pop28, $pop493 + i32.ne $push218=, $pop26, $pop217 + br_if 1, $pop218 # 1: down to label0 +# BB#17: # %if.end100 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push412=, 16 + i32.add $push413=, $6, $pop412 + copy_local $5=, $pop413 + #APP + #NO_APP + i32.const $push414=, 16 + i32.add $push415=, $6, $pop414 + call uq3333@FUNCTION, $pop415, $1 + i32.load $push30=, 16($6) + i32.load $push32=, 0($1) + i32.const $push494=, 3 + i32.div_u $push219=, $pop32, $pop494 + i32.ne $push220=, $pop30, $pop219 + br_if 1, $pop220 # 1: down to label0 +# BB#18: # %lor.lhs.false107 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push31=, 28($6) + i32.load $push33=, 0($4) + i32.const $push495=, 3 + i32.div_u $push221=, $pop33, $pop495 + i32.ne $push222=, $pop31, $pop221 + br_if 1, $pop222 # 1: down to label0 +# BB#19: # %if.end114 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push416=, 16 + i32.add $push417=, $6, $pop416 + copy_local $5=, $pop417 + #APP + #NO_APP + i32.load $push35=, 24($6) + i32.load $push37=, 0($2) + i32.const $push496=, 3 + i32.div_u $push223=, $pop37, $pop496 + i32.ne $push224=, $pop35, $pop223 + br_if 1, $pop224 # 1: down to label0 +# BB#20: # %lor.lhs.false120 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push34=, 20($6) + i32.load $push36=, 0($3) + i32.const $push497=, 3 + i32.div_u $push225=, $pop36, $pop497 + i32.ne $push226=, $pop34, $pop225 + br_if 1, $pop226 # 1: down to label0 +# BB#21: # %if.end127 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push418=, 16 + i32.add $push419=, $6, $pop418 + copy_local $5=, $pop419 + #APP + #NO_APP + i32.const $push420=, 16 + i32.add $push421=, $6, $pop420 + call ur3333@FUNCTION, $pop421, $1 + i32.load $push38=, 16($6) + i32.load $push40=, 0($1) + i32.const $push498=, 3 + i32.rem_u $push227=, $pop40, $pop498 + i32.ne $push228=, $pop38, $pop227 + br_if 1, $pop228 # 1: down to label0 +# BB#22: # %lor.lhs.false134 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push39=, 28($6) + i32.load $push41=, 0($4) + i32.const $push499=, 3 + i32.rem_u $push229=, $pop41, $pop499 + i32.ne $push230=, $pop39, $pop229 + br_if 1, $pop230 # 1: down to label0 +# BB#23: # %if.end141 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push422=, 16 + i32.add $push423=, $6, $pop422 + copy_local $5=, $pop423 + #APP + #NO_APP + i32.load $push43=, 24($6) + i32.load $push45=, 0($2) + i32.const $push500=, 3 + i32.rem_u $push231=, $pop45, $pop500 + i32.ne $push232=, $pop43, $pop231 + br_if 1, $pop232 # 1: down to label0 +# BB#24: # %lor.lhs.false147 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push42=, 20($6) + i32.load $push44=, 0($3) + i32.const $push501=, 3 + i32.rem_u $push233=, $pop44, $pop501 + i32.ne $push234=, $pop42, $pop233 + br_if 1, $pop234 # 1: down to label0 +# BB#25: # %if.end154 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push424=, 16 + i32.add $push425=, $6, $pop424 + copy_local $5=, $pop425 + #APP + #NO_APP + i32.const $push426=, 16 + i32.add $push427=, $6, $pop426 + call uq6565@FUNCTION, $pop427, $1 + i32.load $push46=, 16($6) + i32.load $push48=, 0($1) + i32.const $push502=, 6 + i32.div_u $push235=, $pop48, $pop502 + i32.ne $push236=, $pop46, $pop235 + br_if 1, $pop236 # 1: down to label0 +# BB#26: # %lor.lhs.false161 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push47=, 28($6) + i32.load $push49=, 0($4) + i32.const $push503=, 5 + i32.div_u $push237=, $pop49, $pop503 + i32.ne $push238=, $pop47, $pop237 + br_if 1, $pop238 # 1: down to label0 +# BB#27: # %if.end168 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push428=, 16 + i32.add $push429=, $6, $pop428 + copy_local $5=, $pop429 + #APP + #NO_APP + i32.load $push51=, 24($6) + i32.load $push53=, 0($2) + i32.const $push504=, 6 + i32.div_u $push239=, $pop53, $pop504 + i32.ne $push240=, $pop51, $pop239 + br_if 1, $pop240 # 1: down to label0 +# BB#28: # %lor.lhs.false174 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push50=, 20($6) + i32.load $push52=, 0($3) + i32.const $push505=, 5 + i32.div_u $push241=, $pop52, $pop505 + i32.ne $push242=, $pop50, $pop241 + br_if 1, $pop242 # 1: down to label0 +# BB#29: # %if.end181 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push430=, 16 + i32.add $push431=, $6, $pop430 + copy_local $5=, $pop431 + #APP + #NO_APP + i32.const $push432=, 16 + i32.add $push433=, $6, $pop432 + call ur6565@FUNCTION, $pop433, $1 + i32.load $push54=, 16($6) + i32.load $push56=, 0($1) + i32.const $push506=, 6 + i32.rem_u $push243=, $pop56, $pop506 + i32.ne $push244=, $pop54, $pop243 + br_if 1, $pop244 # 1: down to label0 +# BB#30: # %lor.lhs.false188 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push55=, 28($6) + i32.load $push57=, 0($4) + i32.const $push507=, 5 + i32.rem_u $push245=, $pop57, $pop507 + i32.ne $push246=, $pop55, $pop245 + br_if 1, $pop246 # 1: down to label0 +# BB#31: # %if.end195 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push434=, 16 + i32.add $push435=, $6, $pop434 + copy_local $5=, $pop435 + #APP + #NO_APP + i32.load $push59=, 24($6) + i32.load $push61=, 0($2) + i32.const $push508=, 6 + i32.rem_u $push247=, $pop61, $pop508 + i32.ne $push248=, $pop59, $pop247 + br_if 1, $pop248 # 1: down to label0 +# BB#32: # %lor.lhs.false201 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push58=, 20($6) + i32.load $push60=, 0($3) + i32.const $push509=, 5 + i32.rem_u $push249=, $pop60, $pop509 + i32.ne $push250=, $pop58, $pop249 + br_if 1, $pop250 # 1: down to label0 +# BB#33: # %if.end208 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push436=, 16 + i32.add $push437=, $6, $pop436 + copy_local $5=, $pop437 + #APP + #NO_APP + i32.const $push438=, 16 + i32.add $push439=, $6, $pop438 + call uq1414146@FUNCTION, $pop439, $1 + i32.load $push62=, 16($6) + i32.load $push64=, 0($1) + i32.const $push510=, 14 + i32.div_u $push251=, $pop64, $pop510 + i32.ne $push252=, $pop62, $pop251 + br_if 1, $pop252 # 1: down to label0 +# BB#34: # %lor.lhs.false215 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push63=, 28($6) + i32.load $push65=, 0($4) + i32.const $push511=, 6 + i32.div_u $push253=, $pop65, $pop511 + i32.ne $push254=, $pop63, $pop253 + br_if 1, $pop254 # 1: down to label0 +# BB#35: # %if.end222 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push440=, 16 + i32.add $push441=, $6, $pop440 + copy_local $5=, $pop441 + #APP + #NO_APP + i32.load $push67=, 24($6) + i32.load $push69=, 0($2) + i32.const $push512=, 14 + i32.div_u $push255=, $pop69, $pop512 + i32.ne $push256=, $pop67, $pop255 + br_if 1, $pop256 # 1: down to label0 +# BB#36: # %lor.lhs.false228 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push66=, 20($6) + i32.load $push68=, 0($3) + i32.const $push513=, 14 + i32.div_u $push257=, $pop68, $pop513 + i32.ne $push258=, $pop66, $pop257 + br_if 1, $pop258 # 1: down to label0 +# BB#37: # %if.end235 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push442=, 16 + i32.add $push443=, $6, $pop442 + copy_local $5=, $pop443 + #APP + #NO_APP + i32.const $push444=, 16 + i32.add $push445=, $6, $pop444 + call ur1414146@FUNCTION, $pop445, $1 + i32.load $push70=, 16($6) + i32.load $push72=, 0($1) + i32.const $push514=, 14 + i32.rem_u $push259=, $pop72, $pop514 + i32.ne $push260=, $pop70, $pop259 + br_if 1, $pop260 # 1: down to label0 +# BB#38: # %lor.lhs.false242 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push71=, 28($6) + i32.load $push73=, 0($4) + i32.const $push515=, 6 + i32.rem_u $push261=, $pop73, $pop515 + i32.ne $push262=, $pop71, $pop261 + br_if 1, $pop262 # 1: down to label0 +# BB#39: # %if.end249 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push446=, 16 + i32.add $push447=, $6, $pop446 + copy_local $5=, $pop447 + #APP + #NO_APP + i32.load $push75=, 24($6) + i32.load $push77=, 0($2) + i32.const $push516=, 14 + i32.rem_u $push263=, $pop77, $pop516 + i32.ne $push264=, $pop75, $pop263 + br_if 1, $pop264 # 1: down to label0 +# BB#40: # %lor.lhs.false255 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push74=, 20($6) + i32.load $push76=, 0($3) + i32.const $push517=, 14 + i32.rem_u $push265=, $pop76, $pop517 + i32.ne $push266=, $pop74, $pop265 + br_if 1, $pop266 # 1: down to label0 +# BB#41: # %if.end262 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push448=, 16 + i32.add $push449=, $6, $pop448 + copy_local $5=, $pop449 + #APP + #NO_APP + i32.const $push450=, 16 + i32.add $push451=, $6, $pop450 + call uq7777@FUNCTION, $pop451, $1 + i32.load $push78=, 16($6) + i32.load $push80=, 0($1) + i32.const $push518=, 7 + i32.div_u $push267=, $pop80, $pop518 + i32.ne $push268=, $pop78, $pop267 + br_if 1, $pop268 # 1: down to label0 +# BB#42: # %lor.lhs.false269 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push79=, 28($6) + i32.load $push81=, 0($4) + i32.const $push519=, 7 + i32.div_u $push269=, $pop81, $pop519 + i32.ne $push270=, $pop79, $pop269 + br_if 1, $pop270 # 1: down to label0 +# BB#43: # %if.end276 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push452=, 16 + i32.add $push453=, $6, $pop452 + copy_local $5=, $pop453 + #APP + #NO_APP + i32.load $push83=, 24($6) + i32.load $push85=, 0($2) + i32.const $push520=, 7 + i32.div_u $push271=, $pop85, $pop520 + i32.ne $push272=, $pop83, $pop271 + br_if 1, $pop272 # 1: down to label0 +# BB#44: # %lor.lhs.false282 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push82=, 20($6) + i32.load $push84=, 0($3) + i32.const $push521=, 7 + i32.div_u $push273=, $pop84, $pop521 + i32.ne $push274=, $pop82, $pop273 + br_if 1, $pop274 # 1: down to label0 +# BB#45: # %if.end289 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push454=, 16 + i32.add $push455=, $6, $pop454 + copy_local $5=, $pop455 + #APP + #NO_APP + i32.const $push456=, 16 + i32.add $push457=, $6, $pop456 + call ur7777@FUNCTION, $pop457, $1 + i32.load $push86=, 16($6) + i32.load $push88=, 0($1) + i32.const $push522=, 7 + i32.rem_u $push275=, $pop88, $pop522 + i32.ne $push276=, $pop86, $pop275 + br_if 1, $pop276 # 1: down to label0 +# BB#46: # %lor.lhs.false296 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push87=, 28($6) + i32.load $push89=, 0($4) + i32.const $push523=, 7 + i32.rem_u $push277=, $pop89, $pop523 + i32.ne $push278=, $pop87, $pop277 + br_if 1, $pop278 # 1: down to label0 +# BB#47: # %if.end303 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push458=, 16 + i32.add $push459=, $6, $pop458 + copy_local $1=, $pop459 + #APP + #NO_APP + i32.load $push91=, 24($6) + i32.load $push93=, 0($2) + i32.const $push524=, 7 + i32.rem_u $push279=, $pop93, $pop524 + i32.ne $push280=, $pop91, $pop279 + br_if 1, $pop280 # 1: down to label0 +# BB#48: # %lor.lhs.false309 + # in Loop: Header=BB24_1 Depth=1 + i32.load $push90=, 20($6) + i32.load $push92=, 0($3) + i32.const $push525=, 7 + i32.rem_u $push281=, $pop92, $pop525 + i32.ne $push282=, $pop90, $pop281 + br_if 1, $pop282 # 1: down to label0 +# BB#49: # %if.end316 + # in Loop: Header=BB24_1 Depth=1 + i32.const $push460=, 16 + i32.add $push461=, $6, $pop460 + copy_local $1=, $pop461 + #APP + #NO_APP + i32.const $push283=, 1 + i32.add $1=, $0, $pop283 + i32.const $0=, 1 + i32.const $push526=, 2 + i32.lt_u $push284=, $1, $pop526 + br_if 0, $pop284 # 0: up to label1 +# BB#50: # %for.body319.preheader + end_loop + i32.const $0=, 0 +.LBB24_51: # %for.body319 + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push533=, 4 + i32.shl $push532=, $0, $pop533 + tee_local $push531=, $2=, $pop532 + i32.const $push530=, s + i32.add $push529=, $pop531, $pop530 + tee_local $push528=, $1=, $pop529 + call sq4444@FUNCTION, $6, $pop528 + i32.load $push94=, 0($6) + i32.load $push96=, 0($1) + i32.const $push527=, 4 + i32.div_s $push285=, $pop96, $pop527 + i32.ne $push286=, $pop94, $pop285 + br_if 1, $pop286 # 1: down to label0 +# BB#52: # %lor.lhs.false326 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push95=, 12($6) + i32.const $push535=, s+12 + i32.add $push287=, $2, $pop535 + i32.load $push97=, 0($pop287) + i32.const $push534=, 4 + i32.div_s $push288=, $pop97, $pop534 + i32.ne $push289=, $pop95, $pop288 + br_if 1, $pop289 # 1: down to label0 +# BB#53: # %if.end333 + # in Loop: Header=BB24_51 Depth=1 + copy_local $2=, $6 + #APP + #NO_APP + i32.load $push99=, 8($6) + i32.const $push539=, 8 + i32.add $push538=, $1, $pop539 + tee_local $push537=, $2=, $pop538 + i32.load $push101=, 0($pop537) + i32.const $push536=, 4 + i32.div_s $push290=, $pop101, $pop536 + i32.ne $push291=, $pop99, $pop290 + br_if 1, $pop291 # 1: down to label0 +# BB#54: # %lor.lhs.false339 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push98=, 4($6) + i32.const $push543=, 4 + i32.add $push542=, $1, $pop543 + tee_local $push541=, $3=, $pop542 + i32.load $push100=, 0($pop541) + i32.const $push540=, 4 + i32.div_s $push292=, $pop100, $pop540 + i32.ne $push293=, $pop98, $pop292 + br_if 1, $pop293 # 1: down to label0 +# BB#55: # %if.end346 + # in Loop: Header=BB24_51 Depth=1 + copy_local $4=, $6 + #APP + #NO_APP + call sr4444@FUNCTION, $6, $1 + i32.load $push102=, 0($6) + i32.load $push104=, 0($1) + i32.const $push544=, 4 + i32.rem_s $push294=, $pop104, $pop544 + i32.ne $push295=, $pop102, $pop294 + br_if 1, $pop295 # 1: down to label0 +# BB#56: # %lor.lhs.false353 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push103=, 12($6) + i32.const $push548=, 12 + i32.add $push547=, $1, $pop548 + tee_local $push546=, $4=, $pop547 + i32.load $push105=, 0($pop546) + i32.const $push545=, 4 + i32.rem_s $push296=, $pop105, $pop545 + i32.ne $push297=, $pop103, $pop296 + br_if 1, $pop297 # 1: down to label0 +# BB#57: # %if.end360 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + i32.load $push107=, 8($6) + i32.load $push109=, 0($2) + i32.const $push549=, 4 + i32.rem_s $push298=, $pop109, $pop549 + i32.ne $push299=, $pop107, $pop298 + br_if 1, $pop299 # 1: down to label0 +# BB#58: # %lor.lhs.false366 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push106=, 4($6) + i32.load $push108=, 0($3) + i32.const $push550=, 4 + i32.rem_s $push300=, $pop108, $pop550 + i32.ne $push301=, $pop106, $pop300 + br_if 1, $pop301 # 1: down to label0 +# BB#59: # %if.end373 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + call sq1428@FUNCTION, $6, $1 + i32.load $push110=, 0($6) + i32.load $push112=, 0($1) + i32.ne $push302=, $pop110, $pop112 + br_if 1, $pop302 # 1: down to label0 +# BB#60: # %lor.lhs.false380 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push111=, 12($6) + i32.load $push113=, 0($4) + i32.const $push551=, 8 + i32.div_s $push303=, $pop113, $pop551 + i32.ne $push304=, $pop111, $pop303 + br_if 1, $pop304 # 1: down to label0 +# BB#61: # %if.end387 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + i32.load $push115=, 8($6) + i32.load $push117=, 0($2) + i32.const $push552=, 2 + i32.div_s $push305=, $pop117, $pop552 + i32.ne $push306=, $pop115, $pop305 + br_if 1, $pop306 # 1: down to label0 +# BB#62: # %lor.lhs.false393 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push114=, 4($6) + i32.load $push116=, 0($3) + i32.const $push553=, 4 + i32.div_s $push307=, $pop116, $pop553 + i32.ne $push308=, $pop114, $pop307 + br_if 1, $pop308 # 1: down to label0 +# BB#63: # %if.end400 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + call sr1428@FUNCTION, $6, $1 + i32.load $push118=, 0($6) + br_if 1, $pop118 # 1: down to label0 +# BB#64: # %lor.lhs.false407 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push119=, 12($6) + i32.load $push309=, 0($4) + i32.const $push554=, 8 + i32.rem_s $push310=, $pop309, $pop554 + i32.ne $push311=, $pop119, $pop310 + br_if 1, $pop311 # 1: down to label0 +# BB#65: # %if.end414 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + i32.load $push121=, 8($6) + i32.load $push123=, 0($2) + i32.const $push555=, 2 + i32.rem_s $push312=, $pop123, $pop555 + i32.ne $push313=, $pop121, $pop312 + br_if 1, $pop313 # 1: down to label0 +# BB#66: # %lor.lhs.false420 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push120=, 4($6) + i32.load $push122=, 0($3) + i32.const $push556=, 4 + i32.rem_s $push314=, $pop122, $pop556 + i32.ne $push315=, $pop120, $pop314 + br_if 1, $pop315 # 1: down to label0 +# BB#67: # %if.end427 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + call sq3333@FUNCTION, $6, $1 + i32.load $push124=, 0($6) + i32.load $push126=, 0($1) + i32.const $push557=, 3 + i32.div_s $push316=, $pop126, $pop557 + i32.ne $push317=, $pop124, $pop316 + br_if 1, $pop317 # 1: down to label0 +# BB#68: # %lor.lhs.false434 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push125=, 12($6) + i32.load $push127=, 0($4) + i32.const $push558=, 3 + i32.div_s $push318=, $pop127, $pop558 + i32.ne $push319=, $pop125, $pop318 + br_if 1, $pop319 # 1: down to label0 +# BB#69: # %if.end441 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + i32.load $push129=, 8($6) + i32.load $push131=, 0($2) + i32.const $push559=, 3 + i32.div_s $push320=, $pop131, $pop559 + i32.ne $push321=, $pop129, $pop320 + br_if 1, $pop321 # 1: down to label0 +# BB#70: # %lor.lhs.false447 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push128=, 4($6) + i32.load $push130=, 0($3) + i32.const $push560=, 3 + i32.div_s $push322=, $pop130, $pop560 + i32.ne $push323=, $pop128, $pop322 + br_if 1, $pop323 # 1: down to label0 +# BB#71: # %if.end454 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + call sr3333@FUNCTION, $6, $1 + i32.load $push132=, 0($6) + i32.load $push134=, 0($1) + i32.const $push561=, 3 + i32.rem_s $push324=, $pop134, $pop561 + i32.ne $push325=, $pop132, $pop324 + br_if 1, $pop325 # 1: down to label0 +# BB#72: # %lor.lhs.false461 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push133=, 12($6) + i32.load $push135=, 0($4) + i32.const $push562=, 3 + i32.rem_s $push326=, $pop135, $pop562 + i32.ne $push327=, $pop133, $pop326 + br_if 1, $pop327 # 1: down to label0 +# BB#73: # %if.end468 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + i32.load $push137=, 8($6) + i32.load $push139=, 0($2) + i32.const $push563=, 3 + i32.rem_s $push328=, $pop139, $pop563 + i32.ne $push329=, $pop137, $pop328 + br_if 1, $pop329 # 1: down to label0 +# BB#74: # %lor.lhs.false474 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push136=, 4($6) + i32.load $push138=, 0($3) + i32.const $push564=, 3 + i32.rem_s $push330=, $pop138, $pop564 + i32.ne $push331=, $pop136, $pop330 + br_if 1, $pop331 # 1: down to label0 +# BB#75: # %if.end481 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + call sq6565@FUNCTION, $6, $1 + i32.load $push140=, 0($6) + i32.load $push142=, 0($1) + i32.const $push565=, 6 + i32.div_s $push332=, $pop142, $pop565 + i32.ne $push333=, $pop140, $pop332 + br_if 1, $pop333 # 1: down to label0 +# BB#76: # %lor.lhs.false488 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push141=, 12($6) + i32.load $push143=, 0($4) + i32.const $push566=, 5 + i32.div_s $push334=, $pop143, $pop566 + i32.ne $push335=, $pop141, $pop334 + br_if 1, $pop335 # 1: down to label0 +# BB#77: # %if.end495 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + i32.load $push145=, 8($6) + i32.load $push147=, 0($2) + i32.const $push567=, 6 + i32.div_s $push336=, $pop147, $pop567 + i32.ne $push337=, $pop145, $pop336 + br_if 1, $pop337 # 1: down to label0 +# BB#78: # %lor.lhs.false501 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push144=, 4($6) + i32.load $push146=, 0($3) + i32.const $push568=, 5 + i32.div_s $push338=, $pop146, $pop568 + i32.ne $push339=, $pop144, $pop338 + br_if 1, $pop339 # 1: down to label0 +# BB#79: # %if.end508 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + call sr6565@FUNCTION, $6, $1 + i32.load $push148=, 0($6) + i32.load $push150=, 0($1) + i32.const $push569=, 6 + i32.rem_s $push340=, $pop150, $pop569 + i32.ne $push341=, $pop148, $pop340 + br_if 1, $pop341 # 1: down to label0 +# BB#80: # %lor.lhs.false515 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push149=, 12($6) + i32.load $push151=, 0($4) + i32.const $push570=, 5 + i32.rem_s $push342=, $pop151, $pop570 + i32.ne $push343=, $pop149, $pop342 + br_if 1, $pop343 # 1: down to label0 +# BB#81: # %if.end522 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + i32.load $push153=, 8($6) + i32.load $push155=, 0($2) + i32.const $push571=, 6 + i32.rem_s $push344=, $pop155, $pop571 + i32.ne $push345=, $pop153, $pop344 + br_if 1, $pop345 # 1: down to label0 +# BB#82: # %lor.lhs.false528 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push152=, 4($6) + i32.load $push154=, 0($3) + i32.const $push572=, 5 + i32.rem_s $push346=, $pop154, $pop572 + i32.ne $push347=, $pop152, $pop346 + br_if 1, $pop347 # 1: down to label0 +# BB#83: # %if.end535 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + call sq1414146@FUNCTION, $6, $1 + i32.load $push156=, 0($6) + i32.load $push158=, 0($1) + i32.const $push573=, 14 + i32.div_s $push348=, $pop158, $pop573 + i32.ne $push349=, $pop156, $pop348 + br_if 1, $pop349 # 1: down to label0 +# BB#84: # %lor.lhs.false542 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push157=, 12($6) + i32.load $push159=, 0($4) + i32.const $push574=, 6 + i32.div_s $push350=, $pop159, $pop574 + i32.ne $push351=, $pop157, $pop350 + br_if 1, $pop351 # 1: down to label0 +# BB#85: # %if.end549 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + i32.load $push161=, 8($6) + i32.load $push163=, 0($2) + i32.const $push575=, 14 + i32.div_s $push352=, $pop163, $pop575 + i32.ne $push353=, $pop161, $pop352 + br_if 1, $pop353 # 1: down to label0 +# BB#86: # %lor.lhs.false555 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push160=, 4($6) + i32.load $push162=, 0($3) + i32.const $push576=, 14 + i32.div_s $push354=, $pop162, $pop576 + i32.ne $push355=, $pop160, $pop354 + br_if 1, $pop355 # 1: down to label0 +# BB#87: # %if.end562 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + call sr1414146@FUNCTION, $6, $1 + i32.load $push164=, 0($6) + i32.load $push166=, 0($1) + i32.const $push577=, 14 + i32.rem_s $push356=, $pop166, $pop577 + i32.ne $push357=, $pop164, $pop356 + br_if 1, $pop357 # 1: down to label0 +# BB#88: # %lor.lhs.false569 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push165=, 12($6) + i32.load $push167=, 0($4) + i32.const $push578=, 6 + i32.rem_s $push358=, $pop167, $pop578 + i32.ne $push359=, $pop165, $pop358 + br_if 1, $pop359 # 1: down to label0 +# BB#89: # %if.end576 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + i32.load $push169=, 8($6) + i32.load $push171=, 0($2) + i32.const $push579=, 14 + i32.rem_s $push360=, $pop171, $pop579 + i32.ne $push361=, $pop169, $pop360 + br_if 1, $pop361 # 1: down to label0 +# BB#90: # %lor.lhs.false582 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push168=, 4($6) + i32.load $push170=, 0($3) + i32.const $push580=, 14 + i32.rem_s $push362=, $pop170, $pop580 + i32.ne $push363=, $pop168, $pop362 + br_if 1, $pop363 # 1: down to label0 +# BB#91: # %if.end589 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + call sq7777@FUNCTION, $6, $1 + i32.load $push172=, 0($6) + i32.load $push174=, 0($1) + i32.const $push581=, 7 + i32.div_s $push364=, $pop174, $pop581 + i32.ne $push365=, $pop172, $pop364 + br_if 1, $pop365 # 1: down to label0 +# BB#92: # %lor.lhs.false596 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push173=, 12($6) + i32.load $push175=, 0($4) + i32.const $push582=, 7 + i32.div_s $push366=, $pop175, $pop582 + i32.ne $push367=, $pop173, $pop366 + br_if 1, $pop367 # 1: down to label0 +# BB#93: # %if.end603 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + i32.load $push177=, 8($6) + i32.load $push179=, 0($2) + i32.const $push583=, 7 + i32.div_s $push368=, $pop179, $pop583 + i32.ne $push369=, $pop177, $pop368 + br_if 1, $pop369 # 1: down to label0 +# BB#94: # %lor.lhs.false609 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push176=, 4($6) + i32.load $push178=, 0($3) + i32.const $push584=, 7 + i32.div_s $push370=, $pop178, $pop584 + i32.ne $push371=, $pop176, $pop370 + br_if 1, $pop371 # 1: down to label0 +# BB#95: # %if.end616 + # in Loop: Header=BB24_51 Depth=1 + copy_local $5=, $6 + #APP + #NO_APP + call sr7777@FUNCTION, $6, $1 + i32.load $push180=, 0($6) + i32.load $push182=, 0($1) + i32.const $push585=, 7 + i32.rem_s $push372=, $pop182, $pop585 + i32.ne $push373=, $pop180, $pop372 + br_if 1, $pop373 # 1: down to label0 +# BB#96: # %lor.lhs.false623 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push181=, 12($6) + i32.load $push183=, 0($4) + i32.const $push586=, 7 + i32.rem_s $push374=, $pop183, $pop586 + i32.ne $push375=, $pop181, $pop374 + br_if 1, $pop375 # 1: down to label0 +# BB#97: # %if.end630 + # in Loop: Header=BB24_51 Depth=1 + copy_local $1=, $6 + #APP + #NO_APP + i32.load $push185=, 8($6) + i32.load $push187=, 0($2) + i32.const $push587=, 7 + i32.rem_s $push376=, $pop187, $pop587 + i32.ne $push377=, $pop185, $pop376 + br_if 1, $pop377 # 1: down to label0 +# BB#98: # %lor.lhs.false636 + # in Loop: Header=BB24_51 Depth=1 + i32.load $push184=, 4($6) + i32.load $push186=, 0($3) + i32.const $push588=, 7 + i32.rem_s $push378=, $pop186, $pop588 + i32.ne $push379=, $pop184, $pop378 + br_if 1, $pop379 # 1: down to label0 +# BB#99: # %if.end643 + # in Loop: Header=BB24_51 Depth=1 + copy_local $1=, $6 + #APP + #NO_APP + i32.const $push380=, 1 + i32.add $1=, $0, $pop380 + i32.const $0=, 1 + i32.const $push589=, 2 + i32.lt_u $push381=, $1, $pop589 + br_if 0, $pop381 # 0: up to label2 +# BB#100: # %for.end646 + end_loop + i32.const $push389=, 0 + i32.const $push387=, 32 + i32.add $push388=, $6, $pop387 + i32.store __stack_pointer($pop389), $pop388 + i32.const $push382=, 0 + return $pop382 +.LBB24_101: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end24: + .size main, .Lfunc_end24-main + # -- End function + .hidden u # @u + .type u,@object + .section .data.u,"aw",@progbits + .globl u + .p2align 4 +u: + .int32 73 # 0x49 + .int32 65531 # 0xfffb + .int32 0 # 0x0 + .int32 174 # 0xae + .int32 1 # 0x1 + .int32 8173 # 0x1fed + .int32 4294967295 # 0xffffffff + .int32 4294967232 # 0xffffffc0 + .size u, 32 + + .hidden s # @s + .type s,@object + .section .data.s,"aw",@progbits + .globl s + .p2align 4 +s: + .int32 73 # 0x49 + .int32 4294958173 # 0xffffdc5d + .int32 32761 # 0x7ff9 + .int32 8191 # 0x1fff + .int32 9903 # 0x26af + .int32 4294967295 # 0xffffffff + .int32 4294959973 # 0xffffe365 + .int32 0 # 0x0 + .size s, 32 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr53688.c.s b/src/binaryen/test/torture-s/pr53688.c.s new file mode 100644 index 0000000000..e93d2e4b01 --- /dev/null +++ b/src/binaryen/test/torture-s/pr53688.c.s @@ -0,0 +1,97 @@ + .text + .file "pr53688.c" + .section .text.init,"ax",@progbits + .hidden init # -- Begin function init + .globl init + .type init,@function +init: # @init +# BB#0: # %entry + i32.const $push1=, 0 + i64.const $push0=, 6147487297207357523 + i64.store p+9($pop1):p2align=0, $pop0 + i32.const $push7=, 0 + i32.const $push6=, 0 + i32.load8_u $push2=, .L.str+8($pop6) + i32.store8 p+8($pop7), $pop2 + i32.const $push5=, 0 + i32.const $push4=, 0 + i64.load $push3=, .L.str($pop4):p2align=0 + i64.store p($pop5):p2align=0, $pop3 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size init, .Lfunc_end0-init + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64 +# BB#0: # %entry + call init@FUNCTION + i32.const $push19=, 0 + i32.const $push0=, 32 + i32.store8 headline+9($pop19), $pop0 + i32.const $push18=, 0 + i32.const $push17=, 0 + i32.load8_u $push1=, p+8($pop17) + i32.store8 headline+8($pop18), $pop1 + i32.const $push16=, 0 + i32.const $push15=, 0 + i64.load $push2=, p($pop15):p2align=0 + i64.store headline($pop16), $pop2 + i32.const $push14=, 0 + i32.const $push13=, 0 + i64.load $push12=, p+9($pop13):p2align=0 + tee_local $push11=, $0=, $pop12 + i64.store headline+10($pop14):p2align=1, $pop11 + i32.const $push4=, headline+18 + i32.const $push10=, 32 + i32.const $push3=, 238 + i32.call $drop=, memset@FUNCTION, $pop4, $pop10, $pop3 + block + i32.wrap/i64 $push5=, $0 + i32.const $push6=, 255 + i32.and $push7=, $pop5, $pop6 + i32.const $push8=, 83 + i32.ne $push9=, $pop7, $pop8 + br_if 0, $pop9 # 0: down to label0 +# BB#1: # %if.end + i32.const $push20=, 0 + return $pop20 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden p # @p + .type p,@object + .section .bss.p,"aw",@nobits + .globl p +p: + .skip 17 + .size p, 17 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "FOOBARFOO" + .size .L.str, 10 + + .hidden headline # @headline + .type headline,@object + .section .bss.headline,"aw",@nobits + .globl headline + .p2align 4 +headline: + .skip 256 + .size headline, 256 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr54471.c.s b/src/binaryen/test/torture-s/pr54471.c.s new file mode 100644 index 0000000000..402e4ee8d6 --- /dev/null +++ b/src/binaryen/test/torture-s/pr54471.c.s @@ -0,0 +1,104 @@ + .text + .file "pr54471.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i64, i64, i32 + .local i64, i64, i32 +# BB#0: # %entry + i32.const $push11=, 0 + i32.const $push9=, 0 + i32.load $push8=, __stack_pointer($pop9) + i32.const $push10=, 32 + i32.sub $push20=, $pop8, $pop10 + tee_local $push19=, $6=, $pop20 + i32.store __stack_pointer($pop11), $pop19 + block + i32.eqz $push28=, $3 + br_if 0, $pop28 # 0: down to label0 +# BB#1: # %for.body.preheader + i64.const $5=, 0 + i64.const $4=, 1 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + call __multi3@FUNCTION, $6, $1, $2, $4, $5 + i32.const $push15=, 16 + i32.add $push16=, $6, $pop15 + call __multi3@FUNCTION, $pop16, $1, $2, $1, $2 + i32.const $push17=, 16 + i32.add $push18=, $6, $pop17 + i32.const $push25=, 8 + i32.add $push0=, $pop18, $pop25 + i64.load $2=, 0($pop0) + i32.const $push24=, 8 + i32.add $push1=, $6, $pop24 + i64.load $5=, 0($pop1) + i64.load $1=, 16($6) + i64.load $4=, 0($6) + i32.const $push23=, -1 + i32.add $push22=, $3, $pop23 + tee_local $push21=, $3=, $pop22 + br_if 0, $pop21 # 0: up to label1 +# BB#3: # %for.end + end_loop + i64.const $push26=, 14348907 + i64.xor $push2=, $4, $pop26 + i64.or $push3=, $pop2, $5 + i64.eqz $push4=, $pop3 + i32.eqz $push29=, $pop4 + br_if 0, $pop29 # 0: down to label0 +# BB#4: # %if.end + i64.const $push27=, 14348907 + i64.store 0($0), $pop27 + i32.const $push5=, 8 + i32.add $push6=, $0, $pop5 + i64.const $push7=, 0 + i64.store 0($pop6), $pop7 + i32.const $push14=, 0 + i32.const $push12=, 32 + i32.add $push13=, $6, $pop12 + i32.store __stack_pointer($pop14), $pop13 + return +.LBB0_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push12=, $pop4, $pop6 + tee_local $push11=, $0=, $pop12 + i32.store __stack_pointer($pop7), $pop11 + i64.const $push2=, 3 + i64.const $push1=, 0 + i32.const $push0=, 4 + call foo@FUNCTION, $0, $pop2, $pop1, $pop0 + i32.const $push10=, 0 + i32.const $push8=, 16 + i32.add $push9=, $0, $pop8 + i32.store __stack_pointer($pop10), $pop9 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr54937.c.s b/src/binaryen/test/torture-s/pr54937.c.s new file mode 100644 index 0000000000..62535241f7 --- /dev/null +++ b/src/binaryen/test/torture-s/pr54937.c.s @@ -0,0 +1,91 @@ + .text + .file "pr54937.c" + .section .text.t,"ax",@progbits + .hidden t # -- Begin function t + .globl t + .type t,@function +t: # @t + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push0=, 1 + i32.lt_s $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %for.body.preheader + i32.const $1=, 0 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + block + i32.eqz $push12=, $1 + br_if 0, $pop12 # 0: down to label2 +# BB#3: # %if.then + # in Loop: Header=BB0_2 Depth=1 + i32.const $push5=, 0 + i32.const $push4=, 0 + i32.load $push2=, terminate_me($pop4) + call_indirect $pop5, $pop2 +.LBB0_4: # %if.end + # in Loop: Header=BB0_2 Depth=1 + end_block # label2: + i32.const $push11=, a + i32.add $push3=, $1, $pop11 + i32.const $push10=, 0 + i32.store 0($pop3), $pop10 + i32.const $push9=, 4 + i32.add $1=, $1, $pop9 + i32.const $push8=, -1 + i32.add $push7=, $0, $pop8 + tee_local $push6=, $0=, $pop7 + br_if 0, $pop6 # 0: up to label1 +.LBB0_5: # %for.end + end_loop + end_block # label0: + copy_local $push13=, $1 + # fallthrough-return: $pop13 + .endfunc +.Lfunc_end0: + .size t, .Lfunc_end0-t + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, exit@FUNCTION + i32.store terminate_me($pop1), $pop0 + i32.const $push2=, 100 + i32.call $drop=, t@FUNCTION, $pop2 + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden terminate_me # @terminate_me + .type terminate_me,@object + .section .bss.terminate_me,"aw",@nobits + .globl terminate_me + .p2align 2 +terminate_me: + .int32 0 + .size terminate_me, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .skip 4 + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr54985.c.s b/src/binaryen/test/torture-s/pr54985.c.s new file mode 100644 index 0000000000..2bbb6e5874 --- /dev/null +++ b/src/binaryen/test/torture-s/pr54985.c.s @@ -0,0 +1,89 @@ + .text + .file "pr54985.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $5=, 0 + block + i32.eqz $push8=, $1 + br_if 0, $pop8 # 0: down to label0 +# BB#1: # %while.body.lr.ph + i32.const $push1=, 4 + i32.add $4=, $0, $pop1 + i32.load $0=, 0($0) +.LBB0_2: # %while.cond + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push4=, -1 + i32.add $push3=, $1, $pop4 + tee_local $push2=, $1=, $pop3 + i32.eqz $push9=, $pop2 + br_if 1, $pop9 # 1: down to label0 +# BB#3: # %while.cond.while.body_crit_edge + # in Loop: Header=BB0_2 Depth=1 + i32.load $push7=, 0($4) + tee_local $push6=, $2=, $pop7 + i32.lt_s $3=, $pop6, $0 + i32.const $push5=, 4 + i32.add $push0=, $4, $pop5 + copy_local $4=, $pop0 + copy_local $0=, $2 + br_if 0, $3 # 0: up to label1 +# BB#4: + end_loop + i32.const $5=, 1 +.LBB0_5: # %cleanup + end_block # label0: + copy_local $push10=, $5 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push14=, $pop4, $pop6 + tee_local $push13=, $0=, $pop14 + i32.store __stack_pointer($pop7), $pop13 + i64.const $push0=, 4294967298 + i64.store 8($0), $pop0 + block + i32.const $push11=, 8 + i32.add $push12=, $0, $pop11 + i32.const $push1=, 2 + i32.call $push2=, foo@FUNCTION, $pop12, $pop1 + br_if 0, $pop2 # 0: down to label2 +# BB#1: # %if.end + i32.const $push10=, 0 + i32.const $push8=, 16 + i32.add $push9=, $0, $pop8 + i32.store __stack_pointer($pop10), $pop9 + i32.const $push3=, 0 + return $pop3 +.LBB1_2: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr55137.c.s b/src/binaryen/test/torture-s/pr55137.c.s new file mode 100644 index 0000000000..b73cdc20aa --- /dev/null +++ b/src/binaryen/test/torture-s/pr55137.c.s @@ -0,0 +1,62 @@ + .text + .file "pr55137.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2147483645 + i32.gt_s $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.add $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.add $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size baz, .Lfunc_end2-baz + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr55750.c.s b/src/binaryen/test/torture-s/pr55750.c.s new file mode 100644 index 0000000000..8031bd7d17 --- /dev/null +++ b/src/binaryen/test/torture-s/pr55750.c.s @@ -0,0 +1,75 @@ + .text + .file "pr55750.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, arr + i32.add $push7=, $pop1, $pop2 + tee_local $push6=, $0=, $pop7 + i32.load8_u $push3=, 0($0) + i32.const $push5=, 2 + i32.add $push4=, $pop3, $pop5 + i32.store8 0($pop6), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push13=, 0 + i32.const $push1=, 254 + i32.store8 arr+4($pop13), $pop1 + i32.const $push12=, 0 + i32.const $push2=, 127 + i32.store8 arr($pop12), $pop2 + i32.const $push11=, 0 + call foo@FUNCTION, $pop11 + i32.const $push3=, 1 + call foo@FUNCTION, $pop3 + block + i32.const $push10=, 0 + i32.load8_u $push4=, arr($pop10) + i32.const $push5=, 129 + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %entry + i32.const $push14=, 0 + i32.load8_u $push0=, arr+4($pop14) + i32.const $push7=, 255 + i32.and $push8=, $pop0, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#2: # %if.end + i32.const $push9=, 0 + return $pop9 +.LBB1_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden arr # @arr + .type arr,@object + .section .bss.arr,"aw",@nobits + .globl arr + .p2align 2 +arr: + .skip 8 + .size arr, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr55875.c.s b/src/binaryen/test/torture-s/pr55875.c.s new file mode 100644 index 0000000000..c04fefebfd --- /dev/null +++ b/src/binaryen/test/torture-s/pr55875.c.s @@ -0,0 +1,70 @@ + .text + .file "pr55875.c" + .section .text.t,"ax",@progbits + .hidden t # -- Begin function t + .globl t + .type t,@function +t: # @t + .param i32 + .result i32 +# BB#0: # %entry + block + block + i32.eqz $push3=, $0 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %if.end + i32.const $push0=, 256 + i32.ge_s $push1=, $0, $pop0 + br_if 1, $pop1 # 1: down to label0 +# BB#2: # %if.end3 + return $0 +.LBB0_3: # %if.then + end_block # label1: + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable +.LBB0_4: # %if.then2 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size t, .Lfunc_end0-t + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $0=, 5 +.LBB1_1: # %for.cond + # =>This Inner Loop Header: Depth=1 + loop i32 # label2: + i32.const $push2=, 255 + i32.and $push0=, $0, $pop2 + i32.call $drop=, t@FUNCTION, $pop0 + i32.const $push1=, 1 + i32.add $0=, $0, $pop1 + br 0 # 0: up to label2 +.LBB1_2: + end_loop + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 4 +a: + .skip 1004 + .size a, 1004 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr56051.c.s b/src/binaryen/test/torture-s/pr56051.c.s new file mode 100644 index 0000000000..36f349c639 --- /dev/null +++ b/src/binaryen/test/torture-s/pr56051.c.s @@ -0,0 +1,17 @@ + .text + .file "pr56051.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr56205.c.s b/src/binaryen/test/torture-s/pr56205.c.s new file mode 100644 index 0000000000..95dd1209b2 --- /dev/null +++ b/src/binaryen/test/torture-s/pr56205.c.s @@ -0,0 +1,289 @@ + .text + .file "pr56205.c" + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 + .param i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push16=, 0 + i32.const $push14=, 0 + i32.load $push13=, __stack_pointer($pop14) + i32.const $push15=, 32 + i32.sub $push23=, $pop13, $pop15 + tee_local $push22=, $5=, $pop23 + i32.store __stack_pointer($pop16), $pop22 + i32.store 28($5), $2 + block + br_if 0, $0 # 0: down to label0 +# BB#1: # %entry + i32.const $push24=, 0 + i32.load8_u $push0=, c($pop24) + i32.const $push1=, 255 + i32.and $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#2: # %if.then + i32.const $push3=, 0 + i32.const $push25=, 0 + i32.load $push4=, b($pop25) + i32.const $push5=, 1 + i32.add $push6=, $pop4, $pop5 + i32.store b($pop3), $pop6 +.LBB0_3: # %if.end + end_block # label0: + i32.const $push30=, 0 + i32.const $push29=, 0 + i32.load $push7=, a($pop29) + i32.const $push8=, 1 + i32.add $push28=, $pop7, $pop8 + tee_local $push27=, $2=, $pop28 + i32.store a($pop30), $pop27 + i32.const $push26=, .L.str.3 + i32.const $push9=, .L.str.1 + i32.select $0=, $pop26, $pop9, $0 + block + block + i32.eqz $push33=, $1 + br_if 0, $pop33 # 0: down to label2 +# BB#4: # %land.rhs.i + i32.load $3=, 28($5) + i32.load8_u $4=, 0($1) + i32.store 20($5), $2 + i32.store 16($5), $0 + i32.const $push10=, .L.str.4 + i32.const $push31=, .L.str.3 + i32.select $push11=, $pop10, $pop31, $4 + i32.store 24($5), $pop11 + i32.const $push20=, 16 + i32.add $push21=, $5, $pop20 + call f1@FUNCTION, $5, $pop21 + i32.load8_u $push12=, 0($1) + i32.eqz $push34=, $pop12 + br_if 1, $pop34 # 1: down to label1 +# BB#5: # %if.then.i + call f2@FUNCTION, $1, $3 + br 1 # 1: down to label1 +.LBB0_6: # %if.end.critedge.i + end_block # label2: + i32.const $push32=, .L.str.3 + i32.store 8($5), $pop32 + i32.store 4($5), $2 + i32.store 0($5), $0 + call f1@FUNCTION, $5, $5 +.LBB0_7: # %f3.exit + end_block # label1: + i32.const $push19=, 0 + i32.const $push17=, 32 + i32.add $push18=, $5, $pop17 + i32.store __stack_pointer($pop19), $pop18 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f4, .Lfunc_end0-f4 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push14=, 0 + i32.const $push12=, 0 + i32.load $push11=, __stack_pointer($pop12) + i32.const $push13=, 32 + i32.sub $push22=, $pop11, $pop13 + tee_local $push21=, $0=, $pop22 + i32.store __stack_pointer($pop14), $pop21 + #APP + #NO_APP + i32.const $push1=, 16 + i32.add $push2=, $0, $pop1 + i32.const $push3=, 26 + i32.store 0($pop2), $pop3 + i64.const $push4=, 4622945017495814144 + i64.store 8($0), $pop4 + i32.const $push5=, .L.str.1 + i32.store 0($0), $pop5 + i32.const $push20=, 0 + i32.const $push6=, .L.str + call f4@FUNCTION, $pop20, $pop6, $0 + block + i32.const $push19=, 0 + i32.load $push7=, a($pop19) + i32.const $push18=, 1 + i32.ne $push8=, $pop7, $pop18 + br_if 0, $pop8 # 0: down to label3 +# BB#1: # %entry + i32.const $push24=, 0 + i32.load $push0=, b($pop24) + i32.const $push23=, 1 + i32.ne $push9=, $pop0, $pop23 + br_if 0, $pop9 # 0: down to label3 +# BB#2: # %if.end + i32.const $push17=, 0 + i32.const $push15=, 32 + i32.add $push16=, $0, $pop15 + i32.store __stack_pointer($pop17), $pop16 + i32.const $push10=, 0 + return $pop10 +.LBB1_3: # %if.then + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .section .text.f1,"ax",@progbits + .type f1,@function # -- Begin function f1 +f1: # @f1 + .param i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push16=, 0 + i32.const $push14=, 0 + i32.load $push13=, __stack_pointer($pop14) + i32.const $push15=, 16 + i32.sub $push23=, $pop13, $pop15 + tee_local $push22=, $4=, $pop23 + i32.store __stack_pointer($pop16), $pop22 + #APP + #NO_APP + i32.const $push0=, 4 + i32.add $push21=, $1, $pop0 + tee_local $push20=, $2=, $pop21 + i32.store 12($4), $pop20 + block + i32.load $push1=, 0($1) + i32.const $push2=, .L.str.1 + i32.call $push3=, strcmp@FUNCTION, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label4 +# BB#1: # %lor.lhs.false + i32.const $push4=, 8 + i32.add $push25=, $1, $pop4 + tee_local $push24=, $3=, $pop25 + i32.store 12($4), $pop24 + i32.load $push5=, 0($2) + i32.const $push6=, 1 + i32.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label4 +# BB#2: # %lor.lhs.false7 + i32.const $push8=, 12 + i32.add $push9=, $1, $pop8 + i32.store 12($4), $pop9 + i32.load $push10=, 0($3) + i32.const $push11=, .L.str.4 + i32.call $push12=, strcmp@FUNCTION, $pop10, $pop11 + br_if 0, $pop12 # 0: down to label4 +# BB#3: # %if.end13 + i32.const $push19=, 0 + i32.const $push17=, 16 + i32.add $push18=, $4, $pop17 + i32.store __stack_pointer($pop19), $pop18 + return +.LBB2_4: # %if.then12 + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size f1, .Lfunc_end2-f1 + # -- End function + .section .text.f2,"ax",@progbits + .type f2,@function # -- Begin function f2 +f2: # @f2 + .param i32, i32 +# BB#0: # %entry + #APP + #NO_APP + block + i32.const $push0=, .L.str + i32.call $push1=, strcmp@FUNCTION, $0, $pop0 + br_if 0, $pop1 # 0: down to label5 +# BB#1: # %lor.lhs.false + i32.load $push2=, 0($1) + i32.const $push3=, .L.str.1 + i32.call $push4=, strcmp@FUNCTION, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label5 +# BB#2: # %lor.lhs.false3 + i32.const $push5=, 11 + i32.add $push6=, $1, $pop5 + i32.const $push7=, -8 + i32.and $push15=, $pop6, $pop7 + tee_local $push14=, $1=, $pop15 + f64.load $push8=, 0($pop14) + f64.const $push9=, 0x1.8p3 + f64.ne $push10=, $pop8, $pop9 + br_if 0, $pop10 # 0: down to label5 +# BB#3: # %lor.lhs.false7 + i32.load $push11=, 8($1) + i32.const $push12=, 26 + i32.ne $push13=, $pop11, $pop12 + br_if 0, $pop13 # 0: down to label5 +# BB#4: # %if.end + return +.LBB3_5: # %if.then + end_block # label5: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size f2, .Lfunc_end3-f2 + # -- End function + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 4 +c: + .skip 128 + .size c, 128 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "baz" + .size .L.str, 4 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "foo" + .size .L.str.1, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + .type .L.str.3,@object # @.str.3 + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str.3: + .skip 1 + .size .L.str.3, 1 + + .type .L.str.4,@object # @.str.4 +.L.str.4: + .asciz "bar" + .size .L.str.4, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype strcmp, i32, i32, i32 diff --git a/src/binaryen/test/torture-s/pr56250.c.s b/src/binaryen/test/torture-s/pr56250.c.s new file mode 100644 index 0000000000..1e6d53305d --- /dev/null +++ b/src/binaryen/test/torture-s/pr56250.c.s @@ -0,0 +1,17 @@ + .text + .file "pr56250.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr56799.c.s b/src/binaryen/test/torture-s/pr56799.c.s new file mode 100644 index 0000000000..66723d73d6 --- /dev/null +++ b/src/binaryen/test/torture-s/pr56799.c.s @@ -0,0 +1,122 @@ + .text + .file "pr56799.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push16=, $pop9, $pop11 + tee_local $push15=, $0=, $pop16 + i32.store __stack_pointer($pop12), $pop15 + i64.const $push2=, 4295032832 + i64.store 8($0), $pop2 + block + i32.const $push13=, 8 + i32.add $push14=, $0, $pop13 + i32.call $push4=, foo@FUNCTION, $pop14 + i32.const $push3=, 2 + i32.ne $push5=, $pop4, $pop3 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %entry + i32.const $push17=, 0 + i32.load $push0=, lo($pop17) + br_if 0, $pop0 # 0: down to label0 +# BB#2: # %entry + i32.const $push18=, 0 + i32.load $push1=, hi($pop18) + i32.const $push6=, 1 + i32.ne $push7=, $pop1, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#3: # %if.then + i32.const $push8=, 0 + call exit@FUNCTION, $pop8 + unreachable +.LBB0_4: # %if.end + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + block + block + block + i32.load $push12=, 0($0) + tee_local $push11=, $1=, $pop12 + i32.const $push10=, 65535 + i32.and $push0=, $pop11, $pop10 + i32.eqz $push18=, $pop0 + br_if 0, $pop18 # 0: down to label3 +# BB#1: # %if.then + i32.const $push2=, 0 + i32.const $push1=, 1 + i32.store lo($pop2), $pop1 + i32.load $2=, 4($0) + i32.const $push13=, 65535 + i32.le_u $push4=, $1, $pop13 + br_if 1, $pop4 # 1: down to label2 + br 2 # 2: down to label1 +.LBB1_2: + end_block # label3: + i32.const $2=, 0 + i32.const $push17=, 65535 + i32.gt_u $push3=, $1, $pop17 + br_if 1, $pop3 # 1: down to label1 +.LBB1_3: # %if.end.if.end10_crit_edge + end_block # label2: + i32.load $push9=, 4($0) + i32.add $push7=, $pop9, $2 + return $pop7 +.LBB1_4: # %if.then7 + end_block # label1: + i32.const $push6=, 0 + i32.const $push5=, 1 + i32.store hi($pop6), $pop5 + i32.load $push16=, 4($0) + tee_local $push15=, $0=, $pop16 + i32.add $push14=, $0, $2 + i32.add $push8=, $pop15, $pop14 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .hidden hi # @hi + .type hi,@object + .section .bss.hi,"aw",@nobits + .globl hi + .p2align 2 +hi: + .int32 0 # 0x0 + .size hi, 4 + + .hidden lo # @lo + .type lo,@object + .section .bss.lo,"aw",@nobits + .globl lo + .p2align 2 +lo: + .int32 0 # 0x0 + .size lo, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr56837.c.s b/src/binaryen/test/torture-s/pr56837.c.s new file mode 100644 index 0000000000..8326466f80 --- /dev/null +++ b/src/binaryen/test/torture-s/pr56837.c.s @@ -0,0 +1,87 @@ + .text + .file "pr56837.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .local i32 +# BB#0: # %entry + i32.const $0=, -8192 +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push5=, a+8192 + i32.add $push0=, $0, $pop5 + i64.const $push4=, 4294967295 + i64.store 0($pop0), $pop4 + i32.const $push3=, 8 + i32.add $push2=, $0, $pop3 + tee_local $push1=, $0=, $pop2 + br_if 0, $pop1 # 0: up to label0 +# BB#2: # %for.end + end_loop + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + call foo@FUNCTION + i32.const $0=, a + i32.const $1=, -1 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label2: + i32.load $push1=, 0($0) + i32.const $push6=, -1 + i32.ne $push2=, $pop1, $pop6 + br_if 1, $pop2 # 1: down to label1 +# BB#2: # %for.body + # in Loop: Header=BB1_1 Depth=1 + i32.const $push7=, 4 + i32.add $push3=, $0, $pop7 + i32.load $push0=, 0($pop3) + br_if 1, $pop0 # 1: down to label1 +# BB#3: # %for.cond + # in Loop: Header=BB1_1 Depth=1 + i32.const $push12=, 8 + i32.add $0=, $0, $pop12 + i32.const $push11=, 1 + i32.add $push10=, $1, $pop11 + tee_local $push9=, $1=, $pop10 + i32.const $push8=, 1022 + i32.le_u $push4=, $pop9, $pop8 + br_if 0, $pop4 # 0: up to label2 +# BB#4: # %for.end + end_loop + i32.const $push5=, 0 + return $pop5 +.LBB1_5: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 4 +a: + .skip 8192 + .size a, 8192 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr56866.c.s b/src/binaryen/test/torture-s/pr56866.c.s new file mode 100644 index 0000000000..5f7d697ea0 --- /dev/null +++ b/src/binaryen/test/torture-s/pr56866.c.s @@ -0,0 +1,231 @@ + .text + .file "pr56866.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push50=, 0 + i32.const $push48=, 0 + i32.load $push47=, __stack_pointer($pop48) + i32.const $push49=, 7712 + i32.sub $push105=, $pop47, $pop49 + tee_local $push104=, $4=, $pop105 + i32.store __stack_pointer($pop50), $pop104 + i32.const $1=, 0 + i32.const $push54=, 5664 + i32.add $push55=, $4, $pop54 + i32.const $push103=, 0 + i32.const $push102=, 2048 + i32.call $drop=, memset@FUNCTION, $pop55, $pop103, $pop102 + i32.const $push56=, 2592 + i32.add $push57=, $4, $pop56 + i32.const $push101=, 0 + i32.const $push0=, 1024 + i32.call $drop=, memset@FUNCTION, $pop57, $pop101, $pop0 + i32.const $push58=, 1056 + i32.add $push59=, $4, $pop58 + i32.const $push100=, 0 + i32.const $push1=, 512 + i32.call $drop=, memset@FUNCTION, $pop59, $pop100, $pop1 + i32.const $push60=, 288 + i32.add $push61=, $4, $pop60 + i32.const $push99=, 0 + i32.const $push2=, 256 + i32.call $drop=, memset@FUNCTION, $pop61, $pop99, $pop2 + i32.const $push3=, 19088743 + i32.store 2592($4), $pop3 + i64.const $push4=, 81985529216486895 + i64.store 5664($4), $pop4 + i32.const $push5=, 17767 + i32.store16 1056($4), $pop5 + i32.const $push6=, 115 + i32.store8 288($4), $pop6 + i32.const $push62=, 5664 + i32.add $push63=, $4, $pop62 + i32.store 28($4), $pop63 + i32.const $push64=, 2592 + i32.add $push65=, $4, $pop64 + i32.store 24($4), $pop65 + i32.const $push66=, 1056 + i32.add $push67=, $4, $pop66 + i32.store 20($4), $pop67 + i32.const $push68=, 288 + i32.add $push69=, $4, $pop68 + i32.store 16($4), $pop69 + i32.const $push70=, 24 + i32.add $0=, $4, $pop70 + i32.const $push71=, 20 + i32.add $2=, $4, $pop71 + i32.const $push72=, 16 + i32.add $3=, $4, $pop72 + #APP + #NO_APP +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push75=, 3616 + i32.add $push76=, $4, $pop75 + i32.add $push10=, $pop76, $1 + i32.const $push73=, 5664 + i32.add $push74=, $4, $pop73 + i32.add $push7=, $pop74, $1 + i64.load $push8=, 0($pop7) + i64.const $push110=, 56 + i64.rotl $push9=, $pop8, $pop110 + i64.store 0($pop10), $pop9 + i32.const $push109=, 8 + i32.add $push108=, $1, $pop109 + tee_local $push107=, $1=, $pop108 + i32.const $push106=, 2048 + i32.ne $push11=, $pop107, $pop106 + br_if 0, $pop11 # 0: up to label0 +# BB#2: # %for.body16.preheader + end_loop + i32.const $1=, 0 +.LBB0_3: # %for.body16 + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push79=, 1568 + i32.add $push80=, $4, $pop79 + i32.add $push15=, $pop80, $1 + i32.const $push77=, 2592 + i32.add $push78=, $4, $pop77 + i32.add $push12=, $pop78, $1 + i32.load $push13=, 0($pop12) + i32.const $push115=, 24 + i32.rotl $push14=, $pop13, $pop115 + i32.store 0($pop15), $pop14 + i32.const $push114=, 4 + i32.add $push113=, $1, $pop114 + tee_local $push112=, $1=, $pop113 + i32.const $push111=, 1024 + i32.ne $push16=, $pop112, $pop111 + br_if 0, $pop16 # 0: up to label1 +# BB#4: # %for.body28.preheader + end_loop + i32.const $1=, 0 +.LBB0_5: # %for.body28 + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push83=, 544 + i32.add $push84=, $4, $pop83 + i32.add $push21=, $pop84, $1 + i32.const $push81=, 1056 + i32.add $push82=, $4, $pop81 + i32.add $push17=, $pop82, $1 + i32.load16_u $push123=, 0($pop17) + tee_local $push122=, $0=, $pop123 + i32.const $push121=, 9 + i32.shr_u $push19=, $pop122, $pop121 + i32.const $push120=, 7 + i32.shl $push18=, $0, $pop120 + i32.or $push20=, $pop19, $pop18 + i32.store16 0($pop21), $pop20 + i32.const $push119=, 2 + i32.add $push118=, $1, $pop119 + tee_local $push117=, $1=, $pop118 + i32.const $push116=, 512 + i32.ne $push22=, $pop117, $pop116 + br_if 0, $pop22 # 0: up to label2 +# BB#6: # %for.body43.preheader + end_loop + i32.const $1=, 0 +.LBB0_7: # %for.body43 + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.const $push87=, 32 + i32.add $push88=, $4, $pop87 + i32.add $push27=, $pop88, $1 + i32.const $push85=, 288 + i32.add $push86=, $4, $pop85 + i32.add $push23=, $pop86, $1 + i32.load8_u $push131=, 0($pop23) + tee_local $push130=, $0=, $pop131 + i32.const $push129=, 5 + i32.shr_u $push25=, $pop130, $pop129 + i32.const $push128=, 3 + i32.shl $push24=, $0, $pop128 + i32.or $push26=, $pop25, $pop24 + i32.store8 0($pop27), $pop26 + i32.const $push127=, 1 + i32.add $push126=, $1, $pop127 + tee_local $push125=, $1=, $pop126 + i32.const $push124=, 256 + i32.ne $push28=, $pop125, $pop124 + br_if 0, $pop28 # 0: up to label3 +# BB#8: # %for.end55 + end_loop + i32.const $push89=, 1568 + i32.add $push90=, $4, $pop89 + i32.store 8($4), $pop90 + i32.const $push91=, 3616 + i32.add $push92=, $4, $pop91 + i32.store 12($4), $pop92 + i32.const $push93=, 544 + i32.add $push94=, $4, $pop93 + i32.store 4($4), $pop94 + i32.const $push95=, 32 + i32.add $push96=, $4, $pop95 + i32.store 0($4), $pop96 + i32.const $push97=, 8 + i32.add $1=, $4, $pop97 + i32.const $push98=, 4 + i32.add $0=, $4, $pop98 + #APP + #NO_APP + block + i64.load $push30=, 3616($4) + i64.const $push29=, -1224658842671273011 + i64.ne $push31=, $pop30, $pop29 + br_if 0, $pop31 # 0: down to label4 +# BB#9: # %lor.lhs.false + i64.load $push32=, 3624($4) + i64.eqz $push33=, $pop32 + i32.eqz $push132=, $pop33 + br_if 0, $pop132 # 0: down to label4 +# BB#10: # %if.end + i32.load $push35=, 1568($4) + i32.const $push34=, 1728127813 + i32.ne $push36=, $pop35, $pop34 + br_if 0, $pop36 # 0: down to label4 +# BB#11: # %lor.lhs.false67 + i32.load $push37=, 1572($4) + br_if 0, $pop37 # 0: down to label4 +# BB#12: # %if.end71 + i32.load16_u $push39=, 544($4) + i32.const $push38=, 45986 + i32.ne $push40=, $pop39, $pop38 + br_if 0, $pop40 # 0: down to label4 +# BB#13: # %lor.lhs.false76 + i32.load16_u $push41=, 546($4) + br_if 0, $pop41 # 0: down to label4 +# BB#14: # %if.end81 + i32.load8_u $push43=, 32($4) + i32.const $push42=, 155 + i32.ne $push44=, $pop43, $pop42 + br_if 0, $pop44 # 0: down to label4 +# BB#15: # %lor.lhs.false86 + i32.load8_u $push45=, 33($4) + br_if 0, $pop45 # 0: down to label4 +# BB#16: # %if.end91 + i32.const $push53=, 0 + i32.const $push51=, 7712 + i32.add $push52=, $4, $pop51 + i32.store __stack_pointer($pop53), $pop52 + i32.const $push46=, 0 + return $pop46 +.LBB0_17: # %if.then + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr56899.c.s b/src/binaryen/test/torture-s/pr56899.c.s new file mode 100644 index 0000000000..d866136524 --- /dev/null +++ b/src/binaryen/test/torture-s/pr56899.c.s @@ -0,0 +1,118 @@ + .text + .file "pr56899.c" + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, -214748365 + i32.mul $push1=, $0, $pop0 + i32.const $push2=, 2147483646 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 214748365 + i32.mul $push1=, $0, $pop0 + i32.const $push2=, 2147483646 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %if.end + return +.LBB1_2: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size f2, .Lfunc_end1-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, -214748365 + i32.mul $push1=, $0, $pop0 + i32.const $push2=, 2147483646 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label2 +# BB#1: # %if.end + return +.LBB2_2: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size f3, .Lfunc_end2-f3 + # -- End function + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 214748365 + i32.mul $push1=, $0, $pop0 + i32.const $push2=, 2147483646 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label3 +# BB#1: # %if.end + return +.LBB3_2: # %if.then + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size f4, .Lfunc_end3-f4 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 10 + call f1@FUNCTION, $pop0 + i32.const $push1=, -10 + call f2@FUNCTION, $pop1 + i32.const $push4=, 10 + call f3@FUNCTION, $pop4 + i32.const $push3=, -10 + call f4@FUNCTION, $pop3 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr56962.c.s b/src/binaryen/test/torture-s/pr56962.c.s new file mode 100644 index 0000000000..ad3e4d4bba --- /dev/null +++ b/src/binaryen/test/torture-s/pr56962.c.s @@ -0,0 +1,107 @@ + .text + .file "pr56962.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + block + i32.const $push0=, v+232 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 + .local i32, i64, i32, i64 +# BB#0: # %entry + i32.const $push2=, 5 + i32.mul $push36=, $2, $pop2 + tee_local $push35=, $3=, $pop36 + i32.const $push0=, 2 + i32.shl $push1=, $1, $pop0 + i32.add $push3=, $pop35, $pop1 + i32.const $push4=, 3 + i32.shl $push5=, $pop3, $pop4 + i32.add $push6=, $0, $pop5 + i64.load $4=, 0($pop6) + i32.const $push34=, 3 + i32.mul $push33=, $1, $pop34 + tee_local $push32=, $5=, $pop33 + i32.add $push7=, $3, $pop32 + i32.const $push31=, 3 + i32.shl $push8=, $pop7, $pop31 + i32.add $push9=, $0, $pop8 + i64.load $6=, 0($pop9) + i32.const $push30=, 5 + i32.shl $push15=, $1, $pop30 + i32.add $push16=, $0, $pop15 + i32.const $push29=, 2 + i32.shl $push10=, $2, $pop29 + i32.add $push11=, $pop10, $5 + i32.const $push28=, 3 + i32.shl $push12=, $pop11, $pop28 + i32.add $push13=, $0, $pop12 + i64.load $push14=, 0($pop13) + i64.store 0($pop16), $pop14 + i32.add $push17=, $3, $1 + i32.const $push27=, 3 + i32.shl $push18=, $pop17, $pop27 + i32.add $push19=, $0, $pop18 + call bar@FUNCTION, $pop19 + i32.const $push26=, 5 + i32.mul $push21=, $1, $pop26 + i32.add $push22=, $3, $pop21 + i32.const $push25=, 3 + i32.shl $push23=, $pop22, $pop25 + i32.add $push24=, $0, $pop23 + i64.add $push20=, $4, $6 + i64.store 0($pop24), $pop20 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push2=, v + i32.const $push1=, 24 + i32.const $push0=, 1 + call foo@FUNCTION, $pop2, $pop1, $pop0 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden v # @v + .type v,@object + .section .bss.v,"aw",@nobits + .globl v + .p2align 4 +v: + .skip 1152 + .size v, 1152 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr56982.c.s b/src/binaryen/test/torture-s/pr56982.c.s new file mode 100644 index 0000000000..058a38bf0b --- /dev/null +++ b/src/binaryen/test/torture-s/pr56982.c.s @@ -0,0 +1,96 @@ + .text + .file "pr56982.c" + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz +# BB#0: # %entry + #APP + #NO_APP + # fallthrough-return + .endfunc +.Lfunc_end0: + .size baz, .Lfunc_end0-baz + # -- End function + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + block + i32.load $push0=, 0($0) + i32.eqz $push6=, $pop0 + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %if.then + i32.const $push1=, 1 + return $pop1 +.LBB1_2: # %if.end + end_block # label0: + i32.const $push4=, env + i32.call $1=, setjmp@FUNCTION, $pop4 + #APP + #NO_APP + block + br_if 0, $1 # 0: down to label1 +# BB#3: # %if.end6 + i32.const $push5=, env + i32.const $push3=, 42 + call longjmp@FUNCTION, $pop5, $pop3 + unreachable +.LBB1_4: # %if.then2 + end_block # label1: + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size f, .Lfunc_end1-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push12=, $pop2, $pop4 + tee_local $push11=, $2=, $pop12 + i32.store __stack_pointer($pop5), $pop11 + i32.const $push0=, 0 + i32.store 12($2), $pop0 + i32.const $push9=, 12 + i32.add $push10=, $2, $pop9 + i32.call $drop=, f@FUNCTION, $pop10 + i32.const $push8=, 0 + i32.const $push6=, 16 + i32.add $push7=, $2, $pop6 + i32.store __stack_pointer($pop8), $pop7 + i32.const $push1=, 1 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type env,@object # @env + .section .bss.env,"aw",@nobits + .p2align 4 +env: + .skip 156 + .size env, 156 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype setjmp, i32, i32 + .functype exit, void, i32 + .functype longjmp, void, i32, i32 diff --git a/src/binaryen/test/torture-s/pr57124.c.s b/src/binaryen/test/torture-s/pr57124.c.s new file mode 100644 index 0000000000..1653c8c7ba --- /dev/null +++ b/src/binaryen/test/torture-s/pr57124.c.s @@ -0,0 +1,58 @@ + .text + .file "pr57124.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + block + i32.load16_u $push0=, 0($0) + i32.const $push1=, 4095 + i32.gt_u $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.then + call abort@FUNCTION + unreachable +.LBB0_2: # %if.end + end_block # label0: + i32.const $push3=, 0 + call exit@FUNCTION, $pop3 + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push10=, $pop1, $pop3 + tee_local $push9=, $0=, $pop10 + i32.store __stack_pointer($pop4), $pop9 + i32.const $push0=, 65531 + i32.store16 14($0), $pop0 + i32.const $push5=, 14 + i32.add $push6=, $0, $pop5 + i32.const $push7=, 12 + i32.add $push8=, $0, $pop7 + i32.call $drop=, foo@FUNCTION, $pop6, $pop8 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr57130.c.s b/src/binaryen/test/torture-s/pr57130.c.s new file mode 100644 index 0000000000..1712d3b694 --- /dev/null +++ b/src/binaryen/test/torture-s/pr57130.c.s @@ -0,0 +1,121 @@ + .text + .file "pr57130.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push11=, 0 + i32.load $push10=, foo.cnt($pop11) + tee_local $push9=, $1=, $pop10 + i32.const $push1=, 1 + i32.add $push2=, $pop9, $pop1 + i32.store foo.cnt($pop0), $pop2 + block + i32.const $push3=, 4 + i32.shl $push4=, $1, $pop3 + i32.const $push5=, s + i32.add $push6=, $pop4, $pop5 + i32.const $push7=, 16 + i32.call $push8=, memcmp@FUNCTION, $0, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push11=, 0 + i32.const $push9=, 0 + i32.load $push8=, __stack_pointer($pop9) + i32.const $push10=, 48 + i32.sub $push25=, $pop8, $pop10 + tee_local $push24=, $0=, $pop25 + i32.store __stack_pointer($pop11), $pop24 + i32.const $push15=, 16 + i32.add $push16=, $0, $pop15 + i32.const $push2=, 8 + i32.add $push3=, $pop16, $pop2 + i32.const $push0=, 0 + i64.load $push1=, .Lmain.r+8($pop0):p2align=2 + i64.store 0($pop3), $pop1 + i32.const $push23=, 0 + i64.load $push4=, .Lmain.r($pop23):p2align=2 + i64.store 16($0), $pop4 + i32.const $push17=, 16 + i32.add $push18=, $0, $pop17 + call foo@FUNCTION, $pop18 + i32.const $push22=, 8 + i32.add $push5=, $0, $pop22 + i64.const $push6=, 12884901887 + i64.store 0($pop5), $pop6 + i64.const $push21=, 12884901887 + i64.store 40($0), $pop21 + i64.const $push7=, 8589934592 + i64.store 0($0), $pop7 + i64.const $push20=, 8589934592 + i64.store 32($0), $pop20 + call foo@FUNCTION, $0 + i32.const $push14=, 0 + i32.const $push12=, 48 + i32.add $push13=, $0, $pop12 + i32.store __stack_pointer($pop14), $pop13 + i32.const $push19=, 0 + # fallthrough-return: $pop19 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden s # @s + .type s,@object + .section .data.s,"aw",@progbits + .globl s + .p2align 4 +s: + .int32 6 # 0x6 + .int32 8 # 0x8 + .int32 4294967288 # 0xfffffff8 + .int32 4294967291 # 0xfffffffb + .int32 0 # 0x0 + .int32 2 # 0x2 + .int32 4294967295 # 0xffffffff + .int32 2 # 0x2 + .size s, 32 + + .type foo.cnt,@object # @foo.cnt + .section .bss.foo.cnt,"aw",@nobits + .p2align 2 +foo.cnt: + .int32 0 # 0x0 + .size foo.cnt, 4 + + .type .Lmain.r,@object # @main.r + .section .rodata.cst16,"aM",@progbits,16 + .p2align 2 +.Lmain.r: + .int32 6 # 0x6 + .int32 8 # 0x8 + .int32 4294967288 # 0xfffffff8 + .int32 4294967291 # 0xfffffffb + .size .Lmain.r, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype memcmp, i32, i32, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr57131.c.s b/src/binaryen/test/torture-s/pr57131.c.s new file mode 100644 index 0000000000..fc8a86f5b2 --- /dev/null +++ b/src/binaryen/test/torture-s/pr57131.c.s @@ -0,0 +1,63 @@ + .text + .file "pr57131.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64, i64, i64, i32, i32, i32 +# BB#0: # %entry + i32.const $push14=, 0 + i32.const $push12=, 0 + i32.load $push11=, __stack_pointer($pop12) + i32.const $push13=, 48 + i32.sub $push23=, $pop11, $pop13 + tee_local $push22=, $5=, $pop23 + i32.store __stack_pointer($pop14), $pop22 + i32.const $push21=, 0 + i32.store 44($5), $pop21 + i64.const $push0=, 0 + i64.store 32($5), $pop0 + i32.const $push20=, 0 + i32.store 28($5), $pop20 + i32.const $push1=, 1 + i32.store 24($5), $pop1 + i32.const $push19=, 1 + i32.store 20($5), $pop19 + i64.const $push2=, 1 + i64.store 8($5), $pop2 + i64.load32_s $0=, 44($5) + i64.load $1=, 32($5) + i64.load32_u $2=, 28($5) + i32.load $3=, 24($5) + i32.load $4=, 20($5) + block + i64.load $push8=, 8($5) + i64.shl $push3=, $1, $2 + i64.mul $push4=, $0, $pop3 + i32.mul $push5=, $4, $3 + i64.extend_s/i32 $push6=, $pop5 + i64.div_s $push7=, $pop4, $pop6 + i64.add $push9=, $pop8, $pop7 + i64.const $push18=, 1 + i64.ne $push10=, $pop9, $pop18 + br_if 0, $pop10 # 0: down to label0 +# BB#1: # %if.end + i32.const $push17=, 0 + i32.const $push15=, 48 + i32.add $push16=, $5, $pop15 + i32.store __stack_pointer($pop17), $pop16 + i32.const $push24=, 0 + return $pop24 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr57144.c.s b/src/binaryen/test/torture-s/pr57144.c.s new file mode 100644 index 0000000000..bab6d85b62 --- /dev/null +++ b/src/binaryen/test/torture-s/pr57144.c.s @@ -0,0 +1,33 @@ + .text + .file "pr57144.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + call foo@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr57281.c.s b/src/binaryen/test/torture-s/pr57281.c.s new file mode 100644 index 0000000000..9f928444a5 --- /dev/null +++ b/src/binaryen/test/torture-s/pr57281.c.s @@ -0,0 +1,145 @@ + .text + .file "pr57281.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, g($pop0) + i32.const $push7=, 0 + i32.load $push6=, b($pop7) + tee_local $push5=, $1=, $pop6 + i64.extend_s/i32 $push2=, $pop5 + i64.store 0($pop1), $pop2 + i32.const $push4=, 0 + i32.select $push3=, $pop4, $1, $0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + block + i32.const $push7=, 0 + i32.load $push0=, b($pop7) + i32.const $push6=, -20 + i32.eq $push1=, $pop0, $pop6 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %for.body.lr.ph + i32.const $push10=, 0 + i32.load $2=, g($pop10) + i32.const $push9=, 0 + i32.load $1=, e($pop9) + i32.const $push8=, 0 + i32.load $0=, a($pop8) +.LBB1_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push22=, 0 + i32.store 0($1), $pop22 + i32.const $push21=, 0 + i32.const $push20=, 0 + i32.load $push19=, b($pop20) + tee_local $push18=, $3=, $pop19 + i32.select $push2=, $pop21, $pop18, $0 + i32.store 0($1), $pop2 + i32.const $push17=, 0 + i64.load $drop=, f($pop17) + i64.extend_s/i32 $push3=, $3 + i64.store 0($2), $pop3 + i32.const $push16=, 0 + i32.const $push15=, 0 + i32.load $push4=, b($pop15) + i32.const $push14=, -1 + i32.add $push13=, $pop4, $pop14 + tee_local $push12=, $3=, $pop13 + i32.store b($pop16), $pop12 + i32.const $push11=, -20 + i32.ne $push5=, $3, $pop11 + br_if 0, $pop5 # 0: up to label1 +.LBB1_3: # %for.end + end_loop + end_block # label0: + i32.const $push23=, 0 + # fallthrough-return: $pop23 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 1 # 0x1 + .size a, 4 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .int32 0 # 0x0 + .size d, 4 + + .hidden e # @e + .type e,@object + .section .data.e,"aw",@progbits + .globl e + .p2align 2 +e: + .int32 d + .size e, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 3 +c: + .int64 0 # 0x0 + .size c, 8 + + .hidden g # @g + .type g,@object + .section .data.g,"aw",@progbits + .globl g + .p2align 2 +g: + .int32 c + .size g, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + .hidden f # @f + .type f,@object + .section .bss.f,"aw",@nobits + .globl f + .p2align 3 +f: + .int64 0 # 0x0 + .size f, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr57321.c.s b/src/binaryen/test/torture-s/pr57321.c.s new file mode 100644 index 0000000000..126afd9743 --- /dev/null +++ b/src/binaryen/test/torture-s/pr57321.c.s @@ -0,0 +1,58 @@ + .text + .file "pr57321.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load $push0=, a($pop3) + i32.eqz $push7=, $pop0 + br_if 0, $pop7 # 0: down to label0 +# BB#1: # %foo.exit + i32.const $push4=, 0 + return $pop4 +.LBB0_2: # %if.then.i + end_block # label0: + i32.const $push6=, 0 + i32.load $push1=, b($pop6) + i32.const $push2=, 1 + i32.store 0($pop1), $pop2 + i32.const $push5=, 0 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 1 # 0x1 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 + .size b, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 + .size c, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr57344-1.c.s b/src/binaryen/test/torture-s/pr57344-1.c.s new file mode 100644 index 0000000000..b8cff4b2a7 --- /dev/null +++ b/src/binaryen/test/torture-s/pr57344-1.c.s @@ -0,0 +1,114 @@ + .text + .file "pr57344-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.const $push0=, -3161 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + #APP + #NO_APP + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push19=, 0 + i64.const $push0=, 8583460864 + i64.store s+8($pop19), $pop0 + block + i32.const $push18=, 0 + i32.load $push1=, i($pop18) + i32.const $push17=, 0 + i32.gt_s $push2=, $pop1, $pop17 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %for.body.lr.ph + i32.const $push3=, -3161 + call foo@FUNCTION, $pop3 + i32.const $push24=, 0 + i32.const $push23=, 0 + i32.load $push22=, i($pop23) + tee_local $push21=, $0=, $pop22 + i32.const $push20=, 1 + i32.add $push4=, $pop21, $pop20 + i32.store i($pop24), $pop4 + i32.const $push5=, -1 + i32.gt_s $push6=, $0, $pop5 + br_if 0, $pop6 # 0: down to label1 +# BB#2: # %for.body.for.body_crit_edge.preheader +.LBB1_3: # %for.body.for.body_crit_edge + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push36=, 0 + i64.load32_u $push9=, s+8($pop36) + i32.const $push35=, 0 + i64.load8_u $push7=, s+12($pop35) + i64.const $push34=, 32 + i64.shl $push8=, $pop7, $pop34 + i64.or $push10=, $pop9, $pop8 + i64.const $push33=, 31 + i64.shl $push11=, $pop10, $pop33 + i64.const $push32=, 24 + i64.shr_s $push12=, $pop11, $pop32 + i64.const $push31=, 18 + i64.shr_u $push13=, $pop12, $pop31 + i32.wrap/i64 $push14=, $pop13 + call foo@FUNCTION, $pop14 + i32.const $push30=, 0 + i32.const $push29=, 0 + i32.load $push28=, i($pop29) + tee_local $push27=, $0=, $pop28 + i32.const $push26=, 1 + i32.add $push15=, $pop27, $pop26 + i32.store i($pop30), $pop15 + i32.const $push25=, 0 + i32.lt_s $push16=, $0, $pop25 + br_if 0, $pop16 # 0: up to label2 +.LBB1_4: # %for.end + end_loop + end_block # label1: + i32.const $push37=, 0 + # fallthrough-return: $pop37 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 4 +s: + .skip 16 + .size s, 16 + + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr57344-2.c.s b/src/binaryen/test/torture-s/pr57344-2.c.s new file mode 100644 index 0000000000..2e49ea3a26 --- /dev/null +++ b/src/binaryen/test/torture-s/pr57344-2.c.s @@ -0,0 +1,117 @@ + .text + .file "pr57344-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.const $push0=, -3161 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + #APP + #NO_APP + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push21=, 0 + i64.const $push0=, 562525691183104 + i64.store s+8($pop21), $pop0 + block + i32.const $push20=, 0 + i32.load $push1=, i($pop20) + i32.const $push19=, 0 + i32.gt_s $push2=, $pop1, $pop19 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %for.body.lr.ph + i32.const $push3=, -3161 + call foo@FUNCTION, $pop3 + i32.const $push26=, 0 + i32.const $push25=, 0 + i32.load $push24=, i($pop25) + tee_local $push23=, $0=, $pop24 + i32.const $push22=, 1 + i32.add $push4=, $pop23, $pop22 + i32.store i($pop26), $pop4 + i32.const $push5=, -1 + i32.gt_s $push6=, $0, $pop5 + br_if 0, $pop6 # 0: down to label1 +# BB#2: # %for.body.for.body_crit_edge.preheader +.LBB1_3: # %for.body.for.body_crit_edge + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push39=, 0 + i64.load32_u $push12=, s+8($pop39) + i32.const $push38=, 0 + i64.load16_u $push9=, s+12($pop38) + i32.const $push37=, 0 + i64.load8_u $push7=, s+14($pop37) + i64.const $push36=, 16 + i64.shl $push8=, $pop7, $pop36 + i64.or $push10=, $pop9, $pop8 + i64.const $push35=, 32 + i64.shl $push11=, $pop10, $pop35 + i64.or $push13=, $pop12, $pop11 + i64.const $push34=, 15 + i64.shl $push14=, $pop13, $pop34 + i64.const $push33=, 42 + i64.shr_s $push15=, $pop14, $pop33 + i32.wrap/i64 $push16=, $pop15 + call foo@FUNCTION, $pop16 + i32.const $push32=, 0 + i32.const $push31=, 0 + i32.load $push30=, i($pop31) + tee_local $push29=, $0=, $pop30 + i32.const $push28=, 1 + i32.add $push17=, $pop29, $pop28 + i32.store i($pop32), $pop17 + i32.const $push27=, 0 + i32.lt_s $push18=, $0, $pop27 + br_if 0, $pop18 # 0: up to label2 +.LBB1_4: # %for.end + end_loop + end_block # label1: + i32.const $push40=, 0 + # fallthrough-return: $pop40 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 4 +s: + .skip 16 + .size s, 16 + + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr57344-3.c.s b/src/binaryen/test/torture-s/pr57344-3.c.s new file mode 100644 index 0000000000..6896a188e4 --- /dev/null +++ b/src/binaryen/test/torture-s/pr57344-3.c.s @@ -0,0 +1,142 @@ + .text + .file "pr57344-3.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i64 +# BB#0: # %entry + block + i64.const $push0=, -3161 + i64.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + #APP + #NO_APP + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64, i32 +# BB#0: # %entry + i32.const $push25=, 0 + i32.const $push24=, 0 + i64.load $push0=, .Lmain.t+8($pop24):p2align=0 + i64.store s+24($pop25), $pop0 + i32.const $push23=, 0 + i32.const $push22=, 0 + i64.load $push1=, .Lmain.t($pop22):p2align=0 + i64.store s+16($pop23), $pop1 + block + i32.const $push21=, 0 + i32.load $push2=, i($pop21) + i32.const $push20=, 0 + i32.gt_s $push3=, $pop2, $pop20 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %for.body.lr.ph + i64.const $push4=, -3161 + call foo@FUNCTION, $pop4 + i32.const $push30=, 0 + i32.const $push29=, 0 + i32.load $push28=, i($pop29) + tee_local $push27=, $1=, $pop28 + i32.const $push26=, 1 + i32.add $push5=, $pop27, $pop26 + i32.store i($pop30), $pop5 + i32.const $push6=, -1 + i32.gt_s $push7=, $1, $pop6 + br_if 0, $pop7 # 0: down to label1 +# BB#2: # %for.body.for.body_crit_edge.preheader +.LBB1_3: # %for.body.for.body_crit_edge + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push47=, 0 + i64.load $push46=, s+16($pop47) + tee_local $push45=, $0=, $pop46 + i64.const $push44=, 7 + i64.shl $push15=, $pop45, $pop44 + i64.const $push43=, 50 + i64.shr_u $push16=, $pop15, $pop43 + i32.const $push42=, 0 + i64.load8_u $push9=, s+24($pop42) + i64.const $push41=, 7 + i64.shl $push10=, $pop9, $pop41 + i64.const $push40=, 57 + i64.shr_u $push8=, $0, $pop40 + i64.or $push11=, $pop10, $pop8 + i64.const $push39=, 56 + i64.shl $push12=, $pop11, $pop39 + i64.const $push38=, 56 + i64.shr_s $push13=, $pop12, $pop38 + i64.const $push37=, 14 + i64.shl $push14=, $pop13, $pop37 + i64.or $push17=, $pop16, $pop14 + call foo@FUNCTION, $pop17 + i32.const $push36=, 0 + i32.const $push35=, 0 + i32.load $push34=, i($pop35) + tee_local $push33=, $1=, $pop34 + i32.const $push32=, 1 + i32.add $push18=, $pop33, $pop32 + i32.store i($pop36), $pop18 + i32.const $push31=, 0 + i32.lt_s $push19=, $1, $pop31 + br_if 0, $pop19 # 0: up to label2 +.LBB1_4: # %for.end + end_loop + end_block # label1: + i32.const $push48=, 0 + # fallthrough-return: $pop48 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .Lmain.t,@object # @main.t + .section .rodata.cst16,"aM",@progbits,16 +.Lmain.t: + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 56 # 0x38 + .int8 157 # 0x9d + .int8 255 # 0xff + .int8 1 # 0x1 + .int8 0 # 0x0 + .skip 6 + .size .Lmain.t, 16 + + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 4 +s: + .skip 32 + .size s, 32 + + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr57344-4.c.s b/src/binaryen/test/torture-s/pr57344-4.c.s new file mode 100644 index 0000000000..078055a82b --- /dev/null +++ b/src/binaryen/test/torture-s/pr57344-4.c.s @@ -0,0 +1,149 @@ + .text + .file "pr57344-4.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i64 +# BB#0: # %entry + block + i64.const $push0=, -1220975898975746 + i64.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + #APP + #NO_APP + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push28=, 0 + i32.const $push27=, 0 + i64.load $push0=, .Lmain.t+8($pop27):p2align=0 + i64.store s+24($pop28), $pop0 + i32.const $push26=, 0 + i32.const $push25=, 0 + i64.load $push1=, .Lmain.t($pop25):p2align=0 + i64.store s+16($pop26), $pop1 + block + i32.const $push24=, 0 + i32.load $push2=, i($pop24) + i32.const $push23=, 0 + i32.gt_s $push3=, $pop2, $pop23 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %for.body.lr.ph + i64.const $push4=, -1220975898975746 + call foo@FUNCTION, $pop4 + i32.const $push33=, 0 + i32.const $push32=, 0 + i32.load $push31=, i($pop32) + tee_local $push30=, $0=, $pop31 + i32.const $push29=, 1 + i32.add $push5=, $pop30, $pop29 + i32.store i($pop33), $pop5 + i32.const $push6=, -1 + i32.gt_s $push7=, $0, $pop6 + br_if 0, $pop7 # 0: down to label1 +# BB#2: # %for.body.for.body_crit_edge.preheader +.LBB1_3: # %for.body.for.body_crit_edge + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push49=, 0 + i64.load32_u $push15=, s+24($pop49) + i32.const $push48=, 0 + i64.load16_u $push12=, s+28($pop48) + i32.const $push47=, 0 + i64.load8_u $push10=, s+30($pop47) + i64.const $push46=, 16 + i64.shl $push11=, $pop10, $pop46 + i64.or $push13=, $pop12, $pop11 + i64.const $push45=, 32 + i64.shl $push14=, $pop13, $pop45 + i64.or $push16=, $pop15, $pop14 + i64.const $push44=, 7 + i64.shl $push17=, $pop16, $pop44 + i32.const $push43=, 0 + i64.load $push8=, s+16($pop43) + i64.const $push42=, 57 + i64.shr_u $push9=, $pop8, $pop42 + i64.or $push18=, $pop17, $pop9 + i64.const $push41=, 8 + i64.shl $push19=, $pop18, $pop41 + i64.const $push40=, 10 + i64.shr_s $push20=, $pop19, $pop40 + call foo@FUNCTION, $pop20 + i32.const $push39=, 0 + i32.const $push38=, 0 + i32.load $push37=, i($pop38) + tee_local $push36=, $0=, $pop37 + i32.const $push35=, 1 + i32.add $push21=, $pop36, $pop35 + i32.store i($pop39), $pop21 + i32.const $push34=, 0 + i32.lt_s $push22=, $0, $pop34 + br_if 0, $pop22 # 0: up to label2 +.LBB1_4: # %for.end + end_loop + end_block # label1: + i32.const $push50=, 0 + # fallthrough-return: $pop50 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .Lmain.t,@object # @main.t + .section .rodata.cst16,"aM",@progbits,16 +.Lmain.t: + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 0 # 0x0 + .int8 240 # 0xf0 + .int8 15 # 0xf + .int8 25 # 0x19 + .int8 42 # 0x2a + .int8 59 # 0x3b + .int8 76 # 0x4c + .int8 221 # 0xdd + .int8 1 # 0x1 + .int8 0 # 0x0 + .size .Lmain.t, 16 + + .hidden s # @s + .type s,@object + .section .bss.s,"aw",@nobits + .globl s + .p2align 4 +s: + .skip 32 + .size s, 32 + + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr57568.c.s b/src/binaryen/test/torture-s/pr57568.c.s new file mode 100644 index 0000000000..ca1eca3fda --- /dev/null +++ b/src/binaryen/test/torture-s/pr57568.c.s @@ -0,0 +1,68 @@ + .text + .file "pr57568.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + block + block + i32.const $push3=, 0 + i32.load $push0=, b($pop3) + i32.eqz $push10=, $pop0 + br_if 0, $pop10 # 0: down to label1 +# BB#1: # %land.lhs.true + i32.const $push8=, 0 + i32.load $push7=, c($pop8) + tee_local $push6=, $0=, $pop7 + i32.load $push5=, 0($0) + tee_local $push4=, $0=, $pop5 + i32.const $push1=, 1 + i32.shl $push2=, $pop4, $pop1 + i32.store 0($pop6), $pop2 + br_if 1, $0 # 1: down to label0 +.LBB0_2: # %if.end + end_block # label1: + i32.const $push9=, 0 + return $pop9 +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 4 +a: + .skip 216 + .size a, 216 + + .hidden b # @b + .type b,@object + .section .data.b,"aw",@progbits + .globl b + .p2align 2 +b: + .int32 1 # 0x1 + .size b, 4 + + .hidden c # @c + .type c,@object + .section .data.c,"aw",@progbits + .globl c + .p2align 2 +c: + .int32 a+128 + .size c, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr57829.c.s b/src/binaryen/test/torture-s/pr57829.c.s new file mode 100644 index 0000000000..db0e250cd2 --- /dev/null +++ b/src/binaryen/test/torture-s/pr57829.c.s @@ -0,0 +1,106 @@ + .text + .file "pr57829.c" + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -1 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 31 + i32.shr_s $push3=, $pop1, $pop2 + i32.const $push4=, 2 + i32.or $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -1 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 31 + i32.shr_s $push3=, $pop1, $pop2 + i32.const $push4=, 2 + i32.or $push5=, $pop3, $pop4 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end1: + .size f2, .Lfunc_end1-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 63 + i32.and $push1=, $0, $pop0 + i32.const $push2=, 2 + i32.add $push3=, $pop1, $pop2 + i32.const $push4=, 5 + i32.shr_u $push5=, $pop3, $pop4 + i32.const $push6=, 4 + i32.or $push7=, $pop5, $pop6 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end2: + .size f3, .Lfunc_end2-f3 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push14=, 1 + i32.call $push0=, f1@FUNCTION, $pop14 + i32.const $push13=, 2 + i32.ne $push1=, $pop0, $pop13 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.const $push16=, 1 + i32.call $push2=, f2@FUNCTION, $pop16 + i32.const $push15=, 2 + i32.ne $push3=, $pop2, $pop15 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %lor.lhs.false3 + i32.const $push4=, 63 + i32.call $push5=, f3@FUNCTION, $pop4 + i32.const $push6=, 6 + i32.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#3: # %lor.lhs.false6 + i32.const $push8=, 1 + i32.call $push9=, f3@FUNCTION, $pop8 + i32.const $push10=, 4 + i32.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#4: # %if.end + i32.const $push12=, 0 + return $pop12 +.LBB3_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr57860.c.s b/src/binaryen/test/torture-s/pr57860.c.s new file mode 100644 index 0000000000..28d20dc5fe --- /dev/null +++ b/src/binaryen/test/torture-s/pr57860.c.s @@ -0,0 +1,323 @@ + .text + .file "pr57860.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 + .local i64, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push14=, 0 + i32.load $4=, f($pop14) + i32.const $push13=, 0 + i32.load $3=, h($pop13) + i32.const $push12=, 0 + i32.load $2=, b($pop12) + i64.extend_s/i32 $1=, $0 + block + block + i32.const $push11=, 0 + i32.load $push0=, c($pop11) + br_if 0, $pop0 # 0: down to label1 +# BB#1: + i32.const $5=, 1 + br 1 # 1: down to label0 +.LBB0_2: + end_block # label1: + i32.const $5=, 0 +.LBB0_3: # =>This Inner Loop Header: Depth=1 + end_block # label0: + loop i32 # label2: + block + block + block + block + block + block + br_table $5, 1, 2, 3, 0, 0 # 1: down to label7 + # 2: down to label6 + # 3: down to label5 + # 0: down to label8 +.LBB0_4: # %for.inc6 + # in Loop: Header=BB0_3 Depth=1 + end_block # label8: + i32.const $push17=, 0 + i32.const $push16=, 1 + i32.add $push10=, $0, $pop16 + i32.store g($pop17), $pop10 + i32.const $push15=, 0 + i32.load $push1=, c($pop15) + i32.eqz $push29=, $pop1 + br_if 3, $pop29 # 3: down to label4 +# BB#5: # in Loop: Header=BB0_3 Depth=1 + i32.const $5=, 0 + br 5 # 5: up to label2 +.LBB0_6: # %for.inc.lr.ph + # in Loop: Header=BB0_3 Depth=1 + end_block # label7: + i32.const $push19=, 0 + i32.const $push18=, 0 + i32.store c($pop19), $pop18 +# BB#7: # in Loop: Header=BB0_3 Depth=1 + i32.const $5=, 1 + br 4 # 4: up to label2 +.LBB0_8: # %for.end + # in Loop: Header=BB0_3 Depth=1 + end_block # label6: + i32.const $push28=, 0 + i64.load32_s $push2=, a($pop28) + i64.const $push27=, 8589934591 + i64.xor $push3=, $pop2, $pop27 + i64.load32_s $push4=, 0($2) + i64.and $push5=, $pop3, $pop4 + i64.lt_s $push26=, $pop5, $1 + tee_local $push25=, $0=, $pop26 + i32.store 0($3), $pop25 + i32.store 0($4), $0 + i32.const $push24=, 0 + i32.load $push23=, g($pop24) + tee_local $push22=, $0=, $pop23 + i32.const $push21=, 2 + i32.shl $push6=, $pop22, $pop21 + i32.const $push20=, k + i32.add $push7=, $pop6, $pop20 + i32.load $push8=, 0($pop7) + i32.eqz $push30=, $pop8 + br_if 2, $pop30 # 2: down to label3 +# BB#9: # in Loop: Header=BB0_3 Depth=1 + i32.const $5=, 2 + br 3 # 3: up to label2 +.LBB0_10: # %if.then + end_block # label5: + i32.const $push9=, 0 + return $pop9 +.LBB0_11: # in Loop: Header=BB0_3 Depth=1 + end_block # label4: + i32.const $5=, 1 + br 1 # 1: up to label2 +.LBB0_12: # in Loop: Header=BB0_3 Depth=1 + end_block # label3: + i32.const $5=, 3 + br 0 # 0: up to label2 +.LBB0_13: + end_loop + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push16=, 0 + i32.load $2=, f($pop16) + i32.const $push15=, 0 + i32.load $1=, h($pop15) + i32.const $push14=, 0 + i32.load $0=, b($pop14) + block + block + i32.const $push13=, 0 + i32.load $push0=, c($pop13) + br_if 0, $pop0 # 0: down to label10 +# BB#1: + i32.const $4=, 1 + br 1 # 1: down to label9 +.LBB1_2: + end_block # label10: + i32.const $4=, 0 +.LBB1_3: # =>This Inner Loop Header: Depth=1 + end_block # label9: + loop i32 # label11: + block + block + block + block + block + block + block + block + block + br_table $4, 1, 2, 3, 5, 4, 0, 0 # 1: down to label19 + # 2: down to label18 + # 3: down to label17 + # 5: down to label15 + # 4: down to label16 + # 0: down to label20 +.LBB1_4: # %for.inc6.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label20: + i32.const $push19=, 0 + i32.const $push18=, 1 + i32.add $push12=, $3, $pop18 + i32.store g($pop19), $pop12 + i32.const $push17=, 0 + i32.load $push1=, c($pop17) + i32.eqz $push34=, $pop1 + br_if 5, $pop34 # 5: down to label14 +# BB#5: # in Loop: Header=BB1_3 Depth=1 + i32.const $4=, 0 + br 8 # 8: up to label11 +.LBB1_6: # %for.inc.lr.ph.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label19: + i32.const $push21=, 0 + i32.const $push20=, 0 + i32.store c($pop21), $pop20 +# BB#7: # in Loop: Header=BB1_3 Depth=1 + i32.const $4=, 1 + br 7 # 7: up to label11 +.LBB1_8: # %for.end.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label18: + i32.const $push31=, 0 + i64.load32_s $push2=, a($pop31) + i64.const $push30=, 8589934591 + i64.xor $push3=, $pop2, $pop30 + i64.load32_s $push4=, 0($0) + i64.and $push5=, $pop3, $pop4 + i64.const $push29=, 1 + i64.lt_s $push28=, $pop5, $pop29 + tee_local $push27=, $3=, $pop28 + i32.store 0($1), $pop27 + i32.store 0($2), $3 + i32.const $push26=, 0 + i32.load $push25=, g($pop26) + tee_local $push24=, $3=, $pop25 + i32.const $push23=, 2 + i32.shl $push6=, $pop24, $pop23 + i32.const $push22=, k + i32.add $push7=, $pop6, $pop22 + i32.load $push8=, 0($pop7) + i32.eqz $push35=, $pop8 + br_if 4, $pop35 # 4: down to label13 +# BB#9: # in Loop: Header=BB1_3 Depth=1 + i32.const $4=, 2 + br 6 # 6: up to label11 +.LBB1_10: # %foo.exit + # in Loop: Header=BB1_3 Depth=1 + end_block # label17: + i32.const $push32=, 0 + i32.load $push9=, d($pop32) + i32.const $push10=, 1 + i32.ne $push11=, $pop9, $pop10 + br_if 4, $pop11 # 4: down to label12 +# BB#11: # in Loop: Header=BB1_3 Depth=1 + i32.const $4=, 4 + br 5 # 5: up to label11 +.LBB1_12: # %if.end + end_block # label16: + i32.const $push33=, 0 + return $pop33 +.LBB1_13: # %if.then + end_block # label15: + call abort@FUNCTION + unreachable +.LBB1_14: # in Loop: Header=BB1_3 Depth=1 + end_block # label14: + i32.const $4=, 1 + br 2 # 2: up to label11 +.LBB1_15: # in Loop: Header=BB1_3 Depth=1 + end_block # label13: + i32.const $4=, 5 + br 1 # 1: up to label11 +.LBB1_16: # in Loop: Header=BB1_3 Depth=1 + end_block # label12: + i32.const $4=, 3 + br 0 # 0: up to label11 +.LBB1_17: + end_loop + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .data.b,"aw",@progbits + .globl b + .p2align 2 +b: + .int32 a + .size b, 4 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e + .p2align 2 +e: + .int32 0 # 0x0 + .size e, 4 + + .hidden f # @f + .type f,@object + .section .data.f,"aw",@progbits + .globl f + .p2align 2 +f: + .int32 e + .size f, 4 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .int32 0 # 0x0 + .size d, 4 + + .hidden h # @h + .type h,@object + .section .data.h,"aw",@progbits + .globl h + .p2align 2 +h: + .int32 d + .size h, 4 + + .hidden k # @k + .type k,@object + .section .data.k,"aw",@progbits + .globl k + .p2align 2 +k: + .int32 1 # 0x1 + .size k, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + .hidden g # @g + .type g,@object + .section .bss.g,"aw",@nobits + .globl g + .p2align 2 +g: + .int32 0 # 0x0 + .size g, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr57861.c.s b/src/binaryen/test/torture-s/pr57861.c.s new file mode 100644 index 0000000000..059e147581 --- /dev/null +++ b/src/binaryen/test/torture-s/pr57861.c.s @@ -0,0 +1,168 @@ + .text + .file "pr57861.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push23=, 0 + i32.const $push22=, 0 + i32.store c($pop23), $pop22 + i32.const $push21=, 0 + i32.load16_u $push20=, a($pop21) + tee_local $push19=, $0=, $pop20 + copy_local $1=, $pop19 + block + i32.const $push18=, 0 + i32.load $push3=, e($pop18) + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.const $push17=, 24 + i32.shr_s $push2=, $pop1, $pop17 + i32.ge_u $push4=, $pop3, $pop2 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.then.1.i + i32.const $push32=, 0 + i32.const $push31=, 0 + i32.load $push7=, d($pop31) + i32.const $push30=, 0 + i32.ne $push8=, $pop7, $pop30 + i32.const $push29=, 0 + i32.load $push5=, h($pop29) + i32.const $push28=, 0 + i32.ne $push6=, $pop5, $pop28 + i32.and $push27=, $pop8, $pop6 + tee_local $push26=, $1=, $pop27 + i32.store16 a($pop32), $pop26 + i32.const $push25=, 0 + i32.const $push24=, 0 + i32.store16 f($pop25), $pop24 +.LBB0_2: # %foo.exit + end_block # label0: + i32.const $push39=, 0 + i32.const $push9=, 2 + i32.store c($pop39), $pop9 + i32.const $push38=, 0 + i32.const $push10=, 255 + i32.and $push11=, $0, $pop10 + i32.const $push37=, 0 + i32.ne $push12=, $pop11, $pop37 + i32.store i($pop38), $pop12 + i32.const $push36=, 0 + i32.const $push35=, 0 + i32.store j($pop36), $pop35 + i32.const $push34=, 0 + i32.load $push13=, g($pop34) + i32.const $push33=, 0 + i32.store 0($pop13), $pop33 + block + i32.const $push14=, 65535 + i32.and $push15=, $1, $pop14 + br_if 0, $pop15 # 0: down to label1 +# BB#3: # %if.end + i32.const $push16=, 0 + return $pop16 +.LBB0_4: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 1 +a: + .int16 1 # 0x1 + .size a, 2 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + .hidden g # @g + .type g,@object + .section .data.g,"aw",@progbits + .globl g + .p2align 2 +g: + .int32 b + .size g, 4 + + .hidden f # @f + .type f,@object + .section .bss.f,"aw",@nobits + .globl f + .p2align 1 +f: + .int16 0 # 0x0 + .size f, 2 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .int32 0 # 0x0 + .size d, 4 + + .hidden h # @h + .type h,@object + .section .bss.h,"aw",@nobits + .globl h + .p2align 2 +h: + .int32 0 # 0x0 + .size h, 4 + + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + .hidden j # @j + .type j,@object + .section .bss.j,"aw",@nobits + .globl j + .p2align 2 +j: + .int32 0 # 0x0 + .size j, 4 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e + .p2align 2 +e: + .int32 0 # 0x0 + .size e, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr57875.c.s b/src/binaryen/test/torture-s/pr57875.c.s new file mode 100644 index 0000000000..20b889af2d --- /dev/null +++ b/src/binaryen/test/torture-s/pr57875.c.s @@ -0,0 +1,159 @@ + .text + .file "pr57875.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.const $push15=, 0 + i32.load $push14=, i($pop15) + tee_local $push13=, $4=, $pop14 + i32.const $push12=, 0 + i32.gt_s $push0=, $pop13, $pop12 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %for.body.lr.ph + i32.const $push17=, 0 + i32.load $1=, c($pop17) + i32.const $push16=, 0 + i32.load $0=, d($pop16) +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + block + br_if 0, $0 # 0: down to label2 +# BB#3: # %if.then + # in Loop: Header=BB0_2 Depth=1 + block + block + i32.eqz $push31=, $1 + br_if 0, $pop31 # 0: down to label4 +# BB#4: # %if.then.if.end_crit_edge + # in Loop: Header=BB0_2 Depth=1 + i32.const $push18=, 0 + i32.load $3=, f($pop18) + br 1 # 1: down to label3 +.LBB0_5: # %if.then2 + # in Loop: Header=BB0_2 Depth=1 + end_block # label4: + i32.const $3=, 2 + i32.const $push20=, 0 + i32.const $push19=, 2 + i32.store f($pop20), $pop19 +.LBB0_6: # %if.end + # in Loop: Header=BB0_2 Depth=1 + end_block # label3: + i32.const $push22=, 0 + i32.const $push21=, 0 + i32.load8_u $push1=, e($pop21) + i32.and $push2=, $3, $pop1 + i32.store8 e($pop22), $pop2 +.LBB0_7: # %for.inc + # in Loop: Header=BB0_2 Depth=1 + end_block # label2: + i32.const $push26=, 0 + i32.lt_s $3=, $4, $pop26 + i32.const $push25=, 1 + i32.add $push24=, $4, $pop25 + tee_local $push23=, $2=, $pop24 + copy_local $4=, $pop23 + br_if 0, $3 # 0: up to label1 +# BB#8: # %for.cond.for.end_crit_edge + end_loop + i32.const $push3=, 0 + i32.store i($pop3), $2 +.LBB0_9: # %for.end + end_block # label0: + i32.const $push30=, 0 + i32.const $push29=, 0 + i32.load8_u $push4=, e($pop29) + i32.const $push5=, 1 + i32.shl $push6=, $pop4, $pop5 + i32.const $push7=, 4 + i32.and $push8=, $pop6, $pop7 + i32.const $push9=, a + i32.add $push10=, $pop8, $pop9 + i32.load $push28=, 0($pop10) + tee_local $push27=, $4=, $pop28 + i32.store b($pop30), $pop27 + block + br_if 0, $4 # 0: down to label5 +# BB#10: # %if.end10 + i32.const $push11=, 0 + return $pop11 +.LBB0_11: # %if.then9 + end_block # label5: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .int32 0 # 0x0 + .size d, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + .hidden f # @f + .type f,@object + .section .bss.f,"aw",@nobits + .globl f + .p2align 2 +f: + .int32 0 # 0x0 + .size f, 4 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e +e: + .skip 1 + .size e, 1 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .skip 4 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr57876.c.s b/src/binaryen/test/torture-s/pr57876.c.s new file mode 100644 index 0000000000..94f3be5146 --- /dev/null +++ b/src/binaryen/test/torture-s/pr57876.c.s @@ -0,0 +1,330 @@ + .text + .file "pr57876.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i64, i32 +# BB#0: # %entry + i32.const $push45=, 0 + i32.const $push43=, 0 + i32.load $push42=, __stack_pointer($pop43) + i32.const $push44=, 16 + i32.sub $push168=, $pop42, $pop44 + tee_local $push167=, $4=, $pop168 + i32.store __stack_pointer($pop45), $pop167 + i32.const $push166=, 0 + i32.load $0=, d($pop166) + i32.const $push165=, 0 + i32.const $push164=, 0 + i32.store f($pop165), $pop164 + i32.const $push163=, 0 + i32.load $push162=, 0($0) + tee_local $push161=, $1=, $pop162 + i32.store j($pop163), $pop161 + i32.const $push160=, 0 + i32.const $push0=, 1 + i32.store f($pop160), $pop0 + i32.const $push159=, 0 + i32.const $push158=, 0 + i32.load $push157=, a($pop158) + tee_local $push156=, $2=, $pop157 + i32.mul $push1=, $1, $pop156 + i32.const $push2=, -1 + i32.add $push3=, $pop1, $pop2 + i32.store h($pop159), $pop3 + i32.const $push155=, 0 + i32.load $push154=, 0($0) + tee_local $push153=, $1=, $pop154 + i32.store j($pop155), $pop153 + i32.const $push152=, 0 + i32.const $push4=, 2 + i32.store f($pop152), $pop4 + i32.const $push151=, 0 + i32.mul $push5=, $2, $1 + i32.const $push150=, -1 + i32.add $push6=, $pop5, $pop150 + i32.store h($pop151), $pop6 + i32.const $push149=, 0 + i32.load $push148=, 0($0) + tee_local $push147=, $1=, $pop148 + i32.store j($pop149), $pop147 + i32.const $push146=, 0 + i32.const $push7=, 3 + i32.store f($pop146), $pop7 + i32.const $push145=, 0 + i32.mul $push8=, $2, $1 + i32.const $push144=, -1 + i32.add $push9=, $pop8, $pop144 + i32.store h($pop145), $pop9 + i32.const $push143=, 0 + i32.load $push142=, 0($0) + tee_local $push141=, $1=, $pop142 + i32.store j($pop143), $pop141 + i32.const $push140=, 0 + i32.const $push10=, 4 + i32.store f($pop140), $pop10 + i32.const $push139=, 0 + i32.mul $push11=, $2, $1 + i32.const $push138=, -1 + i32.add $push12=, $pop11, $pop138 + i32.store h($pop139), $pop12 + i32.const $push137=, 0 + i32.load $push136=, 0($0) + tee_local $push135=, $1=, $pop136 + i32.store j($pop137), $pop135 + i32.const $push134=, 0 + i32.const $push13=, 5 + i32.store f($pop134), $pop13 + i32.const $push133=, 0 + i32.mul $push14=, $2, $1 + i32.const $push132=, -1 + i32.add $push15=, $pop14, $pop132 + i32.store h($pop133), $pop15 + i32.const $push131=, 0 + i32.load $push130=, 0($0) + tee_local $push129=, $1=, $pop130 + i32.store j($pop131), $pop129 + i32.const $push128=, 0 + i32.const $push16=, 6 + i32.store f($pop128), $pop16 + i32.const $push127=, 0 + i32.mul $push17=, $2, $1 + i32.const $push126=, -1 + i32.add $push18=, $pop17, $pop126 + i32.store h($pop127), $pop18 + i32.const $push125=, 0 + i32.load $push124=, 0($0) + tee_local $push123=, $1=, $pop124 + i32.store j($pop125), $pop123 + i32.const $push122=, 0 + i32.const $push19=, 7 + i32.store f($pop122), $pop19 + i32.const $push121=, 0 + i32.mul $push20=, $2, $1 + i32.const $push120=, -1 + i32.add $push21=, $pop20, $pop120 + i32.store h($pop121), $pop21 + i32.const $push119=, 0 + i32.load $push118=, 0($0) + tee_local $push117=, $1=, $pop118 + i32.store j($pop119), $pop117 + i32.const $push116=, 0 + i32.mul $push22=, $2, $1 + i32.const $push115=, -1 + i32.add $push23=, $pop22, $pop115 + i32.store h($pop116), $pop23 + i32.const $push114=, 0 + i64.load32_s $3=, b($pop114) + i32.const $push113=, 0 + i32.const $push112=, 0 + i32.store f($pop113), $pop112 + i32.const $push111=, 0 + i32.load $push110=, 0($0) + tee_local $push109=, $1=, $pop110 + i32.store j($pop111), $pop109 + i32.const $push108=, 0 + i32.const $push107=, 1 + i32.store f($pop108), $pop107 + i32.const $push106=, 0 + i32.mul $push24=, $2, $1 + i32.const $push105=, -1 + i32.add $push25=, $pop24, $pop105 + i32.store h($pop106), $pop25 + i32.const $push104=, 0 + i32.load $push103=, 0($0) + tee_local $push102=, $1=, $pop103 + i32.store j($pop104), $pop102 + i32.const $push101=, 0 + i32.const $push100=, 2 + i32.store f($pop101), $pop100 + i32.const $push99=, 0 + i32.mul $push26=, $2, $1 + i32.const $push98=, -1 + i32.add $push27=, $pop26, $pop98 + i32.store h($pop99), $pop27 + i32.const $push97=, 0 + i32.load $push96=, 0($0) + tee_local $push95=, $1=, $pop96 + i32.store j($pop97), $pop95 + i32.const $push94=, 0 + i32.const $push93=, 3 + i32.store f($pop94), $pop93 + i32.const $push92=, 0 + i32.mul $push28=, $2, $1 + i32.const $push91=, -1 + i32.add $push29=, $pop28, $pop91 + i32.store h($pop92), $pop29 + i32.const $push90=, 0 + i32.load $push89=, 0($0) + tee_local $push88=, $1=, $pop89 + i32.store j($pop90), $pop88 + i32.const $push87=, 0 + i32.const $push86=, 4 + i32.store f($pop87), $pop86 + i32.const $push85=, 0 + i32.mul $push30=, $2, $1 + i32.const $push84=, -1 + i32.add $push31=, $pop30, $pop84 + i32.store h($pop85), $pop31 + i32.const $push83=, 0 + i32.load $push82=, 0($0) + tee_local $push81=, $1=, $pop82 + i32.store j($pop83), $pop81 + i32.const $push80=, 0 + i32.const $push79=, 5 + i32.store f($pop80), $pop79 + i32.const $push78=, 0 + i32.mul $push32=, $2, $1 + i32.const $push77=, -1 + i32.add $push33=, $pop32, $pop77 + i32.store h($pop78), $pop33 + i32.const $push76=, 0 + i32.load $push75=, 0($0) + tee_local $push74=, $1=, $pop75 + i32.store j($pop76), $pop74 + i32.const $push73=, 0 + i32.const $push72=, 6 + i32.store f($pop73), $pop72 + i32.const $push71=, 0 + i32.mul $push34=, $2, $1 + i32.const $push70=, -1 + i32.add $push35=, $pop34, $pop70 + i32.store h($pop71), $pop35 + i32.const $push69=, 0 + i32.load $push68=, 0($0) + tee_local $push67=, $1=, $pop68 + i32.store j($pop69), $pop67 + i32.const $push66=, 0 + i32.const $push65=, 7 + i32.store f($pop66), $pop65 + i32.const $push64=, 0 + i32.mul $push36=, $2, $1 + i32.const $push63=, -1 + i32.add $push37=, $pop36, $pop63 + i32.store h($pop64), $pop37 + i32.const $push62=, 0 + i32.load $push61=, 0($0) + tee_local $push60=, $0=, $pop61 + i32.store j($pop62), $pop60 + i32.const $push59=, 0 + i32.const $push38=, 8 + i32.store f($pop59), $pop38 + i32.const $push58=, 0 + i32.mul $push39=, $2, $0 + i32.const $push57=, -1 + i32.add $push56=, $pop39, $pop57 + tee_local $push55=, $0=, $pop56 + i32.store h($pop58), $pop55 + i32.const $push54=, 0 + i32.eqz $push40=, $0 + i64.extend_u/i32 $push41=, $pop40 + i64.lt_s $push53=, $pop41, $3 + tee_local $push52=, $0=, $pop53 + i32.store e($pop54), $pop52 + i32.const $push51=, 0 + i32.const $push49=, 12 + i32.add $push50=, $4, $pop49 + i32.store g($pop51), $pop50 + block + i32.eqz $push170=, $0 + br_if 0, $pop170 # 0: down to label0 +# BB#1: # %if.end + i32.const $push48=, 0 + i32.const $push46=, 16 + i32.add $push47=, $4, $pop46 + i32.store __stack_pointer($pop48), $pop47 + i32.const $push169=, 0 + return $pop169 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden b # @b + .type b,@object + .section .data.b,"aw",@progbits + .globl b + .p2align 2 +b: + .int32 1 # 0x1 + .size b, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + .hidden d # @d + .type d,@object + .section .data.d,"aw",@progbits + .globl d + .p2align 2 +d: + .int32 c + .size d, 4 + + .hidden f # @f + .type f,@object + .section .bss.f,"aw",@nobits + .globl f + .p2align 2 +f: + .int32 0 # 0x0 + .size f, 4 + + .type e,@object # @e + .section .bss.e,"aw",@nobits + .p2align 2 +e: + .int32 0 # 0x0 + .size e, 4 + + .hidden j # @j + .type j,@object + .section .bss.j,"aw",@nobits + .globl j + .p2align 2 +j: + .int32 0 # 0x0 + .size j, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + .hidden h # @h + .type h,@object + .section .bss.h,"aw",@nobits + .globl h + .p2align 2 +h: + .int32 0 # 0x0 + .size h, 4 + + .hidden g # @g + .type g,@object + .section .bss.g,"aw",@nobits + .globl g + .p2align 2 +g: + .int32 0 + .size g, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr57877.c.s b/src/binaryen/test/torture-s/pr57877.c.s new file mode 100644 index 0000000000..c68ab29ca1 --- /dev/null +++ b/src/binaryen/test/torture-s/pr57877.c.s @@ -0,0 +1,155 @@ + .text + .file "pr57877.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + block + i32.const $push15=, 0 + i32.load $push14=, g($pop15) + tee_local $push13=, $4=, $pop14 + i32.const $push12=, 1 + i32.lt_s $push0=, $pop13, $pop12 + br_if 0, $pop0 # 0: down to label1 +# BB#1: # %entry.foo.exit_crit_edge + i32.const $push16=, 0 + i32.load $5=, e($pop16) + br 1 # 1: down to label0 +.LBB0_2: # %for.body.lr.ph.i + end_block # label1: + i32.const $push19=, 0 + i64.load32_s $0=, f($pop19) + i32.const $push1=, -1 + i32.add $4=, $4, $pop1 + i32.const $push18=, 0 + i32.load $2=, a($pop18) + i32.const $push17=, 0 + i32.load $1=, c($pop17) +.LBB0_3: # %for.body.i + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push33=, 0 + i32.load $push32=, 0($1) + tee_local $push31=, $3=, $pop32 + i32.store h($pop33), $pop31 + i32.const $push30=, 0 + i32.const $push29=, 2 + i32.add $push2=, $4, $pop29 + i32.store g($pop30), $pop2 + i32.const $push28=, 0 + i32.const $push27=, 16 + i32.shl $push3=, $3, $pop27 + i32.const $push26=, 16 + i32.shr_s $push4=, $pop3, $pop26 + i32.eq $push5=, $pop4, $2 + i64.extend_u/i32 $push6=, $pop5 + i64.lt_u $push25=, $pop6, $0 + tee_local $push24=, $5=, $pop25 + i32.store e($pop28), $pop24 + i32.const $push23=, 1 + i32.add $push22=, $4, $pop23 + tee_local $push21=, $4=, $pop22 + i32.const $push20=, 0 + i32.lt_s $push7=, $pop21, $pop20 + br_if 0, $pop7 # 0: up to label2 +# BB#4: # %for.cond.for.end_crit_edge.i + end_loop + i32.const $push8=, 0 + i32.store16 d($pop8), $3 +.LBB0_5: # %foo.exit + end_block # label0: + block + i32.const $push9=, 1 + i32.ne $push10=, $5, $pop9 + br_if 0, $pop10 # 0: down to label3 +# BB#6: # %if.end + i32.const $push11=, 0 + return $pop11 +.LBB0_7: # %if.then + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + .hidden c # @c + .type c,@object + .section .data.c,"aw",@progbits + .globl c + .p2align 2 +c: + .int32 b + .size c, 4 + + .hidden f # @f + .type f,@object + .section .data.f,"aw",@progbits + .globl f + .p2align 2 +f: + .int32 6 # 0x6 + .size f, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e + .p2align 2 +e: + .int32 0 # 0x0 + .size e, 4 + + .hidden g # @g + .type g,@object + .section .bss.g,"aw",@nobits + .globl g + .p2align 2 +g: + .int32 0 # 0x0 + .size g, 4 + + .hidden h # @h + .type h,@object + .section .bss.h,"aw",@nobits + .globl h + .p2align 2 +h: + .int32 0 # 0x0 + .size h, 4 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 1 +d: + .int16 0 # 0x0 + .size d, 2 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr58209.c.s b/src/binaryen/test/torture-s/pr58209.c.s new file mode 100644 index 0000000000..317e3311aa --- /dev/null +++ b/src/binaryen/test/torture-s/pr58209.c.s @@ -0,0 +1,130 @@ + .text + .file "pr58209.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + block + i32.eqz $push6=, $0 + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %if.end + i32.const $push0=, -1 + i32.add $push1=, $0, $pop0 + i32.call $push2=, foo@FUNCTION, $pop1 + i32.const $push3=, 4 + i32.add $push4=, $pop2, $pop3 + return $pop4 +.LBB0_2: # %return + end_block # label0: + i32.const $push5=, buf + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .result i32 +# BB#0: # %entry + block + i32.eqz $push6=, $0 + br_if 0, $pop6 # 0: down to label1 +# BB#1: # %if.end + i32.const $push0=, -1 + i32.add $push1=, $0, $pop0 + i32.call $push2=, foo@FUNCTION, $pop1 + i32.const $push3=, 4 + i32.add $push4=, $pop2, $pop3 + return $pop4 +.LBB1_2: + end_block # label1: + i32.const $push5=, buf + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $2=, 0 + i32.const $1=, buf-4 +.LBB2_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label3: + i32.const $push13=, 4 + i32.add $push12=, $1, $pop13 + tee_local $push11=, $1=, $pop12 + i32.call $push10=, foo@FUNCTION, $2 + tee_local $push9=, $0=, $pop10 + i32.ne $push1=, $pop11, $pop9 + br_if 1, $pop1 # 1: down to label2 +# BB#2: # %lor.lhs.false + # in Loop: Header=BB2_1 Depth=1 + block + block + i32.eqz $push18=, $2 + br_if 0, $pop18 # 0: down to label5 +# BB#3: # %if.end.i + # in Loop: Header=BB2_1 Depth=1 + i32.const $push15=, -1 + i32.add $push2=, $2, $pop15 + i32.call $push3=, foo@FUNCTION, $pop2 + i32.const $push14=, 4 + i32.add $push7=, $pop3, $pop14 + i32.eq $push5=, $pop7, $0 + br_if 1, $pop5 # 1: down to label4 + br 3 # 3: down to label2 +.LBB2_4: # in Loop: Header=BB2_1 Depth=1 + end_block # label5: + i32.const $push8=, buf + i32.ne $push4=, $pop8, $0 + br_if 2, $pop4 # 2: down to label2 +.LBB2_5: # %for.cond + # in Loop: Header=BB2_1 Depth=1 + end_block # label4: + i32.const $push17=, 25 + i32.gt_u $0=, $2, $pop17 + i32.const $push16=, 1 + i32.add $push0=, $2, $pop16 + copy_local $2=, $pop0 + i32.eqz $push19=, $0 + br_if 0, $pop19 # 0: up to label3 +# BB#6: # %for.end + end_loop + i32.const $push6=, 0 + return $pop6 +.LBB2_7: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden buf # @buf + .type buf,@object + .section .bss.buf,"aw",@nobits + .globl buf + .p2align 4 +buf: + .skip 4096 + .size buf, 4096 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr58277-1.c.s b/src/binaryen/test/torture-s/pr58277-1.c.s new file mode 100644 index 0000000000..ce8d3a6859 --- /dev/null +++ b/src/binaryen/test/torture-s/pr58277-1.c.s @@ -0,0 +1,917 @@ + .text + .file "pr58277-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push2=, 0 + i32.store8 u($pop0), $pop2 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz +# BB#0: # %entry + #APP + #NO_APP + # fallthrough-return + .endfunc +.Lfunc_end1: + .size baz, .Lfunc_end1-baz + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push334=, 0 + i32.const $push332=, 0 + i32.load $push331=, __stack_pointer($pop332) + i32.const $push333=, 32 + i32.sub $push345=, $pop331, $pop333 + tee_local $push344=, $2=, $pop345 + i32.store __stack_pointer($pop334), $pop344 + i32.const $push343=, 0 + i32.const $push342=, 1 + i32.store n($pop343), $pop342 + i32.const $push341=, 0 + i32.const $push340=, 1 + i32.store a($pop341), $pop340 + i32.const $push339=, 0 + i32.const $push338=, 0 + i32.store8 u($pop339), $pop338 + i32.const $0=, 1 +.LBB2_1: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB2_4 Depth 2 + # Child Loop BB2_6 Depth 3 + loop # label0: + i32.const $push348=, 0 + i32.const $push347=, 0 + i32.store g($pop348), $pop347 + block + block + i32.const $push346=, 0 + i32.load $push0=, l($pop346) + i32.eqz $push612=, $pop0 + br_if 0, $pop612 # 0: down to label2 +# BB#2: # %for.end + # in Loop: Header=BB2_1 Depth=1 + i32.const $push361=, 0 + i32.load $push1=, j($pop361) + i32.const $push360=, 0 + i32.store 0($pop1), $pop360 + i32.const $push359=, 0 + i32.load $push2=, i($pop359) + i32.const $push358=, 0 + i32.load $push3=, j($pop358) + i32.load $push4=, 0($pop3) + i32.store 0($pop2), $pop4 + i32.const $push357=, 0 + i32.load $push5=, i($pop357) + i32.const $push356=, 0 + i32.store 0($pop5), $pop356 + i32.const $push355=, 0 + i32.const $push354=, 1 + i32.store8 u($pop355), $pop354 + i32.const $push353=, 0 + i32.load $push6=, i($pop353) + i32.const $push352=, 0 + i32.store 0($pop6), $pop352 + i32.const $push351=, 0 + i32.const $push350=, 0 + i32.store d($pop351), $pop350 + i32.const $push349=, 0 + i32.load $push7=, i($pop349) + i32.store 0($pop7), $2 + br 1 # 1: down to label1 +.LBB2_3: # %if.else.i + # in Loop: Header=BB2_1 Depth=1 + end_block # label2: + i32.const $push368=, 0 + i32.load $push8=, i($pop368) + i32.const $push367=, 0 + i32.store 0($pop8), $pop367 + i32.const $push366=, 0 + i32.load $push9=, e($pop366) + i32.const $push365=, 0 + i32.store 0($pop9), $pop365 + i32.const $push364=, 0 + i32.const $push363=, 0 + i32.store o($pop364), $pop363 + block + i32.const $push362=, 0 + i32.load $push10=, p($pop362) + br_if 0, $pop10 # 0: down to label3 +.LBB2_4: # %if.end.i + # Parent Loop BB2_1 Depth=1 + # => This Loop Header: Depth=2 + # Child Loop BB2_6 Depth 3 + loop # label4: + i32.const $push373=, 0 + i32.load $push372=, i($pop373) + tee_local $push371=, $1=, $pop372 + i32.load $push11=, 0($pop371) + i32.const $push370=, 0 + i32.store 0($pop11), $pop370 + block + i32.const $push369=, 0 + i32.load $push12=, j($pop369) + i32.load $push13=, 0($pop12) + i32.load $push14=, 0($pop13) + br_if 0, $pop14 # 0: down to label5 +# BB#5: # %if.end110.lr.ph.i + # in Loop: Header=BB2_4 Depth=2 + i32.const $push376=, 0 + i32.load $push375=, i($pop376) + tee_local $push374=, $1=, $pop375 + i32.load $0=, 0($pop374) +.LBB2_6: # %if.end110.i + # Parent Loop BB2_1 Depth=1 + # Parent Loop BB2_4 Depth=2 + # => This Inner Loop Header: Depth=3 + loop # label6: + i32.const $push383=, 0 + i32.const $push382=, 0 + i32.load $push15=, k($pop382) + i32.const $push381=, 1 + i32.add $push16=, $pop15, $pop381 + i32.store k($pop383), $pop16 + i32.const $push380=, 0 + i32.store 0($0), $pop380 + i32.const $push379=, 0 + i32.const $push378=, 0 + i32.store8 u($pop379), $pop378 + i32.const $push377=, 0 + i32.load $push17=, j($pop377) + i32.load $push18=, 0($pop17) + i32.load $push19=, 0($pop18) + i32.eqz $push613=, $pop19 + br_if 0, $pop613 # 0: up to label6 +.LBB2_7: # %for.end.i + # in Loop: Header=BB2_4 Depth=2 + end_loop + end_block # label5: + i32.const $push404=, 0 + i32.load $push20=, j($pop404) + i32.load $push21=, 0($pop20) + i32.store 0($1), $pop21 + i32.const $push403=, 0 + i32.load $push22=, i($pop403) + i32.const $push402=, 0 + i32.load $push23=, j($pop402) + i32.load $push24=, 0($pop23) + i32.store 0($pop22), $pop24 + i32.const $push401=, 0 + i32.load $push25=, i($pop401) + i32.const $push400=, 0 + i32.load $push26=, j($pop400) + i32.load $push27=, 0($pop26) + i32.store 0($pop25), $pop27 + i32.const $push399=, 0 + i32.load $push28=, i($pop399) + i32.const $push398=, 0 + i32.load $push29=, j($pop398) + i32.load $push30=, 0($pop29) + i32.store 0($pop28), $pop30 + i32.const $push397=, 0 + i32.load $push31=, i($pop397) + i32.const $push396=, 0 + i32.load $push32=, j($pop396) + i32.load $push33=, 0($pop32) + i32.store 0($pop31), $pop33 + i32.const $push395=, 0 + i32.load $push34=, i($pop395) + i32.const $push394=, 0 + i32.load $push35=, j($pop394) + i32.load $push36=, 0($pop35) + i32.store 0($pop34), $pop36 + i32.const $push393=, 0 + i32.load $push37=, i($pop393) + i32.const $push392=, 0 + i32.store 0($pop37), $pop392 + i32.const $push391=, 0 + i32.const $push390=, 0 + i32.load $push38=, h($pop390) + i32.const $push389=, 1 + i32.add $push39=, $pop38, $pop389 + i32.store h($pop391), $pop39 + i32.const $push388=, 0 + i32.load $push40=, e($pop388) + i32.const $push387=, 0 + i32.store 0($pop40), $pop387 + i32.const $push386=, 0 + i32.const $push385=, 0 + i32.store o($pop386), $pop385 + i32.const $push384=, 0 + i32.load $push41=, p($pop384) + i32.eqz $push614=, $pop41 + br_if 0, $pop614 # 0: up to label4 +.LBB2_8: # %foo.exit.thread + # in Loop: Header=BB2_1 Depth=1 + end_loop + end_block # label3: + i32.const $push407=, 0 + i32.const $push406=, 0 + i32.store f($pop407), $pop406 + i32.const $push405=, 0 + i32.load $0=, n($pop405) +.LBB2_9: # %for.inc7 + # in Loop: Header=BB2_1 Depth=1 + end_block # label1: + i32.const $push413=, 0 + i32.const $push412=, -1 + i32.add $push411=, $0, $pop412 + tee_local $push410=, $0=, $pop411 + i32.store n($pop413), $pop410 + i32.const $push409=, 0 + i32.const $push408=, 0 + i32.store8 u($pop409), $pop408 + br_if 0, $0 # 0: up to label0 +# BB#10: # %for.end8 + end_loop + block + i32.const $push416=, 0 + i32.load $push415=, b($pop416) + tee_local $push414=, $1=, $pop415 + i32.eqz $push615=, $pop414 + br_if 0, $pop615 # 0: down to label7 +# BB#11: # %for.body11.lr.ph + i32.const $push417=, 0 + i32.load $0=, c($pop417) +.LBB2_12: # %for.body11 + # =>This Inner Loop Header: Depth=1 + loop # label8: + i32.const $push580=, 2 + i32.shl $push42=, $0, $pop580 + i32.const $push579=, a + i32.add $push43=, $pop42, $pop579 + i32.load $push44=, 0($pop43) + i32.const $push578=, 2 + i32.shl $push45=, $pop44, $pop578 + i32.const $push577=, a + i32.add $push46=, $pop45, $pop577 + i32.load $push47=, 0($pop46) + i32.const $push576=, 2 + i32.shl $push48=, $pop47, $pop576 + i32.const $push575=, a + i32.add $push49=, $pop48, $pop575 + i32.load $push50=, 0($pop49) + i32.const $push574=, 2 + i32.shl $push51=, $pop50, $pop574 + i32.const $push573=, a + i32.add $push52=, $pop51, $pop573 + i32.load $push53=, 0($pop52) + i32.const $push572=, 2 + i32.shl $push54=, $pop53, $pop572 + i32.const $push571=, a + i32.add $push55=, $pop54, $pop571 + i32.load $push56=, 0($pop55) + i32.const $push570=, 2 + i32.shl $push57=, $pop56, $pop570 + i32.const $push569=, a + i32.add $push58=, $pop57, $pop569 + i32.load $push59=, 0($pop58) + i32.const $push568=, 2 + i32.shl $push60=, $pop59, $pop568 + i32.const $push567=, a + i32.add $push61=, $pop60, $pop567 + i32.load $push62=, 0($pop61) + i32.const $push566=, 2 + i32.shl $push63=, $pop62, $pop566 + i32.const $push565=, a + i32.add $push64=, $pop63, $pop565 + i32.load $push65=, 0($pop64) + i32.const $push564=, 2 + i32.shl $push66=, $pop65, $pop564 + i32.const $push563=, a + i32.add $push67=, $pop66, $pop563 + i32.load $push68=, 0($pop67) + i32.const $push562=, 2 + i32.shl $push69=, $pop68, $pop562 + i32.const $push561=, a + i32.add $push70=, $pop69, $pop561 + i32.load $push71=, 0($pop70) + i32.const $push560=, 2 + i32.shl $push72=, $pop71, $pop560 + i32.const $push559=, a + i32.add $push73=, $pop72, $pop559 + i32.load $push74=, 0($pop73) + i32.const $push558=, 2 + i32.shl $push75=, $pop74, $pop558 + i32.const $push557=, a + i32.add $push76=, $pop75, $pop557 + i32.load $push77=, 0($pop76) + i32.const $push556=, 2 + i32.shl $push78=, $pop77, $pop556 + i32.const $push555=, a + i32.add $push79=, $pop78, $pop555 + i32.load $push80=, 0($pop79) + i32.const $push554=, 2 + i32.shl $push81=, $pop80, $pop554 + i32.const $push553=, a + i32.add $push82=, $pop81, $pop553 + i32.load $push83=, 0($pop82) + i32.const $push552=, 2 + i32.shl $push84=, $pop83, $pop552 + i32.const $push551=, a + i32.add $push85=, $pop84, $pop551 + i32.load $push86=, 0($pop85) + i32.const $push550=, 2 + i32.shl $push87=, $pop86, $pop550 + i32.const $push549=, a + i32.add $push88=, $pop87, $pop549 + i32.load $push89=, 0($pop88) + i32.const $push548=, 2 + i32.shl $push90=, $pop89, $pop548 + i32.const $push547=, a + i32.add $push91=, $pop90, $pop547 + i32.load $push92=, 0($pop91) + i32.const $push546=, 2 + i32.shl $push93=, $pop92, $pop546 + i32.const $push545=, a + i32.add $push94=, $pop93, $pop545 + i32.load $push95=, 0($pop94) + i32.const $push544=, 2 + i32.shl $push96=, $pop95, $pop544 + i32.const $push543=, a + i32.add $push97=, $pop96, $pop543 + i32.load $push98=, 0($pop97) + i32.const $push542=, 2 + i32.shl $push99=, $pop98, $pop542 + i32.const $push541=, a + i32.add $push100=, $pop99, $pop541 + i32.load $push101=, 0($pop100) + i32.const $push540=, 2 + i32.shl $push102=, $pop101, $pop540 + i32.const $push539=, a + i32.add $push103=, $pop102, $pop539 + i32.load $push104=, 0($pop103) + i32.const $push538=, 2 + i32.shl $push105=, $pop104, $pop538 + i32.const $push537=, a + i32.add $push106=, $pop105, $pop537 + i32.load $push107=, 0($pop106) + i32.const $push536=, 2 + i32.shl $push108=, $pop107, $pop536 + i32.const $push535=, a + i32.add $push109=, $pop108, $pop535 + i32.load $push110=, 0($pop109) + i32.const $push534=, 2 + i32.shl $push111=, $pop110, $pop534 + i32.const $push533=, a + i32.add $push112=, $pop111, $pop533 + i32.load $push113=, 0($pop112) + i32.const $push532=, 2 + i32.shl $push114=, $pop113, $pop532 + i32.const $push531=, a + i32.add $push115=, $pop114, $pop531 + i32.load $push116=, 0($pop115) + i32.const $push530=, 2 + i32.shl $push117=, $pop116, $pop530 + i32.const $push529=, a + i32.add $push118=, $pop117, $pop529 + i32.load $push119=, 0($pop118) + i32.const $push528=, 2 + i32.shl $push120=, $pop119, $pop528 + i32.const $push527=, a + i32.add $push121=, $pop120, $pop527 + i32.load $push122=, 0($pop121) + i32.const $push526=, 2 + i32.shl $push123=, $pop122, $pop526 + i32.const $push525=, a + i32.add $push124=, $pop123, $pop525 + i32.load $push125=, 0($pop124) + i32.const $push524=, 2 + i32.shl $push126=, $pop125, $pop524 + i32.const $push523=, a + i32.add $push127=, $pop126, $pop523 + i32.load $push128=, 0($pop127) + i32.const $push522=, 2 + i32.shl $push129=, $pop128, $pop522 + i32.const $push521=, a + i32.add $push130=, $pop129, $pop521 + i32.load $push131=, 0($pop130) + i32.const $push520=, 2 + i32.shl $push132=, $pop131, $pop520 + i32.const $push519=, a + i32.add $push133=, $pop132, $pop519 + i32.load $push134=, 0($pop133) + i32.const $push518=, 2 + i32.shl $push135=, $pop134, $pop518 + i32.const $push517=, a + i32.add $push136=, $pop135, $pop517 + i32.load $push137=, 0($pop136) + i32.const $push516=, 2 + i32.shl $push138=, $pop137, $pop516 + i32.const $push515=, a + i32.add $push139=, $pop138, $pop515 + i32.load $push140=, 0($pop139) + i32.const $push514=, 2 + i32.shl $push141=, $pop140, $pop514 + i32.const $push513=, a + i32.add $push142=, $pop141, $pop513 + i32.load $push143=, 0($pop142) + i32.const $push512=, 2 + i32.shl $push144=, $pop143, $pop512 + i32.const $push511=, a + i32.add $push145=, $pop144, $pop511 + i32.load $push146=, 0($pop145) + i32.const $push510=, 2 + i32.shl $push147=, $pop146, $pop510 + i32.const $push509=, a + i32.add $push148=, $pop147, $pop509 + i32.load $push149=, 0($pop148) + i32.const $push508=, 2 + i32.shl $push150=, $pop149, $pop508 + i32.const $push507=, a + i32.add $push151=, $pop150, $pop507 + i32.load $push152=, 0($pop151) + i32.const $push506=, 2 + i32.shl $push153=, $pop152, $pop506 + i32.const $push505=, a + i32.add $push154=, $pop153, $pop505 + i32.load $push155=, 0($pop154) + i32.const $push504=, 2 + i32.shl $push156=, $pop155, $pop504 + i32.const $push503=, a + i32.add $push157=, $pop156, $pop503 + i32.load $push158=, 0($pop157) + i32.const $push502=, 2 + i32.shl $push159=, $pop158, $pop502 + i32.const $push501=, a + i32.add $push160=, $pop159, $pop501 + i32.load $push161=, 0($pop160) + i32.const $push500=, 2 + i32.shl $push162=, $pop161, $pop500 + i32.const $push499=, a + i32.add $push163=, $pop162, $pop499 + i32.load $push164=, 0($pop163) + i32.const $push498=, 2 + i32.shl $push165=, $pop164, $pop498 + i32.const $push497=, a + i32.add $push166=, $pop165, $pop497 + i32.load $push167=, 0($pop166) + i32.const $push496=, 2 + i32.shl $push168=, $pop167, $pop496 + i32.const $push495=, a + i32.add $push169=, $pop168, $pop495 + i32.load $push170=, 0($pop169) + i32.const $push494=, 2 + i32.shl $push171=, $pop170, $pop494 + i32.const $push493=, a + i32.add $push172=, $pop171, $pop493 + i32.load $push173=, 0($pop172) + i32.const $push492=, 2 + i32.shl $push174=, $pop173, $pop492 + i32.const $push491=, a + i32.add $push175=, $pop174, $pop491 + i32.load $push176=, 0($pop175) + i32.const $push490=, 2 + i32.shl $push177=, $pop176, $pop490 + i32.const $push489=, a + i32.add $push178=, $pop177, $pop489 + i32.load $push179=, 0($pop178) + i32.const $push488=, 2 + i32.shl $push180=, $pop179, $pop488 + i32.const $push487=, a + i32.add $push181=, $pop180, $pop487 + i32.load $push182=, 0($pop181) + i32.const $push486=, 2 + i32.shl $push183=, $pop182, $pop486 + i32.const $push485=, a + i32.add $push184=, $pop183, $pop485 + i32.load $push185=, 0($pop184) + i32.const $push484=, 2 + i32.shl $push186=, $pop185, $pop484 + i32.const $push483=, a + i32.add $push187=, $pop186, $pop483 + i32.load $push188=, 0($pop187) + i32.const $push482=, 2 + i32.shl $push189=, $pop188, $pop482 + i32.const $push481=, a + i32.add $push190=, $pop189, $pop481 + i32.load $push191=, 0($pop190) + i32.const $push480=, 2 + i32.shl $push192=, $pop191, $pop480 + i32.const $push479=, a + i32.add $push193=, $pop192, $pop479 + i32.load $push194=, 0($pop193) + i32.const $push478=, 2 + i32.shl $push195=, $pop194, $pop478 + i32.const $push477=, a + i32.add $push196=, $pop195, $pop477 + i32.load $push197=, 0($pop196) + i32.const $push476=, 2 + i32.shl $push198=, $pop197, $pop476 + i32.const $push475=, a + i32.add $push199=, $pop198, $pop475 + i32.load $push200=, 0($pop199) + i32.const $push474=, 2 + i32.shl $push201=, $pop200, $pop474 + i32.const $push473=, a + i32.add $push202=, $pop201, $pop473 + i32.load $push203=, 0($pop202) + i32.const $push472=, 2 + i32.shl $push204=, $pop203, $pop472 + i32.const $push471=, a + i32.add $push205=, $pop204, $pop471 + i32.load $push206=, 0($pop205) + i32.const $push470=, 2 + i32.shl $push207=, $pop206, $pop470 + i32.const $push469=, a + i32.add $push208=, $pop207, $pop469 + i32.load $push209=, 0($pop208) + i32.const $push468=, 2 + i32.shl $push210=, $pop209, $pop468 + i32.const $push467=, a + i32.add $push211=, $pop210, $pop467 + i32.load $push212=, 0($pop211) + i32.const $push466=, 2 + i32.shl $push213=, $pop212, $pop466 + i32.const $push465=, a + i32.add $push214=, $pop213, $pop465 + i32.load $push215=, 0($pop214) + i32.const $push464=, 2 + i32.shl $push216=, $pop215, $pop464 + i32.const $push463=, a + i32.add $push217=, $pop216, $pop463 + i32.load $push218=, 0($pop217) + i32.const $push462=, 2 + i32.shl $push219=, $pop218, $pop462 + i32.const $push461=, a + i32.add $push220=, $pop219, $pop461 + i32.load $push221=, 0($pop220) + i32.const $push460=, 2 + i32.shl $push222=, $pop221, $pop460 + i32.const $push459=, a + i32.add $push223=, $pop222, $pop459 + i32.load $push224=, 0($pop223) + i32.const $push458=, 2 + i32.shl $push225=, $pop224, $pop458 + i32.const $push457=, a + i32.add $push226=, $pop225, $pop457 + i32.load $push227=, 0($pop226) + i32.const $push456=, 2 + i32.shl $push228=, $pop227, $pop456 + i32.const $push455=, a + i32.add $push229=, $pop228, $pop455 + i32.load $push230=, 0($pop229) + i32.const $push454=, 2 + i32.shl $push231=, $pop230, $pop454 + i32.const $push453=, a + i32.add $push232=, $pop231, $pop453 + i32.load $push233=, 0($pop232) + i32.const $push452=, 2 + i32.shl $push234=, $pop233, $pop452 + i32.const $push451=, a + i32.add $push235=, $pop234, $pop451 + i32.load $push236=, 0($pop235) + i32.const $push450=, 2 + i32.shl $push237=, $pop236, $pop450 + i32.const $push449=, a + i32.add $push238=, $pop237, $pop449 + i32.load $push239=, 0($pop238) + i32.const $push448=, 2 + i32.shl $push240=, $pop239, $pop448 + i32.const $push447=, a + i32.add $push241=, $pop240, $pop447 + i32.load $push242=, 0($pop241) + i32.const $push446=, 2 + i32.shl $push243=, $pop242, $pop446 + i32.const $push445=, a + i32.add $push244=, $pop243, $pop445 + i32.load $push245=, 0($pop244) + i32.const $push444=, 2 + i32.shl $push246=, $pop245, $pop444 + i32.const $push443=, a + i32.add $push247=, $pop246, $pop443 + i32.load $push248=, 0($pop247) + i32.const $push442=, 2 + i32.shl $push249=, $pop248, $pop442 + i32.const $push441=, a + i32.add $push250=, $pop249, $pop441 + i32.load $push251=, 0($pop250) + i32.const $push440=, 2 + i32.shl $push252=, $pop251, $pop440 + i32.const $push439=, a + i32.add $push253=, $pop252, $pop439 + i32.load $push254=, 0($pop253) + i32.const $push438=, 2 + i32.shl $push255=, $pop254, $pop438 + i32.const $push437=, a + i32.add $push256=, $pop255, $pop437 + i32.load $push257=, 0($pop256) + i32.const $push436=, 2 + i32.shl $push258=, $pop257, $pop436 + i32.const $push435=, a + i32.add $push259=, $pop258, $pop435 + i32.load $push260=, 0($pop259) + i32.const $push434=, 2 + i32.shl $push261=, $pop260, $pop434 + i32.const $push433=, a + i32.add $push262=, $pop261, $pop433 + i32.load $push263=, 0($pop262) + i32.const $push432=, 2 + i32.shl $push264=, $pop263, $pop432 + i32.const $push431=, a + i32.add $push265=, $pop264, $pop431 + i32.load $push266=, 0($pop265) + i32.const $push430=, 2 + i32.shl $push267=, $pop266, $pop430 + i32.const $push429=, a + i32.add $push268=, $pop267, $pop429 + i32.load $push269=, 0($pop268) + i32.const $push428=, 2 + i32.shl $push270=, $pop269, $pop428 + i32.const $push427=, a + i32.add $push271=, $pop270, $pop427 + i32.load $push272=, 0($pop271) + i32.const $push426=, 2 + i32.shl $push273=, $pop272, $pop426 + i32.const $push425=, a + i32.add $push274=, $pop273, $pop425 + i32.load $push275=, 0($pop274) + i32.const $push424=, 2 + i32.shl $push276=, $pop275, $pop424 + i32.const $push423=, a + i32.add $push277=, $pop276, $pop423 + i32.load $push278=, 0($pop277) + i32.const $push422=, 2 + i32.shl $push279=, $pop278, $pop422 + i32.const $push421=, a + i32.add $push280=, $pop279, $pop421 + i32.load $0=, 0($pop280) + i32.const $push420=, 1 + i32.add $push419=, $1, $pop420 + tee_local $push418=, $1=, $pop419 + br_if 0, $pop418 # 0: up to label8 +# BB#13: # %for.cond9.for.end29_crit_edge + end_loop + i32.const $push281=, 0 + i32.store c($pop281), $0 + i32.const $push582=, 0 + i32.const $push581=, 0 + i32.store b($pop582), $pop581 +.LBB2_14: # %for.end29 + end_block # label7: + call baz@FUNCTION + block + i32.const $push611=, 0 + i32.load8_s $push282=, u($pop611) + i32.const $push283=, 2 + i32.shl $push284=, $pop282, $pop283 + i32.const $push285=, a + i32.add $push286=, $pop284, $pop285 + i32.load $push287=, 0($pop286) + i32.const $push610=, 2 + i32.shl $push288=, $pop287, $pop610 + i32.const $push609=, a + i32.add $push289=, $pop288, $pop609 + i32.load $push290=, 0($pop289) + i32.const $push608=, 2 + i32.shl $push291=, $pop290, $pop608 + i32.const $push607=, a + i32.add $push292=, $pop291, $pop607 + i32.load $push293=, 0($pop292) + i32.const $push606=, 2 + i32.shl $push294=, $pop293, $pop606 + i32.const $push605=, a + i32.add $push295=, $pop294, $pop605 + i32.load $push296=, 0($pop295) + i32.const $push604=, 2 + i32.shl $push297=, $pop296, $pop604 + i32.const $push603=, a + i32.add $push298=, $pop297, $pop603 + i32.load $push299=, 0($pop298) + i32.const $push602=, 2 + i32.shl $push300=, $pop299, $pop602 + i32.const $push601=, a + i32.add $push301=, $pop300, $pop601 + i32.load $push302=, 0($pop301) + i32.const $push600=, 2 + i32.shl $push303=, $pop302, $pop600 + i32.const $push599=, a + i32.add $push304=, $pop303, $pop599 + i32.load $push305=, 0($pop304) + i32.const $push598=, 2 + i32.shl $push306=, $pop305, $pop598 + i32.const $push597=, a + i32.add $push307=, $pop306, $pop597 + i32.load $push308=, 0($pop307) + i32.const $push596=, 2 + i32.shl $push309=, $pop308, $pop596 + i32.const $push595=, a + i32.add $push310=, $pop309, $pop595 + i32.load $push311=, 0($pop310) + i32.const $push594=, 2 + i32.shl $push312=, $pop311, $pop594 + i32.const $push593=, a + i32.add $push313=, $pop312, $pop593 + i32.load $push314=, 0($pop313) + i32.const $push592=, 2 + i32.shl $push315=, $pop314, $pop592 + i32.const $push591=, a + i32.add $push316=, $pop315, $pop591 + i32.load $push317=, 0($pop316) + i32.const $push590=, 2 + i32.shl $push318=, $pop317, $pop590 + i32.const $push589=, a + i32.add $push319=, $pop318, $pop589 + i32.load $push320=, 0($pop319) + i32.const $push588=, 2 + i32.shl $push321=, $pop320, $pop588 + i32.const $push587=, a + i32.add $push322=, $pop321, $pop587 + i32.load $push323=, 0($pop322) + i32.const $push586=, 2 + i32.shl $push324=, $pop323, $pop586 + i32.const $push585=, a + i32.add $push325=, $pop324, $pop585 + i32.load $push326=, 0($pop325) + i32.const $push584=, 2 + i32.shl $push327=, $pop326, $pop584 + i32.const $push583=, a + i32.add $push328=, $pop327, $pop583 + i32.load $push329=, 0($pop328) + i32.eqz $push616=, $pop329 + br_if 0, $pop616 # 0: down to label9 +# BB#15: # %if.end47 + i32.const $push337=, 0 + i32.const $push335=, 32 + i32.add $push336=, $2, $pop335 + i32.store __stack_pointer($pop337), $pop336 + i32.const $push330=, 0 + return $pop330 +.LBB2_16: # %if.then46 + end_block # label9: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e + .p2align 2 +e: + .int32 0 + .size e, 4 + + .hidden i # @i + .type i,@object + .section .data.i,"aw",@progbits + .globl i + .p2align 2 +i: + .int32 e + .size i, 4 + + .hidden l # @l + .type l,@object + .section .data.l,"aw",@progbits + .globl l + .p2align 2 +l: + .int32 1 # 0x1 + .size l, 4 + + .hidden u # @u + .type u,@object + .section .bss.u,"aw",@nobits + .globl u +u: + .int8 0 # 0x0 + .size u, 1 + + .hidden m # @m + .type m,@object + .section .rodata.m,"a",@progbits + .globl m + .p2align 2 +m: + .int32 0 # 0x0 + .size m, 4 + + .type a,@object # @a + .section .bss.a,"aw",@nobits + .p2align 2 +a: + .skip 8 + .size a, 8 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .int32 0 # 0x0 + .size d, 4 + + .hidden n # @n + .type n,@object + .section .bss.n,"aw",@nobits + .globl n + .p2align 2 +n: + .int32 0 # 0x0 + .size n, 4 + + .type j,@object # @j + .section .data.j,"aw",@progbits + .p2align 2 +j: + .int32 e + .size j, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + .hidden f # @f + .type f,@object + .section .bss.f,"aw",@nobits + .globl f + .p2align 2 +f: + .int32 0 # 0x0 + .size f, 4 + + .hidden g # @g + .type g,@object + .section .bss.g,"aw",@nobits + .globl g + .p2align 2 +g: + .int32 0 # 0x0 + .size g, 4 + + .hidden h # @h + .type h,@object + .section .bss.h,"aw",@nobits + .globl h + .p2align 2 +h: + .int32 0 # 0x0 + .size h, 4 + + .hidden k # @k + .type k,@object + .section .bss.k,"aw",@nobits + .globl k + .p2align 2 +k: + .int32 0 # 0x0 + .size k, 4 + + .hidden o # @o + .type o,@object + .section .bss.o,"aw",@nobits + .globl o + .p2align 2 +o: + .int32 0 # 0x0 + .size o, 4 + + .hidden p # @p + .type p,@object + .section .bss.p,"aw",@nobits + .globl p + .p2align 2 +p: + .int32 0 # 0x0 + .size p, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr58277-2.c.s b/src/binaryen/test/torture-s/pr58277-2.c.s new file mode 100644 index 0000000000..067ee2f987 --- /dev/null +++ b/src/binaryen/test/torture-s/pr58277-2.c.s @@ -0,0 +1,124 @@ + .text + .file "pr58277-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push6=, 0 + i32.store8 n($pop7), $pop6 + block + block + i32.const $push5=, 0 + i32.load $push0=, g($pop5) + i32.eqz $push16=, $pop0 + br_if 0, $pop16 # 0: down to label1 +# BB#1: # %fn2.exit.thread.i + i32.const $push8=, 0 + i32.load $drop=, d($pop8) + br 1 # 1: down to label0 +.LBB0_2: # %if.then.i + end_block # label1: + i32.const $push11=, 0 + i32.const $push1=, 1 + i32.store8 n($pop11), $pop1 + i32.const $push10=, 0 + i32.load $push2=, h($pop10) + i32.const $push9=, 0 + i32.store 0($pop2), $pop9 +.LBB0_3: # %if.end + end_block # label0: + i32.const $push3=, 0 + i32.load $push4=, s($pop3) + i32.const $push15=, 0 + i32.store 0($pop4), $pop15 + i32.const $push14=, 0 + i32.const $push13=, 0 + i32.store8 n($pop14), $pop13 + i32.const $push12=, 0 + # fallthrough-return: $pop12 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden n # @n + .type n,@object + .section .bss.n,"aw",@nobits + .globl n +n: + .int8 0 # 0x0 + .size n, 1 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .int32 0 # 0x0 + .size d, 4 + + .hidden r # @r + .type r,@object + .section .bss.r,"aw",@nobits + .globl r + .p2align 2 +r: + .int32 0 + .size r, 4 + + .hidden f # @f + .type f,@object + .section .bss.f,"aw",@nobits + .globl f + .p2align 2 +f: + .int32 0 # 0x0 + .size f, 4 + + .hidden g # @g + .type g,@object + .section .bss.g,"aw",@nobits + .globl g + .p2align 2 +g: + .int32 0 # 0x0 + .size g, 4 + + .hidden o # @o + .type o,@object + .section .bss.o,"aw",@nobits + .globl o + .p2align 2 +o: + .int32 0 # 0x0 + .size o, 4 + + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 2 +x: + .int32 0 # 0x0 + .size x, 4 + + .type h,@object # @h + .section .data.h,"aw",@progbits + .p2align 2 +h: + .int32 f + .size h, 4 + + .type s,@object # @s + .section .data.s,"aw",@progbits + .p2align 2 +s: + .int32 r + .size s, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr58364.c.s b/src/binaryen/test/torture-s/pr58364.c.s new file mode 100644 index 0000000000..60ee4fec6e --- /dev/null +++ b/src/binaryen/test/torture-s/pr58364.c.s @@ -0,0 +1,77 @@ + .text + .file "pr58364.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push2=, 1 + i32.const $push0=, 0 + i32.lt_s $push1=, $0, $pop0 + i32.select $push3=, $pop2, $0, $pop1 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push5=, 0 + i32.store b($pop6), $pop5 + block + i32.const $push4=, 0 + i32.load $push1=, a($pop4) + i32.const $push3=, 0 + i32.load $push0=, c($pop3) + i32.le_s $push2=, $pop1, $pop0 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push7=, 0 + return $pop7 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 1 # 0x1 + .size a, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr58365.c.s b/src/binaryen/test/torture-s/pr58365.c.s new file mode 100644 index 0000000000..8ca6d48d7c --- /dev/null +++ b/src/binaryen/test/torture-s/pr58365.c.s @@ -0,0 +1,129 @@ + .text + .file "pr58365.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load8_s $push1=, i($pop0) + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push25=, 0 + i32.const $push23=, 0 + i32.load $push22=, __stack_pointer($pop23) + i32.const $push24=, 32 + i32.sub $push31=, $pop22, $pop24 + tee_local $push30=, $0=, $pop31 + i32.store __stack_pointer($pop25), $pop30 + block + block + i32.const $push29=, 0 + i32.load8_u $push0=, i($pop29) + i32.eqz $push43=, $pop0 + br_if 0, $pop43 # 0: down to label1 +# BB#1: # %if.then.i + i32.const $push2=, 24 + i32.add $push3=, $0, $pop2 + i32.const $push34=, 0 + i32.load $push1=, f+16($pop34) + i32.store 0($pop3), $pop1 + i32.const $push5=, 16 + i32.add $push6=, $0, $pop5 + i32.const $push33=, 0 + i64.load $push4=, f+8($pop33):p2align=2 + i64.store 0($pop6), $pop4 + i32.const $push32=, 0 + i64.load $push7=, f($pop32):p2align=2 + i64.store 8($0), $pop7 + br 1 # 1: down to label0 +.LBB1_2: # %if.end.i + end_block # label1: + i32.const $push8=, 24 + i32.add $push9=, $0, $pop8 + i32.const $push36=, 0 + i32.store 0($pop9), $pop36 + i32.const $push10=, 16 + i32.add $push11=, $0, $pop10 + i64.const $push12=, 0 + i64.store 0($pop11), $pop12 + i64.const $push35=, 0 + i64.store 8($0), $pop35 +.LBB1_3: # %bar.exit + end_block # label0: + i32.const $push41=, 0 + i64.load $push13=, 8($0) + i64.store h($pop41):p2align=2, $pop13 + i32.const $push40=, 0 + i32.const $push14=, 1 + i32.store f+4($pop40), $pop14 + i32.const $push39=, 0 + i32.const $push15=, 24 + i32.add $push16=, $0, $pop15 + i32.load $push17=, 0($pop16) + i32.store h+16($pop39), $pop17 + i32.const $push38=, 0 + i32.const $push18=, 16 + i32.add $push19=, $0, $pop18 + i64.load $push20=, 0($pop19) + i64.store h+8($pop38):p2align=2, $pop20 + block + i32.const $push37=, 0 + i32.load $push21=, h+4($pop37) + br_if 0, $pop21 # 0: down to label2 +# BB#4: # %if.end + i32.const $push28=, 0 + i32.const $push26=, 32 + i32.add $push27=, $0, $pop26 + i32.store __stack_pointer($pop28), $pop27 + i32.const $push42=, 0 + return $pop42 +.LBB1_5: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden i # @i + .type i,@object + .section .data.i,"aw",@progbits + .globl i + .p2align 2 +i: + .int32 1 # 0x1 + .size i, 4 + + .type h,@object # @h + .section .bss.h,"aw",@nobits + .p2align 2 +h: + .skip 20 + .size h, 20 + + .hidden f # @f + .type f,@object + .section .bss.f,"aw",@nobits + .globl f + .p2align 2 +f: + .skip 20 + .size f, 20 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr58385.c.s b/src/binaryen/test/torture-s/pr58385.c.s new file mode 100644 index 0000000000..88b7c69216 --- /dev/null +++ b/src/binaryen/test/torture-s/pr58385.c.s @@ -0,0 +1,54 @@ + .text + .file "pr58385.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push2=, 0 + i32.store b($pop0), $pop2 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + i32.const $push2=, 0 + i32.store b($pop0), $pop2 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden b # @b + .type b,@object + .section .data.b,"aw",@progbits + .globl b + .p2align 2 +b: + .int32 1 # 0x1 + .size b, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr58387.c.s b/src/binaryen/test/torture-s/pr58387.c.s new file mode 100644 index 0000000000..1e38c73734 --- /dev/null +++ b/src/binaryen/test/torture-s/pr58387.c.s @@ -0,0 +1,38 @@ + .text + .file "pr58387.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load $push0=, a($pop3) + i32.const $push2=, 0 + i32.ge_s $push1=, $pop0, $pop2 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 4294967295 # 0xffffffff + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr58419.c.s b/src/binaryen/test/torture-s/pr58419.c.s new file mode 100644 index 0000000000..4660ff7a83 --- /dev/null +++ b/src/binaryen/test/torture-s/pr58419.c.s @@ -0,0 +1,372 @@ + .text + .file "pr58419.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.sub $push0=, $0, $1 + i32.const $push1=, 24 + i32.shl $push2=, $pop0, $pop1 + i32.const $push4=, 24 + i32.shr_s $push3=, $pop2, $pop4 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store16 c($pop1), $pop0 + i32.const $push5=, 0 + i32.load $push2=, p($pop5) + i32.const $push4=, 0 + i32.store 0($pop2), $pop4 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push56=, 0 + i32.const $push0=, 234 + i32.store8 b($pop56), $pop0 + i32.const $5=, 1 + i32.const $push55=, 0 + i32.load $0=, p($pop55) + i32.const $1=, 1 + block + i32.const $push54=, 0 + i32.load $push53=, k($pop54) + tee_local $push52=, $4=, $pop53 + i32.const $push51=, 0 + i32.ne $push2=, $pop52, $pop51 + i32.const $push50=, 0 + i32.load16_u $push49=, c($pop50) + tee_local $push48=, $3=, $pop49 + i32.const $push47=, 0 + i32.ne $push1=, $pop48, $pop47 + i32.and $push3=, $pop2, $pop1 + i32.const $push46=, 0 + i32.load $push45=, i($pop46) + tee_local $push44=, $2=, $pop45 + i32.const $push43=, 1 + i32.lt_s $push4=, $pop44, $pop43 + i32.sub $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %lor.rhs + i32.const $push61=, 0 + i32.store 0($0), $pop61 + i32.const $3=, 1 + i32.const $push60=, 0 + i32.const $push59=, 1 + i32.store16 c($pop60), $pop59 + i32.const $push58=, 0 + i32.load $2=, i($pop58) + i32.const $push57=, 0 + i32.load $4=, k($pop57) + i32.const $1=, 0 +.LBB2_2: # %lor.end + end_block # label0: + i32.const $push65=, 0 + i32.store g($pop65), $1 + block + i32.const $push64=, 0 + i32.ne $push7=, $4, $pop64 + i32.const $push63=, 0 + i32.ne $push6=, $3, $pop63 + i32.and $push8=, $pop7, $pop6 + i32.const $push62=, 1 + i32.lt_s $push9=, $2, $pop62 + i32.sub $push10=, $pop8, $pop9 + br_if 0, $pop10 # 0: down to label1 +# BB#3: # %lor.rhs.1 + i32.const $5=, 0 + i32.const $push70=, 0 + i32.store 0($0), $pop70 + i32.const $3=, 1 + i32.const $push69=, 0 + i32.const $push68=, 1 + i32.store16 c($pop69), $pop68 + i32.const $push67=, 0 + i32.load $2=, i($pop67) + i32.const $push66=, 0 + i32.load $4=, k($pop66) +.LBB2_4: # %lor.end.1 + end_block # label1: + i32.const $push74=, 0 + i32.store g($pop74), $5 + i32.const $5=, 1 + i32.const $1=, 1 + block + i32.const $push73=, 0 + i32.ne $push12=, $4, $pop73 + i32.const $push72=, 0 + i32.ne $push11=, $3, $pop72 + i32.and $push13=, $pop12, $pop11 + i32.const $push71=, 1 + i32.lt_s $push14=, $2, $pop71 + i32.sub $push15=, $pop13, $pop14 + br_if 0, $pop15 # 0: down to label2 +# BB#5: # %lor.rhs.2 + i32.const $push79=, 0 + i32.store 0($0), $pop79 + i32.const $3=, 1 + i32.const $push78=, 0 + i32.const $push77=, 1 + i32.store16 c($pop78), $pop77 + i32.const $push76=, 0 + i32.load $2=, i($pop76) + i32.const $push75=, 0 + i32.load $4=, k($pop75) + i32.const $1=, 0 +.LBB2_6: # %lor.end.2 + end_block # label2: + i32.const $push83=, 0 + i32.store g($pop83), $1 + block + i32.const $push82=, 0 + i32.ne $push17=, $4, $pop82 + i32.const $push81=, 0 + i32.ne $push16=, $3, $pop81 + i32.and $push18=, $pop17, $pop16 + i32.const $push80=, 1 + i32.lt_s $push19=, $2, $pop80 + i32.sub $push20=, $pop18, $pop19 + br_if 0, $pop20 # 0: down to label3 +# BB#7: # %lor.rhs.3 + i32.const $5=, 0 + i32.const $push88=, 0 + i32.store 0($0), $pop88 + i32.const $3=, 1 + i32.const $push87=, 0 + i32.const $push86=, 1 + i32.store16 c($pop87), $pop86 + i32.const $push85=, 0 + i32.load $2=, i($pop85) + i32.const $push84=, 0 + i32.load $4=, k($pop84) +.LBB2_8: # %lor.end.3 + end_block # label3: + i32.const $push92=, 0 + i32.store g($pop92), $5 + i32.const $5=, 1 + i32.const $1=, 1 + block + i32.const $push91=, 0 + i32.ne $push22=, $4, $pop91 + i32.const $push90=, 0 + i32.ne $push21=, $3, $pop90 + i32.and $push23=, $pop22, $pop21 + i32.const $push89=, 1 + i32.lt_s $push24=, $2, $pop89 + i32.sub $push25=, $pop23, $pop24 + br_if 0, $pop25 # 0: down to label4 +# BB#9: # %lor.rhs.4 + i32.const $push97=, 0 + i32.store 0($0), $pop97 + i32.const $3=, 1 + i32.const $push96=, 0 + i32.const $push95=, 1 + i32.store16 c($pop96), $pop95 + i32.const $push94=, 0 + i32.load $2=, i($pop94) + i32.const $push93=, 0 + i32.load $4=, k($pop93) + i32.const $1=, 0 +.LBB2_10: # %lor.end.4 + end_block # label4: + i32.const $push101=, 0 + i32.store g($pop101), $1 + block + i32.const $push100=, 0 + i32.ne $push27=, $4, $pop100 + i32.const $push99=, 0 + i32.ne $push26=, $3, $pop99 + i32.and $push28=, $pop27, $pop26 + i32.const $push98=, 1 + i32.lt_s $push29=, $2, $pop98 + i32.sub $push30=, $pop28, $pop29 + br_if 0, $pop30 # 0: down to label5 +# BB#11: # %lor.rhs.5 + i32.const $5=, 0 + i32.const $push106=, 0 + i32.store 0($0), $pop106 + i32.const $3=, 1 + i32.const $push105=, 0 + i32.const $push104=, 1 + i32.store16 c($pop105), $pop104 + i32.const $push103=, 0 + i32.load $2=, i($pop103) + i32.const $push102=, 0 + i32.load $4=, k($pop102) +.LBB2_12: # %lor.end.5 + end_block # label5: + i32.const $push110=, 0 + i32.store g($pop110), $5 + i32.const $5=, 1 + i32.const $1=, 1 + block + i32.const $push109=, 0 + i32.ne $push32=, $4, $pop109 + i32.const $push108=, 0 + i32.ne $push31=, $3, $pop108 + i32.and $push33=, $pop32, $pop31 + i32.const $push107=, 1 + i32.lt_s $push34=, $2, $pop107 + i32.sub $push35=, $pop33, $pop34 + br_if 0, $pop35 # 0: down to label6 +# BB#13: # %lor.rhs.6 + i32.const $push115=, 0 + i32.store 0($0), $pop115 + i32.const $3=, 1 + i32.const $push114=, 0 + i32.const $push113=, 1 + i32.store16 c($pop114), $pop113 + i32.const $push112=, 0 + i32.load $2=, i($pop112) + i32.const $push111=, 0 + i32.load $4=, k($pop111) + i32.const $1=, 0 +.LBB2_14: # %lor.end.6 + end_block # label6: + i32.const $push122=, 0 + i32.store g($pop122), $1 + i32.const $push121=, 0 + i32.load $1=, a($pop121) + block + i32.const $push120=, 0 + i32.ne $push37=, $4, $pop120 + i32.const $push119=, 0 + i32.ne $push36=, $3, $pop119 + i32.and $push118=, $pop37, $pop36 + tee_local $push117=, $4=, $pop118 + i32.const $push116=, 1 + i32.lt_s $push38=, $2, $pop116 + i32.sub $push39=, $pop117, $pop38 + br_if 0, $pop39 # 0: down to label7 +# BB#15: # %lor.rhs.7 + i32.const $5=, 0 + i32.const $push124=, 0 + i32.store 0($0), $pop124 + i32.const $push123=, 0 + i32.const $push40=, 1 + i32.store16 c($pop123), $pop40 +.LBB2_16: # %lor.end.7 + end_block # label7: + i32.const $push41=, 0 + i32.store16 h($pop41), $1 + i32.const $push128=, 0 + i32.store g($pop128), $5 + i32.const $push127=, 0 + i32.store8 e($pop127), $4 + i32.const $push126=, 0 + i32.const $push42=, 226 + i32.store8 b($pop126), $pop42 + i32.call $drop=, getpid@FUNCTION + i32.const $push125=, 0 + # fallthrough-return: $pop125 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 1 +c: + .int16 0 # 0x0 + .size c, 2 + + .hidden p # @p + .type p,@object + .section .bss.p,"aw",@nobits + .globl p + .p2align 2 +p: + .int32 0 + .size p, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b +b: + .int8 0 # 0x0 + .size b, 1 + + .hidden h # @h + .type h,@object + .section .bss.h,"aw",@nobits + .globl h + .p2align 1 +h: + .int16 0 # 0x0 + .size h, 2 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e +e: + .int8 0 # 0x0 + .size e, 1 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + .hidden k # @k + .type k,@object + .section .bss.k,"aw",@nobits + .globl k + .p2align 2 +k: + .int32 0 # 0x0 + .size k, 4 + + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + .hidden g # @g + .type g,@object + .section .bss.g,"aw",@nobits + .globl g + .p2align 2 +g: + .int32 0 # 0x0 + .size g, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype getpid, i32 diff --git a/src/binaryen/test/torture-s/pr58431.c.s b/src/binaryen/test/torture-s/pr58431.c.s new file mode 100644 index 0000000000..80254f5ed6 --- /dev/null +++ b/src/binaryen/test/torture-s/pr58431.c.s @@ -0,0 +1,188 @@ + .text + .file "pr58431.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push25=, 0 + i32.const $push24=, 0 + i32.load $push0=, k($pop24) + i32.store g($pop25), $pop0 + i32.const $2=, 1 + i32.const $push23=, 0 + i32.const $push22=, 0 + i32.load16_u $push1=, i($pop22) + i32.const $push21=, 1 + i32.xor $push20=, $pop1, $pop21 + tee_local $push19=, $1=, $pop20 + i32.store16 i($pop23), $pop19 + i32.const $push18=, 0 + i32.const $push17=, 0 + i32.store b($pop18), $pop17 + i32.const $push2=, 24 + i32.shl $push3=, $1, $pop2 + i32.const $push16=, 24 + i32.shr_s $1=, $pop3, $pop16 + i32.const $push15=, 0 + i32.load8_s $0=, a($pop15) + block + i32.const $push14=, 0 + i32.load $push4=, j($pop14) + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %lor.rhs + i32.const $push27=, 0 + i32.load $push5=, c($pop27) + i32.const $push26=, 0 + i32.ne $2=, $pop5, $pop26 +.LBB0_2: # %lor.end + end_block # label0: + i32.const $push28=, 0 + i32.store j($pop28), $2 + block + block + i32.eq $push6=, $1, $0 + br_if 0, $pop6 # 0: down to label2 +# BB#3: # %if.then + block + i32.const $push30=, 0 + i32.load $push7=, d($pop30) + i32.const $push29=, 0 + i32.gt_s $push8=, $pop7, $pop29 + br_if 0, $pop8 # 0: down to label3 +# BB#4: # %for.inc.lr.ph + i32.const $push31=, 0 + i32.const $push9=, 1 + i32.store d($pop31), $pop9 +.LBB0_5: # %if.end + end_block # label3: + i32.const $push33=, 0 + i32.const $push10=, 1 + i32.store b($pop33), $pop10 + i32.const $push32=, 0 + i32.load8_u $push11=, h($pop32) + br_if 1, $pop11 # 1: down to label1 +# BB#6: # %if.end27 + i32.const $push12=, 0 + return $pop12 +.LBB0_7: # %if.else + end_block # label2: + i32.const $push36=, 0 + i32.const $push35=, 1 + i32.store8 h($pop36), $pop35 + block + i32.const $push34=, 0 + i32.load $push13=, e($pop34) + i32.eqz $push41=, $pop13 + br_if 0, $pop41 # 0: down to label4 +# BB#8: # %for.inc17.lr.ph + i32.const $push38=, 0 + i32.const $push37=, 0 + i32.store e($pop38), $pop37 +.LBB0_9: # %if.end.thread + end_block # label4: + i32.const $push40=, 0 + i32.const $push39=, 1 + i32.store b($pop40), $pop39 +.LBB0_10: # %if.then26 + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 1 +i: + .int16 0 # 0x0 + .size i, 2 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + .hidden k # @k + .type k,@object + .section .bss.k,"aw",@nobits + .globl k + .p2align 2 +k: + .int32 0 # 0x0 + .size k, 4 + + .hidden g # @g + .type g,@object + .section .bss.g,"aw",@nobits + .globl g + .p2align 2 +g: + .int32 0 # 0x0 + .size g, 4 + + .hidden j # @j + .type j,@object + .section .bss.j,"aw",@nobits + .globl j + .p2align 2 +j: + .int32 0 # 0x0 + .size j, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a +a: + .int8 0 # 0x0 + .size a, 1 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .int32 0 # 0x0 + .size d, 4 + + .hidden h # @h + .type h,@object + .section .bss.h,"aw",@nobits + .globl h +h: + .int8 0 # 0x0 + .size h, 1 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e + .p2align 2 +e: + .int32 0 # 0x0 + .size e, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr58564.c.s b/src/binaryen/test/torture-s/pr58564.c.s new file mode 100644 index 0000000000..9956e0b669 --- /dev/null +++ b/src/binaryen/test/torture-s/pr58564.c.s @@ -0,0 +1,56 @@ + .text + .file "pr58564.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push2=, 0 + i32.store b($pop0), $pop2 + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 + .size c, 4 + + .hidden d # @d + .type d,@object + .section .data.d,"aw",@progbits + .globl d + .p2align 2 +d: + .int32 c + .size d, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr58570.c.s b/src/binaryen/test/torture-s/pr58570.c.s new file mode 100644 index 0000000000..da1879140a --- /dev/null +++ b/src/binaryen/test/torture-s/pr58570.c.s @@ -0,0 +1,91 @@ + .text + .file "pr58570.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push25=, 0 + i32.load $push0=, e($pop25) + i32.eqz $push33=, $pop0 + br_if 0, $pop33 # 0: down to label0 +# BB#1: # %if.then + i32.const $push30=, 0 + i32.load $push1=, i($pop30) + i32.const $push2=, 6 + i32.mul $push3=, $pop1, $pop2 + i32.const $push4=, d + i32.add $push29=, $pop3, $pop4 + tee_local $push28=, $0=, $pop29 + i64.const $push5=, 32769 + i64.store32 0($pop28):p2align=1, $pop5 + i32.const $push6=, 4 + i32.add $push27=, $0, $pop6 + tee_local $push26=, $0=, $pop27 + i64.load16_u $push7=, 0($0) + i64.const $push8=, 61440 + i64.and $push9=, $pop7, $pop8 + i64.store16 0($pop26), $pop9 +.LBB0_2: # %if.end + end_block # label0: + block + i32.const $push32=, 0 + i64.load32_u $push13=, d($pop32) + i32.const $push31=, 0 + i64.load16_u $push10=, d+4($pop31) + i64.const $push11=, 32 + i64.shl $push12=, $pop10, $pop11 + i64.or $push14=, $pop13, $pop12 + i64.const $push15=, 20 + i64.shl $push16=, $pop14, $pop15 + i64.const $push17=, 16 + i64.shr_s $push18=, $pop16, $pop17 + i64.const $push19=, 19 + i64.shr_u $push20=, $pop18, $pop19 + i32.wrap/i64 $push21=, $pop20 + i32.const $push22=, 1 + i32.ne $push23=, $pop21, $pop22 + br_if 0, $pop23 # 0: down to label1 +# BB#3: # %if.end7 + i32.const $push24=, 0 + return $pop24 +.LBB0_4: # %if.then6 + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden e # @e + .type e,@object + .section .data.e,"aw",@progbits + .globl e + .p2align 2 +e: + .int32 1 # 0x1 + .size e, 4 + + .type d,@object # @d + .section .bss.d,"aw",@nobits + .p2align 4 +d: + .skip 36 + .size d, 36 + + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr58574.c.s b/src/binaryen/test/torture-s/pr58574.c.s new file mode 100644 index 0000000000..ec431687ec --- /dev/null +++ b/src/binaryen/test/torture-s/pr58574.c.s @@ -0,0 +1,1855 @@ + .text + .file "pr58574.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param f64 + .result f64 + .local i32, f64 +# BB#0: # %entry + f64.const $2=, 0x1p0 + block + i32.trunc_s/f64 $push1346=, $0 + tee_local $push1345=, $1=, $pop1346 + i32.const $push0=, 93 + i32.gt_u $push1=, $pop1345, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %entry + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + block + br_table $1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 64, 64, 64, 27, 64, 64, 64, 64, 64, 64, 64, 64, 64, 28, 64, 64, 64, 64, 64, 64, 64, 64, 64, 29, 64, 64, 64, 64, 64, 64, 64, 64, 64, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0 # 0: down to label64 + # 1: down to label63 + # 2: down to label62 + # 3: down to label61 + # 4: down to label60 + # 5: down to label59 + # 6: down to label58 + # 7: down to label57 + # 8: down to label56 + # 9: down to label55 + # 10: down to label54 + # 11: down to label53 + # 12: down to label52 + # 13: down to label51 + # 14: down to label50 + # 15: down to label49 + # 16: down to label48 + # 17: down to label47 + # 18: down to label46 + # 19: down to label45 + # 20: down to label44 + # 21: down to label43 + # 22: down to label42 + # 23: down to label41 + # 24: down to label40 + # 25: down to label39 + # 26: down to label38 + # 64: down to label0 + # 27: down to label37 + # 28: down to label36 + # 29: down to label35 + # 30: down to label34 + # 31: down to label33 + # 32: down to label32 + # 33: down to label31 + # 34: down to label30 + # 35: down to label29 + # 36: down to label28 + # 37: down to label27 + # 38: down to label26 + # 39: down to label25 + # 40: down to label24 + # 41: down to label23 + # 42: down to label22 + # 43: down to label21 + # 44: down to label20 + # 45: down to label19 + # 46: down to label18 + # 47: down to label17 + # 48: down to label16 + # 49: down to label15 + # 50: down to label14 + # 51: down to label13 + # 52: down to label12 + # 53: down to label11 + # 54: down to label10 + # 55: down to label9 + # 56: down to label8 + # 57: down to label7 + # 58: down to label6 + # 59: down to label5 + # 60: down to label4 + # 61: down to label3 + # 62: down to label2 + # 63: down to label1 +.LBB0_2: # %sw.bb + end_block # label64: + f64.add $push1262=, $0, $0 + f64.const $push1263=, -0x1p0 + f64.add $push1348=, $pop1262, $pop1263 + tee_local $push1347=, $0=, $pop1348 + f64.const $push1264=, 0x1.cac6baec528a3p-50 + f64.mul $push1265=, $0, $pop1264 + f64.const $push1266=, 0x1.9f49c634d36c8p-42 + f64.add $push1267=, $pop1265, $pop1266 + f64.mul $push1268=, $0, $pop1267 + f64.const $push1269=, 0x1.675d48090d1d6p-34 + f64.add $push1270=, $pop1268, $pop1269 + f64.mul $push1271=, $0, $pop1270 + f64.const $push1272=, 0x1.2afb34142b11cp-26 + f64.add $push1273=, $pop1271, $pop1272 + f64.mul $push1274=, $0, $pop1273 + f64.const $push1275=, 0x1.e037b539626b4p-19 + f64.add $push1276=, $pop1274, $pop1275 + f64.mul $push1277=, $0, $pop1276 + f64.const $push1278=, 0x1.7578a807708cbp-11 + f64.add $push1279=, $pop1277, $pop1278 + f64.mul $push1280=, $pop1347, $pop1279 + f64.const $push1281=, 0x1.739ad75c47d48p-11 + f64.add $push1344=, $pop1280, $pop1281 + return $pop1344 +.LBB0_3: # %sw.bb12 + end_block # label63: + f64.add $push1242=, $0, $0 + f64.const $push1243=, -0x1.8p1 + f64.add $push1350=, $pop1242, $pop1243 + tee_local $push1349=, $0=, $pop1350 + f64.const $push1244=, 0x1.e62fdf221a945p-50 + f64.mul $push1245=, $0, $pop1244 + f64.const $push1246=, 0x1.b56f4407b2b3fp-42 + f64.add $push1247=, $pop1245, $pop1246 + f64.mul $push1248=, $0, $pop1247 + f64.const $push1249=, 0x1.7803f03d4db15p-34 + f64.add $push1250=, $pop1248, $pop1249 + f64.mul $push1251=, $0, $pop1250 + f64.const $push1252=, 0x1.3675193770057p-26 + f64.add $push1253=, $pop1251, $pop1252 + f64.mul $push1254=, $0, $pop1253 + f64.const $push1255=, 0x1.ee7f95858f80dp-19 + f64.add $push1256=, $pop1254, $pop1255 + f64.mul $push1257=, $0, $pop1256 + f64.const $push1258=, 0x1.7d157f6e1f426p-11 + f64.add $push1259=, $pop1257, $pop1258 + f64.mul $push1260=, $pop1349, $pop1259 + f64.const $push1261=, 0x1.1987908299a2dp-9 + f64.add $push1343=, $pop1260, $pop1261 + return $pop1343 +.LBB0_4: # %sw.bb27 + end_block # label62: + f64.add $push1222=, $0, $0 + f64.const $push1223=, -0x1.4p2 + f64.add $push1352=, $pop1222, $pop1223 + tee_local $push1351=, $0=, $pop1352 + f64.const $push1224=, 0x1.01900ac1a16a7p-49 + f64.mul $push1225=, $0, $pop1224 + f64.const $push1226=, 0x1.cce31abf0cfe7p-42 + f64.add $push1227=, $pop1225, $pop1226 + f64.mul $push1228=, $0, $pop1227 + f64.const $push1229=, 0x1.898e06fac46dfp-34 + f64.add $push1230=, $pop1228, $pop1229 + f64.mul $push1231=, $0, $pop1230 + f64.const $push1232=, 0x1.427bbb26be687p-26 + f64.add $push1233=, $pop1231, $pop1232 + f64.mul $push1234=, $0, $pop1233 + f64.const $push1235=, 0x1.fd5455ccf9081p-19 + f64.add $push1236=, $pop1234, $pop1235 + f64.mul $push1237=, $0, $pop1236 + f64.const $push1238=, 0x1.84ed651dbbfdap-11 + f64.add $push1239=, $pop1237, $pop1238 + f64.mul $push1240=, $pop1351, $pop1239 + f64.const $push1241=, 0x1.da059a73b42ccp-9 + f64.add $push1342=, $pop1240, $pop1241 + return $pop1342 +.LBB0_5: # %sw.bb42 + end_block # label61: + f64.add $push1202=, $0, $0 + f64.const $push1203=, -0x1.cp2 + f64.add $push1354=, $pop1202, $pop1203 + tee_local $push1353=, $0=, $pop1354 + f64.const $push1204=, 0x1.10f093c3894a7p-49 + f64.mul $push1205=, $0, $pop1204 + f64.const $push1206=, 0x1.e5bf3b2ed15bap-42 + f64.add $push1207=, $pop1205, $pop1206 + f64.mul $push1208=, $0, $pop1207 + f64.const $push1209=, 0x1.9c0a2f40226f1p-34 + f64.add $push1210=, $pop1208, $pop1209 + f64.mul $push1211=, $0, $pop1210 + f64.const $push1212=, 0x1.4f137fc876864p-26 + f64.add $push1213=, $pop1211, $pop1212 + f64.mul $push1214=, $0, $pop1213 + f64.const $push1215=, 0x1.065e6aa3cabb7p-18 + f64.add $push1216=, $pop1214, $pop1215 + f64.mul $push1217=, $0, $pop1216 + f64.const $push1218=, 0x1.8d00591646be5p-11 + f64.add $push1219=, $pop1217, $pop1218 + f64.mul $push1220=, $pop1353, $pop1219 + f64.const $push1221=, 0x1.4f3e2bb4b9b09p-8 + f64.add $push1341=, $pop1220, $pop1221 + return $pop1341 +.LBB0_6: # %sw.bb57 + end_block # label60: + f64.add $push1182=, $0, $0 + f64.const $push1183=, -0x1.2p3 + f64.add $push1356=, $pop1182, $pop1183 + tee_local $push1355=, $0=, $pop1356 + f64.const $push1184=, 0x1.21535de6eaaa3p-49 + f64.mul $push1185=, $0, $pop1184 + f64.const $push1186=, 0x1.000d5a2623093p-41 + f64.add $push1187=, $pop1185, $pop1186 + f64.mul $push1188=, $0, $pop1187 + f64.const $push1189=, 0x1.af85ebd11ee25p-34 + f64.add $push1190=, $pop1188, $pop1189 + f64.mul $push1191=, $0, $pop1190 + f64.const $push1192=, 0x1.5c40cd02f8aa5p-26 + f64.add $push1193=, $pop1191, $pop1192 + f64.mul $push1194=, $0, $pop1193 + f64.const $push1195=, 0x1.0e5ff996ada1ap-18 + f64.add $push1196=, $pop1194, $pop1195 + f64.mul $push1197=, $0, $pop1196 + f64.const $push1198=, 0x1.9553b9bb7810bp-11 + f64.add $push1199=, $pop1197, $pop1198 + f64.mul $push1200=, $pop1355, $pop1199 + f64.const $push1201=, 0x1.b3885828b601bp-8 + f64.add $push1340=, $pop1200, $pop1201 + return $pop1340 +.LBB0_7: # %sw.bb72 + end_block # label59: + f64.add $push1162=, $0, $0 + f64.const $push1163=, -0x1.6p3 + f64.add $push1358=, $pop1162, $pop1163 + tee_local $push1357=, $0=, $pop1358 + f64.const $push1164=, 0x1.32bfca1e19775p-49 + f64.mul $push1165=, $0, $pop1164 + f64.const $push1166=, 0x1.0e04d99704505p-41 + f64.add $push1167=, $pop1165, $pop1166 + f64.mul $push1168=, $0, $pop1167 + f64.const $push1169=, 0x1.c407fe0f955e6p-34 + f64.add $push1170=, $pop1168, $pop1169 + f64.mul $push1171=, $0, $pop1170 + f64.const $push1172=, 0x1.6a0c6ea3056bap-26 + f64.add $push1173=, $pop1171, $pop1172 + f64.mul $push1174=, $0, $pop1173 + f64.const $push1175=, 0x1.16b2475b20719p-18 + f64.add $push1176=, $pop1174, $pop1175 + f64.mul $push1177=, $0, $pop1176 + f64.const $push1178=, 0x1.9de7870d4ff4bp-11 + f64.add $push1179=, $pop1177, $pop1178 + f64.mul $push1180=, $pop1357, $pop1179 + f64.const $push1181=, 0x1.0cf75f478e341p-7 + f64.add $push1339=, $pop1180, $pop1181 + return $pop1339 +.LBB0_8: # %sw.bb87 + end_block # label58: + f64.add $push1142=, $0, $0 + f64.const $push1143=, -0x1.ap3 + f64.add $push1360=, $pop1142, $pop1143 + tee_local $push1359=, $0=, $pop1360 + f64.const $push1144=, 0x1.454fabb93b71cp-49 + f64.mul $push1145=, $0, $pop1144 + f64.const $push1146=, 0x1.1cd31454040b1p-41 + f64.add $push1147=, $pop1145, $pop1146 + f64.mul $push1148=, $0, $pop1147 + f64.const $push1149=, 0x1.d9b6add0b78edp-34 + f64.add $push1150=, $pop1148, $pop1149 + f64.mul $push1151=, $0, $pop1150 + f64.const $push1152=, 0x1.7883965bbdac9p-26 + f64.add $push1153=, $pop1151, $pop1152 + f64.mul $push1154=, $0, $pop1153 + f64.const $push1155=, 0x1.1f5a7b5b1c03bp-18 + f64.add $push1156=, $pop1154, $pop1155 + f64.mul $push1157=, $0, $pop1156 + f64.const $push1158=, 0x1.a6bfc7d698d37p-11 + f64.add $push1159=, $pop1157, $pop1158 + f64.mul $push1160=, $pop1359, $pop1159 + f64.const $push1161=, 0x1.414112efc6ccep-7 + f64.add $push1338=, $pop1160, $pop1161 + return $pop1338 +.LBB0_9: # %sw.bb102 + end_block # label57: + f64.add $push1122=, $0, $0 + f64.const $push1123=, -0x1.ep3 + f64.add $push1362=, $pop1122, $pop1123 + tee_local $push1361=, $0=, $pop1362 + f64.const $push1124=, 0x1.5911c49cf8751p-49 + f64.mul $push1125=, $0, $pop1124 + f64.const $push1126=, 0x1.2c89559516ee9p-41 + f64.add $push1127=, $pop1125, $pop1126 + f64.mul $push1128=, $0, $pop1127 + f64.const $push1129=, 0x1.f0955bc5733f2p-34 + f64.add $push1130=, $pop1128, $pop1129 + f64.mul $push1131=, $0, $pop1130 + f64.const $push1132=, 0x1.87aaaa1381b8bp-26 + f64.add $push1133=, $pop1131, $pop1132 + f64.mul $push1134=, $0, $pop1133 + f64.const $push1135=, 0x1.285a4d649df58p-18 + f64.add $push1136=, $pop1134, $pop1135 + f64.mul $push1137=, $0, $pop1136 + f64.const $push1138=, 0x1.afddd3b040dp-11 + f64.add $push1139=, $pop1137, $pop1138 + f64.mul $push1140=, $pop1361, $pop1139 + f64.const $push1141=, 0x1.76a2f48c2e771p-7 + f64.add $push1337=, $pop1140, $pop1141 + return $pop1337 +.LBB0_10: # %sw.bb117 + end_block # label56: + f64.add $push1102=, $0, $0 + f64.const $push1103=, -0x1.1p4 + f64.add $push1364=, $pop1102, $pop1103 + tee_local $push1363=, $0=, $pop1364 + f64.const $push1104=, 0x1.6e18872722536p-49 + f64.mul $push1105=, $0, $pop1104 + f64.const $push1106=, 0x1.3d3324d4e01e3p-41 + f64.add $push1107=, $pop1105, $pop1106 + f64.mul $push1108=, $0, $pop1107 + f64.const $push1109=, 0x1.0457a51dc5dfep-33 + f64.add $push1110=, $pop1108, $pop1109 + f64.mul $push1111=, $0, $pop1110 + f64.const $push1112=, 0x1.978edb7d72726p-26 + f64.add $push1113=, $pop1111, $pop1112 + f64.mul $push1114=, $0, $pop1113 + f64.const $push1115=, 0x1.31b6e4e19f1f7p-18 + f64.add $push1116=, $pop1114, $pop1115 + f64.mul $push1117=, $0, $pop1116 + f64.const $push1118=, 0x1.b94708fe00767p-11 + f64.add $push1119=, $pop1117, $pop1118 + f64.mul $push1120=, $pop1363, $pop1119 + f64.const $push1121=, 0x1.ad3a604e1e71p-7 + f64.add $push1336=, $pop1120, $pop1121 + return $pop1336 +.LBB0_11: # %sw.bb132 + end_block # label55: + f64.add $push1082=, $0, $0 + f64.const $push1083=, -0x1.3p4 + f64.add $push1366=, $pop1082, $pop1083 + tee_local $push1365=, $0=, $pop1366 + f64.const $push1084=, 0x1.847dc6a7decccp-49 + f64.mul $push1085=, $0, $pop1084 + f64.const $push1086=, 0x1.4ee05c5bffeaap-41 + f64.add $push1087=, $pop1085, $pop1086 + f64.mul $push1088=, $0, $pop1087 + f64.const $push1089=, 0x1.1113200e25815p-33 + f64.add $push1090=, $pop1088, $pop1089 + f64.mul $push1091=, $0, $pop1090 + f64.const $push1092=, 0x1.a83d5c4cb0bc1p-26 + f64.add $push1093=, $pop1091, $pop1092 + f64.mul $push1094=, $0, $pop1093 + f64.const $push1095=, 0x1.3b77210a15f77p-18 + f64.add $push1096=, $pop1094, $pop1095 + f64.mul $push1097=, $0, $pop1096 + f64.const $push1098=, 0x1.c2fb67bfd7c6dp-11 + f64.add $push1099=, $pop1097, $pop1098 + f64.mul $push1100=, $pop1365, $pop1099 + f64.const $push1101=, 0x1.e4f765fd8adacp-7 + f64.add $push1335=, $pop1100, $pop1101 + return $pop1335 +.LBB0_12: # %sw.bb147 + end_block # label54: + f64.add $push1062=, $0, $0 + f64.const $push1063=, -0x1.5p4 + f64.add $push1368=, $pop1062, $pop1063 + tee_local $push1367=, $0=, $pop1368 + f64.const $push1064=, 0x1.9c57a5f629aa4p-49 + f64.mul $push1065=, $0, $pop1064 + f64.const $push1066=, 0x1.61a5294113d1fp-41 + f64.add $push1067=, $pop1065, $pop1066 + f64.mul $push1068=, $0, $pop1067 + f64.const $push1069=, 0x1.1e8861019bd46p-33 + f64.add $push1070=, $pop1068, $pop1069 + f64.mul $push1071=, $0, $pop1070 + f64.const $push1072=, 0x1.b9b62c813c95dp-26 + f64.add $push1073=, $pop1071, $pop1072 + f64.mul $push1074=, $0, $pop1073 + f64.const $push1075=, 0x1.459cb9ac001bp-18 + f64.add $push1076=, $pop1074, $pop1075 + f64.mul $push1077=, $0, $pop1076 + f64.const $push1078=, 0x1.ccfef6c0912a3p-11 + f64.add $push1079=, $pop1077, $pop1078 + f64.mul $push1080=, $pop1367, $pop1079 + f64.const $push1081=, 0x1.0efdc9c4da9p-6 + f64.add $push1334=, $pop1080, $pop1081 + return $pop1334 +.LBB0_13: # %sw.bb162 + end_block # label53: + f64.add $push1042=, $0, $0 + f64.const $push1043=, -0x1.7p4 + f64.add $push1370=, $pop1042, $pop1043 + tee_local $push1369=, $0=, $pop1370 + f64.const $push1044=, 0x1.b5bff86228abep-49 + f64.mul $push1045=, $0, $pop1044 + f64.const $push1046=, 0x1.758ff4dd67c05p-41 + f64.add $push1047=, $pop1045, $pop1046 + f64.mul $push1048=, $0, $pop1047 + f64.const $push1049=, 0x1.2cb767f828d91p-33 + f64.add $push1050=, $pop1048, $pop1049 + f64.mul $push1051=, $0, $pop1050 + f64.const $push1052=, 0x1.cc0f499af778fp-26 + f64.add $push1053=, $pop1051, $pop1052 + f64.mul $push1054=, $0, $pop1053 + f64.const $push1055=, 0x1.502cd63156628p-18 + f64.add $push1056=, $pop1054, $pop1055 + f64.mul $push1057=, $0, $pop1056 + f64.const $push1058=, 0x1.d755bccaf709bp-11 + f64.add $push1059=, $pop1057, $pop1058 + f64.mul $push1060=, $pop1369, $pop1059 + f64.const $push1061=, 0x1.2c1f42bb6673p-6 + f64.add $push1333=, $pop1060, $pop1061 + return $pop1333 +.LBB0_14: # %sw.bb177 + end_block # label52: + f64.add $push1022=, $0, $0 + f64.const $push1023=, -0x1.9p4 + f64.add $push1372=, $pop1022, $pop1023 + tee_local $push1371=, $0=, $pop1372 + f64.const $push1024=, 0x1.d0cce0c2d79abp-49 + f64.mul $push1025=, $0, $pop1024 + f64.const $push1026=, 0x1.8ab4ec479933cp-41 + f64.add $push1027=, $pop1025, $pop1026 + f64.mul $push1028=, $0, $pop1027 + f64.const $push1029=, 0x1.3bb6b98d5330ap-33 + f64.add $push1030=, $pop1028, $pop1029 + f64.mul $push1031=, $0, $pop1030 + f64.const $push1032=, 0x1.df517f66a1fc6p-26 + f64.add $push1033=, $pop1031, $pop1032 + f64.mul $push1034=, $0, $pop1033 + f64.const $push1035=, 0x1.5b2e55d20f44p-18 + f64.add $push1036=, $pop1034, $pop1035 + f64.mul $push1037=, $0, $pop1036 + f64.const $push1038=, 0x1.e2026910e5ab7p-11 + f64.add $push1039=, $pop1037, $pop1038 + f64.mul $push1040=, $pop1371, $pop1039 + f64.const $push1041=, 0x1.49e8815e39714p-6 + f64.add $push1332=, $pop1040, $pop1041 + return $pop1332 +.LBB0_15: # %sw.bb192 + end_block # label51: + f64.add $push1002=, $0, $0 + f64.const $push1003=, -0x1.bp4 + f64.add $push1374=, $pop1002, $pop1003 + tee_local $push1373=, $0=, $pop1374 + f64.const $push1004=, 0x1.ed9be2e1862d9p-49 + f64.mul $push1005=, $0, $pop1004 + f64.const $push1006=, 0x1.a129ad859a0ebp-41 + f64.add $push1007=, $pop1005, $pop1006 + f64.mul $push1008=, $0, $pop1007 + f64.const $push1009=, 0x1.4b91980ede2b9p-33 + f64.add $push1010=, $pop1008, $pop1009 + f64.mul $push1011=, $0, $pop1010 + f64.const $push1012=, 0x1.f38e657dbd4e3p-26 + f64.add $push1013=, $pop1011, $pop1012 + f64.mul $push1014=, $0, $pop1013 + f64.const $push1015=, 0x1.66a65ff82397dp-18 + f64.add $push1016=, $pop1014, $pop1015 + f64.mul $push1017=, $0, $pop1016 + f64.const $push1018=, 0x1.ed0a59f6159b7p-11 + f64.add $push1019=, $pop1017, $pop1018 + f64.mul $push1020=, $pop1373, $pop1019 + f64.const $push1021=, 0x1.6861e92923e5cp-6 + f64.add $push1331=, $pop1020, $pop1021 + return $pop1331 +.LBB0_16: # %sw.bb207 + end_block # label50: + f64.add $push982=, $0, $0 + f64.const $push983=, -0x1.dp4 + f64.add $push1376=, $pop982, $pop983 + tee_local $push1375=, $0=, $pop1376 + f64.const $push984=, 0x1.0627198057091p-48 + f64.mul $push985=, $0, $pop984 + f64.const $push986=, 0x1.b903d69d5c337p-41 + f64.add $push987=, $pop985, $pop986 + f64.mul $push988=, $0, $pop987 + f64.const $push989=, 0x1.5c5345ca8d1a8p-33 + f64.add $push990=, $pop988, $pop989 + f64.mul $push991=, $0, $pop990 + f64.const $push992=, 0x1.046530e354dcep-25 + f64.add $push993=, $pop991, $pop992 + f64.mul $push994=, $0, $pop993 + f64.const $push995=, 0x1.729bd3db89d4p-18 + f64.add $push996=, $pop994, $pop995 + f64.mul $push997=, $0, $pop996 + f64.const $push998=, 0x1.f86ee71374fcdp-11 + f64.add $push999=, $pop997, $pop998 + f64.mul $push1000=, $pop1375, $pop999 + f64.const $push1001=, 0x1.878b7a1c25d07p-6 + f64.add $push1330=, $pop1000, $pop1001 + return $pop1330 +.LBB0_17: # %sw.bb222 + end_block # label49: + f64.add $push962=, $0, $0 + f64.const $push963=, -0x1.fp4 + f64.add $push1378=, $pop962, $pop963 + tee_local $push1377=, $0=, $pop1378 + f64.const $push964=, 0x1.167ed2383a844p-48 + f64.mul $push965=, $0, $pop964 + f64.const $push966=, 0x1.d2590594d1848p-41 + f64.add $push967=, $pop965, $pop966 + f64.mul $push968=, $0, $pop967 + f64.const $push969=, 0x1.6e0ca63504f66p-33 + f64.add $push970=, $pop968, $pop969 + f64.mul $push971=, $0, $pop970 + f64.const $push972=, 0x1.0f8db8e0a45c3p-25 + f64.add $push973=, $pop971, $pop972 + f64.mul $push974=, $0, $pop973 + f64.const $push975=, 0x1.7f1221183d337p-18 + f64.add $push976=, $pop974, $pop975 + f64.mul $push977=, $0, $pop976 + f64.const $push978=, 0x1.021ab7665e2dep-10 + f64.add $push979=, $pop977, $pop978 + f64.mul $push980=, $pop1377, $pop979 + f64.const $push981=, 0x1.a771c970f7b9ep-6 + f64.add $push1329=, $pop980, $pop981 + return $pop1329 +.LBB0_18: # %sw.bb237 + end_block # label48: + f64.add $push942=, $0, $0 + f64.const $push943=, -0x1.08p5 + f64.add $push1380=, $pop942, $pop943 + tee_local $push1379=, $0=, $pop1380 + f64.const $push944=, 0x1.27e96632d455fp-48 + f64.mul $push945=, $0, $pop944 + f64.const $push946=, 0x1.ed449c2f3d75fp-41 + f64.add $push947=, $pop945, $pop946 + f64.mul $push948=, $0, $pop947 + f64.const $push949=, 0x1.80c8fb9c090fap-33 + f64.add $push950=, $pop948, $pop949 + f64.mul $push951=, $0, $pop950 + f64.const $push952=, 0x1.1b4996838dbc1p-25 + f64.add $push953=, $pop951, $pop952 + f64.mul $push954=, $0, $pop953 + f64.const $push955=, 0x1.8c1396822f672p-18 + f64.add $push956=, $pop954, $pop955 + f64.mul $push957=, $0, $pop956 + f64.const $push958=, 0x1.08305029e3ff2p-10 + f64.add $push959=, $pop957, $pop958 + f64.mul $push960=, $pop1379, $pop959 + f64.const $push961=, 0x1.c814d72799a2p-6 + f64.add $push1328=, $pop960, $pop961 + return $pop1328 +.LBB0_19: # %sw.bb252 + end_block # label47: + f64.add $push922=, $0, $0 + f64.const $push923=, -0x1.18p5 + f64.add $push1382=, $pop922, $pop923 + tee_local $push1381=, $0=, $pop1382 + f64.const $push924=, 0x1.3a73bf18375e2p-48 + f64.mul $push925=, $0, $pop924 + f64.const $push926=, 0x1.04ef8d289d598p-40 + f64.add $push927=, $pop925, $pop926 + f64.mul $push928=, $0, $pop927 + f64.const $push929=, 0x1.949929743e5f4p-33 + f64.add $push930=, $pop928, $pop929 + f64.mul $push931=, $0, $pop930 + f64.const $push932=, 0x1.279d2fb27147fp-25 + f64.add $push933=, $pop931, $pop932 + f64.mul $push934=, $0, $pop933 + f64.const $push935=, 0x1.99a3a3b55ba9ep-18 + f64.add $push936=, $pop934, $pop935 + f64.mul $push937=, $0, $pop936 + f64.const $push938=, 0x1.0e7aed0628383p-10 + f64.add $push939=, $pop937, $pop938 + f64.mul $push940=, $pop1381, $pop939 + f64.const $push941=, 0x1.e9813879c4114p-6 + f64.add $push1327=, $pop940, $pop941 + return $pop1327 +.LBB0_20: # %sw.bb267 + end_block # label46: + f64.add $push902=, $0, $0 + f64.const $push903=, -0x1.28p5 + f64.add $push1384=, $pop902, $pop903 + tee_local $push1383=, $0=, $pop1384 + f64.const $push904=, 0x1.4e35d7fbf4617p-48 + f64.mul $push905=, $0, $pop904 + f64.const $push906=, 0x1.1421f0df0657fp-40 + f64.add $push907=, $pop905, $pop906 + f64.mul $push908=, $0, $pop907 + f64.const $push909=, 0x1.a993b4592b866p-33 + f64.add $push910=, $pop908, $pop909 + f64.mul $push911=, $0, $pop910 + f64.const $push912=, 0x1.3495b6206fe24p-25 + f64.add $push913=, $pop911, $pop912 + f64.mul $push914=, $0, $pop913 + f64.const $push915=, 0x1.a7cc9785b3accp-18 + f64.add $push916=, $pop914, $pop915 + f64.mul $push917=, $0, $pop916 + f64.const $push918=, 0x1.14fb39c7a1eaap-10 + f64.add $push919=, $pop917, $pop918 + f64.mul $push920=, $pop1383, $pop919 + f64.const $push921=, 0x1.05db76b3bb83dp-5 + f64.add $push1326=, $pop920, $pop921 + return $pop1326 +.LBB0_21: # %sw.bb282 + end_block # label45: + f64.add $push882=, $0, $0 + f64.const $push883=, -0x1.38p5 + f64.add $push1386=, $pop882, $pop883 + tee_local $push1385=, $0=, $pop1386 + f64.const $push884=, 0x1.633e72c2b33b3p-48 + f64.mul $push885=, $0, $pop884 + f64.const $push886=, 0x1.24489b0bcfd4cp-40 + f64.add $push887=, $pop885, $pop886 + f64.mul $push888=, $0, $pop887 + f64.const $push889=, 0x1.bfc3de9893d59p-33 + f64.add $push890=, $pop888, $pop889 + f64.mul $push891=, $0, $pop890 + f64.const $push892=, 0x1.4239c2a719fc4p-25 + f64.add $push893=, $pop891, $pop892 + f64.mul $push894=, $0, $pop893 + f64.const $push895=, 0x1.b695512b2de5ap-18 + f64.add $push896=, $pop894, $pop895 + f64.mul $push897=, $0, $pop896 + f64.const $push898=, 0x1.1bb7ec6af7c5ap-10 + f64.add $push899=, $pop897, $pop898 + f64.mul $push900=, $pop1385, $pop899 + f64.const $push901=, 0x1.176145953586dp-5 + f64.add $push1325=, $pop900, $pop901 + return $pop1325 +.LBB0_22: # %sw.bb297 + end_block # label44: + f64.add $push862=, $0, $0 + f64.const $push863=, -0x1.48p5 + f64.add $push1388=, $pop862, $pop863 + tee_local $push1387=, $0=, $pop1388 + f64.const $push864=, 0x1.79a58a8004affp-48 + f64.mul $push865=, $0, $pop864 + f64.const $push866=, 0x1.35741e6f4452cp-40 + f64.add $push867=, $pop865, $pop866 + f64.mul $push868=, $0, $pop867 + f64.const $push869=, 0x1.d745cdf4df966p-33 + f64.add $push870=, $pop868, $pop869 + f64.mul $push871=, $0, $pop870 + f64.const $push872=, 0x1.509686f990786p-25 + f64.add $push873=, $pop871, $pop872 + f64.mul $push874=, $0, $pop873 + f64.const $push875=, 0x1.c604afddc0ca6p-18 + f64.add $push876=, $pop874, $pop875 + f64.mul $push877=, $0, $pop876 + f64.const $push878=, 0x1.22b104f029c92p-10 + f64.add $push879=, $pop877, $pop878 + f64.mul $push880=, $pop1387, $pop879 + f64.const $push881=, 0x1.295421c044285p-5 + f64.add $push1324=, $pop880, $pop881 + return $pop1324 +.LBB0_23: # %sw.bb312 + end_block # label43: + f64.add $push842=, $0, $0 + f64.const $push843=, -0x1.58p5 + f64.add $push1390=, $pop842, $pop843 + tee_local $push1389=, $0=, $pop1390 + f64.const $push844=, 0x1.91831a4779845p-48 + f64.mul $push845=, $0, $pop844 + f64.const $push846=, 0x1.47b173735b59fp-40 + f64.add $push847=, $pop845, $pop846 + f64.mul $push848=, $0, $pop847 + f64.const $push849=, 0x1.f02a65e2b3c19p-33 + f64.add $push850=, $pop848, $pop849 + f64.mul $push851=, $0, $pop850 + f64.const $push852=, 0x1.5fb29bf163c7cp-25 + f64.add $push853=, $pop851, $pop852 + f64.mul $push854=, $0, $pop853 + f64.const $push855=, 0x1.d626ba3f5ba98p-18 + f64.add $push856=, $pop854, $pop855 + f64.mul $push857=, $0, $pop856 + f64.const $push858=, 0x1.29e6835737f54p-10 + f64.add $push859=, $pop857, $pop858 + f64.mul $push860=, $pop1389, $pop859 + f64.const $push861=, 0x1.3bb83cf2cf95dp-5 + f64.add $push1323=, $pop860, $pop861 + return $pop1323 +.LBB0_24: # %sw.bb327 + end_block # label42: + f64.add $push822=, $0, $0 + f64.const $push823=, -0x1.68p5 + f64.add $push1392=, $pop822, $pop823 + tee_local $push1391=, $0=, $pop1392 + f64.const $push824=, 0x1.aae99476e38a8p-48 + f64.mul $push825=, $0, $pop824 + f64.const $push826=, 0x1.5b1d6ccaacc2cp-40 + f64.add $push827=, $pop825, $pop826 + f64.mul $push828=, $0, $pop827 + f64.const $push829=, 0x1.054144eb5aa81p-32 + f64.add $push830=, $pop828, $pop829 + f64.mul $push831=, $0, $pop830 + f64.const $push832=, 0x1.6f9d6634e4f2bp-25 + f64.add $push833=, $pop831, $pop832 + f64.mul $push834=, $0, $pop833 + f64.const $push835=, 0x1.e70097b9f75b6p-18 + f64.add $push836=, $pop834, $pop835 + f64.mul $push837=, $0, $pop836 + f64.const $push838=, 0x1.3165d3996fa83p-10 + f64.add $push839=, $pop837, $pop838 + f64.mul $push840=, $pop1391, $pop839 + f64.const $push841=, 0x1.4e93e1c9b413ap-5 + f64.add $push1322=, $pop840, $pop841 + return $pop1322 +.LBB0_25: # %sw.bb342 + end_block # label41: + f64.add $push802=, $0, $0 + f64.const $push803=, -0x1.78p5 + f64.add $push1394=, $pop802, $pop803 + tee_local $push1393=, $0=, $pop1394 + f64.const $push804=, 0x1.c5f67cd792795p-48 + f64.mul $push805=, $0, $pop804 + f64.const $push806=, 0x1.6fbf3f21de835p-40 + f64.add $push807=, $pop805, $pop806 + f64.mul $push808=, $0, $pop807 + f64.const $push809=, 0x1.13352fc9a645bp-32 + f64.add $push810=, $pop808, $pop809 + f64.mul $push811=, $0, $pop810 + f64.const $push812=, 0x1.805fb190d49p-25 + f64.add $push813=, $pop811, $pop812 + f64.mul $push814=, $0, $pop813 + f64.const $push815=, 0x1.f8a006bd80cbep-18 + f64.add $push816=, $pop814, $pop815 + f64.mul $push817=, $0, $pop816 + f64.const $push818=, 0x1.392189bd8383bp-10 + f64.add $push819=, $pop817, $pop818 + f64.mul $push820=, $pop1393, $pop819 + f64.const $push821=, 0x1.61e71044f1a1ap-5 + f64.add $push1321=, $pop820, $pop821 + return $pop1321 +.LBB0_26: # %sw.bb357 + end_block # label40: + f64.add $push782=, $0, $0 + f64.const $push783=, -0x1.88p5 + f64.add $push1396=, $pop782, $pop783 + tee_local $push1395=, $0=, $pop1396 + f64.const $push784=, 0x1.e2c1ce7d17156p-48 + f64.mul $push785=, $0, $pop784 + f64.const $push786=, 0x1.85b3bd2b88744p-40 + f64.add $push787=, $pop785, $pop786 + f64.mul $push788=, $0, $pop787 + f64.const $push789=, 0x1.21ff066d70de7p-32 + f64.add $push790=, $pop788, $pop789 + f64.mul $push791=, $0, $pop790 + f64.const $push792=, 0x1.9208e2ab83a8p-25 + f64.add $push793=, $pop791, $pop792 + f64.mul $push794=, $0, $pop793 + f64.const $push795=, 0x1.0586cf27f6074p-17 + f64.add $push796=, $pop794, $pop795 + f64.mul $push797=, $0, $pop796 + f64.const $push798=, 0x1.412711bcc0e61p-10 + f64.add $push799=, $pop797, $pop798 + f64.mul $push800=, $pop1395, $pop799 + f64.const $push801=, 0x1.75ba2be0589adp-5 + f64.add $push1320=, $pop800, $pop801 + return $pop1320 +.LBB0_27: # %sw.bb372 + end_block # label39: + f64.add $push762=, $0, $0 + f64.const $push763=, -0x1.98p5 + f64.add $push1398=, $pop762, $pop763 + tee_local $push1397=, $0=, $pop1398 + f64.const $push764=, 0x1.00b39a7a160dp-47 + f64.mul $push765=, $0, $pop764 + f64.const $push766=, 0x1.9d095040f681cp-40 + f64.add $push767=, $pop765, $pop766 + f64.mul $push768=, $0, $pop767 + f64.const $push769=, 0x1.31acdbb7ee971p-32 + f64.add $push770=, $pop768, $pop769 + f64.mul $push771=, $0, $pop770 + f64.const $push772=, 0x1.a4a3f844e2f75p-25 + f64.add $push773=, $pop771, $pop772 + f64.mul $push774=, $0, $pop773 + f64.const $push775=, 0x1.0f2ab2899438cp-17 + f64.add $push776=, $pop774, $pop775 + f64.mul $push777=, $0, $pop776 + f64.const $push778=, 0x1.497d2193ce7e8p-10 + f64.add $push779=, $pop777, $pop778 + f64.mul $push780=, $pop1397, $pop779 + f64.const $push781=, 0x1.8a0f4d7add15fp-5 + f64.add $push1319=, $pop780, $pop781 + return $pop1319 +.LBB0_28: # %sw.bb387 + end_block # label38: + f64.add $push742=, $0, $0 + f64.const $push743=, -0x1.d8p5 + f64.add $push1400=, $pop742, $pop743 + tee_local $push1399=, $0=, $pop1400 + f64.const $push744=, 0x1.4870426dcdb0ep-47 + f64.mul $push745=, $0, $pop744 + f64.const $push746=, 0x1.05189fcd8287bp-39 + f64.add $push747=, $pop745, $pop746 + f64.mul $push748=, $0, $pop747 + f64.const $push749=, 0x1.7a62cc6986c28p-32 + f64.add $push750=, $pop748, $pop749 + f64.mul $push751=, $0, $pop750 + f64.const $push752=, 0x1.f9cae3284854ep-25 + f64.add $push753=, $pop751, $pop752 + f64.mul $push754=, $0, $pop753 + f64.const $push755=, 0x1.3a73b6897e136p-17 + f64.add $push756=, $pop754, $pop755 + f64.mul $push757=, $0, $pop756 + f64.const $push758=, 0x1.6e01655acdabfp-10 + f64.add $push759=, $pop757, $pop758 + f64.mul $push760=, $pop1399, $pop759 + f64.const $push761=, 0x1.e0e30446b69dbp-5 + f64.add $push1318=, $pop760, $pop761 + return $pop1318 +.LBB0_29: # %sw.bb402 + end_block # label37: + f64.add $push722=, $0, $0 + f64.const $push723=, -0x1.3cp6 + f64.add $push1402=, $pop722, $pop723 + tee_local $push1401=, $0=, $pop1402 + f64.const $push724=, 0x1.2ee9801a347abp-46 + f64.mul $push725=, $0, $pop724 + f64.const $push726=, 0x1.d9aa84ed5f7f8p-39 + f64.add $push727=, $pop725, $pop726 + f64.mul $push728=, $0, $pop727 + f64.const $push729=, 0x1.487d76cb7622ap-31 + f64.add $push730=, $pop728, $pop729 + f64.mul $push731=, $0, $pop730 + f64.const $push732=, 0x1.9a613c8cbadfcp-24 + f64.add $push733=, $pop731, $pop732 + f64.mul $push734=, $0, $pop733 + f64.const $push735=, 0x1.d281dc526a9fdp-17 + f64.add $push736=, $pop734, $pop735 + f64.mul $push737=, $0, $pop736 + f64.const $push738=, 0x1.e61ead6a30f64p-10 + f64.add $push739=, $pop737, $pop738 + f64.mul $push740=, $pop1401, $pop739 + f64.const $push741=, 0x1.745bf26f1dc51p-4 + f64.add $push1317=, $pop740, $pop741 + return $pop1317 +.LBB0_30: # %sw.bb417 + end_block # label36: + f64.add $push702=, $0, $0 + f64.const $push703=, -0x1.8cp6 + f64.add $push1404=, $pop702, $pop703 + tee_local $push1403=, $0=, $pop1404 + f64.const $push704=, 0x1.11ed4c2f43d7ep-45 + f64.mul $push705=, $0, $pop704 + f64.const $push706=, 0x1.af109a3630d2ep-38 + f64.add $push707=, $pop705, $pop706 + f64.mul $push708=, $0, $pop707 + f64.const $push709=, 0x1.22f550d281614p-30 + f64.add $push710=, $pop708, $pop709 + f64.mul $push711=, $0, $pop710 + f64.const $push712=, 0x1.5782f0a3274a4p-23 + f64.add $push713=, $pop711, $pop712 + f64.mul $push714=, $0, $pop713 + f64.const $push715=, 0x1.66c7e028f516cp-16 + f64.add $push716=, $pop714, $pop715 + f64.mul $push717=, $0, $pop716 + f64.const $push718=, 0x1.4de48f6131734p-9 + f64.add $push719=, $pop717, $pop718 + f64.mul $push720=, $pop1403, $pop719 + f64.const $push721=, 0x1.1350092ccf6bep-3 + f64.add $push1316=, $pop720, $pop721 + return $pop1316 +.LBB0_31: # %sw.bb432 + end_block # label35: + f64.add $push682=, $0, $0 + f64.const $push683=, -0x1.dcp6 + f64.add $push1406=, $pop682, $pop683 + tee_local $push1405=, $0=, $pop1406 + f64.const $push684=, 0x1.dcc29389c0b3bp-45 + f64.mul $push685=, $0, $pop684 + f64.const $push686=, 0x1.83c457cdf69a8p-37 + f64.add $push687=, $pop685, $pop686 + f64.mul $push688=, $0, $pop687 + f64.const $push689=, 0x1.043a1711a52c6p-29 + f64.add $push690=, $pop688, $pop689 + f64.mul $push691=, $0, $pop690 + f64.const $push692=, 0x1.270db3366ba97p-22 + f64.add $push693=, $pop691, $pop692 + f64.mul $push694=, $0, $pop693 + f64.const $push695=, 0x1.1e049a3af6987p-15 + f64.add $push696=, $pop694, $pop695 + f64.mul $push697=, $0, $pop696 + f64.const $push698=, 0x1.dc57844b53bb7p-9 + f64.add $push699=, $pop697, $pop698 + f64.mul $push700=, $pop1405, $pop699 + f64.const $push701=, 0x1.902de00d1b717p-3 + f64.add $push1315=, $pop700, $pop701 + return $pop1315 +.LBB0_32: # %sw.bb447 + end_block # label34: + f64.add $push662=, $0, $0 + f64.const $push663=, -0x1.e4p6 + f64.add $push1408=, $pop662, $pop663 + tee_local $push1407=, $0=, $pop1408 + f64.const $push664=, 0x1.f682fb42899afp-45 + f64.mul $push665=, $0, $pop664 + f64.const $push666=, 0x1.9ab5097251322p-37 + f64.add $push667=, $pop665, $pop666 + f64.mul $push668=, $0, $pop667 + f64.const $push669=, 0x1.13cfff76e3d9cp-29 + f64.add $push670=, $pop668, $pop669 + f64.mul $push671=, $0, $pop670 + f64.const $push672=, 0x1.37cb0bef2ef1ep-22 + f64.add $push673=, $pop671, $pop672 + f64.mul $push674=, $0, $pop673 + f64.const $push675=, 0x1.2c3c9655b9bd4p-15 + f64.add $push676=, $pop674, $pop675 + f64.mul $push677=, $0, $pop676 + f64.const $push678=, 0x1.eea7122820b08p-9 + f64.add $push679=, $pop677, $pop678 + f64.mul $push680=, $pop1407, $pop679 + f64.const $push681=, 0x1.9f5ad96a6a012p-3 + f64.add $push1314=, $pop680, $pop681 + return $pop1314 +.LBB0_33: # %sw.bb462 + end_block # label33: + f64.add $push642=, $0, $0 + f64.const $push643=, -0x1.ecp6 + f64.add $push1410=, $pop642, $pop643 + tee_local $push1409=, $0=, $pop1410 + f64.const $push644=, 0x1.08ad32632c073p-44 + f64.mul $push645=, $0, $pop644 + f64.const $push646=, 0x1.b2e9fd6fd80ddp-37 + f64.add $push647=, $pop645, $pop646 + f64.mul $push648=, $0, $pop647 + f64.const $push649=, 0x1.245528d098f79p-29 + f64.add $push650=, $pop648, $pop649 + f64.mul $push651=, $0, $pop650 + f64.const $push652=, 0x1.498ac7468b8cbp-22 + f64.add $push653=, $pop651, $pop652 + f64.mul $push654=, $0, $pop653 + f64.const $push655=, 0x1.3b42baff5eb43p-15 + f64.add $push656=, $pop654, $pop655 + f64.mul $push657=, $0, $pop656 + f64.const $push658=, 0x1.00f0c0c7dbcc4p-8 + f64.add $push659=, $pop657, $pop658 + f64.mul $push660=, $pop1409, $pop659 + f64.const $push661=, 0x1.af1a9fbe76c8bp-3 + f64.add $push1313=, $pop660, $pop661 + return $pop1313 +.LBB0_34: # %sw.bb477 + end_block # label32: + f64.add $push622=, $0, $0 + f64.const $push623=, -0x1.f4p6 + f64.add $push1412=, $pop622, $pop623 + tee_local $push1411=, $0=, $pop1412 + f64.const $push624=, 0x1.16a6b65650415p-44 + f64.mul $push625=, $0, $pop624 + f64.const $push626=, 0x1.cc5a31eebbb9ep-37 + f64.add $push627=, $pop625, $pop626 + f64.mul $push628=, $0, $pop627 + f64.const $push629=, 0x1.35d09c8f5e982p-29 + f64.add $push630=, $pop628, $pop629 + f64.mul $push631=, $0, $pop630 + f64.const $push632=, 0x1.5c5aa3ac6e65cp-22 + f64.add $push633=, $pop631, $pop632 + f64.mul $push634=, $0, $pop633 + f64.const $push635=, 0x1.4b261082509f2p-15 + f64.add $push636=, $pop634, $pop635 + f64.mul $push637=, $0, $pop636 + f64.const $push638=, 0x1.0b0a1f3db2e8fp-8 + f64.add $push639=, $pop637, $pop638 + f64.mul $push640=, $pop1411, $pop639 + f64.const $push641=, 0x1.bf77af640639dp-3 + f64.add $push1312=, $pop640, $pop641 + return $pop1312 +.LBB0_35: # %sw.bb492 + end_block # label31: + f64.add $push602=, $0, $0 + f64.const $push603=, -0x1.fcp6 + f64.add $push1414=, $pop602, $pop603 + tee_local $push1413=, $0=, $pop1414 + f64.const $push604=, 0x1.252f30a08e99p-44 + f64.mul $push605=, $0, $pop604 + f64.const $push606=, 0x1.e729ae4e3a05p-37 + f64.add $push607=, $pop605, $pop606 + f64.mul $push608=, $0, $pop607 + f64.const $push609=, 0x1.48506d9468e04p-29 + f64.add $push610=, $pop608, $pop609 + f64.mul $push611=, $0, $pop610 + f64.const $push612=, 0x1.704b1f40c0981p-22 + f64.add $push613=, $pop611, $pop612 + f64.mul $push614=, $0, $pop613 + f64.const $push615=, 0x1.5bef2de483919p-15 + f64.add $push616=, $pop614, $pop615 + f64.mul $push617=, $0, $pop616 + f64.const $push618=, 0x1.15a65a723c5d8p-8 + f64.add $push619=, $pop617, $pop618 + f64.mul $push620=, $pop1413, $pop619 + f64.const $push621=, 0x1.d07c84b5dcc64p-3 + f64.add $push1311=, $pop620, $pop621 + return $pop1311 +.LBB0_36: # %sw.bb507 + end_block # label30: + f64.add $push582=, $0, $0 + f64.const $push583=, -0x1.02p7 + f64.add $push1416=, $pop582, $pop583 + tee_local $push1415=, $0=, $pop1416 + f64.const $push584=, 0x1.3448ef8da1489p-44 + f64.mul $push585=, $0, $pop584 + f64.const $push586=, 0x1.01ac394729779p-36 + f64.add $push587=, $pop585, $pop586 + f64.mul $push588=, $0, $pop587 + f64.const $push589=, 0x1.5be2aec0ebf4bp-29 + f64.add $push590=, $pop588, $pop589 + f64.mul $push591=, $0, $pop590 + f64.const $push592=, 0x1.856cb8236b3ecp-22 + f64.add $push593=, $pop591, $pop592 + f64.mul $push594=, $0, $pop593 + f64.const $push595=, 0x1.6db166f35cb72p-15 + f64.add $push596=, $pop594, $pop595 + f64.mul $push597=, $0, $pop596 + f64.const $push598=, 0x1.20cc28621ed91p-8 + f64.add $push599=, $pop597, $pop598 + f64.mul $push600=, $pop1415, $pop599 + f64.const $push601=, 0x1.e2339c0ebedfap-3 + f64.add $push1310=, $pop600, $pop601 + return $pop1310 +.LBB0_37: # %sw.bb522 + end_block # label29: + f64.add $push562=, $0, $0 + f64.const $push563=, -0x1.06p7 + f64.add $push1418=, $pop562, $pop563 + tee_local $push1417=, $0=, $pop1418 + f64.const $push564=, 0x1.43f51a43656d1p-44 + f64.mul $push565=, $0, $pop564 + f64.const $push566=, 0x1.107c412f52afep-36 + f64.add $push567=, $pop565, $pop566 + f64.mul $push568=, $0, $pop567 + f64.const $push569=, 0x1.7098f7ae69034p-29 + f64.add $push570=, $pop568, $pop569 + f64.mul $push571=, $0, $pop570 + f64.const $push572=, 0x1.9bcd2cc45b459p-22 + f64.add $push573=, $pop571, $pop572 + f64.mul $push574=, $0, $pop573 + f64.const $push575=, 0x1.807778764d281p-15 + f64.add $push576=, $pop574, $pop575 + f64.mul $push577=, $0, $pop576 + f64.const $push578=, 0x1.2c83ec892ab69p-8 + f64.add $push579=, $pop577, $pop578 + f64.mul $push580=, $pop1417, $pop579 + f64.const $push581=, 0x1.f49cf56eac86p-3 + f64.add $push1309=, $pop580, $pop581 + return $pop1309 +.LBB0_38: # %sw.bb537 + end_block # label28: + f64.add $push542=, $0, $0 + f64.const $push543=, -0x1.0ap7 + f64.add $push1420=, $pop542, $pop543 + tee_local $push1419=, $0=, $pop1420 + f64.const $push544=, 0x1.5434d7e7b823ap-44 + f64.mul $push545=, $0, $pop544 + f64.const $push546=, 0x1.200df0b7681fp-36 + f64.add $push547=, $pop545, $pop546 + f64.mul $push548=, $0, $pop547 + f64.const $push549=, 0x1.867a51cd7a1e6p-29 + f64.add $push550=, $pop548, $pop549 + f64.mul $push551=, $0, $pop550 + f64.const $push552=, 0x1.b3853a536e553p-22 + f64.add $push553=, $pop551, $pop552 + f64.mul $push554=, $0, $pop553 + f64.const $push555=, 0x1.945290793d0b5p-15 + f64.add $push556=, $pop554, $pop555 + f64.mul $push557=, $0, $pop556 + f64.const $push558=, 0x1.38d60a633051p-8 + f64.add $push559=, $pop557, $pop558 + f64.mul $push560=, $pop1419, $pop559 + f64.const $push561=, 0x1.03e1869835159p-2 + f64.add $push1308=, $pop560, $pop561 + return $pop1308 +.LBB0_39: # %sw.bb552 + end_block # label27: + f64.add $push522=, $0, $0 + f64.const $push523=, -0x1.0ep7 + f64.add $push1422=, $pop522, $pop523 + tee_local $push1421=, $0=, $pop1422 + f64.const $push524=, 0x1.65094fa076898p-44 + f64.mul $push525=, $0, $pop524 + f64.const $push526=, 0x1.3065c8cb517eep-36 + f64.add $push527=, $pop525, $pop526 + f64.mul $push528=, $0, $pop527 + f64.const $push529=, 0x1.9d9f5e283a865p-29 + f64.add $push530=, $pop528, $pop529 + f64.mul $push531=, $0, $pop530 + f64.const $push532=, 0x1.cca55ef08d88ap-22 + f64.add $push533=, $pop531, $pop532 + f64.mul $push534=, $0, $pop533 + f64.const $push535=, 0x1.a951b7469782dp-15 + f64.add $push536=, $pop534, $pop535 + f64.mul $push537=, $0, $pop536 + f64.const $push538=, 0x1.45cc92eb29af2p-8 + f64.add $push539=, $pop537, $pop538 + f64.mul $push540=, $pop1421, $pop539 + f64.const $push541=, 0x1.0ddd6e04c0592p-2 + f64.add $push1307=, $pop540, $pop541 + return $pop1307 +.LBB0_40: # %sw.bb567 + end_block # label26: + f64.add $push502=, $0, $0 + f64.const $push503=, -0x1.12p7 + f64.add $push1424=, $pop502, $pop503 + tee_local $push1423=, $0=, $pop1424 + f64.const $push504=, 0x1.7672816da09eap-44 + f64.mul $push505=, $0, $pop504 + f64.const $push506=, 0x1.41884a56f6894p-36 + f64.add $push507=, $pop505, $pop506 + f64.mul $push508=, $0, $pop507 + f64.const $push509=, 0x1.b612aae79156ap-29 + f64.add $push510=, $pop508, $pop509 + f64.mul $push511=, $0, $pop510 + f64.const $push512=, 0x1.e740d86b9e2a1p-22 + f64.add $push513=, $pop511, $pop512 + f64.mul $push514=, $0, $pop513 + f64.const $push515=, 0x1.bf8840abc1ba5p-15 + f64.add $push516=, $pop514, $pop515 + f64.mul $push517=, $0, $pop516 + f64.const $push518=, 0x1.536e3c1dbd803p-8 + f64.add $push519=, $pop517, $pop518 + f64.mul $push520=, $pop1423, $pop519 + f64.const $push521=, 0x1.184230fcf80dcp-2 + f64.add $push1306=, $pop520, $pop521 + return $pop1306 +.LBB0_41: # %sw.bb582 + end_block # label25: + f64.add $push482=, $0, $0 + f64.const $push483=, -0x1.16p7 + f64.add $push1426=, $pop482, $pop483 + tee_local $push1425=, $0=, $pop1426 + f64.const $push484=, 0x1.88706d4f3663p-44 + f64.mul $push485=, $0, $pop484 + f64.const $push486=, 0x1.5382f81e0e6bap-36 + f64.add $push487=, $pop485, $pop486 + f64.mul $push488=, $0, $pop487 + f64.const $push489=, 0x1.cfe24aecb2b41p-29 + f64.add $push490=, $pop488, $pop489 + f64.mul $push491=, $0, $pop490 + f64.const $push492=, 0x1.01b6d22240d98p-21 + f64.add $push493=, $pop491, $pop492 + f64.mul $push494=, $0, $pop493 + f64.const $push495=, 0x1.d70534f326d3bp-15 + f64.add $push496=, $pop494, $pop495 + f64.mul $push497=, $0, $pop496 + f64.const $push498=, 0x1.61c871f439226p-8 + f64.add $push499=, $pop497, $pop498 + f64.mul $push500=, $pop1425, $pop499 + f64.const $push501=, 0x1.23150dae3e6c5p-2 + f64.add $push1305=, $pop500, $pop501 + return $pop1305 +.LBB0_42: # %sw.bb597 + end_block # label24: + f64.add $push462=, $0, $0 + f64.const $push463=, -0x1.1ap7 + f64.add $push1428=, $pop462, $pop463 + tee_local $push1427=, $0=, $pop1428 + f64.const $push464=, 0x1.9b01ec1f5ab98p-44 + f64.mul $push465=, $0, $pop464 + f64.const $push466=, 0x1.6655d22099262p-36 + f64.add $push467=, $pop465, $pop466 + f64.mul $push468=, $0, $pop467 + f64.const $push469=, 0x1.eb235a896cd5bp-29 + f64.add $push470=, $pop468, $pop469 + f64.mul $push471=, $0, $pop470 + f64.const $push472=, 0x1.10a23fd58ae5ep-21 + f64.add $push473=, $pop471, $pop472 + f64.mul $push474=, $0, $pop473 + f64.const $push475=, 0x1.efe0336d26046p-15 + f64.add $push476=, $pop474, $pop475 + f64.mul $push477=, $0, $pop476 + f64.const $push478=, 0x1.70e397ea6cf0cp-8 + f64.add $push479=, $pop477, $pop478 + f64.mul $push480=, $pop1427, $pop479 + f64.const $push481=, 0x1.2e60807357e67p-2 + f64.add $push1304=, $pop480, $pop481 + return $pop1304 +.LBB0_43: # %sw.bb612 + end_block # label23: + f64.add $push442=, $0, $0 + f64.const $push443=, -0x1.1ep7 + f64.add $push1430=, $pop442, $pop443 + tee_local $push1429=, $0=, $pop1430 + f64.const $push444=, 0x1.ae26fdde0da22p-44 + f64.mul $push445=, $0, $pop444 + f64.const $push446=, 0x1.7a0e5b224de62p-36 + f64.add $push447=, $pop445, $pop446 + f64.mul $push448=, $0, $pop447 + f64.const $push449=, 0x1.03f1f64f79f02p-28 + f64.add $push450=, $pop448, $pop449 + f64.mul $push451=, $0, $pop450 + f64.const $push452=, 0x1.206db40f9df7p-21 + f64.add $push453=, $pop451, $pop452 + f64.mul $push454=, $0, $pop453 + f64.const $push455=, 0x1.051647f3923c1p-14 + f64.add $push456=, $pop454, $pop455 + f64.mul $push457=, $0, $pop456 + f64.const $push458=, 0x1.80c9befb52f21p-8 + f64.add $push459=, $pop457, $pop458 + f64.mul $push460=, $pop1429, $pop459 + f64.const $push461=, 0x1.3a272862f598ap-2 + f64.add $push1303=, $pop460, $pop461 + return $pop1303 +.LBB0_44: # %sw.bb627 + end_block # label22: + f64.add $push422=, $0, $0 + f64.const $push423=, -0x1.22p7 + f64.add $push1432=, $pop422, $pop423 + tee_local $push1431=, $0=, $pop1432 + f64.const $push424=, 0x1.c1de7b6571ffbp-44 + f64.mul $push425=, $0, $pop424 + f64.const $push426=, 0x1.8eac93232cabap-36 + f64.add $push427=, $pop425, $pop426 + f64.mul $push428=, $0, $pop427 + f64.const $push429=, 0x1.131e511bb18ap-28 + f64.add $push430=, $pop428, $pop429 + f64.mul $push431=, $0, $pop430 + f64.const $push432=, 0x1.31242d906ac99p-21 + f64.add $push433=, $pop431, $pop432 + f64.mul $push434=, $0, $pop433 + f64.const $push435=, 0x1.12fecf1743ad4p-14 + f64.add $push436=, $pop434, $pop435 + f64.mul $push437=, $0, $pop436 + f64.const $push438=, 0x1.918a009f62307p-8 + f64.add $push439=, $pop437, $pop438 + f64.mul $push440=, $pop1431, $pop439 + f64.const $push441=, 0x1.466e43aa79bbbp-2 + f64.add $push1302=, $pop440, $pop441 + return $pop1302 +.LBB0_45: # %sw.bb642 + end_block # label21: + f64.add $push402=, $0, $0 + f64.const $push403=, -0x1.26p7 + f64.add $push1434=, $pop402, $pop403 + tee_local $push1433=, $0=, $pop1434 + f64.const $push404=, 0x1.d62179d259236p-44 + f64.mul $push405=, $0, $pop404 + f64.const $push406=, 0x1.a43dfce6eca43p-36 + f64.add $push407=, $pop405, $pop406 + f64.mul $push408=, $0, $pop407 + f64.const $push409=, 0x1.231c04bdd0c64p-28 + f64.add $push410=, $pop408, $pop409 + f64.mul $push411=, $0, $pop410 + f64.const $push412=, 0x1.42d62a77da788p-21 + f64.add $push413=, $pop411, $pop412 + f64.mul $push414=, $0, $pop413 + f64.const $push415=, 0x1.21b57ec9d6f09p-14 + f64.add $push416=, $pop414, $pop415 + f64.mul $push417=, $0, $pop416 + f64.const $push418=, 0x1.a32e6dd194b2bp-8 + f64.add $push419=, $pop417, $pop418 + f64.mul $push420=, $pop1433, $pop419 + f64.const $push421=, 0x1.53404ea4a8c15p-2 + f64.add $push1301=, $pop420, $pop421 + return $pop1301 +.LBB0_46: # %sw.bb657 + end_block # label20: + f64.add $push382=, $0, $0 + f64.const $push383=, -0x1.2ap7 + f64.add $push1436=, $pop382, $pop383 + tee_local $push1435=, $0=, $pop1436 + f64.const $push384=, 0x1.eaeff924c30d3p-44 + f64.mul $push385=, $0, $pop384 + f64.const $push386=, 0x1.bac2986d8dcfdp-36 + f64.add $push387=, $pop385, $pop386 + f64.mul $push388=, $0, $pop387 + f64.const $push389=, 0x1.33f59f5ebec07p-28 + f64.add $push390=, $pop388, $pop389 + f64.mul $push391=, $0, $pop390 + f64.const $push392=, 0x1.558d49addfa8fp-21 + f64.add $push393=, $pop391, $pop392 + f64.mul $push394=, $0, $pop393 + f64.const $push395=, 0x1.314626b37ba09p-14 + f64.add $push396=, $pop394, $pop395 + f64.mul $push397=, $0, $pop396 + f64.const $push398=, 0x1.b5c4728b37d7p-8 + f64.add $push399=, $pop397, $pop398 + f64.mul $push400=, $pop1435, $pop399 + f64.const $push401=, 0x1.60a5269595feep-2 + f64.add $push1300=, $pop400, $pop401 + return $pop1300 +.LBB0_47: # %sw.bb672 + end_block # label19: + f64.add $push362=, $0, $0 + f64.const $push363=, -0x1.2ep7 + f64.add $push1438=, $pop362, $pop363 + tee_local $push1437=, $0=, $pop1438 + f64.const $push364=, 0x1.002a2cd8bae1cp-43 + f64.mul $push365=, $0, $pop364 + f64.const $push366=, 0x1.d247e87ac75bfp-36 + f64.add $push367=, $pop365, $pop366 + f64.mul $push368=, $0, $pop367 + f64.const $push369=, 0x1.45b5af2762942p-28 + f64.add $push370=, $pop368, $pop369 + f64.mul $push371=, $0, $pop370 + f64.const $push372=, 0x1.6958a97a655e7p-21 + f64.add $push373=, $pop371, $pop372 + f64.mul $push374=, $0, $pop373 + f64.const $push375=, 0x1.41bebc3dde5cfp-14 + f64.add $push376=, $pop374, $pop375 + f64.mul $push377=, $0, $pop376 + f64.const $push378=, 0x1.c95b2844c2a7bp-8 + f64.add $push379=, $pop377, $pop378 + f64.mul $push380=, $pop1437, $pop379 + f64.const $push381=, 0x1.6e9f6a93f290bp-2 + f64.add $push1299=, $pop380, $pop381 + return $pop1299 +.LBB0_48: # %sw.bb687 + end_block # label18: + f64.add $push342=, $0, $0 + f64.const $push343=, -0x1.32p7 + f64.add $push1440=, $pop342, $pop343 + tee_local $push1439=, $0=, $pop1440 + f64.const $push344=, 0x1.0b1bc641957fap-43 + f64.mul $push345=, $0, $pop344 + f64.const $push346=, 0x1.eacded0e9948ap-36 + f64.add $push347=, $pop345, $pop346 + f64.mul $push348=, $0, $pop347 + f64.const $push349=, 0x1.5866c240a35cdp-28 + f64.add $push350=, $pop348, $pop349 + f64.mul $push351=, $0, $pop350 + f64.const $push352=, 0x1.7e48c7fd54b3fp-21 + f64.add $push353=, $pop351, $pop352 + f64.mul $push354=, $0, $pop353 + f64.const $push355=, 0x1.532b0f112ec05p-14 + f64.add $push356=, $pop354, $pop355 + f64.mul $push357=, $0, $pop356 + f64.const $push358=, 0x1.de01a876ac2ecp-8 + f64.add $push359=, $pop357, $pop358 + f64.mul $push360=, $pop1439, $pop359 + f64.const $push361=, 0x1.7d3c36113404fp-2 + f64.add $push1298=, $pop360, $pop361 + return $pop1298 +.LBB0_49: # %sw.bb702 + end_block # label17: + f64.add $push322=, $0, $0 + f64.const $push323=, -0x1.36p7 + f64.add $push1442=, $pop322, $pop323 + tee_local $push1441=, $0=, $pop1442 + f64.const $push324=, 0x1.16528c8a42f2p-43 + f64.mul $push325=, $0, $pop324 + f64.const $push326=, 0x1.022ed4006984cp-35 + f64.add $push327=, $pop325, $pop326 + f64.mul $push328=, $0, $pop327 + f64.const $push329=, 0x1.6c11a47741b18p-28 + f64.add $push330=, $pop328, $pop329 + f64.mul $push331=, $0, $pop330 + f64.const $push332=, 0x1.946b63a69a956p-21 + f64.add $push333=, $pop331, $pop332 + f64.mul $push334=, $0, $pop333 + f64.const $push335=, 0x1.659a2777d7ecbp-14 + f64.add $push336=, $pop334, $pop335 + f64.mul $push337=, $0, $pop336 + f64.const $push338=, 0x1.f3c70c996b767p-8 + f64.add $push339=, $pop337, $pop338 + f64.mul $push340=, $pop1441, $pop339 + f64.const $push341=, 0x1.8c8366516db0ep-2 + f64.add $push1297=, $pop340, $pop341 + return $pop1297 +.LBB0_50: # %sw.bb717 + end_block # label16: + f64.add $push302=, $0, $0 + f64.const $push303=, -0x1.3ap7 + f64.add $push1444=, $pop302, $pop303 + tee_local $push1443=, $0=, $pop1444 + f64.const $push304=, 0x1.21c2f83820157p-43 + f64.mul $push305=, $0, $pop304 + f64.const $push306=, 0x1.0f800d94a2092p-35 + f64.add $push307=, $pop305, $pop306 + f64.mul $push308=, $0, $pop307 + f64.const $push309=, 0x1.80c0e3f424adbp-28 + f64.add $push310=, $pop308, $pop309 + f64.mul $push311=, $0, $pop310 + f64.const $push312=, 0x1.abd0fa96201dcp-21 + f64.add $push313=, $pop311, $pop312 + f64.mul $push314=, $0, $pop313 + f64.const $push315=, 0x1.791b0dbc4504p-14 + f64.add $push316=, $pop314, $pop315 + f64.mul $push317=, $0, $pop316 + f64.const $push318=, 0x1.055d3712bbc46p-7 + f64.add $push319=, $pop317, $pop318 + f64.mul $push320=, $pop1443, $pop319 + f64.const $push321=, 0x1.9c7cd898b2e9dp-2 + f64.add $push1296=, $pop320, $pop321 + return $pop1296 +.LBB0_51: # %sw.bb732 + end_block # label15: + f64.add $push282=, $0, $0 + f64.const $push283=, -0x1.3ep7 + f64.add $push1446=, $pop282, $pop283 + tee_local $push1445=, $0=, $pop1446 + f64.const $push284=, 0x1.2d72cd087e7bbp-43 + f64.mul $push285=, $0, $pop284 + f64.const $push286=, 0x1.1d5aa343f6318p-35 + f64.add $push287=, $pop285, $pop286 + f64.mul $push288=, $0, $pop287 + f64.const $push289=, 0x1.9680d13c59f19p-28 + f64.add $push290=, $pop288, $pop289 + f64.mul $push291=, $0, $pop290 + f64.const $push292=, 0x1.c488ab13d0509p-21 + f64.add $push293=, $pop291, $pop292 + f64.mul $push294=, $0, $pop293 + f64.const $push295=, 0x1.8dbbb74822a5fp-14 + f64.add $push296=, $pop294, $pop295 + f64.mul $push297=, $0, $pop296 + f64.const $push298=, 0x1.1177f7886239bp-7 + f64.add $push299=, $pop297, $pop298 + f64.mul $push300=, $pop1445, $pop299 + f64.const $push301=, 0x1.ad330941c8217p-2 + f64.add $push1295=, $pop300, $pop301 + return $pop1295 +.LBB0_52: # %sw.bb747 + end_block # label14: + f64.add $push262=, $0, $0 + f64.const $push263=, -0x1.42p7 + f64.add $push1448=, $pop262, $pop263 + tee_local $push1447=, $0=, $pop1448 + f64.const $push264=, 0x1.39620afb5e24cp-43 + f64.mul $push265=, $0, $pop264 + f64.const $push266=, 0x1.2bc315fa4db79p-35 + f64.add $push267=, $pop265, $pop266 + f64.mul $push268=, $0, $pop267 + f64.const $push269=, 0x1.ad5bfa78c898bp-28 + f64.add $push270=, $pop268, $pop269 + f64.mul $push271=, $0, $pop270 + f64.const $push272=, 0x1.dea712c78e8fap-21 + f64.add $push273=, $pop271, $pop272 + f64.mul $push274=, $0, $pop273 + f64.const $push275=, 0x1.a383a840a6635p-14 + f64.add $push276=, $pop274, $pop275 + f64.mul $push277=, $0, $pop276 + f64.const $push278=, 0x1.1e3c2b2979761p-7 + f64.add $push279=, $pop277, $pop278 + f64.mul $push280=, $pop1447, $pop279 + f64.const $push281=, 0x1.beadd590c0adp-2 + f64.add $push1294=, $pop280, $pop281 + return $pop1294 +.LBB0_53: # %sw.bb762 + end_block # label13: + f64.add $push242=, $0, $0 + f64.const $push243=, -0x1.46p7 + f64.add $push1450=, $pop242, $pop243 + tee_local $push1449=, $0=, $pop1450 + f64.const $push244=, 0x1.457f66d8ca5b7p-43 + f64.mul $push245=, $0, $pop244 + f64.const $push246=, 0x1.3abde6a390555p-35 + f64.add $push247=, $pop245, $pop246 + f64.mul $push248=, $0, $pop247 + f64.const $push249=, 0x1.c55b2b76313ap-28 + f64.add $push250=, $pop248, $pop249 + f64.mul $push251=, $0, $pop250 + f64.const $push252=, 0x1.fa3b4ff945de5p-21 + f64.add $push253=, $pop251, $pop252 + f64.mul $push254=, $0, $pop253 + f64.const $push255=, 0x1.ba9ff98511a24p-14 + f64.add $push256=, $pop254, $pop255 + f64.mul $push257=, $0, $pop256 + f64.const $push258=, 0x1.2bb4b9b090562p-7 + f64.add $push259=, $pop257, $pop258 + f64.mul $push260=, $pop1449, $pop259 + f64.const $push261=, 0x1.d0fcf80dc3372p-2 + f64.add $push1293=, $pop260, $pop261 + return $pop1293 +.LBB0_54: # %sw.bb777 + end_block # label12: + f64.add $push222=, $0, $0 + f64.const $push223=, -0x1.4ap7 + f64.add $push1452=, $pop222, $pop223 + tee_local $push1451=, $0=, $pop1452 + f64.const $push224=, 0x1.51d6681b66433p-43 + f64.mul $push225=, $0, $pop224 + f64.const $push226=, 0x1.4a48d4c9ca2dbp-35 + f64.add $push227=, $pop225, $pop226 + f64.mul $push228=, $0, $pop227 + f64.const $push229=, 0x1.de8c7715c7fa3p-28 + f64.add $push230=, $pop228, $pop229 + f64.mul $push231=, $0, $pop230 + f64.const $push232=, 0x1.0bac503c6dc37p-20 + f64.add $push233=, $pop231, $pop232 + f64.mul $push234=, $0, $pop233 + f64.const $push235=, 0x1.d30926f02ed1ap-14 + f64.add $push236=, $pop234, $pop235 + f64.mul $push237=, $0, $pop236 + f64.const $push238=, 0x1.39ea06997734fp-7 + f64.add $push239=, $pop237, $pop238 + f64.mul $push240=, $pop1451, $pop239 + f64.const $push241=, 0x1.e42aed1394318p-2 + f64.add $push1292=, $pop240, $pop241 + return $pop1292 +.LBB0_55: # %sw.bb792 + end_block # label11: + f64.add $push202=, $0, $0 + f64.const $push203=, -0x1.4ep7 + f64.add $push1454=, $pop202, $pop203 + tee_local $push1453=, $0=, $pop1454 + f64.const $push204=, 0x1.5e5b87488eb8ap-43 + f64.mul $push205=, $0, $pop204 + f64.const $push206=, 0x1.5a6aa1ced6d78p-35 + f64.add $push207=, $pop205, $pop206 + f64.mul $push208=, $0, $pop207 + f64.const $push209=, 0x1.f8fa6b8073f4dp-28 + f64.add $push210=, $pop208, $pop209 + f64.mul $push211=, $0, $pop210 + f64.const $push212=, 0x1.1b09d0f71975ap-20 + f64.add $push213=, $pop211, $pop212 + f64.mul $push214=, $0, $pop213 + f64.const $push215=, 0x1.ecd4aa10e0221p-14 + f64.add $push216=, $pop214, $pop215 + f64.mul $push217=, $0, $pop216 + f64.const $push218=, 0x1.48e4755ffe6d6p-7 + f64.add $push219=, $pop217, $pop218 + f64.mul $push220=, $pop1453, $pop219 + f64.const $push221=, 0x1.f83f91e646f15p-2 + f64.add $push1291=, $pop220, $pop221 + return $pop1291 +.LBB0_56: # %sw.bb807 + end_block # label10: + f64.add $push182=, $0, $0 + f64.const $push183=, -0x1.52p7 + f64.add $push1456=, $pop182, $pop183 + tee_local $push1455=, $0=, $pop1456 + f64.const $push184=, 0x1.6b0900a2f22ap-43 + f64.mul $push185=, $0, $pop184 + f64.const $push186=, 0x1.6b210d3cc275ep-35 + f64.add $push187=, $pop185, $pop186 + f64.mul $push188=, $0, $pop187 + f64.const $push189=, 0x1.0a58ac9da165p-27 + f64.add $push190=, $pop188, $pop189 + f64.mul $push191=, $0, $pop190 + f64.const $push192=, 0x1.2b3999c8a140ap-20 + f64.add $push193=, $pop191, $pop192 + f64.mul $push194=, $0, $pop193 + f64.const $push195=, 0x1.040bfe3b03e21p-13 + f64.add $push196=, $pop194, $pop195 + f64.mul $push197=, $0, $pop196 + f64.const $push198=, 0x1.58b827fa1a0cfp-7 + f64.add $push199=, $pop197, $pop198 + f64.mul $push200=, $pop1455, $pop199 + f64.const $push201=, 0x1.06a550870110ap-1 + f64.add $push1290=, $pop200, $pop201 + return $pop1290 +.LBB0_57: # %sw.bb822 + end_block # label9: + f64.add $push162=, $0, $0 + f64.const $push163=, -0x1.56p7 + f64.add $push1458=, $pop162, $pop163 + tee_local $push1457=, $0=, $pop1458 + f64.const $push164=, 0x1.77ded42a90976p-43 + f64.mul $push165=, $0, $pop164 + f64.const $push166=, 0x1.7c72d875689f8p-35 + f64.add $push167=, $pop165, $pop166 + f64.mul $push168=, $0, $pop167 + f64.const $push169=, 0x1.18dde7378dcacp-27 + f64.add $push170=, $pop168, $pop169 + f64.mul $push171=, $0, $pop170 + f64.const $push172=, 0x1.3c530808e4b56p-20 + f64.add $push173=, $pop171, $pop172 + f64.mul $push174=, $0, $pop173 + f64.const $push175=, 0x1.1279aa3afc804p-13 + f64.add $push176=, $pop174, $pop175 + f64.mul $push177=, $0, $pop176 + f64.const $push178=, 0x1.696e58a32f449p-7 + f64.add $push179=, $pop177, $pop178 + f64.mul $push180=, $pop1457, $pop179 + f64.const $push181=, 0x1.11adea897635ep-1 + f64.add $push1289=, $pop180, $pop181 + return $pop1289 +.LBB0_58: # %sw.bb837 + end_block # label8: + f64.add $push142=, $0, $0 + f64.const $push143=, -0x1.5ap7 + f64.add $push1460=, $pop142, $pop143 + tee_local $push1459=, $0=, $pop1460 + f64.const $push144=, 0x1.84d73e22186efp-43 + f64.mul $push145=, $0, $pop144 + f64.const $push146=, 0x1.8e600378c9547p-35 + f64.add $push147=, $pop145, $pop146 + f64.mul $push148=, $0, $pop147 + f64.const $push149=, 0x1.28130dd085fb9p-27 + f64.add $push150=, $pop148, $pop149 + f64.mul $push151=, $0, $pop150 + f64.const $push152=, 0x1.4e5cfaefda49ep-20 + f64.add $push153=, $pop151, $pop152 + f64.mul $push154=, $0, $pop153 + f64.const $push155=, 0x1.21b8b76c1277dp-13 + f64.add $push156=, $pop154, $pop155 + f64.mul $push157=, $0, $pop156 + f64.const $push158=, 0x1.7b0f6ad70e6f3p-7 + f64.add $push159=, $pop157, $pop158 + f64.mul $push160=, $pop1459, $pop159 + f64.const $push161=, 0x1.1d3ed527e5215p-1 + f64.add $push1288=, $pop160, $pop161 + return $pop1288 +.LBB0_59: # %sw.bb852 + end_block # label7: + f64.add $push122=, $0, $0 + f64.const $push123=, -0x1.5ep7 + f64.add $push1462=, $pop122, $pop123 + tee_local $push1461=, $0=, $pop1462 + f64.const $push124=, 0x1.91f23e8989b0cp-43 + f64.mul $push125=, $0, $pop124 + f64.const $push126=, 0x1.a0e88e46e494ap-35 + f64.add $push127=, $pop125, $pop126 + f64.mul $push128=, $0, $pop127 + f64.const $push129=, 0x1.37ff29d92409fp-27 + f64.add $push130=, $pop128, $pop129 + f64.mul $push131=, $0, $pop130 + f64.const $push132=, 0x1.615e51b578741p-20 + f64.add $push133=, $pop131, $pop132 + f64.mul $push134=, $0, $pop133 + f64.const $push135=, 0x1.31d940f96f6d2p-13 + f64.add $push136=, $pop134, $pop135 + f64.mul $push137=, $0, $pop136 + f64.const $push138=, 0x1.8da3c21187e7cp-7 + f64.add $push139=, $pop137, $pop138 + f64.mul $push140=, $pop1461, $pop139 + f64.const $push141=, 0x1.29613d31b9b67p-1 + f64.add $push1287=, $pop140, $pop141 + return $pop1287 +.LBB0_60: # %sw.bb867 + end_block # label6: + f64.add $push102=, $0, $0 + f64.const $push103=, -0x1.62p7 + f64.add $push1464=, $pop102, $pop103 + tee_local $push1463=, $0=, $pop1464 + f64.const $push104=, 0x1.9f1e8a28efa7bp-43 + f64.mul $push105=, $0, $pop104 + f64.const $push106=, 0x1.b40eb955ae3dp-35 + f64.add $push107=, $pop105, $pop106 + f64.mul $push108=, $0, $pop107 + f64.const $push109=, 0x1.48a78265db839p-27 + f64.add $push110=, $pop108, $pop109 + f64.mul $push111=, $0, $pop110 + f64.const $push112=, 0x1.755deb91b5a9ep-20 + f64.add $push113=, $pop111, $pop112 + f64.mul $push114=, $0, $pop113 + f64.const $push115=, 0x1.42e0a546cbec5p-13 + f64.add $push116=, $pop114, $pop115 + f64.mul $push117=, $0, $pop116 + f64.const $push118=, 0x1.a14cec41dd1a2p-7 + f64.add $push119=, $pop117, $pop118 + f64.mul $push120=, $pop1463, $pop119 + f64.const $push121=, 0x1.361cffeb074a7p-1 + f64.add $push1286=, $pop120, $pop121 + return $pop1286 +.LBB0_61: # %sw.bb882 + end_block # label5: + f64.add $push82=, $0, $0 + f64.const $push83=, -0x1.66p7 + f64.add $push1466=, $pop82, $pop83 + tee_local $push1465=, $0=, $pop1466 + f64.const $push84=, 0x1.ac67a87aed773p-43 + f64.mul $push85=, $0, $pop84 + f64.const $push86=, 0x1.c7d4c51b1a2a8p-35 + f64.add $push87=, $pop85, $pop86 + f64.mul $push88=, $0, $pop87 + f64.const $push89=, 0x1.5a123fb933389p-27 + f64.add $push90=, $pop88, $pop89 + f64.mul $push91=, $0, $pop90 + f64.const $push92=, 0x1.8a7745646bc3p-20 + f64.add $push93=, $pop91, $pop92 + f64.mul $push94=, $0, $pop93 + f64.const $push95=, 0x1.54deff7f5199dp-13 + f64.add $push96=, $pop94, $pop95 + f64.mul $push97=, $0, $pop96 + f64.const $push98=, 0x1.b60ae9680e065p-7 + f64.add $push99=, $pop97, $pop98 + f64.mul $push100=, $pop1465, $pop99 + f64.const $push101=, 0x1.4378ab0c88a48p-1 + f64.add $push1285=, $pop100, $pop101 + return $pop1285 +.LBB0_62: # %sw.bb897 + end_block # label4: + f64.add $push62=, $0, $0 + f64.const $push63=, -0x1.6ap7 + f64.add $push1468=, $pop62, $pop63 + tee_local $push1467=, $0=, $pop1468 + f64.const $push64=, 0x1.b9b68a8a3cd86p-43 + f64.mul $push65=, $0, $pop64 + f64.const $push66=, 0x1.dc38712134803p-35 + f64.add $push67=, $pop65, $pop66 + f64.mul $push68=, $0, $pop67 + f64.const $push69=, 0x1.6c3f61d32b28ep-27 + f64.add $push70=, $pop68, $pop69 + f64.mul $push71=, $0, $pop70 + f64.const $push72=, 0x1.a0a37ff5a4498p-20 + f64.add $push73=, $pop71, $pop72 + f64.mul $push74=, $0, $pop73 + f64.const $push75=, 0x1.67df0c6a718dep-13 + f64.add $push76=, $pop74, $pop75 + f64.mul $push77=, $0, $pop76 + f64.const $push78=, 0x1.cbee807bbb624p-7 + f64.add $push79=, $pop77, $pop78 + f64.mul $push80=, $pop1467, $pop79 + f64.const $push81=, 0x1.51800a7c5ac47p-1 + f64.add $push1284=, $pop80, $pop81 + return $pop1284 +.LBB0_63: # %sw.bb912 + end_block # label3: + f64.add $push42=, $0, $0 + f64.const $push43=, -0x1.6ep7 + f64.add $push1470=, $pop42, $pop43 + tee_local $push1469=, $0=, $pop1470 + f64.const $push44=, 0x1.c710f4142f5dp-43 + f64.mul $push45=, $0, $pop44 + f64.const $push46=, 0x1.f13e3e53e4f7ep-35 + f64.add $push47=, $pop45, $pop46 + f64.mul $push48=, $0, $pop47 + f64.const $push49=, 0x1.7f486aebf1d72p-27 + f64.add $push50=, $pop48, $pop49 + f64.mul $push51=, $0, $pop50 + f64.const $push52=, 0x1.b804f75d2f8b2p-20 + f64.add $push53=, $pop51, $pop52 + f64.mul $push54=, $0, $pop53 + f64.const $push55=, 0x1.7bf0e733556cfp-13 + f64.add $push56=, $pop54, $pop55 + f64.mul $push57=, $0, $pop56 + f64.const $push58=, 0x1.e308787485e3ep-7 + f64.add $push59=, $pop57, $pop58 + f64.mul $push60=, $pop1469, $pop59 + f64.const $push61=, 0x1.603afb7e90ff9p-1 + f64.add $push1283=, $pop60, $pop61 + return $pop1283 +.LBB0_64: # %sw.bb927 + end_block # label2: + f64.add $push22=, $0, $0 + f64.const $push23=, -0x1.72p7 + f64.add $push1472=, $pop22, $pop23 + tee_local $push1471=, $0=, $pop1472 + f64.const $push24=, 0x1.d471215b73735p-43 + f64.mul $push25=, $0, $pop24 + f64.const $push26=, 0x1.0371f61e9bda6p-34 + f64.add $push27=, $pop25, $pop26 + f64.mul $push28=, $0, $pop27 + f64.const $push29=, 0x1.931bc36a06157p-27 + f64.add $push30=, $pop28, $pop29 + f64.mul $push31=, $0, $pop30 + f64.const $push32=, 0x1.d094cc631711fp-20 + f64.add $push33=, $pop31, $pop32 + f64.mul $push34=, $0, $pop33 + f64.const $push35=, 0x1.9124ab0526db6p-13 + f64.add $push36=, $pop34, $pop35 + f64.mul $push37=, $0, $pop36 + f64.const $push38=, 0x1.fb71fbc5de9cp-7 + f64.add $push39=, $pop37, $pop38 + f64.mul $push40=, $pop1471, $pop39 + f64.const $push41=, 0x1.6fb549f94855ep-1 + f64.add $push1282=, $pop40, $pop41 + return $pop1282 +.LBB0_65: # %sw.bb942 + end_block # label1: + f64.add $push2=, $0, $0 + f64.const $push3=, -0x1.76p7 + f64.add $push1474=, $pop2, $pop3 + tee_local $push1473=, $0=, $pop1474 + f64.const $push4=, 0x1.e1c5c72814664p-43 + f64.mul $push5=, $0, $pop4 + f64.const $push6=, 0x1.0e94bd6e965b5p-34 + f64.add $push7=, $pop5, $pop6 + f64.mul $push8=, $0, $pop7 + f64.const $push9=, 0x1.a7d3ceb3a9a89p-27 + f64.add $push10=, $pop8, $pop9 + f64.mul $push11=, $0, $pop10 + f64.const $push12=, 0x1.ea679caf3e3fbp-20 + f64.add $push13=, $pop11, $pop12 + f64.mul $push14=, $0, $pop13 + f64.const $push15=, 0x1.a78514a756f18p-13 + f64.add $push16=, $pop14, $pop15 + f64.mul $push17=, $0, $pop16 + f64.const $push18=, 0x1.0a99b6f5caf2dp-6 + f64.add $push19=, $pop17, $pop18 + f64.mul $push20=, $pop1473, $pop19 + f64.const $push21=, 0x1.7ff6d330941c8p-1 + f64.add $2=, $pop20, $pop21 +.LBB0_66: # %cleanup + end_block # label0: + copy_local $push1475=, $2 + # fallthrough-return: $pop1475 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local f64 +# BB#0: # %entry + block + f64.const $push0=, 0x1.399999999999ap6 + f64.call $push9=, foo@FUNCTION, $pop0 + tee_local $push8=, $0=, $pop9 + f64.const $push1=, 0x1.851eb851eb852p-2 + f64.lt $push2=, $pop8, $pop1 + br_if 0, $pop2 # 0: down to label65 +# BB#1: # %entry + f64.const $push3=, 0x1.ae147ae147ae1p-2 + f64.le $push4=, $0, $pop3 + f64.ne $push5=, $0, $0 + i32.or $push6=, $pop4, $pop5 + i32.eqz $push10=, $pop6 + br_if 0, $pop10 # 0: down to label65 +# BB#2: # %if.end + i32.const $push7=, 0 + return $pop7 +.LBB1_3: # %if.then + end_block # label65: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr58640-2.c.s b/src/binaryen/test/torture-s/pr58640-2.c.s new file mode 100644 index 0000000000..456e0f2651 --- /dev/null +++ b/src/binaryen/test/torture-s/pr58640-2.c.s @@ -0,0 +1,96 @@ + .text + .file "pr58640-2.c" + .section .text.fn1,"ax",@progbits + .hidden fn1 # -- Begin function fn1 + .globl fn1 + .type fn1,@function +fn1: # @fn1 + .result i32 + .local i32 +# BB#0: # %for.body3.split + i32.const $push1=, 0 + i64.const $push0=, 4294967297 + i64.store a($pop1), $pop0 + i32.const $push11=, 0 + i32.const $push2=, 1 + i32.store a+48($pop11), $pop2 + i32.const $push10=, 0 + i32.const $push9=, 1 + i32.store c($pop10), $pop9 + i32.const $push8=, 0 + i32.const $push7=, 0 + i32.load $push6=, a+60($pop7) + tee_local $push5=, $0=, $pop6 + i32.store a($pop8), $pop5 + i32.const $push4=, 0 + i32.store a+4($pop4), $0 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size fn1, .Lfunc_end0-fn1 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push0=, 1 + i32.store a+48($pop8), $pop0 + i32.const $push7=, 0 + i32.const $push6=, 1 + i32.store c($pop7), $pop6 + i32.const $push5=, 0 + i32.const $push4=, 0 + i32.load $push3=, a+60($pop4) + tee_local $push2=, $0=, $pop3 + i32.store a($pop5), $pop2 + i32.const $push1=, 0 + i32.store a+4($pop1), $0 + block + br_if 0, $0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push9=, 0 + return $pop9 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 4 +a: + .skip 80 + .size a, 80 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr58640.c.s b/src/binaryen/test/torture-s/pr58640.c.s new file mode 100644 index 0000000000..08b793e0c2 --- /dev/null +++ b/src/binaryen/test/torture-s/pr58640.c.s @@ -0,0 +1,115 @@ + .text + .file "pr58640.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call foo@FUNCTION + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.foo,"ax",@progbits + .type foo,@function # -- Begin function foo +foo: # @foo + .local i32, i32, i32 +# BB#0: # %entry + block + i32.const $push9=, 0 + i32.load $push8=, b($pop9) + tee_local $push7=, $2=, $pop8 + i32.const $push6=, 0 + i32.le_s $push0=, $pop7, $pop6 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %cleanup + return +.LBB1_2: # %for.body3.lr.ph + end_block # label0: + block + i32.const $push10=, 0 + i32.load $push1=, d($pop10) + i32.eqz $push16=, $pop1 + br_if 0, $pop16 # 0: down to label1 +# BB#3: # %if.then.split + i32.const $push3=, 0 + i32.const $push2=, 4 + i32.store c($pop3), $pop2 + i32.const $push11=, 0 + i32.const $push4=, 1 + i32.store e($pop11), $pop4 + return +.LBB1_4: # %for.body3.preheader + end_block # label1: +.LBB1_5: # %for.body3 + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push15=, 0 + i32.lt_s $1=, $2, $pop15 + i32.const $push14=, 1 + i32.add $push13=, $2, $pop14 + tee_local $push12=, $0=, $pop13 + copy_local $2=, $pop12 + br_if 0, $1 # 0: up to label2 +# BB#6: # %for.inc28 + end_loop + i32.const $push5=, 0 + i32.store b($pop5), $0 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .hidden d # @d + .type d,@object + .section .data.d,"aw",@progbits + .globl d + .p2align 2 +d: + .int32 1 # 0x1 + .size d, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e + .p2align 2 +e: + .int32 0 # 0x0 + .size e, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr58662.c.s b/src/binaryen/test/torture-s/pr58662.c.s new file mode 100644 index 0000000000..2793077909 --- /dev/null +++ b/src/binaryen/test/torture-s/pr58662.c.s @@ -0,0 +1,83 @@ + .text + .file "pr58662.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push18=, 0 + i32.const $push17=, 0 + i32.load $push0=, c($pop17) + i32.const $push16=, 0 + i32.ne $push1=, $pop0, $pop16 + i32.const $push15=, 0 + i32.load $push2=, a($pop15) + i32.eqz $push3=, $pop2 + i32.const $push4=, -30000 + i32.div_s $push14=, $pop3, $pop4 + tee_local $push13=, $0=, $pop14 + i32.const $push5=, 14 + i32.rem_s $push6=, $pop13, $pop5 + i32.const $push12=, 0 + i32.ne $push7=, $pop6, $pop12 + i32.and $push8=, $pop1, $pop7 + i32.store b($pop18), $pop8 + i32.const $push11=, 0 + i32.store d($pop11), $0 + block + i32.const $push10=, 0 + i32.load $push9=, b($pop10) + br_if 0, $pop9 # 0: down to label0 +# BB#1: # %if.end + i32.const $push19=, 0 + return $pop19 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .int32 0 # 0x0 + .size d, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr58726.c.s b/src/binaryen/test/torture-s/pr58726.c.s new file mode 100644 index 0000000000..098565213e --- /dev/null +++ b/src/binaryen/test/torture-s/pr58726.c.s @@ -0,0 +1,72 @@ + .text + .file "pr58726.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push2=, a($pop0) + i32.const $push8=, 0 + i32.lt_s $push1=, $0, $pop8 + i32.select $push3=, $0, $pop2, $pop1 + i32.const $push4=, 16 + i32.shl $push5=, $pop3, $pop4 + i32.const $push7=, 16 + i32.shr_s $push6=, $pop5, $pop7 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i32.const $push0=, -9162 + i32.store c($pop1), $pop0 + i32.const $push4=, 0 + i32.const $push2=, 56374 + i32.store b($pop4), $pop2 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .skip 4 + .size b, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr58831.c.s b/src/binaryen/test/torture-s/pr58831.c.s new file mode 100644 index 0000000000..d758fce0cf --- /dev/null +++ b/src/binaryen/test/torture-s/pr58831.c.s @@ -0,0 +1,177 @@ + .text + .file "pr58831.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call fn2@FUNCTION + i32.const $push1=, 0 + i32.const $push0=, r + i32.store i($pop1), $pop0 + i32.const $push4=, 0 + i32.load $push2=, b($pop4) + call fn1@FUNCTION, $pop2 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.fn2,"ax",@progbits + .type fn2,@function # -- Begin function fn2 +fn2: # @fn2 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 42 + i32.store f($pop1), $pop0 + i32.const $push3=, 0 + i32.const $push2=, 0 + i32.store16 o($pop3), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size fn2, .Lfunc_end1-fn2 + # -- End function + .section .text.fn1,"ax",@progbits + .type fn1,@function # -- Begin function fn1 +fn1: # @fn1 + .param i32 + .local i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load $push0=, p($pop3) + i32.eqz $push13=, $pop0 + br_if 0, $pop13 # 0: down to label0 +# BB#1: # %for.body.preheader +.LBB2_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push9=, 1 + i32.store 0($0), $pop9 + i32.const $push8=, 0 + i32.const $push7=, 0 + i32.load $push1=, p($pop7) + i32.const $push6=, 1 + i32.add $push5=, $pop1, $pop6 + tee_local $push4=, $1=, $pop5 + i32.store p($pop8), $pop4 + br_if 0, $1 # 0: up to label1 +.LBB2_3: # %for.end + end_loop + end_block # label0: + i32.const $push12=, 0 + i32.const $push2=, d + i32.store b($pop12), $pop2 + i32.const $push11=, 0 + i32.const $push10=, d + i32.store r($pop11), $pop10 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size fn1, .Lfunc_end2-fn1 + # -- End function + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 + .size i, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 + .size b, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .int32 0 # 0x0 + .size d, 4 + + .hidden f # @f + .type f,@object + .section .bss.f,"aw",@nobits + .globl f + .p2align 2 +f: + .int32 0 # 0x0 + .size f, 4 + + .hidden p # @p + .type p,@object + .section .bss.p,"aw",@nobits + .globl p + .p2align 2 +p: + .int32 0 # 0x0 + .size p, 4 + + .hidden q # @q + .type q,@object + .section .bss.q,"aw",@nobits + .globl q + .p2align 2 +q: + .int32 0 # 0x0 + .size q, 4 + + .hidden r # @r + .type r,@object + .section .bss.r,"aw",@nobits + .globl r + .p2align 2 +r: + .int32 0 + .size r, 4 + + .hidden o # @o + .type o,@object + .section .bss.o,"aw",@nobits + .globl o + .p2align 1 +o: + .int16 0 # 0x0 + .size o, 2 + + .hidden j # @j + .type j,@object + .section .bss.j,"aw",@nobits + .globl j + .p2align 1 +j: + .int16 0 # 0x0 + .size j, 2 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr58943.c.s b/src/binaryen/test/torture-s/pr58943.c.s new file mode 100644 index 0000000000..35d84248e2 --- /dev/null +++ b/src/binaryen/test/torture-s/pr58943.c.s @@ -0,0 +1,63 @@ + .text + .file "pr58943.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load $push1=, x($pop5) + i32.const $push2=, 128 + i32.or $push3=, $pop1, $pop2 + i32.store x($pop0), $pop3 + i32.const $push4=, 1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push6=, 0 + i32.load $push0=, x($pop6) + i32.const $push1=, 129 + i32.or $push5=, $pop0, $pop1 + tee_local $push4=, $0=, $pop5 + i32.store x($pop7), $pop4 + block + i32.const $push2=, 131 + i32.ne $push3=, $0, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push8=, 0 + return $pop8 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 2 +x: + .int32 2 # 0x2 + .size x, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr58984.c.s b/src/binaryen/test/torture-s/pr58984.c.s new file mode 100644 index 0000000000..9b77fd680f --- /dev/null +++ b/src/binaryen/test/torture-s/pr58984.c.s @@ -0,0 +1,123 @@ + .text + .file "pr58984.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push13=, 0 + i32.load $push0=, e($pop13) + i32.const $push12=, 1 + i32.gt_s $push1=, $pop0, $pop12 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %for.body.i + i32.const $push17=, 0 + i32.load $push16=, c($pop17) + tee_local $push15=, $0=, $pop16 + i32.load $push2=, 0($0) + i32.const $push14=, 1 + i32.xor $push3=, $pop2, $pop14 + i32.store 0($pop15), $pop3 +.LBB0_2: # %foo.exit + end_block # label0: + i32.const $push21=, 0 + i32.const $push20=, 1 + i32.store m($pop21), $pop20 + block + i32.const $push19=, 0 + i32.load $push4=, a($pop19) + i32.const $push18=, 1 + i32.ne $push5=, $pop4, $pop18 + br_if 0, $pop5 # 0: down to label1 +# BB#3: # %bar.exit + i32.const $push30=, 0 + i32.const $push29=, 0 + i32.store e($pop30), $pop29 + i32.const $push28=, 0 + i32.load $push27=, c($pop28) + tee_local $push26=, $0=, $pop27 + i32.load $push6=, 0($0) + i32.const $push7=, 1 + i32.xor $push8=, $pop6, $pop7 + i32.store 0($pop26), $pop8 + i32.const $push25=, 0 + i32.const $push24=, 0 + i32.load $push9=, m($pop24) + i32.const $push23=, 1 + i32.or $push10=, $pop9, $pop23 + i32.store m($pop25), $pop10 + i32.const $push22=, 0 + i32.load $push11=, a($pop22) + br_if 0, $pop11 # 0: down to label1 +# BB#4: # %if.end11 + i32.const $push31=, 0 + return $pop31 +.LBB0_5: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + .hidden c # @c + .type c,@object + .section .data.c,"aw",@progbits + .globl c + .p2align 2 +c: + .int32 a + .size c, 4 + + .hidden n # @n + .type n,@object + .section .bss.n,"aw",@nobits + .globl n + .p2align 2 +n: + .int32 0 # 0x0 + .size n, 4 + + .hidden m # @m + .type m,@object + .section .bss.m,"aw",@nobits + .globl m + .p2align 2 +m: + .int32 0 # 0x0 + .size m, 4 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e + .p2align 2 +e: + .int32 0 # 0x0 + .size e, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr59014-2.c.s b/src/binaryen/test/torture-s/pr59014-2.c.s new file mode 100644 index 0000000000..79767665a7 --- /dev/null +++ b/src/binaryen/test/torture-s/pr59014-2.c.s @@ -0,0 +1,48 @@ + .text + .file "pr59014-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i64, i64 + .result i64 +# BB#0: # %entry + i64.const $push3=, 6 + i64.add $push0=, $1, $0 + i64.or $push1=, $1, $0 + i32.wrap/i64 $push2=, $pop1 + i64.select $push4=, $pop3, $pop0, $pop2 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i64.const $push1=, 12884901888 + i64.const $push0=, 21474836480 + i64.call $push2=, foo@FUNCTION, $pop1, $pop0 + i64.const $push3=, 34359738368 + i64.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + i32.const $push5=, 0 + return $pop5 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr59014.c.s b/src/binaryen/test/torture-s/pr59014.c.s new file mode 100644 index 0000000000..d44ce0c268 --- /dev/null +++ b/src/binaryen/test/torture-s/pr59014.c.s @@ -0,0 +1,122 @@ + .text + .file "pr59014.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push9=, 0 + i32.load $push8=, a($pop9) + tee_local $push7=, $0=, $pop8 + i32.const $push2=, 1 + i32.and $push3=, $pop7, $pop2 + i32.const $push6=, 0 + i32.load $push0=, b($pop6) + i32.const $push5=, 0 + i32.gt_s $push1=, $pop0, $pop5 + i32.or $push4=, $pop3, $pop1 + i32.eqz $push12=, $pop4 + br_if 0, $pop12 # 0: down to label0 +.LBB0_1: # %for.inc + # =>This Inner Loop Header: Depth=1 + loop # label1: + br 0 # 0: up to label1 +.LBB0_2: # %if.else + end_loop + end_block # label0: + i32.const $push11=, 0 + i32.store d($pop11), $0 + i32.const $push10=, 0 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push12=, 0 + i32.load $push11=, a($pop12) + tee_local $push10=, $0=, $pop11 + i32.const $push2=, 1 + i32.and $push3=, $pop10, $pop2 + i32.const $push9=, 0 + i32.load $push0=, b($pop9) + i32.const $push8=, 0 + i32.gt_s $push1=, $pop0, $pop8 + i32.or $push4=, $pop3, $pop1 + i32.eqz $push14=, $pop4 + br_if 0, $pop14 # 0: down to label2 +.LBB1_1: # %for.inc.i + # =>This Inner Loop Header: Depth=1 + loop # label3: + br 0 # 0: up to label3 +.LBB1_2: # %foo.exit + end_loop + end_block # label2: + i32.const $push13=, 0 + i32.store d($pop13), $0 + block + i32.const $push5=, 2 + i32.ne $push6=, $0, $pop5 + br_if 0, $pop6 # 0: down to label4 +# BB#3: # %if.end + i32.const $push7=, 0 + return $pop7 +.LBB1_4: # %if.then + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 2 # 0x2 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .int32 0 # 0x0 + .size d, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr59101.c.s b/src/binaryen/test/torture-s/pr59101.c.s new file mode 100644 index 0000000000..0ce20014a6 --- /dev/null +++ b/src/binaryen/test/torture-s/pr59101.c.s @@ -0,0 +1,48 @@ + .text + .file "pr59101.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -192176872 + i32.and $push1=, $0, $pop0 + i32.const $push5=, -192176872 + i32.ne $push2=, $pop1, $pop5 + i32.const $push3=, 6 + i32.or $push4=, $pop2, $pop3 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.call $push0=, foo@FUNCTION, $pop3 + i32.const $push1=, 7 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr59221.c.s b/src/binaryen/test/torture-s/pr59221.c.s new file mode 100644 index 0000000000..3c87ff0282 --- /dev/null +++ b/src/binaryen/test/torture-s/pr59221.c.s @@ -0,0 +1,91 @@ + .text + .file "pr59221.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push10=, 0 + i32.load $push0=, b($pop10) + i32.eqz $push21=, $pop0 + br_if 0, $pop21 # 0: down to label0 +# BB#1: # %for.inc.lr.ph + i32.const $push12=, 0 + i32.const $push11=, 0 + i32.store b($pop12), $pop11 +.LBB0_2: # %for.end + end_block # label0: + i32.const $push20=, 0 + i32.const $push19=, 0 + i32.load $push18=, a($pop19) + tee_local $push17=, $0=, $pop18 + i32.const $push3=, 16 + i32.shl $push4=, $pop17, $pop3 + i32.const $push16=, 16 + i32.shr_s $push5=, $pop4, $pop16 + i32.const $push6=, -32768 + i32.const $push1=, 65535 + i32.and $push2=, $0, $pop1 + i32.select $push15=, $pop5, $pop6, $pop2 + tee_local $push14=, $0=, $pop15 + i32.store16 e($pop20), $pop14 + i32.const $push13=, 0 + i32.store d($pop13), $0 + block + i32.const $push7=, 1 + i32.ne $push8=, $0, $pop7 + br_if 0, $pop8 # 0: down to label1 +# BB#3: # %if.end + i32.const $push9=, 0 + return $pop9 +.LBB0_4: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 2 +a: + .int32 1 # 0x1 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e + .p2align 1 +e: + .int16 0 # 0x0 + .size e, 2 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .int32 0 # 0x0 + .size d, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr59229.c.s b/src/binaryen/test/torture-s/pr59229.c.s new file mode 100644 index 0000000000..fbcb78dce8 --- /dev/null +++ b/src/binaryen/test/torture-s/pr59229.c.s @@ -0,0 +1,146 @@ + .text + .file "pr59229.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .local i32 +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.load $push17=, i($pop0) + tee_local $push16=, $1=, $pop17 + i32.const $push1=, -1 + i32.add $push2=, $pop16, $pop1 + i32.const $push3=, 6 + i32.ge_u $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + i32.const $push7=, .L.str + i32.const $push5=, 1 + i32.add $push6=, $1, $pop5 + i32.call $push8=, memcmp@FUNCTION, $0, $pop7, $pop6 + br_if 0, $pop8 # 0: down to label0 +# BB#2: # %if.end4 + i32.const $push9=, 538976288 + i32.store 0($0):p2align=0, $pop9 + i32.const $push10=, 6 + i32.add $push11=, $0, $pop10 + i32.const $push12=, 32 + i32.store8 0($pop11), $pop12 + i32.const $push13=, 4 + i32.add $push14=, $0, $pop13 + i32.const $push15=, 8224 + i32.store16 0($pop14):p2align=0, $pop15 + return +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 16 + i32.sub $push18=, $pop6, $pop8 + tee_local $push17=, $2=, $pop18 + i32.store __stack_pointer($pop9), $pop17 + block + i32.const $push0=, -1 + i32.add $push1=, $1, $pop0 + i32.const $push2=, 5 + i32.gt_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %if.end + i32.const $push13=, 9 + i32.add $push14=, $2, $pop13 + i32.const $push4=, 1 + i32.add $push5=, $1, $pop4 + i32.call $drop=, memcpy@FUNCTION, $pop14, $0, $pop5 + i32.const $push15=, 9 + i32.add $push16=, $2, $pop15 + call bar@FUNCTION, $pop16 +.LBB1_2: # %return + end_block # label1: + i32.const $push12=, 0 + i32.const $push10=, 16 + i32.add $push11=, $2, $pop10 + i32.store __stack_pointer($pop12), $pop11 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push3=, 0 + i32.const $push2=, 0 + i32.store i($pop3), $pop2 + i32.const $1=, 0 +.LBB2_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push12=, .L.str.1 + call foo@FUNCTION, $pop12, $1 + i32.const $push11=, 0 + i32.const $push10=, 0 + i32.load $push9=, i($pop10) + tee_local $push8=, $0=, $pop9 + i32.const $push7=, 1 + i32.add $push6=, $pop8, $pop7 + tee_local $push5=, $1=, $pop6 + i32.store i($pop11), $pop5 + i32.const $push4=, 15 + i32.lt_s $push0=, $0, $pop4 + br_if 0, $pop0 # 0: up to label2 +# BB#2: # %for.end + end_loop + i32.const $push1=, 0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "abcdefg" + .size .L.str, 8 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "abcdefghijklmnop" + .size .L.str.1, 17 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype memcmp, i32, i32, i32, i32 diff --git a/src/binaryen/test/torture-s/pr59358.c.s b/src/binaryen/test/torture-s/pr59358.c.s new file mode 100644 index 0000000000..8bf0c5a916 --- /dev/null +++ b/src/binaryen/test/torture-s/pr59358.c.s @@ -0,0 +1,185 @@ + .text + .file "pr59358.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.load $0=, 0($0) + block + block + i32.const $push0=, 16 + i32.gt_s $push1=, $1, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %entry + i32.ge_s $push2=, $0, $1 + br_if 1, $pop2 # 1: down to label0 +# BB#2: # %while.cond.preheader +.LBB0_3: # %while.cond + # =>This Inner Loop Header: Depth=1 + loop # label2: + copy_local $push8=, $0 + tee_local $push7=, $2=, $pop8 + i32.const $push6=, 1 + i32.shl $0=, $pop7, $pop6 + i32.lt_s $push3=, $2, $1 + br_if 0, $pop3 # 0: up to label2 +# BB#4: # %if.end + end_loop + return $2 +.LBB0_5: + end_block # label1: + copy_local $push5=, $0 + return $pop5 +.LBB0_6: + end_block # label0: + copy_local $push4=, $0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push20=, 0 + i32.const $push18=, 0 + i32.load $push17=, __stack_pointer($pop18) + i32.const $push19=, 16 + i32.sub $push30=, $pop17, $pop19 + tee_local $push29=, $6=, $pop30 + i32.store __stack_pointer($pop20), $pop29 + i32.const $push28=, 1 + i32.store 12($6), $pop28 + i32.const $1=, 0 + i32.const $0=, 2 + i32.const $2=, 1 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label4: + i32.const $push24=, 12 + i32.add $push25=, $6, $pop24 + i32.const $push36=, 16 + i32.call $3=, foo@FUNCTION, $pop25, $pop36 + copy_local $4=, $0 + block + block + i32.const $push35=, 1 + i32.add $push34=, $1, $pop35 + tee_local $push33=, $5=, $pop34 + i32.const $push32=, -8 + i32.and $push1=, $pop33, $pop32 + i32.const $push31=, 8 + i32.eq $push2=, $pop1, $pop31 + br_if 0, $pop2 # 0: down to label6 +# BB#2: # %if.else + # in Loop: Header=BB1_1 Depth=1 + block + i32.const $push38=, -4 + i32.and $push3=, $5, $pop38 + i32.const $push37=, 4 + i32.ne $push4=, $pop3, $pop37 + br_if 0, $pop4 # 0: down to label7 +# BB#3: # %if.then6 + # in Loop: Header=BB1_1 Depth=1 + i32.const $push39=, 2 + i32.shl $push15=, $2, $pop39 + i32.eq $push6=, $3, $pop15 + br_if 2, $pop6 # 2: down to label5 + br 4 # 4: down to label3 +.LBB1_4: # %if.else10 + # in Loop: Header=BB1_1 Depth=1 + end_block # label7: + i32.const $push42=, 24 + i32.const $push41=, 16 + i32.const $push40=, 2 + i32.eq $push5=, $1, $pop40 + i32.select $4=, $pop42, $pop41, $pop5 +.LBB1_5: # %if.end15 + # in Loop: Header=BB1_1 Depth=1 + end_block # label6: + i32.ne $push7=, $3, $4 + br_if 2, $pop7 # 2: down to label3 +.LBB1_6: # %if.end18 + # in Loop: Header=BB1_1 Depth=1 + end_block # label5: + i32.const $push26=, 12 + i32.add $push27=, $6, $pop26 + i32.const $push44=, 7 + i32.call $3=, foo@FUNCTION, $pop27, $pop44 + block + block + i32.const $push43=, 6 + i32.gt_u $push8=, $5, $pop43 + br_if 0, $pop8 # 0: down to label9 +# BB#7: # %if.else22 + # in Loop: Header=BB1_1 Depth=1 + block + i32.const $push45=, 4 + i32.lt_u $push9=, $5, $pop45 + br_if 0, $pop9 # 0: down to label10 +# BB#8: # %if.then24 + # in Loop: Header=BB1_1 Depth=1 + i32.const $push46=, 1 + i32.shl $push16=, $2, $pop46 + i32.eq $push11=, $3, $pop16 + br_if 2, $pop11 # 2: down to label8 + br 4 # 4: down to label3 +.LBB1_9: # %if.else28 + # in Loop: Header=BB1_1 Depth=1 + end_block # label10: + i32.const $push49=, 12 + i32.const $push48=, 8 + i32.const $push47=, 2 + i32.eq $push10=, $1, $pop47 + i32.select $5=, $pop49, $pop48, $pop10 +.LBB1_10: # %if.end34 + # in Loop: Header=BB1_1 Depth=1 + end_block # label9: + i32.ne $push12=, $3, $5 + br_if 2, $pop12 # 2: down to label3 +.LBB1_11: # %for.cond + # in Loop: Header=BB1_1 Depth=1 + end_block # label8: + i32.const $push56=, 1 + i32.add $2=, $2, $pop56 + i32.const $push55=, 2 + i32.add $push0=, $1, $pop55 + i32.store 12($6), $pop0 + i32.const $push54=, 2 + i32.add $0=, $0, $pop54 + i32.const $push53=, 1 + i32.add $push52=, $1, $pop53 + tee_local $push51=, $1=, $pop52 + i32.const $push50=, 15 + i32.le_u $push13=, $pop51, $pop50 + br_if 0, $pop13 # 0: up to label4 +# BB#12: # %for.end + end_loop + i32.const $push23=, 0 + i32.const $push21=, 16 + i32.add $push22=, $6, $pop21 + i32.store __stack_pointer($pop23), $pop22 + i32.const $push14=, 0 + return $pop14 +.LBB1_13: # %if.then17 + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr59387.c.s b/src/binaryen/test/torture-s/pr59387.c.s new file mode 100644 index 0000000000..29e16dd92a --- /dev/null +++ b/src/binaryen/test/torture-s/pr59387.c.s @@ -0,0 +1,107 @@ + .text + .file "pr59387.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $1=, -19 + i32.const $push6=, 0 + i32.const $push5=, -19 + i32.store a($pop6), $pop5 + i32.const $push4=, 0 + i32.load8_u $0=, c($pop4) +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label1: + i32.const $push10=, 0 + i32.load $push0=, e($pop10) + i32.const $push9=, f + i32.store 0($pop0), $pop9 + i32.const $push8=, -24 + i32.add $0=, $0, $pop8 + i32.const $push7=, 0 + i32.load $push1=, d($pop7) + i32.eqz $push17=, $pop1 + br_if 1, $pop17 # 1: down to label0 +# BB#2: # %for.cond + # in Loop: Header=BB0_1 Depth=1 + i32.const $push14=, 0 + i32.const $push13=, 1 + i32.add $push12=, $1, $pop13 + tee_local $push11=, $1=, $pop12 + i32.store a($pop14), $pop11 + br_if 0, $1 # 0: up to label1 +.LBB0_3: # %return + end_loop + end_block # label0: + i32.const $push3=, 0 + i32.const $push2=, 24 + i32.store b($pop3), $pop2 + i32.const $push16=, 0 + i32.store8 c($pop16), $0 + i32.const $push15=, 0 + # fallthrough-return: $pop15 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .int32 0 + .size d, 4 + + .hidden e # @e + .type e,@object + .section .data.e,"aw",@progbits + .globl e + .p2align 2 +e: + .int32 d + .size e, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .skip 4 + .size b, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c +c: + .int8 0 # 0x0 + .size c, 1 + + .hidden f # @f + .type f,@object + .section .bss.f,"aw",@nobits + .globl f + .p2align 2 +f: + .int32 0 # 0x0 + .size f, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr59388.c.s b/src/binaryen/test/torture-s/pr59388.c.s new file mode 100644 index 0000000000..77b1c4094d --- /dev/null +++ b/src/binaryen/test/torture-s/pr59388.c.s @@ -0,0 +1,43 @@ + .text + .file "pr59388.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push5=, 0 + i32.load8_u $push1=, b($pop5) + i32.const $push2=, 1 + i32.and $push4=, $pop1, $pop2 + tee_local $push3=, $0=, $pop4 + i32.store a($pop0), $pop3 + copy_local $push6=, $0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .skip 4 + .size b, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr59413.c.s b/src/binaryen/test/torture-s/pr59413.c.s new file mode 100644 index 0000000000..812d507843 --- /dev/null +++ b/src/binaryen/test/torture-s/pr59413.c.s @@ -0,0 +1,38 @@ + .text + .file "pr59413.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 7 + i32.store a($pop1), $pop0 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr59643.c.s b/src/binaryen/test/torture-s/pr59643.c.s new file mode 100644 index 0000000000..67e31ae172 --- /dev/null +++ b/src/binaryen/test/torture-s/pr59643.c.s @@ -0,0 +1,207 @@ + .text + .file "pr59643.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32, f64, f64, i32 + .local i32, i32, f64, f64 +# BB#0: # %entry + block + i32.const $push0=, 3 + i32.lt_s $push1=, $5, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %for.body.lr.ph + i32.const $push2=, 16 + i32.add $6=, $0, $pop2 + i32.const $push3=, -2 + i32.add $7=, $5, $pop3 + i32.const $push13=, 8 + i32.add $5=, $2, $pop13 + i32.const $push12=, 8 + i32.add $1=, $1, $pop12 + f64.load $8=, 8($0) + f64.load $9=, 0($0) +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push24=, -8 + i32.add $push11=, $6, $pop24 + f64.mul $push4=, $8, $4 + f64.load $push6=, 0($1) + f64.load $push5=, 0($5) + f64.add $push7=, $pop6, $pop5 + f64.add $push8=, $pop7, $9 + f64.load $push23=, 0($6) + tee_local $push22=, $8=, $pop23 + f64.add $push9=, $pop8, $pop22 + f64.mul $push10=, $pop9, $3 + f64.add $push21=, $pop4, $pop10 + tee_local $push20=, $9=, $pop21 + f64.store 0($pop11), $pop20 + i32.const $push19=, 8 + i32.add $6=, $6, $pop19 + i32.const $push18=, 8 + i32.add $5=, $5, $pop18 + i32.const $push17=, 8 + i32.add $1=, $1, $pop17 + i32.const $push16=, -1 + i32.add $push15=, $7, $pop16 + tee_local $push14=, $7=, $pop15 + br_if 0, $pop14 # 0: up to label1 +.LBB0_3: # %for.end + end_loop + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, f64, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push19=, 0 + i32.const $push17=, 0 + i32.load $push16=, __stack_pointer($pop17) + i32.const $push18=, 768 + i32.sub $push34=, $pop16, $pop18 + tee_local $push33=, $6=, $pop34 + i32.store __stack_pointer($pop19), $pop33 + i32.const $5=, 0 + i32.const $push23=, 512 + i32.add $push24=, $6, $pop23 + copy_local $4=, $pop24 + i32.const $push25=, 256 + i32.add $push26=, $6, $pop25 + copy_local $3=, $pop26 + copy_local $2=, $6 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label2: + i32.const $push48=, 7 + i32.and $push47=, $5, $pop48 + tee_local $push46=, $0=, $pop47 + f64.convert_s/i32 $push0=, $pop46 + f64.store 0($2), $pop0 + i32.const $push45=, -4 + i32.add $push1=, $0, $pop45 + f64.convert_s/i32 $push2=, $pop1 + f64.store 0($3), $pop2 + i32.const $push44=, 3 + i32.and $push3=, $5, $pop44 + f64.convert_s/i32 $push43=, $pop3 + tee_local $push42=, $1=, $pop43 + f64.add $push4=, $pop42, $1 + f64.store 0($4), $pop4 + i32.const $push41=, 8 + i32.add $2=, $2, $pop41 + i32.const $push40=, 8 + i32.add $3=, $3, $pop40 + i32.const $push39=, 8 + i32.add $4=, $4, $pop39 + i32.const $push38=, 1 + i32.add $push37=, $5, $pop38 + tee_local $push36=, $5=, $pop37 + i32.const $push35=, 32 + i32.ne $push5=, $pop36, $pop35 + br_if 0, $pop5 # 0: up to label2 +# BB#2: # %for.end + end_loop + i32.const $push27=, 512 + i32.add $push28=, $6, $pop27 + i32.const $push29=, 256 + i32.add $push30=, $6, $pop29 + f64.const $push8=, 0x1p1 + f64.const $push7=, 0x1.8p1 + i32.const $push6=, 32 + call foo@FUNCTION, $pop28, $pop30, $6, $pop8, $pop7, $pop6 + i32.const $4=, -1 + i32.const $5=, 0 +.LBB1_3: # %for.body12 + # =>This Inner Loop Header: Depth=1 + block + loop # label4: + i32.const $push31=, 512 + i32.add $push32=, $6, $pop31 + i32.add $push11=, $pop32, $5 + f64.load $push12=, 0($pop11) + i32.const $push49=, expected + i32.add $push9=, $5, $pop49 + f64.load $push10=, 0($pop9) + f64.ne $push13=, $pop12, $pop10 + br_if 1, $pop13 # 1: down to label3 +# BB#4: # %for.cond9 + # in Loop: Header=BB1_3 Depth=1 + i32.const $push54=, 8 + i32.add $5=, $5, $pop54 + i32.const $push53=, 1 + i32.add $push52=, $4, $pop53 + tee_local $push51=, $4=, $pop52 + i32.const $push50=, 30 + i32.le_u $push14=, $pop51, $pop50 + br_if 0, $pop14 # 0: up to label4 +# BB#5: # %for.end19 + end_loop + i32.const $push22=, 0 + i32.const $push20=, 768 + i32.add $push21=, $6, $pop20 + i32.store __stack_pointer($pop22), $pop21 + i32.const $push15=, 0 + return $pop15 +.LBB1_6: # %if.then + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden expected # @expected + .type expected,@object + .section .data.expected,"aw",@progbits + .globl expected + .p2align 4 +expected: + .int64 0 # double 0 + .int64 4621819117588971520 # double 10 + .int64 4631389266797133824 # double 44 + .int64 4637440978796412928 # double 110 + .int64 4642366790888849408 # double 232 + .int64 4647327787353374720 # double 490 + .int64 4652183230701633536 # double 1020 + .int64 4656787985398759424 # double 2078 + .int64 4661287186979618816 # double 4152 + .int64 4665796284165128192 # double 8314 + .int64 4670306480862265344 # double 16652 + .int64 4674813104146612224 # double 33326 + .int64 4679317528407703552 # double 66664 + .int64 4683822021388271616 # double 133354 + .int64 4688326308210409472 # double 266748 + .int64 4692830234255294464 # double 533534 + .int64 4697333816702795776 # double 1067064 + .int64 4701837437805002752 # double 2134138 + .int64 4706341063202177024 # double 4268300 + .int64 4710844674640707584 # double 8536622 + .int64 4715348277489303552 # double 17073256 + .int64 4719851880606334976 # double 34146538 + .int64 4724355482918060032 # double 68293116 + .int64 4728859083820498944 # double 136586270 + .int64 4733362683380760576 # double 273172536 + .int64 4737866283092017152 # double 546345082 + .int64 4742369882820050944 # double 1092690188 + .int64 4746873482493558784 # double 2185380398 + .int64 4751377082133512192 # double 4370760808 + .int64 4755880681774514176 # double 8741521642 + .int64 4760384281412370432 # double 17483043324 + .int64 4618441417868443648 # double 6 + .size expected, 256 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr59747.c.s b/src/binaryen/test/torture-s/pr59747.c.s new file mode 100644 index 0000000000..4d6894d194 --- /dev/null +++ b/src/binaryen/test/torture-s/pr59747.c.s @@ -0,0 +1,113 @@ + .text + .file "pr59747.c" + .section .text.fn1,"ax",@progbits + .hidden fn1 # -- Begin function fn1 + .globl fn1 + .type fn1,@function +fn1: # @fn1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 2 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, a + i32.add $push3=, $pop1, $pop2 + i32.load $push4=, 0($pop3) + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end0: + .size fn1, .Lfunc_end0-fn1 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push16=, 0 + i32.const $push0=, 1 + i32.store a($pop16), $pop0 + i32.const $push15=, 0 + i32.load16_u $0=, e($pop15) + block + i32.const $push14=, 0 + i32.load $push1=, c($pop14) + i32.eqz $push22=, $pop1 + br_if 0, $pop22 # 0: down to label0 +# BB#1: # %if.then + i32.const $push19=, 0 + i32.const $push2=, -1 + i32.add $push18=, $0, $pop2 + tee_local $push17=, $0=, $pop18 + i32.store16 e($pop19), $pop17 +.LBB1_2: # %if.end + end_block # label0: + i32.const $push21=, 0 + i32.const $push3=, 16 + i32.shl $push4=, $0, $pop3 + i32.const $push20=, 16 + i32.shr_s $push5=, $pop4, $pop20 + i32.store d($pop21), $pop5 + block + i64.extend_u/i32 $push6=, $0 + i64.const $push7=, 48 + i64.shl $push8=, $pop6, $pop7 + i64.const $push9=, 63 + i64.shr_u $push10=, $pop8, $pop9 + i32.wrap/i64 $push11=, $pop10 + i32.call $push12=, fn1@FUNCTION, $pop11 + br_if 0, $pop12 # 0: down to label1 +# BB#3: # %if.end5 + i32.const $push13=, 0 + call exit@FUNCTION, $pop13 + unreachable +.LBB1_4: # %if.then4 + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden c # @c + .type c,@object + .section .data.c,"aw",@progbits + .globl c + .p2align 2 +c: + .int32 1 # 0x1 + .size c, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 4 +a: + .skip 24 + .size a, 24 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e + .p2align 1 +e: + .int16 0 # 0x0 + .size e, 2 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 2 +d: + .int32 0 # 0x0 + .size d, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pr60017.c.s b/src/binaryen/test/torture-s/pr60017.c.s new file mode 100644 index 0000000000..8b55f0bd14 --- /dev/null +++ b/src/binaryen/test/torture-s/pr60017.c.s @@ -0,0 +1,66 @@ + .text + .file "pr60017.c" + .section .text.func,"ax",@progbits + .hidden func # -- Begin function func + .globl func + .type func,@function +func: # @func + .param i32 +# BB#0: # %entry + i32.const $push0=, 8 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 0 + i64.load $push3=, x+8($pop2):p2align=2 + i64.store 0($pop1):p2align=2, $pop3 + i32.const $push5=, 0 + i64.load $push4=, x($pop5):p2align=2 + i64.store 0($0):p2align=2, $pop4 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size func, .Lfunc_end0-func + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load16_u $push0=, x+12($pop3) + i32.const $push1=, 9 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 2 +x: + .int8 1 # 0x1 + .ascii "\002\003" + .ascii "\004\005" + .skip 1 + .int16 6 # 0x6 + .int16 7 # 0x7 + .int16 8 # 0x8 + .int16 9 # 0x9 + .skip 2 + .size x, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr60062.c.s b/src/binaryen/test/torture-s/pr60062.c.s new file mode 100644 index 0000000000..34ac83d65a --- /dev/null +++ b/src/binaryen/test/torture-s/pr60062.c.s @@ -0,0 +1,26 @@ + .text + .file "pr60062.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr60072.c.s b/src/binaryen/test/torture-s/pr60072.c.s new file mode 100644 index 0000000000..2ccfaa45e2 --- /dev/null +++ b/src/binaryen/test/torture-s/pr60072.c.s @@ -0,0 +1,29 @@ + .text + .file "pr60072.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 2 + i32.store c($pop1), $pop0 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden c # @c + .type c,@object + .section .data.c,"aw",@progbits + .globl c + .p2align 2 +c: + .int32 1 # 0x1 + .size c, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr60454.c.s b/src/binaryen/test/torture-s/pr60454.c.s new file mode 100644 index 0000000000..ef2ba828af --- /dev/null +++ b/src/binaryen/test/torture-s/pr60454.c.s @@ -0,0 +1,60 @@ + .text + .file "pr60454.c" + .section .text.fake_swap32,"ax",@progbits + .hidden fake_swap32 # -- Begin function fake_swap32 + .globl fake_swap32 + .type fake_swap32,@function +fake_swap32: # @fake_swap32 + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push2=, 65280 + i32.and $push16=, $0, $pop2 + tee_local $push15=, $1=, $pop16 + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.or $push3=, $pop15, $pop1 + i32.const $push14=, 24 + i32.shr_u $push4=, $0, $pop14 + i32.or $push5=, $pop3, $pop4 + i32.const $push6=, 8 + i32.shl $push7=, $1, $pop6 + i32.or $push8=, $pop5, $pop7 + i32.const $push13=, 8 + i32.shl $push9=, $0, $pop13 + i32.const $push12=, 65280 + i32.and $push10=, $pop9, $pop12 + i32.or $push11=, $pop8, $pop10 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end0: + .size fake_swap32, .Lfunc_end0-fake_swap32 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 305419896 + i32.call $push1=, fake_swap32@FUNCTION, $pop0 + i32.const $push2=, 2018934290 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr60960.c.s b/src/binaryen/test/torture-s/pr60960.c.s new file mode 100644 index 0000000000..7d0d87b8fa --- /dev/null +++ b/src/binaryen/test/torture-s/pr60960.c.s @@ -0,0 +1,193 @@ + .text + .file "pr60960.c" + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 3 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 254 + i32.and $push3=, $4, $pop2 + i32.const $push4=, 1 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 0($pop1), $pop5 + i32.const $push6=, 2 + i32.add $push7=, $0, $pop6 + i32.const $push21=, 254 + i32.and $push8=, $3, $pop21 + i32.const $push20=, 1 + i32.shr_u $push9=, $pop8, $pop20 + i32.store8 0($pop7), $pop9 + i32.const $push19=, 1 + i32.add $push10=, $0, $pop19 + i32.const $push18=, 254 + i32.and $push11=, $2, $pop18 + i32.const $push17=, 1 + i32.shr_u $push12=, $pop11, $pop17 + i32.store8 0($pop10), $pop12 + i32.const $push16=, 254 + i32.and $push13=, $1, $pop16 + i32.const $push15=, 1 + i32.shr_u $push14=, $pop13, $pop15 + i32.store8 0($0), $pop14 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f1, .Lfunc_end0-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 3 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 254 + i32.and $push3=, $4, $pop2 + i32.const $push4=, 1 + i32.shr_u $push5=, $pop3, $pop4 + i32.store8 0($pop1), $pop5 + i32.const $push6=, 2 + i32.add $push7=, $0, $pop6 + i32.const $push21=, 254 + i32.and $push8=, $3, $pop21 + i32.const $push20=, 1 + i32.shr_u $push9=, $pop8, $pop20 + i32.store8 0($pop7), $pop9 + i32.const $push19=, 1 + i32.add $push10=, $0, $pop19 + i32.const $push18=, 254 + i32.and $push11=, $2, $pop18 + i32.const $push17=, 1 + i32.shr_u $push12=, $pop11, $pop17 + i32.store8 0($pop10), $pop12 + i32.const $push16=, 254 + i32.and $push13=, $1, $pop16 + i32.const $push15=, 1 + i32.shr_u $push14=, $pop13, $pop15 + i32.store8 0($0), $pop14 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size f2, .Lfunc_end1-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push4=, 3 + i32.add $push5=, $0, $pop4 + i32.const $push0=, 255 + i32.and $push2=, $4, $pop0 + i32.const $push25=, 255 + i32.and $push1=, $8, $pop25 + i32.div_u $push3=, $pop2, $pop1 + i32.store8 0($pop5), $pop3 + i32.const $push9=, 2 + i32.add $push10=, $0, $pop9 + i32.const $push24=, 255 + i32.and $push7=, $3, $pop24 + i32.const $push23=, 255 + i32.and $push6=, $7, $pop23 + i32.div_u $push8=, $pop7, $pop6 + i32.store8 0($pop10), $pop8 + i32.const $push14=, 1 + i32.add $push15=, $0, $pop14 + i32.const $push22=, 255 + i32.and $push12=, $2, $pop22 + i32.const $push21=, 255 + i32.and $push11=, $6, $pop21 + i32.div_u $push13=, $pop12, $pop11 + i32.store8 0($pop15), $pop13 + i32.const $push20=, 255 + i32.and $push17=, $1, $pop20 + i32.const $push19=, 255 + i32.and $push16=, $5, $pop19 + i32.div_u $push18=, $pop17, $pop16 + i32.store8 0($0), $pop18 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size f3, .Lfunc_end2-f3 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push13=, 0 + i32.const $push11=, 0 + i32.load $push10=, __stack_pointer($pop11) + i32.const $push12=, 16 + i32.sub $push29=, $pop10, $pop12 + tee_local $push28=, $0=, $pop29 + i32.store __stack_pointer($pop13), $pop28 + i32.const $push17=, 12 + i32.add $push18=, $0, $pop17 + i32.const $push27=, 5 + i32.const $push26=, 5 + i32.const $push25=, 5 + i32.const $push24=, 5 + call f1@FUNCTION, $pop18, $pop27, $pop26, $pop25, $pop24 + block + i32.load $push0=, 12($0) + i32.const $push23=, 33686018 + i32.ne $push1=, $pop0, $pop23 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push19=, 8 + i32.add $push20=, $0, $pop19 + i32.const $push34=, 5 + i32.const $push33=, 5 + i32.const $push32=, 5 + i32.const $push31=, 5 + call f2@FUNCTION, $pop20, $pop34, $pop33, $pop32, $pop31 + i32.load $push2=, 8($0) + i32.const $push30=, 33686018 + i32.ne $push3=, $pop2, $pop30 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %if.end6 + i32.const $push21=, 4 + i32.add $push22=, $0, $pop21 + i32.const $push5=, 5 + i32.const $push40=, 5 + i32.const $push39=, 5 + i32.const $push38=, 5 + i32.const $push4=, 2 + i32.const $push37=, 2 + i32.const $push36=, 2 + i32.const $push35=, 2 + call f3@FUNCTION, $pop22, $pop5, $pop40, $pop39, $pop38, $pop4, $pop37, $pop36, $pop35 + i32.load $push7=, 4($0) + i32.const $push6=, 33686018 + i32.ne $push8=, $pop7, $pop6 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %if.end11 + i32.const $push16=, 0 + i32.const $push14=, 16 + i32.add $push15=, $0, $pop14 + i32.store __stack_pointer($pop16), $pop15 + i32.const $push9=, 0 + return $pop9 +.LBB3_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr61306-1.c.s b/src/binaryen/test/torture-s/pr61306-1.c.s new file mode 100644 index 0000000000..c1e01adb05 --- /dev/null +++ b/src/binaryen/test/torture-s/pr61306-1.c.s @@ -0,0 +1,57 @@ + .text + .file "pr61306-1.c" + .section .text.fake_bswap32,"ax",@progbits + .hidden fake_bswap32 # -- Begin function fake_bswap32 + .globl fake_bswap32 + .type fake_bswap32,@function +fake_bswap32: # @fake_bswap32 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 24 + i32.shr_s $push2=, $0, $pop0 + i32.const $push14=, 24 + i32.shl $push1=, $0, $pop14 + i32.or $push3=, $pop2, $pop1 + i32.const $push4=, 8 + i32.shl $push5=, $0, $pop4 + i32.const $push6=, 16711680 + i32.and $push7=, $pop5, $pop6 + i32.or $push8=, $pop3, $pop7 + i32.const $push13=, 8 + i32.shr_u $push9=, $0, $pop13 + i32.const $push10=, 65280 + i32.and $push11=, $pop9, $pop10 + i32.or $push12=, $pop8, $pop11 + # fallthrough-return: $pop12 + .endfunc +.Lfunc_end0: + .size fake_bswap32, .Lfunc_end0-fake_bswap32 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, -2023406815 + i32.call $push1=, fake_bswap32@FUNCTION, $pop0 + i32.const $push2=, -121 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr61306-2.c.s b/src/binaryen/test/torture-s/pr61306-2.c.s new file mode 100644 index 0000000000..38f468dec2 --- /dev/null +++ b/src/binaryen/test/torture-s/pr61306-2.c.s @@ -0,0 +1,59 @@ + .text + .file "pr61306-2.c" + .section .text.fake_bswap32,"ax",@progbits + .hidden fake_bswap32 # -- Begin function fake_bswap32 + .globl fake_bswap32 + .type fake_bswap32,@function +fake_bswap32: # @fake_bswap32 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 24 + i32.shr_u $push2=, $0, $pop0 + i32.const $push16=, 24 + i32.shl $push1=, $0, $pop16 + i32.or $push3=, $pop2, $pop1 + i32.const $push4=, 8 + i32.shr_u $push5=, $0, $pop4 + i32.const $push6=, 65280 + i32.and $push7=, $pop5, $pop6 + i32.or $push8=, $pop3, $pop7 + i32.const $push9=, 16 + i32.shl $push10=, $0, $pop9 + i32.const $push15=, 8 + i32.shr_s $push11=, $pop10, $pop15 + i32.const $push12=, -65536 + i32.and $push13=, $pop11, $pop12 + i32.or $push14=, $pop8, $pop13 + # fallthrough-return: $pop14 + .endfunc +.Lfunc_end0: + .size fake_bswap32, .Lfunc_end0-fake_bswap32 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, -2122153084 + i32.call $push1=, fake_bswap32@FUNCTION, $pop0 + i32.const $push2=, -8158591 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + return $pop4 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr61306-3.c.s b/src/binaryen/test/torture-s/pr61306-3.c.s new file mode 100644 index 0000000000..ca57db8a59 --- /dev/null +++ b/src/binaryen/test/torture-s/pr61306-3.c.s @@ -0,0 +1,67 @@ + .text + .file "pr61306-3.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push11=, 0 + i32.load16_s $push10=, a($pop11) + tee_local $push9=, $0=, $pop10 + i32.store8 c($pop12), $pop9 + i32.const $push8=, 0 + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.const $push7=, 24 + i32.shr_s $push2=, $pop1, $pop7 + i32.or $push6=, $0, $pop2 + tee_local $push5=, $0=, $pop6 + i32.store b($pop8), $pop5 + block + i32.const $push3=, -1 + i32.ne $push4=, $0, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + i32.const $push13=, 0 + return $pop13 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden a # @a + .type a,@object + .section .data.a,"aw",@progbits + .globl a + .p2align 1 +a: + .int16 65535 # 0xffff + .size a, 2 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c +c: + .int8 0 # 0x0 + .size c, 1 + + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr61375.c.s b/src/binaryen/test/torture-s/pr61375.c.s new file mode 100644 index 0000000000..c9bb9a0f38 --- /dev/null +++ b/src/binaryen/test/torture-s/pr61375.c.s @@ -0,0 +1,53 @@ + .text + .file "pr61375.c" + .section .text.uint128_central_bitsi_ior,"ax",@progbits + .hidden uint128_central_bitsi_ior # -- Begin function uint128_central_bitsi_ior + .globl uint128_central_bitsi_ior + .type uint128_central_bitsi_ior,@function +uint128_central_bitsi_ior: # @uint128_central_bitsi_ior + .param i64, i64, i64 + .result i64 +# BB#0: # %entry + i64.const $push2=, 56 + i64.shr_u $push3=, $0, $pop2 + i64.const $push0=, 8 + i64.shl $push1=, $1, $pop0 + i64.or $push4=, $pop3, $pop1 + i64.const $push5=, 65535 + i64.and $push6=, $pop4, $pop5 + i64.or $push7=, $pop6, $2 + # fallthrough-return: $pop7 + .endfunc +.Lfunc_end0: + .size uint128_central_bitsi_ior, .Lfunc_end0-uint128_central_bitsi_ior + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32 + .result i32 +# BB#0: # %entry + block + i64.const $push2=, 0 + i64.const $push1=, 1 + i64.const $push0=, 2 + i64.call $push3=, uint128_central_bitsi_ior@FUNCTION, $pop2, $pop1, $pop0 + i64.const $push4=, 258 + i64.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 0 + return $pop6 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr61673.c.s b/src/binaryen/test/torture-s/pr61673.c.s new file mode 100644 index 0000000000..36fdb52184 --- /dev/null +++ b/src/binaryen/test/torture-s/pr61673.c.s @@ -0,0 +1,152 @@ + .text + .file "pr61673.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + block + block + i32.const $push0=, -121 + i32.eq $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %entry + i32.const $push2=, 84 + i32.ne $push3=, $0, $pop2 + br_if 1, $pop3 # 1: down to label0 +.LBB0_2: # %if.end + end_block # label1: + return +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.load8_s $push4=, 0($0) + tee_local $push3=, $0=, $pop4 + i32.const $push0=, -1 + i32.le_s $push1=, $pop3, $pop0 + br_if 0, $pop1 # 0: down to label2 +# BB#1: # %if.end + call bar@FUNCTION, $0 + return +.LBB1_2: # %if.then + end_block # label2: + i32.const $push2=, 0 + i32.store8 e($pop2), $0 + call bar@FUNCTION, $0 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.baz,"ax",@progbits + .hidden baz # -- Begin function baz + .globl baz + .type baz,@function +baz: # @baz + .param i32 +# BB#0: # %entry + block + i32.load8_s $push4=, 0($0) + tee_local $push3=, $0=, $pop4 + i32.const $push0=, -1 + i32.le_s $push1=, $pop3, $pop0 + br_if 0, $pop1 # 0: down to label3 +# BB#1: # %if.end + return +.LBB2_2: # %if.then + end_block # label3: + i32.const $push2=, 0 + i32.store8 e($pop2), $0 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size baz, .Lfunc_end2-baz + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push19=, 0 + i32.const $push0=, 33 + i32.store8 e($pop19), $pop0 + i32.const $push1=, main.c + call foo@FUNCTION, $pop1 + block + i32.const $push18=, 0 + i32.load8_u $push2=, e($pop18) + i32.const $push17=, 33 + i32.ne $push3=, $pop2, $pop17 + br_if 0, $pop3 # 0: down to label4 +# BB#1: # %if.end + i32.const $push4=, main.c+1 + call foo@FUNCTION, $pop4 + i32.const $push20=, 0 + i32.load8_u $push5=, e($pop20) + i32.const $push6=, 135 + i32.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label4 +# BB#2: # %if.end6 + i32.const $push23=, 0 + i32.const $push8=, 33 + i32.store8 e($pop23), $pop8 + i32.const $push9=, main.c + call baz@FUNCTION, $pop9 + i32.const $push22=, 0 + i32.load8_u $push10=, e($pop22) + i32.const $push21=, 33 + i32.ne $push11=, $pop10, $pop21 + br_if 0, $pop11 # 0: down to label4 +# BB#3: # %if.end11 + i32.const $push12=, main.c+1 + call baz@FUNCTION, $pop12 + i32.const $push24=, 0 + i32.load8_u $push13=, e($pop24) + i32.const $push14=, 135 + i32.ne $push15=, $pop13, $pop14 + br_if 0, $pop15 # 0: down to label4 +# BB#4: # %if.end16 + i32.const $push16=, 0 + return $pop16 +.LBB3_5: # %if.then + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e +e: + .int8 0 # 0x0 + .size e, 1 + + .type main.c,@object # @main.c + .section .rodata.main.c,"a",@progbits +main.c: + .ascii "T\207" + .size main.c, 2 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr61725.c.s b/src/binaryen/test/torture-s/pr61725.c.s new file mode 100644 index 0000000000..a627fd53fb --- /dev/null +++ b/src/binaryen/test/torture-s/pr61725.c.s @@ -0,0 +1,17 @@ + .text + .file "pr61725.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr63209.c.s b/src/binaryen/test/torture-s/pr63209.c.s new file mode 100644 index 0000000000..7df5f43706 --- /dev/null +++ b/src/binaryen/test/torture-s/pr63209.c.s @@ -0,0 +1,60 @@ + .text + .file "pr63209.c" + .section .text.Predictor,"ax",@progbits + .hidden Predictor # -- Begin function Predictor + .globl Predictor + .type Predictor,@function +Predictor: # @Predictor + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.load $push17=, 4($1) + tee_local $push16=, $1=, $pop17 + i32.const $push2=, 8 + i32.shr_u $push3=, $0, $pop2 + i32.const $push0=, 255 + i32.and $push4=, $pop3, $pop0 + i32.const $push15=, 255 + i32.and $push1=, $0, $pop15 + i32.add $push5=, $pop4, $pop1 + i32.const $push14=, 255 + i32.and $push6=, $1, $pop14 + i32.sub $push7=, $pop5, $pop6 + i32.const $push13=, 8 + i32.shr_u $push8=, $1, $pop13 + i32.const $push12=, 255 + i32.and $push9=, $pop8, $pop12 + i32.gt_s $push10=, $pop7, $pop9 + i32.select $push11=, $0, $pop16, $pop10 + # fallthrough-return: $pop11 + .endfunc +.Lfunc_end0: + .size Predictor, .Lfunc_end0-Predictor + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, -8684677 + i32.const $push0=, main.top + i32.call $push2=, Predictor@FUNCTION, $pop1, $pop0 + i32.const $push4=, -8684677 + i32.ne $push3=, $pop2, $pop4 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type main.top,@object # @main.top + .section .rodata.main.top,"a",@progbits + .p2align 2 +main.top: + .int32 4286216826 # 0xff7a7a7a + .int32 4286216826 # 0xff7a7a7a + .size main.top, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pr63302.c.s b/src/binaryen/test/torture-s/pr63302.c.s new file mode 100644 index 0000000000..ed8ee998d8 --- /dev/null +++ b/src/binaryen/test/torture-s/pr63302.c.s @@ -0,0 +1,165 @@ + .text + .file "pr63302.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i64, i64 + .result i32 +# BB#0: # %entry + i64.const $push2=, -9223372036854773761 + i64.and $push11=, $0, $pop2 + tee_local $push10=, $0=, $pop11 + i64.or $push7=, $pop10, $1 + i64.eqz $push8=, $pop7 + i64.const $push3=, -9223372036854775808 + i64.xor $push4=, $0, $pop3 + i64.const $push0=, -1 + i64.xor $push1=, $1, $pop0 + i64.or $push5=, $pop4, $pop1 + i64.eqz $push6=, $pop5 + i32.or $push9=, $pop8, $pop6 + # fallthrough-return: $pop9 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i64 + .result i32 +# BB#0: # %entry + i64.const $push0=, -2147481601 + i64.and $push6=, $0, $pop0 + tee_local $push5=, $0=, $pop6 + i64.eqz $push3=, $pop5 + i64.const $push1=, -2147483648 + i64.eq $push2=, $0, $pop1 + i32.or $push4=, $pop3, $pop2 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i64.const $push52=, 0 + i64.const $push51=, 0 + i32.call $push0=, foo@FUNCTION, $pop52, $pop51 + i32.const $push1=, 1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %lor.lhs.false + i64.const $push3=, 1 + i64.const $push53=, 0 + i32.call $push4=, foo@FUNCTION, $pop3, $pop53 + br_if 0, $pop4 # 0: down to label0 +# BB#2: # %lor.lhs.false3 + i64.const $push5=, 2048 + i64.const $push54=, 0 + i32.call $push6=, foo@FUNCTION, $pop5, $pop54 + i32.const $push7=, 1 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %lor.lhs.false6 + i64.const $push9=, 2049 + i64.const $push55=, 0 + i32.call $push10=, foo@FUNCTION, $pop9, $pop55 + br_if 0, $pop10 # 0: down to label0 +# BB#4: # %lor.lhs.false9 + i64.const $push56=, -9223372036854775808 + i64.const $push11=, 0 + i32.call $push12=, foo@FUNCTION, $pop56, $pop11 + br_if 0, $pop12 # 0: down to label0 +# BB#5: # %lor.lhs.false12 + i64.const $push58=, -9223372036854775808 + i64.const $push57=, -1 + i32.call $push13=, foo@FUNCTION, $pop58, $pop57 + i32.const $push14=, 1 + i32.ne $push15=, $pop13, $pop14 + br_if 0, $pop15 # 0: down to label0 +# BB#6: # %lor.lhs.false15 + i64.const $push16=, -9223372036854775807 + i64.const $push59=, -1 + i32.call $push17=, foo@FUNCTION, $pop16, $pop59 + br_if 0, $pop17 # 0: down to label0 +# BB#7: # %lor.lhs.false18 + i64.const $push18=, -9223372036854773760 + i64.const $push60=, -1 + i32.call $push19=, foo@FUNCTION, $pop18, $pop60 + i32.const $push20=, 1 + i32.ne $push21=, $pop19, $pop20 + br_if 0, $pop21 # 0: down to label0 +# BB#8: # %lor.lhs.false21 + i64.const $push22=, -9223372036854773759 + i64.const $push61=, -1 + i32.call $push23=, foo@FUNCTION, $pop22, $pop61 + br_if 0, $pop23 # 0: down to label0 +# BB#9: # %if.end + i64.const $push24=, 0 + i32.call $push25=, bar@FUNCTION, $pop24 + i32.const $push26=, 1 + i32.ne $push27=, $pop25, $pop26 + br_if 0, $pop27 # 0: down to label0 +# BB#10: # %lor.lhs.false26 + i64.const $push28=, 1 + i32.call $push29=, bar@FUNCTION, $pop28 + br_if 0, $pop29 # 0: down to label0 +# BB#11: # %lor.lhs.false29 + i64.const $push30=, 2048 + i32.call $push31=, bar@FUNCTION, $pop30 + i32.const $push32=, 1 + i32.ne $push33=, $pop31, $pop32 + br_if 0, $pop33 # 0: down to label0 +# BB#12: # %lor.lhs.false32 + i64.const $push34=, 2049 + i32.call $push35=, bar@FUNCTION, $pop34 + br_if 0, $pop35 # 0: down to label0 +# BB#13: # %lor.lhs.false35 + i64.const $push36=, 2147483648 + i32.call $push37=, bar@FUNCTION, $pop36 + br_if 0, $pop37 # 0: down to label0 +# BB#14: # %lor.lhs.false38 + i64.const $push38=, -2147483648 + i32.call $push39=, bar@FUNCTION, $pop38 + i32.const $push40=, 1 + i32.ne $push41=, $pop39, $pop40 + br_if 0, $pop41 # 0: down to label0 +# BB#15: # %lor.lhs.false41 + i64.const $push42=, -2147483647 + i32.call $push43=, bar@FUNCTION, $pop42 + br_if 0, $pop43 # 0: down to label0 +# BB#16: # %lor.lhs.false44 + i64.const $push44=, -2147481600 + i32.call $push45=, bar@FUNCTION, $pop44 + i32.const $push46=, 1 + i32.ne $push47=, $pop45, $pop46 + br_if 0, $pop47 # 0: down to label0 +# BB#17: # %lor.lhs.false47 + i64.const $push48=, -2147481599 + i32.call $push49=, bar@FUNCTION, $pop48 + br_if 0, $pop49 # 0: down to label0 +# BB#18: # %if.end51 + i32.const $push50=, 0 + return $pop50 +.LBB2_19: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr63659.c.s b/src/binaryen/test/torture-s/pr63659.c.s new file mode 100644 index 0000000000..e46c5e538f --- /dev/null +++ b/src/binaryen/test/torture-s/pr63659.c.s @@ -0,0 +1,146 @@ + .text + .file "pr63659.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + block + i32.const $push8=, 0 + i32.load $push0=, a($pop8) + i32.eqz $push23=, $pop0 + br_if 0, $pop23 # 0: down to label0 +# BB#1: # %for.cond + i32.const $push10=, 0 + i32.const $push9=, 0 + i32.store a($pop10), $pop9 +.LBB0_2: # %while.end + end_block # label0: + i32.const $push15=, 0 + i32.const $push14=, 0 + i32.load8_s $push2=, c($pop14) + i32.const $push13=, 0 + i32.load $push1=, h($pop13) + i32.shr_s $push12=, $pop2, $pop1 + tee_local $push11=, $0=, $pop12 + i32.store g($pop15), $pop11 + i32.const $1=, 255 + block + i32.eqz $push24=, $0 + br_if 0, $pop24 # 0: down to label1 +# BB#3: # %cond.false + i32.const $push3=, -1 + i32.rem_s $1=, $pop3, $0 +.LBB0_4: # %cond.end + end_block # label1: + i32.const $push21=, 0 + i32.load $push5=, d($pop21) + i32.const $push20=, 255 + i32.and $push4=, $1, $pop20 + i32.store 0($pop5), $pop4 + i32.const $push19=, 0 + i32.store8 e($pop19), $1 + i32.const $push18=, 0 + i32.store8 f($pop18), $1 + block + i32.const $push17=, 0 + i32.load $push6=, b($pop17) + i32.const $push16=, 255 + i32.ne $push7=, $pop6, $pop16 + br_if 0, $pop7 # 0: down to label2 +# BB#5: # %if.end23 + i32.const $push22=, 0 + return $pop22 +.LBB0_6: # %if.then22 + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden b # @b + .type b,@object + .section .bss.b,"aw",@nobits + .globl b + .p2align 2 +b: + .int32 0 # 0x0 + .size b, 4 + + .hidden d # @d + .type d,@object + .section .data.d,"aw",@progbits + .globl d + .p2align 2 +d: + .int32 b + .size d, 4 + + .hidden a # @a + .type a,@object + .section .bss.a,"aw",@nobits + .globl a + .p2align 2 +a: + .int32 0 # 0x0 + .size a, 4 + + .hidden c # @c + .type c,@object + .section .bss.c,"aw",@nobits + .globl c + .p2align 2 +c: + .int32 0 # 0x0 + .size c, 4 + + .hidden i # @i + .type i,@object + .section .bss.i,"aw",@nobits + .globl i + .p2align 2 +i: + .int32 0 # 0x0 + .size i, 4 + + .hidden h # @h + .type h,@object + .section .bss.h,"aw",@nobits + .globl h + .p2align 2 +h: + .int32 0 # 0x0 + .size h, 4 + + .hidden g # @g + .type g,@object + .section .bss.g,"aw",@nobits + .globl g + .p2align 2 +g: + .int32 0 # 0x0 + .size g, 4 + + .hidden f # @f + .type f,@object + .section .bss.f,"aw",@nobits + .globl f +f: + .int8 0 # 0x0 + .size f, 1 + + .hidden e # @e + .type e,@object + .section .bss.e,"aw",@nobits + .globl e +e: + .int8 0 # 0x0 + .size e, 1 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pr7284-1.c.s b/src/binaryen/test/torture-s/pr7284-1.c.s new file mode 100644 index 0000000000..706108cbab --- /dev/null +++ b/src/binaryen/test/torture-s/pr7284-1.c.s @@ -0,0 +1,59 @@ + .text + .file "pr7284-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 24 + i32.shl $push1=, $0, $pop0 + i32.const $push2=, 8388608 + i32.div_s $push3=, $pop1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push5=, 0 + i32.load $push0=, x($pop5) + i32.const $push1=, 255 + i32.and $push2=, $pop0, $pop1 + i32.const $push3=, 128 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 2 +x: + .int32 128 # 0x80 + .size x, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/printf-1.c.s b/src/binaryen/test/torture-s/printf-1.c.s new file mode 100644 index 0000000000..0683bc5677 --- /dev/null +++ b/src/binaryen/test/torture-s/printf-1.c.s @@ -0,0 +1,203 @@ + .text + .file "printf-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push45=, 0 + i32.const $push43=, 0 + i32.load $push42=, __stack_pointer($pop43) + i32.const $push44=, 176 + i32.sub $push74=, $pop42, $pop44 + tee_local $push73=, $0=, $pop74 + i32.store __stack_pointer($pop45), $pop73 + i32.const $push72=, .Lstr + i32.const $push71=, 0 + i32.call $drop=, printf@FUNCTION, $pop72, $pop71 + block + i32.const $push70=, .Lstr + i32.const $push69=, 0 + i32.call $push0=, printf@FUNCTION, $pop70, $pop69 + i32.const $push1=, 5 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push76=, .Lstr + i32.call $drop=, puts@FUNCTION, $pop76 + i32.const $push3=, .L.str.1 + i32.const $push75=, 0 + i32.call $push4=, printf@FUNCTION, $pop3, $pop75 + i32.const $push5=, 6 + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#2: # %if.end6 + i32.const $push7=, 97 + i32.call $drop=, putchar@FUNCTION, $pop7 + i32.const $push9=, .L.str.2 + i32.const $push8=, 0 + i32.call $push10=, printf@FUNCTION, $pop9, $pop8 + i32.const $push11=, 1 + i32.ne $push12=, $pop10, $pop11 + br_if 0, $pop12 # 0: down to label0 +# BB#3: # %if.end16 + i32.const $push13=, .Lstr + i32.store 160($0), $pop13 + i32.const $push79=, .L.str.4 + i32.const $push49=, 160 + i32.add $push50=, $0, $pop49 + i32.call $drop=, printf@FUNCTION, $pop79, $pop50 + i32.const $push78=, .Lstr + i32.store 144($0), $pop78 + i32.const $push77=, .L.str.4 + i32.const $push51=, 144 + i32.add $push52=, $0, $pop51 + i32.call $push14=, printf@FUNCTION, $pop77, $pop52 + i32.const $push15=, 5 + i32.ne $push16=, $pop14, $pop15 + br_if 0, $pop16 # 0: down to label0 +# BB#4: # %if.end21 + i32.const $push17=, .L.str.1 + i32.store 128($0), $pop17 + i32.const $push82=, .L.str.4 + i32.const $push53=, 128 + i32.add $push54=, $0, $pop53 + i32.call $drop=, printf@FUNCTION, $pop82, $pop54 + i32.const $push81=, .L.str.1 + i32.store 112($0), $pop81 + i32.const $push80=, .L.str.4 + i32.const $push55=, 112 + i32.add $push56=, $0, $pop55 + i32.call $push18=, printf@FUNCTION, $pop80, $pop56 + i32.const $push19=, 6 + i32.ne $push20=, $pop18, $pop19 + br_if 0, $pop20 # 0: down to label0 +# BB#5: # %if.end26 + i32.const $push21=, 97 + i32.call $drop=, putchar@FUNCTION, $pop21 + i32.const $push22=, .L.str.2 + i32.store 96($0), $pop22 + i32.const $push83=, .L.str.4 + i32.const $push57=, 96 + i32.add $push58=, $0, $pop57 + i32.call $push23=, printf@FUNCTION, $pop83, $pop58 + i32.const $push24=, 1 + i32.ne $push25=, $pop23, $pop24 + br_if 0, $pop25 # 0: down to label0 +# BB#6: # %if.end31 + i32.const $push26=, .L.str.3 + i32.store 80($0), $pop26 + i32.const $push86=, .L.str.4 + i32.const $push59=, 80 + i32.add $push60=, $0, $pop59 + i32.call $drop=, printf@FUNCTION, $pop86, $pop60 + i32.const $push85=, .L.str.3 + i32.store 64($0), $pop85 + i32.const $push84=, .L.str.4 + i32.const $push61=, 64 + i32.add $push62=, $0, $pop61 + i32.call $push27=, printf@FUNCTION, $pop84, $pop62 + br_if 0, $pop27 # 0: down to label0 +# BB#7: # %if.end36 + i32.const $push28=, 120 + i32.call $drop=, putchar@FUNCTION, $pop28 + i32.const $push87=, 120 + i32.store 48($0), $pop87 + i32.const $push29=, .L.str.5 + i32.const $push63=, 48 + i32.add $push64=, $0, $pop63 + i32.call $push30=, printf@FUNCTION, $pop29, $pop64 + i32.const $push31=, 1 + i32.ne $push32=, $pop30, $pop31 + br_if 0, $pop32 # 0: down to label0 +# BB#8: # %if.end41 + i32.const $push33=, .L.str.1 + i32.call $drop=, puts@FUNCTION, $pop33 + i32.const $push88=, .L.str.1 + i32.store 32($0), $pop88 + i32.const $push34=, .L.str.6 + i32.const $push65=, 32 + i32.add $push66=, $0, $pop65 + i32.call $push35=, printf@FUNCTION, $pop34, $pop66 + i32.const $push36=, 7 + i32.ne $push37=, $pop35, $pop36 + br_if 0, $pop37 # 0: down to label0 +# BB#9: # %if.end46 + i32.const $push91=, 0 + i32.store 16($0), $pop91 + i32.const $push38=, .L.str.7 + i32.const $push67=, 16 + i32.add $push68=, $0, $pop67 + i32.call $drop=, printf@FUNCTION, $pop38, $pop68 + i32.const $push90=, 0 + i32.store 0($0), $pop90 + i32.const $push89=, .L.str.7 + i32.call $push39=, printf@FUNCTION, $pop89, $0 + i32.const $push40=, 2 + i32.ne $push41=, $pop39, $pop40 + br_if 0, $pop41 # 0: down to label0 +# BB#10: # %if.end51 + i32.const $push48=, 0 + i32.const $push46=, 176 + i32.add $push47=, $0, $pop46 + i32.store __stack_pointer($pop48), $pop47 + i32.const $push92=, 0 + return $pop92 +.LBB0_11: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type .L.str.1,@object # @.str.1 + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str.1: + .asciz "hello\n" + .size .L.str.1, 7 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "a" + .size .L.str.2, 2 + + .type .L.str.3,@object # @.str.3 +.L.str.3: + .skip 1 + .size .L.str.3, 1 + + .type .L.str.4,@object # @.str.4 +.L.str.4: + .asciz "%s" + .size .L.str.4, 3 + + .type .L.str.5,@object # @.str.5 +.L.str.5: + .asciz "%c" + .size .L.str.5, 3 + + .type .L.str.6,@object # @.str.6 +.L.str.6: + .asciz "%s\n" + .size .L.str.6, 4 + + .type .L.str.7,@object # @.str.7 +.L.str.7: + .asciz "%d\n" + .size .L.str.7, 4 + + .type .Lstr,@object # @str +.Lstr: + .asciz "hello" + .size .Lstr, 6 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype printf, i32, i32 + .functype abort, void + .functype puts, i32, i32 + .functype putchar, i32, i32 diff --git a/src/binaryen/test/torture-s/printf-chk-1.c.s b/src/binaryen/test/torture-s/printf-chk-1.c.s new file mode 100644 index 0000000000..2c98a28822 --- /dev/null +++ b/src/binaryen/test/torture-s/printf-chk-1.c.s @@ -0,0 +1,447 @@ + .text + .file "printf-chk-1.c" + .section .text.__printf_chk,"ax",@progbits + .hidden __printf_chk # -- Begin function __printf_chk + .globl __printf_chk + .type __printf_chk,@function +__printf_chk: # @__printf_chk + .param i32, i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push11=, $pop2, $pop4 + tee_local $push10=, $3=, $pop11 + i32.store __stack_pointer($pop5), $pop10 + block + i32.const $push9=, 0 + i32.load $push0=, should_optimize($pop9) + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push12=, 0 + i32.const $push1=, 1 + i32.store should_optimize($pop12), $pop1 + i32.store 12($3), $2 + i32.call $2=, vprintf@FUNCTION, $1, $2 + i32.const $push8=, 0 + i32.const $push6=, 16 + i32.add $push7=, $3, $pop6 + i32.store __stack_pointer($pop8), $pop7 + return $2 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size __printf_chk, .Lfunc_end0-__printf_chk + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push56=, 0 + i32.const $push54=, 0 + i32.load $push53=, __stack_pointer($pop54) + i32.const $push55=, 224 + i32.sub $push92=, $pop53, $pop55 + tee_local $push91=, $0=, $pop92 + i32.store __stack_pointer($pop56), $pop91 + i32.const $push90=, 0 + i32.const $push89=, 0 + i32.store should_optimize($pop90), $pop89 + i32.const $push88=, .L.str + i32.const $push87=, 0 + i32.call $drop=, __printf_chk@FUNCTION, $0, $pop88, $pop87 + block + i32.const $push86=, 0 + i32.load $push0=, should_optimize($pop86) + i32.eqz $push197=, $pop0 + br_if 0, $pop197 # 0: down to label1 +# BB#1: # %if.end + i32.const $push96=, 0 + i32.const $push95=, 0 + i32.store should_optimize($pop96), $pop95 + i32.const $push94=, .L.str + i32.const $push93=, 0 + i32.call $push1=, __printf_chk@FUNCTION, $0, $pop94, $pop93 + i32.const $push2=, 5 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#2: # %if.end3 + i32.const $push97=, 0 + i32.load $push4=, should_optimize($pop97) + i32.eqz $push198=, $pop4 + br_if 0, $pop198 # 0: down to label1 +# BB#3: # %if.end6 + i32.const $push101=, 0 + i32.const $push5=, 1 + i32.store should_optimize($pop101), $pop5 + i32.const $push100=, .L.str.1 + i32.const $push99=, 0 + i32.call $drop=, __printf_chk@FUNCTION, $0, $pop100, $pop99 + i32.const $push98=, 0 + i32.load $push6=, should_optimize($pop98) + i32.eqz $push199=, $pop6 + br_if 0, $pop199 # 0: down to label1 +# BB#4: # %if.end10 + i32.const $push105=, 0 + i32.const $push104=, 0 + i32.store should_optimize($pop105), $pop104 + i32.const $push103=, .L.str.1 + i32.const $push102=, 0 + i32.call $push7=, __printf_chk@FUNCTION, $0, $pop103, $pop102 + i32.const $push8=, 6 + i32.ne $push9=, $pop7, $pop8 + br_if 0, $pop9 # 0: down to label1 +# BB#5: # %if.end14 + i32.const $push106=, 0 + i32.load $push10=, should_optimize($pop106) + i32.eqz $push200=, $pop10 + br_if 0, $pop200 # 0: down to label1 +# BB#6: # %if.end17 + i32.const $push111=, 0 + i32.const $push110=, 1 + i32.store should_optimize($pop111), $pop110 + i32.const $push109=, .L.str.2 + i32.const $push108=, 0 + i32.call $drop=, __printf_chk@FUNCTION, $0, $pop109, $pop108 + i32.const $push107=, 0 + i32.load $push11=, should_optimize($pop107) + i32.eqz $push201=, $pop11 + br_if 0, $pop201 # 0: down to label1 +# BB#7: # %if.end21 + i32.const $push116=, 0 + i32.const $push115=, 0 + i32.store should_optimize($pop116), $pop115 + i32.const $push114=, .L.str.2 + i32.const $push113=, 0 + i32.call $push12=, __printf_chk@FUNCTION, $0, $pop114, $pop113 + i32.const $push112=, 1 + i32.ne $push13=, $pop12, $pop112 + br_if 0, $pop13 # 0: down to label1 +# BB#8: # %if.end25 + i32.const $push117=, 0 + i32.load $push14=, should_optimize($pop117) + i32.eqz $push202=, $pop14 + br_if 0, $pop202 # 0: down to label1 +# BB#9: # %if.end28 + i32.const $push121=, 0 + i32.const $push15=, 1 + i32.store should_optimize($pop121), $pop15 + i32.const $push120=, .L.str.3 + i32.const $push119=, 0 + i32.call $drop=, __printf_chk@FUNCTION, $0, $pop120, $pop119 + i32.const $push118=, 0 + i32.load $push16=, should_optimize($pop118) + i32.eqz $push203=, $pop16 + br_if 0, $pop203 # 0: down to label1 +# BB#10: # %if.end32 + i32.const $push125=, 0 + i32.const $push124=, 0 + i32.store should_optimize($pop125), $pop124 + i32.const $push123=, .L.str.3 + i32.const $push122=, 0 + i32.call $push17=, __printf_chk@FUNCTION, $0, $pop123, $pop122 + br_if 0, $pop17 # 0: down to label1 +# BB#11: # %if.end36 + i32.const $push126=, 0 + i32.load $push18=, should_optimize($pop126) + i32.eqz $push204=, $pop18 + br_if 0, $pop204 # 0: down to label1 +# BB#12: # %if.end39 + i32.const $push131=, .L.str + i32.store 208($0), $pop131 + i32.const $push130=, 0 + i32.const $push129=, 0 + i32.store should_optimize($pop130), $pop129 + i32.const $push128=, .L.str.4 + i32.const $push60=, 208 + i32.add $push61=, $0, $pop60 + i32.call $drop=, __printf_chk@FUNCTION, $0, $pop128, $pop61 + i32.const $push127=, 0 + i32.load $push19=, should_optimize($pop127) + i32.eqz $push205=, $pop19 + br_if 0, $pop205 # 0: down to label1 +# BB#13: # %if.end43 + i32.const $push135=, .L.str + i32.store 192($0), $pop135 + i32.const $push134=, 0 + i32.const $push133=, 0 + i32.store should_optimize($pop134), $pop133 + i32.const $push132=, .L.str.4 + i32.const $push62=, 192 + i32.add $push63=, $0, $pop62 + i32.call $push20=, __printf_chk@FUNCTION, $0, $pop132, $pop63 + i32.const $push21=, 5 + i32.ne $push22=, $pop20, $pop21 + br_if 0, $pop22 # 0: down to label1 +# BB#14: # %if.end47 + i32.const $push136=, 0 + i32.load $push23=, should_optimize($pop136) + i32.eqz $push206=, $pop23 + br_if 0, $pop206 # 0: down to label1 +# BB#15: # %if.end50 + i32.const $push140=, 0 + i32.const $push24=, 1 + i32.store should_optimize($pop140), $pop24 + i32.const $push139=, .L.str.1 + i32.store 176($0), $pop139 + i32.const $push138=, .L.str.4 + i32.const $push64=, 176 + i32.add $push65=, $0, $pop64 + i32.call $drop=, __printf_chk@FUNCTION, $0, $pop138, $pop65 + i32.const $push137=, 0 + i32.load $push25=, should_optimize($pop137) + i32.eqz $push207=, $pop25 + br_if 0, $pop207 # 0: down to label1 +# BB#16: # %if.end54 + i32.const $push144=, .L.str.1 + i32.store 160($0), $pop144 + i32.const $push143=, 0 + i32.const $push142=, 0 + i32.store should_optimize($pop143), $pop142 + i32.const $push141=, .L.str.4 + i32.const $push66=, 160 + i32.add $push67=, $0, $pop66 + i32.call $push26=, __printf_chk@FUNCTION, $0, $pop141, $pop67 + i32.const $push27=, 6 + i32.ne $push28=, $pop26, $pop27 + br_if 0, $pop28 # 0: down to label1 +# BB#17: # %if.end58 + i32.const $push145=, 0 + i32.load $push29=, should_optimize($pop145) + i32.eqz $push208=, $pop29 + br_if 0, $pop208 # 0: down to label1 +# BB#18: # %if.end61 + i32.const $push150=, 0 + i32.const $push149=, 1 + i32.store should_optimize($pop150), $pop149 + i32.const $push148=, .L.str.2 + i32.store 144($0), $pop148 + i32.const $push147=, .L.str.4 + i32.const $push68=, 144 + i32.add $push69=, $0, $pop68 + i32.call $drop=, __printf_chk@FUNCTION, $0, $pop147, $pop69 + i32.const $push146=, 0 + i32.load $push30=, should_optimize($pop146) + i32.eqz $push209=, $pop30 + br_if 0, $pop209 # 0: down to label1 +# BB#19: # %if.end65 + i32.const $push155=, .L.str.2 + i32.store 128($0), $pop155 + i32.const $push154=, 0 + i32.const $push153=, 0 + i32.store should_optimize($pop154), $pop153 + i32.const $push152=, .L.str.4 + i32.const $push70=, 128 + i32.add $push71=, $0, $pop70 + i32.call $push31=, __printf_chk@FUNCTION, $0, $pop152, $pop71 + i32.const $push151=, 1 + i32.ne $push32=, $pop31, $pop151 + br_if 0, $pop32 # 0: down to label1 +# BB#20: # %if.end69 + i32.const $push156=, 0 + i32.load $push33=, should_optimize($pop156) + i32.eqz $push210=, $pop33 + br_if 0, $pop210 # 0: down to label1 +# BB#21: # %if.end72 + i32.const $push160=, 0 + i32.const $push34=, 1 + i32.store should_optimize($pop160), $pop34 + i32.const $push159=, .L.str.3 + i32.store 112($0), $pop159 + i32.const $push158=, .L.str.4 + i32.const $push72=, 112 + i32.add $push73=, $0, $pop72 + i32.call $drop=, __printf_chk@FUNCTION, $0, $pop158, $pop73 + i32.const $push157=, 0 + i32.load $push35=, should_optimize($pop157) + i32.eqz $push211=, $pop35 + br_if 0, $pop211 # 0: down to label1 +# BB#22: # %if.end76 + i32.const $push164=, .L.str.3 + i32.store 96($0), $pop164 + i32.const $push163=, 0 + i32.const $push162=, 0 + i32.store should_optimize($pop163), $pop162 + i32.const $push161=, .L.str.4 + i32.const $push74=, 96 + i32.add $push75=, $0, $pop74 + i32.call $push36=, __printf_chk@FUNCTION, $0, $pop161, $pop75 + br_if 0, $pop36 # 0: down to label1 +# BB#23: # %if.end80 + i32.const $push165=, 0 + i32.load $push37=, should_optimize($pop165) + i32.eqz $push212=, $pop37 + br_if 0, $pop212 # 0: down to label1 +# BB#24: # %if.end83 + i32.const $push170=, 0 + i32.const $push169=, 1 + i32.store should_optimize($pop170), $pop169 + i32.const $push168=, 120 + i32.store 80($0), $pop168 + i32.const $push167=, .L.str.5 + i32.const $push76=, 80 + i32.add $push77=, $0, $pop76 + i32.call $drop=, __printf_chk@FUNCTION, $0, $pop167, $pop77 + i32.const $push166=, 0 + i32.load $push38=, should_optimize($pop166) + i32.eqz $push213=, $pop38 + br_if 0, $pop213 # 0: down to label1 +# BB#25: # %if.end87 + i32.const $push175=, 120 + i32.store 64($0), $pop175 + i32.const $push174=, 0 + i32.const $push173=, 0 + i32.store should_optimize($pop174), $pop173 + i32.const $push172=, .L.str.5 + i32.const $push78=, 64 + i32.add $push79=, $0, $pop78 + i32.call $push39=, __printf_chk@FUNCTION, $0, $pop172, $pop79 + i32.const $push171=, 1 + i32.ne $push40=, $pop39, $pop171 + br_if 0, $pop40 # 0: down to label1 +# BB#26: # %if.end91 + i32.const $push176=, 0 + i32.load $push41=, should_optimize($pop176) + i32.eqz $push214=, $pop41 + br_if 0, $pop214 # 0: down to label1 +# BB#27: # %if.end94 + i32.const $push180=, 0 + i32.const $push42=, 1 + i32.store should_optimize($pop180), $pop42 + i32.const $push179=, .L.str.1 + i32.store 48($0), $pop179 + i32.const $push178=, .L.str.6 + i32.const $push80=, 48 + i32.add $push81=, $0, $pop80 + i32.call $drop=, __printf_chk@FUNCTION, $0, $pop178, $pop81 + i32.const $push177=, 0 + i32.load $push43=, should_optimize($pop177) + i32.eqz $push215=, $pop43 + br_if 0, $pop215 # 0: down to label1 +# BB#28: # %if.end98 + i32.const $push184=, .L.str.1 + i32.store 32($0), $pop184 + i32.const $push183=, 0 + i32.const $push182=, 0 + i32.store should_optimize($pop183), $pop182 + i32.const $push181=, .L.str.6 + i32.const $push82=, 32 + i32.add $push83=, $0, $pop82 + i32.call $push44=, __printf_chk@FUNCTION, $0, $pop181, $pop83 + i32.const $push45=, 7 + i32.ne $push46=, $pop44, $pop45 + br_if 0, $pop46 # 0: down to label1 +# BB#29: # %if.end102 + i32.const $push185=, 0 + i32.load $push47=, should_optimize($pop185) + i32.eqz $push216=, $pop47 + br_if 0, $pop216 # 0: down to label1 +# BB#30: # %if.end105 + i32.const $push190=, 0 + i32.store 16($0), $pop190 + i32.const $push189=, 0 + i32.const $push188=, 0 + i32.store should_optimize($pop189), $pop188 + i32.const $push187=, .L.str.7 + i32.const $push84=, 16 + i32.add $push85=, $0, $pop84 + i32.call $drop=, __printf_chk@FUNCTION, $0, $pop187, $pop85 + i32.const $push186=, 0 + i32.load $push48=, should_optimize($pop186) + i32.eqz $push217=, $pop48 + br_if 0, $pop217 # 0: down to label1 +# BB#31: # %if.end109 + i32.const $push194=, 0 + i32.store 0($0), $pop194 + i32.const $push193=, 0 + i32.const $push192=, 0 + i32.store should_optimize($pop193), $pop192 + i32.const $push191=, .L.str.7 + i32.call $push49=, __printf_chk@FUNCTION, $0, $pop191, $0 + i32.const $push50=, 2 + i32.ne $push51=, $pop49, $pop50 + br_if 0, $pop51 # 0: down to label1 +# BB#32: # %if.end113 + i32.const $push195=, 0 + i32.load $push52=, should_optimize($pop195) + i32.eqz $push218=, $pop52 + br_if 0, $pop218 # 0: down to label1 +# BB#33: # %if.end116 + i32.const $push59=, 0 + i32.const $push57=, 224 + i32.add $push58=, $0, $pop57 + i32.store __stack_pointer($pop59), $pop58 + i32.const $push196=, 0 + return $pop196 +.LBB1_34: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden should_optimize # @should_optimize + .type should_optimize,@object + .section .bss.should_optimize,"aw",@nobits + .globl should_optimize + .p2align 2 +should_optimize: + .int32 0 # 0x0 + .size should_optimize, 4 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "hello" + .size .L.str, 6 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "hello\n" + .size .L.str.1, 7 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "a" + .size .L.str.2, 2 + + .type .L.str.3,@object # @.str.3 +.L.str.3: + .skip 1 + .size .L.str.3, 1 + + .type .L.str.4,@object # @.str.4 +.L.str.4: + .asciz "%s" + .size .L.str.4, 3 + + .type .L.str.5,@object # @.str.5 +.L.str.5: + .asciz "%c" + .size .L.str.5, 3 + + .type .L.str.6,@object # @.str.6 +.L.str.6: + .asciz "%s\n" + .size .L.str.6, 4 + + .type .L.str.7,@object # @.str.7 +.L.str.7: + .asciz "%d\n" + .size .L.str.7, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype vprintf, i32, i32, i32 diff --git a/src/binaryen/test/torture-s/pta-field-1.c.s b/src/binaryen/test/torture-s/pta-field-1.c.s new file mode 100644 index 0000000000..27d412cf24 --- /dev/null +++ b/src/binaryen/test/torture-s/pta-field-1.c.s @@ -0,0 +1,101 @@ + .text + .file "pta-field-1.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + i32.load $push0=, 4($0) + i32.const $push1=, 0 + i32.store 0($pop0), $pop1 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push14=, $pop2, $pop4 + tee_local $push13=, $1=, $pop14 + i32.store __stack_pointer($pop5), $pop13 + i32.const $push0=, 1 + i32.store 4($1), $pop0 + i32.const $push1=, 2 + i32.store 0($1), $pop1 + i32.const $push9=, 4 + i32.add $push10=, $1, $pop9 + i32.store 8($1), $pop10 + i32.store 12($1), $1 + i32.const $push11=, 8 + i32.add $push12=, $1, $pop11 + call bar@FUNCTION, $pop12 + i32.load $0=, 0($1) + i32.const $push8=, 0 + i32.const $push6=, 16 + i32.add $push7=, $1, $pop6 + i32.store __stack_pointer($pop8), $pop7 + copy_local $push15=, $0 + # fallthrough-return: $pop15 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push16=, $pop4, $pop6 + tee_local $push15=, $0=, $pop16 + i32.store __stack_pointer($pop7), $pop15 + i32.const $push0=, 1 + i32.store 4($0), $pop0 + i32.const $push1=, 2 + i32.store 0($0), $pop1 + i32.const $push11=, 4 + i32.add $push12=, $0, $pop11 + i32.store 8($0), $pop12 + i32.store 12($0), $0 + i32.const $push13=, 8 + i32.add $push14=, $0, $pop13 + call bar@FUNCTION, $pop14 + block + i32.load $push2=, 0($0) + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push10=, 0 + i32.const $push8=, 16 + i32.add $push9=, $0, $pop8 + i32.store __stack_pointer($pop10), $pop9 + i32.const $push3=, 0 + return $pop3 +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/pta-field-2.c.s b/src/binaryen/test/torture-s/pta-field-2.c.s new file mode 100644 index 0000000000..a384285180 --- /dev/null +++ b/src/binaryen/test/torture-s/pta-field-2.c.s @@ -0,0 +1,107 @@ + .text + .file "pta-field-2.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + i32.const $push0=, -4 + i32.add $push1=, $0, $pop0 + i32.load $push2=, 0($pop1) + i32.const $push3=, 0 + i32.store 0($pop2), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push16=, $pop4, $pop6 + tee_local $push15=, $1=, $pop16 + i32.store __stack_pointer($pop7), $pop15 + i32.const $push0=, 1 + i32.store 4($1), $pop0 + i32.const $push1=, 2 + i32.store 0($1), $pop1 + i32.const $push11=, 4 + i32.add $push12=, $1, $pop11 + i32.store 8($1), $pop12 + i32.store 12($1), $1 + i32.const $push13=, 8 + i32.add $push14=, $1, $pop13 + i32.const $push2=, 4 + i32.or $push3=, $pop14, $pop2 + call bar@FUNCTION, $pop3 + i32.load $0=, 4($1) + i32.const $push10=, 0 + i32.const $push8=, 16 + i32.add $push9=, $1, $pop8 + i32.store __stack_pointer($pop10), $pop9 + copy_local $push17=, $0 + # fallthrough-return: $pop17 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 16 + i32.sub $push18=, $pop6, $pop8 + tee_local $push17=, $0=, $pop18 + i32.store __stack_pointer($pop9), $pop17 + i32.const $push0=, 1 + i32.store 4($0), $pop0 + i32.const $push1=, 2 + i32.store 0($0), $pop1 + i32.const $push13=, 4 + i32.add $push14=, $0, $pop13 + i32.store 8($0), $pop14 + i32.store 12($0), $0 + i32.const $push15=, 8 + i32.add $push16=, $0, $pop15 + i32.const $push2=, 4 + i32.or $push3=, $pop16, $pop2 + call bar@FUNCTION, $pop3 + block + i32.load $push4=, 4($0) + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + i32.const $push12=, 0 + i32.const $push10=, 16 + i32.add $push11=, $0, $pop10 + i32.store __stack_pointer($pop12), $pop11 + i32.const $push5=, 0 + return $pop5 +.LBB2_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/ptr-arith-1.c.s b/src/binaryen/test/torture-s/ptr-arith-1.c.s new file mode 100644 index 0000000000..a64d0d5d00 --- /dev/null +++ b/src/binaryen/test/torture-s/ptr-arith-1.c.s @@ -0,0 +1,35 @@ + .text + .file "ptr-arith-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.add $push0=, $0, $1 + i32.const $push1=, 2 + i32.add $push2=, $pop0, $pop1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/pure-1.c.s b/src/binaryen/test/torture-s/pure-1.c.s new file mode 100644 index 0000000000..cd8b00d2a6 --- /dev/null +++ b/src/binaryen/test/torture-s/pure-1.c.s @@ -0,0 +1,56 @@ + .text + .file "pure-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.func0,"ax",@progbits + .hidden func0 # -- Begin function func0 + .globl func0 + .type func0,@function +func0: # @func0 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $push1=, i($pop0) + i32.sub $push2=, $0, $pop1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end1: + .size func0, .Lfunc_end1-func0 + # -- End function + .section .text.func1,"ax",@progbits + .hidden func1 # -- Begin function func1 + .globl func1 + .type func1,@function +func1: # @func1 + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size func1, .Lfunc_end2-func1 + # -- End function + .hidden i # @i + .type i,@object + .section .data.i,"aw",@progbits + .globl i + .p2align 2 +i: + .int32 2 # 0x2 + .size i, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/pushpop_macro.c.s b/src/binaryen/test/torture-s/pushpop_macro.c.s new file mode 100644 index 0000000000..fe1341a8bb --- /dev/null +++ b/src/binaryen/test/torture-s/pushpop_macro.c.s @@ -0,0 +1,17 @@ + .text + .file "pushpop_macro.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/regstack-1.c.s b/src/binaryen/test/torture-s/regstack-1.c.s new file mode 100644 index 0000000000..23061b7678 --- /dev/null +++ b/src/binaryen/test/torture-s/regstack-1.c.s @@ -0,0 +1,427 @@ + .text + .file "regstack-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i32 +# BB#0: # %entry + i32.const $push59=, 0 + i32.const $push57=, 0 + i32.load $push56=, __stack_pointer($pop57) + i32.const $push58=, 320 + i32.sub $push243=, $pop56, $pop58 + tee_local $push242=, $16=, $pop243 + i32.store __stack_pointer($pop59), $pop242 + i32.const $push60=, 304 + i32.add $push61=, $16, $pop60 + i32.const $push0=, 0 + i64.load $push241=, C($pop0) + tee_local $push240=, $7=, $pop241 + i32.const $push239=, 0 + i64.load $push238=, C+8($pop239) + tee_local $push237=, $6=, $pop238 + i32.const $push236=, 0 + i64.load $push235=, U($pop236) + tee_local $push234=, $5=, $pop235 + i32.const $push233=, 0 + i64.load $push232=, U+8($pop233) + tee_local $push231=, $4=, $pop232 + call __addtf3@FUNCTION, $pop61, $pop240, $pop237, $pop234, $pop231 + i32.const $push62=, 240 + i32.add $push63=, $16, $pop62 + call __subtf3@FUNCTION, $pop63, $7, $6, $5, $4 + i32.const $push66=, 288 + i32.add $push67=, $16, $pop66 + i64.load $push230=, 304($16) + tee_local $push229=, $15=, $pop230 + i32.const $push64=, 304 + i32.add $push65=, $16, $pop64 + i32.const $push1=, 8 + i32.add $push2=, $pop65, $pop1 + i64.load $push228=, 0($pop2) + tee_local $push227=, $14=, $pop228 + call __addtf3@FUNCTION, $pop67, $5, $4, $pop229, $pop227 + i32.const $push68=, 128 + i32.add $push69=, $16, $pop68 + i32.const $push226=, 0 + i64.load $push225=, Y2($pop226) + tee_local $push224=, $7=, $pop225 + i32.const $push223=, 0 + i64.load $push222=, Y2+8($pop223) + tee_local $push221=, $6=, $pop222 + call __addtf3@FUNCTION, $pop69, $5, $4, $pop224, $pop221 + i32.const $push72=, 224 + i32.add $push73=, $16, $pop72 + i64.load $push220=, 240($16) + tee_local $push219=, $9=, $pop220 + i32.const $push70=, 240 + i32.add $push71=, $16, $pop70 + i32.const $push218=, 8 + i32.add $push3=, $pop71, $pop218 + i64.load $push217=, 0($pop3) + tee_local $push216=, $8=, $pop217 + call __subtf3@FUNCTION, $pop73, $pop219, $pop216, $5, $4 + i32.const $push76=, 272 + i32.add $push77=, $16, $pop76 + i64.load $push215=, 288($16) + tee_local $push214=, $11=, $pop215 + i32.const $push74=, 288 + i32.add $push75=, $16, $pop74 + i32.const $push213=, 8 + i32.add $push4=, $pop75, $pop213 + i64.load $push212=, 0($pop4) + tee_local $push211=, $10=, $pop212 + call __addtf3@FUNCTION, $pop77, $5, $4, $pop214, $pop211 + i32.const $push78=, 16 + i32.add $push79=, $16, $pop78 + i32.const $push210=, 0 + i64.load $push209=, Y1($pop210) + tee_local $push208=, $13=, $pop209 + i32.const $push207=, 0 + i64.load $push206=, Y1+8($pop207) + tee_local $push205=, $12=, $pop206 + call __multf3@FUNCTION, $pop79, $7, $6, $pop208, $pop205 + i32.const $push80=, 112 + i32.add $push81=, $16, $pop80 + call __multf3@FUNCTION, $pop81, $9, $8, $13, $12 + i32.const $push84=, 48 + i32.add $push85=, $16, $pop84 + i64.load $push7=, 128($16) + i32.const $push82=, 128 + i32.add $push83=, $16, $pop82 + i32.const $push204=, 8 + i32.add $push5=, $pop83, $pop204 + i64.load $push6=, 0($pop5) + call __multf3@FUNCTION, $pop85, $pop7, $pop6, $13, $12 + i32.const $push86=, 192 + i32.add $push87=, $16, $pop86 + call __multf3@FUNCTION, $pop87, $15, $14, $7, $6 + i32.const $push90=, 80 + i32.add $push91=, $16, $pop90 + i64.load $push203=, 224($16) + tee_local $push202=, $15=, $pop203 + i32.const $push88=, 224 + i32.add $push89=, $16, $pop88 + i32.const $push201=, 8 + i32.add $push8=, $pop89, $pop201 + i64.load $push200=, 0($pop8) + tee_local $push199=, $14=, $pop200 + call __multf3@FUNCTION, $pop91, $pop202, $pop199, $13, $12 + i32.const $push92=, 208 + i32.add $push93=, $16, $pop92 + call __subtf3@FUNCTION, $pop93, $5, $4, $15, $14 + i32.const $push94=, 160 + i32.add $push95=, $16, $pop94 + call __multf3@FUNCTION, $pop95, $7, $6, $11, $10 + i32.const $push98=, 256 + i32.add $push99=, $16, $pop98 + i64.load $push198=, 272($16) + tee_local $push197=, $13=, $pop198 + i32.const $push96=, 272 + i32.add $push97=, $16, $pop96 + i32.const $push196=, 8 + i32.add $push9=, $pop97, $pop196 + i64.load $push195=, 0($pop9) + tee_local $push194=, $12=, $pop195 + call __addtf3@FUNCTION, $pop99, $5, $4, $pop197, $pop194 + i64.load $push13=, 16($16) + i32.const $push100=, 16 + i32.add $push101=, $16, $pop100 + i32.const $push193=, 8 + i32.add $push10=, $pop101, $pop193 + i64.load $push11=, 0($pop10) + i64.const $push192=, 0 + i64.const $push12=, -4612248968380809216 + call __addtf3@FUNCTION, $16, $pop13, $pop11, $pop192, $pop12 + i32.const $push104=, 96 + i32.add $push105=, $16, $pop104 + i64.load $push16=, 112($16) + i32.const $push102=, 112 + i32.add $push103=, $16, $pop102 + i32.const $push191=, 8 + i32.add $push14=, $pop103, $pop191 + i64.load $push15=, 0($pop14) + call __subtf3@FUNCTION, $pop105, $pop16, $pop15, $15, $14 + i32.const $push108=, 32 + i32.add $push109=, $16, $pop108 + i64.load $push19=, 48($16) + i32.const $push106=, 48 + i32.add $push107=, $16, $pop106 + i32.const $push190=, 8 + i32.add $push17=, $pop107, $pop190 + i64.load $push18=, 0($pop17) + call __subtf3@FUNCTION, $pop109, $pop19, $pop18, $7, $6 + i32.const $push112=, 176 + i32.add $push113=, $16, $pop112 + i64.load $push22=, 192($16) + i32.const $push110=, 192 + i32.add $push111=, $16, $pop110 + i32.const $push189=, 8 + i32.add $push20=, $pop111, $pop189 + i64.load $push21=, 0($pop20) + call __subtf3@FUNCTION, $pop113, $pop22, $pop21, $13, $12 + i32.const $push118=, 64 + i32.add $push119=, $16, $pop118 + i64.load $push28=, 208($16) + i32.const $push116=, 208 + i32.add $push117=, $16, $pop116 + i32.const $push188=, 8 + i32.add $push25=, $pop117, $pop188 + i64.load $push26=, 0($pop25) + i64.load $push27=, 80($16) + i32.const $push114=, 80 + i32.add $push115=, $16, $pop114 + i32.const $push187=, 8 + i32.add $push23=, $pop115, $pop187 + i64.load $push24=, 0($pop23) + call __addtf3@FUNCTION, $pop119, $pop28, $pop26, $pop27, $pop24 + i32.const $push124=, 144 + i32.add $push125=, $16, $pop124 + i64.load $push186=, 160($16) + tee_local $push185=, $5=, $pop186 + i32.const $push120=, 160 + i32.add $push121=, $16, $pop120 + i32.const $push184=, 8 + i32.add $push29=, $pop121, $pop184 + i64.load $push183=, 0($pop29) + tee_local $push182=, $4=, $pop183 + i64.load $push32=, 256($16) + i32.const $push122=, 256 + i32.add $push123=, $16, $pop122 + i32.const $push181=, 8 + i32.add $push30=, $pop123, $pop181 + i64.load $push31=, 0($pop30) + call __subtf3@FUNCTION, $pop125, $pop185, $pop182, $pop32, $pop31 + i32.const $push180=, 0 + i32.const $push179=, 8 + i32.add $push33=, $16, $pop179 + i64.load $push178=, 0($pop33) + tee_local $push177=, $9=, $pop178 + i64.store Y1+8($pop180), $pop177 + i32.const $push176=, 0 + i64.load $push175=, 0($16) + tee_local $push174=, $8=, $pop175 + i64.store Y1($pop176), $pop174 + i32.const $push173=, 0 + i64.store S+8($pop173), $4 + i32.const $push172=, 0 + i64.store S($pop172), $5 + i32.const $push171=, 0 + i32.const $push126=, 96 + i32.add $push127=, $16, $pop126 + i32.const $push170=, 8 + i32.add $push34=, $pop127, $pop170 + i64.load $push169=, 0($pop34) + tee_local $push168=, $13=, $pop169 + i64.store T+8($pop171), $pop168 + i32.const $push167=, 0 + i64.load $push166=, 96($16) + tee_local $push165=, $12=, $pop166 + i64.store T($pop167), $pop165 + i32.const $push164=, 0 + i32.const $push128=, 32 + i32.add $push129=, $16, $pop128 + i32.const $push163=, 8 + i32.add $push35=, $pop129, $pop163 + i64.load $push162=, 0($pop35) + tee_local $push161=, $15=, $pop162 + i64.store R+8($pop164), $pop161 + i32.const $push160=, 0 + i64.load $push159=, 32($16) + tee_local $push158=, $14=, $pop159 + i64.store R($pop160), $pop158 + i32.const $push157=, 0 + i32.const $push130=, 176 + i32.add $push131=, $16, $pop130 + i32.const $push156=, 8 + i32.add $push36=, $pop131, $pop156 + i64.load $push155=, 0($pop36) + tee_local $push154=, $11=, $pop155 + i64.store X+8($pop157), $pop154 + i32.const $push153=, 0 + i64.load $push152=, 176($16) + tee_local $push151=, $10=, $pop152 + i64.store X($pop153), $pop151 + i32.const $push150=, 0 + i32.const $push132=, 64 + i32.add $push133=, $16, $pop132 + i32.const $push149=, 8 + i32.add $push37=, $pop133, $pop149 + i64.load $push148=, 0($pop37) + tee_local $push147=, $3=, $pop148 + i64.store Y+8($pop150), $pop147 + i32.const $push146=, 0 + i64.load $push145=, 64($16) + tee_local $push144=, $2=, $pop145 + i64.store Y($pop146), $pop144 + i32.const $push143=, 0 + i32.const $push134=, 144 + i32.add $push135=, $16, $pop134 + i32.const $push142=, 8 + i32.add $push38=, $pop135, $pop142 + i64.load $push141=, 0($pop38) + tee_local $push140=, $1=, $pop141 + i64.store Z+8($pop143), $pop140 + i32.const $push139=, 0 + i64.load $push138=, 144($16) + tee_local $push137=, $0=, $pop138 + i64.store Z($pop139), $pop137 + block + i64.const $push136=, 0 + i64.const $push39=, 4612354521497075712 + i32.call $push40=, __netf2@FUNCTION, $7, $6, $pop136, $pop39 + br_if 0, $pop40 # 0: down to label0 +# BB#1: # %entry + i64.const $push244=, 0 + i64.const $push41=, 4613097791357452288 + i32.call $push42=, __netf2@FUNCTION, $12, $13, $pop244, $pop41 + br_if 0, $pop42 # 0: down to label0 +# BB#2: # %entry + i64.const $push245=, 0 + i64.const $push43=, 4613150567915585536 + i32.call $push44=, __netf2@FUNCTION, $5, $4, $pop245, $pop43 + br_if 0, $pop44 # 0: down to label0 +# BB#3: # %entry + i64.const $push246=, 0 + i64.const $push45=, 4613517804799262720 + i32.call $push46=, __netf2@FUNCTION, $14, $15, $pop246, $pop45 + br_if 0, $pop46 # 0: down to label0 +# BB#4: # %entry + i64.const $push247=, 0 + i64.const $push47=, 4613503511148101632 + i32.call $push48=, __netf2@FUNCTION, $8, $9, $pop247, $pop47 + br_if 0, $pop48 # 0: down to label0 +# BB#5: # %entry + i64.const $push248=, 0 + i64.const $push49=, 4613040616752807936 + i32.call $push50=, __netf2@FUNCTION, $10, $11, $pop248, $pop49 + br_if 0, $pop50 # 0: down to label0 +# BB#6: # %entry + i64.const $push249=, 0 + i64.const $push51=, 4613110985496985600 + i32.call $push52=, __netf2@FUNCTION, $0, $1, $pop249, $pop51 + br_if 0, $pop52 # 0: down to label0 +# BB#7: # %entry + i64.const $push250=, 0 + i64.const $push53=, 4612961451915608064 + i32.call $push54=, __eqtf2@FUNCTION, $2, $3, $pop250, $pop53 + br_if 0, $pop54 # 0: down to label0 +# BB#8: # %if.end + i32.const $push55=, 0 + call exit@FUNCTION, $pop55 + unreachable +.LBB0_9: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden C # @C + .type C,@object + .section .data.C,"aw",@progbits + .globl C + .p2align 4 +C: + .int64 0 # fp128 5 + .int64 4612037862148276224 + .size C, 16 + + .hidden U # @U + .type U,@object + .section .data.U,"aw",@progbits + .globl U + .p2align 4 +U: + .int64 0 # fp128 1 + .int64 4611404543450677248 + .size U, 16 + + .hidden Y2 # @Y2 + .type Y2,@object + .section .data.Y2,"aw",@progbits + .globl Y2 + .p2align 4 +Y2: + .int64 0 # fp128 11 + .int64 4612354521497075712 + .size Y2, 16 + + .hidden Y1 # @Y1 + .type Y1,@object + .section .data.Y1,"aw",@progbits + .globl Y1 + .p2align 4 +Y1: + .int64 0 # fp128 17 + .int64 4612548035543564288 + .size Y1, 16 + + .hidden X # @X + .type X,@object + .section .bss.X,"aw",@nobits + .globl X + .p2align 4 +X: + .int64 0 # fp128 0 + .int64 0 + .size X, 16 + + .hidden Y # @Y + .type Y,@object + .section .bss.Y,"aw",@nobits + .globl Y + .p2align 4 +Y: + .int64 0 # fp128 0 + .int64 0 + .size Y, 16 + + .hidden Z # @Z + .type Z,@object + .section .bss.Z,"aw",@nobits + .globl Z + .p2align 4 +Z: + .int64 0 # fp128 0 + .int64 0 + .size Z, 16 + + .hidden T # @T + .type T,@object + .section .bss.T,"aw",@nobits + .globl T + .p2align 4 +T: + .int64 0 # fp128 0 + .int64 0 + .size T, 16 + + .hidden R # @R + .type R,@object + .section .bss.R,"aw",@nobits + .globl R + .p2align 4 +R: + .int64 0 # fp128 0 + .int64 0 + .size R, 16 + + .hidden S # @S + .type S,@object + .section .bss.S,"aw",@nobits + .globl S + .p2align 4 +S: + .int64 0 # fp128 0 + .int64 0 + .size S, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/restrict-1.c.s b/src/binaryen/test/torture-s/restrict-1.c.s new file mode 100644 index 0000000000..0a3c4262a3 --- /dev/null +++ b/src/binaryen/test/torture-s/restrict-1.c.s @@ -0,0 +1,64 @@ + .text + .file "restrict-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store 4($0), $pop0 + i32.load $push2=, 0($2) + i32.load $push1=, 0($1) + i32.add $push3=, $pop2, $pop1 + i32.store 0($0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .local i32 +# BB#0: # %entry + i32.load $push6=, 0($0) + tee_local $push5=, $1=, $pop6 + i32.const $push0=, 1 + i32.shl $push1=, $pop5, $pop0 + i64.extend_u/i32 $push2=, $pop1 + i64.store 0($0):p2align=2, $pop2 + block + i32.const $push4=, 1 + i32.ne $push3=, $1, $pop4 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + return +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %bar.exit + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/scal-to-vec1.c.s b/src/binaryen/test/torture-s/scal-to-vec1.c.s new file mode 100644 index 0000000000..b03137aae2 --- /dev/null +++ b/src/binaryen/test/torture-s/scal-to-vec1.c.s @@ -0,0 +1,831 @@ + .text + .file "scal-to-vec1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.const $push2=, 0 + i32.load $push317=, one($pop2) + tee_local $push316=, $2=, $pop317 + i32.const $push3=, 16 + i32.shl $push315=, $pop316, $pop3 + tee_local $push314=, $3=, $pop315 + i32.const $push313=, 16 + i32.shr_s $push312=, $pop314, $pop313 + tee_local $push311=, $4=, $pop312 + i32.const $push310=, 2 + i32.add $push7=, $pop311, $pop310 + i32.const $push4=, 131072 + i32.add $push5=, $3, $pop4 + i32.const $push309=, 16 + i32.shr_s $push6=, $pop5, $pop309 + i32.ne $push8=, $pop7, $pop6 + br_if 0, $pop8 # 0: down to label0 +# BB#1: # %entry + i32.const $push319=, 3 + i32.const $push318=, 3 + i32.ne $push9=, $pop319, $pop318 + br_if 0, $pop9 # 0: down to label0 +# BB#2: # %entry + i32.const $push321=, 4 + i32.const $push320=, 4 + i32.ne $push10=, $pop321, $pop320 + br_if 0, $pop10 # 0: down to label0 +# BB#3: # %entry + i32.const $push323=, 5 + i32.const $push322=, 5 + i32.ne $push11=, $pop323, $pop322 + br_if 0, $pop11 # 0: down to label0 +# BB#4: # %entry + i32.const $push325=, 6 + i32.const $push324=, 6 + i32.ne $push12=, $pop325, $pop324 + br_if 0, $pop12 # 0: down to label0 +# BB#5: # %entry + i32.const $push327=, 7 + i32.const $push326=, 7 + i32.ne $push13=, $pop327, $pop326 + br_if 0, $pop13 # 0: down to label0 +# BB#6: # %entry + i32.const $push0=, 8 + i32.const $push328=, 8 + i32.ne $push14=, $pop0, $pop328 + br_if 0, $pop14 # 0: down to label0 +# BB#7: # %entry + i32.const $push1=, 9 + i32.const $push329=, 9 + i32.ne $push15=, $pop1, $pop329 + br_if 0, $pop15 # 0: down to label0 +# BB#8: # %for.cond.7 + i32.const $push332=, 2 + i32.sub $push23=, $pop332, $4 + i32.const $push331=, 2 + i32.sub $push24=, $pop331, $2 + i32.const $push25=, 16 + i32.shl $push26=, $pop24, $pop25 + i32.const $push330=, 16 + i32.shr_s $push27=, $pop26, $pop330 + i32.ne $push28=, $pop23, $pop27 + br_if 0, $pop28 # 0: down to label0 +# BB#9: # %for.cond.7 + i32.const $push334=, 2 + i32.const $push333=, 1 + i32.sub $push16=, $pop334, $pop333 + i32.const $push29=, 1 + i32.ne $push30=, $pop16, $pop29 + br_if 0, $pop30 # 0: down to label0 +# BB#10: # %for.cond.7 + i32.const $push336=, 2 + i32.const $push335=, 2 + i32.sub $push17=, $pop336, $pop335 + br_if 0, $pop17 # 0: down to label0 +# BB#11: # %for.cond.7 + i32.const $push338=, 2 + i32.const $push337=, 3 + i32.sub $push18=, $pop338, $pop337 + i32.const $push31=, -1 + i32.ne $push32=, $pop18, $pop31 + br_if 0, $pop32 # 0: down to label0 +# BB#12: # %for.cond.7 + i32.const $push340=, 2 + i32.const $push339=, 4 + i32.sub $push19=, $pop340, $pop339 + i32.const $push33=, -2 + i32.ne $push34=, $pop19, $pop33 + br_if 0, $pop34 # 0: down to label0 +# BB#13: # %for.cond.7 + i32.const $push342=, 2 + i32.const $push341=, 5 + i32.sub $push20=, $pop342, $pop341 + i32.const $push35=, -3 + i32.ne $push36=, $pop20, $pop35 + br_if 0, $pop36 # 0: down to label0 +# BB#14: # %for.cond.7 + i32.const $push344=, 2 + i32.const $push343=, 6 + i32.sub $push21=, $pop344, $pop343 + i32.const $push37=, -4 + i32.ne $push38=, $pop21, $pop37 + br_if 0, $pop38 # 0: down to label0 +# BB#15: # %for.cond.7 + i32.const $push346=, 2 + i32.const $push345=, 7 + i32.sub $push22=, $pop346, $pop345 + i32.const $push39=, -5 + i32.ne $push40=, $pop22, $pop39 + br_if 0, $pop40 # 0: down to label0 +# BB#16: # %for.cond17.7 + i32.const $push48=, 15 + i32.shr_s $push49=, $3, $pop48 + i32.const $push50=, 17 + i32.shl $push51=, $2, $pop50 + i32.const $push52=, 16 + i32.shr_s $push53=, $pop51, $pop52 + i32.ne $push54=, $pop49, $pop53 + br_if 0, $pop54 # 0: down to label0 +# BB#17: # %for.cond17.7 + i32.const $push348=, 1 + i32.const $push347=, 1 + i32.shl $push41=, $pop348, $pop347 + i32.const $push55=, 2 + i32.ne $push56=, $pop41, $pop55 + br_if 0, $pop56 # 0: down to label0 +# BB#18: # %for.cond17.7 + i32.const $push350=, 2 + i32.const $push349=, 1 + i32.shl $push42=, $pop350, $pop349 + i32.const $push57=, 4 + i32.ne $push58=, $pop42, $pop57 + br_if 0, $pop58 # 0: down to label0 +# BB#19: # %for.cond17.7 + i32.const $push352=, 3 + i32.const $push351=, 1 + i32.shl $push43=, $pop352, $pop351 + i32.const $push59=, 6 + i32.ne $push60=, $pop43, $pop59 + br_if 0, $pop60 # 0: down to label0 +# BB#20: # %for.cond17.7 + i32.const $push354=, 4 + i32.const $push353=, 1 + i32.shl $push44=, $pop354, $pop353 + i32.const $push61=, 8 + i32.ne $push62=, $pop44, $pop61 + br_if 0, $pop62 # 0: down to label0 +# BB#21: # %for.cond17.7 + i32.const $push356=, 5 + i32.const $push355=, 1 + i32.shl $push45=, $pop356, $pop355 + i32.const $push63=, 10 + i32.ne $push64=, $pop45, $pop63 + br_if 0, $pop64 # 0: down to label0 +# BB#22: # %for.cond17.7 + i32.const $push358=, 6 + i32.const $push357=, 1 + i32.shl $push46=, $pop358, $pop357 + i32.const $push65=, 12 + i32.ne $push66=, $pop46, $pop65 + br_if 0, $pop66 # 0: down to label0 +# BB#23: # %for.cond17.7 + i32.const $push360=, 7 + i32.const $push359=, 1 + i32.shl $push47=, $pop360, $pop359 + i32.const $push67=, 14 + i32.ne $push68=, $pop47, $pop67 + br_if 0, $pop68 # 0: down to label0 +# BB#24: # %for.cond37.7 + i32.const $push70=, 2 + i32.div_s $3=, $pop70, $4 + i32.const $push377=, 2 + i32.const $push376=, 1 + i32.div_u $5=, $pop377, $pop376 + i32.const $push375=, 2 + i32.const $push374=, 2 + i32.div_s $6=, $pop375, $pop374 + i32.const $push373=, 2 + i32.const $push372=, 16 + i32.shl $push82=, $2, $pop372 + i32.const $push371=, 16 + i32.shr_s $push83=, $pop82, $pop371 + i32.div_s $7=, $pop373, $pop83 + i32.const $push370=, 2 + i32.const $push369=, 3 + i32.div_s $push71=, $pop370, $pop369 + i32.const $push368=, 2 + i32.const $push367=, 4 + i32.div_s $push72=, $pop368, $pop367 + i32.or $push73=, $pop71, $pop72 + i32.const $push366=, 2 + i32.const $push365=, 5 + i32.div_s $push74=, $pop366, $pop365 + i32.or $push75=, $pop73, $pop74 + i32.const $push364=, 2 + i32.const $push363=, 6 + i32.div_s $push76=, $pop364, $pop363 + i32.or $push77=, $pop75, $pop76 + i32.const $push362=, 2 + i32.const $push361=, 7 + i32.div_s $push78=, $pop362, $pop361 + i32.or $push79=, $pop77, $pop78 + i32.const $push80=, 65535 + i32.and $push81=, $pop79, $pop80 + br_if 0, $pop81 # 0: down to label0 +# BB#25: # %for.cond37.7 + i32.const $push379=, 16 + i32.shl $push84=, $7, $pop379 + i32.const $push378=, 16 + i32.shr_s $push69=, $pop84, $pop378 + i32.ne $push85=, $3, $pop69 + br_if 0, $pop85 # 0: down to label0 +# BB#26: # %for.cond37.7 + i32.const $push86=, 2 + i32.ne $push87=, $5, $pop86 + br_if 0, $pop87 # 0: down to label0 +# BB#27: # %for.cond37.7 + i32.const $push380=, 65535 + i32.and $push88=, $6, $pop380 + i32.const $push89=, 1 + i32.ne $push90=, $pop88, $pop89 + br_if 0, $pop90 # 0: down to label0 +# BB#28: # %for.cond57.7 + i32.const $push92=, 2 + i32.rem_s $3=, $pop92, $4 + i32.const $push398=, 2 + i32.const $push397=, 3 + i32.rem_s $5=, $pop398, $pop397 + i32.const $push396=, 2 + i32.const $push395=, 4 + i32.rem_s $6=, $pop396, $pop395 + i32.const $push394=, 2 + i32.const $push393=, 16 + i32.shl $push97=, $2, $pop393 + i32.const $push392=, 16 + i32.shr_s $push98=, $pop97, $pop392 + i32.rem_s $7=, $pop394, $pop98 + i32.const $push391=, 2 + i32.const $push390=, 5 + i32.rem_s $8=, $pop391, $pop390 + i32.const $push389=, 2 + i32.const $push388=, 6 + i32.rem_s $9=, $pop389, $pop388 + i32.const $push387=, 2 + i32.const $push386=, 7 + i32.rem_s $10=, $pop387, $pop386 + i32.const $push385=, 2 + i32.const $push384=, 1 + i32.rem_u $push93=, $pop385, $pop384 + i32.const $push383=, 2 + i32.const $push382=, 2 + i32.rem_s $push94=, $pop383, $pop382 + i32.or $push95=, $pop93, $pop94 + i32.const $push381=, 65535 + i32.and $push96=, $pop95, $pop381 + br_if 0, $pop96 # 0: down to label0 +# BB#29: # %for.cond57.7 + i32.const $push400=, 16 + i32.shl $push99=, $7, $pop400 + i32.const $push399=, 16 + i32.shr_s $push91=, $pop99, $pop399 + i32.ne $push100=, $3, $pop91 + br_if 0, $pop100 # 0: down to label0 +# BB#30: # %for.cond57.7 + i32.const $push402=, 65535 + i32.and $push101=, $5, $pop402 + i32.const $push401=, 2 + i32.ne $push102=, $pop101, $pop401 + br_if 0, $pop102 # 0: down to label0 +# BB#31: # %for.cond57.7 + i32.const $push404=, 65535 + i32.and $push103=, $6, $pop404 + i32.const $push403=, 2 + i32.ne $push104=, $pop103, $pop403 + br_if 0, $pop104 # 0: down to label0 +# BB#32: # %for.cond57.7 + i32.const $push406=, 65535 + i32.and $push105=, $8, $pop406 + i32.const $push405=, 2 + i32.ne $push106=, $pop105, $pop405 + br_if 0, $pop106 # 0: down to label0 +# BB#33: # %for.cond57.7 + i32.const $push408=, 65535 + i32.and $push107=, $9, $pop408 + i32.const $push407=, 2 + i32.ne $push108=, $pop107, $pop407 + br_if 0, $pop108 # 0: down to label0 +# BB#34: # %for.cond57.7 + i32.const $push410=, 65535 + i32.and $push109=, $10, $pop410 + i32.const $push409=, 2 + i32.ne $push110=, $pop109, $pop409 + br_if 0, $pop110 # 0: down to label0 +# BB#35: # %for.cond77.7 + i32.const $push414=, 2 + i32.xor $push118=, $2, $pop414 + i32.const $push413=, 65535 + i32.and $push412=, $pop118, $pop413 + tee_local $push411=, $3=, $pop412 + i32.ne $push119=, $pop411, $3 + br_if 0, $pop119 # 0: down to label0 +# BB#36: # %for.cond77.7 + i32.const $push416=, 1 + i32.const $push415=, 2 + i32.or $push111=, $pop416, $pop415 + i32.const $push120=, 3 + i32.ne $push121=, $pop111, $pop120 + br_if 0, $pop121 # 0: down to label0 +# BB#37: # %for.cond77.7 + i32.const $push418=, 2 + i32.const $push417=, 2 + i32.xor $push112=, $pop418, $pop417 + br_if 0, $pop112 # 0: down to label0 +# BB#38: # %for.cond77.7 + i32.const $push420=, 3 + i32.const $push419=, 2 + i32.xor $push113=, $pop420, $pop419 + i32.const $push122=, 1 + i32.ne $push123=, $pop113, $pop122 + br_if 0, $pop123 # 0: down to label0 +# BB#39: # %for.cond77.7 + i32.const $push422=, 4 + i32.const $push421=, 2 + i32.xor $push114=, $pop422, $pop421 + i32.const $push124=, 6 + i32.ne $push125=, $pop114, $pop124 + br_if 0, $pop125 # 0: down to label0 +# BB#40: # %for.cond77.7 + i32.const $push424=, 5 + i32.const $push423=, 2 + i32.xor $push115=, $pop424, $pop423 + i32.const $push126=, 7 + i32.ne $push127=, $pop115, $pop126 + br_if 0, $pop127 # 0: down to label0 +# BB#41: # %for.cond77.7 + i32.const $push426=, 6 + i32.const $push425=, 2 + i32.xor $push116=, $pop426, $pop425 + i32.const $push128=, 4 + i32.ne $push129=, $pop116, $pop128 + br_if 0, $pop129 # 0: down to label0 +# BB#42: # %for.cond77.7 + i32.const $push428=, 7 + i32.const $push427=, 2 + i32.xor $push117=, $pop428, $pop427 + i32.const $push130=, 5 + i32.ne $push131=, $pop117, $pop130 + br_if 0, $pop131 # 0: down to label0 +# BB#43: # %for.cond97.7 + i32.const $push431=, 4 + i32.const $push430=, 5 + i32.or $push136=, $pop431, $pop430 + i32.const $push429=, 2 + i32.and $push137=, $pop136, $pop429 + br_if 0, $pop137 # 0: down to label0 +# BB#44: # %for.cond97.7 + i32.const $push434=, 2 + i32.and $push433=, $2, $pop434 + tee_local $push432=, $3=, $pop433 + i32.ne $push138=, $pop432, $3 + br_if 0, $pop138 # 0: down to label0 +# BB#45: # %for.cond97.7 + i32.const $push139=, 0 + br_if 0, $pop139 # 0: down to label0 +# BB#46: # %for.cond97.7 + i32.const $push437=, 2 + i32.const $push436=, 2 + i32.and $push132=, $pop437, $pop436 + i32.const $push435=, 2 + i32.ne $push140=, $pop132, $pop435 + br_if 0, $pop140 # 0: down to label0 +# BB#47: # %for.cond97.7 + i32.const $push440=, 3 + i32.const $push439=, 2 + i32.and $push133=, $pop440, $pop439 + i32.const $push438=, 2 + i32.ne $push141=, $pop133, $pop438 + br_if 0, $pop141 # 0: down to label0 +# BB#48: # %for.cond97.7 + i32.const $push443=, 6 + i32.const $push442=, 2 + i32.and $push134=, $pop443, $pop442 + i32.const $push441=, 2 + i32.ne $push142=, $pop134, $pop441 + br_if 0, $pop142 # 0: down to label0 +# BB#49: # %for.cond97.7 + i32.const $push446=, 7 + i32.const $push445=, 2 + i32.and $push135=, $pop446, $pop445 + i32.const $push444=, 2 + i32.ne $push143=, $pop135, $pop444 + br_if 0, $pop143 # 0: down to label0 +# BB#50: # %for.cond117.7 + i32.const $push449=, 2 + i32.or $push151=, $2, $pop449 + i32.const $push152=, 65535 + i32.and $push448=, $pop151, $pop152 + tee_local $push447=, $3=, $pop448 + i32.ne $push153=, $pop447, $3 + br_if 0, $pop153 # 0: down to label0 +# BB#51: # %for.cond117.7 + i32.const $push451=, 1 + i32.const $push450=, 2 + i32.or $push144=, $pop451, $pop450 + i32.const $push154=, 3 + i32.ne $push155=, $pop144, $pop154 + br_if 0, $pop155 # 0: down to label0 +# BB#52: # %for.cond117.7 + i32.const $push453=, 2 + i32.const $push452=, 2 + i32.or $push145=, $pop453, $pop452 + i32.const $push156=, 2 + i32.ne $push157=, $pop145, $pop156 + br_if 0, $pop157 # 0: down to label0 +# BB#53: # %for.cond117.7 + i32.const $push455=, 3 + i32.const $push454=, 2 + i32.or $push146=, $pop455, $pop454 + i32.const $push158=, 3 + i32.ne $push159=, $pop146, $pop158 + br_if 0, $pop159 # 0: down to label0 +# BB#54: # %for.cond117.7 + i32.const $push457=, 4 + i32.const $push456=, 2 + i32.or $push147=, $pop457, $pop456 + i32.const $push160=, 6 + i32.ne $push161=, $pop147, $pop160 + br_if 0, $pop161 # 0: down to label0 +# BB#55: # %for.cond117.7 + i32.const $push459=, 5 + i32.const $push458=, 2 + i32.or $push148=, $pop459, $pop458 + i32.const $push162=, 7 + i32.ne $push163=, $pop148, $pop162 + br_if 0, $pop163 # 0: down to label0 +# BB#56: # %for.cond117.7 + i32.const $push461=, 6 + i32.const $push460=, 2 + i32.or $push149=, $pop461, $pop460 + i32.const $push164=, 6 + i32.ne $push165=, $pop149, $pop164 + br_if 0, $pop165 # 0: down to label0 +# BB#57: # %for.cond117.7 + i32.const $push463=, 7 + i32.const $push462=, 2 + i32.or $push150=, $pop463, $pop462 + i32.const $push166=, 7 + i32.ne $push167=, $pop150, $pop166 + br_if 0, $pop167 # 0: down to label0 +# BB#58: # %for.cond137.7 + i32.const $push467=, 2 + i32.shl $push175=, $pop467, $4 + i32.const $push466=, 2 + i32.const $push465=, 65535 + i32.and $push176=, $2, $pop465 + i32.shl $push177=, $pop466, $pop176 + i32.const $push178=, 16 + i32.shl $push179=, $pop177, $pop178 + i32.const $push464=, 16 + i32.shr_s $push180=, $pop179, $pop464 + i32.ne $push181=, $pop175, $pop180 + br_if 0, $pop181 # 0: down to label0 +# BB#59: # %for.cond137.7 + i32.const $push470=, 2 + i32.const $push469=, 1 + i32.shl $push168=, $pop470, $pop469 + i32.const $push468=, 65535 + i32.and $push188=, $pop168, $pop468 + i32.const $push189=, 4 + i32.ne $push190=, $pop188, $pop189 + br_if 0, $pop190 # 0: down to label0 +# BB#60: # %for.cond137.7 + i32.const $push474=, 2 + i32.const $push473=, 2 + i32.const $push472=, 65535 + i32.and $push182=, $pop473, $pop472 + i32.shl $push169=, $pop474, $pop182 + i32.const $push471=, 65535 + i32.and $push191=, $pop169, $pop471 + i32.const $push192=, 8 + i32.ne $push193=, $pop191, $pop192 + br_if 0, $pop193 # 0: down to label0 +# BB#61: # %for.cond137.7 + i32.const $push478=, 2 + i32.const $push477=, 3 + i32.const $push476=, 65535 + i32.and $push183=, $pop477, $pop476 + i32.shl $push170=, $pop478, $pop183 + i32.const $push475=, 65535 + i32.and $push194=, $pop170, $pop475 + i32.const $push195=, 16 + i32.ne $push196=, $pop194, $pop195 + br_if 0, $pop196 # 0: down to label0 +# BB#62: # %for.cond137.7 + i32.const $push482=, 2 + i32.const $push481=, 4 + i32.const $push480=, 65535 + i32.and $push184=, $pop481, $pop480 + i32.shl $push171=, $pop482, $pop184 + i32.const $push479=, 65535 + i32.and $push197=, $pop171, $pop479 + i32.const $push198=, 32 + i32.ne $push199=, $pop197, $pop198 + br_if 0, $pop199 # 0: down to label0 +# BB#63: # %for.cond137.7 + i32.const $push486=, 2 + i32.const $push485=, 5 + i32.const $push484=, 65535 + i32.and $push185=, $pop485, $pop484 + i32.shl $push172=, $pop486, $pop185 + i32.const $push483=, 65535 + i32.and $push200=, $pop172, $pop483 + i32.const $push201=, 64 + i32.ne $push202=, $pop200, $pop201 + br_if 0, $pop202 # 0: down to label0 +# BB#64: # %for.cond137.7 + i32.const $push490=, 2 + i32.const $push489=, 6 + i32.const $push488=, 65535 + i32.and $push186=, $pop489, $pop488 + i32.shl $push173=, $pop490, $pop186 + i32.const $push487=, 65535 + i32.and $push203=, $pop173, $pop487 + i32.const $push204=, 128 + i32.ne $push205=, $pop203, $pop204 + br_if 0, $pop205 # 0: down to label0 +# BB#65: # %for.cond137.7 + i32.const $push494=, 2 + i32.const $push493=, 7 + i32.const $push492=, 65535 + i32.and $push187=, $pop493, $pop492 + i32.shl $push174=, $pop494, $pop187 + i32.const $push491=, 65535 + i32.and $push206=, $pop174, $pop491 + i32.const $push207=, 256 + i32.ne $push208=, $pop206, $pop207 + br_if 0, $pop208 # 0: down to label0 +# BB#66: # %for.cond157.7 + i32.const $push513=, 2 + i32.const $push512=, 2 + i32.const $push511=, 65535 + i32.and $push212=, $pop512, $pop511 + i32.shr_u $push213=, $pop513, $pop212 + i32.const $push510=, 2 + i32.const $push509=, 3 + i32.const $push508=, 65535 + i32.and $push214=, $pop509, $pop508 + i32.shr_u $push215=, $pop510, $pop214 + i32.or $push216=, $pop213, $pop215 + i32.const $push507=, 2 + i32.const $push506=, 4 + i32.const $push505=, 65535 + i32.and $push217=, $pop506, $pop505 + i32.shr_u $push218=, $pop507, $pop217 + i32.or $push219=, $pop216, $pop218 + i32.const $push504=, 2 + i32.const $push503=, 5 + i32.const $push502=, 65535 + i32.and $push220=, $pop503, $pop502 + i32.shr_u $push221=, $pop504, $pop220 + i32.or $push222=, $pop219, $pop221 + i32.const $push501=, 2 + i32.const $push500=, 6 + i32.const $push499=, 65535 + i32.and $push223=, $pop500, $pop499 + i32.shr_u $push224=, $pop501, $pop223 + i32.or $push225=, $pop222, $pop224 + i32.const $push498=, 2 + i32.const $push497=, 7 + i32.const $push496=, 65535 + i32.and $push226=, $pop497, $pop496 + i32.shr_u $push227=, $pop498, $pop226 + i32.or $push228=, $pop225, $pop227 + i32.const $push495=, 65535 + i32.and $push229=, $pop228, $pop495 + br_if 0, $pop229 # 0: down to label0 +# BB#67: # %for.cond157.7 + i32.const $push517=, 2 + i32.shr_u $push209=, $pop517, $4 + i32.const $push516=, 2 + i32.const $push515=, 65535 + i32.and $push230=, $2, $pop515 + i32.shr_u $push231=, $pop516, $pop230 + i32.const $push232=, 16 + i32.shl $push233=, $pop231, $pop232 + i32.const $push514=, 16 + i32.shr_s $push210=, $pop233, $pop514 + i32.ne $push234=, $pop209, $pop210 + br_if 0, $pop234 # 0: down to label0 +# BB#68: # %for.cond157.7 + i32.const $push519=, 2 + i32.const $push518=, 1 + i32.shr_u $push211=, $pop519, $pop518 + i32.const $push235=, 65535 + i32.and $push236=, $pop211, $pop235 + i32.const $push237=, 1 + i32.ne $push238=, $pop236, $pop237 + br_if 0, $pop238 # 0: down to label0 +# BB#69: # %for.cond198.7 + i32.const $push521=, -2 + i32.add $push246=, $4, $pop521 + i32.const $push247=, 16 + i32.shl $push248=, $2, $pop247 + i32.const $push249=, -131072 + i32.add $push250=, $pop248, $pop249 + i32.const $push520=, 16 + i32.shr_s $push251=, $pop250, $pop520 + i32.ne $push252=, $pop246, $pop251 + br_if 0, $pop252 # 0: down to label0 +# BB#70: # %for.cond198.7 + i32.const $push523=, 1 + i32.const $push522=, -2 + i32.or $push239=, $pop523, $pop522 + i32.const $push253=, -1 + i32.ne $push254=, $pop239, $pop253 + br_if 0, $pop254 # 0: down to label0 +# BB#71: # %for.cond198.7 + i32.const $push525=, 2 + i32.const $push524=, -2 + i32.add $push240=, $pop525, $pop524 + br_if 0, $pop240 # 0: down to label0 +# BB#72: # %for.cond198.7 + i32.const $push527=, 3 + i32.const $push526=, -2 + i32.add $push241=, $pop527, $pop526 + i32.const $push255=, 1 + i32.ne $push256=, $pop241, $pop255 + br_if 0, $pop256 # 0: down to label0 +# BB#73: # %for.cond198.7 + i32.const $push529=, 4 + i32.const $push528=, -2 + i32.add $push242=, $pop529, $pop528 + i32.const $push257=, 2 + i32.ne $push258=, $pop242, $pop257 + br_if 0, $pop258 # 0: down to label0 +# BB#74: # %for.cond198.7 + i32.const $push531=, 5 + i32.const $push530=, -2 + i32.add $push243=, $pop531, $pop530 + i32.const $push259=, 3 + i32.ne $push260=, $pop243, $pop259 + br_if 0, $pop260 # 0: down to label0 +# BB#75: # %for.cond198.7 + i32.const $push533=, 6 + i32.const $push532=, -2 + i32.add $push244=, $pop533, $pop532 + i32.const $push261=, 4 + i32.ne $push262=, $pop244, $pop261 + br_if 0, $pop262 # 0: down to label0 +# BB#76: # %for.cond198.7 + i32.const $push535=, 7 + i32.const $push534=, -2 + i32.add $push245=, $pop535, $pop534 + i32.const $push263=, 5 + i32.ne $push264=, $pop245, $pop263 + br_if 0, $pop264 # 0: down to label0 +# BB#77: # %for.cond240.7 + i32.const $push552=, 2 + i32.const $push267=, 2 + i32.div_s $3=, $pop552, $pop267 + i32.const $push551=, 3 + i32.const $push550=, 2 + i32.div_s $5=, $pop551, $pop550 + i32.const $push549=, 4 + i32.const $push548=, 2 + i32.div_s $6=, $pop549, $pop548 + i32.const $push547=, 5 + i32.const $push546=, 2 + i32.div_s $7=, $pop547, $pop546 + i32.const $push545=, 6 + i32.const $push544=, 2 + i32.div_s $8=, $pop545, $pop544 + i32.const $push543=, 7 + i32.const $push542=, 2 + i32.div_s $9=, $pop543, $pop542 + i32.const $push265=, 16 + i32.shl $push266=, $2, $pop265 + i32.const $push541=, 16 + i32.shr_s $push540=, $pop266, $pop541 + tee_local $push539=, $10=, $pop540 + i32.const $push538=, 2 + i32.div_s $push271=, $pop539, $pop538 + i32.const $push269=, 65535 + i32.and $push272=, $pop271, $pop269 + i32.const $push537=, 2 + i32.div_s $push268=, $10, $pop537 + i32.const $push536=, 65535 + i32.and $push270=, $pop268, $pop536 + i32.ne $push273=, $pop272, $pop270 + br_if 0, $pop273 # 0: down to label0 +# BB#78: # %for.cond240.7 + i32.const $push274=, 0 + br_if 0, $pop274 # 0: down to label0 +# BB#79: # %for.cond240.7 + i32.const $push554=, 65535 + i32.and $push275=, $3, $pop554 + i32.const $push553=, 1 + i32.ne $push276=, $pop275, $pop553 + br_if 0, $pop276 # 0: down to label0 +# BB#80: # %for.cond240.7 + i32.const $push556=, 65535 + i32.and $push277=, $5, $pop556 + i32.const $push555=, 1 + i32.ne $push278=, $pop277, $pop555 + br_if 0, $pop278 # 0: down to label0 +# BB#81: # %for.cond240.7 + i32.const $push558=, 65535 + i32.and $push279=, $6, $pop558 + i32.const $push557=, 2 + i32.ne $push280=, $pop279, $pop557 + br_if 0, $pop280 # 0: down to label0 +# BB#82: # %for.cond240.7 + i32.const $push560=, 65535 + i32.and $push281=, $7, $pop560 + i32.const $push559=, 2 + i32.ne $push282=, $pop281, $pop559 + br_if 0, $pop282 # 0: down to label0 +# BB#83: # %for.cond240.7 + i32.const $push562=, 65535 + i32.and $push283=, $8, $pop562 + i32.const $push561=, 3 + i32.ne $push284=, $pop283, $pop561 + br_if 0, $pop284 # 0: down to label0 +# BB#84: # %for.cond240.7 + i32.const $push564=, 65535 + i32.and $push285=, $9, $pop564 + i32.const $push563=, 3 + i32.ne $push286=, $pop285, $pop563 + br_if 0, $pop286 # 0: down to label0 +# BB#85: # %for.cond261.7 + i32.const $push580=, 2 + i32.const $push287=, 2 + i32.rem_s $3=, $pop580, $pop287 + i32.const $push579=, 3 + i32.const $push578=, 2 + i32.rem_s $5=, $pop579, $pop578 + i32.const $push577=, 4 + i32.const $push576=, 2 + i32.rem_s $6=, $pop577, $pop576 + i32.const $push575=, 5 + i32.const $push574=, 2 + i32.rem_s $7=, $pop575, $pop574 + i32.const $push573=, 6 + i32.const $push572=, 2 + i32.rem_s $8=, $pop573, $pop572 + i32.const $push571=, 7 + i32.const $push570=, 2 + i32.rem_s $9=, $pop571, $pop570 + i32.const $push569=, 2 + i32.rem_s $push288=, $4, $pop569 + i32.const $push289=, 16 + i32.shl $push290=, $2, $pop289 + i32.const $push568=, 16 + i32.shr_s $push291=, $pop290, $pop568 + i32.const $push567=, 2 + i32.rem_s $push292=, $pop291, $pop567 + i32.const $push566=, 16 + i32.shl $push293=, $pop292, $pop566 + i32.const $push565=, 16 + i32.shr_s $push294=, $pop293, $pop565 + i32.ne $push295=, $pop288, $pop294 + br_if 0, $pop295 # 0: down to label0 +# BB#86: # %for.cond261.7 + i32.const $push581=, 1 + i32.eqz $push588=, $pop581 + br_if 0, $pop588 # 0: down to label0 +# BB#87: # %for.cond261.7 + i32.const $push582=, 65535 + i32.and $push296=, $3, $pop582 + br_if 0, $pop296 # 0: down to label0 +# BB#88: # %for.cond261.7 + i32.const $push583=, 65535 + i32.and $push297=, $5, $pop583 + i32.const $push298=, 1 + i32.ne $push299=, $pop297, $pop298 + br_if 0, $pop299 # 0: down to label0 +# BB#89: # %for.cond261.7 + i32.const $push584=, 65535 + i32.and $push300=, $6, $pop584 + br_if 0, $pop300 # 0: down to label0 +# BB#90: # %for.cond261.7 + i32.const $push585=, 65535 + i32.and $push301=, $7, $pop585 + i32.const $push302=, 1 + i32.ne $push303=, $pop301, $pop302 + br_if 0, $pop303 # 0: down to label0 +# BB#91: # %for.cond261.7 + i32.const $push586=, 65535 + i32.and $push304=, $8, $pop586 + br_if 0, $pop304 # 0: down to label0 +# BB#92: # %for.cond261.7 + i32.const $push587=, 65535 + i32.and $push305=, $9, $pop587 + i32.const $push306=, 1 + i32.ne $push307=, $pop305, $pop306 + br_if 0, $pop307 # 0: down to label0 +# BB#93: # %for.cond667.1 + i32.const $push308=, 0 + return $pop308 +.LBB0_94: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden one # @one + .type one,@object + .section .data.one,"aw",@progbits + .globl one + .p2align 2 +one: + .int32 1 # 0x1 + .size one, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/scal-to-vec2.c.s b/src/binaryen/test/torture-s/scal-to-vec2.c.s new file mode 100644 index 0000000000..dfb018170f --- /dev/null +++ b/src/binaryen/test/torture-s/scal-to-vec2.c.s @@ -0,0 +1,405 @@ + .text + .file "scal-to-vec2.c" + .section .text.vlng,"ax",@progbits + .hidden vlng # -- Begin function vlng + .globl vlng + .type vlng,@function +vlng: # @vlng + .result i32 +# BB#0: # %entry + i32.const $push0=, 42 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size vlng, .Lfunc_end0-vlng + # -- End function + .section .text.vint,"ax",@progbits + .hidden vint # -- Begin function vint + .globl vint + .type vint,@function +vint: # @vint + .result i32 +# BB#0: # %entry + i32.const $push0=, 43 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size vint, .Lfunc_end1-vint + # -- End function + .section .text.vsrt,"ax",@progbits + .hidden vsrt # -- Begin function vsrt + .globl vsrt + .type vsrt,@function +vsrt: # @vsrt + .result i32 +# BB#0: # %entry + i32.const $push0=, 42 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size vsrt, .Lfunc_end2-vsrt + # -- End function + .section .text.vchr,"ax",@progbits + .hidden vchr # -- Begin function vchr + .globl vchr + .type vchr,@function +vchr: # @vchr + .result i32 +# BB#0: # %entry + i32.const $push0=, 42 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end3: + .size vchr, .Lfunc_end3-vchr + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push108=, 0 + i32.const $push106=, 0 + i32.load $push105=, __stack_pointer($pop106) + i32.const $push107=, 48 + i32.sub $push143=, $pop105, $pop107 + tee_local $push142=, $3=, $pop143 + i32.store __stack_pointer($pop108), $pop142 + i32.const $push141=, 7 + i32.store8 47($3), $pop141 + i32.const $push140=, 6 + i32.store8 46($3), $pop140 + i32.const $push139=, 5 + i32.store8 45($3), $pop139 + i32.const $push138=, 4 + i32.store8 44($3), $pop138 + i32.const $push137=, 3 + i32.store8 43($3), $pop137 + i32.const $push136=, 2 + i32.store8 42($3), $pop136 + i32.const $push135=, 1 + i32.store8 41($3), $pop135 + i32.store8 40($3), $0 + i32.const $push134=, 7 + i32.store8 39($3), $pop134 + i32.const $push133=, 6 + i32.store8 38($3), $pop133 + i32.const $push132=, 5 + i32.store8 37($3), $pop132 + i32.const $push131=, 4 + i32.store8 36($3), $pop131 + i32.const $push130=, 3 + i32.store8 35($3), $pop130 + i32.const $push129=, 2 + i32.store8 34($3), $pop129 + i32.const $push128=, 1 + i32.store8 33($3), $pop128 + i32.store8 32($3), $0 + i32.const $push127=, 7 + i32.store16 30($3), $pop127 + i32.const $push126=, 6 + i32.store16 28($3), $pop126 + i32.const $push125=, 5 + i32.store16 26($3), $pop125 + i32.const $push124=, 4 + i32.store16 24($3), $pop124 + i32.const $push123=, 3 + i32.store16 22($3), $pop123 + i32.const $push122=, 2 + i32.store16 20($3), $pop122 + i32.const $push121=, 1 + i32.store16 18($3), $pop121 + i32.store16 16($3), $0 + i32.const $push120=, 3 + i32.store 12($3), $pop120 + i32.const $push119=, 2 + i32.store 8($3), $pop119 + i32.const $push118=, 1 + i32.store 4($3), $pop118 + i32.store 0($3), $0 + block + i32.const $push12=, 24 + i32.shl $push15=, $0, $pop12 + i32.const $push117=, 24 + i32.shr_s $push16=, $pop15, $pop117 + i32.const $push11=, 42 + i32.add $push17=, $pop16, $pop11 + i32.const $push116=, 42 + i32.add $push115=, $0, $pop116 + tee_local $push114=, $2=, $pop115 + i32.const $push113=, 24 + i32.shl $push13=, $pop114, $pop113 + i32.const $push112=, 24 + i32.shr_s $push14=, $pop13, $pop112 + i32.ne $push18=, $pop17, $pop14 + br_if 0, $pop18 # 0: down to label0 +# BB#1: # %entry + i32.const $push145=, 43 + i32.const $push144=, 43 + i32.ne $push22=, $pop145, $pop144 + br_if 0, $pop22 # 0: down to label0 +# BB#2: # %entry + i32.const $push147=, 44 + i32.const $push146=, 44 + i32.ne $push23=, $pop147, $pop146 + br_if 0, $pop23 # 0: down to label0 +# BB#3: # %entry + i32.const $push149=, 45 + i32.const $push148=, 45 + i32.ne $push24=, $pop149, $pop148 + br_if 0, $pop24 # 0: down to label0 +# BB#4: # %entry + i32.const $push151=, 46 + i32.const $push150=, 46 + i32.ne $push25=, $pop151, $pop150 + br_if 0, $pop25 # 0: down to label0 +# BB#5: # %entry + i32.const $push153=, 47 + i32.const $push152=, 47 + i32.ne $push26=, $pop153, $pop152 + br_if 0, $pop26 # 0: down to label0 +# BB#6: # %entry + i32.const $push155=, 48 + i32.const $push154=, 48 + i32.ne $push27=, $pop155, $pop154 + br_if 0, $pop27 # 0: down to label0 +# BB#7: # %entry + i32.const $push157=, 49 + i32.const $push156=, 49 + i32.ne $push28=, $pop157, $pop156 + br_if 0, $pop28 # 0: down to label0 +# BB#8: # %for.cond.7 + i32.const $push29=, 24 + i32.shl $push30=, $0, $pop29 + i32.const $push160=, 24 + i32.shr_s $push31=, $pop30, $pop160 + i32.const $push32=, 42 + i32.add $push33=, $pop31, $pop32 + i32.const $push159=, 24 + i32.shl $push34=, $2, $pop159 + i32.const $push158=, 24 + i32.shr_s $push35=, $pop34, $pop158 + i32.ne $push36=, $pop33, $pop35 + br_if 0, $pop36 # 0: down to label0 +# BB#9: # %for.cond.7 + i32.const $push161=, 43 + i32.const $push37=, 43 + i32.ne $push38=, $pop161, $pop37 + br_if 0, $pop38 # 0: down to label0 +# BB#10: # %for.cond.7 + i32.const $push162=, 44 + i32.const $push39=, 44 + i32.ne $push40=, $pop162, $pop39 + br_if 0, $pop40 # 0: down to label0 +# BB#11: # %for.cond.7 + i32.const $push163=, 45 + i32.const $push41=, 45 + i32.ne $push42=, $pop163, $pop41 + br_if 0, $pop42 # 0: down to label0 +# BB#12: # %for.cond.11 + i32.load8_s $push43=, 44($3) + i32.const $push165=, 42 + i32.add $push44=, $pop43, $pop165 + i32.const $push164=, 46 + i32.ne $push45=, $pop44, $pop164 + br_if 0, $pop45 # 0: down to label0 +# BB#13: # %for.cond.12 + i32.load8_s $push46=, 45($3) + i32.const $push167=, 42 + i32.add $push47=, $pop46, $pop167 + i32.const $push166=, 47 + i32.ne $push48=, $pop47, $pop166 + br_if 0, $pop48 # 0: down to label0 +# BB#14: # %for.cond.13 + i32.load8_s $push49=, 46($3) + i32.const $push169=, 42 + i32.add $push50=, $pop49, $pop169 + i32.const $push168=, 48 + i32.ne $push51=, $pop50, $pop168 + br_if 0, $pop51 # 0: down to label0 +# BB#15: # %for.cond.14 + i32.load8_s $push52=, 47($3) + i32.const $push171=, 42 + i32.add $push53=, $pop52, $pop171 + i32.const $push170=, 49 + i32.ne $push54=, $pop53, $pop170 + br_if 0, $pop54 # 0: down to label0 +# BB#16: # %for.cond.15 + i32.const $push19=, 65535 + i32.and $push20=, $0, $pop19 + i32.const $push21=, 65536 + i32.or $push0=, $pop20, $pop21 + i32.const $push56=, 16 + i32.shl $push59=, $pop0, $pop56 + i32.const $push176=, 16 + i32.shr_s $push60=, $pop59, $pop176 + i32.const $push175=, 42 + i32.add $push61=, $pop60, $pop175 + i32.const $push174=, 42 + i32.add $push4=, $0, $pop174 + i32.const $push173=, 16 + i32.shl $push57=, $pop4, $pop173 + i32.const $push172=, 16 + i32.shr_s $push58=, $pop57, $pop172 + i32.ne $push62=, $pop61, $pop58 + br_if 0, $pop62 # 0: down to label0 +# BB#17: # %for.cond.15 + i32.const $push178=, 1 + i32.const $push177=, 42 + i32.or $push55=, $pop178, $pop177 + i32.const $push63=, 43 + i32.ne $push64=, $pop55, $pop63 + br_if 0, $pop64 # 0: down to label0 +# BB#18: # %for.cond.15 + i32.const $push180=, 2 + i32.const $push179=, 42 + i32.add $push5=, $pop180, $pop179 + i32.const $push65=, 44 + i32.ne $push66=, $pop5, $pop65 + br_if 0, $pop66 # 0: down to label0 +# BB#19: # %for.cond.15 + i32.const $push182=, 3 + i32.const $push181=, 42 + i32.add $push6=, $pop182, $pop181 + i32.const $push67=, 45 + i32.ne $push68=, $pop6, $pop67 + br_if 0, $pop68 # 0: down to label0 +# BB#20: # %for.cond.15 + i32.const $push184=, 4 + i32.const $push183=, 42 + i32.add $push7=, $pop184, $pop183 + i32.const $push69=, 46 + i32.ne $push70=, $pop7, $pop69 + br_if 0, $pop70 # 0: down to label0 +# BB#21: # %for.cond.15 + i32.const $push186=, 5 + i32.const $push185=, 42 + i32.add $push8=, $pop186, $pop185 + i32.const $push71=, 47 + i32.ne $push72=, $pop8, $pop71 + br_if 0, $pop72 # 0: down to label0 +# BB#22: # %for.cond47.5 + i32.load16_s $push73=, 28($3) + i32.const $push189=, 42 + i32.add $push74=, $pop73, $pop189 + i32.const $push188=, 6 + i32.const $push187=, 42 + i32.add $push9=, $pop188, $pop187 + i32.ne $push75=, $pop74, $pop9 + br_if 0, $pop75 # 0: down to label0 +# BB#23: # %for.cond47.6 + i32.load16_s $push76=, 30($3) + i32.const $push192=, 42 + i32.add $push77=, $pop76, $pop192 + i32.const $push191=, 7 + i32.const $push190=, 42 + i32.add $push10=, $pop191, $pop190 + i32.ne $push78=, $pop77, $pop10 + br_if 0, $pop78 # 0: down to label0 +# BB#24: # %for.cond74.7 + i32.const $push195=, 43 + i32.mul $push194=, $0, $pop195 + tee_local $push193=, $2=, $pop194 + i32.ne $push79=, $pop193, $2 + br_if 0, $pop79 # 0: down to label0 +# BB#25: # %for.cond74.7 + i32.const $push198=, 1 + i32.const $push197=, 43 + i32.mul $push1=, $pop198, $pop197 + i32.const $push196=, 43 + i32.ne $push80=, $pop1, $pop196 + br_if 0, $pop80 # 0: down to label0 +# BB#26: # %for.cond74.7 + i32.const $push200=, 2 + i32.const $push199=, 43 + i32.mul $push2=, $pop200, $pop199 + i32.const $push81=, 86 + i32.ne $push82=, $pop2, $pop81 + br_if 0, $pop82 # 0: down to label0 +# BB#27: # %for.cond99.2 + i32.const $push204=, 3 + i32.const $push203=, 43 + i32.mul $push3=, $pop204, $pop203 + i32.load $push202=, 12($3) + tee_local $push201=, $2=, $pop202 + i32.const $push83=, 43 + i32.mul $push84=, $pop201, $pop83 + i32.ne $push85=, $pop3, $pop84 + br_if 0, $pop85 # 0: down to label0 +# BB#28: # %for.cond99.3 + i32.load $push91=, 0($3) + i32.const $push206=, 42 + i32.mul $push92=, $pop91, $pop206 + i32.const $push205=, 42 + i32.mul $push90=, $0, $pop205 + i32.ne $push93=, $pop92, $pop90 + br_if 0, $pop93 # 0: down to label0 +# BB#29: # %for.cond99.3 + i32.const $push209=, 1 + i32.const $push208=, 42 + i32.mul $push86=, $pop209, $pop208 + i32.const $push207=, 42 + i32.ne $push94=, $pop86, $pop207 + br_if 0, $pop94 # 0: down to label0 +# BB#30: # %for.cond99.3 + i32.const $push211=, 2 + i32.const $push210=, 42 + i32.mul $push87=, $pop211, $pop210 + i32.const $push95=, 84 + i32.ne $push96=, $pop87, $pop95 + br_if 0, $pop96 # 0: down to label0 +# BB#31: # %for.cond99.3 + i32.const $push214=, 3 + i32.const $push213=, 42 + i32.mul $push88=, $pop214, $pop213 + i32.const $push212=, 42 + i32.mul $push89=, $2, $pop212 + i32.ne $push97=, $pop88, $pop89 + br_if 0, $pop97 # 0: down to label0 +# BB#32: # %for.cond148.3 + i32.const $push217=, 42 + i32.mul $push216=, $0, $pop217 + tee_local $push215=, $2=, $pop216 + i32.ne $push99=, $pop215, $2 + br_if 0, $pop99 # 0: down to label0 +# BB#33: # %for.cond148.3 + i32.const $push220=, 1 + i32.const $push219=, 42 + i32.mul $push98=, $pop220, $pop219 + i32.const $push218=, 42 + i32.ne $push100=, $pop98, $pop218 + br_if 0, $pop100 # 0: down to label0 +# BB#34: # %for.cond172.1 + i32.const $push223=, 43 + i32.mul $push222=, $0, $pop223 + tee_local $push221=, $0=, $pop222 + i32.ne $push102=, $pop221, $0 + br_if 0, $pop102 # 0: down to label0 +# BB#35: # %for.cond172.1 + i32.const $push226=, 1 + i32.const $push225=, 43 + i32.mul $push101=, $pop226, $pop225 + i32.const $push224=, 43 + i32.ne $push103=, $pop101, $pop224 + br_if 0, $pop103 # 0: down to label0 +# BB#36: # %for.cond244.1 + i32.const $push111=, 0 + i32.const $push109=, 48 + i32.add $push110=, $3, $pop109 + i32.store __stack_pointer($pop111), $pop110 + i32.const $push104=, 0 + return $pop104 +.LBB4_37: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end4: + .size main, .Lfunc_end4-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/scal-to-vec3.c.s b/src/binaryen/test/torture-s/scal-to-vec3.c.s new file mode 100644 index 0000000000..1f0755c487 --- /dev/null +++ b/src/binaryen/test/torture-s/scal-to-vec3.c.s @@ -0,0 +1,18 @@ + .text + .file "scal-to-vec3.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %for.cond258.1 + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/scope-1.c.s b/src/binaryen/test/torture-s/scope-1.c.s new file mode 100644 index 0000000000..d26ddc3024 --- /dev/null +++ b/src/binaryen/test/torture-s/scope-1.c.s @@ -0,0 +1,54 @@ + .text + .file "scope-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.load $push1=, v($pop0) + i32.const $push2=, 3 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + return $0 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.call $drop=, f@FUNCTION + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden v # @v + .type v,@object + .section .data.v,"aw",@progbits + .globl v + .p2align 2 +v: + .int32 3 # 0x3 + .size v, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/shiftdi.c.s b/src/binaryen/test/torture-s/shiftdi.c.s new file mode 100644 index 0000000000..ca5cdee861 --- /dev/null +++ b/src/binaryen/test/torture-s/shiftdi.c.s @@ -0,0 +1,44 @@ + .text + .file "shiftdi.c" + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .param i64, i32, i32, i32 +# BB#0: # %entry + i64.load $push11=, 0($3) + i64.extend_u/i32 $push0=, $1 + i64.shr_u $push1=, $0, $pop0 + i64.const $push2=, 4294967295 + i64.and $push3=, $pop1, $pop2 + i32.const $push4=, 31 + i32.and $push5=, $2, $pop4 + i64.extend_u/i32 $push6=, $pop5 + i64.shl $push7=, $pop3, $pop6 + i64.const $push13=, 4294967295 + i64.and $push8=, $pop7, $pop13 + i64.extend_u/i32 $push9=, $2 + i64.shl $push10=, $pop8, $pop9 + i64.or $push12=, $pop11, $pop10 + i64.store 0($3), $pop12 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size g, .Lfunc_end0-g + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/shiftopt-1.c.s b/src/binaryen/test/torture-s/shiftopt-1.c.s new file mode 100644 index 0000000000..b94aa42bbf --- /dev/null +++ b/src/binaryen/test/torture-s/shiftopt-1.c.s @@ -0,0 +1,41 @@ + .text + .file "shiftopt-1.c" + .section .text.utest,"ax",@progbits + .hidden utest # -- Begin function utest + .globl utest + .type utest,@function +utest: # @utest + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size utest, .Lfunc_end0-utest + # -- End function + .section .text.stest,"ax",@progbits + .hidden stest # -- Begin function stest + .globl stest + .type stest,@function +stest: # @stest + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end1: + .size stest, .Lfunc_end1-stest + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/simd-1.c.s b/src/binaryen/test/torture-s/simd-1.c.s new file mode 100644 index 0000000000..7f10724034 --- /dev/null +++ b/src/binaryen/test/torture-s/simd-1.c.s @@ -0,0 +1,444 @@ + .text + .file "simd-1.c" + .section .text.verify,"ax",@progbits + .hidden verify # -- Begin function verify + .globl verify + .type verify,@function +verify: # @verify + .param i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.ne $push0=, $0, $4 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %entry + i32.ne $push1=, $1, $5 + br_if 0, $pop1 # 0: down to label0 +# BB#2: # %entry + i32.ne $push2=, $2, $6 + br_if 0, $pop2 # 0: down to label0 +# BB#3: # %entry + i32.ne $push3=, $3, $7 + br_if 0, $pop3 # 0: down to label0 +# BB#4: # %if.end + return +.LBB0_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size verify, .Lfunc_end0-verify + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push280=, 0 + i32.load $push2=, j+12($pop280) + i32.const $push279=, 0 + i32.load $push1=, i+12($pop279) + i32.add $push278=, $pop2, $pop1 + tee_local $push277=, $0=, $pop278 + i32.store k+12($pop0), $pop277 + i32.const $push276=, 0 + i32.const $push275=, 0 + i32.load $push4=, j+8($pop275) + i32.const $push274=, 0 + i32.load $push3=, i+8($pop274) + i32.add $push273=, $pop4, $pop3 + tee_local $push272=, $1=, $pop273 + i32.store k+8($pop276), $pop272 + i32.const $push271=, 0 + i32.const $push270=, 0 + i32.load $push6=, j+4($pop270) + i32.const $push269=, 0 + i32.load $push5=, i+4($pop269) + i32.add $push268=, $pop6, $pop5 + tee_local $push267=, $2=, $pop268 + i32.store k+4($pop271), $pop267 + i32.const $push266=, 0 + i32.const $push265=, 0 + i32.load $push8=, j($pop265) + i32.const $push264=, 0 + i32.load $push7=, i($pop264) + i32.add $push263=, $pop8, $pop7 + tee_local $push262=, $3=, $pop263 + i32.store k($pop266), $pop262 + i32.const $push261=, 0 + i32.store res+12($pop261), $0 + i32.const $push260=, 0 + i32.store res+8($pop260), $1 + i32.const $push259=, 0 + i32.store res+4($pop259), $2 + i32.const $push258=, 0 + i32.store res($pop258), $3 + i32.const $push12=, 160 + i32.const $push11=, 113 + i32.const $push10=, 170 + i32.const $push9=, 230 + call verify@FUNCTION, $3, $2, $1, $0, $pop12, $pop11, $pop10, $pop9 + i32.const $push257=, 0 + i32.const $push256=, 0 + i32.load $push14=, j+12($pop256) + i32.const $push255=, 0 + i32.load $push13=, i+12($pop255) + i32.mul $push254=, $pop14, $pop13 + tee_local $push253=, $0=, $pop254 + i32.store k+12($pop257), $pop253 + i32.const $push252=, 0 + i32.const $push251=, 0 + i32.load $push16=, j+8($pop251) + i32.const $push250=, 0 + i32.load $push15=, i+8($pop250) + i32.mul $push249=, $pop16, $pop15 + tee_local $push248=, $1=, $pop249 + i32.store k+8($pop252), $pop248 + i32.const $push247=, 0 + i32.const $push246=, 0 + i32.load $push18=, j+4($pop246) + i32.const $push245=, 0 + i32.load $push17=, i+4($pop245) + i32.mul $push244=, $pop18, $pop17 + tee_local $push243=, $2=, $pop244 + i32.store k+4($pop247), $pop243 + i32.const $push242=, 0 + i32.const $push241=, 0 + i32.load $push20=, j($pop241) + i32.const $push240=, 0 + i32.load $push19=, i($pop240) + i32.mul $push239=, $pop20, $pop19 + tee_local $push238=, $3=, $pop239 + i32.store k($pop242), $pop238 + i32.const $push237=, 0 + i32.store res+12($pop237), $0 + i32.const $push236=, 0 + i32.store res+8($pop236), $1 + i32.const $push235=, 0 + i32.store res+4($pop235), $2 + i32.const $push234=, 0 + i32.store res($pop234), $3 + i32.const $push24=, 1500 + i32.const $push23=, 1300 + i32.const $push22=, 3000 + i32.const $push21=, 6000 + call verify@FUNCTION, $3, $2, $1, $0, $pop24, $pop23, $pop22, $pop21 + i32.const $push233=, 0 + i32.const $push232=, 0 + i32.load $push26=, i+12($pop232) + i32.const $push231=, 0 + i32.load $push25=, j+12($pop231) + i32.div_s $push230=, $pop26, $pop25 + tee_local $push229=, $0=, $pop230 + i32.store k+12($pop233), $pop229 + i32.const $push228=, 0 + i32.const $push227=, 0 + i32.load $push28=, i+8($pop227) + i32.const $push226=, 0 + i32.load $push27=, j+8($pop226) + i32.div_s $push225=, $pop28, $pop27 + tee_local $push224=, $1=, $pop225 + i32.store k+8($pop228), $pop224 + i32.const $push223=, 0 + i32.const $push222=, 0 + i32.load $push30=, i+4($pop222) + i32.const $push221=, 0 + i32.load $push29=, j+4($pop221) + i32.div_s $push220=, $pop30, $pop29 + tee_local $push219=, $2=, $pop220 + i32.store k+4($pop223), $pop219 + i32.const $push218=, 0 + i32.const $push217=, 0 + i32.load $push32=, i($pop217) + i32.const $push216=, 0 + i32.load $push31=, j($pop216) + i32.div_s $push215=, $pop32, $pop31 + tee_local $push214=, $3=, $pop215 + i32.store k($pop218), $pop214 + i32.const $push213=, 0 + i32.store res+12($pop213), $0 + i32.const $push212=, 0 + i32.store res+8($pop212), $1 + i32.const $push211=, 0 + i32.store res+4($pop211), $2 + i32.const $push210=, 0 + i32.store res($pop210), $3 + i32.const $push35=, 15 + i32.const $push34=, 7 + i32.const $push209=, 7 + i32.const $push33=, 6 + call verify@FUNCTION, $3, $2, $1, $0, $pop35, $pop34, $pop209, $pop33 + i32.const $push208=, 0 + i32.const $push207=, 0 + i32.load $push37=, j+12($pop207) + i32.const $push206=, 0 + i32.load $push36=, i+12($pop206) + i32.and $push205=, $pop37, $pop36 + tee_local $push204=, $0=, $pop205 + i32.store k+12($pop208), $pop204 + i32.const $push203=, 0 + i32.const $push202=, 0 + i32.load $push39=, j+8($pop202) + i32.const $push201=, 0 + i32.load $push38=, i+8($pop201) + i32.and $push200=, $pop39, $pop38 + tee_local $push199=, $1=, $pop200 + i32.store k+8($pop203), $pop199 + i32.const $push198=, 0 + i32.const $push197=, 0 + i32.load $push41=, j+4($pop197) + i32.const $push196=, 0 + i32.load $push40=, i+4($pop196) + i32.and $push195=, $pop41, $pop40 + tee_local $push194=, $2=, $pop195 + i32.store k+4($pop198), $pop194 + i32.const $push193=, 0 + i32.const $push192=, 0 + i32.load $push43=, j($pop192) + i32.const $push191=, 0 + i32.load $push42=, i($pop191) + i32.and $push190=, $pop43, $pop42 + tee_local $push189=, $3=, $pop190 + i32.store k($pop193), $pop189 + i32.const $push188=, 0 + i32.store res+12($pop188), $0 + i32.const $push187=, 0 + i32.store res+8($pop187), $1 + i32.const $push186=, 0 + i32.store res+4($pop186), $2 + i32.const $push185=, 0 + i32.store res($pop185), $3 + i32.const $push47=, 2 + i32.const $push46=, 4 + i32.const $push45=, 20 + i32.const $push44=, 8 + call verify@FUNCTION, $3, $2, $1, $0, $pop47, $pop46, $pop45, $pop44 + i32.const $push184=, 0 + i32.const $push183=, 0 + i32.load $push49=, j+12($pop183) + i32.const $push182=, 0 + i32.load $push48=, i+12($pop182) + i32.or $push181=, $pop49, $pop48 + tee_local $push180=, $0=, $pop181 + i32.store k+12($pop184), $pop180 + i32.const $push179=, 0 + i32.const $push178=, 0 + i32.load $push51=, j+8($pop178) + i32.const $push177=, 0 + i32.load $push50=, i+8($pop177) + i32.or $push176=, $pop51, $pop50 + tee_local $push175=, $1=, $pop176 + i32.store k+8($pop179), $pop175 + i32.const $push174=, 0 + i32.const $push173=, 0 + i32.load $push53=, j+4($pop173) + i32.const $push172=, 0 + i32.load $push52=, i+4($pop172) + i32.or $push171=, $pop53, $pop52 + tee_local $push170=, $2=, $pop171 + i32.store k+4($pop174), $pop170 + i32.const $push169=, 0 + i32.const $push168=, 0 + i32.load $push55=, j($pop168) + i32.const $push167=, 0 + i32.load $push54=, i($pop167) + i32.or $push166=, $pop55, $pop54 + tee_local $push165=, $3=, $pop166 + i32.store k($pop169), $pop165 + i32.const $push164=, 0 + i32.store res+12($pop164), $0 + i32.const $push163=, 0 + i32.store res+8($pop163), $1 + i32.const $push162=, 0 + i32.store res+4($pop162), $2 + i32.const $push161=, 0 + i32.store res($pop161), $3 + i32.const $push59=, 158 + i32.const $push58=, 109 + i32.const $push57=, 150 + i32.const $push56=, 222 + call verify@FUNCTION, $3, $2, $1, $0, $pop59, $pop58, $pop57, $pop56 + i32.const $push160=, 0 + i32.const $push159=, 0 + i32.load $push61=, j+12($pop159) + i32.const $push158=, 0 + i32.load $push60=, i+12($pop158) + i32.xor $push157=, $pop61, $pop60 + tee_local $push156=, $0=, $pop157 + i32.store k+12($pop160), $pop156 + i32.const $push155=, 0 + i32.const $push154=, 0 + i32.load $push63=, j+8($pop154) + i32.const $push153=, 0 + i32.load $push62=, i+8($pop153) + i32.xor $push152=, $pop63, $pop62 + tee_local $push151=, $1=, $pop152 + i32.store k+8($pop155), $pop151 + i32.const $push150=, 0 + i32.const $push149=, 0 + i32.load $push65=, j+4($pop149) + i32.const $push148=, 0 + i32.load $push64=, i+4($pop148) + i32.xor $push147=, $pop65, $pop64 + tee_local $push146=, $2=, $pop147 + i32.store k+4($pop150), $pop146 + i32.const $push145=, 0 + i32.const $push144=, 0 + i32.load $push67=, j($pop144) + i32.const $push143=, 0 + i32.load $push66=, i($pop143) + i32.xor $push142=, $pop67, $pop66 + tee_local $push141=, $3=, $pop142 + i32.store k($pop145), $pop141 + i32.const $push140=, 0 + i32.store res+12($pop140), $0 + i32.const $push139=, 0 + i32.store res+8($pop139), $1 + i32.const $push138=, 0 + i32.store res+4($pop138), $2 + i32.const $push137=, 0 + i32.store res($pop137), $3 + i32.const $push71=, 156 + i32.const $push70=, 105 + i32.const $push69=, 130 + i32.const $push68=, 214 + call verify@FUNCTION, $3, $2, $1, $0, $pop71, $pop70, $pop69, $pop68 + i32.const $push136=, 0 + i32.const $push135=, 0 + i32.const $push134=, 0 + i32.load $push72=, i+12($pop134) + i32.sub $push133=, $pop135, $pop72 + tee_local $push132=, $0=, $pop133 + i32.store k+12($pop136), $pop132 + i32.const $push131=, 0 + i32.const $push130=, 0 + i32.const $push129=, 0 + i32.load $push73=, i+8($pop129) + i32.sub $push128=, $pop130, $pop73 + tee_local $push127=, $1=, $pop128 + i32.store k+8($pop131), $pop127 + i32.const $push126=, 0 + i32.const $push125=, 0 + i32.const $push124=, 0 + i32.load $push74=, i+4($pop124) + i32.sub $push123=, $pop125, $pop74 + tee_local $push122=, $2=, $pop123 + i32.store k+4($pop126), $pop122 + i32.const $push121=, 0 + i32.const $push120=, 0 + i32.const $push119=, 0 + i32.load $push75=, i($pop119) + i32.sub $push118=, $pop120, $pop75 + tee_local $push117=, $3=, $pop118 + i32.store k($pop121), $pop117 + i32.const $push116=, 0 + i32.store res+12($pop116), $0 + i32.const $push115=, 0 + i32.store res+8($pop115), $1 + i32.const $push114=, 0 + i32.store res+4($pop114), $2 + i32.const $push113=, 0 + i32.store res($pop113), $3 + i32.const $push78=, -150 + i32.const $push77=, -100 + i32.const $push112=, -150 + i32.const $push76=, -200 + call verify@FUNCTION, $3, $2, $1, $0, $pop78, $pop77, $pop112, $pop76 + i32.const $push111=, 0 + i32.const $push110=, 0 + i32.load $push79=, i+12($pop110) + i32.const $push80=, -1 + i32.xor $push109=, $pop79, $pop80 + tee_local $push108=, $0=, $pop109 + i32.store k+12($pop111), $pop108 + i32.const $push107=, 0 + i32.const $push106=, 0 + i32.load $push81=, i+8($pop106) + i32.const $push105=, -1 + i32.xor $push104=, $pop81, $pop105 + tee_local $push103=, $1=, $pop104 + i32.store k+8($pop107), $pop103 + i32.const $push102=, 0 + i32.const $push101=, 0 + i32.load $push82=, i+4($pop101) + i32.const $push100=, -1 + i32.xor $push99=, $pop82, $pop100 + tee_local $push98=, $2=, $pop99 + i32.store k+4($pop102), $pop98 + i32.const $push97=, 0 + i32.const $push96=, 0 + i32.load $push83=, i($pop96) + i32.const $push95=, -1 + i32.xor $push94=, $pop83, $pop95 + tee_local $push93=, $3=, $pop94 + i32.store k($pop97), $pop93 + i32.const $push92=, 0 + i32.store res+12($pop92), $0 + i32.const $push91=, 0 + i32.store res+8($pop91), $1 + i32.const $push90=, 0 + i32.store res+4($pop90), $2 + i32.const $push89=, 0 + i32.store res($pop89), $3 + i32.const $push86=, -151 + i32.const $push85=, -101 + i32.const $push88=, -151 + i32.const $push84=, -201 + call verify@FUNCTION, $3, $2, $1, $0, $pop86, $pop85, $pop88, $pop84 + i32.const $push87=, 0 + call exit@FUNCTION, $pop87 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden i # @i + .type i,@object + .section .data.i,"aw",@progbits + .globl i + .p2align 4 +i: + .int32 150 # 0x96 + .int32 100 # 0x64 + .int32 150 # 0x96 + .int32 200 # 0xc8 + .size i, 16 + + .hidden j # @j + .type j,@object + .section .data.j,"aw",@progbits + .globl j + .p2align 4 +j: + .int32 10 # 0xa + .int32 13 # 0xd + .int32 20 # 0x14 + .int32 30 # 0x1e + .size j, 16 + + .hidden k # @k + .type k,@object + .section .bss.k,"aw",@nobits + .globl k + .p2align 4 +k: + .skip 16 + .size k, 16 + + .hidden res # @res + .type res,@object + .section .bss.res,"aw",@nobits + .globl res + .p2align 4 +res: + .skip 16 + .size res, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/simd-2.c.s b/src/binaryen/test/torture-s/simd-2.c.s new file mode 100644 index 0000000000..64caf6a262 --- /dev/null +++ b/src/binaryen/test/torture-s/simd-2.c.s @@ -0,0 +1,892 @@ + .text + .file "simd-2.c" + .section .text.verify,"ax",@progbits + .hidden verify # -- Begin function verify + .globl verify + .type verify,@function +verify: # @verify + .param i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + block + i32.ne $push0=, $0, $4 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %entry + i32.ne $push1=, $1, $5 + br_if 0, $pop1 # 0: down to label0 +# BB#2: # %entry + i32.ne $push2=, $2, $6 + br_if 0, $pop2 # 0: down to label0 +# BB#3: # %entry + i32.ne $push3=, $3, $7 + br_if 0, $pop3 # 0: down to label0 +# BB#4: # %if.end + return +.LBB0_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size verify, .Lfunc_end0-verify + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push656=, 0 + i32.load16_u $push2=, j+14($pop656) + i32.const $push655=, 0 + i32.load16_u $push1=, i+14($pop655) + i32.add $push654=, $pop2, $pop1 + tee_local $push653=, $0=, $pop654 + i32.store16 k+14($pop0), $pop653 + i32.const $push652=, 0 + i32.const $push651=, 0 + i32.load16_u $push4=, j+12($pop651) + i32.const $push650=, 0 + i32.load16_u $push3=, i+12($pop650) + i32.add $push649=, $pop4, $pop3 + tee_local $push648=, $1=, $pop649 + i32.store16 k+12($pop652), $pop648 + i32.const $push647=, 0 + i32.const $push646=, 0 + i32.load16_u $push6=, j+10($pop646) + i32.const $push645=, 0 + i32.load16_u $push5=, i+10($pop645) + i32.add $push644=, $pop6, $pop5 + tee_local $push643=, $2=, $pop644 + i32.store16 k+10($pop647), $pop643 + i32.const $push642=, 0 + i32.const $push641=, 0 + i32.load16_u $push8=, j+8($pop641) + i32.const $push640=, 0 + i32.load16_u $push7=, i+8($pop640) + i32.add $push639=, $pop8, $pop7 + tee_local $push638=, $3=, $pop639 + i32.store16 k+8($pop642), $pop638 + i32.const $push637=, 0 + i32.const $push636=, 0 + i32.load16_u $push10=, j+6($pop636) + i32.const $push635=, 0 + i32.load16_u $push9=, i+6($pop635) + i32.add $push634=, $pop10, $pop9 + tee_local $push633=, $4=, $pop634 + i32.store16 k+6($pop637), $pop633 + i32.const $push632=, 0 + i32.const $push631=, 0 + i32.load16_u $push12=, j+4($pop631) + i32.const $push630=, 0 + i32.load16_u $push11=, i+4($pop630) + i32.add $push629=, $pop12, $pop11 + tee_local $push628=, $5=, $pop629 + i32.store16 k+4($pop632), $pop628 + i32.const $push627=, 0 + i32.const $push626=, 0 + i32.load16_u $push14=, j+2($pop626) + i32.const $push625=, 0 + i32.load16_u $push13=, i+2($pop625) + i32.add $push624=, $pop14, $pop13 + tee_local $push623=, $6=, $pop624 + i32.store16 k+2($pop627), $pop623 + i32.const $push622=, 0 + i32.const $push621=, 0 + i32.load16_u $push16=, j($pop621) + i32.const $push620=, 0 + i32.load16_u $push15=, i($pop620) + i32.add $push619=, $pop16, $pop15 + tee_local $push618=, $7=, $pop619 + i32.store16 k($pop622), $pop618 + i32.const $push617=, 0 + i32.store16 res+14($pop617), $0 + i32.const $push616=, 0 + i32.store16 res+12($pop616), $1 + i32.const $push615=, 0 + i32.store16 res+10($pop615), $2 + i32.const $push614=, 0 + i32.store16 res+8($pop614), $3 + i32.const $push613=, 0 + i32.store16 res+6($pop613), $4 + i32.const $push612=, 0 + i32.store16 res+4($pop612), $5 + i32.const $push611=, 0 + i32.store16 res+2($pop611), $6 + i32.const $push610=, 0 + i32.store16 res($pop610), $7 + i32.const $push17=, 16 + i32.shl $push24=, $7, $pop17 + i32.const $push609=, 16 + i32.shr_s $push25=, $pop24, $pop609 + i32.const $push608=, 16 + i32.shl $push22=, $6, $pop608 + i32.const $push607=, 16 + i32.shr_s $push23=, $pop22, $pop607 + i32.const $push606=, 16 + i32.shl $push20=, $5, $pop606 + i32.const $push605=, 16 + i32.shr_s $push21=, $pop20, $pop605 + i32.const $push604=, 16 + i32.shl $push18=, $4, $pop604 + i32.const $push603=, 16 + i32.shr_s $push19=, $pop18, $pop603 + i32.const $push29=, 160 + i32.const $push28=, 113 + i32.const $push27=, 170 + i32.const $push26=, 230 + call verify@FUNCTION, $pop25, $pop23, $pop21, $pop19, $pop29, $pop28, $pop27, $pop26 + i32.const $push602=, 0 + i32.const $push601=, 0 + i32.load16_u $push31=, j+14($pop601) + i32.const $push600=, 0 + i32.load16_u $push30=, i+14($pop600) + i32.mul $push599=, $pop31, $pop30 + tee_local $push598=, $0=, $pop599 + i32.store16 k+14($pop602), $pop598 + i32.const $push597=, 0 + i32.const $push596=, 0 + i32.load16_u $push33=, j+12($pop596) + i32.const $push595=, 0 + i32.load16_u $push32=, i+12($pop595) + i32.mul $push594=, $pop33, $pop32 + tee_local $push593=, $1=, $pop594 + i32.store16 k+12($pop597), $pop593 + i32.const $push592=, 0 + i32.const $push591=, 0 + i32.load16_u $push35=, j+10($pop591) + i32.const $push590=, 0 + i32.load16_u $push34=, i+10($pop590) + i32.mul $push589=, $pop35, $pop34 + tee_local $push588=, $2=, $pop589 + i32.store16 k+10($pop592), $pop588 + i32.const $push587=, 0 + i32.const $push586=, 0 + i32.load16_u $push37=, j+8($pop586) + i32.const $push585=, 0 + i32.load16_u $push36=, i+8($pop585) + i32.mul $push584=, $pop37, $pop36 + tee_local $push583=, $3=, $pop584 + i32.store16 k+8($pop587), $pop583 + i32.const $push582=, 0 + i32.const $push581=, 0 + i32.load16_u $push39=, j+6($pop581) + i32.const $push580=, 0 + i32.load16_u $push38=, i+6($pop580) + i32.mul $push579=, $pop39, $pop38 + tee_local $push578=, $4=, $pop579 + i32.store16 k+6($pop582), $pop578 + i32.const $push577=, 0 + i32.const $push576=, 0 + i32.load16_u $push41=, j+4($pop576) + i32.const $push575=, 0 + i32.load16_u $push40=, i+4($pop575) + i32.mul $push574=, $pop41, $pop40 + tee_local $push573=, $5=, $pop574 + i32.store16 k+4($pop577), $pop573 + i32.const $push572=, 0 + i32.const $push571=, 0 + i32.load16_u $push43=, j+2($pop571) + i32.const $push570=, 0 + i32.load16_u $push42=, i+2($pop570) + i32.mul $push569=, $pop43, $pop42 + tee_local $push568=, $6=, $pop569 + i32.store16 k+2($pop572), $pop568 + i32.const $push567=, 0 + i32.const $push566=, 0 + i32.load16_u $push45=, j($pop566) + i32.const $push565=, 0 + i32.load16_u $push44=, i($pop565) + i32.mul $push564=, $pop45, $pop44 + tee_local $push563=, $7=, $pop564 + i32.store16 k($pop567), $pop563 + i32.const $push562=, 0 + i32.store16 res+14($pop562), $0 + i32.const $push561=, 0 + i32.store16 res+12($pop561), $1 + i32.const $push560=, 0 + i32.store16 res+10($pop560), $2 + i32.const $push559=, 0 + i32.store16 res+8($pop559), $3 + i32.const $push558=, 0 + i32.store16 res+6($pop558), $4 + i32.const $push557=, 0 + i32.store16 res+4($pop557), $5 + i32.const $push556=, 0 + i32.store16 res+2($pop556), $6 + i32.const $push555=, 0 + i32.store16 res($pop555), $7 + i32.const $push554=, 16 + i32.shl $push52=, $7, $pop554 + i32.const $push553=, 16 + i32.shr_s $push53=, $pop52, $pop553 + i32.const $push552=, 16 + i32.shl $push50=, $6, $pop552 + i32.const $push551=, 16 + i32.shr_s $push51=, $pop50, $pop551 + i32.const $push550=, 16 + i32.shl $push48=, $5, $pop550 + i32.const $push549=, 16 + i32.shr_s $push49=, $pop48, $pop549 + i32.const $push548=, 16 + i32.shl $push46=, $4, $pop548 + i32.const $push547=, 16 + i32.shr_s $push47=, $pop46, $pop547 + i32.const $push57=, 1500 + i32.const $push56=, 1300 + i32.const $push55=, 3000 + i32.const $push54=, 6000 + call verify@FUNCTION, $pop53, $pop51, $pop49, $pop47, $pop57, $pop56, $pop55, $pop54 + i32.const $push546=, 0 + i32.const $push545=, 0 + i32.load16_s $push59=, i+14($pop545) + i32.const $push544=, 0 + i32.load16_s $push58=, j+14($pop544) + i32.div_s $push543=, $pop59, $pop58 + tee_local $push542=, $0=, $pop543 + i32.store16 k+14($pop546), $pop542 + i32.const $push541=, 0 + i32.const $push540=, 0 + i32.load16_s $push61=, i+12($pop540) + i32.const $push539=, 0 + i32.load16_s $push60=, j+12($pop539) + i32.div_s $push538=, $pop61, $pop60 + tee_local $push537=, $1=, $pop538 + i32.store16 k+12($pop541), $pop537 + i32.const $push536=, 0 + i32.const $push535=, 0 + i32.load16_s $push63=, i+10($pop535) + i32.const $push534=, 0 + i32.load16_s $push62=, j+10($pop534) + i32.div_s $push533=, $pop63, $pop62 + tee_local $push532=, $2=, $pop533 + i32.store16 k+10($pop536), $pop532 + i32.const $push531=, 0 + i32.const $push530=, 0 + i32.load16_s $push65=, i+8($pop530) + i32.const $push529=, 0 + i32.load16_s $push64=, j+8($pop529) + i32.div_s $push528=, $pop65, $pop64 + tee_local $push527=, $3=, $pop528 + i32.store16 k+8($pop531), $pop527 + i32.const $push526=, 0 + i32.const $push525=, 0 + i32.load16_s $push67=, i+6($pop525) + i32.const $push524=, 0 + i32.load16_s $push66=, j+6($pop524) + i32.div_s $push523=, $pop67, $pop66 + tee_local $push522=, $4=, $pop523 + i32.store16 k+6($pop526), $pop522 + i32.const $push521=, 0 + i32.const $push520=, 0 + i32.load16_s $push69=, i+4($pop520) + i32.const $push519=, 0 + i32.load16_s $push68=, j+4($pop519) + i32.div_s $push518=, $pop69, $pop68 + tee_local $push517=, $5=, $pop518 + i32.store16 k+4($pop521), $pop517 + i32.const $push516=, 0 + i32.const $push515=, 0 + i32.load16_s $push71=, i+2($pop515) + i32.const $push514=, 0 + i32.load16_s $push70=, j+2($pop514) + i32.div_s $push513=, $pop71, $pop70 + tee_local $push512=, $6=, $pop513 + i32.store16 k+2($pop516), $pop512 + i32.const $push511=, 0 + i32.const $push510=, 0 + i32.load16_s $push73=, i($pop510) + i32.const $push509=, 0 + i32.load16_s $push72=, j($pop509) + i32.div_s $push508=, $pop73, $pop72 + tee_local $push507=, $7=, $pop508 + i32.store16 k($pop511), $pop507 + i32.const $push506=, 0 + i32.store16 res+14($pop506), $0 + i32.const $push505=, 0 + i32.store16 res+12($pop505), $1 + i32.const $push504=, 0 + i32.store16 res+10($pop504), $2 + i32.const $push503=, 0 + i32.store16 res+8($pop503), $3 + i32.const $push502=, 0 + i32.store16 res+6($pop502), $4 + i32.const $push501=, 0 + i32.store16 res+4($pop501), $5 + i32.const $push500=, 0 + i32.store16 res+2($pop500), $6 + i32.const $push499=, 0 + i32.store16 res($pop499), $7 + i32.const $push498=, 16 + i32.shl $push80=, $7, $pop498 + i32.const $push497=, 16 + i32.shr_s $push81=, $pop80, $pop497 + i32.const $push496=, 16 + i32.shl $push78=, $6, $pop496 + i32.const $push495=, 16 + i32.shr_s $push79=, $pop78, $pop495 + i32.const $push494=, 16 + i32.shl $push76=, $5, $pop494 + i32.const $push493=, 16 + i32.shr_s $push77=, $pop76, $pop493 + i32.const $push492=, 16 + i32.shl $push74=, $4, $pop492 + i32.const $push491=, 16 + i32.shr_s $push75=, $pop74, $pop491 + i32.const $push84=, 15 + i32.const $push83=, 7 + i32.const $push490=, 7 + i32.const $push82=, 6 + call verify@FUNCTION, $pop81, $pop79, $pop77, $pop75, $pop84, $pop83, $pop490, $pop82 + i32.const $push489=, 0 + i32.const $push488=, 0 + i32.load16_u $push86=, j+14($pop488) + i32.const $push487=, 0 + i32.load16_u $push85=, i+14($pop487) + i32.and $push486=, $pop86, $pop85 + tee_local $push485=, $0=, $pop486 + i32.store16 k+14($pop489), $pop485 + i32.const $push484=, 0 + i32.const $push483=, 0 + i32.load16_u $push88=, j+12($pop483) + i32.const $push482=, 0 + i32.load16_u $push87=, i+12($pop482) + i32.and $push481=, $pop88, $pop87 + tee_local $push480=, $1=, $pop481 + i32.store16 k+12($pop484), $pop480 + i32.const $push479=, 0 + i32.const $push478=, 0 + i32.load16_u $push90=, j+10($pop478) + i32.const $push477=, 0 + i32.load16_u $push89=, i+10($pop477) + i32.and $push476=, $pop90, $pop89 + tee_local $push475=, $2=, $pop476 + i32.store16 k+10($pop479), $pop475 + i32.const $push474=, 0 + i32.const $push473=, 0 + i32.load16_u $push92=, j+8($pop473) + i32.const $push472=, 0 + i32.load16_u $push91=, i+8($pop472) + i32.and $push471=, $pop92, $pop91 + tee_local $push470=, $3=, $pop471 + i32.store16 k+8($pop474), $pop470 + i32.const $push469=, 0 + i32.const $push468=, 0 + i32.load16_u $push94=, j+6($pop468) + i32.const $push467=, 0 + i32.load16_u $push93=, i+6($pop467) + i32.and $push466=, $pop94, $pop93 + tee_local $push465=, $4=, $pop466 + i32.store16 k+6($pop469), $pop465 + i32.const $push464=, 0 + i32.const $push463=, 0 + i32.load16_u $push96=, j+4($pop463) + i32.const $push462=, 0 + i32.load16_u $push95=, i+4($pop462) + i32.and $push461=, $pop96, $pop95 + tee_local $push460=, $5=, $pop461 + i32.store16 k+4($pop464), $pop460 + i32.const $push459=, 0 + i32.const $push458=, 0 + i32.load16_u $push98=, j+2($pop458) + i32.const $push457=, 0 + i32.load16_u $push97=, i+2($pop457) + i32.and $push456=, $pop98, $pop97 + tee_local $push455=, $6=, $pop456 + i32.store16 k+2($pop459), $pop455 + i32.const $push454=, 0 + i32.const $push453=, 0 + i32.load16_u $push100=, j($pop453) + i32.const $push452=, 0 + i32.load16_u $push99=, i($pop452) + i32.and $push451=, $pop100, $pop99 + tee_local $push450=, $7=, $pop451 + i32.store16 k($pop454), $pop450 + i32.const $push449=, 0 + i32.store16 res+14($pop449), $0 + i32.const $push448=, 0 + i32.store16 res+12($pop448), $1 + i32.const $push447=, 0 + i32.store16 res+10($pop447), $2 + i32.const $push446=, 0 + i32.store16 res+8($pop446), $3 + i32.const $push445=, 0 + i32.store16 res+6($pop445), $4 + i32.const $push444=, 0 + i32.store16 res+4($pop444), $5 + i32.const $push443=, 0 + i32.store16 res+2($pop443), $6 + i32.const $push442=, 0 + i32.store16 res($pop442), $7 + i32.const $push441=, 16 + i32.shl $push107=, $7, $pop441 + i32.const $push440=, 16 + i32.shr_s $push108=, $pop107, $pop440 + i32.const $push439=, 16 + i32.shl $push105=, $6, $pop439 + i32.const $push438=, 16 + i32.shr_s $push106=, $pop105, $pop438 + i32.const $push437=, 16 + i32.shl $push103=, $5, $pop437 + i32.const $push436=, 16 + i32.shr_s $push104=, $pop103, $pop436 + i32.const $push435=, 16 + i32.shl $push101=, $4, $pop435 + i32.const $push434=, 16 + i32.shr_s $push102=, $pop101, $pop434 + i32.const $push112=, 2 + i32.const $push111=, 4 + i32.const $push110=, 20 + i32.const $push109=, 8 + call verify@FUNCTION, $pop108, $pop106, $pop104, $pop102, $pop112, $pop111, $pop110, $pop109 + i32.const $push433=, 0 + i32.const $push432=, 0 + i32.load16_u $push114=, j+14($pop432) + i32.const $push431=, 0 + i32.load16_u $push113=, i+14($pop431) + i32.or $push430=, $pop114, $pop113 + tee_local $push429=, $0=, $pop430 + i32.store16 k+14($pop433), $pop429 + i32.const $push428=, 0 + i32.const $push427=, 0 + i32.load16_u $push116=, j+12($pop427) + i32.const $push426=, 0 + i32.load16_u $push115=, i+12($pop426) + i32.or $push425=, $pop116, $pop115 + tee_local $push424=, $1=, $pop425 + i32.store16 k+12($pop428), $pop424 + i32.const $push423=, 0 + i32.const $push422=, 0 + i32.load16_u $push118=, j+10($pop422) + i32.const $push421=, 0 + i32.load16_u $push117=, i+10($pop421) + i32.or $push420=, $pop118, $pop117 + tee_local $push419=, $2=, $pop420 + i32.store16 k+10($pop423), $pop419 + i32.const $push418=, 0 + i32.const $push417=, 0 + i32.load16_u $push120=, j+8($pop417) + i32.const $push416=, 0 + i32.load16_u $push119=, i+8($pop416) + i32.or $push415=, $pop120, $pop119 + tee_local $push414=, $3=, $pop415 + i32.store16 k+8($pop418), $pop414 + i32.const $push413=, 0 + i32.const $push412=, 0 + i32.load16_u $push122=, j+6($pop412) + i32.const $push411=, 0 + i32.load16_u $push121=, i+6($pop411) + i32.or $push410=, $pop122, $pop121 + tee_local $push409=, $4=, $pop410 + i32.store16 k+6($pop413), $pop409 + i32.const $push408=, 0 + i32.const $push407=, 0 + i32.load16_u $push124=, j+4($pop407) + i32.const $push406=, 0 + i32.load16_u $push123=, i+4($pop406) + i32.or $push405=, $pop124, $pop123 + tee_local $push404=, $5=, $pop405 + i32.store16 k+4($pop408), $pop404 + i32.const $push403=, 0 + i32.const $push402=, 0 + i32.load16_u $push126=, j+2($pop402) + i32.const $push401=, 0 + i32.load16_u $push125=, i+2($pop401) + i32.or $push400=, $pop126, $pop125 + tee_local $push399=, $6=, $pop400 + i32.store16 k+2($pop403), $pop399 + i32.const $push398=, 0 + i32.const $push397=, 0 + i32.load16_u $push128=, j($pop397) + i32.const $push396=, 0 + i32.load16_u $push127=, i($pop396) + i32.or $push395=, $pop128, $pop127 + tee_local $push394=, $7=, $pop395 + i32.store16 k($pop398), $pop394 + i32.const $push393=, 0 + i32.store16 res+14($pop393), $0 + i32.const $push392=, 0 + i32.store16 res+12($pop392), $1 + i32.const $push391=, 0 + i32.store16 res+10($pop391), $2 + i32.const $push390=, 0 + i32.store16 res+8($pop390), $3 + i32.const $push389=, 0 + i32.store16 res+6($pop389), $4 + i32.const $push388=, 0 + i32.store16 res+4($pop388), $5 + i32.const $push387=, 0 + i32.store16 res+2($pop387), $6 + i32.const $push386=, 0 + i32.store16 res($pop386), $7 + i32.const $push385=, 16 + i32.shl $push135=, $7, $pop385 + i32.const $push384=, 16 + i32.shr_s $push136=, $pop135, $pop384 + i32.const $push383=, 16 + i32.shl $push133=, $6, $pop383 + i32.const $push382=, 16 + i32.shr_s $push134=, $pop133, $pop382 + i32.const $push381=, 16 + i32.shl $push131=, $5, $pop381 + i32.const $push380=, 16 + i32.shr_s $push132=, $pop131, $pop380 + i32.const $push379=, 16 + i32.shl $push129=, $4, $pop379 + i32.const $push378=, 16 + i32.shr_s $push130=, $pop129, $pop378 + i32.const $push140=, 158 + i32.const $push139=, 109 + i32.const $push138=, 150 + i32.const $push137=, 222 + call verify@FUNCTION, $pop136, $pop134, $pop132, $pop130, $pop140, $pop139, $pop138, $pop137 + i32.const $push377=, 0 + i32.const $push376=, 0 + i32.load16_u $push142=, j+14($pop376) + i32.const $push375=, 0 + i32.load16_u $push141=, i+14($pop375) + i32.xor $push374=, $pop142, $pop141 + tee_local $push373=, $0=, $pop374 + i32.store16 k+14($pop377), $pop373 + i32.const $push372=, 0 + i32.const $push371=, 0 + i32.load16_u $push144=, j+12($pop371) + i32.const $push370=, 0 + i32.load16_u $push143=, i+12($pop370) + i32.xor $push369=, $pop144, $pop143 + tee_local $push368=, $1=, $pop369 + i32.store16 k+12($pop372), $pop368 + i32.const $push367=, 0 + i32.const $push366=, 0 + i32.load16_u $push146=, j+10($pop366) + i32.const $push365=, 0 + i32.load16_u $push145=, i+10($pop365) + i32.xor $push364=, $pop146, $pop145 + tee_local $push363=, $2=, $pop364 + i32.store16 k+10($pop367), $pop363 + i32.const $push362=, 0 + i32.const $push361=, 0 + i32.load16_u $push148=, j+8($pop361) + i32.const $push360=, 0 + i32.load16_u $push147=, i+8($pop360) + i32.xor $push359=, $pop148, $pop147 + tee_local $push358=, $3=, $pop359 + i32.store16 k+8($pop362), $pop358 + i32.const $push357=, 0 + i32.const $push356=, 0 + i32.load16_u $push150=, j+6($pop356) + i32.const $push355=, 0 + i32.load16_u $push149=, i+6($pop355) + i32.xor $push354=, $pop150, $pop149 + tee_local $push353=, $4=, $pop354 + i32.store16 k+6($pop357), $pop353 + i32.const $push352=, 0 + i32.const $push351=, 0 + i32.load16_u $push152=, j+4($pop351) + i32.const $push350=, 0 + i32.load16_u $push151=, i+4($pop350) + i32.xor $push349=, $pop152, $pop151 + tee_local $push348=, $5=, $pop349 + i32.store16 k+4($pop352), $pop348 + i32.const $push347=, 0 + i32.const $push346=, 0 + i32.load16_u $push154=, j+2($pop346) + i32.const $push345=, 0 + i32.load16_u $push153=, i+2($pop345) + i32.xor $push344=, $pop154, $pop153 + tee_local $push343=, $6=, $pop344 + i32.store16 k+2($pop347), $pop343 + i32.const $push342=, 0 + i32.const $push341=, 0 + i32.load16_u $push156=, j($pop341) + i32.const $push340=, 0 + i32.load16_u $push155=, i($pop340) + i32.xor $push339=, $pop156, $pop155 + tee_local $push338=, $7=, $pop339 + i32.store16 k($pop342), $pop338 + i32.const $push337=, 0 + i32.store16 res+14($pop337), $0 + i32.const $push336=, 0 + i32.store16 res+12($pop336), $1 + i32.const $push335=, 0 + i32.store16 res+10($pop335), $2 + i32.const $push334=, 0 + i32.store16 res+8($pop334), $3 + i32.const $push333=, 0 + i32.store16 res+6($pop333), $4 + i32.const $push332=, 0 + i32.store16 res+4($pop332), $5 + i32.const $push331=, 0 + i32.store16 res+2($pop331), $6 + i32.const $push330=, 0 + i32.store16 res($pop330), $7 + i32.const $push329=, 16 + i32.shl $push163=, $7, $pop329 + i32.const $push328=, 16 + i32.shr_s $push164=, $pop163, $pop328 + i32.const $push327=, 16 + i32.shl $push161=, $6, $pop327 + i32.const $push326=, 16 + i32.shr_s $push162=, $pop161, $pop326 + i32.const $push325=, 16 + i32.shl $push159=, $5, $pop325 + i32.const $push324=, 16 + i32.shr_s $push160=, $pop159, $pop324 + i32.const $push323=, 16 + i32.shl $push157=, $4, $pop323 + i32.const $push322=, 16 + i32.shr_s $push158=, $pop157, $pop322 + i32.const $push168=, 156 + i32.const $push167=, 105 + i32.const $push166=, 130 + i32.const $push165=, 214 + call verify@FUNCTION, $pop164, $pop162, $pop160, $pop158, $pop168, $pop167, $pop166, $pop165 + i32.const $push321=, 0 + i32.const $push320=, 0 + i32.const $push319=, 0 + i32.load16_u $push169=, i+14($pop319) + i32.sub $push318=, $pop320, $pop169 + tee_local $push317=, $0=, $pop318 + i32.store16 k+14($pop321), $pop317 + i32.const $push316=, 0 + i32.const $push315=, 0 + i32.const $push314=, 0 + i32.load16_u $push170=, i+12($pop314) + i32.sub $push313=, $pop315, $pop170 + tee_local $push312=, $1=, $pop313 + i32.store16 k+12($pop316), $pop312 + i32.const $push311=, 0 + i32.const $push310=, 0 + i32.const $push309=, 0 + i32.load16_u $push171=, i+10($pop309) + i32.sub $push308=, $pop310, $pop171 + tee_local $push307=, $2=, $pop308 + i32.store16 k+10($pop311), $pop307 + i32.const $push306=, 0 + i32.const $push305=, 0 + i32.const $push304=, 0 + i32.load16_u $push172=, i+8($pop304) + i32.sub $push303=, $pop305, $pop172 + tee_local $push302=, $3=, $pop303 + i32.store16 k+8($pop306), $pop302 + i32.const $push301=, 0 + i32.const $push300=, 0 + i32.const $push299=, 0 + i32.load16_u $push173=, i+6($pop299) + i32.sub $push298=, $pop300, $pop173 + tee_local $push297=, $4=, $pop298 + i32.store16 k+6($pop301), $pop297 + i32.const $push296=, 0 + i32.const $push295=, 0 + i32.const $push294=, 0 + i32.load16_u $push174=, i+4($pop294) + i32.sub $push293=, $pop295, $pop174 + tee_local $push292=, $5=, $pop293 + i32.store16 k+4($pop296), $pop292 + i32.const $push291=, 0 + i32.const $push290=, 0 + i32.const $push289=, 0 + i32.load16_u $push175=, i+2($pop289) + i32.sub $push288=, $pop290, $pop175 + tee_local $push287=, $6=, $pop288 + i32.store16 k+2($pop291), $pop287 + i32.const $push286=, 0 + i32.const $push285=, 0 + i32.const $push284=, 0 + i32.load16_u $push176=, i($pop284) + i32.sub $push283=, $pop285, $pop176 + tee_local $push282=, $7=, $pop283 + i32.store16 k($pop286), $pop282 + i32.const $push281=, 0 + i32.store16 res+14($pop281), $0 + i32.const $push280=, 0 + i32.store16 res+12($pop280), $1 + i32.const $push279=, 0 + i32.store16 res+10($pop279), $2 + i32.const $push278=, 0 + i32.store16 res+8($pop278), $3 + i32.const $push277=, 0 + i32.store16 res+6($pop277), $4 + i32.const $push276=, 0 + i32.store16 res+4($pop276), $5 + i32.const $push275=, 0 + i32.store16 res+2($pop275), $6 + i32.const $push274=, 0 + i32.store16 res($pop274), $7 + i32.const $push273=, 16 + i32.shl $push183=, $7, $pop273 + i32.const $push272=, 16 + i32.shr_s $push184=, $pop183, $pop272 + i32.const $push271=, 16 + i32.shl $push181=, $6, $pop271 + i32.const $push270=, 16 + i32.shr_s $push182=, $pop181, $pop270 + i32.const $push269=, 16 + i32.shl $push179=, $5, $pop269 + i32.const $push268=, 16 + i32.shr_s $push180=, $pop179, $pop268 + i32.const $push267=, 16 + i32.shl $push177=, $4, $pop267 + i32.const $push266=, 16 + i32.shr_s $push178=, $pop177, $pop266 + i32.const $push187=, -150 + i32.const $push186=, -100 + i32.const $push265=, -150 + i32.const $push185=, -200 + call verify@FUNCTION, $pop184, $pop182, $pop180, $pop178, $pop187, $pop186, $pop265, $pop185 + i32.const $push264=, 0 + i32.const $push263=, 0 + i32.load16_u $push188=, i+14($pop263) + i32.const $push189=, -1 + i32.xor $push262=, $pop188, $pop189 + tee_local $push261=, $0=, $pop262 + i32.store16 k+14($pop264), $pop261 + i32.const $push260=, 0 + i32.const $push259=, 0 + i32.load16_u $push190=, i+12($pop259) + i32.const $push258=, -1 + i32.xor $push257=, $pop190, $pop258 + tee_local $push256=, $1=, $pop257 + i32.store16 k+12($pop260), $pop256 + i32.const $push255=, 0 + i32.const $push254=, 0 + i32.load16_u $push191=, i+10($pop254) + i32.const $push253=, -1 + i32.xor $push252=, $pop191, $pop253 + tee_local $push251=, $2=, $pop252 + i32.store16 k+10($pop255), $pop251 + i32.const $push250=, 0 + i32.const $push249=, 0 + i32.load16_u $push192=, i+8($pop249) + i32.const $push248=, -1 + i32.xor $push247=, $pop192, $pop248 + tee_local $push246=, $3=, $pop247 + i32.store16 k+8($pop250), $pop246 + i32.const $push245=, 0 + i32.const $push244=, 0 + i32.load16_u $push193=, i+6($pop244) + i32.const $push243=, -1 + i32.xor $push242=, $pop193, $pop243 + tee_local $push241=, $4=, $pop242 + i32.store16 k+6($pop245), $pop241 + i32.const $push240=, 0 + i32.const $push239=, 0 + i32.load16_u $push194=, i+4($pop239) + i32.const $push238=, -1 + i32.xor $push237=, $pop194, $pop238 + tee_local $push236=, $5=, $pop237 + i32.store16 k+4($pop240), $pop236 + i32.const $push235=, 0 + i32.const $push234=, 0 + i32.load16_u $push195=, i+2($pop234) + i32.const $push233=, -1 + i32.xor $push232=, $pop195, $pop233 + tee_local $push231=, $6=, $pop232 + i32.store16 k+2($pop235), $pop231 + i32.const $push230=, 0 + i32.const $push229=, 0 + i32.load16_u $push196=, i($pop229) + i32.const $push228=, -1 + i32.xor $push227=, $pop196, $pop228 + tee_local $push226=, $7=, $pop227 + i32.store16 k($pop230), $pop226 + i32.const $push225=, 0 + i32.store16 res+14($pop225), $0 + i32.const $push224=, 0 + i32.store16 res+12($pop224), $1 + i32.const $push223=, 0 + i32.store16 res+10($pop223), $2 + i32.const $push222=, 0 + i32.store16 res+8($pop222), $3 + i32.const $push221=, 0 + i32.store16 res+6($pop221), $4 + i32.const $push220=, 0 + i32.store16 res+4($pop220), $5 + i32.const $push219=, 0 + i32.store16 res+2($pop219), $6 + i32.const $push218=, 0 + i32.store16 res($pop218), $7 + i32.const $push217=, 16 + i32.shl $push203=, $7, $pop217 + i32.const $push216=, 16 + i32.shr_s $push204=, $pop203, $pop216 + i32.const $push215=, 16 + i32.shl $push201=, $6, $pop215 + i32.const $push214=, 16 + i32.shr_s $push202=, $pop201, $pop214 + i32.const $push213=, 16 + i32.shl $push199=, $5, $pop213 + i32.const $push212=, 16 + i32.shr_s $push200=, $pop199, $pop212 + i32.const $push211=, 16 + i32.shl $push197=, $4, $pop211 + i32.const $push210=, 16 + i32.shr_s $push198=, $pop197, $pop210 + i32.const $push207=, -151 + i32.const $push206=, -101 + i32.const $push209=, -151 + i32.const $push205=, -201 + call verify@FUNCTION, $pop204, $pop202, $pop200, $pop198, $pop207, $pop206, $pop209, $pop205 + i32.const $push208=, 0 + call exit@FUNCTION, $pop208 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden i # @i + .type i,@object + .section .data.i,"aw",@progbits + .globl i + .p2align 4 +i: + .int16 150 # 0x96 + .int16 100 # 0x64 + .int16 150 # 0x96 + .int16 200 # 0xc8 + .int16 0 # 0x0 + .int16 0 # 0x0 + .int16 0 # 0x0 + .int16 0 # 0x0 + .size i, 16 + + .hidden j # @j + .type j,@object + .section .data.j,"aw",@progbits + .globl j + .p2align 4 +j: + .int16 10 # 0xa + .int16 13 # 0xd + .int16 20 # 0x14 + .int16 30 # 0x1e + .int16 1 # 0x1 + .int16 1 # 0x1 + .int16 1 # 0x1 + .int16 1 # 0x1 + .size j, 16 + + .hidden k # @k + .type k,@object + .section .bss.k,"aw",@nobits + .globl k + .p2align 4 +k: + .skip 16 + .size k, 16 + + .hidden res # @res + .type res,@object + .section .bss.res,"aw",@nobits + .globl res + .p2align 4 +res: + .skip 16 + .size res, 16 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/simd-4.c.s b/src/binaryen/test/torture-s/simd-4.c.s new file mode 100644 index 0000000000..88e1ddf425 --- /dev/null +++ b/src/binaryen/test/torture-s/simd-4.c.s @@ -0,0 +1,29 @@ + .text + .file "simd-4.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push1=, 0 + i64.const $push0=, -4294967295 + i64.store s64($pop1), $pop0 + i32.const $push2=, 0 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden s64 # @s64 + .type s64,@object + .section .bss.s64,"aw",@nobits + .globl s64 + .p2align 3 +s64: + .int64 0 # 0x0 + .size s64, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/simd-5.c.s b/src/binaryen/test/torture-s/simd-5.c.s new file mode 100644 index 0000000000..341511b348 --- /dev/null +++ b/src/binaryen/test/torture-s/simd-5.c.s @@ -0,0 +1,381 @@ + .text + .file "simd-5.c" + .section .text.func0,"ax",@progbits + .hidden func0 # -- Begin function func0 + .globl func0 + .type func0,@function +func0: # @func0 +# BB#0: # %entry + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store dummy($pop1), $pop0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size func0, .Lfunc_end0-func0 + # -- End function + .section .text.func1,"ax",@progbits + .hidden func1 # -- Begin function func1 + .globl func1 + .type func1,@function +func1: # @func1 + .local i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push63=, 0 + i32.load16_u $push2=, q2+6($pop63) + i32.const $push62=, 0 + i32.load16_u $push1=, q1+6($pop62) + i32.mul $push61=, $pop2, $pop1 + tee_local $push60=, $0=, $pop61 + i32.store16 w1+6($pop0), $pop60 + i32.const $push59=, 0 + i32.const $push58=, 0 + i32.load16_u $push4=, q2+4($pop58) + i32.const $push57=, 0 + i32.load16_u $push3=, q1+4($pop57) + i32.mul $push56=, $pop4, $pop3 + tee_local $push55=, $1=, $pop56 + i32.store16 w1+4($pop59), $pop55 + i32.const $push54=, 0 + i32.const $push53=, 0 + i32.load16_u $push6=, q2+2($pop53) + i32.const $push52=, 0 + i32.load16_u $push5=, q1+2($pop52) + i32.mul $push51=, $pop6, $pop5 + tee_local $push50=, $2=, $pop51 + i32.store16 w1+2($pop54), $pop50 + i32.const $push49=, 0 + i32.const $push48=, 0 + i32.load16_u $push8=, q2($pop48) + i32.const $push47=, 0 + i32.load16_u $push7=, q1($pop47) + i32.mul $push46=, $pop8, $pop7 + tee_local $push45=, $3=, $pop46 + i32.store16 w1($pop49), $pop45 + i32.const $push44=, 0 + i32.const $push43=, 0 + i32.load16_u $push10=, q4+6($pop43) + i32.const $push42=, 0 + i32.load16_u $push9=, q3+6($pop42) + i32.mul $push41=, $pop10, $pop9 + tee_local $push40=, $4=, $pop41 + i32.store16 w2+6($pop44), $pop40 + i32.const $push39=, 0 + i32.const $push38=, 0 + i32.load16_u $push12=, q4+4($pop38) + i32.const $push37=, 0 + i32.load16_u $push11=, q3+4($pop37) + i32.mul $push36=, $pop12, $pop11 + tee_local $push35=, $5=, $pop36 + i32.store16 w2+4($pop39), $pop35 + i32.const $push34=, 0 + i32.const $push33=, 0 + i32.load16_u $push14=, q4+2($pop33) + i32.const $push32=, 0 + i32.load16_u $push13=, q3+2($pop32) + i32.mul $push31=, $pop14, $pop13 + tee_local $push30=, $6=, $pop31 + i32.store16 w2+2($pop34), $pop30 + i32.const $push29=, 0 + i32.const $push28=, 0 + i32.load16_u $push16=, q4($pop28) + i32.const $push27=, 0 + i32.load16_u $push15=, q3($pop27) + i32.mul $push26=, $pop16, $pop15 + tee_local $push25=, $7=, $pop26 + i32.store16 w2($pop29), $pop25 + call func0@FUNCTION + i32.const $push24=, 0 + i32.store16 w4+6($pop24), $4 + i32.const $push23=, 0 + i32.store16 w4+4($pop23), $5 + i32.const $push22=, 0 + i32.store16 w4+2($pop22), $6 + i32.const $push21=, 0 + i32.store16 w4($pop21), $7 + i32.const $push20=, 0 + i32.store16 w3+6($pop20), $0 + i32.const $push19=, 0 + i32.store16 w3+4($pop19), $1 + i32.const $push18=, 0 + i32.store16 w3+2($pop18), $2 + i32.const $push17=, 0 + i32.store16 w3($pop17), $3 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size func1, .Lfunc_end1-func1 + # -- End function + .section .text.func2,"ax",@progbits + .hidden func2 # -- Begin function func2 + .globl func2 + .type func2,@function +func2: # @func2 + .local i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push63=, 0 + i32.load16_u $push2=, q2+6($pop63) + i32.const $push62=, 0 + i32.load16_u $push1=, q1+6($pop62) + i32.add $push61=, $pop2, $pop1 + tee_local $push60=, $0=, $pop61 + i32.store16 z1+6($pop0), $pop60 + i32.const $push59=, 0 + i32.const $push58=, 0 + i32.load16_u $push4=, q2+4($pop58) + i32.const $push57=, 0 + i32.load16_u $push3=, q1+4($pop57) + i32.add $push56=, $pop4, $pop3 + tee_local $push55=, $1=, $pop56 + i32.store16 z1+4($pop59), $pop55 + i32.const $push54=, 0 + i32.const $push53=, 0 + i32.load16_u $push6=, q2+2($pop53) + i32.const $push52=, 0 + i32.load16_u $push5=, q1+2($pop52) + i32.add $push51=, $pop6, $pop5 + tee_local $push50=, $2=, $pop51 + i32.store16 z1+2($pop54), $pop50 + i32.const $push49=, 0 + i32.const $push48=, 0 + i32.load16_u $push8=, q2($pop48) + i32.const $push47=, 0 + i32.load16_u $push7=, q1($pop47) + i32.add $push46=, $pop8, $pop7 + tee_local $push45=, $3=, $pop46 + i32.store16 z1($pop49), $pop45 + i32.const $push44=, 0 + i32.const $push43=, 0 + i32.load16_u $push10=, q3+6($pop43) + i32.const $push42=, 0 + i32.load16_u $push9=, q4+6($pop42) + i32.sub $push41=, $pop10, $pop9 + tee_local $push40=, $4=, $pop41 + i32.store16 z2+6($pop44), $pop40 + i32.const $push39=, 0 + i32.const $push38=, 0 + i32.load16_u $push12=, q3+4($pop38) + i32.const $push37=, 0 + i32.load16_u $push11=, q4+4($pop37) + i32.sub $push36=, $pop12, $pop11 + tee_local $push35=, $5=, $pop36 + i32.store16 z2+4($pop39), $pop35 + i32.const $push34=, 0 + i32.const $push33=, 0 + i32.load16_u $push14=, q3+2($pop33) + i32.const $push32=, 0 + i32.load16_u $push13=, q4+2($pop32) + i32.sub $push31=, $pop14, $pop13 + tee_local $push30=, $6=, $pop31 + i32.store16 z2+2($pop34), $pop30 + i32.const $push29=, 0 + i32.const $push28=, 0 + i32.load16_u $push16=, q3($pop28) + i32.const $push27=, 0 + i32.load16_u $push15=, q4($pop27) + i32.sub $push26=, $pop16, $pop15 + tee_local $push25=, $7=, $pop26 + i32.store16 z2($pop29), $pop25 + call func1@FUNCTION + i32.const $push24=, 0 + i32.store16 z4+6($pop24), $4 + i32.const $push23=, 0 + i32.store16 z4+4($pop23), $5 + i32.const $push22=, 0 + i32.store16 z4+2($pop22), $6 + i32.const $push21=, 0 + i32.store16 z4($pop21), $7 + i32.const $push20=, 0 + i32.store16 z3+6($pop20), $0 + i32.const $push19=, 0 + i32.store16 z3+4($pop19), $1 + i32.const $push18=, 0 + i32.store16 z3+2($pop18), $2 + i32.const $push17=, 0 + i32.store16 z3($pop17), $3 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size func2, .Lfunc_end2-func2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + call func2@FUNCTION + block + i32.const $push14=, 0 + i64.load $push1=, w1($pop14) + i32.const $push13=, 0 + i64.load $push0=, w3($pop13) + i64.ne $push2=, $pop1, $pop0 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push16=, 0 + i64.load $push4=, w2($pop16) + i32.const $push15=, 0 + i64.load $push3=, w4($pop15) + i64.ne $push5=, $pop4, $pop3 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end4 + i32.const $push18=, 0 + i64.load $push7=, z1($pop18) + i32.const $push17=, 0 + i64.load $push6=, z3($pop17) + i64.ne $push8=, $pop7, $pop6 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %if.end8 + i32.const $push20=, 0 + i64.load $push10=, z2($pop20) + i32.const $push19=, 0 + i64.load $push9=, z4($pop19) + i64.ne $push11=, $pop10, $pop9 + br_if 0, $pop11 # 0: down to label0 +# BB#4: # %if.end12 + i32.const $push12=, 0 + return $pop12 +.LBB3_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden q1 # @q1 + .type q1,@object + .section .data.q1,"aw",@progbits + .globl q1 + .p2align 3 +q1: + .int16 1 # 0x1 + .int16 2 # 0x2 + .int16 0 # 0x0 + .int16 0 # 0x0 + .size q1, 8 + + .hidden q2 # @q2 + .type q2,@object + .section .data.q2,"aw",@progbits + .globl q2 + .p2align 3 +q2: + .int16 3 # 0x3 + .int16 4 # 0x4 + .int16 0 # 0x0 + .int16 0 # 0x0 + .size q2, 8 + + .hidden q3 # @q3 + .type q3,@object + .section .data.q3,"aw",@progbits + .globl q3 + .p2align 3 +q3: + .int16 5 # 0x5 + .int16 6 # 0x6 + .int16 0 # 0x0 + .int16 0 # 0x0 + .size q3, 8 + + .hidden q4 # @q4 + .type q4,@object + .section .data.q4,"aw",@progbits + .globl q4 + .p2align 3 +q4: + .int16 7 # 0x7 + .int16 8 # 0x8 + .int16 0 # 0x0 + .int16 0 # 0x0 + .size q4, 8 + + .hidden dummy # @dummy + .type dummy,@object + .section .bss.dummy,"aw",@nobits + .globl dummy + .p2align 2 +dummy: + .int32 0 # 0x0 + .size dummy, 4 + + .hidden w1 # @w1 + .type w1,@object + .section .bss.w1,"aw",@nobits + .globl w1 + .p2align 3 +w1: + .skip 8 + .size w1, 8 + + .hidden w2 # @w2 + .type w2,@object + .section .bss.w2,"aw",@nobits + .globl w2 + .p2align 3 +w2: + .skip 8 + .size w2, 8 + + .hidden w3 # @w3 + .type w3,@object + .section .bss.w3,"aw",@nobits + .globl w3 + .p2align 3 +w3: + .skip 8 + .size w3, 8 + + .hidden w4 # @w4 + .type w4,@object + .section .bss.w4,"aw",@nobits + .globl w4 + .p2align 3 +w4: + .skip 8 + .size w4, 8 + + .hidden z1 # @z1 + .type z1,@object + .section .bss.z1,"aw",@nobits + .globl z1 + .p2align 3 +z1: + .skip 8 + .size z1, 8 + + .hidden z2 # @z2 + .type z2,@object + .section .bss.z2,"aw",@nobits + .globl z2 + .p2align 3 +z2: + .skip 8 + .size z2, 8 + + .hidden z3 # @z3 + .type z3,@object + .section .bss.z3,"aw",@nobits + .globl z3 + .p2align 3 +z3: + .skip 8 + .size z3, 8 + + .hidden z4 # @z4 + .type z4,@object + .section .bss.z4,"aw",@nobits + .globl z4 + .p2align 3 +z4: + .skip 8 + .size z4, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/simd-6.c.s b/src/binaryen/test/torture-s/simd-6.c.s new file mode 100644 index 0000000000..df66911d10 --- /dev/null +++ b/src/binaryen/test/torture-s/simd-6.c.s @@ -0,0 +1,59 @@ + .text + .file "simd-6.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push1=, 7 + i32.add $push2=, $0, $pop1 + i32.mul $push0=, $16, $8 + i32.store8 0($pop2), $pop0 + i32.const $push4=, 6 + i32.add $push5=, $0, $pop4 + i32.mul $push3=, $15, $7 + i32.store8 0($pop5), $pop3 + i32.const $push7=, 5 + i32.add $push8=, $0, $pop7 + i32.mul $push6=, $14, $6 + i32.store8 0($pop8), $pop6 + i32.const $push10=, 4 + i32.add $push11=, $0, $pop10 + i32.mul $push9=, $13, $5 + i32.store8 0($pop11), $pop9 + i32.const $push13=, 3 + i32.add $push14=, $0, $pop13 + i32.mul $push12=, $12, $4 + i32.store8 0($pop14), $pop12 + i32.const $push16=, 2 + i32.add $push17=, $0, $pop16 + i32.mul $push15=, $11, $3 + i32.store8 0($pop17), $pop15 + i32.const $push19=, 1 + i32.add $push20=, $0, $pop19 + i32.mul $push18=, $10, $2 + i32.store8 0($pop20), $pop18 + i32.mul $push21=, $9, $1 + i32.store8 0($0), $pop21 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/stdarg-1.c.s b/src/binaryen/test/torture-s/stdarg-1.c.s new file mode 100644 index 0000000000..89ffee24ba --- /dev/null +++ b/src/binaryen/test/torture-s/stdarg-1.c.s @@ -0,0 +1,1270 @@ + .text + .file "stdarg-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 +# BB#0: # %entry + block + i32.const $push0=, 5 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %sw.bb + i32.const $push3=, 0 + i32.load $push2=, 0($1) + i32.store foo_arg($pop3), $pop2 + return +.LBB0_2: # %sw.default + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .local i32, i32 +# BB#0: # %entry + block + block + block + i32.const $push0=, 16392 + i32.eq $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label3 +# BB#1: # %entry + i32.const $push2=, 16390 + i32.ne $push3=, $0, $pop2 + br_if 1, $pop3 # 1: down to label2 +# BB#2: # %if.then + i32.const $push49=, 0 + i32.const $push48=, 0 + i32.load $push30=, gap($pop48) + i32.const $push31=, 7 + i32.add $push32=, $pop30, $pop31 + i32.const $push33=, -8 + i32.and $push47=, $pop32, $pop33 + tee_local $push46=, $1=, $pop47 + i32.const $push34=, 8 + i32.add $push45=, $pop46, $pop34 + tee_local $push44=, $2=, $pop45 + i32.store gap($pop49), $pop44 + f64.load $push35=, 0($1) + f64.const $push36=, 0x1.1p4 + f64.ne $push37=, $pop35, $pop36 + br_if 2, $pop37 # 2: down to label1 +# BB#3: # %lor.lhs.false + i32.const $push50=, 0 + i32.const $push38=, 12 + i32.add $push39=, $1, $pop38 + i32.store gap($pop50), $pop39 + i32.load $push40=, 0($2) + i32.const $push41=, 129 + i32.eq $push42=, $pop40, $pop41 + br_if 1, $pop42 # 1: down to label2 + br 2 # 2: down to label1 +.LBB1_4: # %if.then7 + end_block # label3: + i32.const $push55=, 0 + i32.load $push54=, pap($pop55) + tee_local $push53=, $1=, $pop54 + i32.load $push4=, 0($1) + i32.const $push5=, 7 + i32.add $push6=, $pop4, $pop5 + i32.const $push7=, -8 + i32.and $push52=, $pop6, $pop7 + tee_local $push51=, $1=, $pop52 + i32.const $push8=, 8 + i32.add $push9=, $pop51, $pop8 + i32.store 0($pop53), $pop9 + i64.load $push10=, 0($1) + i64.const $push11=, 14 + i64.ne $push12=, $pop10, $pop11 + br_if 1, $pop12 # 1: down to label1 +# BB#5: # %lor.lhs.false11 + i32.const $push60=, 0 + i32.load $push59=, pap($pop60) + tee_local $push58=, $1=, $pop59 + i32.load $push13=, 0($1) + i32.const $push14=, 15 + i32.add $push15=, $pop13, $pop14 + i32.const $push16=, -16 + i32.and $push57=, $pop15, $pop16 + tee_local $push56=, $1=, $pop57 + i32.const $push17=, 16 + i32.add $push18=, $pop56, $pop17 + i32.store 0($pop58), $pop18 + i64.load $push20=, 0($1) + i64.load $push19=, 8($1) + i64.const $push22=, 0 + i64.const $push21=, 4613381465357418496 + i32.call $push23=, __netf2@FUNCTION, $pop20, $pop19, $pop22, $pop21 + br_if 1, $pop23 # 1: down to label1 +# BB#6: # %lor.lhs.false15 + i32.const $push24=, 0 + i32.load $push64=, pap($pop24) + tee_local $push63=, $1=, $pop64 + i32.load $push62=, 0($1) + tee_local $push61=, $1=, $pop62 + i32.const $push25=, 4 + i32.add $push26=, $pop61, $pop25 + i32.store 0($pop63), $pop26 + i32.load $push27=, 0($1) + i32.const $push28=, 17 + i32.ne $push29=, $pop27, $pop28 + br_if 1, $pop29 # 1: down to label1 +.LBB1_7: # %if.end22 + end_block # label2: + i32.const $push43=, 0 + i32.store bar_arg($pop43), $0 + return +.LBB1_8: # %if.then5 + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.f0,"ax",@progbits + .hidden f0 # -- Begin function f0 + .globl f0 + .type f0,@function +f0: # @f0 + .param i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end2: + .size f0, .Lfunc_end2-f0 + # -- End function + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32, i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end3: + .size f1, .Lfunc_end3-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push91=, 0 + i32.const $push89=, 0 + i32.load $push88=, __stack_pointer($pop89) + i32.const $push90=, 16 + i32.sub $push99=, $pop88, $pop90 + tee_local $push98=, $4=, $pop99 + i32.store __stack_pointer($pop91), $pop98 + i32.store 12($4), $1 + block + block + block + i32.const $push97=, 0 + f64.load $push0=, d($pop97) + i32.trunc_s/f64 $push96=, $pop0 + tee_local $push95=, $1=, $pop96 + i32.const $push1=, 16392 + i32.eq $push2=, $pop95, $pop1 + br_if 0, $pop2 # 0: down to label6 +# BB#1: # %entry + i32.const $push3=, 16390 + i32.ne $push4=, $1, $pop3 + br_if 1, $pop4 # 1: down to label5 +# BB#2: # %if.then.i + i32.const $push105=, 0 + i32.const $push104=, 0 + i32.load $push30=, gap($pop104) + i32.const $push31=, 7 + i32.add $push32=, $pop30, $pop31 + i32.const $push33=, -8 + i32.and $push103=, $pop32, $pop33 + tee_local $push102=, $2=, $pop103 + i32.const $push34=, 8 + i32.add $push101=, $pop102, $pop34 + tee_local $push100=, $3=, $pop101 + i32.store gap($pop105), $pop100 + f64.load $push35=, 0($2) + f64.const $push36=, 0x1.1p4 + f64.ne $push37=, $pop35, $pop36 + br_if 2, $pop37 # 2: down to label4 +# BB#3: # %lor.lhs.false.i + i32.const $push106=, 0 + i32.const $push38=, 12 + i32.add $push39=, $2, $pop38 + i32.store gap($pop106), $pop39 + i32.load $push40=, 0($3) + i32.const $push41=, 129 + i32.eq $push42=, $pop40, $pop41 + br_if 1, $pop42 # 1: down to label5 + br 2 # 2: down to label4 +.LBB4_4: # %if.then7.i + end_block # label6: + i32.const $push111=, 0 + i32.load $push110=, pap($pop111) + tee_local $push109=, $2=, $pop110 + i32.load $push5=, 0($2) + i32.const $push6=, 7 + i32.add $push7=, $pop5, $pop6 + i32.const $push8=, -8 + i32.and $push108=, $pop7, $pop8 + tee_local $push107=, $2=, $pop108 + i32.const $push9=, 8 + i32.add $push10=, $pop107, $pop9 + i32.store 0($pop109), $pop10 + i64.load $push11=, 0($2) + i64.const $push12=, 14 + i64.ne $push13=, $pop11, $pop12 + br_if 1, $pop13 # 1: down to label4 +# BB#5: # %lor.lhs.false11.i + i32.const $push116=, 0 + i32.load $push115=, pap($pop116) + tee_local $push114=, $2=, $pop115 + i32.load $push14=, 0($2) + i32.const $push15=, 15 + i32.add $push16=, $pop14, $pop15 + i32.const $push17=, -16 + i32.and $push113=, $pop16, $pop17 + tee_local $push112=, $2=, $pop113 + i32.const $push18=, 16 + i32.add $push19=, $pop112, $pop18 + i32.store 0($pop114), $pop19 + i64.load $push21=, 0($2) + i64.load $push20=, 8($2) + i64.const $push23=, 0 + i64.const $push22=, 4613381465357418496 + i32.call $push24=, __netf2@FUNCTION, $pop21, $pop20, $pop23, $pop22 + br_if 1, $pop24 # 1: down to label4 +# BB#6: # %lor.lhs.false15.i + i32.const $push121=, 0 + i32.load $push120=, pap($pop121) + tee_local $push119=, $2=, $pop120 + i32.load $push118=, 0($2) + tee_local $push117=, $2=, $pop118 + i32.const $push25=, 4 + i32.add $push26=, $pop117, $pop25 + i32.store 0($pop119), $pop26 + i32.load $push27=, 0($2) + i32.const $push28=, 17 + i32.ne $push29=, $pop27, $pop28 + br_if 1, $pop29 # 1: down to label4 +.LBB4_7: # %bar.exit + end_block # label5: + i32.const $push127=, 0 + i32.store bar_arg($pop127), $1 + i32.load $push126=, 12($4) + tee_local $push125=, $1=, $pop126 + i32.const $push43=, 4 + i32.add $push44=, $pop125, $pop43 + i32.store 12($4), $pop44 + i32.const $push124=, 0 + i32.load $push123=, 0($1) + tee_local $push122=, $1=, $pop123 + i32.store x($pop124), $pop122 + block + block + i32.const $push45=, 16392 + i32.eq $push46=, $1, $pop45 + br_if 0, $pop46 # 0: down to label8 +# BB#8: # %bar.exit + i32.const $push47=, 16390 + i32.ne $push48=, $1, $pop47 + br_if 1, $pop48 # 1: down to label7 +# BB#9: # %if.then.i7 + i32.const $push133=, 0 + i32.const $push132=, 0 + i32.load $push74=, gap($pop132) + i32.const $push75=, 7 + i32.add $push76=, $pop74, $pop75 + i32.const $push77=, -8 + i32.and $push131=, $pop76, $pop77 + tee_local $push130=, $2=, $pop131 + i32.const $push78=, 8 + i32.add $push129=, $pop130, $pop78 + tee_local $push128=, $3=, $pop129 + i32.store gap($pop133), $pop128 + f64.load $push79=, 0($2) + f64.const $push80=, 0x1.1p4 + f64.ne $push81=, $pop79, $pop80 + br_if 2, $pop81 # 2: down to label4 +# BB#10: # %lor.lhs.false.i10 + i32.const $push134=, 0 + i32.const $push82=, 12 + i32.add $push83=, $2, $pop82 + i32.store gap($pop134), $pop83 + i32.load $push84=, 0($3) + i32.const $push85=, 129 + i32.eq $push86=, $pop84, $pop85 + br_if 1, $pop86 # 1: down to label7 + br 2 # 2: down to label4 +.LBB4_11: # %if.then7.i16 + end_block # label8: + i32.const $push139=, 0 + i32.load $push138=, pap($pop139) + tee_local $push137=, $2=, $pop138 + i32.load $push49=, 0($2) + i32.const $push50=, 7 + i32.add $push51=, $pop49, $pop50 + i32.const $push52=, -8 + i32.and $push136=, $pop51, $pop52 + tee_local $push135=, $2=, $pop136 + i32.const $push53=, 8 + i32.add $push54=, $pop135, $pop53 + i32.store 0($pop137), $pop54 + i64.load $push55=, 0($2) + i64.const $push56=, 14 + i64.ne $push57=, $pop55, $pop56 + br_if 1, $pop57 # 1: down to label4 +# BB#12: # %lor.lhs.false11.i21 + i32.const $push144=, 0 + i32.load $push143=, pap($pop144) + tee_local $push142=, $2=, $pop143 + i32.load $push58=, 0($2) + i32.const $push59=, 15 + i32.add $push60=, $pop58, $pop59 + i32.const $push61=, -16 + i32.and $push141=, $pop60, $pop61 + tee_local $push140=, $2=, $pop141 + i32.const $push62=, 16 + i32.add $push63=, $pop140, $pop62 + i32.store 0($pop142), $pop63 + i64.load $push65=, 0($2) + i64.load $push64=, 8($2) + i64.const $push67=, 0 + i64.const $push66=, 4613381465357418496 + i32.call $push68=, __netf2@FUNCTION, $pop65, $pop64, $pop67, $pop66 + br_if 1, $pop68 # 1: down to label4 +# BB#13: # %lor.lhs.false15.i25 + i32.const $push149=, 0 + i32.load $push148=, pap($pop149) + tee_local $push147=, $2=, $pop148 + i32.load $push146=, 0($2) + tee_local $push145=, $2=, $pop146 + i32.const $push69=, 4 + i32.add $push70=, $pop145, $pop69 + i32.store 0($pop147), $pop70 + i32.load $push71=, 0($2) + i32.const $push72=, 17 + i32.ne $push73=, $pop71, $pop72 + br_if 1, $pop73 # 1: down to label4 +.LBB4_14: # %bar.exit27 + end_block # label7: + i32.const $push87=, 0 + i32.store bar_arg($pop87), $1 + i32.const $push94=, 0 + i32.const $push92=, 16 + i32.add $push93=, $4, $pop92 + i32.store __stack_pointer($pop94), $pop93 + return +.LBB4_15: # %if.then5.i + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end4: + .size f2, .Lfunc_end4-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.load $2=, __stack_pointer($pop7) + i32.const $push4=, 0 + i32.const $push0=, 7 + i32.add $push1=, $1, $pop0 + i32.const $push2=, -8 + i32.and $push11=, $pop1, $pop2 + tee_local $push10=, $1=, $pop11 + i64.load $push3=, 0($pop10) + i64.store d($pop4), $pop3 + i32.const $push8=, 16 + i32.sub $push9=, $2, $pop8 + i32.const $push5=, 8 + i32.add $push6=, $1, $pop5 + i32.store 12($pop9), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end5: + .size f3, .Lfunc_end5-f3 + # -- End function + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push22=, $pop9, $pop11 + tee_local $push21=, $2=, $pop22 + i32.store __stack_pointer($pop12), $pop21 + i32.const $push20=, 0 + i32.const $push0=, 7 + i32.add $push1=, $1, $pop0 + i32.const $push2=, -8 + i32.and $push19=, $pop1, $pop2 + tee_local $push18=, $1=, $pop19 + f64.load $push3=, 0($pop18) + i32.trunc_s/f64 $push4=, $pop3 + i32.store x($pop20), $pop4 + i32.const $push5=, 8 + i32.add $push17=, $1, $pop5 + tee_local $push16=, $1=, $pop17 + i32.store 12($2), $pop16 + block + i32.const $push6=, 5 + i32.ne $push7=, $0, $pop6 + br_if 0, $pop7 # 0: down to label9 +# BB#1: # %foo.exit + i32.const $push23=, 0 + i32.load $push8=, 0($1) + i32.store foo_arg($pop23), $pop8 + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $2, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB6_2: # %sw.default.i + end_block # label9: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end6: + .size f4, .Lfunc_end6-f4 + # -- End function + .section .text.f5,"ax",@progbits + .hidden f5 # -- Begin function f5 + .globl f5 + .type f5,@function +f5: # @f5 + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push46=, 0 + i32.const $push44=, 0 + i32.load $push43=, __stack_pointer($pop44) + i32.const $push45=, 16 + i32.sub $push52=, $pop43, $pop45 + tee_local $push51=, $3=, $pop52 + i32.store __stack_pointer($pop46), $pop51 + i32.const $push50=, 0 + i32.store gap($pop50), $1 + i32.store 12($3), $1 + block + block + block + i32.const $push0=, 16392 + i32.eq $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label12 +# BB#1: # %entry + i32.const $push2=, 16390 + i32.ne $push3=, $0, $pop2 + br_if 1, $pop3 # 1: down to label11 +# BB#2: # %if.then.i + i32.const $push58=, 0 + i32.const $push57=, 0 + i32.load $push29=, gap($pop57) + i32.const $push30=, 7 + i32.add $push31=, $pop29, $pop30 + i32.const $push32=, -8 + i32.and $push56=, $pop31, $pop32 + tee_local $push55=, $1=, $pop56 + i32.const $push33=, 8 + i32.add $push54=, $pop55, $pop33 + tee_local $push53=, $2=, $pop54 + i32.store gap($pop58), $pop53 + f64.load $push34=, 0($1) + f64.const $push35=, 0x1.1p4 + f64.ne $push36=, $pop34, $pop35 + br_if 2, $pop36 # 2: down to label10 +# BB#3: # %lor.lhs.false.i + i32.const $push59=, 0 + i32.const $push37=, 12 + i32.add $push38=, $1, $pop37 + i32.store gap($pop59), $pop38 + i32.load $push39=, 0($2) + i32.const $push40=, 129 + i32.eq $push41=, $pop39, $pop40 + br_if 1, $pop41 # 1: down to label11 + br 2 # 2: down to label10 +.LBB7_4: # %if.then7.i + end_block # label12: + i32.const $push64=, 0 + i32.load $push63=, pap($pop64) + tee_local $push62=, $1=, $pop63 + i32.load $push4=, 0($1) + i32.const $push5=, 7 + i32.add $push6=, $pop4, $pop5 + i32.const $push7=, -8 + i32.and $push61=, $pop6, $pop7 + tee_local $push60=, $1=, $pop61 + i32.const $push8=, 8 + i32.add $push9=, $pop60, $pop8 + i32.store 0($pop62), $pop9 + i64.load $push10=, 0($1) + i64.const $push11=, 14 + i64.ne $push12=, $pop10, $pop11 + br_if 1, $pop12 # 1: down to label10 +# BB#5: # %lor.lhs.false11.i + i32.const $push69=, 0 + i32.load $push68=, pap($pop69) + tee_local $push67=, $1=, $pop68 + i32.load $push13=, 0($1) + i32.const $push14=, 15 + i32.add $push15=, $pop13, $pop14 + i32.const $push16=, -16 + i32.and $push66=, $pop15, $pop16 + tee_local $push65=, $1=, $pop66 + i32.const $push17=, 16 + i32.add $push18=, $pop65, $pop17 + i32.store 0($pop67), $pop18 + i64.load $push20=, 0($1) + i64.load $push19=, 8($1) + i64.const $push22=, 0 + i64.const $push21=, 4613381465357418496 + i32.call $push23=, __netf2@FUNCTION, $pop20, $pop19, $pop22, $pop21 + br_if 1, $pop23 # 1: down to label10 +# BB#6: # %lor.lhs.false15.i + i32.const $push74=, 0 + i32.load $push73=, pap($pop74) + tee_local $push72=, $1=, $pop73 + i32.load $push71=, 0($1) + tee_local $push70=, $1=, $pop71 + i32.const $push24=, 4 + i32.add $push25=, $pop70, $pop24 + i32.store 0($pop72), $pop25 + i32.load $push26=, 0($1) + i32.const $push27=, 17 + i32.ne $push28=, $pop26, $pop27 + br_if 1, $pop28 # 1: down to label10 +.LBB7_7: # %bar.exit + end_block # label11: + i32.const $push42=, 0 + i32.store bar_arg($pop42), $0 + i32.const $push49=, 0 + i32.const $push47=, 16 + i32.add $push48=, $3, $pop47 + i32.store __stack_pointer($pop49), $pop48 + return +.LBB7_8: # %if.then5.i + end_block # label10: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end7: + .size f5, .Lfunc_end7-f5 + # -- End function + .section .text.f6,"ax",@progbits + .hidden f6 # -- Begin function f6 + .globl f6 + .type f6,@function +f6: # @f6 + .param i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push91=, 0 + i32.const $push89=, 0 + i32.load $push88=, __stack_pointer($pop89) + i32.const $push90=, 16 + i32.sub $push99=, $pop88, $pop90 + tee_local $push98=, $4=, $pop99 + i32.store __stack_pointer($pop91), $pop98 + i32.store 12($4), $1 + block + block + block + i32.const $push97=, 0 + f64.load $push0=, d($pop97) + i32.trunc_s/f64 $push96=, $pop0 + tee_local $push95=, $1=, $pop96 + i32.const $push1=, 16392 + i32.eq $push2=, $pop95, $pop1 + br_if 0, $pop2 # 0: down to label15 +# BB#1: # %entry + i32.const $push3=, 16390 + i32.ne $push4=, $1, $pop3 + br_if 1, $pop4 # 1: down to label14 +# BB#2: # %if.then.i + i32.const $push105=, 0 + i32.const $push104=, 0 + i32.load $push30=, gap($pop104) + i32.const $push31=, 7 + i32.add $push32=, $pop30, $pop31 + i32.const $push33=, -8 + i32.and $push103=, $pop32, $pop33 + tee_local $push102=, $3=, $pop103 + i32.const $push34=, 8 + i32.add $push101=, $pop102, $pop34 + tee_local $push100=, $2=, $pop101 + i32.store gap($pop105), $pop100 + f64.load $push35=, 0($3) + f64.const $push36=, 0x1.1p4 + f64.ne $push37=, $pop35, $pop36 + br_if 2, $pop37 # 2: down to label13 +# BB#3: # %lor.lhs.false.i + i32.const $push106=, 0 + i32.const $push38=, 12 + i32.add $push39=, $3, $pop38 + i32.store gap($pop106), $pop39 + i32.load $push40=, 0($2) + i32.const $push41=, 129 + i32.eq $push42=, $pop40, $pop41 + br_if 1, $pop42 # 1: down to label14 + br 2 # 2: down to label13 +.LBB8_4: # %if.then7.i + end_block # label15: + i32.const $push111=, 0 + i32.load $push110=, pap($pop111) + tee_local $push109=, $3=, $pop110 + i32.load $push5=, 0($3) + i32.const $push6=, 7 + i32.add $push7=, $pop5, $pop6 + i32.const $push8=, -8 + i32.and $push108=, $pop7, $pop8 + tee_local $push107=, $3=, $pop108 + i32.const $push9=, 8 + i32.add $push10=, $pop107, $pop9 + i32.store 0($pop109), $pop10 + i64.load $push11=, 0($3) + i64.const $push12=, 14 + i64.ne $push13=, $pop11, $pop12 + br_if 1, $pop13 # 1: down to label13 +# BB#5: # %lor.lhs.false11.i + i32.const $push116=, 0 + i32.load $push115=, pap($pop116) + tee_local $push114=, $3=, $pop115 + i32.load $push14=, 0($3) + i32.const $push15=, 15 + i32.add $push16=, $pop14, $pop15 + i32.const $push17=, -16 + i32.and $push113=, $pop16, $pop17 + tee_local $push112=, $3=, $pop113 + i32.const $push18=, 16 + i32.add $push19=, $pop112, $pop18 + i32.store 0($pop114), $pop19 + i64.load $push21=, 0($3) + i64.load $push20=, 8($3) + i64.const $push23=, 0 + i64.const $push22=, 4613381465357418496 + i32.call $push24=, __netf2@FUNCTION, $pop21, $pop20, $pop23, $pop22 + br_if 1, $pop24 # 1: down to label13 +# BB#6: # %lor.lhs.false15.i + i32.const $push121=, 0 + i32.load $push120=, pap($pop121) + tee_local $push119=, $3=, $pop120 + i32.load $push118=, 0($3) + tee_local $push117=, $3=, $pop118 + i32.const $push25=, 4 + i32.add $push26=, $pop117, $pop25 + i32.store 0($pop119), $pop26 + i32.load $push27=, 0($3) + i32.const $push28=, 17 + i32.ne $push29=, $pop27, $pop28 + br_if 1, $pop29 # 1: down to label13 +.LBB8_7: # %bar.exit + end_block # label14: + i32.const $push127=, 0 + i32.store bar_arg($pop127), $1 + i32.const $push126=, 0 + i32.load $push125=, 12($4) + tee_local $push124=, $3=, $pop125 + i32.load $push123=, 8($pop124) + tee_local $push122=, $1=, $pop123 + i32.store x($pop126), $pop122 + i32.const $push43=, 12 + i32.add $push44=, $3, $pop43 + i32.store 12($4), $pop44 + block + block + i32.const $push45=, 16392 + i32.eq $push46=, $1, $pop45 + br_if 0, $pop46 # 0: down to label17 +# BB#8: # %bar.exit + i32.const $push47=, 16390 + i32.ne $push48=, $1, $pop47 + br_if 1, $pop48 # 1: down to label16 +# BB#9: # %if.then.i11 + i32.const $push133=, 0 + i32.const $push132=, 0 + i32.load $push74=, gap($pop132) + i32.const $push75=, 7 + i32.add $push76=, $pop74, $pop75 + i32.const $push77=, -8 + i32.and $push131=, $pop76, $pop77 + tee_local $push130=, $3=, $pop131 + i32.const $push78=, 8 + i32.add $push129=, $pop130, $pop78 + tee_local $push128=, $2=, $pop129 + i32.store gap($pop133), $pop128 + f64.load $push79=, 0($3) + f64.const $push80=, 0x1.1p4 + f64.ne $push81=, $pop79, $pop80 + br_if 2, $pop81 # 2: down to label13 +# BB#10: # %lor.lhs.false.i14 + i32.const $push134=, 0 + i32.const $push82=, 12 + i32.add $push83=, $3, $pop82 + i32.store gap($pop134), $pop83 + i32.load $push84=, 0($2) + i32.const $push85=, 129 + i32.eq $push86=, $pop84, $pop85 + br_if 1, $pop86 # 1: down to label16 + br 2 # 2: down to label13 +.LBB8_11: # %if.then7.i20 + end_block # label17: + i32.const $push139=, 0 + i32.load $push138=, pap($pop139) + tee_local $push137=, $3=, $pop138 + i32.load $push49=, 0($3) + i32.const $push50=, 7 + i32.add $push51=, $pop49, $pop50 + i32.const $push52=, -8 + i32.and $push136=, $pop51, $pop52 + tee_local $push135=, $3=, $pop136 + i32.const $push53=, 8 + i32.add $push54=, $pop135, $pop53 + i32.store 0($pop137), $pop54 + i64.load $push55=, 0($3) + i64.const $push56=, 14 + i64.ne $push57=, $pop55, $pop56 + br_if 1, $pop57 # 1: down to label13 +# BB#12: # %lor.lhs.false11.i25 + i32.const $push144=, 0 + i32.load $push143=, pap($pop144) + tee_local $push142=, $3=, $pop143 + i32.load $push58=, 0($3) + i32.const $push59=, 15 + i32.add $push60=, $pop58, $pop59 + i32.const $push61=, -16 + i32.and $push141=, $pop60, $pop61 + tee_local $push140=, $3=, $pop141 + i32.const $push62=, 16 + i32.add $push63=, $pop140, $pop62 + i32.store 0($pop142), $pop63 + i64.load $push65=, 0($3) + i64.load $push64=, 8($3) + i64.const $push67=, 0 + i64.const $push66=, 4613381465357418496 + i32.call $push68=, __netf2@FUNCTION, $pop65, $pop64, $pop67, $pop66 + br_if 1, $pop68 # 1: down to label13 +# BB#13: # %lor.lhs.false15.i29 + i32.const $push149=, 0 + i32.load $push148=, pap($pop149) + tee_local $push147=, $3=, $pop148 + i32.load $push146=, 0($3) + tee_local $push145=, $3=, $pop146 + i32.const $push69=, 4 + i32.add $push70=, $pop145, $pop69 + i32.store 0($pop147), $pop70 + i32.load $push71=, 0($3) + i32.const $push72=, 17 + i32.ne $push73=, $pop71, $pop72 + br_if 1, $pop73 # 1: down to label13 +.LBB8_14: # %bar.exit31 + end_block # label16: + i32.const $push87=, 0 + i32.store bar_arg($pop87), $1 + i32.const $push94=, 0 + i32.const $push92=, 16 + i32.add $push93=, $4, $pop92 + i32.store __stack_pointer($pop94), $pop93 + return +.LBB8_15: # %if.then5.i + end_block # label13: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end8: + .size f6, .Lfunc_end8-f6 + # -- End function + .section .text.f7,"ax",@progbits + .hidden f7 # -- Begin function f7 + .globl f7 + .type f7,@function +f7: # @f7 + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push44=, 0 + i32.const $push42=, 0 + i32.load $push41=, __stack_pointer($pop42) + i32.const $push43=, 16 + i32.sub $push51=, $pop41, $pop43 + tee_local $push50=, $3=, $pop51 + i32.store __stack_pointer($pop44), $pop50 + i32.const $push0=, 0 + i32.const $push48=, 12 + i32.add $push49=, $3, $pop48 + i32.store pap($pop0), $pop49 + i32.store 12($3), $1 + block + block + block + i32.const $push1=, 16392 + i32.eq $push2=, $0, $pop1 + br_if 0, $pop2 # 0: down to label20 +# BB#1: # %entry + i32.const $push3=, 16390 + i32.ne $push4=, $0, $pop3 + br_if 1, $pop4 # 1: down to label19 +# BB#2: # %if.then.i + i32.const $push57=, 0 + i32.const $push56=, 0 + i32.load $push27=, gap($pop56) + i32.const $push28=, 7 + i32.add $push29=, $pop27, $pop28 + i32.const $push30=, -8 + i32.and $push55=, $pop29, $pop30 + tee_local $push54=, $1=, $pop55 + i32.const $push31=, 8 + i32.add $push53=, $pop54, $pop31 + tee_local $push52=, $2=, $pop53 + i32.store gap($pop57), $pop52 + f64.load $push32=, 0($1) + f64.const $push33=, 0x1.1p4 + f64.ne $push34=, $pop32, $pop33 + br_if 2, $pop34 # 2: down to label18 +# BB#3: # %lor.lhs.false.i + i32.const $push58=, 0 + i32.const $push35=, 12 + i32.add $push36=, $1, $pop35 + i32.store gap($pop58), $pop36 + i32.load $push37=, 0($2) + i32.const $push38=, 129 + i32.eq $push39=, $pop37, $pop38 + br_if 1, $pop39 # 1: down to label19 + br 2 # 2: down to label18 +.LBB9_4: # %if.then7.i + end_block # label20: + i32.load $push6=, 12($3) + i32.const $push5=, 7 + i32.add $push7=, $pop6, $pop5 + i32.const $push8=, -8 + i32.and $push62=, $pop7, $pop8 + tee_local $push61=, $1=, $pop62 + i32.const $push9=, 8 + i32.add $push60=, $pop61, $pop9 + tee_local $push59=, $2=, $pop60 + i32.store 12($3), $pop59 + i64.load $push10=, 0($1) + i64.const $push11=, 14 + i64.ne $push12=, $pop10, $pop11 + br_if 1, $pop12 # 1: down to label18 +# BB#5: # %lor.lhs.false11.i + i32.const $push13=, 15 + i32.add $push14=, $2, $pop13 + i32.const $push15=, -16 + i32.and $push66=, $pop14, $pop15 + tee_local $push65=, $1=, $pop66 + i32.const $push16=, 16 + i32.add $push64=, $pop65, $pop16 + tee_local $push63=, $2=, $pop64 + i32.store 12($3), $pop63 + i64.load $push18=, 0($1) + i64.load $push17=, 8($1) + i64.const $push20=, 0 + i64.const $push19=, 4613381465357418496 + i32.call $push21=, __netf2@FUNCTION, $pop18, $pop17, $pop20, $pop19 + br_if 1, $pop21 # 1: down to label18 +# BB#6: # %lor.lhs.false15.i + i32.const $push22=, 20 + i32.add $push23=, $1, $pop22 + i32.store 12($3), $pop23 + i32.load $push24=, 0($2) + i32.const $push25=, 17 + i32.ne $push26=, $pop24, $pop25 + br_if 1, $pop26 # 1: down to label18 +.LBB9_7: # %bar.exit + end_block # label19: + i32.const $push40=, 0 + i32.store bar_arg($pop40), $0 + i32.const $push47=, 0 + i32.const $push45=, 16 + i32.add $push46=, $3, $pop45 + i32.store __stack_pointer($pop47), $pop46 + return +.LBB9_8: # %if.then5.i + end_block # label18: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end9: + .size f7, .Lfunc_end9-f7 + # -- End function + .section .text.f8,"ax",@progbits + .hidden f8 # -- Begin function f8 + .globl f8 + .type f8,@function +f8: # @f8 + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push51=, 0 + i32.const $push49=, 0 + i32.load $push48=, __stack_pointer($pop49) + i32.const $push50=, 16 + i32.sub $push58=, $pop48, $pop50 + tee_local $push57=, $3=, $pop58 + i32.store __stack_pointer($pop51), $pop57 + i32.const $push0=, 0 + i32.const $push55=, 12 + i32.add $push56=, $3, $pop55 + i32.store pap($pop0), $pop56 + i32.store 12($3), $1 + block + block + block + i32.const $push1=, 16392 + i32.eq $push2=, $0, $pop1 + br_if 0, $pop2 # 0: down to label23 +# BB#1: # %entry + i32.const $push3=, 16390 + i32.ne $push4=, $0, $pop3 + br_if 1, $pop4 # 1: down to label22 +# BB#2: # %if.then.i + i32.const $push64=, 0 + i32.const $push63=, 0 + i32.load $push27=, gap($pop63) + i32.const $push28=, 7 + i32.add $push29=, $pop27, $pop28 + i32.const $push30=, -8 + i32.and $push62=, $pop29, $pop30 + tee_local $push61=, $1=, $pop62 + i32.const $push31=, 8 + i32.add $push60=, $pop61, $pop31 + tee_local $push59=, $2=, $pop60 + i32.store gap($pop64), $pop59 + f64.load $push32=, 0($1) + f64.const $push33=, 0x1.1p4 + f64.ne $push34=, $pop32, $pop33 + br_if 2, $pop34 # 2: down to label21 +# BB#3: # %lor.lhs.false.i + i32.const $push65=, 0 + i32.const $push35=, 12 + i32.add $push36=, $1, $pop35 + i32.store gap($pop65), $pop36 + i32.load $push37=, 0($2) + i32.const $push38=, 129 + i32.eq $push39=, $pop37, $pop38 + br_if 1, $pop39 # 1: down to label22 + br 2 # 2: down to label21 +.LBB10_4: # %if.then7.i + end_block # label23: + i32.load $push6=, 12($3) + i32.const $push5=, 7 + i32.add $push7=, $pop6, $pop5 + i32.const $push8=, -8 + i32.and $push69=, $pop7, $pop8 + tee_local $push68=, $1=, $pop69 + i32.const $push9=, 8 + i32.add $push67=, $pop68, $pop9 + tee_local $push66=, $2=, $pop67 + i32.store 12($3), $pop66 + i64.load $push10=, 0($1) + i64.const $push11=, 14 + i64.ne $push12=, $pop10, $pop11 + br_if 1, $pop12 # 1: down to label21 +# BB#5: # %lor.lhs.false11.i + i32.const $push13=, 15 + i32.add $push14=, $2, $pop13 + i32.const $push15=, -16 + i32.and $push73=, $pop14, $pop15 + tee_local $push72=, $1=, $pop73 + i32.const $push16=, 16 + i32.add $push71=, $pop72, $pop16 + tee_local $push70=, $2=, $pop71 + i32.store 12($3), $pop70 + i64.load $push18=, 0($1) + i64.load $push17=, 8($1) + i64.const $push20=, 0 + i64.const $push19=, 4613381465357418496 + i32.call $push21=, __netf2@FUNCTION, $pop18, $pop17, $pop20, $pop19 + br_if 1, $pop21 # 1: down to label21 +# BB#6: # %lor.lhs.false15.i + i32.const $push22=, 20 + i32.add $push23=, $1, $pop22 + i32.store 12($3), $pop23 + i32.load $push24=, 0($2) + i32.const $push25=, 17 + i32.ne $push26=, $pop24, $pop25 + br_if 1, $pop26 # 1: down to label21 +.LBB10_7: # %bar.exit + end_block # label22: + i32.const $push40=, 0 + i32.store bar_arg($pop40), $0 + i32.const $push76=, 0 + i32.load $push42=, 12($3) + i32.const $push41=, 7 + i32.add $push43=, $pop42, $pop41 + i32.const $push44=, -8 + i32.and $push75=, $pop43, $pop44 + tee_local $push74=, $0=, $pop75 + i64.load $push45=, 0($pop74) + i64.store d($pop76), $pop45 + i32.const $push46=, 8 + i32.add $push47=, $0, $pop46 + i32.store 12($3), $pop47 + i32.const $push54=, 0 + i32.const $push52=, 16 + i32.add $push53=, $3, $pop52 + i32.store __stack_pointer($pop54), $pop53 + return +.LBB10_8: # %if.then5.i + end_block # label21: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end10: + .size f8, .Lfunc_end10-f8 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push44=, 0 + i32.const $push42=, 0 + i32.load $push41=, __stack_pointer($pop42) + i32.const $push43=, 176 + i32.sub $push71=, $pop41, $pop43 + tee_local $push70=, $0=, $pop71 + i32.store __stack_pointer($pop44), $pop70 + i32.const $push69=, 0 + i64.const $push1=, 4629418941960159232 + i64.store d($pop69), $pop1 + i32.const $push68=, 28 + i32.store 160($0), $pop68 + i32.const $push48=, 160 + i32.add $push49=, $0, $pop48 + call f2@FUNCTION, $0, $pop49 + block + i32.const $push67=, 0 + i32.load $push2=, bar_arg($pop67) + i32.const $push66=, 28 + i32.ne $push3=, $pop2, $pop66 + br_if 0, $pop3 # 0: down to label24 +# BB#1: # %entry + i32.const $push73=, 0 + i32.load $push0=, x($pop73) + i32.const $push72=, 28 + i32.ne $push4=, $pop0, $pop72 + br_if 0, $pop4 # 0: down to label24 +# BB#2: # %if.end + i64.const $push5=, 4638813169307877376 + i64.store 144($0), $pop5 + i32.const $push50=, 144 + i32.add $push51=, $0, $pop50 + call f3@FUNCTION, $0, $pop51 + i32.const $push74=, 0 + f64.load $push6=, d($pop74) + f64.const $push7=, 0x1.06p7 + f64.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label24 +# BB#3: # %if.end4 + i32.const $push76=, 128 + i32.store 136($0), $pop76 + i64.const $push10=, 4625196817309499392 + i64.store 128($0), $pop10 + i32.const $push11=, 5 + i32.const $push52=, 128 + i32.add $push53=, $0, $pop52 + call f4@FUNCTION, $pop11, $pop53 + i32.const $push75=, 0 + i32.load $push12=, x($pop75) + i32.const $push13=, 16 + i32.ne $push14=, $pop12, $pop13 + br_if 0, $pop14 # 0: down to label24 +# BB#4: # %if.end4 + i32.const $push78=, 0 + i32.load $push9=, foo_arg($pop78) + i32.const $push77=, 128 + i32.ne $push15=, $pop9, $pop77 + br_if 0, $pop15 # 0: down to label24 +# BB#5: # %if.end9 + i32.const $push16=, 129 + i32.store 120($0), $pop16 + i64.const $push17=, 4625478292286210048 + i64.store 112($0), $pop17 + i32.const $push18=, 16390 + i32.const $push54=, 112 + i32.add $push55=, $0, $pop54 + call f5@FUNCTION, $pop18, $pop55 + i32.const $push80=, 0 + i32.load $push19=, bar_arg($pop80) + i32.const $push79=, 16390 + i32.ne $push20=, $pop19, $pop79 + br_if 0, $pop20 # 0: down to label24 +# BB#6: # %if.end12 + i64.const $push21=, 60129542156 + i64.store 96($0), $pop21 + i32.const $push22=, -31 + i32.store 104($0), $pop22 + i32.const $push56=, 96 + i32.add $push57=, $0, $pop56 + call f6@FUNCTION, $0, $pop57 + i32.const $push82=, 0 + i32.load $push23=, bar_arg($pop82) + i32.const $push81=, -31 + i32.ne $push24=, $pop23, $pop81 + br_if 0, $pop24 # 0: down to label24 +# BB#7: # %if.end15 + i32.const $push58=, 48 + i32.add $push59=, $0, $pop58 + i32.const $push92=, 32 + i32.add $push25=, $pop59, $pop92 + i64.const $push26=, 4628011567076605952 + i64.store 0($pop25), $pop26 + i32.const $push60=, 48 + i32.add $push61=, $0, $pop60 + i32.const $push91=, 24 + i32.add $push27=, $pop61, $pop91 + i32.const $push90=, 17 + i32.store 0($pop27), $pop90 + i32.const $push62=, 48 + i32.add $push63=, $0, $pop62 + i32.const $push89=, 16 + i32.add $push28=, $pop63, $pop89 + i64.const $push88=, 4613381465357418496 + i64.store 0($pop28), $pop88 + i64.const $push87=, 0 + i64.store 56($0), $pop87 + i64.const $push86=, 14 + i64.store 48($0), $pop86 + i32.const $push85=, 16392 + i32.const $push64=, 48 + i32.add $push65=, $0, $pop64 + call f7@FUNCTION, $pop85, $pop65 + i32.const $push84=, 0 + i32.load $push29=, bar_arg($pop84) + i32.const $push83=, 16392 + i32.ne $push30=, $pop29, $pop83 + br_if 0, $pop30 # 0: down to label24 +# BB#8: # %if.end18 + i32.const $push102=, 32 + i32.add $push32=, $0, $pop102 + i64.const $push33=, 4628293042053316608 + i64.store 0($pop32), $pop33 + i32.const $push101=, 24 + i32.add $push34=, $0, $pop101 + i32.const $push100=, 17 + i32.store 0($pop34), $pop100 + i32.const $push99=, 16 + i32.add $push35=, $0, $pop99 + i64.const $push98=, 4613381465357418496 + i64.store 0($pop35), $pop98 + i64.const $push97=, 0 + i64.store 8($0), $pop97 + i64.const $push96=, 14 + i64.store 0($0), $pop96 + i32.const $push95=, 16392 + call f8@FUNCTION, $pop95, $0 + i32.const $push94=, 0 + i32.load $push36=, bar_arg($pop94) + i32.const $push93=, 16392 + i32.ne $push37=, $pop36, $pop93 + br_if 0, $pop37 # 0: down to label24 +# BB#9: # %if.end18 + i32.const $push103=, 0 + f64.load $push31=, d($pop103) + f64.const $push38=, 0x1.bp4 + f64.ne $push39=, $pop31, $pop38 + br_if 0, $pop39 # 0: down to label24 +# BB#10: # %if.end23 + i32.const $push47=, 0 + i32.const $push45=, 176 + i32.add $push46=, $0, $pop45 + i32.store __stack_pointer($pop47), $pop46 + i32.const $push40=, 0 + return $pop40 +.LBB11_11: # %if.then + end_block # label24: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end11: + .size main, .Lfunc_end11-main + # -- End function + .hidden foo_arg # @foo_arg + .type foo_arg,@object + .section .bss.foo_arg,"aw",@nobits + .globl foo_arg + .p2align 2 +foo_arg: + .int32 0 # 0x0 + .size foo_arg, 4 + + .hidden gap # @gap + .type gap,@object + .section .bss.gap,"aw",@nobits + .globl gap + .p2align 2 +gap: + .int32 0 + .size gap, 4 + + .hidden pap # @pap + .type pap,@object + .section .bss.pap,"aw",@nobits + .globl pap + .p2align 2 +pap: + .int32 0 + .size pap, 4 + + .hidden bar_arg # @bar_arg + .type bar_arg,@object + .section .bss.bar_arg,"aw",@nobits + .globl bar_arg + .p2align 2 +bar_arg: + .int32 0 # 0x0 + .size bar_arg, 4 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 3 +d: + .int64 0 # double 0 + .size d, 8 + + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 2 +x: + .int32 0 # 0x0 + .size x, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/stdarg-2.c.s b/src/binaryen/test/torture-s/stdarg-2.c.s new file mode 100644 index 0000000000..dbaac26d88 --- /dev/null +++ b/src/binaryen/test/torture-s/stdarg-2.c.s @@ -0,0 +1,1053 @@ + .text + .file "stdarg-2.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push41=, 0 + i32.const $push39=, 0 + i32.load $push38=, __stack_pointer($pop39) + i32.const $push40=, 32 + i32.sub $push50=, $pop38, $pop40 + tee_local $push49=, $2=, $pop50 + i32.store __stack_pointer($pop41), $pop49 + block + block + block + i32.const $push0=, 11 + i32.eq $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label2 +# BB#1: # %entry + block + i32.const $push2=, 8 + i32.eq $push3=, $0, $pop2 + br_if 0, $pop3 # 0: down to label3 +# BB#2: # %entry + i32.const $push4=, 5 + i32.ne $push5=, $0, $pop4 + br_if 3, $pop5 # 3: down to label0 +# BB#3: # %sw.bb + i32.const $push33=, 0 + i32.const $push26=, 11 + i32.add $push27=, $1, $pop26 + i32.const $push28=, -8 + i32.and $push54=, $pop27, $pop28 + tee_local $push53=, $0=, $pop54 + f64.load $push29=, 0($pop53) + i32.load $push30=, 0($1) + f64.convert_s/i32 $push31=, $pop30 + f64.add $push32=, $pop29, $pop31 + i32.trunc_s/f64 $push52=, $pop32 + tee_local $push51=, $1=, $pop52 + i32.store foo_arg($pop33), $pop51 + i64.load $push34=, 8($0) + i64.extend_u/i32 $push35=, $1 + i64.add $push36=, $pop34, $pop35 + i32.wrap/i64 $0=, $pop36 + br 2 # 2: down to label1 +.LBB0_4: # %sw.bb9 + end_block # label3: + i32.const $push22=, 0 + i32.const $push19=, 7 + i32.add $push20=, $1, $pop19 + i32.const $push21=, -8 + i32.and $push58=, $pop20, $pop21 + tee_local $push57=, $0=, $pop58 + i32.load $push56=, 0($pop57) + tee_local $push55=, $1=, $pop56 + i32.store foo_arg($pop22), $pop55 + f64.load $push23=, 8($0) + f64.convert_s/i32 $push24=, $1 + f64.add $push25=, $pop23, $pop24 + i32.trunc_s/f64 $0=, $pop25 + br 1 # 1: down to label1 +.LBB0_5: # %sw.bb18 + end_block # label2: + i32.const $push45=, 16 + i32.add $push46=, $2, $pop45 + i32.load $push63=, 0($1) + tee_local $push62=, $0=, $pop63 + call __floatsitf@FUNCTION, $pop46, $pop62 + i32.const $push6=, 19 + i32.add $push7=, $1, $pop6 + i32.const $push8=, -16 + i32.and $push61=, $pop7, $pop8 + tee_local $push60=, $1=, $pop61 + i64.load $push10=, 0($pop60) + i64.load $push9=, 8($1) + i64.load $push14=, 16($2) + i32.const $push47=, 16 + i32.add $push48=, $2, $pop47 + i32.const $push11=, 8 + i32.add $push12=, $pop48, $pop11 + i64.load $push13=, 0($pop12) + call __addtf3@FUNCTION, $2, $pop10, $pop9, $pop14, $pop13 + i32.const $push15=, 0 + i32.store foo_arg($pop15), $0 + i64.load $push18=, 0($2) + i32.const $push59=, 8 + i32.add $push16=, $2, $pop59 + i64.load $push17=, 0($pop16) + i32.call $0=, __fixtfsi@FUNCTION, $pop18, $pop17 +.LBB0_6: # %sw.epilog + end_block # label1: + i32.const $push37=, 0 + i32.store foo_arg($pop37), $0 + i32.const $push44=, 0 + i32.const $push42=, 32 + i32.add $push43=, $2, $pop42 + i32.store __stack_pointer($pop44), $pop43 + return +.LBB0_7: # %sw.default + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 + .local i32, i32 +# BB#0: # %entry + block + block + i32.const $push0=, 16386 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label5 +# BB#1: # %if.then + i32.const $push20=, 0 + i32.const $push19=, 0 + i32.load $push18=, gap($pop19) + tee_local $push17=, $2=, $pop18 + i32.const $push2=, 4 + i32.add $push16=, $pop17, $pop2 + tee_local $push15=, $1=, $pop16 + i32.store gap($pop20), $pop15 + i32.load $push3=, 0($2) + i32.const $push4=, 13 + i32.ne $push5=, $pop3, $pop4 + br_if 1, $pop5 # 1: down to label4 +# BB#2: # %lor.lhs.false + i32.const $push23=, 0 + i32.const $push6=, 7 + i32.add $push7=, $1, $pop6 + i32.const $push8=, -8 + i32.and $push22=, $pop7, $pop8 + tee_local $push21=, $2=, $pop22 + i32.const $push9=, 8 + i32.add $push10=, $pop21, $pop9 + i32.store gap($pop23), $pop10 + f64.load $push11=, 0($2) + f64.const $push12=, -0x1.cp3 + f64.ne $push13=, $pop11, $pop12 + br_if 1, $pop13 # 1: down to label4 +.LBB1_3: # %if.end6 + end_block # label5: + i32.const $push14=, 0 + i32.store bar_arg($pop14), $0 + return +.LBB1_4: # %if.then5 + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32, i32 +# BB#0: # %entry + i32.const $push2=, 0 + i32.const $push0=, 4 + i32.add $push1=, $1, $pop0 + i32.store gap($pop2), $pop1 + i32.const $push4=, 0 + i32.load $push3=, 0($1) + i32.store x($pop4), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size f1, .Lfunc_end2-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push15=, 0 + i32.store gap($pop15), $1 + block + block + i32.const $push0=, 16386 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label7 +# BB#1: # %if.then.i + i32.const $push21=, 0 + i32.const $push20=, 0 + i32.load $push19=, gap($pop20) + tee_local $push18=, $1=, $pop19 + i32.const $push2=, 4 + i32.add $push17=, $pop18, $pop2 + tee_local $push16=, $2=, $pop17 + i32.store gap($pop21), $pop16 + i32.load $push3=, 0($1) + i32.const $push4=, 13 + i32.ne $push5=, $pop3, $pop4 + br_if 1, $pop5 # 1: down to label6 +# BB#2: # %lor.lhs.false.i + i32.const $push11=, 0 + i32.const $push6=, 7 + i32.add $push7=, $2, $pop6 + i32.const $push8=, -8 + i32.and $push23=, $pop7, $pop8 + tee_local $push22=, $1=, $pop23 + i32.const $push9=, 8 + i32.add $push10=, $pop22, $pop9 + i32.store gap($pop11), $pop10 + f64.load $push12=, 0($1) + f64.const $push13=, -0x1.cp3 + f64.ne $push14=, $pop12, $pop13 + br_if 1, $pop14 # 1: down to label6 +.LBB3_3: # %bar.exit + end_block # label7: + i32.const $push24=, 0 + i32.store bar_arg($pop24), $0 + return +.LBB3_4: # %if.then5.i + end_block # label6: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size f2, .Lfunc_end3-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .param i32, i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 48 + i32.sub $push7=, $pop4, $pop6 + i32.const $push0=, 4 + i32.add $push1=, $1, $pop0 + i32.store 16($pop7), $pop1 + i32.const $push3=, 0 + i32.load $push2=, 0($1) + i32.store x($pop3), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end4: + .size f3, .Lfunc_end4-f3 + # -- End function + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push18=, 0 + i32.const $push16=, 0 + i32.load $push15=, __stack_pointer($pop16) + i32.const $push17=, 48 + i32.sub $push23=, $pop15, $pop17 + tee_local $push22=, $3=, $pop23 + i32.store __stack_pointer($pop18), $pop22 + i32.store 16($3), $1 + block + block + i32.const $push0=, 16386 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label9 +# BB#1: # %if.then.i + i32.const $push29=, 0 + i32.const $push28=, 0 + i32.load $push27=, gap($pop28) + tee_local $push26=, $1=, $pop27 + i32.const $push2=, 4 + i32.add $push25=, $pop26, $pop2 + tee_local $push24=, $2=, $pop25 + i32.store gap($pop29), $pop24 + i32.load $push3=, 0($1) + i32.const $push4=, 13 + i32.ne $push5=, $pop3, $pop4 + br_if 1, $pop5 # 1: down to label8 +# BB#2: # %lor.lhs.false.i + i32.const $push32=, 0 + i32.const $push6=, 7 + i32.add $push7=, $2, $pop6 + i32.const $push8=, -8 + i32.and $push31=, $pop7, $pop8 + tee_local $push30=, $1=, $pop31 + i32.const $push9=, 8 + i32.add $push10=, $pop30, $pop9 + i32.store gap($pop32), $pop10 + f64.load $push11=, 0($1) + f64.const $push12=, -0x1.cp3 + f64.ne $push13=, $pop11, $pop12 + br_if 1, $pop13 # 1: down to label8 +.LBB5_3: # %bar.exit + end_block # label9: + i32.const $push14=, 0 + i32.store bar_arg($pop14), $0 + i32.const $push21=, 0 + i32.const $push19=, 48 + i32.add $push20=, $3, $pop19 + i32.store __stack_pointer($pop21), $pop20 + return +.LBB5_4: # %if.then5.i + end_block # label8: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end5: + .size f4, .Lfunc_end5-f4 + # -- End function + .section .text.f5,"ax",@progbits + .hidden f5 # -- Begin function f5 + .globl f5 + .type f5,@function +f5: # @f5 + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push41=, 0 + i32.const $push39=, 0 + i32.load $push38=, __stack_pointer($pop39) + i32.const $push40=, 80 + i32.sub $push50=, $pop38, $pop40 + tee_local $push49=, $2=, $pop50 + i32.store __stack_pointer($pop41), $pop49 + i32.store 48($2), $1 + block + block + block + i32.const $push0=, 11 + i32.eq $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label12 +# BB#1: # %entry + block + i32.const $push2=, 8 + i32.eq $push3=, $0, $pop2 + br_if 0, $pop3 # 0: down to label13 +# BB#2: # %entry + i32.const $push4=, 5 + i32.ne $push5=, $0, $pop4 + br_if 3, $pop5 # 3: down to label10 +# BB#3: # %sw.bb.i + i32.const $push33=, 0 + i32.const $push26=, 11 + i32.add $push27=, $1, $pop26 + i32.const $push28=, -8 + i32.and $push54=, $pop27, $pop28 + tee_local $push53=, $0=, $pop54 + f64.load $push29=, 0($pop53) + i32.load $push30=, 0($1) + f64.convert_s/i32 $push31=, $pop30 + f64.add $push32=, $pop29, $pop31 + i32.trunc_s/f64 $push52=, $pop32 + tee_local $push51=, $1=, $pop52 + i32.store foo_arg($pop33), $pop51 + i64.load $push34=, 8($0) + i64.extend_u/i32 $push35=, $1 + i64.add $push36=, $pop34, $pop35 + i32.wrap/i64 $1=, $pop36 + br 2 # 2: down to label11 +.LBB6_4: # %sw.bb9.i + end_block # label13: + i32.const $push22=, 0 + i32.const $push19=, 7 + i32.add $push20=, $1, $pop19 + i32.const $push21=, -8 + i32.and $push58=, $pop20, $pop21 + tee_local $push57=, $1=, $pop58 + i32.load $push56=, 0($pop57) + tee_local $push55=, $0=, $pop56 + i32.store foo_arg($pop22), $pop55 + f64.load $push23=, 8($1) + f64.convert_s/i32 $push24=, $0 + f64.add $push25=, $pop23, $pop24 + i32.trunc_s/f64 $1=, $pop25 + br 1 # 1: down to label11 +.LBB6_5: # %sw.bb18.i + end_block # label12: + i32.const $push45=, 16 + i32.add $push46=, $2, $pop45 + i32.load $push63=, 0($1) + tee_local $push62=, $0=, $pop63 + call __floatsitf@FUNCTION, $pop46, $pop62 + i32.const $push6=, 19 + i32.add $push7=, $1, $pop6 + i32.const $push8=, -16 + i32.and $push61=, $pop7, $pop8 + tee_local $push60=, $1=, $pop61 + i64.load $push10=, 0($pop60) + i64.load $push9=, 8($1) + i64.load $push14=, 16($2) + i32.const $push47=, 16 + i32.add $push48=, $2, $pop47 + i32.const $push11=, 8 + i32.add $push12=, $pop48, $pop11 + i64.load $push13=, 0($pop12) + call __addtf3@FUNCTION, $2, $pop10, $pop9, $pop14, $pop13 + i32.const $push15=, 0 + i32.store foo_arg($pop15), $0 + i64.load $push18=, 0($2) + i32.const $push59=, 8 + i32.add $push16=, $2, $pop59 + i64.load $push17=, 0($pop16) + i32.call $1=, __fixtfsi@FUNCTION, $pop18, $pop17 +.LBB6_6: # %foo.exit + end_block # label11: + i32.const $push37=, 0 + i32.store foo_arg($pop37), $1 + i32.const $push44=, 0 + i32.const $push42=, 80 + i32.add $push43=, $2, $pop42 + i32.store __stack_pointer($pop44), $pop43 + return +.LBB6_7: # %sw.default.i + end_block # label10: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end6: + .size f5, .Lfunc_end6-f5 + # -- End function + .section .text.f6,"ax",@progbits + .hidden f6 # -- Begin function f6 + .globl f6 + .type f6,@function +f6: # @f6 + .param i32, i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push7=, $pop4, $pop6 + i32.const $push0=, 4 + i32.add $push1=, $1, $pop0 + i32.store 4($pop7), $pop1 + i32.const $push3=, 0 + i32.load $push2=, 0($1) + i32.store x($pop3), $pop2 + # fallthrough-return + .endfunc +.Lfunc_end7: + .size f6, .Lfunc_end7-f6 + # -- End function + .section .text.f7,"ax",@progbits + .hidden f7 # -- Begin function f7 + .globl f7 + .type f7,@function +f7: # @f7 + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push18=, 0 + i32.const $push16=, 0 + i32.load $push15=, __stack_pointer($pop16) + i32.const $push17=, 16 + i32.sub $push23=, $pop15, $pop17 + tee_local $push22=, $3=, $pop23 + i32.store __stack_pointer($pop18), $pop22 + i32.store 4($3), $1 + block + block + i32.const $push0=, 16386 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label15 +# BB#1: # %if.then.i + i32.const $push29=, 0 + i32.const $push28=, 0 + i32.load $push27=, gap($pop28) + tee_local $push26=, $1=, $pop27 + i32.const $push2=, 4 + i32.add $push25=, $pop26, $pop2 + tee_local $push24=, $2=, $pop25 + i32.store gap($pop29), $pop24 + i32.load $push3=, 0($1) + i32.const $push4=, 13 + i32.ne $push5=, $pop3, $pop4 + br_if 1, $pop5 # 1: down to label14 +# BB#2: # %lor.lhs.false.i + i32.const $push32=, 0 + i32.const $push6=, 7 + i32.add $push7=, $2, $pop6 + i32.const $push8=, -8 + i32.and $push31=, $pop7, $pop8 + tee_local $push30=, $1=, $pop31 + i32.const $push9=, 8 + i32.add $push10=, $pop30, $pop9 + i32.store gap($pop32), $pop10 + f64.load $push11=, 0($1) + f64.const $push12=, -0x1.cp3 + f64.ne $push13=, $pop11, $pop12 + br_if 1, $pop13 # 1: down to label14 +.LBB8_3: # %bar.exit + end_block # label15: + i32.const $push14=, 0 + i32.store bar_arg($pop14), $0 + i32.const $push21=, 0 + i32.const $push19=, 16 + i32.add $push20=, $3, $pop19 + i32.store __stack_pointer($pop21), $pop20 + return +.LBB8_4: # %if.then5.i + end_block # label14: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end8: + .size f7, .Lfunc_end8-f7 + # -- End function + .section .text.f8,"ax",@progbits + .hidden f8 # -- Begin function f8 + .globl f8 + .type f8,@function +f8: # @f8 + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push41=, 0 + i32.const $push39=, 0 + i32.load $push38=, __stack_pointer($pop39) + i32.const $push40=, 48 + i32.sub $push50=, $pop38, $pop40 + tee_local $push49=, $2=, $pop50 + i32.store __stack_pointer($pop41), $pop49 + i32.store 36($2), $1 + block + block + block + i32.const $push0=, 11 + i32.eq $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label18 +# BB#1: # %entry + block + i32.const $push2=, 8 + i32.eq $push3=, $0, $pop2 + br_if 0, $pop3 # 0: down to label19 +# BB#2: # %entry + i32.const $push4=, 5 + i32.ne $push5=, $0, $pop4 + br_if 3, $pop5 # 3: down to label16 +# BB#3: # %sw.bb.i + i32.const $push33=, 0 + i32.const $push26=, 11 + i32.add $push27=, $1, $pop26 + i32.const $push28=, -8 + i32.and $push54=, $pop27, $pop28 + tee_local $push53=, $0=, $pop54 + f64.load $push29=, 0($pop53) + i32.load $push30=, 0($1) + f64.convert_s/i32 $push31=, $pop30 + f64.add $push32=, $pop29, $pop31 + i32.trunc_s/f64 $push52=, $pop32 + tee_local $push51=, $1=, $pop52 + i32.store foo_arg($pop33), $pop51 + i64.load $push34=, 8($0) + i64.extend_u/i32 $push35=, $1 + i64.add $push36=, $pop34, $pop35 + i32.wrap/i64 $1=, $pop36 + br 2 # 2: down to label17 +.LBB9_4: # %sw.bb9.i + end_block # label19: + i32.const $push22=, 0 + i32.const $push19=, 7 + i32.add $push20=, $1, $pop19 + i32.const $push21=, -8 + i32.and $push58=, $pop20, $pop21 + tee_local $push57=, $1=, $pop58 + i32.load $push56=, 0($pop57) + tee_local $push55=, $0=, $pop56 + i32.store foo_arg($pop22), $pop55 + f64.load $push23=, 8($1) + f64.convert_s/i32 $push24=, $0 + f64.add $push25=, $pop23, $pop24 + i32.trunc_s/f64 $1=, $pop25 + br 1 # 1: down to label17 +.LBB9_5: # %sw.bb18.i + end_block # label18: + i32.const $push45=, 16 + i32.add $push46=, $2, $pop45 + i32.load $push63=, 0($1) + tee_local $push62=, $0=, $pop63 + call __floatsitf@FUNCTION, $pop46, $pop62 + i32.const $push6=, 19 + i32.add $push7=, $1, $pop6 + i32.const $push8=, -16 + i32.and $push61=, $pop7, $pop8 + tee_local $push60=, $1=, $pop61 + i64.load $push10=, 0($pop60) + i64.load $push9=, 8($1) + i64.load $push14=, 16($2) + i32.const $push47=, 16 + i32.add $push48=, $2, $pop47 + i32.const $push11=, 8 + i32.add $push12=, $pop48, $pop11 + i64.load $push13=, 0($pop12) + call __addtf3@FUNCTION, $2, $pop10, $pop9, $pop14, $pop13 + i32.const $push15=, 0 + i32.store foo_arg($pop15), $0 + i64.load $push18=, 0($2) + i32.const $push59=, 8 + i32.add $push16=, $2, $pop59 + i64.load $push17=, 0($pop16) + i32.call $1=, __fixtfsi@FUNCTION, $pop18, $pop17 +.LBB9_6: # %foo.exit + end_block # label17: + i32.const $push37=, 0 + i32.store foo_arg($pop37), $1 + i32.const $push44=, 0 + i32.const $push42=, 48 + i32.add $push43=, $2, $pop42 + i32.store __stack_pointer($pop44), $pop43 + return +.LBB9_7: # %sw.default.i + end_block # label16: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end9: + .size f8, .Lfunc_end9-f8 + # -- End function + .section .text.f10,"ax",@progbits + .hidden f10 # -- Begin function f10 + .globl f10 + .type f10,@function +f10: # @f10 + .param i32, i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 16 + i32.sub $push9=, $pop6, $pop8 + i32.const $push2=, 12 + i32.add $push3=, $pop9, $pop2 + i32.const $push0=, 4 + i32.add $push1=, $1, $pop0 + i32.store 0($pop3), $pop1 + i32.const $push5=, 0 + i32.load $push4=, 0($1) + i32.store x($pop5), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end10: + .size f10, .Lfunc_end10-f10 + # -- End function + .section .text.f11,"ax",@progbits + .hidden f11 # -- Begin function f11 + .globl f11 + .type f11,@function +f11: # @f11 + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push20=, 0 + i32.const $push18=, 0 + i32.load $push17=, __stack_pointer($pop18) + i32.const $push19=, 16 + i32.sub $push25=, $pop17, $pop19 + tee_local $push24=, $3=, $pop25 + i32.store __stack_pointer($pop20), $pop24 + i32.const $push1=, 12 + i32.add $push0=, $3, $pop1 + i32.store 0($pop0), $1 + block + block + i32.const $push2=, 16386 + i32.ne $push3=, $0, $pop2 + br_if 0, $pop3 # 0: down to label21 +# BB#1: # %if.then.i + i32.const $push31=, 0 + i32.const $push30=, 0 + i32.load $push29=, gap($pop30) + tee_local $push28=, $1=, $pop29 + i32.const $push4=, 4 + i32.add $push27=, $pop28, $pop4 + tee_local $push26=, $2=, $pop27 + i32.store gap($pop31), $pop26 + i32.load $push5=, 0($1) + i32.const $push6=, 13 + i32.ne $push7=, $pop5, $pop6 + br_if 1, $pop7 # 1: down to label20 +# BB#2: # %lor.lhs.false.i + i32.const $push34=, 0 + i32.const $push8=, 7 + i32.add $push9=, $2, $pop8 + i32.const $push10=, -8 + i32.and $push33=, $pop9, $pop10 + tee_local $push32=, $1=, $pop33 + i32.const $push11=, 8 + i32.add $push12=, $pop32, $pop11 + i32.store gap($pop34), $pop12 + f64.load $push13=, 0($1) + f64.const $push14=, -0x1.cp3 + f64.ne $push15=, $pop13, $pop14 + br_if 1, $pop15 # 1: down to label20 +.LBB11_3: # %bar.exit + end_block # label21: + i32.const $push16=, 0 + i32.store bar_arg($pop16), $0 + i32.const $push23=, 0 + i32.const $push21=, 16 + i32.add $push22=, $3, $pop21 + i32.store __stack_pointer($pop23), $pop22 + return +.LBB11_4: # %if.then5.i + end_block # label20: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end11: + .size f11, .Lfunc_end11-f11 + # -- End function + .section .text.f12,"ax",@progbits + .hidden f12 # -- Begin function f12 + .globl f12 + .type f12,@function +f12: # @f12 + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push43=, 0 + i32.const $push41=, 0 + i32.load $push40=, __stack_pointer($pop41) + i32.const $push42=, 48 + i32.sub $push52=, $pop40, $pop42 + tee_local $push51=, $2=, $pop52 + i32.store __stack_pointer($pop43), $pop51 + i32.const $push1=, 44 + i32.add $push0=, $2, $pop1 + i32.store 0($pop0), $1 + block + block + block + i32.const $push2=, 11 + i32.eq $push3=, $0, $pop2 + br_if 0, $pop3 # 0: down to label24 +# BB#1: # %entry + block + i32.const $push4=, 8 + i32.eq $push5=, $0, $pop4 + br_if 0, $pop5 # 0: down to label25 +# BB#2: # %entry + i32.const $push6=, 5 + i32.ne $push7=, $0, $pop6 + br_if 3, $pop7 # 3: down to label22 +# BB#3: # %sw.bb.i + i32.const $push35=, 0 + i32.const $push28=, 11 + i32.add $push29=, $1, $pop28 + i32.const $push30=, -8 + i32.and $push56=, $pop29, $pop30 + tee_local $push55=, $0=, $pop56 + f64.load $push31=, 0($pop55) + i32.load $push32=, 0($1) + f64.convert_s/i32 $push33=, $pop32 + f64.add $push34=, $pop31, $pop33 + i32.trunc_s/f64 $push54=, $pop34 + tee_local $push53=, $1=, $pop54 + i32.store foo_arg($pop35), $pop53 + i64.load $push36=, 8($0) + i64.extend_u/i32 $push37=, $1 + i64.add $push38=, $pop36, $pop37 + i32.wrap/i64 $1=, $pop38 + br 2 # 2: down to label23 +.LBB12_4: # %sw.bb9.i + end_block # label25: + i32.const $push24=, 0 + i32.const $push21=, 7 + i32.add $push22=, $1, $pop21 + i32.const $push23=, -8 + i32.and $push60=, $pop22, $pop23 + tee_local $push59=, $1=, $pop60 + i32.load $push58=, 0($pop59) + tee_local $push57=, $0=, $pop58 + i32.store foo_arg($pop24), $pop57 + f64.load $push25=, 8($1) + f64.convert_s/i32 $push26=, $0 + f64.add $push27=, $pop25, $pop26 + i32.trunc_s/f64 $1=, $pop27 + br 1 # 1: down to label23 +.LBB12_5: # %sw.bb18.i + end_block # label24: + i32.const $push47=, 16 + i32.add $push48=, $2, $pop47 + i32.load $push65=, 0($1) + tee_local $push64=, $0=, $pop65 + call __floatsitf@FUNCTION, $pop48, $pop64 + i32.const $push8=, 19 + i32.add $push9=, $1, $pop8 + i32.const $push10=, -16 + i32.and $push63=, $pop9, $pop10 + tee_local $push62=, $1=, $pop63 + i64.load $push12=, 0($pop62) + i64.load $push11=, 8($1) + i64.load $push16=, 16($2) + i32.const $push49=, 16 + i32.add $push50=, $2, $pop49 + i32.const $push13=, 8 + i32.add $push14=, $pop50, $pop13 + i64.load $push15=, 0($pop14) + call __addtf3@FUNCTION, $2, $pop12, $pop11, $pop16, $pop15 + i32.const $push17=, 0 + i32.store foo_arg($pop17), $0 + i64.load $push20=, 0($2) + i32.const $push61=, 8 + i32.add $push18=, $2, $pop61 + i64.load $push19=, 0($pop18) + i32.call $1=, __fixtfsi@FUNCTION, $pop20, $pop19 +.LBB12_6: # %foo.exit + end_block # label23: + i32.const $push39=, 0 + i32.store foo_arg($pop39), $1 + i32.const $push46=, 0 + i32.const $push44=, 48 + i32.add $push45=, $2, $pop44 + i32.store __stack_pointer($pop46), $pop45 + return +.LBB12_7: # %sw.default.i + end_block # label22: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end12: + .size f12, .Lfunc_end12-f12 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push54=, 0 + i32.const $push52=, 0 + i32.load $push51=, __stack_pointer($pop52) + i32.const $push53=, 176 + i32.sub $push77=, $pop51, $pop53 + tee_local $push76=, $0=, $pop77 + i32.store __stack_pointer($pop54), $pop76 + i32.const $push0=, 79 + i32.store 160($0), $pop0 + i32.const $push58=, 160 + i32.add $push59=, $0, $pop58 + call f1@FUNCTION, $0, $pop59 + block + i32.const $push75=, 0 + i32.load $push1=, x($pop75) + i32.const $push74=, 79 + i32.ne $push2=, $pop1, $pop74 + br_if 0, $pop2 # 0: down to label26 +# BB#1: # %if.end + i64.const $push3=, -4599301119452119040 + i64.store 152($0), $pop3 + i32.const $push4=, 13 + i32.store 144($0), $pop4 + i32.const $push5=, 16386 + i32.const $push60=, 144 + i32.add $push61=, $0, $pop60 + call f2@FUNCTION, $pop5, $pop61 + i32.const $push79=, 0 + i32.load $push6=, bar_arg($pop79) + i32.const $push78=, 16386 + i32.ne $push7=, $pop6, $pop78 + br_if 0, $pop7 # 0: down to label26 +# BB#2: # %if.end3 + i32.const $push8=, 2031 + i32.store 128($0), $pop8 + i32.const $push62=, 128 + i32.add $push63=, $0, $pop62 + call f3@FUNCTION, $0, $pop63 + i32.const $push81=, 0 + i32.load $push9=, x($pop81) + i32.const $push80=, 2031 + i32.ne $push10=, $pop9, $pop80 + br_if 0, $pop10 # 0: down to label26 +# BB#3: # %if.end6 + i32.const $push11=, 18 + i32.store 112($0), $pop11 + i32.const $push12=, 4 + i32.const $push64=, 112 + i32.add $push65=, $0, $pop64 + call f4@FUNCTION, $pop12, $pop65 + i32.const $push83=, 0 + i32.load $push13=, bar_arg($pop83) + i32.const $push82=, 4 + i32.ne $push14=, $pop13, $pop82 + br_if 0, $pop14 # 0: down to label26 +# BB#4: # %if.end9 + i32.const $push15=, 96 + i32.add $push16=, $0, $pop15 + i64.const $push17=, 18 + i64.store 0($pop16), $pop17 + i64.const $push18=, 4626041242239631360 + i64.store 88($0), $pop18 + i32.const $push19=, 1 + i32.store 80($0), $pop19 + i32.const $push20=, 5 + i32.const $push66=, 80 + i32.add $push67=, $0, $pop66 + call f5@FUNCTION, $pop20, $pop67 + i32.const $push84=, 0 + i32.load $push21=, foo_arg($pop84) + i32.const $push22=, 38 + i32.ne $push23=, $pop21, $pop22 + br_if 0, $pop23 # 0: down to label26 +# BB#5: # %if.end12 + i32.const $push24=, 18 + i32.store 64($0), $pop24 + i32.const $push68=, 64 + i32.add $push69=, $0, $pop68 + call f6@FUNCTION, $0, $pop69 + i32.const $push86=, 0 + i32.load $push25=, x($pop86) + i32.const $push85=, 18 + i32.ne $push26=, $pop25, $pop85 + br_if 0, $pop26 # 0: down to label26 +# BB#6: # %if.end15 + i32.const $push27=, 7 + i32.const $push89=, 0 + call f7@FUNCTION, $pop27, $pop89 + i32.const $push88=, 0 + i32.load $push28=, bar_arg($pop88) + i32.const $push87=, 7 + i32.ne $push29=, $pop28, $pop87 + br_if 0, $pop29 # 0: down to label26 +# BB#7: # %if.end18 + i64.const $push30=, 4623507967449235456 + i64.store 56($0), $pop30 + i64.const $push31=, 2031 + i64.store 48($0), $pop31 + i32.const $push32=, 8 + i32.const $push70=, 48 + i32.add $push71=, $0, $pop70 + call f8@FUNCTION, $pop32, $pop71 + i32.const $push90=, 0 + i32.load $push33=, foo_arg($pop90) + i32.const $push34=, 2044 + i32.ne $push35=, $pop33, $pop34 + br_if 0, $pop35 # 0: down to label26 +# BB#8: # %if.end21 + i32.const $push36=, 180 + i32.store 32($0), $pop36 + i32.const $push72=, 32 + i32.add $push73=, $0, $pop72 + call f10@FUNCTION, $0, $pop73 + i32.const $push92=, 0 + i32.load $push37=, x($pop92) + i32.const $push91=, 180 + i32.ne $push38=, $pop37, $pop91 + br_if 0, $pop38 # 0: down to label26 +# BB#9: # %if.end24 + i32.const $push39=, 10 + i32.const $push95=, 0 + call f11@FUNCTION, $pop39, $pop95 + i32.const $push94=, 0 + i32.load $push40=, bar_arg($pop94) + i32.const $push93=, 10 + i32.ne $push41=, $pop40, $pop93 + br_if 0, $pop41 # 0: down to label26 +# BB#10: # %if.end27 + i32.const $push42=, 16 + i32.add $push43=, $0, $pop42 + i64.const $push44=, 4612389705869164544 + i64.store 0($pop43), $pop44 + i64.const $push45=, 0 + i64.store 8($0), $pop45 + i32.const $push46=, 2030 + i32.store 0($0), $pop46 + i32.const $push47=, 11 + call f12@FUNCTION, $pop47, $0 + i32.const $push96=, 0 + i32.load $push48=, foo_arg($pop96) + i32.const $push49=, 2042 + i32.ne $push50=, $pop48, $pop49 + br_if 0, $pop50 # 0: down to label26 +# BB#11: # %if.end30 + i32.const $push57=, 0 + i32.const $push55=, 176 + i32.add $push56=, $0, $pop55 + i32.store __stack_pointer($pop57), $pop56 + i32.const $push97=, 0 + return $pop97 +.LBB13_12: # %if.then + end_block # label26: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end13: + .size main, .Lfunc_end13-main + # -- End function + .hidden foo_arg # @foo_arg + .type foo_arg,@object + .section .bss.foo_arg,"aw",@nobits + .globl foo_arg + .p2align 2 +foo_arg: + .int32 0 # 0x0 + .size foo_arg, 4 + + .hidden gap # @gap + .type gap,@object + .section .bss.gap,"aw",@nobits + .globl gap + .p2align 2 +gap: + .int32 0 + .size gap, 4 + + .hidden bar_arg # @bar_arg + .type bar_arg,@object + .section .bss.bar_arg,"aw",@nobits + .globl bar_arg + .p2align 2 +bar_arg: + .int32 0 # 0x0 + .size bar_arg, 4 + + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 2 +x: + .int32 0 # 0x0 + .size x, 4 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 3 +d: + .int64 0 # double 0 + .size d, 8 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/stdarg-3.c.s b/src/binaryen/test/torture-s/stdarg-3.c.s new file mode 100644 index 0000000000..5070c18df4 --- /dev/null +++ b/src/binaryen/test/torture-s/stdarg-3.c.s @@ -0,0 +1,1207 @@ + .text + .file "stdarg-3.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store bar_arg($pop0), $0 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push8=, $pop3, $pop5 + tee_local $push7=, $3=, $pop8 + i32.store 12($pop7), $1 + block + i32.const $push6=, 1 + i32.lt_s $push0=, $0, $pop6 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %while.body.lr.ph + i32.const $push9=, 1 + i32.add $1=, $0, $pop9 + i32.load $0=, 12($3) +.LBB1_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label1: + i32.const $push17=, 4 + i32.add $push16=, $0, $pop17 + tee_local $push15=, $2=, $pop16 + i32.store 12($3), $pop15 + i32.const $push14=, 0 + i32.load $push1=, 0($0) + i32.store x($pop14), $pop1 + copy_local $0=, $2 + i32.const $push13=, -1 + i32.add $push12=, $1, $pop13 + tee_local $push11=, $1=, $pop12 + i32.const $push10=, 1 + i32.gt_s $push2=, $pop11, $pop10 + br_if 0, $pop2 # 0: up to label1 +.LBB1_3: # %while.end + end_loop + end_block # label0: + # fallthrough-return + .endfunc +.Lfunc_end1: + .size f1, .Lfunc_end1-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push9=, $pop4, $pop6 + tee_local $push8=, $2=, $pop9 + i32.store 12($pop8), $1 + block + i32.const $push7=, 1 + i32.lt_s $push0=, $0, $pop7 + br_if 0, $pop0 # 0: down to label2 +# BB#1: # %while.body.lr.ph + i32.const $push10=, 1 + i32.add $1=, $0, $pop10 + i32.load $0=, 12($2) +.LBB2_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.const $push20=, 0 + i32.const $push19=, 7 + i32.add $push1=, $0, $pop19 + i32.const $push18=, -8 + i32.and $push17=, $pop1, $pop18 + tee_local $push16=, $0=, $pop17 + i64.load $push2=, 0($pop16) + i64.store d($pop20), $pop2 + i32.const $push15=, 8 + i32.add $0=, $0, $pop15 + i32.const $push14=, -1 + i32.add $push13=, $1, $pop14 + tee_local $push12=, $1=, $pop13 + i32.const $push11=, 1 + i32.gt_s $push3=, $pop12, $pop11 + br_if 0, $pop3 # 0: up to label3 +# BB#3: # %while.end.loopexit + end_loop + i32.store 12($2), $0 +.LBB2_4: # %while.end + end_block # label2: + # fallthrough-return + .endfunc +.Lfunc_end2: + .size f2, .Lfunc_end2-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .param i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $4=, $pop3, $pop5 + block + i32.const $push6=, 1 + i32.lt_s $push0=, $0, $pop6 + br_if 0, $pop0 # 0: down to label4 +# BB#1: # %while.body.preheader + i32.const $push7=, 1 + i32.add $0=, $0, $pop7 + i32.const $push1=, 4 + i32.add $2=, $1, $pop1 +.LBB3_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label5: + i32.store 12($4), $2 + i32.const $push15=, 0 + i32.load $push14=, 0($1) + tee_local $push13=, $3=, $pop14 + i32.store bar_arg($pop15), $pop13 + i32.const $push12=, 0 + i32.store x($pop12), $3 + i32.const $push11=, -1 + i32.add $push10=, $0, $pop11 + tee_local $push9=, $0=, $pop10 + i32.const $push8=, 1 + i32.gt_s $push2=, $pop9, $pop8 + br_if 0, $pop2 # 0: up to label5 +.LBB3_3: # %while.end + end_loop + end_block # label4: + # fallthrough-return + .endfunc +.Lfunc_end3: + .size f3, .Lfunc_end3-f3 + # -- End function + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push11=, 0 + i32.load $push10=, __stack_pointer($pop11) + i32.const $push12=, 16 + i32.sub $3=, $pop10, $pop12 + block + i32.const $push13=, 1 + i32.lt_s $push0=, $0, $pop13 + br_if 0, $pop0 # 0: down to label6 +# BB#1: # %while.body.lr.ph + i32.const $push16=, 1 + i32.add $0=, $0, $pop16 + i32.const $push1=, 7 + i32.add $push2=, $1, $pop1 + i32.const $push3=, -8 + i32.and $push15=, $pop2, $pop3 + tee_local $push14=, $1=, $pop15 + i32.const $push8=, 8 + i32.add $2=, $pop14, $pop8 +.LBB4_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label7: + i32.const $push24=, 0 + i64.load $push4=, 0($1) + i64.store d($pop24), $pop4 + i32.const $push23=, 0 + i32.const $push22=, 0 + f64.load $push5=, d($pop22) + f64.const $push21=, 0x1p2 + f64.add $push6=, $pop5, $pop21 + i32.trunc_s/f64 $push7=, $pop6 + i32.store bar_arg($pop23), $pop7 + i32.store 12($3), $2 + i32.const $push20=, -1 + i32.add $push19=, $0, $pop20 + tee_local $push18=, $0=, $pop19 + i32.const $push17=, 1 + i32.gt_s $push9=, $pop18, $pop17 + br_if 0, $pop9 # 0: up to label7 +.LBB4_3: # %while.end + end_loop + end_block # label6: + # fallthrough-return + .endfunc +.Lfunc_end4: + .size f4, .Lfunc_end4-f4 + # -- End function + .section .text.f5,"ax",@progbits + .hidden f5 # -- Begin function f5 + .globl f5 + .type f5,@function +f5: # @f5 + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push11=, 0 + i32.load $push10=, __stack_pointer($pop11) + i32.const $push12=, 16 + i32.sub $push15=, $pop10, $pop12 + tee_local $push14=, $2=, $pop15 + i32.store 12($pop14), $1 + block + i32.const $push13=, 1 + i32.lt_s $push0=, $0, $pop13 + br_if 0, $pop0 # 0: down to label8 +# BB#1: # %while.body.lr.ph + i32.const $push16=, 1 + i32.add $1=, $0, $pop16 + i32.load $0=, 12($2) +.LBB5_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label9: + i32.const $push32=, 0 + i32.const $push31=, 7 + i32.add $push1=, $0, $pop31 + i32.const $push30=, -8 + i32.and $push29=, $pop1, $pop30 + tee_local $push28=, $0=, $pop29 + i64.load $push2=, 0($pop28) + i64.store s1($pop32), $pop2 + i32.const $push27=, 0 + i32.const $push26=, 24 + i32.add $push3=, $0, $pop26 + i64.load $push4=, 0($pop3) + i64.store s1+24($pop27), $pop4 + i32.const $push25=, 0 + i32.const $push24=, 16 + i32.add $push5=, $0, $pop24 + i64.load $push6=, 0($pop5) + i64.store s1+16($pop25), $pop6 + i32.const $push23=, 0 + i32.const $push22=, 8 + i32.add $push7=, $0, $pop22 + i64.load $push8=, 0($pop7) + i64.store s1+8($pop23), $pop8 + i32.const $push21=, 32 + i32.add $0=, $0, $pop21 + i32.const $push20=, -1 + i32.add $push19=, $1, $pop20 + tee_local $push18=, $1=, $pop19 + i32.const $push17=, 1 + i32.gt_s $push9=, $pop18, $pop17 + br_if 0, $pop9 # 0: up to label9 +# BB#3: # %while.end.loopexit + end_loop + i32.store 12($2), $0 +.LBB5_4: # %while.end + end_block # label8: + # fallthrough-return + .endfunc +.Lfunc_end5: + .size f5, .Lfunc_end5-f5 + # -- End function + .section .text.f6,"ax",@progbits + .hidden f6 # -- Begin function f6 + .globl f6 + .type f6,@function +f6: # @f6 + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 16 + i32.sub $push11=, $pop6, $pop8 + tee_local $push10=, $2=, $pop11 + i32.store 12($pop10), $1 + block + i32.const $push9=, 1 + i32.lt_s $push0=, $0, $pop9 + br_if 0, $pop0 # 0: down to label10 +# BB#1: # %while.body.lr.ph + i32.const $push12=, 1 + i32.add $1=, $0, $pop12 + i32.load $0=, 12($2) +.LBB6_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label11: + i32.const $push24=, 0 + i32.const $push23=, 7 + i32.add $push1=, $0, $pop23 + i32.const $push22=, -8 + i32.and $push21=, $pop1, $pop22 + tee_local $push20=, $0=, $pop21 + i64.load $push2=, 0($pop20) + i64.store s2($pop24), $pop2 + i32.const $push19=, 0 + i32.const $push18=, 8 + i32.add $push3=, $0, $pop18 + i64.load $push4=, 0($pop3) + i64.store s2+8($pop19), $pop4 + i32.const $push17=, 16 + i32.add $0=, $0, $pop17 + i32.const $push16=, -1 + i32.add $push15=, $1, $pop16 + tee_local $push14=, $1=, $pop15 + i32.const $push13=, 1 + i32.gt_s $push5=, $pop14, $pop13 + br_if 0, $pop5 # 0: up to label11 +# BB#3: # %while.end.loopexit + end_loop + i32.store 12($2), $0 +.LBB6_4: # %while.end + end_block # label10: + # fallthrough-return + .endfunc +.Lfunc_end6: + .size f6, .Lfunc_end6-f6 + # -- End function + .section .text.f7,"ax",@progbits + .hidden f7 # -- Begin function f7 + .globl f7 + .type f7,@function +f7: # @f7 + .param i32, i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push15=, 0 + i32.load $push14=, __stack_pointer($pop15) + i32.const $push16=, 16 + i32.sub $6=, $pop14, $pop16 + block + i32.const $push17=, 1 + i32.lt_s $push0=, $0, $pop17 + br_if 0, $pop0 # 0: down to label12 +# BB#1: # %while.body.lr.ph + i32.const $push20=, 1 + i32.add $0=, $0, $pop20 + i32.const $push1=, 7 + i32.add $push2=, $1, $pop1 + i32.const $push3=, -8 + i32.and $push19=, $pop2, $pop3 + tee_local $push18=, $1=, $pop19 + i32.const $push5=, 8 + i32.add $2=, $pop18, $pop5 + i32.const $push7=, 16 + i32.add $3=, $1, $pop7 + i32.const $push9=, 24 + i32.add $4=, $1, $pop9 + i32.const $push12=, 32 + i32.add $5=, $1, $pop12 +.LBB7_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label13: + i32.const $push30=, 0 + i64.load $push4=, 0($1) + i64.store s1($pop30), $pop4 + i32.const $push29=, 0 + i64.load $push6=, 0($2) + i64.store s1+8($pop29), $pop6 + i32.const $push28=, 0 + i64.load $push8=, 0($3) + i64.store s1+16($pop28), $pop8 + i32.const $push27=, 0 + i64.load $push10=, 0($4) + i64.store s1+24($pop27), $pop10 + i32.const $push26=, 0 + i32.const $push25=, 0 + i32.load $push11=, s1($pop25) + i32.store bar_arg($pop26), $pop11 + i32.store 12($6), $5 + i32.const $push24=, -1 + i32.add $push23=, $0, $pop24 + tee_local $push22=, $0=, $pop23 + i32.const $push21=, 1 + i32.gt_s $push13=, $pop22, $pop21 + br_if 0, $pop13 # 0: up to label13 +.LBB7_3: # %while.end + end_loop + end_block # label12: + # fallthrough-return + .endfunc +.Lfunc_end7: + .size f7, .Lfunc_end7-f7 + # -- End function + .section .text.f8,"ax",@progbits + .hidden f8 # -- Begin function f8 + .globl f8 + .type f8,@function +f8: # @f8 + .param i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.load $push11=, __stack_pointer($pop12) + i32.const $push13=, 16 + i32.sub $4=, $pop11, $pop13 + block + i32.const $push14=, 1 + i32.lt_s $push0=, $0, $pop14 + br_if 0, $pop0 # 0: down to label14 +# BB#1: # %while.body.lr.ph + i32.const $push17=, 1 + i32.add $3=, $0, $pop17 + i32.const $push1=, 7 + i32.add $push2=, $1, $pop1 + i32.const $push3=, -8 + i32.and $push16=, $pop2, $pop3 + tee_local $push15=, $0=, $pop16 + i32.const $push4=, 8 + i32.add $1=, $pop15, $pop4 + i32.const $push9=, 20 + i32.add $2=, $0, $pop9 +.LBB8_2: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label15: + i32.const $push26=, 0 + i64.load $push5=, 0($1) + i64.store s2+8($pop26), $pop5 + i32.const $push25=, 0 + i64.load $push6=, 0($0) + i64.store s2($pop25), $pop6 + i32.const $push24=, 0 + i32.load $push7=, 16($0) + i32.store y($pop24), $pop7 + i32.const $push23=, 0 + i32.const $push22=, 0 + i32.load $push8=, s2+8($pop22) + i32.store bar_arg($pop23), $pop8 + i32.store 12($4), $2 + i32.const $push21=, -1 + i32.add $push20=, $3, $pop21 + tee_local $push19=, $3=, $pop20 + i32.const $push18=, 1 + i32.gt_s $push10=, $pop19, $pop18 + br_if 0, $pop10 # 0: up to label15 +.LBB8_3: # %while.end + end_loop + end_block # label14: + # fallthrough-return + .endfunc +.Lfunc_end8: + .size f8, .Lfunc_end8-f8 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i64, i64, i64, i32 +# BB#0: # %entry + i32.const $push200=, 0 + i32.const $push198=, 0 + i32.load $push197=, __stack_pointer($pop198) + i32.const $push199=, 752 + i32.sub $push378=, $pop197, $pop199 + tee_local $push377=, $4=, $pop378 + i32.store __stack_pointer($pop200), $pop377 + i32.const $push204=, 624 + i32.add $push205=, $4, $pop204 + i32.const $push376=, 24 + i32.add $push0=, $pop205, $pop376 + i64.const $push1=, 55834574859 + i64.store 0($pop0), $pop1 + i32.const $push206=, 624 + i32.add $push207=, $4, $pop206 + i32.const $push375=, 16 + i32.add $push2=, $pop207, $pop375 + i64.const $push3=, 38654705671 + i64.store 0($pop2), $pop3 + i64.const $push4=, 21474836483 + i64.store 632($4), $pop4 + i64.const $push5=, 8589934593 + i64.store 624($4), $pop5 + i32.const $push6=, 7 + i32.const $push208=, 624 + i32.add $push209=, $4, $pop208 + call f1@FUNCTION, $pop6, $pop209 + block + i32.const $push374=, 0 + i32.load $push7=, x($pop374) + i32.const $push8=, 11 + i32.ne $push9=, $pop7, $pop8 + br_if 0, $pop9 # 0: down to label16 +# BB#1: # %if.end + i32.const $push10=, 608 + i32.add $push11=, $4, $pop10 + i64.const $push12=, 4634204016564240384 + i64.store 0($pop11), $pop12 + i32.const $push13=, 600 + i32.add $push14=, $4, $pop13 + i64.const $push15=, 4629700416936869888 + i64.store 0($pop14), $pop15 + i32.const $push16=, 592 + i32.add $push17=, $4, $pop16 + i64.const $push18=, 4625196817309499392 + i64.store 0($pop17), $pop18 + i32.const $push210=, 560 + i32.add $push211=, $4, $pop210 + i32.const $push381=, 24 + i32.add $push19=, $pop211, $pop381 + i64.const $push20=, 4620693217682128896 + i64.store 0($pop19), $pop20 + i32.const $push212=, 560 + i32.add $push213=, $4, $pop212 + i32.const $push380=, 16 + i32.add $push21=, $pop213, $pop380 + i64.const $push22=, 4616189618054758400 + i64.store 0($pop21), $pop22 + i64.const $push23=, 4611686018427387904 + i64.store 568($4), $pop23 + i64.const $push24=, 4607182418800017408 + i64.store 560($4), $pop24 + i32.const $push25=, 6 + i32.const $push214=, 560 + i32.add $push215=, $4, $pop214 + call f2@FUNCTION, $pop25, $pop215 + i32.const $push379=, 0 + f64.load $push26=, d($pop379) + f64.const $push27=, 0x1p5 + f64.ne $push28=, $pop26, $pop27 + br_if 0, $pop28 # 0: down to label16 +# BB#2: # %if.end3 + i64.const $push30=, 12884901889 + i64.store 544($4), $pop30 + i32.const $push31=, 2 + i32.const $push216=, 544 + i32.add $push217=, $4, $pop216 + call f3@FUNCTION, $pop31, $pop217 + i32.const $push383=, 0 + i32.load $push32=, bar_arg($pop383) + i32.const $push382=, 1 + i32.ne $push33=, $pop32, $pop382 + br_if 0, $pop33 # 0: down to label16 +# BB#3: # %if.end3 + i32.const $push385=, 0 + i32.load $push29=, x($pop385) + i32.const $push384=, 1 + i32.ne $push34=, $pop29, $pop384 + br_if 0, $pop34 # 0: down to label16 +# BB#4: # %if.end7 + i64.const $push36=, 4626041242239631360 + i64.store 536($4), $pop36 + i64.const $push37=, 4625478292286210048 + i64.store 528($4), $pop37 + i32.const $push38=, 2 + i32.const $push218=, 528 + i32.add $push219=, $4, $pop218 + call f4@FUNCTION, $pop38, $pop219 + i32.const $push386=, 0 + i32.load $push39=, bar_arg($pop386) + i32.const $push40=, 21 + i32.ne $push41=, $pop39, $pop40 + br_if 0, $pop41 # 0: down to label16 +# BB#5: # %if.end7 + i32.const $push387=, 0 + f64.load $push35=, d($pop387) + f64.const $push42=, 0x1.1p4 + f64.ne $push43=, $pop35, $pop42 + br_if 0, $pop43 # 0: down to label16 +# BB#6: # %if.end12 + i32.const $push47=, 251 + i32.store 736($4), $pop47 + i32.const $push220=, 688 + i32.add $push221=, $4, $pop220 + i32.const $push48=, 16 + i32.add $push409=, $pop221, $pop48 + tee_local $push408=, $0=, $pop409 + i64.load $push407=, 736($4) + tee_local $push406=, $1=, $pop407 + i64.store 0($pop408), $pop406 + i32.const $push405=, 254 + i32.store 0($0), $pop405 + i32.const $push222=, 688 + i32.add $push223=, $4, $pop222 + i32.const $push49=, 8 + i32.add $push50=, $pop223, $pop49 + i64.const $push51=, 4624633867356078080 + i64.store 0($pop50), $pop51 + i32.const $push224=, 496 + i32.add $push225=, $4, $pop224 + i32.const $push404=, 8 + i32.add $push52=, $pop225, $pop404 + i64.const $push403=, 4624633867356078080 + i64.store 0($pop52), $pop403 + i32.const $push226=, 496 + i32.add $push227=, $4, $pop226 + i32.const $push53=, 24 + i32.add $push54=, $pop227, $pop53 + i64.const $push55=, 4640924231633207296 + i64.store 0($pop54), $pop55 + i32.const $push228=, 464 + i32.add $push229=, $4, $pop228 + i32.const $push402=, 24 + i32.add $push56=, $pop229, $pop402 + i64.const $push57=, 4640466834796052480 + i64.store 0($pop56), $pop57 + i32.const $push230=, 464 + i32.add $push231=, $4, $pop230 + i32.const $push401=, 8 + i32.add $push58=, $pop231, $pop401 + i64.const $push400=, 4624633867356078080 + i64.store 0($pop58), $pop400 + i32.const $push232=, 496 + i32.add $push233=, $4, $pop232 + i32.const $push399=, 16 + i32.add $push59=, $pop233, $pop399 + i64.store 0($pop59), $1 + i32.const $push234=, 464 + i32.add $push235=, $4, $pop234 + i32.const $push398=, 16 + i32.add $push60=, $pop235, $pop398 + i64.load $push61=, 0($0) + i64.store 0($pop60), $pop61 + i64.const $push397=, 4624633867356078080 + i64.store 728($4), $pop397 + i64.const $push396=, 4640924231633207296 + i64.store 744($4), $pop396 + i64.const $push395=, 4640466834796052480 + i64.store 712($4), $pop395 + i32.const $push62=, 131 + i32.store 720($4), $pop62 + i64.load $push394=, 720($4) + tee_local $push393=, $1=, $pop394 + i64.store 496($4), $pop393 + i64.store 464($4), $1 + i64.store 688($4), $1 + i32.const $push236=, 432 + i32.add $push237=, $4, $pop236 + i32.const $push392=, 24 + i32.add $push63=, $pop237, $pop392 + i64.load $push64=, 744($4) + i64.store 0($pop63), $pop64 + i32.const $push238=, 432 + i32.add $push239=, $4, $pop238 + i32.const $push391=, 16 + i32.add $push65=, $pop239, $pop391 + i64.load $push66=, 736($4) + i64.store 0($pop65), $pop66 + i32.const $push240=, 432 + i32.add $push241=, $4, $pop240 + i32.const $push390=, 8 + i32.add $push67=, $pop241, $pop390 + i64.load $push68=, 728($4) + i64.store 0($pop67), $pop68 + i64.load $push69=, 720($4) + i64.store 432($4), $pop69 + i32.const $push242=, 432 + i32.add $push243=, $4, $pop242 + i32.store 424($4), $pop243 + i32.const $push244=, 464 + i32.add $push245=, $4, $pop244 + i32.store 420($4), $pop245 + i32.const $push246=, 496 + i32.add $push247=, $4, $pop246 + i32.store 416($4), $pop247 + i32.const $push70=, 2 + i32.const $push248=, 416 + i32.add $push249=, $4, $pop248 + call f5@FUNCTION, $pop70, $pop249 + i32.const $push389=, 0 + i32.load $push71=, s1($pop389) + i32.const $push388=, 131 + i32.ne $push72=, $pop71, $pop388 + br_if 0, $pop72 # 0: down to label16 +# BB#7: # %if.end12 + i32.const $push411=, 0 + i32.load $push44=, s1+16($pop411) + i32.const $push410=, 254 + i32.ne $push73=, $pop44, $pop410 + br_if 0, $pop73 # 0: down to label16 +# BB#8: # %if.end12 + i32.const $push412=, 0 + f64.load $push45=, s1+8($pop412) + f64.const $push74=, 0x1.ep3 + f64.ne $push75=, $pop45, $pop74 + br_if 0, $pop75 # 0: down to label16 +# BB#9: # %if.end12 + i32.const $push413=, 0 + f64.load $push46=, s1+24($pop413) + f64.const $push76=, 0x1.64p7 + f64.ne $push77=, $pop46, $pop76 + br_if 0, $pop77 # 0: down to label16 +# BB#10: # %if.end23 + i32.const $push250=, 384 + i32.add $push251=, $4, $pop250 + i32.const $push81=, 24 + i32.add $push82=, $pop251, $pop81 + i32.const $push252=, 720 + i32.add $push253=, $4, $pop252 + i32.const $push434=, 24 + i32.add $push83=, $pop253, $pop434 + i64.load $push433=, 0($pop83) + tee_local $push432=, $1=, $pop433 + i64.store 0($pop82), $pop432 + i32.const $push254=, 384 + i32.add $push255=, $4, $pop254 + i32.const $push84=, 16 + i32.add $push85=, $pop255, $pop84 + i32.const $push256=, 720 + i32.add $push257=, $4, $pop256 + i32.const $push431=, 16 + i32.add $push86=, $pop257, $pop431 + i64.load $push430=, 0($pop86) + tee_local $push429=, $2=, $pop430 + i64.store 0($pop85), $pop429 + i32.const $push258=, 384 + i32.add $push259=, $4, $pop258 + i32.const $push87=, 8 + i32.add $push88=, $pop259, $pop87 + i32.const $push260=, 720 + i32.add $push261=, $4, $pop260 + i32.const $push428=, 8 + i32.add $push89=, $pop261, $pop428 + i64.load $push427=, 0($pop89) + tee_local $push426=, $3=, $pop427 + i64.store 0($pop88), $pop426 + i32.const $push262=, 352 + i32.add $push263=, $4, $pop262 + i32.const $push425=, 8 + i32.add $push90=, $pop263, $pop425 + i32.const $push264=, 688 + i32.add $push265=, $4, $pop264 + i32.const $push424=, 8 + i32.add $push91=, $pop265, $pop424 + i64.load $push92=, 0($pop91) + i64.store 0($pop90), $pop92 + i32.const $push266=, 352 + i32.add $push267=, $4, $pop266 + i32.const $push423=, 16 + i32.add $push93=, $pop267, $pop423 + i32.const $push268=, 688 + i32.add $push269=, $4, $pop268 + i32.const $push422=, 16 + i32.add $push94=, $pop269, $pop422 + i64.load $push95=, 0($pop94) + i64.store 0($pop93), $pop95 + i32.const $push270=, 352 + i32.add $push271=, $4, $pop270 + i32.const $push421=, 24 + i32.add $push96=, $pop271, $pop421 + i32.const $push272=, 688 + i32.add $push273=, $4, $pop272 + i32.const $push420=, 24 + i32.add $push97=, $pop273, $pop420 + i64.load $push98=, 0($pop97) + i64.store 0($pop96), $pop98 + i32.const $push274=, 320 + i32.add $push275=, $4, $pop274 + i32.const $push419=, 8 + i32.add $push99=, $pop275, $pop419 + i64.store 0($pop99), $3 + i32.const $push276=, 320 + i32.add $push277=, $4, $pop276 + i32.const $push418=, 16 + i32.add $push100=, $pop277, $pop418 + i64.store 0($pop100), $2 + i32.const $push278=, 320 + i32.add $push279=, $4, $pop278 + i32.const $push417=, 24 + i32.add $push101=, $pop279, $pop417 + i64.store 0($pop101), $1 + i64.load $push416=, 720($4) + tee_local $push415=, $1=, $pop416 + i64.store 384($4), $pop415 + i64.load $push102=, 688($4) + i64.store 352($4), $pop102 + i64.store 320($4), $1 + i32.const $push280=, 320 + i32.add $push281=, $4, $pop280 + i32.store 312($4), $pop281 + i32.const $push282=, 352 + i32.add $push283=, $4, $pop282 + i32.store 308($4), $pop283 + i32.const $push284=, 384 + i32.add $push285=, $4, $pop284 + i32.store 304($4), $pop285 + i32.const $push103=, 3 + i32.const $push286=, 304 + i32.add $push287=, $4, $pop286 + call f5@FUNCTION, $pop103, $pop287 + i32.const $push414=, 0 + i32.load $push104=, s1($pop414) + i32.const $push105=, 131 + i32.ne $push106=, $pop104, $pop105 + br_if 0, $pop106 # 0: down to label16 +# BB#11: # %if.end23 + i32.const $push435=, 0 + i32.load $push78=, s1+16($pop435) + i32.const $push107=, 251 + i32.ne $push108=, $pop78, $pop107 + br_if 0, $pop108 # 0: down to label16 +# BB#12: # %if.end23 + i32.const $push436=, 0 + f64.load $push79=, s1+8($pop436) + f64.const $push109=, 0x1.ep3 + f64.ne $push110=, $pop79, $pop109 + br_if 0, $pop110 # 0: down to label16 +# BB#13: # %if.end23 + i32.const $push437=, 0 + f64.load $push80=, s1+24($pop437) + f64.const $push111=, 0x1.7ep7 + f64.ne $push112=, $pop80, $pop111 + br_if 0, $pop112 # 0: down to label16 +# BB#14: # %if.end32 + i32.const $push114=, 138 + i32.store 680($4), $pop114 + i32.const $push288=, 288 + i32.add $push289=, $4, $pop288 + i32.const $push115=, 8 + i32.add $push116=, $pop289, $pop115 + i64.load $push446=, 680($4) + tee_local $push445=, $1=, $pop446 + i64.store 0($pop116), $pop445 + i32.const $push117=, 257 + i32.store 664($4), $pop117 + i32.const $push290=, 272 + i32.add $push291=, $4, $pop290 + i32.const $push444=, 8 + i32.add $push118=, $pop291, $pop444 + i64.load $push119=, 664($4) + i64.store 0($pop118), $pop119 + i32.const $push292=, 256 + i32.add $push293=, $4, $pop292 + i32.const $push443=, 8 + i32.add $push120=, $pop293, $pop443 + i64.store 0($pop120), $1 + i64.const $push121=, 4625196817309499392 + i64.store 672($4), $pop121 + i64.const $push122=, 4640396466051874816 + i64.store 656($4), $pop122 + i64.const $push442=, 4625196817309499392 + i64.store 288($4), $pop442 + i64.const $push441=, 4640396466051874816 + i64.store 272($4), $pop441 + i64.const $push440=, 4625196817309499392 + i64.store 256($4), $pop440 + i32.const $push294=, 256 + i32.add $push295=, $4, $pop294 + i32.store 248($4), $pop295 + i32.const $push296=, 272 + i32.add $push297=, $4, $pop296 + i32.store 244($4), $pop297 + i32.const $push298=, 288 + i32.add $push299=, $4, $pop298 + i32.store 240($4), $pop299 + i32.const $push123=, 2 + i32.const $push300=, 240 + i32.add $push301=, $4, $pop300 + call f6@FUNCTION, $pop123, $pop301 + i32.const $push439=, 0 + i32.load $push124=, s2+8($pop439) + i32.const $push438=, 257 + i32.ne $push125=, $pop124, $pop438 + br_if 0, $pop125 # 0: down to label16 +# BB#15: # %if.end32 + i32.const $push447=, 0 + f64.load $push113=, s2($pop447) + f64.const $push126=, 0x1.6p7 + f64.ne $push127=, $pop113, $pop126 + br_if 0, $pop127 # 0: down to label16 +# BB#16: # %if.end41 + i32.const $push302=, 224 + i32.add $push303=, $4, $pop302 + i32.const $push129=, 8 + i32.add $push130=, $pop303, $pop129 + i32.const $push304=, 672 + i32.add $push305=, $4, $pop304 + i32.const $push456=, 8 + i32.add $push131=, $pop305, $pop456 + i64.load $push455=, 0($pop131) + tee_local $push454=, $1=, $pop455 + i64.store 0($pop130), $pop454 + i32.const $push306=, 208 + i32.add $push307=, $4, $pop306 + i32.const $push453=, 8 + i32.add $push132=, $pop307, $pop453 + i32.const $push308=, 656 + i32.add $push309=, $4, $pop308 + i32.const $push452=, 8 + i32.add $push133=, $pop309, $pop452 + i64.load $push134=, 0($pop133) + i64.store 0($pop132), $pop134 + i32.const $push310=, 192 + i32.add $push311=, $4, $pop310 + i32.const $push451=, 8 + i32.add $push135=, $pop311, $pop451 + i64.store 0($pop135), $1 + i64.load $push450=, 672($4) + tee_local $push449=, $1=, $pop450 + i64.store 224($4), $pop449 + i64.load $push136=, 656($4) + i64.store 208($4), $pop136 + i64.store 192($4), $1 + i32.const $push312=, 192 + i32.add $push313=, $4, $pop312 + i32.store 184($4), $pop313 + i32.const $push314=, 208 + i32.add $push315=, $4, $pop314 + i32.store 180($4), $pop315 + i32.const $push316=, 224 + i32.add $push317=, $4, $pop316 + i32.store 176($4), $pop317 + i32.const $push137=, 3 + i32.const $push318=, 176 + i32.add $push319=, $4, $pop318 + call f6@FUNCTION, $pop137, $pop319 + i32.const $push448=, 0 + i32.load $push138=, s2+8($pop448) + i32.const $push139=, 138 + i32.ne $push140=, $pop138, $pop139 + br_if 0, $pop140 # 0: down to label16 +# BB#17: # %if.end41 + i32.const $push457=, 0 + f64.load $push128=, s2($pop457) + f64.const $push141=, 0x1p4 + f64.ne $push142=, $pop128, $pop141 + br_if 0, $pop142 # 0: down to label16 +# BB#18: # %if.end46 + i32.const $push320=, 144 + i32.add $push321=, $4, $pop320 + i32.const $push146=, 24 + i32.add $push147=, $pop321, $pop146 + i32.const $push322=, 688 + i32.add $push323=, $4, $pop322 + i32.const $push478=, 24 + i32.add $push148=, $pop323, $pop478 + i64.load $push149=, 0($pop148) + i64.store 0($pop147), $pop149 + i32.const $push324=, 144 + i32.add $push325=, $4, $pop324 + i32.const $push150=, 16 + i32.add $push151=, $pop325, $pop150 + i32.const $push326=, 688 + i32.add $push327=, $4, $pop326 + i32.const $push477=, 16 + i32.add $push152=, $pop327, $pop477 + i64.load $push153=, 0($pop152) + i64.store 0($pop151), $pop153 + i32.const $push328=, 144 + i32.add $push329=, $4, $pop328 + i32.const $push154=, 8 + i32.add $push155=, $pop329, $pop154 + i32.const $push330=, 688 + i32.add $push331=, $4, $pop330 + i32.const $push476=, 8 + i32.add $push156=, $pop331, $pop476 + i64.load $push157=, 0($pop156) + i64.store 0($pop155), $pop157 + i32.const $push332=, 112 + i32.add $push333=, $4, $pop332 + i32.const $push475=, 8 + i32.add $push158=, $pop333, $pop475 + i32.const $push334=, 720 + i32.add $push335=, $4, $pop334 + i32.const $push474=, 8 + i32.add $push159=, $pop335, $pop474 + i64.load $push473=, 0($pop159) + tee_local $push472=, $1=, $pop473 + i64.store 0($pop158), $pop472 + i32.const $push336=, 112 + i32.add $push337=, $4, $pop336 + i32.const $push471=, 16 + i32.add $push160=, $pop337, $pop471 + i32.const $push338=, 720 + i32.add $push339=, $4, $pop338 + i32.const $push470=, 16 + i32.add $push161=, $pop339, $pop470 + i64.load $push469=, 0($pop161) + tee_local $push468=, $2=, $pop469 + i64.store 0($pop160), $pop468 + i32.const $push340=, 112 + i32.add $push341=, $4, $pop340 + i32.const $push467=, 24 + i32.add $push162=, $pop341, $pop467 + i32.const $push342=, 720 + i32.add $push343=, $4, $pop342 + i32.const $push466=, 24 + i32.add $push163=, $pop343, $pop466 + i64.load $push465=, 0($pop163) + tee_local $push464=, $3=, $pop465 + i64.store 0($pop162), $pop464 + i32.const $push344=, 80 + i32.add $push345=, $4, $pop344 + i32.const $push463=, 8 + i32.add $push164=, $pop345, $pop463 + i64.store 0($pop164), $1 + i32.const $push346=, 80 + i32.add $push347=, $4, $pop346 + i32.const $push462=, 16 + i32.add $push165=, $pop347, $pop462 + i64.store 0($pop165), $2 + i32.const $push348=, 80 + i32.add $push349=, $4, $pop348 + i32.const $push461=, 24 + i32.add $push166=, $pop349, $pop461 + i64.store 0($pop166), $3 + i64.load $push167=, 688($4) + i64.store 144($4), $pop167 + i64.load $push460=, 720($4) + tee_local $push459=, $1=, $pop460 + i64.store 112($4), $pop459 + i64.store 80($4), $1 + i32.const $push350=, 80 + i32.add $push351=, $4, $pop350 + i32.store 72($4), $pop351 + i32.const $push352=, 112 + i32.add $push353=, $4, $pop352 + i32.store 68($4), $pop353 + i32.const $push354=, 144 + i32.add $push355=, $4, $pop354 + i32.store 64($4), $pop355 + i32.const $push168=, 2 + i32.const $push356=, 64 + i32.add $push357=, $4, $pop356 + call f7@FUNCTION, $pop168, $pop357 + i32.const $push458=, 0 + i32.load $push169=, s1($pop458) + i32.const $push170=, 131 + i32.ne $push171=, $pop169, $pop170 + br_if 0, $pop171 # 0: down to label16 +# BB#19: # %if.end46 + i32.const $push479=, 0 + i32.load $push143=, s1+16($pop479) + i32.const $push172=, 254 + i32.ne $push173=, $pop143, $pop172 + br_if 0, $pop173 # 0: down to label16 +# BB#20: # %if.end46 + i32.const $push480=, 0 + f64.load $push144=, s1+8($pop480) + f64.const $push174=, 0x1.ep3 + f64.ne $push175=, $pop144, $pop174 + br_if 0, $pop175 # 0: down to label16 +# BB#21: # %if.end46 + i32.const $push481=, 0 + f64.load $push145=, s1+24($pop481) + f64.const $push176=, 0x1.64p7 + f64.ne $push177=, $pop145, $pop176 + br_if 0, $pop177 # 0: down to label16 +# BB#22: # %if.end55 + i32.const $push482=, 0 + i32.load $push178=, bar_arg($pop482) + i32.const $push179=, 131 + i32.ne $push180=, $pop178, $pop179 + br_if 0, $pop180 # 0: down to label16 +# BB#23: # %if.end58 + i32.const $push358=, 48 + i32.add $push359=, $4, $pop358 + i32.const $push182=, 8 + i32.add $push183=, $pop359, $pop182 + i32.const $push360=, 656 + i32.add $push361=, $4, $pop360 + i32.const $push491=, 8 + i32.add $push184=, $pop361, $pop491 + i64.load $push185=, 0($pop184) + i64.store 0($pop183), $pop185 + i32.const $push362=, 32 + i32.add $push363=, $4, $pop362 + i32.const $push490=, 8 + i32.add $push186=, $pop363, $pop490 + i32.const $push364=, 672 + i32.add $push365=, $4, $pop364 + i32.const $push489=, 8 + i32.add $push187=, $pop365, $pop489 + i64.load $push488=, 0($pop187) + tee_local $push487=, $1=, $pop488 + i64.store 0($pop186), $pop487 + i32.const $push366=, 16 + i32.add $push367=, $4, $pop366 + i32.const $push486=, 8 + i32.add $push188=, $pop367, $pop486 + i64.store 0($pop188), $1 + i64.load $push189=, 656($4) + i64.store 48($4), $pop189 + i64.load $push485=, 672($4) + tee_local $push484=, $1=, $pop485 + i64.store 32($4), $pop484 + i64.store 16($4), $1 + i32.const $push368=, 16 + i32.add $push369=, $4, $pop368 + i32.store 8($4), $pop369 + i32.const $push370=, 32 + i32.add $push371=, $4, $pop370 + i32.store 4($4), $pop371 + i32.const $push372=, 48 + i32.add $push373=, $4, $pop372 + i32.store 0($4), $pop373 + i32.const $push190=, 3 + call f8@FUNCTION, $pop190, $4 + i32.const $push483=, 0 + i32.load $push191=, s2+8($pop483) + i32.const $push192=, 257 + i32.ne $push193=, $pop191, $pop192 + br_if 0, $pop193 # 0: down to label16 +# BB#24: # %if.end58 + i32.const $push492=, 0 + f64.load $push181=, s2($pop492) + f64.const $push194=, 0x1.6p7 + f64.ne $push195=, $pop181, $pop194 + br_if 0, $pop195 # 0: down to label16 +# BB#25: # %if.end63 + i32.const $push203=, 0 + i32.const $push201=, 752 + i32.add $push202=, $4, $pop201 + i32.store __stack_pointer($pop203), $pop202 + i32.const $push196=, 0 + return $pop196 +.LBB9_26: # %if.then + end_block # label16: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end9: + .size main, .Lfunc_end9-main + # -- End function + .hidden bar_arg # @bar_arg + .type bar_arg,@object + .section .bss.bar_arg,"aw",@nobits + .globl bar_arg + .p2align 2 +bar_arg: + .int32 0 # 0x0 + .size bar_arg, 4 + + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 2 +x: + .int32 0 # 0x0 + .size x, 4 + + .hidden d # @d + .type d,@object + .section .bss.d,"aw",@nobits + .globl d + .p2align 3 +d: + .int64 0 # double 0 + .size d, 8 + + .hidden s1 # @s1 + .type s1,@object + .section .bss.s1,"aw",@nobits + .globl s1 + .p2align 3 +s1: + .skip 32 + .size s1, 32 + + .hidden s2 # @s2 + .type s2,@object + .section .bss.s2,"aw",@nobits + .globl s2 + .p2align 3 +s2: + .skip 16 + .size s2, 16 + + .hidden y # @y + .type y,@object + .section .bss.y,"aw",@nobits + .globl y + .p2align 2 +y: + .int32 0 # 0x0 + .size y, 4 + + .hidden foo_arg # @foo_arg + .type foo_arg,@object + .section .bss.foo_arg,"aw",@nobits + .globl foo_arg + .p2align 2 +foo_arg: + .int32 0 # 0x0 + .size foo_arg, 4 + + .hidden gap # @gap + .type gap,@object + .section .bss.gap,"aw",@nobits + .globl gap + .p2align 2 +gap: + .int32 0 + .size gap, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/stdarg-4.c.s b/src/binaryen/test/torture-s/stdarg-4.c.s new file mode 100644 index 0000000000..f3e80636ff --- /dev/null +++ b/src/binaryen/test/torture-s/stdarg-4.c.s @@ -0,0 +1,593 @@ + .text + .file "stdarg-4.c" + .section .text.f1i,"ax",@progbits + .hidden f1i # -- Begin function f1i + .globl f1i + .type f1i,@function +f1i: # @f1i + .param i32 +# BB#0: # %entry + i32.const $push14=, 0 + i32.const $push0=, 7 + i32.add $push1=, $0, $pop0 + i32.const $push2=, -8 + i32.and $push17=, $pop1, $pop2 + tee_local $push16=, $0=, $pop17 + i32.const $push8=, 19 + i32.add $push9=, $pop16, $pop8 + i32.const $push15=, -8 + i32.and $push10=, $pop9, $pop15 + f64.load $push11=, 0($pop10) + i32.load $push3=, 8($0) + f64.load $push4=, 0($0) + i32.trunc_s/f64 $push5=, $pop4 + i32.add $push6=, $pop3, $pop5 + f64.convert_s/i32 $push7=, $pop6 + f64.add $push12=, $pop11, $pop7 + i32.trunc_s/f64 $push13=, $pop12 + i32.store x($pop14), $pop13 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f1i, .Lfunc_end0-f1i + # -- End function + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32, i32 +# BB#0: # %entry + i32.const $push16=, 0 + i32.load $push15=, __stack_pointer($pop16) + i32.const $push17=, 16 + i32.sub $push18=, $pop15, $pop17 + i32.store 12($pop18), $1 + i32.const $push14=, 0 + i32.const $push0=, 7 + i32.add $push1=, $1, $pop0 + i32.const $push2=, -8 + i32.and $push21=, $pop1, $pop2 + tee_local $push20=, $1=, $pop21 + i32.const $push8=, 19 + i32.add $push9=, $pop20, $pop8 + i32.const $push19=, -8 + i32.and $push10=, $pop9, $pop19 + f64.load $push11=, 0($pop10) + i32.load $push3=, 8($1) + f64.load $push4=, 0($1) + i32.trunc_s/f64 $push5=, $pop4 + i32.add $push6=, $pop3, $pop5 + f64.convert_s/i32 $push7=, $pop6 + f64.add $push12=, $pop11, $pop7 + i32.trunc_s/f64 $push13=, $pop12 + i32.store x($pop14), $pop13 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size f1, .Lfunc_end1-f1 + # -- End function + .section .text.f2i,"ax",@progbits + .hidden f2i # -- Begin function f2i + .globl f2i + .type f2i,@function +f2i: # @f2i + .param i32 + .local i32 +# BB#0: # %entry + i32.const $push10=, 0 + i32.const $push4=, 15 + i32.add $push5=, $0, $pop4 + i32.const $push6=, -8 + i32.and $push25=, $pop5, $pop6 + tee_local $push24=, $1=, $pop25 + f64.load $push7=, 0($pop24) + i32.load $push1=, 4($0) + i32.load $push0=, 0($0) + i32.add $push2=, $pop1, $pop0 + f64.convert_s/i32 $push3=, $pop2 + f64.add $push8=, $pop7, $pop3 + i32.trunc_s/f64 $push9=, $pop8 + i32.store y($pop10), $pop9 + i32.const $push23=, 0 + i32.const $push16=, 27 + i32.add $push17=, $1, $pop16 + i32.const $push22=, -8 + i32.and $push18=, $pop17, $pop22 + f64.load $push19=, 0($pop18) + i32.load $push11=, 16($1) + f64.load $push12=, 8($1) + i32.trunc_s/f64 $push13=, $pop12 + i32.add $push14=, $pop11, $pop13 + f64.convert_s/i32 $push15=, $pop14 + f64.add $push20=, $pop19, $pop15 + i32.trunc_s/f64 $push21=, $pop20 + i32.store x($pop23), $pop21 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size f2i, .Lfunc_end2-f2i + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push23=, 0 + i32.load $push22=, __stack_pointer($pop23) + i32.const $push24=, 16 + i32.sub $push25=, $pop22, $pop24 + i32.store 12($pop25), $1 + i32.const $push10=, 0 + i32.const $push4=, 15 + i32.add $push5=, $1, $pop4 + i32.const $push6=, -8 + i32.and $push29=, $pop5, $pop6 + tee_local $push28=, $2=, $pop29 + f64.load $push7=, 0($pop28) + i32.load $push1=, 4($1) + i32.load $push0=, 0($1) + i32.add $push2=, $pop1, $pop0 + f64.convert_s/i32 $push3=, $pop2 + f64.add $push8=, $pop7, $pop3 + i32.trunc_s/f64 $push9=, $pop8 + i32.store y($pop10), $pop9 + i32.const $push27=, 0 + i32.const $push16=, 27 + i32.add $push17=, $2, $pop16 + i32.const $push26=, -8 + i32.and $push18=, $pop17, $pop26 + f64.load $push19=, 0($pop18) + i32.load $push11=, 16($2) + f64.load $push12=, 8($2) + i32.trunc_s/f64 $push13=, $pop12 + i32.add $push14=, $pop11, $pop13 + f64.convert_s/i32 $push15=, $pop14 + f64.add $push20=, $pop19, $pop15 + i32.trunc_s/f64 $push21=, $pop20 + i32.store x($pop27), $pop21 + # fallthrough-return + .endfunc +.Lfunc_end3: + .size f2, .Lfunc_end3-f2 + # -- End function + .section .text.f3h,"ax",@progbits + .hidden f3h # -- Begin function f3h + .globl f3h + .type f3h,@function +f3h: # @f3h + .param i32, i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + i32.add $push0=, $1, $0 + i32.add $push1=, $pop0, $2 + i32.add $push2=, $pop1, $3 + i32.add $push3=, $pop2, $4 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end4: + .size f3h, .Lfunc_end4-f3h + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push35=, 0 + i32.const $push33=, 0 + i32.load $push32=, __stack_pointer($pop33) + i32.const $push34=, 16 + i32.sub $push40=, $pop32, $pop34 + tee_local $push39=, $2=, $pop40 + i32.store __stack_pointer($pop35), $pop39 + i32.store 12($2), $1 + block + i32.const $push0=, 4 + i32.gt_u $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %entry + i32.const $1=, 0 + block + block + block + block + block + br_table $0, 4, 0, 2, 3, 1, 4 # 4: down to label1 + # 0: down to label5 + # 2: down to label3 + # 3: down to label2 + # 1: down to label4 +.LBB5_2: # %sw.bb2 + end_block # label5: + i32.load $push42=, 12($2) + tee_local $push41=, $0=, $pop42 + i32.const $push28=, 4 + i32.add $push29=, $pop41, $pop28 + i32.store 12($2), $pop29 + i32.load $push30=, 0($0) + i32.const $push31=, 1 + i32.add $1=, $pop30, $pop31 + br 3 # 3: down to label1 +.LBB5_3: # %sw.bb18 + end_block # label4: + i32.load $push45=, 12($2) + tee_local $push44=, $0=, $pop45 + i32.const $push2=, 4 + i32.add $push3=, $pop44, $pop2 + i32.store 12($2), $pop3 + i32.load $1=, 0($0) + i32.const $push4=, 16 + i32.add $push5=, $0, $pop4 + i32.store 12($2), $pop5 + i32.load $push6=, 4($0) + i32.add $push7=, $1, $pop6 + i32.load $push8=, 8($0) + i32.add $push9=, $pop7, $pop8 + i32.load $push10=, 12($0) + i32.add $push11=, $pop9, $pop10 + i32.const $push43=, 4 + i32.add $1=, $pop11, $pop43 + br 2 # 2: down to label1 +.LBB5_4: # %sw.bb4 + end_block # label3: + i32.load $push47=, 12($2) + tee_local $push46=, $0=, $pop47 + i32.const $push21=, 4 + i32.add $push22=, $pop46, $pop21 + i32.store 12($2), $pop22 + i32.load $1=, 0($0) + i32.const $push23=, 8 + i32.add $push24=, $0, $pop23 + i32.store 12($2), $pop24 + i32.load $push25=, 4($0) + i32.add $push26=, $1, $pop25 + i32.const $push27=, 2 + i32.add $1=, $pop26, $pop27 + br 1 # 1: down to label1 +.LBB5_5: # %sw.bb10 + end_block # label2: + i32.load $push49=, 12($2) + tee_local $push48=, $0=, $pop49 + i32.const $push12=, 4 + i32.add $push13=, $pop48, $pop12 + i32.store 12($2), $pop13 + i32.load $1=, 0($0) + i32.const $push14=, 12 + i32.add $push15=, $0, $pop14 + i32.store 12($2), $pop15 + i32.load $push16=, 4($0) + i32.add $push17=, $1, $pop16 + i32.load $push18=, 8($0) + i32.add $push19=, $pop17, $pop18 + i32.const $push20=, 3 + i32.add $1=, $pop19, $pop20 +.LBB5_6: # %sw.epilog + end_block # label1: + i32.const $push38=, 0 + i32.const $push36=, 16 + i32.add $push37=, $2, $pop36 + i32.store __stack_pointer($pop38), $pop37 + return $1 +.LBB5_7: # %sw.default + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end5: + .size f3, .Lfunc_end5-f3 + # -- End function + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 + .param i32, i32 + .local i32, f64, i32 +# BB#0: # %entry + i32.const $push37=, 0 + i32.const $push35=, 0 + i32.load $push34=, __stack_pointer($pop35) + i32.const $push36=, 16 + i32.sub $push42=, $pop34, $pop36 + tee_local $push41=, $4=, $pop42 + i32.store __stack_pointer($pop37), $pop41 + i32.store 12($4), $1 + block + block + block + i32.const $push0=, 5 + i32.eq $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label8 +# BB#1: # %entry + i32.const $push2=, 4 + i32.ne $push3=, $0, $pop2 + br_if 2, $pop3 # 2: down to label6 +# BB#2: # %sw.bb + i32.load $push14=, 12($4) + i32.const $push13=, 7 + i32.add $push15=, $pop14, $pop13 + i32.const $push16=, -8 + i32.and $push46=, $pop15, $pop16 + tee_local $push45=, $1=, $pop46 + i32.const $push17=, 8 + i32.add $push44=, $pop45, $pop17 + tee_local $push43=, $0=, $pop44 + i32.store 12($4), $pop43 + f64.load $3=, 0($1) + br 1 # 1: down to label7 +.LBB6_3: # %sw.bb2 + end_block # label8: + i32.const $push9=, 0 + i32.load $push5=, 12($4) + i32.const $push4=, 7 + i32.add $push6=, $pop5, $pop4 + i32.const $push7=, -8 + i32.and $push52=, $pop6, $pop7 + tee_local $push51=, $1=, $pop52 + f64.load $push8=, 0($pop51) + i32.trunc_s/f64 $push50=, $pop8 + tee_local $push49=, $2=, $pop50 + i32.store y($pop9), $pop49 + i32.const $push10=, 16 + i32.add $push48=, $1, $pop10 + tee_local $push47=, $0=, $pop48 + i32.store 12($4), $pop47 + f64.load $push11=, 8($1) + f64.convert_s/i32 $push12=, $2 + f64.add $3=, $pop11, $pop12 +.LBB6_4: # %sw.epilog + end_block # label7: + i32.const $push19=, 0 + i32.trunc_s/f64 $push18=, $3 + i32.store y($pop19), $pop18 + i32.const $push56=, 0 + i32.const $push20=, 7 + i32.add $push21=, $0, $pop20 + i32.const $push22=, -8 + i32.and $push55=, $pop21, $pop22 + tee_local $push54=, $0=, $pop55 + i32.const $push28=, 19 + i32.add $push29=, $pop54, $pop28 + i32.const $push53=, -8 + i32.and $push30=, $pop29, $pop53 + f64.load $push31=, 0($pop30) + i32.load $push23=, 8($0) + f64.load $push24=, 0($0) + i32.trunc_s/f64 $push25=, $pop24 + i32.add $push26=, $pop23, $pop25 + f64.convert_s/i32 $push27=, $pop26 + f64.add $push32=, $pop31, $pop27 + i32.trunc_s/f64 $push33=, $pop32 + i32.store x($pop56), $pop33 + i32.const $push40=, 0 + i32.const $push38=, 16 + i32.add $push39=, $4, $pop38 + i32.store __stack_pointer($pop40), $pop39 + return +.LBB6_5: # %sw.default + end_block # label6: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end6: + .size f4, .Lfunc_end6-f4 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push79=, 0 + i32.const $push77=, 0 + i32.load $push76=, __stack_pointer($pop77) + i32.const $push78=, 224 + i32.sub $push106=, $pop76, $pop78 + tee_local $push105=, $0=, $pop106 + i32.store __stack_pointer($pop79), $pop105 + i32.const $push83=, 192 + i32.add $push84=, $0, $pop83 + i32.const $push104=, 16 + i32.add $push0=, $pop84, $pop104 + i64.const $push1=, 4629700416936869888 + i64.store 0($pop0), $pop1 + i32.const $push2=, 128 + i32.store 200($0), $pop2 + i64.const $push3=, 4625196817309499392 + i64.store 192($0), $pop3 + i32.const $push85=, 192 + i32.add $push86=, $0, $pop85 + call f1@FUNCTION, $0, $pop86 + block + i32.const $push103=, 0 + i32.load $push4=, x($pop103) + i32.const $push5=, 176 + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label9 +# BB#1: # %if.end + i32.const $push8=, 176 + i32.add $push9=, $0, $pop8 + i64.const $push10=, 4634204016564240384 + i64.store 0($pop9), $pop10 + i32.const $push11=, 168 + i32.add $push12=, $0, $pop11 + i32.const $push13=, 17 + i32.store 0($pop12), $pop13 + i32.const $push87=, 144 + i32.add $push88=, $0, $pop87 + i32.const $push108=, 16 + i32.add $push14=, $pop88, $pop108 + i64.const $push15=, 4626041242239631360 + i64.store 0($pop14), $pop15 + i64.const $push16=, 4625759767262920704 + i64.store 152($0), $pop16 + i64.const $push17=, 30064771077 + i64.store 144($0), $pop17 + i32.const $push89=, 144 + i32.add $push90=, $0, $pop89 + call f2@FUNCTION, $0, $pop90 + i32.const $push107=, 0 + i32.load $push18=, x($pop107) + i32.const $push19=, 100 + i32.ne $push20=, $pop18, $pop19 + br_if 0, $pop20 # 0: down to label9 +# BB#2: # %if.end + i32.const $push109=, 0 + i32.load $push7=, y($pop109) + i32.const $push21=, 30 + i32.ne $push22=, $pop7, $pop21 + br_if 0, $pop22 # 0: down to label9 +# BB#3: # %if.end4 + i32.const $push23=, 0 + i32.const $push110=, 0 + i32.call $push24=, f3@FUNCTION, $pop23, $pop110 + br_if 0, $pop24 # 0: down to label9 +# BB#4: # %if.end7 + i32.const $push25=, 18 + i32.store 128($0), $pop25 + i32.const $push26=, 1 + i32.const $push91=, 128 + i32.add $push92=, $0, $pop91 + i32.call $push27=, f3@FUNCTION, $pop26, $pop92 + i32.const $push28=, 19 + i32.ne $push29=, $pop27, $pop28 + br_if 0, $pop29 # 0: down to label9 +# BB#5: # %if.end11 + i64.const $push111=, 429496729618 + i64.store 112($0), $pop111 + i32.const $push30=, 2 + i32.const $push93=, 112 + i32.add $push94=, $0, $pop93 + i32.call $push31=, f3@FUNCTION, $pop30, $pop94 + i32.const $push32=, 120 + i32.ne $push33=, $pop31, $pop32 + br_if 0, $pop33 # 0: down to label9 +# BB#6: # %if.end15 + i32.const $push34=, 300 + i32.store 104($0), $pop34 + i64.const $push112=, 429496729618 + i64.store 96($0), $pop112 + i32.const $push35=, 3 + i32.const $push95=, 96 + i32.add $push96=, $0, $pop95 + i32.call $push36=, f3@FUNCTION, $pop35, $pop96 + i32.const $push37=, 421 + i32.ne $push38=, $pop36, $pop37 + br_if 0, $pop38 # 0: down to label9 +# BB#7: # %if.end19 + i64.const $push39=, 369367187520 + i64.store 88($0), $pop39 + i64.const $push40=, 304942678034 + i64.store 80($0), $pop40 + i32.const $push113=, 4 + i32.const $push97=, 80 + i32.add $push98=, $0, $pop97 + i32.call $push41=, f3@FUNCTION, $pop113, $pop98 + i32.const $push42=, 243 + i32.ne $push43=, $pop41, $pop42 + br_if 0, $pop43 # 0: down to label9 +# BB#8: # %if.end23 + i32.const $push45=, 72 + i32.add $push46=, $0, $pop45 + i64.const $push47=, 4625759767262920704 + i64.store 0($pop46), $pop47 + i32.const $push99=, 48 + i32.add $push100=, $0, $pop99 + i32.const $push48=, 16 + i32.add $push49=, $pop100, $pop48 + i32.const $push116=, 16 + i32.store 0($pop49), $pop116 + i64.const $push50=, 4621256167635550208 + i64.store 56($0), $pop50 + i64.const $push51=, 4618441417868443648 + i64.store 48($0), $pop51 + i32.const $push115=, 4 + i32.const $push101=, 48 + i32.add $push102=, $0, $pop101 + call f4@FUNCTION, $pop115, $pop102 + i32.const $push114=, 0 + i32.load $push52=, x($pop114) + i32.const $push53=, 43 + i32.ne $push54=, $pop52, $pop53 + br_if 0, $pop54 # 0: down to label9 +# BB#9: # %if.end23 + i32.const $push117=, 0 + i32.load $push44=, y($pop117) + i32.const $push55=, 6 + i32.ne $push56=, $pop44, $pop55 + br_if 0, $pop56 # 0: down to label9 +# BB#10: # %if.end28 + i32.const $push58=, 32 + i32.add $push59=, $0, $pop58 + i64.const $push60=, 4638566878703255552 + i64.store 0($pop59), $pop60 + i32.const $push61=, 24 + i32.add $push62=, $0, $pop61 + i32.const $push63=, 17 + i32.store 0($pop62), $pop63 + i32.const $push64=, 16 + i32.add $push65=, $0, $pop64 + i64.const $push66=, 4607182418800017408 + i64.store 0($pop65), $pop66 + i64.const $push67=, 4626604192193052672 + i64.store 8($0), $pop67 + i64.const $push68=, 4619567317775286272 + i64.store 0($0), $pop68 + i32.const $push69=, 5 + call f4@FUNCTION, $pop69, $0 + i32.const $push118=, 0 + i32.load $push70=, x($pop118) + i32.const $push71=, 144 + i32.ne $push72=, $pop70, $pop71 + br_if 0, $pop72 # 0: down to label9 +# BB#11: # %if.end28 + i32.const $push119=, 0 + i32.load $push57=, y($pop119) + i32.const $push73=, 28 + i32.ne $push74=, $pop57, $pop73 + br_if 0, $pop74 # 0: down to label9 +# BB#12: # %if.end33 + i32.const $push82=, 0 + i32.const $push80=, 224 + i32.add $push81=, $0, $pop80 + i32.store __stack_pointer($pop82), $pop81 + i32.const $push75=, 0 + return $pop75 +.LBB7_13: # %if.then + end_block # label9: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end7: + .size main, .Lfunc_end7-main + # -- End function + .hidden x # @x + .type x,@object + .section .bss.x,"aw",@nobits + .globl x + .p2align 2 +x: + .int32 0 # 0x0 + .size x, 4 + + .hidden y # @y + .type y,@object + .section .bss.y,"aw",@nobits + .globl y + .p2align 2 +y: + .int32 0 # 0x0 + .size y, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/strcmp-1.c.s b/src/binaryen/test/torture-s/strcmp-1.c.s new file mode 100644 index 0000000000..1f7036bbc3 --- /dev/null +++ b/src/binaryen/test/torture-s/strcmp-1.c.s @@ -0,0 +1,295 @@ + .text + .file "strcmp-1.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32, i32, i32 +# BB#0: # %entry + i32.call $0=, strcmp@FUNCTION, $0, $1 + block + block + i32.const $push0=, -1 + i32.gt_s $push1=, $2, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %entry + i32.const $push2=, 0 + i32.ge_s $push3=, $0, $pop2 + br_if 1, $pop3 # 1: down to label0 +.LBB0_2: # %if.else + end_block # label1: + block + br_if 0, $2 # 0: down to label2 +# BB#3: # %if.else + br_if 1, $0 # 1: down to label0 +.LBB0_4: # %if.else6 + end_block # label2: + block + i32.const $push4=, 1 + i32.lt_s $push5=, $2, $pop4 + br_if 0, $pop5 # 0: down to label3 +# BB#5: # %if.else6 + i32.const $push6=, 0 + i32.le_s $push7=, $0, $pop6 + br_if 1, $pop7 # 1: down to label0 +.LBB0_6: # %if.end12 + end_block # label3: + return +.LBB0_7: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $0=, 0 + i32.const $1=, u1 +.LBB1_1: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB1_2 Depth 2 + # Child Loop BB1_3 Depth 3 + block + loop # label5: + i32.const $2=, 0 + i32.const $3=, u2 +.LBB1_2: # %for.body3 + # Parent Loop BB1_1 Depth=1 + # => This Loop Header: Depth=2 + # Child Loop BB1_3 Depth 3 + loop # label6: + i32.const $4=, 0 +.LBB1_3: # %for.body6 + # Parent Loop BB1_1 Depth=1 + # Parent Loop BB1_2 Depth=2 + # => This Inner Loop Header: Depth=3 + loop # label7: + block + block + block + br_if 0, $0 # 0: down to label10 +# BB#4: # in Loop: Header=BB1_3 Depth=3 + i32.const $5=, u1 + i32.const $push25=, u1 + copy_local $6=, $pop25 + br_if 1, $4 # 1: down to label9 + br 2 # 2: down to label8 +.LBB1_5: # %for.body9.lr.ph + # in Loop: Header=BB1_3 Depth=3 + end_block # label10: + i32.const $push30=, u1 + i32.const $push29=, 0 + i32.call $drop=, memset@FUNCTION, $pop30, $pop29, $0 + copy_local $push28=, $1 + tee_local $push27=, $5=, $pop28 + copy_local $6=, $pop27 + i32.eqz $push83=, $4 + br_if 1, $pop83 # 1: down to label8 +.LBB1_6: # %for.body12.lr.ph + # in Loop: Header=BB1_3 Depth=3 + end_block # label9: + i32.const $push31=, 97 + i32.call $push0=, memset@FUNCTION, $5, $pop31, $4 + i32.add $6=, $pop0, $4 +.LBB1_7: # %for.end16 + # in Loop: Header=BB1_3 Depth=3 + end_block # label8: + i64.const $push34=, 8680820740569200760 + i64.store 0($6):p2align=0, $pop34 + i32.const $push33=, 8 + i32.add $push2=, $6, $pop33 + i32.const $push32=, 30840 + i32.store16 0($pop2):p2align=0, $pop32 + block + block + block + br_if 0, $2 # 0: down to label13 +# BB#8: # in Loop: Header=BB1_3 Depth=3 + i32.const $7=, u2 + i32.const $push26=, u2 + copy_local $8=, $pop26 + br_if 1, $4 # 1: down to label12 + br 2 # 2: down to label11 +.LBB1_9: # %for.body26.lr.ph + # in Loop: Header=BB1_3 Depth=3 + end_block # label13: + i32.const $push38=, u2 + i32.const $push37=, 0 + i32.call $drop=, memset@FUNCTION, $pop38, $pop37, $2 + copy_local $push36=, $3 + tee_local $push35=, $7=, $pop36 + copy_local $8=, $pop35 + i32.eqz $push84=, $4 + br_if 1, $pop84 # 1: down to label11 +.LBB1_10: # %for.body33.lr.ph + # in Loop: Header=BB1_3 Depth=3 + end_block # label12: + i32.const $push39=, 97 + i32.call $push1=, memset@FUNCTION, $7, $pop39, $4 + i32.add $8=, $pop1, $4 +.LBB1_11: # %for.end37 + # in Loop: Header=BB1_3 Depth=3 + end_block # label11: + i64.const $push44=, 8680820740569200760 + i64.store 1($8):p2align=0, $pop44 + i32.const $push43=, 9 + i32.add $push3=, $8, $pop43 + i32.const $push42=, 120 + i32.store8 0($pop3), $pop42 + i32.const $push41=, 0 + i32.store8 0($6), $pop41 + i32.const $push40=, 0 + i32.store8 0($8), $pop40 + i32.call $push4=, strcmp@FUNCTION, $5, $7 + br_if 3, $pop4 # 3: down to label4 +# BB#12: # %test.exit + # in Loop: Header=BB1_3 Depth=3 + i32.const $push47=, 97 + i32.store16 0($6):p2align=0, $pop47 + i32.const $push46=, 0 + i32.store8 0($8), $pop46 + i32.call $push5=, strcmp@FUNCTION, $5, $7 + i32.const $push45=, 0 + i32.le_s $push6=, $pop5, $pop45 + br_if 3, $pop6 # 3: down to label4 +# BB#13: # %test.exit157 + # in Loop: Header=BB1_3 Depth=3 + i32.const $push50=, 0 + i32.store8 0($6), $pop50 + i32.const $push49=, 97 + i32.store16 0($8):p2align=0, $pop49 + i32.call $push7=, strcmp@FUNCTION, $5, $7 + i32.const $push48=, 0 + i32.ge_s $push8=, $pop7, $pop48 + br_if 3, $pop8 # 3: down to label4 +# BB#14: # %test.exit162 + # in Loop: Header=BB1_3 Depth=3 + i32.const $push53=, 98 + i32.store16 0($6):p2align=0, $pop53 + i32.const $push52=, 99 + i32.store16 0($8):p2align=0, $pop52 + i32.call $push9=, strcmp@FUNCTION, $5, $7 + i32.const $push51=, 0 + i32.ge_s $push10=, $pop9, $pop51 + br_if 3, $pop10 # 3: down to label4 +# BB#15: # %test.exit168 + # in Loop: Header=BB1_3 Depth=3 + i32.const $push56=, 99 + i32.store16 0($6):p2align=0, $pop56 + i32.const $push55=, 98 + i32.store16 0($8):p2align=0, $pop55 + i32.call $push11=, strcmp@FUNCTION, $5, $7 + i32.const $push54=, 0 + i32.le_s $push12=, $pop11, $pop54 + br_if 3, $pop12 # 3: down to label4 +# BB#16: # %test.exit174 + # in Loop: Header=BB1_3 Depth=3 + i32.const $push59=, 98 + i32.store16 0($6):p2align=0, $pop59 + i32.const $push58=, 169 + i32.store16 0($8):p2align=0, $pop58 + i32.call $push13=, strcmp@FUNCTION, $5, $7 + i32.const $push57=, 0 + i32.ge_s $push14=, $pop13, $pop57 + br_if 3, $pop14 # 3: down to label4 +# BB#17: # %test.exit180 + # in Loop: Header=BB1_3 Depth=3 + i32.const $push62=, 169 + i32.store16 0($6):p2align=0, $pop62 + i32.const $push61=, 98 + i32.store16 0($8):p2align=0, $pop61 + i32.call $push15=, strcmp@FUNCTION, $5, $7 + i32.const $push60=, 0 + i32.le_s $push16=, $pop15, $pop60 + br_if 3, $pop16 # 3: down to label4 +# BB#18: # %test.exit186 + # in Loop: Header=BB1_3 Depth=3 + i32.const $push65=, 169 + i32.store16 0($6):p2align=0, $pop65 + i32.const $push64=, 170 + i32.store16 0($8):p2align=0, $pop64 + i32.call $push17=, strcmp@FUNCTION, $5, $7 + i32.const $push63=, 0 + i32.ge_s $push18=, $pop17, $pop63 + br_if 3, $pop18 # 3: down to label4 +# BB#19: # %test.exit192 + # in Loop: Header=BB1_3 Depth=3 + i32.const $push68=, 170 + i32.store16 0($6):p2align=0, $pop68 + i32.const $push67=, 169 + i32.store16 0($8):p2align=0, $pop67 + i32.call $push19=, strcmp@FUNCTION, $5, $7 + i32.const $push66=, 0 + i32.le_s $push20=, $pop19, $pop66 + br_if 3, $pop20 # 3: down to label4 +# BB#20: # %for.cond4 + # in Loop: Header=BB1_3 Depth=3 + i32.const $push72=, 1 + i32.add $push71=, $4, $pop72 + tee_local $push70=, $4=, $pop71 + i32.const $push69=, 63 + i32.le_u $push21=, $pop70, $pop69 + br_if 0, $pop21 # 0: up to label7 +# BB#21: # %for.inc79 + # in Loop: Header=BB1_2 Depth=2 + end_loop + i32.const $push77=, 1 + i32.add $3=, $3, $pop77 + i32.const $push76=, 1 + i32.add $push75=, $2, $pop76 + tee_local $push74=, $2=, $pop75 + i32.const $push73=, 8 + i32.lt_u $push22=, $pop74, $pop73 + br_if 0, $pop22 # 0: up to label6 +# BB#22: # %for.inc82 + # in Loop: Header=BB1_1 Depth=1 + end_loop + i32.const $push82=, 1 + i32.add $1=, $1, $pop82 + i32.const $push81=, 1 + i32.add $push80=, $0, $pop81 + tee_local $push79=, $0=, $pop80 + i32.const $push78=, 8 + i32.lt_u $push23=, $pop79, $pop78 + br_if 0, $pop23 # 0: up to label5 +# BB#23: # %for.end84 + end_loop + i32.const $push24=, 0 + call exit@FUNCTION, $pop24 + unreachable +.LBB1_24: # %if.then5.i + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type u1,@object # @u1 + .section .bss.u1,"aw",@nobits + .p2align 4 +u1: + .skip 96 + .size u1, 96 + + .type u2,@object # @u2 + .section .bss.u2,"aw",@nobits + .p2align 4 +u2: + .skip 96 + .size u2, 96 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strcmp, i32, i32, i32 + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/strcpy-1.c.s b/src/binaryen/test/torture-s/strcpy-1.c.s new file mode 100644 index 0000000000..41a0f9397d --- /dev/null +++ b/src/binaryen/test/torture-s/strcpy-1.c.s @@ -0,0 +1,284 @@ + .text + .file "strcpy-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $0=, 0 +.LBB0_1: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB0_2 Depth 2 + # Child Loop BB0_3 Depth 3 + # Child Loop BB0_4 Depth 4 + # Child Loop BB0_8 Depth 4 + # Child Loop BB0_13 Depth 4 + block + loop # label1: + i32.const $push49=, u1 + i32.add $1=, $0, $pop49 + i32.const $2=, 0 +.LBB0_2: # %for.body3 + # Parent Loop BB0_1 Depth=1 + # => This Loop Header: Depth=2 + # Child Loop BB0_3 Depth 3 + # Child Loop BB0_4 Depth 4 + # Child Loop BB0_8 Depth 4 + # Child Loop BB0_13 Depth 4 + loop # label2: + i32.const $push51=, 65 + i32.add $4=, $2, $pop51 + i32.const $push50=, u2 + i32.add $3=, $2, $pop50 + i32.const $5=, 1 +.LBB0_3: # %for.body6 + # Parent Loop BB0_1 Depth=1 + # Parent Loop BB0_2 Depth=2 + # => This Loop Header: Depth=3 + # Child Loop BB0_4 Depth 4 + # Child Loop BB0_8 Depth 4 + # Child Loop BB0_13 Depth 4 + loop # label3: + i32.const $push54=, u1 + i32.const $push53=, 97 + i32.const $push52=, 97 + i32.call $7=, memset@FUNCTION, $pop54, $pop53, $pop52 + i32.const $8=, 65 + i32.const $6=, -97 +.LBB0_4: # %for.body9 + # Parent Loop BB0_1 Depth=1 + # Parent Loop BB0_2 Depth=2 + # Parent Loop BB0_3 Depth=3 + # => This Inner Loop Header: Depth=4 + loop # label4: + i32.const $push65=, u2+97 + i32.add $push3=, $6, $pop65 + i32.const $push64=, 65 + i32.const $push63=, 24 + i32.shl $push0=, $8, $pop63 + i32.const $push62=, 24 + i32.shr_s $push1=, $pop0, $pop62 + i32.const $push61=, 95 + i32.gt_s $push2=, $pop1, $pop61 + i32.select $push60=, $pop64, $8, $pop2 + tee_local $push59=, $8=, $pop60 + i32.store8 0($pop3), $pop59 + i32.const $push58=, 1 + i32.add $8=, $8, $pop58 + i32.const $push57=, 1 + i32.add $push56=, $6, $pop57 + tee_local $push55=, $6=, $pop56 + br_if 0, $pop55 # 0: up to label4 +# BB#5: # %for.end + # in Loop: Header=BB0_3 Depth=3 + end_loop + i32.add $push4=, $5, $2 + i32.const $push67=, u2 + i32.add $push5=, $pop4, $pop67 + i32.const $push66=, 0 + i32.store8 0($pop5), $pop66 + i32.call $push6=, strcpy@FUNCTION, $1, $3 + i32.ne $push7=, $pop6, $1 + br_if 3, $pop7 # 3: down to label0 +# BB#6: # %if.end20 + # in Loop: Header=BB0_3 Depth=3 + block + block + i32.eqz $push113=, $0 + br_if 0, $pop113 # 0: down to label6 +# BB#7: # %for.body24.preheader + # in Loop: Header=BB0_3 Depth=3 + i32.const $8=, 0 +.LBB0_8: # %for.body24 + # Parent Loop BB0_1 Depth=1 + # Parent Loop BB0_2 Depth=2 + # Parent Loop BB0_3 Depth=3 + # => This Inner Loop Header: Depth=4 + loop # label7: + i32.add $push8=, $8, $7 + i32.load8_u $push9=, 0($pop8) + i32.const $push68=, 97 + i32.ne $push10=, $pop9, $pop68 + br_if 6, $pop10 # 6: down to label0 +# BB#9: # %for.inc30 + # in Loop: Header=BB0_8 Depth=4 + i32.const $push71=, 1 + i32.add $push70=, $8, $pop71 + tee_local $push69=, $8=, $pop70 + i32.lt_u $push11=, $pop69, $0 + br_if 0, $pop11 # 0: up to label7 +# BB#10: # %for.body38.preheader.loopexit + # in Loop: Header=BB0_3 Depth=3 + end_loop + i32.add $7=, $8, $7 + br 1 # 1: down to label5 +.LBB0_11: # in Loop: Header=BB0_3 Depth=3 + end_block # label6: + i32.const $7=, u1 +.LBB0_12: # %for.body38.preheader + # in Loop: Header=BB0_3 Depth=3 + end_block # label5: + i32.const $8=, 0 + copy_local $6=, $4 +.LBB0_13: # %for.body38 + # Parent Loop BB0_1 Depth=1 + # Parent Loop BB0_2 Depth=2 + # Parent Loop BB0_3 Depth=3 + # => This Inner Loop Header: Depth=4 + loop # label8: + i32.add $push16=, $7, $8 + i32.load8_u $push17=, 0($pop16) + i32.const $push78=, 65 + i32.const $push77=, 24 + i32.shl $push12=, $6, $pop77 + i32.const $push76=, 24 + i32.shr_s $push13=, $pop12, $pop76 + i32.const $push75=, 95 + i32.gt_s $push14=, $pop13, $pop75 + i32.select $push74=, $pop78, $6, $pop14 + tee_local $push73=, $6=, $pop74 + i32.const $push72=, 255 + i32.and $push15=, $pop73, $pop72 + i32.ne $push18=, $pop17, $pop15 + br_if 4, $pop18 # 4: down to label0 +# BB#14: # %for.inc50 + # in Loop: Header=BB0_13 Depth=4 + i32.const $push82=, 1 + i32.add $6=, $6, $pop82 + i32.const $push81=, 1 + i32.add $push80=, $8, $pop81 + tee_local $push79=, $8=, $pop80 + i32.lt_u $push19=, $pop79, $5 + br_if 0, $pop19 # 0: up to label8 +# BB#15: # %for.end54 + # in Loop: Header=BB0_3 Depth=3 + end_loop + i32.add $push84=, $7, $8 + tee_local $push83=, $8=, $pop84 + i32.load8_u $push20=, 0($pop83) + br_if 3, $pop20 # 3: down to label0 +# BB#16: # %if.end60 + # in Loop: Header=BB0_3 Depth=3 + i32.const $push86=, 1 + i32.add $push21=, $8, $pop86 + i32.load8_u $push22=, 0($pop21) + i32.const $push85=, 97 + i32.ne $push23=, $pop22, $pop85 + br_if 3, $pop23 # 3: down to label0 +# BB#17: # %for.cond61 + # in Loop: Header=BB0_3 Depth=3 + i32.const $push88=, 2 + i32.add $push24=, $8, $pop88 + i32.load8_u $push25=, 0($pop24) + i32.const $push87=, 97 + i32.ne $push26=, $pop25, $pop87 + br_if 3, $pop26 # 3: down to label0 +# BB#18: # %for.cond61.1 + # in Loop: Header=BB0_3 Depth=3 + i32.const $push90=, 3 + i32.add $push27=, $8, $pop90 + i32.load8_u $push28=, 0($pop27) + i32.const $push89=, 97 + i32.ne $push29=, $pop28, $pop89 + br_if 3, $pop29 # 3: down to label0 +# BB#19: # %for.cond61.2 + # in Loop: Header=BB0_3 Depth=3 + i32.const $push92=, 4 + i32.add $push30=, $8, $pop92 + i32.load8_u $push31=, 0($pop30) + i32.const $push91=, 97 + i32.ne $push32=, $pop31, $pop91 + br_if 3, $pop32 # 3: down to label0 +# BB#20: # %for.cond61.3 + # in Loop: Header=BB0_3 Depth=3 + i32.const $push94=, 5 + i32.add $push33=, $8, $pop94 + i32.load8_u $push34=, 0($pop33) + i32.const $push93=, 97 + i32.ne $push35=, $pop34, $pop93 + br_if 3, $pop35 # 3: down to label0 +# BB#21: # %for.cond61.4 + # in Loop: Header=BB0_3 Depth=3 + i32.const $push96=, 6 + i32.add $push36=, $8, $pop96 + i32.load8_u $push37=, 0($pop36) + i32.const $push95=, 97 + i32.ne $push38=, $pop37, $pop95 + br_if 3, $pop38 # 3: down to label0 +# BB#22: # %for.cond61.5 + # in Loop: Header=BB0_3 Depth=3 + i32.const $push98=, 7 + i32.add $push39=, $8, $pop98 + i32.load8_u $push40=, 0($pop39) + i32.const $push97=, 97 + i32.ne $push41=, $pop40, $pop97 + br_if 3, $pop41 # 3: down to label0 +# BB#23: # %for.cond61.6 + # in Loop: Header=BB0_3 Depth=3 + i32.const $push100=, 8 + i32.add $push42=, $8, $pop100 + i32.load8_u $push43=, 0($pop42) + i32.const $push99=, 97 + i32.ne $push44=, $pop43, $pop99 + br_if 3, $pop44 # 3: down to label0 +# BB#24: # %for.cond61.7 + # in Loop: Header=BB0_3 Depth=3 + i32.const $push104=, 1 + i32.add $push103=, $5, $pop104 + tee_local $push102=, $5=, $pop103 + i32.const $push101=, 80 + i32.lt_u $push45=, $pop102, $pop101 + br_if 0, $pop45 # 0: up to label3 +# BB#25: # %for.inc77 + # in Loop: Header=BB0_2 Depth=2 + end_loop + i32.const $push108=, 1 + i32.add $push107=, $2, $pop108 + tee_local $push106=, $2=, $pop107 + i32.const $push105=, 8 + i32.lt_u $push46=, $pop106, $pop105 + br_if 0, $pop46 # 0: up to label2 +# BB#26: # %for.inc80 + # in Loop: Header=BB0_1 Depth=1 + end_loop + i32.const $push112=, 1 + i32.add $push111=, $0, $pop112 + tee_local $push110=, $0=, $pop111 + i32.const $push109=, 8 + i32.lt_u $push47=, $pop110, $pop109 + br_if 0, $pop47 # 0: up to label1 +# BB#27: # %for.end82 + end_loop + i32.const $push48=, 0 + call exit@FUNCTION, $pop48 + unreachable +.LBB0_28: # %if.then19 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type u1,@object # @u1 + .section .bss.u1,"aw",@nobits + .p2align 4 +u1: + .skip 112 + .size u1, 112 + + .type u2,@object # @u2 + .section .bss.u2,"aw",@nobits + .p2align 4 +u2: + .skip 112 + .size u2, 112 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strcpy, i32, i32, i32 + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/strct-pack-1.c.s b/src/binaryen/test/torture-s/strct-pack-1.c.s new file mode 100644 index 0000000000..efc34d8036 --- /dev/null +++ b/src/binaryen/test/torture-s/strct-pack-1.c.s @@ -0,0 +1,50 @@ + .text + .file "strct-pack-1.c" + .section .text.check,"ax",@progbits + .hidden check # -- Begin function check + .globl check + .type check,@function +check: # @check + .param i32 + .result i32 +# BB#0: # %entry + block + block + i32.load16_u $push0=, 0($0) + i32.const $push6=, 1 + i32.ne $push1=, $pop0, $pop6 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %lor.lhs.false + f64.load $push2=, 2($0):p2align=1 + f64.const $push3=, 0x1p4 + f64.eq $push4=, $pop2, $pop3 + br_if 1, $pop4 # 1: down to label0 +.LBB0_2: # %return + end_block # label1: + i32.const $push7=, 1 + return $pop7 +.LBB0_3: # %if.end + end_block # label0: + i32.const $push5=, 0 + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size check, .Lfunc_end0-check + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/strct-pack-2.c.s b/src/binaryen/test/torture-s/strct-pack-2.c.s new file mode 100644 index 0000000000..d9409e3dc5 --- /dev/null +++ b/src/binaryen/test/torture-s/strct-pack-2.c.s @@ -0,0 +1,19 @@ + .text + .file "strct-pack-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/strct-pack-3.c.s b/src/binaryen/test/torture-s/strct-pack-3.c.s new file mode 100644 index 0000000000..3954ac4979 --- /dev/null +++ b/src/binaryen/test/torture-s/strct-pack-3.c.s @@ -0,0 +1,48 @@ + .text + .file "strct-pack-3.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push3=, 6 + i32.add $push4=, $0, $pop3 + i32.load $push14=, 0($pop4):p2align=1 + tee_local $push13=, $1=, $pop14 + i32.const $push1=, 16 + i32.shl $push8=, $pop13, $pop1 + i32.load $push0=, 2($0):p2align=1 + i32.const $push12=, 16 + i32.shl $push2=, $pop0, $pop12 + i32.const $push5=, 17 + i32.shl $push6=, $1, $pop5 + i32.add $push7=, $pop2, $pop6 + i32.add $push9=, $pop8, $pop7 + i32.const $push11=, 16 + i32.shr_s $push10=, $pop9, $pop11 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/strct-pack-4.c.s b/src/binaryen/test/torture-s/strct-pack-4.c.s new file mode 100644 index 0000000000..0842cfd21f --- /dev/null +++ b/src/binaryen/test/torture-s/strct-pack-4.c.s @@ -0,0 +1,45 @@ + .text + .file "strct-pack-4.c" + .section .text.my_set_a,"ax",@progbits + .hidden my_set_a # -- Begin function my_set_a + .globl my_set_a + .type my_set_a,@function +my_set_a: # @my_set_a + .result i32 +# BB#0: # %entry + i32.const $push0=, 171 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size my_set_a, .Lfunc_end0-my_set_a + # -- End function + .section .text.my_set_b,"ax",@progbits + .hidden my_set_b # -- Begin function my_set_b + .globl my_set_b + .type my_set_b,@function +my_set_b: # @my_set_b + .result i32 +# BB#0: # %entry + i32.const $push0=, 4660 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size my_set_b, .Lfunc_end1-my_set_b + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/strct-stdarg-1.c.s b/src/binaryen/test/torture-s/strct-stdarg-1.c.s new file mode 100644 index 0000000000..2c553de4ae --- /dev/null +++ b/src/binaryen/test/torture-s/strct-stdarg-1.c.s @@ -0,0 +1,192 @@ + .text + .file "strct-stdarg-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push29=, 0 + i32.const $push27=, 0 + i32.load $push26=, __stack_pointer($pop27) + i32.const $push28=, 16 + i32.sub $push35=, $pop26, $pop28 + tee_local $push34=, $4=, $pop35 + i32.store __stack_pointer($pop29), $pop34 + i32.store 12($4), $1 + block + block + block + i32.const $push33=, 1 + i32.lt_s $push3=, $0, $pop33 + br_if 0, $pop3 # 0: down to label2 +# BB#1: # %for.body.preheader + i32.const $2=, 0 +.LBB0_2: # %for.body + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.const $push39=, 8 + i32.add $push38=, $1, $pop39 + tee_local $push37=, $3=, $pop38 + i32.store 12($4), $pop37 + i32.const $push36=, 10 + i32.add $push4=, $2, $pop36 + i32.load8_s $push5=, 0($1) + i32.ne $push6=, $pop4, $pop5 + br_if 3, $pop6 # 3: down to label0 +# BB#3: # %if.end + # in Loop: Header=BB0_2 Depth=1 + i32.const $push41=, 20 + i32.add $push10=, $2, $pop41 + i32.const $push40=, 1 + i32.add $push11=, $1, $pop40 + i32.load8_s $push12=, 0($pop11) + i32.ne $push13=, $pop10, $pop12 + br_if 3, $pop13 # 3: down to label0 +# BB#4: # %if.end9 + # in Loop: Header=BB0_2 Depth=1 + i32.const $push43=, 30 + i32.add $push14=, $2, $pop43 + i32.const $push42=, 2 + i32.add $push9=, $1, $pop42 + i32.load8_s $push0=, 0($pop9) + i32.ne $push15=, $pop14, $pop0 + br_if 3, $pop15 # 3: down to label0 +# BB#5: # %if.end15 + # in Loop: Header=BB0_2 Depth=1 + i32.const $push45=, 40 + i32.add $push16=, $2, $pop45 + i32.const $push44=, 3 + i32.add $push8=, $1, $pop44 + i32.load8_s $push1=, 0($pop8) + i32.ne $push17=, $pop16, $pop1 + br_if 3, $pop17 # 3: down to label0 +# BB#6: # %if.end21 + # in Loop: Header=BB0_2 Depth=1 + i32.const $push47=, 50 + i32.add $push18=, $2, $pop47 + i32.const $push46=, 4 + i32.add $push7=, $1, $pop46 + i32.load8_s $push2=, 0($pop7) + i32.ne $push19=, $pop18, $pop2 + br_if 3, $pop19 # 3: down to label0 +# BB#7: # %for.cond + # in Loop: Header=BB0_2 Depth=1 + copy_local $1=, $3 + i32.const $push50=, 1 + i32.add $push49=, $2, $pop50 + tee_local $push48=, $2=, $pop49 + i32.lt_s $push20=, $pop48, $0 + br_if 0, $pop20 # 0: up to label3 + br 2 # 2: down to label1 +.LBB0_8: + end_loop + end_block # label2: + copy_local $3=, $1 +.LBB0_9: # %for.end + end_block # label1: + i32.const $push21=, 4 + i32.add $push22=, $3, $pop21 + i32.store 12($4), $pop22 + i32.load $push23=, 0($3) + i32.const $push24=, 123 + i32.ne $push25=, $pop23, $pop24 + br_if 0, $pop25 # 0: down to label0 +# BB#10: # %if.end34 + i32.const $push32=, 0 + i32.const $push30=, 16 + i32.add $push31=, $4, $pop30 + i32.store __stack_pointer($pop32), $pop31 + return $1 +.LBB0_11: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push30=, 0 + i32.const $push28=, 0 + i32.load $push27=, __stack_pointer($pop28) + i32.const $push29=, 64 + i32.sub $push46=, $pop27, $pop29 + tee_local $push45=, $0=, $pop46 + i32.store __stack_pointer($pop30), $pop45 + i32.const $push0=, 56 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 369898281 + i32.store 0($pop1), $pop2 + i32.const $push3=, 61 + i32.add $push4=, $0, $pop3 + i32.const $push5=, 13354 + i32.store16 0($pop4):p2align=0, $pop5 + i32.const $push6=, 60 + i32.add $push7=, $0, $pop6 + i32.const $push8=, 32 + i32.store8 0($pop7), $pop8 + i64.const $push9=, 2239708699736019978 + i64.store 48($0), $pop9 + i32.const $push31=, 40 + i32.add $push32=, $0, $pop31 + i32.const $push10=, 4 + i32.add $push11=, $pop32, $pop10 + i32.load8_u $push12=, 52($0) + i32.store8 0($pop11), $pop12 + i32.const $push33=, 32 + i32.add $push34=, $0, $pop33 + i32.const $push44=, 4 + i32.add $push13=, $pop34, $pop44 + i32.const $push14=, 57 + i32.add $push15=, $0, $pop14 + i32.load8_u $push16=, 0($pop15) + i32.store8 0($pop13), $pop16 + i32.const $push35=, 24 + i32.add $push36=, $0, $pop35 + i32.const $push43=, 4 + i32.add $push17=, $pop36, $pop43 + i32.const $push18=, 62 + i32.add $push19=, $0, $pop18 + i32.load8_u $push20=, 0($pop19) + i32.store8 0($pop17), $pop20 + i32.load $push21=, 48($0) + i32.store 40($0), $pop21 + i32.load $push22=, 53($0):p2align=0 + i32.store 32($0), $pop22 + i32.load $push23=, 58($0):p2align=1 + i32.store 24($0), $pop23 + i32.const $push24=, 123 + i32.store 12($0), $pop24 + i32.const $push37=, 24 + i32.add $push38=, $0, $pop37 + i32.store 8($0), $pop38 + i32.const $push39=, 32 + i32.add $push40=, $0, $pop39 + i32.store 4($0), $pop40 + i32.const $push41=, 40 + i32.add $push42=, $0, $pop41 + i32.store 0($0), $pop42 + i32.const $push25=, 3 + i32.call $drop=, f@FUNCTION, $pop25, $0 + i32.const $push26=, 0 + call exit@FUNCTION, $pop26 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/strct-varg-1.c.s b/src/binaryen/test/torture-s/strct-varg-1.c.s new file mode 100644 index 0000000000..b3d0fad753 --- /dev/null +++ b/src/binaryen/test/torture-s/strct-varg-1.c.s @@ -0,0 +1,120 @@ + .text + .file "strct-varg-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push27=, 0 + i32.const $push25=, 0 + i32.load $push24=, __stack_pointer($pop25) + i32.const $push26=, 16 + i32.sub $push32=, $pop24, $pop26 + tee_local $push31=, $2=, $pop32 + i32.store __stack_pointer($pop27), $pop31 + i32.store 12($2), $1 + block + i32.const $push0=, 2 + i32.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.load $push34=, 12($2) + tee_local $push33=, $0=, $pop34 + i32.const $push2=, 8 + i32.add $push3=, $pop33, $pop2 + i32.store 12($2), $pop3 + i32.load $push4=, 0($0) + i32.const $push5=, 43690 + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#2: # %lor.lhs.false + i32.load $push7=, 4($0) + i32.const $push8=, 21845 + i32.ne $push9=, $pop7, $pop8 + br_if 0, $pop9 # 0: down to label0 +# BB#3: # %if.end5 + i32.const $push10=, 12 + i32.add $push36=, $0, $pop10 + tee_local $push35=, $1=, $pop36 + i32.store 12($2), $pop35 + i32.const $push11=, 8 + i32.add $push12=, $0, $pop11 + i32.load $push13=, 0($pop12) + i32.const $push14=, 3 + i32.ne $push15=, $pop13, $pop14 + br_if 0, $pop15 # 0: down to label0 +# BB#4: # %if.end10 + i32.const $push16=, 20 + i32.add $push17=, $0, $pop16 + i32.store 12($2), $pop17 + i32.load $push18=, 0($1) + i32.const $push19=, 65535 + i32.ne $push20=, $pop18, $pop19 + br_if 0, $pop20 # 0: down to label0 +# BB#5: # %lor.lhs.false15 + i32.load $push21=, 16($0) + i32.const $push22=, 4369 + i32.ne $push23=, $pop21, $pop22 + br_if 0, $pop23 # 0: down to label0 +# BB#6: # %if.end19 + i32.const $push30=, 0 + i32.const $push28=, 16 + i32.add $push29=, $2, $pop28 + i32.store __stack_pointer($pop30), $pop29 + return $2 +.LBB0_7: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 48 + i32.sub $push16=, $pop5, $pop7 + tee_local $push15=, $0=, $pop16 + i32.store __stack_pointer($pop8), $pop15 + i64.const $push0=, 18764712181759 + i64.store 32($0), $pop0 + i64.const $push1=, 93823560624810 + i64.store 24($0), $pop1 + i64.const $push14=, 93823560624810 + i64.store 40($0), $pop14 + i64.const $push13=, 18764712181759 + i64.store 16($0), $pop13 + i32.const $push2=, 3 + i32.store 4($0), $pop2 + i32.const $push9=, 16 + i32.add $push10=, $0, $pop9 + i32.store 8($0), $pop10 + i32.const $push11=, 24 + i32.add $push12=, $0, $pop11 + i32.store 0($0), $pop12 + i32.const $push3=, 2 + i32.call $drop=, f@FUNCTION, $pop3, $0 + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/string-opt-17.c.s b/src/binaryen/test/torture-s/string-opt-17.c.s new file mode 100644 index 0000000000..358f42ea22 --- /dev/null +++ b/src/binaryen/test/torture-s/string-opt-17.c.s @@ -0,0 +1,149 @@ + .text + .file "string-opt-17.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, .L.str + i32.add $push1=, $1, $pop0 + i32.call $drop=, strcpy@FUNCTION, $0, $pop1 + i32.const $push2=, 1 + i32.add $push3=, $1, $pop2 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.check2,"ax",@progbits + .hidden check2 # -- Begin function check2 + .globl check2 + .type check2,@function +check2: # @check2 + .result i32 +# BB#0: # %entry + block + i32.const $push4=, 0 + i32.load $push0=, check2.r($pop4) + i32.const $push1=, 5 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 0 + i32.const $push3=, 6 + i32.store check2.r($pop6), $pop3 + i32.const $push5=, 6 + return $pop5 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size check2, .Lfunc_end1-check2 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param i32 +# BB#0: # %entry + block + i32.const $push5=, 0 + i32.load $push0=, check2.r($pop5) + i32.const $push1=, 5 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %check2.exit + i32.const $push6=, 0 + i32.const $push3=, 6 + i32.store check2.r($pop6), $pop3 + i32.const $push4=, 8020322 + i32.store 0($0):p2align=0, $pop4 + return +.LBB2_2: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size test2, .Lfunc_end2-test2 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %lor.lhs.false + i32.const $push13=, 0 + i32.const $push11=, 0 + i32.load $push10=, __stack_pointer($pop11) + i32.const $push12=, 16 + i32.sub $push19=, $pop10, $pop12 + tee_local $push18=, $0=, $pop19 + i32.store __stack_pointer($pop13), $pop18 + i32.const $push17=, 0 + i32.load8_u $push0=, .L.str+9($pop17) + i32.store8 6($0), $pop0 + i32.const $push16=, 0 + i32.load16_u $push1=, .L.str+7($pop16):p2align=0 + i32.store16 4($0), $pop1 + block + i32.const $push14=, 4 + i32.add $push15=, $0, $pop14 + i32.const $push3=, .L.str.1 + i32.const $push2=, 3 + i32.call $push4=, memcmp@FUNCTION, $pop15, $pop3, $pop2 + br_if 0, $pop4 # 0: down to label2 +# BB#1: # %if.end + i32.const $push20=, 0 + i32.load $push5=, check2.r($pop20) + i32.const $push6=, 5 + i32.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label2 +# BB#2: # %test2.exit + i32.const $push9=, 0 + i32.const $push8=, 6 + i32.store check2.r($pop9), $pop8 + i32.const $push21=, 0 + call exit@FUNCTION, $pop21 + unreachable +.LBB3_3: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "foobarbaz" + .size .L.str, 10 + + .type check2.r,@object # @check2.r + .section .data.check2.r,"aw",@progbits + .p2align 2 +check2.r: + .int32 5 # 0x5 + .size check2.r, 4 + + .type .L.str.1,@object # @.str.1 + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str.1: + .asciz "az" + .size .L.str.1, 3 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strcpy, i32, i32, i32 + .functype abort, void + .functype memcmp, i32, i32, i32, i32 + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/string-opt-18.c.s b/src/binaryen/test/torture-s/string-opt-18.c.s new file mode 100644 index 0000000000..f81cce63c8 --- /dev/null +++ b/src/binaryen/test/torture-s/string-opt-18.c.s @@ -0,0 +1,137 @@ + .text + .file "string-opt-18.c" + .section .text.test1,"ax",@progbits + .hidden test1 # -- Begin function test1 + .globl test1 + .type test1,@function +test1: # @test1 + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end0: + .size test1, .Lfunc_end0-test1 + # -- End function + .section .text.test2,"ax",@progbits + .hidden test2 # -- Begin function test2 + .globl test2 + .type test2,@function +test2: # @test2 + .param i32 +# BB#0: # %entry + i64.load $push0=, 0($0):p2align=0 + i64.store 0($0):p2align=0, $pop0 + block + i32.const $push1=, 1 + i32.eqz $push2=, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + return +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size test2, .Lfunc_end1-test2 + # -- End function + .section .text.test3,"ax",@progbits + .hidden test3 # -- Begin function test3 + .globl test3 + .type test3,@function +test3: # @test3 + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end2: + .size test3, .Lfunc_end2-test3 + # -- End function + .section .text.test4,"ax",@progbits + .hidden test4 # -- Begin function test4 + .globl test4 + .type test4,@function +test4: # @test4 + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end3: + .size test4, .Lfunc_end3-test4 + # -- End function + .section .text.test5,"ax",@progbits + .hidden test5 # -- Begin function test5 + .globl test5 + .type test5,@function +test5: # @test5 + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end4: + .size test5, .Lfunc_end4-test5 + # -- End function + .section .text.test6,"ax",@progbits + .hidden test6 # -- Begin function test6 + .globl test6 + .type test6,@function +test6: # @test6 + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end5: + .size test6, .Lfunc_end5-test6 + # -- End function + .section .text.test7,"ax",@progbits + .hidden test7 # -- Begin function test7 + .globl test7 + .type test7,@function +test7: # @test7 + .param i32 +# BB#0: # %entry + # fallthrough-return + .endfunc +.Lfunc_end6: + .size test7, .Lfunc_end6-test7 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push11=, $pop3, $pop5 + tee_local $push10=, $0=, $pop11 + i32.store __stack_pointer($pop6), $pop10 + i64.load $push0=, 0($0) + i64.store 0($0), $pop0 + block + i32.const $push1=, 1 + i32.eqz $push12=, $pop1 + br_if 0, $pop12 # 0: down to label1 +# BB#1: # %test2.exit + i32.const $push9=, 0 + i32.const $push7=, 16 + i32.add $push8=, $0, $pop7 + i32.store __stack_pointer($pop9), $pop8 + i32.const $push2=, 0 + return $pop2 +.LBB7_2: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end7: + .size main, .Lfunc_end7-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype mempcpy, i32, i32, i32, i32 diff --git a/src/binaryen/test/torture-s/string-opt-5.c.s b/src/binaryen/test/torture-s/string-opt-5.c.s new file mode 100644 index 0000000000..2b99dd7afd --- /dev/null +++ b/src/binaryen/test/torture-s/string-opt-5.c.s @@ -0,0 +1,472 @@ + .text + .file "string-opt-5.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push136=, 0 + i32.const $push134=, 0 + i32.load $push133=, __stack_pointer($pop134) + i32.const $push135=, 64 + i32.sub $push144=, $pop133, $pop135 + tee_local $push143=, $4=, $pop144 + i32.store __stack_pointer($pop136), $pop143 + block + i32.const $push142=, 0 + i32.load $push141=, bar($pop142) + tee_local $push140=, $0=, $pop141 + i32.call $push0=, strlen@FUNCTION, $pop140 + i32.const $push1=, 8 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push150=, 0 + i32.const $push149=, 0 + i32.load $push148=, x($pop149) + tee_local $push147=, $1=, $pop148 + i32.const $push3=, 1 + i32.add $push146=, $pop147, $pop3 + tee_local $push145=, $2=, $pop146 + i32.store x($pop150), $pop145 + i32.const $push4=, 2 + i32.and $push5=, $2, $pop4 + i32.add $push6=, $0, $pop5 + i32.call $push7=, strlen@FUNCTION, $pop6 + i32.const $push8=, 6 + i32.ne $push9=, $pop7, $pop8 + br_if 0, $pop9 # 0: down to label0 +# BB#2: # %if.end4 + i32.const $push10=, 7 + i32.ne $push11=, $2, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#3: # %if.end25 + i32.const $push153=, 0 + i32.const $push12=, -3 + i32.add $push152=, $1, $pop12 + tee_local $push151=, $2=, $pop152 + i32.store x($pop153), $pop151 + i32.const $push13=, .L.str.1-3 + i32.add $push14=, $1, $pop13 + i32.const $push15=, .L.str.2 + i32.call $push16=, strcmp@FUNCTION, $pop14, $pop15 + br_if 0, $pop16 # 0: down to label0 +# BB#4: # %if.end32 + i32.const $push155=, .L.str.1 + i32.call $push17=, strcmp@FUNCTION, $pop155, $0 + i32.const $push154=, 0 + i32.ge_s $push18=, $pop17, $pop154 + br_if 0, $pop18 # 0: down to label0 +# BB#5: # %if.end36 + i32.const $push160=, 0 + i32.const $push19=, -2 + i32.add $push159=, $1, $pop19 + tee_local $push158=, $3=, $pop159 + i32.store x($pop160), $pop158 + i32.const $push157=, .L.str.1 + i32.const $push20=, 1 + i32.and $push21=, $2, $pop20 + i32.add $push22=, $0, $pop21 + i32.call $push23=, strcmp@FUNCTION, $pop157, $pop22 + i32.const $push156=, 0 + i32.ge_s $push24=, $pop23, $pop156 + br_if 0, $pop24 # 0: down to label0 +# BB#6: # %if.end46 + i32.const $push163=, 0 + i32.const $push25=, -1 + i32.add $push162=, $1, $pop25 + tee_local $push161=, $2=, $pop162 + i32.store x($pop163), $pop161 + i32.const $push26=, 7 + i32.and $push27=, $3, $pop26 + i32.const $push28=, .L.str.1 + i32.add $push29=, $pop27, $pop28 + i32.const $push30=, 108 + i32.call $push31=, strchr@FUNCTION, $pop29, $pop30 + i32.const $push32=, .L.str.1+9 + i32.ne $push33=, $pop31, $pop32 + br_if 0, $pop33 # 0: down to label0 +# BB#7: # %if.end56 + i32.const $push36=, 111 + i32.call $push165=, strchr@FUNCTION, $0, $pop36 + tee_local $push164=, $3=, $pop165 + i32.const $push34=, 4 + i32.add $push35=, $0, $pop34 + i32.ne $push37=, $pop164, $pop35 + br_if 0, $pop37 # 0: down to label0 +# BB#8: # %if.end61 + i32.call $push38=, strlen@FUNCTION, $0 + i32.const $push39=, 8 + i32.ne $push40=, $pop38, $pop39 + br_if 0, $pop40 # 0: down to label0 +# BB#9: # %if.end66 + i32.const $push41=, 120 + i32.call $push42=, strrchr@FUNCTION, $0, $pop41 + br_if 0, $pop42 # 0: down to label0 +# BB#10: # %if.end70 + i32.const $push43=, 111 + i32.call $push44=, strrchr@FUNCTION, $0, $pop43 + i32.ne $push45=, $pop44, $3 + br_if 0, $pop45 # 0: down to label0 +# BB#11: # %if.end75 + i32.const $push46=, 0 + i32.store x($pop46), $1 + i32.const $push170=, 0 + i32.const $push169=, 0 + i32.load $push47=, y($pop169) + i32.const $push48=, -1 + i32.add $push168=, $pop47, $pop48 + tee_local $push167=, $0=, $pop168 + i32.store y($pop170), $pop167 + i32.const $push49=, 1 + i32.and $push50=, $2, $pop49 + i32.const $push51=, .L.str.1 + i32.add $push52=, $pop50, $pop51 + i32.const $push166=, 1 + i32.and $push53=, $0, $pop166 + i32.const $push54=, .L.str.3 + i32.add $push55=, $pop53, $pop54 + i32.call $push56=, strcmp@FUNCTION, $pop52, $pop55 + br_if 0, $pop56 # 0: down to label0 +# BB#12: # %if.end84 + br_if 0, $0 # 0: down to label0 +# BB#13: # %if.end88 + i32.const $push176=, 0 + i32.const $push57=, 1 + i32.store y($pop176), $pop57 + i32.const $push175=, 0 + i32.const $push58=, 6 + i32.store x($pop175), $pop58 + i32.const $push174=, 32 + i32.store16 5($4):p2align=0, $pop174 + i32.const $push59=, 1869376613 + i32.store 1($4):p2align=0, $pop59 + i32.const $push173=, 1 + i32.or $push172=, $4, $pop173 + tee_local $push171=, $0=, $pop172 + i32.const $push60=, .L.str.4 + i32.call $push61=, strcmp@FUNCTION, $pop171, $pop60 + br_if 0, $pop61 # 0: down to label0 +# BB#14: # %if.end106 + i32.const $push187=, 0 + i32.const $push186=, 7 + i32.store x($pop187), $pop186 + i32.const $push185=, 0 + i32.const $push64=, 2 + i32.store y($pop185), $pop64 + i32.const $push65=, 56 + i32.add $push66=, $4, $pop65 + i64.const $push67=, 2314885530818453536 + i64.store 0($pop66), $pop67 + i32.const $push68=, 48 + i32.add $push69=, $4, $pop68 + i64.const $push184=, 2314885530818453536 + i64.store 0($pop69), $pop184 + i32.const $push70=, 40 + i32.add $push71=, $4, $pop70 + i64.const $push183=, 2314885530818453536 + i64.store 0($pop71), $pop183 + i32.const $push182=, 32 + i32.add $push72=, $4, $pop182 + i64.const $push181=, 2314885530818453536 + i64.store 0($pop72), $pop181 + i32.const $push73=, 24 + i32.add $push74=, $4, $pop73 + i64.const $push180=, 2314885530818453536 + i64.store 0($pop74), $pop180 + i32.const $push75=, 16 + i32.add $push76=, $4, $pop75 + i64.const $push179=, 2314885530818453536 + i64.store 0($pop76), $pop179 + i64.const $push178=, 2314885530818453536 + i64.store 8($4), $pop178 + i64.const $push177=, 2314885530818453536 + i64.store 0($4), $pop177 + i32.const $push78=, .L.str.5+1 + i32.const $push77=, 10 + i32.call $push79=, strncpy@FUNCTION, $0, $pop78, $pop77 + i32.ne $push80=, $pop79, $0 + br_if 0, $pop80 # 0: down to label0 +# BB#15: # %if.end106 + i32.const $push189=, 0 + i32.load $push62=, x($pop189) + i32.const $push188=, 7 + i32.ne $push81=, $pop62, $pop188 + br_if 0, $pop81 # 0: down to label0 +# BB#16: # %if.end106 + i32.const $push190=, 0 + i32.load $push63=, y($pop190) + i32.const $push82=, 2 + i32.ne $push83=, $pop63, $pop82 + br_if 0, $pop83 # 0: down to label0 +# BB#17: # %lor.lhs.false123 + i32.const $push85=, .L.str.6 + i32.const $push84=, 12 + i32.call $push86=, memcmp@FUNCTION, $4, $pop85, $pop84 + br_if 0, $pop86 # 0: down to label0 +# BB#18: # %if.end128 + i32.const $push87=, 56 + i32.add $push88=, $4, $pop87 + i64.const $push89=, 2314885530818453536 + i64.store 0($pop88), $pop89 + i32.const $push90=, 48 + i32.add $push91=, $4, $pop90 + i64.const $push197=, 2314885530818453536 + i64.store 0($pop91), $pop197 + i32.const $push92=, 40 + i32.add $push93=, $4, $pop92 + i64.const $push196=, 2314885530818453536 + i64.store 0($pop93), $pop196 + i32.const $push94=, 32 + i32.add $push95=, $4, $pop94 + i64.const $push195=, 2314885530818453536 + i64.store 0($pop95), $pop195 + i32.const $push96=, 24 + i32.add $push97=, $4, $pop96 + i64.const $push194=, 2314885530818453536 + i64.store 0($pop97), $pop194 + i32.const $push98=, 16 + i32.add $push99=, $4, $pop98 + i64.const $push193=, 2314885530818453536 + i64.store 0($pop99), $pop193 + i64.const $push192=, 2314885530818453536 + i64.store 8($4), $pop192 + i64.const $push191=, 2314885530818453536 + i64.store 0($4), $pop191 + i32.const $push101=, .L.str.7 + i32.const $push100=, 8 + i32.call $push102=, strncpy@FUNCTION, $4, $pop101, $pop100 + i32.ne $push103=, $pop102, $4 + br_if 0, $pop103 # 0: down to label0 +# BB#19: # %lor.lhs.false134 + i32.const $push105=, .L.str.8 + i32.const $push104=, 9 + i32.call $push106=, memcmp@FUNCTION, $4, $pop105, $pop104 + br_if 0, $pop106 # 0: down to label0 +# BB#20: # %if.end139 + i32.const $push108=, 0 + i64.const $push107=, 2314885530818453536 + i64.store buf+56($pop108), $pop107 + i32.const $push219=, 0 + i64.const $push218=, 2314885530818453536 + i64.store buf+48($pop219), $pop218 + i32.const $push217=, 0 + i64.const $push216=, 2314885530818453536 + i64.store buf+40($pop217), $pop216 + i32.const $push215=, 0 + i64.const $push214=, 2314885530818453536 + i64.store buf+32($pop215), $pop214 + i32.const $push213=, 0 + i64.const $push212=, 2314885530818453536 + i64.store buf+24($pop213), $pop212 + i32.const $push211=, 0 + i64.const $push210=, 2314885530818453536 + i64.store buf+16($pop211), $pop210 + i32.const $push209=, 0 + i64.const $push208=, 2314885530818453536 + i64.store buf+8($pop209), $pop208 + i32.const $push207=, 0 + i64.const $push206=, 2314885530818453536 + i64.store buf($pop207), $pop206 + i32.const $push205=, 0 + i32.const $push109=, 34 + i32.store x($pop205), $pop109 + i32.const $push204=, 0 + i32.const $push203=, 0 + i32.load $push202=, y($pop203) + tee_local $push201=, $0=, $pop202 + i32.const $push110=, 1 + i32.add $push200=, $pop201, $pop110 + tee_local $push199=, $1=, $pop200 + i32.store y($pop204), $pop199 + i32.const $push112=, buf + i32.const $push111=, 33 + i32.call $2=, memset@FUNCTION, $pop112, $pop111, $1 + i32.const $push198=, 3 + i32.ne $push113=, $1, $pop198 + br_if 0, $pop113 # 0: down to label0 +# BB#21: # %lor.lhs.false146 + i32.const $push114=, .L.str.9 + i32.const $push220=, 3 + i32.call $push115=, memcmp@FUNCTION, $2, $pop114, $pop220 + br_if 0, $pop115 # 0: down to label0 +# BB#22: # %lor.lhs.false156 + i32.const $push223=, 0 + i64.const $push116=, 3255307777713450285 + i64.store buf+3($pop223):p2align=0, $pop116 + i32.const $push222=, 0 + i32.const $push117=, 2 + i32.add $push118=, $0, $pop117 + i32.store y($pop222), $pop118 + i32.const $push120=, buf + i32.const $push119=, .L.str.10 + i32.const $push221=, 11 + i32.call $push121=, memcmp@FUNCTION, $pop120, $pop119, $pop221 + br_if 0, $pop121 # 0: down to label0 +# BB#23: # %lor.lhs.false169 + i32.const $push228=, 0 + i32.const $push227=, 11 + i32.store x($pop228), $pop227 + i32.const $push226=, 0 + i32.const $push122=, 3 + i32.add $push123=, $0, $pop122 + i32.store y($pop226), $pop123 + i32.const $push225=, 0 + i32.const $push224=, 0 + i32.store buf+11($pop225):p2align=0, $pop224 + i32.const $push126=, buf+8 + i32.const $push125=, .L.str.11 + i32.const $push124=, 7 + i32.call $push127=, memcmp@FUNCTION, $pop126, $pop125, $pop124 + br_if 0, $pop127 # 0: down to label0 +# BB#24: # %lor.lhs.false178 + i32.const $push233=, 0 + i32.const $push128=, 15 + i32.store x($pop233), $pop128 + i32.const $push232=, 0 + i32.const $push231=, 0 + i32.store16 buf+19($pop232):p2align=0, $pop231 + i32.const $push230=, 0 + i32.const $push229=, 0 + i32.store buf+15($pop230):p2align=0, $pop229 + i32.const $push131=, buf+10 + i32.const $push130=, .L.str.12 + i32.const $push129=, 11 + i32.call $push132=, memcmp@FUNCTION, $pop131, $pop130, $pop129 + br_if 0, $pop132 # 0: down to label0 +# BB#25: # %if.end182 + i32.const $push139=, 0 + i32.const $push137=, 64 + i32.add $push138=, $4, $pop137 + i32.store __stack_pointer($pop139), $pop138 + i32.const $push234=, 0 + return $pop234 +.LBB0_26: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 2 +x: + .int32 6 # 0x6 + .size x, 4 + + .hidden y # @y + .type y,@object + .section .data.y,"aw",@progbits + .globl y + .p2align 2 +y: + .int32 1 # 0x1 + .size y, 4 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "hi world" + .size .L.str, 9 + + .hidden bar # @bar + .type bar,@object + .section .data.bar,"aw",@progbits + .globl bar + .p2align 2 +bar: + .int32 .L.str + .size bar, 4 + + .type .L.str.1,@object # @.str.1 + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str.1: + .asciz "hello world" + .size .L.str.1, 12 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "lo world" + .size .L.str.2, 9 + + .type .L.str.3,@object # @.str.3 +.L.str.3: + .asciz "ello world" + .size .L.str.3, 11 + + .type .L.str.4,@object # @.str.4 +.L.str.4: + .asciz "ello " + .size .L.str.4, 6 + + .type .L.str.5,@object # @.str.5 +.L.str.5: + .asciz "foo" + .size .L.str.5, 4 + + .type .L.str.6,@object # @.str.6 + .section .rodata..L.str.6,"a",@progbits +.L.str.6: + .asciz " oo\000\000\000\000\000\000\000\000 " + .size .L.str.6, 13 + + .type .L.str.7,@object # @.str.7 + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str.7: + .asciz "hello" + .size .L.str.7, 6 + + .type .L.str.8,@object # @.str.8 + .section .rodata..L.str.8,"a",@progbits +.L.str.8: + .asciz "hello\000\000\000 " + .size .L.str.8, 10 + + .hidden buf # @buf + .type buf,@object + .section .bss.buf,"aw",@nobits + .globl buf + .p2align 4 +buf: + .skip 64 + .size buf, 64 + + .type .L.str.9,@object # @.str.9 + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str.9: + .asciz "!!!" + .size .L.str.9, 4 + + .type .L.str.10,@object # @.str.10 +.L.str.10: + .asciz "!!!--------" + .size .L.str.10, 12 + + .type .L.str.11,@object # @.str.11 + .section .rodata..L.str.11,"a",@progbits +.L.str.11: + .asciz "---\000\000\000" + .size .L.str.11, 7 + + .type .L.str.12,@object # @.str.12 + .section .rodata..L.str.12,"a",@progbits +.L.str.12: + .asciz "-\000\000\000\000\000\000\000\000\000" + .size .L.str.12, 11 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strlen, i32, i32 + .functype abort, void + .functype strcmp, i32, i32, i32 + .functype strchr, i32, i32, i32 + .functype strrchr, i32, i32, i32 + .functype strncpy, i32, i32, i32, i32 + .functype memcmp, i32, i32, i32, i32 diff --git a/src/binaryen/test/torture-s/strlen-1.c.s b/src/binaryen/test/torture-s/strlen-1.c.s new file mode 100644 index 0000000000..96afb6c340 --- /dev/null +++ b/src/binaryen/test/torture-s/strlen-1.c.s @@ -0,0 +1,103 @@ + .text + .file "strlen-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $1=, 0 + i32.const $2=, u +.LBB0_1: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB0_2 Depth 2 + block + loop # label1: + i32.const $push7=, u + i32.add $0=, $1, $pop7 + i32.const $3=, 0 +.LBB0_2: # %for.body3 + # Parent Loop BB0_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop # label2: + block + block + block + br_if 0, $1 # 0: down to label5 +# BB#3: # in Loop: Header=BB0_2 Depth=2 + i32.const $4=, u + br_if 1, $3 # 1: down to label4 + br 2 # 2: down to label3 +.LBB0_4: # %for.body6.lr.ph + # in Loop: Header=BB0_2 Depth=2 + end_block # label5: + i32.const $push9=, u + i32.const $push8=, 0 + i32.call $drop=, memset@FUNCTION, $pop9, $pop8, $1 + copy_local $4=, $2 + i32.eqz $push23=, $3 + br_if 1, $pop23 # 1: down to label3 +.LBB0_5: # %for.body9.lr.ph + # in Loop: Header=BB0_2 Depth=2 + end_block # label4: + i32.const $push10=, 97 + i32.call $push0=, memset@FUNCTION, $4, $pop10, $3 + i32.add $4=, $pop0, $3 +.LBB0_6: # %for.end13 + # in Loop: Header=BB0_2 Depth=2 + end_block # label3: + i32.const $push13=, 0 + i32.store8 0($4), $pop13 + i32.const $push12=, 1 + i32.add $push6=, $4, $pop12 + i64.const $push11=, 7089336938131513954 + i64.store 0($pop6):p2align=0, $pop11 + i32.call $push1=, strlen@FUNCTION, $0 + i32.ne $push2=, $3, $pop1 + br_if 2, $pop2 # 2: down to label0 +# BB#7: # %for.cond1 + # in Loop: Header=BB0_2 Depth=2 + i32.const $push17=, 1 + i32.add $push16=, $3, $pop17 + tee_local $push15=, $3=, $pop16 + i32.const $push14=, 63 + i32.le_u $push3=, $pop15, $pop14 + br_if 0, $pop3 # 0: up to label2 +# BB#8: # %for.inc26 + # in Loop: Header=BB0_1 Depth=1 + end_loop + i32.const $push22=, 1 + i32.add $2=, $2, $pop22 + i32.const $push21=, 1 + i32.add $push20=, $1, $pop21 + tee_local $push19=, $1=, $pop20 + i32.const $push18=, 8 + i32.lt_u $push4=, $pop19, $pop18 + br_if 0, $pop4 # 0: up to label1 +# BB#9: # %for.end28 + end_loop + i32.const $push5=, 0 + call exit@FUNCTION, $pop5 + unreachable +.LBB0_10: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .type u,@object # @u + .section .bss.u,"aw",@nobits + .p2align 4 +u: + .skip 96 + .size u, 96 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strlen, i32, i32 + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/strncmp-1.c.s b/src/binaryen/test/torture-s/strncmp-1.c.s new file mode 100644 index 0000000000..a9ee84a00a --- /dev/null +++ b/src/binaryen/test/torture-s/strncmp-1.c.s @@ -0,0 +1,332 @@ + .text + .file "strncmp-1.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32, i32, i32, i32 +# BB#0: # %entry + i32.call $0=, strncmp@FUNCTION, $0, $1, $2 + block + block + i32.const $push0=, -1 + i32.gt_s $push1=, $3, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %entry + i32.const $push2=, 0 + i32.ge_s $push3=, $0, $pop2 + br_if 1, $pop3 # 1: down to label0 +.LBB0_2: # %if.else + end_block # label1: + block + br_if 0, $3 # 0: down to label2 +# BB#3: # %if.else + br_if 1, $0 # 1: down to label0 +.LBB0_4: # %if.else6 + end_block # label2: + block + i32.const $push4=, 1 + i32.lt_s $push5=, $3, $pop4 + br_if 0, $pop5 # 0: down to label3 +# BB#5: # %if.else6 + i32.const $push6=, 0 + i32.le_s $push7=, $0, $pop6 + br_if 1, $pop7 # 1: down to label0 +.LBB0_6: # %if.end12 + end_block # label3: + return +.LBB0_7: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $0=, 0 + i32.const $1=, u1 +.LBB1_1: # %for.body + # =>This Loop Header: Depth=1 + # Child Loop BB1_2 Depth 2 + # Child Loop BB1_3 Depth 3 + block + loop # label5: + i32.const $2=, 0 + i32.const $3=, u2 +.LBB1_2: # %for.body3 + # Parent Loop BB1_1 Depth=1 + # => This Loop Header: Depth=2 + # Child Loop BB1_3 Depth 3 + loop # label6: + i32.const $4=, 0 +.LBB1_3: # %for.body6 + # Parent Loop BB1_1 Depth=1 + # Parent Loop BB1_2 Depth=2 + # => This Inner Loop Header: Depth=3 + loop # label7: + block + block + block + br_if 0, $0 # 0: down to label10 +# BB#4: # in Loop: Header=BB1_3 Depth=3 + i32.const $5=, u1 + i32.const $push32=, u1 + copy_local $6=, $pop32 + br_if 1, $4 # 1: down to label9 + br 2 # 2: down to label8 +.LBB1_5: # %for.body9.lr.ph + # in Loop: Header=BB1_3 Depth=3 + end_block # label10: + i32.const $push37=, u1 + i32.const $push36=, 0 + i32.call $drop=, memset@FUNCTION, $pop37, $pop36, $0 + copy_local $push35=, $1 + tee_local $push34=, $5=, $pop35 + copy_local $6=, $pop34 + i32.eqz $push95=, $4 + br_if 1, $pop95 # 1: down to label8 +.LBB1_6: # %for.body12.lr.ph + # in Loop: Header=BB1_3 Depth=3 + end_block # label9: + i32.const $push38=, 97 + i32.call $push0=, memset@FUNCTION, $5, $pop38, $4 + i32.add $6=, $pop0, $4 +.LBB1_7: # %for.end16 + # in Loop: Header=BB1_3 Depth=3 + end_block # label8: + i64.const $push39=, 8680820740569200760 + i64.store 0($6):p2align=0, $pop39 + block + block + block + br_if 0, $2 # 0: down to label13 +# BB#8: # in Loop: Header=BB1_3 Depth=3 + i32.const $7=, u2 + i32.const $push33=, u2 + copy_local $8=, $pop33 + br_if 1, $4 # 1: down to label12 + br 2 # 2: down to label11 +.LBB1_9: # %for.body26.lr.ph + # in Loop: Header=BB1_3 Depth=3 + end_block # label13: + i32.const $push43=, u2 + i32.const $push42=, 0 + i32.call $drop=, memset@FUNCTION, $pop43, $pop42, $2 + copy_local $push41=, $3 + tee_local $push40=, $7=, $pop41 + copy_local $8=, $pop40 + i32.eqz $push96=, $4 + br_if 1, $pop96 # 1: down to label11 +.LBB1_10: # %for.body33.lr.ph + # in Loop: Header=BB1_3 Depth=3 + end_block # label12: + i32.const $push44=, 97 + i32.call $push1=, memset@FUNCTION, $7, $pop44, $4 + i32.add $8=, $pop1, $4 +.LBB1_11: # %for.end37 + # in Loop: Header=BB1_3 Depth=3 + end_block # label11: + i64.const $push48=, 8680820740569200760 + i64.store 0($8):p2align=0, $pop48 + i32.const $push47=, 0 + i32.store8 0($6), $pop47 + i32.const $push46=, 0 + i32.store8 0($8), $pop46 + i32.const $push45=, 80 + i32.call $push2=, strncmp@FUNCTION, $5, $7, $pop45 + br_if 3, $pop2 # 3: down to label4 +# BB#12: # %test.exit + # in Loop: Header=BB1_3 Depth=3 + i32.call $push3=, strncmp@FUNCTION, $5, $7, $4 + br_if 3, $pop3 # 3: down to label4 +# BB#13: # %test.exit185 + # in Loop: Header=BB1_3 Depth=3 + i32.const $push52=, 97 + i32.store16 0($6):p2align=0, $pop52 + i32.const $push51=, 0 + i32.store8 0($8), $pop51 + i32.const $push50=, 80 + i32.call $push4=, strncmp@FUNCTION, $5, $7, $pop50 + i32.const $push49=, 0 + i32.le_s $push5=, $pop4, $pop49 + br_if 3, $pop5 # 3: down to label4 +# BB#14: # %test.exit190 + # in Loop: Header=BB1_3 Depth=3 + i32.call $push6=, strncmp@FUNCTION, $5, $7, $4 + br_if 3, $pop6 # 3: down to label4 +# BB#15: # %test.exit196 + # in Loop: Header=BB1_3 Depth=3 + i32.const $push56=, 0 + i32.store8 0($6), $pop56 + i32.const $push55=, 97 + i32.store16 0($8):p2align=0, $pop55 + i32.const $push54=, 80 + i32.call $push7=, strncmp@FUNCTION, $5, $7, $pop54 + i32.const $push53=, 0 + i32.ge_s $push8=, $pop7, $pop53 + br_if 3, $pop8 # 3: down to label4 +# BB#16: # %test.exit201 + # in Loop: Header=BB1_3 Depth=3 + i32.call $push9=, strncmp@FUNCTION, $5, $7, $4 + br_if 3, $pop9 # 3: down to label4 +# BB#17: # %test.exit207 + # in Loop: Header=BB1_3 Depth=3 + i32.const $push60=, 98 + i32.store16 0($6):p2align=0, $pop60 + i32.const $push59=, 99 + i32.store16 0($8):p2align=0, $pop59 + i32.const $push58=, 80 + i32.call $push10=, strncmp@FUNCTION, $5, $7, $pop58 + i32.const $push57=, 0 + i32.ge_s $push11=, $pop10, $pop57 + br_if 3, $pop11 # 3: down to label4 +# BB#18: # %test.exit213 + # in Loop: Header=BB1_3 Depth=3 + i32.call $push12=, strncmp@FUNCTION, $5, $7, $4 + br_if 3, $pop12 # 3: down to label4 +# BB#19: # %test.exit219 + # in Loop: Header=BB1_3 Depth=3 + i32.const $push64=, 99 + i32.store16 0($6):p2align=0, $pop64 + i32.const $push63=, 98 + i32.store16 0($8):p2align=0, $pop63 + i32.const $push62=, 80 + i32.call $push13=, strncmp@FUNCTION, $5, $7, $pop62 + i32.const $push61=, 0 + i32.le_s $push14=, $pop13, $pop61 + br_if 3, $pop14 # 3: down to label4 +# BB#20: # %test.exit225 + # in Loop: Header=BB1_3 Depth=3 + i32.call $push15=, strncmp@FUNCTION, $5, $7, $4 + br_if 3, $pop15 # 3: down to label4 +# BB#21: # %test.exit231 + # in Loop: Header=BB1_3 Depth=3 + i32.const $push68=, 98 + i32.store16 0($6):p2align=0, $pop68 + i32.const $push67=, 169 + i32.store16 0($8):p2align=0, $pop67 + i32.const $push66=, 80 + i32.call $push16=, strncmp@FUNCTION, $5, $7, $pop66 + i32.const $push65=, 0 + i32.ge_s $push17=, $pop16, $pop65 + br_if 3, $pop17 # 3: down to label4 +# BB#22: # %test.exit237 + # in Loop: Header=BB1_3 Depth=3 + i32.call $push18=, strncmp@FUNCTION, $5, $7, $4 + br_if 3, $pop18 # 3: down to label4 +# BB#23: # %test.exit243 + # in Loop: Header=BB1_3 Depth=3 + i32.const $push72=, 169 + i32.store16 0($6):p2align=0, $pop72 + i32.const $push71=, 98 + i32.store16 0($8):p2align=0, $pop71 + i32.const $push70=, 80 + i32.call $push19=, strncmp@FUNCTION, $5, $7, $pop70 + i32.const $push69=, 0 + i32.le_s $push20=, $pop19, $pop69 + br_if 3, $pop20 # 3: down to label4 +# BB#24: # %test.exit249 + # in Loop: Header=BB1_3 Depth=3 + i32.call $push21=, strncmp@FUNCTION, $5, $7, $4 + br_if 3, $pop21 # 3: down to label4 +# BB#25: # %test.exit255 + # in Loop: Header=BB1_3 Depth=3 + i32.const $push76=, 169 + i32.store16 0($6):p2align=0, $pop76 + i32.const $push75=, 170 + i32.store16 0($8):p2align=0, $pop75 + i32.const $push74=, 80 + i32.call $push22=, strncmp@FUNCTION, $5, $7, $pop74 + i32.const $push73=, 0 + i32.ge_s $push23=, $pop22, $pop73 + br_if 3, $pop23 # 3: down to label4 +# BB#26: # %test.exit261 + # in Loop: Header=BB1_3 Depth=3 + i32.call $push24=, strncmp@FUNCTION, $5, $7, $4 + br_if 3, $pop24 # 3: down to label4 +# BB#27: # %test.exit267 + # in Loop: Header=BB1_3 Depth=3 + i32.const $push80=, 170 + i32.store16 0($6):p2align=0, $pop80 + i32.const $push79=, 169 + i32.store16 0($8):p2align=0, $pop79 + i32.const $push78=, 80 + i32.call $push25=, strncmp@FUNCTION, $5, $7, $pop78 + i32.const $push77=, 0 + i32.le_s $push26=, $pop25, $pop77 + br_if 3, $pop26 # 3: down to label4 +# BB#28: # %test.exit273 + # in Loop: Header=BB1_3 Depth=3 + i32.call $push27=, strncmp@FUNCTION, $5, $7, $4 + br_if 3, $pop27 # 3: down to label4 +# BB#29: # %for.cond4 + # in Loop: Header=BB1_3 Depth=3 + i32.const $push84=, 1 + i32.add $push83=, $4, $pop84 + tee_local $push82=, $4=, $pop83 + i32.const $push81=, 63 + i32.le_u $push28=, $pop82, $pop81 + br_if 0, $pop28 # 0: up to label7 +# BB#30: # %for.inc79 + # in Loop: Header=BB1_2 Depth=2 + end_loop + i32.const $push89=, 1 + i32.add $3=, $3, $pop89 + i32.const $push88=, 1 + i32.add $push87=, $2, $pop88 + tee_local $push86=, $2=, $pop87 + i32.const $push85=, 8 + i32.lt_u $push29=, $pop86, $pop85 + br_if 0, $pop29 # 0: up to label6 +# BB#31: # %for.inc82 + # in Loop: Header=BB1_1 Depth=1 + end_loop + i32.const $push94=, 1 + i32.add $1=, $1, $pop94 + i32.const $push93=, 1 + i32.add $push92=, $0, $pop93 + tee_local $push91=, $0=, $pop92 + i32.const $push90=, 8 + i32.lt_u $push30=, $pop91, $pop90 + br_if 0, $pop30 # 0: up to label5 +# BB#32: # %for.end84 + end_loop + i32.const $push31=, 0 + call exit@FUNCTION, $pop31 + unreachable +.LBB1_33: # %if.then5.i + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type u1,@object # @u1 + .section .bss.u1,"aw",@nobits + .p2align 4 +u1: + .skip 80 + .size u1, 80 + + .type u2,@object # @u2 + .section .bss.u2,"aw",@nobits + .p2align 4 +u2: + .skip 80 + .size u2, 80 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype strncmp, i32, i32, i32, i32 + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/struct-aliasing-1.c.s b/src/binaryen/test/torture-s/struct-aliasing-1.c.s new file mode 100644 index 0000000000..4a9c6448b1 --- /dev/null +++ b/src/binaryen/test/torture-s/struct-aliasing-1.c.s @@ -0,0 +1,65 @@ + .text + .file "struct-aliasing-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.load $2=, 0($1) + i32.const $push0=, 0 + i32.store 0($0), $pop0 + i32.load $push1=, 0($1) + i32.add $push2=, $2, $pop1 + # fallthrough-return: $pop2 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 16 + i32.sub $push17=, $pop4, $pop6 + tee_local $push16=, $0=, $pop17 + i32.store __stack_pointer($pop7), $pop16 + i32.const $push0=, 1 + i32.store 12($0), $pop0 + block + i32.const $push11=, 12 + i32.add $push12=, $0, $pop11 + i32.const $push13=, 12 + i32.add $push14=, $0, $pop13 + i32.call $push1=, foo@FUNCTION, $pop12, $pop14 + i32.const $push15=, 1 + i32.ne $push2=, $pop1, $pop15 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push10=, 0 + i32.const $push8=, 16 + i32.add $push9=, $0, $pop8 + i32.store __stack_pointer($pop10), $pop9 + i32.const $push3=, 0 + return $pop3 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/struct-cpy-1.c.s b/src/binaryen/test/torture-s/struct-cpy-1.c.s new file mode 100644 index 0000000000..8f42be60de --- /dev/null +++ b/src/binaryen/test/torture-s/struct-cpy-1.c.s @@ -0,0 +1,71 @@ + .text + .file "struct-cpy-1.c" + .section .text.ini,"ax",@progbits + .hidden ini # -- Begin function ini + .globl ini + .type ini,@function +ini: # @ini +# BB#0: # %entry + i32.const $push1=, 0 + i64.const $push0=, 0 + i64.store pty+72($pop1), $pop0 + i32.const $push11=, 0 + i64.const $push10=, 0 + i64.store pty+64($pop11), $pop10 + i32.const $push9=, 0 + i64.const $push8=, 0 + i64.store pty+56($pop9), $pop8 + i32.const $push7=, 0 + i64.const $push2=, 8589934593 + i64.store pty+40($pop7), $pop2 + i32.const $push6=, 0 + i64.const $push3=, 17179869187 + i64.store pty+48($pop6), $pop3 + i32.const $push5=, 0 + i32.const $push4=, 0 + i32.store pty+80($pop5), $pop4 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size ini, .Lfunc_end0-ini + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end + i32.const $push1=, 0 + i64.const $push0=, 0 + i64.store pty+72($pop1), $pop0 + i32.const $push12=, 0 + i64.const $push11=, 0 + i64.store pty+64($pop12), $pop11 + i32.const $push10=, 0 + i64.const $push9=, 0 + i64.store pty+56($pop10), $pop9 + i32.const $push8=, 0 + i64.const $push2=, 8589934593 + i64.store pty+40($pop8), $pop2 + i32.const $push7=, 0 + i64.const $push3=, 17179869187 + i64.store pty+48($pop7), $pop3 + i32.const $push6=, 0 + i32.const $push5=, 0 + i32.store pty+80($pop6), $pop5 + i32.const $push4=, 0 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type pty,@object # @pty + .section .bss.pty,"aw",@nobits + .p2align 3 +pty: + .skip 88 + .size pty, 88 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/struct-ini-1.c.s b/src/binaryen/test/torture-s/struct-ini-1.c.s new file mode 100644 index 0000000000..e789bebf96 --- /dev/null +++ b/src/binaryen/test/torture-s/struct-ini-1.c.s @@ -0,0 +1,55 @@ + .text + .file "struct-ini-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push10=, 0 + i32.load8_u $push2=, object($pop10) + i32.const $push3=, 88 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %entry + i32.const $push11=, 0 + i32.load $push0=, object+4($pop11) + i32.const $push5=, 8 + i32.ne $push6=, $pop0, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#2: # %entry + i32.const $push12=, 0 + i32.load $push1=, object+8($pop12) + i32.const $push7=, 9 + i32.ne $push8=, $pop1, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %if.end + i32.const $push9=, 0 + call exit@FUNCTION, $pop9 + unreachable +.LBB0_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden object # @object + .type object,@object + .section .data.object,"aw",@progbits + .globl object + .p2align 2 +object: + .int8 88 # 0x58 + .skip 3 + .int32 8 # 0x8 + .int32 9 # 0x9 + .size object, 12 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/struct-ini-2.c.s b/src/binaryen/test/torture-s/struct-ini-2.c.s new file mode 100644 index 0000000000..ab84e6e0ef --- /dev/null +++ b/src/binaryen/test/torture-s/struct-ini-2.c.s @@ -0,0 +1,58 @@ + .text + .file "struct-ini-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + block + i32.const $push0=, 0 + i32.load16_u $push15=, x($pop0) + tee_local $push14=, $0=, $pop15 + i32.const $push1=, 15 + i32.and $push2=, $pop14, $pop1 + i32.const $push3=, 2 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + i32.const $push5=, 3840 + i32.and $push6=, $0, $pop5 + i32.const $push7=, 768 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#2: # %if.end7 + i32.const $push9=, 61440 + i32.and $push10=, $0, $pop9 + i32.const $push11=, 16384 + i32.ne $push12=, $pop10, $pop11 + br_if 0, $pop12 # 0: down to label0 +# BB#3: # %if.end13 + i32.const $push13=, 0 + call exit@FUNCTION, $pop13 + unreachable +.LBB0_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 2 +x: + .int8 2 # 0x2 + .int8 67 # 0x43 + .skip 2 + .size x, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/struct-ini-3.c.s b/src/binaryen/test/torture-s/struct-ini-3.c.s new file mode 100644 index 0000000000..f6f2db600b --- /dev/null +++ b/src/binaryen/test/torture-s/struct-ini-3.c.s @@ -0,0 +1,30 @@ + .text + .file "struct-ini-3.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden result # @result + .type result,@object + .section .data.result,"aw",@progbits + .globl result + .p2align 2 +result: + .int8 255 # 0xff + .int8 15 # 0xf + .skip 2 + .size result, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/struct-ini-4.c.s b/src/binaryen/test/torture-s/struct-ini-4.c.s new file mode 100644 index 0000000000..55b27cbf9e --- /dev/null +++ b/src/binaryen/test/torture-s/struct-ini-4.c.s @@ -0,0 +1,43 @@ + .text + .file "struct-ini-4.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load $push0=, s+12($pop3) + i32.const $push1=, 1 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden s # @s + .type s,@object + .section .data.s,"aw",@progbits + .globl s + .p2align 2 +s: + .skip 12 + .int32 1 # 0x1 + .int32 2 # 0x2 + .int32 3 # 0x3 + .size s, 24 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/struct-ret-1.c.s b/src/binaryen/test/torture-s/struct-ret-1.c.s new file mode 100644 index 0000000000..07076e3bdb --- /dev/null +++ b/src/binaryen/test/torture-s/struct-ret-1.c.s @@ -0,0 +1,410 @@ + .text + .file "struct-ret-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32, f64, i32 + .local i64, i32, f64, f64, i32 +# BB#0: # %entry + i32.const $push31=, 0 + i32.const $push29=, 0 + i32.load $push28=, __stack_pointer($pop29) + i32.const $push30=, 64 + i32.sub $push43=, $pop28, $pop30 + tee_local $push42=, $9=, $pop43 + i32.store __stack_pointer($pop31), $pop42 + i32.const $push0=, 12 + i32.add $push1=, $1, $pop0 + i64.load $5=, 0($pop1):p2align=2 + i32.const $push2=, 16 + i32.add $push3=, $4, $pop2 + i32.load $6=, 0($pop3) + f64.load $7=, 0($1) + i32.load $1=, 8($1) + f64.load $8=, 0($4) + i32.const $push5=, 40 + i32.add $push6=, $9, $pop5 + i64.load $push4=, 8($4) + i64.store 0($pop6), $pop4 + i32.const $push7=, 32 + i32.add $push8=, $9, $pop7 + f64.store 0($pop8), $8 + i32.const $push9=, 24 + i32.add $push10=, $9, $pop9 + f64.store 0($pop10), $3 + i32.const $push11=, 20 + i32.add $push12=, $9, $pop11 + i32.store 0($pop12), $2 + i32.const $push13=, 48 + i32.add $push14=, $9, $pop13 + i32.store 0($pop14), $6 + i64.store 12($9):p2align=2, $5 + i32.store 8($9), $1 + f64.store 0($9), $7 + i32.const $push16=, out + i32.const $push15=, .L.str + i32.call $drop=, sprintf@FUNCTION, $pop16, $pop15, $9 + i32.store8 33($0), $2 + i32.const $push41=, 32 + i32.add $push17=, $0, $pop41 + i32.const $push18=, 0 + i32.load8_u $push19=, f.xr+32($pop18) + i32.store8 0($pop17), $pop19 + i32.const $push40=, 24 + i32.add $push20=, $0, $pop40 + i32.const $push39=, 0 + i64.load $push21=, f.xr+24($pop39):p2align=0 + i64.store 0($pop20):p2align=0, $pop21 + i32.const $push38=, 16 + i32.add $push22=, $0, $pop38 + i32.const $push37=, 0 + i64.load $push23=, f.xr+16($pop37):p2align=0 + i64.store 0($pop22):p2align=0, $pop23 + i32.const $push24=, 8 + i32.add $push25=, $0, $pop24 + i32.const $push36=, 0 + i64.load $push26=, f.xr+8($pop36):p2align=0 + i64.store 0($pop25):p2align=0, $pop26 + i32.const $push35=, 0 + i64.load $push27=, f.xr($pop35):p2align=0 + i64.store 0($0):p2align=0, $pop27 + i32.const $push34=, 0 + i32.const $push32=, 64 + i32.add $push33=, $9, $pop32 + i32.store __stack_pointer($pop34), $pop33 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push39=, 0 + i32.const $push37=, 0 + i32.load $push36=, __stack_pointer($pop37) + i32.const $push38=, 256 + i32.sub $push76=, $pop36, $pop38 + tee_local $push75=, $0=, $pop76 + i32.store __stack_pointer($pop39), $pop75 + i32.const $push1=, 92 + i32.add $push2=, $0, $pop1 + i32.const $push74=, 0 + i64.load $push0=, B2+12($pop74):p2align=2 + i64.store 0($pop2):p2align=2, $pop0 + i32.const $push4=, 88 + i32.add $push5=, $0, $pop4 + i32.const $push73=, 0 + i32.load $push3=, B2+8($pop73) + i32.store 0($pop5), $pop3 + i32.const $push7=, 80 + i32.add $push8=, $0, $pop7 + i32.const $push72=, 0 + f64.load $push6=, B2($pop72) + f64.store 0($pop8), $pop6 + i32.const $push10=, 72 + i32.add $push11=, $0, $pop10 + i32.const $push71=, 0 + f64.load $push9=, d3($pop71) + f64.store 0($pop11), $pop9 + i32.const $push13=, 68 + i32.add $push14=, $0, $pop13 + i32.const $push70=, 0 + i32.load8_s $push12=, c2($pop70) + i32.store 0($pop14), $pop12 + i32.const $push69=, 0 + i64.load $push15=, B1+12($pop69):p2align=2 + i64.store 60($0):p2align=2, $pop15 + i32.const $push68=, 0 + i32.load $push16=, B1+8($pop68) + i32.store 56($0), $pop16 + i32.const $push67=, 0 + f64.load $push17=, B1($pop67) + f64.store 48($0), $pop17 + i32.const $push19=, out + i32.const $push18=, .L.str + i32.const $push40=, 48 + i32.add $push41=, $0, $pop40 + i32.call $drop=, sprintf@FUNCTION, $pop19, $pop18, $pop41 + i32.const $push42=, 144 + i32.add $push43=, $0, $pop42 + i32.const $push66=, out + i32.call $drop=, strcpy@FUNCTION, $pop43, $pop66 + i32.const $push44=, 24 + i32.add $push45=, $0, $pop44 + i32.const $push20=, 8 + i32.add $push21=, $pop45, $pop20 + i32.const $push65=, 0 + i64.load $push22=, B1+8($pop65) + i64.store 0($pop21), $pop22 + i32.const $push46=, 24 + i32.add $push47=, $0, $pop46 + i32.const $push23=, 16 + i32.add $push24=, $pop47, $pop23 + i32.const $push64=, 0 + i64.load $push25=, B1+16($pop64) + i64.store 0($pop24), $pop25 + i32.const $push63=, 8 + i32.add $push26=, $0, $pop63 + i32.const $push62=, 0 + i64.load $push27=, B2+8($pop62) + i64.store 0($pop26), $pop27 + i32.const $push61=, 16 + i32.add $push28=, $0, $pop61 + i32.const $push60=, 0 + i64.load $push29=, B2+16($pop60) + i64.store 0($pop28), $pop29 + i32.const $push59=, 0 + i64.load $push30=, B1($pop59) + i64.store 24($0), $pop30 + i32.const $push58=, 0 + i64.load $push31=, B2($pop58) + i64.store 0($0), $pop31 + i32.const $push48=, 104 + i32.add $push49=, $0, $pop48 + i32.const $push50=, 24 + i32.add $push51=, $0, $pop50 + i32.const $push57=, 0 + i32.load8_s $push33=, c2($pop57) + i32.const $push56=, 0 + f64.load $push32=, d3($pop56) + i32.const $push55=, 0 + i32.load $push34=, fp($pop55) + call_indirect $pop49, $pop51, $pop33, $pop32, $0, $pop34 + block + i32.const $push52=, 144 + i32.add $push53=, $0, $pop52 + i32.const $push54=, out + i32.call $push35=, strcmp@FUNCTION, $pop53, $pop54 + br_if 0, $pop35 # 0: down to label0 +# BB#1: # %if.end + i32.const $push77=, 0 + call exit@FUNCTION, $pop77 + unreachable +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden c1 # @c1 + .type c1,@object + .section .data.c1,"aw",@progbits + .globl c1 +c1: + .int8 97 # 0x61 + .size c1, 1 + + .hidden c2 # @c2 + .type c2,@object + .section .data.c2,"aw",@progbits + .globl c2 +c2: + .int8 127 # 0x7f + .size c2, 1 + + .hidden c3 # @c3 + .type c3,@object + .section .data.c3,"aw",@progbits + .globl c3 +c3: + .int8 128 # 0x80 + .size c3, 1 + + .hidden c4 # @c4 + .type c4,@object + .section .data.c4,"aw",@progbits + .globl c4 +c4: + .int8 255 # 0xff + .size c4, 1 + + .hidden c5 # @c5 + .type c5,@object + .section .data.c5,"aw",@progbits + .globl c5 +c5: + .int8 255 # 0xff + .size c5, 1 + + .hidden d1 # @d1 + .type d1,@object + .section .data.d1,"aw",@progbits + .globl d1 + .p2align 3 +d1: + .int64 4591870180066957722 # double 0.10000000000000001 + .size d1, 8 + + .hidden d2 # @d2 + .type d2,@object + .section .data.d2,"aw",@progbits + .globl d2 + .p2align 3 +d2: + .int64 4596373779694328218 # double 0.20000000000000001 + .size d2, 8 + + .hidden d3 # @d3 + .type d3,@object + .section .data.d3,"aw",@progbits + .globl d3 + .p2align 3 +d3: + .int64 4599075939470750515 # double 0.29999999999999999 + .size d3, 8 + + .hidden d4 # @d4 + .type d4,@object + .section .data.d4,"aw",@progbits + .globl d4 + .p2align 3 +d4: + .int64 4600877379321698714 # double 0.40000000000000002 + .size d4, 8 + + .hidden d5 # @d5 + .type d5,@object + .section .data.d5,"aw",@progbits + .globl d5 + .p2align 3 +d5: + .int64 4602678819172646912 # double 0.5 + .size d5, 8 + + .hidden d6 # @d6 + .type d6,@object + .section .data.d6,"aw",@progbits + .globl d6 + .p2align 3 +d6: + .int64 4603579539098121011 # double 0.59999999999999998 + .size d6, 8 + + .hidden d7 # @d7 + .type d7,@object + .section .data.d7,"aw",@progbits + .globl d7 + .p2align 3 +d7: + .int64 4604480259023595110 # double 0.69999999999999996 + .size d7, 8 + + .hidden d8 # @d8 + .type d8,@object + .section .data.d8,"aw",@progbits + .globl d8 + .p2align 3 +d8: + .int64 4605380978949069210 # double 0.80000000000000004 + .size d8, 8 + + .hidden d9 # @d9 + .type d9,@object + .section .data.d9,"aw",@progbits + .globl d9 + .p2align 3 +d9: + .int64 4606281698874543309 # double 0.90000000000000002 + .size d9, 8 + + .hidden B1 # @B1 + .type B1,@object + .section .data.B1,"aw",@progbits + .globl B1 + .p2align 3 +B1: + .int64 4591870180066957722 # double 0.10000000000000001 + .int32 1 # 0x1 + .int32 2 # 0x2 + .int32 3 # 0x3 + .skip 4 + .size B1, 24 + + .hidden B2 # @B2 + .type B2,@object + .section .data.B2,"aw",@progbits + .globl B2 + .p2align 3 +B2: + .int64 4596373779694328218 # double 0.20000000000000001 + .int32 5 # 0x5 + .int32 4 # 0x4 + .int32 3 # 0x3 + .skip 4 + .size B2, 24 + + .hidden X1 # @X1 + .type X1,@object + .section .data.X1,"aw",@progbits + .globl X1 +X1: + .asciz "abcdefghijklmnopqrstuvwxyzABCDEF" + .int8 71 # 0x47 + .size X1, 34 + + .hidden X2 # @X2 + .type X2,@object + .section .data.X2,"aw",@progbits + .globl X2 +X2: + .asciz "123\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + .int8 57 # 0x39 + .size X2, 34 + + .hidden X3 # @X3 + .type X3,@object + .section .data.X3,"aw",@progbits + .globl X3 +X3: + .asciz "return-return-return\000\000\000\000\000\000\000\000\000\000\000\000" + .int8 82 # 0x52 + .size X3, 34 + + .type f.xr,@object # @f.xr + .section .rodata.f.xr,"a",@progbits +f.xr: + .asciz "return val\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + .int8 82 # 0x52 + .size f.xr, 34 + + .hidden out # @out + .type out,@object + .section .bss.out,"aw",@nobits + .globl out + .p2align 4 +out: + .skip 100 + .size out, 100 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "X f(B,char,double,B):({%g,{%d,%d,%d}},'%c',%g,{%g,{%d,%d,%d}})" + .size .L.str, 63 + + .hidden fp # @fp + .type fp,@object + .section .data.fp,"aw",@progbits + .globl fp + .p2align 2 +fp: + .int32 f@FUNCTION + .size fp, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype sprintf, i32, i32, i32 + .functype strcpy, i32, i32, i32 + .functype strcmp, i32, i32, i32 + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/struct-ret-2.c.s b/src/binaryen/test/torture-s/struct-ret-2.c.s new file mode 100644 index 0000000000..487db26f1b --- /dev/null +++ b/src/binaryen/test/torture-s/struct-ret-2.c.s @@ -0,0 +1,45 @@ + .text + .file "struct-ret-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .result i32 +# BB#0: # %entry + i32.const $push0=, 171 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.g,"ax",@progbits + .hidden g # -- Begin function g + .globl g + .type g,@function +g: # @g + .result i32 +# BB#0: # %entry + i32.const $push0=, 4660 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size g, .Lfunc_end1-g + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/switch-1.c.s b/src/binaryen/test/torture-s/switch-1.c.s new file mode 100644 index 0000000000..b86f693fea --- /dev/null +++ b/src/binaryen/test/torture-s/switch-1.c.s @@ -0,0 +1,157 @@ + .text + .file "switch-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, -4 + i32.add $push10=, $0, $pop0 + tee_local $push9=, $0=, $pop10 + i32.const $push1=, 7 + i32.gt_u $push2=, $pop9, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %switch.lookup + i32.const $push4=, 2 + i32.shl $push5=, $0, $pop4 + i32.const $push6=, .Lswitch.table.main + i32.add $push7=, $pop5, $pop6 + i32.load $push8=, 0($pop7) + return $pop8 +.LBB0_2: # %return + end_block # label0: + i32.const $push3=, 31 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32 + .result i32 + .local i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $2=, -5 + i32.const $1=, .Lswitch.table.main-20 +.LBB1_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label2: + i32.const $push12=, 4 + i32.add $3=, $2, $pop12 + i32.const $4=, 31 + block + i32.const $push11=, 7 + i32.gt_u $push0=, $2, $pop11 + br_if 0, $pop0 # 0: down to label3 +# BB#2: # %switch.lookup + # in Loop: Header=BB1_1 Depth=1 + i32.load $4=, 0($1) +.LBB1_3: # %foo.exit + # in Loop: Header=BB1_1 Depth=1 + end_block # label3: + block + block + block + i32.const $push16=, -4 + i32.add $push15=, $3, $pop16 + tee_local $push14=, $5=, $pop15 + i32.const $push13=, 7 + i32.gt_u $push1=, $pop14, $pop13 + br_if 0, $pop1 # 0: down to label6 +# BB#4: # %foo.exit + # in Loop: Header=BB1_1 Depth=1 + block + block + block + block + br_table $5, 0, 4, 2, 4, 4, 1, 4, 3, 0 # 0: down to label10 + # 4: down to label6 + # 2: down to label8 + # 1: down to label9 + # 3: down to label7 +.LBB1_5: # %if.then + # in Loop: Header=BB1_1 Depth=1 + end_block # label10: + i32.const $push17=, 30 + i32.eq $push5=, $4, $pop17 + br_if 4, $pop5 # 4: down to label5 + br 7 # 7: down to label1 +.LBB1_6: # %if.then11 + # in Loop: Header=BB1_1 Depth=1 + end_block # label9: + i32.const $push18=, 30 + i32.eq $push3=, $4, $pop18 + br_if 3, $pop3 # 3: down to label5 + br 6 # 6: down to label1 +.LBB1_7: # %if.then5 + # in Loop: Header=BB1_1 Depth=1 + end_block # label8: + i32.const $push19=, 30 + i32.eq $push4=, $4, $pop19 + br_if 2, $pop4 # 2: down to label5 + br 5 # 5: down to label1 +.LBB1_8: # %if.then17 + # in Loop: Header=BB1_1 Depth=1 + end_block # label7: + i32.const $push20=, 30 + i32.eq $push2=, $4, $pop20 + br_if 1, $pop2 # 1: down to label5 + br 4 # 4: down to label1 +.LBB1_9: # %if.else21 + # in Loop: Header=BB1_1 Depth=1 + end_block # label6: + i32.const $push21=, 31 + i32.ne $push6=, $4, $pop21 + br_if 3, $pop6 # 3: down to label1 +# BB#10: # %for.inc + # in Loop: Header=BB1_1 Depth=1 + i32.const $push22=, 64 + i32.gt_s $push7=, $3, $pop22 + br_if 1, $pop7 # 1: down to label4 +.LBB1_11: # %for.body.backedge + # in Loop: Header=BB1_1 Depth=1 + end_block # label5: + i32.const $push10=, 4 + i32.add $1=, $1, $pop10 + i32.const $push9=, 1 + i32.add $2=, $2, $pop9 + br 1 # 1: up to label2 +.LBB1_12: # %for.end + end_block # label4: + end_loop + i32.const $push8=, 0 + return $pop8 +.LBB1_13: # %if.then3 + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .Lswitch.table.main,@object # @switch.table.main + .section .rodata.cst32,"aM",@progbits,32 + .p2align 4 +.Lswitch.table.main: + .int32 30 # 0x1e + .int32 31 # 0x1f + .int32 30 # 0x1e + .int32 31 # 0x1f + .int32 31 # 0x1f + .int32 30 # 0x1e + .int32 31 # 0x1f + .int32 30 # 0x1e + .size .Lswitch.table.main, 32 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/tstdi-1.c.s b/src/binaryen/test/torture-s/tstdi-1.c.s new file mode 100644 index 0000000000..b44fb0b47c --- /dev/null +++ b/src/binaryen/test/torture-s/tstdi-1.c.s @@ -0,0 +1,125 @@ + .text + .file "tstdi-1.c" + .section .text.feq,"ax",@progbits + .hidden feq # -- Begin function feq + .globl feq + .type feq,@function +feq: # @feq + .param i64 + .result i32 +# BB#0: # %entry + i32.const $push2=, 13 + i32.const $push1=, 140 + i64.eqz $push0=, $0 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end0: + .size feq, .Lfunc_end0-feq + # -- End function + .section .text.fne,"ax",@progbits + .hidden fne # -- Begin function fne + .globl fne + .type fne,@function +fne: # @fne + .param i64 + .result i32 +# BB#0: # %entry + i32.const $push2=, 140 + i32.const $push1=, 13 + i64.eqz $push0=, $0 + i32.select $push3=, $pop2, $pop1, $pop0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size fne, .Lfunc_end1-fne + # -- End function + .section .text.flt,"ax",@progbits + .hidden flt # -- Begin function flt + .globl flt + .type flt,@function +flt: # @flt + .param i64 + .result i32 +# BB#0: # %entry + i32.const $push3=, 13 + i32.const $push2=, 140 + i64.const $push0=, 0 + i64.lt_s $push1=, $0, $pop0 + i32.select $push4=, $pop3, $pop2, $pop1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end2: + .size flt, .Lfunc_end2-flt + # -- End function + .section .text.fge,"ax",@progbits + .hidden fge # -- Begin function fge + .globl fge + .type fge,@function +fge: # @fge + .param i64 + .result i32 +# BB#0: # %entry + i32.const $push3=, 13 + i32.const $push2=, 140 + i64.const $push0=, -1 + i64.gt_s $push1=, $0, $pop0 + i32.select $push4=, $pop3, $pop2, $pop1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end3: + .size fge, .Lfunc_end3-fge + # -- End function + .section .text.fgt,"ax",@progbits + .hidden fgt # -- Begin function fgt + .globl fgt + .type fgt,@function +fgt: # @fgt + .param i64 + .result i32 +# BB#0: # %entry + i32.const $push3=, 13 + i32.const $push2=, 140 + i64.const $push0=, 0 + i64.gt_s $push1=, $0, $pop0 + i32.select $push4=, $pop3, $pop2, $pop1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end4: + .size fgt, .Lfunc_end4-fgt + # -- End function + .section .text.fle,"ax",@progbits + .hidden fle # -- Begin function fle + .globl fle + .type fle,@function +fle: # @fle + .param i64 + .result i32 +# BB#0: # %entry + i32.const $push3=, 13 + i32.const $push2=, 140 + i64.const $push0=, 1 + i64.lt_s $push1=, $0, $pop0 + i32.select $push4=, $pop3, $pop2, $pop1 + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end5: + .size fle, .Lfunc_end5-fle + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.end140 + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end6: + .size main, .Lfunc_end6-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/unroll-1.c.s b/src/binaryen/test/torture-s/unroll-1.c.s new file mode 100644 index 0000000000..dcee48fb9e --- /dev/null +++ b/src/binaryen/test/torture-s/unroll-1.c.s @@ -0,0 +1,34 @@ + .text + .file "unroll-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.add $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %while.body + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/usmul.c.s b/src/binaryen/test/torture-s/usmul.c.s new file mode 100644 index 0000000000..baf8174ab8 --- /dev/null +++ b/src/binaryen/test/torture-s/usmul.c.s @@ -0,0 +1,109 @@ + .text + .file "usmul.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.mul $push0=, $1, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.mul $push0=, $1, $0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push0=, -2 + i32.const $push33=, 65535 + i32.call $push1=, foo@FUNCTION, $pop0, $pop33 + i32.const $push2=, -131070 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 2 + i32.const $push34=, 65535 + i32.call $push5=, foo@FUNCTION, $pop4, $pop34 + i32.const $push6=, 131070 + i32.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#2: # %if.end4 + i32.const $push8=, -32768 + i32.const $push35=, 32768 + i32.call $push9=, foo@FUNCTION, $pop8, $pop35 + i32.const $push10=, -1073741824 + i32.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#3: # %if.end8 + i32.const $push12=, 32767 + i32.const $push36=, 32768 + i32.call $push13=, foo@FUNCTION, $pop12, $pop36 + i32.const $push14=, 1073709056 + i32.ne $push15=, $pop13, $pop14 + br_if 0, $pop15 # 0: down to label0 +# BB#4: # %if.end12 + i32.const $push37=, 65535 + i32.const $push16=, -2 + i32.call $push17=, bar@FUNCTION, $pop37, $pop16 + i32.const $push18=, -131070 + i32.ne $push19=, $pop17, $pop18 + br_if 0, $pop19 # 0: down to label0 +# BB#5: # %if.end16 + i32.const $push38=, 65535 + i32.const $push20=, 2 + i32.call $push21=, bar@FUNCTION, $pop38, $pop20 + i32.const $push22=, 131070 + i32.ne $push23=, $pop21, $pop22 + br_if 0, $pop23 # 0: down to label0 +# BB#6: # %if.end20 + i32.const $push39=, 32768 + i32.const $push24=, -32768 + i32.call $push25=, bar@FUNCTION, $pop39, $pop24 + i32.const $push26=, -1073741824 + i32.ne $push27=, $pop25, $pop26 + br_if 0, $pop27 # 0: down to label0 +# BB#7: # %if.end24 + i32.const $push40=, 32768 + i32.const $push28=, 32767 + i32.call $push29=, bar@FUNCTION, $pop40, $pop28 + i32.const $push30=, 1073709056 + i32.ne $push31=, $pop29, $pop30 + br_if 0, $pop31 # 0: down to label0 +# BB#8: # %if.end28 + i32.const $push32=, 0 + call exit@FUNCTION, $pop32 + unreachable +.LBB2_9: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-1.c.s b/src/binaryen/test/torture-s/va-arg-1.c.s new file mode 100644 index 0000000000..2e0cb658a0 --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-1.c.s @@ -0,0 +1,87 @@ + .text + .file "va-arg-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push14=, 0 + i32.const $push12=, 0 + i32.load $push11=, __stack_pointer($pop12) + i32.const $push13=, 16 + i32.sub $push21=, $pop11, $pop13 + tee_local $push20=, $12=, $pop21 + i32.store __stack_pointer($pop14), $pop20 + i32.const $push0=, 4 + i32.add $push19=, $9, $pop0 + tee_local $push18=, $10=, $pop19 + i32.store 12($12), $pop18 + block + i32.load $push1=, 0($9) + i32.const $push2=, 10 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 8 + i32.add $push23=, $9, $pop4 + tee_local $push22=, $11=, $pop23 + i32.store 12($12), $pop22 + i32.load $push5=, 0($10) + i32.const $push6=, 11 + i32.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#2: # %if.end6 + i32.const $push8=, 12 + i32.add $push9=, $9, $pop8 + i32.store 12($12), $pop9 + i32.load $push10=, 0($11) + br_if 0, $pop10 # 0: down to label0 +# BB#3: # %if.end11 + i32.const $push17=, 0 + i32.const $push15=, 16 + i32.add $push16=, $12, $pop15 + i32.store __stack_pointer($pop17), $pop16 + return $9 +.LBB0_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push8=, $pop2, $pop4 + tee_local $push7=, $0=, $pop8 + i32.store __stack_pointer($pop5), $pop7 + i32.const $push0=, 0 + i32.store 8($0), $pop0 + i64.const $push1=, 47244640266 + i64.store 0($0), $pop1 + i32.call $drop=, f@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0 + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-10.c.s b/src/binaryen/test/torture-s/va-arg-10.c.s new file mode 100644 index 0000000000..f9731cfd03 --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-10.c.s @@ -0,0 +1,984 @@ + .text + .file "va-arg-10.c" + .section .text.to_hex,"ax",@progbits + .hidden to_hex # -- Begin function to_hex + .globl to_hex + .type to_hex,@function +to_hex: # @to_hex + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 16 + i32.ge_u $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push2=, .L.str + i32.add $push3=, $0, $pop2 + i32.load8_s $push4=, 0($pop3) + return $pop4 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size to_hex, .Lfunc_end0-to_hex + # -- End function + .section .text.fap,"ax",@progbits + .hidden fap # -- Begin function fap + .globl fap + .type fap,@function +fap: # @fap + .param i32, i32, i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push20=, 0 + i32.const $push18=, 0 + i32.load $push17=, __stack_pointer($pop18) + i32.const $push19=, 16 + i32.sub $push25=, $pop17, $pop19 + tee_local $push24=, $6=, $pop25 + i32.store __stack_pointer($pop20), $pop24 + i32.store 12($6), $2 + i32.load $push2=, 12($6) + i32.store 8($6), $pop2 + block + i32.call $push5=, strlen@FUNCTION, $1 + i32.const $push3=, 16 + i32.sub $push4=, $pop3, $0 + i32.ne $push6=, $pop5, $pop4 + br_if 0, $pop6 # 0: down to label1 +# BB#1: # %if.end + block + i32.load8_u $push27=, 0($1) + tee_local $push26=, $5=, $pop27 + i32.eqz $push48=, $pop26 + br_if 0, $pop48 # 0: down to label2 +# BB#2: # %while.body.lr.ph + i32.const $push28=, 1 + i32.add $0=, $1, $pop28 + i32.load $2=, 12($6) + copy_local $4=, $5 +.LBB1_3: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.const $push34=, 4 + i32.add $push33=, $2, $pop34 + tee_local $push32=, $3=, $pop33 + i32.store 12($6), $pop32 + i32.load $push31=, 0($2) + tee_local $push30=, $2=, $pop31 + i32.const $push29=, 16 + i32.ge_u $push7=, $pop30, $pop29 + br_if 2, $pop7 # 2: down to label1 +# BB#4: # %to_hex.exit + # in Loop: Header=BB1_3 Depth=1 + i32.const $push36=, .L.str + i32.add $push9=, $2, $pop36 + i32.load8_u $push10=, 0($pop9) + i32.const $push35=, 255 + i32.and $push8=, $4, $pop35 + i32.ne $push11=, $pop10, $pop8 + br_if 2, $pop11 # 2: down to label1 +# BB#5: # %while.cond + # in Loop: Header=BB1_3 Depth=1 + i32.load8_u $4=, 0($0) + i32.const $push37=, 1 + i32.add $push0=, $0, $pop37 + copy_local $0=, $pop0 + copy_local $2=, $3 + br_if 0, $4 # 0: up to label3 +# BB#6: # %while.end + end_loop + i32.eqz $push49=, $5 + br_if 0, $pop49 # 0: down to label2 +# BB#7: # %while.body8.lr.ph + i32.const $push38=, 1 + i32.add $0=, $1, $pop38 + i32.load $2=, 8($6) +.LBB1_8: # %while.body8 + # =>This Inner Loop Header: Depth=1 + loop # label4: + i32.const $push44=, 4 + i32.add $push43=, $2, $pop44 + tee_local $push42=, $4=, $pop43 + i32.store 8($6), $pop42 + i32.load $push41=, 0($2) + tee_local $push40=, $2=, $pop41 + i32.const $push39=, 16 + i32.ge_u $push12=, $pop40, $pop39 + br_if 2, $pop12 # 2: down to label1 +# BB#9: # %to_hex.exit28 + # in Loop: Header=BB1_8 Depth=1 + i32.const $push46=, .L.str + i32.add $push14=, $2, $pop46 + i32.load8_u $push15=, 0($pop14) + i32.const $push45=, 255 + i32.and $push13=, $5, $pop45 + i32.ne $push16=, $pop15, $pop13 + br_if 2, $pop16 # 2: down to label1 +# BB#10: # %while.cond6 + # in Loop: Header=BB1_8 Depth=1 + i32.load8_u $5=, 0($0) + i32.const $push47=, 1 + i32.add $push1=, $0, $pop47 + copy_local $0=, $pop1 + copy_local $2=, $4 + br_if 0, $5 # 0: up to label4 +.LBB1_11: # %while.end18 + end_loop + end_block # label2: + i32.const $push23=, 0 + i32.const $push21=, 16 + i32.add $push22=, $6, $pop21 + i32.store __stack_pointer($pop23), $pop22 + return +.LBB1_12: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size fap, .Lfunc_end1-fap + # -- End function + .section .text.f0,"ax",@progbits + .hidden f0 # -- Begin function f0 + .globl f0 + .type f0,@function +f0: # @f0 + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push9=, $pop1, $pop3 + tee_local $push8=, $2=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.store 12($2), $1 + i32.const $push0=, 0 + call fap@FUNCTION, $pop0, $0, $1 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $2, $pop5 + i32.store __stack_pointer($pop7), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end2: + .size f0, .Lfunc_end2-f0 + # -- End function + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32, i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push9=, $pop1, $pop3 + tee_local $push8=, $3=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.store 12($3), $2 + i32.const $push0=, 1 + call fap@FUNCTION, $pop0, $1, $2 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $3, $pop5 + i32.store __stack_pointer($pop7), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end3: + .size f1, .Lfunc_end3-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param i32, i32, i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push9=, $pop1, $pop3 + tee_local $push8=, $4=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.store 12($4), $3 + i32.const $push0=, 2 + call fap@FUNCTION, $pop0, $2, $3 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $4, $pop5 + i32.store __stack_pointer($pop7), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end4: + .size f2, .Lfunc_end4-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .param i32, i32, i32, i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push9=, $pop1, $pop3 + tee_local $push8=, $5=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.store 12($5), $4 + i32.const $push0=, 3 + call fap@FUNCTION, $pop0, $3, $4 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $5, $pop5 + i32.store __stack_pointer($pop7), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end5: + .size f3, .Lfunc_end5-f3 + # -- End function + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 + .param i32, i32, i32, i32, i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push9=, $pop1, $pop3 + tee_local $push8=, $6=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.store 12($6), $5 + i32.const $push0=, 4 + call fap@FUNCTION, $pop0, $4, $5 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $6, $pop5 + i32.store __stack_pointer($pop7), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end6: + .size f4, .Lfunc_end6-f4 + # -- End function + .section .text.f5,"ax",@progbits + .hidden f5 # -- Begin function f5 + .globl f5 + .type f5,@function +f5: # @f5 + .param i32, i32, i32, i32, i32, i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push9=, $pop1, $pop3 + tee_local $push8=, $7=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.store 12($7), $6 + i32.const $push0=, 5 + call fap@FUNCTION, $pop0, $5, $6 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $7, $pop5 + i32.store __stack_pointer($pop7), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end7: + .size f5, .Lfunc_end7-f5 + # -- End function + .section .text.f6,"ax",@progbits + .hidden f6 # -- Begin function f6 + .globl f6 + .type f6,@function +f6: # @f6 + .param i32, i32, i32, i32, i32, i32, i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push9=, $pop1, $pop3 + tee_local $push8=, $8=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.store 12($8), $7 + i32.const $push0=, 6 + call fap@FUNCTION, $pop0, $6, $7 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $8, $pop5 + i32.store __stack_pointer($pop7), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end8: + .size f6, .Lfunc_end8-f6 + # -- End function + .section .text.f7,"ax",@progbits + .hidden f7 # -- Begin function f7 + .globl f7 + .type f7,@function +f7: # @f7 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push9=, $pop1, $pop3 + tee_local $push8=, $9=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.store 12($9), $8 + i32.const $push0=, 7 + call fap@FUNCTION, $pop0, $7, $8 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $9, $pop5 + i32.store __stack_pointer($pop7), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end9: + .size f7, .Lfunc_end9-f7 + # -- End function + .section .text.f8,"ax",@progbits + .hidden f8 # -- Begin function f8 + .globl f8 + .type f8,@function +f8: # @f8 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push9=, $pop1, $pop3 + tee_local $push8=, $10=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.store 12($10), $9 + i32.const $push0=, 8 + call fap@FUNCTION, $pop0, $8, $9 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $10, $pop5 + i32.store __stack_pointer($pop7), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end10: + .size f8, .Lfunc_end10-f8 + # -- End function + .section .text.f9,"ax",@progbits + .hidden f9 # -- Begin function f9 + .globl f9 + .type f9,@function +f9: # @f9 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push9=, $pop1, $pop3 + tee_local $push8=, $11=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.store 12($11), $10 + i32.const $push0=, 9 + call fap@FUNCTION, $pop0, $9, $10 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $11, $pop5 + i32.store __stack_pointer($pop7), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end11: + .size f9, .Lfunc_end11-f9 + # -- End function + .section .text.f10,"ax",@progbits + .hidden f10 # -- Begin function f10 + .globl f10 + .type f10,@function +f10: # @f10 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push9=, $pop1, $pop3 + tee_local $push8=, $12=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.store 12($12), $11 + i32.const $push0=, 10 + call fap@FUNCTION, $pop0, $10, $11 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $12, $pop5 + i32.store __stack_pointer($pop7), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end12: + .size f10, .Lfunc_end12-f10 + # -- End function + .section .text.f11,"ax",@progbits + .hidden f11 # -- Begin function f11 + .globl f11 + .type f11,@function +f11: # @f11 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push9=, $pop1, $pop3 + tee_local $push8=, $13=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.store 12($13), $12 + i32.const $push0=, 11 + call fap@FUNCTION, $pop0, $11, $12 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $13, $pop5 + i32.store __stack_pointer($pop7), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end13: + .size f11, .Lfunc_end13-f11 + # -- End function + .section .text.f12,"ax",@progbits + .hidden f12 # -- Begin function f12 + .globl f12 + .type f12,@function +f12: # @f12 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push9=, $pop1, $pop3 + tee_local $push8=, $14=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.store 12($14), $13 + i32.const $push0=, 12 + call fap@FUNCTION, $pop0, $12, $13 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $14, $pop5 + i32.store __stack_pointer($pop7), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end14: + .size f12, .Lfunc_end14-f12 + # -- End function + .section .text.f13,"ax",@progbits + .hidden f13 # -- Begin function f13 + .globl f13 + .type f13,@function +f13: # @f13 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push9=, $pop1, $pop3 + tee_local $push8=, $15=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.store 12($15), $14 + i32.const $push0=, 13 + call fap@FUNCTION, $pop0, $13, $14 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $15, $pop5 + i32.store __stack_pointer($pop7), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end15: + .size f13, .Lfunc_end15-f13 + # -- End function + .section .text.f14,"ax",@progbits + .hidden f14 # -- Begin function f14 + .globl f14 + .type f14,@function +f14: # @f14 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push9=, $pop1, $pop3 + tee_local $push8=, $16=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.store 12($16), $15 + i32.const $push0=, 14 + call fap@FUNCTION, $pop0, $14, $15 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $16, $pop5 + i32.store __stack_pointer($pop7), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end16: + .size f14, .Lfunc_end16-f14 + # -- End function + .section .text.f15,"ax",@progbits + .hidden f15 # -- Begin function f15 + .globl f15 + .type f15,@function +f15: # @f15 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push9=, $pop1, $pop3 + tee_local $push8=, $17=, $pop9 + i32.store __stack_pointer($pop4), $pop8 + i32.store 12($17), $16 + i32.const $push0=, 15 + call fap@FUNCTION, $pop0, $15, $16 + i32.const $push7=, 0 + i32.const $push5=, 16 + i32.add $push6=, $17, $pop5 + i32.store __stack_pointer($pop7), $pop6 + # fallthrough-return + .endfunc +.Lfunc_end17: + .size f15, .Lfunc_end17-f15 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push84=, 0 + i32.const $push82=, 0 + i32.load $push81=, __stack_pointer($pop82) + i32.const $push83=, 640 + i32.sub $push292=, $pop81, $pop83 + tee_local $push291=, $0=, $pop292 + i32.store __stack_pointer($pop84), $pop291 + i32.const $push85=, 576 + i32.add $push86=, $0, $pop85 + i32.const $push0=, 56 + i32.add $push1=, $pop86, $pop0 + i64.const $push2=, 64424509454 + i64.store 0($pop1), $pop2 + i32.const $push87=, 576 + i32.add $push88=, $0, $pop87 + i32.const $push3=, 48 + i32.add $push4=, $pop88, $pop3 + i64.const $push5=, 55834574860 + i64.store 0($pop4), $pop5 + i32.const $push89=, 576 + i32.add $push90=, $0, $pop89 + i32.const $push6=, 40 + i32.add $push7=, $pop90, $pop6 + i64.const $push8=, 47244640266 + i64.store 0($pop7), $pop8 + i32.const $push91=, 576 + i32.add $push92=, $0, $pop91 + i32.const $push9=, 32 + i32.add $push10=, $pop92, $pop9 + i64.const $push11=, 38654705672 + i64.store 0($pop10), $pop11 + i32.const $push93=, 576 + i32.add $push94=, $0, $pop93 + i32.const $push12=, 24 + i32.add $push13=, $pop94, $pop12 + i64.const $push14=, 30064771078 + i64.store 0($pop13), $pop14 + i32.const $push95=, 576 + i32.add $push96=, $0, $pop95 + i32.const $push15=, 16 + i32.add $push16=, $pop96, $pop15 + i64.const $push17=, 21474836484 + i64.store 0($pop16), $pop17 + i64.const $push18=, 12884901890 + i64.store 584($0), $pop18 + i64.const $push19=, 4294967296 + i64.store 576($0), $pop19 + i32.const $push20=, .L.str + i32.const $push97=, 576 + i32.add $push98=, $0, $pop97 + call f0@FUNCTION, $pop20, $pop98 + i32.const $push99=, 512 + i32.add $push100=, $0, $pop99 + i32.const $push290=, 56 + i32.add $push21=, $pop100, $pop290 + i32.const $push22=, 15 + i32.store 0($pop21), $pop22 + i32.const $push101=, 512 + i32.add $push102=, $0, $pop101 + i32.const $push289=, 48 + i32.add $push23=, $pop102, $pop289 + i64.const $push24=, 60129542157 + i64.store 0($pop23), $pop24 + i32.const $push103=, 512 + i32.add $push104=, $0, $pop103 + i32.const $push288=, 40 + i32.add $push25=, $pop104, $pop288 + i64.const $push26=, 51539607563 + i64.store 0($pop25), $pop26 + i32.const $push105=, 512 + i32.add $push106=, $0, $pop105 + i32.const $push287=, 32 + i32.add $push27=, $pop106, $pop287 + i64.const $push28=, 42949672969 + i64.store 0($pop27), $pop28 + i32.const $push107=, 512 + i32.add $push108=, $0, $pop107 + i32.const $push286=, 24 + i32.add $push29=, $pop108, $pop286 + i64.const $push30=, 34359738375 + i64.store 0($pop29), $pop30 + i32.const $push109=, 512 + i32.add $push110=, $0, $pop109 + i32.const $push285=, 16 + i32.add $push31=, $pop110, $pop285 + i64.const $push32=, 25769803781 + i64.store 0($pop31), $pop32 + i64.const $push33=, 17179869187 + i64.store 520($0), $pop33 + i64.const $push34=, 8589934593 + i64.store 512($0), $pop34 + i32.const $push35=, .L.str+1 + i32.const $push111=, 512 + i32.add $push112=, $0, $pop111 + call f1@FUNCTION, $0, $pop35, $pop112 + i32.const $push113=, 448 + i32.add $push114=, $0, $pop113 + i32.const $push284=, 48 + i32.add $push36=, $pop114, $pop284 + i64.const $push283=, 64424509454 + i64.store 0($pop36), $pop283 + i32.const $push115=, 448 + i32.add $push116=, $0, $pop115 + i32.const $push282=, 40 + i32.add $push37=, $pop116, $pop282 + i64.const $push281=, 55834574860 + i64.store 0($pop37), $pop281 + i32.const $push117=, 448 + i32.add $push118=, $0, $pop117 + i32.const $push280=, 32 + i32.add $push38=, $pop118, $pop280 + i64.const $push279=, 47244640266 + i64.store 0($pop38), $pop279 + i32.const $push119=, 448 + i32.add $push120=, $0, $pop119 + i32.const $push278=, 24 + i32.add $push39=, $pop120, $pop278 + i64.const $push277=, 38654705672 + i64.store 0($pop39), $pop277 + i32.const $push121=, 448 + i32.add $push122=, $0, $pop121 + i32.const $push276=, 16 + i32.add $push40=, $pop122, $pop276 + i64.const $push275=, 30064771078 + i64.store 0($pop40), $pop275 + i64.const $push274=, 21474836484 + i64.store 456($0), $pop274 + i64.const $push273=, 12884901890 + i64.store 448($0), $pop273 + i32.const $push41=, .L.str+2 + i32.const $push123=, 448 + i32.add $push124=, $0, $pop123 + call f2@FUNCTION, $0, $0, $pop41, $pop124 + i32.const $push125=, 384 + i32.add $push126=, $0, $pop125 + i32.const $push272=, 48 + i32.add $push42=, $pop126, $pop272 + i32.const $push271=, 15 + i32.store 0($pop42), $pop271 + i32.const $push127=, 384 + i32.add $push128=, $0, $pop127 + i32.const $push270=, 40 + i32.add $push43=, $pop128, $pop270 + i64.const $push269=, 60129542157 + i64.store 0($pop43), $pop269 + i32.const $push129=, 384 + i32.add $push130=, $0, $pop129 + i32.const $push268=, 32 + i32.add $push44=, $pop130, $pop268 + i64.const $push267=, 51539607563 + i64.store 0($pop44), $pop267 + i32.const $push131=, 384 + i32.add $push132=, $0, $pop131 + i32.const $push266=, 24 + i32.add $push45=, $pop132, $pop266 + i64.const $push265=, 42949672969 + i64.store 0($pop45), $pop265 + i32.const $push133=, 384 + i32.add $push134=, $0, $pop133 + i32.const $push264=, 16 + i32.add $push46=, $pop134, $pop264 + i64.const $push263=, 34359738375 + i64.store 0($pop46), $pop263 + i64.const $push262=, 25769803781 + i64.store 392($0), $pop262 + i64.const $push261=, 17179869187 + i64.store 384($0), $pop261 + i32.const $push47=, .L.str+3 + i32.const $push135=, 384 + i32.add $push136=, $0, $pop135 + call f3@FUNCTION, $0, $0, $0, $pop47, $pop136 + i32.const $push137=, 336 + i32.add $push138=, $0, $pop137 + i32.const $push260=, 40 + i32.add $push48=, $pop138, $pop260 + i64.const $push259=, 64424509454 + i64.store 0($pop48), $pop259 + i32.const $push139=, 336 + i32.add $push140=, $0, $pop139 + i32.const $push258=, 32 + i32.add $push49=, $pop140, $pop258 + i64.const $push257=, 55834574860 + i64.store 0($pop49), $pop257 + i32.const $push141=, 336 + i32.add $push142=, $0, $pop141 + i32.const $push256=, 24 + i32.add $push50=, $pop142, $pop256 + i64.const $push255=, 47244640266 + i64.store 0($pop50), $pop255 + i32.const $push143=, 336 + i32.add $push144=, $0, $pop143 + i32.const $push254=, 16 + i32.add $push51=, $pop144, $pop254 + i64.const $push253=, 38654705672 + i64.store 0($pop51), $pop253 + i64.const $push252=, 30064771078 + i64.store 344($0), $pop252 + i64.const $push251=, 21474836484 + i64.store 336($0), $pop251 + i32.const $push52=, .L.str+4 + i32.const $push145=, 336 + i32.add $push146=, $0, $pop145 + call f4@FUNCTION, $0, $0, $0, $0, $pop52, $pop146 + i32.const $push147=, 288 + i32.add $push148=, $0, $pop147 + i32.const $push250=, 40 + i32.add $push53=, $pop148, $pop250 + i32.const $push249=, 15 + i32.store 0($pop53), $pop249 + i32.const $push149=, 288 + i32.add $push150=, $0, $pop149 + i32.const $push248=, 32 + i32.add $push54=, $pop150, $pop248 + i64.const $push247=, 60129542157 + i64.store 0($pop54), $pop247 + i32.const $push151=, 288 + i32.add $push152=, $0, $pop151 + i32.const $push246=, 24 + i32.add $push55=, $pop152, $pop246 + i64.const $push245=, 51539607563 + i64.store 0($pop55), $pop245 + i32.const $push153=, 288 + i32.add $push154=, $0, $pop153 + i32.const $push244=, 16 + i32.add $push56=, $pop154, $pop244 + i64.const $push243=, 42949672969 + i64.store 0($pop56), $pop243 + i64.const $push242=, 34359738375 + i64.store 296($0), $pop242 + i64.const $push241=, 25769803781 + i64.store 288($0), $pop241 + i32.const $push57=, .L.str+5 + i32.const $push155=, 288 + i32.add $push156=, $0, $pop155 + call f5@FUNCTION, $0, $0, $0, $0, $0, $pop57, $pop156 + i32.const $push157=, 240 + i32.add $push158=, $0, $pop157 + i32.const $push240=, 32 + i32.add $push58=, $pop158, $pop240 + i64.const $push239=, 64424509454 + i64.store 0($pop58), $pop239 + i32.const $push159=, 240 + i32.add $push160=, $0, $pop159 + i32.const $push238=, 24 + i32.add $push59=, $pop160, $pop238 + i64.const $push237=, 55834574860 + i64.store 0($pop59), $pop237 + i32.const $push161=, 240 + i32.add $push162=, $0, $pop161 + i32.const $push236=, 16 + i32.add $push60=, $pop162, $pop236 + i64.const $push235=, 47244640266 + i64.store 0($pop60), $pop235 + i64.const $push234=, 38654705672 + i64.store 248($0), $pop234 + i64.const $push233=, 30064771078 + i64.store 240($0), $pop233 + i32.const $push61=, .L.str+6 + i32.const $push163=, 240 + i32.add $push164=, $0, $pop163 + call f6@FUNCTION, $0, $0, $0, $0, $0, $0, $pop61, $pop164 + i32.const $push165=, 192 + i32.add $push166=, $0, $pop165 + i32.const $push232=, 32 + i32.add $push62=, $pop166, $pop232 + i32.const $push231=, 15 + i32.store 0($pop62), $pop231 + i32.const $push167=, 192 + i32.add $push168=, $0, $pop167 + i32.const $push230=, 24 + i32.add $push63=, $pop168, $pop230 + i64.const $push229=, 60129542157 + i64.store 0($pop63), $pop229 + i32.const $push169=, 192 + i32.add $push170=, $0, $pop169 + i32.const $push228=, 16 + i32.add $push64=, $pop170, $pop228 + i64.const $push227=, 51539607563 + i64.store 0($pop64), $pop227 + i64.const $push226=, 42949672969 + i64.store 200($0), $pop226 + i64.const $push225=, 34359738375 + i64.store 192($0), $pop225 + i32.const $push65=, .L.str+7 + i32.const $push171=, 192 + i32.add $push172=, $0, $pop171 + call f7@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $pop65, $pop172 + i32.const $push173=, 160 + i32.add $push174=, $0, $pop173 + i32.const $push224=, 24 + i32.add $push66=, $pop174, $pop224 + i64.const $push223=, 64424509454 + i64.store 0($pop66), $pop223 + i32.const $push175=, 160 + i32.add $push176=, $0, $pop175 + i32.const $push222=, 16 + i32.add $push67=, $pop176, $pop222 + i64.const $push221=, 55834574860 + i64.store 0($pop67), $pop221 + i64.const $push220=, 47244640266 + i64.store 168($0), $pop220 + i64.const $push219=, 38654705672 + i64.store 160($0), $pop219 + i32.const $push68=, .L.str+8 + i32.const $push177=, 160 + i32.add $push178=, $0, $pop177 + call f8@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $pop68, $pop178 + i32.const $push179=, 128 + i32.add $push180=, $0, $pop179 + i32.const $push218=, 24 + i32.add $push69=, $pop180, $pop218 + i32.const $push217=, 15 + i32.store 0($pop69), $pop217 + i32.const $push181=, 128 + i32.add $push182=, $0, $pop181 + i32.const $push216=, 16 + i32.add $push70=, $pop182, $pop216 + i64.const $push215=, 60129542157 + i64.store 0($pop70), $pop215 + i64.const $push214=, 51539607563 + i64.store 136($0), $pop214 + i64.const $push213=, 42949672969 + i64.store 128($0), $pop213 + i32.const $push71=, .L.str+9 + i32.const $push183=, 128 + i32.add $push184=, $0, $pop183 + call f9@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop71, $pop184 + i32.const $push185=, 96 + i32.add $push186=, $0, $pop185 + i32.const $push212=, 16 + i32.add $push72=, $pop186, $pop212 + i64.const $push211=, 64424509454 + i64.store 0($pop72), $pop211 + i64.const $push210=, 55834574860 + i64.store 104($0), $pop210 + i64.const $push209=, 47244640266 + i64.store 96($0), $pop209 + i32.const $push73=, .L.str+10 + i32.const $push187=, 96 + i32.add $push188=, $0, $pop187 + call f10@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop73, $pop188 + i32.const $push189=, 64 + i32.add $push190=, $0, $pop189 + i32.const $push208=, 16 + i32.add $push74=, $pop190, $pop208 + i32.const $push207=, 15 + i32.store 0($pop74), $pop207 + i64.const $push206=, 60129542157 + i64.store 72($0), $pop206 + i64.const $push205=, 51539607563 + i64.store 64($0), $pop205 + i32.const $push75=, .L.str+11 + i32.const $push191=, 64 + i32.add $push192=, $0, $pop191 + call f11@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop75, $pop192 + i64.const $push204=, 64424509454 + i64.store 56($0), $pop204 + i64.const $push203=, 55834574860 + i64.store 48($0), $pop203 + i32.const $push76=, .L.str+12 + i32.const $push193=, 48 + i32.add $push194=, $0, $pop193 + call f12@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop76, $pop194 + i32.const $push202=, 15 + i32.store 40($0), $pop202 + i64.const $push201=, 60129542157 + i64.store 32($0), $pop201 + i32.const $push77=, .L.str+13 + i32.const $push195=, 32 + i32.add $push196=, $0, $pop195 + call f13@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop77, $pop196 + i64.const $push200=, 64424509454 + i64.store 16($0), $pop200 + i32.const $push78=, .L.str+14 + i32.const $push197=, 16 + i32.add $push198=, $0, $pop197 + call f14@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop78, $pop198 + i32.const $push199=, 15 + i32.store 0($0), $pop199 + i32.const $push79=, .L.str+15 + call f15@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop79, $0 + i32.const $push80=, 0 + call exit@FUNCTION, $pop80 + unreachable + .endfunc +.Lfunc_end18: + .size main, .Lfunc_end18-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.16,"aMS",@progbits,1 + .p2align 4 +.L.str: + .asciz "0123456789abcdef" + .size .L.str, 17 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype strlen, i32, i32 + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-11.c.s b/src/binaryen/test/torture-s/va-arg-11.c.s new file mode 100644 index 0000000000..70d01b052b --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-11.c.s @@ -0,0 +1,65 @@ + .text + .file "va-arg-11.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 32 + i32.sub $push11=, $pop5, $pop7 + tee_local $push10=, $0=, $pop11 + i32.store __stack_pointer($pop8), $pop10 + i32.const $push0=, 16 + i32.add $push1=, $0, $pop0 + i32.const $push9=, 0 + i32.store 0($pop1), $pop9 + i64.const $push2=, 4294967298 + i64.store 8($0), $pop2 + i64.const $push3=, 12884901892 + i64.store 0($0), $pop3 + block + i32.call $push4=, foo@FUNCTION, $0, $0 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + i32.const $push12=, 0 + call exit@FUNCTION, $pop12 + unreachable +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.foo,"ax",@progbits + .type foo,@function # -- Begin function foo +foo: # @foo + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push8=, $pop5, $pop7 + i32.const $push0=, 20 + i32.add $push1=, $1, $pop0 + i32.store 12($pop8), $pop1 + i32.const $push2=, 16 + i32.add $push3=, $1, $pop2 + i32.load $push4=, 0($pop3) + # fallthrough-return: $pop4 + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-12.c.s b/src/binaryen/test/torture-s/va-arg-12.c.s new file mode 100644 index 0000000000..b2c528e0e4 --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-12.c.s @@ -0,0 +1,97 @@ + .text + .file "va-arg-12.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param f64, f64, f64, f64, f64, f64, f64, f64, f64, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push19=, 0 + i32.const $push17=, 0 + i32.load $push16=, __stack_pointer($pop17) + i32.const $push18=, 16 + i32.sub $push28=, $pop16, $pop18 + tee_local $push27=, $12=, $pop28 + i32.store __stack_pointer($pop19), $pop27 + i32.const $push0=, 7 + i32.add $push1=, $9, $pop0 + i32.const $push2=, -8 + i32.and $push26=, $pop1, $pop2 + tee_local $push25=, $9=, $pop26 + i32.const $push3=, 8 + i32.add $push24=, $pop25, $pop3 + tee_local $push23=, $10=, $pop24 + i32.store 12($12), $pop23 + block + f64.load $push4=, 0($9) + f64.const $push5=, 0x1.4p3 + f64.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %if.end + i32.const $push7=, 16 + i32.add $push30=, $9, $pop7 + tee_local $push29=, $11=, $pop30 + i32.store 12($12), $pop29 + f64.load $push8=, 0($10) + f64.const $push9=, 0x1.6p3 + f64.ne $push10=, $pop8, $pop9 + br_if 0, $pop10 # 0: down to label0 +# BB#2: # %if.end6 + i32.const $push11=, 24 + i32.add $push12=, $9, $pop11 + i32.store 12($12), $pop12 + f64.load $push13=, 0($11) + f64.const $push14=, 0x0p0 + f64.ne $push15=, $pop13, $pop14 + br_if 0, $pop15 # 0: down to label0 +# BB#3: # %if.end11 + i32.const $push22=, 0 + i32.const $push20=, 16 + i32.add $push21=, $12, $pop20 + i32.store __stack_pointer($pop22), $pop21 + return +.LBB0_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local f64, i32 +# BB#0: # %entry + i32.const $push9=, 0 + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 32 + i32.sub $push11=, $pop6, $pop8 + tee_local $push10=, $1=, $pop11 + i32.store __stack_pointer($pop9), $pop10 + i32.const $push0=, 16 + i32.add $push1=, $1, $pop0 + i64.const $push2=, 0 + i64.store 0($pop1), $pop2 + i64.const $push3=, 4622382067542392832 + i64.store 8($1), $pop3 + i64.const $push4=, 4621819117588971520 + i64.store 0($1), $pop4 + call f@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $1 + i32.const $push5=, 0 + call exit@FUNCTION, $pop5 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-13.c.s b/src/binaryen/test/torture-s/va-arg-13.c.s new file mode 100644 index 0000000000..449fe48c47 --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-13.c.s @@ -0,0 +1,97 @@ + .text + .file "va-arg-13.c" + .section .text.dummy,"ax",@progbits + .hidden dummy # -- Begin function dummy + .globl dummy + .type dummy,@function +dummy: # @dummy + .param i32 +# BB#0: # %entry + block + i32.load $push0=, 0($0) + i32.const $push1=, 1234 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size dummy, .Lfunc_end0-dummy + # -- End function + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push10=, 0 + i32.const $push8=, 0 + i32.load $push7=, __stack_pointer($pop8) + i32.const $push9=, 16 + i32.sub $push16=, $pop7, $pop9 + tee_local $push15=, $2=, $pop16 + i32.store __stack_pointer($pop10), $pop15 + i32.store 4($2), $1 + block + i32.load $push1=, 0($1) + i32.const $push14=, 1234 + i32.ne $push2=, $pop1, $pop14 + br_if 0, $pop2 # 0: down to label1 +# BB#1: # %dummy.exit + i32.const $push3=, 4 + i32.or $push0=, $2, $pop3 + i32.store 0($pop0), $1 + i32.load $push4=, 4($2) + i32.load $push5=, 0($pop4) + i32.const $push17=, 1234 + i32.ne $push6=, $pop5, $pop17 + br_if 0, $pop6 # 0: down to label1 +# BB#2: # %dummy.exit15 + i32.const $push13=, 0 + i32.const $push11=, 16 + i32.add $push12=, $2, $pop11 + i32.store __stack_pointer($pop13), $pop12 + return +.LBB1_3: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size test, .Lfunc_end1-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push7=, $pop2, $pop4 + tee_local $push6=, $0=, $pop7 + i32.store __stack_pointer($pop5), $pop6 + i32.const $push0=, 1234 + i32.store 0($0), $pop0 + call test@FUNCTION, $0, $0 + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-14.c.s b/src/binaryen/test/torture-s/va-arg-14.c.s new file mode 100644 index 0000000000..c292b6de9c --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-14.c.s @@ -0,0 +1,147 @@ + .text + .file "va-arg-14.c" + .section .text.vat,"ax",@progbits + .hidden vat # -- Begin function vat + .globl vat + .type vat,@function +vat: # @vat + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push27=, 0 + i32.const $push25=, 0 + i32.load $push24=, __stack_pointer($pop25) + i32.const $push26=, 16 + i32.sub $push35=, $pop24, $pop26 + tee_local $push34=, $2=, $pop35 + i32.store __stack_pointer($pop27), $pop34 + i32.store 12($2), $0 + i32.const $push33=, 0 + i32.store global($pop33), $1 + i32.store 12($2), $1 + i32.const $push32=, 4 + i32.add $push0=, $1, $pop32 + i32.store 8($2), $pop0 + block + i32.load $push1=, 0($1) + i32.const $push31=, 1 + i32.ne $push2=, $pop1, $pop31 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push41=, 0 + i32.const $push40=, 0 + i32.load $push39=, global($pop40) + tee_local $push38=, $0=, $pop39 + i32.const $push37=, 4 + i32.add $push3=, $pop38, $pop37 + i32.store global($pop41), $pop3 + i32.load $push4=, 0($0) + i32.const $push36=, 1 + i32.ne $push5=, $pop4, $pop36 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end7 + i32.load $push45=, 12($2) + tee_local $push44=, $0=, $pop45 + i32.const $push43=, 4 + i32.add $push6=, $pop44, $pop43 + i32.store 12($2), $pop6 + i32.load $push7=, 0($0) + i32.const $push42=, 1 + i32.ne $push8=, $pop7, $pop42 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %if.end12 + i32.const $push48=, 0 + i32.store global($pop48), $1 + i32.store 12($2), $1 + i32.const $push47=, 4 + i32.add $push9=, $1, $pop47 + i32.store 8($2), $pop9 + i32.load $push10=, 0($1) + i32.const $push46=, 1 + i32.ne $push11=, $pop10, $pop46 + br_if 0, $pop11 # 0: down to label0 +# BB#4: # %if.end19 + i32.const $push53=, 0 + i32.load $push52=, global($pop53) + tee_local $push51=, $1=, $pop52 + i32.const $push50=, 4 + i32.add $push12=, $pop51, $pop50 + i32.store 8($2), $pop12 + i32.load $push13=, 0($1) + i32.const $push49=, 1 + i32.ne $push14=, $pop13, $pop49 + br_if 0, $pop14 # 0: down to label0 +# BB#5: # %if.end25 + i32.const $push15=, 0 + i32.const $push58=, 0 + i32.load $push57=, global($pop58) + tee_local $push56=, $1=, $pop57 + i32.const $push55=, 4 + i32.add $push16=, $pop56, $pop55 + i32.store global($pop15), $pop16 + i32.load $push17=, 0($1) + i32.const $push54=, 1 + i32.ne $push18=, $pop17, $pop54 + br_if 0, $pop18 # 0: down to label0 +# BB#6: # %if.end31 + i32.load $push60=, 12($2) + tee_local $push59=, $1=, $pop60 + i32.const $push19=, 4 + i32.add $push20=, $pop59, $pop19 + i32.store 12($2), $pop20 + i32.load $push21=, 0($1) + i32.const $push22=, 1 + i32.ne $push23=, $pop21, $pop22 + br_if 0, $pop23 # 0: down to label0 +# BB#7: # %if.end36 + i32.const $push30=, 0 + i32.const $push28=, 16 + i32.add $push29=, $2, $pop28 + i32.store __stack_pointer($pop30), $pop29 + return +.LBB0_8: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size vat, .Lfunc_end0-vat + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push7=, $pop2, $pop4 + tee_local $push6=, $0=, $pop7 + i32.store __stack_pointer($pop5), $pop6 + i32.const $push0=, 1 + i32.store 0($0), $pop0 + call vat@FUNCTION, $0, $0 + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden global # @global + .type global,@object + .section .bss.global,"aw",@nobits + .globl global + .p2align 2 +global: + .int32 0 + .size global, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-15.c.s b/src/binaryen/test/torture-s/va-arg-15.c.s new file mode 100644 index 0000000000..b023d3bf6c --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-15.c.s @@ -0,0 +1,174 @@ + .text + .file "va-arg-15.c" + .section .text.vafunction,"ax",@progbits + .hidden vafunction # -- Begin function vafunction + .globl vafunction + .type vafunction,@function +vafunction: # @vafunction + .param i32, i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push10=, 0 + i32.const $push8=, 0 + i32.load $push7=, __stack_pointer($pop8) + i32.const $push9=, 16 + i32.sub $push15=, $pop7, $pop9 + tee_local $push14=, $5=, $pop15 + i32.store __stack_pointer($pop10), $pop14 + i32.store 12($5), $1 + i32.const $4=, 0 +.LBB0_1: # %for.body + # =>This Inner Loop Header: Depth=1 + block + loop # label1: + i32.const $push17=, 1 + i32.add $2=, $4, $pop17 + block + block + i32.const $push16=, 1 + i32.and $push0=, $4, $pop16 + br_if 0, $pop0 # 0: down to label3 +# BB#2: # %if.else + # in Loop: Header=BB0_1 Depth=1 + i32.const $push20=, 4 + i32.add $push19=, $1, $pop20 + tee_local $push18=, $4=, $pop19 + i32.store 12($5), $pop18 + i32.load $3=, 0($1) + copy_local $1=, $4 + i32.eq $push5=, $2, $3 + br_if 1, $pop5 # 1: down to label2 + br 3 # 3: down to label0 +.LBB0_3: # %if.then + # in Loop: Header=BB0_1 Depth=1 + end_block # label3: + i32.const $push27=, 7 + i32.add $push1=, $1, $pop27 + i32.const $push26=, -8 + i32.and $push25=, $pop1, $pop26 + tee_local $push24=, $4=, $pop25 + i32.const $push23=, 8 + i32.add $push22=, $pop24, $pop23 + tee_local $push21=, $1=, $pop22 + i32.store 12($5), $pop21 + f64.load $push2=, 0($4) + f64.convert_s/i32 $push3=, $2 + f64.ne $push4=, $pop2, $pop3 + br_if 2, $pop4 # 2: down to label0 +.LBB0_4: # %for.inc + # in Loop: Header=BB0_1 Depth=1 + end_block # label2: + copy_local $4=, $2 + i32.const $push28=, 18 + i32.lt_u $push6=, $2, $pop28 + br_if 0, $pop6 # 0: up to label1 +# BB#5: # %for.end + end_loop + i32.const $push13=, 0 + i32.const $push11=, 16 + i32.add $push12=, $5, $pop11 + i32.store __stack_pointer($pop13), $pop12 + return +.LBB0_6: # %if.then4 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size vafunction, .Lfunc_end0-vafunction + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push54=, 0 + i32.const $push52=, 0 + i32.load $push51=, __stack_pointer($pop52) + i32.const $push53=, 144 + i32.sub $push56=, $pop51, $pop53 + tee_local $push55=, $0=, $pop56 + i32.store __stack_pointer($pop54), $pop55 + i32.const $push0=, 136 + i32.add $push1=, $0, $pop0 + i64.const $push2=, 4625759767262920704 + i64.store 0($pop1), $pop2 + i32.const $push3=, 128 + i32.add $push4=, $0, $pop3 + i32.const $push5=, 17 + i32.store 0($pop4), $pop5 + i32.const $push6=, 120 + i32.add $push7=, $0, $pop6 + i64.const $push8=, 4625196817309499392 + i64.store 0($pop7), $pop8 + i32.const $push9=, 112 + i32.add $push10=, $0, $pop9 + i32.const $push11=, 15 + i32.store 0($pop10), $pop11 + i32.const $push12=, 104 + i32.add $push13=, $0, $pop12 + i64.const $push14=, 4624070917402656768 + i64.store 0($pop13), $pop14 + i32.const $push15=, 96 + i32.add $push16=, $0, $pop15 + i32.const $push17=, 13 + i32.store 0($pop16), $pop17 + i32.const $push18=, 88 + i32.add $push19=, $0, $pop18 + i64.const $push20=, 4622945017495814144 + i64.store 0($pop19), $pop20 + i32.const $push21=, 80 + i32.add $push22=, $0, $pop21 + i32.const $push23=, 11 + i32.store 0($pop22), $pop23 + i32.const $push24=, 72 + i32.add $push25=, $0, $pop24 + i64.const $push26=, 4621819117588971520 + i64.store 0($pop25), $pop26 + i32.const $push27=, 64 + i32.add $push28=, $0, $pop27 + i32.const $push29=, 9 + i32.store 0($pop28), $pop29 + i32.const $push30=, 56 + i32.add $push31=, $0, $pop30 + i64.const $push32=, 4620693217682128896 + i64.store 0($pop31), $pop32 + i32.const $push33=, 48 + i32.add $push34=, $0, $pop33 + i32.const $push35=, 7 + i32.store 0($pop34), $pop35 + i32.const $push36=, 40 + i32.add $push37=, $0, $pop36 + i64.const $push38=, 4618441417868443648 + i64.store 0($pop37), $pop38 + i32.const $push39=, 32 + i32.add $push40=, $0, $pop39 + i32.const $push41=, 5 + i32.store 0($pop40), $pop41 + i32.const $push42=, 24 + i32.add $push43=, $0, $pop42 + i64.const $push44=, 4616189618054758400 + i64.store 0($pop43), $pop44 + i32.const $push45=, 16 + i32.add $push46=, $0, $pop45 + i32.const $push47=, 3 + i32.store 0($pop46), $pop47 + i64.const $push48=, 4611686018427387904 + i64.store 8($0), $pop48 + i32.const $push49=, 1 + i32.store 0($0), $pop49 + call vafunction@FUNCTION, $0, $0 + i32.const $push50=, 0 + call exit@FUNCTION, $pop50 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-16.c.s b/src/binaryen/test/torture-s/va-arg-16.c.s new file mode 100644 index 0000000000..d6551b066a --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-16.c.s @@ -0,0 +1,187 @@ + .text + .file "va-arg-16.c" + .section .text.vafunction,"ax",@progbits + .hidden vafunction # -- Begin function vafunction + .globl vafunction + .type vafunction,@function +vafunction: # @vafunction + .param f64, f64, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push48=, 0 + i32.const $push46=, 0 + i32.load $push45=, __stack_pointer($pop46) + i32.const $push47=, 16 + i32.sub $push53=, $pop45, $pop47 + tee_local $push52=, $5=, $pop53 + i32.store __stack_pointer($pop48), $pop52 + i32.store 12($5), $2 + block + f64.const $push0=, 0x1.bcp9 + f64.ne $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + f64.const $push2=, 0x1.f38p9 + f64.ne $push3=, $1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %if.end4 + i32.load $push5=, 12($5) + i32.const $push4=, 7 + i32.add $push6=, $pop5, $pop4 + i32.const $push7=, -8 + i32.and $push57=, $pop6, $pop7 + tee_local $push56=, $2=, $pop57 + i32.const $push8=, 8 + i32.add $push55=, $pop56, $pop8 + tee_local $push54=, $3=, $pop55 + i32.store 12($5), $pop54 + f64.load $push9=, 0($2) + f64.const $push10=, 0x1p0 + f64.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#3: # %if.end7 + i32.const $push12=, 16 + i32.add $push59=, $2, $pop12 + tee_local $push58=, $4=, $pop59 + i32.store 12($5), $pop58 + f64.load $push13=, 0($3) + f64.const $push14=, 0x1p1 + f64.ne $push15=, $pop13, $pop14 + br_if 0, $pop15 # 0: down to label0 +# BB#4: # %if.end12 + i32.const $push16=, 24 + i32.add $push61=, $2, $pop16 + tee_local $push60=, $3=, $pop61 + i32.store 12($5), $pop60 + f64.load $push17=, 0($4) + f64.const $push18=, 0x1.8p1 + f64.ne $push19=, $pop17, $pop18 + br_if 0, $pop19 # 0: down to label0 +# BB#5: # %if.end17 + i32.const $push20=, 32 + i32.add $push63=, $2, $pop20 + tee_local $push62=, $4=, $pop63 + i32.store 12($5), $pop62 + f64.load $push21=, 0($3) + f64.const $push22=, 0x1p2 + f64.ne $push23=, $pop21, $pop22 + br_if 0, $pop23 # 0: down to label0 +# BB#6: # %if.end22 + i32.const $push24=, 40 + i32.add $push65=, $2, $pop24 + tee_local $push64=, $3=, $pop65 + i32.store 12($5), $pop64 + f64.load $push25=, 0($4) + f64.const $push26=, 0x1.4p2 + f64.ne $push27=, $pop25, $pop26 + br_if 0, $pop27 # 0: down to label0 +# BB#7: # %if.end27 + i32.const $push28=, 48 + i32.add $push67=, $2, $pop28 + tee_local $push66=, $4=, $pop67 + i32.store 12($5), $pop66 + f64.load $push29=, 0($3) + f64.const $push30=, 0x1.8p2 + f64.ne $push31=, $pop29, $pop30 + br_if 0, $pop31 # 0: down to label0 +# BB#8: # %if.end32 + i32.const $push32=, 56 + i32.add $push69=, $2, $pop32 + tee_local $push68=, $3=, $pop69 + i32.store 12($5), $pop68 + f64.load $push33=, 0($4) + f64.const $push34=, 0x1.cp2 + f64.ne $push35=, $pop33, $pop34 + br_if 0, $pop35 # 0: down to label0 +# BB#9: # %if.end37 + i32.const $push36=, 64 + i32.add $push71=, $2, $pop36 + tee_local $push70=, $4=, $pop71 + i32.store 12($5), $pop70 + f64.load $push37=, 0($3) + f64.const $push38=, 0x1p3 + f64.ne $push39=, $pop37, $pop38 + br_if 0, $pop39 # 0: down to label0 +# BB#10: # %if.end42 + i32.const $push40=, 72 + i32.add $push41=, $2, $pop40 + i32.store 12($5), $pop41 + f64.load $push42=, 0($4) + f64.const $push43=, 0x1.2p3 + f64.ne $push44=, $pop42, $pop43 + br_if 0, $pop44 # 0: down to label0 +# BB#11: # %if.end47 + i32.const $push51=, 0 + i32.const $push49=, 16 + i32.add $push50=, $5, $pop49 + i32.store __stack_pointer($pop51), $pop50 + return +.LBB0_12: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size vafunction, .Lfunc_end0-vafunction + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push29=, 0 + i32.const $push27=, 0 + i32.load $push26=, __stack_pointer($pop27) + i32.const $push28=, 80 + i32.sub $push31=, $pop26, $pop28 + tee_local $push30=, $0=, $pop31 + i32.store __stack_pointer($pop29), $pop30 + i32.const $push0=, 64 + i32.add $push1=, $0, $pop0 + i64.const $push2=, 4621256167635550208 + i64.store 0($pop1), $pop2 + i32.const $push3=, 56 + i32.add $push4=, $0, $pop3 + i64.const $push5=, 4620693217682128896 + i64.store 0($pop4), $pop5 + i32.const $push6=, 48 + i32.add $push7=, $0, $pop6 + i64.const $push8=, 4619567317775286272 + i64.store 0($pop7), $pop8 + i32.const $push9=, 40 + i32.add $push10=, $0, $pop9 + i64.const $push11=, 4618441417868443648 + i64.store 0($pop10), $pop11 + i32.const $push12=, 32 + i32.add $push13=, $0, $pop12 + i64.const $push14=, 4617315517961601024 + i64.store 0($pop13), $pop14 + i32.const $push15=, 24 + i32.add $push16=, $0, $pop15 + i64.const $push17=, 4616189618054758400 + i64.store 0($pop16), $pop17 + i32.const $push18=, 16 + i32.add $push19=, $0, $pop18 + i64.const $push20=, 4613937818241073152 + i64.store 0($pop19), $pop20 + i64.const $push21=, 4611686018427387904 + i64.store 8($0), $pop21 + i64.const $push22=, 4607182418800017408 + i64.store 0($0), $pop22 + f64.const $push24=, 0x1.bcp9 + f64.const $push23=, 0x1.f38p9 + call vafunction@FUNCTION, $pop24, $pop23, $0 + i32.const $push25=, 0 + call exit@FUNCTION, $pop25 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-17.c.s b/src/binaryen/test/torture-s/va-arg-17.c.s new file mode 100644 index 0000000000..3effdb44ea --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-17.c.s @@ -0,0 +1,175 @@ + .text + .file "va-arg-17.c" + .section .text.vafunction,"ax",@progbits + .hidden vafunction # -- Begin function vafunction + .globl vafunction + .type vafunction,@function +vafunction: # @vafunction + .param i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push43=, 0 + i32.const $push41=, 0 + i32.load $push40=, __stack_pointer($pop41) + i32.const $push42=, 16 + i32.sub $push52=, $pop40, $pop42 + tee_local $push51=, $4=, $pop52 + i32.store __stack_pointer($pop43), $pop51 + i32.const $push0=, 7 + i32.add $push1=, $1, $pop0 + i32.const $push2=, -8 + i32.and $push50=, $pop1, $pop2 + tee_local $push49=, $1=, $pop50 + i32.const $push3=, 8 + i32.add $push48=, $pop49, $pop3 + tee_local $push47=, $2=, $pop48 + i32.store 12($4), $pop47 + block + f64.load $push4=, 0($1) + f64.const $push5=, 0x1p0 + f64.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %if.end + i32.const $push7=, 16 + i32.add $push54=, $1, $pop7 + tee_local $push53=, $3=, $pop54 + i32.store 12($4), $pop53 + f64.load $push8=, 0($2) + f64.const $push9=, 0x1p1 + f64.ne $push10=, $pop8, $pop9 + br_if 0, $pop10 # 0: down to label0 +# BB#2: # %if.end6 + i32.const $push11=, 24 + i32.add $push56=, $1, $pop11 + tee_local $push55=, $2=, $pop56 + i32.store 12($4), $pop55 + f64.load $push12=, 0($3) + f64.const $push13=, 0x1.8p1 + f64.ne $push14=, $pop12, $pop13 + br_if 0, $pop14 # 0: down to label0 +# BB#3: # %if.end11 + i32.const $push15=, 32 + i32.add $push58=, $1, $pop15 + tee_local $push57=, $3=, $pop58 + i32.store 12($4), $pop57 + f64.load $push16=, 0($2) + f64.const $push17=, 0x1p2 + f64.ne $push18=, $pop16, $pop17 + br_if 0, $pop18 # 0: down to label0 +# BB#4: # %if.end16 + i32.const $push19=, 40 + i32.add $push60=, $1, $pop19 + tee_local $push59=, $2=, $pop60 + i32.store 12($4), $pop59 + f64.load $push20=, 0($3) + f64.const $push21=, 0x1.4p2 + f64.ne $push22=, $pop20, $pop21 + br_if 0, $pop22 # 0: down to label0 +# BB#5: # %if.end21 + i32.const $push23=, 48 + i32.add $push62=, $1, $pop23 + tee_local $push61=, $3=, $pop62 + i32.store 12($4), $pop61 + f64.load $push24=, 0($2) + f64.const $push25=, 0x1.8p2 + f64.ne $push26=, $pop24, $pop25 + br_if 0, $pop26 # 0: down to label0 +# BB#6: # %if.end26 + i32.const $push27=, 56 + i32.add $push64=, $1, $pop27 + tee_local $push63=, $2=, $pop64 + i32.store 12($4), $pop63 + f64.load $push28=, 0($3) + f64.const $push29=, 0x1.cp2 + f64.ne $push30=, $pop28, $pop29 + br_if 0, $pop30 # 0: down to label0 +# BB#7: # %if.end31 + i32.const $push31=, 64 + i32.add $push66=, $1, $pop31 + tee_local $push65=, $3=, $pop66 + i32.store 12($4), $pop65 + f64.load $push32=, 0($2) + f64.const $push33=, 0x1p3 + f64.ne $push34=, $pop32, $pop33 + br_if 0, $pop34 # 0: down to label0 +# BB#8: # %if.end36 + i32.const $push35=, 72 + i32.add $push36=, $1, $pop35 + i32.store 12($4), $pop36 + f64.load $push37=, 0($3) + f64.const $push38=, 0x1.2p3 + f64.ne $push39=, $pop37, $pop38 + br_if 0, $pop39 # 0: down to label0 +# BB#9: # %if.end41 + i32.const $push46=, 0 + i32.const $push44=, 16 + i32.add $push45=, $4, $pop44 + i32.store __stack_pointer($pop46), $pop45 + return +.LBB0_10: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size vafunction, .Lfunc_end0-vafunction + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push27=, 0 + i32.const $push25=, 0 + i32.load $push24=, __stack_pointer($pop25) + i32.const $push26=, 80 + i32.sub $push29=, $pop24, $pop26 + tee_local $push28=, $0=, $pop29 + i32.store __stack_pointer($pop27), $pop28 + i32.const $push0=, 64 + i32.add $push1=, $0, $pop0 + i64.const $push2=, 4621256167635550208 + i64.store 0($pop1), $pop2 + i32.const $push3=, 56 + i32.add $push4=, $0, $pop3 + i64.const $push5=, 4620693217682128896 + i64.store 0($pop4), $pop5 + i32.const $push6=, 48 + i32.add $push7=, $0, $pop6 + i64.const $push8=, 4619567317775286272 + i64.store 0($pop7), $pop8 + i32.const $push9=, 40 + i32.add $push10=, $0, $pop9 + i64.const $push11=, 4618441417868443648 + i64.store 0($pop10), $pop11 + i32.const $push12=, 32 + i32.add $push13=, $0, $pop12 + i64.const $push14=, 4617315517961601024 + i64.store 0($pop13), $pop14 + i32.const $push15=, 24 + i32.add $push16=, $0, $pop15 + i64.const $push17=, 4616189618054758400 + i64.store 0($pop16), $pop17 + i32.const $push18=, 16 + i32.add $push19=, $0, $pop18 + i64.const $push20=, 4613937818241073152 + i64.store 0($pop19), $pop20 + i64.const $push21=, 4611686018427387904 + i64.store 8($0), $pop21 + i64.const $push22=, 4607182418800017408 + i64.store 0($0), $pop22 + call vafunction@FUNCTION, $0, $0 + i32.const $push23=, 0 + call exit@FUNCTION, $pop23 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-18.c.s b/src/binaryen/test/torture-s/va-arg-18.c.s new file mode 100644 index 0000000000..e46059983f --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-18.c.s @@ -0,0 +1,88 @@ + .text + .file "va-arg-18.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param f64, f64, f64, f64, f64, f64, f64, f64, f64, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push15=, 0 + i32.const $push13=, 0 + i32.load $push12=, __stack_pointer($pop13) + i32.const $push14=, 16 + i32.sub $push22=, $pop12, $pop14 + tee_local $push21=, $12=, $pop22 + i32.store __stack_pointer($pop15), $pop21 + i32.const $push0=, 4 + i32.add $push20=, $9, $pop0 + tee_local $push19=, $10=, $pop20 + i32.store 12($12), $pop19 + block + i32.load $push1=, 0($9) + i32.const $push2=, 10 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 8 + i32.add $push24=, $9, $pop4 + tee_local $push23=, $11=, $pop24 + i32.store 12($12), $pop23 + i32.load $push5=, 0($10) + i32.const $push6=, 11 + i32.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#2: # %if.end6 + i32.const $push8=, 12 + i32.add $push9=, $9, $pop8 + i32.store 12($12), $pop9 + i32.load $push10=, 0($11) + i32.const $push25=, 12 + i32.ne $push11=, $pop10, $pop25 + br_if 0, $pop11 # 0: down to label0 +# BB#3: # %if.end11 + i32.const $push18=, 0 + i32.const $push16=, 16 + i32.add $push17=, $12, $pop16 + i32.store __stack_pointer($pop18), $pop17 + return +.LBB0_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local f64, i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push8=, $pop3, $pop5 + tee_local $push7=, $1=, $pop8 + i32.store __stack_pointer($pop6), $pop7 + i32.const $push0=, 12 + i32.store 8($1), $pop0 + i64.const $push1=, 47244640266 + i64.store 0($1), $pop1 + call f@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $1 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-19.c.s b/src/binaryen/test/torture-s/va-arg-19.c.s new file mode 100644 index 0000000000..e872908c57 --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-19.c.s @@ -0,0 +1,154 @@ + .text + .file "va-arg-19.c" + .section .text.vafunction,"ax",@progbits + .hidden vafunction # -- Begin function vafunction + .globl vafunction + .type vafunction,@function +vafunction: # @vafunction + .param i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push40=, 0 + i32.const $push38=, 0 + i32.load $push37=, __stack_pointer($pop38) + i32.const $push39=, 16 + i32.sub $push47=, $pop37, $pop39 + tee_local $push46=, $4=, $pop47 + i32.store __stack_pointer($pop40), $pop46 + i32.const $push0=, 4 + i32.add $push45=, $1, $pop0 + tee_local $push44=, $2=, $pop45 + i32.store 12($4), $pop44 + block + i32.load $push1=, 0($1) + i32.const $push2=, 1 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 8 + i32.add $push49=, $1, $pop4 + tee_local $push48=, $3=, $pop49 + i32.store 12($4), $pop48 + i32.load $push5=, 0($2) + i32.const $push6=, 2 + i32.ne $push7=, $pop5, $pop6 + br_if 0, $pop7 # 0: down to label0 +# BB#2: # %if.end6 + i32.const $push8=, 12 + i32.add $push51=, $1, $pop8 + tee_local $push50=, $2=, $pop51 + i32.store 12($4), $pop50 + i32.load $push9=, 0($3) + i32.const $push10=, 3 + i32.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#3: # %if.end11 + i32.const $push12=, 16 + i32.add $push53=, $1, $pop12 + tee_local $push52=, $3=, $pop53 + i32.store 12($4), $pop52 + i32.load $push13=, 0($2) + i32.const $push14=, 4 + i32.ne $push15=, $pop13, $pop14 + br_if 0, $pop15 # 0: down to label0 +# BB#4: # %if.end16 + i32.const $push16=, 20 + i32.add $push55=, $1, $pop16 + tee_local $push54=, $2=, $pop55 + i32.store 12($4), $pop54 + i32.load $push17=, 0($3) + i32.const $push18=, 5 + i32.ne $push19=, $pop17, $pop18 + br_if 0, $pop19 # 0: down to label0 +# BB#5: # %if.end21 + i32.const $push20=, 24 + i32.add $push57=, $1, $pop20 + tee_local $push56=, $3=, $pop57 + i32.store 12($4), $pop56 + i32.load $push21=, 0($2) + i32.const $push22=, 6 + i32.ne $push23=, $pop21, $pop22 + br_if 0, $pop23 # 0: down to label0 +# BB#6: # %if.end26 + i32.const $push24=, 28 + i32.add $push59=, $1, $pop24 + tee_local $push58=, $2=, $pop59 + i32.store 12($4), $pop58 + i32.load $push25=, 0($3) + i32.const $push26=, 7 + i32.ne $push27=, $pop25, $pop26 + br_if 0, $pop27 # 0: down to label0 +# BB#7: # %if.end31 + i32.const $push28=, 32 + i32.add $push61=, $1, $pop28 + tee_local $push60=, $3=, $pop61 + i32.store 12($4), $pop60 + i32.load $push29=, 0($2) + i32.const $push30=, 8 + i32.ne $push31=, $pop29, $pop30 + br_if 0, $pop31 # 0: down to label0 +# BB#8: # %if.end36 + i32.const $push32=, 36 + i32.add $push33=, $1, $pop32 + i32.store 12($4), $pop33 + i32.load $push34=, 0($3) + i32.const $push35=, 9 + i32.ne $push36=, $pop34, $pop35 + br_if 0, $pop36 # 0: down to label0 +# BB#9: # %if.end41 + i32.const $push43=, 0 + i32.const $push41=, 16 + i32.add $push42=, $4, $pop41 + i32.store __stack_pointer($pop43), $pop42 + return +.LBB0_10: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size vafunction, .Lfunc_end0-vafunction + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push15=, 0 + i32.const $push13=, 0 + i32.load $push12=, __stack_pointer($pop13) + i32.const $push14=, 48 + i32.sub $push17=, $pop12, $pop14 + tee_local $push16=, $0=, $pop17 + i32.store __stack_pointer($pop15), $pop16 + i32.const $push0=, 32 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 9 + i32.store 0($pop1), $pop2 + i32.const $push3=, 24 + i32.add $push4=, $0, $pop3 + i64.const $push5=, 34359738375 + i64.store 0($pop4), $pop5 + i32.const $push6=, 16 + i32.add $push7=, $0, $pop6 + i64.const $push8=, 25769803781 + i64.store 0($pop7), $pop8 + i64.const $push9=, 17179869187 + i64.store 8($0), $pop9 + i64.const $push10=, 8589934593 + i64.store 0($0), $pop10 + call vafunction@FUNCTION, $0, $0 + i32.const $push11=, 0 + call exit@FUNCTION, $pop11 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-2.c.s b/src/binaryen/test/torture-s/va-arg-2.c.s new file mode 100644 index 0000000000..00a38b022d --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-2.c.s @@ -0,0 +1,1651 @@ + .text + .file "va-arg-2.c" + .section .text.to_hex,"ax",@progbits + .hidden to_hex # -- Begin function to_hex + .globl to_hex + .type to_hex,@function +to_hex: # @to_hex + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 16 + i32.ge_u $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push2=, .L.str + i32.add $push3=, $0, $pop2 + i32.load8_s $push4=, 0($pop3) + return $pop4 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size to_hex, .Lfunc_end0-to_hex + # -- End function + .section .text.f0,"ax",@progbits + .hidden f0 # -- Begin function f0 + .globl f0 + .type f0,@function +f0: # @f0 + .param i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $4=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($4), $1 + block + i32.call $push1=, strlen@FUNCTION, $0 + i32.const $push2=, 16 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label1 +# BB#1: # %if.end + block + i32.load8_u $push19=, 0($0) + tee_local $push18=, $1=, $pop19 + i32.eqz $push30=, $pop18 + br_if 0, $pop30 # 0: down to label2 +# BB#2: # %while.body.lr.ph + i32.const $push20=, 1 + i32.add $0=, $0, $pop20 + i32.load $3=, 12($4) +.LBB1_3: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.const $push26=, 4 + i32.add $push25=, $3, $pop26 + tee_local $push24=, $2=, $pop25 + i32.store 12($4), $pop24 + i32.load $push23=, 0($3) + tee_local $push22=, $3=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label1 +# BB#4: # %to_hex.exit + # in Loop: Header=BB1_3 Depth=1 + i32.const $push28=, .L.str + i32.add $push6=, $3, $pop28 + i32.load8_u $push7=, 0($pop6) + i32.const $push27=, 255 + i32.and $push5=, $1, $pop27 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label1 +# BB#5: # %while.cond + # in Loop: Header=BB1_3 Depth=1 + i32.load8_u $1=, 0($0) + i32.const $push29=, 1 + i32.add $push0=, $0, $pop29 + copy_local $0=, $pop0 + copy_local $3=, $2 + br_if 0, $1 # 0: up to label3 +.LBB1_6: # %while.end + end_loop + end_block # label2: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $4, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB1_7: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size f0, .Lfunc_end1-f0 + # -- End function + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $5=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($5), $2 + block + i32.call $push1=, strlen@FUNCTION, $1 + i32.const $push2=, 15 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label4 +# BB#1: # %if.end + block + i32.load8_u $push19=, 0($1) + tee_local $push18=, $2=, $pop19 + i32.eqz $push30=, $pop18 + br_if 0, $pop30 # 0: down to label5 +# BB#2: # %while.body.lr.ph + i32.const $push20=, 1 + i32.add $1=, $1, $pop20 + i32.load $4=, 12($5) +.LBB2_3: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label6: + i32.const $push26=, 4 + i32.add $push25=, $4, $pop26 + tee_local $push24=, $3=, $pop25 + i32.store 12($5), $pop24 + i32.load $push23=, 0($4) + tee_local $push22=, $4=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label4 +# BB#4: # %to_hex.exit + # in Loop: Header=BB2_3 Depth=1 + i32.const $push28=, .L.str + i32.add $push6=, $4, $pop28 + i32.load8_u $push7=, 0($pop6) + i32.const $push27=, 255 + i32.and $push5=, $2, $pop27 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label4 +# BB#5: # %while.cond + # in Loop: Header=BB2_3 Depth=1 + i32.load8_u $2=, 0($1) + i32.const $push29=, 1 + i32.add $push0=, $1, $pop29 + copy_local $1=, $pop0 + copy_local $4=, $3 + br_if 0, $2 # 0: up to label6 +.LBB2_6: # %while.end + end_loop + end_block # label5: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $5, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB2_7: # %if.then + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size f1, .Lfunc_end2-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $6=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($6), $3 + block + i32.call $push1=, strlen@FUNCTION, $2 + i32.const $push2=, 14 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label7 +# BB#1: # %if.end + block + i32.load8_u $push19=, 0($2) + tee_local $push18=, $3=, $pop19 + i32.eqz $push30=, $pop18 + br_if 0, $pop30 # 0: down to label8 +# BB#2: # %while.body.lr.ph + i32.const $push20=, 1 + i32.add $2=, $2, $pop20 + i32.load $5=, 12($6) +.LBB3_3: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label9: + i32.const $push26=, 4 + i32.add $push25=, $5, $pop26 + tee_local $push24=, $4=, $pop25 + i32.store 12($6), $pop24 + i32.load $push23=, 0($5) + tee_local $push22=, $5=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label7 +# BB#4: # %to_hex.exit + # in Loop: Header=BB3_3 Depth=1 + i32.const $push28=, .L.str + i32.add $push6=, $5, $pop28 + i32.load8_u $push7=, 0($pop6) + i32.const $push27=, 255 + i32.and $push5=, $3, $pop27 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label7 +# BB#5: # %while.cond + # in Loop: Header=BB3_3 Depth=1 + i32.load8_u $3=, 0($2) + i32.const $push29=, 1 + i32.add $push0=, $2, $pop29 + copy_local $2=, $pop0 + copy_local $5=, $4 + br_if 0, $3 # 0: up to label9 +.LBB3_6: # %while.end + end_loop + end_block # label8: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $6, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB3_7: # %if.then + end_block # label7: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size f2, .Lfunc_end3-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .param i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $7=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($7), $4 + block + i32.call $push1=, strlen@FUNCTION, $3 + i32.const $push2=, 13 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label10 +# BB#1: # %if.end + block + i32.load8_u $push19=, 0($3) + tee_local $push18=, $4=, $pop19 + i32.eqz $push30=, $pop18 + br_if 0, $pop30 # 0: down to label11 +# BB#2: # %while.body.lr.ph + i32.const $push20=, 1 + i32.add $3=, $3, $pop20 + i32.load $6=, 12($7) +.LBB4_3: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label12: + i32.const $push26=, 4 + i32.add $push25=, $6, $pop26 + tee_local $push24=, $5=, $pop25 + i32.store 12($7), $pop24 + i32.load $push23=, 0($6) + tee_local $push22=, $6=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label10 +# BB#4: # %to_hex.exit + # in Loop: Header=BB4_3 Depth=1 + i32.const $push28=, .L.str + i32.add $push6=, $6, $pop28 + i32.load8_u $push7=, 0($pop6) + i32.const $push27=, 255 + i32.and $push5=, $4, $pop27 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label10 +# BB#5: # %while.cond + # in Loop: Header=BB4_3 Depth=1 + i32.load8_u $4=, 0($3) + i32.const $push29=, 1 + i32.add $push0=, $3, $pop29 + copy_local $3=, $pop0 + copy_local $6=, $5 + br_if 0, $4 # 0: up to label12 +.LBB4_6: # %while.end + end_loop + end_block # label11: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $7, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB4_7: # %if.then + end_block # label10: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end4: + .size f3, .Lfunc_end4-f3 + # -- End function + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 + .param i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $8=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($8), $5 + block + i32.call $push1=, strlen@FUNCTION, $4 + i32.const $push2=, 12 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label13 +# BB#1: # %if.end + block + i32.load8_u $push19=, 0($4) + tee_local $push18=, $5=, $pop19 + i32.eqz $push30=, $pop18 + br_if 0, $pop30 # 0: down to label14 +# BB#2: # %while.body.lr.ph + i32.const $push20=, 1 + i32.add $4=, $4, $pop20 + i32.load $7=, 12($8) +.LBB5_3: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label15: + i32.const $push26=, 4 + i32.add $push25=, $7, $pop26 + tee_local $push24=, $6=, $pop25 + i32.store 12($8), $pop24 + i32.load $push23=, 0($7) + tee_local $push22=, $7=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label13 +# BB#4: # %to_hex.exit + # in Loop: Header=BB5_3 Depth=1 + i32.const $push28=, .L.str + i32.add $push6=, $7, $pop28 + i32.load8_u $push7=, 0($pop6) + i32.const $push27=, 255 + i32.and $push5=, $5, $pop27 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label13 +# BB#5: # %while.cond + # in Loop: Header=BB5_3 Depth=1 + i32.load8_u $5=, 0($4) + i32.const $push29=, 1 + i32.add $push0=, $4, $pop29 + copy_local $4=, $pop0 + copy_local $7=, $6 + br_if 0, $5 # 0: up to label15 +.LBB5_6: # %while.end + end_loop + end_block # label14: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $8, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB5_7: # %if.then + end_block # label13: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end5: + .size f4, .Lfunc_end5-f4 + # -- End function + .section .text.f5,"ax",@progbits + .hidden f5 # -- Begin function f5 + .globl f5 + .type f5,@function +f5: # @f5 + .param i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $9=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($9), $6 + block + i32.call $push1=, strlen@FUNCTION, $5 + i32.const $push2=, 11 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label16 +# BB#1: # %if.end + block + i32.load8_u $push19=, 0($5) + tee_local $push18=, $6=, $pop19 + i32.eqz $push30=, $pop18 + br_if 0, $pop30 # 0: down to label17 +# BB#2: # %while.body.lr.ph + i32.const $push20=, 1 + i32.add $5=, $5, $pop20 + i32.load $8=, 12($9) +.LBB6_3: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label18: + i32.const $push26=, 4 + i32.add $push25=, $8, $pop26 + tee_local $push24=, $7=, $pop25 + i32.store 12($9), $pop24 + i32.load $push23=, 0($8) + tee_local $push22=, $8=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label16 +# BB#4: # %to_hex.exit + # in Loop: Header=BB6_3 Depth=1 + i32.const $push28=, .L.str + i32.add $push6=, $8, $pop28 + i32.load8_u $push7=, 0($pop6) + i32.const $push27=, 255 + i32.and $push5=, $6, $pop27 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label16 +# BB#5: # %while.cond + # in Loop: Header=BB6_3 Depth=1 + i32.load8_u $6=, 0($5) + i32.const $push29=, 1 + i32.add $push0=, $5, $pop29 + copy_local $5=, $pop0 + copy_local $8=, $7 + br_if 0, $6 # 0: up to label18 +.LBB6_6: # %while.end + end_loop + end_block # label17: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $9, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB6_7: # %if.then + end_block # label16: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end6: + .size f5, .Lfunc_end6-f5 + # -- End function + .section .text.f6,"ax",@progbits + .hidden f6 # -- Begin function f6 + .globl f6 + .type f6,@function +f6: # @f6 + .param i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $10=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($10), $7 + block + i32.call $push1=, strlen@FUNCTION, $6 + i32.const $push2=, 10 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label19 +# BB#1: # %if.end + block + i32.load8_u $push19=, 0($6) + tee_local $push18=, $7=, $pop19 + i32.eqz $push30=, $pop18 + br_if 0, $pop30 # 0: down to label20 +# BB#2: # %while.body.lr.ph + i32.const $push20=, 1 + i32.add $6=, $6, $pop20 + i32.load $9=, 12($10) +.LBB7_3: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label21: + i32.const $push26=, 4 + i32.add $push25=, $9, $pop26 + tee_local $push24=, $8=, $pop25 + i32.store 12($10), $pop24 + i32.load $push23=, 0($9) + tee_local $push22=, $9=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label19 +# BB#4: # %to_hex.exit + # in Loop: Header=BB7_3 Depth=1 + i32.const $push28=, .L.str + i32.add $push6=, $9, $pop28 + i32.load8_u $push7=, 0($pop6) + i32.const $push27=, 255 + i32.and $push5=, $7, $pop27 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label19 +# BB#5: # %while.cond + # in Loop: Header=BB7_3 Depth=1 + i32.load8_u $7=, 0($6) + i32.const $push29=, 1 + i32.add $push0=, $6, $pop29 + copy_local $6=, $pop0 + copy_local $9=, $8 + br_if 0, $7 # 0: up to label21 +.LBB7_6: # %while.end + end_loop + end_block # label20: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $10, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB7_7: # %if.then + end_block # label19: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end7: + .size f6, .Lfunc_end7-f6 + # -- End function + .section .text.f7,"ax",@progbits + .hidden f7 # -- Begin function f7 + .globl f7 + .type f7,@function +f7: # @f7 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $11=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($11), $8 + block + i32.call $push1=, strlen@FUNCTION, $7 + i32.const $push2=, 9 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label22 +# BB#1: # %if.end + block + i32.load8_u $push19=, 0($7) + tee_local $push18=, $8=, $pop19 + i32.eqz $push30=, $pop18 + br_if 0, $pop30 # 0: down to label23 +# BB#2: # %while.body.lr.ph + i32.const $push20=, 1 + i32.add $7=, $7, $pop20 + i32.load $10=, 12($11) +.LBB8_3: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label24: + i32.const $push26=, 4 + i32.add $push25=, $10, $pop26 + tee_local $push24=, $9=, $pop25 + i32.store 12($11), $pop24 + i32.load $push23=, 0($10) + tee_local $push22=, $10=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label22 +# BB#4: # %to_hex.exit + # in Loop: Header=BB8_3 Depth=1 + i32.const $push28=, .L.str + i32.add $push6=, $10, $pop28 + i32.load8_u $push7=, 0($pop6) + i32.const $push27=, 255 + i32.and $push5=, $8, $pop27 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label22 +# BB#5: # %while.cond + # in Loop: Header=BB8_3 Depth=1 + i32.load8_u $8=, 0($7) + i32.const $push29=, 1 + i32.add $push0=, $7, $pop29 + copy_local $7=, $pop0 + copy_local $10=, $9 + br_if 0, $8 # 0: up to label24 +.LBB8_6: # %while.end + end_loop + end_block # label23: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $11, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB8_7: # %if.then + end_block # label22: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end8: + .size f7, .Lfunc_end8-f7 + # -- End function + .section .text.f8,"ax",@progbits + .hidden f8 # -- Begin function f8 + .globl f8 + .type f8,@function +f8: # @f8 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $12=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($12), $9 + block + i32.call $push1=, strlen@FUNCTION, $8 + i32.const $push2=, 8 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label25 +# BB#1: # %if.end + block + i32.load8_u $push19=, 0($8) + tee_local $push18=, $9=, $pop19 + i32.eqz $push30=, $pop18 + br_if 0, $pop30 # 0: down to label26 +# BB#2: # %while.body.lr.ph + i32.const $push20=, 1 + i32.add $8=, $8, $pop20 + i32.load $11=, 12($12) +.LBB9_3: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label27: + i32.const $push26=, 4 + i32.add $push25=, $11, $pop26 + tee_local $push24=, $10=, $pop25 + i32.store 12($12), $pop24 + i32.load $push23=, 0($11) + tee_local $push22=, $11=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label25 +# BB#4: # %to_hex.exit + # in Loop: Header=BB9_3 Depth=1 + i32.const $push28=, .L.str + i32.add $push6=, $11, $pop28 + i32.load8_u $push7=, 0($pop6) + i32.const $push27=, 255 + i32.and $push5=, $9, $pop27 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label25 +# BB#5: # %while.cond + # in Loop: Header=BB9_3 Depth=1 + i32.load8_u $9=, 0($8) + i32.const $push29=, 1 + i32.add $push0=, $8, $pop29 + copy_local $8=, $pop0 + copy_local $11=, $10 + br_if 0, $9 # 0: up to label27 +.LBB9_6: # %while.end + end_loop + end_block # label26: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $12, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB9_7: # %if.then + end_block # label25: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end9: + .size f8, .Lfunc_end9-f8 + # -- End function + .section .text.f9,"ax",@progbits + .hidden f9 # -- Begin function f9 + .globl f9 + .type f9,@function +f9: # @f9 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $13=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($13), $10 + block + i32.call $push1=, strlen@FUNCTION, $9 + i32.const $push2=, 7 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label28 +# BB#1: # %if.end + block + i32.load8_u $push19=, 0($9) + tee_local $push18=, $10=, $pop19 + i32.eqz $push30=, $pop18 + br_if 0, $pop30 # 0: down to label29 +# BB#2: # %while.body.lr.ph + i32.const $push20=, 1 + i32.add $9=, $9, $pop20 + i32.load $12=, 12($13) +.LBB10_3: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label30: + i32.const $push26=, 4 + i32.add $push25=, $12, $pop26 + tee_local $push24=, $11=, $pop25 + i32.store 12($13), $pop24 + i32.load $push23=, 0($12) + tee_local $push22=, $12=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label28 +# BB#4: # %to_hex.exit + # in Loop: Header=BB10_3 Depth=1 + i32.const $push28=, .L.str + i32.add $push6=, $12, $pop28 + i32.load8_u $push7=, 0($pop6) + i32.const $push27=, 255 + i32.and $push5=, $10, $pop27 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label28 +# BB#5: # %while.cond + # in Loop: Header=BB10_3 Depth=1 + i32.load8_u $10=, 0($9) + i32.const $push29=, 1 + i32.add $push0=, $9, $pop29 + copy_local $9=, $pop0 + copy_local $12=, $11 + br_if 0, $10 # 0: up to label30 +.LBB10_6: # %while.end + end_loop + end_block # label29: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $13, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB10_7: # %if.then + end_block # label28: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end10: + .size f9, .Lfunc_end10-f9 + # -- End function + .section .text.f10,"ax",@progbits + .hidden f10 # -- Begin function f10 + .globl f10 + .type f10,@function +f10: # @f10 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $14=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($14), $11 + block + i32.call $push1=, strlen@FUNCTION, $10 + i32.const $push2=, 6 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label31 +# BB#1: # %if.end + block + i32.load8_u $push19=, 0($10) + tee_local $push18=, $11=, $pop19 + i32.eqz $push30=, $pop18 + br_if 0, $pop30 # 0: down to label32 +# BB#2: # %while.body.lr.ph + i32.const $push20=, 1 + i32.add $10=, $10, $pop20 + i32.load $13=, 12($14) +.LBB11_3: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label33: + i32.const $push26=, 4 + i32.add $push25=, $13, $pop26 + tee_local $push24=, $12=, $pop25 + i32.store 12($14), $pop24 + i32.load $push23=, 0($13) + tee_local $push22=, $13=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label31 +# BB#4: # %to_hex.exit + # in Loop: Header=BB11_3 Depth=1 + i32.const $push28=, .L.str + i32.add $push6=, $13, $pop28 + i32.load8_u $push7=, 0($pop6) + i32.const $push27=, 255 + i32.and $push5=, $11, $pop27 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label31 +# BB#5: # %while.cond + # in Loop: Header=BB11_3 Depth=1 + i32.load8_u $11=, 0($10) + i32.const $push29=, 1 + i32.add $push0=, $10, $pop29 + copy_local $10=, $pop0 + copy_local $13=, $12 + br_if 0, $11 # 0: up to label33 +.LBB11_6: # %while.end + end_loop + end_block # label32: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $14, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB11_7: # %if.then + end_block # label31: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end11: + .size f10, .Lfunc_end11-f10 + # -- End function + .section .text.f11,"ax",@progbits + .hidden f11 # -- Begin function f11 + .globl f11 + .type f11,@function +f11: # @f11 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $15=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($15), $12 + block + i32.call $push1=, strlen@FUNCTION, $11 + i32.const $push2=, 5 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label34 +# BB#1: # %if.end + block + i32.load8_u $push19=, 0($11) + tee_local $push18=, $12=, $pop19 + i32.eqz $push30=, $pop18 + br_if 0, $pop30 # 0: down to label35 +# BB#2: # %while.body.lr.ph + i32.const $push20=, 1 + i32.add $11=, $11, $pop20 + i32.load $14=, 12($15) +.LBB12_3: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label36: + i32.const $push26=, 4 + i32.add $push25=, $14, $pop26 + tee_local $push24=, $13=, $pop25 + i32.store 12($15), $pop24 + i32.load $push23=, 0($14) + tee_local $push22=, $14=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label34 +# BB#4: # %to_hex.exit + # in Loop: Header=BB12_3 Depth=1 + i32.const $push28=, .L.str + i32.add $push6=, $14, $pop28 + i32.load8_u $push7=, 0($pop6) + i32.const $push27=, 255 + i32.and $push5=, $12, $pop27 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label34 +# BB#5: # %while.cond + # in Loop: Header=BB12_3 Depth=1 + i32.load8_u $12=, 0($11) + i32.const $push29=, 1 + i32.add $push0=, $11, $pop29 + copy_local $11=, $pop0 + copy_local $14=, $13 + br_if 0, $12 # 0: up to label36 +.LBB12_6: # %while.end + end_loop + end_block # label35: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $15, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB12_7: # %if.then + end_block # label34: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end12: + .size f11, .Lfunc_end12-f11 + # -- End function + .section .text.f12,"ax",@progbits + .hidden f12 # -- Begin function f12 + .globl f12 + .type f12,@function +f12: # @f12 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $16=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($16), $13 + block + i32.call $push1=, strlen@FUNCTION, $12 + i32.const $push2=, 4 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label37 +# BB#1: # %if.end + block + i32.load8_u $push19=, 0($12) + tee_local $push18=, $13=, $pop19 + i32.eqz $push30=, $pop18 + br_if 0, $pop30 # 0: down to label38 +# BB#2: # %while.body.lr.ph + i32.const $push20=, 1 + i32.add $12=, $12, $pop20 + i32.load $15=, 12($16) +.LBB13_3: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label39: + i32.const $push26=, 4 + i32.add $push25=, $15, $pop26 + tee_local $push24=, $14=, $pop25 + i32.store 12($16), $pop24 + i32.load $push23=, 0($15) + tee_local $push22=, $15=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label37 +# BB#4: # %to_hex.exit + # in Loop: Header=BB13_3 Depth=1 + i32.const $push28=, .L.str + i32.add $push6=, $15, $pop28 + i32.load8_u $push7=, 0($pop6) + i32.const $push27=, 255 + i32.and $push5=, $13, $pop27 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label37 +# BB#5: # %while.cond + # in Loop: Header=BB13_3 Depth=1 + i32.load8_u $13=, 0($12) + i32.const $push29=, 1 + i32.add $push0=, $12, $pop29 + copy_local $12=, $pop0 + copy_local $15=, $14 + br_if 0, $13 # 0: up to label39 +.LBB13_6: # %while.end + end_loop + end_block # label38: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $16, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB13_7: # %if.then + end_block # label37: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end13: + .size f12, .Lfunc_end13-f12 + # -- End function + .section .text.f13,"ax",@progbits + .hidden f13 # -- Begin function f13 + .globl f13 + .type f13,@function +f13: # @f13 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $17=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($17), $14 + block + i32.call $push1=, strlen@FUNCTION, $13 + i32.const $push2=, 3 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label40 +# BB#1: # %if.end + block + i32.load8_u $push19=, 0($13) + tee_local $push18=, $14=, $pop19 + i32.eqz $push30=, $pop18 + br_if 0, $pop30 # 0: down to label41 +# BB#2: # %while.body.lr.ph + i32.const $push20=, 1 + i32.add $13=, $13, $pop20 + i32.load $16=, 12($17) +.LBB14_3: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label42: + i32.const $push26=, 4 + i32.add $push25=, $16, $pop26 + tee_local $push24=, $15=, $pop25 + i32.store 12($17), $pop24 + i32.load $push23=, 0($16) + tee_local $push22=, $16=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label40 +# BB#4: # %to_hex.exit + # in Loop: Header=BB14_3 Depth=1 + i32.const $push28=, .L.str + i32.add $push6=, $16, $pop28 + i32.load8_u $push7=, 0($pop6) + i32.const $push27=, 255 + i32.and $push5=, $14, $pop27 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label40 +# BB#5: # %while.cond + # in Loop: Header=BB14_3 Depth=1 + i32.load8_u $14=, 0($13) + i32.const $push29=, 1 + i32.add $push0=, $13, $pop29 + copy_local $13=, $pop0 + copy_local $16=, $15 + br_if 0, $14 # 0: up to label42 +.LBB14_6: # %while.end + end_loop + end_block # label41: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $17, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB14_7: # %if.then + end_block # label40: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end14: + .size f13, .Lfunc_end14-f13 + # -- End function + .section .text.f14,"ax",@progbits + .hidden f14 # -- Begin function f14 + .globl f14 + .type f14,@function +f14: # @f14 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $18=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($18), $15 + block + i32.call $push1=, strlen@FUNCTION, $14 + i32.const $push2=, 2 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label43 +# BB#1: # %if.end + block + i32.load8_u $push19=, 0($14) + tee_local $push18=, $15=, $pop19 + i32.eqz $push30=, $pop18 + br_if 0, $pop30 # 0: down to label44 +# BB#2: # %while.body.lr.ph + i32.const $push20=, 1 + i32.add $14=, $14, $pop20 + i32.load $17=, 12($18) +.LBB15_3: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label45: + i32.const $push26=, 4 + i32.add $push25=, $17, $pop26 + tee_local $push24=, $16=, $pop25 + i32.store 12($18), $pop24 + i32.load $push23=, 0($17) + tee_local $push22=, $17=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label43 +# BB#4: # %to_hex.exit + # in Loop: Header=BB15_3 Depth=1 + i32.const $push28=, .L.str + i32.add $push6=, $17, $pop28 + i32.load8_u $push7=, 0($pop6) + i32.const $push27=, 255 + i32.and $push5=, $15, $pop27 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label43 +# BB#5: # %while.cond + # in Loop: Header=BB15_3 Depth=1 + i32.load8_u $15=, 0($14) + i32.const $push29=, 1 + i32.add $push0=, $14, $pop29 + copy_local $14=, $pop0 + copy_local $17=, $16 + br_if 0, $15 # 0: up to label45 +.LBB15_6: # %while.end + end_loop + end_block # label44: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $18, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB15_7: # %if.then + end_block # label43: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end15: + .size f14, .Lfunc_end15-f14 + # -- End function + .section .text.f15,"ax",@progbits + .hidden f15 # -- Begin function f15 + .globl f15 + .type f15,@function +f15: # @f15 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $19=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($19), $16 + block + i32.call $push1=, strlen@FUNCTION, $15 + i32.const $push2=, 1 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label46 +# BB#1: # %if.end + block + i32.load8_u $push19=, 0($15) + tee_local $push18=, $16=, $pop19 + i32.eqz $push30=, $pop18 + br_if 0, $pop30 # 0: down to label47 +# BB#2: # %while.body.lr.ph + i32.const $push20=, 1 + i32.add $15=, $15, $pop20 + i32.load $18=, 12($19) +.LBB16_3: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label48: + i32.const $push26=, 4 + i32.add $push25=, $18, $pop26 + tee_local $push24=, $17=, $pop25 + i32.store 12($19), $pop24 + i32.load $push23=, 0($18) + tee_local $push22=, $18=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label46 +# BB#4: # %to_hex.exit + # in Loop: Header=BB16_3 Depth=1 + i32.const $push28=, .L.str + i32.add $push6=, $18, $pop28 + i32.load8_u $push7=, 0($pop6) + i32.const $push27=, 255 + i32.and $push5=, $16, $pop27 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label46 +# BB#5: # %while.cond + # in Loop: Header=BB16_3 Depth=1 + i32.load8_u $16=, 0($15) + i32.const $push29=, 1 + i32.add $push0=, $15, $pop29 + copy_local $15=, $pop0 + copy_local $18=, $17 + br_if 0, $16 # 0: up to label48 +.LBB16_6: # %while.end + end_loop + end_block # label47: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $19, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB16_7: # %if.then + end_block # label46: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end16: + .size f15, .Lfunc_end16-f15 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push84=, 0 + i32.const $push82=, 0 + i32.load $push81=, __stack_pointer($pop82) + i32.const $push83=, 640 + i32.sub $push292=, $pop81, $pop83 + tee_local $push291=, $0=, $pop292 + i32.store __stack_pointer($pop84), $pop291 + i32.const $push85=, 576 + i32.add $push86=, $0, $pop85 + i32.const $push0=, 56 + i32.add $push1=, $pop86, $pop0 + i64.const $push2=, 64424509454 + i64.store 0($pop1), $pop2 + i32.const $push87=, 576 + i32.add $push88=, $0, $pop87 + i32.const $push3=, 48 + i32.add $push4=, $pop88, $pop3 + i64.const $push5=, 55834574860 + i64.store 0($pop4), $pop5 + i32.const $push89=, 576 + i32.add $push90=, $0, $pop89 + i32.const $push6=, 40 + i32.add $push7=, $pop90, $pop6 + i64.const $push8=, 47244640266 + i64.store 0($pop7), $pop8 + i32.const $push91=, 576 + i32.add $push92=, $0, $pop91 + i32.const $push9=, 32 + i32.add $push10=, $pop92, $pop9 + i64.const $push11=, 38654705672 + i64.store 0($pop10), $pop11 + i32.const $push93=, 576 + i32.add $push94=, $0, $pop93 + i32.const $push12=, 24 + i32.add $push13=, $pop94, $pop12 + i64.const $push14=, 30064771078 + i64.store 0($pop13), $pop14 + i32.const $push95=, 576 + i32.add $push96=, $0, $pop95 + i32.const $push15=, 16 + i32.add $push16=, $pop96, $pop15 + i64.const $push17=, 21474836484 + i64.store 0($pop16), $pop17 + i64.const $push18=, 12884901890 + i64.store 584($0), $pop18 + i64.const $push19=, 4294967296 + i64.store 576($0), $pop19 + i32.const $push20=, .L.str + i32.const $push97=, 576 + i32.add $push98=, $0, $pop97 + call f0@FUNCTION, $pop20, $pop98 + i32.const $push99=, 512 + i32.add $push100=, $0, $pop99 + i32.const $push290=, 56 + i32.add $push21=, $pop100, $pop290 + i32.const $push22=, 15 + i32.store 0($pop21), $pop22 + i32.const $push101=, 512 + i32.add $push102=, $0, $pop101 + i32.const $push289=, 48 + i32.add $push23=, $pop102, $pop289 + i64.const $push24=, 60129542157 + i64.store 0($pop23), $pop24 + i32.const $push103=, 512 + i32.add $push104=, $0, $pop103 + i32.const $push288=, 40 + i32.add $push25=, $pop104, $pop288 + i64.const $push26=, 51539607563 + i64.store 0($pop25), $pop26 + i32.const $push105=, 512 + i32.add $push106=, $0, $pop105 + i32.const $push287=, 32 + i32.add $push27=, $pop106, $pop287 + i64.const $push28=, 42949672969 + i64.store 0($pop27), $pop28 + i32.const $push107=, 512 + i32.add $push108=, $0, $pop107 + i32.const $push286=, 24 + i32.add $push29=, $pop108, $pop286 + i64.const $push30=, 34359738375 + i64.store 0($pop29), $pop30 + i32.const $push109=, 512 + i32.add $push110=, $0, $pop109 + i32.const $push285=, 16 + i32.add $push31=, $pop110, $pop285 + i64.const $push32=, 25769803781 + i64.store 0($pop31), $pop32 + i64.const $push33=, 17179869187 + i64.store 520($0), $pop33 + i64.const $push34=, 8589934593 + i64.store 512($0), $pop34 + i32.const $push35=, .L.str+1 + i32.const $push111=, 512 + i32.add $push112=, $0, $pop111 + call f1@FUNCTION, $0, $pop35, $pop112 + i32.const $push113=, 448 + i32.add $push114=, $0, $pop113 + i32.const $push284=, 48 + i32.add $push36=, $pop114, $pop284 + i64.const $push283=, 64424509454 + i64.store 0($pop36), $pop283 + i32.const $push115=, 448 + i32.add $push116=, $0, $pop115 + i32.const $push282=, 40 + i32.add $push37=, $pop116, $pop282 + i64.const $push281=, 55834574860 + i64.store 0($pop37), $pop281 + i32.const $push117=, 448 + i32.add $push118=, $0, $pop117 + i32.const $push280=, 32 + i32.add $push38=, $pop118, $pop280 + i64.const $push279=, 47244640266 + i64.store 0($pop38), $pop279 + i32.const $push119=, 448 + i32.add $push120=, $0, $pop119 + i32.const $push278=, 24 + i32.add $push39=, $pop120, $pop278 + i64.const $push277=, 38654705672 + i64.store 0($pop39), $pop277 + i32.const $push121=, 448 + i32.add $push122=, $0, $pop121 + i32.const $push276=, 16 + i32.add $push40=, $pop122, $pop276 + i64.const $push275=, 30064771078 + i64.store 0($pop40), $pop275 + i64.const $push274=, 21474836484 + i64.store 456($0), $pop274 + i64.const $push273=, 12884901890 + i64.store 448($0), $pop273 + i32.const $push41=, .L.str+2 + i32.const $push123=, 448 + i32.add $push124=, $0, $pop123 + call f2@FUNCTION, $0, $0, $pop41, $pop124 + i32.const $push125=, 384 + i32.add $push126=, $0, $pop125 + i32.const $push272=, 48 + i32.add $push42=, $pop126, $pop272 + i32.const $push271=, 15 + i32.store 0($pop42), $pop271 + i32.const $push127=, 384 + i32.add $push128=, $0, $pop127 + i32.const $push270=, 40 + i32.add $push43=, $pop128, $pop270 + i64.const $push269=, 60129542157 + i64.store 0($pop43), $pop269 + i32.const $push129=, 384 + i32.add $push130=, $0, $pop129 + i32.const $push268=, 32 + i32.add $push44=, $pop130, $pop268 + i64.const $push267=, 51539607563 + i64.store 0($pop44), $pop267 + i32.const $push131=, 384 + i32.add $push132=, $0, $pop131 + i32.const $push266=, 24 + i32.add $push45=, $pop132, $pop266 + i64.const $push265=, 42949672969 + i64.store 0($pop45), $pop265 + i32.const $push133=, 384 + i32.add $push134=, $0, $pop133 + i32.const $push264=, 16 + i32.add $push46=, $pop134, $pop264 + i64.const $push263=, 34359738375 + i64.store 0($pop46), $pop263 + i64.const $push262=, 25769803781 + i64.store 392($0), $pop262 + i64.const $push261=, 17179869187 + i64.store 384($0), $pop261 + i32.const $push47=, .L.str+3 + i32.const $push135=, 384 + i32.add $push136=, $0, $pop135 + call f3@FUNCTION, $0, $0, $0, $pop47, $pop136 + i32.const $push137=, 336 + i32.add $push138=, $0, $pop137 + i32.const $push260=, 40 + i32.add $push48=, $pop138, $pop260 + i64.const $push259=, 64424509454 + i64.store 0($pop48), $pop259 + i32.const $push139=, 336 + i32.add $push140=, $0, $pop139 + i32.const $push258=, 32 + i32.add $push49=, $pop140, $pop258 + i64.const $push257=, 55834574860 + i64.store 0($pop49), $pop257 + i32.const $push141=, 336 + i32.add $push142=, $0, $pop141 + i32.const $push256=, 24 + i32.add $push50=, $pop142, $pop256 + i64.const $push255=, 47244640266 + i64.store 0($pop50), $pop255 + i32.const $push143=, 336 + i32.add $push144=, $0, $pop143 + i32.const $push254=, 16 + i32.add $push51=, $pop144, $pop254 + i64.const $push253=, 38654705672 + i64.store 0($pop51), $pop253 + i64.const $push252=, 30064771078 + i64.store 344($0), $pop252 + i64.const $push251=, 21474836484 + i64.store 336($0), $pop251 + i32.const $push52=, .L.str+4 + i32.const $push145=, 336 + i32.add $push146=, $0, $pop145 + call f4@FUNCTION, $0, $0, $0, $0, $pop52, $pop146 + i32.const $push147=, 288 + i32.add $push148=, $0, $pop147 + i32.const $push250=, 40 + i32.add $push53=, $pop148, $pop250 + i32.const $push249=, 15 + i32.store 0($pop53), $pop249 + i32.const $push149=, 288 + i32.add $push150=, $0, $pop149 + i32.const $push248=, 32 + i32.add $push54=, $pop150, $pop248 + i64.const $push247=, 60129542157 + i64.store 0($pop54), $pop247 + i32.const $push151=, 288 + i32.add $push152=, $0, $pop151 + i32.const $push246=, 24 + i32.add $push55=, $pop152, $pop246 + i64.const $push245=, 51539607563 + i64.store 0($pop55), $pop245 + i32.const $push153=, 288 + i32.add $push154=, $0, $pop153 + i32.const $push244=, 16 + i32.add $push56=, $pop154, $pop244 + i64.const $push243=, 42949672969 + i64.store 0($pop56), $pop243 + i64.const $push242=, 34359738375 + i64.store 296($0), $pop242 + i64.const $push241=, 25769803781 + i64.store 288($0), $pop241 + i32.const $push57=, .L.str+5 + i32.const $push155=, 288 + i32.add $push156=, $0, $pop155 + call f5@FUNCTION, $0, $0, $0, $0, $0, $pop57, $pop156 + i32.const $push157=, 240 + i32.add $push158=, $0, $pop157 + i32.const $push240=, 32 + i32.add $push58=, $pop158, $pop240 + i64.const $push239=, 64424509454 + i64.store 0($pop58), $pop239 + i32.const $push159=, 240 + i32.add $push160=, $0, $pop159 + i32.const $push238=, 24 + i32.add $push59=, $pop160, $pop238 + i64.const $push237=, 55834574860 + i64.store 0($pop59), $pop237 + i32.const $push161=, 240 + i32.add $push162=, $0, $pop161 + i32.const $push236=, 16 + i32.add $push60=, $pop162, $pop236 + i64.const $push235=, 47244640266 + i64.store 0($pop60), $pop235 + i64.const $push234=, 38654705672 + i64.store 248($0), $pop234 + i64.const $push233=, 30064771078 + i64.store 240($0), $pop233 + i32.const $push61=, .L.str+6 + i32.const $push163=, 240 + i32.add $push164=, $0, $pop163 + call f6@FUNCTION, $0, $0, $0, $0, $0, $0, $pop61, $pop164 + i32.const $push165=, 192 + i32.add $push166=, $0, $pop165 + i32.const $push232=, 32 + i32.add $push62=, $pop166, $pop232 + i32.const $push231=, 15 + i32.store 0($pop62), $pop231 + i32.const $push167=, 192 + i32.add $push168=, $0, $pop167 + i32.const $push230=, 24 + i32.add $push63=, $pop168, $pop230 + i64.const $push229=, 60129542157 + i64.store 0($pop63), $pop229 + i32.const $push169=, 192 + i32.add $push170=, $0, $pop169 + i32.const $push228=, 16 + i32.add $push64=, $pop170, $pop228 + i64.const $push227=, 51539607563 + i64.store 0($pop64), $pop227 + i64.const $push226=, 42949672969 + i64.store 200($0), $pop226 + i64.const $push225=, 34359738375 + i64.store 192($0), $pop225 + i32.const $push65=, .L.str+7 + i32.const $push171=, 192 + i32.add $push172=, $0, $pop171 + call f7@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $pop65, $pop172 + i32.const $push173=, 160 + i32.add $push174=, $0, $pop173 + i32.const $push224=, 24 + i32.add $push66=, $pop174, $pop224 + i64.const $push223=, 64424509454 + i64.store 0($pop66), $pop223 + i32.const $push175=, 160 + i32.add $push176=, $0, $pop175 + i32.const $push222=, 16 + i32.add $push67=, $pop176, $pop222 + i64.const $push221=, 55834574860 + i64.store 0($pop67), $pop221 + i64.const $push220=, 47244640266 + i64.store 168($0), $pop220 + i64.const $push219=, 38654705672 + i64.store 160($0), $pop219 + i32.const $push68=, .L.str+8 + i32.const $push177=, 160 + i32.add $push178=, $0, $pop177 + call f8@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $pop68, $pop178 + i32.const $push179=, 128 + i32.add $push180=, $0, $pop179 + i32.const $push218=, 24 + i32.add $push69=, $pop180, $pop218 + i32.const $push217=, 15 + i32.store 0($pop69), $pop217 + i32.const $push181=, 128 + i32.add $push182=, $0, $pop181 + i32.const $push216=, 16 + i32.add $push70=, $pop182, $pop216 + i64.const $push215=, 60129542157 + i64.store 0($pop70), $pop215 + i64.const $push214=, 51539607563 + i64.store 136($0), $pop214 + i64.const $push213=, 42949672969 + i64.store 128($0), $pop213 + i32.const $push71=, .L.str+9 + i32.const $push183=, 128 + i32.add $push184=, $0, $pop183 + call f9@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop71, $pop184 + i32.const $push185=, 96 + i32.add $push186=, $0, $pop185 + i32.const $push212=, 16 + i32.add $push72=, $pop186, $pop212 + i64.const $push211=, 64424509454 + i64.store 0($pop72), $pop211 + i64.const $push210=, 55834574860 + i64.store 104($0), $pop210 + i64.const $push209=, 47244640266 + i64.store 96($0), $pop209 + i32.const $push73=, .L.str+10 + i32.const $push187=, 96 + i32.add $push188=, $0, $pop187 + call f10@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop73, $pop188 + i32.const $push189=, 64 + i32.add $push190=, $0, $pop189 + i32.const $push208=, 16 + i32.add $push74=, $pop190, $pop208 + i32.const $push207=, 15 + i32.store 0($pop74), $pop207 + i64.const $push206=, 60129542157 + i64.store 72($0), $pop206 + i64.const $push205=, 51539607563 + i64.store 64($0), $pop205 + i32.const $push75=, .L.str+11 + i32.const $push191=, 64 + i32.add $push192=, $0, $pop191 + call f11@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop75, $pop192 + i64.const $push204=, 64424509454 + i64.store 56($0), $pop204 + i64.const $push203=, 55834574860 + i64.store 48($0), $pop203 + i32.const $push76=, .L.str+12 + i32.const $push193=, 48 + i32.add $push194=, $0, $pop193 + call f12@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop76, $pop194 + i32.const $push202=, 15 + i32.store 40($0), $pop202 + i64.const $push201=, 60129542157 + i64.store 32($0), $pop201 + i32.const $push77=, .L.str+13 + i32.const $push195=, 32 + i32.add $push196=, $0, $pop195 + call f13@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop77, $pop196 + i64.const $push200=, 64424509454 + i64.store 16($0), $pop200 + i32.const $push78=, .L.str+14 + i32.const $push197=, 16 + i32.add $push198=, $0, $pop197 + call f14@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop78, $pop198 + i32.const $push199=, 15 + i32.store 0($0), $pop199 + i32.const $push79=, .L.str+15 + call f15@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop79, $0 + i32.const $push80=, 0 + call exit@FUNCTION, $pop80 + unreachable + .endfunc +.Lfunc_end17: + .size main, .Lfunc_end17-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.16,"aMS",@progbits,1 + .p2align 4 +.L.str: + .asciz "0123456789abcdef" + .size .L.str, 17 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype strlen, i32, i32 + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-20.c.s b/src/binaryen/test/torture-s/va-arg-20.c.s new file mode 100644 index 0000000000..bdd52f12b1 --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-20.c.s @@ -0,0 +1,98 @@ + .text + .file "va-arg-20.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + block + i32.const $push0=, 7 + i32.add $push1=, $0, $pop0 + i32.const $push2=, -8 + i32.and $push3=, $pop1, $pop2 + i64.load $push4=, 0($pop3) + i64.const $push5=, 16 + i64.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %if.end + return +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push10=, 0 + i32.const $push8=, 0 + i32.load $push7=, __stack_pointer($pop8) + i32.const $push9=, 16 + i32.sub $push15=, $pop7, $pop9 + tee_local $push14=, $3=, $pop15 + i32.store __stack_pointer($pop10), $pop14 + i32.store 12($3), $2 + block + i32.const $push0=, 7 + i32.add $push1=, $2, $pop0 + i32.const $push2=, -8 + i32.and $push3=, $pop1, $pop2 + i64.load $push4=, 0($pop3) + i64.const $push5=, 16 + i64.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label1 +# BB#1: # %foo.exit + i32.const $push13=, 0 + i32.const $push11=, 16 + i32.add $push12=, $3, $pop11 + i32.store __stack_pointer($pop13), $pop12 + return +.LBB1_2: # %if.then.i + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push9=, $pop2, $pop4 + tee_local $push8=, $0=, $pop9 + i32.store __stack_pointer($pop5), $pop8 + i64.const $push0=, 16 + i64.store 0($0), $pop0 + i32.const $push1=, 0 + i32.const $push7=, 0 + call bar@FUNCTION, $pop1, $pop7, $0 + i32.const $push6=, 0 + call exit@FUNCTION, $pop6 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-21.c.s b/src/binaryen/test/torture-s/va-arg-21.c.s new file mode 100644 index 0000000000..e2f41785d5 --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-21.c.s @@ -0,0 +1,73 @@ + .text + .file "va-arg-21.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push3=, 0 + i32.load $push2=, __stack_pointer($pop3) + i32.const $push4=, 16 + i32.sub $push7=, $pop2, $pop4 + tee_local $push6=, $0=, $pop7 + i32.store __stack_pointer($pop5), $pop6 + i32.const $push0=, .L.str.1 + i32.store 0($0), $pop0 + call doit@FUNCTION, $0, $0 + i32.const $push1=, 0 + call exit@FUNCTION, $pop1 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.doit,"ax",@progbits + .type doit,@function # -- Begin function doit +doit: # @doit + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push0=, 4 + i32.call $2=, malloc@FUNCTION, $pop0 + i32.const $push3=, 4 + i32.call $3=, malloc@FUNCTION, $pop3 + i32.store 0($2), $1 + i32.const $push1=, .L.str + i32.call $drop=, vprintf@FUNCTION, $pop1, $1 + i32.store 0($3), $1 + i32.const $push2=, .L.str + i32.call $drop=, vprintf@FUNCTION, $pop2, $1 + block + i32.eqz $push4=, $3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + return +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size doit, .Lfunc_end1-doit + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "%s" + .size .L.str, 3 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "hello world\n" + .size .L.str.1, 13 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 + .functype malloc, i32, i32 + .functype vprintf, i32, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/va-arg-22.c.s b/src/binaryen/test/torture-s/va-arg-22.c.s new file mode 100644 index 0000000000..7a25923491 --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-22.c.s @@ -0,0 +1,2142 @@ + .text + .file "va-arg-22.c" + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.load $3=, bar.lastc($pop0) + block + block + i32.const $push15=, 0 + i32.load $push14=, bar.lastn($pop15) + tee_local $push13=, $2=, $pop14 + i32.eq $push1=, $pop13, $0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %if.then + i32.ne $push2=, $3, $2 + br_if 1, $pop2 # 1: down to label0 +# BB#2: # %if.end + i32.const $3=, 0 + i32.const $push18=, 0 + i32.store bar.lastn($pop18), $0 + i32.const $push17=, 0 + i32.const $push16=, 0 + i32.store bar.lastc($pop17), $pop16 +.LBB0_3: # %if.end3 + end_block # label1: + i32.const $push3=, 3 + i32.shl $push4=, $0, $pop3 + i32.xor $push5=, $3, $pop4 + i32.const $push6=, 24 + i32.shl $push7=, $pop5, $pop6 + i32.const $push19=, 24 + i32.shr_s $push8=, $pop7, $pop19 + i32.ne $push9=, $pop8, $1 + br_if 0, $pop9 # 0: down to label0 +# BB#4: # %if.end8 + i32.const $push12=, 0 + i32.const $push10=, 1 + i32.add $push11=, $3, $pop10 + i32.store bar.lastc($pop12), $pop11 + return +.LBB0_5: # %if.then2 + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size bar, .Lfunc_end0-bar + # -- End function + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32 + .local i64, i32, i32, i32, i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push471=, 0 + i32.const $push469=, 0 + i32.load $push468=, __stack_pointer($pop469) + i32.const $push470=, 352 + i32.sub $push532=, $pop468, $pop470 + tee_local $push531=, $9=, $pop532 + i32.store __stack_pointer($pop471), $pop531 + block + i32.const $push14=, 21 + i32.ne $push15=, $0, $pop14 + br_if 0, $pop15 # 0: down to label2 +# BB#1: # %if.end + i32.store 12($9), $1 + i32.const $push16=, 4 + i32.add $push17=, $1, $pop16 + i32.store 12($9), $pop17 + i32.const $push18=, 0 + i32.load $0=, bar.lastc($pop18) + i32.load8_s $8=, 0($1) + block + i32.const $push535=, 0 + i32.load $push534=, bar.lastn($pop535) + tee_local $push533=, $3=, $pop534 + i32.const $push19=, 1 + i32.eq $push20=, $pop533, $pop19 + br_if 0, $pop20 # 0: down to label3 +# BB#2: # %if.then.i + i32.ne $push21=, $0, $3 + br_if 1, $pop21 # 1: down to label2 +# BB#3: # %if.end.i + i32.const $0=, 0 + i32.const $push538=, 0 + i32.const $push22=, 1 + i32.store bar.lastn($pop538), $pop22 + i32.const $push537=, 0 + i32.const $push536=, 0 + i32.store bar.lastc($pop537), $pop536 +.LBB1_4: # %if.end3.i + end_block # label3: + i32.const $push23=, 24 + i32.shl $push24=, $0, $pop23 + i32.const $push540=, 24 + i32.shr_s $push25=, $pop24, $pop540 + i32.const $push539=, 8 + i32.xor $push26=, $pop25, $pop539 + i32.ne $push27=, $pop26, $8 + br_if 0, $pop27 # 0: down to label2 +# BB#5: # %if.then.i312 + i32.const $push544=, 0 + i32.const $push28=, 1 + i32.add $push29=, $0, $pop28 + i32.store bar.lastc($pop544), $pop29 + i32.const $push543=, 8 + i32.add $push542=, $1, $pop543 + tee_local $push541=, $8=, $pop542 + i32.store 12($9), $pop541 + br_if 0, $0 # 0: down to label2 +# BB#6: # %if.end3.i319 + i32.const $push30=, 4 + i32.add $push31=, $1, $pop30 + i32.load16_u $0=, 0($pop31):p2align=0 + i32.const $push547=, 0 + i32.const $push32=, 2 + i32.store bar.lastn($pop547), $pop32 + i32.const $push546=, 0 + i32.const $push545=, 0 + i32.store bar.lastc($pop546), $pop545 + i32.const $push33=, 255 + i32.and $push34=, $0, $pop33 + i32.const $push35=, 16 + i32.ne $push36=, $pop34, $pop35 + br_if 0, $pop36 # 0: down to label2 +# BB#7: # %if.end3.i319.1 + i32.const $push548=, 0 + i32.const $push37=, 1 + i32.store bar.lastc($pop548), $pop37 + i32.const $push38=, 65280 + i32.and $push39=, $0, $pop38 + i32.const $push40=, 4352 + i32.ne $push41=, $pop39, $pop40 + br_if 0, $pop41 # 0: down to label2 +# BB#8: # %if.end3.i333 + i32.const $push551=, 0 + i32.const $push42=, 3 + i32.store bar.lastn($pop551), $pop42 + i32.load16_u $push43=, 0($8):p2align=0 + i32.store16 344($9), $pop43 + i32.const $push550=, 0 + i32.const $push549=, 0 + i32.store bar.lastc($pop550), $pop549 + i32.const $push44=, 12 + i32.add $push45=, $1, $pop44 + i32.store 12($9), $pop45 + i32.const $push46=, 2 + i32.add $push47=, $8, $pop46 + i32.load8_u $push48=, 0($pop47) + i32.store8 346($9), $pop48 + i32.load8_u $push50=, 344($9) + i32.const $push49=, 24 + i32.ne $push51=, $pop50, $pop49 + br_if 0, $pop51 # 0: down to label2 +# BB#9: # %if.end3.i333.1 + i32.const $push552=, 0 + i32.const $push52=, 1 + i32.store bar.lastc($pop552), $pop52 + i32.load8_u $push54=, 345($9) + i32.const $push53=, 25 + i32.ne $push55=, $pop54, $pop53 + br_if 0, $pop55 # 0: down to label2 +# BB#10: # %if.end3.i333.2 + i32.const $push553=, 0 + i32.const $push56=, 2 + i32.store bar.lastc($pop553), $pop56 + i32.load8_u $push58=, 346($9) + i32.const $push57=, 26 + i32.ne $push59=, $pop58, $pop57 + br_if 0, $pop59 # 0: down to label2 +# BB#11: # %if.end3.i347 + i32.const $push60=, 16 + i32.add $push558=, $1, $pop60 + tee_local $push557=, $8=, $pop558 + i32.store 12($9), $pop557 + i32.const $push61=, 12 + i32.add $push62=, $1, $pop61 + i32.load $0=, 0($pop62):p2align=0 + i32.const $push556=, 0 + i32.const $push63=, 4 + i32.store bar.lastn($pop556), $pop63 + i32.const $push555=, 0 + i32.const $push554=, 0 + i32.store bar.lastc($pop555), $pop554 + i32.const $push64=, 255 + i32.and $push65=, $0, $pop64 + i32.const $push66=, 32 + i32.ne $push67=, $pop65, $pop66 + br_if 0, $pop67 # 0: down to label2 +# BB#12: # %if.end3.i347.1 + i32.const $push559=, 0 + i32.const $push68=, 1 + i32.store bar.lastc($pop559), $pop68 + i32.const $push69=, 65280 + i32.and $push70=, $0, $pop69 + i32.const $push71=, 8448 + i32.ne $push72=, $pop70, $pop71 + br_if 0, $pop72 # 0: down to label2 +# BB#13: # %if.end3.i347.2 + i32.const $push560=, 0 + i32.const $push73=, 2 + i32.store bar.lastc($pop560), $pop73 + i32.const $push74=, 16711680 + i32.and $push75=, $0, $pop74 + i32.const $push76=, 2228224 + i32.ne $push77=, $pop75, $pop76 + br_if 0, $pop77 # 0: down to label2 +# BB#14: # %if.end3.i347.3 + i32.const $push561=, 0 + i32.const $push78=, 3 + i32.store bar.lastc($pop561), $pop78 + i32.const $push79=, -16777216 + i32.and $push80=, $0, $pop79 + i32.const $push81=, 587202560 + i32.ne $push82=, $pop80, $pop81 + br_if 0, $pop82 # 0: down to label2 +# BB#15: # %if.end3.i361 + i32.const $push566=, 0 + i32.const $push83=, 5 + i32.store bar.lastn($pop566), $pop83 + i32.load $push84=, 0($8):p2align=0 + i32.store 336($9), $pop84 + i32.const $push565=, 0 + i32.const $push564=, 0 + i32.store bar.lastc($pop565), $pop564 + i32.const $push85=, 24 + i32.add $push563=, $1, $pop85 + tee_local $push562=, $3=, $pop563 + i32.store 12($9), $pop562 + i32.const $push86=, 4 + i32.add $push87=, $8, $pop86 + i32.load8_u $push88=, 0($pop87) + i32.store8 340($9), $pop88 + i32.load8_u $push90=, 336($9) + i32.const $push89=, 40 + i32.ne $push91=, $pop90, $pop89 + br_if 0, $pop91 # 0: down to label2 +# BB#16: # %if.end3.i361.1 + i32.const $push567=, 0 + i32.const $push92=, 1 + i32.store bar.lastc($pop567), $pop92 + i32.load8_u $push94=, 337($9) + i32.const $push93=, 41 + i32.ne $push95=, $pop94, $pop93 + br_if 0, $pop95 # 0: down to label2 +# BB#17: # %if.end3.i361.2 + i32.const $push568=, 0 + i32.const $push96=, 2 + i32.store bar.lastc($pop568), $pop96 + i32.load8_u $push98=, 338($9) + i32.const $push97=, 42 + i32.ne $push99=, $pop98, $pop97 + br_if 0, $pop99 # 0: down to label2 +# BB#18: # %if.end3.i361.3 + i32.const $push569=, 0 + i32.const $push100=, 3 + i32.store bar.lastc($pop569), $pop100 + i32.load8_u $push102=, 339($9) + i32.const $push101=, 43 + i32.ne $push103=, $pop102, $pop101 + br_if 0, $pop103 # 0: down to label2 +# BB#19: # %if.end3.i361.4 + i32.const $push571=, 0 + i32.const $push570=, 4 + i32.store bar.lastc($pop571), $pop570 + i32.load8_u $push105=, 340($9) + i32.const $push104=, 44 + i32.ne $push106=, $pop105, $pop104 + br_if 0, $pop106 # 0: down to label2 +# BB#20: # %if.end3.i375 + i32.const $push577=, 0 + i32.const $push107=, 6 + i32.store bar.lastn($pop577), $pop107 + i32.load $push108=, 0($3):p2align=0 + i32.store 328($9), $pop108 + i32.const $push576=, 0 + i32.const $push575=, 0 + i32.store bar.lastc($pop576), $pop575 + i32.const $push109=, 32 + i32.add $push574=, $1, $pop109 + tee_local $push573=, $0=, $pop574 + i32.store 12($9), $pop573 + i32.const $push572=, 4 + i32.add $push110=, $3, $pop572 + i32.load16_u $push111=, 0($pop110):p2align=0 + i32.store16 332($9), $pop111 + i32.load8_u $push113=, 328($9) + i32.const $push112=, 48 + i32.ne $push114=, $pop113, $pop112 + br_if 0, $pop114 # 0: down to label2 +# BB#21: # %if.end3.i375.1 + i32.const $push578=, 0 + i32.const $push115=, 1 + i32.store bar.lastc($pop578), $pop115 + i32.load8_u $push117=, 329($9) + i32.const $push116=, 49 + i32.ne $push118=, $pop117, $pop116 + br_if 0, $pop118 # 0: down to label2 +# BB#22: # %if.end3.i375.2 + i32.const $push579=, 0 + i32.const $push119=, 2 + i32.store bar.lastc($pop579), $pop119 + i32.load8_u $push121=, 330($9) + i32.const $push120=, 50 + i32.ne $push122=, $pop121, $pop120 + br_if 0, $pop122 # 0: down to label2 +# BB#23: # %if.end3.i375.3 + i32.const $push580=, 0 + i32.const $push123=, 3 + i32.store bar.lastc($pop580), $pop123 + i32.load8_u $push125=, 331($9) + i32.const $push124=, 51 + i32.ne $push126=, $pop125, $pop124 + br_if 0, $pop126 # 0: down to label2 +# BB#24: # %if.end3.i375.4 + i32.const $push581=, 0 + i32.const $push127=, 4 + i32.store bar.lastc($pop581), $pop127 + i32.load8_u $push129=, 332($9) + i32.const $push128=, 52 + i32.ne $push130=, $pop129, $pop128 + br_if 0, $pop130 # 0: down to label2 +# BB#25: # %if.end3.i375.5 + i32.const $push582=, 0 + i32.const $push131=, 5 + i32.store bar.lastc($pop582), $pop131 + i32.load8_u $push133=, 333($9) + i32.const $push132=, 53 + i32.ne $push134=, $pop133, $pop132 + br_if 0, $pop134 # 0: down to label2 +# BB#26: # %if.end3.i389 + i32.const $push585=, 0 + i32.const $push135=, 7 + i32.store bar.lastn($pop585), $pop135 + i32.load $push136=, 0($0):p2align=0 + i32.store 320($9), $pop136 + i32.const $push584=, 0 + i32.const $push583=, 0 + i32.store bar.lastc($pop584), $pop583 + i32.const $push137=, 40 + i32.add $push138=, $1, $pop137 + i32.store 12($9), $pop138 + i32.const $push139=, 4 + i32.add $push140=, $0, $pop139 + i32.load16_u $push141=, 0($pop140):p2align=0 + i32.store16 324($9), $pop141 + i32.const $push142=, 6 + i32.add $push143=, $0, $pop142 + i32.load8_u $push144=, 0($pop143) + i32.store8 326($9), $pop144 + i32.load8_u $push146=, 320($9) + i32.const $push145=, 56 + i32.ne $push147=, $pop146, $pop145 + br_if 0, $pop147 # 0: down to label2 +# BB#27: # %if.end3.i389.1 + i32.const $push586=, 0 + i32.const $push148=, 1 + i32.store bar.lastc($pop586), $pop148 + i32.load8_u $push150=, 321($9) + i32.const $push149=, 57 + i32.ne $push151=, $pop150, $pop149 + br_if 0, $pop151 # 0: down to label2 +# BB#28: # %if.end3.i389.2 + i32.const $push587=, 0 + i32.const $push152=, 2 + i32.store bar.lastc($pop587), $pop152 + i32.load8_u $push154=, 322($9) + i32.const $push153=, 58 + i32.ne $push155=, $pop154, $pop153 + br_if 0, $pop155 # 0: down to label2 +# BB#29: # %if.end3.i389.3 + i32.const $push588=, 0 + i32.const $push156=, 3 + i32.store bar.lastc($pop588), $pop156 + i32.load8_u $push158=, 323($9) + i32.const $push157=, 59 + i32.ne $push159=, $pop158, $pop157 + br_if 0, $pop159 # 0: down to label2 +# BB#30: # %if.end3.i389.4 + i32.const $push589=, 0 + i32.const $push160=, 4 + i32.store bar.lastc($pop589), $pop160 + i32.load8_u $push162=, 324($9) + i32.const $push161=, 60 + i32.ne $push163=, $pop162, $pop161 + br_if 0, $pop163 # 0: down to label2 +# BB#31: # %if.end3.i389.5 + i32.const $push590=, 0 + i32.const $push164=, 5 + i32.store bar.lastc($pop590), $pop164 + i32.load8_u $push166=, 325($9) + i32.const $push165=, 61 + i32.ne $push167=, $pop166, $pop165 + br_if 0, $pop167 # 0: down to label2 +# BB#32: # %if.end3.i389.6 + i32.const $push591=, 0 + i32.const $push168=, 6 + i32.store bar.lastc($pop591), $pop168 + i32.load8_u $push170=, 326($9) + i32.const $push169=, 62 + i32.ne $push171=, $pop170, $pop169 + br_if 0, $pop171 # 0: down to label2 +# BB#33: # %if.end3.i403 + i32.const $push598=, 0 + i32.const $push172=, 8 + i32.store bar.lastn($pop598), $pop172 + i32.const $push597=, 0 + i32.const $push596=, 0 + i32.store bar.lastc($pop597), $pop596 + i32.const $push173=, 48 + i32.add $push595=, $1, $pop173 + tee_local $push594=, $0=, $pop595 + i32.store 12($9), $pop594 + i32.const $push174=, 40 + i32.add $push175=, $1, $pop174 + i64.load $push593=, 0($pop175):p2align=0 + tee_local $push592=, $2=, $pop593 + i64.const $push180=, 255 + i64.and $push181=, $pop592, $pop180 + i64.const $push182=, 64 + i64.ne $push183=, $pop181, $pop182 + br_if 0, $pop183 # 0: down to label2 +# BB#34: # %if.end3.i403.1 + i32.const $push599=, 0 + i32.const $push184=, 1 + i32.store bar.lastc($pop599), $pop184 + i32.wrap/i64 $push185=, $2 + i32.const $push186=, 16 + i32.shl $push187=, $pop185, $pop186 + i32.const $push188=, -16777216 + i32.and $push189=, $pop187, $pop188 + i32.const $push190=, 1090519040 + i32.ne $push191=, $pop189, $pop190 + br_if 0, $pop191 # 0: down to label2 +# BB#35: # %if.end3.i403.2 + i32.const $push600=, 0 + i32.const $push192=, 2 + i32.store bar.lastc($pop600), $pop192 + i64.const $push179=, 16 + i64.shr_u $push0=, $2, $pop179 + i32.wrap/i64 $push193=, $pop0 + i32.const $push194=, 24 + i32.shl $push195=, $pop193, $pop194 + i32.const $push196=, 1107296256 + i32.ne $push197=, $pop195, $pop196 + br_if 0, $pop197 # 0: down to label2 +# BB#36: # %if.end3.i403.3 + i32.const $push601=, 0 + i32.const $push198=, 3 + i32.store bar.lastc($pop601), $pop198 + i64.const $push199=, 4278190080 + i64.and $push200=, $2, $pop199 + i64.const $push201=, 1124073472 + i64.ne $push202=, $pop200, $pop201 + br_if 0, $pop202 # 0: down to label2 +# BB#37: # %if.end3.i403.4 + i32.const $push603=, 0 + i32.const $push203=, 4 + i32.store bar.lastc($pop603), $pop203 + i64.const $push178=, 32 + i64.shr_u $push1=, $2, $pop178 + i32.wrap/i64 $push204=, $pop1 + i32.const $push602=, 24 + i32.shl $push205=, $pop204, $pop602 + i32.const $push206=, 1140850688 + i32.ne $push207=, $pop205, $pop206 + br_if 0, $pop207 # 0: down to label2 +# BB#38: # %if.end3.i403.5 + i32.const $push605=, 0 + i32.const $push208=, 5 + i32.store bar.lastc($pop605), $pop208 + i64.const $push177=, 40 + i64.shr_u $push2=, $2, $pop177 + i32.wrap/i64 $push209=, $pop2 + i32.const $push604=, 24 + i32.shl $push210=, $pop209, $pop604 + i32.const $push211=, 1157627904 + i32.ne $push212=, $pop210, $pop211 + br_if 0, $pop212 # 0: down to label2 +# BB#39: # %if.end3.i403.6 + i32.const $push606=, 0 + i32.const $push213=, 6 + i32.store bar.lastc($pop606), $pop213 + i64.const $push176=, 48 + i64.shr_u $push3=, $2, $pop176 + i32.wrap/i64 $push214=, $pop3 + i32.const $push215=, 24 + i32.shl $push216=, $pop214, $pop215 + i32.const $push217=, 1174405120 + i32.ne $push218=, $pop216, $pop217 + br_if 0, $pop218 # 0: down to label2 +# BB#40: # %if.end3.i403.7 + i32.const $push607=, 0 + i32.const $push219=, 7 + i32.store bar.lastc($pop607), $pop219 + i64.const $push220=, -72057594037927936 + i64.and $push221=, $2, $pop220 + i64.const $push222=, 5116089176692883456 + i64.ne $push223=, $pop221, $pop222 + br_if 0, $pop223 # 0: down to label2 +# BB#41: # %if.end3.i417 + i32.const $push613=, 0 + i32.const $push224=, 9 + i32.store bar.lastn($pop613), $pop224 + i32.const $push475=, 304 + i32.add $push476=, $9, $pop475 + i32.const $push225=, 8 + i32.add $push228=, $pop476, $pop225 + i32.const $push612=, 8 + i32.add $push226=, $0, $pop612 + i32.load8_u $push227=, 0($pop226) + i32.store8 0($pop228), $pop227 + i64.load $push229=, 0($0):p2align=0 + i64.store 304($9), $pop229 + i32.const $push611=, 0 + i32.const $push610=, 0 + i32.store bar.lastc($pop611), $pop610 + i32.const $push230=, 60 + i32.add $push609=, $1, $pop230 + tee_local $push608=, $0=, $pop609 + i32.store 12($9), $pop608 + i32.load8_u $push232=, 304($9) + i32.const $push231=, 72 + i32.ne $push233=, $pop232, $pop231 + br_if 0, $pop233 # 0: down to label2 +# BB#42: # %if.end3.i417.1 + i32.const $push614=, 0 + i32.const $push234=, 1 + i32.store bar.lastc($pop614), $pop234 + i32.load8_u $push236=, 305($9) + i32.const $push235=, 73 + i32.ne $push237=, $pop236, $pop235 + br_if 0, $pop237 # 0: down to label2 +# BB#43: # %if.end3.i417.2 + i32.const $push615=, 0 + i32.const $push238=, 2 + i32.store bar.lastc($pop615), $pop238 + i32.load8_u $push240=, 306($9) + i32.const $push239=, 74 + i32.ne $push241=, $pop240, $pop239 + br_if 0, $pop241 # 0: down to label2 +# BB#44: # %if.end3.i417.3 + i32.const $push616=, 0 + i32.const $push242=, 3 + i32.store bar.lastc($pop616), $pop242 + i32.load8_u $push244=, 307($9) + i32.const $push243=, 75 + i32.ne $push245=, $pop244, $pop243 + br_if 0, $pop245 # 0: down to label2 +# BB#45: # %if.end3.i417.4 + i32.const $push617=, 0 + i32.const $push246=, 4 + i32.store bar.lastc($pop617), $pop246 + i32.load8_u $push248=, 308($9) + i32.const $push247=, 76 + i32.ne $push249=, $pop248, $pop247 + br_if 0, $pop249 # 0: down to label2 +# BB#46: # %if.end3.i417.5 + i32.const $push618=, 0 + i32.const $push250=, 5 + i32.store bar.lastc($pop618), $pop250 + i32.load8_u $push252=, 309($9) + i32.const $push251=, 77 + i32.ne $push253=, $pop252, $pop251 + br_if 0, $pop253 # 0: down to label2 +# BB#47: # %if.end3.i417.6 + i32.const $push619=, 0 + i32.const $push254=, 6 + i32.store bar.lastc($pop619), $pop254 + i32.load8_u $push256=, 310($9) + i32.const $push255=, 78 + i32.ne $push257=, $pop256, $pop255 + br_if 0, $pop257 # 0: down to label2 +# BB#48: # %if.end3.i417.7 + i32.const $push620=, 0 + i32.const $push258=, 7 + i32.store bar.lastc($pop620), $pop258 + i32.load8_u $push260=, 311($9) + i32.const $push259=, 79 + i32.ne $push261=, $pop260, $pop259 + br_if 0, $pop261 # 0: down to label2 +# BB#49: # %if.end3.i417.8 + i32.const $push622=, 0 + i32.const $push621=, 8 + i32.store bar.lastc($pop622), $pop621 + i32.load8_u $push263=, 312($9) + i32.const $push262=, 64 + i32.ne $push264=, $pop263, $pop262 + br_if 0, $pop264 # 0: down to label2 +# BB#50: # %bar.exit420.8 + i32.const $push629=, 0 + i32.const $push265=, 10 + i32.store bar.lastn($pop629), $pop265 + i32.const $push477=, 288 + i32.add $push478=, $9, $pop477 + i32.const $push628=, 8 + i32.add $push268=, $pop478, $pop628 + i32.const $push627=, 8 + i32.add $push266=, $0, $pop627 + i32.load16_u $push267=, 0($pop266):p2align=0 + i32.store16 0($pop268), $pop267 + i64.load $push269=, 0($0):p2align=0 + i64.store 288($9), $pop269 + i32.const $push626=, 0 + i32.const $push625=, 0 + i32.store bar.lastc($pop626), $pop625 + i32.const $push270=, 72 + i32.add $push624=, $1, $pop270 + tee_local $push623=, $8=, $pop624 + i32.store 12($9), $pop623 + i32.load8_s $push272=, 288($9) + i32.const $push271=, 80 + i32.ne $push273=, $pop272, $pop271 + br_if 0, $pop273 # 0: down to label2 +# BB#51: # %bar.exit434 + i32.const $push631=, 0 + i32.const $push630=, 1 + i32.store bar.lastc($pop631), $pop630 + i32.load8_s $push275=, 289($9) + i32.const $push274=, 81 + i32.ne $push276=, $pop275, $pop274 + br_if 0, $pop276 # 0: down to label2 +# BB#52: # %bar.exit434.1 + i32.const $push637=, 0 + i32.const $push636=, 1 + i32.const $push635=, 1 + i32.add $push634=, $pop636, $pop635 + tee_local $push633=, $0=, $pop634 + i32.store bar.lastc($pop637), $pop633 + i32.const $push632=, 80 + i32.or $push277=, $0, $pop632 + i32.load8_s $push278=, 290($9) + i32.ne $push279=, $pop277, $pop278 + br_if 0, $pop279 # 0: down to label2 +# BB#53: # %bar.exit434.2 + i32.const $push644=, 0 + i32.const $push643=, 1 + i32.add $push642=, $0, $pop643 + tee_local $push641=, $0=, $pop642 + i32.store bar.lastc($pop644), $pop641 + i32.const $push640=, 24 + i32.shl $push280=, $0, $pop640 + i32.const $push639=, 24 + i32.shr_s $push281=, $pop280, $pop639 + i32.const $push638=, 80 + i32.xor $push282=, $pop281, $pop638 + i32.load8_s $push283=, 291($9) + i32.ne $push284=, $pop282, $pop283 + br_if 0, $pop284 # 0: down to label2 +# BB#54: # %bar.exit434.3 + i32.const $push651=, 0 + i32.const $push650=, 1 + i32.add $push649=, $0, $pop650 + tee_local $push648=, $0=, $pop649 + i32.store bar.lastc($pop651), $pop648 + i32.const $push647=, 24 + i32.shl $push285=, $0, $pop647 + i32.const $push646=, 24 + i32.shr_s $push286=, $pop285, $pop646 + i32.const $push645=, 80 + i32.xor $push287=, $pop286, $pop645 + i32.load8_s $push288=, 292($9) + i32.ne $push289=, $pop287, $pop288 + br_if 0, $pop289 # 0: down to label2 +# BB#55: # %bar.exit434.4 + i32.const $push658=, 0 + i32.const $push657=, 1 + i32.add $push656=, $0, $pop657 + tee_local $push655=, $0=, $pop656 + i32.store bar.lastc($pop658), $pop655 + i32.const $push654=, 24 + i32.shl $push290=, $0, $pop654 + i32.const $push653=, 24 + i32.shr_s $push291=, $pop290, $pop653 + i32.const $push652=, 80 + i32.xor $push292=, $pop291, $pop652 + i32.load8_s $push293=, 293($9) + i32.ne $push294=, $pop292, $pop293 + br_if 0, $pop294 # 0: down to label2 +# BB#56: # %bar.exit434.5 + i32.const $push665=, 0 + i32.const $push664=, 1 + i32.add $push663=, $0, $pop664 + tee_local $push662=, $0=, $pop663 + i32.store bar.lastc($pop665), $pop662 + i32.const $push661=, 24 + i32.shl $push295=, $0, $pop661 + i32.const $push660=, 24 + i32.shr_s $push296=, $pop295, $pop660 + i32.const $push659=, 80 + i32.xor $push297=, $pop296, $pop659 + i32.load8_s $push298=, 294($9) + i32.ne $push299=, $pop297, $pop298 + br_if 0, $pop299 # 0: down to label2 +# BB#57: # %bar.exit434.6 + i32.const $push672=, 0 + i32.const $push671=, 1 + i32.add $push670=, $0, $pop671 + tee_local $push669=, $0=, $pop670 + i32.store bar.lastc($pop672), $pop669 + i32.const $push668=, 24 + i32.shl $push300=, $0, $pop668 + i32.const $push667=, 24 + i32.shr_s $push301=, $pop300, $pop667 + i32.const $push666=, 80 + i32.xor $push302=, $pop301, $pop666 + i32.load8_s $push303=, 295($9) + i32.ne $push304=, $pop302, $pop303 + br_if 0, $pop304 # 0: down to label2 +# BB#58: # %bar.exit434.7 + i32.const $push679=, 0 + i32.const $push678=, 1 + i32.add $push677=, $0, $pop678 + tee_local $push676=, $0=, $pop677 + i32.store bar.lastc($pop679), $pop676 + i32.const $push675=, 24 + i32.shl $push305=, $0, $pop675 + i32.const $push674=, 24 + i32.shr_s $push306=, $pop305, $pop674 + i32.const $push673=, 80 + i32.xor $push307=, $pop306, $pop673 + i32.load8_s $push308=, 296($9) + i32.ne $push309=, $pop307, $pop308 + br_if 0, $pop309 # 0: down to label2 +# BB#59: # %bar.exit434.8 + i32.const $push686=, 0 + i32.const $push685=, 1 + i32.add $push684=, $0, $pop685 + tee_local $push683=, $0=, $pop684 + i32.store bar.lastc($pop686), $pop683 + i32.const $push682=, 24 + i32.shl $push310=, $0, $pop682 + i32.const $push681=, 24 + i32.shr_s $push311=, $pop310, $pop681 + i32.const $push680=, 80 + i32.xor $push312=, $pop311, $pop680 + i32.load8_s $push313=, 297($9) + i32.ne $push314=, $pop312, $pop313 + br_if 0, $pop314 # 0: down to label2 +# BB#60: # %bar.exit434.9 + i32.const $push695=, 0 + i32.const $push694=, 1 + i32.add $push693=, $0, $pop694 + tee_local $push692=, $0=, $pop693 + i32.store bar.lastc($pop695), $pop692 + i32.const $push479=, 272 + i32.add $push480=, $9, $pop479 + i32.const $push315=, 8 + i32.add $push318=, $pop480, $pop315 + i32.const $push691=, 8 + i32.add $push316=, $8, $pop691 + i32.load16_u $push317=, 0($pop316):p2align=0 + i32.store16 0($pop318), $pop317 + i32.const $push481=, 272 + i32.add $push482=, $9, $pop481 + i32.const $push690=, 10 + i32.add $push321=, $pop482, $pop690 + i32.const $push689=, 10 + i32.add $push319=, $8, $pop689 + i32.load8_u $push320=, 0($pop319) + i32.store8 0($pop321), $pop320 + i32.const $push322=, 84 + i32.add $push688=, $1, $pop322 + tee_local $push687=, $6=, $pop688 + i32.store 12($9), $pop687 + i64.load $push323=, 0($8):p2align=0 + i64.store 272($9), $pop323 + i32.const $8=, 10 + i32.const $7=, 10 + i32.const $3=, 0 +.LBB1_61: # %for.body128 + # =>This Inner Loop Header: Depth=1 + loop # label4: + i32.const $push483=, 272 + i32.add $push484=, $9, $pop483 + i32.add $push325=, $pop484, $3 + i32.load8_s $4=, 0($pop325) + block + i32.const $push696=, 11 + i32.eq $push324=, $7, $pop696 + br_if 0, $pop324 # 0: down to label5 +# BB#62: # %if.then.i438 + # in Loop: Header=BB1_61 Depth=1 + i32.ne $push326=, $0, $7 + br_if 2, $pop326 # 2: down to label2 +# BB#63: # %if.end.i440 + # in Loop: Header=BB1_61 Depth=1 + i32.const $8=, 11 + i32.const $0=, 0 + i32.const $push700=, 0 + i32.const $push699=, 11 + i32.store bar.lastn($pop700), $pop699 + i32.const $push698=, 0 + i32.const $push697=, 0 + i32.store bar.lastc($pop698), $pop697 +.LBB1_64: # %if.end3.i445 + # in Loop: Header=BB1_61 Depth=1 + end_block # label5: + i32.const $push703=, 24 + i32.shl $push327=, $0, $pop703 + i32.const $push702=, 24 + i32.shr_s $push328=, $pop327, $pop702 + i32.const $push701=, 88 + i32.xor $push329=, $pop328, $pop701 + i32.ne $push330=, $pop329, $4 + br_if 1, $pop330 # 1: down to label2 +# BB#65: # %bar.exit448 + # in Loop: Header=BB1_61 Depth=1 + i32.const $push709=, 0 + i32.const $push708=, 1 + i32.add $push707=, $0, $pop708 + tee_local $push706=, $0=, $pop707 + i32.store bar.lastc($pop709), $pop706 + i32.const $push705=, 10 + i32.lt_u $4=, $3, $pop705 + i32.const $7=, 11 + i32.const $push704=, 1 + i32.add $push4=, $3, $pop704 + copy_local $3=, $pop4 + br_if 0, $4 # 0: up to label4 +# BB#66: # %for.end134 + end_loop + i32.const $push485=, 256 + i32.add $push486=, $9, $pop485 + i32.const $push331=, 8 + i32.add $push334=, $pop486, $pop331 + i32.const $push713=, 8 + i32.add $push332=, $6, $pop713 + i32.load $push333=, 0($pop332):p2align=0 + i32.store 0($pop334), $pop333 + i64.load $push335=, 0($6):p2align=0 + i64.store 256($9), $pop335 + i32.const $push712=, 96 + i32.add $push711=, $1, $pop712 + tee_local $push710=, $6=, $pop711 + i32.store 12($9), $pop710 + copy_local $7=, $8 + i32.const $3=, 0 +.LBB1_67: # %for.body140 + # =>This Inner Loop Header: Depth=1 + loop # label6: + i32.const $push487=, 256 + i32.add $push488=, $9, $pop487 + i32.add $push337=, $pop488, $3 + i32.load8_s $4=, 0($pop337) + block + i32.const $push714=, 12 + i32.eq $push336=, $7, $pop714 + br_if 0, $pop336 # 0: down to label7 +# BB#68: # %if.then.i452 + # in Loop: Header=BB1_67 Depth=1 + i32.ne $push338=, $0, $7 + br_if 2, $pop338 # 2: down to label2 +# BB#69: # %if.end.i454 + # in Loop: Header=BB1_67 Depth=1 + i32.const $8=, 12 + i32.const $0=, 0 + i32.const $push718=, 0 + i32.const $push717=, 12 + i32.store bar.lastn($pop718), $pop717 + i32.const $push716=, 0 + i32.const $push715=, 0 + i32.store bar.lastc($pop716), $pop715 +.LBB1_70: # %if.end3.i459 + # in Loop: Header=BB1_67 Depth=1 + end_block # label7: + i32.const $push721=, 24 + i32.shl $push339=, $0, $pop721 + i32.const $push720=, 24 + i32.shr_s $push340=, $pop339, $pop720 + i32.const $push719=, 96 + i32.xor $push341=, $pop340, $pop719 + i32.ne $push342=, $pop341, $4 + br_if 1, $pop342 # 1: down to label2 +# BB#71: # %bar.exit462 + # in Loop: Header=BB1_67 Depth=1 + i32.const $push727=, 0 + i32.const $push726=, 1 + i32.add $push725=, $0, $pop726 + tee_local $push724=, $0=, $pop725 + i32.store bar.lastc($pop727), $pop724 + i32.const $push723=, 11 + i32.lt_u $4=, $3, $pop723 + i32.const $7=, 12 + i32.const $push722=, 1 + i32.add $push5=, $3, $pop722 + copy_local $3=, $pop5 + br_if 0, $4 # 0: up to label6 +# BB#72: # %for.end146 + end_loop + i64.load $push343=, 0($6):p2align=0 + i64.store 240($9), $pop343 + i32.const $push344=, 112 + i32.add $push729=, $1, $pop344 + tee_local $push728=, $5=, $pop729 + i32.store 12($9), $pop728 + i32.const $push345=, 5 + i32.add $push346=, $6, $pop345 + i64.load $push347=, 0($pop346):p2align=0 + i64.store 245($9):p2align=0, $pop347 + copy_local $7=, $8 + i32.const $3=, 0 +.LBB1_73: # %for.body152 + # =>This Inner Loop Header: Depth=1 + loop # label8: + i32.const $push489=, 240 + i32.add $push490=, $9, $pop489 + i32.add $push349=, $pop490, $3 + i32.load8_s $4=, 0($pop349) + block + i32.const $push730=, 13 + i32.eq $push348=, $7, $pop730 + br_if 0, $pop348 # 0: down to label9 +# BB#74: # %if.then.i466 + # in Loop: Header=BB1_73 Depth=1 + i32.ne $push350=, $0, $7 + br_if 2, $pop350 # 2: down to label2 +# BB#75: # %if.end.i468 + # in Loop: Header=BB1_73 Depth=1 + i32.const $8=, 13 + i32.const $0=, 0 + i32.const $push734=, 0 + i32.const $push733=, 13 + i32.store bar.lastn($pop734), $pop733 + i32.const $push732=, 0 + i32.const $push731=, 0 + i32.store bar.lastc($pop732), $pop731 +.LBB1_76: # %if.end3.i473 + # in Loop: Header=BB1_73 Depth=1 + end_block # label9: + i32.const $push737=, 24 + i32.shl $push351=, $0, $pop737 + i32.const $push736=, 24 + i32.shr_s $push352=, $pop351, $pop736 + i32.const $push735=, 104 + i32.xor $push353=, $pop352, $pop735 + i32.ne $push354=, $pop353, $4 + br_if 1, $pop354 # 1: down to label2 +# BB#77: # %bar.exit476 + # in Loop: Header=BB1_73 Depth=1 + i32.const $push743=, 0 + i32.const $push742=, 1 + i32.add $push741=, $0, $pop742 + tee_local $push740=, $0=, $pop741 + i32.store bar.lastc($pop743), $pop740 + i32.const $push739=, 12 + i32.lt_u $4=, $3, $pop739 + i32.const $7=, 13 + i32.const $push738=, 1 + i32.add $push6=, $3, $pop738 + copy_local $3=, $pop6 + br_if 0, $4 # 0: up to label8 +# BB#78: # %for.end158 + end_loop + i64.load $push355=, 0($5):p2align=0 + i64.store 224($9), $pop355 + i32.const $push356=, 128 + i32.add $push745=, $1, $pop356 + tee_local $push744=, $6=, $pop745 + i32.store 12($9), $pop744 + i32.const $push357=, 6 + i32.add $push358=, $5, $pop357 + i64.load $push359=, 0($pop358):p2align=0 + i64.store 230($9):p2align=1, $pop359 + copy_local $7=, $8 + i32.const $3=, 0 +.LBB1_79: # %for.body164 + # =>This Inner Loop Header: Depth=1 + loop # label10: + i32.const $push491=, 224 + i32.add $push492=, $9, $pop491 + i32.add $push361=, $pop492, $3 + i32.load8_s $4=, 0($pop361) + block + i32.const $push746=, 14 + i32.eq $push360=, $7, $pop746 + br_if 0, $pop360 # 0: down to label11 +# BB#80: # %if.then.i480 + # in Loop: Header=BB1_79 Depth=1 + i32.ne $push362=, $0, $7 + br_if 2, $pop362 # 2: down to label2 +# BB#81: # %if.end.i482 + # in Loop: Header=BB1_79 Depth=1 + i32.const $8=, 14 + i32.const $0=, 0 + i32.const $push750=, 0 + i32.const $push749=, 14 + i32.store bar.lastn($pop750), $pop749 + i32.const $push748=, 0 + i32.const $push747=, 0 + i32.store bar.lastc($pop748), $pop747 +.LBB1_82: # %if.end3.i487 + # in Loop: Header=BB1_79 Depth=1 + end_block # label11: + i32.const $push753=, 24 + i32.shl $push363=, $0, $pop753 + i32.const $push752=, 24 + i32.shr_s $push364=, $pop363, $pop752 + i32.const $push751=, 112 + i32.xor $push365=, $pop364, $pop751 + i32.ne $push366=, $pop365, $4 + br_if 1, $pop366 # 1: down to label2 +# BB#83: # %bar.exit490 + # in Loop: Header=BB1_79 Depth=1 + i32.const $push759=, 0 + i32.const $push758=, 1 + i32.add $push757=, $0, $pop758 + tee_local $push756=, $0=, $pop757 + i32.store bar.lastc($pop759), $pop756 + i32.const $push755=, 13 + i32.lt_u $4=, $3, $pop755 + i32.const $7=, 14 + i32.const $push754=, 1 + i32.add $push7=, $3, $pop754 + copy_local $3=, $pop7 + br_if 0, $4 # 0: up to label10 +# BB#84: # %for.end170 + end_loop + i64.load $push367=, 0($6):p2align=0 + i64.store 208($9), $pop367 + i32.const $push368=, 144 + i32.add $push761=, $1, $pop368 + tee_local $push760=, $5=, $pop761 + i32.store 12($9), $pop760 + i32.const $push369=, 7 + i32.add $push370=, $6, $pop369 + i64.load $push371=, 0($pop370):p2align=0 + i64.store 215($9):p2align=0, $pop371 + copy_local $7=, $8 + i32.const $3=, 0 +.LBB1_85: # %for.body176 + # =>This Inner Loop Header: Depth=1 + loop # label12: + i32.const $push493=, 208 + i32.add $push494=, $9, $pop493 + i32.add $push373=, $pop494, $3 + i32.load8_s $4=, 0($pop373) + block + i32.const $push762=, 15 + i32.eq $push372=, $7, $pop762 + br_if 0, $pop372 # 0: down to label13 +# BB#86: # %if.then.i494 + # in Loop: Header=BB1_85 Depth=1 + i32.ne $push374=, $0, $7 + br_if 2, $pop374 # 2: down to label2 +# BB#87: # %if.end.i496 + # in Loop: Header=BB1_85 Depth=1 + i32.const $8=, 15 + i32.const $0=, 0 + i32.const $push766=, 0 + i32.const $push765=, 15 + i32.store bar.lastn($pop766), $pop765 + i32.const $push764=, 0 + i32.const $push763=, 0 + i32.store bar.lastc($pop764), $pop763 +.LBB1_88: # %if.end3.i501 + # in Loop: Header=BB1_85 Depth=1 + end_block # label13: + i32.const $push769=, 24 + i32.shl $push375=, $0, $pop769 + i32.const $push768=, 24 + i32.shr_s $push376=, $pop375, $pop768 + i32.const $push767=, 120 + i32.xor $push377=, $pop376, $pop767 + i32.ne $push378=, $pop377, $4 + br_if 1, $pop378 # 1: down to label2 +# BB#89: # %bar.exit504 + # in Loop: Header=BB1_85 Depth=1 + i32.const $push775=, 0 + i32.const $push774=, 1 + i32.add $push773=, $0, $pop774 + tee_local $push772=, $0=, $pop773 + i32.store bar.lastc($pop775), $pop772 + i32.const $push771=, 14 + i32.lt_u $4=, $3, $pop771 + i32.const $7=, 15 + i32.const $push770=, 1 + i32.add $push8=, $3, $pop770 + copy_local $3=, $pop8 + br_if 0, $4 # 0: up to label12 +# BB#90: # %for.end182 + end_loop + i32.const $push495=, 192 + i32.add $push496=, $9, $pop495 + i32.const $push379=, 8 + i32.add $push382=, $pop496, $pop379 + i32.const $push778=, 8 + i32.add $push380=, $5, $pop778 + i64.load $push381=, 0($pop380):p2align=0 + i64.store 0($pop382), $pop381 + i64.load $push383=, 0($5):p2align=0 + i64.store 192($9), $pop383 + i32.const $push384=, 160 + i32.add $push777=, $1, $pop384 + tee_local $push776=, $6=, $pop777 + i32.store 12($9), $pop776 + copy_local $7=, $8 + i32.const $3=, 0 +.LBB1_91: # %for.body188 + # =>This Inner Loop Header: Depth=1 + loop # label14: + i32.const $push497=, 192 + i32.add $push498=, $9, $pop497 + i32.add $push386=, $pop498, $3 + i32.load8_s $4=, 0($pop386) + block + i32.const $push779=, 16 + i32.eq $push385=, $7, $pop779 + br_if 0, $pop385 # 0: down to label15 +# BB#92: # %if.then.i508 + # in Loop: Header=BB1_91 Depth=1 + i32.ne $push387=, $0, $7 + br_if 2, $pop387 # 2: down to label2 +# BB#93: # %if.end.i510 + # in Loop: Header=BB1_91 Depth=1 + i32.const $8=, 16 + i32.const $0=, 0 + i32.const $push783=, 0 + i32.const $push782=, 16 + i32.store bar.lastn($pop783), $pop782 + i32.const $push781=, 0 + i32.const $push780=, 0 + i32.store bar.lastc($pop781), $pop780 +.LBB1_94: # %if.end3.i515 + # in Loop: Header=BB1_91 Depth=1 + end_block # label15: + i32.const $push786=, 24 + i32.shl $push388=, $0, $pop786 + i32.const $push785=, -2147483648 + i32.xor $push389=, $pop388, $pop785 + i32.const $push784=, 24 + i32.shr_s $push390=, $pop389, $pop784 + i32.ne $push391=, $pop390, $4 + br_if 1, $pop391 # 1: down to label2 +# BB#95: # %bar.exit518 + # in Loop: Header=BB1_91 Depth=1 + i32.const $push792=, 0 + i32.const $push791=, 1 + i32.add $push790=, $0, $pop791 + tee_local $push789=, $0=, $pop790 + i32.store bar.lastc($pop792), $pop789 + i32.const $push788=, 15 + i32.lt_u $4=, $3, $pop788 + i32.const $7=, 16 + i32.const $push787=, 1 + i32.add $push9=, $3, $pop787 + copy_local $3=, $pop9 + br_if 0, $4 # 0: up to label14 +# BB#96: # %for.end194 + end_loop + i32.const $push499=, 160 + i32.add $push500=, $9, $pop499 + i32.const $push392=, 8 + i32.add $push395=, $pop500, $pop392 + i32.const $push797=, 8 + i32.add $push393=, $6, $pop797 + i64.load $push394=, 0($pop393):p2align=0 + i64.store 0($pop395), $pop394 + i32.const $push501=, 160 + i32.add $push502=, $9, $pop501 + i32.const $push396=, 16 + i32.add $push399=, $pop502, $pop396 + i32.const $push796=, 16 + i32.add $push397=, $6, $pop796 + i64.load $push398=, 0($pop397):p2align=0 + i64.store 0($pop399), $pop398 + i32.const $push503=, 160 + i32.add $push504=, $9, $pop503 + i32.const $push400=, 23 + i32.add $push403=, $pop504, $pop400 + i32.const $push795=, 23 + i32.add $push401=, $6, $pop795 + i64.load $push402=, 0($pop401):p2align=0 + i64.store 0($pop403):p2align=0, $pop402 + i64.load $push404=, 0($6):p2align=0 + i64.store 160($9), $pop404 + i32.const $push405=, 192 + i32.add $push794=, $1, $pop405 + tee_local $push793=, $6=, $pop794 + i32.store 12($9), $pop793 + copy_local $7=, $8 + i32.const $3=, 0 +.LBB1_97: # %for.body200 + # =>This Inner Loop Header: Depth=1 + loop # label16: + i32.const $push505=, 160 + i32.add $push506=, $9, $pop505 + i32.add $push407=, $pop506, $3 + i32.load8_s $4=, 0($pop407) + block + i32.const $push798=, 31 + i32.eq $push406=, $7, $pop798 + br_if 0, $pop406 # 0: down to label17 +# BB#98: # %if.then.i522 + # in Loop: Header=BB1_97 Depth=1 + i32.ne $push408=, $0, $7 + br_if 2, $pop408 # 2: down to label2 +# BB#99: # %if.end.i524 + # in Loop: Header=BB1_97 Depth=1 + i32.const $8=, 31 + i32.const $0=, 0 + i32.const $push802=, 0 + i32.const $push801=, 31 + i32.store bar.lastn($pop802), $pop801 + i32.const $push800=, 0 + i32.const $push799=, 0 + i32.store bar.lastc($pop800), $pop799 +.LBB1_100: # %if.end3.i529 + # in Loop: Header=BB1_97 Depth=1 + end_block # label17: + i32.const $push805=, 24 + i32.shl $push409=, $0, $pop805 + i32.const $push804=, -134217728 + i32.xor $push410=, $pop409, $pop804 + i32.const $push803=, 24 + i32.shr_s $push411=, $pop410, $pop803 + i32.ne $push412=, $pop411, $4 + br_if 1, $pop412 # 1: down to label2 +# BB#101: # %bar.exit532 + # in Loop: Header=BB1_97 Depth=1 + i32.const $push811=, 0 + i32.const $push810=, 1 + i32.add $push809=, $0, $pop810 + tee_local $push808=, $0=, $pop809 + i32.store bar.lastc($pop811), $pop808 + i32.const $push807=, 30 + i32.lt_u $4=, $3, $pop807 + i32.const $7=, 31 + i32.const $push806=, 1 + i32.add $push10=, $3, $pop806 + copy_local $3=, $pop10 + br_if 0, $4 # 0: up to label16 +# BB#102: # %for.end206 + end_loop + i32.const $push507=, 128 + i32.add $push508=, $9, $pop507 + i32.const $push413=, 8 + i32.add $push416=, $pop508, $pop413 + i32.const $push817=, 8 + i32.add $push414=, $6, $pop817 + i64.load $push415=, 0($pop414):p2align=0 + i64.store 0($pop416), $pop415 + i32.const $push509=, 128 + i32.add $push510=, $9, $pop509 + i32.const $push417=, 16 + i32.add $push420=, $pop510, $pop417 + i32.const $push816=, 16 + i32.add $push418=, $6, $pop816 + i64.load $push419=, 0($pop418):p2align=0 + i64.store 0($pop420), $pop419 + i32.const $push511=, 128 + i32.add $push512=, $9, $pop511 + i32.const $push815=, 24 + i32.add $push423=, $pop512, $pop815 + i32.const $push814=, 24 + i32.add $push421=, $6, $pop814 + i64.load $push422=, 0($pop421):p2align=0 + i64.store 0($pop423), $pop422 + i64.load $push424=, 0($6):p2align=0 + i64.store 128($9), $pop424 + i32.const $push425=, 224 + i32.add $push813=, $1, $pop425 + tee_local $push812=, $6=, $pop813 + i32.store 12($9), $pop812 + copy_local $7=, $8 + i32.const $3=, 0 +.LBB1_103: # %for.body212 + # =>This Inner Loop Header: Depth=1 + loop # label18: + i32.const $push513=, 128 + i32.add $push514=, $9, $pop513 + i32.add $push427=, $pop514, $3 + i32.load8_s $4=, 0($pop427) + block + i32.const $push818=, 32 + i32.eq $push426=, $7, $pop818 + br_if 0, $pop426 # 0: down to label19 +# BB#104: # %if.then.i536 + # in Loop: Header=BB1_103 Depth=1 + i32.ne $push428=, $0, $7 + br_if 2, $pop428 # 2: down to label2 +# BB#105: # %if.end.i538 + # in Loop: Header=BB1_103 Depth=1 + i32.const $8=, 32 + i32.const $0=, 0 + i32.const $push822=, 0 + i32.const $push821=, 32 + i32.store bar.lastn($pop822), $pop821 + i32.const $push820=, 0 + i32.const $push819=, 0 + i32.store bar.lastc($pop820), $pop819 +.LBB1_106: # %if.end3.i543 + # in Loop: Header=BB1_103 Depth=1 + end_block # label19: + i32.const $push824=, 24 + i32.shl $push429=, $0, $pop824 + i32.const $push823=, 24 + i32.shr_s $push430=, $pop429, $pop823 + i32.ne $push431=, $pop430, $4 + br_if 1, $pop431 # 1: down to label2 +# BB#107: # %bar.exit546 + # in Loop: Header=BB1_103 Depth=1 + i32.const $push830=, 0 + i32.const $push829=, 1 + i32.add $push828=, $0, $pop829 + tee_local $push827=, $0=, $pop828 + i32.store bar.lastc($pop830), $pop827 + i32.const $push826=, 31 + i32.lt_u $4=, $3, $pop826 + i32.const $7=, 32 + i32.const $push825=, 1 + i32.add $push11=, $3, $pop825 + copy_local $3=, $pop11 + br_if 0, $4 # 0: up to label18 +# BB#108: # %for.end218 + end_loop + i32.const $push515=, 88 + i32.add $push516=, $9, $pop515 + i32.const $push432=, 8 + i32.add $push435=, $pop516, $pop432 + i32.const $push839=, 8 + i32.add $push433=, $6, $pop839 + i64.load $push434=, 0($pop433):p2align=0 + i64.store 0($pop435), $pop434 + i32.const $push517=, 88 + i32.add $push518=, $9, $pop517 + i32.const $push436=, 16 + i32.add $push439=, $pop518, $pop436 + i32.const $push838=, 16 + i32.add $push437=, $6, $pop838 + i64.load $push438=, 0($pop437):p2align=0 + i64.store 0($pop439), $pop438 + i32.const $push519=, 88 + i32.add $push520=, $9, $pop519 + i32.const $push837=, 24 + i32.add $push442=, $pop520, $pop837 + i32.const $push836=, 24 + i32.add $push440=, $6, $pop836 + i64.load $push441=, 0($pop440):p2align=0 + i64.store 0($pop442), $pop441 + i32.const $push521=, 88 + i32.add $push522=, $9, $pop521 + i32.const $push443=, 32 + i32.add $push446=, $pop522, $pop443 + i32.const $push835=, 32 + i32.add $push444=, $6, $pop835 + i32.load16_u $push445=, 0($pop444):p2align=0 + i32.store16 0($pop446), $pop445 + i32.const $push523=, 88 + i32.add $push524=, $9, $pop523 + i32.const $push834=, 34 + i32.add $push449=, $pop524, $pop834 + i32.const $push833=, 34 + i32.add $push447=, $6, $pop833 + i32.load8_u $push448=, 0($pop447) + i32.store8 0($pop449), $pop448 + i64.load $push450=, 0($6):p2align=0 + i64.store 88($9), $pop450 + i32.const $push451=, 260 + i32.add $push832=, $1, $pop451 + tee_local $push831=, $6=, $pop832 + i32.store 12($9), $pop831 + copy_local $7=, $8 + i32.const $3=, 0 +.LBB1_109: # %for.body224 + # =>This Inner Loop Header: Depth=1 + loop # label20: + i32.const $push525=, 88 + i32.add $push526=, $9, $pop525 + i32.add $push453=, $pop526, $3 + i32.load8_s $4=, 0($pop453) + block + i32.const $push840=, 35 + i32.eq $push452=, $7, $pop840 + br_if 0, $pop452 # 0: down to label21 +# BB#110: # %if.then.i550 + # in Loop: Header=BB1_109 Depth=1 + i32.ne $push454=, $0, $7 + br_if 2, $pop454 # 2: down to label2 +# BB#111: # %if.end.i552 + # in Loop: Header=BB1_109 Depth=1 + i32.const $8=, 35 + i32.const $0=, 0 + i32.const $push844=, 0 + i32.const $push843=, 35 + i32.store bar.lastn($pop844), $pop843 + i32.const $push842=, 0 + i32.const $push841=, 0 + i32.store bar.lastc($pop842), $pop841 +.LBB1_112: # %if.end3.i557 + # in Loop: Header=BB1_109 Depth=1 + end_block # label21: + i32.const $push847=, 24 + i32.shl $push455=, $0, $pop847 + i32.const $push846=, 24 + i32.shr_s $push456=, $pop455, $pop846 + i32.const $push845=, 24 + i32.xor $push457=, $pop456, $pop845 + i32.ne $push458=, $pop457, $4 + br_if 1, $pop458 # 1: down to label2 +# BB#113: # %bar.exit560 + # in Loop: Header=BB1_109 Depth=1 + i32.const $push853=, 0 + i32.const $push852=, 1 + i32.add $push851=, $0, $pop852 + tee_local $push850=, $0=, $pop851 + i32.store bar.lastc($pop853), $pop850 + i32.const $push849=, 34 + i32.lt_u $4=, $3, $pop849 + i32.const $7=, 35 + i32.const $push848=, 1 + i32.add $push12=, $3, $pop848 + copy_local $3=, $pop12 + br_if 0, $4 # 0: up to label20 +# BB#114: # %for.end230 + end_loop + i32.const $push459=, 332 + i32.add $push460=, $1, $pop459 + i32.store 12($9), $pop460 + i32.const $push527=, 16 + i32.add $push528=, $9, $pop527 + i32.const $push854=, 72 + i32.call $drop=, memcpy@FUNCTION, $pop528, $6, $pop854 + i32.const $3=, 0 +.LBB1_115: # %for.body236 + # =>This Inner Loop Header: Depth=1 + loop # label22: + i32.const $push529=, 16 + i32.add $push530=, $9, $pop529 + i32.add $push462=, $pop530, $3 + i32.load8_s $7=, 0($pop462) + block + i32.const $push855=, 72 + i32.eq $push461=, $8, $pop855 + br_if 0, $pop461 # 0: down to label23 +# BB#116: # %if.then.i564 + # in Loop: Header=BB1_115 Depth=1 + i32.ne $push463=, $0, $8 + br_if 2, $pop463 # 2: down to label2 +# BB#117: # %if.end.i566 + # in Loop: Header=BB1_115 Depth=1 + i32.const $0=, 0 + i32.const $push859=, 0 + i32.const $push858=, 72 + i32.store bar.lastn($pop859), $pop858 + i32.const $push857=, 0 + i32.const $push856=, 0 + i32.store bar.lastc($pop857), $pop856 +.LBB1_118: # %if.end3.i571 + # in Loop: Header=BB1_115 Depth=1 + end_block # label23: + i32.const $push862=, 24 + i32.shl $push464=, $0, $pop862 + i32.const $push861=, 24 + i32.shr_s $push465=, $pop464, $pop861 + i32.const $push860=, 64 + i32.xor $push466=, $pop465, $pop860 + i32.ne $push467=, $pop466, $7 + br_if 1, $pop467 # 1: down to label2 +# BB#119: # %bar.exit574 + # in Loop: Header=BB1_115 Depth=1 + i32.const $push868=, 0 + i32.const $push867=, 1 + i32.add $push866=, $0, $pop867 + tee_local $push865=, $0=, $pop866 + i32.store bar.lastc($pop868), $pop865 + i32.const $push864=, 71 + i32.lt_u $7=, $3, $pop864 + i32.const $8=, 72 + i32.const $push863=, 1 + i32.add $push13=, $3, $pop863 + copy_local $3=, $pop13 + br_if 0, $7 # 0: up to label22 +# BB#120: # %for.end242 + end_loop + i32.const $push474=, 0 + i32.const $push472=, 352 + i32.add $push473=, $9, $pop472 + i32.store __stack_pointer($pop474), $pop473 + return +.LBB1_121: # %if.then + end_block # label2: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size foo, .Lfunc_end1-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push218=, 0 + i32.const $push216=, 0 + i32.load $push215=, __stack_pointer($pop216) + i32.const $push217=, 800 + i32.sub $push366=, $pop215, $pop217 + tee_local $push365=, $1=, $pop366 + i32.store __stack_pointer($pop218), $pop365 + i32.const $push0=, 4368 + i32.store16 792($1), $pop0 + i32.const $push1=, 6424 + i32.store16 784($1), $pop1 + i32.const $push2=, 26 + i32.store8 786($1), $pop2 + i32.const $push3=, 589439264 + i32.store 776($1), $pop3 + i32.const $push4=, 724183336 + i32.store 768($1), $pop4 + i32.const $push5=, 44 + i32.store8 772($1), $pop5 + i32.const $push6=, 858927408 + i32.store 760($1), $pop6 + i32.const $push7=, 13620 + i32.store16 764($1), $pop7 + i32.const $push8=, 993671480 + i32.store 752($1), $pop8 + i32.const $push9=, 15676 + i32.store16 756($1), $pop9 + i32.const $push10=, 62 + i32.store8 758($1), $pop10 + i64.const $push11=, 5135868584551137600 + i64.store 744($1), $pop11 + i64.const $push12=, 5714589967255750984 + i64.store 728($1), $pop12 + i32.const $push13=, 64 + i32.store8 736($1), $pop13 + i32.const $push14=, 1397903696 + i32.store 712($1), $pop14 + i32.const $push15=, 21844 + i32.store16 716($1), $pop15 + i32.const $push16=, 86 + i32.store8 718($1), $pop16 + i32.const $push17=, 88 + i32.store8 720($1), $pop17 + i32.const $push18=, 87 + i32.store8 719($1), $pop18 + i32.const $push19=, 89 + i32.store8 721($1), $pop19 + i32.const $push364=, 88 + i32.store8 696($1), $pop364 + i32.const $push363=, 89 + i32.store8 697($1), $pop363 + i32.const $push20=, 90 + i32.store8 698($1), $pop20 + i32.const $push21=, 91 + i32.store8 699($1), $pop21 + i32.const $push22=, 92 + i32.store8 700($1), $pop22 + i32.const $push23=, 93 + i32.store8 701($1), $pop23 + i32.const $push24=, 94 + i32.store8 702($1), $pop24 + i32.const $push25=, 95 + i32.store8 703($1), $pop25 + i32.const $push26=, 80 + i32.store8 704($1), $pop26 + i32.const $push27=, 81 + i32.store8 705($1), $pop27 + i32.const $push28=, 82 + i32.store8 706($1), $pop28 + i32.const $push29=, 96 + i32.store8 680($1), $pop29 + i32.const $push30=, 97 + i32.store8 681($1), $pop30 + i32.const $push31=, 98 + i32.store8 682($1), $pop31 + i32.const $push32=, 99 + i32.store8 683($1), $pop32 + i32.const $push33=, 100 + i32.store8 684($1), $pop33 + i32.const $push34=, 102 + i32.store8 686($1), $pop34 + i32.const $push35=, 101 + i32.store8 685($1), $pop35 + i32.const $push36=, 103 + i32.store8 687($1), $pop36 + i32.const $push37=, 104 + i32.store8 688($1), $pop37 + i32.const $push38=, 105 + i32.store8 689($1), $pop38 + i32.const $push39=, 106 + i32.store8 690($1), $pop39 + i32.const $push40=, 107 + i32.store8 691($1), $pop40 + i32.const $push362=, 104 + i32.store8 664($1), $pop362 + i32.const $push361=, 105 + i32.store8 665($1), $pop361 + i32.const $push360=, 106 + i32.store8 666($1), $pop360 + i32.const $push359=, 107 + i32.store8 667($1), $pop359 + i32.const $push41=, 108 + i32.store8 668($1), $pop41 + i32.const $push42=, 109 + i32.store8 669($1), $pop42 + i32.const $push43=, 110 + i32.store8 670($1), $pop43 + i32.const $push44=, 111 + i32.store8 671($1), $pop44 + i32.const $push358=, 96 + i32.store8 672($1), $pop358 + i32.const $push357=, 97 + i32.store8 673($1), $pop357 + i32.const $push356=, 98 + i32.store8 674($1), $pop356 + i32.const $push355=, 99 + i32.store8 675($1), $pop355 + i32.const $push354=, 100 + i32.store8 676($1), $pop354 + i32.const $push45=, 112 + i32.store8 648($1), $pop45 + i32.const $push46=, 113 + i32.store8 649($1), $pop46 + i32.const $push47=, 114 + i32.store8 650($1), $pop47 + i32.const $push48=, 115 + i32.store8 651($1), $pop48 + i32.const $push49=, 116 + i32.store8 652($1), $pop49 + i32.const $push50=, 117 + i32.store8 653($1), $pop50 + i32.const $push51=, 118 + i32.store8 654($1), $pop51 + i32.const $push52=, 119 + i32.store8 655($1), $pop52 + i32.const $push53=, 120 + i32.store8 656($1), $pop53 + i32.const $push54=, 121 + i32.store8 657($1), $pop54 + i32.const $push55=, 122 + i32.store8 658($1), $pop55 + i32.const $push56=, 123 + i32.store8 659($1), $pop56 + i32.const $push57=, 124 + i32.store8 660($1), $pop57 + i32.const $push58=, 125 + i32.store8 661($1), $pop58 + i32.const $push353=, 120 + i32.store8 632($1), $pop353 + i32.const $push352=, 121 + i32.store8 633($1), $pop352 + i32.const $push351=, 122 + i32.store8 634($1), $pop351 + i32.const $push350=, 123 + i32.store8 635($1), $pop350 + i32.const $push349=, 124 + i32.store8 636($1), $pop349 + i32.const $push348=, 125 + i32.store8 637($1), $pop348 + i32.const $push59=, 126 + i32.store8 638($1), $pop59 + i32.const $push60=, 127 + i32.store8 639($1), $pop60 + i32.const $push347=, 112 + i32.store8 640($1), $pop347 + i32.const $push346=, 113 + i32.store8 641($1), $pop346 + i32.const $push345=, 114 + i32.store8 642($1), $pop345 + i32.const $push344=, 115 + i32.store8 643($1), $pop344 + i32.const $push343=, 116 + i32.store8 644($1), $pop343 + i32.const $push342=, 117 + i32.store8 645($1), $pop342 + i32.const $push341=, 118 + i32.store8 646($1), $pop341 + i32.const $push61=, 128 + i32.store8 616($1), $pop61 + i32.const $push62=, 129 + i32.store8 617($1), $pop62 + i32.const $push63=, 130 + i32.store8 618($1), $pop63 + i32.const $push64=, 131 + i32.store8 619($1), $pop64 + i32.const $push65=, 132 + i32.store8 620($1), $pop65 + i32.const $push66=, 133 + i32.store8 621($1), $pop66 + i32.const $push67=, 134 + i32.store8 622($1), $pop67 + i32.const $push68=, 135 + i32.store8 623($1), $pop68 + i32.const $push69=, 136 + i32.store8 624($1), $pop69 + i32.const $push70=, 137 + i32.store8 625($1), $pop70 + i32.const $push71=, 138 + i32.store8 626($1), $pop71 + i32.const $push72=, 139 + i32.store8 627($1), $pop72 + i32.const $push73=, 140 + i32.store8 628($1), $pop73 + i32.const $push74=, 141 + i32.store8 629($1), $pop74 + i32.const $push75=, 142 + i32.store8 630($1), $pop75 + i32.const $push76=, 143 + i32.store8 631($1), $pop76 + i32.const $0=, 0 +.LBB2_1: # %for.body180 + # =>This Inner Loop Header: Depth=1 + loop # label24: + i32.const $push219=, 584 + i32.add $push220=, $1, $pop219 + i32.add $push78=, $pop220, $0 + i32.const $push371=, 248 + i32.xor $push77=, $0, $pop371 + i32.store8 0($pop78), $pop77 + i32.const $push370=, 1 + i32.add $push369=, $0, $pop370 + tee_local $push368=, $0=, $pop369 + i32.const $push367=, 31 + i32.ne $push79=, $pop368, $pop367 + br_if 0, $pop79 # 0: up to label24 +# BB#2: # %for.end187 + end_loop + i64.const $push80=, 506097522914230528 + i64.store 552($1), $pop80 + i64.const $push81=, 1084818905618843912 + i64.store 560($1), $pop81 + i32.const $push82=, 4368 + i32.store16 568($1), $pop82 + i64.const $push83=, 1808220633999610642 + i64.store 570($1):p2align=1, $pop83 + i32.const $push84=, 488381210 + i32.store 578($1):p2align=1, $pop84 + i32.const $push85=, 7966 + i32.store16 582($1), $pop85 + i32.const $0=, 0 +.LBB2_3: # %for.body202 + # =>This Inner Loop Header: Depth=1 + loop # label25: + i32.const $push221=, 512 + i32.add $push222=, $1, $pop221 + i32.add $push87=, $pop222, $0 + i32.const $push376=, 24 + i32.xor $push86=, $0, $pop376 + i32.store8 0($pop87), $pop86 + i32.const $push375=, 1 + i32.add $push374=, $0, $pop375 + tee_local $push373=, $0=, $pop374 + i32.const $push372=, 35 + i32.ne $push88=, $pop373, $pop372 + br_if 0, $pop88 # 0: up to label25 +# BB#4: # %for.body213.preheader + end_loop + i32.const $0=, 0 +.LBB2_5: # %for.body213 + # =>This Inner Loop Header: Depth=1 + loop # label26: + i32.const $push223=, 440 + i32.add $push224=, $1, $pop223 + i32.add $push90=, $pop224, $0 + i32.const $push381=, 64 + i32.xor $push89=, $0, $pop381 + i32.store8 0($pop90), $pop89 + i32.const $push380=, 1 + i32.add $push379=, $0, $pop380 + tee_local $push378=, $0=, $pop379 + i32.const $push377=, 72 + i32.ne $push91=, $pop378, $pop377 + br_if 0, $pop91 # 0: up to label26 +# BB#6: # %for.end220 + end_loop + i32.const $push92=, 436 + i32.add $push93=, $1, $pop92 + i32.load8_u $push94=, 786($1) + i32.store8 0($pop93), $pop94 + i32.const $push225=, 420 + i32.add $push226=, $1, $pop225 + i32.const $push95=, 4 + i32.add $push96=, $pop226, $pop95 + i32.load8_u $push97=, 772($1) + i32.store8 0($pop96), $pop97 + i32.const $push227=, 412 + i32.add $push228=, $1, $pop227 + i32.const $push415=, 4 + i32.add $push98=, $pop228, $pop415 + i32.load16_u $push99=, 764($1) + i32.store16 0($pop98), $pop99 + i32.const $push100=, 410 + i32.add $push101=, $1, $pop100 + i32.load8_u $push102=, 758($1) + i32.store8 0($pop101), $pop102 + i32.const $push229=, 404 + i32.add $push230=, $1, $pop229 + i32.const $push414=, 4 + i32.add $push103=, $pop230, $pop414 + i32.load16_u $push104=, 756($1) + i32.store16 0($pop103), $pop104 + i32.load16_u $push105=, 792($1) + i32.store16 438($1), $pop105 + i32.load16_u $push106=, 784($1) + i32.store16 434($1), $pop106 + i32.load $push107=, 776($1) + i32.store 428($1), $pop107 + i32.load $push108=, 768($1) + i32.store 420($1), $pop108 + i32.load $push109=, 760($1) + i32.store 412($1), $pop109 + i32.load $push110=, 752($1) + i32.store 404($1), $pop110 + i32.const $push231=, 376 + i32.add $push232=, $1, $pop231 + i32.const $push111=, 8 + i32.add $push112=, $pop232, $pop111 + i32.const $push233=, 728 + i32.add $push234=, $1, $pop233 + i32.const $push413=, 8 + i32.add $push113=, $pop234, $pop413 + i32.load8_u $push114=, 0($pop113) + i32.store8 0($pop112), $pop114 + i32.const $push235=, 360 + i32.add $push236=, $1, $pop235 + i32.const $push412=, 8 + i32.add $push115=, $pop236, $pop412 + i32.const $push237=, 712 + i32.add $push238=, $1, $pop237 + i32.const $push411=, 8 + i32.add $push116=, $pop238, $pop411 + i32.load16_u $push117=, 0($pop116) + i32.store16 0($pop115), $pop117 + i32.const $push239=, 344 + i32.add $push240=, $1, $pop239 + i32.const $push118=, 10 + i32.add $push119=, $pop240, $pop118 + i32.const $push241=, 696 + i32.add $push242=, $1, $pop241 + i32.const $push410=, 10 + i32.add $push120=, $pop242, $pop410 + i32.load8_u $push121=, 0($pop120) + i32.store8 0($pop119), $pop121 + i32.const $push243=, 344 + i32.add $push244=, $1, $pop243 + i32.const $push409=, 8 + i32.add $push122=, $pop244, $pop409 + i32.const $push245=, 696 + i32.add $push246=, $1, $pop245 + i32.const $push408=, 8 + i32.add $push123=, $pop246, $pop408 + i32.load16_u $push124=, 0($pop123) + i32.store16 0($pop122), $pop124 + i32.const $push247=, 328 + i32.add $push248=, $1, $pop247 + i32.const $push407=, 8 + i32.add $push125=, $pop248, $pop407 + i32.const $push249=, 680 + i32.add $push250=, $1, $pop249 + i32.const $push406=, 8 + i32.add $push126=, $pop250, $pop406 + i32.load $push127=, 0($pop126) + i32.store 0($pop125), $pop127 + i64.load $push128=, 744($1) + i64.store 392($1), $pop128 + i64.load $push129=, 728($1) + i64.store 376($1), $pop129 + i64.load $push130=, 712($1) + i64.store 360($1), $pop130 + i64.load $push131=, 696($1) + i64.store 344($1), $pop131 + i64.load $push132=, 680($1) + i64.store 328($1), $pop132 + i64.load $push133=, 669($1):p2align=0 + i64.store 317($1):p2align=0, $pop133 + i64.load $push134=, 664($1) + i64.store 312($1), $pop134 + i64.load $push135=, 654($1):p2align=1 + i64.store 302($1):p2align=1, $pop135 + i64.load $push136=, 648($1) + i64.store 296($1), $pop136 + i64.load $push137=, 639($1):p2align=0 + i64.store 287($1):p2align=0, $pop137 + i64.load $push138=, 632($1) + i64.store 280($1), $pop138 + i32.const $push251=, 264 + i32.add $push252=, $1, $pop251 + i32.const $push405=, 8 + i32.add $push139=, $pop252, $pop405 + i32.const $push253=, 616 + i32.add $push254=, $1, $pop253 + i32.const $push404=, 8 + i32.add $push140=, $pop254, $pop404 + i64.load $push141=, 0($pop140) + i64.store 0($pop139), $pop141 + i64.load $push142=, 616($1) + i64.store 264($1), $pop142 + i32.const $push255=, 232 + i32.add $push256=, $1, $pop255 + i32.const $push143=, 23 + i32.add $push144=, $pop256, $pop143 + i32.const $push257=, 584 + i32.add $push258=, $1, $pop257 + i32.const $push403=, 23 + i32.add $push145=, $pop258, $pop403 + i64.load $push146=, 0($pop145):p2align=0 + i64.store 0($pop144):p2align=0, $pop146 + i32.const $push259=, 232 + i32.add $push260=, $1, $pop259 + i32.const $push147=, 16 + i32.add $push148=, $pop260, $pop147 + i32.const $push261=, 584 + i32.add $push262=, $1, $pop261 + i32.const $push402=, 16 + i32.add $push149=, $pop262, $pop402 + i64.load $push150=, 0($pop149) + i64.store 0($pop148), $pop150 + i32.const $push263=, 232 + i32.add $push264=, $1, $pop263 + i32.const $push401=, 8 + i32.add $push151=, $pop264, $pop401 + i32.const $push265=, 584 + i32.add $push266=, $1, $pop265 + i32.const $push400=, 8 + i32.add $push152=, $pop266, $pop400 + i64.load $push153=, 0($pop152) + i64.store 0($pop151), $pop153 + i64.load $push154=, 584($1) + i64.store 232($1), $pop154 + i32.const $push267=, 200 + i32.add $push268=, $1, $pop267 + i32.const $push155=, 24 + i32.add $push156=, $pop268, $pop155 + i32.const $push269=, 552 + i32.add $push270=, $1, $pop269 + i32.const $push399=, 24 + i32.add $push157=, $pop270, $pop399 + i64.load $push158=, 0($pop157) + i64.store 0($pop156), $pop158 + i32.const $push271=, 200 + i32.add $push272=, $1, $pop271 + i32.const $push398=, 16 + i32.add $push159=, $pop272, $pop398 + i32.const $push273=, 552 + i32.add $push274=, $1, $pop273 + i32.const $push397=, 16 + i32.add $push160=, $pop274, $pop397 + i64.load $push161=, 0($pop160) + i64.store 0($pop159), $pop161 + i32.const $push275=, 200 + i32.add $push276=, $1, $pop275 + i32.const $push396=, 8 + i32.add $push162=, $pop276, $pop396 + i32.const $push277=, 552 + i32.add $push278=, $1, $pop277 + i32.const $push395=, 8 + i32.add $push163=, $pop278, $pop395 + i64.load $push164=, 0($pop163) + i64.store 0($pop162), $pop164 + i64.load $push165=, 552($1) + i64.store 200($1), $pop165 + i32.const $push279=, 160 + i32.add $push280=, $1, $pop279 + i32.const $push166=, 34 + i32.add $push167=, $pop280, $pop166 + i32.const $push281=, 512 + i32.add $push282=, $1, $pop281 + i32.const $push394=, 34 + i32.add $push168=, $pop282, $pop394 + i32.load8_u $push169=, 0($pop168) + i32.store8 0($pop167), $pop169 + i32.const $push283=, 160 + i32.add $push284=, $1, $pop283 + i32.const $push170=, 32 + i32.add $push171=, $pop284, $pop170 + i32.const $push285=, 512 + i32.add $push286=, $1, $pop285 + i32.const $push393=, 32 + i32.add $push172=, $pop286, $pop393 + i32.load16_u $push173=, 0($pop172) + i32.store16 0($pop171), $pop173 + i32.const $push287=, 160 + i32.add $push288=, $1, $pop287 + i32.const $push392=, 24 + i32.add $push174=, $pop288, $pop392 + i32.const $push289=, 512 + i32.add $push290=, $1, $pop289 + i32.const $push391=, 24 + i32.add $push175=, $pop290, $pop391 + i64.load $push176=, 0($pop175) + i64.store 0($pop174), $pop176 + i32.const $push291=, 160 + i32.add $push292=, $1, $pop291 + i32.const $push390=, 16 + i32.add $push177=, $pop292, $pop390 + i32.const $push293=, 512 + i32.add $push294=, $1, $pop293 + i32.const $push389=, 16 + i32.add $push178=, $pop294, $pop389 + i64.load $push179=, 0($pop178) + i64.store 0($pop177), $pop179 + i32.const $push295=, 160 + i32.add $push296=, $1, $pop295 + i32.const $push388=, 8 + i32.add $push180=, $pop296, $pop388 + i32.const $push297=, 512 + i32.add $push298=, $1, $pop297 + i32.const $push387=, 8 + i32.add $push181=, $pop298, $pop387 + i64.load $push182=, 0($pop181) + i64.store 0($pop180), $pop182 + i64.load $push183=, 512($1) + i64.store 160($1), $pop183 + i32.const $push299=, 88 + i32.add $push300=, $1, $pop299 + i32.const $push301=, 440 + i32.add $push302=, $1, $pop301 + i32.const $push184=, 72 + i32.call $drop=, memcpy@FUNCTION, $pop300, $pop302, $pop184 + i32.const $push185=, 76 + i32.add $push186=, $1, $pop185 + i32.const $push303=, 88 + i32.add $push304=, $1, $pop303 + i32.store 0($pop186), $pop304 + i32.const $push187=, 68 + i32.add $push188=, $1, $pop187 + i32.const $push305=, 200 + i32.add $push306=, $1, $pop305 + i32.store 0($pop188), $pop306 + i32.const $push189=, 64 + i32.add $push190=, $1, $pop189 + i32.const $push307=, 232 + i32.add $push308=, $1, $pop307 + i32.store 0($pop190), $pop308 + i32.const $push191=, 60 + i32.add $push192=, $1, $pop191 + i32.const $push309=, 264 + i32.add $push310=, $1, $pop309 + i32.store 0($pop192), $pop310 + i32.const $push193=, 56 + i32.add $push194=, $1, $pop193 + i32.const $push311=, 280 + i32.add $push312=, $1, $pop311 + i32.store 0($pop194), $pop312 + i32.const $push195=, 52 + i32.add $push196=, $1, $pop195 + i32.const $push313=, 296 + i32.add $push314=, $1, $pop313 + i32.store 0($pop196), $pop314 + i32.const $push197=, 48 + i32.add $push198=, $1, $pop197 + i32.const $push315=, 312 + i32.add $push316=, $1, $pop315 + i32.store 0($pop198), $pop316 + i32.const $push199=, 44 + i32.add $push200=, $1, $pop199 + i32.const $push317=, 328 + i32.add $push318=, $1, $pop317 + i32.store 0($pop200), $pop318 + i32.const $push201=, 40 + i32.add $push202=, $1, $pop201 + i32.const $push319=, 344 + i32.add $push320=, $1, $pop319 + i32.store 0($pop202), $pop320 + i32.const $push203=, 36 + i32.add $push204=, $1, $pop203 + i32.const $push321=, 360 + i32.add $push322=, $1, $pop321 + i32.store 0($pop204), $pop322 + i32.const $push386=, 32 + i32.add $push205=, $1, $pop386 + i32.const $push323=, 376 + i32.add $push324=, $1, $pop323 + i32.store 0($pop205), $pop324 + i32.const $push206=, 28 + i32.add $push207=, $1, $pop206 + i32.const $push325=, 392 + i32.add $push326=, $1, $pop325 + i32.store 0($pop207), $pop326 + i32.const $push385=, 24 + i32.add $push208=, $1, $pop385 + i32.const $push327=, 404 + i32.add $push328=, $1, $pop327 + i32.store 0($pop208), $pop328 + i32.const $push209=, 20 + i32.add $push210=, $1, $pop209 + i32.const $push329=, 412 + i32.add $push330=, $1, $pop329 + i32.store 0($pop210), $pop330 + i32.const $push384=, 16 + i32.add $push211=, $1, $pop384 + i32.const $push331=, 420 + i32.add $push332=, $1, $pop331 + i32.store 0($pop211), $pop332 + i32.const $push383=, 8 + i32.store 0($1), $pop383 + i32.const $push382=, 72 + i32.add $push212=, $1, $pop382 + i32.const $push333=, 160 + i32.add $push334=, $1, $pop333 + i32.store 0($pop212), $pop334 + i32.const $push335=, 428 + i32.add $push336=, $1, $pop335 + i32.store 12($1), $pop336 + i32.const $push337=, 434 + i32.add $push338=, $1, $pop337 + i32.store 8($1), $pop338 + i32.const $push339=, 438 + i32.add $push340=, $1, $pop339 + i32.store 4($1), $pop340 + i32.const $push213=, 21 + call foo@FUNCTION, $pop213, $1 + i32.const $push214=, 0 + call exit@FUNCTION, $pop214 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .type bar.lastn,@object # @bar.lastn + .section .data.bar.lastn,"aw",@progbits + .p2align 2 +bar.lastn: + .int32 4294967295 # 0xffffffff + .size bar.lastn, 4 + + .type bar.lastc,@object # @bar.lastc + .section .data.bar.lastc,"aw",@progbits + .p2align 2 +bar.lastc: + .int32 4294967295 # 0xffffffff + .size bar.lastc, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-23.c.s b/src/binaryen/test/torture-s/va-arg-23.c.s new file mode 100644 index 0000000000..dbc80d47a7 --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-23.c.s @@ -0,0 +1,79 @@ + .text + .file "va-arg-23.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32, i32, i32, i32, i32, i32, i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push10=, 0 + i32.const $push8=, 0 + i32.load $push7=, __stack_pointer($pop8) + i32.const $push9=, 16 + i32.sub $push15=, $pop7, $pop9 + tee_local $push14=, $8=, $pop15 + i32.store __stack_pointer($pop10), $pop14 + i32.const $push1=, 4 + i32.add $push2=, $7, $pop1 + i32.store 12($8), $pop2 + block + i32.const $push3=, 1 + i32.ne $push4=, $6, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %entry + i32.load $push0=, 0($7) + i32.const $push5=, 2 + i32.ne $push6=, $pop0, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#2: # %if.end + i32.const $push13=, 0 + i32.const $push11=, 16 + i32.add $push12=, $8, $pop11 + i32.store __stack_pointer($pop13), $pop12 + return +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.const $push5=, 0 + i32.load $push4=, __stack_pointer($pop5) + i32.const $push6=, 32 + i32.sub $push14=, $pop4, $pop6 + tee_local $push13=, $0=, $pop14 + i32.store __stack_pointer($pop7), $pop13 + i32.const $push0=, 2 + i32.store 0($0), $pop0 + i64.load $push1=, 24($0) + i64.store 16($0), $pop1 + i32.const $push11=, 16 + i32.add $push12=, $0, $pop11 + i32.const $push2=, 1 + call foo@FUNCTION, $0, $0, $0, $0, $0, $pop12, $pop2, $0 + i32.const $push10=, 0 + i32.const $push8=, 32 + i32.add $push9=, $0, $pop8 + i32.store __stack_pointer($pop10), $pop9 + i32.const $push3=, 0 + # fallthrough-return: $pop3 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/va-arg-24.c.s b/src/binaryen/test/torture-s/va-arg-24.c.s new file mode 100644 index 0000000000..df1150405a --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-24.c.s @@ -0,0 +1,1526 @@ + .text + .file "va-arg-24.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push29=, 0 + i32.const $push27=, 0 + i32.load $push26=, __stack_pointer($pop27) + i32.const $push28=, 288 + i32.sub $push103=, $pop26, $pop28 + tee_local $push102=, $0=, $pop103 + i32.store __stack_pointer($pop29), $pop102 + i32.const $push30=, 240 + i32.add $push31=, $0, $pop30 + i32.const $push0=, 32 + i32.add $push1=, $pop31, $pop0 + i64.const $push2=, 42949672969 + i64.store 0($pop1), $pop2 + i32.const $push32=, 240 + i32.add $push33=, $0, $pop32 + i32.const $push3=, 24 + i32.add $push4=, $pop33, $pop3 + i64.const $push5=, 34359738375 + i64.store 0($pop4), $pop5 + i32.const $push34=, 240 + i32.add $push35=, $0, $pop34 + i32.const $push6=, 16 + i32.add $push7=, $pop35, $pop6 + i64.const $push8=, 25769803781 + i64.store 0($pop7), $pop8 + i64.const $push9=, 17179869187 + i64.store 248($0), $pop9 + i64.const $push10=, 8589934593 + i64.store 240($0), $pop10 + i32.const $push36=, 240 + i32.add $push37=, $0, $pop36 + call varargs0@FUNCTION, $0, $pop37 + i32.const $push38=, 192 + i32.add $push39=, $0, $pop38 + i32.const $push101=, 32 + i32.add $push11=, $pop39, $pop101 + i32.const $push12=, 10 + i32.store 0($pop11), $pop12 + i32.const $push40=, 192 + i32.add $push41=, $0, $pop40 + i32.const $push100=, 24 + i32.add $push13=, $pop41, $pop100 + i64.const $push14=, 38654705672 + i64.store 0($pop13), $pop14 + i32.const $push42=, 192 + i32.add $push43=, $0, $pop42 + i32.const $push99=, 16 + i32.add $push15=, $pop43, $pop99 + i64.const $push16=, 30064771078 + i64.store 0($pop15), $pop16 + i64.const $push17=, 21474836484 + i64.store 200($0), $pop17 + i64.const $push18=, 12884901890 + i64.store 192($0), $pop18 + i32.const $push44=, 192 + i32.add $push45=, $0, $pop44 + call varargs1@FUNCTION, $0, $0, $pop45 + i32.const $push46=, 160 + i32.add $push47=, $0, $pop46 + i32.const $push98=, 24 + i32.add $push19=, $pop47, $pop98 + i64.const $push97=, 42949672969 + i64.store 0($pop19), $pop97 + i32.const $push48=, 160 + i32.add $push49=, $0, $pop48 + i32.const $push96=, 16 + i32.add $push20=, $pop49, $pop96 + i64.const $push95=, 34359738375 + i64.store 0($pop20), $pop95 + i64.const $push94=, 25769803781 + i64.store 168($0), $pop94 + i64.const $push93=, 17179869187 + i64.store 160($0), $pop93 + i32.const $push50=, 160 + i32.add $push51=, $0, $pop50 + call varargs2@FUNCTION, $0, $0, $0, $pop51 + i32.const $push52=, 128 + i32.add $push53=, $0, $pop52 + i32.const $push92=, 24 + i32.add $push21=, $pop53, $pop92 + i32.const $push91=, 10 + i32.store 0($pop21), $pop91 + i32.const $push54=, 128 + i32.add $push55=, $0, $pop54 + i32.const $push90=, 16 + i32.add $push22=, $pop55, $pop90 + i64.const $push89=, 38654705672 + i64.store 0($pop22), $pop89 + i64.const $push88=, 30064771078 + i64.store 136($0), $pop88 + i64.const $push87=, 21474836484 + i64.store 128($0), $pop87 + i32.const $push56=, 128 + i32.add $push57=, $0, $pop56 + call varargs3@FUNCTION, $0, $0, $0, $0, $pop57 + i32.const $push58=, 96 + i32.add $push59=, $0, $pop58 + i32.const $push86=, 16 + i32.add $push23=, $pop59, $pop86 + i64.const $push85=, 42949672969 + i64.store 0($pop23), $pop85 + i64.const $push84=, 34359738375 + i64.store 104($0), $pop84 + i64.const $push83=, 25769803781 + i64.store 96($0), $pop83 + i32.const $push60=, 96 + i32.add $push61=, $0, $pop60 + call varargs4@FUNCTION, $0, $0, $0, $0, $0, $pop61 + i32.const $push62=, 64 + i32.add $push63=, $0, $pop62 + i32.const $push82=, 16 + i32.add $push24=, $pop63, $pop82 + i32.const $push81=, 10 + i32.store 0($pop24), $pop81 + i64.const $push80=, 38654705672 + i64.store 72($0), $pop80 + i64.const $push79=, 30064771078 + i64.store 64($0), $pop79 + i32.const $push64=, 64 + i32.add $push65=, $0, $pop64 + call varargs5@FUNCTION, $0, $0, $0, $0, $0, $0, $pop65 + i64.const $push78=, 42949672969 + i64.store 56($0), $pop78 + i64.const $push77=, 34359738375 + i64.store 48($0), $pop77 + i32.const $push66=, 48 + i32.add $push67=, $0, $pop66 + call varargs6@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $pop67 + i32.const $push76=, 10 + i32.store 40($0), $pop76 + i64.const $push75=, 38654705672 + i64.store 32($0), $pop75 + i32.const $push68=, 32 + i32.add $push69=, $0, $pop68 + call varargs7@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $pop69 + i64.const $push74=, 42949672969 + i64.store 16($0), $pop74 + i32.const $push70=, 16 + i32.add $push71=, $0, $pop70 + call varargs8@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop71 + i32.const $push73=, 10 + i32.store 0($0), $pop73 + call varargs9@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0 + block + i32.const $push72=, 0 + i32.load $push25=, errors($pop72) + br_if 0, $pop25 # 0: down to label0 +# BB#1: # %if.end + i32.const $push104=, 0 + call exit@FUNCTION, $pop104 + unreachable +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.varargs0,"ax",@progbits + .type varargs0,@function # -- Begin function varargs0 +varargs0: # @varargs0 + .param i32, i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push18=, 0 + i32.const $push16=, 0 + i32.load $push15=, __stack_pointer($pop16) + i32.const $push17=, 64 + i32.sub $push30=, $pop15, $pop17 + tee_local $push29=, $4=, $pop30 + i32.store __stack_pointer($pop18), $pop29 + i32.store 60($4), $1 + i32.const $push28=, 4 + i32.add $push1=, $1, $pop28 + i32.store 60($4), $pop1 + i32.const $push27=, 0 + i32.store 16($4), $pop27 + i64.load $push2=, 4($1):p2align=2 + i64.store 24($4), $pop2 + i64.load $push3=, 12($1):p2align=2 + i64.store 32($4), $pop3 + i64.load $push4=, 20($1):p2align=2 + i64.store 40($4), $pop4 + i64.load $push5=, 28($1):p2align=2 + i64.store 48($4), $pop5 + i32.load $push6=, 36($1) + i32.store 56($4), $pop6 + i32.load $push7=, 0($1) + i32.store 20($4), $pop7 + i32.const $push8=, 40 + i32.add $push9=, $1, $pop8 + i32.store 60($4), $pop9 + i32.const $push22=, 16 + i32.add $push23=, $4, $pop22 + i32.const $push26=, 4 + i32.or $2=, $pop23, $pop26 + i32.const $3=, 0 + i32.const $1=, 0 + block + block + i32.const $push25=, 0 + i32.const $push24=, 0 + i32.ne $push10=, $pop25, $pop24 + br_if 0, $pop10 # 0: down to label2 +# BB#1: + i32.const $5=, 1 + br 1 # 1: down to label1 +.LBB1_2: + end_block # label2: + i32.const $5=, 0 +.LBB1_3: # =>This Inner Loop Header: Depth=1 + end_block # label1: + loop # label3: + block + block + block + block + block + block + br_table $5, 1, 2, 0, 3, 3 # 1: down to label8 + # 2: down to label7 + # 0: down to label9 + # 3: down to label6 +.LBB1_4: # %for.inc.i.for.body.i_crit_edge + # in Loop: Header=BB1_3 Depth=1 + end_block # label9: + i32.load $3=, 0($2) + i32.const $push34=, 4 + i32.add $push0=, $2, $pop34 + copy_local $2=, $pop0 + i32.const $push33=, 1 + i32.add $push32=, $1, $pop33 + tee_local $push31=, $1=, $pop32 + i32.eq $push11=, $3, $pop31 + br_if 3, $pop11 # 3: down to label5 +# BB#5: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 0 + br 5 # 5: up to label3 +.LBB1_6: # %if.then.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label8: + i32.store 12($4), $1 + i32.store 8($4), $3 + i32.store 4($4), $1 + i32.const $push39=, .L.str + i32.store 0($4), $pop39 + i32.const $push38=, .L.str.1 + i32.call $drop=, printf@FUNCTION, $pop38, $4 + i32.const $push37=, 0 + i32.const $push36=, 0 + i32.load $push12=, errors($pop36) + i32.const $push35=, 1 + i32.add $push13=, $pop12, $pop35 + i32.store errors($pop37), $pop13 +# BB#7: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 1 + br 4 # 4: up to label3 +.LBB1_8: # %for.inc.i + # in Loop: Header=BB1_3 Depth=1 + end_block # label7: + i32.const $push40=, 10 + i32.ne $push14=, $1, $pop40 + br_if 2, $pop14 # 2: down to label4 +# BB#9: # in Loop: Header=BB1_3 Depth=1 + i32.const $5=, 3 + br 3 # 3: up to label3 +.LBB1_10: # %verify.exit + end_block # label6: + i32.const $push21=, 0 + i32.const $push19=, 64 + i32.add $push20=, $4, $pop19 + i32.store __stack_pointer($pop21), $pop20 + return +.LBB1_11: # in Loop: Header=BB1_3 Depth=1 + end_block # label5: + i32.const $5=, 1 + br 1 # 1: up to label3 +.LBB1_12: # in Loop: Header=BB1_3 Depth=1 + end_block # label4: + i32.const $5=, 2 + br 0 # 0: up to label3 +.LBB1_13: + end_loop + .endfunc +.Lfunc_end1: + .size varargs0, .Lfunc_end1-varargs0 + # -- End function + .section .text.varargs1,"ax",@progbits + .type varargs1,@function # -- Begin function varargs1 +varargs1: # @varargs1 + .param i32, i32, i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push19=, 0 + i32.const $push17=, 0 + i32.load $push16=, __stack_pointer($pop17) + i32.const $push18=, 64 + i32.sub $push30=, $pop16, $pop18 + tee_local $push29=, $5=, $pop30 + i32.store __stack_pointer($pop19), $pop29 + i32.store 60($5), $2 + i32.const $push28=, 4 + i32.add $push1=, $2, $pop28 + i32.store 60($5), $pop1 + i64.const $push2=, 4294967296 + i64.store 16($5), $pop2 + i32.load $push3=, 4($2) + i32.store 28($5), $pop3 + i64.load $push4=, 8($2):p2align=2 + i64.store 32($5), $pop4 + i64.load $push5=, 16($2):p2align=2 + i64.store 40($5), $pop5 + i64.load $push6=, 24($2):p2align=2 + i64.store 48($5), $pop6 + i32.load $push7=, 32($2) + i32.store 56($5), $pop7 + i32.load $push8=, 0($2) + i32.store 24($5), $pop8 + i32.const $push9=, 36 + i32.add $push10=, $2, $pop9 + i32.store 60($5), $pop10 + i32.const $push23=, 16 + i32.add $push24=, $5, $pop23 + i32.const $push27=, 4 + i32.or $3=, $pop24, $pop27 + i32.const $4=, 0 + i32.const $2=, 0 + block + block + i32.const $push26=, 0 + i32.const $push25=, 0 + i32.ne $push11=, $pop26, $pop25 + br_if 0, $pop11 # 0: down to label11 +# BB#1: + i32.const $6=, 1 + br 1 # 1: down to label10 +.LBB2_2: + end_block # label11: + i32.const $6=, 0 +.LBB2_3: # =>This Inner Loop Header: Depth=1 + end_block # label10: + loop # label12: + block + block + block + block + block + block + br_table $6, 1, 2, 0, 3, 3 # 1: down to label17 + # 2: down to label16 + # 0: down to label18 + # 3: down to label15 +.LBB2_4: # %for.inc.i.for.body.i_crit_edge + # in Loop: Header=BB2_3 Depth=1 + end_block # label18: + i32.load $4=, 0($3) + i32.const $push34=, 4 + i32.add $push0=, $3, $pop34 + copy_local $3=, $pop0 + i32.const $push33=, 1 + i32.add $push32=, $2, $pop33 + tee_local $push31=, $2=, $pop32 + i32.eq $push12=, $4, $pop31 + br_if 3, $pop12 # 3: down to label14 +# BB#5: # in Loop: Header=BB2_3 Depth=1 + i32.const $6=, 0 + br 5 # 5: up to label12 +.LBB2_6: # %if.then.i + # in Loop: Header=BB2_3 Depth=1 + end_block # label17: + i32.store 12($5), $2 + i32.store 8($5), $4 + i32.store 4($5), $2 + i32.const $push39=, .L.str.2 + i32.store 0($5), $pop39 + i32.const $push38=, .L.str.1 + i32.call $drop=, printf@FUNCTION, $pop38, $5 + i32.const $push37=, 0 + i32.const $push36=, 0 + i32.load $push13=, errors($pop36) + i32.const $push35=, 1 + i32.add $push14=, $pop13, $pop35 + i32.store errors($pop37), $pop14 +# BB#7: # in Loop: Header=BB2_3 Depth=1 + i32.const $6=, 1 + br 4 # 4: up to label12 +.LBB2_8: # %for.inc.i + # in Loop: Header=BB2_3 Depth=1 + end_block # label16: + i32.const $push40=, 10 + i32.ne $push15=, $2, $pop40 + br_if 2, $pop15 # 2: down to label13 +# BB#9: # in Loop: Header=BB2_3 Depth=1 + i32.const $6=, 3 + br 3 # 3: up to label12 +.LBB2_10: # %verify.exit + end_block # label15: + i32.const $push22=, 0 + i32.const $push20=, 64 + i32.add $push21=, $5, $pop20 + i32.store __stack_pointer($pop22), $pop21 + return +.LBB2_11: # in Loop: Header=BB2_3 Depth=1 + end_block # label14: + i32.const $6=, 1 + br 1 # 1: up to label12 +.LBB2_12: # in Loop: Header=BB2_3 Depth=1 + end_block # label13: + i32.const $6=, 2 + br 0 # 0: up to label12 +.LBB2_13: + end_loop + .endfunc +.Lfunc_end2: + .size varargs1, .Lfunc_end2-varargs1 + # -- End function + .section .text.varargs2,"ax",@progbits + .type varargs2,@function # -- Begin function varargs2 +varargs2: # @varargs2 + .param i32, i32, i32, i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push19=, 0 + i32.const $push17=, 0 + i32.load $push16=, __stack_pointer($pop17) + i32.const $push18=, 64 + i32.sub $push30=, $pop16, $pop18 + tee_local $push29=, $6=, $pop30 + i32.store __stack_pointer($pop19), $pop29 + i32.store 60($6), $3 + i32.const $push28=, 4 + i32.add $push1=, $3, $pop28 + i32.store 60($6), $pop1 + i32.const $push2=, 2 + i32.store 24($6), $pop2 + i64.const $push3=, 4294967296 + i64.store 16($6), $pop3 + i64.load $push4=, 4($3):p2align=2 + i64.store 32($6), $pop4 + i64.load $push5=, 12($3):p2align=2 + i64.store 40($6), $pop5 + i64.load $push6=, 20($3):p2align=2 + i64.store 48($6), $pop6 + i32.load $push7=, 28($3) + i32.store 56($6), $pop7 + i32.load $push8=, 0($3) + i32.store 28($6), $pop8 + i32.const $push9=, 32 + i32.add $push10=, $3, $pop9 + i32.store 60($6), $pop10 + i32.const $push23=, 16 + i32.add $push24=, $6, $pop23 + i32.const $push27=, 4 + i32.or $4=, $pop24, $pop27 + i32.const $5=, 0 + i32.const $3=, 0 + block + block + i32.const $push26=, 0 + i32.const $push25=, 0 + i32.ne $push11=, $pop26, $pop25 + br_if 0, $pop11 # 0: down to label20 +# BB#1: + i32.const $7=, 1 + br 1 # 1: down to label19 +.LBB3_2: + end_block # label20: + i32.const $7=, 0 +.LBB3_3: # =>This Inner Loop Header: Depth=1 + end_block # label19: + loop # label21: + block + block + block + block + block + block + br_table $7, 1, 2, 0, 3, 3 # 1: down to label26 + # 2: down to label25 + # 0: down to label27 + # 3: down to label24 +.LBB3_4: # %for.inc.i.for.body.i_crit_edge + # in Loop: Header=BB3_3 Depth=1 + end_block # label27: + i32.load $5=, 0($4) + i32.const $push34=, 4 + i32.add $push0=, $4, $pop34 + copy_local $4=, $pop0 + i32.const $push33=, 1 + i32.add $push32=, $3, $pop33 + tee_local $push31=, $3=, $pop32 + i32.eq $push12=, $5, $pop31 + br_if 3, $pop12 # 3: down to label23 +# BB#5: # in Loop: Header=BB3_3 Depth=1 + i32.const $7=, 0 + br 5 # 5: up to label21 +.LBB3_6: # %if.then.i + # in Loop: Header=BB3_3 Depth=1 + end_block # label26: + i32.store 12($6), $3 + i32.store 8($6), $5 + i32.store 4($6), $3 + i32.const $push39=, .L.str.3 + i32.store 0($6), $pop39 + i32.const $push38=, .L.str.1 + i32.call $drop=, printf@FUNCTION, $pop38, $6 + i32.const $push37=, 0 + i32.const $push36=, 0 + i32.load $push13=, errors($pop36) + i32.const $push35=, 1 + i32.add $push14=, $pop13, $pop35 + i32.store errors($pop37), $pop14 +# BB#7: # in Loop: Header=BB3_3 Depth=1 + i32.const $7=, 1 + br 4 # 4: up to label21 +.LBB3_8: # %for.inc.i + # in Loop: Header=BB3_3 Depth=1 + end_block # label25: + i32.const $push40=, 10 + i32.ne $push15=, $3, $pop40 + br_if 2, $pop15 # 2: down to label22 +# BB#9: # in Loop: Header=BB3_3 Depth=1 + i32.const $7=, 3 + br 3 # 3: up to label21 +.LBB3_10: # %verify.exit + end_block # label24: + i32.const $push22=, 0 + i32.const $push20=, 64 + i32.add $push21=, $6, $pop20 + i32.store __stack_pointer($pop22), $pop21 + return +.LBB3_11: # in Loop: Header=BB3_3 Depth=1 + end_block # label23: + i32.const $7=, 1 + br 1 # 1: up to label21 +.LBB3_12: # in Loop: Header=BB3_3 Depth=1 + end_block # label22: + i32.const $7=, 2 + br 0 # 0: up to label21 +.LBB3_13: + end_loop + .endfunc +.Lfunc_end3: + .size varargs2, .Lfunc_end3-varargs2 + # -- End function + .section .text.varargs3,"ax",@progbits + .type varargs3,@function # -- Begin function varargs3 +varargs3: # @varargs3 + .param i32, i32, i32, i32, i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push21=, 0 + i32.const $push19=, 0 + i32.load $push18=, __stack_pointer($pop19) + i32.const $push20=, 64 + i32.sub $push32=, $pop18, $pop20 + tee_local $push31=, $7=, $pop32 + i32.store __stack_pointer($pop21), $pop31 + i32.store 60($7), $4 + i32.const $push30=, 4 + i32.add $push1=, $4, $pop30 + i32.store 60($7), $pop1 + i64.const $push2=, 4294967296 + i64.store 16($7), $pop2 + i64.const $push3=, 12884901890 + i64.store 24($7), $pop3 + i32.load $push4=, 4($4) + i32.store 36($7), $pop4 + i32.load $push5=, 8($4) + i32.store 40($7), $pop5 + i32.load $push6=, 12($4) + i32.store 44($7), $pop6 + i32.load $push7=, 16($4) + i32.store 48($7), $pop7 + i32.load $push8=, 20($4) + i32.store 52($7), $pop8 + i32.load $push9=, 0($4) + i32.store 32($7), $pop9 + i32.const $push10=, 28 + i32.add $push11=, $4, $pop10 + i32.store 60($7), $pop11 + i32.load $push12=, 24($4) + i32.store 56($7), $pop12 + i32.const $push25=, 16 + i32.add $push26=, $7, $pop25 + i32.const $push29=, 4 + i32.or $5=, $pop26, $pop29 + i32.const $6=, 0 + i32.const $4=, 0 + block + block + i32.const $push28=, 0 + i32.const $push27=, 0 + i32.ne $push13=, $pop28, $pop27 + br_if 0, $pop13 # 0: down to label29 +# BB#1: + i32.const $8=, 1 + br 1 # 1: down to label28 +.LBB4_2: + end_block # label29: + i32.const $8=, 0 +.LBB4_3: # =>This Inner Loop Header: Depth=1 + end_block # label28: + loop # label30: + block + block + block + block + block + block + br_table $8, 1, 2, 0, 3, 3 # 1: down to label35 + # 2: down to label34 + # 0: down to label36 + # 3: down to label33 +.LBB4_4: # %for.inc.i.for.body.i_crit_edge + # in Loop: Header=BB4_3 Depth=1 + end_block # label36: + i32.load $6=, 0($5) + i32.const $push36=, 4 + i32.add $push0=, $5, $pop36 + copy_local $5=, $pop0 + i32.const $push35=, 1 + i32.add $push34=, $4, $pop35 + tee_local $push33=, $4=, $pop34 + i32.eq $push14=, $6, $pop33 + br_if 3, $pop14 # 3: down to label32 +# BB#5: # in Loop: Header=BB4_3 Depth=1 + i32.const $8=, 0 + br 5 # 5: up to label30 +.LBB4_6: # %if.then.i + # in Loop: Header=BB4_3 Depth=1 + end_block # label35: + i32.store 12($7), $4 + i32.store 8($7), $6 + i32.store 4($7), $4 + i32.const $push41=, .L.str.4 + i32.store 0($7), $pop41 + i32.const $push40=, .L.str.1 + i32.call $drop=, printf@FUNCTION, $pop40, $7 + i32.const $push39=, 0 + i32.const $push38=, 0 + i32.load $push15=, errors($pop38) + i32.const $push37=, 1 + i32.add $push16=, $pop15, $pop37 + i32.store errors($pop39), $pop16 +# BB#7: # in Loop: Header=BB4_3 Depth=1 + i32.const $8=, 1 + br 4 # 4: up to label30 +.LBB4_8: # %for.inc.i + # in Loop: Header=BB4_3 Depth=1 + end_block # label34: + i32.const $push42=, 10 + i32.ne $push17=, $4, $pop42 + br_if 2, $pop17 # 2: down to label31 +# BB#9: # in Loop: Header=BB4_3 Depth=1 + i32.const $8=, 3 + br 3 # 3: up to label30 +.LBB4_10: # %verify.exit + end_block # label33: + i32.const $push24=, 0 + i32.const $push22=, 64 + i32.add $push23=, $7, $pop22 + i32.store __stack_pointer($pop24), $pop23 + return +.LBB4_11: # in Loop: Header=BB4_3 Depth=1 + end_block # label32: + i32.const $8=, 1 + br 1 # 1: up to label30 +.LBB4_12: # in Loop: Header=BB4_3 Depth=1 + end_block # label31: + i32.const $8=, 2 + br 0 # 0: up to label30 +.LBB4_13: + end_loop + .endfunc +.Lfunc_end4: + .size varargs3, .Lfunc_end4-varargs3 + # -- End function + .section .text.varargs4,"ax",@progbits + .type varargs4,@function # -- Begin function varargs4 +varargs4: # @varargs4 + .param i32, i32, i32, i32, i32, i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push18=, 0 + i32.const $push16=, 0 + i32.load $push15=, __stack_pointer($pop16) + i32.const $push17=, 64 + i32.sub $push30=, $pop15, $pop17 + tee_local $push29=, $8=, $pop30 + i32.store __stack_pointer($pop18), $pop29 + i32.const $push28=, 4 + i32.store 32($8), $pop28 + i32.store 60($8), $5 + i32.const $push27=, 4 + i32.add $push1=, $5, $pop27 + i32.store 60($8), $pop1 + i64.const $push2=, 4294967296 + i64.store 16($8), $pop2 + i64.const $push3=, 12884901890 + i64.store 24($8), $pop3 + i64.load $push4=, 4($5):p2align=2 + i64.store 40($8), $pop4 + i64.load $push5=, 12($5):p2align=2 + i64.store 48($8), $pop5 + i32.load $push6=, 20($5) + i32.store 56($8), $pop6 + i32.load $push7=, 0($5) + i32.store 36($8), $pop7 + i32.const $push8=, 24 + i32.add $push9=, $5, $pop8 + i32.store 60($8), $pop9 + i32.const $push22=, 16 + i32.add $push23=, $8, $pop22 + i32.const $push26=, 4 + i32.or $6=, $pop23, $pop26 + i32.const $7=, 0 + i32.const $5=, 0 + block + block + i32.const $push25=, 0 + i32.const $push24=, 0 + i32.ne $push10=, $pop25, $pop24 + br_if 0, $pop10 # 0: down to label38 +# BB#1: + i32.const $9=, 1 + br 1 # 1: down to label37 +.LBB5_2: + end_block # label38: + i32.const $9=, 0 +.LBB5_3: # =>This Inner Loop Header: Depth=1 + end_block # label37: + loop # label39: + block + block + block + block + block + block + br_table $9, 1, 2, 0, 3, 3 # 1: down to label44 + # 2: down to label43 + # 0: down to label45 + # 3: down to label42 +.LBB5_4: # %for.inc.i.for.body.i_crit_edge + # in Loop: Header=BB5_3 Depth=1 + end_block # label45: + i32.load $7=, 0($6) + i32.const $push34=, 4 + i32.add $push0=, $6, $pop34 + copy_local $6=, $pop0 + i32.const $push33=, 1 + i32.add $push32=, $5, $pop33 + tee_local $push31=, $5=, $pop32 + i32.eq $push11=, $7, $pop31 + br_if 3, $pop11 # 3: down to label41 +# BB#5: # in Loop: Header=BB5_3 Depth=1 + i32.const $9=, 0 + br 5 # 5: up to label39 +.LBB5_6: # %if.then.i + # in Loop: Header=BB5_3 Depth=1 + end_block # label44: + i32.store 12($8), $5 + i32.store 8($8), $7 + i32.store 4($8), $5 + i32.const $push39=, .L.str.5 + i32.store 0($8), $pop39 + i32.const $push38=, .L.str.1 + i32.call $drop=, printf@FUNCTION, $pop38, $8 + i32.const $push37=, 0 + i32.const $push36=, 0 + i32.load $push12=, errors($pop36) + i32.const $push35=, 1 + i32.add $push13=, $pop12, $pop35 + i32.store errors($pop37), $pop13 +# BB#7: # in Loop: Header=BB5_3 Depth=1 + i32.const $9=, 1 + br 4 # 4: up to label39 +.LBB5_8: # %for.inc.i + # in Loop: Header=BB5_3 Depth=1 + end_block # label43: + i32.const $push40=, 10 + i32.ne $push14=, $5, $pop40 + br_if 2, $pop14 # 2: down to label40 +# BB#9: # in Loop: Header=BB5_3 Depth=1 + i32.const $9=, 3 + br 3 # 3: up to label39 +.LBB5_10: # %verify.exit + end_block # label42: + i32.const $push21=, 0 + i32.const $push19=, 64 + i32.add $push20=, $8, $pop19 + i32.store __stack_pointer($pop21), $pop20 + return +.LBB5_11: # in Loop: Header=BB5_3 Depth=1 + end_block # label41: + i32.const $9=, 1 + br 1 # 1: up to label39 +.LBB5_12: # in Loop: Header=BB5_3 Depth=1 + end_block # label40: + i32.const $9=, 2 + br 0 # 0: up to label39 +.LBB5_13: + end_loop + .endfunc +.Lfunc_end5: + .size varargs4, .Lfunc_end5-varargs4 + # -- End function + .section .text.varargs5,"ax",@progbits + .type varargs5,@function # -- Begin function varargs5 +varargs5: # @varargs5 + .param i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push19=, 0 + i32.const $push17=, 0 + i32.load $push16=, __stack_pointer($pop17) + i32.const $push18=, 64 + i32.sub $push30=, $pop16, $pop18 + tee_local $push29=, $9=, $pop30 + i32.store __stack_pointer($pop19), $pop29 + i32.store 60($9), $6 + i32.const $push28=, 4 + i32.add $push1=, $6, $pop28 + i32.store 60($9), $pop1 + i64.const $push2=, 4294967296 + i64.store 16($9), $pop2 + i64.const $push3=, 12884901890 + i64.store 24($9), $pop3 + i64.const $push4=, 21474836484 + i64.store 32($9), $pop4 + i32.load $push5=, 4($6) + i32.store 44($9), $pop5 + i64.load $push6=, 8($6):p2align=2 + i64.store 48($9), $pop6 + i32.load $push7=, 16($6) + i32.store 56($9), $pop7 + i32.load $push8=, 0($6) + i32.store 40($9), $pop8 + i32.const $push9=, 20 + i32.add $push10=, $6, $pop9 + i32.store 60($9), $pop10 + i32.const $push23=, 16 + i32.add $push24=, $9, $pop23 + i32.const $push27=, 4 + i32.or $7=, $pop24, $pop27 + i32.const $8=, 0 + i32.const $6=, 0 + block + block + i32.const $push26=, 0 + i32.const $push25=, 0 + i32.ne $push11=, $pop26, $pop25 + br_if 0, $pop11 # 0: down to label47 +# BB#1: + i32.const $10=, 1 + br 1 # 1: down to label46 +.LBB6_2: + end_block # label47: + i32.const $10=, 0 +.LBB6_3: # =>This Inner Loop Header: Depth=1 + end_block # label46: + loop # label48: + block + block + block + block + block + block + br_table $10, 1, 2, 0, 3, 3 # 1: down to label53 + # 2: down to label52 + # 0: down to label54 + # 3: down to label51 +.LBB6_4: # %for.inc.i.for.body.i_crit_edge + # in Loop: Header=BB6_3 Depth=1 + end_block # label54: + i32.load $8=, 0($7) + i32.const $push34=, 4 + i32.add $push0=, $7, $pop34 + copy_local $7=, $pop0 + i32.const $push33=, 1 + i32.add $push32=, $6, $pop33 + tee_local $push31=, $6=, $pop32 + i32.eq $push12=, $8, $pop31 + br_if 3, $pop12 # 3: down to label50 +# BB#5: # in Loop: Header=BB6_3 Depth=1 + i32.const $10=, 0 + br 5 # 5: up to label48 +.LBB6_6: # %if.then.i + # in Loop: Header=BB6_3 Depth=1 + end_block # label53: + i32.store 12($9), $6 + i32.store 8($9), $8 + i32.store 4($9), $6 + i32.const $push39=, .L.str.6 + i32.store 0($9), $pop39 + i32.const $push38=, .L.str.1 + i32.call $drop=, printf@FUNCTION, $pop38, $9 + i32.const $push37=, 0 + i32.const $push36=, 0 + i32.load $push13=, errors($pop36) + i32.const $push35=, 1 + i32.add $push14=, $pop13, $pop35 + i32.store errors($pop37), $pop14 +# BB#7: # in Loop: Header=BB6_3 Depth=1 + i32.const $10=, 1 + br 4 # 4: up to label48 +.LBB6_8: # %for.inc.i + # in Loop: Header=BB6_3 Depth=1 + end_block # label52: + i32.const $push40=, 10 + i32.ne $push15=, $6, $pop40 + br_if 2, $pop15 # 2: down to label49 +# BB#9: # in Loop: Header=BB6_3 Depth=1 + i32.const $10=, 3 + br 3 # 3: up to label48 +.LBB6_10: # %verify.exit + end_block # label51: + i32.const $push22=, 0 + i32.const $push20=, 64 + i32.add $push21=, $9, $pop20 + i32.store __stack_pointer($pop22), $pop21 + return +.LBB6_11: # in Loop: Header=BB6_3 Depth=1 + end_block # label50: + i32.const $10=, 1 + br 1 # 1: up to label48 +.LBB6_12: # in Loop: Header=BB6_3 Depth=1 + end_block # label49: + i32.const $10=, 2 + br 0 # 0: up to label48 +.LBB6_13: + end_loop + .endfunc +.Lfunc_end6: + .size varargs5, .Lfunc_end6-varargs5 + # -- End function + .section .text.varargs6,"ax",@progbits + .type varargs6,@function # -- Begin function varargs6 +varargs6: # @varargs6 + .param i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push19=, 0 + i32.const $push17=, 0 + i32.load $push16=, __stack_pointer($pop17) + i32.const $push18=, 64 + i32.sub $push30=, $pop16, $pop18 + tee_local $push29=, $10=, $pop30 + i32.store __stack_pointer($pop19), $pop29 + i32.store 60($10), $7 + i32.const $push28=, 4 + i32.add $push1=, $7, $pop28 + i32.store 60($10), $pop1 + i64.const $push2=, 4294967296 + i64.store 16($10), $pop2 + i64.const $push3=, 12884901890 + i64.store 24($10), $pop3 + i64.const $push4=, 21474836484 + i64.store 32($10), $pop4 + i32.const $push5=, 6 + i32.store 40($10), $pop5 + i64.load $push6=, 4($7):p2align=2 + i64.store 48($10), $pop6 + i32.load $push7=, 12($7) + i32.store 56($10), $pop7 + i32.load $push8=, 0($7) + i32.store 44($10), $pop8 + i32.const $push9=, 16 + i32.add $push10=, $7, $pop9 + i32.store 60($10), $pop10 + i32.const $push23=, 16 + i32.add $push24=, $10, $pop23 + i32.const $push27=, 4 + i32.or $8=, $pop24, $pop27 + i32.const $9=, 0 + i32.const $7=, 0 + block + block + i32.const $push26=, 0 + i32.const $push25=, 0 + i32.ne $push11=, $pop26, $pop25 + br_if 0, $pop11 # 0: down to label56 +# BB#1: + i32.const $11=, 1 + br 1 # 1: down to label55 +.LBB7_2: + end_block # label56: + i32.const $11=, 0 +.LBB7_3: # =>This Inner Loop Header: Depth=1 + end_block # label55: + loop # label57: + block + block + block + block + block + block + br_table $11, 1, 2, 0, 3, 3 # 1: down to label62 + # 2: down to label61 + # 0: down to label63 + # 3: down to label60 +.LBB7_4: # %for.inc.i.for.body.i_crit_edge + # in Loop: Header=BB7_3 Depth=1 + end_block # label63: + i32.load $9=, 0($8) + i32.const $push34=, 4 + i32.add $push0=, $8, $pop34 + copy_local $8=, $pop0 + i32.const $push33=, 1 + i32.add $push32=, $7, $pop33 + tee_local $push31=, $7=, $pop32 + i32.eq $push12=, $9, $pop31 + br_if 3, $pop12 # 3: down to label59 +# BB#5: # in Loop: Header=BB7_3 Depth=1 + i32.const $11=, 0 + br 5 # 5: up to label57 +.LBB7_6: # %if.then.i + # in Loop: Header=BB7_3 Depth=1 + end_block # label62: + i32.store 12($10), $7 + i32.store 8($10), $9 + i32.store 4($10), $7 + i32.const $push39=, .L.str.7 + i32.store 0($10), $pop39 + i32.const $push38=, .L.str.1 + i32.call $drop=, printf@FUNCTION, $pop38, $10 + i32.const $push37=, 0 + i32.const $push36=, 0 + i32.load $push13=, errors($pop36) + i32.const $push35=, 1 + i32.add $push14=, $pop13, $pop35 + i32.store errors($pop37), $pop14 +# BB#7: # in Loop: Header=BB7_3 Depth=1 + i32.const $11=, 1 + br 4 # 4: up to label57 +.LBB7_8: # %for.inc.i + # in Loop: Header=BB7_3 Depth=1 + end_block # label61: + i32.const $push40=, 10 + i32.ne $push15=, $7, $pop40 + br_if 2, $pop15 # 2: down to label58 +# BB#9: # in Loop: Header=BB7_3 Depth=1 + i32.const $11=, 3 + br 3 # 3: up to label57 +.LBB7_10: # %verify.exit + end_block # label60: + i32.const $push22=, 0 + i32.const $push20=, 64 + i32.add $push21=, $10, $pop20 + i32.store __stack_pointer($pop22), $pop21 + return +.LBB7_11: # in Loop: Header=BB7_3 Depth=1 + end_block # label59: + i32.const $11=, 1 + br 1 # 1: up to label57 +.LBB7_12: # in Loop: Header=BB7_3 Depth=1 + end_block # label58: + i32.const $11=, 2 + br 0 # 0: up to label57 +.LBB7_13: + end_loop + .endfunc +.Lfunc_end7: + .size varargs6, .Lfunc_end7-varargs6 + # -- End function + .section .text.varargs7,"ax",@progbits + .type varargs7,@function # -- Begin function varargs7 +varargs7: # @varargs7 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push19=, 0 + i32.const $push17=, 0 + i32.load $push16=, __stack_pointer($pop17) + i32.const $push18=, 64 + i32.sub $push30=, $pop16, $pop18 + tee_local $push29=, $11=, $pop30 + i32.store __stack_pointer($pop19), $pop29 + i32.store 60($11), $8 + i32.const $push28=, 4 + i32.add $push1=, $8, $pop28 + i32.store 60($11), $pop1 + i64.const $push2=, 4294967296 + i64.store 16($11), $pop2 + i64.const $push3=, 12884901890 + i64.store 24($11), $pop3 + i64.const $push4=, 21474836484 + i64.store 32($11), $pop4 + i64.const $push5=, 30064771078 + i64.store 40($11), $pop5 + i32.load $push6=, 4($8) + i32.store 52($11), $pop6 + i32.load $push7=, 8($8) + i32.store 56($11), $pop7 + i32.load $push8=, 0($8) + i32.store 48($11), $pop8 + i32.const $push9=, 12 + i32.add $push10=, $8, $pop9 + i32.store 60($11), $pop10 + i32.const $push23=, 16 + i32.add $push24=, $11, $pop23 + i32.const $push27=, 4 + i32.or $9=, $pop24, $pop27 + i32.const $10=, 0 + i32.const $8=, 0 + block + block + i32.const $push26=, 0 + i32.const $push25=, 0 + i32.ne $push11=, $pop26, $pop25 + br_if 0, $pop11 # 0: down to label65 +# BB#1: + i32.const $12=, 1 + br 1 # 1: down to label64 +.LBB8_2: + end_block # label65: + i32.const $12=, 0 +.LBB8_3: # =>This Inner Loop Header: Depth=1 + end_block # label64: + loop # label66: + block + block + block + block + block + block + br_table $12, 1, 2, 0, 3, 3 # 1: down to label71 + # 2: down to label70 + # 0: down to label72 + # 3: down to label69 +.LBB8_4: # %for.inc.i.for.body.i_crit_edge + # in Loop: Header=BB8_3 Depth=1 + end_block # label72: + i32.load $10=, 0($9) + i32.const $push34=, 4 + i32.add $push0=, $9, $pop34 + copy_local $9=, $pop0 + i32.const $push33=, 1 + i32.add $push32=, $8, $pop33 + tee_local $push31=, $8=, $pop32 + i32.eq $push12=, $10, $pop31 + br_if 3, $pop12 # 3: down to label68 +# BB#5: # in Loop: Header=BB8_3 Depth=1 + i32.const $12=, 0 + br 5 # 5: up to label66 +.LBB8_6: # %if.then.i + # in Loop: Header=BB8_3 Depth=1 + end_block # label71: + i32.store 12($11), $8 + i32.store 8($11), $10 + i32.store 4($11), $8 + i32.const $push39=, .L.str.8 + i32.store 0($11), $pop39 + i32.const $push38=, .L.str.1 + i32.call $drop=, printf@FUNCTION, $pop38, $11 + i32.const $push37=, 0 + i32.const $push36=, 0 + i32.load $push13=, errors($pop36) + i32.const $push35=, 1 + i32.add $push14=, $pop13, $pop35 + i32.store errors($pop37), $pop14 +# BB#7: # in Loop: Header=BB8_3 Depth=1 + i32.const $12=, 1 + br 4 # 4: up to label66 +.LBB8_8: # %for.inc.i + # in Loop: Header=BB8_3 Depth=1 + end_block # label70: + i32.const $push40=, 10 + i32.ne $push15=, $8, $pop40 + br_if 2, $pop15 # 2: down to label67 +# BB#9: # in Loop: Header=BB8_3 Depth=1 + i32.const $12=, 3 + br 3 # 3: up to label66 +.LBB8_10: # %verify.exit + end_block # label69: + i32.const $push22=, 0 + i32.const $push20=, 64 + i32.add $push21=, $11, $pop20 + i32.store __stack_pointer($pop22), $pop21 + return +.LBB8_11: # in Loop: Header=BB8_3 Depth=1 + end_block # label68: + i32.const $12=, 1 + br 1 # 1: up to label66 +.LBB8_12: # in Loop: Header=BB8_3 Depth=1 + end_block # label67: + i32.const $12=, 2 + br 0 # 0: up to label66 +.LBB8_13: + end_loop + .endfunc +.Lfunc_end8: + .size varargs7, .Lfunc_end8-varargs7 + # -- End function + .section .text.varargs8,"ax",@progbits + .type varargs8,@function # -- Begin function varargs8 +varargs8: # @varargs8 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push18=, 0 + i32.const $push16=, 0 + i32.load $push15=, __stack_pointer($pop16) + i32.const $push17=, 64 + i32.sub $push30=, $pop15, $pop17 + tee_local $push29=, $12=, $pop30 + i32.store __stack_pointer($pop18), $pop29 + i32.store 60($12), $9 + i32.const $push28=, 4 + i32.add $push1=, $9, $pop28 + i32.store 60($12), $pop1 + i64.const $push2=, 4294967296 + i64.store 16($12), $pop2 + i64.const $push3=, 12884901890 + i64.store 24($12), $pop3 + i64.const $push4=, 21474836484 + i64.store 32($12), $pop4 + i64.const $push5=, 30064771078 + i64.store 40($12), $pop5 + i32.load $push6=, 4($9) + i32.store 56($12), $pop6 + i32.load $push7=, 0($9) + i32.store 52($12), $pop7 + i32.const $push8=, 8 + i32.store 48($12), $pop8 + i32.const $push27=, 8 + i32.add $push9=, $9, $pop27 + i32.store 60($12), $pop9 + i32.const $push22=, 16 + i32.add $push23=, $12, $pop22 + i32.const $push26=, 4 + i32.or $10=, $pop23, $pop26 + i32.const $11=, 0 + i32.const $9=, 0 + block + block + i32.const $push25=, 0 + i32.const $push24=, 0 + i32.ne $push10=, $pop25, $pop24 + br_if 0, $pop10 # 0: down to label74 +# BB#1: + i32.const $13=, 1 + br 1 # 1: down to label73 +.LBB9_2: + end_block # label74: + i32.const $13=, 0 +.LBB9_3: # =>This Inner Loop Header: Depth=1 + end_block # label73: + loop # label75: + block + block + block + block + block + block + br_table $13, 1, 2, 0, 3, 3 # 1: down to label80 + # 2: down to label79 + # 0: down to label81 + # 3: down to label78 +.LBB9_4: # %for.inc.i.for.body.i_crit_edge + # in Loop: Header=BB9_3 Depth=1 + end_block # label81: + i32.load $11=, 0($10) + i32.const $push34=, 4 + i32.add $push0=, $10, $pop34 + copy_local $10=, $pop0 + i32.const $push33=, 1 + i32.add $push32=, $9, $pop33 + tee_local $push31=, $9=, $pop32 + i32.eq $push11=, $11, $pop31 + br_if 3, $pop11 # 3: down to label77 +# BB#5: # in Loop: Header=BB9_3 Depth=1 + i32.const $13=, 0 + br 5 # 5: up to label75 +.LBB9_6: # %if.then.i + # in Loop: Header=BB9_3 Depth=1 + end_block # label80: + i32.store 12($12), $9 + i32.store 8($12), $11 + i32.store 4($12), $9 + i32.const $push39=, .L.str.9 + i32.store 0($12), $pop39 + i32.const $push38=, .L.str.1 + i32.call $drop=, printf@FUNCTION, $pop38, $12 + i32.const $push37=, 0 + i32.const $push36=, 0 + i32.load $push12=, errors($pop36) + i32.const $push35=, 1 + i32.add $push13=, $pop12, $pop35 + i32.store errors($pop37), $pop13 +# BB#7: # in Loop: Header=BB9_3 Depth=1 + i32.const $13=, 1 + br 4 # 4: up to label75 +.LBB9_8: # %for.inc.i + # in Loop: Header=BB9_3 Depth=1 + end_block # label79: + i32.const $push40=, 10 + i32.ne $push14=, $9, $pop40 + br_if 2, $pop14 # 2: down to label76 +# BB#9: # in Loop: Header=BB9_3 Depth=1 + i32.const $13=, 3 + br 3 # 3: up to label75 +.LBB9_10: # %verify.exit + end_block # label78: + i32.const $push21=, 0 + i32.const $push19=, 64 + i32.add $push20=, $12, $pop19 + i32.store __stack_pointer($pop21), $pop20 + return +.LBB9_11: # in Loop: Header=BB9_3 Depth=1 + end_block # label77: + i32.const $13=, 1 + br 1 # 1: up to label75 +.LBB9_12: # in Loop: Header=BB9_3 Depth=1 + end_block # label76: + i32.const $13=, 2 + br 0 # 0: up to label75 +.LBB9_13: + end_loop + .endfunc +.Lfunc_end9: + .size varargs8, .Lfunc_end9-varargs8 + # -- End function + .section .text.varargs9,"ax",@progbits + .type varargs9,@function # -- Begin function varargs9 +varargs9: # @varargs9 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push16=, 0 + i32.const $push14=, 0 + i32.load $push13=, __stack_pointer($pop14) + i32.const $push15=, 64 + i32.sub $push27=, $pop13, $pop15 + tee_local $push26=, $13=, $pop27 + i32.store __stack_pointer($pop16), $pop26 + i32.store 60($13), $10 + i32.const $push25=, 4 + i32.add $push1=, $10, $pop25 + i32.store 60($13), $pop1 + i64.const $push2=, 4294967296 + i64.store 16($13), $pop2 + i64.const $push3=, 12884901890 + i64.store 24($13), $pop3 + i64.const $push4=, 21474836484 + i64.store 32($13), $pop4 + i64.const $push5=, 30064771078 + i64.store 40($13), $pop5 + i64.const $push6=, 38654705672 + i64.store 48($13), $pop6 + i32.load $push7=, 0($10) + i32.store 56($13), $pop7 + i32.const $push20=, 16 + i32.add $push21=, $13, $pop20 + i32.const $push24=, 4 + i32.or $11=, $pop21, $pop24 + i32.const $12=, 0 + i32.const $10=, 0 + block + block + i32.const $push23=, 0 + i32.const $push22=, 0 + i32.ne $push8=, $pop23, $pop22 + br_if 0, $pop8 # 0: down to label83 +# BB#1: + i32.const $14=, 1 + br 1 # 1: down to label82 +.LBB10_2: + end_block # label83: + i32.const $14=, 0 +.LBB10_3: # =>This Inner Loop Header: Depth=1 + end_block # label82: + loop # label84: + block + block + block + block + block + block + br_table $14, 1, 2, 0, 3, 3 # 1: down to label89 + # 2: down to label88 + # 0: down to label90 + # 3: down to label87 +.LBB10_4: # %for.inc.i.for.body.i_crit_edge + # in Loop: Header=BB10_3 Depth=1 + end_block # label90: + i32.load $12=, 0($11) + i32.const $push31=, 4 + i32.add $push0=, $11, $pop31 + copy_local $11=, $pop0 + i32.const $push30=, 1 + i32.add $push29=, $10, $pop30 + tee_local $push28=, $10=, $pop29 + i32.eq $push9=, $12, $pop28 + br_if 3, $pop9 # 3: down to label86 +# BB#5: # in Loop: Header=BB10_3 Depth=1 + i32.const $14=, 0 + br 5 # 5: up to label84 +.LBB10_6: # %if.then.i + # in Loop: Header=BB10_3 Depth=1 + end_block # label89: + i32.store 12($13), $10 + i32.store 8($13), $12 + i32.store 4($13), $10 + i32.const $push36=, .L.str.10 + i32.store 0($13), $pop36 + i32.const $push35=, .L.str.1 + i32.call $drop=, printf@FUNCTION, $pop35, $13 + i32.const $push34=, 0 + i32.const $push33=, 0 + i32.load $push10=, errors($pop33) + i32.const $push32=, 1 + i32.add $push11=, $pop10, $pop32 + i32.store errors($pop34), $pop11 +# BB#7: # in Loop: Header=BB10_3 Depth=1 + i32.const $14=, 1 + br 4 # 4: up to label84 +.LBB10_8: # %for.inc.i + # in Loop: Header=BB10_3 Depth=1 + end_block # label88: + i32.const $push37=, 10 + i32.ne $push12=, $10, $pop37 + br_if 2, $pop12 # 2: down to label85 +# BB#9: # in Loop: Header=BB10_3 Depth=1 + i32.const $14=, 3 + br 3 # 3: up to label84 +.LBB10_10: # %verify.exit + end_block # label87: + i32.const $push19=, 0 + i32.const $push17=, 64 + i32.add $push18=, $13, $pop17 + i32.store __stack_pointer($pop19), $pop18 + return +.LBB10_11: # in Loop: Header=BB10_3 Depth=1 + end_block # label86: + i32.const $14=, 1 + br 1 # 1: up to label84 +.LBB10_12: # in Loop: Header=BB10_3 Depth=1 + end_block # label85: + i32.const $14=, 2 + br 0 # 0: up to label84 +.LBB10_13: + end_loop + .endfunc +.Lfunc_end10: + .size varargs9, .Lfunc_end10-varargs9 + # -- End function + .type errors,@object # @errors + .section .bss.errors,"aw",@nobits + .p2align 2 +errors: + .int32 0 # 0x0 + .size errors, 4 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "varargs0" + .size .L.str, 9 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz " %s: n[%d] = %d expected %d\n" + .size .L.str.1, 29 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "varargs1" + .size .L.str.2, 9 + + .type .L.str.3,@object # @.str.3 +.L.str.3: + .asciz "varargs2" + .size .L.str.3, 9 + + .type .L.str.4,@object # @.str.4 +.L.str.4: + .asciz "varargs3" + .size .L.str.4, 9 + + .type .L.str.5,@object # @.str.5 +.L.str.5: + .asciz "varargs4" + .size .L.str.5, 9 + + .type .L.str.6,@object # @.str.6 +.L.str.6: + .asciz "varargs5" + .size .L.str.6, 9 + + .type .L.str.7,@object # @.str.7 +.L.str.7: + .asciz "varargs6" + .size .L.str.7, 9 + + .type .L.str.8,@object # @.str.8 +.L.str.8: + .asciz "varargs7" + .size .L.str.8, 9 + + .type .L.str.9,@object # @.str.9 +.L.str.9: + .asciz "varargs8" + .size .L.str.9, 9 + + .type .L.str.10,@object # @.str.10 +.L.str.10: + .asciz "varargs9" + .size .L.str.10, 9 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 + .functype printf, i32, i32 diff --git a/src/binaryen/test/torture-s/va-arg-26.c.s b/src/binaryen/test/torture-s/va-arg-26.c.s new file mode 100644 index 0000000000..43944633d5 --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-26.c.s @@ -0,0 +1,66 @@ + .text + .file "va-arg-26.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param f32, f32, f32, f32, f32, f32, i32 + .result f64 +# BB#0: # %entry + i32.const $push7=, 0 + i32.load $push6=, __stack_pointer($pop7) + i32.const $push8=, 16 + i32.sub $push9=, $pop6, $pop8 + i32.const $push0=, 7 + i32.add $push1=, $6, $pop0 + i32.const $push2=, -8 + i32.and $push11=, $pop1, $pop2 + tee_local $push10=, $6=, $pop11 + i32.const $push3=, 8 + i32.add $push4=, $pop10, $pop3 + i32.store 12($pop9), $pop4 + f64.load $push5=, 0($6) + # fallthrough-return: $pop5 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local f32, i32 +# BB#0: # %entry + i32.const $push8=, 0 + i32.const $push6=, 0 + i32.load $push5=, __stack_pointer($pop6) + i32.const $push7=, 16 + i32.sub $push10=, $pop5, $pop7 + tee_local $push9=, $1=, $pop10 + i32.store __stack_pointer($pop8), $pop9 + i64.const $push0=, 4619567317775286272 + i64.store 0($1), $pop0 + block + f64.call $push1=, f@FUNCTION, $0, $0, $0, $0, $0, $0, $1 + f64.const $push2=, 0x1.cp2 + f64.eq $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.then + call abort@FUNCTION + unreachable +.LBB1_2: # %if.end + end_block # label0: + i32.const $push4=, 0 + call exit@FUNCTION, $pop4 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-4.c.s b/src/binaryen/test/torture-s/va-arg-4.c.s new file mode 100644 index 0000000000..8c55e7f42c --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-4.c.s @@ -0,0 +1,127 @@ + .text + .file "va-arg-4.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push23=, 0 + i32.const $push21=, 0 + i32.load $push20=, __stack_pointer($pop21) + i32.const $push22=, 16 + i32.sub $push28=, $pop20, $pop22 + tee_local $push27=, $4=, $pop28 + i32.store __stack_pointer($pop23), $pop27 + block + i32.load8_u $push0=, 0($0) + i32.const $push1=, 97 + i32.ne $push2=, $pop0, $pop1 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %lor.lhs.false + i32.load8_u $push3=, 1($0) + i32.const $push4=, 98 + i32.ne $push5=, $pop3, $pop4 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %lor.lhs.false7 + i32.load8_u $push6=, 2($0) + i32.const $push7=, 99 + i32.ne $push8=, $pop6, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %if.end + i32.const $push9=, 4 + i32.add $push30=, $2, $pop9 + tee_local $push29=, $0=, $pop30 + i32.store 12($4), $pop29 + i32.load $push10=, 0($2) + i32.const $push11=, 42 + i32.ne $push12=, $pop10, $pop11 + br_if 0, $pop12 # 0: down to label0 +# BB#4: # %if.end17 + i32.const $push13=, 8 + i32.add $push32=, $2, $pop13 + tee_local $push31=, $3=, $pop32 + i32.store 12($4), $pop31 + i32.load $push14=, 0($0) + i32.const $push15=, 120 + i32.ne $push16=, $pop14, $pop15 + br_if 0, $pop16 # 0: down to label0 +# BB#5: # %if.end23 + i32.const $push17=, 12 + i32.add $push18=, $2, $pop17 + i32.store 12($4), $pop18 + i32.load $push19=, 0($3) + br_if 0, $pop19 # 0: down to label0 +# BB#6: # %if.end29 + i32.const $push26=, 0 + i32.const $push24=, 16 + i32.add $push25=, $4, $pop24 + i32.store __stack_pointer($pop26), $pop25 + return +.LBB0_7: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push16=, 0 + i32.const $push14=, 0 + i32.load $push13=, __stack_pointer($pop14) + i32.const $push15=, 48 + i32.sub $push24=, $pop13, $pop15 + tee_local $push23=, $0=, $pop24 + i32.store __stack_pointer($pop16), $pop23 + i32.const $push2=, 40 + i32.add $push3=, $0, $pop2 + i32.const $push0=, 0 + i64.load $push1=, main.x+24($pop0):p2align=0 + i64.store 0($pop3), $pop1 + i32.const $push5=, 32 + i32.add $push6=, $0, $pop5 + i32.const $push22=, 0 + i64.load $push4=, main.x+16($pop22):p2align=0 + i64.store 0($pop6), $pop4 + i32.const $push8=, 24 + i32.add $push9=, $0, $pop8 + i32.const $push21=, 0 + i64.load $push7=, main.x+8($pop21):p2align=0 + i64.store 0($pop9), $pop7 + i64.const $push10=, 120 + i64.store 4($0):p2align=2, $pop10 + i32.const $push11=, 42 + i32.store 0($0), $pop11 + i32.const $push20=, 0 + i64.load $push12=, main.x($pop20):p2align=0 + i64.store 16($0), $pop12 + i32.const $push17=, 16 + i32.add $push18=, $0, $pop17 + call f@FUNCTION, $pop18, $0, $0 + i32.const $push19=, 0 + call exit@FUNCTION, $pop19 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type main.x,@object # @main.x + .section .data.main.x,"aw",@progbits +main.x: + .asciz "abc\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + .size main.x, 32 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-5.c.s b/src/binaryen/test/torture-s/va-arg-5.c.s new file mode 100644 index 0000000000..e3d1f21104 --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-5.c.s @@ -0,0 +1,230 @@ + .text + .file "va-arg-5.c" + .section .text.va_double,"ax",@progbits + .hidden va_double # -- Begin function va_double + .globl va_double + .type va_double,@function +va_double: # @va_double + .param i32, i32 + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push23=, 0 + i32.const $push21=, 0 + i32.load $push20=, __stack_pointer($pop21) + i32.const $push22=, 16 + i32.sub $push32=, $pop20, $pop22 + tee_local $push31=, $4=, $pop32 + i32.store __stack_pointer($pop23), $pop31 + i32.const $push0=, 7 + i32.add $push1=, $1, $pop0 + i32.const $push2=, -8 + i32.and $push30=, $pop1, $pop2 + tee_local $push29=, $1=, $pop30 + i32.const $push3=, 8 + i32.add $push28=, $pop29, $pop3 + tee_local $push27=, $2=, $pop28 + i32.store 12($4), $pop27 + block + f64.load $push4=, 0($1) + f64.const $push5=, 0x1.921fafc8b007ap1 + f64.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %if.end + i32.const $push7=, 16 + i32.add $push34=, $1, $pop7 + tee_local $push33=, $3=, $pop34 + i32.store 12($4), $pop33 + f64.load $push8=, 0($2) + f64.const $push9=, 0x1.5bf04577d9557p1 + f64.ne $push10=, $pop8, $pop9 + br_if 0, $pop10 # 0: down to label0 +# BB#2: # %if.end6 + i32.const $push11=, 24 + i32.add $push36=, $1, $pop11 + tee_local $push35=, $2=, $pop36 + i32.store 12($4), $pop35 + f64.load $push12=, 0($3) + f64.const $push13=, 0x1.1e3779131154cp1 + f64.ne $push14=, $pop12, $pop13 + br_if 0, $pop14 # 0: down to label0 +# BB#3: # %if.end11 + i32.const $push15=, 32 + i32.add $push16=, $1, $pop15 + i32.store 12($4), $pop16 + f64.load $push17=, 0($2) + f64.const $push18=, 0x1.12e0be1b5921ep1 + f64.ne $push19=, $pop17, $pop18 + br_if 0, $pop19 # 0: down to label0 +# BB#4: # %if.end16 + i32.const $push26=, 0 + i32.const $push24=, 16 + i32.add $push25=, $4, $pop24 + i32.store __stack_pointer($pop26), $pop25 + return $4 +.LBB0_5: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size va_double, .Lfunc_end0-va_double + # -- End function + .section .text.va_long_double,"ax",@progbits + .hidden va_long_double # -- Begin function va_long_double + .globl va_long_double + .type va_long_double,@function +va_long_double: # @va_long_double + .param i32, i32 + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push37=, 0 + i32.const $push35=, 0 + i32.load $push34=, __stack_pointer($pop35) + i32.const $push36=, 16 + i32.sub $push46=, $pop34, $pop36 + tee_local $push45=, $4=, $pop46 + i32.store __stack_pointer($pop37), $pop45 + i32.const $push0=, 15 + i32.add $push1=, $1, $pop0 + i32.const $push2=, -16 + i32.and $push44=, $pop1, $pop2 + tee_local $push43=, $1=, $pop44 + i32.const $push3=, 16 + i32.add $push42=, $pop43, $pop3 + tee_local $push41=, $2=, $pop42 + i32.store 12($4), $pop41 + block + i64.load $push5=, 0($1) + i64.load $push4=, 8($1) + i64.const $push7=, -7338557514379428662 + i64.const $push6=, 4611846683218194439 + i32.call $push8=, __eqtf2@FUNCTION, $pop5, $pop4, $pop7, $pop6 + br_if 0, $pop8 # 0: down to label1 +# BB#1: # %if.end + i32.const $push9=, 32 + i32.add $push48=, $1, $pop9 + tee_local $push47=, $3=, $pop48 + i32.store 12($4), $pop47 + i64.load $push13=, 0($2) + i32.const $push10=, 24 + i32.add $push11=, $1, $pop10 + i64.load $push12=, 0($pop11) + i64.const $push15=, 8163791057260899163 + i64.const $push14=, 4611787105943148885 + i32.call $push16=, __eqtf2@FUNCTION, $pop13, $pop12, $pop15, $pop14 + br_if 0, $pop16 # 0: down to label1 +# BB#2: # %if.end6 + i32.const $push17=, 48 + i32.add $push50=, $1, $pop17 + tee_local $push49=, $2=, $pop50 + i32.store 12($4), $pop49 + i64.load $push21=, 0($3) + i32.const $push18=, 40 + i32.add $push19=, $1, $pop18 + i64.load $push20=, 0($pop19) + i64.const $push23=, -4892607794577095924 + i64.const $push22=, 4611719242030715220 + i32.call $push24=, __eqtf2@FUNCTION, $pop21, $pop20, $pop23, $pop22 + br_if 0, $pop24 # 0: down to label1 +# BB#3: # %if.end11 + i32.const $push25=, 64 + i32.add $push26=, $1, $pop25 + i32.store 12($4), $pop26 + i64.load $push30=, 0($2) + i32.const $push27=, 56 + i32.add $push28=, $1, $pop27 + i64.load $push29=, 0($pop28) + i64.const $push32=, -2718666384188054750 + i64.const $push31=, 4611706774898825505 + i32.call $push33=, __eqtf2@FUNCTION, $pop30, $pop29, $pop32, $pop31 + br_if 0, $pop33 # 0: down to label1 +# BB#4: # %if.end16 + i32.const $push40=, 0 + i32.const $push38=, 16 + i32.add $push39=, $4, $pop38 + i32.store __stack_pointer($pop40), $pop39 + return $1 +.LBB1_5: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size va_long_double, .Lfunc_end1-va_long_double + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push30=, 0 + i32.const $push28=, 0 + i32.load $push27=, __stack_pointer($pop28) + i32.const $push29=, 96 + i32.sub $push40=, $pop27, $pop29 + tee_local $push39=, $0=, $pop40 + i32.store __stack_pointer($pop30), $pop39 + i32.const $push31=, 64 + i32.add $push32=, $0, $pop31 + i32.const $push0=, 24 + i32.add $push1=, $pop32, $pop0 + i64.const $push2=, 4612018121970389534 + i64.store 0($pop1), $pop2 + i32.const $push33=, 64 + i32.add $push34=, $0, $pop33 + i32.const $push3=, 16 + i32.add $push4=, $pop34, $pop3 + i64.const $push5=, 4612217596080624972 + i64.store 0($pop4), $pop5 + i64.const $push6=, 4613303418679563607 + i64.store 72($0), $pop6 + i64.const $push7=, 4614256655080292474 + i64.store 64($0), $pop7 + i32.const $push35=, 64 + i32.add $push36=, $0, $pop35 + i32.call $drop=, va_double@FUNCTION, $0, $pop36 + i32.const $push8=, 56 + i32.add $push9=, $0, $pop8 + i64.const $push10=, 4611706774898825505 + i64.store 0($pop9), $pop10 + i32.const $push11=, 48 + i32.add $push12=, $0, $pop11 + i64.const $push13=, -2718666384188054750 + i64.store 0($pop12), $pop13 + i32.const $push14=, 40 + i32.add $push15=, $0, $pop14 + i64.const $push16=, 4611719242030715220 + i64.store 0($pop15), $pop16 + i32.const $push17=, 32 + i32.add $push18=, $0, $pop17 + i64.const $push19=, -4892607794577095924 + i64.store 0($pop18), $pop19 + i32.const $push38=, 24 + i32.add $push20=, $0, $pop38 + i64.const $push21=, 4611787105943148885 + i64.store 0($pop20), $pop21 + i32.const $push37=, 16 + i32.add $push22=, $0, $pop37 + i64.const $push23=, 8163791057260899163 + i64.store 0($pop22), $pop23 + i64.const $push24=, 4611846683218194439 + i64.store 8($0), $pop24 + i64.const $push25=, -7338557514379428662 + i64.store 0($0), $pop25 + i32.call $drop=, va_long_double@FUNCTION, $0, $0 + i32.const $push26=, 0 + call exit@FUNCTION, $pop26 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-6.c.s b/src/binaryen/test/torture-s/va-arg-6.c.s new file mode 100644 index 0000000000..ba66717c42 --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-6.c.s @@ -0,0 +1,188 @@ + .text + .file "va-arg-6.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32, i32 + .result i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push51=, 0 + i32.const $push49=, 0 + i32.load $push48=, __stack_pointer($pop49) + i32.const $push50=, 16 + i32.sub $push58=, $pop48, $pop50 + tee_local $push57=, $4=, $pop58 + i32.store __stack_pointer($pop51), $pop57 + i32.const $push0=, 4 + i32.add $push56=, $1, $pop0 + tee_local $push55=, $2=, $pop56 + i32.store 12($4), $pop55 + block + i32.load $push1=, 0($1) + i32.const $push2=, 10 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 7 + i32.add $push5=, $2, $pop4 + i32.const $push6=, -8 + i32.and $push62=, $pop5, $pop6 + tee_local $push61=, $1=, $pop62 + i32.const $push7=, 8 + i32.add $push60=, $pop61, $pop7 + tee_local $push59=, $2=, $pop60 + i32.store 12($4), $pop59 + i64.load $push8=, 0($1) + i64.const $push9=, 10000000000 + i64.ne $push10=, $pop8, $pop9 + br_if 0, $pop10 # 0: down to label0 +# BB#2: # %if.end6 + i32.const $push11=, 12 + i32.add $push64=, $1, $pop11 + tee_local $push63=, $1=, $pop64 + i32.store 12($4), $pop63 + i32.load $push12=, 0($2) + i32.const $push13=, 11 + i32.ne $push14=, $pop12, $pop13 + br_if 0, $pop14 # 0: down to label0 +# BB#3: # %if.end11 + i32.const $push15=, 15 + i32.add $push16=, $1, $pop15 + i32.const $push17=, -16 + i32.and $push68=, $pop16, $pop17 + tee_local $push67=, $1=, $pop68 + i32.const $push18=, 16 + i32.add $push66=, $pop67, $pop18 + tee_local $push65=, $2=, $pop66 + i32.store 12($4), $pop65 + i64.load $push20=, 0($1) + i64.load $push19=, 8($1) + i64.const $push22=, -1475739525896764129 + i64.const $push21=, 4611846459164112977 + i32.call $push23=, __eqtf2@FUNCTION, $pop20, $pop19, $pop22, $pop21 + br_if 0, $pop23 # 0: down to label0 +# BB#4: # %if.end16 + i32.const $push24=, 20 + i32.add $push70=, $1, $pop24 + tee_local $push69=, $3=, $pop70 + i32.store 12($4), $pop69 + i32.load $push25=, 0($2) + i32.const $push26=, 12 + i32.ne $push27=, $pop25, $pop26 + br_if 0, $pop27 # 0: down to label0 +# BB#5: # %if.end21 + i32.const $push28=, 24 + i32.add $push72=, $1, $pop28 + tee_local $push71=, $2=, $pop72 + i32.store 12($4), $pop71 + i32.load $push29=, 0($3) + i32.const $push30=, 13 + i32.ne $push31=, $pop29, $pop30 + br_if 0, $pop31 # 0: down to label0 +# BB#6: # %if.end26 + i32.const $push32=, 32 + i32.add $push74=, $1, $pop32 + tee_local $push73=, $3=, $pop74 + i32.store 12($4), $pop73 + i64.load $push33=, 0($2) + i64.const $push34=, 20000000000 + i64.ne $push35=, $pop33, $pop34 + br_if 0, $pop35 # 0: down to label0 +# BB#7: # %if.end31 + i32.const $push36=, 36 + i32.add $push76=, $1, $pop36 + tee_local $push75=, $1=, $pop76 + i32.store 12($4), $pop75 + i32.load $push37=, 0($3) + i32.const $push38=, 14 + i32.ne $push39=, $pop37, $pop38 + br_if 0, $pop39 # 0: down to label0 +# BB#8: # %if.end36 + i32.const $push40=, 7 + i32.add $push41=, $1, $pop40 + i32.const $push42=, -8 + i32.and $push78=, $pop41, $pop42 + tee_local $push77=, $1=, $pop78 + i32.const $push43=, 8 + i32.add $push44=, $pop77, $pop43 + i32.store 12($4), $pop44 + f64.load $push45=, 0($1) + f64.const $push46=, 0x1.5c28f5c28f5c3p1 + f64.ne $push47=, $pop45, $pop46 + br_if 0, $pop47 # 0: down to label0 +# BB#9: # %if.end41 + i32.const $push54=, 0 + i32.const $push52=, 16 + i32.add $push53=, $4, $pop52 + i32.store __stack_pointer($pop54), $pop53 + return $4 +.LBB0_10: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push27=, 0 + i32.const $push25=, 0 + i32.load $push24=, __stack_pointer($pop25) + i32.const $push26=, 80 + i32.sub $push29=, $pop24, $pop26 + tee_local $push28=, $0=, $pop29 + i32.store __stack_pointer($pop27), $pop28 + i32.const $push0=, 64 + i32.add $push1=, $0, $pop0 + i64.const $push2=, 4613307314293241283 + i64.store 0($pop1), $pop2 + i32.const $push3=, 56 + i32.add $push4=, $0, $pop3 + i32.const $push5=, 14 + i32.store 0($pop4), $pop5 + i32.const $push6=, 48 + i32.add $push7=, $0, $pop6 + i64.const $push8=, 20000000000 + i64.store 0($pop7), $pop8 + i32.const $push9=, 40 + i32.add $push10=, $0, $pop9 + i64.const $push11=, 55834574860 + i64.store 0($pop10), $pop11 + i32.const $push12=, 32 + i32.add $push13=, $0, $pop12 + i64.const $push14=, 4611846459164112977 + i64.store 0($pop13), $pop14 + i32.const $push15=, 24 + i32.add $push16=, $0, $pop15 + i64.const $push17=, -1475739525896764129 + i64.store 0($pop16), $pop17 + i32.const $push18=, 16 + i32.add $push19=, $0, $pop18 + i32.const $push20=, 11 + i32.store 0($pop19), $pop20 + i64.const $push21=, 10000000000 + i64.store 8($0), $pop21 + i32.const $push22=, 10 + i32.store 0($0), $pop22 + i32.call $drop=, f@FUNCTION, $0, $0 + i32.const $push23=, 0 + call exit@FUNCTION, $pop23 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-7.c.s b/src/binaryen/test/torture-s/va-arg-7.c.s new file mode 100644 index 0000000000..9da27da7bf --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-7.c.s @@ -0,0 +1,89 @@ + .text + .file "va-arg-7.c" + .section .text.debug,"ax",@progbits + .hidden debug # -- Begin function debug + .globl debug + .type debug,@function +debug: # @debug + .param i32, i32, i32, i32, i32, i32, i32, f64, f64, f64, f64, f64, f64, f64, f64, f64, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push17=, 0 + i32.const $push15=, 0 + i32.load $push14=, __stack_pointer($pop15) + i32.const $push16=, 16 + i32.sub $push25=, $pop14, $pop16 + tee_local $push24=, $18=, $pop25 + i32.store __stack_pointer($pop17), $pop24 + i32.const $push0=, 4 + i32.add $push23=, $16, $pop0 + tee_local $push22=, $17=, $pop23 + i32.store 12($18), $pop22 + block + i32.load $push1=, 0($16) + i32.const $push21=, 8 + i32.ne $push2=, $pop1, $pop21 + br_if 0, $pop2 # 0: down to label0 +# BB#1: # %if.end + i32.const $push26=, 8 + i32.add $push3=, $16, $pop26 + i32.store 12($18), $pop3 + i32.load $push4=, 0($17) + i32.const $push5=, 9 + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#2: # %if.end6 + i32.const $push7=, 12 + i32.add $push8=, $16, $pop7 + i32.store 12($18), $pop8 + i32.const $push9=, 8 + i32.add $push10=, $16, $pop9 + i32.load $push11=, 0($pop10) + i32.const $push12=, 10 + i32.ne $push13=, $pop11, $pop12 + br_if 0, $pop13 # 0: down to label0 +# BB#3: # %if.end11 + i32.const $push20=, 0 + i32.const $push18=, 16 + i32.add $push19=, $18, $pop18 + i32.store __stack_pointer($pop20), $pop19 + return +.LBB0_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size debug, .Lfunc_end0-debug + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local f64, i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push8=, $pop3, $pop5 + tee_local $push7=, $1=, $pop8 + i32.store __stack_pointer($pop6), $pop7 + i32.const $push0=, 10 + i32.store 8($1), $pop0 + i64.const $push1=, 38654705672 + i64.store 0($1), $pop1 + call debug@FUNCTION, $1, $1, $1, $1, $1, $1, $1, $0, $0, $0, $0, $0, $0, $0, $0, $0, $1 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-8.c.s b/src/binaryen/test/torture-s/va-arg-8.c.s new file mode 100644 index 0000000000..81d67834ee --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-8.c.s @@ -0,0 +1,84 @@ + .text + .file "va-arg-8.c" + .section .text.debug,"ax",@progbits + .hidden debug # -- Begin function debug + .globl debug + .type debug,@function +debug: # @debug + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push15=, 0 + i32.const $push13=, 0 + i32.load $push12=, __stack_pointer($pop13) + i32.const $push14=, 16 + i32.sub $push22=, $pop12, $pop14 + tee_local $push21=, $11=, $pop22 + i32.store __stack_pointer($pop15), $pop21 + i32.const $push0=, 4 + i32.add $push20=, $9, $pop0 + tee_local $push19=, $10=, $pop20 + i32.store 12($11), $pop19 + block + i32.load $push1=, 0($9) + i32.const $push2=, 10 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 7 + i32.add $push5=, $10, $pop4 + i32.const $push6=, -8 + i32.and $push24=, $pop5, $pop6 + tee_local $push23=, $9=, $pop24 + i32.const $push7=, 8 + i32.add $push8=, $pop23, $pop7 + i32.store 12($11), $pop8 + i64.load $push9=, 0($9) + i64.const $push10=, 20014547621496 + i64.ne $push11=, $pop9, $pop10 + br_if 0, $pop11 # 0: down to label0 +# BB#2: # %if.end6 + i32.const $push18=, 0 + i32.const $push16=, 16 + i32.add $push17=, $11, $pop16 + i32.store __stack_pointer($pop18), $pop17 + return +.LBB0_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size debug, .Lfunc_end0-debug + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push6=, 0 + i32.const $push4=, 0 + i32.load $push3=, __stack_pointer($pop4) + i32.const $push5=, 16 + i32.sub $push8=, $pop3, $pop5 + tee_local $push7=, $0=, $pop8 + i32.store __stack_pointer($pop6), $pop7 + i64.const $push0=, 20014547621496 + i64.store 8($0), $pop0 + i32.const $push1=, 10 + i32.store 0($0), $pop1 + call debug@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-9.c.s b/src/binaryen/test/torture-s/va-arg-9.c.s new file mode 100644 index 0000000000..12df8febde --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-9.c.s @@ -0,0 +1,1664 @@ + .text + .file "va-arg-9.c" + .section .text.to_hex,"ax",@progbits + .hidden to_hex # -- Begin function to_hex + .globl to_hex + .type to_hex,@function +to_hex: # @to_hex + .param i32 + .result i32 +# BB#0: # %entry + block + i32.const $push0=, 16 + i32.ge_u $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %if.end + i32.const $push2=, .L.str + i32.add $push3=, $0, $pop2 + i32.load8_s $push4=, 0($pop3) + return $pop4 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size to_hex, .Lfunc_end0-to_hex + # -- End function + .section .text.fap,"ax",@progbits + .hidden fap # -- Begin function fap + .globl fap + .type fap,@function +fap: # @fap + .param i32, i32, i32 + .local i32 +# BB#0: # %entry + block + i32.call $push3=, strlen@FUNCTION, $1 + i32.const $push1=, 16 + i32.sub $push2=, $pop1, $0 + i32.ne $push4=, $pop3, $pop2 + br_if 0, $pop4 # 0: down to label1 +# BB#1: # %if.end + block + i32.load8_u $push11=, 0($1) + tee_local $push10=, $0=, $pop11 + i32.eqz $push20=, $pop10 + br_if 0, $pop20 # 0: down to label2 +# BB#2: # %while.body.preheader + i32.const $push12=, 1 + i32.add $1=, $1, $pop12 +.LBB1_3: # %while.body + # =>This Inner Loop Header: Depth=1 + loop # label3: + i32.load $push15=, 0($2) + tee_local $push14=, $3=, $pop15 + i32.const $push13=, 16 + i32.ge_u $push5=, $pop14, $pop13 + br_if 2, $pop5 # 2: down to label1 +# BB#4: # %to_hex.exit + # in Loop: Header=BB1_3 Depth=1 + i32.const $push17=, .L.str + i32.add $push7=, $3, $pop17 + i32.load8_u $push8=, 0($pop7) + i32.const $push16=, 255 + i32.and $push6=, $0, $pop16 + i32.ne $push9=, $pop8, $pop6 + br_if 2, $pop9 # 2: down to label1 +# BB#5: # %if.end5 + # in Loop: Header=BB1_3 Depth=1 + i32.const $push19=, 4 + i32.add $2=, $2, $pop19 + i32.load8_u $0=, 0($1) + i32.const $push18=, 1 + i32.add $push0=, $1, $pop18 + copy_local $1=, $pop0 + br_if 0, $0 # 0: up to label3 +.LBB1_6: # %while.end + end_loop + end_block # label2: + return +.LBB1_7: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size fap, .Lfunc_end1-fap + # -- End function + .section .text.f0,"ax",@progbits + .hidden f0 # -- Begin function f0 + .globl f0 + .type f0,@function +f0: # @f0 + .param i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $4=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($4), $1 + block + i32.call $push1=, strlen@FUNCTION, $0 + i32.const $push2=, 16 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label4 +# BB#1: # %if.end.i + block + i32.load8_u $push19=, 0($0) + tee_local $push18=, $1=, $pop19 + i32.eqz $push28=, $pop18 + br_if 0, $pop28 # 0: down to label5 +# BB#2: # %while.body.i.preheader + i32.const $push20=, 1 + i32.add $0=, $0, $pop20 + i32.load $2=, 12($4) +.LBB2_3: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label6: + i32.load $push23=, 0($2) + tee_local $push22=, $3=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label4 +# BB#4: # %to_hex.exit.i + # in Loop: Header=BB2_3 Depth=1 + i32.const $push25=, .L.str + i32.add $push6=, $3, $pop25 + i32.load8_u $push7=, 0($pop6) + i32.const $push24=, 255 + i32.and $push5=, $1, $pop24 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label4 +# BB#5: # %if.end5.i + # in Loop: Header=BB2_3 Depth=1 + i32.const $push27=, 4 + i32.add $2=, $2, $pop27 + i32.load8_u $1=, 0($0) + i32.const $push26=, 1 + i32.add $push0=, $0, $pop26 + copy_local $0=, $pop0 + br_if 0, $1 # 0: up to label6 +.LBB2_6: # %fap.exit + end_loop + end_block # label5: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $4, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB2_7: # %if.then.i + end_block # label4: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end2: + .size f0, .Lfunc_end2-f0 + # -- End function + .section .text.f1,"ax",@progbits + .hidden f1 # -- Begin function f1 + .globl f1 + .type f1,@function +f1: # @f1 + .param i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $5=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($5), $2 + block + i32.call $push1=, strlen@FUNCTION, $1 + i32.const $push2=, 15 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label7 +# BB#1: # %if.end.i + block + i32.load8_u $push19=, 0($1) + tee_local $push18=, $2=, $pop19 + i32.eqz $push28=, $pop18 + br_if 0, $pop28 # 0: down to label8 +# BB#2: # %while.body.i.preheader + i32.const $push20=, 1 + i32.add $1=, $1, $pop20 + i32.load $3=, 12($5) +.LBB3_3: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label9: + i32.load $push23=, 0($3) + tee_local $push22=, $4=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label7 +# BB#4: # %to_hex.exit.i + # in Loop: Header=BB3_3 Depth=1 + i32.const $push25=, .L.str + i32.add $push6=, $4, $pop25 + i32.load8_u $push7=, 0($pop6) + i32.const $push24=, 255 + i32.and $push5=, $2, $pop24 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label7 +# BB#5: # %if.end5.i + # in Loop: Header=BB3_3 Depth=1 + i32.const $push27=, 4 + i32.add $3=, $3, $pop27 + i32.load8_u $2=, 0($1) + i32.const $push26=, 1 + i32.add $push0=, $1, $pop26 + copy_local $1=, $pop0 + br_if 0, $2 # 0: up to label9 +.LBB3_6: # %fap.exit + end_loop + end_block # label8: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $5, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB3_7: # %if.then.i + end_block # label7: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size f1, .Lfunc_end3-f1 + # -- End function + .section .text.f2,"ax",@progbits + .hidden f2 # -- Begin function f2 + .globl f2 + .type f2,@function +f2: # @f2 + .param i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $6=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($6), $3 + block + i32.call $push1=, strlen@FUNCTION, $2 + i32.const $push2=, 14 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label10 +# BB#1: # %if.end.i + block + i32.load8_u $push19=, 0($2) + tee_local $push18=, $3=, $pop19 + i32.eqz $push28=, $pop18 + br_if 0, $pop28 # 0: down to label11 +# BB#2: # %while.body.i.preheader + i32.const $push20=, 1 + i32.add $2=, $2, $pop20 + i32.load $4=, 12($6) +.LBB4_3: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label12: + i32.load $push23=, 0($4) + tee_local $push22=, $5=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label10 +# BB#4: # %to_hex.exit.i + # in Loop: Header=BB4_3 Depth=1 + i32.const $push25=, .L.str + i32.add $push6=, $5, $pop25 + i32.load8_u $push7=, 0($pop6) + i32.const $push24=, 255 + i32.and $push5=, $3, $pop24 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label10 +# BB#5: # %if.end5.i + # in Loop: Header=BB4_3 Depth=1 + i32.const $push27=, 4 + i32.add $4=, $4, $pop27 + i32.load8_u $3=, 0($2) + i32.const $push26=, 1 + i32.add $push0=, $2, $pop26 + copy_local $2=, $pop0 + br_if 0, $3 # 0: up to label12 +.LBB4_6: # %fap.exit + end_loop + end_block # label11: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $6, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB4_7: # %if.then.i + end_block # label10: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end4: + .size f2, .Lfunc_end4-f2 + # -- End function + .section .text.f3,"ax",@progbits + .hidden f3 # -- Begin function f3 + .globl f3 + .type f3,@function +f3: # @f3 + .param i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $7=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($7), $4 + block + i32.call $push1=, strlen@FUNCTION, $3 + i32.const $push2=, 13 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label13 +# BB#1: # %if.end.i + block + i32.load8_u $push19=, 0($3) + tee_local $push18=, $4=, $pop19 + i32.eqz $push28=, $pop18 + br_if 0, $pop28 # 0: down to label14 +# BB#2: # %while.body.i.preheader + i32.const $push20=, 1 + i32.add $3=, $3, $pop20 + i32.load $5=, 12($7) +.LBB5_3: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label15: + i32.load $push23=, 0($5) + tee_local $push22=, $6=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label13 +# BB#4: # %to_hex.exit.i + # in Loop: Header=BB5_3 Depth=1 + i32.const $push25=, .L.str + i32.add $push6=, $6, $pop25 + i32.load8_u $push7=, 0($pop6) + i32.const $push24=, 255 + i32.and $push5=, $4, $pop24 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label13 +# BB#5: # %if.end5.i + # in Loop: Header=BB5_3 Depth=1 + i32.const $push27=, 4 + i32.add $5=, $5, $pop27 + i32.load8_u $4=, 0($3) + i32.const $push26=, 1 + i32.add $push0=, $3, $pop26 + copy_local $3=, $pop0 + br_if 0, $4 # 0: up to label15 +.LBB5_6: # %fap.exit + end_loop + end_block # label14: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $7, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB5_7: # %if.then.i + end_block # label13: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end5: + .size f3, .Lfunc_end5-f3 + # -- End function + .section .text.f4,"ax",@progbits + .hidden f4 # -- Begin function f4 + .globl f4 + .type f4,@function +f4: # @f4 + .param i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $8=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($8), $5 + block + i32.call $push1=, strlen@FUNCTION, $4 + i32.const $push2=, 12 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label16 +# BB#1: # %if.end.i + block + i32.load8_u $push19=, 0($4) + tee_local $push18=, $5=, $pop19 + i32.eqz $push28=, $pop18 + br_if 0, $pop28 # 0: down to label17 +# BB#2: # %while.body.i.preheader + i32.const $push20=, 1 + i32.add $4=, $4, $pop20 + i32.load $6=, 12($8) +.LBB6_3: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label18: + i32.load $push23=, 0($6) + tee_local $push22=, $7=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label16 +# BB#4: # %to_hex.exit.i + # in Loop: Header=BB6_3 Depth=1 + i32.const $push25=, .L.str + i32.add $push6=, $7, $pop25 + i32.load8_u $push7=, 0($pop6) + i32.const $push24=, 255 + i32.and $push5=, $5, $pop24 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label16 +# BB#5: # %if.end5.i + # in Loop: Header=BB6_3 Depth=1 + i32.const $push27=, 4 + i32.add $6=, $6, $pop27 + i32.load8_u $5=, 0($4) + i32.const $push26=, 1 + i32.add $push0=, $4, $pop26 + copy_local $4=, $pop0 + br_if 0, $5 # 0: up to label18 +.LBB6_6: # %fap.exit + end_loop + end_block # label17: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $8, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB6_7: # %if.then.i + end_block # label16: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end6: + .size f4, .Lfunc_end6-f4 + # -- End function + .section .text.f5,"ax",@progbits + .hidden f5 # -- Begin function f5 + .globl f5 + .type f5,@function +f5: # @f5 + .param i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $9=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($9), $6 + block + i32.call $push1=, strlen@FUNCTION, $5 + i32.const $push2=, 11 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label19 +# BB#1: # %if.end.i + block + i32.load8_u $push19=, 0($5) + tee_local $push18=, $6=, $pop19 + i32.eqz $push28=, $pop18 + br_if 0, $pop28 # 0: down to label20 +# BB#2: # %while.body.i.preheader + i32.const $push20=, 1 + i32.add $5=, $5, $pop20 + i32.load $7=, 12($9) +.LBB7_3: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label21: + i32.load $push23=, 0($7) + tee_local $push22=, $8=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label19 +# BB#4: # %to_hex.exit.i + # in Loop: Header=BB7_3 Depth=1 + i32.const $push25=, .L.str + i32.add $push6=, $8, $pop25 + i32.load8_u $push7=, 0($pop6) + i32.const $push24=, 255 + i32.and $push5=, $6, $pop24 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label19 +# BB#5: # %if.end5.i + # in Loop: Header=BB7_3 Depth=1 + i32.const $push27=, 4 + i32.add $7=, $7, $pop27 + i32.load8_u $6=, 0($5) + i32.const $push26=, 1 + i32.add $push0=, $5, $pop26 + copy_local $5=, $pop0 + br_if 0, $6 # 0: up to label21 +.LBB7_6: # %fap.exit + end_loop + end_block # label20: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $9, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB7_7: # %if.then.i + end_block # label19: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end7: + .size f5, .Lfunc_end7-f5 + # -- End function + .section .text.f6,"ax",@progbits + .hidden f6 # -- Begin function f6 + .globl f6 + .type f6,@function +f6: # @f6 + .param i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $10=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($10), $7 + block + i32.call $push1=, strlen@FUNCTION, $6 + i32.const $push2=, 10 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label22 +# BB#1: # %if.end.i + block + i32.load8_u $push19=, 0($6) + tee_local $push18=, $7=, $pop19 + i32.eqz $push28=, $pop18 + br_if 0, $pop28 # 0: down to label23 +# BB#2: # %while.body.i.preheader + i32.const $push20=, 1 + i32.add $6=, $6, $pop20 + i32.load $8=, 12($10) +.LBB8_3: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label24: + i32.load $push23=, 0($8) + tee_local $push22=, $9=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label22 +# BB#4: # %to_hex.exit.i + # in Loop: Header=BB8_3 Depth=1 + i32.const $push25=, .L.str + i32.add $push6=, $9, $pop25 + i32.load8_u $push7=, 0($pop6) + i32.const $push24=, 255 + i32.and $push5=, $7, $pop24 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label22 +# BB#5: # %if.end5.i + # in Loop: Header=BB8_3 Depth=1 + i32.const $push27=, 4 + i32.add $8=, $8, $pop27 + i32.load8_u $7=, 0($6) + i32.const $push26=, 1 + i32.add $push0=, $6, $pop26 + copy_local $6=, $pop0 + br_if 0, $7 # 0: up to label24 +.LBB8_6: # %fap.exit + end_loop + end_block # label23: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $10, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB8_7: # %if.then.i + end_block # label22: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end8: + .size f6, .Lfunc_end8-f6 + # -- End function + .section .text.f7,"ax",@progbits + .hidden f7 # -- Begin function f7 + .globl f7 + .type f7,@function +f7: # @f7 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $11=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($11), $8 + block + i32.call $push1=, strlen@FUNCTION, $7 + i32.const $push2=, 9 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label25 +# BB#1: # %if.end.i + block + i32.load8_u $push19=, 0($7) + tee_local $push18=, $8=, $pop19 + i32.eqz $push28=, $pop18 + br_if 0, $pop28 # 0: down to label26 +# BB#2: # %while.body.i.preheader + i32.const $push20=, 1 + i32.add $7=, $7, $pop20 + i32.load $9=, 12($11) +.LBB9_3: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label27: + i32.load $push23=, 0($9) + tee_local $push22=, $10=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label25 +# BB#4: # %to_hex.exit.i + # in Loop: Header=BB9_3 Depth=1 + i32.const $push25=, .L.str + i32.add $push6=, $10, $pop25 + i32.load8_u $push7=, 0($pop6) + i32.const $push24=, 255 + i32.and $push5=, $8, $pop24 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label25 +# BB#5: # %if.end5.i + # in Loop: Header=BB9_3 Depth=1 + i32.const $push27=, 4 + i32.add $9=, $9, $pop27 + i32.load8_u $8=, 0($7) + i32.const $push26=, 1 + i32.add $push0=, $7, $pop26 + copy_local $7=, $pop0 + br_if 0, $8 # 0: up to label27 +.LBB9_6: # %fap.exit + end_loop + end_block # label26: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $11, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB9_7: # %if.then.i + end_block # label25: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end9: + .size f7, .Lfunc_end9-f7 + # -- End function + .section .text.f8,"ax",@progbits + .hidden f8 # -- Begin function f8 + .globl f8 + .type f8,@function +f8: # @f8 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $12=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($12), $9 + block + i32.call $push1=, strlen@FUNCTION, $8 + i32.const $push2=, 8 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label28 +# BB#1: # %if.end.i + block + i32.load8_u $push19=, 0($8) + tee_local $push18=, $9=, $pop19 + i32.eqz $push28=, $pop18 + br_if 0, $pop28 # 0: down to label29 +# BB#2: # %while.body.i.preheader + i32.const $push20=, 1 + i32.add $8=, $8, $pop20 + i32.load $10=, 12($12) +.LBB10_3: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label30: + i32.load $push23=, 0($10) + tee_local $push22=, $11=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label28 +# BB#4: # %to_hex.exit.i + # in Loop: Header=BB10_3 Depth=1 + i32.const $push25=, .L.str + i32.add $push6=, $11, $pop25 + i32.load8_u $push7=, 0($pop6) + i32.const $push24=, 255 + i32.and $push5=, $9, $pop24 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label28 +# BB#5: # %if.end5.i + # in Loop: Header=BB10_3 Depth=1 + i32.const $push27=, 4 + i32.add $10=, $10, $pop27 + i32.load8_u $9=, 0($8) + i32.const $push26=, 1 + i32.add $push0=, $8, $pop26 + copy_local $8=, $pop0 + br_if 0, $9 # 0: up to label30 +.LBB10_6: # %fap.exit + end_loop + end_block # label29: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $12, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB10_7: # %if.then.i + end_block # label28: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end10: + .size f8, .Lfunc_end10-f8 + # -- End function + .section .text.f9,"ax",@progbits + .hidden f9 # -- Begin function f9 + .globl f9 + .type f9,@function +f9: # @f9 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $13=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($13), $10 + block + i32.call $push1=, strlen@FUNCTION, $9 + i32.const $push2=, 7 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label31 +# BB#1: # %if.end.i + block + i32.load8_u $push19=, 0($9) + tee_local $push18=, $10=, $pop19 + i32.eqz $push28=, $pop18 + br_if 0, $pop28 # 0: down to label32 +# BB#2: # %while.body.i.preheader + i32.const $push20=, 1 + i32.add $9=, $9, $pop20 + i32.load $11=, 12($13) +.LBB11_3: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label33: + i32.load $push23=, 0($11) + tee_local $push22=, $12=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label31 +# BB#4: # %to_hex.exit.i + # in Loop: Header=BB11_3 Depth=1 + i32.const $push25=, .L.str + i32.add $push6=, $12, $pop25 + i32.load8_u $push7=, 0($pop6) + i32.const $push24=, 255 + i32.and $push5=, $10, $pop24 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label31 +# BB#5: # %if.end5.i + # in Loop: Header=BB11_3 Depth=1 + i32.const $push27=, 4 + i32.add $11=, $11, $pop27 + i32.load8_u $10=, 0($9) + i32.const $push26=, 1 + i32.add $push0=, $9, $pop26 + copy_local $9=, $pop0 + br_if 0, $10 # 0: up to label33 +.LBB11_6: # %fap.exit + end_loop + end_block # label32: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $13, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB11_7: # %if.then.i + end_block # label31: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end11: + .size f9, .Lfunc_end11-f9 + # -- End function + .section .text.f10,"ax",@progbits + .hidden f10 # -- Begin function f10 + .globl f10 + .type f10,@function +f10: # @f10 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $14=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($14), $11 + block + i32.call $push1=, strlen@FUNCTION, $10 + i32.const $push2=, 6 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label34 +# BB#1: # %if.end.i + block + i32.load8_u $push19=, 0($10) + tee_local $push18=, $11=, $pop19 + i32.eqz $push28=, $pop18 + br_if 0, $pop28 # 0: down to label35 +# BB#2: # %while.body.i.preheader + i32.const $push20=, 1 + i32.add $10=, $10, $pop20 + i32.load $12=, 12($14) +.LBB12_3: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label36: + i32.load $push23=, 0($12) + tee_local $push22=, $13=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label34 +# BB#4: # %to_hex.exit.i + # in Loop: Header=BB12_3 Depth=1 + i32.const $push25=, .L.str + i32.add $push6=, $13, $pop25 + i32.load8_u $push7=, 0($pop6) + i32.const $push24=, 255 + i32.and $push5=, $11, $pop24 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label34 +# BB#5: # %if.end5.i + # in Loop: Header=BB12_3 Depth=1 + i32.const $push27=, 4 + i32.add $12=, $12, $pop27 + i32.load8_u $11=, 0($10) + i32.const $push26=, 1 + i32.add $push0=, $10, $pop26 + copy_local $10=, $pop0 + br_if 0, $11 # 0: up to label36 +.LBB12_6: # %fap.exit + end_loop + end_block # label35: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $14, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB12_7: # %if.then.i + end_block # label34: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end12: + .size f10, .Lfunc_end12-f10 + # -- End function + .section .text.f11,"ax",@progbits + .hidden f11 # -- Begin function f11 + .globl f11 + .type f11,@function +f11: # @f11 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $15=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($15), $12 + block + i32.call $push1=, strlen@FUNCTION, $11 + i32.const $push2=, 5 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label37 +# BB#1: # %if.end.i + block + i32.load8_u $push19=, 0($11) + tee_local $push18=, $12=, $pop19 + i32.eqz $push28=, $pop18 + br_if 0, $pop28 # 0: down to label38 +# BB#2: # %while.body.i.preheader + i32.const $push20=, 1 + i32.add $11=, $11, $pop20 + i32.load $13=, 12($15) +.LBB13_3: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label39: + i32.load $push23=, 0($13) + tee_local $push22=, $14=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label37 +# BB#4: # %to_hex.exit.i + # in Loop: Header=BB13_3 Depth=1 + i32.const $push25=, .L.str + i32.add $push6=, $14, $pop25 + i32.load8_u $push7=, 0($pop6) + i32.const $push24=, 255 + i32.and $push5=, $12, $pop24 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label37 +# BB#5: # %if.end5.i + # in Loop: Header=BB13_3 Depth=1 + i32.const $push27=, 4 + i32.add $13=, $13, $pop27 + i32.load8_u $12=, 0($11) + i32.const $push26=, 1 + i32.add $push0=, $11, $pop26 + copy_local $11=, $pop0 + br_if 0, $12 # 0: up to label39 +.LBB13_6: # %fap.exit + end_loop + end_block # label38: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $15, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB13_7: # %if.then.i + end_block # label37: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end13: + .size f11, .Lfunc_end13-f11 + # -- End function + .section .text.f12,"ax",@progbits + .hidden f12 # -- Begin function f12 + .globl f12 + .type f12,@function +f12: # @f12 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $16=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($16), $13 + block + i32.call $push1=, strlen@FUNCTION, $12 + i32.const $push2=, 4 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label40 +# BB#1: # %if.end.i + block + i32.load8_u $push19=, 0($12) + tee_local $push18=, $13=, $pop19 + i32.eqz $push28=, $pop18 + br_if 0, $pop28 # 0: down to label41 +# BB#2: # %while.body.i.preheader + i32.const $push20=, 1 + i32.add $12=, $12, $pop20 + i32.load $14=, 12($16) +.LBB14_3: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label42: + i32.load $push23=, 0($14) + tee_local $push22=, $15=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label40 +# BB#4: # %to_hex.exit.i + # in Loop: Header=BB14_3 Depth=1 + i32.const $push25=, .L.str + i32.add $push6=, $15, $pop25 + i32.load8_u $push7=, 0($pop6) + i32.const $push24=, 255 + i32.and $push5=, $13, $pop24 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label40 +# BB#5: # %if.end5.i + # in Loop: Header=BB14_3 Depth=1 + i32.const $push27=, 4 + i32.add $14=, $14, $pop27 + i32.load8_u $13=, 0($12) + i32.const $push26=, 1 + i32.add $push0=, $12, $pop26 + copy_local $12=, $pop0 + br_if 0, $13 # 0: up to label42 +.LBB14_6: # %fap.exit + end_loop + end_block # label41: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $16, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB14_7: # %if.then.i + end_block # label40: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end14: + .size f12, .Lfunc_end14-f12 + # -- End function + .section .text.f13,"ax",@progbits + .hidden f13 # -- Begin function f13 + .globl f13 + .type f13,@function +f13: # @f13 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $17=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($17), $14 + block + i32.call $push1=, strlen@FUNCTION, $13 + i32.const $push2=, 3 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label43 +# BB#1: # %if.end.i + block + i32.load8_u $push19=, 0($13) + tee_local $push18=, $14=, $pop19 + i32.eqz $push28=, $pop18 + br_if 0, $pop28 # 0: down to label44 +# BB#2: # %while.body.i.preheader + i32.const $push20=, 1 + i32.add $13=, $13, $pop20 + i32.load $15=, 12($17) +.LBB15_3: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label45: + i32.load $push23=, 0($15) + tee_local $push22=, $16=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label43 +# BB#4: # %to_hex.exit.i + # in Loop: Header=BB15_3 Depth=1 + i32.const $push25=, .L.str + i32.add $push6=, $16, $pop25 + i32.load8_u $push7=, 0($pop6) + i32.const $push24=, 255 + i32.and $push5=, $14, $pop24 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label43 +# BB#5: # %if.end5.i + # in Loop: Header=BB15_3 Depth=1 + i32.const $push27=, 4 + i32.add $15=, $15, $pop27 + i32.load8_u $14=, 0($13) + i32.const $push26=, 1 + i32.add $push0=, $13, $pop26 + copy_local $13=, $pop0 + br_if 0, $14 # 0: up to label45 +.LBB15_6: # %fap.exit + end_loop + end_block # label44: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $17, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB15_7: # %if.then.i + end_block # label43: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end15: + .size f13, .Lfunc_end15-f13 + # -- End function + .section .text.f14,"ax",@progbits + .hidden f14 # -- Begin function f14 + .globl f14 + .type f14,@function +f14: # @f14 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $18=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($18), $15 + block + i32.call $push1=, strlen@FUNCTION, $14 + i32.const $push2=, 2 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label46 +# BB#1: # %if.end.i + block + i32.load8_u $push19=, 0($14) + tee_local $push18=, $15=, $pop19 + i32.eqz $push28=, $pop18 + br_if 0, $pop28 # 0: down to label47 +# BB#2: # %while.body.i.preheader + i32.const $push20=, 1 + i32.add $14=, $14, $pop20 + i32.load $16=, 12($18) +.LBB16_3: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label48: + i32.load $push23=, 0($16) + tee_local $push22=, $17=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label46 +# BB#4: # %to_hex.exit.i + # in Loop: Header=BB16_3 Depth=1 + i32.const $push25=, .L.str + i32.add $push6=, $17, $pop25 + i32.load8_u $push7=, 0($pop6) + i32.const $push24=, 255 + i32.and $push5=, $15, $pop24 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label46 +# BB#5: # %if.end5.i + # in Loop: Header=BB16_3 Depth=1 + i32.const $push27=, 4 + i32.add $16=, $16, $pop27 + i32.load8_u $15=, 0($14) + i32.const $push26=, 1 + i32.add $push0=, $14, $pop26 + copy_local $14=, $pop0 + br_if 0, $15 # 0: up to label48 +.LBB16_6: # %fap.exit + end_loop + end_block # label47: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $18, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB16_7: # %if.then.i + end_block # label46: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end16: + .size f14, .Lfunc_end16-f14 + # -- End function + .section .text.f15,"ax",@progbits + .hidden f15 # -- Begin function f15 + .globl f15 + .type f15,@function +f15: # @f15 + .param i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 + .local i32, i32, i32 +# BB#0: # %entry + i32.const $push12=, 0 + i32.const $push10=, 0 + i32.load $push9=, __stack_pointer($pop10) + i32.const $push11=, 16 + i32.sub $push17=, $pop9, $pop11 + tee_local $push16=, $19=, $pop17 + i32.store __stack_pointer($pop12), $pop16 + i32.store 12($19), $16 + block + i32.call $push1=, strlen@FUNCTION, $15 + i32.const $push2=, 1 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label49 +# BB#1: # %if.end.i + block + i32.load8_u $push19=, 0($15) + tee_local $push18=, $16=, $pop19 + i32.eqz $push28=, $pop18 + br_if 0, $pop28 # 0: down to label50 +# BB#2: # %while.body.i.preheader + i32.const $push20=, 1 + i32.add $15=, $15, $pop20 + i32.load $17=, 12($19) +.LBB17_3: # %while.body.i + # =>This Inner Loop Header: Depth=1 + loop # label51: + i32.load $push23=, 0($17) + tee_local $push22=, $18=, $pop23 + i32.const $push21=, 16 + i32.ge_u $push4=, $pop22, $pop21 + br_if 2, $pop4 # 2: down to label49 +# BB#4: # %to_hex.exit.i + # in Loop: Header=BB17_3 Depth=1 + i32.const $push25=, .L.str + i32.add $push6=, $18, $pop25 + i32.load8_u $push7=, 0($pop6) + i32.const $push24=, 255 + i32.and $push5=, $16, $pop24 + i32.ne $push8=, $pop7, $pop5 + br_if 2, $pop8 # 2: down to label49 +# BB#5: # %if.end5.i + # in Loop: Header=BB17_3 Depth=1 + i32.const $push27=, 4 + i32.add $17=, $17, $pop27 + i32.load8_u $16=, 0($15) + i32.const $push26=, 1 + i32.add $push0=, $15, $pop26 + copy_local $15=, $pop0 + br_if 0, $16 # 0: up to label51 +.LBB17_6: # %fap.exit + end_loop + end_block # label50: + i32.const $push15=, 0 + i32.const $push13=, 16 + i32.add $push14=, $19, $pop13 + i32.store __stack_pointer($pop15), $pop14 + return +.LBB17_7: # %if.then.i + end_block # label49: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end17: + .size f15, .Lfunc_end17-f15 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push84=, 0 + i32.const $push82=, 0 + i32.load $push81=, __stack_pointer($pop82) + i32.const $push83=, 640 + i32.sub $push292=, $pop81, $pop83 + tee_local $push291=, $0=, $pop292 + i32.store __stack_pointer($pop84), $pop291 + i32.const $push85=, 576 + i32.add $push86=, $0, $pop85 + i32.const $push0=, 56 + i32.add $push1=, $pop86, $pop0 + i64.const $push2=, 64424509454 + i64.store 0($pop1), $pop2 + i32.const $push87=, 576 + i32.add $push88=, $0, $pop87 + i32.const $push3=, 48 + i32.add $push4=, $pop88, $pop3 + i64.const $push5=, 55834574860 + i64.store 0($pop4), $pop5 + i32.const $push89=, 576 + i32.add $push90=, $0, $pop89 + i32.const $push6=, 40 + i32.add $push7=, $pop90, $pop6 + i64.const $push8=, 47244640266 + i64.store 0($pop7), $pop8 + i32.const $push91=, 576 + i32.add $push92=, $0, $pop91 + i32.const $push9=, 32 + i32.add $push10=, $pop92, $pop9 + i64.const $push11=, 38654705672 + i64.store 0($pop10), $pop11 + i32.const $push93=, 576 + i32.add $push94=, $0, $pop93 + i32.const $push12=, 24 + i32.add $push13=, $pop94, $pop12 + i64.const $push14=, 30064771078 + i64.store 0($pop13), $pop14 + i32.const $push95=, 576 + i32.add $push96=, $0, $pop95 + i32.const $push15=, 16 + i32.add $push16=, $pop96, $pop15 + i64.const $push17=, 21474836484 + i64.store 0($pop16), $pop17 + i64.const $push18=, 12884901890 + i64.store 584($0), $pop18 + i64.const $push19=, 4294967296 + i64.store 576($0), $pop19 + i32.const $push20=, .L.str + i32.const $push97=, 576 + i32.add $push98=, $0, $pop97 + call f0@FUNCTION, $pop20, $pop98 + i32.const $push99=, 512 + i32.add $push100=, $0, $pop99 + i32.const $push290=, 56 + i32.add $push21=, $pop100, $pop290 + i32.const $push22=, 15 + i32.store 0($pop21), $pop22 + i32.const $push101=, 512 + i32.add $push102=, $0, $pop101 + i32.const $push289=, 48 + i32.add $push23=, $pop102, $pop289 + i64.const $push24=, 60129542157 + i64.store 0($pop23), $pop24 + i32.const $push103=, 512 + i32.add $push104=, $0, $pop103 + i32.const $push288=, 40 + i32.add $push25=, $pop104, $pop288 + i64.const $push26=, 51539607563 + i64.store 0($pop25), $pop26 + i32.const $push105=, 512 + i32.add $push106=, $0, $pop105 + i32.const $push287=, 32 + i32.add $push27=, $pop106, $pop287 + i64.const $push28=, 42949672969 + i64.store 0($pop27), $pop28 + i32.const $push107=, 512 + i32.add $push108=, $0, $pop107 + i32.const $push286=, 24 + i32.add $push29=, $pop108, $pop286 + i64.const $push30=, 34359738375 + i64.store 0($pop29), $pop30 + i32.const $push109=, 512 + i32.add $push110=, $0, $pop109 + i32.const $push285=, 16 + i32.add $push31=, $pop110, $pop285 + i64.const $push32=, 25769803781 + i64.store 0($pop31), $pop32 + i64.const $push33=, 17179869187 + i64.store 520($0), $pop33 + i64.const $push34=, 8589934593 + i64.store 512($0), $pop34 + i32.const $push35=, .L.str+1 + i32.const $push111=, 512 + i32.add $push112=, $0, $pop111 + call f1@FUNCTION, $0, $pop35, $pop112 + i32.const $push113=, 448 + i32.add $push114=, $0, $pop113 + i32.const $push284=, 48 + i32.add $push36=, $pop114, $pop284 + i64.const $push283=, 64424509454 + i64.store 0($pop36), $pop283 + i32.const $push115=, 448 + i32.add $push116=, $0, $pop115 + i32.const $push282=, 40 + i32.add $push37=, $pop116, $pop282 + i64.const $push281=, 55834574860 + i64.store 0($pop37), $pop281 + i32.const $push117=, 448 + i32.add $push118=, $0, $pop117 + i32.const $push280=, 32 + i32.add $push38=, $pop118, $pop280 + i64.const $push279=, 47244640266 + i64.store 0($pop38), $pop279 + i32.const $push119=, 448 + i32.add $push120=, $0, $pop119 + i32.const $push278=, 24 + i32.add $push39=, $pop120, $pop278 + i64.const $push277=, 38654705672 + i64.store 0($pop39), $pop277 + i32.const $push121=, 448 + i32.add $push122=, $0, $pop121 + i32.const $push276=, 16 + i32.add $push40=, $pop122, $pop276 + i64.const $push275=, 30064771078 + i64.store 0($pop40), $pop275 + i64.const $push274=, 21474836484 + i64.store 456($0), $pop274 + i64.const $push273=, 12884901890 + i64.store 448($0), $pop273 + i32.const $push41=, .L.str+2 + i32.const $push123=, 448 + i32.add $push124=, $0, $pop123 + call f2@FUNCTION, $0, $0, $pop41, $pop124 + i32.const $push125=, 384 + i32.add $push126=, $0, $pop125 + i32.const $push272=, 48 + i32.add $push42=, $pop126, $pop272 + i32.const $push271=, 15 + i32.store 0($pop42), $pop271 + i32.const $push127=, 384 + i32.add $push128=, $0, $pop127 + i32.const $push270=, 40 + i32.add $push43=, $pop128, $pop270 + i64.const $push269=, 60129542157 + i64.store 0($pop43), $pop269 + i32.const $push129=, 384 + i32.add $push130=, $0, $pop129 + i32.const $push268=, 32 + i32.add $push44=, $pop130, $pop268 + i64.const $push267=, 51539607563 + i64.store 0($pop44), $pop267 + i32.const $push131=, 384 + i32.add $push132=, $0, $pop131 + i32.const $push266=, 24 + i32.add $push45=, $pop132, $pop266 + i64.const $push265=, 42949672969 + i64.store 0($pop45), $pop265 + i32.const $push133=, 384 + i32.add $push134=, $0, $pop133 + i32.const $push264=, 16 + i32.add $push46=, $pop134, $pop264 + i64.const $push263=, 34359738375 + i64.store 0($pop46), $pop263 + i64.const $push262=, 25769803781 + i64.store 392($0), $pop262 + i64.const $push261=, 17179869187 + i64.store 384($0), $pop261 + i32.const $push47=, .L.str+3 + i32.const $push135=, 384 + i32.add $push136=, $0, $pop135 + call f3@FUNCTION, $0, $0, $0, $pop47, $pop136 + i32.const $push137=, 336 + i32.add $push138=, $0, $pop137 + i32.const $push260=, 40 + i32.add $push48=, $pop138, $pop260 + i64.const $push259=, 64424509454 + i64.store 0($pop48), $pop259 + i32.const $push139=, 336 + i32.add $push140=, $0, $pop139 + i32.const $push258=, 32 + i32.add $push49=, $pop140, $pop258 + i64.const $push257=, 55834574860 + i64.store 0($pop49), $pop257 + i32.const $push141=, 336 + i32.add $push142=, $0, $pop141 + i32.const $push256=, 24 + i32.add $push50=, $pop142, $pop256 + i64.const $push255=, 47244640266 + i64.store 0($pop50), $pop255 + i32.const $push143=, 336 + i32.add $push144=, $0, $pop143 + i32.const $push254=, 16 + i32.add $push51=, $pop144, $pop254 + i64.const $push253=, 38654705672 + i64.store 0($pop51), $pop253 + i64.const $push252=, 30064771078 + i64.store 344($0), $pop252 + i64.const $push251=, 21474836484 + i64.store 336($0), $pop251 + i32.const $push52=, .L.str+4 + i32.const $push145=, 336 + i32.add $push146=, $0, $pop145 + call f4@FUNCTION, $0, $0, $0, $0, $pop52, $pop146 + i32.const $push147=, 288 + i32.add $push148=, $0, $pop147 + i32.const $push250=, 40 + i32.add $push53=, $pop148, $pop250 + i32.const $push249=, 15 + i32.store 0($pop53), $pop249 + i32.const $push149=, 288 + i32.add $push150=, $0, $pop149 + i32.const $push248=, 32 + i32.add $push54=, $pop150, $pop248 + i64.const $push247=, 60129542157 + i64.store 0($pop54), $pop247 + i32.const $push151=, 288 + i32.add $push152=, $0, $pop151 + i32.const $push246=, 24 + i32.add $push55=, $pop152, $pop246 + i64.const $push245=, 51539607563 + i64.store 0($pop55), $pop245 + i32.const $push153=, 288 + i32.add $push154=, $0, $pop153 + i32.const $push244=, 16 + i32.add $push56=, $pop154, $pop244 + i64.const $push243=, 42949672969 + i64.store 0($pop56), $pop243 + i64.const $push242=, 34359738375 + i64.store 296($0), $pop242 + i64.const $push241=, 25769803781 + i64.store 288($0), $pop241 + i32.const $push57=, .L.str+5 + i32.const $push155=, 288 + i32.add $push156=, $0, $pop155 + call f5@FUNCTION, $0, $0, $0, $0, $0, $pop57, $pop156 + i32.const $push157=, 240 + i32.add $push158=, $0, $pop157 + i32.const $push240=, 32 + i32.add $push58=, $pop158, $pop240 + i64.const $push239=, 64424509454 + i64.store 0($pop58), $pop239 + i32.const $push159=, 240 + i32.add $push160=, $0, $pop159 + i32.const $push238=, 24 + i32.add $push59=, $pop160, $pop238 + i64.const $push237=, 55834574860 + i64.store 0($pop59), $pop237 + i32.const $push161=, 240 + i32.add $push162=, $0, $pop161 + i32.const $push236=, 16 + i32.add $push60=, $pop162, $pop236 + i64.const $push235=, 47244640266 + i64.store 0($pop60), $pop235 + i64.const $push234=, 38654705672 + i64.store 248($0), $pop234 + i64.const $push233=, 30064771078 + i64.store 240($0), $pop233 + i32.const $push61=, .L.str+6 + i32.const $push163=, 240 + i32.add $push164=, $0, $pop163 + call f6@FUNCTION, $0, $0, $0, $0, $0, $0, $pop61, $pop164 + i32.const $push165=, 192 + i32.add $push166=, $0, $pop165 + i32.const $push232=, 32 + i32.add $push62=, $pop166, $pop232 + i32.const $push231=, 15 + i32.store 0($pop62), $pop231 + i32.const $push167=, 192 + i32.add $push168=, $0, $pop167 + i32.const $push230=, 24 + i32.add $push63=, $pop168, $pop230 + i64.const $push229=, 60129542157 + i64.store 0($pop63), $pop229 + i32.const $push169=, 192 + i32.add $push170=, $0, $pop169 + i32.const $push228=, 16 + i32.add $push64=, $pop170, $pop228 + i64.const $push227=, 51539607563 + i64.store 0($pop64), $pop227 + i64.const $push226=, 42949672969 + i64.store 200($0), $pop226 + i64.const $push225=, 34359738375 + i64.store 192($0), $pop225 + i32.const $push65=, .L.str+7 + i32.const $push171=, 192 + i32.add $push172=, $0, $pop171 + call f7@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $pop65, $pop172 + i32.const $push173=, 160 + i32.add $push174=, $0, $pop173 + i32.const $push224=, 24 + i32.add $push66=, $pop174, $pop224 + i64.const $push223=, 64424509454 + i64.store 0($pop66), $pop223 + i32.const $push175=, 160 + i32.add $push176=, $0, $pop175 + i32.const $push222=, 16 + i32.add $push67=, $pop176, $pop222 + i64.const $push221=, 55834574860 + i64.store 0($pop67), $pop221 + i64.const $push220=, 47244640266 + i64.store 168($0), $pop220 + i64.const $push219=, 38654705672 + i64.store 160($0), $pop219 + i32.const $push68=, .L.str+8 + i32.const $push177=, 160 + i32.add $push178=, $0, $pop177 + call f8@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $pop68, $pop178 + i32.const $push179=, 128 + i32.add $push180=, $0, $pop179 + i32.const $push218=, 24 + i32.add $push69=, $pop180, $pop218 + i32.const $push217=, 15 + i32.store 0($pop69), $pop217 + i32.const $push181=, 128 + i32.add $push182=, $0, $pop181 + i32.const $push216=, 16 + i32.add $push70=, $pop182, $pop216 + i64.const $push215=, 60129542157 + i64.store 0($pop70), $pop215 + i64.const $push214=, 51539607563 + i64.store 136($0), $pop214 + i64.const $push213=, 42949672969 + i64.store 128($0), $pop213 + i32.const $push71=, .L.str+9 + i32.const $push183=, 128 + i32.add $push184=, $0, $pop183 + call f9@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop71, $pop184 + i32.const $push185=, 96 + i32.add $push186=, $0, $pop185 + i32.const $push212=, 16 + i32.add $push72=, $pop186, $pop212 + i64.const $push211=, 64424509454 + i64.store 0($pop72), $pop211 + i64.const $push210=, 55834574860 + i64.store 104($0), $pop210 + i64.const $push209=, 47244640266 + i64.store 96($0), $pop209 + i32.const $push73=, .L.str+10 + i32.const $push187=, 96 + i32.add $push188=, $0, $pop187 + call f10@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop73, $pop188 + i32.const $push189=, 64 + i32.add $push190=, $0, $pop189 + i32.const $push208=, 16 + i32.add $push74=, $pop190, $pop208 + i32.const $push207=, 15 + i32.store 0($pop74), $pop207 + i64.const $push206=, 60129542157 + i64.store 72($0), $pop206 + i64.const $push205=, 51539607563 + i64.store 64($0), $pop205 + i32.const $push75=, .L.str+11 + i32.const $push191=, 64 + i32.add $push192=, $0, $pop191 + call f11@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop75, $pop192 + i64.const $push204=, 64424509454 + i64.store 56($0), $pop204 + i64.const $push203=, 55834574860 + i64.store 48($0), $pop203 + i32.const $push76=, .L.str+12 + i32.const $push193=, 48 + i32.add $push194=, $0, $pop193 + call f12@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop76, $pop194 + i32.const $push202=, 15 + i32.store 40($0), $pop202 + i64.const $push201=, 60129542157 + i64.store 32($0), $pop201 + i32.const $push77=, .L.str+13 + i32.const $push195=, 32 + i32.add $push196=, $0, $pop195 + call f13@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop77, $pop196 + i64.const $push200=, 64424509454 + i64.store 16($0), $pop200 + i32.const $push78=, .L.str+14 + i32.const $push197=, 16 + i32.add $push198=, $0, $pop197 + call f14@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop78, $pop198 + i32.const $push199=, 15 + i32.store 0($0), $pop199 + i32.const $push79=, .L.str+15 + call f15@FUNCTION, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $0, $pop79, $0 + i32.const $push80=, 0 + call exit@FUNCTION, $pop80 + unreachable + .endfunc +.Lfunc_end18: + .size main, .Lfunc_end18-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.16,"aMS",@progbits,1 + .p2align 4 +.L.str: + .asciz "0123456789abcdef" + .size .L.str, 17 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype strlen, i32, i32 + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/va-arg-pack-1.c.s b/src/binaryen/test/torture-s/va-arg-pack-1.c.s new file mode 100644 index 0000000000..ea627140be --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-pack-1.c.s @@ -0,0 +1,620 @@ + .text + .file "va-arg-pack-1.c" + .section .text.foo1,"ax",@progbits + .hidden foo1 # -- Begin function foo1 + .globl foo1 + .type foo1,@function +foo1: # @foo1 + .param i32, i32, i32 + .result i32 + .local i32, i64, i64, i32 +# BB#0: # %entry + i32.const $push71=, 0 + i32.const $push69=, 0 + i32.load $push68=, __stack_pointer($pop69) + i32.const $push70=, 32 + i32.sub $push80=, $pop68, $pop70 + tee_local $push79=, $6=, $pop80 + i32.store __stack_pointer($pop71), $pop79 + i32.store 12($6), $2 + block + i32.const $push0=, 19 + i32.gt_u $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %lor.lhs.false3 + i32.const $push2=, seen + i32.add $push82=, $0, $pop2 + tee_local $push81=, $2=, $pop82 + i32.load8_u $push3=, 0($pop81) + br_if 0, $pop3 # 0: down to label0 +# BB#2: # %if.end + i32.const $push4=, 0 + i32.load $push5=, cnt($pop4) + i32.const $push6=, 1 + i32.add $push85=, $pop5, $pop6 + tee_local $push84=, $3=, $pop85 + i32.store8 0($2), $pop84 + i32.const $push83=, 0 + i32.store cnt($pop83), $3 + i32.const $push7=, 6 + i32.ne $push8=, $1, $pop7 + br_if 0, $pop8 # 0: down to label0 +# BB#3: # %if.end9 + i32.load $push89=, 12($6) + tee_local $push88=, $1=, $pop89 + i32.const $push9=, 4 + i32.add $push87=, $pop88, $pop9 + tee_local $push86=, $2=, $pop87 + i32.store 12($6), $pop86 + i32.load $push10=, 0($1) + i32.const $push11=, 5 + i32.ne $push12=, $pop10, $pop11 + br_if 0, $pop12 # 0: down to label0 +# BB#4: # %if.end13 + block + i32.const $push13=, 2 + i32.eq $push14=, $0, $pop13 + br_if 0, $pop14 # 0: down to label1 +# BB#5: # %if.end13 + block + i32.const $push15=, 1 + i32.eq $push16=, $0, $pop15 + br_if 0, $pop16 # 0: down to label2 +# BB#6: # %if.end13 + br_if 2, $0 # 2: down to label0 +# BB#7: # %sw.bb + i32.const $push41=, 8 + i32.add $push92=, $1, $pop41 + tee_local $push91=, $2=, $pop92 + i32.store 12($6), $pop91 + i32.const $push42=, 4 + i32.add $push43=, $1, $pop42 + i32.load $push44=, 0($pop43) + i32.const $push90=, 9 + i32.ne $push45=, $pop44, $pop90 + br_if 2, $pop45 # 2: down to label0 +# BB#8: # %sw.bb + i32.const $push46=, 0 + i32.load $push40=, v1($pop46) + i32.const $push93=, 9 + i32.ne $push47=, $pop40, $pop93 + br_if 2, $pop47 # 2: down to label0 +# BB#9: # %if.end22 + i32.const $push75=, 16 + i32.add $push76=, $6, $pop75 + i32.const $push48=, 8 + i32.add $push51=, $pop76, $pop48 + i32.const $push97=, 8 + i32.add $push49=, $2, $pop97 + i64.load $push50=, 0($pop49):p2align=0 + i64.store 0($pop51), $pop50 + i64.load $push52=, 0($2):p2align=0 + i64.store 16($6), $pop52 + i32.const $push53=, 24 + i32.add $push96=, $1, $pop53 + tee_local $push95=, $2=, $pop96 + i32.store 12($6), $pop95 + i32.const $push77=, 16 + i32.add $push78=, $6, $pop77 + i32.const $push94=, v4 + i32.const $push54=, 16 + i32.call $push55=, memcmp@FUNCTION, $pop78, $pop94, $pop54 + br_if 2, $pop55 # 2: down to label0 +# BB#10: # %if.end28 + i32.const $push56=, 28 + i32.add $push100=, $1, $pop56 + tee_local $push99=, $3=, $pop100 + i32.store 12($6), $pop99 + i32.load $push57=, 0($2) + i32.const $push98=, v4 + i32.ne $push58=, $pop57, $pop98 + br_if 2, $pop58 # 2: down to label0 +# BB#11: # %if.end34 + i32.const $push60=, 32 + i32.add $push61=, $1, $pop60 + i32.store 12($6), $pop61 + i32.load $push62=, 0($3) + i32.const $push63=, 3 + i32.ne $push64=, $pop62, $pop63 + br_if 2, $pop64 # 2: down to label0 +# BB#12: # %if.end34 + i32.const $push65=, 0 + i32.load $push59=, v2($pop65) + i32.const $push66=, 4 + i32.eq $push67=, $pop59, $pop66 + br_if 1, $pop67 # 1: down to label1 + br 2 # 2: down to label0 +.LBB0_13: # %sw.bb44 + end_block # label2: + i32.const $push19=, 15 + i32.add $push20=, $2, $pop19 + i32.const $push21=, -16 + i32.and $push106=, $pop20, $pop21 + tee_local $push105=, $1=, $pop106 + i32.const $push22=, 16 + i32.add $push23=, $pop105, $pop22 + i32.store 12($6), $pop23 + i64.load $push104=, 0($1) + tee_local $push103=, $4=, $pop104 + i64.load $push102=, 8($1) + tee_local $push101=, $5=, $pop102 + i64.const $push25=, 0 + i64.const $push24=, 4612891083171430400 + i32.call $push26=, __netf2@FUNCTION, $pop103, $pop101, $pop25, $pop24 + br_if 1, $pop26 # 1: down to label0 +# BB#14: # %sw.bb44 + i32.const $push27=, 0 + i64.load $push17=, v5($pop27) + i32.const $push107=, 0 + i64.load $push18=, v5+8($pop107) + i32.call $push28=, __eqtf2@FUNCTION, $pop17, $pop18, $4, $5 + br_if 1, $pop28 # 1: down to label0 +# BB#15: # %if.end53 + i32.const $push29=, 20 + i32.add $push109=, $1, $pop29 + tee_local $push108=, $2=, $pop109 + i32.store 12($6), $pop108 + i32.const $push30=, 16 + i32.add $push31=, $1, $pop30 + i32.load $push32=, 0($pop31) + i32.const $push33=, 8 + i32.ne $push34=, $pop32, $pop33 + br_if 1, $pop34 # 1: down to label0 +# BB#16: # %if.end59 + i32.const $push35=, 24 + i32.add $push36=, $1, $pop35 + i32.store 12($6), $pop36 + i32.load $push37=, 0($2) + i32.const $push38=, v2 + i32.ne $push39=, $pop37, $pop38 + br_if 1, $pop39 # 1: down to label0 +.LBB0_17: # %sw.epilog + end_block # label1: + i32.const $push74=, 0 + i32.const $push72=, 32 + i32.add $push73=, $6, $pop72 + i32.store __stack_pointer($pop74), $pop73 + return $0 +.LBB0_18: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size foo1, .Lfunc_end0-foo1 + # -- End function + .section .text.foo2,"ax",@progbits + .hidden foo2 # -- Begin function foo2 + .globl foo2 + .type foo2,@function +foo2: # @foo2 + .param i32, i32, i32 + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push60=, 0 + i32.const $push58=, 0 + i32.load $push57=, __stack_pointer($pop58) + i32.const $push59=, 48 + i32.sub $push73=, $pop57, $pop59 + tee_local $push72=, $4=, $pop73 + i32.store __stack_pointer($pop60), $pop72 + i32.store 12($4), $2 + block + i32.const $push0=, 19 + i32.gt_u $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label3 +# BB#1: # %lor.lhs.false3 + i32.const $push2=, seen + i32.add $push75=, $0, $pop2 + tee_local $push74=, $2=, $pop75 + i32.load8_u $push3=, 0($pop74) + br_if 0, $pop3 # 0: down to label3 +# BB#2: # %if.end + i32.const $push4=, 0 + i32.const $push78=, 0 + i32.load $push5=, cnt($pop78) + i32.const $push6=, 1 + i32.add $push77=, $pop5, $pop6 + tee_local $push76=, $3=, $pop77 + i32.store cnt($pop4), $pop76 + i32.const $push7=, 64 + i32.or $push8=, $3, $pop7 + i32.store8 0($2), $pop8 + i32.const $push9=, 10 + i32.ne $push10=, $1, $pop9 + br_if 0, $pop10 # 0: down to label3 +# BB#3: # %if.end9 + block + i32.const $push11=, 2 + i32.eq $push12=, $0, $pop11 + br_if 0, $pop12 # 0: down to label4 +# BB#4: # %if.end9 + i32.const $push13=, 11 + i32.eq $push14=, $0, $pop13 + br_if 0, $pop14 # 0: down to label4 +# BB#5: # %if.end9 + i32.const $push15=, 12 + i32.ne $push16=, $0, $pop15 + br_if 1, $pop16 # 1: down to label3 +# BB#6: # %sw.bb + i32.load $push20=, 12($4) + i32.const $push19=, 15 + i32.add $push21=, $pop20, $pop19 + i32.const $push22=, -16 + i32.and $push83=, $pop21, $pop22 + tee_local $push82=, $1=, $pop83 + i32.const $push23=, 16 + i32.add $push81=, $pop82, $pop23 + tee_local $push80=, $2=, $pop81 + i32.store 12($4), $pop80 + i64.load $push25=, 0($1) + i64.load $push24=, 8($1) + i64.const $push79=, 0 + i64.const $push26=, 4612891083171430400 + i32.call $push27=, __netf2@FUNCTION, $pop25, $pop24, $pop79, $pop26 + br_if 1, $pop27 # 1: down to label3 +# BB#7: # %sw.bb + i32.const $push28=, 0 + i64.load $push17=, v5($pop28) + i32.const $push85=, 0 + i64.load $push18=, v5+8($pop85) + i64.const $push84=, 0 + i64.const $push29=, 4612882287078408192 + i32.call $push30=, __eqtf2@FUNCTION, $pop17, $pop18, $pop84, $pop29 + br_if 1, $pop30 # 1: down to label3 +# BB#8: # %if.end16 + i32.const $push64=, 32 + i32.add $push65=, $4, $pop64 + i32.const $push91=, 8 + i32.add $push33=, $pop65, $pop91 + i32.const $push90=, 8 + i32.add $push31=, $2, $pop90 + i64.load $push32=, 0($pop31):p2align=0 + i64.store 0($pop33), $pop32 + i64.load $push34=, 0($2):p2align=0 + i64.store 32($4), $pop34 + i32.const $push35=, 32 + i32.add $push89=, $1, $pop35 + tee_local $push88=, $2=, $pop89 + i32.store 12($4), $pop88 + i32.const $push66=, 32 + i32.add $push67=, $4, $pop66 + i32.const $push87=, v4 + i32.const $push86=, 16 + i32.call $push36=, memcmp@FUNCTION, $pop67, $pop87, $pop86 + br_if 1, $pop36 # 1: down to label3 +# BB#9: # %if.end22 + i32.const $push68=, 16 + i32.add $push69=, $4, $pop68 + i32.const $push97=, 8 + i32.add $push39=, $pop69, $pop97 + i32.const $push96=, 8 + i32.add $push37=, $2, $pop96 + i64.load $push38=, 0($pop37):p2align=0 + i64.store 0($pop39), $pop38 + i64.load $push40=, 0($2):p2align=0 + i64.store 16($4), $pop40 + i32.const $push41=, 48 + i32.add $push95=, $1, $pop41 + tee_local $push94=, $2=, $pop95 + i32.store 12($4), $pop94 + i32.const $push70=, 16 + i32.add $push71=, $4, $pop70 + i32.const $push93=, v4 + i32.const $push92=, 16 + i32.call $push42=, memcmp@FUNCTION, $pop71, $pop93, $pop92 + br_if 1, $pop42 # 1: down to label3 +# BB#10: # %if.end31 + i32.const $push43=, 52 + i32.add $push99=, $1, $pop43 + tee_local $push98=, $1=, $pop99 + i32.store 12($4), $pop98 + i32.load $push44=, 0($2) + i32.const $push45=, v2 + i32.ne $push46=, $pop44, $pop45 + br_if 1, $pop46 # 1: down to label3 +# BB#11: # %if.end37 + i32.const $push47=, 7 + i32.add $push48=, $1, $pop47 + i32.const $push49=, -8 + i32.and $push101=, $pop48, $pop49 + tee_local $push100=, $1=, $pop101 + i32.const $push50=, 8 + i32.add $push51=, $pop100, $pop50 + i32.store 12($4), $pop51 + i64.load $push52=, 0($1) + i64.const $push53=, 16 + i64.ne $push54=, $pop52, $pop53 + br_if 1, $pop54 # 1: down to label3 +.LBB1_12: # %sw.epilog + end_block # label4: + i32.const $push63=, 0 + i32.const $push61=, 48 + i32.add $push62=, $4, $pop61 + i32.store __stack_pointer($pop63), $pop62 + i32.const $push55=, 8 + i32.add $push56=, $0, $pop55 + return $pop56 +.LBB1_13: # %if.then + end_block # label3: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size foo2, .Lfunc_end1-foo2 + # -- End function + .section .text.foo3,"ax",@progbits + .hidden foo3 # -- Begin function foo3 + .globl foo3 + .type foo3,@function +foo3: # @foo3 + .result i32 +# BB#0: # %entry + i32.const $push0=, 6 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end2: + .size foo3, .Lfunc_end2-foo3 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i64, i64, i64, i32 +# BB#0: # %entry + i32.const $push52=, 0 + i32.const $push50=, 0 + i32.load $push49=, __stack_pointer($pop50) + i32.const $push51=, 176 + i32.sub $push95=, $pop49, $pop51 + tee_local $push94=, $5=, $pop95 + i32.store __stack_pointer($pop52), $pop94 + i32.const $push56=, 160 + i32.add $push57=, $5, $pop56 + i32.const $push93=, 8 + i32.add $push1=, $pop57, $pop93 + i32.const $push92=, 0 + i64.load $push0=, v4+8($pop92):p2align=0 + i64.store 0($pop1), $pop0 + i32.const $push91=, 0 + i32.const $push90=, 0 + i32.load $push2=, v1($pop90) + i32.const $push89=, 1 + i32.add $push88=, $pop2, $pop89 + tee_local $push87=, $0=, $pop88 + i32.store v1($pop91), $pop87 + i32.const $push86=, 0 + i32.const $push85=, 0 + i32.load $push84=, v2($pop85) + tee_local $push83=, $1=, $pop84 + i32.const $push82=, 1 + i32.add $push3=, $pop83, $pop82 + i32.store v2($pop86), $pop3 + i32.const $push4=, v4 + i32.store 152($5), $pop4 + i32.const $push81=, 0 + i64.load $push5=, v4($pop81):p2align=0 + i64.store 160($5), $pop5 + i32.store 156($5), $1 + i32.store 144($5), $0 + i32.const $push58=, 160 + i32.add $push59=, $5, $pop58 + i32.store 148($5), $pop59 + block + i32.const $push80=, 0 + i32.const $push60=, 144 + i32.add $push61=, $5, $pop60 + i32.call $push6=, bar@FUNCTION, $pop80, $pop61 + br_if 0, $pop6 # 0: down to label5 +# BB#1: # %if.end + i32.const $push62=, 96 + i32.add $push63=, $5, $pop62 + i32.const $push108=, 0 + i64.load $push8=, v5($pop108) + i32.const $push107=, 0 + i64.load $push7=, v5+8($pop107) + i64.const $push10=, 0 + i64.const $push9=, 4611404543450677248 + call __addtf3@FUNCTION, $pop63, $pop8, $pop7, $pop10, $pop9 + i32.const $push12=, 132 + i32.add $push13=, $5, $pop12 + i32.const $push106=, 0 + i32.load $push11=, v3($pop106) + i32.store 0($pop13), $pop11 + i32.const $push14=, 128 + i32.add $push15=, $5, $pop14 + i32.const $push105=, 8 + i32.store 0($pop15), $pop105 + i32.const $push104=, 0 + i32.const $push64=, 96 + i32.add $push65=, $5, $pop64 + i32.const $push103=, 8 + i32.add $push16=, $pop65, $pop103 + i64.load $push102=, 0($pop16) + tee_local $push101=, $2=, $pop102 + i64.store v5+8($pop104), $pop101 + i32.const $push100=, 0 + i64.load $push99=, 96($5) + tee_local $push98=, $3=, $pop99 + i64.store v5($pop100), $pop98 + i64.store 120($5), $2 + i64.store 112($5), $3 + i32.const $push97=, 1 + i32.const $push66=, 112 + i32.add $push67=, $5, $pop66 + i32.call $push17=, bar@FUNCTION, $pop97, $pop67 + i32.const $push96=, 1 + i32.ne $push18=, $pop17, $pop96 + br_if 0, $pop18 # 0: down to label5 +# BB#2: # %if.end6 + i32.const $push111=, 2 + i32.const $push110=, 0 + i32.call $push19=, bar@FUNCTION, $pop111, $pop110 + i32.const $push109=, 2 + i32.ne $push20=, $pop19, $pop109 + br_if 0, $pop20 # 0: down to label5 +# BB#3: # %if.end10 + i32.const $push114=, 0 + i32.load $push21=, v1($pop114) + i32.const $push113=, 2 + i32.add $push22=, $pop21, $pop113 + i32.const $push112=, 0 + i32.call $push23=, bar@FUNCTION, $pop22, $pop112 + i32.const $push24=, 19 + i32.ne $push25=, $pop23, $pop24 + br_if 0, $pop25 # 0: down to label5 +# BB#4: # %if.end14 + i32.const $push133=, 0 + i64.load $push132=, v5($pop133) + tee_local $push131=, $2=, $pop132 + i32.const $push130=, 0 + i64.load $push129=, v5+8($pop130) + tee_local $push128=, $3=, $pop129 + i64.const $push27=, 0 + i64.const $push26=, -4611967493404098560 + call __addtf3@FUNCTION, $5, $pop131, $pop128, $pop27, $pop26 + i32.const $push68=, 80 + i32.add $push69=, $5, $pop68 + i32.const $push28=, 8 + i32.add $push29=, $pop69, $pop28 + i32.const $push127=, 0 + i64.load $push126=, v4+8($pop127):p2align=0 + tee_local $push125=, $4=, $pop126 + i64.store 0($pop29), $pop125 + i32.const $push70=, 64 + i32.add $push71=, $5, $pop70 + i32.const $push124=, 8 + i32.add $push30=, $pop71, $pop124 + i64.store 0($pop30), $4 + i32.const $push31=, 48 + i32.add $push32=, $5, $pop31 + i64.const $push33=, 16 + i64.store 0($pop32), $pop33 + i32.const $push35=, 40 + i32.add $push36=, $5, $pop35 + i32.const $push123=, 0 + i32.load $push34=, v3($pop123) + i32.store 0($pop36), $pop34 + i32.const $push122=, 0 + i32.const $push121=, 8 + i32.add $push37=, $5, $pop121 + i64.load $push38=, 0($pop37) + i64.store v5+8($pop122), $pop38 + i32.const $push120=, 0 + i64.load $push39=, 0($5) + i64.store v5($pop120), $pop39 + i32.const $push119=, 0 + i64.load $push118=, v4($pop119):p2align=0 + tee_local $push117=, $4=, $pop118 + i64.store 80($5), $pop117 + i64.store 64($5), $4 + i32.const $push72=, 16 + i32.add $push73=, $5, $pop72 + i32.const $push40=, 20 + i32.add $push41=, $pop73, $pop40 + i32.const $push74=, 64 + i32.add $push75=, $5, $pop74 + i32.store 0($pop41), $pop75 + i32.const $push42=, 32 + i32.add $push43=, $5, $pop42 + i32.const $push76=, 80 + i32.add $push77=, $5, $pop76 + i32.store 0($pop43), $pop77 + i64.store 24($5), $3 + i64.store 16($5), $2 + i32.const $push116=, 0 + i32.load $push44=, v1($pop116) + i32.const $push45=, 3 + i32.add $push46=, $pop44, $pop45 + i32.const $push78=, 16 + i32.add $push79=, $5, $pop78 + i32.call $push47=, bar@FUNCTION, $pop46, $pop79 + i32.const $push115=, 20 + i32.ne $push48=, $pop47, $pop115 + br_if 0, $pop48 # 0: down to label5 +# BB#5: # %if.end19 + i32.const $push55=, 0 + i32.const $push53=, 176 + i32.add $push54=, $5, $pop53 + i32.store __stack_pointer($pop55), $pop54 + i32.const $push134=, 0 + return $pop134 +.LBB3_6: # %if.then + end_block # label5: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end3: + .size main, .Lfunc_end3-main + # -- End function + .hidden v1 # @v1 + .type v1,@object + .section .data.v1,"aw",@progbits + .globl v1 + .p2align 2 +v1: + .int32 8 # 0x8 + .size v1, 4 + + .hidden v2 # @v2 + .type v2,@object + .section .data.v2,"aw",@progbits + .globl v2 + .p2align 2 +v2: + .int32 3 # 0x3 + .size v2, 4 + + .hidden v3 # @v3 + .type v3,@object + .section .data.v3,"aw",@progbits + .globl v3 + .p2align 2 +v3: + .int32 v2 + .size v3, 4 + + .hidden v4 # @v4 + .type v4,@object + .section .data.v4,"aw",@progbits + .globl v4 +v4: + .asciz "foo\000\000\000\000\000\000\000\000\000\000\000\000" + .size v4, 16 + + .hidden v5 # @v5 + .type v5,@object + .section .data.v5,"aw",@progbits + .globl v5 + .p2align 4 +v5: + .int64 0 # fp128 40 + .int64 4612882287078408192 + .size v5, 16 + + .hidden seen # @seen + .type seen,@object + .section .bss.seen,"aw",@nobits + .globl seen + .p2align 4 +seen: + .skip 20 + .size seen, 20 + + .hidden cnt # @cnt + .type cnt,@object + .section .bss.cnt,"aw",@nobits + .globl cnt + .p2align 2 +cnt: + .int32 0 # 0x0 + .size cnt, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype memcmp, i32, i32, i32, i32 + .functype bar, i32, i32 diff --git a/src/binaryen/test/torture-s/va-arg-trap-1.c.s b/src/binaryen/test/torture-s/va-arg-trap-1.c.s new file mode 100644 index 0000000000..81e9d7d88d --- /dev/null +++ b/src/binaryen/test/torture-s/va-arg-trap-1.c.s @@ -0,0 +1,75 @@ + .text + .file "va-arg-trap-1.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.bar,"ax",@progbits + .hidden bar # -- Begin function bar + .globl bar + .type bar,@function +bar: # @bar + .param i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.store ap($pop0), $1 + i32.call $drop=, foo@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size bar, .Lfunc_end1-bar + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push2=, 0 + i32.load $push1=, __stack_pointer($pop2) + i32.const $push3=, 16 + i32.sub $push6=, $pop1, $pop3 + tee_local $push5=, $0=, $pop6 + i32.store __stack_pointer($pop4), $pop5 + i32.const $push0=, 0 + i32.store 0($0), $pop0 + call bar@FUNCTION, $0, $0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden ap # @ap + .type ap,@object + .section .bss.ap,"aw",@nobits + .globl ap + .p2align 2 +ap: + .int32 0 + .size ap, 4 + + .hidden f # @f + .type f,@object + .section .bss.f,"aw",@nobits + .globl f + .p2align 2 +f: + .int32 0 # float 0 + .size f, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/vfprintf-1.c.s b/src/binaryen/test/torture-s/vfprintf-1.c.s new file mode 100644 index 0000000000..f55d5db4d8 --- /dev/null +++ b/src/binaryen/test/torture-s/vfprintf-1.c.s @@ -0,0 +1,348 @@ + .text + .file "vfprintf-1.c" + .section .text.inner,"ax",@progbits + .hidden inner # -- Begin function inner + .globl inner + .type inner,@function +inner: # @inner + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push78=, 0 + i32.const $push76=, 0 + i32.load $push75=, __stack_pointer($pop76) + i32.const $push77=, 16 + i32.sub $push83=, $pop75, $pop77 + tee_local $push82=, $2=, $pop83 + i32.store __stack_pointer($pop78), $pop82 + i32.store 8($2), $1 + i32.store 12($2), $1 + block + i32.const $push0=, 10 + i32.gt_u $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %entry + block + block + block + block + block + block + block + block + block + block + block + block + br_table $0, 0, 3, 4, 5, 1, 7, 8, 6, 9, 2, 10, 0 # 0: down to label12 + # 3: down to label9 + # 4: down to label8 + # 5: down to label7 + # 1: down to label11 + # 7: down to label5 + # 8: down to label4 + # 6: down to label6 + # 9: down to label3 + # 2: down to label10 + # 10: down to label2 +.LBB0_2: # %sw.bb + end_block # label12: + i32.const $push68=, 0 + i32.load $push86=, stdout($pop68) + tee_local $push85=, $0=, $pop86 + i32.const $push70=, .L.str + i32.load $push69=, 12($2) + i32.call $drop=, vfprintf@FUNCTION, $pop85, $pop70, $pop69 + i32.const $push84=, .L.str + i32.load $push71=, 8($2) + i32.call $push72=, vfprintf@FUNCTION, $0, $pop84, $pop71 + i32.const $push73=, 5 + i32.eq $push74=, $pop72, $pop73 + br_if 10, $pop74 # 10: down to label1 + br 11 # 11: down to label0 +.LBB0_3: # %sw.bb22 + end_block # label11: + i32.const $push42=, 0 + i32.load $push89=, stdout($pop42) + tee_local $push88=, $0=, $pop89 + i32.const $push44=, .L.str.4 + i32.load $push43=, 12($2) + i32.call $drop=, vfprintf@FUNCTION, $pop88, $pop44, $pop43 + i32.const $push87=, .L.str.4 + i32.load $push45=, 8($2) + i32.call $push46=, vfprintf@FUNCTION, $0, $pop87, $pop45 + i32.const $push47=, 5 + i32.eq $push48=, $pop46, $pop47 + br_if 9, $pop48 # 9: down to label1 + br 10 # 10: down to label0 +.LBB0_4: # %sw.bb52 + end_block # label10: + i32.const $push9=, 0 + i32.load $push92=, stdout($pop9) + tee_local $push91=, $0=, $pop92 + i32.const $push11=, .L.str.6 + i32.load $push10=, 12($2) + i32.call $drop=, vfprintf@FUNCTION, $pop91, $pop11, $pop10 + i32.const $push90=, .L.str.6 + i32.load $push12=, 8($2) + i32.call $push13=, vfprintf@FUNCTION, $0, $pop90, $pop12 + i32.const $push14=, 7 + i32.ne $push15=, $pop13, $pop14 + br_if 9, $pop15 # 9: down to label0 + br 8 # 8: down to label1 +.LBB0_5: # %sw.bb4 + end_block # label9: + i32.const $push61=, 0 + i32.load $push95=, stdout($pop61) + tee_local $push94=, $0=, $pop95 + i32.const $push63=, .L.str.1 + i32.load $push62=, 12($2) + i32.call $drop=, vfprintf@FUNCTION, $pop94, $pop63, $pop62 + i32.const $push93=, .L.str.1 + i32.load $push64=, 8($2) + i32.call $push65=, vfprintf@FUNCTION, $0, $pop93, $pop64 + i32.const $push66=, 6 + i32.eq $push67=, $pop65, $pop66 + br_if 7, $pop67 # 7: down to label1 + br 8 # 8: down to label0 +.LBB0_6: # %sw.bb10 + end_block # label8: + i32.const $push54=, 0 + i32.load $push98=, stdout($pop54) + tee_local $push97=, $0=, $pop98 + i32.const $push56=, .L.str.2 + i32.load $push55=, 12($2) + i32.call $drop=, vfprintf@FUNCTION, $pop97, $pop56, $pop55 + i32.const $push96=, .L.str.2 + i32.load $push57=, 8($2) + i32.call $push58=, vfprintf@FUNCTION, $0, $pop96, $pop57 + i32.const $push59=, 1 + i32.eq $push60=, $pop58, $pop59 + br_if 6, $pop60 # 6: down to label1 + br 7 # 7: down to label0 +.LBB0_7: # %sw.bb16 + end_block # label7: + i32.const $push49=, 0 + i32.load $push101=, stdout($pop49) + tee_local $push100=, $0=, $pop101 + i32.const $push51=, .L.str.3 + i32.load $push50=, 12($2) + i32.call $drop=, vfprintf@FUNCTION, $pop100, $pop51, $pop50 + i32.const $push99=, .L.str.3 + i32.load $push52=, 8($2) + i32.call $push53=, vfprintf@FUNCTION, $0, $pop99, $pop52 + i32.eqz $push117=, $pop53 + br_if 5, $pop117 # 5: down to label1 + br 6 # 6: down to label0 +.LBB0_8: # %sw.bb40 + end_block # label6: + i32.const $push23=, 0 + i32.load $push104=, stdout($pop23) + tee_local $push103=, $0=, $pop104 + i32.const $push25=, .L.str.4 + i32.load $push24=, 12($2) + i32.call $drop=, vfprintf@FUNCTION, $pop103, $pop25, $pop24 + i32.const $push102=, .L.str.4 + i32.load $push26=, 8($2) + i32.call $push27=, vfprintf@FUNCTION, $0, $pop102, $pop26 + i32.eqz $push118=, $pop27 + br_if 4, $pop118 # 4: down to label1 + br 5 # 5: down to label0 +.LBB0_9: # %sw.bb28 + end_block # label5: + i32.const $push35=, 0 + i32.load $push107=, stdout($pop35) + tee_local $push106=, $0=, $pop107 + i32.const $push37=, .L.str.4 + i32.load $push36=, 12($2) + i32.call $drop=, vfprintf@FUNCTION, $pop106, $pop37, $pop36 + i32.const $push105=, .L.str.4 + i32.load $push38=, 8($2) + i32.call $push39=, vfprintf@FUNCTION, $0, $pop105, $pop38 + i32.const $push40=, 6 + i32.eq $push41=, $pop39, $pop40 + br_if 3, $pop41 # 3: down to label1 + br 4 # 4: down to label0 +.LBB0_10: # %sw.bb34 + end_block # label4: + i32.const $push28=, 0 + i32.load $push110=, stdout($pop28) + tee_local $push109=, $0=, $pop110 + i32.const $push30=, .L.str.4 + i32.load $push29=, 12($2) + i32.call $drop=, vfprintf@FUNCTION, $pop109, $pop30, $pop29 + i32.const $push108=, .L.str.4 + i32.load $push31=, 8($2) + i32.call $push32=, vfprintf@FUNCTION, $0, $pop108, $pop31 + i32.const $push33=, 1 + i32.eq $push34=, $pop32, $pop33 + br_if 2, $pop34 # 2: down to label1 + br 3 # 3: down to label0 +.LBB0_11: # %sw.bb46 + end_block # label3: + i32.const $push16=, 0 + i32.load $push113=, stdout($pop16) + tee_local $push112=, $0=, $pop113 + i32.const $push18=, .L.str.5 + i32.load $push17=, 12($2) + i32.call $drop=, vfprintf@FUNCTION, $pop112, $pop18, $pop17 + i32.const $push111=, .L.str.5 + i32.load $push19=, 8($2) + i32.call $push20=, vfprintf@FUNCTION, $0, $pop111, $pop19 + i32.const $push21=, 1 + i32.eq $push22=, $pop20, $pop21 + br_if 1, $pop22 # 1: down to label1 + br 2 # 2: down to label0 +.LBB0_12: # %sw.bb58 + end_block # label2: + i32.const $push2=, 0 + i32.load $push116=, stdout($pop2) + tee_local $push115=, $0=, $pop116 + i32.const $push4=, .L.str.7 + i32.load $push3=, 12($2) + i32.call $drop=, vfprintf@FUNCTION, $pop115, $pop4, $pop3 + i32.const $push114=, .L.str.7 + i32.load $push5=, 8($2) + i32.call $push6=, vfprintf@FUNCTION, $0, $pop114, $pop5 + i32.const $push7=, 2 + i32.ne $push8=, $pop6, $pop7 + br_if 1, $pop8 # 1: down to label0 +.LBB0_13: # %sw.epilog + end_block # label1: + i32.const $push81=, 0 + i32.const $push79=, 16 + i32.add $push80=, $2, $pop79 + i32.store __stack_pointer($pop81), $pop80 + return +.LBB0_14: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size inner, .Lfunc_end0-inner + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push19=, 0 + i32.const $push17=, 0 + i32.load $push16=, __stack_pointer($pop17) + i32.const $push18=, 112 + i32.sub $push43=, $pop16, $pop18 + tee_local $push42=, $0=, $pop43 + i32.store __stack_pointer($pop19), $pop42 + i32.const $push0=, 0 + i32.const $push41=, 0 + call inner@FUNCTION, $pop0, $pop41 + i32.const $push1=, 1 + i32.const $push40=, 0 + call inner@FUNCTION, $pop1, $pop40 + i32.const $push2=, 2 + i32.const $push39=, 0 + call inner@FUNCTION, $pop2, $pop39 + i32.const $push3=, 3 + i32.const $push38=, 0 + call inner@FUNCTION, $pop3, $pop38 + i32.const $push4=, .L.str + i32.store 96($0), $pop4 + i32.const $push5=, 4 + i32.const $push23=, 96 + i32.add $push24=, $0, $pop23 + call inner@FUNCTION, $pop5, $pop24 + i32.const $push6=, .L.str.1 + i32.store 80($0), $pop6 + i32.const $push7=, 5 + i32.const $push25=, 80 + i32.add $push26=, $0, $pop25 + call inner@FUNCTION, $pop7, $pop26 + i32.const $push8=, .L.str.2 + i32.store 64($0), $pop8 + i32.const $push9=, 6 + i32.const $push27=, 64 + i32.add $push28=, $0, $pop27 + call inner@FUNCTION, $pop9, $pop28 + i32.const $push10=, .L.str.3 + i32.store 48($0), $pop10 + i32.const $push11=, 7 + i32.const $push29=, 48 + i32.add $push30=, $0, $pop29 + call inner@FUNCTION, $pop11, $pop30 + i32.const $push12=, 120 + i32.store 32($0), $pop12 + i32.const $push13=, 8 + i32.const $push31=, 32 + i32.add $push32=, $0, $pop31 + call inner@FUNCTION, $pop13, $pop32 + i32.const $push37=, .L.str.1 + i32.store 16($0), $pop37 + i32.const $push14=, 9 + i32.const $push33=, 16 + i32.add $push34=, $0, $pop33 + call inner@FUNCTION, $pop14, $pop34 + i32.const $push36=, 0 + i32.store 0($0), $pop36 + i32.const $push15=, 10 + call inner@FUNCTION, $pop15, $0 + i32.const $push22=, 0 + i32.const $push20=, 112 + i32.add $push21=, $0, $pop20 + i32.store __stack_pointer($pop22), $pop21 + i32.const $push35=, 0 + # fallthrough-return: $pop35 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "hello" + .size .L.str, 6 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "hello\n" + .size .L.str.1, 7 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "a" + .size .L.str.2, 2 + + .type .L.str.3,@object # @.str.3 +.L.str.3: + .skip 1 + .size .L.str.3, 1 + + .type .L.str.4,@object # @.str.4 +.L.str.4: + .asciz "%s" + .size .L.str.4, 3 + + .type .L.str.5,@object # @.str.5 +.L.str.5: + .asciz "%c" + .size .L.str.5, 3 + + .type .L.str.6,@object # @.str.6 +.L.str.6: + .asciz "%s\n" + .size .L.str.6, 4 + + .type .L.str.7,@object # @.str.7 +.L.str.7: + .asciz "%d\n" + .size .L.str.7, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype vfprintf, i32, i32, i32, i32 + .functype abort, void + .import_global stdout + .size stdout, 4 diff --git a/src/binaryen/test/torture-s/vfprintf-chk-1.c.s b/src/binaryen/test/torture-s/vfprintf-chk-1.c.s new file mode 100644 index 0000000000..0ce1aac746 --- /dev/null +++ b/src/binaryen/test/torture-s/vfprintf-chk-1.c.s @@ -0,0 +1,547 @@ + .text + .file "vfprintf-chk-1.c" + .section .text.__vfprintf_chk,"ax",@progbits + .hidden __vfprintf_chk # -- Begin function __vfprintf_chk + .globl __vfprintf_chk + .type __vfprintf_chk,@function +__vfprintf_chk: # @__vfprintf_chk + .param i32, i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load $push0=, should_optimize($pop3) + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + i32.const $push1=, 1 + i32.store should_optimize($pop4), $pop1 + i32.call $push2=, vfprintf@FUNCTION, $0, $2, $3 + return $pop2 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size __vfprintf_chk, .Lfunc_end0-__vfprintf_chk + # -- End function + .section .text.inner,"ax",@progbits + .hidden inner # -- Begin function inner + .globl inner + .type inner,@function +inner: # @inner + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push91=, 0 + i32.const $push89=, 0 + i32.load $push88=, __stack_pointer($pop89) + i32.const $push90=, 16 + i32.sub $push96=, $pop88, $pop90 + tee_local $push95=, $2=, $pop96 + i32.store __stack_pointer($pop91), $pop95 + i32.store 8($2), $1 + i32.store 12($2), $1 + block + i32.const $push0=, 10 + i32.gt_u $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %entry + block + block + block + block + block + block + block + block + block + block + block + block + br_table $0, 0, 1, 2, 3, 4, 5, 8, 6, 9, 7, 10, 0 # 0: down to label13 + # 1: down to label12 + # 2: down to label11 + # 3: down to label10 + # 4: down to label9 + # 5: down to label8 + # 8: down to label5 + # 6: down to label7 + # 9: down to label4 + # 7: down to label6 + # 10: down to label3 +.LBB1_2: # %sw.bb + end_block # label13: + i32.const $push102=, 0 + i32.const $push79=, 1 + i32.store should_optimize($pop102), $pop79 + i32.const $push101=, 0 + i32.load $push100=, stdout($pop101) + tee_local $push99=, $0=, $pop100 + i32.const $push98=, .L.str + i32.load $push80=, 12($2) + i32.call $drop=, __vfprintf_chk@FUNCTION, $pop99, $2, $pop98, $pop80 + i32.const $push97=, 0 + i32.load $push81=, should_optimize($pop97) + i32.eqz $push205=, $pop81 + br_if 11, $pop205 # 11: down to label1 +# BB#3: # %if.end + i32.const $push105=, 0 + i32.const $push104=, 0 + i32.store should_optimize($pop105), $pop104 + i32.const $push103=, .L.str + i32.load $push82=, 8($2) + i32.call $push83=, __vfprintf_chk@FUNCTION, $0, $2, $pop103, $pop82 + i32.const $push84=, 5 + i32.ne $push85=, $pop83, $pop84 + br_if 11, $pop85 # 11: down to label1 +# BB#4: # %if.end5 + i32.const $push86=, 0 + i32.load $push87=, should_optimize($pop86) + br_if 10, $pop87 # 10: down to label2 + br 11 # 11: down to label1 +.LBB1_5: # %sw.bb9 + end_block # label12: + i32.const $push111=, 0 + i32.const $push70=, 1 + i32.store should_optimize($pop111), $pop70 + i32.const $push110=, 0 + i32.load $push109=, stdout($pop110) + tee_local $push108=, $0=, $pop109 + i32.const $push107=, .L.str.1 + i32.load $push71=, 12($2) + i32.call $drop=, __vfprintf_chk@FUNCTION, $pop108, $2, $pop107, $pop71 + i32.const $push106=, 0 + i32.load $push72=, should_optimize($pop106) + i32.eqz $push206=, $pop72 + br_if 10, $pop206 # 10: down to label1 +# BB#6: # %if.end13 + i32.const $push114=, 0 + i32.const $push113=, 0 + i32.store should_optimize($pop114), $pop113 + i32.const $push112=, .L.str.1 + i32.load $push73=, 8($2) + i32.call $push74=, __vfprintf_chk@FUNCTION, $0, $2, $pop112, $pop73 + i32.const $push75=, 6 + i32.ne $push76=, $pop74, $pop75 + br_if 10, $pop76 # 10: down to label1 +# BB#7: # %if.end17 + i32.const $push77=, 0 + i32.load $push78=, should_optimize($pop77) + br_if 9, $pop78 # 9: down to label2 + br 10 # 10: down to label1 +.LBB1_8: # %sw.bb21 + end_block # label11: + i32.const $push121=, 0 + i32.const $push120=, 1 + i32.store should_optimize($pop121), $pop120 + i32.const $push119=, 0 + i32.load $push118=, stdout($pop119) + tee_local $push117=, $0=, $pop118 + i32.const $push116=, .L.str.2 + i32.load $push63=, 12($2) + i32.call $drop=, __vfprintf_chk@FUNCTION, $pop117, $2, $pop116, $pop63 + i32.const $push115=, 0 + i32.load $push64=, should_optimize($pop115) + i32.eqz $push207=, $pop64 + br_if 9, $pop207 # 9: down to label1 +# BB#9: # %if.end25 + i32.const $push125=, 0 + i32.const $push124=, 0 + i32.store should_optimize($pop125), $pop124 + i32.const $push123=, .L.str.2 + i32.load $push65=, 8($2) + i32.call $push66=, __vfprintf_chk@FUNCTION, $0, $2, $pop123, $pop65 + i32.const $push122=, 1 + i32.ne $push67=, $pop66, $pop122 + br_if 9, $pop67 # 9: down to label1 +# BB#10: # %if.end29 + i32.const $push68=, 0 + i32.load $push69=, should_optimize($pop68) + br_if 8, $pop69 # 8: down to label2 + br 9 # 9: down to label1 +.LBB1_11: # %sw.bb33 + end_block # label10: + i32.const $push131=, 0 + i32.const $push56=, 1 + i32.store should_optimize($pop131), $pop56 + i32.const $push130=, 0 + i32.load $push129=, stdout($pop130) + tee_local $push128=, $0=, $pop129 + i32.const $push127=, .L.str.3 + i32.load $push57=, 12($2) + i32.call $drop=, __vfprintf_chk@FUNCTION, $pop128, $2, $pop127, $pop57 + i32.const $push126=, 0 + i32.load $push58=, should_optimize($pop126) + i32.eqz $push208=, $pop58 + br_if 8, $pop208 # 8: down to label1 +# BB#12: # %if.end37 + i32.const $push134=, 0 + i32.const $push133=, 0 + i32.store should_optimize($pop134), $pop133 + i32.const $push132=, .L.str.3 + i32.load $push59=, 8($2) + i32.call $push60=, __vfprintf_chk@FUNCTION, $0, $2, $pop132, $pop59 + br_if 8, $pop60 # 8: down to label1 +# BB#13: # %if.end41 + i32.const $push61=, 0 + i32.load $push62=, should_optimize($pop61) + br_if 7, $pop62 # 7: down to label2 + br 8 # 8: down to label1 +.LBB1_14: # %sw.bb45 + end_block # label9: + i32.const $push141=, 0 + i32.const $push140=, 0 + i32.store should_optimize($pop141), $pop140 + i32.const $push139=, 0 + i32.load $push138=, stdout($pop139) + tee_local $push137=, $0=, $pop138 + i32.const $push136=, .L.str.4 + i32.load $push48=, 12($2) + i32.call $drop=, __vfprintf_chk@FUNCTION, $pop137, $2, $pop136, $pop48 + i32.const $push135=, 0 + i32.load $push49=, should_optimize($pop135) + i32.eqz $push209=, $pop49 + br_if 7, $pop209 # 7: down to label1 +# BB#15: # %if.end49 + i32.const $push144=, 0 + i32.const $push143=, 0 + i32.store should_optimize($pop144), $pop143 + i32.const $push142=, .L.str.4 + i32.load $push50=, 8($2) + i32.call $push51=, __vfprintf_chk@FUNCTION, $0, $2, $pop142, $pop50 + i32.const $push52=, 5 + i32.ne $push53=, $pop51, $pop52 + br_if 7, $pop53 # 7: down to label1 +# BB#16: # %if.end53 + i32.const $push54=, 0 + i32.load $push55=, should_optimize($pop54) + br_if 6, $pop55 # 6: down to label2 + br 7 # 7: down to label1 +.LBB1_17: # %sw.bb57 + end_block # label8: + i32.const $push151=, 0 + i32.const $push150=, 0 + i32.store should_optimize($pop151), $pop150 + i32.const $push149=, 0 + i32.load $push148=, stdout($pop149) + tee_local $push147=, $0=, $pop148 + i32.const $push146=, .L.str.4 + i32.load $push40=, 12($2) + i32.call $drop=, __vfprintf_chk@FUNCTION, $pop147, $2, $pop146, $pop40 + i32.const $push145=, 0 + i32.load $push41=, should_optimize($pop145) + i32.eqz $push210=, $pop41 + br_if 6, $pop210 # 6: down to label1 +# BB#18: # %if.end61 + i32.const $push154=, 0 + i32.const $push153=, 0 + i32.store should_optimize($pop154), $pop153 + i32.const $push152=, .L.str.4 + i32.load $push42=, 8($2) + i32.call $push43=, __vfprintf_chk@FUNCTION, $0, $2, $pop152, $pop42 + i32.const $push44=, 6 + i32.ne $push45=, $pop43, $pop44 + br_if 6, $pop45 # 6: down to label1 +# BB#19: # %if.end65 + i32.const $push46=, 0 + i32.load $push47=, should_optimize($pop46) + br_if 5, $pop47 # 5: down to label2 + br 6 # 6: down to label1 +.LBB1_20: # %sw.bb81 + end_block # label7: + i32.const $push161=, 0 + i32.const $push160=, 0 + i32.store should_optimize($pop161), $pop160 + i32.const $push159=, 0 + i32.load $push158=, stdout($pop159) + tee_local $push157=, $0=, $pop158 + i32.const $push156=, .L.str.4 + i32.load $push26=, 12($2) + i32.call $drop=, __vfprintf_chk@FUNCTION, $pop157, $2, $pop156, $pop26 + i32.const $push155=, 0 + i32.load $push27=, should_optimize($pop155) + i32.eqz $push211=, $pop27 + br_if 5, $pop211 # 5: down to label1 +# BB#21: # %if.end85 + i32.const $push164=, 0 + i32.const $push163=, 0 + i32.store should_optimize($pop164), $pop163 + i32.const $push162=, .L.str.4 + i32.load $push28=, 8($2) + i32.call $push29=, __vfprintf_chk@FUNCTION, $0, $2, $pop162, $pop28 + br_if 5, $pop29 # 5: down to label1 +# BB#22: # %if.end89 + i32.const $push30=, 0 + i32.load $push31=, should_optimize($pop30) + br_if 4, $pop31 # 4: down to label2 + br 5 # 5: down to label1 +.LBB1_23: # %sw.bb105 + end_block # label6: + i32.const $push171=, 0 + i32.const $push170=, 0 + i32.store should_optimize($pop171), $pop170 + i32.const $push169=, 0 + i32.load $push168=, stdout($pop169) + tee_local $push167=, $0=, $pop168 + i32.const $push166=, .L.str.6 + i32.load $push10=, 12($2) + i32.call $drop=, __vfprintf_chk@FUNCTION, $pop167, $2, $pop166, $pop10 + i32.const $push165=, 0 + i32.load $push11=, should_optimize($pop165) + i32.eqz $push212=, $pop11 + br_if 4, $pop212 # 4: down to label1 +# BB#24: # %if.end109 + i32.const $push174=, 0 + i32.const $push173=, 0 + i32.store should_optimize($pop174), $pop173 + i32.const $push172=, .L.str.6 + i32.load $push12=, 8($2) + i32.call $push13=, __vfprintf_chk@FUNCTION, $0, $2, $pop172, $pop12 + i32.const $push14=, 7 + i32.ne $push15=, $pop13, $pop14 + br_if 4, $pop15 # 4: down to label1 +# BB#25: # %if.end113 + i32.const $push16=, 0 + i32.load $push17=, should_optimize($pop16) + br_if 3, $pop17 # 3: down to label2 + br 4 # 4: down to label1 +.LBB1_26: # %sw.bb69 + end_block # label5: + i32.const $push181=, 0 + i32.const $push180=, 0 + i32.store should_optimize($pop181), $pop180 + i32.const $push179=, 0 + i32.load $push178=, stdout($pop179) + tee_local $push177=, $0=, $pop178 + i32.const $push176=, .L.str.4 + i32.load $push32=, 12($2) + i32.call $drop=, __vfprintf_chk@FUNCTION, $pop177, $2, $pop176, $pop32 + i32.const $push175=, 0 + i32.load $push33=, should_optimize($pop175) + i32.eqz $push213=, $pop33 + br_if 3, $pop213 # 3: down to label1 +# BB#27: # %if.end73 + i32.const $push184=, 0 + i32.const $push183=, 0 + i32.store should_optimize($pop184), $pop183 + i32.const $push182=, .L.str.4 + i32.load $push34=, 8($2) + i32.call $push35=, __vfprintf_chk@FUNCTION, $0, $2, $pop182, $pop34 + i32.const $push36=, 1 + i32.ne $push37=, $pop35, $pop36 + br_if 3, $pop37 # 3: down to label1 +# BB#28: # %if.end77 + i32.const $push38=, 0 + i32.load $push39=, should_optimize($pop38) + br_if 2, $pop39 # 2: down to label2 + br 3 # 3: down to label1 +.LBB1_29: # %sw.bb93 + end_block # label4: + i32.const $push191=, 0 + i32.const $push190=, 0 + i32.store should_optimize($pop191), $pop190 + i32.const $push189=, 0 + i32.load $push188=, stdout($pop189) + tee_local $push187=, $0=, $pop188 + i32.const $push186=, .L.str.5 + i32.load $push18=, 12($2) + i32.call $drop=, __vfprintf_chk@FUNCTION, $pop187, $2, $pop186, $pop18 + i32.const $push185=, 0 + i32.load $push19=, should_optimize($pop185) + i32.eqz $push214=, $pop19 + br_if 2, $pop214 # 2: down to label1 +# BB#30: # %if.end97 + i32.const $push194=, 0 + i32.const $push193=, 0 + i32.store should_optimize($pop194), $pop193 + i32.const $push192=, .L.str.5 + i32.load $push20=, 8($2) + i32.call $push21=, __vfprintf_chk@FUNCTION, $0, $2, $pop192, $pop20 + i32.const $push22=, 1 + i32.ne $push23=, $pop21, $pop22 + br_if 2, $pop23 # 2: down to label1 +# BB#31: # %if.end101 + i32.const $push24=, 0 + i32.load $push25=, should_optimize($pop24) + br_if 1, $pop25 # 1: down to label2 + br 2 # 2: down to label1 +.LBB1_32: # %sw.bb117 + end_block # label3: + i32.const $push201=, 0 + i32.const $push200=, 0 + i32.store should_optimize($pop201), $pop200 + i32.const $push199=, 0 + i32.load $push198=, stdout($pop199) + tee_local $push197=, $0=, $pop198 + i32.const $push196=, .L.str.7 + i32.load $push2=, 12($2) + i32.call $drop=, __vfprintf_chk@FUNCTION, $pop197, $2, $pop196, $pop2 + i32.const $push195=, 0 + i32.load $push3=, should_optimize($pop195) + i32.eqz $push215=, $pop3 + br_if 1, $pop215 # 1: down to label1 +# BB#33: # %if.end121 + i32.const $push204=, 0 + i32.const $push203=, 0 + i32.store should_optimize($pop204), $pop203 + i32.const $push202=, .L.str.7 + i32.load $push4=, 8($2) + i32.call $push5=, __vfprintf_chk@FUNCTION, $0, $2, $pop202, $pop4 + i32.const $push6=, 2 + i32.ne $push7=, $pop5, $pop6 + br_if 1, $pop7 # 1: down to label1 +# BB#34: # %if.end125 + i32.const $push8=, 0 + i32.load $push9=, should_optimize($pop8) + i32.eqz $push216=, $pop9 + br_if 1, $pop216 # 1: down to label1 +.LBB1_35: # %sw.epilog + end_block # label2: + i32.const $push94=, 0 + i32.const $push92=, 16 + i32.add $push93=, $2, $pop92 + i32.store __stack_pointer($pop94), $pop93 + return +.LBB1_36: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size inner, .Lfunc_end1-inner + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push19=, 0 + i32.const $push17=, 0 + i32.load $push16=, __stack_pointer($pop17) + i32.const $push18=, 112 + i32.sub $push43=, $pop16, $pop18 + tee_local $push42=, $0=, $pop43 + i32.store __stack_pointer($pop19), $pop42 + i32.const $push0=, 0 + i32.const $push41=, 0 + call inner@FUNCTION, $pop0, $pop41 + i32.const $push1=, 1 + i32.const $push40=, 0 + call inner@FUNCTION, $pop1, $pop40 + i32.const $push2=, 2 + i32.const $push39=, 0 + call inner@FUNCTION, $pop2, $pop39 + i32.const $push3=, 3 + i32.const $push38=, 0 + call inner@FUNCTION, $pop3, $pop38 + i32.const $push4=, .L.str + i32.store 96($0), $pop4 + i32.const $push5=, 4 + i32.const $push23=, 96 + i32.add $push24=, $0, $pop23 + call inner@FUNCTION, $pop5, $pop24 + i32.const $push6=, .L.str.1 + i32.store 80($0), $pop6 + i32.const $push7=, 5 + i32.const $push25=, 80 + i32.add $push26=, $0, $pop25 + call inner@FUNCTION, $pop7, $pop26 + i32.const $push8=, .L.str.2 + i32.store 64($0), $pop8 + i32.const $push9=, 6 + i32.const $push27=, 64 + i32.add $push28=, $0, $pop27 + call inner@FUNCTION, $pop9, $pop28 + i32.const $push10=, .L.str.3 + i32.store 48($0), $pop10 + i32.const $push11=, 7 + i32.const $push29=, 48 + i32.add $push30=, $0, $pop29 + call inner@FUNCTION, $pop11, $pop30 + i32.const $push12=, 120 + i32.store 32($0), $pop12 + i32.const $push13=, 8 + i32.const $push31=, 32 + i32.add $push32=, $0, $pop31 + call inner@FUNCTION, $pop13, $pop32 + i32.const $push37=, .L.str.1 + i32.store 16($0), $pop37 + i32.const $push14=, 9 + i32.const $push33=, 16 + i32.add $push34=, $0, $pop33 + call inner@FUNCTION, $pop14, $pop34 + i32.const $push36=, 0 + i32.store 0($0), $pop36 + i32.const $push15=, 10 + call inner@FUNCTION, $pop15, $0 + i32.const $push22=, 0 + i32.const $push20=, 112 + i32.add $push21=, $0, $pop20 + i32.store __stack_pointer($pop22), $pop21 + i32.const $push35=, 0 + # fallthrough-return: $pop35 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden should_optimize # @should_optimize + .type should_optimize,@object + .section .bss.should_optimize,"aw",@nobits + .globl should_optimize + .p2align 2 +should_optimize: + .int32 0 # 0x0 + .size should_optimize, 4 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "hello" + .size .L.str, 6 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "hello\n" + .size .L.str.1, 7 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "a" + .size .L.str.2, 2 + + .type .L.str.3,@object # @.str.3 +.L.str.3: + .skip 1 + .size .L.str.3, 1 + + .type .L.str.4,@object # @.str.4 +.L.str.4: + .asciz "%s" + .size .L.str.4, 3 + + .type .L.str.5,@object # @.str.5 +.L.str.5: + .asciz "%c" + .size .L.str.5, 3 + + .type .L.str.6,@object # @.str.6 +.L.str.6: + .asciz "%s\n" + .size .L.str.6, 4 + + .type .L.str.7,@object # @.str.7 +.L.str.7: + .asciz "%d\n" + .size .L.str.7, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype vfprintf, i32, i32, i32, i32 + .import_global stdout + .size stdout, 4 diff --git a/src/binaryen/test/torture-s/vla-dealloc-1.c.s b/src/binaryen/test/torture-s/vla-dealloc-1.c.s new file mode 100644 index 0000000000..a67cf102e9 --- /dev/null +++ b/src/binaryen/test/torture-s/vla-dealloc-1.c.s @@ -0,0 +1,64 @@ + .text + .file "vla-dealloc-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32 +# BB#0: # %entry + i32.const $push7=, 0 + i32.load $push9=, __stack_pointer($pop7) + tee_local $push8=, $3=, $pop9 + copy_local $drop=, $pop8 + i32.const $2=, 0 +.LBB0_1: # %if.end + # =>This Inner Loop Header: Depth=1 + loop # label0: + i32.const $push24=, 1000 + i32.rem_s $push0=, $2, $pop24 + i32.const $push23=, 2 + i32.shl $push22=, $pop0, $pop23 + tee_local $push21=, $0=, $pop22 + i32.const $push20=, 19 + i32.add $push1=, $pop21, $pop20 + i32.const $push19=, -16 + i32.and $push2=, $pop1, $pop19 + i32.sub $push18=, $3, $pop2 + tee_local $push17=, $1=, $pop18 + copy_local $drop=, $pop17 + i32.const $push16=, 1 + i32.store 0($1), $pop16 + i32.const $push15=, 0 + i32.store p($pop15), $1 + i32.add $push4=, $1, $0 + i32.const $push14=, 2 + i32.store 0($pop4), $pop14 + copy_local $push3=, $3 + copy_local $3=, $pop3 + i32.const $push13=, 1 + i32.add $push12=, $2, $pop13 + tee_local $push11=, $2=, $pop12 + i32.const $push10=, 1000000 + i32.ne $push5=, $pop11, $pop10 + br_if 0, $pop5 # 0: up to label0 +# BB#2: # %cleanup5 + end_loop + i32.const $push6=, 0 + # fallthrough-return: $pop6 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden p # @p + .type p,@object + .section .bss.p,"aw",@nobits + .globl p + .p2align 2 +p: + .int32 0 + .size p, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/torture-s/vprintf-1.c.s b/src/binaryen/test/torture-s/vprintf-1.c.s new file mode 100644 index 0000000000..05434f7982 --- /dev/null +++ b/src/binaryen/test/torture-s/vprintf-1.c.s @@ -0,0 +1,313 @@ + .text + .file "vprintf-1.c" + .section .text.inner,"ax",@progbits + .hidden inner # -- Begin function inner + .globl inner + .type inner,@function +inner: # @inner + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push67=, 0 + i32.const $push65=, 0 + i32.load $push64=, __stack_pointer($pop65) + i32.const $push66=, 16 + i32.sub $push72=, $pop64, $pop66 + tee_local $push71=, $2=, $pop72 + i32.store __stack_pointer($pop67), $pop71 + i32.store 8($2), $1 + i32.store 12($2), $1 + block + i32.const $push0=, 10 + i32.gt_u $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label0 +# BB#1: # %entry + block + block + block + block + block + block + block + block + block + block + block + block + br_table $0, 0, 3, 4, 5, 1, 7, 8, 6, 9, 2, 10, 0 # 0: down to label12 + # 3: down to label9 + # 4: down to label8 + # 5: down to label7 + # 1: down to label11 + # 7: down to label5 + # 8: down to label4 + # 6: down to label6 + # 9: down to label3 + # 2: down to label10 + # 10: down to label2 +.LBB0_2: # %sw.bb + end_block # label12: + i32.const $push59=, .L.str + i32.load $push58=, 12($2) + i32.call $drop=, vprintf@FUNCTION, $pop59, $pop58 + i32.const $push73=, .L.str + i32.load $push60=, 8($2) + i32.call $push61=, vprintf@FUNCTION, $pop73, $pop60 + i32.const $push62=, 5 + i32.eq $push63=, $pop61, $pop62 + br_if 10, $pop63 # 10: down to label1 + br 11 # 11: down to label0 +.LBB0_3: # %sw.bb22 + end_block # label11: + i32.const $push37=, .L.str.4 + i32.load $push36=, 12($2) + i32.call $drop=, vprintf@FUNCTION, $pop37, $pop36 + i32.const $push74=, .L.str.4 + i32.load $push38=, 8($2) + i32.call $push39=, vprintf@FUNCTION, $pop74, $pop38 + i32.const $push40=, 5 + i32.eq $push41=, $pop39, $pop40 + br_if 9, $pop41 # 9: down to label1 + br 10 # 10: down to label0 +.LBB0_4: # %sw.bb52 + end_block # label10: + i32.const $push9=, .L.str.6 + i32.load $push8=, 12($2) + i32.call $drop=, vprintf@FUNCTION, $pop9, $pop8 + i32.const $push75=, .L.str.6 + i32.load $push10=, 8($2) + i32.call $push11=, vprintf@FUNCTION, $pop75, $pop10 + i32.const $push12=, 7 + i32.ne $push13=, $pop11, $pop12 + br_if 9, $pop13 # 9: down to label0 + br 8 # 8: down to label1 +.LBB0_5: # %sw.bb4 + end_block # label9: + i32.const $push53=, .L.str.1 + i32.load $push52=, 12($2) + i32.call $drop=, vprintf@FUNCTION, $pop53, $pop52 + i32.const $push76=, .L.str.1 + i32.load $push54=, 8($2) + i32.call $push55=, vprintf@FUNCTION, $pop76, $pop54 + i32.const $push56=, 6 + i32.eq $push57=, $pop55, $pop56 + br_if 7, $pop57 # 7: down to label1 + br 8 # 8: down to label0 +.LBB0_6: # %sw.bb10 + end_block # label8: + i32.const $push47=, .L.str.2 + i32.load $push46=, 12($2) + i32.call $drop=, vprintf@FUNCTION, $pop47, $pop46 + i32.const $push77=, .L.str.2 + i32.load $push48=, 8($2) + i32.call $push49=, vprintf@FUNCTION, $pop77, $pop48 + i32.const $push50=, 1 + i32.eq $push51=, $pop49, $pop50 + br_if 6, $pop51 # 6: down to label1 + br 7 # 7: down to label0 +.LBB0_7: # %sw.bb16 + end_block # label7: + i32.const $push43=, .L.str.3 + i32.load $push42=, 12($2) + i32.call $drop=, vprintf@FUNCTION, $pop43, $pop42 + i32.const $push78=, .L.str.3 + i32.load $push44=, 8($2) + i32.call $push45=, vprintf@FUNCTION, $pop78, $pop44 + i32.eqz $push84=, $pop45 + br_if 5, $pop84 # 5: down to label1 + br 6 # 6: down to label0 +.LBB0_8: # %sw.bb40 + end_block # label6: + i32.const $push21=, .L.str.4 + i32.load $push20=, 12($2) + i32.call $drop=, vprintf@FUNCTION, $pop21, $pop20 + i32.const $push79=, .L.str.4 + i32.load $push22=, 8($2) + i32.call $push23=, vprintf@FUNCTION, $pop79, $pop22 + i32.eqz $push85=, $pop23 + br_if 4, $pop85 # 4: down to label1 + br 5 # 5: down to label0 +.LBB0_9: # %sw.bb28 + end_block # label5: + i32.const $push31=, .L.str.4 + i32.load $push30=, 12($2) + i32.call $drop=, vprintf@FUNCTION, $pop31, $pop30 + i32.const $push80=, .L.str.4 + i32.load $push32=, 8($2) + i32.call $push33=, vprintf@FUNCTION, $pop80, $pop32 + i32.const $push34=, 6 + i32.eq $push35=, $pop33, $pop34 + br_if 3, $pop35 # 3: down to label1 + br 4 # 4: down to label0 +.LBB0_10: # %sw.bb34 + end_block # label4: + i32.const $push25=, .L.str.4 + i32.load $push24=, 12($2) + i32.call $drop=, vprintf@FUNCTION, $pop25, $pop24 + i32.const $push81=, .L.str.4 + i32.load $push26=, 8($2) + i32.call $push27=, vprintf@FUNCTION, $pop81, $pop26 + i32.const $push28=, 1 + i32.eq $push29=, $pop27, $pop28 + br_if 2, $pop29 # 2: down to label1 + br 3 # 3: down to label0 +.LBB0_11: # %sw.bb46 + end_block # label3: + i32.const $push15=, .L.str.5 + i32.load $push14=, 12($2) + i32.call $drop=, vprintf@FUNCTION, $pop15, $pop14 + i32.const $push82=, .L.str.5 + i32.load $push16=, 8($2) + i32.call $push17=, vprintf@FUNCTION, $pop82, $pop16 + i32.const $push18=, 1 + i32.eq $push19=, $pop17, $pop18 + br_if 1, $pop19 # 1: down to label1 + br 2 # 2: down to label0 +.LBB0_12: # %sw.bb58 + end_block # label2: + i32.const $push3=, .L.str.7 + i32.load $push2=, 12($2) + i32.call $drop=, vprintf@FUNCTION, $pop3, $pop2 + i32.const $push83=, .L.str.7 + i32.load $push4=, 8($2) + i32.call $push5=, vprintf@FUNCTION, $pop83, $pop4 + i32.const $push6=, 2 + i32.ne $push7=, $pop5, $pop6 + br_if 1, $pop7 # 1: down to label0 +.LBB0_13: # %sw.epilog + end_block # label1: + i32.const $push70=, 0 + i32.const $push68=, 16 + i32.add $push69=, $2, $pop68 + i32.store __stack_pointer($pop70), $pop69 + return +.LBB0_14: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size inner, .Lfunc_end0-inner + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push19=, 0 + i32.const $push17=, 0 + i32.load $push16=, __stack_pointer($pop17) + i32.const $push18=, 112 + i32.sub $push43=, $pop16, $pop18 + tee_local $push42=, $0=, $pop43 + i32.store __stack_pointer($pop19), $pop42 + i32.const $push0=, 0 + i32.const $push41=, 0 + call inner@FUNCTION, $pop0, $pop41 + i32.const $push1=, 1 + i32.const $push40=, 0 + call inner@FUNCTION, $pop1, $pop40 + i32.const $push2=, 2 + i32.const $push39=, 0 + call inner@FUNCTION, $pop2, $pop39 + i32.const $push3=, 3 + i32.const $push38=, 0 + call inner@FUNCTION, $pop3, $pop38 + i32.const $push4=, .L.str + i32.store 96($0), $pop4 + i32.const $push5=, 4 + i32.const $push23=, 96 + i32.add $push24=, $0, $pop23 + call inner@FUNCTION, $pop5, $pop24 + i32.const $push6=, .L.str.1 + i32.store 80($0), $pop6 + i32.const $push7=, 5 + i32.const $push25=, 80 + i32.add $push26=, $0, $pop25 + call inner@FUNCTION, $pop7, $pop26 + i32.const $push8=, .L.str.2 + i32.store 64($0), $pop8 + i32.const $push9=, 6 + i32.const $push27=, 64 + i32.add $push28=, $0, $pop27 + call inner@FUNCTION, $pop9, $pop28 + i32.const $push10=, .L.str.3 + i32.store 48($0), $pop10 + i32.const $push11=, 7 + i32.const $push29=, 48 + i32.add $push30=, $0, $pop29 + call inner@FUNCTION, $pop11, $pop30 + i32.const $push12=, 120 + i32.store 32($0), $pop12 + i32.const $push13=, 8 + i32.const $push31=, 32 + i32.add $push32=, $0, $pop31 + call inner@FUNCTION, $pop13, $pop32 + i32.const $push37=, .L.str.1 + i32.store 16($0), $pop37 + i32.const $push14=, 9 + i32.const $push33=, 16 + i32.add $push34=, $0, $pop33 + call inner@FUNCTION, $pop14, $pop34 + i32.const $push36=, 0 + i32.store 0($0), $pop36 + i32.const $push15=, 10 + call inner@FUNCTION, $pop15, $0 + i32.const $push22=, 0 + i32.const $push20=, 112 + i32.add $push21=, $0, $pop20 + i32.store __stack_pointer($pop22), $pop21 + i32.const $push35=, 0 + # fallthrough-return: $pop35 + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "hello" + .size .L.str, 6 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "hello\n" + .size .L.str.1, 7 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "a" + .size .L.str.2, 2 + + .type .L.str.3,@object # @.str.3 +.L.str.3: + .skip 1 + .size .L.str.3, 1 + + .type .L.str.4,@object # @.str.4 +.L.str.4: + .asciz "%s" + .size .L.str.4, 3 + + .type .L.str.5,@object # @.str.5 +.L.str.5: + .asciz "%c" + .size .L.str.5, 3 + + .type .L.str.6,@object # @.str.6 +.L.str.6: + .asciz "%s\n" + .size .L.str.6, 4 + + .type .L.str.7,@object # @.str.7 +.L.str.7: + .asciz "%d\n" + .size .L.str.7, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype vprintf, i32, i32, i32 + .functype abort, void diff --git a/src/binaryen/test/torture-s/vprintf-chk-1.c.s b/src/binaryen/test/torture-s/vprintf-chk-1.c.s new file mode 100644 index 0000000000..673c30c208 --- /dev/null +++ b/src/binaryen/test/torture-s/vprintf-chk-1.c.s @@ -0,0 +1,512 @@ + .text + .file "vprintf-chk-1.c" + .section .text.__vprintf_chk,"ax",@progbits + .hidden __vprintf_chk # -- Begin function __vprintf_chk + .globl __vprintf_chk + .type __vprintf_chk,@function +__vprintf_chk: # @__vprintf_chk + .param i32, i32, i32 + .result i32 +# BB#0: # %entry + block + i32.const $push3=, 0 + i32.load $push0=, should_optimize($pop3) + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push4=, 0 + i32.const $push1=, 1 + i32.store should_optimize($pop4), $pop1 + i32.call $push2=, vprintf@FUNCTION, $1, $2 + return $pop2 +.LBB0_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size __vprintf_chk, .Lfunc_end0-__vprintf_chk + # -- End function + .section .text.inner,"ax",@progbits + .hidden inner # -- Begin function inner + .globl inner + .type inner,@function +inner: # @inner + .param i32, i32 + .local i32 +# BB#0: # %entry + i32.const $push90=, 0 + i32.const $push88=, 0 + i32.load $push87=, __stack_pointer($pop88) + i32.const $push89=, 16 + i32.sub $push95=, $pop87, $pop89 + tee_local $push94=, $2=, $pop95 + i32.store __stack_pointer($pop90), $pop94 + i32.store 8($2), $1 + i32.store 12($2), $1 + block + i32.const $push0=, 10 + i32.gt_u $push1=, $0, $pop0 + br_if 0, $pop1 # 0: down to label1 +# BB#1: # %entry + block + block + block + block + block + block + block + block + block + block + block + block + br_table $0, 0, 1, 2, 3, 4, 5, 8, 6, 9, 7, 10, 0 # 0: down to label13 + # 1: down to label12 + # 2: down to label11 + # 3: down to label10 + # 4: down to label9 + # 5: down to label8 + # 8: down to label5 + # 6: down to label7 + # 9: down to label4 + # 7: down to label6 + # 10: down to label3 +.LBB1_2: # %sw.bb + end_block # label13: + i32.const $push99=, 0 + i32.const $push98=, 0 + i32.store should_optimize($pop99), $pop98 + i32.const $push97=, .L.str + i32.load $push79=, 12($2) + i32.call $drop=, __vprintf_chk@FUNCTION, $2, $pop97, $pop79 + i32.const $push96=, 0 + i32.load $push80=, should_optimize($pop96) + i32.eqz $push172=, $pop80 + br_if 11, $pop172 # 11: down to label1 +# BB#3: # %if.end + i32.const $push102=, 0 + i32.const $push101=, 0 + i32.store should_optimize($pop102), $pop101 + i32.const $push100=, .L.str + i32.load $push81=, 8($2) + i32.call $push82=, __vprintf_chk@FUNCTION, $2, $pop100, $pop81 + i32.const $push83=, 5 + i32.ne $push84=, $pop82, $pop83 + br_if 11, $pop84 # 11: down to label1 +# BB#4: # %if.end5 + i32.const $push85=, 0 + i32.load $push86=, should_optimize($pop85) + br_if 10, $pop86 # 10: down to label2 + br 11 # 11: down to label1 +.LBB1_5: # %sw.bb9 + end_block # label12: + i32.const $push105=, 0 + i32.const $push70=, 1 + i32.store should_optimize($pop105), $pop70 + i32.const $push104=, .L.str.1 + i32.load $push71=, 12($2) + i32.call $drop=, __vprintf_chk@FUNCTION, $2, $pop104, $pop71 + i32.const $push103=, 0 + i32.load $push72=, should_optimize($pop103) + i32.eqz $push173=, $pop72 + br_if 10, $pop173 # 10: down to label1 +# BB#6: # %if.end13 + i32.const $push108=, 0 + i32.const $push107=, 0 + i32.store should_optimize($pop108), $pop107 + i32.const $push106=, .L.str.1 + i32.load $push73=, 8($2) + i32.call $push74=, __vprintf_chk@FUNCTION, $2, $pop106, $pop73 + i32.const $push75=, 6 + i32.ne $push76=, $pop74, $pop75 + br_if 10, $pop76 # 10: down to label1 +# BB#7: # %if.end17 + i32.const $push77=, 0 + i32.load $push78=, should_optimize($pop77) + br_if 9, $pop78 # 9: down to label2 + br 10 # 10: down to label1 +.LBB1_8: # %sw.bb21 + end_block # label11: + i32.const $push112=, 0 + i32.const $push111=, 1 + i32.store should_optimize($pop112), $pop111 + i32.const $push110=, .L.str.2 + i32.load $push63=, 12($2) + i32.call $drop=, __vprintf_chk@FUNCTION, $2, $pop110, $pop63 + i32.const $push109=, 0 + i32.load $push64=, should_optimize($pop109) + i32.eqz $push174=, $pop64 + br_if 9, $pop174 # 9: down to label1 +# BB#9: # %if.end25 + i32.const $push116=, 0 + i32.const $push115=, 0 + i32.store should_optimize($pop116), $pop115 + i32.const $push114=, .L.str.2 + i32.load $push65=, 8($2) + i32.call $push66=, __vprintf_chk@FUNCTION, $2, $pop114, $pop65 + i32.const $push113=, 1 + i32.ne $push67=, $pop66, $pop113 + br_if 9, $pop67 # 9: down to label1 +# BB#10: # %if.end29 + i32.const $push68=, 0 + i32.load $push69=, should_optimize($pop68) + br_if 8, $pop69 # 8: down to label2 + br 9 # 9: down to label1 +.LBB1_11: # %sw.bb33 + end_block # label10: + i32.const $push119=, 0 + i32.const $push56=, 1 + i32.store should_optimize($pop119), $pop56 + i32.const $push118=, .L.str.3 + i32.load $push57=, 12($2) + i32.call $drop=, __vprintf_chk@FUNCTION, $2, $pop118, $pop57 + i32.const $push117=, 0 + i32.load $push58=, should_optimize($pop117) + i32.eqz $push175=, $pop58 + br_if 8, $pop175 # 8: down to label1 +# BB#12: # %if.end37 + i32.const $push122=, 0 + i32.const $push121=, 0 + i32.store should_optimize($pop122), $pop121 + i32.const $push120=, .L.str.3 + i32.load $push59=, 8($2) + i32.call $push60=, __vprintf_chk@FUNCTION, $2, $pop120, $pop59 + br_if 8, $pop60 # 8: down to label1 +# BB#13: # %if.end41 + i32.const $push61=, 0 + i32.load $push62=, should_optimize($pop61) + br_if 7, $pop62 # 7: down to label2 + br 8 # 8: down to label1 +.LBB1_14: # %sw.bb45 + end_block # label9: + i32.const $push126=, 0 + i32.const $push125=, 0 + i32.store should_optimize($pop126), $pop125 + i32.const $push124=, .L.str.4 + i32.load $push48=, 12($2) + i32.call $drop=, __vprintf_chk@FUNCTION, $2, $pop124, $pop48 + i32.const $push123=, 0 + i32.load $push49=, should_optimize($pop123) + i32.eqz $push176=, $pop49 + br_if 7, $pop176 # 7: down to label1 +# BB#15: # %if.end49 + i32.const $push129=, 0 + i32.const $push128=, 0 + i32.store should_optimize($pop129), $pop128 + i32.const $push127=, .L.str.4 + i32.load $push50=, 8($2) + i32.call $push51=, __vprintf_chk@FUNCTION, $2, $pop127, $pop50 + i32.const $push52=, 5 + i32.ne $push53=, $pop51, $pop52 + br_if 7, $pop53 # 7: down to label1 +# BB#16: # %if.end53 + i32.const $push54=, 0 + i32.load $push55=, should_optimize($pop54) + br_if 6, $pop55 # 6: down to label2 + br 7 # 7: down to label1 +.LBB1_17: # %sw.bb57 + end_block # label8: + i32.const $push133=, 0 + i32.const $push132=, 0 + i32.store should_optimize($pop133), $pop132 + i32.const $push131=, .L.str.4 + i32.load $push40=, 12($2) + i32.call $drop=, __vprintf_chk@FUNCTION, $2, $pop131, $pop40 + i32.const $push130=, 0 + i32.load $push41=, should_optimize($pop130) + i32.eqz $push177=, $pop41 + br_if 6, $pop177 # 6: down to label1 +# BB#18: # %if.end61 + i32.const $push136=, 0 + i32.const $push135=, 0 + i32.store should_optimize($pop136), $pop135 + i32.const $push134=, .L.str.4 + i32.load $push42=, 8($2) + i32.call $push43=, __vprintf_chk@FUNCTION, $2, $pop134, $pop42 + i32.const $push44=, 6 + i32.ne $push45=, $pop43, $pop44 + br_if 6, $pop45 # 6: down to label1 +# BB#19: # %if.end65 + i32.const $push46=, 0 + i32.load $push47=, should_optimize($pop46) + br_if 5, $pop47 # 5: down to label2 + br 6 # 6: down to label1 +.LBB1_20: # %sw.bb81 + end_block # label7: + i32.const $push140=, 0 + i32.const $push139=, 0 + i32.store should_optimize($pop140), $pop139 + i32.const $push138=, .L.str.4 + i32.load $push26=, 12($2) + i32.call $drop=, __vprintf_chk@FUNCTION, $2, $pop138, $pop26 + i32.const $push137=, 0 + i32.load $push27=, should_optimize($pop137) + i32.eqz $push178=, $pop27 + br_if 5, $pop178 # 5: down to label1 +# BB#21: # %if.end85 + i32.const $push143=, 0 + i32.const $push142=, 0 + i32.store should_optimize($pop143), $pop142 + i32.const $push141=, .L.str.4 + i32.load $push28=, 8($2) + i32.call $push29=, __vprintf_chk@FUNCTION, $2, $pop141, $pop28 + br_if 5, $pop29 # 5: down to label1 +# BB#22: # %if.end89 + i32.const $push30=, 0 + i32.load $push31=, should_optimize($pop30) + br_if 4, $pop31 # 4: down to label2 + br 5 # 5: down to label1 +.LBB1_23: # %sw.bb105 + end_block # label6: + i32.const $push147=, 0 + i32.const $push146=, 0 + i32.store should_optimize($pop147), $pop146 + i32.const $push145=, .L.str.6 + i32.load $push10=, 12($2) + i32.call $drop=, __vprintf_chk@FUNCTION, $2, $pop145, $pop10 + i32.const $push144=, 0 + i32.load $push11=, should_optimize($pop144) + i32.eqz $push179=, $pop11 + br_if 4, $pop179 # 4: down to label1 +# BB#24: # %if.end109 + i32.const $push150=, 0 + i32.const $push149=, 0 + i32.store should_optimize($pop150), $pop149 + i32.const $push148=, .L.str.6 + i32.load $push12=, 8($2) + i32.call $push13=, __vprintf_chk@FUNCTION, $2, $pop148, $pop12 + i32.const $push14=, 7 + i32.ne $push15=, $pop13, $pop14 + br_if 4, $pop15 # 4: down to label1 +# BB#25: # %if.end113 + i32.const $push16=, 0 + i32.load $push17=, should_optimize($pop16) + br_if 3, $pop17 # 3: down to label2 + br 4 # 4: down to label1 +.LBB1_26: # %sw.bb69 + end_block # label5: + i32.const $push154=, 0 + i32.const $push153=, 0 + i32.store should_optimize($pop154), $pop153 + i32.const $push152=, .L.str.4 + i32.load $push32=, 12($2) + i32.call $drop=, __vprintf_chk@FUNCTION, $2, $pop152, $pop32 + i32.const $push151=, 0 + i32.load $push33=, should_optimize($pop151) + i32.eqz $push180=, $pop33 + br_if 3, $pop180 # 3: down to label1 +# BB#27: # %if.end73 + i32.const $push157=, 0 + i32.const $push156=, 0 + i32.store should_optimize($pop157), $pop156 + i32.const $push155=, .L.str.4 + i32.load $push34=, 8($2) + i32.call $push35=, __vprintf_chk@FUNCTION, $2, $pop155, $pop34 + i32.const $push36=, 1 + i32.ne $push37=, $pop35, $pop36 + br_if 3, $pop37 # 3: down to label1 +# BB#28: # %if.end77 + i32.const $push38=, 0 + i32.load $push39=, should_optimize($pop38) + br_if 2, $pop39 # 2: down to label2 + br 3 # 3: down to label1 +.LBB1_29: # %sw.bb93 + end_block # label4: + i32.const $push161=, 0 + i32.const $push160=, 0 + i32.store should_optimize($pop161), $pop160 + i32.const $push159=, .L.str.5 + i32.load $push18=, 12($2) + i32.call $drop=, __vprintf_chk@FUNCTION, $2, $pop159, $pop18 + i32.const $push158=, 0 + i32.load $push19=, should_optimize($pop158) + i32.eqz $push181=, $pop19 + br_if 2, $pop181 # 2: down to label1 +# BB#30: # %if.end97 + i32.const $push164=, 0 + i32.const $push163=, 0 + i32.store should_optimize($pop164), $pop163 + i32.const $push162=, .L.str.5 + i32.load $push20=, 8($2) + i32.call $push21=, __vprintf_chk@FUNCTION, $2, $pop162, $pop20 + i32.const $push22=, 1 + i32.ne $push23=, $pop21, $pop22 + br_if 2, $pop23 # 2: down to label1 +# BB#31: # %if.end101 + i32.const $push24=, 0 + i32.load $push25=, should_optimize($pop24) + br_if 1, $pop25 # 1: down to label2 + br 2 # 2: down to label1 +.LBB1_32: # %sw.bb117 + end_block # label3: + i32.const $push168=, 0 + i32.const $push167=, 0 + i32.store should_optimize($pop168), $pop167 + i32.const $push166=, .L.str.7 + i32.load $push2=, 12($2) + i32.call $drop=, __vprintf_chk@FUNCTION, $2, $pop166, $pop2 + i32.const $push165=, 0 + i32.load $push3=, should_optimize($pop165) + i32.eqz $push182=, $pop3 + br_if 1, $pop182 # 1: down to label1 +# BB#33: # %if.end121 + i32.const $push171=, 0 + i32.const $push170=, 0 + i32.store should_optimize($pop171), $pop170 + i32.const $push169=, .L.str.7 + i32.load $push4=, 8($2) + i32.call $push5=, __vprintf_chk@FUNCTION, $2, $pop169, $pop4 + i32.const $push6=, 2 + i32.ne $push7=, $pop5, $pop6 + br_if 1, $pop7 # 1: down to label1 +# BB#34: # %if.end125 + i32.const $push8=, 0 + i32.load $push9=, should_optimize($pop8) + i32.eqz $push183=, $pop9 + br_if 1, $pop183 # 1: down to label1 +.LBB1_35: # %sw.epilog + end_block # label2: + i32.const $push93=, 0 + i32.const $push91=, 16 + i32.add $push92=, $2, $pop91 + i32.store __stack_pointer($pop93), $pop92 + return +.LBB1_36: # %if.then + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size inner, .Lfunc_end1-inner + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push19=, 0 + i32.const $push17=, 0 + i32.load $push16=, __stack_pointer($pop17) + i32.const $push18=, 112 + i32.sub $push43=, $pop16, $pop18 + tee_local $push42=, $0=, $pop43 + i32.store __stack_pointer($pop19), $pop42 + i32.const $push0=, 0 + i32.const $push41=, 0 + call inner@FUNCTION, $pop0, $pop41 + i32.const $push1=, 1 + i32.const $push40=, 0 + call inner@FUNCTION, $pop1, $pop40 + i32.const $push2=, 2 + i32.const $push39=, 0 + call inner@FUNCTION, $pop2, $pop39 + i32.const $push3=, 3 + i32.const $push38=, 0 + call inner@FUNCTION, $pop3, $pop38 + i32.const $push4=, .L.str + i32.store 96($0), $pop4 + i32.const $push5=, 4 + i32.const $push23=, 96 + i32.add $push24=, $0, $pop23 + call inner@FUNCTION, $pop5, $pop24 + i32.const $push6=, .L.str.1 + i32.store 80($0), $pop6 + i32.const $push7=, 5 + i32.const $push25=, 80 + i32.add $push26=, $0, $pop25 + call inner@FUNCTION, $pop7, $pop26 + i32.const $push8=, .L.str.2 + i32.store 64($0), $pop8 + i32.const $push9=, 6 + i32.const $push27=, 64 + i32.add $push28=, $0, $pop27 + call inner@FUNCTION, $pop9, $pop28 + i32.const $push10=, .L.str.3 + i32.store 48($0), $pop10 + i32.const $push11=, 7 + i32.const $push29=, 48 + i32.add $push30=, $0, $pop29 + call inner@FUNCTION, $pop11, $pop30 + i32.const $push12=, 120 + i32.store 32($0), $pop12 + i32.const $push13=, 8 + i32.const $push31=, 32 + i32.add $push32=, $0, $pop31 + call inner@FUNCTION, $pop13, $pop32 + i32.const $push37=, .L.str.1 + i32.store 16($0), $pop37 + i32.const $push14=, 9 + i32.const $push33=, 16 + i32.add $push34=, $0, $pop33 + call inner@FUNCTION, $pop14, $pop34 + i32.const $push36=, 0 + i32.store 0($0), $pop36 + i32.const $push15=, 10 + call inner@FUNCTION, $pop15, $0 + i32.const $push22=, 0 + i32.const $push20=, 112 + i32.add $push21=, $0, $pop20 + i32.store __stack_pointer($pop22), $pop21 + i32.const $push35=, 0 + # fallthrough-return: $pop35 + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + .hidden should_optimize # @should_optimize + .type should_optimize,@object + .section .bss.should_optimize,"aw",@nobits + .globl should_optimize + .p2align 2 +should_optimize: + .int32 0 # 0x0 + .size should_optimize, 4 + + .type .L.str,@object # @.str + .section .rodata.str1.1,"aMS",@progbits,1 +.L.str: + .asciz "hello" + .size .L.str, 6 + + .type .L.str.1,@object # @.str.1 +.L.str.1: + .asciz "hello\n" + .size .L.str.1, 7 + + .type .L.str.2,@object # @.str.2 +.L.str.2: + .asciz "a" + .size .L.str.2, 2 + + .type .L.str.3,@object # @.str.3 +.L.str.3: + .skip 1 + .size .L.str.3, 1 + + .type .L.str.4,@object # @.str.4 +.L.str.4: + .asciz "%s" + .size .L.str.4, 3 + + .type .L.str.5,@object # @.str.5 +.L.str.5: + .asciz "%c" + .size .L.str.5, 3 + + .type .L.str.6,@object # @.str.6 +.L.str.6: + .asciz "%s\n" + .size .L.str.6, 4 + + .type .L.str.7,@object # @.str.7 +.L.str.7: + .asciz "%d\n" + .size .L.str.7, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype vprintf, i32, i32, i32 diff --git a/src/binaryen/test/torture-s/vrp-1.c.s b/src/binaryen/test/torture-s/vrp-1.c.s new file mode 100644 index 0000000000..75d4a06b6a --- /dev/null +++ b/src/binaryen/test/torture-s/vrp-1.c.s @@ -0,0 +1,35 @@ + .text + .file "vrp-1.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, -2 + i32.ne $push1=, $0, $pop0 + # fallthrough-return: $pop1 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/vrp-2.c.s b/src/binaryen/test/torture-s/vrp-2.c.s new file mode 100644 index 0000000000..6155385c87 --- /dev/null +++ b/src/binaryen/test/torture-s/vrp-2.c.s @@ -0,0 +1,50 @@ + .text + .file "vrp-2.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $1=, 1 + block + i32.const $push4=, 2 + i32.eq $push0=, $0, $pop4 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.then + i32.const $push1=, 31 + i32.shr_s $push7=, $0, $pop1 + tee_local $push6=, $1=, $pop7 + i32.add $push2=, $0, $pop6 + i32.xor $push3=, $pop2, $1 + i32.const $push5=, 2 + i32.ne $1=, $pop3, $pop5 +.LBB0_2: # %return + end_block # label0: + copy_local $push8=, $1 + # fallthrough-return: $pop8 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/vrp-3.c.s b/src/binaryen/test/torture-s/vrp-3.c.s new file mode 100644 index 0000000000..13f6ffbb08 --- /dev/null +++ b/src/binaryen/test/torture-s/vrp-3.c.s @@ -0,0 +1,52 @@ + .text + .file "vrp-3.c" + .section .text.f,"ax",@progbits + .hidden f # -- Begin function f + .globl f + .type f,@function +f: # @f + .param i32 + .result i32 + .local i32 +# BB#0: # %entry + i32.const $1=, 1 + block + i32.const $push0=, 14 + i32.add $push1=, $0, $pop0 + i32.const $push2=, 25 + i32.gt_u $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %if.then2 + i32.const $push4=, 31 + i32.shr_s $push9=, $0, $pop4 + tee_local $push8=, $1=, $pop9 + i32.add $push5=, $0, $pop8 + i32.xor $push6=, $pop5, $1 + i32.const $push7=, 2 + i32.ne $1=, $pop6, $pop7 +.LBB0_2: # %return + end_block # label0: + copy_local $push10=, $1 + # fallthrough-return: $pop10 + .endfunc +.Lfunc_end0: + .size f, .Lfunc_end0-f + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %if.end + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/vrp-4.c.s b/src/binaryen/test/torture-s/vrp-4.c.s new file mode 100644 index 0000000000..0d86304336 --- /dev/null +++ b/src/binaryen/test/torture-s/vrp-4.c.s @@ -0,0 +1,50 @@ + .text + .file "vrp-4.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32, i32 +# BB#0: # %entry + block + i32.const $push5=, 1 + i32.eq $push0=, $0, $pop5 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 1 + i32.eq $push1=, $1, $pop6 + br_if 0, $pop1 # 0: down to label0 +# BB#2: # %if.end3 + i32.div_s $push2=, $0, $1 + i32.const $push3=, 1 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#3: # %if.end6 + return +.LBB0_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/vrp-5.c.s b/src/binaryen/test/torture-s/vrp-5.c.s new file mode 100644 index 0000000000..a5e558bfd3 --- /dev/null +++ b/src/binaryen/test/torture-s/vrp-5.c.s @@ -0,0 +1,51 @@ + .text + .file "vrp-5.c" + .section .text.test,"ax",@progbits + .hidden test # -- Begin function test + .globl test + .type test,@function +test: # @test + .param i32, i32 +# BB#0: # %entry + block + i32.const $push5=, 4 + i32.le_u $push0=, $0, $pop5 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 4 + i32.le_u $push1=, $1, $pop6 + br_if 0, $pop1 # 0: down to label0 +# BB#2: # %if.end3 + i32.const $push2=, 0 + i32.sub $push3=, $pop2, $1 + i32.ne $push4=, $pop3, $0 + br_if 0, $pop4 # 0: down to label0 +# BB#3: # %if.end6 + return +.LBB0_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size test, .Lfunc_end0-test + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/vrp-6.c.s b/src/binaryen/test/torture-s/vrp-6.c.s new file mode 100644 index 0000000000..5a8ad2a395 --- /dev/null +++ b/src/binaryen/test/torture-s/vrp-6.c.s @@ -0,0 +1,83 @@ + .text + .file "vrp-6.c" + .section .text.test01,"ax",@progbits + .hidden test01 # -- Begin function test01 + .globl test01 + .type test01,@function +test01: # @test01 + .param i32, i32 +# BB#0: # %entry + block + i32.const $push5=, 4 + i32.le_u $push0=, $0, $pop5 + br_if 0, $pop0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 4 + i32.le_u $push1=, $1, $pop6 + br_if 0, $pop1 # 0: down to label0 +# BB#2: # %if.end3 + i32.sub $push2=, $0, $1 + i32.const $push3=, 5 + i32.ne $push4=, $pop2, $pop3 + br_if 0, $pop4 # 0: down to label0 +# BB#3: # %if.end6 + return +.LBB0_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size test01, .Lfunc_end0-test01 + # -- End function + .section .text.test02,"ax",@progbits + .hidden test02 # -- Begin function test02 + .globl test02 + .type test02,@function +test02: # @test02 + .param i32, i32 +# BB#0: # %entry + block + block + i32.const $push1=, 12 + i32.lt_u $push2=, $0, $pop1 + br_if 0, $pop2 # 0: down to label2 +# BB#1: # %entry + i32.const $push3=, 16 + i32.lt_u $push4=, $1, $pop3 + br_if 0, $pop4 # 0: down to label2 +# BB#2: # %entry + i32.sub $push0=, $0, $1 + i32.const $push5=, -17 + i32.le_u $push6=, $pop0, $pop5 + br_if 1, $pop6 # 1: down to label1 +.LBB1_3: # %if.end6 + end_block # label2: + return +.LBB1_4: # %if.then4 + end_block # label1: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size test02, .Lfunc_end1-test02 + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .param i32, i32 + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end2: + .size main, .Lfunc_end2-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/vrp-7.c.s b/src/binaryen/test/torture-s/vrp-7.c.s new file mode 100644 index 0000000000..9ad6539923 --- /dev/null +++ b/src/binaryen/test/torture-s/vrp-7.c.s @@ -0,0 +1,64 @@ + .text + .file "vrp-7.c" + .section .text.foo,"ax",@progbits + .hidden foo # -- Begin function foo + .globl foo + .type foo,@function +foo: # @foo + .param i32 +# BB#0: # %entry + i32.const $push4=, 0 + i32.const $push9=, 0 + i32.load8_u $push5=, t($pop9) + i32.const $push6=, 254 + i32.and $push7=, $pop5, $pop6 + i32.const $push0=, 4 + i32.shr_u $push1=, $0, $pop0 + i32.const $push2=, 1 + i32.and $push3=, $pop1, $pop2 + i32.or $push8=, $pop7, $pop3 + i32.store8 t($pop4), $pop8 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size foo, .Lfunc_end0-foo + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 16 + call foo@FUNCTION, $pop0 + block + i32.const $push4=, 0 + i32.load8_u $push1=, t($pop4) + i32.const $push2=, 1 + i32.and $push3=, $pop1, $pop2 + i32.eqz $push6=, $pop3 + br_if 0, $pop6 # 0: down to label0 +# BB#1: # %if.end + i32.const $push5=, 0 + return $pop5 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden t # @t + .type t,@object + .section .bss.t,"aw",@nobits + .globl t + .p2align 2 +t: + .skip 4 + .size t, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/wchar_t-1.c.s b/src/binaryen/test/torture-s/wchar_t-1.c.s new file mode 100644 index 0000000000..8676506086 --- /dev/null +++ b/src/binaryen/test/torture-s/wchar_t-1.c.s @@ -0,0 +1,60 @@ + .text + .file "wchar_t-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + block + i32.const $push7=, 0 + i32.load $push1=, x($pop7) + i32.const $push2=, 196 + i32.ne $push3=, $pop1, $pop2 + br_if 0, $pop3 # 0: down to label0 +# BB#1: # %entry + i32.const $push8=, 0 + i32.load $push0=, x+4($pop8) + br_if 0, $pop0 # 0: down to label0 +# BB#2: # %if.end + i32.const $push9=, 0 + i32.load $push4=, y($pop9) + i32.const $push5=, 196 + i32.ne $push6=, $pop4, $pop5 + br_if 0, $pop6 # 0: down to label0 +# BB#3: # %if.end4 + i32.const $push10=, 0 + call exit@FUNCTION, $pop10 + unreachable +.LBB0_4: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .hidden x # @x + .type x,@object + .section .data.x,"aw",@progbits + .globl x + .p2align 2 +x: + .int32 196 # 0xc4 + .int32 0 # 0x0 + .size x, 8 + + .hidden y # @y + .type y,@object + .section .data.y,"aw",@progbits + .globl y + .p2align 2 +y: + .int32 196 # 0xc4 + .size y, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/widechar-1.c.s b/src/binaryen/test/torture-s/widechar-1.c.s new file mode 100644 index 0000000000..ac58abb92b --- /dev/null +++ b/src/binaryen/test/torture-s/widechar-1.c.s @@ -0,0 +1,19 @@ + .text + .file "widechar-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + call exit@FUNCTION, $pop0 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/zero-struct-1.c.s b/src/binaryen/test/torture-s/zero-struct-1.c.s new file mode 100644 index 0000000000..7cbac054b8 --- /dev/null +++ b/src/binaryen/test/torture-s/zero-struct-1.c.s @@ -0,0 +1,95 @@ + .text + .file "zero-struct-1.c" + .section .text.h,"ax",@progbits + .hidden h # -- Begin function h + .globl h + .type h,@function +h: # @h +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push9=, 0 + i32.load $push1=, f($pop9) + i32.const $push2=, 2 + i32.add $push3=, $pop1, $pop2 + i32.store f($pop0), $pop3 + i32.const $push8=, 0 + i32.const $push7=, 0 + i32.load $push4=, ff($pop7) + i32.const $push6=, 2 + i32.add $push5=, $pop4, $pop6 + i32.store ff($pop8), $pop5 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size h, .Lfunc_end0-h + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32 +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push15=, 0 + i32.load $push1=, f($pop15) + i32.const $push2=, 2 + i32.add $push14=, $pop1, $pop2 + tee_local $push13=, $1=, $pop14 + i32.store f($pop0), $pop13 + i32.const $push12=, 0 + i32.const $push11=, 0 + i32.load $push3=, ff($pop11) + i32.const $push10=, 2 + i32.add $push9=, $pop3, $pop10 + tee_local $push8=, $0=, $pop9 + i32.store ff($pop12), $pop8 + block + i32.const $push7=, y+2 + i32.ne $push4=, $1, $pop7 + br_if 0, $pop4 # 0: down to label0 +# BB#1: # %if.end + i32.const $push16=, y+2 + i32.ne $push5=, $0, $pop16 + br_if 0, $pop5 # 0: down to label0 +# BB#2: # %if.end3 + i32.const $push6=, 0 + return $pop6 +.LBB1_3: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden y # @y + .type y,@object + .section .bss.y,"aw",@nobits + .globl y +y: + .skip 3 + .size y, 3 + + .hidden f # @f + .type f,@object + .section .data.f,"aw",@progbits + .globl f + .p2align 2 +f: + .int32 y + .size f, 4 + + .hidden ff # @ff + .type ff,@object + .section .data.ff,"aw",@progbits + .globl ff + .p2align 2 +ff: + .int32 y + .size ff, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/zero-struct-2.c.s b/src/binaryen/test/torture-s/zero-struct-2.c.s new file mode 100644 index 0000000000..b69184dbaa --- /dev/null +++ b/src/binaryen/test/torture-s/zero-struct-2.c.s @@ -0,0 +1,59 @@ + .text + .file "zero-struct-2.c" + .section .text.one_raw_spinlock,"ax",@progbits + .hidden one_raw_spinlock # -- Begin function one_raw_spinlock + .globl one_raw_spinlock + .type one_raw_spinlock,@function +one_raw_spinlock: # @one_raw_spinlock +# BB#0: # %entry + i32.const $push0=, 0 + i32.const $push4=, 0 + i32.load $push1=, ii($pop4) + i32.const $push2=, 1 + i32.add $push3=, $pop1, $pop2 + i32.store ii($pop0), $pop3 + # fallthrough-return + .endfunc +.Lfunc_end0: + .size one_raw_spinlock, .Lfunc_end0-one_raw_spinlock + # -- End function + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 + .local i32 +# BB#0: # %entry + i32.const $push5=, 0 + i32.const $push4=, 0 + i32.load $push3=, ii($pop4) + tee_local $push2=, $0=, $pop3 + i32.const $push0=, 1 + i32.add $push1=, $pop2, $pop0 + i32.store ii($pop5), $pop1 + block + br_if 0, $0 # 0: down to label0 +# BB#1: # %if.end + i32.const $push6=, 0 + return $pop6 +.LBB1_2: # %if.then + end_block # label0: + call abort@FUNCTION + unreachable + .endfunc +.Lfunc_end1: + .size main, .Lfunc_end1-main + # -- End function + .hidden ii # @ii + .type ii,@object + .section .bss.ii,"aw",@nobits + .globl ii + .p2align 2 +ii: + .int32 0 # 0x0 + .size ii, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype abort, void diff --git a/src/binaryen/test/torture-s/zerolen-1.c.s b/src/binaryen/test/torture-s/zerolen-1.c.s new file mode 100644 index 0000000000..68952dbc6e --- /dev/null +++ b/src/binaryen/test/torture-s/zerolen-1.c.s @@ -0,0 +1,44 @@ + .text + .file "zerolen-1.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %if.then + i32.const $push1=, 0 + i32.const $push0=, 1 + i32.store16 entry($pop1):p2align=0, $pop0 + i32.const $push2=, 0 + call exit@FUNCTION, $pop2 + unreachable + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + .section .text.set,"ax",@progbits + .hidden set # -- Begin function set + .globl set + .type set,@function +set: # @set + .param i32 +# BB#0: # %entry + i32.const $push0=, 1 + i32.store16 0($0):p2align=0, $pop0 + # fallthrough-return + .endfunc +.Lfunc_end1: + .size set, .Lfunc_end1-set + # -- End function + .hidden entry # @entry + .type entry,@object + .section .bss.entry,"aw",@nobits + .globl entry +entry: + .skip 4 + .size entry, 4 + + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" + .functype exit, void, i32 diff --git a/src/binaryen/test/torture-s/zerolen-2.c.s b/src/binaryen/test/torture-s/zerolen-2.c.s new file mode 100644 index 0000000000..de3a64c538 --- /dev/null +++ b/src/binaryen/test/torture-s/zerolen-2.c.s @@ -0,0 +1,17 @@ + .text + .file "zerolen-2.c" + .section .text.main,"ax",@progbits + .hidden main # -- Begin function main + .globl main + .type main,@function +main: # @main + .result i32 +# BB#0: # %entry + i32.const $push0=, 0 + # fallthrough-return: $pop0 + .endfunc +.Lfunc_end0: + .size main, .Lfunc_end0-main + # -- End function + + .ident "clang version 6.0.0 (https://llvm.googlesource.com/clang.git a1774cccdccfa673c057f93ccf23bc2d8cb04932) (https://llvm.googlesource.com/llvm.git fc50e1c6121255333bc42d6faf2b524c074eae25)" diff --git a/src/binaryen/test/two_sides.asm.js b/src/binaryen/test/two_sides.asm.js new file mode 100644 index 0000000000..cb45ac6fa2 --- /dev/null +++ b/src/binaryen/test/two_sides.asm.js @@ -0,0 +1,30 @@ +Module["asm"] = (function(global, env, buffer) { + "use asm"; + var Math_imul = global.Math.imul; + function _test(i1, i2, i3, i4, i5) { + i1 = i1 | 0; + i2 = i2 | 0; + i3 = i3 | 0; + i4 = i4 | 0; + i5 = i5 | 0; + var d6 = 0.0; + if (!i5) { + d6 = +(Math_imul(i4, i3) | 0); + d6 = (+(i3 | 0) + d6) * (+(i4 | 0) + d6); + i5 = ~~d6; + return i5 | 0; + } else { + d6 = +(Math_imul(i2, i1) | 0); + d6 = (+(i3 | 0) + d6) * (d6 + +(i4 | 0)); + i5 = ~~d6; + return i5 | 0; + } + return 0; + } + return { + _test: _test + }; +}); + + + diff --git a/src/binaryen/test/two_sides.fromasm b/src/binaryen/test/two_sides.fromasm new file mode 100644 index 0000000000..49f68a7ffe --- /dev/null +++ b/src/binaryen/test/two_sides.fromasm @@ -0,0 +1,62 @@ +(module + (type $FUNCSIG$id (func (param f64) (result i32))) + (import "asm2wasm" "f64-to-int" (func $f64-to-int (param f64) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (data (get_global $memoryBase) "two_sides.asm.js") + (export "_test" (func $_test)) + (func $_test (; 1 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 f64) + (if (result i32) + (get_local $4) + (call $f64-to-int + (f64.mul + (f64.add + (f64.convert_s/i32 + (get_local $2) + ) + (tee_local $5 + (f64.convert_s/i32 + (i32.mul + (get_local $1) + (get_local $0) + ) + ) + ) + ) + (f64.add + (get_local $5) + (f64.convert_s/i32 + (get_local $3) + ) + ) + ) + ) + (call $f64-to-int + (f64.mul + (f64.add + (f64.convert_s/i32 + (get_local $2) + ) + (tee_local $5 + (f64.convert_s/i32 + (i32.mul + (get_local $3) + (get_local $2) + ) + ) + ) + ) + (f64.add + (f64.convert_s/i32 + (get_local $3) + ) + (get_local $5) + ) + ) + ) + ) + ) +) diff --git a/src/binaryen/test/two_sides.fromasm.clamp b/src/binaryen/test/two_sides.fromasm.clamp new file mode 100644 index 0000000000..6de1055d14 --- /dev/null +++ b/src/binaryen/test/two_sides.fromasm.clamp @@ -0,0 +1,86 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (data (get_global $memoryBase) "two_sides.asm.js") + (export "_test" (func $_test)) + (func $f64-to-int (; 0 ;) (param $0 f64) (result i32) + (if (result i32) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i32.const -2147483648) + (if (result i32) + (f64.ge + (get_local $0) + (f64.const 2147483648) + ) + (i32.const -2147483648) + (if (result i32) + (f64.le + (get_local $0) + (f64.const -2147483649) + ) + (i32.const -2147483648) + (i32.trunc_s/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $_test (; 1 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 f64) + (if (result i32) + (get_local $4) + (call $f64-to-int + (f64.mul + (f64.add + (f64.convert_s/i32 + (get_local $2) + ) + (tee_local $5 + (f64.convert_s/i32 + (i32.mul + (get_local $1) + (get_local $0) + ) + ) + ) + ) + (f64.add + (get_local $5) + (f64.convert_s/i32 + (get_local $3) + ) + ) + ) + ) + (call $f64-to-int + (f64.mul + (f64.add + (f64.convert_s/i32 + (get_local $2) + ) + (tee_local $5 + (f64.convert_s/i32 + (i32.mul + (get_local $3) + (get_local $2) + ) + ) + ) + ) + (f64.add + (f64.convert_s/i32 + (get_local $3) + ) + (get_local $5) + ) + ) + ) + ) + ) +) diff --git a/src/binaryen/test/two_sides.fromasm.clamp.no-opts b/src/binaryen/test/two_sides.fromasm.clamp.no-opts new file mode 100644 index 0000000000..ca9c343860 --- /dev/null +++ b/src/binaryen/test/two_sides.fromasm.clamp.no-opts @@ -0,0 +1,112 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "_test" (func $_test)) + (func $f64-to-int (; 0 ;) (param $0 f64) (result i32) + (if (result i32) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i32.const -2147483648) + (if (result i32) + (f64.ge + (get_local $0) + (f64.const 2147483648) + ) + (i32.const -2147483648) + (if (result i32) + (f64.le + (get_local $0) + (f64.const -2147483649) + ) + (i32.const -2147483648) + (i32.trunc_s/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $_test (; 1 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (param $i4 i32) (param $i5 i32) (result i32) + (local $d6 f64) + (if + (i32.eqz + (get_local $i5) + ) + (block + (set_local $d6 + (f64.convert_s/i32 + (i32.mul + (get_local $i4) + (get_local $i3) + ) + ) + ) + (set_local $d6 + (f64.mul + (f64.add + (f64.convert_s/i32 + (get_local $i3) + ) + (get_local $d6) + ) + (f64.add + (f64.convert_s/i32 + (get_local $i4) + ) + (get_local $d6) + ) + ) + ) + (set_local $i5 + (call $f64-to-int + (get_local $d6) + ) + ) + (return + (get_local $i5) + ) + ) + (block + (set_local $d6 + (f64.convert_s/i32 + (i32.mul + (get_local $i2) + (get_local $i1) + ) + ) + ) + (set_local $d6 + (f64.mul + (f64.add + (f64.convert_s/i32 + (get_local $i3) + ) + (get_local $d6) + ) + (f64.add + (get_local $d6) + (f64.convert_s/i32 + (get_local $i4) + ) + ) + ) + ) + (set_local $i5 + (call $f64-to-int + (get_local $d6) + ) + ) + (return + (get_local $i5) + ) + ) + ) + (return + (i32.const 0) + ) + ) +) diff --git a/src/binaryen/test/two_sides.fromasm.imprecise b/src/binaryen/test/two_sides.fromasm.imprecise new file mode 100644 index 0000000000..1bd9a6ab45 --- /dev/null +++ b/src/binaryen/test/two_sides.fromasm.imprecise @@ -0,0 +1,59 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "_test" (func $_test)) + (func $_test (; 0 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 f64) + (if (result i32) + (get_local $4) + (i32.trunc_s/f64 + (f64.mul + (f64.add + (f64.convert_s/i32 + (get_local $2) + ) + (tee_local $5 + (f64.convert_s/i32 + (i32.mul + (get_local $1) + (get_local $0) + ) + ) + ) + ) + (f64.add + (get_local $5) + (f64.convert_s/i32 + (get_local $3) + ) + ) + ) + ) + (i32.trunc_s/f64 + (f64.mul + (f64.add + (f64.convert_s/i32 + (get_local $2) + ) + (tee_local $5 + (f64.convert_s/i32 + (i32.mul + (get_local $3) + (get_local $2) + ) + ) + ) + ) + (f64.add + (f64.convert_s/i32 + (get_local $3) + ) + (get_local $5) + ) + ) + ) + ) + ) +) diff --git a/src/binaryen/test/two_sides.fromasm.imprecise.no-opts b/src/binaryen/test/two_sides.fromasm.imprecise.no-opts new file mode 100644 index 0000000000..40a5f6a957 --- /dev/null +++ b/src/binaryen/test/two_sides.fromasm.imprecise.no-opts @@ -0,0 +1,86 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "_test" (func $_test)) + (func $_test (; 0 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (param $i4 i32) (param $i5 i32) (result i32) + (local $d6 f64) + (if + (i32.eqz + (get_local $i5) + ) + (block + (set_local $d6 + (f64.convert_s/i32 + (i32.mul + (get_local $i4) + (get_local $i3) + ) + ) + ) + (set_local $d6 + (f64.mul + (f64.add + (f64.convert_s/i32 + (get_local $i3) + ) + (get_local $d6) + ) + (f64.add + (f64.convert_s/i32 + (get_local $i4) + ) + (get_local $d6) + ) + ) + ) + (set_local $i5 + (i32.trunc_s/f64 + (get_local $d6) + ) + ) + (return + (get_local $i5) + ) + ) + (block + (set_local $d6 + (f64.convert_s/i32 + (i32.mul + (get_local $i2) + (get_local $i1) + ) + ) + ) + (set_local $d6 + (f64.mul + (f64.add + (f64.convert_s/i32 + (get_local $i3) + ) + (get_local $d6) + ) + (f64.add + (get_local $d6) + (f64.convert_s/i32 + (get_local $i4) + ) + ) + ) + ) + (set_local $i5 + (i32.trunc_s/f64 + (get_local $d6) + ) + ) + (return + (get_local $i5) + ) + ) + ) + (return + (i32.const 0) + ) + ) +) diff --git a/src/binaryen/test/two_sides.fromasm.no-opts b/src/binaryen/test/two_sides.fromasm.no-opts new file mode 100644 index 0000000000..103b3b9e07 --- /dev/null +++ b/src/binaryen/test/two_sides.fromasm.no-opts @@ -0,0 +1,88 @@ +(module + (type $FUNCSIG$id (func (param f64) (result i32))) + (import "asm2wasm" "f64-to-int" (func $f64-to-int (param f64) (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "_test" (func $_test)) + (func $_test (; 1 ;) (param $i1 i32) (param $i2 i32) (param $i3 i32) (param $i4 i32) (param $i5 i32) (result i32) + (local $d6 f64) + (if + (i32.eqz + (get_local $i5) + ) + (block + (set_local $d6 + (f64.convert_s/i32 + (i32.mul + (get_local $i4) + (get_local $i3) + ) + ) + ) + (set_local $d6 + (f64.mul + (f64.add + (f64.convert_s/i32 + (get_local $i3) + ) + (get_local $d6) + ) + (f64.add + (f64.convert_s/i32 + (get_local $i4) + ) + (get_local $d6) + ) + ) + ) + (set_local $i5 + (call $f64-to-int + (get_local $d6) + ) + ) + (return + (get_local $i5) + ) + ) + (block + (set_local $d6 + (f64.convert_s/i32 + (i32.mul + (get_local $i2) + (get_local $i1) + ) + ) + ) + (set_local $d6 + (f64.mul + (f64.add + (f64.convert_s/i32 + (get_local $i3) + ) + (get_local $d6) + ) + (f64.add + (get_local $d6) + (f64.convert_s/i32 + (get_local $i4) + ) + ) + ) + ) + (set_local $i5 + (call $f64-to-int + (get_local $d6) + ) + ) + (return + (get_local $i5) + ) + ) + ) + (return + (i32.const 0) + ) + ) +) diff --git a/src/binaryen/test/unit.asm.js b/src/binaryen/test/unit.asm.js new file mode 100644 index 0000000000..82b6bdcd1f --- /dev/null +++ b/src/binaryen/test/unit.asm.js @@ -0,0 +1,800 @@ +function asm(global, env, buffer) { + "use asm"; + + var t = global.NaN, u = global.Infinity; + var Int = 0; + var Double = 0.0; + var Math_fround = global.Math.fround; + var Math_abs = global.Math.abs; + var Math_ceil = global.Math.ceil; + var Math_max = global.Math.max; + var Math_min = global.Math.min; + var Math_sqrt = global.Math.sqrt; + var tempDoublePtr = env.tempDoublePtr | 0; + var n = env.gb | 0; + var STACKTOP = env.STACKTOP | 0; + var setTempRet0=env.setTempRet0; + + var abort = env.abort; + var print = env.print; + var h = env.h; + var return_int = env.return_int; + var emscripten_log = env.emscripten_log; + + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + + function big_negative() { + var temp = 0.0; + temp = +-2147483648; + temp = -2147483648.0; + temp = -21474836480.0; + temp = 0.039625; + temp = -0.039625; + } + function importedDoubles() { + var temp = 0.0; + temp = t + u + (-u) + (-t); + if ((Int | 0) > 0) return -3.4; + if (Double > 0.0) return 5.6; + return 1.2; + } + function doubleCompares(x, y) { + x = +x; + y = +y; + var t = 0.0; + var Int = 0.0, Double = 0; // confusing with globals + if (x > 0.0) return 1.2; + Int = x; + Double = n; + if (Int > 0.0) return -3.4; + if ((Double|0) > 0) return 5.6; + if (x < y) return +x; + return +y; + } + function intOps(x) { + x = x | 0; + return (!x) | 0; + } + function hexLiterals() { + var i = 0; + i = 0x0 + 0x12ABCdef + 0xFEDcba90 | 0; + } + function conversions(i, d, f) { + i = i | 0; + d = +d; + f = Math_fround(f); + i = ~~d; + i = ~~f; + d = +(i | 0); + d = +(i >>> 0); + } + function seq() { + var J = 0.0; + J = (0.1, 5.1) - (3.2, 4.2); + } + function switcher(x) { + x = x | 0; + var waka = 0; + switch (x | 0) { + case 1: return 1; + case 2: return 2; + } + switch (x | 0) { + case 12: return 121; + case 5: return 51; + } + Lout: switch (x | 0) { + case 12: break; + case 10: break Lout; + case 5: { + while (1) { + break; + } + break; + } + case 2: { + while (1) { + break Lout; + } + break; + } + } + + L1 : while (1) { + L3 : while (1) switch (x | 0) { + case -1: + { + break L1; + break; + } + case 116: + { + waka = 1; + break; + } + case 110: + { + break L3; + break; + } + default: + { + break L1; + } + } + h(120); + } + + return 0; + } + function blocker() { + L: { + break L; + } + } + function frem() { + return +(5.5 % 1.2); + } + function frem_float() { + return Math_fround(Math_fround(5.5) % Math_fround(1.2)); + } + function big_uint_div_u() { + var x = 0; + x = (4294967295 / 2)&-1; + return x | 0; + } + function trapping_sint_div_s() { + var x = 0; + x = (-2147483648 / -1); + return x | 0; + } + function fr(x) { + x = Math_fround(x); + var y = Math_fround(0), z = 0.0; + Math_fround(z); + Math_fround(y); + Math_fround(5); + Math_fround(0); + Math_fround(5.0); + Math_fround(0.0); + } + function negZero() { + return +-0; + } + function abs() { + var x = 0, y = 0.0, z = Math_fround(0); + x = Math_abs(0) | 0; + y = +Math_abs(0.0); + z = Math_fround(Math_abs(Math_fround(0))); + } + function minmax() { + var x = 0.0, y = 0.0, z = Math_fround(0), w = Math_fround(0); + x = +Math_min(+x, +y); + y = +Math_max(+x, +y); + z = Math_fround(Math_min(Math_fround(z), Math_fround(w))); + w = Math_fround(Math_max(Math_fround(z), Math_fround(w))); + } + function neg() { + var x = Math_fround(0); + x = Math_fround(-x); + FUNCTION_TABLE_c[1 & 7](x); + } + function cneg(x) { + x = Math_fround(x); + FUNCTION_TABLE_c[1 & 7](x); + } + function ___syscall_ret() { + var $0 = 0; + ($0>>>0) > 4294963200; // -4096 + } + function smallCompare(i, j) { + i = i | 0; + j = j | 0; + if ((i | 0) < (j | 0)) i = i + 1 | 0; + if ((i >>> 0) < (j >>> 0)) i = i + 1 | 0; + return i | 0; + } + function cneg_nosemicolon() { + FUNCTION_TABLE_vi[1 & 7](1) // no semicolon + } + function forLoop() { + var i = 0; + for (i = 1; (i | 0) < 200; i = i + 1 | 0) { + h(i | 0); + } + } + function ceiling_32_64(u, B) { + u = Math_fround(u); + B = +B; + var temp = Math_fround(0); + temp = Math_fround(Math_ceil(B)); + temp = Math_fround(u * Math_fround(Math_ceil(Math_fround(B)))); + } + function aborts() { + abort(); + abort(55); + abort(); + abort(12.34); + abort(+Math_fround(56.78)); + } + function continues() { + while (1) { + print(1); + do { + print(5); + if (return_int() | 0) continue; + } while (0); + print(2); + } + } + function bitcasts(i, f) { + i = i | 0; + f = Math_fround(f); + var d = 0.0; + (HEAP32[tempDoublePtr >> 2] = i, Math_fround(HEAPF32[tempDoublePtr >> 2])); // i32->f32 + (HEAP32[tempDoublePtr >> 2] = i, +HEAPF32[tempDoublePtr >> 2]); // i32->f32, no fround + (HEAPF32[tempDoublePtr >> 2] = f, HEAP32[tempDoublePtr >> 2] | 0); // f32->i32 + (HEAPF32[tempDoublePtr >> 2] = d, HEAP32[tempDoublePtr >> 2] | 0); // f64 with implict f32 conversion, ->i32 + } + function recursiveBlockMerging(x) { + x = x | 0; + lb((1, x) + (2, 3) + (((4, 5), 6), 7) + (8, (9, (10, (11, 12)))) | 0) | 0; + x = (lb(1) | 0, x) + (lb(2) | 0, lb(3) | 0) + (((lb(4) | 0, lb(5) | 0), lb(6) | 0), lb(7) | 0) + (lb(8) | 0, (lb(9) | 0, (lb(10) | 0, (lb(11) | 0, lb(12) | 0)))) | 0; + return x | 0; + } + + function lb(a) { + a = a | 0; + HEAP32[a >> 2] = n + 136 + 8; + return 0; + } + + function forgetMe() { + 123.456; + } + function exportMe() { + -3.14159; + } + + function zeroInit(x) { + x = x | 0; + var y = 0; // reusing this with x is dangerous - x has a value, and y needs to start at 0! + if (lb(0) | 0) { + if (lb(1) | 0) y = 3; + } else { + y = 3; + } + if ((y | 0) == 3) { + lb(2) | 0; + } + } + + function phi() { + var x = 0; + do { + if (lb(1) | 0) { + x = 0; + break; + } + x = 1; + } while (0); + return x | 0; + } + + function smallIf() { + do { + if (return_int() | 0) { + lb(3) | 0; + } else { + break; + } + } while (0); + } + + function dropCall() { + if (return_int() | 0) { + phi() | 0; // drop this + setTempRet0(10); // this too + zeroInit(setTempRet0(10) | 0); + } + return phi() | 0; + } + + function useSetGlobal() { + var x = 0; + x = (Int = 10); + Int = 20; + return (Int = 30) | 0; + } + + function usesSetGlobal2() { + return (Int = 40, 50) | 0; + } + + function breakThroughMany($s) { + $s = $s|0; + L1: do { + if ($s) { + while(1) { + if (!($s)) { + break L1; + } + zeroInit(0); + } + } else { + 1337; + } + } while(0); + } + + function ifChainEmpty(label) { + label = label | 0; + if ((label|0) == 4) { + return 0; + } + else if ((label|0) == 7) { + // unreachable; + } + return 0; + } + + function heap8NoShift(x) { + x = x | 0; + return HEAP8[x | 0] | 0; + } + + function conditionalTypeFun() { + var x = 0, y = 0.0; + x = return_int() | 0 ? abort(5) | 0 : 2; + y = return_int() | 0 ? +abort(7) : 4.5; + } + + function loadSigned(x) { + x = x | 0; + loadSigned(HEAP8[x >> 0] << 24 >> 24); + loadSigned(HEAPU8[x >> 0] << 24 >> 24); + loadSigned(HEAP16[x >> 1] << 16 >> 16); + loadSigned(HEAPU16[x >> 1] << 16 >> 16); + loadSigned(HEAP8[x >> 0] << 24 >> 16); + loadSigned(HEAPU8[x >> 0] << 16 >> 24); + loadSigned(HEAP16[x >> 1] << 16 >> 24); + loadSigned(HEAPU16[x >> 1] << 24 >> 16); + } + + function z(x) { + x = Math_fround(x); + } + function w() { + return 0.0; + } + + function globalOpts() { + var x = 0, y = 0.0; + x = Int; + y = Double; + HEAP8[13] = HEAP32[3]; // access memory, should not confuse the global writes + Double = y; + Int = x; + globalOpts(); + x = Int; + if (return_int() | 0) Int = 20; // but this does interfere + Int = x; + globalOpts(); + x = Int; + globalOpts(); // this too + Int = x; + } + + function dropCallImport() { + if (return_int() | 0) return_int() | 0; + } + + function loophi(x, y) { + x = x | 0; + y = y | 0; + var temp = 0, inc = 0, loopvar = 0; // this order matters + loopvar = x; + while(1) { + loophi(loopvar | 0, 0); + temp = loopvar; + if (temp) { + if (temp) { + break; + } + } + inc = loopvar + 1 | 0; + if ((inc|0) == (y|0)) { + loopvar = inc; + } else { + break; + } + } + } + + function loophi2() { + var jnc = 0, i = 0, i$lcssa = 0, temp = 0, j = 0; + i = 0; + L7: while(1) { + j = 0; + while(1) { + temp = j; + if (return_int() | 0) { + if (temp) { + i$lcssa = i; + break L7; + } + } + jnc = j + 1 | 0; + if (jnc) { + j = jnc; + } else { + break; + } + } + } + return i$lcssa | 0 + } + + function loophi2b() { + var jnc = 0, i = 0, i$lcssa = 0, temp = 0, j = 0; + i = 0; + L7: while(1) { + j = 0; + while(1) { + temp = j; + if (return_int() | 0) { + if (temp) { + i$lcssa = j; + break L7; + } + } + jnc = j + 1 | 0; + if (jnc) { + j = jnc; + } else { + break; + } + } + } + return i$lcssa | 0 + } + + function relooperJumpThreading(x) { + x = x | 0; + var label = 0; + // from if + if (x) { + h(0); + label = 1; + } + if ((label|0) == 1) { + h(1); + } + h(-1); + // from loop + while (1) { + x = x + 1 | 0; + if (x) { + h(2); + label = 2; + break; + } + } + if ((label|0) == 2) { + h(3); + } + h(-2); + // if-else afterward + if (x) { + h(4); + if ((x|0) == 3) { + label = 3; + } else { + label = 4; + } + } + if ((label|0) == 3) { + h(5); + } else if ((label|0) == 4) { + h(6); + } + h(-3); + // two ifs afterward + if (x) { + h(7); + if ((x|0) == 5) { + label = 5; + } else { + label = 6; + } + } + if ((label|0) == 5) { + h(8); + if ((x|0) == 6) { + label = 6; + } + } + if ((label|0) == 6) { + h(9); + } + h(-4); + // labeled if after + if (x) { + h(10); + label = 7; + } + L1: do { + if ((label|0) == 7) { + h(11); + break L1; + } + } while (0); + h(-5); + // labeled if after normal if + if (x) { + h(12); + if ((x|0) == 8) { + label = 8; + } else { + label = 9; + } + } + if ((label|0) == 8) { + h(13); + if (x) label = 9; + } + L1: do { + if ((label|0) == 9) { + h(14); + break L1; + } + } while (0); + h(-6); + // TODO + // labeled if after a first if + // do-enclosed if after (?) + // test multiple labels, some should be ignored initially by JumpUpdater + return x | 0; + } + + function relooperJumpThreading__ZN4game14preloadweaponsEv($12, $14, $or$cond8, $or$cond6, $vararg_ptr5, $11, $exitcond) { + $12 = $12 | 0; + $14 = $14 | 0; + $or$cond8 = $or$cond8 | 0; + $or$cond6 = $or$cond6 | 0; + $vararg_ptr5 = $vararg_ptr5 | 0; + $11 = $11 | 0; + $exitcond = $exitcond | 0; + var label = 0; + while(1) { + if ($14) { + if ($or$cond8) { + label = 7; + } else { + label = 8; + } + } else { + if ($or$cond6) { + label = 7; + } else { + label = 8; + } + } + if ((label|0) == 7) { + label = 0; + } + else if ((label|0) == 8) { + label = 0; + HEAP32[$vararg_ptr5>>2] = $11; + } + } + } + + function relooperJumpThreading_irreducible(x) { + x = x | 0; + var label = 0; + if ((x|0) == 100) { + label = 1; + } else { + label = 10; + } + if ((label|0) == 1) { + while (1) { + relooperJumpThreading_irreducible(1337); + label = 1; // this is ok - the if means the body of the if begins with the block for 1. so a setting inside the body of the if must return to the top of the if + } + } + // too many settings, we just look one back, so this one will not be optimized + if ((x|0) == 200) { + label = 2; + } else { + label = 10; + } + if ((x|0) == 300) { + label = 2; + } + if ((label|0) == 2) { + relooperJumpThreading_irreducible(1448); + } + if ((label|0) == 10) { + relooperJumpThreading_irreducible(2000); + } + } + + function __Z12multi_varargiz($0, $$06$i4, $exitcond$i6, $2) { + $0 = $0|0; + $$06$i4 = $$06$i4 | 0; + $exitcond$i6 = $exitcond$i6 | 0; + $2 = $2 | 0; + var $12 = 0, $20 = 0; + if ($2) { + while(1) { + $12 = $$06$i4; + if ($exitcond$i6) { + break; + } else { + $$06$i4 = $20; + } + } + } else { + lb(1) | 0; // returns a value, and the while is unreachable + } + } + + function jumpThreadDrop() { + var label = 0, temp = 0; + temp = return_int() | 0; + while (1) { + label = 14; + break; + } + if ((label | 0) == 10) { + } else if ((label | 0) == 12) { + return_int() | 0; // drop in the middle of an if-else chain for threading + } else if ((label | 0) == 14) { + } + return temp | 0; + } + + function dropIgnoredImportInIf($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + do { + if ($0) { + $0 = 1; + lb($2 | 0) | 0; + } else { + break; + } + } while(0); + return; + } + + function big_fround() { + return Math_fround(4294967295); + } + + function dropIgnoredImportsInIf($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + do { + if ($0) { + lb($1 | 0) | 0; + } else { + lb($2 | 0) | 0; + } + } while(0); + return; + } + + function f32_ucast(x) { + x = x | 0; + return Math_fround(x>>>0); + } + function f32_scast(x) { + x = x | 0; + return Math_fround(x|0); + } + + function store_fround(x) { + x = x | 0; + HEAPF64[10] = Math_fround(x|0); + } + + function relocatableAndModules() { + ftCall_v(10); // function table call + mftCall_v(20); // possible inter-module function table call + return ftCall_idi(30, 1.5, 200) | 0; // with args + } + + function exported_f32_user(x, y, z) { + x = x | 0; + y = Math_fround(y); + z = +z; + return Math_fround(y); + } + + function sqrts(x) { + x = +x; + return +(+Math_sqrt(x) + +Math_fround(Math_sqrt(Math_fround(x)))); + } + + function f2u(x) { + x = +x; + return (~~x>>>0) | 0; + } + function f2s(x) { + x = +x; + return (~~x) | 0; + } + + function autoDrop(x) { + x = x | 0; + while (1) { + if ((x | 0) == 17) { + return 5; + autoDrop(1) | 0; + } else { + break; + x = autoDrop(2) | 0; + } + } + return x | 0; + } + + function indirectInSequence() { + var i1 = 0; + // this indirect call should have the right type, vi + i1 = (FUNCTION_TABLE_vi[1 & 7](0), 1); + } + + function emterpretify_assertions_safeHeap() { + var i1 = 0; + // assignment into the function table param, optimizer can do things there + FUNCTION_TABLE_vi[(Int = 1) & 7](i1 | 0); + } + + function call_emscripten_log() { + // emscripten_log has no return value, don't let the conditional after the comma confuse you + emscripten_log(), 2 ? abort() | 0 : 3; + } + + function keepAlive() { + sqrts(3.14159); + sqrts(2.18281); // don't inline it either + f2u(100.0); + f2s(100.0); + autoDrop(52) | 0; + indirectInSequence(); + emterpretify_assertions_safeHeap(); + call_emscripten_log(); + } + + function v() { + } + function vi(x) { + x = x | 0; + } + function ii(x) { + x = x | 0; + return x | 0; + } + + var FUNCTION_TABLE_a = [ v, big_negative, v, v ]; + var FUNCTION_TABLE_b = [ w, w, importedDoubles, w ]; + var FUNCTION_TABLE_c = [ z, cneg, z, z, z, z, z, z ]; + var FUNCTION_TABLE_vi = [ vi, vi, vi, vi, vi, vi, vi, vi ]; + var FUNCTION_TABLE_ii = [ ii ]; + + return { big_negative: big_negative, pick: forgetMe, pick: exportMe, doubleCompares: doubleCompares, intOps: intOps, conversions: conversions, switcher: switcher, frem: frem, frem_float: frem_float, big_uint_div_u: big_uint_div_u, trapping_sint_div_s: trapping_sint_div_s, fr: fr, negZero: negZero, neg: neg, smallCompare: smallCompare, cneg_nosemicolon: cneg_nosemicolon, forLoop: forLoop, ceiling_32_64: ceiling_32_64, aborts: aborts, continues: continues, bitcasts: bitcasts, recursiveBlockMerging: recursiveBlockMerging, lb: lb, zeroInit: zeroInit, phi: phi, smallIf: smallIf, dropCall: dropCall, useSetGlobal: useSetGlobal, usesSetGlobal2: usesSetGlobal2, breakThroughMany: breakThroughMany, ifChainEmpty: ifChainEmpty, heap8NoShift: heap8NoShift, conditionalTypeFun: conditionalTypeFun, loadSigned: loadSigned, globalOpts: globalOpts, dropCallImport: dropCallImport, loophi: loophi, loophi2: loophi2, loophi2b: loophi2b, relooperJumpThreading: relooperJumpThreading, relooperJumpThreading__ZN4game14preloadweaponsEv: relooperJumpThreading__ZN4game14preloadweaponsEv, __Z12multi_varargiz: __Z12multi_varargiz, jumpThreadDrop: jumpThreadDrop, dropIgnoredImportInIf: dropIgnoredImportInIf, dropIgnoredImportsInIf: dropIgnoredImportsInIf, relooperJumpThreading_irreducible: relooperJumpThreading_irreducible, store_fround: store_fround, exportedNumber: 42, relocatableAndModules: relocatableAndModules, exported_f32_user: exported_f32_user, keepAlive: keepAlive }; +} + diff --git a/src/binaryen/test/unit.fromasm b/src/binaryen/test/unit.fromasm new file mode 100644 index 0000000000..c890b3a559 --- /dev/null +++ b/src/binaryen/test/unit.fromasm @@ -0,0 +1,1277 @@ +(module + (type $FUNCSIG$id (func (param f64) (result i32))) + (type $FUNCSIG$ddd (func (param f64 f64) (result f64))) + (type $FUNCSIG$vf (func (param f32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$idi (func (param f64 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$dd (func (param f64) (result f64))) + (type $FUNCSIG$i (func (result i32))) + (import "env" "gb" (global $n$asm2wasm$import i32)) + (import "env" "setTempRet0" (func $setTempRet0 (param i32) (result i32))) + (import "env" "abort" (func $abort (param f64) (result f64))) + (import "env" "print" (func $print (param i32))) + (import "env" "h" (func $h (param i32))) + (import "env" "return_int" (func $return_int (result i32))) + (import "env" "emscripten_log" (func $emscripten_log)) + (import "asm2wasm" "f64-to-int" (func $f64-to-int (param f64) (result i32))) + (import "asm2wasm" "f64-rem" (func $f64-rem (param f64 f64) (result f64))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 25 25 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $Int (mut i32) (i32.const 0)) + (global $Double (mut f64) (f64.const 0)) + (global $n (mut i32) (get_global $n$asm2wasm$import)) + (global $exportedNumber i32 (i32.const 42)) + (elem (get_global $tableBase) $big_negative $big_negative $big_negative $big_negative $w $w $importedDoubles $w $fr $cneg $fr $fr $fr $fr $fr $fr $vi $vi $vi $vi $vi $vi $vi $vi $ii) + (data (get_global $memoryBase) "unit.asm.js") + (export "big_negative" (func $big_negative)) + (export "pick" (func $big_negative)) + (export "doubleCompares" (func $doubleCompares)) + (export "intOps" (func $intOps)) + (export "conversions" (func $legalstub$conversions)) + (export "switcher" (func $switcher)) + (export "frem" (func $frem)) + (export "frem_float" (func $legalstub$frem_float)) + (export "big_uint_div_u" (func $big_uint_div_u)) + (export "trapping_sint_div_s" (func $trapping_sint_div_s)) + (export "fr" (func $legalstub$fr)) + (export "negZero" (func $negZero)) + (export "neg" (func $neg)) + (export "smallCompare" (func $smallCompare)) + (export "cneg_nosemicolon" (func $cneg_nosemicolon)) + (export "forLoop" (func $forLoop)) + (export "ceiling_32_64" (func $legalstub$ceiling_32_64)) + (export "aborts" (func $aborts)) + (export "continues" (func $continues)) + (export "bitcasts" (func $legalstub$bitcasts)) + (export "recursiveBlockMerging" (func $recursiveBlockMerging)) + (export "lb" (func $lb)) + (export "zeroInit" (func $zeroInit)) + (export "phi" (func $phi)) + (export "smallIf" (func $smallIf)) + (export "dropCall" (func $dropCall)) + (export "useSetGlobal" (func $useSetGlobal)) + (export "usesSetGlobal2" (func $usesSetGlobal2)) + (export "breakThroughMany" (func $breakThroughMany)) + (export "ifChainEmpty" (func $ifChainEmpty)) + (export "heap8NoShift" (func $heap8NoShift)) + (export "conditionalTypeFun" (func $conditionalTypeFun)) + (export "loadSigned" (func $loadSigned)) + (export "globalOpts" (func $globalOpts)) + (export "dropCallImport" (func $dropCallImport)) + (export "loophi" (func $loophi)) + (export "loophi2" (func $loophi2)) + (export "loophi2b" (func $loophi2b)) + (export "relooperJumpThreading" (func $relooperJumpThreading)) + (export "relooperJumpThreading__ZN4game14preloadweaponsEv" (func $relooperJumpThreading__ZN4game14preloadweaponsEv)) + (export "__Z12multi_varargiz" (func $__Z12multi_varargiz)) + (export "jumpThreadDrop" (func $jumpThreadDrop)) + (export "dropIgnoredImportInIf" (func $dropIgnoredImportInIf)) + (export "dropIgnoredImportsInIf" (func $dropIgnoredImportsInIf)) + (export "relooperJumpThreading_irreducible" (func $relooperJumpThreading_irreducible)) + (export "store_fround" (func $store_fround)) + (export "exportedNumber" (global $exportedNumber)) + (export "relocatableAndModules" (func $relocatableAndModules)) + (export "exported_f32_user" (func $legalstub$exported_f32_user)) + (export "keepAlive" (func $keepAlive)) + (func $big_negative (; 8 ;) + (nop) + ) + (func $importedDoubles (; 9 ;) (result f64) + (if + (i32.gt_s + (get_global $Int) + (i32.const 0) + ) + (return + (f64.const -3.4) + ) + ) + (if + (f64.gt + (get_global $Double) + (f64.const 0) + ) + (return + (f64.const 5.6) + ) + ) + (f64.const 1.2) + ) + (func $doubleCompares (; 10 ;) (param $0 f64) (param $1 f64) (result f64) + (if + (f64.gt + (get_local $0) + (f64.const 0) + ) + (return + (f64.const 1.2) + ) + ) + (if + (f64.gt + (get_local $0) + (f64.const 0) + ) + (return + (f64.const -3.4) + ) + ) + (if + (i32.gt_s + (get_global $n) + (i32.const 0) + ) + (return + (f64.const 5.6) + ) + ) + (if + (f64.lt + (get_local $0) + (get_local $1) + ) + (return + (get_local $0) + ) + ) + (get_local $1) + ) + (func $intOps (; 11 ;) (param $0 i32) (result i32) + (i32.eqz + (get_local $0) + ) + ) + (func $conversions (; 12 ;) (param $0 i32) (param $1 f64) (param $2 f32) + (drop + (call $f64-to-int + (get_local $1) + ) + ) + (drop + (call $f64-to-int + (f64.promote/f32 + (get_local $2) + ) + ) + ) + ) + (func $switcher (; 13 ;) (param $0 i32) (result i32) + (block $switch + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-case0 $switch + (i32.sub + (get_local $0) + (i32.const 1) + ) + ) + ) + (return + (i32.const 1) + ) + ) + (return + (i32.const 2) + ) + ) + (block $switch1 + (block $switch-case3 + (block $switch-case2 + (br_table $switch-case3 $switch1 $switch1 $switch1 $switch1 $switch1 $switch1 $switch-case2 $switch1 + (i32.sub + (get_local $0) + (i32.const 5) + ) + ) + ) + (return + (i32.const 121) + ) + ) + (return + (i32.const 51) + ) + ) + (block $switch-case9 + (block $switch-case4 + (br_table $switch-case9 $switch-case9 $switch-case9 $switch-case4 $switch-case9 $switch-case9 $switch-case9 $switch-case9 $switch-case4 $switch-case9 $switch-case4 $switch-case9 + (i32.sub + (get_local $0) + (i32.const 2) + ) + ) + ) + ) + (loop $label$continue$L1 + (block $label$break$L1 + (loop $label$continue$L3 + (block $label$break$L3 + (block $switch-default + (block $switch-case13 + (block $switch-case12 + (block $switch-case11 + (br_table $switch-case11 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case13 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case12 $switch-default + (i32.sub + (get_local $0) + (i32.const -1) + ) + ) + ) + (br $label$break$L1) + ) + (br $label$continue$L3) + ) + (br $label$break$L3) + ) + (br $label$break$L1) + ) + ) + (call $h + (i32.const 120) + ) + (br $label$continue$L1) + ) + ) + (i32.const 0) + ) + (func $frem (; 14 ;) (result f64) + (call $f64-rem + (f64.const 5.5) + (f64.const 1.2) + ) + ) + (func $frem_float (; 15 ;) (result f32) + (f32.demote/f64 + (call $f64-rem + (f64.const 5.5) + (f64.const 1.2000000476837158) + ) + ) + ) + (func $big_uint_div_u (; 16 ;) (result i32) + (i32.const 2147483647) + ) + (func $trapping_sint_div_s (; 17 ;) (result i32) + (i32.const 0) + ) + (func $fr (; 18 ;) (param $0 f32) + (nop) + ) + (func $negZero (; 19 ;) (result f64) + (f64.const -0) + ) + (func $neg (; 20 ;) + (local $0 f32) + (call_indirect (type $FUNCSIG$vf) + (f32.neg + (get_local $0) + ) + (i32.const 9) + ) + ) + (func $cneg (; 21 ;) (param $0 f32) + (call_indirect (type $FUNCSIG$vf) + (get_local $0) + (i32.const 9) + ) + ) + (func $smallCompare (; 22 ;) (param $0 i32) (param $1 i32) (result i32) + (if + (i32.lt_s + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (get_local $0) + ) + (func $cneg_nosemicolon (; 23 ;) + (call_indirect (type $FUNCSIG$vi) + (i32.const 1) + (i32.const 17) + ) + ) + (func $forLoop (; 24 ;) + (local $0 i32) + (set_local $0 + (i32.const 1) + ) + (loop $for-in + (if + (i32.lt_s + (get_local $0) + (i32.const 200) + ) + (block + (call $h + (get_local $0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $for-in) + ) + ) + ) + ) + (func $ceiling_32_64 (; 25 ;) (param $0 f32) (param $1 f64) + (nop) + ) + (func $aborts (; 26 ;) + (drop + (call $abort + (f64.const 0) + ) + ) + (drop + (call $abort + (f64.convert_s/i32 + (i32.const 55) + ) + ) + ) + (drop + (call $abort + (f64.const 0) + ) + ) + (drop + (call $abort + (f64.const 12.34) + ) + ) + (drop + (call $abort + (f64.const 56.779998779296875) + ) + ) + ) + (func $continues (; 27 ;) + (loop $while-in + (call $print + (i32.const 1) + ) + (loop $unlikely-continue + (call $print + (i32.const 5) + ) + (br_if $unlikely-continue + (call $return_int) + ) + ) + (call $print + (i32.const 2) + ) + (br $while-in) + ) + ) + (func $bitcasts (; 28 ;) (param $0 i32) (param $1 f32) + (nop) + ) + (func $recursiveBlockMerging (; 29 ;) (param $0 i32) (result i32) + (drop + (call $lb + (i32.add + (get_local $0) + (i32.const 22) + ) + ) + ) + (drop + (call $lb + (i32.const 1) + ) + ) + (drop + (call $lb + (i32.const 2) + ) + ) + (i32.add + (i32.add + (i32.add + (get_local $0) + (call $lb + (i32.const 3) + ) + ) + (block (result i32) + (drop + (call $lb + (i32.const 4) + ) + ) + (drop + (call $lb + (i32.const 5) + ) + ) + (drop + (call $lb + (i32.const 6) + ) + ) + (call $lb + (i32.const 7) + ) + ) + ) + (block (result i32) + (drop + (call $lb + (i32.const 8) + ) + ) + (drop + (call $lb + (i32.const 9) + ) + ) + (drop + (call $lb + (i32.const 10) + ) + ) + (drop + (call $lb + (i32.const 11) + ) + ) + (call $lb + (i32.const 12) + ) + ) + ) + ) + (func $lb (; 30 ;) (param $0 i32) (result i32) + (i32.store + (get_local $0) + (i32.add + (get_global $n) + (i32.const 144) + ) + ) + (i32.const 0) + ) + (func $zeroInit (; 31 ;) (param $0 i32) + (local $1 i32) + (if + (call $lb + (i32.const 0) + ) + (if + (call $lb + (i32.const 1) + ) + (set_local $1 + (i32.const 3) + ) + ) + (set_local $1 + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 3) + ) + (drop + (call $lb + (i32.const 2) + ) + ) + ) + ) + (func $phi (; 32 ;) (result i32) + (block $do-once (result i32) + (drop + (br_if $do-once + (i32.const 0) + (call $lb + (i32.const 1) + ) + ) + ) + (i32.const 1) + ) + ) + (func $smallIf (; 33 ;) + (if + (call $return_int) + (drop + (call $lb + (i32.const 3) + ) + ) + ) + ) + (func $dropCall (; 34 ;) (result i32) + (if + (call $return_int) + (block + (drop + (call $phi) + ) + (drop + (call $setTempRet0 + (i32.const 10) + ) + ) + (call $zeroInit + (call $setTempRet0 + (i32.const 10) + ) + ) + ) + ) + (call $phi) + ) + (func $useSetGlobal (; 35 ;) (result i32) + (set_global $Int + (i32.const 10) + ) + (set_global $Int + (i32.const 20) + ) + (set_global $Int + (i32.const 30) + ) + (get_global $Int) + ) + (func $usesSetGlobal2 (; 36 ;) (result i32) + (set_global $Int + (i32.const 40) + ) + (i32.const 50) + ) + (func $breakThroughMany (; 37 ;) (param $0 i32) + (block $label$break$L1 + (if + (get_local $0) + (loop $while-in + (br_if $label$break$L1 + (i32.eqz + (get_local $0) + ) + ) + (call $zeroInit + (i32.const 0) + ) + (br $while-in) + ) + ) + ) + ) + (func $ifChainEmpty (; 38 ;) (param $0 i32) (result i32) + (if + (i32.eq + (get_local $0) + (i32.const 4) + ) + (return + (i32.const 0) + ) + ) + (i32.const 0) + ) + (func $heap8NoShift (; 39 ;) (param $0 i32) (result i32) + (i32.load8_s + (get_local $0) + ) + ) + (func $conditionalTypeFun (; 40 ;) + (drop + (if (result i32) + (call $return_int) + (call $f64-to-int + (call $abort + (f64.convert_s/i32 + (i32.const 5) + ) + ) + ) + (i32.const 2) + ) + ) + (drop + (if (result f64) + (call $return_int) + (call $abort + (f64.convert_s/i32 + (i32.const 7) + ) + ) + (f64.const 4.5) + ) + ) + ) + (func $loadSigned (; 41 ;) (param $0 i32) + (call $loadSigned + (i32.load8_s + (get_local $0) + ) + ) + (call $loadSigned + (i32.load8_s + (get_local $0) + ) + ) + (call $loadSigned + (i32.load16_s + (get_local $0) + ) + ) + (call $loadSigned + (i32.load16_s + (get_local $0) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load8_s + (get_local $0) + ) + (i32.const 24) + ) + (i32.const 16) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load8_u + (get_local $0) + ) + (i32.const 16) + ) + (i32.const 24) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load16_s + (get_local $0) + ) + (i32.const 16) + ) + (i32.const 24) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load16_u + (get_local $0) + ) + (i32.const 24) + ) + (i32.const 16) + ) + ) + ) + (func $w (; 42 ;) (result f64) + (f64.const 0) + ) + (func $globalOpts (; 43 ;) + (local $0 i32) + (i32.store8 + (i32.const 13) + (i32.load + (i32.const 12) + ) + ) + (call $globalOpts) + (set_local $0 + (get_global $Int) + ) + (if + (call $return_int) + (set_global $Int + (i32.const 20) + ) + ) + (set_global $Int + (get_local $0) + ) + (call $globalOpts) + (set_local $0 + (get_global $Int) + ) + (call $globalOpts) + (set_global $Int + (get_local $0) + ) + ) + (func $dropCallImport (; 44 ;) + (if + (call $return_int) + (drop + (call $return_int) + ) + ) + ) + (func $loophi (; 45 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (loop $while-in + (block $while-out + (call $loophi + (get_local $0) + (i32.const 0) + ) + (if + (tee_local $2 + (get_local $0) + ) + (br_if $while-out + (get_local $2) + ) + ) + (br_if $while-in + (i32.eq + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (get_local $1) + ) + ) + ) + ) + ) + (func $loophi2 (; 46 ;) (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (i32.const 0) + ) + (loop $label$continue$L7 + (block $label$break$L7 + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (set_local $2 + (get_local $0) + ) + (if + (call $return_int) + (br_if $label$break$L7 + (get_local $2) + ) + ) + (br_if $while-in + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (br $label$continue$L7) + ) + ) + (get_local $1) + ) + (func $loophi2b (; 47 ;) (result i32) + (local $0 i32) + (local $1 i32) + (loop $label$continue$L7 + (block $label$break$L7 + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (set_local $1 + (get_local $0) + ) + (if + (call $return_int) + (br_if $label$break$L7 + (get_local $1) + ) + ) + (br_if $while-in + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (br $label$continue$L7) + ) + ) + (get_local $0) + ) + (func $relooperJumpThreading (; 48 ;) (param $0 i32) (result i32) + (block $__rjto$0 + (block $__rjti$0 + (if + (get_local $0) + (block + (call $h + (i32.const 0) + ) + (br $__rjti$0) + ) + ) + (br $__rjto$0) + ) + (call $h + (i32.const 1) + ) + ) + (call $h + (i32.const -1) + ) + (loop $while-in + (br_if $while-in + (i32.eqz + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (call $h + (i32.const 2) + ) + ) + (call $h + (i32.const 3) + ) + (call $h + (i32.const -2) + ) + (block $__rjto$3 + (block $__rjti$3 + (block $__rjti$2 + (if + (get_local $0) + (block + (call $h + (i32.const 4) + ) + (br_if $__rjti$2 + (i32.eq + (get_local $0) + (i32.const 3) + ) + ) + (br $__rjti$3) + ) + ) + (br $__rjto$3) + ) + (call $h + (i32.const 5) + ) + (br $__rjto$3) + ) + (call $h + (i32.const 6) + ) + ) + (call $h + (i32.const -3) + ) + (block $__rjto$5 + (block $__rjti$5 + (block $__rjti$4 + (if + (get_local $0) + (block + (call $h + (i32.const 7) + ) + (br_if $__rjti$4 + (i32.eq + (get_local $0) + (i32.const 5) + ) + ) + (br $__rjti$5) + ) + ) + (br $__rjto$5) + ) + (call $h + (i32.const 8) + ) + (br_if $__rjti$5 + (i32.eq + (get_local $0) + (i32.const 6) + ) + ) + (br $__rjto$5) + ) + (call $h + (i32.const 9) + ) + ) + (call $h + (i32.const -4) + ) + (block $label$break$L1 + (block $__rjti$6 + (if + (get_local $0) + (block + (call $h + (i32.const 10) + ) + (br $__rjti$6) + ) + ) + (br $label$break$L1) + ) + (call $h + (i32.const 11) + ) + ) + (call $h + (i32.const -5) + ) + (block $label$break$L10 + (block $__rjti$8 + (block $__rjti$7 + (if + (get_local $0) + (block + (call $h + (i32.const 12) + ) + (br_if $__rjti$7 + (i32.eq + (get_local $0) + (i32.const 8) + ) + ) + (br $__rjti$8) + ) + ) + (br $label$break$L10) + ) + (call $h + (i32.const 13) + ) + (br_if $__rjti$8 + (get_local $0) + ) + (br $label$break$L10) + ) + (call $h + (i32.const 14) + ) + ) + (call $h + (i32.const -6) + ) + (get_local $0) + ) + (func $relooperJumpThreading__ZN4game14preloadweaponsEv (; 49 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) + (loop $while-in + (block $__rjto$1 + (block $__rjti$1 + (if + (get_local $1) + (br_if $__rjti$1 + (i32.eqz + (get_local $2) + ) + ) + (br_if $__rjti$1 + (i32.eqz + (get_local $3) + ) + ) + ) + (br $while-in) + ) + (i32.store + (get_local $4) + (get_local $5) + ) + ) + (br $while-in) + ) + ) + (func $relooperJumpThreading_irreducible (; 50 ;) (param $0 i32) + (local $1 i32) + (if + (i32.eq + (get_local $0) + (i32.const 100) + ) + (loop $while-in + (call $relooperJumpThreading_irreducible + (i32.const 1337) + ) + (br $while-in) + ) + ) + (set_local $1 + (select + (i32.const 2) + (i32.const 10) + (i32.eq + (get_local $0) + (i32.const 200) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (i32.const 300) + ) + (set_local $1 + (i32.const 2) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 2) + ) + (call $relooperJumpThreading_irreducible + (i32.const 1448) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 10) + ) + (call $relooperJumpThreading_irreducible + (i32.const 2000) + ) + ) + ) + (func $__Z12multi_varargiz (; 51 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (if + (get_local $3) + (loop $while-in + (br_if $while-in + (i32.eqz + (get_local $2) + ) + ) + ) + (drop + (call $lb + (i32.const 1) + ) + ) + ) + ) + (func $jumpThreadDrop (; 52 ;) (result i32) + (call $return_int) + ) + (func $dropIgnoredImportInIf (; 53 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (if + (get_local $0) + (drop + (call $lb + (get_local $2) + ) + ) + ) + ) + (func $dropIgnoredImportsInIf (; 54 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (drop + (if (result i32) + (get_local $0) + (call $lb + (get_local $1) + ) + (call $lb + (get_local $2) + ) + ) + ) + ) + (func $store_fround (; 55 ;) (param $0 i32) + (f64.store + (i32.const 80) + (f64.promote/f32 + (f32.convert_s/i32 + (get_local $0) + ) + ) + ) + ) + (func $relocatableAndModules (; 56 ;) (result i32) + (call_indirect (type $FUNCSIG$v) + (i32.const 10) + ) + (call_indirect (type $FUNCSIG$v) + (i32.const 20) + ) + (call_indirect (type $FUNCSIG$idi) + (f64.const 1.5) + (i32.const 200) + (i32.const 30) + ) + ) + (func $exported_f32_user (; 57 ;) (param $0 i32) (param $1 f32) (param $2 f64) (result f32) + (get_local $1) + ) + (func $sqrts (; 58 ;) (param $0 f64) (result f64) + (f64.add + (f64.sqrt + (get_local $0) + ) + (f64.promote/f32 + (f32.sqrt + (f32.demote/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $f2u (; 59 ;) (param $0 f64) (result i32) + (call $f64-to-int + (get_local $0) + ) + ) + (func $keepAlive (; 60 ;) + (drop + (call $sqrts + (f64.const 3.14159) + ) + ) + (drop + (call $sqrts + (f64.const 2.18281) + ) + ) + (drop + (call $f2u + (f64.const 100) + ) + ) + (drop + (call $f2u + (f64.const 100) + ) + ) + (call_indirect (type $FUNCSIG$vi) + (i32.const 0) + (i32.const 17) + ) + (call_indirect (type $FUNCSIG$vi) + (i32.const 0) + (block (result i32) + (set_global $Int + (i32.const 1) + ) + (i32.add + (i32.and + (get_global $Int) + (i32.const 7) + ) + (i32.const 16) + ) + ) + ) + (call $emscripten_log) + (drop + (call $f64-to-int + (call $abort + (f64.const 0) + ) + ) + ) + ) + (func $vi (; 61 ;) (param $0 i32) + (nop) + ) + (func $ii (; 62 ;) (param $0 i32) (result i32) + (get_local $0) + ) + (func $legalstub$conversions (; 63 ;) (param $0 i32) (param $1 f64) (param $2 f64) + (call $conversions + (get_local $0) + (get_local $1) + (f32.demote/f64 + (get_local $2) + ) + ) + ) + (func $legalstub$frem_float (; 64 ;) (result f64) + (f64.promote/f32 + (call $frem_float) + ) + ) + (func $legalstub$fr (; 65 ;) (param $0 f64) + (call $fr + (f32.demote/f64 + (get_local $0) + ) + ) + ) + (func $legalstub$ceiling_32_64 (; 66 ;) (param $0 f64) (param $1 f64) + (call $ceiling_32_64 + (f32.demote/f64 + (get_local $0) + ) + (get_local $1) + ) + ) + (func $legalstub$bitcasts (; 67 ;) (param $0 i32) (param $1 f64) + (call $bitcasts + (get_local $0) + (f32.demote/f64 + (get_local $1) + ) + ) + ) + (func $legalstub$exported_f32_user (; 68 ;) (param $0 i32) (param $1 f64) (param $2 f64) (result f64) + (f64.promote/f32 + (call $exported_f32_user + (get_local $0) + (f32.demote/f64 + (get_local $1) + ) + (get_local $2) + ) + ) + ) +) diff --git a/src/binaryen/test/unit.fromasm.clamp b/src/binaryen/test/unit.fromasm.clamp new file mode 100644 index 0000000000..09c68d8f11 --- /dev/null +++ b/src/binaryen/test/unit.fromasm.clamp @@ -0,0 +1,1346 @@ +(module + (type $FUNCSIG$ddd (func (param f64 f64) (result f64))) + (type $FUNCSIG$vf (func (param f32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$idi (func (param f64 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$dd (func (param f64) (result f64))) + (type $FUNCSIG$i (func (result i32))) + (import "env" "gb" (global $n$asm2wasm$import i32)) + (import "env" "setTempRet0" (func $setTempRet0 (param i32) (result i32))) + (import "env" "abort" (func $abort (param f64) (result f64))) + (import "env" "print" (func $print (param i32))) + (import "env" "h" (func $h (param i32))) + (import "env" "return_int" (func $return_int (result i32))) + (import "env" "emscripten_log" (func $emscripten_log)) + (import "asm2wasm" "f64-rem" (func $f64-rem (param f64 f64) (result f64))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 25 25 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $Int (mut i32) (i32.const 0)) + (global $Double (mut f64) (f64.const 0)) + (global $n (mut i32) (get_global $n$asm2wasm$import)) + (global $exportedNumber i32 (i32.const 42)) + (elem (get_global $tableBase) $big_negative $big_negative $big_negative $big_negative $w $w $importedDoubles $w $fr $cneg $fr $fr $fr $fr $fr $fr $vi $vi $vi $vi $vi $vi $vi $vi $ii) + (data (get_global $memoryBase) "unit.asm.js") + (export "big_negative" (func $big_negative)) + (export "pick" (func $big_negative)) + (export "doubleCompares" (func $doubleCompares)) + (export "intOps" (func $intOps)) + (export "conversions" (func $legalstub$conversions)) + (export "switcher" (func $switcher)) + (export "frem" (func $frem)) + (export "frem_float" (func $legalstub$frem_float)) + (export "big_uint_div_u" (func $big_uint_div_u)) + (export "trapping_sint_div_s" (func $trapping_sint_div_s)) + (export "fr" (func $legalstub$fr)) + (export "negZero" (func $negZero)) + (export "neg" (func $neg)) + (export "smallCompare" (func $smallCompare)) + (export "cneg_nosemicolon" (func $cneg_nosemicolon)) + (export "forLoop" (func $forLoop)) + (export "ceiling_32_64" (func $legalstub$ceiling_32_64)) + (export "aborts" (func $aborts)) + (export "continues" (func $continues)) + (export "bitcasts" (func $legalstub$bitcasts)) + (export "recursiveBlockMerging" (func $recursiveBlockMerging)) + (export "lb" (func $lb)) + (export "zeroInit" (func $zeroInit)) + (export "phi" (func $phi)) + (export "smallIf" (func $smallIf)) + (export "dropCall" (func $dropCall)) + (export "useSetGlobal" (func $useSetGlobal)) + (export "usesSetGlobal2" (func $usesSetGlobal2)) + (export "breakThroughMany" (func $breakThroughMany)) + (export "ifChainEmpty" (func $ifChainEmpty)) + (export "heap8NoShift" (func $heap8NoShift)) + (export "conditionalTypeFun" (func $conditionalTypeFun)) + (export "loadSigned" (func $loadSigned)) + (export "globalOpts" (func $globalOpts)) + (export "dropCallImport" (func $dropCallImport)) + (export "loophi" (func $loophi)) + (export "loophi2" (func $loophi2)) + (export "loophi2b" (func $loophi2b)) + (export "relooperJumpThreading" (func $relooperJumpThreading)) + (export "relooperJumpThreading__ZN4game14preloadweaponsEv" (func $relooperJumpThreading__ZN4game14preloadweaponsEv)) + (export "__Z12multi_varargiz" (func $__Z12multi_varargiz)) + (export "jumpThreadDrop" (func $jumpThreadDrop)) + (export "dropIgnoredImportInIf" (func $dropIgnoredImportInIf)) + (export "dropIgnoredImportsInIf" (func $dropIgnoredImportsInIf)) + (export "relooperJumpThreading_irreducible" (func $relooperJumpThreading_irreducible)) + (export "store_fround" (func $store_fround)) + (export "exportedNumber" (global $exportedNumber)) + (export "relocatableAndModules" (func $relocatableAndModules)) + (export "exported_f32_user" (func $legalstub$exported_f32_user)) + (export "keepAlive" (func $keepAlive)) + (func $big_negative (; 7 ;) + (nop) + ) + (func $importedDoubles (; 8 ;) (result f64) + (if + (i32.gt_s + (get_global $Int) + (i32.const 0) + ) + (return + (f64.const -3.4) + ) + ) + (if + (f64.gt + (get_global $Double) + (f64.const 0) + ) + (return + (f64.const 5.6) + ) + ) + (f64.const 1.2) + ) + (func $doubleCompares (; 9 ;) (param $0 f64) (param $1 f64) (result f64) + (if + (f64.gt + (get_local $0) + (f64.const 0) + ) + (return + (f64.const 1.2) + ) + ) + (if + (f64.gt + (get_local $0) + (f64.const 0) + ) + (return + (f64.const -3.4) + ) + ) + (if + (i32.gt_s + (get_global $n) + (i32.const 0) + ) + (return + (f64.const 5.6) + ) + ) + (if + (f64.lt + (get_local $0) + (get_local $1) + ) + (return + (get_local $0) + ) + ) + (get_local $1) + ) + (func $intOps (; 10 ;) (param $0 i32) (result i32) + (i32.eqz + (get_local $0) + ) + ) + (func $f64-to-int (; 11 ;) (param $0 f64) (result i32) + (if (result i32) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i32.const -2147483648) + (if (result i32) + (f64.ge + (get_local $0) + (f64.const 2147483648) + ) + (i32.const -2147483648) + (if (result i32) + (f64.le + (get_local $0) + (f64.const -2147483649) + ) + (i32.const -2147483648) + (i32.trunc_s/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $f32-to-int (; 12 ;) (param $0 f32) (result i32) + (if (result i32) + (f32.ne + (get_local $0) + (get_local $0) + ) + (i32.const -2147483648) + (if (result i32) + (f32.ge + (get_local $0) + (f32.const 2147483648) + ) + (i32.const -2147483648) + (if (result i32) + (f32.le + (get_local $0) + (f32.const -2147483648) + ) + (i32.const -2147483648) + (i32.trunc_s/f32 + (get_local $0) + ) + ) + ) + ) + ) + (func $conversions (; 13 ;) (param $0 i32) (param $1 f64) (param $2 f32) + (drop + (call $f64-to-int + (get_local $1) + ) + ) + (drop + (call $f32-to-int + (get_local $2) + ) + ) + ) + (func $switcher (; 14 ;) (param $0 i32) (result i32) + (block $switch + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-case0 $switch + (i32.sub + (get_local $0) + (i32.const 1) + ) + ) + ) + (return + (i32.const 1) + ) + ) + (return + (i32.const 2) + ) + ) + (block $switch1 + (block $switch-case3 + (block $switch-case2 + (br_table $switch-case3 $switch1 $switch1 $switch1 $switch1 $switch1 $switch1 $switch-case2 $switch1 + (i32.sub + (get_local $0) + (i32.const 5) + ) + ) + ) + (return + (i32.const 121) + ) + ) + (return + (i32.const 51) + ) + ) + (block $switch-case9 + (block $switch-case4 + (br_table $switch-case9 $switch-case9 $switch-case9 $switch-case4 $switch-case9 $switch-case9 $switch-case9 $switch-case9 $switch-case4 $switch-case9 $switch-case4 $switch-case9 + (i32.sub + (get_local $0) + (i32.const 2) + ) + ) + ) + ) + (loop $label$continue$L1 + (block $label$break$L1 + (loop $label$continue$L3 + (block $label$break$L3 + (block $switch-default + (block $switch-case13 + (block $switch-case12 + (block $switch-case11 + (br_table $switch-case11 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case13 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case12 $switch-default + (i32.sub + (get_local $0) + (i32.const -1) + ) + ) + ) + (br $label$break$L1) + ) + (br $label$continue$L3) + ) + (br $label$break$L3) + ) + (br $label$break$L1) + ) + ) + (call $h + (i32.const 120) + ) + (br $label$continue$L1) + ) + ) + (i32.const 0) + ) + (func $frem (; 15 ;) (result f64) + (call $f64-rem + (f64.const 5.5) + (f64.const 1.2) + ) + ) + (func $frem_float (; 16 ;) (result f32) + (f32.demote/f64 + (call $f64-rem + (f64.const 5.5) + (f64.const 1.2000000476837158) + ) + ) + ) + (func $big_uint_div_u (; 17 ;) (result i32) + (i32.const 2147483647) + ) + (func $trapping_sint_div_s (; 18 ;) (result i32) + (i32.const 0) + ) + (func $fr (; 19 ;) (param $0 f32) + (nop) + ) + (func $negZero (; 20 ;) (result f64) + (f64.const -0) + ) + (func $neg (; 21 ;) + (local $0 f32) + (call_indirect (type $FUNCSIG$vf) + (f32.neg + (get_local $0) + ) + (i32.const 9) + ) + ) + (func $cneg (; 22 ;) (param $0 f32) + (call_indirect (type $FUNCSIG$vf) + (get_local $0) + (i32.const 9) + ) + ) + (func $smallCompare (; 23 ;) (param $0 i32) (param $1 i32) (result i32) + (if + (i32.lt_s + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (get_local $0) + ) + (func $cneg_nosemicolon (; 24 ;) + (call_indirect (type $FUNCSIG$vi) + (i32.const 1) + (i32.const 17) + ) + ) + (func $forLoop (; 25 ;) + (local $0 i32) + (set_local $0 + (i32.const 1) + ) + (loop $for-in + (if + (i32.lt_s + (get_local $0) + (i32.const 200) + ) + (block + (call $h + (get_local $0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $for-in) + ) + ) + ) + ) + (func $ceiling_32_64 (; 26 ;) (param $0 f32) (param $1 f64) + (nop) + ) + (func $aborts (; 27 ;) + (drop + (call $abort + (f64.const 0) + ) + ) + (drop + (call $abort + (f64.convert_s/i32 + (i32.const 55) + ) + ) + ) + (drop + (call $abort + (f64.const 0) + ) + ) + (drop + (call $abort + (f64.const 12.34) + ) + ) + (drop + (call $abort + (f64.const 56.779998779296875) + ) + ) + ) + (func $continues (; 28 ;) + (loop $while-in + (call $print + (i32.const 1) + ) + (loop $unlikely-continue + (call $print + (i32.const 5) + ) + (br_if $unlikely-continue + (call $return_int) + ) + ) + (call $print + (i32.const 2) + ) + (br $while-in) + ) + ) + (func $bitcasts (; 29 ;) (param $0 i32) (param $1 f32) + (nop) + ) + (func $recursiveBlockMerging (; 30 ;) (param $0 i32) (result i32) + (drop + (call $lb + (i32.add + (get_local $0) + (i32.const 22) + ) + ) + ) + (drop + (call $lb + (i32.const 1) + ) + ) + (drop + (call $lb + (i32.const 2) + ) + ) + (i32.add + (i32.add + (i32.add + (get_local $0) + (call $lb + (i32.const 3) + ) + ) + (block (result i32) + (drop + (call $lb + (i32.const 4) + ) + ) + (drop + (call $lb + (i32.const 5) + ) + ) + (drop + (call $lb + (i32.const 6) + ) + ) + (call $lb + (i32.const 7) + ) + ) + ) + (block (result i32) + (drop + (call $lb + (i32.const 8) + ) + ) + (drop + (call $lb + (i32.const 9) + ) + ) + (drop + (call $lb + (i32.const 10) + ) + ) + (drop + (call $lb + (i32.const 11) + ) + ) + (call $lb + (i32.const 12) + ) + ) + ) + ) + (func $lb (; 31 ;) (param $0 i32) (result i32) + (i32.store + (get_local $0) + (i32.add + (get_global $n) + (i32.const 144) + ) + ) + (i32.const 0) + ) + (func $zeroInit (; 32 ;) (param $0 i32) + (local $1 i32) + (if + (call $lb + (i32.const 0) + ) + (if + (call $lb + (i32.const 1) + ) + (set_local $1 + (i32.const 3) + ) + ) + (set_local $1 + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 3) + ) + (drop + (call $lb + (i32.const 2) + ) + ) + ) + ) + (func $phi (; 33 ;) (result i32) + (block $do-once (result i32) + (drop + (br_if $do-once + (i32.const 0) + (call $lb + (i32.const 1) + ) + ) + ) + (i32.const 1) + ) + ) + (func $smallIf (; 34 ;) + (if + (call $return_int) + (drop + (call $lb + (i32.const 3) + ) + ) + ) + ) + (func $dropCall (; 35 ;) (result i32) + (if + (call $return_int) + (block + (drop + (call $phi) + ) + (drop + (call $setTempRet0 + (i32.const 10) + ) + ) + (call $zeroInit + (call $setTempRet0 + (i32.const 10) + ) + ) + ) + ) + (call $phi) + ) + (func $useSetGlobal (; 36 ;) (result i32) + (set_global $Int + (i32.const 10) + ) + (set_global $Int + (i32.const 20) + ) + (set_global $Int + (i32.const 30) + ) + (get_global $Int) + ) + (func $usesSetGlobal2 (; 37 ;) (result i32) + (set_global $Int + (i32.const 40) + ) + (i32.const 50) + ) + (func $breakThroughMany (; 38 ;) (param $0 i32) + (block $label$break$L1 + (if + (get_local $0) + (loop $while-in + (br_if $label$break$L1 + (i32.eqz + (get_local $0) + ) + ) + (call $zeroInit + (i32.const 0) + ) + (br $while-in) + ) + ) + ) + ) + (func $ifChainEmpty (; 39 ;) (param $0 i32) (result i32) + (if + (i32.eq + (get_local $0) + (i32.const 4) + ) + (return + (i32.const 0) + ) + ) + (i32.const 0) + ) + (func $heap8NoShift (; 40 ;) (param $0 i32) (result i32) + (i32.load8_s + (get_local $0) + ) + ) + (func $conditionalTypeFun (; 41 ;) + (drop + (if (result i32) + (call $return_int) + (call $f64-to-int + (call $abort + (f64.convert_s/i32 + (i32.const 5) + ) + ) + ) + (i32.const 2) + ) + ) + (drop + (if (result f64) + (call $return_int) + (call $abort + (f64.convert_s/i32 + (i32.const 7) + ) + ) + (f64.const 4.5) + ) + ) + ) + (func $loadSigned (; 42 ;) (param $0 i32) + (call $loadSigned + (i32.load8_s + (get_local $0) + ) + ) + (call $loadSigned + (i32.load8_s + (get_local $0) + ) + ) + (call $loadSigned + (i32.load16_s + (get_local $0) + ) + ) + (call $loadSigned + (i32.load16_s + (get_local $0) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load8_s + (get_local $0) + ) + (i32.const 24) + ) + (i32.const 16) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load8_u + (get_local $0) + ) + (i32.const 16) + ) + (i32.const 24) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load16_s + (get_local $0) + ) + (i32.const 16) + ) + (i32.const 24) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load16_u + (get_local $0) + ) + (i32.const 24) + ) + (i32.const 16) + ) + ) + ) + (func $w (; 43 ;) (result f64) + (f64.const 0) + ) + (func $globalOpts (; 44 ;) + (local $0 i32) + (i32.store8 + (i32.const 13) + (i32.load + (i32.const 12) + ) + ) + (call $globalOpts) + (set_local $0 + (get_global $Int) + ) + (if + (call $return_int) + (set_global $Int + (i32.const 20) + ) + ) + (set_global $Int + (get_local $0) + ) + (call $globalOpts) + (set_local $0 + (get_global $Int) + ) + (call $globalOpts) + (set_global $Int + (get_local $0) + ) + ) + (func $dropCallImport (; 45 ;) + (if + (call $return_int) + (drop + (call $return_int) + ) + ) + ) + (func $loophi (; 46 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (loop $while-in + (block $while-out + (call $loophi + (get_local $0) + (i32.const 0) + ) + (if + (tee_local $2 + (get_local $0) + ) + (br_if $while-out + (get_local $2) + ) + ) + (br_if $while-in + (i32.eq + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (get_local $1) + ) + ) + ) + ) + ) + (func $loophi2 (; 47 ;) (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (i32.const 0) + ) + (loop $label$continue$L7 + (block $label$break$L7 + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (set_local $2 + (get_local $0) + ) + (if + (call $return_int) + (br_if $label$break$L7 + (get_local $2) + ) + ) + (br_if $while-in + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (br $label$continue$L7) + ) + ) + (get_local $1) + ) + (func $loophi2b (; 48 ;) (result i32) + (local $0 i32) + (local $1 i32) + (loop $label$continue$L7 + (block $label$break$L7 + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (set_local $1 + (get_local $0) + ) + (if + (call $return_int) + (br_if $label$break$L7 + (get_local $1) + ) + ) + (br_if $while-in + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (br $label$continue$L7) + ) + ) + (get_local $0) + ) + (func $relooperJumpThreading (; 49 ;) (param $0 i32) (result i32) + (block $__rjto$0 + (block $__rjti$0 + (if + (get_local $0) + (block + (call $h + (i32.const 0) + ) + (br $__rjti$0) + ) + ) + (br $__rjto$0) + ) + (call $h + (i32.const 1) + ) + ) + (call $h + (i32.const -1) + ) + (loop $while-in + (br_if $while-in + (i32.eqz + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (call $h + (i32.const 2) + ) + ) + (call $h + (i32.const 3) + ) + (call $h + (i32.const -2) + ) + (block $__rjto$3 + (block $__rjti$3 + (block $__rjti$2 + (if + (get_local $0) + (block + (call $h + (i32.const 4) + ) + (br_if $__rjti$2 + (i32.eq + (get_local $0) + (i32.const 3) + ) + ) + (br $__rjti$3) + ) + ) + (br $__rjto$3) + ) + (call $h + (i32.const 5) + ) + (br $__rjto$3) + ) + (call $h + (i32.const 6) + ) + ) + (call $h + (i32.const -3) + ) + (block $__rjto$5 + (block $__rjti$5 + (block $__rjti$4 + (if + (get_local $0) + (block + (call $h + (i32.const 7) + ) + (br_if $__rjti$4 + (i32.eq + (get_local $0) + (i32.const 5) + ) + ) + (br $__rjti$5) + ) + ) + (br $__rjto$5) + ) + (call $h + (i32.const 8) + ) + (br_if $__rjti$5 + (i32.eq + (get_local $0) + (i32.const 6) + ) + ) + (br $__rjto$5) + ) + (call $h + (i32.const 9) + ) + ) + (call $h + (i32.const -4) + ) + (block $label$break$L1 + (block $__rjti$6 + (if + (get_local $0) + (block + (call $h + (i32.const 10) + ) + (br $__rjti$6) + ) + ) + (br $label$break$L1) + ) + (call $h + (i32.const 11) + ) + ) + (call $h + (i32.const -5) + ) + (block $label$break$L10 + (block $__rjti$8 + (block $__rjti$7 + (if + (get_local $0) + (block + (call $h + (i32.const 12) + ) + (br_if $__rjti$7 + (i32.eq + (get_local $0) + (i32.const 8) + ) + ) + (br $__rjti$8) + ) + ) + (br $label$break$L10) + ) + (call $h + (i32.const 13) + ) + (br_if $__rjti$8 + (get_local $0) + ) + (br $label$break$L10) + ) + (call $h + (i32.const 14) + ) + ) + (call $h + (i32.const -6) + ) + (get_local $0) + ) + (func $relooperJumpThreading__ZN4game14preloadweaponsEv (; 50 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) + (loop $while-in + (block $__rjto$1 + (block $__rjti$1 + (if + (get_local $1) + (br_if $__rjti$1 + (i32.eqz + (get_local $2) + ) + ) + (br_if $__rjti$1 + (i32.eqz + (get_local $3) + ) + ) + ) + (br $while-in) + ) + (i32.store + (get_local $4) + (get_local $5) + ) + ) + (br $while-in) + ) + ) + (func $relooperJumpThreading_irreducible (; 51 ;) (param $0 i32) + (local $1 i32) + (if + (i32.eq + (get_local $0) + (i32.const 100) + ) + (loop $while-in + (call $relooperJumpThreading_irreducible + (i32.const 1337) + ) + (br $while-in) + ) + ) + (set_local $1 + (select + (i32.const 2) + (i32.const 10) + (i32.eq + (get_local $0) + (i32.const 200) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (i32.const 300) + ) + (set_local $1 + (i32.const 2) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 2) + ) + (call $relooperJumpThreading_irreducible + (i32.const 1448) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 10) + ) + (call $relooperJumpThreading_irreducible + (i32.const 2000) + ) + ) + ) + (func $__Z12multi_varargiz (; 52 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (if + (get_local $3) + (loop $while-in + (br_if $while-in + (i32.eqz + (get_local $2) + ) + ) + ) + (drop + (call $lb + (i32.const 1) + ) + ) + ) + ) + (func $jumpThreadDrop (; 53 ;) (result i32) + (call $return_int) + ) + (func $dropIgnoredImportInIf (; 54 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (if + (get_local $0) + (drop + (call $lb + (get_local $2) + ) + ) + ) + ) + (func $dropIgnoredImportsInIf (; 55 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (drop + (if (result i32) + (get_local $0) + (call $lb + (get_local $1) + ) + (call $lb + (get_local $2) + ) + ) + ) + ) + (func $store_fround (; 56 ;) (param $0 i32) + (f64.store + (i32.const 80) + (f64.promote/f32 + (f32.convert_s/i32 + (get_local $0) + ) + ) + ) + ) + (func $relocatableAndModules (; 57 ;) (result i32) + (call_indirect (type $FUNCSIG$v) + (i32.const 10) + ) + (call_indirect (type $FUNCSIG$v) + (i32.const 20) + ) + (call_indirect (type $FUNCSIG$idi) + (f64.const 1.5) + (i32.const 200) + (i32.const 30) + ) + ) + (func $exported_f32_user (; 58 ;) (param $0 i32) (param $1 f32) (param $2 f64) (result f32) + (get_local $1) + ) + (func $sqrts (; 59 ;) (param $0 f64) (result f64) + (f64.add + (f64.sqrt + (get_local $0) + ) + (f64.promote/f32 + (f32.sqrt + (f32.demote/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $f64-to-uint (; 60 ;) (param $0 f64) (result i32) + (if (result i32) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i32.const 0) + (if (result i32) + (f64.ge + (get_local $0) + (f64.const 4294967296) + ) + (i32.const 0) + (if (result i32) + (f64.le + (get_local $0) + (f64.const -1) + ) + (i32.const 0) + (i32.trunc_u/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $keepAlive (; 61 ;) + (drop + (call $sqrts + (f64.const 3.14159) + ) + ) + (drop + (call $sqrts + (f64.const 2.18281) + ) + ) + (drop + (call $f64-to-uint + (f64.const 100) + ) + ) + (drop + (call $f64-to-int + (f64.const 100) + ) + ) + (call_indirect (type $FUNCSIG$vi) + (i32.const 0) + (i32.const 17) + ) + (call_indirect (type $FUNCSIG$vi) + (i32.const 0) + (block (result i32) + (set_global $Int + (i32.const 1) + ) + (i32.add + (i32.and + (get_global $Int) + (i32.const 7) + ) + (i32.const 16) + ) + ) + ) + (call $emscripten_log) + (drop + (call $f64-to-int + (call $abort + (f64.const 0) + ) + ) + ) + ) + (func $vi (; 62 ;) (param $0 i32) + (nop) + ) + (func $ii (; 63 ;) (param $0 i32) (result i32) + (get_local $0) + ) + (func $legalstub$conversions (; 64 ;) (param $0 i32) (param $1 f64) (param $2 f64) + (call $conversions + (get_local $0) + (get_local $1) + (f32.demote/f64 + (get_local $2) + ) + ) + ) + (func $legalstub$frem_float (; 65 ;) (result f64) + (f64.promote/f32 + (call $frem_float) + ) + ) + (func $legalstub$fr (; 66 ;) (param $0 f64) + (call $fr + (f32.demote/f64 + (get_local $0) + ) + ) + ) + (func $legalstub$ceiling_32_64 (; 67 ;) (param $0 f64) (param $1 f64) + (call $ceiling_32_64 + (f32.demote/f64 + (get_local $0) + ) + (get_local $1) + ) + ) + (func $legalstub$bitcasts (; 68 ;) (param $0 i32) (param $1 f64) + (call $bitcasts + (get_local $0) + (f32.demote/f64 + (get_local $1) + ) + ) + ) + (func $legalstub$exported_f32_user (; 69 ;) (param $0 i32) (param $1 f64) (param $2 f64) (result f64) + (f64.promote/f32 + (call $exported_f32_user + (get_local $0) + (f32.demote/f64 + (get_local $1) + ) + (get_local $2) + ) + ) + ) +) diff --git a/src/binaryen/test/unit.fromasm.clamp.no-opts b/src/binaryen/test/unit.fromasm.clamp.no-opts new file mode 100644 index 0000000000..6a576e3ca9 --- /dev/null +++ b/src/binaryen/test/unit.fromasm.clamp.no-opts @@ -0,0 +1,2252 @@ +(module + (type $FUNCSIG$ddd (func (param f64 f64) (result f64))) + (type $FUNCSIG$vf (func (param f32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$idi (func (param f64 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$dd (func (param f64) (result f64))) + (type $FUNCSIG$i (func (result i32))) + (import "global" "NaN" (global $t$asm2wasm$import f64)) + (import "global" "Infinity" (global $u$asm2wasm$import f64)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "gb" (global $n$asm2wasm$import i32)) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "setTempRet0" (func $setTempRet0 (param i32) (result i32))) + (import "env" "abort" (func $abort (param f64) (result f64))) + (import "env" "print" (func $print (param i32))) + (import "env" "h" (func $h (param i32))) + (import "env" "return_int" (func $return_int (result i32))) + (import "env" "emscripten_log" (func $emscripten_log)) + (import "asm2wasm" "f64-rem" (func $f64-rem (param f64 f64) (result f64))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 25 25 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $t (mut f64) (get_global $t$asm2wasm$import)) + (global $u (mut f64) (get_global $u$asm2wasm$import)) + (global $Int (mut i32) (i32.const 0)) + (global $Double (mut f64) (f64.const 0)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $n (mut i32) (get_global $n$asm2wasm$import)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $exportedNumber i32 (i32.const 42)) + (elem (get_global $tableBase) $v $big_negative $v $v $w $w $importedDoubles $w $z $cneg $z $z $z $z $z $z $vi $vi $vi $vi $vi $vi $vi $vi $ii) + (export "big_negative" (func $big_negative)) + (export "pick" (func $exportMe)) + (export "doubleCompares" (func $doubleCompares)) + (export "intOps" (func $intOps)) + (export "conversions" (func $legalstub$conversions)) + (export "switcher" (func $switcher)) + (export "frem" (func $frem)) + (export "frem_float" (func $legalstub$frem_float)) + (export "big_uint_div_u" (func $big_uint_div_u)) + (export "trapping_sint_div_s" (func $trapping_sint_div_s)) + (export "fr" (func $legalstub$fr)) + (export "negZero" (func $negZero)) + (export "neg" (func $neg)) + (export "smallCompare" (func $smallCompare)) + (export "cneg_nosemicolon" (func $cneg_nosemicolon)) + (export "forLoop" (func $forLoop)) + (export "ceiling_32_64" (func $legalstub$ceiling_32_64)) + (export "aborts" (func $aborts)) + (export "continues" (func $continues)) + (export "bitcasts" (func $legalstub$bitcasts)) + (export "recursiveBlockMerging" (func $recursiveBlockMerging)) + (export "lb" (func $lb)) + (export "zeroInit" (func $zeroInit)) + (export "phi" (func $phi)) + (export "smallIf" (func $smallIf)) + (export "dropCall" (func $dropCall)) + (export "useSetGlobal" (func $useSetGlobal)) + (export "usesSetGlobal2" (func $usesSetGlobal2)) + (export "breakThroughMany" (func $breakThroughMany)) + (export "ifChainEmpty" (func $ifChainEmpty)) + (export "heap8NoShift" (func $heap8NoShift)) + (export "conditionalTypeFun" (func $conditionalTypeFun)) + (export "loadSigned" (func $loadSigned)) + (export "globalOpts" (func $globalOpts)) + (export "dropCallImport" (func $dropCallImport)) + (export "loophi" (func $loophi)) + (export "loophi2" (func $loophi2)) + (export "loophi2b" (func $loophi2b)) + (export "relooperJumpThreading" (func $relooperJumpThreading)) + (export "relooperJumpThreading__ZN4game14preloadweaponsEv" (func $relooperJumpThreading__ZN4game14preloadweaponsEv)) + (export "__Z12multi_varargiz" (func $__Z12multi_varargiz)) + (export "jumpThreadDrop" (func $jumpThreadDrop)) + (export "dropIgnoredImportInIf" (func $dropIgnoredImportInIf)) + (export "dropIgnoredImportsInIf" (func $dropIgnoredImportsInIf)) + (export "relooperJumpThreading_irreducible" (func $relooperJumpThreading_irreducible)) + (export "store_fround" (func $store_fround)) + (export "exportedNumber" (global $exportedNumber)) + (export "relocatableAndModules" (func $relocatableAndModules)) + (export "exported_f32_user" (func $legalstub$exported_f32_user)) + (export "keepAlive" (func $keepAlive)) + (func $big_negative (; 7 ;) + (local $temp f64) + (set_local $temp + (f64.const -2147483648) + ) + (set_local $temp + (f64.const -2147483648) + ) + (set_local $temp + (f64.const -21474836480) + ) + (set_local $temp + (f64.const 0.039625) + ) + (set_local $temp + (f64.const -0.039625) + ) + ) + (func $importedDoubles (; 8 ;) (result f64) + (local $temp f64) + (set_local $temp + (f64.add + (f64.add + (f64.add + (get_global $t) + (get_global $u) + ) + (f64.neg + (get_global $u) + ) + ) + (f64.neg + (get_global $t) + ) + ) + ) + (if + (i32.gt_s + (get_global $Int) + (i32.const 0) + ) + (return + (f64.const -3.4) + ) + ) + (if + (f64.gt + (get_global $Double) + (f64.const 0) + ) + (return + (f64.const 5.6) + ) + ) + (return + (f64.const 1.2) + ) + ) + (func $doubleCompares (; 9 ;) (param $x f64) (param $y f64) (result f64) + (local $t f64) + (local $Int f64) + (local $Double i32) + (if + (f64.gt + (get_local $x) + (f64.const 0) + ) + (return + (f64.const 1.2) + ) + ) + (set_local $Int + (get_local $x) + ) + (set_local $Double + (get_global $n) + ) + (if + (f64.gt + (get_local $Int) + (f64.const 0) + ) + (return + (f64.const -3.4) + ) + ) + (if + (i32.gt_s + (get_local $Double) + (i32.const 0) + ) + (return + (f64.const 5.6) + ) + ) + (if + (f64.lt + (get_local $x) + (get_local $y) + ) + (return + (get_local $x) + ) + ) + (return + (get_local $y) + ) + ) + (func $intOps (; 10 ;) (param $x i32) (result i32) + (return + (i32.eqz + (get_local $x) + ) + ) + ) + (func $hexLiterals (; 11 ;) + (local $i i32) + (set_local $i + (i32.add + (i32.add + (i32.const 0) + (i32.const 313249263) + ) + (i32.const -19088752) + ) + ) + ) + (func $f64-to-int (; 12 ;) (param $0 f64) (result i32) + (if (result i32) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i32.const -2147483648) + (if (result i32) + (f64.ge + (get_local $0) + (f64.const 2147483648) + ) + (i32.const -2147483648) + (if (result i32) + (f64.le + (get_local $0) + (f64.const -2147483649) + ) + (i32.const -2147483648) + (i32.trunc_s/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $f32-to-int (; 13 ;) (param $0 f32) (result i32) + (if (result i32) + (f32.ne + (get_local $0) + (get_local $0) + ) + (i32.const -2147483648) + (if (result i32) + (f32.ge + (get_local $0) + (f32.const 2147483648) + ) + (i32.const -2147483648) + (if (result i32) + (f32.le + (get_local $0) + (f32.const -2147483648) + ) + (i32.const -2147483648) + (i32.trunc_s/f32 + (get_local $0) + ) + ) + ) + ) + ) + (func $conversions (; 14 ;) (param $i i32) (param $d f64) (param $f f32) + (set_local $i + (call $f64-to-int + (get_local $d) + ) + ) + (set_local $i + (call $f32-to-int + (get_local $f) + ) + ) + (set_local $d + (f64.convert_s/i32 + (get_local $i) + ) + ) + (set_local $d + (f64.convert_u/i32 + (get_local $i) + ) + ) + ) + (func $seq (; 15 ;) + (local $J f64) + (set_local $J + (f64.sub + (block (result f64) + (drop + (f64.const 0.1) + ) + (f64.const 5.1) + ) + (block (result f64) + (drop + (f64.const 3.2) + ) + (f64.const 4.2) + ) + ) + ) + ) + (func $switcher (; 16 ;) (param $x i32) (result i32) + (local $waka i32) + (block $switch + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-case0 $switch + (i32.sub + (get_local $x) + (i32.const 1) + ) + ) + ) + (return + (i32.const 1) + ) + ) + (return + (i32.const 2) + ) + ) + (block $switch1 + (block $switch-case3 + (block $switch-case2 + (br_table $switch-case3 $switch1 $switch1 $switch1 $switch1 $switch1 $switch1 $switch-case2 $switch1 + (i32.sub + (get_local $x) + (i32.const 5) + ) + ) + ) + (return + (i32.const 121) + ) + ) + (return + (i32.const 51) + ) + ) + (block $label$break$Lout + (block $switch-case9 + (block $switch-case6 + (block $switch-case5 + (block $switch-case4 + (br_table $switch-case9 $label$break$Lout $label$break$Lout $switch-case6 $label$break$Lout $label$break$Lout $label$break$Lout $label$break$Lout $switch-case5 $label$break$Lout $switch-case4 $label$break$Lout + (i32.sub + (get_local $x) + (i32.const 2) + ) + ) + ) + (br $label$break$Lout) + ) + (br $label$break$Lout) + ) + (block + (loop $while-in + (block $while-out + (br $while-out) + (br $while-in) + ) + ) + (br $label$break$Lout) + ) + ) + (block + (loop $while-in8 + (block $while-out7 + (br $label$break$Lout) + (br $while-in8) + ) + ) + (br $label$break$Lout) + ) + ) + (loop $label$continue$L1 + (block $label$break$L1 + (loop $label$continue$L3 + (block $label$break$L3 + (block $switch10 + (block $switch-default + (block $switch-case13 + (block $switch-case12 + (block $switch-case11 + (br_table $switch-case11 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case13 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case12 $switch-default + (i32.sub + (get_local $x) + (i32.const -1) + ) + ) + ) + (block + (br $label$break$L1) + (br $switch10) + ) + ) + (block + (set_local $waka + (i32.const 1) + ) + (br $switch10) + ) + ) + (block + (br $label$break$L3) + (br $switch10) + ) + ) + (br $label$break$L1) + ) + (br $label$continue$L3) + ) + ) + (call $h + (i32.const 120) + ) + (br $label$continue$L1) + ) + ) + (return + (i32.const 0) + ) + ) + (func $blocker (; 17 ;) + (block $label$break$L + (br $label$break$L) + ) + ) + (func $frem (; 18 ;) (result f64) + (return + (call $f64-rem + (f64.const 5.5) + (f64.const 1.2) + ) + ) + ) + (func $frem_float (; 19 ;) (result f32) + (return + (f32.demote/f64 + (call $f64-rem + (f64.promote/f32 + (f32.const 5.5) + ) + (f64.promote/f32 + (f32.const 1.2000000476837158) + ) + ) + ) + ) + ) + (func $i32u-div (; 20 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (i32.div_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $big_uint_div_u (; 21 ;) (result i32) + (local $x i32) + (set_local $x + (i32.and + (call $i32u-div + (i32.const -1) + (i32.const 2) + ) + (i32.const -1) + ) + ) + (return + (get_local $x) + ) + ) + (func $i32s-div (; 22 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (if (result i32) + (i32.and + (i32.eq + (get_local $0) + (i32.const -2147483648) + ) + (i32.eq + (get_local $1) + (i32.const -1) + ) + ) + (i32.const 0) + (i32.div_s + (get_local $0) + (get_local $1) + ) + ) + ) + ) + (func $trapping_sint_div_s (; 23 ;) (result i32) + (local $x i32) + (set_local $x + (call $i32s-div + (i32.const -2147483648) + (i32.const -1) + ) + ) + (return + (get_local $x) + ) + ) + (func $fr (; 24 ;) (param $x f32) + (local $y f32) + (local $z f64) + (drop + (f32.demote/f64 + (get_local $z) + ) + ) + (drop + (get_local $y) + ) + (drop + (f32.const 5) + ) + (drop + (f32.const 0) + ) + (drop + (f32.const 5) + ) + (drop + (f32.const 0) + ) + ) + (func $negZero (; 25 ;) (result f64) + (return + (f64.const -0) + ) + ) + (func $abs (; 26 ;) + (local $x i32) + (local $y f64) + (local $z f32) + (local $asm2wasm_i32_temp i32) + (set_local $x + (block (result i32) + (set_local $asm2wasm_i32_temp + (i32.const 0) + ) + (select + (i32.sub + (i32.const 0) + (get_local $asm2wasm_i32_temp) + ) + (get_local $asm2wasm_i32_temp) + (i32.lt_s + (get_local $asm2wasm_i32_temp) + (i32.const 0) + ) + ) + ) + ) + (set_local $y + (f64.abs + (f64.const 0) + ) + ) + (set_local $z + (f32.abs + (f32.const 0) + ) + ) + ) + (func $minmax (; 27 ;) + (local $x f64) + (local $y f64) + (local $z f32) + (local $w f32) + (set_local $x + (f64.min + (get_local $x) + (get_local $y) + ) + ) + (set_local $y + (f64.max + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (f32.min + (get_local $z) + (get_local $w) + ) + ) + (set_local $w + (f32.max + (get_local $z) + (get_local $w) + ) + ) + ) + (func $neg (; 28 ;) + (local $x f32) + (set_local $x + (f32.neg + (get_local $x) + ) + ) + (call_indirect (type $FUNCSIG$vf) + (get_local $x) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 8) + ) + ) + ) + (func $cneg (; 29 ;) (param $x f32) + (call_indirect (type $FUNCSIG$vf) + (get_local $x) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 8) + ) + ) + ) + (func $___syscall_ret (; 30 ;) + (local $$0 i32) + (drop + (i32.gt_u + (get_local $$0) + (i32.const -4096) + ) + ) + ) + (func $smallCompare (; 31 ;) (param $i i32) (param $j i32) (result i32) + (if + (i32.lt_s + (get_local $i) + (get_local $j) + ) + (set_local $i + (i32.add + (get_local $i) + (i32.const 1) + ) + ) + ) + (if + (i32.lt_u + (get_local $i) + (get_local $j) + ) + (set_local $i + (i32.add + (get_local $i) + (i32.const 1) + ) + ) + ) + (return + (get_local $i) + ) + ) + (func $cneg_nosemicolon (; 32 ;) + (call_indirect (type $FUNCSIG$vi) + (i32.const 1) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 16) + ) + ) + ) + (func $forLoop (; 33 ;) + (local $i i32) + (set_local $i + (i32.const 1) + ) + (loop $for-in + (block $for-out + (if + (i32.eqz + (i32.lt_s + (get_local $i) + (i32.const 200) + ) + ) + (br $for-out) + ) + (call $h + (get_local $i) + ) + (set_local $i + (i32.add + (get_local $i) + (i32.const 1) + ) + ) + (br $for-in) + ) + ) + ) + (func $ceiling_32_64 (; 34 ;) (param $u f32) (param $B f64) + (local $temp f32) + (set_local $temp + (f32.demote/f64 + (f64.ceil + (get_local $B) + ) + ) + ) + (set_local $temp + (f32.mul + (get_local $u) + (f32.ceil + (f32.demote/f64 + (get_local $B) + ) + ) + ) + ) + ) + (func $aborts (; 35 ;) + (drop + (call $abort + (f64.const 0) + ) + ) + (drop + (call $abort + (f64.convert_s/i32 + (i32.const 55) + ) + ) + ) + (drop + (call $abort + (f64.const 0) + ) + ) + (drop + (call $abort + (f64.const 12.34) + ) + ) + (drop + (call $abort + (f64.promote/f32 + (f32.const 56.779998779296875) + ) + ) + ) + ) + (func $continues (; 36 ;) + (loop $while-in + (block $while-out + (call $print + (i32.const 1) + ) + (block $do-once + (loop $unlikely-continue + (call $print + (i32.const 5) + ) + (if + (call $return_int) + (br $unlikely-continue) + ) + ) + ) + (call $print + (i32.const 2) + ) + (br $while-in) + ) + ) + ) + (func $bitcasts (; 37 ;) (param $i i32) (param $f f32) + (local $d f64) + (drop + (f32.reinterpret/i32 + (get_local $i) + ) + ) + (drop + (f64.promote/f32 + (f32.reinterpret/i32 + (get_local $i) + ) + ) + ) + (drop + (i32.reinterpret/f32 + (get_local $f) + ) + ) + (drop + (i32.reinterpret/f32 + (f32.demote/f64 + (get_local $d) + ) + ) + ) + ) + (func $recursiveBlockMerging (; 38 ;) (param $x i32) (result i32) + (drop + (call $lb + (i32.add + (i32.add + (i32.add + (block (result i32) + (drop + (i32.const 1) + ) + (get_local $x) + ) + (block (result i32) + (drop + (i32.const 2) + ) + (i32.const 3) + ) + ) + (block (result i32) + (block + (block + (drop + (i32.const 4) + ) + (drop + (i32.const 5) + ) + ) + (drop + (i32.const 6) + ) + ) + (i32.const 7) + ) + ) + (block (result i32) + (drop + (i32.const 8) + ) + (block (result i32) + (drop + (i32.const 9) + ) + (block (result i32) + (drop + (i32.const 10) + ) + (block (result i32) + (drop + (i32.const 11) + ) + (i32.const 12) + ) + ) + ) + ) + ) + ) + ) + (set_local $x + (i32.add + (i32.add + (i32.add + (block (result i32) + (drop + (call $lb + (i32.const 1) + ) + ) + (get_local $x) + ) + (block (result i32) + (drop + (call $lb + (i32.const 2) + ) + ) + (call $lb + (i32.const 3) + ) + ) + ) + (block (result i32) + (block + (block + (drop + (call $lb + (i32.const 4) + ) + ) + (drop + (call $lb + (i32.const 5) + ) + ) + ) + (drop + (call $lb + (i32.const 6) + ) + ) + ) + (call $lb + (i32.const 7) + ) + ) + ) + (block (result i32) + (drop + (call $lb + (i32.const 8) + ) + ) + (block (result i32) + (drop + (call $lb + (i32.const 9) + ) + ) + (block (result i32) + (drop + (call $lb + (i32.const 10) + ) + ) + (block (result i32) + (drop + (call $lb + (i32.const 11) + ) + ) + (call $lb + (i32.const 12) + ) + ) + ) + ) + ) + ) + ) + (return + (get_local $x) + ) + ) + (func $lb (; 39 ;) (param $a i32) (result i32) + (i32.store + (get_local $a) + (i32.add + (i32.add + (get_global $n) + (i32.const 136) + ) + (i32.const 8) + ) + ) + (return + (i32.const 0) + ) + ) + (func $forgetMe (; 40 ;) + (drop + (f64.const 123.456) + ) + ) + (func $exportMe (; 41 ;) + (drop + (f64.const -3.14159) + ) + ) + (func $zeroInit (; 42 ;) (param $x i32) + (local $y i32) + (if + (call $lb + (i32.const 0) + ) + (if + (call $lb + (i32.const 1) + ) + (set_local $y + (i32.const 3) + ) + ) + (set_local $y + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $y) + (i32.const 3) + ) + (drop + (call $lb + (i32.const 2) + ) + ) + ) + ) + (func $phi (; 43 ;) (result i32) + (local $x i32) + (block $do-once + (block + (if + (call $lb + (i32.const 1) + ) + (block + (set_local $x + (i32.const 0) + ) + (br $do-once) + ) + ) + (set_local $x + (i32.const 1) + ) + ) + ) + (return + (get_local $x) + ) + ) + (func $smallIf (; 44 ;) + (block $do-once + (if + (call $return_int) + (drop + (call $lb + (i32.const 3) + ) + ) + (br $do-once) + ) + (nop) + ) + ) + (func $dropCall (; 45 ;) (result i32) + (if + (call $return_int) + (block + (drop + (call $phi) + ) + (drop + (call $setTempRet0 + (i32.const 10) + ) + ) + (call $zeroInit + (call $setTempRet0 + (i32.const 10) + ) + ) + ) + ) + (return + (call $phi) + ) + ) + (func $useSetGlobal (; 46 ;) (result i32) + (local $x i32) + (set_local $x + (block (result i32) + (set_global $Int + (i32.const 10) + ) + (get_global $Int) + ) + ) + (set_global $Int + (i32.const 20) + ) + (return + (block (result i32) + (set_global $Int + (i32.const 30) + ) + (get_global $Int) + ) + ) + ) + (func $usesSetGlobal2 (; 47 ;) (result i32) + (return + (block (result i32) + (block + (set_global $Int + (i32.const 40) + ) + (drop + (get_global $Int) + ) + ) + (i32.const 50) + ) + ) + ) + (func $breakThroughMany (; 48 ;) (param $$s i32) + (block $label$break$L1 + (if + (get_local $$s) + (loop $while-in + (block $while-out + (if + (i32.eqz + (get_local $$s) + ) + (br $label$break$L1) + ) + (call $zeroInit + (i32.const 0) + ) + (br $while-in) + ) + ) + (drop + (i32.const 1337) + ) + ) + (nop) + ) + ) + (func $ifChainEmpty (; 49 ;) (param $label i32) (result i32) + (if + (i32.eq + (get_local $label) + (i32.const 4) + ) + (return + (i32.const 0) + ) + (if + (i32.eq + (get_local $label) + (i32.const 7) + ) + (nop) + ) + ) + (return + (i32.const 0) + ) + ) + (func $heap8NoShift (; 50 ;) (param $x i32) (result i32) + (return + (i32.load8_s + (get_local $x) + ) + ) + ) + (func $conditionalTypeFun (; 51 ;) + (local $x i32) + (local $y f64) + (set_local $x + (if (result i32) + (call $return_int) + (call $f64-to-int + (call $abort + (f64.convert_s/i32 + (i32.const 5) + ) + ) + ) + (i32.const 2) + ) + ) + (set_local $y + (if (result f64) + (call $return_int) + (call $abort + (f64.convert_s/i32 + (i32.const 7) + ) + ) + (f64.const 4.5) + ) + ) + ) + (func $loadSigned (; 52 ;) (param $x i32) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load8_s + (get_local $x) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load8_u + (get_local $x) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load16_s + (get_local $x) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load16_u + (get_local $x) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load8_s + (get_local $x) + ) + (i32.const 24) + ) + (i32.const 16) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load8_u + (get_local $x) + ) + (i32.const 16) + ) + (i32.const 24) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load16_s + (get_local $x) + ) + (i32.const 16) + ) + (i32.const 24) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load16_u + (get_local $x) + ) + (i32.const 24) + ) + (i32.const 16) + ) + ) + ) + (func $z (; 53 ;) (param $x f32) + (nop) + ) + (func $w (; 54 ;) (result f64) + (return + (f64.const 0) + ) + ) + (func $globalOpts (; 55 ;) + (local $x i32) + (local $y f64) + (set_local $x + (get_global $Int) + ) + (set_local $y + (get_global $Double) + ) + (i32.store8 + (i32.const 13) + (i32.load + (i32.const 12) + ) + ) + (set_global $Double + (get_local $y) + ) + (set_global $Int + (get_local $x) + ) + (call $globalOpts) + (set_local $x + (get_global $Int) + ) + (if + (call $return_int) + (set_global $Int + (i32.const 20) + ) + ) + (set_global $Int + (get_local $x) + ) + (call $globalOpts) + (set_local $x + (get_global $Int) + ) + (call $globalOpts) + (set_global $Int + (get_local $x) + ) + ) + (func $dropCallImport (; 56 ;) + (if + (call $return_int) + (drop + (call $return_int) + ) + ) + ) + (func $loophi (; 57 ;) (param $x i32) (param $y i32) + (local $temp i32) + (local $inc i32) + (local $loopvar i32) + (set_local $loopvar + (get_local $x) + ) + (loop $while-in + (block $while-out + (call $loophi + (get_local $loopvar) + (i32.const 0) + ) + (set_local $temp + (get_local $loopvar) + ) + (if + (get_local $temp) + (if + (get_local $temp) + (br $while-out) + ) + ) + (set_local $inc + (i32.add + (get_local $loopvar) + (i32.const 1) + ) + ) + (if + (i32.eq + (get_local $inc) + (get_local $y) + ) + (set_local $loopvar + (get_local $inc) + ) + (br $while-out) + ) + (br $while-in) + ) + ) + ) + (func $loophi2 (; 58 ;) (result i32) + (local $jnc i32) + (local $i i32) + (local $i$lcssa i32) + (local $temp i32) + (local $j i32) + (set_local $i + (i32.const 0) + ) + (loop $label$continue$L7 + (block $label$break$L7 + (set_local $j + (i32.const 0) + ) + (loop $while-in + (block $while-out + (set_local $temp + (get_local $j) + ) + (if + (call $return_int) + (if + (get_local $temp) + (block + (set_local $i$lcssa + (get_local $i) + ) + (br $label$break$L7) + ) + ) + ) + (set_local $jnc + (i32.add + (get_local $j) + (i32.const 1) + ) + ) + (if + (get_local $jnc) + (set_local $j + (get_local $jnc) + ) + (br $while-out) + ) + (br $while-in) + ) + ) + (br $label$continue$L7) + ) + ) + (return + (get_local $i$lcssa) + ) + ) + (func $loophi2b (; 59 ;) (result i32) + (local $jnc i32) + (local $i i32) + (local $i$lcssa i32) + (local $temp i32) + (local $j i32) + (set_local $i + (i32.const 0) + ) + (loop $label$continue$L7 + (block $label$break$L7 + (set_local $j + (i32.const 0) + ) + (loop $while-in + (block $while-out + (set_local $temp + (get_local $j) + ) + (if + (call $return_int) + (if + (get_local $temp) + (block + (set_local $i$lcssa + (get_local $j) + ) + (br $label$break$L7) + ) + ) + ) + (set_local $jnc + (i32.add + (get_local $j) + (i32.const 1) + ) + ) + (if + (get_local $jnc) + (set_local $j + (get_local $jnc) + ) + (br $while-out) + ) + (br $while-in) + ) + ) + (br $label$continue$L7) + ) + ) + (return + (get_local $i$lcssa) + ) + ) + (func $relooperJumpThreading (; 60 ;) (param $x i32) (result i32) + (local $label i32) + (if + (get_local $x) + (block + (call $h + (i32.const 0) + ) + (set_local $label + (i32.const 1) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 1) + ) + (call $h + (i32.const 1) + ) + ) + (call $h + (i32.const -1) + ) + (loop $while-in + (block $while-out + (set_local $x + (i32.add + (get_local $x) + (i32.const 1) + ) + ) + (if + (get_local $x) + (block + (call $h + (i32.const 2) + ) + (set_local $label + (i32.const 2) + ) + (br $while-out) + ) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 2) + ) + (call $h + (i32.const 3) + ) + ) + (call $h + (i32.const -2) + ) + (if + (get_local $x) + (block + (call $h + (i32.const 4) + ) + (if + (i32.eq + (get_local $x) + (i32.const 3) + ) + (set_local $label + (i32.const 3) + ) + (set_local $label + (i32.const 4) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 3) + ) + (call $h + (i32.const 5) + ) + (if + (i32.eq + (get_local $label) + (i32.const 4) + ) + (call $h + (i32.const 6) + ) + ) + ) + (call $h + (i32.const -3) + ) + (if + (get_local $x) + (block + (call $h + (i32.const 7) + ) + (if + (i32.eq + (get_local $x) + (i32.const 5) + ) + (set_local $label + (i32.const 5) + ) + (set_local $label + (i32.const 6) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 5) + ) + (block + (call $h + (i32.const 8) + ) + (if + (i32.eq + (get_local $x) + (i32.const 6) + ) + (set_local $label + (i32.const 6) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 6) + ) + (call $h + (i32.const 9) + ) + ) + (call $h + (i32.const -4) + ) + (if + (get_local $x) + (block + (call $h + (i32.const 10) + ) + (set_local $label + (i32.const 7) + ) + ) + ) + (block $label$break$L1 + (if + (i32.eq + (get_local $label) + (i32.const 7) + ) + (block + (call $h + (i32.const 11) + ) + (br $label$break$L1) + ) + ) + ) + (call $h + (i32.const -5) + ) + (if + (get_local $x) + (block + (call $h + (i32.const 12) + ) + (if + (i32.eq + (get_local $x) + (i32.const 8) + ) + (set_local $label + (i32.const 8) + ) + (set_local $label + (i32.const 9) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 8) + ) + (block + (call $h + (i32.const 13) + ) + (if + (get_local $x) + (set_local $label + (i32.const 9) + ) + ) + ) + ) + (block $label$break$L10 + (if + (i32.eq + (get_local $label) + (i32.const 9) + ) + (block + (call $h + (i32.const 14) + ) + (br $label$break$L10) + ) + ) + ) + (call $h + (i32.const -6) + ) + (return + (get_local $x) + ) + ) + (func $relooperJumpThreading__ZN4game14preloadweaponsEv (; 61 ;) (param $$12 i32) (param $$14 i32) (param $$or$cond8 i32) (param $$or$cond6 i32) (param $$vararg_ptr5 i32) (param $$11 i32) (param $$exitcond i32) + (local $label i32) + (loop $while-in + (block $while-out + (if + (get_local $$14) + (if + (get_local $$or$cond8) + (set_local $label + (i32.const 7) + ) + (set_local $label + (i32.const 8) + ) + ) + (if + (get_local $$or$cond6) + (set_local $label + (i32.const 7) + ) + (set_local $label + (i32.const 8) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 7) + ) + (set_local $label + (i32.const 0) + ) + (if + (i32.eq + (get_local $label) + (i32.const 8) + ) + (block + (set_local $label + (i32.const 0) + ) + (i32.store + (get_local $$vararg_ptr5) + (get_local $$11) + ) + ) + ) + ) + (br $while-in) + ) + ) + ) + (func $relooperJumpThreading_irreducible (; 62 ;) (param $x i32) + (local $label i32) + (if + (i32.eq + (get_local $x) + (i32.const 100) + ) + (set_local $label + (i32.const 1) + ) + (set_local $label + (i32.const 10) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 1) + ) + (loop $while-in + (block $while-out + (call $relooperJumpThreading_irreducible + (i32.const 1337) + ) + (set_local $label + (i32.const 1) + ) + (br $while-in) + ) + ) + ) + (if + (i32.eq + (get_local $x) + (i32.const 200) + ) + (set_local $label + (i32.const 2) + ) + (set_local $label + (i32.const 10) + ) + ) + (if + (i32.eq + (get_local $x) + (i32.const 300) + ) + (set_local $label + (i32.const 2) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 2) + ) + (call $relooperJumpThreading_irreducible + (i32.const 1448) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 10) + ) + (call $relooperJumpThreading_irreducible + (i32.const 2000) + ) + ) + ) + (func $__Z12multi_varargiz (; 63 ;) (param $$0 i32) (param $$$06$i4 i32) (param $$exitcond$i6 i32) (param $$2 i32) + (local $$12 i32) + (local $$20 i32) + (if + (get_local $$2) + (loop $while-in + (block $while-out + (set_local $$12 + (get_local $$$06$i4) + ) + (if + (get_local $$exitcond$i6) + (br $while-out) + (set_local $$$06$i4 + (get_local $$20) + ) + ) + (br $while-in) + ) + ) + (drop + (call $lb + (i32.const 1) + ) + ) + ) + ) + (func $jumpThreadDrop (; 64 ;) (result i32) + (local $label i32) + (local $temp i32) + (set_local $temp + (call $return_int) + ) + (loop $while-in + (block $while-out + (set_local $label + (i32.const 14) + ) + (br $while-out) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 10) + ) + (nop) + (if + (i32.eq + (get_local $label) + (i32.const 12) + ) + (drop + (call $return_int) + ) + (if + (i32.eq + (get_local $label) + (i32.const 14) + ) + (nop) + ) + ) + ) + (return + (get_local $temp) + ) + ) + (func $dropIgnoredImportInIf (; 65 ;) (param $$0 i32) (param $$1 i32) (param $$2 i32) + (block $do-once + (if + (get_local $$0) + (block + (set_local $$0 + (i32.const 1) + ) + (drop + (call $lb + (get_local $$2) + ) + ) + ) + (br $do-once) + ) + (nop) + ) + (return) + ) + (func $big_fround (; 66 ;) (result f32) + (return + (f32.const 4294967296) + ) + ) + (func $dropIgnoredImportsInIf (; 67 ;) (param $$0 i32) (param $$1 i32) (param $$2 i32) + (block $do-once + (if + (get_local $$0) + (drop + (call $lb + (get_local $$1) + ) + ) + (drop + (call $lb + (get_local $$2) + ) + ) + ) + (nop) + ) + (return) + ) + (func $f32_ucast (; 68 ;) (param $x i32) (result f32) + (return + (f32.convert_u/i32 + (get_local $x) + ) + ) + ) + (func $f32_scast (; 69 ;) (param $x i32) (result f32) + (return + (f32.convert_s/i32 + (get_local $x) + ) + ) + ) + (func $store_fround (; 70 ;) (param $x i32) + (f64.store + (i32.const 80) + (f64.promote/f32 + (f32.convert_s/i32 + (get_local $x) + ) + ) + ) + ) + (func $relocatableAndModules (; 71 ;) (result i32) + (call_indirect (type $FUNCSIG$v) + (i32.const 10) + ) + (call_indirect (type $FUNCSIG$v) + (i32.const 20) + ) + (return + (call_indirect (type $FUNCSIG$idi) + (f64.const 1.5) + (i32.const 200) + (i32.const 30) + ) + ) + ) + (func $exported_f32_user (; 72 ;) (param $x i32) (param $y f32) (param $z f64) (result f32) + (return + (get_local $y) + ) + ) + (func $sqrts (; 73 ;) (param $x f64) (result f64) + (return + (f64.add + (f64.sqrt + (get_local $x) + ) + (f64.promote/f32 + (f32.sqrt + (f32.demote/f64 + (get_local $x) + ) + ) + ) + ) + ) + ) + (func $f64-to-uint (; 74 ;) (param $0 f64) (result i32) + (if (result i32) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i32.const 0) + (if (result i32) + (f64.ge + (get_local $0) + (f64.const 4294967296) + ) + (i32.const 0) + (if (result i32) + (f64.le + (get_local $0) + (f64.const -1) + ) + (i32.const 0) + (i32.trunc_u/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $f2u (; 75 ;) (param $x f64) (result i32) + (return + (call $f64-to-uint + (get_local $x) + ) + ) + ) + (func $f2s (; 76 ;) (param $x f64) (result i32) + (return + (call $f64-to-int + (get_local $x) + ) + ) + ) + (func $autoDrop (; 77 ;) (param $x i32) (result i32) + (loop $while-in + (block $while-out + (if + (i32.eq + (get_local $x) + (i32.const 17) + ) + (block + (return + (i32.const 5) + ) + (drop + (call $autoDrop + (i32.const 1) + ) + ) + ) + (block + (br $while-out) + (set_local $x + (call $autoDrop + (i32.const 2) + ) + ) + ) + ) + (br $while-in) + ) + ) + (return + (get_local $x) + ) + ) + (func $indirectInSequence (; 78 ;) + (local $i1 i32) + (set_local $i1 + (block (result i32) + (call_indirect (type $FUNCSIG$vi) + (i32.const 0) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 16) + ) + ) + (i32.const 1) + ) + ) + ) + (func $emterpretify_assertions_safeHeap (; 79 ;) + (local $i1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $i1) + (i32.add + (i32.and + (block (result i32) + (set_global $Int + (i32.const 1) + ) + (get_global $Int) + ) + (i32.const 7) + ) + (i32.const 16) + ) + ) + ) + (func $call_emscripten_log (; 80 ;) + (call $emscripten_log) + (if + (i32.const 2) + (drop + (call $f64-to-int + (call $abort + (f64.const 0) + ) + ) + ) + (drop + (i32.const 3) + ) + ) + ) + (func $keepAlive (; 81 ;) + (drop + (call $sqrts + (f64.const 3.14159) + ) + ) + (drop + (call $sqrts + (f64.const 2.18281) + ) + ) + (drop + (call $f2u + (f64.const 100) + ) + ) + (drop + (call $f2s + (f64.const 100) + ) + ) + (drop + (call $autoDrop + (i32.const 52) + ) + ) + (call $indirectInSequence) + (call $emterpretify_assertions_safeHeap) + (call $call_emscripten_log) + ) + (func $v (; 82 ;) + (nop) + ) + (func $vi (; 83 ;) (param $x i32) + (nop) + ) + (func $ii (; 84 ;) (param $x i32) (result i32) + (return + (get_local $x) + ) + ) + (func $legalstub$conversions (; 85 ;) (param $0 i32) (param $1 f64) (param $2 f64) + (call $conversions + (get_local $0) + (get_local $1) + (f32.demote/f64 + (get_local $2) + ) + ) + ) + (func $legalstub$frem_float (; 86 ;) (result f64) + (f64.promote/f32 + (call $frem_float) + ) + ) + (func $legalstub$fr (; 87 ;) (param $0 f64) + (call $fr + (f32.demote/f64 + (get_local $0) + ) + ) + ) + (func $legalstub$ceiling_32_64 (; 88 ;) (param $0 f64) (param $1 f64) + (call $ceiling_32_64 + (f32.demote/f64 + (get_local $0) + ) + (get_local $1) + ) + ) + (func $legalstub$bitcasts (; 89 ;) (param $0 i32) (param $1 f64) + (call $bitcasts + (get_local $0) + (f32.demote/f64 + (get_local $1) + ) + ) + ) + (func $legalstub$exported_f32_user (; 90 ;) (param $0 i32) (param $1 f64) (param $2 f64) (result f64) + (f64.promote/f32 + (call $exported_f32_user + (get_local $0) + (f32.demote/f64 + (get_local $1) + ) + (get_local $2) + ) + ) + ) +) diff --git a/src/binaryen/test/unit.fromasm.imprecise b/src/binaryen/test/unit.fromasm.imprecise new file mode 100644 index 0000000000..6cda1e7c1c --- /dev/null +++ b/src/binaryen/test/unit.fromasm.imprecise @@ -0,0 +1,1251 @@ +(module + (type $FUNCSIG$ddd (func (param f64 f64) (result f64))) + (type $FUNCSIG$vf (func (param f32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$idi (func (param f64 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$dd (func (param f64) (result f64))) + (type $FUNCSIG$i (func (result i32))) + (import "env" "gb" (global $n$asm2wasm$import i32)) + (import "env" "setTempRet0" (func $setTempRet0 (param i32) (result i32))) + (import "env" "abort" (func $abort (param f64) (result f64))) + (import "env" "print" (func $print (param i32))) + (import "env" "h" (func $h (param i32))) + (import "env" "return_int" (func $return_int (result i32))) + (import "env" "emscripten_log" (func $emscripten_log)) + (import "asm2wasm" "f64-rem" (func $f64-rem (param f64 f64) (result f64))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 25 25 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $Int (mut i32) (i32.const 0)) + (global $Double (mut f64) (f64.const 0)) + (global $n (mut i32) (get_global $n$asm2wasm$import)) + (global $exportedNumber i32 (i32.const 42)) + (elem (get_global $tableBase) $big_negative $big_negative $big_negative $big_negative $w $w $importedDoubles $w $fr $cneg $fr $fr $fr $fr $fr $fr $vi $vi $vi $vi $vi $vi $vi $vi $ii) + (export "big_negative" (func $big_negative)) + (export "pick" (func $big_negative)) + (export "doubleCompares" (func $doubleCompares)) + (export "intOps" (func $intOps)) + (export "conversions" (func $legalstub$conversions)) + (export "switcher" (func $switcher)) + (export "frem" (func $frem)) + (export "frem_float" (func $legalstub$frem_float)) + (export "big_uint_div_u" (func $big_uint_div_u)) + (export "trapping_sint_div_s" (func $trapping_sint_div_s)) + (export "fr" (func $legalstub$fr)) + (export "negZero" (func $negZero)) + (export "neg" (func $neg)) + (export "smallCompare" (func $smallCompare)) + (export "cneg_nosemicolon" (func $cneg_nosemicolon)) + (export "forLoop" (func $forLoop)) + (export "ceiling_32_64" (func $legalstub$ceiling_32_64)) + (export "aborts" (func $aborts)) + (export "continues" (func $continues)) + (export "bitcasts" (func $legalstub$bitcasts)) + (export "recursiveBlockMerging" (func $recursiveBlockMerging)) + (export "lb" (func $lb)) + (export "zeroInit" (func $zeroInit)) + (export "phi" (func $phi)) + (export "smallIf" (func $smallIf)) + (export "dropCall" (func $dropCall)) + (export "useSetGlobal" (func $useSetGlobal)) + (export "usesSetGlobal2" (func $usesSetGlobal2)) + (export "breakThroughMany" (func $breakThroughMany)) + (export "ifChainEmpty" (func $ifChainEmpty)) + (export "heap8NoShift" (func $heap8NoShift)) + (export "conditionalTypeFun" (func $conditionalTypeFun)) + (export "loadSigned" (func $loadSigned)) + (export "globalOpts" (func $globalOpts)) + (export "dropCallImport" (func $dropCallImport)) + (export "loophi" (func $loophi)) + (export "loophi2" (func $loophi2)) + (export "loophi2b" (func $loophi2b)) + (export "relooperJumpThreading" (func $relooperJumpThreading)) + (export "relooperJumpThreading__ZN4game14preloadweaponsEv" (func $relooperJumpThreading__ZN4game14preloadweaponsEv)) + (export "__Z12multi_varargiz" (func $__Z12multi_varargiz)) + (export "jumpThreadDrop" (func $jumpThreadDrop)) + (export "dropIgnoredImportInIf" (func $dropIgnoredImportInIf)) + (export "dropIgnoredImportsInIf" (func $dropIgnoredImportsInIf)) + (export "relooperJumpThreading_irreducible" (func $relooperJumpThreading_irreducible)) + (export "store_fround" (func $store_fround)) + (export "exportedNumber" (global $exportedNumber)) + (export "relocatableAndModules" (func $relocatableAndModules)) + (export "exported_f32_user" (func $legalstub$exported_f32_user)) + (export "keepAlive" (func $keepAlive)) + (func $big_negative (; 7 ;) + (nop) + ) + (func $importedDoubles (; 8 ;) (result f64) + (if + (i32.gt_s + (get_global $Int) + (i32.const 0) + ) + (return + (f64.const -3.4) + ) + ) + (if + (f64.gt + (get_global $Double) + (f64.const 0) + ) + (return + (f64.const 5.6) + ) + ) + (f64.const 1.2) + ) + (func $doubleCompares (; 9 ;) (param $0 f64) (param $1 f64) (result f64) + (if + (f64.gt + (get_local $0) + (f64.const 0) + ) + (return + (f64.const 1.2) + ) + ) + (if + (f64.gt + (get_local $0) + (f64.const 0) + ) + (return + (f64.const -3.4) + ) + ) + (if + (i32.gt_s + (get_global $n) + (i32.const 0) + ) + (return + (f64.const 5.6) + ) + ) + (if + (f64.lt + (get_local $0) + (get_local $1) + ) + (return + (get_local $0) + ) + ) + (get_local $1) + ) + (func $intOps (; 10 ;) (param $0 i32) (result i32) + (i32.eqz + (get_local $0) + ) + ) + (func $conversions (; 11 ;) (param $0 i32) (param $1 f64) (param $2 f32) + (nop) + ) + (func $switcher (; 12 ;) (param $0 i32) (result i32) + (block $switch + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-case0 $switch + (i32.sub + (get_local $0) + (i32.const 1) + ) + ) + ) + (return + (i32.const 1) + ) + ) + (return + (i32.const 2) + ) + ) + (block $switch1 + (block $switch-case3 + (block $switch-case2 + (br_table $switch-case3 $switch1 $switch1 $switch1 $switch1 $switch1 $switch1 $switch-case2 $switch1 + (i32.sub + (get_local $0) + (i32.const 5) + ) + ) + ) + (return + (i32.const 121) + ) + ) + (return + (i32.const 51) + ) + ) + (block $switch-case9 + (block $switch-case4 + (br_table $switch-case9 $switch-case9 $switch-case9 $switch-case4 $switch-case9 $switch-case9 $switch-case9 $switch-case9 $switch-case4 $switch-case9 $switch-case4 $switch-case9 + (i32.sub + (get_local $0) + (i32.const 2) + ) + ) + ) + ) + (loop $label$continue$L1 + (block $label$break$L1 + (loop $label$continue$L3 + (block $label$break$L3 + (block $switch-default + (block $switch-case13 + (block $switch-case12 + (block $switch-case11 + (br_table $switch-case11 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case13 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case12 $switch-default + (i32.sub + (get_local $0) + (i32.const -1) + ) + ) + ) + (br $label$break$L1) + ) + (br $label$continue$L3) + ) + (br $label$break$L3) + ) + (br $label$break$L1) + ) + ) + (call $h + (i32.const 120) + ) + (br $label$continue$L1) + ) + ) + (i32.const 0) + ) + (func $frem (; 13 ;) (result f64) + (call $f64-rem + (f64.const 5.5) + (f64.const 1.2) + ) + ) + (func $frem_float (; 14 ;) (result f32) + (f32.demote/f64 + (call $f64-rem + (f64.const 5.5) + (f64.const 1.2000000476837158) + ) + ) + ) + (func $big_uint_div_u (; 15 ;) (result i32) + (i32.const 2147483647) + ) + (func $trapping_sint_div_s (; 16 ;) (result i32) + (i32.div_s + (i32.const -2147483648) + (i32.const -1) + ) + ) + (func $fr (; 17 ;) (param $0 f32) + (nop) + ) + (func $negZero (; 18 ;) (result f64) + (f64.const -0) + ) + (func $neg (; 19 ;) + (local $0 f32) + (call_indirect (type $FUNCSIG$vf) + (f32.neg + (get_local $0) + ) + (i32.const 9) + ) + ) + (func $cneg (; 20 ;) (param $0 f32) + (call_indirect (type $FUNCSIG$vf) + (get_local $0) + (i32.const 9) + ) + ) + (func $smallCompare (; 21 ;) (param $0 i32) (param $1 i32) (result i32) + (if + (i32.lt_s + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (get_local $0) + ) + (func $cneg_nosemicolon (; 22 ;) + (call_indirect (type $FUNCSIG$vi) + (i32.const 1) + (i32.const 17) + ) + ) + (func $forLoop (; 23 ;) + (local $0 i32) + (set_local $0 + (i32.const 1) + ) + (loop $for-in + (if + (i32.lt_s + (get_local $0) + (i32.const 200) + ) + (block + (call $h + (get_local $0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $for-in) + ) + ) + ) + ) + (func $ceiling_32_64 (; 24 ;) (param $0 f32) (param $1 f64) + (nop) + ) + (func $aborts (; 25 ;) + (drop + (call $abort + (f64.const 0) + ) + ) + (drop + (call $abort + (f64.convert_s/i32 + (i32.const 55) + ) + ) + ) + (drop + (call $abort + (f64.const 0) + ) + ) + (drop + (call $abort + (f64.const 12.34) + ) + ) + (drop + (call $abort + (f64.const 56.779998779296875) + ) + ) + ) + (func $continues (; 26 ;) + (loop $while-in + (call $print + (i32.const 1) + ) + (loop $unlikely-continue + (call $print + (i32.const 5) + ) + (br_if $unlikely-continue + (call $return_int) + ) + ) + (call $print + (i32.const 2) + ) + (br $while-in) + ) + ) + (func $bitcasts (; 27 ;) (param $0 i32) (param $1 f32) + (nop) + ) + (func $recursiveBlockMerging (; 28 ;) (param $0 i32) (result i32) + (drop + (call $lb + (i32.add + (get_local $0) + (i32.const 22) + ) + ) + ) + (drop + (call $lb + (i32.const 1) + ) + ) + (drop + (call $lb + (i32.const 2) + ) + ) + (i32.add + (i32.add + (i32.add + (get_local $0) + (call $lb + (i32.const 3) + ) + ) + (block (result i32) + (drop + (call $lb + (i32.const 4) + ) + ) + (drop + (call $lb + (i32.const 5) + ) + ) + (drop + (call $lb + (i32.const 6) + ) + ) + (call $lb + (i32.const 7) + ) + ) + ) + (block (result i32) + (drop + (call $lb + (i32.const 8) + ) + ) + (drop + (call $lb + (i32.const 9) + ) + ) + (drop + (call $lb + (i32.const 10) + ) + ) + (drop + (call $lb + (i32.const 11) + ) + ) + (call $lb + (i32.const 12) + ) + ) + ) + ) + (func $lb (; 29 ;) (param $0 i32) (result i32) + (i32.store + (get_local $0) + (i32.add + (get_global $n) + (i32.const 144) + ) + ) + (i32.const 0) + ) + (func $zeroInit (; 30 ;) (param $0 i32) + (local $1 i32) + (if + (call $lb + (i32.const 0) + ) + (if + (call $lb + (i32.const 1) + ) + (set_local $1 + (i32.const 3) + ) + ) + (set_local $1 + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 3) + ) + (drop + (call $lb + (i32.const 2) + ) + ) + ) + ) + (func $phi (; 31 ;) (result i32) + (block $do-once (result i32) + (drop + (br_if $do-once + (i32.const 0) + (call $lb + (i32.const 1) + ) + ) + ) + (i32.const 1) + ) + ) + (func $smallIf (; 32 ;) + (if + (call $return_int) + (drop + (call $lb + (i32.const 3) + ) + ) + ) + ) + (func $dropCall (; 33 ;) (result i32) + (if + (call $return_int) + (block + (drop + (call $phi) + ) + (drop + (call $setTempRet0 + (i32.const 10) + ) + ) + (call $zeroInit + (call $setTempRet0 + (i32.const 10) + ) + ) + ) + ) + (call $phi) + ) + (func $useSetGlobal (; 34 ;) (result i32) + (set_global $Int + (i32.const 10) + ) + (set_global $Int + (i32.const 20) + ) + (set_global $Int + (i32.const 30) + ) + (get_global $Int) + ) + (func $usesSetGlobal2 (; 35 ;) (result i32) + (set_global $Int + (i32.const 40) + ) + (i32.const 50) + ) + (func $breakThroughMany (; 36 ;) (param $0 i32) + (block $label$break$L1 + (if + (get_local $0) + (loop $while-in + (br_if $label$break$L1 + (i32.eqz + (get_local $0) + ) + ) + (call $zeroInit + (i32.const 0) + ) + (br $while-in) + ) + ) + ) + ) + (func $ifChainEmpty (; 37 ;) (param $0 i32) (result i32) + (if + (i32.eq + (get_local $0) + (i32.const 4) + ) + (return + (i32.const 0) + ) + ) + (i32.const 0) + ) + (func $heap8NoShift (; 38 ;) (param $0 i32) (result i32) + (i32.load8_s + (get_local $0) + ) + ) + (func $conditionalTypeFun (; 39 ;) + (drop + (if (result i32) + (call $return_int) + (i32.trunc_s/f64 + (call $abort + (f64.convert_s/i32 + (i32.const 5) + ) + ) + ) + (i32.const 2) + ) + ) + (drop + (if (result f64) + (call $return_int) + (call $abort + (f64.convert_s/i32 + (i32.const 7) + ) + ) + (f64.const 4.5) + ) + ) + ) + (func $loadSigned (; 40 ;) (param $0 i32) + (call $loadSigned + (i32.load8_s + (get_local $0) + ) + ) + (call $loadSigned + (i32.load8_s + (get_local $0) + ) + ) + (call $loadSigned + (i32.load16_s + (get_local $0) + ) + ) + (call $loadSigned + (i32.load16_s + (get_local $0) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load8_s + (get_local $0) + ) + (i32.const 24) + ) + (i32.const 16) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load8_u + (get_local $0) + ) + (i32.const 16) + ) + (i32.const 24) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load16_s + (get_local $0) + ) + (i32.const 16) + ) + (i32.const 24) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load16_u + (get_local $0) + ) + (i32.const 24) + ) + (i32.const 16) + ) + ) + ) + (func $w (; 41 ;) (result f64) + (f64.const 0) + ) + (func $globalOpts (; 42 ;) + (local $0 i32) + (i32.store8 + (i32.const 13) + (i32.load + (i32.const 12) + ) + ) + (call $globalOpts) + (set_local $0 + (get_global $Int) + ) + (if + (call $return_int) + (set_global $Int + (i32.const 20) + ) + ) + (set_global $Int + (get_local $0) + ) + (call $globalOpts) + (set_local $0 + (get_global $Int) + ) + (call $globalOpts) + (set_global $Int + (get_local $0) + ) + ) + (func $dropCallImport (; 43 ;) + (if + (call $return_int) + (drop + (call $return_int) + ) + ) + ) + (func $loophi (; 44 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (loop $while-in + (block $while-out + (call $loophi + (get_local $0) + (i32.const 0) + ) + (if + (tee_local $2 + (get_local $0) + ) + (br_if $while-out + (get_local $2) + ) + ) + (br_if $while-in + (i32.eq + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (get_local $1) + ) + ) + ) + ) + ) + (func $loophi2 (; 45 ;) (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (i32.const 0) + ) + (loop $label$continue$L7 + (block $label$break$L7 + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (set_local $2 + (get_local $0) + ) + (if + (call $return_int) + (br_if $label$break$L7 + (get_local $2) + ) + ) + (br_if $while-in + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (br $label$continue$L7) + ) + ) + (get_local $1) + ) + (func $loophi2b (; 46 ;) (result i32) + (local $0 i32) + (local $1 i32) + (loop $label$continue$L7 + (block $label$break$L7 + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (set_local $1 + (get_local $0) + ) + (if + (call $return_int) + (br_if $label$break$L7 + (get_local $1) + ) + ) + (br_if $while-in + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (br $label$continue$L7) + ) + ) + (get_local $0) + ) + (func $relooperJumpThreading (; 47 ;) (param $0 i32) (result i32) + (block $__rjto$0 + (block $__rjti$0 + (if + (get_local $0) + (block + (call $h + (i32.const 0) + ) + (br $__rjti$0) + ) + ) + (br $__rjto$0) + ) + (call $h + (i32.const 1) + ) + ) + (call $h + (i32.const -1) + ) + (loop $while-in + (br_if $while-in + (i32.eqz + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (call $h + (i32.const 2) + ) + ) + (call $h + (i32.const 3) + ) + (call $h + (i32.const -2) + ) + (block $__rjto$3 + (block $__rjti$3 + (block $__rjti$2 + (if + (get_local $0) + (block + (call $h + (i32.const 4) + ) + (br_if $__rjti$2 + (i32.eq + (get_local $0) + (i32.const 3) + ) + ) + (br $__rjti$3) + ) + ) + (br $__rjto$3) + ) + (call $h + (i32.const 5) + ) + (br $__rjto$3) + ) + (call $h + (i32.const 6) + ) + ) + (call $h + (i32.const -3) + ) + (block $__rjto$5 + (block $__rjti$5 + (block $__rjti$4 + (if + (get_local $0) + (block + (call $h + (i32.const 7) + ) + (br_if $__rjti$4 + (i32.eq + (get_local $0) + (i32.const 5) + ) + ) + (br $__rjti$5) + ) + ) + (br $__rjto$5) + ) + (call $h + (i32.const 8) + ) + (br_if $__rjti$5 + (i32.eq + (get_local $0) + (i32.const 6) + ) + ) + (br $__rjto$5) + ) + (call $h + (i32.const 9) + ) + ) + (call $h + (i32.const -4) + ) + (block $label$break$L1 + (block $__rjti$6 + (if + (get_local $0) + (block + (call $h + (i32.const 10) + ) + (br $__rjti$6) + ) + ) + (br $label$break$L1) + ) + (call $h + (i32.const 11) + ) + ) + (call $h + (i32.const -5) + ) + (block $label$break$L10 + (block $__rjti$8 + (block $__rjti$7 + (if + (get_local $0) + (block + (call $h + (i32.const 12) + ) + (br_if $__rjti$7 + (i32.eq + (get_local $0) + (i32.const 8) + ) + ) + (br $__rjti$8) + ) + ) + (br $label$break$L10) + ) + (call $h + (i32.const 13) + ) + (br_if $__rjti$8 + (get_local $0) + ) + (br $label$break$L10) + ) + (call $h + (i32.const 14) + ) + ) + (call $h + (i32.const -6) + ) + (get_local $0) + ) + (func $relooperJumpThreading__ZN4game14preloadweaponsEv (; 48 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) + (loop $while-in + (block $__rjto$1 + (block $__rjti$1 + (if + (get_local $1) + (br_if $__rjti$1 + (i32.eqz + (get_local $2) + ) + ) + (br_if $__rjti$1 + (i32.eqz + (get_local $3) + ) + ) + ) + (br $while-in) + ) + (i32.store + (get_local $4) + (get_local $5) + ) + ) + (br $while-in) + ) + ) + (func $relooperJumpThreading_irreducible (; 49 ;) (param $0 i32) + (local $1 i32) + (if + (i32.eq + (get_local $0) + (i32.const 100) + ) + (loop $while-in + (call $relooperJumpThreading_irreducible + (i32.const 1337) + ) + (br $while-in) + ) + ) + (set_local $1 + (select + (i32.const 2) + (i32.const 10) + (i32.eq + (get_local $0) + (i32.const 200) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (i32.const 300) + ) + (set_local $1 + (i32.const 2) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 2) + ) + (call $relooperJumpThreading_irreducible + (i32.const 1448) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 10) + ) + (call $relooperJumpThreading_irreducible + (i32.const 2000) + ) + ) + ) + (func $__Z12multi_varargiz (; 50 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (if + (get_local $3) + (loop $while-in + (br_if $while-in + (i32.eqz + (get_local $2) + ) + ) + ) + (drop + (call $lb + (i32.const 1) + ) + ) + ) + ) + (func $jumpThreadDrop (; 51 ;) (result i32) + (call $return_int) + ) + (func $dropIgnoredImportInIf (; 52 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (if + (get_local $0) + (drop + (call $lb + (get_local $2) + ) + ) + ) + ) + (func $dropIgnoredImportsInIf (; 53 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (drop + (if (result i32) + (get_local $0) + (call $lb + (get_local $1) + ) + (call $lb + (get_local $2) + ) + ) + ) + ) + (func $store_fround (; 54 ;) (param $0 i32) + (f64.store + (i32.const 80) + (f64.promote/f32 + (f32.convert_s/i32 + (get_local $0) + ) + ) + ) + ) + (func $relocatableAndModules (; 55 ;) (result i32) + (call_indirect (type $FUNCSIG$v) + (i32.const 10) + ) + (call_indirect (type $FUNCSIG$v) + (i32.const 20) + ) + (call_indirect (type $FUNCSIG$idi) + (f64.const 1.5) + (i32.const 200) + (i32.const 30) + ) + ) + (func $exported_f32_user (; 56 ;) (param $0 i32) (param $1 f32) (param $2 f64) (result f32) + (get_local $1) + ) + (func $sqrts (; 57 ;) (param $0 f64) (result f64) + (f64.add + (f64.sqrt + (get_local $0) + ) + (f64.promote/f32 + (f32.sqrt + (f32.demote/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $keepAlive (; 58 ;) + (drop + (call $sqrts + (f64.const 3.14159) + ) + ) + (drop + (call $sqrts + (f64.const 2.18281) + ) + ) + (call_indirect (type $FUNCSIG$vi) + (i32.const 0) + (i32.const 17) + ) + (call_indirect (type $FUNCSIG$vi) + (i32.const 0) + (block (result i32) + (set_global $Int + (i32.const 1) + ) + (i32.add + (i32.and + (get_global $Int) + (i32.const 7) + ) + (i32.const 16) + ) + ) + ) + (call $emscripten_log) + (drop + (i32.trunc_s/f64 + (call $abort + (f64.const 0) + ) + ) + ) + ) + (func $vi (; 59 ;) (param $0 i32) + (nop) + ) + (func $ii (; 60 ;) (param $0 i32) (result i32) + (get_local $0) + ) + (func $legalstub$conversions (; 61 ;) (param $0 i32) (param $1 f64) (param $2 f64) + (call $conversions + (get_local $0) + (get_local $1) + (f32.demote/f64 + (get_local $2) + ) + ) + ) + (func $legalstub$frem_float (; 62 ;) (result f64) + (f64.promote/f32 + (call $frem_float) + ) + ) + (func $legalstub$fr (; 63 ;) (param $0 f64) + (call $fr + (f32.demote/f64 + (get_local $0) + ) + ) + ) + (func $legalstub$ceiling_32_64 (; 64 ;) (param $0 f64) (param $1 f64) + (call $ceiling_32_64 + (f32.demote/f64 + (get_local $0) + ) + (get_local $1) + ) + ) + (func $legalstub$bitcasts (; 65 ;) (param $0 i32) (param $1 f64) + (call $bitcasts + (get_local $0) + (f32.demote/f64 + (get_local $1) + ) + ) + ) + (func $legalstub$exported_f32_user (; 66 ;) (param $0 i32) (param $1 f64) (param $2 f64) (result f64) + (f64.promote/f32 + (call $exported_f32_user + (get_local $0) + (f32.demote/f64 + (get_local $1) + ) + (get_local $2) + ) + ) + ) +) diff --git a/src/binaryen/test/unit.fromasm.imprecise.no-opts b/src/binaryen/test/unit.fromasm.imprecise.no-opts new file mode 100644 index 0000000000..3e52e1c115 --- /dev/null +++ b/src/binaryen/test/unit.fromasm.imprecise.no-opts @@ -0,0 +1,2137 @@ +(module + (type $FUNCSIG$ddd (func (param f64 f64) (result f64))) + (type $FUNCSIG$vf (func (param f32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$idi (func (param f64 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$dd (func (param f64) (result f64))) + (type $FUNCSIG$i (func (result i32))) + (import "global" "NaN" (global $t$asm2wasm$import f64)) + (import "global" "Infinity" (global $u$asm2wasm$import f64)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "gb" (global $n$asm2wasm$import i32)) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "setTempRet0" (func $setTempRet0 (param i32) (result i32))) + (import "env" "abort" (func $abort (param f64) (result f64))) + (import "env" "print" (func $print (param i32))) + (import "env" "h" (func $h (param i32))) + (import "env" "return_int" (func $return_int (result i32))) + (import "env" "emscripten_log" (func $emscripten_log)) + (import "asm2wasm" "f64-rem" (func $f64-rem (param f64 f64) (result f64))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 25 25 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $t (mut f64) (get_global $t$asm2wasm$import)) + (global $u (mut f64) (get_global $u$asm2wasm$import)) + (global $Int (mut i32) (i32.const 0)) + (global $Double (mut f64) (f64.const 0)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $n (mut i32) (get_global $n$asm2wasm$import)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $exportedNumber i32 (i32.const 42)) + (elem (get_global $tableBase) $v $big_negative $v $v $w $w $importedDoubles $w $z $cneg $z $z $z $z $z $z $vi $vi $vi $vi $vi $vi $vi $vi $ii) + (export "big_negative" (func $big_negative)) + (export "pick" (func $exportMe)) + (export "doubleCompares" (func $doubleCompares)) + (export "intOps" (func $intOps)) + (export "conversions" (func $legalstub$conversions)) + (export "switcher" (func $switcher)) + (export "frem" (func $frem)) + (export "frem_float" (func $legalstub$frem_float)) + (export "big_uint_div_u" (func $big_uint_div_u)) + (export "trapping_sint_div_s" (func $trapping_sint_div_s)) + (export "fr" (func $legalstub$fr)) + (export "negZero" (func $negZero)) + (export "neg" (func $neg)) + (export "smallCompare" (func $smallCompare)) + (export "cneg_nosemicolon" (func $cneg_nosemicolon)) + (export "forLoop" (func $forLoop)) + (export "ceiling_32_64" (func $legalstub$ceiling_32_64)) + (export "aborts" (func $aborts)) + (export "continues" (func $continues)) + (export "bitcasts" (func $legalstub$bitcasts)) + (export "recursiveBlockMerging" (func $recursiveBlockMerging)) + (export "lb" (func $lb)) + (export "zeroInit" (func $zeroInit)) + (export "phi" (func $phi)) + (export "smallIf" (func $smallIf)) + (export "dropCall" (func $dropCall)) + (export "useSetGlobal" (func $useSetGlobal)) + (export "usesSetGlobal2" (func $usesSetGlobal2)) + (export "breakThroughMany" (func $breakThroughMany)) + (export "ifChainEmpty" (func $ifChainEmpty)) + (export "heap8NoShift" (func $heap8NoShift)) + (export "conditionalTypeFun" (func $conditionalTypeFun)) + (export "loadSigned" (func $loadSigned)) + (export "globalOpts" (func $globalOpts)) + (export "dropCallImport" (func $dropCallImport)) + (export "loophi" (func $loophi)) + (export "loophi2" (func $loophi2)) + (export "loophi2b" (func $loophi2b)) + (export "relooperJumpThreading" (func $relooperJumpThreading)) + (export "relooperJumpThreading__ZN4game14preloadweaponsEv" (func $relooperJumpThreading__ZN4game14preloadweaponsEv)) + (export "__Z12multi_varargiz" (func $__Z12multi_varargiz)) + (export "jumpThreadDrop" (func $jumpThreadDrop)) + (export "dropIgnoredImportInIf" (func $dropIgnoredImportInIf)) + (export "dropIgnoredImportsInIf" (func $dropIgnoredImportsInIf)) + (export "relooperJumpThreading_irreducible" (func $relooperJumpThreading_irreducible)) + (export "store_fround" (func $store_fround)) + (export "exportedNumber" (global $exportedNumber)) + (export "relocatableAndModules" (func $relocatableAndModules)) + (export "exported_f32_user" (func $legalstub$exported_f32_user)) + (export "keepAlive" (func $keepAlive)) + (func $big_negative (; 7 ;) + (local $temp f64) + (set_local $temp + (f64.const -2147483648) + ) + (set_local $temp + (f64.const -2147483648) + ) + (set_local $temp + (f64.const -21474836480) + ) + (set_local $temp + (f64.const 0.039625) + ) + (set_local $temp + (f64.const -0.039625) + ) + ) + (func $importedDoubles (; 8 ;) (result f64) + (local $temp f64) + (set_local $temp + (f64.add + (f64.add + (f64.add + (get_global $t) + (get_global $u) + ) + (f64.neg + (get_global $u) + ) + ) + (f64.neg + (get_global $t) + ) + ) + ) + (if + (i32.gt_s + (get_global $Int) + (i32.const 0) + ) + (return + (f64.const -3.4) + ) + ) + (if + (f64.gt + (get_global $Double) + (f64.const 0) + ) + (return + (f64.const 5.6) + ) + ) + (return + (f64.const 1.2) + ) + ) + (func $doubleCompares (; 9 ;) (param $x f64) (param $y f64) (result f64) + (local $t f64) + (local $Int f64) + (local $Double i32) + (if + (f64.gt + (get_local $x) + (f64.const 0) + ) + (return + (f64.const 1.2) + ) + ) + (set_local $Int + (get_local $x) + ) + (set_local $Double + (get_global $n) + ) + (if + (f64.gt + (get_local $Int) + (f64.const 0) + ) + (return + (f64.const -3.4) + ) + ) + (if + (i32.gt_s + (get_local $Double) + (i32.const 0) + ) + (return + (f64.const 5.6) + ) + ) + (if + (f64.lt + (get_local $x) + (get_local $y) + ) + (return + (get_local $x) + ) + ) + (return + (get_local $y) + ) + ) + (func $intOps (; 10 ;) (param $x i32) (result i32) + (return + (i32.eqz + (get_local $x) + ) + ) + ) + (func $hexLiterals (; 11 ;) + (local $i i32) + (set_local $i + (i32.add + (i32.add + (i32.const 0) + (i32.const 313249263) + ) + (i32.const -19088752) + ) + ) + ) + (func $conversions (; 12 ;) (param $i i32) (param $d f64) (param $f f32) + (set_local $i + (i32.trunc_s/f64 + (get_local $d) + ) + ) + (set_local $i + (i32.trunc_s/f32 + (get_local $f) + ) + ) + (set_local $d + (f64.convert_s/i32 + (get_local $i) + ) + ) + (set_local $d + (f64.convert_u/i32 + (get_local $i) + ) + ) + ) + (func $seq (; 13 ;) + (local $J f64) + (set_local $J + (f64.sub + (block (result f64) + (drop + (f64.const 0.1) + ) + (f64.const 5.1) + ) + (block (result f64) + (drop + (f64.const 3.2) + ) + (f64.const 4.2) + ) + ) + ) + ) + (func $switcher (; 14 ;) (param $x i32) (result i32) + (local $waka i32) + (block $switch + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-case0 $switch + (i32.sub + (get_local $x) + (i32.const 1) + ) + ) + ) + (return + (i32.const 1) + ) + ) + (return + (i32.const 2) + ) + ) + (block $switch1 + (block $switch-case3 + (block $switch-case2 + (br_table $switch-case3 $switch1 $switch1 $switch1 $switch1 $switch1 $switch1 $switch-case2 $switch1 + (i32.sub + (get_local $x) + (i32.const 5) + ) + ) + ) + (return + (i32.const 121) + ) + ) + (return + (i32.const 51) + ) + ) + (block $label$break$Lout + (block $switch-case9 + (block $switch-case6 + (block $switch-case5 + (block $switch-case4 + (br_table $switch-case9 $label$break$Lout $label$break$Lout $switch-case6 $label$break$Lout $label$break$Lout $label$break$Lout $label$break$Lout $switch-case5 $label$break$Lout $switch-case4 $label$break$Lout + (i32.sub + (get_local $x) + (i32.const 2) + ) + ) + ) + (br $label$break$Lout) + ) + (br $label$break$Lout) + ) + (block + (loop $while-in + (block $while-out + (br $while-out) + (br $while-in) + ) + ) + (br $label$break$Lout) + ) + ) + (block + (loop $while-in8 + (block $while-out7 + (br $label$break$Lout) + (br $while-in8) + ) + ) + (br $label$break$Lout) + ) + ) + (loop $label$continue$L1 + (block $label$break$L1 + (loop $label$continue$L3 + (block $label$break$L3 + (block $switch10 + (block $switch-default + (block $switch-case13 + (block $switch-case12 + (block $switch-case11 + (br_table $switch-case11 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case13 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case12 $switch-default + (i32.sub + (get_local $x) + (i32.const -1) + ) + ) + ) + (block + (br $label$break$L1) + (br $switch10) + ) + ) + (block + (set_local $waka + (i32.const 1) + ) + (br $switch10) + ) + ) + (block + (br $label$break$L3) + (br $switch10) + ) + ) + (br $label$break$L1) + ) + (br $label$continue$L3) + ) + ) + (call $h + (i32.const 120) + ) + (br $label$continue$L1) + ) + ) + (return + (i32.const 0) + ) + ) + (func $blocker (; 15 ;) + (block $label$break$L + (br $label$break$L) + ) + ) + (func $frem (; 16 ;) (result f64) + (return + (call $f64-rem + (f64.const 5.5) + (f64.const 1.2) + ) + ) + ) + (func $frem_float (; 17 ;) (result f32) + (return + (f32.demote/f64 + (call $f64-rem + (f64.promote/f32 + (f32.const 5.5) + ) + (f64.promote/f32 + (f32.const 1.2000000476837158) + ) + ) + ) + ) + ) + (func $big_uint_div_u (; 18 ;) (result i32) + (local $x i32) + (set_local $x + (i32.and + (i32.div_u + (i32.const -1) + (i32.const 2) + ) + (i32.const -1) + ) + ) + (return + (get_local $x) + ) + ) + (func $trapping_sint_div_s (; 19 ;) (result i32) + (local $x i32) + (set_local $x + (i32.div_s + (i32.const -2147483648) + (i32.const -1) + ) + ) + (return + (get_local $x) + ) + ) + (func $fr (; 20 ;) (param $x f32) + (local $y f32) + (local $z f64) + (drop + (f32.demote/f64 + (get_local $z) + ) + ) + (drop + (get_local $y) + ) + (drop + (f32.const 5) + ) + (drop + (f32.const 0) + ) + (drop + (f32.const 5) + ) + (drop + (f32.const 0) + ) + ) + (func $negZero (; 21 ;) (result f64) + (return + (f64.const -0) + ) + ) + (func $abs (; 22 ;) + (local $x i32) + (local $y f64) + (local $z f32) + (local $asm2wasm_i32_temp i32) + (set_local $x + (block (result i32) + (set_local $asm2wasm_i32_temp + (i32.const 0) + ) + (select + (i32.sub + (i32.const 0) + (get_local $asm2wasm_i32_temp) + ) + (get_local $asm2wasm_i32_temp) + (i32.lt_s + (get_local $asm2wasm_i32_temp) + (i32.const 0) + ) + ) + ) + ) + (set_local $y + (f64.abs + (f64.const 0) + ) + ) + (set_local $z + (f32.abs + (f32.const 0) + ) + ) + ) + (func $minmax (; 23 ;) + (local $x f64) + (local $y f64) + (local $z f32) + (local $w f32) + (set_local $x + (f64.min + (get_local $x) + (get_local $y) + ) + ) + (set_local $y + (f64.max + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (f32.min + (get_local $z) + (get_local $w) + ) + ) + (set_local $w + (f32.max + (get_local $z) + (get_local $w) + ) + ) + ) + (func $neg (; 24 ;) + (local $x f32) + (set_local $x + (f32.neg + (get_local $x) + ) + ) + (call_indirect (type $FUNCSIG$vf) + (get_local $x) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 8) + ) + ) + ) + (func $cneg (; 25 ;) (param $x f32) + (call_indirect (type $FUNCSIG$vf) + (get_local $x) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 8) + ) + ) + ) + (func $___syscall_ret (; 26 ;) + (local $$0 i32) + (drop + (i32.gt_u + (get_local $$0) + (i32.const -4096) + ) + ) + ) + (func $smallCompare (; 27 ;) (param $i i32) (param $j i32) (result i32) + (if + (i32.lt_s + (get_local $i) + (get_local $j) + ) + (set_local $i + (i32.add + (get_local $i) + (i32.const 1) + ) + ) + ) + (if + (i32.lt_u + (get_local $i) + (get_local $j) + ) + (set_local $i + (i32.add + (get_local $i) + (i32.const 1) + ) + ) + ) + (return + (get_local $i) + ) + ) + (func $cneg_nosemicolon (; 28 ;) + (call_indirect (type $FUNCSIG$vi) + (i32.const 1) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 16) + ) + ) + ) + (func $forLoop (; 29 ;) + (local $i i32) + (set_local $i + (i32.const 1) + ) + (loop $for-in + (block $for-out + (if + (i32.eqz + (i32.lt_s + (get_local $i) + (i32.const 200) + ) + ) + (br $for-out) + ) + (call $h + (get_local $i) + ) + (set_local $i + (i32.add + (get_local $i) + (i32.const 1) + ) + ) + (br $for-in) + ) + ) + ) + (func $ceiling_32_64 (; 30 ;) (param $u f32) (param $B f64) + (local $temp f32) + (set_local $temp + (f32.demote/f64 + (f64.ceil + (get_local $B) + ) + ) + ) + (set_local $temp + (f32.mul + (get_local $u) + (f32.ceil + (f32.demote/f64 + (get_local $B) + ) + ) + ) + ) + ) + (func $aborts (; 31 ;) + (drop + (call $abort + (f64.const 0) + ) + ) + (drop + (call $abort + (f64.convert_s/i32 + (i32.const 55) + ) + ) + ) + (drop + (call $abort + (f64.const 0) + ) + ) + (drop + (call $abort + (f64.const 12.34) + ) + ) + (drop + (call $abort + (f64.promote/f32 + (f32.const 56.779998779296875) + ) + ) + ) + ) + (func $continues (; 32 ;) + (loop $while-in + (block $while-out + (call $print + (i32.const 1) + ) + (block $do-once + (loop $unlikely-continue + (call $print + (i32.const 5) + ) + (if + (call $return_int) + (br $unlikely-continue) + ) + ) + ) + (call $print + (i32.const 2) + ) + (br $while-in) + ) + ) + ) + (func $bitcasts (; 33 ;) (param $i i32) (param $f f32) + (local $d f64) + (drop + (f32.reinterpret/i32 + (get_local $i) + ) + ) + (drop + (f64.promote/f32 + (f32.reinterpret/i32 + (get_local $i) + ) + ) + ) + (drop + (i32.reinterpret/f32 + (get_local $f) + ) + ) + (drop + (i32.reinterpret/f32 + (f32.demote/f64 + (get_local $d) + ) + ) + ) + ) + (func $recursiveBlockMerging (; 34 ;) (param $x i32) (result i32) + (drop + (call $lb + (i32.add + (i32.add + (i32.add + (block (result i32) + (drop + (i32.const 1) + ) + (get_local $x) + ) + (block (result i32) + (drop + (i32.const 2) + ) + (i32.const 3) + ) + ) + (block (result i32) + (block + (block + (drop + (i32.const 4) + ) + (drop + (i32.const 5) + ) + ) + (drop + (i32.const 6) + ) + ) + (i32.const 7) + ) + ) + (block (result i32) + (drop + (i32.const 8) + ) + (block (result i32) + (drop + (i32.const 9) + ) + (block (result i32) + (drop + (i32.const 10) + ) + (block (result i32) + (drop + (i32.const 11) + ) + (i32.const 12) + ) + ) + ) + ) + ) + ) + ) + (set_local $x + (i32.add + (i32.add + (i32.add + (block (result i32) + (drop + (call $lb + (i32.const 1) + ) + ) + (get_local $x) + ) + (block (result i32) + (drop + (call $lb + (i32.const 2) + ) + ) + (call $lb + (i32.const 3) + ) + ) + ) + (block (result i32) + (block + (block + (drop + (call $lb + (i32.const 4) + ) + ) + (drop + (call $lb + (i32.const 5) + ) + ) + ) + (drop + (call $lb + (i32.const 6) + ) + ) + ) + (call $lb + (i32.const 7) + ) + ) + ) + (block (result i32) + (drop + (call $lb + (i32.const 8) + ) + ) + (block (result i32) + (drop + (call $lb + (i32.const 9) + ) + ) + (block (result i32) + (drop + (call $lb + (i32.const 10) + ) + ) + (block (result i32) + (drop + (call $lb + (i32.const 11) + ) + ) + (call $lb + (i32.const 12) + ) + ) + ) + ) + ) + ) + ) + (return + (get_local $x) + ) + ) + (func $lb (; 35 ;) (param $a i32) (result i32) + (i32.store + (get_local $a) + (i32.add + (i32.add + (get_global $n) + (i32.const 136) + ) + (i32.const 8) + ) + ) + (return + (i32.const 0) + ) + ) + (func $forgetMe (; 36 ;) + (drop + (f64.const 123.456) + ) + ) + (func $exportMe (; 37 ;) + (drop + (f64.const -3.14159) + ) + ) + (func $zeroInit (; 38 ;) (param $x i32) + (local $y i32) + (if + (call $lb + (i32.const 0) + ) + (if + (call $lb + (i32.const 1) + ) + (set_local $y + (i32.const 3) + ) + ) + (set_local $y + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $y) + (i32.const 3) + ) + (drop + (call $lb + (i32.const 2) + ) + ) + ) + ) + (func $phi (; 39 ;) (result i32) + (local $x i32) + (block $do-once + (block + (if + (call $lb + (i32.const 1) + ) + (block + (set_local $x + (i32.const 0) + ) + (br $do-once) + ) + ) + (set_local $x + (i32.const 1) + ) + ) + ) + (return + (get_local $x) + ) + ) + (func $smallIf (; 40 ;) + (block $do-once + (if + (call $return_int) + (drop + (call $lb + (i32.const 3) + ) + ) + (br $do-once) + ) + (nop) + ) + ) + (func $dropCall (; 41 ;) (result i32) + (if + (call $return_int) + (block + (drop + (call $phi) + ) + (drop + (call $setTempRet0 + (i32.const 10) + ) + ) + (call $zeroInit + (call $setTempRet0 + (i32.const 10) + ) + ) + ) + ) + (return + (call $phi) + ) + ) + (func $useSetGlobal (; 42 ;) (result i32) + (local $x i32) + (set_local $x + (block (result i32) + (set_global $Int + (i32.const 10) + ) + (get_global $Int) + ) + ) + (set_global $Int + (i32.const 20) + ) + (return + (block (result i32) + (set_global $Int + (i32.const 30) + ) + (get_global $Int) + ) + ) + ) + (func $usesSetGlobal2 (; 43 ;) (result i32) + (return + (block (result i32) + (block + (set_global $Int + (i32.const 40) + ) + (drop + (get_global $Int) + ) + ) + (i32.const 50) + ) + ) + ) + (func $breakThroughMany (; 44 ;) (param $$s i32) + (block $label$break$L1 + (if + (get_local $$s) + (loop $while-in + (block $while-out + (if + (i32.eqz + (get_local $$s) + ) + (br $label$break$L1) + ) + (call $zeroInit + (i32.const 0) + ) + (br $while-in) + ) + ) + (drop + (i32.const 1337) + ) + ) + (nop) + ) + ) + (func $ifChainEmpty (; 45 ;) (param $label i32) (result i32) + (if + (i32.eq + (get_local $label) + (i32.const 4) + ) + (return + (i32.const 0) + ) + (if + (i32.eq + (get_local $label) + (i32.const 7) + ) + (nop) + ) + ) + (return + (i32.const 0) + ) + ) + (func $heap8NoShift (; 46 ;) (param $x i32) (result i32) + (return + (i32.load8_s + (get_local $x) + ) + ) + ) + (func $conditionalTypeFun (; 47 ;) + (local $x i32) + (local $y f64) + (set_local $x + (if (result i32) + (call $return_int) + (i32.trunc_s/f64 + (call $abort + (f64.convert_s/i32 + (i32.const 5) + ) + ) + ) + (i32.const 2) + ) + ) + (set_local $y + (if (result f64) + (call $return_int) + (call $abort + (f64.convert_s/i32 + (i32.const 7) + ) + ) + (f64.const 4.5) + ) + ) + ) + (func $loadSigned (; 48 ;) (param $x i32) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load8_s + (get_local $x) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load8_u + (get_local $x) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load16_s + (get_local $x) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load16_u + (get_local $x) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load8_s + (get_local $x) + ) + (i32.const 24) + ) + (i32.const 16) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load8_u + (get_local $x) + ) + (i32.const 16) + ) + (i32.const 24) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load16_s + (get_local $x) + ) + (i32.const 16) + ) + (i32.const 24) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load16_u + (get_local $x) + ) + (i32.const 24) + ) + (i32.const 16) + ) + ) + ) + (func $z (; 49 ;) (param $x f32) + (nop) + ) + (func $w (; 50 ;) (result f64) + (return + (f64.const 0) + ) + ) + (func $globalOpts (; 51 ;) + (local $x i32) + (local $y f64) + (set_local $x + (get_global $Int) + ) + (set_local $y + (get_global $Double) + ) + (i32.store8 + (i32.const 13) + (i32.load + (i32.const 12) + ) + ) + (set_global $Double + (get_local $y) + ) + (set_global $Int + (get_local $x) + ) + (call $globalOpts) + (set_local $x + (get_global $Int) + ) + (if + (call $return_int) + (set_global $Int + (i32.const 20) + ) + ) + (set_global $Int + (get_local $x) + ) + (call $globalOpts) + (set_local $x + (get_global $Int) + ) + (call $globalOpts) + (set_global $Int + (get_local $x) + ) + ) + (func $dropCallImport (; 52 ;) + (if + (call $return_int) + (drop + (call $return_int) + ) + ) + ) + (func $loophi (; 53 ;) (param $x i32) (param $y i32) + (local $temp i32) + (local $inc i32) + (local $loopvar i32) + (set_local $loopvar + (get_local $x) + ) + (loop $while-in + (block $while-out + (call $loophi + (get_local $loopvar) + (i32.const 0) + ) + (set_local $temp + (get_local $loopvar) + ) + (if + (get_local $temp) + (if + (get_local $temp) + (br $while-out) + ) + ) + (set_local $inc + (i32.add + (get_local $loopvar) + (i32.const 1) + ) + ) + (if + (i32.eq + (get_local $inc) + (get_local $y) + ) + (set_local $loopvar + (get_local $inc) + ) + (br $while-out) + ) + (br $while-in) + ) + ) + ) + (func $loophi2 (; 54 ;) (result i32) + (local $jnc i32) + (local $i i32) + (local $i$lcssa i32) + (local $temp i32) + (local $j i32) + (set_local $i + (i32.const 0) + ) + (loop $label$continue$L7 + (block $label$break$L7 + (set_local $j + (i32.const 0) + ) + (loop $while-in + (block $while-out + (set_local $temp + (get_local $j) + ) + (if + (call $return_int) + (if + (get_local $temp) + (block + (set_local $i$lcssa + (get_local $i) + ) + (br $label$break$L7) + ) + ) + ) + (set_local $jnc + (i32.add + (get_local $j) + (i32.const 1) + ) + ) + (if + (get_local $jnc) + (set_local $j + (get_local $jnc) + ) + (br $while-out) + ) + (br $while-in) + ) + ) + (br $label$continue$L7) + ) + ) + (return + (get_local $i$lcssa) + ) + ) + (func $loophi2b (; 55 ;) (result i32) + (local $jnc i32) + (local $i i32) + (local $i$lcssa i32) + (local $temp i32) + (local $j i32) + (set_local $i + (i32.const 0) + ) + (loop $label$continue$L7 + (block $label$break$L7 + (set_local $j + (i32.const 0) + ) + (loop $while-in + (block $while-out + (set_local $temp + (get_local $j) + ) + (if + (call $return_int) + (if + (get_local $temp) + (block + (set_local $i$lcssa + (get_local $j) + ) + (br $label$break$L7) + ) + ) + ) + (set_local $jnc + (i32.add + (get_local $j) + (i32.const 1) + ) + ) + (if + (get_local $jnc) + (set_local $j + (get_local $jnc) + ) + (br $while-out) + ) + (br $while-in) + ) + ) + (br $label$continue$L7) + ) + ) + (return + (get_local $i$lcssa) + ) + ) + (func $relooperJumpThreading (; 56 ;) (param $x i32) (result i32) + (local $label i32) + (if + (get_local $x) + (block + (call $h + (i32.const 0) + ) + (set_local $label + (i32.const 1) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 1) + ) + (call $h + (i32.const 1) + ) + ) + (call $h + (i32.const -1) + ) + (loop $while-in + (block $while-out + (set_local $x + (i32.add + (get_local $x) + (i32.const 1) + ) + ) + (if + (get_local $x) + (block + (call $h + (i32.const 2) + ) + (set_local $label + (i32.const 2) + ) + (br $while-out) + ) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 2) + ) + (call $h + (i32.const 3) + ) + ) + (call $h + (i32.const -2) + ) + (if + (get_local $x) + (block + (call $h + (i32.const 4) + ) + (if + (i32.eq + (get_local $x) + (i32.const 3) + ) + (set_local $label + (i32.const 3) + ) + (set_local $label + (i32.const 4) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 3) + ) + (call $h + (i32.const 5) + ) + (if + (i32.eq + (get_local $label) + (i32.const 4) + ) + (call $h + (i32.const 6) + ) + ) + ) + (call $h + (i32.const -3) + ) + (if + (get_local $x) + (block + (call $h + (i32.const 7) + ) + (if + (i32.eq + (get_local $x) + (i32.const 5) + ) + (set_local $label + (i32.const 5) + ) + (set_local $label + (i32.const 6) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 5) + ) + (block + (call $h + (i32.const 8) + ) + (if + (i32.eq + (get_local $x) + (i32.const 6) + ) + (set_local $label + (i32.const 6) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 6) + ) + (call $h + (i32.const 9) + ) + ) + (call $h + (i32.const -4) + ) + (if + (get_local $x) + (block + (call $h + (i32.const 10) + ) + (set_local $label + (i32.const 7) + ) + ) + ) + (block $label$break$L1 + (if + (i32.eq + (get_local $label) + (i32.const 7) + ) + (block + (call $h + (i32.const 11) + ) + (br $label$break$L1) + ) + ) + ) + (call $h + (i32.const -5) + ) + (if + (get_local $x) + (block + (call $h + (i32.const 12) + ) + (if + (i32.eq + (get_local $x) + (i32.const 8) + ) + (set_local $label + (i32.const 8) + ) + (set_local $label + (i32.const 9) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 8) + ) + (block + (call $h + (i32.const 13) + ) + (if + (get_local $x) + (set_local $label + (i32.const 9) + ) + ) + ) + ) + (block $label$break$L10 + (if + (i32.eq + (get_local $label) + (i32.const 9) + ) + (block + (call $h + (i32.const 14) + ) + (br $label$break$L10) + ) + ) + ) + (call $h + (i32.const -6) + ) + (return + (get_local $x) + ) + ) + (func $relooperJumpThreading__ZN4game14preloadweaponsEv (; 57 ;) (param $$12 i32) (param $$14 i32) (param $$or$cond8 i32) (param $$or$cond6 i32) (param $$vararg_ptr5 i32) (param $$11 i32) (param $$exitcond i32) + (local $label i32) + (loop $while-in + (block $while-out + (if + (get_local $$14) + (if + (get_local $$or$cond8) + (set_local $label + (i32.const 7) + ) + (set_local $label + (i32.const 8) + ) + ) + (if + (get_local $$or$cond6) + (set_local $label + (i32.const 7) + ) + (set_local $label + (i32.const 8) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 7) + ) + (set_local $label + (i32.const 0) + ) + (if + (i32.eq + (get_local $label) + (i32.const 8) + ) + (block + (set_local $label + (i32.const 0) + ) + (i32.store + (get_local $$vararg_ptr5) + (get_local $$11) + ) + ) + ) + ) + (br $while-in) + ) + ) + ) + (func $relooperJumpThreading_irreducible (; 58 ;) (param $x i32) + (local $label i32) + (if + (i32.eq + (get_local $x) + (i32.const 100) + ) + (set_local $label + (i32.const 1) + ) + (set_local $label + (i32.const 10) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 1) + ) + (loop $while-in + (block $while-out + (call $relooperJumpThreading_irreducible + (i32.const 1337) + ) + (set_local $label + (i32.const 1) + ) + (br $while-in) + ) + ) + ) + (if + (i32.eq + (get_local $x) + (i32.const 200) + ) + (set_local $label + (i32.const 2) + ) + (set_local $label + (i32.const 10) + ) + ) + (if + (i32.eq + (get_local $x) + (i32.const 300) + ) + (set_local $label + (i32.const 2) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 2) + ) + (call $relooperJumpThreading_irreducible + (i32.const 1448) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 10) + ) + (call $relooperJumpThreading_irreducible + (i32.const 2000) + ) + ) + ) + (func $__Z12multi_varargiz (; 59 ;) (param $$0 i32) (param $$$06$i4 i32) (param $$exitcond$i6 i32) (param $$2 i32) + (local $$12 i32) + (local $$20 i32) + (if + (get_local $$2) + (loop $while-in + (block $while-out + (set_local $$12 + (get_local $$$06$i4) + ) + (if + (get_local $$exitcond$i6) + (br $while-out) + (set_local $$$06$i4 + (get_local $$20) + ) + ) + (br $while-in) + ) + ) + (drop + (call $lb + (i32.const 1) + ) + ) + ) + ) + (func $jumpThreadDrop (; 60 ;) (result i32) + (local $label i32) + (local $temp i32) + (set_local $temp + (call $return_int) + ) + (loop $while-in + (block $while-out + (set_local $label + (i32.const 14) + ) + (br $while-out) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 10) + ) + (nop) + (if + (i32.eq + (get_local $label) + (i32.const 12) + ) + (drop + (call $return_int) + ) + (if + (i32.eq + (get_local $label) + (i32.const 14) + ) + (nop) + ) + ) + ) + (return + (get_local $temp) + ) + ) + (func $dropIgnoredImportInIf (; 61 ;) (param $$0 i32) (param $$1 i32) (param $$2 i32) + (block $do-once + (if + (get_local $$0) + (block + (set_local $$0 + (i32.const 1) + ) + (drop + (call $lb + (get_local $$2) + ) + ) + ) + (br $do-once) + ) + (nop) + ) + (return) + ) + (func $big_fround (; 62 ;) (result f32) + (return + (f32.const 4294967296) + ) + ) + (func $dropIgnoredImportsInIf (; 63 ;) (param $$0 i32) (param $$1 i32) (param $$2 i32) + (block $do-once + (if + (get_local $$0) + (drop + (call $lb + (get_local $$1) + ) + ) + (drop + (call $lb + (get_local $$2) + ) + ) + ) + (nop) + ) + (return) + ) + (func $f32_ucast (; 64 ;) (param $x i32) (result f32) + (return + (f32.convert_u/i32 + (get_local $x) + ) + ) + ) + (func $f32_scast (; 65 ;) (param $x i32) (result f32) + (return + (f32.convert_s/i32 + (get_local $x) + ) + ) + ) + (func $store_fround (; 66 ;) (param $x i32) + (f64.store + (i32.const 80) + (f64.promote/f32 + (f32.convert_s/i32 + (get_local $x) + ) + ) + ) + ) + (func $relocatableAndModules (; 67 ;) (result i32) + (call_indirect (type $FUNCSIG$v) + (i32.const 10) + ) + (call_indirect (type $FUNCSIG$v) + (i32.const 20) + ) + (return + (call_indirect (type $FUNCSIG$idi) + (f64.const 1.5) + (i32.const 200) + (i32.const 30) + ) + ) + ) + (func $exported_f32_user (; 68 ;) (param $x i32) (param $y f32) (param $z f64) (result f32) + (return + (get_local $y) + ) + ) + (func $sqrts (; 69 ;) (param $x f64) (result f64) + (return + (f64.add + (f64.sqrt + (get_local $x) + ) + (f64.promote/f32 + (f32.sqrt + (f32.demote/f64 + (get_local $x) + ) + ) + ) + ) + ) + ) + (func $f2u (; 70 ;) (param $x f64) (result i32) + (return + (i32.trunc_u/f64 + (get_local $x) + ) + ) + ) + (func $f2s (; 71 ;) (param $x f64) (result i32) + (return + (i32.trunc_s/f64 + (get_local $x) + ) + ) + ) + (func $autoDrop (; 72 ;) (param $x i32) (result i32) + (loop $while-in + (block $while-out + (if + (i32.eq + (get_local $x) + (i32.const 17) + ) + (block + (return + (i32.const 5) + ) + (drop + (call $autoDrop + (i32.const 1) + ) + ) + ) + (block + (br $while-out) + (set_local $x + (call $autoDrop + (i32.const 2) + ) + ) + ) + ) + (br $while-in) + ) + ) + (return + (get_local $x) + ) + ) + (func $indirectInSequence (; 73 ;) + (local $i1 i32) + (set_local $i1 + (block (result i32) + (call_indirect (type $FUNCSIG$vi) + (i32.const 0) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 16) + ) + ) + (i32.const 1) + ) + ) + ) + (func $emterpretify_assertions_safeHeap (; 74 ;) + (local $i1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $i1) + (i32.add + (i32.and + (block (result i32) + (set_global $Int + (i32.const 1) + ) + (get_global $Int) + ) + (i32.const 7) + ) + (i32.const 16) + ) + ) + ) + (func $call_emscripten_log (; 75 ;) + (call $emscripten_log) + (if + (i32.const 2) + (drop + (i32.trunc_s/f64 + (call $abort + (f64.const 0) + ) + ) + ) + (drop + (i32.const 3) + ) + ) + ) + (func $keepAlive (; 76 ;) + (drop + (call $sqrts + (f64.const 3.14159) + ) + ) + (drop + (call $sqrts + (f64.const 2.18281) + ) + ) + (drop + (call $f2u + (f64.const 100) + ) + ) + (drop + (call $f2s + (f64.const 100) + ) + ) + (drop + (call $autoDrop + (i32.const 52) + ) + ) + (call $indirectInSequence) + (call $emterpretify_assertions_safeHeap) + (call $call_emscripten_log) + ) + (func $v (; 77 ;) + (nop) + ) + (func $vi (; 78 ;) (param $x i32) + (nop) + ) + (func $ii (; 79 ;) (param $x i32) (result i32) + (return + (get_local $x) + ) + ) + (func $legalstub$conversions (; 80 ;) (param $0 i32) (param $1 f64) (param $2 f64) + (call $conversions + (get_local $0) + (get_local $1) + (f32.demote/f64 + (get_local $2) + ) + ) + ) + (func $legalstub$frem_float (; 81 ;) (result f64) + (f64.promote/f32 + (call $frem_float) + ) + ) + (func $legalstub$fr (; 82 ;) (param $0 f64) + (call $fr + (f32.demote/f64 + (get_local $0) + ) + ) + ) + (func $legalstub$ceiling_32_64 (; 83 ;) (param $0 f64) (param $1 f64) + (call $ceiling_32_64 + (f32.demote/f64 + (get_local $0) + ) + (get_local $1) + ) + ) + (func $legalstub$bitcasts (; 84 ;) (param $0 i32) (param $1 f64) + (call $bitcasts + (get_local $0) + (f32.demote/f64 + (get_local $1) + ) + ) + ) + (func $legalstub$exported_f32_user (; 85 ;) (param $0 i32) (param $1 f64) (param $2 f64) (result f64) + (f64.promote/f32 + (call $exported_f32_user + (get_local $0) + (f32.demote/f64 + (get_local $1) + ) + (get_local $2) + ) + ) + ) +) diff --git a/src/binaryen/test/unit.fromasm.no-opts b/src/binaryen/test/unit.fromasm.no-opts new file mode 100644 index 0000000000..375c34af64 --- /dev/null +++ b/src/binaryen/test/unit.fromasm.no-opts @@ -0,0 +1,2178 @@ +(module + (type $FUNCSIG$id (func (param f64) (result i32))) + (type $FUNCSIG$ddd (func (param f64 f64) (result f64))) + (type $FUNCSIG$vf (func (param f32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$idi (func (param f64 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$dd (func (param f64) (result f64))) + (type $FUNCSIG$i (func (result i32))) + (import "global" "NaN" (global $t$asm2wasm$import f64)) + (import "global" "Infinity" (global $u$asm2wasm$import f64)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "gb" (global $n$asm2wasm$import i32)) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "setTempRet0" (func $setTempRet0 (param i32) (result i32))) + (import "env" "abort" (func $abort (param f64) (result f64))) + (import "env" "print" (func $print (param i32))) + (import "env" "h" (func $h (param i32))) + (import "env" "return_int" (func $return_int (result i32))) + (import "env" "emscripten_log" (func $emscripten_log)) + (import "asm2wasm" "f64-to-int" (func $f64-to-int (param f64) (result i32))) + (import "asm2wasm" "f64-rem" (func $f64-rem (param f64 f64) (result f64))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 25 25 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $t (mut f64) (get_global $t$asm2wasm$import)) + (global $u (mut f64) (get_global $u$asm2wasm$import)) + (global $Int (mut i32) (i32.const 0)) + (global $Double (mut f64) (f64.const 0)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $n (mut i32) (get_global $n$asm2wasm$import)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $exportedNumber i32 (i32.const 42)) + (elem (get_global $tableBase) $v $big_negative $v $v $w $w $importedDoubles $w $z $cneg $z $z $z $z $z $z $vi $vi $vi $vi $vi $vi $vi $vi $ii) + (export "big_negative" (func $big_negative)) + (export "pick" (func $exportMe)) + (export "doubleCompares" (func $doubleCompares)) + (export "intOps" (func $intOps)) + (export "conversions" (func $legalstub$conversions)) + (export "switcher" (func $switcher)) + (export "frem" (func $frem)) + (export "frem_float" (func $legalstub$frem_float)) + (export "big_uint_div_u" (func $big_uint_div_u)) + (export "trapping_sint_div_s" (func $trapping_sint_div_s)) + (export "fr" (func $legalstub$fr)) + (export "negZero" (func $negZero)) + (export "neg" (func $neg)) + (export "smallCompare" (func $smallCompare)) + (export "cneg_nosemicolon" (func $cneg_nosemicolon)) + (export "forLoop" (func $forLoop)) + (export "ceiling_32_64" (func $legalstub$ceiling_32_64)) + (export "aborts" (func $aborts)) + (export "continues" (func $continues)) + (export "bitcasts" (func $legalstub$bitcasts)) + (export "recursiveBlockMerging" (func $recursiveBlockMerging)) + (export "lb" (func $lb)) + (export "zeroInit" (func $zeroInit)) + (export "phi" (func $phi)) + (export "smallIf" (func $smallIf)) + (export "dropCall" (func $dropCall)) + (export "useSetGlobal" (func $useSetGlobal)) + (export "usesSetGlobal2" (func $usesSetGlobal2)) + (export "breakThroughMany" (func $breakThroughMany)) + (export "ifChainEmpty" (func $ifChainEmpty)) + (export "heap8NoShift" (func $heap8NoShift)) + (export "conditionalTypeFun" (func $conditionalTypeFun)) + (export "loadSigned" (func $loadSigned)) + (export "globalOpts" (func $globalOpts)) + (export "dropCallImport" (func $dropCallImport)) + (export "loophi" (func $loophi)) + (export "loophi2" (func $loophi2)) + (export "loophi2b" (func $loophi2b)) + (export "relooperJumpThreading" (func $relooperJumpThreading)) + (export "relooperJumpThreading__ZN4game14preloadweaponsEv" (func $relooperJumpThreading__ZN4game14preloadweaponsEv)) + (export "__Z12multi_varargiz" (func $__Z12multi_varargiz)) + (export "jumpThreadDrop" (func $jumpThreadDrop)) + (export "dropIgnoredImportInIf" (func $dropIgnoredImportInIf)) + (export "dropIgnoredImportsInIf" (func $dropIgnoredImportsInIf)) + (export "relooperJumpThreading_irreducible" (func $relooperJumpThreading_irreducible)) + (export "store_fround" (func $store_fround)) + (export "exportedNumber" (global $exportedNumber)) + (export "relocatableAndModules" (func $relocatableAndModules)) + (export "exported_f32_user" (func $legalstub$exported_f32_user)) + (export "keepAlive" (func $keepAlive)) + (func $big_negative (; 8 ;) + (local $temp f64) + (set_local $temp + (f64.const -2147483648) + ) + (set_local $temp + (f64.const -2147483648) + ) + (set_local $temp + (f64.const -21474836480) + ) + (set_local $temp + (f64.const 0.039625) + ) + (set_local $temp + (f64.const -0.039625) + ) + ) + (func $importedDoubles (; 9 ;) (result f64) + (local $temp f64) + (set_local $temp + (f64.add + (f64.add + (f64.add + (get_global $t) + (get_global $u) + ) + (f64.neg + (get_global $u) + ) + ) + (f64.neg + (get_global $t) + ) + ) + ) + (if + (i32.gt_s + (get_global $Int) + (i32.const 0) + ) + (return + (f64.const -3.4) + ) + ) + (if + (f64.gt + (get_global $Double) + (f64.const 0) + ) + (return + (f64.const 5.6) + ) + ) + (return + (f64.const 1.2) + ) + ) + (func $doubleCompares (; 10 ;) (param $x f64) (param $y f64) (result f64) + (local $t f64) + (local $Int f64) + (local $Double i32) + (if + (f64.gt + (get_local $x) + (f64.const 0) + ) + (return + (f64.const 1.2) + ) + ) + (set_local $Int + (get_local $x) + ) + (set_local $Double + (get_global $n) + ) + (if + (f64.gt + (get_local $Int) + (f64.const 0) + ) + (return + (f64.const -3.4) + ) + ) + (if + (i32.gt_s + (get_local $Double) + (i32.const 0) + ) + (return + (f64.const 5.6) + ) + ) + (if + (f64.lt + (get_local $x) + (get_local $y) + ) + (return + (get_local $x) + ) + ) + (return + (get_local $y) + ) + ) + (func $intOps (; 11 ;) (param $x i32) (result i32) + (return + (i32.eqz + (get_local $x) + ) + ) + ) + (func $hexLiterals (; 12 ;) + (local $i i32) + (set_local $i + (i32.add + (i32.add + (i32.const 0) + (i32.const 313249263) + ) + (i32.const -19088752) + ) + ) + ) + (func $conversions (; 13 ;) (param $i i32) (param $d f64) (param $f f32) + (set_local $i + (call $f64-to-int + (get_local $d) + ) + ) + (set_local $i + (call $f64-to-int + (f64.promote/f32 + (get_local $f) + ) + ) + ) + (set_local $d + (f64.convert_s/i32 + (get_local $i) + ) + ) + (set_local $d + (f64.convert_u/i32 + (get_local $i) + ) + ) + ) + (func $seq (; 14 ;) + (local $J f64) + (set_local $J + (f64.sub + (block (result f64) + (drop + (f64.const 0.1) + ) + (f64.const 5.1) + ) + (block (result f64) + (drop + (f64.const 3.2) + ) + (f64.const 4.2) + ) + ) + ) + ) + (func $switcher (; 15 ;) (param $x i32) (result i32) + (local $waka i32) + (block $switch + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-case0 $switch + (i32.sub + (get_local $x) + (i32.const 1) + ) + ) + ) + (return + (i32.const 1) + ) + ) + (return + (i32.const 2) + ) + ) + (block $switch1 + (block $switch-case3 + (block $switch-case2 + (br_table $switch-case3 $switch1 $switch1 $switch1 $switch1 $switch1 $switch1 $switch-case2 $switch1 + (i32.sub + (get_local $x) + (i32.const 5) + ) + ) + ) + (return + (i32.const 121) + ) + ) + (return + (i32.const 51) + ) + ) + (block $label$break$Lout + (block $switch-case9 + (block $switch-case6 + (block $switch-case5 + (block $switch-case4 + (br_table $switch-case9 $label$break$Lout $label$break$Lout $switch-case6 $label$break$Lout $label$break$Lout $label$break$Lout $label$break$Lout $switch-case5 $label$break$Lout $switch-case4 $label$break$Lout + (i32.sub + (get_local $x) + (i32.const 2) + ) + ) + ) + (br $label$break$Lout) + ) + (br $label$break$Lout) + ) + (block + (loop $while-in + (block $while-out + (br $while-out) + (br $while-in) + ) + ) + (br $label$break$Lout) + ) + ) + (block + (loop $while-in8 + (block $while-out7 + (br $label$break$Lout) + (br $while-in8) + ) + ) + (br $label$break$Lout) + ) + ) + (loop $label$continue$L1 + (block $label$break$L1 + (loop $label$continue$L3 + (block $label$break$L3 + (block $switch10 + (block $switch-default + (block $switch-case13 + (block $switch-case12 + (block $switch-case11 + (br_table $switch-case11 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case13 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case12 $switch-default + (i32.sub + (get_local $x) + (i32.const -1) + ) + ) + ) + (block + (br $label$break$L1) + (br $switch10) + ) + ) + (block + (set_local $waka + (i32.const 1) + ) + (br $switch10) + ) + ) + (block + (br $label$break$L3) + (br $switch10) + ) + ) + (br $label$break$L1) + ) + (br $label$continue$L3) + ) + ) + (call $h + (i32.const 120) + ) + (br $label$continue$L1) + ) + ) + (return + (i32.const 0) + ) + ) + (func $blocker (; 16 ;) + (block $label$break$L + (br $label$break$L) + ) + ) + (func $frem (; 17 ;) (result f64) + (return + (call $f64-rem + (f64.const 5.5) + (f64.const 1.2) + ) + ) + ) + (func $frem_float (; 18 ;) (result f32) + (return + (f32.demote/f64 + (call $f64-rem + (f64.promote/f32 + (f32.const 5.5) + ) + (f64.promote/f32 + (f32.const 1.2000000476837158) + ) + ) + ) + ) + ) + (func $i32u-div (; 19 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (i32.div_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $big_uint_div_u (; 20 ;) (result i32) + (local $x i32) + (set_local $x + (i32.and + (call $i32u-div + (i32.const -1) + (i32.const 2) + ) + (i32.const -1) + ) + ) + (return + (get_local $x) + ) + ) + (func $i32s-div (; 21 ;) (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (i32.eqz + (get_local $1) + ) + (i32.const 0) + (if (result i32) + (i32.and + (i32.eq + (get_local $0) + (i32.const -2147483648) + ) + (i32.eq + (get_local $1) + (i32.const -1) + ) + ) + (i32.const 0) + (i32.div_s + (get_local $0) + (get_local $1) + ) + ) + ) + ) + (func $trapping_sint_div_s (; 22 ;) (result i32) + (local $x i32) + (set_local $x + (call $i32s-div + (i32.const -2147483648) + (i32.const -1) + ) + ) + (return + (get_local $x) + ) + ) + (func $fr (; 23 ;) (param $x f32) + (local $y f32) + (local $z f64) + (drop + (f32.demote/f64 + (get_local $z) + ) + ) + (drop + (get_local $y) + ) + (drop + (f32.const 5) + ) + (drop + (f32.const 0) + ) + (drop + (f32.const 5) + ) + (drop + (f32.const 0) + ) + ) + (func $negZero (; 24 ;) (result f64) + (return + (f64.const -0) + ) + ) + (func $abs (; 25 ;) + (local $x i32) + (local $y f64) + (local $z f32) + (local $asm2wasm_i32_temp i32) + (set_local $x + (block (result i32) + (set_local $asm2wasm_i32_temp + (i32.const 0) + ) + (select + (i32.sub + (i32.const 0) + (get_local $asm2wasm_i32_temp) + ) + (get_local $asm2wasm_i32_temp) + (i32.lt_s + (get_local $asm2wasm_i32_temp) + (i32.const 0) + ) + ) + ) + ) + (set_local $y + (f64.abs + (f64.const 0) + ) + ) + (set_local $z + (f32.abs + (f32.const 0) + ) + ) + ) + (func $minmax (; 26 ;) + (local $x f64) + (local $y f64) + (local $z f32) + (local $w f32) + (set_local $x + (f64.min + (get_local $x) + (get_local $y) + ) + ) + (set_local $y + (f64.max + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (f32.min + (get_local $z) + (get_local $w) + ) + ) + (set_local $w + (f32.max + (get_local $z) + (get_local $w) + ) + ) + ) + (func $neg (; 27 ;) + (local $x f32) + (set_local $x + (f32.neg + (get_local $x) + ) + ) + (call_indirect (type $FUNCSIG$vf) + (get_local $x) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 8) + ) + ) + ) + (func $cneg (; 28 ;) (param $x f32) + (call_indirect (type $FUNCSIG$vf) + (get_local $x) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 8) + ) + ) + ) + (func $___syscall_ret (; 29 ;) + (local $$0 i32) + (drop + (i32.gt_u + (get_local $$0) + (i32.const -4096) + ) + ) + ) + (func $smallCompare (; 30 ;) (param $i i32) (param $j i32) (result i32) + (if + (i32.lt_s + (get_local $i) + (get_local $j) + ) + (set_local $i + (i32.add + (get_local $i) + (i32.const 1) + ) + ) + ) + (if + (i32.lt_u + (get_local $i) + (get_local $j) + ) + (set_local $i + (i32.add + (get_local $i) + (i32.const 1) + ) + ) + ) + (return + (get_local $i) + ) + ) + (func $cneg_nosemicolon (; 31 ;) + (call_indirect (type $FUNCSIG$vi) + (i32.const 1) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 16) + ) + ) + ) + (func $forLoop (; 32 ;) + (local $i i32) + (set_local $i + (i32.const 1) + ) + (loop $for-in + (block $for-out + (if + (i32.eqz + (i32.lt_s + (get_local $i) + (i32.const 200) + ) + ) + (br $for-out) + ) + (call $h + (get_local $i) + ) + (set_local $i + (i32.add + (get_local $i) + (i32.const 1) + ) + ) + (br $for-in) + ) + ) + ) + (func $ceiling_32_64 (; 33 ;) (param $u f32) (param $B f64) + (local $temp f32) + (set_local $temp + (f32.demote/f64 + (f64.ceil + (get_local $B) + ) + ) + ) + (set_local $temp + (f32.mul + (get_local $u) + (f32.ceil + (f32.demote/f64 + (get_local $B) + ) + ) + ) + ) + ) + (func $aborts (; 34 ;) + (drop + (call $abort + (f64.const 0) + ) + ) + (drop + (call $abort + (f64.convert_s/i32 + (i32.const 55) + ) + ) + ) + (drop + (call $abort + (f64.const 0) + ) + ) + (drop + (call $abort + (f64.const 12.34) + ) + ) + (drop + (call $abort + (f64.promote/f32 + (f32.const 56.779998779296875) + ) + ) + ) + ) + (func $continues (; 35 ;) + (loop $while-in + (block $while-out + (call $print + (i32.const 1) + ) + (block $do-once + (loop $unlikely-continue + (call $print + (i32.const 5) + ) + (if + (call $return_int) + (br $unlikely-continue) + ) + ) + ) + (call $print + (i32.const 2) + ) + (br $while-in) + ) + ) + ) + (func $bitcasts (; 36 ;) (param $i i32) (param $f f32) + (local $d f64) + (drop + (f32.reinterpret/i32 + (get_local $i) + ) + ) + (drop + (f64.promote/f32 + (f32.reinterpret/i32 + (get_local $i) + ) + ) + ) + (drop + (i32.reinterpret/f32 + (get_local $f) + ) + ) + (drop + (i32.reinterpret/f32 + (f32.demote/f64 + (get_local $d) + ) + ) + ) + ) + (func $recursiveBlockMerging (; 37 ;) (param $x i32) (result i32) + (drop + (call $lb + (i32.add + (i32.add + (i32.add + (block (result i32) + (drop + (i32.const 1) + ) + (get_local $x) + ) + (block (result i32) + (drop + (i32.const 2) + ) + (i32.const 3) + ) + ) + (block (result i32) + (block + (block + (drop + (i32.const 4) + ) + (drop + (i32.const 5) + ) + ) + (drop + (i32.const 6) + ) + ) + (i32.const 7) + ) + ) + (block (result i32) + (drop + (i32.const 8) + ) + (block (result i32) + (drop + (i32.const 9) + ) + (block (result i32) + (drop + (i32.const 10) + ) + (block (result i32) + (drop + (i32.const 11) + ) + (i32.const 12) + ) + ) + ) + ) + ) + ) + ) + (set_local $x + (i32.add + (i32.add + (i32.add + (block (result i32) + (drop + (call $lb + (i32.const 1) + ) + ) + (get_local $x) + ) + (block (result i32) + (drop + (call $lb + (i32.const 2) + ) + ) + (call $lb + (i32.const 3) + ) + ) + ) + (block (result i32) + (block + (block + (drop + (call $lb + (i32.const 4) + ) + ) + (drop + (call $lb + (i32.const 5) + ) + ) + ) + (drop + (call $lb + (i32.const 6) + ) + ) + ) + (call $lb + (i32.const 7) + ) + ) + ) + (block (result i32) + (drop + (call $lb + (i32.const 8) + ) + ) + (block (result i32) + (drop + (call $lb + (i32.const 9) + ) + ) + (block (result i32) + (drop + (call $lb + (i32.const 10) + ) + ) + (block (result i32) + (drop + (call $lb + (i32.const 11) + ) + ) + (call $lb + (i32.const 12) + ) + ) + ) + ) + ) + ) + ) + (return + (get_local $x) + ) + ) + (func $lb (; 38 ;) (param $a i32) (result i32) + (i32.store + (get_local $a) + (i32.add + (i32.add + (get_global $n) + (i32.const 136) + ) + (i32.const 8) + ) + ) + (return + (i32.const 0) + ) + ) + (func $forgetMe (; 39 ;) + (drop + (f64.const 123.456) + ) + ) + (func $exportMe (; 40 ;) + (drop + (f64.const -3.14159) + ) + ) + (func $zeroInit (; 41 ;) (param $x i32) + (local $y i32) + (if + (call $lb + (i32.const 0) + ) + (if + (call $lb + (i32.const 1) + ) + (set_local $y + (i32.const 3) + ) + ) + (set_local $y + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $y) + (i32.const 3) + ) + (drop + (call $lb + (i32.const 2) + ) + ) + ) + ) + (func $phi (; 42 ;) (result i32) + (local $x i32) + (block $do-once + (block + (if + (call $lb + (i32.const 1) + ) + (block + (set_local $x + (i32.const 0) + ) + (br $do-once) + ) + ) + (set_local $x + (i32.const 1) + ) + ) + ) + (return + (get_local $x) + ) + ) + (func $smallIf (; 43 ;) + (block $do-once + (if + (call $return_int) + (drop + (call $lb + (i32.const 3) + ) + ) + (br $do-once) + ) + (nop) + ) + ) + (func $dropCall (; 44 ;) (result i32) + (if + (call $return_int) + (block + (drop + (call $phi) + ) + (drop + (call $setTempRet0 + (i32.const 10) + ) + ) + (call $zeroInit + (call $setTempRet0 + (i32.const 10) + ) + ) + ) + ) + (return + (call $phi) + ) + ) + (func $useSetGlobal (; 45 ;) (result i32) + (local $x i32) + (set_local $x + (block (result i32) + (set_global $Int + (i32.const 10) + ) + (get_global $Int) + ) + ) + (set_global $Int + (i32.const 20) + ) + (return + (block (result i32) + (set_global $Int + (i32.const 30) + ) + (get_global $Int) + ) + ) + ) + (func $usesSetGlobal2 (; 46 ;) (result i32) + (return + (block (result i32) + (block + (set_global $Int + (i32.const 40) + ) + (drop + (get_global $Int) + ) + ) + (i32.const 50) + ) + ) + ) + (func $breakThroughMany (; 47 ;) (param $$s i32) + (block $label$break$L1 + (if + (get_local $$s) + (loop $while-in + (block $while-out + (if + (i32.eqz + (get_local $$s) + ) + (br $label$break$L1) + ) + (call $zeroInit + (i32.const 0) + ) + (br $while-in) + ) + ) + (drop + (i32.const 1337) + ) + ) + (nop) + ) + ) + (func $ifChainEmpty (; 48 ;) (param $label i32) (result i32) + (if + (i32.eq + (get_local $label) + (i32.const 4) + ) + (return + (i32.const 0) + ) + (if + (i32.eq + (get_local $label) + (i32.const 7) + ) + (nop) + ) + ) + (return + (i32.const 0) + ) + ) + (func $heap8NoShift (; 49 ;) (param $x i32) (result i32) + (return + (i32.load8_s + (get_local $x) + ) + ) + ) + (func $conditionalTypeFun (; 50 ;) + (local $x i32) + (local $y f64) + (set_local $x + (if (result i32) + (call $return_int) + (call $f64-to-int + (call $abort + (f64.convert_s/i32 + (i32.const 5) + ) + ) + ) + (i32.const 2) + ) + ) + (set_local $y + (if (result f64) + (call $return_int) + (call $abort + (f64.convert_s/i32 + (i32.const 7) + ) + ) + (f64.const 4.5) + ) + ) + ) + (func $loadSigned (; 51 ;) (param $x i32) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load8_s + (get_local $x) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load8_u + (get_local $x) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load16_s + (get_local $x) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load16_u + (get_local $x) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load8_s + (get_local $x) + ) + (i32.const 24) + ) + (i32.const 16) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load8_u + (get_local $x) + ) + (i32.const 16) + ) + (i32.const 24) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load16_s + (get_local $x) + ) + (i32.const 16) + ) + (i32.const 24) + ) + ) + (call $loadSigned + (i32.shr_s + (i32.shl + (i32.load16_u + (get_local $x) + ) + (i32.const 24) + ) + (i32.const 16) + ) + ) + ) + (func $z (; 52 ;) (param $x f32) + (nop) + ) + (func $w (; 53 ;) (result f64) + (return + (f64.const 0) + ) + ) + (func $globalOpts (; 54 ;) + (local $x i32) + (local $y f64) + (set_local $x + (get_global $Int) + ) + (set_local $y + (get_global $Double) + ) + (i32.store8 + (i32.const 13) + (i32.load + (i32.const 12) + ) + ) + (set_global $Double + (get_local $y) + ) + (set_global $Int + (get_local $x) + ) + (call $globalOpts) + (set_local $x + (get_global $Int) + ) + (if + (call $return_int) + (set_global $Int + (i32.const 20) + ) + ) + (set_global $Int + (get_local $x) + ) + (call $globalOpts) + (set_local $x + (get_global $Int) + ) + (call $globalOpts) + (set_global $Int + (get_local $x) + ) + ) + (func $dropCallImport (; 55 ;) + (if + (call $return_int) + (drop + (call $return_int) + ) + ) + ) + (func $loophi (; 56 ;) (param $x i32) (param $y i32) + (local $temp i32) + (local $inc i32) + (local $loopvar i32) + (set_local $loopvar + (get_local $x) + ) + (loop $while-in + (block $while-out + (call $loophi + (get_local $loopvar) + (i32.const 0) + ) + (set_local $temp + (get_local $loopvar) + ) + (if + (get_local $temp) + (if + (get_local $temp) + (br $while-out) + ) + ) + (set_local $inc + (i32.add + (get_local $loopvar) + (i32.const 1) + ) + ) + (if + (i32.eq + (get_local $inc) + (get_local $y) + ) + (set_local $loopvar + (get_local $inc) + ) + (br $while-out) + ) + (br $while-in) + ) + ) + ) + (func $loophi2 (; 57 ;) (result i32) + (local $jnc i32) + (local $i i32) + (local $i$lcssa i32) + (local $temp i32) + (local $j i32) + (set_local $i + (i32.const 0) + ) + (loop $label$continue$L7 + (block $label$break$L7 + (set_local $j + (i32.const 0) + ) + (loop $while-in + (block $while-out + (set_local $temp + (get_local $j) + ) + (if + (call $return_int) + (if + (get_local $temp) + (block + (set_local $i$lcssa + (get_local $i) + ) + (br $label$break$L7) + ) + ) + ) + (set_local $jnc + (i32.add + (get_local $j) + (i32.const 1) + ) + ) + (if + (get_local $jnc) + (set_local $j + (get_local $jnc) + ) + (br $while-out) + ) + (br $while-in) + ) + ) + (br $label$continue$L7) + ) + ) + (return + (get_local $i$lcssa) + ) + ) + (func $loophi2b (; 58 ;) (result i32) + (local $jnc i32) + (local $i i32) + (local $i$lcssa i32) + (local $temp i32) + (local $j i32) + (set_local $i + (i32.const 0) + ) + (loop $label$continue$L7 + (block $label$break$L7 + (set_local $j + (i32.const 0) + ) + (loop $while-in + (block $while-out + (set_local $temp + (get_local $j) + ) + (if + (call $return_int) + (if + (get_local $temp) + (block + (set_local $i$lcssa + (get_local $j) + ) + (br $label$break$L7) + ) + ) + ) + (set_local $jnc + (i32.add + (get_local $j) + (i32.const 1) + ) + ) + (if + (get_local $jnc) + (set_local $j + (get_local $jnc) + ) + (br $while-out) + ) + (br $while-in) + ) + ) + (br $label$continue$L7) + ) + ) + (return + (get_local $i$lcssa) + ) + ) + (func $relooperJumpThreading (; 59 ;) (param $x i32) (result i32) + (local $label i32) + (if + (get_local $x) + (block + (call $h + (i32.const 0) + ) + (set_local $label + (i32.const 1) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 1) + ) + (call $h + (i32.const 1) + ) + ) + (call $h + (i32.const -1) + ) + (loop $while-in + (block $while-out + (set_local $x + (i32.add + (get_local $x) + (i32.const 1) + ) + ) + (if + (get_local $x) + (block + (call $h + (i32.const 2) + ) + (set_local $label + (i32.const 2) + ) + (br $while-out) + ) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 2) + ) + (call $h + (i32.const 3) + ) + ) + (call $h + (i32.const -2) + ) + (if + (get_local $x) + (block + (call $h + (i32.const 4) + ) + (if + (i32.eq + (get_local $x) + (i32.const 3) + ) + (set_local $label + (i32.const 3) + ) + (set_local $label + (i32.const 4) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 3) + ) + (call $h + (i32.const 5) + ) + (if + (i32.eq + (get_local $label) + (i32.const 4) + ) + (call $h + (i32.const 6) + ) + ) + ) + (call $h + (i32.const -3) + ) + (if + (get_local $x) + (block + (call $h + (i32.const 7) + ) + (if + (i32.eq + (get_local $x) + (i32.const 5) + ) + (set_local $label + (i32.const 5) + ) + (set_local $label + (i32.const 6) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 5) + ) + (block + (call $h + (i32.const 8) + ) + (if + (i32.eq + (get_local $x) + (i32.const 6) + ) + (set_local $label + (i32.const 6) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 6) + ) + (call $h + (i32.const 9) + ) + ) + (call $h + (i32.const -4) + ) + (if + (get_local $x) + (block + (call $h + (i32.const 10) + ) + (set_local $label + (i32.const 7) + ) + ) + ) + (block $label$break$L1 + (if + (i32.eq + (get_local $label) + (i32.const 7) + ) + (block + (call $h + (i32.const 11) + ) + (br $label$break$L1) + ) + ) + ) + (call $h + (i32.const -5) + ) + (if + (get_local $x) + (block + (call $h + (i32.const 12) + ) + (if + (i32.eq + (get_local $x) + (i32.const 8) + ) + (set_local $label + (i32.const 8) + ) + (set_local $label + (i32.const 9) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 8) + ) + (block + (call $h + (i32.const 13) + ) + (if + (get_local $x) + (set_local $label + (i32.const 9) + ) + ) + ) + ) + (block $label$break$L10 + (if + (i32.eq + (get_local $label) + (i32.const 9) + ) + (block + (call $h + (i32.const 14) + ) + (br $label$break$L10) + ) + ) + ) + (call $h + (i32.const -6) + ) + (return + (get_local $x) + ) + ) + (func $relooperJumpThreading__ZN4game14preloadweaponsEv (; 60 ;) (param $$12 i32) (param $$14 i32) (param $$or$cond8 i32) (param $$or$cond6 i32) (param $$vararg_ptr5 i32) (param $$11 i32) (param $$exitcond i32) + (local $label i32) + (loop $while-in + (block $while-out + (if + (get_local $$14) + (if + (get_local $$or$cond8) + (set_local $label + (i32.const 7) + ) + (set_local $label + (i32.const 8) + ) + ) + (if + (get_local $$or$cond6) + (set_local $label + (i32.const 7) + ) + (set_local $label + (i32.const 8) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 7) + ) + (set_local $label + (i32.const 0) + ) + (if + (i32.eq + (get_local $label) + (i32.const 8) + ) + (block + (set_local $label + (i32.const 0) + ) + (i32.store + (get_local $$vararg_ptr5) + (get_local $$11) + ) + ) + ) + ) + (br $while-in) + ) + ) + ) + (func $relooperJumpThreading_irreducible (; 61 ;) (param $x i32) + (local $label i32) + (if + (i32.eq + (get_local $x) + (i32.const 100) + ) + (set_local $label + (i32.const 1) + ) + (set_local $label + (i32.const 10) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 1) + ) + (loop $while-in + (block $while-out + (call $relooperJumpThreading_irreducible + (i32.const 1337) + ) + (set_local $label + (i32.const 1) + ) + (br $while-in) + ) + ) + ) + (if + (i32.eq + (get_local $x) + (i32.const 200) + ) + (set_local $label + (i32.const 2) + ) + (set_local $label + (i32.const 10) + ) + ) + (if + (i32.eq + (get_local $x) + (i32.const 300) + ) + (set_local $label + (i32.const 2) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 2) + ) + (call $relooperJumpThreading_irreducible + (i32.const 1448) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 10) + ) + (call $relooperJumpThreading_irreducible + (i32.const 2000) + ) + ) + ) + (func $__Z12multi_varargiz (; 62 ;) (param $$0 i32) (param $$$06$i4 i32) (param $$exitcond$i6 i32) (param $$2 i32) + (local $$12 i32) + (local $$20 i32) + (if + (get_local $$2) + (loop $while-in + (block $while-out + (set_local $$12 + (get_local $$$06$i4) + ) + (if + (get_local $$exitcond$i6) + (br $while-out) + (set_local $$$06$i4 + (get_local $$20) + ) + ) + (br $while-in) + ) + ) + (drop + (call $lb + (i32.const 1) + ) + ) + ) + ) + (func $jumpThreadDrop (; 63 ;) (result i32) + (local $label i32) + (local $temp i32) + (set_local $temp + (call $return_int) + ) + (loop $while-in + (block $while-out + (set_local $label + (i32.const 14) + ) + (br $while-out) + (br $while-in) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 10) + ) + (nop) + (if + (i32.eq + (get_local $label) + (i32.const 12) + ) + (drop + (call $return_int) + ) + (if + (i32.eq + (get_local $label) + (i32.const 14) + ) + (nop) + ) + ) + ) + (return + (get_local $temp) + ) + ) + (func $dropIgnoredImportInIf (; 64 ;) (param $$0 i32) (param $$1 i32) (param $$2 i32) + (block $do-once + (if + (get_local $$0) + (block + (set_local $$0 + (i32.const 1) + ) + (drop + (call $lb + (get_local $$2) + ) + ) + ) + (br $do-once) + ) + (nop) + ) + (return) + ) + (func $big_fround (; 65 ;) (result f32) + (return + (f32.const 4294967296) + ) + ) + (func $dropIgnoredImportsInIf (; 66 ;) (param $$0 i32) (param $$1 i32) (param $$2 i32) + (block $do-once + (if + (get_local $$0) + (drop + (call $lb + (get_local $$1) + ) + ) + (drop + (call $lb + (get_local $$2) + ) + ) + ) + (nop) + ) + (return) + ) + (func $f32_ucast (; 67 ;) (param $x i32) (result f32) + (return + (f32.convert_u/i32 + (get_local $x) + ) + ) + ) + (func $f32_scast (; 68 ;) (param $x i32) (result f32) + (return + (f32.convert_s/i32 + (get_local $x) + ) + ) + ) + (func $store_fround (; 69 ;) (param $x i32) + (f64.store + (i32.const 80) + (f64.promote/f32 + (f32.convert_s/i32 + (get_local $x) + ) + ) + ) + ) + (func $relocatableAndModules (; 70 ;) (result i32) + (call_indirect (type $FUNCSIG$v) + (i32.const 10) + ) + (call_indirect (type $FUNCSIG$v) + (i32.const 20) + ) + (return + (call_indirect (type $FUNCSIG$idi) + (f64.const 1.5) + (i32.const 200) + (i32.const 30) + ) + ) + ) + (func $exported_f32_user (; 71 ;) (param $x i32) (param $y f32) (param $z f64) (result f32) + (return + (get_local $y) + ) + ) + (func $sqrts (; 72 ;) (param $x f64) (result f64) + (return + (f64.add + (f64.sqrt + (get_local $x) + ) + (f64.promote/f32 + (f32.sqrt + (f32.demote/f64 + (get_local $x) + ) + ) + ) + ) + ) + ) + (func $f2u (; 73 ;) (param $x f64) (result i32) + (return + (call $f64-to-int + (get_local $x) + ) + ) + ) + (func $f2s (; 74 ;) (param $x f64) (result i32) + (return + (call $f64-to-int + (get_local $x) + ) + ) + ) + (func $autoDrop (; 75 ;) (param $x i32) (result i32) + (loop $while-in + (block $while-out + (if + (i32.eq + (get_local $x) + (i32.const 17) + ) + (block + (return + (i32.const 5) + ) + (drop + (call $autoDrop + (i32.const 1) + ) + ) + ) + (block + (br $while-out) + (set_local $x + (call $autoDrop + (i32.const 2) + ) + ) + ) + ) + (br $while-in) + ) + ) + (return + (get_local $x) + ) + ) + (func $indirectInSequence (; 76 ;) + (local $i1 i32) + (set_local $i1 + (block (result i32) + (call_indirect (type $FUNCSIG$vi) + (i32.const 0) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 16) + ) + ) + (i32.const 1) + ) + ) + ) + (func $emterpretify_assertions_safeHeap (; 77 ;) + (local $i1 i32) + (call_indirect (type $FUNCSIG$vi) + (get_local $i1) + (i32.add + (i32.and + (block (result i32) + (set_global $Int + (i32.const 1) + ) + (get_global $Int) + ) + (i32.const 7) + ) + (i32.const 16) + ) + ) + ) + (func $call_emscripten_log (; 78 ;) + (call $emscripten_log) + (if + (i32.const 2) + (drop + (call $f64-to-int + (call $abort + (f64.const 0) + ) + ) + ) + (drop + (i32.const 3) + ) + ) + ) + (func $keepAlive (; 79 ;) + (drop + (call $sqrts + (f64.const 3.14159) + ) + ) + (drop + (call $sqrts + (f64.const 2.18281) + ) + ) + (drop + (call $f2u + (f64.const 100) + ) + ) + (drop + (call $f2s + (f64.const 100) + ) + ) + (drop + (call $autoDrop + (i32.const 52) + ) + ) + (call $indirectInSequence) + (call $emterpretify_assertions_safeHeap) + (call $call_emscripten_log) + ) + (func $v (; 80 ;) + (nop) + ) + (func $vi (; 81 ;) (param $x i32) + (nop) + ) + (func $ii (; 82 ;) (param $x i32) (result i32) + (return + (get_local $x) + ) + ) + (func $legalstub$conversions (; 83 ;) (param $0 i32) (param $1 f64) (param $2 f64) + (call $conversions + (get_local $0) + (get_local $1) + (f32.demote/f64 + (get_local $2) + ) + ) + ) + (func $legalstub$frem_float (; 84 ;) (result f64) + (f64.promote/f32 + (call $frem_float) + ) + ) + (func $legalstub$fr (; 85 ;) (param $0 f64) + (call $fr + (f32.demote/f64 + (get_local $0) + ) + ) + ) + (func $legalstub$ceiling_32_64 (; 86 ;) (param $0 f64) (param $1 f64) + (call $ceiling_32_64 + (f32.demote/f64 + (get_local $0) + ) + (get_local $1) + ) + ) + (func $legalstub$bitcasts (; 87 ;) (param $0 i32) (param $1 f64) + (call $bitcasts + (get_local $0) + (f32.demote/f64 + (get_local $1) + ) + ) + ) + (func $legalstub$exported_f32_user (; 88 ;) (param $0 i32) (param $1 f64) (param $2 f64) (result f64) + (f64.promote/f32 + (call $exported_f32_user + (get_local $0) + (f32.demote/f64 + (get_local $1) + ) + (get_local $2) + ) + ) + ) +) diff --git a/src/binaryen/test/unit.wast b/src/binaryen/test/unit.wast new file mode 100644 index 0000000000..e1c6b602e4 --- /dev/null +++ b/src/binaryen/test/unit.wast @@ -0,0 +1,554 @@ +(module + (type $FUNCSIG$vf (func (param f32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$id (func (param f64) (result i32))) + (type $FUNCSIG$ddd (func (param f64 f64) (result f64))) + (type $4 (func (result f64))) + (type $5 (func (result i32))) + (type $6 (func (param i32) (result i32))) + (type $7 (func (param f64) (result f64))) + (type $8 (func (result i64))) + (type $9 (func (param i32 i64))) + (import "env" "_emscripten_asm_const_vi" (func $_emscripten_asm_const_vi)) + (import "asm2wasm" "f64-to-int" (func $f64-to-int (param f64) (result i32))) + (import "asm2wasm" "f64-rem" (func $f64-rem (param f64 f64) (result f64))) + (table 10 anyfunc) + (elem (i32.const 0) $z $big_negative $z $z $w $w $importedDoubles $w $z $cneg) + (memory $0 4096 4096) + (data (i32.const 1026) "\14\00") + (export "big_negative" (func $big_negative)) + (func $big_negative (type $FUNCSIG$v) + (local $temp f64) + (block $block0 + (set_local $temp + (f64.const -2147483648) + ) + (set_local $temp + (f64.const -2147483648) + ) + (set_local $temp + (f64.const -21474836480) + ) + (set_local $temp + (f64.const 0.039625) + ) + (set_local $temp + (f64.const -0.039625) + ) + ) + ) + (func $importedDoubles (type $4) (result f64) + (local $temp f64) + (block $topmost (result f64) + (set_local $temp + (f64.add + (f64.add + (f64.add + (f64.load + (i32.const 8) + ) + (f64.load + (i32.const 16) + ) + ) + (f64.neg + (f64.load + (i32.const 16) + ) + ) + ) + (f64.neg + (f64.load + (i32.const 8) + ) + ) + ) + ) + (if + (i32.gt_s + (i32.load + (i32.const 24) + ) + (i32.const 0) + ) + (br $topmost + (f64.const -3.4) + ) + ) + (if + (f64.gt + (f64.load + (i32.const 32) + ) + (f64.const 0) + ) + (br $topmost + (f64.const 5.6) + ) + ) + (f64.const 1.2) + ) + ) + (func $doubleCompares (type $FUNCSIG$ddd) (param $x f64) (param $y f64) (result f64) + (local $t f64) + (local $Int f64) + (local $Double i32) + (block $topmost (result f64) + (if + (f64.gt + (get_local $x) + (f64.const 0) + ) + (br $topmost + (f64.const 1.2) + ) + ) + (if + (f64.gt + (get_local $Int) + (f64.const 0) + ) + (br $topmost + (f64.const -3.4) + ) + ) + (if + (i32.gt_s + (get_local $Double) + (i32.const 0) + ) + (br $topmost + (f64.const 5.6) + ) + ) + (if + (f64.lt + (get_local $x) + (get_local $y) + ) + (br $topmost + (get_local $x) + ) + ) + (get_local $y) + ) + ) + (func $intOps (type $5) (result i32) + (local $x i32) + (i32.eq + (get_local $x) + (i32.const 0) + ) + ) + (func $hexLiterals (type $FUNCSIG$v) + (drop + (i32.add + (i32.add + (i32.const 0) + (i32.const 313249263) + ) + (i32.const -19088752) + ) + ) + ) + (func $conversions (type $FUNCSIG$v) + (local $i i32) + (local $d f64) + (block $block0 + (set_local $i + (call $f64-to-int + (get_local $d) + ) + ) + (set_local $d + (f64.convert_s/i32 + (get_local $i) + ) + ) + (set_local $d + (f64.convert_u/i32 + (i32.shr_u + (get_local $i) + (i32.const 0) + ) + ) + ) + ) + ) + (func $seq (type $FUNCSIG$v) + (local $J f64) + (set_local $J + (f64.sub + (block $block0 (result f64) + (drop + (f64.const 0.1) + ) + (f64.const 5.1) + ) + (block $block1 (result f64) + (drop + (f64.const 3.2) + ) + (f64.const 4.2) + ) + ) + ) + ) + (func $switcher (type $6) (param $x i32) (result i32) + (block $topmost (result i32) + (block $switch$0 + (block $switch-default$3 + (block $switch-case$2 + (block $switch-case$1 + (br_table $switch-case$1 $switch-case$2 $switch-default$3 + (i32.sub + (get_local $x) + (i32.const 1) + ) + ) + ) + (br $topmost + (i32.const 1) + ) + ) + (br $topmost + (i32.const 2) + ) + ) + (nop) + ) + (block $switch$4 + (block $switch-default$7 + (block $switch-case$6 + (block $switch-case$5 + (br_table $switch-case$6 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-case$5 $switch-default$7 + (i32.sub + (get_local $x) + (i32.const 5) + ) + ) + ) + (br $topmost + (i32.const 121) + ) + ) + (br $topmost + (i32.const 51) + ) + ) + (nop) + ) + (block $label$break$Lout + (block $switch-default$16 + (block $switch-case$15 + (block $switch-case$12 + (block $switch-case$9 + (block $switch-case$8 + (br_table $switch-case$15 $switch-default$16 $switch-default$16 $switch-case$12 $switch-default$16 $switch-default$16 $switch-default$16 $switch-default$16 $switch-case$9 $switch-default$16 $switch-case$8 $switch-default$16 + (i32.sub + (get_local $x) + (i32.const 2) + ) + ) + ) + (br $label$break$Lout) + ) + (br $label$break$Lout) + ) + (block $while-out$10 + (loop $while-in$11 + (block $block1 + (br $while-out$10) + (br $while-in$11) + ) + ) + (br $label$break$Lout) + ) + ) + (block $while-out$13 + (loop $while-in$14 + (block $block3 + (br $label$break$Lout) + (br $while-in$14) + ) + ) + (br $label$break$Lout) + ) + ) + (nop) + ) + (i32.const 0) + ) + ) + (func $blocker (type $FUNCSIG$v) + (block $label$break$L + (br $label$break$L) + ) + ) + (func $frem (type $4) (result f64) + (call $f64-rem + (f64.const 5.5) + (f64.const 1.2) + ) + ) + (func $big_uint_div_u (type $5) (result i32) + (local $x i32) + (block $topmost (result i32) + (set_local $x + (i32.and + (i32.div_u + (i32.const -1) + (i32.const 2) + ) + (i32.const -1) + ) + ) + (get_local $x) + ) + ) + (func $fr (type $FUNCSIG$vf) (param $x f32) + (local $y f32) + (local $z f64) + (block $block0 + (drop + (f32.demote/f64 + (get_local $z) + ) + ) + (drop + (get_local $y) + ) + (drop + (f32.const 5) + ) + (drop + (f32.const 0) + ) + (drop + (f32.const 5) + ) + (drop + (f32.const 0) + ) + ) + ) + (func $negZero (type $4) (result f64) + (f64.const -0) + ) + (func $abs (type $FUNCSIG$v) + (local $x i32) + (local $y f64) + (local $z f32) + (local $asm2wasm_i32_temp i32) + (block $block0 + (set_local $x + (block $block1 (result i32) + (set_local $asm2wasm_i32_temp + (i32.const 0) + ) + (select + (i32.sub + (i32.const 0) + (get_local $asm2wasm_i32_temp) + ) + (get_local $asm2wasm_i32_temp) + (i32.lt_s + (get_local $asm2wasm_i32_temp) + (i32.const 0) + ) + ) + ) + ) + (set_local $y + (f64.abs + (f64.const 0) + ) + ) + (set_local $z + (f32.abs + (f32.const 0) + ) + ) + ) + ) + (func $neg (type $FUNCSIG$v) + (local $x f32) + (block $block0 + (set_local $x + (f32.neg + (get_local $x) + ) + ) + (call_indirect (type $FUNCSIG$vf) + (get_local $x) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 8) + ) + ) + ) + ) + (func $cneg (type $FUNCSIG$vf) (param $x f32) + (call_indirect (type $FUNCSIG$vf) + (get_local $x) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 8) + ) + ) + ) + (func $___syscall_ret (type $FUNCSIG$v) + (local $$0 i32) + (drop + (i32.gt_u + (i32.shr_u + (get_local $$0) + (i32.const 0) + ) + (i32.const -4096) + ) + ) + ) + (func $z (type $FUNCSIG$v) + (nop) + ) + (func $w (type $FUNCSIG$v) + (nop) + ) + (func $block_and_after (type $5) (result i32) + (block $waka + (drop + (i32.const 1) + ) + (br $waka) + ) + (i32.const 0) + ) + (func $loop-roundtrip (type $7) (param $0 f64) (result f64) + (loop $loop-in1 (result f64) + (drop + (get_local $0) + ) + (get_local $0) + ) + ) + (func $big-i64 (type $8) (result i64) + (i64.const -9218868437227405313) + ) + (func $i64-store32 (type $9) (param $0 i32) (param $1 i64) + (i64.store32 + (get_local $0) + (get_local $1) + ) + ) + (func $return-unreachable (result i32) + (return (i32.const 1)) + ) + (func $unreachable-block (result i32) + (f64.abs + (block ;; note no type - valid in binaryen IR, in wasm must be i32 + (drop (i32.const 1)) + (return (i32.const 2)) + ) + ) + ) + (func $unreachable-block-toplevel (result i32) + (block ;; note no type - valid in binaryen IR, in wasm must be i32 + (drop (i32.const 1)) + (return (i32.const 2)) + ) + ) + (func $unreachable-block0 (result i32) + (f64.abs + (block ;; note no type - valid in binaryen IR, in wasm must be i32 + (return (i32.const 2)) + ) + ) + ) + (func $unreachable-block0-toplevel (result i32) + (block ;; note no type - valid in binaryen IR, in wasm must be i32 + (return (i32.const 2)) + ) + ) + (func $unreachable-block-with-br (result i32) + (block $block ;; unreachable type due to last element having that type, but the block is exitable + (drop (i32.const 1)) + (br $block) + ) + (i32.const 1) + ) + (func $unreachable-if (result i32) + (f64.abs + (if ;; note no type - valid in binaryen IR, in wasm must be i32 + (i32.const 3) + (return (i32.const 2)) + (return (i32.const 1)) + ) + ) + ) + (func $unreachable-if-toplevel (result i32) + (if ;; note no type - valid in binaryen IR, in wasm must be i32 + (i32.const 3) + (return (i32.const 2)) + (return (i32.const 1)) + ) + ) + (func $unreachable-loop (result i32) + (f64.abs + (loop ;; note no type - valid in binaryen IR, in wasm must be i32 + (nop) + (return (i32.const 1)) + ) + ) + ) + (func $unreachable-loop0 (result i32) + (f64.abs + (loop ;; note no type - valid in binaryen IR, in wasm must be i32 + (return (i32.const 1)) + ) + ) + ) + (func $unreachable-loop-toplevel (result i32) + (loop ;; note no type - valid in binaryen IR, in wasm must be i32 + (nop) + (return (i32.const 1)) + ) + ) + (func $unreachable-loop0-toplevel (result i32) + (loop ;; note no type - valid in binaryen IR, in wasm must be i32 + (return (i32.const 1)) + ) + ) + (func $unreachable-ifs + (if (unreachable) (nop)) + (if (unreachable) (unreachable)) + (if (unreachable) (nop) (nop)) + (if (unreachable) (unreachable) (nop)) + (if (unreachable) (nop) (unreachable)) + (if (unreachable) (unreachable) (unreachable)) + ;; + (if (i32.const 1) (unreachable) (nop)) + (if (i32.const 1) (nop) (unreachable)) + (if (i32.const 1) (unreachable) (unreachable)) + ) + (func $unreachable-if-arm + (if + (i32.const 1) + (block + (nop) + ) + (block + (unreachable) + (drop + (i32.const 1) + ) + ) + ) + ) +) diff --git a/src/binaryen/test/unit.wast.from-wast b/src/binaryen/test/unit.wast.from-wast new file mode 100644 index 0000000000..2ae39e64b0 --- /dev/null +++ b/src/binaryen/test/unit.wast.from-wast @@ -0,0 +1,619 @@ +(module + (type $FUNCSIG$vf (func (param f32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$id (func (param f64) (result i32))) + (type $FUNCSIG$ddd (func (param f64 f64) (result f64))) + (type $4 (func (result f64))) + (type $5 (func (result i32))) + (type $6 (func (param i32) (result i32))) + (type $7 (func (param f64) (result f64))) + (type $8 (func (result i64))) + (type $9 (func (param i32 i64))) + (import "env" "_emscripten_asm_const_vi" (func $_emscripten_asm_const_vi)) + (import "asm2wasm" "f64-to-int" (func $f64-to-int (param f64) (result i32))) + (import "asm2wasm" "f64-rem" (func $f64-rem (param f64 f64) (result f64))) + (table 10 anyfunc) + (elem (i32.const 0) $z $big_negative $z $z $w $w $importedDoubles $w $z $cneg) + (memory $0 4096 4096) + (data (i32.const 1026) "\14\00") + (export "big_negative" (func $big_negative)) + (func $big_negative (; 3 ;) (type $FUNCSIG$v) + (local $temp f64) + (block $block0 + (set_local $temp + (f64.const -2147483648) + ) + (set_local $temp + (f64.const -2147483648) + ) + (set_local $temp + (f64.const -21474836480) + ) + (set_local $temp + (f64.const 0.039625) + ) + (set_local $temp + (f64.const -0.039625) + ) + ) + ) + (func $importedDoubles (; 4 ;) (type $4) (result f64) + (local $temp f64) + (block $topmost (result f64) + (set_local $temp + (f64.add + (f64.add + (f64.add + (f64.load + (i32.const 8) + ) + (f64.load + (i32.const 16) + ) + ) + (f64.neg + (f64.load + (i32.const 16) + ) + ) + ) + (f64.neg + (f64.load + (i32.const 8) + ) + ) + ) + ) + (if + (i32.gt_s + (i32.load + (i32.const 24) + ) + (i32.const 0) + ) + (br $topmost + (f64.const -3.4) + ) + ) + (if + (f64.gt + (f64.load + (i32.const 32) + ) + (f64.const 0) + ) + (br $topmost + (f64.const 5.6) + ) + ) + (f64.const 1.2) + ) + ) + (func $doubleCompares (; 5 ;) (type $FUNCSIG$ddd) (param $x f64) (param $y f64) (result f64) + (local $t f64) + (local $Int f64) + (local $Double i32) + (block $topmost (result f64) + (if + (f64.gt + (get_local $x) + (f64.const 0) + ) + (br $topmost + (f64.const 1.2) + ) + ) + (if + (f64.gt + (get_local $Int) + (f64.const 0) + ) + (br $topmost + (f64.const -3.4) + ) + ) + (if + (i32.gt_s + (get_local $Double) + (i32.const 0) + ) + (br $topmost + (f64.const 5.6) + ) + ) + (if + (f64.lt + (get_local $x) + (get_local $y) + ) + (br $topmost + (get_local $x) + ) + ) + (get_local $y) + ) + ) + (func $intOps (; 6 ;) (type $5) (result i32) + (local $x i32) + (i32.eq + (get_local $x) + (i32.const 0) + ) + ) + (func $hexLiterals (; 7 ;) (type $FUNCSIG$v) + (drop + (i32.add + (i32.add + (i32.const 0) + (i32.const 313249263) + ) + (i32.const -19088752) + ) + ) + ) + (func $conversions (; 8 ;) (type $FUNCSIG$v) + (local $i i32) + (local $d f64) + (block $block0 + (set_local $i + (call $f64-to-int + (get_local $d) + ) + ) + (set_local $d + (f64.convert_s/i32 + (get_local $i) + ) + ) + (set_local $d + (f64.convert_u/i32 + (i32.shr_u + (get_local $i) + (i32.const 0) + ) + ) + ) + ) + ) + (func $seq (; 9 ;) (type $FUNCSIG$v) + (local $J f64) + (set_local $J + (f64.sub + (block $block0 (result f64) + (drop + (f64.const 0.1) + ) + (f64.const 5.1) + ) + (block $block1 (result f64) + (drop + (f64.const 3.2) + ) + (f64.const 4.2) + ) + ) + ) + ) + (func $switcher (; 10 ;) (type $6) (param $x i32) (result i32) + (block $topmost (result i32) + (block $switch$0 + (block $switch-default$3 + (block $switch-case$2 + (block $switch-case$1 + (br_table $switch-case$1 $switch-case$2 $switch-default$3 + (i32.sub + (get_local $x) + (i32.const 1) + ) + ) + ) + (br $topmost + (i32.const 1) + ) + ) + (br $topmost + (i32.const 2) + ) + ) + (nop) + ) + (block $switch$4 + (block $switch-default$7 + (block $switch-case$6 + (block $switch-case$5 + (br_table $switch-case$6 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-case$5 $switch-default$7 + (i32.sub + (get_local $x) + (i32.const 5) + ) + ) + ) + (br $topmost + (i32.const 121) + ) + ) + (br $topmost + (i32.const 51) + ) + ) + (nop) + ) + (block $label$break$Lout + (block $switch-default$16 + (block $switch-case$15 + (block $switch-case$12 + (block $switch-case$9 + (block $switch-case$8 + (br_table $switch-case$15 $switch-default$16 $switch-default$16 $switch-case$12 $switch-default$16 $switch-default$16 $switch-default$16 $switch-default$16 $switch-case$9 $switch-default$16 $switch-case$8 $switch-default$16 + (i32.sub + (get_local $x) + (i32.const 2) + ) + ) + ) + (br $label$break$Lout) + ) + (br $label$break$Lout) + ) + (block $while-out$10 + (loop $while-in$11 + (block $block1 + (br $while-out$10) + (br $while-in$11) + ) + ) + (br $label$break$Lout) + ) + ) + (block $while-out$13 + (loop $while-in$14 + (block $block3 + (br $label$break$Lout) + (br $while-in$14) + ) + ) + (br $label$break$Lout) + ) + ) + (nop) + ) + (i32.const 0) + ) + ) + (func $blocker (; 11 ;) (type $FUNCSIG$v) + (block $label$break$L + (br $label$break$L) + ) + ) + (func $frem (; 12 ;) (type $4) (result f64) + (call $f64-rem + (f64.const 5.5) + (f64.const 1.2) + ) + ) + (func $big_uint_div_u (; 13 ;) (type $5) (result i32) + (local $x i32) + (block $topmost (result i32) + (set_local $x + (i32.and + (i32.div_u + (i32.const -1) + (i32.const 2) + ) + (i32.const -1) + ) + ) + (get_local $x) + ) + ) + (func $fr (; 14 ;) (type $FUNCSIG$vf) (param $x f32) + (local $y f32) + (local $z f64) + (block $block0 + (drop + (f32.demote/f64 + (get_local $z) + ) + ) + (drop + (get_local $y) + ) + (drop + (f32.const 5) + ) + (drop + (f32.const 0) + ) + (drop + (f32.const 5) + ) + (drop + (f32.const 0) + ) + ) + ) + (func $negZero (; 15 ;) (type $4) (result f64) + (f64.const -0) + ) + (func $abs (; 16 ;) (type $FUNCSIG$v) + (local $x i32) + (local $y f64) + (local $z f32) + (local $asm2wasm_i32_temp i32) + (block $block0 + (set_local $x + (block $block1 (result i32) + (set_local $asm2wasm_i32_temp + (i32.const 0) + ) + (select + (i32.sub + (i32.const 0) + (get_local $asm2wasm_i32_temp) + ) + (get_local $asm2wasm_i32_temp) + (i32.lt_s + (get_local $asm2wasm_i32_temp) + (i32.const 0) + ) + ) + ) + ) + (set_local $y + (f64.abs + (f64.const 0) + ) + ) + (set_local $z + (f32.abs + (f32.const 0) + ) + ) + ) + ) + (func $neg (; 17 ;) (type $FUNCSIG$v) + (local $x f32) + (block $block0 + (set_local $x + (f32.neg + (get_local $x) + ) + ) + (call_indirect (type $FUNCSIG$vf) + (get_local $x) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 8) + ) + ) + ) + ) + (func $cneg (; 18 ;) (type $FUNCSIG$vf) (param $x f32) + (call_indirect (type $FUNCSIG$vf) + (get_local $x) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 8) + ) + ) + ) + (func $___syscall_ret (; 19 ;) (type $FUNCSIG$v) + (local $$0 i32) + (drop + (i32.gt_u + (i32.shr_u + (get_local $$0) + (i32.const 0) + ) + (i32.const -4096) + ) + ) + ) + (func $z (; 20 ;) (type $FUNCSIG$v) + (nop) + ) + (func $w (; 21 ;) (type $FUNCSIG$v) + (nop) + ) + (func $block_and_after (; 22 ;) (type $5) (result i32) + (block $waka + (drop + (i32.const 1) + ) + (br $waka) + ) + (i32.const 0) + ) + (func $loop-roundtrip (; 23 ;) (type $7) (param $0 f64) (result f64) + (loop $loop-in1 (result f64) + (drop + (get_local $0) + ) + (get_local $0) + ) + ) + (func $big-i64 (; 24 ;) (type $8) (result i64) + (i64.const -9218868437227405313) + ) + (func $i64-store32 (; 25 ;) (type $9) (param $0 i32) (param $1 i64) + (i64.store32 + (get_local $0) + (get_local $1) + ) + ) + (func $return-unreachable (; 26 ;) (type $5) (result i32) + (return + (i32.const 1) + ) + ) + (func $unreachable-block (; 27 ;) (type $5) (result i32) + (f64.abs + (block $block + (drop + (i32.const 1) + ) + (return + (i32.const 2) + ) + ) + ) + ) + (func $unreachable-block-toplevel (; 28 ;) (type $5) (result i32) + (block $block + (drop + (i32.const 1) + ) + (return + (i32.const 2) + ) + ) + ) + (func $unreachable-block0 (; 29 ;) (type $5) (result i32) + (f64.abs + (block $block + (return + (i32.const 2) + ) + ) + ) + ) + (func $unreachable-block0-toplevel (; 30 ;) (type $5) (result i32) + (block $block + (return + (i32.const 2) + ) + ) + ) + (func $unreachable-block-with-br (; 31 ;) (type $5) (result i32) + (block $block + (drop + (i32.const 1) + ) + (br $block) + ) + (i32.const 1) + ) + (func $unreachable-if (; 32 ;) (type $5) (result i32) + (f64.abs + (if + (i32.const 3) + (return + (i32.const 2) + ) + (return + (i32.const 1) + ) + ) + ) + ) + (func $unreachable-if-toplevel (; 33 ;) (type $5) (result i32) + (if + (i32.const 3) + (return + (i32.const 2) + ) + (return + (i32.const 1) + ) + ) + ) + (func $unreachable-loop (; 34 ;) (type $5) (result i32) + (f64.abs + (loop $loop-in + (nop) + (return + (i32.const 1) + ) + ) + ) + ) + (func $unreachable-loop0 (; 35 ;) (type $5) (result i32) + (f64.abs + (loop $loop-in + (return + (i32.const 1) + ) + ) + ) + ) + (func $unreachable-loop-toplevel (; 36 ;) (type $5) (result i32) + (loop $loop-in + (nop) + (return + (i32.const 1) + ) + ) + ) + (func $unreachable-loop0-toplevel (; 37 ;) (type $5) (result i32) + (loop $loop-in + (return + (i32.const 1) + ) + ) + ) + (func $unreachable-ifs (; 38 ;) (type $FUNCSIG$v) + (if + (unreachable) + (nop) + ) + (if + (unreachable) + (unreachable) + ) + (if + (unreachable) + (nop) + (nop) + ) + (if + (unreachable) + (unreachable) + (nop) + ) + (if + (unreachable) + (nop) + (unreachable) + ) + (if + (unreachable) + (unreachable) + (unreachable) + ) + (if + (i32.const 1) + (unreachable) + (nop) + ) + (if + (i32.const 1) + (nop) + (unreachable) + ) + (if + (i32.const 1) + (unreachable) + (unreachable) + ) + ) + (func $unreachable-if-arm (; 39 ;) (type $FUNCSIG$v) + (if + (i32.const 1) + (block $block + (nop) + ) + (block $block12 + (unreachable) + (drop + (i32.const 1) + ) + ) + ) + ) +) diff --git a/src/binaryen/test/unit.wast.fromBinary b/src/binaryen/test/unit.wast.fromBinary new file mode 100644 index 0000000000..827fd5e6f7 --- /dev/null +++ b/src/binaryen/test/unit.wast.fromBinary @@ -0,0 +1,537 @@ +(module + (type $0 (func (param f32))) + (type $1 (func)) + (type $2 (func (param f64) (result i32))) + (type $3 (func (param f64 f64) (result f64))) + (type $4 (func (result f64))) + (type $5 (func (result i32))) + (type $6 (func (param i32) (result i32))) + (type $7 (func (param f64) (result f64))) + (type $8 (func (result i64))) + (type $9 (func (param i32 i64))) + (import "env" "_emscripten_asm_const_vi" (func $import$0)) + (import "asm2wasm" "f64-to-int" (func $import$1 (param f64) (result i32))) + (import "asm2wasm" "f64-rem" (func $import$2 (param f64 f64) (result f64))) + (table 10 anyfunc) + (elem (i32.const 0) $z $big_negative $z $z $w $w $importedDoubles $w $z $cneg) + (memory $0 4096 4096) + (data (i32.const 1026) "\14\00") + (export "big_negative" (func $big_negative)) + (func $big_negative (; 3 ;) (type $1) + (local $var$0 f64) + (set_local $var$0 + (f64.const -2147483648) + ) + (set_local $var$0 + (f64.const -2147483648) + ) + (set_local $var$0 + (f64.const -21474836480) + ) + (set_local $var$0 + (f64.const 0.039625) + ) + (set_local $var$0 + (f64.const -0.039625) + ) + ) + (func $importedDoubles (; 4 ;) (type $4) (result f64) + (local $var$0 f64) + (block $label$1 (result f64) + (set_local $var$0 + (f64.add + (f64.add + (f64.add + (f64.load + (i32.const 8) + ) + (f64.load + (i32.const 16) + ) + ) + (f64.neg + (f64.load + (i32.const 16) + ) + ) + ) + (f64.neg + (f64.load + (i32.const 8) + ) + ) + ) + ) + (if + (i32.gt_s + (i32.load + (i32.const 24) + ) + (i32.const 0) + ) + (br $label$1 + (f64.const -3.4) + ) + ) + (if + (f64.gt + (f64.load + (i32.const 32) + ) + (f64.const 0) + ) + (br $label$1 + (f64.const 5.6) + ) + ) + (f64.const 1.2) + ) + ) + (func $doubleCompares (; 5 ;) (type $3) (param $var$0 f64) (param $var$1 f64) (result f64) + (local $var$2 i32) + (local $var$3 f64) + (local $var$4 f64) + (block $label$1 (result f64) + (if + (f64.gt + (get_local $var$0) + (f64.const 0) + ) + (br $label$1 + (f64.const 1.2) + ) + ) + (if + (f64.gt + (get_local $var$4) + (f64.const 0) + ) + (br $label$1 + (f64.const -3.4) + ) + ) + (if + (i32.gt_s + (get_local $var$2) + (i32.const 0) + ) + (br $label$1 + (f64.const 5.6) + ) + ) + (if + (f64.lt + (get_local $var$0) + (get_local $var$1) + ) + (br $label$1 + (get_local $var$0) + ) + ) + (get_local $var$1) + ) + ) + (func $intOps (; 6 ;) (type $5) (result i32) + (local $var$0 i32) + (i32.eq + (get_local $var$0) + (i32.const 0) + ) + ) + (func $hexLiterals (; 7 ;) (type $1) + (drop + (i32.add + (i32.add + (i32.const 0) + (i32.const 313249263) + ) + (i32.const -19088752) + ) + ) + ) + (func $conversions (; 8 ;) (type $1) + (local $var$0 i32) + (local $var$1 f64) + (set_local $var$0 + (call $import$1 + (get_local $var$1) + ) + ) + (set_local $var$1 + (f64.convert_s/i32 + (get_local $var$0) + ) + ) + (set_local $var$1 + (f64.convert_u/i32 + (i32.shr_u + (get_local $var$0) + (i32.const 0) + ) + ) + ) + ) + (func $seq (; 9 ;) (type $1) + (local $var$0 f64) + (set_local $var$0 + (f64.sub + (block $label$1 (result f64) + (drop + (f64.const 0.1) + ) + (f64.const 5.1) + ) + (block $label$2 (result f64) + (drop + (f64.const 3.2) + ) + (f64.const 4.2) + ) + ) + ) + ) + (func $switcher (; 10 ;) (type $6) (param $var$0 i32) (result i32) + (block $label$1 (result i32) + (block $label$2 + (block $label$3 + (block $label$4 + (block $label$5 + (br_table $label$5 $label$4 $label$3 + (i32.sub + (get_local $var$0) + (i32.const 1) + ) + ) + ) + (br $label$1 + (i32.const 1) + ) + ) + (br $label$1 + (i32.const 2) + ) + ) + (nop) + ) + (block $label$6 + (block $label$7 + (block $label$8 + (block $label$9 + (br_table $label$8 $label$7 $label$7 $label$7 $label$7 $label$7 $label$7 $label$9 $label$7 + (i32.sub + (get_local $var$0) + (i32.const 5) + ) + ) + ) + (br $label$1 + (i32.const 121) + ) + ) + (br $label$1 + (i32.const 51) + ) + ) + (nop) + ) + (block $label$10 + (block $label$11 + (block $label$12 + (block $label$13 + (block $label$14 + (block $label$15 + (br_table $label$12 $label$11 $label$11 $label$13 $label$11 $label$11 $label$11 $label$11 $label$14 $label$11 $label$15 $label$11 + (i32.sub + (get_local $var$0) + (i32.const 2) + ) + ) + ) + (br $label$10) + ) + (br $label$10) + ) + (block $label$16 + (loop $label$17 + (br $label$16) + ) + ) + ) + (block $label$18 + (loop $label$19 + (br $label$10) + ) + ) + ) + (nop) + ) + (i32.const 0) + ) + ) + (func $blocker (; 11 ;) (type $1) + (block $label$1 + (br $label$1) + ) + ) + (func $frem (; 12 ;) (type $4) (result f64) + (call $import$2 + (f64.const 5.5) + (f64.const 1.2) + ) + ) + (func $big_uint_div_u (; 13 ;) (type $5) (result i32) + (local $var$0 i32) + (set_local $var$0 + (i32.and + (i32.div_u + (i32.const -1) + (i32.const 2) + ) + (i32.const -1) + ) + ) + (get_local $var$0) + ) + (func $fr (; 14 ;) (type $0) (param $var$0 f32) + (local $var$1 f32) + (local $var$2 f64) + (drop + (f32.demote/f64 + (get_local $var$2) + ) + ) + (drop + (get_local $var$1) + ) + (drop + (f32.const 5) + ) + (drop + (f32.const 0) + ) + (drop + (f32.const 5) + ) + (drop + (f32.const 0) + ) + ) + (func $negZero (; 15 ;) (type $4) (result f64) + (f64.const -0) + ) + (func $abs (; 16 ;) (type $1) + (local $var$0 i32) + (local $var$1 i32) + (local $var$2 f32) + (local $var$3 f64) + (set_local $var$0 + (block $label$1 (result i32) + (set_local $var$1 + (i32.const 0) + ) + (select + (i32.sub + (i32.const 0) + (get_local $var$1) + ) + (get_local $var$1) + (i32.lt_s + (get_local $var$1) + (i32.const 0) + ) + ) + ) + ) + (set_local $var$3 + (f64.abs + (f64.const 0) + ) + ) + (set_local $var$2 + (f32.abs + (f32.const 0) + ) + ) + ) + (func $neg (; 17 ;) (type $1) + (local $var$0 f32) + (set_local $var$0 + (f32.neg + (get_local $var$0) + ) + ) + (call_indirect (type $0) + (get_local $var$0) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 8) + ) + ) + ) + (func $cneg (; 18 ;) (type $0) (param $var$0 f32) + (call_indirect (type $0) + (get_local $var$0) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 8) + ) + ) + ) + (func $___syscall_ret (; 19 ;) (type $1) + (local $var$0 i32) + (drop + (i32.gt_u + (i32.shr_u + (get_local $var$0) + (i32.const 0) + ) + (i32.const -4096) + ) + ) + ) + (func $z (; 20 ;) (type $1) + (nop) + ) + (func $w (; 21 ;) (type $1) + (nop) + ) + (func $block_and_after (; 22 ;) (type $5) (result i32) + (block $label$1 + (drop + (i32.const 1) + ) + (br $label$1) + ) + (i32.const 0) + ) + (func $loop-roundtrip (; 23 ;) (type $7) (param $var$0 f64) (result f64) + (loop $label$1 (result f64) + (drop + (get_local $var$0) + ) + (get_local $var$0) + ) + ) + (func $big-i64 (; 24 ;) (type $8) (result i64) + (i64.const -9218868437227405313) + ) + (func $i64-store32 (; 25 ;) (type $9) (param $var$0 i32) (param $var$1 i64) + (i64.store32 + (get_local $var$0) + (get_local $var$1) + ) + ) + (func $return-unreachable (; 26 ;) (type $5) (result i32) + (return + (i32.const 1) + ) + ) + (func $unreachable-block (; 27 ;) (type $5) (result i32) + (block $label$1 + (drop + (i32.const 1) + ) + (return + (i32.const 2) + ) + ) + ) + (func $unreachable-block-toplevel (; 28 ;) (type $5) (result i32) + (drop + (i32.const 1) + ) + (return + (i32.const 2) + ) + ) + (func $unreachable-block0 (; 29 ;) (type $5) (result i32) + (block $label$1 + (return + (i32.const 2) + ) + ) + ) + (func $unreachable-block0-toplevel (; 30 ;) (type $5) (result i32) + (return + (i32.const 2) + ) + ) + (func $unreachable-block-with-br (; 31 ;) (type $5) (result i32) + (block $label$1 + (drop + (i32.const 1) + ) + (br $label$1) + ) + (i32.const 1) + ) + (func $unreachable-if (; 32 ;) (type $5) (result i32) + (if + (i32.const 3) + (return + (i32.const 2) + ) + (return + (i32.const 1) + ) + ) + ) + (func $unreachable-if-toplevel (; 33 ;) (type $5) (result i32) + (if + (i32.const 3) + (return + (i32.const 2) + ) + (return + (i32.const 1) + ) + ) + ) + (func $unreachable-loop (; 34 ;) (type $5) (result i32) + (loop $label$1 + (nop) + (return + (i32.const 1) + ) + ) + ) + (func $unreachable-loop0 (; 35 ;) (type $5) (result i32) + (loop $label$1 + (return + (i32.const 1) + ) + ) + ) + (func $unreachable-loop-toplevel (; 36 ;) (type $5) (result i32) + (loop $label$1 + (nop) + (return + (i32.const 1) + ) + ) + ) + (func $unreachable-loop0-toplevel (; 37 ;) (type $5) (result i32) + (loop $label$1 + (return + (i32.const 1) + ) + ) + ) + (func $unreachable-ifs (; 38 ;) (type $1) + (unreachable) + ) + (func $unreachable-if-arm (; 39 ;) (type $1) + (if + (i32.const 1) + (nop) + (unreachable) + ) + ) +) + diff --git a/src/binaryen/test/unit.wast.fromBinary.noDebugInfo b/src/binaryen/test/unit.wast.fromBinary.noDebugInfo new file mode 100644 index 0000000000..4fe3d90153 --- /dev/null +++ b/src/binaryen/test/unit.wast.fromBinary.noDebugInfo @@ -0,0 +1,537 @@ +(module + (type $0 (func (param f32))) + (type $1 (func)) + (type $2 (func (param f64) (result i32))) + (type $3 (func (param f64 f64) (result f64))) + (type $4 (func (result f64))) + (type $5 (func (result i32))) + (type $6 (func (param i32) (result i32))) + (type $7 (func (param f64) (result f64))) + (type $8 (func (result i64))) + (type $9 (func (param i32 i64))) + (import "env" "_emscripten_asm_const_vi" (func $import$0)) + (import "asm2wasm" "f64-to-int" (func $import$1 (param f64) (result i32))) + (import "asm2wasm" "f64-rem" (func $import$2 (param f64 f64) (result f64))) + (table 10 anyfunc) + (elem (i32.const 0) $17 $0 $17 $17 $18 $18 $1 $18 $17 $15) + (memory $0 4096 4096) + (data (i32.const 1026) "\14\00") + (export "big_negative" (func $0)) + (func $0 (; 3 ;) (type $1) + (local $var$0 f64) + (set_local $var$0 + (f64.const -2147483648) + ) + (set_local $var$0 + (f64.const -2147483648) + ) + (set_local $var$0 + (f64.const -21474836480) + ) + (set_local $var$0 + (f64.const 0.039625) + ) + (set_local $var$0 + (f64.const -0.039625) + ) + ) + (func $1 (; 4 ;) (type $4) (result f64) + (local $var$0 f64) + (block $label$1 (result f64) + (set_local $var$0 + (f64.add + (f64.add + (f64.add + (f64.load + (i32.const 8) + ) + (f64.load + (i32.const 16) + ) + ) + (f64.neg + (f64.load + (i32.const 16) + ) + ) + ) + (f64.neg + (f64.load + (i32.const 8) + ) + ) + ) + ) + (if + (i32.gt_s + (i32.load + (i32.const 24) + ) + (i32.const 0) + ) + (br $label$1 + (f64.const -3.4) + ) + ) + (if + (f64.gt + (f64.load + (i32.const 32) + ) + (f64.const 0) + ) + (br $label$1 + (f64.const 5.6) + ) + ) + (f64.const 1.2) + ) + ) + (func $2 (; 5 ;) (type $3) (param $var$0 f64) (param $var$1 f64) (result f64) + (local $var$2 i32) + (local $var$3 f64) + (local $var$4 f64) + (block $label$1 (result f64) + (if + (f64.gt + (get_local $var$0) + (f64.const 0) + ) + (br $label$1 + (f64.const 1.2) + ) + ) + (if + (f64.gt + (get_local $var$4) + (f64.const 0) + ) + (br $label$1 + (f64.const -3.4) + ) + ) + (if + (i32.gt_s + (get_local $var$2) + (i32.const 0) + ) + (br $label$1 + (f64.const 5.6) + ) + ) + (if + (f64.lt + (get_local $var$0) + (get_local $var$1) + ) + (br $label$1 + (get_local $var$0) + ) + ) + (get_local $var$1) + ) + ) + (func $3 (; 6 ;) (type $5) (result i32) + (local $var$0 i32) + (i32.eq + (get_local $var$0) + (i32.const 0) + ) + ) + (func $4 (; 7 ;) (type $1) + (drop + (i32.add + (i32.add + (i32.const 0) + (i32.const 313249263) + ) + (i32.const -19088752) + ) + ) + ) + (func $5 (; 8 ;) (type $1) + (local $var$0 i32) + (local $var$1 f64) + (set_local $var$0 + (call $import$1 + (get_local $var$1) + ) + ) + (set_local $var$1 + (f64.convert_s/i32 + (get_local $var$0) + ) + ) + (set_local $var$1 + (f64.convert_u/i32 + (i32.shr_u + (get_local $var$0) + (i32.const 0) + ) + ) + ) + ) + (func $6 (; 9 ;) (type $1) + (local $var$0 f64) + (set_local $var$0 + (f64.sub + (block $label$1 (result f64) + (drop + (f64.const 0.1) + ) + (f64.const 5.1) + ) + (block $label$2 (result f64) + (drop + (f64.const 3.2) + ) + (f64.const 4.2) + ) + ) + ) + ) + (func $7 (; 10 ;) (type $6) (param $var$0 i32) (result i32) + (block $label$1 (result i32) + (block $label$2 + (block $label$3 + (block $label$4 + (block $label$5 + (br_table $label$5 $label$4 $label$3 + (i32.sub + (get_local $var$0) + (i32.const 1) + ) + ) + ) + (br $label$1 + (i32.const 1) + ) + ) + (br $label$1 + (i32.const 2) + ) + ) + (nop) + ) + (block $label$6 + (block $label$7 + (block $label$8 + (block $label$9 + (br_table $label$8 $label$7 $label$7 $label$7 $label$7 $label$7 $label$7 $label$9 $label$7 + (i32.sub + (get_local $var$0) + (i32.const 5) + ) + ) + ) + (br $label$1 + (i32.const 121) + ) + ) + (br $label$1 + (i32.const 51) + ) + ) + (nop) + ) + (block $label$10 + (block $label$11 + (block $label$12 + (block $label$13 + (block $label$14 + (block $label$15 + (br_table $label$12 $label$11 $label$11 $label$13 $label$11 $label$11 $label$11 $label$11 $label$14 $label$11 $label$15 $label$11 + (i32.sub + (get_local $var$0) + (i32.const 2) + ) + ) + ) + (br $label$10) + ) + (br $label$10) + ) + (block $label$16 + (loop $label$17 + (br $label$16) + ) + ) + ) + (block $label$18 + (loop $label$19 + (br $label$10) + ) + ) + ) + (nop) + ) + (i32.const 0) + ) + ) + (func $8 (; 11 ;) (type $1) + (block $label$1 + (br $label$1) + ) + ) + (func $9 (; 12 ;) (type $4) (result f64) + (call $import$2 + (f64.const 5.5) + (f64.const 1.2) + ) + ) + (func $10 (; 13 ;) (type $5) (result i32) + (local $var$0 i32) + (set_local $var$0 + (i32.and + (i32.div_u + (i32.const -1) + (i32.const 2) + ) + (i32.const -1) + ) + ) + (get_local $var$0) + ) + (func $11 (; 14 ;) (type $0) (param $var$0 f32) + (local $var$1 f32) + (local $var$2 f64) + (drop + (f32.demote/f64 + (get_local $var$2) + ) + ) + (drop + (get_local $var$1) + ) + (drop + (f32.const 5) + ) + (drop + (f32.const 0) + ) + (drop + (f32.const 5) + ) + (drop + (f32.const 0) + ) + ) + (func $12 (; 15 ;) (type $4) (result f64) + (f64.const -0) + ) + (func $13 (; 16 ;) (type $1) + (local $var$0 i32) + (local $var$1 i32) + (local $var$2 f32) + (local $var$3 f64) + (set_local $var$0 + (block $label$1 (result i32) + (set_local $var$1 + (i32.const 0) + ) + (select + (i32.sub + (i32.const 0) + (get_local $var$1) + ) + (get_local $var$1) + (i32.lt_s + (get_local $var$1) + (i32.const 0) + ) + ) + ) + ) + (set_local $var$3 + (f64.abs + (f64.const 0) + ) + ) + (set_local $var$2 + (f32.abs + (f32.const 0) + ) + ) + ) + (func $14 (; 17 ;) (type $1) + (local $var$0 f32) + (set_local $var$0 + (f32.neg + (get_local $var$0) + ) + ) + (call_indirect (type $0) + (get_local $var$0) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 8) + ) + ) + ) + (func $15 (; 18 ;) (type $0) (param $var$0 f32) + (call_indirect (type $0) + (get_local $var$0) + (i32.add + (i32.and + (i32.const 1) + (i32.const 7) + ) + (i32.const 8) + ) + ) + ) + (func $16 (; 19 ;) (type $1) + (local $var$0 i32) + (drop + (i32.gt_u + (i32.shr_u + (get_local $var$0) + (i32.const 0) + ) + (i32.const -4096) + ) + ) + ) + (func $17 (; 20 ;) (type $1) + (nop) + ) + (func $18 (; 21 ;) (type $1) + (nop) + ) + (func $19 (; 22 ;) (type $5) (result i32) + (block $label$1 + (drop + (i32.const 1) + ) + (br $label$1) + ) + (i32.const 0) + ) + (func $20 (; 23 ;) (type $7) (param $var$0 f64) (result f64) + (loop $label$1 (result f64) + (drop + (get_local $var$0) + ) + (get_local $var$0) + ) + ) + (func $21 (; 24 ;) (type $8) (result i64) + (i64.const -9218868437227405313) + ) + (func $22 (; 25 ;) (type $9) (param $var$0 i32) (param $var$1 i64) + (i64.store32 + (get_local $var$0) + (get_local $var$1) + ) + ) + (func $23 (; 26 ;) (type $5) (result i32) + (return + (i32.const 1) + ) + ) + (func $24 (; 27 ;) (type $5) (result i32) + (block $label$1 + (drop + (i32.const 1) + ) + (return + (i32.const 2) + ) + ) + ) + (func $25 (; 28 ;) (type $5) (result i32) + (drop + (i32.const 1) + ) + (return + (i32.const 2) + ) + ) + (func $26 (; 29 ;) (type $5) (result i32) + (block $label$1 + (return + (i32.const 2) + ) + ) + ) + (func $27 (; 30 ;) (type $5) (result i32) + (return + (i32.const 2) + ) + ) + (func $28 (; 31 ;) (type $5) (result i32) + (block $label$1 + (drop + (i32.const 1) + ) + (br $label$1) + ) + (i32.const 1) + ) + (func $29 (; 32 ;) (type $5) (result i32) + (if + (i32.const 3) + (return + (i32.const 2) + ) + (return + (i32.const 1) + ) + ) + ) + (func $30 (; 33 ;) (type $5) (result i32) + (if + (i32.const 3) + (return + (i32.const 2) + ) + (return + (i32.const 1) + ) + ) + ) + (func $31 (; 34 ;) (type $5) (result i32) + (loop $label$1 + (nop) + (return + (i32.const 1) + ) + ) + ) + (func $32 (; 35 ;) (type $5) (result i32) + (loop $label$1 + (return + (i32.const 1) + ) + ) + ) + (func $33 (; 36 ;) (type $5) (result i32) + (loop $label$1 + (nop) + (return + (i32.const 1) + ) + ) + ) + (func $34 (; 37 ;) (type $5) (result i32) + (loop $label$1 + (return + (i32.const 1) + ) + ) + ) + (func $35 (; 38 ;) (type $1) + (unreachable) + ) + (func $36 (; 39 ;) (type $1) + (if + (i32.const 1) + (nop) + (unreachable) + ) + ) +) + diff --git a/src/binaryen/test/unreachable-code.wast b/src/binaryen/test/unreachable-code.wast new file mode 100644 index 0000000000..f67d10e52c --- /dev/null +++ b/src/binaryen/test/unreachable-code.wast @@ -0,0 +1,85 @@ +(module + (func $a + (if (i32.const 1) + (unreachable) + ) + ) + (func $b + (if (i32.const 1) + (unreachable) + (unreachable) + ) + ) + (func $a-block + (block + (if (i32.const 1) + (unreachable) + ) + ) + ) + (func $b-block + (block + (if (i32.const 1) + (unreachable) + (unreachable) + ) + ) + ) + (func $a-prepost + (nop) + (if (i32.const 1) + (unreachable) + ) + (nop) + ) + (func $b-prepost + (nop) + (if (i32.const 1) + (unreachable) + (unreachable) + ) + (nop) + ) + (func $a-block-prepost + (nop) + (block + (if (i32.const 1) + (unreachable) + ) + ) + (nop) + ) + (func $b-block-prepost + (nop) + (block + (if (i32.const 1) + (unreachable) + (unreachable) + ) + ) + (nop) + ) + (func $recurse + (block $a + (nop) + (block $b + (nop) + (br $b) + (nop) + ) + (nop) + ) + ) + (func $recurse-b + (block $a + (nop) + (block $b + (nop) + (br $a) + (nop) + ) + (nop) + ) + ) +) + diff --git a/src/binaryen/test/unreachable-code.wast.from-wast b/src/binaryen/test/unreachable-code.wast.from-wast new file mode 100644 index 0000000000..a5488458d2 --- /dev/null +++ b/src/binaryen/test/unreachable-code.wast.from-wast @@ -0,0 +1,94 @@ +(module + (type $0 (func)) + (memory $0 0) + (func $a (; 0 ;) (type $0) + (if + (i32.const 1) + (unreachable) + ) + ) + (func $b (; 1 ;) (type $0) + (if + (i32.const 1) + (unreachable) + (unreachable) + ) + ) + (func $a-block (; 2 ;) (type $0) + (block $block + (if + (i32.const 1) + (unreachable) + ) + ) + ) + (func $b-block (; 3 ;) (type $0) + (block $block + (if + (i32.const 1) + (unreachable) + (unreachable) + ) + ) + ) + (func $a-prepost (; 4 ;) (type $0) + (nop) + (if + (i32.const 1) + (unreachable) + ) + (nop) + ) + (func $b-prepost (; 5 ;) (type $0) + (nop) + (if + (i32.const 1) + (unreachable) + (unreachable) + ) + (nop) + ) + (func $a-block-prepost (; 6 ;) (type $0) + (nop) + (block $block + (if + (i32.const 1) + (unreachable) + ) + ) + (nop) + ) + (func $b-block-prepost (; 7 ;) (type $0) + (nop) + (block $block + (if + (i32.const 1) + (unreachable) + (unreachable) + ) + ) + (nop) + ) + (func $recurse (; 8 ;) (type $0) + (block $a + (nop) + (block $b + (nop) + (br $b) + (nop) + ) + (nop) + ) + ) + (func $recurse-b (; 9 ;) (type $0) + (block $a + (nop) + (block $b + (nop) + (br $a) + (nop) + ) + (nop) + ) + ) +) diff --git a/src/binaryen/test/unreachable-code.wast.fromBinary b/src/binaryen/test/unreachable-code.wast.fromBinary new file mode 100644 index 0000000000..d0c0f06d78 --- /dev/null +++ b/src/binaryen/test/unreachable-code.wast.fromBinary @@ -0,0 +1,84 @@ +(module + (type $0 (func)) + (memory $0 0) + (func $a (; 0 ;) (type $0) + (if + (i32.const 1) + (unreachable) + ) + ) + (func $b (; 1 ;) (type $0) + (if + (i32.const 1) + (unreachable) + (unreachable) + ) + ) + (func $a-block (; 2 ;) (type $0) + (if + (i32.const 1) + (unreachable) + ) + ) + (func $b-block (; 3 ;) (type $0) + (if + (i32.const 1) + (unreachable) + (unreachable) + ) + ) + (func $a-prepost (; 4 ;) (type $0) + (nop) + (if + (i32.const 1) + (unreachable) + ) + (nop) + ) + (func $b-prepost (; 5 ;) (type $0) + (nop) + (if + (i32.const 1) + (unreachable) + (unreachable) + ) + ) + (func $a-block-prepost (; 6 ;) (type $0) + (nop) + (block $label$1 + (if + (i32.const 1) + (unreachable) + ) + ) + (nop) + ) + (func $b-block-prepost (; 7 ;) (type $0) + (nop) + (block $label$1 + (if + (i32.const 1) + (unreachable) + (unreachable) + ) + ) + ) + (func $recurse (; 8 ;) (type $0) + (nop) + (block $label$1 + (nop) + (br $label$1) + ) + (nop) + ) + (func $recurse-b (; 9 ;) (type $0) + (block $label$1 + (nop) + (block $label$2 + (nop) + (br $label$1) + ) + ) + ) +) + diff --git a/src/binaryen/test/unreachable-code.wast.fromBinary.noDebugInfo b/src/binaryen/test/unreachable-code.wast.fromBinary.noDebugInfo new file mode 100644 index 0000000000..24e4e92229 --- /dev/null +++ b/src/binaryen/test/unreachable-code.wast.fromBinary.noDebugInfo @@ -0,0 +1,84 @@ +(module + (type $0 (func)) + (memory $0 0) + (func $0 (; 0 ;) (type $0) + (if + (i32.const 1) + (unreachable) + ) + ) + (func $1 (; 1 ;) (type $0) + (if + (i32.const 1) + (unreachable) + (unreachable) + ) + ) + (func $2 (; 2 ;) (type $0) + (if + (i32.const 1) + (unreachable) + ) + ) + (func $3 (; 3 ;) (type $0) + (if + (i32.const 1) + (unreachable) + (unreachable) + ) + ) + (func $4 (; 4 ;) (type $0) + (nop) + (if + (i32.const 1) + (unreachable) + ) + (nop) + ) + (func $5 (; 5 ;) (type $0) + (nop) + (if + (i32.const 1) + (unreachable) + (unreachable) + ) + ) + (func $6 (; 6 ;) (type $0) + (nop) + (block $label$1 + (if + (i32.const 1) + (unreachable) + ) + ) + (nop) + ) + (func $7 (; 7 ;) (type $0) + (nop) + (block $label$1 + (if + (i32.const 1) + (unreachable) + (unreachable) + ) + ) + ) + (func $8 (; 8 ;) (type $0) + (nop) + (block $label$1 + (nop) + (br $label$1) + ) + (nop) + ) + (func $9 (; 9 ;) (type $0) + (block $label$1 + (nop) + (block $label$2 + (nop) + (br $label$1) + ) + ) + ) +) + diff --git a/src/binaryen/test/unreachable-import_wasm-only.asm.js b/src/binaryen/test/unreachable-import_wasm-only.asm.js new file mode 100644 index 0000000000..9df74a192e --- /dev/null +++ b/src/binaryen/test/unreachable-import_wasm-only.asm.js @@ -0,0 +1,107 @@ +function asm(global, env, buffer) { + "use asm"; + + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + + var DYNAMICTOP_PTR=env.DYNAMICTOP_PTR|0; + var tempDoublePtr=env.tempDoublePtr|0; + var ABORT=env.ABORT|0; + var STACKTOP=env.STACKTOP|0; + var STACK_MAX=env.STACK_MAX|0; + var ___async=env.___async|0; + var ___async_unwind=env.___async_unwind|0; + var ___async_retval=env.___async_retval|0; + var ___async_cur_frame=env.___async_cur_frame|0; + + var __THREW__ = 0; + var threwValue = 0; + var setjmpId = 0; + var undef = 0; + var nan = global.NaN, inf = global.Infinity; + var tempInt = 0, tempBigInt = 0, tempBigIntP = 0, tempBigIntS = 0, tempBigIntR = 0.0, tempBigIntI = 0, tempBigIntD = 0, tempValue = 0, tempDouble = 0.0; + var tempRet0 = 0; + + var Math_floor=global.Math.floor; + var Math_abs=global.Math.abs; + var Math_sqrt=global.Math.sqrt; + var Math_pow=global.Math.pow; + var Math_cos=global.Math.cos; + var Math_sin=global.Math.sin; + var Math_tan=global.Math.tan; + var Math_acos=global.Math.acos; + var Math_asin=global.Math.asin; + var Math_atan=global.Math.atan; + var Math_atan2=global.Math.atan2; + var Math_exp=global.Math.exp; + var Math_log=global.Math.log; + var Math_ceil=global.Math.ceil; + var Math_imul=global.Math.imul; + var Math_min=global.Math.min; + var Math_max=global.Math.max; + var Math_clz32=global.Math.clz32; + var Math_fround=global.Math.fround; + var abort=env.abort; + var assert=env.assert; + var enlargeMemory=env.enlargeMemory; + var getTotalMemory=env.getTotalMemory; + var abortOnCannotGrowMemory=env.abortOnCannotGrowMemory; + var invoke_iiii=env.invoke_iiii; + var invoke_viiiii=env.invoke_viiiii; + var invoke_vi=env.invoke_vi; + var invoke_ii=env.invoke_ii; + var invoke_v=env.invoke_v; + var invoke_viiiiii=env.invoke_viiiiii; + var invoke_viiii=env.invoke_viiii; + var _pthread_cleanup_pop=env._pthread_cleanup_pop; + var _pthread_key_create=env._pthread_key_create; + var ___syscall6=env.___syscall6; + var ___gxx_personality_v0=env.___gxx_personality_v0; + var ___assert_fail=env.___assert_fail; + var ___cxa_allocate_exception=env.___cxa_allocate_exception; + var __ZSt18uncaught_exceptionv=env.__ZSt18uncaught_exceptionv; + var ___setErrNo=env.___setErrNo; + var ___cxa_begin_catch=env.___cxa_begin_catch; + var _emscripten_memcpy_big=env._emscripten_memcpy_big; + var ___resumeException=env.___resumeException; + var ___cxa_find_matching_catch=env.___cxa_find_matching_catch; + var _pthread_getspecific=env._pthread_getspecific; + var _pthread_once=env._pthread_once; + var ___syscall54=env.___syscall54; + var ___unlock=env.___unlock; + var _pthread_setspecific=env._pthread_setspecific; + var ___cxa_throw=env.___cxa_throw; + var ___lock=env.___lock; + var _abort=env._abort; + var _pthread_cleanup_push=env._pthread_cleanup_push; + var ___syscall140=env.___syscall140; + var ___cxa_pure_virtual=env.___cxa_pure_virtual; + var ___syscall146=env.___syscall146; + var tempFloat = Math_fround(0); + const f0 = Math_fround(0); + +function __ZN10WasmAssertC2Ev__async_cb($0) { + $0 = $0|0; + switch (0) { + case 0: { + store4(12,26); + return; + break; + } + default: { + $0 = (___cxa_allocate_exception(4)|0); + store4($0,1); + ___cxa_throw(($0|0),(1280|0),(0|0)); + } + } +} + + return { __ZN10WasmAssertC2Ev__async_cb: __ZN10WasmAssertC2Ev__async_cb }; +} + diff --git a/src/binaryen/test/unreachable-import_wasm-only.fromasm b/src/binaryen/test/unreachable-import_wasm-only.fromasm new file mode 100644 index 0000000000..18c4c40217 --- /dev/null +++ b/src/binaryen/test/unreachable-import_wasm-only.fromasm @@ -0,0 +1,14 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (data (get_global $memoryBase) "unreachable-import_wasm-only.asm.js") + (export "__ZN10WasmAssertC2Ev__async_cb" (func $__ZN10WasmAssertC2Ev__async_cb)) + (func $__ZN10WasmAssertC2Ev__async_cb (; 0 ;) (param $0 i32) + (i32.store + (i32.const 12) + (i32.const 26) + ) + ) +) diff --git a/src/binaryen/test/unreachable-import_wasm-only.fromasm.clamp b/src/binaryen/test/unreachable-import_wasm-only.fromasm.clamp new file mode 100644 index 0000000000..18c4c40217 --- /dev/null +++ b/src/binaryen/test/unreachable-import_wasm-only.fromasm.clamp @@ -0,0 +1,14 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (data (get_global $memoryBase) "unreachable-import_wasm-only.asm.js") + (export "__ZN10WasmAssertC2Ev__async_cb" (func $__ZN10WasmAssertC2Ev__async_cb)) + (func $__ZN10WasmAssertC2Ev__async_cb (; 0 ;) (param $0 i32) + (i32.store + (i32.const 12) + (i32.const 26) + ) + ) +) diff --git a/src/binaryen/test/unreachable-import_wasm-only.fromasm.clamp.no-opts b/src/binaryen/test/unreachable-import_wasm-only.fromasm.clamp.no-opts new file mode 100644 index 0000000000..3160ad3703 --- /dev/null +++ b/src/binaryen/test/unreachable-import_wasm-only.fromasm.clamp.no-opts @@ -0,0 +1,87 @@ +(module + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$viii (func (param i32 i32 i32))) + (import "env" "DYNAMICTOP_PTR" (global $DYNAMICTOP_PTR$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "ABORT" (global $ABORT$asm2wasm$import i32)) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "___async" (global $___async$asm2wasm$import i32)) + (import "env" "___async_unwind" (global $___async_unwind$asm2wasm$import i32)) + (import "env" "___async_retval" (global $___async_retval$asm2wasm$import i32)) + (import "env" "___async_cur_frame" (global $___async_cur_frame$asm2wasm$import i32)) + (import "global" "NaN" (global $nan$asm2wasm$import f64)) + (import "global" "Infinity" (global $inf$asm2wasm$import f64)) + (import "env" "___cxa_allocate_exception" (func $___cxa_allocate_exception (param i32) (result i32))) + (import "env" "___cxa_throw" (func $___cxa_throw (param i32 i32 i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $DYNAMICTOP_PTR (mut i32) (get_global $DYNAMICTOP_PTR$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $ABORT (mut i32) (get_global $ABORT$asm2wasm$import)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $___async (mut i32) (get_global $___async$asm2wasm$import)) + (global $___async_unwind (mut i32) (get_global $___async_unwind$asm2wasm$import)) + (global $___async_retval (mut i32) (get_global $___async_retval$asm2wasm$import)) + (global $___async_cur_frame (mut i32) (get_global $___async_cur_frame$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $setjmpId (mut i32) (i32.const 0)) + (global $undef (mut i32) (i32.const 0)) + (global $nan (mut f64) (get_global $nan$asm2wasm$import)) + (global $inf (mut f64) (get_global $inf$asm2wasm$import)) + (global $tempInt (mut i32) (i32.const 0)) + (global $tempBigInt (mut i32) (i32.const 0)) + (global $tempBigIntP (mut i32) (i32.const 0)) + (global $tempBigIntS (mut i32) (i32.const 0)) + (global $tempBigIntR (mut f64) (f64.const 0)) + (global $tempBigIntI (mut i32) (i32.const 0)) + (global $tempBigIntD (mut i32) (i32.const 0)) + (global $tempValue (mut i32) (i32.const 0)) + (global $tempDouble (mut f64) (f64.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (global $tempFloat (mut f32) (f32.const 0)) + (global $f0 (mut f32) (f32.const 0)) + (export "__ZN10WasmAssertC2Ev__async_cb" (func $__ZN10WasmAssertC2Ev__async_cb)) + (func $__ZN10WasmAssertC2Ev__async_cb (; 2 ;) (param $$0 i32) + (block $switch + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default + (i32.sub + (i32.const 0) + (i32.const 0) + ) + ) + ) + (block + (i32.store + (i32.const 12) + (i32.const 26) + ) + (return) + (br $switch) + ) + ) + (block + (set_local $$0 + (call $___cxa_allocate_exception + (i32.const 4) + ) + ) + (i32.store + (get_local $$0) + (i32.const 1) + ) + (call $___cxa_throw + (get_local $$0) + (i32.const 1280) + (i32.const 0) + ) + ) + ) + ) +) diff --git a/src/binaryen/test/unreachable-import_wasm-only.fromasm.imprecise b/src/binaryen/test/unreachable-import_wasm-only.fromasm.imprecise new file mode 100644 index 0000000000..daa064b34b --- /dev/null +++ b/src/binaryen/test/unreachable-import_wasm-only.fromasm.imprecise @@ -0,0 +1,13 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (export "__ZN10WasmAssertC2Ev__async_cb" (func $__ZN10WasmAssertC2Ev__async_cb)) + (func $__ZN10WasmAssertC2Ev__async_cb (; 0 ;) (param $0 i32) + (i32.store + (i32.const 12) + (i32.const 26) + ) + ) +) diff --git a/src/binaryen/test/unreachable-import_wasm-only.fromasm.imprecise.no-opts b/src/binaryen/test/unreachable-import_wasm-only.fromasm.imprecise.no-opts new file mode 100644 index 0000000000..3160ad3703 --- /dev/null +++ b/src/binaryen/test/unreachable-import_wasm-only.fromasm.imprecise.no-opts @@ -0,0 +1,87 @@ +(module + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$viii (func (param i32 i32 i32))) + (import "env" "DYNAMICTOP_PTR" (global $DYNAMICTOP_PTR$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "ABORT" (global $ABORT$asm2wasm$import i32)) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "___async" (global $___async$asm2wasm$import i32)) + (import "env" "___async_unwind" (global $___async_unwind$asm2wasm$import i32)) + (import "env" "___async_retval" (global $___async_retval$asm2wasm$import i32)) + (import "env" "___async_cur_frame" (global $___async_cur_frame$asm2wasm$import i32)) + (import "global" "NaN" (global $nan$asm2wasm$import f64)) + (import "global" "Infinity" (global $inf$asm2wasm$import f64)) + (import "env" "___cxa_allocate_exception" (func $___cxa_allocate_exception (param i32) (result i32))) + (import "env" "___cxa_throw" (func $___cxa_throw (param i32 i32 i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $DYNAMICTOP_PTR (mut i32) (get_global $DYNAMICTOP_PTR$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $ABORT (mut i32) (get_global $ABORT$asm2wasm$import)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $___async (mut i32) (get_global $___async$asm2wasm$import)) + (global $___async_unwind (mut i32) (get_global $___async_unwind$asm2wasm$import)) + (global $___async_retval (mut i32) (get_global $___async_retval$asm2wasm$import)) + (global $___async_cur_frame (mut i32) (get_global $___async_cur_frame$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $setjmpId (mut i32) (i32.const 0)) + (global $undef (mut i32) (i32.const 0)) + (global $nan (mut f64) (get_global $nan$asm2wasm$import)) + (global $inf (mut f64) (get_global $inf$asm2wasm$import)) + (global $tempInt (mut i32) (i32.const 0)) + (global $tempBigInt (mut i32) (i32.const 0)) + (global $tempBigIntP (mut i32) (i32.const 0)) + (global $tempBigIntS (mut i32) (i32.const 0)) + (global $tempBigIntR (mut f64) (f64.const 0)) + (global $tempBigIntI (mut i32) (i32.const 0)) + (global $tempBigIntD (mut i32) (i32.const 0)) + (global $tempValue (mut i32) (i32.const 0)) + (global $tempDouble (mut f64) (f64.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (global $tempFloat (mut f32) (f32.const 0)) + (global $f0 (mut f32) (f32.const 0)) + (export "__ZN10WasmAssertC2Ev__async_cb" (func $__ZN10WasmAssertC2Ev__async_cb)) + (func $__ZN10WasmAssertC2Ev__async_cb (; 2 ;) (param $$0 i32) + (block $switch + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default + (i32.sub + (i32.const 0) + (i32.const 0) + ) + ) + ) + (block + (i32.store + (i32.const 12) + (i32.const 26) + ) + (return) + (br $switch) + ) + ) + (block + (set_local $$0 + (call $___cxa_allocate_exception + (i32.const 4) + ) + ) + (i32.store + (get_local $$0) + (i32.const 1) + ) + (call $___cxa_throw + (get_local $$0) + (i32.const 1280) + (i32.const 0) + ) + ) + ) + ) +) diff --git a/src/binaryen/test/unreachable-import_wasm-only.fromasm.no-opts b/src/binaryen/test/unreachable-import_wasm-only.fromasm.no-opts new file mode 100644 index 0000000000..3160ad3703 --- /dev/null +++ b/src/binaryen/test/unreachable-import_wasm-only.fromasm.no-opts @@ -0,0 +1,87 @@ +(module + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$viii (func (param i32 i32 i32))) + (import "env" "DYNAMICTOP_PTR" (global $DYNAMICTOP_PTR$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "ABORT" (global $ABORT$asm2wasm$import i32)) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "___async" (global $___async$asm2wasm$import i32)) + (import "env" "___async_unwind" (global $___async_unwind$asm2wasm$import i32)) + (import "env" "___async_retval" (global $___async_retval$asm2wasm$import i32)) + (import "env" "___async_cur_frame" (global $___async_cur_frame$asm2wasm$import i32)) + (import "global" "NaN" (global $nan$asm2wasm$import f64)) + (import "global" "Infinity" (global $inf$asm2wasm$import f64)) + (import "env" "___cxa_allocate_exception" (func $___cxa_allocate_exception (param i32) (result i32))) + (import "env" "___cxa_throw" (func $___cxa_throw (param i32 i32 i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $DYNAMICTOP_PTR (mut i32) (get_global $DYNAMICTOP_PTR$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $ABORT (mut i32) (get_global $ABORT$asm2wasm$import)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $___async (mut i32) (get_global $___async$asm2wasm$import)) + (global $___async_unwind (mut i32) (get_global $___async_unwind$asm2wasm$import)) + (global $___async_retval (mut i32) (get_global $___async_retval$asm2wasm$import)) + (global $___async_cur_frame (mut i32) (get_global $___async_cur_frame$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $setjmpId (mut i32) (i32.const 0)) + (global $undef (mut i32) (i32.const 0)) + (global $nan (mut f64) (get_global $nan$asm2wasm$import)) + (global $inf (mut f64) (get_global $inf$asm2wasm$import)) + (global $tempInt (mut i32) (i32.const 0)) + (global $tempBigInt (mut i32) (i32.const 0)) + (global $tempBigIntP (mut i32) (i32.const 0)) + (global $tempBigIntS (mut i32) (i32.const 0)) + (global $tempBigIntR (mut f64) (f64.const 0)) + (global $tempBigIntI (mut i32) (i32.const 0)) + (global $tempBigIntD (mut i32) (i32.const 0)) + (global $tempValue (mut i32) (i32.const 0)) + (global $tempDouble (mut f64) (f64.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (global $tempFloat (mut f32) (f32.const 0)) + (global $f0 (mut f32) (f32.const 0)) + (export "__ZN10WasmAssertC2Ev__async_cb" (func $__ZN10WasmAssertC2Ev__async_cb)) + (func $__ZN10WasmAssertC2Ev__async_cb (; 2 ;) (param $$0 i32) + (block $switch + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default + (i32.sub + (i32.const 0) + (i32.const 0) + ) + ) + ) + (block + (i32.store + (i32.const 12) + (i32.const 26) + ) + (return) + (br $switch) + ) + ) + (block + (set_local $$0 + (call $___cxa_allocate_exception + (i32.const 4) + ) + ) + (i32.store + (get_local $$0) + (i32.const 1) + ) + (call $___cxa_throw + (get_local $$0) + (i32.const 1280) + (i32.const 0) + ) + ) + ) + ) +) diff --git a/src/binaryen/test/unreachable-pops.wasm b/src/binaryen/test/unreachable-pops.wasm new file mode 100644 index 0000000000000000000000000000000000000000..f3e0ae11c22b32571a2d6e2281288399d9982925 GIT binary patch literal 30 lcmZQbEY4+QU|?WmWlUgTtY>CoWZ>dtWM^QiXUO8_1^_rg155w_ literal 0 HcmV?d00001 diff --git a/src/binaryen/test/unreachable-pops.wasm.fromBinary b/src/binaryen/test/unreachable-pops.wasm.fromBinary new file mode 100644 index 0000000000..fa92d3e228 --- /dev/null +++ b/src/binaryen/test/unreachable-pops.wasm.fromBinary @@ -0,0 +1,10 @@ +(module + (type $0 (func (result i32))) + (memory $0 0) + (func $0 (; 0 ;) (type $0) (result i32) + (block $label$1 (result i32) + (unreachable) + ) + ) +) + diff --git a/src/binaryen/test/untaken-br_if.wast b/src/binaryen/test/untaken-br_if.wast new file mode 100644 index 0000000000..92ed74c959 --- /dev/null +++ b/src/binaryen/test/untaken-br_if.wast @@ -0,0 +1,14 @@ +(module + (func $binaryify-untaken-br_if (result f32) + (if (result f32) + (i32.const 1) + (unreachable) + (block $label$1 (result f32) + (br_if $label$1 + (f32.const 1) + (unreachable) + ) + ) + ) + ) +) diff --git a/src/binaryen/test/untaken-br_if.wast.from-wast b/src/binaryen/test/untaken-br_if.wast.from-wast new file mode 100644 index 0000000000..2fd435aa2d --- /dev/null +++ b/src/binaryen/test/untaken-br_if.wast.from-wast @@ -0,0 +1,16 @@ +(module + (type $0 (func (result f32))) + (memory $0 0) + (func $binaryify-untaken-br_if (; 0 ;) (type $0) (result f32) + (if (result f32) + (i32.const 1) + (unreachable) + (block $label$1 (result f32) + (br_if $label$1 + (f32.const 1) + (unreachable) + ) + ) + ) + ) +) diff --git a/src/binaryen/test/untaken-br_if.wast.fromBinary b/src/binaryen/test/untaken-br_if.wast.fromBinary new file mode 100644 index 0000000000..80fa5c66e9 --- /dev/null +++ b/src/binaryen/test/untaken-br_if.wast.fromBinary @@ -0,0 +1,17 @@ +(module + (type $0 (func (result f32))) + (memory $0 0) + (func $binaryify-untaken-br_if (; 0 ;) (type $0) (result f32) + (if (result f32) + (i32.const 1) + (unreachable) + (block $label$3 (result f32) + (drop + (f32.const 1) + ) + (unreachable) + ) + ) + ) +) + diff --git a/src/binaryen/test/untaken-br_if.wast.fromBinary.noDebugInfo b/src/binaryen/test/untaken-br_if.wast.fromBinary.noDebugInfo new file mode 100644 index 0000000000..32f6b25d04 --- /dev/null +++ b/src/binaryen/test/untaken-br_if.wast.fromBinary.noDebugInfo @@ -0,0 +1,17 @@ +(module + (type $0 (func (result f32))) + (memory $0 0) + (func $0 (; 0 ;) (type $0) (result f32) + (if (result f32) + (i32.const 1) + (unreachable) + (block $label$3 (result f32) + (drop + (f32.const 1) + ) + (unreachable) + ) + ) + ) +) + diff --git a/src/binaryen/test/use-import-and-drop.asm.js b/src/binaryen/test/use-import-and-drop.asm.js new file mode 100644 index 0000000000..57688ced9c --- /dev/null +++ b/src/binaryen/test/use-import-and-drop.asm.js @@ -0,0 +1,19 @@ +Module["asm"] = (function(global, env, buffer) { + "use asm"; + var setTempRet0=env.setTempRet0; + var Math_imul = global.Math.imul; + function test1() { + var $b$1 = 0, $x_sroa_0_0_extract_trunc = 0, $2 = 0, $1$1 = 0, $1$0 = 0; + // Here we use setTempRet0 as if it returns i32, and later as if no return value. + // We should *not* expand the return type to f64, as this is not an overloaded return value + return (setTempRet0((((Math_imul($b$1, $x_sroa_0_0_extract_trunc) | 0) + $2 | 0) + $1$1 | $1$1 & 0) | 0), 0 | $1$0 & -1) | 0; + } + function test2() { + setTempRet0(10); + } + return { + }; +}); + + + diff --git a/src/binaryen/test/use-import-and-drop.fromasm b/src/binaryen/test/use-import-and-drop.fromasm new file mode 100644 index 0000000000..5b42aff4aa --- /dev/null +++ b/src/binaryen/test/use-import-and-drop.fromasm @@ -0,0 +1,7 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (data (get_global $memoryBase) "use-import-and-drop.asm.js") +) diff --git a/src/binaryen/test/use-import-and-drop.fromasm.clamp b/src/binaryen/test/use-import-and-drop.fromasm.clamp new file mode 100644 index 0000000000..5b42aff4aa --- /dev/null +++ b/src/binaryen/test/use-import-and-drop.fromasm.clamp @@ -0,0 +1,7 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (data (get_global $memoryBase) "use-import-and-drop.asm.js") +) diff --git a/src/binaryen/test/use-import-and-drop.fromasm.clamp.no-opts b/src/binaryen/test/use-import-and-drop.fromasm.clamp.no-opts new file mode 100644 index 0000000000..debcadf00e --- /dev/null +++ b/src/binaryen/test/use-import-and-drop.fromasm.clamp.no-opts @@ -0,0 +1,49 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (import "env" "setTempRet0" (func $setTempRet0 (param i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (func $test1 (; 1 ;) (result i32) + (local $$b$1 i32) + (local $$x_sroa_0_0_extract_trunc i32) + (local $$2 i32) + (local $$1$1 i32) + (local $$1$0 i32) + (return + (block (result i32) + (call $setTempRet0 + (i32.or + (i32.add + (i32.add + (i32.mul + (get_local $$b$1) + (get_local $$x_sroa_0_0_extract_trunc) + ) + (get_local $$2) + ) + (get_local $$1$1) + ) + (i32.and + (get_local $$1$1) + (i32.const 0) + ) + ) + ) + (i32.or + (i32.const 0) + (i32.and + (get_local $$1$0) + (i32.const -1) + ) + ) + ) + ) + ) + (func $test2 (; 2 ;) + (call $setTempRet0 + (i32.const 10) + ) + ) +) diff --git a/src/binaryen/test/use-import-and-drop.fromasm.imprecise b/src/binaryen/test/use-import-and-drop.fromasm.imprecise new file mode 100644 index 0000000000..ddb433043e --- /dev/null +++ b/src/binaryen/test/use-import-and-drop.fromasm.imprecise @@ -0,0 +1,6 @@ +(module + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) +) diff --git a/src/binaryen/test/use-import-and-drop.fromasm.imprecise.no-opts b/src/binaryen/test/use-import-and-drop.fromasm.imprecise.no-opts new file mode 100644 index 0000000000..debcadf00e --- /dev/null +++ b/src/binaryen/test/use-import-and-drop.fromasm.imprecise.no-opts @@ -0,0 +1,49 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (import "env" "setTempRet0" (func $setTempRet0 (param i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (func $test1 (; 1 ;) (result i32) + (local $$b$1 i32) + (local $$x_sroa_0_0_extract_trunc i32) + (local $$2 i32) + (local $$1$1 i32) + (local $$1$0 i32) + (return + (block (result i32) + (call $setTempRet0 + (i32.or + (i32.add + (i32.add + (i32.mul + (get_local $$b$1) + (get_local $$x_sroa_0_0_extract_trunc) + ) + (get_local $$2) + ) + (get_local $$1$1) + ) + (i32.and + (get_local $$1$1) + (i32.const 0) + ) + ) + ) + (i32.or + (i32.const 0) + (i32.and + (get_local $$1$0) + (i32.const -1) + ) + ) + ) + ) + ) + (func $test2 (; 2 ;) + (call $setTempRet0 + (i32.const 10) + ) + ) +) diff --git a/src/binaryen/test/use-import-and-drop.fromasm.no-opts b/src/binaryen/test/use-import-and-drop.fromasm.no-opts new file mode 100644 index 0000000000..debcadf00e --- /dev/null +++ b/src/binaryen/test/use-import-and-drop.fromasm.no-opts @@ -0,0 +1,49 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (import "env" "setTempRet0" (func $setTempRet0 (param i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 0 0 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (func $test1 (; 1 ;) (result i32) + (local $$b$1 i32) + (local $$x_sroa_0_0_extract_trunc i32) + (local $$2 i32) + (local $$1$1 i32) + (local $$1$0 i32) + (return + (block (result i32) + (call $setTempRet0 + (i32.or + (i32.add + (i32.add + (i32.mul + (get_local $$b$1) + (get_local $$x_sroa_0_0_extract_trunc) + ) + (get_local $$2) + ) + (get_local $$1$1) + ) + (i32.and + (get_local $$1$1) + (i32.const 0) + ) + ) + ) + (i32.or + (i32.const 0) + (i32.and + (get_local $$1$0) + (i32.const -1) + ) + ) + ) + ) + ) + (func $test2 (; 2 ;) + (call $setTempRet0 + (i32.const 10) + ) + ) +) diff --git a/src/binaryen/test/validator/invalid_export.wast b/src/binaryen/test/validator/invalid_export.wast new file mode 100644 index 0000000000..e10e22a390 --- /dev/null +++ b/src/binaryen/test/validator/invalid_export.wast @@ -0,0 +1 @@ +(module (func $export64 (result i64) (i64.const 1)) (export "a" $export64)) \ No newline at end of file diff --git a/src/binaryen/test/validator/invalid_import.wast b/src/binaryen/test/validator/invalid_import.wast new file mode 100644 index 0000000000..e1b05b6171 --- /dev/null +++ b/src/binaryen/test/validator/invalid_import.wast @@ -0,0 +1 @@ +(module (import $bad "test" "bad" (param i64))) \ No newline at end of file diff --git a/src/binaryen/test/validator/invalid_return.wast b/src/binaryen/test/validator/invalid_return.wast new file mode 100644 index 0000000000..02ce049d6b --- /dev/null +++ b/src/binaryen/test/validator/invalid_return.wast @@ -0,0 +1,2 @@ +(module + (func $foo (result i32) (i64.const 1))) \ No newline at end of file diff --git a/src/binaryen/test/wasm-only.asm.js b/src/binaryen/test/wasm-only.asm.js new file mode 100644 index 0000000000..0013a30c33 --- /dev/null +++ b/src/binaryen/test/wasm-only.asm.js @@ -0,0 +1,482 @@ +// +// Test wasm-only builds. In this case, fastcomp emits code that is +// not asm.js, it will only ever run as wasm, and contains special intrinsics for +// asm2wasm that map LLVM IR into i64s. +// + +function asm(global, env, buffer) { + "use asm"; + + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + + var STACKTOP = env.STACKTOP | 0; + + var fround = global.Math.fround; + var Math_imul = global.Math.imul; + + var illegalImport = env.illegalImport; + var illegalImportResult = env.illegalImportResult; + + var _fabsf = env._fabsf; + var do_i64 = env.do_i64; + var abort = env.abort; + + function loads() { + var i = 0, f = fround(0), d = +0; + i = load1(100); + i = load1(101, 0); + i = load2(102); + i = load2(103, 0); + i = load2(104, 1); + i = load2(105, 2); + i = load4(106); + i = load4(107, 0); + i = load4(108, 1); + i = load4(109, 2); + i = load4(110, 4); + f = loadf(111); + f = loadf(112, 0); + f = loadf(113, 1); + f = loadf(114, 2); + f = loadf(115, 4); + d = loadd(116); + d = loadd(117, 0); + d = loadd(118, 1); + d = loadd(119, 2); + d = loadd(120, 4); + d = loadd(121, 8); + } + + function stores() { + var i = 0, f = fround(0), d = +0; + store1(100, i); + store1(101, i, 0); + store2(102, i); + store2(103, i, 0); + store2(104, i, 1); + store2(105, i, 2); + store4(106, i); + store4(107, i, 0); + store4(108, i, 1); + store4(109, i, 2); + store4(110, i, 4); + storef(111, f); + storef(112, f, 0); + storef(113, f, 1); + storef(114, f, 2); + storef(115, f, 4); + stored(116, d); + stored(117, d, 0); + stored(118, d, 1); + stored(119, d, 2); + stored(120, d, 4); + stored(121, d, 8); + } + + function test() { + var i = 0, j = i64(), f = fround(0), f1 = fround(0), f2 = fround(0), d1 = +0, d2 = +0; + // bitcasts + i = i32_bc2i(f); + f = i32_bc2f(i); + i = i32_cttz(i); + i = i32_ctpop(i); + j = i64_ctpop(j); + f1 = f32_copysign(f1, f2); + d1 = f64_copysign(d1, d2); + } + + function test64() { + var x = i64(), y = i64(), z = 0; // define i64 variables using special intrinsic + var int32 = 0, float32 = fround(0), float64 = +0; + x = i64_const(100, 0); // i64 constant + y = i64_const(17, 30); + x = i64_add(x, y); // binaries + x = i64_sub(x, y); + x = i64_mul(x, y); + x = i64_udiv(x, y); + x = i64_sdiv(x, y); + x = i64_urem(x, y); + x = i64_srem(x, y); + x = i64_and(x, y); + x = i64_or(x, y); + x = i64_xor(x, y); + x = i64_shl(x, y); + x = i64_ashr(x, y); + x = i64_lshr(x, y); + x = load8(120, 0); // load and store + x = load8(120); + x = load8(120, 2); + x = load8(120, 4); + x = load8(120, 8); + store8(120, x, 0); + store8(120, x); + store8(120, x, 2); + store8(120, x, 4); + store8(120, x, 8); + // comps + z = i64_eq(x, y); + z = i64_ne(x, y); + z = i64_ule(x, y); + z = i64_sle(x, y); + z = i64_uge(x, y); + z = i64_sge(x, y); + z = i64_ult(x, y); + z = i64_slt(x, y); + z = i64_ugt(x, y); + z = i64_sgt(x, y); + // convs + int32 = i64_trunc(x); + x = i64_sext(int32); + x = i64_zext(int32); + float32 = i64_s2f(x); + float64 = i64_s2d(x); + float32 = i64_u2f(x); + float64 = i64_u2d(x); + x = i64_f2s(float32); + x = i64_d2s(float64); + x = i64_f2u(float32); + x = i64_d2u(float64); + // bitcasts + x = i64_bc2i(float64); + float64 = i64_bc2d(x); + // intrinsics + x = i64_ctlz(y); + y = i64_cttz(x); + } + function imports() { + illegalImport(-3.13159, i64_const(11, 22), -33); // this call must be legalized + return i64(illegalImportResult()); + } + function arg(x) { // illegal param, but not exported + x = i64(x); + store8(100, x, 0); + arg(i64(x)); // "coercion"/"cast" + } + function illegalParam(a, x, c) { + a = 0; + x = i64(x); + b = +0; + store8(100, x, 0); + illegalParam(0, i64(x), 12.34); // "coercion"/"cast" + } + function result() { // illegal result, but not exported + return i64_const(1, 2); + } + function illegalResult() { // illegal result, exported + return i64_const(1, 2); + } + function call1(x) { + x = i64(x); + var y = i64(); + y = i64(call1(x)); + return i64(y); // return i64 with a "cast" + } + function call2(x) { + x = i64(x); + i64(call2(i64(call2(x)))); + return i64_const(591726473, 57073); // return an i64 const + } + function returnCastConst() { + return i64(0); + } + function ifValue64($4, $6) { + $4 = i64($4); + $6 = i64($6); + var $$0 = i64(), $9 = i64(), $10 = i64(); + if ($6) { + $9 = i64(call2($4)); + $$0 = $9; + } else { + $10 = i64(call2($4)); + $$0 = $10; + } + return i64($$0); + } + function ifValue32($4, $6) { + $4 = $4 | 0; + $6 = $6 | 0; + var $$0 = 0, $9 = 0, $10 = 0; + if ($6) { + $9 = ifValue32($4 | 0, $6 | 0) | 0; + $$0 = $9; + } else { + $10 = ifValue32($4 | 0, $6 | 0) | 0; + $$0 = $10; + } + return $$0 | 0; + } + function switch64($a444) { + $a444 = i64($a444); + var $waka = 0; + switch (i64($a444)) { + case i64_const(7,10): { + $waka = 11000; + break; + } + case i64_const(5,10): { + $waka = 10; + break; + } + default: { + $waka = 1; + } + } + return $waka | 0; + } + function unreachable_leftovers($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + var label = 0; + L1: do { + if ($1) { + label = 10; + } else { + if ($2) { + break L1; + return; + } + store4($0,-2); + return; + } + } while(0); + if ((label|0) == 10) { + store4($0,-1); + } + return; + } + function switch64TOOMUCH($a444) { + $a444 = i64($a444); + var $waka = 0; + switch (i64($a444)) { + case i64_const(0,1073741824): // spread is huge here, we should not make a jump table! + case i64_const(0,2147483648): { + return 40; + } + default: { + $waka = 1; + } + } + switch (100) { + case 107374182: // similar, but 32-bit + case 214748364: { + return 41; + } + default: { + $waka = 1001; + } + } + // no defaults + switch (i64($a444)) { + case i64_const(0,1073741824): // spread is huge here, we should not make a jump table! + case i64_const(0,2147483648): { + return 42; + } + } + switch (100) { + case 107374182: // similar, but 32-bit + case 214748364: { + return 43; + } + } + return 44; + } + function _memchr($src,$c,$n) { + $src = $src|0; + $c = $c|0; + $n = $n|0; + var $0 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $and = 0, $and15 = 0, $and16 = 0, $and39 = 0, $cmp = 0, $cmp11 = 0, $cmp1132 = 0, $cmp28 = 0, $cmp8 = 0, $cond = 0, $conv1 = 0, $dec = 0; + var $dec34 = 0, $incdec$ptr = 0, $incdec$ptr21 = 0, $incdec$ptr33 = 0, $lnot = 0, $mul = 0, $n$addr$0$lcssa = 0, $n$addr$0$lcssa52 = 0, $n$addr$043 = 0, $n$addr$1$lcssa = 0, $n$addr$133 = 0, $n$addr$227 = 0, $n$addr$3 = 0, $neg = 0, $or$cond = 0, $or$cond42 = 0, $s$0$lcssa = 0, $s$0$lcssa53 = 0, $s$044 = 0, $s$128 = 0; + var $s$2 = 0, $sub = 0, $sub22 = 0, $tobool = 0, $tobool2 = 0, $tobool2$lcssa = 0, $tobool241 = 0, $tobool25 = 0, $tobool2526 = 0, $tobool36 = 0, $tobool40 = 0, $w$0$lcssa = 0, $w$034 = 0, $xor = 0, label = 0, sp = 0; + sp = STACKTOP; + $conv1 = $c & 255; + $0 = $src; + $and39 = $0 & 3; + $tobool40 = ($and39|0)!=(0); + $tobool241 = ($n|0)!=(0); + $or$cond42 = $tobool241 & $tobool40; + L1: do { + if ($or$cond42) { + $1 = $c&255; + $n$addr$043 = $n;$s$044 = $src; + while(1) { + $2 = load1($s$044); + $cmp = ($2<<24>>24)==($1<<24>>24); + if ($cmp) { + $n$addr$0$lcssa52 = $n$addr$043;$s$0$lcssa53 = $s$044; + label = 6; + break L1; + } + $incdec$ptr = ((($s$044)) + 1|0); + $dec = (($n$addr$043) + -1)|0; + $3 = $incdec$ptr; + $and = $3 & 3; + $tobool = ($and|0)!=(0); + $tobool2 = ($dec|0)!=(0); + $or$cond = $tobool2 & $tobool; + if ($or$cond) { + $n$addr$043 = $dec;$s$044 = $incdec$ptr; + } else { + $n$addr$0$lcssa = $dec;$s$0$lcssa = $incdec$ptr;$tobool2$lcssa = $tobool2; + label = 5; + break; + } + } + } else { + $n$addr$0$lcssa = $n;$s$0$lcssa = $src;$tobool2$lcssa = $tobool241; + label = 5; + } + } while(0); + if ((label|0) == 5) { + if ($tobool2$lcssa) { + $n$addr$0$lcssa52 = $n$addr$0$lcssa;$s$0$lcssa53 = $s$0$lcssa; + label = 6; + } else { + $n$addr$3 = 0;$s$2 = $s$0$lcssa; + } + } + L8: do { + if ((label|0) == 6) { + $4 = load1($s$0$lcssa53); + $5 = $c&255; + $cmp8 = ($4<<24>>24)==($5<<24>>24); + if ($cmp8) { + $n$addr$3 = $n$addr$0$lcssa52;$s$2 = $s$0$lcssa53; + } else { + $mul = Math_imul($conv1, 16843009)|0; + $cmp1132 = ($n$addr$0$lcssa52>>>0)>(3); + L11: do { + if ($cmp1132) { + $n$addr$133 = $n$addr$0$lcssa52;$w$034 = $s$0$lcssa53; + while(1) { + $6 = load4($w$034); + $xor = $6 ^ $mul; + $sub = (($xor) + -16843009)|0; + $neg = $xor & -2139062144; + $and15 = $neg ^ -2139062144; + $and16 = $and15 & $sub; + $lnot = ($and16|0)==(0); + if (!($lnot)) { + break; + } + $incdec$ptr21 = ((($w$034)) + 4|0); + $sub22 = (($n$addr$133) + -4)|0; + $cmp11 = ($sub22>>>0)>(3); + if ($cmp11) { + $n$addr$133 = $sub22;$w$034 = $incdec$ptr21; + } else { + $n$addr$1$lcssa = $sub22;$w$0$lcssa = $incdec$ptr21; + label = 11; + break L11; + } + } + $n$addr$227 = $n$addr$133;$s$128 = $w$034; + } else { + $n$addr$1$lcssa = $n$addr$0$lcssa52;$w$0$lcssa = $s$0$lcssa53; + label = 11; + } + } while(0); + if ((label|0) == 11) { + $tobool2526 = ($n$addr$1$lcssa|0)==(0); + if ($tobool2526) { + $n$addr$3 = 0;$s$2 = $w$0$lcssa; + break; + } else { + $n$addr$227 = $n$addr$1$lcssa;$s$128 = $w$0$lcssa; + } + } + while(1) { + $7 = load1($s$128); + $cmp28 = ($7<<24>>24)==($5<<24>>24); + if ($cmp28) { + $n$addr$3 = $n$addr$227;$s$2 = $s$128; + break L8; + } + $incdec$ptr33 = ((($s$128)) + 1|0); + $dec34 = (($n$addr$227) + -1)|0; + $tobool25 = ($dec34|0)==(0); + if ($tobool25) { + $n$addr$3 = 0;$s$2 = $incdec$ptr33; + break; + } else { + $n$addr$227 = $dec34;$s$128 = $incdec$ptr33; + } + } + } + } + } while(0); + $tobool36 = ($n$addr$3|0)!=(0); + $cond = $tobool36 ? $s$2 : 0; + return ($cond|0); + } + + function switch64_big_condition1($x) { + $x = i64($x); + switch (i64($x)) { + case i64_const(0,2146435072): { + abort(); + break; + } + default: { + return; + } + } + } + function switch64_big_condition2($x) { + $x = i64($x); + switch (i64($x)) { + case i64_const(0,2146435072): { + abort(); + break; + } + } + } + + function keepAlive() { + loads(); + loads(); + stores(); + stores(); + test(); + test(); + i64(imports()); + i64(imports()); + arg(i64(0)); + arg(i64(0)); + i64(call1(i64(0))); + i64(call1(i64(0))); + i64(call2(i64(0))); + i64(call2(i64(0))); + i64(returnCastConst()); + i64(returnCastConst()); + i64(ifValue64(i64(0), i64(0))); + i64(ifValue64(i64(0), i64(0))); + ifValue32(0, 0) | 0; + ifValue32(0, 0) | 0; + switch64(i64(0)) | 0; + switch64(i64(0)) | 0; + unreachable_leftovers(0, 0, 0); + unreachable_leftovers(0, 0, 0); + _memchr(0, 0, 0) | 0; + switch64TOOMUCH(i64(0)) | 0; + switch64_big_condition1(i64(0)); + switch64_big_condition2(i64(0)); + } + + function __emscripten_dceable_type_decls() { // dce-able, but this defines the type of fabsf which has no other use + fround(_fabsf(fround(0.0))); + i64(do_i64()); + } + + var FUNCTION_TABLE_X = [illegalImport, _fabsf, do_i64]; // must stay ok in the table, not legalized, as it will be called internally by the true type + + return { test64: test64, illegalParam : illegalParam, illegalResult: illegalResult, keepAlive: keepAlive }; +} + diff --git a/src/binaryen/test/wasm-only.fromasm b/src/binaryen/test/wasm-only.fromasm new file mode 100644 index 0000000000..8ac681f2bf --- /dev/null +++ b/src/binaryen/test/wasm-only.fromasm @@ -0,0 +1,1137 @@ +(module + (type $FUNCSIG$vdji (func (param f64 i64 i32))) + (type $FUNCSIG$j (func (result i64))) + (type $FUNCSIG$ff (func (param f32) (result f32))) + (type $FUNCSIG$v (func)) + (type $legaltype$illegalImport (func (param f64 i32 i32 i32))) + (type $legaltype$illegalImportResult (func (result i32))) + (type $legaltype$_fabsf (func (param f64) (result f64))) + (type $legaltype$do_i64 (func (result i32))) + (import "env" "illegalImport" (func $illegalImport (param f64 i64 i32))) + (import "env" "illegalImportResult" (func $illegalImportResult (result i64))) + (import "env" "_fabsf" (func $_fabsf (param f32) (result f32))) + (import "env" "do_i64" (func $do_i64 (result i64))) + (import "env" "abort" (func $abort)) + (import "env" "illegalImport" (func $legalimport$illegalImport (param f64 i32 i32 i32))) + (import "env" "illegalImportResult" (func $legalimport$illegalImportResult (result i32))) + (import "env" "_fabsf" (func $legalimport$_fabsf (param f64) (result f64))) + (import "env" "do_i64" (func $legalimport$do_i64 (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 3 3 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $tempRet0 (mut i32) (i32.const 0)) + (elem (get_global $tableBase) $legalfunc$illegalImport $legalfunc$_fabsf $legalfunc$do_i64) + (data (get_global $memoryBase) "wasm-only.asm.js") + (export "test64" (func $test64)) + (export "illegalParam" (func $legalstub$illegalParam)) + (export "illegalResult" (func $legalstub$result)) + (export "keepAlive" (func $keepAlive)) + (func $loads (; 9 ;) + (drop + (i32.load8_s + (i32.const 100) + ) + ) + (drop + (i32.load8_s + (i32.const 101) + ) + ) + (drop + (i32.load16_s + (i32.const 102) + ) + ) + (drop + (i32.load16_s + (i32.const 103) + ) + ) + (drop + (i32.load16_s align=1 + (i32.const 104) + ) + ) + (drop + (i32.load16_s + (i32.const 105) + ) + ) + (drop + (i32.load + (i32.const 106) + ) + ) + (drop + (i32.load + (i32.const 107) + ) + ) + (drop + (i32.load align=1 + (i32.const 108) + ) + ) + (drop + (i32.load align=2 + (i32.const 109) + ) + ) + (drop + (i32.load + (i32.const 110) + ) + ) + (drop + (f32.load + (i32.const 111) + ) + ) + (drop + (f32.load + (i32.const 112) + ) + ) + (drop + (f32.load align=1 + (i32.const 113) + ) + ) + (drop + (f32.load align=2 + (i32.const 114) + ) + ) + (drop + (f32.load + (i32.const 115) + ) + ) + (drop + (f64.load + (i32.const 116) + ) + ) + (drop + (f64.load + (i32.const 117) + ) + ) + (drop + (f64.load align=1 + (i32.const 118) + ) + ) + (drop + (f64.load align=2 + (i32.const 119) + ) + ) + (drop + (f64.load align=4 + (i32.const 120) + ) + ) + (drop + (f64.load + (i32.const 121) + ) + ) + ) + (func $stores (; 10 ;) + (local $0 i32) + (local $1 f64) + (local $2 f32) + (i32.store8 + (i32.const 100) + (get_local $0) + ) + (i32.store8 + (i32.const 101) + (get_local $0) + ) + (i32.store16 + (i32.const 102) + (get_local $0) + ) + (i32.store16 + (i32.const 103) + (get_local $0) + ) + (i32.store16 align=1 + (i32.const 104) + (get_local $0) + ) + (i32.store16 + (i32.const 105) + (get_local $0) + ) + (i32.store + (i32.const 106) + (get_local $0) + ) + (i32.store + (i32.const 107) + (get_local $0) + ) + (i32.store align=1 + (i32.const 108) + (get_local $0) + ) + (i32.store align=2 + (i32.const 109) + (get_local $0) + ) + (i32.store + (i32.const 110) + (get_local $0) + ) + (f32.store + (i32.const 111) + (get_local $2) + ) + (f32.store + (i32.const 112) + (get_local $2) + ) + (f32.store align=1 + (i32.const 113) + (get_local $2) + ) + (f32.store align=2 + (i32.const 114) + (get_local $2) + ) + (f32.store + (i32.const 115) + (get_local $2) + ) + (f64.store + (i32.const 116) + (get_local $1) + ) + (f64.store + (i32.const 117) + (get_local $1) + ) + (f64.store align=1 + (i32.const 118) + (get_local $1) + ) + (f64.store align=2 + (i32.const 119) + (get_local $1) + ) + (f64.store align=4 + (i32.const 120) + (get_local $1) + ) + (f64.store + (i32.const 121) + (get_local $1) + ) + ) + (func $test (; 11 ;) + (local $0 f32) + (local $1 i32) + (set_local $1 + (i32.reinterpret/f32 + (get_local $0) + ) + ) + ) + (func $i64s-div (; 12 ;) (param $0 i64) (param $1 i64) (result i64) + (if (result i64) + (i64.eqz + (get_local $1) + ) + (i64.const 0) + (if (result i64) + (i32.and + (i64.eq + (get_local $0) + (i64.const -9223372036854775808) + ) + (i64.eq + (get_local $1) + (i64.const -1) + ) + ) + (i64.const 0) + (i64.div_s + (get_local $0) + (get_local $1) + ) + ) + ) + ) + (func $f32-to-int64 (; 13 ;) (param $0 f32) (result i64) + (if (result i64) + (f32.ne + (get_local $0) + (get_local $0) + ) + (i64.const -9223372036854775808) + (if (result i64) + (f32.ge + (get_local $0) + (f32.const 9223372036854775808) + ) + (i64.const -9223372036854775808) + (if (result i64) + (f32.le + (get_local $0) + (f32.const -9223372036854775808) + ) + (i64.const -9223372036854775808) + (i64.trunc_s/f32 + (get_local $0) + ) + ) + ) + ) + ) + (func $f64-to-int64 (; 14 ;) (param $0 f64) (result i64) + (if (result i64) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i64.const -9223372036854775808) + (if (result i64) + (f64.ge + (get_local $0) + (f64.const 9223372036854775808) + ) + (i64.const -9223372036854775808) + (if (result i64) + (f64.le + (get_local $0) + (f64.const -9223372036854775808) + ) + (i64.const -9223372036854775808) + (i64.trunc_s/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $f32-to-uint64 (; 15 ;) (param $0 f32) (result i64) + (if (result i64) + (f32.ne + (get_local $0) + (get_local $0) + ) + (i64.const 0) + (if (result i64) + (f32.ge + (get_local $0) + (f32.const 18446744073709551615) + ) + (i64.const 0) + (if (result i64) + (f32.le + (get_local $0) + (f32.const -1) + ) + (i64.const 0) + (i64.trunc_u/f32 + (get_local $0) + ) + ) + ) + ) + ) + (func $f64-to-uint64 (; 16 ;) (param $0 f64) (result i64) + (if (result i64) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i64.const 0) + (if (result i64) + (f64.ge + (get_local $0) + (f64.const 18446744073709551615) + ) + (i64.const 0) + (if (result i64) + (f64.le + (get_local $0) + (f64.const -1) + ) + (i64.const 0) + (i64.trunc_u/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $test64 (; 17 ;) + (local $0 i64) + (local $1 f32) + (local $2 f64) + (set_local $0 + (call $i64s-div + (block (result i64) + (set_local $0 + (i64.mul + (i64.sub + (i64.add + (i64.const 128849018897) + (i64.const 100) + ) + (i64.const 128849018897) + ) + (i64.const 128849018897) + ) + ) + (i64.div_u + (get_local $0) + (i64.const 128849018897) + ) + ) + (i64.const 128849018897) + ) + ) + (set_local $0 + (i64.rem_u + (get_local $0) + (i64.const 128849018897) + ) + ) + (drop + (i64.rem_s + (get_local $0) + (i64.const 128849018897) + ) + ) + (drop + (i64.load + (i32.const 120) + ) + ) + (drop + (i64.load + (i32.const 120) + ) + ) + (drop + (i64.load align=2 + (i32.const 120) + ) + ) + (drop + (i64.load align=4 + (i32.const 120) + ) + ) + (i64.store + (i32.const 120) + (tee_local $0 + (i64.load + (i32.const 120) + ) + ) + ) + (i64.store + (i32.const 120) + (get_local $0) + ) + (i64.store align=2 + (i32.const 120) + (get_local $0) + ) + (i64.store align=4 + (i32.const 120) + (get_local $0) + ) + (i64.store + (i32.const 120) + (get_local $0) + ) + (drop + (call $f32-to-int64 + (tee_local $1 + (f32.convert_u/i64 + (tee_local $0 + (i64.extend_u/i32 + (i32.wrap/i64 + (get_local $0) + ) + ) + ) + ) + ) + ) + ) + (drop + (call $f64-to-int64 + (tee_local $2 + (f64.convert_u/i64 + (get_local $0) + ) + ) + ) + ) + (drop + (call $f32-to-uint64 + (get_local $1) + ) + ) + (drop + (call $f64-to-uint64 + (get_local $2) + ) + ) + ) + (func $imports (; 18 ;) (result i64) + (call $legalfunc$illegalImport + (f64.const -3.13159) + (i64.const 94489280523) + (i32.const -33) + ) + (call $legalfunc$illegalImportResult) + ) + (func $arg (; 19 ;) (param $0 i64) + (i64.store + (i32.const 100) + (get_local $0) + ) + (call $arg + (get_local $0) + ) + ) + (func $illegalParam (; 20 ;) (param $0 i32) (param $1 i64) (param $2 f64) + (i64.store + (i32.const 100) + (get_local $1) + ) + (call $illegalParam + (i32.const 0) + (get_local $1) + (f64.const 12.34) + ) + ) + (func $result (; 21 ;) (result i64) + (i64.const 8589934593) + ) + (func $call1 (; 22 ;) (param $0 i64) (result i64) + (call $call1 + (get_local $0) + ) + ) + (func $call2 (; 23 ;) (param $0 i64) (result i64) + (drop + (call $call2 + (call $call2 + (get_local $0) + ) + ) + ) + (i64.const 245127260211081) + ) + (func $returnCastConst (; 24 ;) (result i64) + (i64.const 0) + ) + (func $ifValue64 (; 25 ;) (param $0 i64) (param $1 i64) (result i64) + (call $call2 + (get_local $0) + ) + ) + (func $ifValue32 (; 26 ;) (param $0 i32) (param $1 i32) (result i32) + (call $ifValue32 + (get_local $0) + (get_local $1) + ) + ) + (func $switch64 (; 27 ;) (param $0 i64) (result i32) + (block $switch (result i32) + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_if $switch-default + (i32.wrap/i64 + (i64.shr_u + (tee_local $0 + (i64.sub + (get_local $0) + (i64.const 42949672965) + ) + ) + (i64.const 32) + ) + ) + ) + (br_table $switch-case0 $switch-default $switch-case $switch-default + (i32.wrap/i64 + (get_local $0) + ) + ) + ) + (br $switch + (i32.const 11000) + ) + ) + (br $switch + (i32.const 10) + ) + ) + (i32.const 1) + ) + ) + (func $unreachable_leftovers (; 28 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (block $__rjto$0 + (if + (i32.eqz + (get_local $1) + ) + (block + (br_if $__rjto$0 + (get_local $2) + ) + (i32.store + (get_local $0) + (i32.const -2) + ) + (return) + ) + ) + (i32.store + (get_local $0) + (i32.const -1) + ) + ) + ) + (func $switch64TOOMUCH (; 29 ;) (param $0 i64) (result i32) + (local $1 i32) + (local $2 i64) + (block $switch-default + (if + (i64.ne + (tee_local $2 + (get_local $0) + ) + (i64.const -9223372036854775808) + ) + (br_if $switch-default + (i64.ne + (get_local $2) + (i64.const 4611686018427387904) + ) + ) + ) + (return + (i32.const 40) + ) + ) + (block $switch-default4 + (if + (i32.ne + (tee_local $1 + (i32.const 100) + ) + (i32.const 214748364) + ) + (br_if $switch-default4 + (i32.ne + (get_local $1) + (i32.const 107374182) + ) + ) + ) + (return + (i32.const 41) + ) + ) + (block $switch5 + (if + (i64.ne + (get_local $0) + (i64.const -9223372036854775808) + ) + (br_if $switch5 + (i64.ne + (get_local $0) + (i64.const 4611686018427387904) + ) + ) + ) + (return + (i32.const 42) + ) + ) + (block $switch8 + (if + (i32.ne + (tee_local $1 + (i32.const 100) + ) + (i32.const 214748364) + ) + (br_if $switch8 + (i32.ne + (get_local $1) + (i32.const 107374182) + ) + ) + ) + (return + (i32.const 43) + ) + ) + (i32.const 44) + ) + (func $_memchr (; 30 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $5 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (block $label$break$L8 + (block $__rjti$2 + (if + (i32.and + (tee_local $4 + (i32.ne + (get_local $2) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.const 0) + ) + ) + (block + (set_local $4 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (br_if $__rjti$2 + (i32.eq + (i32.load8_u + (get_local $2) + ) + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + ) + (br_if $while-in + (i32.and + (tee_local $0 + (i32.ne + (tee_local $3 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 3) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (set_local $0 + (i32.const 0) + ) + (br $label$break$L8) + ) + (set_local $0 + (get_local $3) + ) + (if + (i32.ne + (i32.load8_u + (get_local $2) + ) + (tee_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (block + (set_local $3 + (i32.mul + (get_local $5) + (i32.const 16843009) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.le_u + (get_local $0) + (i32.const 3) + ) + ) + (loop $while-in3 + (if + (i32.eqz + (i32.and + (i32.xor + (i32.and + (tee_local $4 + (i32.xor + (i32.load + (get_local $2) + ) + (get_local $3) + ) + ) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $4) + (i32.const -16843009) + ) + ) + ) + (block + (set_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (br_if $while-in3 + (i32.gt_u + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + (i32.const 3) + ) + ) + (br $__rjti$0) + ) + ) + ) + (br $__rjto$0) + ) + (if + (i32.eqz + (get_local $0) + ) + (block + (set_local $0 + (i32.const 0) + ) + (br $label$break$L8) + ) + ) + ) + (loop $while-in5 + (br_if $label$break$L8 + (i32.eq + (i32.load8_u + (get_local $2) + ) + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br_if $while-in5 + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -1) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + ) + (select + (get_local $2) + (i32.const 0) + (get_local $0) + ) + ) + (func $switch64_big_condition1 (; 31 ;) (param $0 i64) + (local $1 i64) + (block $switch-default + (block $switch-case + (br_if $switch-default + (i32.wrap/i64 + (i64.shr_u + (tee_local $1 + (i64.sub + (get_local $0) + (i64.const 9218868437227405312) + ) + ) + (i64.const 32) + ) + ) + ) + (br_table $switch-case $switch-default + (i32.wrap/i64 + (get_local $1) + ) + ) + ) + (call $abort) + ) + ) + (func $keepAlive (; 32 ;) + (call $loads) + (call $loads) + (call $stores) + (call $stores) + (call $test) + (call $test) + (drop + (call $imports) + ) + (drop + (call $imports) + ) + (call $arg + (i64.const 0) + ) + (call $arg + (i64.const 0) + ) + (drop + (call $call1 + (i64.const 0) + ) + ) + (drop + (call $call1 + (i64.const 0) + ) + ) + (drop + (call $call2 + (i64.const 0) + ) + ) + (drop + (call $call2 + (i64.const 0) + ) + ) + (drop + (call $returnCastConst) + ) + (drop + (call $returnCastConst) + ) + (drop + (call $ifValue64 + (i64.const 0) + (i64.const 0) + ) + ) + (drop + (call $ifValue64 + (i64.const 0) + (i64.const 0) + ) + ) + (drop + (call $ifValue32 + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call $ifValue32 + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call $switch64 + (i64.const 0) + ) + ) + (drop + (call $switch64 + (i64.const 0) + ) + ) + (call $unreachable_leftovers + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + (call $unreachable_leftovers + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + (drop + (call $_memchr + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call $switch64TOOMUCH + (i64.const 0) + ) + ) + (call $switch64_big_condition1 + (i64.const 0) + ) + (call $switch64_big_condition1 + (i64.const 0) + ) + ) + (func $legalstub$illegalParam (; 33 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 f64) + (call $illegalParam + (get_local $0) + (i64.or + (i64.extend_u/i32 + (get_local $1) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $2) + ) + (i64.const 32) + ) + ) + (get_local $3) + ) + ) + (func $legalstub$result (; 34 ;) (result i32) + (local $0 i64) + (set_local $0 + (call $result) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $0) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $0) + ) + ) + (func $legalfunc$illegalImport (; 35 ;) (param $0 f64) (param $1 i64) (param $2 i32) + (call $legalimport$illegalImport + (get_local $0) + (i32.wrap/i64 + (get_local $1) + ) + (i32.wrap/i64 + (i64.shr_u + (get_local $1) + (i64.const 32) + ) + ) + (get_local $2) + ) + ) + (func $legalfunc$illegalImportResult (; 36 ;) (result i64) + (i64.or + (i64.extend_u/i32 + (call $legalimport$illegalImportResult) + ) + (i64.shl + (i64.extend_u/i32 + (get_global $tempRet0) + ) + (i64.const 32) + ) + ) + ) + (func $legalfunc$_fabsf (; 37 ;) (param $0 f32) (result f32) + (f32.demote/f64 + (call $legalimport$_fabsf + (f64.promote/f32 + (get_local $0) + ) + ) + ) + ) + (func $legalfunc$do_i64 (; 38 ;) (result i64) + (i64.or + (i64.extend_u/i32 + (call $legalimport$do_i64) + ) + (i64.shl + (i64.extend_u/i32 + (get_global $tempRet0) + ) + (i64.const 32) + ) + ) + ) +) diff --git a/src/binaryen/test/wasm-only.fromasm.clamp b/src/binaryen/test/wasm-only.fromasm.clamp new file mode 100644 index 0000000000..8ac681f2bf --- /dev/null +++ b/src/binaryen/test/wasm-only.fromasm.clamp @@ -0,0 +1,1137 @@ +(module + (type $FUNCSIG$vdji (func (param f64 i64 i32))) + (type $FUNCSIG$j (func (result i64))) + (type $FUNCSIG$ff (func (param f32) (result f32))) + (type $FUNCSIG$v (func)) + (type $legaltype$illegalImport (func (param f64 i32 i32 i32))) + (type $legaltype$illegalImportResult (func (result i32))) + (type $legaltype$_fabsf (func (param f64) (result f64))) + (type $legaltype$do_i64 (func (result i32))) + (import "env" "illegalImport" (func $illegalImport (param f64 i64 i32))) + (import "env" "illegalImportResult" (func $illegalImportResult (result i64))) + (import "env" "_fabsf" (func $_fabsf (param f32) (result f32))) + (import "env" "do_i64" (func $do_i64 (result i64))) + (import "env" "abort" (func $abort)) + (import "env" "illegalImport" (func $legalimport$illegalImport (param f64 i32 i32 i32))) + (import "env" "illegalImportResult" (func $legalimport$illegalImportResult (result i32))) + (import "env" "_fabsf" (func $legalimport$_fabsf (param f64) (result f64))) + (import "env" "do_i64" (func $legalimport$do_i64 (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 3 3 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $tempRet0 (mut i32) (i32.const 0)) + (elem (get_global $tableBase) $legalfunc$illegalImport $legalfunc$_fabsf $legalfunc$do_i64) + (data (get_global $memoryBase) "wasm-only.asm.js") + (export "test64" (func $test64)) + (export "illegalParam" (func $legalstub$illegalParam)) + (export "illegalResult" (func $legalstub$result)) + (export "keepAlive" (func $keepAlive)) + (func $loads (; 9 ;) + (drop + (i32.load8_s + (i32.const 100) + ) + ) + (drop + (i32.load8_s + (i32.const 101) + ) + ) + (drop + (i32.load16_s + (i32.const 102) + ) + ) + (drop + (i32.load16_s + (i32.const 103) + ) + ) + (drop + (i32.load16_s align=1 + (i32.const 104) + ) + ) + (drop + (i32.load16_s + (i32.const 105) + ) + ) + (drop + (i32.load + (i32.const 106) + ) + ) + (drop + (i32.load + (i32.const 107) + ) + ) + (drop + (i32.load align=1 + (i32.const 108) + ) + ) + (drop + (i32.load align=2 + (i32.const 109) + ) + ) + (drop + (i32.load + (i32.const 110) + ) + ) + (drop + (f32.load + (i32.const 111) + ) + ) + (drop + (f32.load + (i32.const 112) + ) + ) + (drop + (f32.load align=1 + (i32.const 113) + ) + ) + (drop + (f32.load align=2 + (i32.const 114) + ) + ) + (drop + (f32.load + (i32.const 115) + ) + ) + (drop + (f64.load + (i32.const 116) + ) + ) + (drop + (f64.load + (i32.const 117) + ) + ) + (drop + (f64.load align=1 + (i32.const 118) + ) + ) + (drop + (f64.load align=2 + (i32.const 119) + ) + ) + (drop + (f64.load align=4 + (i32.const 120) + ) + ) + (drop + (f64.load + (i32.const 121) + ) + ) + ) + (func $stores (; 10 ;) + (local $0 i32) + (local $1 f64) + (local $2 f32) + (i32.store8 + (i32.const 100) + (get_local $0) + ) + (i32.store8 + (i32.const 101) + (get_local $0) + ) + (i32.store16 + (i32.const 102) + (get_local $0) + ) + (i32.store16 + (i32.const 103) + (get_local $0) + ) + (i32.store16 align=1 + (i32.const 104) + (get_local $0) + ) + (i32.store16 + (i32.const 105) + (get_local $0) + ) + (i32.store + (i32.const 106) + (get_local $0) + ) + (i32.store + (i32.const 107) + (get_local $0) + ) + (i32.store align=1 + (i32.const 108) + (get_local $0) + ) + (i32.store align=2 + (i32.const 109) + (get_local $0) + ) + (i32.store + (i32.const 110) + (get_local $0) + ) + (f32.store + (i32.const 111) + (get_local $2) + ) + (f32.store + (i32.const 112) + (get_local $2) + ) + (f32.store align=1 + (i32.const 113) + (get_local $2) + ) + (f32.store align=2 + (i32.const 114) + (get_local $2) + ) + (f32.store + (i32.const 115) + (get_local $2) + ) + (f64.store + (i32.const 116) + (get_local $1) + ) + (f64.store + (i32.const 117) + (get_local $1) + ) + (f64.store align=1 + (i32.const 118) + (get_local $1) + ) + (f64.store align=2 + (i32.const 119) + (get_local $1) + ) + (f64.store align=4 + (i32.const 120) + (get_local $1) + ) + (f64.store + (i32.const 121) + (get_local $1) + ) + ) + (func $test (; 11 ;) + (local $0 f32) + (local $1 i32) + (set_local $1 + (i32.reinterpret/f32 + (get_local $0) + ) + ) + ) + (func $i64s-div (; 12 ;) (param $0 i64) (param $1 i64) (result i64) + (if (result i64) + (i64.eqz + (get_local $1) + ) + (i64.const 0) + (if (result i64) + (i32.and + (i64.eq + (get_local $0) + (i64.const -9223372036854775808) + ) + (i64.eq + (get_local $1) + (i64.const -1) + ) + ) + (i64.const 0) + (i64.div_s + (get_local $0) + (get_local $1) + ) + ) + ) + ) + (func $f32-to-int64 (; 13 ;) (param $0 f32) (result i64) + (if (result i64) + (f32.ne + (get_local $0) + (get_local $0) + ) + (i64.const -9223372036854775808) + (if (result i64) + (f32.ge + (get_local $0) + (f32.const 9223372036854775808) + ) + (i64.const -9223372036854775808) + (if (result i64) + (f32.le + (get_local $0) + (f32.const -9223372036854775808) + ) + (i64.const -9223372036854775808) + (i64.trunc_s/f32 + (get_local $0) + ) + ) + ) + ) + ) + (func $f64-to-int64 (; 14 ;) (param $0 f64) (result i64) + (if (result i64) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i64.const -9223372036854775808) + (if (result i64) + (f64.ge + (get_local $0) + (f64.const 9223372036854775808) + ) + (i64.const -9223372036854775808) + (if (result i64) + (f64.le + (get_local $0) + (f64.const -9223372036854775808) + ) + (i64.const -9223372036854775808) + (i64.trunc_s/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $f32-to-uint64 (; 15 ;) (param $0 f32) (result i64) + (if (result i64) + (f32.ne + (get_local $0) + (get_local $0) + ) + (i64.const 0) + (if (result i64) + (f32.ge + (get_local $0) + (f32.const 18446744073709551615) + ) + (i64.const 0) + (if (result i64) + (f32.le + (get_local $0) + (f32.const -1) + ) + (i64.const 0) + (i64.trunc_u/f32 + (get_local $0) + ) + ) + ) + ) + ) + (func $f64-to-uint64 (; 16 ;) (param $0 f64) (result i64) + (if (result i64) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i64.const 0) + (if (result i64) + (f64.ge + (get_local $0) + (f64.const 18446744073709551615) + ) + (i64.const 0) + (if (result i64) + (f64.le + (get_local $0) + (f64.const -1) + ) + (i64.const 0) + (i64.trunc_u/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $test64 (; 17 ;) + (local $0 i64) + (local $1 f32) + (local $2 f64) + (set_local $0 + (call $i64s-div + (block (result i64) + (set_local $0 + (i64.mul + (i64.sub + (i64.add + (i64.const 128849018897) + (i64.const 100) + ) + (i64.const 128849018897) + ) + (i64.const 128849018897) + ) + ) + (i64.div_u + (get_local $0) + (i64.const 128849018897) + ) + ) + (i64.const 128849018897) + ) + ) + (set_local $0 + (i64.rem_u + (get_local $0) + (i64.const 128849018897) + ) + ) + (drop + (i64.rem_s + (get_local $0) + (i64.const 128849018897) + ) + ) + (drop + (i64.load + (i32.const 120) + ) + ) + (drop + (i64.load + (i32.const 120) + ) + ) + (drop + (i64.load align=2 + (i32.const 120) + ) + ) + (drop + (i64.load align=4 + (i32.const 120) + ) + ) + (i64.store + (i32.const 120) + (tee_local $0 + (i64.load + (i32.const 120) + ) + ) + ) + (i64.store + (i32.const 120) + (get_local $0) + ) + (i64.store align=2 + (i32.const 120) + (get_local $0) + ) + (i64.store align=4 + (i32.const 120) + (get_local $0) + ) + (i64.store + (i32.const 120) + (get_local $0) + ) + (drop + (call $f32-to-int64 + (tee_local $1 + (f32.convert_u/i64 + (tee_local $0 + (i64.extend_u/i32 + (i32.wrap/i64 + (get_local $0) + ) + ) + ) + ) + ) + ) + ) + (drop + (call $f64-to-int64 + (tee_local $2 + (f64.convert_u/i64 + (get_local $0) + ) + ) + ) + ) + (drop + (call $f32-to-uint64 + (get_local $1) + ) + ) + (drop + (call $f64-to-uint64 + (get_local $2) + ) + ) + ) + (func $imports (; 18 ;) (result i64) + (call $legalfunc$illegalImport + (f64.const -3.13159) + (i64.const 94489280523) + (i32.const -33) + ) + (call $legalfunc$illegalImportResult) + ) + (func $arg (; 19 ;) (param $0 i64) + (i64.store + (i32.const 100) + (get_local $0) + ) + (call $arg + (get_local $0) + ) + ) + (func $illegalParam (; 20 ;) (param $0 i32) (param $1 i64) (param $2 f64) + (i64.store + (i32.const 100) + (get_local $1) + ) + (call $illegalParam + (i32.const 0) + (get_local $1) + (f64.const 12.34) + ) + ) + (func $result (; 21 ;) (result i64) + (i64.const 8589934593) + ) + (func $call1 (; 22 ;) (param $0 i64) (result i64) + (call $call1 + (get_local $0) + ) + ) + (func $call2 (; 23 ;) (param $0 i64) (result i64) + (drop + (call $call2 + (call $call2 + (get_local $0) + ) + ) + ) + (i64.const 245127260211081) + ) + (func $returnCastConst (; 24 ;) (result i64) + (i64.const 0) + ) + (func $ifValue64 (; 25 ;) (param $0 i64) (param $1 i64) (result i64) + (call $call2 + (get_local $0) + ) + ) + (func $ifValue32 (; 26 ;) (param $0 i32) (param $1 i32) (result i32) + (call $ifValue32 + (get_local $0) + (get_local $1) + ) + ) + (func $switch64 (; 27 ;) (param $0 i64) (result i32) + (block $switch (result i32) + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_if $switch-default + (i32.wrap/i64 + (i64.shr_u + (tee_local $0 + (i64.sub + (get_local $0) + (i64.const 42949672965) + ) + ) + (i64.const 32) + ) + ) + ) + (br_table $switch-case0 $switch-default $switch-case $switch-default + (i32.wrap/i64 + (get_local $0) + ) + ) + ) + (br $switch + (i32.const 11000) + ) + ) + (br $switch + (i32.const 10) + ) + ) + (i32.const 1) + ) + ) + (func $unreachable_leftovers (; 28 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (block $__rjto$0 + (if + (i32.eqz + (get_local $1) + ) + (block + (br_if $__rjto$0 + (get_local $2) + ) + (i32.store + (get_local $0) + (i32.const -2) + ) + (return) + ) + ) + (i32.store + (get_local $0) + (i32.const -1) + ) + ) + ) + (func $switch64TOOMUCH (; 29 ;) (param $0 i64) (result i32) + (local $1 i32) + (local $2 i64) + (block $switch-default + (if + (i64.ne + (tee_local $2 + (get_local $0) + ) + (i64.const -9223372036854775808) + ) + (br_if $switch-default + (i64.ne + (get_local $2) + (i64.const 4611686018427387904) + ) + ) + ) + (return + (i32.const 40) + ) + ) + (block $switch-default4 + (if + (i32.ne + (tee_local $1 + (i32.const 100) + ) + (i32.const 214748364) + ) + (br_if $switch-default4 + (i32.ne + (get_local $1) + (i32.const 107374182) + ) + ) + ) + (return + (i32.const 41) + ) + ) + (block $switch5 + (if + (i64.ne + (get_local $0) + (i64.const -9223372036854775808) + ) + (br_if $switch5 + (i64.ne + (get_local $0) + (i64.const 4611686018427387904) + ) + ) + ) + (return + (i32.const 42) + ) + ) + (block $switch8 + (if + (i32.ne + (tee_local $1 + (i32.const 100) + ) + (i32.const 214748364) + ) + (br_if $switch8 + (i32.ne + (get_local $1) + (i32.const 107374182) + ) + ) + ) + (return + (i32.const 43) + ) + ) + (i32.const 44) + ) + (func $_memchr (; 30 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $5 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (block $label$break$L8 + (block $__rjti$2 + (if + (i32.and + (tee_local $4 + (i32.ne + (get_local $2) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.const 0) + ) + ) + (block + (set_local $4 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (br_if $__rjti$2 + (i32.eq + (i32.load8_u + (get_local $2) + ) + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + ) + (br_if $while-in + (i32.and + (tee_local $0 + (i32.ne + (tee_local $3 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 3) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (set_local $0 + (i32.const 0) + ) + (br $label$break$L8) + ) + (set_local $0 + (get_local $3) + ) + (if + (i32.ne + (i32.load8_u + (get_local $2) + ) + (tee_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (block + (set_local $3 + (i32.mul + (get_local $5) + (i32.const 16843009) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.le_u + (get_local $0) + (i32.const 3) + ) + ) + (loop $while-in3 + (if + (i32.eqz + (i32.and + (i32.xor + (i32.and + (tee_local $4 + (i32.xor + (i32.load + (get_local $2) + ) + (get_local $3) + ) + ) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $4) + (i32.const -16843009) + ) + ) + ) + (block + (set_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (br_if $while-in3 + (i32.gt_u + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + (i32.const 3) + ) + ) + (br $__rjti$0) + ) + ) + ) + (br $__rjto$0) + ) + (if + (i32.eqz + (get_local $0) + ) + (block + (set_local $0 + (i32.const 0) + ) + (br $label$break$L8) + ) + ) + ) + (loop $while-in5 + (br_if $label$break$L8 + (i32.eq + (i32.load8_u + (get_local $2) + ) + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br_if $while-in5 + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -1) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + ) + (select + (get_local $2) + (i32.const 0) + (get_local $0) + ) + ) + (func $switch64_big_condition1 (; 31 ;) (param $0 i64) + (local $1 i64) + (block $switch-default + (block $switch-case + (br_if $switch-default + (i32.wrap/i64 + (i64.shr_u + (tee_local $1 + (i64.sub + (get_local $0) + (i64.const 9218868437227405312) + ) + ) + (i64.const 32) + ) + ) + ) + (br_table $switch-case $switch-default + (i32.wrap/i64 + (get_local $1) + ) + ) + ) + (call $abort) + ) + ) + (func $keepAlive (; 32 ;) + (call $loads) + (call $loads) + (call $stores) + (call $stores) + (call $test) + (call $test) + (drop + (call $imports) + ) + (drop + (call $imports) + ) + (call $arg + (i64.const 0) + ) + (call $arg + (i64.const 0) + ) + (drop + (call $call1 + (i64.const 0) + ) + ) + (drop + (call $call1 + (i64.const 0) + ) + ) + (drop + (call $call2 + (i64.const 0) + ) + ) + (drop + (call $call2 + (i64.const 0) + ) + ) + (drop + (call $returnCastConst) + ) + (drop + (call $returnCastConst) + ) + (drop + (call $ifValue64 + (i64.const 0) + (i64.const 0) + ) + ) + (drop + (call $ifValue64 + (i64.const 0) + (i64.const 0) + ) + ) + (drop + (call $ifValue32 + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call $ifValue32 + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call $switch64 + (i64.const 0) + ) + ) + (drop + (call $switch64 + (i64.const 0) + ) + ) + (call $unreachable_leftovers + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + (call $unreachable_leftovers + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + (drop + (call $_memchr + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call $switch64TOOMUCH + (i64.const 0) + ) + ) + (call $switch64_big_condition1 + (i64.const 0) + ) + (call $switch64_big_condition1 + (i64.const 0) + ) + ) + (func $legalstub$illegalParam (; 33 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 f64) + (call $illegalParam + (get_local $0) + (i64.or + (i64.extend_u/i32 + (get_local $1) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $2) + ) + (i64.const 32) + ) + ) + (get_local $3) + ) + ) + (func $legalstub$result (; 34 ;) (result i32) + (local $0 i64) + (set_local $0 + (call $result) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $0) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $0) + ) + ) + (func $legalfunc$illegalImport (; 35 ;) (param $0 f64) (param $1 i64) (param $2 i32) + (call $legalimport$illegalImport + (get_local $0) + (i32.wrap/i64 + (get_local $1) + ) + (i32.wrap/i64 + (i64.shr_u + (get_local $1) + (i64.const 32) + ) + ) + (get_local $2) + ) + ) + (func $legalfunc$illegalImportResult (; 36 ;) (result i64) + (i64.or + (i64.extend_u/i32 + (call $legalimport$illegalImportResult) + ) + (i64.shl + (i64.extend_u/i32 + (get_global $tempRet0) + ) + (i64.const 32) + ) + ) + ) + (func $legalfunc$_fabsf (; 37 ;) (param $0 f32) (result f32) + (f32.demote/f64 + (call $legalimport$_fabsf + (f64.promote/f32 + (get_local $0) + ) + ) + ) + ) + (func $legalfunc$do_i64 (; 38 ;) (result i64) + (i64.or + (i64.extend_u/i32 + (call $legalimport$do_i64) + ) + (i64.shl + (i64.extend_u/i32 + (get_global $tempRet0) + ) + (i64.const 32) + ) + ) + ) +) diff --git a/src/binaryen/test/wasm-only.fromasm.clamp.no-opts b/src/binaryen/test/wasm-only.fromasm.clamp.no-opts new file mode 100644 index 0000000000..1b8b002016 --- /dev/null +++ b/src/binaryen/test/wasm-only.fromasm.clamp.no-opts @@ -0,0 +1,1922 @@ +(module + (type $FUNCSIG$vdji (func (param f64 i64 i32))) + (type $FUNCSIG$j (func (result i64))) + (type $FUNCSIG$ff (func (param f32) (result f32))) + (type $FUNCSIG$v (func)) + (type $legaltype$illegalImport (func (param f64 i32 i32 i32))) + (type $legaltype$illegalImportResult (func (result i32))) + (type $legaltype$_fabsf (func (param f64) (result f64))) + (type $legaltype$do_i64 (func (result i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "illegalImport" (func $illegalImport (param f64 i64 i32))) + (import "env" "illegalImportResult" (func $illegalImportResult (result i64))) + (import "env" "_fabsf" (func $_fabsf (param f32) (result f32))) + (import "env" "do_i64" (func $do_i64 (result i64))) + (import "env" "abort" (func $abort)) + (import "env" "illegalImport" (func $legalimport$illegalImport (param f64 i32 i32 i32))) + (import "env" "illegalImportResult" (func $legalimport$illegalImportResult (result i32))) + (import "env" "_fabsf" (func $legalimport$_fabsf (param f64) (result f64))) + (import "env" "do_i64" (func $legalimport$do_i64 (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 3 3 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $tempRet0 (mut i32) (i32.const 0)) + (elem (get_global $tableBase) $legalfunc$illegalImport $legalfunc$_fabsf $legalfunc$do_i64) + (export "test64" (func $test64)) + (export "illegalParam" (func $legalstub$illegalParam)) + (export "illegalResult" (func $legalstub$illegalResult)) + (export "keepAlive" (func $keepAlive)) + (func $loads (; 9 ;) + (local $i i32) + (local $f f32) + (local $d f64) + (set_local $i + (i32.load8_s + (i32.const 100) + ) + ) + (set_local $i + (i32.load8_s + (i32.const 101) + ) + ) + (set_local $i + (i32.load16_s + (i32.const 102) + ) + ) + (set_local $i + (i32.load16_s + (i32.const 103) + ) + ) + (set_local $i + (i32.load16_s align=1 + (i32.const 104) + ) + ) + (set_local $i + (i32.load16_s + (i32.const 105) + ) + ) + (set_local $i + (i32.load + (i32.const 106) + ) + ) + (set_local $i + (i32.load + (i32.const 107) + ) + ) + (set_local $i + (i32.load align=1 + (i32.const 108) + ) + ) + (set_local $i + (i32.load align=2 + (i32.const 109) + ) + ) + (set_local $i + (i32.load + (i32.const 110) + ) + ) + (set_local $f + (f32.load + (i32.const 111) + ) + ) + (set_local $f + (f32.load + (i32.const 112) + ) + ) + (set_local $f + (f32.load align=1 + (i32.const 113) + ) + ) + (set_local $f + (f32.load align=2 + (i32.const 114) + ) + ) + (set_local $f + (f32.load + (i32.const 115) + ) + ) + (set_local $d + (f64.load + (i32.const 116) + ) + ) + (set_local $d + (f64.load + (i32.const 117) + ) + ) + (set_local $d + (f64.load align=1 + (i32.const 118) + ) + ) + (set_local $d + (f64.load align=2 + (i32.const 119) + ) + ) + (set_local $d + (f64.load align=4 + (i32.const 120) + ) + ) + (set_local $d + (f64.load + (i32.const 121) + ) + ) + ) + (func $stores (; 10 ;) + (local $i i32) + (local $f f32) + (local $d f64) + (i32.store8 + (i32.const 100) + (get_local $i) + ) + (i32.store8 + (i32.const 101) + (get_local $i) + ) + (i32.store16 + (i32.const 102) + (get_local $i) + ) + (i32.store16 + (i32.const 103) + (get_local $i) + ) + (i32.store16 align=1 + (i32.const 104) + (get_local $i) + ) + (i32.store16 + (i32.const 105) + (get_local $i) + ) + (i32.store + (i32.const 106) + (get_local $i) + ) + (i32.store + (i32.const 107) + (get_local $i) + ) + (i32.store align=1 + (i32.const 108) + (get_local $i) + ) + (i32.store align=2 + (i32.const 109) + (get_local $i) + ) + (i32.store + (i32.const 110) + (get_local $i) + ) + (f32.store + (i32.const 111) + (get_local $f) + ) + (f32.store + (i32.const 112) + (get_local $f) + ) + (f32.store align=1 + (i32.const 113) + (get_local $f) + ) + (f32.store align=2 + (i32.const 114) + (get_local $f) + ) + (f32.store + (i32.const 115) + (get_local $f) + ) + (f64.store + (i32.const 116) + (get_local $d) + ) + (f64.store + (i32.const 117) + (get_local $d) + ) + (f64.store align=1 + (i32.const 118) + (get_local $d) + ) + (f64.store align=2 + (i32.const 119) + (get_local $d) + ) + (f64.store align=4 + (i32.const 120) + (get_local $d) + ) + (f64.store + (i32.const 121) + (get_local $d) + ) + ) + (func $test (; 11 ;) + (local $i i32) + (local $j i64) + (local $f f32) + (local $f1 f32) + (local $f2 f32) + (local $d1 f64) + (local $d2 f64) + (set_local $i + (i32.reinterpret/f32 + (get_local $f) + ) + ) + (set_local $f + (f32.reinterpret/i32 + (get_local $i) + ) + ) + (set_local $i + (i32.ctz + (get_local $i) + ) + ) + (set_local $i + (i32.popcnt + (get_local $i) + ) + ) + (set_local $j + (i64.popcnt + (get_local $j) + ) + ) + (set_local $f1 + (f32.copysign + (get_local $f1) + (get_local $f2) + ) + ) + (set_local $d1 + (f64.copysign + (get_local $d1) + (get_local $d2) + ) + ) + ) + (func $i64u-div (; 12 ;) (param $0 i64) (param $1 i64) (result i64) + (if (result i64) + (i64.eqz + (get_local $1) + ) + (i64.const 0) + (i64.div_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $i64s-div (; 13 ;) (param $0 i64) (param $1 i64) (result i64) + (if (result i64) + (i64.eqz + (get_local $1) + ) + (i64.const 0) + (if (result i64) + (i32.and + (i64.eq + (get_local $0) + (i64.const -9223372036854775808) + ) + (i64.eq + (get_local $1) + (i64.const -1) + ) + ) + (i64.const 0) + (i64.div_s + (get_local $0) + (get_local $1) + ) + ) + ) + ) + (func $i64u-rem (; 14 ;) (param $0 i64) (param $1 i64) (result i64) + (if (result i64) + (i64.eqz + (get_local $1) + ) + (i64.const 0) + (i64.rem_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $i64s-rem (; 15 ;) (param $0 i64) (param $1 i64) (result i64) + (if (result i64) + (i64.eqz + (get_local $1) + ) + (i64.const 0) + (i64.rem_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $f32-to-int64 (; 16 ;) (param $0 f32) (result i64) + (if (result i64) + (f32.ne + (get_local $0) + (get_local $0) + ) + (i64.const -9223372036854775808) + (if (result i64) + (f32.ge + (get_local $0) + (f32.const 9223372036854775808) + ) + (i64.const -9223372036854775808) + (if (result i64) + (f32.le + (get_local $0) + (f32.const -9223372036854775808) + ) + (i64.const -9223372036854775808) + (i64.trunc_s/f32 + (get_local $0) + ) + ) + ) + ) + ) + (func $f64-to-int64 (; 17 ;) (param $0 f64) (result i64) + (if (result i64) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i64.const -9223372036854775808) + (if (result i64) + (f64.ge + (get_local $0) + (f64.const 9223372036854775808) + ) + (i64.const -9223372036854775808) + (if (result i64) + (f64.le + (get_local $0) + (f64.const -9223372036854775808) + ) + (i64.const -9223372036854775808) + (i64.trunc_s/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $f32-to-uint64 (; 18 ;) (param $0 f32) (result i64) + (if (result i64) + (f32.ne + (get_local $0) + (get_local $0) + ) + (i64.const 0) + (if (result i64) + (f32.ge + (get_local $0) + (f32.const 18446744073709551615) + ) + (i64.const 0) + (if (result i64) + (f32.le + (get_local $0) + (f32.const -1) + ) + (i64.const 0) + (i64.trunc_u/f32 + (get_local $0) + ) + ) + ) + ) + ) + (func $f64-to-uint64 (; 19 ;) (param $0 f64) (result i64) + (if (result i64) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i64.const 0) + (if (result i64) + (f64.ge + (get_local $0) + (f64.const 18446744073709551615) + ) + (i64.const 0) + (if (result i64) + (f64.le + (get_local $0) + (f64.const -1) + ) + (i64.const 0) + (i64.trunc_u/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $test64 (; 20 ;) + (local $x i64) + (local $y i64) + (local $z i32) + (local $int32 i32) + (local $float32 f32) + (local $float64 f64) + (set_local $x + (i64.const 100) + ) + (set_local $y + (i64.const 128849018897) + ) + (set_local $x + (i64.add + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.sub + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.mul + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (call $i64u-div + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (call $i64s-div + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (call $i64u-rem + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (call $i64s-rem + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.and + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.or + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.xor + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.shl + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.shr_s + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.shr_u + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.load + (i32.const 120) + ) + ) + (set_local $x + (i64.load + (i32.const 120) + ) + ) + (set_local $x + (i64.load align=2 + (i32.const 120) + ) + ) + (set_local $x + (i64.load align=4 + (i32.const 120) + ) + ) + (set_local $x + (i64.load + (i32.const 120) + ) + ) + (i64.store + (i32.const 120) + (get_local $x) + ) + (i64.store + (i32.const 120) + (get_local $x) + ) + (i64.store align=2 + (i32.const 120) + (get_local $x) + ) + (i64.store align=4 + (i32.const 120) + (get_local $x) + ) + (i64.store + (i32.const 120) + (get_local $x) + ) + (set_local $z + (i64.eq + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.ne + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.le_u + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.le_s + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.ge_u + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.ge_s + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.lt_u + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.lt_s + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.gt_u + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.gt_s + (get_local $x) + (get_local $y) + ) + ) + (set_local $int32 + (i32.wrap/i64 + (get_local $x) + ) + ) + (set_local $x + (i64.extend_s/i32 + (get_local $int32) + ) + ) + (set_local $x + (i64.extend_u/i32 + (get_local $int32) + ) + ) + (set_local $float32 + (f32.convert_s/i64 + (get_local $x) + ) + ) + (set_local $float64 + (f64.convert_s/i64 + (get_local $x) + ) + ) + (set_local $float32 + (f32.convert_u/i64 + (get_local $x) + ) + ) + (set_local $float64 + (f64.convert_u/i64 + (get_local $x) + ) + ) + (set_local $x + (call $f32-to-int64 + (get_local $float32) + ) + ) + (set_local $x + (call $f64-to-int64 + (get_local $float64) + ) + ) + (set_local $x + (call $f32-to-uint64 + (get_local $float32) + ) + ) + (set_local $x + (call $f64-to-uint64 + (get_local $float64) + ) + ) + (set_local $x + (i64.reinterpret/f64 + (get_local $float64) + ) + ) + (set_local $float64 + (f64.reinterpret/i64 + (get_local $x) + ) + ) + (set_local $x + (i64.clz + (get_local $y) + ) + ) + (set_local $y + (i64.ctz + (get_local $x) + ) + ) + ) + (func $imports (; 21 ;) (result i64) + (call $legalfunc$illegalImport + (f64.const -3.13159) + (i64.const 94489280523) + (i32.const -33) + ) + (return + (call $legalfunc$illegalImportResult) + ) + ) + (func $arg (; 22 ;) (param $x i64) + (i64.store + (i32.const 100) + (get_local $x) + ) + (call $arg + (get_local $x) + ) + ) + (func $illegalParam (; 23 ;) (param $a i32) (param $x i64) (param $b f64) + (i64.store + (i32.const 100) + (get_local $x) + ) + (call $illegalParam + (i32.const 0) + (get_local $x) + (f64.const 12.34) + ) + ) + (func $result (; 24 ;) (result i64) + (return + (i64.const 8589934593) + ) + ) + (func $illegalResult (; 25 ;) (result i64) + (return + (i64.const 8589934593) + ) + ) + (func $call1 (; 26 ;) (param $x i64) (result i64) + (local $y i64) + (set_local $y + (call $call1 + (get_local $x) + ) + ) + (return + (get_local $y) + ) + ) + (func $call2 (; 27 ;) (param $x i64) (result i64) + (drop + (call $call2 + (call $call2 + (get_local $x) + ) + ) + ) + (return + (i64.const 245127260211081) + ) + ) + (func $returnCastConst (; 28 ;) (result i64) + (return + (i64.const 0) + ) + ) + (func $ifValue64 (; 29 ;) (param $$4 i64) (param $$6 i64) (result i64) + (local $$$0 i64) + (local $$9 i64) + (local $$10 i64) + (if + (i32.wrap/i64 + (get_local $$6) + ) + (block + (set_local $$9 + (call $call2 + (get_local $$4) + ) + ) + (set_local $$$0 + (get_local $$9) + ) + ) + (block + (set_local $$10 + (call $call2 + (get_local $$4) + ) + ) + (set_local $$$0 + (get_local $$10) + ) + ) + ) + (return + (get_local $$$0) + ) + ) + (func $ifValue32 (; 30 ;) (param $$4 i32) (param $$6 i32) (result i32) + (local $$$0 i32) + (local $$9 i32) + (local $$10 i32) + (if + (get_local $$6) + (block + (set_local $$9 + (call $ifValue32 + (get_local $$4) + (get_local $$6) + ) + ) + (set_local $$$0 + (get_local $$9) + ) + ) + (block + (set_local $$10 + (call $ifValue32 + (get_local $$4) + (get_local $$6) + ) + ) + (set_local $$$0 + (get_local $$10) + ) + ) + ) + (return + (get_local $$$0) + ) + ) + (func $switch64 (; 31 ;) (param $$a444 i64) (result i32) + (local $$waka i32) + (local $2 i64) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case0 $switch-default $switch-case $switch-default + (i32.wrap/i64 + (block (result i64) + (set_local $2 + (i64.sub + (get_local $$a444) + (i64.const 42949672965) + ) + ) + (br_if $switch-default + (i32.wrap/i64 + (i64.shr_u + (get_local $2) + (i64.const 32) + ) + ) + ) + (get_local $2) + ) + ) + ) + ) + (block + (set_local $$waka + (i32.const 11000) + ) + (br $switch) + ) + ) + (block + (set_local $$waka + (i32.const 10) + ) + (br $switch) + ) + ) + (set_local $$waka + (i32.const 1) + ) + ) + (return + (get_local $$waka) + ) + ) + (func $unreachable_leftovers (; 32 ;) (param $$0 i32) (param $$1 i32) (param $$2 i32) + (local $label i32) + (block $label$break$L1 + (if + (get_local $$1) + (set_local $label + (i32.const 10) + ) + (block + (if + (get_local $$2) + (block + (br $label$break$L1) + (return) + ) + ) + (i32.store + (get_local $$0) + (i32.const -2) + ) + (return) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 10) + ) + (i32.store + (get_local $$0) + (i32.const -1) + ) + ) + (return) + ) + (func $switch64TOOMUCH (; 33 ;) (param $$a444 i64) (result i32) + (local $$waka i32) + (local $2 i64) + (local $3 i32) + (local $4 i64) + (local $5 i32) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (set_local $2 + (get_local $$a444) + ) + (if + (i64.eq + (get_local $2) + (i64.const -9223372036854775808) + ) + (br $switch-case0) + (if + (i64.eq + (get_local $2) + (i64.const 4611686018427387904) + ) + (br $switch-case) + (br $switch-default) + ) + ) + ) + (nop) + ) + (return + (i32.const 40) + ) + ) + (set_local $$waka + (i32.const 1) + ) + ) + (block $switch1 + (block $switch-default4 + (block $switch-case3 + (block $switch-case2 + (set_local $3 + (i32.const 100) + ) + (if + (i32.eq + (get_local $3) + (i32.const 214748364) + ) + (br $switch-case3) + (if + (i32.eq + (get_local $3) + (i32.const 107374182) + ) + (br $switch-case2) + (br $switch-default4) + ) + ) + ) + (nop) + ) + (return + (i32.const 41) + ) + ) + (set_local $$waka + (i32.const 1001) + ) + ) + (block $switch5 + (block $switch-case7 + (block $switch-case6 + (set_local $4 + (get_local $$a444) + ) + (if + (i64.eq + (get_local $4) + (i64.const -9223372036854775808) + ) + (br $switch-case7) + (if + (i64.eq + (get_local $4) + (i64.const 4611686018427387904) + ) + (br $switch-case6) + (br $switch5) + ) + ) + ) + (nop) + ) + (return + (i32.const 42) + ) + ) + (block $switch8 + (block $switch-case10 + (block $switch-case9 + (set_local $5 + (i32.const 100) + ) + (if + (i32.eq + (get_local $5) + (i32.const 214748364) + ) + (br $switch-case10) + (if + (i32.eq + (get_local $5) + (i32.const 107374182) + ) + (br $switch-case9) + (br $switch8) + ) + ) + ) + (nop) + ) + (return + (i32.const 43) + ) + ) + (return + (i32.const 44) + ) + ) + (func $_memchr (; 34 ;) (param $$src i32) (param $$c i32) (param $$n i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 i32) + (local $$and i32) + (local $$and15 i32) + (local $$and16 i32) + (local $$and39 i32) + (local $$cmp i32) + (local $$cmp11 i32) + (local $$cmp1132 i32) + (local $$cmp28 i32) + (local $$cmp8 i32) + (local $$cond i32) + (local $$conv1 i32) + (local $$dec i32) + (local $$dec34 i32) + (local $$incdec$ptr i32) + (local $$incdec$ptr21 i32) + (local $$incdec$ptr33 i32) + (local $$lnot i32) + (local $$mul i32) + (local $$n$addr$0$lcssa i32) + (local $$n$addr$0$lcssa52 i32) + (local $$n$addr$043 i32) + (local $$n$addr$1$lcssa i32) + (local $$n$addr$133 i32) + (local $$n$addr$227 i32) + (local $$n$addr$3 i32) + (local $$neg i32) + (local $$or$cond i32) + (local $$or$cond42 i32) + (local $$s$0$lcssa i32) + (local $$s$0$lcssa53 i32) + (local $$s$044 i32) + (local $$s$128 i32) + (local $$s$2 i32) + (local $$sub i32) + (local $$sub22 i32) + (local $$tobool i32) + (local $$tobool2 i32) + (local $$tobool2$lcssa i32) + (local $$tobool241 i32) + (local $$tobool25 i32) + (local $$tobool2526 i32) + (local $$tobool36 i32) + (local $$tobool40 i32) + (local $$w$0$lcssa i32) + (local $$w$034 i32) + (local $$xor i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$conv1 + (i32.and + (get_local $$c) + (i32.const 255) + ) + ) + (set_local $$0 + (get_local $$src) + ) + (set_local $$and39 + (i32.and + (get_local $$0) + (i32.const 3) + ) + ) + (set_local $$tobool40 + (i32.ne + (get_local $$and39) + (i32.const 0) + ) + ) + (set_local $$tobool241 + (i32.ne + (get_local $$n) + (i32.const 0) + ) + ) + (set_local $$or$cond42 + (i32.and + (get_local $$tobool241) + (get_local $$tobool40) + ) + ) + (block $label$break$L1 + (if + (get_local $$or$cond42) + (block + (set_local $$1 + (i32.and + (get_local $$c) + (i32.const 255) + ) + ) + (set_local $$n$addr$043 + (get_local $$n) + ) + (set_local $$s$044 + (get_local $$src) + ) + (loop $while-in + (block $while-out + (set_local $$2 + (i32.load8_s + (get_local $$s$044) + ) + ) + (set_local $$cmp + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$2) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $$1) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $$n$addr$0$lcssa52 + (get_local $$n$addr$043) + ) + (set_local $$s$0$lcssa53 + (get_local $$s$044) + ) + (set_local $label + (i32.const 6) + ) + (br $label$break$L1) + ) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$s$044) + (i32.const 1) + ) + ) + (set_local $$dec + (i32.add + (get_local $$n$addr$043) + (i32.const -1) + ) + ) + (set_local $$3 + (get_local $$incdec$ptr) + ) + (set_local $$and + (i32.and + (get_local $$3) + (i32.const 3) + ) + ) + (set_local $$tobool + (i32.ne + (get_local $$and) + (i32.const 0) + ) + ) + (set_local $$tobool2 + (i32.ne + (get_local $$dec) + (i32.const 0) + ) + ) + (set_local $$or$cond + (i32.and + (get_local $$tobool2) + (get_local $$tobool) + ) + ) + (if + (get_local $$or$cond) + (block + (set_local $$n$addr$043 + (get_local $$dec) + ) + (set_local $$s$044 + (get_local $$incdec$ptr) + ) + ) + (block + (set_local $$n$addr$0$lcssa + (get_local $$dec) + ) + (set_local $$s$0$lcssa + (get_local $$incdec$ptr) + ) + (set_local $$tobool2$lcssa + (get_local $$tobool2) + ) + (set_local $label + (i32.const 5) + ) + (br $while-out) + ) + ) + (br $while-in) + ) + ) + ) + (block + (set_local $$n$addr$0$lcssa + (get_local $$n) + ) + (set_local $$s$0$lcssa + (get_local $$src) + ) + (set_local $$tobool2$lcssa + (get_local $$tobool241) + ) + (set_local $label + (i32.const 5) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 5) + ) + (if + (get_local $$tobool2$lcssa) + (block + (set_local $$n$addr$0$lcssa52 + (get_local $$n$addr$0$lcssa) + ) + (set_local $$s$0$lcssa53 + (get_local $$s$0$lcssa) + ) + (set_local $label + (i32.const 6) + ) + ) + (block + (set_local $$n$addr$3 + (i32.const 0) + ) + (set_local $$s$2 + (get_local $$s$0$lcssa) + ) + ) + ) + ) + (block $label$break$L8 + (if + (i32.eq + (get_local $label) + (i32.const 6) + ) + (block + (set_local $$4 + (i32.load8_s + (get_local $$s$0$lcssa53) + ) + ) + (set_local $$5 + (i32.and + (get_local $$c) + (i32.const 255) + ) + ) + (set_local $$cmp8 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$4) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $$5) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $$cmp8) + (block + (set_local $$n$addr$3 + (get_local $$n$addr$0$lcssa52) + ) + (set_local $$s$2 + (get_local $$s$0$lcssa53) + ) + ) + (block + (set_local $$mul + (i32.mul + (get_local $$conv1) + (i32.const 16843009) + ) + ) + (set_local $$cmp1132 + (i32.gt_u + (get_local $$n$addr$0$lcssa52) + (i32.const 3) + ) + ) + (block $label$break$L11 + (if + (get_local $$cmp1132) + (block + (set_local $$n$addr$133 + (get_local $$n$addr$0$lcssa52) + ) + (set_local $$w$034 + (get_local $$s$0$lcssa53) + ) + (loop $while-in3 + (block $while-out2 + (set_local $$6 + (i32.load + (get_local $$w$034) + ) + ) + (set_local $$xor + (i32.xor + (get_local $$6) + (get_local $$mul) + ) + ) + (set_local $$sub + (i32.add + (get_local $$xor) + (i32.const -16843009) + ) + ) + (set_local $$neg + (i32.and + (get_local $$xor) + (i32.const -2139062144) + ) + ) + (set_local $$and15 + (i32.xor + (get_local $$neg) + (i32.const -2139062144) + ) + ) + (set_local $$and16 + (i32.and + (get_local $$and15) + (get_local $$sub) + ) + ) + (set_local $$lnot + (i32.eq + (get_local $$and16) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$lnot) + ) + (br $while-out2) + ) + (set_local $$incdec$ptr21 + (i32.add + (get_local $$w$034) + (i32.const 4) + ) + ) + (set_local $$sub22 + (i32.add + (get_local $$n$addr$133) + (i32.const -4) + ) + ) + (set_local $$cmp11 + (i32.gt_u + (get_local $$sub22) + (i32.const 3) + ) + ) + (if + (get_local $$cmp11) + (block + (set_local $$n$addr$133 + (get_local $$sub22) + ) + (set_local $$w$034 + (get_local $$incdec$ptr21) + ) + ) + (block + (set_local $$n$addr$1$lcssa + (get_local $$sub22) + ) + (set_local $$w$0$lcssa + (get_local $$incdec$ptr21) + ) + (set_local $label + (i32.const 11) + ) + (br $label$break$L11) + ) + ) + (br $while-in3) + ) + ) + (set_local $$n$addr$227 + (get_local $$n$addr$133) + ) + (set_local $$s$128 + (get_local $$w$034) + ) + ) + (block + (set_local $$n$addr$1$lcssa + (get_local $$n$addr$0$lcssa52) + ) + (set_local $$w$0$lcssa + (get_local $$s$0$lcssa53) + ) + (set_local $label + (i32.const 11) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 11) + ) + (block + (set_local $$tobool2526 + (i32.eq + (get_local $$n$addr$1$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$tobool2526) + (block + (set_local $$n$addr$3 + (i32.const 0) + ) + (set_local $$s$2 + (get_local $$w$0$lcssa) + ) + (br $label$break$L8) + ) + (block + (set_local $$n$addr$227 + (get_local $$n$addr$1$lcssa) + ) + (set_local $$s$128 + (get_local $$w$0$lcssa) + ) + ) + ) + ) + ) + (loop $while-in5 + (block $while-out4 + (set_local $$7 + (i32.load8_s + (get_local $$s$128) + ) + ) + (set_local $$cmp28 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$7) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $$5) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $$cmp28) + (block + (set_local $$n$addr$3 + (get_local $$n$addr$227) + ) + (set_local $$s$2 + (get_local $$s$128) + ) + (br $label$break$L8) + ) + ) + (set_local $$incdec$ptr33 + (i32.add + (get_local $$s$128) + (i32.const 1) + ) + ) + (set_local $$dec34 + (i32.add + (get_local $$n$addr$227) + (i32.const -1) + ) + ) + (set_local $$tobool25 + (i32.eq + (get_local $$dec34) + (i32.const 0) + ) + ) + (if + (get_local $$tobool25) + (block + (set_local $$n$addr$3 + (i32.const 0) + ) + (set_local $$s$2 + (get_local $$incdec$ptr33) + ) + (br $while-out4) + ) + (block + (set_local $$n$addr$227 + (get_local $$dec34) + ) + (set_local $$s$128 + (get_local $$incdec$ptr33) + ) + ) + ) + (br $while-in5) + ) + ) + ) + ) + ) + ) + ) + (set_local $$tobool36 + (i32.ne + (get_local $$n$addr$3) + (i32.const 0) + ) + ) + (set_local $$cond + (if (result i32) + (get_local $$tobool36) + (get_local $$s$2) + (i32.const 0) + ) + ) + (return + (get_local $$cond) + ) + ) + (func $switch64_big_condition1 (; 35 ;) (param $$x i64) + (local $1 i64) + (block $switch + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default + (i32.wrap/i64 + (block (result i64) + (set_local $1 + (i64.sub + (get_local $$x) + (i64.const 9218868437227405312) + ) + ) + (br_if $switch-default + (i32.wrap/i64 + (i64.shr_u + (get_local $1) + (i64.const 32) + ) + ) + ) + (get_local $1) + ) + ) + ) + ) + (block + (call $abort) + (br $switch) + ) + ) + (return) + ) + ) + (func $switch64_big_condition2 (; 36 ;) (param $$x i64) + (local $1 i64) + (block $switch + (block $switch-case + (br_table $switch-case $switch + (i32.wrap/i64 + (block (result i64) + (set_local $1 + (i64.sub + (get_local $$x) + (i64.const 9218868437227405312) + ) + ) + (br_if $switch + (i32.wrap/i64 + (i64.shr_u + (get_local $1) + (i64.const 32) + ) + ) + ) + (get_local $1) + ) + ) + ) + ) + (block + (call $abort) + (br $switch) + ) + ) + ) + (func $keepAlive (; 37 ;) + (call $loads) + (call $loads) + (call $stores) + (call $stores) + (call $test) + (call $test) + (drop + (call $imports) + ) + (drop + (call $imports) + ) + (call $arg + (i64.const 0) + ) + (call $arg + (i64.const 0) + ) + (drop + (call $call1 + (i64.const 0) + ) + ) + (drop + (call $call1 + (i64.const 0) + ) + ) + (drop + (call $call2 + (i64.const 0) + ) + ) + (drop + (call $call2 + (i64.const 0) + ) + ) + (drop + (call $returnCastConst) + ) + (drop + (call $returnCastConst) + ) + (drop + (call $ifValue64 + (i64.const 0) + (i64.const 0) + ) + ) + (drop + (call $ifValue64 + (i64.const 0) + (i64.const 0) + ) + ) + (drop + (call $ifValue32 + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call $ifValue32 + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call $switch64 + (i64.const 0) + ) + ) + (drop + (call $switch64 + (i64.const 0) + ) + ) + (call $unreachable_leftovers + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + (call $unreachable_leftovers + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + (drop + (call $_memchr + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call $switch64TOOMUCH + (i64.const 0) + ) + ) + (call $switch64_big_condition1 + (i64.const 0) + ) + (call $switch64_big_condition2 + (i64.const 0) + ) + ) + (func $__emscripten_dceable_type_decls (; 38 ;) + (drop + (call $legalfunc$_fabsf + (f32.const 0) + ) + ) + (drop + (call $legalfunc$do_i64) + ) + ) + (func $legalstub$illegalParam (; 39 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 f64) + (call $illegalParam + (get_local $0) + (i64.or + (i64.extend_u/i32 + (get_local $1) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $2) + ) + (i64.const 32) + ) + ) + (get_local $3) + ) + ) + (func $legalstub$illegalResult (; 40 ;) (result i32) + (local $0 i64) + (set_local $0 + (call $illegalResult) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $0) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $0) + ) + ) + (func $legalfunc$illegalImport (; 41 ;) (param $0 f64) (param $1 i64) (param $2 i32) + (call $legalimport$illegalImport + (get_local $0) + (i32.wrap/i64 + (get_local $1) + ) + (i32.wrap/i64 + (i64.shr_u + (get_local $1) + (i64.const 32) + ) + ) + (get_local $2) + ) + ) + (func $legalfunc$illegalImportResult (; 42 ;) (result i64) + (i64.or + (i64.extend_u/i32 + (call $legalimport$illegalImportResult) + ) + (i64.shl + (i64.extend_u/i32 + (get_global $tempRet0) + ) + (i64.const 32) + ) + ) + ) + (func $legalfunc$_fabsf (; 43 ;) (param $0 f32) (result f32) + (f32.demote/f64 + (call $legalimport$_fabsf + (f64.promote/f32 + (get_local $0) + ) + ) + ) + ) + (func $legalfunc$do_i64 (; 44 ;) (result i64) + (i64.or + (i64.extend_u/i32 + (call $legalimport$do_i64) + ) + (i64.shl + (i64.extend_u/i32 + (get_global $tempRet0) + ) + (i64.const 32) + ) + ) + ) +) diff --git a/src/binaryen/test/wasm-only.fromasm.imprecise b/src/binaryen/test/wasm-only.fromasm.imprecise new file mode 100644 index 0000000000..8aab435efd --- /dev/null +++ b/src/binaryen/test/wasm-only.fromasm.imprecise @@ -0,0 +1,822 @@ +(module + (type $FUNCSIG$vdji (func (param f64 i64 i32))) + (type $FUNCSIG$j (func (result i64))) + (type $FUNCSIG$ff (func (param f32) (result f32))) + (type $FUNCSIG$v (func)) + (type $legaltype$illegalImport (func (param f64 i32 i32 i32))) + (type $legaltype$illegalImportResult (func (result i32))) + (type $legaltype$_fabsf (func (param f64) (result f64))) + (type $legaltype$do_i64 (func (result i32))) + (import "env" "illegalImport" (func $illegalImport (param f64 i64 i32))) + (import "env" "illegalImportResult" (func $illegalImportResult (result i64))) + (import "env" "_fabsf" (func $_fabsf (param f32) (result f32))) + (import "env" "do_i64" (func $do_i64 (result i64))) + (import "env" "abort" (func $abort)) + (import "env" "illegalImport" (func $legalimport$illegalImport (param f64 i32 i32 i32))) + (import "env" "illegalImportResult" (func $legalimport$illegalImportResult (result i32))) + (import "env" "_fabsf" (func $legalimport$_fabsf (param f64) (result f64))) + (import "env" "do_i64" (func $legalimport$do_i64 (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 3 3 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $tempRet0 (mut i32) (i32.const 0)) + (elem (get_global $tableBase) $legalfunc$illegalImport $legalfunc$_fabsf $legalfunc$do_i64) + (export "test64" (func $test64)) + (export "illegalParam" (func $legalstub$illegalParam)) + (export "illegalResult" (func $legalstub$result)) + (export "keepAlive" (func $keepAlive)) + (func $loads (; 9 ;) + (nop) + ) + (func $stores (; 10 ;) + (local $0 i32) + (local $1 f64) + (local $2 f32) + (i32.store8 + (i32.const 100) + (get_local $0) + ) + (i32.store8 + (i32.const 101) + (get_local $0) + ) + (i32.store16 + (i32.const 102) + (get_local $0) + ) + (i32.store16 + (i32.const 103) + (get_local $0) + ) + (i32.store16 align=1 + (i32.const 104) + (get_local $0) + ) + (i32.store16 + (i32.const 105) + (get_local $0) + ) + (i32.store + (i32.const 106) + (get_local $0) + ) + (i32.store + (i32.const 107) + (get_local $0) + ) + (i32.store align=1 + (i32.const 108) + (get_local $0) + ) + (i32.store align=2 + (i32.const 109) + (get_local $0) + ) + (i32.store + (i32.const 110) + (get_local $0) + ) + (f32.store + (i32.const 111) + (get_local $2) + ) + (f32.store + (i32.const 112) + (get_local $2) + ) + (f32.store align=1 + (i32.const 113) + (get_local $2) + ) + (f32.store align=2 + (i32.const 114) + (get_local $2) + ) + (f32.store + (i32.const 115) + (get_local $2) + ) + (f64.store + (i32.const 116) + (get_local $1) + ) + (f64.store + (i32.const 117) + (get_local $1) + ) + (f64.store align=1 + (i32.const 118) + (get_local $1) + ) + (f64.store align=2 + (i32.const 119) + (get_local $1) + ) + (f64.store align=4 + (i32.const 120) + (get_local $1) + ) + (f64.store + (i32.const 121) + (get_local $1) + ) + ) + (func $test (; 11 ;) + (local $0 f32) + (local $1 i32) + (set_local $1 + (i32.reinterpret/f32 + (get_local $0) + ) + ) + ) + (func $test64 (; 12 ;) + (local $0 i64) + (local $1 i32) + (local $2 i64) + (set_local $2 + (i64.const 128849018897) + ) + (i64.store + (i32.const 120) + (tee_local $0 + (i64.load + (i32.const 120) + ) + ) + ) + (i64.store + (i32.const 120) + (get_local $0) + ) + (i64.store align=2 + (i32.const 120) + (get_local $0) + ) + (i64.store align=4 + (i32.const 120) + (get_local $0) + ) + (i64.store + (i32.const 120) + (get_local $0) + ) + (set_local $1 + (i32.wrap/i64 + (get_local $0) + ) + ) + (set_local $0 + (i64.extend_u/i32 + (get_local $1) + ) + ) + ) + (func $imports (; 13 ;) (result i64) + (call $legalfunc$illegalImport + (f64.const -3.13159) + (i64.const 94489280523) + (i32.const -33) + ) + (call $legalfunc$illegalImportResult) + ) + (func $arg (; 14 ;) (param $0 i64) + (i64.store + (i32.const 100) + (get_local $0) + ) + (call $arg + (get_local $0) + ) + ) + (func $illegalParam (; 15 ;) (param $0 i32) (param $1 i64) (param $2 f64) + (i64.store + (i32.const 100) + (get_local $1) + ) + (call $illegalParam + (i32.const 0) + (get_local $1) + (f64.const 12.34) + ) + ) + (func $result (; 16 ;) (result i64) + (i64.const 8589934593) + ) + (func $call1 (; 17 ;) (param $0 i64) (result i64) + (call $call1 + (get_local $0) + ) + ) + (func $call2 (; 18 ;) (param $0 i64) (result i64) + (drop + (call $call2 + (call $call2 + (get_local $0) + ) + ) + ) + (i64.const 245127260211081) + ) + (func $returnCastConst (; 19 ;) (result i64) + (i64.const 0) + ) + (func $ifValue64 (; 20 ;) (param $0 i64) (param $1 i64) (result i64) + (call $call2 + (get_local $0) + ) + ) + (func $ifValue32 (; 21 ;) (param $0 i32) (param $1 i32) (result i32) + (call $ifValue32 + (get_local $0) + (get_local $1) + ) + ) + (func $switch64 (; 22 ;) (param $0 i64) (result i32) + (block $switch (result i32) + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_if $switch-default + (i32.wrap/i64 + (i64.shr_u + (tee_local $0 + (i64.sub + (get_local $0) + (i64.const 42949672965) + ) + ) + (i64.const 32) + ) + ) + ) + (br_table $switch-case0 $switch-default $switch-case $switch-default + (i32.wrap/i64 + (get_local $0) + ) + ) + ) + (br $switch + (i32.const 11000) + ) + ) + (br $switch + (i32.const 10) + ) + ) + (i32.const 1) + ) + ) + (func $unreachable_leftovers (; 23 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (block $__rjto$0 + (if + (i32.eqz + (get_local $1) + ) + (block + (br_if $__rjto$0 + (get_local $2) + ) + (i32.store + (get_local $0) + (i32.const -2) + ) + (return) + ) + ) + (i32.store + (get_local $0) + (i32.const -1) + ) + ) + ) + (func $switch64TOOMUCH (; 24 ;) (param $0 i64) (result i32) + (local $1 i32) + (local $2 i64) + (block $switch-default + (if + (i64.ne + (tee_local $2 + (get_local $0) + ) + (i64.const -9223372036854775808) + ) + (br_if $switch-default + (i64.ne + (get_local $2) + (i64.const 4611686018427387904) + ) + ) + ) + (return + (i32.const 40) + ) + ) + (block $switch-default4 + (if + (i32.ne + (tee_local $1 + (i32.const 100) + ) + (i32.const 214748364) + ) + (br_if $switch-default4 + (i32.ne + (get_local $1) + (i32.const 107374182) + ) + ) + ) + (return + (i32.const 41) + ) + ) + (block $switch5 + (if + (i64.ne + (get_local $0) + (i64.const -9223372036854775808) + ) + (br_if $switch5 + (i64.ne + (get_local $0) + (i64.const 4611686018427387904) + ) + ) + ) + (return + (i32.const 42) + ) + ) + (block $switch8 + (if + (i32.ne + (tee_local $1 + (i32.const 100) + ) + (i32.const 214748364) + ) + (br_if $switch8 + (i32.ne + (get_local $1) + (i32.const 107374182) + ) + ) + ) + (return + (i32.const 43) + ) + ) + (i32.const 44) + ) + (func $_memchr (; 25 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $5 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (block $label$break$L8 + (block $__rjti$2 + (if + (i32.and + (tee_local $4 + (i32.ne + (get_local $2) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.const 0) + ) + ) + (block + (set_local $4 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (br_if $__rjti$2 + (i32.eq + (i32.load8_u + (get_local $2) + ) + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + ) + (br_if $while-in + (i32.and + (tee_local $0 + (i32.ne + (tee_local $3 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 3) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (set_local $0 + (i32.const 0) + ) + (br $label$break$L8) + ) + (set_local $0 + (get_local $3) + ) + (if + (i32.ne + (i32.load8_u + (get_local $2) + ) + (tee_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (block + (set_local $3 + (i32.mul + (get_local $5) + (i32.const 16843009) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.le_u + (get_local $0) + (i32.const 3) + ) + ) + (loop $while-in3 + (if + (i32.eqz + (i32.and + (i32.xor + (i32.and + (tee_local $4 + (i32.xor + (i32.load + (get_local $2) + ) + (get_local $3) + ) + ) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $4) + (i32.const -16843009) + ) + ) + ) + (block + (set_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (br_if $while-in3 + (i32.gt_u + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + (i32.const 3) + ) + ) + (br $__rjti$0) + ) + ) + ) + (br $__rjto$0) + ) + (if + (i32.eqz + (get_local $0) + ) + (block + (set_local $0 + (i32.const 0) + ) + (br $label$break$L8) + ) + ) + ) + (loop $while-in5 + (br_if $label$break$L8 + (i32.eq + (i32.load8_u + (get_local $2) + ) + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br_if $while-in5 + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -1) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + ) + (select + (get_local $2) + (i32.const 0) + (get_local $0) + ) + ) + (func $switch64_big_condition1 (; 26 ;) (param $0 i64) + (local $1 i64) + (block $switch-default + (block $switch-case + (br_if $switch-default + (i32.wrap/i64 + (i64.shr_u + (tee_local $1 + (i64.sub + (get_local $0) + (i64.const 9218868437227405312) + ) + ) + (i64.const 32) + ) + ) + ) + (br_table $switch-case $switch-default + (i32.wrap/i64 + (get_local $1) + ) + ) + ) + (call $abort) + ) + ) + (func $keepAlive (; 27 ;) + (call $loads) + (call $loads) + (call $stores) + (call $stores) + (call $test) + (call $test) + (drop + (call $imports) + ) + (drop + (call $imports) + ) + (call $arg + (i64.const 0) + ) + (call $arg + (i64.const 0) + ) + (drop + (call $call1 + (i64.const 0) + ) + ) + (drop + (call $call1 + (i64.const 0) + ) + ) + (drop + (call $call2 + (i64.const 0) + ) + ) + (drop + (call $call2 + (i64.const 0) + ) + ) + (drop + (call $returnCastConst) + ) + (drop + (call $returnCastConst) + ) + (drop + (call $ifValue64 + (i64.const 0) + (i64.const 0) + ) + ) + (drop + (call $ifValue64 + (i64.const 0) + (i64.const 0) + ) + ) + (drop + (call $ifValue32 + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call $ifValue32 + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call $switch64 + (i64.const 0) + ) + ) + (drop + (call $switch64 + (i64.const 0) + ) + ) + (call $unreachable_leftovers + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + (call $unreachable_leftovers + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + (drop + (call $_memchr + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call $switch64TOOMUCH + (i64.const 0) + ) + ) + (call $switch64_big_condition1 + (i64.const 0) + ) + (call $switch64_big_condition1 + (i64.const 0) + ) + ) + (func $legalstub$illegalParam (; 28 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 f64) + (call $illegalParam + (get_local $0) + (i64.or + (i64.extend_u/i32 + (get_local $1) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $2) + ) + (i64.const 32) + ) + ) + (get_local $3) + ) + ) + (func $legalstub$result (; 29 ;) (result i32) + (local $0 i64) + (set_local $0 + (call $result) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $0) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $0) + ) + ) + (func $legalfunc$illegalImport (; 30 ;) (param $0 f64) (param $1 i64) (param $2 i32) + (call $legalimport$illegalImport + (get_local $0) + (i32.wrap/i64 + (get_local $1) + ) + (i32.wrap/i64 + (i64.shr_u + (get_local $1) + (i64.const 32) + ) + ) + (get_local $2) + ) + ) + (func $legalfunc$illegalImportResult (; 31 ;) (result i64) + (i64.or + (i64.extend_u/i32 + (call $legalimport$illegalImportResult) + ) + (i64.shl + (i64.extend_u/i32 + (get_global $tempRet0) + ) + (i64.const 32) + ) + ) + ) + (func $legalfunc$_fabsf (; 32 ;) (param $0 f32) (result f32) + (f32.demote/f64 + (call $legalimport$_fabsf + (f64.promote/f32 + (get_local $0) + ) + ) + ) + ) + (func $legalfunc$do_i64 (; 33 ;) (result i64) + (i64.or + (i64.extend_u/i32 + (call $legalimport$do_i64) + ) + (i64.shl + (i64.extend_u/i32 + (get_global $tempRet0) + ) + (i64.const 32) + ) + ) + ) +) diff --git a/src/binaryen/test/wasm-only.fromasm.imprecise.no-opts b/src/binaryen/test/wasm-only.fromasm.imprecise.no-opts new file mode 100644 index 0000000000..d994b553f3 --- /dev/null +++ b/src/binaryen/test/wasm-only.fromasm.imprecise.no-opts @@ -0,0 +1,1757 @@ +(module + (type $FUNCSIG$vdji (func (param f64 i64 i32))) + (type $FUNCSIG$j (func (result i64))) + (type $FUNCSIG$ff (func (param f32) (result f32))) + (type $FUNCSIG$v (func)) + (type $legaltype$illegalImport (func (param f64 i32 i32 i32))) + (type $legaltype$illegalImportResult (func (result i32))) + (type $legaltype$_fabsf (func (param f64) (result f64))) + (type $legaltype$do_i64 (func (result i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "illegalImport" (func $illegalImport (param f64 i64 i32))) + (import "env" "illegalImportResult" (func $illegalImportResult (result i64))) + (import "env" "_fabsf" (func $_fabsf (param f32) (result f32))) + (import "env" "do_i64" (func $do_i64 (result i64))) + (import "env" "abort" (func $abort)) + (import "env" "illegalImport" (func $legalimport$illegalImport (param f64 i32 i32 i32))) + (import "env" "illegalImportResult" (func $legalimport$illegalImportResult (result i32))) + (import "env" "_fabsf" (func $legalimport$_fabsf (param f64) (result f64))) + (import "env" "do_i64" (func $legalimport$do_i64 (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 3 3 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $tempRet0 (mut i32) (i32.const 0)) + (elem (get_global $tableBase) $legalfunc$illegalImport $legalfunc$_fabsf $legalfunc$do_i64) + (export "test64" (func $test64)) + (export "illegalParam" (func $legalstub$illegalParam)) + (export "illegalResult" (func $legalstub$illegalResult)) + (export "keepAlive" (func $keepAlive)) + (func $loads (; 9 ;) + (local $i i32) + (local $f f32) + (local $d f64) + (set_local $i + (i32.load8_s + (i32.const 100) + ) + ) + (set_local $i + (i32.load8_s + (i32.const 101) + ) + ) + (set_local $i + (i32.load16_s + (i32.const 102) + ) + ) + (set_local $i + (i32.load16_s + (i32.const 103) + ) + ) + (set_local $i + (i32.load16_s align=1 + (i32.const 104) + ) + ) + (set_local $i + (i32.load16_s + (i32.const 105) + ) + ) + (set_local $i + (i32.load + (i32.const 106) + ) + ) + (set_local $i + (i32.load + (i32.const 107) + ) + ) + (set_local $i + (i32.load align=1 + (i32.const 108) + ) + ) + (set_local $i + (i32.load align=2 + (i32.const 109) + ) + ) + (set_local $i + (i32.load + (i32.const 110) + ) + ) + (set_local $f + (f32.load + (i32.const 111) + ) + ) + (set_local $f + (f32.load + (i32.const 112) + ) + ) + (set_local $f + (f32.load align=1 + (i32.const 113) + ) + ) + (set_local $f + (f32.load align=2 + (i32.const 114) + ) + ) + (set_local $f + (f32.load + (i32.const 115) + ) + ) + (set_local $d + (f64.load + (i32.const 116) + ) + ) + (set_local $d + (f64.load + (i32.const 117) + ) + ) + (set_local $d + (f64.load align=1 + (i32.const 118) + ) + ) + (set_local $d + (f64.load align=2 + (i32.const 119) + ) + ) + (set_local $d + (f64.load align=4 + (i32.const 120) + ) + ) + (set_local $d + (f64.load + (i32.const 121) + ) + ) + ) + (func $stores (; 10 ;) + (local $i i32) + (local $f f32) + (local $d f64) + (i32.store8 + (i32.const 100) + (get_local $i) + ) + (i32.store8 + (i32.const 101) + (get_local $i) + ) + (i32.store16 + (i32.const 102) + (get_local $i) + ) + (i32.store16 + (i32.const 103) + (get_local $i) + ) + (i32.store16 align=1 + (i32.const 104) + (get_local $i) + ) + (i32.store16 + (i32.const 105) + (get_local $i) + ) + (i32.store + (i32.const 106) + (get_local $i) + ) + (i32.store + (i32.const 107) + (get_local $i) + ) + (i32.store align=1 + (i32.const 108) + (get_local $i) + ) + (i32.store align=2 + (i32.const 109) + (get_local $i) + ) + (i32.store + (i32.const 110) + (get_local $i) + ) + (f32.store + (i32.const 111) + (get_local $f) + ) + (f32.store + (i32.const 112) + (get_local $f) + ) + (f32.store align=1 + (i32.const 113) + (get_local $f) + ) + (f32.store align=2 + (i32.const 114) + (get_local $f) + ) + (f32.store + (i32.const 115) + (get_local $f) + ) + (f64.store + (i32.const 116) + (get_local $d) + ) + (f64.store + (i32.const 117) + (get_local $d) + ) + (f64.store align=1 + (i32.const 118) + (get_local $d) + ) + (f64.store align=2 + (i32.const 119) + (get_local $d) + ) + (f64.store align=4 + (i32.const 120) + (get_local $d) + ) + (f64.store + (i32.const 121) + (get_local $d) + ) + ) + (func $test (; 11 ;) + (local $i i32) + (local $j i64) + (local $f f32) + (local $f1 f32) + (local $f2 f32) + (local $d1 f64) + (local $d2 f64) + (set_local $i + (i32.reinterpret/f32 + (get_local $f) + ) + ) + (set_local $f + (f32.reinterpret/i32 + (get_local $i) + ) + ) + (set_local $i + (i32.ctz + (get_local $i) + ) + ) + (set_local $i + (i32.popcnt + (get_local $i) + ) + ) + (set_local $j + (i64.popcnt + (get_local $j) + ) + ) + (set_local $f1 + (f32.copysign + (get_local $f1) + (get_local $f2) + ) + ) + (set_local $d1 + (f64.copysign + (get_local $d1) + (get_local $d2) + ) + ) + ) + (func $test64 (; 12 ;) + (local $x i64) + (local $y i64) + (local $z i32) + (local $int32 i32) + (local $float32 f32) + (local $float64 f64) + (set_local $x + (i64.const 100) + ) + (set_local $y + (i64.const 128849018897) + ) + (set_local $x + (i64.add + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.sub + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.mul + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.div_u + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.div_s + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.rem_u + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.rem_s + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.and + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.or + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.xor + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.shl + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.shr_s + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.shr_u + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.load + (i32.const 120) + ) + ) + (set_local $x + (i64.load + (i32.const 120) + ) + ) + (set_local $x + (i64.load align=2 + (i32.const 120) + ) + ) + (set_local $x + (i64.load align=4 + (i32.const 120) + ) + ) + (set_local $x + (i64.load + (i32.const 120) + ) + ) + (i64.store + (i32.const 120) + (get_local $x) + ) + (i64.store + (i32.const 120) + (get_local $x) + ) + (i64.store align=2 + (i32.const 120) + (get_local $x) + ) + (i64.store align=4 + (i32.const 120) + (get_local $x) + ) + (i64.store + (i32.const 120) + (get_local $x) + ) + (set_local $z + (i64.eq + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.ne + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.le_u + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.le_s + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.ge_u + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.ge_s + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.lt_u + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.lt_s + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.gt_u + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.gt_s + (get_local $x) + (get_local $y) + ) + ) + (set_local $int32 + (i32.wrap/i64 + (get_local $x) + ) + ) + (set_local $x + (i64.extend_s/i32 + (get_local $int32) + ) + ) + (set_local $x + (i64.extend_u/i32 + (get_local $int32) + ) + ) + (set_local $float32 + (f32.convert_s/i64 + (get_local $x) + ) + ) + (set_local $float64 + (f64.convert_s/i64 + (get_local $x) + ) + ) + (set_local $float32 + (f32.convert_u/i64 + (get_local $x) + ) + ) + (set_local $float64 + (f64.convert_u/i64 + (get_local $x) + ) + ) + (set_local $x + (i64.trunc_s/f32 + (get_local $float32) + ) + ) + (set_local $x + (i64.trunc_s/f64 + (get_local $float64) + ) + ) + (set_local $x + (i64.trunc_u/f32 + (get_local $float32) + ) + ) + (set_local $x + (i64.trunc_u/f64 + (get_local $float64) + ) + ) + (set_local $x + (i64.reinterpret/f64 + (get_local $float64) + ) + ) + (set_local $float64 + (f64.reinterpret/i64 + (get_local $x) + ) + ) + (set_local $x + (i64.clz + (get_local $y) + ) + ) + (set_local $y + (i64.ctz + (get_local $x) + ) + ) + ) + (func $imports (; 13 ;) (result i64) + (call $legalfunc$illegalImport + (f64.const -3.13159) + (i64.const 94489280523) + (i32.const -33) + ) + (return + (call $legalfunc$illegalImportResult) + ) + ) + (func $arg (; 14 ;) (param $x i64) + (i64.store + (i32.const 100) + (get_local $x) + ) + (call $arg + (get_local $x) + ) + ) + (func $illegalParam (; 15 ;) (param $a i32) (param $x i64) (param $b f64) + (i64.store + (i32.const 100) + (get_local $x) + ) + (call $illegalParam + (i32.const 0) + (get_local $x) + (f64.const 12.34) + ) + ) + (func $result (; 16 ;) (result i64) + (return + (i64.const 8589934593) + ) + ) + (func $illegalResult (; 17 ;) (result i64) + (return + (i64.const 8589934593) + ) + ) + (func $call1 (; 18 ;) (param $x i64) (result i64) + (local $y i64) + (set_local $y + (call $call1 + (get_local $x) + ) + ) + (return + (get_local $y) + ) + ) + (func $call2 (; 19 ;) (param $x i64) (result i64) + (drop + (call $call2 + (call $call2 + (get_local $x) + ) + ) + ) + (return + (i64.const 245127260211081) + ) + ) + (func $returnCastConst (; 20 ;) (result i64) + (return + (i64.const 0) + ) + ) + (func $ifValue64 (; 21 ;) (param $$4 i64) (param $$6 i64) (result i64) + (local $$$0 i64) + (local $$9 i64) + (local $$10 i64) + (if + (i32.wrap/i64 + (get_local $$6) + ) + (block + (set_local $$9 + (call $call2 + (get_local $$4) + ) + ) + (set_local $$$0 + (get_local $$9) + ) + ) + (block + (set_local $$10 + (call $call2 + (get_local $$4) + ) + ) + (set_local $$$0 + (get_local $$10) + ) + ) + ) + (return + (get_local $$$0) + ) + ) + (func $ifValue32 (; 22 ;) (param $$4 i32) (param $$6 i32) (result i32) + (local $$$0 i32) + (local $$9 i32) + (local $$10 i32) + (if + (get_local $$6) + (block + (set_local $$9 + (call $ifValue32 + (get_local $$4) + (get_local $$6) + ) + ) + (set_local $$$0 + (get_local $$9) + ) + ) + (block + (set_local $$10 + (call $ifValue32 + (get_local $$4) + (get_local $$6) + ) + ) + (set_local $$$0 + (get_local $$10) + ) + ) + ) + (return + (get_local $$$0) + ) + ) + (func $switch64 (; 23 ;) (param $$a444 i64) (result i32) + (local $$waka i32) + (local $2 i64) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case0 $switch-default $switch-case $switch-default + (i32.wrap/i64 + (block (result i64) + (set_local $2 + (i64.sub + (get_local $$a444) + (i64.const 42949672965) + ) + ) + (br_if $switch-default + (i32.wrap/i64 + (i64.shr_u + (get_local $2) + (i64.const 32) + ) + ) + ) + (get_local $2) + ) + ) + ) + ) + (block + (set_local $$waka + (i32.const 11000) + ) + (br $switch) + ) + ) + (block + (set_local $$waka + (i32.const 10) + ) + (br $switch) + ) + ) + (set_local $$waka + (i32.const 1) + ) + ) + (return + (get_local $$waka) + ) + ) + (func $unreachable_leftovers (; 24 ;) (param $$0 i32) (param $$1 i32) (param $$2 i32) + (local $label i32) + (block $label$break$L1 + (if + (get_local $$1) + (set_local $label + (i32.const 10) + ) + (block + (if + (get_local $$2) + (block + (br $label$break$L1) + (return) + ) + ) + (i32.store + (get_local $$0) + (i32.const -2) + ) + (return) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 10) + ) + (i32.store + (get_local $$0) + (i32.const -1) + ) + ) + (return) + ) + (func $switch64TOOMUCH (; 25 ;) (param $$a444 i64) (result i32) + (local $$waka i32) + (local $2 i64) + (local $3 i32) + (local $4 i64) + (local $5 i32) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (set_local $2 + (get_local $$a444) + ) + (if + (i64.eq + (get_local $2) + (i64.const -9223372036854775808) + ) + (br $switch-case0) + (if + (i64.eq + (get_local $2) + (i64.const 4611686018427387904) + ) + (br $switch-case) + (br $switch-default) + ) + ) + ) + (nop) + ) + (return + (i32.const 40) + ) + ) + (set_local $$waka + (i32.const 1) + ) + ) + (block $switch1 + (block $switch-default4 + (block $switch-case3 + (block $switch-case2 + (set_local $3 + (i32.const 100) + ) + (if + (i32.eq + (get_local $3) + (i32.const 214748364) + ) + (br $switch-case3) + (if + (i32.eq + (get_local $3) + (i32.const 107374182) + ) + (br $switch-case2) + (br $switch-default4) + ) + ) + ) + (nop) + ) + (return + (i32.const 41) + ) + ) + (set_local $$waka + (i32.const 1001) + ) + ) + (block $switch5 + (block $switch-case7 + (block $switch-case6 + (set_local $4 + (get_local $$a444) + ) + (if + (i64.eq + (get_local $4) + (i64.const -9223372036854775808) + ) + (br $switch-case7) + (if + (i64.eq + (get_local $4) + (i64.const 4611686018427387904) + ) + (br $switch-case6) + (br $switch5) + ) + ) + ) + (nop) + ) + (return + (i32.const 42) + ) + ) + (block $switch8 + (block $switch-case10 + (block $switch-case9 + (set_local $5 + (i32.const 100) + ) + (if + (i32.eq + (get_local $5) + (i32.const 214748364) + ) + (br $switch-case10) + (if + (i32.eq + (get_local $5) + (i32.const 107374182) + ) + (br $switch-case9) + (br $switch8) + ) + ) + ) + (nop) + ) + (return + (i32.const 43) + ) + ) + (return + (i32.const 44) + ) + ) + (func $_memchr (; 26 ;) (param $$src i32) (param $$c i32) (param $$n i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 i32) + (local $$and i32) + (local $$and15 i32) + (local $$and16 i32) + (local $$and39 i32) + (local $$cmp i32) + (local $$cmp11 i32) + (local $$cmp1132 i32) + (local $$cmp28 i32) + (local $$cmp8 i32) + (local $$cond i32) + (local $$conv1 i32) + (local $$dec i32) + (local $$dec34 i32) + (local $$incdec$ptr i32) + (local $$incdec$ptr21 i32) + (local $$incdec$ptr33 i32) + (local $$lnot i32) + (local $$mul i32) + (local $$n$addr$0$lcssa i32) + (local $$n$addr$0$lcssa52 i32) + (local $$n$addr$043 i32) + (local $$n$addr$1$lcssa i32) + (local $$n$addr$133 i32) + (local $$n$addr$227 i32) + (local $$n$addr$3 i32) + (local $$neg i32) + (local $$or$cond i32) + (local $$or$cond42 i32) + (local $$s$0$lcssa i32) + (local $$s$0$lcssa53 i32) + (local $$s$044 i32) + (local $$s$128 i32) + (local $$s$2 i32) + (local $$sub i32) + (local $$sub22 i32) + (local $$tobool i32) + (local $$tobool2 i32) + (local $$tobool2$lcssa i32) + (local $$tobool241 i32) + (local $$tobool25 i32) + (local $$tobool2526 i32) + (local $$tobool36 i32) + (local $$tobool40 i32) + (local $$w$0$lcssa i32) + (local $$w$034 i32) + (local $$xor i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$conv1 + (i32.and + (get_local $$c) + (i32.const 255) + ) + ) + (set_local $$0 + (get_local $$src) + ) + (set_local $$and39 + (i32.and + (get_local $$0) + (i32.const 3) + ) + ) + (set_local $$tobool40 + (i32.ne + (get_local $$and39) + (i32.const 0) + ) + ) + (set_local $$tobool241 + (i32.ne + (get_local $$n) + (i32.const 0) + ) + ) + (set_local $$or$cond42 + (i32.and + (get_local $$tobool241) + (get_local $$tobool40) + ) + ) + (block $label$break$L1 + (if + (get_local $$or$cond42) + (block + (set_local $$1 + (i32.and + (get_local $$c) + (i32.const 255) + ) + ) + (set_local $$n$addr$043 + (get_local $$n) + ) + (set_local $$s$044 + (get_local $$src) + ) + (loop $while-in + (block $while-out + (set_local $$2 + (i32.load8_s + (get_local $$s$044) + ) + ) + (set_local $$cmp + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$2) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $$1) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $$n$addr$0$lcssa52 + (get_local $$n$addr$043) + ) + (set_local $$s$0$lcssa53 + (get_local $$s$044) + ) + (set_local $label + (i32.const 6) + ) + (br $label$break$L1) + ) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$s$044) + (i32.const 1) + ) + ) + (set_local $$dec + (i32.add + (get_local $$n$addr$043) + (i32.const -1) + ) + ) + (set_local $$3 + (get_local $$incdec$ptr) + ) + (set_local $$and + (i32.and + (get_local $$3) + (i32.const 3) + ) + ) + (set_local $$tobool + (i32.ne + (get_local $$and) + (i32.const 0) + ) + ) + (set_local $$tobool2 + (i32.ne + (get_local $$dec) + (i32.const 0) + ) + ) + (set_local $$or$cond + (i32.and + (get_local $$tobool2) + (get_local $$tobool) + ) + ) + (if + (get_local $$or$cond) + (block + (set_local $$n$addr$043 + (get_local $$dec) + ) + (set_local $$s$044 + (get_local $$incdec$ptr) + ) + ) + (block + (set_local $$n$addr$0$lcssa + (get_local $$dec) + ) + (set_local $$s$0$lcssa + (get_local $$incdec$ptr) + ) + (set_local $$tobool2$lcssa + (get_local $$tobool2) + ) + (set_local $label + (i32.const 5) + ) + (br $while-out) + ) + ) + (br $while-in) + ) + ) + ) + (block + (set_local $$n$addr$0$lcssa + (get_local $$n) + ) + (set_local $$s$0$lcssa + (get_local $$src) + ) + (set_local $$tobool2$lcssa + (get_local $$tobool241) + ) + (set_local $label + (i32.const 5) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 5) + ) + (if + (get_local $$tobool2$lcssa) + (block + (set_local $$n$addr$0$lcssa52 + (get_local $$n$addr$0$lcssa) + ) + (set_local $$s$0$lcssa53 + (get_local $$s$0$lcssa) + ) + (set_local $label + (i32.const 6) + ) + ) + (block + (set_local $$n$addr$3 + (i32.const 0) + ) + (set_local $$s$2 + (get_local $$s$0$lcssa) + ) + ) + ) + ) + (block $label$break$L8 + (if + (i32.eq + (get_local $label) + (i32.const 6) + ) + (block + (set_local $$4 + (i32.load8_s + (get_local $$s$0$lcssa53) + ) + ) + (set_local $$5 + (i32.and + (get_local $$c) + (i32.const 255) + ) + ) + (set_local $$cmp8 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$4) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $$5) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $$cmp8) + (block + (set_local $$n$addr$3 + (get_local $$n$addr$0$lcssa52) + ) + (set_local $$s$2 + (get_local $$s$0$lcssa53) + ) + ) + (block + (set_local $$mul + (i32.mul + (get_local $$conv1) + (i32.const 16843009) + ) + ) + (set_local $$cmp1132 + (i32.gt_u + (get_local $$n$addr$0$lcssa52) + (i32.const 3) + ) + ) + (block $label$break$L11 + (if + (get_local $$cmp1132) + (block + (set_local $$n$addr$133 + (get_local $$n$addr$0$lcssa52) + ) + (set_local $$w$034 + (get_local $$s$0$lcssa53) + ) + (loop $while-in3 + (block $while-out2 + (set_local $$6 + (i32.load + (get_local $$w$034) + ) + ) + (set_local $$xor + (i32.xor + (get_local $$6) + (get_local $$mul) + ) + ) + (set_local $$sub + (i32.add + (get_local $$xor) + (i32.const -16843009) + ) + ) + (set_local $$neg + (i32.and + (get_local $$xor) + (i32.const -2139062144) + ) + ) + (set_local $$and15 + (i32.xor + (get_local $$neg) + (i32.const -2139062144) + ) + ) + (set_local $$and16 + (i32.and + (get_local $$and15) + (get_local $$sub) + ) + ) + (set_local $$lnot + (i32.eq + (get_local $$and16) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$lnot) + ) + (br $while-out2) + ) + (set_local $$incdec$ptr21 + (i32.add + (get_local $$w$034) + (i32.const 4) + ) + ) + (set_local $$sub22 + (i32.add + (get_local $$n$addr$133) + (i32.const -4) + ) + ) + (set_local $$cmp11 + (i32.gt_u + (get_local $$sub22) + (i32.const 3) + ) + ) + (if + (get_local $$cmp11) + (block + (set_local $$n$addr$133 + (get_local $$sub22) + ) + (set_local $$w$034 + (get_local $$incdec$ptr21) + ) + ) + (block + (set_local $$n$addr$1$lcssa + (get_local $$sub22) + ) + (set_local $$w$0$lcssa + (get_local $$incdec$ptr21) + ) + (set_local $label + (i32.const 11) + ) + (br $label$break$L11) + ) + ) + (br $while-in3) + ) + ) + (set_local $$n$addr$227 + (get_local $$n$addr$133) + ) + (set_local $$s$128 + (get_local $$w$034) + ) + ) + (block + (set_local $$n$addr$1$lcssa + (get_local $$n$addr$0$lcssa52) + ) + (set_local $$w$0$lcssa + (get_local $$s$0$lcssa53) + ) + (set_local $label + (i32.const 11) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 11) + ) + (block + (set_local $$tobool2526 + (i32.eq + (get_local $$n$addr$1$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$tobool2526) + (block + (set_local $$n$addr$3 + (i32.const 0) + ) + (set_local $$s$2 + (get_local $$w$0$lcssa) + ) + (br $label$break$L8) + ) + (block + (set_local $$n$addr$227 + (get_local $$n$addr$1$lcssa) + ) + (set_local $$s$128 + (get_local $$w$0$lcssa) + ) + ) + ) + ) + ) + (loop $while-in5 + (block $while-out4 + (set_local $$7 + (i32.load8_s + (get_local $$s$128) + ) + ) + (set_local $$cmp28 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$7) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $$5) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $$cmp28) + (block + (set_local $$n$addr$3 + (get_local $$n$addr$227) + ) + (set_local $$s$2 + (get_local $$s$128) + ) + (br $label$break$L8) + ) + ) + (set_local $$incdec$ptr33 + (i32.add + (get_local $$s$128) + (i32.const 1) + ) + ) + (set_local $$dec34 + (i32.add + (get_local $$n$addr$227) + (i32.const -1) + ) + ) + (set_local $$tobool25 + (i32.eq + (get_local $$dec34) + (i32.const 0) + ) + ) + (if + (get_local $$tobool25) + (block + (set_local $$n$addr$3 + (i32.const 0) + ) + (set_local $$s$2 + (get_local $$incdec$ptr33) + ) + (br $while-out4) + ) + (block + (set_local $$n$addr$227 + (get_local $$dec34) + ) + (set_local $$s$128 + (get_local $$incdec$ptr33) + ) + ) + ) + (br $while-in5) + ) + ) + ) + ) + ) + ) + ) + (set_local $$tobool36 + (i32.ne + (get_local $$n$addr$3) + (i32.const 0) + ) + ) + (set_local $$cond + (if (result i32) + (get_local $$tobool36) + (get_local $$s$2) + (i32.const 0) + ) + ) + (return + (get_local $$cond) + ) + ) + (func $switch64_big_condition1 (; 27 ;) (param $$x i64) + (local $1 i64) + (block $switch + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default + (i32.wrap/i64 + (block (result i64) + (set_local $1 + (i64.sub + (get_local $$x) + (i64.const 9218868437227405312) + ) + ) + (br_if $switch-default + (i32.wrap/i64 + (i64.shr_u + (get_local $1) + (i64.const 32) + ) + ) + ) + (get_local $1) + ) + ) + ) + ) + (block + (call $abort) + (br $switch) + ) + ) + (return) + ) + ) + (func $switch64_big_condition2 (; 28 ;) (param $$x i64) + (local $1 i64) + (block $switch + (block $switch-case + (br_table $switch-case $switch + (i32.wrap/i64 + (block (result i64) + (set_local $1 + (i64.sub + (get_local $$x) + (i64.const 9218868437227405312) + ) + ) + (br_if $switch + (i32.wrap/i64 + (i64.shr_u + (get_local $1) + (i64.const 32) + ) + ) + ) + (get_local $1) + ) + ) + ) + ) + (block + (call $abort) + (br $switch) + ) + ) + ) + (func $keepAlive (; 29 ;) + (call $loads) + (call $loads) + (call $stores) + (call $stores) + (call $test) + (call $test) + (drop + (call $imports) + ) + (drop + (call $imports) + ) + (call $arg + (i64.const 0) + ) + (call $arg + (i64.const 0) + ) + (drop + (call $call1 + (i64.const 0) + ) + ) + (drop + (call $call1 + (i64.const 0) + ) + ) + (drop + (call $call2 + (i64.const 0) + ) + ) + (drop + (call $call2 + (i64.const 0) + ) + ) + (drop + (call $returnCastConst) + ) + (drop + (call $returnCastConst) + ) + (drop + (call $ifValue64 + (i64.const 0) + (i64.const 0) + ) + ) + (drop + (call $ifValue64 + (i64.const 0) + (i64.const 0) + ) + ) + (drop + (call $ifValue32 + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call $ifValue32 + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call $switch64 + (i64.const 0) + ) + ) + (drop + (call $switch64 + (i64.const 0) + ) + ) + (call $unreachable_leftovers + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + (call $unreachable_leftovers + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + (drop + (call $_memchr + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call $switch64TOOMUCH + (i64.const 0) + ) + ) + (call $switch64_big_condition1 + (i64.const 0) + ) + (call $switch64_big_condition2 + (i64.const 0) + ) + ) + (func $__emscripten_dceable_type_decls (; 30 ;) + (drop + (call $legalfunc$_fabsf + (f32.const 0) + ) + ) + (drop + (call $legalfunc$do_i64) + ) + ) + (func $legalstub$illegalParam (; 31 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 f64) + (call $illegalParam + (get_local $0) + (i64.or + (i64.extend_u/i32 + (get_local $1) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $2) + ) + (i64.const 32) + ) + ) + (get_local $3) + ) + ) + (func $legalstub$illegalResult (; 32 ;) (result i32) + (local $0 i64) + (set_local $0 + (call $illegalResult) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $0) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $0) + ) + ) + (func $legalfunc$illegalImport (; 33 ;) (param $0 f64) (param $1 i64) (param $2 i32) + (call $legalimport$illegalImport + (get_local $0) + (i32.wrap/i64 + (get_local $1) + ) + (i32.wrap/i64 + (i64.shr_u + (get_local $1) + (i64.const 32) + ) + ) + (get_local $2) + ) + ) + (func $legalfunc$illegalImportResult (; 34 ;) (result i64) + (i64.or + (i64.extend_u/i32 + (call $legalimport$illegalImportResult) + ) + (i64.shl + (i64.extend_u/i32 + (get_global $tempRet0) + ) + (i64.const 32) + ) + ) + ) + (func $legalfunc$_fabsf (; 35 ;) (param $0 f32) (result f32) + (f32.demote/f64 + (call $legalimport$_fabsf + (f64.promote/f32 + (get_local $0) + ) + ) + ) + ) + (func $legalfunc$do_i64 (; 36 ;) (result i64) + (i64.or + (i64.extend_u/i32 + (call $legalimport$do_i64) + ) + (i64.shl + (i64.extend_u/i32 + (get_global $tempRet0) + ) + (i64.const 32) + ) + ) + ) +) diff --git a/src/binaryen/test/wasm-only.fromasm.no-opts b/src/binaryen/test/wasm-only.fromasm.no-opts new file mode 100644 index 0000000000..1b8b002016 --- /dev/null +++ b/src/binaryen/test/wasm-only.fromasm.no-opts @@ -0,0 +1,1922 @@ +(module + (type $FUNCSIG$vdji (func (param f64 i64 i32))) + (type $FUNCSIG$j (func (result i64))) + (type $FUNCSIG$ff (func (param f32) (result f32))) + (type $FUNCSIG$v (func)) + (type $legaltype$illegalImport (func (param f64 i32 i32 i32))) + (type $legaltype$illegalImportResult (func (result i32))) + (type $legaltype$_fabsf (func (param f64) (result f64))) + (type $legaltype$do_i64 (func (result i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "illegalImport" (func $illegalImport (param f64 i64 i32))) + (import "env" "illegalImportResult" (func $illegalImportResult (result i64))) + (import "env" "_fabsf" (func $_fabsf (param f32) (result f32))) + (import "env" "do_i64" (func $do_i64 (result i64))) + (import "env" "abort" (func $abort)) + (import "env" "illegalImport" (func $legalimport$illegalImport (param f64 i32 i32 i32))) + (import "env" "illegalImportResult" (func $legalimport$illegalImportResult (result i32))) + (import "env" "_fabsf" (func $legalimport$_fabsf (param f64) (result f64))) + (import "env" "do_i64" (func $legalimport$do_i64 (result i32))) + (import "env" "memory" (memory $0 256 256)) + (import "env" "table" (table 3 3 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $tempRet0 (mut i32) (i32.const 0)) + (elem (get_global $tableBase) $legalfunc$illegalImport $legalfunc$_fabsf $legalfunc$do_i64) + (export "test64" (func $test64)) + (export "illegalParam" (func $legalstub$illegalParam)) + (export "illegalResult" (func $legalstub$illegalResult)) + (export "keepAlive" (func $keepAlive)) + (func $loads (; 9 ;) + (local $i i32) + (local $f f32) + (local $d f64) + (set_local $i + (i32.load8_s + (i32.const 100) + ) + ) + (set_local $i + (i32.load8_s + (i32.const 101) + ) + ) + (set_local $i + (i32.load16_s + (i32.const 102) + ) + ) + (set_local $i + (i32.load16_s + (i32.const 103) + ) + ) + (set_local $i + (i32.load16_s align=1 + (i32.const 104) + ) + ) + (set_local $i + (i32.load16_s + (i32.const 105) + ) + ) + (set_local $i + (i32.load + (i32.const 106) + ) + ) + (set_local $i + (i32.load + (i32.const 107) + ) + ) + (set_local $i + (i32.load align=1 + (i32.const 108) + ) + ) + (set_local $i + (i32.load align=2 + (i32.const 109) + ) + ) + (set_local $i + (i32.load + (i32.const 110) + ) + ) + (set_local $f + (f32.load + (i32.const 111) + ) + ) + (set_local $f + (f32.load + (i32.const 112) + ) + ) + (set_local $f + (f32.load align=1 + (i32.const 113) + ) + ) + (set_local $f + (f32.load align=2 + (i32.const 114) + ) + ) + (set_local $f + (f32.load + (i32.const 115) + ) + ) + (set_local $d + (f64.load + (i32.const 116) + ) + ) + (set_local $d + (f64.load + (i32.const 117) + ) + ) + (set_local $d + (f64.load align=1 + (i32.const 118) + ) + ) + (set_local $d + (f64.load align=2 + (i32.const 119) + ) + ) + (set_local $d + (f64.load align=4 + (i32.const 120) + ) + ) + (set_local $d + (f64.load + (i32.const 121) + ) + ) + ) + (func $stores (; 10 ;) + (local $i i32) + (local $f f32) + (local $d f64) + (i32.store8 + (i32.const 100) + (get_local $i) + ) + (i32.store8 + (i32.const 101) + (get_local $i) + ) + (i32.store16 + (i32.const 102) + (get_local $i) + ) + (i32.store16 + (i32.const 103) + (get_local $i) + ) + (i32.store16 align=1 + (i32.const 104) + (get_local $i) + ) + (i32.store16 + (i32.const 105) + (get_local $i) + ) + (i32.store + (i32.const 106) + (get_local $i) + ) + (i32.store + (i32.const 107) + (get_local $i) + ) + (i32.store align=1 + (i32.const 108) + (get_local $i) + ) + (i32.store align=2 + (i32.const 109) + (get_local $i) + ) + (i32.store + (i32.const 110) + (get_local $i) + ) + (f32.store + (i32.const 111) + (get_local $f) + ) + (f32.store + (i32.const 112) + (get_local $f) + ) + (f32.store align=1 + (i32.const 113) + (get_local $f) + ) + (f32.store align=2 + (i32.const 114) + (get_local $f) + ) + (f32.store + (i32.const 115) + (get_local $f) + ) + (f64.store + (i32.const 116) + (get_local $d) + ) + (f64.store + (i32.const 117) + (get_local $d) + ) + (f64.store align=1 + (i32.const 118) + (get_local $d) + ) + (f64.store align=2 + (i32.const 119) + (get_local $d) + ) + (f64.store align=4 + (i32.const 120) + (get_local $d) + ) + (f64.store + (i32.const 121) + (get_local $d) + ) + ) + (func $test (; 11 ;) + (local $i i32) + (local $j i64) + (local $f f32) + (local $f1 f32) + (local $f2 f32) + (local $d1 f64) + (local $d2 f64) + (set_local $i + (i32.reinterpret/f32 + (get_local $f) + ) + ) + (set_local $f + (f32.reinterpret/i32 + (get_local $i) + ) + ) + (set_local $i + (i32.ctz + (get_local $i) + ) + ) + (set_local $i + (i32.popcnt + (get_local $i) + ) + ) + (set_local $j + (i64.popcnt + (get_local $j) + ) + ) + (set_local $f1 + (f32.copysign + (get_local $f1) + (get_local $f2) + ) + ) + (set_local $d1 + (f64.copysign + (get_local $d1) + (get_local $d2) + ) + ) + ) + (func $i64u-div (; 12 ;) (param $0 i64) (param $1 i64) (result i64) + (if (result i64) + (i64.eqz + (get_local $1) + ) + (i64.const 0) + (i64.div_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $i64s-div (; 13 ;) (param $0 i64) (param $1 i64) (result i64) + (if (result i64) + (i64.eqz + (get_local $1) + ) + (i64.const 0) + (if (result i64) + (i32.and + (i64.eq + (get_local $0) + (i64.const -9223372036854775808) + ) + (i64.eq + (get_local $1) + (i64.const -1) + ) + ) + (i64.const 0) + (i64.div_s + (get_local $0) + (get_local $1) + ) + ) + ) + ) + (func $i64u-rem (; 14 ;) (param $0 i64) (param $1 i64) (result i64) + (if (result i64) + (i64.eqz + (get_local $1) + ) + (i64.const 0) + (i64.rem_u + (get_local $0) + (get_local $1) + ) + ) + ) + (func $i64s-rem (; 15 ;) (param $0 i64) (param $1 i64) (result i64) + (if (result i64) + (i64.eqz + (get_local $1) + ) + (i64.const 0) + (i64.rem_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $f32-to-int64 (; 16 ;) (param $0 f32) (result i64) + (if (result i64) + (f32.ne + (get_local $0) + (get_local $0) + ) + (i64.const -9223372036854775808) + (if (result i64) + (f32.ge + (get_local $0) + (f32.const 9223372036854775808) + ) + (i64.const -9223372036854775808) + (if (result i64) + (f32.le + (get_local $0) + (f32.const -9223372036854775808) + ) + (i64.const -9223372036854775808) + (i64.trunc_s/f32 + (get_local $0) + ) + ) + ) + ) + ) + (func $f64-to-int64 (; 17 ;) (param $0 f64) (result i64) + (if (result i64) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i64.const -9223372036854775808) + (if (result i64) + (f64.ge + (get_local $0) + (f64.const 9223372036854775808) + ) + (i64.const -9223372036854775808) + (if (result i64) + (f64.le + (get_local $0) + (f64.const -9223372036854775808) + ) + (i64.const -9223372036854775808) + (i64.trunc_s/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $f32-to-uint64 (; 18 ;) (param $0 f32) (result i64) + (if (result i64) + (f32.ne + (get_local $0) + (get_local $0) + ) + (i64.const 0) + (if (result i64) + (f32.ge + (get_local $0) + (f32.const 18446744073709551615) + ) + (i64.const 0) + (if (result i64) + (f32.le + (get_local $0) + (f32.const -1) + ) + (i64.const 0) + (i64.trunc_u/f32 + (get_local $0) + ) + ) + ) + ) + ) + (func $f64-to-uint64 (; 19 ;) (param $0 f64) (result i64) + (if (result i64) + (f64.ne + (get_local $0) + (get_local $0) + ) + (i64.const 0) + (if (result i64) + (f64.ge + (get_local $0) + (f64.const 18446744073709551615) + ) + (i64.const 0) + (if (result i64) + (f64.le + (get_local $0) + (f64.const -1) + ) + (i64.const 0) + (i64.trunc_u/f64 + (get_local $0) + ) + ) + ) + ) + ) + (func $test64 (; 20 ;) + (local $x i64) + (local $y i64) + (local $z i32) + (local $int32 i32) + (local $float32 f32) + (local $float64 f64) + (set_local $x + (i64.const 100) + ) + (set_local $y + (i64.const 128849018897) + ) + (set_local $x + (i64.add + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.sub + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.mul + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (call $i64u-div + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (call $i64s-div + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (call $i64u-rem + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (call $i64s-rem + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.and + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.or + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.xor + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.shl + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.shr_s + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.shr_u + (get_local $x) + (get_local $y) + ) + ) + (set_local $x + (i64.load + (i32.const 120) + ) + ) + (set_local $x + (i64.load + (i32.const 120) + ) + ) + (set_local $x + (i64.load align=2 + (i32.const 120) + ) + ) + (set_local $x + (i64.load align=4 + (i32.const 120) + ) + ) + (set_local $x + (i64.load + (i32.const 120) + ) + ) + (i64.store + (i32.const 120) + (get_local $x) + ) + (i64.store + (i32.const 120) + (get_local $x) + ) + (i64.store align=2 + (i32.const 120) + (get_local $x) + ) + (i64.store align=4 + (i32.const 120) + (get_local $x) + ) + (i64.store + (i32.const 120) + (get_local $x) + ) + (set_local $z + (i64.eq + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.ne + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.le_u + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.le_s + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.ge_u + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.ge_s + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.lt_u + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.lt_s + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.gt_u + (get_local $x) + (get_local $y) + ) + ) + (set_local $z + (i64.gt_s + (get_local $x) + (get_local $y) + ) + ) + (set_local $int32 + (i32.wrap/i64 + (get_local $x) + ) + ) + (set_local $x + (i64.extend_s/i32 + (get_local $int32) + ) + ) + (set_local $x + (i64.extend_u/i32 + (get_local $int32) + ) + ) + (set_local $float32 + (f32.convert_s/i64 + (get_local $x) + ) + ) + (set_local $float64 + (f64.convert_s/i64 + (get_local $x) + ) + ) + (set_local $float32 + (f32.convert_u/i64 + (get_local $x) + ) + ) + (set_local $float64 + (f64.convert_u/i64 + (get_local $x) + ) + ) + (set_local $x + (call $f32-to-int64 + (get_local $float32) + ) + ) + (set_local $x + (call $f64-to-int64 + (get_local $float64) + ) + ) + (set_local $x + (call $f32-to-uint64 + (get_local $float32) + ) + ) + (set_local $x + (call $f64-to-uint64 + (get_local $float64) + ) + ) + (set_local $x + (i64.reinterpret/f64 + (get_local $float64) + ) + ) + (set_local $float64 + (f64.reinterpret/i64 + (get_local $x) + ) + ) + (set_local $x + (i64.clz + (get_local $y) + ) + ) + (set_local $y + (i64.ctz + (get_local $x) + ) + ) + ) + (func $imports (; 21 ;) (result i64) + (call $legalfunc$illegalImport + (f64.const -3.13159) + (i64.const 94489280523) + (i32.const -33) + ) + (return + (call $legalfunc$illegalImportResult) + ) + ) + (func $arg (; 22 ;) (param $x i64) + (i64.store + (i32.const 100) + (get_local $x) + ) + (call $arg + (get_local $x) + ) + ) + (func $illegalParam (; 23 ;) (param $a i32) (param $x i64) (param $b f64) + (i64.store + (i32.const 100) + (get_local $x) + ) + (call $illegalParam + (i32.const 0) + (get_local $x) + (f64.const 12.34) + ) + ) + (func $result (; 24 ;) (result i64) + (return + (i64.const 8589934593) + ) + ) + (func $illegalResult (; 25 ;) (result i64) + (return + (i64.const 8589934593) + ) + ) + (func $call1 (; 26 ;) (param $x i64) (result i64) + (local $y i64) + (set_local $y + (call $call1 + (get_local $x) + ) + ) + (return + (get_local $y) + ) + ) + (func $call2 (; 27 ;) (param $x i64) (result i64) + (drop + (call $call2 + (call $call2 + (get_local $x) + ) + ) + ) + (return + (i64.const 245127260211081) + ) + ) + (func $returnCastConst (; 28 ;) (result i64) + (return + (i64.const 0) + ) + ) + (func $ifValue64 (; 29 ;) (param $$4 i64) (param $$6 i64) (result i64) + (local $$$0 i64) + (local $$9 i64) + (local $$10 i64) + (if + (i32.wrap/i64 + (get_local $$6) + ) + (block + (set_local $$9 + (call $call2 + (get_local $$4) + ) + ) + (set_local $$$0 + (get_local $$9) + ) + ) + (block + (set_local $$10 + (call $call2 + (get_local $$4) + ) + ) + (set_local $$$0 + (get_local $$10) + ) + ) + ) + (return + (get_local $$$0) + ) + ) + (func $ifValue32 (; 30 ;) (param $$4 i32) (param $$6 i32) (result i32) + (local $$$0 i32) + (local $$9 i32) + (local $$10 i32) + (if + (get_local $$6) + (block + (set_local $$9 + (call $ifValue32 + (get_local $$4) + (get_local $$6) + ) + ) + (set_local $$$0 + (get_local $$9) + ) + ) + (block + (set_local $$10 + (call $ifValue32 + (get_local $$4) + (get_local $$6) + ) + ) + (set_local $$$0 + (get_local $$10) + ) + ) + ) + (return + (get_local $$$0) + ) + ) + (func $switch64 (; 31 ;) (param $$a444 i64) (result i32) + (local $$waka i32) + (local $2 i64) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case0 $switch-default $switch-case $switch-default + (i32.wrap/i64 + (block (result i64) + (set_local $2 + (i64.sub + (get_local $$a444) + (i64.const 42949672965) + ) + ) + (br_if $switch-default + (i32.wrap/i64 + (i64.shr_u + (get_local $2) + (i64.const 32) + ) + ) + ) + (get_local $2) + ) + ) + ) + ) + (block + (set_local $$waka + (i32.const 11000) + ) + (br $switch) + ) + ) + (block + (set_local $$waka + (i32.const 10) + ) + (br $switch) + ) + ) + (set_local $$waka + (i32.const 1) + ) + ) + (return + (get_local $$waka) + ) + ) + (func $unreachable_leftovers (; 32 ;) (param $$0 i32) (param $$1 i32) (param $$2 i32) + (local $label i32) + (block $label$break$L1 + (if + (get_local $$1) + (set_local $label + (i32.const 10) + ) + (block + (if + (get_local $$2) + (block + (br $label$break$L1) + (return) + ) + ) + (i32.store + (get_local $$0) + (i32.const -2) + ) + (return) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 10) + ) + (i32.store + (get_local $$0) + (i32.const -1) + ) + ) + (return) + ) + (func $switch64TOOMUCH (; 33 ;) (param $$a444 i64) (result i32) + (local $$waka i32) + (local $2 i64) + (local $3 i32) + (local $4 i64) + (local $5 i32) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (set_local $2 + (get_local $$a444) + ) + (if + (i64.eq + (get_local $2) + (i64.const -9223372036854775808) + ) + (br $switch-case0) + (if + (i64.eq + (get_local $2) + (i64.const 4611686018427387904) + ) + (br $switch-case) + (br $switch-default) + ) + ) + ) + (nop) + ) + (return + (i32.const 40) + ) + ) + (set_local $$waka + (i32.const 1) + ) + ) + (block $switch1 + (block $switch-default4 + (block $switch-case3 + (block $switch-case2 + (set_local $3 + (i32.const 100) + ) + (if + (i32.eq + (get_local $3) + (i32.const 214748364) + ) + (br $switch-case3) + (if + (i32.eq + (get_local $3) + (i32.const 107374182) + ) + (br $switch-case2) + (br $switch-default4) + ) + ) + ) + (nop) + ) + (return + (i32.const 41) + ) + ) + (set_local $$waka + (i32.const 1001) + ) + ) + (block $switch5 + (block $switch-case7 + (block $switch-case6 + (set_local $4 + (get_local $$a444) + ) + (if + (i64.eq + (get_local $4) + (i64.const -9223372036854775808) + ) + (br $switch-case7) + (if + (i64.eq + (get_local $4) + (i64.const 4611686018427387904) + ) + (br $switch-case6) + (br $switch5) + ) + ) + ) + (nop) + ) + (return + (i32.const 42) + ) + ) + (block $switch8 + (block $switch-case10 + (block $switch-case9 + (set_local $5 + (i32.const 100) + ) + (if + (i32.eq + (get_local $5) + (i32.const 214748364) + ) + (br $switch-case10) + (if + (i32.eq + (get_local $5) + (i32.const 107374182) + ) + (br $switch-case9) + (br $switch8) + ) + ) + ) + (nop) + ) + (return + (i32.const 43) + ) + ) + (return + (i32.const 44) + ) + ) + (func $_memchr (; 34 ;) (param $$src i32) (param $$c i32) (param $$n i32) (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 i32) + (local $$and i32) + (local $$and15 i32) + (local $$and16 i32) + (local $$and39 i32) + (local $$cmp i32) + (local $$cmp11 i32) + (local $$cmp1132 i32) + (local $$cmp28 i32) + (local $$cmp8 i32) + (local $$cond i32) + (local $$conv1 i32) + (local $$dec i32) + (local $$dec34 i32) + (local $$incdec$ptr i32) + (local $$incdec$ptr21 i32) + (local $$incdec$ptr33 i32) + (local $$lnot i32) + (local $$mul i32) + (local $$n$addr$0$lcssa i32) + (local $$n$addr$0$lcssa52 i32) + (local $$n$addr$043 i32) + (local $$n$addr$1$lcssa i32) + (local $$n$addr$133 i32) + (local $$n$addr$227 i32) + (local $$n$addr$3 i32) + (local $$neg i32) + (local $$or$cond i32) + (local $$or$cond42 i32) + (local $$s$0$lcssa i32) + (local $$s$0$lcssa53 i32) + (local $$s$044 i32) + (local $$s$128 i32) + (local $$s$2 i32) + (local $$sub i32) + (local $$sub22 i32) + (local $$tobool i32) + (local $$tobool2 i32) + (local $$tobool2$lcssa i32) + (local $$tobool241 i32) + (local $$tobool25 i32) + (local $$tobool2526 i32) + (local $$tobool36 i32) + (local $$tobool40 i32) + (local $$w$0$lcssa i32) + (local $$w$034 i32) + (local $$xor i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$conv1 + (i32.and + (get_local $$c) + (i32.const 255) + ) + ) + (set_local $$0 + (get_local $$src) + ) + (set_local $$and39 + (i32.and + (get_local $$0) + (i32.const 3) + ) + ) + (set_local $$tobool40 + (i32.ne + (get_local $$and39) + (i32.const 0) + ) + ) + (set_local $$tobool241 + (i32.ne + (get_local $$n) + (i32.const 0) + ) + ) + (set_local $$or$cond42 + (i32.and + (get_local $$tobool241) + (get_local $$tobool40) + ) + ) + (block $label$break$L1 + (if + (get_local $$or$cond42) + (block + (set_local $$1 + (i32.and + (get_local $$c) + (i32.const 255) + ) + ) + (set_local $$n$addr$043 + (get_local $$n) + ) + (set_local $$s$044 + (get_local $$src) + ) + (loop $while-in + (block $while-out + (set_local $$2 + (i32.load8_s + (get_local $$s$044) + ) + ) + (set_local $$cmp + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$2) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $$1) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $$cmp) + (block + (set_local $$n$addr$0$lcssa52 + (get_local $$n$addr$043) + ) + (set_local $$s$0$lcssa53 + (get_local $$s$044) + ) + (set_local $label + (i32.const 6) + ) + (br $label$break$L1) + ) + ) + (set_local $$incdec$ptr + (i32.add + (get_local $$s$044) + (i32.const 1) + ) + ) + (set_local $$dec + (i32.add + (get_local $$n$addr$043) + (i32.const -1) + ) + ) + (set_local $$3 + (get_local $$incdec$ptr) + ) + (set_local $$and + (i32.and + (get_local $$3) + (i32.const 3) + ) + ) + (set_local $$tobool + (i32.ne + (get_local $$and) + (i32.const 0) + ) + ) + (set_local $$tobool2 + (i32.ne + (get_local $$dec) + (i32.const 0) + ) + ) + (set_local $$or$cond + (i32.and + (get_local $$tobool2) + (get_local $$tobool) + ) + ) + (if + (get_local $$or$cond) + (block + (set_local $$n$addr$043 + (get_local $$dec) + ) + (set_local $$s$044 + (get_local $$incdec$ptr) + ) + ) + (block + (set_local $$n$addr$0$lcssa + (get_local $$dec) + ) + (set_local $$s$0$lcssa + (get_local $$incdec$ptr) + ) + (set_local $$tobool2$lcssa + (get_local $$tobool2) + ) + (set_local $label + (i32.const 5) + ) + (br $while-out) + ) + ) + (br $while-in) + ) + ) + ) + (block + (set_local $$n$addr$0$lcssa + (get_local $$n) + ) + (set_local $$s$0$lcssa + (get_local $$src) + ) + (set_local $$tobool2$lcssa + (get_local $$tobool241) + ) + (set_local $label + (i32.const 5) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 5) + ) + (if + (get_local $$tobool2$lcssa) + (block + (set_local $$n$addr$0$lcssa52 + (get_local $$n$addr$0$lcssa) + ) + (set_local $$s$0$lcssa53 + (get_local $$s$0$lcssa) + ) + (set_local $label + (i32.const 6) + ) + ) + (block + (set_local $$n$addr$3 + (i32.const 0) + ) + (set_local $$s$2 + (get_local $$s$0$lcssa) + ) + ) + ) + ) + (block $label$break$L8 + (if + (i32.eq + (get_local $label) + (i32.const 6) + ) + (block + (set_local $$4 + (i32.load8_s + (get_local $$s$0$lcssa53) + ) + ) + (set_local $$5 + (i32.and + (get_local $$c) + (i32.const 255) + ) + ) + (set_local $$cmp8 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$4) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $$5) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $$cmp8) + (block + (set_local $$n$addr$3 + (get_local $$n$addr$0$lcssa52) + ) + (set_local $$s$2 + (get_local $$s$0$lcssa53) + ) + ) + (block + (set_local $$mul + (i32.mul + (get_local $$conv1) + (i32.const 16843009) + ) + ) + (set_local $$cmp1132 + (i32.gt_u + (get_local $$n$addr$0$lcssa52) + (i32.const 3) + ) + ) + (block $label$break$L11 + (if + (get_local $$cmp1132) + (block + (set_local $$n$addr$133 + (get_local $$n$addr$0$lcssa52) + ) + (set_local $$w$034 + (get_local $$s$0$lcssa53) + ) + (loop $while-in3 + (block $while-out2 + (set_local $$6 + (i32.load + (get_local $$w$034) + ) + ) + (set_local $$xor + (i32.xor + (get_local $$6) + (get_local $$mul) + ) + ) + (set_local $$sub + (i32.add + (get_local $$xor) + (i32.const -16843009) + ) + ) + (set_local $$neg + (i32.and + (get_local $$xor) + (i32.const -2139062144) + ) + ) + (set_local $$and15 + (i32.xor + (get_local $$neg) + (i32.const -2139062144) + ) + ) + (set_local $$and16 + (i32.and + (get_local $$and15) + (get_local $$sub) + ) + ) + (set_local $$lnot + (i32.eq + (get_local $$and16) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $$lnot) + ) + (br $while-out2) + ) + (set_local $$incdec$ptr21 + (i32.add + (get_local $$w$034) + (i32.const 4) + ) + ) + (set_local $$sub22 + (i32.add + (get_local $$n$addr$133) + (i32.const -4) + ) + ) + (set_local $$cmp11 + (i32.gt_u + (get_local $$sub22) + (i32.const 3) + ) + ) + (if + (get_local $$cmp11) + (block + (set_local $$n$addr$133 + (get_local $$sub22) + ) + (set_local $$w$034 + (get_local $$incdec$ptr21) + ) + ) + (block + (set_local $$n$addr$1$lcssa + (get_local $$sub22) + ) + (set_local $$w$0$lcssa + (get_local $$incdec$ptr21) + ) + (set_local $label + (i32.const 11) + ) + (br $label$break$L11) + ) + ) + (br $while-in3) + ) + ) + (set_local $$n$addr$227 + (get_local $$n$addr$133) + ) + (set_local $$s$128 + (get_local $$w$034) + ) + ) + (block + (set_local $$n$addr$1$lcssa + (get_local $$n$addr$0$lcssa52) + ) + (set_local $$w$0$lcssa + (get_local $$s$0$lcssa53) + ) + (set_local $label + (i32.const 11) + ) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 11) + ) + (block + (set_local $$tobool2526 + (i32.eq + (get_local $$n$addr$1$lcssa) + (i32.const 0) + ) + ) + (if + (get_local $$tobool2526) + (block + (set_local $$n$addr$3 + (i32.const 0) + ) + (set_local $$s$2 + (get_local $$w$0$lcssa) + ) + (br $label$break$L8) + ) + (block + (set_local $$n$addr$227 + (get_local $$n$addr$1$lcssa) + ) + (set_local $$s$128 + (get_local $$w$0$lcssa) + ) + ) + ) + ) + ) + (loop $while-in5 + (block $while-out4 + (set_local $$7 + (i32.load8_s + (get_local $$s$128) + ) + ) + (set_local $$cmp28 + (i32.eq + (i32.shr_s + (i32.shl + (get_local $$7) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.shr_s + (i32.shl + (get_local $$5) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (if + (get_local $$cmp28) + (block + (set_local $$n$addr$3 + (get_local $$n$addr$227) + ) + (set_local $$s$2 + (get_local $$s$128) + ) + (br $label$break$L8) + ) + ) + (set_local $$incdec$ptr33 + (i32.add + (get_local $$s$128) + (i32.const 1) + ) + ) + (set_local $$dec34 + (i32.add + (get_local $$n$addr$227) + (i32.const -1) + ) + ) + (set_local $$tobool25 + (i32.eq + (get_local $$dec34) + (i32.const 0) + ) + ) + (if + (get_local $$tobool25) + (block + (set_local $$n$addr$3 + (i32.const 0) + ) + (set_local $$s$2 + (get_local $$incdec$ptr33) + ) + (br $while-out4) + ) + (block + (set_local $$n$addr$227 + (get_local $$dec34) + ) + (set_local $$s$128 + (get_local $$incdec$ptr33) + ) + ) + ) + (br $while-in5) + ) + ) + ) + ) + ) + ) + ) + (set_local $$tobool36 + (i32.ne + (get_local $$n$addr$3) + (i32.const 0) + ) + ) + (set_local $$cond + (if (result i32) + (get_local $$tobool36) + (get_local $$s$2) + (i32.const 0) + ) + ) + (return + (get_local $$cond) + ) + ) + (func $switch64_big_condition1 (; 35 ;) (param $$x i64) + (local $1 i64) + (block $switch + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default + (i32.wrap/i64 + (block (result i64) + (set_local $1 + (i64.sub + (get_local $$x) + (i64.const 9218868437227405312) + ) + ) + (br_if $switch-default + (i32.wrap/i64 + (i64.shr_u + (get_local $1) + (i64.const 32) + ) + ) + ) + (get_local $1) + ) + ) + ) + ) + (block + (call $abort) + (br $switch) + ) + ) + (return) + ) + ) + (func $switch64_big_condition2 (; 36 ;) (param $$x i64) + (local $1 i64) + (block $switch + (block $switch-case + (br_table $switch-case $switch + (i32.wrap/i64 + (block (result i64) + (set_local $1 + (i64.sub + (get_local $$x) + (i64.const 9218868437227405312) + ) + ) + (br_if $switch + (i32.wrap/i64 + (i64.shr_u + (get_local $1) + (i64.const 32) + ) + ) + ) + (get_local $1) + ) + ) + ) + ) + (block + (call $abort) + (br $switch) + ) + ) + ) + (func $keepAlive (; 37 ;) + (call $loads) + (call $loads) + (call $stores) + (call $stores) + (call $test) + (call $test) + (drop + (call $imports) + ) + (drop + (call $imports) + ) + (call $arg + (i64.const 0) + ) + (call $arg + (i64.const 0) + ) + (drop + (call $call1 + (i64.const 0) + ) + ) + (drop + (call $call1 + (i64.const 0) + ) + ) + (drop + (call $call2 + (i64.const 0) + ) + ) + (drop + (call $call2 + (i64.const 0) + ) + ) + (drop + (call $returnCastConst) + ) + (drop + (call $returnCastConst) + ) + (drop + (call $ifValue64 + (i64.const 0) + (i64.const 0) + ) + ) + (drop + (call $ifValue64 + (i64.const 0) + (i64.const 0) + ) + ) + (drop + (call $ifValue32 + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call $ifValue32 + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call $switch64 + (i64.const 0) + ) + ) + (drop + (call $switch64 + (i64.const 0) + ) + ) + (call $unreachable_leftovers + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + (call $unreachable_leftovers + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + (drop + (call $_memchr + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + ) + (drop + (call $switch64TOOMUCH + (i64.const 0) + ) + ) + (call $switch64_big_condition1 + (i64.const 0) + ) + (call $switch64_big_condition2 + (i64.const 0) + ) + ) + (func $__emscripten_dceable_type_decls (; 38 ;) + (drop + (call $legalfunc$_fabsf + (f32.const 0) + ) + ) + (drop + (call $legalfunc$do_i64) + ) + ) + (func $legalstub$illegalParam (; 39 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 f64) + (call $illegalParam + (get_local $0) + (i64.or + (i64.extend_u/i32 + (get_local $1) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $2) + ) + (i64.const 32) + ) + ) + (get_local $3) + ) + ) + (func $legalstub$illegalResult (; 40 ;) (result i32) + (local $0 i64) + (set_local $0 + (call $illegalResult) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $0) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $0) + ) + ) + (func $legalfunc$illegalImport (; 41 ;) (param $0 f64) (param $1 i64) (param $2 i32) + (call $legalimport$illegalImport + (get_local $0) + (i32.wrap/i64 + (get_local $1) + ) + (i32.wrap/i64 + (i64.shr_u + (get_local $1) + (i64.const 32) + ) + ) + (get_local $2) + ) + ) + (func $legalfunc$illegalImportResult (; 42 ;) (result i64) + (i64.or + (i64.extend_u/i32 + (call $legalimport$illegalImportResult) + ) + (i64.shl + (i64.extend_u/i32 + (get_global $tempRet0) + ) + (i64.const 32) + ) + ) + ) + (func $legalfunc$_fabsf (; 43 ;) (param $0 f32) (result f32) + (f32.demote/f64 + (call $legalimport$_fabsf + (f64.promote/f32 + (get_local $0) + ) + ) + ) + ) + (func $legalfunc$do_i64 (; 44 ;) (result i64) + (i64.or + (i64.extend_u/i32 + (call $legalimport$do_i64) + ) + (i64.shl + (i64.extend_u/i32 + (get_global $tempRet0) + ) + (i64.const 32) + ) + ) + ) +) diff --git a/src/binaryen/test/wasm2asm.asserts.js b/src/binaryen/test/wasm2asm.asserts.js new file mode 100644 index 0000000000..a9f5c86ffa --- /dev/null +++ b/src/binaryen/test/wasm2asm.asserts.js @@ -0,0 +1,107 @@ +function asmFunc(global, env, buffer) { + "use asm"; + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + var Math_imul = global.Math.imul; + var Math_fround = global.Math.fround; + var Math_abs = global.Math.abs; + var Math_clz32 = global.Math.clz32; + function $$0() { + + } + + function $$1(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return x + y | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$2(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return (x | 0) / (y | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function __wasm_ctz_i32(x) { + x = x | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0; + if ((x | 0) == (0 | 0)) $$9 = 32; else $$9 = 31 - Math_clz32(x ^ (x - 1 | 0) | 0) | 0; + return $$9 | 0; + } + + function __wasm_popcnt_i32(x) { + x = x | 0; + var count = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0; + count = 0; + b : { + l : do { + $$5 = count; + if ((x | 0) == (0 | 0)) break b; + x = x & (x - 1 | 0) | 0; + count = count + 1 | 0; + continue l; + break l; + } while (1); + }; + return $$5 | 0; + } + + function __wasm_rotl_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 >>> (k & 31 | 0) | 0) & x | 0) << (k & 31 | 0) | 0 | (((4294967295 << (32 - (k & 31 | 0) | 0) | 0) & x | 0) >>> (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function __wasm_rotr_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 << (k & 31 | 0) | 0) & x | 0) >>> (k & 31 | 0) | 0 | (((4294967295 >>> (32 - (k & 31 | 0) | 0) | 0) & x | 0) << (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + return { + empty: $$0, + add: $$1, + div_s: $$2 + }; +} + +var asmModule = asmFunc({ + Math: Math, + Int8Array: Int8Array, + Int16Array: Int16Array, + Int32Array: Int32Array, + Uint8Array: Uint8Array, + Uint16Array: Uint16Array, + Uint32Array: Uint32Array, + Float32Array: Float32Array, + Float64Array: Float64Array +}, { + +}, new ArrayBuffer(65536)); +function check1() { + var wasm2asm_i32$0 = 0; + asmModule.empty(); + wasm2asm_i32$0 = 1; + return wasm2asm_i32$0 | 0; +} + +if (!check1()) fail1(); +function check2() { + return (asmModule.add(1 | 0, 1 | 0) | 0 | 0) == (2 | 0) | 0; +} + +if (!check2()) fail2(); diff --git a/src/binaryen/test/wasm2asm.traps.js b/src/binaryen/test/wasm2asm.traps.js new file mode 100644 index 0000000000..52824341e9 --- /dev/null +++ b/src/binaryen/test/wasm2asm.traps.js @@ -0,0 +1,135 @@ +function asmFunc(global, env, buffer) { + "use asm"; + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + var Math_imul = global.Math.imul; + var Math_fround = global.Math.fround; + var Math_abs = global.Math.abs; + var Math_clz32 = global.Math.clz32; + function $$0() { + + } + + function $$1(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return x + y | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function $$2(x, y) { + x = x | 0; + y = y | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, wasm2asm_i32$0 = 0; + return (x | 0) / (y | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function __wasm_ctz_i32(x) { + x = x | 0; + var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0; + if ((x | 0) == (0 | 0)) $$9 = 32; else $$9 = 31 - Math_clz32(x ^ (x - 1 | 0) | 0) | 0; + return $$9 | 0; + } + + function __wasm_popcnt_i32(x) { + x = x | 0; + var count = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0; + count = 0; + b : { + l : do { + $$5 = count; + if ((x | 0) == (0 | 0)) break b; + x = x & (x - 1 | 0) | 0; + count = count + 1 | 0; + continue l; + break l; + } while (1); + }; + return $$5 | 0; + } + + function __wasm_rotl_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 >>> (k & 31 | 0) | 0) & x | 0) << (k & 31 | 0) | 0 | (((4294967295 << (32 - (k & 31 | 0) | 0) | 0) & x | 0) >>> (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + function __wasm_rotr_i32(x, k) { + x = x | 0; + k = k | 0; + var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0; + return ((4294967295 << (k & 31 | 0) | 0) & x | 0) >>> (k & 31 | 0) | 0 | (((4294967295 >>> (32 - (k & 31 | 0) | 0) | 0) & x | 0) << (32 - (k & 31 | 0) | 0) | 0) | 0 | 0; + return wasm2asm_i32$0 | 0; + } + + return { + empty: $$0, + add: $$1, + div_s: $$2 + }; +} + +var asmModule = asmFunc({ + Math: Math, + Int8Array: Int8Array, + Int16Array: Int16Array, + Int32Array: Int32Array, + Uint8Array: Uint8Array, + Uint16Array: Uint16Array, + Uint32Array: Uint32Array, + Float32Array: Float32Array, + Float64Array: Float64Array +}, { + +}, new ArrayBuffer(65536)); +function check1() { + var wasm2asm_i32$0 = 0; + asmModule.empty(); + wasm2asm_i32$0 = 1; + return wasm2asm_i32$0 | 0; +} + +if (!check1()) fail1(); +function check2() { + return (asmModule.add(1 | 0, 1 | 0) | 0 | 0) == (2 | 0) | 0; +} + +if (!check2()) fail2(); +function check3() { + function f() { + div_s(0 | 0, 0 | 0); + } + + try { + f(); + } catch (e) { + return e.message.includes("integer divide by zero"); + }; + return 0; +} + +if (!check3()) fail3(); +function check4() { + function f() { + div_s(2147483648 | 0, 4294967295 | 0); + } + + try { + f(); + } catch (e) { + return e.message.includes("integer overflow"); + }; + return 0; +} + +if (!check4()) fail4(); diff --git a/src/binaryen/test/wasm2asm.wast.asserts b/src/binaryen/test/wasm2asm.wast.asserts new file mode 100644 index 0000000000..353f563f26 --- /dev/null +++ b/src/binaryen/test/wasm2asm.wast.asserts @@ -0,0 +1,12 @@ +;; i32 operations + +(module + (func (export "empty")) + (func (export "add") (param $x i32) (param $y i32) (result i32) (i32.add (get_local $x) (get_local $y))) + (func (export "div_s") (param $x i32) (param $y i32) (result i32) (i32.div_s (get_local $x) (get_local $y))) +) + +(assert_return (invoke "empty")) +(assert_return (invoke "add" (i32.const 1) (i32.const 1)) (i32.const 2)) +(assert_trap (invoke "div_s" (i32.const 0) (i32.const 0)) "integer divide by zero") +(assert_trap (invoke "div_s" (i32.const 0x80000000) (i32.const -1)) "integer overflow") diff --git a/src/binaryen/test/wasm2asm/br_table_temp.wast b/src/binaryen/test/wasm2asm/br_table_temp.wast new file mode 100644 index 0000000000..abd66053aa --- /dev/null +++ b/src/binaryen/test/wasm2asm/br_table_temp.wast @@ -0,0 +1,1468 @@ +;; Test `br_table` operator TODO: implement more ops and replace with spec/br_table.wast + +(module + ;; Auxiliary definition + (func $dummy) + + (func (export "type-i32") + (block (drop (i32.ctz (br_table 0 0 (i32.const 0))))) + ) + (func (export "type-i64") + (block (drop (i64.ctz (br_table 0 0 (i32.const 0))))) + ) + (func (export "type-f32") + (block (drop (f32.neg (br_table 0 0 (i32.const 0))))) + ) + (func (export "type-f64") + (block (drop (f64.neg (br_table 0 0 (i32.const 0))))) + ) + + (func (export "type-i32-value") (result i32) + (block i32 (i32.ctz (br_table 0 0 (i32.const 1) (i32.const 0)))) + ) + (func (export "type-i64-value") (result i32) + (i32.wrap/i64 (block i64 (i64.ctz (br_table 0 0 (i64.const 2) (i32.const 0))))) + ) + (func (export "type-f32-value") (result f32) + (block f32 (f32.neg (br_table 0 0 (f32.const 3) (i32.const 0)))) + ) + (func (export "type-f64-value") (result f64) + (block f64 (f64.neg (br_table 0 0 (f64.const 4) (i32.const 0)))) + ) + + (func (export "empty") (param i32) (result i32) + (block (br_table 0 (get_local 0)) (return (i32.const 21))) + (i32.const 22) + ) + (func (export "empty-value") (param i32) (result i32) + (block i32 (br_table 0 (i32.const 33) (get_local 0)) (i32.const 31)) + ) + + (func (export "singleton") (param i32) (result i32) + (block + (block + (br_table 1 0 (get_local 0)) + (return (i32.const 21)) + ) + (return (i32.const 20)) + ) + (i32.const 22) + ) + + (func (export "singleton-value") (param i32) (result i32) + (block i32 + (drop + (block i32 + (br_table 0 1 (i32.const 33) (get_local 0)) + (return (i32.const 31)) + ) + ) + (i32.const 32) + ) + ) + + (func (export "multiple") (param i32) (result i32) + (block + (block + (block + (block + (block + (br_table 3 2 1 0 4 (get_local 0)) + (return (i32.const 99)) + ) + (return (i32.const 100)) + ) + (return (i32.const 101)) + ) + (return (i32.const 102)) + ) + (return (i32.const 103)) + ) + (i32.const 104) + ) + + (func (export "multiple-value") (param i32) (result i32) + (local i32) + (set_local 1 (block i32 + (set_local 1 (block i32 + (set_local 1 (block i32 + (set_local 1 (block i32 + (set_local 1 (block i32 + (br_table 3 2 1 0 4 (i32.const 200) (get_local 0)) + (return (i32.add (get_local 1) (i32.const 99))) + )) + (return (i32.add (get_local 1) (i32.const 10))) + )) + (return (i32.add (get_local 1) (i32.const 11))) + )) + (return (i32.add (get_local 1) (i32.const 12))) + )) + (return (i32.add (get_local 1) (i32.const 13))) + )) + (i32.add (get_local 1) (i32.const 14)) + ) + + (func (export "large") (param i32) (result i32) + (block + (block + (br_table + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + (get_local 0) + ) + (return (i32.const -1)) + ) + (return (i32.const 0)) + ) + (return (i32.const 1)) + ) + + (func (export "as-block-first") + (block (br_table 0 0 0 (i32.const 0)) (call $dummy)) + ) + (func (export "as-block-mid") + (block (call $dummy) (br_table 0 0 0 (i32.const 0)) (call $dummy)) + ) + (func (export "as-block-last") + (block (nop) (call $dummy) (br_table 0 0 0 (i32.const 0))) + ) + (func (export "as-block-value") (result i32) + (block i32 (nop) (call $dummy) (br_table 0 0 0 (i32.const 2) (i32.const 0))) + ) + + (func (export "as-loop-first") (result i32) + (loop i32 (br_table 1 1 (i32.const 3) (i32.const 0)) (i32.const 1)) + ) + (func (export "as-loop-mid") (result i32) + (loop i32 + (call $dummy) + (br_table 1 1 1 (i32.const 4) (i32.const -1)) + (i32.const 2) + ) + ) + (func (export "as-loop-last") (result i32) + (loop i32 (nop) (call $dummy) (br_table 1 1 1 (i32.const 5) (i32.const 1))) + ) + + (func (export "as-br-value") (result i32) + (block i32 (br 0 (br 0 (i32.const 9)))) + ) + + (func (export "as-br_if-cond") + (block (br_if 0 (br_table 0 0 0 (i32.const 1)))) + ) + (func (export "as-br_if-value") (result i32) + (block i32 + (br_if 0 (br_table 0 (i32.const 8) (i32.const 0)) (i32.const 1)) + (i32.const 7) + ) + ) + (func (export "as-br_if-value-cond") (result i32) + (block i32 + (drop (br_if 0 (i32.const 6) (br_table 0 0 (i32.const 9) (i32.const 0)))) + (i32.const 7) + ) + ) + + (func (export "as-br_table-index") + (block (br_table 0 0 0 (br_table 0 (i32.const 1)))) + ) + (func (export "as-br_table-value") (result i32) + (block i32 + (br_table 0 0 0 (br_table 0 (i32.const 10) (i32.const 0)) (i32.const 1)) + (i32.const 7) + ) + ) + (func (export "as-br_table-value-index") (result i32) + (block i32 + (br_table 0 0 (i32.const 6) (br_table 0 (i32.const 11) (i32.const 1))) + (i32.const 7) + ) + ) + + (func (export "as-return-value") (result i32) + (i32.wrap/i64 (block i64 (return (br_table 0 (i64.const 7) (i32.const 0))))) + ) + + (func (export "as-if-cond") (result i32) + (block i32 + (if i32 + (br_table 0 (i32.const 2) (i32.const 0)) + (i32.const 0) + (i32.const 1) + ) + ) + ) + (func (export "as-if-then") (param i32 i32) (result i32) + (block i32 + (if i32 + (get_local 0) + (br_table 1 (i32.const 3) (i32.const 0)) + (get_local 1) + ) + ) + ) + (func (export "as-if-else") (param i32 i32) (result i32) + (block i32 + (if i32 + (get_local 0) + (get_local 1) + (br_table 1 0 (i32.const 4) (i32.const 0)) + ) + ) + ) + + (func (export "as-select-first") (param i32 i32) (result i32) + (block i32 + (select + (br_table 0 (i32.const 5) (i32.const 0)) (get_local 0) (get_local 1) + ) + ) + ) + (func (export "as-select-second") (param i32 i32) (result i32) + (block i32 + (select + (get_local 0) (br_table 0 (i32.const 6) (i32.const 1)) (get_local 1) + ) + ) + ) + (func (export "as-select-cond") (result i32) + (block i32 + (select + (i32.const 0) (i32.const 1) (br_table 0 (i32.const 7) (i32.const 1)) + ) + ) + ) + + (func $f (param i32 i32 i32) (result i32) (i32.const -1)) + (func (export "as-call-first") (result i32) + (block i32 + (call $f + (br_table 0 (i32.const 12) (i32.const 1)) (i32.const 2) (i32.const 3) + ) + ) + ) + (func (export "as-call-mid") (result i32) + (block i32 + (call $f + (i32.const 1) (br_table 0 (i32.const 13) (i32.const 1)) (i32.const 3) + ) + ) + ) + (func (export "as-call-last") (result i32) + (block i32 + (call $f + (i32.const 1) (i32.const 2) (br_table 0 (i32.const 14) (i32.const 1)) + ) + ) + ) + + (type $sig (func (param i32 i32 i32) (result i32))) + (table anyfunc (elem $f)) + (func (export "as-call_indirect-first") (result i32) + (block i32 + (call_indirect (type $sig) + (br_table 0 (i32.const 20) (i32.const 1)) (i32.const 1) (i32.const 2) + (i32.const 3) + ) + ) + ) + (func (export "as-call_indirect-mid") (result i32) + (block i32 + (call_indirect (type $sig) + (i32.const 0) (br_table 0 (i32.const 21) (i32.const 1)) (i32.const 2) + (i32.const 3) + ) + ) + ) + (func (export "as-call_indirect-last") (result i32) + (block i32 + (call_indirect (type $sig) + (i32.const 0) (i32.const 1) (br_table 0 (i32.const 22) (i32.const 1)) + (i32.const 3) + ) + ) + ) + (func (export "as-call_indirect-func") (result i32) + (block i32 + (call_indirect (type $sig) + (i32.const 0) (i32.const 1) (i32.const 2) + (br_table 0 (i32.const 23) (i32.const 1)) + ) + ) + ) + + (func (export "as-set_local-value") (result i32) + (local f32) + (block i32 + (set_local 0 (br_table 0 (i32.const 17) (i32.const 1))) + (i32.const -1) + ) + ) + + (memory 1) + (func (export "as-load-address") (result i32) + (block i32 (i32.load (br_table 0 (i32.const 2) (i32.const 1)))) + ) + (func (export "as-loadN-address") (result i32) + (i32.wrap/i64 (block i64 (i64.load8_s (br_table 0 (i64.const 30) (i32.const 1))))) + ) + + (func (export "as-store-address") (result i32) + (block i32 + (f64.store (br_table 0 (i32.const 30) (i32.const 1)) (f64.const 7)) + (i32.const -1) + ) + ) + (func (export "as-store-value") (result i32) + (block i32 + (i64.store (i32.const 2) (br_table 0 (i32.const 31) (i32.const 1))) + (i32.const -1) + ) + ) + + (func (export "as-storeN-address") (result i32) + (block i32 + (i32.store8 (br_table 0 (i32.const 32) (i32.const 0)) (i32.const 7)) + (i32.const -1) + ) + ) + (func (export "as-storeN-value") (result i32) + (block i32 + (i64.store16 (i32.const 2) (br_table 0 (i32.const 33) (i32.const 0))) + (i32.const -1) + ) + ) + + (func (export "as-unary-operand") (result i32) + (block i32 (i32.neg (br_table 0 (i32.const 3) (i32.const 0)))) + ) + + (func (export "as-binary-left") (result i32) + (block i32 + (i32.add (br_table 0 0 (i32.const 3) (i32.const 0)) (i32.const 10)) + ) + ) + (func (export "as-binary-right") (result i32) + (i32.wrap/i64 (block i64 + (i64.add (i64.const 10) (br_table 0 (i64.const 45) (i32.const 0)))) + ) + ) + + (func (export "as-test-operand") (result i32) + (block i32 (i32.eqz (br_table 0 (i32.const 44) (i32.const 0)))) + ) + + (func (export "as-compare-left") (result i32) + (block i32 + (f64.le (br_table 0 0 (i32.const 43) (i32.const 0)) (f64.const 10)) + ) + ) + (func (export "as-compare-right") (result i32) + (block i32 + (f32.ne (f32.const 10) (br_table 0 (i32.const 42) (i32.const 0))) + ) + ) + + (func (export "as-convert-operand") (result i32) + (block i32 (i32.wrap/i64 (br_table 0 (i32.const 41) (i32.const 0)))) + ) + + (func (export "as-grow_memory-size") (result i32) + (block i32 (grow_memory (br_table 0 (i32.const 40) (i32.const 0)))) + ) + + (func (export "nested-block-value") (param i32) (result i32) + (block i32 + (drop (i32.const -1)) + (i32.add + (i32.const 1) + (block i32 + (i32.add + (i32.const 2) + (block i32 + (drop (i32.const 4)) + (i32.add + (i32.const 8) + (br_table 0 1 2 (i32.const 16) (get_local 0)) + ) + ) + ) + ) + ) + ) + ) + + (func (export "nested-br-value") (param i32) (result i32) + (block i32 + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (drop + (block i32 + (drop (i32.const 4)) + (br 0 (br_table 2 1 0 (i32.const 8) (get_local 0))) + ) + ) + (i32.const 16) + ) + ) + ) + ) + + (func (export "nested-br_if-value") (param i32) (result i32) + (block i32 + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (drop + (block i32 + (drop (i32.const 4)) + (br_if 0 (br_table 0 1 2 (i32.const 8) (get_local 0)) (i32.const 1)) + (i32.const 32) + ) + ) + (i32.const 16) + ) + ) + ) + ) + + (func (export "nested-br_if-value-cond") (param i32) (result i32) + (block i32 + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (drop (br_if 0 (i32.const 4) (br_table 0 1 0 (i32.const 8) (get_local 0)))) + (i32.const 16) + ) + ) + ) + ) + + (func (export "nested-br_table-value") (param i32) (result i32) + (block i32 + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (drop + (block i32 + (drop (i32.const 4)) + (br_table 0 (br_table 0 1 2 (i32.const 8) (get_local 0)) (i32.const 1)) + (i32.const 32) + ) + ) + (i32.const 16) + ) + ) + ) + ) + + (func (export "nested-br_table-value-index") (param i32) (result i32) + (block i32 + (i32.add + (i32.const 1) + (block i32 + (drop (i32.const 2)) + (br_table 0 (i32.const 4) (br_table 0 1 0 (i32.const 8) (get_local 0))) + (i32.const 16) + ) + ) + ) + ) +) + +(assert_return (invoke "type-i32")) +(assert_return (invoke "type-i64")) +(assert_return (invoke "type-f32")) +(assert_return (invoke "type-f64")) + +(assert_return (invoke "type-i32-value") (i32.const 1)) +(assert_return (invoke "type-i64-value") (i32.const 2)) +;; (assert_return (invoke "type-f32-value") (f32.const 3)) +;; (assert_return (invoke "type-f64-value") (f64.const 4)) + +(assert_return (invoke "empty" (i32.const 0)) (i32.const 22)) +(assert_return (invoke "empty" (i32.const 1)) (i32.const 22)) +(assert_return (invoke "empty" (i32.const 11)) (i32.const 22)) +(assert_return (invoke "empty" (i32.const -1)) (i32.const 22)) +(assert_return (invoke "empty" (i32.const -100)) (i32.const 22)) +(assert_return (invoke "empty" (i32.const 0xffffffff)) (i32.const 22)) + +(assert_return (invoke "empty-value" (i32.const 0)) (i32.const 33)) +(assert_return (invoke "empty-value" (i32.const 1)) (i32.const 33)) +(assert_return (invoke "empty-value" (i32.const 11)) (i32.const 33)) +(assert_return (invoke "empty-value" (i32.const -1)) (i32.const 33)) +(assert_return (invoke "empty-value" (i32.const -100)) (i32.const 33)) +(assert_return (invoke "empty-value" (i32.const 0xffffffff)) (i32.const 33)) + +(assert_return (invoke "singleton" (i32.const 0)) (i32.const 22)) +(assert_return (invoke "singleton" (i32.const 1)) (i32.const 20)) +(assert_return (invoke "singleton" (i32.const 11)) (i32.const 20)) +(assert_return (invoke "singleton" (i32.const -1)) (i32.const 20)) +(assert_return (invoke "singleton" (i32.const -100)) (i32.const 20)) +(assert_return (invoke "singleton" (i32.const 0xffffffff)) (i32.const 20)) + +(assert_return (invoke "singleton-value" (i32.const 0)) (i32.const 32)) +(assert_return (invoke "singleton-value" (i32.const 1)) (i32.const 33)) +(assert_return (invoke "singleton-value" (i32.const 11)) (i32.const 33)) +(assert_return (invoke "singleton-value" (i32.const -1)) (i32.const 33)) +(assert_return (invoke "singleton-value" (i32.const -100)) (i32.const 33)) +(assert_return (invoke "singleton-value" (i32.const 0xffffffff)) (i32.const 33)) + +(assert_return (invoke "multiple" (i32.const 0)) (i32.const 103)) +(assert_return (invoke "multiple" (i32.const 1)) (i32.const 102)) +(assert_return (invoke "multiple" (i32.const 2)) (i32.const 101)) +(assert_return (invoke "multiple" (i32.const 3)) (i32.const 100)) +(assert_return (invoke "multiple" (i32.const 4)) (i32.const 104)) +(assert_return (invoke "multiple" (i32.const 5)) (i32.const 104)) +(assert_return (invoke "multiple" (i32.const 6)) (i32.const 104)) +(assert_return (invoke "multiple" (i32.const 10)) (i32.const 104)) +(assert_return (invoke "multiple" (i32.const -1)) (i32.const 104)) +(assert_return (invoke "multiple" (i32.const 0xffffffff)) (i32.const 104)) + +(assert_return (invoke "multiple-value" (i32.const 0)) (i32.const 213)) +(assert_return (invoke "multiple-value" (i32.const 1)) (i32.const 212)) +(assert_return (invoke "multiple-value" (i32.const 2)) (i32.const 211)) +(assert_return (invoke "multiple-value" (i32.const 3)) (i32.const 210)) +(assert_return (invoke "multiple-value" (i32.const 4)) (i32.const 214)) +(assert_return (invoke "multiple-value" (i32.const 5)) (i32.const 214)) +(assert_return (invoke "multiple-value" (i32.const 6)) (i32.const 214)) +(assert_return (invoke "multiple-value" (i32.const 10)) (i32.const 214)) +(assert_return (invoke "multiple-value" (i32.const -1)) (i32.const 214)) +(assert_return (invoke "multiple-value" (i32.const 0xffffffff)) (i32.const 214)) + +(assert_return (invoke "large" (i32.const 0)) (i32.const 0)) +(assert_return (invoke "large" (i32.const 1)) (i32.const 1)) +(assert_return (invoke "large" (i32.const 100)) (i32.const 0)) +(assert_return (invoke "large" (i32.const 101)) (i32.const 1)) +(assert_return (invoke "large" (i32.const 10000)) (i32.const 0)) +(assert_return (invoke "large" (i32.const 10001)) (i32.const 1)) +(assert_return (invoke "large" (i32.const 1000000)) (i32.const 1)) +(assert_return (invoke "large" (i32.const 1000001)) (i32.const 1)) + +(assert_return (invoke "as-block-first")) +(assert_return (invoke "as-block-mid")) +(assert_return (invoke "as-block-last")) +(assert_return (invoke "as-block-value") (i32.const 2)) + +(assert_return (invoke "as-loop-first") (i32.const 3)) +(assert_return (invoke "as-loop-mid") (i32.const 4)) +(assert_return (invoke "as-loop-last") (i32.const 5)) + +(assert_return (invoke "as-br-value") (i32.const 9)) + +(assert_return (invoke "as-br_if-cond")) +(assert_return (invoke "as-br_if-value") (i32.const 8)) +(assert_return (invoke "as-br_if-value-cond") (i32.const 9)) + +(assert_return (invoke "as-br_table-index")) +(assert_return (invoke "as-br_table-value") (i32.const 10)) +(assert_return (invoke "as-br_table-value-index") (i32.const 11)) + +(assert_return (invoke "as-return-value") (i32.const 7)) + +(assert_return (invoke "as-if-cond") (i32.const 2)) +(assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) +(assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) +(assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) + +(assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) +(assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) +(assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-select-cond") (i32.const 7)) + +(assert_return (invoke "as-call-first") (i32.const 12)) +(assert_return (invoke "as-call-mid") (i32.const 13)) +(assert_return (invoke "as-call-last") (i32.const 14)) + +(assert_return (invoke "as-call_indirect-first") (i32.const 20)) +(assert_return (invoke "as-call_indirect-mid") (i32.const 21)) +(assert_return (invoke "as-call_indirect-last") (i32.const 22)) +(assert_return (invoke "as-call_indirect-func") (i32.const 23)) + +(assert_return (invoke "as-set_local-value") (i32.const 17)) + +(assert_return (invoke "as-load-address") (i32.const 2)) +(assert_return (invoke "as-loadN-address") (i32.const 30)) + +(assert_return (invoke "as-store-address") (i32.const 30)) +(assert_return (invoke "as-store-value") (i32.const 31)) +(assert_return (invoke "as-storeN-address") (i32.const 32)) +(assert_return (invoke "as-storeN-value") (i32.const 33)) + +(assert_return (invoke "as-unary-operand") (i32.const 3)) + +(assert_return (invoke "as-binary-left") (i32.const 3)) +(assert_return (invoke "as-binary-right") (i32.const 45)) + +(assert_return (invoke "as-test-operand") (i32.const 44)) + +(assert_return (invoke "as-compare-left") (i32.const 43)) +(assert_return (invoke "as-compare-right") (i32.const 42)) + +(assert_return (invoke "as-convert-operand") (i32.const 41)) + +(assert_return (invoke "as-grow_memory-size") (i32.const 40)) + +(assert_return (invoke "nested-block-value" (i32.const 0)) (i32.const 19)) +(assert_return (invoke "nested-block-value" (i32.const 1)) (i32.const 17)) +(assert_return (invoke "nested-block-value" (i32.const 2)) (i32.const 16)) +(assert_return (invoke "nested-block-value" (i32.const 10)) (i32.const 16)) +(assert_return (invoke "nested-block-value" (i32.const -1)) (i32.const 16)) +(assert_return (invoke "nested-block-value" (i32.const 100000)) (i32.const 16)) + +(assert_return (invoke "nested-br-value" (i32.const 0)) (i32.const 8)) +(assert_return (invoke "nested-br-value" (i32.const 1)) (i32.const 9)) +(assert_return (invoke "nested-br-value" (i32.const 2)) (i32.const 17)) +(assert_return (invoke "nested-br-value" (i32.const 11)) (i32.const 17)) +(assert_return (invoke "nested-br-value" (i32.const -4)) (i32.const 17)) +(assert_return (invoke "nested-br-value" (i32.const 10213210)) (i32.const 17)) + +(assert_return (invoke "nested-br_if-value" (i32.const 0)) (i32.const 17)) +(assert_return (invoke "nested-br_if-value" (i32.const 1)) (i32.const 9)) +(assert_return (invoke "nested-br_if-value" (i32.const 2)) (i32.const 8)) +(assert_return (invoke "nested-br_if-value" (i32.const 9)) (i32.const 8)) +(assert_return (invoke "nested-br_if-value" (i32.const -9)) (i32.const 8)) +(assert_return (invoke "nested-br_if-value" (i32.const 999999)) (i32.const 8)) + +(assert_return (invoke "nested-br_if-value-cond" (i32.const 0)) (i32.const 9)) +(assert_return (invoke "nested-br_if-value-cond" (i32.const 1)) (i32.const 8)) +(assert_return (invoke "nested-br_if-value-cond" (i32.const 2)) (i32.const 9)) +(assert_return (invoke "nested-br_if-value-cond" (i32.const 3)) (i32.const 9)) +(assert_return (invoke "nested-br_if-value-cond" (i32.const -1000000)) (i32.const 9)) +(assert_return (invoke "nested-br_if-value-cond" (i32.const 9423975)) (i32.const 9)) + +(assert_return (invoke "nested-br_table-value" (i32.const 0)) (i32.const 17)) +(assert_return (invoke "nested-br_table-value" (i32.const 1)) (i32.const 9)) +(assert_return (invoke "nested-br_table-value" (i32.const 2)) (i32.const 8)) +(assert_return (invoke "nested-br_table-value" (i32.const 9)) (i32.const 8)) +(assert_return (invoke "nested-br_table-value" (i32.const -9)) (i32.const 8)) +(assert_return (invoke "nested-br_table-value" (i32.const 999999)) (i32.const 8)) + +(assert_return (invoke "nested-br_table-value-index" (i32.const 0)) (i32.const 9)) +(assert_return (invoke "nested-br_table-value-index" (i32.const 1)) (i32.const 8)) +(assert_return (invoke "nested-br_table-value-index" (i32.const 2)) (i32.const 9)) +(assert_return (invoke "nested-br_table-value-index" (i32.const 3)) (i32.const 9)) +(assert_return (invoke "nested-br_table-value-index" (i32.const -1000000)) (i32.const 9)) +(assert_return (invoke "nested-br_table-value-index" (i32.const 9423975)) (i32.const 9)) + +(assert_invalid + (module (func $type-arg-void-vs-num (result i32) + (block (br_table 0 (i32.const 1)) (i32.const 1)) + )) + "type mismatch" +) + +(; TODO(stack): soft failure +(assert_invalid + (module (func $type-arg-poly-vs-empty + (block (br_table 0 (unreachable) (i32.const 1))) + )) + "type mismatch" +) +;) + +(assert_invalid + (module (func $type-arg-void-vs-num (result i32) + (block i32 (br_table 0 (nop) (i32.const 1)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-arg-num-vs-num (result i32) + (block i32 (br_table 0 0 0 (i64.const 1) (i32.const 1)) (i32.const 1)) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-index-void-vs-i32 + (block (br_table 0 0 0 (nop))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-index-num-vs-i32 + (block (br_table 0 (i64.const 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-arg-index-void-vs-i32 (result i32) + (block i32 (br_table 0 0 (i32.const 0) (nop)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-arg-index-num-vs-i32 (result i32) + (block i32 (br_table 0 0 (i32.const 0) (i64.const 0)) (i32.const 1)) + )) + "type mismatch" +) + +(assert_invalid + (module (func $unbound-label + (block (br_table 2 1 (i32.const 1))) + )) + "unknown label" +) +(assert_invalid + (module (func $unbound-nested-label + (block (block (br_table 0 5 (i32.const 1)))) + )) + "unknown label" +) +(assert_invalid + (module (func $large-label + (block (br_table 0 0x10000001 0 (i32.const 1))) + )) + "unknown label" +) + +(assert_invalid + (module (func $unbound-label-default + (block (br_table 1 2 (i32.const 1))) + )) + "unknown label" +) +(assert_invalid + (module (func $unbound-nested-label-default + (block (block (br_table 0 5 (i32.const 1)))) + )) + "unknown label" +) +(assert_invalid + (module (func $large-label-default + (block (br_table 0 0 0x10000001 (i32.const 1))) + )) + "unknown label" +) diff --git a/src/binaryen/test/wasm_backend/globals_only.cpp b/src/binaryen/test/wasm_backend/globals_only.cpp new file mode 100644 index 0000000000..9a2f1bcc8c --- /dev/null +++ b/src/binaryen/test/wasm_backend/globals_only.cpp @@ -0,0 +1,21 @@ +#include + +char c = 10; +short s = 20; +int i = 55; + +void print(int v) { + int *x = (int*)8; + *x = v; + EM_ASM({ + Module.print("print: " + HEAP32[8>>2]); + }); +} + +int main() { + print(1); + print(c); + print(s); + print(i); +} + diff --git a/src/binaryen/test/wasm_backend/globals_only.txt b/src/binaryen/test/wasm_backend/globals_only.txt new file mode 100644 index 0000000000..56248691d7 --- /dev/null +++ b/src/binaryen/test/wasm_backend/globals_only.txt @@ -0,0 +1,5 @@ +print: 1 +print: 10 +print: 20 +print: 55 + diff --git a/src/binaryen/test/wasm_backend/hello_num_only.cpp b/src/binaryen/test/wasm_backend/hello_num_only.cpp new file mode 100644 index 0000000000..d272f11c6d --- /dev/null +++ b/src/binaryen/test/wasm_backend/hello_num_only.cpp @@ -0,0 +1,10 @@ +#include + +int main() { + int *x = (int*)8; + *x = 123; + EM_ASM({ + Module.print("hello, world " + HEAP32[8>>2] + "!"); + }); +} + diff --git a/src/binaryen/test/wasm_backend/hello_num_only.txt b/src/binaryen/test/wasm_backend/hello_num_only.txt new file mode 100644 index 0000000000..9afd068a45 --- /dev/null +++ b/src/binaryen/test/wasm_backend/hello_num_only.txt @@ -0,0 +1 @@ +hello, world 123! diff --git a/src/binaryen/test/wasm_backend/hello_world_only.cpp b/src/binaryen/test/wasm_backend/hello_world_only.cpp new file mode 100644 index 0000000000..a4a6a025d0 --- /dev/null +++ b/src/binaryen/test/wasm_backend/hello_world_only.cpp @@ -0,0 +1,8 @@ +#include + +int main() { + EM_ASM({ + Module.print("hello, world!"); + }); +} + diff --git a/src/binaryen/test/wasm_backend/hello_world_only.txt b/src/binaryen/test/wasm_backend/hello_world_only.txt new file mode 100644 index 0000000000..270c611ee7 --- /dev/null +++ b/src/binaryen/test/wasm_backend/hello_world_only.txt @@ -0,0 +1 @@ +hello, world! diff --git a/src/binaryen/test/wasm_backend/hello_world_real.cpp b/src/binaryen/test/wasm_backend/hello_world_real.cpp new file mode 100644 index 0000000000..1e39e8bd42 --- /dev/null +++ b/src/binaryen/test/wasm_backend/hello_world_real.cpp @@ -0,0 +1,6 @@ +#include + +int main() { + printf("hello, world!\n"); +} + diff --git a/src/binaryen/test/wasm_backend/hello_world_real.txt b/src/binaryen/test/wasm_backend/hello_world_real.txt new file mode 100644 index 0000000000..270c611ee7 --- /dev/null +++ b/src/binaryen/test/wasm_backend/hello_world_real.txt @@ -0,0 +1 @@ +hello, world! diff --git a/src/binaryen/test/wasm_backend/i64.load32_u.cpp b/src/binaryen/test/wasm_backend/i64.load32_u.cpp new file mode 100644 index 0000000000..a53c93d866 --- /dev/null +++ b/src/binaryen/test/wasm_backend/i64.load32_u.cpp @@ -0,0 +1,16 @@ +#include +#include + +volatile uint64_t x = 0x0101010101010101; +volatile uint32_t u = 0xfefefefe; + +int main(void) +{ + putchar('a' + (x >> 60)); + + x = u; // i64.load32_u + + putchar('A' + (x >> 60)); + putchar('\n'); + return 0; +} diff --git a/src/binaryen/test/wasm_backend/i64.load32_u.txt b/src/binaryen/test/wasm_backend/i64.load32_u.txt new file mode 100644 index 0000000000..7ac5efc36b --- /dev/null +++ b/src/binaryen/test/wasm_backend/i64.load32_u.txt @@ -0,0 +1 @@ +aA diff --git a/src/binaryen/test/wasm_backend/i64_load.cpp b/src/binaryen/test/wasm_backend/i64_load.cpp new file mode 100644 index 0000000000..a54b316509 --- /dev/null +++ b/src/binaryen/test/wasm_backend/i64_load.cpp @@ -0,0 +1,15 @@ +#include +#include + +struct S1 { unsigned lo:32; unsigned mid:2; unsigned hi:30; }; + +static struct S1 g_68 = { -1, 0, 0xbbe }; // 0xbbe = 3006 + +extern "C" void emscripten_autodebug_i32(int32_t x, int32_t y); + +int main() { + emscripten_autodebug_i32(0, g_68.lo); + emscripten_autodebug_i32(1, g_68.mid); + emscripten_autodebug_i32(2, g_68.hi); + return 0; +} diff --git a/src/binaryen/test/wasm_backend/i64_load.txt b/src/binaryen/test/wasm_backend/i64_load.txt new file mode 100644 index 0000000000..119a531df6 --- /dev/null +++ b/src/binaryen/test/wasm_backend/i64_load.txt @@ -0,0 +1,4 @@ +AD:0,-1 +AD:1,0 +AD:2,3006 + diff --git a/src/binaryen/test/wasm_backend/indirect_call_only.cpp b/src/binaryen/test/wasm_backend/indirect_call_only.cpp new file mode 100644 index 0000000000..ef52a4ad12 --- /dev/null +++ b/src/binaryen/test/wasm_backend/indirect_call_only.cpp @@ -0,0 +1,50 @@ +#include + +void print(const char *prefix, int v) { + int *x = (int*)8; // XXX this order is wrong! + *x = (int)prefix; + int *y = (int*)16; + *y = v; + EM_ASM({ + Module.print("print: " + Pointer_stringify(HEAP32[8>>2]) + " : " + HEAP32[16>>2]); + }); +} + +void something() { + print("something", 12); +} + +void more() { + print("more", -1); +} + +void other(int x) { + print("other", x + 40); +} + +void yet(int x) { + print("yet", x + 99); +} + +typedef void (*v)(); +typedef void (*vi)(int); + +int main(int argc, char **argv) { + print("argc", argc); + v f1[4] = { something, more, something, more }; + print("addr of something", (int)&something); + print("addr of more", (int)&more); + for (int i = 0; i < 4 && i < argc*4; i++) { + print("i", i); + v curr = f1[i]; + //print("curr address to call", (int)curr); + curr(); + } + vi f2[4] = { other, yet, other, yet }; + for (int i = 0; i < 4 && i < argc*4; i++) { + vi curr = f2[i]; + //print("curr", (int)curr); + curr(i); + } +} + diff --git a/src/binaryen/test/wasm_backend/indirect_call_only.txt b/src/binaryen/test/wasm_backend/indirect_call_only.txt new file mode 100644 index 0000000000..0927c18853 --- /dev/null +++ b/src/binaryen/test/wasm_backend/indirect_call_only.txt @@ -0,0 +1,15 @@ +print: argc : 1 +print: addr of something : 1 +print: addr of more : 2 +print: i : 0 +print: something : 12 +print: i : 1 +print: more : -1 +print: i : 2 +print: something : 12 +print: i : 3 +print: more : -1 +print: other : 40 +print: yet : 100 +print: other : 42 +print: yet : 102 diff --git a/src/binaryen/test/wasm_backend/unaligned_only.cpp b/src/binaryen/test/wasm_backend/unaligned_only.cpp new file mode 100644 index 0000000000..75f8b419b7 --- /dev/null +++ b/src/binaryen/test/wasm_backend/unaligned_only.cpp @@ -0,0 +1,70 @@ +#include +#include + +void print(int v) { + int *x = (int*)8; + *x = v; + EM_ASM({ + Module.print("print: " + HEAP32[8>>2]); + }); +} + +char buffer[8]; + +int main() { + { + volatile int16_t* x; + x = (int16_t*)&buffer[0]; + *x = 0x1234; + print(*x); + x = (int16_t*)&buffer[1]; + *x = 0x2345; + print(*x); + } + { + volatile int32_t* x; + x = (int32_t*)&buffer[0]; + *x = 0x12345678; + print(*x); + x = (int32_t*)&buffer[1]; + *x = 0x23456789; + print(*x); + x = (int32_t*)&buffer[2]; + *x = 0x3456789a; + print(*x); + x = (int32_t*)&buffer[3]; + *x = 0x456789ab; + print(*x); + } + { + volatile float* x; + x = (float*)&buffer[0]; + *x = -0x12345678; + print(*x); + x = (float*)&buffer[1]; + *x = -0x12345678; + print(*x); + x = (float*)&buffer[2]; + *x = -0x12345678; + print(*x); + x = (float*)&buffer[3]; + *x = -0x12345678; + print(*x); + } + { + volatile double* x; + x = (double*)&buffer[0]; + *x = -1; + print(*x); + x = (double*)&buffer[1]; + *x = -2; + print(*x); + x = (double*)&buffer[2]; + *x = -3; + print(*x); + x = (double*)&buffer[3]; + *x = -4; + print(*x); + } +} + diff --git a/src/binaryen/test/wasm_backend/unaligned_only.txt b/src/binaryen/test/wasm_backend/unaligned_only.txt new file mode 100644 index 0000000000..15ca033cf6 --- /dev/null +++ b/src/binaryen/test/wasm_backend/unaligned_only.txt @@ -0,0 +1,15 @@ +print: 4660 +print: 9029 +print: 305419896 +print: 591751049 +print: 878082202 +print: 1164413355 +print: -305419904 +print: -305419904 +print: -305419904 +print: -305419904 +print: -1 +print: -2 +print: -3 +print: -4 + diff --git a/src/binaryen/test/waterfall/.travis.yml b/src/binaryen/test/waterfall/.travis.yml new file mode 100644 index 0000000000..cd0eff2bce --- /dev/null +++ b/src/binaryen/test/waterfall/.travis.yml @@ -0,0 +1,12 @@ +sudo: false +language: python +python: + - "2.7" +install: + - pip install flake8 +before_script: + - flake8 --version +script: + - flake8 +notifications: + email: false diff --git a/src/binaryen/test/waterfall/Contributing.md b/src/binaryen/test/waterfall/Contributing.md new file mode 100644 index 0000000000..1cc607fa47 --- /dev/null +++ b/src/binaryen/test/waterfall/Contributing.md @@ -0,0 +1,8 @@ +# Contributing to WebAssembly + +Interested in participating? Please follow +[the same contributing guidelines as the design repository][]. + + [the same contributing guidelines as the design repository]: https://github.com/WebAssembly/design/blob/master/Contributing.md + +Also, please be sure to read [the README.md](README.md) for this repository. diff --git a/src/binaryen/test/waterfall/LICENSE b/src/binaryen/test/waterfall/LICENSE new file mode 100644 index 0000000000..8f71f43fee --- /dev/null +++ b/src/binaryen/test/waterfall/LICENSE @@ -0,0 +1,202 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/src/binaryen/test/waterfall/README.md b/src/binaryen/test/waterfall/README.md new file mode 100644 index 0000000000..0fec54ba5c --- /dev/null +++ b/src/binaryen/test/waterfall/README.md @@ -0,0 +1,34 @@ +# Waterfall + +## ༼ ༎ຶ ෴ ༎ຶ༽ If it’s not tested, it’s already broken. + +Luckily, this repository has some tests: [![Build Status](https://travis-ci.org/WebAssembly/waterfall.svg?branch=master)](https://travis-ci.org/WebAssembly/waterfall) + +# What's this? + +This repository holds the code which make the WebAssembly waterfall's heart +beat. You may want to see [the waterfall][] in action, and if you don't like +what you see you may even want to [contribute](Contributing.md). + + [the waterfall]: https://wasm-stat.us + +# What's a waterfall? + +WebAssembly has many moving parts and no central owner. Some of these interact +closely, some implement the same thing. A build and test waterfall allows us to: + +* Have simple build instructions for each component. +* Archive build logs and build artifacts. +* Identify which build artifacts are known-good. +* Know which tests matter. +* Make tests easily executable. +* Know which configurations matter (build flavor, host OS, host architecture, + ...). +* Cause inadvertent breakage less often. +* When breakage occurs, identify it quickly and reverted / silenced / fixed + easily. +* When a big change is required, know which moving parts should synchronize. +* Make the feature implementation status straightforward to check for each + component. + +We should keep process to a minimum, try things out, see what works. diff --git a/src/binaryen/test/waterfall/__init__.py b/src/binaryen/test/waterfall/__init__.py new file mode 100755 index 0000000000..8db5bb0bf6 --- /dev/null +++ b/src/binaryen/test/waterfall/__init__.py @@ -0,0 +1,17 @@ +#! /usr/bin/env python + +# Copyright 2015 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Empty __init__.py file: Python treats the directory as containing a package. diff --git a/src/binaryen/test/waterfall/setup.cfg b/src/binaryen/test/waterfall/setup.cfg new file mode 100644 index 0000000000..50b0627ba5 --- /dev/null +++ b/src/binaryen/test/waterfall/setup.cfg @@ -0,0 +1,5 @@ +[pep8] +ignore = E111,E114 +[flake8] +ignore = E111,E114 +exclude = work/*,src/work/* diff --git a/src/binaryen/test/waterfall/src/__init__.py b/src/binaryen/test/waterfall/src/__init__.py new file mode 100755 index 0000000000..8db5bb0bf6 --- /dev/null +++ b/src/binaryen/test/waterfall/src/__init__.py @@ -0,0 +1,17 @@ +#! /usr/bin/env python + +# Copyright 2015 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Empty __init__.py file: Python treats the directory as containing a package. diff --git a/src/binaryen/test/waterfall/src/assemble_files.py b/src/binaryen/test/waterfall/src/assemble_files.py new file mode 100755 index 0000000000..aa92f1d6d7 --- /dev/null +++ b/src/binaryen/test/waterfall/src/assemble_files.py @@ -0,0 +1,75 @@ +#! /usr/bin/env python + +# Copyright 2015 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import glob +import os +import os.path +import sys + +import testing + + +def create_outname(outdir, infile): + """Create the output file's name.""" + basename = os.path.basename(infile) + outname = basename + '.wasm' + return os.path.join(outdir, outname) + + +def assemble(infile, outfile, extras): + """Create the command-line for an assembler invocation.""" + assembler = extras['assembler'] + basename = os.path.basename(assembler) + commands = { + 'sexpr-wasm': [extras['assembler'], infile, '-o', outfile] + } + return commands[basename] + + +def run(assembler, files, fails, out): + """Assemble all files.""" + assert os.path.isfile(assembler), 'Cannot find assembler at %s' % assembler + assert os.path.isdir(out), 'Cannot find outdir %s' % out + assembler_files = glob.glob(files) + assert len(assembler_files), 'No files found by %s' % files + return testing.execute( + tester=testing.Tester( + command_ctor=assemble, + outname_ctor=create_outname, + outdir=out, + extras={'assembler': assembler}), + inputs=assembler_files, + fails=fails) + + +def getargs(): + import argparse + parser = argparse.ArgumentParser( + description='Assemble .wast files into .wasm.') + parser.add_argument('--assembler', type=str, required=True, + help='Assembler path') + parser.add_argument('--files', type=str, required=True, + help='Glob pattern for .wast files') + parser.add_argument('--fails', type=str, required=True, + help='Expected failures') + parser.add_argument('--out', type=str, required=True, + help='Output directory') + return parser.parse_args() + + +if __name__ == '__main__': + args = getargs() + sys.exit(run(args.assembler, args.files, args.fails, args.out)) diff --git a/src/binaryen/test/waterfall/src/build.py b/src/binaryen/test/waterfall/src/build.py new file mode 100755 index 0000000000..bdfadaf245 --- /dev/null +++ b/src/binaryen/test/waterfall/src/build.py @@ -0,0 +1,1090 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright 2015 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import glob +import json +import multiprocessing +import os +import shutil +import sys +import tarfile +import tempfile +import urllib2 + +import assemble_files +import buildbot +import cloud +import compile_torture_tests +import execute_files +import link_assembly_files +import proc + + +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +WORK_DIR = os.path.join(SCRIPT_DIR, 'work') + +LLVM_SRC_DIR = os.path.join(WORK_DIR, 'llvm') +CLANG_SRC_DIR = os.path.join(LLVM_SRC_DIR, 'tools', 'clang') +COMPILER_RT_SRC_DIR = os.path.join(LLVM_SRC_DIR, 'projects', 'compiler-rt') +LLVM_TEST_SUITE_SRC_DIR = os.path.join(WORK_DIR, 'llvm-test-suite') + +EMSCRIPTEN_SRC_DIR = os.path.join(WORK_DIR, 'emscripten') +FASTCOMP_SRC_DIR = os.path.join(WORK_DIR, 'emscripten-fastcomp') + +GCC_SRC_DIR = os.path.join(WORK_DIR, 'gcc') +GCC_TEST_DIR = os.path.join(GCC_SRC_DIR, 'gcc', 'testsuite') + +V8_SRC_DIR = os.path.join(WORK_DIR, 'v8', 'v8') +os.environ['GYP_GENERATORS'] = 'ninja' # Used to build V8. + +SEXPR_SRC_DIR = os.path.join(WORK_DIR, 'sexpr-wasm-prototype') + +SPEC_SRC_DIR = os.path.join(WORK_DIR, 'spec') +ML_DIR = os.path.join(SPEC_SRC_DIR, 'ml-proto') +BINARYEN_SRC_DIR = os.path.join(WORK_DIR, 'binaryen') +MUSL_SRC_DIR = os.path.join(WORK_DIR, 'musl') + +PREBUILT_CLANG = os.path.join(WORK_DIR, 'chromium-clang') +PREBUILT_CLANG_TOOLS_CLANG = os.path.join(PREBUILT_CLANG, 'tools', 'clang') +PREBUILT_CLANG_BIN = os.path.join( + PREBUILT_CLANG, 'third_party', 'llvm-build', 'Release+Asserts', 'bin') +CC = os.path.join(PREBUILT_CLANG_BIN, 'clang') +CXX = os.path.join(PREBUILT_CLANG_BIN, 'clang++') + +# The archive itself contains the 'cmake343' directory. +PREBUILT_CMAKE_DIR = os.path.join(WORK_DIR, 'cmake343') +PREBUILT_CMAKE_ARCHIVE = 'cmake343_%s.tgz' +PREBUILT_CMAKE_URL = ('https://commondatastorage.googleapis.com/' + + 'chromium-browser-clang/tools/') +PREBUILT_CMAKE_BIN = os.path.join(PREBUILT_CMAKE_DIR, 'bin', 'cmake') + +LLVM_OUT_DIR = os.path.join(WORK_DIR, 'llvm-out') +V8_OUT_DIR = os.path.join(V8_SRC_DIR, 'out', 'Release') +SEXPR_OUT_DIR = os.path.join(WORK_DIR, 'sexpr-out') +BINARYEN_OUT_DIR = os.path.join(WORK_DIR, 'binaryen-out') +BINARYEN_BIN_DIR = os.path.join(BINARYEN_OUT_DIR, 'bin') +FASTCOMP_OUT_DIR = os.path.join(WORK_DIR, 'fastcomp-out') +MUSL_OUT_DIR = os.path.join(WORK_DIR, 'musl-out') +TORTURE_S_OUT_DIR = os.path.join(WORK_DIR, 'torture-s') +ASM2WASM_TORTURE_OUT_DIR = os.path.join(WORK_DIR, 'asm2wasm-torture-out') +EMSCRIPTENWASM_TORTURE_OUT_DIR = os.path.join(WORK_DIR, 'emwasm-torture-out') + +INSTALL_DIR = os.path.join(WORK_DIR, 'wasm-install') +INSTALL_BIN = os.path.join(INSTALL_DIR, 'bin') +INSTALL_LIB = os.path.join(INSTALL_DIR, 'lib') +INSTALL_SYSROOT = os.path.join(INSTALL_DIR, 'sysroot') + +# Avoid flakes: use cached repositories to avoid relying on external network. +GITHUB_REMOTE = 'github' +GITHUB_SSH = 'git@github.com:' +GIT_MIRROR_BASE = 'https://chromium.googlesource.com/' +LLVM_MIRROR_BASE = GIT_MIRROR_BASE + 'external/llvm.org/' +GITHUB_MIRROR_BASE = GIT_MIRROR_BASE + 'external/github.com/' +WASM_GIT_BASE = GITHUB_MIRROR_BASE + 'WebAssembly/' +EMSCRIPTEN_GIT_BASE = GITHUB_MIRROR_BASE + 'kripken/' + +# Sync OCaml from a cached tar file because the upstream repository is only +# http. The file untars into a directory of the same name as the tar file. +OCAML_STORAGE_BASE = 'https://wasm.storage.googleapis.com/' +OCAML_VERSION = 'ocaml-4.02.2' +OCAML_TAR_NAME = OCAML_VERSION + '.tar.gz' +OCAML_TAR = os.path.join(WORK_DIR, OCAML_TAR_NAME) +OCAML_URL = OCAML_STORAGE_BASE + OCAML_TAR_NAME +OCAML_DIR = os.path.join(WORK_DIR, OCAML_VERSION) +OCAML_OUT_DIR = os.path.join(WORK_DIR, 'ocaml-out') +OCAML_BIN_DIR = os.path.join(OCAML_OUT_DIR, 'bin') + +# Known failures. +IT_IS_KNOWN = 'known_gcc_test_failures.txt' +LLVM_KNOWN_TORTURE_FAILURES = os.path.join(LLVM_SRC_DIR, 'lib', 'Target', + 'WebAssembly', IT_IS_KNOWN) +ASM2WASM_KNOWN_TORTURE_COMPILE_FAILURES = os.path.join( + SCRIPT_DIR, 'test', 'asm2wasm_compile_' + IT_IS_KNOWN) +EMSCRIPTENWASM_KNOWN_TORTURE_COMPILE_FAILURES = os.path.join( + SCRIPT_DIR, 'test', 'emwasm_compile_' + IT_IS_KNOWN) + +V8_KNOWN_TORTURE_FAILURES = os.path.join(SCRIPT_DIR, 'test', + 'd8_' + IT_IS_KNOWN) +V8_MUSL_KNOWN_TORTURE_FAILURES = os.path.join(SCRIPT_DIR, 'test', + 'd8_musl_' + IT_IS_KNOWN) +SEXPR_S2WASM_KNOWN_TORTURE_FAILURES = os.path.join(SEXPR_SRC_DIR, 's2wasm_' + + IT_IS_KNOWN) +SPEC_KNOWN_TORTURE_FAILURES = os.path.join(SCRIPT_DIR, 'test', + 'spec_' + IT_IS_KNOWN) +S2WASM_KNOWN_TORTURE_FAILURES = os.path.join(BINARYEN_SRC_DIR, 'test', + 's2wasm_' + IT_IS_KNOWN) +BINARYEN_SHELL_KNOWN_TORTURE_FAILURES = ( + os.path.join(BINARYEN_SRC_DIR, 'test', + 's2wasm_known_binaryen_shell_test_failures.txt')) + +ASM2WASM_KNOWN_TORTURE_FAILURES = os.path.join( + SCRIPT_DIR, 'test', 'asm2wasm_run_' + IT_IS_KNOWN) +EMSCRIPTENWASM_KNOWN_TORTURE_FAILURES = os.path.join( + SCRIPT_DIR, 'test', 'emwasm_run_' + IT_IS_KNOWN) + + +NPROC = multiprocessing.cpu_count() + +# Schedulers which can kick off new builds, from: +# https://chromium.googlesource.com/chromium/tools/build/+/master/masters/master.client.wasm.llvm/builders.pyl +SCHEDULERS = { + None: 'forced', + 'None': 'forced', + 'llvm_commits': 'llvm', + 'clang_commits': 'clang' +} + +# Buildbot-provided environment. +BUILDBOT_SCHEDULER = os.environ.get('BUILDBOT_SCHEDULER', None) +SCHEDULER = SCHEDULERS[BUILDBOT_SCHEDULER] +BUILDBOT_REVISION = os.environ.get('BUILDBOT_REVISION', None) +BUILDBOT_BUILDNUMBER = os.environ.get('BUILDBOT_BUILDNUMBER', None) + +# Pin the GCC revision so that new torture tests don't break the bot. This +# should be manually updated when convenient. +GCC_REVISION = 'b6125c702850488ac3bfb1079ae5c9db89989406' +GCC_CLONE_DEPTH = 1000 + + +# Shell utilities + +def Chdir(path): + print 'Change directory to: %s' % path + os.chdir(path) + + +def Mkdir(path): + if os.path.exists(path): + if not os.path.isdir(path): + raise Exception('Path %s is not a directory!' % path) + print 'Directory %s already exists' % path + else: + os.mkdir(path) + + +def Remove(path): + """Remove file or directory if it exists, do nothing otherwise.""" + if os.path.exists(path): + print 'Removing %s' % path + if os.path.isdir(path): + shutil.rmtree(path) + else: + os.remove(path) + + +def CopyTree(src, dst): + """Recursively copy the items in the src directory to the dst directory. + + Unlike shutil.copytree, the destination directory and any subdirectories and + files may exist. Existing directories are left untouched, and existing files + are removed and copied from the source using shutil.copy2. It is also not + symlink-aware. + + Args: + src: Source. Must be an existing directory. + dst: Destination directory. If it exists, must be a directory. Otherwise it + will be created, along with parent directories. + """ + print 'Copying directory %s to %s' % (src, dst) + if not os.path.isdir(dst): + os.makedirs(dst) + for root, dirs, files in os.walk(src): + relroot = os.path.relpath(root, src) + dstroot = os.path.join(dst, relroot) + for d in dirs: + dstdir = os.path.join(dstroot, d) + if not os.path.isdir(dstdir): + os.mkdir(dstdir) + for f in files: + dstfile = os.path.join(dstroot, f) + if os.path.isfile(dstfile): + os.remove(dstfile) + shutil.copy2(os.path.join(root, f), dstfile) + + +def CopyBinaryToArchive(binary): + """All binaries are archived in the same tar file.""" + print 'Copying binary %s to archive %s' % (binary, INSTALL_BIN) + shutil.copy2(binary, INSTALL_BIN) + + +def CopyLibraryToArchive(library): + """All libraries are archived in the same tar file.""" + print 'Copying library %s to archive %s' % (library, INSTALL_LIB) + shutil.copy2(library, INSTALL_LIB) + + +def Tar(directory, print_content=False): + """Create a tar file from directory.""" + if not os.environ.get('BUILDBOT_BUILDERNAME'): + return + assert os.path.isdir(directory), 'Must tar a directory to avoid tarbombs' + (up_directory, basename) = os.path.split(directory) + tar = os.path.join(up_directory, basename + '.tbz2') + Remove(tar) + if print_content: + proc.check_call(['find', basename, '-type', 'f', + '-exec', 'ls', '-lhS', '{}', '+'], cwd=up_directory) + proc.check_call(['tar', 'cjf', tar, basename], cwd=up_directory) + proc.check_call(['ls', '-lh', tar], cwd=up_directory) + return tar + + +def Archive(name, tar): + """Archive the tar file with the given name, and with the LLVM git hash.""" + if not os.environ.get('BUILDBOT_BUILDERNAME'): + return + git_gs = 'git/wasm-%s-%s.tbz2' % (name, BUILDBOT_BUILDNUMBER) + buildbot.Link('download', cloud.Upload(tar, git_gs)) + + +# Repo and subproject utilities + +def GitRemoteUrl(cwd, remote): + """Get the URL of a remote.""" + return proc.check_output(['git', 'config', '--get', 'remote.%s.url' % + remote], cwd=cwd).strip() + + +def HasRemote(cwd, remote): + """"Checked whether the named remote exists.""" + remotes = proc.check_output(['git', 'remote'], + cwd=cwd).strip().splitlines() + return remote in remotes + + +def AddGithubRemote(cwd): + """When using the cloned repository for development, it's useful to have a + remote to github because origin points at a cache which is read-only.""" + origin_url = GitRemoteUrl(cwd, 'origin') + if WASM_GIT_BASE not in origin_url: + print '%s not a github mirror' % cwd + return + if HasRemote(cwd, GITHUB_REMOTE): + print '%s has %s as its "%s" remote' % ( + cwd, GitRemoteUrl(cwd, GITHUB_REMOTE), GITHUB_REMOTE) + return + remote = GITHUB_SSH + '/'.join(GitRemoteUrl(cwd, 'origin').split('/')[-2:]) + print '%s has no github remote, adding %s' % (cwd, remote) + proc.check_call(['git', 'remote', 'add', GITHUB_REMOTE, remote], + cwd=cwd) + + +def GitConfigRebaseMaster(cwd): + """Avoid generating a non-linear history in the clone + + The upstream repository is in Subversion. Use `git pull --rebase` instead of + git pull: llvm.org/docs/GettingStarted.html#git-mirror + """ + proc.check_call( + ['git', 'config', 'branch.master.rebase', 'true'], cwd=cwd) + + +class Source: + """Metadata about a sync-able source repo on the waterfall""" + def __init__(self, name, src_dir, git_repo, checkout='origin/master', + depth=None, custom_sync=None): + self.name = name + self.src_dir = src_dir + self.git_repo = git_repo + self.checkout = checkout + self.depth = depth + self.custom_sync = custom_sync + + def Sync(self): + if self.custom_sync: + self.custom_sync(self.name, self.src_dir, self.git_repo) + else: + self.GitCloneFetchCheckout() + + def GitCloneFetchCheckout(self): + """Clone a git repo if not already cloned, then fetch and checkout.""" + if os.path.isdir(self.src_dir): + print '%s directory already exists' % self.name + else: + clone = ['git', 'clone', self.git_repo, self.src_dir] + if self.depth: + clone.append('--depth') + clone.append(str(self.depth)) + proc.check_call(clone) + proc.check_call(['git', 'fetch'], cwd=self.src_dir) + if not self.checkout.startswith('origin/'): + sys.stderr.write(('WARNING: `git checkout %s` not based on origin, ' + 'checking out local branch' % self.checkout)) + proc.check_call(['git', 'checkout', self.checkout], cwd=self.src_dir) + AddGithubRemote(self.src_dir) + + def CurrentGitInfo(self): + if not self.src_dir: + return None + + def pretty(fmt): + return proc.check_output( + ['git', 'log', '-n1', '--pretty=format:%s' % fmt], + cwd=self.src_dir).strip() + remote = proc.check_output(['git', 'config', '--get', 'remote.origin.url'], + cwd=self.src_dir).strip() + return { + 'hash': pretty('%H'), + 'name': pretty('%aN'), + 'email': pretty('%ae'), + 'subject': pretty('%s'), + 'remote': remote, + } + + +def ChromiumFetchSync(name, work_dir, git_repo, checkout='origin/master'): + """Some Chromium projects want to use gclient for clone and dependencies.""" + if os.path.isdir(work_dir): + print '%s directory already exists' % name + else: + # Create Chromium repositories one deeper, separating .gclient files. + parent = os.path.split(work_dir)[0] + Mkdir(parent) + proc.check_call(['gclient', 'config', git_repo], cwd=parent) + proc.check_call(['git', 'clone', git_repo], cwd=parent) + proc.check_call(['git', 'fetch'], cwd=work_dir) + proc.check_call(['git', 'checkout', checkout], cwd=work_dir) + proc.check_call(['gclient', 'sync'], cwd=work_dir) + return (name, work_dir) + + +def SyncPrebuiltClang(name, src_dir, git_repo): + tools_clang = os.path.join(src_dir, 'tools', 'clang') + if os.path.isdir(tools_clang): + print 'Prebuilt Chromium Clang directory already exists' + else: + print 'Cloning Prebuilt Chromium Clang directory' + Mkdir(src_dir) + Mkdir(os.path.join(src_dir, 'tools')) + proc.check_call( + ['git', 'clone', git_repo, tools_clang]) + proc.check_call(['git', 'fetch'], cwd=tools_clang) + proc.check_call( + [os.path.join(tools_clang, 'scripts', 'update.py')]) + assert os.path.isfile(CC), 'Expect clang at %s' % CC + assert os.path.isfile(CXX), 'Expect clang++ at %s' % CXX + return ('chromium-clang', tools_clang) + + +def SyncPrebuiltCMake(name, src_dir, git_repo): + if os.path.isdir(PREBUILT_CMAKE_DIR): + print 'Prebuilt CMake directory already exists' + else: + platform = 'Darwin' if sys.platform == 'darwin' else 'Linux' + filename = PREBUILT_CMAKE_ARCHIVE % platform + url = PREBUILT_CMAKE_URL + filename + Mkdir(PREBUILT_CMAKE_DIR) + try: + response = urllib2.urlopen(url) + data = response.read() + print 'Downloaded %s' % url + with tempfile.TemporaryFile() as f: + f.write(data) + f.seek(0) + # The tar file itself includes the 'cmake343' directory, so set the + # extract path to WORK_DIR to get the right path + tarfile.open(mode='r:gz', fileobj=f).extractall(path=WORK_DIR) + assert os.path.isfile(PREBUILT_CMAKE_BIN) + print 'Extracted CMake to %s' % PREBUILT_CMAKE_DIR + except urllib2.URLError as e: + print 'Error downloading %s: %s' % (url, e) + raise + + +def NoSync(*args): + pass + +ALL_SOURCES = [ + Source('waterfall', SCRIPT_DIR, None, custom_sync=NoSync), + Source('llvm', LLVM_SRC_DIR, + LLVM_MIRROR_BASE + 'llvm'), + Source('clang', CLANG_SRC_DIR, + LLVM_MIRROR_BASE + 'clang'), + Source('compiler-rt', COMPILER_RT_SRC_DIR, + LLVM_MIRROR_BASE + 'compiler-rt'), + # TODO(dschuff): re-enable this when we switch back to external/llvm.org + # as the git mirror base, or when we actually begin to use it. + # Source('llvm-test-suite', LLVM_TEST_SUITE_SRC_DIR, + # LLVM_MIRROR_BASE + 'test-suite'), + Source('emscripten', EMSCRIPTEN_SRC_DIR, + EMSCRIPTEN_GIT_BASE + 'emscripten', + checkout='origin/incoming'), + Source('fastcomp', FASTCOMP_SRC_DIR, + EMSCRIPTEN_GIT_BASE + 'emscripten-fastcomp', + checkout='origin/incoming'), + Source('fastcomp-clang', + os.path.join(FASTCOMP_SRC_DIR, 'tools', 'clang'), + EMSCRIPTEN_GIT_BASE + 'emscripten-fastcomp-clang', + checkout='origin/incoming'), + Source('gcc', GCC_SRC_DIR, + GIT_MIRROR_BASE + 'chromiumos/third_party/gcc', + checkout=GCC_REVISION, depth=GCC_CLONE_DEPTH), + Source('v8', V8_SRC_DIR, + GIT_MIRROR_BASE + 'v8/v8', + custom_sync=ChromiumFetchSync), + Source('chromium-clang', PREBUILT_CLANG, + GIT_MIRROR_BASE + 'chromium/src/tools/clang', + custom_sync=SyncPrebuiltClang), + Source('cmake', '', '', # The source and git args are ignored. + custom_sync=SyncPrebuiltCMake), + Source('sexpr', SEXPR_SRC_DIR, + WASM_GIT_BASE + 'sexpr-wasm-prototype.git'), + Source('spec', SPEC_SRC_DIR, + WASM_GIT_BASE + 'spec.git'), + Source('binaryen', BINARYEN_SRC_DIR, + WASM_GIT_BASE + 'binaryen.git'), + Source('musl', MUSL_SRC_DIR, + WASM_GIT_BASE + 'musl.git', + checkout='origin/wasm-prototype-1') +] + + +def CurrentSvnRev(path): + return int(proc.check_output( + ['git', 'svn', 'find-rev', 'HEAD'], cwd=path).strip()) + + +def FindPriorSvnRev(path, goal): + revs = proc.check_output( + ['git', 'rev-list', 'origin/master'], cwd=path).splitlines() + for rev in revs: + num = proc.check_output( + ['git', 'svn', 'find-rev', rev], cwd=path).strip() + if int(num) <= goal: + return rev + raise Exception('Cannot find svn rev at or before %d' % goal) + + +def SyncToSameSvnRev(primary, secondary): + """Use primary's SVN rev to figure out which rev secondary goes to.""" + primary_svn_rev = CurrentSvnRev(primary) + print 'SVN REV for %s: %d' % (primary, primary_svn_rev) + print 'Finding prior %s rev' % secondary + prior_rev = FindPriorSvnRev(secondary, primary_svn_rev) + print 'Checking out %s rev: %s' % (secondary, prior_rev) + proc.check_call(['git', 'checkout', prior_rev], cwd=secondary) + + +def SyncLLVMClang(): + llvm_rev = BUILDBOT_REVISION if SCHEDULER == 'llvm' else 'origin/master' + clang_rev = BUILDBOT_REVISION if SCHEDULER == 'clang' else 'origin/master' + proc.check_call(['git', 'checkout', llvm_rev], cwd=LLVM_SRC_DIR) + proc.check_call(['git', 'checkout', clang_rev], cwd=CLANG_SRC_DIR) + # If LLVM didn't trigger the new build then sync LLVM to the corresponding + # clang revision, even if clang may not have triggered the build: usually + # LLVM provides APIs which clang uses, which means that most synchronized + # commits touch LLVM before clang. This should reduce the chance of breakage. + primary = LLVM_SRC_DIR if SCHEDULER == 'llvm' else CLANG_SRC_DIR + secondary = LLVM_SRC_DIR if primary == CLANG_SRC_DIR else CLANG_SRC_DIR + SyncToSameSvnRev(primary, secondary) + + +def SyncOCaml(): + if os.path.isdir(OCAML_DIR): + print 'OCaml directory already exists' + else: + print 'Downloading OCaml %s from %s' % (OCAML_VERSION, OCAML_URL) + f = urllib2.urlopen(OCAML_URL) + print 'URL: %s' % f.geturl() + print 'Info: %s' % f.info() + with open(OCAML_TAR, 'wb') as out: + out.write(f.read()) + proc.check_call(['tar', '-xvf', OCAML_TAR], cwd=WORK_DIR) + assert os.path.isdir(OCAML_DIR), 'Untar should produce %s' % OCAML_DIR + + +def Clobber(): + if os.environ.get('BUILDBOT_CLOBBER'): + buildbot.Step('Clobbering work dir') + if os.path.isdir(WORK_DIR): + shutil.rmtree(WORK_DIR) + + +class Filter: + """Filter for source or build rules, to allow including or excluding only + selected targets. + """ + def __init__(self, include=None, exclude=None): + """ include: + if present, only items in it will be included (if empty, nothing will + be included). + exclude: + if present, items in it will be excluded. + include ane exclude cannot both be present. + """ + if include and exclude: + raise Exception('Filter cannot include both include and exclude rules') + + self.include = include + self.exclude = exclude + + def Apply(self, targets): + """ Return the filtered list of targets. """ + if self.include is not None: + return [t for t in targets if t.name in self.include] + if self.exclude: + return [t for t in targets if t.name not in self.exclude] + return targets + + class DummyTarget: + def __init__(self, name): + self.name = name + + def Check(self, target): + """ Return true if the specified target will be run. """ + return len(self.Apply([self.DummyTarget(target)])) > 0 + + def All(self): + """ Return true if all possible targets will be run. """ + return self.include is None and not self.exclude + + +def SyncRepos(filter=None): + buildbot.Step('Sync Repos') + if not filter: + filter = Filter() + for repo in filter.Apply(ALL_SOURCES): + repo.Sync() + # Special cases + if filter.Check('clang'): + SyncLLVMClang() + if filter.Check('ocaml'): + SyncOCaml() + + +def GetRepoInfo(): + """Collect a readable form of all repo information here, preventing the + summary from getting out of sync with the actual list of repos.""" + info = {} + for r in ALL_SOURCES: + info[r.name] = r.CurrentGitInfo() + return info + + +def Which(name): + """Find an executable on the system by name. If not found return ''.""" + # If we want to run this on Windows, we'll have to be smarter. + try: + o = proc.check_output(['which', name]) + return o.strip() + except proc.CalledProcessError: + return '' + + +def LLVM(): + buildbot.Step('LLVM') + Mkdir(LLVM_OUT_DIR) + command = [PREBUILT_CMAKE_BIN, '-G', 'Ninja', LLVM_SRC_DIR, + '-DCMAKE_EXPORT_COMPILE_COMMANDS=ON', + '-DLLVM_BUILD_TESTS=ON', + '-DCMAKE_C_COMPILER=' + CC, + '-DCMAKE_CXX_COMPILER=' + CXX, + '-DCMAKE_BUILD_TYPE=Release', + '-DCMAKE_INSTALL_PREFIX=' + INSTALL_DIR, + '-DLLVM_INCLUDE_EXAMPLES=OFF', + '-DCLANG_INCLUDE_EXAMPLES=OFF', + '-DLLVM_BUILD_LLVM_DYLIB=ON', + '-DLLVM_LINK_LLVM_DYLIB=ON', + '-DLLVM_INSTALL_TOOLCHAIN_ONLY=ON', + '-DLLVM_ENABLE_ASSERTIONS=ON', + '-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly', + '-DLLVM_TARGETS_TO_BUILD=X86'] + ccache = Which('ccache') + if ccache: + command.extend(['-DCMAKE_%s_COMPILER_LAUNCHER=%s' % + (c, ccache) for c in ['C', 'CXX']]) + command.extend(['-DCMAKE_%s_FLAGS=-Qunused-arguments' % + c for c in ['C', 'CXX']]) + + proc.check_call(command, cwd=LLVM_OUT_DIR) + proc.check_call(['ninja', '-v'], cwd=LLVM_OUT_DIR) + proc.check_call(['ninja', 'check-all'], cwd=LLVM_OUT_DIR) + proc.check_call(['ninja', 'install'], cwd=LLVM_OUT_DIR) + # The following isn't useful for now, and takes up space. + Remove(os.path.join(INSTALL_BIN, 'clang-check')) + # The following are useful, LLVM_INSTALL_TOOLCHAIN_ONLY did away with them. + extra_bins = ['FileCheck', 'lli', 'llc', 'llvm-as', 'llvm-dis', 'llvm-link', + 'llvm-nm', 'opt'] + extra_libs = ['libLLVM*.so'] + for p in [glob.glob(os.path.join(LLVM_OUT_DIR, 'bin', b)) for b in + extra_bins]: + for e in p: + CopyBinaryToArchive(os.path.join(LLVM_OUT_DIR, 'bin', e)) + for p in [glob.glob(os.path.join(LLVM_OUT_DIR, 'lib', l)) for l in + extra_libs]: + for e in p: + CopyLibraryToArchive(os.path.join(LLVM_OUT_DIR, 'lib', e)) + + +def V8(): + buildbot.Step('V8') + proc.check_call(['ninja', '-C', V8_OUT_DIR, 'd8', 'unittests'], + cwd=V8_SRC_DIR) + proc.check_call(['tools/run-tests.py', 'unittests', '--no-presubmit', + '--shell-dir', V8_OUT_DIR], + cwd=V8_SRC_DIR) + to_archive = ['d8', 'natives_blob.bin', 'snapshot_blob.bin'] + for a in to_archive: + CopyBinaryToArchive(os.path.join(V8_OUT_DIR, a)) + + +def Sexpr(): + buildbot.Step('Sexpr') + Mkdir(SEXPR_OUT_DIR), + proc.check_call(['cmake', '-G', 'Ninja', SEXPR_SRC_DIR, + '-DCMAKE_C_COMPILER=%s' % CC, + '-DCMAKE_CXX_COMPILER=%s' % CXX, + '-DBUILD_TESTS=OFF'], + cwd=SEXPR_OUT_DIR) + proc.check_call(['ninja'], cwd=SEXPR_OUT_DIR) + sexpr = os.path.join(SEXPR_OUT_DIR, 'sexpr-wasm') + CopyBinaryToArchive(sexpr) + + +def OCaml(): + buildbot.Step('OCaml') + makefile = os.path.join(OCAML_DIR, 'config', 'Makefile') + if not os.path.isfile(makefile): + configure = os.path.join(OCAML_DIR, 'configure') + proc.check_call( + [configure, '-prefix', OCAML_OUT_DIR, '-cc', CC], cwd=OCAML_DIR) + proc.check_call(['make', 'world.opt', '-j%s' % NPROC], cwd=OCAML_DIR) + proc.check_call(['make', 'install'], cwd=OCAML_DIR) + ocamlbuild = os.path.join(OCAML_BIN_DIR, 'ocamlbuild') + assert os.path.isfile(ocamlbuild), 'Expected installed %s' % ocamlbuild + os.environ['PATH'] = OCAML_BIN_DIR + os.pathsep + os.environ['PATH'] + + +def Spec(): + buildbot.Step('spec') + # Spec builds in-tree. Always clobber and run the tests. + proc.check_call(['make', 'clean'], cwd=ML_DIR) + proc.check_call(['make', 'all'], cwd=ML_DIR) + wasm = os.path.join(ML_DIR, 'wasm.opt') + CopyBinaryToArchive(wasm) + + +def Binaryen(): + buildbot.Step('binaryen') + Mkdir(BINARYEN_OUT_DIR) + proc.check_call( + ['cmake', '-G', 'Ninja', BINARYEN_SRC_DIR, + '-DCMAKE_C_COMPILER=' + CC, + '-DCMAKE_CXX_COMPILER=' + CXX], + cwd=BINARYEN_OUT_DIR) + proc.check_call(['ninja'], cwd=BINARYEN_OUT_DIR) + assert os.path.isdir(BINARYEN_BIN_DIR), 'Expected %s' % BINARYEN_BIN_DIR + for node in os.listdir(BINARYEN_BIN_DIR): + f = os.path.join(BINARYEN_BIN_DIR, node) + if os.path.isfile(f): + CopyBinaryToArchive(f) + CopyBinaryToArchive(os.path.join(BINARYEN_SRC_DIR, 'bin', 'wasm.js')) + Mkdir(os.path.join(INSTALL_DIR, 'src')) + Mkdir(os.path.join(INSTALL_DIR, 'src', 'js')) + shutil.copy2(os.path.join(BINARYEN_SRC_DIR, 'src', 'js', 'wasm.js-post.js'), + os.path.join(INSTALL_DIR, 'src', 'js')) + + +def Fastcomp(): + buildbot.Step('fastcomp') + Mkdir(FASTCOMP_OUT_DIR) + proc.check_call( + ['cmake', '-G', 'Ninja', FASTCOMP_SRC_DIR, + '-DCMAKE_EXPORT_COMPILE_COMMANDS=ON', + '-DCMAKE_C_COMPILER=' + CC, + '-DCMAKE_CXX_COMPILER=' + CXX, + '-DCMAKE_BUILD_TYPE=Release', + '-DCMAKE_INSTALL_PREFIX=' + os.path.join(INSTALL_DIR, 'fastcomp'), + '-DLLVM_INCLUDE_EXAMPLES=OFF', + '-DCLANG_INCLUDE_EXAMPLES=OFF', + '-DLLVM_BUILD_LLVM_DYLIB=ON', + '-DLLVM_LINK_LLVM_DYLIB=ON', + '-DLLVM_TARGETS_TO_BUILD=X86;JSBackend', + '-DLLVM_ENABLE_ASSERTIONS=ON'], cwd=FASTCOMP_OUT_DIR) + proc.check_call(['ninja'], cwd=FASTCOMP_OUT_DIR) + proc.check_call(['ninja', 'install'], cwd=FASTCOMP_OUT_DIR) + + +def Emscripten(use_asm=True): + buildbot.Step('emscripten') + # Remove cached library builds (e.g. libc, libc++) to force them to be + # rebuilt in the step below. + Remove(os.path.expanduser(os.path.join('~', '.emscripten_cache'))) + em_config = os.path.join(INSTALL_DIR, 'emscripten_config') + emscripten_dir = os.path.join(INSTALL_DIR, 'bin', 'emscripten') + Remove(emscripten_dir) + shutil.copytree(EMSCRIPTEN_SRC_DIR, + emscripten_dir, + symlinks=True, + # Ignore the big git blob so it doesn't get archived. + ignore=shutil.ignore_patterns('.git')) + shutil.copy2(os.path.join(SCRIPT_DIR, 'emscripten_config_vanilla'), + em_config + '_vanilla') + shutil.copy2(os.path.join(SCRIPT_DIR, 'emscripten_config'), em_config) + try: + # Build a C++ file with each active emscripten config. This causes system + # libs to be built and cached (so we don't have that happen when building + # tests in parallel). Do it with full debug output. + # This depends on binaryen already being built and installed into the + # archive/install dir. + os.environ['EMCC_DEBUG'] = '2' + configs = [em_config + '_vanilla'] + ([em_config] if use_asm else []) + for config in configs: + os.environ['EM_CONFIG'] = config + proc.check_call([ + os.path.join(emscripten_dir, 'em++'), + os.path.join(EMSCRIPTEN_SRC_DIR, 'tests', 'hello_libcxx.cpp'), + '-O2', '-s', 'BINARYEN=1', '-s', 'BINARYEN_METHOD="native-wasm"']) + + except proc.CalledProcessError: + # Don't make it fatal yet. + buildbot.Fail(True) + finally: + del os.environ['EMCC_DEBUG'] + + +def Musl(): + buildbot.Step('musl') + Mkdir(MUSL_OUT_DIR) + try: + proc.check_call([ + os.path.join(MUSL_SRC_DIR, 'libc.py'), + '--clang_dir', INSTALL_BIN, + '--binaryen_dir', INSTALL_BIN, + '--sexpr_wasm', os.path.join(INSTALL_BIN, 'sexpr-wasm'), + '--musl', MUSL_SRC_DIR], cwd=MUSL_OUT_DIR) + for f in ['musl.wast', 'musl.wasm']: + CopyLibraryToArchive(os.path.join(MUSL_OUT_DIR, f)) + CopyLibraryToArchive(os.path.join(MUSL_SRC_DIR, + 'arch', 'wasm32', 'wasm.js')) + CopyTree(os.path.join(MUSL_SRC_DIR, 'include'), + os.path.join(INSTALL_SYSROOT, 'include')) + CopyTree(os.path.join(MUSL_SRC_DIR, 'arch', 'wasm32'), + os.path.join(INSTALL_SYSROOT, 'include')) + except proc.CalledProcessError: + buildbot.Fail() + + +def ArchiveBinaries(): + buildbot.Step('Archive binaries') + # All relevant binaries were copied to the LLVM directory. + Archive('binaries', Tar(INSTALL_DIR, print_content=True)) + + +def CompileLLVMTorture(): + name = 'Compile LLVM Torture' + buildbot.Step(name) + c = os.path.join(INSTALL_BIN, 'clang') + cxx = os.path.join(INSTALL_BIN, 'clang++') + Remove(TORTURE_S_OUT_DIR) + Mkdir(TORTURE_S_OUT_DIR) + unexpected_result_count = compile_torture_tests.run( + c=c, cxx=cxx, testsuite=GCC_TEST_DIR, + fails=LLVM_KNOWN_TORTURE_FAILURES, + out=TORTURE_S_OUT_DIR) + Archive('torture-c', Tar(GCC_TEST_DIR)) + Archive('torture-s', Tar(TORTURE_S_OUT_DIR)) + if 0 != unexpected_result_count: + buildbot.Fail() + + +def CompileLLVMTortureBinaryen(name, em_config, outdir, fails): + buildbot.Step(name) + os.environ['EM_CONFIG'] = em_config + c = os.path.join(INSTALL_DIR, 'bin', 'emscripten', 'emcc') + cxx = os.path.join(INSTALL_DIR, 'bin', 'emscripten', 'em++') + Remove(outdir) + Mkdir(outdir) + unexpected_result_count = compile_torture_tests.run( + c=c, cxx=cxx, testsuite=GCC_TEST_DIR, + fails=fails, + out=outdir, + config='binaryen') + Archive('torture-' + em_config, Tar(outdir)) + if 0 != unexpected_result_count: + buildbot.Fail(True) + return outdir + + +def LinkLLVMTorture(name, linker, fails): + buildbot.Step('Link LLVM Torture with %s' % name) + assert os.path.isfile(linker), 'Cannot find linker at %s' % linker + assembly_files = os.path.join(TORTURE_S_OUT_DIR, '*.s') + out = os.path.join(WORK_DIR, 'torture-%s' % name) + Remove(out) + Mkdir(out) + unexpected_result_count = link_assembly_files.run( + linker=linker, files=assembly_files, fails=fails, out=out) + Archive('torture-%s' % name, Tar(out)) + if 0 != unexpected_result_count: + buildbot.Fail() + return out + + +def AssembleLLVMTorture(name, assembler, indir, fails): + buildbot.Step('Assemble LLVM Torture with %s' % name) + assert os.path.isfile(assembler), 'Cannot find assembler at %s' % assembler + files = os.path.join(indir, '*.wast') + out = os.path.join(WORK_DIR, 'torture-%s' % name) + Remove(out) + Mkdir(out) + unexpected_result_count = assemble_files.run( + assembler=assembler, + files=files, + fails=fails, + out=out) + Archive('torture-%s' % name, Tar(out)) + if 0 != unexpected_result_count: + buildbot.Fail() + return out + + +def ExecuteLLVMTorture(name, runner, indir, fails, extension, outdir='', + wasmjs='', extra_files=[], is_flaky=False): + buildbot.Step('Execute LLVM Torture with %s' % name) + if not indir: + print 'Step skipped: no input' + buildbot.Fail(True) + return None + assert os.path.isfile(runner), 'Cannot find runner at %s' % runner + files = os.path.join(indir, '*.%s' % extension) + unexpected_result_count = execute_files.run( + runner=runner, + files=files, + fails=fails, + out=outdir, + wasmjs=wasmjs, + extra_files=extra_files) + if 0 != unexpected_result_count: + buildbot.Fail(is_flaky) + return outdir + + +class Build: + def __init__(self, name_, runnable_, *args, **kwargs): + self.name = name_ + self.runnable = runnable_ + self.args = args + self.kwargs = kwargs + + def Run(self): + self.runnable(*self.args, **self.kwargs) + + +def Summary(repos): + buildbot.Step('Summary') + info = {'repositories': repos} + info['build'] = BUILDBOT_BUILDNUMBER + info['scheduler'] = SCHEDULER + info_json = json.dumps(info) + print info + print 'Failed steps: %s.' % buildbot.Failed() + with open('latest', 'w+') as f: + f.write(info_json) + buildbot.Link('latest', cloud.Upload('latest', 'git/latest')) + if buildbot.Failed(): + buildbot.Fail() + else: + with open('lkgr', 'w+') as f: + f.write(info_json) + buildbot.Link('lkgr', cloud.Upload('lkgr', 'git/lkgr')) + + +def AllBuilds(use_asm=False): + return [ + # Host tools + Build('llvm', LLVM), + Build('v8', V8), + Build('sexpr', Sexpr), + Build('ocaml', OCaml), + Build('spec', Spec), + Build('binaryen', Binaryen), + Build('fastcomp', Fastcomp), + Build('emscripten', Emscripten, use_asm), + # Target libs + Build('musl', Musl), + # Archive + Build('archive', ArchiveBinaries), + ] + + +def BuildRepos(filter=None, use_asm=False): + if not filter: + filter = Filter() + for rule in filter.Apply(AllBuilds(use_asm)): + rule.Run() + + +def ParseArgs(): + import argparse + import textwrap + + def SplitComma(arg): + if not arg: + return None + return arg.split(',') + + def TextWrapNameList(prefix, items): + width = 80 # TODO(binji): better guess? + names = sorted(item.name for item in items) + return '%s%s' % (prefix, textwrap.fill(' '.join(names), width, + initial_indent=' ', + subsequent_indent=' ')) + + epilog = ( + TextWrapNameList('sync targets:\n', ALL_SOURCES) + '\n\n' + + TextWrapNameList('build targets:\n', AllBuilds())) + + parser = argparse.ArgumentParser( + description='Wasm waterfall top-level CI script', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=epilog) + sync_grp = parser.add_mutually_exclusive_group() + sync_grp.add_argument('--no-sync', dest='sync', + default=True, action='store_false', + help='Skip fetching and checking out source repos') + sync_grp.add_argument( + '--sync-include', dest='sync_include', default='', type=SplitComma, + help='Include only the comma-separated list of sync targets') + sync_grp.add_argument( + '--sync-exclude', dest='sync_exclude', default='', type=SplitComma, + help='Include only the comma-separated list of sync targets') + + build_grp = parser.add_mutually_exclusive_group() + build_grp.add_argument( + '--no-build', dest='build', default=True, action='store_false', + help='Skip building source repos (also skips V8 and LLVM unit tests)') + build_grp.add_argument( + '--build-include', dest='build_include', default='', type=SplitComma, + help='Include only the comma-separated list of build targets') + build_grp.add_argument( + '--build-exclude', dest='build_exclude', default='', type=SplitComma, + help='Include only the comma-separated list of build targets') + + test_grp = parser.add_mutually_exclusive_group() + test_grp.add_argument( + '--no-test', dest='test', default=True, action='store_false', + help='Skip running tests') + test_grp.add_argument( + '--test-include', dest='test_include', default='', type=SplitComma, + help='Include only the comma-separated list of test targets') + test_grp.add_argument( + '--test-exclude', dest='test_exclude', default='', type=SplitComma, + help='Include only the comma-separated list of test targets') + + return parser.parse_args() + + +def main(sync_filter, build_filter, test_filter, options): + Clobber() + Chdir(SCRIPT_DIR) + Mkdir(WORK_DIR) + SyncRepos(sync_filter) + repos = None + if sync_filter.Check(''): + repos = GetRepoInfo() + if build_filter.All(): + Remove(INSTALL_DIR) + Mkdir(INSTALL_DIR) + Mkdir(INSTALL_BIN) + Mkdir(INSTALL_LIB) + BuildRepos(build_filter, test_filter.Check('asm')) + + if test_filter.Check('bare'): + CompileLLVMTorture() + s2wasm_out = LinkLLVMTorture( + name='s2wasm', + linker=os.path.join(INSTALL_BIN, 's2wasm'), + fails=S2WASM_KNOWN_TORTURE_FAILURES) + sexpr_wasm_out = AssembleLLVMTorture( + name='s2wasm-sexpr-wasm', + assembler=os.path.join(INSTALL_BIN, 'sexpr-wasm'), + indir=s2wasm_out, + fails=SEXPR_S2WASM_KNOWN_TORTURE_FAILURES) + ExecuteLLVMTorture( + name='wasm-shell', + runner=os.path.join(INSTALL_BIN, 'wasm-shell'), + indir=s2wasm_out, + fails=BINARYEN_SHELL_KNOWN_TORTURE_FAILURES, + extension='wast', + is_flaky=True) # TODO wasm-shell is flaky when running tests. + ExecuteLLVMTorture( + name='spec', + runner=os.path.join(INSTALL_BIN, 'wasm.opt'), + indir=s2wasm_out, + fails=SPEC_KNOWN_TORTURE_FAILURES, + extension='wast') + ExecuteLLVMTorture( + name='d8', + runner=os.path.join(INSTALL_BIN, 'd8'), + indir=sexpr_wasm_out, + fails=V8_KNOWN_TORTURE_FAILURES, + extension='wasm', + wasmjs=os.path.join(INSTALL_LIB, 'wasm.js')) + ExecuteLLVMTorture( + name='d8-musl', + runner=os.path.join(INSTALL_BIN, 'd8'), + indir=sexpr_wasm_out, + fails=V8_MUSL_KNOWN_TORTURE_FAILURES, + extension='wasm', + wasmjs=os.path.join(INSTALL_LIB, 'wasm.js'), + extra_files=[os.path.join(INSTALL_LIB, 'musl.wasm')]) + + if test_filter.Check('asm'): + asm2wasm_out = CompileLLVMTortureBinaryen( + 'Compile LLVM Torture (asm2wasm)', + os.path.join(INSTALL_DIR, 'emscripten_config'), + ASM2WASM_TORTURE_OUT_DIR, + ASM2WASM_KNOWN_TORTURE_COMPILE_FAILURES) + ExecuteLLVMTorture( + name='asm2wasm', + runner=os.path.join(INSTALL_BIN, 'd8'), + indir=asm2wasm_out, + fails=ASM2WASM_KNOWN_TORTURE_FAILURES, + extension='c.js', + outdir=asm2wasm_out) # emscripten's wasm.js expects all files in cwd. + + if test_filter.Check('emwasm'): + emscripten_wasm_out = CompileLLVMTortureBinaryen( + 'Compile LLVM Torture (emscripten+wasm backend)', + os.path.join(INSTALL_DIR, 'emscripten_config_vanilla'), + EMSCRIPTENWASM_TORTURE_OUT_DIR, + EMSCRIPTENWASM_KNOWN_TORTURE_COMPILE_FAILURES) + ExecuteLLVMTorture( + name='emscripten-wasm', + runner=os.path.join(INSTALL_BIN, 'd8'), + indir=emscripten_wasm_out, + fails=EMSCRIPTENWASM_KNOWN_TORTURE_FAILURES, + extension='c.js', + outdir=emscripten_wasm_out) + + # Keep the summary step last: it'll be marked as red if the return code is + # non-zero. Individual steps are marked as red with buildbot.Fail(). + Summary(repos) + return buildbot.Failed() + + +if __name__ == '__main__': + options = ParseArgs() + sync_include = options.sync_include if options.sync else [] + sync_filter = Filter(sync_include, options.sync_exclude) + build_include = options.build_include if options.build else [] + build_filter = Filter(build_include, options.build_exclude) + test_include = options.test_include if options.test else [] + test_filter = Filter(test_include, options.test_exclude) + sys.exit(main(sync_filter, build_filter, test_filter, options)) diff --git a/src/binaryen/test/waterfall/src/buildbot.py b/src/binaryen/test/waterfall/src/buildbot.py new file mode 100644 index 0000000000..57f8298146 --- /dev/null +++ b/src/binaryen/test/waterfall/src/buildbot.py @@ -0,0 +1,46 @@ +#! /usr/bin/env python + +# Copyright 2016 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import sys + + +failed_steps = 0 + + +# Magic annotations: +# https://chromium.googlesource.com/chromium/tools/build/+/master/scripts/common/annotator.py +def Step(name): + sys.stdout.flush() + sys.stdout.write('\n@@@BUILD_STEP %s@@@\n' % name) + + +def Link(label, url): + sys.stdout.write('@@@STEP_LINK@%s@%s@@@\n' % (label, url)) + + +def Fail(warn_only=False): + """Mark one step as failing, but keep going.""" + sys.stdout.flush() + if warn_only: + sys.stdout.write('\n@@@STEP_WARNINGS@@@\n') + return + sys.stdout.write('\n@@@STEP_FAILURE@@@\n') + global failed_steps + failed_steps += 1 + + +def Failed(): + return failed_steps diff --git a/src/binaryen/test/waterfall/src/cloud.py b/src/binaryen/test/waterfall/src/cloud.py new file mode 100644 index 0000000000..f9c53a4f14 --- /dev/null +++ b/src/binaryen/test/waterfall/src/cloud.py @@ -0,0 +1,45 @@ +#! /usr/bin/env python + +# Copyright 2016 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os + +import proc + + +CLOUD_STORAGE_BASE_URL = 'https://storage.googleapis.com/' +CLOUD_STORAGE_PATH = 'wasm-llvm/builds/' + + +def Upload(local, remote): + """Upload file to Cloud Storage.""" + if not os.environ.get('BUILDBOT_BUILDERNAME'): + return + remote = CLOUD_STORAGE_PATH + remote + proc.check_call( + ['gsutil.py', 'cp', '-a', 'public-read', local, 'gs://' + remote]) + return CLOUD_STORAGE_BASE_URL + remote + + +def Copy(copy_from, copy_to): + """Copy from one Cloud Storage file to another.""" + if not os.environ.get('BUILDBOT_BUILDERNAME'): + return + copy_from = CLOUD_STORAGE_PATH + copy_from + copy_to = CLOUD_STORAGE_PATH + copy_to + proc.check_call( + ['gsutil.py', 'cp', '-a', 'public-read', + 'gs://' + copy_from, 'gs://' + copy_to]) + return CLOUD_STORAGE_BASE_URL + copy_to diff --git a/src/binaryen/test/waterfall/src/compile_torture_tests.py b/src/binaryen/test/waterfall/src/compile_torture_tests.py new file mode 100755 index 0000000000..c4b05341e4 --- /dev/null +++ b/src/binaryen/test/waterfall/src/compile_torture_tests.py @@ -0,0 +1,102 @@ +#! /usr/bin/env python + +# Copyright 2015 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import glob +import os +import os.path +import sys + +import testing + +# TODO: Pass this in from build.py +INSTALL_DIR = os.path.join(os.getcwd(), + 'src', 'work', 'wasm-install', 'sysroot') + +CFLAGS_COMMON = ['--std=gnu89', '-DSTACK_SIZE=1044480', + '-w', '-Wno-implicit-function-declaration'] +CFLAGS_EXTRA = { + 'wasm': ['--target=wasm32-unknown-unknown', '-S', '-O2', + '--sysroot=%s' % INSTALL_DIR], + # Binaryen's native-wasm method uses the JS engine's native support for + # wasm rather than interpreting the wasm with wasm.js. + 'binaryen': ['-s', 'BINARYEN=1', '-s', 'BINARYEN_METHOD="native-wasm"'], +} + + +def c_compile(infile, outfile, extras): + """Create the command-line for a C compiler invocation.""" + return [extras['c'], infile, '-o', outfile] + extras['cflags'] + + +class Outname: + """Create the output file's name. A local function passed to testing.execute + would be simpler, but it fails to pickle when the test driver calls pool.map. + So we manually package the suffix in a class. + """ + def __init__(self, suffix): + self.suffix = suffix + + def __call__(self, outdir, infile): + basename = os.path.basename(infile) + outname = basename + self.suffix + return os.path.join(outdir, outname) + + +def run(c, cxx, testsuite, fails, out, config='wasm'): + """Compile all torture tests.""" + assert os.path.isfile(c), 'Cannot find C compiler at %s' % c + assert os.path.isfile(cxx), 'Cannot find C++ compiler at %s' % cxx + assert os.path.isdir(testsuite), 'Cannot find testsuite at %s' % testsuite + # TODO(jfb) Also compile other C tests, as well as C++ tests under g++.dg. + c_torture = os.path.join(testsuite, 'gcc.c-torture', 'execute') + assert os.path.isdir(c_torture), ('Cannot find C torture tests at %s' % + c_torture) + assert os.path.isdir(out), 'Cannot find outdir %s' % out + c_test_files = glob.glob(os.path.join(c_torture, '*c')) + cflags = CFLAGS_COMMON + CFLAGS_EXTRA[config] + suffix = '.s' if config == 'wasm' else '.js' + + result = testing.execute( + tester=testing.Tester( + command_ctor=c_compile, + outname_ctor=Outname(suffix), + outdir=out, + extras={'c': c, 'cflags': cflags}), + inputs=c_test_files, + fails=fails) + + return result + + +def getargs(): + import argparse + parser = argparse.ArgumentParser(description='Compile GCC torture tests.') + parser.add_argument('--c', type=str, required=True, + help='C compiler path') + parser.add_argument('--cxx', type=str, required=True, + help='C++ compiler path') + parser.add_argument('--testsuite', type=str, required=True, + help='GCC testsuite tests path') + parser.add_argument('--fails', type=str, required=True, + help='Expected failures') + parser.add_argument('--out', type=str, required=True, + help='Output directory') + return parser.parse_args() + + +if __name__ == '__main__': + args = getargs() + sys.exit(run(args.c, args.cxx, args.testsuite, args.fails, args.out)) diff --git a/src/binaryen/test/waterfall/src/emscripten_config b/src/binaryen/test/waterfall/src/emscripten_config new file mode 100644 index 0000000000..d085431688 --- /dev/null +++ b/src/binaryen/test/waterfall/src/emscripten_config @@ -0,0 +1,64 @@ + +# Note: If you put paths relative to the home directory, do not forget os.path.expanduser + +# Note: On Windows, remember to escape backslashes! I.e. EMSCRIPTEN_ROOT='c:\emscripten\' is not valid, but EMSCRIPTEN_ROOT='c:\\emscripten\\' and EMSCRIPTEN_ROOT='c:/emscripten/' are. + +import os + +# This file is loaded from emscripten/tools/shared.py. There seems to be no +# reasonable way to get a hermetic relocatable setup, other than some kind of +# hack like this. +WASM_INSTALL = os.path.dirname( + os.path.dirname( + os.path.dirname( + os.path.dirname(__file__)))) + +# this helps projects using emscripten find it +EMSCRIPTEN_ROOT = os.path.join(WASM_INSTALL, 'bin', 'emscripten') # directory +LLVM_ROOT = os.path.join(WASM_INSTALL, 'fastcomp', 'bin') # directory +BINARYEN_ROOT = os.path.join(WASM_INSTALL) # directory + +# If not specified, defaults to sys.executable. +#PYTHON = 'python' + +# Add this if you have manually built the JS optimizer executable (in Emscripten/tools/optimizer) and want to run it from a custom location. +# Alternatively, you can set this as the environment variable EMSCRIPTEN_NATIVE_OPTIMIZER. +# EMSCRIPTEN_NATIVE_OPTIMIZER='/path/to/custom/optimizer(.exe)' + +# See below for notes on which JS engine(s) you need +NODE_JS = os.path.expanduser(os.getenv('NODE') or '/usr/bin/nodejs') # executable +SPIDERMONKEY_ENGINE = [os.path.expanduser(os.getenv('SPIDERMONKEY') or 'js')] # executable +V8_ENGINE = os.path.join(WASM_INSTALL, 'bin', 'd8') # executable + +JAVA = 'java' # executable + +TEMP_DIR = '/tmp' + +CRUNCH = os.path.expanduser(os.getenv('CRUNCH') or 'crunch') # executable + +#CLOSURE_COMPILER = '..' # define this to not use the bundled version + +######################################################################################################## + + +# Pick the JS engine to use for running the compiler. This engine must exist, or +# nothing can be compiled. +# +# Recommendation: If you already have node installed, use that. Otherwise, build v8 or +# spidermonkey from source. Any of these three is fine, as long as it's +# a recent version (especially for v8 and spidermonkey). + +#COMPILER_ENGINE = NODE_JS +COMPILER_ENGINE = V8_ENGINE +#COMPILER_ENGINE = SPIDERMONKEY_ENGINE + + +# All JS engines to use when running the automatic tests. Not all the engines in this list +# must exist (if they don't, they will be skipped in the test runner). +# +# Recommendation: If you already have node installed, use that. If you can, also build +# spidermonkey from source as well to get more test coverage (node can't +# run all the tests due to node issue 1669). v8 is currently not recommended +# here because of v8 issue 1822. + +JS_ENGINES = [V8_ENGINE] # add this if you have spidermonkey installed too, SPIDERMONKEY_ENGINE] diff --git a/src/binaryen/test/waterfall/src/emscripten_config_vanilla b/src/binaryen/test/waterfall/src/emscripten_config_vanilla new file mode 100644 index 0000000000..1b647239b4 --- /dev/null +++ b/src/binaryen/test/waterfall/src/emscripten_config_vanilla @@ -0,0 +1,64 @@ + +# Note: If you put paths relative to the home directory, do not forget os.path.expanduser + +# Note: On Windows, remember to escape backslashes! I.e. EMSCRIPTEN_ROOT='c:\emscripten\' is not valid, but EMSCRIPTEN_ROOT='c:\\emscripten\\' and EMSCRIPTEN_ROOT='c:/emscripten/' are. + +import os + +# This file is loaded from emscripten/tools/shared.py. There seems to be no +# reasonable way to get a hermetic relocatable setup, other than some kind of +# hack like this. +WASM_INSTALL = os.path.dirname( + os.path.dirname( + os.path.dirname( + os.path.dirname(__file__)))) + +# this helps projects using emscripten find it +EMSCRIPTEN_ROOT = os.path.join(WASM_INSTALL, 'bin', 'emscripten') # directory +LLVM_ROOT = os.path.join(WASM_INSTALL, 'bin') # directory +BINARYEN_ROOT = os.path.join(WASM_INSTALL) # directory + +# If not specified, defaults to sys.executable. +#PYTHON = 'python' + +# Add this if you have manually built the JS optimizer executable (in Emscripten/tools/optimizer) and want to run it from a custom location. +# Alternatively, you can set this as the environment variable EMSCRIPTEN_NATIVE_OPTIMIZER. +# EMSCRIPTEN_NATIVE_OPTIMIZER='/path/to/custom/optimizer(.exe)' + +# See below for notes on which JS engine(s) you need +NODE_JS = os.path.expanduser(os.getenv('NODE') or '/usr/bin/nodejs') # executable +SPIDERMONKEY_ENGINE = [os.path.expanduser(os.getenv('SPIDERMONKEY') or 'js')] # executable +V8_ENGINE = os.path.join(WASM_INSTALL, 'bin', 'd8') # executable + +JAVA = 'java' # executable + +TEMP_DIR = '/tmp' + +CRUNCH = os.path.expanduser(os.getenv('CRUNCH') or 'crunch') # executable + +#CLOSURE_COMPILER = '..' # define this to not use the bundled version + +######################################################################################################## + + +# Pick the JS engine to use for running the compiler. This engine must exist, or +# nothing can be compiled. +# +# Recommendation: If you already have node installed, use that. Otherwise, build v8 or +# spidermonkey from source. Any of these three is fine, as long as it's +# a recent version (especially for v8 and spidermonkey). + +#COMPILER_ENGINE = NODE_JS +COMPILER_ENGINE = V8_ENGINE +#COMPILER_ENGINE = SPIDERMONKEY_ENGINE + + +# All JS engines to use when running the automatic tests. Not all the engines in this list +# must exist (if they don't, they will be skipped in the test runner). +# +# Recommendation: If you already have node installed, use that. If you can, also build +# spidermonkey from source as well to get more test coverage (node can't +# run all the tests due to node issue 1669). v8 is currently not recommended +# here because of v8 issue 1822. + +JS_ENGINES = [V8_ENGINE] # add this if you have spidermonkey installed too, SPIDERMONKEY_ENGINE] diff --git a/src/binaryen/test/waterfall/src/execute_files.py b/src/binaryen/test/waterfall/src/execute_files.py new file mode 100755 index 0000000000..bdd8a1f517 --- /dev/null +++ b/src/binaryen/test/waterfall/src/execute_files.py @@ -0,0 +1,96 @@ +#! /usr/bin/env python + +# Copyright 2016 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import glob +import os +import os.path +import sys + +import testing + + +def create_outname(outdir, infile): + """Create the output file's name.""" + basename = os.path.basename(infile) + outname = basename + '.out' + return os.path.join(outdir, outname) + + +def execute(infile, outfile, extras): + """Create the command-line for an execution.""" + runner = extras['runner'] + basename = os.path.basename(runner) + out_opt = ['-o', outfile] if outfile else [] + extra_files = extras['extra_files'] + config = basename + wasmjs = [extras['wasmjs']] if extras['wasmjs'] else [] + if basename == 'd8': + config = basename + ('-wasm' if wasmjs else '-asm2wasm') + commands = { + 'wasm-shell': [runner, '--entry=main', infile] + out_opt, + 'd8-wasm': [runner, '--expose-wasm'] + wasmjs + [ + '--', infile] + extra_files, + 'd8-asm2wasm': [runner, '--expose-wasm', infile], + 'wasm.opt': [runner, infile] + } + return commands[config] + + +def run(runner, files, fails, out, wasmjs='', extra_files=[]): + """Execute all files.""" + assert os.path.isfile(runner), 'Cannot find runner at %s' % runner + if out: + assert os.path.isdir(out), 'Cannot find outdir %s' % out + if wasmjs: + assert os.path.isfile(wasmjs), 'Cannot find wasm.js %s' % wasmjs + executable_files = glob.glob(files) + assert len(executable_files), 'No files found by %s' % files + return testing.execute( + tester=testing.Tester( + command_ctor=execute, + outname_ctor=create_outname, + outdir=out, + extras={ + 'runner': runner, + 'wasmjs': wasmjs, + 'extra_files': extra_files if extra_files else [] + }), + inputs=executable_files, + fails=fails) + + +def getargs(): + import argparse + parser = argparse.ArgumentParser(description='Execute .wast or .wasm files.') + parser.add_argument('--runner', type=str, required=True, + help='Runner path') + parser.add_argument('--files', type=str, required=True, + help='Glob pattern for .wast / .wasm files') + parser.add_argument('--fails', type=str, required=True, + help='Expected failures') + parser.add_argument('--out', type=str, required=False, + help='Output directory') + parser.add_argument('--wasmjs', type=str, required=False, + help='JavaScript support runtime for WebAssembly') + parser.add_argument('--extra', type=str, required=False, action='append', + help='Extra files to pass to the runner') + return parser.parse_args() + + +if __name__ == '__main__': + args = getargs() + sys.exit(run(args.runner, args.files, args.fails, args.out, args.wasmjs, + args.extra)) diff --git a/src/binaryen/test/waterfall/src/link_assembly_files.py b/src/binaryen/test/waterfall/src/link_assembly_files.py new file mode 100755 index 0000000000..ea82e3eee9 --- /dev/null +++ b/src/binaryen/test/waterfall/src/link_assembly_files.py @@ -0,0 +1,75 @@ +#! /usr/bin/env python + +# Copyright 2015 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import glob +import os +import os.path +import sys + +import testing + + +def create_outname(outdir, infile): + """Create the output file's name.""" + basename = os.path.basename(infile) + outname = basename + '.wast' + return os.path.join(outdir, outname) + + +def link(infile, outfile, extras): + """Create the command-line for a linker invocation.""" + linker = extras['linker'] + basename = os.path.basename(linker) + commands = { + 's2wasm': [linker, '--allocate-stack', '1048576', '-o', outfile, infile], + 'wasm-as': [linker, '-o', outfile, infile], + } + return commands[basename] + + +def run(linker, files, fails, out): + """Link all files.""" + assert os.path.isfile(linker), 'Cannot find linker at %s' % linker + assert os.path.isdir(out), 'Cannot find outdir %s' % out + assembly_files = glob.glob(files) + assert len(assembly_files), 'No files found by %s' % files + return testing.execute( + tester=testing.Tester( + command_ctor=link, + outname_ctor=create_outname, + outdir=out, + extras={'linker': linker}), + inputs=assembly_files, + fails=fails) + + +def getargs(): + import argparse + parser = argparse.ArgumentParser(description='Link .s files into .wast.') + parser.add_argument('--linker', type=str, required=True, + help='Linker path') + parser.add_argument('--files', type=str, required=True, + help='Glob pattern for .s files') + parser.add_argument('--fails', type=str, required=True, + help='Expected failures') + parser.add_argument('--out', type=str, required=True, + help='Output directory') + return parser.parse_args() + + +if __name__ == '__main__': + args = getargs() + sys.exit(run(args.linker, args.files, args.fails, args.out)) diff --git a/src/binaryen/test/waterfall/src/proc.py b/src/binaryen/test/waterfall/src/proc.py new file mode 100755 index 0000000000..84bafe0942 --- /dev/null +++ b/src/binaryen/test/waterfall/src/proc.py @@ -0,0 +1,50 @@ +#! /usr/bin/env python + +# Copyright 2016 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# This module is intended to be a drop-in replacement for the standard +# subprocess module, with the difference that it logs commands before it runs +# them. Everything not overriden should pass through to the subprocess module +# via the import trick below. + +# Imports subprocess in its own namespace so we can always refer directly to +# its attributes. +import subprocess +import os +import sys +# Imports all of subprocess into the current namespace, effectively +# re-exporting everything. +from subprocess import * # flake8: noqa + + +# Now we can override any parts of subprocess we want, while leaving the rest. +def check_call(cmd, **kwargs): + cwd = kwargs.get('cwd', os.getcwd()) + c = ' '.join('"' + c + '"' if ' ' in c else c for c in cmd) + print 'subprocess.check_call(`%s`, cwd=`%s`)' % (c, cwd) + sys.stdout.flush() + subprocess.check_call(cmd, **kwargs) + sys.stdout.flush() + + +def check_output(cmd, **kwargs): + cwd = kwargs.get('cwd', os.getcwd()) + c = ' '.join('"' + c + '"' if ' ' in c else c for c in cmd) + print 'subprocess.check_output(`%s`, cwd=`%s`)' % (c, cwd) + sys.stdout.flush() + try: + return subprocess.check_output(cmd, **kwargs) + finally: + sys.stdout.flush() diff --git a/src/binaryen/test/waterfall/src/test/asm2wasm_compile_known_gcc_test_failures.txt b/src/binaryen/test/waterfall/src/test/asm2wasm_compile_known_gcc_test_failures.txt new file mode 100644 index 0000000000..5eb3275ac0 --- /dev/null +++ b/src/binaryen/test/waterfall/src/test/asm2wasm_compile_known_gcc_test_failures.txt @@ -0,0 +1,88 @@ +# Fails with direct LLVM wasm backend (no emcc) + 20000822-1.c + 20010209-1.c + 20010605-1.c + 20020412-1.c + 20030501-1.c + 20040308-1.c + 20040423-1.c + 20040520-1.c + 20041218-2.c + 20061220-1.c + 20070919-1.c + 20090219-1.c + 920302-1.c + 920415-1.c + 920428-2.c + 920501-3.c + 920501-7.c + 920612-2.c + 920721-4.c + 920728-1.c + 921017-1.c + 921215-1.c + 931002-1.c + 990413-2.c + align-nest.c + built-in-setjmp.c + comp-goto-2.c + nest-align-1.c + nest-stdar-1.c + nestfunc-1.c + nestfunc-2.c + nestfunc-3.c + nestfunc-5.c + nestfunc-6.c + nestfunc-7.c + pr22061-3.c + pr22061-4.c + pr24135.c + pr28865.c + pr41935.c + pr51447.c + pr60003.c + scal-to-vec1.c + scal-to-vec2.c + scal-to-vec3.c + pr60960.c + + +# Works with direct LLVM wasm backend (but fails with emcc) + 20020107-1.c + 20021127-1.c + 20030125-1.c + 20050107-1.c + 20050119-1.c + 20050119-2.c + 20050316-1.c + 20050316-2.c + 20050316-3.c + 20090711-1.c + 960909-1.c + 980701-1.c + 990130-1.c + cbrt.c + pr23135.c + pr43385.c + pr43560.c + pr45695.c + pr49390.c + pr52286.c + 20050607-1.c + simd-4.c + +# Additional failures with BINARYEN=1 + 20030222-1.c + 20050604-1.c + 20060420-1.c + 20071220-1.c + 20071220-2.c + pr38533.c + pr41239.c + pr49279.c + pr53645-2.c + pr53645.c + simd-1.c + simd-2.c + simd-5.c + simd-6.c diff --git a/src/binaryen/test/waterfall/src/test/asm2wasm_run_known_gcc_test_failures.txt b/src/binaryen/test/waterfall/src/test/asm2wasm_run_known_gcc_test_failures.txt new file mode 100644 index 0000000000..fb4bb7e12a --- /dev/null +++ b/src/binaryen/test/waterfall/src/test/asm2wasm_run_known_gcc_test_failures.txt @@ -0,0 +1,41 @@ +# Expected failures from running torture tests from emcc/binaryen with asm2wasm +# and native Wasm support in v8 + +20010122-1.c.js +20030222-1.c.js +20031003-1.c.js +20050316-2.c.js +20050604-1.c.js +20050607-1.c.js +20060420-1.c.js +20071018-1.c.js +20071120-1.c.js +20071220-1.c.js +20071220-2.c.js +20101011-1.c.js +alloca-1.c.js +bitfld-3.c.js +bitfld-5.c.js +builtin-bitops-1.c.js +conversion.c.js +eeprof-1.c.js +frame-address.c.js +pr17377.c.js +pr32244-1.c.js +pr34971.c.js +pr36765.c.js +pr38533.c.js +pr39228.c.js +pr41239.c.js +pr43008.c.js +pr47237.c.js +pr49279.c.js +pr53645-2.c.js +pr53645.c.js +pr60960.c.js +simd-1.c.js +simd-2.c.js +simd-4.c.js +simd-5.c.js +simd-6.c.js +va-arg-pack-1.c.js diff --git a/src/binaryen/test/waterfall/src/test/d8_known_gcc_test_failures.txt b/src/binaryen/test/waterfall/src/test/d8_known_gcc_test_failures.txt new file mode 100644 index 0000000000..dd77d9cf7e --- /dev/null +++ b/src/binaryen/test/waterfall/src/test/d8_known_gcc_test_failures.txt @@ -0,0 +1,121 @@ +# Expected failures from running the assembled GCC torture tests with d8. + +# Toolchain problem: need some libc support. +# Not yet implemented. +# See wasm.js for the list of libc functions which are missing. +# The right place to put libc functionality would really be libc anyways. +20020406-1.c.s.wast.wasm # printf +20021120-3.c.s.wast.wasm # sprintf +20070201-1.c.s.wast.wasm # sprintf +20101011-1.c.s.wast.wasm # signal +20121108-1.c.s.wast.wasm # printf +920501-8.c.s.wast.wasm # sprintf +920501-9.c.s.wast.wasm # sprintf +930513-1.c.s.wast.wasm # sprintf +920726-1.c.s.wast.wasm # sprintf +980605-1.c.s.wast.wasm # sprintf +builtin-bitops-1.c.s.wast.wasm # __builtin_clrsb +complex-5.c.s.wast.wasm # __divsc3 +ipa-sra-2.c.s.wast.wasm # free +loop-2f.c.s.wast.wasm # mmap addr 2147450880 +loop-2g.c.s.wast.wasm # mmap addr 2147450880 +pr34456.c.s.wast.wasm # qsort +pr47237.c.s.wast.wasm # __builtin_apply_args +pr56982.c.s.wast.wasm # _setjmp +printf-1.c.s.wast.wasm # printf +printf-chk-1.c.s.wast.wasm # vprintf +pr39228.c.s.wast.wasm # isinfl +struct-ret-1.c.s.wast.wasm # sprintf +va-arg-21.c.s.wast.wasm # vprintf +vprintf-1.c.s.wast.wasm # vprintf +vprintf-chk-1.c.s.wast.wasm # vprintf + +# These compiler-rt functions are for long doubles. Also NYI. +20020413-1.c.s.wast.wasm # __lttf2 +20080502-1.c.s.wast.wasm # __eqtf2 +960215-1.c.s.wast.wasm # __addtf3 +960405-1.c.s.wast.wasm # __eqtf2 +align-2.c.s.wast.wasm # __eqtf2 +complex-7.c.s.wast.wasm # __netf2 +pr49218.c.s.wast.wasm # __fixsfti +pr54471.c.s.wast.wasm # __multi3 +regstack-1.c.s.wast.wasm # __addtf3 +stdarg-1.c.s.wast.wasm # __netf2 +stdarg-2.c.s.wast.wasm # __floatsitf +va-arg-5.c.s.wast.wasm # __eqtf2 +va-arg-6.c.s.wast.wasm # __eqtf2 + +# Trying to import function 'bar'. The test is likely wrong. +va-arg-pack-1.c.s.wast.wasm + +# Program terminated with: Terminating wasm: abort() +# This could be a problem in any part of the toolchain (not just d8). +# It should never happen (the torture tests are self-validating). +strcmp-1.c.s.wast.wasm # abort() +string-opt-5.c.s.wast.wasm # abort() +strncmp-1.c.s.wast.wasm # abort() + +# The following failures go away when disabling LLVM IR optimizations only: +20000910-2.c.s.wast.wasm # abort() + +# The following failures go away when disabling IR optimizations, regardless of backend + +# The following failures go away when disabling both IR and backend optimizations: + +# The following failures go away when disabling backend optimizations only: +20040709-1.c.s.wast.wasm # memory access out of bounds + +# The following failures go away when disabling backend optimizations, regardless of IR +pr47337.c.s.wast.wasm # memory access out of bounds + +# The following only fail when all optimizations are enabled +991201-1.c.s.wast.wasm # memory access out of bounds +memcpy-2.c.s.wast.wasm # memory access out of bounds +mode-dependent-address.c.s.wast.wasm # memory access out of bounds +pr48571-1.c.s.wast.wasm # memory access out of bounds +pr51581-1.c.s.wast.wasm # memory access out of bounds +pr51581-2.c.s.wast.wasm # memory access out of bounds +pr56837.c.s.wast.wasm # memory access out of bounds +strcpy-1.c.s.wast.wasm # memory access out of bounds + +# Additionally there are a bunch of unexpected failures when disabling IR +# optimization, which this margin is too small to contain. +# (a lot of them are unsupported features and missing libcalls which are +# eliminated by IR optzns) + +# Untriaged (this one broke at rev e5b9c73, r269252) +20030125-1.c.s.wast.wasm # abort() + + +# Don't care/won't fix: +920612-1.c.s.wast.wasm # abort() # UB +920711-1.c.s.wast.wasm # abort() # UB for 32-bit longs +bcp-1.c.s.wast.wasm # abort() # builtin_constant_p depends on opt setting +builtin-constant.c.s.wast.wasm # abort() # builtin_constant_p depends on opt setting +pr22493-1.c.s.wast.wasm # abort() # UB +eeprof-1.c.s.wast.wasm # tests -finstrument-functions + +# Low priority +# Bitfield tests +bitfld-3.c.s.wast.wasm # abort() +bitfld-5.c.s.wast.wasm # memory access out of bounds +pr32244-1.c.s.wast.wasm # abort() +pr34971.c.s.wast.wasm # abort() + +# struct-vararg tests (recently started compiling, not yet triaged vs. opt level). +# A few of them pass, but most still fail. +920625-1.c.s.wast.wasm # abort() +931004-10.c.s.wast.wasm # abort() +931004-12.c.s.wast.wasm # abort() +931004-14.c.s.wast.wasm # abort() +931004-6.c.s.wast.wasm # abort() +pr38151.c.s.wast.wasm # abort() +pr44575.c.s.wast.wasm # abort() +stdarg-3.c.s.wast.wasm # abort() +strct-stdarg-1.c.s.wast.wasm # abort() +strct-varg-1.c.s.wast.wasm # abort() +va-arg-22.c.s.wast.wasm # abort() + +# LLVM emits a divide by zero: +# https://llvm.org/bugs/show_bug.cgi?id=26452 +pr60960.c.s.wast.wasm # divide by zero diff --git a/src/binaryen/test/waterfall/src/test/d8_musl_known_gcc_test_failures.txt b/src/binaryen/test/waterfall/src/test/d8_musl_known_gcc_test_failures.txt new file mode 100644 index 0000000000..5f9aa8b635 --- /dev/null +++ b/src/binaryen/test/waterfall/src/test/d8_musl_known_gcc_test_failures.txt @@ -0,0 +1,104 @@ +# Expected failures from running the assembled GCC torture tests with d8. + +# Toolchain problem: need some libc support. +# Not yet implemented. +# See wasm.js for the list of libc functions which are missing. +# The right place to put libc functionality would really be libc anyways. +20020406-1.c.s.wast.wasm +20020413-1.c.s.wast.wasm +20101011-1.c.s.wast.wasm +960215-1.c.s.wast.wasm +960405-1.c.s.wast.wasm +align-2.c.s.wast.wasm +builtin-bitops-1.c.s.wast.wasm # __builtin_clrsb +ipa-sra-2.c.s.wast.wasm +loop-2f.c.s.wast.wasm +loop-2g.c.s.wast.wasm +pr34456.c.s.wast.wasm +pr39228.c.s.wast.wasm +pr47237.c.s.wast.wasm +pr49218.c.s.wast.wasm +pr54471.c.s.wast.wasm +printf-1.c.s.wast.wasm +printf-chk-1.c.s.wast.wasm +regstack-1.c.s.wast.wasm +va-arg-21.c.s.wast.wasm # vprintf +vprintf-1.c.s.wast.wasm # vprintf +vprintf-chk-1.c.s.wast.wasm # vprintf + +# Trying to import function 'bar'. The test is likely wrong. +va-arg-pack-1.c.s.wast.wasm + +# Program terminated with: Terminating wasm: abort() +# This could be a problem in any part of the toolchain (not just d8). +# It should never happen (the torture tests are self-validating). +20000910-2.c.s.wast.wasm +920612-1.c.s.wast.wasm +920625-1.c.s.wast.wasm +920711-1.c.s.wast.wasm +931004-10.c.s.wast.wasm +931004-12.c.s.wast.wasm +931004-14.c.s.wast.wasm +931004-6.c.s.wast.wasm +bitfld-3.c.s.wast.wasm +builtin-constant.c.s.wast.wasm +eeprof-1.c.s.wast.wasm +pr22493-1.c.s.wast.wasm +pr32244-1.c.s.wast.wasm +pr34971.c.s.wast.wasm +pr38151.c.s.wast.wasm +pr44575.c.s.wast.wasm +stdarg-3.c.s.wast.wasm +strcmp-1.c.s.wast.wasm +strct-stdarg-1.c.s.wast.wasm +strct-varg-1.c.s.wast.wasm +string-opt-5.c.s.wast.wasm # abort() +strncmp-1.c.s.wast.wasm # abort() +va-arg-22.c.s.wast.wasm + +# Untriaged (this one broke at rev e5b9c73, r269252) +20030125-1.c.s.wast.wasm # abort() + +# abort() as well, but occurring for musl only. +980602-2.c.s.wast.wasm + +# d8 segfault. +930513-1.c.s.wast.wasm + +# Unknown exception: memory access out of bounds +20021120-3.c.s.wast.wasm +20040709-1.c.s.wast.wasm +20070201-1.c.s.wast.wasm +20080502-1.c.s.wast.wasm +20121108-1.c.s.wast.wasm +920501-8.c.s.wast.wasm +920501-9.c.s.wast.wasm +920726-1.c.s.wast.wasm +980605-1.c.s.wast.wasm +991201-1.c.s.wast.wasm +bitfld-5.c.s.wast.wasm +complex-5.c.s.wast.wasm +complex-7.c.s.wast.wasm +memcpy-2.c.s.wast.wasm +mode-dependent-address.c.s.wast.wasm +pr40022.c.s.wast.wasm +pr47337.c.s.wast.wasm +pr48571-1.c.s.wast.wasm +pr51581-1.c.s.wast.wasm +pr51581-2.c.s.wast.wasm +pr56837.c.s.wast.wasm +pr56982.c.s.wast.wasm +pr60960.c.s.wast.wasm +stdarg-1.c.s.wast.wasm +stdarg-2.c.s.wast.wasm +strcpy-1.c.s.wast.wasm +struct-ret-1.c.s.wast.wasm +va-arg-5.c.s.wast.wasm +va-arg-6.c.s.wast.wasm + +# Fails with musl only. +pr20621-1.c.s.wast.wasm # main() returned 272 + +# Unknown exception: function signature mismatch +# Which function? +bcp-1.c.s.wast.wasm diff --git a/src/binaryen/test/waterfall/src/test/emwasm_compile_known_gcc_test_failures.txt b/src/binaryen/test/waterfall/src/test/emwasm_compile_known_gcc_test_failures.txt new file mode 100644 index 0000000000..15063db548 --- /dev/null +++ b/src/binaryen/test/waterfall/src/test/emwasm_compile_known_gcc_test_failures.txt @@ -0,0 +1,81 @@ +# Fails with bare wasm clang, no emcc (some details in LLVM's +# /lib/target/WebAssembly/known_gcc_test_failures.txt) + 20000822-1.c + 20010122-1.c + 20010209-1.c + 20010605-1.c + 20020412-1.c + 20030501-1.c + 20040302-1.c + 20040308-1.c + 20040423-1.c + 20040520-1.c + 20041218-2.c + 20061220-1.c + 20070919-1.c + 20071210-1.c + 20090219-1.c + 920302-1.c + 920415-1.c + 920428-2.c + 920501-3.c + 920501-4.c + 920501-5.c + 920501-7.c + 920612-2.c + 920721-4.c + 920728-1.c + 921017-1.c + 921215-1.c + 931002-1.c + 980526-1.c + 990413-2.c + align-nest.c + built-in-setjmp.c + comp-goto-1.c + comp-goto-2.c + nest-align-1.c + nest-stdar-1.c + nestfunc-1.c + nestfunc-2.c + nestfunc-3.c + nestfunc-5.c + nestfunc-6.c + nestfunc-7.c + pr22061-3.c + pr22061-4.c + pr24135.c + pr28865.c + pr41935.c + pr51447.c + pr60003.c + scal-to-vec1.c + scal-to-vec2.c + scal-to-vec3.c + + +# Multiply-defined symbols because emcc doesn't link libc/libm as archives + 20021127-1.c + 20030125-1.c + 20090711-1.c + 960909-1.c + 980701-1.c + cbrt.c + +# Computed gotos (but works with bare wasm clang) + 20041214-1.c + 20071220-1.c + 20071220-2.c + +# Works with asm2wasm + 20030913-1.c # glob multiply defined in wasm but not asm2wasm + 941014-1.c # Function addresses with offsets not supported + 960218-1.c # glob multiply defined in wasm but not asm2wasm + pr17377.c # __builtin_return_address + +# wasm-validation errors + call-trap-1.c # call param number must match + pr44942.c # call param number must match + 921208-2.c # call param number must match + 920501-1.c # call param number must match + 20051012-1.c # call param number must match diff --git a/src/binaryen/test/waterfall/src/test/emwasm_run_known_gcc_test_failures.txt b/src/binaryen/test/waterfall/src/test/emwasm_run_known_gcc_test_failures.txt new file mode 100644 index 0000000000..0b6587229e --- /dev/null +++ b/src/binaryen/test/waterfall/src/test/emwasm_run_known_gcc_test_failures.txt @@ -0,0 +1,59 @@ +# Expected failures from running torture tests from emcc/binaryen with wasm backend +# and native Wasm support in v8 + +# Untriaged. +20010122-1.c.js +20031003-1.c.js +20071018-1.c.js +20071120-1.c.js +20071220-1.c.js +20071220-2.c.js +20101011-1.c.js +alloca-1.c.js +bitfld-3.c.js +bitfld-5.c.js +builtin-bitops-1.c.js +eeprof-1.c.js +pr17377.c.js +pr32244-1.c.js +pr34971.c.js +pr36765.c.js +pr39228.c.js +pr43008.c.js +pr47237.c.js +pr60960.c.js +va-arg-pack-1.c.js + +complex-5.c.js # missing fmaxf, presumably needed by compiler-rt + +## The following work using wasm-clang without emcc + 20001203-2.c.js # assert fail (works without emcc) + 20040811-1.c.js # OOB trap + 20070824-1.c.js # abort() (also works without emcc) + arith-rand-ll.c.js # abort() (works without emcc) + arith-rand.c.js # abort() (works without emcc) + pr23135.c.js # OOB trap (works without emcc) + pr43220.c.js # OOB trap (works without emcc) + vla-dealloc-1.c.js # OOB trap (works without emcc) + 20051012-1.c.js # error reading binary + 921208-2.c.js # error reading binary + 920501-1.c.js # error reading binary + call-trap-1.c.js # error reading binary + pr44942.c.js # error reading binary + +## The following fail using wasm-clang without emcc + 920625-1.c.js # abort() (also fails without emcc) + 931004-10.c.js # abort() (also fails without emcc) + 931004-12.c.js # abort() (also fails without emcc) + 931004-14.c.js # abort() (also fails without emcc) + 931004-6.c.js # abort() (also fails without emcc) + pr38151.c.js # abort() (fails without emcc) + pr44575.c.js # abort() (fails without emcc) + stdarg-1.c.js # abort() (missing __netf2) + stdarg-2.c.js # abort() (missing __floatsitf) + strct-stdarg-1.c.js # abort() (fails without emcc) + strct-varg-1.c.js # abort() (fails without emcc) + va-arg-22.c.js # abort() (fails without emcc) + va-arg-6.c.js # abort() (missing __eqtf2) + stdarg-3.c.js # abort() (fails without emcc) + pr56982.c.js # missing setjmp (wasm.js check did not catch) diff --git a/src/binaryen/test/waterfall/src/test/spec_known_gcc_test_failures.txt b/src/binaryen/test/waterfall/src/test/spec_known_gcc_test_failures.txt new file mode 100644 index 0000000000..9f71cdb0e2 --- /dev/null +++ b/src/binaryen/test/waterfall/src/test/spec_known_gcc_test_failures.txt @@ -0,0 +1,153 @@ +# Expected failures from running the assembled GCC torture tests with the spec +# interpreter. +# +# To run this test: +# waterfall/src/execute_files.py --runner waterfall/src/work/wasm-install/bin/wasm.opt --files torture-s2wasm/\*.wast --fails waterfall/src/test/spec_known_gcc_test_failures.txt +# +# .wast files are available from wasm-stat.us as wasm-torture-s2wasm-$BUILD.tbz2 +pr44942.c.s.wast # arity mismatch: toolchain problem. + +# The following expect to receive functions from the environment. +# +# abort / exit are supported by the spec interpreter, the other will come by +# linking in a libc and runtime. +20000815-1.c.s.wast # env.memset +20000815-1.c.s.wast # env.memset +20000910-2.c.s.wast # env.strchr +20000914-1.c.s.wast # env.malloc +20001011-1.c.s.wast # env.strcmp +20010605-2.c.s.wast # env.__netf2 +20010915-1.c.s.wast # env.strcmp +20010925-1.c.s.wast # env.memcpy +20011024-1.c.s.wast # env.strcmp +20020406-1.c.s.wast # env.malloc +20020413-1.c.s.wast # env.__lttf2 +20021011-1.c.s.wast # env.strcmp +20021120-3.c.s.wast # env.sprintf +20030221-1.c.s.wast # env.strlen +20030715-1.c.s.wast # env.strcmp +20030914-1.c.s.wast # env.__floatsitf +20030914-2.c.s.wast # env.memcpy +20031012-1.c.s.wast # env.memset +20031204-1.c.s.wast # env.strcpy +20041126-1.c.s.wast # env.memcpy +20041214-1.c.s.wast # env.strcpy +20041218-1.c.s.wast # env.memset +20050121-1.c.s.wast # env.__floatsitf +20050218-1.c.s.wast # env.strlen +20050502-1.c.s.wast # env.strcmp +20050502-2.c.s.wast # env.memcmp +20050826-1.c.s.wast # env.memset +20051113-1.c.s.wast # env.malloc +20060412-1.c.s.wast # env.memsets +20070201-1.c.s.wast # env.sprintf +20071018-1.c.s.wast # env.__builtin_malloc +20071029-1.c.s.wast # env.memset +20071030-1.c.s.wast # env.memset +20071120-1.c.s.wast # env.__builtin_malloc +20071120-1.c.s.wast # env.__builtin_malloc +20071202-1.c.s.wast # env.memcpy +20080502-1.c.s.wast # env.__eqtf2 +20081218-1.c.s.wast # env.memset +20090113-1.c.s.wast # env.memset +20100708-1.c.s.wast # env.memset +20101011-1.c.s.wast # env.signal +20111208-1.c.s.wast # env.strlen +20121108-1.c.s.wast # env.printf +20121108-1.c.s.wast # env.printf +920501-8.c.s.wast # env.sprintf +920501-9.c.s.wast # env.sprintf +920726-1.c.s.wast # env.sprintf +920810-1.c.s.wast # env.malloc +921110-1.c.s.wast # abort() is declared with the wrong type (returning i32) +921117-1.c.s.wast # env.strcmp +930513-1.c.s.wast # env.sprintf +930622-2.c.s.wast # env.__floatditf +941014-2.c.s.wast # env.malloc +960215-1.c.s.wast # env.__addtf3 +960405-1.c.s.wast # env.__eqtf2 +960513-1.c.s.wast # env.__subtf3 +960521-1.c.s.wast # env.memset +980506-3.c.s.wast # env.memset +980605-1.c.s.wast # env.sprintf +990513-1.c.s.wast # env.memset +990628-1.c.s.wast # env.memset +991112-1.c.s.wast # env.isprint +align-2.c.s.wast # env.__eqtf2 +builtin-bitops-1.c.s.wast # env.__builtin_clrsb +complex-5.c.s.wast # env.__divsc3 +complex-6.c.s.wast # env.__subtf3 +complex-7.c.s.wast # env.__netf2 +complex-7.c.s.wast # env.__netf2 +conversion.c.s.wast # env.__floatunsitf +ipa-sra-2.c.s.wast # env.calloc +loop-2f.c.s.wast # env.memset +loop-2g.c.s.wast # env.memset +memcpy-1.c.s.wast # env.memcpy +memcpy-2.c.s.wast # env.memset +memcpy-bi.c.s.wast # env.memcmp +memset-1.c.s.wast # env.memset +memset-2.c.s.wast # env.memset +memset-3.c.s.wast # env.memset +multi-ix.c.s.wast # env.memset +p18298.c.s.wast # env.strcmp +pr27260.c.s.wast # env.memset +pr28982b.c.s.wast # env.memset +pr33870-1.c.s.wast # env.memset +pr33870.c.s.wast # env.memset +pr34456.c.s.wast # env.qsort +pr35472.c.s.wast # env.memset +pr36038.c.s.wast # env.memcmp +pr36093.c.s.wast # env.memset +pr36765.c.s.wast # env.__builtin_malloc +pr37573.c.s.wast # env.memcmp +pr39228.c.s.wast # env.__builtin_isinff +pr41395-1.c.s.wast # env.malloc +pr41395-2.c.s.wast # env.malloc +pr41463.c.s.wast # env.malloc +pr42614.c.s.wast # env.malloc +pr43008.c.s.wast # env.__builtin_malloc +pr43236.c.s.wast # env.memcmp +pr43784.c.s.wast # env.memcpy +pr44852.c.s.wast # env.strcmp +pr47237.c.s.wast # env.__builtin_apply_args +pr47337.c.s.wast # env.strcmp +pr49218.c.s.wast # env.__fixsfti +pr49419.c.s.wast # env.memset +pr51877.c.s.wast # env.memset +pr51933.c.s.wast # env.memcmp +pr53688.c.s.wast # env.memset +pr54471.c.s.wast # env.__multi3 +pr56205.c.s.wast # env.strcmp +pr56866.c.s.wast # env.memset +pr56982.c.s.wast # env._setjmp +pr57130.c.s.wast # env.memcmp +pr58419.c.s.wast # env.getpid +pr59229.c.s.wast # env.memcmp +printf-1.c.s.wast # env.printf +regstack-1.c.s.wast # env.__addtf3 +stdarg-1.c.s.wast # env.__netf2 +stdarg-2.c.s.wast # env.__floatsitf +strcmp-1.c.s.wast # env.strcmp +strcpy-1.c.s.wast # env.memset +string-opt-17.c.s.wast # env.strcpy +string-opt-18.c.s.wast # env.mempcpy +string-opt-5.c.s.wast # env.strlen +strlen-1.c.s.wast # env.memset +strncmp-1.c.s.wast # env.strncmp +struct-cpy-1.c.s.wast # env.memset +struct-ret-1.c.s.wast # env.sprintf +va-arg-10.c.s.wast # env.strlen +va-arg-2.c.s.wast # env.strlen +va-arg-22.c.s.wast # env.memcpy +va-arg-24.c.s.wast # env.printf +va-arg-5.c.s.wast # env.__eqtf2 +va-arg-6.c.s.wast # env.__eqtf2 +va-arg-9.c.s.wast # env.strlen +va-arg-pack-1.c.s.wast # env.memcmp +980707-1.c.s.wast # env.strcmp +980709-1.c.s.wast # env.pow +printf-chk-1.c.s.wast # vprintf +va-arg-21.c.s.wast # env.vprintf +vprintf-1.c.s.wast # vprintf +vprintf-chk-1.c.s.wast # vprintf diff --git a/src/binaryen/test/waterfall/src/testing.py b/src/binaryen/test/waterfall/src/testing.py new file mode 100755 index 0000000000..a96582ab8e --- /dev/null +++ b/src/binaryen/test/waterfall/src/testing.py @@ -0,0 +1,258 @@ +#! /usr/bin/env python + +# Copyright 2015 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import difflib +import math +import multiprocessing +import os +import os.path +import resource +import sys + +import proc + + +class Result: + """Result from a single test that was run.""" + + def __init__(self, test, success, output): + self.test = test + self.success = success + self.output = output + + def __str__(self): + return '%s %s%s%s' % ('SUCCEEDED' if self.success else 'FAILED', + self.test, '\n' if self.output else '', self.output) + + def __nonzero__(self): + return self.success + + def __lt__(self, other): + """Sort by test name so that the output files can be compared easily.""" + return self.test < other.test + + def similarity(self, other): + """Compare output similarity, returning a float in the range [0,1].""" + # Even quick_ratio is fairly slow on big inputs, capture just the start. + max_size = 1024 + return difflib.SequenceMatcher(None, self.output[:max_size], + other.output[:max_size]).quick_ratio() + + +class Tester(object): + """Test runner.""" + + def __init__(self, command_ctor, outname_ctor, outdir, extras): + """Command-line constructor accepting input and output file names.""" + if outdir: + assert os.path.isdir(outdir), 'Expected output directory %s' % outdir + self.command_ctor = command_ctor + self.outname_ctor = outname_ctor + self.outdir = outdir + self.extras = extras + + @staticmethod + def setlimits(): + # Set maximum CPU time to 90 seconds in child process + try: + resource.setrlimit(resource.RLIMIT_CPU, (90, 90)) + except: + pass + + def __call__(self, test_file): + """Execute a single test.""" + basename = os.path.basename(test_file) + outfile = self.outname_ctor(self.outdir, test_file) if self.outdir else '' + try: + output = proc.check_output( + self.command_ctor(test_file, outfile, self.extras), + stderr=proc.STDOUT, cwd=self.outdir or os.getcwd(), + preexec_fn=Tester.setlimits) + # Flush the logged command so buildbots don't think the script is dead. + sys.stdout.flush() + return Result(test=basename, success=True, output=output) + except proc.CalledProcessError as e: + return Result(test=basename, success=False, output=e.output) + + +def get_expected_failures(fails): + """One failure per line, some whitespace, Python-style comments.""" + assert os.path.isfile(fails), 'Cannot find known failures at %s' % fails + res = [] + with open(fails, 'r') as fails_file: + res = fails_file.readlines() + return sorted([r for r in [r.split('#')[0].strip() for r in res] if len(r)]) + + +class TriangularArray: + """Indexed with two commutable keys.""" + + def __init__(self): + self.arr = {} + + def canonicalize(self, key): + return (min(key[0], key[1]), max(key[0], key[1])) + + def __getitem__(self, key): + return self.arr[self.canonicalize(key)] + + def __setitem__(self, key, value): + k = self.canonicalize(key) + # Support single-insertion only, the intended usage would be a bug if there + # were multiple insertions of the same key. + assert k not in self.arr, 'Double insertion of key %s' % k + self.arr[k] = value + + def __iter__(self): + return self.arr.iteritems() + + +class SimilarityGroup: + """Group of similar results.""" + def __init__(self, tests, similarities): + self.tests = sorted(tests) + self.similarities = [100. * s for s in similarities] + self.average = (sum(self.similarities) / len(self.similarities) + if self.similarities else 0.) + squared_diffs = [(s - self.average) ** 2 for s in self.similarities] + self.stddev = (math.sqrt(sum(squared_diffs) / len(squared_diffs)) + if self.similarities else 0.) + + +def similarity(results, cutoff): + """List of lists of result test names with similar outputs.""" + similarities = TriangularArray() + for x in range(0, len(results)): + for y in range(x + 1, len(results)): + rx = results[x] + ry = results[y] + similarities[(rx.test, ry.test)] = rx.similarity(ry) + # A maximum clique would be better suited to group similarities, but this + # silly traversal is simpler and seems to do the job pretty well. + similar_groups = [] + worklist = set() + for k, v in similarities: + if v > cutoff: + worklist.add(k[0]) + worklist.add(k[1]) + for result in results: + test = result.test + if test in worklist: + worklist.remove(test) + group_tests = [test] + group_similarities = [] + for other_result in results: + other_test = other_result.test + if other_test in worklist: + similar = similarities[(test, other_test)] + if similar > cutoff: + worklist.remove(other_test) + group_tests.append(other_test) + group_similarities.append(similar) + if len(group_tests) > 1: + # Some tests could have similar matches which were more similar to + # other tests, leaving this group with a single entry. + similar_groups.append(SimilarityGroup(tests=group_tests, + similarities=group_similarities)) + assert len(worklist) == 0, 'Failed emptying worklist %s' % worklist + # Put all the ungrouped tests into their own group. + grouped = set() + for group in similar_groups: + for test in group.tests: + grouped.add(test) + uniques = list(set([r.test for r in results]) - grouped) + if uniques: + s = [similarities[(uniques[0], u)] for u in uniques[1:]] + similar_groups.append(SimilarityGroup(tests=uniques, similarities=s)) + return similar_groups + + +def execute(tester, inputs, fails): + """Execute tests in parallel, output results, return failure count.""" + input_expected_failures = get_expected_failures(fails) if fails else [] + pool = multiprocessing.Pool() + sys.stdout.write('Executing tests.') + results = sorted(pool.map(tester, inputs)) + pool.close() + pool.join() + sys.stdout.write('\nDone.') + successes = [r for r in results if r] + failures = [r for r in results if not r] + if not fails: + return failures + expected_failures = [t for t in failures + if t.test in input_expected_failures] + unexpected_failures = [t for t in failures + if t.test not in input_expected_failures] + unexpected_successes = [t for t in successes + if t.test in input_expected_failures] + sys.stdout.write('\nResults:\n') + for result in results: + sys.stdout.write(str(result) + '\n\n') + cutoff = 0.9 + similar_expected_failures = similarity(expected_failures, cutoff) + for s in similar_expected_failures: + tests = ' '.join(s.tests) + if s.average >= cutoff * 100.: + sys.stdout.write(('\nSimilar expected failures, ' + 'average %s%% similarity with stddev %s: ' + '%s\n') % (s.average, s.stddev, tests)) + sample = [f for f in expected_failures if f.test == s.tests[0]][0] + sys.stdout.write('Sample failure: %s\n' % sample) + else: + sys.stdout.write(('\nUngrouped expected failures, ' + 'average %s%% similarity with stddev %s: ' + '%s\n') % (s.average, s.stddev, tests)) + similar_unexpected_failures = similarity(unexpected_failures, cutoff) + for s in similar_unexpected_failures: + tests = ' '.join(s.tests) + if s.average >= cutoff * 100.: + sys.stdout.write(('\nSimilar unexpected failures, ' + 'average %s%% similarity with stddev %s: ' + '%s\n') % (s.average, s.stddev, tests)) + sample = [f for f in unexpected_failures if f.test == s.tests[0]][0] + sys.stdout.write('Sample failure: %s\n' % sample) + else: + sys.stdout.write(('\nUngrouped unexpected failures, ' + 'average %s%% similarity with stddev %s: ' + '%s\n') % (s.average, s.stddev, tests)) + if expected_failures: + sys.stdout.write('Expected failures:\n') + for f in expected_failures: + sys.stdout.write('\t%s\n' % f.test) + if unexpected_failures: + sys.stdout.write('Unexpected failures:\n') + for f in unexpected_failures: + sys.stdout.write('\t%s\n' % f.test) + if unexpected_successes: + sys.stdout.write('Unexpected successes:\n') + for f in unexpected_successes: + sys.stdout.write('\t%s\n' % f.test) + sys.stdout.write( + '\n'.join(['\n', + 'Ran %s tests.' % len(results), + 'Got %s successes.' % len(successes), + 'Got %s failures.' % len(failures), + 'Expected %s failures.' % len(input_expected_failures), + 'Got %s expected failures in %s similarity groups.' % ( + len(expected_failures), + len(similar_expected_failures)), + 'Got %s unexpected failures in %s similarity groups.' % ( + len(unexpected_failures), + len(similar_unexpected_failures)), + 'Got %s unexpected successes.' % len(unexpected_successes), + '\n'])) + return len(unexpected_failures) + len(unexpected_successes) diff --git a/src/binaryen/travis-emcc-tests.sh b/src/binaryen/travis-emcc-tests.sh new file mode 100755 index 0000000000..0995e63f77 --- /dev/null +++ b/src/binaryen/travis-emcc-tests.sh @@ -0,0 +1,9 @@ +set -e +echo "travis-test pre-test" +python -c "import check ; check.run_binaryen_js_tests() ; check.run_emscripten_tests()" +echo "travis-test build" +./build-js.sh -g +echo "travis-test post-test" +python -c "import check ; check.run_binaryen_js_tests() ; check.run_emscripten_tests()" +echo "travis-test yay!" + diff --git a/src/binaryen/ubsan.blacklist b/src/binaryen/ubsan.blacklist new file mode 100644 index 0000000000..f0aeaea782 --- /dev/null +++ b/src/binaryen/ubsan.blacklist @@ -0,0 +1,5 @@ +# Work around libstdc++ bug: https://llvm.org/bugs/show_bug.cgi?id=18156 +# Also see: http://lists.llvm.org/pipermail/cfe-dev/2015-January/040945.html +src:*/ios_base.h +# Work around another libstdc++ bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60734 +src:*/stl_tree.h diff --git a/src/bootstrap/Cargo.toml b/src/bootstrap/Cargo.toml index 3f1d03b187..bbbbf0e191 100644 --- a/src/bootstrap/Cargo.toml +++ b/src/bootstrap/Cargo.toml @@ -34,7 +34,7 @@ cmake = "0.1.23" filetime = "0.1" num_cpus = "1.0" getopts = "0.2" -cc = "1.0" +cc = "1.0.1" libc = "0.2" serde = "1.0.8" serde_derive = "1.0.8" diff --git a/src/bootstrap/README.md b/src/bootstrap/README.md index e543b8c070..9ff681ac68 100644 --- a/src/bootstrap/README.md +++ b/src/bootstrap/README.md @@ -39,7 +39,7 @@ The script accepts commands, flags, and arguments to determine what to do: ``` If files are dirty that would normally be rebuilt from stage 0, that can be - overidden using `--keep-stage 0`. Using `--keep-stage n` will skip all steps + overridden using `--keep-stage 0`. Using `--keep-stage n` will skip all steps that belong to stage n or earlier: ``` @@ -126,17 +126,17 @@ install a nightly, presumably using `rustup`. You will then want to configure your directory to use this build, like so: ``` -# configure to use local rust instead of downloding a beta. +# configure to use local rust instead of downloading a beta. # `--local-rust-root` is optional here. If elided, we will # use whatever rustc we find on your PATH. -> configure --enable-rustbuild --local-rust-root=~/.cargo/ --enable-local-rebuild +> ./configure --local-rust-root=~/.cargo/ --enable-local-rebuild ``` After that, you can use the `--incremental` flag to actually do incremental builds: ``` -> ../x.py build --incremental +> ./x.py build --incremental ``` The `--incremental` flag will store incremental compilation artifacts diff --git a/src/bootstrap/bin/rustc.rs b/src/bootstrap/bin/rustc.rs index 848b10d312..16a23eb364 100644 --- a/src/bootstrap/bin/rustc.rs +++ b/src/bootstrap/bin/rustc.rs @@ -31,8 +31,6 @@ extern crate bootstrap; use std::env; use std::ffi::OsString; -use std::io; -use std::io::prelude::*; use std::str::FromStr; use std::path::PathBuf; use std::process::{Command, ExitStatus}; @@ -122,19 +120,14 @@ fn main() { cmd.arg("-L").arg(&root); } - // Pass down extra flags, commonly used to configure `-Clinker` when - // cross compiling. - if let Ok(s) = env::var("RUSTC_FLAGS") { - cmd.args(&s.split(" ").filter(|s| !s.is_empty()).collect::>()); + // Override linker if necessary. + if let Ok(target_linker) = env::var("RUSTC_TARGET_LINKER") { + cmd.arg(format!("-Clinker={}", target_linker)); } // Pass down incremental directory, if any. if let Ok(dir) = env::var("RUSTC_INCREMENTAL") { cmd.arg(format!("-Zincremental={}", dir)); - - if verbose > 0 { - cmd.arg("-Zincremental-info"); - } } let crate_name = args.windows(2) @@ -182,6 +175,9 @@ fn main() { if let Ok(s) = env::var("RUSTC_CODEGEN_UNITS") { cmd.arg("-C").arg(format!("codegen-units={}", s)); } + if stage != "0" && env::var("RUSTC_THINLTO").is_ok() { + cmd.arg("-Ccodegen-units=16").arg("-Zthinlto"); + } // Emit save-analysis info. if env::var("RUSTC_SAVE_ANALYSIS") == Ok("api".to_string()) { @@ -258,6 +254,11 @@ fn main() { if env::var_os("RUSTC_FORCE_UNSTABLE").is_some() { cmd.arg("-Z").arg("force-unstable-if-unmarked"); } + } else { + // Override linker if necessary. + if let Ok(host_linker) = env::var("RUSTC_HOST_LINKER") { + cmd.arg(format!("-Clinker={}", host_linker)); + } } let color = match env::var("RUSTC_COLOR") { @@ -270,7 +271,7 @@ fn main() { } if verbose > 1 { - writeln!(&mut io::stderr(), "rustc command: {:?}", cmd).unwrap(); + eprintln!("rustc command: {:?}", cmd); } // Actually run the compiler! diff --git a/src/bootstrap/bin/rustdoc.rs b/src/bootstrap/bin/rustdoc.rs index d7d72d5dd5..4e975adc97 100644 --- a/src/bootstrap/bin/rustdoc.rs +++ b/src/bootstrap/bin/rustdoc.rs @@ -47,6 +47,17 @@ fn main() { if env::var_os("RUSTC_FORCE_UNSTABLE").is_some() { cmd.arg("-Z").arg("force-unstable-if-unmarked"); } + if let Some(linker) = env::var_os("RUSTC_TARGET_LINKER") { + cmd.arg("--linker").arg(linker).arg("-Z").arg("unstable-options"); + } + + // Bootstrap's Cargo-command builder sets this variable to the current Rust version; let's pick + // it up so we can make rustdoc print this into the docs + if let Some(version) = env::var_os("RUSTDOC_CRATE_VERSION") { + // This "unstable-options" can be removed when `--crate-version` is stabilized + cmd.arg("-Z").arg("unstable-options") + .arg("--crate-version").arg(version); + } std::process::exit(match cmd.status() { Ok(s) => s.code().unwrap_or(1), diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py index 4a8c3dcebc..707aceebb1 100644 --- a/src/bootstrap/bootstrap.py +++ b/src/bootstrap/bootstrap.py @@ -8,7 +8,7 @@ # option. This file may not be copied, modified, or distributed # except according to those terms. -from __future__ import print_function +from __future__ import absolute_import, division, print_function import argparse import contextlib import datetime @@ -294,7 +294,7 @@ def default_build_triple(): raise ValueError('unknown byteorder: {}'.format(sys.byteorder)) # only the n64 ABI is supported, indicate it ostype += 'abi64' - elif cputype == 'sparcv9': + elif cputype == 'sparcv9' or cputype == 'sparc64': pass else: err = "unknown cpu type: {}".format(cputype) @@ -302,6 +302,7 @@ def default_build_triple(): return "{}-{}".format(cputype, ostype) + class RustBuild(object): """Provide all the methods required to build Rust""" def __init__(self): @@ -498,7 +499,7 @@ class RustBuild(object): If the key does not exists, the result is None: - >>> rb.get_toml("key3") == None + >>> rb.get_toml("key3") is None True """ for line in self.config_toml.splitlines(): @@ -531,7 +532,7 @@ class RustBuild(object): """ config = self.get_toml(program) if config: - return config + return os.path.expanduser(config) return os.path.join(self.bin_root(), "bin", "{}{}".format( program, self.exe_suffix())) @@ -647,7 +648,8 @@ class RustBuild(object): if not ((module.endswith("llvm") and self.get_toml('llvm-config')) or (module.endswith("jemalloc") and - self.get_toml('jemalloc')))] + (self.get_toml('use-jemalloc') == "false" or + self.get_toml('jemalloc'))))] run(["git", "submodule", "update", "--init", "--recursive"] + submodules, cwd=self.rust_root, verbose=self.verbose) diff --git a/src/bootstrap/bootstrap_test.py b/src/bootstrap/bootstrap_test.py index 32ea4b4abe..4db7e2ec01 100644 --- a/src/bootstrap/bootstrap_test.py +++ b/src/bootstrap/bootstrap_test.py @@ -10,6 +10,7 @@ """Bootstrap tests""" +from __future__ import absolute_import, division, print_function import os import doctest import unittest diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs index e7a5196178..c76900882b 100644 --- a/src/bootstrap/builder.rs +++ b/src/bootstrap/builder.rs @@ -261,9 +261,10 @@ impl<'a> Builder<'a> { doc::Reference, doc::Rustdoc, doc::CargoBook), Kind::Dist => describe!(dist::Docs, dist::Mingw, dist::Rustc, dist::DebuggerScripts, dist::Std, dist::Analysis, dist::Src, dist::PlainSourceTarball, dist::Cargo, - dist::Rls, dist::Extended, dist::HashSign, dist::DontDistWithMiriEnabled), + dist::Rls, dist::Rustfmt, dist::Extended, dist::HashSign, + dist::DontDistWithMiriEnabled), Kind::Install => describe!(install::Docs, install::Std, install::Cargo, install::Rls, - install::Analysis, install::Src, install::Rustc), + install::Rustfmt, install::Analysis, install::Src, install::Rustc), } } @@ -413,12 +414,16 @@ impl<'a> Builder<'a> { pub fn rustdoc_cmd(&self, host: Interned) -> Command { let mut cmd = Command::new(&self.out.join("bootstrap/debug/rustdoc")); let compiler = self.compiler(self.top_stage, host); - cmd - .env("RUSTC_STAGE", compiler.stage.to_string()) - .env("RUSTC_SYSROOT", self.sysroot(compiler)) - .env("RUSTC_LIBDIR", self.sysroot_libdir(compiler, self.build.build)) - .env("CFG_RELEASE_CHANNEL", &self.build.config.channel) - .env("RUSTDOC_REAL", self.rustdoc(host)); + cmd.env("RUSTC_STAGE", compiler.stage.to_string()) + .env("RUSTC_SYSROOT", self.sysroot(compiler)) + .env("RUSTC_LIBDIR", self.sysroot_libdir(compiler, self.build.build)) + .env("CFG_RELEASE_CHANNEL", &self.build.config.channel) + .env("RUSTDOC_REAL", self.rustdoc(host)) + .env("RUSTDOC_CRATE_VERSION", self.build.rust_version()) + .env("RUSTC_BOOTSTRAP", "1"); + if let Some(linker) = self.build.linker(host) { + cmd.env("RUSTC_TARGET_LINKER", linker); + } cmd } @@ -468,8 +473,6 @@ impl<'a> Builder<'a> { .env("RUSTC", self.out.join("bootstrap/debug/rustc")) .env("RUSTC_REAL", self.rustc(compiler)) .env("RUSTC_STAGE", stage.to_string()) - .env("RUSTC_CODEGEN_UNITS", - self.config.rust_codegen_units.to_string()) .env("RUSTC_DEBUG_ASSERTIONS", self.config.rust_debug_assertions.to_string()) .env("RUSTC_SYSROOT", self.sysroot(compiler)) @@ -481,8 +484,18 @@ impl<'a> Builder<'a> { } else { PathBuf::from("/path/to/nowhere/rustdoc/not/required") }) - .env("TEST_MIRI", self.config.test_miri.to_string()) - .env("RUSTC_FLAGS", self.rustc_flags(target).join(" ")); + .env("TEST_MIRI", self.config.test_miri.to_string()); + + if let Some(n) = self.config.rust_codegen_units { + cargo.env("RUSTC_CODEGEN_UNITS", n.to_string()); + } + + if let Some(host_linker) = self.build.linker(compiler.host) { + cargo.env("RUSTC_HOST_LINKER", host_linker); + } + if let Some(target_linker) = self.build.linker(target) { + cargo.env("RUSTC_TARGET_LINKER", target_linker); + } if mode != Mode::Tool { // Tools don't get debuginfo right now, e.g. cargo and rls don't @@ -556,17 +569,35 @@ impl<'a> Builder<'a> { cargo.env("RUSTC_VERBOSE", format!("{}", self.verbosity)); - // Specify some various options for build scripts used throughout - // the build. + // Throughout the build Cargo can execute a number of build scripts + // compiling C/C++ code and we need to pass compilers, archivers, flags, etc + // obtained previously to those build scripts. + // Build scripts use either the `cc` crate or `configure/make` so we pass + // the options through environment variables that are fetched and understood by both. // // FIXME: the guard against msvc shouldn't need to be here if !target.contains("msvc") { - cargo.env(format!("CC_{}", target), self.cc(target)) - .env(format!("AR_{}", target), self.ar(target).unwrap()) // only msvc is None - .env(format!("CFLAGS_{}", target), self.cflags(target).join(" ")); + let cc = self.cc(target); + cargo.env(format!("CC_{}", target), cc) + .env("CC", cc); + + let cflags = self.cflags(target).join(" "); + cargo.env(format!("CFLAGS_{}", target), cflags.clone()) + .env("CFLAGS", cflags.clone()); + + if let Some(ar) = self.ar(target) { + let ranlib = format!("{} s", ar.display()); + cargo.env(format!("AR_{}", target), ar) + .env("AR", ar) + .env(format!("RANLIB_{}", target), ranlib.clone()) + .env("RANLIB", ranlib); + } if let Ok(cxx) = self.cxx(target) { - cargo.env(format!("CXX_{}", target), cxx); + cargo.env(format!("CXX_{}", target), cxx) + .env("CXX", cxx) + .env(format!("CXXFLAGS_{}", target), cflags.clone()) + .env("CXXFLAGS", cflags); } } @@ -574,6 +605,9 @@ impl<'a> Builder<'a> { cargo.env("RUSTC_SAVE_ANALYSIS", "api".to_string()); } + // For `cargo doc` invocations, make rustdoc print the Rust version into the docs + cargo.env("RUSTDOC_CRATE_VERSION", self.build.rust_version()); + // Environment variables *required* throughout the build // // FIXME: should update code to not require this env var @@ -582,12 +616,22 @@ impl<'a> Builder<'a> { // Set this for all builds to make sure doc builds also get it. cargo.env("CFG_RELEASE_CHANNEL", &self.build.config.channel); - if self.is_verbose() { + if self.is_very_verbose() { cargo.arg("-v"); } - // FIXME: cargo bench does not accept `--release` - if self.config.rust_optimize && cmd != "bench" { - cargo.arg("--release"); + if self.config.rust_optimize { + // FIXME: cargo bench does not accept `--release` + if cmd != "bench" { + cargo.arg("--release"); + } + + if mode != Mode::Libstd && // FIXME(#45320) + mode != Mode::Libtest && // FIXME(#45511) + self.config.rust_codegen_units.is_none() && + self.build.is_rust_llvm(compiler.host) + { + cargo.env("RUSTC_THINLTO", "1"); + } } if self.config.locked_deps { cargo.arg("--locked"); diff --git a/src/bootstrap/cc_detect.rs b/src/bootstrap/cc_detect.rs index 76bb7ccbc1..e531fdaf29 100644 --- a/src/bootstrap/cc_detect.rs +++ b/src/bootstrap/cc_detect.rs @@ -31,20 +31,51 @@ //! ever be probed for. Instead the compilers found here will be used for //! everything. +use std::collections::HashSet; +use std::{env, iter}; +use std::path::{Path, PathBuf}; use std::process::Command; -use std::iter; -use build_helper::{cc2ar, output}; +use build_helper::output; use cc; use Build; use config::Target; use cache::Interned; +// The `cc` crate doesn't provide a way to obtain a path to the detected archiver, +// so use some simplified logic here. First we respect the environment variable `AR`, then +// try to infer the archiver path from the C compiler path. +// In the future this logic should be replaced by calling into the `cc` crate. +fn cc2ar(cc: &Path, target: &str) -> Option { + if let Some(ar) = env::var_os("AR") { + Some(PathBuf::from(ar)) + } else if target.contains("msvc") { + None + } else if target.contains("musl") { + Some(PathBuf::from("ar")) + } else if target.contains("openbsd") { + Some(PathBuf::from("ar")) + } else { + let parent = cc.parent().unwrap(); + let file = cc.file_name().unwrap().to_str().unwrap(); + for suffix in &["gcc", "cc", "clang"] { + if let Some(idx) = file.rfind(suffix) { + let mut file = file[..idx].to_owned(); + file.push_str("ar"); + return Some(parent.join(&file)); + } + } + Some(parent.join(file)) + } +} + pub fn find(build: &mut Build) { // For all targets we're going to need a C compiler for building some shims // and such as well as for being a linker for Rust code. - for target in build.targets.iter().chain(&build.hosts).cloned().chain(iter::once(build.build)) { + let targets = build.targets.iter().chain(&build.hosts).cloned().chain(iter::once(build.build)) + .collect::>(); + for target in targets.into_iter() { let mut cfg = cc::Build::new(); cfg.cargo_metadata(false).opt_level(0).warnings(false).debug(false) .target(&target).host(&build.build); @@ -57,16 +88,23 @@ pub fn find(build: &mut Build) { } let compiler = cfg.get_compiler(); - let ar = cc2ar(compiler.path(), &target); + let ar = if let ar @ Some(..) = config.and_then(|c| c.ar.clone()) { + ar + } else { + cc2ar(compiler.path(), &target) + }; + build.verbose(&format!("CC_{} = {:?}", &target, compiler.path())); - if let Some(ref ar) = ar { + build.cc.insert(target, compiler); + if let Some(ar) = ar { build.verbose(&format!("AR_{} = {:?}", &target, ar)); + build.ar.insert(target, ar); } - build.cc.insert(target, (compiler, ar)); } // For all host triples we need to find a C++ compiler as well - for host in build.hosts.iter().cloned().chain(iter::once(build.build)) { + let hosts = build.hosts.iter().cloned().chain(iter::once(build.build)).collect::>(); + for host in hosts.into_iter() { let mut cfg = cc::Build::new(); cfg.cargo_metadata(false).opt_level(0).warnings(false).debug(false).cpp(true) .target(&host).host(&build.build); diff --git a/src/bootstrap/channel.rs b/src/bootstrap/channel.rs index d9861867cf..4f7dd8d5e6 100644 --- a/src/bootstrap/channel.rs +++ b/src/bootstrap/channel.rs @@ -24,12 +24,12 @@ use Build; use config::Config; // The version number -pub const CFG_RELEASE_NUM: &str = "1.22.1"; +pub const CFG_RELEASE_NUM: &str = "1.23.0"; // An optional number to put after the label, e.g. '.2' -> '-beta.2' // Be sure to make this starts with a dot to conform to semver pre-release // versions (section 9) -pub const CFG_PRERELEASE_VERSION: &str = ".3"; +pub const CFG_PRERELEASE_VERSION: &str = ".2"; pub struct GitInfo { inner: Option, diff --git a/src/bootstrap/check.rs b/src/bootstrap/check.rs index bd9d29be96..4d69b19c73 100644 --- a/src/bootstrap/check.rs +++ b/src/bootstrap/check.rs @@ -256,7 +256,6 @@ impl Step for Rls { cargo.env("RUSTC_NO_PREFER_DYNAMIC", "1"); builder.add_rustc_lib_path(compiler, &mut cargo); - cargo.arg("--").args(&build.config.cmd.test_args()); try_run_expecting( build, @@ -295,8 +294,11 @@ impl Step for Rustfmt { let compiler = builder.compiler(stage, host); builder.ensure(tool::Rustfmt { compiler, target: self.host }); - let mut cargo = builder.cargo(compiler, Mode::Tool, host, "test"); - cargo.arg("--manifest-path").arg(build.src.join("src/tools/rustfmt/Cargo.toml")); + let mut cargo = tool::prepare_tool_cargo(builder, + compiler, + host, + "test", + "src/tools/rustfmt"); // Don't build tests dynamically, just a pain to work with cargo.env("RUSTC_NO_PREFER_DYNAMIC", "1"); @@ -338,30 +340,34 @@ impl Step for Miri { let host = self.host; let compiler = builder.compiler(1, host); - let miri = builder.ensure(tool::Miri { compiler, target: self.host }); - let mut cargo = builder.cargo(compiler, Mode::Tool, host, "test"); - cargo.arg("--manifest-path").arg(build.src.join("src/tools/miri/Cargo.toml")); - - // Don't build tests dynamically, just a pain to work with - cargo.env("RUSTC_NO_PREFER_DYNAMIC", "1"); - // miri tests need to know about the stage sysroot - cargo.env("MIRI_SYSROOT", builder.sysroot(compiler)); - cargo.env("RUSTC_TEST_SUITE", builder.rustc(compiler)); - cargo.env("RUSTC_LIB_PATH", builder.rustc_libdir(compiler)); - cargo.env("MIRI_PATH", miri); - - builder.add_rustc_lib_path(compiler, &mut cargo); - - try_run_expecting( - build, - &mut cargo, - builder.build.config.toolstate.miri.passes(ToolState::Testing), - ); + if let Some(miri) = builder.ensure(tool::Miri { compiler, target: self.host }) { + let mut cargo = builder.cargo(compiler, Mode::Tool, host, "test"); + cargo.arg("--manifest-path").arg(build.src.join("src/tools/miri/Cargo.toml")); + + // Don't build tests dynamically, just a pain to work with + cargo.env("RUSTC_NO_PREFER_DYNAMIC", "1"); + // miri tests need to know about the stage sysroot + cargo.env("MIRI_SYSROOT", builder.sysroot(compiler)); + cargo.env("RUSTC_TEST_SUITE", builder.rustc(compiler)); + cargo.env("RUSTC_LIB_PATH", builder.rustc_libdir(compiler)); + cargo.env("MIRI_PATH", miri); + + builder.add_rustc_lib_path(compiler, &mut cargo); + + try_run_expecting( + build, + &mut cargo, + builder.build.config.toolstate.miri.passes(ToolState::Testing), + ); + } else { + eprintln!("failed to test miri: could not build"); + } } } #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub struct Clippy { + stage: u32, host: Interned, } @@ -376,6 +382,7 @@ impl Step for Clippy { fn make_run(run: RunConfig) { run.builder.ensure(Clippy { + stage: run.builder.top_stage, host: run.target, }); } @@ -383,25 +390,35 @@ impl Step for Clippy { /// Runs `cargo test` for clippy. fn run(self, builder: &Builder) { let build = builder.build; + let stage = self.stage; let host = self.host; - let compiler = builder.compiler(1, host); - - let _clippy = builder.ensure(tool::Clippy { compiler, target: self.host }); - let mut cargo = builder.cargo(compiler, Mode::Tool, host, "test"); - cargo.arg("--manifest-path").arg(build.src.join("src/tools/clippy/Cargo.toml")); - - // Don't build tests dynamically, just a pain to work with - cargo.env("RUSTC_NO_PREFER_DYNAMIC", "1"); - // clippy tests need to know about the stage sysroot - cargo.env("SYSROOT", builder.sysroot(compiler)); - - builder.add_rustc_lib_path(compiler, &mut cargo); + let compiler = builder.compiler(stage, host); - try_run_expecting( - build, - &mut cargo, - builder.build.config.toolstate.clippy.passes(ToolState::Testing), - ); + if let Some(clippy) = builder.ensure(tool::Clippy { compiler, target: self.host }) { + let mut cargo = builder.cargo(compiler, Mode::Tool, host, "test"); + cargo.arg("--manifest-path").arg(build.src.join("src/tools/clippy/Cargo.toml")); + + // Don't build tests dynamically, just a pain to work with + cargo.env("RUSTC_NO_PREFER_DYNAMIC", "1"); + // clippy tests need to know about the stage sysroot + cargo.env("SYSROOT", builder.sysroot(compiler)); + cargo.env("RUSTC_TEST_SUITE", builder.rustc(compiler)); + cargo.env("RUSTC_LIB_PATH", builder.rustc_libdir(compiler)); + let host_libs = builder.stage_out(compiler, Mode::Tool).join(builder.cargo_dir()); + cargo.env("HOST_LIBS", host_libs); + // clippy tests need to find the driver + cargo.env("CLIPPY_DRIVER_PATH", clippy); + + builder.add_rustc_lib_path(compiler, &mut cargo); + + try_run_expecting( + build, + &mut cargo, + builder.build.config.toolstate.clippy.passes(ToolState::Testing), + ); + } else { + eprintln!("failed to test clippy: could not build"); + } } } @@ -740,12 +757,14 @@ impl Step for Compiletest { flags.push("-g".to_string()); } - let mut hostflags = build.rustc_flags(compiler.host); - hostflags.extend(flags.clone()); + if let Some(linker) = build.linker(target) { + cmd.arg("--linker").arg(linker); + } + + let hostflags = flags.clone(); cmd.arg("--host-rustcflags").arg(hostflags.join(" ")); - let mut targetflags = build.rustc_flags(target); - targetflags.extend(flags); + let mut targetflags = flags.clone(); targetflags.push(format!("-Lnative={}", build.test_helpers_out(target).display())); cmd.arg("--target-rustcflags").arg(targetflags.join(" ")); @@ -799,6 +818,9 @@ impl Step for Compiletest { .arg("--cflags").arg(build.cflags(target).join(" ")) .arg("--llvm-components").arg(llvm_components.trim()) .arg("--llvm-cxxflags").arg(llvm_cxxflags.trim()); + if let Some(ar) = build.ar(target) { + cmd.arg("--ar").arg(ar); + } } } if suite == "run-make" && !build.config.llvm_enabled { @@ -824,7 +846,7 @@ impl Step for Compiletest { // Note that if we encounter `PATH` we make sure to append to our own `PATH` // rather than stomp over it. if target.contains("msvc") { - for &(ref k, ref v) in build.cc[&target].0.env() { + for &(ref k, ref v) in build.cc[&target].env() { if k != "PATH" { cmd.env(k, v); } @@ -1189,7 +1211,8 @@ impl Step for Crate { // ends up messing with various mtime calculations and such. if !name.contains("jemalloc") && *name != *"build_helper" && - !(name.starts_with("rustc_") && name.ends_with("san")) { + !(name.starts_with("rustc_") && name.ends_with("san")) && + name != "dlmalloc" { cargo.arg("-p").arg(&format!("{}:0.0.0", name)); } for dep in build.crates[&name].deps.iter() { diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs index 335e1690a2..db013691bb 100644 --- a/src/bootstrap/compile.rs +++ b/src/bootstrap/compile.rs @@ -29,7 +29,7 @@ use build_helper::{output, mtime, up_to_date}; use filetime::FileTime; use serde_json; -use util::{exe, libdir, is_dylib, copy}; +use util::{exe, libdir, is_dylib, copy, read_stamp_file, CiEnv}; use {Build, Compiler, Mode}; use native; use tool; @@ -102,13 +102,13 @@ impl Step for Std { copy_musl_third_party_objects(build, target, &libdir); } - let out_dir = build.cargo_out(compiler, Mode::Libstd, target); + let out_dir = build.stage_out(compiler, Mode::Libstd); build.clear_if_dirty(&out_dir, &builder.rustc(compiler)); let mut cargo = builder.cargo(compiler, Mode::Libstd, target, "build"); std_cargo(build, &compiler, target, &mut cargo); run_cargo(build, - &mut cargo, - &libstd_stamp(build, compiler, target)); + &mut cargo, + &libstd_stamp(build, compiler, target)); builder.ensure(StdLink { compiler: builder.compiler(compiler.stage, build.build), @@ -354,13 +354,13 @@ impl Step for Test { let _folder = build.fold_output(|| format!("stage{}-test", compiler.stage)); println!("Building stage{} test artifacts ({} -> {})", compiler.stage, &compiler.host, target); - let out_dir = build.cargo_out(compiler, Mode::Libtest, target); + let out_dir = build.stage_out(compiler, Mode::Libtest); build.clear_if_dirty(&out_dir, &libstd_stamp(build, compiler, target)); let mut cargo = builder.cargo(compiler, Mode::Libtest, target, "build"); test_cargo(build, &compiler, target, &mut cargo); run_cargo(build, - &mut cargo, - &libtest_stamp(build, compiler, target)); + &mut cargo, + &libtest_stamp(build, compiler, target)); builder.ensure(TestLink { compiler: builder.compiler(compiler.stage, build.build), @@ -480,8 +480,9 @@ impl Step for Rustc { println!("Building stage{} compiler artifacts ({} -> {})", compiler.stage, &compiler.host, target); - let out_dir = build.cargo_out(compiler, Mode::Librustc, target); - build.clear_if_dirty(&out_dir, &libtest_stamp(build, compiler, target)); + let stage_out = builder.stage_out(compiler, Mode::Librustc); + build.clear_if_dirty(&stage_out, &libstd_stamp(build, compiler, target)); + build.clear_if_dirty(&stage_out, &libtest_stamp(build, compiler, target)); let mut cargo = builder.cargo(compiler, Mode::Librustc, target, "build"); rustc_cargo(build, &compiler, target, &mut cargo); @@ -560,9 +561,6 @@ pub fn rustc_cargo(build: &Build, if let Some(ref s) = build.config.rustc_default_linker { cargo.env("CFG_DEFAULT_LINKER", s); } - if let Some(ref s) = build.config.rustc_default_ar { - cargo.env("CFG_DEFAULT_AR", s); - } } #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] @@ -760,15 +758,7 @@ impl Step for Assemble { /// `sysroot_dst` provided. fn add_to_sysroot(sysroot_dst: &Path, stamp: &Path) { t!(fs::create_dir_all(&sysroot_dst)); - let mut contents = Vec::new(); - t!(t!(File::open(stamp)).read_to_end(&mut contents)); - // This is the method we use for extracting paths from the stamp file passed to us. See - // run_cargo for more information (in this file). - for part in contents.split(|b| *b == 0) { - if part.is_empty() { - continue - } - let path = Path::new(t!(str::from_utf8(part))); + for path in read_stamp_file(stamp) { copy(&path, &sysroot_dst.join(path.file_name().unwrap())); } } @@ -802,7 +792,7 @@ fn run_cargo(build: &Build, cargo: &mut Command, stamp: &Path) { cargo.arg("--message-format").arg("json") .stdout(Stdio::piped()); - if stderr_isatty() { + if stderr_isatty() && build.ci_env == CiEnv::None { // since we pass message-format=json to cargo, we need to tell the rustc // wrapper to give us colored output if necessary. This is because we // only want Cargo's JSON output, not rustcs. @@ -870,10 +860,19 @@ fn run_cargo(build: &Build, cargo: &mut Command, stamp: &Path) { // have a hash in the name, but there's a version of this file in // the `deps` folder which *does* have a hash in the name. That's // the one we'll want to we'll probe for it later. - toplevel.push((filename.file_stem().unwrap() - .to_str().unwrap().to_string(), - filename.extension().unwrap().to_owned() - .to_str().unwrap().to_string())); + // + // We do not use `Path::file_stem` or `Path::extension` here, + // because some generated files may have multiple extensions e.g. + // `std-.dll.lib` on Windows. The aforementioned methods only + // split the file name by the last extension (`.lib`) while we need + // to split by all extensions (`.dll.lib`). + let expected_len = t!(filename.metadata()).len(); + let filename = filename.file_name().unwrap().to_str().unwrap(); + let mut parts = filename.splitn(2, '.'); + let file_stem = parts.next().unwrap().to_owned(); + let extension = parts.next().unwrap().to_owned(); + + toplevel.push((file_stem, extension, expected_len)); } } @@ -893,11 +892,12 @@ fn run_cargo(build: &Build, cargo: &mut Command, stamp: &Path) { .map(|e| t!(e)) .map(|e| (e.path(), e.file_name().into_string().unwrap(), t!(e.metadata()))) .collect::>(); - for (prefix, extension) in toplevel { - let candidates = contents.iter().filter(|&&(_, ref filename, _)| { + for (prefix, extension, expected_len) in toplevel { + let candidates = contents.iter().filter(|&&(_, ref filename, ref meta)| { filename.starts_with(&prefix[..]) && filename[prefix.len()..].starts_with("-") && - filename.ends_with(&extension[..]) + filename.ends_with(&extension[..]) && + meta.len() == expected_len }); let max = candidates.max_by_key(|&&(_, _, ref metadata)| { FileTime::from_last_modification_time(metadata) @@ -941,6 +941,8 @@ fn run_cargo(build: &Build, cargo: &mut Command, stamp: &Path) { let max = max.unwrap(); let max_path = max_path.unwrap(); if stamp_contents == new_contents && max <= stamp_mtime { + build.verbose(&format!("not updating {:?}; contents equal and {} <= {}", + stamp, max, stamp_mtime)); return } if max > stamp_mtime { diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs index c8b2ed042c..35e62f17f2 100644 --- a/src/bootstrap/config.rs +++ b/src/bootstrap/config.rs @@ -81,14 +81,13 @@ pub struct Config { // rust codegen options pub rust_optimize: bool, - pub rust_codegen_units: u32, + pub rust_codegen_units: Option, pub rust_debug_assertions: bool, pub rust_debuginfo: bool, pub rust_debuginfo_lines: bool, pub rust_debuginfo_only_std: bool, pub rust_rpath: bool, pub rustc_default_linker: Option, - pub rustc_default_ar: Option, pub rust_optimize_tests: bool, pub rust_debuginfo_tests: bool, pub rust_dist_src: bool, @@ -144,6 +143,8 @@ pub struct Target { pub jemalloc: Option, pub cc: Option, pub cxx: Option, + pub ar: Option, + pub linker: Option, pub ndk: Option, pub crt_static: Option, pub musl_root: Option, @@ -206,6 +207,11 @@ struct Install { bindir: Option, libdir: Option, mandir: Option, + + // standard paths, currently unused + datadir: Option, + infodir: Option, + localstatedir: Option, } /// TOML representation of how the LLVM build is configured. @@ -262,7 +268,6 @@ struct Rust { use_jemalloc: Option, backtrace: Option, default_linker: Option, - default_ar: Option, channel: Option, musl_root: Option, rpath: Option, @@ -284,6 +289,8 @@ struct TomlTarget { jemalloc: Option, cc: Option, cxx: Option, + ar: Option, + linker: Option, android_ndk: Option, crt_static: Option, musl_root: Option, @@ -297,6 +304,7 @@ impl Config { let mut config = Config::default(); config.llvm_enabled = true; config.llvm_optimize = true; + config.llvm_version_check = true; config.use_jemalloc = true; config.backtrace = true; config.rust_optimize = true; @@ -304,7 +312,6 @@ impl Config { config.submodules = true; config.docs = true; config.rust_rpath = true; - config.rust_codegen_units = 1; config.channel = "dev".to_string(); config.codegen_tests = true; config.ignore_git = false; @@ -464,12 +471,11 @@ impl Config { set(&mut config.quiet_tests, rust.quiet_tests); set(&mut config.test_miri, rust.test_miri); config.rustc_default_linker = rust.default_linker.clone(); - config.rustc_default_ar = rust.default_ar.clone(); config.musl_root = rust.musl_root.clone().map(PathBuf::from); match rust.codegen_units { - Some(0) => config.rust_codegen_units = num_cpus::get() as u32, - Some(n) => config.rust_codegen_units = n, + Some(0) => config.rust_codegen_units = Some(num_cpus::get() as u32), + Some(n) => config.rust_codegen_units = Some(n), None => {} } } @@ -487,8 +493,10 @@ impl Config { if let Some(ref s) = cfg.android_ndk { target.ndk = Some(env::current_dir().unwrap().join(s)); } - target.cxx = cfg.cxx.clone().map(PathBuf::from); target.cc = cfg.cc.clone().map(PathBuf::from); + target.cxx = cfg.cxx.clone().map(PathBuf::from); + target.ar = cfg.ar.clone().map(PathBuf::from); + target.linker = cfg.linker.clone().map(PathBuf::from); target.crt_static = cfg.crt_static.clone(); target.musl_root = cfg.musl_root.clone().map(PathBuf::from); target.qemu_rootfs = cfg.qemu_rootfs.clone().map(PathBuf::from); @@ -520,7 +528,7 @@ impl Config { // Now that we've reached the end of our configuration, infer the // default values for all options that we haven't otherwise stored yet. - let default = config.channel == "nightly"; + let default = false; config.llvm_assertions = llvm_assertions.unwrap_or(default); let default = match &config.channel[..] { diff --git a/src/bootstrap/configure.py b/src/bootstrap/configure.py index 67337bf442..579422c979 100755 --- a/src/bootstrap/configure.py +++ b/src/bootstrap/configure.py @@ -11,6 +11,7 @@ # ignore-tidy-linelength +from __future__ import absolute_import, division, print_function import sys import os rust_dir = os.path.dirname(os.path.abspath(__file__)) @@ -19,21 +20,26 @@ rust_dir = os.path.dirname(rust_dir) sys.path.append(os.path.join(rust_dir, "src", "bootstrap")) import bootstrap -class Option: + +class Option(object): def __init__(self, name, rustbuild, desc, value): self.name = name self.rustbuild = rustbuild self.desc = desc self.value = value + options = [] + def o(*args): options.append(Option(*args, value=False)) + def v(*args): options.append(Option(*args, value=True)) + o("debug", "rust.debug", "debug mode; disables optimization unless `--enable-optimize` given") o("docs", "build.docs", "build standard library documentation") o("compiler-docs", "build.compiler-docs", "build compiler documentation") @@ -119,9 +125,8 @@ v("experimental-targets", "llvm.experimental-targets", "experimental LLVM targets to build") v("release-channel", "rust.channel", "the name of the release channel to build") -# Used on systems where "cc" and "ar" are unavailable +# Used on systems where "cc" is unavailable v("default-linker", "rust.default-linker", "the default linker") -v("default-ar", "rust.default-ar", "the default ar") # Many of these are saved below during the "writing configuration" step # (others are conditionally saved). @@ -136,13 +141,16 @@ v("target", None, "GNUs ./configure syntax LLVM target triples") v("set", None, "set arbitrary key/value pairs in TOML configuration") + def p(msg): print("configure: " + msg) + def err(msg): print("configure: error: " + msg) sys.exit(1) + if '--help' in sys.argv or '-h' in sys.argv: print('Usage: ./configure [options]') print('') @@ -208,7 +216,7 @@ while i < len(sys.argv): continue found = True - if not option.name in known_args: + if option.name not in known_args: known_args[option.name] = [] known_args[option.name].append((option, value)) break @@ -217,7 +225,12 @@ while i < len(sys.argv): unknown_args.append(arg) p("") -if 'option-checking' not in known_args or known_args['option-checking'][1]: +# Note: here and a few other places, we use [-1] to apply the *last* value +# passed. But if option-checking is enabled, then the known_args loop will +# also assert that options are only passed once. +option_checking = ('option-checking' not in known_args + or known_args['option-checking'][-1][1]) +if option_checking: if len(unknown_args) > 0: err("Option '" + unknown_args[0] + "' is not recognized") if len(need_value_args) > 0: @@ -227,27 +240,30 @@ if 'option-checking' not in known_args or known_args['option-checking'][1]: # TOML we're going to write out config = {} + def build(): if 'build' in known_args: - return known_args['build'][0][1] + return known_args['build'][-1][1] return bootstrap.default_build_triple() + def set(key, value): - s = "{:20} := {}".format(key, value) - if len(s) < 70: - p(s) - else: - p(s[:70] + " ...") - - arr = config - parts = key.split('.') - for i, part in enumerate(parts): - if i == len(parts) - 1: - arr[part] = value - else: - if not part in arr: - arr[part] = {} - arr = arr[part] + s = "{:20} := {}".format(key, value) + if len(s) < 70: + p(s) + else: + p(s[:70] + " ...") + + arr = config + parts = key.split('.') + for i, part in enumerate(parts): + if i == len(parts) - 1: + arr[part] = value + else: + if part not in arr: + arr[part] = {} + arr = arr[part] + for key in known_args: # The `set` option is special and can be passed a bunch of times @@ -265,9 +281,9 @@ for key in known_args: # Ensure each option is only passed once arr = known_args[key] - if len(arr) > 1: + if option_checking and len(arr) > 1: err("Option '{}' provided more than once".format(key)) - option, value = arr[0] + option, value = arr[-1] # If we have a clear avenue to set our value in rustbuild, do so if option.rustbuild is not None: @@ -345,8 +361,9 @@ for target in configured_targets: targets[target] = sections['target'][:] targets[target][0] = targets[target][0].replace("x86_64-unknown-linux-gnu", target) + # Here we walk through the constructed configuration we have from the parsed -# command line arguemnts. We then apply each piece of configuration by +# command line arguments. We then apply each piece of configuration by # basically just doing a `sed` to change the various configuration line to what # we've got configure. def to_toml(value): @@ -360,7 +377,8 @@ def to_toml(value): elif isinstance(value, str): return "'" + value + "'" else: - raise 'no toml' + raise RuntimeError('no toml') + def configure_section(lines, config): for key in config: @@ -375,10 +393,11 @@ def configure_section(lines, config): if not found: raise RuntimeError("failed to find config line for {}".format(key)) + for section_key in config: section_config = config[section_key] - if not section_key in sections: - raise RuntimeError("config key {} not in sections".format(key)) + if section_key not in sections: + raise RuntimeError("config key {} not in sections".format(section_key)) if section_key == 'target': for target in section_config: @@ -407,11 +426,6 @@ with open('Makefile', 'w') as f: contents = contents.replace("$(CFG_PYTHON)", sys.executable) f.write(contents) -# Finally, clean up with a bit of a help message -relpath = os.path.dirname(__file__) -if relpath == '': - relpath = '.' - p("") -p("run `python {}/x.py --help`".format(relpath)) +p("run `python {}/x.py --help`".format(rust_dir)) p("") diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs index 3d4aa0413d..9f7e3de9dc 100644 --- a/src/bootstrap/dist.rs +++ b/src/bootstrap/dist.rs @@ -39,6 +39,8 @@ pub fn pkgname(build: &Build, component: &str) -> String { format!("{}-{}", component, build.cargo_package_vers()) } else if component == "rls" { format!("{}-{}", component, build.rls_package_vers()) + } else if component == "rustfmt" { + format!("{}-{}", component, build.rustfmt_package_vers()) } else { assert!(component.starts_with("rust")); format!("{}-{}", component, build.rust_package_vers()) @@ -176,7 +178,7 @@ fn make_win_dist( } } - let target_tools = ["gcc.exe", "ld.exe", "ar.exe", "dlltool.exe", "libwinpthread-1.dll"]; + let target_tools = ["gcc.exe", "ld.exe", "dlltool.exe", "libwinpthread-1.dll"]; let mut rustc_dlls = vec!["libstdc++-6.dll", "libwinpthread-1.dll"]; if target_triple.starts_with("i686-") { rustc_dlls.push("libgcc_s_dw2-1.dll"); @@ -630,7 +632,7 @@ impl Step for Analysis { let image = tmpdir(build).join(format!("{}-{}-image", name, target)); let src = build.stage_out(compiler, Mode::Libstd) - .join(target).join("release").join("deps"); + .join(target).join(build.cargo_dir()).join("deps"); let image_src = src.join("save-analysis"); let dst = image.join("lib/rustlib").join(target).join("analysis"); @@ -670,6 +672,9 @@ fn copy_src_dirs(build: &Build, src_dirs: &[&str], exclude_dirs: &[&str], dst_di spath.ends_with(".s")) { return false } + if spath.contains("test/emscripten") || spath.contains("test\\emscripten") { + return false + } let full_path = Path::new(dir).join(path); if exclude_dirs.iter().any(|excl| full_path == Path::new(excl)) { @@ -734,17 +739,16 @@ impl Step for Src { // (essentially libstd and all of its path dependencies) let std_src_dirs = [ "src/build_helper", + "src/dlmalloc", "src/liballoc", "src/liballoc_jemalloc", "src/liballoc_system", "src/libbacktrace", - "src/libcollections", "src/libcompiler_builtins", "src/libcore", "src/liblibc", "src/libpanic_abort", "src/libpanic_unwind", - "src/librand", "src/librustc_asan", "src/librustc_lsan", "src/librustc_msan", @@ -754,6 +758,7 @@ impl Step for Src { "src/libunwind", "src/rustc/compiler_builtins_shim", "src/rustc/libc_shim", + "src/rustc/dlmalloc_shim", "src/libtest", "src/libterm", "src/jemalloc", @@ -1035,7 +1040,7 @@ pub struct Rls { } impl Step for Rls { - type Output = PathBuf; + type Output = Option; const ONLY_BUILD_TARGETS: bool = true; const ONLY_HOSTS: bool = true; @@ -1050,12 +1055,17 @@ impl Step for Rls { }); } - fn run(self, builder: &Builder) -> PathBuf { + fn run(self, builder: &Builder) -> Option { let build = builder.build; let stage = self.stage; let target = self.target; assert!(build.config.extended); + if !builder.config.toolstate.rls.testing() { + println!("skipping Dist RLS stage{} ({})", stage, target); + return None + } + println!("Dist RLS stage{} ({})", stage, target); let src = build.src.join("src/tools/rls"); let release_num = build.release_num("rls"); @@ -1068,10 +1078,12 @@ impl Step for Rls { t!(fs::create_dir_all(&image)); // Prepare the image directory + // We expect RLS to build, because we've exited this step above if tool + // state for RLS isn't testing. let rls = builder.ensure(tool::Rls { compiler: builder.compiler(stage, build.build), target - }); + }).expect("Rls to build: toolstate is testing"); install(&rls, &image.join("bin"), 0o755); let doc = image.join("share/doc/rls"); install(&src.join("README.md"), &doc, 0o644); @@ -1102,7 +1114,91 @@ impl Step for Rls { .arg("--component-name=rls-preview"); build.run(&mut cmd); - distdir(build).join(format!("{}-{}.tar.gz", name, target)) + Some(distdir(build).join(format!("{}-{}.tar.gz", name, target))) + } +} + + +#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] +pub struct Rustfmt { + pub stage: u32, + pub target: Interned, +} + +impl Step for Rustfmt { + type Output = Option; + const ONLY_BUILD_TARGETS: bool = true; + const ONLY_HOSTS: bool = true; + + fn should_run(run: ShouldRun) -> ShouldRun { + run.path("rustfmt") + } + + fn make_run(run: RunConfig) { + run.builder.ensure(Rustfmt { + stage: run.builder.top_stage, + target: run.target, + }); + } + + fn run(self, builder: &Builder) -> Option { + let build = builder.build; + let stage = self.stage; + let target = self.target; + assert!(build.config.extended); + + if !builder.config.toolstate.rustfmt.testing() { + println!("skipping Dist Rustfmt stage{} ({})", stage, target); + return None + } + + println!("Dist Rustfmt stage{} ({})", stage, target); + let src = build.src.join("src/tools/rustfmt"); + let release_num = build.release_num("rustfmt"); + let name = pkgname(build, "rustfmt"); + let version = build.rustfmt_info.version(build, &release_num); + + let tmp = tmpdir(build); + let image = tmp.join("rustfmt-image"); + drop(fs::remove_dir_all(&image)); + t!(fs::create_dir_all(&image)); + + // Prepare the image directory + let rustfmt = builder.ensure(tool::Rustfmt { + compiler: builder.compiler(stage, build.build), + target + }).expect("Rustfmt to build: toolstate is testing"); + install(&rustfmt, &image.join("bin"), 0o755); + let doc = image.join("share/doc/rustfmt"); + install(&src.join("README.md"), &doc, 0o644); + install(&src.join("LICENSE-MIT"), &doc, 0o644); + install(&src.join("LICENSE-APACHE"), &doc, 0o644); + + // Prepare the overlay + let overlay = tmp.join("rustfmt-overlay"); + drop(fs::remove_dir_all(&overlay)); + t!(fs::create_dir_all(&overlay)); + install(&src.join("README.md"), &overlay, 0o644); + install(&src.join("LICENSE-MIT"), &overlay, 0o644); + install(&src.join("LICENSE-APACHE"), &overlay, 0o644); + t!(t!(File::create(overlay.join("version"))).write_all(version.as_bytes())); + + // Generate the installer tarball + let mut cmd = rust_installer(builder); + cmd.arg("generate") + .arg("--product-name=Rust") + .arg("--rel-manifest-dir=rustlib") + .arg("--success-message=rustfmt-ready-to-fmt.") + .arg("--image-dir").arg(&image) + .arg("--work-dir").arg(&tmpdir(build)) + .arg("--output-dir").arg(&distdir(build)) + .arg("--non-installed-overlay").arg(&overlay) + .arg(format!("--package-name={}-{}", name, target)) + .arg("--legacy-manifest-dirs=rustlib,cargo") + .arg("--component-name=rustfmt-preview"); + + build.run(&mut cmd); + Some(distdir(build).join(format!("{}-{}.tar.gz", name, target))) } } @@ -1169,6 +1265,7 @@ impl Step for Extended { compiler: builder.compiler(stage, target), }); let cargo_installer = builder.ensure(Cargo { stage, target }); + let rustfmt_installer = builder.ensure(Rustfmt { stage, target }); let rls_installer = builder.ensure(Rls { stage, target }); let mingw_installer = builder.ensure(Mingw { host: target }); let analysis_installer = builder.ensure(Analysis { @@ -1202,8 +1299,13 @@ impl Step for Extended { // upgrades rustc was upgraded before rust-std. To avoid rustc clobbering // the std files during uninstall. To do this ensure that rustc comes // before rust-std in the list below. - let mut tarballs = vec![rustc_installer, cargo_installer, rls_installer, - analysis_installer, std_installer]; + let mut tarballs = Vec::new(); + tarballs.push(rustc_installer); + tarballs.push(cargo_installer); + tarballs.extend(rls_installer.clone()); + tarballs.extend(rustfmt_installer.clone()); + tarballs.push(analysis_installer); + tarballs.push(std_installer); if build.config.docs { tarballs.push(docs_installer); } @@ -1245,35 +1347,41 @@ impl Step for Extended { } rtf.push_str("}"); + fn filter(contents: &str, marker: &str) -> String { + let start = format!("tool-{}-start", marker); + let end = format!("tool-{}-end", marker); + let mut lines = Vec::new(); + let mut omitted = false; + for line in contents.lines() { + if line.contains(&start) { + omitted = true; + } else if line.contains(&end) { + omitted = false; + } else if !omitted { + lines.push(line); + } + } + + lines.join("\n") + } + + let xform = |p: &Path| { + let mut contents = String::new(); + t!(t!(File::open(p)).read_to_string(&mut contents)); + if rls_installer.is_none() { + contents = filter(&contents, "rls"); + } + if rustfmt_installer.is_none() { + contents = filter(&contents, "rustfmt"); + } + let ret = tmp.join(p.file_name().unwrap()); + t!(t!(File::create(&ret)).write_all(contents.as_bytes())); + return ret + }; + if target.contains("apple-darwin") { let pkg = tmp.join("pkg"); let _ = fs::remove_dir_all(&pkg); - t!(fs::create_dir_all(pkg.join("rustc"))); - t!(fs::create_dir_all(pkg.join("cargo"))); - t!(fs::create_dir_all(pkg.join("rust-docs"))); - t!(fs::create_dir_all(pkg.join("rust-std"))); - t!(fs::create_dir_all(pkg.join("rls"))); - t!(fs::create_dir_all(pkg.join("rust-analysis"))); - - cp_r(&work.join(&format!("{}-{}", pkgname(build, "rustc"), target)), - &pkg.join("rustc")); - cp_r(&work.join(&format!("{}-{}", pkgname(build, "cargo"), target)), - &pkg.join("cargo")); - cp_r(&work.join(&format!("{}-{}", pkgname(build, "rust-docs"), target)), - &pkg.join("rust-docs")); - cp_r(&work.join(&format!("{}-{}", pkgname(build, "rust-std"), target)), - &pkg.join("rust-std")); - cp_r(&work.join(&format!("{}-{}", pkgname(build, "rls"), target)), - &pkg.join("rls")); - cp_r(&work.join(&format!("{}-{}", pkgname(build, "rust-analysis"), target)), - &pkg.join("rust-analysis")); - - install(&etc.join("pkg/postinstall"), &pkg.join("rustc"), 0o755); - install(&etc.join("pkg/postinstall"), &pkg.join("cargo"), 0o755); - install(&etc.join("pkg/postinstall"), &pkg.join("rust-docs"), 0o755); - install(&etc.join("pkg/postinstall"), &pkg.join("rust-std"), 0o755); - install(&etc.join("pkg/postinstall"), &pkg.join("rls"), 0o755); - install(&etc.join("pkg/postinstall"), &pkg.join("rust-analysis"), 0o755); let pkgbuild = |component: &str| { let mut cmd = Command::new("pkgbuild"); @@ -1283,12 +1391,23 @@ impl Step for Extended { .arg(pkg.join(component).with_extension("pkg")); build.run(&mut cmd); }; - pkgbuild("rustc"); - pkgbuild("cargo"); - pkgbuild("rust-docs"); - pkgbuild("rust-std"); - pkgbuild("rls"); - pkgbuild("rust-analysis"); + + let prepare = |name: &str| { + t!(fs::create_dir_all(pkg.join(name))); + cp_r(&work.join(&format!("{}-{}", pkgname(build, name), target)), + &pkg.join(name)); + install(&etc.join("pkg/postinstall"), &pkg.join(name), 0o755); + pkgbuild(name); + }; + prepare("rustc"); + prepare("cargo"); + prepare("rust-docs"); + prepare("rust-std"); + prepare("rust-analysis"); + + if rls_installer.is_some() { + prepare("rls"); + } // create an 'uninstall' package install(&etc.join("pkg/postinstall"), &pkg.join("uninstall"), 0o755); @@ -1298,7 +1417,7 @@ impl Step for Extended { t!(t!(File::create(pkg.join("res/LICENSE.txt"))).write_all(license.as_bytes())); install(&etc.join("gfx/rust-logo.png"), &pkg.join("res"), 0o644); let mut cmd = Command::new("productbuild"); - cmd.arg("--distribution").arg(etc.join("pkg/Distribution.xml")) + cmd.arg("--distribution").arg(xform(&etc.join("pkg/Distribution.xml"))) .arg("--resources").arg(pkg.join("res")) .arg(distdir(build).join(format!("{}-{}.pkg", pkgname(build, "rust"), @@ -1310,46 +1429,34 @@ impl Step for Extended { if target.contains("windows") { let exe = tmp.join("exe"); let _ = fs::remove_dir_all(&exe); - t!(fs::create_dir_all(exe.join("rustc"))); - t!(fs::create_dir_all(exe.join("cargo"))); - t!(fs::create_dir_all(exe.join("rls"))); - t!(fs::create_dir_all(exe.join("rust-analysis"))); - t!(fs::create_dir_all(exe.join("rust-docs"))); - t!(fs::create_dir_all(exe.join("rust-std"))); - cp_r(&work.join(&format!("{}-{}", pkgname(build, "rustc"), target)) - .join("rustc"), - &exe.join("rustc")); - cp_r(&work.join(&format!("{}-{}", pkgname(build, "cargo"), target)) - .join("cargo"), - &exe.join("cargo")); - cp_r(&work.join(&format!("{}-{}", pkgname(build, "rust-docs"), target)) - .join("rust-docs"), - &exe.join("rust-docs")); - cp_r(&work.join(&format!("{}-{}", pkgname(build, "rust-std"), target)) - .join(format!("rust-std-{}", target)), - &exe.join("rust-std")); - cp_r(&work.join(&format!("{}-{}", pkgname(build, "rls"), target)).join("rls-preview"), - &exe.join("rls")); - cp_r(&work.join(&format!("{}-{}", pkgname(build, "rust-analysis"), target)) - .join(format!("rust-analysis-{}", target)), - &exe.join("rust-analysis")); - - t!(fs::remove_file(exe.join("rustc/manifest.in"))); - t!(fs::remove_file(exe.join("cargo/manifest.in"))); - t!(fs::remove_file(exe.join("rust-docs/manifest.in"))); - t!(fs::remove_file(exe.join("rust-std/manifest.in"))); - t!(fs::remove_file(exe.join("rls/manifest.in"))); - t!(fs::remove_file(exe.join("rust-analysis/manifest.in"))); + let prepare = |name: &str| { + t!(fs::create_dir_all(exe.join(name))); + let dir = if name == "rust-std" || name == "rust-analysis" { + format!("{}-{}", name, target) + } else if name == "rls" { + "rls-preview".to_string() + } else { + name.to_string() + }; + cp_r(&work.join(&format!("{}-{}", pkgname(build, name), target)) + .join(dir), + &exe.join(name)); + t!(fs::remove_file(exe.join(name).join("manifest.in"))); + }; + prepare("rustc"); + prepare("cargo"); + prepare("rust-analysis"); + prepare("rust-docs"); + prepare("rust-std"); + if rls_installer.is_some() { + prepare("rls"); + } if target.contains("windows-gnu") { - t!(fs::create_dir_all(exe.join("rust-mingw"))); - cp_r(&work.join(&format!("{}-{}", pkgname(build, "rust-mingw"), target)) - .join("rust-mingw"), - &exe.join("rust-mingw")); - t!(fs::remove_file(exe.join("rust-mingw/manifest.in"))); + prepare("rust-mingw"); } - install(&etc.join("exe/rust.iss"), &exe, 0o644); + install(&xform(&etc.join("exe/rust.iss")), &exe, 0o644); install(&etc.join("exe/modpath.iss"), &exe, 0o644); install(&etc.join("exe/upgrade.iss"), &exe, 0o644); install(&etc.join("gfx/rust-logo.ico"), &exe, 0o644); @@ -1413,16 +1520,18 @@ impl Step for Extended { .arg("-dr").arg("Std") .arg("-var").arg("var.StdDir") .arg("-out").arg(exe.join("StdGroup.wxs"))); - build.run(Command::new(&heat) - .current_dir(&exe) - .arg("dir") - .arg("rls") - .args(&heat_flags) - .arg("-cg").arg("RlsGroup") - .arg("-dr").arg("Rls") - .arg("-var").arg("var.RlsDir") - .arg("-out").arg(exe.join("RlsGroup.wxs")) - .arg("-t").arg(etc.join("msi/remove-duplicates.xsl"))); + if rls_installer.is_some() { + build.run(Command::new(&heat) + .current_dir(&exe) + .arg("dir") + .arg("rls") + .args(&heat_flags) + .arg("-cg").arg("RlsGroup") + .arg("-dr").arg("Rls") + .arg("-var").arg("var.RlsDir") + .arg("-out").arg(exe.join("RlsGroup.wxs")) + .arg("-t").arg(etc.join("msi/remove-duplicates.xsl"))); + } build.run(Command::new(&heat) .current_dir(&exe) .arg("dir") @@ -1456,26 +1565,30 @@ impl Step for Extended { .arg("-dDocsDir=rust-docs") .arg("-dCargoDir=cargo") .arg("-dStdDir=rust-std") - .arg("-dRlsDir=rls") .arg("-dAnalysisDir=rust-analysis") .arg("-arch").arg(&arch) .arg("-out").arg(&output) .arg(&input); add_env(build, &mut cmd, target); + if rls_installer.is_some() { + cmd.arg("-dRlsDir=rls"); + } if target.contains("windows-gnu") { cmd.arg("-dGccDir=rust-mingw"); } build.run(&mut cmd); }; - candle(&etc.join("msi/rust.wxs")); + candle(&xform(&etc.join("msi/rust.wxs"))); candle(&etc.join("msi/ui.wxs")); candle(&etc.join("msi/rustwelcomedlg.wxs")); candle("RustcGroup.wxs".as_ref()); candle("DocsGroup.wxs".as_ref()); candle("CargoGroup.wxs".as_ref()); candle("StdGroup.wxs".as_ref()); - candle("RlsGroup.wxs".as_ref()); + if rls_installer.is_some() { + candle("RlsGroup.wxs".as_ref()); + } candle("AnalysisGroup.wxs".as_ref()); if target.contains("windows-gnu") { @@ -1499,10 +1612,13 @@ impl Step for Extended { .arg("DocsGroup.wixobj") .arg("CargoGroup.wixobj") .arg("StdGroup.wixobj") - .arg("RlsGroup.wixobj") .arg("AnalysisGroup.wixobj") .current_dir(&exe); + if rls_installer.is_some() { + cmd.arg("RlsGroup.wixobj"); + } + if target.contains("windows-gnu") { cmd.arg("GccGroup.wixobj"); } @@ -1586,6 +1702,7 @@ impl Step for HashSign { cmd.arg(build.rust_package_vers()); cmd.arg(build.package_vers(&build.release_num("cargo"))); cmd.arg(build.package_vers(&build.release_num("rls"))); + cmd.arg(build.package_vers(&build.release_num("rustfmt"))); cmd.arg(addr); t!(fs::create_dir_all(distdir(build))); diff --git a/src/bootstrap/doc.rs b/src/bootstrap/doc.rs index b9a52a6679..3c12cfc4c7 100644 --- a/src/bootstrap/doc.rs +++ b/src/bootstrap/doc.rs @@ -66,7 +66,7 @@ macro_rules! book { } book!( - Nomicon, "src/doc/book", "nomicon"; + Nomicon, "src/doc/nomicon", "nomicon"; Reference, "src/doc/reference", "reference"; Rustdoc, "src/doc/rustdoc", "rustdoc"; ); @@ -132,6 +132,52 @@ impl Step for UnstableBook { } } +#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] +pub struct CargoBook { + target: Interned, + name: Interned, +} + +impl Step for CargoBook { + type Output = (); + const DEFAULT: bool = true; + + fn should_run(run: ShouldRun) -> ShouldRun { + let builder = run.builder; + run.path("src/tools/cargo/src/doc/book").default_condition(builder.build.config.docs) + } + + fn make_run(run: RunConfig) { + run.builder.ensure(CargoBook { + target: run.target, + name: INTERNER.intern_str("cargo"), + }); + } + + fn run(self, builder: &Builder) { + let build = builder.build; + + let target = self.target; + let name = self.name; + let src = build.src.join("src/tools/cargo/src/doc/book"); + + let out = build.doc_out(target); + t!(fs::create_dir_all(&out)); + + let out = out.join(name); + + println!("Cargo Book ({}) - {}", target, name); + + let _ = fs::remove_dir_all(&out); + + build.run(builder.tool_cmd(Tool::Rustbook) + .arg("build") + .arg(&src) + .arg("-d") + .arg(out)); + } +} + #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] struct RustbookSrc { target: Interned, @@ -205,10 +251,12 @@ impl Step for TheBook { /// /// * Book (first edition) /// * Book (second edition) + /// * Version info and CSS /// * Index page /// * Redirect pages fn run(self, builder: &Builder) { let build = builder.build; + let compiler = self.compiler; let target = self.target; let name = self.name; // build book first edition @@ -223,10 +271,16 @@ impl Step for TheBook { name: INTERNER.intern_string(format!("{}/second-edition", name)), }); + // build the version info page and CSS + builder.ensure(Standalone { + compiler, + target, + }); + // build the index page let index = format!("{}/index.md", name); println!("Documenting book index ({})", target); - invoke_rustdoc(builder, self.compiler, target, &index); + invoke_rustdoc(builder, compiler, target, &index); // build the redirect pages println!("Documenting book redirect pages ({})", target); @@ -235,56 +289,11 @@ impl Step for TheBook { let path = file.path(); let path = path.to_str().unwrap(); - invoke_rustdoc(builder, self.compiler, target, path); + invoke_rustdoc(builder, compiler, target, path); } } } -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub struct CargoBook { - target: Interned, -} - -impl Step for CargoBook { - type Output = (); - const DEFAULT: bool = true; - - fn should_run(run: ShouldRun) -> ShouldRun { - let builder = run.builder; - run.path("src/doc/cargo").default_condition(builder.build.config.docs) - } - - fn make_run(run: RunConfig) { - run.builder.ensure(CargoBook { - target: run.target, - }); - } - - /// Create a placeholder for the cargo documentation so that doc.rust-lang.org/cargo will - /// redirect to doc.crates.io. We want to publish doc.rust-lang.org/cargo in the paper - /// version of the book, but we don't want to rush the process of switching cargo's docs - /// over to mdbook and deploying them. When the cargo book is ready, this implementation - /// should build the mdbook instead of this redirect page. - fn run(self, builder: &Builder) { - let build = builder.build; - let out = build.doc_out(self.target); - - let cargo_dir = out.join("cargo"); - t!(fs::create_dir_all(&cargo_dir)); - - let index = cargo_dir.join("index.html"); - let redirect_html = r#" - - - - - "#; - - println!("Creating cargo book redirect page"); - t!(t!(File::create(&index)).write_all(redirect_html.as_bytes())); - } -} - fn invoke_rustdoc(builder: &Builder, compiler: Compiler, target: Interned, markdown: &str) { let build = builder.build; let out = build.doc_out(target); @@ -293,25 +302,12 @@ fn invoke_rustdoc(builder: &Builder, compiler: Compiler, target: Interned -h`"); let subcommand = match subcommand { Some(s) => s, None => { - // No subcommand -- show the general usage and subcommand help + // No or an invalid subcommand -- show the general usage and subcommand help + // An exit code will be 0 when no subcommand is given, and 1 in case of an invalid + // subcommand. println!("{}\n", subcommand_help); - process::exit(1); + let exit_code = if args.is_empty() { 0 } else { 1 }; + process::exit(exit_code); } }; diff --git a/src/bootstrap/install.rs b/src/bootstrap/install.rs index 608924c9c2..743f32ece9 100644 --- a/src/bootstrap/install.rs +++ b/src/bootstrap/install.rs @@ -27,10 +27,8 @@ pub fn install_docs(builder: &Builder, stage: u32, host: Interned) { install_sh(builder, "docs", "rust-docs", stage, Some(host)); } -pub fn install_std(builder: &Builder, stage: u32) { - for target in &builder.build.targets { - install_sh(builder, "std", "rust-std", stage, Some(*target)); - } +pub fn install_std(builder: &Builder, stage: u32, target: Interned) { + install_sh(builder, "std", "rust-std", stage, Some(target)); } pub fn install_cargo(builder: &Builder, stage: u32, host: Interned) { @@ -41,6 +39,10 @@ pub fn install_rls(builder: &Builder, stage: u32, host: Interned) { install_sh(builder, "rls", "rls", stage, Some(host)); } +pub fn install_rustfmt(builder: &Builder, stage: u32, host: Interned) { + install_sh(builder, "rustfmt", "rustfmt", stage, Some(host)); +} + pub fn install_analysis(builder: &Builder, stage: u32, host: Interned) { install_sh(builder, "analysis", "rust-analysis", stage, Some(host)); } @@ -175,19 +177,31 @@ install!((self, builder, _config), install_docs(builder, self.stage, self.target); }; Std, "src/libstd", true, only_hosts: true, { - builder.ensure(dist::Std { - compiler: builder.compiler(self.stage, self.host), - target: self.target - }); - install_std(builder, self.stage); + for target in &builder.build.targets { + builder.ensure(dist::Std { + compiler: builder.compiler(self.stage, self.host), + target: *target + }); + install_std(builder, self.stage, *target); + } }; Cargo, "cargo", _config.extended, only_hosts: true, { builder.ensure(dist::Cargo { stage: self.stage, target: self.target }); install_cargo(builder, self.stage, self.target); }; Rls, "rls", _config.extended, only_hosts: true, { - builder.ensure(dist::Rls { stage: self.stage, target: self.target }); - install_rls(builder, self.stage, self.target); + if builder.ensure(dist::Rls { stage: self.stage, target: self.target }).is_some() { + install_rls(builder, self.stage, self.target); + } else { + println!("skipping Install RLS stage{} ({})", self.stage, self.target); + } + }; + Rustfmt, "rustfmt", _config.extended, only_hosts: true, { + if builder.ensure(dist::Rustfmt { stage: self.stage, target: self.target }).is_some() { + install_rustfmt(builder, self.stage, self.target); + } else { + println!("skipping Install Rustfmt stage{} ({})", self.stage, self.target); + } }; Analysis, "analysis", _config.extended, only_hosts: false, { builder.ensure(dist::Analysis { diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs index 2d721f4557..6832992259 100644 --- a/src/bootstrap/lib.rs +++ b/src/bootstrap/lib.rs @@ -222,6 +222,7 @@ pub struct Build { rust_info: channel::GitInfo, cargo_info: channel::GitInfo, rls_info: channel::GitInfo, + rustfmt_info: channel::GitInfo, local_rebuild: bool, fail_fast: bool, verbosity: usize, @@ -240,10 +241,11 @@ pub struct Build { lldb_python_dir: Option, // Runtime state filled in later on - // target -> (cc, ar) - cc: HashMap, (cc::Tool, Option)>, - // host -> (cc, ar) + // C/C++ compilers and archiver for all targets + cc: HashMap, cc::Tool>, cxx: HashMap, cc::Tool>, + ar: HashMap, PathBuf>, + // Misc crates: HashMap, Crate>, is_sudo: bool, ci_env: CiEnv, @@ -303,6 +305,7 @@ impl Build { let rust_info = channel::GitInfo::new(&config, &src); let cargo_info = channel::GitInfo::new(&config, &src.join("src/tools/cargo")); let rls_info = channel::GitInfo::new(&config, &src.join("src/tools/rls")); + let rustfmt_info = channel::GitInfo::new(&config, &src.join("src/tools/rustfmt")); Build { initial_rustc: config.initial_rustc.clone(), @@ -322,8 +325,10 @@ impl Build { rust_info, cargo_info, rls_info, + rustfmt_info, cc: HashMap::new(), cxx: HashMap::new(), + ar: HashMap::new(), crates: HashMap::new(), lldb_version: None, lldb_python_dir: None, @@ -383,16 +388,19 @@ impl Build { /// Clear out `dir` if `input` is newer. /// /// After this executes, it will also ensure that `dir` exists. - fn clear_if_dirty(&self, dir: &Path, input: &Path) { + fn clear_if_dirty(&self, dir: &Path, input: &Path) -> bool { let stamp = dir.join(".stamp"); + let mut cleared = false; if mtime(&stamp) < mtime(input) { self.verbose(&format!("Dirty - {}", dir.display())); let _ = fs::remove_dir_all(dir); + cleared = true; } else if stamp.exists() { - return + return cleared; } t!(fs::create_dir_all(dir)); t!(File::create(stamp)); + cleared } /// Get the space-separated set of activated features for the standard @@ -433,6 +441,12 @@ impl Build { if self.config.rust_optimize {"release"} else {"debug"} } + fn tools_dir(&self, compiler: Compiler) -> PathBuf { + let out = self.out.join(&*compiler.host).join(format!("stage{}-tools-bin", compiler.stage)); + t!(fs::create_dir_all(&out)); + out + } + /// Get the directory for incremental by-products when using the /// given compiler. fn incremental_dir(&self, compiler: Compiler) -> PathBuf { @@ -612,7 +626,7 @@ impl Build { /// Returns the path to the C compiler for the target specified. fn cc(&self, target: Interned) -> &Path { - self.cc[&target].0.path() + self.cc[&target].path() } /// Returns a list of flags to pass to the C compiler for the target @@ -620,7 +634,7 @@ impl Build { fn cflags(&self, target: Interned) -> Vec { // Filter out -O and /O (the optimization flags) that we picked up from // cc-rs because the build scripts will determine that for themselves. - let mut base = self.cc[&target].0.args().iter() + let mut base = self.cc[&target].args().iter() .map(|s| s.to_string_lossy().into_owned()) .filter(|s| !s.starts_with("-O") && !s.starts_with("/O")) .collect::>(); @@ -644,7 +658,7 @@ impl Build { /// Returns the path to the `ar` archive utility for the target specified. fn ar(&self, target: Interned) -> Option<&Path> { - self.cc[&target].1.as_ref().map(|p| &**p) + self.ar.get(&target).map(|p| &**p) } /// Returns the path to the C++ compiler for the target specified. @@ -657,21 +671,17 @@ impl Build { } } - /// Returns flags to pass to the compiler to generate code for `target`. - fn rustc_flags(&self, target: Interned) -> Vec { - // New flags should be added here with great caution! - // - // It's quite unfortunate to **require** flags to generate code for a - // target, so it should only be passed here if absolutely necessary! - // Most default configuration should be done through target specs rather - // than an entry here. - - let mut base = Vec::new(); - if target != self.config.build && !target.contains("msvc") && - !target.contains("emscripten") { - base.push(format!("-Clinker={}", self.cc(target).display())); + /// Returns the path to the linker for the given target if it needs to be overriden. + fn linker(&self, target: Interned) -> Option<&Path> { + if let Some(linker) = self.config.target_config.get(&target) + .and_then(|c| c.linker.as_ref()) { + Some(linker) + } else if target != self.config.build && + !target.contains("msvc") && !target.contains("emscripten") { + Some(self.cc(target)) + } else { + None } - base } /// Returns if this target should statically link the C runtime, if specified @@ -807,6 +817,11 @@ impl Build { self.package_vers(&self.release_num("rls")) } + /// Returns the value of `package_vers` above for rustfmt + fn rustfmt_package_vers(&self) -> String { + self.package_vers(&self.release_num("rustfmt")) + } + /// Returns the `version` string associated with this compiler for Rust /// itself. /// diff --git a/src/bootstrap/mk/Makefile.in b/src/bootstrap/mk/Makefile.in index 004f0c3102..eb92c8f143 100644 --- a/src/bootstrap/mk/Makefile.in +++ b/src/bootstrap/mk/Makefile.in @@ -52,7 +52,6 @@ check: $(Q)$(BOOTSTRAP) test $(BOOTSTRAP_ARGS) check-aux: $(Q)$(BOOTSTRAP) test \ - src/tools/cargotest \ src/tools/cargo \ src/tools/rls \ src/tools/rustfmt \ diff --git a/src/bootstrap/native.rs b/src/bootstrap/native.rs index c4e8063031..fce6755aea 100644 --- a/src/bootstrap/native.rs +++ b/src/bootstrap/native.rs @@ -227,6 +227,13 @@ impl Step for Llvm { cfg.build_arg("-j").build_arg(build.jobs().to_string()); cfg.define("CMAKE_C_FLAGS", build.cflags(target).join(" ")); cfg.define("CMAKE_CXX_FLAGS", build.cflags(target).join(" ")); + if let Some(ar) = build.ar(target) { + if ar.is_absolute() { + // LLVM build breaks if `CMAKE_AR` is a relative path, for some reason it + // tries to resolve this path in the LLVM build directory. + cfg.define("CMAKE_AR", sanitize_cc(ar)); + } + } }; configure_compilers(&mut cfg); @@ -252,11 +259,14 @@ fn check_llvm_version(build: &Build, llvm_config: &Path) { let mut cmd = Command::new(llvm_config); let version = output(cmd.arg("--version")); - if version.starts_with("3.5") || version.starts_with("3.6") || - version.starts_with("3.7") { - return + let mut parts = version.split('.').take(2) + .filter_map(|s| s.parse::().ok()); + if let (Some(major), Some(minor)) = (parts.next(), parts.next()) { + if major > 3 || (major == 3 && minor >= 9) { + return + } } - panic!("\n\nbad LLVM version: {}, need >=3.5\n\n", version) + panic!("\n\nbad LLVM version: {}, need >=3.9\n\n", version) } #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] @@ -313,9 +323,9 @@ impl Step for TestHelpers { } } -const OPENSSL_VERS: &'static str = "1.0.2k"; +const OPENSSL_VERS: &'static str = "1.0.2m"; const OPENSSL_SHA256: &'static str = - "6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0"; + "8c6ff15ec6b319b50788f42c7abc2890c08ba5a1cdcd3810eb9092deada37b0f"; #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] pub struct Openssl { @@ -352,34 +362,51 @@ impl Step for Openssl { // originally from https://www.openssl.org/source/... let url = format!("https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror/{}", name); - let mut ok = false; + let mut last_error = None; for _ in 0..3 { let status = Command::new("curl") .arg("-o").arg(&tmp) + .arg("-f") // make curl fail if the URL does not return HTTP 200 .arg(&url) .status() .expect("failed to spawn curl"); - if status.success() { - ok = true; - break + + // Retry if download failed. + if !status.success() { + last_error = Some(status.to_string()); + continue; } + + // Ensure the hash is correct. + let mut shasum = if target.contains("apple") || build.build.contains("netbsd") { + let mut cmd = Command::new("shasum"); + cmd.arg("-a").arg("256"); + cmd + } else { + Command::new("sha256sum") + }; + let output = output(&mut shasum.arg(&tmp)); + let found = output.split_whitespace().next().unwrap(); + + // If the hash is wrong, probably the download is incomplete or S3 served an error + // page. In any case, retry. + if found != OPENSSL_SHA256 { + last_error = Some(format!( + "downloaded openssl sha256 different\n\ + expected: {}\n\ + found: {}\n", + OPENSSL_SHA256, + found + )); + continue; + } + + // Everything is fine, so exit the retry loop. + last_error = None; + break; } - if !ok { - panic!("failed to download openssl source") - } - let mut shasum = if target.contains("apple") || build.build.contains("netbsd") { - let mut cmd = Command::new("shasum"); - cmd.arg("-a").arg("256"); - cmd - } else { - Command::new("sha256sum") - }; - let output = output(&mut shasum.arg(&tmp)); - let found = output.split_whitespace().next().unwrap(); - if found != OPENSSL_SHA256 { - panic!("downloaded openssl sha256 different\n\ - expected: {}\n\ - found: {}\n", OPENSSL_SHA256, found); + if let Some(error) = last_error { + panic!("failed to download openssl source: {}", error); } t!(fs::rename(&tmp, &tarball)); } @@ -419,10 +446,12 @@ impl Step for Openssl { "powerpc64-unknown-linux-gnu" => "linux-ppc64", "powerpc64le-unknown-linux-gnu" => "linux-ppc64le", "s390x-unknown-linux-gnu" => "linux64-s390x", + "sparc64-unknown-linux-gnu" => "linux64-sparcv9", "sparc64-unknown-netbsd" => "BSD-sparc64", "x86_64-apple-darwin" => "darwin64-x86_64-cc", "x86_64-linux-android" => "linux-x86_64", "x86_64-unknown-freebsd" => "BSD-x86_64", + "x86_64-unknown-dragonfly" => "BSD-x86_64", "x86_64-unknown-linux-gnu" => "linux-x86_64", "x86_64-unknown-linux-musl" => "linux-x86_64", "x86_64-unknown-netbsd" => "BSD-x86_64", diff --git a/src/bootstrap/tool.rs b/src/bootstrap/tool.rs index a05e58e6a2..7175fed541 100644 --- a/src/bootstrap/tool.rs +++ b/src/bootstrap/tool.rs @@ -38,24 +38,40 @@ impl Step for CleanTools { run.never() } - /// Build a tool in `src/tools` - /// - /// This will build the specified tool with the specified `host` compiler in - /// `stage` into the normal cargo output directory. fn run(self, builder: &Builder) { let build = builder.build; let compiler = self.compiler; let target = self.target; let mode = self.mode; - let stamp = match mode { - Mode::Libstd => libstd_stamp(build, compiler, target), - Mode::Libtest => libtest_stamp(build, compiler, target), - Mode::Librustc => librustc_stamp(build, compiler, target), - _ => panic!(), + // This is for the original compiler, but if we're forced to use stage 1, then + // std/test/rustc stamps won't exist in stage 2, so we need to get those from stage 1, since + // we copy the libs forward. + let tools_dir = build.stage_out(compiler, Mode::Tool); + let compiler = if builder.force_use_stage1(compiler, target) { + builder.compiler(1, compiler.host) + } else { + compiler }; - let out_dir = build.cargo_out(compiler, Mode::Tool, target); - build.clear_if_dirty(&out_dir, &stamp); + + for &cur_mode in &[Mode::Libstd, Mode::Libtest, Mode::Librustc] { + let stamp = match cur_mode { + Mode::Libstd => libstd_stamp(build, compiler, target), + Mode::Libtest => libtest_stamp(build, compiler, target), + Mode::Librustc => librustc_stamp(build, compiler, target), + _ => panic!(), + }; + + if build.clear_if_dirty(&tools_dir, &stamp) { + break; + } + + // If we are a rustc tool, and std changed, we also need to clear ourselves out -- our + // dependencies depend on std. Therefore, we iterate up until our own mode. + if mode == cur_mode { + break; + } + } } } @@ -70,7 +86,7 @@ struct ToolBuild { } impl Step for ToolBuild { - type Output = PathBuf; + type Output = Option; fn should_run(run: ShouldRun) -> ShouldRun { run.never() @@ -80,7 +96,7 @@ impl Step for ToolBuild { /// /// This will build the specified tool with the specified `host` compiler in /// `stage` into the normal cargo output directory. - fn run(self, builder: &Builder) -> PathBuf { + fn run(self, builder: &Builder) -> Option { let build = builder.build; let compiler = self.compiler; let target = self.target; @@ -100,7 +116,15 @@ impl Step for ToolBuild { let mut cargo = prepare_tool_cargo(builder, compiler, target, "build", path); build.run_expecting(&mut cargo, expectation); - build.cargo_out(compiler, Mode::Tool, target).join(exe(tool, &compiler.host)) + if expectation == BuildExpectation::Succeeding || expectation == BuildExpectation::None { + let cargo_out = build.cargo_out(compiler, Mode::Tool, target) + .join(exe(tool, &compiler.host)); + let bin = build.tools_dir(compiler).join(exe(tool, &compiler.host)); + copy(&cargo_out, &bin); + Some(bin) + } else { + None + } } } @@ -169,12 +193,12 @@ macro_rules! tool { } pub fn tool_default_stage(&self, tool: Tool) -> u32 { - // Compile the error-index in the top stage as it depends on - // rustdoc, so we want to avoid recompiling rustdoc twice if we - // can. Otherwise compile everything else in stage0 as there's - // no need to rebootstrap everything + // Compile the error-index in the same stage as rustdoc to avoid + // recompiling rustdoc twice if we can. Otherwise compile + // everything else in stage0 as there's no need to rebootstrap + // everything. match tool { - Tool::ErrorIndex => self.top_stage, + Tool::ErrorIndex if self.top_stage >= 2 => self.top_stage, _ => 0, } } @@ -209,7 +233,7 @@ macro_rules! tool { mode: $mode, path: $path, expectation: BuildExpectation::None, - }) + }).expect("expected to build -- BuildExpectation::None") } } )+ @@ -257,7 +281,7 @@ impl Step for RemoteTestServer { mode: Mode::Libstd, path: "src/tools/remote-test-server", expectation: BuildExpectation::None, - }) + }).expect("expected to build -- BuildExpectation::None") } } @@ -375,7 +399,7 @@ impl Step for Cargo { mode: Mode::Librustc, path: "src/tools/cargo", expectation: BuildExpectation::None, - }) + }).expect("BuildExpectation::None - expected to build") } } @@ -386,12 +410,13 @@ pub struct Clippy { } impl Step for Clippy { - type Output = PathBuf; - const DEFAULT: bool = false; + type Output = Option; + const DEFAULT: bool = true; const ONLY_HOSTS: bool = true; fn should_run(run: ShouldRun) -> ShouldRun { - run.path("src/tools/clippy") + let builder = run.builder; + run.path("src/tools/clippy").default_condition(builder.build.config.extended) } fn make_run(run: RunConfig) { @@ -401,7 +426,7 @@ impl Step for Clippy { }); } - fn run(self, builder: &Builder) -> PathBuf { + fn run(self, builder: &Builder) -> Option { // Clippy depends on procedural macros (serde), which requires a full host // compiler to be available, so we need to depend on that. builder.ensure(compile::Rustc { @@ -411,7 +436,7 @@ impl Step for Clippy { builder.ensure(ToolBuild { compiler: self.compiler, target: self.target, - tool: "clippy", + tool: "clippy-driver", mode: Mode::Librustc, path: "src/tools/clippy", expectation: builder.build.config.toolstate.clippy.passes(ToolState::Compiling), @@ -426,7 +451,7 @@ pub struct Rls { } impl Step for Rls { - type Output = PathBuf; + type Output = Option; const DEFAULT: bool = true; const ONLY_HOSTS: bool = true; @@ -442,7 +467,7 @@ impl Step for Rls { }); } - fn run(self, builder: &Builder) -> PathBuf { + fn run(self, builder: &Builder) -> Option { builder.ensure(native::Openssl { target: self.target, }); @@ -470,7 +495,7 @@ pub struct Rustfmt { } impl Step for Rustfmt { - type Output = PathBuf; + type Output = Option; const DEFAULT: bool = true; const ONLY_HOSTS: bool = true; @@ -486,7 +511,7 @@ impl Step for Rustfmt { }); } - fn run(self, builder: &Builder) -> PathBuf { + fn run(self, builder: &Builder) -> Option { builder.ensure(ToolBuild { compiler: self.compiler, target: self.target, @@ -506,7 +531,7 @@ pub struct Miri { } impl Step for Miri { - type Output = PathBuf; + type Output = Option; const DEFAULT: bool = true; const ONLY_HOSTS: bool = true; @@ -522,7 +547,7 @@ impl Step for Miri { }); } - fn run(self, builder: &Builder) -> PathBuf { + fn run(self, builder: &Builder) -> Option { builder.ensure(ToolBuild { compiler: self.compiler, target: self.target, @@ -561,7 +586,7 @@ impl<'a> Builder<'a> { if compiler.host.contains("msvc") { let curpaths = env::var_os("PATH").unwrap_or_default(); let curpaths = env::split_paths(&curpaths).collect::>(); - for &(ref k, ref v) in self.cc[&compiler.host].0.env() { + for &(ref k, ref v) in self.cc[&compiler.host].env() { if k != "PATH" { continue } diff --git a/src/bootstrap/toolstate.rs b/src/bootstrap/toolstate.rs index 8a113f6b4d..328cbf0e5d 100644 --- a/src/bootstrap/toolstate.rs +++ b/src/bootstrap/toolstate.rs @@ -31,6 +31,13 @@ impl ToolState { BuildExpectation::Failing } } + + pub fn testing(&self) -> bool { + match *self { + ToolState::Testing => true, + _ => false, + } + } } impl Default for ToolState { diff --git a/src/bootstrap/util.rs b/src/bootstrap/util.rs index a521dd0945..2506048858 100644 --- a/src/bootstrap/util.rs +++ b/src/bootstrap/util.rs @@ -14,8 +14,9 @@ //! not a lot of interesting happenings here unfortunately. use std::env; -use std::fs; -use std::io::{self, Write}; +use std::str; +use std::fs::{self, File}; +use std::io::{self, Read, Write}; use std::path::{Path, PathBuf}; use std::process::Command; use std::time::{SystemTime, Instant}; @@ -50,6 +51,22 @@ pub fn copy(src: &Path, dst: &Path) { t!(filetime::set_file_times(dst, atime, mtime)); } +pub fn read_stamp_file(stamp: &Path) -> Vec { + let mut paths = Vec::new(); + let mut contents = Vec::new(); + t!(t!(File::open(stamp)).read_to_end(&mut contents)); + // This is the method we use for extracting paths from the stamp file passed to us. See + // run_cargo for more information (in compile.rs). + for part in contents.split(|b| *b == 0) { + if part.is_empty() { + continue + } + let path = PathBuf::from(t!(str::from_utf8(part))); + paths.push(path); + } + paths +} + /// Copies the `src` directory recursively to `dst`. Both are assumed to exist /// when this function is called. pub fn cp_r(src: &Path, dst: &Path) { diff --git a/src/build_helper/lib.rs b/src/build_helper/lib.rs index e81dab70b4..97723e260f 100644 --- a/src/build_helper/lib.rs +++ b/src/build_helper/lib.rs @@ -138,27 +138,6 @@ pub fn gnu_target(target: &str) -> String { } } -pub fn cc2ar(cc: &Path, target: &str) -> Option { - if target.contains("msvc") { - None - } else if target.contains("musl") { - Some(PathBuf::from("ar")) - } else if target.contains("openbsd") { - Some(PathBuf::from("ar")) - } else { - let parent = cc.parent().unwrap(); - let file = cc.file_name().unwrap().to_str().unwrap(); - for suffix in &["gcc", "cc", "clang"] { - if let Some(idx) = file.rfind(suffix) { - let mut file = file[..idx].to_owned(); - file.push_str("ar"); - return Some(parent.join(&file)); - } - } - Some(parent.join(file)) - } -} - pub fn make(host: &str) -> PathBuf { if host.contains("bitrig") || host.contains("dragonfly") || host.contains("freebsd") || host.contains("netbsd") || diff --git a/src/ci/docker/README.md b/src/ci/docker/README.md index adce6a00d4..922deba736 100644 --- a/src/ci/docker/README.md +++ b/src/ci/docker/README.md @@ -22,6 +22,48 @@ Images will output artifacts in an `obj` dir at the root of a repository. - `scripts` contains files shared by docker images - `disabled` contains images that are not built on travis +## Docker Toolbox on Windows + +For Windows before Windows 10, the docker images can be run on Windows via +[Docker Toolbox]. There are several preparation needs to be made before running +a Docker image. + +1. Stop the virtual machine from the terminal with `docker-machine stop` + +2. If your Rust source is placed outside of `C:\Users\**`, e.g. if you place the + repository in the `E:\rust` folder, please add a shared folder from + VirtualBox by: + + 1. Select the "default" virtual machine inside VirtualBox, then click + "Settings" + 2. Go to "Shared Folders", click "Add shared foldrer" (the folder icon with + a plus sign), fill in the following information, then click "OK": + + * Folder path: `E:\rust` + * Folder name: `e/rust` + * Read-only: ☐ *unchecked* + * Auto-mount: ☑ *checked* + * Make Permanant: ☑ *checked* + +3. VirtualBox might not support creating symbolic links inside a shared folder + by default. You can enable it manually by running these from `cmd.exe`: + + ```bat + cd "C:\Program Files\Oracle\VirtualBox" + VBoxManage setextradata default VBoxInternal2/SharedFoldersEnableSymlinksCreate/e/rust 1 + :: ^~~~~~ + :: folder name + ``` + +4. Restart the virtual machine from terminal with `docker-machine start`. + +To run the image, + +1. Launch the "Docker Quickstart Terminal". +2. Execute `./src/ci/docker/run.sh $image_name` as explained at the beginning. + +[Docker Toolbox]: https://www.docker.com/products/docker-toolbox + ## Cross toolchains A number of these images take quite a long time to compile as they're building @@ -137,7 +179,7 @@ For targets: `armv7-unknown-linux-gnueabihf` libraries like jemalloc. See the mk/cfg/arm(v7)-uknown-linux-gnueabi{,hf}.mk file in Rust's source code. -## `aarch64-linux-gnu.config` +### `aarch64-linux-gnu.config` For targets: `aarch64-unknown-linux-gnu` @@ -150,7 +192,7 @@ For targets: `aarch64-unknown-linux-gnu` - C compiler > gcc version = 5.2.0 - C compiler > C++ = ENABLE -- to cross compile LLVM -## `powerpc-linux-gnu.config` +### `powerpc-linux-gnu.config` For targets: `powerpc-unknown-linux-gnu` @@ -165,7 +207,7 @@ For targets: `powerpc-unknown-linux-gnu` - C compiler > gcc version = 4.9.3 - C compiler > C++ = ENABLE -- to cross compile LLVM -## `powerpc64-linux-gnu.config` +### `powerpc64-linux-gnu.config` For targets: `powerpc64-unknown-linux-gnu` @@ -184,7 +226,7 @@ For targets: `powerpc64-unknown-linux-gnu` (+) These CPU options match the configuration of the toolchains in RHEL6. -## `s390x-linux-gnu.config` +### `s390x-linux-gnu.config` For targets: `s390x-unknown-linux-gnu` diff --git a/src/ci/docker/asmjs/Dockerfile b/src/ci/docker/asmjs/Dockerfile index 28caf1fb57..07849a20d0 100644 --- a/src/ci/docker/asmjs/Dockerfile +++ b/src/ci/docker/asmjs/Dockerfile @@ -16,6 +16,9 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ COPY scripts/emscripten.sh /scripts/ RUN bash /scripts/emscripten.sh +COPY scripts/sccache.sh /scripts/ +RUN sh /scripts/sccache.sh + ENV PATH=$PATH:/emsdk-portable ENV PATH=$PATH:/emsdk-portable/clang/e1.37.13_64bit/ ENV PATH=$PATH:/emsdk-portable/emscripten/1.37.13/ @@ -29,6 +32,3 @@ ENV TARGETS=asmjs-unknown-emscripten ENV RUST_CONFIGURE_ARGS --target=$TARGETS ENV SCRIPT python2.7 ../x.py test --target $TARGETS - -COPY scripts/sccache.sh /scripts/ -RUN sh /scripts/sccache.sh diff --git a/src/ci/docker/cross/build-arm-musl.sh b/src/ci/docker/cross/build-arm-musl.sh index 780099e2ec..f9444a35a8 100755 --- a/src/ci/docker/cross/build-arm-musl.sh +++ b/src/ci/docker/cross/build-arm-musl.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. @@ -11,7 +11,7 @@ set -ex -MUSL=1.1.16 +MUSL=1.1.17 hide_output() { set +x diff --git a/src/ci/docker/cross/build-rumprun.sh b/src/ci/docker/cross/build-rumprun.sh index 59b1c9b641..ad38cf872a 100755 --- a/src/ci/docker/cross/build-rumprun.sh +++ b/src/ci/docker/cross/build-rumprun.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/cross/install-x86_64-redox.sh b/src/ci/docker/cross/install-x86_64-redox.sh index 8e052c4acd..9bfb57f574 100755 --- a/src/ci/docker/cross/install-x86_64-redox.sh +++ b/src/ci/docker/cross/install-x86_64-redox.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/cross2/Dockerfile b/src/ci/docker/cross2/Dockerfile index 029d2c18d4..cc260382f4 100644 --- a/src/ci/docker/cross2/Dockerfile +++ b/src/ci/docker/cross2/Dockerfile @@ -5,6 +5,7 @@ RUN sh /scripts/cross-apt-packages.sh RUN apt-get build-dep -y clang llvm && apt-get install -y --no-install-recommends \ build-essential \ + gcc-multilib \ libedit-dev \ libgmp-dev \ libisl-dev \ @@ -47,6 +48,7 @@ ENV TARGETS=x86_64-unknown-fuchsia ENV TARGETS=$TARGETS,aarch64-unknown-fuchsia ENV TARGETS=$TARGETS,sparcv9-sun-solaris ENV TARGETS=$TARGETS,x86_64-sun-solaris +ENV TARGETS=$TARGETS,x86_64-unknown-linux-gnux32 ENV RUST_CONFIGURE_ARGS --target=$TARGETS --enable-extended ENV SCRIPT python2.7 ../x.py dist --target $TARGETS diff --git a/src/ci/docker/cross2/build-fuchsia-toolchain.sh b/src/ci/docker/cross2/build-fuchsia-toolchain.sh index 756013a235..ef8f0c37f8 100755 --- a/src/ci/docker/cross2/build-fuchsia-toolchain.sh +++ b/src/ci/docker/cross2/build-fuchsia-toolchain.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/cross2/build-solaris-toolchain.sh b/src/ci/docker/cross2/build-solaris-toolchain.sh index 71ab998aab..c04c8b7194 100755 --- a/src/ci/docker/cross2/build-solaris-toolchain.sh +++ b/src/ci/docker/cross2/build-solaris-toolchain.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2016 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/disabled/dist-x86_64-dragonfly/Dockerfile b/src/ci/docker/disabled/dist-x86_64-dragonfly/Dockerfile new file mode 100644 index 0000000000..f3509efdb9 --- /dev/null +++ b/src/ci/docker/disabled/dist-x86_64-dragonfly/Dockerfile @@ -0,0 +1,36 @@ +FROM ubuntu:16.04 + +RUN apt-get update && apt-get install -y --no-install-recommends \ + g++ \ + make \ + file \ + curl \ + ca-certificates \ + python2.7 \ + git \ + cmake \ + sudo \ + bzip2 \ + xz-utils \ + wget \ + libssl-dev \ + bsdtar \ + pkg-config + + +COPY dist-x86_64-dragonfly/build-toolchain.sh /tmp/ +COPY dist-x86_64-dragonfly/patch-toolchain /tmp/ +RUN /tmp/build-toolchain.sh /tmp/patch-toolchain + +COPY scripts/sccache.sh /scripts/ +RUN sh /scripts/sccache.sh + +ENV \ + AR_x86_64_unknown_dragonfly=x86_64-unknown-dragonfly-ar \ + CC_x86_64_unknown_dragonfly=x86_64-unknown-dragonfly-gcc \ + CXX_x86_64_unknown_dragonfly=x86_64-unknown-dragonfly-g++ + +ENV HOSTS=x86_64-unknown-dragonfly + +ENV RUST_CONFIGURE_ARGS --host=$HOSTS --enable-extended +ENV SCRIPT python2.7 ../x.py dist --host $HOSTS --target $HOSTS diff --git a/src/ci/docker/disabled/dist-x86_64-dragonfly/build-toolchain.sh b/src/ci/docker/disabled/dist-x86_64-dragonfly/build-toolchain.sh new file mode 100755 index 0000000000..2ebbe0cdee --- /dev/null +++ b/src/ci/docker/disabled/dist-x86_64-dragonfly/build-toolchain.sh @@ -0,0 +1,120 @@ +#!/usr/bin/env bash +# Copyright 2016 The Rust Project Developers. See the COPYRIGHT +# file at the top-level directory of this distribution and at +# http://rust-lang.org/COPYRIGHT. +# +# Licensed under the Apache License, Version 2.0 or the MIT license +# , at your +# option. This file may not be copied, modified, or distributed +# except according to those terms. + +set -ex + +ARCH=x86_64 +PATCH_TOOLCHAIN=$1 +BINUTILS=2.25.1 +GCC=6.4.0 + +hide_output() { + set +x + on_err=" +echo ERROR: An error was encountered with the build. +cat /tmp/build.log +exit 1 +" + trap "$on_err" ERR + bash -c "while true; do sleep 30; echo \$(date) - building ...; done" & + PING_LOOP_PID=$! + $@ &> /tmp/build.log + trap - ERR + kill $PING_LOOP_PID + set -x +} + +mkdir binutils +cd binutils + +# First up, build binutils +curl https://ftp.gnu.org/gnu/binutils/binutils-$BINUTILS.tar.bz2 | tar xjf - +mkdir binutils-build +cd binutils-build +hide_output ../binutils-$BINUTILS/configure \ + --target=$ARCH-unknown-dragonfly +hide_output make -j10 +hide_output make install +cd ../.. +rm -rf binutils + +# Next, download the DragonFly libc and relevant header files + +URL=http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.0.0_REL.iso.bz2 +mkdir dragonfly +curl $URL | bzcat | bsdtar xf - -C dragonfly ./usr/include ./usr/lib ./lib + +dst=/usr/local/$ARCH-unknown-dragonfly + +mkdir -p $dst/lib +cp -r dragonfly/usr/include $dst/ +cp dragonfly/usr/lib/crt1.o $dst/lib +cp dragonfly/usr/lib/Scrt1.o $dst/lib +cp dragonfly/usr/lib/crti.o $dst/lib +cp dragonfly/usr/lib/crtn.o $dst/lib +cp dragonfly/usr/lib/libc.a $dst/lib +cp dragonfly/usr/lib/libutil.a $dst/lib +cp dragonfly/usr/lib/libm.a $dst/lib +cp dragonfly/usr/lib/librt.so.0 $dst/lib +cp dragonfly/usr/lib/libexecinfo.so.1 $dst/lib +cp dragonfly/lib/libc.so.8 $dst/lib +cp dragonfly/lib/libm.so.4 $dst/lib +cp dragonfly/lib/libutil.so.4 $dst/lib +cp dragonfly/usr/lib/libpthread.so $dst/lib/libpthread.so +cp dragonfly/usr/lib/thread/libthread_xu.so.2 $dst/lib/libpthread.so.0 + +ln -s libc.so.8 $dst/lib/libc.so +ln -s libm.so.4 $dst/lib/libm.so +ln -s librt.so.0 $dst/lib/librt.so +ln -s libutil.so.4 $dst/lib/libutil.so +ln -s libexecinfo.so.1 $dst/lib/libexecinfo.so +rm -rf dragonfly + +# Finally, download and build gcc to target DragonFly +mkdir gcc +cd gcc +curl https://ftp.gnu.org/gnu/gcc/gcc-$GCC/gcc-$GCC.tar.gz | tar xzf - +cd gcc-$GCC + +# The following three patches are taken from DragonFly's dports collection: +# https://github.com/DragonFlyBSD/DPorts/tree/master/lang/gcc5 +# The dports specification for gcc5 contains a few more patches, but they are +# not relevant in this situation, as they are for a language we don't need +# (e.g. java), or a platform which is not supported by DragonFly (e.g. i386, +# powerpc64, ia64, arm). +# +# These patches probably only need to be updated in case the gcc version is +# updated. + +patch -p0 < $PATCH_TOOLCHAIN + +./contrib/download_prerequisites + +mkdir ../gcc-build +cd ../gcc-build +hide_output ../gcc-$GCC/configure \ + --enable-languages=c,c++ \ + --target=$ARCH-unknown-dragonfly \ + --disable-multilib \ + --disable-nls \ + --disable-libgomp \ + --disable-libquadmath \ + --disable-libssp \ + --disable-libvtv \ + --disable-libcilkrts \ + --disable-libada \ + --disable-libsanitizer \ + --disable-libquadmath-support \ + --disable-lto +hide_output make -j10 +hide_output make install +cd ../.. +rm -rf gcc diff --git a/src/ci/docker/disabled/dist-x86_64-dragonfly/patch-toolchain b/src/ci/docker/disabled/dist-x86_64-dragonfly/patch-toolchain new file mode 100644 index 0000000000..98424309ee --- /dev/null +++ b/src/ci/docker/disabled/dist-x86_64-dragonfly/patch-toolchain @@ -0,0 +1,23 @@ +--- libstdc++-v3/config/os/bsd/dragonfly/os_defines.h.orig 2015-07-09 16:08:54 UTC ++++ libstdc++-v3/config/os/bsd/dragonfly/os_defines.h +@@ -29,4 +29,9 @@ + // System-specific #define, typedefs, corrections, etc, go here. This + // file will come before all others. + ++#define _GLIBCXX_USE_C99_CHECK 1 ++#define _GLIBCXX_USE_C99_DYNAMIC (!(__ISO_C_VISIBLE >= 1999)) ++#define _GLIBCXX_USE_C99_LONG_LONG_CHECK 1 ++#define _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC (_GLIBCXX_USE_C99_DYNAMIC || !defined __LONG_LONG_SUPPORTED) ++ + #endif +--- libstdc++-v3/configure.orig 2016-05-26 18:34:47.163132921 +0200 ++++ libstdc++-v3/configure 2016-05-26 18:35:29.594590648 +0200 +@@ -52013,7 +52013,7 @@ + + ;; + +- *-freebsd*) ++ *-freebsd* | *-dragonfly*) + SECTION_FLAGS='-ffunction-sections -fdata-sections' + + diff --git a/src/ci/docker/disabled/dist-x86_64-haiku/build-toolchain.sh b/src/ci/docker/disabled/dist-x86_64-haiku/build-toolchain.sh index 0776d44898..a1115e254b 100755 --- a/src/ci/docker/disabled/dist-x86_64-haiku/build-toolchain.sh +++ b/src/ci/docker/disabled/dist-x86_64-haiku/build-toolchain.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/disabled/dist-x86_64-haiku/fetch-packages.sh b/src/ci/docker/disabled/dist-x86_64-haiku/fetch-packages.sh index 0f6034cdb8..a37532e203 100755 --- a/src/ci/docker/disabled/dist-x86_64-haiku/fetch-packages.sh +++ b/src/ci/docker/disabled/dist-x86_64-haiku/fetch-packages.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/disabled/wasm32-exp/node.sh b/src/ci/docker/disabled/wasm32-exp/node.sh index dfa7f221ff..2bfddb0de9 100755 --- a/src/ci/docker/disabled/wasm32-exp/node.sh +++ b/src/ci/docker/disabled/wasm32-exp/node.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-aarch64-linux/build-toolchains.sh b/src/ci/docker/dist-aarch64-linux/build-toolchains.sh index 94f785c96f..22b719bb30 100755 --- a/src/ci/docker/dist-aarch64-linux/build-toolchains.sh +++ b/src/ci/docker/dist-aarch64-linux/build-toolchains.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-arm-linux/build-toolchains.sh b/src/ci/docker/dist-arm-linux/build-toolchains.sh index f78ecf9381..c53cca0bb9 100755 --- a/src/ci/docker/dist-arm-linux/build-toolchains.sh +++ b/src/ci/docker/dist-arm-linux/build-toolchains.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-armhf-linux/build-toolchains.sh b/src/ci/docker/dist-armhf-linux/build-toolchains.sh index df1134d548..964182a5ad 100755 --- a/src/ci/docker/dist-armhf-linux/build-toolchains.sh +++ b/src/ci/docker/dist-armhf-linux/build-toolchains.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-armv7-linux/build-toolchains.sh b/src/ci/docker/dist-armv7-linux/build-toolchains.sh index 2d395fee79..40adfe5d53 100755 --- a/src/ci/docker/dist-armv7-linux/build-toolchains.sh +++ b/src/ci/docker/dist-armv7-linux/build-toolchains.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-i586-gnu-i686-musl/Dockerfile b/src/ci/docker/dist-i586-gnu-i686-musl/Dockerfile index efde3ff529..2fb1219681 100644 --- a/src/ci/docker/dist-i586-gnu-i686-musl/Dockerfile +++ b/src/ci/docker/dist-i586-gnu-i686-musl/Dockerfile @@ -34,6 +34,7 @@ ENV RUST_CONFIGURE_ARGS \ # # See: https://github.com/rust-lang/rust/issues/34978 ENV CFLAGS_i686_unknown_linux_musl=-Wa,-mrelax-relocations=no +ENV CFLAGS_i586_unknown_linux_gnu=-Wa,-mrelax-relocations=no ENV SCRIPT \ python2.7 ../x.py test \ diff --git a/src/ci/docker/dist-i586-gnu-i686-musl/build-musl.sh b/src/ci/docker/dist-i586-gnu-i686-musl/build-musl.sh index ad285a57a8..883859d1fa 100644 --- a/src/ci/docker/dist-i586-gnu-i686-musl/build-musl.sh +++ b/src/ci/docker/dist-i586-gnu-i686-musl/build-musl.sh @@ -15,7 +15,7 @@ set -ex export CFLAGS="-fPIC -Wa,-mrelax-relocations=no" export CXXFLAGS="-Wa,-mrelax-relocations=no" -MUSL=musl-1.1.16 +MUSL=musl-1.1.17 curl https://www.musl-libc.org/releases/$MUSL.tar.gz | tar xzf - cd $MUSL CC=gcc \ diff --git a/src/ci/docker/dist-i686-freebsd/build-toolchain.sh b/src/ci/docker/dist-i686-freebsd/build-toolchain.sh index 8343327c33..3c86a8e381 100755 --- a/src/ci/docker/dist-i686-freebsd/build-toolchain.sh +++ b/src/ci/docker/dist-i686-freebsd/build-toolchain.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2016 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-i686-linux/build-binutils.sh b/src/ci/docker/dist-i686-linux/build-binutils.sh index 80aa1f2a01..f4bdbd80d0 100755 --- a/src/ci/docker/dist-i686-linux/build-binutils.sh +++ b/src/ci/docker/dist-i686-linux/build-binutils.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-i686-linux/build-cmake.sh b/src/ci/docker/dist-i686-linux/build-cmake.sh index 82e46455cb..9a3763d421 100755 --- a/src/ci/docker/dist-i686-linux/build-cmake.sh +++ b/src/ci/docker/dist-i686-linux/build-cmake.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-i686-linux/build-curl.sh b/src/ci/docker/dist-i686-linux/build-curl.sh index b7d22755a5..edf3175b81 100755 --- a/src/ci/docker/dist-i686-linux/build-curl.sh +++ b/src/ci/docker/dist-i686-linux/build-curl.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-i686-linux/build-gcc.sh b/src/ci/docker/dist-i686-linux/build-gcc.sh index ab2562538d..6b991bb59e 100755 --- a/src/ci/docker/dist-i686-linux/build-gcc.sh +++ b/src/ci/docker/dist-i686-linux/build-gcc.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-i686-linux/build-git.sh b/src/ci/docker/dist-i686-linux/build-git.sh index 92fa66b496..ff62a68629 100755 --- a/src/ci/docker/dist-i686-linux/build-git.sh +++ b/src/ci/docker/dist-i686-linux/build-git.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-i686-linux/build-headers.sh b/src/ci/docker/dist-i686-linux/build-headers.sh index 4ce38fd920..2f15114d6f 100755 --- a/src/ci/docker/dist-i686-linux/build-headers.sh +++ b/src/ci/docker/dist-i686-linux/build-headers.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-i686-linux/build-openssl.sh b/src/ci/docker/dist-i686-linux/build-openssl.sh index 34da0ed631..e7226ace02 100755 --- a/src/ci/docker/dist-i686-linux/build-openssl.sh +++ b/src/ci/docker/dist-i686-linux/build-openssl.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-i686-linux/build-python.sh b/src/ci/docker/dist-i686-linux/build-python.sh index a7a450f3c8..c6b8cdde4b 100755 --- a/src/ci/docker/dist-i686-linux/build-python.sh +++ b/src/ci/docker/dist-i686-linux/build-python.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-powerpc-linux/build-powerpc-toolchain.sh b/src/ci/docker/dist-powerpc-linux/build-powerpc-toolchain.sh index 90a4df0c19..15211acb44 100755 --- a/src/ci/docker/dist-powerpc-linux/build-powerpc-toolchain.sh +++ b/src/ci/docker/dist-powerpc-linux/build-powerpc-toolchain.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-powerpc64-linux/build-powerpc64-toolchain.sh b/src/ci/docker/dist-powerpc64-linux/build-powerpc64-toolchain.sh index c477cd61f9..ac6460a472 100755 --- a/src/ci/docker/dist-powerpc64-linux/build-powerpc64-toolchain.sh +++ b/src/ci/docker/dist-powerpc64-linux/build-powerpc64-toolchain.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-powerpc64le-linux/build-powerpc64le-toolchain.sh b/src/ci/docker/dist-powerpc64le-linux/build-powerpc64le-toolchain.sh index 6690963056..2f6937afff 100755 --- a/src/ci/docker/dist-powerpc64le-linux/build-powerpc64le-toolchain.sh +++ b/src/ci/docker/dist-powerpc64le-linux/build-powerpc64le-toolchain.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. @@ -23,7 +23,7 @@ SYSROOT=/usr/local/$TARGET/sysroot mkdir -p $SYSROOT pushd $SYSROOT -centos_base=http://vault.centos.org/altarch/7.3.1611/os/ppc64le/Packages +centos_base=http://vault.centos.org/altarch/7.3.1611/os/ppc64le/Packages/ glibc_v=2.17-157.el7 kernel_v=3.10.0-514.el7 for package in glibc{,-devel,-headers}-$glibc_v kernel-headers-$kernel_v; do diff --git a/src/ci/docker/dist-s390x-linux/build-s390x-toolchain.sh b/src/ci/docker/dist-s390x-linux/build-s390x-toolchain.sh index b4995e20dc..306204dd0e 100755 --- a/src/ci/docker/dist-s390x-linux/build-s390x-toolchain.sh +++ b/src/ci/docker/dist-s390x-linux/build-s390x-toolchain.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-x86_64-freebsd/build-toolchain.sh b/src/ci/docker/dist-x86_64-freebsd/build-toolchain.sh index 8343327c33..3c86a8e381 100755 --- a/src/ci/docker/dist-x86_64-freebsd/build-toolchain.sh +++ b/src/ci/docker/dist-x86_64-freebsd/build-toolchain.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2016 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-x86_64-linux/build-binutils.sh b/src/ci/docker/dist-x86_64-linux/build-binutils.sh index 80aa1f2a01..f4bdbd80d0 100755 --- a/src/ci/docker/dist-x86_64-linux/build-binutils.sh +++ b/src/ci/docker/dist-x86_64-linux/build-binutils.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-x86_64-linux/build-cmake.sh b/src/ci/docker/dist-x86_64-linux/build-cmake.sh index 82e46455cb..9a3763d421 100755 --- a/src/ci/docker/dist-x86_64-linux/build-cmake.sh +++ b/src/ci/docker/dist-x86_64-linux/build-cmake.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-x86_64-linux/build-curl.sh b/src/ci/docker/dist-x86_64-linux/build-curl.sh index b7d22755a5..edf3175b81 100755 --- a/src/ci/docker/dist-x86_64-linux/build-curl.sh +++ b/src/ci/docker/dist-x86_64-linux/build-curl.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-x86_64-linux/build-gcc.sh b/src/ci/docker/dist-x86_64-linux/build-gcc.sh index ab2562538d..6b991bb59e 100755 --- a/src/ci/docker/dist-x86_64-linux/build-gcc.sh +++ b/src/ci/docker/dist-x86_64-linux/build-gcc.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-x86_64-linux/build-git.sh b/src/ci/docker/dist-x86_64-linux/build-git.sh index 92fa66b496..ff62a68629 100755 --- a/src/ci/docker/dist-x86_64-linux/build-git.sh +++ b/src/ci/docker/dist-x86_64-linux/build-git.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-x86_64-linux/build-headers.sh b/src/ci/docker/dist-x86_64-linux/build-headers.sh index 4ce38fd920..2f15114d6f 100755 --- a/src/ci/docker/dist-x86_64-linux/build-headers.sh +++ b/src/ci/docker/dist-x86_64-linux/build-headers.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-x86_64-linux/build-openssl.sh b/src/ci/docker/dist-x86_64-linux/build-openssl.sh index 34da0ed631..e7226ace02 100755 --- a/src/ci/docker/dist-x86_64-linux/build-openssl.sh +++ b/src/ci/docker/dist-x86_64-linux/build-openssl.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-x86_64-linux/build-python.sh b/src/ci/docker/dist-x86_64-linux/build-python.sh index a7a450f3c8..c6b8cdde4b 100755 --- a/src/ci/docker/dist-x86_64-linux/build-python.sh +++ b/src/ci/docker/dist-x86_64-linux/build-python.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/docker/dist-x86_64-musl/build-musl.sh b/src/ci/docker/dist-x86_64-musl/build-musl.sh index 776da00939..9be8d00114 100644 --- a/src/ci/docker/dist-x86_64-musl/build-musl.sh +++ b/src/ci/docker/dist-x86_64-musl/build-musl.sh @@ -15,7 +15,7 @@ set -ex export CFLAGS="-fPIC -Wa,-mrelax-relocations=no" export CXXFLAGS="-Wa,-mrelax-relocations=no" -MUSL=musl-1.1.16 +MUSL=musl-1.1.17 curl https://www.musl-libc.org/releases/$MUSL.tar.gz | tar xzf - cd $MUSL ./configure --prefix=/musl-x86_64 --disable-shared diff --git a/src/ci/docker/dist-x86_64-netbsd/build-netbsd-toolchain.sh b/src/ci/docker/dist-x86_64-netbsd/build-netbsd-toolchain.sh index 54100b49cb..9e1b769f6c 100755 --- a/src/ci/docker/dist-x86_64-netbsd/build-netbsd-toolchain.sh +++ b/src/ci/docker/dist-x86_64-netbsd/build-netbsd-toolchain.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2016 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. @@ -64,12 +64,12 @@ cd ../.. rm -rf usr cat > /x-tools/x86_64-unknown-netbsd/bin/x86_64--netbsd-gcc-sysroot <<'EOF' -#!/bin/bash +#!/usr/bin/env bash exec /x-tools/x86_64-unknown-netbsd/bin/x86_64--netbsd-gcc --sysroot=/x-tools/x86_64-unknown-netbsd/sysroot "$@" EOF cat > /x-tools/x86_64-unknown-netbsd/bin/x86_64--netbsd-g++-sysroot <<'EOF' -#!/bin/bash +#!/usr/bin/env bash exec /x-tools/x86_64-unknown-netbsd/bin/x86_64--netbsd-g++ --sysroot=/x-tools/x86_64-unknown-netbsd/sysroot "$@" EOF diff --git a/src/ci/docker/run.sh b/src/ci/docker/run.sh index b2560c6b95..a863e1a2d5 100755 --- a/src/ci/docker/run.sh +++ b/src/ci/docker/run.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2016 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. @@ -11,6 +11,8 @@ set -e +export MSYS_NO_PATHCONV=1 + script=`cd $(dirname $0) && pwd`/`basename $0` image=$1 @@ -25,12 +27,19 @@ travis_fold start build_docker travis_time_start if [ -f "$docker_dir/$image/Dockerfile" ]; then + dockerfile="$docker_dir/$image/Dockerfile" + if [ -x /usr/bin/cygpath ]; then + context="`cygpath -w $docker_dir`" + dockerfile="`cygpath -w $dockerfile`" + else + context="$docker_dir" + fi retry docker \ build \ --rm \ -t rust-ci \ - -f "$docker_dir/$image/Dockerfile" \ - "$docker_dir" + -f "$dockerfile" \ + "$context" elif [ -f "$docker_dir/disabled/$image/Dockerfile" ]; then if [ -n "$TRAVIS_OS_NAME" ]; then echo Cannot run disabled images on travis! diff --git a/src/ci/docker/scripts/crosstool-ng.sh b/src/ci/docker/scripts/crosstool-ng.sh index 79a5bc3bb4..4cd25ffa27 100644 --- a/src/ci/docker/scripts/crosstool-ng.sh +++ b/src/ci/docker/scripts/crosstool-ng.sh @@ -10,11 +10,12 @@ set -ex -url="http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.22.0.tar.bz2" -curl -f $url | tar xjf - -cd crosstool-ng +url="https://github.com/crosstool-ng/crosstool-ng/archive/crosstool-ng-1.22.0.tar.gz" +curl -Lf $url | tar xzf - +cd crosstool-ng-crosstool-ng-1.22.0 +./bootstrap ./configure --prefix=/usr/local make -j$(nproc) make install cd .. -rm -rf crosstool-ng +rm -rf crosstool-ng-crosstool-ng-1.22.0 diff --git a/src/ci/docker/x86_64-gnu-cargotest/Dockerfile b/src/ci/docker/x86_64-gnu-cargotest/Dockerfile new file mode 100644 index 0000000000..a5326625bf --- /dev/null +++ b/src/ci/docker/x86_64-gnu-cargotest/Dockerfile @@ -0,0 +1,25 @@ +FROM ubuntu:16.04 + +RUN apt-get update && apt-get install -y --no-install-recommends \ + g++ \ + make \ + file \ + curl \ + ca-certificates \ + python2.7 \ + git \ + cmake \ + libssl-dev \ + sudo \ + xz-utils \ + pkg-config \ + libgl1-mesa-dev \ + llvm-dev \ + libfreetype6-dev \ + libexpat1-dev + +COPY scripts/sccache.sh /scripts/ +RUN sh /scripts/sccache.sh + +ENV RUST_CONFIGURE_ARGS --build=x86_64-unknown-linux-gnu +ENV SCRIPT python2.7 ../x.py test src/tools/cargotest diff --git a/src/ci/docker/x86_64-gnu-llvm-3.7/Dockerfile b/src/ci/docker/x86_64-gnu-llvm-3.7/Dockerfile deleted file mode 100644 index e832a2445b..0000000000 --- a/src/ci/docker/x86_64-gnu-llvm-3.7/Dockerfile +++ /dev/null @@ -1,25 +0,0 @@ -FROM ubuntu:16.04 - -RUN apt-get update && apt-get install -y --no-install-recommends \ - g++ \ - make \ - file \ - curl \ - ca-certificates \ - python2.7 \ - git \ - cmake \ - sudo \ - gdb \ - llvm-3.7-tools \ - libedit-dev \ - zlib1g-dev \ - xz-utils - -COPY scripts/sccache.sh /scripts/ -RUN sh /scripts/sccache.sh - -ENV RUST_CONFIGURE_ARGS \ - --build=x86_64-unknown-linux-gnu \ - --llvm-root=/usr/lib/llvm-3.7 -ENV RUST_CHECK_TARGET check diff --git a/src/ci/docker/x86_64-gnu-llvm-3.9/Dockerfile b/src/ci/docker/x86_64-gnu-llvm-3.9/Dockerfile new file mode 100644 index 0000000000..6b81860489 --- /dev/null +++ b/src/ci/docker/x86_64-gnu-llvm-3.9/Dockerfile @@ -0,0 +1,27 @@ +FROM ubuntu:16.04 + +RUN apt-get update && apt-get install -y --no-install-recommends \ + g++ \ + make \ + file \ + curl \ + ca-certificates \ + python2.7 \ + git \ + cmake \ + sudo \ + gdb \ + llvm-3.9-tools \ + libedit-dev \ + zlib1g-dev \ + xz-utils + +COPY scripts/sccache.sh /scripts/ +RUN sh /scripts/sccache.sh + +# using llvm-link-shared due to libffi issues -- see #34486 +ENV RUST_CONFIGURE_ARGS \ + --build=x86_64-unknown-linux-gnu \ + --llvm-root=/usr/lib/llvm-3.9 \ + --enable-llvm-link-shared +ENV RUST_CHECK_TARGET check diff --git a/src/ci/init_repo.sh b/src/ci/init_repo.sh index 7ffe00a807..e073a3d99c 100755 --- a/src/ci/init_repo.sh +++ b/src/ci/init_repo.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2016 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. diff --git a/src/ci/run.sh b/src/ci/run.sh index 20b9d0e063..3f3836d767 100755 --- a/src/ci/run.sh +++ b/src/ci/run.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright 2016 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. @@ -49,7 +49,7 @@ if [ "$DEPLOY$DEPLOY_ALT" != "" ]; then if [ "$NO_LLVM_ASSERTIONS" = "1" ]; then RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --disable-llvm-assertions" elif [ "$DEPLOY_ALT" != "" ]; then - RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --disable-llvm-assertions" + RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-llvm-assertions" fi else # We almost always want debug assertions enabled, but sometimes this takes too diff --git a/src/dlmalloc/Cargo.toml b/src/dlmalloc/Cargo.toml new file mode 100644 index 0000000000..df7cd4f26e --- /dev/null +++ b/src/dlmalloc/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "dlmalloc" +version = "0.1.0" +authors = ["Alex Crichton "] + +[lib] +doctest = false +test = false + +[target.'cfg(all(unix, not(target_arch = "wasm32")))'.dependencies] +libc = { version = "0.2", default-features = false } + +[dev-dependencies] +rand = "0.3" + +[profile.release] +opt-level = 'z' + +[features] +debug = [] diff --git a/src/vendor/bitflags-0.8.2/LICENSE-APACHE b/src/dlmalloc/LICENSE-APACHE similarity index 100% rename from src/vendor/bitflags-0.8.2/LICENSE-APACHE rename to src/dlmalloc/LICENSE-APACHE diff --git a/src/dlmalloc/LICENSE-MIT b/src/dlmalloc/LICENSE-MIT new file mode 100644 index 0000000000..39e0ed6602 --- /dev/null +++ b/src/dlmalloc/LICENSE-MIT @@ -0,0 +1,25 @@ +Copyright (c) 2014 Alex Crichton + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/src/dlmalloc/build.rs b/src/dlmalloc/build.rs new file mode 100644 index 0000000000..20aaa4f859 --- /dev/null +++ b/src/dlmalloc/build.rs @@ -0,0 +1,4 @@ +fn main() { + #[cfg(feature = "debug")] + println!("cargo:rustc-cfg=debug_assertions"); +} diff --git a/src/dlmalloc/src/dlmalloc.c b/src/dlmalloc/src/dlmalloc.c new file mode 100644 index 0000000000..649cfbc705 --- /dev/null +++ b/src/dlmalloc/src/dlmalloc.c @@ -0,0 +1,6280 @@ +/* + This is a version (aka dlmalloc) of malloc/free/realloc written by + Doug Lea and released to the public domain, as explained at + http://creativecommons.org/publicdomain/zero/1.0/ Send questions, + comments, complaints, performance data, etc to dl@cs.oswego.edu + +* Version 2.8.6 Wed Aug 29 06:57:58 2012 Doug Lea + Note: There may be an updated version of this malloc obtainable at + ftp://gee.cs.oswego.edu/pub/misc/malloc.c + Check before installing! + +* Quickstart + + This library is all in one file to simplify the most common usage: + ftp it, compile it (-O3), and link it into another program. All of + the compile-time options default to reasonable values for use on + most platforms. You might later want to step through various + compile-time and dynamic tuning options. + + For convenience, an include file for code using this malloc is at: + ftp://gee.cs.oswego.edu/pub/misc/malloc-2.8.6.h + You don't really need this .h file unless you call functions not + defined in your system include files. The .h file contains only the + excerpts from this file needed for using this malloc on ANSI C/C++ + systems, so long as you haven't changed compile-time options about + naming and tuning parameters. If you do, then you can create your + own malloc.h that does include all settings by cutting at the point + indicated below. Note that you may already by default be using a C + library containing a malloc that is based on some version of this + malloc (for example in linux). You might still want to use the one + in this file to customize settings or to avoid overheads associated + with library versions. + +* Vital statistics: + + Supported pointer/size_t representation: 4 or 8 bytes + size_t MUST be an unsigned type of the same width as + pointers. (If you are using an ancient system that declares + size_t as a signed type, or need it to be a different width + than pointers, you can use a previous release of this malloc + (e.g. 2.7.2) supporting these.) + + Alignment: 8 bytes (minimum) + This suffices for nearly all current machines and C compilers. + However, you can define MALLOC_ALIGNMENT to be wider than this + if necessary (up to 128bytes), at the expense of using more space. + + Minimum overhead per allocated chunk: 4 or 8 bytes (if 4byte sizes) + 8 or 16 bytes (if 8byte sizes) + Each malloced chunk has a hidden word of overhead holding size + and status information, and additional cross-check word + if FOOTERS is defined. + + Minimum allocated size: 4-byte ptrs: 16 bytes (including overhead) + 8-byte ptrs: 32 bytes (including overhead) + + Even a request for zero bytes (i.e., malloc(0)) returns a + pointer to something of the minimum allocatable size. + The maximum overhead wastage (i.e., number of extra bytes + allocated than were requested in malloc) is less than or equal + to the minimum size, except for requests >= mmap_threshold that + are serviced via mmap(), where the worst case wastage is about + 32 bytes plus the remainder from a system page (the minimal + mmap unit); typically 4096 or 8192 bytes. + + Security: static-safe; optionally more or less + The "security" of malloc refers to the ability of malicious + code to accentuate the effects of errors (for example, freeing + space that is not currently malloc'ed or overwriting past the + ends of chunks) in code that calls malloc. This malloc + guarantees not to modify any memory locations below the base of + heap, i.e., static variables, even in the presence of usage + errors. The routines additionally detect most improper frees + and reallocs. All this holds as long as the static bookkeeping + for malloc itself is not corrupted by some other means. This + is only one aspect of security -- these checks do not, and + cannot, detect all possible programming errors. + + If FOOTERS is defined nonzero, then each allocated chunk + carries an additional check word to verify that it was malloced + from its space. These check words are the same within each + execution of a program using malloc, but differ across + executions, so externally crafted fake chunks cannot be + freed. This improves security by rejecting frees/reallocs that + could corrupt heap memory, in addition to the checks preventing + writes to statics that are always on. This may further improve + security at the expense of time and space overhead. (Note that + FOOTERS may also be worth using with MSPACES.) + + By default detected errors cause the program to abort (calling + "abort()"). You can override this to instead proceed past + errors by defining PROCEED_ON_ERROR. In this case, a bad free + has no effect, and a malloc that encounters a bad address + caused by user overwrites will ignore the bad address by + dropping pointers and indices to all known memory. This may + be appropriate for programs that should continue if at all + possible in the face of programming errors, although they may + run out of memory because dropped memory is never reclaimed. + + If you don't like either of these options, you can define + CORRUPTION_ERROR_ACTION and USAGE_ERROR_ACTION to do anything + else. And if if you are sure that your program using malloc has + no errors or vulnerabilities, you can define INSECURE to 1, + which might (or might not) provide a small performance improvement. + + It is also possible to limit the maximum total allocatable + space, using malloc_set_footprint_limit. This is not + designed as a security feature in itself (calls to set limits + are not screened or privileged), but may be useful as one + aspect of a secure implementation. + + Thread-safety: NOT thread-safe unless USE_LOCKS defined non-zero + When USE_LOCKS is defined, each public call to malloc, free, + etc is surrounded with a lock. By default, this uses a plain + pthread mutex, win32 critical section, or a spin-lock if if + available for the platform and not disabled by setting + USE_SPIN_LOCKS=0. However, if USE_RECURSIVE_LOCKS is defined, + recursive versions are used instead (which are not required for + base functionality but may be needed in layered extensions). + Using a global lock is not especially fast, and can be a major + bottleneck. It is designed only to provide minimal protection + in concurrent environments, and to provide a basis for + extensions. If you are using malloc in a concurrent program, + consider instead using nedmalloc + (http://www.nedprod.com/programs/portable/nedmalloc/) or + ptmalloc (See http://www.malloc.de), which are derived from + versions of this malloc. + + System requirements: Any combination of MORECORE and/or MMAP/MUNMAP + This malloc can use unix sbrk or any emulation (invoked using + the CALL_MORECORE macro) and/or mmap/munmap or any emulation + (invoked using CALL_MMAP/CALL_MUNMAP) to get and release system + memory. On most unix systems, it tends to work best if both + MORECORE and MMAP are enabled. On Win32, it uses emulations + based on VirtualAlloc. It also uses common C library functions + like memset. + + Compliance: I believe it is compliant with the Single Unix Specification + (See http://www.unix.org). Also SVID/XPG, ANSI C, and probably + others as well. + +* Overview of algorithms + + This is not the fastest, most space-conserving, most portable, or + most tunable malloc ever written. However it is among the fastest + while also being among the most space-conserving, portable and + tunable. Consistent balance across these factors results in a good + general-purpose allocator for malloc-intensive programs. + + In most ways, this malloc is a best-fit allocator. Generally, it + chooses the best-fitting existing chunk for a request, with ties + broken in approximately least-recently-used order. (This strategy + normally maintains low fragmentation.) However, for requests less + than 256bytes, it deviates from best-fit when there is not an + exactly fitting available chunk by preferring to use space adjacent + to that used for the previous small request, as well as by breaking + ties in approximately most-recently-used order. (These enhance + locality of series of small allocations.) And for very large requests + (>= 256Kb by default), it relies on system memory mapping + facilities, if supported. (This helps avoid carrying around and + possibly fragmenting memory used only for large chunks.) + + All operations (except malloc_stats and mallinfo) have execution + times that are bounded by a constant factor of the number of bits in + a size_t, not counting any clearing in calloc or copying in realloc, + or actions surrounding MORECORE and MMAP that have times + proportional to the number of non-contiguous regions returned by + system allocation routines, which is often just 1. In real-time + applications, you can optionally suppress segment traversals using + NO_SEGMENT_TRAVERSAL, which assures bounded execution even when + system allocators return non-contiguous spaces, at the typical + expense of carrying around more memory and increased fragmentation. + + The implementation is not very modular and seriously overuses + macros. Perhaps someday all C compilers will do as good a job + inlining modular code as can now be done by brute-force expansion, + but now, enough of them seem not to. + + Some compilers issue a lot of warnings about code that is + dead/unreachable only on some platforms, and also about intentional + uses of negation on unsigned types. All known cases of each can be + ignored. + + For a longer but out of date high-level description, see + http://gee.cs.oswego.edu/dl/html/malloc.html + +* MSPACES + If MSPACES is defined, then in addition to malloc, free, etc., + this file also defines mspace_malloc, mspace_free, etc. These + are versions of malloc routines that take an "mspace" argument + obtained using create_mspace, to control all internal bookkeeping. + If ONLY_MSPACES is defined, only these versions are compiled. + So if you would like to use this allocator for only some allocations, + and your system malloc for others, you can compile with + ONLY_MSPACES and then do something like... + static mspace mymspace = create_mspace(0,0); // for example + #define mymalloc(bytes) mspace_malloc(mymspace, bytes) + + (Note: If you only need one instance of an mspace, you can instead + use "USE_DL_PREFIX" to relabel the global malloc.) + + You can similarly create thread-local allocators by storing + mspaces as thread-locals. For example: + static __thread mspace tlms = 0; + void* tlmalloc(size_t bytes) { + if (tlms == 0) tlms = create_mspace(0, 0); + return mspace_malloc(tlms, bytes); + } + void tlfree(void* mem) { mspace_free(tlms, mem); } + + Unless FOOTERS is defined, each mspace is completely independent. + You cannot allocate from one and free to another (although + conformance is only weakly checked, so usage errors are not always + caught). If FOOTERS is defined, then each chunk carries around a tag + indicating its originating mspace, and frees are directed to their + originating spaces. Normally, this requires use of locks. + + ------------------------- Compile-time options --------------------------- + +Be careful in setting #define values for numerical constants of type +size_t. On some systems, literal values are not automatically extended +to size_t precision unless they are explicitly casted. You can also +use the symbolic values MAX_SIZE_T, SIZE_T_ONE, etc below. + +WIN32 default: defined if _WIN32 defined + Defining WIN32 sets up defaults for MS environment and compilers. + Otherwise defaults are for unix. Beware that there seem to be some + cases where this malloc might not be a pure drop-in replacement for + Win32 malloc: Random-looking failures from Win32 GDI API's (eg; + SetDIBits()) may be due to bugs in some video driver implementations + when pixel buffers are malloc()ed, and the region spans more than + one VirtualAlloc()ed region. Because dlmalloc uses a small (64Kb) + default granularity, pixel buffers may straddle virtual allocation + regions more often than when using the Microsoft allocator. You can + avoid this by using VirtualAlloc() and VirtualFree() for all pixel + buffers rather than using malloc(). If this is not possible, + recompile this malloc with a larger DEFAULT_GRANULARITY. Note: + in cases where MSC and gcc (cygwin) are known to differ on WIN32, + conditions use _MSC_VER to distinguish them. + +DLMALLOC_EXPORT default: extern + Defines how public APIs are declared. If you want to export via a + Windows DLL, you might define this as + #define DLMALLOC_EXPORT extern __declspec(dllexport) + If you want a POSIX ELF shared object, you might use + #define DLMALLOC_EXPORT extern __attribute__((visibility("default"))) + +MALLOC_ALIGNMENT default: (size_t)(2 * sizeof(void *)) + Controls the minimum alignment for malloc'ed chunks. It must be a + power of two and at least 8, even on machines for which smaller + alignments would suffice. It may be defined as larger than this + though. Note however that code and data structures are optimized for + the case of 8-byte alignment. + +MSPACES default: 0 (false) + If true, compile in support for independent allocation spaces. + This is only supported if HAVE_MMAP is true. + +ONLY_MSPACES default: 0 (false) + If true, only compile in mspace versions, not regular versions. + +USE_LOCKS default: 0 (false) + Causes each call to each public routine to be surrounded with + pthread or WIN32 mutex lock/unlock. (If set true, this can be + overridden on a per-mspace basis for mspace versions.) If set to a + non-zero value other than 1, locks are used, but their + implementation is left out, so lock functions must be supplied manually, + as described below. + +USE_SPIN_LOCKS default: 1 iff USE_LOCKS and spin locks available + If true, uses custom spin locks for locking. This is currently + supported only gcc >= 4.1, older gccs on x86 platforms, and recent + MS compilers. Otherwise, posix locks or win32 critical sections are + used. + +USE_RECURSIVE_LOCKS default: not defined + If defined nonzero, uses recursive (aka reentrant) locks, otherwise + uses plain mutexes. This is not required for malloc proper, but may + be needed for layered allocators such as nedmalloc. + +LOCK_AT_FORK default: not defined + If defined nonzero, performs pthread_atfork upon initialization + to initialize child lock while holding parent lock. The implementation + assumes that pthread locks (not custom locks) are being used. In other + cases, you may need to customize the implementation. + +FOOTERS default: 0 + If true, provide extra checking and dispatching by placing + information in the footers of allocated chunks. This adds + space and time overhead. + +INSECURE default: 0 + If true, omit checks for usage errors and heap space overwrites. + +USE_DL_PREFIX default: NOT defined + Causes compiler to prefix all public routines with the string 'dl'. + This can be useful when you only want to use this malloc in one part + of a program, using your regular system malloc elsewhere. + +MALLOC_INSPECT_ALL default: NOT defined + If defined, compiles malloc_inspect_all and mspace_inspect_all, that + perform traversal of all heap space. Unless access to these + functions is otherwise restricted, you probably do not want to + include them in secure implementations. + +ABORT default: defined as abort() + Defines how to abort on failed checks. On most systems, a failed + check cannot die with an "assert" or even print an informative + message, because the underlying print routines in turn call malloc, + which will fail again. Generally, the best policy is to simply call + abort(). It's not very useful to do more than this because many + errors due to overwriting will show up as address faults (null, odd + addresses etc) rather than malloc-triggered checks, so will also + abort. Also, most compilers know that abort() does not return, so + can better optimize code conditionally calling it. + +PROCEED_ON_ERROR default: defined as 0 (false) + Controls whether detected bad addresses cause them to bypassed + rather than aborting. If set, detected bad arguments to free and + realloc are ignored. And all bookkeeping information is zeroed out + upon a detected overwrite of freed heap space, thus losing the + ability to ever return it from malloc again, but enabling the + application to proceed. If PROCEED_ON_ERROR is defined, the + static variable malloc_corruption_error_count is compiled in + and can be examined to see if errors have occurred. This option + generates slower code than the default abort policy. + +DEBUG default: NOT defined + The DEBUG setting is mainly intended for people trying to modify + this code or diagnose problems when porting to new platforms. + However, it may also be able to better isolate user errors than just + using runtime checks. The assertions in the check routines spell + out in more detail the assumptions and invariants underlying the + algorithms. The checking is fairly extensive, and will slow down + execution noticeably. Calling malloc_stats or mallinfo with DEBUG + set will attempt to check every non-mmapped allocated and free chunk + in the course of computing the summaries. + +ABORT_ON_ASSERT_FAILURE default: defined as 1 (true) + Debugging assertion failures can be nearly impossible if your + version of the assert macro causes malloc to be called, which will + lead to a cascade of further failures, blowing the runtime stack. + ABORT_ON_ASSERT_FAILURE cause assertions failures to call abort(), + which will usually make debugging easier. + +MALLOC_FAILURE_ACTION default: sets errno to ENOMEM, or no-op on win32 + The action to take before "return 0" when malloc fails to be able to + return memory because there is none available. + +HAVE_MORECORE default: 1 (true) unless win32 or ONLY_MSPACES + True if this system supports sbrk or an emulation of it. + +MORECORE default: sbrk + The name of the sbrk-style system routine to call to obtain more + memory. See below for guidance on writing custom MORECORE + functions. The type of the argument to sbrk/MORECORE varies across + systems. It cannot be size_t, because it supports negative + arguments, so it is normally the signed type of the same width as + size_t (sometimes declared as "intptr_t"). It doesn't much matter + though. Internally, we only call it with arguments less than half + the max value of a size_t, which should work across all reasonable + possibilities, although sometimes generating compiler warnings. + +MORECORE_CONTIGUOUS default: 1 (true) if HAVE_MORECORE + If true, take advantage of fact that consecutive calls to MORECORE + with positive arguments always return contiguous increasing + addresses. This is true of unix sbrk. It does not hurt too much to + set it true anyway, since malloc copes with non-contiguities. + Setting it false when definitely non-contiguous saves time + and possibly wasted space it would take to discover this though. + +MORECORE_CANNOT_TRIM default: NOT defined + True if MORECORE cannot release space back to the system when given + negative arguments. This is generally necessary only if you are + using a hand-crafted MORECORE function that cannot handle negative + arguments. + +NO_SEGMENT_TRAVERSAL default: 0 + If non-zero, suppresses traversals of memory segments + returned by either MORECORE or CALL_MMAP. This disables + merging of segments that are contiguous, and selectively + releasing them to the OS if unused, but bounds execution times. + +HAVE_MMAP default: 1 (true) + True if this system supports mmap or an emulation of it. If so, and + HAVE_MORECORE is not true, MMAP is used for all system + allocation. If set and HAVE_MORECORE is true as well, MMAP is + primarily used to directly allocate very large blocks. It is also + used as a backup strategy in cases where MORECORE fails to provide + space from system. Note: A single call to MUNMAP is assumed to be + able to unmap memory that may have be allocated using multiple calls + to MMAP, so long as they are adjacent. + +HAVE_MREMAP default: 1 on linux, else 0 + If true realloc() uses mremap() to re-allocate large blocks and + extend or shrink allocation spaces. + +MMAP_CLEARS default: 1 except on WINCE. + True if mmap clears memory so calloc doesn't need to. This is true + for standard unix mmap using /dev/zero and on WIN32 except for WINCE. + +USE_BUILTIN_FFS default: 0 (i.e., not used) + Causes malloc to use the builtin ffs() function to compute indices. + Some compilers may recognize and intrinsify ffs to be faster than the + supplied C version. Also, the case of x86 using gcc is special-cased + to an asm instruction, so is already as fast as it can be, and so + this setting has no effect. Similarly for Win32 under recent MS compilers. + (On most x86s, the asm version is only slightly faster than the C version.) + +malloc_getpagesize default: derive from system includes, or 4096. + The system page size. To the extent possible, this malloc manages + memory from the system in page-size units. This may be (and + usually is) a function rather than a constant. This is ignored + if WIN32, where page size is determined using getSystemInfo during + initialization. + +USE_DEV_RANDOM default: 0 (i.e., not used) + Causes malloc to use /dev/random to initialize secure magic seed for + stamping footers. Otherwise, the current time is used. + +NO_MALLINFO default: 0 + If defined, don't compile "mallinfo". This can be a simple way + of dealing with mismatches between system declarations and + those in this file. + +MALLINFO_FIELD_TYPE default: size_t + The type of the fields in the mallinfo struct. This was originally + defined as "int" in SVID etc, but is more usefully defined as + size_t. The value is used only if HAVE_USR_INCLUDE_MALLOC_H is not set + +NO_MALLOC_STATS default: 0 + If defined, don't compile "malloc_stats". This avoids calls to + fprintf and bringing in stdio dependencies you might not want. + +REALLOC_ZERO_BYTES_FREES default: not defined + This should be set if a call to realloc with zero bytes should + be the same as a call to free. Some people think it should. Otherwise, + since this malloc returns a unique pointer for malloc(0), so does + realloc(p, 0). + +LACKS_UNISTD_H, LACKS_FCNTL_H, LACKS_SYS_PARAM_H, LACKS_SYS_MMAN_H +LACKS_STRINGS_H, LACKS_STRING_H, LACKS_SYS_TYPES_H, LACKS_ERRNO_H +LACKS_STDLIB_H LACKS_SCHED_H LACKS_TIME_H default: NOT defined unless on WIN32 + Define these if your system does not have these header files. + You might need to manually insert some of the declarations they provide. + +DEFAULT_GRANULARITY default: page size if MORECORE_CONTIGUOUS, + system_info.dwAllocationGranularity in WIN32, + otherwise 64K. + Also settable using mallopt(M_GRANULARITY, x) + The unit for allocating and deallocating memory from the system. On + most systems with contiguous MORECORE, there is no reason to + make this more than a page. However, systems with MMAP tend to + either require or encourage larger granularities. You can increase + this value to prevent system allocation functions to be called so + often, especially if they are slow. The value must be at least one + page and must be a power of two. Setting to 0 causes initialization + to either page size or win32 region size. (Note: In previous + versions of malloc, the equivalent of this option was called + "TOP_PAD") + +DEFAULT_TRIM_THRESHOLD default: 2MB + Also settable using mallopt(M_TRIM_THRESHOLD, x) + The maximum amount of unused top-most memory to keep before + releasing via malloc_trim in free(). Automatic trimming is mainly + useful in long-lived programs using contiguous MORECORE. Because + trimming via sbrk can be slow on some systems, and can sometimes be + wasteful (in cases where programs immediately afterward allocate + more large chunks) the value should be high enough so that your + overall system performance would improve by releasing this much + memory. As a rough guide, you might set to a value close to the + average size of a process (program) running on your system. + Releasing this much memory would allow such a process to run in + memory. Generally, it is worth tuning trim thresholds when a + program undergoes phases where several large chunks are allocated + and released in ways that can reuse each other's storage, perhaps + mixed with phases where there are no such chunks at all. The trim + value must be greater than page size to have any useful effect. To + disable trimming completely, you can set to MAX_SIZE_T. Note that the trick + some people use of mallocing a huge space and then freeing it at + program startup, in an attempt to reserve system memory, doesn't + have the intended effect under automatic trimming, since that memory + will immediately be returned to the system. + +DEFAULT_MMAP_THRESHOLD default: 256K + Also settable using mallopt(M_MMAP_THRESHOLD, x) + The request size threshold for using MMAP to directly service a + request. Requests of at least this size that cannot be allocated + using already-existing space will be serviced via mmap. (If enough + normal freed space already exists it is used instead.) Using mmap + segregates relatively large chunks of memory so that they can be + individually obtained and released from the host system. A request + serviced through mmap is never reused by any other request (at least + not directly; the system may just so happen to remap successive + requests to the same locations). Segregating space in this way has + the benefits that: Mmapped space can always be individually released + back to the system, which helps keep the system level memory demands + of a long-lived program low. Also, mapped memory doesn't become + `locked' between other chunks, as can happen with normally allocated + chunks, which means that even trimming via malloc_trim would not + release them. However, it has the disadvantage that the space + cannot be reclaimed, consolidated, and then used to service later + requests, as happens with normal chunks. The advantages of mmap + nearly always outweigh disadvantages for "large" chunks, but the + value of "large" may vary across systems. The default is an + empirically derived value that works well in most systems. You can + disable mmap by setting to MAX_SIZE_T. + +MAX_RELEASE_CHECK_RATE default: 4095 unless not HAVE_MMAP + The number of consolidated frees between checks to release + unused segments when freeing. When using non-contiguous segments, + especially with multiple mspaces, checking only for topmost space + doesn't always suffice to trigger trimming. To compensate for this, + free() will, with a period of MAX_RELEASE_CHECK_RATE (or the + current number of segments, if greater) try to release unused + segments to the OS when freeing chunks that result in + consolidation. The best value for this parameter is a compromise + between slowing down frees with relatively costly checks that + rarely trigger versus holding on to unused memory. To effectively + disable, set to MAX_SIZE_T. This may lead to a very slight speed + improvement at the expense of carrying around more memory. +*/ + +/* Version identifier to allow people to support multiple versions */ +#ifndef DLMALLOC_VERSION +#define DLMALLOC_VERSION 20806 +#endif /* DLMALLOC_VERSION */ + +#ifndef DLMALLOC_EXPORT +#define DLMALLOC_EXPORT extern +#endif + +#ifndef WIN32 +#ifdef _WIN32 +#define WIN32 1 +#endif /* _WIN32 */ +#ifdef _WIN32_WCE +#define LACKS_FCNTL_H +#define WIN32 1 +#endif /* _WIN32_WCE */ +#endif /* WIN32 */ +#ifdef WIN32 +#define WIN32_LEAN_AND_MEAN +#include +#include +#define HAVE_MMAP 1 +#define HAVE_MORECORE 0 +#define LACKS_UNISTD_H +#define LACKS_SYS_PARAM_H +#define LACKS_SYS_MMAN_H +#define LACKS_STRING_H +#define LACKS_STRINGS_H +#define LACKS_SYS_TYPES_H +#define LACKS_ERRNO_H +#define LACKS_SCHED_H +#ifndef MALLOC_FAILURE_ACTION +#define MALLOC_FAILURE_ACTION +#endif /* MALLOC_FAILURE_ACTION */ +#ifndef MMAP_CLEARS +#ifdef _WIN32_WCE /* WINCE reportedly does not clear */ +#define MMAP_CLEARS 0 +#else +#define MMAP_CLEARS 1 +#endif /* _WIN32_WCE */ +#endif /*MMAP_CLEARS */ +#endif /* WIN32 */ + +#if defined(DARWIN) || defined(_DARWIN) +/* Mac OSX docs advise not to use sbrk; it seems better to use mmap */ +#ifndef HAVE_MORECORE +#define HAVE_MORECORE 0 +#define HAVE_MMAP 1 +/* OSX allocators provide 16 byte alignment */ +#ifndef MALLOC_ALIGNMENT +#define MALLOC_ALIGNMENT ((size_t)16U) +#endif +#endif /* HAVE_MORECORE */ +#endif /* DARWIN */ + +#ifndef LACKS_SYS_TYPES_H +#include /* For size_t */ +#endif /* LACKS_SYS_TYPES_H */ + +/* The maximum possible size_t value has all bits set */ +#define MAX_SIZE_T (~(size_t)0) + +#ifndef USE_LOCKS /* ensure true if spin or recursive locks set */ +#define USE_LOCKS ((defined(USE_SPIN_LOCKS) && USE_SPIN_LOCKS != 0) || \ + (defined(USE_RECURSIVE_LOCKS) && USE_RECURSIVE_LOCKS != 0)) +#endif /* USE_LOCKS */ + +#if USE_LOCKS /* Spin locks for gcc >= 4.1, older gcc on x86, MSC >= 1310 */ +#if ((defined(__GNUC__) && \ + ((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) || \ + defined(__i386__) || defined(__x86_64__))) || \ + (defined(_MSC_VER) && _MSC_VER>=1310)) +#ifndef USE_SPIN_LOCKS +#define USE_SPIN_LOCKS 1 +#endif /* USE_SPIN_LOCKS */ +#elif USE_SPIN_LOCKS +#error "USE_SPIN_LOCKS defined without implementation" +#endif /* ... locks available... */ +#elif !defined(USE_SPIN_LOCKS) +#define USE_SPIN_LOCKS 0 +#endif /* USE_LOCKS */ + +#ifndef ONLY_MSPACES +#define ONLY_MSPACES 0 +#endif /* ONLY_MSPACES */ +#ifndef MSPACES +#if ONLY_MSPACES +#define MSPACES 1 +#else /* ONLY_MSPACES */ +#define MSPACES 0 +#endif /* ONLY_MSPACES */ +#endif /* MSPACES */ +#ifndef MALLOC_ALIGNMENT +#define MALLOC_ALIGNMENT ((size_t)(2 * sizeof(void *))) +#endif /* MALLOC_ALIGNMENT */ +#ifndef FOOTERS +#define FOOTERS 0 +#endif /* FOOTERS */ +#ifndef ABORT +#define ABORT abort() +#endif /* ABORT */ +#ifndef ABORT_ON_ASSERT_FAILURE +#define ABORT_ON_ASSERT_FAILURE 1 +#endif /* ABORT_ON_ASSERT_FAILURE */ +#ifndef PROCEED_ON_ERROR +#define PROCEED_ON_ERROR 0 +#endif /* PROCEED_ON_ERROR */ + +#ifndef INSECURE +#define INSECURE 0 +#endif /* INSECURE */ +#ifndef MALLOC_INSPECT_ALL +#define MALLOC_INSPECT_ALL 0 +#endif /* MALLOC_INSPECT_ALL */ +#ifndef HAVE_MMAP +#define HAVE_MMAP 1 +#endif /* HAVE_MMAP */ +#ifndef MMAP_CLEARS +#define MMAP_CLEARS 1 +#endif /* MMAP_CLEARS */ +#ifndef HAVE_MREMAP +#ifdef linux +#define HAVE_MREMAP 1 +#define _GNU_SOURCE /* Turns on mremap() definition */ +#else /* linux */ +#define HAVE_MREMAP 0 +#endif /* linux */ +#endif /* HAVE_MREMAP */ +#ifndef MALLOC_FAILURE_ACTION +#define MALLOC_FAILURE_ACTION errno = ENOMEM; +#endif /* MALLOC_FAILURE_ACTION */ +#ifndef HAVE_MORECORE +#if ONLY_MSPACES +#define HAVE_MORECORE 0 +#else /* ONLY_MSPACES */ +#define HAVE_MORECORE 1 +#endif /* ONLY_MSPACES */ +#endif /* HAVE_MORECORE */ +#if !HAVE_MORECORE +#define MORECORE_CONTIGUOUS 0 +#else /* !HAVE_MORECORE */ +#define MORECORE_DEFAULT sbrk +#ifndef MORECORE_CONTIGUOUS +#define MORECORE_CONTIGUOUS 1 +#endif /* MORECORE_CONTIGUOUS */ +#endif /* HAVE_MORECORE */ +#ifndef DEFAULT_GRANULARITY +#if (MORECORE_CONTIGUOUS || defined(WIN32)) +#define DEFAULT_GRANULARITY (0) /* 0 means to compute in init_mparams */ +#else /* MORECORE_CONTIGUOUS */ +#define DEFAULT_GRANULARITY ((size_t)64U * (size_t)1024U) +#endif /* MORECORE_CONTIGUOUS */ +#endif /* DEFAULT_GRANULARITY */ +#ifndef DEFAULT_TRIM_THRESHOLD +#ifndef MORECORE_CANNOT_TRIM +#define DEFAULT_TRIM_THRESHOLD ((size_t)2U * (size_t)1024U * (size_t)1024U) +#else /* MORECORE_CANNOT_TRIM */ +#define DEFAULT_TRIM_THRESHOLD MAX_SIZE_T +#endif /* MORECORE_CANNOT_TRIM */ +#endif /* DEFAULT_TRIM_THRESHOLD */ +#ifndef DEFAULT_MMAP_THRESHOLD +#if HAVE_MMAP +#define DEFAULT_MMAP_THRESHOLD ((size_t)256U * (size_t)1024U) +#else /* HAVE_MMAP */ +#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T +#endif /* HAVE_MMAP */ +#endif /* DEFAULT_MMAP_THRESHOLD */ +#ifndef MAX_RELEASE_CHECK_RATE +#if HAVE_MMAP +#define MAX_RELEASE_CHECK_RATE 4095 +#else +#define MAX_RELEASE_CHECK_RATE MAX_SIZE_T +#endif /* HAVE_MMAP */ +#endif /* MAX_RELEASE_CHECK_RATE */ +#ifndef USE_BUILTIN_FFS +#define USE_BUILTIN_FFS 0 +#endif /* USE_BUILTIN_FFS */ +#ifndef USE_DEV_RANDOM +#define USE_DEV_RANDOM 0 +#endif /* USE_DEV_RANDOM */ +#ifndef NO_MALLINFO +#define NO_MALLINFO 0 +#endif /* NO_MALLINFO */ +#ifndef MALLINFO_FIELD_TYPE +#define MALLINFO_FIELD_TYPE size_t +#endif /* MALLINFO_FIELD_TYPE */ +#ifndef NO_MALLOC_STATS +#define NO_MALLOC_STATS 0 +#endif /* NO_MALLOC_STATS */ +#ifndef NO_SEGMENT_TRAVERSAL +#define NO_SEGMENT_TRAVERSAL 0 +#endif /* NO_SEGMENT_TRAVERSAL */ + +/* + mallopt tuning options. SVID/XPG defines four standard parameter + numbers for mallopt, normally defined in malloc.h. None of these + are used in this malloc, so setting them has no effect. But this + malloc does support the following options. +*/ + +#define M_TRIM_THRESHOLD (-1) +#define M_GRANULARITY (-2) +#define M_MMAP_THRESHOLD (-3) + +/* ------------------------ Mallinfo declarations ------------------------ */ + +#if !NO_MALLINFO +/* + This version of malloc supports the standard SVID/XPG mallinfo + routine that returns a struct containing usage properties and + statistics. It should work on any system that has a + /usr/include/malloc.h defining struct mallinfo. The main + declaration needed is the mallinfo struct that is returned (by-copy) + by mallinfo(). The malloinfo struct contains a bunch of fields that + are not even meaningful in this version of malloc. These fields are + are instead filled by mallinfo() with other numbers that might be of + interest. + + HAVE_USR_INCLUDE_MALLOC_H should be set if you have a + /usr/include/malloc.h file that includes a declaration of struct + mallinfo. If so, it is included; else a compliant version is + declared below. These must be precisely the same for mallinfo() to + work. The original SVID version of this struct, defined on most + systems with mallinfo, declares all fields as ints. But some others + define as unsigned long. If your system defines the fields using a + type of different width than listed here, you MUST #include your + system version and #define HAVE_USR_INCLUDE_MALLOC_H. +*/ + +/* #define HAVE_USR_INCLUDE_MALLOC_H */ + +#ifdef HAVE_USR_INCLUDE_MALLOC_H +#include "/usr/include/malloc.h" +#else /* HAVE_USR_INCLUDE_MALLOC_H */ +#ifndef STRUCT_MALLINFO_DECLARED +/* HP-UX (and others?) redefines mallinfo unless _STRUCT_MALLINFO is defined */ +#define _STRUCT_MALLINFO +#define STRUCT_MALLINFO_DECLARED 1 +struct mallinfo { + MALLINFO_FIELD_TYPE arena; /* non-mmapped space allocated from system */ + MALLINFO_FIELD_TYPE ordblks; /* number of free chunks */ + MALLINFO_FIELD_TYPE smblks; /* always 0 */ + MALLINFO_FIELD_TYPE hblks; /* always 0 */ + MALLINFO_FIELD_TYPE hblkhd; /* space in mmapped regions */ + MALLINFO_FIELD_TYPE usmblks; /* maximum total allocated space */ + MALLINFO_FIELD_TYPE fsmblks; /* always 0 */ + MALLINFO_FIELD_TYPE uordblks; /* total allocated space */ + MALLINFO_FIELD_TYPE fordblks; /* total free space */ + MALLINFO_FIELD_TYPE keepcost; /* releasable (via malloc_trim) space */ +}; +#endif /* STRUCT_MALLINFO_DECLARED */ +#endif /* HAVE_USR_INCLUDE_MALLOC_H */ +#endif /* NO_MALLINFO */ + +/* + Try to persuade compilers to inline. The most critical functions for + inlining are defined as macros, so these aren't used for them. +*/ + +#ifndef FORCEINLINE + #if defined(__GNUC__) +#define FORCEINLINE __inline __attribute__ ((always_inline)) + #elif defined(_MSC_VER) + #define FORCEINLINE __forceinline + #endif +#endif +#ifndef NOINLINE + #if defined(__GNUC__) + #define NOINLINE __attribute__ ((noinline)) + #elif defined(_MSC_VER) + #define NOINLINE __declspec(noinline) + #else + #define NOINLINE + #endif +#endif + +#ifdef __cplusplus +extern "C" { +#ifndef FORCEINLINE + #define FORCEINLINE inline +#endif +#endif /* __cplusplus */ +#ifndef FORCEINLINE + #define FORCEINLINE +#endif + +#if !ONLY_MSPACES + +/* ------------------- Declarations of public routines ------------------- */ + +#ifndef USE_DL_PREFIX +#define dlcalloc calloc +#define dlfree free +#define dlmalloc malloc +#define dlmemalign memalign +#define dlposix_memalign posix_memalign +#define dlrealloc realloc +#define dlrealloc_in_place realloc_in_place +#define dlvalloc valloc +#define dlpvalloc pvalloc +#define dlmallinfo mallinfo +#define dlmallopt mallopt +#define dlmalloc_trim malloc_trim +#define dlmalloc_stats malloc_stats +#define dlmalloc_usable_size malloc_usable_size +#define dlmalloc_footprint malloc_footprint +#define dlmalloc_max_footprint malloc_max_footprint +#define dlmalloc_footprint_limit malloc_footprint_limit +#define dlmalloc_set_footprint_limit malloc_set_footprint_limit +#define dlmalloc_inspect_all malloc_inspect_all +#define dlindependent_calloc independent_calloc +#define dlindependent_comalloc independent_comalloc +#define dlbulk_free bulk_free +#endif /* USE_DL_PREFIX */ + +/* + malloc(size_t n) + Returns a pointer to a newly allocated chunk of at least n bytes, or + null if no space is available, in which case errno is set to ENOMEM + on ANSI C systems. + + If n is zero, malloc returns a minimum-sized chunk. (The minimum + size is 16 bytes on most 32bit systems, and 32 bytes on 64bit + systems.) Note that size_t is an unsigned type, so calls with + arguments that would be negative if signed are interpreted as + requests for huge amounts of space, which will often fail. The + maximum supported value of n differs across systems, but is in all + cases less than the maximum representable value of a size_t. +*/ +DLMALLOC_EXPORT void* dlmalloc(size_t); + +/* + free(void* p) + Releases the chunk of memory pointed to by p, that had been previously + allocated using malloc or a related routine such as realloc. + It has no effect if p is null. If p was not malloced or already + freed, free(p) will by default cause the current program to abort. +*/ +DLMALLOC_EXPORT void dlfree(void*); + +/* + calloc(size_t n_elements, size_t element_size); + Returns a pointer to n_elements * element_size bytes, with all locations + set to zero. +*/ +DLMALLOC_EXPORT void* dlcalloc(size_t, size_t); + +/* + realloc(void* p, size_t n) + Returns a pointer to a chunk of size n that contains the same data + as does chunk p up to the minimum of (n, p's size) bytes, or null + if no space is available. + + The returned pointer may or may not be the same as p. The algorithm + prefers extending p in most cases when possible, otherwise it + employs the equivalent of a malloc-copy-free sequence. + + If p is null, realloc is equivalent to malloc. + + If space is not available, realloc returns null, errno is set (if on + ANSI) and p is NOT freed. + + if n is for fewer bytes than already held by p, the newly unused + space is lopped off and freed if possible. realloc with a size + argument of zero (re)allocates a minimum-sized chunk. + + The old unix realloc convention of allowing the last-free'd chunk + to be used as an argument to realloc is not supported. +*/ +DLMALLOC_EXPORT void* dlrealloc(void*, size_t); + +/* + realloc_in_place(void* p, size_t n) + Resizes the space allocated for p to size n, only if this can be + done without moving p (i.e., only if there is adjacent space + available if n is greater than p's current allocated size, or n is + less than or equal to p's size). This may be used instead of plain + realloc if an alternative allocation strategy is needed upon failure + to expand space; for example, reallocation of a buffer that must be + memory-aligned or cleared. You can use realloc_in_place to trigger + these alternatives only when needed. + + Returns p if successful; otherwise null. +*/ +DLMALLOC_EXPORT void* dlrealloc_in_place(void*, size_t); + +/* + memalign(size_t alignment, size_t n); + Returns a pointer to a newly allocated chunk of n bytes, aligned + in accord with the alignment argument. + + The alignment argument should be a power of two. If the argument is + not a power of two, the nearest greater power is used. + 8-byte alignment is guaranteed by normal malloc calls, so don't + bother calling memalign with an argument of 8 or less. + + Overreliance on memalign is a sure way to fragment space. +*/ +DLMALLOC_EXPORT void* dlmemalign(size_t, size_t); + +/* + int posix_memalign(void** pp, size_t alignment, size_t n); + Allocates a chunk of n bytes, aligned in accord with the alignment + argument. Differs from memalign only in that it (1) assigns the + allocated memory to *pp rather than returning it, (2) fails and + returns EINVAL if the alignment is not a power of two (3) fails and + returns ENOMEM if memory cannot be allocated. +*/ +DLMALLOC_EXPORT int dlposix_memalign(void**, size_t, size_t); + +/* + valloc(size_t n); + Equivalent to memalign(pagesize, n), where pagesize is the page + size of the system. If the pagesize is unknown, 4096 is used. +*/ +DLMALLOC_EXPORT void* dlvalloc(size_t); + +/* + mallopt(int parameter_number, int parameter_value) + Sets tunable parameters The format is to provide a + (parameter-number, parameter-value) pair. mallopt then sets the + corresponding parameter to the argument value if it can (i.e., so + long as the value is meaningful), and returns 1 if successful else + 0. To workaround the fact that mallopt is specified to use int, + not size_t parameters, the value -1 is specially treated as the + maximum unsigned size_t value. + + SVID/XPG/ANSI defines four standard param numbers for mallopt, + normally defined in malloc.h. None of these are use in this malloc, + so setting them has no effect. But this malloc also supports other + options in mallopt. See below for details. Briefly, supported + parameters are as follows (listed defaults are for "typical" + configurations). + + Symbol param # default allowed param values + M_TRIM_THRESHOLD -1 2*1024*1024 any (-1 disables) + M_GRANULARITY -2 page size any power of 2 >= page size + M_MMAP_THRESHOLD -3 256*1024 any (or 0 if no MMAP support) +*/ +DLMALLOC_EXPORT int dlmallopt(int, int); + +/* + malloc_footprint(); + Returns the number of bytes obtained from the system. The total + number of bytes allocated by malloc, realloc etc., is less than this + value. Unlike mallinfo, this function returns only a precomputed + result, so can be called frequently to monitor memory consumption. + Even if locks are otherwise defined, this function does not use them, + so results might not be up to date. +*/ +DLMALLOC_EXPORT size_t dlmalloc_footprint(void); + +/* + malloc_max_footprint(); + Returns the maximum number of bytes obtained from the system. This + value will be greater than current footprint if deallocated space + has been reclaimed by the system. The peak number of bytes allocated + by malloc, realloc etc., is less than this value. Unlike mallinfo, + this function returns only a precomputed result, so can be called + frequently to monitor memory consumption. Even if locks are + otherwise defined, this function does not use them, so results might + not be up to date. +*/ +DLMALLOC_EXPORT size_t dlmalloc_max_footprint(void); + +/* + malloc_footprint_limit(); + Returns the number of bytes that the heap is allowed to obtain from + the system, returning the last value returned by + malloc_set_footprint_limit, or the maximum size_t value if + never set. The returned value reflects a permission. There is no + guarantee that this number of bytes can actually be obtained from + the system. +*/ +DLMALLOC_EXPORT size_t dlmalloc_footprint_limit(); + +/* + malloc_set_footprint_limit(); + Sets the maximum number of bytes to obtain from the system, causing + failure returns from malloc and related functions upon attempts to + exceed this value. The argument value may be subject to page + rounding to an enforceable limit; this actual value is returned. + Using an argument of the maximum possible size_t effectively + disables checks. If the argument is less than or equal to the + current malloc_footprint, then all future allocations that require + additional system memory will fail. However, invocation cannot + retroactively deallocate existing used memory. +*/ +DLMALLOC_EXPORT size_t dlmalloc_set_footprint_limit(size_t bytes); + +#if MALLOC_INSPECT_ALL +/* + malloc_inspect_all(void(*handler)(void *start, + void *end, + size_t used_bytes, + void* callback_arg), + void* arg); + Traverses the heap and calls the given handler for each managed + region, skipping all bytes that are (or may be) used for bookkeeping + purposes. Traversal does not include include chunks that have been + directly memory mapped. Each reported region begins at the start + address, and continues up to but not including the end address. The + first used_bytes of the region contain allocated data. If + used_bytes is zero, the region is unallocated. The handler is + invoked with the given callback argument. If locks are defined, they + are held during the entire traversal. It is a bad idea to invoke + other malloc functions from within the handler. + + For example, to count the number of in-use chunks with size greater + than 1000, you could write: + static int count = 0; + void count_chunks(void* start, void* end, size_t used, void* arg) { + if (used >= 1000) ++count; + } + then: + malloc_inspect_all(count_chunks, NULL); + + malloc_inspect_all is compiled only if MALLOC_INSPECT_ALL is defined. +*/ +DLMALLOC_EXPORT void dlmalloc_inspect_all(void(*handler)(void*, void *, size_t, void*), + void* arg); + +#endif /* MALLOC_INSPECT_ALL */ + +#if !NO_MALLINFO +/* + mallinfo() + Returns (by copy) a struct containing various summary statistics: + + arena: current total non-mmapped bytes allocated from system + ordblks: the number of free chunks + smblks: always zero. + hblks: current number of mmapped regions + hblkhd: total bytes held in mmapped regions + usmblks: the maximum total allocated space. This will be greater + than current total if trimming has occurred. + fsmblks: always zero + uordblks: current total allocated space (normal or mmapped) + fordblks: total free space + keepcost: the maximum number of bytes that could ideally be released + back to system via malloc_trim. ("ideally" means that + it ignores page restrictions etc.) + + Because these fields are ints, but internal bookkeeping may + be kept as longs, the reported values may wrap around zero and + thus be inaccurate. +*/ +DLMALLOC_EXPORT struct mallinfo dlmallinfo(void); +#endif /* NO_MALLINFO */ + +/* + independent_calloc(size_t n_elements, size_t element_size, void* chunks[]); + + independent_calloc is similar to calloc, but instead of returning a + single cleared space, it returns an array of pointers to n_elements + independent elements that can hold contents of size elem_size, each + of which starts out cleared, and can be independently freed, + realloc'ed etc. The elements are guaranteed to be adjacently + allocated (this is not guaranteed to occur with multiple callocs or + mallocs), which may also improve cache locality in some + applications. + + The "chunks" argument is optional (i.e., may be null, which is + probably the most typical usage). If it is null, the returned array + is itself dynamically allocated and should also be freed when it is + no longer needed. Otherwise, the chunks array must be of at least + n_elements in length. It is filled in with the pointers to the + chunks. + + In either case, independent_calloc returns this pointer array, or + null if the allocation failed. If n_elements is zero and "chunks" + is null, it returns a chunk representing an array with zero elements + (which should be freed if not wanted). + + Each element must be freed when it is no longer needed. This can be + done all at once using bulk_free. + + independent_calloc simplifies and speeds up implementations of many + kinds of pools. It may also be useful when constructing large data + structures that initially have a fixed number of fixed-sized nodes, + but the number is not known at compile time, and some of the nodes + may later need to be freed. For example: + + struct Node { int item; struct Node* next; }; + + struct Node* build_list() { + struct Node** pool; + int n = read_number_of_nodes_needed(); + if (n <= 0) return 0; + pool = (struct Node**)(independent_calloc(n, sizeof(struct Node), 0); + if (pool == 0) die(); + // organize into a linked list... + struct Node* first = pool[0]; + for (i = 0; i < n-1; ++i) + pool[i]->next = pool[i+1]; + free(pool); // Can now free the array (or not, if it is needed later) + return first; + } +*/ +DLMALLOC_EXPORT void** dlindependent_calloc(size_t, size_t, void**); + +/* + independent_comalloc(size_t n_elements, size_t sizes[], void* chunks[]); + + independent_comalloc allocates, all at once, a set of n_elements + chunks with sizes indicated in the "sizes" array. It returns + an array of pointers to these elements, each of which can be + independently freed, realloc'ed etc. The elements are guaranteed to + be adjacently allocated (this is not guaranteed to occur with + multiple callocs or mallocs), which may also improve cache locality + in some applications. + + The "chunks" argument is optional (i.e., may be null). If it is null + the returned array is itself dynamically allocated and should also + be freed when it is no longer needed. Otherwise, the chunks array + must be of at least n_elements in length. It is filled in with the + pointers to the chunks. + + In either case, independent_comalloc returns this pointer array, or + null if the allocation failed. If n_elements is zero and chunks is + null, it returns a chunk representing an array with zero elements + (which should be freed if not wanted). + + Each element must be freed when it is no longer needed. This can be + done all at once using bulk_free. + + independent_comallac differs from independent_calloc in that each + element may have a different size, and also that it does not + automatically clear elements. + + independent_comalloc can be used to speed up allocation in cases + where several structs or objects must always be allocated at the + same time. For example: + + struct Head { ... } + struct Foot { ... } + + void send_message(char* msg) { + int msglen = strlen(msg); + size_t sizes[3] = { sizeof(struct Head), msglen, sizeof(struct Foot) }; + void* chunks[3]; + if (independent_comalloc(3, sizes, chunks) == 0) + die(); + struct Head* head = (struct Head*)(chunks[0]); + char* body = (char*)(chunks[1]); + struct Foot* foot = (struct Foot*)(chunks[2]); + // ... + } + + In general though, independent_comalloc is worth using only for + larger values of n_elements. For small values, you probably won't + detect enough difference from series of malloc calls to bother. + + Overuse of independent_comalloc can increase overall memory usage, + since it cannot reuse existing noncontiguous small chunks that + might be available for some of the elements. +*/ +DLMALLOC_EXPORT void** dlindependent_comalloc(size_t, size_t*, void**); + +/* + bulk_free(void* array[], size_t n_elements) + Frees and clears (sets to null) each non-null pointer in the given + array. This is likely to be faster than freeing them one-by-one. + If footers are used, pointers that have been allocated in different + mspaces are not freed or cleared, and the count of all such pointers + is returned. For large arrays of pointers with poor locality, it + may be worthwhile to sort this array before calling bulk_free. +*/ +DLMALLOC_EXPORT size_t dlbulk_free(void**, size_t n_elements); + +/* + pvalloc(size_t n); + Equivalent to valloc(minimum-page-that-holds(n)), that is, + round up n to nearest pagesize. + */ +DLMALLOC_EXPORT void* dlpvalloc(size_t); + +/* + malloc_trim(size_t pad); + + If possible, gives memory back to the system (via negative arguments + to sbrk) if there is unused memory at the `high' end of the malloc + pool or in unused MMAP segments. You can call this after freeing + large blocks of memory to potentially reduce the system-level memory + requirements of a program. However, it cannot guarantee to reduce + memory. Under some allocation patterns, some large free blocks of + memory will be locked between two used chunks, so they cannot be + given back to the system. + + The `pad' argument to malloc_trim represents the amount of free + trailing space to leave untrimmed. If this argument is zero, only + the minimum amount of memory to maintain internal data structures + will be left. Non-zero arguments can be supplied to maintain enough + trailing space to service future expected allocations without having + to re-obtain memory from the system. + + Malloc_trim returns 1 if it actually released any memory, else 0. +*/ +DLMALLOC_EXPORT int dlmalloc_trim(size_t); + +/* + malloc_stats(); + Prints on stderr the amount of space obtained from the system (both + via sbrk and mmap), the maximum amount (which may be more than + current if malloc_trim and/or munmap got called), and the current + number of bytes allocated via malloc (or realloc, etc) but not yet + freed. Note that this is the number of bytes allocated, not the + number requested. It will be larger than the number requested + because of alignment and bookkeeping overhead. Because it includes + alignment wastage as being in use, this figure may be greater than + zero even when no user-level chunks are allocated. + + The reported current and maximum system memory can be inaccurate if + a program makes other calls to system memory allocation functions + (normally sbrk) outside of malloc. + + malloc_stats prints only the most commonly interesting statistics. + More information can be obtained by calling mallinfo. +*/ +DLMALLOC_EXPORT void dlmalloc_stats(void); + +/* + malloc_usable_size(void* p); + + Returns the number of bytes you can actually use in + an allocated chunk, which may be more than you requested (although + often not) due to alignment and minimum size constraints. + You can use this many bytes without worrying about + overwriting other allocated objects. This is not a particularly great + programming practice. malloc_usable_size can be more useful in + debugging and assertions, for example: + + p = malloc(n); + assert(malloc_usable_size(p) >= 256); +*/ +size_t dlmalloc_usable_size(void*); + +#endif /* ONLY_MSPACES */ + +#if MSPACES + +/* + mspace is an opaque type representing an independent + region of space that supports mspace_malloc, etc. +*/ +typedef void* mspace; + +/* + create_mspace creates and returns a new independent space with the + given initial capacity, or, if 0, the default granularity size. It + returns null if there is no system memory available to create the + space. If argument locked is non-zero, the space uses a separate + lock to control access. The capacity of the space will grow + dynamically as needed to service mspace_malloc requests. You can + control the sizes of incremental increases of this space by + compiling with a different DEFAULT_GRANULARITY or dynamically + setting with mallopt(M_GRANULARITY, value). +*/ +DLMALLOC_EXPORT mspace create_mspace(size_t capacity, int locked); + +/* + destroy_mspace destroys the given space, and attempts to return all + of its memory back to the system, returning the total number of + bytes freed. After destruction, the results of access to all memory + used by the space become undefined. +*/ +DLMALLOC_EXPORT size_t destroy_mspace(mspace msp); + +/* + create_mspace_with_base uses the memory supplied as the initial base + of a new mspace. Part (less than 128*sizeof(size_t) bytes) of this + space is used for bookkeeping, so the capacity must be at least this + large. (Otherwise 0 is returned.) When this initial space is + exhausted, additional memory will be obtained from the system. + Destroying this space will deallocate all additionally allocated + space (if possible) but not the initial base. +*/ +DLMALLOC_EXPORT mspace create_mspace_with_base(void* base, size_t capacity, int locked); + +/* + mspace_track_large_chunks controls whether requests for large chunks + are allocated in their own untracked mmapped regions, separate from + others in this mspace. By default large chunks are not tracked, + which reduces fragmentation. However, such chunks are not + necessarily released to the system upon destroy_mspace. Enabling + tracking by setting to true may increase fragmentation, but avoids + leakage when relying on destroy_mspace to release all memory + allocated using this space. The function returns the previous + setting. +*/ +DLMALLOC_EXPORT int mspace_track_large_chunks(mspace msp, int enable); + + +/* + mspace_malloc behaves as malloc, but operates within + the given space. +*/ +DLMALLOC_EXPORT void* mspace_malloc(mspace msp, size_t bytes); + +/* + mspace_free behaves as free, but operates within + the given space. + + If compiled with FOOTERS==1, mspace_free is not actually needed. + free may be called instead of mspace_free because freed chunks from + any space are handled by their originating spaces. +*/ +DLMALLOC_EXPORT void mspace_free(mspace msp, void* mem); + +/* + mspace_realloc behaves as realloc, but operates within + the given space. + + If compiled with FOOTERS==1, mspace_realloc is not actually + needed. realloc may be called instead of mspace_realloc because + realloced chunks from any space are handled by their originating + spaces. +*/ +DLMALLOC_EXPORT void* mspace_realloc(mspace msp, void* mem, size_t newsize); + +/* + mspace_calloc behaves as calloc, but operates within + the given space. +*/ +DLMALLOC_EXPORT void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size); + +/* + mspace_memalign behaves as memalign, but operates within + the given space. +*/ +DLMALLOC_EXPORT void* mspace_memalign(mspace msp, size_t alignment, size_t bytes); + +/* + mspace_independent_calloc behaves as independent_calloc, but + operates within the given space. +*/ +DLMALLOC_EXPORT void** mspace_independent_calloc(mspace msp, size_t n_elements, + size_t elem_size, void* chunks[]); + +/* + mspace_independent_comalloc behaves as independent_comalloc, but + operates within the given space. +*/ +DLMALLOC_EXPORT void** mspace_independent_comalloc(mspace msp, size_t n_elements, + size_t sizes[], void* chunks[]); + +/* + mspace_footprint() returns the number of bytes obtained from the + system for this space. +*/ +DLMALLOC_EXPORT size_t mspace_footprint(mspace msp); + +/* + mspace_max_footprint() returns the peak number of bytes obtained from the + system for this space. +*/ +DLMALLOC_EXPORT size_t mspace_max_footprint(mspace msp); + + +#if !NO_MALLINFO +/* + mspace_mallinfo behaves as mallinfo, but reports properties of + the given space. +*/ +DLMALLOC_EXPORT struct mallinfo mspace_mallinfo(mspace msp); +#endif /* NO_MALLINFO */ + +/* + malloc_usable_size(void* p) behaves the same as malloc_usable_size; +*/ +DLMALLOC_EXPORT size_t mspace_usable_size(const void* mem); + +/* + mspace_malloc_stats behaves as malloc_stats, but reports + properties of the given space. +*/ +DLMALLOC_EXPORT void mspace_malloc_stats(mspace msp); + +/* + mspace_trim behaves as malloc_trim, but + operates within the given space. +*/ +DLMALLOC_EXPORT int mspace_trim(mspace msp, size_t pad); + +/* + An alias for mallopt. +*/ +DLMALLOC_EXPORT int mspace_mallopt(int, int); + +#endif /* MSPACES */ + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif /* __cplusplus */ + +/* + ======================================================================== + To make a fully customizable malloc.h header file, cut everything + above this line, put into file malloc.h, edit to suit, and #include it + on the next line, as well as in programs that use this malloc. + ======================================================================== +*/ + +/* #include "malloc.h" */ + +/*------------------------------ internal #includes ---------------------- */ + +#ifdef _MSC_VER +#pragma warning( disable : 4146 ) /* no "unsigned" warnings */ +#endif /* _MSC_VER */ +#if !NO_MALLOC_STATS +#include /* for printing in malloc_stats */ +#endif /* NO_MALLOC_STATS */ +#ifndef LACKS_ERRNO_H +#include /* for MALLOC_FAILURE_ACTION */ +#endif /* LACKS_ERRNO_H */ +#ifdef DEBUG +#if ABORT_ON_ASSERT_FAILURE +#undef assert +#define assert(x) if(!(x)) ABORT +#else /* ABORT_ON_ASSERT_FAILURE */ +#include +#endif /* ABORT_ON_ASSERT_FAILURE */ +#else /* DEBUG */ +#ifndef assert +#define assert(x) +#endif +#define DEBUG 0 +#endif /* DEBUG */ +#if !defined(WIN32) && !defined(LACKS_TIME_H) +#include /* for magic initialization */ +#endif /* WIN32 */ +#ifndef LACKS_STDLIB_H +#include /* for abort() */ +#endif /* LACKS_STDLIB_H */ +#ifndef LACKS_STRING_H +#include /* for memset etc */ +#endif /* LACKS_STRING_H */ +#if USE_BUILTIN_FFS +#ifndef LACKS_STRINGS_H +#include /* for ffs */ +#endif /* LACKS_STRINGS_H */ +#endif /* USE_BUILTIN_FFS */ +#if HAVE_MMAP +#ifndef LACKS_SYS_MMAN_H +/* On some versions of linux, mremap decl in mman.h needs __USE_GNU set */ +#if (defined(linux) && !defined(__USE_GNU)) +#define __USE_GNU 1 +#include /* for mmap */ +#undef __USE_GNU +#else +#include /* for mmap */ +#endif /* linux */ +#endif /* LACKS_SYS_MMAN_H */ +#ifndef LACKS_FCNTL_H +#include +#endif /* LACKS_FCNTL_H */ +#endif /* HAVE_MMAP */ +#ifndef LACKS_UNISTD_H +#include /* for sbrk, sysconf */ +#else /* LACKS_UNISTD_H */ +#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) +extern void* sbrk(ptrdiff_t); +#endif /* FreeBSD etc */ +#endif /* LACKS_UNISTD_H */ + +/* Declarations for locking */ +#if USE_LOCKS +#ifndef WIN32 +#if defined (__SVR4) && defined (__sun) /* solaris */ +#include +#elif !defined(LACKS_SCHED_H) +#include +#endif /* solaris or LACKS_SCHED_H */ +#if (defined(USE_RECURSIVE_LOCKS) && USE_RECURSIVE_LOCKS != 0) || !USE_SPIN_LOCKS +#include +#endif /* USE_RECURSIVE_LOCKS ... */ +#elif defined(_MSC_VER) +#ifndef _M_AMD64 +/* These are already defined on AMD64 builds */ +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ +LONG __cdecl _InterlockedCompareExchange(LONG volatile *Dest, LONG Exchange, LONG Comp); +LONG __cdecl _InterlockedExchange(LONG volatile *Target, LONG Value); +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* _M_AMD64 */ +#pragma intrinsic (_InterlockedCompareExchange) +#pragma intrinsic (_InterlockedExchange) +#define interlockedcompareexchange _InterlockedCompareExchange +#define interlockedexchange _InterlockedExchange +#elif defined(WIN32) && defined(__GNUC__) +#define interlockedcompareexchange(a, b, c) __sync_val_compare_and_swap(a, c, b) +#define interlockedexchange __sync_lock_test_and_set +#endif /* Win32 */ +#else /* USE_LOCKS */ +#endif /* USE_LOCKS */ + +#ifndef LOCK_AT_FORK +#define LOCK_AT_FORK 0 +#endif + +/* Declarations for bit scanning on win32 */ +#if defined(_MSC_VER) && _MSC_VER>=1300 +#ifndef BitScanForward /* Try to avoid pulling in WinNT.h */ +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ +unsigned char _BitScanForward(unsigned long *index, unsigned long mask); +unsigned char _BitScanReverse(unsigned long *index, unsigned long mask); +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#define BitScanForward _BitScanForward +#define BitScanReverse _BitScanReverse +#pragma intrinsic(_BitScanForward) +#pragma intrinsic(_BitScanReverse) +#endif /* BitScanForward */ +#endif /* defined(_MSC_VER) && _MSC_VER>=1300 */ + +#ifndef WIN32 +#ifndef malloc_getpagesize +# ifdef _SC_PAGESIZE /* some SVR4 systems omit an underscore */ +# ifndef _SC_PAGE_SIZE +# define _SC_PAGE_SIZE _SC_PAGESIZE +# endif +# endif +# ifdef _SC_PAGE_SIZE +# define malloc_getpagesize sysconf(_SC_PAGE_SIZE) +# else +# if defined(BSD) || defined(DGUX) || defined(HAVE_GETPAGESIZE) + extern size_t getpagesize(); +# define malloc_getpagesize getpagesize() +# else +# ifdef WIN32 /* use supplied emulation of getpagesize */ +# define malloc_getpagesize getpagesize() +# else +# ifndef LACKS_SYS_PARAM_H +# include +# endif +# ifdef EXEC_PAGESIZE +# define malloc_getpagesize EXEC_PAGESIZE +# else +# ifdef NBPG +# ifndef CLSIZE +# define malloc_getpagesize NBPG +# else +# define malloc_getpagesize (NBPG * CLSIZE) +# endif +# else +# ifdef NBPC +# define malloc_getpagesize NBPC +# else +# ifdef PAGESIZE +# define malloc_getpagesize PAGESIZE +# else /* just guess */ +# define malloc_getpagesize ((size_t)4096U) +# endif +# endif +# endif +# endif +# endif +# endif +# endif +#endif +#endif + +/* ------------------- size_t and alignment properties -------------------- */ + +/* The byte and bit size of a size_t */ +#define SIZE_T_SIZE (sizeof(size_t)) +#define SIZE_T_BITSIZE (sizeof(size_t) << 3) + +/* Some constants coerced to size_t */ +/* Annoying but necessary to avoid errors on some platforms */ +#define SIZE_T_ZERO ((size_t)0) +#define SIZE_T_ONE ((size_t)1) +#define SIZE_T_TWO ((size_t)2) +#define SIZE_T_FOUR ((size_t)4) +#define TWO_SIZE_T_SIZES (SIZE_T_SIZE<<1) +#define FOUR_SIZE_T_SIZES (SIZE_T_SIZE<<2) +#define SIX_SIZE_T_SIZES (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES) +#define HALF_MAX_SIZE_T (MAX_SIZE_T / 2U) + +/* The bit mask value corresponding to MALLOC_ALIGNMENT */ +#define CHUNK_ALIGN_MASK (MALLOC_ALIGNMENT - SIZE_T_ONE) + +/* True if address a has acceptable alignment */ +#define is_aligned(A) (((size_t)((A)) & (CHUNK_ALIGN_MASK)) == 0) + +/* the number of bytes to offset an address to align it */ +#define align_offset(A)\ + ((((size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\ + ((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK)) + +/* -------------------------- MMAP preliminaries ------------------------- */ + +/* + If HAVE_MORECORE or HAVE_MMAP are false, we just define calls and + checks to fail so compiler optimizer can delete code rather than + using so many "#if"s. +*/ + + +/* MORECORE and MMAP must return MFAIL on failure */ +#define MFAIL ((void*)(MAX_SIZE_T)) +#define CMFAIL ((char*)(MFAIL)) /* defined for convenience */ + +#if HAVE_MMAP + +#ifndef WIN32 +#define MUNMAP_DEFAULT(a, s) munmap((a), (s)) +#define MMAP_PROT (PROT_READ|PROT_WRITE) +#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) +#define MAP_ANONYMOUS MAP_ANON +#endif /* MAP_ANON */ +#ifdef MAP_ANONYMOUS +#define MMAP_FLAGS (MAP_PRIVATE|MAP_ANONYMOUS) +#define MMAP_DEFAULT(s) mmap(0, (s), MMAP_PROT, MMAP_FLAGS, -1, 0) +#else /* MAP_ANONYMOUS */ +/* + Nearly all versions of mmap support MAP_ANONYMOUS, so the following + is unlikely to be needed, but is supplied just in case. +*/ +#define MMAP_FLAGS (MAP_PRIVATE) +static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */ +#define MMAP_DEFAULT(s) ((dev_zero_fd < 0) ? \ + (dev_zero_fd = open("/dev/zero", O_RDWR), \ + mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) : \ + mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) +#endif /* MAP_ANONYMOUS */ + +#define DIRECT_MMAP_DEFAULT(s) MMAP_DEFAULT(s) + +#else /* WIN32 */ + +/* Win32 MMAP via VirtualAlloc */ +static FORCEINLINE void* win32mmap(size_t size) { + void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); + return (ptr != 0)? ptr: MFAIL; +} + +/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */ +static FORCEINLINE void* win32direct_mmap(size_t size) { + void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, + PAGE_READWRITE); + return (ptr != 0)? ptr: MFAIL; +} + +/* This function supports releasing coalesed segments */ +static FORCEINLINE int win32munmap(void* ptr, size_t size) { + MEMORY_BASIC_INFORMATION minfo; + char* cptr = (char*)ptr; + while (size) { + if (VirtualQuery(cptr, &minfo, sizeof(minfo)) == 0) + return -1; + if (minfo.BaseAddress != cptr || minfo.AllocationBase != cptr || + minfo.State != MEM_COMMIT || minfo.RegionSize > size) + return -1; + if (VirtualFree(cptr, 0, MEM_RELEASE) == 0) + return -1; + cptr += minfo.RegionSize; + size -= minfo.RegionSize; + } + return 0; +} + +#define MMAP_DEFAULT(s) win32mmap(s) +#define MUNMAP_DEFAULT(a, s) win32munmap((a), (s)) +#define DIRECT_MMAP_DEFAULT(s) win32direct_mmap(s) +#endif /* WIN32 */ +#endif /* HAVE_MMAP */ + +#if HAVE_MREMAP +#ifndef WIN32 +#define MREMAP_DEFAULT(addr, osz, nsz, mv) mremap((addr), (osz), (nsz), (mv)) +#endif /* WIN32 */ +#endif /* HAVE_MREMAP */ + +/** + * Define CALL_MORECORE + */ +#if HAVE_MORECORE + #ifdef MORECORE + #define CALL_MORECORE(S) MORECORE(S) + #else /* MORECORE */ + #define CALL_MORECORE(S) MORECORE_DEFAULT(S) + #endif /* MORECORE */ +#else /* HAVE_MORECORE */ + #define CALL_MORECORE(S) MFAIL +#endif /* HAVE_MORECORE */ + +/** + * Define CALL_MMAP/CALL_MUNMAP/CALL_DIRECT_MMAP + */ +#if HAVE_MMAP + #define USE_MMAP_BIT (SIZE_T_ONE) + + #ifdef MMAP + #define CALL_MMAP(s) MMAP(s) + #else /* MMAP */ + #define CALL_MMAP(s) MMAP_DEFAULT(s) + #endif /* MMAP */ + #ifdef MUNMAP + #define CALL_MUNMAP(a, s) MUNMAP((a), (s)) + #else /* MUNMAP */ + #define CALL_MUNMAP(a, s) MUNMAP_DEFAULT((a), (s)) + #endif /* MUNMAP */ + #ifdef DIRECT_MMAP + #define CALL_DIRECT_MMAP(s) DIRECT_MMAP(s) + #else /* DIRECT_MMAP */ + #define CALL_DIRECT_MMAP(s) DIRECT_MMAP_DEFAULT(s) + #endif /* DIRECT_MMAP */ +#else /* HAVE_MMAP */ + #define USE_MMAP_BIT (SIZE_T_ZERO) + + #define MMAP(s) MFAIL + #define MUNMAP(a, s) (-1) + #define DIRECT_MMAP(s) MFAIL + #define CALL_DIRECT_MMAP(s) DIRECT_MMAP(s) + #define CALL_MMAP(s) MMAP(s) + #define CALL_MUNMAP(a, s) MUNMAP((a), (s)) +#endif /* HAVE_MMAP */ + +/** + * Define CALL_MREMAP + */ +#if HAVE_MMAP && HAVE_MREMAP + #ifdef MREMAP + #define CALL_MREMAP(addr, osz, nsz, mv) MREMAP((addr), (osz), (nsz), (mv)) + #else /* MREMAP */ + #define CALL_MREMAP(addr, osz, nsz, mv) MREMAP_DEFAULT((addr), (osz), (nsz), (mv)) + #endif /* MREMAP */ +#else /* HAVE_MMAP && HAVE_MREMAP */ + #define CALL_MREMAP(addr, osz, nsz, mv) MFAIL +#endif /* HAVE_MMAP && HAVE_MREMAP */ + +/* mstate bit set if continguous morecore disabled or failed */ +#define USE_NONCONTIGUOUS_BIT (4U) + +/* segment bit set in create_mspace_with_base */ +#define EXTERN_BIT (8U) + + +/* --------------------------- Lock preliminaries ------------------------ */ + +/* + When locks are defined, there is one global lock, plus + one per-mspace lock. + + The global lock_ensures that mparams.magic and other unique + mparams values are initialized only once. It also protects + sequences of calls to MORECORE. In many cases sys_alloc requires + two calls, that should not be interleaved with calls by other + threads. This does not protect against direct calls to MORECORE + by other threads not using this lock, so there is still code to + cope the best we can on interference. + + Per-mspace locks surround calls to malloc, free, etc. + By default, locks are simple non-reentrant mutexes. + + Because lock-protected regions generally have bounded times, it is + OK to use the supplied simple spinlocks. Spinlocks are likely to + improve performance for lightly contended applications, but worsen + performance under heavy contention. + + If USE_LOCKS is > 1, the definitions of lock routines here are + bypassed, in which case you will need to define the type MLOCK_T, + and at least INITIAL_LOCK, DESTROY_LOCK, ACQUIRE_LOCK, RELEASE_LOCK + and TRY_LOCK. You must also declare a + static MLOCK_T malloc_global_mutex = { initialization values };. + +*/ + +#if !USE_LOCKS +#define USE_LOCK_BIT (0U) +#define INITIAL_LOCK(l) (0) +#define DESTROY_LOCK(l) (0) +#define ACQUIRE_MALLOC_GLOBAL_LOCK() +#define RELEASE_MALLOC_GLOBAL_LOCK() + +#else +#if USE_LOCKS > 1 +/* ----------------------- User-defined locks ------------------------ */ +/* Define your own lock implementation here */ +/* #define INITIAL_LOCK(lk) ... */ +/* #define DESTROY_LOCK(lk) ... */ +/* #define ACQUIRE_LOCK(lk) ... */ +/* #define RELEASE_LOCK(lk) ... */ +/* #define TRY_LOCK(lk) ... */ +/* static MLOCK_T malloc_global_mutex = ... */ + +#elif USE_SPIN_LOCKS + +/* First, define CAS_LOCK and CLEAR_LOCK on ints */ +/* Note CAS_LOCK defined to return 0 on success */ + +#if defined(__GNUC__)&& (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) +#define CAS_LOCK(sl) __sync_lock_test_and_set(sl, 1) +#define CLEAR_LOCK(sl) __sync_lock_release(sl) + +#elif (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))) +/* Custom spin locks for older gcc on x86 */ +static FORCEINLINE int x86_cas_lock(int *sl) { + int ret; + int val = 1; + int cmp = 0; + __asm__ __volatile__ ("lock; cmpxchgl %1, %2" + : "=a" (ret) + : "r" (val), "m" (*(sl)), "0"(cmp) + : "memory", "cc"); + return ret; +} + +static FORCEINLINE void x86_clear_lock(int* sl) { + assert(*sl != 0); + int prev = 0; + int ret; + __asm__ __volatile__ ("lock; xchgl %0, %1" + : "=r" (ret) + : "m" (*(sl)), "0"(prev) + : "memory"); +} + +#define CAS_LOCK(sl) x86_cas_lock(sl) +#define CLEAR_LOCK(sl) x86_clear_lock(sl) + +#else /* Win32 MSC */ +#define CAS_LOCK(sl) interlockedexchange(sl, (LONG)1) +#define CLEAR_LOCK(sl) interlockedexchange (sl, (LONG)0) + +#endif /* ... gcc spins locks ... */ + +/* How to yield for a spin lock */ +#define SPINS_PER_YIELD 63 +#if defined(_MSC_VER) +#define SLEEP_EX_DURATION 50 /* delay for yield/sleep */ +#define SPIN_LOCK_YIELD SleepEx(SLEEP_EX_DURATION, FALSE) +#elif defined (__SVR4) && defined (__sun) /* solaris */ +#define SPIN_LOCK_YIELD thr_yield(); +#elif !defined(LACKS_SCHED_H) +#define SPIN_LOCK_YIELD sched_yield(); +#else +#define SPIN_LOCK_YIELD +#endif /* ... yield ... */ + +#if !defined(USE_RECURSIVE_LOCKS) || USE_RECURSIVE_LOCKS == 0 +/* Plain spin locks use single word (embedded in malloc_states) */ +static int spin_acquire_lock(int *sl) { + int spins = 0; + while (*(volatile int *)sl != 0 || CAS_LOCK(sl)) { + if ((++spins & SPINS_PER_YIELD) == 0) { + SPIN_LOCK_YIELD; + } + } + return 0; +} + +#define MLOCK_T int +#define TRY_LOCK(sl) !CAS_LOCK(sl) +#define RELEASE_LOCK(sl) CLEAR_LOCK(sl) +#define ACQUIRE_LOCK(sl) (CAS_LOCK(sl)? spin_acquire_lock(sl) : 0) +#define INITIAL_LOCK(sl) (*sl = 0) +#define DESTROY_LOCK(sl) (0) +static MLOCK_T malloc_global_mutex = 0; + +#else /* USE_RECURSIVE_LOCKS */ +/* types for lock owners */ +#ifdef WIN32 +#define THREAD_ID_T DWORD +#define CURRENT_THREAD GetCurrentThreadId() +#define EQ_OWNER(X,Y) ((X) == (Y)) +#else +/* + Note: the following assume that pthread_t is a type that can be + initialized to (casted) zero. If this is not the case, you will need to + somehow redefine these or not use spin locks. +*/ +#define THREAD_ID_T pthread_t +#define CURRENT_THREAD pthread_self() +#define EQ_OWNER(X,Y) pthread_equal(X, Y) +#endif + +struct malloc_recursive_lock { + int sl; + unsigned int c; + THREAD_ID_T threadid; +}; + +#define MLOCK_T struct malloc_recursive_lock +static MLOCK_T malloc_global_mutex = { 0, 0, (THREAD_ID_T)0}; + +static FORCEINLINE void recursive_release_lock(MLOCK_T *lk) { + assert(lk->sl != 0); + if (--lk->c == 0) { + CLEAR_LOCK(&lk->sl); + } +} + +static FORCEINLINE int recursive_acquire_lock(MLOCK_T *lk) { + THREAD_ID_T mythreadid = CURRENT_THREAD; + int spins = 0; + for (;;) { + if (*((volatile int *)(&lk->sl)) == 0) { + if (!CAS_LOCK(&lk->sl)) { + lk->threadid = mythreadid; + lk->c = 1; + return 0; + } + } + else if (EQ_OWNER(lk->threadid, mythreadid)) { + ++lk->c; + return 0; + } + if ((++spins & SPINS_PER_YIELD) == 0) { + SPIN_LOCK_YIELD; + } + } +} + +static FORCEINLINE int recursive_try_lock(MLOCK_T *lk) { + THREAD_ID_T mythreadid = CURRENT_THREAD; + if (*((volatile int *)(&lk->sl)) == 0) { + if (!CAS_LOCK(&lk->sl)) { + lk->threadid = mythreadid; + lk->c = 1; + return 1; + } + } + else if (EQ_OWNER(lk->threadid, mythreadid)) { + ++lk->c; + return 1; + } + return 0; +} + +#define RELEASE_LOCK(lk) recursive_release_lock(lk) +#define TRY_LOCK(lk) recursive_try_lock(lk) +#define ACQUIRE_LOCK(lk) recursive_acquire_lock(lk) +#define INITIAL_LOCK(lk) ((lk)->threadid = (THREAD_ID_T)0, (lk)->sl = 0, (lk)->c = 0) +#define DESTROY_LOCK(lk) (0) +#endif /* USE_RECURSIVE_LOCKS */ + +#elif defined(WIN32) /* Win32 critical sections */ +#define MLOCK_T CRITICAL_SECTION +#define ACQUIRE_LOCK(lk) (EnterCriticalSection(lk), 0) +#define RELEASE_LOCK(lk) LeaveCriticalSection(lk) +#define TRY_LOCK(lk) TryEnterCriticalSection(lk) +#define INITIAL_LOCK(lk) (!InitializeCriticalSectionAndSpinCount((lk), 0x80000000|4000)) +#define DESTROY_LOCK(lk) (DeleteCriticalSection(lk), 0) +#define NEED_GLOBAL_LOCK_INIT + +static MLOCK_T malloc_global_mutex; +static volatile LONG malloc_global_mutex_status; + +/* Use spin loop to initialize global lock */ +static void init_malloc_global_mutex() { + for (;;) { + long stat = malloc_global_mutex_status; + if (stat > 0) + return; + /* transition to < 0 while initializing, then to > 0) */ + if (stat == 0 && + interlockedcompareexchange(&malloc_global_mutex_status, (LONG)-1, (LONG)0) == 0) { + InitializeCriticalSection(&malloc_global_mutex); + interlockedexchange(&malloc_global_mutex_status, (LONG)1); + return; + } + SleepEx(0, FALSE); + } +} + +#else /* pthreads-based locks */ +#define MLOCK_T pthread_mutex_t +#define ACQUIRE_LOCK(lk) pthread_mutex_lock(lk) +#define RELEASE_LOCK(lk) pthread_mutex_unlock(lk) +#define TRY_LOCK(lk) (!pthread_mutex_trylock(lk)) +#define INITIAL_LOCK(lk) pthread_init_lock(lk) +#define DESTROY_LOCK(lk) pthread_mutex_destroy(lk) + +#if defined(USE_RECURSIVE_LOCKS) && USE_RECURSIVE_LOCKS != 0 && defined(linux) && !defined(PTHREAD_MUTEX_RECURSIVE) +/* Cope with old-style linux recursive lock initialization by adding */ +/* skipped internal declaration from pthread.h */ +extern int pthread_mutexattr_setkind_np __P ((pthread_mutexattr_t *__attr, + int __kind)); +#define PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP +#define pthread_mutexattr_settype(x,y) pthread_mutexattr_setkind_np(x,y) +#endif /* USE_RECURSIVE_LOCKS ... */ + +static MLOCK_T malloc_global_mutex = PTHREAD_MUTEX_INITIALIZER; + +static int pthread_init_lock (MLOCK_T *lk) { + pthread_mutexattr_t attr; + if (pthread_mutexattr_init(&attr)) return 1; +#if defined(USE_RECURSIVE_LOCKS) && USE_RECURSIVE_LOCKS != 0 + if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE)) return 1; +#endif + if (pthread_mutex_init(lk, &attr)) return 1; + if (pthread_mutexattr_destroy(&attr)) return 1; + return 0; +} + +#endif /* ... lock types ... */ + +/* Common code for all lock types */ +#define USE_LOCK_BIT (2U) + +#ifndef ACQUIRE_MALLOC_GLOBAL_LOCK +#define ACQUIRE_MALLOC_GLOBAL_LOCK() ACQUIRE_LOCK(&malloc_global_mutex); +#endif + +#ifndef RELEASE_MALLOC_GLOBAL_LOCK +#define RELEASE_MALLOC_GLOBAL_LOCK() RELEASE_LOCK(&malloc_global_mutex); +#endif + +#endif /* USE_LOCKS */ + +/* ----------------------- Chunk representations ------------------------ */ + +/* + (The following includes lightly edited explanations by Colin Plumb.) + + The malloc_chunk declaration below is misleading (but accurate and + necessary). It declares a "view" into memory allowing access to + necessary fields at known offsets from a given base. + + Chunks of memory are maintained using a `boundary tag' method as + originally described by Knuth. (See the paper by Paul Wilson + ftp://ftp.cs.utexas.edu/pub/garbage/allocsrv.ps for a survey of such + techniques.) Sizes of free chunks are stored both in the front of + each chunk and at the end. This makes consolidating fragmented + chunks into bigger chunks fast. The head fields also hold bits + representing whether chunks are free or in use. + + Here are some pictures to make it clearer. They are "exploded" to + show that the state of a chunk can be thought of as extending from + the high 31 bits of the head field of its header through the + prev_foot and PINUSE_BIT bit of the following chunk header. + + A chunk that's in use looks like: + + chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Size of previous chunk (if P = 0) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| + | Size of this chunk 1| +-+ + mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + +- -+ + | | + +- -+ + | : + +- size - sizeof(size_t) available payload bytes -+ + : | + chunk-> +- -+ + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1| + | Size of next chunk (may or may not be in use) | +-+ + mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + And if it's free, it looks like this: + + chunk-> +- -+ + | User payload (must be in use, or we would have merged!) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| + | Size of this chunk 0| +-+ + mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Next pointer | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Prev pointer | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | : + +- size - sizeof(struct chunk) unused bytes -+ + : | + chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Size of this chunk | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0| + | Size of next chunk (must be in use, or we would have merged)| +-+ + mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | : + +- User payload -+ + : | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |0| + +-+ + Note that since we always merge adjacent free chunks, the chunks + adjacent to a free chunk must be in use. + + Given a pointer to a chunk (which can be derived trivially from the + payload pointer) we can, in O(1) time, find out whether the adjacent + chunks are free, and if so, unlink them from the lists that they + are on and merge them with the current chunk. + + Chunks always begin on even word boundaries, so the mem portion + (which is returned to the user) is also on an even word boundary, and + thus at least double-word aligned. + + The P (PINUSE_BIT) bit, stored in the unused low-order bit of the + chunk size (which is always a multiple of two words), is an in-use + bit for the *previous* chunk. If that bit is *clear*, then the + word before the current chunk size contains the previous chunk + size, and can be used to find the front of the previous chunk. + The very first chunk allocated always has this bit set, preventing + access to non-existent (or non-owned) memory. If pinuse is set for + any given chunk, then you CANNOT determine the size of the + previous chunk, and might even get a memory addressing fault when + trying to do so. + + The C (CINUSE_BIT) bit, stored in the unused second-lowest bit of + the chunk size redundantly records whether the current chunk is + inuse (unless the chunk is mmapped). This redundancy enables usage + checks within free and realloc, and reduces indirection when freeing + and consolidating chunks. + + Each freshly allocated chunk must have both cinuse and pinuse set. + That is, each allocated chunk borders either a previously allocated + and still in-use chunk, or the base of its memory arena. This is + ensured by making all allocations from the `lowest' part of any + found chunk. Further, no free chunk physically borders another one, + so each free chunk is known to be preceded and followed by either + inuse chunks or the ends of memory. + + Note that the `foot' of the current chunk is actually represented + as the prev_foot of the NEXT chunk. This makes it easier to + deal with alignments etc but can be very confusing when trying + to extend or adapt this code. + + The exceptions to all this are + + 1. The special chunk `top' is the top-most available chunk (i.e., + the one bordering the end of available memory). It is treated + specially. Top is never included in any bin, is used only if + no other chunk is available, and is released back to the + system if it is very large (see M_TRIM_THRESHOLD). In effect, + the top chunk is treated as larger (and thus less well + fitting) than any other available chunk. The top chunk + doesn't update its trailing size field since there is no next + contiguous chunk that would have to index off it. However, + space is still allocated for it (TOP_FOOT_SIZE) to enable + separation or merging when space is extended. + + 3. Chunks allocated via mmap, have both cinuse and pinuse bits + cleared in their head fields. Because they are allocated + one-by-one, each must carry its own prev_foot field, which is + also used to hold the offset this chunk has within its mmapped + region, which is needed to preserve alignment. Each mmapped + chunk is trailed by the first two fields of a fake next-chunk + for sake of usage checks. + +*/ + +struct malloc_chunk { + size_t prev_foot; /* Size of previous chunk (if free). */ + size_t head; /* Size and inuse bits. */ + struct malloc_chunk* fd; /* double links -- used only if free. */ + struct malloc_chunk* bk; +}; + +typedef struct malloc_chunk mchunk; +typedef struct malloc_chunk* mchunkptr; +typedef struct malloc_chunk* sbinptr; /* The type of bins of chunks */ +typedef unsigned int bindex_t; /* Described below */ +typedef unsigned int binmap_t; /* Described below */ +typedef unsigned int flag_t; /* The type of various bit flag sets */ + +/* ------------------- Chunks sizes and alignments ----------------------- */ + +#define MCHUNK_SIZE (sizeof(mchunk)) + +#if FOOTERS +#define CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) +#else /* FOOTERS */ +#define CHUNK_OVERHEAD (SIZE_T_SIZE) +#endif /* FOOTERS */ + +/* MMapped chunks need a second word of overhead ... */ +#define MMAP_CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) +/* ... and additional padding for fake next-chunk at foot */ +#define MMAP_FOOT_PAD (FOUR_SIZE_T_SIZES) + +/* The smallest size we can malloc is an aligned minimal chunk */ +#define MIN_CHUNK_SIZE\ + ((MCHUNK_SIZE + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) + +/* conversion from malloc headers to user pointers, and back */ +#define chunk2mem(p) ((void*)((char*)(p) + TWO_SIZE_T_SIZES)) +#define mem2chunk(mem) ((mchunkptr)((char*)(mem) - TWO_SIZE_T_SIZES)) +/* chunk associated with aligned address A */ +#define align_as_chunk(A) (mchunkptr)((A) + align_offset(chunk2mem(A))) + +/* Bounds on request (not chunk) sizes. */ +#define MAX_REQUEST ((-MIN_CHUNK_SIZE) << 2) +#define MIN_REQUEST (MIN_CHUNK_SIZE - CHUNK_OVERHEAD - SIZE_T_ONE) + +/* pad request bytes into a usable size */ +#define pad_request(req) \ + (((req) + CHUNK_OVERHEAD + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) + +/* pad request, checking for minimum (but not maximum) */ +#define request2size(req) \ + (((req) < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(req)) + + +/* ------------------ Operations on head and foot fields ----------------- */ + +/* + The head field of a chunk is or'ed with PINUSE_BIT when previous + adjacent chunk in use, and or'ed with CINUSE_BIT if this chunk is in + use, unless mmapped, in which case both bits are cleared. + + FLAG4_BIT is not used by this malloc, but might be useful in extensions. +*/ + +#define PINUSE_BIT (SIZE_T_ONE) +#define CINUSE_BIT (SIZE_T_TWO) +#define FLAG4_BIT (SIZE_T_FOUR) +#define INUSE_BITS (PINUSE_BIT|CINUSE_BIT) +#define FLAG_BITS (PINUSE_BIT|CINUSE_BIT|FLAG4_BIT) + +/* Head value for fenceposts */ +#define FENCEPOST_HEAD (INUSE_BITS|SIZE_T_SIZE) + +/* extraction of fields from head words */ +#define cinuse(p) ((p)->head & CINUSE_BIT) +#define pinuse(p) ((p)->head & PINUSE_BIT) +#define flag4inuse(p) ((p)->head & FLAG4_BIT) +#define is_inuse(p) (((p)->head & INUSE_BITS) != PINUSE_BIT) +#define is_mmapped(p) (((p)->head & INUSE_BITS) == 0) + +#define chunksize(p) ((p)->head & ~(FLAG_BITS)) + +#define clear_pinuse(p) ((p)->head &= ~PINUSE_BIT) +#define set_flag4(p) ((p)->head |= FLAG4_BIT) +#define clear_flag4(p) ((p)->head &= ~FLAG4_BIT) + +/* Treat space at ptr +/- offset as a chunk */ +#define chunk_plus_offset(p, s) ((mchunkptr)(((char*)(p)) + (s))) +#define chunk_minus_offset(p, s) ((mchunkptr)(((char*)(p)) - (s))) + +/* Ptr to next or previous physical malloc_chunk. */ +#define next_chunk(p) ((mchunkptr)( ((char*)(p)) + ((p)->head & ~FLAG_BITS))) +#define prev_chunk(p) ((mchunkptr)( ((char*)(p)) - ((p)->prev_foot) )) + +/* extract next chunk's pinuse bit */ +#define next_pinuse(p) ((next_chunk(p)->head) & PINUSE_BIT) + +/* Get/set size at footer */ +#define get_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot) +#define set_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot = (s)) + +/* Set size, pinuse bit, and foot */ +#define set_size_and_pinuse_of_free_chunk(p, s)\ + ((p)->head = (s|PINUSE_BIT), set_foot(p, s)) + +/* Set size, pinuse bit, foot, and clear next pinuse */ +#define set_free_with_pinuse(p, s, n)\ + (clear_pinuse(n), set_size_and_pinuse_of_free_chunk(p, s)) + +/* Get the internal overhead associated with chunk p */ +#define overhead_for(p)\ + (is_mmapped(p)? MMAP_CHUNK_OVERHEAD : CHUNK_OVERHEAD) + +/* Return true if malloced space is not necessarily cleared */ +#if MMAP_CLEARS +#define calloc_must_clear(p) (!is_mmapped(p)) +#else /* MMAP_CLEARS */ +#define calloc_must_clear(p) (1) +#endif /* MMAP_CLEARS */ + +/* ---------------------- Overlaid data structures ----------------------- */ + +/* + When chunks are not in use, they are treated as nodes of either + lists or trees. + + "Small" chunks are stored in circular doubly-linked lists, and look + like this: + + chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Size of previous chunk | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + `head:' | Size of chunk, in bytes |P| + mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Forward pointer to next chunk in list | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Back pointer to previous chunk in list | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Unused space (may be 0 bytes long) . + . . + . | +nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + `foot:' | Size of chunk, in bytes | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Larger chunks are kept in a form of bitwise digital trees (aka + tries) keyed on chunksizes. Because malloc_tree_chunks are only for + free chunks greater than 256 bytes, their size doesn't impose any + constraints on user chunk sizes. Each node looks like: + + chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Size of previous chunk | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + `head:' | Size of chunk, in bytes |P| + mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Forward pointer to next chunk of same size | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Back pointer to previous chunk of same size | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Pointer to left child (child[0]) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Pointer to right child (child[1]) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Pointer to parent | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | bin index of this chunk | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Unused space . + . | +nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + `foot:' | Size of chunk, in bytes | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Each tree holding treenodes is a tree of unique chunk sizes. Chunks + of the same size are arranged in a circularly-linked list, with only + the oldest chunk (the next to be used, in our FIFO ordering) + actually in the tree. (Tree members are distinguished by a non-null + parent pointer.) If a chunk with the same size an an existing node + is inserted, it is linked off the existing node using pointers that + work in the same way as fd/bk pointers of small chunks. + + Each tree contains a power of 2 sized range of chunk sizes (the + smallest is 0x100 <= x < 0x180), which is is divided in half at each + tree level, with the chunks in the smaller half of the range (0x100 + <= x < 0x140 for the top nose) in the left subtree and the larger + half (0x140 <= x < 0x180) in the right subtree. This is, of course, + done by inspecting individual bits. + + Using these rules, each node's left subtree contains all smaller + sizes than its right subtree. However, the node at the root of each + subtree has no particular ordering relationship to either. (The + dividing line between the subtree sizes is based on trie relation.) + If we remove the last chunk of a given size from the interior of the + tree, we need to replace it with a leaf node. The tree ordering + rules permit a node to be replaced by any leaf below it. + + The smallest chunk in a tree (a common operation in a best-fit + allocator) can be found by walking a path to the leftmost leaf in + the tree. Unlike a usual binary tree, where we follow left child + pointers until we reach a null, here we follow the right child + pointer any time the left one is null, until we reach a leaf with + both child pointers null. The smallest chunk in the tree will be + somewhere along that path. + + The worst case number of steps to add, find, or remove a node is + bounded by the number of bits differentiating chunks within + bins. Under current bin calculations, this ranges from 6 up to 21 + (for 32 bit sizes) or up to 53 (for 64 bit sizes). The typical case + is of course much better. +*/ + +struct malloc_tree_chunk { + /* The first four fields must be compatible with malloc_chunk */ + size_t prev_foot; + size_t head; + struct malloc_tree_chunk* fd; + struct malloc_tree_chunk* bk; + + struct malloc_tree_chunk* child[2]; + struct malloc_tree_chunk* parent; + bindex_t index; +}; + +typedef struct malloc_tree_chunk tchunk; +typedef struct malloc_tree_chunk* tchunkptr; +typedef struct malloc_tree_chunk* tbinptr; /* The type of bins of trees */ + +/* A little helper macro for trees */ +#define leftmost_child(t) ((t)->child[0] != 0? (t)->child[0] : (t)->child[1]) + +/* ----------------------------- Segments -------------------------------- */ + +/* + Each malloc space may include non-contiguous segments, held in a + list headed by an embedded malloc_segment record representing the + top-most space. Segments also include flags holding properties of + the space. Large chunks that are directly allocated by mmap are not + included in this list. They are instead independently created and + destroyed without otherwise keeping track of them. + + Segment management mainly comes into play for spaces allocated by + MMAP. Any call to MMAP might or might not return memory that is + adjacent to an existing segment. MORECORE normally contiguously + extends the current space, so this space is almost always adjacent, + which is simpler and faster to deal with. (This is why MORECORE is + used preferentially to MMAP when both are available -- see + sys_alloc.) When allocating using MMAP, we don't use any of the + hinting mechanisms (inconsistently) supported in various + implementations of unix mmap, or distinguish reserving from + committing memory. Instead, we just ask for space, and exploit + contiguity when we get it. It is probably possible to do + better than this on some systems, but no general scheme seems + to be significantly better. + + Management entails a simpler variant of the consolidation scheme + used for chunks to reduce fragmentation -- new adjacent memory is + normally prepended or appended to an existing segment. However, + there are limitations compared to chunk consolidation that mostly + reflect the fact that segment processing is relatively infrequent + (occurring only when getting memory from system) and that we + don't expect to have huge numbers of segments: + + * Segments are not indexed, so traversal requires linear scans. (It + would be possible to index these, but is not worth the extra + overhead and complexity for most programs on most platforms.) + * New segments are only appended to old ones when holding top-most + memory; if they cannot be prepended to others, they are held in + different segments. + + Except for the top-most segment of an mstate, each segment record + is kept at the tail of its segment. Segments are added by pushing + segment records onto the list headed by &mstate.seg for the + containing mstate. + + Segment flags control allocation/merge/deallocation policies: + * If EXTERN_BIT set, then we did not allocate this segment, + and so should not try to deallocate or merge with others. + (This currently holds only for the initial segment passed + into create_mspace_with_base.) + * If USE_MMAP_BIT set, the segment may be merged with + other surrounding mmapped segments and trimmed/de-allocated + using munmap. + * If neither bit is set, then the segment was obtained using + MORECORE so can be merged with surrounding MORECORE'd segments + and deallocated/trimmed using MORECORE with negative arguments. +*/ + +struct malloc_segment { + char* base; /* base address */ + size_t size; /* allocated size */ + struct malloc_segment* next; /* ptr to next segment */ + flag_t sflags; /* mmap and extern flag */ +}; + +#define is_mmapped_segment(S) ((S)->sflags & USE_MMAP_BIT) +#define is_extern_segment(S) ((S)->sflags & EXTERN_BIT) + +typedef struct malloc_segment msegment; +typedef struct malloc_segment* msegmentptr; + +/* ---------------------------- malloc_state ----------------------------- */ + +/* + A malloc_state holds all of the bookkeeping for a space. + The main fields are: + + Top + The topmost chunk of the currently active segment. Its size is + cached in topsize. The actual size of topmost space is + topsize+TOP_FOOT_SIZE, which includes space reserved for adding + fenceposts and segment records if necessary when getting more + space from the system. The size at which to autotrim top is + cached from mparams in trim_check, except that it is disabled if + an autotrim fails. + + Designated victim (dv) + This is the preferred chunk for servicing small requests that + don't have exact fits. It is normally the chunk split off most + recently to service another small request. Its size is cached in + dvsize. The link fields of this chunk are not maintained since it + is not kept in a bin. + + SmallBins + An array of bin headers for free chunks. These bins hold chunks + with sizes less than MIN_LARGE_SIZE bytes. Each bin contains + chunks of all the same size, spaced 8 bytes apart. To simplify + use in double-linked lists, each bin header acts as a malloc_chunk + pointing to the real first node, if it exists (else pointing to + itself). This avoids special-casing for headers. But to avoid + waste, we allocate only the fd/bk pointers of bins, and then use + repositioning tricks to treat these as the fields of a chunk. + + TreeBins + Treebins are pointers to the roots of trees holding a range of + sizes. There are 2 equally spaced treebins for each power of two + from TREE_SHIFT to TREE_SHIFT+16. The last bin holds anything + larger. + + Bin maps + There is one bit map for small bins ("smallmap") and one for + treebins ("treemap). Each bin sets its bit when non-empty, and + clears the bit when empty. Bit operations are then used to avoid + bin-by-bin searching -- nearly all "search" is done without ever + looking at bins that won't be selected. The bit maps + conservatively use 32 bits per map word, even if on 64bit system. + For a good description of some of the bit-based techniques used + here, see Henry S. Warren Jr's book "Hacker's Delight" (and + supplement at http://hackersdelight.org/). Many of these are + intended to reduce the branchiness of paths through malloc etc, as + well as to reduce the number of memory locations read or written. + + Segments + A list of segments headed by an embedded malloc_segment record + representing the initial space. + + Address check support + The least_addr field is the least address ever obtained from + MORECORE or MMAP. Attempted frees and reallocs of any address less + than this are trapped (unless INSECURE is defined). + + Magic tag + A cross-check field that should always hold same value as mparams.magic. + + Max allowed footprint + The maximum allowed bytes to allocate from system (zero means no limit) + + Flags + Bits recording whether to use MMAP, locks, or contiguous MORECORE + + Statistics + Each space keeps track of current and maximum system memory + obtained via MORECORE or MMAP. + + Trim support + Fields holding the amount of unused topmost memory that should trigger + trimming, and a counter to force periodic scanning to release unused + non-topmost segments. + + Locking + If USE_LOCKS is defined, the "mutex" lock is acquired and released + around every public call using this mspace. + + Extension support + A void* pointer and a size_t field that can be used to help implement + extensions to this malloc. +*/ + +/* Bin types, widths and sizes */ +#define NSMALLBINS (32U) +#define NTREEBINS (32U) +#define SMALLBIN_SHIFT (3U) +#define SMALLBIN_WIDTH (SIZE_T_ONE << SMALLBIN_SHIFT) +#define TREEBIN_SHIFT (8U) +#define MIN_LARGE_SIZE (SIZE_T_ONE << TREEBIN_SHIFT) +#define MAX_SMALL_SIZE (MIN_LARGE_SIZE - SIZE_T_ONE) +#define MAX_SMALL_REQUEST (MAX_SMALL_SIZE - CHUNK_ALIGN_MASK - CHUNK_OVERHEAD) + +struct malloc_state { + binmap_t smallmap; + binmap_t treemap; + size_t dvsize; + size_t topsize; + char* least_addr; + mchunkptr dv; + mchunkptr top; + size_t trim_check; + size_t release_checks; + size_t magic; + mchunkptr smallbins[(NSMALLBINS+1)*2]; + tbinptr treebins[NTREEBINS]; + size_t footprint; + size_t max_footprint; + size_t footprint_limit; /* zero means no limit */ + flag_t mflags; +#if USE_LOCKS + MLOCK_T mutex; /* locate lock among fields that rarely change */ +#endif /* USE_LOCKS */ + msegment seg; + void* extp; /* Unused but available for extensions */ + size_t exts; +}; + +typedef struct malloc_state* mstate; + +/* ------------- Global malloc_state and malloc_params ------------------- */ + +/* + malloc_params holds global properties, including those that can be + dynamically set using mallopt. There is a single instance, mparams, + initialized in init_mparams. Note that the non-zeroness of "magic" + also serves as an initialization flag. +*/ + +struct malloc_params { + size_t magic; + size_t page_size; + size_t granularity; + size_t mmap_threshold; + size_t trim_threshold; + flag_t default_mflags; +}; + +static struct malloc_params mparams; + +/* Ensure mparams initialized */ +#define ensure_initialization() (void)(mparams.magic != 0 || init_mparams()) + +#if !ONLY_MSPACES + +/* The global malloc_state used for all non-"mspace" calls */ +static struct malloc_state _gm_; +#define gm (&_gm_) +#define is_global(M) ((M) == &_gm_) + +#endif /* !ONLY_MSPACES */ + +#define is_initialized(M) ((M)->top != 0) + +/* -------------------------- system alloc setup ------------------------- */ + +/* Operations on mflags */ + +#define use_lock(M) ((M)->mflags & USE_LOCK_BIT) +#define enable_lock(M) ((M)->mflags |= USE_LOCK_BIT) +#if USE_LOCKS +#define disable_lock(M) ((M)->mflags &= ~USE_LOCK_BIT) +#else +#define disable_lock(M) +#endif + +#define use_mmap(M) ((M)->mflags & USE_MMAP_BIT) +#define enable_mmap(M) ((M)->mflags |= USE_MMAP_BIT) +#if HAVE_MMAP +#define disable_mmap(M) ((M)->mflags &= ~USE_MMAP_BIT) +#else +#define disable_mmap(M) +#endif + +#define use_noncontiguous(M) ((M)->mflags & USE_NONCONTIGUOUS_BIT) +#define disable_contiguous(M) ((M)->mflags |= USE_NONCONTIGUOUS_BIT) + +#define set_lock(M,L)\ + ((M)->mflags = (L)?\ + ((M)->mflags | USE_LOCK_BIT) :\ + ((M)->mflags & ~USE_LOCK_BIT)) + +/* page-align a size */ +#define page_align(S)\ + (((S) + (mparams.page_size - SIZE_T_ONE)) & ~(mparams.page_size - SIZE_T_ONE)) + +/* granularity-align a size */ +#define granularity_align(S)\ + (((S) + (mparams.granularity - SIZE_T_ONE))\ + & ~(mparams.granularity - SIZE_T_ONE)) + + +/* For mmap, use granularity alignment on windows, else page-align */ +#ifdef WIN32 +#define mmap_align(S) granularity_align(S) +#else +#define mmap_align(S) page_align(S) +#endif + +/* For sys_alloc, enough padding to ensure can malloc request on success */ +#define SYS_ALLOC_PADDING (TOP_FOOT_SIZE + MALLOC_ALIGNMENT) + +#define is_page_aligned(S)\ + (((size_t)(S) & (mparams.page_size - SIZE_T_ONE)) == 0) +#define is_granularity_aligned(S)\ + (((size_t)(S) & (mparams.granularity - SIZE_T_ONE)) == 0) + +/* True if segment S holds address A */ +#define segment_holds(S, A)\ + ((char*)(A) >= S->base && (char*)(A) < S->base + S->size) + +/* Return segment holding given address */ +static msegmentptr segment_holding(mstate m, char* addr) { + msegmentptr sp = &m->seg; + for (;;) { + if (addr >= sp->base && addr < sp->base + sp->size) + return sp; + if ((sp = sp->next) == 0) + return 0; + } +} + +/* Return true if segment contains a segment link */ +static int has_segment_link(mstate m, msegmentptr ss) { + msegmentptr sp = &m->seg; + for (;;) { + if ((char*)sp >= ss->base && (char*)sp < ss->base + ss->size) + return 1; + if ((sp = sp->next) == 0) + return 0; + } +} + +#ifndef MORECORE_CANNOT_TRIM +#define should_trim(M,s) ((s) > (M)->trim_check) +#else /* MORECORE_CANNOT_TRIM */ +#define should_trim(M,s) (0) +#endif /* MORECORE_CANNOT_TRIM */ + +/* + TOP_FOOT_SIZE is padding at the end of a segment, including space + that may be needed to place segment records and fenceposts when new + noncontiguous segments are added. +*/ +#define TOP_FOOT_SIZE\ + (align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE) + + +/* ------------------------------- Hooks -------------------------------- */ + +/* + PREACTION should be defined to return 0 on success, and nonzero on + failure. If you are not using locking, you can redefine these to do + anything you like. +*/ + +#if USE_LOCKS +#define PREACTION(M) ((use_lock(M))? ACQUIRE_LOCK(&(M)->mutex) : 0) +#define POSTACTION(M) { if (use_lock(M)) RELEASE_LOCK(&(M)->mutex); } +#else /* USE_LOCKS */ + +#ifndef PREACTION +#define PREACTION(M) (0) +#endif /* PREACTION */ + +#ifndef POSTACTION +#define POSTACTION(M) +#endif /* POSTACTION */ + +#endif /* USE_LOCKS */ + +/* + CORRUPTION_ERROR_ACTION is triggered upon detected bad addresses. + USAGE_ERROR_ACTION is triggered on detected bad frees and + reallocs. The argument p is an address that might have triggered the + fault. It is ignored by the two predefined actions, but might be + useful in custom actions that try to help diagnose errors. +*/ + +#if PROCEED_ON_ERROR + +/* A count of the number of corruption errors causing resets */ +int malloc_corruption_error_count; + +/* default corruption action */ +static void reset_on_error(mstate m); + +#define CORRUPTION_ERROR_ACTION(m) reset_on_error(m) +#define USAGE_ERROR_ACTION(m, p) + +#else /* PROCEED_ON_ERROR */ + +#ifndef CORRUPTION_ERROR_ACTION +#define CORRUPTION_ERROR_ACTION(m) ABORT +#endif /* CORRUPTION_ERROR_ACTION */ + +#ifndef USAGE_ERROR_ACTION +#define USAGE_ERROR_ACTION(m,p) ABORT +#endif /* USAGE_ERROR_ACTION */ + +#endif /* PROCEED_ON_ERROR */ + + +/* -------------------------- Debugging setup ---------------------------- */ + +#if ! DEBUG + +#define check_free_chunk(M,P) +#define check_inuse_chunk(M,P) +#define check_malloced_chunk(M,P,N) +#define check_mmapped_chunk(M,P) +#define check_malloc_state(M) +#define check_top_chunk(M,P) + +#else /* DEBUG */ +#define check_free_chunk(M,P) do_check_free_chunk(M,P) +#define check_inuse_chunk(M,P) do_check_inuse_chunk(M,P) +#define check_top_chunk(M,P) do_check_top_chunk(M,P) +#define check_malloced_chunk(M,P,N) do_check_malloced_chunk(M,P,N) +#define check_mmapped_chunk(M,P) do_check_mmapped_chunk(M,P) +#define check_malloc_state(M) do_check_malloc_state(M) + +static void do_check_any_chunk(mstate m, mchunkptr p); +static void do_check_top_chunk(mstate m, mchunkptr p); +static void do_check_mmapped_chunk(mstate m, mchunkptr p); +static void do_check_inuse_chunk(mstate m, mchunkptr p); +static void do_check_free_chunk(mstate m, mchunkptr p); +static void do_check_malloced_chunk(mstate m, void* mem, size_t s); +static void do_check_tree(mstate m, tchunkptr t); +static void do_check_treebin(mstate m, bindex_t i); +static void do_check_smallbin(mstate m, bindex_t i); +static void do_check_malloc_state(mstate m); +static int bin_find(mstate m, mchunkptr x); +static size_t traverse_and_check(mstate m); +#endif /* DEBUG */ + +/* ---------------------------- Indexing Bins ---------------------------- */ + +#define is_small(s) (((s) >> SMALLBIN_SHIFT) < NSMALLBINS) +#define small_index(s) (bindex_t)((s) >> SMALLBIN_SHIFT) +#define small_index2size(i) ((i) << SMALLBIN_SHIFT) +#define MIN_SMALL_INDEX (small_index(MIN_CHUNK_SIZE)) + +/* addressing by index. See above about smallbin repositioning */ +#define smallbin_at(M, i) ((sbinptr)((char*)&((M)->smallbins[(i)<<1]))) +#define treebin_at(M,i) (&((M)->treebins[i])) + +/* assign tree index for size S to variable I. Use x86 asm if possible */ +#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) +#define compute_tree_index(S, I)\ +{\ + unsigned int X = S >> TREEBIN_SHIFT;\ + if (X == 0)\ + I = 0;\ + else if (X > 0xFFFF)\ + I = NTREEBINS-1;\ + else {\ + unsigned int K = (unsigned) sizeof(X)*__CHAR_BIT__ - 1 - (unsigned) __builtin_clz(X); \ + I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\ + }\ +} + +#elif defined (__INTEL_COMPILER) +#define compute_tree_index(S, I)\ +{\ + size_t X = S >> TREEBIN_SHIFT;\ + if (X == 0)\ + I = 0;\ + else if (X > 0xFFFF)\ + I = NTREEBINS-1;\ + else {\ + unsigned int K = _bit_scan_reverse (X); \ + I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\ + }\ +} + +#elif defined(_MSC_VER) && _MSC_VER>=1300 +#define compute_tree_index(S, I)\ +{\ + size_t X = S >> TREEBIN_SHIFT;\ + if (X == 0)\ + I = 0;\ + else if (X > 0xFFFF)\ + I = NTREEBINS-1;\ + else {\ + unsigned int K;\ + _BitScanReverse((DWORD *) &K, (DWORD) X);\ + I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\ + }\ +} + +#else /* GNUC */ +#define compute_tree_index(S, I)\ +{\ + size_t X = S >> TREEBIN_SHIFT;\ + if (X == 0)\ + I = 0;\ + else if (X > 0xFFFF)\ + I = NTREEBINS-1;\ + else {\ + unsigned int Y = (unsigned int)X;\ + unsigned int N = ((Y - 0x100) >> 16) & 8;\ + unsigned int K = (((Y <<= N) - 0x1000) >> 16) & 4;\ + N += K;\ + N += K = (((Y <<= K) - 0x4000) >> 16) & 2;\ + K = 14 - N + ((Y <<= K) >> 15);\ + I = (K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1));\ + }\ +} +#endif /* GNUC */ + +/* Bit representing maximum resolved size in a treebin at i */ +#define bit_for_tree_index(i) \ + (i == NTREEBINS-1)? (SIZE_T_BITSIZE-1) : (((i) >> 1) + TREEBIN_SHIFT - 2) + +/* Shift placing maximum resolved bit in a treebin at i as sign bit */ +#define leftshift_for_tree_index(i) \ + ((i == NTREEBINS-1)? 0 : \ + ((SIZE_T_BITSIZE-SIZE_T_ONE) - (((i) >> 1) + TREEBIN_SHIFT - 2))) + +/* The size of the smallest chunk held in bin with index i */ +#define minsize_for_tree_index(i) \ + ((SIZE_T_ONE << (((i) >> 1) + TREEBIN_SHIFT)) | \ + (((size_t)((i) & SIZE_T_ONE)) << (((i) >> 1) + TREEBIN_SHIFT - 1))) + + +/* ------------------------ Operations on bin maps ----------------------- */ + +/* bit corresponding to given index */ +#define idx2bit(i) ((binmap_t)(1) << (i)) + +/* Mark/Clear bits with given index */ +#define mark_smallmap(M,i) ((M)->smallmap |= idx2bit(i)) +#define clear_smallmap(M,i) ((M)->smallmap &= ~idx2bit(i)) +#define smallmap_is_marked(M,i) ((M)->smallmap & idx2bit(i)) + +#define mark_treemap(M,i) ((M)->treemap |= idx2bit(i)) +#define clear_treemap(M,i) ((M)->treemap &= ~idx2bit(i)) +#define treemap_is_marked(M,i) ((M)->treemap & idx2bit(i)) + +/* isolate the least set bit of a bitmap */ +#define least_bit(x) ((x) & -(x)) + +/* mask with all bits to left of least bit of x on */ +#define left_bits(x) ((x<<1) | -(x<<1)) + +/* mask with all bits to left of or equal to least bit of x on */ +#define same_or_left_bits(x) ((x) | -(x)) + +/* index corresponding to given bit. Use x86 asm if possible */ + +#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) +#define compute_bit2idx(X, I)\ +{\ + unsigned int J;\ + J = __builtin_ctz(X); \ + I = (bindex_t)J;\ +} + +#elif defined (__INTEL_COMPILER) +#define compute_bit2idx(X, I)\ +{\ + unsigned int J;\ + J = _bit_scan_forward (X); \ + I = (bindex_t)J;\ +} + +#elif defined(_MSC_VER) && _MSC_VER>=1300 +#define compute_bit2idx(X, I)\ +{\ + unsigned int J;\ + _BitScanForward((DWORD *) &J, X);\ + I = (bindex_t)J;\ +} + +#elif USE_BUILTIN_FFS +#define compute_bit2idx(X, I) I = ffs(X)-1 + +#else +#define compute_bit2idx(X, I)\ +{\ + unsigned int Y = X - 1;\ + unsigned int K = Y >> (16-4) & 16;\ + unsigned int N = K; Y >>= K;\ + N += K = Y >> (8-3) & 8; Y >>= K;\ + N += K = Y >> (4-2) & 4; Y >>= K;\ + N += K = Y >> (2-1) & 2; Y >>= K;\ + N += K = Y >> (1-0) & 1; Y >>= K;\ + I = (bindex_t)(N + Y);\ +} +#endif /* GNUC */ + + +/* ----------------------- Runtime Check Support ------------------------- */ + +/* + For security, the main invariant is that malloc/free/etc never + writes to a static address other than malloc_state, unless static + malloc_state itself has been corrupted, which cannot occur via + malloc (because of these checks). In essence this means that we + believe all pointers, sizes, maps etc held in malloc_state, but + check all of those linked or offsetted from other embedded data + structures. These checks are interspersed with main code in a way + that tends to minimize their run-time cost. + + When FOOTERS is defined, in addition to range checking, we also + verify footer fields of inuse chunks, which can be used guarantee + that the mstate controlling malloc/free is intact. This is a + streamlined version of the approach described by William Robertson + et al in "Run-time Detection of Heap-based Overflows" LISA'03 + http://www.usenix.org/events/lisa03/tech/robertson.html The footer + of an inuse chunk holds the xor of its mstate and a random seed, + that is checked upon calls to free() and realloc(). This is + (probabalistically) unguessable from outside the program, but can be + computed by any code successfully malloc'ing any chunk, so does not + itself provide protection against code that has already broken + security through some other means. Unlike Robertson et al, we + always dynamically check addresses of all offset chunks (previous, + next, etc). This turns out to be cheaper than relying on hashes. +*/ + +#if !INSECURE +/* Check if address a is at least as high as any from MORECORE or MMAP */ +#define ok_address(M, a) ((char*)(a) >= (M)->least_addr) +/* Check if address of next chunk n is higher than base chunk p */ +#define ok_next(p, n) ((char*)(p) < (char*)(n)) +/* Check if p has inuse status */ +#define ok_inuse(p) is_inuse(p) +/* Check if p has its pinuse bit on */ +#define ok_pinuse(p) pinuse(p) + +#else /* !INSECURE */ +#define ok_address(M, a) (1) +#define ok_next(b, n) (1) +#define ok_inuse(p) (1) +#define ok_pinuse(p) (1) +#endif /* !INSECURE */ + +#if (FOOTERS && !INSECURE) +/* Check if (alleged) mstate m has expected magic field */ +#define ok_magic(M) ((M)->magic == mparams.magic) +#else /* (FOOTERS && !INSECURE) */ +#define ok_magic(M) (1) +#endif /* (FOOTERS && !INSECURE) */ + +/* In gcc, use __builtin_expect to minimize impact of checks */ +#if !INSECURE +#if defined(__GNUC__) && __GNUC__ >= 3 +#define RTCHECK(e) __builtin_expect(e, 1) +#else /* GNUC */ +#define RTCHECK(e) (e) +#endif /* GNUC */ +#else /* !INSECURE */ +#define RTCHECK(e) (1) +#endif /* !INSECURE */ + +/* macros to set up inuse chunks with or without footers */ + +#if !FOOTERS + +#define mark_inuse_foot(M,p,s) + +/* Macros for setting head/foot of non-mmapped chunks */ + +/* Set cinuse bit and pinuse bit of next chunk */ +#define set_inuse(M,p,s)\ + ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ + ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) + +/* Set cinuse and pinuse of this chunk and pinuse of next chunk */ +#define set_inuse_and_pinuse(M,p,s)\ + ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ + ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) + +/* Set size, cinuse and pinuse bit of this chunk */ +#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ + ((p)->head = (s|PINUSE_BIT|CINUSE_BIT)) + +#else /* FOOTERS */ + +/* Set foot of inuse chunk to be xor of mstate and seed */ +#define mark_inuse_foot(M,p,s)\ + (((mchunkptr)((char*)(p) + (s)))->prev_foot = ((size_t)(M) ^ mparams.magic)) + +#define get_mstate_for(p)\ + ((mstate)(((mchunkptr)((char*)(p) +\ + (chunksize(p))))->prev_foot ^ mparams.magic)) + +#define set_inuse(M,p,s)\ + ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ + (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT), \ + mark_inuse_foot(M,p,s)) + +#define set_inuse_and_pinuse(M,p,s)\ + ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ + (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT),\ + mark_inuse_foot(M,p,s)) + +#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ + ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ + mark_inuse_foot(M, p, s)) + +#endif /* !FOOTERS */ + +/* ---------------------------- setting mparams -------------------------- */ + +#if LOCK_AT_FORK +static void pre_fork(void) { ACQUIRE_LOCK(&(gm)->mutex); } +static void post_fork_parent(void) { RELEASE_LOCK(&(gm)->mutex); } +static void post_fork_child(void) { INITIAL_LOCK(&(gm)->mutex); } +#endif /* LOCK_AT_FORK */ + +/* Initialize mparams */ +static int init_mparams(void) { +#ifdef NEED_GLOBAL_LOCK_INIT + if (malloc_global_mutex_status <= 0) + init_malloc_global_mutex(); +#endif + + ACQUIRE_MALLOC_GLOBAL_LOCK(); + if (mparams.magic == 0) { + size_t magic; + size_t psize; + size_t gsize; + +#ifndef WIN32 + psize = malloc_getpagesize; + gsize = ((DEFAULT_GRANULARITY != 0)? DEFAULT_GRANULARITY : psize); +#else /* WIN32 */ + { + SYSTEM_INFO system_info; + GetSystemInfo(&system_info); + psize = system_info.dwPageSize; + gsize = ((DEFAULT_GRANULARITY != 0)? + DEFAULT_GRANULARITY : system_info.dwAllocationGranularity); + } +#endif /* WIN32 */ + + /* Sanity-check configuration: + size_t must be unsigned and as wide as pointer type. + ints must be at least 4 bytes. + alignment must be at least 8. + Alignment, min chunk size, and page size must all be powers of 2. + */ + if ((sizeof(size_t) != sizeof(char*)) || + (MAX_SIZE_T < MIN_CHUNK_SIZE) || + (sizeof(int) < 4) || + (MALLOC_ALIGNMENT < (size_t)8U) || + ((MALLOC_ALIGNMENT & (MALLOC_ALIGNMENT-SIZE_T_ONE)) != 0) || + ((MCHUNK_SIZE & (MCHUNK_SIZE-SIZE_T_ONE)) != 0) || + ((gsize & (gsize-SIZE_T_ONE)) != 0) || + ((psize & (psize-SIZE_T_ONE)) != 0)) + ABORT; + mparams.granularity = gsize; + mparams.page_size = psize; + mparams.mmap_threshold = DEFAULT_MMAP_THRESHOLD; + mparams.trim_threshold = DEFAULT_TRIM_THRESHOLD; +#if MORECORE_CONTIGUOUS + mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT; +#else /* MORECORE_CONTIGUOUS */ + mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT|USE_NONCONTIGUOUS_BIT; +#endif /* MORECORE_CONTIGUOUS */ + +#if !ONLY_MSPACES + /* Set up lock for main malloc area */ + gm->mflags = mparams.default_mflags; + (void)INITIAL_LOCK(&gm->mutex); +#endif +#if LOCK_AT_FORK + pthread_atfork(&pre_fork, &post_fork_parent, &post_fork_child); +#endif + + { +#if USE_DEV_RANDOM + int fd; + unsigned char buf[sizeof(size_t)]; + /* Try to use /dev/urandom, else fall back on using time */ + if ((fd = open("/dev/urandom", O_RDONLY)) >= 0 && + read(fd, buf, sizeof(buf)) == sizeof(buf)) { + magic = *((size_t *) buf); + close(fd); + } + else +#endif /* USE_DEV_RANDOM */ +#ifdef WIN32 + magic = (size_t)(GetTickCount() ^ (size_t)0x55555555U); +#elif defined(LACKS_TIME_H) + magic = (size_t)&magic ^ (size_t)0x55555555U; +#else + magic = (size_t)(time(0) ^ (size_t)0x55555555U); +#endif + magic |= (size_t)8U; /* ensure nonzero */ + magic &= ~(size_t)7U; /* improve chances of fault for bad values */ + /* Until memory modes commonly available, use volatile-write */ + (*(volatile size_t *)(&(mparams.magic))) = magic; + } + } + + RELEASE_MALLOC_GLOBAL_LOCK(); + return 1; +} + +/* support for mallopt */ +static int change_mparam(int param_number, int value) { + size_t val; + ensure_initialization(); + val = (value == -1)? MAX_SIZE_T : (size_t)value; + switch(param_number) { + case M_TRIM_THRESHOLD: + mparams.trim_threshold = val; + return 1; + case M_GRANULARITY: + if (val >= mparams.page_size && ((val & (val-1)) == 0)) { + mparams.granularity = val; + return 1; + } + else + return 0; + case M_MMAP_THRESHOLD: + mparams.mmap_threshold = val; + return 1; + default: + return 0; + } +} + +#if DEBUG +/* ------------------------- Debugging Support --------------------------- */ + +/* Check properties of any chunk, whether free, inuse, mmapped etc */ +static void do_check_any_chunk(mstate m, mchunkptr p) { + assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); + assert(ok_address(m, p)); +} + +/* Check properties of top chunk */ +static void do_check_top_chunk(mstate m, mchunkptr p) { + msegmentptr sp = segment_holding(m, (char*)p); + size_t sz = p->head & ~INUSE_BITS; /* third-lowest bit can be set! */ + assert(sp != 0); + assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); + assert(ok_address(m, p)); + assert(sz == m->topsize); + assert(sz > 0); + assert(sz == ((sp->base + sp->size) - (char*)p) - TOP_FOOT_SIZE); + assert(pinuse(p)); + assert(!pinuse(chunk_plus_offset(p, sz))); +} + +/* Check properties of (inuse) mmapped chunks */ +static void do_check_mmapped_chunk(mstate m, mchunkptr p) { + size_t sz = chunksize(p); + size_t len = (sz + (p->prev_foot) + MMAP_FOOT_PAD); + assert(is_mmapped(p)); + assert(use_mmap(m)); + assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); + assert(ok_address(m, p)); + assert(!is_small(sz)); + assert((len & (mparams.page_size-SIZE_T_ONE)) == 0); + assert(chunk_plus_offset(p, sz)->head == FENCEPOST_HEAD); + assert(chunk_plus_offset(p, sz+SIZE_T_SIZE)->head == 0); +} + +/* Check properties of inuse chunks */ +static void do_check_inuse_chunk(mstate m, mchunkptr p) { + do_check_any_chunk(m, p); + assert(is_inuse(p)); + assert(next_pinuse(p)); + /* If not pinuse and not mmapped, previous chunk has OK offset */ + assert(is_mmapped(p) || pinuse(p) || next_chunk(prev_chunk(p)) == p); + if (is_mmapped(p)) + do_check_mmapped_chunk(m, p); +} + +/* Check properties of free chunks */ +static void do_check_free_chunk(mstate m, mchunkptr p) { + size_t sz = chunksize(p); + mchunkptr next = chunk_plus_offset(p, sz); + do_check_any_chunk(m, p); + assert(!is_inuse(p)); + assert(!next_pinuse(p)); + assert (!is_mmapped(p)); + if (p != m->dv && p != m->top) { + if (sz >= MIN_CHUNK_SIZE) { + assert((sz & CHUNK_ALIGN_MASK) == 0); + assert(is_aligned(chunk2mem(p))); + assert(next->prev_foot == sz); + assert(pinuse(p)); + assert (next == m->top || is_inuse(next)); + assert(p->fd->bk == p); + assert(p->bk->fd == p); + } + else /* markers are always of size SIZE_T_SIZE */ + assert(sz == SIZE_T_SIZE); + } +} + +/* Check properties of malloced chunks at the point they are malloced */ +static void do_check_malloced_chunk(mstate m, void* mem, size_t s) { + if (mem != 0) { + mchunkptr p = mem2chunk(mem); + size_t sz = p->head & ~INUSE_BITS; + do_check_inuse_chunk(m, p); + assert((sz & CHUNK_ALIGN_MASK) == 0); + assert(sz >= MIN_CHUNK_SIZE); + assert(sz >= s); + /* unless mmapped, size is less than MIN_CHUNK_SIZE more than request */ + assert(is_mmapped(p) || sz < (s + MIN_CHUNK_SIZE)); + } +} + +/* Check a tree and its subtrees. */ +static void do_check_tree(mstate m, tchunkptr t) { + tchunkptr head = 0; + tchunkptr u = t; + bindex_t tindex = t->index; + size_t tsize = chunksize(t); + bindex_t idx; + compute_tree_index(tsize, idx); + assert(tindex == idx); + assert(tsize >= MIN_LARGE_SIZE); + assert(tsize >= minsize_for_tree_index(idx)); + assert((idx == NTREEBINS-1) || (tsize < minsize_for_tree_index((idx+1)))); + + do { /* traverse through chain of same-sized nodes */ + do_check_any_chunk(m, ((mchunkptr)u)); + assert(u->index == tindex); + assert(chunksize(u) == tsize); + assert(!is_inuse(u)); + assert(!next_pinuse(u)); + assert(u->fd->bk == u); + assert(u->bk->fd == u); + if (u->parent == 0) { + assert(u->child[0] == 0); + assert(u->child[1] == 0); + } + else { + assert(head == 0); /* only one node on chain has parent */ + head = u; + assert(u->parent != u); + assert (u->parent->child[0] == u || + u->parent->child[1] == u || + *((tbinptr*)(u->parent)) == u); + if (u->child[0] != 0) { + assert(u->child[0]->parent == u); + assert(u->child[0] != u); + do_check_tree(m, u->child[0]); + } + if (u->child[1] != 0) { + assert(u->child[1]->parent == u); + assert(u->child[1] != u); + do_check_tree(m, u->child[1]); + } + if (u->child[0] != 0 && u->child[1] != 0) { + assert(chunksize(u->child[0]) < chunksize(u->child[1])); + } + } + u = u->fd; + } while (u != t); + assert(head != 0); +} + +/* Check all the chunks in a treebin. */ +static void do_check_treebin(mstate m, bindex_t i) { + tbinptr* tb = treebin_at(m, i); + tchunkptr t = *tb; + int empty = (m->treemap & (1U << i)) == 0; + if (t == 0) + assert(empty); + if (!empty) + do_check_tree(m, t); +} + +/* Check all the chunks in a smallbin. */ +static void do_check_smallbin(mstate m, bindex_t i) { + sbinptr b = smallbin_at(m, i); + mchunkptr p = b->bk; + unsigned int empty = (m->smallmap & (1U << i)) == 0; + if (p == b) + assert(empty); + if (!empty) { + for (; p != b; p = p->bk) { + size_t size = chunksize(p); + mchunkptr q; + /* each chunk claims to be free */ + do_check_free_chunk(m, p); + /* chunk belongs in bin */ + assert(small_index(size) == i); + assert(p->bk == b || chunksize(p->bk) == chunksize(p)); + /* chunk is followed by an inuse chunk */ + q = next_chunk(p); + if (q->head != FENCEPOST_HEAD) + do_check_inuse_chunk(m, q); + } + } +} + +/* Find x in a bin. Used in other check functions. */ +static int bin_find(mstate m, mchunkptr x) { + size_t size = chunksize(x); + if (is_small(size)) { + bindex_t sidx = small_index(size); + sbinptr b = smallbin_at(m, sidx); + if (smallmap_is_marked(m, sidx)) { + mchunkptr p = b; + do { + if (p == x) + return 1; + } while ((p = p->fd) != b); + } + } + else { + bindex_t tidx; + compute_tree_index(size, tidx); + if (treemap_is_marked(m, tidx)) { + tchunkptr t = *treebin_at(m, tidx); + size_t sizebits = size << leftshift_for_tree_index(tidx); + while (t != 0 && chunksize(t) != size) { + t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; + sizebits <<= 1; + } + if (t != 0) { + tchunkptr u = t; + do { + if (u == (tchunkptr)x) + return 1; + } while ((u = u->fd) != t); + } + } + } + return 0; +} + +/* Traverse each chunk and check it; return total */ +static size_t traverse_and_check(mstate m) { + size_t sum = 0; + if (is_initialized(m)) { + msegmentptr s = &m->seg; + sum += m->topsize + TOP_FOOT_SIZE; + while (s != 0) { + mchunkptr q = align_as_chunk(s->base); + mchunkptr lastq = 0; + assert(pinuse(q)); + while (segment_holds(s, q) && + q != m->top && q->head != FENCEPOST_HEAD) { + sum += chunksize(q); + if (is_inuse(q)) { + assert(!bin_find(m, q)); + do_check_inuse_chunk(m, q); + } + else { + assert(q == m->dv || bin_find(m, q)); + assert(lastq == 0 || is_inuse(lastq)); /* Not 2 consecutive free */ + do_check_free_chunk(m, q); + } + lastq = q; + q = next_chunk(q); + } + s = s->next; + } + } + return sum; +} + + +/* Check all properties of malloc_state. */ +static void do_check_malloc_state(mstate m) { + bindex_t i; + size_t total; + /* check bins */ + for (i = 0; i < NSMALLBINS; ++i) + do_check_smallbin(m, i); + for (i = 0; i < NTREEBINS; ++i) + do_check_treebin(m, i); + + if (m->dvsize != 0) { /* check dv chunk */ + do_check_any_chunk(m, m->dv); + assert(m->dvsize == chunksize(m->dv)); + assert(m->dvsize >= MIN_CHUNK_SIZE); + assert(bin_find(m, m->dv) == 0); + } + + if (m->top != 0) { /* check top chunk */ + do_check_top_chunk(m, m->top); + /*assert(m->topsize == chunksize(m->top)); redundant */ + assert(m->topsize > 0); + assert(bin_find(m, m->top) == 0); + } + + total = traverse_and_check(m); + assert(total <= m->footprint); + assert(m->footprint <= m->max_footprint); +} +#endif /* DEBUG */ + +/* ----------------------------- statistics ------------------------------ */ + +#if !NO_MALLINFO +static struct mallinfo internal_mallinfo(mstate m) { + struct mallinfo nm = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + ensure_initialization(); + if (!PREACTION(m)) { + check_malloc_state(m); + if (is_initialized(m)) { + size_t nfree = SIZE_T_ONE; /* top always free */ + size_t mfree = m->topsize + TOP_FOOT_SIZE; + size_t sum = mfree; + msegmentptr s = &m->seg; + while (s != 0) { + mchunkptr q = align_as_chunk(s->base); + while (segment_holds(s, q) && + q != m->top && q->head != FENCEPOST_HEAD) { + size_t sz = chunksize(q); + sum += sz; + if (!is_inuse(q)) { + mfree += sz; + ++nfree; + } + q = next_chunk(q); + } + s = s->next; + } + + nm.arena = sum; + nm.ordblks = nfree; + nm.hblkhd = m->footprint - sum; + nm.usmblks = m->max_footprint; + nm.uordblks = m->footprint - mfree; + nm.fordblks = mfree; + nm.keepcost = m->topsize; + } + + POSTACTION(m); + } + return nm; +} +#endif /* !NO_MALLINFO */ + +#if !NO_MALLOC_STATS +static void internal_malloc_stats(mstate m) { + ensure_initialization(); + if (!PREACTION(m)) { + size_t maxfp = 0; + size_t fp = 0; + size_t used = 0; + check_malloc_state(m); + if (is_initialized(m)) { + msegmentptr s = &m->seg; + maxfp = m->max_footprint; + fp = m->footprint; + used = fp - (m->topsize + TOP_FOOT_SIZE); + + while (s != 0) { + mchunkptr q = align_as_chunk(s->base); + while (segment_holds(s, q) && + q != m->top && q->head != FENCEPOST_HEAD) { + if (!is_inuse(q)) + used -= chunksize(q); + q = next_chunk(q); + } + s = s->next; + } + } + POSTACTION(m); /* drop lock */ + fprintf(stderr, "max system bytes = %10lu\n", (unsigned long)(maxfp)); + fprintf(stderr, "system bytes = %10lu\n", (unsigned long)(fp)); + fprintf(stderr, "in use bytes = %10lu\n", (unsigned long)(used)); + } +} +#endif /* NO_MALLOC_STATS */ + +/* ----------------------- Operations on smallbins ----------------------- */ + +/* + Various forms of linking and unlinking are defined as macros. Even + the ones for trees, which are very long but have very short typical + paths. This is ugly but reduces reliance on inlining support of + compilers. +*/ + +/* Link a free chunk into a smallbin */ +#define insert_small_chunk(M, P, S) {\ + bindex_t I = small_index(S);\ + mchunkptr B = smallbin_at(M, I);\ + mchunkptr F = B;\ + assert(S >= MIN_CHUNK_SIZE);\ + if (!smallmap_is_marked(M, I))\ + mark_smallmap(M, I);\ + else if (RTCHECK(ok_address(M, B->fd)))\ + F = B->fd;\ + else {\ + CORRUPTION_ERROR_ACTION(M);\ + }\ + B->fd = P;\ + F->bk = P;\ + P->fd = F;\ + P->bk = B;\ +} + +/* Unlink a chunk from a smallbin */ +#define unlink_small_chunk(M, P, S) {\ + mchunkptr F = P->fd;\ + mchunkptr B = P->bk;\ + bindex_t I = small_index(S);\ + assert(P != B);\ + assert(P != F);\ + assert(chunksize(P) == small_index2size(I));\ + if (RTCHECK(F == smallbin_at(M,I) || (ok_address(M, F) && F->bk == P))) { \ + if (B == F) {\ + clear_smallmap(M, I);\ + }\ + else if (RTCHECK(B == smallbin_at(M,I) ||\ + (ok_address(M, B) && B->fd == P))) {\ + F->bk = B;\ + B->fd = F;\ + }\ + else {\ + CORRUPTION_ERROR_ACTION(M);\ + }\ + }\ + else {\ + CORRUPTION_ERROR_ACTION(M);\ + }\ +} + +/* Unlink the first chunk from a smallbin */ +#define unlink_first_small_chunk(M, B, P, I) {\ + mchunkptr F = P->fd;\ + assert(P != B);\ + assert(P != F);\ + assert(chunksize(P) == small_index2size(I));\ + if (B == F) {\ + clear_smallmap(M, I);\ + }\ + else if (RTCHECK(ok_address(M, F) && F->bk == P)) {\ + F->bk = B;\ + B->fd = F;\ + }\ + else {\ + CORRUPTION_ERROR_ACTION(M);\ + }\ +} + +/* Replace dv node, binning the old one */ +/* Used only when dvsize known to be small */ +#define replace_dv(M, P, S) {\ + size_t DVS = M->dvsize;\ + assert(is_small(DVS));\ + if (DVS != 0) {\ + mchunkptr DV = M->dv;\ + insert_small_chunk(M, DV, DVS);\ + }\ + M->dvsize = S;\ + M->dv = P;\ +} + +/* ------------------------- Operations on trees ------------------------- */ + +/* Insert chunk into tree */ +#define insert_large_chunk(M, X, S) {\ + tbinptr* H;\ + bindex_t I;\ + compute_tree_index(S, I);\ + H = treebin_at(M, I);\ + X->index = I;\ + X->child[0] = X->child[1] = 0;\ + if (!treemap_is_marked(M, I)) {\ + mark_treemap(M, I);\ + *H = X;\ + X->parent = (tchunkptr)H;\ + X->fd = X->bk = X;\ + }\ + else {\ + tchunkptr T = *H;\ + size_t K = S << leftshift_for_tree_index(I);\ + for (;;) {\ + if (chunksize(T) != S) {\ + tchunkptr* C = &(T->child[(K >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]);\ + K <<= 1;\ + if (*C != 0)\ + T = *C;\ + else if (RTCHECK(ok_address(M, C))) {\ + *C = X;\ + X->parent = T;\ + X->fd = X->bk = X;\ + break;\ + }\ + else {\ + CORRUPTION_ERROR_ACTION(M);\ + break;\ + }\ + }\ + else {\ + tchunkptr F = T->fd;\ + if (RTCHECK(ok_address(M, T) && ok_address(M, F))) {\ + T->fd = F->bk = X;\ + X->fd = F;\ + X->bk = T;\ + X->parent = 0;\ + break;\ + }\ + else {\ + CORRUPTION_ERROR_ACTION(M);\ + break;\ + }\ + }\ + }\ + }\ +} + +/* + Unlink steps: + + 1. If x is a chained node, unlink it from its same-sized fd/bk links + and choose its bk node as its replacement. + 2. If x was the last node of its size, but not a leaf node, it must + be replaced with a leaf node (not merely one with an open left or + right), to make sure that lefts and rights of descendents + correspond properly to bit masks. We use the rightmost descendent + of x. We could use any other leaf, but this is easy to locate and + tends to counteract removal of leftmosts elsewhere, and so keeps + paths shorter than minimally guaranteed. This doesn't loop much + because on average a node in a tree is near the bottom. + 3. If x is the base of a chain (i.e., has parent links) relink + x's parent and children to x's replacement (or null if none). +*/ + +#define unlink_large_chunk(M, X) {\ + tchunkptr XP = X->parent;\ + tchunkptr R;\ + if (X->bk != X) {\ + tchunkptr F = X->fd;\ + R = X->bk;\ + if (RTCHECK(ok_address(M, F) && F->bk == X && R->fd == X)) {\ + F->bk = R;\ + R->fd = F;\ + }\ + else {\ + CORRUPTION_ERROR_ACTION(M);\ + }\ + }\ + else {\ + tchunkptr* RP;\ + if (((R = *(RP = &(X->child[1]))) != 0) ||\ + ((R = *(RP = &(X->child[0]))) != 0)) {\ + tchunkptr* CP;\ + while ((*(CP = &(R->child[1])) != 0) ||\ + (*(CP = &(R->child[0])) != 0)) {\ + R = *(RP = CP);\ + }\ + if (RTCHECK(ok_address(M, RP)))\ + *RP = 0;\ + else {\ + CORRUPTION_ERROR_ACTION(M);\ + }\ + }\ + }\ + if (XP != 0) {\ + tbinptr* H = treebin_at(M, X->index);\ + if (X == *H) {\ + if ((*H = R) == 0) \ + clear_treemap(M, X->index);\ + }\ + else if (RTCHECK(ok_address(M, XP))) {\ + if (XP->child[0] == X) \ + XP->child[0] = R;\ + else \ + XP->child[1] = R;\ + }\ + else\ + CORRUPTION_ERROR_ACTION(M);\ + if (R != 0) {\ + if (RTCHECK(ok_address(M, R))) {\ + tchunkptr C0, C1;\ + R->parent = XP;\ + if ((C0 = X->child[0]) != 0) {\ + if (RTCHECK(ok_address(M, C0))) {\ + R->child[0] = C0;\ + C0->parent = R;\ + }\ + else\ + CORRUPTION_ERROR_ACTION(M);\ + }\ + if ((C1 = X->child[1]) != 0) {\ + if (RTCHECK(ok_address(M, C1))) {\ + R->child[1] = C1;\ + C1->parent = R;\ + }\ + else\ + CORRUPTION_ERROR_ACTION(M);\ + }\ + }\ + else\ + CORRUPTION_ERROR_ACTION(M);\ + }\ + }\ +} + +/* Relays to large vs small bin operations */ + +#define insert_chunk(M, P, S)\ + if (is_small(S)) insert_small_chunk(M, P, S)\ + else { tchunkptr TP = (tchunkptr)(P); insert_large_chunk(M, TP, S); } + +#define unlink_chunk(M, P, S)\ + if (is_small(S)) unlink_small_chunk(M, P, S)\ + else { tchunkptr TP = (tchunkptr)(P); unlink_large_chunk(M, TP); } + + +/* Relays to internal calls to malloc/free from realloc, memalign etc */ + +#if ONLY_MSPACES +#define internal_malloc(m, b) mspace_malloc(m, b) +#define internal_free(m, mem) mspace_free(m,mem); +#else /* ONLY_MSPACES */ +#if MSPACES +#define internal_malloc(m, b)\ + ((m == gm)? dlmalloc(b) : mspace_malloc(m, b)) +#define internal_free(m, mem)\ + if (m == gm) dlfree(mem); else mspace_free(m,mem); +#else /* MSPACES */ +#define internal_malloc(m, b) dlmalloc(b) +#define internal_free(m, mem) dlfree(mem) +#endif /* MSPACES */ +#endif /* ONLY_MSPACES */ + +/* ----------------------- Direct-mmapping chunks ----------------------- */ + +/* + Directly mmapped chunks are set up with an offset to the start of + the mmapped region stored in the prev_foot field of the chunk. This + allows reconstruction of the required argument to MUNMAP when freed, + and also allows adjustment of the returned chunk to meet alignment + requirements (especially in memalign). +*/ + +/* Malloc using mmap */ +static void* mmap_alloc(mstate m, size_t nb) { + size_t mmsize = mmap_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK); + if (m->footprint_limit != 0) { + size_t fp = m->footprint + mmsize; + if (fp <= m->footprint || fp > m->footprint_limit) + return 0; + } + if (mmsize > nb) { /* Check for wrap around 0 */ + char* mm = (char*)(CALL_DIRECT_MMAP(mmsize)); + if (mm != CMFAIL) { + size_t offset = align_offset(chunk2mem(mm)); + size_t psize = mmsize - offset - MMAP_FOOT_PAD; + mchunkptr p = (mchunkptr)(mm + offset); + p->prev_foot = offset; + p->head = psize; + mark_inuse_foot(m, p, psize); + chunk_plus_offset(p, psize)->head = FENCEPOST_HEAD; + chunk_plus_offset(p, psize+SIZE_T_SIZE)->head = 0; + + if (m->least_addr == 0 || mm < m->least_addr) + m->least_addr = mm; + if ((m->footprint += mmsize) > m->max_footprint) + m->max_footprint = m->footprint; + assert(is_aligned(chunk2mem(p))); + check_mmapped_chunk(m, p); + return chunk2mem(p); + } + } + return 0; +} + +/* Realloc using mmap */ +static mchunkptr mmap_resize(mstate m, mchunkptr oldp, size_t nb, int flags) { + size_t oldsize = chunksize(oldp); + (void)flags; /* placate people compiling -Wunused */ + if (is_small(nb)) /* Can't shrink mmap regions below small size */ + return 0; + /* Keep old chunk if big enough but not too big */ + if (oldsize >= nb + SIZE_T_SIZE && + (oldsize - nb) <= (mparams.granularity << 1)) + return oldp; + else { + size_t offset = oldp->prev_foot; + size_t oldmmsize = oldsize + offset + MMAP_FOOT_PAD; + size_t newmmsize = mmap_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK); + char* cp = (char*)CALL_MREMAP((char*)oldp - offset, + oldmmsize, newmmsize, flags); + if (cp != CMFAIL) { + mchunkptr newp = (mchunkptr)(cp + offset); + size_t psize = newmmsize - offset - MMAP_FOOT_PAD; + newp->head = psize; + mark_inuse_foot(m, newp, psize); + chunk_plus_offset(newp, psize)->head = FENCEPOST_HEAD; + chunk_plus_offset(newp, psize+SIZE_T_SIZE)->head = 0; + + if (cp < m->least_addr) + m->least_addr = cp; + if ((m->footprint += newmmsize - oldmmsize) > m->max_footprint) + m->max_footprint = m->footprint; + check_mmapped_chunk(m, newp); + return newp; + } + } + return 0; +} + + +/* -------------------------- mspace management -------------------------- */ + +/* Initialize top chunk and its size */ +static void init_top(mstate m, mchunkptr p, size_t psize) { + /* Ensure alignment */ + size_t offset = align_offset(chunk2mem(p)); + p = (mchunkptr)((char*)p + offset); + psize -= offset; + + m->top = p; + m->topsize = psize; + p->head = psize | PINUSE_BIT; + /* set size of fake trailing chunk holding overhead space only once */ + chunk_plus_offset(p, psize)->head = TOP_FOOT_SIZE; + m->trim_check = mparams.trim_threshold; /* reset on each update */ +} + +/* Initialize bins for a new mstate that is otherwise zeroed out */ +static void init_bins(mstate m) { + /* Establish circular links for smallbins */ + bindex_t i; + for (i = 0; i < NSMALLBINS; ++i) { + sbinptr bin = smallbin_at(m,i); + bin->fd = bin->bk = bin; + } +} + +#if PROCEED_ON_ERROR + +/* default corruption action */ +static void reset_on_error(mstate m) { + int i; + ++malloc_corruption_error_count; + /* Reinitialize fields to forget about all memory */ + m->smallmap = m->treemap = 0; + m->dvsize = m->topsize = 0; + m->seg.base = 0; + m->seg.size = 0; + m->seg.next = 0; + m->top = m->dv = 0; + for (i = 0; i < NTREEBINS; ++i) + *treebin_at(m, i) = 0; + init_bins(m); +} +#endif /* PROCEED_ON_ERROR */ + +/* Allocate chunk and prepend remainder with chunk in successor base. */ +static void* prepend_alloc(mstate m, char* newbase, char* oldbase, + size_t nb) { + mchunkptr p = align_as_chunk(newbase); + mchunkptr oldfirst = align_as_chunk(oldbase); + size_t psize = (char*)oldfirst - (char*)p; + mchunkptr q = chunk_plus_offset(p, nb); + size_t qsize = psize - nb; + set_size_and_pinuse_of_inuse_chunk(m, p, nb); + + assert((char*)oldfirst > (char*)q); + assert(pinuse(oldfirst)); + assert(qsize >= MIN_CHUNK_SIZE); + + /* consolidate remainder with first chunk of old base */ + if (oldfirst == m->top) { + size_t tsize = m->topsize += qsize; + m->top = q; + q->head = tsize | PINUSE_BIT; + check_top_chunk(m, q); + } + else if (oldfirst == m->dv) { + size_t dsize = m->dvsize += qsize; + m->dv = q; + set_size_and_pinuse_of_free_chunk(q, dsize); + } + else { + if (!is_inuse(oldfirst)) { + size_t nsize = chunksize(oldfirst); + unlink_chunk(m, oldfirst, nsize); + oldfirst = chunk_plus_offset(oldfirst, nsize); + qsize += nsize; + } + set_free_with_pinuse(q, qsize, oldfirst); + insert_chunk(m, q, qsize); + check_free_chunk(m, q); + } + + check_malloced_chunk(m, chunk2mem(p), nb); + return chunk2mem(p); +} + +/* Add a segment to hold a new noncontiguous region */ +static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) { + /* Determine locations and sizes of segment, fenceposts, old top */ + char* old_top = (char*)m->top; + msegmentptr oldsp = segment_holding(m, old_top); + char* old_end = oldsp->base + oldsp->size; + size_t ssize = pad_request(sizeof(struct malloc_segment)); + char* rawsp = old_end - (ssize + FOUR_SIZE_T_SIZES + CHUNK_ALIGN_MASK); + size_t offset = align_offset(chunk2mem(rawsp)); + char* asp = rawsp + offset; + char* csp = (asp < (old_top + MIN_CHUNK_SIZE))? old_top : asp; + mchunkptr sp = (mchunkptr)csp; + msegmentptr ss = (msegmentptr)(chunk2mem(sp)); + mchunkptr tnext = chunk_plus_offset(sp, ssize); + mchunkptr p = tnext; + int nfences = 0; + + /* reset top to new space */ + init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); + + /* Set up segment record */ + assert(is_aligned(ss)); + set_size_and_pinuse_of_inuse_chunk(m, sp, ssize); + *ss = m->seg; /* Push current record */ + m->seg.base = tbase; + m->seg.size = tsize; + m->seg.sflags = mmapped; + m->seg.next = ss; + + /* Insert trailing fenceposts */ + for (;;) { + mchunkptr nextp = chunk_plus_offset(p, SIZE_T_SIZE); + p->head = FENCEPOST_HEAD; + ++nfences; + if ((char*)(&(nextp->head)) < old_end) + p = nextp; + else + break; + } + assert(nfences >= 2); + + /* Insert the rest of old top into a bin as an ordinary free chunk */ + if (csp != old_top) { + mchunkptr q = (mchunkptr)old_top; + size_t psize = csp - old_top; + mchunkptr tn = chunk_plus_offset(q, psize); + set_free_with_pinuse(q, psize, tn); + insert_chunk(m, q, psize); + } + + check_top_chunk(m, m->top); +} + +/* -------------------------- System allocation -------------------------- */ + +/* Get memory from system using MORECORE or MMAP */ +static void* sys_alloc(mstate m, size_t nb) { + char* tbase = CMFAIL; + size_t tsize = 0; + flag_t mmap_flag = 0; + size_t asize; /* allocation size */ + + ensure_initialization(); + + /* Directly map large chunks, but only if already initialized */ + if (use_mmap(m) && nb >= mparams.mmap_threshold && m->topsize != 0) { + void* mem = mmap_alloc(m, nb); + if (mem != 0) + return mem; + } + + asize = granularity_align(nb + SYS_ALLOC_PADDING); + if (asize <= nb) + return 0; /* wraparound */ + if (m->footprint_limit != 0) { + size_t fp = m->footprint + asize; + if (fp <= m->footprint || fp > m->footprint_limit) + return 0; + } + + /* + Try getting memory in any of three ways (in most-preferred to + least-preferred order): + 1. A call to MORECORE that can normally contiguously extend memory. + (disabled if not MORECORE_CONTIGUOUS or not HAVE_MORECORE or + or main space is mmapped or a previous contiguous call failed) + 2. A call to MMAP new space (disabled if not HAVE_MMAP). + Note that under the default settings, if MORECORE is unable to + fulfill a request, and HAVE_MMAP is true, then mmap is + used as a noncontiguous system allocator. This is a useful backup + strategy for systems with holes in address spaces -- in this case + sbrk cannot contiguously expand the heap, but mmap may be able to + find space. + 3. A call to MORECORE that cannot usually contiguously extend memory. + (disabled if not HAVE_MORECORE) + + In all cases, we need to request enough bytes from system to ensure + we can malloc nb bytes upon success, so pad with enough space for + top_foot, plus alignment-pad to make sure we don't lose bytes if + not on boundary, and round this up to a granularity unit. + */ + + if (MORECORE_CONTIGUOUS && !use_noncontiguous(m)) { + char* br = CMFAIL; + size_t ssize = asize; /* sbrk call size */ + msegmentptr ss = (m->top == 0)? 0 : segment_holding(m, (char*)m->top); + ACQUIRE_MALLOC_GLOBAL_LOCK(); + + if (ss == 0) { /* First time through or recovery */ + char* base = (char*)CALL_MORECORE(0); + if (base != CMFAIL) { + size_t fp; + /* Adjust to end on a page boundary */ + if (!is_page_aligned(base)) + ssize += (page_align((size_t)base) - (size_t)base); + fp = m->footprint + ssize; /* recheck limits */ + if (ssize > nb && ssize < HALF_MAX_SIZE_T && + (m->footprint_limit == 0 || + (fp > m->footprint && fp <= m->footprint_limit)) && + (br = (char*)(CALL_MORECORE(ssize))) == base) { + tbase = base; + tsize = ssize; + } + } + } + else { + /* Subtract out existing available top space from MORECORE request. */ + ssize = granularity_align(nb - m->topsize + SYS_ALLOC_PADDING); + /* Use mem here only if it did continuously extend old space */ + if (ssize < HALF_MAX_SIZE_T && + (br = (char*)(CALL_MORECORE(ssize))) == ss->base+ss->size) { + tbase = br; + tsize = ssize; + } + } + + if (tbase == CMFAIL) { /* Cope with partial failure */ + if (br != CMFAIL) { /* Try to use/extend the space we did get */ + if (ssize < HALF_MAX_SIZE_T && + ssize < nb + SYS_ALLOC_PADDING) { + size_t esize = granularity_align(nb + SYS_ALLOC_PADDING - ssize); + if (esize < HALF_MAX_SIZE_T) { + char* end = (char*)CALL_MORECORE(esize); + if (end != CMFAIL) + ssize += esize; + else { /* Can't use; try to release */ + (void) CALL_MORECORE(-ssize); + br = CMFAIL; + } + } + } + } + if (br != CMFAIL) { /* Use the space we did get */ + tbase = br; + tsize = ssize; + } + else + disable_contiguous(m); /* Don't try contiguous path in the future */ + } + + RELEASE_MALLOC_GLOBAL_LOCK(); + } + + if (HAVE_MMAP && tbase == CMFAIL) { /* Try MMAP */ + char* mp = (char*)(CALL_MMAP(asize)); + if (mp != CMFAIL) { + tbase = mp; + tsize = asize; + mmap_flag = USE_MMAP_BIT; + } + } + + if (HAVE_MORECORE && tbase == CMFAIL) { /* Try noncontiguous MORECORE */ + if (asize < HALF_MAX_SIZE_T) { + char* br = CMFAIL; + char* end = CMFAIL; + ACQUIRE_MALLOC_GLOBAL_LOCK(); + br = (char*)(CALL_MORECORE(asize)); + end = (char*)(CALL_MORECORE(0)); + RELEASE_MALLOC_GLOBAL_LOCK(); + if (br != CMFAIL && end != CMFAIL && br < end) { + size_t ssize = end - br; + if (ssize > nb + TOP_FOOT_SIZE) { + tbase = br; + tsize = ssize; + } + } + } + } + + if (tbase != CMFAIL) { + + if ((m->footprint += tsize) > m->max_footprint) + m->max_footprint = m->footprint; + + if (!is_initialized(m)) { /* first-time initialization */ + if (m->least_addr == 0 || tbase < m->least_addr) + m->least_addr = tbase; + m->seg.base = tbase; + m->seg.size = tsize; + m->seg.sflags = mmap_flag; + m->magic = mparams.magic; + m->release_checks = MAX_RELEASE_CHECK_RATE; + init_bins(m); +#if !ONLY_MSPACES + if (is_global(m)) + init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); + else +#endif + { + /* Offset top by embedded malloc_state */ + mchunkptr mn = next_chunk(mem2chunk(m)); + init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) -TOP_FOOT_SIZE); + } + } + + else { + /* Try to merge with an existing segment */ + msegmentptr sp = &m->seg; + /* Only consider most recent segment if traversal suppressed */ + while (sp != 0 && tbase != sp->base + sp->size) + sp = (NO_SEGMENT_TRAVERSAL) ? 0 : sp->next; + if (sp != 0 && + !is_extern_segment(sp) && + (sp->sflags & USE_MMAP_BIT) == mmap_flag && + segment_holds(sp, m->top)) { /* append */ + sp->size += tsize; + init_top(m, m->top, m->topsize + tsize); + } + else { + if (tbase < m->least_addr) + m->least_addr = tbase; + sp = &m->seg; + while (sp != 0 && sp->base != tbase + tsize) + sp = (NO_SEGMENT_TRAVERSAL) ? 0 : sp->next; + if (sp != 0 && + !is_extern_segment(sp) && + (sp->sflags & USE_MMAP_BIT) == mmap_flag) { + char* oldbase = sp->base; + sp->base = tbase; + sp->size += tsize; + return prepend_alloc(m, tbase, oldbase, nb); + } + else + add_segment(m, tbase, tsize, mmap_flag); + } + } + + if (nb < m->topsize) { /* Allocate from new or extended top space */ + size_t rsize = m->topsize -= nb; + mchunkptr p = m->top; + mchunkptr r = m->top = chunk_plus_offset(p, nb); + r->head = rsize | PINUSE_BIT; + set_size_and_pinuse_of_inuse_chunk(m, p, nb); + check_top_chunk(m, m->top); + check_malloced_chunk(m, chunk2mem(p), nb); + return chunk2mem(p); + } + } + + MALLOC_FAILURE_ACTION; + return 0; +} + +/* ----------------------- system deallocation -------------------------- */ + +/* Unmap and unlink any mmapped segments that don't contain used chunks */ +static size_t release_unused_segments(mstate m) { + size_t released = 0; + int nsegs = 0; + msegmentptr pred = &m->seg; + msegmentptr sp = pred->next; + while (sp != 0) { + char* base = sp->base; + size_t size = sp->size; + msegmentptr next = sp->next; + ++nsegs; + if (is_mmapped_segment(sp) && !is_extern_segment(sp)) { + mchunkptr p = align_as_chunk(base); + size_t psize = chunksize(p); + /* Can unmap if first chunk holds entire segment and not pinned */ + if (!is_inuse(p) && (char*)p + psize >= base + size - TOP_FOOT_SIZE) { + tchunkptr tp = (tchunkptr)p; + assert(segment_holds(sp, (char*)sp)); + if (p == m->dv) { + m->dv = 0; + m->dvsize = 0; + } + else { + unlink_large_chunk(m, tp); + } + if (CALL_MUNMAP(base, size) == 0) { + released += size; + m->footprint -= size; + /* unlink obsoleted record */ + sp = pred; + sp->next = next; + } + else { /* back out if cannot unmap */ + insert_large_chunk(m, tp, psize); + } + } + } + if (NO_SEGMENT_TRAVERSAL) /* scan only first segment */ + break; + pred = sp; + sp = next; + } + /* Reset check counter */ + m->release_checks = (((size_t) nsegs > (size_t) MAX_RELEASE_CHECK_RATE)? + (size_t) nsegs : (size_t) MAX_RELEASE_CHECK_RATE); + return released; +} + +static int sys_trim(mstate m, size_t pad) { + size_t released = 0; + ensure_initialization(); + if (pad < MAX_REQUEST && is_initialized(m)) { + pad += TOP_FOOT_SIZE; /* ensure enough room for segment overhead */ + + if (m->topsize > pad) { + /* Shrink top space in granularity-size units, keeping at least one */ + size_t unit = mparams.granularity; + size_t extra = ((m->topsize - pad + (unit - SIZE_T_ONE)) / unit - + SIZE_T_ONE) * unit; + msegmentptr sp = segment_holding(m, (char*)m->top); + + if (!is_extern_segment(sp)) { + if (is_mmapped_segment(sp)) { + if (HAVE_MMAP && + sp->size >= extra && + !has_segment_link(m, sp)) { /* can't shrink if pinned */ + size_t newsize = sp->size - extra; + (void)newsize; /* placate people compiling -Wunused-variable */ + /* Prefer mremap, fall back to munmap */ + if ((CALL_MREMAP(sp->base, sp->size, newsize, 0) != MFAIL) || + (CALL_MUNMAP(sp->base + newsize, extra) == 0)) { + released = extra; + } + } + } + else if (HAVE_MORECORE) { + if (extra >= HALF_MAX_SIZE_T) /* Avoid wrapping negative */ + extra = (HALF_MAX_SIZE_T) + SIZE_T_ONE - unit; + ACQUIRE_MALLOC_GLOBAL_LOCK(); + { + /* Make sure end of memory is where we last set it. */ + char* old_br = (char*)(CALL_MORECORE(0)); + if (old_br == sp->base + sp->size) { + char* rel_br = (char*)(CALL_MORECORE(-extra)); + char* new_br = (char*)(CALL_MORECORE(0)); + if (rel_br != CMFAIL && new_br < old_br) + released = old_br - new_br; + } + } + RELEASE_MALLOC_GLOBAL_LOCK(); + } + } + + if (released != 0) { + sp->size -= released; + m->footprint -= released; + init_top(m, m->top, m->topsize - released); + check_top_chunk(m, m->top); + } + } + + /* Unmap any unused mmapped segments */ + if (HAVE_MMAP) + released += release_unused_segments(m); + + /* On failure, disable autotrim to avoid repeated failed future calls */ + if (released == 0 && m->topsize > m->trim_check) + m->trim_check = MAX_SIZE_T; + } + + return (released != 0)? 1 : 0; +} + +/* Consolidate and bin a chunk. Differs from exported versions + of free mainly in that the chunk need not be marked as inuse. +*/ +static void dispose_chunk(mstate m, mchunkptr p, size_t psize) { + mchunkptr next = chunk_plus_offset(p, psize); + if (!pinuse(p)) { + mchunkptr prev; + size_t prevsize = p->prev_foot; + if (is_mmapped(p)) { + psize += prevsize + MMAP_FOOT_PAD; + if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) + m->footprint -= psize; + return; + } + prev = chunk_minus_offset(p, prevsize); + psize += prevsize; + p = prev; + if (RTCHECK(ok_address(m, prev))) { /* consolidate backward */ + if (p != m->dv) { + unlink_chunk(m, p, prevsize); + } + else if ((next->head & INUSE_BITS) == INUSE_BITS) { + m->dvsize = psize; + set_free_with_pinuse(p, psize, next); + return; + } + } + else { + CORRUPTION_ERROR_ACTION(m); + return; + } + } + if (RTCHECK(ok_address(m, next))) { + if (!cinuse(next)) { /* consolidate forward */ + if (next == m->top) { + size_t tsize = m->topsize += psize; + m->top = p; + p->head = tsize | PINUSE_BIT; + if (p == m->dv) { + m->dv = 0; + m->dvsize = 0; + } + return; + } + else if (next == m->dv) { + size_t dsize = m->dvsize += psize; + m->dv = p; + set_size_and_pinuse_of_free_chunk(p, dsize); + return; + } + else { + size_t nsize = chunksize(next); + psize += nsize; + unlink_chunk(m, next, nsize); + set_size_and_pinuse_of_free_chunk(p, psize); + if (p == m->dv) { + m->dvsize = psize; + return; + } + } + } + else { + set_free_with_pinuse(p, psize, next); + } + insert_chunk(m, p, psize); + } + else { + CORRUPTION_ERROR_ACTION(m); + } +} + +/* ---------------------------- malloc --------------------------- */ + +/* allocate a large request from the best fitting chunk in a treebin */ +static void* tmalloc_large(mstate m, size_t nb) { + tchunkptr v = 0; + size_t rsize = -nb; /* Unsigned negation */ + tchunkptr t; + bindex_t idx; + compute_tree_index(nb, idx); + if ((t = *treebin_at(m, idx)) != 0) { + /* Traverse tree for this bin looking for node with size == nb */ + size_t sizebits = nb << leftshift_for_tree_index(idx); + tchunkptr rst = 0; /* The deepest untaken right subtree */ + for (;;) { + tchunkptr rt; + size_t trem = chunksize(t) - nb; + if (trem < rsize) { + v = t; + if ((rsize = trem) == 0) + break; + } + rt = t->child[1]; + t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; + if (rt != 0 && rt != t) + rst = rt; + if (t == 0) { + t = rst; /* set t to least subtree holding sizes > nb */ + break; + } + sizebits <<= 1; + } + } + if (t == 0 && v == 0) { /* set t to root of next non-empty treebin */ + binmap_t leftbits = left_bits(idx2bit(idx)) & m->treemap; + if (leftbits != 0) { + bindex_t i; + binmap_t leastbit = least_bit(leftbits); + compute_bit2idx(leastbit, i); + t = *treebin_at(m, i); + } + } + + while (t != 0) { /* find smallest of tree or subtree */ + size_t trem = chunksize(t) - nb; + if (trem < rsize) { + rsize = trem; + v = t; + } + t = leftmost_child(t); + } + + /* If dv is a better fit, return 0 so malloc will use it */ + if (v != 0 && rsize < (size_t)(m->dvsize - nb)) { + if (RTCHECK(ok_address(m, v))) { /* split */ + mchunkptr r = chunk_plus_offset(v, nb); + assert(chunksize(v) == rsize + nb); + if (RTCHECK(ok_next(v, r))) { + unlink_large_chunk(m, v); + if (rsize < MIN_CHUNK_SIZE) + set_inuse_and_pinuse(m, v, (rsize + nb)); + else { + set_size_and_pinuse_of_inuse_chunk(m, v, nb); + set_size_and_pinuse_of_free_chunk(r, rsize); + insert_chunk(m, r, rsize); + } + return chunk2mem(v); + } + } + CORRUPTION_ERROR_ACTION(m); + } + return 0; +} + +/* allocate a small request from the best fitting chunk in a treebin */ +static void* tmalloc_small(mstate m, size_t nb) { + tchunkptr t, v; + size_t rsize; + bindex_t i; + binmap_t leastbit = least_bit(m->treemap); + compute_bit2idx(leastbit, i); + v = t = *treebin_at(m, i); + rsize = chunksize(t) - nb; + + while ((t = leftmost_child(t)) != 0) { + size_t trem = chunksize(t) - nb; + if (trem < rsize) { + rsize = trem; + v = t; + } + } + + if (RTCHECK(ok_address(m, v))) { + mchunkptr r = chunk_plus_offset(v, nb); + assert(chunksize(v) == rsize + nb); + if (RTCHECK(ok_next(v, r))) { + unlink_large_chunk(m, v); + if (rsize < MIN_CHUNK_SIZE) + set_inuse_and_pinuse(m, v, (rsize + nb)); + else { + set_size_and_pinuse_of_inuse_chunk(m, v, nb); + set_size_and_pinuse_of_free_chunk(r, rsize); + replace_dv(m, r, rsize); + } + return chunk2mem(v); + } + } + + CORRUPTION_ERROR_ACTION(m); + return 0; +} + +#if !ONLY_MSPACES + +void* dlmalloc(size_t bytes) { + /* + Basic algorithm: + If a small request (< 256 bytes minus per-chunk overhead): + 1. If one exists, use a remainderless chunk in associated smallbin. + (Remainderless means that there are too few excess bytes to + represent as a chunk.) + 2. If it is big enough, use the dv chunk, which is normally the + chunk adjacent to the one used for the most recent small request. + 3. If one exists, split the smallest available chunk in a bin, + saving remainder in dv. + 4. If it is big enough, use the top chunk. + 5. If available, get memory from system and use it + Otherwise, for a large request: + 1. Find the smallest available binned chunk that fits, and use it + if it is better fitting than dv chunk, splitting if necessary. + 2. If better fitting than any binned chunk, use the dv chunk. + 3. If it is big enough, use the top chunk. + 4. If request size >= mmap threshold, try to directly mmap this chunk. + 5. If available, get memory from system and use it + + The ugly goto's here ensure that postaction occurs along all paths. + */ + +#if USE_LOCKS + ensure_initialization(); /* initialize in sys_alloc if not using locks */ +#endif + + if (!PREACTION(gm)) { + void* mem; + size_t nb; + if (bytes <= MAX_SMALL_REQUEST) { + bindex_t idx; + binmap_t smallbits; + nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); + idx = small_index(nb); + smallbits = gm->smallmap >> idx; + + if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ + mchunkptr b, p; + idx += ~smallbits & 1; /* Uses next bin if idx empty */ + b = smallbin_at(gm, idx); + p = b->fd; + assert(chunksize(p) == small_index2size(idx)); + unlink_first_small_chunk(gm, b, p, idx); + set_inuse_and_pinuse(gm, p, small_index2size(idx)); + mem = chunk2mem(p); + check_malloced_chunk(gm, mem, nb); + goto postaction; + } + + else if (nb > gm->dvsize) { + if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ + mchunkptr b, p, r; + size_t rsize; + bindex_t i; + binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); + binmap_t leastbit = least_bit(leftbits); + compute_bit2idx(leastbit, i); + b = smallbin_at(gm, i); + p = b->fd; + assert(chunksize(p) == small_index2size(i)); + unlink_first_small_chunk(gm, b, p, i); + rsize = small_index2size(i) - nb; + /* Fit here cannot be remainderless if 4byte sizes */ + if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) + set_inuse_and_pinuse(gm, p, small_index2size(i)); + else { + set_size_and_pinuse_of_inuse_chunk(gm, p, nb); + r = chunk_plus_offset(p, nb); + set_size_and_pinuse_of_free_chunk(r, rsize); + replace_dv(gm, r, rsize); + } + mem = chunk2mem(p); + check_malloced_chunk(gm, mem, nb); + goto postaction; + } + + else if (gm->treemap != 0 && (mem = tmalloc_small(gm, nb)) != 0) { + check_malloced_chunk(gm, mem, nb); + goto postaction; + } + } + } + else if (bytes >= MAX_REQUEST) + nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ + else { + nb = pad_request(bytes); + if (gm->treemap != 0 && (mem = tmalloc_large(gm, nb)) != 0) { + check_malloced_chunk(gm, mem, nb); + goto postaction; + } + } + + if (nb <= gm->dvsize) { + size_t rsize = gm->dvsize - nb; + mchunkptr p = gm->dv; + if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ + mchunkptr r = gm->dv = chunk_plus_offset(p, nb); + gm->dvsize = rsize; + set_size_and_pinuse_of_free_chunk(r, rsize); + set_size_and_pinuse_of_inuse_chunk(gm, p, nb); + } + else { /* exhaust dv */ + size_t dvs = gm->dvsize; + gm->dvsize = 0; + gm->dv = 0; + set_inuse_and_pinuse(gm, p, dvs); + } + mem = chunk2mem(p); + check_malloced_chunk(gm, mem, nb); + goto postaction; + } + + else if (nb < gm->topsize) { /* Split top */ + size_t rsize = gm->topsize -= nb; + mchunkptr p = gm->top; + mchunkptr r = gm->top = chunk_plus_offset(p, nb); + r->head = rsize | PINUSE_BIT; + set_size_and_pinuse_of_inuse_chunk(gm, p, nb); + mem = chunk2mem(p); + check_top_chunk(gm, gm->top); + check_malloced_chunk(gm, mem, nb); + goto postaction; + } + + mem = sys_alloc(gm, nb); + + postaction: + POSTACTION(gm); + return mem; + } + + return 0; +} + +/* ---------------------------- free --------------------------- */ + +void dlfree(void* mem) { + /* + Consolidate freed chunks with preceeding or succeeding bordering + free chunks, if they exist, and then place in a bin. Intermixed + with special cases for top, dv, mmapped chunks, and usage errors. + */ + + if (mem != 0) { + mchunkptr p = mem2chunk(mem); +#if FOOTERS + mstate fm = get_mstate_for(p); + if (!ok_magic(fm)) { + USAGE_ERROR_ACTION(fm, p); + return; + } +#else /* FOOTERS */ +#define fm gm +#endif /* FOOTERS */ + if (!PREACTION(fm)) { + check_inuse_chunk(fm, p); + if (RTCHECK(ok_address(fm, p) && ok_inuse(p))) { + size_t psize = chunksize(p); + mchunkptr next = chunk_plus_offset(p, psize); + if (!pinuse(p)) { + size_t prevsize = p->prev_foot; + if (is_mmapped(p)) { + psize += prevsize + MMAP_FOOT_PAD; + if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) + fm->footprint -= psize; + goto postaction; + } + else { + mchunkptr prev = chunk_minus_offset(p, prevsize); + psize += prevsize; + p = prev; + if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ + if (p != fm->dv) { + unlink_chunk(fm, p, prevsize); + } + else if ((next->head & INUSE_BITS) == INUSE_BITS) { + fm->dvsize = psize; + set_free_with_pinuse(p, psize, next); + goto postaction; + } + } + else + goto erroraction; + } + } + + if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { + if (!cinuse(next)) { /* consolidate forward */ + if (next == fm->top) { + size_t tsize = fm->topsize += psize; + fm->top = p; + p->head = tsize | PINUSE_BIT; + if (p == fm->dv) { + fm->dv = 0; + fm->dvsize = 0; + } + if (should_trim(fm, tsize)) + sys_trim(fm, 0); + goto postaction; + } + else if (next == fm->dv) { + size_t dsize = fm->dvsize += psize; + fm->dv = p; + set_size_and_pinuse_of_free_chunk(p, dsize); + goto postaction; + } + else { + size_t nsize = chunksize(next); + psize += nsize; + unlink_chunk(fm, next, nsize); + set_size_and_pinuse_of_free_chunk(p, psize); + if (p == fm->dv) { + fm->dvsize = psize; + goto postaction; + } + } + } + else + set_free_with_pinuse(p, psize, next); + + if (is_small(psize)) { + insert_small_chunk(fm, p, psize); + check_free_chunk(fm, p); + } + else { + tchunkptr tp = (tchunkptr)p; + insert_large_chunk(fm, tp, psize); + check_free_chunk(fm, p); + if (--fm->release_checks == 0) + release_unused_segments(fm); + } + goto postaction; + } + } + erroraction: + USAGE_ERROR_ACTION(fm, p); + postaction: + POSTACTION(fm); + } + } +#if !FOOTERS +#undef fm +#endif /* FOOTERS */ +} + +void* dlcalloc(size_t n_elements, size_t elem_size) { + void* mem; + size_t req = 0; + if (n_elements != 0) { + req = n_elements * elem_size; + if (((n_elements | elem_size) & ~(size_t)0xffff) && + (req / n_elements != elem_size)) + req = MAX_SIZE_T; /* force downstream failure on overflow */ + } + mem = dlmalloc(req); + if (mem != 0 && calloc_must_clear(mem2chunk(mem))) + memset(mem, 0, req); + return mem; +} + +#endif /* !ONLY_MSPACES */ + +/* ------------ Internal support for realloc, memalign, etc -------------- */ + +/* Try to realloc; only in-place unless can_move true */ +static mchunkptr try_realloc_chunk(mstate m, mchunkptr p, size_t nb, + int can_move) { + mchunkptr newp = 0; + size_t oldsize = chunksize(p); + mchunkptr next = chunk_plus_offset(p, oldsize); + if (RTCHECK(ok_address(m, p) && ok_inuse(p) && + ok_next(p, next) && ok_pinuse(next))) { + if (is_mmapped(p)) { + newp = mmap_resize(m, p, nb, can_move); + } + else if (oldsize >= nb) { /* already big enough */ + size_t rsize = oldsize - nb; + if (rsize >= MIN_CHUNK_SIZE) { /* split off remainder */ + mchunkptr r = chunk_plus_offset(p, nb); + set_inuse(m, p, nb); + set_inuse(m, r, rsize); + dispose_chunk(m, r, rsize); + } + newp = p; + } + else if (next == m->top) { /* extend into top */ + if (oldsize + m->topsize > nb) { + size_t newsize = oldsize + m->topsize; + size_t newtopsize = newsize - nb; + mchunkptr newtop = chunk_plus_offset(p, nb); + set_inuse(m, p, nb); + newtop->head = newtopsize |PINUSE_BIT; + m->top = newtop; + m->topsize = newtopsize; + newp = p; + } + } + else if (next == m->dv) { /* extend into dv */ + size_t dvs = m->dvsize; + if (oldsize + dvs >= nb) { + size_t dsize = oldsize + dvs - nb; + if (dsize >= MIN_CHUNK_SIZE) { + mchunkptr r = chunk_plus_offset(p, nb); + mchunkptr n = chunk_plus_offset(r, dsize); + set_inuse(m, p, nb); + set_size_and_pinuse_of_free_chunk(r, dsize); + clear_pinuse(n); + m->dvsize = dsize; + m->dv = r; + } + else { /* exhaust dv */ + size_t newsize = oldsize + dvs; + set_inuse(m, p, newsize); + m->dvsize = 0; + m->dv = 0; + } + newp = p; + } + } + else if (!cinuse(next)) { /* extend into next free chunk */ + size_t nextsize = chunksize(next); + if (oldsize + nextsize >= nb) { + size_t rsize = oldsize + nextsize - nb; + unlink_chunk(m, next, nextsize); + if (rsize < MIN_CHUNK_SIZE) { + size_t newsize = oldsize + nextsize; + set_inuse(m, p, newsize); + } + else { + mchunkptr r = chunk_plus_offset(p, nb); + set_inuse(m, p, nb); + set_inuse(m, r, rsize); + dispose_chunk(m, r, rsize); + } + newp = p; + } + } + } + else { + USAGE_ERROR_ACTION(m, chunk2mem(p)); + } + return newp; +} + +static void* internal_memalign(mstate m, size_t alignment, size_t bytes) { + void* mem = 0; + if (alignment < MIN_CHUNK_SIZE) /* must be at least a minimum chunk size */ + alignment = MIN_CHUNK_SIZE; + if ((alignment & (alignment-SIZE_T_ONE)) != 0) {/* Ensure a power of 2 */ + size_t a = MALLOC_ALIGNMENT << 1; + while (a < alignment) a <<= 1; + alignment = a; + } + if (bytes >= MAX_REQUEST - alignment) { + if (m != 0) { /* Test isn't needed but avoids compiler warning */ + MALLOC_FAILURE_ACTION; + } + } + else { + size_t nb = request2size(bytes); + size_t req = nb + alignment + MIN_CHUNK_SIZE - CHUNK_OVERHEAD; + mem = internal_malloc(m, req); + if (mem != 0) { + mchunkptr p = mem2chunk(mem); + if (PREACTION(m)) + return 0; + if ((((size_t)(mem)) & (alignment - 1)) != 0) { /* misaligned */ + /* + Find an aligned spot inside chunk. Since we need to give + back leading space in a chunk of at least MIN_CHUNK_SIZE, if + the first calculation places us at a spot with less than + MIN_CHUNK_SIZE leader, we can move to the next aligned spot. + We've allocated enough total room so that this is always + possible. + */ + char* br = (char*)mem2chunk((size_t)(((size_t)((char*)mem + alignment - + SIZE_T_ONE)) & + -alignment)); + char* pos = ((size_t)(br - (char*)(p)) >= MIN_CHUNK_SIZE)? + br : br+alignment; + mchunkptr newp = (mchunkptr)pos; + size_t leadsize = pos - (char*)(p); + size_t newsize = chunksize(p) - leadsize; + + if (is_mmapped(p)) { /* For mmapped chunks, just adjust offset */ + newp->prev_foot = p->prev_foot + leadsize; + newp->head = newsize; + } + else { /* Otherwise, give back leader, use the rest */ + set_inuse(m, newp, newsize); + set_inuse(m, p, leadsize); + dispose_chunk(m, p, leadsize); + } + p = newp; + } + + /* Give back spare room at the end */ + if (!is_mmapped(p)) { + size_t size = chunksize(p); + if (size > nb + MIN_CHUNK_SIZE) { + size_t remainder_size = size - nb; + mchunkptr remainder = chunk_plus_offset(p, nb); + set_inuse(m, p, nb); + set_inuse(m, remainder, remainder_size); + dispose_chunk(m, remainder, remainder_size); + } + } + + mem = chunk2mem(p); + assert (chunksize(p) >= nb); + assert(((size_t)mem & (alignment - 1)) == 0); + check_inuse_chunk(m, p); + POSTACTION(m); + } + } + return mem; +} + +/* + Common support for independent_X routines, handling + all of the combinations that can result. + The opts arg has: + bit 0 set if all elements are same size (using sizes[0]) + bit 1 set if elements should be zeroed +*/ +static void** ialloc(mstate m, + size_t n_elements, + size_t* sizes, + int opts, + void* chunks[]) { + + size_t element_size; /* chunksize of each element, if all same */ + size_t contents_size; /* total size of elements */ + size_t array_size; /* request size of pointer array */ + void* mem; /* malloced aggregate space */ + mchunkptr p; /* corresponding chunk */ + size_t remainder_size; /* remaining bytes while splitting */ + void** marray; /* either "chunks" or malloced ptr array */ + mchunkptr array_chunk; /* chunk for malloced ptr array */ + flag_t was_enabled; /* to disable mmap */ + size_t size; + size_t i; + + ensure_initialization(); + /* compute array length, if needed */ + if (chunks != 0) { + if (n_elements == 0) + return chunks; /* nothing to do */ + marray = chunks; + array_size = 0; + } + else { + /* if empty req, must still return chunk representing empty array */ + if (n_elements == 0) + return (void**)internal_malloc(m, 0); + marray = 0; + array_size = request2size(n_elements * (sizeof(void*))); + } + + /* compute total element size */ + if (opts & 0x1) { /* all-same-size */ + element_size = request2size(*sizes); + contents_size = n_elements * element_size; + } + else { /* add up all the sizes */ + element_size = 0; + contents_size = 0; + for (i = 0; i != n_elements; ++i) + contents_size += request2size(sizes[i]); + } + + size = contents_size + array_size; + + /* + Allocate the aggregate chunk. First disable direct-mmapping so + malloc won't use it, since we would not be able to later + free/realloc space internal to a segregated mmap region. + */ + was_enabled = use_mmap(m); + disable_mmap(m); + mem = internal_malloc(m, size - CHUNK_OVERHEAD); + if (was_enabled) + enable_mmap(m); + if (mem == 0) + return 0; + + if (PREACTION(m)) return 0; + p = mem2chunk(mem); + remainder_size = chunksize(p); + + assert(!is_mmapped(p)); + + if (opts & 0x2) { /* optionally clear the elements */ + memset((size_t*)mem, 0, remainder_size - SIZE_T_SIZE - array_size); + } + + /* If not provided, allocate the pointer array as final part of chunk */ + if (marray == 0) { + size_t array_chunk_size; + array_chunk = chunk_plus_offset(p, contents_size); + array_chunk_size = remainder_size - contents_size; + marray = (void**) (chunk2mem(array_chunk)); + set_size_and_pinuse_of_inuse_chunk(m, array_chunk, array_chunk_size); + remainder_size = contents_size; + } + + /* split out elements */ + for (i = 0; ; ++i) { + marray[i] = chunk2mem(p); + if (i != n_elements-1) { + if (element_size != 0) + size = element_size; + else + size = request2size(sizes[i]); + remainder_size -= size; + set_size_and_pinuse_of_inuse_chunk(m, p, size); + p = chunk_plus_offset(p, size); + } + else { /* the final element absorbs any overallocation slop */ + set_size_and_pinuse_of_inuse_chunk(m, p, remainder_size); + break; + } + } + +#if DEBUG + if (marray != chunks) { + /* final element must have exactly exhausted chunk */ + if (element_size != 0) { + assert(remainder_size == element_size); + } + else { + assert(remainder_size == request2size(sizes[i])); + } + check_inuse_chunk(m, mem2chunk(marray)); + } + for (i = 0; i != n_elements; ++i) + check_inuse_chunk(m, mem2chunk(marray[i])); + +#endif /* DEBUG */ + + POSTACTION(m); + return marray; +} + +/* Try to free all pointers in the given array. + Note: this could be made faster, by delaying consolidation, + at the price of disabling some user integrity checks, We + still optimize some consolidations by combining adjacent + chunks before freeing, which will occur often if allocated + with ialloc or the array is sorted. +*/ +static size_t internal_bulk_free(mstate m, void* array[], size_t nelem) { + size_t unfreed = 0; + if (!PREACTION(m)) { + void** a; + void** fence = &(array[nelem]); + for (a = array; a != fence; ++a) { + void* mem = *a; + if (mem != 0) { + mchunkptr p = mem2chunk(mem); + size_t psize = chunksize(p); +#if FOOTERS + if (get_mstate_for(p) != m) { + ++unfreed; + continue; + } +#endif + check_inuse_chunk(m, p); + *a = 0; + if (RTCHECK(ok_address(m, p) && ok_inuse(p))) { + void ** b = a + 1; /* try to merge with next chunk */ + mchunkptr next = next_chunk(p); + if (b != fence && *b == chunk2mem(next)) { + size_t newsize = chunksize(next) + psize; + set_inuse(m, p, newsize); + *b = chunk2mem(p); + } + else + dispose_chunk(m, p, psize); + } + else { + CORRUPTION_ERROR_ACTION(m); + break; + } + } + } + if (should_trim(m, m->topsize)) + sys_trim(m, 0); + POSTACTION(m); + } + return unfreed; +} + +/* Traversal */ +#if MALLOC_INSPECT_ALL +static void internal_inspect_all(mstate m, + void(*handler)(void *start, + void *end, + size_t used_bytes, + void* callback_arg), + void* arg) { + if (is_initialized(m)) { + mchunkptr top = m->top; + msegmentptr s; + for (s = &m->seg; s != 0; s = s->next) { + mchunkptr q = align_as_chunk(s->base); + while (segment_holds(s, q) && q->head != FENCEPOST_HEAD) { + mchunkptr next = next_chunk(q); + size_t sz = chunksize(q); + size_t used; + void* start; + if (is_inuse(q)) { + used = sz - CHUNK_OVERHEAD; /* must not be mmapped */ + start = chunk2mem(q); + } + else { + used = 0; + if (is_small(sz)) { /* offset by possible bookkeeping */ + start = (void*)((char*)q + sizeof(struct malloc_chunk)); + } + else { + start = (void*)((char*)q + sizeof(struct malloc_tree_chunk)); + } + } + if (start < (void*)next) /* skip if all space is bookkeeping */ + handler(start, next, used, arg); + if (q == top) + break; + q = next; + } + } + } +} +#endif /* MALLOC_INSPECT_ALL */ + +/* ------------------ Exported realloc, memalign, etc -------------------- */ + +#if !ONLY_MSPACES + +void* dlrealloc(void* oldmem, size_t bytes) { + void* mem = 0; + if (oldmem == 0) { + mem = dlmalloc(bytes); + } + else if (bytes >= MAX_REQUEST) { + MALLOC_FAILURE_ACTION; + } +#ifdef REALLOC_ZERO_BYTES_FREES + else if (bytes == 0) { + dlfree(oldmem); + } +#endif /* REALLOC_ZERO_BYTES_FREES */ + else { + size_t nb = request2size(bytes); + mchunkptr oldp = mem2chunk(oldmem); +#if ! FOOTERS + mstate m = gm; +#else /* FOOTERS */ + mstate m = get_mstate_for(oldp); + if (!ok_magic(m)) { + USAGE_ERROR_ACTION(m, oldmem); + return 0; + } +#endif /* FOOTERS */ + if (!PREACTION(m)) { + mchunkptr newp = try_realloc_chunk(m, oldp, nb, 1); + POSTACTION(m); + if (newp != 0) { + check_inuse_chunk(m, newp); + mem = chunk2mem(newp); + } + else { + mem = internal_malloc(m, bytes); + if (mem != 0) { + size_t oc = chunksize(oldp) - overhead_for(oldp); + memcpy(mem, oldmem, (oc < bytes)? oc : bytes); + internal_free(m, oldmem); + } + } + } + } + return mem; +} + +void* dlrealloc_in_place(void* oldmem, size_t bytes) { + void* mem = 0; + if (oldmem != 0) { + if (bytes >= MAX_REQUEST) { + MALLOC_FAILURE_ACTION; + } + else { + size_t nb = request2size(bytes); + mchunkptr oldp = mem2chunk(oldmem); +#if ! FOOTERS + mstate m = gm; +#else /* FOOTERS */ + mstate m = get_mstate_for(oldp); + if (!ok_magic(m)) { + USAGE_ERROR_ACTION(m, oldmem); + return 0; + } +#endif /* FOOTERS */ + if (!PREACTION(m)) { + mchunkptr newp = try_realloc_chunk(m, oldp, nb, 0); + POSTACTION(m); + if (newp == oldp) { + check_inuse_chunk(m, newp); + mem = oldmem; + } + } + } + } + return mem; +} + +void* dlmemalign(size_t alignment, size_t bytes) { + if (alignment <= MALLOC_ALIGNMENT) { + return dlmalloc(bytes); + } + return internal_memalign(gm, alignment, bytes); +} + +int dlposix_memalign(void** pp, size_t alignment, size_t bytes) { + void* mem = 0; + if (alignment == MALLOC_ALIGNMENT) + mem = dlmalloc(bytes); + else { + size_t d = alignment / sizeof(void*); + size_t r = alignment % sizeof(void*); + if (r != 0 || d == 0 || (d & (d-SIZE_T_ONE)) != 0) + return EINVAL; + else if (bytes <= MAX_REQUEST - alignment) { + if (alignment < MIN_CHUNK_SIZE) + alignment = MIN_CHUNK_SIZE; + mem = internal_memalign(gm, alignment, bytes); + } + } + if (mem == 0) + return ENOMEM; + else { + *pp = mem; + return 0; + } +} + +void* dlvalloc(size_t bytes) { + size_t pagesz; + ensure_initialization(); + pagesz = mparams.page_size; + return dlmemalign(pagesz, bytes); +} + +void* dlpvalloc(size_t bytes) { + size_t pagesz; + ensure_initialization(); + pagesz = mparams.page_size; + return dlmemalign(pagesz, (bytes + pagesz - SIZE_T_ONE) & ~(pagesz - SIZE_T_ONE)); +} + +void** dlindependent_calloc(size_t n_elements, size_t elem_size, + void* chunks[]) { + size_t sz = elem_size; /* serves as 1-element array */ + return ialloc(gm, n_elements, &sz, 3, chunks); +} + +void** dlindependent_comalloc(size_t n_elements, size_t sizes[], + void* chunks[]) { + return ialloc(gm, n_elements, sizes, 0, chunks); +} + +size_t dlbulk_free(void* array[], size_t nelem) { + return internal_bulk_free(gm, array, nelem); +} + +#if MALLOC_INSPECT_ALL +void dlmalloc_inspect_all(void(*handler)(void *start, + void *end, + size_t used_bytes, + void* callback_arg), + void* arg) { + ensure_initialization(); + if (!PREACTION(gm)) { + internal_inspect_all(gm, handler, arg); + POSTACTION(gm); + } +} +#endif /* MALLOC_INSPECT_ALL */ + +int dlmalloc_trim(size_t pad) { + int result = 0; + ensure_initialization(); + if (!PREACTION(gm)) { + result = sys_trim(gm, pad); + POSTACTION(gm); + } + return result; +} + +size_t dlmalloc_footprint(void) { + return gm->footprint; +} + +size_t dlmalloc_max_footprint(void) { + return gm->max_footprint; +} + +size_t dlmalloc_footprint_limit(void) { + size_t maf = gm->footprint_limit; + return maf == 0 ? MAX_SIZE_T : maf; +} + +size_t dlmalloc_set_footprint_limit(size_t bytes) { + size_t result; /* invert sense of 0 */ + if (bytes == 0) + result = granularity_align(1); /* Use minimal size */ + if (bytes == MAX_SIZE_T) + result = 0; /* disable */ + else + result = granularity_align(bytes); + return gm->footprint_limit = result; +} + +#if !NO_MALLINFO +struct mallinfo dlmallinfo(void) { + return internal_mallinfo(gm); +} +#endif /* NO_MALLINFO */ + +#if !NO_MALLOC_STATS +void dlmalloc_stats() { + internal_malloc_stats(gm); +} +#endif /* NO_MALLOC_STATS */ + +int dlmallopt(int param_number, int value) { + return change_mparam(param_number, value); +} + +size_t dlmalloc_usable_size(void* mem) { + if (mem != 0) { + mchunkptr p = mem2chunk(mem); + if (is_inuse(p)) + return chunksize(p) - overhead_for(p); + } + return 0; +} + +#endif /* !ONLY_MSPACES */ + +/* ----------------------------- user mspaces ---------------------------- */ + +#if MSPACES + +static mstate init_user_mstate(char* tbase, size_t tsize) { + size_t msize = pad_request(sizeof(struct malloc_state)); + mchunkptr mn; + mchunkptr msp = align_as_chunk(tbase); + mstate m = (mstate)(chunk2mem(msp)); + memset(m, 0, msize); + (void)INITIAL_LOCK(&m->mutex); + msp->head = (msize|INUSE_BITS); + m->seg.base = m->least_addr = tbase; + m->seg.size = m->footprint = m->max_footprint = tsize; + m->magic = mparams.magic; + m->release_checks = MAX_RELEASE_CHECK_RATE; + m->mflags = mparams.default_mflags; + m->extp = 0; + m->exts = 0; + disable_contiguous(m); + init_bins(m); + mn = next_chunk(mem2chunk(m)); + init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) - TOP_FOOT_SIZE); + check_top_chunk(m, m->top); + return m; +} + +mspace create_mspace(size_t capacity, int locked) { + mstate m = 0; + size_t msize; + ensure_initialization(); + msize = pad_request(sizeof(struct malloc_state)); + if (capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { + size_t rs = ((capacity == 0)? mparams.granularity : + (capacity + TOP_FOOT_SIZE + msize)); + size_t tsize = granularity_align(rs); + char* tbase = (char*)(CALL_MMAP(tsize)); + if (tbase != CMFAIL) { + m = init_user_mstate(tbase, tsize); + m->seg.sflags = USE_MMAP_BIT; + set_lock(m, locked); + } + } + return (mspace)m; +} + +mspace create_mspace_with_base(void* base, size_t capacity, int locked) { + mstate m = 0; + size_t msize; + ensure_initialization(); + msize = pad_request(sizeof(struct malloc_state)); + if (capacity > msize + TOP_FOOT_SIZE && + capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { + m = init_user_mstate((char*)base, capacity); + m->seg.sflags = EXTERN_BIT; + set_lock(m, locked); + } + return (mspace)m; +} + +int mspace_track_large_chunks(mspace msp, int enable) { + int ret = 0; + mstate ms = (mstate)msp; + if (!PREACTION(ms)) { + if (!use_mmap(ms)) { + ret = 1; + } + if (!enable) { + enable_mmap(ms); + } else { + disable_mmap(ms); + } + POSTACTION(ms); + } + return ret; +} + +size_t destroy_mspace(mspace msp) { + size_t freed = 0; + mstate ms = (mstate)msp; + if (ok_magic(ms)) { + msegmentptr sp = &ms->seg; + (void)DESTROY_LOCK(&ms->mutex); /* destroy before unmapped */ + while (sp != 0) { + char* base = sp->base; + size_t size = sp->size; + flag_t flag = sp->sflags; + (void)base; /* placate people compiling -Wunused-variable */ + sp = sp->next; + if ((flag & USE_MMAP_BIT) && !(flag & EXTERN_BIT) && + CALL_MUNMAP(base, size) == 0) + freed += size; + } + } + else { + USAGE_ERROR_ACTION(ms,ms); + } + return freed; +} + +/* + mspace versions of routines are near-clones of the global + versions. This is not so nice but better than the alternatives. +*/ + +void* mspace_malloc(mspace msp, size_t bytes) { + mstate ms = (mstate)msp; + if (!ok_magic(ms)) { + USAGE_ERROR_ACTION(ms,ms); + return 0; + } + if (!PREACTION(ms)) { + void* mem; + size_t nb; + if (bytes <= MAX_SMALL_REQUEST) { + bindex_t idx; + binmap_t smallbits; + nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); + idx = small_index(nb); + smallbits = ms->smallmap >> idx; + + if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ + mchunkptr b, p; + idx += ~smallbits & 1; /* Uses next bin if idx empty */ + b = smallbin_at(ms, idx); + p = b->fd; + assert(chunksize(p) == small_index2size(idx)); + unlink_first_small_chunk(ms, b, p, idx); + set_inuse_and_pinuse(ms, p, small_index2size(idx)); + mem = chunk2mem(p); + check_malloced_chunk(ms, mem, nb); + goto postaction; + } + + else if (nb > ms->dvsize) { + if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ + mchunkptr b, p, r; + size_t rsize; + bindex_t i; + binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); + binmap_t leastbit = least_bit(leftbits); + compute_bit2idx(leastbit, i); + b = smallbin_at(ms, i); + p = b->fd; + assert(chunksize(p) == small_index2size(i)); + unlink_first_small_chunk(ms, b, p, i); + rsize = small_index2size(i) - nb; + /* Fit here cannot be remainderless if 4byte sizes */ + if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) + set_inuse_and_pinuse(ms, p, small_index2size(i)); + else { + set_size_and_pinuse_of_inuse_chunk(ms, p, nb); + r = chunk_plus_offset(p, nb); + set_size_and_pinuse_of_free_chunk(r, rsize); + replace_dv(ms, r, rsize); + } + mem = chunk2mem(p); + check_malloced_chunk(ms, mem, nb); + goto postaction; + } + + else if (ms->treemap != 0 && (mem = tmalloc_small(ms, nb)) != 0) { + check_malloced_chunk(ms, mem, nb); + goto postaction; + } + } + } + else if (bytes >= MAX_REQUEST) + nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ + else { + nb = pad_request(bytes); + if (ms->treemap != 0 && (mem = tmalloc_large(ms, nb)) != 0) { + check_malloced_chunk(ms, mem, nb); + goto postaction; + } + } + + if (nb <= ms->dvsize) { + size_t rsize = ms->dvsize - nb; + mchunkptr p = ms->dv; + if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ + mchunkptr r = ms->dv = chunk_plus_offset(p, nb); + ms->dvsize = rsize; + set_size_and_pinuse_of_free_chunk(r, rsize); + set_size_and_pinuse_of_inuse_chunk(ms, p, nb); + } + else { /* exhaust dv */ + size_t dvs = ms->dvsize; + ms->dvsize = 0; + ms->dv = 0; + set_inuse_and_pinuse(ms, p, dvs); + } + mem = chunk2mem(p); + check_malloced_chunk(ms, mem, nb); + goto postaction; + } + + else if (nb < ms->topsize) { /* Split top */ + size_t rsize = ms->topsize -= nb; + mchunkptr p = ms->top; + mchunkptr r = ms->top = chunk_plus_offset(p, nb); + r->head = rsize | PINUSE_BIT; + set_size_and_pinuse_of_inuse_chunk(ms, p, nb); + mem = chunk2mem(p); + check_top_chunk(ms, ms->top); + check_malloced_chunk(ms, mem, nb); + goto postaction; + } + + mem = sys_alloc(ms, nb); + + postaction: + POSTACTION(ms); + return mem; + } + + return 0; +} + +void mspace_free(mspace msp, void* mem) { + if (mem != 0) { + mchunkptr p = mem2chunk(mem); +#if FOOTERS + mstate fm = get_mstate_for(p); + (void)msp; /* placate people compiling -Wunused */ +#else /* FOOTERS */ + mstate fm = (mstate)msp; +#endif /* FOOTERS */ + if (!ok_magic(fm)) { + USAGE_ERROR_ACTION(fm, p); + return; + } + if (!PREACTION(fm)) { + check_inuse_chunk(fm, p); + if (RTCHECK(ok_address(fm, p) && ok_inuse(p))) { + size_t psize = chunksize(p); + mchunkptr next = chunk_plus_offset(p, psize); + if (!pinuse(p)) { + size_t prevsize = p->prev_foot; + if (is_mmapped(p)) { + psize += prevsize + MMAP_FOOT_PAD; + if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) + fm->footprint -= psize; + goto postaction; + } + else { + mchunkptr prev = chunk_minus_offset(p, prevsize); + psize += prevsize; + p = prev; + if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ + if (p != fm->dv) { + unlink_chunk(fm, p, prevsize); + } + else if ((next->head & INUSE_BITS) == INUSE_BITS) { + fm->dvsize = psize; + set_free_with_pinuse(p, psize, next); + goto postaction; + } + } + else + goto erroraction; + } + } + + if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { + if (!cinuse(next)) { /* consolidate forward */ + if (next == fm->top) { + size_t tsize = fm->topsize += psize; + fm->top = p; + p->head = tsize | PINUSE_BIT; + if (p == fm->dv) { + fm->dv = 0; + fm->dvsize = 0; + } + if (should_trim(fm, tsize)) + sys_trim(fm, 0); + goto postaction; + } + else if (next == fm->dv) { + size_t dsize = fm->dvsize += psize; + fm->dv = p; + set_size_and_pinuse_of_free_chunk(p, dsize); + goto postaction; + } + else { + size_t nsize = chunksize(next); + psize += nsize; + unlink_chunk(fm, next, nsize); + set_size_and_pinuse_of_free_chunk(p, psize); + if (p == fm->dv) { + fm->dvsize = psize; + goto postaction; + } + } + } + else + set_free_with_pinuse(p, psize, next); + + if (is_small(psize)) { + insert_small_chunk(fm, p, psize); + check_free_chunk(fm, p); + } + else { + tchunkptr tp = (tchunkptr)p; + insert_large_chunk(fm, tp, psize); + check_free_chunk(fm, p); + if (--fm->release_checks == 0) + release_unused_segments(fm); + } + goto postaction; + } + } + erroraction: + USAGE_ERROR_ACTION(fm, p); + postaction: + POSTACTION(fm); + } + } +} + +void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size) { + void* mem; + size_t req = 0; + mstate ms = (mstate)msp; + if (!ok_magic(ms)) { + USAGE_ERROR_ACTION(ms,ms); + return 0; + } + if (n_elements != 0) { + req = n_elements * elem_size; + if (((n_elements | elem_size) & ~(size_t)0xffff) && + (req / n_elements != elem_size)) + req = MAX_SIZE_T; /* force downstream failure on overflow */ + } + mem = internal_malloc(ms, req); + if (mem != 0 && calloc_must_clear(mem2chunk(mem))) + memset(mem, 0, req); + return mem; +} + +void* mspace_realloc(mspace msp, void* oldmem, size_t bytes) { + void* mem = 0; + if (oldmem == 0) { + mem = mspace_malloc(msp, bytes); + } + else if (bytes >= MAX_REQUEST) { + MALLOC_FAILURE_ACTION; + } +#ifdef REALLOC_ZERO_BYTES_FREES + else if (bytes == 0) { + mspace_free(msp, oldmem); + } +#endif /* REALLOC_ZERO_BYTES_FREES */ + else { + size_t nb = request2size(bytes); + mchunkptr oldp = mem2chunk(oldmem); +#if ! FOOTERS + mstate m = (mstate)msp; +#else /* FOOTERS */ + mstate m = get_mstate_for(oldp); + if (!ok_magic(m)) { + USAGE_ERROR_ACTION(m, oldmem); + return 0; + } +#endif /* FOOTERS */ + if (!PREACTION(m)) { + mchunkptr newp = try_realloc_chunk(m, oldp, nb, 1); + POSTACTION(m); + if (newp != 0) { + check_inuse_chunk(m, newp); + mem = chunk2mem(newp); + } + else { + mem = mspace_malloc(m, bytes); + if (mem != 0) { + size_t oc = chunksize(oldp) - overhead_for(oldp); + memcpy(mem, oldmem, (oc < bytes)? oc : bytes); + mspace_free(m, oldmem); + } + } + } + } + return mem; +} + +void* mspace_realloc_in_place(mspace msp, void* oldmem, size_t bytes) { + void* mem = 0; + if (oldmem != 0) { + if (bytes >= MAX_REQUEST) { + MALLOC_FAILURE_ACTION; + } + else { + size_t nb = request2size(bytes); + mchunkptr oldp = mem2chunk(oldmem); +#if ! FOOTERS + mstate m = (mstate)msp; +#else /* FOOTERS */ + mstate m = get_mstate_for(oldp); + (void)msp; /* placate people compiling -Wunused */ + if (!ok_magic(m)) { + USAGE_ERROR_ACTION(m, oldmem); + return 0; + } +#endif /* FOOTERS */ + if (!PREACTION(m)) { + mchunkptr newp = try_realloc_chunk(m, oldp, nb, 0); + POSTACTION(m); + if (newp == oldp) { + check_inuse_chunk(m, newp); + mem = oldmem; + } + } + } + } + return mem; +} + +void* mspace_memalign(mspace msp, size_t alignment, size_t bytes) { + mstate ms = (mstate)msp; + if (!ok_magic(ms)) { + USAGE_ERROR_ACTION(ms,ms); + return 0; + } + if (alignment <= MALLOC_ALIGNMENT) + return mspace_malloc(msp, bytes); + return internal_memalign(ms, alignment, bytes); +} + +void** mspace_independent_calloc(mspace msp, size_t n_elements, + size_t elem_size, void* chunks[]) { + size_t sz = elem_size; /* serves as 1-element array */ + mstate ms = (mstate)msp; + if (!ok_magic(ms)) { + USAGE_ERROR_ACTION(ms,ms); + return 0; + } + return ialloc(ms, n_elements, &sz, 3, chunks); +} + +void** mspace_independent_comalloc(mspace msp, size_t n_elements, + size_t sizes[], void* chunks[]) { + mstate ms = (mstate)msp; + if (!ok_magic(ms)) { + USAGE_ERROR_ACTION(ms,ms); + return 0; + } + return ialloc(ms, n_elements, sizes, 0, chunks); +} + +size_t mspace_bulk_free(mspace msp, void* array[], size_t nelem) { + return internal_bulk_free((mstate)msp, array, nelem); +} + +#if MALLOC_INSPECT_ALL +void mspace_inspect_all(mspace msp, + void(*handler)(void *start, + void *end, + size_t used_bytes, + void* callback_arg), + void* arg) { + mstate ms = (mstate)msp; + if (ok_magic(ms)) { + if (!PREACTION(ms)) { + internal_inspect_all(ms, handler, arg); + POSTACTION(ms); + } + } + else { + USAGE_ERROR_ACTION(ms,ms); + } +} +#endif /* MALLOC_INSPECT_ALL */ + +int mspace_trim(mspace msp, size_t pad) { + int result = 0; + mstate ms = (mstate)msp; + if (ok_magic(ms)) { + if (!PREACTION(ms)) { + result = sys_trim(ms, pad); + POSTACTION(ms); + } + } + else { + USAGE_ERROR_ACTION(ms,ms); + } + return result; +} + +#if !NO_MALLOC_STATS +void mspace_malloc_stats(mspace msp) { + mstate ms = (mstate)msp; + if (ok_magic(ms)) { + internal_malloc_stats(ms); + } + else { + USAGE_ERROR_ACTION(ms,ms); + } +} +#endif /* NO_MALLOC_STATS */ + +size_t mspace_footprint(mspace msp) { + size_t result = 0; + mstate ms = (mstate)msp; + if (ok_magic(ms)) { + result = ms->footprint; + } + else { + USAGE_ERROR_ACTION(ms,ms); + } + return result; +} + +size_t mspace_max_footprint(mspace msp) { + size_t result = 0; + mstate ms = (mstate)msp; + if (ok_magic(ms)) { + result = ms->max_footprint; + } + else { + USAGE_ERROR_ACTION(ms,ms); + } + return result; +} + +size_t mspace_footprint_limit(mspace msp) { + size_t result = 0; + mstate ms = (mstate)msp; + if (ok_magic(ms)) { + size_t maf = ms->footprint_limit; + result = (maf == 0) ? MAX_SIZE_T : maf; + } + else { + USAGE_ERROR_ACTION(ms,ms); + } + return result; +} + +size_t mspace_set_footprint_limit(mspace msp, size_t bytes) { + size_t result = 0; + mstate ms = (mstate)msp; + if (ok_magic(ms)) { + if (bytes == 0) + result = granularity_align(1); /* Use minimal size */ + if (bytes == MAX_SIZE_T) + result = 0; /* disable */ + else + result = granularity_align(bytes); + ms->footprint_limit = result; + } + else { + USAGE_ERROR_ACTION(ms,ms); + } + return result; +} + +#if !NO_MALLINFO +struct mallinfo mspace_mallinfo(mspace msp) { + mstate ms = (mstate)msp; + if (!ok_magic(ms)) { + USAGE_ERROR_ACTION(ms,ms); + } + return internal_mallinfo(ms); +} +#endif /* NO_MALLINFO */ + +size_t mspace_usable_size(const void* mem) { + if (mem != 0) { + mchunkptr p = mem2chunk(mem); + if (is_inuse(p)) + return chunksize(p) - overhead_for(p); + } + return 0; +} + +int mspace_mallopt(int param_number, int value) { + return change_mparam(param_number, value); +} + +#endif /* MSPACES */ + + +/* -------------------- Alternative MORECORE functions ------------------- */ + +/* + Guidelines for creating a custom version of MORECORE: + + * For best performance, MORECORE should allocate in multiples of pagesize. + * MORECORE may allocate more memory than requested. (Or even less, + but this will usually result in a malloc failure.) + * MORECORE must not allocate memory when given argument zero, but + instead return one past the end address of memory from previous + nonzero call. + * For best performance, consecutive calls to MORECORE with positive + arguments should return increasing addresses, indicating that + space has been contiguously extended. + * Even though consecutive calls to MORECORE need not return contiguous + addresses, it must be OK for malloc'ed chunks to span multiple + regions in those cases where they do happen to be contiguous. + * MORECORE need not handle negative arguments -- it may instead + just return MFAIL when given negative arguments. + Negative arguments are always multiples of pagesize. MORECORE + must not misinterpret negative args as large positive unsigned + args. You can suppress all such calls from even occurring by defining + MORECORE_CANNOT_TRIM, + + As an example alternative MORECORE, here is a custom allocator + kindly contributed for pre-OSX macOS. It uses virtually but not + necessarily physically contiguous non-paged memory (locked in, + present and won't get swapped out). You can use it by uncommenting + this section, adding some #includes, and setting up the appropriate + defines above: + + #define MORECORE osMoreCore + + There is also a shutdown routine that should somehow be called for + cleanup upon program exit. + + #define MAX_POOL_ENTRIES 100 + #define MINIMUM_MORECORE_SIZE (64 * 1024U) + static int next_os_pool; + void *our_os_pools[MAX_POOL_ENTRIES]; + + void *osMoreCore(int size) + { + void *ptr = 0; + static void *sbrk_top = 0; + + if (size > 0) + { + if (size < MINIMUM_MORECORE_SIZE) + size = MINIMUM_MORECORE_SIZE; + if (CurrentExecutionLevel() == kTaskLevel) + ptr = PoolAllocateResident(size + RM_PAGE_SIZE, 0); + if (ptr == 0) + { + return (void *) MFAIL; + } + // save ptrs so they can be freed during cleanup + our_os_pools[next_os_pool] = ptr; + next_os_pool++; + ptr = (void *) ((((size_t) ptr) + RM_PAGE_MASK) & ~RM_PAGE_MASK); + sbrk_top = (char *) ptr + size; + return ptr; + } + else if (size < 0) + { + // we don't currently support shrink behavior + return (void *) MFAIL; + } + else + { + return sbrk_top; + } + } + + // cleanup any allocated memory pools + // called as last thing before shutting down driver + + void osCleanupMem(void) + { + void **ptr; + + for (ptr = our_os_pools; ptr < &our_os_pools[MAX_POOL_ENTRIES]; ptr++) + if (*ptr) + { + PoolDeallocate(*ptr); + *ptr = 0; + } + } + +*/ + + +/* ----------------------------------------------------------------------- +History: + v2.8.6 Wed Aug 29 06:57:58 2012 Doug Lea + * fix bad comparison in dlposix_memalign + * don't reuse adjusted asize in sys_alloc + * add LOCK_AT_FORK -- thanks to Kirill Artamonov for the suggestion + * reduce compiler warnings -- thanks to all who reported/suggested these + + v2.8.5 Sun May 22 10:26:02 2011 Doug Lea (dl at gee) + * Always perform unlink checks unless INSECURE + * Add posix_memalign. + * Improve realloc to expand in more cases; expose realloc_in_place. + Thanks to Peter Buhr for the suggestion. + * Add footprint_limit, inspect_all, bulk_free. Thanks + to Barry Hayes and others for the suggestions. + * Internal refactorings to avoid calls while holding locks + * Use non-reentrant locks by default. Thanks to Roland McGrath + for the suggestion. + * Small fixes to mspace_destroy, reset_on_error. + * Various configuration extensions/changes. Thanks + to all who contributed these. + + V2.8.4a Thu Apr 28 14:39:43 2011 (dl at gee.cs.oswego.edu) + * Update Creative Commons URL + + V2.8.4 Wed May 27 09:56:23 2009 Doug Lea (dl at gee) + * Use zeros instead of prev foot for is_mmapped + * Add mspace_track_large_chunks; thanks to Jean Brouwers + * Fix set_inuse in internal_realloc; thanks to Jean Brouwers + * Fix insufficient sys_alloc padding when using 16byte alignment + * Fix bad error check in mspace_footprint + * Adaptations for ptmalloc; thanks to Wolfram Gloger. + * Reentrant spin locks; thanks to Earl Chew and others + * Win32 improvements; thanks to Niall Douglas and Earl Chew + * Add NO_SEGMENT_TRAVERSAL and MAX_RELEASE_CHECK_RATE options + * Extension hook in malloc_state + * Various small adjustments to reduce warnings on some compilers + * Various configuration extensions/changes for more platforms. Thanks + to all who contributed these. + + V2.8.3 Thu Sep 22 11:16:32 2005 Doug Lea (dl at gee) + * Add max_footprint functions + * Ensure all appropriate literals are size_t + * Fix conditional compilation problem for some #define settings + * Avoid concatenating segments with the one provided + in create_mspace_with_base + * Rename some variables to avoid compiler shadowing warnings + * Use explicit lock initialization. + * Better handling of sbrk interference. + * Simplify and fix segment insertion, trimming and mspace_destroy + * Reinstate REALLOC_ZERO_BYTES_FREES option from 2.7.x + * Thanks especially to Dennis Flanagan for help on these. + + V2.8.2 Sun Jun 12 16:01:10 2005 Doug Lea (dl at gee) + * Fix memalign brace error. + + V2.8.1 Wed Jun 8 16:11:46 2005 Doug Lea (dl at gee) + * Fix improper #endif nesting in C++ + * Add explicit casts needed for C++ + + V2.8.0 Mon May 30 14:09:02 2005 Doug Lea (dl at gee) + * Use trees for large bins + * Support mspaces + * Use segments to unify sbrk-based and mmap-based system allocation, + removing need for emulation on most platforms without sbrk. + * Default safety checks + * Optional footer checks. Thanks to William Robertson for the idea. + * Internal code refactoring + * Incorporate suggestions and platform-specific changes. + Thanks to Dennis Flanagan, Colin Plumb, Niall Douglas, + Aaron Bachmann, Emery Berger, and others. + * Speed up non-fastbin processing enough to remove fastbins. + * Remove useless cfree() to avoid conflicts with other apps. + * Remove internal memcpy, memset. Compilers handle builtins better. + * Remove some options that no one ever used and rename others. + + V2.7.2 Sat Aug 17 09:07:30 2002 Doug Lea (dl at gee) + * Fix malloc_state bitmap array misdeclaration + + V2.7.1 Thu Jul 25 10:58:03 2002 Doug Lea (dl at gee) + * Allow tuning of FIRST_SORTED_BIN_SIZE + * Use PTR_UINT as type for all ptr->int casts. Thanks to John Belmonte. + * Better detection and support for non-contiguousness of MORECORE. + Thanks to Andreas Mueller, Conal Walsh, and Wolfram Gloger + * Bypass most of malloc if no frees. Thanks To Emery Berger. + * Fix freeing of old top non-contiguous chunk im sysmalloc. + * Raised default trim and map thresholds to 256K. + * Fix mmap-related #defines. Thanks to Lubos Lunak. + * Fix copy macros; added LACKS_FCNTL_H. Thanks to Neal Walfield. + * Branch-free bin calculation + * Default trim and mmap thresholds now 256K. + + V2.7.0 Sun Mar 11 14:14:06 2001 Doug Lea (dl at gee) + * Introduce independent_comalloc and independent_calloc. + Thanks to Michael Pachos for motivation and help. + * Make optional .h file available + * Allow > 2GB requests on 32bit systems. + * new WIN32 sbrk, mmap, munmap, lock code from . + Thanks also to Andreas Mueller , + and Anonymous. + * Allow override of MALLOC_ALIGNMENT (Thanks to Ruud Waij for + helping test this.) + * memalign: check alignment arg + * realloc: don't try to shift chunks backwards, since this + leads to more fragmentation in some programs and doesn't + seem to help in any others. + * Collect all cases in malloc requiring system memory into sysmalloc + * Use mmap as backup to sbrk + * Place all internal state in malloc_state + * Introduce fastbins (although similar to 2.5.1) + * Many minor tunings and cosmetic improvements + * Introduce USE_PUBLIC_MALLOC_WRAPPERS, USE_MALLOC_LOCK + * Introduce MALLOC_FAILURE_ACTION, MORECORE_CONTIGUOUS + Thanks to Tony E. Bennett and others. + * Include errno.h to support default failure action. + + V2.6.6 Sun Dec 5 07:42:19 1999 Doug Lea (dl at gee) + * return null for negative arguments + * Added Several WIN32 cleanups from Martin C. Fong + * Add 'LACKS_SYS_PARAM_H' for those systems without 'sys/param.h' + (e.g. WIN32 platforms) + * Cleanup header file inclusion for WIN32 platforms + * Cleanup code to avoid Microsoft Visual C++ compiler complaints + * Add 'USE_DL_PREFIX' to quickly allow co-existence with existing + memory allocation routines + * Set 'malloc_getpagesize' for WIN32 platforms (needs more work) + * Use 'assert' rather than 'ASSERT' in WIN32 code to conform to + usage of 'assert' in non-WIN32 code + * Improve WIN32 'sbrk()' emulation's 'findRegion()' routine to + avoid infinite loop + * Always call 'fREe()' rather than 'free()' + + V2.6.5 Wed Jun 17 15:57:31 1998 Doug Lea (dl at gee) + * Fixed ordering problem with boundary-stamping + + V2.6.3 Sun May 19 08:17:58 1996 Doug Lea (dl at gee) + * Added pvalloc, as recommended by H.J. Liu + * Added 64bit pointer support mainly from Wolfram Gloger + * Added anonymously donated WIN32 sbrk emulation + * Malloc, calloc, getpagesize: add optimizations from Raymond Nijssen + * malloc_extend_top: fix mask error that caused wastage after + foreign sbrks + * Add linux mremap support code from HJ Liu + + V2.6.2 Tue Dec 5 06:52:55 1995 Doug Lea (dl at gee) + * Integrated most documentation with the code. + * Add support for mmap, with help from + Wolfram Gloger (Gloger@lrz.uni-muenchen.de). + * Use last_remainder in more cases. + * Pack bins using idea from colin@nyx10.cs.du.edu + * Use ordered bins instead of best-fit threshhold + * Eliminate block-local decls to simplify tracing and debugging. + * Support another case of realloc via move into top + * Fix error occuring when initial sbrk_base not word-aligned. + * Rely on page size for units instead of SBRK_UNIT to + avoid surprises about sbrk alignment conventions. + * Add mallinfo, mallopt. Thanks to Raymond Nijssen + (raymond@es.ele.tue.nl) for the suggestion. + * Add `pad' argument to malloc_trim and top_pad mallopt parameter. + * More precautions for cases where other routines call sbrk, + courtesy of Wolfram Gloger (Gloger@lrz.uni-muenchen.de). + * Added macros etc., allowing use in linux libc from + H.J. Lu (hjl@gnu.ai.mit.edu) + * Inverted this history list + + V2.6.1 Sat Dec 2 14:10:57 1995 Doug Lea (dl at gee) + * Re-tuned and fixed to behave more nicely with V2.6.0 changes. + * Removed all preallocation code since under current scheme + the work required to undo bad preallocations exceeds + the work saved in good cases for most test programs. + * No longer use return list or unconsolidated bins since + no scheme using them consistently outperforms those that don't + given above changes. + * Use best fit for very large chunks to prevent some worst-cases. + * Added some support for debugging + + V2.6.0 Sat Nov 4 07:05:23 1995 Doug Lea (dl at gee) + * Removed footers when chunks are in use. Thanks to + Paul Wilson (wilson@cs.texas.edu) for the suggestion. + + V2.5.4 Wed Nov 1 07:54:51 1995 Doug Lea (dl at gee) + * Added malloc_trim, with help from Wolfram Gloger + (wmglo@Dent.MED.Uni-Muenchen.DE). + + V2.5.3 Tue Apr 26 10:16:01 1994 Doug Lea (dl at g) + + V2.5.2 Tue Apr 5 16:20:40 1994 Doug Lea (dl at g) + * realloc: try to expand in both directions + * malloc: swap order of clean-bin strategy; + * realloc: only conditionally expand backwards + * Try not to scavenge used bins + * Use bin counts as a guide to preallocation + * Occasionally bin return list chunks in first scan + * Add a few optimizations from colin@nyx10.cs.du.edu + + V2.5.1 Sat Aug 14 15:40:43 1993 Doug Lea (dl at g) + * faster bin computation & slightly different binning + * merged all consolidations to one part of malloc proper + (eliminating old malloc_find_space & malloc_clean_bin) + * Scan 2 returns chunks (not just 1) + * Propagate failure in realloc if malloc returns 0 + * Add stuff to allow compilation on non-ANSI compilers + from kpv@research.att.com + + V2.5 Sat Aug 7 07:41:59 1993 Doug Lea (dl at g.oswego.edu) + * removed potential for odd address access in prev_chunk + * removed dependency on getpagesize.h + * misc cosmetics and a bit more internal documentation + * anticosmetics: mangled names in macros to evade debugger strangeness + * tested on sparc, hp-700, dec-mips, rs6000 + with gcc & native cc (hp, dec only) allowing + Detlefs & Zorn comparison study (in SIGPLAN Notices.) + + Trial version Fri Aug 28 13:14:29 1992 Doug Lea (dl at g.oswego.edu) + * Based loosely on libg++-1.2X malloc. (It retains some of the overall + structure of old version, but most details differ.) + +*/ diff --git a/src/dlmalloc/src/dlmalloc.rs b/src/dlmalloc/src/dlmalloc.rs new file mode 100644 index 0000000000..fba13e69cf --- /dev/null +++ b/src/dlmalloc/src/dlmalloc.rs @@ -0,0 +1,1755 @@ +// This is a version of dlmalloc.c ported to Rust. You can find the original +// source at ftp://g.oswego.edu/pub/misc/malloc.c +// +// The original source was written by Doug Lea and released to the public domain + +use core::cmp; +use core::mem; +use core::ptr; + +use sys; + +pub struct Dlmalloc { + smallmap: u32, + treemap: u32, + smallbins: [*mut Chunk; (NSMALLBINS + 1) * 2], + treebins: [*mut TreeChunk; NTREEBINS], + dvsize: usize, + topsize: usize, + dv: *mut Chunk, + top: *mut Chunk, + footprint: usize, + max_footprint: usize, + seg: Segment, + trim_check: usize, + least_addr: *mut u8, + release_checks: usize, +} + +pub const DLMALLOC_INIT: Dlmalloc = Dlmalloc { + smallmap: 0, + treemap: 0, + smallbins: [0 as *mut _; (NSMALLBINS + 1) * 2], + treebins: [0 as *mut _; NTREEBINS], + dvsize: 0, + topsize: 0, + dv: 0 as *mut _, + top: 0 as *mut _, + footprint: 0, + max_footprint: 0, + seg: Segment { + base: 0 as *mut _, + size: 0, + next: 0 as *mut _, + flags: 0, + }, + trim_check: 0, + least_addr: 0 as *mut _, + release_checks: 0, +}; + +// TODO: document this +const NSMALLBINS: usize = 32; +const NTREEBINS: usize = 32; +const SMALLBIN_SHIFT: usize = 3; +const TREEBIN_SHIFT: usize = 8; + +// TODO: runtime configurable? documentation? +const DEFAULT_GRANULARITY: usize = 64 * 1024; +const DEFAULT_TRIM_THRESHOLD: usize = 2 * 1024 * 1024; +const MAX_RELEASE_CHECK_RATE: usize = 4095; + +#[repr(C)] +struct Chunk { + prev_foot: usize, + head: usize, + prev: *mut Chunk, + next: *mut Chunk, +} + +#[repr(C)] +struct TreeChunk { + chunk: Chunk, + child: [*mut TreeChunk; 2], + parent: *mut TreeChunk, + index: u32, +} + +#[repr(C)] +#[derive(Clone, Copy)] +struct Segment { + base: *mut u8, + size: usize, + next: *mut Segment, + flags: u32, +} + +fn align_up(a: usize, alignment: usize) -> usize { + debug_assert!(alignment.is_power_of_two()); + (a + (alignment - 1)) & !(alignment - 1) +} + +fn left_bits(x: u32) -> u32 { + (x << 1) | (!(x << 1) + 1) +} + +fn least_bit(x: u32) -> u32 { + x & (!x + 1) +} + +fn leftshift_for_tree_index(x: u32) -> u32 { + let x = x as usize; + if x == NTREEBINS - 1 { + 0 + } else { + (mem::size_of::() * 8 - 1 - ((x >> 1) + TREEBIN_SHIFT - 2)) as u32 + } +} + +impl Dlmalloc { + pub fn new() -> Dlmalloc { + DLMALLOC_INIT + } + + // TODO: can we get rid of this? + pub fn malloc_alignment(&self) -> usize { + mem::size_of::() * 2 + } + + // TODO: dox + fn chunk_overhead(&self) -> usize { + mem::size_of::() + } + + fn mmap_chunk_overhead(&self) -> usize { + 2 * mem::size_of::() + } + + // TODO: dox + fn min_large_size(&self) -> usize { + 1 << TREEBIN_SHIFT + } + + // TODO: dox + fn max_small_size(&self) -> usize { + self.min_large_size() - 1 + } + + // TODO: dox + fn max_small_request(&self) -> usize { + self.max_small_size() - (self.malloc_alignment() - 1) - self.chunk_overhead() + } + + // TODO: dox + fn min_chunk_size(&self) -> usize { + align_up(mem::size_of::(), self.malloc_alignment()) + } + + // TODO: dox + fn min_request(&self) -> usize { + self.min_chunk_size() - self.chunk_overhead() - 1 + } + + // TODO: dox + fn max_request(&self) -> usize { + (!self.min_chunk_size() + 1) << 2 + } + + fn pad_request(&self, amt: usize) -> usize { + align_up(amt + self.chunk_overhead(), self.malloc_alignment()) + } + + fn small_index(&self, size: usize) -> u32 { + (size >> SMALLBIN_SHIFT) as u32 + } + + fn small_index2size(&self, idx: u32) -> usize { + (idx as usize) << SMALLBIN_SHIFT + } + + fn is_small(&self, s: usize) -> bool { + s >> SMALLBIN_SHIFT < NSMALLBINS + } + + fn is_aligned(&self, a: usize) -> bool { + a & (self.malloc_alignment() - 1) == 0 + } + + fn align_offset(&self, addr: *mut u8) -> usize { + align_up(addr as usize, self.malloc_alignment()) - (addr as usize) + } + + fn top_foot_size(&self) -> usize { + self.align_offset(unsafe { Chunk::to_mem(ptr::null_mut()) }) + + self.pad_request(mem::size_of::()) + + self.min_chunk_size() + } + + fn mmap_foot_pad(&self) -> usize { + 4 * mem::size_of::() + } + + fn align_as_chunk(&self, ptr: *mut u8) -> *mut Chunk { + unsafe { + let chunk = Chunk::to_mem(ptr as *mut Chunk); + ptr.offset(self.align_offset(chunk) as isize) + as *mut Chunk + } + } + + fn request2size(&self, req: usize) -> usize { + if req < self.min_request() { + self.min_chunk_size() + } else { + self.pad_request(req) + } + } + + unsafe fn overhead_for(&self, p: *mut Chunk) -> usize { + if Chunk::mmapped(p) { + self.mmap_chunk_overhead() + } else { + self.chunk_overhead() + } + } + + pub unsafe fn calloc_must_clear(&self, ptr: *mut u8) -> bool { + !sys::allocates_zeros() || !Chunk::mmapped(Chunk::from_mem(ptr)) + } + + pub unsafe fn malloc(&mut self, size: usize) -> *mut u8 { + self.check_malloc_state(); + + let nb; + if size <= self.max_small_request() { + nb = self.request2size(size); + let mut idx = self.small_index(nb); + let smallbits = self.smallmap >> idx; + + // Check the bin for `idx` (the lowest bit) but also check the next + // bin up to use that to satisfy our request, if needed. + if smallbits & 0b11 != 0 { + // If our the lowest bit, our `idx`, is unset then bump up the + // index as we'll be using the next bucket up. + idx += !smallbits & 1; + + let b = self.smallbin_at(idx); + let p = (*b).prev; + self.unlink_first_small_chunk(b, p, idx); + let smallsize = self.small_index2size(idx); + Chunk::set_inuse_and_pinuse(p, smallsize); + let ret = Chunk::to_mem(p); + self.check_malloced_chunk(ret, nb); + return ret + } + + if nb > self.dvsize { + // If there's some other bin with some memory, then we just use + // the next smallest bin + if smallbits != 0 { + let leftbits = (smallbits << idx) & left_bits(1 << idx); + let leastbit = least_bit(leftbits); + let i = leastbit.trailing_zeros(); + let b = self.smallbin_at(i); + let p = (*b).prev; + debug_assert_eq!(Chunk::size(p), self.small_index2size(i)); + self.unlink_first_small_chunk(b, p, i); + let smallsize = self.small_index2size(i); + let rsize = smallsize - nb; + if mem::size_of::() != 4 && rsize < self.min_chunk_size() { + Chunk::set_inuse_and_pinuse(p, smallsize); + } else { + Chunk::set_size_and_pinuse_of_inuse_chunk(p, nb); + let r = Chunk::plus_offset(p, nb); + Chunk::set_size_and_pinuse_of_free_chunk(r, rsize); + self.replace_dv(r, rsize); + } + let ret = Chunk::to_mem(p); + self.check_malloced_chunk(ret, nb); + return ret + + } else if self.treemap != 0 { + let mem = self.tmalloc_small(nb); + if !mem.is_null() { + self.check_malloced_chunk(mem, nb); + self.check_malloc_state(); + return mem + } + } + } + } else if size >= self.max_request() { + // TODO: translate this to unsupported + return ptr::null_mut() + } else { + nb = self.pad_request(size); + if self.treemap != 0 { + let mem = self.tmalloc_large(nb); + if !mem.is_null() { + self.check_malloced_chunk(mem, nb); + self.check_malloc_state(); + return mem + } + } + } + + // use the `dv` node if we can, splitting it if necessary or otherwise + // exhausting the entire chunk + if nb <= self.dvsize { + let rsize = self.dvsize - nb; + let p = self.dv; + if rsize >= self.min_chunk_size() { + self.dv = Chunk::plus_offset(p, nb); + self.dvsize = rsize; + let r = self.dv; + Chunk::set_size_and_pinuse_of_free_chunk(r, rsize); + Chunk::set_size_and_pinuse_of_inuse_chunk(p, nb); + } else { + let dvs = self.dvsize; + self.dvsize = 0; + self.dv = ptr::null_mut(); + Chunk::set_inuse_and_pinuse(p, dvs); + } + let ret = Chunk::to_mem(p); + self.check_malloced_chunk(ret, nb); + self.check_malloc_state(); + return ret + } + + // Split the top node if we can + if nb < self.topsize { + self.topsize -= nb; + let rsize = self.topsize; + let p = self.top; + self.top = Chunk::plus_offset(p, nb); + let r = self.top; + (*r).head = rsize | PINUSE; + Chunk::set_size_and_pinuse_of_inuse_chunk(p, nb); + self.check_top_chunk(self.top); + let ret = Chunk::to_mem(p); + self.check_malloced_chunk(ret, nb); + self.check_malloc_state(); + return ret + } + + self.sys_alloc(nb) + } + + unsafe fn sys_alloc(&mut self, size: usize) -> *mut u8 { + self.check_malloc_state(); + let asize = align_up(size + self.top_foot_size() + self.malloc_alignment(), + DEFAULT_GRANULARITY); + + let (tbase, tsize, flags) = sys::alloc(asize); + if tbase.is_null() { + return tbase + } + + self.footprint += tsize; + self.max_footprint = cmp::max(self.max_footprint, self.footprint); + + if self.top.is_null() { + if self.least_addr.is_null() || tbase < self.least_addr { + self.least_addr = tbase; + } + self.seg.base = tbase; + self.seg.size = tsize; + self.seg.flags = flags; + self.release_checks = MAX_RELEASE_CHECK_RATE; + self.init_bins(); + let tsize = tsize - self.top_foot_size(); + self.init_top(tbase as *mut Chunk, tsize); + // let mn = Chunk::next(Chunk::from_mem(self as *mut _ as *mut u8)); + // let top_foot_size = self.top_foot_size(); + // self.init_top(mn, tbase as usize + tsize - mn as usize - top_foot_size); + } else { + let mut sp = &mut self.seg as *mut Segment; + while !sp.is_null() && tbase != Segment::top(sp) { + sp = (*sp).next; + } + if !sp.is_null() && + !Segment::is_extern(sp) && + Segment::sys_flags(sp) == flags && + Segment::holds(sp, self.top as *mut u8) + { + (*sp).size += tsize; + let ptr = self.top; + let size = self.topsize + tsize; + self.init_top(ptr, size); + } else { + self.least_addr = cmp::min(tbase, self.least_addr); + let mut sp = &mut self.seg as *mut Segment; + while !sp.is_null() && (*sp).base != tbase.offset(tsize as isize) { + sp = (*sp).next; + } + if !sp.is_null() && + !Segment::is_extern(sp) && + Segment::sys_flags(sp) == flags + { + let oldbase = (*sp).base; + (*sp).base = tbase; + (*sp).size += tsize; + return self.prepend_alloc(tbase, oldbase, size); + } else { + self.add_segment(tbase, tsize, flags); + } + } + } + + if size < self.topsize { + self.topsize -= size; + let rsize = self.topsize; + let p = self.top; + self.top = Chunk::plus_offset(p, size); + let r = self.top; + (*r).head = rsize | PINUSE; + Chunk::set_size_and_pinuse_of_inuse_chunk(p, size); + let ret = Chunk::to_mem(p); + self.check_top_chunk(self.top); + self.check_malloced_chunk(ret, size); + self.check_malloc_state(); + return ret + } + + return ptr::null_mut() + } + + pub unsafe fn realloc(&mut self, oldmem: *mut u8, bytes: usize) -> *mut u8 { + if bytes >= self.max_request() { + return ptr::null_mut() + } + let nb = self.request2size(bytes); + let oldp = Chunk::from_mem(oldmem); + let newp = self.try_realloc_chunk(oldp, nb, true); + if !newp.is_null() { + self.check_inuse_chunk(newp); + return Chunk::to_mem(newp) + } + let ptr = self.malloc(bytes); + if !ptr.is_null() { + let oc = Chunk::size(oldp) - self.overhead_for(oldp); + ptr::copy_nonoverlapping(oldmem, ptr, cmp::min(oc, bytes)); + self.free(oldmem); + } + return ptr + } + + unsafe fn try_realloc_chunk(&mut self, p: *mut Chunk, nb: usize, can_move: bool) + -> *mut Chunk + { + let oldsize = Chunk::size(p); + let next = Chunk::plus_offset(p, oldsize); + + if Chunk::mmapped(p) { + self.mmap_resize(p, nb, can_move) + } else if oldsize >= nb { + let rsize = oldsize - nb; + if rsize >= self.min_chunk_size() { + let r = Chunk::plus_offset(p, nb); + Chunk::set_inuse(p, nb); + Chunk::set_inuse(r, rsize); + self.dispose_chunk(r, rsize); + } + p + } else if next == self.top { // extend into top + if oldsize + self.topsize <= nb { + return ptr::null_mut() + } + let newsize = oldsize + self.topsize; + let newtopsize = newsize - nb; + let newtop = Chunk::plus_offset(p, nb); + Chunk::set_inuse(p, nb); + (*newtop).head = newtopsize | PINUSE; + self.top = newtop; + self.topsize = newtopsize; + p + } else if next == self.dv { // extend into dv + let dvs = self.dvsize; + if oldsize + dvs < nb { + return ptr::null_mut() + } + let dsize = oldsize + dvs - nb; + if dsize >= self.min_chunk_size() { + let r = Chunk::plus_offset(p, nb); + let n = Chunk::plus_offset(r, dsize); + Chunk::set_inuse(p, nb); + Chunk::set_size_and_pinuse_of_free_chunk(r, dsize); + Chunk::clear_pinuse(n); + self.dvsize = dsize; + self.dv = r; + } else { // exhaust dv + let newsize = oldsize + dvs; + Chunk::set_inuse(p, newsize); + self.dvsize = 0; + self.dv = ptr::null_mut(); + } + return p + } else if !Chunk::cinuse(next) { // extend into the next free chunk + let nextsize = Chunk::size(next); + if oldsize + nextsize < nb { + return ptr::null_mut() + } + let rsize = oldsize + nextsize - nb; + self.unlink_chunk(next, nextsize); + if rsize < self.min_chunk_size() { + let newsize = oldsize + nextsize; + Chunk::set_inuse(p, newsize); + } else { + let r = Chunk::plus_offset(p, nb); + Chunk::set_inuse(p, nb); + Chunk::set_inuse(r, rsize); + self.dispose_chunk(r, rsize); + } + p + } else { + ptr::null_mut() + } + } + + unsafe fn mmap_resize(&mut self, oldp: *mut Chunk, nb: usize, can_move: bool) + -> *mut Chunk + { + let oldsize = Chunk::size(oldp); + // Can't shrink mmap regions below a small size + if self.is_small(nb) { + return ptr::null_mut() + } + + // Keep the old chunk if it's big enough but not too big + if oldsize >= nb + mem::size_of::() && + (oldsize - nb) <= (DEFAULT_GRANULARITY << 1) + { + return oldp + } + + let offset = (*oldp).prev_foot; + let oldmmsize = oldsize + offset + self.mmap_foot_pad(); + let newmmsize = self.mmap_align(nb + 6 * mem::size_of::() + + self.malloc_alignment() - 1); + let ptr = sys::remap((oldp as *mut u8).offset(-(offset as isize)), + oldmmsize, + newmmsize, + can_move); + if ptr.is_null() { + return ptr::null_mut(); + } + let newp = ptr.offset(offset as isize) as *mut Chunk; + let psize = newmmsize - offset - self.mmap_foot_pad(); + (*newp).head = psize; + (*Chunk::plus_offset(newp, psize)).head = Chunk::fencepost_head(); + (*Chunk::plus_offset(newp, psize + mem::size_of::())).head = 0; + self.least_addr = cmp::min(ptr, self.least_addr); + self.footprint = self.footprint + newmmsize - oldmmsize; + self.max_footprint = cmp::max(self.max_footprint, self.footprint); + self.check_mmapped_chunk(newp); + return newp + } + + fn mmap_align(&self, a: usize) -> usize { + align_up(a, sys::page_size()) + } + + // Only call this with power-of-two alignment and alignment > + // `self.malloc_alignment()` + pub unsafe fn memalign(&mut self, mut alignment: usize, bytes: usize) + -> *mut u8 + { + if alignment < self.min_chunk_size() { + alignment = self.min_chunk_size(); + } + if bytes >= self.max_request() - alignment { + return ptr::null_mut() + } + let nb = self.request2size(bytes); + let req = nb + alignment + self.min_chunk_size() - self.chunk_overhead(); + let mem = self.malloc(req); + if mem.is_null() { + return mem + } + let mut p = Chunk::from_mem(mem); + if mem as usize & (alignment - 1) != 0 { + // Here we find an aligned sopt inside the chunk. Since we need to + // give back leading space in a chunk of at least `min_chunk_size`, + // if the first calculation places us at a spot with less than + // `min_chunk_size` leader we can move to the next aligned spot. + // we've allocated enough total room so that this is always possible + let br = Chunk::from_mem(((mem as usize + alignment - 1) & (!alignment + 1)) as *mut u8); + let pos = if (br as usize - p as usize) > self.min_chunk_size() { + br as *mut u8 + } else { + (br as *mut u8).offset(alignment as isize) + }; + let newp = pos as *mut Chunk; + let leadsize = pos as usize - p as usize; + let newsize = Chunk::size(p) - leadsize; + + // for mmapped chunks just adjust the offset + if Chunk::mmapped(p) { + (*newp).prev_foot = (*p).prev_foot + leadsize; + (*newp).head = newsize; + } else { + // give back the leader, use the rest + Chunk::set_inuse(newp, newsize); + Chunk::set_inuse(p, leadsize); + self.dispose_chunk(p, leadsize); + } + p = newp; + } + + // give back spare room at the end + if !Chunk::mmapped(p) { + let size = Chunk::size(p); + if size > nb + self.min_chunk_size() { + let remainder_size = size - nb; + let remainder = Chunk::plus_offset(p, nb); + Chunk::set_inuse(p, nb); + Chunk::set_inuse(remainder, remainder_size); + self.dispose_chunk(remainder, remainder_size); + } + } + + let mem = Chunk::to_mem(p); + debug_assert!(Chunk::size(p) >= nb); + debug_assert_eq!(align_up(mem as usize, alignment), mem as usize); + self.check_inuse_chunk(p); + return mem + } + + // consolidate and bin a chunk, differs from exported versions of free + // mainly in that the chunk need not be marked as inuse + unsafe fn dispose_chunk(&mut self, mut p: *mut Chunk, mut psize: usize) { + let next = Chunk::plus_offset(p, psize); + if !Chunk::pinuse(p) { + let prevsize = (*p).prev_foot; + if Chunk::mmapped(p) { + psize += prevsize + self.mmap_foot_pad(); + if sys::free((p as *mut u8).offset(-(prevsize as isize)), psize) { + self.footprint -= psize; + } + return + } + let prev = Chunk::minus_offset(p, prevsize); + psize += prevsize; + p = prev; + if p != self.dv { + self.unlink_chunk(p, prevsize); + } else if (*next).head & INUSE == INUSE { + self.dvsize = psize; + Chunk::set_free_with_pinuse(p, psize, next); + return + } + } + + if !Chunk::cinuse(next) { // consolidate forward + if next == self.top { + self.topsize += psize; + let tsize = self.topsize; + self.top = p; + (*p).head = tsize | PINUSE; + if p == self.dv { + self.dv = ptr::null_mut(); + self.dvsize = 0; + } + return + } else if next == self.dv { + self.dvsize += psize; + let dsize = self.dvsize; + self.dv = p; + Chunk::set_size_and_pinuse_of_free_chunk(p, dsize); + return + } else { + let nsize = Chunk::size(next); + psize += nsize; + self.unlink_chunk(next, nsize); + Chunk::set_size_and_pinuse_of_free_chunk(p, psize); + if p == self.dv { + self.dvsize = psize; + return + } + } + } else { + Chunk::set_free_with_pinuse(p, psize, next); + } + self.insert_chunk(p, psize); + } + + unsafe fn init_top(&mut self, ptr: *mut Chunk, size: usize) { + let offset = self.align_offset(Chunk::to_mem(ptr)); + let p = Chunk::plus_offset(ptr, offset); + let size = size - offset; + + self.top = p; + self.topsize = size; + (*p).head = size | PINUSE; + (*Chunk::plus_offset(p, size)).head = self.top_foot_size(); + self.trim_check = DEFAULT_TRIM_THRESHOLD; + } + + unsafe fn init_bins(&mut self) { + for i in 0..NSMALLBINS as u32 { + let bin = self.smallbin_at(i); + (*bin).next = bin; + (*bin).prev = bin; + } + } + + unsafe fn prepend_alloc(&mut self, + newbase: *mut u8, + oldbase: *mut u8, + size: usize) -> *mut u8 { + let p = self.align_as_chunk(newbase); + let mut oldfirst = self.align_as_chunk(oldbase); + let psize = oldfirst as usize - p as usize; + let q = Chunk::plus_offset(p, size); + let mut qsize = psize - size; + Chunk::set_size_and_pinuse_of_inuse_chunk(p, size); + + debug_assert!(oldfirst > q); + debug_assert!(Chunk::pinuse(oldfirst)); + debug_assert!(qsize >= self.min_chunk_size()); + + + // consolidate the remainder with the first chunk of the old base + if oldfirst == self.top { + self.topsize += qsize; + let tsize = self.topsize ; + self.top = q; + (*q).head = tsize | PINUSE; + self.check_top_chunk(q); + } else if oldfirst == self.dv { + self.dvsize += qsize; + let dsize = self.dvsize; + self.dv = q; + Chunk::set_size_and_pinuse_of_free_chunk(q, dsize); + } else { + if !Chunk::inuse(oldfirst) { + let nsize = Chunk::size(oldfirst); + self.unlink_chunk(oldfirst, nsize); + oldfirst = Chunk::plus_offset(oldfirst, nsize); + qsize += nsize; + } + Chunk::set_free_with_pinuse(q, qsize, oldfirst); + self.insert_chunk(q, qsize); + self.check_free_chunk(q); + } + + let ret = Chunk::to_mem(p); + self.check_malloced_chunk(ret, size); + self.check_malloc_state(); + return ret + } + + // add a segment to hold a new noncontiguous region + unsafe fn add_segment(&mut self, tbase: *mut u8, tsize: usize, flags: u32) { + // TODO: what in the world is this function doing + + // Determine locations and sizes of segment, fenceposts, and the old top + let old_top = self.top as *mut u8; + let oldsp = self.segment_holding(old_top); + let old_end = Segment::top(oldsp); + let ssize = self.pad_request(mem::size_of::()); + let offset = ssize + mem::size_of::() * 4 + self.malloc_alignment() - 1; + let rawsp = old_end.offset(-(offset as isize)); + let offset = self.align_offset(Chunk::to_mem(rawsp as *mut Chunk)); + let asp = rawsp.offset(offset as isize); + let csp = if asp < old_top.offset(self.min_chunk_size() as isize) { + old_top + } else { + asp + }; + let sp = csp as *mut Chunk; + let ss = Chunk::to_mem(sp) as *mut Segment; + let tnext = Chunk::plus_offset(sp, ssize); + let mut p = tnext; + let mut nfences = 0; + + // reset the top to our new space + let size = tsize - self.top_foot_size(); + self.init_top(tbase as *mut Chunk, size); + + // set up our segment record + debug_assert!(self.is_aligned(ss as usize)); + Chunk::set_size_and_pinuse_of_inuse_chunk(sp, ssize); + *ss = self.seg; // push our current record + self.seg.base = tbase; + self.seg.size = tsize; + self.seg.flags = flags; + self.seg.next = ss; + + // insert trailing fences + loop { + let nextp = Chunk::plus_offset(p, mem::size_of::()); + (*p).head = Chunk::fencepost_head(); + nfences += 1; + if (&(*nextp).head as *const usize as *mut u8) < old_end { + p = nextp; + } else { + break + } + } + debug_assert!(nfences >= 2); + + // insert the rest of the old top into a bin as an ordinary free chunk + if csp != old_top { + let q = old_top as *mut Chunk; + let psize = csp as usize - old_top as usize; + let tn = Chunk::plus_offset(q, psize); + Chunk::set_free_with_pinuse(q, psize, tn); + self.insert_chunk(q, psize); + } + + self.check_top_chunk(self.top); + self.check_malloc_state(); + } + + unsafe fn segment_holding(&self, ptr: *mut u8) -> *mut Segment { + let mut sp = &self.seg as *const Segment as *mut Segment; + while !sp.is_null() { + if (*sp).base <= ptr && ptr < Segment::top(sp) { + return sp + } + sp = (*sp).next; + } + ptr::null_mut() + } + + unsafe fn tmalloc_small(&mut self, size: usize) -> *mut u8 { + let leastbit = least_bit(self.treemap); + let i = leastbit.trailing_zeros(); + let mut v = *self.treebin_at(i); + let mut t = v; + let mut rsize = Chunk::size(TreeChunk::chunk(t)) - size; + + loop { + t = TreeChunk::leftmost_child(t); + if t.is_null() { + break + } + let trem = Chunk::size(TreeChunk::chunk(t)) - size; + if trem < rsize { + rsize = trem; + v = t; + } + } + + let vc = TreeChunk::chunk(v); + let r = Chunk::plus_offset(vc, size) as *mut TreeChunk; + debug_assert_eq!(Chunk::size(vc), rsize + size); + self.unlink_large_chunk(v); + if rsize < self.min_chunk_size() { + Chunk::set_inuse_and_pinuse(vc, rsize + size); + } else { + let rc = TreeChunk::chunk(r); + Chunk::set_size_and_pinuse_of_inuse_chunk(vc, size); + Chunk::set_size_and_pinuse_of_free_chunk(rc, rsize); + self.replace_dv(rc, rsize); + } + Chunk::to_mem(vc) + } + + unsafe fn tmalloc_large(&mut self, size: usize) -> *mut u8 { + let mut v = ptr::null_mut(); + let mut rsize = !size + 1; + let idx = self.compute_tree_index(size); + let mut t = *self.treebin_at(idx); + if !t.is_null() { + // Traverse thre tree for this bin looking for a node with size + // equal to the `size` above. + let mut sizebits = size << leftshift_for_tree_index(idx); + // Keep track of the deepest untaken right subtree + let mut rst = ptr::null_mut(); + loop { + let csize = Chunk::size(TreeChunk::chunk(t)); + if csize >= size && csize - size < rsize { + v = t; + rsize = csize - size; + if rsize == 0 { + break + } + } + let rt = (*t).child[1]; + t = (*t).child[(sizebits >> (mem::size_of::() * 8 - 1)) & 1]; + if !rt.is_null() && rt != t { + rst = rt; + } + if t.is_null() { + // Reset `t` to the least subtree holding sizes greater than + // the `size` above, breaking out + t = rst; + break + } + sizebits <<= 1; + } + } + + // Set t to the root of the next non-empty treebin + if t.is_null() && v.is_null() { + let leftbits = left_bits(1 << idx) & self.treemap; + if leftbits != 0 { + let leastbit = least_bit(leftbits); + let i = leastbit.trailing_zeros(); + t = *self.treebin_at(i); + } + } + + // Find the smallest of this tree or subtree + while !t.is_null() { + let csize = Chunk::size(TreeChunk::chunk(t)); + if csize >= size && csize - size < rsize { + rsize = csize - size; + v = t; + } + t = TreeChunk::leftmost_child(t); + } + + // If dv is a better fit, then return null so malloc will use it + if v.is_null() || rsize + size >= self.dvsize { + return ptr::null_mut() + } + + let vc = TreeChunk::chunk(v); + let r = Chunk::plus_offset(vc, size); + debug_assert_eq!(Chunk::size(vc), rsize + size); + self.unlink_large_chunk(v); + if rsize < self.min_chunk_size() { + Chunk::set_inuse_and_pinuse(vc, rsize + size); + } else { + Chunk::set_size_and_pinuse_of_inuse_chunk(vc, size); + Chunk::set_size_and_pinuse_of_free_chunk(r, rsize); + self.insert_chunk(r, rsize); + } + Chunk::to_mem(vc) + } + + unsafe fn smallbin_at(&mut self, idx: u32) -> *mut Chunk { + debug_assert!(((idx * 2) as usize) < self.smallbins.len()); + &mut *self.smallbins.get_unchecked_mut((idx as usize) * 2) + as *mut *mut Chunk as *mut Chunk + } + + unsafe fn treebin_at(&mut self, idx: u32) -> *mut *mut TreeChunk { + debug_assert!((idx as usize) < self.treebins.len()); + &mut *self.treebins.get_unchecked_mut(idx as usize) + } + + fn compute_tree_index(&self, size: usize) -> u32 { + let x = size >> TREEBIN_SHIFT; + if x == 0 { + 0 + } else if x > 0xffff { + NTREEBINS as u32 - 1 + } else { + let k = mem::size_of_val(&x) * 8 - 1 - (x.leading_zeros() as usize); + ((k << 1) + (size >> (k + TREEBIN_SHIFT - 1) & 1)) as u32 + } + } + + unsafe fn unlink_first_small_chunk(&mut self, + head: *mut Chunk, + next: *mut Chunk, + idx: u32) { + let ptr = (*next).prev; + debug_assert!(next != head); + debug_assert!(next != ptr); + debug_assert_eq!(Chunk::size(next), self.small_index2size(idx)); + if head == ptr { + self.clear_smallmap(idx); + } else { + (*ptr).next = head; + (*head).prev = ptr; + } + } + + unsafe fn replace_dv(&mut self, chunk: *mut Chunk, size: usize) { + let dvs = self.dvsize; + debug_assert!(self.is_small(dvs)); + if dvs != 0 { + let dv = self.dv; + self.insert_small_chunk(dv, dvs); + } + self.dvsize = size; + self.dv = chunk; + } + + unsafe fn insert_chunk(&mut self, chunk: *mut Chunk, size: usize) { + if self.is_small(size) { + self.insert_small_chunk(chunk, size); + } else { + self.insert_large_chunk(chunk as *mut TreeChunk, size); + } + } + + unsafe fn insert_small_chunk(&mut self, chunk: *mut Chunk, size: usize) { + let idx = self.small_index(size); + let head = self.smallbin_at(idx); + let mut f = head; + debug_assert!(size >= self.min_chunk_size()); + if !self.smallmap_is_marked(idx) { + self.mark_smallmap(idx); + } else { + f = (*head).prev; + } + + (*head).prev = chunk; + (*f).next = chunk; + (*chunk).prev = f; + (*chunk).next = head; + } + + unsafe fn insert_large_chunk(&mut self, chunk: *mut TreeChunk, size: usize) { + let idx = self.compute_tree_index(size); + let h = self.treebin_at(idx); + (*chunk).index = idx; + (*chunk).child[0] = ptr::null_mut(); + (*chunk).child[1] = ptr::null_mut(); + let chunkc = TreeChunk::chunk(chunk); + if !self.treemap_is_marked(idx) { + self.mark_treemap(idx); + *h = chunk; + (*chunk).parent = h as *mut TreeChunk; // TODO: dubious? + (*chunkc).next = chunkc; + (*chunkc).prev = chunkc; + } else { + let mut t = *h; + let mut k = size << leftshift_for_tree_index(idx); + loop { + if Chunk::size(TreeChunk::chunk(t)) != size { + let c = &mut (*t).child[(k >> mem::size_of::() * 8 - 1) & 1]; + k <<= 1; + if !c.is_null() { + t = *c; + } else { + *c = chunk; + (*chunk).parent = t; + (*chunkc).next = chunkc; + (*chunkc).prev = chunkc; + break + } + } else { + let tc = TreeChunk::chunk(t); + let f = (*tc).prev; + (*f).next = chunkc; + (*tc).prev = chunkc; + (*chunkc).prev = f; + (*chunkc).next = tc; + (*chunk).parent = ptr::null_mut(); + break + } + } + } + } + + unsafe fn smallmap_is_marked(&self, idx: u32) -> bool { + self.smallmap & (1 << idx) != 0 + } + + unsafe fn mark_smallmap(&mut self, idx: u32) { + self.smallmap |= 1 << idx; + } + + unsafe fn clear_smallmap(&mut self, idx: u32) { + self.smallmap &= !(1 << idx); + } + + unsafe fn treemap_is_marked(&self, idx: u32) -> bool { + self.treemap & (1 << idx) != 0 + } + + unsafe fn mark_treemap(&mut self, idx: u32) { + self.treemap |= 1 << idx; + } + + unsafe fn clear_treemap(&mut self, idx: u32) { + self.treemap &= !(1 << idx); + } + + unsafe fn unlink_chunk(&mut self, chunk: *mut Chunk, size: usize) { + if self.is_small(size) { + self.unlink_small_chunk(chunk, size) + } else { + self.unlink_large_chunk(chunk as *mut TreeChunk); + } + } + + unsafe fn unlink_small_chunk(&mut self, chunk: *mut Chunk, size: usize) { + let f = (*chunk).prev; + let b = (*chunk).next; + let idx = self.small_index(size); + debug_assert!(chunk != b); + debug_assert!(chunk != f); + debug_assert_eq!(Chunk::size(chunk), self.small_index2size(idx)); + if b == f { + self.clear_smallmap(idx); + } else { + (*f).next = b; + (*b).prev = f; + } + } + + unsafe fn unlink_large_chunk(&mut self, chunk: *mut TreeChunk) { + let xp = (*chunk).parent; + let mut r; + if TreeChunk::next(chunk) != chunk { + let f = TreeChunk::prev(chunk); + r = TreeChunk::next(chunk); + (*f).chunk.next = TreeChunk::chunk(r); + (*r).chunk.prev = TreeChunk::chunk(f); + } else { + let mut rp = &mut (*chunk).child[1]; + if rp.is_null() { + rp = &mut (*chunk).child[0]; + } + r = *rp; + if !rp.is_null() { + loop { + let mut cp = &mut (**rp).child[1]; + if cp.is_null() { + cp = &mut (**rp).child[0]; + } + if cp.is_null() { + break + } + rp = cp; + } + r = *rp; + *rp = ptr::null_mut(); + } + } + + if xp.is_null() { + return + } + + let h = self.treebin_at((*chunk).index); + if chunk == *h { + *h = r; + if r.is_null() { + self.clear_treemap((*chunk).index); + } + } else { + if (*xp).child[0] == chunk { + (*xp).child[0] = r; + } else { + (*xp).child[1] = r; + } + } + + if !r.is_null() { + (*r).parent = xp; + let c0 = (*chunk).child[0]; + if !c0.is_null() { + (*r).child[0] = c0; + (*c0).parent = r; + } + let c1 = (*chunk).child[1]; + if !c1.is_null() { + (*r).child[1] = c1; + (*c1).parent = r; + } + } + } + + pub unsafe fn free(&mut self, mem: *mut u8) { + self.check_malloc_state(); + + let mut p = Chunk::from_mem(mem); + let mut psize = Chunk::size(p); + let next = Chunk::plus_offset(p, psize); + if !Chunk::pinuse(p) { + let prevsize = (*p).prev_foot; + + if Chunk::mmapped(p) { + psize += prevsize + self.mmap_foot_pad(); + if sys::free((p as *mut u8).offset(-(prevsize as isize)), psize) { + self.footprint -= psize; + } + return + } + + let prev = Chunk::minus_offset(p, prevsize); + psize += prevsize; + p = prev; + if p != self.dv { + self.unlink_chunk(p, prevsize); + } else if (*next).head & INUSE == INUSE { + self.dvsize = psize; + Chunk::set_free_with_pinuse(p, psize, next); + return + } + } + + // Consolidate forward if we can + if !Chunk::cinuse(next) { + if next == self.top { + self.topsize += psize; + let tsize = self.topsize; + self.top = p; + (*p).head = tsize | PINUSE; + if p == self.dv { + self.dv = ptr::null_mut(); + self.dvsize = 0; + } + if self.should_trim(tsize) { + self.sys_trim(0); + } + return + } else if next == self.dv { + self.dvsize += psize; + let dsize = self.dvsize; + self.dv = p; + Chunk::set_size_and_pinuse_of_free_chunk(p, dsize); + return + } else { + let nsize = Chunk::size(next); + psize += nsize; + self.unlink_chunk(next, nsize); + Chunk::set_size_and_pinuse_of_free_chunk(p, psize); + if p == self.dv { + self.dvsize = psize; + return + } + } + } else { + Chunk::set_free_with_pinuse(p, psize, next); + } + + if self.is_small(psize) { + self.insert_small_chunk(p, psize); + self.check_free_chunk(p); + } else { + self.insert_large_chunk(p as *mut TreeChunk, psize); + self.check_free_chunk(p); + self.release_checks -= 1; + if self.release_checks == 0 { + self.release_unused_segments(); + } + } + } + + fn should_trim(&self, size: usize) -> bool { + size > self.trim_check + } + + unsafe fn sys_trim(&mut self, mut pad: usize) -> bool { + let mut released = 0; + if pad < self.max_request() && !self.top.is_null() { + pad += self.top_foot_size(); + if self.topsize > pad { + let unit = DEFAULT_GRANULARITY; + let extra = ((self.topsize - pad + unit - 1) / unit - 1) * unit; + let sp = self.segment_holding(self.top as *mut u8); + debug_assert!(!sp.is_null()); + + if !Segment::is_extern(sp) { + if Segment::can_release_part(sp) { + if (*sp).size >= extra && !self.has_segment_link(sp) { + let newsize = (*sp).size - extra; + if sys::free_part((*sp).base, (*sp).size, newsize) { + released = extra; + } + } + } + } + + if released != 0 { + (*sp).size -= released; + self.footprint -= released; + let top = self.top; + let topsize = self.topsize - released; + self.init_top(top, topsize); + self.check_top_chunk(self.top); + } + } + + released += self.release_unused_segments(); + + if released == 0 && self.topsize > self.trim_check { + self.trim_check = usize::max_value(); + } + } + + released != 0 + } + + unsafe fn has_segment_link(&self, ptr: *mut Segment) -> bool { + let mut sp = &self.seg as *const Segment as *mut Segment; + while !sp.is_null() { + if Segment::holds(ptr, sp as *mut u8) { + return true + } + sp = (*sp).next; + } + false + } + + /// Unmap and unlink any mapped segments that don't contain used chunks + unsafe fn release_unused_segments(&mut self) -> usize { + let mut released = 0; + let mut nsegs = 0; + let mut pred = &mut self.seg as *mut Segment; + let mut sp = (*pred).next; + while !sp.is_null() { + let base = (*sp).base; + let size = (*sp).size; + let next = (*sp).next; + nsegs += 1; + + if Segment::can_release_part(sp) && !Segment::is_extern(sp) { + let p = self.align_as_chunk(base); + let psize = Chunk::size(p); + // We can unmap if the first chunk holds the entire segment and + // isn't pinned. + let chunk_top = (p as *mut u8).offset(psize as isize); + let top = base.offset((size - self.top_foot_size()) as isize); + if !Chunk::inuse(p) && chunk_top >= top { + let tp = p as *mut TreeChunk; + debug_assert!(Segment::holds(sp, sp as *mut u8)); + if p == self.dv { + self.dv = ptr::null_mut(); + self.dvsize = 0; + } else { + self.unlink_large_chunk(tp); + } + if sys::free(base, size) { + released += size; + self.footprint -= size; + // unlink our obsolete record + sp = pred; + (*sp).next = next; + } else { + // back out if we can't unmap + self.insert_large_chunk(tp, psize); + } + } + } + pred = sp; + sp = next; + } + self.release_checks = if nsegs > MAX_RELEASE_CHECK_RATE { + nsegs + } else { + MAX_RELEASE_CHECK_RATE + }; + return released + } + + // Sanity checks + + unsafe fn check_any_chunk(&self, p: *mut Chunk) { + if !cfg!(debug_assertions) { + return + } + debug_assert!(self.is_aligned(Chunk::to_mem(p) as usize) || + (*p).head == Chunk::fencepost_head()); + debug_assert!(p as *mut u8 >= self.least_addr); + } + + unsafe fn check_top_chunk(&self, p: *mut Chunk) { + if !cfg!(debug_assertions) { + return + } + let sp = self.segment_holding(p as *mut u8); + let sz = (*p).head & !INUSE; + debug_assert!(!sp.is_null()); + debug_assert!(self.is_aligned(Chunk::to_mem(p) as usize) || + (*p).head == Chunk::fencepost_head()); + debug_assert!(p as *mut u8 >= self.least_addr); + debug_assert_eq!(sz, self.topsize); + debug_assert!(sz > 0); + debug_assert_eq!(sz, (*sp).base as usize + (*sp).size - p as usize - self.top_foot_size()); + debug_assert!(Chunk::pinuse(p)); + debug_assert!(!Chunk::pinuse(Chunk::plus_offset(p, sz))); + } + + unsafe fn check_malloced_chunk(&self, mem: *mut u8, s: usize) { + if !cfg!(debug_assertions) { + return + } + if mem.is_null() { + return + } + let p = Chunk::from_mem(mem); + let sz = (*p).head & !INUSE; + self.check_inuse_chunk(p); + debug_assert_eq!(align_up(sz, self.malloc_alignment()), sz); + debug_assert!(sz >= self.min_chunk_size()); + debug_assert!(sz >= s); + debug_assert!(Chunk::mmapped(p) || sz < (s + self.min_chunk_size())); + } + + unsafe fn check_inuse_chunk(&self, p: *mut Chunk) { + self.check_any_chunk(p); + debug_assert!(Chunk::inuse(p)); + debug_assert!(Chunk::pinuse(Chunk::next(p))); + debug_assert!(Chunk::mmapped(p) || Chunk::pinuse(p) || + Chunk::next(Chunk::prev(p)) == p); + if Chunk::mmapped(p) { + self.check_mmapped_chunk(p); + } + } + + unsafe fn check_mmapped_chunk(&self, p: *mut Chunk) { + if !cfg!(debug_assertions) { + return + } + let sz = Chunk::size(p); + let len = sz + (*p).prev_foot + self.mmap_foot_pad(); + debug_assert!(Chunk::mmapped(p)); + debug_assert!(self.is_aligned(Chunk::to_mem(p) as usize) || + (*p).head == Chunk::fencepost_head()); + debug_assert!(p as *mut u8 >= self.least_addr); + debug_assert!(!self.is_small(sz)); + debug_assert_eq!(align_up(len, sys::page_size()), len); + debug_assert_eq!((*Chunk::plus_offset(p, sz)).head, Chunk::fencepost_head()); + debug_assert_eq!((*Chunk::plus_offset(p, sz + mem::size_of::())).head, 0); + } + + unsafe fn check_free_chunk(&self, p: *mut Chunk) { + if !cfg!(debug_assertions) { + return + } + let sz = Chunk::size(p); + let next = Chunk::plus_offset(p, sz); + self.check_any_chunk(p); + debug_assert!(!Chunk::inuse(p)); + debug_assert!(!Chunk::pinuse(Chunk::next(p))); + debug_assert!(!Chunk::mmapped(p)); + if p != self.dv && p != self.top { + if sz >= self.min_chunk_size() { + debug_assert_eq!(align_up(sz, self.malloc_alignment()), sz); + debug_assert!(self.is_aligned(Chunk::to_mem(p) as usize)); + debug_assert_eq!((*next).prev_foot, sz); + debug_assert!(Chunk::pinuse(p)); + debug_assert!(next == self.top || Chunk::inuse(next)); + debug_assert_eq!((*(*p).next).prev, p); + debug_assert_eq!((*(*p).prev).next, p); + } else { + debug_assert_eq!(sz, mem::size_of::()); + } + } + } + + unsafe fn check_malloc_state(&mut self) { + if !cfg!(debug_assertions) { + return + } + for i in 0..NSMALLBINS { + self.check_smallbin(i as u32); + } + for i in 0..NTREEBINS { + self.check_treebin(i as u32); + } + if self.dvsize != 0 { + self.check_any_chunk(self.dv); + debug_assert_eq!(self.dvsize, Chunk::size(self.dv)); + debug_assert!(self.dvsize >= self.min_chunk_size()); + let dv = self.dv; + debug_assert!(!self.bin_find(dv)); + } + if !self.top.is_null() { + self.check_top_chunk(self.top); + debug_assert!(self.topsize > 0); + let top = self.top; + debug_assert!(!self.bin_find(top)); + } + let total = self.traverse_and_check(); + debug_assert!(total <= self.footprint); + debug_assert!(self.footprint <= self.max_footprint); + } + + unsafe fn check_smallbin(&mut self, idx: u32) { + if !cfg!(debug_assertions) { + return + } + let b = self.smallbin_at(idx); + let mut p = (*b).next; + let empty = self.smallmap & (1 << idx) == 0; + if p == b { + debug_assert!(empty) + } + if !empty { + while p != b { + let size = Chunk::size(p); + self.check_free_chunk(p); + debug_assert_eq!(self.small_index(size), idx); + debug_assert!((*p).next == b || + Chunk::size((*p).next) == Chunk::size(p)); + let q = Chunk::next(p); + if (*q).head != Chunk::fencepost_head() { + self.check_inuse_chunk(q); + } + p = (*p).next; + } + } + } + + unsafe fn check_treebin(&mut self, idx: u32) { + if !cfg!(debug_assertions) { + return + } + let tb = self.treebin_at(idx); + let t = *tb; + let empty = self.treemap & (1 << idx) == 0; + if t.is_null() { + debug_assert!(empty); + } + if !empty { + self.check_tree(t); + } + } + + unsafe fn check_tree(&mut self, t: *mut TreeChunk) { + if !cfg!(debug_assertions) { + return + } + let tc = TreeChunk::chunk(t); + let tindex = (*t).index; + let tsize = Chunk::size(tc); + let idx = self.compute_tree_index(tsize); + debug_assert_eq!(tindex, idx); + debug_assert!(tsize >= self.min_large_size()); + debug_assert!(tsize >= self.min_size_for_tree_index(idx)); + debug_assert!(idx == NTREEBINS as u32 - 1 || + tsize < self.min_size_for_tree_index(idx + 1)); + + let mut u = t; + let mut head = ptr::null_mut(); + loop { + let uc = TreeChunk::chunk(u); + self.check_any_chunk(uc); + debug_assert_eq!((*u).index, tindex); + debug_assert_eq!(Chunk::size(uc), tsize); + debug_assert!(!Chunk::inuse(uc)); + debug_assert!(!Chunk::pinuse(Chunk::next(uc))); + debug_assert_eq!((*(*uc).next).prev, uc); + debug_assert_eq!((*(*uc).prev).next, uc); + let left = (*u).child[0]; + let right = (*u).child[1]; + if (*u).parent.is_null() { + debug_assert!(left.is_null()); + debug_assert!(right.is_null()); + } else { + debug_assert!(head.is_null()); + head = u; + debug_assert!((*u).parent != u); + debug_assert!((*(*u).parent).child[0] == u || + (*(*u).parent).child[1] == u || + *((*u).parent as *mut *mut TreeChunk) == u); + if !left.is_null() { + debug_assert_eq!((*left).parent, u); + debug_assert!(left != u); + self.check_tree(left); + } + if !right.is_null() { + debug_assert_eq!((*right).parent, u); + debug_assert!(right != u); + self.check_tree(right); + } + if !left.is_null() && !right.is_null() { + debug_assert!(Chunk::size(TreeChunk::chunk(left)) < + Chunk::size(TreeChunk::chunk(right))); + } + } + + u = TreeChunk::prev(u); + if u == t { + break + } + } + debug_assert!(!head.is_null()); + } + + fn min_size_for_tree_index(&self, idx: u32) -> usize { + let idx = idx as usize; + (1 << ((idx >> 1) + TREEBIN_SHIFT)) | + ((idx & 1) << ((idx >> 1) + TREEBIN_SHIFT - 1)) + } + + unsafe fn bin_find(&mut self, chunk: *mut Chunk) -> bool { + let size = Chunk::size(chunk); + if self.is_small(size) { + let sidx = self.small_index(size); + let b = self.smallbin_at(sidx); + if !self.smallmap_is_marked(sidx) { + return false + } + let mut p = b; + loop { + if p == chunk { + return true + } + p = (*p).prev; + if p == b { + return false + } + } + } else { + let tidx = self.compute_tree_index(size); + if !self.treemap_is_marked(tidx) { + return false + } + let mut t = *self.treebin_at(tidx); + let mut sizebits = size << leftshift_for_tree_index(tidx); + while !t.is_null() && Chunk::size(TreeChunk::chunk(t)) != size { + t = (*t).child[(sizebits >> (mem::size_of::() * 8 - 1)) & 1]; + sizebits <<= 1; + } + if t.is_null() { + return false + } + let mut u = t; + let chunk = chunk as *mut TreeChunk; + loop { + if u == chunk { + return true + } + u = TreeChunk::prev(u); + if u == t { + return false + } + } + } + + } + + unsafe fn traverse_and_check(&self) -> usize { + 0 + } +} + +const PINUSE: usize = 1 << 0; +const CINUSE: usize = 1 << 1; +const FLAG4: usize = 1 << 2; +const INUSE: usize = PINUSE | CINUSE; +const FLAG_BITS: usize = PINUSE | CINUSE | FLAG4; + +impl Chunk { + unsafe fn fencepost_head() -> usize { + INUSE | mem::size_of::() + } + + unsafe fn size(me: *mut Chunk) -> usize { + (*me).head & !FLAG_BITS + } + + unsafe fn next(me: *mut Chunk) -> *mut Chunk { + (me as *mut u8).offset(((*me).head & !FLAG_BITS) as isize) as *mut Chunk + } + + unsafe fn prev(me: *mut Chunk) -> *mut Chunk { + (me as *mut u8).offset(-((*me).prev_foot as isize)) as *mut Chunk + } + + unsafe fn cinuse(me: *mut Chunk) -> bool { + (*me).head & CINUSE != 0 + } + + unsafe fn pinuse(me: *mut Chunk) -> bool { + (*me).head & PINUSE != 0 + } + + unsafe fn clear_pinuse(me: *mut Chunk) { + (*me).head &= !PINUSE; + } + + unsafe fn inuse(me: *mut Chunk) -> bool { + (*me).head & INUSE != PINUSE + } + + unsafe fn mmapped(me: *mut Chunk) -> bool { + (*me).head & INUSE == 0 + } + + unsafe fn set_inuse(me: *mut Chunk, size: usize) { + (*me).head = ((*me).head & PINUSE) | size | CINUSE; + let next = Chunk::plus_offset(me, size); + (*next).head |= PINUSE; + } + + unsafe fn set_inuse_and_pinuse(me: *mut Chunk, size: usize) { + (*me).head = PINUSE | size | CINUSE; + let next = Chunk::plus_offset(me, size); + (*next).head |= PINUSE; + } + + unsafe fn set_size_and_pinuse_of_inuse_chunk(me: *mut Chunk, size: usize) { + (*me).head = size | PINUSE | CINUSE; + } + + unsafe fn set_size_and_pinuse_of_free_chunk(me: *mut Chunk, size: usize) { + (*me).head = size | PINUSE; + Chunk::set_foot(me, size); + } + + unsafe fn set_free_with_pinuse(p: *mut Chunk, size: usize, n: *mut Chunk) { + Chunk::clear_pinuse(n); + Chunk::set_size_and_pinuse_of_free_chunk(p, size); + } + + unsafe fn set_foot(me: *mut Chunk, size: usize) { + let next = Chunk::plus_offset(me, size); + (*next).prev_foot = size; + } + + unsafe fn plus_offset(me: *mut Chunk, offset: usize) -> *mut Chunk { + (me as *mut u8).offset(offset as isize) as *mut Chunk + } + + unsafe fn minus_offset(me: *mut Chunk, offset: usize) -> *mut Chunk { + (me as *mut u8).offset(-(offset as isize)) as *mut Chunk + } + + unsafe fn to_mem(me: *mut Chunk) -> *mut u8 { + (me as *mut u8).offset(2 * (mem::size_of::() as isize)) + } + + unsafe fn from_mem(mem: *mut u8) -> *mut Chunk { + mem.offset(-2 * (mem::size_of::() as isize)) as *mut Chunk + } +} + +impl TreeChunk { + unsafe fn leftmost_child(me: *mut TreeChunk) -> *mut TreeChunk { + let left = (*me).child[0]; + if left.is_null() { + (*me).child[1] + } else { + left + } + } + + unsafe fn chunk(me: *mut TreeChunk) -> *mut Chunk { + &mut (*me).chunk + } + + unsafe fn next(me: *mut TreeChunk) -> *mut TreeChunk { + (*TreeChunk::chunk(me)).next as *mut TreeChunk + } + + unsafe fn prev(me: *mut TreeChunk) -> *mut TreeChunk { + (*TreeChunk::chunk(me)).prev as *mut TreeChunk + } +} + +const EXTERN: u32 = 1 << 0; + +impl Segment { + unsafe fn is_extern(seg: *mut Segment) -> bool { + (*seg).flags & EXTERN != 0 + } + + unsafe fn can_release_part(seg: *mut Segment) -> bool { + sys::can_release_part((*seg).flags >> 1) + } + + unsafe fn sys_flags(seg: *mut Segment) -> u32 { + (*seg).flags >> 1 + } + + unsafe fn holds(seg: *mut Segment, addr: *mut u8) -> bool { + (*seg).base <= addr && addr < Segment::top(seg) + } + + unsafe fn top(seg: *mut Segment) -> *mut u8 { + (*seg).base.offset((*seg).size as isize) + } +} diff --git a/src/dlmalloc/src/global.rs b/src/dlmalloc/src/global.rs new file mode 100644 index 0000000000..556286be9e --- /dev/null +++ b/src/dlmalloc/src/global.rs @@ -0,0 +1,159 @@ +use alloc::heap::{Alloc, Layout, Excess, CannotReallocInPlace, AllocErr}; +use core::ops::{Deref, DerefMut}; + +use Dlmalloc; + +pub struct GlobalDlmalloc; + +unsafe impl Alloc for GlobalDlmalloc { + #[inline] + unsafe fn alloc(&mut self, layout: Layout) -> Result<*mut u8, AllocErr> { + (&*self).alloc(layout) + } + + #[inline] + unsafe fn alloc_zeroed(&mut self, layout: Layout) + -> Result<*mut u8, AllocErr> + { + (&*self).alloc_zeroed(layout) + } + + #[inline] + unsafe fn dealloc(&mut self, ptr: *mut u8, layout: Layout) { + (&*self).dealloc(ptr, layout) + } + + #[inline] + unsafe fn realloc(&mut self, + ptr: *mut u8, + old_layout: Layout, + new_layout: Layout) -> Result<*mut u8, AllocErr> { + (&*self).realloc(ptr, old_layout, new_layout) + } + + // fn oom(&mut self, err: AllocErr) -> ! { + // (&*self).oom(err) + // } + + #[inline] + fn usable_size(&self, layout: &Layout) -> (usize, usize) { + (&self).usable_size(layout) + } + + #[inline] + unsafe fn alloc_excess(&mut self, layout: Layout) -> Result { + (&*self).alloc_excess(layout) + } + + #[inline] + unsafe fn realloc_excess(&mut self, + ptr: *mut u8, + layout: Layout, + new_layout: Layout) -> Result { + (&*self).realloc_excess(ptr, layout, new_layout) + } + + #[inline] + unsafe fn grow_in_place(&mut self, + ptr: *mut u8, + layout: Layout, + new_layout: Layout) -> Result<(), CannotReallocInPlace> { + (&*self).grow_in_place(ptr, layout, new_layout) + } + + #[inline] + unsafe fn shrink_in_place(&mut self, + ptr: *mut u8, + layout: Layout, + new_layout: Layout) -> Result<(), CannotReallocInPlace> { + (&*self).shrink_in_place(ptr, layout, new_layout) + } +} + +static mut DLMALLOC: Dlmalloc = Dlmalloc(::dlmalloc::DLMALLOC_INIT); + +struct Instance; + +unsafe fn get() -> Instance { + ::sys::acquire_global_lock(); + Instance +} + +impl Deref for Instance { + type Target = Dlmalloc; + fn deref(&self) -> &Dlmalloc { + unsafe { &DLMALLOC } + } +} + +impl DerefMut for Instance { + fn deref_mut(&mut self) -> &mut Dlmalloc { + unsafe { &mut DLMALLOC } + } +} + +impl Drop for Instance { + fn drop(&mut self) { + ::sys::release_global_lock() + } +} + +unsafe impl<'a> Alloc for &'a GlobalDlmalloc { + unsafe fn alloc(&mut self, layout: Layout) -> Result<*mut u8, AllocErr> { + get().alloc(layout) + } + + unsafe fn alloc_zeroed(&mut self, layout: Layout) + -> Result<*mut u8, AllocErr> + { + get().alloc_zeroed(layout) + } + + unsafe fn dealloc(&mut self, ptr: *mut u8, layout: Layout) { + get().dealloc(ptr, layout) + } + + unsafe fn realloc(&mut self, + ptr: *mut u8, + old_layout: Layout, + new_layout: Layout) -> Result<*mut u8, AllocErr> { + get().realloc(ptr, old_layout, new_layout) + } + + // fn oom(&mut self, err: AllocErr) -> ! { + // unsafe { get().oom(err) } + // } + + fn usable_size(&self, layout: &Layout) -> (usize, usize) { + unsafe { get().usable_size(layout) } + } + + #[inline] + unsafe fn alloc_excess(&mut self, layout: Layout) -> Result { + get().alloc_excess(layout) + } + + #[inline] + unsafe fn realloc_excess(&mut self, + ptr: *mut u8, + layout: Layout, + new_layout: Layout) -> Result { + get().realloc_excess(ptr, layout, new_layout) + } + + #[inline] + unsafe fn grow_in_place(&mut self, + ptr: *mut u8, + layout: Layout, + new_layout: Layout) -> Result<(), CannotReallocInPlace> { + get().grow_in_place(ptr, layout, new_layout) + } + + #[inline] + unsafe fn shrink_in_place(&mut self, + ptr: *mut u8, + layout: Layout, + new_layout: Layout) -> Result<(), CannotReallocInPlace> { + get().shrink_in_place(ptr, layout, new_layout) + } +} diff --git a/src/dlmalloc/src/lib.rs b/src/dlmalloc/src/lib.rs new file mode 100644 index 0000000000..c130d9e1cc --- /dev/null +++ b/src/dlmalloc/src/lib.rs @@ -0,0 +1,166 @@ +#![feature(allocator_api, alloc)] +#![cfg_attr(target_arch = "wasm32", feature(link_llvm_intrinsics))] +#![no_std] + +extern crate alloc; + +use alloc::heap::{Alloc, Layout, AllocErr}; +use core::cmp; +use core::ptr; + +pub use self::global::GlobalDlmalloc; + +mod global; +mod dlmalloc; + +pub struct Dlmalloc(dlmalloc::Dlmalloc); + +#[cfg(target_arch = "wasm32")] +#[path = "wasm.rs"] +mod sys; + +#[cfg(target_os = "macos")] +#[path = "macos.rs"] +mod sys; + +#[cfg(target_os = "linux")] +#[path = "linux.rs"] +mod sys; + +impl Dlmalloc { + pub fn new() -> Dlmalloc { + Dlmalloc(dlmalloc::Dlmalloc::new()) + } +} + +unsafe impl Alloc for Dlmalloc { + #[inline] + unsafe fn alloc(&mut self, layout: Layout) -> Result<*mut u8, AllocErr> { + let ptr = if layout.align() <= self.0.malloc_alignment() { + self.0.malloc(layout.size()) + } else { + self.0.memalign(layout.align(), layout.size()) + }; + if ptr.is_null() { + Err(AllocErr::Exhausted { request: layout }) + } else { + Ok(ptr) + } + } + + #[inline] + unsafe fn alloc_zeroed(&mut self, layout: Layout) + -> Result<*mut u8, AllocErr> + { + let size = layout.size(); + let ptr = self.alloc(layout)?; + if self.0.calloc_must_clear(ptr) { + ptr::write_bytes(ptr, 0, size); + } + Ok(ptr) + } + + #[inline] + unsafe fn dealloc(&mut self, ptr: *mut u8, layout: Layout) { + drop(layout); + self.0.free(ptr) + } + + #[inline] + unsafe fn realloc(&mut self, + ptr: *mut u8, + old_layout: Layout, + new_layout: Layout) -> Result<*mut u8, AllocErr> { + if old_layout.align() != new_layout.align() { + return Err(AllocErr::Unsupported { + details: "cannot change alignment on `realloc`", + }) + } + + if new_layout.align() <= self.0.malloc_alignment() { + let ptr = self.0.realloc(ptr, new_layout.size()); + if !ptr.is_null() { + Ok(ptr as *mut u8) + } else { + Err(AllocErr::Exhausted { request: new_layout }) + } + } else { + let res = self.alloc(new_layout.clone()); + if let Ok(new_ptr) = res { + let size = cmp::min(old_layout.size(), new_layout.size()); + ptr::copy_nonoverlapping(ptr, new_ptr, size); + self.dealloc(ptr, old_layout); + } + res + } + } + + // fn oom(&mut self, err: AllocErr) -> ! { + // System.oom(err) + // } + + // #[inline] + // fn usable_size(&self, layout: &Layout) -> (usize, usize) { + // (&self).usable_size(layout) + // } + // + // #[inline] + // unsafe fn alloc_excess(&mut self, layout: Layout) -> Result { + // (&*self).alloc_excess(layout) + // } + // + // #[inline] + // unsafe fn realloc_excess(&mut self, + // ptr: *mut u8, + // layout: Layout, + // new_layout: Layout) -> Result { + // (&*self).realloc_excess(ptr, layout, new_layout) + // } + // + // #[inline] + // unsafe fn grow_in_place(&mut self, + // ptr: *mut u8, + // layout: Layout, + // new_layout: Layout) -> Result<(), CannotReallocInPlace> { + // (&*self).grow_in_place(ptr, layout, new_layout) + // } + // + // #[inline] + // unsafe fn shrink_in_place(&mut self, + // ptr: *mut u8, + // layout: Layout, + // new_layout: Layout) -> Result<(), CannotReallocInPlace> { + // (&*self).shrink_in_place(ptr, layout, new_layout) + // } +} + +// unsafe impl<'a> Alloc for &'a Dlmalloc { +// #[inline] +// unsafe fn alloc(&mut self, layout: Layout) -> Result<*mut u8, AllocErr> { +// panic!() +// } +// +// // #[inline] +// // unsafe fn alloc_zeroed(&mut self, layout: Layout) +// // -> Result<*mut u8, AllocErr> +// // { +// // panic!() +// // } +// +// #[inline] +// unsafe fn dealloc(&mut self, ptr: *mut u8, layout: Layout) { +// panic!() +// } +// +// // #[inline] +// // unsafe fn realloc(&mut self, +// // ptr: *mut u8, +// // old_layout: Layout, +// // new_layout: Layout) -> Result<*mut u8, AllocErr> { +// // panic!() +// // } +// +// fn oom(&mut self, err: AllocErr) -> ! { +// System.oom(err) +// } +// } diff --git a/src/dlmalloc/src/linux.rs b/src/dlmalloc/src/linux.rs new file mode 100644 index 0000000000..f630017722 --- /dev/null +++ b/src/dlmalloc/src/linux.rs @@ -0,0 +1,67 @@ +extern crate libc; + +use core::ptr; + +pub unsafe fn alloc(size: usize) -> (*mut u8, usize, u32) { + let addr = libc::mmap(0 as *mut _, + size, + libc::PROT_WRITE | libc::PROT_READ, + libc::MAP_ANONYMOUS | libc::MAP_PRIVATE, + -1, + 0); + if addr == libc::MAP_FAILED { + (ptr::null_mut(), 0, 0) + } else { + (addr as *mut u8, size, 0) + } +} + +pub unsafe fn remap(ptr: *mut u8, oldsize: usize, newsize: usize, can_move: bool) + -> *mut u8 +{ + let flags = if can_move { libc::MREMAP_MAYMOVE } else { 0 }; + let ptr = libc::mremap(ptr as *mut _, oldsize, newsize, flags); + if ptr == libc::MAP_FAILED { + ptr::null_mut() + } else { + ptr as *mut u8 + } +} + +pub unsafe fn free_part(ptr: *mut u8, oldsize: usize, newsize: usize) -> bool { + let rc = libc::mremap(ptr as *mut _, oldsize, newsize, 0); + if rc != libc::MAP_FAILED { + return true + } + libc::munmap(ptr.offset(newsize as isize) as *mut _, oldsize - newsize) == 0 +} + +pub unsafe fn free(ptr: *mut u8, size: usize) -> bool { + libc::munmap(ptr as *mut _, size) == 0 +} + +pub fn can_release_part(_flags: u32) -> bool { + true +} + +static mut LOCK: libc::pthread_mutex_t = libc::PTHREAD_MUTEX_INITIALIZER; + +pub fn acquire_global_lock() { + unsafe { + assert_eq!(libc::pthread_mutex_lock(&mut LOCK), 0) + } +} + +pub fn release_global_lock() { + unsafe { + assert_eq!(libc::pthread_mutex_unlock(&mut LOCK), 0) + } +} + +pub fn allocates_zeros() -> bool { + true +} + +pub fn page_size() -> usize { + 4096 +} diff --git a/src/dlmalloc/src/macos.rs b/src/dlmalloc/src/macos.rs new file mode 100644 index 0000000000..a2d0232a20 --- /dev/null +++ b/src/dlmalloc/src/macos.rs @@ -0,0 +1,57 @@ +extern crate libc; + +use core::ptr; + +pub unsafe fn alloc(size: usize) -> (*mut u8, usize, u32) { + let addr = libc::mmap(0 as *mut _, + size, + libc::PROT_WRITE | libc::PROT_READ, + libc::MAP_ANON | libc::MAP_PRIVATE, + -1, + 0); + if addr == libc::MAP_FAILED { + (ptr::null_mut(), 0, 0) + } else { + (addr as *mut u8, size, 0) + } +} + +pub unsafe fn remap(_ptr: *mut u8, _oldsize: usize, _newsize: usize, _can_move: bool) + -> *mut u8 +{ + ptr::null_mut() +} + +pub unsafe fn free_part(ptr: *mut u8, oldsize: usize, newsize: usize) -> bool { + libc::munmap(ptr.offset(newsize as isize) as *mut _, oldsize - newsize) == 0 +} + +pub unsafe fn free(ptr: *mut u8, size: usize) -> bool { + libc::munmap(ptr as *mut _, size) == 0 +} + +pub fn can_release_part(_flags: u32) -> bool { + true +} + +static mut LOCK: libc::pthread_mutex_t = libc::PTHREAD_MUTEX_INITIALIZER; + +pub fn acquire_global_lock() { + unsafe { + assert_eq!(libc::pthread_mutex_lock(&mut LOCK), 0) + } +} + +pub fn release_global_lock() { + unsafe { + assert_eq!(libc::pthread_mutex_unlock(&mut LOCK), 0) + } +} + +pub fn allocates_zeros() -> bool { + true +} + +pub fn page_size() -> usize { + 4096 +} diff --git a/src/dlmalloc/src/wasm.rs b/src/dlmalloc/src/wasm.rs new file mode 100644 index 0000000000..4655025365 --- /dev/null +++ b/src/dlmalloc/src/wasm.rs @@ -0,0 +1,54 @@ +use core::ptr; + +extern { + #[link_name = "llvm.wasm.current.memory.i32"] + fn current_memory() -> u32; + + // TODO: this intrinsic actually returns the previous limit, but LLVM + // doesn't expose that right now. When we upgrade LLVM stop using + // `current_memory` above. + #[link_name = "llvm.wasm.grow.memory.i32"] + fn grow_memory(pages: u32); +} + +pub unsafe fn alloc(size: usize) -> (*mut u8, usize, u32) { + let pages = size / page_size(); + let cur = current_memory() as usize; + grow_memory(pages as u32); + ((cur * page_size()) as *mut u8, pages * page_size(), 0) +} + +pub unsafe fn remap(_ptr: *mut u8, _oldsize: usize, _newsize: usize, _can_move: bool) + -> *mut u8 +{ + // TODO: I think this can be implemented near the end? + ptr::null_mut() +} + +pub unsafe fn free_part(_ptr: *mut u8, _oldsize: usize, _newsize: usize) -> bool { + false +} + +pub unsafe fn free(_ptr: *mut u8, _size: usize) -> bool { + false +} + +pub fn can_release_part(_flags: u32) -> bool { + false +} + +pub fn acquire_global_lock() { + // single threaded, no need! +} + +pub fn release_global_lock() { + // single threaded, no need! +} + +pub fn allocates_zeros() -> bool { + true +} + +pub fn page_size() -> usize { + 64 * 1024 +} diff --git a/src/dlmalloc/tests/global.rs b/src/dlmalloc/tests/global.rs new file mode 100644 index 0000000000..e16bf29212 --- /dev/null +++ b/src/dlmalloc/tests/global.rs @@ -0,0 +1,32 @@ +#![feature(global_allocator)] + +extern crate dlmalloc; + +use std::collections::HashMap; +use std::thread; + +#[global_allocator] +static A: dlmalloc::GlobalDlmalloc = dlmalloc::GlobalDlmalloc; + +#[test] +fn foo() { + println!("hello"); +} + +#[test] +fn map() { + let mut m = HashMap::new(); + m.insert(1, 2); + m.insert(5, 3); + drop(m); +} + +#[test] +fn strings() { + format!("foo, bar, {}", "baz"); +} + +#[test] +fn threads() { + assert!(thread::spawn(|| panic!()).join().is_err()); +} diff --git a/src/dlmalloc/tests/smoke.rs b/src/dlmalloc/tests/smoke.rs new file mode 100644 index 0000000000..e5d0fbd8e6 --- /dev/null +++ b/src/dlmalloc/tests/smoke.rs @@ -0,0 +1,99 @@ +#![feature(allocator_api)] + +extern crate dlmalloc; +extern crate rand; + +use std::cmp; +use std::heap::{Layout, Alloc, System}; + +use dlmalloc::Dlmalloc; +use rand::Rng; + +#[test] +fn smoke() { + let mut a = Dlmalloc::new(); + unsafe { + let layout = Layout::new::(); + let ptr = a.alloc(layout.clone()).unwrap_or_else(|e| System.oom(e)); + *ptr = 9; + assert_eq!(*ptr, 9); + a.dealloc(ptr, layout.clone()); + + let ptr = a.alloc(layout.clone()).unwrap_or_else(|e| System.oom(e)); + *ptr = 10; + assert_eq!(*ptr, 10); + a.dealloc(ptr, layout.clone()); + } +} + +#[test] +fn stress() { + let mut a = Dlmalloc::new(); + let mut rng = rand::thread_rng(); + let mut ptrs = Vec::new(); + unsafe { + for _ in 0..1_000_000 { + let free = + ptrs.len() > 0 && + ((ptrs.len() < 10_000 && rng.gen_weighted_bool(3)) || rng.gen()); + if free { + let idx = rng.gen_range(0, ptrs.len()); + let (ptr, layout): (_, Layout) = ptrs.swap_remove(idx); + a.dealloc(ptr, layout); + continue + } + + if ptrs.len() > 0 && rng.gen_weighted_bool(100) { + let idx = rng.gen_range(0, ptrs.len()); + let (ptr, old): (_, Layout) = ptrs.swap_remove(idx); + let new = if rng.gen() { + Layout::from_size_align(rng.gen_range(old.size(), old.size() * 2), + old.align()).unwrap() + } else if old.size() > 10 { + Layout::from_size_align(rng.gen_range(old.size() / 2, old.size()), + old.align()).unwrap() + } else { + continue + }; + let mut tmp = Vec::new(); + for i in 0..cmp::min(old.size(), new.size()) { + tmp.push(*ptr.offset(i as isize)); + } + let ptr = a.realloc(ptr, old, new.clone()).unwrap_or_else(|e| { + System.oom(e) + }); + for (i, byte) in tmp.iter().enumerate() { + assert_eq!(*byte, *ptr.offset(i as isize)); + } + ptrs.push((ptr, new)); + } + + let size = if rng.gen() { + rng.gen_range(1, 128) + } else { + rng.gen_range(1, 128 * 1024) + }; + let align = if rng.gen_weighted_bool(10) { + 1 << rng.gen_range(3, 8) + } else { + 8 + }; + + let zero = rng.gen_weighted_bool(50); + let layout = Layout::from_size_align(size, align).unwrap(); + + let ptr = if zero { + a.alloc_zeroed(layout.clone()).unwrap_or_else(|e| System.oom(e)) + } else { + a.alloc(layout.clone()).unwrap_or_else(|e| System.oom(e)) + }; + for i in 0..layout.size() { + if zero { + assert_eq!(*ptr.offset(i as isize), 0); + } + *ptr.offset(i as isize) = 0xce; + } + ptrs.push((ptr, layout)); + } + } +} diff --git a/src/doc/book/.travis.yml b/src/doc/book/.travis.yml index 96f8f1813a..9d0041adf2 100644 --- a/src/doc/book/.travis.yml +++ b/src/doc/book/.travis.yml @@ -13,6 +13,6 @@ addons: - aspell - aspell-en before_script: - - (cargo install mdbook --git https://github.com/azerupi/mdBook.git --force || true) + - (cargo install mdbook --vers 0.0.26 --force || true) script: - bash ci/build.sh diff --git a/src/doc/book/ci/build.sh b/src/doc/book/ci/build.sh index 086ed57728..31e00c1c17 100644 --- a/src/doc/book/ci/build.sh +++ b/src/doc/book/ci/build.sh @@ -22,14 +22,20 @@ cd ../.. # tests for the first edition cd first-edition +echo 'Testing first edition...' mdbook test +echo 'Building first edition...' mdbook build cd .. # tests for the second edition cd second-edition +echo 'Spellchecking second edition...' bash spellcheck.sh list +echo 'Testing second edition...' mdbook test +echo 'Building second edition...' mdbook build +echo 'Linting second edition for local file paths...' cargo run --bin lfp src diff --git a/src/doc/book/redirects/associated-types.md b/src/doc/book/redirects/associated-types.md index a6748c0913..81aae63cd8 100644 --- a/src/doc/book/redirects/associated-types.md +++ b/src/doc/book/redirects/associated-types.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related page in the second edition of The Rust Programming Language][2] [1]: first-edition/associated-types.html -[2]: second-edition/index.html +[2]: second-edition/ch19-03-advanced-traits.html#associated-types diff --git a/src/doc/book/redirects/choosing-your-guarantees.md b/src/doc/book/redirects/choosing-your-guarantees.md index 03f017bcaf..778891fdb6 100644 --- a/src/doc/book/redirects/choosing-your-guarantees.md +++ b/src/doc/book/redirects/choosing-your-guarantees.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related chapter in the second edition of The Rust Programming Language][2] [1]: first-edition/choosing-your-guarantees.html -[2]: second-edition/index.html +[2]: second-edition/ch15-00-smart-pointers.html diff --git a/src/doc/book/redirects/closures.md b/src/doc/book/redirects/closures.md index 0fc3cad9b4..1f8f6aeee6 100644 --- a/src/doc/book/redirects/closures.md +++ b/src/doc/book/redirects/closures.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related page in the second edition of The Rust Programming Language][2] [1]: first-edition/closures.html -[2]: second-edition/index.html +[2]: second-edition/ch13-01-closures.html diff --git a/src/doc/book/redirects/comments.md b/src/doc/book/redirects/comments.md index 9a778bb4f8..bb921f4fe3 100644 --- a/src/doc/book/redirects/comments.md +++ b/src/doc/book/redirects/comments.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related page in the second edition of The Rust Programming Language][2] [1]: first-edition/comments.html -[2]: second-edition/index.html +[2]: second-edition/ch03-04-comments.html diff --git a/src/doc/book/redirects/concurrency.md b/src/doc/book/redirects/concurrency.md index f93c1f1f4c..b9067cd90c 100644 --- a/src/doc/book/redirects/concurrency.md +++ b/src/doc/book/redirects/concurrency.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related chapter in the second edition of The Rust Programming Language][2] [1]: first-edition/concurrency.html -[2]: second-edition/index.html +[2]: second-edition/ch16-00-concurrency.html diff --git a/src/doc/book/redirects/const-and-static.md b/src/doc/book/redirects/const-and-static.md index 6afb64226c..c8561df0da 100644 --- a/src/doc/book/redirects/const-and-static.md +++ b/src/doc/book/redirects/const-and-static.md @@ -5,8 +5,10 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related section about `const` in the second edition of The Rust Programming Language][2] +* [Related section about `static` in the second edition of The Rust Programming Language][3] [1]: first-edition/const-and-static.html -[2]: second-edition/index.html +[2]: second-edition/ch03-01-variables-and-mutability.html#differences-between-variables-and-constants +[3]: second-edition/ch19-01-unsafe-rust.html#accessing-or-modifying-a-mutable-static-variable diff --git a/src/doc/book/redirects/crates-and-modules.md b/src/doc/book/redirects/crates-and-modules.md index 9f0fc96b07..535d6ce48f 100644 --- a/src/doc/book/redirects/crates-and-modules.md +++ b/src/doc/book/redirects/crates-and-modules.md @@ -5,8 +5,11 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related chapter about modules in the second edition of The Rust Programming Language][2] + +* [Related chapter about crates in the second edition of The Rust Programming Language][3] [1]: first-edition/crates-and-modules.html -[2]: second-edition/index.html +[2]: second-edition/ch07-00-modules.html +[3]: second-edition/ch14-00-more-about-cargo.html diff --git a/src/doc/book/redirects/deref-coercions.md b/src/doc/book/redirects/deref-coercions.md index ba4d65a490..df927fcf80 100644 --- a/src/doc/book/redirects/deref-coercions.md +++ b/src/doc/book/redirects/deref-coercions.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related section in the second edition of The Rust Programming Language][2] [1]: first-edition/deref-coercions.html -[2]: second-edition/index.html +[2]: second-edition/ch15-02-deref.html#implicit-deref-coercions-with-functions-and-methods diff --git a/src/doc/book/redirects/documentation.md b/src/doc/book/redirects/documentation.md index 0f060919f9..198da596f4 100644 --- a/src/doc/book/redirects/documentation.md +++ b/src/doc/book/redirects/documentation.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related section in the second edition of The Rust Programming Language][2] [1]: first-edition/documentation.html -[2]: second-edition/index.html +[2]: second-edition/ch14-02-publishing-to-crates-io.html#making-useful-documentation-comments diff --git a/src/doc/book/redirects/drop.md b/src/doc/book/redirects/drop.md index 0561720fd4..9bb7ea991b 100644 --- a/src/doc/book/redirects/drop.md +++ b/src/doc/book/redirects/drop.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related page in the second edition of The Rust Programming Language][2] [1]: first-edition/drop.html -[2]: second-edition/index.html +[2]: second-edition/ch15-03-drop.html diff --git a/src/doc/book/redirects/enums.md b/src/doc/book/redirects/enums.md index c4a629dfad..5952358ee0 100644 --- a/src/doc/book/redirects/enums.md +++ b/src/doc/book/redirects/enums.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related page in the second edition of The Rust Programming Language][2] [1]: first-edition/enums.html -[2]: second-edition/index.html +[2]: second-edition/ch06-01-defining-an-enum.html diff --git a/src/doc/book/redirects/error-handling.md b/src/doc/book/redirects/error-handling.md index f4afa59ee7..5243e11ecd 100644 --- a/src/doc/book/redirects/error-handling.md +++ b/src/doc/book/redirects/error-handling.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related chapter in the second edition of The Rust Programming Language][2] [1]: first-edition/error-handling.html -[2]: second-edition/index.html +[2]: second-edition/ch09-00-error-handling.html diff --git a/src/doc/book/redirects/ffi.md b/src/doc/book/redirects/ffi.md index efc0ac7ae4..0c8116ee29 100644 --- a/src/doc/book/redirects/ffi.md +++ b/src/doc/book/redirects/ffi.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related section in the second edition of The Rust Programming Language][2] [1]: first-edition/ffi.html -[2]: second-edition/index.html +[2]: second-edition/ch19-01-unsafe-rust.html#calling-an-unsafe-function-or-method diff --git a/src/doc/book/redirects/functions.md b/src/doc/book/redirects/functions.md index 1def1a5d3d..198a6dce14 100644 --- a/src/doc/book/redirects/functions.md +++ b/src/doc/book/redirects/functions.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related page in the second edition of The Rust Programming Language][2] [1]: first-edition/functions.html -[2]: second-edition/index.html +[2]: second-edition/ch03-03-how-functions-work.html diff --git a/src/doc/book/redirects/generics.md b/src/doc/book/redirects/generics.md index 21569ee6c0..333a979caf 100644 --- a/src/doc/book/redirects/generics.md +++ b/src/doc/book/redirects/generics.md @@ -5,8 +5,9 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related page in the second edition of The Rust Programming Language][2] [1]: first-edition/generics.html -[2]: second-edition/index.html +[2]: second-edition/ch10-00-generics.html + diff --git a/src/doc/book/redirects/getting-started.md b/src/doc/book/redirects/getting-started.md index ed1f094030..0b8296a0ab 100644 --- a/src/doc/book/redirects/getting-started.md +++ b/src/doc/book/redirects/getting-started.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related chapter in the second edition of The Rust Programming Language][2] [1]: first-edition/getting-started.html -[2]: second-edition/index.html +[2]: second-edition/ch01-00-introduction.html diff --git a/src/doc/book/redirects/guessing-game.md b/src/doc/book/redirects/guessing-game.md index 4805a8f2e1..dd31e0829e 100644 --- a/src/doc/book/redirects/guessing-game.md +++ b/src/doc/book/redirects/guessing-game.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related chapter in second edition of The Rust Programming Language][2] [1]: first-edition/guessing-game.html -[2]: second-edition/index.html +[2]: second-edition/ch02-00-guessing-game-tutorial.html diff --git a/src/doc/book/redirects/if-let.md b/src/doc/book/redirects/if-let.md index 34dce572e6..78de04ca7b 100644 --- a/src/doc/book/redirects/if-let.md +++ b/src/doc/book/redirects/if-let.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related page in the second edition of The Rust Programming Language][2] [1]: first-edition/if-let.html -[2]: second-edition/index.html +[2]: second-edition/ch06-03-if-let.html diff --git a/src/doc/book/redirects/if.md b/src/doc/book/redirects/if.md index 708f5f5e27..dafc42f7c2 100644 --- a/src/doc/book/redirects/if.md +++ b/src/doc/book/redirects/if.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related section in second edition of The Rust Programming Language][2] [1]: first-edition/if.html -[2]: second-edition/index.html +[2]: second-edition/ch03-05-control-flow.html#if-expressions diff --git a/src/doc/book/redirects/iterators.md b/src/doc/book/redirects/iterators.md index 1dfa578f0b..8df24a17e2 100644 --- a/src/doc/book/redirects/iterators.md +++ b/src/doc/book/redirects/iterators.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related page in the second edition of The Rust Programming Language][2] [1]: first-edition/iterators.html -[2]: second-edition/index.html +[2]: second-edition/ch13-02-iterators.html diff --git a/src/doc/book/redirects/lifetimes.md b/src/doc/book/redirects/lifetimes.md index 79caf75a08..482ef64433 100644 --- a/src/doc/book/redirects/lifetimes.md +++ b/src/doc/book/redirects/lifetimes.md @@ -5,8 +5,11 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related page in the second edition of The Rust Programming Language][2] + +* [Related page in the second edition of The Rust Programming Language (covering more advanced topics)][3] [1]: first-edition/lifetimes.html -[2]: second-edition/index.html +[2]: second-edition/ch10-03-lifetime-syntax.html +[3]: second-edition/ch19-02-advanced-lifetimes.html diff --git a/src/doc/book/redirects/loops.md b/src/doc/book/redirects/loops.md index e4f360451a..4c7c6d9d5d 100644 --- a/src/doc/book/redirects/loops.md +++ b/src/doc/book/redirects/loops.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related section in the second edition of The Rust Programming Language][2] [1]: first-edition/loops.html -[2]: second-edition/index.html +[2]: second-edition/ch03-05-control-flow.html#repetition-with-loops diff --git a/src/doc/book/redirects/match.md b/src/doc/book/redirects/match.md index f6e4109342..244617b5d6 100644 --- a/src/doc/book/redirects/match.md +++ b/src/doc/book/redirects/match.md @@ -5,8 +5,12 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related page in the second edition of The Rust Programming Language][2] + +* [Related chapter in the second edition of The Rust Programming Language (covering more advanced topics)][3] [1]: first-edition/match.html -[2]: second-edition/index.html +[2]: second-edition/ch06-02-match.html +[3]: second-edition/ch18-00-patterns.html + diff --git a/src/doc/book/redirects/method-syntax.md b/src/doc/book/redirects/method-syntax.md index 6eed244c6e..c320c97201 100644 --- a/src/doc/book/redirects/method-syntax.md +++ b/src/doc/book/redirects/method-syntax.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related page in the second edition of The Rust Programming Language][2] [1]: first-edition/method-syntax.html -[2]: second-edition/index.html +[2]: second-edition/ch05-03-method-syntax.html diff --git a/src/doc/book/redirects/mutability.md b/src/doc/book/redirects/mutability.md index ebd2419bae..754a6b2310 100644 --- a/src/doc/book/redirects/mutability.md +++ b/src/doc/book/redirects/mutability.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related page in second edition of The Rust Programming Language][2] [1]: first-edition/mutability.html -[2]: second-edition/index.html +[2]: second-edition/ch03-01-variables-and-mutability.html diff --git a/src/doc/book/redirects/operators-and-overloading.md b/src/doc/book/redirects/operators-and-overloading.md index b1f35e4af5..06a68dadfb 100644 --- a/src/doc/book/redirects/operators-and-overloading.md +++ b/src/doc/book/redirects/operators-and-overloading.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related section in the second edition of The Rust Programming Language][2] [1]: first-edition/operators-and-overloading.html -[2]: second-edition/index.html +[2]: second-edition/ch19-03-advanced-traits.html#operator-overloading-and-default-type-parameters diff --git a/src/doc/book/redirects/ownership.md b/src/doc/book/redirects/ownership.md index 23f89293ba..1b7e0eb992 100644 --- a/src/doc/book/redirects/ownership.md +++ b/src/doc/book/redirects/ownership.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related chapter in the second edition of The Rust Programming Language][2] [1]: first-edition/ownership.html -[2]: second-edition/index.html +[2]: second-edition/ch04-00-understanding-ownership.html diff --git a/src/doc/book/redirects/patterns.md b/src/doc/book/redirects/patterns.md index 9ae0d26244..6bdbbfacfe 100644 --- a/src/doc/book/redirects/patterns.md +++ b/src/doc/book/redirects/patterns.md @@ -5,8 +5,11 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related section in the second edition of The Rust Programming Language][2] + +* [Related page in the second edition of The Rust Programming Language (covering more advanced topics)][3] [1]: first-edition/patterns.html -[2]: second-edition/index.html +[2]: second-edition/ch06-02-match.html#patterns-that-bind-to-values +[3]: second-edition/ch18-03-pattern-syntax.html diff --git a/src/doc/book/redirects/primitive-types.md b/src/doc/book/redirects/primitive-types.md index c348b2dbf1..76f5f6c279 100644 --- a/src/doc/book/redirects/primitive-types.md +++ b/src/doc/book/redirects/primitive-types.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related page in the second edition of The Rust Programming Language][2] [1]: first-edition/primitive-types.html -[2]: second-edition/index.html +[2]: second-edition/ch03-02-data-types.html diff --git a/src/doc/book/redirects/procedural-macros.md b/src/doc/book/redirects/procedural-macros.md index 22492fb6f8..823efca6e8 100644 --- a/src/doc/book/redirects/procedural-macros.md +++ b/src/doc/book/redirects/procedural-macros.md @@ -8,5 +8,6 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [Index of the second edition of The Rust Programming Language][2] + [1]: first-edition/procedural-macros.html [2]: second-edition/index.html diff --git a/src/doc/book/redirects/raw-pointers.md b/src/doc/book/redirects/raw-pointers.md index 08c8635d1b..c9259fd2ba 100644 --- a/src/doc/book/redirects/raw-pointers.md +++ b/src/doc/book/redirects/raw-pointers.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related section in the second edition of The Rust Programming Language][2] [1]: first-edition/raw-pointers.html -[2]: second-edition/index.html +[2]: second-edition/ch19-01-unsafe-rust.html#dereferencing-a-raw-pointer diff --git a/src/doc/book/redirects/references-and-borrowing.md b/src/doc/book/redirects/references-and-borrowing.md index 1cf5bc7d88..2dc1f113c0 100644 --- a/src/doc/book/redirects/references-and-borrowing.md +++ b/src/doc/book/redirects/references-and-borrowing.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related page in second edition of The Rust Programming Language][2] [1]: first-edition/references-and-borrowing.html -[2]: second-edition/index.html +[2]: second-edition/ch04-02-references-and-borrowing.html diff --git a/src/doc/book/redirects/strings.md b/src/doc/book/redirects/strings.md index 523bc8fb75..8aaaab51eb 100644 --- a/src/doc/book/redirects/strings.md +++ b/src/doc/book/redirects/strings.md @@ -5,8 +5,12 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related section in second edition of The Rust Programming Language][2] + +* [Related page in second edition of The Rust Programming Language (covering more advanced topics)][3] [1]: first-edition/strings.html -[2]: second-edition/index.html +[2]: second-edition/ch04-03-slices.html#string-slices +[3]: second-edition/ch08-02-strings.html + diff --git a/src/doc/book/redirects/structs.md b/src/doc/book/redirects/structs.md index fa02feca32..4325281ce1 100644 --- a/src/doc/book/redirects/structs.md +++ b/src/doc/book/redirects/structs.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related chapter in second edition of The Rust Programming Language][2] [1]: first-edition/structs.html -[2]: second-edition/index.html +[2]: second-edition/ch05-00-structs.html diff --git a/src/doc/book/redirects/syntax-and-semantics.md b/src/doc/book/redirects/syntax-and-semantics.md index 022e748b07..666d1c1488 100644 --- a/src/doc/book/redirects/syntax-and-semantics.md +++ b/src/doc/book/redirects/syntax-and-semantics.md @@ -5,8 +5,13 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related chapter in the second edition of The Rust Programming Language (covering Rust syntax in general)][2] +* [Related page in the second edition of The Rust Programming Language (covering Rust keywords)][3] +* [Related page in the second edition of The Rust Programming Language (covering Rust operators)][4] [1]: first-edition/syntax-and-semantics.html -[2]: second-edition/index.html +[2]: second-edition/ch03-00-common-programming-concepts.html +[3]: second-edition/appendix-01-keywords.html +[4]: second-edition/appendix-02-operators.html + diff --git a/src/doc/book/redirects/testing.md b/src/doc/book/redirects/testing.md index f2c6fac266..0d6a0be75c 100644 --- a/src/doc/book/redirects/testing.md +++ b/src/doc/book/redirects/testing.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related chapter in the second edition of The Rust Programming Language][2] [1]: first-edition/testing.html -[2]: second-edition/index.html +[2]: second-edition/ch11-00-testing.html diff --git a/src/doc/book/redirects/the-stack-and-the-heap.md b/src/doc/book/redirects/the-stack-and-the-heap.md index bc6fb9a62f..4986aa8a5a 100644 --- a/src/doc/book/redirects/the-stack-and-the-heap.md +++ b/src/doc/book/redirects/the-stack-and-the-heap.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related section in the second edition of The Rust Programming Language][2] [1]: first-edition/the-stack-and-the-heap.html -[2]: second-edition/index.html +[2]: second-edition/ch04-01-what-is-ownership.html#the-stack-and-the-heap diff --git a/src/doc/book/redirects/trait-objects.md b/src/doc/book/redirects/trait-objects.md index ef3a6cc833..64e05d6b48 100644 --- a/src/doc/book/redirects/trait-objects.md +++ b/src/doc/book/redirects/trait-objects.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related page in the second edition of The Rust Programming Language][2] [1]: first-edition/trait-objects.html -[2]: second-edition/index.html +[2]: second-edition/ch17-02-trait-objects.html diff --git a/src/doc/book/redirects/traits.md b/src/doc/book/redirects/traits.md index d037bf72b5..469f5c574a 100644 --- a/src/doc/book/redirects/traits.md +++ b/src/doc/book/redirects/traits.md @@ -5,8 +5,11 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related page in the second edition of The Rust Programming Language][2] + +* [Related page in the second edition of The Rust Programming Language (covering more advanced topics)][3] [1]: first-edition/traits.html -[2]: second-edition/index.html +[2]: second-edition/ch10-02-traits.html +[3]: second-edition/ch19-03-advanced-traits.html diff --git a/src/doc/book/redirects/type-aliases.md b/src/doc/book/redirects/type-aliases.md index 73af152ae0..79eb5527bd 100644 --- a/src/doc/book/redirects/type-aliases.md +++ b/src/doc/book/redirects/type-aliases.md @@ -5,8 +5,9 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related section in the second edition of The Rust Programming Language][2] [1]: first-edition/type-aliases.html -[2]: second-edition/index.html +[2]: second-edition/ch19-04-advanced-types.html#type-aliases-create-type-synonyms + diff --git a/src/doc/book/redirects/ufcs.md b/src/doc/book/redirects/ufcs.md index cb2be239c0..87438a1a38 100644 --- a/src/doc/book/redirects/ufcs.md +++ b/src/doc/book/redirects/ufcs.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related section in the second edition of The Rust Programming Language][2] [1]: first-edition/ufcs.html -[2]: second-edition/index.html +[2]: second-edition/ch19-03-advanced-traits.html#fully-qualified-syntax-for-disambiguation diff --git a/src/doc/book/redirects/unsafe.md b/src/doc/book/redirects/unsafe.md index 27bc984ab3..e8e5a03479 100644 --- a/src/doc/book/redirects/unsafe.md +++ b/src/doc/book/redirects/unsafe.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related page in the second edition of The Rust Programming Language][2] [1]: first-edition/unsafe.html -[2]: second-edition/index.html +[2]: second-edition/ch19-01-unsafe-rust.html diff --git a/src/doc/book/redirects/unsized-types.md b/src/doc/book/redirects/unsized-types.md index 1469bb3af7..05ac4100ad 100644 --- a/src/doc/book/redirects/unsized-types.md +++ b/src/doc/book/redirects/unsized-types.md @@ -5,8 +5,8 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related section in the second edition of The Rust Programming Language][2] [1]: first-edition/unsized-types.html -[2]: second-edition/index.html +[2]: second-edition/ch19-04-advanced-types.html#dynamically-sized-types--sized diff --git a/src/doc/book/redirects/vectors.md b/src/doc/book/redirects/vectors.md index e5f76a83b5..bf2ad1c01a 100644 --- a/src/doc/book/redirects/vectors.md +++ b/src/doc/book/redirects/vectors.md @@ -5,8 +5,9 @@ If you're trying to learn Rust, checking out [the second edition][2] might be a * [This page in the first edition of the The Rust Programming Language][1] -* [Index of the second edition of The Rust Programming Language][2] +* [Related page in the second edition of The Rust Programming Language][2] [1]: first-edition/vectors.html -[2]: second-edition/index.html +[2]: second-edition/ch08-01-vectors.html + diff --git a/src/doc/book/second-edition/Cargo.lock b/src/doc/book/second-edition/Cargo.lock index 5cd51aa43f..928f6b1244 100644 --- a/src/doc/book/second-edition/Cargo.lock +++ b/src/doc/book/second-edition/Cargo.lock @@ -1,17 +1,6 @@ -[root] -name = "rust-book" -version = "0.0.1" -dependencies = [ - "docopt 0.6.82 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.1.73 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "aho-corasick" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", @@ -19,13 +8,13 @@ dependencies = [ [[package]] name = "docopt" -version = "0.6.82" +version = "0.6.86" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.1.73 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "strsim 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", + "strsim 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -39,12 +28,12 @@ dependencies = [ [[package]] name = "lazy_static" -version = "0.2.1" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "libc" -version = "0.2.15" +version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -52,34 +41,45 @@ name = "memchr" version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex" -version = "0.1.73" +version = "0.1.80" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex-syntax" -version = "0.3.4" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "rust-book" +version = "0.0.1" +dependencies = [ + "docopt 0.6.86 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", + "walkdir 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "rustc-serialize" -version = "0.3.19" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "strsim" -version = "0.3.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -88,12 +88,12 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "thread_local" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -106,7 +106,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "walkdir" -version = "0.1.5" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -124,19 +124,19 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] -"checksum aho-corasick 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2b3fb52b09c1710b961acb35390d514be82e4ac96a9969a8e38565a29b878dc9" -"checksum docopt 0.6.82 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20016093b4e545dccf6ad4a01099de0b695f9bc99b08210e68f6425db2d37d" +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum docopt 0.6.86 (registry+https://github.com/rust-lang/crates.io-index)" = "4a7ef30445607f6fc8720f0a0a2c7442284b629cf0d049286860fae23e71c4d9" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -"checksum lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "49247ec2a285bb3dcb23cbd9c35193c025e7251bfce77c1d5da97e6362dffe7f" -"checksum libc 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)" = "23e3757828fa702a20072c37ff47938e9dd331b92fac6e223d26d4b7a55f7ee2" +"checksum lazy_static 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "236eb37a62591d4a41a89b7763d7de3e06ca02d5ab2815446a8bae5d2f8c2d57" +"checksum libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "5ba3df4dcb460b9dfbd070d41c94c19209620c191b0340b929ce748a2bcd42d2" "checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" -"checksum regex 0.1.73 (registry+https://github.com/rust-lang/crates.io-index)" = "56b7ee9f764ecf412c6e2fff779bca4b22980517ae335a21aeaf4e32625a5df2" -"checksum regex-syntax 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "31040aad7470ad9d8c46302dcffba337bb4289ca5da2e3cd6e37b64109a85199" -"checksum rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)" = "6159e4e6e559c81bd706afe9c8fd68f547d3e851ce12e76b1de7914bab61691b" -"checksum strsim 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e4d73a2c36a4d095ed1a6df5cbeac159863173447f7a82b3f4757426844ab825" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" +"checksum strsim 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "67f84c44fbb2f91db7fef94554e6b2ac05909c9c0b0bc23bb98d3a1aebfe7f7c" "checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" -"checksum thread_local 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "55dd963dbaeadc08aa7266bf7f91c3154a7805e32bb94b820b769d2ef3b4744d" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" "checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" -"checksum walkdir 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "7ad450634b9022aeb0e8e7f1c79c1ded92d0fc5bee831033d148479771bd218d" +"checksum walkdir 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "c66c0b9792f0a765345452775f3adbd28dde9d33f30d13e5dcc5ae17cf6f3780" "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/src/doc/book/second-edition/dictionary.txt b/src/doc/book/second-edition/dictionary.txt index 86dea7dc7b..5652f97d47 100644 --- a/src/doc/book/second-edition/dictionary.txt +++ b/src/doc/book/second-edition/dictionary.txt @@ -225,6 +225,7 @@ monomorphized MoveMessage Mozilla mpsc +multibyte multithreaded mutex mutex's diff --git a/src/doc/book/second-edition/nostarch.sh b/src/doc/book/second-edition/nostarch.sh index a24d6bb9dd..432add597c 100755 --- a/src/doc/book/second-edition/nostarch.sh +++ b/src/doc/book/second-edition/nostarch.sh @@ -17,7 +17,7 @@ mkdir -p tmp rm -rf tmp/*.md # Get all the markdown files in the src dir, -ls src/*.md | \ +ls src/${1:-""}*.md | \ # except for SUMMARY.md. grep -v SUMMARY.md | \ # Extract just the filename so we can reuse it easily. @@ -25,9 +25,9 @@ xargs -n 1 basename | \ # Remove all links followed by , then # Change all remaining links from markdown to italicized inline text. while IFS= read -r filename; do - < "src/$filename" cargo run --bin remove_links \ - | cargo run --bin link2print \ - | cargo run --bin remove_markup > "tmp/$filename" + < "src/$filename" ./target/release/remove_links \ + | ./target/release/link2print \ + | ./target/release/remove_markup > "tmp/$filename" done # Concat the files into the nostarch dir. -cargo run --bin concat_chapters tmp nostarch +./target/release/concat_chapters tmp nostarch diff --git a/src/doc/book/second-edition/nostarch/chapter03.md b/src/doc/book/second-edition/nostarch/chapter03.md index 7905cbc20b..14fa40d220 100644 --- a/src/doc/book/second-edition/nostarch/chapter03.md +++ b/src/doc/book/second-edition/nostarch/chapter03.md @@ -52,23 +52,24 @@ Save and run the program using `cargo run`. You should receive an error message, as shown in this output: ``` -error[E0384]: re-assignment of immutable variable `x` +error[E0384]: cannot assign twice to immutable variable `x` --> src/main.rs:4:5 | 2 | let x = 5; | - first assignment to `x` 3 | println!("The value of x is: {}", x); 4 | x = 6; - | ^^^^^ re-assignment of immutable variable + | ^^^^^ cannot assign twice to immutable variable ``` This example shows how the compiler helps you find errors in your programs. Even though compiler errors can be frustrating, they only mean your program isn’t safely doing what you want it to do yet; they do *not* mean that you’re -not a good programmer! Experienced Rustaceans still get compiler errors. The -error indicates that the cause of the error is `re-assignment of immutable -variable`, because we tried to assign a second value to the immutable `x` -variable. +not a good programmer! Experienced Rustaceans still get compiler errors. + +The error indicates that the cause of the error is that we `cannot assign twice +to immutable variable x`, because we tried to assign a second value to the +immutable `x` variable. It’s important that we get compile-time errors when we attempt to change a value that we previously designated as immutable because this very situation @@ -225,15 +226,14 @@ and the second `spaces` variable, which is a brand-new variable that happens to have the same name as the first one, is a number type. Shadowing thus spares us from having to come up with different names, like `spaces_str` and `spaces_num`; instead, we can reuse the simpler `spaces` name. However, if we -try to use `mut` for this, as shown here: +try to use `mut` for this, as shown here, we’ll get a compile-time error: ``` let mut spaces = " "; spaces = spaces.len(); ``` -we’ll get a compile-time error because we’re not allowed to mutate a variable’s -type: +The error says we’re not allowed to mutate a variable’s type: ``` error[E0308]: mismatched types @@ -576,8 +576,9 @@ get the value `2` from index `[1]` in the array. ##### Invalid Array Element Access -What happens if we try to access an element of an array that is past the end of -the array? Say we change the example to the following: +What happens if you try to access an element of an array that is past the end +of the array? Say you change the example to the following code, which will +compile but exit with an error when it runs: Filename: src/main.rs @@ -735,7 +736,7 @@ types. The function then prints out the values in both of its parameters. Note that function parameters don’t all need to be the same type, they just happen to be in this example. -Let’s try running this code. Replace the program currently in your *function* +Let’s try running this code. Replace the program currently in your *functions* project’s *src/main.rs* file with the preceding example, and run it using `cargo run`: @@ -768,7 +769,7 @@ instructions that perform some action and do not return a value. *Expressions* evaluate to a resulting value. Let’s look at some examples. Creating a variable and assigning a value to it with the `let` keyword is a -statement. In Listing 3-3, `let y = 6;` is a statement: +statement. In Listing 3-1, `let y = 6;` is a statement: Filename: src/main.rs @@ -778,13 +779,13 @@ fn main() { } ``` -Listing 3-3: A `main` function declaration containing one statement. +Listing 3-1: A `main` function declaration containing one statement. Function definitions are also statements; the entire preceding example is a statement in itself. Statements do not return values. Therefore, you can’t assign a `let` statement -to another variable, as the following code tries to do: +to another variable, as the following code tries to do; you’ll get an error: Filename: src/main.rs @@ -794,7 +795,7 @@ fn main() { } ``` -When you run this program, you’ll get an error like this: +When you run this program, the error you’ll get looks like this: ``` $ cargo run @@ -817,7 +818,7 @@ not the case in Rust. Expressions evaluate to something and make up most of the rest of the code that you’ll write in Rust. Consider a simple math operation, such as `5 + 6`, which is an expression that evaluates to the value `11`. Expressions can be part of -statements: in Listing 3-3 that had the statement `let y = 6;`, `6` is an +statements: in Listing 3-1 that had the statement `let y = 6;`, `6` is an expression that evaluates to the value `6`. Calling a function is an expression. Calling a macro is an expression. The block that we use to create new scopes, `{}`, is an expression, for example: @@ -921,7 +922,7 @@ fn plus_one(x: i32) -> i32 { Running this code will print `The value of x is: 6`. What happens if we place a semicolon at the end of the line containing `x + 1`, changing it from an -expression to a statement? +expression to a statement? We’ll get an error: Filename: src/main.rs @@ -1083,9 +1084,9 @@ $ cargo run condition was false ``` -It’s also worth noting that the condition in this code *must* be a `bool`. To -see what happens if the condition isn’t a `bool`, try running the following -code: +It’s also worth noting that the condition in this code *must* be a `bool`. If +the condition isn’t a `bool`, we’ll get an error. For example, try running the +following code: Filename: src/main.rs @@ -1182,7 +1183,7 @@ Rust branching construct called `match` for these cases. #### Using `if` in a `let` statement Because `if` is an expression, we can use it on the right side of a `let` -statement, for instance in Listing 3-4: +statement, for instance in Listing 3-2: Filename: src/main.rs @@ -1199,7 +1200,7 @@ fn main() { } ``` -Listing 3-4: Assigning the result of an `if` expression +Listing 3-2: Assigning the result of an `if` expression to a variable The `number` variable will be bound to a value based on the outcome of the `if` @@ -1217,9 +1218,9 @@ Remember that blocks of code evaluate to the last expression in them, and numbers by themselves are also expressions. In this case, the value of the whole `if` expression depends on which block of code executes. This means the values that have the potential to be results from each arm of the `if` must be -the same type; in Listing 3-4, the results of both the `if` arm and the `else` -arm were `i32` integers. But what happens if the types are mismatched, as in -the following example? +the same type; in Listing 3-2, the results of both the `if` arm and the `else` +arm were `i32` integers. If the types are mismatched, as in the following +example, we’ll get an error: Filename: src/main.rs @@ -1356,7 +1357,7 @@ true, the code runs; otherwise, it exits the loop. #### Looping Through a Collection with `for` You could use the `while` construct to loop over the elements of a collection, -such as an array. For example, let’s look at Listing 3-5: +such as an array. For example, let’s look at Listing 3-3: Filename: src/main.rs @@ -1373,7 +1374,7 @@ fn main() { } ``` -Listing 3-5: Looping through each element of a collection +Listing 3-3: Looping through each element of a collection using a `while` loop Here, the code counts up through the elements in the array. It starts at index @@ -1402,8 +1403,8 @@ index length is incorrect. It’s also slow, because the compiler adds runtime code to perform the conditional check on every element on every iteration through the loop. -As a more efficient alternative, you can use a `for` loop and execute some code -for each item in a collection. A `for` loop looks like this code in Listing 3-6: +As a more concise alternative, you can use a `for` loop and execute some code +for each item in a collection. A `for` loop looks like this code in Listing 3-4: Filename: src/main.rs @@ -1417,15 +1418,15 @@ fn main() { } ``` -Listing 3-6: Looping through each element of a collection +Listing 3-4: Looping through each element of a collection using a `for` loop -When we run this code, we’ll see the same output as in Listing 3-5. More +When we run this code, we’ll see the same output as in Listing 3-3. More importantly, we’ve now increased the safety of the code and eliminated the chance of bugs that might result from going beyond the end of the array or not going far enough and missing some items. -For example, in the code in Listing 3-5, if you removed an item from the `a` +For example, in the code in Listing 3-3, if you removed an item from the `a` array but forgot to update the condition to `while index < 4`, the code would panic. Using the `for` loop, you don’t need to remember to change any other code if you changed the number of values in the array. @@ -1433,7 +1434,7 @@ code if you changed the number of values in the array. The safety and conciseness of `for` loops make them the most commonly used loop construct in Rust. Even in situations in which you want to run some code a certain number of times, as in the countdown example that used a `while` loop -in Listing 3-5, most Rustaceans would use a `for` loop. The way to do that +in Listing 3-3, most Rustaceans would use a `for` loop. The way to do that would be to use a `Range`, which is a type provided by the standard library that generates all numbers in sequence starting from one number and ending before another number. diff --git a/src/doc/book/second-edition/nostarch/chapter04.md b/src/doc/book/second-edition/nostarch/chapter04.md index da77abb8ec..73ae2a3d72 100644 --- a/src/doc/book/second-edition/nostarch/chapter04.md +++ b/src/doc/book/second-edition/nostarch/chapter04.md @@ -53,46 +53,47 @@ and removing data is called *popping off the stack*. The stack is fast because of the way it accesses the data: it never has to search for a place to put new data or a place to get data from because that -place is always the top. Another property that makes the stack fast is that all -data on the stack must take up a known, fixed size. - -For data with a size unknown to us at compile time or a size that might change, -we can store data on the heap instead. The heap is less organized: when we put -data on the heap, we ask for some amount of space. The operating system finds -an empty spot somewhere in the heap that is big enough, marks it as being in -use, and returns to us a pointer to that location. This process is called -*allocating on the heap*, and sometimes we abbreviate the phrase as just -“allocating.” Pushing values onto the stack is not considered allocating. -Because the pointer is a known, fixed size, we can store the pointer on the -stack, but when we want the actual data, we have to follow the pointer. +place is always the top. Another property that makes the stack fast is that +all data on the stack must take up a known, fixed size. + +For data with a size unknown to us at compile time or a size that might +change, we can store data on the heap instead. The heap is less organized: +when we put data on the heap, we ask for some amount of space. The operating +system finds an empty spot somewhere in the heap that is big enough, marks it +as being in use, and returns to us a *pointer*, which is the address of that +location. This process is called *allocating on the heap*, and sometimes we +abbreviate the phrase as just “allocating.” Pushing values onto the stack is +not considered allocating. Because the pointer is a known, fixed size, we can +store the pointer on the stack, but when we want the actual data, we have to +follow the pointer. Think of being seated at a restaurant. When you enter, you state the number of -people in your group, and the staff finds an empty table that fits everyone and -leads you there. If someone in your group comes late, they can ask where you’ve -been seated to find you. +people in your group, and the staff finds an empty table that fits everyone +and leads you there. If someone in your group comes late, they can ask where +you’ve been seated to find you. Accessing data in the heap is slower than accessing data on the stack because -we have to follow a pointer to get there. Contemporary processors are faster if -they jump around less in memory. Continuing the analogy, consider a server at a -restaurant taking orders from many tables. It’s most efficient to get all the -orders at one table before moving on to the next table. Taking an order from -table A, then an order from table B, then one from A again, and then one from B -again would be a much slower process. By the same token, a processor can do its -job better if it works on data that’s close to other data (as it is on the -stack) rather than farther away (as it can be on the heap). Allocating a large -amount of space on the heap can also take time. - -When our code calls a function, the values passed into the function (including, -potentially, pointers to data on the heap) and the function’s local variables -get pushed onto the stack. When the function is over, those values get popped -off the stack. - -Keeping track of what parts of code are using what data on the heap, minimizing -the amount of duplicate data on the heap, and cleaning up unused data on the -heap so we don’t run out of space are all problems that ownership addresses. -Once you understand ownership, you won’t need to think about the stack and the -heap very often, but knowing that managing heap data is why ownership exists -can help explain why it works the way it does. +we have to follow a pointer to get there. Contemporary processors are faster +if they jump around less in memory. Continuing the analogy, consider a server +at a restaurant taking orders from many tables. It’s most efficient to get +all the orders at one table before moving on to the next table. Taking an +order from table A, then an order from table B, then one from A again, and +then one from B again would be a much slower process. By the same token, a +processor can do its job better if it works on data that’s close to other +data (as it is on the stack) rather than farther away (as it can be on the +heap). Allocating a large amount of space on the heap can also take time. + +When our code calls a function, the values passed into the function +(including, potentially, pointers to data on the heap) and the function’s +local variables get pushed onto the stack. When the function is over, those +values get popped off the stack. + +Keeping track of what parts of code are using what data on the heap, +minimizing the amount of duplicate data on the heap, and cleaning up unused +data on the heap so we don’t run out of space are all problems that ownership +addresses. Once you understand ownership, you won’t need to think about the +stack and the heap very often, but knowing that managing heap data is why +ownership exists can help explain why it works the way it does. PROD: END BOX @@ -118,7 +119,7 @@ As a first example of ownership, we’ll look at the *scope* of some variables. scope is the range within a program for which an item is valid. Let’s say we have a variable that looks like this: -```rust +``` let s = "hello"; ``` @@ -127,7 +128,7 @@ hardcoded into the text of our program. The variable is valid from the point at which it’s declared until the end of the current *scope*. Listing 4-1 has comments annotating where the variable `s` is valid: -```rust +``` { // s is not valid here, it’s not yet declared let s = "hello"; // s is valid from this point forward @@ -135,9 +136,7 @@ comments annotating where the variable `s` is valid: } // this scope is now over, and s is no longer valid ``` - Listing 4-1: A variable and the scope in which it is valid - In other words, there are two important points in time here: @@ -151,9 +150,9 @@ understanding by introducing the `String` type. ### The `String` Type To illustrate the rules of ownership, we need a data type that is more complex -than the ones we covered in Chapter 3. All the data types we’ve looked at -previously are stored on the stack and popped off the stack when their scope is -over, but we want to look at data that is stored on the heap and explore how +than the ones we covered in Chapter 3. The types covered in the “Data Types” +section are all stored on the stack and popped off the stack when their scope +is over, but we want to look at data that is stored on the heap and explore how Rust knows when to clean up that data. We’ll use `String` as the example here and concentrate on the parts of `String` @@ -171,7 +170,7 @@ allocated on the heap and as such is able to store an amount of text that is unknown to us at compile time. You can create a `String` from a string literal using the `from` function, like so: -```rust +``` let s = String::from("hello"); ``` @@ -183,7 +182,7 @@ Chapter 7. This kind of string *can* be mutated: -```rust +``` let mut s = String::from("hello"); s.push_str(", world!"); // push_str() appends a literal to a String @@ -229,7 +228,7 @@ Rust takes a different path: the memory is automatically returned once the variable that owns it goes out of scope. Here’s a version of our scope example from Listing 4-1 using a `String` instead of a string literal: -```rust +``` { let s = String::from("hello"); // s is valid from this point forward @@ -245,9 +244,9 @@ and it’s where the author of `String` can put the code to return the memory. Rust calls `drop` automatically at the closing `}`. > Note: In C++, this pattern of deallocating resources at the end of an item’s -lifetime is sometimes called *Resource Acquisition Is Initialization (RAII)*. -The `drop` function in Rust will be familiar to you if you’ve used RAII -patterns. +> lifetime is sometimes called *Resource Acquisition Is Initialization (RAII)*. +> The `drop` function in Rust will be familiar to you if you’ve used RAII +> patterns. This pattern has a profound impact on the way Rust code is written. It may seem simple right now, but the behavior of code can be unexpected in more @@ -259,14 +258,12 @@ we’ve allocated on the heap. Let’s explore some of those situations now. Multiple variables can interact with the same data in different ways in Rust. Let’s look at an example using an integer in Listing 4-2: -```rust +``` let x = 5; let y = x; ``` - Listing 4-2: Assigning the integer value of variable `x` to `y` - We can probably guess what this is doing based on our experience with other languages: “Bind the value `5` to `x`; then make a copy of the value in `x` and @@ -276,7 +273,7 @@ known, fixed size, and these two `5` values are pushed onto the stack. Now let’s look at the `String` version: -```rust +``` let s1 = String::from("hello"); let s2 = s1; ``` @@ -286,17 +283,15 @@ it works would be the same: that is, the second line would make a copy of the value in `s1` and bind it to `s2`. But this isn’t quite what happens. To explain this more thoroughly, let’s look at what `String` looks like under -the covers in Figure 4-3. A `String` is made up of three parts, shown on the +the covers in Figure 4-1. A `String` is made up of three parts, shown on the left: a pointer to the memory that holds the contents of the string, a length, and a capacity. This group of data is stored on the stack. On the right is the memory on the heap that holds the contents. String in memory - -Figure 4-3: Representation in memory of a `String` holding the value `"hello"` +Figure 4-1: Representation in memory of a `String` holding the value `"hello"` bound to `s1` - The length is how much memory, in bytes, the contents of the `String` is currently using. The capacity is the total amount of memory, in bytes, that the @@ -307,30 +302,26 @@ the capacity. When we assign `s1` to `s2`, the `String` data is copied, meaning we copy the pointer, the length, and the capacity that are on the stack. We do not copy the data on the heap that the pointer refers to. In other words, the data -representation in memory looks like Figure 4-4. +representation in memory looks like Figure 4-2. s1 and s2 pointing to the same value - -Figure 4-4: Representation in memory of the variable `s2` that has a copy of +Figure 4-2: Representation in memory of the variable `s2` that has a copy of the pointer, length, and capacity of `s1` - -The representation does *not* look like Figure 4-5, which is what memory would +The representation does *not* look like Figure 4-3, which is what memory would look like if Rust instead copied the heap data as well. If Rust did this, the operation `s2 = s1` could potentially be very expensive in terms of runtime performance if the data on the heap was large. s1 and s2 to two places - -Figure 4-5: Another possibility of what `s2 = s1` might do if Rust copied the +Figure 4-3: Another possibility of what `s2 = s1` might do if Rust copied the heap data as well - Earlier, we said that when a variable goes out of scope, Rust automatically calls the `drop` function and cleans up the heap memory for that variable. But -Figure 4-4 shows both data pointers pointing to the same location. This is a +Figure 4-2 shows both data pointers pointing to the same location. This is a problem: when `s2` and `s1` go out of scope, they will both try to free the same memory. This is known as a *double free* error and is one of the memory safety bugs we mentioned previously. Freeing memory twice can lead to memory @@ -340,27 +331,30 @@ To ensure memory safety, there’s one more detail to what happens in this situation in Rust. Instead of trying to copy the allocated memory, Rust considers `s1` to no longer be valid and therefore, Rust doesn’t need to free anything when `s1` goes out of scope. Check out what happens when you try to -use `s1` after `s2` is created: +use `s1` after `s2` is created, it won't work: -```rust,ignore +``` let s1 = String::from("hello"); let s2 = s1; -println!("{}", s1); +println!("{}, world!", s1); ``` You’ll get an error like this because Rust prevents you from using the invalidated reference: -```text -5:22 error: use of moved value: `s1` [E0382] -println!("{}", s1); - ^~ -5:24 note: in this expansion of println! (defined in ) -3:11 note: `s1` moved here because it has type `collections::string::String`, -which is moved by default - let s2 = s1; - ^~ +``` +error[E0382]: use of moved value: `s1` + --> src/main.rs:5:28 + | +3 | let s2 = s1; + | -- value moved here +4 | +5 | println!("{}, world!", s1); + | ^^ value used here after move + | + = note: move occurs because `s1` has type `std::string::String`, which does + not implement the `Copy` trait ``` If you’ve heard the terms “shallow copy” and “deep copy” while working with @@ -368,13 +362,11 @@ other languages, the concept of copying the pointer, length, and capacity without copying the data probably sounds like a shallow copy. But because Rust also invalidates the first variable, instead of calling this a shallow copy, it’s known as a *move*. Here we would read this by saying that `s1` was *moved* -into `s2`. So what actually happens is shown in Figure 4-6. +into `s2`. So what actually happens is shown in Figure 4-4. s1 moved to s2 - -Figure 4-6: Representation in memory after `s1` has been invalidated - +Figure 4-4: Representation in memory after `s1` has been invalidated That solves our problem! With only `s2` valid, when it goes out of scope, it alone will free the memory, and we’re done. @@ -392,7 +384,7 @@ programming languages, you’ve probably seen them before. Here’s an example of the `clone` method in action: -```rust +``` let s1 = String::from("hello"); let s2 = s1.clone(); @@ -400,7 +392,7 @@ println!("s1 = {}, s2 = {}", s1, s2); ``` This works just fine and is how you can explicitly produce the behavior shown -in Figure 4-4, where the heap data *does* get copied. +in Figure 4-3, where the heap data *does* get copied. When you see a call to `clone`, you know that some arbitrary code is being executed and that code may be expensive. It’s a visual indicator that something @@ -411,7 +403,7 @@ different is going on. There’s another wrinkle we haven’t talked about yet. This code using integers, part of which was shown earlier in Listing 4-2, works and is valid: -```rust +``` let x = 5; let y = x; @@ -432,9 +424,11 @@ Rust has a special annotation called the `Copy` trait that we can place on types like integers that are stored on the stack (we’ll talk more about traits in Chapter 10). If a type has the `Copy` trait, an older variable is still usable after assignment. Rust won’t let us annotate a type with the `Copy` -trait if the type, or any of its parts, has implemented the `D``rop` trait. If +trait if the type, or any of its parts, has implemented the `Drop` trait. If the type needs something special to happen when the value goes out of scope and -we add the `Copy` annotation to that type, we’ll get a compile time error. +we add the `Copy` annotation to that type, we’ll get a compile time error. To +learn about how to add the `Copy` annotation to your type, see Appendix C on +Derivable Traits. So what types are `Copy`? You can check the documentation for the given type to be sure, but as a general rule, any group of simple scalar values can be @@ -443,6 +437,7 @@ be sure, but as a general rule, any group of simple scalar values can be * All the integer types, like `u32`. * The boolean type, `bool`, with values `true` and `false`. +* The character type, `char`. * All the floating point types, like `f64`. * Tuples, but only if they contain types that are also `Copy`. `(i32, i32)` is `Copy`, but `(i32, String)` is not. @@ -451,17 +446,18 @@ be sure, but as a general rule, any group of simple scalar values can be The semantics for passing a value to a function are similar to assigning a value to a variable. Passing a variable to a function will move or copy, just -like assignment. Listing 4-7 has an example with some annotations showing where +like assignment. Listing 4-3 has an example with some annotations showing where variables go into and out of scope: Filename: src/main.rs -```rust +``` fn main() { let s = String::from("hello"); // s comes into scope. takes_ownership(s); // s's value moves into the function... // ... and so is no longer valid here. + let x = 5; // x comes into scope. makes_copy(x); // x would move into the function, @@ -481,9 +477,7 @@ fn makes_copy(some_integer: i32) { // some_integer comes into scope. } // Here, some_integer goes out of scope. Nothing special happens. ``` - -Listing 4-7: Functions with ownership and scope annotated - +Listing 4-3: Functions with ownership and scope annotated If we tried to use `s` after the call to `takes_ownership`, Rust would throw a compile time error. These static checks protect us from mistakes. Try adding @@ -493,11 +487,11 @@ the ownership rules prevent you from doing so. ### Return Values and Scope Returning values can also transfer ownership. Here’s an example with similar -annotations to those in Listing 4-7: +annotations to those in Listing 4-3: Filename: src/main.rs -```rust +``` fn main() { let s1 = gives_ownership(); // gives_ownership moves its return // value into s1. @@ -523,16 +517,16 @@ fn gives_ownership() -> String { // gives_ownership will move its // takes_and_gives_back will take a String and return one. fn takes_and_gives_back(a_string: String) -> String { // a_string comes into -scope. + // scope. a_string // a_string is returned and moves out to the calling function. } ``` -The ownership of variables follows the same pattern every time: assigning a -value to another variable moves it, and when heap data values’ variables go out -of scope, if the data hasn’t been moved to be owned by another variable, the -value will be cleaned up by `drop`. +The ownership of a variable follows the same pattern every time: assigning a +value to another variable moves it. When a variable that includes data on the +heap goes out of scope, the value will be cleaned up by `drop` unless the data +has been moved to be owned by another variable. Taking ownership and then returning ownership with every function is a bit tedious. What if we want to let a function use a value but not take ownership? @@ -544,7 +538,7 @@ It’s possible to return multiple values using a tuple, like this: Filename: src/main.rs -```rust +``` fn main() { let s1 = String::from("hello"); @@ -571,13 +565,13 @@ have to return the `String` to the calling function so we can still use the `String` after the call to `calculate_length`, because the `String` was moved into `calculate_length`. -Here is how you would define and use a `calculate_length` function that takes a -*reference* to an object as an argument instead of taking ownership of the -argument: +Here is how you would define and use a `calculate_length` function that has a +*reference* to an object as a parameter instead of taking ownership of the +value: Filename: src/main.rs -```rust +``` fn main() { let s1 = String::from("hello"); @@ -597,17 +591,20 @@ function return value is gone. Second, note that we pass `&s1` into `String`. These ampersands are *references*, and they allow you to refer to some value -without taking ownership of it. Figure 4-8 shows a diagram. +without taking ownership of it. Figure 4-5 shows a diagram. &String s pointing at String s1 - -Figure 4-8: `&String s` pointing at `String s1` - +Figure 4-5: `&String s` pointing at `String s1` + +> Note: The opposite of referencing by using `&` is *dereferencing*, which is +> accomplished with the dereference operator, `*`. We’ll see some uses of the +> dereference operator in Chapter 8 and discuss details of dereferencing in +> Chapter 15. Let’s take a closer look at the function call here: -```rust +``` let s1 = String::from("hello"); let len = calculate_length(&s1); @@ -617,10 +614,10 @@ The `&s1` syntax lets us create a reference that *refers* to the value of `s1` but does not own it. Because it does not own it, the value it points to will not be dropped when the reference goes out of scope. -Likewise, the signature of the function uses `&` to indicate that it takes a -reference as an argument. Let’s add some explanatory annotations: +Likewise, the signature of the function uses `&` to indicate that the type of +the parameter `s` is a reference. Let’s add some explanatory annotations: -```rust +``` fn calculate_length(s: &String) -> usize { // s is a reference to a String s.len() } // Here, s goes out of scope. But because it does not have ownership of what @@ -628,21 +625,21 @@ fn calculate_length(s: &String) -> usize { // s is a reference to a String ``` The scope in which the variable `s` is valid is the same as any function -argument’s scope, but we don’t drop what the reference points to when it goes -out of scope because we don’t have ownership. Functions that take references as -arguments instead of the actual values mean we won’t need to return the values +parameter’s scope, but we don’t drop what the reference points to when it goes +out of scope because we don’t have ownership. Functions that have references as +parameters instead of the actual values mean we won’t need to return the values in order to give back ownership, since we never had ownership. -We call taking references as function arguments *borrowing*. As in real life, +We call having references as function parameters *borrowing*. As in real life, if a person owns something, you can borrow it from them. When you’re done, you have to give it back. So what happens if we try to modify something we’re borrowing? Try the code in -Listing 4-9. Spoiler alert: it doesn’t work! +Listing 4-4. Spoiler alert: it doesn’t work! Filename: src/main.rs -```rust,ignore +``` fn main() { let s = String::from("hello"); @@ -654,18 +651,18 @@ fn change(some_string: &String) { } ``` - -Listing 4-9: Attempting to modify a borrowed value - +Listing 4-4: Attempting to modify a borrowed value Here’s the error: -```text -error: cannot borrow immutable borrowed content `*some_string` as mutable +``` +error[E0596]: cannot borrow immutable borrowed content `*some_string` as mutable --> error.rs:8:5 | +7 | fn change(some_string: &String) { + | ------- use `&mut String` here to make mutable 8 | some_string.push_str(", world"); - | ^^^^^^^^^^^ + | ^^^^^^^^^^^ cannot borrow as mutable ``` Just as variables are immutable by default, so are references. We’re not @@ -673,11 +670,11 @@ allowed to modify something we have a reference to. ### Mutable References -We can fix the error in the code from Listing 4-9 with just a small tweak: +We can fix the error in the code from Listing 4-4 with just a small tweak: Filename: src/main.rs -```rust +``` fn main() { let mut s = String::from("hello"); @@ -699,7 +696,7 @@ fail: Filename: src/main.rs -```rust,ignore +``` let mut s = String::from("hello"); let r1 = &mut s; @@ -708,7 +705,7 @@ let r2 = &mut s; Here’s the error: -```text +``` error[E0499]: cannot borrow `s` as mutable more than once at a time --> borrow_twice.rs:5:19 | @@ -725,7 +722,7 @@ something that new Rustaceans struggle with, because most languages let you mutate whenever you’d like. The benefit of having this restriction is that Rust can prevent data races at compile time. -A *data race* is a particular type of race condition in which these three +A *data race* is similar to a race condition and happens when these three behaviors occur: 1. Two or more pointers access the same data at the same time. @@ -739,7 +736,7 @@ from happening because it won’t even compile code with data races! As always, we can use curly brackets to create a new scope, allowing for multiple mutable references, just not *simultaneous* ones: -```rust +``` let mut s = String::from("hello"); { @@ -753,7 +750,7 @@ let r2 = &mut s; A similar rule exists for combining mutable and immutable references. This code results in an error: -```rust,ignore +``` let mut s = String::from("hello"); let r1 = &s; // no problem @@ -763,7 +760,7 @@ let r3 = &mut s; // BIG PROBLEM Here’s the error: -```text +``` error[E0502]: cannot borrow `s` as mutable because it is also borrowed as immutable --> borrow_thrice.rs:6:19 @@ -798,11 +795,12 @@ never be dangling references: if we have a reference to some data, the compiler will ensure that the data will not go out of scope before the reference to the data does. -Let’s try to create a dangling reference: +Let’s try to create a dangling reference, which Rust will prevent with a +compile-time error: Filename: src/main.rs -```rust,ignore +``` fn main() { let reference_to_nothing = dangle(); } @@ -816,18 +814,16 @@ fn dangle() -> &String { Here’s the error: -```text +``` error[E0106]: missing lifetime specifier --> dangle.rs:5:16 | 5 | fn dangle() -> &String { - | ^^^^^^^ + | ^ expected lifetime parameter | - = help: this function's return type contains a borrowed value, but there is no - value for it to be borrowed from + = help: this function's return type contains a borrowed value, but there is + no value for it to be borrowed from = help: consider giving it a 'static lifetime - -error: aborting due to previous error ``` This error message refers to a feature we haven’t covered yet: *lifetimes*. @@ -843,7 +839,7 @@ for it to be borrowed from. Let’s take a closer look at exactly what’s happening at each stage of our `dangle` code: -```rust,ignore +``` fn dangle() -> &String { // dangle returns a reference to a String let s = String::from("hello"); // s is a new String @@ -858,9 +854,9 @@ Because `s` is created inside `dangle`, when the code of `dangle` is finished, this reference would be pointing to an invalid `String`! That’s no good. Rust won’t let us do this. -The correct code here is to return the `String` directly: +The solution here is to return the `String` directly: -```rust +``` fn no_dangle() -> String { let s = String::from("hello"); @@ -895,18 +891,18 @@ string should be returned. Let’s think about the signature of this function: -```rust,ignore +``` fn first_word(s: &String) -> ? ``` -This function, `first_word`, takes a `&String` as an argument. We don’t want +This function, `first_word`, has a `&String` as a parameter. We don’t want ownership, so this is fine. But what should we return? We don’t really have a way to talk about *part* of a string. However, we could return the index of the -end of the word. Let’s try that as shown in Listing 4-10: +end of the word. Let’s try that as shown in Listing 4-5: Filename: src/main.rs -```rust +``` fn first_word(s: &String) -> usize { let bytes = s.as_bytes(); @@ -920,38 +916,41 @@ fn first_word(s: &String) -> usize { } ``` - -Listing 4-10: The `first_word` function that returns a byte index value into -the `String` argument - +Listing 4-5: The `first_word` function that returns a byte index value into the +`String` parameter -Let’s break down this code a bit: +Let’s break down this code a bit. Because we need to go through the `String` +element by element and check whether a value is a space, we’ll convert our +`String` to an array of bytes using the `as_bytes` method: -```rust,ignore +``` let bytes = s.as_bytes(); ``` -Because we need to go through the `String` element by element and check whether -a value is a space, we’ll convert our `String` to an array of bytes using the -`as_bytes` method: +Next, we create an iterator over the array of bytes using the `iter` method: -```rust,ignore +``` for (i, &item) in bytes.iter().enumerate() { ``` -We’ll discuss iterators in more detail in Chapter 16. For now, know that `iter` +We’ll discuss iterators in more detail in Chapter 13. For now, know that `iter` is a method that returns each element in a collection, and `enumerate` wraps the result of `iter` and returns each element as part of a tuple instead. The first element of the returned tuple is the index, and the second element is a reference to the element. This is a bit more convenient than calculating the index ourselves. -Because the method returns a tuple, we can use patterns, just like everywhere -else in Rust. So we match against the tuple with `i` for the index and `&item` -for a single byte. Because we get a reference from `.iter().enumerate()`, we -use `&` in the pattern: +Because the `enumerate` method returns a tuple, we can use patterns to +destructure that tuple, just like everywhere else in Rust. So in the `for` +loop, we specify a pattern that has `i` for the index in the tuple and `&item` +for the single byte in the tuple. Because we get a reference to the element +from `.iter().enumerate()`, we use `&` in the pattern. -```rust,ignore +We search for the byte that represents the space by using the byte literal +syntax. If we find a space, we return the position. Otherwise, we return the +length of the string by using `s.len()`: + +``` if item == b' ' { return i; } @@ -959,20 +958,16 @@ use `&` in the pattern: s.len() ``` -We search for the byte that represents the space by using the byte literal -syntax. If we find a space, we return the position. Otherwise, we return the -length of the string by using `s.len()`. - We now have a way to find out the index of the end of the first word in the string, but there’s a problem. We’re returning a `usize` on its own, but it’s only a meaningful number in the context of the `&String`. In other words, because it’s a separate value from the `String`, there’s no guarantee that it -will still be valid in the future. Consider the program in Listing 4-11 that -uses the `first_word` function from Listing 4-10: +will still be valid in the future. Consider the program in Listing 4-6 that +uses the `first_word` function from Listing 4-5: Filename: src/main.rs -```rust +``` fn main() { let mut s = String::from("hello world"); @@ -985,10 +980,8 @@ fn main() { } ``` - -Listing 4-11: Storing the result from calling the `first_word` function then +Listing 4-6: Storing the result from calling the `first_word` function then changing the `String` contents - This program compiles without any errors and also would if we used `word` after calling `s.clear()`. `word` isn’t connected to the state of `s` at all, so @@ -1000,7 +993,7 @@ Having to worry about the index in `word` getting out of sync with the data in `s` is tedious and error prone! Managing these indices is even more brittle if we write a `second_word` function. Its signature would have to look like this: -```rust,ignore +``` fn second_word(s: &String) -> (usize, usize) { ``` @@ -1015,7 +1008,7 @@ Luckily, Rust has a solution to this problem: string slices. A *string slice* is a reference to part of a `String`, and looks like this: -```rust +``` let s = String::from("hello world"); let hello = &s[0..5]; @@ -1024,26 +1017,27 @@ let world = &s[6..11]; This is similar to taking a reference to the whole `String` but with the extra `[0..5]` bit. Rather than a reference to the entire `String`, it’s a reference -to an internal position in the `String` and the number of elements that it -refers to. +to a portion of the `String`. The `start..end` syntax is a range that begins at +`start` and continues up to, but not including, `end`. -We create slices with a range of `[starting_index..ending_index]`, but the -slice data structure actually stores the starting position and the length of -the slice. So in the case of `let world = &s[6..11];`, `world` would be a slice -that contains a pointer to the 6th byte of `s` and a length value of 5. +We can create slices using a range within brackets by specifying +`[starting_index..ending_index]`, where `starting_index` is the first position +included in the slice and `ending_index` is one more than the last position +included in the slice. Internally, the slice data structure stores the starting +position and the length of the slice, which corresponds to `ending_index` minus +`starting_index`. So in the case of `let world = &s[6..11];`, `world` would be +a slice that contains a pointer to the 6th byte of `s` and a length value of 5. -Figure 4-12 shows this in a diagram. +Figure 4-6 shows this in a diagram. world containing a pointer to the 6th byte of String s and a length 5 - -Figure 4-12: String slice referring to part of a `String` - +Figure 4-6: String slice referring to part of a `String` With Rust’s `..` range syntax, if you want to start at the first index (zero), you can drop the value before the two periods. In other words, these are equal: -```rust +``` let s = String::from("hello"); let slice = &s[0..2]; @@ -1053,7 +1047,7 @@ let slice = &s[..2]; By the same token, if your slice includes the last byte of the `String`, you can drop the trailing number. That means these are equal: -```rust +``` let s = String::from("hello"); let len = s.len(); @@ -1065,7 +1059,7 @@ let slice = &s[3..]; You can also drop both values to take a slice of the entire string. So these are equal: -```rust +``` let s = String::from("hello"); let len = s.len(); @@ -1074,12 +1068,19 @@ let slice = &s[0..len]; let slice = &s[..]; ``` +> Note: String slice range indices must occur at valid UTF-8 character +> boundaries. If you attempt to create a string slice in the middle of a +> multibyte character, your program will exit with an error. For the purposes +> of introducing string slices, we are assuming ASCII only in this section; a +> more thorough discussion of UTF-8 handling is in the “Strings” section of +> Chapter 8. + With all this information in mind, let’s rewrite `first_word` to return a slice. The type that signifies “string slice” is written as `&str`: Filename: src/main.rs -```rust +``` fn first_word(s: &String) -> &str { let bytes = s.as_bytes(); @@ -1094,7 +1095,7 @@ fn first_word(s: &String) -> &str { ``` We get the index for the end of the word in the same way as we did in Listing -4-10, by looking for the first occurrence of a space. When we find a space, we +4-5, by looking for the first occurrence of a space. When we find a space, we return a string slice using the start of the string and the index of the space as the starting and ending indices. @@ -1104,13 +1105,13 @@ the slice and the number of elements in the slice. Returning a slice would also work for a `second_word` function: -```rust,ignore +``` fn second_word(s: &String) -> &str { ``` We now have a straightforward API that’s much harder to mess up, since the compiler will ensure the references into the `String` remain valid. Remember -the bug in the program in Listing 4-11, when we got the index to the end of the +the bug in the program in Listing 4-6, when we got the index to the end of the first word but then cleared the string so our index was invalid? That code was logically incorrect but didn’t show any immediate errors. The problems would show up later if we kept trying to use the first word index with an emptied @@ -1120,7 +1121,7 @@ compile time error: Filename: src/main.rs -```rust,ignore +``` fn main() { let mut s = String::from("hello world"); @@ -1132,20 +1133,17 @@ fn main() { Here’s the compiler error: -```text -17:6 error: cannot borrow `s` as mutable because it is also borrowed as - immutable [E0502] - s.clear(); // Error! - ^ -15:29 note: previous borrow of `s` occurs here; the immutable borrow prevents - subsequent moves or mutable borrows of `s` until the borrow ends - let word = first_word(&s); - ^ -18:2 note: previous borrow ends here -fn main() { - -} -^ +``` +error[E0502]: cannot borrow `s` as mutable because it is also borrowed as immutable + --> src/main.rs:6:5 + | +4 | let word = first_word(&s); + | - immutable borrow occurs here +5 | +6 | s.clear(); // Error! + | ^ mutable borrow occurs here +7 | } + | - immutable borrow ends here ``` Recall from the borrowing rules that if we have an immutable reference to @@ -1159,7 +1157,7 @@ class of errors at compile time! Recall that we talked about string literals being stored inside the binary. Now that we know about slices, we can properly understand string literals: -```rust +``` let s = "Hello, world!"; ``` @@ -1167,30 +1165,30 @@ The type of `s` here is `&str`: it’s a slice pointing to that specific point o the binary. This is also why string literals are immutable; `&str` is an immutable reference. -#### String Slices as Arguments +#### String Slices as Parameters Knowing that you can take slices of literals and `String`s leads us to one more improvement on `first_word`, and that’s its signature: -```rust,ignore +``` fn first_word(s: &String) -> &str { ``` A more experienced Rustacean would write the following line instead because it allows us to use the same function on both `String`s and `&str`s: -```rust,ignore +``` fn first_word(s: &str) -> &str { ``` -If we have a string slice, we can pass that as the argument directly. If we -have a `String`, we can pass a slice of the entire `String`. Defining a -function to take a string slice argument instead of a reference to a String -makes our API more general and useful without losing any functionality: +If we have a string slice, we can pass that directly. If we have a `String`, we +can pass a slice of the entire `String`. Defining a function to take a string +slice instead of a reference to a String makes our API more general and useful +without losing any functionality: Filename: src/main.rs -```rust +``` fn main() { let my_string = String::from("hello world"); @@ -1213,14 +1211,14 @@ fn main() { String slices, as you might imagine, are specific to strings. But there’s a more general slice type, too. Consider this array: -```rust +``` let a = [1, 2, 3, 4, 5]; ``` Just like we might want to refer to a part of a string, we might want to refer to part of an array and would do so like this: -```rust +``` let a = [1, 2, 3, 4, 5]; let slice = &a[1..3]; diff --git a/src/doc/book/second-edition/nostarch/chapter05.md b/src/doc/book/second-edition/nostarch/chapter05.md index 1cdde1247c..64e2a0f10a 100644 --- a/src/doc/book/second-edition/nostarch/chapter05.md +++ b/src/doc/book/second-edition/nostarch/chapter05.md @@ -23,7 +23,7 @@ the data to specify or access the values of an instance. To define a struct, we enter the keyword `struct` and name the entire struct. A struct’s name should describe the significance of the pieces of data being -grouped together. Then, inside curly braces, we define the names and types of +grouped together. Then, inside curly brackets, we define the names and types of the pieces of data, which we call *fields*. For example, Listing 5-1 shows a struct to store information about a user account: @@ -40,7 +40,7 @@ Listing 5-1: A `User` struct definition To use a struct after we’ve defined it, we create an *instance* of that struct by specifying concrete values for each of the fields. We create an instance by -stating the name of the struct, and then add curly braces containing `key: +stating the name of the struct, and then add curly brackets containing `key: value` pairs where the keys are the names of the fields and the values are the data we want to store in those fields. We don’t have to specify the fields in the same order in which we declared them in the struct. In other words, the @@ -79,7 +79,7 @@ user1.email = String::from("anotheremail@example.com"); Listing 5-3: Changing the value in the `email` field of a `User` instance Note that the entire instance must be mutable; Rust doesn’t allow us to mark -only certain fields as mutable. Also note that with any expression, we can +only certain fields as mutable. Also note that as with any expression, we can construct a new instance of the struct as the last expression in the function body to implicitly return that new instance. @@ -104,7 +104,7 @@ returns a `User` instance It makes sense to name the function arguments with the same name as the struct fields, but having to repeat the `email` and `username` field names and variables is a bit tedious. If the struct had more fields, repeating each name -would get even more annoying. Luckily, there's a convenient shorthand! +would get even more annoying. Luckily, there’s a convenient shorthand! ### Using the Field Init Shorthand when Variables and Fields Have the Same Name @@ -154,7 +154,7 @@ let user2 = User { Listing 5-6: Creating a new `User` instance using some of the values from `user1` -Using struct update syntax, we can achieve the same effect with less code, +Using struct update syntax, we can achieve the same effect with less code, as shown in Listing 5-7. The syntax `..` specifies that the remaining fields not explicitly set should have the same value as the fields in the given instance. @@ -166,7 +166,7 @@ let user2 = User { }; ``` -Listing 5-7: Using struct update syntax to set a new `email` and `username` +Listing 5-7: Using struct update syntax to set new `email` and `username` values for a `User` instance but use the rest of the values from the fields of the instance in the `user1` variable @@ -176,12 +176,13 @@ different value for `email` and `username` but has the same values for the ### Tuple Structs without Named Fields to Create Different Types -We can also define structs that look similar to tuples, called *tuple structs*, -that have the added meaning the struct name provides, but don’t have names -associated with their fields, just the types of the fields. Tuple structs are -useful when you want to give the whole tuple a name and make the tuple be a -different type than other tuples, but naming each field as in a regular struct -would be verbose or redundant. +We can also define structs that look similar to tuples (which were discussed in +Chapter 3), called *tuple structs*, that have the added meaning the struct name +provides, but don’t have names associated with their fields; rather, they just +have the types of the fields. Tuple structs are useful when you want to give +the whole tuple a name and make the tuple be a different type than other +tuples, but naming each field as in a regular struct would be verbose or +redundant. To define a tuple struct you start with the `struct` keyword and the struct name followed by the types in the tuple. For example, here are definitions and @@ -200,9 +201,9 @@ instances of different tuple structs. Each struct we define is its own type, even though the fields within the struct have the same types. For example, a function that takes a parameter of type `Color` cannot take a `Point` as an argument, even though both types are made up of three `i32` values. Otherwise, -tuple struct instances behave like tuples, which we covered in Chapter 3: you -can destructure them into their individual pieces, you can use a `.` followed -by the index to access an individual value, and so on. +tuple struct instances behave like tuples: you can destructure them into their +individual pieces and you can use a `.` followed by the index to access an +individual value, and so on. ### Unit-Like Structs without Any Fields @@ -210,7 +211,7 @@ We can also define structs that don’t have any fields! These are called *unit-like structs* since they behave similarly to `()`, the unit type. Unit-like structs can be useful in situations such as when you need to implement a trait on some type, but you don’t have any data that you want to -store in the type itself. We’ll be discussing traits in Chapter 10. +store in the type itself. We’ll discuss traits in Chapter 10. PROD: START BOX @@ -222,7 +223,7 @@ we want instances of this struct to own all of its data and for that data to be valid for as long as the entire struct is valid. It’s possible for structs to store references to data owned by something else, -but to do so requires the use of *lifetimes*, a Rust feature that is discussed +but to do so requires the use of *lifetimes*, a Rust feature that we’ll discuss in Chapter 10. Lifetimes ensure that the data referenced by a struct is valid for as long as the struct is. Let’s say you try to store a reference in a struct without specifying lifetimes, like this: @@ -263,9 +264,9 @@ error[E0106]: missing lifetime specifier | ^ expected lifetime parameter ``` -We’ll discuss how to fix these errors so you can store references in structs in -Chapter 10, but for now, we’ll fix errors like these using owned types like -`String` instead of references like `&str`. +In Chapter 10, we’ll discuss how to fix these errors so you can store +references in structs, but for now, we’ll fix errors like these using owned +types like `String` instead of references like `&str`. PROD: END BOX @@ -314,7 +315,7 @@ calling the `area` function with each dimension, we can do better. The width and the height are related to each other because together they describe one rectangle. -The issue with this method is evident in the signature of `area`: +The issue with this code is evident in the signature of `area`: ``` fn area(width: u32, height: u32) -> u32 { @@ -324,9 +325,8 @@ The `area` function is supposed to calculate the area of one rectangle, but the function we wrote has two parameters. The parameters are related, but that’s not expressed anywhere in our program. It would be more readable and more manageable to group width and height together. We’ve already discussed one way -we might do that in the Grouping Values into Tuples section of Chapter 3 on -page XX: by using tuples. Listing 5-9 shows another version of our program that -uses tuples: +we might do that in the “Grouping Values into Tuples” section of Chapter 3: by +using tuples. Listing 5-9 shows another version of our program that uses tuples: Filename: src/main.rs @@ -403,18 +403,17 @@ using `rect1`, which is the reason we use the `&` in the function signature and where we call the function. The `area` function accesses the `width` and `height` fields of the `Rectangle` -instance. Our function signature for `area` now indicates exactly what we mean: -calculate the area of a `Rectangle` using its `width` and `height` fields. This -conveys that the width and height are related to each other, and gives +instance. Our function signature for `area` now says exactly what we mean: +calculate the area of a `Rectangle`, using its `width` and `height` fields. +This conveys that the width and height are related to each other, and gives descriptive names to the values rather than using the tuple index values of `0` -and `1`—a win for clarity. +and `1`. This is a win for clarity. ### Adding Useful Functionality with Derived Traits -It would be helpful to be able to print out an instance of the `Rectangle` -while we’re debugging our program in order to see the values for all its -fields. Listing 5-11 uses the `println!` macro as we have been in earlier -chapters: +It’d be nice to be able to print out an instance of our `Rectangle` while we’re +debugging our program and see the values for all its fields. Listing 5-11 tries +the `println!` macro as we have used it in Chapters 2, 3, and 4: Filename: src/main.rs @@ -445,14 +444,14 @@ direct end user consumption. The primitive types we’ve seen so far implement `Display` by default, because there’s only one way you’d want to show a `1` or any other primitive type to a user. But with structs, the way `println!` should format the output is less clear because there are more display possibilities: -do you want commas or not? Do you want to print the curly braces? Should all +do you want commas or not? Do you want to print the curly brackets? Should all the fields be shown? Due to this ambiguity, Rust doesn’t try to guess what we want and structs don’t have a provided implementation of `Display`. If we continue reading the errors, we’ll find this helpful note: ``` -note: `Rectangle` cannot be formatted with the default formatter; try using +`Rectangle` cannot be formatted with the default formatter; try using `:?` instead if you are using a format string ``` @@ -465,13 +464,13 @@ its value while we’re debugging our code. Run the code with this change. Drat! We still get an error: ``` -error: the trait bound `Rectangle: std::fmt::Debug` is not satisfied +error[E0277]: the trait bound `Rectangle: std::fmt::Debug` is not satisfied ``` But again, the compiler gives us a helpful note: ``` -note: `Rectangle` cannot be formatted using `:?`; if it is defined in your +`Rectangle` cannot be formatted using `:?`; if it is defined in your crate, add `#[derive(Debug)]` or manually implement it ``` @@ -575,7 +574,7 @@ Listing 5-13: Defining an `area` method on the `Rectangle` struct To define the function within the context of `Rectangle`, we start an `impl` (*implementation*) block. Then we move the `area` function within the `impl` -curly braces and change the first (and in this case, only) parameter to be +curly brackets and change the first (and in this case, only) parameter to be `self` in the signature and everywhere within the body. In `main` where we called the `area` function and passed `rect1` as an argument, we can instead use *method syntax* to call the `area` method on our `Rectangle` instance. @@ -631,9 +630,9 @@ p1.distance(&p2); The first one looks much cleaner. This automatic referencing behavior works because methods have a clear receiver—the type of `self`. Given the receiver and name of a method, Rust can figure out definitively whether the method is -reading (`&self`), mutating (`&mut self`), or consuming (`self`). The fact -that Rust makes borrowing implicit for method receivers is a big part of -making ownership ergonomic in practice. +reading (`&self`), mutating (`&mut self`), or consuming (`self`). The fact that +Rust makes borrowing implicit for method receivers is a big part of making +ownership ergonomic in practice. PROD: END BOX diff --git a/src/doc/book/second-edition/nostarch/chapter06.md b/src/doc/book/second-edition/nostarch/chapter06.md index b553251a61..b3c4eb223e 100644 --- a/src/doc/book/second-edition/nostarch/chapter06.md +++ b/src/doc/book/second-edition/nostarch/chapter06.md @@ -37,7 +37,7 @@ We can express this concept in code by defining an `IpAddrKind` enumeration and listing the possible kinds an IP address can be, `V4` and `V6`. These are known as the *variants* of the enum: -```rust +``` enum IpAddrKind { V4, V6, @@ -50,7 +50,7 @@ enum IpAddrKind { We can create instances of each of the two variants of `IpAddrKind` like this: -```rust +``` let four = IpAddrKind::V4; let six = IpAddrKind::V6; ``` @@ -61,13 +61,13 @@ both values `IpAddrKind::V4` and `IpAddrKind::V6` are of the same type: `IpAddrKind`. We can then, for instance, define a function that takes any `IpAddrKind`: -```rust +``` fn route(ip_type: IpAddrKind) { } ``` And we can call this function with either variant: -```rust +``` route(IpAddrKind::V4); route(IpAddrKind::V6); ``` @@ -77,7 +77,7 @@ at the moment we don’t have a way to store the actual IP address *data*; we only know what *kind* it is. Given that you just learned about structs in Chapter 5, you might tackle this problem as shown in Listing 6-1: -```rust +``` enum IpAddrKind { V4, V6, @@ -99,10 +99,8 @@ let loopback = IpAddr { }; ``` - Listing 6-1: Storing the data and `IpAddrKind` variant of an IP address using a `struct` - Here, we’ve defined a struct `IpAddr` that has two fields: a `kind` field that is of type `IpAddrKind` (the enum we defined previously) and an `address` field @@ -113,12 +111,12 @@ the value `IpAddrKind::V4` as its `kind` with associated address data of it. We’ve used a struct to bundle the `kind` and `address` values together, so now the variant is associated with the value. -We can represent the same concept in a more concise way using just an enum -rather than an enum as part of a struct by putting data directly into each enum +We can represent the same concept in a more concise way using just an enum, +rather than an enum inside a struct, by putting data directly into each enum variant. This new definition of the `IpAddr` enum says that both `V4` and `V6` variants will have associated `String` values: -```rust +``` enum IpAddr { V4(String), V6(String), @@ -139,7 +137,7 @@ between 0 and 255. If we wanted to store `V4` addresses as four `u8` values but still express `V6` addresses as one `String` value, we wouldn’t be able to with a struct. Enums handle this case with ease: -```rust +``` enum IpAddr { V4(u8, u8, u8, u8), V6(String), @@ -159,7 +157,7 @@ variants that we’ve defined and used, but it embeds the address data inside th variants in the form of two different structs, which are defined differently for each variant: -```rust +``` struct Ipv4Addr { // details elided } @@ -182,12 +180,12 @@ what you might come up with. Note that even though the standard library contains a definition for `IpAddr`, we can still create and use our own definition without conflict because we haven’t brought the standard library’s definition into our scope. We’ll talk -more about importing types in Chapter 7. +more about bringing types into scope in Chapter 7. Let’s look at another example of an enum in Listing 6-2: this one has a wide variety of types embedded in its variants: -```rust +``` enum Message { Quit, Move { x: i32, y: i32 }, @@ -196,17 +194,15 @@ enum Message { } ``` - Listing 6-2: A `Message` enum whose variants each store different amounts and types of values - This enum has four variants with different types: * `Quit` has no data associated with it at all. * `Move` includes an anonymous struct inside it. * `Write` includes a single `String`. -* `ChangeColor` includes three `i32`s. +* `ChangeColor` includes three `i32` values. Defining an enum with variants like the ones in Listing 6-2 is similar to defining different kinds of struct definitions except the enum doesn’t use the @@ -214,7 +210,7 @@ defining different kinds of struct definitions except the enum doesn’t use the type. The following structs could hold the same data that the preceding enum variants hold: -```rust +``` struct QuitMessage; // unit struct struct MoveMessage { x: i32, @@ -233,7 +229,7 @@ There is one more similarity between enums and structs: just as we’re able to define methods on structs using `impl`, we’re also able to define methods on enums. Here’s a method named `call` that we could define on our `Message` enum: -```rust +``` impl Message { fn call(&self) { // method body would be defined here @@ -246,8 +242,8 @@ m.call(); The body of the method would use `self` to get the value that we called the method on. In this example, we’ve created a variable `m` that has the value -`Message::Write("hello")`, and that is what `self` will be in the body of the -`call` method when `m.call()` runs. +`Message::Write(String::from("hello"))`, and that is what `self` will be in the +body of the `call` method when `m.call()` runs. Let’s look at another enum in the standard library that is very common and useful: `Option`. @@ -294,7 +290,7 @@ implementation. As such, Rust does not have nulls, but it does have an enum that can encode the concept of a value being present or absent. This enum is `Option`, and it is defined by the standard library as follows: -```rust +``` enum Option { Some(T), None, @@ -302,8 +298,8 @@ enum Option { ``` The `Option` enum is so useful that it’s even included in the prelude; you -don’t need to import it explicitly. In addition, so are its variants: you can -use `Some` and `None` directly without prefixing them with `Option::`. +don’t need to bring it into scope explicitly. In addition, so are its variants: +you can use `Some` and `None` directly without prefixing them with `Option::`. `Option` is still just a regular enum, and `Some(T)` and `None` are still variants of type `Option`. @@ -313,7 +309,7 @@ For now, all you need to know is that `` means the `Some` variant of the `Option` enum can hold one piece of data of any type. Here are some examples of using `Option` values to hold number types and string types: -```rust +``` let some_number = Some(5); let some_string = Some("a string"); @@ -332,9 +328,9 @@ the same thing as null: we don’t have a valid value. So why is having In short, because `Option` and `T` (where `T` can be any type) are different types, the compiler won’t let us use an `Option` value as if it was definitely a valid value. For example, this code won’t compile because it’s -trying to compare an `Option` to an `i8`: +trying to add an `i8` to an `Option`: -```rust,ignore +``` let x: i8 = 5; let y: Option = Some(5); @@ -343,18 +339,18 @@ let sum = x + y; If we run this code, we get an error message like this: -```text +``` error[E0277]: the trait bound `i8: std::ops::Add>` is not satisfied --> | -7 | let sum = x + y; - | ^^^^^ +5 | let sum = x + y; + | ^ no implementation for `i8 + std::option::Option` | ``` Intense! In effect, this error message means that Rust doesn’t understand how -to add an `Option` and an `i8`, because they’re different types. When we +to add an `i8` and an `Option`, because they’re different types. When we have a value of a type like `i8` in Rust, the compiler will ensure that we always have a valid value. We can proceed confidently without having to check for null before using that value. Only when we have an `Option` (or @@ -396,9 +392,9 @@ value. Rust has an extremely powerful control-flow operator called `match` that allows us to compare a value against a series of patterns and then execute code based on which pattern matches. Patterns can be made up of literal values, variable -names, wildcards, and many other things; Chapter 18 will be about all the -different kinds of patterns and what they do. The power of `match` comes from -the expressiveness of the patterns and the compiler checks that make sure all +names, wildcards, and many other things; Chapter 18 covers all the different +kinds of patterns and what they do. The power of `match` comes from the +expressiveness of the patterns and the compiler checks that make sure all possible cases are handled. Think of a `match` expression kind of like a coin sorting machine: coins slide @@ -412,7 +408,7 @@ can write a function that can take an unknown United States coin and, in a similar way as the counting machine, determine which coin it is and return its value in cents, as shown here in Listing 6-3: -```rust +``` enum Coin { Penny, Nickel, @@ -420,7 +416,7 @@ enum Coin { Quarter, } -fn value_in_cents(coin: Coin) -> i32 { +fn value_in_cents(coin: Coin) -> u32 { match coin { Coin::Penny => 1, Coin::Nickel => 5, @@ -430,10 +426,8 @@ fn value_in_cents(coin: Coin) -> i32 { } ``` - Listing 6-3: An enum and a `match` expression that has the variants of the enum as its patterns. - Let’s break down the `match` in the `value_in_cents` function. First, we list the `match` keyword followed by an expression, which in this case is the value @@ -457,14 +451,14 @@ The code associated with each arm is an expression, and the resulting value of the expression in the matching arm is the value that gets returned for the entire `match` expression. -Curly braces typically aren’t used if the match arm code is short, as it is in -Listing 6-3 where each arm just returns a value. If you want to run multiple -lines of code in a match arm, you can use curly braces. For example, the +Curly brackets typically aren’t used if the match arm code is short, as it is +in Listing 6-3 where each arm just returns a value. If you want to run multiple +lines of code in a match arm, you can use curly brackets. For example, the following code would print out “Lucky penny!” every time the method was called with a `Coin::Penny` but would still return the last value of the block, `1`: -```rust -fn value_in_cents(coin: Coin) -> i32 { +``` +fn value_in_cents(coin: Coin) -> u32 { match coin { Coin::Penny => { println!("Lucky penny!"); @@ -484,13 +478,13 @@ values that match the pattern. This is how we can extract values out of enum variants. As an example, let’s change one of our enum variants to hold data inside it. -From 1999 through 2008, the United States printed quarters with different +From 1999 through 2008, the United States minted quarters with different designs for each of the 50 states on one side. No other coins got state designs, so only quarters have this extra value. We can add this information to -our `enum` by changing the `Quarter` variant to include a `State` value stored +our `enum` by changing the `Quarter` variant to include a `UsState` value stored inside it, which we’ve done here in Listing 6-4: -```rust +``` #[derive(Debug)] // So we can inspect the state in a minute enum UsState { Alabama, @@ -506,10 +500,8 @@ enum Coin { } ``` - Listing 6-4: A `Coin` enum where the `Quarter` variant also holds a `UsState` value - Let’s imagine that a friend of ours is trying to collect all 50 state quarters. While we sort our loose change by coin type, we’ll also call out the name of @@ -521,8 +513,8 @@ pattern that matches values of the variant `Coin::Quarter`. When a `Coin::Quarter` matches, the `state` variable will bind to the value of that quarter’s state. Then we can use `state` in the code for that arm, like so: -```rust -fn value_in_cents(coin: Coin) -> i32 { +``` +fn value_in_cents(coin: Coin) -> u32 { match coin { Coin::Penny => 1, Coin::Nickel => 5, @@ -558,7 +550,7 @@ operations. This function is very easy to write, thanks to `match`, and will look like Listing 6-5: -```rust +``` fn plus_one(x: Option) -> Option { match x { None => None, @@ -571,28 +563,26 @@ let six = plus_one(five); let none = plus_one(None); ``` - Listing 6-5: A function that uses a `match` expression on an `Option` - #### Matching `Some(T)` Let’s examine the first execution of `plus_one` in more detail. When we call -`plus_one(five)` w, the variable `x` in the body of `plus_one` will have the +`plus_one(five)`, the variable `x` in the body of `plus_one` will have the value `Some(5)`. We then compare that against each match arm. -```rust,ignore +``` None => None, ``` -The `Some(5)` value doesn’t match the pattern `None` u, so we continue to the +The `Some(5)` value doesn’t match the pattern `None`, so we continue to the next arm. -```rust,ignore +``` Some(i) => Some(i + 1), ``` -Does `Some(5)` match `Some(i)` v? Why yes it does! We have the same variant. +Does `Some(5)` match `Some(i)`? Well yes it does! We have the same variant. The `i` binds to the value contained in `Some`, so `i` takes the value `5`. The code in the match arm is then executed, so we add one to the value of `i` and create a new `Some` value with our total `6` inside. @@ -600,9 +590,9 @@ create a new `Some` value with our total `6` inside. #### Matching `None` Now let’s consider the second call of `plus_one` in Listing 6-5 where `x` is -`None` x. We enter the `match` and compare to the first arm u. +`None`. We enter the `match` and compare to the first arm. -```rust,ignore +``` None => None, ``` @@ -621,7 +611,7 @@ consistently a user favorite. There’s one other aspect of `match` we need to discuss. Consider this version of our `plus_one` function: -```rust,ignore +``` fn plus_one(x: Option) -> Option { match x { Some(i) => Some(i + 1), @@ -633,7 +623,7 @@ We didn’t handle the `None` case, so this code will cause a bug. Luckily, it a bug Rust knows how to catch. If we try to compile this code, we’ll get this error: -```text +``` error[E0004]: non-exhaustive patterns: `None` not covered --> | @@ -656,7 +646,7 @@ we only care about the values 1, 3, 5, and 7, we don’t want to have to list ou 0, 2, 4, 6, 8, 9 all the way up to 255. Fortunately, we don’t have to: we can use the special pattern `_` instead: -```rust +``` let some_u8_value = 0u8; match some_u8_value { 1 => println!("one"), @@ -683,7 +673,7 @@ handle values that match one pattern and ignore the rest. Consider the program in Listing 6-6 that matches on an `Option` value but only wants to execute code if the value is three: -```rust +``` let some_u8_value = Some(0u8); match some_u8_value { Some(3) => println!("three"), @@ -691,10 +681,8 @@ match some_u8_value { } ``` - Listing 6-6: A `match` that only cares about executing code when the value is `Some(3)` - We want to do something with the `Some(3)` match but do nothing with any other `Some` value or the `None` value. To satisfy the `match` expression, we @@ -704,7 +692,7 @@ boilerplate code to add. Instead, we could write this in a shorter way using `if let`. The following code behaves the same as the `match` in Listing 6-6: -```rust +``` if let Some(3) = some_u8_value { println!("three"); } @@ -731,7 +719,7 @@ We can include an `else` with an `if let`. The block of code that goes with the announcing the state of the quarters, we could do that with a `match` expression like this: -```rust +``` let mut count = 0; match coin { Coin::Quarter(state) => println!("State quarter from {:?}!", state), @@ -741,7 +729,7 @@ match coin { Or we could use an `if let` and `else` expression like this: -```rust +``` let mut count = 0; if let Coin::Quarter(state) = coin { println!("State quarter from {:?}!", state); @@ -769,4 +757,3 @@ function expects. In order to provide a well-organized API to your users that is straightforward to use and only exposes exactly what your users will need, let’s now turn to Rust’s modules. - diff --git a/src/doc/book/second-edition/nostarch/chapter07.md b/src/doc/book/second-edition/nostarch/chapter07.md index 5392b4cecc..3a41aec608 100644 --- a/src/doc/book/second-edition/nostarch/chapter07.md +++ b/src/doc/book/second-edition/nostarch/chapter07.md @@ -17,7 +17,7 @@ you can choose whether those definitions are visible outside their module (public) or not (private). Here’s an overview of how modules work: * The `mod` keyword declares a new module. Code within the module appears - either immediately following this declaration within curly braces or in + either immediately following this declaration within curly brackets or in another file. * By default, functions, types, constants, and modules are private. The `pub` keyword makes an item public and therefore visible outside its namespace. @@ -31,8 +31,8 @@ We’ll look at each of these parts to see how they fit into the whole. We’ll start our module example by making a new project with Cargo, but instead of creating a binary crate, we’ll make a library crate: a project that other people can pull into their projects as a dependency. For example, the `rand` -crate in Chapter 2 is a library crate that we used as a dependency in the -guessing game project. +crate discussed in Chapter 2 is a library crate that we used as a dependency in +the guessing game project. We’ll create a skeleton of a library that provides some general networking functionality; we’ll concentrate on the organization of the modules and @@ -57,15 +57,16 @@ Filename: src/lib.rs mod tests { #[test] fn it_works() { + assert_eq!(2 + 2, 4); } } ``` -Cargo creates an empty test to help us get our library started, rather than the -“Hello, world!” binary that we get when we use the `--bin` option. We’ll look -at the `#[]` and `mod tests` syntax in the “Using `super` to Access a Parent -Module” section later in this chapter, but for now, leave this code at the -bottom of *src/lib.rs*. +Cargo creates an example test to help us get our library started, rather than +the “Hello, world!” binary that we get when we use the `--bin` option. We’ll +look at the `#[]` and `mod tests` syntax in the “Using `super` to Access a +Parent Module” section later in this chapter, but for now, leave this code at +the bottom of *src/lib.rs*. Because we don’t have a *src/main.rs* file, there’s nothing for Cargo to execute with the `cargo run` command. Therefore, we’ll use the `cargo build` @@ -91,9 +92,9 @@ mod network { ``` After the `mod` keyword, we put the name of the module, `network`, and then a -block of code in curly braces. Everything inside this block is inside the +block of code in curly brackets. Everything inside this block is inside the namespace `network`. In this case, we have a single function, `connect`. If we -wanted to call this function from a script outside the `network` module, we +wanted to call this function from code outside the `network` module, we would need to specify the module and use the namespace syntax `::`, like so: `network::connect()` rather than just `connect()`. @@ -224,13 +225,13 @@ communicator If these modules had many functions, and those functions were becoming lengthy, it would be difficult to scroll through this file to find the code we wanted to -work with. Because the functions are nested inside one or more mod blocks, the -lines of code inside the functions will start getting lengthy as well. These -would be good reasons to separate the `client`, `network`, and `server` modules -from *src/lib.rs* and place them into their own files. +work with. Because the functions are nested inside one or more `mod` blocks, +the lines of code inside the functions will start getting lengthy as well. +These would be good reasons to separate the `client`, `network`, and `server` +modules from *src/lib.rs* and place them into their own files. -First, replace the `client` module code with only the declaration of the `client` -module, so that your *src/lib.rs* looks like the following: +First, replace the `client` module code with only the declaration of the +`client` module, so that your *src/lib.rs* looks like the following: Filename: src/lib.rs @@ -288,29 +289,33 @@ a library crate rather than a binary crate: ``` $ cargo build Compiling communicator v0.1.0 (file:///projects/communicator) - -warning: function is never used: `connect`, #[warn(dead_code)] on by default +warning: function is never used: `connect` --> src/client.rs:1:1 | -1 | fn connect() { - | ^ +1 | / fn connect() { +2 | | } + | |_^ + | + = note: #[warn(dead_code)] on by default -warning: function is never used: `connect`, #[warn(dead_code)] on by default +warning: function is never used: `connect` --> src/lib.rs:4:5 | -4 | fn connect() { - | ^ +4 | / fn connect() { +5 | | } + | |_____^ -warning: function is never used: `connect`, #[warn(dead_code)] on by default +warning: function is never used: `connect` --> src/lib.rs:8:9 | -8 | fn connect() { - | ^ +8 | / fn connect() { +9 | | } + | |_________^ ``` These warnings tell us that we have functions that are never used. Don’t worry -about these warnings for now; we’ll address them in the “Controlling Visibility -with `pub`” section later in this chapter. The good news is that they’re just +about these warnings for now; we’ll address them later in this chapter in the +“Controlling Visibility with `pub`” section. The good news is that they’re just warnings; our project built successfully! Next, let’s extract the `network` module into its own file using the same @@ -378,7 +383,7 @@ error: cannot declare a new module at this location 4 | mod server; | ^^^^^^ | -note: maybe move this module `network` to its own directory via `network/mod.rs` +note: maybe move this module `src/network.rs` to its own directory via `src/network/mod.rs` --> src/network.rs:4:5 | 4 | mod server; @@ -410,7 +415,7 @@ previously, we can do what the note suggests: 1. Make a new *directory* named *network*, the parent module’s name. 2. Move the *src/network.rs* file into the new *network* directory, and - rename *src/network/mod.rs*. + rename it to *src/network/mod.rs*. 3. Move the submodule file *src/server.rs* into the *network* directory. Here are commands to carry out these steps: @@ -512,23 +517,28 @@ able to build our project, but we still get warning messages about the not being used: ``` -warning: function is never used: `connect`, #[warn(dead_code)] on by default -src/client.rs:1:1 +warning: function is never used: `connect` + --> src/client.rs:1:1 + | +1 | / fn connect() { +2 | | } + | |_^ | -1 | fn connect() { - | ^ + = note: #[warn(dead_code)] on by default -warning: function is never used: `connect`, #[warn(dead_code)] on by default +warning: function is never used: `connect` --> src/network/mod.rs:1:1 | -1 | fn connect() { - | ^ +1 | / fn connect() { +2 | | } + | |_^ -warning: function is never used: `connect`, #[warn(dead_code)] on by default +warning: function is never used: `connect` --> src/network/server.rs:1:1 | -1 | fn connect() { - | ^ +1 | / fn connect() { +2 | | } + | |_^ ``` So why are we receiving these warnings? After all, we’re building a library @@ -575,7 +585,7 @@ the `client` module. However, invoking `cargo build` will now give us an error after the warnings: ``` -error: module `client` is private +error[E0603]: module `client` is private --> src/main.rs:4:5 | 4 | communicator::client::connect(); @@ -595,17 +605,17 @@ will our call to that function from our binary crate be allowed, but the warning that the function is unused will go away. Marking a function as public lets Rust know that the function will be used by code outside of our program. Rust considers the theoretical external usage that’s now possible as the -function “being used.” Thus, when something is marked public, Rust will not -require that it be used in our program and will stop warning that the item is -unused. +function “being used.” Thus, when a function is marked public, Rust will not +require that it be used in our program and will stop warning that the function +is unused. ### Making a Function Public -To tell Rust to make something public, we add the `pub` keyword to the start of -the declaration of the item we want to make public. We’ll focus on fixing the -warning that indicates `client::connect` has gone unused for now, as well as -the `` module `client` is private `` error from our binary crate. Modify -*src/lib.rs* to make the `client` module public, like so: +To tell Rust to make a function public, we add the `pub` keyword to the start +of the declaration. We’ll focus on fixing the warning that indicates +`client::connect` has gone unused for now, as well as the `` module `client` is +private `` error from our binary crate. Modify *src/lib.rs* to make the +`client` module public, like so: Filename: src/lib.rs @@ -618,7 +628,7 @@ mod network; The `pub` keyword is placed right before `mod`. Let’s try building again: ``` -error: function `connect` is private +error[E0603]: function `connect` is private --> src/main.rs:4:5 | 4 | communicator::client::connect(); @@ -639,17 +649,21 @@ pub fn connect() { Now run `cargo build` again: ``` -warning: function is never used: `connect`, #[warn(dead_code)] on by default +warning: function is never used: `connect` --> src/network/mod.rs:1:1 | -1 | fn connect() { - | ^ +1 | / fn connect() { +2 | | } + | |_^ + | + = note: #[warn(dead_code)] on by default -warning: function is never used: `connect`, #[warn(dead_code)] on by default +warning: function is never used: `connect` --> src/network/server.rs:1:1 | -1 | fn connect() { - | ^ +1 | / fn connect() { +2 | | } + | |_^ ``` The code compiled, and the warning about `client::connect` not being used is @@ -678,17 +692,21 @@ mod server; Then compile the code: ``` -warning: function is never used: `connect`, #[warn(dead_code)] on by default +warning: function is never used: `connect` --> src/network/mod.rs:1:1 | -1 | pub fn connect() { - | ^ +1 | / pub fn connect() { +2 | | } + | |_^ + | + = note: #[warn(dead_code)] on by default -warning: function is never used: `connect`, #[warn(dead_code)] on by default +warning: function is never used: `connect` --> src/network/server.rs:1:1 | -1 | fn connect() { - | ^ +1 | / fn connect() { +2 | | } + | |_^ ``` Hmmm, we’re still getting an unused function warning, even though @@ -709,11 +727,14 @@ pub mod network; Now when we compile, that warning is gone: ``` -warning: function is never used: `connect`, #[warn(dead_code)] on by default +warning: function is never used: `connect` --> src/network/server.rs:1:1 | -1 | fn connect() { - | ^ +1 | / fn connect() { +2 | | } + | |_^ + | + = note: #[warn(dead_code)] on by default ``` Only one warning is left! Try to fix this one on your own! @@ -801,7 +822,7 @@ Feel free to design more experiments and try them out! Next, let’s talk about bringing items into scope with the `use` keyword. -## Importing Names +## Referring to Names in Different Modules We’ve covered how to call functions defined within a module using the module name as part of the call, as in the call to the `nested_modules` function shown @@ -828,7 +849,7 @@ Listing 7-6: Calling a function by fully specifying its enclosing module’s pat As you can see, referring to the fully qualified name can get quite lengthy. Fortunately, Rust has a keyword to make these calls more concise. -### Concise Imports with `use` +### Bringing Names into Scope with the `use` Keyword Rust’s `use` keyword shortens lengthy function calls by bringing the modules of the function you want to call into scope. Here’s an example of bringing the @@ -882,10 +903,10 @@ fn main() { Doing so allows us to exclude all the modules and reference the function directly. -Because enums also form a sort of namespace like modules, we can import an -enum’s variants with `use` as well. For any kind of `use` statement, if you’re -importing multiple items from one namespace, you can list them using curly -braces and commas in the last position, like so: +Because enums also form a sort of namespace like modules, we can bring an +enum’s variants into scope with `use` as well. For any kind of `use` statement, +if you’re bringing multiple items from one namespace into scope, you can list +them using curly brackets and commas in the last position, like so: ``` enum TrafficLight { @@ -906,10 +927,11 @@ fn main() { We’re still specifying the `TrafficLight` namespace for the `Green` variant because we didn’t include `Green` in the `use` statement. -### Glob Imports with `*` +### Bringing All Names into Scope with a Glob -To import all the items in a namespace at once, we can use the `*` syntax. For -example: +To bring all the items in a namespace into scope at once, we can use the `*` +syntax, which is called the *glob operator*. This example brings all the +variants of an enum into scope without having to list each specifically: ``` enum TrafficLight { @@ -927,7 +949,7 @@ fn main() { } ``` -The `*` is called a *glob*, and it will import all items visible inside the +The `*` will bring into scope all the visible items in the `TrafficLight` namespace. You should use globs sparingly: they are convenient, but this might also pull in more items than you expected and cause naming conflicts. @@ -948,6 +970,7 @@ pub mod network; mod tests { #[test] fn it_works() { + assert_eq!(2 + 2, 4); } } ``` @@ -968,7 +991,7 @@ communicator Tests are for exercising the code within our library, so let’s try to call our `client::connect` function from this `it_works` function, even though we won’t -be checking any functionality right now: +be checking any functionality right now. This won't work yet: Filename: src/lib.rs @@ -991,7 +1014,7 @@ error[E0433]: failed to resolve. Use of undeclared type or module `client` --> src/lib.rs:9:9 | 9 | client::connect(); - | ^^^^^^^^^^^^^^^ Use of undeclared type or module `client` + | ^^^^^^ Use of undeclared type or module `client` ``` The compilation failed, but why? We don’t need to place `communicator::` in diff --git a/src/doc/book/second-edition/nostarch/chapter08.md b/src/doc/book/second-edition/nostarch/chapter08.md index 86a0ddd09f..24772717fd 100644 --- a/src/doc/book/second-edition/nostarch/chapter08.md +++ b/src/doc/book/second-edition/nostarch/chapter08.md @@ -25,7 +25,7 @@ see the documentation at *https://doc.rust-lang.org/stable/std/collections/*. We’ll discuss how to create and update vectors, strings, and hash maps, as well as what makes each special. -## Vectors +## Vectors Store Lists of Values The first collection type we’ll look at is `Vec`, also known as a *vector*. Vectors allow us to store more than one value in a single data structure that @@ -39,7 +39,7 @@ cart. To create a new, empty vector, we can call the `Vec::new` function as shown in Listing 8-1: -```rust +``` let v: Vec = Vec::new(); ``` @@ -61,7 +61,7 @@ common to create a `Vec` that has initial values, and Rust provides the values we give it. Listing 8-2 creates a new `Vec` that holds the values `1`, `2`, and `3`: -```rust +``` let v = vec![1, 2, 3]; ``` @@ -76,7 +76,7 @@ to modify a vector. To create a vector and then add elements to it, we can use the `push` method as shown in Listing 8-3: -```rust +``` let mut v = Vec::new(); v.push(5); @@ -97,7 +97,7 @@ data, so we don’t need the `Vec` annotation. Like any other `struct`, a vector will be freed when it goes out of scope, as annotated in Listing 8-4: -```rust +``` { let v = vec![1, 2, 3, 4]; @@ -123,7 +123,7 @@ values that are returned from these functions for extra clarity. Listing 8-5 shows both methods of accessing a value in a vector either with indexing syntax or the `get` method: -```rust +``` let v = vec![1, 2, 3, 4, 5]; let third: &i32 = &v[2]; @@ -141,11 +141,11 @@ argument, which gives us an `Option<&T>`. The reason Rust has two ways to reference an element is so you can choose how the program behaves when you try to use an index value that the vector doesn’t -have an element for. As an example, what should a program do if it has a vector -that holds five elements and then tries to access an element at index 100, as -shown in Listing 8-6: +have an element for. As an example, let's see what a program will do if it has +a vector that holds five elements and then tries to access an element at index +100, as shown in Listing 8-6: -```rust,should_panic +``` let v = vec![1, 2, 3, 4, 5]; let does_not_exist = &v[100]; @@ -167,7 +167,7 @@ Your code will then have logic to handle having either `Some(&element)` or `None`, as discussed in Chapter 6. For example, the index could be coming from a person entering a number. If they accidentally enter a number that’s too large and the program gets a `None` value, you could tell the user how many -items are in the current `Vec` and give them another chance to enter a valid +items are in the current vector and give them another chance to enter a valid value. That would be more user-friendly than crashing the program due to a typo! #### Invalid References @@ -177,9 +177,10 @@ ownership and borrowing rules (covered in Chapter 4) to ensure this reference and any other references to the contents of the vector remain valid. Recall the rule that states we can’t have mutable and immutable references in the same scope. That rule applies in Listing 8-7 where we hold an immutable reference to -the first element in a vector and try to add an element to the end: +the first element in a vector and try to add an element to the end, which won't +work: -```rust,ignore +``` let mut v = vec![1, 2, 3, 4, 5]; let first = &v[0]; @@ -192,7 +193,7 @@ to an item Compiling this code will result in this error: -```text +``` error[E0502]: cannot borrow `v` as mutable because it is also borrowed as immutable | @@ -219,12 +220,12 @@ rules prevent programs from ending up in that situation. ### Iterating Over the Values in a Vector -If we want to access each element in a vector in turn, rather than using -indexing to access one element, we can iterate through all of the elements. -Listing 8-8 shows how to use a `for` loop to get immutable references to each -element in a vector of `i32` values and print them out: +If we want to access each element in a vector in turn, we can iterate through +all of the elements rather than use indexes to access one at a time. Listing +8-8 shows how to use a `for` loop to get immutable references to each element +in a vector of `i32` values and print them out: -```rust +``` let v = vec![100, 32, 57]; for i in &v { println!("{}", i); @@ -235,10 +236,10 @@ Listing 8-8: Printing each element in a vector by iterating over the elements using a `for` loop We can also iterate over mutable references to each element in a mutable vector -if we want to make changes to all the elements. The `for` loop in Listing 8-9 +in order to make changes to all the elements. The `for` loop in Listing 8-9 will add `50` to each element: -```rust +``` let mut v = vec![100, 32, 57]; for i in &mut v { *i += 50; @@ -247,9 +248,9 @@ for i in &mut v { Listing 8-9: Iterating over mutable references to elements in a vector -In order to change the value that the mutable reference refers to, before we -can use the `+=` operator with `i`, we have to use the dereference operator -(`*`) to get to the value. +To change the value that the mutable reference refers to, we have to use the +dereference operator (`*`) to get to the value in `i` before we can use the +`+=` operator . ### Using an Enum to Store Multiple Types @@ -262,11 +263,11 @@ store elements of a different type in a vector, we can define and use an enum! For example, let’s say we want to get values from a row in a spreadsheet where some of the columns in the row contain integers, some floating-point numbers, and some strings. We can define an enum whose variants will hold the different -value types, and then all the enum variants will be considered the same type, +value types, and then all the enum variants will be considered the same type: that of the enum. Then we can create a vector that holds that enum and so, -ultimately, holds different types. We’ve demonstrated this in Listing 8-8: +ultimately, holds different types. We’ve demonstrated this in Listing 8-10: -```rust +``` enum SpreadsheetCell { Int(i32), Float(f64), @@ -280,7 +281,8 @@ let row = vec![ ]; ``` -Listing 8-8: Defining an `enum` to store values of different types in one vector +Listing 8-10: Defining an `enum` to store values of different types in one +vector The reason Rust needs to know what types will be in the vector at compile time is so it knows exactly how much memory on the heap will be needed to store each @@ -291,17 +293,17 @@ operations performed on the elements of the vector. Using an enum plus a `match` expression means that Rust will ensure at compile time that we always handle every possible case, as discussed in Chapter 6. -If you don’t know when you’re writing a program the exhaustive set of types the -program will get at runtime to store in a vector, the enum technique won’t +If you don’t know the exhaustive set of types the program will get at runtime +to store in a vector when you’re writing a program, the enum technique won’t work. Instead, you can use a trait object, which we’ll cover in Chapter 17. Now that we’ve discussed some of the most common ways to use vectors, be sure to review the API documentation for all the many useful methods defined on -`Vec` by the standard library. For example, in addition to `push`, a `pop` +`Vec` by the standard library. For example, in addition to `push`, a `pop` method removes and returns the last element. Let’s move on to the next collection type: `String`! -## Strings +## Strings Store UTF-8 Encoded Text We talked about strings in Chapter 4, but we’ll look at them in more depth now. New Rustaceans commonly get stuck on strings due to a combination of three @@ -346,22 +348,23 @@ them and when each is appropriate. ### Creating a New String -Many of the same operations available with `Vec` are available with `String` as -well, starting with the `new` function to create a string, shown in Listing 8-9: +Many of the same operations available with `Vec` are available with `String` +as well, starting with the `new` function to create a string, shown in Listing +8-11: -```rust +``` let mut s = String::new(); ``` -Listing 8-9: Creating a new, empty `String` +Listing 8-11: Creating a new, empty `String` This line creates a new empty string called `s` that we can then load data into. Often, we’ll have some initial data that we want to start the string with. For that, we use the `to_string` method, which is available on any type -that implements the `Display` trait, which string literals do. Listing 8-10 +that implements the `Display` trait, which string literals do. Listing 8-12 shows two examples: -```rust +``` let data = "initial contents"; let s = data.to_string(); @@ -370,20 +373,20 @@ let s = data.to_string(); let s = "initial contents".to_string(); ``` -Listing 8-10: Using the `to_string` method to create a `String` from a string +Listing 8-12: Using the `to_string` method to create a `String` from a string literal This code creates a string containing `initial contents`. We can also use the function `String::from` to create a `String` from a string -literal. The code in Listing 8-11 is equivalent to the code from Listing 8-10 +literal. The code in Listing 8-13 is equivalent to the code from Listing 8-12 that uses `to_string`: -```rust +``` let s = String::from("initial contents"); ``` -Listing 8-11: Using the `String::from` function to create a `String` from a +Listing 8-13: Using the `String::from` function to create a `String` from a string literal Because strings are used for so many things, we can use many different generic @@ -392,9 +395,9 @@ redundant, but they all have their place! In this case, `String::from` and `to_string` do the same thing, so which you choose is a matter of style. Remember that strings are UTF-8 encoded, so we can include any properly encoded -data in them, as shown in Listing 8-12: +data in them, as shown in Listing 8-14: -```rust +``` let hello = String::from("السلام عليكم"); let hello = String::from("Dobrý den"); let hello = String::from("Hello"); @@ -408,79 +411,80 @@ let hello = String::from("Здравствуйте"); let hello = String::from("Hola"); ``` -Listing 8-12: Storing greetings in different languages in strings +Listing 8-14: Storing greetings in different languages in strings All of these are valid `String` values. ### Updating a String A `String` can grow in size and its contents can change, just like the contents -of a `Vec`, by pushing more data into it. In addition, we can conveniently use -the `+` operator or the `format!` macro to concatenate `String` values together. +of a `Vec`, by pushing more data into it. In addition, we can conveniently +use the `+` operator or the `format!` macro to concatenate `String` values +together. #### Appending to a String with `push_str` and `push` We can grow a `String` by using the `push_str` method to append a string slice, -as shown in Listing 8-13: +as shown in Listing 8-15: -```rust +``` let mut s = String::from("foo"); s.push_str("bar"); ``` -Listing 8-13: Appending a string slice to a `String` using the `push_str` method +Listing 8-15: Appending a string slice to a `String` using the `push_str` method After these two lines, `s` will contain `foobar`. The `push_str` method takes a string slice because we don’t necessarily want to take ownership of the -parameter. For example, the code in Listing 8-14 shows that it would be +parameter. For example, the code in Listing 8-16 shows that it would be unfortunate if we weren’t able to use `s2` after appending its contents to `s1`: -```rust +``` let mut s1 = String::from("foo"); let s2 = "bar"; s1.push_str(&s2); println!("s2 is {}", s2); ``` -Listing 8-14: Using a string slice after appending its contents to a `String` +Listing 8-16: Using a string slice after appending its contents to a `String` If the `push_str` method took ownership of `s2`, we wouldn’t be able to print out its value on the last line. However, this code works as we’d expect! The `push` method takes a single character as a parameter and adds it to the -`String`. Listing 8-15 shows code that adds an l to a `String` using the `push` -method: +`String`. Listing 8-17 shows code that adds the letter l character to a +`String` using the `push` method: -```rust +``` let mut s = String::from("lo"); s.push('l'); ``` -Listing 8-15: Adding one character to a `String` value using `push` +Listing 8-17: Adding one character to a `String` value using `push` As a result of this code, `s` will contain `lol`. #### Concatenation with the `+` Operator or the `format!` Macro Often, we’ll want to combine two existing strings. One way is to use the `+` -operator, as shown in Listing 8-16: +operator, as shown in Listing 8-18: -```rust +``` let s1 = String::from("Hello, "); let s2 = String::from("world!"); let s3 = s1 + &s2; // Note that s1 has been moved here and can no longer be used ``` -Listing 8-16: Using the `+` operator to combine two `String` values into a new +Listing 8-18: Using the `+` operator to combine two `String` values into a new `String` value -As a result of this code, the string `s3` will contain `Hello, world!`. The +The string `s3` will contain `Hello, world!` as a result of this code. The reason `s1` is no longer valid after the addition and the reason we used a reference to `s2` has to do with the signature of the method that gets called when we use the `+` operator. The `+` operator uses the `add` method, whose signature looks something like this: -```rust,ignore +``` fn add(self, s: &str) -> String { ``` @@ -495,16 +499,17 @@ First, `s2` has an `&`, meaning that we’re adding a *reference* of the second string to the first string because of the `s` parameter in the `add` function: we can only add a `&str` to a `String`; we can’t add two `String` values together. But wait - the type of `&s2` is `&String`, not `&str`, as specified -in the second parameter to `add`. Why does Listing 8-16 compile? We are able to -use `&s2` in the call to `add` because the compiler can *coerce* the `&String` -argument into a `&str`. When we call the `add` method, Rust uses something -called a *deref coercion*, which you could think of here as turning `&s2` into -`&s2[..]`. We’ll discuss deref coercion in more depth in Chapter 15. Because -`add` does not take ownership of the `s` parameter, `s2` will still be a valid -`String` after this operation. +in the second parameter to `add`. So why does Listing 8-18 compile? + +The reason we’re able to use `&s2` in the call to `add` is that the compiler +can *coerce* the `&String` argument into a `&str`. When we call the `add` +method, Rust uses a *deref coercion*, which here turns `&s2` into `&s2[..]`. +We’ll discuss deref coercion in more depth in Chapter 15. Because `add` does +not take ownership of the `s` parameter, `s2` will still be a valid `String` +after this operation. Second, we can see in the signature that `add` takes ownership of `self`, -because `self` does *not* have an `&`. This means `s1` in Listing 8-16 will be +because `self` does *not* have an `&`. This means `s1` in Listing 8-18 will be moved into the `add` call and no longer be valid after that. So although `let s3 = s1 + &s2;` looks like it will copy both strings and create a new one, this statement actually takes ownership of `s1`, appends a copy of the contents of @@ -514,7 +519,7 @@ than copying. If we need to concatenate multiple strings, the behavior of `+` gets unwieldy: -```rust +``` let s1 = String::from("tic"); let s2 = String::from("tac"); let s3 = String::from("toe"); @@ -526,7 +531,7 @@ At this point, `s` will be `tic-tac-toe`. With all of the `+` and `"` characters, it’s difficult to see what’s going on. For more complicated string combining, we can use the `format!` macro: -```rust +``` let s1 = String::from("tic"); let s2 = String::from("tac"); let s3 = String::from("toe"); @@ -544,24 +549,25 @@ easier to read and also doesn’t take ownership of any of its parameters. In many other programming languages, accessing individual characters in a string by referencing them by index is a valid and common operation. However, if we try to access parts of a `String` using indexing syntax in Rust, we’ll -get an error. Consider the code in Listing 8-17: +get an error. Consider the invalid code in Listing 8-19: -```rust,ignore +``` let s1 = String::from("hello"); let h = s1[0]; ``` -Listing 8-17: Attempting to use indexing syntax with a String +Listing 8-19: Attempting to use indexing syntax with a String This code will result in the following error: -```text -error: the trait bound `std::string::String: std::ops::Index<_>` is not -satisfied [--explain E0277] - |> - |> let h = s1[0]; - |> ^^^^^ -note: the type `std::string::String` cannot be indexed by `_` +``` +error[E0277]: the trait bound `std::string::String: std::ops::Index<{integer}>` is not satisfied + --> + | +3 | let h = s1[0]; + | ^^^^^ the type `std::string::String` cannot be indexed by `{integer}` + | + = help: the trait `std::ops::Index<{integer}>` is not implemented for `std::string::String` ``` The error and the note tell the story: Rust strings don’t support indexing. But @@ -571,9 +577,9 @@ memory. #### Internal Representation A `String` is a wrapper over a `Vec`. Let’s look at some of our properly -encoded UTF-8 example strings from Listing 8-12. First, this one: +encoded UTF-8 example strings from Listing 8-14. First, this one: -```rust +``` let len = String::from("Hola").len(); ``` @@ -581,17 +587,19 @@ In this case, `len` will be four, which means the `Vec` storing the string “Hola” is four bytes long. Each of these letters takes one byte when encoded in UTF-8. But what about the following line? -```rust +``` let len = String::from("Здравствуйте").len(); ``` -Asked how long the string is, you might say 12. However, Rust’s answer is 24: -that’s the number of bytes it takes to encode “Здравствуйте” in UTF-8, because -each Unicode scalar value takes two bytes of storage. Therefore, an index into -the string’s bytes will not always correlate to a valid Unicode scalar value. -To demonstrate, consider this invalid Rust code: +Note that this string begins with the capital Cyrillic letter Ze, not the +Arabic number 3. Asked how long the string is, you might say 12. However, +Rust’s answer is 24: that’s the number of bytes it takes to encode +“Здравствуйте” in UTF-8, because each Unicode scalar value takes two bytes of +storage. Therefore, an index into the string’s bytes will not always correlate +to a valid Unicode scalar value. To demonstrate, consider this invalid Rust +code: -```rust,ignore +``` let hello = "Здравствуйте"; let answer = &hello[0]; ``` @@ -617,7 +625,7 @@ clusters (the closest thing to what we would call *letters*). If we look at the Hindi word “नमस्ते” written in the Devanagari script, it is ultimately stored as a `Vec` of `u8` values that looks like this: -```text +``` [224, 164, 168, 224, 164, 174, 224, 164, 184, 224, 165, 141, 224, 164, 164, 224, 165, 135] ``` @@ -626,7 +634,7 @@ That’s 18 bytes and is how computers ultimately store this data. If we look at them as Unicode scalar values, which are what Rust’s `char` type is, those bytes look like this: -```text +``` ['न', 'म', 'स', '्', 'त', 'े'] ``` @@ -635,7 +643,7 @@ they’re diacritics that don’t make sense on their own. Finally, if we look a them as grapheme clusters, we’d get what a person would call the four letters that make up the Hindi word: -```text +``` ["न", "म", "स्", "ते"] ``` @@ -659,7 +667,7 @@ be more specific in your indexing and indicate that you want a string slice, rather than indexing using `[]` with a single number, you can use `[]` with a range to create a string slice containing particular bytes: -```rust +``` let hello = "Здравствуйте"; let s = &hello[0..4]; @@ -672,9 +680,8 @@ Earlier, we mentioned that each of these characters was two bytes, which means What would happen if we used `&hello[0..1]`? The answer: Rust will panic at runtime in the same way that accessing an invalid index in a vector does: -```text -thread 'main' panicked at 'index 0 and/or 1 in `Здравствуйте` do not lie on -character boundary', ../src/libcore/str/mod.rs:1694 +``` +thread 'main' panicked at 'byte index 1 is not a char boundary; it is inside 'З' (bytes 0..2) of `Здравствуйте`', src/libcore/str/mod.rs:2188:4 ``` You should use ranges to create string slices with caution, because it can @@ -686,10 +693,10 @@ Fortunately, we can access elements in a string in other ways. If we need to perform operations on individual Unicode scalar values, the best way to do so is to use the `chars` method. Calling `chars` on “नमस्ते” separates -out and returns six values of type `char`, and you can iterate over the result +out and returns six values of type `char`, and we can iterate over the result in order to access each element: -```rust +``` for c in "नमस्ते".chars() { println!("{}", c); } @@ -697,7 +704,7 @@ for c in "नमस्ते".chars() { This code will print the following: -```text +``` न म स @@ -709,7 +716,7 @@ This code will print the following: The `bytes` method returns each raw byte, which might be appropriate for your domain: -```rust +``` for b in "नमस्ते".bytes() { println!("{}", b); } @@ -717,7 +724,7 @@ for b in "नमस्ते".bytes() { This code will print the 18 bytes that make up this `String`, starting with: -```text +``` 224 164 168 @@ -729,8 +736,8 @@ But be sure to remember that valid Unicode scalar values may be made up of more than one byte. Getting grapheme clusters from strings is complex, so this functionality is not -provided by the standard library. Crates are available on *https://crates.io* -if this is the functionality you need. +provided by the standard library. Crates are available on +crates.io at *https://crates.io* if this is the functionality you need. ### Strings Are Not So Simple @@ -745,7 +752,7 @@ cycle. Let’s switch to something a bit less complex: hash maps! -## Hash Maps +## Hash Maps Store Keys Associated with Values The last of our common collections is the *hash map*. The type `HashMap` stores a mapping of keys of type `K` to values of type `V`. It does this via a @@ -767,11 +774,11 @@ As always, check the standard library documentation for more information. ### Creating a New Hash Map We can create an empty hash map with `new` and add elements with `insert`. In -Listing 8-18, we’re keeping track of the scores of two teams whose names are +Listing 8-20, we’re keeping track of the scores of two teams whose names are Blue and Yellow. The Blue team will start with 10 points, and the Yellow team starts with 50: -```rust +``` use std::collections::HashMap; let mut scores = HashMap::new(); @@ -780,13 +787,13 @@ scores.insert(String::from("Blue"), 10); scores.insert(String::from("Yellow"), 50); ``` -Listing 8-18: Creating a new hash map and inserting some keys and values +Listing 8-20: Creating a new hash map and inserting some keys and values Note that we need to first `use` the `HashMap` from the collections portion of the standard library. Of our three common collections, this one is the least -often used, so it’s not included in the features imported automatically in the -prelude. Hash maps also have less support from the standard library; there’s no -built-in macro to construct them, for example. +often used, so it’s not included in the features brought into scope +automatically in the prelude. Hash maps also have less support from the +standard library; there’s no built-in macro to construct them, for example. Just like vectors, hash maps store their data on the heap. This `HashMap` has keys of type `String` and values of type `i32`. Like vectors, hash maps are @@ -799,9 +806,9 @@ vector of tuples, where each tuple consists of a key and its value. The `HashMap`. For example, if we had the team names and initial scores in two separate vectors, we can use the `zip` method to create a vector of tuples where “Blue” is paired with 10, and so forth. Then we can use the `collect` -method to turn that vector of tuples into a `HashMap` as shown in Listing 8-19: +method to turn that vector of tuples into a `HashMap` as shown in Listing 8-21: -```rust +``` use std::collections::HashMap; let teams = vec![String::from("Blue"), String::from("Yellow")]; @@ -810,7 +817,7 @@ let initial_scores = vec![10, 50]; let scores: HashMap<_, _> = teams.iter().zip(initial_scores.iter()).collect(); ``` -Listing 8-19: Creating a hash map from a list of teams and a list of scores +Listing 8-21: Creating a hash map from a list of teams and a list of scores The type annotation `HashMap<_, _>` is needed here because it’s possible to `collect` into many different data structures, and Rust doesn’t know which you @@ -822,9 +829,9 @@ contains based on the types of the data in the vectors. For types that implement the `Copy` trait, like `i32`, the values are copied into the hash map. For owned values like `String`, the values will be moved and -the hash map will be the owner of those values as demonstrated in Listing 8-20: +the hash map will be the owner of those values as demonstrated in Listing 8-22: -```rust +``` use std::collections::HashMap; let field_name = String::from("Favorite color"); @@ -836,7 +843,7 @@ map.insert(field_name, field_value); // see what compiler error you get! ``` -Listing 8-20: Showing that keys and values are owned by the hash map once +Listing 8-22: Showing that keys and values are owned by the hash map once they’re inserted We aren’t able to use the variables `field_name` and `field_value` after @@ -850,9 +857,9 @@ the “Validating References with Lifetimes” section in Chapter 10. ### Accessing Values in a Hash Map We can get a value out of the hash map by providing its key to the `get` method -as shown in Listing 8-21: +as shown in Listing 8-23: -```rust +``` use std::collections::HashMap; let mut scores = HashMap::new(); @@ -864,7 +871,7 @@ let team_name = String::from("Blue"); let score = scores.get(&team_name); ``` -Listing 8-21: Accessing the score for the Blue team stored in the hash map +Listing 8-23: Accessing the score for the Blue team stored in the hash map Here, `score` will have the value that’s associated with the Blue team, and the result will be `Some(&10)`. The result is wrapped in `Some` because `get` @@ -875,7 +882,7 @@ of the ways that we covered in Chapter 6. We can iterate over each key/value pair in a hash map in a similar manner as we do with vectors, using a `for` loop: -```rust +``` use std::collections::HashMap; let mut scores = HashMap::new(); @@ -890,7 +897,7 @@ for (key, value) in &scores { This code will print each pair in an arbitrary order: -```text +``` Yellow: 50 Blue: 10 ``` @@ -910,11 +917,11 @@ of these! If we insert a key and a value into a hash map, and then insert that same key with a different value, the value associated with that key will be replaced. -Even though the code in Listing 8-22 calls `insert` twice, the hash map will +Even though the code in Listing 8-24 calls `insert` twice, the hash map will only contain one key/value pair because we’re inserting the value for the Blue team’s key both times: -```rust +``` use std::collections::HashMap; let mut scores = HashMap::new(); @@ -925,7 +932,7 @@ scores.insert(String::from("Blue"), 25); println!("{:?}", scores); ``` -Listing 8-22: Replacing a value stored with a particular key +Listing 8-24: Replacing a value stored with a particular key This code will print `{"Blue": 25}`. The original value of `10` has been overwritten. @@ -939,9 +946,9 @@ that takes the key we want to check as a parameter. The return value of the or might not exist. Let’s say we want to check whether the key for the Yellow team has a value associated with it. If it doesn’t, we want to insert the value 50, and the same for the Blue team. Using the `entry` API, the code looks like -Listing 8-23: +Listing 8-25: -```rust +``` use std::collections::HashMap; let mut scores = HashMap::new(); @@ -953,7 +960,7 @@ scores.entry(String::from("Blue")).or_insert(50); println!("{:?}", scores); ``` -Listing 8-23: Using the `entry` method to only insert if the key does not +Listing 8-25: Using the `entry` method to only insert if the key does not already have a value The `or_insert` method on `Entry` is defined to return the value for the @@ -962,7 +969,7 @@ as the new value for this key and returns the modified `Entry`. This technique is much cleaner than writing the logic ourselves, and in addition, plays more nicely with the borrow checker. -Running the code in Listing 8-23 will print `{"Yellow": 50, "Blue": 10}`. The +Running the code in Listing 8-25 will print `{"Yellow": 50, "Blue": 10}`. The first call to `entry` will insert the key for the Yellow team with the value `50` because the Yellow team doesn’t have a value already. The second call to `entry` will not change the hash map because the Blue team already has the @@ -971,13 +978,13 @@ value `10`. #### Updating a Value Based on the Old Value Another common use case for hash maps is to look up a key’s value and then -update it based on the old value. For instance, Listing 8-24 shows code that +update it based on the old value. For instance, Listing 8-26 shows code that counts how many times each word appears in some text. We use a hash map with the words as keys and increment the value to keep track of how many times we’ve seen that word. If it’s the first time we’ve seen a word, we’ll first insert the value `0`: -```rust +``` use std::collections::HashMap; let text = "hello world wonderful world"; @@ -992,7 +999,7 @@ for word in text.split_whitespace() { println!("{:?}", map); ``` -Listing 8-24: Counting occurrences of words using a hash map that stores words +Listing 8-26: Counting occurrences of words using a hash map that stores words and counts This code will print `{"world": 2, "hello": 1, "wonderful": 1}`. The @@ -1012,8 +1019,9 @@ that the default hash function is too slow for your purposes, you can switch to another function by specifying a different *hasher*. A hasher is a type that implements the `BuildHasher` trait. We’ll talk about traits and how to implement them in Chapter 10. You don’t necessarily have to implement your own -hasher from scratch; *https://crates.io* has libraries shared by other Rust -users that provide hashers implementing many common hashing algorithms. +hasher from scratch; crates.io at *https://crates.io* has libraries shared by +other Rust users that provide hashers implementing many common hashing +algorithms. ## Summary diff --git a/src/doc/book/second-edition/nostarch/chapter09.md b/src/doc/book/second-edition/nostarch/chapter09.md index 1cc8c7d926..361970734d 100644 --- a/src/doc/book/second-edition/nostarch/chapter09.md +++ b/src/doc/book/second-edition/nostarch/chapter09.md @@ -159,48 +159,42 @@ $ RUST_BACKTRACE=1 cargo run Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs Running `target/debug/panic` thread 'main' panicked at 'index out of bounds: the len is 3 but the index is -100', /stable-dist-rustc/build/src/libcollections/vec.rs:1392 +100', /checkout/src/liballoc/vec.rs:1555:10 stack backtrace: - 1: 0x560ed90ec04c - -std::sys::imp::backtrace::tracing::imp::write::hf33ae72d0baa11ed - at -/stable-dist-rustc/build/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:42 - 2: 0x560ed90ee03e - -std::panicking::default_hook::{{closure}}::h59672b733cc6a455 - at /stable-dist-rustc/build/src/libstd/panicking.rs:351 - 3: 0x560ed90edc44 - std::panicking::default_hook::h1670459d2f3f8843 - at /stable-dist-rustc/build/src/libstd/panicking.rs:367 - 4: 0x560ed90ee41b - -std::panicking::rust_panic_with_hook::hcf0ddb069e7abcd7 - at /stable-dist-rustc/build/src/libstd/panicking.rs:555 - 5: 0x560ed90ee2b4 - std::panicking::begin_panic::hd6eb68e27bdf6140 - at /stable-dist-rustc/build/src/libstd/panicking.rs:517 - 6: 0x560ed90ee1d9 - std::panicking::begin_panic_fmt::abcd5965948b877f8 - at /stable-dist-rustc/build/src/libstd/panicking.rs:501 - 7: 0x560ed90ee167 - rust_begin_unwind - at /stable-dist-rustc/build/src/libstd/panicking.rs:477 - 8: 0x560ed911401d - core::panicking::panic_fmt::hc0f6d7b2c300cdd9 - at /stable-dist-rustc/build/src/libcore/panicking.rs:69 - 9: 0x560ed9113fc8 - -core::panicking::panic_bounds_check::h02a4af86d01b3e96 - at /stable-dist-rustc/build/src/libcore/panicking.rs:56 - 10: 0x560ed90e71c5 - as -core::ops::Index>::index::h98abcd4e2a74c41 - at -/stable-dist-rustc/build/src/libcollections/vec.rs:1392 - 11: 0x560ed90e727a - panic::main::h5d6b77c20526bc35 - at /home/you/projects/panic/src/main.rs:4 - 12: 0x560ed90f5d6a - __rust_maybe_catch_panic - at -/stable-dist-rustc/build/src/libpanic_unwind/lib.rs:98 - 13: 0x560ed90ee926 - std::rt::lang_start::hd7c880a37a646e81 - at /stable-dist-rustc/build/src/libstd/panicking.rs:436 - at /stable-dist-rustc/build/src/libstd/panic.rs:361 - at /stable-dist-rustc/build/src/libstd/rt.rs:57 - 14: 0x560ed90e7302 - main - 15: 0x7f0d53f16400 - __libc_start_main - 16: 0x560ed90e6659 - _start - 17: 0x0 - + 0: std::sys::imp::backtrace::tracing::imp::unwind_backtrace + at /checkout/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:49 + 1: std::sys_common::backtrace::_print + at /checkout/src/libstd/sys_common/backtrace.rs:71 + 2: std::panicking::default_hook::{{closure}} + at /checkout/src/libstd/sys_common/backtrace.rs:60 + at /checkout/src/libstd/panicking.rs:381 + 3: std::panicking::default_hook + at /checkout/src/libstd/panicking.rs:397 + 4: std::panicking::rust_panic_with_hook + at /checkout/src/libstd/panicking.rs:611 + 5: std::panicking::begin_panic + at /checkout/src/libstd/panicking.rs:572 + 6: std::panicking::begin_panic_fmt + at /checkout/src/libstd/panicking.rs:522 + 7: rust_begin_unwind + at /checkout/src/libstd/panicking.rs:498 + 8: core::panicking::panic_fmt + at /checkout/src/libcore/panicking.rs:71 + 9: core::panicking::panic_bounds_check + at /checkout/src/libcore/panicking.rs:58 + 10: as core::ops::index::Index>::index + at /checkout/src/liballoc/vec.rs:1555 + 11: panic::main + at ./src/main.rs:4 + 12: __rust_maybe_catch_panic + at /checkout/src/libpanic_unwind/lib.rs:99 + 13: std::rt::lang_start + at /checkout/src/libstd/panicking.rs:459 + at /checkout/src/libstd/panic.rs:361 + at /checkout/src/libstd/rt.rs:61 + 14: main + 15: __libc_start_main + 16: ``` Listing 9-2: The backtrace generated by a call to `panic!` displayed when the diff --git a/src/doc/book/second-edition/nostarch/chapter17.md b/src/doc/book/second-edition/nostarch/chapter17.md index 3e8ab13f47..b7639b83d3 100644 --- a/src/doc/book/second-edition/nostarch/chapter17.md +++ b/src/doc/book/second-edition/nostarch/chapter17.md @@ -5,23 +5,34 @@ Object-Oriented Programming is a way of modeling programs that originated with Simula in the 1960s and became popular with C++ in the 1990s. There are many -competing definitions for what OOP is: under some definitions, Rust is -object-oriented; under other definitions, Rust is not. In this chapter, we’ll +competing definitions for what counts as OOP, and under some definitions, Rust +is object-oriented; under other definitions, it is not. In this chapter, we’ll explore some characteristics that are commonly considered to be object-oriented -and how those characteristics translate to idiomatic Rust. +and how those characteristics translate to idiomatic Rust. We’ll then show you +how to implement an object-oriented design pattern in Rust and discuss the +tradeoffs of doing so versus implementing a solution using some of Rust’s +strengths instead. ## What Does Object-Oriented Mean? -There isn’t consensus in the programming community about the features a -language needs to have in order to be called object-oriented. Rust is -influenced by many different programming paradigms; we explored the features it -has that come from functional programming in Chapter 13. Some of the -characteristics that object-oriented programming languages tend to share are -objects, encapsulation, and inheritance. Let’s take a look at what each of -those mean and whether Rust supports them. +There’s no consensus in the programming community about what features a +language needs in order to be called object-oriented. Rust is influenced by +many different programming paradigms including OOP; we explored, for example, +the features that came from functional programming in Chapter 13. Arguably, +object-oriented programming languages do tend to share certain common +characteristics, namely objects, encapsulation, and inheritance. Let’s take a +look at what each of those mean and whether Rust supports them. ### Objects Contain Data and Behavior + + + The book “Design Patterns: Elements of Reusable Object-Oriented Software,” colloquially referred to as “The Gang of Four book,” is a catalog of object-oriented design patterns. It defines object-oriented programming in this @@ -34,27 +45,27 @@ way: Under this definition, then, Rust is object-oriented: structs and enums have data and `impl` blocks provide methods on structs and enums. Even though structs and enums with methods aren’t *called* objects, they provide the same -functionality that objects do, using the Gang of Four’s definition of objects. +functionality, under the Gang of Four’s definition of objects. ### Encapsulation that Hides Implementation Details Another aspect commonly associated with object-oriented programming is the idea -of *encapsulation*: the implementation details of an object aren’t accessible -to code using that object. The only way to interact with an object is through -the public API the object offers; code using the object should not be able to -reach into the object’s internals and change data or behavior directly. -Encapsulation enables changing and refactoring an object’s internals without +of *encapsulation*: that the implementation details of an object aren’t +accessible to code using that object. The only way to interact with an object +therefore is through its public API; code using the object should not be able +to reach into the object’s internals and change data or behavior directly. This +enables the programmer to change and refactor an object’s internals without needing to change the code that uses the object. -As we discussed in Chapter 7, we can use the `pub` keyword to decide what -modules, types, functions, and methods in our code should be public, and by -default, everything is private. For example, we can define a struct -`AveragedCollection` that has a field containing a vector of `i32` values. The -struct can also have a field that knows the average of the values in the vector -so that whenever anyone wants to know the average of the values that the struct -has in its vector, we don’t have to compute it on-demand. `AveragedCollection` -will cache the calculated average for us. Listing 17-1 has the definition of -the `AveragedCollection` struct: +We discussed an example of this in Chapter 7: We can use the `pub` keyword to +decide what modules, types, functions, and methods in our code should be +public, and by default everything else is private. For example, we can define a +struct `AveragedCollection` that has a field containing a vector of `i32` +values. The struct can also have a field that contains the average of the +values in the vector, meaning the average doesn’t have to be computed on-demand +whenever anyone needs it. In other words, `AveragedCollection` will cache the +calculated average for us. Listing 17-1 has the definition of the +`AveragedCollection` struct: Filename: src/lib.rs @@ -68,11 +79,11 @@ pub struct AveragedCollection { Listing 17-1: An `AveragedCollection` struct that maintains a list of integers and the average of the items in the collection. -Note that the struct itself is marked `pub` so that other code may use this -struct, but the fields within the struct remain private. This is important in -this case because we want to ensure that whenever a value is added or removed -from the list, we also update the average. We do this by implementing `add`, -`remove`, and `average` methods on the struct as shown in Listing 17-2: +The struct itself is marked `pub` so that other code may use it, but the fields +within the struct remain private. This is important in this case because we +want to ensure that whenever a value is added or removed from the list, the +average is also updated. We do this by implementing `add`, `remove`, and +`average` methods on the struct as shown in Listing 17-2: Filename: src/lib.rs @@ -105,163 +116,164 @@ impl AveragedCollection { } ``` -Listing 17-2: Implementations of the public methods -`add`, `remove`, and `average` on `AveragedCollection` +Listing 17-2: Implementations of the public methods `add`, `remove`, and +`average` on `AveragedCollection` The public methods `add`, `remove`, and `average` are the only way to modify an -instance of a `AveragedCollection`. When an item is added to `list` using the -`add` method or removed using the `remove` method, the implementations of those -methods call the private `update_average` method that takes care of updating -the `average` field as well. Because the `list` and `average` fields are -private, there’s no way for external code to add or remove items to the `list` -field directly, which could cause the `average` field to get out of sync. The -`average` method returns the value in the `average` field, which allows -external code to read the `average` but not modify it. +instance of `AveragedCollection`. When an item is added to `list` using the +`add` method or removed using the `remove` method, the implementations of each +call the private `update_average` method that takes care of updating the +`average` field as well. + +We leave the `list` and `average` fields private so that there’s no way for +external code to add or remove items to the `list` field directly, otherwise +the `average` field might become out of sync when the `list` changes. The +`average` method returns the value in the `average` field, allowing external +code to read the `average` but not modify it. Because we’ve encapsulated the implementation details of `AveragedCollection`, -we could also change aspects like using a different data structure used for the -`list` to use a `HashSet` instead of a `Vec`, for instance. As long as the -signatures of the `add`, `remove`, and `average` public methods stayed the same, -code using `AveragedCollection` wouldn’t need to change. This wouldn’t -necessarily be the case if we exposed `list` to external code: `HashSet` and -`Vec` have different methods for adding and removing items, so the external +we can easily change aspects like the data structure in the future. For +instance, we could use a `HashSet` instead of a `Vec` for the `list` field. As +long as the signatures of the `add`, `remove`, and `average` public methods +stay the same, code using `AveragedCollection` wouldn’t need to change. If we +made `list` public instead, this wouldn’t necessarily be the case: `HashSet` +and `Vec` have different methods for adding and removing items, so the external code would likely have to change if it was modifying `list` directly. If encapsulation is a required aspect for a language to be considered -object-oriented, then Rust meets that requirement. Using `pub` or not for -different parts of code enables encapsulation of implementation details. +object-oriented, then Rust meets that requirement. The option to use `pub` or +not for different parts of code enables encapsulation of implementation details. ### Inheritance as a Type System and as Code Sharing -*Inheritance* is a mechanism that some programming languages provide whereby an -object can be defined to inherit from another object’s definition, thus gaining -the parent object’s data and behavior without having to define those again. -Inheritance is a characteristic that is part of some people’s definitions of -what an OOP language is. +*Inheritance* is a mechanism whereby an object can inherit from another +object’s definition, thus gaining the parent object’s data and behavior without +you having to define them again. If a language must have inheritance to be an object-oriented language, then -Rust is not object-oriented. There is not a way to define a struct that -inherits from another struct in order to gain the parent struct’s fields and -method implementations. However, if you’re used to having inheritance in your -programming toolbox, there are other solutions in Rust depending on the reason -you want to use inheritance. - -There are two main reasons to reach for inheritance. The first is to be able to -re-use code: once a particular behavior is implemented for one type, -inheritance can enable re-using that implementation for a different type. Rust -code can be shared using default trait method implementations instead, which we -saw in Listing 10-14 when we added a default implementation of the `summary` -method on the `Summarizable` trait. Any type implementing the `Summarizable` -trait would have the `summary` method available on it without any further code. -This is similar to a parent class having an implementation of a method, and a -child class inheriting from the parent class also having the implementation of -the method due to the inheritance. We can also choose to override the default -implementation of the `summary` method when we implement the `Summarizable` -trait, which is similar to a child class overriding the implementation of a -method inherited from a parent class. - -The second reason to use inheritance is with the type system: to express that a -child type can be used in the same places that the parent type can be used. -This is also called *polymorphism*, which means that multiple objects can be -substituted for each other at runtime if they have the same shape. +Rust is not. There is no way to define a struct that inherits the parent +struct’s fields and method implementations. However, if you’re used to having +inheritance in your programming toolbox, there are other solutions in Rust +depending on your reason for reaching for inheritance in the first place. + +There are two main reasons to choose inheritance. The first is for re-use of +code: you can implement particular behavior for one type, and inheritance +enables you to re-use that implementation for a different type. Rust code can +be shared using default trait method implementations instead, which we saw in +Listing 10-15 when we added a default implementation of the `summary` method on +the `Summarizable` trait. Any type implementing the `Summarizable` trait would +have the `summary` method available on it without any further code. This is +similar to a parent class having an implementation of a method, and an +inheriting child class then also having the implementation of the method. We +can also choose to override the default implementation of the `summary` method +when we implement the `Summarizable` trait, similar to a child class overriding +the implementation of a method inherited from a parent class. + +The second reason to use inheritance relates to the type system: to enable a +child type to be used in the same places as the parent type. This is also +called *polymorphism*, which means that multiple objects can be substituted for +each other at runtime if they share certain characteristics. + + + -> While many people use “polymorphism” to describe inheritance, it’s actually -> a specific kind of polymorphism, called “sub-type polymorphism.” There are -> other forms as well; a generic parameter with a trait bound in Rust is -> also polymorphism, more specifically “parametric polymorphism.” The exact -> details between the different kinds of polymorphism aren’t crucial here, -> so don’t worry too much about the details: just know that Rust has multiple -> polymorphism-related features, unlike many OOP languages. +> Polymorphism +> +> To many people, polymorphism is synonymous with inheritance. But it’s +> actually a more general concept that refers to code that can work with data +> of multiple types. For inheritance, those types are generally subclasses. +> Rust instead uses generics to abstract over different possible types, and +> trait bounds to impose constraints on what those types must provide. This is +> sometimes called *bounded parametric polymorphism*. -To support this sort of pattern, Rust has *trait objects* so that we can -specify that we would like values of any type, as long as the values implement -a particular trait. - Inheritance has recently fallen out of favor as a programming design solution -in many programming languages. Using inheritance to re-use some code can -require more code to be shared than you actually need. Subclasses shouldn’t -always share all characteristics of their parent class, but inheritance means -the subclass gets all of its parent’s data and behavior. This can make a -program’s design less flexible, and creates the possibility of calling methods -on subclasses that don’t make sense or cause errors since the methods don’t -apply to the subclass but must be inherited from the parent class. In addition, -some languages only allow a subclass to inherit from one class, further -restricting the flexibility of a program’s design. - -For these reasons, Rust chose to take a different approach with trait objects +in many programming languages because it’s often at risk of sharing more code +than needs be. Subclasses shouldn’t always share all characteristics of their +parent class, but will do so with inheritance. This can make a program’s design +less flexible, and introduces the possibility of calling methods on subclasses +that don’t make sense or that cause errors because the methods don’t actually +apply to the subclass. Some languages will also only allow a subclass to +inherit from one class, further restricting the flexibility of a program’s +design. + +For these reasons, Rust chose to take a different approach, using trait objects instead of inheritance. Let’s take a look at how trait objects enable polymorphism in Rust. -## Trait Objects for Using Values of Different Types - -In Chapter 8, we talked about a limitation of vectors is that vectors can only -store elements of one type. We had an example in Listing 8-1 where we defined a -`SpreadsheetCell` enum that had variants to hold integers, floats, and text so -that we could store different types of data in each cell and still have a -vector represent a row of cells. This works for cases in which the kinds of -things we want to be able to treat interchangeably are a fixed set of types that -we know when our code gets compiled. - - - -Sometimes we want the set of types that we use to be extensible by the -programmers who use our library. For example, many Graphical User Interface -tools have a concept of a list of items that get drawn on the screen by -iterating through the list and calling a `draw` method on each of the items. -We’re going to create a library crate containing the structure of a GUI library -called `rust_gui`. Our GUI library could include some types for people to use, -such as `Button` or `TextField`. Programmers that use `rust_gui` will want to -create more types that can be drawn on the screen: one programmer might add an -`Image`, while another might add a `SelectBox`. We’re not going to implement a -fully-fledged GUI library in this chapter, but we will show how the pieces -would fit together. - -When we’re writing the `rust_gui` library, we don’t know all the types that -other programmers will want to create, so we can’t define an `enum` containing -all the types. What we do know is that `rust_gui` needs to be able to keep -track of a bunch of values of all these different types, and it needs to be -able to call a `draw` method on each of these values. Our GUI library doesn’t -need to know what will happen exactly when we call the `draw` method, just that -the value will have that method available for us to call. - -In a language with inheritance, we might define a class named `Component` that -has a method named `draw` on it. The other classes like `Button`, `Image`, and -`SelectBox` would inherit from `Component` and thus inherit the `draw` method. -They could each override the `draw` method to define their custom behavior, but -the framework could treat all of the types as if they were `Component` -instances and call `draw` on them. - -### Defining a Trait for the Common Behavior - -In Rust, though, we can define a trait that we’ll name `Draw` and that will -have one method named `draw`. Then we can define a vector that takes a *trait -object*, which is a trait behind some sort of pointer, such as a `&` reference -or a `Box` smart pointer. - -We mentioned that we don’t call structs and enums “objects” to distinguish -structs and enums from other languages’ objects. The data in the struct or enum -fields and the behavior in `impl` blocks is separated, as opposed to other -languages that have data and behavior combined into one concept called an -object. Trait objects *are* more like objects in other languages, in the sense -that they combine the data made up of the pointer to a concrete object with the -behavior of the methods defined in the trait. However, trait objects are -different from objects in other languages because we can’t add data to a trait -object. Trait objects aren’t as generally useful as objects in other languages: -their purpose is to allow abstraction across common behavior. - -A trait defines behavior that we need in a given situation. We can then use a -trait as a trait object in places where we would use a concrete type or a -generic type. Rust’s type system will ensure that any value we substitute in -for the trait object will implement the methods of the trait. Then we don’t -need to know all the possible types at compile time, and we can treat all the -instances the same way. Listing 17-3 shows how to define a trait named `Draw` -with one method named `draw`: +## Using Trait Objects that Allow for Values of Different Types + +In Chapter 8, we mentioned that one limitation of vectors is that they can only +store elements of one type. We created a workaround in Listing 8-10 where we +defined a `SpreadsheetCell` enum that had variants to hold integers, floats, +and text. This meant we could store different types of data in each cell and +still have a vector that represented a row of cells. This is a perfectly good +solution when our interchangeable items are a fixed set of types that we know +when our code gets compiled. + +Sometimes, however, we want the user of our library to be able to extend the +set of types that are valid in a particular situation. To show how we might +achieve this, we’ll create an example Graphical User Interface tool that +iterates through a list of items, calling a `draw` method on each one to drawn +it to the screen; a common technique for GUI tools. We’re going to create a +library crate containing the structure of a GUI library called `rust_gui`. This +crate might include some types for people to use, such as `Button` or +`TextField`. On top of these, users of `rust_gui` will want to create their own +types that can be drawn on the screen: for instance, one programmer might add +an `Image`, another might add a `SelectBox`. + +We won’t implement a fully-fledged GUI library for this example, but will show +how the pieces would fit together. At the time of writing the library, we can’t +know and define all the types other programmers will want to create. What we do +know is that `rust_gui` needs to keep track of a bunch of values that are of +different types, and it needs to be able to call a `draw` method on each of +these differently-typed values. It doesn’t need to know exactly what will +happen when we call the `draw` method, just that the value will have that +method available for us to call. + +To do this in a language with inheritance, we might define a class named +`Component` that has a method named `draw` on it. The other classes like +`Button`, `Image`, and `SelectBox` would inherit from `Component` and thus +inherit the `draw` method. They could each override the `draw` method to define +their custom behavior, but the framework could treat all of the types as if +they were `Component` instances and call `draw` on them. But Rust doesn’t have +inheritance, so we need another way. + +### Defining a Trait for Common Behavior + +To implement the behavior we want `rust_gui` to have, we’ll define a trait +named `Draw` that will have one method named `draw`. Then we can define a +vector that takes a *trait object*. A trait object points to an instance of a +type that implements the trait we specify. We create a trait object by +specifying some sort of pointer, such as a `&` reference or a `Box` smart +pointer, and then specifying the relevant trait (we’ll talk about the reason +trait objects have to use a pointer in Chapter 19 in the section on Dynamically +Sized Types). We can use trait objects in place of a generic or concrete type. +Wherever we use a trait object, Rust’s type system will ensure at compile-time +that any value used in that context will implement the trait object’s trait. +This way we don’t need to know all the possible types at compile time. + + + + +We’ve mentioned that in Rust we refrain from calling structs and enums +“objects” to distinguish them from other languages’ objects. In a struct or +enum, the data in the struct fields and the behavior in `impl` blocks is +separated, whereas in other languages the data and behavior combined into one +concept is often labeled an object. Trait objects, though, *are* more like +objects in other languages, in the sense that they combine both data and +behavior. However, trait objects differ from traditional objects in that we +can’t add data to a trait object. Trait objects aren’t as generally useful as +objects in other languages: their specific purpose is to allow abstraction +across common behavior. + +Listing 17-3 shows how to define a trait named `Draw` with one method named +`draw`: Filename: src/lib.rs @@ -273,11 +285,17 @@ pub trait Draw { Listing 17-3: Definition of the `Draw` trait -This should look familiar since we talked about how to define traits in -Chapter 10. Next comes something new: Listing 17-4 has the definition of a -struct named `Screen` that holds a vector named `components` that are of type -`Box`. That `Box` is a trait object: it’s a stand-in for any type -inside a `Box` that implements the `Draw` trait. +This should look familiar from our discussions on how to define traits in +Chapter 10. Next comes something new: Listing 17-4 defines a struct named +`Screen` that holds a vector named `components`. This vector is of type +`Box`, which is a trait object: it’s a stand-in for any type inside a +`Box` that implements the `Draw` trait. + + + Filename: src/lib.rs @@ -287,11 +305,11 @@ pub struct Screen { } ``` -Listing 17-4: Definition of the `Screen` struct with a `components` field that -holds a vector of trait objects that implement the `Draw` trait +Listing 17-4: Definition of the `Screen` struct with a `components` field +holding a vector of trait objects that implement the `Draw` trait -On the `Screen` struct, we’ll define a method named `run`, which will call the -`draw` method on each of its `components` as shown in Listing 17-5: +On the `Screen` struct, we’ll define a method named `run` that will call the +`draw` method on each of its `components`, as shown in Listing 17-5: Filename: src/lib.rs @@ -308,7 +326,7 @@ impl Screen { Listing 17-5: Implementing a `run` method on `Screen` that calls the `draw` method on each component -This is different than defining a struct that uses a generic type parameter +This works differently to defining a struct that uses a generic type parameter with trait bounds. A generic type parameter can only be substituted with one concrete type at a time, while trait objects allow for multiple concrete types to fill in for the trait object at runtime. For example, we could have defined @@ -334,20 +352,20 @@ impl Screen Listing 17-6: An alternate implementation of the `Screen` struct and its `run` method using generics and trait bounds -This only lets us have a `Screen` instance that has a list of components that -are all of type `Button` or all of type `TextField`. If you’ll only ever have -homogeneous collections, using generics and trait bounds is preferable since -the definitions will be monomorphized at compile time to use the concrete types. +This restricts us to a `Screen` instance that has a list of components all of +type `Button` or all of type `TextField`. If you’ll only ever have homogeneous +collections, using generics and trait bounds is preferable since the +definitions will be monomorphized at compile time to use the concrete types. -With the definition of `Screen` that holds a component list of trait objects in -`Vec>` instead, one `Screen` instance can hold a `Vec` that contains -a `Box